From 2c6d0e104d6522296ec40044713c1cbcc35cc0ff Mon Sep 17 00:00:00 2001 From: TrudeEH Date: Fri, 14 Feb 2025 16:56:31 +0000 Subject: [PATCH 1/6] Migrating notes from Notion - Initial stage --- README.md | 1 + config.yaml | 7 +- content/notes/.obsidian/app.json | 5 + content/notes/.obsidian/appearance.json | 9 + .../notes/.obsidian/community-plugins.json | 8 + content/notes/.obsidian/core-plugins.json | 31 + content/notes/.obsidian/graph.json | 37 + .../obsidian-bulk-rename-plugin/data.json | 13 + .../obsidian-bulk-rename-plugin/main.js | 9163 +++++++ .../obsidian-bulk-rename-plugin/manifest.json | 10 + .../obsidian-bulk-rename-plugin/styles.css | 155 + .../plugins/obsidian-importer/main.js | 228 + .../plugins/obsidian-importer/manifest.json | 10 + .../plugins/obsidian-importer/styles.css | 87 + .../obsidian-languagetool-plugin/main.js | 9 + .../manifest.json | 10 + .../obsidian-languagetool-plugin/styles.css | 204 + .../plugins/obsidian-linter/data.json | 293 + .../.obsidian/plugins/obsidian-linter/main.js | 325 + .../plugins/obsidian-linter/manifest.json | 11 + .../plugins/obsidian-linter/styles.css | 1 + .../obsidian-local-images-plus/main.js | 21405 ++++++++++++++++ .../obsidian-local-images-plus/manifest.json | 11 + .../obsidian-local-images-plus/styles.css | 14 + .../plugins/table-editor-obsidian/data.json | 6 + .../plugins/table-editor-obsidian/main.js | 236 + .../table-editor-obsidian/manifest.json | 17 + .../plugins/table-editor-obsidian/styles.css | 78 + .../.obsidian/themes/Adwaita/manifest.json | 7 + .../notes/.obsidian/themes/Adwaita/theme.css | 744 + content/notes/.obsidian/workspace.json | 239 + content/notes/Notion/CPU Architecture.md | 165 + content/notes/Notion/Databases SQL.md | 324 + content/notes/Notion/Debug-Repair Tools.md | 18 + content/notes/Notion/Debugging GDB.md | 70 + content/notes/Notion/Diodes.md | 109 + content/notes/Notion/JavaScript.md | 13 + content/notes/Notion/Linux Architecture.md | 199 + content/notes/Notion/Logic Gates.md | 125 + content/notes/Notion/Memory.md | 72 + content/notes/algorithms-and-data/bigO.png | Bin 0 -> 249196 bytes content/notes/algorithms-and-data/index.md | 498 + content/notes/algorithms-and-data/trie.png | Bin 0 -> 146557 bytes content/notes/assembly.md | 46 + content/notes/binary-operations/addition.png | Bin 0 -> 8391 bytes .../notes/binary-operations/binarycalc.png | Bin 0 -> 14601 bytes .../binary-operations/hand_addition1.png | Bin 0 -> 10340 bytes .../binary-operations/hand_addition2.png | Bin 0 -> 10315 bytes content/notes/binary-operations/index.md | 392 + content/notes/binary-operations/sb1.png | Bin 0 -> 83917 bytes content/notes/binary-operations/sb10.png | Bin 0 -> 88073 bytes content/notes/binary-operations/sb2.png | Bin 0 -> 25628 bytes content/notes/binary-operations/sb3.png | Bin 0 -> 23185 bytes content/notes/binary-operations/sb4.png | Bin 0 -> 3729 bytes content/notes/binary-operations/sb5.png | Bin 0 -> 15876 bytes content/notes/binary-operations/sb6.png | Bin 0 -> 16189 bytes content/notes/binary-operations/sb7.png | Bin 0 -> 16405 bytes content/notes/binary-operations/sb8.png | Bin 0 -> 7806 bytes content/notes/binary-operations/sb9.png | Bin 0 -> 93096 bytes content/notes/c-language.md | 695 + content/notes/c-snippets.md | 38 + content/notes/compiling.md | 76 + content/notes/encryption.md | 117 + content/notes/flask.md | 345 + content/notes/git.md | 358 + content/notes/html.md | 200 + content/notes/http.md | 141 + content/notes/https-ssl-certs.md | 64 + content/notes/irc.md | 207 + content/notes/linux/index.md | 61 + content/notes/lua.md | 191 + content/notes/macOS.md | 62 + content/notes/pass.md | 118 + content/notes/python.md | 1144 + content/notes/ssh.md | 123 + content/notes/temp/EXT2.png | Bin 0 -> 3358257 bytes content/notes/temp/EXT3.png | Bin 0 -> 2671293 bytes content/notes/temp/freebsd.png | Bin 0 -> 430145 bytes content/notes/temp/image10.png | Bin 0 -> 218099 bytes content/notes/temp/image11.png | Bin 0 -> 224623 bytes content/notes/temp/image12.png | Bin 0 -> 37185 bytes content/notes/temp/image13.png | Bin 0 -> 190143 bytes content/notes/temp/image14.png | Bin 0 -> 218967 bytes content/notes/temp/image15.png | Bin 0 -> 304451 bytes content/notes/temp/image16.png | Bin 0 -> 313132 bytes content/notes/temp/image17.png | Bin 0 -> 123809 bytes content/notes/temp/image18.png | Bin 0 -> 142504 bytes content/notes/temp/image19.png | Bin 0 -> 366359 bytes content/notes/temp/image20.png | Bin 0 -> 365839 bytes content/notes/temp/image21.png | Bin 0 -> 250382 bytes content/notes/temp/image22.png | Bin 0 -> 222059 bytes content/notes/temp/image23.png | Bin 0 -> 210135 bytes content/notes/temp/image24.png | Bin 0 -> 90703 bytes content/notes/temp/image25.png | Bin 0 -> 320575 bytes content/notes/temp/image26.png | Bin 0 -> 325250 bytes content/notes/temp/image27.png | Bin 0 -> 346584 bytes content/notes/temp/image28.png | Bin 0 -> 331898 bytes content/notes/temp/image29.png | Bin 0 -> 191394 bytes content/notes/temp/image30.png | Bin 0 -> 234003 bytes content/notes/temp/image31.png | Bin 0 -> 220696 bytes content/notes/temp/image32.png | Bin 0 -> 99699 bytes content/notes/temp/image33.png | Bin 0 -> 65814 bytes content/notes/temp/image34.png | Bin 0 -> 321705 bytes content/notes/temp/image35.png | Bin 0 -> 304608 bytes content/notes/temp/image36.png | Bin 0 -> 92063 bytes content/notes/temp/image37.png | Bin 0 -> 41936 bytes content/notes/temp/image38.png | Bin 0 -> 61811 bytes content/notes/temp/image39.png | Bin 0 -> 73534 bytes content/notes/temp/image42.png | Bin 0 -> 2874 bytes content/notes/temp/image43.png | Bin 0 -> 3390 bytes content/notes/temp/image44.png | Bin 0 -> 4359 bytes content/notes/temp/image45.png | Bin 0 -> 3756 bytes content/notes/temp/image46.png | Bin 0 -> 4629 bytes content/notes/temp/image47.png | Bin 0 -> 5075 bytes content/notes/temp/image48.png | Bin 0 -> 5668 bytes content/notes/temp/image49.png | Bin 0 -> 5362 bytes content/notes/temp/image5.png | Bin 0 -> 44007 bytes content/notes/temp/image50.png | Bin 0 -> 6509 bytes content/notes/temp/image51.png | Bin 0 -> 12404 bytes content/notes/temp/image52.png | Bin 0 -> 19023 bytes content/notes/temp/image53.png | Bin 0 -> 7303 bytes content/notes/temp/image6.png | Bin 0 -> 61948 bytes content/notes/temp/image68.png | Bin 0 -> 22353 bytes content/notes/temp/image69.png | Bin 0 -> 12946 bytes content/notes/temp/image7.png | Bin 0 -> 158619 bytes content/notes/temp/image70.png | Bin 0 -> 19374 bytes content/notes/temp/image71.png | Bin 0 -> 91569 bytes content/notes/temp/image72.png | Bin 0 -> 34155 bytes content/notes/temp/image73.png | Bin 0 -> 19486 bytes content/notes/temp/image74.png | Bin 0 -> 17585 bytes content/notes/temp/image75.png | Bin 0 -> 17768 bytes content/notes/temp/image76.png | Bin 0 -> 13449 bytes content/notes/temp/image77.png | Bin 0 -> 10737 bytes content/notes/temp/image78.png | Bin 0 -> 11422 bytes content/notes/temp/image79.png | Bin 0 -> 5516 bytes content/notes/temp/image8.png | Bin 0 -> 135219 bytes content/notes/temp/image80.png | Bin 0 -> 21269 bytes content/notes/temp/image81.png | Bin 0 -> 73816 bytes content/notes/temp/image82.png | Bin 0 -> 139676 bytes content/notes/temp/image83.png | Bin 0 -> 39509 bytes content/notes/temp/image84.png | Bin 0 -> 131728 bytes content/notes/temp/image85.png | Bin 0 -> 180120 bytes content/notes/temp/image86.png | Bin 0 -> 64434 bytes content/notes/temp/image87.png | Bin 0 -> 310170 bytes content/notes/temp/image88.png | Bin 0 -> 50691 bytes content/notes/temp/image89.png | Bin 0 -> 333955 bytes content/notes/temp/image9.png | Bin 0 -> 209877 bytes content/notes/temp/image90.png | Bin 0 -> 211809 bytes content/notes/temp/image91.png | Bin 0 -> 356525 bytes content/notes/temp/image92.png | Bin 0 -> 65979 bytes content/notes/temp/image93.png | Bin 0 -> 58985 bytes content/notes/temp/image94.png | Bin 0 -> 132668 bytes content/notes/temp/image95.png | Bin 0 -> 27707 bytes content/notes/temp/js.png | Bin 0 -> 59073 bytes content/notes/temp/nix.svg | 187 + content/notes/temp/pngwing.com.png | Bin 0 -> 67410 bytes content/notes/temp/py.webp | Bin 0 -> 6516 bytes ...ndows-11-icon-logo-png_seeklogo-406208.png | Bin 0 -> 744 bytes content/notes/tmux/index.md | 126 + content/notes/tmux/tmux_design.png | Bin 0 -> 151684 bytes content/notes/transistors/image.png | Bin 0 -> 1034414 bytes content/notes/transistors/image1.png | Bin 0 -> 924952 bytes content/notes/transistors/image2.png | Bin 0 -> 52718 bytes content/notes/transistors/image3.png | Bin 0 -> 209677 bytes content/notes/transistors/image4.png | Bin 0 -> 52919 bytes content/notes/transistors/index.md | 47 + content/notes/wsl2.md | 96 + 167 files changed, 39800 insertions(+), 1 deletion(-) create mode 100644 content/notes/.obsidian/app.json create mode 100644 content/notes/.obsidian/appearance.json create mode 100644 content/notes/.obsidian/community-plugins.json create mode 100644 content/notes/.obsidian/core-plugins.json create mode 100644 content/notes/.obsidian/graph.json create mode 100644 content/notes/.obsidian/plugins/obsidian-bulk-rename-plugin/data.json create mode 100644 content/notes/.obsidian/plugins/obsidian-bulk-rename-plugin/main.js create mode 100644 content/notes/.obsidian/plugins/obsidian-bulk-rename-plugin/manifest.json create mode 100644 content/notes/.obsidian/plugins/obsidian-bulk-rename-plugin/styles.css create mode 100644 content/notes/.obsidian/plugins/obsidian-importer/main.js create mode 100644 content/notes/.obsidian/plugins/obsidian-importer/manifest.json create mode 100644 content/notes/.obsidian/plugins/obsidian-importer/styles.css create mode 100644 content/notes/.obsidian/plugins/obsidian-languagetool-plugin/main.js create mode 100644 content/notes/.obsidian/plugins/obsidian-languagetool-plugin/manifest.json create mode 100644 content/notes/.obsidian/plugins/obsidian-languagetool-plugin/styles.css create mode 100644 content/notes/.obsidian/plugins/obsidian-linter/data.json create mode 100644 content/notes/.obsidian/plugins/obsidian-linter/main.js create mode 100644 content/notes/.obsidian/plugins/obsidian-linter/manifest.json create mode 100644 content/notes/.obsidian/plugins/obsidian-linter/styles.css create mode 100644 content/notes/.obsidian/plugins/obsidian-local-images-plus/main.js create mode 100644 content/notes/.obsidian/plugins/obsidian-local-images-plus/manifest.json create mode 100644 content/notes/.obsidian/plugins/obsidian-local-images-plus/styles.css create mode 100644 content/notes/.obsidian/plugins/table-editor-obsidian/data.json create mode 100644 content/notes/.obsidian/plugins/table-editor-obsidian/main.js create mode 100644 content/notes/.obsidian/plugins/table-editor-obsidian/manifest.json create mode 100644 content/notes/.obsidian/plugins/table-editor-obsidian/styles.css create mode 100644 content/notes/.obsidian/themes/Adwaita/manifest.json create mode 100644 content/notes/.obsidian/themes/Adwaita/theme.css create mode 100644 content/notes/.obsidian/workspace.json create mode 100644 content/notes/Notion/CPU Architecture.md create mode 100644 content/notes/Notion/Databases SQL.md create mode 100644 content/notes/Notion/Debug-Repair Tools.md create mode 100644 content/notes/Notion/Debugging GDB.md create mode 100644 content/notes/Notion/Diodes.md create mode 100644 content/notes/Notion/JavaScript.md create mode 100644 content/notes/Notion/Linux Architecture.md create mode 100644 content/notes/Notion/Logic Gates.md create mode 100644 content/notes/Notion/Memory.md create mode 100644 content/notes/algorithms-and-data/bigO.png create mode 100644 content/notes/algorithms-and-data/index.md create mode 100644 content/notes/algorithms-and-data/trie.png create mode 100644 content/notes/assembly.md create mode 100644 content/notes/binary-operations/addition.png create mode 100644 content/notes/binary-operations/binarycalc.png create mode 100644 content/notes/binary-operations/hand_addition1.png create mode 100644 content/notes/binary-operations/hand_addition2.png create mode 100644 content/notes/binary-operations/index.md create mode 100644 content/notes/binary-operations/sb1.png create mode 100644 content/notes/binary-operations/sb10.png create mode 100644 content/notes/binary-operations/sb2.png create mode 100644 content/notes/binary-operations/sb3.png create mode 100644 content/notes/binary-operations/sb4.png create mode 100644 content/notes/binary-operations/sb5.png create mode 100644 content/notes/binary-operations/sb6.png create mode 100644 content/notes/binary-operations/sb7.png create mode 100644 content/notes/binary-operations/sb8.png create mode 100644 content/notes/binary-operations/sb9.png create mode 100644 content/notes/c-language.md create mode 100644 content/notes/c-snippets.md create mode 100644 content/notes/compiling.md create mode 100644 content/notes/encryption.md create mode 100644 content/notes/flask.md create mode 100644 content/notes/git.md create mode 100644 content/notes/html.md create mode 100644 content/notes/http.md create mode 100644 content/notes/https-ssl-certs.md create mode 100644 content/notes/irc.md create mode 100644 content/notes/linux/index.md create mode 100644 content/notes/lua.md create mode 100644 content/notes/macOS.md create mode 100644 content/notes/pass.md create mode 100644 content/notes/python.md create mode 100644 content/notes/ssh.md create mode 100644 content/notes/temp/EXT2.png create mode 100644 content/notes/temp/EXT3.png create mode 100644 content/notes/temp/freebsd.png create mode 100644 content/notes/temp/image10.png create mode 100644 content/notes/temp/image11.png create mode 100644 content/notes/temp/image12.png create mode 100644 content/notes/temp/image13.png create mode 100644 content/notes/temp/image14.png create mode 100644 content/notes/temp/image15.png create mode 100644 content/notes/temp/image16.png create mode 100644 content/notes/temp/image17.png create mode 100644 content/notes/temp/image18.png create mode 100644 content/notes/temp/image19.png create mode 100644 content/notes/temp/image20.png create mode 100644 content/notes/temp/image21.png create mode 100644 content/notes/temp/image22.png create mode 100644 content/notes/temp/image23.png create mode 100644 content/notes/temp/image24.png create mode 100644 content/notes/temp/image25.png create mode 100644 content/notes/temp/image26.png create mode 100644 content/notes/temp/image27.png create mode 100644 content/notes/temp/image28.png create mode 100644 content/notes/temp/image29.png create mode 100644 content/notes/temp/image30.png create mode 100644 content/notes/temp/image31.png create mode 100644 content/notes/temp/image32.png create mode 100644 content/notes/temp/image33.png create mode 100644 content/notes/temp/image34.png create mode 100644 content/notes/temp/image35.png create mode 100644 content/notes/temp/image36.png create mode 100644 content/notes/temp/image37.png create mode 100644 content/notes/temp/image38.png create mode 100644 content/notes/temp/image39.png create mode 100644 content/notes/temp/image42.png create mode 100644 content/notes/temp/image43.png create mode 100644 content/notes/temp/image44.png create mode 100644 content/notes/temp/image45.png create mode 100644 content/notes/temp/image46.png create mode 100644 content/notes/temp/image47.png create mode 100644 content/notes/temp/image48.png create mode 100644 content/notes/temp/image49.png create mode 100644 content/notes/temp/image5.png create mode 100644 content/notes/temp/image50.png create mode 100644 content/notes/temp/image51.png create mode 100644 content/notes/temp/image52.png create mode 100644 content/notes/temp/image53.png create mode 100644 content/notes/temp/image6.png create mode 100644 content/notes/temp/image68.png create mode 100644 content/notes/temp/image69.png create mode 100644 content/notes/temp/image7.png create mode 100644 content/notes/temp/image70.png create mode 100644 content/notes/temp/image71.png create mode 100644 content/notes/temp/image72.png create mode 100644 content/notes/temp/image73.png create mode 100644 content/notes/temp/image74.png create mode 100644 content/notes/temp/image75.png create mode 100644 content/notes/temp/image76.png create mode 100644 content/notes/temp/image77.png create mode 100644 content/notes/temp/image78.png create mode 100644 content/notes/temp/image79.png create mode 100644 content/notes/temp/image8.png create mode 100644 content/notes/temp/image80.png create mode 100644 content/notes/temp/image81.png create mode 100644 content/notes/temp/image82.png create mode 100644 content/notes/temp/image83.png create mode 100644 content/notes/temp/image84.png create mode 100644 content/notes/temp/image85.png create mode 100644 content/notes/temp/image86.png create mode 100644 content/notes/temp/image87.png create mode 100644 content/notes/temp/image88.png create mode 100644 content/notes/temp/image89.png create mode 100644 content/notes/temp/image9.png create mode 100644 content/notes/temp/image90.png create mode 100644 content/notes/temp/image91.png create mode 100644 content/notes/temp/image92.png create mode 100644 content/notes/temp/image93.png create mode 100644 content/notes/temp/image94.png create mode 100644 content/notes/temp/image95.png create mode 100644 content/notes/temp/js.png create mode 100644 content/notes/temp/nix.svg create mode 100644 content/notes/temp/pngwing.com.png create mode 100644 content/notes/temp/py.webp create mode 100644 content/notes/temp/windows-11-icon-logo-png_seeklogo-406208.png create mode 100644 content/notes/tmux/index.md create mode 100644 content/notes/tmux/tmux_design.png create mode 100644 content/notes/transistors/image.png create mode 100644 content/notes/transistors/image1.png create mode 100644 content/notes/transistors/image2.png create mode 100644 content/notes/transistors/image3.png create mode 100644 content/notes/transistors/image4.png create mode 100644 content/notes/transistors/index.md create mode 100644 content/notes/wsl2.md diff --git a/README.md b/README.md index 4c0bb48..8578d62 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ ## Start Server ```sh +git submodule update --init --recursive hugo server --disableFastRender -D #D to include drafts ``` diff --git a/config.yaml b/config.yaml index d1f91fe..e6940bd 100644 --- a/config.yaml +++ b/config.yaml @@ -1,6 +1,6 @@ baseURL: "https://trude.dev" title: trude.dev -paginate: 5 +pagerSize: 5 theme: PaperMod copyright: "Open-source - MIT License" #canonifyURLs: true @@ -36,6 +36,7 @@ params: DateFormat: "January 2, 2006" defaultTheme: auto # dark, light disableThemeToggle: false + social: true ShowReadingTime: true ShowShareButtons: true @@ -125,6 +126,10 @@ params: menu: main: + - identifier: notes + name: Notes + url: /notes/ + weight: 5 - identifier: categories name: Posts url: /posts/ diff --git a/content/notes/.obsidian/app.json b/content/notes/.obsidian/app.json new file mode 100644 index 0000000..637902a --- /dev/null +++ b/content/notes/.obsidian/app.json @@ -0,0 +1,5 @@ +{ + "promptDelete": false, + "tabSize": 2, + "alwaysUpdateLinks": true +} \ No newline at end of file diff --git a/content/notes/.obsidian/appearance.json b/content/notes/.obsidian/appearance.json new file mode 100644 index 0000000..992ecb1 --- /dev/null +++ b/content/notes/.obsidian/appearance.json @@ -0,0 +1,9 @@ +{ + "accentColor": "#f5bd5c", + "cssTheme": "Adwaita", + "interfaceFontFamily": "Adwaita Sans", + "textFontFamily": "Adwaita Sans", + "monospaceFontFamily": "Adwaita Mono", + "nativeMenus": false, + "baseFontSize": 16 +} \ No newline at end of file diff --git a/content/notes/.obsidian/community-plugins.json b/content/notes/.obsidian/community-plugins.json new file mode 100644 index 0000000..2203720 --- /dev/null +++ b/content/notes/.obsidian/community-plugins.json @@ -0,0 +1,8 @@ +[ + "obsidian-importer", + "obsidian-linter", + "table-editor-obsidian", + "obsidian-languagetool-plugin", + "obsidian-local-images-plus", + "obsidian-bulk-rename-plugin" +] \ No newline at end of file diff --git a/content/notes/.obsidian/core-plugins.json b/content/notes/.obsidian/core-plugins.json new file mode 100644 index 0000000..53d4d11 --- /dev/null +++ b/content/notes/.obsidian/core-plugins.json @@ -0,0 +1,31 @@ +{ + "file-explorer": true, + "global-search": true, + "switcher": true, + "graph": true, + "backlink": true, + "canvas": true, + "outgoing-link": true, + "tag-pane": true, + "properties": false, + "page-preview": true, + "daily-notes": true, + "templates": true, + "note-composer": true, + "command-palette": true, + "slash-command": true, + "editor-status": true, + "bookmarks": true, + "markdown-importer": false, + "zk-prefixer": false, + "random-note": false, + "outline": true, + "word-count": true, + "slides": true, + "audio-recorder": false, + "workspaces": false, + "file-recovery": true, + "publish": false, + "sync": false, + "webviewer": false +} \ No newline at end of file diff --git a/content/notes/.obsidian/graph.json b/content/notes/.obsidian/graph.json new file mode 100644 index 0000000..c879de5 --- /dev/null +++ b/content/notes/.obsidian/graph.json @@ -0,0 +1,37 @@ +{ + "collapse-filter": false, + "search": "", + "showTags": false, + "showAttachments": false, + "hideUnresolved": false, + "showOrphans": true, + "collapse-color-groups": false, + "colorGroups": [ + { + "query": "path:Notion ", + "color": { + "a": 1, + "rgb": 14701138 + } + }, + { + "query": "path:temp ", + "color": { + "a": 1, + "rgb": 16711680 + } + } + ], + "collapse-display": false, + "showArrow": false, + "textFadeMultiplier": 0, + "nodeSizeMultiplier": 1, + "lineSizeMultiplier": 1, + "collapse-forces": true, + "centerStrength": 0.518713248970312, + "repelStrength": 10, + "linkStrength": 1, + "linkDistance": 250, + "scale": 0.12668834340524918, + "close": true +} \ No newline at end of file diff --git a/content/notes/.obsidian/plugins/obsidian-bulk-rename-plugin/data.json b/content/notes/.obsidian/plugins/obsidian-bulk-rename-plugin/data.json new file mode 100644 index 0000000..f93824f --- /dev/null +++ b/content/notes/.obsidian/plugins/obsidian-bulk-rename-plugin/data.json @@ -0,0 +1,13 @@ +{ + "folderName": "temp", + "fileNames": [], + "existingSymbol": "", + "replacePattern": "", + "regExpState": { + "regExp": "", + "flags": [], + "withRegExpForReplaceSymbols": false + }, + "tags": [], + "viewType": "folder" +} \ No newline at end of file diff --git a/content/notes/.obsidian/plugins/obsidian-bulk-rename-plugin/main.js b/content/notes/.obsidian/plugins/obsidian-bulk-rename-plugin/main.js new file mode 100644 index 0000000..b486176 --- /dev/null +++ b/content/notes/.obsidian/plugins/obsidian-bulk-rename-plugin/main.js @@ -0,0 +1,9163 @@ +/* +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 __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( + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// node_modules/core-js-pure/internals/global.js +var require_global = __commonJS({ + "node_modules/core-js-pure/internals/global.js"(exports, module2) { + var check = function(it) { + return it && it.Math == Math && it; + }; + module2.exports = check(typeof globalThis == "object" && globalThis) || check(typeof window == "object" && window) || check(typeof self == "object" && self) || check(typeof global == "object" && global) || function() { + return this; + }() || Function("return this")(); + } +}); + +// node_modules/core-js-pure/internals/fails.js +var require_fails = __commonJS({ + "node_modules/core-js-pure/internals/fails.js"(exports, module2) { + module2.exports = function(exec) { + try { + return !!exec(); + } catch (error) { + return true; + } + }; + } +}); + +// node_modules/core-js-pure/internals/function-bind-native.js +var require_function_bind_native = __commonJS({ + "node_modules/core-js-pure/internals/function-bind-native.js"(exports, module2) { + var fails = require_fails(); + module2.exports = !fails(function() { + var test = function() { + }.bind(); + return typeof test != "function" || test.hasOwnProperty("prototype"); + }); + } +}); + +// node_modules/core-js-pure/internals/function-apply.js +var require_function_apply = __commonJS({ + "node_modules/core-js-pure/internals/function-apply.js"(exports, module2) { + var NATIVE_BIND = require_function_bind_native(); + var FunctionPrototype = Function.prototype; + var apply = FunctionPrototype.apply; + var call = FunctionPrototype.call; + module2.exports = typeof Reflect == "object" && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function() { + return call.apply(apply, arguments); + }); + } +}); + +// node_modules/core-js-pure/internals/function-uncurry-this.js +var require_function_uncurry_this = __commonJS({ + "node_modules/core-js-pure/internals/function-uncurry-this.js"(exports, module2) { + var NATIVE_BIND = require_function_bind_native(); + var FunctionPrototype = Function.prototype; + var bind = FunctionPrototype.bind; + var call = FunctionPrototype.call; + var uncurryThis = NATIVE_BIND && bind.bind(call, call); + module2.exports = NATIVE_BIND ? function(fn2) { + return fn2 && uncurryThis(fn2); + } : function(fn2) { + return fn2 && function() { + return call.apply(fn2, arguments); + }; + }; + } +}); + +// node_modules/core-js-pure/internals/is-callable.js +var require_is_callable = __commonJS({ + "node_modules/core-js-pure/internals/is-callable.js"(exports, module2) { + module2.exports = function(argument) { + return typeof argument == "function"; + }; + } +}); + +// node_modules/core-js-pure/internals/descriptors.js +var require_descriptors = __commonJS({ + "node_modules/core-js-pure/internals/descriptors.js"(exports, module2) { + var fails = require_fails(); + module2.exports = !fails(function() { + return Object.defineProperty({}, 1, { get: function() { + return 7; + } })[1] != 7; + }); + } +}); + +// node_modules/core-js-pure/internals/function-call.js +var require_function_call = __commonJS({ + "node_modules/core-js-pure/internals/function-call.js"(exports, module2) { + var NATIVE_BIND = require_function_bind_native(); + var call = Function.prototype.call; + module2.exports = NATIVE_BIND ? call.bind(call) : function() { + return call.apply(call, arguments); + }; + } +}); + +// node_modules/core-js-pure/internals/object-property-is-enumerable.js +var require_object_property_is_enumerable = __commonJS({ + "node_modules/core-js-pure/internals/object-property-is-enumerable.js"(exports) { + "use strict"; + var $propertyIsEnumerable = {}.propertyIsEnumerable; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1); + exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; + } : $propertyIsEnumerable; + } +}); + +// node_modules/core-js-pure/internals/create-property-descriptor.js +var require_create_property_descriptor = __commonJS({ + "node_modules/core-js-pure/internals/create-property-descriptor.js"(exports, module2) { + module2.exports = function(bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value + }; + }; + } +}); + +// node_modules/core-js-pure/internals/classof-raw.js +var require_classof_raw = __commonJS({ + "node_modules/core-js-pure/internals/classof-raw.js"(exports, module2) { + var uncurryThis = require_function_uncurry_this(); + var toString = uncurryThis({}.toString); + var stringSlice = uncurryThis("".slice); + module2.exports = function(it) { + return stringSlice(toString(it), 8, -1); + }; + } +}); + +// node_modules/core-js-pure/internals/indexed-object.js +var require_indexed_object = __commonJS({ + "node_modules/core-js-pure/internals/indexed-object.js"(exports, module2) { + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var classof = require_classof_raw(); + var $Object = Object; + var split = uncurryThis("".split); + module2.exports = fails(function() { + return !$Object("z").propertyIsEnumerable(0); + }) ? function(it) { + return classof(it) == "String" ? split(it, "") : $Object(it); + } : $Object; + } +}); + +// node_modules/core-js-pure/internals/is-null-or-undefined.js +var require_is_null_or_undefined = __commonJS({ + "node_modules/core-js-pure/internals/is-null-or-undefined.js"(exports, module2) { + module2.exports = function(it) { + return it === null || it === void 0; + }; + } +}); + +// node_modules/core-js-pure/internals/require-object-coercible.js +var require_require_object_coercible = __commonJS({ + "node_modules/core-js-pure/internals/require-object-coercible.js"(exports, module2) { + var isNullOrUndefined = require_is_null_or_undefined(); + var $TypeError = TypeError; + module2.exports = function(it) { + if (isNullOrUndefined(it)) + throw $TypeError("Can't call method on " + it); + return it; + }; + } +}); + +// node_modules/core-js-pure/internals/to-indexed-object.js +var require_to_indexed_object = __commonJS({ + "node_modules/core-js-pure/internals/to-indexed-object.js"(exports, module2) { + var IndexedObject = require_indexed_object(); + var requireObjectCoercible = require_require_object_coercible(); + module2.exports = function(it) { + return IndexedObject(requireObjectCoercible(it)); + }; + } +}); + +// node_modules/core-js-pure/internals/is-object.js +var require_is_object = __commonJS({ + "node_modules/core-js-pure/internals/is-object.js"(exports, module2) { + var isCallable = require_is_callable(); + var documentAll = typeof document == "object" && document.all; + var SPECIAL_DOCUMENT_ALL = typeof documentAll == "undefined" && documentAll !== void 0; + module2.exports = SPECIAL_DOCUMENT_ALL ? function(it) { + return typeof it == "object" ? it !== null : isCallable(it) || it === documentAll; + } : function(it) { + return typeof it == "object" ? it !== null : isCallable(it); + }; + } +}); + +// node_modules/core-js-pure/internals/path.js +var require_path = __commonJS({ + "node_modules/core-js-pure/internals/path.js"(exports, module2) { + module2.exports = {}; + } +}); + +// node_modules/core-js-pure/internals/get-built-in.js +var require_get_built_in = __commonJS({ + "node_modules/core-js-pure/internals/get-built-in.js"(exports, module2) { + var path = require_path(); + var global2 = require_global(); + var isCallable = require_is_callable(); + var aFunction = function(variable) { + return isCallable(variable) ? variable : void 0; + }; + module2.exports = function(namespace, method) { + return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global2[namespace]) : path[namespace] && path[namespace][method] || global2[namespace] && global2[namespace][method]; + }; + } +}); + +// node_modules/core-js-pure/internals/object-is-prototype-of.js +var require_object_is_prototype_of = __commonJS({ + "node_modules/core-js-pure/internals/object-is-prototype-of.js"(exports, module2) { + var uncurryThis = require_function_uncurry_this(); + module2.exports = uncurryThis({}.isPrototypeOf); + } +}); + +// node_modules/core-js-pure/internals/engine-user-agent.js +var require_engine_user_agent = __commonJS({ + "node_modules/core-js-pure/internals/engine-user-agent.js"(exports, module2) { + var getBuiltIn = require_get_built_in(); + module2.exports = getBuiltIn("navigator", "userAgent") || ""; + } +}); + +// node_modules/core-js-pure/internals/engine-v8-version.js +var require_engine_v8_version = __commonJS({ + "node_modules/core-js-pure/internals/engine-v8-version.js"(exports, module2) { + var global2 = require_global(); + var userAgent = require_engine_user_agent(); + var process2 = global2.process; + var Deno = global2.Deno; + var versions = process2 && process2.versions || Deno && Deno.version; + var v8 = versions && versions.v8; + var match; + var version; + if (v8) { + match = v8.split("."); + version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); + } + if (!version && userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) + version = +match[1]; + } + } + module2.exports = version; + } +}); + +// node_modules/core-js-pure/internals/symbol-constructor-detection.js +var require_symbol_constructor_detection = __commonJS({ + "node_modules/core-js-pure/internals/symbol-constructor-detection.js"(exports, module2) { + var V8_VERSION = require_engine_v8_version(); + var fails = require_fails(); + module2.exports = !!Object.getOwnPropertySymbols && !fails(function() { + var symbol = Symbol(); + return !String(symbol) || !(Object(symbol) instanceof Symbol) || !Symbol.sham && V8_VERSION && V8_VERSION < 41; + }); + } +}); + +// node_modules/core-js-pure/internals/use-symbol-as-uid.js +var require_use_symbol_as_uid = __commonJS({ + "node_modules/core-js-pure/internals/use-symbol-as-uid.js"(exports, module2) { + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; + } +}); + +// node_modules/core-js-pure/internals/is-symbol.js +var require_is_symbol = __commonJS({ + "node_modules/core-js-pure/internals/is-symbol.js"(exports, module2) { + var getBuiltIn = require_get_built_in(); + var isCallable = require_is_callable(); + var isPrototypeOf = require_object_is_prototype_of(); + var USE_SYMBOL_AS_UID = require_use_symbol_as_uid(); + var $Object = Object; + module2.exports = USE_SYMBOL_AS_UID ? function(it) { + return typeof it == "symbol"; + } : function(it) { + var $Symbol = getBuiltIn("Symbol"); + return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it)); + }; + } +}); + +// node_modules/core-js-pure/internals/try-to-string.js +var require_try_to_string = __commonJS({ + "node_modules/core-js-pure/internals/try-to-string.js"(exports, module2) { + var $String = String; + module2.exports = function(argument) { + try { + return $String(argument); + } catch (error) { + return "Object"; + } + }; + } +}); + +// node_modules/core-js-pure/internals/a-callable.js +var require_a_callable = __commonJS({ + "node_modules/core-js-pure/internals/a-callable.js"(exports, module2) { + var isCallable = require_is_callable(); + var tryToString = require_try_to_string(); + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isCallable(argument)) + return argument; + throw $TypeError(tryToString(argument) + " is not a function"); + }; + } +}); + +// node_modules/core-js-pure/internals/get-method.js +var require_get_method = __commonJS({ + "node_modules/core-js-pure/internals/get-method.js"(exports, module2) { + var aCallable = require_a_callable(); + var isNullOrUndefined = require_is_null_or_undefined(); + module2.exports = function(V, P) { + var func = V[P]; + return isNullOrUndefined(func) ? void 0 : aCallable(func); + }; + } +}); + +// node_modules/core-js-pure/internals/ordinary-to-primitive.js +var require_ordinary_to_primitive = __commonJS({ + "node_modules/core-js-pure/internals/ordinary-to-primitive.js"(exports, module2) { + var call = require_function_call(); + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var $TypeError = TypeError; + module2.exports = function(input, pref) { + var fn2, val; + if (pref === "string" && isCallable(fn2 = input.toString) && !isObject(val = call(fn2, input))) + return val; + if (isCallable(fn2 = input.valueOf) && !isObject(val = call(fn2, input))) + return val; + if (pref !== "string" && isCallable(fn2 = input.toString) && !isObject(val = call(fn2, input))) + return val; + throw $TypeError("Can't convert object to primitive value"); + }; + } +}); + +// node_modules/core-js-pure/internals/is-pure.js +var require_is_pure = __commonJS({ + "node_modules/core-js-pure/internals/is-pure.js"(exports, module2) { + module2.exports = true; + } +}); + +// node_modules/core-js-pure/internals/define-global-property.js +var require_define_global_property = __commonJS({ + "node_modules/core-js-pure/internals/define-global-property.js"(exports, module2) { + var global2 = require_global(); + var defineProperty = Object.defineProperty; + module2.exports = function(key, value) { + try { + defineProperty(global2, key, { value, configurable: true, writable: true }); + } catch (error) { + global2[key] = value; + } + return value; + }; + } +}); + +// node_modules/core-js-pure/internals/shared-store.js +var require_shared_store = __commonJS({ + "node_modules/core-js-pure/internals/shared-store.js"(exports, module2) { + var global2 = require_global(); + var defineGlobalProperty = require_define_global_property(); + var SHARED = "__core-js_shared__"; + var store = global2[SHARED] || defineGlobalProperty(SHARED, {}); + module2.exports = store; + } +}); + +// node_modules/core-js-pure/internals/shared.js +var require_shared = __commonJS({ + "node_modules/core-js-pure/internals/shared.js"(exports, module2) { + var IS_PURE = require_is_pure(); + var store = require_shared_store(); + (module2.exports = function(key, value) { + return store[key] || (store[key] = value !== void 0 ? value : {}); + })("versions", []).push({ + version: "3.25.1", + mode: IS_PURE ? "pure" : "global", + copyright: "\xA9 2014-2022 Denis Pushkarev (zloirock.ru)", + license: "https://github.com/zloirock/core-js/blob/v3.25.1/LICENSE", + source: "https://github.com/zloirock/core-js" + }); + } +}); + +// node_modules/core-js-pure/internals/to-object.js +var require_to_object = __commonJS({ + "node_modules/core-js-pure/internals/to-object.js"(exports, module2) { + var requireObjectCoercible = require_require_object_coercible(); + var $Object = Object; + module2.exports = function(argument) { + return $Object(requireObjectCoercible(argument)); + }; + } +}); + +// node_modules/core-js-pure/internals/has-own-property.js +var require_has_own_property = __commonJS({ + "node_modules/core-js-pure/internals/has-own-property.js"(exports, module2) { + var uncurryThis = require_function_uncurry_this(); + var toObject = require_to_object(); + var hasOwnProperty = uncurryThis({}.hasOwnProperty); + module2.exports = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty(toObject(it), key); + }; + } +}); + +// node_modules/core-js-pure/internals/uid.js +var require_uid = __commonJS({ + "node_modules/core-js-pure/internals/uid.js"(exports, module2) { + var uncurryThis = require_function_uncurry_this(); + var id = 0; + var postfix = Math.random(); + var toString = uncurryThis(1 .toString); + module2.exports = function(key) { + return "Symbol(" + (key === void 0 ? "" : key) + ")_" + toString(++id + postfix, 36); + }; + } +}); + +// node_modules/core-js-pure/internals/well-known-symbol.js +var require_well_known_symbol = __commonJS({ + "node_modules/core-js-pure/internals/well-known-symbol.js"(exports, module2) { + var global2 = require_global(); + var shared = require_shared(); + var hasOwn = require_has_own_property(); + var uid = require_uid(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var USE_SYMBOL_AS_UID = require_use_symbol_as_uid(); + var WellKnownSymbolsStore = shared("wks"); + var Symbol2 = global2.Symbol; + var symbolFor = Symbol2 && Symbol2["for"]; + var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol2 : Symbol2 && Symbol2.withoutSetter || uid; + module2.exports = function(name) { + if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == "string")) { + var description = "Symbol." + name; + if (NATIVE_SYMBOL && hasOwn(Symbol2, name)) { + WellKnownSymbolsStore[name] = Symbol2[name]; + } else if (USE_SYMBOL_AS_UID && symbolFor) { + WellKnownSymbolsStore[name] = symbolFor(description); + } else { + WellKnownSymbolsStore[name] = createWellKnownSymbol(description); + } + } + return WellKnownSymbolsStore[name]; + }; + } +}); + +// node_modules/core-js-pure/internals/to-primitive.js +var require_to_primitive = __commonJS({ + "node_modules/core-js-pure/internals/to-primitive.js"(exports, module2) { + var call = require_function_call(); + var isObject = require_is_object(); + var isSymbol = require_is_symbol(); + var getMethod = require_get_method(); + var ordinaryToPrimitive = require_ordinary_to_primitive(); + var wellKnownSymbol = require_well_known_symbol(); + var $TypeError = TypeError; + var TO_PRIMITIVE = wellKnownSymbol("toPrimitive"); + module2.exports = function(input, pref) { + if (!isObject(input) || isSymbol(input)) + return input; + var exoticToPrim = getMethod(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === void 0) + pref = "default"; + result = call(exoticToPrim, input, pref); + if (!isObject(result) || isSymbol(result)) + return result; + throw $TypeError("Can't convert object to primitive value"); + } + if (pref === void 0) + pref = "number"; + return ordinaryToPrimitive(input, pref); + }; + } +}); + +// node_modules/core-js-pure/internals/to-property-key.js +var require_to_property_key = __commonJS({ + "node_modules/core-js-pure/internals/to-property-key.js"(exports, module2) { + var toPrimitive = require_to_primitive(); + var isSymbol = require_is_symbol(); + module2.exports = function(argument) { + var key = toPrimitive(argument, "string"); + return isSymbol(key) ? key : key + ""; + }; + } +}); + +// node_modules/core-js-pure/internals/document-create-element.js +var require_document_create_element = __commonJS({ + "node_modules/core-js-pure/internals/document-create-element.js"(exports, module2) { + var global2 = require_global(); + var isObject = require_is_object(); + var document2 = global2.document; + var EXISTS = isObject(document2) && isObject(document2.createElement); + module2.exports = function(it) { + return EXISTS ? document2.createElement(it) : {}; + }; + } +}); + +// node_modules/core-js-pure/internals/ie8-dom-define.js +var require_ie8_dom_define = __commonJS({ + "node_modules/core-js-pure/internals/ie8-dom-define.js"(exports, module2) { + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + var createElement = require_document_create_element(); + module2.exports = !DESCRIPTORS && !fails(function() { + return Object.defineProperty(createElement("div"), "a", { + get: function() { + return 7; + } + }).a != 7; + }); + } +}); + +// node_modules/core-js-pure/internals/object-get-own-property-descriptor.js +var require_object_get_own_property_descriptor = __commonJS({ + "node_modules/core-js-pure/internals/object-get-own-property-descriptor.js"(exports) { + var DESCRIPTORS = require_descriptors(); + var call = require_function_call(); + var propertyIsEnumerableModule = require_object_property_is_enumerable(); + var createPropertyDescriptor = require_create_property_descriptor(); + var toIndexedObject = require_to_indexed_object(); + var toPropertyKey = require_to_property_key(); + var hasOwn = require_has_own_property(); + var IE8_DOM_DEFINE = require_ie8_dom_define(); + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPropertyKey(P); + if (IE8_DOM_DEFINE) + try { + return $getOwnPropertyDescriptor(O, P); + } catch (error) { + } + if (hasOwn(O, P)) + return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]); + }; + } +}); + +// node_modules/core-js-pure/internals/is-forced.js +var require_is_forced = __commonJS({ + "node_modules/core-js-pure/internals/is-forced.js"(exports, module2) { + var fails = require_fails(); + var isCallable = require_is_callable(); + var replacement = /#|\.prototype\./; + var isForced = function(feature, detection) { + var value = data[normalize(feature)]; + return value == POLYFILL ? true : value == NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection; + }; + var normalize = isForced.normalize = function(string) { + return String(string).replace(replacement, ".").toLowerCase(); + }; + var data = isForced.data = {}; + var NATIVE = isForced.NATIVE = "N"; + var POLYFILL = isForced.POLYFILL = "P"; + module2.exports = isForced; + } +}); + +// node_modules/core-js-pure/internals/function-bind-context.js +var require_function_bind_context = __commonJS({ + "node_modules/core-js-pure/internals/function-bind-context.js"(exports, module2) { + var uncurryThis = require_function_uncurry_this(); + var aCallable = require_a_callable(); + var NATIVE_BIND = require_function_bind_native(); + var bind = uncurryThis(uncurryThis.bind); + module2.exports = function(fn2, that) { + aCallable(fn2); + return that === void 0 ? fn2 : NATIVE_BIND ? bind(fn2, that) : function() { + return fn2.apply(that, arguments); + }; + }; + } +}); + +// node_modules/core-js-pure/internals/v8-prototype-define-bug.js +var require_v8_prototype_define_bug = __commonJS({ + "node_modules/core-js-pure/internals/v8-prototype-define-bug.js"(exports, module2) { + var DESCRIPTORS = require_descriptors(); + var fails = require_fails(); + module2.exports = DESCRIPTORS && fails(function() { + return Object.defineProperty(function() { + }, "prototype", { + value: 42, + writable: false + }).prototype != 42; + }); + } +}); + +// node_modules/core-js-pure/internals/an-object.js +var require_an_object = __commonJS({ + "node_modules/core-js-pure/internals/an-object.js"(exports, module2) { + var isObject = require_is_object(); + var $String = String; + var $TypeError = TypeError; + module2.exports = function(argument) { + if (isObject(argument)) + return argument; + throw $TypeError($String(argument) + " is not an object"); + }; + } +}); + +// node_modules/core-js-pure/internals/object-define-property.js +var require_object_define_property = __commonJS({ + "node_modules/core-js-pure/internals/object-define-property.js"(exports) { + var DESCRIPTORS = require_descriptors(); + var IE8_DOM_DEFINE = require_ie8_dom_define(); + var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug(); + var anObject = require_an_object(); + var toPropertyKey = require_to_property_key(); + var $TypeError = TypeError; + var $defineProperty = Object.defineProperty; + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var ENUMERABLE = "enumerable"; + var CONFIGURABLE = "configurable"; + var WRITABLE = "writable"; + exports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (typeof O === "function" && P === "prototype" && "value" in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { + var current = $getOwnPropertyDescriptor(O, P); + if (current && current[WRITABLE]) { + O[P] = Attributes.value; + Attributes = { + configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE], + enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], + writable: false + }; + } + } + return $defineProperty(O, P, Attributes); + } : $defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (IE8_DOM_DEFINE) + try { + return $defineProperty(O, P, Attributes); + } catch (error) { + } + if ("get" in Attributes || "set" in Attributes) + throw $TypeError("Accessors not supported"); + if ("value" in Attributes) + O[P] = Attributes.value; + return O; + }; + } +}); + +// node_modules/core-js-pure/internals/create-non-enumerable-property.js +var require_create_non_enumerable_property = __commonJS({ + "node_modules/core-js-pure/internals/create-non-enumerable-property.js"(exports, module2) { + var DESCRIPTORS = require_descriptors(); + var definePropertyModule = require_object_define_property(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = DESCRIPTORS ? function(object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); + } : function(object, key, value) { + object[key] = value; + return object; + }; + } +}); + +// node_modules/core-js-pure/internals/export.js +var require_export = __commonJS({ + "node_modules/core-js-pure/internals/export.js"(exports, module2) { + "use strict"; + var global2 = require_global(); + var apply = require_function_apply(); + var uncurryThis = require_function_uncurry_this(); + var isCallable = require_is_callable(); + var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f; + var isForced = require_is_forced(); + var path = require_path(); + var bind = require_function_bind_context(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var hasOwn = require_has_own_property(); + var wrapConstructor = function(NativeConstructor) { + var Wrapper = function(a, b, c) { + if (this instanceof Wrapper) { + switch (arguments.length) { + case 0: + return new NativeConstructor(); + case 1: + return new NativeConstructor(a); + case 2: + return new NativeConstructor(a, b); + } + return new NativeConstructor(a, b, c); + } + return apply(NativeConstructor, this, arguments); + }; + Wrapper.prototype = NativeConstructor.prototype; + return Wrapper; + }; + module2.exports = function(options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var PROTO = options.proto; + var nativeSource = GLOBAL ? global2 : STATIC ? global2[TARGET] : (global2[TARGET] || {}).prototype; + var target = GLOBAL ? path : path[TARGET] || createNonEnumerableProperty(path, TARGET, {})[TARGET]; + var targetPrototype = target.prototype; + var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE; + var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor; + for (key in source) { + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? "." : "#") + key, options.forced); + USE_NATIVE = !FORCED && nativeSource && hasOwn(nativeSource, key); + targetProperty = target[key]; + if (USE_NATIVE) + if (options.dontCallGetSet) { + descriptor = getOwnPropertyDescriptor(nativeSource, key); + nativeProperty = descriptor && descriptor.value; + } else + nativeProperty = nativeSource[key]; + sourceProperty = USE_NATIVE && nativeProperty ? nativeProperty : source[key]; + if (USE_NATIVE && typeof targetProperty == typeof sourceProperty) + continue; + if (options.bind && USE_NATIVE) + resultProperty = bind(sourceProperty, global2); + else if (options.wrap && USE_NATIVE) + resultProperty = wrapConstructor(sourceProperty); + else if (PROTO && isCallable(sourceProperty)) + resultProperty = uncurryThis(sourceProperty); + else + resultProperty = sourceProperty; + if (options.sham || sourceProperty && sourceProperty.sham || targetProperty && targetProperty.sham) { + createNonEnumerableProperty(resultProperty, "sham", true); + } + createNonEnumerableProperty(target, key, resultProperty); + if (PROTO) { + VIRTUAL_PROTOTYPE = TARGET + "Prototype"; + if (!hasOwn(path, VIRTUAL_PROTOTYPE)) { + createNonEnumerableProperty(path, VIRTUAL_PROTOTYPE, {}); + } + createNonEnumerableProperty(path[VIRTUAL_PROTOTYPE], key, sourceProperty); + if (options.real && targetPrototype && !targetPrototype[key]) { + createNonEnumerableProperty(targetPrototype, key, sourceProperty); + } + } + } + }; + } +}); + +// node_modules/core-js-pure/modules/es.object.define-property.js +var require_es_object_define_property = __commonJS({ + "node_modules/core-js-pure/modules/es.object.define-property.js"() { + var $ = require_export(); + var DESCRIPTORS = require_descriptors(); + var defineProperty = require_object_define_property().f; + $({ target: "Object", stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, { + defineProperty + }); + } +}); + +// node_modules/core-js-pure/es/object/define-property.js +var require_define_property = __commonJS({ + "node_modules/core-js-pure/es/object/define-property.js"(exports, module2) { + require_es_object_define_property(); + var path = require_path(); + var Object2 = path.Object; + var defineProperty = module2.exports = function defineProperty2(it, key, desc) { + return Object2.defineProperty(it, key, desc); + }; + if (Object2.defineProperty.sham) + defineProperty.sham = true; + } +}); + +// node_modules/core-js-pure/stable/object/define-property.js +var require_define_property2 = __commonJS({ + "node_modules/core-js-pure/stable/object/define-property.js"(exports, module2) { + var parent = require_define_property(); + module2.exports = parent; + } +}); + +// node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js +var require_define_property3 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js-stable/object/define-property.js"(exports, module2) { + module2.exports = require_define_property2(); + } +}); + +// node_modules/@babel/runtime-corejs3/helpers/interopRequireDefault.js +var require_interopRequireDefault = __commonJS({ + "node_modules/@babel/runtime-corejs3/helpers/interopRequireDefault.js"(exports, module2) { + function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + "default": obj + }; + } + module2.exports = _interopRequireDefault, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/core-js-pure/internals/is-array.js +var require_is_array = __commonJS({ + "node_modules/core-js-pure/internals/is-array.js"(exports, module2) { + var classof = require_classof_raw(); + module2.exports = Array.isArray || function isArray(argument) { + return classof(argument) == "Array"; + }; + } +}); + +// node_modules/core-js-pure/internals/to-string-tag-support.js +var require_to_string_tag_support = __commonJS({ + "node_modules/core-js-pure/internals/to-string-tag-support.js"(exports, module2) { + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var test = {}; + test[TO_STRING_TAG] = "z"; + module2.exports = String(test) === "[object z]"; + } +}); + +// node_modules/core-js-pure/internals/classof.js +var require_classof = __commonJS({ + "node_modules/core-js-pure/internals/classof.js"(exports, module2) { + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var isCallable = require_is_callable(); + var classofRaw = require_classof_raw(); + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + var $Object = Object; + var CORRECT_ARGUMENTS = classofRaw(function() { + return arguments; + }()) == "Arguments"; + var tryGet = function(it, key) { + try { + return it[key]; + } catch (error) { + } + }; + module2.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function(it) { + var O, tag, result; + return it === void 0 ? "Undefined" : it === null ? "Null" : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == "string" ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) == "Object" && isCallable(O.callee) ? "Arguments" : result; + }; + } +}); + +// node_modules/core-js-pure/internals/inspect-source.js +var require_inspect_source = __commonJS({ + "node_modules/core-js-pure/internals/inspect-source.js"(exports, module2) { + var uncurryThis = require_function_uncurry_this(); + var isCallable = require_is_callable(); + var store = require_shared_store(); + var functionToString = uncurryThis(Function.toString); + if (!isCallable(store.inspectSource)) { + store.inspectSource = function(it) { + return functionToString(it); + }; + } + module2.exports = store.inspectSource; + } +}); + +// node_modules/core-js-pure/internals/is-constructor.js +var require_is_constructor = __commonJS({ + "node_modules/core-js-pure/internals/is-constructor.js"(exports, module2) { + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isCallable = require_is_callable(); + var classof = require_classof(); + var getBuiltIn = require_get_built_in(); + var inspectSource = require_inspect_source(); + var noop = function() { + }; + var empty = []; + var construct = getBuiltIn("Reflect", "construct"); + var constructorRegExp = /^\s*(?:class|function)\b/; + var exec = uncurryThis(constructorRegExp.exec); + var INCORRECT_TO_STRING = !constructorRegExp.exec(noop); + var isConstructorModern = function isConstructor(argument) { + if (!isCallable(argument)) + return false; + try { + construct(noop, empty, argument); + return true; + } catch (error) { + return false; + } + }; + var isConstructorLegacy = function isConstructor(argument) { + if (!isCallable(argument)) + return false; + switch (classof(argument)) { + case "AsyncFunction": + case "GeneratorFunction": + case "AsyncGeneratorFunction": + return false; + } + try { + return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument)); + } catch (error) { + return true; + } + }; + isConstructorLegacy.sham = true; + module2.exports = !construct || fails(function() { + var called; + return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function() { + called = true; + }) || called; + }) ? isConstructorLegacy : isConstructorModern; + } +}); + +// node_modules/core-js-pure/internals/math-trunc.js +var require_math_trunc = __commonJS({ + "node_modules/core-js-pure/internals/math-trunc.js"(exports, module2) { + var ceil = Math.ceil; + var floor = Math.floor; + module2.exports = Math.trunc || function trunc(x) { + var n = +x; + return (n > 0 ? floor : ceil)(n); + }; + } +}); + +// node_modules/core-js-pure/internals/to-integer-or-infinity.js +var require_to_integer_or_infinity = __commonJS({ + "node_modules/core-js-pure/internals/to-integer-or-infinity.js"(exports, module2) { + var trunc = require_math_trunc(); + module2.exports = function(argument) { + var number = +argument; + return number !== number || number === 0 ? 0 : trunc(number); + }; + } +}); + +// node_modules/core-js-pure/internals/to-absolute-index.js +var require_to_absolute_index = __commonJS({ + "node_modules/core-js-pure/internals/to-absolute-index.js"(exports, module2) { + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var max2 = Math.max; + var min2 = Math.min; + module2.exports = function(index, length) { + var integer = toIntegerOrInfinity(index); + return integer < 0 ? max2(integer + length, 0) : min2(integer, length); + }; + } +}); + +// node_modules/core-js-pure/internals/to-length.js +var require_to_length = __commonJS({ + "node_modules/core-js-pure/internals/to-length.js"(exports, module2) { + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var min2 = Math.min; + module2.exports = function(argument) { + return argument > 0 ? min2(toIntegerOrInfinity(argument), 9007199254740991) : 0; + }; + } +}); + +// node_modules/core-js-pure/internals/length-of-array-like.js +var require_length_of_array_like = __commonJS({ + "node_modules/core-js-pure/internals/length-of-array-like.js"(exports, module2) { + var toLength = require_to_length(); + module2.exports = function(obj) { + return toLength(obj.length); + }; + } +}); + +// node_modules/core-js-pure/internals/create-property.js +var require_create_property = __commonJS({ + "node_modules/core-js-pure/internals/create-property.js"(exports, module2) { + "use strict"; + var toPropertyKey = require_to_property_key(); + var definePropertyModule = require_object_define_property(); + var createPropertyDescriptor = require_create_property_descriptor(); + module2.exports = function(object, key, value) { + var propertyKey = toPropertyKey(key); + if (propertyKey in object) + definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value)); + else + object[propertyKey] = value; + }; + } +}); + +// node_modules/core-js-pure/internals/array-method-has-species-support.js +var require_array_method_has_species_support = __commonJS({ + "node_modules/core-js-pure/internals/array-method-has-species-support.js"(exports, module2) { + var fails = require_fails(); + var wellKnownSymbol = require_well_known_symbol(); + var V8_VERSION = require_engine_v8_version(); + var SPECIES = wellKnownSymbol("species"); + module2.exports = function(METHOD_NAME) { + return V8_VERSION >= 51 || !fails(function() { + var array = []; + var constructor = array.constructor = {}; + constructor[SPECIES] = function() { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }); + }; + } +}); + +// node_modules/core-js-pure/internals/array-slice.js +var require_array_slice = __commonJS({ + "node_modules/core-js-pure/internals/array-slice.js"(exports, module2) { + var uncurryThis = require_function_uncurry_this(); + module2.exports = uncurryThis([].slice); + } +}); + +// node_modules/core-js-pure/modules/es.array.slice.js +var require_es_array_slice = __commonJS({ + "node_modules/core-js-pure/modules/es.array.slice.js"() { + "use strict"; + var $ = require_export(); + var isArray = require_is_array(); + var isConstructor = require_is_constructor(); + var isObject = require_is_object(); + var toAbsoluteIndex = require_to_absolute_index(); + var lengthOfArrayLike = require_length_of_array_like(); + var toIndexedObject = require_to_indexed_object(); + var createProperty = require_create_property(); + var wellKnownSymbol = require_well_known_symbol(); + var arrayMethodHasSpeciesSupport = require_array_method_has_species_support(); + var nativeSlice = require_array_slice(); + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("slice"); + var SPECIES = wellKnownSymbol("species"); + var $Array = Array; + var max2 = Math.max; + $({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, { + slice: function slice(start2, end2) { + var O = toIndexedObject(this); + var length = lengthOfArrayLike(O); + var k = toAbsoluteIndex(start2, length); + var fin = toAbsoluteIndex(end2 === void 0 ? length : end2, length); + var Constructor, result, n; + if (isArray(O)) { + Constructor = O.constructor; + if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) { + Constructor = void 0; + } else if (isObject(Constructor)) { + Constructor = Constructor[SPECIES]; + if (Constructor === null) + Constructor = void 0; + } + if (Constructor === $Array || Constructor === void 0) { + return nativeSlice(O, k, fin); + } + } + result = new (Constructor === void 0 ? $Array : Constructor)(max2(fin - k, 0)); + for (n = 0; k < fin; k++, n++) + if (k in O) + createProperty(result, n, O[k]); + result.length = n; + return result; + } + }); + } +}); + +// node_modules/core-js-pure/internals/entry-virtual.js +var require_entry_virtual = __commonJS({ + "node_modules/core-js-pure/internals/entry-virtual.js"(exports, module2) { + var path = require_path(); + module2.exports = function(CONSTRUCTOR) { + return path[CONSTRUCTOR + "Prototype"]; + }; + } +}); + +// node_modules/core-js-pure/es/array/virtual/slice.js +var require_slice = __commonJS({ + "node_modules/core-js-pure/es/array/virtual/slice.js"(exports, module2) { + require_es_array_slice(); + var entryVirtual = require_entry_virtual(); + module2.exports = entryVirtual("Array").slice; + } +}); + +// node_modules/core-js-pure/es/instance/slice.js +var require_slice2 = __commonJS({ + "node_modules/core-js-pure/es/instance/slice.js"(exports, module2) { + var isPrototypeOf = require_object_is_prototype_of(); + var method = require_slice(); + var ArrayPrototype = Array.prototype; + module2.exports = function(it) { + var own = it.slice; + return it === ArrayPrototype || isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.slice ? method : own; + }; + } +}); + +// node_modules/core-js-pure/stable/instance/slice.js +var require_slice3 = __commonJS({ + "node_modules/core-js-pure/stable/instance/slice.js"(exports, module2) { + var parent = require_slice2(); + module2.exports = parent; + } +}); + +// node_modules/@babel/runtime-corejs3/core-js-stable/instance/slice.js +var require_slice4 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js-stable/instance/slice.js"(exports, module2) { + module2.exports = require_slice3(); + } +}); + +// node_modules/core-js-pure/internals/to-string.js +var require_to_string = __commonJS({ + "node_modules/core-js-pure/internals/to-string.js"(exports, module2) { + var classof = require_classof(); + var $String = String; + module2.exports = function(argument) { + if (classof(argument) === "Symbol") + throw TypeError("Cannot convert a Symbol value to a string"); + return $String(argument); + }; + } +}); + +// node_modules/core-js-pure/internals/string-multibyte.js +var require_string_multibyte = __commonJS({ + "node_modules/core-js-pure/internals/string-multibyte.js"(exports, module2) { + var uncurryThis = require_function_uncurry_this(); + var toIntegerOrInfinity = require_to_integer_or_infinity(); + var toString = require_to_string(); + var requireObjectCoercible = require_require_object_coercible(); + var charAt = uncurryThis("".charAt); + var charCodeAt = uncurryThis("".charCodeAt); + var stringSlice = uncurryThis("".slice); + var createMethod = function(CONVERT_TO_STRING) { + return function($this, pos) { + var S = toString(requireObjectCoercible($this)); + var position = toIntegerOrInfinity(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) + return CONVERT_TO_STRING ? "" : void 0; + first = charCodeAt(S, position); + return first < 55296 || first > 56319 || position + 1 === size || (second = charCodeAt(S, position + 1)) < 56320 || second > 57343 ? CONVERT_TO_STRING ? charAt(S, position) : first : CONVERT_TO_STRING ? stringSlice(S, position, position + 2) : (first - 55296 << 10) + (second - 56320) + 65536; + }; + }; + module2.exports = { + codeAt: createMethod(false), + charAt: createMethod(true) + }; + } +}); + +// node_modules/core-js-pure/internals/weak-map-basic-detection.js +var require_weak_map_basic_detection = __commonJS({ + "node_modules/core-js-pure/internals/weak-map-basic-detection.js"(exports, module2) { + var global2 = require_global(); + var isCallable = require_is_callable(); + var WeakMap = global2.WeakMap; + module2.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap)); + } +}); + +// node_modules/core-js-pure/internals/shared-key.js +var require_shared_key = __commonJS({ + "node_modules/core-js-pure/internals/shared-key.js"(exports, module2) { + var shared = require_shared(); + var uid = require_uid(); + var keys = shared("keys"); + module2.exports = function(key) { + return keys[key] || (keys[key] = uid(key)); + }; + } +}); + +// node_modules/core-js-pure/internals/hidden-keys.js +var require_hidden_keys = __commonJS({ + "node_modules/core-js-pure/internals/hidden-keys.js"(exports, module2) { + module2.exports = {}; + } +}); + +// node_modules/core-js-pure/internals/internal-state.js +var require_internal_state = __commonJS({ + "node_modules/core-js-pure/internals/internal-state.js"(exports, module2) { + var NATIVE_WEAK_MAP = require_weak_map_basic_detection(); + var global2 = require_global(); + var uncurryThis = require_function_uncurry_this(); + var isObject = require_is_object(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var hasOwn = require_has_own_property(); + var shared = require_shared_store(); + var sharedKey = require_shared_key(); + var hiddenKeys = require_hidden_keys(); + var OBJECT_ALREADY_INITIALIZED = "Object already initialized"; + var TypeError2 = global2.TypeError; + var WeakMap = global2.WeakMap; + var set; + var get; + var has; + var enforce = function(it) { + return has(it) ? get(it) : set(it, {}); + }; + var getterFor = function(TYPE) { + return function(it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw TypeError2("Incompatible receiver, " + TYPE + " required"); + } + return state; + }; + }; + if (NATIVE_WEAK_MAP || shared.state) { + store = shared.state || (shared.state = new WeakMap()); + wmget = uncurryThis(store.get); + wmhas = uncurryThis(store.has); + wmset = uncurryThis(store.set); + set = function(it, metadata) { + if (wmhas(store, it)) + throw TypeError2(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + wmset(store, it, metadata); + return metadata; + }; + get = function(it) { + return wmget(store, it) || {}; + }; + has = function(it) { + return wmhas(store, it); + }; + } else { + STATE = sharedKey("state"); + hiddenKeys[STATE] = true; + set = function(it, metadata) { + if (hasOwn(it, STATE)) + throw TypeError2(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function(it) { + return hasOwn(it, STATE) ? it[STATE] : {}; + }; + has = function(it) { + return hasOwn(it, STATE); + }; + } + var store; + var wmget; + var wmhas; + var wmset; + var STATE; + module2.exports = { + set, + get, + has, + enforce, + getterFor + }; + } +}); + +// node_modules/core-js-pure/internals/function-name.js +var require_function_name = __commonJS({ + "node_modules/core-js-pure/internals/function-name.js"(exports, module2) { + var DESCRIPTORS = require_descriptors(); + var hasOwn = require_has_own_property(); + var FunctionPrototype = Function.prototype; + var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor; + var EXISTS = hasOwn(FunctionPrototype, "name"); + var PROPER = EXISTS && function something() { + }.name === "something"; + var CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, "name").configurable); + module2.exports = { + EXISTS, + PROPER, + CONFIGURABLE + }; + } +}); + +// node_modules/core-js-pure/internals/array-includes.js +var require_array_includes = __commonJS({ + "node_modules/core-js-pure/internals/array-includes.js"(exports, module2) { + var toIndexedObject = require_to_indexed_object(); + var toAbsoluteIndex = require_to_absolute_index(); + var lengthOfArrayLike = require_length_of_array_like(); + var createMethod = function(IS_INCLUDES) { + return function($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = lengthOfArrayLike(O); + var index = toAbsoluteIndex(fromIndex, length); + var value; + if (IS_INCLUDES && el != el) + while (length > index) { + value = O[index++]; + if (value != value) + return true; + } + else + for (; length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) + return IS_INCLUDES || index || 0; + } + return !IS_INCLUDES && -1; + }; + }; + module2.exports = { + includes: createMethod(true), + indexOf: createMethod(false) + }; + } +}); + +// node_modules/core-js-pure/internals/object-keys-internal.js +var require_object_keys_internal = __commonJS({ + "node_modules/core-js-pure/internals/object-keys-internal.js"(exports, module2) { + var uncurryThis = require_function_uncurry_this(); + var hasOwn = require_has_own_property(); + var toIndexedObject = require_to_indexed_object(); + var indexOf = require_array_includes().indexOf; + var hiddenKeys = require_hidden_keys(); + var push = uncurryThis([].push); + module2.exports = function(object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) + !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key); + while (names.length > i) + if (hasOwn(O, key = names[i++])) { + ~indexOf(result, key) || push(result, key); + } + return result; + }; + } +}); + +// node_modules/core-js-pure/internals/enum-bug-keys.js +var require_enum_bug_keys = __commonJS({ + "node_modules/core-js-pure/internals/enum-bug-keys.js"(exports, module2) { + module2.exports = [ + "constructor", + "hasOwnProperty", + "isPrototypeOf", + "propertyIsEnumerable", + "toLocaleString", + "toString", + "valueOf" + ]; + } +}); + +// node_modules/core-js-pure/internals/object-keys.js +var require_object_keys = __commonJS({ + "node_modules/core-js-pure/internals/object-keys.js"(exports, module2) { + var internalObjectKeys = require_object_keys_internal(); + var enumBugKeys = require_enum_bug_keys(); + module2.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); + }; + } +}); + +// node_modules/core-js-pure/internals/object-define-properties.js +var require_object_define_properties = __commonJS({ + "node_modules/core-js-pure/internals/object-define-properties.js"(exports) { + var DESCRIPTORS = require_descriptors(); + var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug(); + var definePropertyModule = require_object_define_property(); + var anObject = require_an_object(); + var toIndexedObject = require_to_indexed_object(); + var objectKeys = require_object_keys(); + exports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var props = toIndexedObject(Properties); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) + definePropertyModule.f(O, key = keys[index++], props[key]); + return O; + }; + } +}); + +// node_modules/core-js-pure/internals/html.js +var require_html = __commonJS({ + "node_modules/core-js-pure/internals/html.js"(exports, module2) { + var getBuiltIn = require_get_built_in(); + module2.exports = getBuiltIn("document", "documentElement"); + } +}); + +// node_modules/core-js-pure/internals/object-create.js +var require_object_create = __commonJS({ + "node_modules/core-js-pure/internals/object-create.js"(exports, module2) { + var anObject = require_an_object(); + var definePropertiesModule = require_object_define_properties(); + var enumBugKeys = require_enum_bug_keys(); + var hiddenKeys = require_hidden_keys(); + var html = require_html(); + var documentCreateElement = require_document_create_element(); + var sharedKey = require_shared_key(); + var GT = ">"; + var LT = "<"; + var PROTOTYPE = "prototype"; + var SCRIPT = "script"; + var IE_PROTO = sharedKey("IE_PROTO"); + var EmptyConstructor = function() { + }; + var scriptTag = function(content) { + return LT + SCRIPT + GT + content + LT + "/" + SCRIPT + GT; + }; + var NullProtoObjectViaActiveX = function(activeXDocument2) { + activeXDocument2.write(scriptTag("")); + activeXDocument2.close(); + var temp = activeXDocument2.parentWindow.Object; + activeXDocument2 = null; + return temp; + }; + var NullProtoObjectViaIFrame = function() { + var iframe = documentCreateElement("iframe"); + var JS = "java" + SCRIPT + ":"; + var iframeDocument; + iframe.style.display = "none"; + html.appendChild(iframe); + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag("document.F=Object")); + iframeDocument.close(); + return iframeDocument.F; + }; + var activeXDocument; + var NullProtoObject = function() { + try { + activeXDocument = new ActiveXObject("htmlfile"); + } catch (error) { + } + NullProtoObject = typeof document != "undefined" ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument); + var length = enumBugKeys.length; + while (length--) + delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); + }; + hiddenKeys[IE_PROTO] = true; + module2.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + result[IE_PROTO] = O; + } else + result = NullProtoObject(); + return Properties === void 0 ? result : definePropertiesModule.f(result, Properties); + }; + } +}); + +// node_modules/core-js-pure/internals/correct-prototype-getter.js +var require_correct_prototype_getter = __commonJS({ + "node_modules/core-js-pure/internals/correct-prototype-getter.js"(exports, module2) { + var fails = require_fails(); + module2.exports = !fails(function() { + function F() { + } + F.prototype.constructor = null; + return Object.getPrototypeOf(new F()) !== F.prototype; + }); + } +}); + +// node_modules/core-js-pure/internals/object-get-prototype-of.js +var require_object_get_prototype_of = __commonJS({ + "node_modules/core-js-pure/internals/object-get-prototype-of.js"(exports, module2) { + var hasOwn = require_has_own_property(); + var isCallable = require_is_callable(); + var toObject = require_to_object(); + var sharedKey = require_shared_key(); + var CORRECT_PROTOTYPE_GETTER = require_correct_prototype_getter(); + var IE_PROTO = sharedKey("IE_PROTO"); + var $Object = Object; + var ObjectPrototype = $Object.prototype; + module2.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function(O) { + var object = toObject(O); + if (hasOwn(object, IE_PROTO)) + return object[IE_PROTO]; + var constructor = object.constructor; + if (isCallable(constructor) && object instanceof constructor) { + return constructor.prototype; + } + return object instanceof $Object ? ObjectPrototype : null; + }; + } +}); + +// node_modules/core-js-pure/internals/define-built-in.js +var require_define_built_in = __commonJS({ + "node_modules/core-js-pure/internals/define-built-in.js"(exports, module2) { + var createNonEnumerableProperty = require_create_non_enumerable_property(); + module2.exports = function(target, key, value, options) { + if (options && options.enumerable) + target[key] = value; + else + createNonEnumerableProperty(target, key, value); + return target; + }; + } +}); + +// node_modules/core-js-pure/internals/iterators-core.js +var require_iterators_core = __commonJS({ + "node_modules/core-js-pure/internals/iterators-core.js"(exports, module2) { + "use strict"; + var fails = require_fails(); + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var create = require_object_create(); + var getPrototypeOf = require_object_get_prototype_of(); + var defineBuiltIn = require_define_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var IS_PURE = require_is_pure(); + var ITERATOR = wellKnownSymbol("iterator"); + var BUGGY_SAFARI_ITERATORS = false; + var IteratorPrototype; + var PrototypeOfArrayIteratorPrototype; + var arrayIterator; + if ([].keys) { + arrayIterator = [].keys(); + if (!("next" in arrayIterator)) + BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) + IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } + } + var NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function() { + var test = {}; + return IteratorPrototype[ITERATOR].call(test) !== test; + }); + if (NEW_ITERATOR_PROTOTYPE) + IteratorPrototype = {}; + else if (IS_PURE) + IteratorPrototype = create(IteratorPrototype); + if (!isCallable(IteratorPrototype[ITERATOR])) { + defineBuiltIn(IteratorPrototype, ITERATOR, function() { + return this; + }); + } + module2.exports = { + IteratorPrototype, + BUGGY_SAFARI_ITERATORS + }; + } +}); + +// node_modules/core-js-pure/internals/object-to-string.js +var require_object_to_string = __commonJS({ + "node_modules/core-js-pure/internals/object-to-string.js"(exports, module2) { + "use strict"; + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var classof = require_classof(); + module2.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { + return "[object " + classof(this) + "]"; + }; + } +}); + +// node_modules/core-js-pure/internals/set-to-string-tag.js +var require_set_to_string_tag = __commonJS({ + "node_modules/core-js-pure/internals/set-to-string-tag.js"(exports, module2) { + var TO_STRING_TAG_SUPPORT = require_to_string_tag_support(); + var defineProperty = require_object_define_property().f; + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var hasOwn = require_has_own_property(); + var toString = require_object_to_string(); + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + module2.exports = function(it, TAG, STATIC, SET_METHOD) { + if (it) { + var target = STATIC ? it : it.prototype; + if (!hasOwn(target, TO_STRING_TAG)) { + defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG }); + } + if (SET_METHOD && !TO_STRING_TAG_SUPPORT) { + createNonEnumerableProperty(target, "toString", toString); + } + } + }; + } +}); + +// node_modules/core-js-pure/internals/iterators.js +var require_iterators = __commonJS({ + "node_modules/core-js-pure/internals/iterators.js"(exports, module2) { + module2.exports = {}; + } +}); + +// node_modules/core-js-pure/internals/iterator-create-constructor.js +var require_iterator_create_constructor = __commonJS({ + "node_modules/core-js-pure/internals/iterator-create-constructor.js"(exports, module2) { + "use strict"; + var IteratorPrototype = require_iterators_core().IteratorPrototype; + var create = require_object_create(); + var createPropertyDescriptor = require_create_property_descriptor(); + var setToStringTag = require_set_to_string_tag(); + var Iterators = require_iterators(); + var returnThis = function() { + return this; + }; + module2.exports = function(IteratorConstructor, NAME, next, ENUMERABLE_NEXT) { + var TO_STRING_TAG = NAME + " Iterator"; + IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; + }; + } +}); + +// node_modules/core-js-pure/internals/a-possible-prototype.js +var require_a_possible_prototype = __commonJS({ + "node_modules/core-js-pure/internals/a-possible-prototype.js"(exports, module2) { + var isCallable = require_is_callable(); + var $String = String; + var $TypeError = TypeError; + module2.exports = function(argument) { + if (typeof argument == "object" || isCallable(argument)) + return argument; + throw $TypeError("Can't set " + $String(argument) + " as a prototype"); + }; + } +}); + +// node_modules/core-js-pure/internals/object-set-prototype-of.js +var require_object_set_prototype_of = __commonJS({ + "node_modules/core-js-pure/internals/object-set-prototype-of.js"(exports, module2) { + var uncurryThis = require_function_uncurry_this(); + var anObject = require_an_object(); + var aPossiblePrototype = require_a_possible_prototype(); + module2.exports = Object.setPrototypeOf || ("__proto__" in {} ? function() { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").set); + setter(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { + } + return function setPrototypeOf(O, proto) { + anObject(O); + aPossiblePrototype(proto); + if (CORRECT_SETTER) + setter(O, proto); + else + O.__proto__ = proto; + return O; + }; + }() : void 0); + } +}); + +// node_modules/core-js-pure/internals/iterator-define.js +var require_iterator_define = __commonJS({ + "node_modules/core-js-pure/internals/iterator-define.js"(exports, module2) { + "use strict"; + var $ = require_export(); + var call = require_function_call(); + var IS_PURE = require_is_pure(); + var FunctionName = require_function_name(); + var isCallable = require_is_callable(); + var createIteratorConstructor = require_iterator_create_constructor(); + var getPrototypeOf = require_object_get_prototype_of(); + var setPrototypeOf = require_object_set_prototype_of(); + var setToStringTag = require_set_to_string_tag(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var defineBuiltIn = require_define_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var Iterators = require_iterators(); + var IteratorsCore = require_iterators_core(); + var PROPER_FUNCTION_NAME = FunctionName.PROPER; + var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE; + var IteratorPrototype = IteratorsCore.IteratorPrototype; + var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; + var ITERATOR = wellKnownSymbol("iterator"); + var KEYS = "keys"; + var VALUES = "values"; + var ENTRIES = "entries"; + var returnThis = function() { + return this; + }; + module2.exports = function(Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + var getIterationMethod = function(KIND) { + if (KIND === DEFAULT && defaultIterator) + return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) + return IterablePrototype[KIND]; + switch (KIND) { + case KEYS: + return function keys() { + return new IteratorConstructor(this, KIND); + }; + case VALUES: + return function values() { + return new IteratorConstructor(this, KIND); + }; + case ENTRIES: + return function entries() { + return new IteratorConstructor(this, KIND); + }; + } + return function() { + return new IteratorConstructor(this); + }; + }; + var TO_STRING_TAG = NAME + " Iterator"; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR] || IterablePrototype["@@iterator"] || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME == "Array" ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) { + defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) + Iterators[TO_STRING_TAG] = returnThis; + } + } + if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { + if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) { + createNonEnumerableProperty(IterablePrototype, "name", VALUES); + } else { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { + return call(nativeIterator, this); + }; + } + } + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) + for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + defineBuiltIn(IterablePrototype, KEY, methods[KEY]); + } + } + else + $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT }); + } + Iterators[NAME] = defaultIterator; + return methods; + }; + } +}); + +// node_modules/core-js-pure/internals/create-iter-result-object.js +var require_create_iter_result_object = __commonJS({ + "node_modules/core-js-pure/internals/create-iter-result-object.js"(exports, module2) { + module2.exports = function(value, done) { + return { value, done }; + }; + } +}); + +// node_modules/core-js-pure/modules/es.string.iterator.js +var require_es_string_iterator = __commonJS({ + "node_modules/core-js-pure/modules/es.string.iterator.js"() { + "use strict"; + var charAt = require_string_multibyte().charAt; + var toString = require_to_string(); + var InternalStateModule = require_internal_state(); + var defineIterator = require_iterator_define(); + var createIterResultObject = require_create_iter_result_object(); + var STRING_ITERATOR = "String Iterator"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); + defineIterator(String, "String", function(iterated) { + setInternalState(this, { + type: STRING_ITERATOR, + string: toString(iterated), + index: 0 + }); + }, function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) + return createIterResultObject(void 0, true); + point = charAt(string, index); + state.index += point.length; + return createIterResultObject(point, false); + }); + } +}); + +// node_modules/core-js-pure/internals/iterator-close.js +var require_iterator_close = __commonJS({ + "node_modules/core-js-pure/internals/iterator-close.js"(exports, module2) { + var call = require_function_call(); + var anObject = require_an_object(); + var getMethod = require_get_method(); + module2.exports = function(iterator, kind, value) { + var innerResult, innerError; + anObject(iterator); + try { + innerResult = getMethod(iterator, "return"); + if (!innerResult) { + if (kind === "throw") + throw value; + return value; + } + innerResult = call(innerResult, iterator); + } catch (error) { + innerError = true; + innerResult = error; + } + if (kind === "throw") + throw value; + if (innerError) + throw innerResult; + anObject(innerResult); + return value; + }; + } +}); + +// node_modules/core-js-pure/internals/call-with-safe-iteration-closing.js +var require_call_with_safe_iteration_closing = __commonJS({ + "node_modules/core-js-pure/internals/call-with-safe-iteration-closing.js"(exports, module2) { + var anObject = require_an_object(); + var iteratorClose = require_iterator_close(); + module2.exports = function(iterator, fn2, value, ENTRIES) { + try { + return ENTRIES ? fn2(anObject(value)[0], value[1]) : fn2(value); + } catch (error) { + iteratorClose(iterator, "throw", error); + } + }; + } +}); + +// node_modules/core-js-pure/internals/is-array-iterator-method.js +var require_is_array_iterator_method = __commonJS({ + "node_modules/core-js-pure/internals/is-array-iterator-method.js"(exports, module2) { + var wellKnownSymbol = require_well_known_symbol(); + var Iterators = require_iterators(); + var ITERATOR = wellKnownSymbol("iterator"); + var ArrayPrototype = Array.prototype; + module2.exports = function(it) { + return it !== void 0 && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); + }; + } +}); + +// node_modules/core-js-pure/internals/get-iterator-method.js +var require_get_iterator_method = __commonJS({ + "node_modules/core-js-pure/internals/get-iterator-method.js"(exports, module2) { + var classof = require_classof(); + var getMethod = require_get_method(); + var isNullOrUndefined = require_is_null_or_undefined(); + var Iterators = require_iterators(); + var wellKnownSymbol = require_well_known_symbol(); + var ITERATOR = wellKnownSymbol("iterator"); + module2.exports = function(it) { + if (!isNullOrUndefined(it)) + return getMethod(it, ITERATOR) || getMethod(it, "@@iterator") || Iterators[classof(it)]; + }; + } +}); + +// node_modules/core-js-pure/internals/get-iterator.js +var require_get_iterator = __commonJS({ + "node_modules/core-js-pure/internals/get-iterator.js"(exports, module2) { + var call = require_function_call(); + var aCallable = require_a_callable(); + var anObject = require_an_object(); + var tryToString = require_try_to_string(); + var getIteratorMethod = require_get_iterator_method(); + var $TypeError = TypeError; + module2.exports = function(argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator; + if (aCallable(iteratorMethod)) + return anObject(call(iteratorMethod, argument)); + throw $TypeError(tryToString(argument) + " is not iterable"); + }; + } +}); + +// node_modules/core-js-pure/internals/array-from.js +var require_array_from = __commonJS({ + "node_modules/core-js-pure/internals/array-from.js"(exports, module2) { + "use strict"; + var bind = require_function_bind_context(); + var call = require_function_call(); + var toObject = require_to_object(); + var callWithSafeIterationClosing = require_call_with_safe_iteration_closing(); + var isArrayIteratorMethod = require_is_array_iterator_method(); + var isConstructor = require_is_constructor(); + var lengthOfArrayLike = require_length_of_array_like(); + var createProperty = require_create_property(); + var getIterator = require_get_iterator(); + var getIteratorMethod = require_get_iterator_method(); + var $Array = Array; + module2.exports = function from(arrayLike) { + var O = toObject(arrayLike); + var IS_CONSTRUCTOR = isConstructor(this); + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : void 0; + var mapping = mapfn !== void 0; + if (mapping) + mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : void 0); + var iteratorMethod = getIteratorMethod(O); + var index = 0; + var length, result, step, iterator, next, value; + if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) { + iterator = getIterator(O, iteratorMethod); + next = iterator.next; + result = IS_CONSTRUCTOR ? new this() : []; + for (; !(step = call(next, iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value; + createProperty(result, index, value); + } + } else { + length = lengthOfArrayLike(O); + result = IS_CONSTRUCTOR ? new this(length) : $Array(length); + for (; length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty(result, index, value); + } + } + result.length = index; + return result; + }; + } +}); + +// node_modules/core-js-pure/internals/check-correctness-of-iteration.js +var require_check_correctness_of_iteration = __commonJS({ + "node_modules/core-js-pure/internals/check-correctness-of-iteration.js"(exports, module2) { + var wellKnownSymbol = require_well_known_symbol(); + var ITERATOR = wellKnownSymbol("iterator"); + var SAFE_CLOSING = false; + try { + called = 0; + iteratorWithReturn = { + next: function() { + return { done: !!called++ }; + }, + "return": function() { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function() { + return this; + }; + Array.from(iteratorWithReturn, function() { + throw 2; + }); + } catch (error) { + } + var called; + var iteratorWithReturn; + module2.exports = function(exec, SKIP_CLOSING) { + if (!SKIP_CLOSING && !SAFE_CLOSING) + return false; + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function() { + return { + next: function() { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { + } + return ITERATION_SUPPORT; + }; + } +}); + +// node_modules/core-js-pure/modules/es.array.from.js +var require_es_array_from = __commonJS({ + "node_modules/core-js-pure/modules/es.array.from.js"() { + var $ = require_export(); + var from = require_array_from(); + var checkCorrectnessOfIteration = require_check_correctness_of_iteration(); + var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function(iterable) { + Array.from(iterable); + }); + $({ target: "Array", stat: true, forced: INCORRECT_ITERATION }, { + from + }); + } +}); + +// node_modules/core-js-pure/es/array/from.js +var require_from = __commonJS({ + "node_modules/core-js-pure/es/array/from.js"(exports, module2) { + require_es_string_iterator(); + require_es_array_from(); + var path = require_path(); + module2.exports = path.Array.from; + } +}); + +// node_modules/core-js-pure/stable/array/from.js +var require_from2 = __commonJS({ + "node_modules/core-js-pure/stable/array/from.js"(exports, module2) { + var parent = require_from(); + module2.exports = parent; + } +}); + +// node_modules/@babel/runtime-corejs3/core-js-stable/array/from.js +var require_from3 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js-stable/array/from.js"(exports, module2) { + module2.exports = require_from2(); + } +}); + +// node_modules/core-js-pure/internals/does-not-exceed-safe-integer.js +var require_does_not_exceed_safe_integer = __commonJS({ + "node_modules/core-js-pure/internals/does-not-exceed-safe-integer.js"(exports, module2) { + var $TypeError = TypeError; + var MAX_SAFE_INTEGER = 9007199254740991; + module2.exports = function(it) { + if (it > MAX_SAFE_INTEGER) + throw $TypeError("Maximum allowed index exceeded"); + return it; + }; + } +}); + +// node_modules/core-js-pure/internals/array-species-constructor.js +var require_array_species_constructor = __commonJS({ + "node_modules/core-js-pure/internals/array-species-constructor.js"(exports, module2) { + var isArray = require_is_array(); + var isConstructor = require_is_constructor(); + var isObject = require_is_object(); + var wellKnownSymbol = require_well_known_symbol(); + var SPECIES = wellKnownSymbol("species"); + var $Array = Array; + module2.exports = function(originalArray) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + if (isConstructor(C) && (C === $Array || isArray(C.prototype))) + C = void 0; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) + C = void 0; + } + } + return C === void 0 ? $Array : C; + }; + } +}); + +// node_modules/core-js-pure/internals/array-species-create.js +var require_array_species_create = __commonJS({ + "node_modules/core-js-pure/internals/array-species-create.js"(exports, module2) { + var arraySpeciesConstructor = require_array_species_constructor(); + module2.exports = function(originalArray, length) { + return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length); + }; + } +}); + +// node_modules/core-js-pure/modules/es.array.concat.js +var require_es_array_concat = __commonJS({ + "node_modules/core-js-pure/modules/es.array.concat.js"() { + "use strict"; + var $ = require_export(); + var fails = require_fails(); + var isArray = require_is_array(); + var isObject = require_is_object(); + var toObject = require_to_object(); + var lengthOfArrayLike = require_length_of_array_like(); + var doesNotExceedSafeInteger = require_does_not_exceed_safe_integer(); + var createProperty = require_create_property(); + var arraySpeciesCreate = require_array_species_create(); + var arrayMethodHasSpeciesSupport = require_array_method_has_species_support(); + var wellKnownSymbol = require_well_known_symbol(); + var V8_VERSION = require_engine_v8_version(); + var IS_CONCAT_SPREADABLE = wellKnownSymbol("isConcatSpreadable"); + var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function() { + var array = []; + array[IS_CONCAT_SPREADABLE] = false; + return array.concat()[0] !== array; + }); + var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("concat"); + var isConcatSpreadable = function(O) { + if (!isObject(O)) + return false; + var spreadable = O[IS_CONCAT_SPREADABLE]; + return spreadable !== void 0 ? !!spreadable : isArray(O); + }; + var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT; + $({ target: "Array", proto: true, arity: 1, forced: FORCED }, { + concat: function concat(arg) { + var O = toObject(this); + var A = arraySpeciesCreate(O, 0); + var n = 0; + var i, k, length, len, E; + for (i = -1, length = arguments.length; i < length; i++) { + E = i === -1 ? O : arguments[i]; + if (isConcatSpreadable(E)) { + len = lengthOfArrayLike(E); + doesNotExceedSafeInteger(n + len); + for (k = 0; k < len; k++, n++) + if (k in E) + createProperty(A, n, E[k]); + } else { + doesNotExceedSafeInteger(n + 1); + createProperty(A, n++, E); + } + } + A.length = n; + return A; + } + }); + } +}); + +// node_modules/core-js-pure/modules/es.object.to-string.js +var require_es_object_to_string = __commonJS({ + "node_modules/core-js-pure/modules/es.object.to-string.js"() { + } +}); + +// node_modules/core-js-pure/internals/object-get-own-property-names.js +var require_object_get_own_property_names = __commonJS({ + "node_modules/core-js-pure/internals/object-get-own-property-names.js"(exports) { + var internalObjectKeys = require_object_keys_internal(); + var enumBugKeys = require_enum_bug_keys(); + var hiddenKeys = enumBugKeys.concat("length", "prototype"); + exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); + }; + } +}); + +// node_modules/core-js-pure/internals/array-slice-simple.js +var require_array_slice_simple = __commonJS({ + "node_modules/core-js-pure/internals/array-slice-simple.js"(exports, module2) { + var toAbsoluteIndex = require_to_absolute_index(); + var lengthOfArrayLike = require_length_of_array_like(); + var createProperty = require_create_property(); + var $Array = Array; + var max2 = Math.max; + module2.exports = function(O, start2, end2) { + var length = lengthOfArrayLike(O); + var k = toAbsoluteIndex(start2, length); + var fin = toAbsoluteIndex(end2 === void 0 ? length : end2, length); + var result = $Array(max2(fin - k, 0)); + for (var n = 0; k < fin; k++, n++) + createProperty(result, n, O[k]); + result.length = n; + return result; + }; + } +}); + +// node_modules/core-js-pure/internals/object-get-own-property-names-external.js +var require_object_get_own_property_names_external = __commonJS({ + "node_modules/core-js-pure/internals/object-get-own-property-names-external.js"(exports, module2) { + var classof = require_classof_raw(); + var toIndexedObject = require_to_indexed_object(); + var $getOwnPropertyNames = require_object_get_own_property_names().f; + var arraySlice = require_array_slice_simple(); + var windowNames = typeof window == "object" && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : []; + var getWindowNames = function(it) { + try { + return $getOwnPropertyNames(it); + } catch (error) { + return arraySlice(windowNames); + } + }; + module2.exports.f = function getOwnPropertyNames(it) { + return windowNames && classof(it) == "Window" ? getWindowNames(it) : $getOwnPropertyNames(toIndexedObject(it)); + }; + } +}); + +// node_modules/core-js-pure/internals/object-get-own-property-symbols.js +var require_object_get_own_property_symbols = __commonJS({ + "node_modules/core-js-pure/internals/object-get-own-property-symbols.js"(exports) { + exports.f = Object.getOwnPropertySymbols; + } +}); + +// node_modules/core-js-pure/internals/well-known-symbol-wrapped.js +var require_well_known_symbol_wrapped = __commonJS({ + "node_modules/core-js-pure/internals/well-known-symbol-wrapped.js"(exports) { + var wellKnownSymbol = require_well_known_symbol(); + exports.f = wellKnownSymbol; + } +}); + +// node_modules/core-js-pure/internals/well-known-symbol-define.js +var require_well_known_symbol_define = __commonJS({ + "node_modules/core-js-pure/internals/well-known-symbol-define.js"(exports, module2) { + var path = require_path(); + var hasOwn = require_has_own_property(); + var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped(); + var defineProperty = require_object_define_property().f; + module2.exports = function(NAME) { + var Symbol2 = path.Symbol || (path.Symbol = {}); + if (!hasOwn(Symbol2, NAME)) + defineProperty(Symbol2, NAME, { + value: wrappedWellKnownSymbolModule.f(NAME) + }); + }; + } +}); + +// node_modules/core-js-pure/internals/symbol-define-to-primitive.js +var require_symbol_define_to_primitive = __commonJS({ + "node_modules/core-js-pure/internals/symbol-define-to-primitive.js"(exports, module2) { + var call = require_function_call(); + var getBuiltIn = require_get_built_in(); + var wellKnownSymbol = require_well_known_symbol(); + var defineBuiltIn = require_define_built_in(); + module2.exports = function() { + var Symbol2 = getBuiltIn("Symbol"); + var SymbolPrototype = Symbol2 && Symbol2.prototype; + var valueOf = SymbolPrototype && SymbolPrototype.valueOf; + var TO_PRIMITIVE = wellKnownSymbol("toPrimitive"); + if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) { + defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function(hint) { + return call(valueOf, this); + }, { arity: 1 }); + } + }; + } +}); + +// node_modules/core-js-pure/internals/array-iteration.js +var require_array_iteration = __commonJS({ + "node_modules/core-js-pure/internals/array-iteration.js"(exports, module2) { + var bind = require_function_bind_context(); + var uncurryThis = require_function_uncurry_this(); + var IndexedObject = require_indexed_object(); + var toObject = require_to_object(); + var lengthOfArrayLike = require_length_of_array_like(); + var arraySpeciesCreate = require_array_species_create(); + var push = uncurryThis([].push); + var createMethod = function(TYPE) { + var IS_MAP = TYPE == 1; + var IS_FILTER = TYPE == 2; + var IS_SOME = TYPE == 3; + var IS_EVERY = TYPE == 4; + var IS_FIND_INDEX = TYPE == 6; + var IS_FILTER_REJECT = TYPE == 7; + var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; + return function($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self2 = IndexedObject(O); + var boundFunction = bind(callbackfn, that); + var length = lengthOfArrayLike(self2); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : void 0; + var value, result; + for (; length > index; index++) + if (NO_HOLES || index in self2) { + value = self2[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) + target[index] = result; + else if (result) + switch (TYPE) { + case 3: + return true; + case 5: + return value; + case 6: + return index; + case 2: + push(target, value); + } + else + switch (TYPE) { + case 4: + return false; + case 7: + push(target, value); + } + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; + }; + module2.exports = { + forEach: createMethod(0), + map: createMethod(1), + filter: createMethod(2), + some: createMethod(3), + every: createMethod(4), + find: createMethod(5), + findIndex: createMethod(6), + filterReject: createMethod(7) + }; + } +}); + +// node_modules/core-js-pure/modules/es.symbol.constructor.js +var require_es_symbol_constructor = __commonJS({ + "node_modules/core-js-pure/modules/es.symbol.constructor.js"() { + "use strict"; + var $ = require_export(); + var global2 = require_global(); + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var IS_PURE = require_is_pure(); + var DESCRIPTORS = require_descriptors(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var fails = require_fails(); + var hasOwn = require_has_own_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var anObject = require_an_object(); + var toIndexedObject = require_to_indexed_object(); + var toPropertyKey = require_to_property_key(); + var $toString = require_to_string(); + var createPropertyDescriptor = require_create_property_descriptor(); + var nativeObjectCreate = require_object_create(); + var objectKeys = require_object_keys(); + var getOwnPropertyNamesModule = require_object_get_own_property_names(); + var getOwnPropertyNamesExternal = require_object_get_own_property_names_external(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor(); + var definePropertyModule = require_object_define_property(); + var definePropertiesModule = require_object_define_properties(); + var propertyIsEnumerableModule = require_object_property_is_enumerable(); + var defineBuiltIn = require_define_built_in(); + var shared = require_shared(); + var sharedKey = require_shared_key(); + var hiddenKeys = require_hidden_keys(); + var uid = require_uid(); + var wellKnownSymbol = require_well_known_symbol(); + var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped(); + var defineWellKnownSymbol = require_well_known_symbol_define(); + var defineSymbolToPrimitive = require_symbol_define_to_primitive(); + var setToStringTag = require_set_to_string_tag(); + var InternalStateModule = require_internal_state(); + var $forEach = require_array_iteration().forEach; + var HIDDEN = sharedKey("hidden"); + var SYMBOL = "Symbol"; + var PROTOTYPE = "prototype"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(SYMBOL); + var ObjectPrototype = Object[PROTOTYPE]; + var $Symbol = global2.Symbol; + var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE]; + var TypeError2 = global2.TypeError; + var QObject = global2.QObject; + var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + var nativeDefineProperty = definePropertyModule.f; + var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f; + var nativePropertyIsEnumerable = propertyIsEnumerableModule.f; + var push = uncurryThis([].push); + var AllSymbols = shared("symbols"); + var ObjectPrototypeSymbols = shared("op-symbols"); + var WellKnownSymbolsStore = shared("wks"); + var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; + var setSymbolDescriptor = DESCRIPTORS && fails(function() { + return nativeObjectCreate(nativeDefineProperty({}, "a", { + get: function() { + return nativeDefineProperty(this, "a", { value: 7 }).a; + } + })).a != 7; + }) ? function(O, P, Attributes) { + var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P); + if (ObjectPrototypeDescriptor) + delete ObjectPrototype[P]; + nativeDefineProperty(O, P, Attributes); + if (ObjectPrototypeDescriptor && O !== ObjectPrototype) { + nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor); + } + } : nativeDefineProperty; + var wrap = function(tag, description) { + var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype); + setInternalState(symbol, { + type: SYMBOL, + tag, + description + }); + if (!DESCRIPTORS) + symbol.description = description; + return symbol; + }; + var $defineProperty = function defineProperty(O, P, Attributes) { + if (O === ObjectPrototype) + $defineProperty(ObjectPrototypeSymbols, P, Attributes); + anObject(O); + var key = toPropertyKey(P); + anObject(Attributes); + if (hasOwn(AllSymbols, key)) { + if (!Attributes.enumerable) { + if (!hasOwn(O, HIDDEN)) + nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {})); + O[HIDDEN][key] = true; + } else { + if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) + O[HIDDEN][key] = false; + Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) }); + } + return setSymbolDescriptor(O, key, Attributes); + } + return nativeDefineProperty(O, key, Attributes); + }; + var $defineProperties = function defineProperties(O, Properties) { + anObject(O); + var properties = toIndexedObject(Properties); + var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties)); + $forEach(keys, function(key) { + if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) + $defineProperty(O, key, properties[key]); + }); + return O; + }; + var $create = function create(O, Properties) { + return Properties === void 0 ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties); + }; + var $propertyIsEnumerable = function propertyIsEnumerable(V) { + var P = toPropertyKey(V); + var enumerable = call(nativePropertyIsEnumerable, this, P); + if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) + return false; + return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true; + }; + var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { + var it = toIndexedObject(O); + var key = toPropertyKey(P); + if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) + return; + var descriptor = nativeGetOwnPropertyDescriptor(it, key); + if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) { + descriptor.enumerable = true; + } + return descriptor; + }; + var $getOwnPropertyNames = function getOwnPropertyNames(O) { + var names = nativeGetOwnPropertyNames(toIndexedObject(O)); + var result = []; + $forEach(names, function(key) { + if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) + push(result, key); + }); + return result; + }; + var $getOwnPropertySymbols = function(O) { + var IS_OBJECT_PROTOTYPE = O === ObjectPrototype; + var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O)); + var result = []; + $forEach(names, function(key) { + if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) { + push(result, AllSymbols[key]); + } + }); + return result; + }; + if (!NATIVE_SYMBOL) { + $Symbol = function Symbol2() { + if (isPrototypeOf(SymbolPrototype, this)) + throw TypeError2("Symbol is not a constructor"); + var description = !arguments.length || arguments[0] === void 0 ? void 0 : $toString(arguments[0]); + var tag = uid(description); + var setter = function(value) { + if (this === ObjectPrototype) + call(setter, ObjectPrototypeSymbols, value); + if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) + this[HIDDEN][tag] = false; + setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value)); + }; + if (DESCRIPTORS && USE_SETTER) + setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter }); + return wrap(tag, description); + }; + SymbolPrototype = $Symbol[PROTOTYPE]; + defineBuiltIn(SymbolPrototype, "toString", function toString() { + return getInternalState(this).tag; + }); + defineBuiltIn($Symbol, "withoutSetter", function(description) { + return wrap(uid(description), description); + }); + propertyIsEnumerableModule.f = $propertyIsEnumerable; + definePropertyModule.f = $defineProperty; + definePropertiesModule.f = $defineProperties; + getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor; + getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames; + getOwnPropertySymbolsModule.f = $getOwnPropertySymbols; + wrappedWellKnownSymbolModule.f = function(name) { + return wrap(wellKnownSymbol(name), name); + }; + if (DESCRIPTORS) { + nativeDefineProperty(SymbolPrototype, "description", { + configurable: true, + get: function description() { + return getInternalState(this).description; + } + }); + if (!IS_PURE) { + defineBuiltIn(ObjectPrototype, "propertyIsEnumerable", $propertyIsEnumerable, { unsafe: true }); + } + } + } + $({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, { + Symbol: $Symbol + }); + $forEach(objectKeys(WellKnownSymbolsStore), function(name) { + defineWellKnownSymbol(name); + }); + $({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, { + useSetter: function() { + USE_SETTER = true; + }, + useSimple: function() { + USE_SETTER = false; + } + }); + $({ target: "Object", stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, { + create: $create, + defineProperty: $defineProperty, + defineProperties: $defineProperties, + getOwnPropertyDescriptor: $getOwnPropertyDescriptor + }); + $({ target: "Object", stat: true, forced: !NATIVE_SYMBOL }, { + getOwnPropertyNames: $getOwnPropertyNames + }); + defineSymbolToPrimitive(); + setToStringTag($Symbol, SYMBOL); + hiddenKeys[HIDDEN] = true; + } +}); + +// node_modules/core-js-pure/internals/symbol-registry-detection.js +var require_symbol_registry_detection = __commonJS({ + "node_modules/core-js-pure/internals/symbol-registry-detection.js"(exports, module2) { + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + module2.exports = NATIVE_SYMBOL && !!Symbol["for"] && !!Symbol.keyFor; + } +}); + +// node_modules/core-js-pure/modules/es.symbol.for.js +var require_es_symbol_for = __commonJS({ + "node_modules/core-js-pure/modules/es.symbol.for.js"() { + var $ = require_export(); + var getBuiltIn = require_get_built_in(); + var hasOwn = require_has_own_property(); + var toString = require_to_string(); + var shared = require_shared(); + var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection(); + var StringToSymbolRegistry = shared("string-to-symbol-registry"); + var SymbolToStringRegistry = shared("symbol-to-string-registry"); + $({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + "for": function(key) { + var string = toString(key); + if (hasOwn(StringToSymbolRegistry, string)) + return StringToSymbolRegistry[string]; + var symbol = getBuiltIn("Symbol")(string); + StringToSymbolRegistry[string] = symbol; + SymbolToStringRegistry[symbol] = string; + return symbol; + } + }); + } +}); + +// node_modules/core-js-pure/modules/es.symbol.key-for.js +var require_es_symbol_key_for = __commonJS({ + "node_modules/core-js-pure/modules/es.symbol.key-for.js"() { + var $ = require_export(); + var hasOwn = require_has_own_property(); + var isSymbol = require_is_symbol(); + var tryToString = require_try_to_string(); + var shared = require_shared(); + var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection(); + var SymbolToStringRegistry = shared("symbol-to-string-registry"); + $({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + keyFor: function keyFor(sym) { + if (!isSymbol(sym)) + throw TypeError(tryToString(sym) + " is not a symbol"); + if (hasOwn(SymbolToStringRegistry, sym)) + return SymbolToStringRegistry[sym]; + } + }); + } +}); + +// node_modules/core-js-pure/modules/es.json.stringify.js +var require_es_json_stringify = __commonJS({ + "node_modules/core-js-pure/modules/es.json.stringify.js"() { + var $ = require_export(); + var getBuiltIn = require_get_built_in(); + var apply = require_function_apply(); + var call = require_function_call(); + var uncurryThis = require_function_uncurry_this(); + var fails = require_fails(); + var isArray = require_is_array(); + var isCallable = require_is_callable(); + var isObject = require_is_object(); + var isSymbol = require_is_symbol(); + var arraySlice = require_array_slice(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var $stringify = getBuiltIn("JSON", "stringify"); + var exec = uncurryThis(/./.exec); + var charAt = uncurryThis("".charAt); + var charCodeAt = uncurryThis("".charCodeAt); + var replace = uncurryThis("".replace); + var numberToString = uncurryThis(1 .toString); + var tester = /[\uD800-\uDFFF]/g; + var low = /^[\uD800-\uDBFF]$/; + var hi = /^[\uDC00-\uDFFF]$/; + var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function() { + var symbol = getBuiltIn("Symbol")(); + return $stringify([symbol]) != "[null]" || $stringify({ a: symbol }) != "{}" || $stringify(Object(symbol)) != "{}"; + }); + var ILL_FORMED_UNICODE = fails(function() { + return $stringify("\uDF06\uD834") !== '"\\udf06\\ud834"' || $stringify("\uDEAD") !== '"\\udead"'; + }); + var stringifyWithSymbolsFix = function(it, replacer) { + var args = arraySlice(arguments); + var $replacer = replacer; + if (!isObject(replacer) && it === void 0 || isSymbol(it)) + return; + if (!isArray(replacer)) + replacer = function(key, value) { + if (isCallable($replacer)) + value = call($replacer, this, key, value); + if (!isSymbol(value)) + return value; + }; + args[1] = replacer; + return apply($stringify, null, args); + }; + var fixIllFormed = function(match, offset2, string) { + var prev = charAt(string, offset2 - 1); + var next = charAt(string, offset2 + 1); + if (exec(low, match) && !exec(hi, next) || exec(hi, match) && !exec(low, prev)) { + return "\\u" + numberToString(charCodeAt(match, 0), 16); + } + return match; + }; + if ($stringify) { + $({ target: "JSON", stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, { + stringify: function stringify(it, replacer, space) { + var args = arraySlice(arguments); + var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args); + return ILL_FORMED_UNICODE && typeof result == "string" ? replace(result, tester, fixIllFormed) : result; + } + }); + } + } +}); + +// node_modules/core-js-pure/modules/es.object.get-own-property-symbols.js +var require_es_object_get_own_property_symbols = __commonJS({ + "node_modules/core-js-pure/modules/es.object.get-own-property-symbols.js"() { + var $ = require_export(); + var NATIVE_SYMBOL = require_symbol_constructor_detection(); + var fails = require_fails(); + var getOwnPropertySymbolsModule = require_object_get_own_property_symbols(); + var toObject = require_to_object(); + var FORCED = !NATIVE_SYMBOL || fails(function() { + getOwnPropertySymbolsModule.f(1); + }); + $({ target: "Object", stat: true, forced: FORCED }, { + getOwnPropertySymbols: function getOwnPropertySymbols(it) { + var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : []; + } + }); + } +}); + +// node_modules/core-js-pure/modules/es.symbol.js +var require_es_symbol = __commonJS({ + "node_modules/core-js-pure/modules/es.symbol.js"() { + require_es_symbol_constructor(); + require_es_symbol_for(); + require_es_symbol_key_for(); + require_es_json_stringify(); + require_es_object_get_own_property_symbols(); + } +}); + +// node_modules/core-js-pure/modules/es.symbol.async-iterator.js +var require_es_symbol_async_iterator = __commonJS({ + "node_modules/core-js-pure/modules/es.symbol.async-iterator.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("asyncIterator"); + } +}); + +// node_modules/core-js-pure/modules/es.symbol.description.js +var require_es_symbol_description = __commonJS({ + "node_modules/core-js-pure/modules/es.symbol.description.js"() { + } +}); + +// node_modules/core-js-pure/modules/es.symbol.has-instance.js +var require_es_symbol_has_instance = __commonJS({ + "node_modules/core-js-pure/modules/es.symbol.has-instance.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("hasInstance"); + } +}); + +// node_modules/core-js-pure/modules/es.symbol.is-concat-spreadable.js +var require_es_symbol_is_concat_spreadable = __commonJS({ + "node_modules/core-js-pure/modules/es.symbol.is-concat-spreadable.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("isConcatSpreadable"); + } +}); + +// node_modules/core-js-pure/modules/es.symbol.iterator.js +var require_es_symbol_iterator = __commonJS({ + "node_modules/core-js-pure/modules/es.symbol.iterator.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("iterator"); + } +}); + +// node_modules/core-js-pure/modules/es.symbol.match.js +var require_es_symbol_match = __commonJS({ + "node_modules/core-js-pure/modules/es.symbol.match.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("match"); + } +}); + +// node_modules/core-js-pure/modules/es.symbol.match-all.js +var require_es_symbol_match_all = __commonJS({ + "node_modules/core-js-pure/modules/es.symbol.match-all.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("matchAll"); + } +}); + +// node_modules/core-js-pure/modules/es.symbol.replace.js +var require_es_symbol_replace = __commonJS({ + "node_modules/core-js-pure/modules/es.symbol.replace.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("replace"); + } +}); + +// node_modules/core-js-pure/modules/es.symbol.search.js +var require_es_symbol_search = __commonJS({ + "node_modules/core-js-pure/modules/es.symbol.search.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("search"); + } +}); + +// node_modules/core-js-pure/modules/es.symbol.species.js +var require_es_symbol_species = __commonJS({ + "node_modules/core-js-pure/modules/es.symbol.species.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("species"); + } +}); + +// node_modules/core-js-pure/modules/es.symbol.split.js +var require_es_symbol_split = __commonJS({ + "node_modules/core-js-pure/modules/es.symbol.split.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("split"); + } +}); + +// node_modules/core-js-pure/modules/es.symbol.to-primitive.js +var require_es_symbol_to_primitive = __commonJS({ + "node_modules/core-js-pure/modules/es.symbol.to-primitive.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + var defineSymbolToPrimitive = require_symbol_define_to_primitive(); + defineWellKnownSymbol("toPrimitive"); + defineSymbolToPrimitive(); + } +}); + +// node_modules/core-js-pure/modules/es.symbol.to-string-tag.js +var require_es_symbol_to_string_tag = __commonJS({ + "node_modules/core-js-pure/modules/es.symbol.to-string-tag.js"() { + var getBuiltIn = require_get_built_in(); + var defineWellKnownSymbol = require_well_known_symbol_define(); + var setToStringTag = require_set_to_string_tag(); + defineWellKnownSymbol("toStringTag"); + setToStringTag(getBuiltIn("Symbol"), "Symbol"); + } +}); + +// node_modules/core-js-pure/modules/es.symbol.unscopables.js +var require_es_symbol_unscopables = __commonJS({ + "node_modules/core-js-pure/modules/es.symbol.unscopables.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("unscopables"); + } +}); + +// node_modules/core-js-pure/modules/es.json.to-string-tag.js +var require_es_json_to_string_tag = __commonJS({ + "node_modules/core-js-pure/modules/es.json.to-string-tag.js"() { + var global2 = require_global(); + var setToStringTag = require_set_to_string_tag(); + setToStringTag(global2.JSON, "JSON", true); + } +}); + +// node_modules/core-js-pure/modules/es.math.to-string-tag.js +var require_es_math_to_string_tag = __commonJS({ + "node_modules/core-js-pure/modules/es.math.to-string-tag.js"() { + } +}); + +// node_modules/core-js-pure/modules/es.reflect.to-string-tag.js +var require_es_reflect_to_string_tag = __commonJS({ + "node_modules/core-js-pure/modules/es.reflect.to-string-tag.js"() { + } +}); + +// node_modules/core-js-pure/es/symbol/index.js +var require_symbol = __commonJS({ + "node_modules/core-js-pure/es/symbol/index.js"(exports, module2) { + require_es_array_concat(); + require_es_object_to_string(); + require_es_symbol(); + require_es_symbol_async_iterator(); + require_es_symbol_description(); + require_es_symbol_has_instance(); + require_es_symbol_is_concat_spreadable(); + require_es_symbol_iterator(); + require_es_symbol_match(); + require_es_symbol_match_all(); + require_es_symbol_replace(); + require_es_symbol_search(); + require_es_symbol_species(); + require_es_symbol_split(); + require_es_symbol_to_primitive(); + require_es_symbol_to_string_tag(); + require_es_symbol_unscopables(); + require_es_json_to_string_tag(); + require_es_math_to_string_tag(); + require_es_reflect_to_string_tag(); + var path = require_path(); + module2.exports = path.Symbol; + } +}); + +// node_modules/core-js-pure/internals/add-to-unscopables.js +var require_add_to_unscopables = __commonJS({ + "node_modules/core-js-pure/internals/add-to-unscopables.js"(exports, module2) { + module2.exports = function() { + }; + } +}); + +// node_modules/core-js-pure/modules/es.array.iterator.js +var require_es_array_iterator = __commonJS({ + "node_modules/core-js-pure/modules/es.array.iterator.js"(exports, module2) { + "use strict"; + var toIndexedObject = require_to_indexed_object(); + var addToUnscopables = require_add_to_unscopables(); + var Iterators = require_iterators(); + var InternalStateModule = require_internal_state(); + var defineProperty = require_object_define_property().f; + var defineIterator = require_iterator_define(); + var createIterResultObject = require_create_iter_result_object(); + var IS_PURE = require_is_pure(); + var DESCRIPTORS = require_descriptors(); + var ARRAY_ITERATOR = "Array Iterator"; + var setInternalState = InternalStateModule.set; + var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + module2.exports = defineIterator(Array, "Array", function(iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), + index: 0, + kind + }); + }, function() { + var state = getInternalState(this); + var target = state.target; + var kind = state.kind; + var index = state.index++; + if (!target || index >= target.length) { + state.target = void 0; + return createIterResultObject(void 0, true); + } + if (kind == "keys") + return createIterResultObject(index, false); + if (kind == "values") + return createIterResultObject(target[index], false); + return createIterResultObject([index, target[index]], false); + }, "values"); + var values = Iterators.Arguments = Iterators.Array; + addToUnscopables("keys"); + addToUnscopables("values"); + addToUnscopables("entries"); + if (!IS_PURE && DESCRIPTORS && values.name !== "values") + try { + defineProperty(values, "name", { value: "values" }); + } catch (error) { + } + } +}); + +// node_modules/core-js-pure/internals/dom-iterables.js +var require_dom_iterables = __commonJS({ + "node_modules/core-js-pure/internals/dom-iterables.js"(exports, module2) { + module2.exports = { + CSSRuleList: 0, + CSSStyleDeclaration: 0, + CSSValueList: 0, + ClientRectList: 0, + DOMRectList: 0, + DOMStringList: 0, + DOMTokenList: 1, + DataTransferItemList: 0, + FileList: 0, + HTMLAllCollection: 0, + HTMLCollection: 0, + HTMLFormElement: 0, + HTMLSelectElement: 0, + MediaList: 0, + MimeTypeArray: 0, + NamedNodeMap: 0, + NodeList: 1, + PaintRequestList: 0, + Plugin: 0, + PluginArray: 0, + SVGLengthList: 0, + SVGNumberList: 0, + SVGPathSegList: 0, + SVGPointList: 0, + SVGStringList: 0, + SVGTransformList: 0, + SourceBufferList: 0, + StyleSheetList: 0, + TextTrackCueList: 0, + TextTrackList: 0, + TouchList: 0 + }; + } +}); + +// node_modules/core-js-pure/modules/web.dom-collections.iterator.js +var require_web_dom_collections_iterator = __commonJS({ + "node_modules/core-js-pure/modules/web.dom-collections.iterator.js"() { + require_es_array_iterator(); + var DOMIterables = require_dom_iterables(); + var global2 = require_global(); + var classof = require_classof(); + var createNonEnumerableProperty = require_create_non_enumerable_property(); + var Iterators = require_iterators(); + var wellKnownSymbol = require_well_known_symbol(); + var TO_STRING_TAG = wellKnownSymbol("toStringTag"); + for (COLLECTION_NAME in DOMIterables) { + Collection = global2[COLLECTION_NAME]; + CollectionPrototype = Collection && Collection.prototype; + if (CollectionPrototype && classof(CollectionPrototype) !== TO_STRING_TAG) { + createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME); + } + Iterators[COLLECTION_NAME] = Iterators.Array; + } + var Collection; + var CollectionPrototype; + var COLLECTION_NAME; + } +}); + +// node_modules/core-js-pure/stable/symbol/index.js +var require_symbol2 = __commonJS({ + "node_modules/core-js-pure/stable/symbol/index.js"(exports, module2) { + var parent = require_symbol(); + require_web_dom_collections_iterator(); + module2.exports = parent; + } +}); + +// node_modules/@babel/runtime-corejs3/core-js-stable/symbol.js +var require_symbol3 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js-stable/symbol.js"(exports, module2) { + module2.exports = require_symbol2(); + } +}); + +// node_modules/core-js-pure/es/get-iterator-method.js +var require_get_iterator_method2 = __commonJS({ + "node_modules/core-js-pure/es/get-iterator-method.js"(exports, module2) { + require_es_array_iterator(); + require_es_string_iterator(); + var getIteratorMethod = require_get_iterator_method(); + module2.exports = getIteratorMethod; + } +}); + +// node_modules/core-js-pure/stable/get-iterator-method.js +var require_get_iterator_method3 = __commonJS({ + "node_modules/core-js-pure/stable/get-iterator-method.js"(exports, module2) { + var parent = require_get_iterator_method2(); + require_web_dom_collections_iterator(); + module2.exports = parent; + } +}); + +// node_modules/core-js-pure/actual/get-iterator-method.js +var require_get_iterator_method4 = __commonJS({ + "node_modules/core-js-pure/actual/get-iterator-method.js"(exports, module2) { + var parent = require_get_iterator_method3(); + module2.exports = parent; + } +}); + +// node_modules/core-js-pure/full/get-iterator-method.js +var require_get_iterator_method5 = __commonJS({ + "node_modules/core-js-pure/full/get-iterator-method.js"(exports, module2) { + var parent = require_get_iterator_method4(); + module2.exports = parent; + } +}); + +// node_modules/core-js-pure/features/get-iterator-method.js +var require_get_iterator_method6 = __commonJS({ + "node_modules/core-js-pure/features/get-iterator-method.js"(exports, module2) { + module2.exports = require_get_iterator_method5(); + } +}); + +// node_modules/@babel/runtime-corejs3/core-js/get-iterator-method.js +var require_get_iterator_method7 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js/get-iterator-method.js"(exports, module2) { + module2.exports = require_get_iterator_method6(); + } +}); + +// node_modules/core-js-pure/modules/es.array.is-array.js +var require_es_array_is_array = __commonJS({ + "node_modules/core-js-pure/modules/es.array.is-array.js"() { + var $ = require_export(); + var isArray = require_is_array(); + $({ target: "Array", stat: true }, { + isArray + }); + } +}); + +// node_modules/core-js-pure/es/array/is-array.js +var require_is_array2 = __commonJS({ + "node_modules/core-js-pure/es/array/is-array.js"(exports, module2) { + require_es_array_is_array(); + var path = require_path(); + module2.exports = path.Array.isArray; + } +}); + +// node_modules/core-js-pure/stable/array/is-array.js +var require_is_array3 = __commonJS({ + "node_modules/core-js-pure/stable/array/is-array.js"(exports, module2) { + var parent = require_is_array2(); + module2.exports = parent; + } +}); + +// node_modules/@babel/runtime-corejs3/core-js-stable/array/is-array.js +var require_is_array4 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js-stable/array/is-array.js"(exports, module2) { + module2.exports = require_is_array3(); + } +}); + +// node_modules/core-js-pure/actual/array/is-array.js +var require_is_array5 = __commonJS({ + "node_modules/core-js-pure/actual/array/is-array.js"(exports, module2) { + var parent = require_is_array3(); + module2.exports = parent; + } +}); + +// node_modules/core-js-pure/full/array/is-array.js +var require_is_array6 = __commonJS({ + "node_modules/core-js-pure/full/array/is-array.js"(exports, module2) { + var parent = require_is_array5(); + module2.exports = parent; + } +}); + +// node_modules/core-js-pure/features/array/is-array.js +var require_is_array7 = __commonJS({ + "node_modules/core-js-pure/features/array/is-array.js"(exports, module2) { + module2.exports = require_is_array6(); + } +}); + +// node_modules/@babel/runtime-corejs3/core-js/array/is-array.js +var require_is_array8 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js/array/is-array.js"(exports, module2) { + module2.exports = require_is_array7(); + } +}); + +// node_modules/@babel/runtime-corejs3/helpers/arrayWithHoles.js +var require_arrayWithHoles = __commonJS({ + "node_modules/@babel/runtime-corejs3/helpers/arrayWithHoles.js"(exports, module2) { + var _Array$isArray = require_is_array8(); + function _arrayWithHoles(arr) { + if (_Array$isArray(arr)) + return arr; + } + module2.exports = _arrayWithHoles, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/core-js-pure/actual/symbol/index.js +var require_symbol4 = __commonJS({ + "node_modules/core-js-pure/actual/symbol/index.js"(exports, module2) { + var parent = require_symbol2(); + module2.exports = parent; + } +}); + +// node_modules/core-js-pure/modules/esnext.symbol.async-dispose.js +var require_esnext_symbol_async_dispose = __commonJS({ + "node_modules/core-js-pure/modules/esnext.symbol.async-dispose.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("asyncDispose"); + } +}); + +// node_modules/core-js-pure/modules/esnext.symbol.dispose.js +var require_esnext_symbol_dispose = __commonJS({ + "node_modules/core-js-pure/modules/esnext.symbol.dispose.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("dispose"); + } +}); + +// node_modules/core-js-pure/modules/esnext.symbol.matcher.js +var require_esnext_symbol_matcher = __commonJS({ + "node_modules/core-js-pure/modules/esnext.symbol.matcher.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("matcher"); + } +}); + +// node_modules/core-js-pure/modules/esnext.symbol.metadata-key.js +var require_esnext_symbol_metadata_key = __commonJS({ + "node_modules/core-js-pure/modules/esnext.symbol.metadata-key.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("metadataKey"); + } +}); + +// node_modules/core-js-pure/modules/esnext.symbol.observable.js +var require_esnext_symbol_observable = __commonJS({ + "node_modules/core-js-pure/modules/esnext.symbol.observable.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("observable"); + } +}); + +// node_modules/core-js-pure/modules/esnext.symbol.metadata.js +var require_esnext_symbol_metadata = __commonJS({ + "node_modules/core-js-pure/modules/esnext.symbol.metadata.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("metadata"); + } +}); + +// node_modules/core-js-pure/modules/esnext.symbol.pattern-match.js +var require_esnext_symbol_pattern_match = __commonJS({ + "node_modules/core-js-pure/modules/esnext.symbol.pattern-match.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("patternMatch"); + } +}); + +// node_modules/core-js-pure/modules/esnext.symbol.replace-all.js +var require_esnext_symbol_replace_all = __commonJS({ + "node_modules/core-js-pure/modules/esnext.symbol.replace-all.js"() { + var defineWellKnownSymbol = require_well_known_symbol_define(); + defineWellKnownSymbol("replaceAll"); + } +}); + +// node_modules/core-js-pure/full/symbol/index.js +var require_symbol5 = __commonJS({ + "node_modules/core-js-pure/full/symbol/index.js"(exports, module2) { + var parent = require_symbol4(); + require_esnext_symbol_async_dispose(); + require_esnext_symbol_dispose(); + require_esnext_symbol_matcher(); + require_esnext_symbol_metadata_key(); + require_esnext_symbol_observable(); + require_esnext_symbol_metadata(); + require_esnext_symbol_pattern_match(); + require_esnext_symbol_replace_all(); + module2.exports = parent; + } +}); + +// node_modules/core-js-pure/features/symbol/index.js +var require_symbol6 = __commonJS({ + "node_modules/core-js-pure/features/symbol/index.js"(exports, module2) { + module2.exports = require_symbol5(); + } +}); + +// node_modules/@babel/runtime-corejs3/core-js/symbol.js +var require_symbol7 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js/symbol.js"(exports, module2) { + module2.exports = require_symbol6(); + } +}); + +// node_modules/@babel/runtime-corejs3/helpers/iterableToArrayLimit.js +var require_iterableToArrayLimit = __commonJS({ + "node_modules/@babel/runtime-corejs3/helpers/iterableToArrayLimit.js"(exports, module2) { + var _Symbol = require_symbol7(); + var _getIteratorMethod = require_get_iterator_method7(); + function _iterableToArrayLimit(arr, i) { + var _i = arr == null ? null : typeof _Symbol !== "undefined" && _getIteratorMethod(arr) || arr["@@iterator"]; + if (_i == null) + return; + var _arr = []; + var _n = true; + var _d = false; + var _s, _e; + try { + for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + if (i && _arr.length === i) + break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) + _i["return"](); + } finally { + if (_d) + throw _e; + } + } + return _arr; + } + module2.exports = _iterableToArrayLimit, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/core-js-pure/actual/instance/slice.js +var require_slice5 = __commonJS({ + "node_modules/core-js-pure/actual/instance/slice.js"(exports, module2) { + var parent = require_slice3(); + module2.exports = parent; + } +}); + +// node_modules/core-js-pure/full/instance/slice.js +var require_slice6 = __commonJS({ + "node_modules/core-js-pure/full/instance/slice.js"(exports, module2) { + var parent = require_slice5(); + module2.exports = parent; + } +}); + +// node_modules/core-js-pure/features/instance/slice.js +var require_slice7 = __commonJS({ + "node_modules/core-js-pure/features/instance/slice.js"(exports, module2) { + module2.exports = require_slice6(); + } +}); + +// node_modules/@babel/runtime-corejs3/core-js/instance/slice.js +var require_slice8 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js/instance/slice.js"(exports, module2) { + module2.exports = require_slice7(); + } +}); + +// node_modules/core-js-pure/actual/array/from.js +var require_from4 = __commonJS({ + "node_modules/core-js-pure/actual/array/from.js"(exports, module2) { + var parent = require_from2(); + module2.exports = parent; + } +}); + +// node_modules/core-js-pure/full/array/from.js +var require_from5 = __commonJS({ + "node_modules/core-js-pure/full/array/from.js"(exports, module2) { + var parent = require_from4(); + module2.exports = parent; + } +}); + +// node_modules/core-js-pure/features/array/from.js +var require_from6 = __commonJS({ + "node_modules/core-js-pure/features/array/from.js"(exports, module2) { + module2.exports = require_from5(); + } +}); + +// node_modules/@babel/runtime-corejs3/core-js/array/from.js +var require_from7 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js/array/from.js"(exports, module2) { + module2.exports = require_from6(); + } +}); + +// node_modules/@babel/runtime-corejs3/helpers/arrayLikeToArray.js +var require_arrayLikeToArray = __commonJS({ + "node_modules/@babel/runtime-corejs3/helpers/arrayLikeToArray.js"(exports, module2) { + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) + len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) { + arr2[i] = arr[i]; + } + return arr2; + } + module2.exports = _arrayLikeToArray, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime-corejs3/helpers/unsupportedIterableToArray.js +var require_unsupportedIterableToArray = __commonJS({ + "node_modules/@babel/runtime-corejs3/helpers/unsupportedIterableToArray.js"(exports, module2) { + var _sliceInstanceProperty = require_slice8(); + var _Array$from = require_from7(); + var arrayLikeToArray = require_arrayLikeToArray(); + function _unsupportedIterableToArray(o, minLen) { + var _context; + if (!o) + return; + if (typeof o === "string") + return arrayLikeToArray(o, minLen); + var n = _sliceInstanceProperty(_context = Object.prototype.toString.call(o)).call(_context, 8, -1); + if (n === "Object" && o.constructor) + n = o.constructor.name; + if (n === "Map" || n === "Set") + return _Array$from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) + return arrayLikeToArray(o, minLen); + } + module2.exports = _unsupportedIterableToArray, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime-corejs3/helpers/nonIterableRest.js +var require_nonIterableRest = __commonJS({ + "node_modules/@babel/runtime-corejs3/helpers/nonIterableRest.js"(exports, module2) { + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + module2.exports = _nonIterableRest, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/@babel/runtime-corejs3/helpers/slicedToArray.js +var require_slicedToArray = __commonJS({ + "node_modules/@babel/runtime-corejs3/helpers/slicedToArray.js"(exports, module2) { + var arrayWithHoles = require_arrayWithHoles(); + var iterableToArrayLimit = require_iterableToArrayLimit(); + var unsupportedIterableToArray = require_unsupportedIterableToArray(); + var nonIterableRest = require_nonIterableRest(); + function _slicedToArray(arr, i) { + return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest(); + } + module2.exports = _slicedToArray, module2.exports.__esModule = true, module2.exports["default"] = module2.exports; + } +}); + +// node_modules/core-js-pure/modules/es.regexp.flags.js +var require_es_regexp_flags = __commonJS({ + "node_modules/core-js-pure/modules/es.regexp.flags.js"() { + } +}); + +// node_modules/core-js-pure/internals/regexp-flags.js +var require_regexp_flags = __commonJS({ + "node_modules/core-js-pure/internals/regexp-flags.js"(exports, module2) { + "use strict"; + var anObject = require_an_object(); + module2.exports = function() { + var that = anObject(this); + var result = ""; + if (that.hasIndices) + result += "d"; + if (that.global) + result += "g"; + if (that.ignoreCase) + result += "i"; + if (that.multiline) + result += "m"; + if (that.dotAll) + result += "s"; + if (that.unicode) + result += "u"; + if (that.unicodeSets) + result += "v"; + if (that.sticky) + result += "y"; + return result; + }; + } +}); + +// node_modules/core-js-pure/internals/regexp-get-flags.js +var require_regexp_get_flags = __commonJS({ + "node_modules/core-js-pure/internals/regexp-get-flags.js"(exports, module2) { + var call = require_function_call(); + var hasOwn = require_has_own_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var regExpFlags = require_regexp_flags(); + var RegExpPrototype = RegExp.prototype; + module2.exports = function(R) { + var flags = R.flags; + return flags === void 0 && !("flags" in RegExpPrototype) && !hasOwn(R, "flags") && isPrototypeOf(RegExpPrototype, R) ? call(regExpFlags, R) : flags; + }; + } +}); + +// node_modules/core-js-pure/es/regexp/flags.js +var require_flags = __commonJS({ + "node_modules/core-js-pure/es/regexp/flags.js"(exports, module2) { + require_es_regexp_flags(); + var getRegExpFlags = require_regexp_get_flags(); + module2.exports = getRegExpFlags; + } +}); + +// node_modules/core-js-pure/es/instance/flags.js +var require_flags2 = __commonJS({ + "node_modules/core-js-pure/es/instance/flags.js"(exports, module2) { + var isPrototypeOf = require_object_is_prototype_of(); + var flags = require_flags(); + var RegExpPrototype = RegExp.prototype; + module2.exports = function(it) { + return it === RegExpPrototype || isPrototypeOf(RegExpPrototype, it) ? flags(it) : it.flags; + }; + } +}); + +// node_modules/core-js-pure/stable/instance/flags.js +var require_flags3 = __commonJS({ + "node_modules/core-js-pure/stable/instance/flags.js"(exports, module2) { + var parent = require_flags2(); + module2.exports = parent; + } +}); + +// node_modules/@babel/runtime-corejs3/core-js-stable/instance/flags.js +var require_flags4 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js-stable/instance/flags.js"(exports, module2) { + module2.exports = require_flags3(); + } +}); + +// node_modules/core-js-pure/internals/delete-property-or-throw.js +var require_delete_property_or_throw = __commonJS({ + "node_modules/core-js-pure/internals/delete-property-or-throw.js"(exports, module2) { + "use strict"; + var tryToString = require_try_to_string(); + var $TypeError = TypeError; + module2.exports = function(O, P) { + if (!delete O[P]) + throw $TypeError("Cannot delete property " + tryToString(P) + " of " + tryToString(O)); + }; + } +}); + +// node_modules/core-js-pure/internals/array-sort.js +var require_array_sort = __commonJS({ + "node_modules/core-js-pure/internals/array-sort.js"(exports, module2) { + var arraySlice = require_array_slice_simple(); + var floor = Math.floor; + var mergeSort = function(array, comparefn) { + var length = array.length; + var middle = floor(length / 2); + return length < 8 ? insertionSort(array, comparefn) : merge( + array, + mergeSort(arraySlice(array, 0, middle), comparefn), + mergeSort(arraySlice(array, middle), comparefn), + comparefn + ); + }; + var insertionSort = function(array, comparefn) { + var length = array.length; + var i = 1; + var element, j; + while (i < length) { + j = i; + element = array[i]; + while (j && comparefn(array[j - 1], element) > 0) { + array[j] = array[--j]; + } + if (j !== i++) + array[j] = element; + } + return array; + }; + var merge = function(array, left2, right2, comparefn) { + var llength = left2.length; + var rlength = right2.length; + var lindex = 0; + var rindex = 0; + while (lindex < llength || rindex < rlength) { + array[lindex + rindex] = lindex < llength && rindex < rlength ? comparefn(left2[lindex], right2[rindex]) <= 0 ? left2[lindex++] : right2[rindex++] : lindex < llength ? left2[lindex++] : right2[rindex++]; + } + return array; + }; + module2.exports = mergeSort; + } +}); + +// node_modules/core-js-pure/internals/array-method-is-strict.js +var require_array_method_is_strict = __commonJS({ + "node_modules/core-js-pure/internals/array-method-is-strict.js"(exports, module2) { + "use strict"; + var fails = require_fails(); + module2.exports = function(METHOD_NAME, argument) { + var method = [][METHOD_NAME]; + return !!method && fails(function() { + method.call(null, argument || function() { + return 1; + }, 1); + }); + }; + } +}); + +// node_modules/core-js-pure/internals/engine-ff-version.js +var require_engine_ff_version = __commonJS({ + "node_modules/core-js-pure/internals/engine-ff-version.js"(exports, module2) { + var userAgent = require_engine_user_agent(); + var firefox = userAgent.match(/firefox\/(\d+)/i); + module2.exports = !!firefox && +firefox[1]; + } +}); + +// node_modules/core-js-pure/internals/engine-is-ie-or-edge.js +var require_engine_is_ie_or_edge = __commonJS({ + "node_modules/core-js-pure/internals/engine-is-ie-or-edge.js"(exports, module2) { + var UA = require_engine_user_agent(); + module2.exports = /MSIE|Trident/.test(UA); + } +}); + +// node_modules/core-js-pure/internals/engine-webkit-version.js +var require_engine_webkit_version = __commonJS({ + "node_modules/core-js-pure/internals/engine-webkit-version.js"(exports, module2) { + var userAgent = require_engine_user_agent(); + var webkit = userAgent.match(/AppleWebKit\/(\d+)\./); + module2.exports = !!webkit && +webkit[1]; + } +}); + +// node_modules/core-js-pure/modules/es.array.sort.js +var require_es_array_sort = __commonJS({ + "node_modules/core-js-pure/modules/es.array.sort.js"() { + "use strict"; + var $ = require_export(); + var uncurryThis = require_function_uncurry_this(); + var aCallable = require_a_callable(); + var toObject = require_to_object(); + var lengthOfArrayLike = require_length_of_array_like(); + var deletePropertyOrThrow = require_delete_property_or_throw(); + var toString = require_to_string(); + var fails = require_fails(); + var internalSort = require_array_sort(); + var arrayMethodIsStrict = require_array_method_is_strict(); + var FF = require_engine_ff_version(); + var IE_OR_EDGE = require_engine_is_ie_or_edge(); + var V8 = require_engine_v8_version(); + var WEBKIT = require_engine_webkit_version(); + var test = []; + var nativeSort = uncurryThis(test.sort); + var push = uncurryThis(test.push); + var FAILS_ON_UNDEFINED = fails(function() { + test.sort(void 0); + }); + var FAILS_ON_NULL = fails(function() { + test.sort(null); + }); + var STRICT_METHOD = arrayMethodIsStrict("sort"); + var STABLE_SORT = !fails(function() { + if (V8) + return V8 < 70; + if (FF && FF > 3) + return; + if (IE_OR_EDGE) + return true; + if (WEBKIT) + return WEBKIT < 603; + var result = ""; + var code, chr, value, index; + for (code = 65; code < 76; code++) { + chr = String.fromCharCode(code); + switch (code) { + case 66: + case 69: + case 70: + case 72: + value = 3; + break; + case 68: + case 71: + value = 4; + break; + default: + value = 2; + } + for (index = 0; index < 47; index++) { + test.push({ k: chr + index, v: value }); + } + } + test.sort(function(a, b) { + return b.v - a.v; + }); + for (index = 0; index < test.length; index++) { + chr = test[index].k.charAt(0); + if (result.charAt(result.length - 1) !== chr) + result += chr; + } + return result !== "DGBEFHACIJK"; + }); + var FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT; + var getSortCompare = function(comparefn) { + return function(x, y) { + if (y === void 0) + return -1; + if (x === void 0) + return 1; + if (comparefn !== void 0) + return +comparefn(x, y) || 0; + return toString(x) > toString(y) ? 1 : -1; + }; + }; + $({ target: "Array", proto: true, forced: FORCED }, { + sort: function sort(comparefn) { + if (comparefn !== void 0) + aCallable(comparefn); + var array = toObject(this); + if (STABLE_SORT) + return comparefn === void 0 ? nativeSort(array) : nativeSort(array, comparefn); + var items = []; + var arrayLength = lengthOfArrayLike(array); + var itemsLength, index; + for (index = 0; index < arrayLength; index++) { + if (index in array) + push(items, array[index]); + } + internalSort(items, getSortCompare(comparefn)); + itemsLength = lengthOfArrayLike(items); + index = 0; + while (index < itemsLength) + array[index] = items[index++]; + while (index < arrayLength) + deletePropertyOrThrow(array, index++); + return array; + } + }); + } +}); + +// node_modules/core-js-pure/es/array/virtual/sort.js +var require_sort = __commonJS({ + "node_modules/core-js-pure/es/array/virtual/sort.js"(exports, module2) { + require_es_array_sort(); + var entryVirtual = require_entry_virtual(); + module2.exports = entryVirtual("Array").sort; + } +}); + +// node_modules/core-js-pure/es/instance/sort.js +var require_sort2 = __commonJS({ + "node_modules/core-js-pure/es/instance/sort.js"(exports, module2) { + var isPrototypeOf = require_object_is_prototype_of(); + var method = require_sort(); + var ArrayPrototype = Array.prototype; + module2.exports = function(it) { + var own = it.sort; + return it === ArrayPrototype || isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.sort ? method : own; + }; + } +}); + +// node_modules/core-js-pure/stable/instance/sort.js +var require_sort3 = __commonJS({ + "node_modules/core-js-pure/stable/instance/sort.js"(exports, module2) { + var parent = require_sort2(); + module2.exports = parent; + } +}); + +// node_modules/@babel/runtime-corejs3/core-js-stable/instance/sort.js +var require_sort4 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js-stable/instance/sort.js"(exports, module2) { + module2.exports = require_sort3(); + } +}); + +// node_modules/core-js-pure/internals/whitespaces.js +var require_whitespaces = __commonJS({ + "node_modules/core-js-pure/internals/whitespaces.js"(exports, module2) { + module2.exports = " \n\v\f\r \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF"; + } +}); + +// node_modules/core-js-pure/internals/string-trim.js +var require_string_trim = __commonJS({ + "node_modules/core-js-pure/internals/string-trim.js"(exports, module2) { + var uncurryThis = require_function_uncurry_this(); + var requireObjectCoercible = require_require_object_coercible(); + var toString = require_to_string(); + var whitespaces = require_whitespaces(); + var replace = uncurryThis("".replace); + var whitespace = "[" + whitespaces + "]"; + var ltrim = RegExp("^" + whitespace + whitespace + "*"); + var rtrim = RegExp(whitespace + whitespace + "*$"); + var createMethod = function(TYPE) { + return function($this) { + var string = toString(requireObjectCoercible($this)); + if (TYPE & 1) + string = replace(string, ltrim, ""); + if (TYPE & 2) + string = replace(string, rtrim, ""); + return string; + }; + }; + module2.exports = { + start: createMethod(1), + end: createMethod(2), + trim: createMethod(3) + }; + } +}); + +// node_modules/core-js-pure/internals/number-parse-int.js +var require_number_parse_int = __commonJS({ + "node_modules/core-js-pure/internals/number-parse-int.js"(exports, module2) { + var global2 = require_global(); + var fails = require_fails(); + var uncurryThis = require_function_uncurry_this(); + var toString = require_to_string(); + var trim = require_string_trim().trim; + var whitespaces = require_whitespaces(); + var $parseInt = global2.parseInt; + var Symbol2 = global2.Symbol; + var ITERATOR = Symbol2 && Symbol2.iterator; + var hex = /^[+-]?0x/i; + var exec = uncurryThis(hex.exec); + var FORCED = $parseInt(whitespaces + "08") !== 8 || $parseInt(whitespaces + "0x16") !== 22 || ITERATOR && !fails(function() { + $parseInt(Object(ITERATOR)); + }); + module2.exports = FORCED ? function parseInt2(string, radix) { + var S = trim(toString(string)); + return $parseInt(S, radix >>> 0 || (exec(hex, S) ? 16 : 10)); + } : $parseInt; + } +}); + +// node_modules/core-js-pure/modules/es.parse-int.js +var require_es_parse_int = __commonJS({ + "node_modules/core-js-pure/modules/es.parse-int.js"() { + var $ = require_export(); + var $parseInt = require_number_parse_int(); + $({ global: true, forced: parseInt != $parseInt }, { + parseInt: $parseInt + }); + } +}); + +// node_modules/core-js-pure/es/parse-int.js +var require_parse_int = __commonJS({ + "node_modules/core-js-pure/es/parse-int.js"(exports, module2) { + require_es_parse_int(); + var path = require_path(); + module2.exports = path.parseInt; + } +}); + +// node_modules/core-js-pure/stable/parse-int.js +var require_parse_int2 = __commonJS({ + "node_modules/core-js-pure/stable/parse-int.js"(exports, module2) { + var parent = require_parse_int(); + module2.exports = parent; + } +}); + +// node_modules/@babel/runtime-corejs3/core-js-stable/parse-int.js +var require_parse_int3 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js-stable/parse-int.js"(exports, module2) { + module2.exports = require_parse_int2(); + } +}); + +// node_modules/core-js-pure/modules/es.array.index-of.js +var require_es_array_index_of = __commonJS({ + "node_modules/core-js-pure/modules/es.array.index-of.js"() { + "use strict"; + var $ = require_export(); + var uncurryThis = require_function_uncurry_this(); + var $indexOf = require_array_includes().indexOf; + var arrayMethodIsStrict = require_array_method_is_strict(); + var nativeIndexOf = uncurryThis([].indexOf); + var NEGATIVE_ZERO = !!nativeIndexOf && 1 / nativeIndexOf([1], 1, -0) < 0; + var STRICT_METHOD = arrayMethodIsStrict("indexOf"); + $({ target: "Array", proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD }, { + indexOf: function indexOf(searchElement) { + var fromIndex = arguments.length > 1 ? arguments[1] : void 0; + return NEGATIVE_ZERO ? nativeIndexOf(this, searchElement, fromIndex) || 0 : $indexOf(this, searchElement, fromIndex); + } + }); + } +}); + +// node_modules/core-js-pure/es/array/virtual/index-of.js +var require_index_of = __commonJS({ + "node_modules/core-js-pure/es/array/virtual/index-of.js"(exports, module2) { + require_es_array_index_of(); + var entryVirtual = require_entry_virtual(); + module2.exports = entryVirtual("Array").indexOf; + } +}); + +// node_modules/core-js-pure/es/instance/index-of.js +var require_index_of2 = __commonJS({ + "node_modules/core-js-pure/es/instance/index-of.js"(exports, module2) { + var isPrototypeOf = require_object_is_prototype_of(); + var method = require_index_of(); + var ArrayPrototype = Array.prototype; + module2.exports = function(it) { + var own = it.indexOf; + return it === ArrayPrototype || isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.indexOf ? method : own; + }; + } +}); + +// node_modules/core-js-pure/stable/instance/index-of.js +var require_index_of3 = __commonJS({ + "node_modules/core-js-pure/stable/instance/index-of.js"(exports, module2) { + var parent = require_index_of2(); + module2.exports = parent; + } +}); + +// node_modules/@babel/runtime-corejs3/core-js-stable/instance/index-of.js +var require_index_of4 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js-stable/instance/index-of.js"(exports, module2) { + module2.exports = require_index_of3(); + } +}); + +// node_modules/core-js-pure/internals/array-for-each.js +var require_array_for_each = __commonJS({ + "node_modules/core-js-pure/internals/array-for-each.js"(exports, module2) { + "use strict"; + var $forEach = require_array_iteration().forEach; + var arrayMethodIsStrict = require_array_method_is_strict(); + var STRICT_METHOD = arrayMethodIsStrict("forEach"); + module2.exports = !STRICT_METHOD ? function forEach(callbackfn) { + return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0); + } : [].forEach; + } +}); + +// node_modules/core-js-pure/modules/es.array.for-each.js +var require_es_array_for_each = __commonJS({ + "node_modules/core-js-pure/modules/es.array.for-each.js"() { + "use strict"; + var $ = require_export(); + var forEach = require_array_for_each(); + $({ target: "Array", proto: true, forced: [].forEach != forEach }, { + forEach + }); + } +}); + +// node_modules/core-js-pure/es/array/virtual/for-each.js +var require_for_each = __commonJS({ + "node_modules/core-js-pure/es/array/virtual/for-each.js"(exports, module2) { + require_es_array_for_each(); + var entryVirtual = require_entry_virtual(); + module2.exports = entryVirtual("Array").forEach; + } +}); + +// node_modules/core-js-pure/stable/array/virtual/for-each.js +var require_for_each2 = __commonJS({ + "node_modules/core-js-pure/stable/array/virtual/for-each.js"(exports, module2) { + var parent = require_for_each(); + module2.exports = parent; + } +}); + +// node_modules/core-js-pure/stable/instance/for-each.js +var require_for_each3 = __commonJS({ + "node_modules/core-js-pure/stable/instance/for-each.js"(exports, module2) { + require_web_dom_collections_iterator(); + var classof = require_classof(); + var hasOwn = require_has_own_property(); + var isPrototypeOf = require_object_is_prototype_of(); + var method = require_for_each2(); + var ArrayPrototype = Array.prototype; + var DOMIterables = { + DOMTokenList: true, + NodeList: true + }; + module2.exports = function(it) { + var own = it.forEach; + return it === ArrayPrototype || isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.forEach || hasOwn(DOMIterables, classof(it)) ? method : own; + }; + } +}); + +// node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js +var require_for_each4 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js-stable/instance/for-each.js"(exports, module2) { + module2.exports = require_for_each3(); + } +}); + +// node_modules/core-js-pure/modules/es.object.create.js +var require_es_object_create = __commonJS({ + "node_modules/core-js-pure/modules/es.object.create.js"() { + var $ = require_export(); + var DESCRIPTORS = require_descriptors(); + var create = require_object_create(); + $({ target: "Object", stat: true, sham: !DESCRIPTORS }, { + create + }); + } +}); + +// node_modules/core-js-pure/es/object/create.js +var require_create = __commonJS({ + "node_modules/core-js-pure/es/object/create.js"(exports, module2) { + require_es_object_create(); + var path = require_path(); + var Object2 = path.Object; + module2.exports = function create(P, D) { + return Object2.create(P, D); + }; + } +}); + +// node_modules/core-js-pure/stable/object/create.js +var require_create2 = __commonJS({ + "node_modules/core-js-pure/stable/object/create.js"(exports, module2) { + var parent = require_create(); + module2.exports = parent; + } +}); + +// node_modules/@babel/runtime-corejs3/core-js-stable/object/create.js +var require_create3 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js-stable/object/create.js"(exports, module2) { + module2.exports = require_create2(); + } +}); + +// node_modules/core-js-pure/es/array/virtual/concat.js +var require_concat = __commonJS({ + "node_modules/core-js-pure/es/array/virtual/concat.js"(exports, module2) { + require_es_array_concat(); + var entryVirtual = require_entry_virtual(); + module2.exports = entryVirtual("Array").concat; + } +}); + +// node_modules/core-js-pure/es/instance/concat.js +var require_concat2 = __commonJS({ + "node_modules/core-js-pure/es/instance/concat.js"(exports, module2) { + var isPrototypeOf = require_object_is_prototype_of(); + var method = require_concat(); + var ArrayPrototype = Array.prototype; + module2.exports = function(it) { + var own = it.concat; + return it === ArrayPrototype || isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.concat ? method : own; + }; + } +}); + +// node_modules/core-js-pure/stable/instance/concat.js +var require_concat3 = __commonJS({ + "node_modules/core-js-pure/stable/instance/concat.js"(exports, module2) { + var parent = require_concat2(); + module2.exports = parent; + } +}); + +// node_modules/@babel/runtime-corejs3/core-js-stable/instance/concat.js +var require_concat4 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js-stable/instance/concat.js"(exports, module2) { + module2.exports = require_concat3(); + } +}); + +// node_modules/xregexp/lib/xregexp.js +var require_xregexp = __commonJS({ + "node_modules/xregexp/lib/xregexp.js"(exports, module2) { + "use strict"; + var _sliceInstanceProperty2 = require_slice4(); + var _Array$from = require_from3(); + var _Symbol = require_symbol3(); + var _getIteratorMethod = require_get_iterator_method7(); + var _Array$isArray = require_is_array4(); + var _Object$defineProperty = require_define_property3(); + var _interopRequireDefault = require_interopRequireDefault(); + _Object$defineProperty(exports, "__esModule", { + value: true + }); + exports["default"] = void 0; + var _slicedToArray2 = _interopRequireDefault(require_slicedToArray()); + var _flags = _interopRequireDefault(require_flags4()); + var _sort = _interopRequireDefault(require_sort4()); + var _slice = _interopRequireDefault(require_slice4()); + var _parseInt2 = _interopRequireDefault(require_parse_int3()); + var _indexOf = _interopRequireDefault(require_index_of4()); + var _forEach = _interopRequireDefault(require_for_each4()); + var _create = _interopRequireDefault(require_create3()); + var _concat = _interopRequireDefault(require_concat4()); + function _createForOfIteratorHelper(o, allowArrayLike) { + var it = typeof _Symbol !== "undefined" && _getIteratorMethod(o) || o["@@iterator"]; + if (!it) { + if (_Array$isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) + o = it; + var i = 0; + var F = function F2() { + }; + return { s: F, n: function n() { + if (i >= o.length) + return { done: true }; + return { done: false, value: o[i++] }; + }, e: function e(_e) { + throw _e; + }, f: F }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var normalCompletion = true, didErr = false, err; + return { s: function s() { + it = it.call(o); + }, n: function n() { + var step = it.next(); + normalCompletion = step.done; + return step; + }, e: function e(_e2) { + didErr = true; + err = _e2; + }, f: function f() { + try { + if (!normalCompletion && it["return"] != null) + it["return"](); + } finally { + if (didErr) + throw err; + } + } }; + } + function _unsupportedIterableToArray(o, minLen) { + var _context9; + if (!o) + return; + if (typeof o === "string") + return _arrayLikeToArray(o, minLen); + var n = _sliceInstanceProperty2(_context9 = Object.prototype.toString.call(o)).call(_context9, 8, -1); + if (n === "Object" && o.constructor) + n = o.constructor.name; + if (n === "Map" || n === "Set") + return _Array$from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) + return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) + len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) { + arr2[i] = arr[i]; + } + return arr2; + } + var REGEX_DATA = "xregexp"; + var features = { + astral: false, + namespacing: true + }; + var fixed = {}; + var regexCache = {}; + var patternCache = {}; + var tokens = []; + var defaultScope = "default"; + var classScope = "class"; + var nativeTokens = { + "default": /\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|\(\?(?:[:=!]|<[=!])|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/, + "class": /\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/ + }; + var replacementToken = /\$(?:\{([^\}]+)\}|<([^>]+)>|(\d\d?|[\s\S]?))/g; + var correctExecNpcg = /()??/.exec("")[1] === void 0; + var hasFlagsProp = (0, _flags["default"])(/x/) !== void 0; + function hasNativeFlag(flag) { + var isSupported = true; + try { + new RegExp("", flag); + if (flag === "y") { + var gy = function() { + return "gy"; + }(); + var incompleteY = ".a".replace(new RegExp("a", gy), ".") === ".."; + if (incompleteY) { + isSupported = false; + } + } + } catch (exception) { + isSupported = false; + } + return isSupported; + } + var hasNativeD = hasNativeFlag("d"); + var hasNativeS = hasNativeFlag("s"); + var hasNativeU = hasNativeFlag("u"); + var hasNativeY = hasNativeFlag("y"); + var registeredFlags = { + d: hasNativeD, + g: true, + i: true, + m: true, + s: hasNativeS, + u: hasNativeU, + y: hasNativeY + }; + var nonnativeFlags = hasNativeS ? /[^dgimsuy]+/g : /[^dgimuy]+/g; + function augment(regex, captureNames, xSource, xFlags, isInternalOnly) { + var _context; + regex[REGEX_DATA] = { + captureNames + }; + if (isInternalOnly) { + return regex; + } + if (regex.__proto__) { + regex.__proto__ = XRegExp3.prototype; + } else { + for (var p in XRegExp3.prototype) { + regex[p] = XRegExp3.prototype[p]; + } + } + regex[REGEX_DATA].source = xSource; + regex[REGEX_DATA].flags = xFlags ? (0, _sort["default"])(_context = xFlags.split("")).call(_context).join("") : xFlags; + return regex; + } + function clipDuplicates(str) { + return str.replace(/([\s\S])(?=[\s\S]*\1)/g, ""); + } + function copyRegex(regex, options) { + var _context2; + if (!XRegExp3.isRegExp(regex)) { + throw new TypeError("Type RegExp expected"); + } + var xData = regex[REGEX_DATA] || {}; + var flags = getNativeFlags(regex); + var flagsToAdd = ""; + var flagsToRemove = ""; + var xregexpSource = null; + var xregexpFlags = null; + options = options || {}; + if (options.removeG) { + flagsToRemove += "g"; + } + if (options.removeY) { + flagsToRemove += "y"; + } + if (flagsToRemove) { + flags = flags.replace(new RegExp("[".concat(flagsToRemove, "]+"), "g"), ""); + } + if (options.addG) { + flagsToAdd += "g"; + } + if (options.addY) { + flagsToAdd += "y"; + } + if (flagsToAdd) { + flags = clipDuplicates(flags + flagsToAdd); + } + if (!options.isInternalOnly) { + if (xData.source !== void 0) { + xregexpSource = xData.source; + } + if ((0, _flags["default"])(xData) != null) { + xregexpFlags = flagsToAdd ? clipDuplicates((0, _flags["default"])(xData) + flagsToAdd) : (0, _flags["default"])(xData); + } + } + regex = augment(new RegExp(options.source || regex.source, flags), hasNamedCapture(regex) ? (0, _slice["default"])(_context2 = xData.captureNames).call(_context2, 0) : null, xregexpSource, xregexpFlags, options.isInternalOnly); + return regex; + } + function dec(hex2) { + return (0, _parseInt2["default"])(hex2, 16); + } + function getContextualTokenSeparator(match, scope, flags) { + var matchEndPos = match.index + match[0].length; + var precedingChar = match.input[match.index - 1]; + var followingChar = match.input[matchEndPos]; + if (/^[()|]$/.test(precedingChar) || /^[()|]$/.test(followingChar) || match.index === 0 || matchEndPos === match.input.length || /\(\?(?:[:=!]|<[=!])$/.test(match.input.substring(match.index - 4, match.index)) || isQuantifierNext(match.input, matchEndPos, flags)) { + return ""; + } + return "(?:)"; + } + function getNativeFlags(regex) { + return hasFlagsProp ? (0, _flags["default"])(regex) : /\/([a-z]*)$/i.exec(RegExp.prototype.toString.call(regex))[1]; + } + function hasNamedCapture(regex) { + return !!(regex[REGEX_DATA] && regex[REGEX_DATA].captureNames); + } + function hex(dec2) { + return (0, _parseInt2["default"])(dec2, 10).toString(16); + } + function isQuantifierNext(pattern, pos, flags) { + var inlineCommentPattern = "\\(\\?#[^)]*\\)"; + var lineCommentPattern = "#[^#\\n]*"; + var quantifierPattern = "[?*+]|{\\d+(?:,\\d*)?}"; + var regex = (0, _indexOf["default"])(flags).call(flags, "x") !== -1 ? /^(?:\s|#[^#\n]*|\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/ : /^(?:\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/; + return regex.test((0, _slice["default"])(pattern).call(pattern, pos)); + } + function isType(value, type) { + return Object.prototype.toString.call(value) === "[object ".concat(type, "]"); + } + function nullThrows(value) { + if (value == null) { + throw new TypeError("Cannot convert null or undefined to object"); + } + return value; + } + function pad4(str) { + while (str.length < 4) { + str = "0".concat(str); + } + return str; + } + function prepareFlags(pattern, flags) { + if (clipDuplicates(flags) !== flags) { + throw new SyntaxError("Invalid duplicate regex flag ".concat(flags)); + } + pattern = pattern.replace(/^\(\?([\w$]+)\)/, function($0, $1) { + if (/[dgy]/.test($1)) { + throw new SyntaxError("Cannot use flags dgy in mode modifier ".concat($0)); + } + flags = clipDuplicates(flags + $1); + return ""; + }); + var _iterator = _createForOfIteratorHelper(flags), _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done; ) { + var flag = _step.value; + if (!registeredFlags[flag]) { + throw new SyntaxError("Unknown regex flag ".concat(flag)); + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + return { + pattern, + flags + }; + } + function prepareOptions(value) { + var options = {}; + if (isType(value, "String")) { + (0, _forEach["default"])(XRegExp3).call(XRegExp3, value, /[^\s,]+/, function(match) { + options[match] = true; + }); + return options; + } + return value; + } + function registerFlag(flag) { + if (!/^[\w$]$/.test(flag)) { + throw new Error("Flag must be a single character A-Za-z0-9_$"); + } + registeredFlags[flag] = true; + } + function runTokens(pattern, flags, pos, scope, context) { + var i = tokens.length; + var leadChar = pattern[pos]; + var result = null; + var match; + var t; + while (i--) { + t = tokens[i]; + if (t.leadChar && t.leadChar !== leadChar || t.scope !== scope && t.scope !== "all" || t.flag && !((0, _indexOf["default"])(flags).call(flags, t.flag) !== -1)) { + continue; + } + match = XRegExp3.exec(pattern, t.regex, pos, "sticky"); + if (match) { + result = { + matchLength: match[0].length, + output: t.handler.call(context, match, scope, flags), + reparse: t.reparse + }; + break; + } + } + return result; + } + function setAstral(on) { + features.astral = on; + } + function setNamespacing(on) { + features.namespacing = on; + } + function XRegExp3(pattern, flags) { + if (XRegExp3.isRegExp(pattern)) { + if (flags !== void 0) { + throw new TypeError("Cannot supply flags when copying a RegExp"); + } + return copyRegex(pattern); + } + pattern = pattern === void 0 ? "" : String(pattern); + flags = flags === void 0 ? "" : String(flags); + if (XRegExp3.isInstalled("astral") && !((0, _indexOf["default"])(flags).call(flags, "A") !== -1)) { + flags += "A"; + } + if (!patternCache[pattern]) { + patternCache[pattern] = {}; + } + if (!patternCache[pattern][flags]) { + var context = { + hasNamedCapture: false, + captureNames: [] + }; + var scope = defaultScope; + var output = ""; + var pos = 0; + var result; + var applied = prepareFlags(pattern, flags); + var appliedPattern = applied.pattern; + var appliedFlags = (0, _flags["default"])(applied); + while (pos < appliedPattern.length) { + do { + result = runTokens(appliedPattern, appliedFlags, pos, scope, context); + if (result && result.reparse) { + appliedPattern = (0, _slice["default"])(appliedPattern).call(appliedPattern, 0, pos) + result.output + (0, _slice["default"])(appliedPattern).call(appliedPattern, pos + result.matchLength); + } + } while (result && result.reparse); + if (result) { + output += result.output; + pos += result.matchLength || 1; + } else { + var _XRegExp$exec = XRegExp3.exec(appliedPattern, nativeTokens[scope], pos, "sticky"), _XRegExp$exec2 = (0, _slicedToArray2["default"])(_XRegExp$exec, 1), token = _XRegExp$exec2[0]; + output += token; + pos += token.length; + if (token === "[" && scope === defaultScope) { + scope = classScope; + } else if (token === "]" && scope === classScope) { + scope = defaultScope; + } + } + } + patternCache[pattern][flags] = { + pattern: output.replace(/(?:\(\?:\))+/g, "(?:)"), + flags: appliedFlags.replace(nonnativeFlags, ""), + captures: context.hasNamedCapture ? context.captureNames : null + }; + } + var generated = patternCache[pattern][flags]; + return augment(new RegExp(generated.pattern, (0, _flags["default"])(generated)), generated.captures, pattern, flags); + } + XRegExp3.prototype = /(?:)/; + XRegExp3.version = "5.1.1"; + XRegExp3._clipDuplicates = clipDuplicates; + XRegExp3._hasNativeFlag = hasNativeFlag; + XRegExp3._dec = dec; + XRegExp3._hex = hex; + XRegExp3._pad4 = pad4; + XRegExp3.addToken = function(regex, handler, options) { + options = options || {}; + var _options = options, optionalFlags = _options.optionalFlags; + if (options.flag) { + registerFlag(options.flag); + } + if (optionalFlags) { + optionalFlags = optionalFlags.split(""); + var _iterator2 = _createForOfIteratorHelper(optionalFlags), _step2; + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { + var flag = _step2.value; + registerFlag(flag); + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + } + tokens.push({ + regex: copyRegex(regex, { + addG: true, + addY: hasNativeY, + isInternalOnly: true + }), + handler, + scope: options.scope || defaultScope, + flag: options.flag, + reparse: options.reparse, + leadChar: options.leadChar + }); + XRegExp3.cache.flush("patterns"); + }; + XRegExp3.cache = function(pattern, flags) { + if (!regexCache[pattern]) { + regexCache[pattern] = {}; + } + return regexCache[pattern][flags] || (regexCache[pattern][flags] = XRegExp3(pattern, flags)); + }; + XRegExp3.cache.flush = function(cacheName) { + if (cacheName === "patterns") { + patternCache = {}; + } else { + regexCache = {}; + } + }; + XRegExp3.escape = function(str) { + return String(nullThrows(str)).replace(/[\\\[\]{}()*+?.^$|]/g, "\\$&").replace(/[\s#\-,]/g, function(match) { + return "\\u".concat(pad4(hex(match.charCodeAt(0)))); + }); + }; + XRegExp3.exec = function(str, regex, pos, sticky) { + var cacheKey = "g"; + var addY = false; + var fakeY = false; + var match; + addY = hasNativeY && !!(sticky || regex.sticky && sticky !== false); + if (addY) { + cacheKey += "y"; + } else if (sticky) { + fakeY = true; + cacheKey += "FakeY"; + } + regex[REGEX_DATA] = regex[REGEX_DATA] || {}; + var r2 = regex[REGEX_DATA][cacheKey] || (regex[REGEX_DATA][cacheKey] = copyRegex(regex, { + addG: true, + addY, + source: fakeY ? "".concat(regex.source, "|()") : void 0, + removeY: sticky === false, + isInternalOnly: true + })); + pos = pos || 0; + r2.lastIndex = pos; + match = fixed.exec.call(r2, str); + if (fakeY && match && match.pop() === "") { + match = null; + } + if (regex.global) { + regex.lastIndex = match ? r2.lastIndex : 0; + } + return match; + }; + XRegExp3.forEach = function(str, regex, callback) { + var pos = 0; + var i = -1; + var match; + while (match = XRegExp3.exec(str, regex, pos)) { + callback(match, ++i, str, regex); + pos = match.index + (match[0].length || 1); + } + }; + XRegExp3.globalize = function(regex) { + return copyRegex(regex, { + addG: true + }); + }; + XRegExp3.install = function(options) { + options = prepareOptions(options); + if (!features.astral && options.astral) { + setAstral(true); + } + if (!features.namespacing && options.namespacing) { + setNamespacing(true); + } + }; + XRegExp3.isInstalled = function(feature) { + return !!features[feature]; + }; + XRegExp3.isRegExp = function(value) { + return Object.prototype.toString.call(value) === "[object RegExp]"; + }; + XRegExp3.match = function(str, regex, scope) { + var global2 = regex.global && scope !== "one" || scope === "all"; + var cacheKey = (global2 ? "g" : "") + (regex.sticky ? "y" : "") || "noGY"; + regex[REGEX_DATA] = regex[REGEX_DATA] || {}; + var r2 = regex[REGEX_DATA][cacheKey] || (regex[REGEX_DATA][cacheKey] = copyRegex(regex, { + addG: !!global2, + removeG: scope === "one", + isInternalOnly: true + })); + var result = String(nullThrows(str)).match(r2); + if (regex.global) { + regex.lastIndex = scope === "one" && result ? result.index + result[0].length : 0; + } + return global2 ? result || [] : result && result[0]; + }; + XRegExp3.matchChain = function(str, chain) { + return function recurseChain(values, level) { + var item = chain[level].regex ? chain[level] : { + regex: chain[level] + }; + var matches = []; + function addMatch(match) { + if (item.backref) { + var ERR_UNDEFINED_GROUP = "Backreference to undefined group: ".concat(item.backref); + var isNamedBackref = isNaN(item.backref); + if (isNamedBackref && XRegExp3.isInstalled("namespacing")) { + if (!(match.groups && item.backref in match.groups)) { + throw new ReferenceError(ERR_UNDEFINED_GROUP); + } + } else if (!match.hasOwnProperty(item.backref)) { + throw new ReferenceError(ERR_UNDEFINED_GROUP); + } + var backrefValue = isNamedBackref && XRegExp3.isInstalled("namespacing") ? match.groups[item.backref] : match[item.backref]; + matches.push(backrefValue || ""); + } else { + matches.push(match[0]); + } + } + var _iterator3 = _createForOfIteratorHelper(values), _step3; + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) { + var value = _step3.value; + (0, _forEach["default"])(XRegExp3).call(XRegExp3, value, item.regex, addMatch); + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + return level === chain.length - 1 || !matches.length ? matches : recurseChain(matches, level + 1); + }([str], 0); + }; + XRegExp3.replace = function(str, search, replacement, scope) { + var isRegex = XRegExp3.isRegExp(search); + var global2 = search.global && scope !== "one" || scope === "all"; + var cacheKey = (global2 ? "g" : "") + (search.sticky ? "y" : "") || "noGY"; + var s2 = search; + if (isRegex) { + search[REGEX_DATA] = search[REGEX_DATA] || {}; + s2 = search[REGEX_DATA][cacheKey] || (search[REGEX_DATA][cacheKey] = copyRegex(search, { + addG: !!global2, + removeG: scope === "one", + isInternalOnly: true + })); + } else if (global2) { + s2 = new RegExp(XRegExp3.escape(String(search)), "g"); + } + var result = fixed.replace.call(nullThrows(str), s2, replacement); + if (isRegex && search.global) { + search.lastIndex = 0; + } + return result; + }; + XRegExp3.replaceEach = function(str, replacements) { + var _iterator4 = _createForOfIteratorHelper(replacements), _step4; + try { + for (_iterator4.s(); !(_step4 = _iterator4.n()).done; ) { + var r = _step4.value; + str = XRegExp3.replace(str, r[0], r[1], r[2]); + } + } catch (err) { + _iterator4.e(err); + } finally { + _iterator4.f(); + } + return str; + }; + XRegExp3.split = function(str, separator, limit) { + return fixed.split.call(nullThrows(str), separator, limit); + }; + XRegExp3.test = function(str, regex, pos, sticky) { + return !!XRegExp3.exec(str, regex, pos, sticky); + }; + XRegExp3.uninstall = function(options) { + options = prepareOptions(options); + if (features.astral && options.astral) { + setAstral(false); + } + if (features.namespacing && options.namespacing) { + setNamespacing(false); + } + }; + XRegExp3.union = function(patterns, flags, options) { + options = options || {}; + var conjunction = options.conjunction || "or"; + var numCaptures = 0; + var numPriorCaptures; + var captureNames; + function rewrite(match, paren, backref) { + var name = captureNames[numCaptures - numPriorCaptures]; + if (paren) { + ++numCaptures; + if (name) { + return "(?<".concat(name, ">"); + } + } else if (backref) { + return "\\".concat(+backref + numPriorCaptures); + } + return match; + } + if (!(isType(patterns, "Array") && patterns.length)) { + throw new TypeError("Must provide a nonempty array of patterns to merge"); + } + var parts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g; + var output = []; + var _iterator5 = _createForOfIteratorHelper(patterns), _step5; + try { + for (_iterator5.s(); !(_step5 = _iterator5.n()).done; ) { + var pattern = _step5.value; + if (XRegExp3.isRegExp(pattern)) { + numPriorCaptures = numCaptures; + captureNames = pattern[REGEX_DATA] && pattern[REGEX_DATA].captureNames || []; + output.push(XRegExp3(pattern.source).source.replace(parts, rewrite)); + } else { + output.push(XRegExp3.escape(pattern)); + } + } + } catch (err) { + _iterator5.e(err); + } finally { + _iterator5.f(); + } + var separator = conjunction === "none" ? "" : "|"; + return XRegExp3(output.join(separator), flags); + }; + fixed.exec = function(str) { + var origLastIndex = this.lastIndex; + var match = RegExp.prototype.exec.apply(this, arguments); + if (match) { + if (!correctExecNpcg && match.length > 1 && (0, _indexOf["default"])(match).call(match, "") !== -1) { + var _context3; + var r2 = copyRegex(this, { + removeG: true, + isInternalOnly: true + }); + (0, _slice["default"])(_context3 = String(str)).call(_context3, match.index).replace(r2, function() { + var len = arguments.length; + for (var i2 = 1; i2 < len - 2; ++i2) { + if ((i2 < 0 || arguments.length <= i2 ? void 0 : arguments[i2]) === void 0) { + match[i2] = void 0; + } + } + }); + } + if (this[REGEX_DATA] && this[REGEX_DATA].captureNames) { + var groupsObject = match; + if (XRegExp3.isInstalled("namespacing")) { + match.groups = (0, _create["default"])(null); + groupsObject = match.groups; + } + for (var i = 1; i < match.length; ++i) { + var name = this[REGEX_DATA].captureNames[i - 1]; + if (name) { + groupsObject[name] = match[i]; + } + } + } else if (!match.groups && XRegExp3.isInstalled("namespacing")) { + match.groups = void 0; + } + if (this.global && !match[0].length && this.lastIndex > match.index) { + this.lastIndex = match.index; + } + } + if (!this.global) { + this.lastIndex = origLastIndex; + } + return match; + }; + fixed.test = function(str) { + return !!fixed.exec.call(this, str); + }; + fixed.match = function(regex) { + if (!XRegExp3.isRegExp(regex)) { + regex = new RegExp(regex); + } else if (regex.global) { + var result = String.prototype.match.apply(this, arguments); + regex.lastIndex = 0; + return result; + } + return fixed.exec.call(regex, nullThrows(this)); + }; + fixed.replace = function(search, replacement) { + var isRegex = XRegExp3.isRegExp(search); + var origLastIndex; + var captureNames; + var result; + if (isRegex) { + if (search[REGEX_DATA]) { + captureNames = search[REGEX_DATA].captureNames; + } + origLastIndex = search.lastIndex; + } else { + search += ""; + } + if (isType(replacement, "Function")) { + result = String(this).replace(search, function() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + if (captureNames) { + var groupsObject; + if (XRegExp3.isInstalled("namespacing")) { + groupsObject = (0, _create["default"])(null); + args.push(groupsObject); + } else { + args[0] = new String(args[0]); + groupsObject = args[0]; + } + for (var i = 0; i < captureNames.length; ++i) { + if (captureNames[i]) { + groupsObject[captureNames[i]] = args[i + 1]; + } + } + } + return replacement.apply(void 0, args); + }); + } else { + result = String(nullThrows(this)).replace(search, function() { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + return String(replacement).replace(replacementToken, replacer); + function replacer($0, bracketed, angled, dollarToken) { + bracketed = bracketed || angled; + var numNonCaptureArgs = isType(args[args.length - 1], "Object") ? 4 : 3; + var numCaptures = args.length - numNonCaptureArgs; + if (bracketed) { + if (/^\d+$/.test(bracketed)) { + var _n = +bracketed; + if (_n <= numCaptures) { + return args[_n] || ""; + } + } + var n = captureNames ? (0, _indexOf["default"])(captureNames).call(captureNames, bracketed) : -1; + if (n < 0) { + throw new SyntaxError("Backreference to undefined group ".concat($0)); + } + return args[n + 1] || ""; + } + if (dollarToken === "" || dollarToken === " ") { + throw new SyntaxError("Invalid token ".concat($0)); + } + if (dollarToken === "&" || +dollarToken === 0) { + return args[0]; + } + if (dollarToken === "$") { + return "$"; + } + if (dollarToken === "`") { + var _context4; + return (0, _slice["default"])(_context4 = args[args.length - 1]).call(_context4, 0, args[args.length - 2]); + } + if (dollarToken === "'") { + var _context5; + return (0, _slice["default"])(_context5 = args[args.length - 1]).call(_context5, args[args.length - 2] + args[0].length); + } + dollarToken = +dollarToken; + if (!isNaN(dollarToken)) { + if (dollarToken > numCaptures) { + throw new SyntaxError("Backreference to undefined group ".concat($0)); + } + return args[dollarToken] || ""; + } + throw new SyntaxError("Invalid token ".concat($0)); + } + }); + } + if (isRegex) { + if (search.global) { + search.lastIndex = 0; + } else { + search.lastIndex = origLastIndex; + } + } + return result; + }; + fixed.split = function(separator, limit) { + if (!XRegExp3.isRegExp(separator)) { + return String.prototype.split.apply(this, arguments); + } + var str = String(this); + var output = []; + var origLastIndex = separator.lastIndex; + var lastLastIndex = 0; + var lastLength; + limit = (limit === void 0 ? -1 : limit) >>> 0; + (0, _forEach["default"])(XRegExp3).call(XRegExp3, str, separator, function(match) { + if (match.index + match[0].length > lastLastIndex) { + output.push((0, _slice["default"])(str).call(str, lastLastIndex, match.index)); + if (match.length > 1 && match.index < str.length) { + Array.prototype.push.apply(output, (0, _slice["default"])(match).call(match, 1)); + } + lastLength = match[0].length; + lastLastIndex = match.index + lastLength; + } + }); + if (lastLastIndex === str.length) { + if (!separator.test("") || lastLength) { + output.push(""); + } + } else { + output.push((0, _slice["default"])(str).call(str, lastLastIndex)); + } + separator.lastIndex = origLastIndex; + return output.length > limit ? (0, _slice["default"])(output).call(output, 0, limit) : output; + }; + XRegExp3.addToken(/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4}|{[\dA-Fa-f]+})|x(?![\dA-Fa-f]{2}))/, function(match, scope) { + if (match[1] === "B" && scope === defaultScope) { + return match[0]; + } + throw new SyntaxError("Invalid escape ".concat(match[0])); + }, { + scope: "all", + leadChar: "\\" + }); + XRegExp3.addToken(/\\u{([\dA-Fa-f]+)}/, function(match, scope, flags) { + var code = dec(match[1]); + if (code > 1114111) { + throw new SyntaxError("Invalid Unicode code point ".concat(match[0])); + } + if (code <= 65535) { + return "\\u".concat(pad4(hex(code))); + } + if (hasNativeU && (0, _indexOf["default"])(flags).call(flags, "u") !== -1) { + return match[0]; + } + throw new SyntaxError("Cannot use Unicode code point above \\u{FFFF} without flag u"); + }, { + scope: "all", + leadChar: "\\" + }); + XRegExp3.addToken(/\(\?#[^)]*\)/, getContextualTokenSeparator, { + leadChar: "(" + }); + XRegExp3.addToken(/\s+|#[^\n]*\n?/, getContextualTokenSeparator, { + flag: "x" + }); + if (!hasNativeS) { + XRegExp3.addToken(/\./, function() { + return "[\\s\\S]"; + }, { + flag: "s", + leadChar: "." + }); + } + XRegExp3.addToken(/\\k<([^>]+)>/, function(match) { + var _context6, _context7; + var index = isNaN(match[1]) ? (0, _indexOf["default"])(_context6 = this.captureNames).call(_context6, match[1]) + 1 : +match[1]; + var endIndex = match.index + match[0].length; + if (!index || index > this.captureNames.length) { + throw new SyntaxError("Backreference to undefined group ".concat(match[0])); + } + return (0, _concat["default"])(_context7 = "\\".concat(index)).call(_context7, endIndex === match.input.length || isNaN(match.input[endIndex]) ? "" : "(?:)"); + }, { + leadChar: "\\" + }); + XRegExp3.addToken(/\\(\d+)/, function(match, scope) { + if (!(scope === defaultScope && /^[1-9]/.test(match[1]) && +match[1] <= this.captureNames.length) && match[1] !== "0") { + throw new SyntaxError("Cannot use octal escape or backreference to undefined group ".concat(match[0])); + } + return match[0]; + }, { + scope: "all", + leadChar: "\\" + }); + XRegExp3.addToken(/\(\?P?<((?:[\$A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])(?:[\$0-9A-Z_a-z\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05EF-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u07FD\u0800-\u082D\u0840-\u085B\u0860-\u086A\u0870-\u0887\u0889-\u088E\u0898-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u09FE\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3C-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C5D\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDD\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D81-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1715\u171F-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u180F-\u1819\u1820-\u1878\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1ABF-\u1ACE\u1B00-\u1B4C\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CD0-\u1CD2\u1CD4-\u1CFA\u1D00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA827\uA82C\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD27\uDD30-\uDD39\uDE80-\uDEA9\uDEAB\uDEAC\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF50\uDF70-\uDF85\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC00-\uDC46\uDC66-\uDC75\uDC7F-\uDCBA\uDCC2\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD44-\uDD47\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDC9-\uDDCC\uDDCE-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3B-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC5E-\uDC61\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF1D-\uDF2B\uDF30-\uDF39\uDF40-\uDF46]|\uD806[\uDC00-\uDC3A\uDCA0-\uDCE9\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD35\uDD37\uDD38\uDD3B-\uDD43\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD7\uDDDA-\uDDE1\uDDE3\uDDE4\uDE00-\uDE3E\uDE47\uDE50-\uDE99\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD8E\uDD90\uDD91\uDD93-\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF6\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF4F-\uDF87\uDF8F-\uDF9F\uDFE0\uDFE1\uDFE3\uDFE4\uDFF0\uDFF1]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD833[\uDF00-\uDF2D\uDF30-\uDF46]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD00-\uDD2C\uDD30-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAE\uDEC0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4B\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]|\uDB40[\uDD00-\uDDEF])*)>/, function(match) { + var _context8; + if (!XRegExp3.isInstalled("namespacing") && (match[1] === "length" || match[1] === "__proto__")) { + throw new SyntaxError("Cannot use reserved word as capture name ".concat(match[0])); + } + if ((0, _indexOf["default"])(_context8 = this.captureNames).call(_context8, match[1]) !== -1) { + throw new SyntaxError("Cannot use same name for multiple groups ".concat(match[0])); + } + this.captureNames.push(match[1]); + this.hasNamedCapture = true; + return "("; + }, { + leadChar: "(" + }); + XRegExp3.addToken(/\((?!\?)/, function(match, scope, flags) { + if ((0, _indexOf["default"])(flags).call(flags, "n") !== -1) { + return "(?:"; + } + this.captureNames.push(null); + return "("; + }, { + optionalFlags: "n", + leadChar: "(" + }); + var _default = XRegExp3; + exports["default"] = _default; + module2.exports = exports.default; + } +}); + +// node_modules/core-js-pure/internals/array-reduce.js +var require_array_reduce = __commonJS({ + "node_modules/core-js-pure/internals/array-reduce.js"(exports, module2) { + var aCallable = require_a_callable(); + var toObject = require_to_object(); + var IndexedObject = require_indexed_object(); + var lengthOfArrayLike = require_length_of_array_like(); + var $TypeError = TypeError; + var createMethod = function(IS_RIGHT) { + return function(that, callbackfn, argumentsLength, memo) { + aCallable(callbackfn); + var O = toObject(that); + var self2 = IndexedObject(O); + var length = lengthOfArrayLike(O); + var index = IS_RIGHT ? length - 1 : 0; + var i = IS_RIGHT ? -1 : 1; + if (argumentsLength < 2) + while (true) { + if (index in self2) { + memo = self2[index]; + index += i; + break; + } + index += i; + if (IS_RIGHT ? index < 0 : length <= index) { + throw $TypeError("Reduce of empty array with no initial value"); + } + } + for (; IS_RIGHT ? index >= 0 : length > index; index += i) + if (index in self2) { + memo = callbackfn(memo, self2[index], index, O); + } + return memo; + }; + }; + module2.exports = { + left: createMethod(false), + right: createMethod(true) + }; + } +}); + +// node_modules/core-js-pure/internals/engine-is-node.js +var require_engine_is_node = __commonJS({ + "node_modules/core-js-pure/internals/engine-is-node.js"(exports, module2) { + var classof = require_classof_raw(); + var global2 = require_global(); + module2.exports = classof(global2.process) == "process"; + } +}); + +// node_modules/core-js-pure/modules/es.array.reduce.js +var require_es_array_reduce = __commonJS({ + "node_modules/core-js-pure/modules/es.array.reduce.js"() { + "use strict"; + var $ = require_export(); + var $reduce = require_array_reduce().left; + var arrayMethodIsStrict = require_array_method_is_strict(); + var CHROME_VERSION = require_engine_v8_version(); + var IS_NODE = require_engine_is_node(); + var STRICT_METHOD = arrayMethodIsStrict("reduce"); + var CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83; + $({ target: "Array", proto: true, forced: !STRICT_METHOD || CHROME_BUG }, { + reduce: function reduce(callbackfn) { + var length = arguments.length; + return $reduce(this, callbackfn, length, length > 1 ? arguments[1] : void 0); + } + }); + } +}); + +// node_modules/core-js-pure/es/array/virtual/reduce.js +var require_reduce = __commonJS({ + "node_modules/core-js-pure/es/array/virtual/reduce.js"(exports, module2) { + require_es_array_reduce(); + var entryVirtual = require_entry_virtual(); + module2.exports = entryVirtual("Array").reduce; + } +}); + +// node_modules/core-js-pure/es/instance/reduce.js +var require_reduce2 = __commonJS({ + "node_modules/core-js-pure/es/instance/reduce.js"(exports, module2) { + var isPrototypeOf = require_object_is_prototype_of(); + var method = require_reduce(); + var ArrayPrototype = Array.prototype; + module2.exports = function(it) { + var own = it.reduce; + return it === ArrayPrototype || isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.reduce ? method : own; + }; + } +}); + +// node_modules/core-js-pure/stable/instance/reduce.js +var require_reduce3 = __commonJS({ + "node_modules/core-js-pure/stable/instance/reduce.js"(exports, module2) { + var parent = require_reduce2(); + module2.exports = parent; + } +}); + +// node_modules/@babel/runtime-corejs3/core-js-stable/instance/reduce.js +var require_reduce4 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js-stable/instance/reduce.js"(exports, module2) { + module2.exports = require_reduce3(); + } +}); + +// node_modules/core-js-pure/modules/es.array.map.js +var require_es_array_map = __commonJS({ + "node_modules/core-js-pure/modules/es.array.map.js"() { + "use strict"; + var $ = require_export(); + var $map = require_array_iteration().map; + var arrayMethodHasSpeciesSupport = require_array_method_has_species_support(); + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("map"); + $({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, { + map: function map(callbackfn) { + return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0); + } + }); + } +}); + +// node_modules/core-js-pure/es/array/virtual/map.js +var require_map = __commonJS({ + "node_modules/core-js-pure/es/array/virtual/map.js"(exports, module2) { + require_es_array_map(); + var entryVirtual = require_entry_virtual(); + module2.exports = entryVirtual("Array").map; + } +}); + +// node_modules/core-js-pure/es/instance/map.js +var require_map2 = __commonJS({ + "node_modules/core-js-pure/es/instance/map.js"(exports, module2) { + var isPrototypeOf = require_object_is_prototype_of(); + var method = require_map(); + var ArrayPrototype = Array.prototype; + module2.exports = function(it) { + var own = it.map; + return it === ArrayPrototype || isPrototypeOf(ArrayPrototype, it) && own === ArrayPrototype.map ? method : own; + }; + } +}); + +// node_modules/core-js-pure/stable/instance/map.js +var require_map3 = __commonJS({ + "node_modules/core-js-pure/stable/instance/map.js"(exports, module2) { + var parent = require_map2(); + module2.exports = parent; + } +}); + +// node_modules/@babel/runtime-corejs3/core-js-stable/instance/map.js +var require_map4 = __commonJS({ + "node_modules/@babel/runtime-corejs3/core-js-stable/instance/map.js"(exports, module2) { + module2.exports = require_map3(); + } +}); + +// node_modules/xregexp/lib/addons/build.js +var require_build = __commonJS({ + "node_modules/xregexp/lib/addons/build.js"(exports, module2) { + "use strict"; + var _Object$defineProperty = require_define_property3(); + var _interopRequireDefault = require_interopRequireDefault(); + _Object$defineProperty(exports, "__esModule", { + value: true + }); + exports["default"] = void 0; + var _reduce = _interopRequireDefault(require_reduce4()); + var _map = _interopRequireDefault(require_map4()); + var _indexOf = _interopRequireDefault(require_index_of4()); + var _concat = _interopRequireDefault(require_concat4()); + var _default = function _default2(XRegExp3) { + var REGEX_DATA = "xregexp"; + var subParts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g; + var parts = XRegExp3.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/, subParts], "g", { + conjunction: "or" + }); + function deanchor(pattern) { + var leadingAnchor = /^(?:\(\?:\))*\^/; + var trailingAnchor = /\$(?:\(\?:\))*$/; + if (leadingAnchor.test(pattern) && trailingAnchor.test(pattern) && trailingAnchor.test(pattern.replace(/\\[\s\S]/g, ""))) { + return pattern.replace(leadingAnchor, "").replace(trailingAnchor, ""); + } + return pattern; + } + function asXRegExp(value, addFlagX) { + var flags = addFlagX ? "x" : ""; + return XRegExp3.isRegExp(value) ? value[REGEX_DATA] && value[REGEX_DATA].captureNames ? value : XRegExp3(value.source, flags) : XRegExp3(value, flags); + } + function interpolate(substitution) { + return substitution instanceof RegExp ? substitution : XRegExp3.escape(substitution); + } + function reduceToSubpatternsObject(subpatterns, interpolated, subpatternIndex) { + subpatterns["subpattern".concat(subpatternIndex)] = interpolated; + return subpatterns; + } + function embedSubpatternAfter(raw, subpatternIndex, rawLiterals) { + var hasSubpattern = subpatternIndex < rawLiterals.length - 1; + return raw + (hasSubpattern ? "{{subpattern".concat(subpatternIndex, "}}") : ""); + } + XRegExp3.tag = function(flags) { + return function(literals) { + var _context, _context2; + for (var _len = arguments.length, substitutions = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + substitutions[_key - 1] = arguments[_key]; + } + var subpatterns = (0, _reduce["default"])(_context = (0, _map["default"])(substitutions).call(substitutions, interpolate)).call(_context, reduceToSubpatternsObject, {}); + var pattern = (0, _map["default"])(_context2 = literals.raw).call(_context2, embedSubpatternAfter).join(""); + return XRegExp3.build(pattern, subpatterns, flags); + }; + }; + XRegExp3.build = function(pattern, subs, flags) { + flags = flags || ""; + var addFlagX = (0, _indexOf["default"])(flags).call(flags, "x") !== -1; + var inlineFlags = /^\(\?([\w$]+)\)/.exec(pattern); + if (inlineFlags) { + flags = XRegExp3._clipDuplicates(flags + inlineFlags[1]); + } + var data = {}; + for (var p in subs) { + if (subs.hasOwnProperty(p)) { + var sub = asXRegExp(subs[p], addFlagX); + data[p] = { + pattern: deanchor(sub.source), + names: sub[REGEX_DATA].captureNames || [] + }; + } + } + var patternAsRegex = asXRegExp(pattern, addFlagX); + var numCaps = 0; + var numPriorCaps; + var numOuterCaps = 0; + var outerCapsMap = [0]; + var outerCapNames = patternAsRegex[REGEX_DATA].captureNames || []; + var output = patternAsRegex.source.replace(parts, function($0, $1, $2, $3, $4) { + var subName = $1 || $2; + var capName; + var intro; + var localCapIndex; + if (subName) { + var _context3; + if (!data.hasOwnProperty(subName)) { + throw new ReferenceError("Undefined property ".concat($0)); + } + if ($1) { + capName = outerCapNames[numOuterCaps]; + outerCapsMap[++numOuterCaps] = ++numCaps; + intro = "(?<".concat(capName || subName, ">"); + } else { + intro = "(?:"; + } + numPriorCaps = numCaps; + var rewrittenSubpattern = data[subName].pattern.replace(subParts, function(match, paren, backref) { + if (paren) { + capName = data[subName].names[numCaps - numPriorCaps]; + ++numCaps; + if (capName) { + return "(?<".concat(capName, ">"); + } + } else if (backref) { + localCapIndex = +backref - 1; + return data[subName].names[localCapIndex] ? "\\k<".concat(data[subName].names[localCapIndex], ">") : "\\".concat(+backref + numPriorCaps); + } + return match; + }); + return (0, _concat["default"])(_context3 = "".concat(intro)).call(_context3, rewrittenSubpattern, ")"); + } + if ($3) { + capName = outerCapNames[numOuterCaps]; + outerCapsMap[++numOuterCaps] = ++numCaps; + if (capName) { + return "(?<".concat(capName, ">"); + } + } else if ($4) { + localCapIndex = +$4 - 1; + return outerCapNames[localCapIndex] ? "\\k<".concat(outerCapNames[localCapIndex], ">") : "\\".concat(outerCapsMap[+$4]); + } + return $0; + }); + return XRegExp3(output, flags); + }; + }; + exports["default"] = _default; + module2.exports = exports.default; + } +}); + +// node_modules/xregexp/lib/addons/matchrecursive.js +var require_matchrecursive = __commonJS({ + "node_modules/xregexp/lib/addons/matchrecursive.js"(exports, module2) { + "use strict"; + var _Object$defineProperty = require_define_property3(); + var _interopRequireDefault = require_interopRequireDefault(); + _Object$defineProperty(exports, "__esModule", { + value: true + }); + exports["default"] = void 0; + var _indexOf = _interopRequireDefault(require_index_of4()); + var _concat = _interopRequireDefault(require_concat4()); + var _slice = _interopRequireDefault(require_slice4()); + var _default = function _default2(XRegExp3) { + function row(name, value, start2, end2) { + return { + name, + value, + start: start2, + end: end2 + }; + } + XRegExp3.matchRecursive = function(str, left2, right2, flags, options) { + flags = flags || ""; + options = options || {}; + var global2 = (0, _indexOf["default"])(flags).call(flags, "g") !== -1; + var sticky = (0, _indexOf["default"])(flags).call(flags, "y") !== -1; + var basicFlags = flags.replace(/y/g, ""); + left2 = XRegExp3(left2, basicFlags); + right2 = XRegExp3(right2, basicFlags); + var esc; + var _options = options, escapeChar = _options.escapeChar; + if (escapeChar) { + var _context, _context2; + if (escapeChar.length > 1) { + throw new Error("Cannot use more than one escape character"); + } + escapeChar = XRegExp3.escape(escapeChar); + esc = new RegExp( + (0, _concat["default"])(_context = (0, _concat["default"])(_context2 = "(?:".concat(escapeChar, "[\\S\\s]|(?:(?!")).call( + _context2, + XRegExp3.union([left2, right2], "", { + conjunction: "or" + }).source, + ")[^" + )).call(_context, escapeChar, "])+)+"), + flags.replace(XRegExp3._hasNativeFlag("s") ? /[^imsu]/g : /[^imu]/g, "") + ); + } + var openTokens = 0; + var delimStart = 0; + var delimEnd = 0; + var lastOuterEnd = 0; + var outerStart; + var innerStart; + var leftMatch; + var rightMatch; + var vN = options.valueNames; + var output = []; + while (true) { + if (escapeChar) { + delimEnd += (XRegExp3.exec(str, esc, delimEnd, "sticky") || [""])[0].length; + } + leftMatch = XRegExp3.exec(str, left2, delimEnd); + rightMatch = XRegExp3.exec(str, right2, delimEnd); + if (leftMatch && rightMatch) { + if (leftMatch.index <= rightMatch.index) { + rightMatch = null; + } else { + leftMatch = null; + } + } + if (leftMatch || rightMatch) { + delimStart = (leftMatch || rightMatch).index; + delimEnd = delimStart + (leftMatch || rightMatch)[0].length; + } else if (!openTokens) { + break; + } + if (sticky && !openTokens && delimStart > lastOuterEnd) { + break; + } + if (leftMatch) { + if (!openTokens) { + outerStart = delimStart; + innerStart = delimEnd; + } + openTokens += 1; + } else if (rightMatch && openTokens) { + openTokens -= 1; + if (!openTokens) { + if (vN) { + if (vN[0] && outerStart > lastOuterEnd) { + output.push(row(vN[0], (0, _slice["default"])(str).call(str, lastOuterEnd, outerStart), lastOuterEnd, outerStart)); + } + if (vN[1]) { + output.push(row(vN[1], (0, _slice["default"])(str).call(str, outerStart, innerStart), outerStart, innerStart)); + } + if (vN[2]) { + output.push(row(vN[2], (0, _slice["default"])(str).call(str, innerStart, delimStart), innerStart, delimStart)); + } + if (vN[3]) { + output.push(row(vN[3], (0, _slice["default"])(str).call(str, delimStart, delimEnd), delimStart, delimEnd)); + } + } else { + output.push((0, _slice["default"])(str).call(str, innerStart, delimStart)); + } + lastOuterEnd = delimEnd; + if (!global2) { + break; + } + } + } else { + var unbalanced = options.unbalanced || "error"; + if (unbalanced === "skip" || unbalanced === "skip-lazy") { + if (rightMatch) { + rightMatch = null; + } else { + if (unbalanced === "skip") { + var outerStartDelimLength = XRegExp3.exec(str, left2, outerStart, "sticky")[0].length; + delimEnd = outerStart + (outerStartDelimLength || 1); + } else { + delimEnd = outerStart + 1; + } + openTokens = 0; + } + } else if (unbalanced === "error") { + var _context3; + var delimSide = rightMatch ? "right" : "left"; + var errorPos = rightMatch ? delimStart : outerStart; + throw new Error((0, _concat["default"])(_context3 = "Unbalanced ".concat(delimSide, " delimiter found in string at position ")).call(_context3, errorPos)); + } else { + throw new Error("Unsupported value for unbalanced: ".concat(unbalanced)); + } + } + if (delimStart === delimEnd) { + delimEnd += 1; + } + } + if (global2 && output.length > 0 && !sticky && vN && vN[0] && str.length > lastOuterEnd) { + output.push(row(vN[0], (0, _slice["default"])(str).call(str, lastOuterEnd), lastOuterEnd, str.length)); + } + return output; + }; + }; + exports["default"] = _default; + module2.exports = exports.default; + } +}); + +// node_modules/xregexp/lib/addons/unicode-base.js +var require_unicode_base = __commonJS({ + "node_modules/xregexp/lib/addons/unicode-base.js"(exports, module2) { + "use strict"; + var _sliceInstanceProperty = require_slice4(); + var _Array$from = require_from3(); + var _Symbol = require_symbol3(); + var _getIteratorMethod = require_get_iterator_method7(); + var _Array$isArray = require_is_array4(); + var _Object$defineProperty = require_define_property3(); + var _interopRequireDefault = require_interopRequireDefault(); + _Object$defineProperty(exports, "__esModule", { + value: true + }); + exports["default"] = void 0; + var _slicedToArray2 = _interopRequireDefault(require_slicedToArray()); + var _forEach = _interopRequireDefault(require_for_each4()); + var _concat = _interopRequireDefault(require_concat4()); + var _indexOf = _interopRequireDefault(require_index_of4()); + function _createForOfIteratorHelper(o, allowArrayLike) { + var it = typeof _Symbol !== "undefined" && _getIteratorMethod(o) || o["@@iterator"]; + if (!it) { + if (_Array$isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) + o = it; + var i = 0; + var F = function F2() { + }; + return { s: F, n: function n() { + if (i >= o.length) + return { done: true }; + return { done: false, value: o[i++] }; + }, e: function e(_e) { + throw _e; + }, f: F }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var normalCompletion = true, didErr = false, err; + return { s: function s() { + it = it.call(o); + }, n: function n() { + var step = it.next(); + normalCompletion = step.done; + return step; + }, e: function e(_e2) { + didErr = true; + err = _e2; + }, f: function f() { + try { + if (!normalCompletion && it["return"] != null) + it["return"](); + } finally { + if (didErr) + throw err; + } + } }; + } + function _unsupportedIterableToArray(o, minLen) { + var _context4; + if (!o) + return; + if (typeof o === "string") + return _arrayLikeToArray(o, minLen); + var n = _sliceInstanceProperty(_context4 = Object.prototype.toString.call(o)).call(_context4, 8, -1); + if (n === "Object" && o.constructor) + n = o.constructor.name; + if (n === "Map" || n === "Set") + return _Array$from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) + return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) + len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) { + arr2[i] = arr[i]; + } + return arr2; + } + var _default = function _default2(XRegExp3) { + var unicode = {}; + var unicodeTypes = {}; + var dec = XRegExp3._dec; + var hex = XRegExp3._hex; + var pad4 = XRegExp3._pad4; + function normalize(name) { + return name.replace(/[- _]+/g, "").toLowerCase(); + } + function charCode(chr) { + var esc = /^\\[xu](.+)/.exec(chr); + return esc ? dec(esc[1]) : chr.charCodeAt(chr[0] === "\\" ? 1 : 0); + } + function invertBmp(range) { + var output = ""; + var lastEnd = -1; + (0, _forEach["default"])(XRegExp3).call(XRegExp3, range, /(\\x..|\\u....|\\?[\s\S])(?:-(\\x..|\\u....|\\?[\s\S]))?/, function(m) { + var start2 = charCode(m[1]); + if (start2 > lastEnd + 1) { + output += "\\u".concat(pad4(hex(lastEnd + 1))); + if (start2 > lastEnd + 2) { + output += "-\\u".concat(pad4(hex(start2 - 1))); + } + } + lastEnd = charCode(m[2] || m[1]); + }); + if (lastEnd < 65535) { + output += "\\u".concat(pad4(hex(lastEnd + 1))); + if (lastEnd < 65534) { + output += "-\\uFFFF"; + } + } + return output; + } + function cacheInvertedBmp(slug) { + var prop = "b!"; + return unicode[slug][prop] || (unicode[slug][prop] = invertBmp(unicode[slug].bmp)); + } + function buildAstral(slug, isNegated) { + var item = unicode[slug]; + var combined = ""; + if (item.bmp && !item.isBmpLast) { + var _context; + combined = (0, _concat["default"])(_context = "[".concat(item.bmp, "]")).call(_context, item.astral ? "|" : ""); + } + if (item.astral) { + combined += item.astral; + } + if (item.isBmpLast && item.bmp) { + var _context2; + combined += (0, _concat["default"])(_context2 = "".concat(item.astral ? "|" : "", "[")).call(_context2, item.bmp, "]"); + } + return isNegated ? "(?:(?!".concat(combined, ")(?:[\uD800-\uDBFF][\uDC00-\uDFFF]|[\0-\uFFFF]))") : "(?:".concat(combined, ")"); + } + function cacheAstral(slug, isNegated) { + var prop = isNegated ? "a!" : "a="; + return unicode[slug][prop] || (unicode[slug][prop] = buildAstral(slug, isNegated)); + } + XRegExp3.addToken( + /\\([pP])(?:{(\^?)(?:(\w+)=)?([^}]*)}|([A-Za-z]))/, + function(match, scope, flags) { + var ERR_DOUBLE_NEG = "Invalid double negation "; + var ERR_UNKNOWN_NAME = "Unknown Unicode token "; + var ERR_UNKNOWN_REF = "Unicode token missing data "; + var ERR_ASTRAL_ONLY = "Astral mode required for Unicode token "; + var ERR_ASTRAL_IN_CLASS = "Astral mode does not support Unicode tokens within character classes"; + var _match = (0, _slicedToArray2["default"])(match, 6), fullToken = _match[0], pPrefix = _match[1], caretNegation = _match[2], typePrefix = _match[3], tokenName = _match[4], tokenSingleCharName = _match[5]; + var isNegated = pPrefix === "P" || !!caretNegation; + var isAstralMode = (0, _indexOf["default"])(flags).call(flags, "A") !== -1; + var slug = normalize(tokenSingleCharName || tokenName); + var item = unicode[slug]; + if (pPrefix === "P" && caretNegation) { + throw new SyntaxError(ERR_DOUBLE_NEG + fullToken); + } + if (!unicode.hasOwnProperty(slug)) { + throw new SyntaxError(ERR_UNKNOWN_NAME + fullToken); + } + if (typePrefix) { + if (!(unicodeTypes[typePrefix] && unicodeTypes[typePrefix][slug])) { + throw new SyntaxError(ERR_UNKNOWN_NAME + fullToken); + } + } + if (item.inverseOf) { + slug = normalize(item.inverseOf); + if (!unicode.hasOwnProperty(slug)) { + var _context3; + throw new ReferenceError((0, _concat["default"])(_context3 = "".concat(ERR_UNKNOWN_REF + fullToken, " -> ")).call(_context3, item.inverseOf)); + } + item = unicode[slug]; + isNegated = !isNegated; + } + if (!(item.bmp || isAstralMode)) { + throw new SyntaxError(ERR_ASTRAL_ONLY + fullToken); + } + if (isAstralMode) { + if (scope === "class") { + throw new SyntaxError(ERR_ASTRAL_IN_CLASS); + } + return cacheAstral(slug, isNegated); + } + return scope === "class" ? isNegated ? cacheInvertedBmp(slug) : item.bmp : "".concat((isNegated ? "[^" : "[") + item.bmp, "]"); + }, + { + scope: "all", + optionalFlags: "A", + leadChar: "\\" + } + ); + XRegExp3.addUnicodeData = function(data, typePrefix) { + var ERR_NO_NAME = "Unicode token requires name"; + var ERR_NO_DATA = "Unicode token has no character data "; + if (typePrefix) { + unicodeTypes[typePrefix] = {}; + } + var _iterator = _createForOfIteratorHelper(data), _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done; ) { + var item = _step.value; + if (!item.name) { + throw new Error(ERR_NO_NAME); + } + if (!(item.inverseOf || item.bmp || item.astral)) { + throw new Error(ERR_NO_DATA + item.name); + } + var normalizedName = normalize(item.name); + unicode[normalizedName] = item; + if (typePrefix) { + unicodeTypes[typePrefix][normalizedName] = true; + } + if (item.alias) { + var normalizedAlias = normalize(item.alias); + unicode[normalizedAlias] = item; + if (typePrefix) { + unicodeTypes[typePrefix][normalizedAlias] = true; + } + } + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + XRegExp3.cache.flush("patterns"); + }; + XRegExp3._getUnicodeProperty = function(name) { + var slug = normalize(name); + return unicode[slug]; + }; + }; + exports["default"] = _default; + module2.exports = exports.default; + } +}); + +// node_modules/xregexp/tools/output/categories.js +var require_categories = __commonJS({ + "node_modules/xregexp/tools/output/categories.js"(exports, module2) { + module2.exports = [ + { + "name": "C", + "alias": "Other", + "isBmpLast": true, + "bmp": "\0-\x7F-\x9F\xAD\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EE\u05F5-\u0605\u061C\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB\u07FC\u082E\u082F\u083F\u085C\u085D\u085F\u086B-\u086F\u088F-\u0897\u08E2\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A77-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C0D\u0C11\u0C29\u0C3A\u0C3B\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B\u0C5C\u0C5E\u0C5F\u0C64\u0C65\u0C70-\u0C76\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDC\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u1716-\u171E\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180E\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1ACF-\u1AFF\u1B4D-\u1B4F\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1C8F\u1CBB\u1CBC\u1CC8-\u1CCF\u1CFB-\u1CFF\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20C1-\u20CF\u20F1-\u20FF\u218C-\u218F\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E5E-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u3130\u318F\u31E4-\u31EF\u321F\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7CB-\uA7CF\uA7D2\uA7D4\uA7DA-\uA7F1\uA82D-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB6C-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC3-\uFBD2\uFD90\uFD91\uFDC8-\uFDCE\uFDD0-\uFDEF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF", + "astral": "\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9D-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F\uDEAA\uDEAE\uDEAF\uDEB2-\uDEFF\uDF28-\uDF2F\uDF5A-\uDF6F\uDF8A-\uDFAF\uDFCC-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC76-\uDC7E\uDCBD\uDCC3-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD48-\uDD4F\uDD77-\uDD7F\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5C\uDC62-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEBA-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF47-\uDFFF]|\uD806[\uDC3C-\uDC9F\uDCF3-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD47-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE5-\uDDFF\uDE48-\uDE4F\uDEA3-\uDEAF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF9-\uDFAF\uDFB1-\uDFBF\uDFF2-\uDFFE]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80E-\uD810\uD812-\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD832\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF3-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDEBF\uDECA-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE9B-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA0-\uDFFF]|\uD833[\uDC00-\uDEFF\uDF2E\uDF2F\uDF47-\uDF4F\uDFC4-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDD73-\uDD7A\uDDEB-\uDDFF\uDE46-\uDEDF\uDEF4-\uDEFF\uDF57-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD50-\uDE8F\uDEAF-\uDEBF\uDEFA-\uDEFE\uDF00-\uDFFF]|\uD839[\uDC00-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCB5-\uDD00\uDD3E-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDDAE-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED8-\uDEDC\uDEED-\uDEEF\uDEFD-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFDF\uDFEC-\uDFEF\uDFF1-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCB2-\uDCFF\uDE54-\uDE5F\uDE6E\uDE6F\uDE75-\uDE77\uDE7D-\uDE7F\uDE87-\uDE8F\uDEAD-\uDEAF\uDEBB-\uDEBF\uDEC6-\uDECF\uDEDA-\uDEDF\uDEE8-\uDEEF\uDEF7-\uDEFF\uDF93\uDFCB-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF39-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]" + }, + { + "name": "Cc", + "alias": "Control", + "bmp": "\0-\x7F-\x9F" + }, + { + "name": "Cf", + "alias": "Format", + "bmp": "\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB", + "astral": "\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC38]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]" + }, + { + "name": "Cn", + "alias": "Unassigned", + "bmp": "\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EE\u05F5-\u05FF\u070E\u074B\u074C\u07B2-\u07BF\u07FB\u07FC\u082E\u082F\u083F\u085C\u085D\u085F\u086B-\u086F\u088F\u0892-\u0897\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A77-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C0D\u0C11\u0C29\u0C3A\u0C3B\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B\u0C5C\u0C5E\u0C5F\u0C64\u0C65\u0C70-\u0C76\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDC\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u1716-\u171E\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1ACF-\u1AFF\u1B4D-\u1B4F\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1C8F\u1CBB\u1CBC\u1CC8-\u1CCF\u1CFB-\u1CFF\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u2065\u2072\u2073\u208F\u209D-\u209F\u20C1-\u20CF\u20F1-\u20FF\u218C-\u218F\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E5E-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u3130\u318F\u31E4-\u31EF\u321F\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7CB-\uA7CF\uA7D2\uA7D4\uA7DA-\uA7F1\uA82D-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB6C-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC3-\uFBD2\uFD90\uFD91\uFDC8-\uFDCE\uFDD0-\uFDEF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD\uFEFE\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFF8\uFFFE\uFFFF", + "astral": "\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9D-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD7B\uDD8B\uDD93\uDD96\uDDA2\uDDB2\uDDBA\uDDBD-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDF7F\uDF86\uDFB1\uDFBB-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F\uDEAA\uDEAE\uDEAF\uDEB2-\uDEFF\uDF28-\uDF2F\uDF5A-\uDF6F\uDF8A-\uDFAF\uDFCC-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC76-\uDC7E\uDCC3-\uDCCC\uDCCE\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD48-\uDD4F\uDD77-\uDD7F\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5C\uDC62-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEBA-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF47-\uDFFF]|\uD806[\uDC3C-\uDC9F\uDCF3-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD47-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE5-\uDDFF\uDE48-\uDE4F\uDEA3-\uDEAF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF9-\uDFAF\uDFB1-\uDFBF\uDFF2-\uDFFE]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80E-\uD810\uD812-\uD819\uD824-\uD82A\uD82D\uD82E\uD830-\uD832\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDB7F][\uDC00-\uDFFF]|\uD80B[\uDC00-\uDF8F\uDFF3-\uDFFF]|\uD80D[\uDC2F\uDC39-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDEBF\uDECA-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE9B-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82B[\uDC00-\uDFEF\uDFF4\uDFFC\uDFFF]|\uD82C[\uDD23-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA4-\uDFFF]|\uD833[\uDC00-\uDEFF\uDF2E\uDF2F\uDF47-\uDF4F\uDFC4-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDDEB-\uDDFF\uDE46-\uDEDF\uDEF4-\uDEFF\uDF57-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD837[\uDC00-\uDEFF\uDF1F-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD50-\uDE8F\uDEAF-\uDEBF\uDEFA-\uDEFE\uDF00-\uDFFF]|\uD839[\uDC00-\uDFDF\uDFE7\uDFEC\uDFEF\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCB5-\uDD00\uDD3E-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDDAE-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED8-\uDEDC\uDEED-\uDEEF\uDEFD-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFDF\uDFEC-\uDFEF\uDFF1-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCB2-\uDCFF\uDE54-\uDE5F\uDE6E\uDE6F\uDE75-\uDE77\uDE7D-\uDE7F\uDE87-\uDE8F\uDEAD-\uDEAF\uDEBB-\uDEBF\uDEC6-\uDECF\uDEDA-\uDEDF\uDEE8-\uDEEF\uDEF7-\uDEFF\uDF93\uDFCB-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEE0-\uDEFF]|\uD86D[\uDF39-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00\uDC02-\uDC1F\uDC80-\uDCFF\uDDF0-\uDFFF]|[\uDBBF\uDBFF][\uDFFE\uDFFF]" + }, + { + "name": "Co", + "alias": "Private_Use", + "bmp": "\uE000-\uF8FF", + "astral": "[\uDB80-\uDBBE\uDBC0-\uDBFE][\uDC00-\uDFFF]|[\uDBBF\uDBFF][\uDC00-\uDFFD]" + }, + { + "name": "Cs", + "alias": "Surrogate", + "bmp": "\uD800-\uDFFF" + }, + { + "name": "L", + "alias": "Letter", + "bmp": "A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC", + "astral": "\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]" + }, + { + "name": "LC", + "alias": "Cased_Letter", + "bmp": "A-Za-z\xB5\xC0-\xD6\xD8-\xF6\xF8-\u01BA\u01BC-\u01BF\u01C4-\u0293\u0295-\u02AF\u0370-\u0373\u0376\u0377\u037B-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0560-\u0588\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FD-\u10FF\u13A0-\u13F5\u13F8-\u13FD\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2134\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C7B\u2C7E-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA640-\uA66D\uA680-\uA69B\uA722-\uA76F\uA771-\uA787\uA78B-\uA78E\uA790-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F5\uA7F6\uA7FA\uAB30-\uAB5A\uAB60-\uAB68\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF21-\uFF3A\uFF41-\uFF5A", + "astral": "\uD801[\uDC00-\uDC4F\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC]|\uD803[\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD806[\uDCA0-\uDCDF]|\uD81B[\uDE40-\uDE7F]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF09\uDF0B-\uDF1E]|\uD83A[\uDD00-\uDD43]" + }, + { + "name": "Ll", + "alias": "Lowercase_Letter", + "bmp": "a-z\xB5\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0560-\u0588\u10D0-\u10FA\u10FD-\u10FF\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5F\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7AF\uA7B5\uA7B7\uA7B9\uA7BB\uA7BD\uA7BF\uA7C1\uA7C3\uA7C8\uA7CA\uA7D1\uA7D3\uA7D5\uA7D7\uA7D9\uA7F6\uA7FA\uAB30-\uAB5A\uAB60-\uAB68\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A", + "astral": "\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD81B[\uDE60-\uDE7F]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD837[\uDF00-\uDF09\uDF0B-\uDF1E]|\uD83A[\uDD22-\uDD43]" + }, + { + "name": "Lm", + "alias": "Modifier_Letter", + "bmp": "\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5\u06E6\u07F4\u07F5\u07FA\u081A\u0824\u0828\u08C9\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C\uA69D\uA717-\uA71F\uA770\uA788\uA7F2-\uA7F4\uA7F8\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3\uAAF4\uAB5C-\uAB5F\uAB69\uFF70\uFF9E\uFF9F", + "astral": "\uD801[\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD81A[\uDF40-\uDF43]|\uD81B[\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD838[\uDD37-\uDD3D]|\u{1E94B}" + }, + { + "name": "Lo", + "alias": "Other_Letter", + "bmp": "\xAA\xBA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05EF-\u05F2\u0620-\u063F\u0641-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C8\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC", + "astral": "\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC50-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF4A\uDF50]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\u{1DF0A}|\uD838[\uDD00-\uDD2C\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]" + }, + { + "name": "Lt", + "alias": "Titlecase_Letter", + "bmp": "\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC" + }, + { + "name": "Lu", + "alias": "Uppercase_Letter", + "bmp": "A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1C90-\u1CBA\u1CBD-\u1CBF\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2183\u2C00-\u2C2F\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uA7B8\uA7BA\uA7BC\uA7BE\uA7C0\uA7C2\uA7C4-\uA7C7\uA7C9\uA7D0\uA7D6\uA7D8\uA7F5\uFF21-\uFF3A", + "astral": "\uD801[\uDC00-\uDC27\uDCB0-\uDCD3\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95]|\uD803[\uDC80-\uDCB2]|\uD806[\uDCA0-\uDCBF]|\uD81B[\uDE40-\uDE5F]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD83A[\uDD00-\uDD21]" + }, + { + "name": "M", + "alias": "Mark", + "bmp": "\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u0898-\u089F\u08CA-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3C\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D81-\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u180F\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ACE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA82C\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F", + "astral": "\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDEAB\uDEAC\uDF46-\uDF50\uDF82-\uDF85]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC70\uDC73\uDC74\uDC7F-\uDC82\uDCB0-\uDCBA\uDCC2\uDD00-\uDD02\uDD27-\uDD34\uDD45\uDD46\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDDC9-\uDDCC\uDDCE\uDDCF\uDE2C-\uDE37\uDE3E\uDEDF-\uDEEA\uDF00-\uDF03\uDF3B\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC35-\uDC46\uDC5E\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDDDC\uDDDD\uDE30-\uDE40\uDEAB-\uDEB7\uDF1D-\uDF2B]|\uD806[\uDC2C-\uDC3A\uDD30-\uDD35\uDD37\uDD38\uDD3B-\uDD3E\uDD40\uDD42\uDD43\uDDD1-\uDDD7\uDDDA-\uDDE0\uDDE4\uDE01-\uDE0A\uDE33-\uDE39\uDE3B-\uDE3E\uDE47\uDE51-\uDE5B\uDE8A-\uDE99]|\uD807[\uDC2F-\uDC36\uDC38-\uDC3F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD8A-\uDD8E\uDD90\uDD91\uDD93-\uDD97\uDEF3-\uDEF6]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF4F\uDF51-\uDF87\uDF8F-\uDF92\uDFE4\uDFF0\uDFF1]|\uD82F[\uDC9D\uDC9E]|\uD833[\uDF00-\uDF2D\uDF30-\uDF46]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD30-\uDD36\uDEAE\uDEEC-\uDEEF]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]" + }, + { + "name": "Mc", + "alias": "Spacing_Mark", + "bmp": "\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E\u094F\u0982\u0983\u09BE-\u09C0\u09C7\u09C8\u09CB\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB\u0ACC\u0B02\u0B03\u0B3E\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0B57\u0BBE\u0BBF\u0BC1\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7\u0CC8\u0CCA\u0CCB\u0CD5\u0CD6\u0D02\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2\u0DF3\u0F3E\u0F3F\u0F7F\u102B\u102C\u1031\u1038\u103B\u103C\u1056\u1057\u1062-\u1064\u1067-\u106D\u1083\u1084\u1087-\u108C\u108F\u109A-\u109C\u1715\u1734\u17B6\u17BE-\u17C5\u17C7\u17C8\u1923-\u1926\u1929-\u192B\u1930\u1931\u1933-\u1938\u1A19\u1A1A\u1A55\u1A57\u1A61\u1A63\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43\u1B44\u1B82\u1BA1\u1BA6\u1BA7\u1BAA\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2\u1BF3\u1C24-\u1C2B\u1C34\u1C35\u1CE1\u1CF7\u302E\u302F\uA823\uA824\uA827\uA880\uA881\uA8B4-\uA8C3\uA952\uA953\uA983\uA9B4\uA9B5\uA9BA\uA9BB\uA9BE-\uA9C0\uAA2F\uAA30\uAA33\uAA34\uAA4D\uAA7B\uAA7D\uAAEB\uAAEE\uAAEF\uAAF5\uABE3\uABE4\uABE6\uABE7\uABE9\uABEA\uABEC", + "astral": "\uD804[\uDC00\uDC02\uDC82\uDCB0-\uDCB2\uDCB7\uDCB8\uDD2C\uDD45\uDD46\uDD82\uDDB3-\uDDB5\uDDBF\uDDC0\uDDCE\uDE2C-\uDE2E\uDE32\uDE33\uDE35\uDEE0-\uDEE2\uDF02\uDF03\uDF3E\uDF3F\uDF41-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63]|\uD805[\uDC35-\uDC37\uDC40\uDC41\uDC45\uDCB0-\uDCB2\uDCB9\uDCBB-\uDCBE\uDCC1\uDDAF-\uDDB1\uDDB8-\uDDBB\uDDBE\uDE30-\uDE32\uDE3B\uDE3C\uDE3E\uDEAC\uDEAE\uDEAF\uDEB6\uDF20\uDF21\uDF26]|\uD806[\uDC2C-\uDC2E\uDC38\uDD30-\uDD35\uDD37\uDD38\uDD3D\uDD40\uDD42\uDDD1-\uDDD3\uDDDC-\uDDDF\uDDE4\uDE39\uDE57\uDE58\uDE97]|\uD807[\uDC2F\uDC3E\uDCA9\uDCB1\uDCB4\uDD8A-\uDD8E\uDD93\uDD94\uDD96\uDEF5\uDEF6]|\uD81B[\uDF51-\uDF87\uDFF0\uDFF1]|\uD834[\uDD65\uDD66\uDD6D-\uDD72]" + }, + { + "name": "Me", + "alias": "Enclosing_Mark", + "bmp": "\u0488\u0489\u1ABE\u20DD-\u20E0\u20E2-\u20E4\uA670-\uA672" + }, + { + "name": "Mn", + "alias": "Nonspacing_Mark", + "bmp": "\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u0898-\u089F\u08CA-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u09FE\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B55\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C04\u0C3C\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC\u0CCD\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0D81\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732\u1733\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u180F\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABD\u1ABF-\u1ACE\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA82C\uA8C4\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9BD\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F", + "astral": "\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDEAB\uDEAC\uDF46-\uDF50\uDF82-\uDF85]|\uD804[\uDC01\uDC38-\uDC46\uDC70\uDC73\uDC74\uDC7F-\uDC81\uDCB3-\uDCB6\uDCB9\uDCBA\uDCC2\uDD00-\uDD02\uDD27-\uDD2B\uDD2D-\uDD34\uDD73\uDD80\uDD81\uDDB6-\uDDBE\uDDC9-\uDDCC\uDDCF\uDE2F-\uDE31\uDE34\uDE36\uDE37\uDE3E\uDEDF\uDEE3-\uDEEA\uDF00\uDF01\uDF3B\uDF3C\uDF40\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC38-\uDC3F\uDC42-\uDC44\uDC46\uDC5E\uDCB3-\uDCB8\uDCBA\uDCBF\uDCC0\uDCC2\uDCC3\uDDB2-\uDDB5\uDDBC\uDDBD\uDDBF\uDDC0\uDDDC\uDDDD\uDE33-\uDE3A\uDE3D\uDE3F\uDE40\uDEAB\uDEAD\uDEB0-\uDEB5\uDEB7\uDF1D-\uDF1F\uDF22-\uDF25\uDF27-\uDF2B]|\uD806[\uDC2F-\uDC37\uDC39\uDC3A\uDD3B\uDD3C\uDD3E\uDD43\uDDD4-\uDDD7\uDDDA\uDDDB\uDDE0\uDE01-\uDE0A\uDE33-\uDE38\uDE3B-\uDE3E\uDE47\uDE51-\uDE56\uDE59-\uDE5B\uDE8A-\uDE96\uDE98\uDE99]|\uD807[\uDC30-\uDC36\uDC38-\uDC3D\uDC3F\uDC92-\uDCA7\uDCAA-\uDCB0\uDCB2\uDCB3\uDCB5\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD90\uDD91\uDD95\uDD97\uDEF3\uDEF4]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF4F\uDF8F-\uDF92\uDFE4]|\uD82F[\uDC9D\uDC9E]|\uD833[\uDF00-\uDF2D\uDF30-\uDF46]|\uD834[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD30-\uDD36\uDEAE\uDEEC-\uDEEF]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]" + }, + { + "name": "N", + "alias": "Number", + "bmp": "0-9\xB2\xB3\xB9\xBC-\xBE\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u09F4-\u09F9\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0B72-\u0B77\u0BE6-\u0BF2\u0C66-\u0C6F\u0C78-\u0C7E\u0CE6-\u0CEF\u0D58-\u0D5E\u0D66-\u0D78\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F33\u1040-\u1049\u1090-\u1099\u1369-\u137C\u16EE-\u16F0\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1946-\u194F\u19D0-\u19DA\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\u2070\u2074-\u2079\u2080-\u2089\u2150-\u2182\u2185-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3007\u3021-\u3029\u3038-\u303A\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA620-\uA629\uA6E6-\uA6EF\uA830-\uA835\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19", + "astral": "\uD800[\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23\uDF41\uDF4A\uDFD1-\uDFD5]|\uD801[\uDCA0-\uDCA9]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE48\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDD30-\uDD39\uDE60-\uDE7E\uDF1D-\uDF26\uDF51-\uDF54\uDFC5-\uDFCB]|\uD804[\uDC52-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDDE1-\uDDF4\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF3B]|\uD806[\uDCE0-\uDCF2\uDD50-\uDD59]|\uD807[\uDC50-\uDC6C\uDD50-\uDD59\uDDA0-\uDDA9\uDFC0-\uDFD4]|\uD809[\uDC00-\uDC6E]|\uD81A[\uDE60-\uDE69\uDEC0-\uDEC9\uDF50-\uDF59\uDF5B-\uDF61]|\uD81B[\uDE80-\uDE96]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDFCE-\uDFFF]|\uD838[\uDD40-\uDD49\uDEF0-\uDEF9]|\uD83A[\uDCC7-\uDCCF\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]" + }, + { + "name": "Nd", + "alias": "Decimal_Number", + "bmp": "0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19", + "astral": "\uD801[\uDCA0-\uDCA9]|\uD803[\uDD30-\uDD39]|\uD804[\uDC66-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF39]|\uD806[\uDCE0-\uDCE9\uDD50-\uDD59]|\uD807[\uDC50-\uDC59\uDD50-\uDD59\uDDA0-\uDDA9]|\uD81A[\uDE60-\uDE69\uDEC0-\uDEC9\uDF50-\uDF59]|\uD835[\uDFCE-\uDFFF]|\uD838[\uDD40-\uDD49\uDEF0-\uDEF9]|\uD83A[\uDD50-\uDD59]|\uD83E[\uDFF0-\uDFF9]" + }, + { + "name": "Nl", + "alias": "Letter_Number", + "bmp": "\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF", + "astral": "\uD800[\uDD40-\uDD74\uDF41\uDF4A\uDFD1-\uDFD5]|\uD809[\uDC00-\uDC6E]" + }, + { + "name": "No", + "alias": "Other_Number", + "bmp": "\xB2\xB3\xB9\xBC-\xBE\u09F4-\u09F9\u0B72-\u0B77\u0BF0-\u0BF2\u0C78-\u0C7E\u0D58-\u0D5E\u0D70-\u0D78\u0F2A-\u0F33\u1369-\u137C\u17F0-\u17F9\u19DA\u2070\u2074-\u2079\u2080-\u2089\u2150-\u215F\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA830-\uA835", + "astral": "\uD800[\uDD07-\uDD33\uDD75-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE48\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDE60-\uDE7E\uDF1D-\uDF26\uDF51-\uDF54\uDFC5-\uDFCB]|\uD804[\uDC52-\uDC65\uDDE1-\uDDF4]|\uD805[\uDF3A\uDF3B]|\uD806[\uDCEA-\uDCF2]|\uD807[\uDC5A-\uDC6C\uDFC0-\uDFD4]|\uD81A[\uDF5B-\uDF61]|\uD81B[\uDE80-\uDE96]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD83A[\uDCC7-\uDCCF]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D]|\uD83C[\uDD00-\uDD0C]" + }, + { + "name": "P", + "alias": "Punctuation", + "bmp": "!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65", + "astral": "\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\u{1056F}|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\u{1BC9F}|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]" + }, + { + "name": "Pc", + "alias": "Connector_Punctuation", + "bmp": "_\u203F\u2040\u2054\uFE33\uFE34\uFE4D-\uFE4F\uFF3F" + }, + { + "name": "Pd", + "alias": "Dash_Punctuation", + "bmp": "\\-\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u2E5D\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D", + "astral": "\u{10EAD}" + }, + { + "name": "Pe", + "alias": "Close_Punctuation", + "bmp": "\\)\\]\\}\u0F3B\u0F3D\u169C\u2046\u207E\u208E\u2309\u230B\u232A\u2769\u276B\u276D\u276F\u2771\u2773\u2775\u27C6\u27E7\u27E9\u27EB\u27ED\u27EF\u2984\u2986\u2988\u298A\u298C\u298E\u2990\u2992\u2994\u2996\u2998\u29D9\u29DB\u29FD\u2E23\u2E25\u2E27\u2E29\u2E56\u2E58\u2E5A\u2E5C\u3009\u300B\u300D\u300F\u3011\u3015\u3017\u3019\u301B\u301E\u301F\uFD3E\uFE18\uFE36\uFE38\uFE3A\uFE3C\uFE3E\uFE40\uFE42\uFE44\uFE48\uFE5A\uFE5C\uFE5E\uFF09\uFF3D\uFF5D\uFF60\uFF63" + }, + { + "name": "Pf", + "alias": "Final_Punctuation", + "bmp": "\xBB\u2019\u201D\u203A\u2E03\u2E05\u2E0A\u2E0D\u2E1D\u2E21" + }, + { + "name": "Pi", + "alias": "Initial_Punctuation", + "bmp": "\xAB\u2018\u201B\u201C\u201F\u2039\u2E02\u2E04\u2E09\u2E0C\u2E1C\u2E20" + }, + { + "name": "Po", + "alias": "Other_Punctuation", + "bmp": "!-#%-'\\*,\\.\\/:;\\?@\\\xA1\xA7\xB6\xB7\xBF\u037E\u0387\u055A-\u055F\u0589\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u166E\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u1805\u1807-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203B-\u203E\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205E\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00\u2E01\u2E06-\u2E08\u2E0B\u2E0E-\u2E16\u2E18\u2E19\u2E1B\u2E1E\u2E1F\u2E2A-\u2E2E\u2E30-\u2E39\u2E3C-\u2E3F\u2E41\u2E43-\u2E4F\u2E52-\u2E54\u3001-\u3003\u303D\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFE10-\uFE16\uFE19\uFE30\uFE45\uFE46\uFE49-\uFE4C\uFE50-\uFE52\uFE54-\uFE57\uFE5F-\uFE61\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF07\uFF0A\uFF0C\uFF0E\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3C\uFF61\uFF64\uFF65", + "astral": "\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\u{1056F}|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\u{1BC9F}|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]" + }, + { + "name": "Ps", + "alias": "Open_Punctuation", + "bmp": "\\(\\[\\{\u0F3A\u0F3C\u169B\u201A\u201E\u2045\u207D\u208D\u2308\u230A\u2329\u2768\u276A\u276C\u276E\u2770\u2772\u2774\u27C5\u27E6\u27E8\u27EA\u27EC\u27EE\u2983\u2985\u2987\u2989\u298B\u298D\u298F\u2991\u2993\u2995\u2997\u29D8\u29DA\u29FC\u2E22\u2E24\u2E26\u2E28\u2E42\u2E55\u2E57\u2E59\u2E5B\u3008\u300A\u300C\u300E\u3010\u3014\u3016\u3018\u301A\u301D\uFD3F\uFE17\uFE35\uFE37\uFE39\uFE3B\uFE3D\uFE3F\uFE41\uFE43\uFE47\uFE59\uFE5B\uFE5D\uFF08\uFF3B\uFF5B\uFF5F\uFF62" + }, + { + "name": "S", + "alias": "Symbol", + "bmp": "\\$\\+<->\\^`\\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u0888\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20C0\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC2\uFD40-\uFD4F\uFDCF\uFDFC-\uFDFF\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD", + "astral": "\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\u{1173F}|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\u{1BC9C}|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEDD-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7C\uDE80-\uDE86\uDE90-\uDEAC\uDEB0-\uDEBA\uDEC0-\uDEC5\uDED0-\uDED9\uDEE0-\uDEE7\uDEF0-\uDEF6\uDF00-\uDF92\uDF94-\uDFCA]" + }, + { + "name": "Sc", + "alias": "Currency_Symbol", + "bmp": "\\$\xA2-\xA5\u058F\u060B\u07FE\u07FF\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20C0\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6", + "astral": "\uD807[\uDFDD-\uDFE0]|\u{1E2FF}|\u{1ECB0}" + }, + { + "name": "Sk", + "alias": "Modifier_Symbol", + "bmp": "\\^`\xA8\xAF\xB4\xB8\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u0888\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u309B\u309C\uA700-\uA716\uA720\uA721\uA789\uA78A\uAB5B\uAB6A\uAB6B\uFBB2-\uFBC2\uFF3E\uFF40\uFFE3", + "astral": "\uD83C[\uDFFB-\uDFFF]" + }, + { + "name": "Sm", + "alias": "Math_Symbol", + "bmp": "\\+<->\\|~\xAC\xB1\xD7\xF7\u03F6\u0606-\u0608\u2044\u2052\u207A-\u207C\u208A-\u208C\u2118\u2140-\u2144\u214B\u2190-\u2194\u219A\u219B\u21A0\u21A3\u21A6\u21AE\u21CE\u21CF\u21D2\u21D4\u21F4-\u22FF\u2320\u2321\u237C\u239B-\u23B3\u23DC-\u23E1\u25B7\u25C1\u25F8-\u25FF\u266F\u27C0-\u27C4\u27C7-\u27E5\u27F0-\u27FF\u2900-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2AFF\u2B30-\u2B44\u2B47-\u2B4C\uFB29\uFE62\uFE64-\uFE66\uFF0B\uFF1C-\uFF1E\uFF5C\uFF5E\uFFE2\uFFE9-\uFFEC", + "astral": "\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD83B[\uDEF0\uDEF1]" + }, + { + "name": "So", + "alias": "Other_Symbol", + "bmp": "\xA6\xA9\xAE\xB0\u0482\u058D\u058E\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u09FA\u0B70\u0BF3-\u0BF8\u0BFA\u0C7F\u0D4F\u0D79\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u214A\u214C\u214D\u214F\u218A\u218B\u2195-\u2199\u219C-\u219F\u21A1\u21A2\u21A4\u21A5\u21A7-\u21AD\u21AF-\u21CD\u21D0\u21D1\u21D3\u21D5-\u21F3\u2300-\u2307\u230C-\u231F\u2322-\u2328\u232B-\u237B\u237D-\u239A\u23B4-\u23DB\u23E2-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u25B6\u25B8-\u25C0\u25C2-\u25F7\u2600-\u266E\u2670-\u2767\u2794-\u27BF\u2800-\u28FF\u2B00-\u2B2F\u2B45\u2B46\u2B4D-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA828-\uA82B\uA836\uA837\uA839\uAA77-\uAA79\uFD40-\uFD4F\uFDCF\uFDFD-\uFDFF\uFFE4\uFFE8\uFFED\uFFEE\uFFFC\uFFFD", + "astral": "\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\u{1173F}|\uD807[\uDFD5-\uDFDC\uDFE1-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\u{1BC9C}|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\u{1E14F}|\uD83B[\uDCAC\uDD2E]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFA]|\uD83D[\uDC00-\uDED7\uDEDD-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7C\uDE80-\uDE86\uDE90-\uDEAC\uDEB0-\uDEBA\uDEC0-\uDEC5\uDED0-\uDED9\uDEE0-\uDEE7\uDEF0-\uDEF6\uDF00-\uDF92\uDF94-\uDFCA]" + }, + { + "name": "Z", + "alias": "Separator", + "bmp": " \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000" + }, + { + "name": "Zl", + "alias": "Line_Separator", + "bmp": "\u2028" + }, + { + "name": "Zp", + "alias": "Paragraph_Separator", + "bmp": "\u2029" + }, + { + "name": "Zs", + "alias": "Space_Separator", + "bmp": " \xA0\u1680\u2000-\u200A\u202F\u205F\u3000" + } + ]; + } +}); + +// node_modules/xregexp/lib/addons/unicode-categories.js +var require_unicode_categories = __commonJS({ + "node_modules/xregexp/lib/addons/unicode-categories.js"(exports, module2) { + "use strict"; + var _Object$defineProperty = require_define_property3(); + var _interopRequireDefault = require_interopRequireDefault(); + _Object$defineProperty(exports, "__esModule", { + value: true + }); + exports["default"] = void 0; + var _categories = _interopRequireDefault(require_categories()); + var _default = function _default2(XRegExp3) { + if (!XRegExp3.addUnicodeData) { + throw new ReferenceError("Unicode Base must be loaded before Unicode Categories"); + } + XRegExp3.addUnicodeData(_categories["default"]); + }; + exports["default"] = _default; + module2.exports = exports.default; + } +}); + +// node_modules/xregexp/tools/output/properties.js +var require_properties = __commonJS({ + "node_modules/xregexp/tools/output/properties.js"(exports, module2) { + module2.exports = [ + { + "name": "ASCII", + "bmp": "\0-\x7F" + }, + { + "name": "Alphabetic", + "bmp": "A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0345\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05B0-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05EF-\u05F2\u0610-\u061A\u0620-\u0657\u0659-\u065F\u066E-\u06D3\u06D5-\u06DC\u06E1-\u06E8\u06ED-\u06EF\u06FA-\u06FC\u06FF\u0710-\u073F\u074D-\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0817\u081A-\u082C\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u08D4-\u08DF\u08E3-\u08E9\u08F0-\u093B\u093D-\u094C\u094E-\u0950\u0955-\u0963\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD-\u09C4\u09C7\u09C8\u09CB\u09CC\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09F0\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3E-\u0A42\u0A47\u0A48\u0A4B\u0A4C\u0A51\u0A59-\u0A5C\u0A5E\u0A70-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD-\u0AC5\u0AC7-\u0AC9\u0ACB\u0ACC\u0AD0\u0AE0-\u0AE3\u0AF9-\u0AFC\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D-\u0B44\u0B47\u0B48\u0B4B\u0B4C\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD0\u0BD7\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4C\u0C55\u0C56\u0C58-\u0C5A\u0C5D\u0C60-\u0C63\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCC\u0CD5\u0CD6\u0CDD\u0CDE\u0CE0-\u0CE3\u0CF1\u0CF2\u0D00-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4C\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D7A-\u0D7F\u0D81-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E46\u0E4D\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0ECD\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F71-\u0F81\u0F88-\u0F97\u0F99-\u0FBC\u1000-\u1036\u1038\u103B-\u103F\u1050-\u108F\u109A-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1713\u171F-\u1733\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17B3\u17B6-\u17C8\u17D7\u17DC\u1820-\u1878\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u1938\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A1B\u1A20-\u1A5E\u1A61-\u1A74\u1AA7\u1ABF\u1AC0\u1ACC-\u1ACE\u1B00-\u1B33\u1B35-\u1B43\u1B45-\u1B4C\u1B80-\u1BA9\u1BAC-\u1BAF\u1BBA-\u1BE5\u1BE7-\u1BF1\u1C00-\u1C36\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1DE7-\u1DF4\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u24B6-\u24E9\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA674-\uA67B\uA67F-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA805\uA807-\uA827\uA840-\uA873\uA880-\uA8C3\uA8C5\uA8F2-\uA8F7\uA8FB\uA8FD-\uA8FF\uA90A-\uA92A\uA930-\uA952\uA960-\uA97C\uA980-\uA9B2\uA9B4-\uA9BF\uA9CF\uA9E0-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA60-\uAA76\uAA7A-\uAABE\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF5\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABEA\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC", + "astral": "\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD27\uDE80-\uDEA9\uDEAB\uDEAC\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC00-\uDC45\uDC71-\uDC75\uDC82-\uDCB8\uDCC2\uDCD0-\uDCE8\uDD00-\uDD32\uDD44-\uDD47\uDD50-\uDD72\uDD76\uDD80-\uDDBF\uDDC1-\uDDC4\uDDCE\uDDCF\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE34\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEE8\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D-\uDF44\uDF47\uDF48\uDF4B\uDF4C\uDF50\uDF57\uDF5D-\uDF63]|\uD805[\uDC00-\uDC41\uDC43-\uDC45\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCC1\uDCC4\uDCC5\uDCC7\uDD80-\uDDB5\uDDB8-\uDDBE\uDDD8-\uDDDD\uDE00-\uDE3E\uDE40\uDE44\uDE80-\uDEB5\uDEB8\uDF00-\uDF1A\uDF1D-\uDF2A\uDF40-\uDF46]|\uD806[\uDC00-\uDC38\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD35\uDD37\uDD38\uDD3B\uDD3C\uDD3F-\uDD42\uDDA0-\uDDA7\uDDAA-\uDDD7\uDDDA-\uDDDF\uDDE1\uDDE3\uDDE4\uDE00-\uDE32\uDE35-\uDE3E\uDE50-\uDE97\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC3E\uDC40\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD41\uDD43\uDD46\uDD47\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD8E\uDD90\uDD91\uDD93-\uDD96\uDD98\uDEE0-\uDEF6\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF4F-\uDF87\uDF8F-\uDF9F\uDFE0\uDFE1\uDFE3\uDFF0\uDFF1]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9E]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD47\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD30-\uDD49\uDD50-\uDD69\uDD70-\uDD89]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]" + }, + { + "name": "Any", + "isBmpLast": true, + "bmp": "\0-\uFFFF", + "astral": "[\uD800-\uDBFF][\uDC00-\uDFFF]" + }, + { + "name": "Default_Ignorable_Code_Point", + "bmp": "\xAD\u034F\u061C\u115F\u1160\u17B4\u17B5\u180B-\u180F\u200B-\u200F\u202A-\u202E\u2060-\u206F\u3164\uFE00-\uFE0F\uFEFF\uFFA0\uFFF0-\uFFF8", + "astral": "\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|[\uDB40-\uDB43][\uDC00-\uDFFF]" + }, + { + "name": "Lowercase", + "bmp": "a-z\xAA\xB5\xBA\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02B8\u02C0\u02C1\u02E0-\u02E4\u0345\u0371\u0373\u0377\u037A-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0560-\u0588\u10D0-\u10FA\u10FD-\u10FF\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1DBF\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u2071\u207F\u2090-\u209C\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2170-\u217F\u2184\u24D0-\u24E9\u2C30-\u2C5F\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7D\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B-\uA69D\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7AF\uA7B5\uA7B7\uA7B9\uA7BB\uA7BD\uA7BF\uA7C1\uA7C3\uA7C8\uA7CA\uA7D1\uA7D3\uA7D5\uA7D7\uA7D9\uA7F6\uA7F8-\uA7FA\uAB30-\uAB5A\uAB5C-\uAB68\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A", + "astral": "\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDF80\uDF83-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD81B[\uDE60-\uDE7F]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD837[\uDF00-\uDF09\uDF0B-\uDF1E]|\uD83A[\uDD22-\uDD43]" + }, + { + "name": "Noncharacter_Code_Point", + "bmp": "\uFDD0-\uFDEF\uFFFE\uFFFF", + "astral": "[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]" + }, + { + "name": "Uppercase", + "bmp": "A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1C90-\u1CBA\u1CBD-\u1CBF\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2160-\u216F\u2183\u24B6-\u24CF\u2C00-\u2C2F\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uA7B8\uA7BA\uA7BC\uA7BE\uA7C0\uA7C2\uA7C4-\uA7C7\uA7C9\uA7D0\uA7D6\uA7D8\uA7F5\uFF21-\uFF3A", + "astral": "\uD801[\uDC00-\uDC27\uDCB0-\uDCD3\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95]|\uD803[\uDC80-\uDCB2]|\uD806[\uDCA0-\uDCBF]|\uD81B[\uDE40-\uDE5F]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD83A[\uDD00-\uDD21]|\uD83C[\uDD30-\uDD49\uDD50-\uDD69\uDD70-\uDD89]" + }, + { + "name": "White_Space", + "bmp": " -\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000" + } + ]; + } +}); + +// node_modules/xregexp/lib/addons/unicode-properties.js +var require_unicode_properties = __commonJS({ + "node_modules/xregexp/lib/addons/unicode-properties.js"(exports, module2) { + "use strict"; + var _Object$defineProperty = require_define_property3(); + var _interopRequireDefault = require_interopRequireDefault(); + _Object$defineProperty(exports, "__esModule", { + value: true + }); + exports["default"] = void 0; + var _properties = _interopRequireDefault(require_properties()); + var _default = function _default2(XRegExp3) { + if (!XRegExp3.addUnicodeData) { + throw new ReferenceError("Unicode Base must be loaded before Unicode Properties"); + } + var unicodeData = _properties["default"]; + unicodeData.push({ + name: "Assigned", + inverseOf: "Cn" + }); + XRegExp3.addUnicodeData(unicodeData); + }; + exports["default"] = _default; + module2.exports = exports.default; + } +}); + +// node_modules/xregexp/tools/output/scripts.js +var require_scripts = __commonJS({ + "node_modules/xregexp/tools/output/scripts.js"(exports, module2) { + module2.exports = [ + { + "name": "Adlam", + "astral": "\uD83A[\uDD00-\uDD4B\uDD50-\uDD59\uDD5E\uDD5F]" + }, + { + "name": "Ahom", + "astral": "\uD805[\uDF00-\uDF1A\uDF1D-\uDF2B\uDF30-\uDF46]" + }, + { + "name": "Anatolian_Hieroglyphs", + "astral": "\uD811[\uDC00-\uDE46]" + }, + { + "name": "Arabic", + "bmp": "\u0600-\u0604\u0606-\u060B\u060D-\u061A\u061C-\u061E\u0620-\u063F\u0641-\u064A\u0656-\u066F\u0671-\u06DC\u06DE-\u06FF\u0750-\u077F\u0870-\u088E\u0890\u0891\u0898-\u08E1\u08E3-\u08FF\uFB50-\uFBC2\uFBD3-\uFD3D\uFD40-\uFD8F\uFD92-\uFDC7\uFDCF\uFDF0-\uFDFF\uFE70-\uFE74\uFE76-\uFEFC", + "astral": "\uD803[\uDE60-\uDE7E]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB\uDEF0\uDEF1]" + }, + { + "name": "Armenian", + "bmp": "\u0531-\u0556\u0559-\u058A\u058D-\u058F\uFB13-\uFB17" + }, + { + "name": "Avestan", + "astral": "\uD802[\uDF00-\uDF35\uDF39-\uDF3F]" + }, + { + "name": "Balinese", + "bmp": "\u1B00-\u1B4C\u1B50-\u1B7E" + }, + { + "name": "Bamum", + "bmp": "\uA6A0-\uA6F7", + "astral": "\uD81A[\uDC00-\uDE38]" + }, + { + "name": "Bassa_Vah", + "astral": "\uD81A[\uDED0-\uDEED\uDEF0-\uDEF5]" + }, + { + "name": "Batak", + "bmp": "\u1BC0-\u1BF3\u1BFC-\u1BFF" + }, + { + "name": "Bengali", + "bmp": "\u0980-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09FE" + }, + { + "name": "Bhaiksuki", + "astral": "\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC45\uDC50-\uDC6C]" + }, + { + "name": "Bopomofo", + "bmp": "\u02EA\u02EB\u3105-\u312F\u31A0-\u31BF" + }, + { + "name": "Brahmi", + "astral": "\uD804[\uDC00-\uDC4D\uDC52-\uDC75\uDC7F]" + }, + { + "name": "Braille", + "bmp": "\u2800-\u28FF" + }, + { + "name": "Buginese", + "bmp": "\u1A00-\u1A1B\u1A1E\u1A1F" + }, + { + "name": "Buhid", + "bmp": "\u1740-\u1753" + }, + { + "name": "Canadian_Aboriginal", + "bmp": "\u1400-\u167F\u18B0-\u18F5", + "astral": "\uD806[\uDEB0-\uDEBF]" + }, + { + "name": "Carian", + "astral": "\uD800[\uDEA0-\uDED0]" + }, + { + "name": "Caucasian_Albanian", + "astral": "\uD801[\uDD30-\uDD63\uDD6F]" + }, + { + "name": "Chakma", + "astral": "\uD804[\uDD00-\uDD34\uDD36-\uDD47]" + }, + { + "name": "Cham", + "bmp": "\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA5C-\uAA5F" + }, + { + "name": "Cherokee", + "bmp": "\u13A0-\u13F5\u13F8-\u13FD\uAB70-\uABBF" + }, + { + "name": "Chorasmian", + "astral": "\uD803[\uDFB0-\uDFCB]" + }, + { + "name": "Common", + "bmp": "\0-@\\[-`\\{-\xA9\xAB-\xB9\xBB-\xBF\xD7\xF7\u02B9-\u02DF\u02E5-\u02E9\u02EC-\u02FF\u0374\u037E\u0385\u0387\u0605\u060C\u061B\u061F\u0640\u06DD\u08E2\u0964\u0965\u0E3F\u0FD5-\u0FD8\u10FB\u16EB-\u16ED\u1735\u1736\u1802\u1803\u1805\u1CD3\u1CE1\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5-\u1CF7\u1CFA\u2000-\u200B\u200E-\u2064\u2066-\u2070\u2074-\u207E\u2080-\u208E\u20A0-\u20C0\u2100-\u2125\u2127-\u2129\u212C-\u2131\u2133-\u214D\u214F-\u215F\u2189-\u218B\u2190-\u2426\u2440-\u244A\u2460-\u27FF\u2900-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2E00-\u2E5D\u2FF0-\u2FFB\u3000-\u3004\u3006\u3008-\u3020\u3030-\u3037\u303C-\u303F\u309B\u309C\u30A0\u30FB\u30FC\u3190-\u319F\u31C0-\u31E3\u3220-\u325F\u327F-\u32CF\u32FF\u3358-\u33FF\u4DC0-\u4DFF\uA700-\uA721\uA788-\uA78A\uA830-\uA839\uA92E\uA9CF\uAB5B\uAB6A\uAB6B\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFEFF\uFF01-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFF70\uFF9E\uFF9F\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFF9-\uFFFD", + "astral": "\uD800[\uDD00-\uDD02\uDD07-\uDD33\uDD37-\uDD3F\uDD90-\uDD9C\uDDD0-\uDDFC\uDEE1-\uDEFB]|\uD82F[\uDCA0-\uDCA3]|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD66\uDD6A-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDEE0-\uDEF3\uDF00-\uDF56\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDFCB\uDFCE-\uDFFF]|\uD83B[\uDC71-\uDCB4\uDD01-\uDD3D]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD00-\uDDAD\uDDE6-\uDDFF\uDE01\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEDD-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7C\uDE80-\uDE86\uDE90-\uDEAC\uDEB0-\uDEBA\uDEC0-\uDEC5\uDED0-\uDED9\uDEE0-\uDEE7\uDEF0-\uDEF6\uDF00-\uDF92\uDF94-\uDFCA\uDFF0-\uDFF9]|\uDB40[\uDC01\uDC20-\uDC7F]" + }, + { + "name": "Coptic", + "bmp": "\u03E2-\u03EF\u2C80-\u2CF3\u2CF9-\u2CFF" + }, + { + "name": "Cuneiform", + "astral": "\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC70-\uDC74\uDC80-\uDD43]" + }, + { + "name": "Cypriot", + "astral": "\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F]" + }, + { + "name": "Cypro_Minoan", + "astral": "\uD80B[\uDF90-\uDFF2]" + }, + { + "name": "Cyrillic", + "bmp": "\u0400-\u0484\u0487-\u052F\u1C80-\u1C88\u1D2B\u1D78\u2DE0-\u2DFF\uA640-\uA69F\uFE2E\uFE2F" + }, + { + "name": "Deseret", + "astral": "\uD801[\uDC00-\uDC4F]" + }, + { + "name": "Devanagari", + "bmp": "\u0900-\u0950\u0955-\u0963\u0966-\u097F\uA8E0-\uA8FF" + }, + { + "name": "Dives_Akuru", + "astral": "\uD806[\uDD00-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD35\uDD37\uDD38\uDD3B-\uDD46\uDD50-\uDD59]" + }, + { + "name": "Dogra", + "astral": "\uD806[\uDC00-\uDC3B]" + }, + { + "name": "Duployan", + "astral": "\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9C-\uDC9F]" + }, + { + "name": "Egyptian_Hieroglyphs", + "astral": "\uD80C[\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E\uDC30-\uDC38]" + }, + { + "name": "Elbasan", + "astral": "\uD801[\uDD00-\uDD27]" + }, + { + "name": "Elymaic", + "astral": "\uD803[\uDFE0-\uDFF6]" + }, + { + "name": "Ethiopic", + "bmp": "\u1200-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u137C\u1380-\u1399\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E", + "astral": "\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]" + }, + { + "name": "Georgian", + "bmp": "\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u10FF\u1C90-\u1CBA\u1CBD-\u1CBF\u2D00-\u2D25\u2D27\u2D2D" + }, + { + "name": "Glagolitic", + "bmp": "\u2C00-\u2C5F", + "astral": "\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]" + }, + { + "name": "Gothic", + "astral": "\uD800[\uDF30-\uDF4A]" + }, + { + "name": "Grantha", + "astral": "\uD804[\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]" + }, + { + "name": "Greek", + "bmp": "\u0370-\u0373\u0375-\u0377\u037A-\u037D\u037F\u0384\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03E1\u03F0-\u03FF\u1D26-\u1D2A\u1D5D-\u1D61\u1D66-\u1D6A\u1DBF\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FC4\u1FC6-\u1FD3\u1FD6-\u1FDB\u1FDD-\u1FEF\u1FF2-\u1FF4\u1FF6-\u1FFE\u2126\uAB65", + "astral": "\uD800[\uDD40-\uDD8E\uDDA0]|\uD834[\uDE00-\uDE45]" + }, + { + "name": "Gujarati", + "bmp": "\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AF1\u0AF9-\u0AFF" + }, + { + "name": "Gunjala_Gondi", + "astral": "\uD807[\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD8E\uDD90\uDD91\uDD93-\uDD98\uDDA0-\uDDA9]" + }, + { + "name": "Gurmukhi", + "bmp": "\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A76" + }, + { + "name": "Han", + "bmp": "\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFA6D\uFA70-\uFAD9", + "astral": "\uD81B[\uDFE2\uDFE3\uDFF0\uDFF1]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]" + }, + { + "name": "Hangul", + "bmp": "\u1100-\u11FF\u302E\u302F\u3131-\u318E\u3200-\u321E\u3260-\u327E\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC" + }, + { + "name": "Hanifi_Rohingya", + "astral": "\uD803[\uDD00-\uDD27\uDD30-\uDD39]" + }, + { + "name": "Hanunoo", + "bmp": "\u1720-\u1734" + }, + { + "name": "Hatran", + "astral": "\uD802[\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDCFF]" + }, + { + "name": "Hebrew", + "bmp": "\u0591-\u05C7\u05D0-\u05EA\u05EF-\u05F4\uFB1D-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFB4F" + }, + { + "name": "Hiragana", + "bmp": "\u3041-\u3096\u309D-\u309F", + "astral": "\uD82C[\uDC01-\uDD1F\uDD50-\uDD52]|\u{1F200}" + }, + { + "name": "Imperial_Aramaic", + "astral": "\uD802[\uDC40-\uDC55\uDC57-\uDC5F]" + }, + { + "name": "Inherited", + "bmp": "\u0300-\u036F\u0485\u0486\u064B-\u0655\u0670\u0951-\u0954\u1AB0-\u1ACE\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DFF\u200C\u200D\u20D0-\u20F0\u302A-\u302D\u3099\u309A\uFE00-\uFE0F\uFE20-\uFE2D", + "astral": "\uD800[\uDDFD\uDEE0]|\u{1133B}|\uD833[\uDF00-\uDF2D\uDF30-\uDF46]|\uD834[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD]|\uDB40[\uDD00-\uDDEF]" + }, + { + "name": "Inscriptional_Pahlavi", + "astral": "\uD802[\uDF60-\uDF72\uDF78-\uDF7F]" + }, + { + "name": "Inscriptional_Parthian", + "astral": "\uD802[\uDF40-\uDF55\uDF58-\uDF5F]" + }, + { + "name": "Javanese", + "bmp": "\uA980-\uA9CD\uA9D0-\uA9D9\uA9DE\uA9DF" + }, + { + "name": "Kaithi", + "astral": "\uD804[\uDC80-\uDCC2\uDCCD]" + }, + { + "name": "Kannada", + "bmp": "\u0C80-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDD\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2" + }, + { + "name": "Katakana", + "bmp": "\u30A1-\u30FA\u30FD-\u30FF\u31F0-\u31FF\u32D0-\u32FE\u3300-\u3357\uFF66-\uFF6F\uFF71-\uFF9D", + "astral": "\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00\uDD20-\uDD22\uDD64-\uDD67]" + }, + { + "name": "Kayah_Li", + "bmp": "\uA900-\uA92D\uA92F" + }, + { + "name": "Kharoshthi", + "astral": "\uD802[\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE38-\uDE3A\uDE3F-\uDE48\uDE50-\uDE58]" + }, + { + "name": "Khitan_Small_Script", + "astral": "\u{16FE4}|\uD822[\uDF00-\uDFFF]|\uD823[\uDC00-\uDCD5]" + }, + { + "name": "Khmer", + "bmp": "\u1780-\u17DD\u17E0-\u17E9\u17F0-\u17F9\u19E0-\u19FF" + }, + { + "name": "Khojki", + "astral": "\uD804[\uDE00-\uDE11\uDE13-\uDE3E]" + }, + { + "name": "Khudawadi", + "astral": "\uD804[\uDEB0-\uDEEA\uDEF0-\uDEF9]" + }, + { + "name": "Lao", + "bmp": "\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF" + }, + { + "name": "Latin", + "bmp": "A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uAB66-\uAB69\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A", + "astral": "\uD801[\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD837[\uDF00-\uDF1E]" + }, + { + "name": "Lepcha", + "bmp": "\u1C00-\u1C37\u1C3B-\u1C49\u1C4D-\u1C4F" + }, + { + "name": "Limbu", + "bmp": "\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1940\u1944-\u194F" + }, + { + "name": "Linear_A", + "astral": "\uD801[\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]" + }, + { + "name": "Linear_B", + "astral": "\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA]" + }, + { + "name": "Lisu", + "bmp": "\uA4D0-\uA4FF", + "astral": "\u{11FB0}" + }, + { + "name": "Lycian", + "astral": "\uD800[\uDE80-\uDE9C]" + }, + { + "name": "Lydian", + "astral": "\uD802[\uDD20-\uDD39\uDD3F]" + }, + { + "name": "Mahajani", + "astral": "\uD804[\uDD50-\uDD76]" + }, + { + "name": "Makasar", + "astral": "\uD807[\uDEE0-\uDEF8]" + }, + { + "name": "Malayalam", + "bmp": "\u0D00-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4F\u0D54-\u0D63\u0D66-\u0D7F" + }, + { + "name": "Mandaic", + "bmp": "\u0840-\u085B\u085E" + }, + { + "name": "Manichaean", + "astral": "\uD802[\uDEC0-\uDEE6\uDEEB-\uDEF6]" + }, + { + "name": "Marchen", + "astral": "\uD807[\uDC70-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6]" + }, + { + "name": "Masaram_Gondi", + "astral": "\uD807[\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]" + }, + { + "name": "Medefaidrin", + "astral": "\uD81B[\uDE40-\uDE9A]" + }, + { + "name": "Meetei_Mayek", + "bmp": "\uAAE0-\uAAF6\uABC0-\uABED\uABF0-\uABF9" + }, + { + "name": "Mende_Kikakui", + "astral": "\uD83A[\uDC00-\uDCC4\uDCC7-\uDCD6]" + }, + { + "name": "Meroitic_Cursive", + "astral": "\uD802[\uDDA0-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDDFF]" + }, + { + "name": "Meroitic_Hieroglyphs", + "astral": "\uD802[\uDD80-\uDD9F]" + }, + { + "name": "Miao", + "astral": "\uD81B[\uDF00-\uDF4A\uDF4F-\uDF87\uDF8F-\uDF9F]" + }, + { + "name": "Modi", + "astral": "\uD805[\uDE00-\uDE44\uDE50-\uDE59]" + }, + { + "name": "Mongolian", + "bmp": "\u1800\u1801\u1804\u1806-\u1819\u1820-\u1878\u1880-\u18AA", + "astral": "\uD805[\uDE60-\uDE6C]" + }, + { + "name": "Mro", + "astral": "\uD81A[\uDE40-\uDE5E\uDE60-\uDE69\uDE6E\uDE6F]" + }, + { + "name": "Multani", + "astral": "\uD804[\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA9]" + }, + { + "name": "Myanmar", + "bmp": "\u1000-\u109F\uA9E0-\uA9FE\uAA60-\uAA7F" + }, + { + "name": "Nabataean", + "astral": "\uD802[\uDC80-\uDC9E\uDCA7-\uDCAF]" + }, + { + "name": "Nandinagari", + "astral": "\uD806[\uDDA0-\uDDA7\uDDAA-\uDDD7\uDDDA-\uDDE4]" + }, + { + "name": "New_Tai_Lue", + "bmp": "\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u19DE\u19DF" + }, + { + "name": "Newa", + "astral": "\uD805[\uDC00-\uDC5B\uDC5D-\uDC61]" + }, + { + "name": "Nko", + "bmp": "\u07C0-\u07FA\u07FD-\u07FF" + }, + { + "name": "Nushu", + "astral": "\u{16FE1}|\uD82C[\uDD70-\uDEFB]" + }, + { + "name": "Nyiakeng_Puachue_Hmong", + "astral": "\uD838[\uDD00-\uDD2C\uDD30-\uDD3D\uDD40-\uDD49\uDD4E\uDD4F]" + }, + { + "name": "Ogham", + "bmp": "\u1680-\u169C" + }, + { + "name": "Ol_Chiki", + "bmp": "\u1C50-\u1C7F" + }, + { + "name": "Old_Hungarian", + "astral": "\uD803[\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDCFF]" + }, + { + "name": "Old_Italic", + "astral": "\uD800[\uDF00-\uDF23\uDF2D-\uDF2F]" + }, + { + "name": "Old_North_Arabian", + "astral": "\uD802[\uDE80-\uDE9F]" + }, + { + "name": "Old_Permic", + "astral": "\uD800[\uDF50-\uDF7A]" + }, + { + "name": "Old_Persian", + "astral": "\uD800[\uDFA0-\uDFC3\uDFC8-\uDFD5]" + }, + { + "name": "Old_Sogdian", + "astral": "\uD803[\uDF00-\uDF27]" + }, + { + "name": "Old_South_Arabian", + "astral": "\uD802[\uDE60-\uDE7F]" + }, + { + "name": "Old_Turkic", + "astral": "\uD803[\uDC00-\uDC48]" + }, + { + "name": "Old_Uyghur", + "astral": "\uD803[\uDF70-\uDF89]" + }, + { + "name": "Oriya", + "bmp": "\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B77" + }, + { + "name": "Osage", + "astral": "\uD801[\uDCB0-\uDCD3\uDCD8-\uDCFB]" + }, + { + "name": "Osmanya", + "astral": "\uD801[\uDC80-\uDC9D\uDCA0-\uDCA9]" + }, + { + "name": "Pahawh_Hmong", + "astral": "\uD81A[\uDF00-\uDF45\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]" + }, + { + "name": "Palmyrene", + "astral": "\uD802[\uDC60-\uDC7F]" + }, + { + "name": "Pau_Cin_Hau", + "astral": "\uD806[\uDEC0-\uDEF8]" + }, + { + "name": "Phags_Pa", + "bmp": "\uA840-\uA877" + }, + { + "name": "Phoenician", + "astral": "\uD802[\uDD00-\uDD1B\uDD1F]" + }, + { + "name": "Psalter_Pahlavi", + "astral": "\uD802[\uDF80-\uDF91\uDF99-\uDF9C\uDFA9-\uDFAF]" + }, + { + "name": "Rejang", + "bmp": "\uA930-\uA953\uA95F" + }, + { + "name": "Runic", + "bmp": "\u16A0-\u16EA\u16EE-\u16F8" + }, + { + "name": "Samaritan", + "bmp": "\u0800-\u082D\u0830-\u083E" + }, + { + "name": "Saurashtra", + "bmp": "\uA880-\uA8C5\uA8CE-\uA8D9" + }, + { + "name": "Sharada", + "astral": "\uD804[\uDD80-\uDDDF]" + }, + { + "name": "Shavian", + "astral": "\uD801[\uDC50-\uDC7F]" + }, + { + "name": "Siddham", + "astral": "\uD805[\uDD80-\uDDB5\uDDB8-\uDDDD]" + }, + { + "name": "SignWriting", + "astral": "\uD836[\uDC00-\uDE8B\uDE9B-\uDE9F\uDEA1-\uDEAF]" + }, + { + "name": "Sinhala", + "bmp": "\u0D81-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2-\u0DF4", + "astral": "\uD804[\uDDE1-\uDDF4]" + }, + { + "name": "Sogdian", + "astral": "\uD803[\uDF30-\uDF59]" + }, + { + "name": "Sora_Sompeng", + "astral": "\uD804[\uDCD0-\uDCE8\uDCF0-\uDCF9]" + }, + { + "name": "Soyombo", + "astral": "\uD806[\uDE50-\uDEA2]" + }, + { + "name": "Sundanese", + "bmp": "\u1B80-\u1BBF\u1CC0-\u1CC7" + }, + { + "name": "Syloti_Nagri", + "bmp": "\uA800-\uA82C" + }, + { + "name": "Syriac", + "bmp": "\u0700-\u070D\u070F-\u074A\u074D-\u074F\u0860-\u086A" + }, + { + "name": "Tagalog", + "bmp": "\u1700-\u1715\u171F" + }, + { + "name": "Tagbanwa", + "bmp": "\u1760-\u176C\u176E-\u1770\u1772\u1773" + }, + { + "name": "Tai_Le", + "bmp": "\u1950-\u196D\u1970-\u1974" + }, + { + "name": "Tai_Tham", + "bmp": "\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA0-\u1AAD" + }, + { + "name": "Tai_Viet", + "bmp": "\uAA80-\uAAC2\uAADB-\uAADF" + }, + { + "name": "Takri", + "astral": "\uD805[\uDE80-\uDEB9\uDEC0-\uDEC9]" + }, + { + "name": "Tamil", + "bmp": "\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BFA", + "astral": "\uD807[\uDFC0-\uDFF1\uDFFF]" + }, + { + "name": "Tangsa", + "astral": "\uD81A[\uDE70-\uDEBE\uDEC0-\uDEC9]" + }, + { + "name": "Tangut", + "astral": "\u{16FE0}|[\uD81C-\uD820][\uDC00-\uDFFF]|\uD821[\uDC00-\uDFF7]|\uD822[\uDC00-\uDEFF]|\uD823[\uDD00-\uDD08]" + }, + { + "name": "Telugu", + "bmp": "\u0C00-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3C-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C5D\u0C60-\u0C63\u0C66-\u0C6F\u0C77-\u0C7F" + }, + { + "name": "Thaana", + "bmp": "\u0780-\u07B1" + }, + { + "name": "Thai", + "bmp": "\u0E01-\u0E3A\u0E40-\u0E5B" + }, + { + "name": "Tibetan", + "bmp": "\u0F00-\u0F47\u0F49-\u0F6C\u0F71-\u0F97\u0F99-\u0FBC\u0FBE-\u0FCC\u0FCE-\u0FD4\u0FD9\u0FDA" + }, + { + "name": "Tifinagh", + "bmp": "\u2D30-\u2D67\u2D6F\u2D70\u2D7F" + }, + { + "name": "Tirhuta", + "astral": "\uD805[\uDC80-\uDCC7\uDCD0-\uDCD9]" + }, + { + "name": "Toto", + "astral": "\uD838[\uDE90-\uDEAE]" + }, + { + "name": "Ugaritic", + "astral": "\uD800[\uDF80-\uDF9D\uDF9F]" + }, + { + "name": "Vai", + "bmp": "\uA500-\uA62B" + }, + { + "name": "Vithkuqi", + "astral": "\uD801[\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC]" + }, + { + "name": "Wancho", + "astral": "\uD838[\uDEC0-\uDEF9\uDEFF]" + }, + { + "name": "Warang_Citi", + "astral": "\uD806[\uDCA0-\uDCF2\uDCFF]" + }, + { + "name": "Yezidi", + "astral": "\uD803[\uDE80-\uDEA9\uDEAB-\uDEAD\uDEB0\uDEB1]" + }, + { + "name": "Yi", + "bmp": "\uA000-\uA48C\uA490-\uA4C6" + }, + { + "name": "Zanabazar_Square", + "astral": "\uD806[\uDE00-\uDE47]" + } + ]; + } +}); + +// node_modules/xregexp/lib/addons/unicode-scripts.js +var require_unicode_scripts = __commonJS({ + "node_modules/xregexp/lib/addons/unicode-scripts.js"(exports, module2) { + "use strict"; + var _Object$defineProperty = require_define_property3(); + var _interopRequireDefault = require_interopRequireDefault(); + _Object$defineProperty(exports, "__esModule", { + value: true + }); + exports["default"] = void 0; + var _scripts = _interopRequireDefault(require_scripts()); + var _default = function _default2(XRegExp3) { + if (!XRegExp3.addUnicodeData) { + throw new ReferenceError("Unicode Base must be loaded before Unicode Scripts"); + } + XRegExp3.addUnicodeData(_scripts["default"], "Script"); + }; + exports["default"] = _default; + module2.exports = exports.default; + } +}); + +// node_modules/xregexp/lib/index.js +var require_lib = __commonJS({ + "node_modules/xregexp/lib/index.js"(exports, module2) { + "use strict"; + var _Object$defineProperty = require_define_property3(); + var _interopRequireDefault = require_interopRequireDefault(); + _Object$defineProperty(exports, "__esModule", { + value: true + }); + exports["default"] = void 0; + var _xregexp = _interopRequireDefault(require_xregexp()); + var _build = _interopRequireDefault(require_build()); + var _matchrecursive = _interopRequireDefault(require_matchrecursive()); + var _unicodeBase = _interopRequireDefault(require_unicode_base()); + var _unicodeCategories = _interopRequireDefault(require_unicode_categories()); + var _unicodeProperties = _interopRequireDefault(require_unicode_properties()); + var _unicodeScripts = _interopRequireDefault(require_unicode_scripts()); + (0, _build["default"])(_xregexp["default"]); + (0, _matchrecursive["default"])(_xregexp["default"]); + (0, _unicodeBase["default"])(_xregexp["default"]); + (0, _unicodeCategories["default"])(_xregexp["default"]); + (0, _unicodeProperties["default"])(_xregexp["default"]); + (0, _unicodeScripts["default"])(_xregexp["default"]); + var _default = _xregexp["default"]; + exports["default"] = _default; + module2.exports = exports.default; + } +}); + +// main.ts +var main_exports = {}; +__export(main_exports, { + BulkRenameSettingsTab: () => BulkRenameSettingsTab, + default: () => main_default +}); +module.exports = __toCommonJS(main_exports); +var import_obsidian5 = require("obsidian"); + +// src/suggestions/folderSuggest.ts +var import_obsidian2 = require("obsidian"); + +// src/suggestions/suggest.ts +var import_obsidian = require("obsidian"); + +// node_modules/@popperjs/core/lib/enums.js +var top = "top"; +var bottom = "bottom"; +var right = "right"; +var left = "left"; +var auto = "auto"; +var basePlacements = [top, bottom, right, left]; +var start = "start"; +var end = "end"; +var clippingParents = "clippingParents"; +var viewport = "viewport"; +var popper = "popper"; +var reference = "reference"; +var variationPlacements = /* @__PURE__ */ basePlacements.reduce(function(acc, placement) { + return acc.concat([placement + "-" + start, placement + "-" + end]); +}, []); +var placements = /* @__PURE__ */ [].concat(basePlacements, [auto]).reduce(function(acc, placement) { + return acc.concat([placement, placement + "-" + start, placement + "-" + end]); +}, []); +var beforeRead = "beforeRead"; +var read = "read"; +var afterRead = "afterRead"; +var beforeMain = "beforeMain"; +var main = "main"; +var afterMain = "afterMain"; +var beforeWrite = "beforeWrite"; +var write = "write"; +var afterWrite = "afterWrite"; +var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; + +// node_modules/@popperjs/core/lib/dom-utils/getNodeName.js +function getNodeName(element) { + return element ? (element.nodeName || "").toLowerCase() : null; +} + +// node_modules/@popperjs/core/lib/dom-utils/getWindow.js +function getWindow(node) { + if (node == null) { + return window; + } + if (node.toString() !== "[object Window]") { + var ownerDocument = node.ownerDocument; + return ownerDocument ? ownerDocument.defaultView || window : window; + } + return node; +} + +// node_modules/@popperjs/core/lib/dom-utils/instanceOf.js +function isElement(node) { + var OwnElement = getWindow(node).Element; + return node instanceof OwnElement || node instanceof Element; +} +function isHTMLElement(node) { + var OwnElement = getWindow(node).HTMLElement; + return node instanceof OwnElement || node instanceof HTMLElement; +} +function isShadowRoot(node) { + if (typeof ShadowRoot === "undefined") { + return false; + } + var OwnElement = getWindow(node).ShadowRoot; + return node instanceof OwnElement || node instanceof ShadowRoot; +} + +// node_modules/@popperjs/core/lib/modifiers/applyStyles.js +function applyStyles(_ref) { + var state = _ref.state; + Object.keys(state.elements).forEach(function(name) { + var style = state.styles[name] || {}; + var attributes = state.attributes[name] || {}; + var element = state.elements[name]; + if (!isHTMLElement(element) || !getNodeName(element)) { + return; + } + Object.assign(element.style, style); + Object.keys(attributes).forEach(function(name2) { + var value = attributes[name2]; + if (value === false) { + element.removeAttribute(name2); + } else { + element.setAttribute(name2, value === true ? "" : value); + } + }); + }); +} +function effect(_ref2) { + var state = _ref2.state; + var initialStyles = { + popper: { + position: state.options.strategy, + left: "0", + top: "0", + margin: "0" + }, + arrow: { + position: "absolute" + }, + reference: {} + }; + Object.assign(state.elements.popper.style, initialStyles.popper); + state.styles = initialStyles; + if (state.elements.arrow) { + Object.assign(state.elements.arrow.style, initialStyles.arrow); + } + return function() { + Object.keys(state.elements).forEach(function(name) { + var element = state.elements[name]; + var attributes = state.attributes[name] || {}; + var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); + var style = styleProperties.reduce(function(style2, property) { + style2[property] = ""; + return style2; + }, {}); + if (!isHTMLElement(element) || !getNodeName(element)) { + return; + } + Object.assign(element.style, style); + Object.keys(attributes).forEach(function(attribute) { + element.removeAttribute(attribute); + }); + }); + }; +} +var applyStyles_default = { + name: "applyStyles", + enabled: true, + phase: "write", + fn: applyStyles, + effect, + requires: ["computeStyles"] +}; + +// node_modules/@popperjs/core/lib/utils/getBasePlacement.js +function getBasePlacement(placement) { + return placement.split("-")[0]; +} + +// node_modules/@popperjs/core/lib/utils/math.js +var max = Math.max; +var min = Math.min; +var round = Math.round; + +// node_modules/@popperjs/core/lib/utils/userAgent.js +function getUAString() { + var uaData = navigator.userAgentData; + if (uaData != null && uaData.brands) { + return uaData.brands.map(function(item) { + return item.brand + "/" + item.version; + }).join(" "); + } + return navigator.userAgent; +} + +// node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js +function isLayoutViewport() { + return !/^((?!chrome|android).)*safari/i.test(getUAString()); +} + +// node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js +function getBoundingClientRect(element, includeScale, isFixedStrategy) { + if (includeScale === void 0) { + includeScale = false; + } + if (isFixedStrategy === void 0) { + isFixedStrategy = false; + } + var clientRect = element.getBoundingClientRect(); + var scaleX = 1; + var scaleY = 1; + if (includeScale && isHTMLElement(element)) { + scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1; + scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1; + } + var _ref = isElement(element) ? getWindow(element) : window, visualViewport = _ref.visualViewport; + var addVisualOffsets = !isLayoutViewport() && isFixedStrategy; + var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX; + var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY; + var width = clientRect.width / scaleX; + var height = clientRect.height / scaleY; + return { + width, + height, + top: y, + right: x + width, + bottom: y + height, + left: x, + x, + y + }; +} + +// node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js +function getLayoutRect(element) { + var clientRect = getBoundingClientRect(element); + var width = element.offsetWidth; + var height = element.offsetHeight; + if (Math.abs(clientRect.width - width) <= 1) { + width = clientRect.width; + } + if (Math.abs(clientRect.height - height) <= 1) { + height = clientRect.height; + } + return { + x: element.offsetLeft, + y: element.offsetTop, + width, + height + }; +} + +// node_modules/@popperjs/core/lib/dom-utils/contains.js +function contains(parent, child) { + var rootNode = child.getRootNode && child.getRootNode(); + if (parent.contains(child)) { + return true; + } else if (rootNode && isShadowRoot(rootNode)) { + var next = child; + do { + if (next && parent.isSameNode(next)) { + return true; + } + next = next.parentNode || next.host; + } while (next); + } + return false; +} + +// node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js +function getComputedStyle(element) { + return getWindow(element).getComputedStyle(element); +} + +// node_modules/@popperjs/core/lib/dom-utils/isTableElement.js +function isTableElement(element) { + return ["table", "td", "th"].indexOf(getNodeName(element)) >= 0; +} + +// node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js +function getDocumentElement(element) { + return ((isElement(element) ? element.ownerDocument : element.document) || window.document).documentElement; +} + +// node_modules/@popperjs/core/lib/dom-utils/getParentNode.js +function getParentNode(element) { + if (getNodeName(element) === "html") { + return element; + } + return element.assignedSlot || element.parentNode || (isShadowRoot(element) ? element.host : null) || getDocumentElement(element); +} + +// node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js +function getTrueOffsetParent(element) { + if (!isHTMLElement(element) || getComputedStyle(element).position === "fixed") { + return null; + } + return element.offsetParent; +} +function getContainingBlock(element) { + var isFirefox = /firefox/i.test(getUAString()); + var isIE = /Trident/i.test(getUAString()); + if (isIE && isHTMLElement(element)) { + var elementCss = getComputedStyle(element); + if (elementCss.position === "fixed") { + return null; + } + } + var currentNode = getParentNode(element); + if (isShadowRoot(currentNode)) { + currentNode = currentNode.host; + } + while (isHTMLElement(currentNode) && ["html", "body"].indexOf(getNodeName(currentNode)) < 0) { + var css = getComputedStyle(currentNode); + if (css.transform !== "none" || css.perspective !== "none" || css.contain === "paint" || ["transform", "perspective"].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === "filter" || isFirefox && css.filter && css.filter !== "none") { + return currentNode; + } else { + currentNode = currentNode.parentNode; + } + } + return null; +} +function getOffsetParent(element) { + var window2 = getWindow(element); + var offsetParent = getTrueOffsetParent(element); + while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === "static") { + offsetParent = getTrueOffsetParent(offsetParent); + } + if (offsetParent && (getNodeName(offsetParent) === "html" || getNodeName(offsetParent) === "body" && getComputedStyle(offsetParent).position === "static")) { + return window2; + } + return offsetParent || getContainingBlock(element) || window2; +} + +// node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js +function getMainAxisFromPlacement(placement) { + return ["top", "bottom"].indexOf(placement) >= 0 ? "x" : "y"; +} + +// node_modules/@popperjs/core/lib/utils/within.js +function within(min2, value, max2) { + return max(min2, min(value, max2)); +} +function withinMaxClamp(min2, value, max2) { + var v = within(min2, value, max2); + return v > max2 ? max2 : v; +} + +// node_modules/@popperjs/core/lib/utils/getFreshSideObject.js +function getFreshSideObject() { + return { + top: 0, + right: 0, + bottom: 0, + left: 0 + }; +} + +// node_modules/@popperjs/core/lib/utils/mergePaddingObject.js +function mergePaddingObject(paddingObject) { + return Object.assign({}, getFreshSideObject(), paddingObject); +} + +// node_modules/@popperjs/core/lib/utils/expandToHashMap.js +function expandToHashMap(value, keys) { + return keys.reduce(function(hashMap, key) { + hashMap[key] = value; + return hashMap; + }, {}); +} + +// node_modules/@popperjs/core/lib/modifiers/arrow.js +var toPaddingObject = function toPaddingObject2(padding, state) { + padding = typeof padding === "function" ? padding(Object.assign({}, state.rects, { + placement: state.placement + })) : padding; + return mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements)); +}; +function arrow(_ref) { + var _state$modifiersData$; + var state = _ref.state, name = _ref.name, options = _ref.options; + var arrowElement = state.elements.arrow; + var popperOffsets2 = state.modifiersData.popperOffsets; + var basePlacement = getBasePlacement(state.placement); + var axis = getMainAxisFromPlacement(basePlacement); + var isVertical = [left, right].indexOf(basePlacement) >= 0; + var len = isVertical ? "height" : "width"; + if (!arrowElement || !popperOffsets2) { + return; + } + var paddingObject = toPaddingObject(options.padding, state); + var arrowRect = getLayoutRect(arrowElement); + var minProp = axis === "y" ? top : left; + var maxProp = axis === "y" ? bottom : right; + var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets2[axis] - state.rects.popper[len]; + var startDiff = popperOffsets2[axis] - state.rects.reference[axis]; + var arrowOffsetParent = getOffsetParent(arrowElement); + var clientSize = arrowOffsetParent ? axis === "y" ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; + var centerToReference = endDiff / 2 - startDiff / 2; + var min2 = paddingObject[minProp]; + var max2 = clientSize - arrowRect[len] - paddingObject[maxProp]; + var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; + var offset2 = within(min2, center, max2); + var axisProp = axis; + state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset2, _state$modifiersData$.centerOffset = offset2 - center, _state$modifiersData$); +} +function effect2(_ref2) { + var state = _ref2.state, options = _ref2.options; + var _options$element = options.element, arrowElement = _options$element === void 0 ? "[data-popper-arrow]" : _options$element; + if (arrowElement == null) { + return; + } + if (typeof arrowElement === "string") { + arrowElement = state.elements.popper.querySelector(arrowElement); + if (!arrowElement) { + return; + } + } + if (true) { + if (!isHTMLElement(arrowElement)) { + console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', "To use an SVG arrow, wrap it in an HTMLElement that will be used as", "the arrow."].join(" ")); + } + } + if (!contains(state.elements.popper, arrowElement)) { + if (true) { + console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', "element."].join(" ")); + } + return; + } + state.elements.arrow = arrowElement; +} +var arrow_default = { + name: "arrow", + enabled: true, + phase: "main", + fn: arrow, + effect: effect2, + requires: ["popperOffsets"], + requiresIfExists: ["preventOverflow"] +}; + +// node_modules/@popperjs/core/lib/utils/getVariation.js +function getVariation(placement) { + return placement.split("-")[1]; +} + +// node_modules/@popperjs/core/lib/modifiers/computeStyles.js +var unsetSides = { + top: "auto", + right: "auto", + bottom: "auto", + left: "auto" +}; +function roundOffsetsByDPR(_ref) { + var x = _ref.x, y = _ref.y; + var win = window; + var dpr = win.devicePixelRatio || 1; + return { + x: round(x * dpr) / dpr || 0, + y: round(y * dpr) / dpr || 0 + }; +} +function mapToStyles(_ref2) { + var _Object$assign2; + var popper2 = _ref2.popper, popperRect = _ref2.popperRect, placement = _ref2.placement, variation = _ref2.variation, offsets = _ref2.offsets, position = _ref2.position, gpuAcceleration = _ref2.gpuAcceleration, adaptive = _ref2.adaptive, roundOffsets = _ref2.roundOffsets, isFixed = _ref2.isFixed; + var _offsets$x = offsets.x, x = _offsets$x === void 0 ? 0 : _offsets$x, _offsets$y = offsets.y, y = _offsets$y === void 0 ? 0 : _offsets$y; + var _ref3 = typeof roundOffsets === "function" ? roundOffsets({ + x, + y + }) : { + x, + y + }; + x = _ref3.x; + y = _ref3.y; + var hasX = offsets.hasOwnProperty("x"); + var hasY = offsets.hasOwnProperty("y"); + var sideX = left; + var sideY = top; + var win = window; + if (adaptive) { + var offsetParent = getOffsetParent(popper2); + var heightProp = "clientHeight"; + var widthProp = "clientWidth"; + if (offsetParent === getWindow(popper2)) { + offsetParent = getDocumentElement(popper2); + if (getComputedStyle(offsetParent).position !== "static" && position === "absolute") { + heightProp = "scrollHeight"; + widthProp = "scrollWidth"; + } + } + offsetParent = offsetParent; + if (placement === top || (placement === left || placement === right) && variation === end) { + sideY = bottom; + var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : offsetParent[heightProp]; + y -= offsetY - popperRect.height; + y *= gpuAcceleration ? 1 : -1; + } + if (placement === left || (placement === top || placement === bottom) && variation === end) { + sideX = right; + var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : offsetParent[widthProp]; + x -= offsetX - popperRect.width; + x *= gpuAcceleration ? 1 : -1; + } + } + var commonStyles = Object.assign({ + position + }, adaptive && unsetSides); + var _ref4 = roundOffsets === true ? roundOffsetsByDPR({ + x, + y + }) : { + x, + y + }; + x = _ref4.x; + y = _ref4.y; + if (gpuAcceleration) { + var _Object$assign; + return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? "0" : "", _Object$assign[sideX] = hasX ? "0" : "", _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign)); + } + return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : "", _Object$assign2[sideX] = hasX ? x + "px" : "", _Object$assign2.transform = "", _Object$assign2)); +} +function computeStyles(_ref5) { + var state = _ref5.state, options = _ref5.options; + var _options$gpuAccelerat = options.gpuAcceleration, gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, _options$adaptive = options.adaptive, adaptive = _options$adaptive === void 0 ? true : _options$adaptive, _options$roundOffsets = options.roundOffsets, roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; + if (true) { + var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || ""; + if (adaptive && ["transform", "top", "right", "bottom", "left"].some(function(property) { + return transitionProperty.indexOf(property) >= 0; + })) { + console.warn(["Popper: Detected CSS transitions on at least one of the following", 'CSS properties: "transform", "top", "right", "bottom", "left".', "\n\n", 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', "for smooth transitions, or remove these properties from the CSS", "transition declaration on the popper element if only transitioning", "opacity or background-color for example.", "\n\n", "We recommend using the popper element as a wrapper around an inner", "element that can have any CSS property transitioned for animations."].join(" ")); + } + } + var commonStyles = { + placement: getBasePlacement(state.placement), + variation: getVariation(state.placement), + popper: state.elements.popper, + popperRect: state.rects.popper, + gpuAcceleration, + isFixed: state.options.strategy === "fixed" + }; + if (state.modifiersData.popperOffsets != null) { + state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { + offsets: state.modifiersData.popperOffsets, + position: state.options.strategy, + adaptive, + roundOffsets + }))); + } + if (state.modifiersData.arrow != null) { + state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { + offsets: state.modifiersData.arrow, + position: "absolute", + adaptive: false, + roundOffsets + }))); + } + state.attributes.popper = Object.assign({}, state.attributes.popper, { + "data-popper-placement": state.placement + }); +} +var computeStyles_default = { + name: "computeStyles", + enabled: true, + phase: "beforeWrite", + fn: computeStyles, + data: {} +}; + +// node_modules/@popperjs/core/lib/modifiers/eventListeners.js +var passive = { + passive: true +}; +function effect3(_ref) { + var state = _ref.state, instance = _ref.instance, options = _ref.options; + var _options$scroll = options.scroll, scroll = _options$scroll === void 0 ? true : _options$scroll, _options$resize = options.resize, resize = _options$resize === void 0 ? true : _options$resize; + var window2 = getWindow(state.elements.popper); + var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); + if (scroll) { + scrollParents.forEach(function(scrollParent) { + scrollParent.addEventListener("scroll", instance.update, passive); + }); + } + if (resize) { + window2.addEventListener("resize", instance.update, passive); + } + return function() { + if (scroll) { + scrollParents.forEach(function(scrollParent) { + scrollParent.removeEventListener("scroll", instance.update, passive); + }); + } + if (resize) { + window2.removeEventListener("resize", instance.update, passive); + } + }; +} +var eventListeners_default = { + name: "eventListeners", + enabled: true, + phase: "write", + fn: function fn() { + }, + effect: effect3, + data: {} +}; + +// node_modules/@popperjs/core/lib/utils/getOppositePlacement.js +var hash = { + left: "right", + right: "left", + bottom: "top", + top: "bottom" +}; +function getOppositePlacement(placement) { + return placement.replace(/left|right|bottom|top/g, function(matched) { + return hash[matched]; + }); +} + +// node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js +var hash2 = { + start: "end", + end: "start" +}; +function getOppositeVariationPlacement(placement) { + return placement.replace(/start|end/g, function(matched) { + return hash2[matched]; + }); +} + +// node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js +function getWindowScroll(node) { + var win = getWindow(node); + var scrollLeft = win.pageXOffset; + var scrollTop = win.pageYOffset; + return { + scrollLeft, + scrollTop + }; +} + +// node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js +function getWindowScrollBarX(element) { + return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft; +} + +// node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js +function getViewportRect(element, strategy) { + var win = getWindow(element); + var html = getDocumentElement(element); + var visualViewport = win.visualViewport; + var width = html.clientWidth; + var height = html.clientHeight; + var x = 0; + var y = 0; + if (visualViewport) { + width = visualViewport.width; + height = visualViewport.height; + var layoutViewport = isLayoutViewport(); + if (layoutViewport || !layoutViewport && strategy === "fixed") { + x = visualViewport.offsetLeft; + y = visualViewport.offsetTop; + } + } + return { + width, + height, + x: x + getWindowScrollBarX(element), + y + }; +} + +// node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js +function getDocumentRect(element) { + var _element$ownerDocumen; + var html = getDocumentElement(element); + var winScroll = getWindowScroll(element); + var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; + var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); + var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); + var x = -winScroll.scrollLeft + getWindowScrollBarX(element); + var y = -winScroll.scrollTop; + if (getComputedStyle(body || html).direction === "rtl") { + x += max(html.clientWidth, body ? body.clientWidth : 0) - width; + } + return { + width, + height, + x, + y + }; +} + +// node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js +function isScrollParent(element) { + var _getComputedStyle = getComputedStyle(element), overflow = _getComputedStyle.overflow, overflowX = _getComputedStyle.overflowX, overflowY = _getComputedStyle.overflowY; + return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); +} + +// node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js +function getScrollParent(node) { + if (["html", "body", "#document"].indexOf(getNodeName(node)) >= 0) { + return node.ownerDocument.body; + } + if (isHTMLElement(node) && isScrollParent(node)) { + return node; + } + return getScrollParent(getParentNode(node)); +} + +// node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js +function listScrollParents(element, list) { + var _element$ownerDocumen; + if (list === void 0) { + list = []; + } + var scrollParent = getScrollParent(element); + var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); + var win = getWindow(scrollParent); + var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent; + var updatedList = list.concat(target); + return isBody ? updatedList : updatedList.concat(listScrollParents(getParentNode(target))); +} + +// node_modules/@popperjs/core/lib/utils/rectToClientRect.js +function rectToClientRect(rect) { + return Object.assign({}, rect, { + left: rect.x, + top: rect.y, + right: rect.x + rect.width, + bottom: rect.y + rect.height + }); +} + +// node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js +function getInnerBoundingClientRect(element, strategy) { + var rect = getBoundingClientRect(element, false, strategy === "fixed"); + rect.top = rect.top + element.clientTop; + rect.left = rect.left + element.clientLeft; + rect.bottom = rect.top + element.clientHeight; + rect.right = rect.left + element.clientWidth; + rect.width = element.clientWidth; + rect.height = element.clientHeight; + rect.x = rect.left; + rect.y = rect.top; + return rect; +} +function getClientRectFromMixedType(element, clippingParent, strategy) { + return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element))); +} +function getClippingParents(element) { + var clippingParents2 = listScrollParents(getParentNode(element)); + var canEscapeClipping = ["absolute", "fixed"].indexOf(getComputedStyle(element).position) >= 0; + var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element; + if (!isElement(clipperElement)) { + return []; + } + return clippingParents2.filter(function(clippingParent) { + return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== "body"; + }); +} +function getClippingRect(element, boundary, rootBoundary, strategy) { + var mainClippingParents = boundary === "clippingParents" ? getClippingParents(element) : [].concat(boundary); + var clippingParents2 = [].concat(mainClippingParents, [rootBoundary]); + var firstClippingParent = clippingParents2[0]; + var clippingRect = clippingParents2.reduce(function(accRect, clippingParent) { + var rect = getClientRectFromMixedType(element, clippingParent, strategy); + accRect.top = max(rect.top, accRect.top); + accRect.right = min(rect.right, accRect.right); + accRect.bottom = min(rect.bottom, accRect.bottom); + accRect.left = max(rect.left, accRect.left); + return accRect; + }, getClientRectFromMixedType(element, firstClippingParent, strategy)); + clippingRect.width = clippingRect.right - clippingRect.left; + clippingRect.height = clippingRect.bottom - clippingRect.top; + clippingRect.x = clippingRect.left; + clippingRect.y = clippingRect.top; + return clippingRect; +} + +// node_modules/@popperjs/core/lib/utils/computeOffsets.js +function computeOffsets(_ref) { + var reference2 = _ref.reference, element = _ref.element, placement = _ref.placement; + var basePlacement = placement ? getBasePlacement(placement) : null; + var variation = placement ? getVariation(placement) : null; + var commonX = reference2.x + reference2.width / 2 - element.width / 2; + var commonY = reference2.y + reference2.height / 2 - element.height / 2; + var offsets; + switch (basePlacement) { + case top: + offsets = { + x: commonX, + y: reference2.y - element.height + }; + break; + case bottom: + offsets = { + x: commonX, + y: reference2.y + reference2.height + }; + break; + case right: + offsets = { + x: reference2.x + reference2.width, + y: commonY + }; + break; + case left: + offsets = { + x: reference2.x - element.width, + y: commonY + }; + break; + default: + offsets = { + x: reference2.x, + y: reference2.y + }; + } + var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null; + if (mainAxis != null) { + var len = mainAxis === "y" ? "height" : "width"; + switch (variation) { + case start: + offsets[mainAxis] = offsets[mainAxis] - (reference2[len] / 2 - element[len] / 2); + break; + case end: + offsets[mainAxis] = offsets[mainAxis] + (reference2[len] / 2 - element[len] / 2); + break; + default: + } + } + return offsets; +} + +// node_modules/@popperjs/core/lib/utils/detectOverflow.js +function detectOverflow(state, options) { + if (options === void 0) { + options = {}; + } + var _options = options, _options$placement = _options.placement, placement = _options$placement === void 0 ? state.placement : _options$placement, _options$strategy = _options.strategy, strategy = _options$strategy === void 0 ? state.strategy : _options$strategy, _options$boundary = _options.boundary, boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, _options$rootBoundary = _options.rootBoundary, rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, _options$elementConte = _options.elementContext, elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, _options$altBoundary = _options.altBoundary, altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, _options$padding = _options.padding, padding = _options$padding === void 0 ? 0 : _options$padding; + var paddingObject = mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements)); + var altContext = elementContext === popper ? reference : popper; + var popperRect = state.rects.popper; + var element = state.elements[altBoundary ? altContext : elementContext]; + var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy); + var referenceClientRect = getBoundingClientRect(state.elements.reference); + var popperOffsets2 = computeOffsets({ + reference: referenceClientRect, + element: popperRect, + strategy: "absolute", + placement + }); + var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets2)); + var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; + var overflowOffsets = { + top: clippingClientRect.top - elementClientRect.top + paddingObject.top, + bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, + left: clippingClientRect.left - elementClientRect.left + paddingObject.left, + right: elementClientRect.right - clippingClientRect.right + paddingObject.right + }; + var offsetData = state.modifiersData.offset; + if (elementContext === popper && offsetData) { + var offset2 = offsetData[placement]; + Object.keys(overflowOffsets).forEach(function(key) { + var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1; + var axis = [top, bottom].indexOf(key) >= 0 ? "y" : "x"; + overflowOffsets[key] += offset2[axis] * multiply; + }); + } + return overflowOffsets; +} + +// node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js +function computeAutoPlacement(state, options) { + if (options === void 0) { + options = {}; + } + var _options = options, placement = _options.placement, boundary = _options.boundary, rootBoundary = _options.rootBoundary, padding = _options.padding, flipVariations = _options.flipVariations, _options$allowedAutoP = _options.allowedAutoPlacements, allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP; + var variation = getVariation(placement); + var placements2 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function(placement2) { + return getVariation(placement2) === variation; + }) : basePlacements; + var allowedPlacements = placements2.filter(function(placement2) { + return allowedAutoPlacements.indexOf(placement2) >= 0; + }); + if (allowedPlacements.length === 0) { + allowedPlacements = placements2; + if (true) { + console.error(["Popper: The `allowedAutoPlacements` option did not allow any", "placements. Ensure the `placement` option matches the variation", "of the allowed placements.", 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(" ")); + } + } + var overflows = allowedPlacements.reduce(function(acc, placement2) { + acc[placement2] = detectOverflow(state, { + placement: placement2, + boundary, + rootBoundary, + padding + })[getBasePlacement(placement2)]; + return acc; + }, {}); + return Object.keys(overflows).sort(function(a, b) { + return overflows[a] - overflows[b]; + }); +} + +// node_modules/@popperjs/core/lib/modifiers/flip.js +function getExpandedFallbackPlacements(placement) { + if (getBasePlacement(placement) === auto) { + return []; + } + var oppositePlacement = getOppositePlacement(placement); + return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)]; +} +function flip(_ref) { + var state = _ref.state, options = _ref.options, name = _ref.name; + if (state.modifiersData[name]._skip) { + return; + } + var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, specifiedFallbackPlacements = options.fallbackPlacements, padding = options.padding, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, _options$flipVariatio = options.flipVariations, flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, allowedAutoPlacements = options.allowedAutoPlacements; + var preferredPlacement = state.options.placement; + var basePlacement = getBasePlacement(preferredPlacement); + var isBasePlacement = basePlacement === preferredPlacement; + var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); + var placements2 = [preferredPlacement].concat(fallbackPlacements).reduce(function(acc, placement2) { + return acc.concat(getBasePlacement(placement2) === auto ? computeAutoPlacement(state, { + placement: placement2, + boundary, + rootBoundary, + padding, + flipVariations, + allowedAutoPlacements + }) : placement2); + }, []); + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var checksMap = /* @__PURE__ */ new Map(); + var makeFallbackChecks = true; + var firstFittingPlacement = placements2[0]; + for (var i = 0; i < placements2.length; i++) { + var placement = placements2[i]; + var _basePlacement = getBasePlacement(placement); + var isStartVariation = getVariation(placement) === start; + var isVertical = [top, bottom].indexOf(_basePlacement) >= 0; + var len = isVertical ? "width" : "height"; + var overflow = detectOverflow(state, { + placement, + boundary, + rootBoundary, + altBoundary, + padding + }); + var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top; + if (referenceRect[len] > popperRect[len]) { + mainVariationSide = getOppositePlacement(mainVariationSide); + } + var altVariationSide = getOppositePlacement(mainVariationSide); + var checks = []; + if (checkMainAxis) { + checks.push(overflow[_basePlacement] <= 0); + } + if (checkAltAxis) { + checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); + } + if (checks.every(function(check) { + return check; + })) { + firstFittingPlacement = placement; + makeFallbackChecks = false; + break; + } + checksMap.set(placement, checks); + } + if (makeFallbackChecks) { + var numberOfChecks = flipVariations ? 3 : 1; + var _loop = function _loop2(_i2) { + var fittingPlacement = placements2.find(function(placement2) { + var checks2 = checksMap.get(placement2); + if (checks2) { + return checks2.slice(0, _i2).every(function(check) { + return check; + }); + } + }); + if (fittingPlacement) { + firstFittingPlacement = fittingPlacement; + return "break"; + } + }; + for (var _i = numberOfChecks; _i > 0; _i--) { + var _ret = _loop(_i); + if (_ret === "break") + break; + } + } + if (state.placement !== firstFittingPlacement) { + state.modifiersData[name]._skip = true; + state.placement = firstFittingPlacement; + state.reset = true; + } +} +var flip_default = { + name: "flip", + enabled: true, + phase: "main", + fn: flip, + requiresIfExists: ["offset"], + data: { + _skip: false + } +}; + +// node_modules/@popperjs/core/lib/modifiers/hide.js +function getSideOffsets(overflow, rect, preventedOffsets) { + if (preventedOffsets === void 0) { + preventedOffsets = { + x: 0, + y: 0 + }; + } + return { + top: overflow.top - rect.height - preventedOffsets.y, + right: overflow.right - rect.width + preventedOffsets.x, + bottom: overflow.bottom - rect.height + preventedOffsets.y, + left: overflow.left - rect.width - preventedOffsets.x + }; +} +function isAnySideFullyClipped(overflow) { + return [top, right, bottom, left].some(function(side) { + return overflow[side] >= 0; + }); +} +function hide(_ref) { + var state = _ref.state, name = _ref.name; + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var preventedOffsets = state.modifiersData.preventOverflow; + var referenceOverflow = detectOverflow(state, { + elementContext: "reference" + }); + var popperAltOverflow = detectOverflow(state, { + altBoundary: true + }); + var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); + var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); + var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); + var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); + state.modifiersData[name] = { + referenceClippingOffsets, + popperEscapeOffsets, + isReferenceHidden, + hasPopperEscaped + }; + state.attributes.popper = Object.assign({}, state.attributes.popper, { + "data-popper-reference-hidden": isReferenceHidden, + "data-popper-escaped": hasPopperEscaped + }); +} +var hide_default = { + name: "hide", + enabled: true, + phase: "main", + requiresIfExists: ["preventOverflow"], + fn: hide +}; + +// node_modules/@popperjs/core/lib/modifiers/offset.js +function distanceAndSkiddingToXY(placement, rects, offset2) { + var basePlacement = getBasePlacement(placement); + var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1; + var _ref = typeof offset2 === "function" ? offset2(Object.assign({}, rects, { + placement + })) : offset2, skidding = _ref[0], distance = _ref[1]; + skidding = skidding || 0; + distance = (distance || 0) * invertDistance; + return [left, right].indexOf(basePlacement) >= 0 ? { + x: distance, + y: skidding + } : { + x: skidding, + y: distance + }; +} +function offset(_ref2) { + var state = _ref2.state, options = _ref2.options, name = _ref2.name; + var _options$offset = options.offset, offset2 = _options$offset === void 0 ? [0, 0] : _options$offset; + var data = placements.reduce(function(acc, placement) { + acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset2); + return acc; + }, {}); + var _data$state$placement = data[state.placement], x = _data$state$placement.x, y = _data$state$placement.y; + if (state.modifiersData.popperOffsets != null) { + state.modifiersData.popperOffsets.x += x; + state.modifiersData.popperOffsets.y += y; + } + state.modifiersData[name] = data; +} +var offset_default = { + name: "offset", + enabled: true, + phase: "main", + requires: ["popperOffsets"], + fn: offset +}; + +// node_modules/@popperjs/core/lib/modifiers/popperOffsets.js +function popperOffsets(_ref) { + var state = _ref.state, name = _ref.name; + state.modifiersData[name] = computeOffsets({ + reference: state.rects.reference, + element: state.rects.popper, + strategy: "absolute", + placement: state.placement + }); +} +var popperOffsets_default = { + name: "popperOffsets", + enabled: true, + phase: "read", + fn: popperOffsets, + data: {} +}; + +// node_modules/@popperjs/core/lib/utils/getAltAxis.js +function getAltAxis(axis) { + return axis === "x" ? "y" : "x"; +} + +// node_modules/@popperjs/core/lib/modifiers/preventOverflow.js +function preventOverflow(_ref) { + var state = _ref.state, options = _ref.options, name = _ref.name; + var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, padding = options.padding, _options$tether = options.tether, tether = _options$tether === void 0 ? true : _options$tether, _options$tetherOffset = options.tetherOffset, tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; + var overflow = detectOverflow(state, { + boundary, + rootBoundary, + padding, + altBoundary + }); + var basePlacement = getBasePlacement(state.placement); + var variation = getVariation(state.placement); + var isBasePlacement = !variation; + var mainAxis = getMainAxisFromPlacement(basePlacement); + var altAxis = getAltAxis(mainAxis); + var popperOffsets2 = state.modifiersData.popperOffsets; + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var tetherOffsetValue = typeof tetherOffset === "function" ? tetherOffset(Object.assign({}, state.rects, { + placement: state.placement + })) : tetherOffset; + var normalizedTetherOffsetValue = typeof tetherOffsetValue === "number" ? { + mainAxis: tetherOffsetValue, + altAxis: tetherOffsetValue + } : Object.assign({ + mainAxis: 0, + altAxis: 0 + }, tetherOffsetValue); + var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null; + var data = { + x: 0, + y: 0 + }; + if (!popperOffsets2) { + return; + } + if (checkMainAxis) { + var _offsetModifierState$; + var mainSide = mainAxis === "y" ? top : left; + var altSide = mainAxis === "y" ? bottom : right; + var len = mainAxis === "y" ? "height" : "width"; + var offset2 = popperOffsets2[mainAxis]; + var min2 = offset2 + overflow[mainSide]; + var max2 = offset2 - overflow[altSide]; + var additive = tether ? -popperRect[len] / 2 : 0; + var minLen = variation === start ? referenceRect[len] : popperRect[len]; + var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; + var arrowElement = state.elements.arrow; + var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : { + width: 0, + height: 0 + }; + var arrowPaddingObject = state.modifiersData["arrow#persistent"] ? state.modifiersData["arrow#persistent"].padding : getFreshSideObject(); + var arrowPaddingMin = arrowPaddingObject[mainSide]; + var arrowPaddingMax = arrowPaddingObject[altSide]; + var arrowLen = within(0, referenceRect[len], arrowRect[len]); + var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis; + var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis; + var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow); + var clientOffset = arrowOffsetParent ? mainAxis === "y" ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; + var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0; + var tetherMin = offset2 + minOffset - offsetModifierValue - clientOffset; + var tetherMax = offset2 + maxOffset - offsetModifierValue; + var preventedOffset = within(tether ? min(min2, tetherMin) : min2, offset2, tether ? max(max2, tetherMax) : max2); + popperOffsets2[mainAxis] = preventedOffset; + data[mainAxis] = preventedOffset - offset2; + } + if (checkAltAxis) { + var _offsetModifierState$2; + var _mainSide = mainAxis === "x" ? top : left; + var _altSide = mainAxis === "x" ? bottom : right; + var _offset = popperOffsets2[altAxis]; + var _len = altAxis === "y" ? "height" : "width"; + var _min = _offset + overflow[_mainSide]; + var _max = _offset - overflow[_altSide]; + var isOriginSide = [top, left].indexOf(basePlacement) !== -1; + var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0; + var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis; + var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max; + var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max); + popperOffsets2[altAxis] = _preventedOffset; + data[altAxis] = _preventedOffset - _offset; + } + state.modifiersData[name] = data; +} +var preventOverflow_default = { + name: "preventOverflow", + enabled: true, + phase: "main", + fn: preventOverflow, + requiresIfExists: ["offset"] +}; + +// node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js +function getHTMLElementScroll(element) { + return { + scrollLeft: element.scrollLeft, + scrollTop: element.scrollTop + }; +} + +// node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js +function getNodeScroll(node) { + if (node === getWindow(node) || !isHTMLElement(node)) { + return getWindowScroll(node); + } else { + return getHTMLElementScroll(node); + } +} + +// node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js +function isElementScaled(element) { + var rect = element.getBoundingClientRect(); + var scaleX = round(rect.width) / element.offsetWidth || 1; + var scaleY = round(rect.height) / element.offsetHeight || 1; + return scaleX !== 1 || scaleY !== 1; +} +function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { + if (isFixed === void 0) { + isFixed = false; + } + var isOffsetParentAnElement = isHTMLElement(offsetParent); + var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent); + var documentElement = getDocumentElement(offsetParent); + var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed); + var scroll = { + scrollLeft: 0, + scrollTop: 0 + }; + var offsets = { + x: 0, + y: 0 + }; + if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { + if (getNodeName(offsetParent) !== "body" || isScrollParent(documentElement)) { + scroll = getNodeScroll(offsetParent); + } + if (isHTMLElement(offsetParent)) { + offsets = getBoundingClientRect(offsetParent, true); + offsets.x += offsetParent.clientLeft; + offsets.y += offsetParent.clientTop; + } else if (documentElement) { + offsets.x = getWindowScrollBarX(documentElement); + } + } + return { + x: rect.left + scroll.scrollLeft - offsets.x, + y: rect.top + scroll.scrollTop - offsets.y, + width: rect.width, + height: rect.height + }; +} + +// node_modules/@popperjs/core/lib/utils/orderModifiers.js +function order(modifiers) { + var map = /* @__PURE__ */ new Map(); + var visited = /* @__PURE__ */ new Set(); + var result = []; + modifiers.forEach(function(modifier) { + map.set(modifier.name, modifier); + }); + function sort(modifier) { + visited.add(modifier.name); + var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); + requires.forEach(function(dep) { + if (!visited.has(dep)) { + var depModifier = map.get(dep); + if (depModifier) { + sort(depModifier); + } + } + }); + result.push(modifier); + } + modifiers.forEach(function(modifier) { + if (!visited.has(modifier.name)) { + sort(modifier); + } + }); + return result; +} +function orderModifiers(modifiers) { + var orderedModifiers = order(modifiers); + return modifierPhases.reduce(function(acc, phase) { + return acc.concat(orderedModifiers.filter(function(modifier) { + return modifier.phase === phase; + })); + }, []); +} + +// node_modules/@popperjs/core/lib/utils/debounce.js +function debounce(fn2) { + var pending; + return function() { + if (!pending) { + pending = new Promise(function(resolve) { + Promise.resolve().then(function() { + pending = void 0; + resolve(fn2()); + }); + }); + } + return pending; + }; +} + +// node_modules/@popperjs/core/lib/utils/format.js +function format(str) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + return [].concat(args).reduce(function(p, c) { + return p.replace(/%s/, c); + }, str); +} + +// node_modules/@popperjs/core/lib/utils/validateModifiers.js +var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s'; +var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available'; +var VALID_PROPERTIES = ["name", "enabled", "phase", "fn", "effect", "requires", "options"]; +function validateModifiers(modifiers) { + modifiers.forEach(function(modifier) { + [].concat(Object.keys(modifier), VALID_PROPERTIES).filter(function(value, index, self2) { + return self2.indexOf(value) === index; + }).forEach(function(key) { + switch (key) { + case "name": + if (typeof modifier.name !== "string") { + console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', '"' + String(modifier.name) + '"')); + } + break; + case "enabled": + if (typeof modifier.enabled !== "boolean") { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', '"' + String(modifier.enabled) + '"')); + } + break; + case "phase": + if (modifierPhases.indexOf(modifier.phase) < 0) { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + modifierPhases.join(", "), '"' + String(modifier.phase) + '"')); + } + break; + case "fn": + if (typeof modifier.fn !== "function") { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', '"' + String(modifier.fn) + '"')); + } + break; + case "effect": + if (modifier.effect != null && typeof modifier.effect !== "function") { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', '"' + String(modifier.fn) + '"')); + } + break; + case "requires": + if (modifier.requires != null && !Array.isArray(modifier.requires)) { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', '"' + String(modifier.requires) + '"')); + } + break; + case "requiresIfExists": + if (!Array.isArray(modifier.requiresIfExists)) { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', '"' + String(modifier.requiresIfExists) + '"')); + } + break; + case "options": + case "data": + break; + default: + console.error('PopperJS: an invalid property has been provided to the "' + modifier.name + '" modifier, valid properties are ' + VALID_PROPERTIES.map(function(s) { + return '"' + s + '"'; + }).join(", ") + '; but "' + key + '" was provided.'); + } + modifier.requires && modifier.requires.forEach(function(requirement) { + if (modifiers.find(function(mod) { + return mod.name === requirement; + }) == null) { + console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement)); + } + }); + }); + }); +} + +// node_modules/@popperjs/core/lib/utils/uniqueBy.js +function uniqueBy(arr, fn2) { + var identifiers = /* @__PURE__ */ new Set(); + return arr.filter(function(item) { + var identifier = fn2(item); + if (!identifiers.has(identifier)) { + identifiers.add(identifier); + return true; + } + }); +} + +// node_modules/@popperjs/core/lib/utils/mergeByName.js +function mergeByName(modifiers) { + var merged = modifiers.reduce(function(merged2, current) { + var existing = merged2[current.name]; + merged2[current.name] = existing ? Object.assign({}, existing, current, { + options: Object.assign({}, existing.options, current.options), + data: Object.assign({}, existing.data, current.data) + }) : current; + return merged2; + }, {}); + return Object.keys(merged).map(function(key) { + return merged[key]; + }); +} + +// node_modules/@popperjs/core/lib/createPopper.js +var INVALID_ELEMENT_ERROR = "Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element."; +var INFINITE_LOOP_ERROR = "Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash."; +var DEFAULT_OPTIONS = { + placement: "bottom", + modifiers: [], + strategy: "absolute" +}; +function areValidElements() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + return !args.some(function(element) { + return !(element && typeof element.getBoundingClientRect === "function"); + }); +} +function popperGenerator(generatorOptions) { + if (generatorOptions === void 0) { + generatorOptions = {}; + } + var _generatorOptions = generatorOptions, _generatorOptions$def = _generatorOptions.defaultModifiers, defaultModifiers2 = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, _generatorOptions$def2 = _generatorOptions.defaultOptions, defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; + return function createPopper2(reference2, popper2, options) { + if (options === void 0) { + options = defaultOptions; + } + var state = { + placement: "bottom", + orderedModifiers: [], + options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), + modifiersData: {}, + elements: { + reference: reference2, + popper: popper2 + }, + attributes: {}, + styles: {} + }; + var effectCleanupFns = []; + var isDestroyed = false; + var instance = { + state, + setOptions: function setOptions(setOptionsAction) { + var options2 = typeof setOptionsAction === "function" ? setOptionsAction(state.options) : setOptionsAction; + cleanupModifierEffects(); + state.options = Object.assign({}, defaultOptions, state.options, options2); + state.scrollParents = { + reference: isElement(reference2) ? listScrollParents(reference2) : reference2.contextElement ? listScrollParents(reference2.contextElement) : [], + popper: listScrollParents(popper2) + }; + var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers2, state.options.modifiers))); + state.orderedModifiers = orderedModifiers.filter(function(m) { + return m.enabled; + }); + if (true) { + var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function(_ref) { + var name = _ref.name; + return name; + }); + validateModifiers(modifiers); + if (getBasePlacement(state.options.placement) === auto) { + var flipModifier = state.orderedModifiers.find(function(_ref2) { + var name = _ref2.name; + return name === "flip"; + }); + if (!flipModifier) { + console.error(['Popper: "auto" placements require the "flip" modifier be', "present and enabled to work."].join(" ")); + } + } + var _getComputedStyle = getComputedStyle(popper2), marginTop = _getComputedStyle.marginTop, marginRight = _getComputedStyle.marginRight, marginBottom = _getComputedStyle.marginBottom, marginLeft = _getComputedStyle.marginLeft; + if ([marginTop, marginRight, marginBottom, marginLeft].some(function(margin) { + return parseFloat(margin); + })) { + console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', "between the popper and its reference element or boundary.", "To replicate margin, use the `offset` modifier, as well as", "the `padding` option in the `preventOverflow` and `flip`", "modifiers."].join(" ")); + } + } + runModifierEffects(); + return instance.update(); + }, + forceUpdate: function forceUpdate() { + if (isDestroyed) { + return; + } + var _state$elements = state.elements, reference3 = _state$elements.reference, popper3 = _state$elements.popper; + if (!areValidElements(reference3, popper3)) { + if (true) { + console.error(INVALID_ELEMENT_ERROR); + } + return; + } + state.rects = { + reference: getCompositeRect(reference3, getOffsetParent(popper3), state.options.strategy === "fixed"), + popper: getLayoutRect(popper3) + }; + state.reset = false; + state.placement = state.options.placement; + state.orderedModifiers.forEach(function(modifier) { + return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); + }); + var __debug_loops__ = 0; + for (var index = 0; index < state.orderedModifiers.length; index++) { + if (true) { + __debug_loops__ += 1; + if (__debug_loops__ > 100) { + console.error(INFINITE_LOOP_ERROR); + break; + } + } + if (state.reset === true) { + state.reset = false; + index = -1; + continue; + } + var _state$orderedModifie = state.orderedModifiers[index], fn2 = _state$orderedModifie.fn, _state$orderedModifie2 = _state$orderedModifie.options, _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, name = _state$orderedModifie.name; + if (typeof fn2 === "function") { + state = fn2({ + state, + options: _options, + name, + instance + }) || state; + } + } + }, + update: debounce(function() { + return new Promise(function(resolve) { + instance.forceUpdate(); + resolve(state); + }); + }), + destroy: function destroy() { + cleanupModifierEffects(); + isDestroyed = true; + } + }; + if (!areValidElements(reference2, popper2)) { + if (true) { + console.error(INVALID_ELEMENT_ERROR); + } + return instance; + } + instance.setOptions(options).then(function(state2) { + if (!isDestroyed && options.onFirstUpdate) { + options.onFirstUpdate(state2); + } + }); + function runModifierEffects() { + state.orderedModifiers.forEach(function(_ref3) { + var name = _ref3.name, _ref3$options = _ref3.options, options2 = _ref3$options === void 0 ? {} : _ref3$options, effect4 = _ref3.effect; + if (typeof effect4 === "function") { + var cleanupFn = effect4({ + state, + name, + instance, + options: options2 + }); + var noopFn = function noopFn2() { + }; + effectCleanupFns.push(cleanupFn || noopFn); + } + }); + } + function cleanupModifierEffects() { + effectCleanupFns.forEach(function(fn2) { + return fn2(); + }); + effectCleanupFns = []; + } + return instance; + }; +} + +// node_modules/@popperjs/core/lib/popper.js +var defaultModifiers = [eventListeners_default, popperOffsets_default, computeStyles_default, applyStyles_default, offset_default, flip_default, preventOverflow_default, arrow_default, hide_default]; +var createPopper = /* @__PURE__ */ popperGenerator({ + defaultModifiers +}); + +// src/suggestions/suggest.ts +var wrapAround = (value, size) => { + return (value % size + size) % size; +}; +var Suggest = class { + constructor(owner, containerEl, scope) { + this.owner = owner; + this.containerEl = containerEl; + containerEl.on( + "click", + ".suggestion-item", + this.onSuggestionClick.bind(this) + ); + containerEl.on( + "mousemove", + ".suggestion-item", + this.onSuggestionMouseover.bind(this) + ); + scope.register([], "ArrowUp", (event) => { + if (!event.isComposing) { + this.setSelectedItem(this.selectedItem - 1, true); + return false; + } + }); + scope.register([], "ArrowDown", (event) => { + if (!event.isComposing) { + this.setSelectedItem(this.selectedItem + 1, true); + return false; + } + }); + scope.register([], "Enter", (event) => { + if (!event.isComposing) { + this.useSelectedItem(event); + return false; + } + }); + } + onSuggestionClick(event, el) { + event.preventDefault(); + const item = this.suggestions.indexOf(el); + this.setSelectedItem(item, false); + this.useSelectedItem(event); + } + onSuggestionMouseover(_event, el) { + const item = this.suggestions.indexOf(el); + this.setSelectedItem(item, false); + } + setSuggestions(values) { + this.containerEl.empty(); + const suggestionEls = []; + values.forEach((value) => { + const suggestionEl = this.containerEl.createDiv("suggestion-item"); + this.owner.renderSuggestion(value, suggestionEl); + suggestionEls.push(suggestionEl); + }); + this.values = values; + this.suggestions = suggestionEls; + this.setSelectedItem(0, false); + } + useSelectedItem(event) { + const currentValue = this.values[this.selectedItem]; + if (currentValue) { + this.owner.selectSuggestion(currentValue, event); + } + } + setSelectedItem(selectedIndex, scrollIntoView) { + const normalizedIndex = wrapAround(selectedIndex, this.suggestions.length); + const prevSelectedSuggestion = this.suggestions[this.selectedItem]; + const selectedSuggestion = this.suggestions[normalizedIndex]; + prevSelectedSuggestion == null ? void 0 : prevSelectedSuggestion.removeClass("is-selected"); + selectedSuggestion == null ? void 0 : selectedSuggestion.addClass("is-selected"); + this.selectedItem = normalizedIndex; + if (scrollIntoView) { + selectedSuggestion.scrollIntoView(false); + } + } +}; +var TextInputSuggest = class { + constructor(app, inputEl, plugin) { + this.plugin = plugin; + this.app = app; + this.inputEl = inputEl; + this.scope = new import_obsidian.Scope(); + this.suggestEl = createDiv("suggestion-container"); + const suggestion = this.suggestEl.createDiv("suggestion"); + this.suggest = new Suggest(this, suggestion, this.scope); + this.scope.register([], "Escape", this.close.bind(this)); + this.inputEl.addEventListener("input", this.onInputChanged.bind(this)); + this.inputEl.addEventListener("focus", this.onInputChanged.bind(this)); + this.inputEl.addEventListener("blur", this.close.bind(this)); + this.suggestEl.on( + "mousedown", + ".suggestion-container", + (event) => { + event.preventDefault(); + } + ); + } + onInputChanged() { + const inputStr = this.inputEl.value; + const suggestions = this.getSuggestions(inputStr); + if (!suggestions) { + this.close(); + return; + } + if (suggestions.length > 0) { + this.suggest.setSuggestions(suggestions); + this.open(this.app.dom.appContainerEl, this.inputEl); + } else { + this.close(); + } + } + open(container, inputEl) { + this.app.keymap.pushScope(this.scope); + container.appendChild(this.suggestEl); + this.popper = createPopper(inputEl, this.suggestEl, { + placement: "bottom-start", + modifiers: [ + { + name: "sameWidth", + enabled: true, + fn: ({ state, instance }) => { + const targetWidth = `${state.rects.reference.width}px`; + if (state.styles.popper.width === targetWidth) { + return; + } + state.styles.popper.width = targetWidth; + instance.update(); + }, + phase: "beforeWrite", + requires: ["computeStyles"] + } + ] + }); + } + close() { + this.app.keymap.popScope(this.scope); + this.suggest.setSuggestions([]); + if (this.popper) + this.popper.destroy(); + this.suggestEl.detach(); + } +}; + +// src/suggestions/folderSuggest.ts +var FolderSuggest = class extends TextInputSuggest { + getSuggestions(inputStr) { + const abstractFiles = this.app.vault.getAllLoadedFiles(); + const folders = []; + const lowerCaseInputStr = inputStr.toLowerCase(); + abstractFiles.forEach((folder) => { + if (folder instanceof import_obsidian2.TFolder && folder.path.toLowerCase().contains(lowerCaseInputStr)) { + folders.push(folder); + } + }); + return folders; + } + renderSuggestion(file, el) { + el.setText(file.path); + } + selectSuggestion(file) { + this.inputEl.value = file.path; + this.inputEl.trigger("input"); + this.close(); + } +}; + +// src/components/DonateButton.ts +var renderDonateButton = (containerEl) => { + containerEl.createEl("h2", { text: "Support development" }); + const donateText = containerEl.createEl("p"); + donateText.appendChild( + createEl("span", { + text: "If you enjoy Bulk Rename, consider " + }) + ); + donateText.appendChild( + createEl("a", { + text: "buying me a coffee", + href: "https://www.buymeacoffee.com/oleglustenko" + }) + ); + donateText.appendChild( + createEl("span", { + text: ", and following me on Twitter " + }) + ); + donateText.appendChild( + createEl("a", { + text: "@oleglustenko", + href: "https://twitter.com/oleglustenko" + }) + ); + const div = containerEl.createEl("div", { + cls: "bulkrename-donation" + }); + const parser = new DOMParser(); + div.appendChild( + createDonateButton( + "https://www.buymeacoffee.com/oleglustenko", + parser.parseFromString(buyMeACoffee, "text/xml").documentElement + ) + ); +}; +var createDonateButton = (link, img) => { + const a = document.createElement("a"); + a.setAttribute("href", link); + a.addClass("bulkrename-donate-button"); + a.appendChild(img); + return a; +}; +var buyMeACoffee = ` + + + + + + + + + + + + + + + + + + + + + +`; + +// src/services/file.service.ts +var import_obsidian3 = require("obsidian"); +var import_xregexp = __toESM(require_lib()); + +// src/services/settings.service.ts +var isViewTypeFolder = (settings) => { + return settings.viewType === "folder"; +}; +var isViewTypeTags = (settings) => { + return settings.viewType === "tags"; +}; +var isViewTypeRegExp = (settings) => { + return settings.viewType === "regexp"; +}; + +// src/constants/folders.ts +var ROOT_FOLDER_NAME = "/"; + +// src/services/file.service.ts +var getFilesNamesInDirectory = (plugin) => { + return getFilesAsString(plugin.settings); +}; +var getFilesAsString = (settings) => { + let value = ""; + const { fileNames, folderName } = settings; + const shouldPrependSlash = isViewTypeFolder(settings) && folderName === ROOT_FOLDER_NAME; + fileNames.forEach((fileName, index) => { + const isLast = index + 1 === fileNames.length; + const filePath = shouldPrependSlash ? "/" + fileName.path : fileName.path; + if (isLast) { + return value += filePath; + } + value += filePath + "\r\n"; + }); + return value; +}; +var getRenderedFileNamesReplaced = (plugin) => { + const newFiles = selectFilenamesWithReplacedPath(plugin); + return getFilesAsString({ + ...plugin.settings, + fileNames: newFiles + }); +}; +var selectFilenamesWithReplacedPath = (plugin) => { + const { fileNames } = plugin.settings; + return fileNames.map((file) => { + return { + ...file, + path: replaceFilePath(plugin, file) + }; + }); +}; +var replaceFilePath = (plugin, file) => { + const pathWithoutExtension = file.path.split(".").slice(0, -1).join("."); + const { replacePattern, existingSymbol, regExpState } = plugin.settings; + if (isRootFilesSelected(plugin)) { + const newPath2 = replacePattern + pathWithoutExtension; + return `${newPath2}.${file.extension}`; + } + let regExpExistingSymbol = existingSymbol; + if (regExpState.withRegExpForReplaceSymbols) { + regExpExistingSymbol = (0, import_xregexp.default)(existingSymbol, "x"); + } + const newPath = import_xregexp.default.replace( + pathWithoutExtension, + regExpExistingSymbol, + replacePattern, + "all" + ); + return `${newPath}.${file.extension}`; +}; +var renameFilesInObsidian = async (app, plugin) => { + const { existingSymbol, fileNames } = plugin.settings; + if (!existingSymbol) { + new import_obsidian3.Notice("please fill Existing Symbol"); + return; + } + if (!fileNames.length) { + new import_obsidian3.Notice("Please check your results before rename!"); + return; + } + new import_obsidian3.Notice("renaming has been started"); + let success = true; + for (const fileName of fileNames) { + try { + await app.fileManager.renameFile( + fileName, + replaceFilePath(plugin, fileName) + ); + } catch (e) { + if (e.code === "ENOENT") { + new import_obsidian3.Notice("FILES NOT RENAMED!"); + new import_obsidian3.Notice( + "WARNING: YOU MUST CREATE FOLDER BEFORE MOVING INTO IT", + 7e3 + ); + success = false; + break; + } + } + } + success && new import_obsidian3.Notice("successfully renamed all files"); +}; +var isRootFilesSelected = (plugin) => { + const { existingSymbol, folderName } = plugin.settings; + return existingSymbol === ROOT_FOLDER_NAME && folderName === ROOT_FOLDER_NAME && isViewTypeFolder(plugin.settings); +}; + +// src/components/PreviewElement.ts +var createPreviewElement = (textContent = "=> => => =>") => { + const previewLabel = window.document.createElement("span"); + previewLabel.className = "bulk_preview_label"; + previewLabel.textContent = textContent; + return previewLabel; +}; + +// src/services/obsidian.service.ts +var import_obsidian4 = require("obsidian"); +var import_xregexp2 = __toESM(require_lib()); +var getObsidianFilesByFolderName = (app, plugin) => { + const { folderName } = plugin.settings; + const abstractFiles = app.vault.getAllLoadedFiles(); + const files = abstractFiles.filter( + (file) => file instanceof import_obsidian4.TFile && file.parent.path.includes(folderName) + ); + const filesSortedByName = sortFilesByName(files); + return filesSortedByName; +}; +var getObsidianFilesByRegExp = (app, plugin) => { + const { regExpState } = plugin.settings; + const regExp = (0, import_xregexp2.default)(regExpState.regExp, regExpState.flags.join("")); + const abstractFiles = app.vault.getAllLoadedFiles(); + const matchedFileNames = abstractFiles.filter((file) => { + if (file instanceof import_obsidian4.TFile && import_xregexp2.default.exec(file.path, regExp)) { + return true; + } + }); + const filesSortedByName = sortFilesByName(matchedFileNames); + return filesSortedByName; +}; +var getObsidianFilesWithTagName = (app, plugin) => { + const { tags } = plugin.settings; + const abstractFiles = app.vault.getAllLoadedFiles(); + const files = abstractFiles.filter((file) => { + if (!(file instanceof import_obsidian4.TFile)) { + return; + } + const fileMetadata = app.metadataCache.getFileCache(file); + if (!fileMetadata || !fileMetadata.tags) { + return; + } + const hasTagsInTheFile = fileMetadata.tags.find((fileTags) => { + return tags.includes(fileTags.tag); + }); + if (!hasTagsInTheFile) { + return; + } + return file; + }); + const filesSortedByName = sortFilesByName(files); + return filesSortedByName; +}; +var sortFilesByName = (files) => { + return files.sort((a, b) => a.name.localeCompare(b.name)); +}; + +// src/components/RenderPreviewFiles.ts +var renderPreviewFiles = (setting, plugin, state) => { + let existingFilesTextArea; + let replacedPreviewTextArea; + return setting.clear().addTextArea((text) => { + text.setPlaceholder("Here you will see files under folder location"); + text.setDisabled(true); + existingFilesTextArea = text.inputEl; + const value = getFilesNamesInDirectory(plugin); + text.setValue(value); + const previewLabel = createPreviewElement(); + text.inputEl.insertAdjacentElement("afterend", previewLabel); + text.inputEl.addClass("bulk_preview_textarea"); + text.inputEl.wrap = "soft"; + }).addTextArea((text) => { + text.setPlaceholder( + "How filenames will looks like after replacement(click preview first)" + ); + text.setDisabled(true); + replacedPreviewTextArea = text.inputEl; + const value = getRenderedFileNamesReplaced(plugin); + text.setValue(value); + text.inputEl.addClass("bulk_preview_textarea"); + text.inputEl.wrap = "soft"; + }).then((setting2) => { + syncScrolls(existingFilesTextArea, replacedPreviewTextArea, state); + }); +}; +var syncScrolls = (existingFilesArea, previewArea, state) => { + existingFilesArea.addEventListener("scroll", (event) => { + const target = event.target; + if (target.scrollTop !== state.previewScroll) { + previewArea.scrollTop = target.scrollTop; + state.previewScroll = target.scrollTop; + } + }); + previewArea.addEventListener("scroll", (event) => { + const target = event.target; + if (target.scrollTop !== state.filesScroll) { + existingFilesArea.scrollTop = target.scrollTop; + state.filesScroll = target.scrollTop; + } + }); +}; + +// src/components/RegExpBackslash.ts +var createBackslash = (textContent = "/") => { + const previewLabel = window.document.createElement("div"); + previewLabel.className = "bulk_regexp_slash"; + previewLabel.textContent = textContent; + return previewLabel; +}; + +// src/constants/RegExpFlags.ts +var REGEXP_FLAGS = [ + "g", + "i", + "m", + "u", + "y", + "n", + "s", + "x", + "A" +]; + +// src/suggestions/RegExpFlagsSuggest.ts +var RegExpFlagsSuggest = class extends TextInputSuggest { + constructor() { + super(...arguments); + this.renderSuggestion = (flag, el) => { + const { regExpState } = this.plugin.settings; + const hasFlag = regExpState.flags.includes(flag); + if (hasFlag) { + el.addClass("bulk-flag-selected"); + } else { + el.removeClass("bulk-flag-selected"); + } + el.setText(flag); + }; + this.selectSuggestion = (flag, event) => { + const { regExpState } = this.plugin.settings; + const target = event.target; + const hasFlag = regExpState.flags.includes(flag); + if (hasFlag) { + regExpState.flags = regExpState.flags.filter((existingFlag) => { + return existingFlag !== flag; + }); + } else { + regExpState.flags = [...regExpState.flags, flag]; + } + target.classList.toggle("bulk-flag-selected"); + this.inputEl.value = regExpState.flags.join(""); + this.inputEl.trigger("input"); + }; + } + getSuggestions() { + return REGEXP_FLAGS; + } +}; + +// main.ts +var DEFAULT_SETTINGS = { + folderName: "", + fileNames: [], + existingSymbol: "", + replacePattern: "", + regExpState: { + regExp: "", + flags: [], + withRegExpForReplaceSymbols: false + }, + tags: [], + viewType: "folder" +}; +var BulkRenamePlugin = class extends import_obsidian5.Plugin { + async onload() { + await this.loadSettings(); + this.addSettingTab(new BulkRenameSettingsTab(this.app, this)); + } + onunload() { + } + async loadSettings() { + this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); + } + async saveSettings() { + await this.saveData(this.settings); + } +}; +var BulkRenameSettingsTab = class extends import_obsidian5.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.renderFilesAndPreview = () => { + this.containerEl.createEl("h2", { text: "Preview" }, (el) => { + el.className = "bulk_preview_header"; + }); + this.filesAndPreview = new import_obsidian5.Setting(this.containerEl); + this.totalFiles = this.containerEl.createEl("span", { + text: `Total Files: ${this.plugin.settings.fileNames.length}` + }); + this.filesAndPreview.infoEl.detach(); + this.filesAndPreview.controlEl.addClass("bulk_rename_preview"); + this.reRenderPreview(); + }; + this.reRenderPreview = () => { + this.calculateFileNames(); + renderPreviewFiles(this.filesAndPreview, this.plugin, this.state); + this.totalFiles.setText( + `Total Files: ${this.plugin.settings.fileNames.length}` + ); + }; + this.state = { + previewScroll: 0, + filesScroll: 0 + }; + this.plugin = plugin; + } + display() { + const { containerEl } = this; + containerEl.empty(); + containerEl.createEl("h1", { text: "Bulk Rename - Settings" }); + containerEl.addEventListener("keyup", (event) => { + if (event.key !== "Enter") { + return; + } + this.reRenderPreview(); + }); + this.containerEl.addClass("bulk_rename_plugin"); + this.renderTabs(); + this.renderFileLocation(); + this.renderTagNames(); + this.renderRegExpInput(); + this.renderReplaceSymbol(); + this.renderFilesAndPreview(); + this.renderRenameFiles(); + this.renderSupportDevelopment(); + } + renderTabs() { + new import_obsidian5.Setting(this.containerEl).setName("Search by: ").addButton((button) => { + button.setButtonText("Folder"); + if (isViewTypeFolder(this.plugin.settings)) { + button.setCta(); + } + button.onClick(async () => { + this.plugin.settings.viewType = "folder"; + await this.plugin.saveSettings(); + this.display(); + }); + }).addButton((button) => { + button.setButtonText("Tags"); + if (isViewTypeTags(this.plugin.settings)) { + button.setCta(); + } + button.onClick(async () => { + this.plugin.settings.viewType = "tags"; + await this.plugin.saveSettings(); + this.display(); + }); + }).addButton((button) => { + button.setButtonText("RegExp"); + if (isViewTypeRegExp(this.plugin.settings)) { + button.setCta(); + } + button.onClick(async () => { + this.plugin.settings.viewType = "regexp"; + await this.plugin.saveSettings(); + this.display(); + }); + }); + } + renderFileLocation() { + if (!isViewTypeFolder(this.plugin.settings)) { + return; + } + new import_obsidian5.Setting(this.containerEl).setName("Folder location").addSearch((cb) => { + new FolderSuggest(this.app, cb.inputEl, this.plugin); + cb.setPlaceholder("Example: folder1/").setValue(this.plugin.settings.folderName).onChange((newFolder) => { + this.plugin.settings.folderName = newFolder; + this.plugin.saveSettings(); + this.getFilesByFolder(); + }); + cb.containerEl.addClass("bulk_rename"); + cb.inputEl.addClass("bulk_input"); + cb.inputEl.onblur = this.reRenderPreview; + }); + } + renderTagNames() { + if (!isViewTypeTags(this.plugin.settings)) { + return; + } + new import_obsidian5.Setting(this.containerEl).setName("Tag names ").addSearch((cb) => { + cb.inputEl.addEventListener("keydown", (event) => { + if (event.key !== "Enter") { + return; + } + const target = event.target; + this.plugin.settings.tags = target.value.replace(/ /g, "").split(","); + this.plugin.saveSettings(); + }); + cb.setPlaceholder("Example: #tag, #tag2").setValue(this.plugin.settings.tags.join(",")).onChange((newFolder) => { + this.plugin.settings.tags = newFolder.replace(/ /g, "").split(","); + this.plugin.saveSettings(); + this.getFilesByTags(); + }); + cb.containerEl.addClass("bulk_rename"); + cb.inputEl.addClass("bulk_input"); + cb.inputEl.onblur = this.reRenderPreview; + }); + } + renderRegExpInput() { + if (!isViewTypeRegExp(this.plugin.settings)) { + return; + } + const settings = new import_obsidian5.Setting(this.containerEl); + settings.infoEl.addClass("bulk_regexp_search"); + settings.setClass("bulk_regexp_container"); + settings.setName("RegExp Search").addText((cb) => { + const backslash = createBackslash("/"); + cb.inputEl.insertAdjacentElement("beforebegin", backslash); + cb.inputEl.addEventListener("keydown", (event) => { + if (event.key !== "Enter") { + return; + } + const target = event.target; + this.plugin.settings.regExpState.regExp = target.value; + this.plugin.saveSettings(); + }); + cb.setPlaceholder("Put your RegExp here").setValue(this.plugin.settings.regExpState.regExp).onChange((newFolder) => { + this.plugin.settings.regExpState.regExp = newFolder; + this.plugin.saveSettings(); + this.getFilesByRegExp(); + }); + cb.inputEl.addClass("bulk_regexp"); + cb.inputEl.onblur = this.reRenderPreview; + }).addText((cb) => { + new RegExpFlagsSuggest(this.app, cb.inputEl, this.plugin); + const backslash = createBackslash("/"); + cb.inputEl.insertAdjacentElement("beforebegin", backslash); + cb.inputEl.addEventListener("keydown", (event) => { + event.stopPropagation(); + event.stopImmediatePropagation(); + event.preventDefault(); + }); + cb.setPlaceholder("flags here").setValue(this.plugin.settings.regExpState.flags.join("")).onChange((flag) => { + this.plugin.saveSettings(); + this.getFilesByRegExp(); + this.reRenderPreview(); + }); + cb.inputEl.addClass("bulk_regexp_flags"); + }).controlEl.addClass("bulk_regexp_control"); + } + renderUseRegExpForExistingAndReplacement() { + if (!isViewTypeRegExp(this.plugin.settings)) { + return; + } + const newSettings = new import_obsidian5.Setting(this.containerEl); + newSettings.setClass("bulk_toggle"); + newSettings.setName("Use RegExp For Existing & Replacement?").setDesc( + "Only RegExp will work now, however it doesn't prevent you to pass string" + ).addToggle((toggle) => { + toggle.setValue( + this.plugin.settings.regExpState.withRegExpForReplaceSymbols + ).setTooltip("Use RegExp For Existing & Replacement?").onChange((isRegExpForNames) => { + this.plugin.settings.regExpState.withRegExpForReplaceSymbols = isRegExpForNames; + this.reRenderPreview(); + this.plugin.saveSettings(); + }); + }); + } + renderReplaceSymbol() { + const { settings } = this.plugin; + this.renderUseRegExpForExistingAndReplacement(); + const newSettings = new import_obsidian5.Setting(this.containerEl); + if (import_obsidian5.Platform.isDesktop) { + const previewLabel = createPreviewElement("Existing"); + const replacementLabel = createPreviewElement("Replacement"); + newSettings.infoEl.replaceChildren(previewLabel, replacementLabel); + newSettings.setClass("flex"); + newSettings.setClass("flex-col"); + newSettings.infoEl.addClass("bulk_info"); + } + newSettings.controlEl.addClass("replaceRenderSymbols"); + newSettings.addTextArea((textComponent) => { + textComponent.setValue(settings.existingSymbol); + textComponent.setPlaceholder("existing chars"); + textComponent.onChange((newValue) => { + settings.existingSymbol = newValue; + this.plugin.saveSettings(); + }); + textComponent.inputEl.addClass("bulk_input"); + textComponent.inputEl.onblur = this.reRenderPreview; + }); + newSettings.addTextArea((textComponent) => { + textComponent.setValue(settings.replacePattern); + textComponent.setPlaceholder("replace with"); + textComponent.onChange((newValue) => { + settings.replacePattern = newValue; + this.plugin.saveSettings(); + this.getFilesByFolder(); + }); + textComponent.inputEl.addClass("bulk_input"); + textComponent.inputEl.onblur = this.reRenderPreview; + }); + } + renderRenameFiles() { + const desc = document.createDocumentFragment(); + desc.append( + "You are going to update all files from preview section", + desc.createEl("br"), + desc.createEl("b", { + text: "Warning: " + }), + "Make sure you verified all files in preview" + ); + new import_obsidian5.Setting(this.containerEl).setDesc(desc).setName("Replace patterns").addButton((button) => { + button.setClass("bulk_button"); + button.setTooltip("Your files won't be changed"); + button.setButtonText("Preview"); + button.onClick(this.reRenderPreview); + }).addButton((button) => { + button.setClass("bulk_button"); + button.setTooltip( + "We don't have undone button yet!\r\n Do we need it?" + ); + button.setButtonText("Rename"); + button.onClick(async () => { + button.setDisabled(true); + await renameFilesInObsidian(this.app, this.plugin); + this.reRenderPreview(); + button.setDisabled(false); + }); + }); + } + renderSupportDevelopment() { + renderDonateButton(this.containerEl); + } + calculateFileNames() { + if (isViewTypeTags(this.plugin.settings)) { + this.getFilesByTags(); + return; + } + if (isViewTypeRegExp(this.plugin.settings)) { + this.getFilesByRegExp(); + return; + } + this.getFilesByFolder(); + } + getFilesByFolder() { + this.plugin.settings.fileNames = getObsidianFilesByFolderName( + this.app, + this.plugin + ); + } + getFilesByTags() { + this.plugin.settings.fileNames = getObsidianFilesWithTagName( + this.app, + this.plugin + ); + } + getFilesByRegExp() { + this.plugin.settings.fileNames = getObsidianFilesByRegExp( + this.app, + this.plugin + ); + } +}; +var main_default = BulkRenamePlugin; +/*! + * XRegExp 5.1.1 + * + * Steven Levithan (c) 2007-present MIT License + */ +/*! + * XRegExp Unicode Base 5.1.1 + * + * Steven Levithan (c) 2008-present MIT License + */ +/*! + * XRegExp Unicode Categories 5.1.1 + * + * Steven Levithan (c) 2010-present MIT License + * Unicode data by Mathias Bynens + */ +/*! + * XRegExp Unicode Properties 5.1.1 + * + * Steven Levithan (c) 2012-present MIT License + * Unicode data by Mathias Bynens + */ +/*! + * XRegExp Unicode Scripts 5.1.1 + * + * Steven Levithan (c) 2010-present MIT License + * Unicode data by Mathias Bynens + */ +/*! + * XRegExp.build 5.1.1 + * + * Steven Levithan (c) 2012-present MIT License + */ +/*! + * XRegExp.matchRecursive 5.1.1 + * + * Steven Levithan (c) 2009-present MIT License + */ + +/* nosourcemap */ \ No newline at end of file diff --git a/content/notes/.obsidian/plugins/obsidian-bulk-rename-plugin/manifest.json b/content/notes/.obsidian/plugins/obsidian-bulk-rename-plugin/manifest.json new file mode 100644 index 0000000..b21f09f --- /dev/null +++ b/content/notes/.obsidian/plugins/obsidian-bulk-rename-plugin/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "obsidian-bulk-rename-plugin", + "name": "Bulk Rename", + "version": "0.5.2", + "minAppVersion": "0.15.0", + "description": "Purpose of this plugin rename files based on pattern", + "author": "Oleg Lustenko", + "authorUrl": "https://obsidian.md", + "isDesktopOnly": false +} \ No newline at end of file diff --git a/content/notes/.obsidian/plugins/obsidian-bulk-rename-plugin/styles.css b/content/notes/.obsidian/plugins/obsidian-bulk-rename-plugin/styles.css new file mode 100644 index 0000000..0efdade --- /dev/null +++ b/content/notes/.obsidian/plugins/obsidian-bulk-rename-plugin/styles.css @@ -0,0 +1,155 @@ +.bulk_rename_plugin { + padding-right: 1rem; +} + +.bulk_rename { + width: calc(100% - 20px); +} + +.bulk_rename_preview { + width: 80%; + height: 100%; + gap: 0; +} + +@media screen and (max-width: 983px) { + .bulk_rename_preview { + display: flex; + flex-direction: column; + max-height: 300px; + } +} + +.flex { + display: flex; +} +.flex-col { + flex-direction: column; +} + +.m-auto { + margin: auto; +} + +.bulk_info { + display: flex; + justify-content: space-between; + margin: auto; + width: 100%; +} + +.bulk_rename_preview > textarea { + height: 360px; +} + +.replaceRenderSymbols { + display: flex; + width: 100%; + padding-top: 0.5rem; +} + +.setting-item-control.replaceRenderSymbols .bulk_input { + min-height: 80px; +} + +.setting-item-control .bulk_preview_textarea { + min-width: 19em; +} + +.bulk_preview_textarea { + margin-left: 5px; + margin-right: 5px; + font-size: 14px; + width: 100%; + height: 400px; + resize: none; +} + +.bulk_button { + width: 100%; +} + +.bulk_preview_header { + margin-top: 5px; + margin-bottom: 5px; +} + +.setting-item-control .bulk_input { + width: 100%; + resize: none; + min-width: auto; +} + +.setting-item-control .bulk_input:first-child { + margin-right: 15px; +} + +.bulk_regexp_search { + padding-right: 1rem; +} + +.bulk_toggle { + border-top: none; +} + +.bulk_preview_label:first-child { + margin-right: 15px; +} + +.bulk_preview_label { + text-align: center; +} + +.bulk_regexp_container { + justify-content: space-between; +} + +.bulk_regexp_control { + background: var(--background-modifier-form-field); + border: 1px solid var(--background-modifier-border); + transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out; + font-family: inherit; + border-radius: var(--input-radius); + outline: none; + max-width: 400px; +} + +.bulk_regexp_control:hover, +.bulk_regexp_control:focus, +.bulk_regexp_control:focus-visible { + box-shadow: 0 0 0 2px var(--background-modifier-border-hover); +} + +.bulk_regexp_control > input { + border: none; + margin: 0; + padding: 0; +} + +.bulk_regexp, +.bulk_regexp_flags { + width: 100%; +} + +.bulk_regexp:hover, +.bulk_regexp:focus, +.bulk_regexp:focus-visible .bulk_regexp_flags:hover, +.bulk_regexp_flags:focus, +.bulk_regexp_flags:focus-visible { + border: none !important; + box-shadow: none !important; +} + +.bulk_regexp_flags { + caret-color: transparent; + max-width: 80px; +} + +.bulk_regexp_slash { + font-size: 1.5em; + opacity: 0.5; +} + +.bulk-flag-selected { + background-color: lavender !important; +} diff --git a/content/notes/.obsidian/plugins/obsidian-importer/main.js b/content/notes/.obsidian/plugins/obsidian-importer/main.js new file mode 100644 index 0000000..295585b --- /dev/null +++ b/content/notes/.obsidian/plugins/obsidian-importer/main.js @@ -0,0 +1,228 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var hd=Object.create;var vi=Object.defineProperty;var gd=Object.getOwnPropertyDescriptor;var yd=Object.getOwnPropertyNames;var bd=Object.getPrototypeOf,xd=Object.prototype.hasOwnProperty;var Y=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports),Se=(n,t)=>{for(var e in t)vi(n,e,{get:t[e],enumerable:!0})},is=(n,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of yd(t))!xd.call(n,r)&&r!==e&&vi(n,r,{get:()=>t[r],enumerable:!(i=gd(t,r))||i.enumerable});return n};var rs=(n,t,e)=>(e=n!=null?hd(bd(n)):{},is(t||!n||!n.__esModule?vi(e,"default",{value:n,enumerable:!0}):e,n)),wd=n=>is(vi({},"__esModule",{value:!0}),n);var Do=Y((Mx,Ml)=>{"use strict";Ml.exports=sh;function sh(n,t){for(var e=new Array(arguments.length-1),i=0,r=2,o=!0;r{"use strict";var zi=Ul;zi.length=function(t){var e=t.length;if(!e)return 0;for(var i=0;--e%4>1&&t.charAt(e)==="=";)++i;return Math.ceil(t.length*3)/4-i};var wn=new Array(64),Bl=new Array(123);for(Ye=0;Ye<64;)Bl[wn[Ye]=Ye<26?Ye+65:Ye<52?Ye+71:Ye<62?Ye-4:Ye-59|43]=Ye++;var Ye;zi.encode=function(t,e,i){for(var r=null,o=[],a=0,s=0,l;e>2],l=(c&3)<<4,s=1;break;case 1:o[a++]=wn[l|c>>4],l=(c&15)<<2,s=2;break;case 2:o[a++]=wn[l|c>>6],o[a++]=wn[c&63],s=0;break}a>8191&&((r||(r=[])).push(String.fromCharCode.apply(String,o)),a=0)}return s&&(o[a++]=wn[l],o[a++]=61,s===1&&(o[a++]=61)),r?(a&&r.push(String.fromCharCode.apply(String,o.slice(0,a))),r.join("")):String.fromCharCode.apply(String,o.slice(0,a))};var $l="invalid encoding";zi.decode=function(t,e,i){for(var r=i,o=0,a,s=0;s1)break;if((l=Bl[l])===void 0)throw Error($l);switch(o){case 0:a=l,o=1;break;case 1:e[i++]=a<<2|(l&48)>>4,a=l,o=2;break;case 2:e[i++]=(a&15)<<4|(l&60)>>2,a=l,o=3;break;case 3:e[i++]=(a&3)<<6|l,o=0;break}}if(o===1)throw Error($l);return i-r};zi.test=function(t){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(t)}});var ql=Y((Bx,Hl)=>{"use strict";Hl.exports=Gi;function Gi(){this._listeners={}}Gi.prototype.on=function(t,e,i){return(this._listeners[t]||(this._listeners[t]=[])).push({fn:e,ctx:i||this}),this};Gi.prototype.off=function(t,e){if(t===void 0)this._listeners={};else if(e===void 0)this._listeners[t]=[];else for(var i=this._listeners[t],r=0;r{"use strict";Vl.exports=Wl(Wl);function Wl(n){return typeof Float32Array!="undefined"?function(){var t=new Float32Array([-0]),e=new Uint8Array(t.buffer),i=e[3]===128;function r(l,c,p){t[0]=l,c[p]=e[0],c[p+1]=e[1],c[p+2]=e[2],c[p+3]=e[3]}function o(l,c,p){t[0]=l,c[p]=e[3],c[p+1]=e[2],c[p+2]=e[1],c[p+3]=e[0]}n.writeFloatLE=i?r:o,n.writeFloatBE=i?o:r;function a(l,c){return e[0]=l[c],e[1]=l[c+1],e[2]=l[c+2],e[3]=l[c+3],t[0]}function s(l,c){return e[3]=l[c],e[2]=l[c+1],e[1]=l[c+2],e[0]=l[c+3],t[0]}n.readFloatLE=i?a:s,n.readFloatBE=i?s:a}():function(){function t(i,r,o,a){var s=r<0?1:0;if(s&&(r=-r),r===0)i(1/r>0?0:2147483648,o,a);else if(isNaN(r))i(2143289344,o,a);else if(r>34028234663852886e22)i((s<<31|2139095040)>>>0,o,a);else if(r<11754943508222875e-54)i((s<<31|Math.round(r/1401298464324817e-60))>>>0,o,a);else{var l=Math.floor(Math.log(r)/Math.LN2),c=Math.round(r*Math.pow(2,-l)*8388608)&8388607;i((s<<31|l+127<<23|c)>>>0,o,a)}}n.writeFloatLE=t.bind(null,Zl),n.writeFloatBE=t.bind(null,Yl);function e(i,r,o){var a=i(r,o),s=(a>>31)*2+1,l=a>>>23&255,c=a&8388607;return l===255?c?NaN:s*(1/0):l===0?s*1401298464324817e-60*c:s*Math.pow(2,l-150)*(c+8388608)}n.readFloatLE=e.bind(null,zl),n.readFloatBE=e.bind(null,Gl)}(),typeof Float64Array!="undefined"?function(){var t=new Float64Array([-0]),e=new Uint8Array(t.buffer),i=e[7]===128;function r(l,c,p){t[0]=l,c[p]=e[0],c[p+1]=e[1],c[p+2]=e[2],c[p+3]=e[3],c[p+4]=e[4],c[p+5]=e[5],c[p+6]=e[6],c[p+7]=e[7]}function o(l,c,p){t[0]=l,c[p]=e[7],c[p+1]=e[6],c[p+2]=e[5],c[p+3]=e[4],c[p+4]=e[3],c[p+5]=e[2],c[p+6]=e[1],c[p+7]=e[0]}n.writeDoubleLE=i?r:o,n.writeDoubleBE=i?o:r;function a(l,c){return e[0]=l[c],e[1]=l[c+1],e[2]=l[c+2],e[3]=l[c+3],e[4]=l[c+4],e[5]=l[c+5],e[6]=l[c+6],e[7]=l[c+7],t[0]}function s(l,c){return e[7]=l[c],e[6]=l[c+1],e[5]=l[c+2],e[4]=l[c+3],e[3]=l[c+4],e[2]=l[c+5],e[1]=l[c+6],e[0]=l[c+7],t[0]}n.readDoubleLE=i?a:s,n.readDoubleBE=i?s:a}():function(){function t(i,r,o,a,s,l){var c=a<0?1:0;if(c&&(a=-a),a===0)i(0,s,l+r),i(1/a>0?0:2147483648,s,l+o);else if(isNaN(a))i(0,s,l+r),i(2146959360,s,l+o);else if(a>17976931348623157e292)i(0,s,l+r),i((c<<31|2146435072)>>>0,s,l+o);else{var p;if(a<22250738585072014e-324)p=a/5e-324,i(p>>>0,s,l+r),i((c<<31|p/4294967296)>>>0,s,l+o);else{var m=Math.floor(Math.log(a)/Math.LN2);m===1024&&(m=1023),p=a*Math.pow(2,-m),i(p*4503599627370496>>>0,s,l+r),i((c<<31|m+1023<<20|p*1048576&1048575)>>>0,s,l+o)}}}n.writeDoubleLE=t.bind(null,Zl,0,4),n.writeDoubleBE=t.bind(null,Yl,4,0);function e(i,r,o,a,s){var l=i(a,s+r),c=i(a,s+o),p=(c>>31)*2+1,m=c>>>20&2047,y=4294967296*(c&1048575)+l;return m===2047?y?NaN:p*(1/0):m===0?p*5e-324*y:p*Math.pow(2,m-1075)*(y+4503599627370496)}n.readDoubleLE=e.bind(null,zl,0,4),n.readDoubleBE=e.bind(null,Gl,4,0)}(),n}function Zl(n,t,e){t[e]=n&255,t[e+1]=n>>>8&255,t[e+2]=n>>>16&255,t[e+3]=n>>>24}function Yl(n,t,e){t[e]=n>>>24,t[e+1]=n>>>16&255,t[e+2]=n>>>8&255,t[e+3]=n&255}function zl(n,t){return(n[t]|n[t+1]<<8|n[t+2]<<16|n[t+3]<<24)>>>0}function Gl(n,t){return(n[t]<<24|n[t+1]<<16|n[t+2]<<8|n[t+3])>>>0}});var Co=Y((exports,module)=>{"use strict";module.exports=inquire;function inquire(moduleName){try{var mod=eval("quire".replace(/^/,"re"))(moduleName);if(mod&&(mod.length||Object.keys(mod).length))return mod}catch(n){}return null}});var Jl=Y(Xl=>{"use strict";var Io=Xl;Io.length=function(t){for(var e=0,i=0,r=0;r191&&l<224?a[s++]=(l&31)<<6|t[e++]&63:l>239&&l<365?(l=((l&7)<<18|(t[e++]&63)<<12|(t[e++]&63)<<6|t[e++]&63)-65536,a[s++]=55296+(l>>10),a[s++]=56320+(l&1023)):a[s++]=(l&15)<<12|(t[e++]&63)<<6|t[e++]&63,s>8191&&((o||(o=[])).push(String.fromCharCode.apply(String,a)),s=0);return o?(s&&o.push(String.fromCharCode.apply(String,a.slice(0,s))),o.join("")):String.fromCharCode.apply(String,a.slice(0,s))};Io.write=function(t,e,i){for(var r=i,o,a,s=0;s>6|192,e[i++]=o&63|128):(o&64512)===55296&&((a=t.charCodeAt(s+1))&64512)===56320?(o=65536+((o&1023)<<10)+(a&1023),++s,e[i++]=o>>18|240,e[i++]=o>>12&63|128,e[i++]=o>>6&63|128,e[i++]=o&63|128):(e[i++]=o>>12|224,e[i++]=o>>6&63|128,e[i++]=o&63|128);return i-r}});var ec=Y((Hx,Ql)=>{"use strict";Ql.exports=lh;function lh(n,t,e){var i=e||8192,r=i>>>1,o=null,a=i;return function(l){if(l<1||l>r)return n(l);a+l>i&&(o=n(i),a=0);var c=t.call(o,a,a+=l);return a&7&&(a=(a|7)+1),c}}});var nc=Y((qx,tc)=>{"use strict";tc.exports=ge;var ei=et();function ge(n,t){this.lo=n>>>0,this.hi=t>>>0}var Jt=ge.zero=new ge(0,0);Jt.toNumber=function(){return 0};Jt.zzEncode=Jt.zzDecode=function(){return this};Jt.length=function(){return 1};var ch=ge.zeroHash="\0\0\0\0\0\0\0\0";ge.fromNumber=function(t){if(t===0)return Jt;var e=t<0;e&&(t=-t);var i=t>>>0,r=(t-i)/4294967296>>>0;return e&&(r=~r>>>0,i=~i>>>0,++i>4294967295&&(i=0,++r>4294967295&&(r=0))),new ge(i,r)};ge.from=function(t){if(typeof t=="number")return ge.fromNumber(t);if(ei.isString(t))if(ei.Long)t=ei.Long.fromString(t);else return ge.fromNumber(parseInt(t,10));return t.low||t.high?new ge(t.low>>>0,t.high>>>0):Jt};ge.prototype.toNumber=function(t){if(!t&&this.hi>>>31){var e=~this.lo+1>>>0,i=~this.hi>>>0;return e||(i=i+1>>>0),-(e+i*4294967296)}return this.lo+this.hi*4294967296};ge.prototype.toLong=function(t){return ei.Long?new ei.Long(this.lo|0,this.hi|0,Boolean(t)):{low:this.lo|0,high:this.hi|0,unsigned:Boolean(t)}};var Ot=String.prototype.charCodeAt;ge.fromHash=function(t){return t===ch?Jt:new ge((Ot.call(t,0)|Ot.call(t,1)<<8|Ot.call(t,2)<<16|Ot.call(t,3)<<24)>>>0,(Ot.call(t,4)|Ot.call(t,5)<<8|Ot.call(t,6)<<16|Ot.call(t,7)<<24)>>>0)};ge.prototype.toHash=function(){return String.fromCharCode(this.lo&255,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,this.hi&255,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)};ge.prototype.zzEncode=function(){var t=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^t)>>>0,this.lo=(this.lo<<1^t)>>>0,this};ge.prototype.zzDecode=function(){var t=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^t)>>>0,this.hi=(this.hi>>>1^t)>>>0,this};ge.prototype.length=function(){var t=this.lo,e=(this.lo>>>28|this.hi<<4)>>>0,i=this.hi>>>24;return i===0?e===0?t<16384?t<128?1:2:t<2097152?3:4:e<16384?e<128?5:6:e<2097152?7:8:i<128?9:10}});var et=Y(Fo=>{"use strict";var H=Fo;H.asPromise=Do();H.base64=jl();H.EventEmitter=ql();H.float=Kl();H.inquire=Co();H.utf8=Jl();H.pool=ec();H.LongBits=nc();H.isNode=Boolean(typeof global!="undefined"&&global&&global.process&&global.process.versions&&global.process.versions.node);H.global=H.isNode&&global||typeof window!="undefined"&&window||typeof self!="undefined"&&self||Fo;H.emptyArray=Object.freeze?Object.freeze([]):[];H.emptyObject=Object.freeze?Object.freeze({}):{};H.isInteger=Number.isInteger||function(t){return typeof t=="number"&&isFinite(t)&&Math.floor(t)===t};H.isString=function(t){return typeof t=="string"||t instanceof String};H.isObject=function(t){return t&&typeof t=="object"};H.isset=H.isSet=function(t,e){var i=t[e];return i!=null&&t.hasOwnProperty(e)?typeof i!="object"||(Array.isArray(i)?i.length:Object.keys(i).length)>0:!1};H.Buffer=function(){try{var n=H.inquire("buffer").Buffer;return n.prototype.utf8Write?n:null}catch(t){return null}}();H._Buffer_from=null;H._Buffer_allocUnsafe=null;H.newBuffer=function(t){return typeof t=="number"?H.Buffer?H._Buffer_allocUnsafe(t):new H.Array(t):H.Buffer?H._Buffer_from(t):typeof Uint8Array=="undefined"?t:new Uint8Array(t)};H.Array=typeof Uint8Array!="undefined"?Uint8Array:Array;H.Long=H.global.dcodeIO&&H.global.dcodeIO.Long||H.global.Long||H.inquire("long");H.key2Re=/^true|false|0|1$/;H.key32Re=/^-?(?:0|[1-9][0-9]*)$/;H.key64Re=/^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;H.longToHash=function(t){return t?H.LongBits.from(t).toHash():H.LongBits.zeroHash};H.longFromHash=function(t,e){var i=H.LongBits.fromHash(t);return H.Long?H.Long.fromBits(i.lo,i.hi,e):i.toNumber(Boolean(e))};function ic(n,t,e){for(var i=Object.keys(t),r=0;r-1;--o)if(e[r[o]]===1&&this[r[o]]!==void 0&&this[r[o]]!==null)return r[o]}};H.oneOfSetter=function(t){return function(e){for(var i=0;i{"use strict";lc.exports=X;var $e=et(),Lo,Vi=$e.LongBits,oc=$e.base64,ac=$e.utf8;function ti(n,t,e){this.fn=n,this.len=t,this.next=void 0,this.val=e}function Mo(){}function ph(n){this.head=n.head,this.tail=n.tail,this.len=n.len,this.next=n.states}function X(){this.len=0,this.head=new ti(Mo,0,0),this.tail=this.head,this.states=null}var sc=function(){return $e.Buffer?function(){return(X.create=function(){return new Lo})()}:function(){return new X}};X.create=sc();X.alloc=function(t){return new $e.Array(t)};$e.Array!==Array&&(X.alloc=$e.pool(X.alloc,$e.Array.prototype.subarray));X.prototype._push=function(t,e,i){return this.tail=this.tail.next=new ti(t,e,i),this.len+=e,this};function $o(n,t,e){t[e]=n&255}function uh(n,t,e){for(;n>127;)t[e++]=n&127|128,n>>>=7;t[e]=n}function Bo(n,t){this.len=n,this.next=void 0,this.val=t}Bo.prototype=Object.create(ti.prototype);Bo.prototype.fn=uh;X.prototype.uint32=function(t){return this.len+=(this.tail=this.tail.next=new Bo((t=t>>>0)<128?1:t<16384?2:t<2097152?3:t<268435456?4:5,t)).len,this};X.prototype.int32=function(t){return t<0?this._push(Uo,10,Vi.fromNumber(t)):this.uint32(t)};X.prototype.sint32=function(t){return this.uint32((t<<1^t>>31)>>>0)};function Uo(n,t,e){for(;n.hi;)t[e++]=n.lo&127|128,n.lo=(n.lo>>>7|n.hi<<25)>>>0,n.hi>>>=7;for(;n.lo>127;)t[e++]=n.lo&127|128,n.lo=n.lo>>>7;t[e++]=n.lo}X.prototype.uint64=function(t){var e=Vi.from(t);return this._push(Uo,e.length(),e)};X.prototype.int64=X.prototype.uint64;X.prototype.sint64=function(t){var e=Vi.from(t).zzEncode();return this._push(Uo,e.length(),e)};X.prototype.bool=function(t){return this._push($o,1,t?1:0)};function Po(n,t,e){t[e]=n&255,t[e+1]=n>>>8&255,t[e+2]=n>>>16&255,t[e+3]=n>>>24}X.prototype.fixed32=function(t){return this._push(Po,4,t>>>0)};X.prototype.sfixed32=X.prototype.fixed32;X.prototype.fixed64=function(t){var e=Vi.from(t);return this._push(Po,4,e.lo)._push(Po,4,e.hi)};X.prototype.sfixed64=X.prototype.fixed64;X.prototype.float=function(t){return this._push($e.float.writeFloatLE,4,t)};X.prototype.double=function(t){return this._push($e.float.writeDoubleLE,8,t)};var fh=$e.Array.prototype.set?function(t,e,i){e.set(t,i)}:function(t,e,i){for(var r=0;r>>0;if(!e)return this._push($o,1,0);if($e.isString(t)){var i=X.alloc(e=oc.length(t));oc.decode(t,i,0),t=i}return this.uint32(e)._push(fh,e,t)};X.prototype.string=function(t){var e=ac.length(t);return e?this.uint32(e)._push(ac.write,e,t):this._push($o,1,0)};X.prototype.fork=function(){return this.states=new ph(this),this.head=this.tail=new ti(Mo,0,0),this.len=0,this};X.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new ti(Mo,0,0),this.len=0),this};X.prototype.ldelim=function(){var t=this.head,e=this.tail,i=this.len;return this.reset().uint32(i),i&&(this.tail.next=t.next,this.tail=e,this.len+=i),this};X.prototype.finish=function(){for(var t=this.head.next,e=this.constructor.alloc(this.len),i=0;t;)t.fn(t.val,e,i),i+=t.len,t=t.next;return e};X._configure=function(n){Lo=n,X.create=sc(),Lo._configure()}});var uc=Y((Yx,pc)=>{"use strict";pc.exports=tt;var cc=Ki();(tt.prototype=Object.create(cc.prototype)).constructor=tt;var Dt=et();function tt(){cc.call(this)}tt._configure=function(){tt.alloc=Dt._Buffer_allocUnsafe,tt.writeBytesBuffer=Dt.Buffer&&Dt.Buffer.prototype instanceof Uint8Array&&Dt.Buffer.prototype.set.name==="set"?function(t,e,i){e.set(t,i)}:function(t,e,i){if(t.copy)t.copy(e,i,0,t.length);else for(var r=0;r>>0;return this.uint32(e),e&&this._push(tt.writeBytesBuffer,e,t),this};function dh(n,t,e){n.length<40?Dt.utf8.write(n,t,e):t.utf8Write?t.utf8Write(n,e):t.write(n,e)}tt.prototype.string=function(t){var e=Dt.Buffer.byteLength(t);return this.uint32(e),e&&this._push(dh,e,t),this};tt._configure()});var Ji=Y((zx,gc)=>{"use strict";gc.exports=se;var ze=et(),Ho,mc=ze.LongBits,mh=ze.utf8;function Ge(n,t){return RangeError("index out of range: "+n.pos+" + "+(t||1)+" > "+n.len)}function se(n){this.buf=n,this.pos=0,this.len=n.length}var fc=typeof Uint8Array!="undefined"?function(t){if(t instanceof Uint8Array||Array.isArray(t))return new se(t);throw Error("illegal buffer")}:function(t){if(Array.isArray(t))return new se(t);throw Error("illegal buffer")},hc=function(){return ze.Buffer?function(e){return(se.create=function(r){return ze.Buffer.isBuffer(r)?new Ho(r):fc(r)})(e)}:fc};se.create=hc();se.prototype._slice=ze.Array.prototype.subarray||ze.Array.prototype.slice;se.prototype.uint32=function(){var t=4294967295;return function(){if(t=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(t=(t|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(t=(t|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(t=(t|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(t=(t|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return t;if((this.pos+=5)>this.len)throw this.pos=this.len,Ge(this,10);return t}}();se.prototype.int32=function(){return this.uint32()|0};se.prototype.sint32=function(){var t=this.uint32();return t>>>1^-(t&1)|0};function jo(){var n=new mc(0,0),t=0;if(this.len-this.pos>4){for(;t<4;++t)if(n.lo=(n.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return n;if(n.lo=(n.lo|(this.buf[this.pos]&127)<<28)>>>0,n.hi=(n.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return n;t=0}else{for(;t<3;++t){if(this.pos>=this.len)throw Ge(this);if(n.lo=(n.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return n}return n.lo=(n.lo|(this.buf[this.pos++]&127)<>>0,n}if(this.len-this.pos>4){for(;t<5;++t)if(n.hi=(n.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return n}else for(;t<5;++t){if(this.pos>=this.len)throw Ge(this);if(n.hi=(n.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return n}throw Error("invalid varint encoding")}se.prototype.bool=function(){return this.uint32()!==0};function Xi(n,t){return(n[t-4]|n[t-3]<<8|n[t-2]<<16|n[t-1]<<24)>>>0}se.prototype.fixed32=function(){if(this.pos+4>this.len)throw Ge(this,4);return Xi(this.buf,this.pos+=4)};se.prototype.sfixed32=function(){if(this.pos+4>this.len)throw Ge(this,4);return Xi(this.buf,this.pos+=4)|0};function dc(){if(this.pos+8>this.len)throw Ge(this,8);return new mc(Xi(this.buf,this.pos+=4),Xi(this.buf,this.pos+=4))}se.prototype.float=function(){if(this.pos+4>this.len)throw Ge(this,4);var t=ze.float.readFloatLE(this.buf,this.pos);return this.pos+=4,t};se.prototype.double=function(){if(this.pos+8>this.len)throw Ge(this,4);var t=ze.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,t};se.prototype.bytes=function(){var t=this.uint32(),e=this.pos,i=this.pos+t;if(i>this.len)throw Ge(this,t);if(this.pos+=t,Array.isArray(this.buf))return this.buf.slice(e,i);if(e===i){var r=ze.Buffer;return r?r.alloc(0):new this.buf.constructor(0)}return this._slice.call(this.buf,e,i)};se.prototype.string=function(){var t=this.bytes();return mh.read(t,0,t.length)};se.prototype.skip=function(t){if(typeof t=="number"){if(this.pos+t>this.len)throw Ge(this,t);this.pos+=t}else do if(this.pos>=this.len)throw Ge(this);while(this.buf[this.pos++]&128);return this};se.prototype.skipType=function(n){switch(n){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(n=this.uint32()&7)!==4;)this.skipType(n);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+n+" at offset "+this.pos)}return this};se._configure=function(n){Ho=n,se.create=hc(),Ho._configure();var t=ze.Long?"toLong":"toNumber";ze.merge(se.prototype,{int64:function(){return jo.call(this)[t](!1)},uint64:function(){return jo.call(this)[t](!0)},sint64:function(){return jo.call(this).zzDecode()[t](!1)},fixed64:function(){return dc.call(this)[t](!0)},sfixed64:function(){return dc.call(this)[t](!1)}})}});var wc=Y((Gx,xc)=>{"use strict";xc.exports=Qt;var bc=Ji();(Qt.prototype=Object.create(bc.prototype)).constructor=Qt;var yc=et();function Qt(n){bc.call(this,n)}Qt._configure=function(){yc.Buffer&&(Qt.prototype._slice=yc.Buffer.prototype.slice)};Qt.prototype.string=function(){var t=this.uint32();return this.buf.utf8Slice?this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+t,this.len)):this.buf.toString("utf-8",this.pos,this.pos=Math.min(this.pos+t,this.len))};Qt._configure()});var Ec=Y((Vx,vc)=>{"use strict";vc.exports=ni;var qo=et();(ni.prototype=Object.create(qo.EventEmitter.prototype)).constructor=ni;function ni(n,t,e){if(typeof n!="function")throw TypeError("rpcImpl must be a function");qo.EventEmitter.call(this),this.rpcImpl=n,this.requestDelimited=Boolean(t),this.responseDelimited=Boolean(e)}ni.prototype.rpcCall=function n(t,e,i,r,o){if(!r)throw TypeError("request must be specified");var a=this;if(!o)return qo.asPromise(n,a,t,e,i,r);if(!a.rpcImpl){setTimeout(function(){o(Error("already ended"))},0);return}try{return a.rpcImpl(t,e[a.requestDelimited?"encodeDelimited":"encode"](r).finish(),function(l,c){if(l)return a.emit("error",l,t),o(l);if(c===null){a.end(!0);return}if(!(c instanceof i))try{c=i[a.responseDelimited?"decodeDelimited":"decode"](c)}catch(p){return a.emit("error",p,t),o(p)}return a.emit("data",c,t),o(null,c)})}catch(s){a.emit("error",s,t),setTimeout(function(){o(s)},0);return}};ni.prototype.end=function(t){return this.rpcImpl&&(t||this.rpcImpl(null,null,null),this.rpcImpl=null,this.emit("end").off()),this}});var Wo=Y(_c=>{"use strict";var hh=_c;hh.Service=Ec()});var Zo=Y((Xx,Tc)=>{"use strict";Tc.exports={}});var Nc=Y(kc=>{"use strict";var Oe=kc;Oe.build="minimal";Oe.Writer=Ki();Oe.BufferWriter=uc();Oe.Reader=Ji();Oe.BufferReader=wc();Oe.util=et();Oe.rpc=Wo();Oe.roots=Zo();Oe.configure=Ac;function Ac(){Oe.util._configure(),Oe.Writer._configure(Oe.BufferWriter),Oe.Reader._configure(Oe.BufferReader)}Ac()});var Rc=Y((Qx,Sc)=>{"use strict";Sc.exports=Yo;function Yo(n,t){typeof n=="string"&&(t=n,n=void 0);var e=[];function i(o){if(typeof o!="string"){var a=r();if(Yo.verbose&&console.log("codegen: "+a),a="return "+a,o){for(var s=Object.keys(o),l=new Array(s.length+1),c=new Array(s.length),p=0;p{"use strict";Oc.exports=ii;var gh=Do(),yh=Co(),zo=yh("fs");function ii(n,t,e){return typeof t=="function"?(e=t,t={}):t||(t={}),e?!t.xhr&&zo&&zo.readFile?zo.readFile(n,function(r,o){return r&&typeof XMLHttpRequest!="undefined"?ii.xhr(n,t,e):r?e(r):e(null,t.binary?o:o.toString("utf8"))}):ii.xhr(n,t,e):gh(ii,this,n,t)}ii.xhr=function(t,e,i){var r=new XMLHttpRequest;r.onreadystatechange=function(){if(r.readyState===4){if(r.status!==0&&r.status!==200)return i(Error("status "+r.status));if(e.binary){var a=r.response;if(!a){a=[];for(var s=0;s{"use strict";var Vo=Ic,Cc=Vo.isAbsolute=function(t){return/^(?:\/|\w+:)/.test(t)},Go=Vo.normalize=function(t){t=t.replace(/\\/g,"/").replace(/\/{2,}/g,"/");var e=t.split("/"),i=Cc(t),r="";i&&(r=e.shift()+"/");for(var o=0;o0&&e[o-1]!==".."?e.splice(--o,2):i?e.splice(o,1):++o:e[o]==="."?e.splice(o,1):++o;return r+e.join("/")};Vo.resolve=function(t,e,i){return i||(e=Go(e)),Cc(e)?e:(i||(t=Go(t)),(t=t.replace(/(?:\/|^)[^/]+$/,"")).length?Go(t+"/"+e):e)}});var en=Y(Lc=>{"use strict";var ri=Lc,bh=ye(),xh=["double","float","int32","uint32","sint32","fixed32","sfixed32","int64","uint64","sint64","fixed64","sfixed64","bool","string","bytes"];function oi(n,t){var e=0,i={};for(t|=0;e{"use strict";$c.exports=Be;var Qi=tn();((Be.prototype=Object.create(Qi.prototype)).constructor=Be).className="Field";var Pc=Ve(),Mc=en(),pe=ye(),Ko,wh=/^required|optional|repeated$/;Be.fromJSON=function(t,e){return new Be(t,e.id,e.type,e.rule,e.extend,e.options,e.comment)};function Be(n,t,e,i,r,o,a){if(pe.isObject(i)?(a=r,o=i,i=r=void 0):pe.isObject(r)&&(a=o,o=r,r=void 0),Qi.call(this,n,o),!pe.isInteger(t)||t<0)throw TypeError("id must be a non-negative integer");if(!pe.isString(e))throw TypeError("type must be a string");if(i!==void 0&&!wh.test(i=i.toString().toLowerCase()))throw TypeError("rule must be a string rule");if(r!==void 0&&!pe.isString(r))throw TypeError("extend must be a string");i==="proto3_optional"&&(i="optional"),this.rule=i&&i!=="optional"?i:void 0,this.type=e,this.id=t,this.extend=r||void 0,this.required=i==="required",this.optional=!this.required,this.repeated=i==="repeated",this.map=!1,this.message=null,this.partOf=null,this.typeDefault=null,this.defaultValue=null,this.long=pe.Long?Mc.long[e]!==void 0:!1,this.bytes=e==="bytes",this.resolvedType=null,this.extensionField=null,this.declaringField=null,this._packed=null,this.comment=a}Object.defineProperty(Be.prototype,"packed",{get:function(){return this._packed===null&&(this._packed=this.getOption("packed")!==!1),this._packed}});Be.prototype.setOption=function(t,e,i){return t==="packed"&&(this._packed=null),Qi.prototype.setOption.call(this,t,e,i)};Be.prototype.toJSON=function(t){var e=t?Boolean(t.keepComments):!1;return pe.toObject(["rule",this.rule!=="optional"&&this.rule||void 0,"type",this.type,"id",this.id,"extend",this.extend,"options",this.options,"comment",e?this.comment:void 0])};Be.prototype.resolve=function(){if(this.resolved)return this;if((this.typeDefault=Mc.defaults[this.type])===void 0?(this.resolvedType=(this.declaringField?this.declaringField.parent:this.parent).lookupTypeOrEnum(this.type),this.resolvedType instanceof Ko?this.typeDefault=null:this.typeDefault=this.resolvedType.values[Object.keys(this.resolvedType.values)[0]]):this.options&&this.options.proto3_optional&&(this.typeDefault=null),this.options&&this.options.default!=null&&(this.typeDefault=this.options.default,this.resolvedType instanceof Pc&&typeof this.typeDefault=="string"&&(this.typeDefault=this.resolvedType.values[this.typeDefault])),this.options&&((this.options.packed===!0||this.options.packed!==void 0&&this.resolvedType&&!(this.resolvedType instanceof Pc))&&delete this.options.packed,Object.keys(this.options).length||(this.options=void 0)),this.long)this.typeDefault=pe.Long.fromNumber(this.typeDefault,this.type.charAt(0)==="u"),Object.freeze&&Object.freeze(this.typeDefault);else if(this.bytes&&typeof this.typeDefault=="string"){var t;pe.base64.test(this.typeDefault)?pe.base64.decode(this.typeDefault,t=pe.newBuffer(pe.base64.length(this.typeDefault)),0):pe.utf8.write(this.typeDefault,t=pe.newBuffer(pe.utf8.length(this.typeDefault)),0),this.typeDefault=t}return this.map?this.defaultValue=pe.emptyObject:this.repeated?this.defaultValue=pe.emptyArray:this.defaultValue=this.typeDefault,this.parent instanceof Ko&&(this.parent.ctor.prototype[this.name]=this.defaultValue),Qi.prototype.resolve.call(this)};Be.d=function(t,e,i,r){return typeof e=="function"?e=pe.decorateType(e).name:e&&typeof e=="object"&&(e=pe.decorateEnum(e).name),function(a,s){pe.decorateType(a.constructor).add(new Be(s,t,e,i,{default:r}))}};Be._configure=function(t){Ko=t}});var vn=Y((rw,jc)=>{"use strict";jc.exports=Ue;var tr=tn();((Ue.prototype=Object.create(tr.prototype)).constructor=Ue).className="OneOf";var Bc=Ct(),er=ye();function Ue(n,t,e,i){if(Array.isArray(t)||(e=t,t=void 0),tr.call(this,n,e),!(t===void 0||Array.isArray(t)))throw TypeError("fieldNames must be an Array");this.oneof=t||[],this.fieldsArray=[],this.comment=i}Ue.fromJSON=function(t,e){return new Ue(t,e.oneof,e.options,e.comment)};Ue.prototype.toJSON=function(t){var e=t?Boolean(t.keepComments):!1;return er.toObject(["options",this.options,"oneof",this.oneof,"comment",e?this.comment:void 0])};function Uc(n){if(n.parent)for(var t=0;t-1&&this.oneof.splice(e,1),t.partOf=null,this};Ue.prototype.onAdd=function(t){tr.prototype.onAdd.call(this,t);for(var e=this,i=0;i{"use strict";Zc.exports=J;var Xo=tn();((J.prototype=Object.create(Xo.prototype)).constructor=J).className="Namespace";var Hc=Ct(),nr=ye(),vh=vn(),En,ai,_n;J.fromJSON=function(t,e){return new J(t,e.options).addJSON(e.nested)};function qc(n,t){if(n&&n.length){for(var e={},i=0;ie)return!0}return!1};J.isReservedName=function(t,e){if(t){for(var i=0;i0;){var r=t.shift();if(i.nested&&i.nested[r]){if(i=i.nested[r],!(i instanceof J))throw Error("path conflicts with non-namespace objects")}else i.add(i=new J(r))}return e&&i.addJSON(e),i};J.prototype.resolveAll=function(){for(var t=this.nestedArray,e=0;e-1)return r}else if(r instanceof J&&(r=r.lookup(t.slice(1),e,!0)))return r}else for(var o=0;o{"use strict";Yc.exports=dt;var Jo=Ct();((dt.prototype=Object.create(Jo.prototype)).constructor=dt).className="MapField";var Eh=en(),si=ye();function dt(n,t,e,i,r,o){if(Jo.call(this,n,t,i,void 0,void 0,r,o),!si.isString(e))throw TypeError("keyType must be a string");this.keyType=e,this.resolvedKeyType=null,this.map=!0}dt.fromJSON=function(t,e){return new dt(t,e.id,e.keyType,e.type,e.options,e.comment)};dt.prototype.toJSON=function(t){var e=t?Boolean(t.keepComments):!1;return si.toObject(["keyType",this.keyType,"type",this.type,"id",this.id,"extend",this.extend,"options",this.options,"comment",e?this.comment:void 0])};dt.prototype.resolve=function(){if(this.resolved)return this;if(Eh.mapKey[this.keyType]===void 0)throw Error("invalid key type: "+this.keyType);return Jo.prototype.resolve.call(this)};dt.d=function(t,e,i){return typeof i=="function"?i=si.decorateType(i).name:i&&typeof i=="object"&&(i=si.decorateEnum(i).name),function(o,a){si.decorateType(o.constructor).add(new dt(a,t,e,i))}}});var rr=Y((sw,zc)=>{"use strict";zc.exports=nn;var Qo=tn();((nn.prototype=Object.create(Qo.prototype)).constructor=nn).className="Method";var An=ye();function nn(n,t,e,i,r,o,a,s,l){if(An.isObject(r)?(a=r,r=o=void 0):An.isObject(o)&&(a=o,o=void 0),!(t===void 0||An.isString(t)))throw TypeError("type must be a string");if(!An.isString(e))throw TypeError("requestType must be a string");if(!An.isString(i))throw TypeError("responseType must be a string");Qo.call(this,n,a),this.type=t||"rpc",this.requestType=e,this.requestStream=r?!0:void 0,this.responseType=i,this.responseStream=o?!0:void 0,this.resolvedRequestType=null,this.resolvedResponseType=null,this.comment=s,this.parsedOptions=l}nn.fromJSON=function(t,e){return new nn(t,e.type,e.requestType,e.responseType,e.requestStream,e.responseStream,e.options,e.comment,e.parsedOptions)};nn.prototype.toJSON=function(t){var e=t?Boolean(t.keepComments):!1;return An.toObject(["type",this.type!=="rpc"&&this.type||void 0,"requestType",this.requestType,"requestStream",this.requestStream,"responseType",this.responseType,"responseStream",this.responseStream,"options",this.options,"comment",e?this.comment:void 0,"parsedOptions",this.parsedOptions])};nn.prototype.resolve=function(){return this.resolved?this:(this.resolvedRequestType=this.parent.lookupType(this.requestType),this.resolvedResponseType=this.parent.lookupType(this.responseType),Qo.prototype.resolve.call(this))}});var or=Y((lw,Vc)=>{"use strict";Vc.exports=je;var It=Tn();((je.prototype=Object.create(It.prototype)).constructor=je).className="Service";var ea=rr(),li=ye(),_h=Wo();function je(n,t){It.call(this,n,t),this.methods={},this._methodsArray=null}je.fromJSON=function(t,e){var i=new je(t,e.options);if(e.methods)for(var r=Object.keys(e.methods),o=0;o{"use strict";Kc.exports=nt;var Th=et();function nt(n){if(n)for(var t=Object.keys(n),e=0;e{"use strict";Jc.exports=Nh;var Ah=Ve(),mt=en(),Xc=ye();function kh(n){return"missing required '"+n.name+"'"}function Nh(n){var t=Xc.codegen(["r","l"],n.name+"$decode")("if(!(r instanceof Reader))")("r=Reader.create(r)")("var c=l===undefined?r.len:r.pos+l,m=new this.ctor"+(n.fieldsArray.filter(function(s){return s.map}).length?",k,value":""))("while(r.pos>>3){");for(var e=0;e>>3){")("case 1: k=r.%s(); break",i.keyType)("case 2:"),mt.basic[r]===void 0?t("value=types[%i].decode(r,r.uint32())",e):t("value=r.%s()",r),t("break")("default:")("r.skipType(tag2&7)")("break")("}")("}"),mt.long[i.keyType]!==void 0?t('%s[typeof k==="object"?util.longToHash(k):k]=value',o):t("%s[k]=value",o)):i.repeated?(t("if(!(%s&&%s.length))",o,o)("%s=[]",o),mt.packed[r]!==void 0&&t("if((t&7)===2){")("var c2=r.uint32()+r.pos")("while(r.pos{"use strict";Qc.exports=Oh;var Sh=Ve(),na=ye();function He(n,t){return n.name+": "+t+(n.repeated&&t!=="array"?"[]":n.map&&t!=="object"?"{k:"+n.keyType+"}":"")+" expected"}function ia(n,t,e,i){if(t.resolvedType)if(t.resolvedType instanceof Sh){n("switch(%s){",i)("default:")("return%j",He(t,"enum value"));for(var r=Object.keys(t.resolvedType.values),o=0;o{"use strict";var ep=tp,ci=Ve(),it=ye();function oa(n,t,e,i){var r=!1;if(t.resolvedType)if(t.resolvedType instanceof ci){n("switch(d%s){",i);for(var o=t.resolvedType.values,a=Object.keys(o),s=0;s>>0",i,i);break;case"int32":case"sint32":case"sfixed32":n("m%s=d%s|0",i,i);break;case"uint64":l=!0;case"int64":case"sint64":case"fixed64":case"sfixed64":n("if(util.Long)")("(m%s=util.Long.fromValue(d%s)).unsigned=%j",i,i,l)('else if(typeof d%s==="string")',i)("m%s=parseInt(d%s,10)",i,i)('else if(typeof d%s==="number")',i)("m%s=d%s",i,i)('else if(typeof d%s==="object")',i)("m%s=new util.LongBits(d%s.low>>>0,d%s.high>>>0).toNumber(%s)",i,i,i,l?"true":"");break;case"bytes":n('if(typeof d%s==="string")',i)("util.base64.decode(d%s,m%s=util.newBuffer(util.base64.length(d%s)),0)",i,i,i)("else if(d%s.length >= 0)",i)("m%s=d%s",i,i);break;case"string":n("m%s=String(d%s)",i,i);break;case"bool":n("m%s=Boolean(d%s)",i,i);break}}return n}ep.fromObject=function(t){var e=t.fieldsArray,i=it.codegen(["d"],t.name+"$fromObject")("if(d instanceof this.ctor)")("return d");if(!e.length)return i("return new this.ctor");i("var m=new this.ctor");for(var r=0;r>>0,m%s.high>>>0).toNumber(%s):m%s",i,i,i,i,r?"true":"",i);break;case"bytes":n("d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s",i,i,i,i,i);break;default:n("d%s=m%s",i,i);break}}return n}ep.toObject=function(t){var e=t.fieldsArray.slice().sort(it.compareFieldsById);if(!e.length)return it.codegen()("return {}");for(var i=it.codegen(["m","o"],t.name+"$toObject")("if(!o)")("o={}")("var d={}"),r=[],o=[],a=[],s=0;s{"use strict";var Dh=np,Ch=ar();Dh[".google.protobuf.Any"]={fromObject:function(n){if(n&&n["@type"]){var t=n["@type"].substring(n["@type"].lastIndexOf("/")+1),e=this.lookup(t);if(e){var i=n["@type"].charAt(0)==="."?n["@type"].slice(1):n["@type"];return i.indexOf("/")===-1&&(i="/"+i),this.create({type_url:i,value:e.encode(e.fromObject(n)).finish()})}}return this.fromObject(n)},toObject:function(n,t){var e="type.googleapis.com/",i="",r="";if(t&&t.json&&n.type_url&&n.value){r=n.type_url.substring(n.type_url.lastIndexOf("/")+1),i=n.type_url.substring(0,n.type_url.lastIndexOf("/")+1);var o=this.lookup(r);o&&(n=o.decode(n.value))}if(!(n instanceof this.ctor)&&n instanceof Ch){var a=n.$type.toObject(n,t),s=n.$type.fullName[0]==="."?n.$type.fullName.slice(1):n.$type.fullName;return i===""&&(i=e),r=i+s,a["@type"]=r,a}return this.toObject(n,t)}}});var cr=Y((mw,rp)=>{"use strict";rp.exports=ne;var Ke=Tn();((ne.prototype=Object.create(Ke.prototype)).constructor=ne).className="Type";var Ih=Ve(),ua=vn(),sr=Ct(),Fh=ir(),Lh=or(),ca=ar(),pa=Ji(),Ph=Ki(),ve=ye(),Mh=fa(),$h=ta(),Bh=ra(),ip=sa(),Uh=la();function ne(n,t){Ke.call(this,n,t),this.fields={},this.oneofs=void 0,this.extensions=void 0,this.reserved=void 0,this.group=void 0,this._fieldsById=null,this._fieldsArray=null,this._oneofsArray=null,this._ctor=null}Object.defineProperties(ne.prototype,{fieldsById:{get:function(){if(this._fieldsById)return this._fieldsById;this._fieldsById={};for(var n=Object.keys(this.fields),t=0;t{"use strict";cp.exports=Ce;var ur=Tn();((Ce.prototype=Object.create(ur.prototype)).constructor=Ce).className="Root";var ma=Ct(),ap=Ve(),jh=vn(),Ft=ye(),sp,da,pi;function Ce(n){ur.call(this,"",n),this.deferred=[],this.files=[]}Ce.fromJSON=function(t,e){return e||(e=new Ce),t.options&&e.setOptions(t.options),e.addJSON(t.nested)};Ce.prototype.resolvePath=Ft.path.resolve;Ce.prototype.fetch=Ft.fetch;function lp(){}Ce.prototype.load=function n(t,e,i){typeof e=="function"&&(i=e,e=void 0);var r=this;if(!i)return Ft.asPromise(n,r,t,e);var o=i===lp;function a(w,E){if(i){var d=i;if(i=null,o)throw w;d(w,E)}}function s(w){var E=w.lastIndexOf("google/protobuf/");if(E>-1){var d=w.substring(E);if(d in pi)return d}return null}function l(w,E){try{if(Ft.isString(E)&&E.charAt(0)==="{"&&(E=JSON.parse(E)),!Ft.isString(E))r.setOptions(E.options).addJSON(E.nested);else{da.filename=w;var d=da(E,r,e),f,g=0;if(d.imports)for(;g-1)){if(r.files.push(w),w in pi){o?l(w,pi[w]):(++p,setTimeout(function(){--p,l(w,pi[w])}));return}if(o){var d;try{d=Ft.fs.readFileSync(w).toString("utf8")}catch(f){E||a(f);return}l(w,d)}else++p,r.fetch(w,function(f,g){if(--p,!!i){if(f){E?p||a(null,r):a(f);return}l(w,g)}})}}var p=0;Ft.isString(t)&&(t=[t]);for(var m=0,y;m-1&&this.deferred.splice(e,1)}}else if(t instanceof ap)pr.test(t.name)&&delete t.parent[t.name];else if(t instanceof ur){for(var i=0;i{"use strict";var le=up.exports=et(),pp=Zo(),ha,ga;le.codegen=Rc();le.fetch=Dc();le.path=Fc();le.fs=le.inquire("fs");le.toArray=function(t){if(t){for(var e=Object.keys(t),i=new Array(e.length),r=0;r0)o[l]=r(o[l]||{},a,s);else{var c=o[l];c&&(s=[].concat(c).concat(s)),o[l]=s}return o}if(typeof t!="object")throw TypeError("dst must be an object");if(!e)throw TypeError("path must be specified");return e=e.split("."),r(t,e,i)};Object.defineProperty(le,"decorateRoot",{get:function(){return pp.decorated||(pp.decorated=new(fr()))}})});var tn=Y((yw,fp)=>{"use strict";fp.exports=Ie;Ie.className="ReflectionObject";var dr=ye(),mr;function Ie(n,t){if(!dr.isString(n))throw TypeError("name must be a string");if(t&&!dr.isObject(t))throw TypeError("options must be an object");this.options=t,this.parsedOptions=null,this.name=n,this.parent=null,this.resolved=!1,this.comment=null,this.filename=null}Object.defineProperties(Ie.prototype,{root:{get:function(){for(var n=this;n.parent!==null;)n=n.parent;return n}},fullName:{get:function(){for(var n=[this.name],t=this.parent;t;)n.unshift(t.name),t=t.parent;return n.join(".")}}});Ie.prototype.toJSON=function(){throw Error()};Ie.prototype.onAdd=function(t){this.parent&&this.parent!==t&&this.parent.remove(this),this.parent=t,this.resolved=!1;var e=t.root;e instanceof mr&&e._handleAdd(this)};Ie.prototype.onRemove=function(t){var e=t.root;e instanceof mr&&e._handleRemove(this),this.parent=null,this.resolved=!1};Ie.prototype.resolve=function(){return this.resolved?this:(this.root instanceof mr&&(this.resolved=!0),this)};Ie.prototype.getOption=function(t){if(this.options)return this.options[t]};Ie.prototype.setOption=function(t,e,i){return(!i||!this.options||this.options[t]===void 0)&&((this.options||(this.options={}))[t]=e),this};Ie.prototype.setParsedOption=function(t,e,i){this.parsedOptions||(this.parsedOptions=[]);var r=this.parsedOptions;if(i){var o=r.find(function(l){return Object.prototype.hasOwnProperty.call(l,t)});if(o){var a=o[t];dr.setProperty(a,i,e)}else o={},o[t]=dr.setProperty({},i,e),r.push(o)}else{var s={};s[t]=e,r.push(s)}return this};Ie.prototype.setOptions=function(t,e){if(t)for(var i=Object.keys(t),r=0;r{"use strict";hp.exports=rt;var dp=tn();((rt.prototype=Object.create(dp.prototype)).constructor=rt).className="Enum";var mp=Tn(),hr=ye();function rt(n,t,e,i,r,o){if(dp.call(this,n,e),t&&typeof t!="object")throw TypeError("values must be an object");if(this.valuesById={},this.values=Object.create(this.valuesById),this.comment=i,this.comments=r||{},this.valuesOptions=o,this.reserved=void 0,t)for(var a=Object.keys(t),s=0;s{"use strict";yp.exports=zh;var Yh=Ve(),ya=en(),ba=ye();function gp(n,t,e,i){return t.resolvedType.group?n("types[%i].encode(%s,w.uint32(%i)).uint32(%i)",e,i,(t.id<<3|3)>>>0,(t.id<<3|4)>>>0):n("types[%i].encode(%s,w.uint32(%i).fork()).ldelim()",e,i,(t.id<<3|2)>>>0)}function zh(n){for(var t=ba.codegen(["m","w"],n.name+"$encode")("if(!w)")("w=Writer.create()"),e,i,r=n.fieldsArray.slice().sort(ba.compareFieldsById),e=0;e>>0,8|ya.mapKey[o.keyType],o.keyType),l===void 0?t("types[%i].encode(%s[ks[i]],w.uint32(18).fork()).ldelim().ldelim()",a,i):t(".uint32(%i).%s(%s[ks[i]]).ldelim()",16|l,s,i),t("}")("}")):o.repeated?(t("if(%s!=null&&%s.length){",i,i),o.packed&&ya.packed[s]!==void 0?t("w.uint32(%i).fork()",(o.id<<3|2)>>>0)("for(var i=0;i<%s.length;++i)",i)("w.%s(%s[i])",s,i)("w.ldelim()"):(t("for(var i=0;i<%s.length;++i)",i),l===void 0?gp(t,o,a,i+"[i]"):t("w.uint32(%i).%s(%s[i])",(o.id<<3|l)>>>0,s,i)),t("}")):(o.optional&&t("if(%s!=null&&Object.hasOwnProperty.call(m,%j))",i,o.name),l===void 0?gp(t,o,a,i):t("w.uint32(%i).%s(%s)",(o.id<<3|l)>>>0,s,i))}return t("return w")}});var xp=Y((ww,bp)=>{"use strict";var V=bp.exports=Nc();V.build="light";function Gh(n,t,e){return typeof t=="function"?(e=t,t=new V.Root):t||(t=new V.Root),t.load(n,e)}V.load=Gh;function Vh(n,t){return t||(t=new V.Root),t.loadSync(n)}V.loadSync=Vh;V.encoder=fa();V.decoder=ta();V.verifier=ra();V.converter=sa();V.ReflectionObject=tn();V.Namespace=Tn();V.Root=fr();V.Enum=Ve();V.Type=cr();V.Field=Ct();V.OneOf=vn();V.MapField=ir();V.Service=or();V.Method=rr();V.Message=ar();V.wrappers=la();V.types=en();V.util=ye();V.ReflectionObject._configure(V.Root);V.Namespace._configure(V.Type,V.Service,V.Enum);V.Root._configure(V.Type);V.Field._configure(V.Type)});var wa=Y((vw,Ep)=>{"use strict";Ep.exports=vp;var xa=/[\s{}=;:[\],'"()<>]/g,Kh=/(?:"([^"\\]*(?:\\.[^"\\]*)*)")/g,Xh=/(?:'([^'\\]*(?:\\.[^'\\]*)*)')/g,Jh=/^ *[*/]+ */,Qh=/^\s*\*?\/*/,eg=/\n/g,tg=/\s/,ng=/\\(.?)/g,ig={0:"\0",r:"\r",n:` +`,t:" "};function wp(n){return n.replace(ng,function(t,e){switch(e){case"\\":case"":return e;default:return ig[e]||""}})}vp.unescape=wp;function vp(n,t){n=n.toString();var e=0,i=n.length,r=1,o=0,a={},s=[],l=null;function c(A){return Error("illegal "+A+" (line "+r+")")}function p(){var A=l==="'"?Xh:Kh;A.lastIndex=e-1;var D=A.exec(n);if(!D)throw c("string");return e=A.lastIndex,f(l),l=null,wp(D[1])}function m(A){return n.charAt(A)}function y(A,D,T){var k={type:n.charAt(A++),lineEmpty:!1,leading:T},b;t?b=2:b=3;var C=A-b,O;do if(--C<0||(O=n.charAt(C))===` +`){k.lineEmpty=!0;break}while(O===" "||O===" ");for(var S=n.substring(A,D).split(eg),M=0;M0)return s.shift();if(l)return p();var A,D,T,k,b,C=e===0;do{if(e===i)return null;for(A=!1;tg.test(T=m(e));)if(T===` +`&&(C=!0,++r),++e===i)return null;if(m(e)==="/"){if(++e===i)throw c("comment");if(m(e)==="/")if(t){if(k=e,b=!1,w(e-1)){b=!0;do if(e=E(e),e===i||(e++,!C))break;while(w(e))}else e=Math.min(i,E(e)+1);b&&(y(k,e,C),C=!0),r++,A=!0}else{for(b=m(k=e+1)==="/";m(++e)!==` +`;)if(e===i)return null;++e,b&&(y(k,e-1,C),C=!0),++r,A=!0}else if((T=m(e))==="*"){k=e+1,b=t||m(k)==="*";do{if(T===` +`&&++r,++e===i)throw c("comment");D=T,T=m(e)}while(D!=="*"||T!=="/");++e,b&&(y(k,e-2,C),C=!0),A=!0}else return"/"}}while(A);var O=e;xa.lastIndex=0;var S=xa.test(m(O++));if(!S)for(;O{"use strict";Np.exports=ht;ht.filename=null;ht.defaults={keepCase:!1};var rg=wa(),_p=fr(),Tp=cr(),Ap=Ct(),og=ir(),kp=vn(),ag=Ve(),sg=or(),lg=rr(),va=en(),Ea=ye(),cg=/^[1-9][0-9]*$/,pg=/^-?[1-9][0-9]*$/,ug=/^0[x][0-9a-fA-F]+$/,fg=/^-?0[x][0-9a-fA-F]+$/,dg=/^0[0-7]+$/,mg=/^-?0[0-7]+$/,hg=/^(?![eE])[0-9]*(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?$/,ot=/^[a-zA-Z_][a-zA-Z_0-9]*$/,at=/^(?:\.?[a-zA-Z_][a-zA-Z_0-9]*)(?:\.[a-zA-Z_][a-zA-Z_0-9]*)*$/,gg=/^(?:\.[a-zA-Z_][a-zA-Z_0-9]*)+$/;function ht(n,t,e){t instanceof _p||(e=t,t=new _p),e||(e=ht.defaults);var i=e.preferTrailingComment||!1,r=rg(n,e.alternateCommentMode||!1),o=r.next,a=r.push,s=r.peek,l=r.skip,c=r.cmnt,p=!0,m,y,w,E,d=!1,f=t,g=e.keepCase?function(x){return x}:Ea.camelCase;function v(x,N,I){var P=ht.filename;return I||(ht.filename=null),Error("illegal "+(N||"token")+" '"+x+"' ("+(P?P+", ":"")+"line "+r.line+")")}function _(){var x=[],N;do{if((N=o())!=='"'&&N!=="'")throw v(N);x.push(o()),l(N),N=s()}while(N==='"'||N==="'");return x.join("")}function A(x){var N=o();switch(N){case"'":case'"':return a(N),_();case"true":case"TRUE":return!0;case"false":case"FALSE":return!1}try{return T(N,!0)}catch(I){if(x&&at.test(N))return N;throw v(N,"value")}}function D(x,N){var I,P;do N&&((I=s())==='"'||I==="'")?x.push(_()):x.push([P=k(o()),l("to",!0)?k(o()):P]);while(l(",",!0));l(";")}function T(x,N){var I=1;switch(x.charAt(0)==="-"&&(I=-1,x=x.substring(1)),x){case"inf":case"INF":case"Inf":return I*(1/0);case"nan":case"NAN":case"Nan":case"NaN":return NaN;case"0":return 0}if(cg.test(x))return I*parseInt(x,10);if(ug.test(x))return I*parseInt(x,16);if(dg.test(x))return I*parseInt(x,8);if(hg.test(x))return I*parseFloat(x);throw v(x,"number",N)}function k(x,N){switch(x){case"max":case"MAX":case"Max":return 536870911;case"0":return 0}if(!N&&x.charAt(0)==="-")throw v(x,"id");if(pg.test(x))return parseInt(x,10);if(fg.test(x))return parseInt(x,16);if(mg.test(x))return parseInt(x,8);throw v(x,"id")}function b(){if(m!==void 0)throw v("package");if(m=o(),!at.test(m))throw v(m,"name");f=f.define(m),l(";")}function C(){var x=s(),N;switch(x){case"weak":N=w||(w=[]),o();break;case"public":o();default:N=y||(y=[]);break}x=_(),l(";"),N.push(x)}function O(){if(l("="),E=_(),d=E==="proto3",!d&&E!=="proto2")throw v(E,"syntax");l(";")}function S(x,N){switch(N){case"option":return U(x,N),l(";"),!0;case"message":return L(x,N),!0;case"enum":return z(x,N),!0;case"service":return pn(x,N),!0;case"extend":return u(x,N),!0}return!1}function M(x,N,I){var P=r.line;if(x&&(typeof x.comment!="string"&&(x.comment=c()),x.filename=ht.filename),l("{",!0)){for(var $;($=o())!=="}";)N($);l(";",!0)}else I&&I(),l(";"),x&&(typeof x.comment!="string"||i)&&(x.comment=c(P)||x.comment)}function L(x,N){if(!ot.test(N=o()))throw v(N,"type name");var I=new Tp(N);M(I,function($){if(!S(I,$))switch($){case"map":F(I,$);break;case"required":case"repeated":j(I,$);break;case"optional":d?j(I,"proto3_optional"):j(I,"optional");break;case"oneof":ee(I,$);break;case"extensions":D(I.extensions||(I.extensions=[]));break;case"reserved":D(I.reserved||(I.reserved=[]),!0);break;default:if(!d||!at.test($))throw v($);a($),j(I,"optional");break}}),x.add(I)}function j(x,N,I){var P=o();if(P==="group"){Z(x,N);return}for(;P.endsWith(".")||s().startsWith(".");)P+=o();if(!at.test(P))throw v(P,"type");var $=o();if(!ot.test($))throw v($,"name");$=g($),l("=");var W=new Ap($,k(o()),P,N,I);if(M(W,function(oe){if(oe==="option")U(W,oe),l(";");else throw v(oe)},function(){lt(W)}),N==="proto3_optional"){var ie=new kp("_"+$);W.setOption("proto3_optional",!0),ie.add(W),x.add(ie)}else x.add(W);!d&&W.repeated&&(va.packed[P]!==void 0||va.basic[P]===void 0)&&W.setOption("packed",!1,!0)}function Z(x,N){var I=o();if(!ot.test(I))throw v(I,"name");var P=Ea.lcFirst(I);I===P&&(I=Ea.ucFirst(I)),l("=");var $=k(o()),W=new Tp(I);W.group=!0;var ie=new Ap(P,$,I,N);ie.filename=ht.filename,M(W,function(oe){switch(oe){case"option":U(W,oe),l(";");break;case"required":case"repeated":j(W,oe);break;case"optional":d?j(W,"proto3_optional"):j(W,"optional");break;case"message":L(W,oe);break;case"enum":z(W,oe);break;default:throw v(oe)}}),x.add(W).add(ie)}function F(x){l("<");var N=o();if(va.mapKey[N]===void 0)throw v(N,"type");l(",");var I=o();if(!at.test(I))throw v(I,"type");l(">");var P=o();if(!ot.test(P))throw v(P,"name");l("=");var $=new og(g(P),k(o()),N,I);M($,function(ie){if(ie==="option")U($,ie),l(";");else throw v(ie)},function(){lt($)}),x.add($)}function ee(x,N){if(!ot.test(N=o()))throw v(N,"name");var I=new kp(g(N));M(I,function($){$==="option"?(U(I,$),l(";")):(a($),j(I,"optional"))}),x.add(I)}function z(x,N){if(!ot.test(N=o()))throw v(N,"name");var I=new ag(N);M(I,function($){switch($){case"option":U(I,$),l(";");break;case"reserved":D(I.reserved||(I.reserved=[]),!0);break;default:We(I,$)}}),x.add(I)}function We(x,N){if(!ot.test(N))throw v(N,"name");l("=");var I=k(o(),!0),P={options:void 0};P.setOption=function($,W){this.options===void 0&&(this.options={}),this.options[$]=W},M(P,function(W){if(W==="option")U(P,W),l(";");else throw v(W)},function(){lt(P)}),x.add(N,I,P.comment,P.options)}function U(x,N){var I=l("(",!0);if(!at.test(N=o()))throw v(N,"name");var P=N,$=P,W;I&&(l(")"),P="("+P+")",$=P,N=s(),gg.test(N)&&(W=N.slice(1),P+=N,o())),l("=");var ie=Ne(x,P);Q(x,$,ie,W)}function Ne(x,N){if(l("{",!0)){for(var I={};!l("}",!0);){if(!ot.test(R=o()))throw v(R,"name");if(R===null)throw v(R,"end of input");var P,$=R;if(l(":",!0),s()==="{")P=Ne(x,N+"."+R);else if(s()==="["){P=[];var W;if(l("[",!0)){do W=A(!0),P.push(W);while(l(",",!0));l("]"),typeof W!="undefined"&&G(x,N+"."+R,W)}}else P=A(!0),G(x,N+"."+R,P);var ie=I[$];ie&&(P=[].concat(ie).concat(P)),I[$]=P,l(",",!0),l(";",!0)}return I}var te=A(!0);return G(x,N,te),te}function G(x,N,I){x.setOption&&x.setOption(N,I)}function Q(x,N,I,P){x.setParsedOption&&x.setParsedOption(N,I,P)}function lt(x){if(l("[",!0)){do U(x,"option");while(l(",",!0));l("]")}return x}function pn(x,N){if(!ot.test(N=o()))throw v(N,"service name");var I=new sg(N);M(I,function($){if(!S(I,$))if($==="rpc")h(I,$);else throw v($)}),x.add(I)}function h(x,N){var I=c(),P=N;if(!ot.test(N=o()))throw v(N,"name");var $=N,W,ie,te,oe;if(l("("),l("stream",!0)&&(ie=!0),!at.test(N=o())||(W=N,l(")"),l("returns"),l("("),l("stream",!0)&&(oe=!0),!at.test(N=o())))throw v(N);te=N,l(")");var un=new lg($,P,W,te,ie,oe);un.comment=I,M(un,function(qt){if(qt==="option")U(un,qt),l(";");else throw v(qt)}),x.add(un)}function u(x,N){if(!at.test(N=o()))throw v(N,"reference");var I=N;M(null,function($){switch($){case"required":case"repeated":j(x,$,I);break;case"optional":d?j(x,"proto3_optional",I):j(x,"optional",I);break;default:if(!d||!at.test($))throw v($);a($),j(x,"optional",I);break}})}for(var R;(R=o())!==null;)switch(R){case"package":if(!p)throw v(R);b();break;case"import":if(!p)throw v(R);C();break;case"syntax":if(!p)throw v(R);O();break;case"option":U(f,R),l(";");break;default:if(S(f,R)){p=!1;continue}throw v(R)}return ht.filename=null,{package:m,imports:y,weakImports:w,syntax:E,root:t}}});var Dp=Y((_w,Op)=>{"use strict";Op.exports=Xe;var yg=/\/|\./;function Xe(n,t){yg.test(n)||(n="google/protobuf/"+n+".proto",t={nested:{google:{nested:{protobuf:{nested:t}}}}}),Xe[n]=t}Xe("any",{Any:{fields:{type_url:{type:"string",id:1},value:{type:"bytes",id:2}}}});var Rp;Xe("duration",{Duration:Rp={fields:{seconds:{type:"int64",id:1},nanos:{type:"int32",id:2}}}});Xe("timestamp",{Timestamp:Rp});Xe("empty",{Empty:{fields:{}}});Xe("struct",{Struct:{fields:{fields:{keyType:"string",type:"Value",id:1}}},Value:{oneofs:{kind:{oneof:["nullValue","numberValue","stringValue","boolValue","structValue","listValue"]}},fields:{nullValue:{type:"NullValue",id:1},numberValue:{type:"double",id:2},stringValue:{type:"string",id:3},boolValue:{type:"bool",id:4},structValue:{type:"Struct",id:5},listValue:{type:"ListValue",id:6}}},NullValue:{values:{NULL_VALUE:0}},ListValue:{fields:{values:{rule:"repeated",type:"Value",id:1}}}});Xe("wrappers",{DoubleValue:{fields:{value:{type:"double",id:1}}},FloatValue:{fields:{value:{type:"float",id:1}}},Int64Value:{fields:{value:{type:"int64",id:1}}},UInt64Value:{fields:{value:{type:"uint64",id:1}}},Int32Value:{fields:{value:{type:"int32",id:1}}},UInt32Value:{fields:{value:{type:"uint32",id:1}}},BoolValue:{fields:{value:{type:"bool",id:1}}},StringValue:{fields:{value:{type:"string",id:1}}},BytesValue:{fields:{value:{type:"bytes",id:1}}}});Xe("field_mask",{FieldMask:{fields:{paths:{rule:"repeated",type:"string",id:1}}}});Xe.get=function(t){return Xe[t]||null}});var Ip=Y((Tw,Cp)=>{"use strict";var Lt=Cp.exports=xp();Lt.build="full";Lt.tokenize=wa();Lt.parse=Sp();Lt.common=Dp();Lt.Root._configure(Lt.Type,Lt.parse,Lt.common)});var Lp=Y((Aw,Fp)=>{"use strict";Fp.exports=Ip()});var Df=Y(Rr=>{(function(n){n.parser=function(h,u){return new e(h,u)},n.SAXParser=e,n.SAXStream=c,n.createStream=l,n.MAX_BUFFER_LENGTH=64*1024;var t=["comment","sgmlDecl","textNode","tagName","doctype","procInstName","procInstBody","entity","attribName","attribValue","cdata","script"];n.EVENTS=["text","processinginstruction","sgmldeclaration","doctype","comment","opentagstart","attribute","opentag","closetag","opencdata","cdata","closecdata","error","end","ready","script","opennamespace","closenamespace"];function e(h,u){if(!(this instanceof e))return new e(h,u);var R=this;r(R),R.q=R.c="",R.bufferCheckPosition=n.MAX_BUFFER_LENGTH,R.opt=u||{},R.opt.lowercase=R.opt.lowercase||R.opt.lowercasetags,R.looseCase=R.opt.lowercase?"toLowerCase":"toUpperCase",R.tags=[],R.closed=R.closedRoot=R.sawRoot=!1,R.tag=R.error=null,R.strict=!!h,R.noscript=!!(h||R.opt.noscript),R.state=b.BEGIN,R.strictEntities=R.opt.strictEntities,R.ENTITIES=R.strictEntities?Object.create(n.XML_ENTITIES):Object.create(n.ENTITIES),R.attribList=[],R.opt.xmlns&&(R.ns=Object.create(E)),R.trackPosition=R.opt.position!==!1,R.trackPosition&&(R.position=R.line=R.column=0),O(R,"onready")}Object.create||(Object.create=function(h){function u(){}u.prototype=h;var R=new u;return R}),Object.keys||(Object.keys=function(h){var u=[];for(var R in h)h.hasOwnProperty(R)&&u.push(R);return u});function i(h){for(var u=Math.max(n.MAX_BUFFER_LENGTH,10),R=0,x=0,N=t.length;xu)switch(t[x]){case"textNode":M(h);break;case"cdata":S(h,"oncdata",h.cdata),h.cdata="";break;case"script":S(h,"onscript",h.script),h.script="";break;default:j(h,"Max buffer length exceeded: "+t[x])}R=Math.max(R,I)}var P=n.MAX_BUFFER_LENGTH-R;h.bufferCheckPosition=P+h.position}function r(h){for(var u=0,R=t.length;u"||_(h)}function T(h,u){return h.test(u)}function k(h,u){return!T(h,u)}var b=0;n.STATE={BEGIN:b++,BEGIN_WHITESPACE:b++,TEXT:b++,TEXT_ENTITY:b++,OPEN_WAKA:b++,SGML_DECL:b++,SGML_DECL_QUOTED:b++,DOCTYPE:b++,DOCTYPE_QUOTED:b++,DOCTYPE_DTD:b++,DOCTYPE_DTD_QUOTED:b++,COMMENT_STARTING:b++,COMMENT:b++,COMMENT_ENDING:b++,COMMENT_ENDED:b++,CDATA:b++,CDATA_ENDING:b++,CDATA_ENDING_2:b++,PROC_INST:b++,PROC_INST_BODY:b++,PROC_INST_ENDING:b++,OPEN_TAG:b++,OPEN_TAG_SLASH:b++,ATTRIB:b++,ATTRIB_NAME:b++,ATTRIB_NAME_SAW_WHITE:b++,ATTRIB_VALUE:b++,ATTRIB_VALUE_QUOTED:b++,ATTRIB_VALUE_CLOSED:b++,ATTRIB_VALUE_UNQUOTED:b++,ATTRIB_VALUE_ENTITY_Q:b++,ATTRIB_VALUE_ENTITY_U:b++,CLOSE_TAG:b++,CLOSE_TAG_SAW_WHITE:b++,SCRIPT:b++,SCRIPT_ENDING:b++},n.XML_ENTITIES={amp:"&",gt:">",lt:"<",quot:'"',apos:"'"},n.ENTITIES={amp:"&",gt:">",lt:"<",quot:'"',apos:"'",AElig:198,Aacute:193,Acirc:194,Agrave:192,Aring:197,Atilde:195,Auml:196,Ccedil:199,ETH:208,Eacute:201,Ecirc:202,Egrave:200,Euml:203,Iacute:205,Icirc:206,Igrave:204,Iuml:207,Ntilde:209,Oacute:211,Ocirc:212,Ograve:210,Oslash:216,Otilde:213,Ouml:214,THORN:222,Uacute:218,Ucirc:219,Ugrave:217,Uuml:220,Yacute:221,aacute:225,acirc:226,aelig:230,agrave:224,aring:229,atilde:227,auml:228,ccedil:231,eacute:233,ecirc:234,egrave:232,eth:240,euml:235,iacute:237,icirc:238,igrave:236,iuml:239,ntilde:241,oacute:243,ocirc:244,ograve:242,oslash:248,otilde:245,ouml:246,szlig:223,thorn:254,uacute:250,ucirc:251,ugrave:249,uuml:252,yacute:253,yuml:255,copy:169,reg:174,nbsp:160,iexcl:161,cent:162,pound:163,curren:164,yen:165,brvbar:166,sect:167,uml:168,ordf:170,laquo:171,not:172,shy:173,macr:175,deg:176,plusmn:177,sup1:185,sup2:178,sup3:179,acute:180,micro:181,para:182,middot:183,cedil:184,ordm:186,raquo:187,frac14:188,frac12:189,frac34:190,iquest:191,times:215,divide:247,OElig:338,oelig:339,Scaron:352,scaron:353,Yuml:376,fnof:402,circ:710,tilde:732,Alpha:913,Beta:914,Gamma:915,Delta:916,Epsilon:917,Zeta:918,Eta:919,Theta:920,Iota:921,Kappa:922,Lambda:923,Mu:924,Nu:925,Xi:926,Omicron:927,Pi:928,Rho:929,Sigma:931,Tau:932,Upsilon:933,Phi:934,Chi:935,Psi:936,Omega:937,alpha:945,beta:946,gamma:947,delta:948,epsilon:949,zeta:950,eta:951,theta:952,iota:953,kappa:954,lambda:955,mu:956,nu:957,xi:958,omicron:959,pi:960,rho:961,sigmaf:962,sigma:963,tau:964,upsilon:965,phi:966,chi:967,psi:968,omega:969,thetasym:977,upsih:978,piv:982,ensp:8194,emsp:8195,thinsp:8201,zwnj:8204,zwj:8205,lrm:8206,rlm:8207,ndash:8211,mdash:8212,lsquo:8216,rsquo:8217,sbquo:8218,ldquo:8220,rdquo:8221,bdquo:8222,dagger:8224,Dagger:8225,bull:8226,hellip:8230,permil:8240,prime:8242,Prime:8243,lsaquo:8249,rsaquo:8250,oline:8254,frasl:8260,euro:8364,image:8465,weierp:8472,real:8476,trade:8482,alefsym:8501,larr:8592,uarr:8593,rarr:8594,darr:8595,harr:8596,crarr:8629,lArr:8656,uArr:8657,rArr:8658,dArr:8659,hArr:8660,forall:8704,part:8706,exist:8707,empty:8709,nabla:8711,isin:8712,notin:8713,ni:8715,prod:8719,sum:8721,minus:8722,lowast:8727,radic:8730,prop:8733,infin:8734,ang:8736,and:8743,or:8744,cap:8745,cup:8746,int:8747,there4:8756,sim:8764,cong:8773,asymp:8776,ne:8800,equiv:8801,le:8804,ge:8805,sub:8834,sup:8835,nsub:8836,sube:8838,supe:8839,oplus:8853,otimes:8855,perp:8869,sdot:8901,lceil:8968,rceil:8969,lfloor:8970,rfloor:8971,lang:9001,rang:9002,loz:9674,spades:9824,clubs:9827,hearts:9829,diams:9830},Object.keys(n.ENTITIES).forEach(function(h){var u=n.ENTITIES[h],R=typeof u=="number"?String.fromCharCode(u):u;n.ENTITIES[h]=R});for(var C in n.STATE)n.STATE[n.STATE[C]]=C;b=n.STATE;function O(h,u,R){h[u]&&h[u](R)}function S(h,u,R){h.textNode&&M(h),O(h,u,R)}function M(h){h.textNode=L(h.opt,h.textNode),h.textNode&&O(h,"ontext",h.textNode),h.textNode=""}function L(h,u){return h.trim&&(u=u.trim()),h.normalize&&(u=u.replace(/\s+/g," ")),u}function j(h,u){return M(h),h.trackPosition&&(u+=` +Line: `+h.line+` +Column: `+h.column+` +Char: `+h.c),u=new Error(u),h.error=u,O(h,"onerror",u),h}function Z(h){return h.sawRoot&&!h.closedRoot&&F(h,"Unclosed root tag"),h.state!==b.BEGIN&&h.state!==b.BEGIN_WHITESPACE&&h.state!==b.TEXT&&j(h,"Unexpected end"),M(h),h.c="",h.closed=!0,O(h,"onend"),e.call(h,h.strict,h.opt),h}function F(h,u){if(typeof h!="object"||!(h instanceof e))throw new Error("bad call to strictFail");h.strict&&j(h,u)}function ee(h){h.strict||(h.tagName=h.tagName[h.looseCase]());var u=h.tags[h.tags.length-1]||h,R=h.tag={name:h.tagName,attributes:{}};h.opt.xmlns&&(R.ns=u.ns),h.attribList.length=0,S(h,"onopentagstart",R)}function z(h,u){var R=h.indexOf(":"),x=R<0?["",h]:h.split(":"),N=x[0],I=x[1];return u&&h==="xmlns"&&(N="xmlns",I=""),{prefix:N,local:I}}function We(h){if(h.strict||(h.attribName=h.attribName[h.looseCase]()),h.attribList.indexOf(h.attribName)!==-1||h.tag.attributes.hasOwnProperty(h.attribName)){h.attribName=h.attribValue="";return}if(h.opt.xmlns){var u=z(h.attribName,!0),R=u.prefix,x=u.local;if(R==="xmlns")if(x==="xml"&&h.attribValue!==y)F(h,"xml: prefix must be bound to "+y+` +Actual: `+h.attribValue);else if(x==="xmlns"&&h.attribValue!==w)F(h,"xmlns: prefix must be bound to "+w+` +Actual: `+h.attribValue);else{var N=h.tag,I=h.tags[h.tags.length-1]||h;N.ns===I.ns&&(N.ns=Object.create(I.ns)),N.ns[x]=h.attribValue}h.attribList.push([h.attribName,h.attribValue])}else h.tag.attributes[h.attribName]=h.attribValue,S(h,"onattribute",{name:h.attribName,value:h.attribValue});h.attribName=h.attribValue=""}function U(h,u){if(h.opt.xmlns){var R=h.tag,x=z(h.tagName);R.prefix=x.prefix,R.local=x.local,R.uri=R.ns[x.prefix]||"",R.prefix&&!R.uri&&(F(h,"Unbound namespace prefix: "+JSON.stringify(h.tagName)),R.uri=x.prefix);var N=h.tags[h.tags.length-1]||h;R.ns&&N.ns!==R.ns&&Object.keys(R.ns).forEach(function(ns){S(h,"onopennamespace",{prefix:ns,uri:R.ns[ns]})});for(var I=0,P=h.attribList.length;I",h.tagName="",h.state=b.SCRIPT;return}S(h,"onscript",h.script),h.script=""}var u=h.tags.length,R=h.tagName;h.strict||(R=R[h.looseCase]());for(var x=R;u--;){var N=h.tags[u];if(N.name!==x)F(h,"Unexpected close tag");else break}if(u<0){F(h,"Unmatched closing tag: "+h.tagName),h.textNode+="",h.state=b.TEXT;return}h.tagName=R;for(var I=h.tags.length;I-- >u;){var P=h.tag=h.tags.pop();h.tagName=h.tag.name,S(h,"onclosetag",h.tagName);var $={};for(var W in P.ns)$[W]=P.ns[W];var ie=h.tags[h.tags.length-1]||h;h.opt.xmlns&&P.ns!==ie.ns&&Object.keys(P.ns).forEach(function(te){var oe=P.ns[te];S(h,"onclosenamespace",{prefix:te,uri:oe})})}u===0&&(h.closedRoot=!0),h.tagName=h.attribValue=h.attribName="",h.attribList.length=0,h.state=b.TEXT}function G(h){var u=h.entity,R=u.toLowerCase(),x,N="";return h.ENTITIES[u]?h.ENTITIES[u]:h.ENTITIES[R]?h.ENTITIES[R]:(u=R,u.charAt(0)==="#"&&(u.charAt(1)==="x"?(u=u.slice(2),x=parseInt(u,16),N=x.toString(16)):(u=u.slice(1),x=parseInt(u,10),N=x.toString(10))),u=u.replace(/^0+/,""),isNaN(x)||N.toLowerCase()!==u?(F(h,"Invalid character entity"),"&"+h.entity+";"):String.fromCodePoint(x))}function Q(h,u){u==="<"?(h.state=b.OPEN_WAKA,h.startTagPosition=h.position):_(u)||(F(h,"Non-whitespace before first tag."),h.textNode=u,h.state=b.TEXT)}function lt(h,u){var R="";return u"?(S(u,"onsgmldeclaration",u.sgmlDecl),u.sgmlDecl="",u.state=b.TEXT):(A(x)&&(u.state=b.SGML_DECL_QUOTED),u.sgmlDecl+=x);continue;case b.SGML_DECL_QUOTED:x===u.q&&(u.state=b.SGML_DECL,u.q=""),u.sgmlDecl+=x;continue;case b.DOCTYPE:x===">"?(u.state=b.TEXT,S(u,"ondoctype",u.doctype),u.doctype=!0):(u.doctype+=x,x==="["?u.state=b.DOCTYPE_DTD:A(x)&&(u.state=b.DOCTYPE_QUOTED,u.q=x));continue;case b.DOCTYPE_QUOTED:u.doctype+=x,x===u.q&&(u.q="",u.state=b.DOCTYPE);continue;case b.DOCTYPE_DTD:u.doctype+=x,x==="]"?u.state=b.DOCTYPE:A(x)&&(u.state=b.DOCTYPE_DTD_QUOTED,u.q=x);continue;case b.DOCTYPE_DTD_QUOTED:u.doctype+=x,x===u.q&&(u.state=b.DOCTYPE_DTD,u.q="");continue;case b.COMMENT:x==="-"?u.state=b.COMMENT_ENDING:u.comment+=x;continue;case b.COMMENT_ENDING:x==="-"?(u.state=b.COMMENT_ENDED,u.comment=L(u.opt,u.comment),u.comment&&S(u,"oncomment",u.comment),u.comment=""):(u.comment+="-"+x,u.state=b.COMMENT);continue;case b.COMMENT_ENDED:x!==">"?(F(u,"Malformed comment"),u.comment+="--"+x,u.state=b.COMMENT):u.state=b.TEXT;continue;case b.CDATA:x==="]"?u.state=b.CDATA_ENDING:u.cdata+=x;continue;case b.CDATA_ENDING:x==="]"?u.state=b.CDATA_ENDING_2:(u.cdata+="]"+x,u.state=b.CDATA);continue;case b.CDATA_ENDING_2:x===">"?(u.cdata&&S(u,"oncdata",u.cdata),S(u,"onclosecdata"),u.cdata="",u.state=b.TEXT):x==="]"?u.cdata+="]":(u.cdata+="]]"+x,u.state=b.CDATA);continue;case b.PROC_INST:x==="?"?u.state=b.PROC_INST_ENDING:_(x)?u.state=b.PROC_INST_BODY:u.procInstName+=x;continue;case b.PROC_INST_BODY:if(!u.procInstBody&&_(x))continue;x==="?"?u.state=b.PROC_INST_ENDING:u.procInstBody+=x;continue;case b.PROC_INST_ENDING:x===">"?(S(u,"onprocessinginstruction",{name:u.procInstName,body:u.procInstBody}),u.procInstName=u.procInstBody="",u.state=b.TEXT):(u.procInstBody+="?"+x,u.state=b.PROC_INST_BODY);continue;case b.OPEN_TAG:T(f,x)?u.tagName+=x:(ee(u),x===">"?U(u):x==="/"?u.state=b.OPEN_TAG_SLASH:(_(x)||F(u,"Invalid character in tag name"),u.state=b.ATTRIB));continue;case b.OPEN_TAG_SLASH:x===">"?(U(u,!0),Ne(u)):(F(u,"Forward-slash in opening tag not followed by >"),u.state=b.ATTRIB);continue;case b.ATTRIB:if(_(x))continue;x===">"?U(u):x==="/"?u.state=b.OPEN_TAG_SLASH:T(d,x)?(u.attribName=x,u.attribValue="",u.state=b.ATTRIB_NAME):F(u,"Invalid attribute name");continue;case b.ATTRIB_NAME:x==="="?u.state=b.ATTRIB_VALUE:x===">"?(F(u,"Attribute without value"),u.attribValue=u.attribName,We(u),U(u)):_(x)?u.state=b.ATTRIB_NAME_SAW_WHITE:T(f,x)?u.attribName+=x:F(u,"Invalid attribute name");continue;case b.ATTRIB_NAME_SAW_WHITE:if(x==="=")u.state=b.ATTRIB_VALUE;else{if(_(x))continue;F(u,"Attribute without value"),u.tag.attributes[u.attribName]="",u.attribValue="",S(u,"onattribute",{name:u.attribName,value:""}),u.attribName="",x===">"?U(u):T(d,x)?(u.attribName=x,u.state=b.ATTRIB_NAME):(F(u,"Invalid attribute name"),u.state=b.ATTRIB)}continue;case b.ATTRIB_VALUE:if(_(x))continue;A(x)?(u.q=x,u.state=b.ATTRIB_VALUE_QUOTED):(F(u,"Unquoted attribute value"),u.state=b.ATTRIB_VALUE_UNQUOTED,u.attribValue=x);continue;case b.ATTRIB_VALUE_QUOTED:if(x!==u.q){x==="&"?u.state=b.ATTRIB_VALUE_ENTITY_Q:u.attribValue+=x;continue}We(u),u.q="",u.state=b.ATTRIB_VALUE_CLOSED;continue;case b.ATTRIB_VALUE_CLOSED:_(x)?u.state=b.ATTRIB:x===">"?U(u):x==="/"?u.state=b.OPEN_TAG_SLASH:T(d,x)?(F(u,"No whitespace between attributes"),u.attribName=x,u.attribValue="",u.state=b.ATTRIB_NAME):F(u,"Invalid attribute name");continue;case b.ATTRIB_VALUE_UNQUOTED:if(!D(x)){x==="&"?u.state=b.ATTRIB_VALUE_ENTITY_U:u.attribValue+=x;continue}We(u),x===">"?U(u):u.state=b.ATTRIB;continue;case b.CLOSE_TAG:if(u.tagName)x===">"?Ne(u):T(f,x)?u.tagName+=x:u.script?(u.script+=""?Ne(u):F(u,"Invalid characters in closing tag");continue;case b.TEXT_ENTITY:case b.ATTRIB_VALUE_ENTITY_Q:case b.ATTRIB_VALUE_ENTITY_U:var P,$;switch(u.state){case b.TEXT_ENTITY:P=b.TEXT,$="textNode";break;case b.ATTRIB_VALUE_ENTITY_Q:P=b.ATTRIB_VALUE_QUOTED,$="attribValue";break;case b.ATTRIB_VALUE_ENTITY_U:P=b.ATTRIB_VALUE_UNQUOTED,$="attribValue";break}if(x===";")if(u.opt.unparsedEntities){var W=G(u);u.entity="",u.state=P,u.write(W)}else u[$]+=G(u),u.entity="",u.state=P;else T(u.entity.length?v:g,x)?u.entity+=x:(F(u,"Invalid character in entity name"),u[$]+="&"+u.entity+x,u.entity="",u.state=P);continue;default:throw new Error(u,"Unknown state: "+u.state)}return u.position>=u.bufferCheckPosition&&i(u),u}String.fromCodePoint||function(){var h=String.fromCharCode,u=Math.floor,R=function(){var x=16384,N=[],I,P,$=-1,W=arguments.length;if(!W)return"";for(var ie="";++$1114111||u(te)!==te)throw RangeError("Invalid code point: "+te);te<=65535?N.push(te):(te-=65536,I=(te>>10)+55296,P=te%1024+56320,N.push(I,P)),($+1===W||N.length>x)&&(ie+=h.apply(null,N),N.length=0)}return ie};Object.defineProperty?Object.defineProperty(String,"fromCodePoint",{value:R,configurable:!0,writable:!0}):String.fromCodePoint=R}()})(typeof Rr=="undefined"?Rr.sax={}:Rr)});var Lf=Y((o2,Ff)=>{var Cf=/[&<>"]/g,yy=RegExp(Cf.source),by={"&":"&","<":"<",">":">",'"':"""},xy=n=>{let t=String(n);return t&&yy.test(t)?t.replace(Cf,e=>by[e]):t},wy=(n,t)=>typeof n=="string"&&typeof t=="string"||n&&n[0].$name===t.$name,vy=(n,t)=>typeof n=="string"?n+t:n.concat(t),Ey=n=>n.reduce((t,e)=>{let i=t.length-1,r=t[i];return wy(r,e)?t[i]=vy(r,e):t.push(typeof e=="string"?e:[e]),t},[]),_y=(n,t,e)=>{let i=null,r={};return Object.keys(n).forEach(o=>{let a=Or(n[o])?n[o]:null;if(a)switch(o){case"$name":!t&&a&&(r.$name=a);break;case"$attrs":i=a;break;case"$markup":r.$markup=If(a);break;default:a&&(r[o]=e(a))}}),{stripped:r,$attrs:i}},Ty=n=>Array.isArray(n)&&n.length===1?n[0]:n,Ay=(n,t)=>Or(t)?n?Object.keys(t).length===1&&t.$name?Object.assign(t,n):Object.assign(t,{$attrs:n}):t:n,ky=n=>{if(!n)return;let t=Object.keys(n),[e]=t;return t.length===1&&e!=="$name"&&e!=="id"?n[t[0]]:n},Za=(n,t,e)=>{let i=e?l=>l:Ty,r=i(n);if(!Or(r))return null;if(typeof r!="object"||Array.isArray(r))return r;let{$attrs:o,stripped:a}=_y(r,t,i),s=Ay(o,a);return ky(s)},Ny=n=>{let t,e={},i=!0;return n.every(r=>(typeof r=="string"?t="$text":t=r[0].$name,e[t]?(i=!1,!1):(e[t]=!0,!0))),i},Ya=(n=[],t=[],e=!1)=>{let i=Array.isArray(n)?n:[n],r=Array.isArray(t)?t:[t],o=i.concat(r);return o.length===1&&!e?o[0]:o},If=(n,t)=>{let e=[];return n!==null&&typeof n=="object"&&n.constructor===Array?(n.forEach(i=>{e.push(Za(i,t))}),e):Za(n,t)},Sy=(n,t)=>{let e,i={};return Object.keys(n).forEach(r=>{r!=="$markup"&&(i[r]=n[r])}),n.$markup&&n.$markup.forEach(r=>{typeof r=="string"?i.$text=Ya(i.$text,r,t):typeof r=="object"&&(r.constructor===Array?e=r[0].$name:e=r.$name,i[e]=Ya(i[e],If(r,!0),t))}),i},Or=n=>n!=null&&(n.length==null||n.length!==0)&&(typeof n!="object"||Object.keys(n).length!==0);Ff.exports={condenseArray:Ey,escape:xy,isSomething:Or,moosh:Ya,objectifyMarkup:Sy,shouldObjectifyMarkup:Ny,simplifyNode:Za}});var $f=Y((a2,Mf)=>{var{EventEmitter:Ry}=require("events"),Oy=Df(),$t=Lf(),Dy=1,In=0,Bt=-1,Pf={preserveMarkup:In,simplifyNodes:!0,useArrays:In,lowercase:!0,trim:!0,normalize:!0,cdataAsText:!1,strict:!1},bi=function(t,e=Pf){let i=new Ry,r=[],o=Object.assign({},Pf,e),{preserveMarkup:a,simplifyNodes:s,useArrays:l,lowercase:c,trim:p,normalize:m,cdataAsText:y,strict:w}=o,E=null,d=null,f=Oy.createStream(w,{lowercase:c,trim:p,normalize:m,cdataAsText:y});return f.on("opentag",g=>{r.length===0&&!i.listeners(`tag:${g.name}`).length||(E={$name:g.name,$attrs:g.attributes},l>Bt&&(E.$markup=[]),r.push(E))}),f.on("text",g=>{E&&(l>Bt?E.$markup.push(g):E.$text?E.$text+=g:E.$text=g)}),f.on("opencdata",()=>{E&&(y||(d={$name:"$cdata",text:""},l>Bt?E.$markup.push(d):E.$cdata=d))}),f.on("cdata",g=>{E&&(d!==null?d.text+=g:l>Bt?E.$markup.push(g):E.$text?E.$text+=g:E.$text=g)}),f.on("closecdata",()=>{d=null}),f.on("script",g=>{E&&(E.$script=g)}),f.on("closetag",g=>{let v,_=null,A=l>In;r.length!==0&&(l>Bt&&(a<=Bt?(E.$markup=$t.condenseArray(E.$markup),E=$t.objectifyMarkup(E,A)):a===In&&(v=$t.condenseArray(E.$markup),$t.shouldObjectifyMarkup(v)&&(E.$markup=v,E=$t.objectifyMarkup(E,A)))),i.listeners(`tag:${g}`).length&&i.emit(`tag:${g}`,s?$t.simplifyNode(E,!1,l>In):E),r.pop(),r.length>0&&(_=r[r.length-1],l>Bt?_.$markup.push(E):_[g]||(_[g]=$t.simplifyNode(E,!0))),E=_)}),f.on("end",()=>{i.emit("end")}),f.on("error",g=>{i.emit("error",g)}),t.pipe(f),i.pause=function(){t.pause()},i.resume=function(){t.resume()},i};bi.ALWAYS=Dy;bi.SOMETIMES=In;bi.NEVER=Bt;bi.toXml=function(t,{indent:e="",selfClosing:i=!0,escape:r=$t.escape,nodeName:o}={}){let a=e?` +`:"";function s(l,c,p){let m="",y,w=c,E=p?a+p:"",d=p+e,f="";return l=l||"",l.constructor===Array?(l.forEach(g=>{m+=s(g,w,p)}),m):(!w&&l.$name&&(w=l.$name),w&&(m=`${E}<${w}`,l.$attrs&&typeof l.$attrs=="object"&&(y=Object.keys(l.$attrs),y.forEach(g=>{m+=` ${g}=${JSON.stringify(String(l.$attrs[g]))}`}))),l==null||l===""||(typeof l=="object"?(y=Object.keys(l),y.forEach(g=>{let v=l[g];switch(g){case"$name":case"$attrs":break;case"$text":case"$markup":f+=s(v,null,d);break;case"$script":f+=s(v,"script",d);break;case"$cdata":f+=`${E}`;break;default:f+=s(v,g,d)}})):f+=E+r(l)),w?f?m+=`>${f}${a}${p}`:i?m+="/>":m+=`>`:m+=f,m)}return s(t,o,"")};Mf.exports=bi});var I1={};Se(I1,{ATTACHMENT_EXTS:()=>Ln,AUTH_REDIRECT_URI:()=>$r,ImportContext:()=>Wr,ImporterModal:()=>wi,default:()=>Zr});module.exports=wd(I1);var Ht=require("obsidian");var st=require("obsidian");var wt=class{constructor(t){this.importer=t,this.app=t.app}};var Mn=class extends wt{constructor(e,i){super(e);this.scan=i.mergableDataObject,this.objects=this.scan.mergeableDataObjectData.mergeableDataObjectEntry}async format(){let e=[];for(let i of this.objects){if(!i.customMap)continue;let r=i.customMap.mapEntry[0].value.stringValue,o=await this.importer.database.get` + SELECT z_pk, zmedia, ztypeuti FROM ziccloudsyncingobject + WHERE zidentifier = ${r}`,a=await this.importer.resolveAttachment(o.Z_PK,"com.apple.notes.gallery");if(a||(a=await this.importer.resolveAttachment(o.ZMEDIA,o.ZTYPEUTI)),a)e.push(this.importer.app.fileManager.generateMarkdownLink(a,"/"));else return"**Cannot decode scan**"}return` +${e.join(` +`)} +`}};Mn.protobufType="ciofecaforensics.MergableDataProto";var $n=class extends wt{constructor(e,i){super(e);this.rowLocations={};this.columnLocations={};this.table=i.mergableDataObject;let r=this.table.mergeableDataObjectData;this.keys=r.mergeableDataObjectKeyItem,this.types=r.mergeableDataObjectTypeItem,this.uuids=r.mergeableDataObjectUuidItem.map(this.uuidToString),this.objects=r.mergeableDataObjectEntry}async parse(){let e=this.objects.find(r=>r.customMap&&this.types[r.customMap.type]=="com.apple.notes.ICTable");if(!e)return null;let i=null;for(let r of e.customMap.mapEntry){let o=this.objects[r.value.objectIndex];switch(this.keys[r.key]){case"crRows":[this.rowLocations,this.rowCount]=this.findLocations(o);break;case"crColumns":[this.columnLocations,this.columnCount]=this.findLocations(o);break;case"cellColumns":i=o;break}}return i?await this.computeCells(i):null}findLocations(e){let i=[],r={};for(let o of e.orderedSet.ordering.array.attachment)i.push(this.uuidToString(o.uuid));for(let o of e.orderedSet.ordering.contents.element){let a=this.getTargetUuid(o.key),s=this.getTargetUuid(o.value);r[s]=i.indexOf(a)}return[r,i.length]}async computeCells(e){let i=Array(this.rowCount).fill(0).map(()=>Array(this.columnCount));for(let r of e.dictionary.element){let o=this.columnLocations[this.getTargetUuid(r.key)],a=this.objects[r.value.objectIndex];for(let s of a.dictionary.element){let l=this.rowLocations[this.getTargetUuid(s.key)],c=this.objects[s.value.objectIndex];if(!(l in i)||!c)continue;let p=new Wt(this.importer,c);i[l][o]=await p.format(!0)}}return i}async format(){let e=await this.parse();if(!e)return"";let i=` +`;for(let r=0;r").replace("|","|"),o.trim()}formatMultiRun(e){var o,a,s,l,c,p;let i=(o=e.paragraphStyle)==null?void 0:o.styleType,r="";switch(this.multiRun){case 3:(((a=e.paragraphStyle)==null?void 0:a.indentAmount)==0&&!as.includes(i)||_d(e))&&(this.multiRun=0);break;case 1:i!=4&&(this.multiRun=0,r+="```\n");break;case 2:(s=e.paragraphStyle)!=null&&s.alignment||(this.multiRun=0,r+=`

+`);break}if(this.multiRun==0){if(i==4)this.multiRun=1,r+="\n```\n";else if(as.includes(i))this.multiRun=3,(l=e.paragraphStyle)!=null&&l.indentAmount&&(r+=` +-   +`);else if((c=e.paragraphStyle)!=null&&c.alignment){this.multiRun=2;let m=this.convertAlign((p=e==null?void 0:e.paragraphStyle)==null?void 0:p.alignment);r+=` +

`}}return r}async formatHtmlAttr(e){var r,o;e.strikethrough&&(e.fragment=`${e.fragment}`),e.underlined&&(e.fragment=`${e.fragment}`),e.superscript==1&&(e.fragment=`${e.fragment}`),e.superscript==-1&&(e.fragment=`${e.fragment}`);let i="";switch(e.fontWeight){case 1:e.fragment=`${e.fragment}`;break;case 2:e.fragment=`${e.fragment}`;break;case 3:e.fragment=`${e.fragment}`;break}return(r=e.font)!=null&&r.fontName&&e.font.fontName!==Ed&&(i+=`font-family:${e.font.fontName};`),(o=e.font)!=null&&o.pointSize&&(i+=`font-size:${e.font.pointSize}pt;`),e.color&&(i+=`color:${this.convertColor(e.color)};`),e.link&&!zr.test(e.link)?(i&&(i=` style="${i}"`),e.fragment=`${e.fragment}`):i&&(e.link&&(e.fragment=await this.getInternalLink(e.link,e.fragment)),e.fragment=`${e.fragment}`),e.atLineStart?this.formatParagraph(e):e.fragment}async formatAttr(e){switch(e.fontWeight){case 1:e.fragment=`**${e.fragment}**`;break;case 2:e.fragment=`*${e.fragment}*`;break;case 3:e.fragment=`***${e.fragment}***`;break}return e.strikethrough&&(e.fragment=`~~${e.fragment}~~`),e.link&&e.link!=e.fragment&&(zr.test(e.link)?e.fragment=await this.getInternalLink(e.link,e.fragment):e.fragment=`[${e.fragment}](${e.link})`),e.atLineStart?this.formatParagraph(e):e.fragment}formatParagraph(e){var a,s,l,c,p,m;let i=" ".repeat(((a=e.paragraphStyle)==null?void 0:a.indentAmount)||0),r=(s=e.paragraphStyle)==null?void 0:s.styleType,o=(l=e.paragraphStyle)!=null&&l.blockquote?"> ":"";switch(this.listNumber!=0&&(r!==102||this.listIndent!==((c=e.paragraphStyle)==null?void 0:c.indentAmount))&&(this.listIndent=((p=e.paragraphStyle)==null?void 0:p.indentAmount)||0,this.listNumber=0),r){case 0:return`${o}# ${e.fragment}`;case 1:return`${o}## ${e.fragment}`;case 2:return`${o}### ${e.fragment}`;case 101:case 100:return`${o}${i}- ${e.fragment}`;case 102:return this.listNumber++,`${o}${i}${this.listNumber}. ${e.fragment}`;case 103:let y=(m=e.paragraphStyle.checklist)!=null&&m.done?"[x]":"[ ]";return`${o}${i}- ${y} ${e.fragment}`}return this.multiRun==3&&(o+=i),`${o}${e.fragment}`}async formatAttachment(e){var l,c,p;let i,r,o;switch((l=e.attachmentInfo)==null?void 0:l.typeUti){case"com.apple.notes.inlinetextattachment.hashtag":case"com.apple.notes.inlinetextattachment.mention":return i=await this.importer.database.get` + SELECT zalttext FROM ziccloudsyncingobject + WHERE zidentifier = ${e.attachmentInfo.attachmentIdentifier}`,i.ZALTTEXT;case"com.apple.notes.inlinetextattachment.link":return i=await this.importer.database.get` + SELECT ztokencontentidentifier FROM ziccloudsyncingobject + WHERE zidentifier = ${e.attachmentInfo.attachmentIdentifier}`,await this.getInternalLink(i.ZTOKENCONTENTIDENTIFIER);case"com.apple.notes.table":return i=await this.importer.database.get` + SELECT hex(zmergeabledata1) as zhexdata FROM ziccloudsyncingobject + WHERE zidentifier = ${e.attachmentInfo.attachmentIdentifier}`,o=this.importer.decodeData(i.zhexdata,$n),await o.format();case"public.url":return i=await this.importer.database.get` + SELECT ztitle, zurlstring FROM ziccloudsyncingobject + WHERE zidentifier = ${e.attachmentInfo.attachmentIdentifier}`,`[**${i.ZTITLE}**](${i.ZURLSTRING})`;case"com.apple.notes.gallery":return i=await this.importer.database.get` + SELECT hex(zmergeabledata1) as zhexdata FROM ziccloudsyncingobject + WHERE zidentifier = ${e.attachmentInfo.attachmentIdentifier}`,o=this.importer.decodeData(i.zhexdata,Mn),await o.format();case"com.apple.paper.doc.scan":case"com.apple.drawing":case"com.apple.drawing.2":case"com.apple.paper":i=await this.importer.database.get` + SELECT z_pk, zhandwritingsummary + FROM (SELECT *, NULL AS zhandwritingsummary FROM ziccloudsyncingobject) + WHERE zidentifier = ${e.attachmentInfo.attachmentIdentifier}`,r=i==null?void 0:i.Z_PK;break;default:i=await this.importer.database.get` + SELECT zmedia FROM ziccloudsyncingobject + WHERE zidentifier = ${(c=e.attachmentInfo)==null?void 0:c.attachmentIdentifier}`,r=i==null?void 0:i.ZMEDIA;break}if(!r)return` **(unknown attachment: ${(p=e.attachmentInfo)==null?void 0:p.typeUti})** `;let a=await this.importer.resolveAttachment(r,e.attachmentInfo.typeUti),s=a?` +${this.app.fileManager.generateMarkdownLink(a,"/")} +`:" **(error reading attachment)**";return this.importer.includeHandwriting&&i.ZHANDWRITINGSUMMARY&&(s=` +> [!Handwriting]- +> ${i.ZHANDWRITINGSUMMARY.replace(` +`,` +> `)}${s}`),s}async getInternalLink(e,i=void 0){let r=e.match(zr)[1],o=await this.importer.database.get` + SELECT z_pk FROM ziccloudsyncingobject + WHERE zidentifier = ${r.toUpperCase()}`,a=await this.importer.resolveNote(o.Z_PK);return a?this.app.fileManager.generateMarkdownLink(a,this.importer.rootFolder.path,void 0,i):"(unknown file link)"}convertColor(e){let i="#";for(let r of Object.values(e))i+=Math.floor(r*255).toString(16);return i}convertAlign(e){switch(e){default:return"left";case 1:return"center";case 2:return"right";case 3:return"justify"}}};Wt.protobufType="ciofecaforensics.Document";function _d(n){return n.attachmentInfo?!n.attachmentInfo.typeUti.includes("com.apple.notes.inlinetextattachment"):!1}function ss(n,t){var e,i;if(!t||n.$type!=t.$type)return!1;for(let r of n.$type.fieldsArray)if(r.name!="length"){if((e=n[r.name])!=null&&e.$type&&((i=t[r.name])!=null&&i.$type)){if(!ss(n[r.name],t[r.name]))return!1}else if(n[r.name]!=t[r.name])return!1}return!0}var ls={nested:{ciofecaforensics:{nested:{Color:{fields:{red:{type:"float",id:1},green:{type:"float",id:2},blue:{type:"float",id:3},alpha:{type:"float",id:4}}},AttachmentInfo:{fields:{attachmentIdentifier:{type:"string",id:1},typeUti:{type:"string",id:2}}},Font:{fields:{fontName:{type:"string",id:1},pointSize:{type:"float",id:2},fontHints:{type:"int32",id:3}}},ParagraphStyle:{fields:{styleType:{type:"int32",id:1,options:{default:-1}},alignment:{type:"int32",id:2},indentAmount:{type:"int32",id:4},checklist:{type:"Checklist",id:5},blockquote:{type:"int32",id:8}}},Checklist:{fields:{uuid:{type:"bytes",id:1},done:{type:"int32",id:2}}},DictionaryElement:{fields:{key:{type:"ObjectID",id:1},value:{type:"ObjectID",id:2}}},Dictionary:{fields:{element:{rule:"repeated",type:"DictionaryElement",id:1,options:{packed:!1}}}},ObjectID:{fields:{unsignedIntegerValue:{type:"uint64",id:2},stringValue:{type:"string",id:4},objectIndex:{type:"int32",id:6}}},RegisterLatest:{fields:{contents:{type:"ObjectID",id:2}}},MapEntry:{fields:{key:{type:"int32",id:1},value:{type:"ObjectID",id:2}}},AttributeRun:{fields:{length:{type:"int32",id:1},paragraphStyle:{type:"ParagraphStyle",id:2},font:{type:"Font",id:3},fontWeight:{type:"int32",id:5},underlined:{type:"int32",id:6},strikethrough:{type:"int32",id:7},superscript:{type:"int32",id:8},link:{type:"string",id:9},color:{type:"Color",id:10},attachmentInfo:{type:"AttachmentInfo",id:12}}},NoteStoreProto:{fields:{document:{type:"Document",id:2}}},Document:{fields:{version:{type:"int32",id:2},note:{type:"Note",id:3}}},Note:{fields:{noteText:{type:"string",id:2},attributeRun:{rule:"repeated",type:"AttributeRun",id:5,options:{packed:!1}}}},MergableDataProto:{fields:{mergableDataObject:{type:"MergableDataObject",id:2}}},MergableDataObject:{fields:{version:{type:"int32",id:2},mergeableDataObjectData:{type:"MergeableDataObjectData",id:3}}},MergeableDataObjectData:{fields:{mergeableDataObjectEntry:{rule:"repeated",type:"MergeableDataObjectEntry",id:3,options:{packed:!1}},mergeableDataObjectKeyItem:{rule:"repeated",type:"string",id:4},mergeableDataObjectTypeItem:{rule:"repeated",type:"string",id:5},mergeableDataObjectUuidItem:{rule:"repeated",type:"bytes",id:6}}},MergeableDataObjectEntry:{fields:{registerLatest:{type:"RegisterLatest",id:1},list:{type:"List",id:5},dictionary:{type:"Dictionary",id:6},unknownMessage:{type:"UnknownMergeableDataObjectEntryMessage",id:9},note:{type:"Note",id:10},customMap:{type:"MergeableDataObjectMap",id:13},orderedSet:{type:"OrderedSet",id:16}}},UnknownMergeableDataObjectEntryMessage:{fields:{unknownEntry:{type:"UnknownMergeableDataObjectEntryMessageEntry",id:1}}},UnknownMergeableDataObjectEntryMessageEntry:{fields:{unknownInt1:{type:"int32",id:1},unknownInt2:{type:"int64",id:2}}},MergeableDataObjectMap:{fields:{type:{type:"int32",id:1},mapEntry:{rule:"repeated",type:"MapEntry",id:3,options:{packed:!1}}}},OrderedSet:{fields:{ordering:{type:"OrderedSetOrdering",id:1},elements:{type:"Dictionary",id:2}}},OrderedSetOrdering:{fields:{array:{type:"OrderedSetOrderingArray",id:1},contents:{type:"Dictionary",id:2}}},OrderedSetOrderingArray:{fields:{contents:{type:"Note",id:1},attachment:{rule:"repeated",type:"OrderedSetOrderingArrayAttachment",id:2,options:{packed:!1}}}},OrderedSetOrderingArrayAttachment:{fields:{index:{type:"int32",id:1},uuid:{type:"bytes",id:2}}},List:{fields:{listEntry:{rule:"repeated",type:"ListEntry",id:1,options:{packed:!1}}}},ListEntry:{fields:{id:{type:"ObjectID",id:2},details:{type:"ListEntryDetails",id:3},additionalDetails:{type:"ListEntryDetails",id:4}}},ListEntryDetails:{fields:{listEntryDetailsKey:{type:"ListEntryDetailsKey",id:1},id:{type:"ObjectID",id:2}}},ListEntryDetailsKey:{fields:{listEntryDetailsTypeIndex:{type:"int32",id:1},listEntryDetailsKey:{type:"int32",id:2}}}}}}};var De=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],Ss=1440,Td=0,Ad=4,kd=9,Nd=5,Sd=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],Rd=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],Od=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],Dd=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,112,112],Cd=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],Id=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],vt=15;function Xr(){let n=this,t,e,i,r,o,a;function s(c,p,m,y,w,E,d,f,g,v,_){let A,D,T,k,b,C,O,S,M,L,j,Z,F,ee,z;L=0,b=m;do i[c[p+L]]++,L++,b--;while(b!==0);if(i[0]==m)return d[0]=-1,f[0]=0,0;for(S=f[0],C=1;C<=vt&&i[C]===0;C++);for(O=C,Sb&&(S=b),f[0]=S,ee=1<Z+S;){if(k++,Z+=S,z=T-Z,z=z>S?S:z,(D=1<<(C=O-Z))>A+1&&(D-=A+1,F=O,CSs)return-3;o[k]=j=v[0],v[0]+=z,k!==0?(a[k]=b,r[0]=C,r[1]=S,C=b>>>Z-S,r[2]=j-o[k-1]-C,g.set(r,(o[k-1]+C)*3)):d[0]=j}for(r[1]=O-Z,L>=m?r[0]=128+64:_[L]>>Z;C>>=1)b^=C;for(b^=C,M=(1<257?(v==-3?g.msg="oversubscribed distance tree":v==-5?(g.msg="incomplete distance tree",v=-3):v!=-4&&(g.msg="empty distance tree with lengths",v=-3),v):0)}}Xr.inflate_trees_fixed=function(n,t,e,i){return n[0]=kd,t[0]=Nd,e[0]=Sd,i[0]=Rd,0};var Ei=0,cs=1,ps=2,us=3,fs=4,ds=5,ms=6,Gr=7,hs=8,_i=9;function Fd(){let n=this,t,e=0,i,r=0,o=0,a=0,s=0,l=0,c=0,p=0,m,y=0,w,E=0;function d(f,g,v,_,A,D,T,k){let b,C,O,S,M,L,j,Z,F,ee,z,We,U,Ne,G,Q;j=k.next_in_index,Z=k.avail_in,M=T.bitb,L=T.bitk,F=T.write,ee=F>=C[Q+1],L-=C[Q+1],T.win[F++]=C[Q+2],ee--;continue}do{if(M>>=C[Q+1],L-=C[Q+1],S&16){for(S&=15,U=C[Q+2]+(M&De[S]),M>>=S,L-=S;L<15;)Z--,M|=(k.read_byte(j++)&255)<>=C[Q+1],L-=C[Q+1],S&16){for(S&=15;L>=S,L-=S,ee-=U,F>=Ne)G=F-Ne,F-G>0&&2>F-G?(T.win[F++]=T.win[G++],T.win[F++]=T.win[G++],U-=2):(T.win.set(T.win.subarray(G,G+2),F),F+=2,G+=2,U-=2);else{G=F-Ne;do G+=T.end;while(G<0);if(S=T.end-G,U>S){if(U-=S,F-G>0&&S>F-G)do T.win[F++]=T.win[G++];while(--S!==0);else T.win.set(T.win.subarray(G,G+S),F),F+=S,G+=S,S=0;G=0}}if(F-G>0&&U>F-G)do T.win[F++]=T.win[G++];while(--U!==0);else T.win.set(T.win.subarray(G,G+U),F),F+=U,G+=U,U=0;break}else if(!(S&64))b+=C[Q+2],b+=M&De[S],Q=(O+b)*3,S=C[Q];else return k.msg="invalid distance code",U=k.avail_in-Z,U=L>>3>3:U,Z+=U,j-=U,L-=U<<3,T.bitb=M,T.bitk=L,k.avail_in=Z,k.total_in+=j-k.next_in_index,k.next_in_index=j,T.write=F,-3;while(!0);break}if(S&64)return S&32?(U=k.avail_in-Z,U=L>>3>3:U,Z+=U,j-=U,L-=U<<3,T.bitb=M,T.bitk=L,k.avail_in=Z,k.total_in+=j-k.next_in_index,k.next_in_index=j,T.write=F,1):(k.msg="invalid literal/length code",U=k.avail_in-Z,U=L>>3>3:U,Z+=U,j-=U,L-=U<<3,T.bitb=M,T.bitk=L,k.avail_in=Z,k.total_in+=j-k.next_in_index,k.next_in_index=j,T.write=F,-3);if(b+=C[Q+2],b+=M&De[S],Q=(O+b)*3,(S=C[Q])===0){M>>=C[Q+1],L-=C[Q+1],T.win[F++]=C[Q+2],ee--;break}}while(!0)}while(ee>=258&&Z>=10);return U=k.avail_in-Z,U=L>>3>3:U,Z+=U,j-=U,L-=U<<3,T.bitb=M,T.bitk=L,k.avail_in=Z,k.total_in+=j-k.next_in_index,k.next_in_index=j,T.write=F,0}n.init=function(f,g,v,_,A,D){t=Ei,c=f,p=g,m=v,y=_,w=A,E=D,i=null},n.proc=function(f,g,v){let _,A,D,T=0,k=0,b=0,C,O,S,M;for(b=g.next_in_index,C=g.avail_in,T=f.bitb,k=f.bitk,O=f.write,S=O=258&&C>=10&&(f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,v=d(c,p,m,y,w,E,f,g),b=g.next_in_index,C=g.avail_in,T=f.bitb,k=f.bitk,O=f.write,S=O>>=i[A+1],k-=i[A+1],D=i[A],D===0){a=i[A+2],t=ms;break}if(D&16){s=D&15,e=i[A+2],t=ps;break}if(!(D&64)){o=D,r=A/3+i[A+2];break}if(D&32){t=Gr;break}return t=_i,g.msg="invalid literal/length code",v=-3,f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,f.inflate_flush(g,v);case ps:for(_=s;k<_;){if(C!==0)v=0;else return f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,f.inflate_flush(g,v);C--,T|=(g.read_byte(b++)&255)<>=_,k-=_,o=p,i=w,r=E,t=us;case us:for(_=o;k<_;){if(C!==0)v=0;else return f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,f.inflate_flush(g,v);C--,T|=(g.read_byte(b++)&255)<>=i[A+1],k-=i[A+1],D=i[A],D&16){s=D&15,l=i[A+2],t=fs;break}if(!(D&64)){o=D,r=A/3+i[A+2];break}return t=_i,g.msg="invalid distance code",v=-3,f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,f.inflate_flush(g,v);case fs:for(_=s;k<_;){if(C!==0)v=0;else return f.bitb=T,f.bitk=k,g.avail_in=C,g.total_in+=b-g.next_in_index,g.next_in_index=b,f.write=O,f.inflate_flush(g,v);C--,T|=(g.read_byte(b++)&255)<>=_,k-=_,t=ds;case ds:for(M=O-l;M<0;)M+=f.end;for(;e!==0;){if(S===0&&(O==f.end&&f.read!==0&&(O=0,S=O7&&(k-=8,C++,b--),f.write=O,v=f.inflate_flush(g,v),O=f.write,S=Od.avail_out&&(g=d.avail_out),g!==0&&f==-5&&(f=0),d.avail_out-=g,d.total_out+=g,d.next_out.set(e.win.subarray(_,_+g),v),v+=g,_+=g,_==e.end&&(_=0,e.write==e.end&&(e.write=0),g=e.write-_,g>d.avail_out&&(g=d.avail_out),g!==0&&f==-5&&(f=0),d.avail_out-=g,d.total_out+=g,d.next_out.set(e.win.subarray(_,_+g),v),v+=g,_+=g),d.next_out_index=v,e.read=_,f},e.proc=function(d,f){let g,v,_,A,D,T,k,b;for(A=d.next_in_index,D=d.avail_in,v=e.bitb,_=e.bitk,T=e.write,k=T>>1){case 0:v>>>=3,_-=3,g=_&7,v>>>=g,_-=g,i=Vr;break;case 1:C=[],O=[],S=[[]],M=[[]],Xr.inflate_trees_fixed(C,O,S,M),p.init(C[0],O[0],S[0],0,M[0],0),v>>>=3,_-=3,i=Ti;break;case 2:v>>>=3,_-=3,i=bs;break;case 3:return v>>>=3,_-=3,i=Zt,d.msg="invalid block type",f=-3,e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f)}break;case Vr:for(;_<32;){if(D!==0)f=0;else return e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);D--,v|=(d.read_byte(A++)&255)<<_,_+=8}if((~v>>>16&65535)!=(v&65535))return i=Zt,d.msg="invalid stored block lengths",f=-3,e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);r=v&65535,v=_=0,i=r!==0?ys:m!==0?Ai:fn;break;case ys:if(D===0||k===0&&(T==e.end&&e.read!==0&&(T=0,k=TD&&(g=D),g>k&&(g=k),e.win.set(d.read_buf(A,g),T),A+=g,D-=g,T+=g,k-=g,(r-=g)!==0)break;i=m!==0?Ai:fn;break;case bs:for(;_<14;){if(D!==0)f=0;else return e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);D--,v|=(d.read_byte(A++)&255)<<_,_+=8}if(o=g=v&16383,(g&31)>29||(g>>5&31)>29)return i=Zt,d.msg="too many length or distance symbols",f=-3,e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);if(g=258+(g&31)+(g>>5&31),!s||s.length>>=14,_-=14,a=0,i=xs;case xs:for(;a<4+(o>>>10);){for(;_<3;){if(D!==0)f=0;else return e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);D--,v|=(d.read_byte(A++)&255)<<_,_+=8}s[gs[a++]]=v&7,v>>>=3,_-=3}for(;a<19;)s[gs[a++]]=0;if(l[0]=7,g=E.inflate_trees_bits(s,l,c,y,d),g!=0)return f=g,f==-3&&(s=null,i=Zt),e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);a=0,i=ws;case ws:for(;g=o,!(a>=258+(g&31)+(g>>5&31));){let ee,z;for(g=l[0];_>>=g,_-=g,s[a++]=z;else{for(b=z==18?7:z-14,ee=z==18?11:3;_>>=g,_-=g,ee+=v&De[b],v>>>=b,_-=b,b=a,g=o,b+ee>258+(g&31)+(g>>5&31)||z==16&&b<1)return s=null,i=Zt,d.msg="invalid bit length repeat",f=-3,e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);z=z==16?s[b-1]:0;do s[b++]=z;while(--ee!==0);a=b}}if(c[0]=-1,L=[],j=[],Z=[],F=[],L[0]=9,j[0]=6,g=o,g=E.inflate_trees_dynamic(257+(g&31),1+(g>>5&31),s,L,j,Z,F,y,d),g!=0)return g==-3&&(s=null,i=Zt),f=g,e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,e.inflate_flush(d,f);p.init(L[0],j[0],y,Z[0],y,F[0]),i=Ti;case Ti:if(e.bitb=v,e.bitk=_,d.avail_in=D,d.total_in+=A-d.next_in_index,d.next_in_index=A,e.write=T,(f=p.proc(e,d,f))!=1)return e.inflate_flush(d,f);if(f=0,p.free(d),A=d.next_in_index,D=d.avail_in,v=e.bitb,_=e.bitk,T=e.write,k=T15?(n.inflateEnd(e),-2):(n.wbits=i,e.istate.blocks=new Ld(e,1<>4)+8>a.wbits){a.mode=Et,e.msg="invalid win size",a.marker=5;break}a.mode=Es;case Es:if(e.avail_in===0)return r;if(r=i,e.avail_in--,e.total_in++,o=e.read_byte(e.next_in_index++)&255,((a.method<<8)+o)%31!==0){a.mode=Et,e.msg="incorrect header check",a.marker=5;break}if(!(o&Pd)){a.mode=Bn;break}a.mode=_s;case _s:if(e.avail_in===0)return r;r=i,e.avail_in--,e.total_in++,a.need=(e.read_byte(e.next_in_index++)&255)<<24&4278190080,a.mode=Ts;case Ts:if(e.avail_in===0)return r;r=i,e.avail_in--,e.total_in++,a.need+=(e.read_byte(e.next_in_index++)&255)<<16&16711680,a.mode=As;case As:if(e.avail_in===0)return r;r=i,e.avail_in--,e.total_in++,a.need+=(e.read_byte(e.next_in_index++)&255)<<8&65280,a.mode=ks;case ks:return e.avail_in===0?r:(r=i,e.avail_in--,e.total_in++,a.need+=e.read_byte(e.next_in_index++)&255,a.mode=Kr,2);case Kr:return a.mode=Et,e.msg="need dictionary",a.marker=0,-2;case Bn:if(r=a.blocks.proc(e,r),r==-3){a.mode=Et,a.marker=0;break}if(r==0&&(r=i),r!=1)return r;r=i,a.blocks.reset(e,a.was),a.mode=Ns;case Ns:return e.avail_in=0,1;case Et:return-3;default:return-2}},n.inflateSetDictionary=function(e,i,r){let o=0,a=r;if(!e||!e.istate||e.istate.mode!=Kr)return-2;let s=e.istate;return a>=1<0&&e.next_in_index!=y&&(l(e.next_in_index),y=e.next_in_index)}while(e.avail_in>0||e.avail_out===0);return c.length>1?(m=new Uint8Array(E),c.forEach(function(d){m.set(d,w),w+=d.length})):m=c[0]?new Uint8Array(c[0]):new Uint8Array,m}},t.flush=function(){e.inflateEnd()}}var Ds="/",db=new Date(2107,11,31),mb=new Date(1980,0,1),_e=void 0,dn="undefined",ki="function";var Un=class{constructor(t){return class extends TransformStream{constructor(e,i){let r=new t(i);super({transform(o,a){a.enqueue(r.append(o))},flush(o){let a=r.flush();a&&o.enqueue(a)}})}}}};var jd=64,Cs=2;try{typeof navigator!=dn&&navigator.hardwareConcurrency&&(Cs=navigator.hardwareConcurrency)}catch(n){}var Hd={chunkSize:512*1024,maxWorkers:Cs,terminateWorkerTimeout:5e3,useWebWorkers:!0,useCompressionStream:!0,workerScripts:_e,CompressionStreamNative:typeof CompressionStream!=dn&&CompressionStream,DecompressionStreamNative:typeof DecompressionStream!=dn&&DecompressionStream},Tt=Object.assign({},Hd);function Jr(){return Tt}function Is(n){return Math.max(n.chunkSize,jd)}function Ni(n){let{baseURL:t,chunkSize:e,maxWorkers:i,terminateWorkerTimeout:r,useCompressionStream:o,useWebWorkers:a,Deflate:s,Inflate:l,CompressionStream:c,DecompressionStream:p,workerScripts:m}=n;if(_t("baseURL",t),_t("chunkSize",e),_t("maxWorkers",i),_t("terminateWorkerTimeout",r),_t("useCompressionStream",o),_t("useWebWorkers",a),s&&(Tt.CompressionStream=new Un(s)),l&&(Tt.DecompressionStream=new Un(l)),_t("CompressionStream",c),_t("DecompressionStream",p),m!==_e){let{deflate:y,inflate:w}=m;if((y||w)&&(Tt.workerScripts||(Tt.workerScripts={})),y){if(!Array.isArray(y))throw new Error("workerScripts.deflate must be an array");Tt.workerScripts.deflate=y}if(w){if(!Array.isArray(w))throw new Error("workerScripts.inflate must be an array");Tt.workerScripts.inflate=w}}}function _t(n,t){t!==_e&&(Tt[n]=t)}var Fs=[];for(let n=0;n<256;n++){let t=n;for(let e=0;e<8;e++)t&1?t=t>>>1^3988292384:t=t>>>1;Fs[n]=t}var ct=class{constructor(t){this.crc=t||-1}append(t){let e=this.crc|0;for(let i=0,r=t.length|0;i>>8^Fs[(e^t[i])&255];this.crc=e}get(){return~this.crc}};var jn=class extends TransformStream{constructor(){let t,e=new ct;super({transform(i,r){e.append(i),r.enqueue(i)},flush(){let i=new Uint8Array(4);new DataView(i.buffer).setUint32(0,e.get()),t.value=i}}),t=this}};function Ls(n){if(typeof TextEncoder=="undefined"){n=unescape(encodeURIComponent(n));let t=new Uint8Array(n.length);for(let e=0;e0&&t&&(n[e-1]=Te.partial(t,n[e-1]&2147483648>>t-1,1)),n},partial(n,t,e){return n===32?t:(e?t|0:t<<32-n)+n*1099511627776},getPartial(n){return Math.round(n/1099511627776)||32},_shiftRight(n,t,e,i){for(i===void 0&&(i=[]);t>=32;t-=32)i.push(e),e=0;if(t===0)return i.concat(n);for(let a=0;a>>t),e=n[a]<<32-t;let r=n.length?n[n.length-1]:0,o=Te.getPartial(r);return i.push(Te.partial(t+o&31,t+o>32?e:i.pop(),1)),i}},Hn={bytes:{fromBits(n){let e=Te.bitLength(n)/8,i=new Uint8Array(e),r;for(let o=0;o>>24,r<<=8;return i},toBits(n){let t=[],e,i=0;for(e=0;e9007199254740991)throw new Error("Cannot hash more than 2^53 - 1 bits");let o=new Uint32Array(e),a=0;for(let s=t.blockSize+i-(t.blockSize+i&t.blockSize-1);s<=r;s+=t.blockSize)t._block(o.subarray(16*a,16*(a+1))),a+=1;return e.splice(0,16*a),t}finalize(){let n=this,t=n._buffer,e=n._h;t=Te.concat(t,[Te.partial(1,1)]);for(let i=t.length+2;i&15;i++)t.push(0);for(t.push(Math.floor(n._length/4294967296)),t.push(n._length|0);t.length;)n._block(t.splice(0,16));return n.reset(),e}_f(n,t,e,i){if(n<=19)return t&e|~t&i;if(n<=39)return t^e^i;if(n<=59)return t&e|t&i|e&i;if(n<=79)return t^e^i}_S(n,t){return t<>>32-n}_block(n){let t=this,e=t._h,i=Array(80);for(let c=0;c<16;c++)i[c]=n[c];let r=e[0],o=e[1],a=e[2],s=e[3],l=e[4];for(let c=0;c<=79;c++){c>=16&&(i[c]=t._S(1,i[c-3]^i[c-8]^i[c-14]^i[c-16]));let p=t._S(5,r)+t._f(c,o,a,s)+l+i[c]+t._key[Math.floor(c/20)]|0;l=s,s=a,a=t._S(30,o),o=r,r=p}e[0]=e[0]+r|0,e[1]=e[1]+o|0,e[2]=e[2]+a|0,e[3]=e[3]+s|0,e[4]=e[4]+l|0}};var Qr={};Qr.aes=class{constructor(n){let t=this;t._tables=[[[],[],[],[],[]],[[],[],[],[],[]]],t._tables[0][0][0]||t._precompute();let e=t._tables[0][4],i=t._tables[1],r=n.length,o,a,s,l=1;if(r!==4&&r!==6&&r!==8)throw new Error("invalid aes key size");for(t._key=[a=n.slice(0),s=[]],o=r;o<4*r+28;o++){let c=a[o-1];(o%r===0||r===8&&o%r===4)&&(c=e[c>>>24]<<24^e[c>>16&255]<<16^e[c>>8&255]<<8^e[c&255],o%r===0&&(c=c<<8^c>>>24^l<<24,l=l<<1^(l>>7)*283)),a[o]=a[o-r]^c}for(let c=0;o;c++,o--){let p=a[c&3?o:o-4];o<=4||c<4?s[c]=p:s[c]=i[0][e[p>>>24]]^i[1][e[p>>16&255]]^i[2][e[p>>8&255]]^i[3][e[p&255]]}}encrypt(n){return this._crypt(n,0)}decrypt(n){return this._crypt(n,1)}_precompute(){let n=this._tables[0],t=this._tables[1],e=n[4],i=t[4],r=[],o=[],a,s,l,c;for(let p=0;p<256;p++)o[(r[p]=p<<1^(p>>7)*283)^p]=p;for(let p=a=0;!e[p];p^=s||1,a=o[a]||1){let m=a^a<<1^a<<2^a<<3^a<<4;m=m>>8^m&255^99,e[p]=m,i[m]=p,c=r[l=r[s=r[p]]];let y=c*16843009^l*65537^s*257^p*16843008,w=r[m]*257^m*16843008;for(let E=0;E<4;E++)n[E][p]=w=w<<24^w>>>8,t[E][m]=y=y<<24^y>>>8}for(let p=0;p<5;p++)n[p]=n[p].slice(0),t[p]=t[p].slice(0)}_crypt(n,t){if(n.length!==4)throw new Error("invalid aes block size");let e=this._key[t],i=e.length/4-2,r=[0,0,0,0],o=this._tables[t],a=o[0],s=o[1],l=o[2],c=o[3],p=o[4],m=n[0]^e[0],y=n[t?3:1]^e[1],w=n[2]^e[2],E=n[t?1:3]^e[3],d=4,f,g,v;for(let _=0;_>>24]^s[y>>16&255]^l[w>>8&255]^c[E&255]^e[d],g=a[y>>>24]^s[w>>16&255]^l[E>>8&255]^c[m&255]^e[d+1],v=a[w>>>24]^s[E>>16&255]^l[m>>8&255]^c[y&255]^e[d+2],E=a[E>>>24]^s[m>>16&255]^l[y>>8&255]^c[w&255]^e[d+3],d+=4,m=f,y=g,w=v;for(let _=0;_<4;_++)r[t?3&-_:_]=p[m>>>24]<<24^p[y>>16&255]<<16^p[w>>8&255]<<8^p[E&255]^e[d++],f=m,m=y,y=w,w=E,E=f;return r}};var Ms={getRandomValues(n){let t=new Uint32Array(n.buffer),e=i=>{let r=987654321,o=4294967295;return function(){return r=36969*(r&65535)+(r>>16)&o,i=18e3*(i&65535)+(i>>16)&o,(((r<<16)+i&o)/4294967296+.5)*(Math.random()>.5?1:-1)}};for(let i=0,r;i>24&255)===255){let t=n>>16&255,e=n>>8&255,i=n&255;t===255?(t=0,e===255?(e=0,i===255?i=0:++i):++e):++t,n=0,n+=t<<16,n+=e<<8,n+=i}else n+=1<<24;return n}incCounter(n){(n[0]=this.incWord(n[0]))===0&&(n[1]=this.incWord(n[1]))}calculate(n,t,e){let i;if(!(i=t.length))return[];let r=Te.bitLength(t);for(let o=0;o>5)+1<<2,o,a,s,l,c,p=new ArrayBuffer(r),m=new DataView(p),y=0,w=Te;for(t=Hn.bytes.toBits(t),c=1;y<(r||1);c++){for(o=a=n.encrypt(w.concat(t,[c])),s=1;sr&&(n=new e().update(n).finalize());for(let o=0;othis.resolveReady=o),password:t,signed:e,strength:i-1,pending:new Uint8Array})},async transform(o,a){let s=this,{password:l,strength:c,resolveReady:p,ready:m}=s;l?(await Qd(s,c,l,Fe(o,0,Wn[c]+2)),o=Fe(o,Wn[c]+2),r?a.error(new Error(pt)):p()):await m;let y=new Uint8Array(o.length-Nt-(o.length-Nt)%mn);a.enqueue(Ws(s,o,y,0,Nt,!0))},async flush(o){let{signed:a,ctr:s,hmac:l,pending:c,ready:p}=this;await p;let m=Fe(c,0,c.length-Nt),y=Fe(c,c.length-Nt),w=new Uint8Array;if(m.length){let E=Yn(Je,m);l.update(E);let d=s.update(E);w=Zn(Je,d)}if(a){let E=Fe(Zn(Je,l.digest()),0,Nt);for(let d=0;dthis.resolveReady=r),password:t,strength:e-1,pending:new Uint8Array})},async transform(r,o){let a=this,{password:s,strength:l,resolveReady:c,ready:p}=a,m=new Uint8Array;s?(m=await em(a,l,s),c()):await p;let y=new Uint8Array(m.length+r.length-r.length%mn);y.set(m,0),o.enqueue(Ws(a,r,y,m.length,0))},async flush(r){let{ctr:o,hmac:a,pending:s,ready:l}=this;await l;let c=new Uint8Array;if(s.length){let p=o.update(Yn(Je,s));a.update(p),c=Zn(Je,p)}i.signature=Zn(Je,a.digest()).slice(0,Nt),r.enqueue(no(c,i.signature))}}),i=this}};function Ws(n,t,e,i,r,o){let{ctr:a,hmac:s,pending:l}=n,c=t.length-r;l.length&&(t=no(l,t),e=im(e,c-c%mn));let p;for(p=0;p<=c-mn;p+=mn){let m=Yn(Je,Fe(t,p,p+mn));o&&s.update(m);let y=a.update(m);o||s.update(y),e.set(Zn(Je,y),p+i)}return n.pending=Fe(t,p),e}async function Qd(n,t,e,i){let r=await Zs(n,t,e,Fe(i,0,Wn[t])),o=Fe(i,Wn[t]);if(r[0]!=o[0]||r[1]!=o[1])throw new Error(kt)}async function em(n,t,e){let i=Si(new Uint8Array(Wn[t])),r=await Zs(n,t,e,i);return no(i,r)}async function Zs(n,t,e,i){n.password=null;let r=Ls(e),o=await tm(Wd,r,zd,!1,Gd),a=await nm(Object.assign({salt:i},to),o,8*(qn[t]*2+2)),s=new Uint8Array(a),l=Yn(Je,Fe(s,0,qn[t])),c=Yn(Je,Fe(s,qn[t],qn[t]*2)),p=Fe(s,qn[t]*2);return Object.assign(n,{keys:{key:l,authentication:c,passwordVerification:p},ctr:new Xd(new Kd(l),Array.from(Vd)),hmac:new Jd(c)}),p}async function tm(n,t,e,i,r){if($s)try{return await zn.importKey(n,t,e,i,r)}catch(o){return $s=!1,At.importKey(t)}else return At.importKey(t)}async function nm(n,t,e){if(Bs)try{return await zn.deriveBits(n,t,e)}catch(i){return Bs=!1,At.pbkdf2(t,n.salt,to.iterations,e)}else return At.pbkdf2(t,n.salt,to.iterations,e)}function no(n,t){let e=n;return n.length+t.length&&(e=new Uint8Array(n.length+t.length),e.set(n,0),e.set(t,n.length)),e}function im(n,t){if(t&&t>n.length){let e=n;n=new Uint8Array(t),n.set(e,0)}return n}function Fe(n,t,e){return n.subarray(t,e)}function Zn(n,t){return n.fromBits(t)}function Yn(n,t){return n.toBits(t)}var hn=12,Ci=class extends TransformStream{constructor({password:t,passwordVerification:e,checkPasswordOnly:i}){super({start(){Object.assign(this,{password:t,passwordVerification:e}),Vs(this,t)},transform(r,o){let a=this;if(a.password){let s=Ys(a,r.subarray(0,hn));if(a.password=null,s[hn-1]!=a.passwordVerification)throw new Error(kt);r=r.subarray(hn)}i?o.error(new Error(pt)):o.enqueue(Ys(a,r))}})}},Ii=class extends TransformStream{constructor({password:t,passwordVerification:e}){super({start(){Object.assign(this,{password:t,passwordVerification:e}),Vs(this,t)},transform(i,r){let o=this,a,s;if(o.password){o.password=null;let l=Si(new Uint8Array(hn));l[hn-1]=o.passwordVerification,a=new Uint8Array(i.length+l.length),a.set(zs(o,l),0),s=hn}else a=new Uint8Array(i.length),s=0;a.set(zs(o,i),s),r.enqueue(a)}})}};function Ys(n,t){let e=new Uint8Array(t.length);for(let i=0;i>>24]),r=~n.crcKey2.get(),n.keys=[e,i,r]}function Ks(n){let t=n.keys[2]|2;return Xs(Math.imul(t,t^1)>>>8)}function Xs(n){return n&255}function Gs(n){return n&4294967295}var Js="deflate-raw",Fi=class extends TransformStream{constructor(t,{chunkSize:e,CompressionStream:i,CompressionStreamNative:r}){super({});let{compressed:o,encrypted:a,useCompressionStream:s,zipCrypto:l,signed:c,level:p}=t,m=this,y,w,E=Qs(super.readable);(!a||l)&&c&&(y=new jn,E=Qe(E,y)),o&&(E=tl(E,s,{level:p,chunkSize:e},r,i)),a&&(l?E=Qe(E,new Ii(t)):(w=new Oi(t),E=Qe(E,w))),el(m,E,async()=>{let d;a&&!l&&(d=w.signature),(!a||l)&&c&&(d=new DataView(y.value.buffer).getUint32(0)),m.signature=d})}},Li=class extends TransformStream{constructor(t,{chunkSize:e,DecompressionStream:i,DecompressionStreamNative:r}){super({});let{zipCrypto:o,encrypted:a,signed:s,signature:l,compressed:c,useCompressionStream:p}=t,m,y,w=Qs(super.readable);a&&(o?w=Qe(w,new Ci(t)):(y=new Ri(t),w=Qe(w,y))),c&&(w=tl(w,p,{chunkSize:e},r,i)),(!a||o)&&s&&(m=new jn,w=Qe(w,m)),el(this,w,async()=>{if((!a||o)&&s){let E=new DataView(m.value.buffer);if(l!=E.getUint32(0,!1))throw new Error(Yt)}})}};function Qs(n){return Qe(n,new TransformStream({transform(t,e){t&&t.length&&e.enqueue(t)}}))}function el(n,t,e){t=Qe(t,new TransformStream({flush:e})),Object.defineProperty(n,"readable",{get(){return t}})}function tl(n,t,e,i,r){try{let o=t&&i?i:r;n=Qe(n,new o(Js,e))}catch(o){if(t)n=Qe(n,new r(Js,e));else throw o}return n}function Qe(n,t){return n.pipeThrough(t)}var nl="message",il="start",rl="pull",ro="data",ol="ack",al="close",sl="deflate",Mi="inflate";var Pi=class extends TransformStream{constructor(t,e){super({});let i=this,{codecType:r}=t,o;r.startsWith(sl)?o=Fi:r.startsWith(Mi)&&(o=Li);let a=0,s=new o(t,e),l=super.readable,c=new TransformStream({transform(p,m){p&&p.length&&(a+=p.length,m.enqueue(p))},flush(){let{signature:p}=s;Object.assign(i,{signature:p,size:a})}});Object.defineProperty(i,"readable",{get(){return l.pipeThrough(s).pipeThrough(c)}})}};var rm=typeof Worker!=dn;var gn=class{constructor(t,{readable:e,writable:i},{options:r,config:o,streamOptions:a,useWebWorkers:s,transferStreams:l,scripts:c},p){let{signal:m}=a;return Object.assign(t,{busy:!0,readable:e.pipeThrough(new ao(e,a,o),{signal:m}),writable:i,options:Object.assign({},r),scripts:c,transferStreams:l,terminate(){let{worker:y,busy:w}=t;y&&!w&&(y.terminate(),t.interface=null)},onTaskFinished(){t.busy=!1,p(t)}}),(s&&rm?am:om)(t,o)}},ao=class extends TransformStream{constructor(t,{onstart:e,onprogress:i,size:r,onend:o},{chunkSize:a}){let s=0;super({start(){e&&oo(e,r)},async transform(l,c){s+=l.length,i&&await oo(i,s,r),c.enqueue(l)},flush(){t.size=s,o&&oo(o,s)}},{highWaterMark:1,size:()=>a})}};async function oo(n,...t){try{await n(...t)}catch(e){}}function om(n,t){return{run:()=>sm(n,t)}}function am(n,{baseURL:t,chunkSize:e}){return n.interface||Object.assign(n,{worker:pm(n.scripts[0],t,n),interface:{run:()=>lm(n,{chunkSize:e})}}),n.interface}async function sm({options:n,readable:t,writable:e,onTaskFinished:i},r){let o=new Pi(n,r);try{await t.pipeThrough(o).pipeTo(e,{preventClose:!0,preventAbort:!0});let{signature:a,size:s}=o;return{signature:a,size:s}}finally{i()}}async function lm(n,t){let e,i,r=new Promise((y,w)=>{e=y,i=w});Object.assign(n,{reader:null,writer:null,resolveResult:e,rejectResult:i,result:r});let{readable:o,options:a,scripts:s}=n,{writable:l,closed:c}=cm(n.writable);so({type:il,scripts:s.slice(1),options:a,config:t,readable:o,writable:l},n)||Object.assign(n,{reader:o.getReader(),writer:l.getWriter()});let m=await r;try{await l.getWriter().close()}catch(y){}return await c,m}function cm(n){let t=n.getWriter(),e,i=new Promise(o=>e=o);return{writable:new WritableStream({async write(o){await t.ready,await t.write(o)},close(){t.releaseLock(),e()},abort(o){return t.abort(o)}}),closed:i}}var ll=!0,cl=!0;function pm(n,t,e){let i={type:"module"},r,o;typeof n==ki&&(n=n());try{r=new URL(n,t)}catch(a){r=n}if(ll)try{o=new Worker(r)}catch(a){ll=!1,o=new Worker(r,i)}else o=new Worker(r,i);return o.addEventListener(nl,a=>um(a,e)),o}function so(n,{worker:t,writer:e,onTaskFinished:i,transferStreams:r}){try{let{value:o,readable:a,writable:s}=n,l=[];if(o&&(n.value=o.buffer,l.push(n.value)),r&&cl?(a&&l.push(a),s&&l.push(s)):n.readable=n.writable=null,l.length)try{return t.postMessage(n,l),!0}catch(c){cl=!1,n.readable=n.writable=null,t.postMessage(n)}else t.postMessage(n)}catch(o){throw e&&e.releaseLock(),i(),o}}async function um({data:n},t){let{type:e,value:i,messageId:r,result:o,error:a}=n,{reader:s,writer:l,resolveResult:c,rejectResult:p,onTaskFinished:m}=t;try{if(a){let{message:w,stack:E,code:d,name:f}=a,g=new Error(w);Object.assign(g,{stack:E,code:d,name:f}),y(g)}else{if(e==rl){let{value:w,done:E}=await s.read();so({type:ro,value:w,done:E,messageId:r},t)}e==ro&&(await l.ready,await l.write(new Uint8Array(i)),so({type:ol,messageId:r},t)),e==al&&y(null,o)}}catch(w){y(w)}function y(w,E){w?p(w):c(E),l&&l.releaseLock(),m()}}var zt=[],lo=[];var pl=0;async function fl(n,t){let{options:e,config:i}=t,{transferStreams:r,useWebWorkers:o,useCompressionStream:a,codecType:s,compressed:l,signed:c,encrypted:p}=e,{workerScripts:m,maxWorkers:y,terminateWorkerTimeout:w}=i;t.transferStreams=r||r===_e;let E=!l&&!c&&!p&&!t.transferStreams;t.useWebWorkers=!E&&(o||o===_e&&i.useWebWorkers),t.scripts=t.useWebWorkers&&m?m[s]:[],e.useCompressionStream=a||a===_e&&i.useCompressionStream;let d,f=zt.find(v=>!v.busy);if(f)ul(f),d=new gn(f,n,t,g);else if(zt.lengthlo.push({resolve:v,stream:n,workerOptions:t}));return d.run();function g(v){if(lo.length){let[{resolve:_,stream:A,workerOptions:D}]=lo.splice(0,1);_(new gn(v,A,D,g))}else v.worker?(ul(v),Number.isFinite(w)&&w>=0&&(v.terminateTimeout=setTimeout(()=>{zt=zt.filter(_=>_!=v),v.terminate()},w))):zt=zt.filter(_=>_!=v)}}function ul(n){let{terminateTimeout:t}=n;t&&(clearTimeout(t),n.terminateTimeout=null)}var fm="Writer iterator completed too soon";var dm="Content-Type";var mm=64*1024,dl="writable",Gn=class{constructor(){this.size=0}init(){this.initialized=!0}},yn=class extends Gn{get readable(){let t=this,{chunkSize:e=mm}=t,i=new ReadableStream({start(){this.chunkOffset=0},async pull(r){let{offset:o=0,size:a,diskNumberStart:s}=i,{chunkOffset:l}=this;r.enqueue(await xe(t,o+l,Math.min(e,a-l),s)),l+e>a?r.close():this.chunkOffset+=e}});return i}};var St=class extends yn{constructor(t){super(),Object.assign(this,{blob:t,size:t.size})}async readUint8Array(t,e){let i=this,r=t+e,a=await(t||re&&(a=a.slice(t,r)),new Uint8Array(a)}},Vn=class extends Gn{constructor(t){super();let e=this,i=new TransformStream,r=[];t&&r.push([dm,t]),Object.defineProperty(e,dl,{get(){return i.writable}}),e.blob=new Response(i.readable,{headers:r}).blob()}getData(){return this.blob}};var $i=class extends Vn{constructor(t){super(t),Object.assign(this,{encoding:t,utf8:!t||t.toLowerCase()=="utf-8"})}async getData(){let{encoding:t,utf8:e}=this,i=await super.getData();if(i.text&&e)return i.text();{let r=new FileReader;return new Promise((o,a)=>{Object.assign(r,{onload:({target:s})=>o(s.result),onerror:()=>a(r.error)}),r.readAsText(i,t)})}}};var co=class extends yn{constructor(t){super(),this.readers=t}async init(){let t=this,{readers:e}=t;t.lastDiskNumber=0,t.lastDiskOffset=0,await Promise.all(e.map(async(i,r)=>{await i.init(),r!=e.length-1&&(t.lastDiskOffset+=i.size),t.size+=i.size})),super.init()}async readUint8Array(t,e,i=0){let r=this,{readers:o}=this,a,s=i;s==-1&&(s=o.length-1);let l=t;for(;l>=o[s].size;)l-=o[s].size,s++;let c=o[s],p=c.size;if(l+e<=p)a=await xe(c,l,e);else{let m=p-l;a=new Uint8Array(e),a.set(await xe(c,l,m)),a.set(await r.readUint8Array(t+m,e-m,i),m)}return r.lastDiskNumber=Math.max(s,r.lastDiskNumber),a}},Bi=class extends Gn{constructor(t,e=4294967295){super();let i=this;Object.assign(i,{diskNumber:0,diskOffset:0,size:0,maxSize:e,availableSize:e});let r,o,a,s=new WritableStream({async write(p){let{availableSize:m}=i;if(a)p.length>=m?(await l(p.slice(0,m)),await c(),i.diskOffset+=r.size,i.diskNumber++,a=null,await this.write(p.slice(m))):await l(p);else{let{value:y,done:w}=await t.next();if(w&&!y)throw new Error(fm);r=y,r.size=0,r.maxSize&&(i.maxSize=r.maxSize),i.availableSize=i.maxSize,await Kn(r),o=y.writable,a=o.getWriter(),await this.write(p)}},async close(){await a.ready,await c()}});Object.defineProperty(i,dl,{get(){return s}});async function l(p){let m=p.length;m&&(await a.ready,await a.write(p),r.size+=m,i.size+=m,i.availableSize-=m)}async function c(){o.size=r.size,await a.close()}}};async function Kn(n,t){n.init&&!n.initialized&&await n.init(t)}function ml(n){return Array.isArray(n)&&(n=new co(n)),n instanceof ReadableStream&&(n={readable:n}),n}function hl(n){n.writable===_e&&typeof n.next==ki&&(n=new Bi(n)),n instanceof WritableStream&&(n={writable:n});let{writable:t}=n;return t.size===_e&&(t.size=0),n instanceof Bi||Object.assign(n,{diskNumber:0,diskOffset:0,availableSize:1/0,maxSize:1/0}),n}function xe(n,t,e,i){return n.readUint8Array(t,e,i)}var gl="\0\u263A\u263B\u2665\u2666\u2663\u2660\u2022\u25D8\u25CB\u25D9\u2642\u2640\u266A\u266B\u263C\u25BA\u25C4\u2195\u203C\xB6\xA7\u25AC\u21A8\u2191\u2193\u2192\u2190\u221F\u2194\u25B2\u25BC !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u2302\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0 ".split(""),hm=gl.length==256;function yl(n){if(hm){let t="";for(let e=0;ethis[e]=t[e])}};var To="File format is not recognized",Pm="End of central directory not found",Mm="End of Zip64 central directory not found",$m="End of Zip64 central directory locator not found",Bm="Central directory header not found",Um="Local file header not found",jm="Zip64 extra field not found",Hm="File contains encrypted entry",qm="Encryption method not supported",kl="Compression method not supported",Nl="Split zip file",Sl="utf-8",Rl="cp437",Wm=[[ho,4294967295],[go,4294967295],[yo,4294967295],[ji,65535]],Zm={[65535]:{getValue:ae,bytes:4},[4294967295]:{getValue:qi,bytes:8}},Vt=class{constructor(t,e={}){Object.assign(this,{reader:ml(t),options:e,config:Jr()})}async*getEntriesGenerator(t={}){let e=this,{reader:i}=e,{config:r}=e;if(await Kn(i),(i.size===_e||!i.readUint8Array)&&(i=new St(await new Response(i.readable).blob()),await Kn(i)),i.size<22)throw new Error(To);i.chunkSize=Is(r);let o=await Km(i,101010256,i.size,22,65535*16);if(!o){let O=await xe(i,0,4),S=he(O);throw ae(S)==134695760?new Error(Nl):new Error(Pm)}let a=he(o),s=ae(a,12),l=ae(a,16),c=o.offset,p=me(a,20),m=c+22+p,y=me(a,4),w=i.lastDiskNumber||0,E=me(a,6),d=me(a,8),f=0,g=0;if(l==4294967295||s==4294967295||d==65535||E==65535){let O=await xe(i,o.offset-20,20),S=he(O);if(ae(S,0)!=117853008)throw new Error(Mm);l=qi(S,8);let M=await xe(i,l,56,-1),L=he(M),j=o.offset-20-56;if(ae(L,0)!=101075792&&l!=j){let Z=l;l=j,f=l-Z,M=await xe(i,l,56,-1),L=he(M)}if(ae(L,0)!=101075792)throw new Error($m);y==65535&&(y=ae(L,16)),E==65535&&(E=ae(L,20)),d==65535&&(d=qi(L,32)),s==4294967295&&(s=qi(L,40)),l-=s}if(w!=y)throw new Error(Nl);if(l<0||l>=i.size)throw new Error(To);let v=0,_=await xe(i,l,s,E),A=he(_);if(s){let O=o.offset-s;if(ae(A,v)!=33639248&&l!=O){let S=l;l=O,f=l-S,_=await xe(i,l,s,E),A=he(_)}}let D=o.offset-l-(i.lastDiskOffset||0);if(s!=D&&D>=0&&(s=D,_=await xe(i,l,s,E),A=he(_)),l<0||l>=i.size)throw new Error(To);let T=Le(e,t,"filenameEncoding"),k=Le(e,t,"commentEncoding");for(let O=0;OS.getData(N,R,I),v=U;let{onprogress:x}=t;if(x)try{await x(O+1,d,new Xn(S))}catch(N){}yield R}let b=Le(e,t,"extractPrependedData"),C=Le(e,t,"extractAppendedData");return b&&(e.prependedData=g>0?await xe(i,0,g):new Uint8Array),e.comment=p?await xe(i,c+22,p):new Uint8Array,C&&(e.appendedData=m>>8&255:y>>>24&255),signature:y,compressed:c!=0,encrypted:A,useWebWorkers:Le(r,i,"useWebWorkers"),useCompressionStream:Le(r,i,"useCompressionStream"),transferStreams:Le(r,i,"transferStreams"),checkPasswordOnly:O},config:p,streamOptions:{signal:C,size:k,onstart:M,onprogress:L,onend:j}},F=0;try{({outputSize:F}=await fl({readable:b,writable:S},Z))}catch(ee){if(!O||ee.message!=pt)throw ee}finally{let ee=Le(r,i,"preventClose");S.size+=F,!ee&&!S.locked&&await S.getWriter().close()}return O?void 0:t.getData?t.getData():S}};function Dl(n,t,e){let i=n.rawBitFlag=me(t,e+2),r=(i&1)==1,o=ae(t,e+6);Object.assign(n,{encrypted:r,version:me(t,e),bitFlag:{level:(i&6)>>1,dataDescriptor:(i&8)==8,languageEncodingFlag:(i&2048)==2048},rawLastModDate:o,lastModDate:Xm(o),filenameLength:me(t,e+22),extraFieldLength:me(t,e+24)})}async function Cl(n,t,e,i){let{rawExtraField:r}=t,o=t.extraField=new Map,a=he(new Uint8Array(r)),s=0;try{for(;st[r]==o);for(let r=0,o=0;r{if(n.data.length>=a+4){let c=ae(e,a);t[s]=n[s]=new Date(c*1e3);let p=o[l];n[p]=c}a+=4})}async function Km(n,t,e,i,r){let o=new Uint8Array(4),a=he(o);Jm(a,0,t);let s=i+r;return await l(i)||await l(Math.min(s,e));async function l(c){let p=e-c,m=await xe(n,p,c);for(let y=m.length-i;y>=0;y--)if(m[y]==o[0]&&m[y+1]==o[1]&&m[y+2]==o[2]&&m[y+3]==o[3])return{offset:p+y,buffer:m.slice(y,y+i).buffer}}}function Le(n,t,e){return t[e]===_e?n.options[e]:t[e]}function Xm(n){let t=(n&4294901760)>>16,e=n&65535;try{return new Date(1980+((t&65024)>>9),((t&480)>>5)-1,t&31,(e&63488)>>11,(e&2016)>>5,(e&31)*2,0)}catch(i){}}function Ao(n){return new Date(Number(n/BigInt(1e4)-BigInt(116444736e5)))}function bn(n,t){return n.getUint8(t)}function me(n,t){return n.getUint16(t,!0)}function ae(n,t){return n.getUint32(t,!0)}function qi(n,t){return Number(n.getBigUint64(t,!0))}function Jm(n,t,e){n.setUint32(t,e,!0)}function he(n){return new DataView(n.buffer)}Ni({Inflate:Os});var Kt=require("obsidian");function Il(n){let t=()=>URL.createObjectURL(new Blob([`const{Array:e,Object:t,Number:n,Math:r,Error:s,Uint8Array:i,Uint16Array:o,Uint32Array:c,Int32Array:f,Map:a,DataView:l,Promise:u,TextEncoder:w,crypto:h,postMessage:d,TransformStream:p,ReadableStream:y,WritableStream:m,CompressionStream:b,DecompressionStream:g}=self;class k{constructor(e){return class extends p{constructor(t,n){const r=new e(n);super({transform(e,t){t.enqueue(r.append(e))},flush(e){const t=r.flush();t&&e.enqueue(t)}})}}}}const v=[];for(let e=0;256>e;e++){let t=e;for(let e=0;8>e;e++)1&t?t=t>>>1^3988292384:t>>>=1;v[e]=t}class S{constructor(e){this.t=e||-1}append(e){let t=0|this.t;for(let n=0,r=0|e.length;r>n;n++)t=t>>>8^v[255&(t^e[n])];this.t=t}get(){return~this.t}}class z extends p{constructor(){let e;const t=new S;super({transform(e,n){t.append(e),n.enqueue(e)},flush(){const n=new i(4);new l(n.buffer).setUint32(0,t.get()),e.value=n}}),e=this}}const C={concat(e,t){if(0===e.length||0===t.length)return e.concat(t);const n=e[e.length-1],r=C.i(n);return 32===r?e.concat(t):C.o(t,r,0|n,e.slice(0,e.length-1))},l(e){const t=e.length;if(0===t)return 0;const n=e[t-1];return 32*(t-1)+C.i(n)},u(e,t){if(32*e.length0&&t&&(e[n-1]=C.h(t,e[n-1]&2147483648>>t-1,1)),e},h:(e,t,n)=>32===e?t:(n?0|t:t<<32-e)+1099511627776*e,i:e=>r.round(e/1099511627776)||32,o(e,t,n,r){for(void 0===r&&(r=[]);t>=32;t-=32)r.push(n),n=0;if(0===t)return r.concat(e);for(let s=0;s>>t),n=e[s]<<32-t;const s=e.length?e[e.length-1]:0,i=C.i(s);return r.push(C.h(t+i&31,t+i>32?n:r.pop(),1)),r}},x={p:{m(e){const t=C.l(e)/8,n=new i(t);let r;for(let s=0;t>s;s++)0==(3&s)&&(r=e[s/4]),n[s]=r>>>24,r<<=8;return n},g(e){const t=[];let n,r=0;for(n=0;n9007199254740991)throw new s("Cannot hash more than 2^53 - 1 bits");const o=new c(n);let f=0;for(let e=t.blockSize+r-(t.blockSize+r&t.blockSize-1);i>=e;e+=t.blockSize)t.I(o.subarray(16*f,16*(f+1))),f+=1;return n.splice(0,16*f),t}D(){const e=this;let t=e.C;const n=e.S;t=C.concat(t,[C.h(1,1)]);for(let e=t.length+2;15&e;e++)t.push(0);for(t.push(r.floor(e._/4294967296)),t.push(0|e._);t.length;)e.I(t.splice(0,16));return e.reset(),n}V(e,t,n,r){return e>19?e>39?e>59?e>79?void 0:t^n^r:t&n|t&r|n&r:t^n^r:t&n|~t&r}P(e,t){return t<>>32-e}I(t){const n=this,s=n.S,i=e(80);for(let e=0;16>e;e++)i[e]=t[e];let o=s[0],c=s[1],f=s[2],a=s[3],l=s[4];for(let e=0;79>=e;e++){16>e||(i[e]=n.P(1,i[e-3]^i[e-8]^i[e-14]^i[e-16]));const t=n.P(5,o)+n.V(e,c,f,a)+l+i[e]+n.v[r.floor(e/20)]|0;l=a,a=f,f=n.P(30,c),c=o,o=t}s[0]=s[0]+o|0,s[1]=s[1]+c|0,s[2]=s[2]+f|0,s[3]=s[3]+a|0,s[4]=s[4]+l|0}},A={getRandomValues(e){const t=new c(e.buffer),n=e=>{let t=987654321;const n=4294967295;return()=>(t=36969*(65535&t)+(t>>16)&n,(((t<<16)+(e=18e3*(65535&e)+(e>>16)&n)&n)/4294967296+.5)*(r.random()>.5?1:-1))};for(let s,i=0;inew I.R(x.p.g(e)),B(e,t,n,r){if(n=n||1e4,0>r||0>n)throw new s("invalid params to pbkdf2");const i=1+(r>>5)<<2;let o,c,f,a,u;const w=new ArrayBuffer(i),h=new l(w);let d=0;const p=C;for(t=x.p.g(t),u=1;(i||1)>d;u++){for(o=c=e.encrypt(p.concat(t,[u])),f=1;n>f;f++)for(c=e.encrypt(c),a=0;ad&&fs&&(e=(new n).update(e).D());for(let t=0;s>t;t++)r[0][t]=909522486^e[t],r[1][t]=1549556828^e[t];t.K[0].update(r[0]),t.K[1].update(r[1]),t.U=new n(t.K[0])}reset(){const e=this;e.U=new e.M(e.K[0]),e.N=!1}update(e){this.N=!0,this.U.update(e)}digest(){const e=this,t=e.U.D(),n=new e.M(e.K[1]).update(t).D();return e.reset(),n}encrypt(e){if(this.N)throw new s("encrypt on already updated hmac called!");return this.update(e),this.digest(e)}}},D=void 0!==h&&"function"==typeof h.getRandomValues,V="Invalid password",P="Invalid signature",R="zipjs-abort-check-password";function B(e){return D?h.getRandomValues(e):A.getRandomValues(e)}const E=16,M={name:"PBKDF2"},K=t.assign({hash:{name:"HMAC"}},M),U=t.assign({iterations:1e3,hash:{name:"SHA-1"}},M),N=["deriveBits"],O=[8,12,16],T=[16,24,32],W=10,j=[0,0,0,0],H="undefined",L="function",F=typeof h!=H,q=F&&h.subtle,G=F&&typeof q!=H,J=x.p,Q=class{constructor(e){const t=this;t.O=[[[],[],[],[],[]],[[],[],[],[],[]]],t.O[0][0][0]||t.T();const n=t.O[0][4],r=t.O[1],i=e.length;let o,c,f,a=1;if(4!==i&&6!==i&&8!==i)throw new s("invalid aes key size");for(t.v=[c=e.slice(0),f=[]],o=i;4*i+28>o;o++){let e=c[o-1];(o%i==0||8===i&&o%i==4)&&(e=n[e>>>24]<<24^n[e>>16&255]<<16^n[e>>8&255]<<8^n[255&e],o%i==0&&(e=e<<8^e>>>24^a<<24,a=a<<1^283*(a>>7))),c[o]=c[o-i]^e}for(let e=0;o;e++,o--){const t=c[3&e?o:o-4];f[e]=4>=o||4>e?t:r[0][n[t>>>24]]^r[1][n[t>>16&255]]^r[2][n[t>>8&255]]^r[3][n[255&t]]}}encrypt(e){return this.W(e,0)}decrypt(e){return this.W(e,1)}T(){const e=this.O[0],t=this.O[1],n=e[4],r=t[4],s=[],i=[];let o,c,f,a;for(let e=0;256>e;e++)i[(s[e]=e<<1^283*(e>>7))^e]=e;for(let l=o=0;!n[l];l^=c||1,o=i[o]||1){let i=o^o<<1^o<<2^o<<3^o<<4;i=i>>8^255&i^99,n[l]=i,r[i]=l,a=s[f=s[c=s[l]]];let u=16843009*a^65537*f^257*c^16843008*l,w=257*s[i]^16843008*i;for(let n=0;4>n;n++)e[n][l]=w=w<<24^w>>>8,t[n][i]=u=u<<24^u>>>8}for(let n=0;5>n;n++)e[n]=e[n].slice(0),t[n]=t[n].slice(0)}W(e,t){if(4!==e.length)throw new s("invalid aes block size");const n=this.v[t],r=n.length/4-2,i=[0,0,0,0],o=this.O[t],c=o[0],f=o[1],a=o[2],l=o[3],u=o[4];let w,h,d,p=e[0]^n[0],y=e[t?3:1]^n[1],m=e[2]^n[2],b=e[t?1:3]^n[3],g=4;for(let e=0;r>e;e++)w=c[p>>>24]^f[y>>16&255]^a[m>>8&255]^l[255&b]^n[g],h=c[y>>>24]^f[m>>16&255]^a[b>>8&255]^l[255&p]^n[g+1],d=c[m>>>24]^f[b>>16&255]^a[p>>8&255]^l[255&y]^n[g+2],b=c[b>>>24]^f[p>>16&255]^a[y>>8&255]^l[255&m]^n[g+3],g+=4,p=w,y=h,m=d;for(let e=0;4>e;e++)i[t?3&-e:e]=u[p>>>24]<<24^u[y>>16&255]<<16^u[m>>8&255]<<8^u[255&b]^n[g++],w=p,p=y,y=m,m=b,b=w;return i}},X=class{constructor(e,t){this.j=e,this.H=t,this.L=t}reset(){this.L=this.H}update(e){return this.F(this.j,e,this.L)}q(e){if(255==(e>>24&255)){let t=e>>16&255,n=e>>8&255,r=255&e;255===t?(t=0,255===n?(n=0,255===r?r=0:++r):++n):++t,e=0,e+=t<<16,e+=n<<8,e+=r}else e+=1<<24;return e}G(e){0===(e[0]=this.q(e[0]))&&(e[1]=this.q(e[1]))}F(e,t,n){let r;if(!(r=t.length))return[];const s=C.l(t);for(let s=0;r>s;s+=4){this.G(n);const r=e.encrypt(n);t[s]^=r[0],t[s+1]^=r[1],t[s+2]^=r[2],t[s+3]^=r[3]}return C.u(t,s)}},Y=I.R;let Z=F&&G&&typeof q.importKey==L,$=F&&G&&typeof q.deriveBits==L;class ee extends p{constructor({password:e,signed:n,encryptionStrength:r,checkPasswordOnly:o}){super({start(){t.assign(this,{ready:new u((e=>this.J=e)),password:e,signed:n,X:r-1,pending:new i})},async transform(e,t){const n=this,{password:r,X:c,J:f,ready:a}=n;r?(await(async(e,t,n,r)=>{const i=await re(e,t,n,ie(r,0,O[t])),o=ie(r,O[t]);if(i[0]!=o[0]||i[1]!=o[1])throw new s(V)})(n,c,r,ie(e,0,O[c]+2)),e=ie(e,O[c]+2),o?t.error(new s(R)):f()):await a;const l=new i(e.length-W-(e.length-W)%E);t.enqueue(ne(n,e,l,0,W,!0))},async flush(e){const{signed:t,Y:n,Z:r,pending:o,ready:c}=this;await c;const f=ie(o,0,o.length-W),a=ie(o,o.length-W);let l=new i;if(f.length){const e=ce(J,f);r.update(e);const t=n.update(e);l=oe(J,t)}if(t){const e=ie(oe(J,r.digest()),0,W);for(let t=0;W>t;t++)if(e[t]!=a[t])throw new s(P)}e.enqueue(l)}})}}class te extends p{constructor({password:e,encryptionStrength:n}){let r;super({start(){t.assign(this,{ready:new u((e=>this.J=e)),password:e,X:n-1,pending:new i})},async transform(e,t){const n=this,{password:r,X:s,J:o,ready:c}=n;let f=new i;r?(f=await(async(e,t,n)=>{const r=B(new i(O[t]));return se(r,await re(e,t,n,r))})(n,s,r),o()):await c;const a=new i(f.length+e.length-e.length%E);a.set(f,0),t.enqueue(ne(n,e,a,f.length,0))},async flush(e){const{Y:t,Z:n,pending:s,ready:o}=this;await o;let c=new i;if(s.length){const e=t.update(ce(J,s));n.update(e),c=oe(J,e)}r.signature=oe(J,n.digest()).slice(0,W),e.enqueue(se(c,r.signature))}}),r=this}}function ne(e,t,n,r,s,o){const{Y:c,Z:f,pending:a}=e,l=t.length-s;let u;for(a.length&&(t=se(a,t),n=((e,t)=>{if(t&&t>e.length){const n=e;(e=new i(t)).set(n,0)}return e})(n,l-l%E)),u=0;l-E>=u;u+=E){const e=ce(J,ie(t,u,u+E));o&&f.update(e);const s=c.update(e);o||f.update(s),n.set(oe(J,s),u+r)}return e.pending=ie(t,u),n}async function re(n,r,s,o){n.password=null;const c=(e=>{if(void 0===w){const t=new i((e=unescape(encodeURIComponent(e))).length);for(let n=0;n{if(!Z)return I.importKey(t);try{return await q.importKey("raw",t,n,!1,s)}catch(e){return Z=!1,I.importKey(t)}})(0,c,K,0,N),a=await(async(e,t,n)=>{if(!$)return I.B(t,e.salt,U.iterations,n);try{return await q.deriveBits(e,t,n)}catch(r){return $=!1,I.B(t,e.salt,U.iterations,n)}})(t.assign({salt:o},U),f,8*(2*T[r]+2)),l=new i(a),u=ce(J,ie(l,0,T[r])),h=ce(J,ie(l,T[r],2*T[r])),d=ie(l,2*T[r]);return t.assign(n,{keys:{key:u,$:h,passwordVerification:d},Y:new X(new Q(u),e.from(j)),Z:new Y(h)}),d}function se(e,t){let n=e;return e.length+t.length&&(n=new i(e.length+t.length),n.set(e,0),n.set(t,e.length)),n}function ie(e,t,n){return e.subarray(t,n)}function oe(e,t){return e.m(t)}function ce(e,t){return e.g(t)}class fe extends p{constructor({password:e,passwordVerification:n,checkPasswordOnly:r}){super({start(){t.assign(this,{password:e,passwordVerification:n}),we(this,e)},transform(e,t){const n=this;if(n.password){const t=le(n,e.subarray(0,12));if(n.password=null,t[11]!=n.passwordVerification)throw new s(V);e=e.subarray(12)}r?t.error(new s(R)):t.enqueue(le(n,e))}})}}class ae extends p{constructor({password:e,passwordVerification:n}){super({start(){t.assign(this,{password:e,passwordVerification:n}),we(this,e)},transform(e,t){const n=this;let r,s;if(n.password){n.password=null;const t=B(new i(12));t[11]=n.passwordVerification,r=new i(e.length+t.length),r.set(ue(n,t),0),s=12}else r=new i(e.length),s=0;r.set(ue(n,e),s),t.enqueue(r)}})}}function le(e,t){const n=new i(t.length);for(let r=0;r>>24]),i=~e.te.get(),e.keys=[n,s,i]}function de(e){const t=2|e.keys[2];return pe(r.imul(t,1^t)>>>8)}function pe(e){return 255&e}function ye(e){return 4294967295&e}const me="deflate-raw";class be extends p{constructor(e,{chunkSize:t,CompressionStream:n,CompressionStreamNative:r}){super({});const{compressed:s,encrypted:i,useCompressionStream:o,zipCrypto:c,signed:f,level:a}=e,u=this;let w,h,d=ke(super.readable);i&&!c||!f||(w=new z,d=ze(d,w)),s&&(d=Se(d,o,{level:a,chunkSize:t},r,n)),i&&(c?d=ze(d,new ae(e)):(h=new te(e),d=ze(d,h))),ve(u,d,(async()=>{let e;i&&!c&&(e=h.signature),i&&!c||!f||(e=new l(w.value.buffer).getUint32(0)),u.signature=e}))}}class ge extends p{constructor(e,{chunkSize:t,DecompressionStream:n,DecompressionStreamNative:r}){super({});const{zipCrypto:i,encrypted:o,signed:c,signature:f,compressed:a,useCompressionStream:u}=e;let w,h,d=ke(super.readable);o&&(i?d=ze(d,new fe(e)):(h=new ee(e),d=ze(d,h))),a&&(d=Se(d,u,{chunkSize:t},r,n)),o&&!i||!c||(w=new z,d=ze(d,w)),ve(this,d,(async()=>{if((!o||i)&&c){const e=new l(w.value.buffer);if(f!=e.getUint32(0,!1))throw new s(P)}}))}}function ke(e){return ze(e,new p({transform(e,t){e&&e.length&&t.enqueue(e)}}))}function ve(e,n,r){n=ze(n,new p({flush:r})),t.defineProperty(e,"readable",{get:()=>n})}function Se(e,t,n,r,s){try{e=ze(e,new(t&&r?r:s)(me,n))}catch(r){if(!t)throw r;e=ze(e,new s(me,n))}return e}function ze(e,t){return e.pipeThrough(t)}const Ce="data";class xe extends p{constructor(e,n){super({});const r=this,{codecType:s}=e;let i;s.startsWith("deflate")?i=be:s.startsWith("inflate")&&(i=ge);let o=0;const c=new i(e,n),f=super.readable,a=new p({transform(e,t){e&&e.length&&(o+=e.length,t.enqueue(e))},flush(){const{signature:e}=c;t.assign(r,{signature:e,size:o})}});t.defineProperty(r,"readable",{get:()=>f.pipeThrough(c).pipeThrough(a)})}}const _e=new a,Ae=new a;let Ie=0;async function De(e){try{const{options:t,scripts:r,config:s}=e;r&&r.length&&importScripts.apply(void 0,r),self.initCodec&&self.initCodec(),s.CompressionStreamNative=self.CompressionStream,s.DecompressionStreamNative=self.DecompressionStream,self.Deflate&&(s.CompressionStream=new k(self.Deflate)),self.Inflate&&(s.DecompressionStream=new k(self.Inflate));const i={highWaterMark:1,size:()=>s.chunkSize},o=e.readable||new y({async pull(e){const t=new u((e=>_e.set(Ie,e)));Ve({type:"pull",messageId:Ie}),Ie=(Ie+1)%n.MAX_SAFE_INTEGER;const{value:r,done:s}=await t;e.enqueue(r),s&&e.close()}},i),c=e.writable||new m({async write(e){let t;const r=new u((e=>t=e));Ae.set(Ie,t),Ve({type:Ce,value:e,messageId:Ie}),Ie=(Ie+1)%n.MAX_SAFE_INTEGER,await r}},i),f=new xe(t,s);await o.pipeThrough(f).pipeTo(c,{preventClose:!0,preventAbort:!0});try{await c.getWriter().close()}catch(e){}const{signature:a,size:l}=f;Ve({type:"close",result:{signature:a,size:l}})}catch(e){Pe(e)}}function Ve(e){let{value:t}=e;if(t)if(t.length)try{t=new i(t),e.value=t.buffer,d(e,[e.value])}catch(t){d(e)}else d(e);else d(e)}function Pe(e){const{message:t,stack:n,code:r,name:s}=e;d({error:{message:t,stack:n,code:r,name:s}})}addEventListener("message",(({data:e})=>{const{type:t,messageId:n,value:r,done:s}=e;try{if("start"==t&&De(e),t==Ce){const e=_e.get(n);_e.delete(n),e({value:new i(r),done:s})}if("ack"==t){const e=Ae.get(n);Ae.delete(n),e()}}catch(e){Pe(e)}}));const Re=-2;function Be(t){return Ee(t.map((([t,n])=>new e(t).fill(n,0,t))))}function Ee(t){return t.reduce(((t,n)=>t.concat(e.isArray(n)?Ee(n):n)),[])}const Me=[0,1,2,3].concat(...Be([[2,4],[2,5],[4,6],[4,7],[8,8],[8,9],[16,10],[16,11],[32,12],[32,13],[64,14],[64,15],[2,0],[1,16],[1,17],[2,18],[2,19],[4,20],[4,21],[8,22],[8,23],[16,24],[16,25],[32,26],[32,27],[64,28],[64,29]]));function Ke(){const e=this;function t(e,t){let n=0;do{n|=1&e,e>>>=1,n<<=1}while(--t>0);return n>>>1}e.ne=n=>{const s=e.re,i=e.ie.se,o=e.ie.oe;let c,f,a,l=-1;for(n.ce=0,n.fe=573,c=0;o>c;c++)0!==s[2*c]?(n.ae[++n.ce]=l=c,n.le[c]=0):s[2*c+1]=0;for(;2>n.ce;)a=n.ae[++n.ce]=2>l?++l:0,s[2*a]=1,n.le[a]=0,n.ue--,i&&(n.we-=i[2*a+1]);for(e.he=l,c=r.floor(n.ce/2);c>=1;c--)n.de(s,c);a=o;do{c=n.ae[1],n.ae[1]=n.ae[n.ce--],n.de(s,1),f=n.ae[1],n.ae[--n.fe]=c,n.ae[--n.fe]=f,s[2*a]=s[2*c]+s[2*f],n.le[a]=r.max(n.le[c],n.le[f])+1,s[2*c+1]=s[2*f+1]=a,n.ae[1]=a++,n.de(s,1)}while(n.ce>=2);n.ae[--n.fe]=n.ae[1],(t=>{const n=e.re,r=e.ie.se,s=e.ie.pe,i=e.ie.ye,o=e.ie.me;let c,f,a,l,u,w,h=0;for(l=0;15>=l;l++)t.be[l]=0;for(n[2*t.ae[t.fe]+1]=0,c=t.fe+1;573>c;c++)f=t.ae[c],l=n[2*n[2*f+1]+1]+1,l>o&&(l=o,h++),n[2*f+1]=l,f>e.he||(t.be[l]++,u=0,i>f||(u=s[f-i]),w=n[2*f],t.ue+=w*(l+u),r&&(t.we+=w*(r[2*f+1]+u)));if(0!==h){do{for(l=o-1;0===t.be[l];)l--;t.be[l]--,t.be[l+1]+=2,t.be[o]--,h-=2}while(h>0);for(l=o;0!==l;l--)for(f=t.be[l];0!==f;)a=t.ae[--c],a>e.he||(n[2*a+1]!=l&&(t.ue+=(l-n[2*a+1])*n[2*a],n[2*a+1]=l),f--)}})(n),((e,n,r)=>{const s=[];let i,o,c,f=0;for(i=1;15>=i;i++)s[i]=f=f+r[i-1]<<1;for(o=0;n>=o;o++)c=e[2*o+1],0!==c&&(e[2*o]=t(s[c]++,c))})(s,e.he,n.be)}}function Ue(e,t,n,r,s){const i=this;i.se=e,i.pe=t,i.ye=n,i.oe=r,i.me=s}Ke.ge=[0,1,2,3,4,5,6,7].concat(...Be([[2,8],[2,9],[2,10],[2,11],[4,12],[4,13],[4,14],[4,15],[8,16],[8,17],[8,18],[8,19],[16,20],[16,21],[16,22],[16,23],[32,24],[32,25],[32,26],[31,27],[1,28]])),Ke.ke=[0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128,160,192,224,0],Ke.ve=[0,1,2,3,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,1024,1536,2048,3072,4096,6144,8192,12288,16384,24576],Ke.Se=e=>256>e?Me[e]:Me[256+(e>>>7)],Ke.ze=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],Ke.Ce=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],Ke.xe=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],Ke._e=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];const Ne=Be([[144,8],[112,9],[24,7],[8,8]]);Ue.Ae=Ee([12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,19,275,147,403,83,339,211,467,51,307,179,435,115,371,243,499,11,267,139,395,75,331,203,459,43,299,171,427,107,363,235,491,27,283,155,411,91,347,219,475,59,315,187,443,123,379,251,507,7,263,135,391,71,327,199,455,39,295,167,423,103,359,231,487,23,279,151,407,87,343,215,471,55,311,183,439,119,375,247,503,15,271,143,399,79,335,207,463,47,303,175,431,111,367,239,495,31,287,159,415,95,351,223,479,63,319,191,447,127,383,255,511,0,64,32,96,16,80,48,112,8,72,40,104,24,88,56,120,4,68,36,100,20,84,52,116,3,131,67,195,35,163,99,227].map(((e,t)=>[e,Ne[t]])));const Oe=Be([[30,5]]);function Te(e,t,n,r,s){const i=this;i.Ie=e,i.De=t,i.Ve=n,i.Pe=r,i.Re=s}Ue.Be=Ee([0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30,1,17,9,25,5,21,13,29,3,19,11,27,7,23].map(((e,t)=>[e,Oe[t]]))),Ue.Ee=new Ue(Ue.Ae,Ke.ze,257,286,15),Ue.Me=new Ue(Ue.Be,Ke.Ce,0,30,15),Ue.Ke=new Ue(null,Ke.xe,0,19,7);const We=[new Te(0,0,0,0,0),new Te(4,4,8,4,1),new Te(4,5,16,8,1),new Te(4,6,32,32,1),new Te(4,4,16,16,2),new Te(8,16,32,32,2),new Te(8,16,128,128,2),new Te(8,32,128,256,2),new Te(32,128,258,1024,2),new Te(32,258,258,4096,2)],je=["need dictionary","stream end","","","stream error","data error","","buffer error","",""],He=113,Le=666,Fe=262;function qe(e,t,n,r){const s=e[2*t],i=e[2*n];return i>s||s==i&&r[t]<=r[n]}function Ge(){const e=this;let t,n,s,c,f,a,l,u,w,h,d,p,y,m,b,g,k,v,S,z,C,x,_,A,I,D,V,P,R,B,E,M,K;const U=new Ke,N=new Ke,O=new Ke;let T,W,j,H,L,F;function q(){let t;for(t=0;286>t;t++)E[2*t]=0;for(t=0;30>t;t++)M[2*t]=0;for(t=0;19>t;t++)K[2*t]=0;E[512]=1,e.ue=e.we=0,W=j=0}function G(e,t){let n,r=-1,s=e[1],i=0,o=7,c=4;0===s&&(o=138,c=3),e[2*(t+1)+1]=65535;for(let f=0;t>=f;f++)n=s,s=e[2*(f+1)+1],++ii?K[2*n]+=i:0!==n?(n!=r&&K[2*n]++,K[32]++):i>10?K[36]++:K[34]++,i=0,r=n,0===s?(o=138,c=3):n==s?(o=6,c=3):(o=7,c=4))}function J(t){e.Ue[e.pending++]=t}function Q(e){J(255&e),J(e>>>8&255)}function X(e,t){let n;const r=t;F>16-r?(n=e,L|=n<>>16-F,F+=r-16):(L|=e<=n;n++)if(r=i,i=e[2*(n+1)+1],++o>=c||r!=i){if(f>o)do{Y(r,K)}while(0!=--o);else 0!==r?(r!=s&&(Y(r,K),o--),Y(16,K),X(o-3,2)):o>10?(Y(18,K),X(o-11,7)):(Y(17,K),X(o-3,3));o=0,s=r,0===i?(c=138,f=3):r==i?(c=6,f=3):(c=7,f=4)}}function $(){16==F?(Q(L),L=0,F=0):8>F||(J(255&L),L>>>=8,F-=8)}function ee(t,n){let s,i,o;if(e.Ne[W]=t,e.Oe[W]=255&n,W++,0===t?E[2*n]++:(j++,t--,E[2*(Ke.ge[n]+256+1)]++,M[2*Ke.Se(t)]++),0==(8191&W)&&V>2){for(s=8*W,i=C-k,o=0;30>o;o++)s+=M[2*o]*(5+Ke.Ce[o]);if(s>>>=3,jc);Y(256,t),H=t[513]}function ne(){F>8?Q(L):F>0&&J(255&L),L=0,F=0}function re(t,n,r){X(0+(r?1:0),3),((t,n)=>{ne(),H=8,Q(n),Q(~n),e.Ue.set(u.subarray(t,t+n),e.pending),e.pending+=n})(t,n)}function se(n){((t,n,r)=>{let s,i,o=0;V>0?(U.ne(e),N.ne(e),o=(()=>{let t;for(G(E,U.he),G(M,N.he),O.ne(e),t=18;t>=3&&0===K[2*Ke._e[t]+1];t--);return e.ue+=14+3*(t+1),t})(),s=e.ue+3+7>>>3,i=e.we+3+7>>>3,i>s||(s=i)):s=i=n+5,n+4>s||-1==t?i==s?(X(2+(r?1:0),3),te(Ue.Ae,Ue.Be)):(X(4+(r?1:0),3),((e,t,n)=>{let r;for(X(e-257,5),X(t-1,5),X(n-4,4),r=0;n>r;r++)X(K[2*Ke._e[r]+1],3);Z(E,e-1),Z(M,t-1)})(U.he+1,N.he+1,o+1),te(E,M)):re(t,n,r),q(),r&&ne()})(0>k?-1:k,C-k,n),k=C,t.Te()}function ie(){let e,n,r,s;do{if(s=w-_-C,0===s&&0===C&&0===_)s=f;else if(-1==s)s--;else if(C>=f+f-Fe){u.set(u.subarray(f,f+f),0),x-=f,C-=f,k-=f,e=y,r=e;do{n=65535&d[--r],d[r]=f>n?0:n-f}while(0!=--e);e=f,r=e;do{n=65535&h[--r],h[r]=f>n?0:n-f}while(0!=--e);s+=f}if(0===t.We)return;e=t.je(u,C+_,s),_+=e,3>_||(p=255&u[C],p=(p<_&&0!==t.We)}function oe(e){let t,n,r=I,s=C,i=A;const o=C>f-Fe?C-(f-Fe):0;let c=B;const a=l,w=C+258;let d=u[s+i-1],p=u[s+i];R>A||(r>>=2),c>_&&(c=_);do{if(t=e,u[t+i]==p&&u[t+i-1]==d&&u[t]==u[s]&&u[++t]==u[s+1]){s+=2,t++;do{}while(u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&u[++s]==u[++t]&&w>s);if(n=258-(w-s),s=w-258,n>i){if(x=e,i=n,n>=c)break;d=u[s+i-1],p=u[s+i]}}}while((e=65535&h[e&a])>o&&0!=--r);return i>_?_:i}e.le=[],e.be=[],e.ae=[],E=[],M=[],K=[],e.de=(t,n)=>{const r=e.ae,s=r[n];let i=n<<1;for(;i<=e.ce&&(i(W||(W=8),j||(j=8),G||(G=0),t.Le=null,-1==S&&(S=6),1>j||j>9||8!=W||9>x||x>15||0>S||S>9||0>G||G>2?Re:(t.Fe=e,a=x,f=1<(t.qe=t.Ge=0,t.Le=null,e.pending=0,e.Je=0,n=He,c=0,U.re=E,U.ie=Ue.Ee,N.re=M,N.ie=Ue.Me,O.re=K,O.ie=Ue.Ke,L=0,F=0,H=8,q(),(()=>{w=2*f,d[y-1]=0;for(let e=0;y-1>e;e++)d[e]=0;D=We[V].De,R=We[V].Ie,B=We[V].Ve,I=We[V].Pe,C=0,k=0,_=0,v=A=2,z=0,p=0})(),0))(t))),e.Qe=()=>42!=n&&n!=He&&n!=Le?Re:(e.Oe=null,e.Ne=null,e.Ue=null,d=null,h=null,u=null,e.Fe=null,n==He?-3:0),e.Xe=(e,t,n)=>{let r=0;return-1==t&&(t=6),0>t||t>9||0>n||n>2?Re:(We[V].Re!=We[t].Re&&0!==e.qe&&(r=e.Ye(1)),V!=t&&(V=t,D=We[V].De,R=We[V].Ie,B=We[V].Ve,I=We[V].Pe),P=n,r)},e.Ze=(e,t,r)=>{let s,i=r,o=0;if(!t||42!=n)return Re;if(3>i)return 0;for(i>f-Fe&&(i=f-Fe,o=r-i),u.set(t.subarray(o,o+i),0),C=i,k=i,p=255&u[0],p=(p<=s;s++)p=(p<{let o,w,m,I,R;if(i>4||0>i)return Re;if(!r.$e||!r.et&&0!==r.We||n==Le&&4!=i)return r.Le=je[4],Re;if(0===r.tt)return r.Le=je[7],-5;var B;if(t=r,I=c,c=i,42==n&&(w=8+(a-8<<4)<<8,m=(V-1&255)>>1,m>3&&(m=3),w|=m<<6,0!==C&&(w|=32),w+=31-w%31,n=He,J((B=w)>>8&255),J(255&B)),0!==e.pending){if(t.Te(),0===t.tt)return c=-1,0}else if(0===t.We&&I>=i&&4!=i)return t.Le=je[7],-5;if(n==Le&&0!==t.We)return r.Le=je[7],-5;if(0!==t.We||0!==_||0!=i&&n!=Le){switch(R=-1,We[V].Re){case 0:R=(e=>{let n,r=65535;for(r>s-5&&(r=s-5);;){if(1>=_){if(ie(),0===_&&0==e)return 0;if(0===_)break}if(C+=_,_=0,n=k+r,(0===C||C>=n)&&(_=C-n,C=n,se(!1),0===t.tt))return 0;if(C-k>=f-Fe&&(se(!1),0===t.tt))return 0}return se(4==e),0===t.tt?4==e?2:0:4==e?3:1})(i);break;case 1:R=(e=>{let n,r=0;for(;;){if(Fe>_){if(ie(),Fe>_&&0==e)return 0;if(0===_)break}if(3>_||(p=(p<f-Fe||2!=P&&(v=oe(r)),3>v)n=ee(0,255&u[C]),_--,C++;else if(n=ee(C-x,v-3),_-=v,v>D||3>_)C+=v,v=0,p=255&u[C],p=(p<{let n,r,s=0;for(;;){if(Fe>_){if(ie(),Fe>_&&0==e)return 0;if(0===_)break}if(3>_||(p=(p<A&&f-Fe>=(C-s&65535)&&(2!=P&&(v=oe(s)),5>=v&&(1==P||3==v&&C-x>4096)&&(v=2)),3>A||v>A)if(0!==z){if(n=ee(0,255&u[C-1]),n&&se(!1),C++,_--,0===t.tt)return 0}else z=1,C++,_--;else{r=C+_-3,n=ee(C-1-S,A-3),_-=A-1,A-=2;do{++C>r||(p=(p<1+H+10-F&&(X(2,3),Y(256,Ue.Ae),$()),H=7;else if(re(0,0,!1),3==i)for(o=0;y>o;o++)d[o]=0;if(t.Te(),0===t.tt)return c=-1,0}}return 4!=i?0:1}}function Je(){const e=this;e.nt=0,e.rt=0,e.We=0,e.qe=0,e.tt=0,e.Ge=0}function Qe(e){const t=new Je,n=(o=e&&e.chunkSize?e.chunkSize:65536)+5*(r.floor(o/16383)+1);var o;const c=new i(n);let f=e?e.level:-1;void 0===f&&(f=-1),t.He(f),t.$e=c,this.append=(e,r)=>{let o,f,a=0,l=0,u=0;const w=[];if(e.length){t.nt=0,t.et=e,t.We=e.length;do{if(t.rt=0,t.tt=n,o=t.Ye(0),0!=o)throw new s("deflating: "+t.Le);t.rt&&(t.rt==n?w.push(new i(c)):w.push(c.subarray(0,t.rt))),u+=t.rt,r&&t.nt>0&&t.nt!=a&&(r(t.nt),a=t.nt)}while(t.We>0||0===t.tt);return w.length>1?(f=new i(u),w.forEach((e=>{f.set(e,l),l+=e.length}))):f=w[0]?new i(w[0]):new i,f}},this.flush=()=>{let e,r,o=0,f=0;const a=[];do{if(t.rt=0,t.tt=n,e=t.Ye(4),1!=e&&0!=e)throw new s("deflating: "+t.Le);n-t.tt>0&&a.push(c.slice(0,t.rt)),f+=t.rt}while(t.We>0||0===t.tt);return t.Qe(),r=new i(f),a.forEach((e=>{r.set(e,o),o+=e.length})),r}}Je.prototype={He(e,t){const n=this;return n.Fe=new Ge,t||(t=15),n.Fe.He(n,e,t)},Ye(e){const t=this;return t.Fe?t.Fe.Ye(t,e):Re},Qe(){const e=this;if(!e.Fe)return Re;const t=e.Fe.Qe();return e.Fe=null,t},Xe(e,t){const n=this;return n.Fe?n.Fe.Xe(n,e,t):Re},Ze(e,t){const n=this;return n.Fe?n.Fe.Ze(n,e,t):Re},je(e,t,n){const r=this;let s=r.We;return s>n&&(s=n),0===s?0:(r.We-=s,e.set(r.et.subarray(r.nt,r.nt+s),t),r.nt+=s,r.qe+=s,s)},Te(){const e=this;let t=e.Fe.pending;t>e.tt&&(t=e.tt),0!==t&&(e.$e.set(e.Fe.Ue.subarray(e.Fe.Je,e.Fe.Je+t),e.rt),e.rt+=t,e.Fe.Je+=t,e.Ge+=t,e.tt-=t,e.Fe.pending-=t,0===e.Fe.pending&&(e.Fe.Je=0))}};const Xe=-2,Ye=-3,Ze=-5,$e=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],et=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],tt=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],nt=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],rt=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,112,112],st=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],it=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];function ot(){let e,t,n,r,s,i;function o(e,t,o,c,f,a,l,u,w,h,d){let p,y,m,b,g,k,v,S,z,C,x,_,A,I,D;C=0,g=o;do{n[e[t+C]]++,C++,g--}while(0!==g);if(n[0]==o)return l[0]=-1,u[0]=0,0;for(S=u[0],k=1;15>=k&&0===n[k];k++);for(v=k,k>S&&(S=k),g=15;0!==g&&0===n[g];g--);for(m=g,S>g&&(S=g),u[0]=S,I=1<k;k++,I<<=1)if(0>(I-=n[k]))return Ye;if(0>(I-=n[g]))return Ye;for(n[g]+=I,i[1]=k=0,C=1,A=2;0!=--g;)i[A]=k+=n[C],A++,C++;g=0,C=0;do{0!==(k=e[t+C])&&(d[i[k]++]=g),C++}while(++g=v;v++)for(p=n[v];0!=p--;){for(;v>_+S;){if(b++,_+=S,D=m-_,D=D>S?S:D,(y=1<<(k=v-_))>p+1&&(y-=p+1,A=v,D>k))for(;++kn[++A];)y-=n[A];if(D=1<1440)return Ye;s[b]=x=h[0],h[0]+=D,0!==b?(i[b]=g,r[0]=k,r[1]=S,k=g>>>_-S,r[2]=x-s[b-1]-k,w.set(r,3*(s[b-1]+k))):l[0]=x}for(r[1]=v-_,o>C?d[C]d[C]?0:96,r[2]=d[C++]):(r[0]=a[d[C]-c]+16+64,r[2]=f[d[C++]-c]):r[0]=192,y=1<>>_;D>k;k+=y)w.set(r,3*(x+k));for(k=1<>>=1)g^=k;for(g^=k,z=(1<<_)-1;(g&z)!=i[b];)b--,_-=S,z=(1<<_)-1}return 0!==I&&1!=m?Ze:0}function c(o){let c;for(e||(e=[],t=[],n=new f(16),r=[],s=new f(15),i=new f(16)),t.lengthc;c++)t[c]=0;for(c=0;16>c;c++)n[c]=0;for(c=0;3>c;c++)r[c]=0;s.set(n.subarray(0,15),0),i.set(n.subarray(0,16),0)}this.st=(n,r,s,i,f)=>{let a;return c(19),e[0]=0,a=o(n,0,19,19,null,null,s,r,i,e,t),a==Ye?f.Le="oversubscribed dynamic bit lengths tree":a!=Ze&&0!==r[0]||(f.Le="incomplete dynamic bit lengths tree",a=Ye),a},this.it=(n,r,s,i,f,a,l,u,w)=>{let h;return c(288),e[0]=0,h=o(s,0,n,257,nt,rt,a,i,u,e,t),0!=h||0===i[0]?(h==Ye?w.Le="oversubscribed literal/length tree":-4!=h&&(w.Le="incomplete literal/length tree",h=Ye),h):(c(288),h=o(s,n,r,0,st,it,l,f,u,e,t),0!=h||0===f[0]&&n>257?(h==Ye?w.Le="oversubscribed distance tree":h==Ze?(w.Le="incomplete distance tree",h=Ye):-4!=h&&(w.Le="empty distance tree with lengths",h=Ye),h):0)}}function ct(){const e=this;let t,n,r,s,i=0,o=0,c=0,f=0,a=0,l=0,u=0,w=0,h=0,d=0;function p(e,t,n,r,s,i,o,c){let f,a,l,u,w,h,d,p,y,m,b,g,k,v,S,z;d=c.nt,p=c.We,w=o.ot,h=o.ct,y=o.write,m=yh;)p--,w|=(255&c.ft(d++))<>=a[z+1],h-=a[z+1],0!=(16&u)){for(u&=15,k=a[z+2]+(w&$e[u]),w>>=u,h-=u;15>h;)p--,w|=(255&c.ft(d++))<>=a[z+1],h-=a[z+1],0!=(16&u)){for(u&=15;u>h;)p--,w|=(255&c.ft(d++))<>=u,h-=u,m-=k,v>y){S=y-v;do{S+=o.end}while(0>S);if(u=o.end-S,k>u){if(k-=u,y-S>0&&u>y-S)do{o.lt[y++]=o.lt[S++]}while(0!=--u);else o.lt.set(o.lt.subarray(S,S+u),y),y+=u,S+=u,u=0;S=0}}else S=y-v,y-S>0&&2>y-S?(o.lt[y++]=o.lt[S++],o.lt[y++]=o.lt[S++],k-=2):(o.lt.set(o.lt.subarray(S,S+2),y),y+=2,S+=2,k-=2);if(y-S>0&&k>y-S)do{o.lt[y++]=o.lt[S++]}while(0!=--k);else o.lt.set(o.lt.subarray(S,S+k),y),y+=k,S+=k,k=0;break}if(0!=(64&u))return c.Le="invalid distance code",k=c.We-p,k=k>h>>3?h>>3:k,p+=k,d-=k,h-=k<<3,o.ot=w,o.ct=h,c.We=p,c.qe+=d-c.nt,c.nt=d,o.write=y,Ye;f+=a[z+2],f+=w&$e[u],z=3*(l+f),u=a[z]}break}if(0!=(64&u))return 0!=(32&u)?(k=c.We-p,k=k>h>>3?h>>3:k,p+=k,d-=k,h-=k<<3,o.ot=w,o.ct=h,c.We=p,c.qe+=d-c.nt,c.nt=d,o.write=y,1):(c.Le="invalid literal/length code",k=c.We-p,k=k>h>>3?h>>3:k,p+=k,d-=k,h-=k<<3,o.ot=w,o.ct=h,c.We=p,c.qe+=d-c.nt,c.nt=d,o.write=y,Ye);if(f+=a[z+2],f+=w&$e[u],z=3*(l+f),0===(u=a[z])){w>>=a[z+1],h-=a[z+1],o.lt[y++]=a[z+2],m--;break}}else w>>=a[z+1],h-=a[z+1],o.lt[y++]=a[z+2],m--}while(m>=258&&p>=10);return k=c.We-p,k=k>h>>3?h>>3:k,p+=k,d-=k,h-=k<<3,o.ot=w,o.ct=h,c.We=p,c.qe+=d-c.nt,c.nt=d,o.write=y,0}e.init=(e,i,o,c,f,a)=>{t=0,u=e,w=i,r=o,h=c,s=f,d=a,n=null},e.ut=(e,y,m)=>{let b,g,k,v,S,z,C,x=0,_=0,A=0;for(A=y.nt,v=y.We,x=e.ot,_=e.ct,S=e.write,z=S=258&&v>=10&&(e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,m=p(u,w,r,h,s,d,e,y),A=y.nt,v=y.We,x=e.ot,_=e.ct,S=e.write,z=S_;){if(0===v)return e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,e.wt(y,m);m=0,v--,x|=(255&y.ft(A++))<<_,_+=8}if(g=3*(o+(x&$e[b])),x>>>=n[g+1],_-=n[g+1],k=n[g],0===k){f=n[g+2],t=6;break}if(0!=(16&k)){a=15&k,i=n[g+2],t=2;break}if(0==(64&k)){c=k,o=g/3+n[g+2];break}if(0!=(32&k)){t=7;break}return t=9,y.Le="invalid literal/length code",m=Ye,e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,e.wt(y,m);case 2:for(b=a;b>_;){if(0===v)return e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,e.wt(y,m);m=0,v--,x|=(255&y.ft(A++))<<_,_+=8}i+=x&$e[b],x>>=b,_-=b,c=w,n=s,o=d,t=3;case 3:for(b=c;b>_;){if(0===v)return e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,e.wt(y,m);m=0,v--,x|=(255&y.ft(A++))<<_,_+=8}if(g=3*(o+(x&$e[b])),x>>=n[g+1],_-=n[g+1],k=n[g],0!=(16&k)){a=15&k,l=n[g+2],t=4;break}if(0==(64&k)){c=k,o=g/3+n[g+2];break}return t=9,y.Le="invalid distance code",m=Ye,e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,e.wt(y,m);case 4:for(b=a;b>_;){if(0===v)return e.ot=x,e.ct=_,y.We=v,y.qe+=A-y.nt,y.nt=A,e.write=S,e.wt(y,m);m=0,v--,x|=(255&y.ft(A++))<<_,_+=8}l+=x&$e[b],x>>=b,_-=b,t=5;case 5:for(C=S-l;0>C;)C+=e.end;for(;0!==i;){if(0===z&&(S==e.end&&0!==e.read&&(S=0,z=S7&&(_-=8,v++,A--),e.write=S,m=e.wt(y,m),S=e.write,z=S{}}ot.dt=(e,t,n,r)=>(e[0]=9,t[0]=5,n[0]=et,r[0]=tt,0);const ft=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];function at(e,t){const n=this;let r,s=0,o=0,c=0,a=0;const l=[0],u=[0],w=new ct;let h=0,d=new f(4320);const p=new ot;n.ct=0,n.ot=0,n.lt=new i(t),n.end=t,n.read=0,n.write=0,n.reset=(e,t)=>{t&&(t[0]=0),6==s&&w.ht(e),s=0,n.ct=0,n.ot=0,n.read=n.write=0},n.reset(e,null),n.wt=(e,t)=>{let r,s,i;return s=e.rt,i=n.read,r=(i>n.write?n.end:n.write)-i,r>e.tt&&(r=e.tt),0!==r&&t==Ze&&(t=0),e.tt-=r,e.Ge+=r,e.$e.set(n.lt.subarray(i,i+r),s),s+=r,i+=r,i==n.end&&(i=0,n.write==n.end&&(n.write=0),r=n.write-i,r>e.tt&&(r=e.tt),0!==r&&t==Ze&&(t=0),e.tt-=r,e.Ge+=r,e.$e.set(n.lt.subarray(i,i+r),s),s+=r,i+=r),e.rt=s,n.read=i,t},n.ut=(e,t)=>{let i,f,y,m,b,g,k,v;for(m=e.nt,b=e.We,f=n.ot,y=n.ct,g=n.write,k=gy;){if(0===b)return n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);t=0,b--,f|=(255&e.ft(m++))<>>1){case 0:f>>>=3,y-=3,i=7&y,f>>>=i,y-=i,s=1;break;case 1:S=[],z=[],C=[[]],x=[[]],ot.dt(S,z,C,x),w.init(S[0],z[0],C[0],0,x[0],0),f>>>=3,y-=3,s=6;break;case 2:f>>>=3,y-=3,s=3;break;case 3:return f>>>=3,y-=3,s=9,e.Le="invalid block type",t=Ye,n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t)}break;case 1:for(;32>y;){if(0===b)return n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);t=0,b--,f|=(255&e.ft(m++))<>>16&65535)!=(65535&f))return s=9,e.Le="invalid stored block lengths",t=Ye,n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);o=65535&f,f=y=0,s=0!==o?2:0!==h?7:0;break;case 2:if(0===b)return n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);if(0===k&&(g==n.end&&0!==n.read&&(g=0,k=gb&&(i=b),i>k&&(i=k),n.lt.set(e.je(m,i),g),m+=i,b-=i,g+=i,k-=i,0!=(o-=i))break;s=0!==h?7:0;break;case 3:for(;14>y;){if(0===b)return n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);t=0,b--,f|=(255&e.ft(m++))<29||(i>>5&31)>29)return s=9,e.Le="too many length or distance symbols",t=Ye,n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);if(i=258+(31&i)+(i>>5&31),!r||r.lengthv;v++)r[v]=0;f>>>=14,y-=14,a=0,s=4;case 4:for(;4+(c>>>10)>a;){for(;3>y;){if(0===b)return n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);t=0,b--,f|=(255&e.ft(m++))<>>=3,y-=3}for(;19>a;)r[ft[a++]]=0;if(l[0]=7,i=p.st(r,l,u,d,e),0!=i)return(t=i)==Ye&&(r=null,s=9),n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);a=0,s=5;case 5:for(;i=c,258+(31&i)+(i>>5&31)>a;){let o,w;for(i=l[0];i>y;){if(0===b)return n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);t=0,b--,f|=(255&e.ft(m++))<w)f>>>=i,y-=i,r[a++]=w;else{for(v=18==w?7:w-14,o=18==w?11:3;i+v>y;){if(0===b)return n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);t=0,b--,f|=(255&e.ft(m++))<>>=i,y-=i,o+=f&$e[v],f>>>=v,y-=v,v=a,i=c,v+o>258+(31&i)+(i>>5&31)||16==w&&1>v)return r=null,s=9,e.Le="invalid bit length repeat",t=Ye,n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);w=16==w?r[v-1]:0;do{r[v++]=w}while(0!=--o);a=v}}if(u[0]=-1,_=[],A=[],I=[],D=[],_[0]=9,A[0]=6,i=c,i=p.it(257+(31&i),1+(i>>5&31),r,_,A,I,D,d,e),0!=i)return i==Ye&&(r=null,s=9),t=i,n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,n.wt(e,t);w.init(_[0],A[0],d,I[0],d,D[0]),s=6;case 6:if(n.ot=f,n.ct=y,e.We=b,e.qe+=m-e.nt,e.nt=m,n.write=g,1!=(t=w.ut(n,e,t)))return n.wt(e,t);if(t=0,w.ht(e),m=e.nt,b=e.We,f=n.ot,y=n.ct,g=n.write,k=g{n.reset(e,null),n.lt=null,d=null},n.yt=(e,t,r)=>{n.lt.set(e.subarray(t,t+r),0),n.read=n.write=r},n.bt=()=>1==s?1:0}const lt=13,ut=[0,0,255,255];function wt(){const e=this;function t(e){return e&&e.gt?(e.qe=e.Ge=0,e.Le=null,e.gt.mode=7,e.gt.kt.reset(e,null),0):Xe}e.mode=0,e.method=0,e.vt=[0],e.St=0,e.marker=0,e.zt=0,e.Ct=t=>(e.kt&&e.kt.ht(t),e.kt=null,0),e.xt=(n,r)=>(n.Le=null,e.kt=null,8>r||r>15?(e.Ct(n),Xe):(e.zt=r,n.gt.kt=new at(n,1<{let n,r;if(!e||!e.gt||!e.et)return Xe;const s=e.gt;for(t=4==t?Ze:0,n=Ze;;)switch(s.mode){case 0:if(0===e.We)return n;if(n=t,e.We--,e.qe++,8!=(15&(s.method=e.ft(e.nt++)))){s.mode=lt,e.Le="unknown compression method",s.marker=5;break}if(8+(s.method>>4)>s.zt){s.mode=lt,e.Le="invalid win size",s.marker=5;break}s.mode=1;case 1:if(0===e.We)return n;if(n=t,e.We--,e.qe++,r=255&e.ft(e.nt++),((s.method<<8)+r)%31!=0){s.mode=lt,e.Le="incorrect header check",s.marker=5;break}if(0==(32&r)){s.mode=7;break}s.mode=2;case 2:if(0===e.We)return n;n=t,e.We--,e.qe++,s.St=(255&e.ft(e.nt++))<<24&4278190080,s.mode=3;case 3:if(0===e.We)return n;n=t,e.We--,e.qe++,s.St+=(255&e.ft(e.nt++))<<16&16711680,s.mode=4;case 4:if(0===e.We)return n;n=t,e.We--,e.qe++,s.St+=(255&e.ft(e.nt++))<<8&65280,s.mode=5;case 5:return 0===e.We?n:(n=t,e.We--,e.qe++,s.St+=255&e.ft(e.nt++),s.mode=6,2);case 6:return s.mode=lt,e.Le="need dictionary",s.marker=0,Xe;case 7:if(n=s.kt.ut(e,n),n==Ye){s.mode=lt,s.marker=0;break}if(0==n&&(n=t),1!=n)return n;n=t,s.kt.reset(e,s.vt),s.mode=12;case 12:return e.We=0,1;case lt:return Ye;default:return Xe}},e.At=(e,t,n)=>{let r=0,s=n;if(!e||!e.gt||6!=e.gt.mode)return Xe;const i=e.gt;return s<1<{let n,r,s,i,o;if(!e||!e.gt)return Xe;const c=e.gt;if(c.mode!=lt&&(c.mode=lt,c.marker=0),0===(n=e.We))return Ze;for(r=e.nt,s=c.marker;0!==n&&4>s;)e.ft(r)==ut[s]?s++:s=0!==e.ft(r)?0:4-s,r++,n--;return e.qe+=r-e.nt,e.nt=r,e.We=n,c.marker=s,4!=s?Ye:(i=e.qe,o=e.Ge,t(e),e.qe=i,e.Ge=o,c.mode=7,0)},e.Dt=e=>e&&e.gt&&e.gt.kt?e.gt.kt.bt():Xe}function ht(){}function dt(e){const t=new ht,n=e&&e.chunkSize?r.floor(2*e.chunkSize):131072,o=new i(n);let c=!1;t.xt(),t.$e=o,this.append=(e,r)=>{const f=[];let a,l,u=0,w=0,h=0;if(0!==e.length){t.nt=0,t.et=e,t.We=e.length;do{if(t.rt=0,t.tt=n,0!==t.We||c||(t.nt=0,c=!0),a=t._t(0),c&&a===Ze){if(0!==t.We)throw new s("inflating: bad input")}else if(0!==a&&1!==a)throw new s("inflating: "+t.Le);if((c||1===a)&&t.We===e.length)throw new s("inflating: bad input");t.rt&&(t.rt===n?f.push(new i(o)):f.push(o.subarray(0,t.rt))),h+=t.rt,r&&t.nt>0&&t.nt!=u&&(r(t.nt),u=t.nt)}while(t.We>0||0===t.tt);return f.length>1?(l=new i(h),f.forEach((e=>{l.set(e,w),w+=e.length}))):l=f[0]?new i(f[0]):new i,l}},this.flush=()=>{t.Ct()}}ht.prototype={xt(e){const t=this;return t.gt=new wt,e||(e=15),t.gt.xt(t,e)},_t(e){const t=this;return t.gt?t.gt._t(t,e):Xe},Ct(){const e=this;if(!e.gt)return Xe;const t=e.gt.Ct(e);return e.gt=null,t},It(){const e=this;return e.gt?e.gt.It(e):Xe},At(e,t){const n=this;return n.gt?n.gt.At(n,e,t):Xe},ft(e){return this.et[e]},je(e,t){return this.et.subarray(e,e+t)}},self.initCodec=()=>{self.Deflate=Qe,self.Inflate=dt}; +`],{type:"text/javascript"}));n({workerScripts:{inflate:[t],deflate:[t]}})}Il(Ni);var K=Kt.Platform.isDesktopApp?window.require("node:original-fs"):null,Pe=Kt.Platform.isDesktopApp?K.promises:null,Xt=Kt.Platform.isDesktopApp?window.require("node:os"):null,q=Kt.Platform.isDesktopApp?window.require("node:path"):null,Jn=Kt.Platform.isDesktopApp?window.require("node:url"):null,Fl=Kt.Platform.isDesktopApp?window.require("node:zlib"):null;function Zi(n,t=0,e=n.byteLength){return n.buffer.slice(n.byteOffset+t,n.byteOffset+t+e)}var Me=class{constructor(t){this.type="file";this.filepath=t;let e=this.name=q.basename(t);this.fullpath=e;let i=q.extname(e);this.extension=i.substring(1).toLowerCase(),this.basename=q.basename(e,i)}async readText(){return Pe.readFile(this.filepath,"utf8")}async read(){let t=await Pe.readFile(this.filepath);return Zi(t)}async readZip(t){let e=null;try{e=await Pe.open(this.filepath,"r");let i=await e.stat();return await t(new Vt(new No(e,i.size)))}finally{await(e==null?void 0:e.close())}}createReadStream(){return K.createReadStream(this.filepath)}toString(){return this.filepath}},ut=class{constructor(t){this.type="folder";this.filepath=t,this.name=q.basename(t)}async list(){let{filepath:t}=this,e=await Pe.readdir(t,{withFileTypes:!0}),i=[];for(let r of e)r.isFile()?i.push(new Me(q.join(t,r.name))):r.isDirectory()&&i.push(new ut(q.join(t,r.name)));return i}toString(){return this.filepath}},Wi=class{constructor(t){this.type="file";this.file=t;let e=this.name=t.name;this.fullpath=e;let{basename:i,extension:r}=re(e);this.basename=i,this.extension=r}readText(){let{file:t}=this;return t.text?t.text():new Promise((e,i)=>{let r=new FileReader;r.addEventListener("load",()=>e(r.result)),r.addEventListener("error",i),r.readAsText(this.file)})}async read(){let{file:t}=this;return t.arrayBuffer?t.arrayBuffer():new Promise((e,i)=>{let r=new FileReader;r.addEventListener("load",()=>e(r.result)),r.addEventListener("error",i),r.readAsArrayBuffer(this.file)})}async readZip(t){return t(new Vt(new St(this.file)))}toString(){return this.file.toString()}};async function So(n,t){let e=[];for(let i of n)try{i.type==="folder"?e.push(...await So(await i.list(),t)):i.type==="file"&&(!t||t(i))&&e.push(i)}catch(r){console.log("Skipping path: ",i.name,r)}return e}function re(n){let t=Math.max(n.lastIndexOf("/"),n.lastIndexOf("\\")),e=n,i="";t>=0&&(e=n.substring(t+1),i=n.substring(0,t));let[r,o]=Ro(e);return{parent:i,name:e,basename:r,extension:o}}function Ro(n){let t=n.lastIndexOf("."),e=n,i="";return t>0&&(e=n.substring(0,t),i=n.substring(t+1).toLowerCase()),[e,i]}var No=class extends yn{constructor(e,i){super(e);this.fd=e,this.size=i}async readUint8Array(e,i){let r=Buffer.alloc(i),o=await this.fd.read(r,0,i,e);return new Uint8Array(Zi(r,0,o.bytesRead))}};var Ll=require("obsidian"),Qm=/[\/\?<>\\:\*\|"]/g,eh=/[\x00-\x1f\x80-\x9f]/g,th=/^\.+$/,nh=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,ih=/[\. ]+$/,rh=/^\./,oh=/[\[\]#|^]/g;function Ze(n){return n.replace(Qm,"").replace(eh,"").replace(th,"").replace(nh,"").replace(ih,"").replace(rh,"").replace(oh,"")}function xn(n){let t=[];for(let e=0;ea.setButtonText(i?"Choose files":"Choose file").onClick(async()=>{if(Re.Platform.isDesktopApp){let s=["openFile","dontAddToRecent"];i&&s.push("multiSelections");let l=window.electron.remote.dialog.showOpenDialogSync({title:"Pick files to import",properties:s,filters:[{name:t,extensions:e}]});l&&l.length>0&&(this.files=l.map(c=>new Me(c)),o())}else{let s=createEl("input");s.type="file",s.accept=e.map(l=>"."+l.toLowerCase()).join(","),s.addEventListener("change",()=>{if(!s.files)return;let l=Array.from(s.files);l.length>0&&(this.files=l.map(c=>new Wi(c)).filter(c=>e.contains(c.extension)),o())}),s.click()}}));i&&Re.Platform.isDesktopApp&&r.addButton(a=>a.setButtonText("Choose folders").onClick(async()=>{if(Re.Platform.isDesktopApp){let s=window.electron.remote.dialog.showOpenDialogSync({title:"Pick folders to import",properties:["openDirectory","multiSelections","dontAddToRecent"]});if(s&&s.length>0){r.setDesc("Reading folders...");let l=s.map(c=>new ut(c));this.files=await So(l,c=>e.contains(c.extension)),o()}}}));let o=()=>{let a=document.createDocumentFragment(),s=this.files.length,l=this.files.map(c=>c.name).join(", ");l.length>Pl&&(l=l.substring(0,Pl)+"..."),a.createEl("span",{text:`These ${s} files will be imported: `}),a.createEl("br"),a.createEl("span",{cls:"u-pop",text:l}),r.setDesc(a)}}addOutputLocationSetting(t){this.outputLocation=t,new Re.Setting(this.modal.contentEl).setName("Output folder").setDesc("Choose a folder in the vault to put the imported files. Leave empty to output to vault root.").addText(e=>e.setValue(t).onChange(i=>{this.outputLocation=i,this.outputFolder=null}))}async getOutputFolder(){if(this.outputFolder)return this.outputFolder;let{vault:t}=this.app,e=this.outputLocation;e===""&&(e="/");let i=t.getAbstractFileByPath(e);return(i===null||!(i instanceof Re.TFolder))&&(await t.createFolder(e),i=t.getAbstractFileByPath(e)),i instanceof Re.TFolder?(this.outputFolder=i,i):null}async getAvailablePathForAttachment(t,e){let i=await this.getOutputFolder(),r=i?{parent:i}:null,{basename:o,extension:a}=re(t),s=await this.vault.getAvailablePathForAttachments(o,a,r),l=re(s),c=l.extension?"."+l.extension:"."+a,p=1,m=s;for(;e.includes(m)||this.vault.getAbstractFileByPath(m);)m=q.join(l.parent,`${l.name} ${p}${c}`),p++;return m}async createFolders(t){let e=t.split("/").map(o=>o.replace(/^\.+/,"")).join("/"),i=(0,Re.normalizePath)(e),r=this.vault.getAbstractFileByPathInsensitive(i);if(r&&r instanceof Re.TFolder)return r;if(await this.vault.createFolder(i),r=this.vault.getAbstractFileByPathInsensitive(i),!(r instanceof Re.TFolder))throw new Error(`Failed to create folder at "${t}"`);return r}async saveAsMarkdownFile(t,e,i){let r=Ze(e);return await this.app.fileManager.createNewMarkdownFile(t,r,i)}};var Zp=rs(Lp());var ka=require("obsidian");var Pp=n=>{let e=gr.execSync(`${n} --version`).toString().toString().match(/(\d+)\.(\d+).(\d+)/);return(e==null?void 0:e[1])>3||(e==null?void 0:e[2])>32},Mp=n=>{let t=[];if(!n)return t;let e=[],i=0,r=-1,o={};for(;il>0),n.length-1);a=parseFloat(n.substring(i,s)),i=s}r==-1?e.push(a):(o[e[r]]=a,r++),(n[i]==` +`||e.length{let e=[n[0]],i=[e];for(let r=0;r",")),i.push(...t[r].length?t[r]:[""])):i.push(t[r]),e.push(n[r+1]));return i},Up=n=>new yr(n);var ui=(n,t)=>{let e="SQLITE_ERROR",i=new Error(e+": "+t);return i.code=e,n(i),""},jp=(...n)=>Up($p(...n)),{from:xg}=Array,wg=/'/g,vg=n=>n.toString(16).padStart(2,"0"),Eg=n=>`x'${xg(n,vg).join("")}'`,_g=n=>{switch(typeof n){case"string":return"'"+n.replace(wg,"''")+"'";case"number":if(!isFinite(n))return;case"boolean":return+n;case"object":case"undefined":switch(!0){case!n:return"NULL";case n instanceof Date:return"'"+n.toISOString()+"'";case n instanceof Buffer:case n instanceof ArrayBuffer:n=new Uint8Array(n);case n instanceof Uint8Array:case n instanceof Uint8ClampedArray:return Eg(n)}}},_a=(n,t)=>{let[e,...i]=Bp(...t),r=[e[0]];for(let a=0;a{},Rg=(n,t,e,i,r,o)=>{let a=[],{stdout:s,stderr:l}=gr.spawn(i,r,o).on("close",p=>{if(c||p!==0){p!==0&&ui(t,"busy DB or query too slow");return}let m=a.join("").trim();if(e==="query")n(m);else{let y=qp(m||"[]");n(e==="get"&&kg(y)?y.shift():y)}});s.on("data",p=>{a.push(p)});let c=!1;l.on("data",p=>{c=!0,ui(t,"".trim.call(p))})},Og=(n,t,e)=>{let i=Pp(n),r=i?Tg:Ag,{stdin:o,stdout:a,stderr:s}=gr.spawn(n,t);i?o.write(`.mode json +`):o.write(`.mode quote +.headers on +`),e&&o.write(`.timeout ${e} +`);let l=Promise.resolve();return(c,p,m,y,w)=>{m==="close"?(o.write(`.quit +`),l=null):l&&(l=l.then(()=>new Promise(E=>{let d="",f=_=>{d+=_;let A=!1;for(;d.endsWith(r);)A=!0,d=d.slice(0,-r.length);if(A){for(v();d.startsWith(r);)d=d.slice(r.length);if(m==="query")c(d);else{let D=i?qp(d||"[]"):Mp(d);c(m==="get"?D.shift():D)}}},g=_=>{v(),p(new Error(_))},v=()=>{E(),a.removeListener("data",f),s.removeListener("data",g)};a.on("data",f),s.once("data",g),o.write(`${w[w.length-1]}; +`),o.write(`SELECT '${Na}' as _; +`)})))}},Aa=(n,t,e,i,r)=>(...o)=>new Promise((a,s)=>{let l=_a(s,o);l.length&&(n==="get"&&/^SELECT\s+/i.test(l)&&!/\s+LIMIT\s+\d+$/i.test(l)&&(l+=" LIMIT 1"),e(a,s,n,t,i.concat(l),r))}),Hp="";function Sa(n,t={}){n===":memory:"&&(n=Hp||(Hp=q.join(Xt.tmpdir(),randomUUID())));let e=t.timeout||0,i=t.bin||"sqlite3",r=[n,"-bail"],o={timeout:e};t.readonly&&r.push("-readonly"),e&&r.push("-cmd",".timeout "+e);let a=r.concat("-json"),s=t.exec||(t.persistent?Og(i,r,e):Rg);return{transaction(){let l=[];return Ng((...c)=>{l.push(c)},"commit",{value(){return new Promise((c,p)=>{let m=["BEGIN TRANSACTION"];for(let y of l){let w=_a(p,y);if(!w.length)return;m.push(w)}m.push("COMMIT"),s(c,p,"query",i,r.concat(m.join(";")),o)})}})},query:Aa("query",i,s,r,o),get:Aa("get",i,s,a,o),all:Aa("all",i,s,a,o),close:t.persistent?()=>s(null,null,"close"):Sg,raw:jp}}var Ra="Library/Group Containers/group.com.apple.notes",Wp="NoteStore.sqlite",Dg=978307200,br=class extends ce{constructor(){super(...arguments);this.owners={};this.resolvedAccounts={};this.resolvedFiles={};this.resolvedFolders={};this.multiAccount=!1;this.noteCount=0;this.parsedNotes=0;this.omitFirstLine=!0;this.importTrashed=!1;this.includeHandwriting=!1;this.trashFolders=[]}init(){if(!st.Platform.isMacOS||!st.Platform.isDesktop){this.modal.contentEl.createEl("p",{text:"Due to platform limitations, Apple Notes cannot be exported from this device. Open your vault on a Mac to export from Apple Notes."}),this.notAvailable=!0;return}this.addOutputLocationSetting("Apple Notes"),new st.Setting(this.modal.contentEl).setName("Import recently deleted notes").setDesc('Import notes in the "Recently Deleted" folder. Unlike in Apple Notes, they will not be automatically removed after a set amount of time.').addToggle(e=>e.setValue(!1).onChange(async i=>this.importTrashed=i)),new st.Setting(this.modal.contentEl).setName("Omit first line").setDesc("Don't include the first line in the text, since Apple Notes uses it as the title. It will still be used as the note name.").addToggle(e=>e.setValue(!0).onChange(async i=>this.omitFirstLine=i)),new st.Setting(this.modal.contentEl).setName("Include handwriting text").setDesc("When Apple Notes has detected handwriting in drawings, include it as text before the drawing.").addToggle(e=>e.setValue(!1).onChange(async i=>this.includeHandwriting=i))}async getNotesDatabase(){let e=q.join(Xt.homedir(),Ra),i=window.electron.remote.dialog.showOpenDialogSync({defaultPath:e,properties:["openDirectory"],message:'Select the "group.com.apple.notes" folder to allow Obsidian to read Apple Notes data.'});if(!(i!=null&&i.includes(e)))return new st.Notice("Data import failed. Ensure you have selected the correct Apple Notes data folder."),null;let r=q.join(e,Wp),o=q.join(Xt.tmpdir(),Wp);return await Pe.copyFile(r,o),await Pe.copyFile(r+"-shm",o+"-shm"),await Pe.copyFile(r+"-wal",o+"-wal"),new Sa(o,{readonly:!0,persistent:!0})}async import(e){if(this.ctx=e,this.protobufRoot=Zp.Root.fromJSON(ls),this.rootFolder=await this.getOutputFolder(),!this.rootFolder){new st.Notice("Please select a location to export to.");return}if(this.database=await this.getNotesDatabase(),!this.database)return;this.keys=Object.fromEntries((await this.database.all`SELECT z_ent, z_name FROM z_primarykey`).map(a=>[a.Z_NAME,a.Z_ENT]));let i=await this.database.all` + SELECT z_pk FROM ziccloudsyncingobject WHERE z_ent = ${this.keys.ICAccount} + `,r=await this.database.all` + SELECT z_pk, ztitle2 FROM ziccloudsyncingobject WHERE z_ent = ${this.keys.ICFolder} + `;for(let a of i)await this.resolveAccount(a.Z_PK);for(let a of r)try{await this.resolveFolder(a.Z_PK)}catch(s){this.ctx.reportFailed(a.ZTITLE2,s==null?void 0:s.message),console.error(s)}let o=await this.database.all` + SELECT + z_pk, zfolder, ztitle1 FROM ziccloudsyncingobject + WHERE + z_ent = ${this.keys.ICNote} + AND ztitle1 IS NOT NULL + AND zfolder NOT IN (${this.trashFolders}) + `;this.noteCount=o.length;for(let a of o)try{await this.resolveNote(a.Z_PK)}catch(s){this.ctx.reportFailed(a.ZTITLE1,s==null?void 0:s.message),console.error(s)}this.database.close()}async resolveAccount(e){!this.multiAccount&&Object.keys(this.resolvedAccounts).length&&(this.multiAccount=!0);let i=await this.database.get` + SELECT zname, zidentifier FROM ziccloudsyncingobject + WHERE z_ent = ${this.keys.ICAccount} AND z_pk = ${e} + `;this.resolvedAccounts[e]={name:i.ZNAME,uuid:i.ZIDENTIFIER,path:q.join(Xt.homedir(),Ra,"Accounts",i.ZIDENTIFIER)}}async resolveFolder(e){var a;if(e in this.resolvedFiles)return this.resolvedFolders[e];let i=await this.database.get` + SELECT ztitle2, zparent, zidentifier, zfoldertype, zowner + FROM ziccloudsyncingobject + WHERE z_ent = ${this.keys.ICFolder} AND z_pk = ${e} + `,r;if(i.ZFOLDERTYPE==3)return null;if(!this.importTrashed&&i.ZFOLDERTYPE==1)return this.trashFolders.push(e),null;if(i.ZPARENT!==null)r=((a=await this.resolveFolder(i.ZPARENT))==null?void 0:a.path)+"/";else if(this.multiAccount){let s=this.resolvedAccounts[i.ZOWNER].name;r=`${this.rootFolder.path}/${s}/`}else r=`${this.rootFolder.path}/`;i.ZIDENTIFIER.startsWith("DefaultFolder")||(r+=Ze(i.ZTITLE2));let o=await this.createFolders(r);return this.resolvedFolders[e]=o,this.owners[e]=i.ZOWNER,o}async resolveNote(e){if(e in this.resolvedFiles)return this.resolvedFiles[e];let i=await this.database.get` + SELECT + nd.z_pk, hex(nd.zdata) as zhexdata, zcso.ztitle1, zfolder, + zcreationdate1, zcreationdate2, zcreationdate3, zmodificationdate1, zispasswordprotected + FROM + zicnotedata AS nd, + (SELECT + *, NULL AS zcreationdate3, NULL AS zcreationdate2, + NULL AS zispasswordprotected FROM ziccloudsyncingobject + ) AS zcso + WHERE + zcso.z_pk = nd.znote + AND zcso.z_pk = ${e} + `;if(i.ZISPASSWORDPROTECTED)return this.ctx.reportSkipped(i.ZTITLE1,"note is password protected"),null;let r=this.resolvedFolders[i.ZFOLDER]||this.rootFolder,o=`${i.ZTITLE1}.md`,a=await this.saveAsMarkdownFile(r,o,"");this.ctx.status(`Importing note ${o}`),this.resolvedFiles[e]=a,this.owners[e]=this.owners[i.ZFOLDER];let s=this.decodeData(i.zhexdata,Wt);return this.vault.modify(a,await s.format(),{ctime:this.decodeTime(i.ZCREATIONDATE3||i.ZCREATIONDATE2||i.ZCREATIONDATE1),mtime:this.decodeTime(i.ZMODIFICATIONDATE1)}),this.parsedNotes++,this.ctx.reportProgress(this.parsedNotes,this.noteCount),a}async resolveAttachment(e,i){if(e in this.resolvedFiles)return this.resolvedFiles[e];let r,o,a,s,l;switch(i){case"com.apple.paper.doc.scan":s=await this.database.get` + SELECT + zidentifier, zfallbackpdfgeneration, zcreationdate, zmodificationdate, znote + FROM + (SELECT *, NULL AS zfallbackpdfgeneration FROM ziccloudsyncingobject) + WHERE + z_ent = ${this.keys.ICAttachment} + AND z_pk = ${e} + `,r=q.join("FallbackPDFs",s.ZIDENTIFIER,s.ZFALLBACKPDFGENERATION||"","FallbackPDF.pdf"),o="Scan",a="pdf";break;case"com.apple.notes.gallery":s=await this.database.get` + SELECT + zidentifier, zsizeheight, zsizewidth, zcreationdate, zmodificationdate, znote + FROM ziccloudsyncingobject + WHERE + z_ent = ${this.keys.ICAttachment} + AND z_pk = ${e} + `,r=q.join("Previews",`${s.ZIDENTIFIER}-1-${s.ZSIZEWIDTH}x${s.ZSIZEHEIGHT}-0.jpeg`),o="Scan Page",a="jpg";break;case"com.apple.paper":s=await this.database.get` + SELECT + zidentifier, zfallbackimagegeneration, zcreationdate, zmodificationdate, + znote, zhandwritingsummary + FROM + (SELECT *, NULL AS zfallbackimagegeneration FROM ziccloudsyncingobject) + WHERE + z_ent = ${this.keys.ICAttachment} + AND z_pk = ${e} + `,s.ZFALLBACKIMAGEGENERATION?r=q.join("FallbackImages",s.ZIDENTIFIER,s.ZFALLBACKIMAGEGENERATION,"FallbackImage.png"):r=q.join("FallbackImages",`${s.ZIDENTIFIER}.jpg`),o="Drawing",a="png";break;default:s=await this.database.get` + SELECT + a.zidentifier, a.zfilename, + a.zgeneration1, b.zcreationdate, b.zmodificationdate, b.znote + FROM + (SELECT *, NULL AS zgeneration1 FROM ziccloudsyncingobject) AS a, + ziccloudsyncingobject AS b + WHERE + a.z_ent = ${this.keys.ICMedia} + AND a.z_pk = ${e} + AND a.z_pk = b.zmedia + `,r=q.join("Media",s.ZIDENTIFIER,s.ZGENERATION1||"",s.ZFILENAME),[o,a]=Ro(s.ZFILENAME);break}try{let c=await this.getAttachmentSource(this.resolvedAccounts[this.owners[s.ZNOTE]],r),p=await this.getAvailablePathForAttachment(`${o}.${a}`,[]);l=await this.vault.createBinary(p,c,{ctime:this.decodeTime(s.ZCREATIONDATE),mtime:this.decodeTime(s.ZMODIFICATIONDATE)})}catch(c){return this.ctx.reportFailed(r),console.error(c),null}return this.resolvedFiles[e]=l,this.ctx.reportAttachmentSuccess(this.resolvedFiles[e].path),l}decodeData(e,i){let r=Fl.gunzipSync(Buffer.from(e,"hex")),o=this.protobufRoot.lookupType(i.protobufType).decode(r);return new i(this,o)}decodeTime(e){return!e||e<1?new Date().getTime():Math.floor((e+Dg)*1e3)}async getAttachmentSource(e,i){try{return await Pe.readFile(q.join(e.path,i))}catch(r){return await Pe.readFile(q.join(Xt.homedir(),Ra,i))}}};var kn=require("obsidian");var fi=class{constructor(t,e){this.type="file";this.entry=e,this.fullpath=t.fullpath+"/"+e.filename;let{parent:i,name:r,basename:o,extension:a}=re(e.filename);this.parent=i,this.name=r,this.basename=o,this.extension=a}async readText(){return this.entry.getData(new $i)}async read(){return(await this.entry.getData(new Vn)).arrayBuffer()}get filepath(){return this.entry.filename}get size(){return this.entry.uncompressedSize}get ctime(){return this.entry.creationDate}get mtime(){return this.entry.lastModDate}async readZip(t){return t(new Vt(new St(new Blob([await this.read()]))))}};async function gt(n,t){await n.readZip(async e=>{let r=(await e.getEntries()).filter(o=>!o.directory&&!!o.getData).map(o=>new fi(n,o));return t(e,r)})}var xr=class extends ce{constructor(){super(...arguments);this.attachmentMap={}}init(){this.addFileChooserSetting("Bear2bk",["bear2bk"]),this.addOutputLocationSetting("Bear")}async import(e){let{files:i}=this;if(i.length===0){new kn.Notice("Please pick at least one file to import.");return}let r=await this.getOutputFolder();if(!r){new kn.Notice("Please select a location to export to.");return}let o=r,a=new RegExp("\\[[^\\]]*\\]\\((assets/[^\\)]+)\\)","gm"),s=await this.createFolders(`${r.path}/archive`),l=await this.createFolders(`${r.path}/trash`);for(let c of i){if(e.isCancelled())return;e.status("Processing "+c.name),await gt(c,async(p,m)=>{let y=await this.collectMetadata(e,m);for(let w of m){if(e.isCancelled())return;let{fullpath:E,filepath:d,parent:f,name:g,extension:v}=w;if(!(g==="info.json"||g==="tags.json")){e.status("Processing "+g);try{if(v==="md"||v==="markdown"){let _=re(f).basename;e.status("Importing note "+_);let A=await w.readText();A=this.removeMarkdownHeader(_,A);let D=[...A.matchAll(a)];if(D.length>0)for(let O of D){let[S,M]=O,L=q.join(f,decodeURI(M)),j=await this.getAttachmentStoragePath(L);j=encodeURI(j);let Z=S.replace(M,j);A=A.replace(S,Z)}let T=(0,kn.normalizePath)(_),k=y[f],b=o;k!=null&&k.archived?b=s:k!=null&&k.trashed&&(b=l);let C=await this.saveAsMarkdownFile(b,T,A);k!=null&&k.ctime&&(k!=null&&k.mtime)&&await this.modifFileTimestamps(k,C),e.reportNoteSuccess(_)}else if(d.match(/\/assets\//g)){e.status("Importing asset "+w.name);let _=await this.getAttachmentStoragePath(w.filepath),A=await w.read();await this.vault.createBinary(_,A),e.reportAttachmentSuccess(w.fullpath)}else e.reportSkipped(E,"unknown type of file")}catch(_){e.reportFailed(E,_)}}}})}}async modifFileTimestamps(e,i){let r={ctime:e.ctime,mtime:e.mtime};await this.vault.append(i,"",r)}async collectMetadata(e,i){let r={};for(let o of i){if(e.isCancelled())return r;if(o.name!=="info.json")continue;let a=await o.readText(),l=JSON.parse(a)["net.shinyfrog.bear"],c=Date.parse(l.creationDate),p=Date.parse(l.modificationDate);r[o.parent]={ctime:isNaN(c)?void 0:c,mtime:isNaN(p)?void 0:p,archived:l.archived===1,trashed:l.trashed===1}}return r}async getAttachmentStoragePath(e){let i=(0,kn.normalizePath)(e);if(this.attachmentMap[i])return this.attachmentMap[i];let r=Object.values(this.attachmentMap),o=await this.getAvailablePathForAttachment(i,r);return o=o.replace(/:/g,""),this.attachmentMap[i]=o,o}removeMarkdownHeader(e,i){if(!i.startsWith("# "))return i;let r=i.indexOf(` +`),o=r>0?i.substring(2,r):i.substring(2);return o=o.trim(),o!==e.trim()&&o!==""?i:r>0?i.substring(r+1):""}};var xi=require("obsidian");var Bf=require("obsidian");var Yp=require("obsidian");var zp=n=>({...n,created:di(n.created),statusupdated:di(n.statusupdated),updated:di(n.updated),duedate:di(n.duedate),taskflag:n.taskflag==="true",reminderdate:n.reminder?di(n.reminder.reminderdate):void 0,sortweight:n.sortweight}),di=n=>n?(0,Yp.moment)(n,"YYYYMMDDThhmmssZ").toDate():void 0;var Gp=/highlight-(?:text|source)-([a-z0-9]+)/;function Cg(n){n.addRule("highlightedCodeBlock",{filter:function(t){var e=t.firstChild;return t.nodeName==="DIV"&&Gp.test(t.className)&&e&&e.nodeName==="PRE"},replacement:function(t,e,i){var r=e.className||"",o=(r.match(Gp)||[null,""])[1];return` + +`+i.fence+o+` +`+e.firstChild.textContent+` +`+i.fence+` + +`}})}function Ig(n){n.addRule("strikethrough",{filter:["del","s","strike"],replacement:function(t){return"~"+t+"~"}})}var Fg=Array.prototype.indexOf,Lg=Array.prototype.every,Nn={};Nn.tableCell={filter:["th","td"],replacement:function(n,t){return Da(Kp(t))?n:Oa(n,t)}};Nn.tableRow={filter:"tr",replacement:function(n,t){let e=Kp(t);if(Da(e))return n;var i="",r={left:":--",right:"--:",center:":-:"};if(Pg(t)){let l=Xp(e);for(var o=0;o=t.childNodes.length?null:t.childNodes[o];var a="---",s=c?(c.getAttribute("align")||"").toLowerCase():"";s&&(a=r[s]||a),c?i+=Oa(a,t.childNodes[o]):i+=Oa(a,null,o)}}return` +`+n+(i?` +`+i:"")}};Nn.table={filter:function(n){return n.nodeName==="TABLE"},replacement:function(n,t){if(Da(t))return n;n=n.replace(/\n+/g,` +`);var e=n.trim().split(` +`);e.length>=2&&(e=e[1]);var i=e.indexOf("| ---")===0,r=Xp(t),o="";return r&&!i&&(o="|"+" |".repeat(r)+` +|`+" --- |".repeat(r)),` + +`+o+n+` + +`}};Nn.tableSection={filter:["thead","tbody","tfoot"],replacement:function(n){return n}};function Pg(n){var t=n.parentNode;return t.nodeName==="THEAD"||t.firstChild===n&&(t.nodeName==="TABLE"||Mg(t))&&Lg.call(n.childNodes,function(e){return e.nodeName==="TH"})}function Mg(n){var t=n.previousSibling;return n.nodeName==="TBODY"&&(!t||t.nodeName==="THEAD"&&/^\s*$/i.test(t.textContent))}function Oa(n,t=null,e=null){e===null&&(e=Fg.call(t.parentNode.childNodes,t));var i=" ";e===0&&(i="| ");let r=n.trim().replace(/\n\r/g,"
").replace(/\n/g,"
");for(r=r.replace(/\|+/g,"\\|");r.length<3;)r+=" ";return t&&(r=$g(r,t," ")),i+r+" |"}function Vp(n){if(!n.childNodes)return!1;for(let t=0;tt&&(t=r)}return t}function Bg(n){n.keep(function(e){return e.nodeName==="TABLE"});for(var t in Nn)n.addRule(t,Nn[t])}function Ug(n){n.addRule("taskListItems",{filter:function(t){return t.type==="checkbox"&&t.parentNode.nodeName==="LI"},replacement:function(t,e){return(e.checked?"[x]":"[ ]")+" "}})}function Jp(n){n.use([Cg,Ig,Bg,Ug])}var ue=n=>{let t={get(e,i){return e[i]}};return new Proxy(n.attributes,t)};var Qp="\n```\n",Ca=n=>{let t=ue(n),e="-en-codeblock:true";return t.style&&t.style.value.indexOf(e)>=0},jg=n=>{let t=ue(n),e="padding-left:",i=0;return t.style&&t.style.value.indexOf(e)>=0&&(i=Math.floor(t.style.value.split(e)[1].split("px")[0]/20)),i},Ia=n=>n.replace(/\\(.)/g,"$1"),eu=(n,t)=>{let e=jg(t);return n=`${" ".repeat(e)}${n}`,Ca(t)?(n=Ia(n),`${Qp}${n}${Qp}`):t.parentElement&&Ca(t.parentElement)&&t.parentElement.firstElementChild===t?`${n}`:t.parentElement&&Ca(t.parentElement)?` +${n}`:t.isBlock?` +${n} +`:n};var wr="\n```\n",Hg="-en-codeblock:true",qg=/\b(Courier|Mono|Consolas|Console|Inconsolata|Pitch|Monaco|monospace)\b/,tu=n=>{var o,a;if(n.nodeType!==1)return null;let t=n.childNodes,e=t.length;if(e>1)return"mixed";if(e===1){let s=tu(t[0]);if(s)return s}let i=ue(n);if(n.tagName==="FONT")return(o=i.face)==null?void 0:o.value;let r=(a=i.style)==null?void 0:a.value;if(r){let s=r.match(/font-family:([^;]+)/);if(s)return s[1]}return null},mi=n=>{var r;let e=(r=ue(n).style)==null?void 0:r.value;if(e&&e.includes(Hg))return!0;let i=tu(n);return!!i&&qg.test(i)},nu=(n,t)=>{if(mi(t)){let e=t.previousSibling,i=e&&e.tagName===t.tagName&&mi(e),r=t.nextSibling,o=r&&r.tagName===t.tagName&&mi(r);return i||o?(n=i?` +${n}`:`${wr}${n}`,n=o?`${n} +`:`${n}${wr}`,n):(n=Ia(n),n.trim()?`${wr}${n}${wr}`:n)}return t.parentElement&&mi(t.parentElement)&&t.parentElement.firstElementChild===t?n:t.parentElement&&mi(t.parentElement)?` +${n}`:t.isBlock?` +${n} +`:n};var qe=n=>t=>t.nodeName===n||t.nodeName.toLowerCase()===n;var iu={filter:qe("IMG"),replacement:(n,t)=>{let e=ue(t);if(!e.src)return"";let i=e.src.value,r=t.width||"",o=t.height||"",a=i;B.sanitizeResourceNameSpaces?a=a.replace(/ /g,B.replacementChar):B.urlEncodeFileNamesAndLinks&&(a=encodeURI(a));let s=r||o?` =${r}x${o}`:"";if(B.keepImageSize)return s=r||o?`|${r||0}x${o||0}`:"",a.startsWith("./")?`![[${a}${s}]]`:`![${s}](${a})`;if(!i.match(/^[a-z]+:/))return`![[${a}]]`;let l=e.src.value.split("/");return`![${l[l.length-1]}](${a})`}};var fe=class{constructor(){this.noteIdNameMap={},this.noteIdNameTOCMap={}}static getInstance(){return fe.instance||(fe.instance=new fe),fe.instance}addItemToMap(t){this.noteIdNameMap[t.url]={...this.noteIdNameMap[t.url],title:t.title,noteName:this.currentNoteName,notebookName:this.currentNotebookName,uniqueEnd:t.uniqueEnd}}addItemToTOCMap(t){this.noteIdNameTOCMap[t.url]={...this.noteIdNameMap[t.url],title:t.title,noteName:this.currentNoteName,notebookName:this.currentNotebookName,uniqueEnd:t.uniqueEnd}}getNoteIdNameMap(){return this.noteIdNameMap}getNoteIdNameTOCMap(){return this.noteIdNameTOCMap}getAllNoteIdNameMap(){return{...this.noteIdNameMap,...this.noteIdNameTOCMap}}getNoteIdNameMapByNoteTitle(t){return Object.values(this.getAllNoteIdNameMap()).filter(e=>e.title===t)}setCurrentNotebookName(t){this.currentNotebookName=t}getCurrentNotebookName(){return this.currentNotebookName}setCurrentNotebookFullpath(t){this.currentNotebookFullpath=t}setCurrentNoteName(t){this.currentNoteName=t}getCurrentNoteName(){return this.currentNoteName}getCurrentNotePath(){return this.currentNotePath}setCurrentNotePath(t){this.currentNotePath=t}getCurrentNotebookFullpath(){return this.currentNotebookFullpath}};var ru=require("obsidian");var Sn=n=>n.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");var Wg={"application/andrew-inset":"ez","application/applixware":"aw","application/atom+xml":"atom","application/atomcat+xml":"atomcat","application/atomdeleted+xml":"atomdeleted","application/atomsvc+xml":"atomsvc","application/atsc-dwd+xml":"dwd","application/atsc-held+xml":"held","application/atsc-rsat+xml":"rsat","application/bdoc":"bdoc","application/calendar+xml":"xcs","application/ccxml+xml":"ccxml","application/cdfx+xml":"cdfx","application/cdmi-capability":"cdmia","application/cdmi-container":"cdmic","application/cdmi-domain":"cdmid","application/cdmi-object":"cdmio","application/cdmi-queue":"cdmiq","application/cpl+xml":"cpl","application/cu-seeme":"cu","application/dash+xml":"mpd","application/dash-patch+xml":"mpp","application/davmount+xml":"davmount","application/docbook+xml":"dbk","application/dssc+der":"dssc","application/dssc+xml":"xdssc","application/ecmascript":"es","application/emma+xml":"emma","application/emotionml+xml":"emotionml","application/epub+zip":"epub","application/exi":"exi","application/express":"exp","application/fdt+xml":"fdt","application/font-tdpfr":"pfr","application/geo+json":"geojson","application/gml+xml":"gml","application/gpx+xml":"gpx","application/gxf":"gxf","application/gzip":"gz","application/hjson":"hjson","application/hyperstudio":"stk","application/inkml+xml":"ink","application/ipfix":"ipfix","application/its+xml":"its","application/java-archive":"jar","application/java-serialized-object":"ser","application/java-vm":"class","application/javascript":"js","application/json":"json","application/json5":"json5","application/jsonml+json":"jsonml","application/ld+json":"jsonld","application/lgr+xml":"lgr","application/lost+xml":"lostxml","application/mac-binhex40":"hqx","application/mac-compactpro":"cpt","application/mads+xml":"mads","application/manifest+json":"webmanifest","application/marc":"mrc","application/marcxml+xml":"mrcx","application/mathematica":"ma","application/mathml+xml":"mathml","application/mbox":"mbox","application/media-policy-dataset+xml":"mpf","application/mediaservercontrol+xml":"mscml","application/metalink+xml":"metalink","application/metalink4+xml":"meta4","application/mets+xml":"mets","application/mmt-aei+xml":"maei","application/mmt-usd+xml":"musd","application/mods+xml":"mods","application/mp21":"m21","application/mp4":"mp4s","application/msword":"doc","application/mxf":"mxf","application/n-quads":"nq","application/n-triples":"nt","application/node":"cjs","application/octet-stream":"bin","application/oda":"oda","application/oebps-package+xml":"opf","application/ogg":"ogx","application/omdoc+xml":"omdoc","application/onenote":"onetoc","application/oxps":"oxps","application/p2p-overlay+xml":"relo","application/patch-ops-error+xml":"xer","application/pdf":"pdf","application/pgp-encrypted":"pgp","application/pgp-keys":"asc","application/pgp-signature":"asc","application/pics-rules":"prf","application/pkcs10":"p10","application/pkcs7-mime":"p7m","application/pkcs7-signature":"p7s","application/pkcs8":"p8","application/pkix-attr-cert":"ac","application/pkix-cert":"cer","application/pkix-crl":"crl","application/pkix-pkipath":"pkipath","application/pkixcmp":"pki","application/pls+xml":"pls","application/postscript":"ai","application/provenance+xml":"provx","application/prs.cww":"cww","application/pskc+xml":"pskcxml","application/raml+yaml":"raml","application/rdf+xml":"rdf","application/reginfo+xml":"rif","application/relax-ng-compact-syntax":"rnc","application/resource-lists+xml":"rl","application/resource-lists-diff+xml":"rld","application/rls-services+xml":"rs","application/route-apd+xml":"rapd","application/route-s-tsid+xml":"sls","application/route-usd+xml":"rusd","application/rpki-ghostbusters":"gbr","application/rpki-manifest":"mft","application/rpki-roa":"roa","application/rsd+xml":"rsd","application/rss+xml":"rss","application/rtf":"rtf","application/sbml+xml":"sbml","application/scvp-cv-request":"scq","application/scvp-cv-response":"scs","application/scvp-vp-request":"spq","application/scvp-vp-response":"spp","application/sdp":"sdp","application/senml+xml":"senmlx","application/sensml+xml":"sensmlx","application/set-payment-initiation":"setpay","application/set-registration-initiation":"setreg","application/shf+xml":"shf","application/sieve":"siv","application/smil+xml":"smi","application/sparql-query":"rq","application/sparql-results+xml":"srx","application/srgs":"gram","application/srgs+xml":"grxml","application/sru+xml":"sru","application/ssdl+xml":"ssdl","application/ssml+xml":"ssml","application/swid+xml":"swidtag","application/tei+xml":"tei","application/thraud+xml":"tfi","application/timestamped-data":"tsd","application/toml":"toml","application/trig":"trig","application/ttml+xml":"ttml","application/ubjson":"ubj","application/urc-ressheet+xml":"rsheet","application/urc-targetdesc+xml":"td","application/vnd.1000minds.decision-model+xml":"1km","application/vnd.3gpp.pic-bw-large":"plb","application/vnd.3gpp.pic-bw-small":"psb","application/vnd.3gpp.pic-bw-var":"pvb","application/vnd.3gpp2.tcap":"tcap","application/vnd.3m.post-it-notes":"pwn","application/vnd.accpac.simply.aso":"aso","application/vnd.accpac.simply.imp":"imp","application/vnd.acucobol":"acu","application/vnd.acucorp":"atc","application/vnd.adobe.air-application-installer-package+zip":"air","application/vnd.adobe.formscentral.fcdt":"fcdt","application/vnd.adobe.fxp":"fxp","application/vnd.adobe.xdp+xml":"xdp","application/vnd.adobe.xfdf":"xfdf","application/vnd.age":"age","application/vnd.ahead.space":"ahead","application/vnd.airzip.filesecure.azf":"azf","application/vnd.airzip.filesecure.azs":"azs","application/vnd.amazon.ebook":"azw","application/vnd.americandynamics.acc":"acc","application/vnd.amiga.ami":"ami","application/vnd.android.package-archive":"apk","application/vnd.anser-web-certificate-issue-initiation":"cii","application/vnd.anser-web-funds-transfer-initiation":"fti","application/vnd.antix.game-component":"atx","application/vnd.apple.installer+xml":"mpkg","application/vnd.apple.keynote":"key","application/vnd.apple.mpegurl":"m3u8","application/vnd.apple.numbers":"numbers","application/vnd.apple.pages":"pages","application/vnd.apple.pkpass":"pkpass","application/vnd.aristanetworks.swi":"swi","application/vnd.astraea-software.iota":"iota","application/vnd.audiograph":"aep","application/vnd.balsamiq.bmml+xml":"bmml","application/vnd.blueice.multipass":"mpm","application/vnd.bmi":"bmi","application/vnd.businessobjects":"rep","application/vnd.chemdraw+xml":"cdxml","application/vnd.chipnuts.karaoke-mmd":"mmd","application/vnd.cinderella":"cdy","application/vnd.citationstyles.style+xml":"csl","application/vnd.claymore":"cla","application/vnd.cloanto.rp9":"rp9","application/vnd.clonk.c4group":"c4g","application/vnd.cluetrust.cartomobile-config":"c11amc","application/vnd.cluetrust.cartomobile-config-pkg":"c11amz","application/vnd.commonspace":"csp","application/vnd.contact.cmsg":"cdbcmsg","application/vnd.cosmocaller":"cmc","application/vnd.crick.clicker":"clkx","application/vnd.crick.clicker.keyboard":"clkk","application/vnd.crick.clicker.palette":"clkp","application/vnd.crick.clicker.template":"clkt","application/vnd.crick.clicker.wordbank":"clkw","application/vnd.criticaltools.wbs+xml":"wbs","application/vnd.ctc-posml":"pml","application/vnd.cups-ppd":"ppd","application/vnd.curl.car":"car","application/vnd.curl.pcurl":"pcurl","application/vnd.dart":"dart","application/vnd.data-vision.rdz":"rdz","application/vnd.dbf":"dbf","application/vnd.dece.data":"uvf","application/vnd.dece.ttml+xml":"uvt","application/vnd.dece.unspecified":"uvx","application/vnd.dece.zip":"uvz","application/vnd.denovo.fcselayout-link":"fe_launch","application/vnd.dna":"dna","application/vnd.dolby.mlp":"mlp","application/vnd.dpgraph":"dpg","application/vnd.dreamfactory":"dfac","application/vnd.ds-keypoint":"kpxx","application/vnd.dvb.ait":"ait","application/vnd.dvb.service":"svc","application/vnd.dynageo":"geo","application/vnd.ecowin.chart":"mag","application/vnd.enliven":"nml","application/vnd.epson.esf":"esf","application/vnd.epson.msf":"msf","application/vnd.epson.quickanime":"qam","application/vnd.epson.salt":"slt","application/vnd.epson.ssf":"ssf","application/vnd.eszigno3+xml":"es3","application/vnd.ezpix-album":"ez2","application/vnd.ezpix-package":"ez3","application/vnd.fdf":"fdf","application/vnd.fdsn.mseed":"mseed","application/vnd.fdsn.seed":"seed","application/vnd.flographit":"gph","application/vnd.fluxtime.clip":"ftc","application/vnd.framemaker":"fm","application/vnd.frogans.fnc":"fnc","application/vnd.frogans.ltf":"ltf","application/vnd.fsc.weblaunch":"fsc","application/vnd.fujitsu.oasys":"oas","application/vnd.fujitsu.oasys2":"oa2","application/vnd.fujitsu.oasys3":"oa3","application/vnd.fujitsu.oasysgp":"fg5","application/vnd.fujitsu.oasysprs":"bh2","application/vnd.fujixerox.ddd":"ddd","application/vnd.fujixerox.docuworks":"xdw","application/vnd.fujixerox.docuworks.binder":"xbd","application/vnd.fuzzysheet":"fzs","application/vnd.genomatix.tuxedo":"txd","application/vnd.geogebra.file":"ggb","application/vnd.geogebra.tool":"ggt","application/vnd.geometry-explorer":"gex","application/vnd.geonext":"gxt","application/vnd.geoplan":"g2w","application/vnd.geospace":"g3w","application/vnd.gmx":"gmx","application/vnd.google-apps.document":"gdoc","application/vnd.google-apps.presentation":"gslides","application/vnd.google-apps.spreadsheet":"gsheet","application/vnd.google-earth.kml+xml":"kml","application/vnd.google-earth.kmz":"kmz","application/vnd.grafeq":"gqf","application/vnd.groove-account":"gac","application/vnd.groove-help":"ghf","application/vnd.groove-identity-message":"gim","application/vnd.groove-injector":"grv","application/vnd.groove-tool-message":"gtm","application/vnd.groove-tool-template":"tpl","application/vnd.groove-vcard":"vcg","application/vnd.hal+xml":"hal","application/vnd.handheld-entertainment+xml":"zmm","application/vnd.hbci":"hbci","application/vnd.hhe.lesson-player":"les","application/vnd.hp-hpgl":"hpgl","application/vnd.hp-hpid":"hpid","application/vnd.hp-hps":"hps","application/vnd.hp-jlyt":"jlt","application/vnd.hp-pcl":"pcl","application/vnd.hp-pclxl":"pclxl","application/vnd.hydrostatix.sof-data":"sfd-hdstx","application/vnd.ibm.minipay":"mpy","application/vnd.ibm.modcap":"afp","application/vnd.ibm.rights-management":"irm","application/vnd.ibm.secure-container":"sc","application/vnd.iccprofile":"icc","application/vnd.igloader":"igl","application/vnd.immervision-ivp":"ivp","application/vnd.immervision-ivu":"ivu","application/vnd.insors.igm":"igm","application/vnd.intercon.formnet":"xpw","application/vnd.intergeo":"i2g","application/vnd.intu.qbo":"qbo","application/vnd.intu.qfx":"qfx","application/vnd.ipunplugged.rcprofile":"rcprofile","application/vnd.irepository.package+xml":"irp","application/vnd.is-xpr":"xpr","application/vnd.isac.fcs":"fcs","application/vnd.jam":"jam","application/vnd.jcp.javame.midlet-rms":"rms","application/vnd.jisp":"jisp","application/vnd.joost.joda-archive":"joda","application/vnd.kahootz":"ktz","application/vnd.kde.karbon":"karbon","application/vnd.kde.kchart":"chrt","application/vnd.kde.kformula":"kfo","application/vnd.kde.kivio":"flw","application/vnd.kde.kontour":"kon","application/vnd.kde.kpresenter":"kpr","application/vnd.kde.kspread":"ksp","application/vnd.kde.kword":"kwd","application/vnd.kenameaapp":"htke","application/vnd.kidspiration":"kia","application/vnd.kinar":"kne","application/vnd.koan":"skp","application/vnd.kodak-descriptor":"sse","application/vnd.las.las+xml":"lasxml","application/vnd.llamagraphics.life-balance.desktop":"lbd","application/vnd.llamagraphics.life-balance.exchange+xml":"lbe","application/vnd.lotus-1-2-3":"123","application/vnd.lotus-approach":"apr","application/vnd.lotus-freelance":"pre","application/vnd.lotus-notes":"nsf","application/vnd.lotus-organizer":"org","application/vnd.lotus-screencam":"scm","application/vnd.lotus-wordpro":"lwp","application/vnd.macports.portpkg":"portpkg","application/vnd.mapbox-vector-tile":"mvt","application/vnd.mcd":"mcd","application/vnd.medcalcdata":"mc1","application/vnd.mediastation.cdkey":"cdkey","application/vnd.mfer":"mwf","application/vnd.mfmp":"mfm","application/vnd.micrografx.flo":"flo","application/vnd.micrografx.igx":"igx","application/vnd.mif":"mif","application/vnd.mobius.daf":"daf","application/vnd.mobius.dis":"dis","application/vnd.mobius.mbk":"mbk","application/vnd.mobius.mqy":"mqy","application/vnd.mobius.msl":"msl","application/vnd.mobius.plc":"plc","application/vnd.mobius.txf":"txf","application/vnd.mophun.application":"mpn","application/vnd.mophun.certificate":"mpc","application/vnd.mozilla.xul+xml":"xul","application/vnd.ms-artgalry":"cil","application/vnd.ms-cab-compressed":"cab","application/vnd.ms-excel":"xls","application/vnd.ms-excel.addin.macroenabled.12":"xlam","application/vnd.ms-excel.sheet.binary.macroenabled.12":"xlsb","application/vnd.ms-excel.sheet.macroenabled.12":"xlsm","application/vnd.ms-excel.template.macroenabled.12":"xltm","application/vnd.ms-fontobject":"eot","application/vnd.ms-htmlhelp":"chm","application/vnd.ms-ims":"ims","application/vnd.ms-lrm":"lrm","application/vnd.ms-officetheme":"thmx","application/vnd.ms-outlook":"msg","application/vnd.ms-pki.seccat":"cat","application/vnd.ms-pki.stl":"stl","application/vnd.ms-powerpoint":"ppt","application/vnd.ms-powerpoint.addin.macroenabled.12":"ppam","application/vnd.ms-powerpoint.presentation.macroenabled.12":"pptm","application/vnd.ms-powerpoint.slide.macroenabled.12":"sldm","application/vnd.ms-powerpoint.slideshow.macroenabled.12":"ppsm","application/vnd.ms-powerpoint.template.macroenabled.12":"potm","application/vnd.ms-project":"mpp","application/vnd.ms-word.document.macroenabled.12":"docm","application/vnd.ms-word.template.macroenabled.12":"dotm","application/vnd.ms-works":"wps","application/vnd.ms-wpl":"wpl","application/vnd.ms-xpsdocument":"xps","application/vnd.mseq":"mseq","application/vnd.musician":"mus","application/vnd.muvee.style":"msty","application/vnd.mynfc":"taglet","application/vnd.neurolanguage.nlu":"nlu","application/vnd.nitf":"ntf","application/vnd.noblenet-directory":"nnd","application/vnd.noblenet-sealer":"nns","application/vnd.noblenet-web":"nnw","application/vnd.nokia.n-gage.ac+xml":"ac","application/vnd.nokia.n-gage.data":"ngdat","application/vnd.nokia.n-gage.symbian.install":"n-gage","application/vnd.nokia.radio-preset":"rpst","application/vnd.nokia.radio-presets":"rpss","application/vnd.novadigm.edm":"edm","application/vnd.novadigm.edx":"edx","application/vnd.novadigm.ext":"ext","application/vnd.oasis.opendocument.chart":"odc","application/vnd.oasis.opendocument.chart-template":"otc","application/vnd.oasis.opendocument.database":"odb","application/vnd.oasis.opendocument.formula":"odf","application/vnd.oasis.opendocument.formula-template":"odft","application/vnd.oasis.opendocument.graphics":"odg","application/vnd.oasis.opendocument.graphics-template":"otg","application/vnd.oasis.opendocument.image":"odi","application/vnd.oasis.opendocument.image-template":"oti","application/vnd.oasis.opendocument.presentation":"odp","application/vnd.oasis.opendocument.presentation-template":"otp","application/vnd.oasis.opendocument.spreadsheet":"ods","application/vnd.oasis.opendocument.spreadsheet-template":"ots","application/vnd.oasis.opendocument.text":"odt","application/vnd.oasis.opendocument.text-master":"odm","application/vnd.oasis.opendocument.text-template":"ott","application/vnd.oasis.opendocument.text-web":"oth","application/vnd.olpc-sugar":"xo","application/vnd.oma.dd2+xml":"dd2","application/vnd.openblox.game+xml":"obgx","application/vnd.openofficeorg.extension":"oxt","application/vnd.openstreetmap.data+xml":"osm","application/vnd.openxmlformats-officedocument.presentationml.presentation":"pptx","application/vnd.openxmlformats-officedocument.presentationml.slide":"sldx","application/vnd.openxmlformats-officedocument.presentationml.slideshow":"ppsx","application/vnd.openxmlformats-officedocument.presentationml.template":"potx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.template":"xltx","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"docx","application/vnd.openxmlformats-officedocument.wordprocessingml.template":"dotx","application/vnd.osgeo.mapguide.package":"mgp","application/vnd.osgi.dp":"dp","application/vnd.osgi.subsystem":"esa","application/vnd.palm":"pdb","application/vnd.pawaafile":"paw","application/vnd.pg.format":"str","application/vnd.pg.osasli":"ei6","application/vnd.picsel":"efif","application/vnd.pmi.widget":"wg","application/vnd.pocketlearn":"plf","application/vnd.powerbuilder6":"pbd","application/vnd.previewsystems.box":"box","application/vnd.proteus.magazine":"mgz","application/vnd.publishare-delta-tree":"qps","application/vnd.pvi.ptid1":"ptid","application/vnd.quark.quarkxpress":"qxd","application/vnd.rar":"rar","application/vnd.realvnc.bed":"bed","application/vnd.recordare.musicxml":"mxl","application/vnd.recordare.musicxml+xml":"musicxml","application/vnd.rig.cryptonote":"cryptonote","application/vnd.rim.cod":"cod","application/vnd.rn-realmedia":"rm","application/vnd.rn-realmedia-vbr":"rmvb","application/vnd.route66.link66+xml":"link66","application/vnd.sailingtracker.track":"st","application/vnd.seemail":"see","application/vnd.sema":"sema","application/vnd.semd":"semd","application/vnd.semf":"semf","application/vnd.shana.informed.formdata":"ifm","application/vnd.shana.informed.formtemplate":"itp","application/vnd.shana.informed.interchange":"iif","application/vnd.shana.informed.package":"ipk","application/vnd.simtech-mindmapper":"twd","application/vnd.smaf":"mmf","application/vnd.smart.teacher":"teacher","application/vnd.software602.filler.form+xml":"fo","application/vnd.solent.sdkm+xml":"sdkm","application/vnd.spotfire.dxp":"dxp","application/vnd.spotfire.sfs":"sfs","application/vnd.stardivision.calc":"sdc","application/vnd.stardivision.draw":"sda","application/vnd.stardivision.impress":"sdd","application/vnd.stardivision.math":"smf","application/vnd.stardivision.writer":"sdw","application/vnd.stardivision.writer-global":"sgl","application/vnd.stepmania.package":"smzip","application/vnd.stepmania.stepchart":"sm","application/vnd.sun.wadl+xml":"wadl","application/vnd.sun.xml.calc":"sxc","application/vnd.sun.xml.calc.template":"stc","application/vnd.sun.xml.draw":"sxd","application/vnd.sun.xml.draw.template":"std","application/vnd.sun.xml.impress":"sxi","application/vnd.sun.xml.impress.template":"sti","application/vnd.sun.xml.math":"sxm","application/vnd.sun.xml.writer":"sxw","application/vnd.sun.xml.writer.global":"sxg","application/vnd.sun.xml.writer.template":"stw","application/vnd.sus-calendar":"sus","application/vnd.svd":"svd","application/vnd.symbian.install":"sis","application/vnd.syncml+xml":"xsm","application/vnd.syncml.dm+wbxml":"bdm","application/vnd.syncml.dm+xml":"xdm","application/vnd.syncml.dmddf+xml":"ddf","application/vnd.tao.intent-module-archive":"tao","application/vnd.tcpdump.pcap":"pcap","application/vnd.tmobile-livetv":"tmo","application/vnd.trid.tpt":"tpt","application/vnd.triscape.mxs":"mxs","application/vnd.trueapp":"tra","application/vnd.ufdl":"ufd","application/vnd.uiq.theme":"utz","application/vnd.umajin":"umj","application/vnd.unity":"unityweb","application/vnd.uoml+xml":"uoml","application/vnd.vcx":"vcx","application/vnd.visio":"vsd","application/vnd.visionary":"vis","application/vnd.vsf":"vsf","application/vnd.wap.wbxml":"wbxml","application/vnd.wap.wmlc":"wmlc","application/vnd.wap.wmlscriptc":"wmlsc","application/vnd.webturbo":"wtb","application/vnd.wolfram.player":"nbp","application/vnd.wordperfect":"wpd","application/vnd.wqd":"wqd","application/vnd.wt.stf":"stf","application/vnd.xara":"xar","application/vnd.xfdl":"xfdl","application/vnd.yamaha.hv-dic":"hvd","application/vnd.yamaha.hv-script":"hvs","application/vnd.yamaha.hv-voice":"hvp","application/vnd.yamaha.openscoreformat":"osf","application/vnd.yamaha.openscoreformat.osfpvg+xml":"osfpvg","application/vnd.yamaha.smaf-audio":"saf","application/vnd.yamaha.smaf-phrase":"spf","application/vnd.yellowriver-custom-menu":"cmp","application/vnd.zul":"zir","application/vnd.zzazz.deck+xml":"zaz","application/voicexml+xml":"vxml","application/wasm":"wasm","application/watcherinfo+xml":"wif","application/widget":"wgt","application/winhlp":"hlp","application/wsdl+xml":"wsdl","application/wspolicy+xml":"wspolicy","application/x-7z-compressed":"7z","application/x-abiword":"abw","application/x-ace-compressed":"ace","application/x-apple-diskimage":"dmg","application/x-arj":"arj","application/x-authorware-bin":"aab","application/x-authorware-map":"aam","application/x-authorware-seg":"aas","application/x-bcpio":"bcpio","application/x-bdoc":"bdoc","application/x-bittorrent":"torrent","application/x-blorb":"blb","application/x-bzip":"bz","application/x-bzip2":"bz2","application/x-cbr":"cbr","application/x-cdlink":"vcd","application/x-cfs-compressed":"cfs","application/x-chat":"chat","application/x-chess-pgn":"pgn","application/x-chrome-extension":"crx","application/x-cocoa":"cco","application/x-conference":"nsc","application/x-cpio":"cpio","application/x-csh":"csh","application/x-debian-package":"deb","application/x-dgc-compressed":"dgc","application/x-director":"dir","application/x-doom":"wad","application/x-dtbncx+xml":"ncx","application/x-dtbook+xml":"dtb","application/x-dtbresource+xml":"res","application/x-dvi":"dvi","application/x-envoy":"evy","application/x-eva":"eva","application/x-font-bdf":"bdf","application/x-font-ghostscript":"gsf","application/x-font-linux-psf":"psf","application/x-font-pcf":"pcf","application/x-font-snf":"snf","application/x-font-type1":"pfa","application/x-freearc":"arc","application/x-futuresplash":"spl","application/x-gca-compressed":"gca","application/x-glulx":"ulx","application/x-gnumeric":"gnumeric","application/x-gramps-xml":"gramps","application/x-gtar":"gtar","application/x-hdf":"hdf","application/x-httpd-php":"php","application/x-install-instructions":"install","application/x-iso9660-image":"iso","application/x-iwork-keynote-sffkey":"key","application/x-iwork-numbers-sffnumbers":"numbers","application/x-iwork-pages-sffpages":"pages","application/x-java-archive-diff":"jardiff","application/x-java-jnlp-file":"jnlp","application/x-keepass2":"kdbx","application/x-latex":"latex","application/x-lua-bytecode":"luac","application/x-lzh-compressed":"lzh","application/x-makeself":"run","application/x-mie":"mie","application/x-mobipocket-ebook":"prc","application/x-ms-application":"application","application/x-ms-shortcut":"lnk","application/x-ms-wmd":"wmd","application/x-ms-wmz":"wmz","application/x-ms-xbap":"xbap","application/x-msaccess":"mdb","application/x-msbinder":"obd","application/x-mscardfile":"crd","application/x-msclip":"clp","application/x-msdos-program":"exe","application/x-msdownload":"exe","application/x-msmediaview":"mvb","application/x-msmetafile":"wmf","application/x-msmoney":"mny","application/x-mspublisher":"pub","application/x-msschedule":"scd","application/x-msterminal":"trm","application/x-mswrite":"wri","application/x-netcdf":"nc","application/x-ns-proxy-autoconfig":"pac","application/x-nzb":"nzb","application/x-perl":"pl","application/x-pilot":"prc","application/x-pkcs12":"p12","application/x-pkcs7-certificates":"p7b","application/x-pkcs7-certreqresp":"p7r","application/x-rar-compressed":"rar","application/x-redhat-package-manager":"rpm","application/x-research-info-systems":"ris","application/x-sea":"sea","application/x-sh":"sh","application/x-shar":"shar","application/x-shockwave-flash":"swf","application/x-silverlight-app":"xap","application/x-sql":"sql","application/x-stuffit":"sit","application/x-stuffitx":"sitx","application/x-subrip":"srt","application/x-sv4cpio":"sv4cpio","application/x-sv4crc":"sv4crc","application/x-t3vm-image":"t3","application/x-tads":"gam","application/x-tar":"tar","application/x-tcl":"tcl","application/x-tex":"tex","application/x-tex-tfm":"tfm","application/x-texinfo":"texinfo","application/x-tgif":"obj","application/x-ustar":"ustar","application/x-virtualbox-hdd":"hdd","application/x-virtualbox-ova":"ova","application/x-virtualbox-ovf":"ovf","application/x-virtualbox-vbox":"vbox","application/x-virtualbox-vbox-extpack":"vbox-extpack","application/x-virtualbox-vdi":"vdi","application/x-virtualbox-vhd":"vhd","application/x-virtualbox-vmdk":"vmdk","application/x-wais-source":"src","application/x-web-app-manifest+json":"webapp","application/x-x509-ca-cert":"der","application/x-xfig":"fig","application/x-xliff+xml":"xlf","application/x-xpinstall":"xpi","application/x-xz":"xz","application/x-zmachine":"z1","application/xaml+xml":"xaml","application/xcap-att+xml":"xav","application/xcap-caps+xml":"xca","application/xcap-diff+xml":"xdf","application/xcap-el+xml":"xel","application/xcap-ns+xml":"xns","application/xenc+xml":"xenc","application/xhtml+xml":"xhtml","application/xliff+xml":"xlf","application/xml":"xml","application/xml-dtd":"dtd","application/xop+xml":"xop","application/xproc+xml":"xpl","application/xslt+xml":"xsl","application/xspf+xml":"xspf","application/xv+xml":"mxml","application/yang":"yang","application/yin+xml":"yin","application/zip":"zip","audio/3gpp":"3gpp","audio/adpcm":"adp","audio/amr":"amr","audio/basic":"au","audio/midi":"mid","audio/mobile-xmf":"mxmf","audio/mp3":"mp3","audio/mp4":"m4a","audio/mpeg":"mpga","audio/ogg":"oga","audio/s3m":"s3m","audio/silk":"sil","audio/vnd.dece.audio":"uva","audio/vnd.digital-winds":"eol","audio/vnd.dra":"dra","audio/vnd.dts":"dts","audio/vnd.dts.hd":"dtshd","audio/vnd.lucent.voice":"lvp","audio/vnd.ms-playready.media.pya":"pya","audio/vnd.nuera.ecelp4800":"ecelp4800","audio/vnd.nuera.ecelp7470":"ecelp7470","audio/vnd.nuera.ecelp9600":"ecelp9600","audio/vnd.rip":"rip","audio/wav":"wav","audio/wave":"wav","audio/webm":"weba","audio/x-aac":"aac","audio/x-aiff":"aif","audio/x-caf":"caf","audio/x-flac":"flac","audio/x-m4a":"m4a","audio/x-matroska":"mka","audio/x-mpegurl":"m3u","audio/x-ms-wax":"wax","audio/x-ms-wma":"wma","audio/x-pn-realaudio":"ram","audio/x-pn-realaudio-plugin":"rmp","audio/x-realaudio":"ra","audio/x-wav":"wav","audio/xm":"xm","chemical/x-cdx":"cdx","chemical/x-cif":"cif","chemical/x-cmdf":"cmdf","chemical/x-cml":"cml","chemical/x-csml":"csml","chemical/x-xyz":"xyz","font/collection":"ttc","font/otf":"otf","font/ttf":"ttf","font/woff":"woff","font/woff2":"woff2","image/aces":"exr","image/apng":"apng","image/avci":"avci","image/avcs":"avcs","image/avif":"avif","image/bmp":"bmp","image/cgm":"cgm","image/dicom-rle":"drle","image/emf":"emf","image/fits":"fits","image/g3fax":"g3","image/gif":"gif","image/heic":"heic","image/heic-sequence":"heics","image/heif":"heif","image/heif-sequence":"heifs","image/hej2k":"hej2","image/hsj2":"hsj2","image/ief":"ief","image/jls":"jls","image/jp2":"jp2","image/jpeg":"jpeg","image/jph":"jph","image/jphc":"jhc","image/jpm":"jpm","image/jpx":"jpx","image/jxr":"jxr","image/jxra":"jxra","image/jxrs":"jxrs","image/jxs":"jxs","image/jxsc":"jxsc","image/jxsi":"jxsi","image/jxss":"jxss","image/ktx":"ktx","image/ktx2":"ktx2","image/png":"png","image/prs.btif":"btif","image/prs.pti":"pti","image/sgi":"sgi","image/svg+xml":"svg","image/t38":"t38","image/tiff":"tif","image/tiff-fx":"tfx","image/vnd.adobe.photoshop":"psd","image/vnd.airzip.accelerator.azv":"azv","image/vnd.dece.graphic":"uvi","image/vnd.djvu":"djvu","image/vnd.dvb.subtitle":"sub","image/vnd.dwg":"dwg","image/vnd.dxf":"dxf","image/vnd.fastbidsheet":"fbs","image/vnd.fpx":"fpx","image/vnd.fst":"fst","image/vnd.fujixerox.edmics-mmr":"mmr","image/vnd.fujixerox.edmics-rlc":"rlc","image/vnd.microsoft.icon":"ico","image/vnd.ms-dds":"dds","image/vnd.ms-modi":"mdi","image/vnd.ms-photo":"wdp","image/vnd.net-fpx":"npx","image/vnd.pco.b16":"b16","image/vnd.tencent.tap":"tap","image/vnd.valve.source.texture":"vtf","image/vnd.wap.wbmp":"wbmp","image/vnd.xiff":"xif","image/vnd.zbrush.pcx":"pcx","image/webp":"webp","image/wmf":"wmf","image/x-3ds":"3ds","image/x-cmu-raster":"ras","image/x-cmx":"cmx","image/x-freehand":"fh","image/x-icon":"ico","image/x-jng":"jng","image/x-mrsid-image":"sid","image/x-ms-bmp":"bmp","image/x-pcx":"pcx","image/x-pict":"pic","image/x-portable-anymap":"pnm","image/x-portable-bitmap":"pbm","image/x-portable-graymap":"pgm","image/x-portable-pixmap":"ppm","image/x-rgb":"rgb","image/x-tga":"tga","image/x-xbitmap":"xbm","image/x-xpixmap":"xpm","image/x-xwindowdump":"xwd","message/disposition-notification":"disposition-notification","message/global":"u8msg","message/global-delivery-status":"u8dsn","message/global-disposition-notification":"u8mdn","message/global-headers":"u8hdr","message/rfc822":"eml","message/vnd.wfa.wsc":"wsc","model/3mf":"3mf","model/gltf+json":"gltf","model/gltf-binary":"glb","model/iges":"igs","model/mesh":"msh","model/mtl":"mtl","model/obj":"obj","model/step+xml":"stpx","model/step+zip":"stpz","model/step-xml+zip":"stpxz","model/stl":"stl","model/vnd.collada+xml":"dae","model/vnd.dwf":"dwf","model/vnd.gdl":"gdl","model/vnd.gtw":"gtw","model/vnd.mts":"mts","model/vnd.opengex":"ogex","model/vnd.parasolid.transmit.binary":"x_b","model/vnd.parasolid.transmit.text":"x_t","model/vnd.sap.vds":"vds","model/vnd.usdz+zip":"usdz","model/vnd.valve.source.compiled-map":"bsp","model/vnd.vtu":"vtu","model/vrml":"wrl","model/x3d+binary":"x3db","model/x3d+fastinfoset":"x3db","model/x3d+vrml":"x3dv","model/x3d+xml":"x3d","model/x3d-vrml":"x3dv","text/cache-manifest":"appcache","text/calendar":"ics","text/coffeescript":"coffee","text/css":"css","text/csv":"csv","text/html":"html","text/jade":"jade","text/jsx":"jsx","text/less":"less","text/markdown":"markdown","text/mathml":"mml","text/mdx":"mdx","text/n3":"n3","text/plain":"txt","text/prs.lines.tag":"dsc","text/richtext":"rtx","text/rtf":"rtf","text/sgml":"sgml","text/shex":"shex","text/slim":"slim","text/spdx":"spdx","text/stylus":"stylus","text/tab-separated-values":"tsv","text/troff":"t","text/turtle":"ttl","text/uri-list":"uri","text/vcard":"vcard","text/vnd.curl":"curl","text/vnd.curl.dcurl":"dcurl","text/vnd.curl.mcurl":"mcurl","text/vnd.curl.scurl":"scurl","text/vnd.dvb.subtitle":"sub","text/vnd.familysearch.gedcom":"ged","text/vnd.fly":"fly","text/vnd.fmi.flexstor":"flx","text/vnd.graphviz":"gv","text/vnd.in3d.3dml":"3dml","text/vnd.in3d.spot":"spot","text/vnd.sun.j2me.app-descriptor":"jad","text/vnd.wap.wml":"wml","text/vnd.wap.wmlscript":"wmls","text/vtt":"vtt","text/x-asm":"s","text/x-c":"c","text/x-component":"htc","text/x-fortran":"f","text/x-handlebars-template":"hbs","text/x-java-source":"java","text/x-lua":"lua","text/x-markdown":"mkd","text/x-nfo":"nfo","text/x-opml":"opml","text/x-org":"org","text/x-pascal":"p","text/x-processing":"pde","text/x-sass":"sass","text/x-scss":"scss","text/x-setext":"etx","text/x-sfv":"sfv","text/x-suse-ymp":"ymp","text/x-uuencode":"uu","text/x-vcalendar":"vcs","text/x-vcard":"vcf","text/xml":"xml","text/yaml":"yaml","video/3gpp":"3gp","video/3gpp2":"3g2","video/h261":"h261","video/h263":"h263","video/h264":"h264","video/iso.segment":"m4s","video/jpeg":"jpgv","video/jpm":"jpm","video/mj2":"mj2","video/mp2t":"ts","video/mp4":"mp4","video/mpeg":"mpeg","video/ogg":"ogv","video/quicktime":"qt","video/vnd.dece.hd":"uvh","video/vnd.dece.mobile":"uvm","video/vnd.dece.pd":"uvp","video/vnd.dece.sd":"uvs","video/vnd.dece.video":"uvv","video/vnd.dvb.file":"dvb","video/vnd.fvt":"fvt","video/vnd.mpegurl":"mxu","video/vnd.ms-playready.media.pyv":"pyv","video/vnd.uvvu.mp4":"uvu","video/vnd.vivo":"viv","video/webm":"webm","video/x-f4v":"f4v","video/x-fli":"fli","video/x-flv":"flv","video/x-m4v":"m4v","video/x-matroska":"mkv","video/x-mng":"mng","video/x-ms-asf":"asf","video/x-ms-vob":"vob","video/x-ms-wm":"wm","video/x-ms-wmv":"wmv","video/x-ms-wmx":"wmx","video/x-ms-wvx":"wvx","video/x-msvideo":"avi","video/x-sgi-movie":"movie","video/x-smv":"smv","x-conference/x-cooltalk":"ice"},Zg=/^\s*([^;\s]*)(?:;|\s|$)/;function vr(n){if(!n||typeof n!="string")return"";let t=Zg.exec(n);return t&&Wg[t[1].toLowerCase()]||""}var Rn=n=>Ze(n).replace(/[\[\]\#\^]/g,""),hi=(n,t)=>K.readdirSync(n).filter(i=>{let r=i.split(".").slice(0,-1).join("."),o=Sn(t),a=r.match(new RegExp(`${o}\\.\\d+`));return r===t||a}).length,ou=(n,t)=>{let e=B.useUniqueUnknownFileNames?"unknown_filename"+(Math.random().toString(16)+"0000000").slice(2,10):"unknown_filename",i=Gg(t),r=e;if(t["resource-attributes"]&&t["resource-attributes"]["file-name"]){let s=t["resource-attributes"]["file-name"].substr(0,50);r=re(s).basename}r=r.replace(/[/\\?%*:|"<>\[\]\+]/g,"-"),B.sanitizeResourceNameSpaces&&(r=r.replace(/ /g,B.replacementChar));let o=hi(n,r);return{fileName:`${o>0?`${r}.${o}`:r}.${i}`,extension:i,index:o}},Fa=n=>Rn(n.title?`${n.title.toString()}`:"Untitled"),au=(n,t,e="md")=>`${La(n,t)}.${e}`,Yg=n=>{if(!(n["resource-attributes"]&&n["resource-attributes"]["file-name"]))return"";let t=n["resource-attributes"]["file-name"].split(".");return t.length>1?t[t.length-1]:void 0},zg=n=>{let t=n.mime;return t&&vr(t)||""},Gg=n=>{let t="dat";return Yg(n)||zg(n)||t},Vg=(n,t)=>(0,ru.moment)(n.created).format("YYYYMMDDHHmm"),La=(n,t)=>{let e;if(B.isZettelkastenNeeded||B.useZettelIdAsFilename){let i=Vg(t,n),r=hi(n,i),o=" ";e=r!==0?`${i}.${r}`:i,B.useZettelIdAsFilename||(e+=Fa(t)!=="Untitled"?`${o}${Fa(t)}`:"")}else{let i=Fa(t),r=hi(n,i);e=r===0?i:`${i}.${r}`}return e};var su=n=>n==="Table of Contents";var Kg=n=>n.replace(/\[|\]/g,""),Xg=n=>n.replace(/\\/g,""),cu={filter:qe("A"),replacement:(n,t)=>{let e=ue(t);if(!e.href)return"";let i=Er(B).turndown(Kg(t.innerHTML));i=Xg(i);let r="",o=i.match(/^(#{1,6} )(.*)/);o&&(r=o[1],i=o[2]);let a=e.href.value,s=e.type?e.type.value:void 0,l=B.urlEncodeFileNamesAndLinks?encodeURI(a):a;if(s==="file")return`![[${l}]]`;if(a.match(/^(https?:|www\.|file:|ftp:|mailto:)/))return r+e0(i,a);if(a.startsWith("evernote://")){let c=Rn(i),p=fe.getInstance(),m=xn(6);return su(p.getCurrentNoteName())?p.addItemToTOCMap({url:a,title:c,uniqueEnd:m}):p.addItemToMap({url:a,title:c,uniqueEnd:m}),r+`[[${a}]]`}return r+`[[${l}${i===l?"":`|${i}`}]]`}},Jg={"&":"&","<":"<",">":">",""":'"',"'":"'"},pu=/&(?:amp|lt|gt|quot|#39);/g,Qg=RegExp(pu.source);function lu(n){return n&&Qg.test(n)?n.replace(pu,t=>Jg[t]):n}var e0=(n,t)=>!n||lu(n)===lu(t)?B.generateNakedUrls?t:`<${t}>`:`[${n}](${t})`;var we={bold:"**",italic:"_",highlight:"==",strikethrough:"~~"};var t0="-evernote-highlight:true;",n0="--en-highlight",i0="bold",r0="italic",uu={filter:qe("SPAN"),replacement:(n,t)=>{let e=ue(t);if(e.style&&n.trim()!==""){let i=e.style.value;if(n!==""){let r=i.includes(i0),o=i.includes(r0);if(r&&!o)return`${we.bold}${n}${we.bold}`;if(!r&&o)return`${we.italic}${n}${we.italic}`;if(r&&o)return`${we.italic}${we.bold}${n}${we.bold}${we.italic}`}return i.includes(t0)||i.includes(n0)?`${we.highlight}${n}${we.highlight}`:n}return n}};var fu={filter:["del","s","strike"],replacement:n=>`${we.strikethrough}${n}${we.strikethrough}`};var du={filter:qe("EN-TODO"),replacement:(n,t)=>{var r,o;let e=ue(t);return`${((o=(r=t.parentElement)==null?void 0:r.nodeName)==null?void 0:o.toUpperCase())==="LI"?"":"- "}${e.checked&&e.checked.value==="true"?"[x]":"[ ]"} ${n}`}};var mu={filter:qe("BR"),replacement:(n,t)=>""};var o0=n=>{let t=ue(n),e="--en-task-group:true";return t.style&&t.style.value.indexOf(e)>=0},a0=n=>{let t=ue(n),e="--en-id:";return t.style.value.split(e)[1].split(";")[0]},hu={filter:qe("DIV"),replacement:(n,t)=>o0(t)?`${a0(t)}`:B.monospaceIsCodeBlock?nu(n,t):eu(n,t)};var gu={filter:["i"],replacement:n=>n.trim()!==""?`${we.italic}${n}${we.italic}`:n};var _r="- [ ]",Tr="- [x]";var yu=" ",bu={filter:"li",replacement:(n,t,e)=>{let i=m=>{let y=ue(m),w="--en-checked:true;";return y.style&&y.style.value.indexOf(w)>=0},r=m=>{let y=ue(m),w="--en-checked:false;";return y.style&&y.style.value.indexOf(w)>=0},o=n.match(/^\n*/)[0].length||0,a=yu.repeat(o),s=n.replace(/^\n+/,"").replace(/\n+$/,` +`).replace(/\n/gm,` +${yu}`),l=o>0?a:i(t)?`${Tr} `:r(t)?`${_r} `:"* ",c=t.parentNode;if(c.nodeName==="OL"){let m=c.getAttribute("start"),y=Array.prototype.indexOf.call(c.children,t);l=`${m?Number(m)+y:y+1}. `}let p;return p=l+s+(t.nextSibling&&!/\n$/.test(s)?` +`:""),p}};var Er=n=>{let t=new window.TurndownService({br:"",...n.turndownOptions,blankReplacement:(e,i)=>i.isBlock?` + +`:"",keepReplacement:(e,i)=>i.isBlock?` +${i.outerHTML} +`:i.outerHTML,defaultReplacement:(e,i)=>i.isBlock?` +${e} +`:e});return t.use(Jp),t.addRule("span",uu),t.addRule("strikethrough",fu),t.addRule("evernote task items",du),t.addRule("wikistyle links",cu),t.addRule("images",iu),t.addRule("list",bu),t.addRule("italic",gu),n.keepMDCharactersOfENNotes&&(t.escape=e=>e),t.addRule("divBlock",hu),n.keepOriginalAmountOfNewlines&&t.addRule("newline",mu),t};var xu=n=>{n.replaceWith(...Array.from(n.children))},wu=n=>{let t=n.parentElement;t.replaceWith(...Array.from(t.childNodes)),t.append(...Array.from(n.childNodes)),n.appendChild(t)},s0=n=>(Array.from(n.querySelectorAll("span>en-todo")).forEach(wu),Array.from(n.querySelectorAll("a>en-todo")).forEach(wu),n),l0=n=>{let t=n.replace(/

  • /g,"
  • ");return t=t.replace(/<\/li>/g,"
  • "),t=t.replace(/
  • (\s)*
    /g,"
  • "),t=t.replace(/<\/div>(\s)*<\/div><\/li>/g,"
  • "),t},c0=n=>{var o;let t=Array.from(n.getElementsByTagName("ul")),e=Array.from(n.getElementsByTagName("ol")),i=t.concat(e);i.forEach(a=>{a.parentElement.tagName==="LI"&&a.parentElement.replaceWith(a),a.previousElementSibling&&a.previousElementSibling.tagName==="LI"&&a.previousElementSibling.appendChild(a)});for(let a of i){let s=a.parentElement;(s==null?void 0:s.tagName)==="DIV"&&((o=s==null?void 0:s.parentElement)==null?void 0:o.tagName)==="UL"&&xu(s),((s==null?void 0:s.tagName)==="UL"||(s==null?void 0:s.tagName)==="OL")&&(s==null?void 0:s.childNodes.length)===1&&xu(s)}let r=Array.from(n.getElementsByTagName("li"));for(let a of r){let s=a.firstElementChild;if(s&&s.tagName==="DIV"){let l=Array.from(s.childNodes);s.replaceWith(...l)}}return n},vu=(n,{htmlContent:t})=>{let e=t.replace(/]*>/,"").replace(/(]*)\/>/,"$1>").replace(//g,""),i=new DOMParser().parseFromString(l0(e),"text/html").getElementsByTagName("en-note").item(0),r=Er(n).turndown(s0(c0(i))),o=new RegExp("","g");return r=r.replace(o,""),r&&r!=="undefined"?{content:r}:{content:""}};var df=rs(require("crypto"));var yt=require("obsidian");var Eu=(n,t)=>({createdAt:p0(n),updatedAt:u0(n),sourceUrl:f0(n),location:d0(n),reminderTime:m0(n),reminderOrder:h0(n),reminderDoneTime:g0(n),notebookName:t});var p0=n=>!B.skipCreationTime&&n.created?(0,yt.moment)(n.created).format(B.dateFormat):"",u0=n=>!B.skipUpdateTime&&n.updated?(0,yt.moment)(n.updated).format(B.dateFormat):"",f0=n=>!B.skipSourceUrl&&n["note-attributes"]?n["note-attributes"]["source-url"]:"",d0=n=>!B.skipLocation&&n["note-attributes"]&&n["note-attributes"].longitude?`${n["note-attributes"].latitude},${n["note-attributes"].longitude}`:"",m0=n=>!B.skipReminderTime&&n["note-attributes"]&&n["note-attributes"]["reminder-time"]?(0,yt.moment)(n["note-attributes"]["reminder-time"]).format(B.dateFormat):"",h0=n=>!B.skipReminderOrder&&n["note-attributes"]&&n["note-attributes"]["reminder-order"]?n["note-attributes"]["reminder-order"]:"",g0=n=>!B.skipReminderDoneTime&&n["note-attributes"]&&n["note-attributes"]["reminder-done-time"]?(0,yt.moment)(n["note-attributes"]["reminder-done-time"]).format(B.dateFormat):"",_u=n=>({tags:y0(n)}),y0=n=>{if(!B.skipTags&&n.tag){let t=Array.isArray(n.tag)?n.tag:[n.tag],e=B.nestedTags;return t.map(r=>{let o=r.toString().replace(/^#/,"");e&&(o=o.replace(new RegExp(Sn(e.separatorInEN),"g"),e.replaceSeparatorWith));let a=e&&e.replaceSpaceWith||"-";return o=o.replace(/ /g,a),`${B.useHashTags?"#":""}${o}`}).join(" ")}return""},Pa;try{Pa=window.require("btime")}catch(n){}var Ar=(n,t)=>{let e=(0,yt.moment)(t.created).valueOf();e>0&&Pa&&Pa.btime(n,e);let r=(0,yt.moment)(t.updated).valueOf()/1e3;try{K.utimesSync(n,r,r)}catch(o){}},Tu=n=>n["resource-attributes"]&&n["resource-attributes"].timestamp?(0,yt.moment)(n["resource-attributes"].timestamp):(0,yt.moment)();var Au=(n,t,e)=>{let i=n.lastIndexOf(t);return i<0?n:n.substring(0,i)+e+n.substring(i+t.length)};var Ae={mdPath:"",resourcePath:""},Nr=249,ku=(n,t)=>La(n,t).replace(/\s/g,"_"),Nu=(n,t)=>{if(n.length<=11)throw Error("FATAL: note folder directory path exceeds the OS limitation. Please pick a destination closer to the root folder.");return`${$a()}${q.sep}${n}`.length{let r=fe.getInstance().getNoteIdNameMapByNoteTitle(Rn(n.title))[0]||{uniqueEnd:xn(6)};if(t.length<=11)throw Error("FATAL: note folder directory path exceeds the OS limitation. Please pick a destination closer to the root folder.");return`${e.slice(0,Nr-11)}_${r.uniqueEnd}.md`},x0=(n,t,e)=>{let i=au(n,t,e),r=`${n}${q.sep}${Rn(i)}`;return r.lengthx0(Ae.mdPath,n,"md");var w0=n=>{K.existsSync(n)&&(K.rmSync?K.rmSync(n,{recursive:!0,force:!0}):K.rmdirSync(n,{recursive:!0})),K.mkdirSync(n)},Ru=n=>{let t=`${q.sep}${B.resourcesDir}`;return B.haveGlobalResources?`..${t}`:B.haveEnexLevelResources?`.${t}`:`.${t}${q.sep}${ku(Ae.mdPath,n)}.resources`},Ma=n=>B.haveGlobalResources?q.resolve(Ae.resourcePath,"..","..",B.resourcesDir):B.haveEnexLevelResources?Ae.resourcePath:`${Ae.resourcePath}${q.sep}${ku(Ae.mdPath,n)}.resources`,kr=new Map,Ou=n=>{let t=Ma(n);kr.has(t)||kr.set(t,0);let e=kr.get(t)||0;(B.haveEnexLevelResources||B.haveGlobalResources)&&e>=1||(w0(t),kr.set(t,e+1))},Du=n=>{let t=n.split("@@@"),e=t.pop();return e||(e=n),{notebookName:e,notebookFolderNames:t}},Cu=n=>{if(!(n instanceof Me))throw new Error("Evernote import currently only works on desktop");let{notebookName:t}=Du(n.basename);return{fullpath:Au(n.fullpath,n.basename,t||n.basename),basename:t}},Iu=(n,t)=>{let{notebookFolderNames:e}=Du(n.basename);return K.mkdirSync(q.join(t.outputDir,...e),{recursive:!0}),[t.outputDir,...e].join(t.pathSeparator)},Fu=(n,t)=>{let e=n.basename;Pu(e,t)},Lu=(n,t)=>{let e=n.basename;Pu(e,t)},Pu=(n,t)=>{let e=q.isAbsolute(t.outputDir)?t.outputDir:`${process.cwd()}${q.sep}${t.outputDir}`;Ae.mdPath=`${e}${q.sep}`,Ae.resourcePath=`${e}${q.sep}${t.resourcesDir}`,t.skipEnexFileNameFromOutputPath||(Ae.mdPath=`${Ae.mdPath}${n}`,Ae.resourcePath=`${e}${q.sep}${n}${q.sep}${t.resourcesDir}`),K.mkdirSync(Ae.mdPath,{recursive:!0}),!t.haveEnexLevelResources&&!t.haveGlobalResources&&K.mkdirSync(Ae.resourcePath,{recursive:!0}),console.log(`path ${Ae.mdPath} created`)},$a=()=>Ae.mdPath;var Mu=n=>!!n.resource,$u=n=>n["note-attributes"]&&(n["note-attributes"]["source-application"]==="webclipper.evernote"||n["note-attributes"].source==="web.clip7");var Ba={};Se(Ba,{CONTENT_PLACEHOLDER:()=>v0,END_BLOCK:()=>_0,START_BLOCK:()=>E0});var v0="{content}",E0="{content-block}",_0="{end-content-block}";var Pt=({template:n,check:t,startBlockPlaceholder:e,endBlockPlaceholder:i,valuePlaceholder:r,value:o})=>{if(o&&t())return n.replace(new RegExp(`${e}`,"g"),"").replace(new RegExp(`${i}`,"g"),"").replace(new RegExp(`${r}`,"g"),o);let a=`${e}([\\d\\D])(?:.|(\r +|\r| +))*?(?=${i})${i}`;return n.replace(new RegExp(a,"g"),"")};var Mt=(n,t,e,i)=>({template:n,check:t,startBlockPlaceholder:e.START_BLOCK,endBlockPlaceholder:e.END_BLOCK,valuePlaceholder:e.CONTENT_PLACEHOLDER,value:i});var Bu=(n,t,e)=>{let i=Mt(t,e,Ba,n.content);return Pt(i)};var gi={};Se(gi,{CONTENT_PLACEHOLDER:()=>T0,END_BLOCK:()=>k0,START_BLOCK:()=>A0});var T0="{tags}",A0="{tags-block}",k0="{end-tags-block}";var Uu=(n,t,e)=>{let i=Mt(t,e,gi,n.tags);return Pt(i)};var Ua={};Se(Ua,{CONTENT_PLACEHOLDER:()=>N0,END_BLOCK:()=>R0,START_BLOCK:()=>S0});var N0="{title}",S0="{title-block}",R0="{end-title-block}";var ju=(n,t,e)=>{let i=Mt(t,e,Ua,n.title);return Pt(i)};var rn={};Se(rn,{CONTENT_PLACEHOLDER:()=>O0,END_BLOCK:()=>C0,START_BLOCK:()=>D0});var O0="{created-at}",D0="{created-at-block}",C0="{end-created-at-block}";var Ee=(n,t,e)=>n.replace(new RegExp(`${t.CONTENT_PLACEHOLDER}`,"g"),e||"").replace(new RegExp(`${t.START_BLOCK}`,"g"),"").replace(new RegExp(`${t.END_BLOCK}`,"g"),"");var Hu=(n,t)=>Ee(t,rn,n.createdAt);var on={};Se(on,{CONTENT_PLACEHOLDER:()=>I0,END_BLOCK:()=>L0,START_BLOCK:()=>F0});var I0="{updated-at}",F0="{updated-at-block}",L0="{end-updated-at-block}";var qu=(n,t)=>Ee(t,on,n.updatedAt);var an={};Se(an,{CONTENT_PLACEHOLDER:()=>P0,END_BLOCK:()=>$0,START_BLOCK:()=>M0});var P0="{source-url}",M0="{source-url-block}",$0="{end-source-url-block}";var Wu=(n,t)=>Ee(t,an,n.sourceUrl);var sn={};Se(sn,{CONTENT_PLACEHOLDER:()=>B0,END_BLOCK:()=>j0,START_BLOCK:()=>U0});var B0="{location}",U0="{location-block}",j0="{end-location-block}";var Zu=(n,t)=>Ee(t,sn,n.location);var ln={};Se(ln,{CONTENT_PLACEHOLDER:()=>H0,END_BLOCK:()=>W0,START_BLOCK:()=>q0});var H0="{notebook}",q0="{notebook-block}",W0="{end-notebook-block}";var Yu=(n,t)=>Ee(t,ln,n.notebookName);var On={};Se(On,{CONTENT_PLACEHOLDER:()=>Z0,END_BLOCK:()=>z0,START_BLOCK:()=>Y0});var Z0="{reminder-time}",Y0="{reminder-time-block}",z0="{end-reminder-time-block}";var zu=(n,t)=>Ee(t,On,n.reminderTime);var Dn={};Se(Dn,{CONTENT_PLACEHOLDER:()=>G0,END_BLOCK:()=>K0,START_BLOCK:()=>V0});var G0="{reminder-order}",V0="{reminder-order-block}",K0="{end-reminder-order-block}";var Gu=(n,t)=>Ee(t,Dn,n.reminderOrder);var Cn={};Se(Cn,{CONTENT_PLACEHOLDER:()=>X0,END_BLOCK:()=>Q0,START_BLOCK:()=>J0});var X0="{reminder-done-time}",J0="{reminder-done-time-block}",Q0="{end-reminder-done-time-block}";var Vu=(n,t)=>Ee(t,Cn,n.reminderDoneTime);var yi={};Se(yi,{CONTENT_PLACEHOLDER:()=>ey,END_BLOCK:()=>ny,START_BLOCK:()=>ty});var ey="{tags-yaml-list}",ty="{tags-yaml-list-block}",ny="{end-tags-yaml-list-block}";var Ku=(n,t,e)=>{let i;n.tags&&(i=` +`+n.tags.split(" ").map(o=>` - ${o.replace(/^#/,"")}`).join(` +`));let r=Mt(t,e,yi,i);return Pt(r)};var ja="{metadata-block}",Ha="{end-metadata-block}";var Xu=`\r? +?`;var de=(n,t)=>n.replace(new RegExp(`${t.START_BLOCK}(?<=${t.START_BLOCK})(.*)(?=${t.END_BLOCK})${t.END_BLOCK}${Xu}`,"g"),"");var Ju=n=>de(n,rn);var Qu=n=>de(n,on);var ef=n=>de(n,an);var tf=n=>de(n,ln);var nf=n=>de(n,sn);var Sr={};Se(Sr,{CONTENT_PLACEHOLDER:()=>ry,END_BLOCK:()=>ay,START_BLOCK:()=>oy});var ry="{link-to-original}",oy="{link-to-original-block}",ay="{end-link-to-original-block}";var rf=n=>de(n,Sr);var of=n=>de(n,On);var af=n=>de(n,Cn);var sf=n=>de(n,Dn);var lf=(n,t)=>{let e=t.currentTemplate;return e=ju(n,e,()=>n.title),e=Uu(n,e,()=>!t.skipTags),e=Ku(n,e,()=>!t.skipTags),e=Bu(n,e,()=>n.content),e=rf(e),e=!t.skipCreationTime&&n.createdAt?Hu(n,e):Ju(e),e=!t.skipUpdateTime&&n.updatedAt?qu(n,e):Qu(e),e=!t.skipSourceUrl&&n.sourceUrl?Wu(n,e):ef(e),e=!t.skipLocation&&n.location?Zu(n,e):nf(e),e=t.isNotebookNameNeeded&&n.notebookName?Yu(n,e):tf(e),e=!t.skipReminderTime&&n.reminderTime?zu(n,e):of(e),e=!t.skipReminderOrder&&n.reminderOrder?Gu(n,e):sf(e),e=!t.skipReminderDoneTime&&n.reminderDoneTime?Vu(n,e):af(e),e=e.replace(ja,"").replace(Ha,""),e};var cf=(n,t,e)=>{try{K.writeFileSync(n,t),Ar(n,e)}catch(i){throw console.error("Cannot write file ",i),i}};var pf=(n,t)=>{let e=Su(t);fe.getInstance().setCurrentNotePath(e),cf(e,n,t),console.log(`Note saved to ${e}`)};var mf=n=>{let t=new RegExp(`\\${q.sep}`,"g"),e=Ru(n).replace(t,B.pathSeparator||"/");return{absoluteResourceWorkDir:Ma(n),relativeResourceWorkDir:e}},hf=n=>{let t={},e=n.content,{absoluteResourceWorkDir:i,relativeResourceWorkDir:r}=mf(n);if(console.log(`relative resource work dir: ${r}`),console.log(`absolute resource work dir: ${i}`),Ou(n),Array.isArray(n.resource))for(let o of n.resource)t={...t,...ff(i,o)};else t={...t,...ff(i,n.resource)};for(let o of Object.keys(t))e=sy(e,t,o,r);return e},sy=(n,t,e,i)=>{let r=`${i}${B.pathSeparator}${t[e].fileName.replace(/ /g," ")}`;console.log(`mediaReference src ${r} added`);let o,a=`]*)hash="${e}".([^>]*)>`,s=new RegExp(a,"g"),l=n.match(s),c=l&&l.length>0&&l[0].split("type=");if(c&&c.length>1&&c[1].startsWith('"image')){let p=l[0].match(/width="(\w+)"/),m=p?` width="${p[1]}"`:"",y=l[0].match(/height="(\w+)"/),w=y?` height="${y[1]}"`:"";o=n.replace(s,`${t[e].fileName}`)}else o=n.replace(s,`${t[e].fileName}`);return o},ff=(n,t)=>{let e={},i=t.data.$text,r=Tu(t),a=ou(n,t).fileName,s=`${n}${q.sep}${a}`;console.log(t),console.log(i);let l=Buffer.from(i,"base64");K.writeFileSync(s,l);let c=r.valueOf()/1e3;try{K.utimesSync(s,c,c)}catch(p){}if(t.recognition&&a){let p=t.recognition.match(/[a-f0-9]{32}/);console.log(`resource ${a} added with hash ${p}`),e[p]={fileName:a,alreadyUsed:!1}}else{let p=df.default.createHash("md5");p.update(l);let m=p.digest("hex");e[m]={fileName:a,alreadyUsed:!1}}return e},gf=(n,t)=>{if(t.indexOf('src="data:')<0)return t;let{absoluteResourceWorkDir:e,relativeResourceWorkDir:i}=mf(n);return K.mkdirSync(e,{recursive:!0}),t.replace(/src="data:([^;,]*)(;base64)?,([^"]*)"/g,(r,o,a,s)=>{let l=ly(o,a===";base64",s,e,n);return`src="${`${i}${B.pathSeparator}${l}`}"`})},ly=(n,t,e,i,r)=>{let o="embedded",a=cy(n)||".dat",s=hi(i,o),l=s<1?`${o}.${a}`:`${o}.${s}.${a}`,c=`${i}${q.sep}${l}`;return t||(e=decodeURIComponent(e)),K.writeFileSync(c,e,t?"base64":void 0),Ar(c,r),console.log(`data url resource ${l} added`),l},cy=n=>n.split("/").pop().split("+")[0];var yf=(n,t)=>{let e=new Date;fe.getInstance().setCurrentNoteName(n.title),Array.isArray(n.content)&&(n.content=n.content.join(""));let r={title:n.title,content:n.content,htmlContent:n.content,originalContent:n.content};console.log(`Converting for note "${r.title}" started at ${e}...`);try{Mu(n)&&(r.htmlContent=hf(n)),r.htmlContent=gf(n,r.htmlContent),r={...r,...vu(B,r)},r={...r,...Eu(n,t)},r={...r,..._u(n)};let o=lf(r,B);pf(o,n)}catch(o){throw console.error(`Failed to convert note: ${r.title}`,o),o}finally{let o=new Date,a=(o.getTime()-e.getTime())/1e3;console.log(`Conversion for note "${r.title}" finished at ${o}. Took ${a} seconds`)}};var wf=require("obsidian");var bf=n=>n.taskstatus==="open"?_r:Tr;var py="\u{1F53C}",uy="\u{1F53D}",fy="\u{1F4C5}",dy="\u23F3",vf=(n,t)=>{let e=bf(n),i=n.title?` ${n.title}`:"",r=B.obsidianTaskTag!==""?` ${B.obsidianTaskTag}`:"",o=n.duedate&&!isNaN(n.duedate.getTime())?` ${fy} ${xf(n.duedate)}`:"",a=n.reminderdate?` ${dy} ${xf(n.reminderdate)}`:"",s=n.taskflag?` ${py}`:` ${uy}`;return`${e}${r}${i}${o}${a}${s}`},xf=n=>(0,wf.moment)(n).format("YYYY-MM-DD").toString();var Wa=(n,t,e)=>{let i=K.readdirSync(n);return t=t||[],i.forEach(r=>{K.statSync(`${n}${q.sep}${r}`).isDirectory()?t=Wa(`${n}${q.sep}${r}`,t,e):(e&&q.extname(r)==`.${e}`||!e)&&t.push(q.join(n,"/",r))}),t};var Ef=(n,t)=>{let i=fe.getInstance().getAllNoteIdNameMap(),r=Object.entries(i);if(r.length===0)return;console.log("About to update links...");let o=[];for(let a of t)Wa(a,o,"");for(let a of t){console.log(`Notebook: ${a}`);let l=K.readdirSync(a).filter(c=>q.extname(c).toLowerCase()===".md");console.log(`${l.length} files to check for links`);for(let c of l){let p=q.join(a,c),m=K.readFileSync(p,"utf8"),y=m;for(let[w,E]of r){let d=E.uniqueEnd,f=E.title;o.find(D=>D.includes(d))&&(f=Nu(f,d));let g=E.notebookName,v=n.urlEncodeFileNamesAndLinks?encodeURI(f):f,_=v;g&&!a.endsWith(g)&&(_=`${g}/${v}`);let A=new RegExp(Sn(w),"g");y=y.replace(A,_)}m!==y&&(console.log(`File written: ${p}`),K.writeFileSync(p,y))}}console.log("Link update complete.")};var _f=n=>cn(rn,n);var Tf=n=>cn(sn,n),Af=n=>cn(ln,n);var kf=n=>cn(an,n),Nf=n=>cn(gi,n)||cn(yi,n);var Sf=n=>cn(on,n),cn=(n,t)=>t.includes(n.START_BLOCK)&&t.includes(n.CONTENT_PLACEHOLDER)&&t.includes(n.END_BLOCK);var Rf=`--- +`,my=`{source-url-block}source: {source-url}{end-source-url-block} +`,hy=`{tags-yaml-list-block} +tags: {tags-yaml-list} + +{end-tags-yaml-list-block}`,gy=`{content-block}{content}{end-content-block} +`,Of=Rf+hy+my+Rf+gy;var Cy=Bf.Platform.isDesktopApp?$f():null,Dr={enexSources:[],currentTemplate:"",outputDir:"./mdNotes",isMetadataNeeded:!1,isNotebookNameNeeded:!1,isZettelkastenNeeded:!1,useZettelIdAsFilename:!1,plainTextNotesOnly:!1,skipWebClips:!1,useHashTags:!0,nestedTags:{separatorInEN:"_",replaceSeparatorWith:"/",replaceSpaceWith:"-"},obsidianTaskTag:"",urlEncodeFileNamesAndLinks:!1,sanitizeResourceNameSpaces:!1,replacementChar:"_",pathSeparator:"/",resourcesDir:"_resources",turndownOptions:{headingStyle:"atx"}},Iy="@@@",B={...Dr};function Fy(n){return n==null?n:JSON.parse(JSON.stringify(n))}function Uf(n,...t){for(let e of t)for(let i of Object.keys(e)){let r=e[i],o=n[i];!Array.isArray(r)&&typeof r=="object"&&!Array.isArray(o)&&typeof o=="object"?n[i]=Uf({},o,r):n[i]=Fy(r)}return n}var Ly=n=>{B=Uf({},Dr,n);let t=B.templateFile?K.readFileSync(B.templateFile,"utf-8"):Of;t=B.currentTemplate?B.currentTemplate:t,B.skipCreationTime=!_f(t),B.skipLocation=!Tf(t),B.skipSourceUrl=!kf(t),B.skipTags=!Nf(t),B.skipUpdateTime=!Sf(t),B.isNotebookNameNeeded=Af(t),B.currentTemplate=t,console.log(`Current config is: ${JSON.stringify(B,null,4)}`),console.log(`Path separator:${q.sep}`)},Py=async(n,t,e)=>{if(!(t instanceof Me))throw new Error("Evernote import currently only works on desktop");let i=fe.getInstance();e.status("Processing "+t.name),console.log(`Getting stream from ${t}`);let r=t.createReadStream(),o={},a=i.getCurrentNotebookName();return new Promise((s,l)=>{let c=y=>(e.reportFailed(i.getCurrentNotebookFullpath(),y),l(y)),p=Cy(r),m=null;p.on("tag:note-attributes",y=>{m=y}),p.on("tag:note",y=>{if(e.isCancelled()){r.close();return}if(n.skipWebClips&&$u(y))e.reportSkipped(y.title);else{e.status("Importing note "+y.title),m&&(y["note-attributes"]=m);try{yf(y,a),e.reportNoteSuccess(a+"/"+y.title)}catch(E){return e.reportFailed(y.title||t,E),s()}}m=null;let w=i.getCurrentNotePath();if(w)for(let E of Object.keys(o)){let d=`${E}`,f=K.readFileSync(w,"utf8"),g=new Map([...o[E]].sort()),v=f.replace(d,[...g.values()].join(` +`));K.writeFileSync(w,v)}}),p.on("tag:task",y=>{let w=zp(y);o[w.taskgroupnotelevelid]||(o[w.taskgroupnotelevelid]=new Map),o[w.taskgroupnotelevelid].set(w.sortweight,vf(w,a))}),p.on("end",s),p.on("error",c),r.on("error",c)})};async function jf(n,t){Ly(n);let e=[],i=n.outputDir;for(let r of n.enexSources){if(t.isCancelled())return;let o,a=fe.getInstance();r.basename.includes(Iy)?(n.outputDir=Iu(r,n),o=Cu(r),Lu(o,n),a.setCurrentNotebookName(o.basename),a.setCurrentNotebookFullpath(o.fullpath)):(Fu(r,n),a.setCurrentNotebookName(r.basename),a.setCurrentNotebookFullpath(r.fullpath)),await Py(n,r,t),e.push($a()),n.outputDir=i}t.isCancelled()||await Ef(n,e)}var Cr=class extends ce{init(){this.addFileChooserSetting("Evernote",["enex"],!0),this.addOutputLocationSetting("Evernote")}async import(t){let{files:e}=this;if(e.length===0){new xi.Notice("Please pick at least one file to import.");return}let i=await this.getOutputFolder();if(!i){new xi.Notice("Please select a location to export to.");return}let{app:r}=this,o=r.vault.adapter;if(!(o instanceof xi.FileSystemAdapter))return;let a={...Dr,enexSources:e,outputDir:q.join(o.getBasePath(),i.path)};await jf(a,t)}};var ke=require("obsidian");var Ir=class extends ce{init(){this.addFileChooserSetting("HTML",["htm","html"],!0),this.addAttachmentSizeLimit(0),this.addMinimumImageSize(65),this.addOutputLocationSetting("HTML import")}addAttachmentSizeLimit(e){this.attachmentSizeLimit=e*10**6,new ke.Setting(this.modal.contentEl).setName("Attachment size limit (MB)").setDesc("Set 0 to disable.").addText(i=>i.then(({inputEl:r})=>{r.type="number",r.step="0.1"}).setValue(e.toString()).onChange(r=>{let o=["+","-"].includes(r)?0:Number(r);if(Number.isNaN(o)||o<0){i.setValue((this.attachmentSizeLimit/10**6).toString());return}this.attachmentSizeLimit=o*10**6}))}addMinimumImageSize(e){this.minimumImageSize=e,new ke.Setting(this.modal.contentEl).setName("Minimum image size (px)").setDesc("Set 0 to disable.").addText(i=>i.then(({inputEl:r})=>r.type="number").setValue(e.toString()).onChange(r=>{let o=["+","-"].includes(r)?0:Number(r);if(!Number.isInteger(o)||o<0){i.setValue(this.minimumImageSize.toString());return}this.minimumImageSize=o}))}async import(e){let{files:i}=this;if(i.length===0){new ke.Notice("Please pick at least one file to import.");return}let r=await this.getOutputFolder();if(!r){new ke.Notice("Please select a location to export to.");return}let o=new Map;e.reportProgress(0,i.length);for(let c=0;c{s=c});a.onCleanCache(async()=>{for(let[c,{file:p,tFile:m}]of o){if(e.isCancelled())break;try{let y=await this.app.vault.cachedRead(m),w=a.computeMetadataAsync?await a.computeMetadataAsync(Oo(y)):a.getFileCache(m);if(!w)continue;let E=[];if(w.links)for(let{link:d,position:f,displayText:g}of w.links){let{path:v,subpath:_}=(0,ke.parseLinktext)(d),A;if(Jn){let T=new URL(encodeURI(v),c);T.hash="",T.search="",A=decodeURIComponent(T.href)}else A=re(v.replace(/#/gu,"%23")).name;let D=o.get(A);if(D){let T=this.app.fileManager.generateMarkdownLink(D.tFile,m.path,_,g);E.push({from:f.start.offset,to:f.end.offset,text:T})}}E.sort((d,f)=>f.from-d.from);for(let d of E)y=y.substring(0,d.from)+d.text+y.substring(d.to);await this.vault.modify(m,y)}catch(y){e.reportFailed(p.fullpath,y)}}s()}),await l}async processFile(e,i,r){e.status("Processing "+r.name);try{let o=await r.readText(),a=ft(o);My(a);let s=r instanceof Me?Jn.pathToFileURL(r.filepath):void 0,l=new Map,c=new Map;for(let y of a.findAll("img, audio, video")){if(e.isCancelled())return;let w=y.getAttribute("src");if(w)try{let E=new URL(w.startsWith("//")?`https:${w}`:w,s),d=E.href,f=l.get(d);l.has(d)||(e.status("Downloading attachment for "+r.name),f=await this.downloadAttachment(i,y,E),l.set(d,f),f?(c.set(f.path,f),e.reportAttachmentSuccess(f.name)):e.reportSkipped(w)),f&&(y.setAttribute("src",f.path.replace(/ /g,"%20")),y instanceof HTMLImageElement||y.replaceWith(createEl("img",{attr:{src:f.path.replace(/ /g,"%20"),alt:y.getAttr("alt")}})))}catch(E){e.reportFailed(w,E)}}let p=(0,ke.htmlToMarkdown)(a),m=await this.saveAsMarkdownFile(i,r.basename,p);if(!Object.isEmpty(l)){let{metadataCache:y}=this.app,w;y.computeMetadataAsync?w=await y.computeMetadataAsync(Oo(p)):w=await new Promise(d=>{let f=y.getFileCache(m);if(f)return d(f);let g=y.on("changed",(v,_,A)=>{v===m&&(y.offref(g),d(A))})});let E=[];if(w.embeds){for(let{link:d,position:f}of w.embeds)if(c.has(d)){let g=this.app.fileManager.generateMarkdownLink(c.get(d),m.path);E.push({from:f.start.offset,to:f.end.offset,text:g})}}E.sort((d,f)=>f.from-d.from);for(let d of E)p=p.substring(0,d.from)+d.text+p.substring(d.to);await this.vault.modify(m,p)}return e.reportNoteSuccess(r.fullpath),m}catch(o){e.reportFailed(r.fullpath,o)}return null}async downloadAttachment(e,i,r){let o="",a="",s;switch(r.protocol){case"file:":let p=Jn.fileURLToPath(r.href);({basename:o,extension:a}=re(p)),s=Zi(await Pe.readFile(p));break;case"https:":case"http:":let m=await By(r),y=$y(r);o=y.basename,s=m.data,a=vr(m.mime)||y.extension;break;default:throw new Error(r.href)}if(!this.filterAttachmentSize(s)||i instanceof HTMLImageElement&&!await this.filterImageSize(s))return null;if(!a)if(i instanceof HTMLImageElement)a="png";else if(i instanceof HTMLAudioElement)a="mp3";else if(i instanceof HTMLVideoElement)a="mp4";else return null;let l=await this.createFolders((0,ke.normalizePath)(e.path+"/Attachments")),c=await this.vault.getAvailablePath(l.getParentPrefix()+o,a);return await this.vault.createBinary(c,s)}filterAttachmentSize(e){let{byteLength:i}=e;return!this.attachmentSizeLimit||i<=this.attachmentSizeLimit}async filterImageSize(e){if(!this.minimumImageSize)return!0;let i;try{i=await Uy(e)}catch(a){return!0}let{height:r,width:o}=i;return o>=this.minimumImageSize&&r>=this.minimumImageSize}};function Hf(n,t){let e=n.getAttribute(t);e!==null&&n.setAttribute(t,e.replace(/ /gu,"%20"))}function My(n){n.findAll("a").forEach(t=>Hf(t,"href")),n.findAll("audio, img, video").forEach(t=>Hf(t,"src"))}function $y(n){return re((0,ke.normalizePath)(decodeURIComponent(n.pathname)))}async function By(n){var e,i;try{let r=await fetch(n,{mode:"cors",referrerPolicy:"no-referrer"});if(r.ok)return{data:await r.arrayBuffer(),mime:(e=r.headers.get("Content-Type"))!=null?e:""}}catch(r){}let t=await(0,ke.requestUrl)(n.href);return{data:t.arrayBuffer,mime:(i=t.headers["Content-Type"])!=null?i:""}}async function Uy(n){let t=new Image,e=URL.createObjectURL(new Blob([n]));try{return await new Promise((i,r)=>{t.addEventListener("error",({error:o})=>r(o),{once:!0,passive:!0}),t.addEventListener("load",()=>i({height:t.naturalHeight,width:t.naturalWidth}),{once:!0,passive:!0}),t.src=e})}finally{URL.revokeObjectURL(e)}}var Fn=require("obsidian");var jy=/(#[^ ^#]*)/g,Hy=/[\\:*?<>\"|!@#$%^&()+=\`\'~;,.]/g;function za(n){let t=n.replace(Hy,"");return t=t.split(" ").join("-"),isNaN(t[0])||(t="_"+t),t}function Ga(n){return n.replace(jy,t=>"#"+za(t))}function qf(n){return n.charAt(0).toUpperCase()+n.slice(1).toLowerCase()}var qy=["zip"],Wy=["json"],Zy=["html","txt"],Fr=class extends ce{constructor(){super(...arguments);this.importArchived=!1;this.importTrashed=!1}init(){this.addFileChooserSetting("Notes & attachments",[...qy,...Wy,...Ln],!0),this.importArchivedSetting=new Fn.Setting(this.modal.contentEl).setName("Import archived notes").setDesc("If imported, files archived in Google Keep will be tagged as archived.").addToggle(e=>{e.setValue(this.importArchived),e.onChange(async i=>{this.importArchived=i})}),this.importTrashedSetting=new Fn.Setting(this.modal.contentEl).setName("Import deleted notes").setDesc("If imported, files deleted in Google Keep will be tagged as deleted. Deleted notes will only exist in your Google export if deleted recently.").addToggle(e=>{e.setValue(this.importTrashed),e.onChange(async i=>{this.importTrashed=i})}),this.addOutputLocationSetting("Google Keep")}async import(e){let{files:i}=this;if(i.length===0){new Fn.Notice("Please pick at least one file to import.");return}let r=await this.getOutputFolder();if(!r){new Fn.Notice("Please select a location to import your files to.");return}let o=`${r.path}/Assets`;for(let a of i){if(e.isCancelled())return;await this.handleFile(a,r,o,e)}}async handleFile(e,i,r,o){let{fullpath:a,name:s,extension:l}=e;o.status("Processing "+s);try{l==="zip"?await this.readZipEntries(e,i,r,o):l==="json"?await this.importKeepNote(e,i,o):Ln.contains(l)?(o.status("Importing attachment "+s),await this.copyFile(e,r),o.reportAttachmentSuccess(a)):!(e instanceof fi)&&!Zy.contains(l)&&o.reportSkipped(a)}catch(c){o.reportFailed(a,c)}}async readZipEntries(e,i,r,o){await gt(e,async(a,s)=>{for(let l of s){if(o.isCancelled())return;await this.handleFile(l,i,r,o)}})}async importKeepNote(e,i,r){let{fullpath:o,basename:a}=e;r.status("Importing note "+a);let s=await e.readText(),l=JSON.parse(s);if(!l||!l.userEditedTimestampUsec||!l.createdTimestampUsec){r.reportFailed(o,"Invalid Google Keep JSON");return}if(l.isArchived&&!this.importArchived){r.reportSkipped(o,"Archived note");return}if(l.isTrashed&&!this.importTrashed){r.reportSkipped(o,"Deleted note");return}await this.convertKeepJson(l,i,a),r.reportNoteSuccess(o)}async copyFile(e,i){let r=await this.createFolders(i),o=await e.read();await this.vault.createBinary(`${r.path}/${e.name}`,o)}async convertKeepJson(e,i,r){let o=[],a={};if(e.title){let c=e.title.split(` +`).filter(p=>p!==r);c.length>0&&(a.aliases=c)}let s=[];if(e.color&&e.color!=="DEFAULT"){let c=e.color.toLowerCase();c=qf(c),s.push(`Keep/Color/${c}`)}if(e.isPinned&&s.push("Keep/Pinned"),e.attachments&&s.push("Keep/Attachment"),e.isArchived&&s.push("Keep/Archived"),e.isTrashed&&s.push("Keep/Deleted"),e.labels)for(let c of e.labels)s.push(`Keep/Label/${c.name}`);if(s.length>0&&(a.tags=s.map(c=>za(c))),o.push(Yi(a)),e.textContent&&(o.push(` +`),o.push(Ga(e.textContent))),e.listContent){let c=[];for(let p of e.listContent){if(!p.text)continue;let m=`- [${p.isChecked?"X":" "}] ${p.text}`;c.push(Ga(m))}o.push(` + +`),o.push(c.join(` +`))}if(e.attachments){o.push(` + +`);for(let c of e.attachments)o.push(`![[${c.filePath}]]`)}let l=await this.saveAsMarkdownFile(i,r,o.join(""));await this.vault.append(l,"",{ctime:e.createdTimestampUsec/1e3,mtime:e.userEditedTimestampUsec/1e3})}};var xt=require("obsidian");var Va=require("obsidian");function Wf({info:n,vault:t,targetFolderPath:e,parentsInSubfolders:i}){let r=t.getAllLoadedFiles(),o=new Set,a=new Set(r.map(s=>s.name));i&&zy(n),Yy({info:n,pathDuplicateChecks:o,titleDuplicateChecks:a}),Gy({info:n,loadedFiles:r,titleDuplicateChecks:a,targetFolderPath:e})}function Yy({info:n,pathDuplicateChecks:t,titleDuplicateChecks:e}){for(let i of Object.values(n.idsToFileInfo)){let r=n.getPathForFile(i);if(t.has(`${r}${i.title}`)){let o=2;for(i.title=i.title+" "+o;t.has(`${r}${i.title}`);)o++,i.title=`${i.title.replace(/ \d+$/,"")} ${o}`}e.has(i.title+".md")&&(i.fullLinkPathNeeded=!0),t.add(`${r}${i.title}`),e.add(i.title+".md")}}function zy(n){let t=new Set(Object.values(n.idsToFileInfo).map(e=>e.parentIds).concat(Object.values(n.pathsToAttachmentInfo).map(e=>e.parentIds)).map(e=>e.length>0?e[e.length-1]:""));for(let e of Object.keys(n.idsToFileInfo))t.has(e)&&n.idsToFileInfo[e].parentIds.push(e)}function Gy({info:n,loadedFiles:t,titleDuplicateChecks:e,targetFolderPath:i}){var l;let r=new Set(t.filter(c=>!c.path.endsWith(".md")).map(c=>c.path)),o=n.attachmentPath,a=/^\.\//.test(o),s=(l=o.match(/\.\/(.*)/))==null?void 0:l[1];for(let c of Object.values(n.pathsToAttachmentInfo)){e.has(c.nameWithExtension)&&(c.fullLinkPathNeeded=!0);let p="";if(a?p=(0,Va.normalizePath)(`${i}${n.getPathForFile(c)}${s!=null?s:""}`):p=(0,Va.normalizePath)(o+"/"),p.endsWith("/")||(p+="/"),r.has(p+c.nameWithExtension)){let m=2,{basename:y,extension:w}=re(c.path);for(;r.has(`${p}${y} ${m}.${w}`);)m++;c.nameWithExtension=`${y} ${m}.${w}`}c.targetParentFolder=p,r.add(p+c.nameWithExtension),e.add(c.nameWithExtension)}}var Pn=require("obsidian");var Zf=n=>n.replace(/-/g,"").replace(/[ -]?[a-z0-9]{32}(\.|$)/,"$1"),bt=n=>{var t;return(t=n.replace(/-/g,"").match(/([a-z0-9]{32})(\?|\.|$)/))==null?void 0:t[1]},Ka=n=>{let{parent:t}=re(n);return t.split("/").map(e=>bt(e)).filter(e=>e)};function Xa(n){return n.hour()===0&&n.minute()===0?n.format("YYYY-MM-DD"):n.format("YYYY-MM-DDTHH:mm")}function Yf(n){return n.replace(/^(\.\.\/)+/,"")}function zf(n){let t=/#\d*?(?:[-_/a-z]|[^\x00-\x7F])/gi;if(!t.test(n))return n;let e=n.split(` +`);for(let i=0;i tbody");if(s){let m=Vf(n,s);nd(n,m,!1),m1(s);for(let y of Array.from(s.rows)){let w=Vy(y);w&&(w.title=="Tags"&&(w.title="tags",typeof w.content=="string"?w.content=w.content.replace(/ /g,"-"):w.content instanceof Array&&(w.content=w.content.map(E=>E.replace(/ /g,"-")))),a[w.title]=w.content)}}o1(r,["strong","em","mark","del"]),n1(r),Xy(r),u1(r),e1(r),p1(r),ad(r),ed(r,"div.indented"),ed(r,"details"),f1(r),td(r,"ul"),td(r,"ol"),d1(r),c1(r),i1(r);let l=(0,Pn.htmlToMarkdown)(r.innerHTML);n.singleLineBreaks&&(l=l.replace(/\n\n(?!>)/g,` +`)),l=zf(l),l=Ky(l);let c=(p=i.find("p[class*=page-description]"))==null?void 0:p.textContent;return c&&(l=c+` + +`+l),Yi(a)+l}var Gf={checkbox:["checkbox"],date:["created_time","last_edited_time","date"],list:["file","multi_select","relation"],number:["number","auto_increment_id"],text:["email","person","phone_number","text","url","status","select","formula","rollup","last_edited_by","created_by"]};function Vy(n){var a,s,l,c,p,m;let t=(a=n.className.match(/property-row-(.*)/))==null?void 0:a[1];if(!t)throw new Error("property type not found for: "+n);let e=(0,Pn.htmlToMarkdown)((s=n.cells[0].textContent)!=null?s:""),i=n.cells[1],r=Object.keys(Gf).find(y=>Gf[y].includes(t));if(!r)throw new Error("type not found for: "+i);let o="";switch(r){case"checkbox":o=i.innerHTML.includes("checkbox-on");break;case"number":if(o=Number(i.textContent),isNaN(o))return;break;case"date":ad(i);let y=i.getElementsByTagName("time");if(y.length===0)o="";else if(y.length===1)o=Xa((0,Pn.moment)((l=y.item(0))==null?void 0:l.textContent));else{let d=[];for(let f=0;fc.includes(a));s&&a.endsWith(".html")?e.push({type:"relation",a:o,id:s}):l?e.push({type:"attachment",a:o,path:l}):s&&a.startsWith("#")&&((r=o.parentElement)!=null&&r.classList.contains("table_of_contents-item"))&&e.push({type:"toc-item",a:o,id:s})}return e}function Ky(n){let t=/\[\[[^\]]*(\\\\)\|[^\]]*\]\]/,e=n.match(new RegExp(t,"g"));return e==null||e.forEach(i=>{n=n.replace(i,i.replace(/\\\\\|/g,"\\|"))}),n}function Xy(n){r1(n,"style"),rd(n,"span.notion-text-equation-token");let t=n.ownerDocument,e=n.findAll("figure.equation");for(let r of e){let o=r.find("annotation");if(!o)continue;let a=t.createElement("div");a.className="annotation",a.appendText(`$$${Kf(o.textContent)}$$`),r.replaceWith(a)}let i=n.findAll("span.notion-text-equation-token");for(let r of i){let o=r.find("annotation");o&&r.replaceWith(`$${Kf(o.textContent,!0)}$`)}}function Kf(n,t=!1){var i;let e=new RegExp(/^(?:\s|\\\\|\\\s)*(.*?)[\s\\]*$/,"s");return(i=n==null?void 0:n.replace(e,"$1").replace(/[\r\n]+/g,t?" ":` +`))!=null?i:""}function Jy(n){var e;let t=(e=n.match(/^[^\.\?\!\n]*[\.\?\!]?/))==null?void 0:e[0];return t!=null?t:""}function Qy(n){var t;return!!/callout|bookmark/.test((t=n.getAttribute("class"))!=null?t:"")}function e1(n){var e;let t=n.ownerDocument;for(let i of n.findAll("figure.callout")){let r=(e=i.lastElementChild)==null?void 0:e.childNodes;if(!r)continue;let o=t.createElement("blockquote");o.append(...Array.from(r)),t1(o),i.replaceWith(o)}}function t1(n){var o,a,s;let t=n.firstChild,e=(o=t==null?void 0:t.nodeName)!=null?o:"",i=n.ownerDocument.createElement("p"),r="";e=="#text"?r=(a=t==null?void 0:t.textContent)!=null?a:"":e=="P"?r=t.innerHTML:["EM","STRONG","DEL","MARK"].includes(e)?r=t.outerHTML:n.prepend(i),r=r.replace(/
    /g,"<br>"),i.innerHTML=`[!important] ${r}`,(s=n.firstChild)==null||s.replaceWith(i)}function n1(n){var t,e,i;for(let r of n.findAll("a.bookmark.source")){let o=r.getAttribute("href"),a=(t=r.find("div.bookmark-title"))==null?void 0:t.textContent,s=Jy((i=(e=r.find("div.bookmark-description"))==null?void 0:e.textContent)!=null?i:""),l=`> [!info] ${a} +> ${s} +> [${o}](${o}) +`;r.nextElementSibling&&Qy(r.nextElementSibling)&&(l+=` +`),r.replaceWith(l)}}function i1(n){var t,e,i;for(let r of n.findAll("span[class=user]"))r.innerText=(t=r.textContent)!=null?t:"";for(let r of n.findAll("td div[class*=checkbox]")){let o=createSpan();o.setText(r.hasClass("checkbox-on")?"X":""),r.replaceWith(o)}for(let r of n.findAll("table span[class*=selected-value]"))((e=r.parentElement)==null?void 0:e.lastElementChild)!==r&&r.setText(r.textContent+", ");for(let r of n.findAll("a[href]"))if(!/^(https?:\/\/|www\.)/.test(r.href)){let o=createSpan();o.setText((i=r.textContent)!=null?i:""),r.replaceWith(o)}}function r1(n,t){for(let e of n.findAll(t))e.remove()}function o1(n,t){for(let e of t)a1(n,e);for(let e of t)s1(n,e);for(let e of t)rd(n,e);for(let e of t)l1(n,e)}function a1(n,t){for(let e of n.findAll(t)){if(!e.parentElement||e.parentElement.tagName===t.toUpperCase())continue;let i=e.find(t);for(;i;)Ja(i),i=e.find(t)}}function s1(n,t){let e=n.findAll(t);if(!e)return;let i=new RegExp(`( *)<${t}>`,"g");for(let r of e){if(!r||!r.parentElement)continue;let o=r.parentElement,a=o==null?void 0:o.innerHTML;o.innerHTML=a==null?void 0:a.replace(i,"$1")}}function rd(n,t){let e=n.findAll(t);if(e)for(let i of e){let r=i.previousSibling;(r==null?void 0:r.nodeName)=="BR"&&(r==null||r.remove())}}function l1(n,t){let e=n.innerHTML,i=e.match(new RegExp(`<${t}>.*?`,"sg"));if(i){for(let r of i.filter(o=>o.includes("
    ")))e=e.replace(r,r.split("
    ").join(`
    <${t}>`));n.innerHTML=e}}function Xf(n){var t;return Number((t=n==null?void 0:n.classList[1].slice(-1))!=null?t:-1)}function od(n,t){let e=Xf(n),i=Xf(t);if(e>i&&t.childElementCount==1){let r=createEl("ul");r.append(n),t.append(r)}else if(e>i&&t.childElementCount==2){let r=t.lastElementChild;r==null||r.append(n)}else if(e==i){let r=t.parentElement;r==null||r.append(n)}else e)/g,"
    ");for(let t of n.findAll("code"))for(let e of t.findAll("br"))e.replaceWith(` +`)}function u1(n){var t;for(let e of n.findAll("link"))e.innerText=(t=e.textContent)!=null?t:""}function ad(n){var t,e;for(let i of n.findAll("time"))i.textContent=(e=(t=i.textContent)==null?void 0:t.replace(/@/g,""))!=null?e:""}var Qf={"1.875em":"h1","1.5em":"h2","1.25em":"h3"};function f1(n){var e;let t=n.findAll("summary");for(let i of t){let r=i.getAttribute("style");if(r){for(let o of Object.keys(Qf))if(r.includes(o)){i.replaceWith(createEl(Qf[o],{text:(e=i.textContent)!=null?e:""}));break}}}}function ed(n,t){let e=n.findAll(t);for(let i of e)Ja(i)}function td(n,t){for(let e of n.findAll(t)){let i=[],r=[],o=e;for(;o.tagName===t.toUpperCase();){i.push(o);for(let s=0;ss.remove())}}function d1(n){for(let t of n.findAll(".checkbox.checkbox-on"))t.replaceWith("[x] ");for(let t of n.findAll(".checkbox.checkbox-off"))t.replaceWith("[ ] ")}function m1(n){var e;let t=n.findAll("a");if(t.length===0)return n;for(let i of t){let r=createSpan();r.setText((e=i.getAttribute("href"))!=null?e:""),i.replaceWith(r)}}function nd(n,t,e){var i,r,o;for(let a of t){let s=createSpan(),l="";switch(a.type){case"relation":let c=n.idsToFileInfo[a.id];if(c){let y=a.a.closest("table");l=`[[${c.fullLinkPathNeeded?`${n.getPathForFile(c)}${c.title}${y?"\\":""}|${c.title}`:c.title}]]`}else{console.warn("missing relation data for id: "+a.id);let{basename:y}=re(decodeURI((i=a.a.getAttribute("href"))!=null?i:""));l=`[[${Zf(y)}]]`}break;case"attachment":let p=n.pathsToAttachmentInfo[a.path];if(!p){console.warn("missing attachment data for: "+a.path);continue}l=`${e?"!":""}[[${p.fullLinkPathNeeded?p.targetParentFolder+p.nameWithExtension+"|"+p.nameWithExtension:p.nameWithExtension}]]`;break;case"toc-item":l=(r=a.a.textContent)!=null?r:"";let m=(o=l.endsWith("]"))!=null?o:!1;l=`[[#${l+(m?" ":"")}]]`}s.setText(l),a.a.replaceWith(s)}}var Lr=class{constructor(t,e){this.idsToFileInfo={};this.pathsToAttachmentInfo={};this.attachmentPath=t,this.singleLineBreaks=e}getPathForFile(t){let{idsToFileInfo:e}=this,i=t.path.split("/");return t.parentIds.map(r=>{var o,a,s;return(s=(o=e[r])==null?void 0:o.title)!=null?s:(a=i.find(l=>l.contains(r)))==null?void 0:a.replace(` ${r}`,"")}).filter(r=>r).map(r=>r.replace(/[\. ]+$/,"")).join("/")+"/"}};async function ld(n,t){var i,r;let{filepath:e}=t;if(t.extension==="html"){let o=await t.readText(),a=ft(o),l=a.find("body").children,c;for(let E=0;Ee.setValue(this.parentsInSubfolders).onChange(i=>this.parentsInSubfolders=i)),new xt.Setting(this.modal.contentEl).setName("Single line breaks").setDesc("Separate Notion blocks with only one line break (default is 2).").addToggle(e=>e.setValue(this.singleLineBreaks).onChange(i=>{this.singleLineBreaks=i}))}async import(e){var w;let{vault:i,parentsInSubfolders:r,files:o}=this;if(o.length===0){new xt.Notice("Please pick at least one file to import.");return}let a=await this.getOutputFolder();if(!a){new xt.Notice("Please select a location to export to.");return}let s=a.path;s=(0,xt.normalizePath)(s),s!=null&&s.endsWith("/")||(s+="/");let l=new Lr((w=i.getConfig("attachmentFolderPath"))!=null?w:"",this.singleLineBreaks);e.status("Looking for files to import");let c=0;if(await Qa(e,o,async E=>{try{await ld(l,E),c=Object.keys(l.idsToFileInfo).length+Object.keys(l.pathsToAttachmentInfo).length,e.reportProgress(0,c)}catch(d){e.reportSkipped(E.fullpath)}}),e.isCancelled())return;e.status("Resolving links and de-duplicating files"),Wf({vault:i,info:l,targetFolderPath:s,parentsInSubfolders:r});let p=new Set([s]),m=Object.values(l.idsToFileInfo).map(E=>s+l.getPathForFile(E)).concat(Object.values(l.pathsToAttachmentInfo).map(E=>E.targetParentFolder));for(let E of m)p.add(E);for(let E of p){if(e.isCancelled())return;await this.createFolders(E)}let y=0;e.status("Starting import"),await Qa(e,o,async E=>{y++,e.reportProgress(y,c);try{if(E.extension==="html"){let d=bt(E.name);if(!d)throw new Error("ids not found for "+E.filepath);let f=l.idsToFileInfo[d];if(!f)throw new Error("file info not found for "+E.filepath);e.status(`Importing note ${f.title}`);let g=await id(l,E),v={};f.ctime&&(v.ctime=f.ctime.getTime(),v.mtime=f.ctime.getTime()),f.mtime&&(v.mtime=f.mtime.getTime());let _=`${s}${l.getPathForFile(f)}${f.title}.md`;await i.create(_,g,v),e.reportNoteSuccess(E.fullpath)}else{let d=l.pathsToAttachmentInfo[E.filepath];if(!d)throw new Error("attachment info not found for "+E.filepath);e.status(`Importing attachment ${E.name}`);let f=await E.read();await i.createBinary(`${d.targetParentFolder}${d.nameWithExtension}`,f),e.reportAttachmentSuccess(E.fullpath)}}catch(d){if(d.message==="page body was not found"){e.reportSkipped(E.fullpath,"page body was not found");return}e.reportFailed(E.fullpath,d)}})}};async function Qa(n,t,e){for(let i of t){if(n.isCancelled())return;try{await gt(i,async(r,o)=>{for(let a of o){if(n.isCancelled())return;if(a.extension==="md"&&bt(a.name))throw new xt.Notice("Notion Markdown export detected. Please export Notion data to HTML instead."),n.cancel(),new Error("Notion importer uses only HTML exports. Please use the correct format.");if(!(a.extension==="csv"&&bt(a.name))&&a.name!=="index.html")if(a.extension==="zip"&&a.parent==="")try{await Qa(n,[a],e)}catch(s){n.reportFailed(a.fullpath)}else await e(a)}})}catch(r){n.reportFailed(i.fullpath)}}}var be=require("obsidian");var es="onenote-importer-refresh-token",cd="66553851-08fa-44f2-8bb1-1436f121a73d",pd=["user.read","notes.read"],y1=/<(object|iframe)([^>]*)\/>/g,ud=/(<\/p>)\s*(]*>)|\n \n/g,ts=5,b1=new RegExp(/^data:[\w\d]+\/[\w\d]+;base64,/),Mr=class extends ce{constructor(){super(...arguments);this.importPreviouslyImported=!1;this.importIncompatibleAttachments=!1;this.selectedIds=[];this.notebooks=[];this.graphData={state:xn(32),accessToken:""};this.attachmentDownloadPauseCounter=0;this.rememberMe=!1}async init(){this.addOutputLocationSetting("OneNote"),new be.Setting(this.modal.contentEl).setName("Import incompatible attachments").setDesc("Imports incompatible attachments which cannot be embedded in Obsidian, such as .exe files.").addToggle(r=>r.setValue(!1).onChange(o=>this.importIncompatibleAttachments=o)),new be.Setting(this.modal.contentEl).setName("Skip previously imported").setDesc("If enabled, notes imported previously by this plugin will be skipped.").addToggle(r=>r.setValue(!0).onChange(o=>this.importPreviouslyImported=!o));let e=!1;if(this.retrieveRefreshToken())try{await this.updateAccessToken(),e=!0}catch(r){}this.microsoftAccountSetting=new be.Setting(this.modal.contentEl).setName("Sign in with your Microsoft account").setDesc("You need to sign in to import your OneNote data.").addButton(r=>r.setCta().setButtonText("Sign in").onClick(()=>{this.registerAuthCallback(this.authenticateUser.bind(this));let o=new URLSearchParams({client_id:cd,scope:"offline_access "+pd.join(" "),response_type:"code",redirect_uri:$r,response_mode:"query",state:this.graphData.state});window.open(`https://login.microsoftonline.com/common/oauth2/v2.0/authorize?${o.toString()}`)})),this.microsoftAccountSetting.settingEl.toggle(!e);let i=new be.Setting(this.modal.contentEl).setName("Remember me").setDesc("If checked, you will be automatically logged in for subsequent imports.").addToggle(r=>{r.onChange(o=>{this.rememberMe=o,o&&this.refreshToken?this.storeRefreshToken(this.refreshToken):this.clearStoredRefreshToken()})});i.settingEl.toggle(!e),this.switchUserSetting=new be.Setting(this.modal.contentEl).addButton(r=>r.setCta().setButtonText("Switch user").onClick(()=>{this.microsoftAccountSetting.settingEl.show(),i.settingEl.show(),this.clearStoredRefreshToken(),this.switchUserSetting.settingEl.hide(),this.contentArea.empty()})),this.loadingArea=this.modal.contentEl.createDiv({text:"Loading notebooks..."}),this.loadingArea.hide(),this.contentArea=this.modal.contentEl.createDiv(),this.contentArea.hide(),e?(await this.setSwitchUser(),await this.showSectionPickerUI()):this.switchUserSetting.settingEl.hide()}async authenticateUser(e){try{if(e.state!==this.graphData.state)throw new Error(`An incorrect state was returned. +Expected state: ${this.graphData.state} +Returned state: ${e.state}`);await this.updateAccessToken(e.code),await this.setSwitchUser(),await this.showSectionPickerUI()}catch(i){console.error("An error occurred while we were trying to sign you in. Error details: ",i),this.modal.contentEl.createEl("div",{text:"An error occurred while trying to sign you in."}).createEl("details",{text:i}).createEl("summary",{text:"Click here to show error details"})}}async setSwitchUser(){let e=await this.fetchResource("https://graph.microsoft.com/v1.0/me","json");this.switchUserSetting.setDesc(`Signed in as ${e.displayName} (${e.mail}). If that's not the correct account, sign in again.`),this.switchUserSetting.settingEl.show(),this.microsoftAccountSetting.settingEl.hide()}async updateAccessToken(e){let i=new URLSearchParams({client_id:cd,scope:"offline_access "+pd.join(" "),redirect_uri:$r});if(e)i.set("code",e),i.set("grant_type","authorization_code");else{let o=this.retrieveRefreshToken();if(!o)throw new Error("Missing token required for authentication. Please try logging in again.");i.set("refresh_token",o),i.set("grant_type","refresh_token")}let r=await(0,be.requestUrl)({method:"POST",url:"https://login.microsoftonline.com/common/oauth2/v2.0/token",contentType:"application/x-www-form-urlencoded",body:i.toString()}).json;if(!r.access_token)throw new Error(`Unexpected data was returned instead of an access token. Error details: ${r}`);r.refresh_token&&this.storeRefreshToken(r.refresh_token),this.graphData.accessToken=r.access_token}storeRefreshToken(e){this.refreshToken=e,this.rememberMe&&localStorage.setItem(es,e)}retrieveRefreshToken(){return this.refreshToken?this.refreshToken:localStorage.getItem(es)}clearStoredRefreshToken(){localStorage.removeItem(es)}async showSectionPickerUI(){var o,a;this.loadingArea.show(),this.selectedIds=[];let e="https://graph.microsoft.com/v1.0/me/onenote/notebooks",i=new URLSearchParams({$expand:"sections($select=id,displayName),sectionGroups($expand=sections,sectionGroups)",$select:"id,displayName,lastModifiedDateTime",$orderby:"lastModifiedDateTime DESC"}),r=`${e}?${i.toString()}`;try{this.notebooks=(await this.fetchResource(r,"json")).value,this.contentArea.empty(),this.contentArea.createEl("h4",{text:"Choose data to import"});for(let s of this.notebooks){if(((o=s.sectionGroups)==null?void 0:o.length)!==0)for(let c of s.sectionGroups)await this.fetchNestedSectionGroups(c);let l=this.contentArea.createDiv();new be.Setting(l).setName(s.displayName).setDesc(`Last edited on: ${be.moment.utc(s.lastModifiedDateTime).format("Do MMMM YYYY")}. Contains ${(a=s.sections)==null?void 0:a.length} sections.`).addButton(c=>c.setCta().setButtonText("Select all").onClick(()=>{l.querySelectorAll('input[type="checkbox"]:not(:checked)').forEach(p=>p.click())})),this.renderHierarchy(s,l)}}catch(s){this.showContentAreaErrorMessage()}this.loadingArea.hide(),this.contentArea.show()}async fetchNestedSectionGroups(e){if(e.sectionGroups=(await this.fetchResource(e.sectionGroupsUrl+"?$expand=sectionGroups($expand=sections),sections","json")).value,e.sectionGroups)for(let i=0;i{if(l.checked)this.selectedIds.push(o.id);else{let c=this.selectedIds.findIndex(p=>p===o.id);c!==-1&&this.selectedIds.splice(c,1)}})}}}showContentAreaErrorMessage(){this.contentArea.empty(),this.contentArea.createEl("p",{text:"Microsoft OneNote has limited how fast notes can be imported. Please try again in 30 minutes to continue importing."}),this.contentArea.show(),this.loadingArea.hide()}async import(e){let i=new Set,r=await this.modal.plugin.loadData();r.importers.onenote||(r.importers.onenote={previouslyImportedIDs:[]});for(let c of r.importers.onenote.previouslyImportedIDs)i.add(c);if(!await this.getOutputFolder()){new be.Notice("Please select a location to export to.");return}if(!this.graphData.accessToken){new be.Notice("Please sign in to your Microsoft Account.");return}e.status("Starting OneNote import");let a=0,s=0,l=0;for(let c of this.selectedIds){e.reportProgress(s,a);let p=`https://graph.microsoft.com/v1.0/me/onenote/sections/${c}/pages`,m=new URLSearchParams({$select:"id,title,createdDateTime,lastModifiedDateTime,level,order,contentUrl",$orderby:"order",pagelevel:"true"}),y=`${p}?${m.toString()}`,w=null;try{w=(await this.fetchResource(y,"json")).value}catch(E){e.status("Microsoft OneNote has limited how fast notes can be imported. Please try again in 30 minutes to continue importing.");return}if(w){a+=w.length,this.insertPagesToSection(w,c),e.reportProgress(s,a);for(let E=0;E5){e.status("Microsoft OneNote has limited how fast notes can be imported. Please try again in 30 minutes to continue importing.");return}}e.reportProgress(s,a)}}}}insertPagesToSection(e,i,r){if(!r){for(let o of this.notebooks)this.insertPagesToSection(e,i,o);return}if(r.sectionGroups){let o=r.sectionGroups;for(let a of o)this.insertPagesToSection(e,i,a)}if(r.sections){let o=r;for(let a of o.sections)a.id===i&&(a.pages=e)}}async processFile(e,i,r){var o,a;try{let s=this.convertFormat(i),l=await this.getOutputFolder(),c=this.getEntityPathNoParent(r.id,l.name),p;await this.vault.adapter.exists(c)?p=this.vault.getAbstractFileByPath(c):p=await this.vault.createFolder(c);let m=this.convertTags(ft(s.html)),y=await this.getAllAttachments(e,m.replace(ud,"
    ")),w=this.styledElementToHTML(y);w=this.convertInternalLinks(w),w=this.convertDrawings(w);let E=(0,be.htmlToMarkdown)(w).trim().replace(ud," "),d=await this.saveAsMarkdownFile(p,r.title,E),f=r!=null&&r.lastModifiedDateTime?Date.parse(r.lastModifiedDateTime):null,g=r!=null&&r.createdDateTime?Date.parse(r.createdDateTime):null,v={ctime:(o=g!=null?g:f)!=null?o:Date.now(),mtime:(a=f!=null?f:g)!=null?a:Date.now()};await this.vault.append(d,"",v),e.reportNoteSuccess(r.title)}catch(s){e.reportFailed(r.title,s)}}convertFormat(e){let i={html:"",inkml:""},r=e.split(` +`,1)[0];e.slice(0,-2);let o=e.split(r);if(o.shift(),o.length===2)for(let a of o){let l=a.split(` +`).find(p=>p.includes("Content-Type")).split(";")[0].split(":")[1].trim(),c=a.split(` +`).slice(2).join(` +`).trim();l==="text/html"?i.html=c:l==="application/inkml+xml"&&(i.inkml=c)}else throw new Error("The input string is incorrect and may be missing data. Inputted string: "+e);return i}convertTags(e){var r,o;let i=Array.from(e.querySelectorAll("[data-tag]"));for(let a of i)if((r=a.getAttribute("data-tag"))!=null&&r.contains("to-do")){let l=a.getAttribute("data-tag")==="to-do:completed"?"[x]":"[ ]";a.innerHTML=`- ${l} ${a.innerHTML}`}else{let s=(o=a.getAttribute("data-tag"))==null?void 0:o.split(",");s==null||s.forEach(l=>{a.innerHTML=a.innerHTML+` #${l.replace(":","-")} `})}return e.outerHTML}convertInternalLinks(e){let i=e.findAll("a");for(let r of i)if(r.href.startsWith("onenote:")){let o=r.href.indexOf("#")+1,a=r.href.indexOf("&",o);r.href=r.href.slice(o,a)}return e}getEntityPathNoParent(e,i){for(let r of this.notebooks){let o=this.getEntityPath(e,`${i}/${r.displayName}`,r);if(o)return o}return null}getEntityPath(e,i,r){let o=null;if("sectionGroups"in r&&r.sectionGroups){let a=this.searchSectionGroups(e,i,r.sectionGroups);a!==null&&(o=a)}if("sections"in r&&r.sections){let a=this.searchSectionGroups(e,i,r.sections);a!==null&&(o=a)}if("pages"in r&&r.pages){let a=this.searchPages(e,i,r);a!==null&&(o=a)}return o}searchPages(e,i,r){var a;let o=null;for(let s=0;s=0;p--)if(r.pages[p].level===l.level-1){o+="/"+r.pages[p].title;break}}break}}return o}searchSectionGroups(e,i,r){let o=null;for(let a of r)if(a.id===e)o=`${i}/${a.displayName}`;else{let s=this.getEntityPath(e,`${i}/${a.displayName}`,a);if(s){o=s;break}}return o}async getAllAttachments(e,i){var l,c,p,m;let r=ft(i.replace(y1,"<$1$2>")),o=r.findAll("object"),a=r.findAll("img"),s=r.findAll("iframe");for(let y of o){for(;y.firstChild;)(l=y.parentNode)==null||l.insertBefore(y.firstChild,y.nextSibling);let w=y.getAttribute("data-attachment").split("."),E=w[w.length-1];if(!(!Ln.contains(E)&&!this.importIncompatibleAttachments)){let d=y.getAttribute("data-attachment"),f=y.getAttribute("data"),g=await this.fetchAttachment(e,d,f),v=document.createElement("p");v.innerText=`![[${g}]]`,(c=y.parentNode)==null||c.replaceChild(v,y)}}for(let y=0;y{e.status("Pausing attachment download to avoid rate limiting."),this.attachmentDownloadPauseCounter=0,setTimeout(o,3e3)}),this.attachmentDownloadPauseCounter++,e.status("Downloading attachment "+i);try{let o=await this.getAvailablePathForAttachment(i,[]),a=await this.fetchResource(r,"file");return await this.app.vault.createBinary(o,a),e.reportAttachmentSuccess(i),o}catch(o){e.reportFailed(i),console.error(o)}}styledElementToHTML(e){let i={"font-weight:bold":"b","font-style:italic":"i","text-decoration:underline":"u","text-decoration:line-through":"s","background-color":"mark"};e.findAll("cite").forEach(l=>l.innerHTML="> "+l.innerHTML+"
    ");let o=!1,a=document.createElement("pre");return e.querySelectorAll("*").forEach(l=>{let c=l.getAttribute("style")||"",p=Object.keys(i).find(m=>c.includes(m));if(c!=null&&c.contains("font-family:Consolas"))o?a.innerHTML=a.innerHTML.slice(0,-3)+l.innerHTML+"\n```":(o=!0,l.replaceWith(a),a.innerHTML="```\n"+l.innerHTML+"\n```");else if(l.nodeName==="BR"&&o)a.innerHTML=a.innerHTML.slice(0,-3)+"\n```";else if(p){let m=i[p],y=document.createElement(m);y.innerHTML=l.innerHTML,l.replaceWith(y)}}),e}convertDrawings(e){var o;let i=document.createTreeWalker(e,NodeFilter.SHOW_COMMENT),r=!1;for(;i.nextNode();)((o=i.currentNode.nodeValue)==null?void 0:o.trim())==="InkNode is not supported"&&(r=!0);if(r){let a=document.createTextNode("> [!caution] This page contained a drawing which was not converted.");e.insertBefore(a,e.firstChild)}else for(let a=0;asetTimeout(p,c)),this.fetchResource(e,i,r+1);throw new Error("Exceeded maximum retry attempts")}}return a}catch(o){throw console.error(`An internal error occurred while trying to fetch '${e}'. Error details: `,o),o}}};var Ut=require("obsidian");var fd=require("obsidian"),x1=/[\?<>\\:\*\|"]/g,w1=/[\x00-\x1f\x80-\x9f]/g,v1=/^\.+$/,E1=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,_1=/[\. ]+$/,T1=/^\./,A1=/\[/g,k1=/\]/g;function Br(n){return n.replace(x1,"").replace(w1,"").replace(v1,"").replace(E1,"").replace(_1,"").replace(A1,"").replace(k1,"").replace(T1,"")}function Ur(n,t){let e="MMMM Do, YYYY",i=(0,fd.moment)(n,e);return i.format(e)!==n?n:i.isValid()?i.format(t):n}var jr=require("obsidian"),N1=["POMO","word-count","date","slider","encrypt","TaoOfRoam","orphans","count","character-count","comment-button","query","streak","attr-table","mentions","search","roam/render","calc"],S1=new RegExp(`\\{\\{(\\[\\[)?(${N1.join("|")})(\\]\\])?.*?\\}\\}(\\})?`,"g"),R1=/{{pdf:|{{\[\[pdf|{{\[\[audio|{{audio:|{{video:|{{\[\[video/,dd=/https:\/\/firebasestorage(.*?)\?alt(.*?)\)/,O1=/https:\/\/firebasestorage(.*?)\?alt(.*?)/,D1=/(?<=\(\()\b(.*?)\b(?=\)\))/g,Hr=class extends ce{constructor(){super(...arguments);this.downloadAttachments=!1;this.fileDateYAML=!1;this.titleYAML=!1;this.newestTimestamp=0;this.oldestTimestamp=0}init(){this.addFileChooserSetting("Roam (.json)",["json"]),this.addOutputLocationSetting("Roam"),this.userDNPFormat=this.getUserDNPFormat(),new Ut.Setting(this.modal.contentEl).setName("Import settings").setHeading(),new Ut.Setting(this.modal.contentEl).setName("Download all attachments").setDesc("If enabled, all attachments uploaded to Roam will be downloaded to your attachments folder.").addToggle(e=>{e.setValue(this.downloadAttachments),e.onChange(async i=>{this.downloadAttachments=i})}),new Ut.Setting(this.modal.contentEl).setName("Add YAML created/update date").setDesc("If enabled, notes will have the create-time and edit-time from Roam added as properties.").addToggle(e=>{e.setValue(this.fileDateYAML),e.onChange(async i=>{this.fileDateYAML=i})}),new Ut.Setting(this.modal.contentEl).setName("Add YAML title").setDesc("If enabled, notes will have the full title added as a property (regardless of illegal file name characters).").addToggle(e=>{e.setValue(this.titleYAML),e.onChange(async i=>{this.titleYAML=i})})}async import(e){this.progress=e;let{files:i}=this;if(i.length===0){new Ut.Notice("Please pick at least one file to import.");return}let r=await this.getOutputFolder();if(!r){new Ut.Notice("Please select a location to export to.");return}for(let o of i){if(e.isCancelled())return;let a=Ze(o.basename),s=`${r.path}/${a}`,l=`${r.path}/${a}/Attachments`;await this.createFolders(s),await this.createFolders(l);let c=await o.readText(),p=JSON.parse(c),[m,y]=this.preprocess(p),w=new Map;for(let g in p){let v=p[g],_=Ur(Br(v.title),this.userDNPFormat).trim();if(_===""){e.reportFailed(v.uid,"Title is empty"),console.error("Cannot import data with an empty title",v);continue}let A=`${s}/${_}.md`,D=this.titleYAML?v.title:"",T=0,k=0;if(this.fileDateYAML){let C=v["create-time"],O=v["edit-time"];typeof C=="number"&&(T=C),typeof O=="number"&&(k=O)}let b=await this.jsonToMarkdown(s,l,v,"",!1,D,T,k);w.set(A,b)}for(let g of y.values()){let v=await this.roamMarkupScrubber(s,l,g.blockString,!0),_=await this.extractAndProcessBlockReferences(w,m,s,v),A=`${s}/${g.pageName}.md`,D=w.get(A);if(D){let T=D.split(` +`),k=T.findIndex(b=>b.contains("* "+v));k!==-1&&(T[k]=T[k].replace(v,_)),w.set(A,T.join(` +`))}}let{vault:E}=this,d=w.size,f=1;for(let[g,v]of w.entries()){if(e.isCancelled())return;try{let{parent:_}=re(g);await this.createFolders(_);let A=E.getAbstractFileByPath(g);A?await E.modify(A,v):await E.create(g,v),e.reportNoteSuccess(g),e.reportProgress(f,d)}catch(_){console.error("Error saving Markdown to file:",g,_),e.reportFailed(g)}f++}}}getUserDNPFormat(){let e=this.app.internalPlugins.getPluginById("daily-notes").instance;return e?e.options.format||"YYYY-MM-DD":(console.log('Daily note plugin is not enabled. Roam import defaulting to "YYYY-MM-DD" format.'),"YYYY-MM-DD")}preprocess(e){let i=new Map,r=new Map,o=this.userDNPFormat;function a(s,l){if(l.uid){let c=new Date(s.uid);if(!isNaN(c.getTime())){let y=Ur(s.title,o);s.title=y}let p={pageName:Br(s.title),blockString:l.string};/.*?(\(\(.*?\)\)).*?/g.test(l.string)&&r.set(l.uid,p),i.set(l.uid,p)}if(l.children)for(let c of l.children)a(s,c)}for(let s of e)if(s.children)for(let l of s.children)a(s,l);return[i,r]}async roamMarkupScrubber(e,i,r,o=!1){return r=r.replace(S1,""),r.substring(0,8)==":hiccup "&&r.includes(":hr")?"---":(r=r.replace(/\[\[(.*?)\]\]/g,(a,s)=>`[[${Ur(Br(s),this.userDNPFormat)}]]`),r=r.replace(/\[\[(.*\/.*)\]\]/g,(a,s)=>`[[${e}/${s}|${s}]]`),r=r.replace(/\[.+?\]\((\(.+?\)\))\)/g,"$1"),r=r.replace(/\[(.+?)\]\(\[\[(.+?)\]\]\)/g,"[[$2|$1]]"),r=r.replace(/\[\[>\]\]/g,">"),r=r.replace(/{{TODO}}|{{\[\[TODO\]\]}}/g,"[ ]"),r=r.replace(/{{DONE}}|{{\[\[DONE\]\]}}/g,"[x]"),r=r.replace("::",":"),r=r.replace(/{{.*?\bvideo\b.*?(\bhttp.*?\byoutu.*?)}}/g,"![]($1)"),r=r.replace(/(https?:\/\/twitter\.com\/(?:#!\/)?\w+\/status\/\d+(?:\?[\w=&-]+)?)/g,"![]($1)"),r=r.replace(/\_\_(.+?)\_\_/g,"*$1*"),r=r.replace(/\^\^(.+?)\^\^/g,"==$1=="),r=r.replace(/{{\[{0,2}embed.*?(\(\(.*?\)\)).*?}}/g,"$1"),r=r.replace(/{{\[{0,2}embed.*?(\[\[.*?\]\]).*?}}/g,"$1"),this.downloadAttachments&&!o&&r.includes("firebasestorage")&&(r=await this.downloadFirebaseFile(r,i)),r)}async jsonToMarkdown(e,i,r,o="",a=!1,s,l,c){let p=[],m=[],y=r["edit-time"],w=r["create-time"];if(this.newestTimestampy?c:y,w!==void 0?l>10?this.oldestTimestamp=Math.min(l,w):this.oldestTimestamp=w:this.oldestTimestamp=l,"string"in r&&r.string){let E=r.heading?"#".repeat(r.heading)+" ":"",d=await this.roamMarkupScrubber(e,i,r.string);p.push(`${a?o+"* ":o}${E}${d}`)}if(r.children)for(let E of r.children)p.push(await this.jsonToMarkdown(e,i,E,o+" ",!0,"",this.oldestTimestamp,this.newestTimestamp));if((this.fileDateYAML||this.titleYAML)&&!a){let E=this.oldestTimestamp;if(m.push("---"),this.titleYAML&&m.push(`title: "${s}"`),this.fileDateYAML){let d="YYYY-MM-DD HH:mm:ss",f=this.newestTimestamp?(0,jr.moment)(this.newestTimestamp).format(d):(0,jr.moment)(new Date).format(d),g=E?(0,jr.moment)(E).format(d):f;m.push("created: "+g),m.push("updated: "+f)}m.push("---"),p.unshift(m.join(` +`))}return p.join(` +`)}async modifySourceBlockString(e,i,r,o){if(!i.blockString.endsWith("^"+o)){let a=`${r}/${i.pageName}.md`,s=e.get(a);if(s){let l=s.split(` +`),c=l.findIndex(p=>p.contains("* "+i.blockString));if(c!==-1){let p=i.blockString+" ^"+o;l[c]=l[c].replace(i.blockString,p),i.blockString=i.blockString+" ^"+o}e.set(a,l.join(` +`))}}}async extractAndProcessBlockReferences(e,i,r,o){let a=o.match(D1);if(!a)return o;let s=[];for(let p of a)try{let m=i.get(p);if(!m){s.push(p);continue}let y=m.blockString.replace(/\[\[|\]\]/g,""),w=`[[${r}/${m.pageName}#^${p}|${y}]]`;await this.modifySourceBlockString(e,m,r,p),s.push(w)}catch(m){s.push(p)}let l=0;return o.replace(/\(\(\b.*?\b\)\)/g,()=>s[l++])}async downloadFirebaseFile(e,i){let{progress:r,vault:o}=this,a="";try{let s,l;if(R1.test(e)?(s=e.match(/https:\/\/firebasestorage(.*?)\?alt(.*?)\}/),l=e.match(/{{.*https:\/\/firebasestorage.*?alt=media&.*?(?=\s|$)/)):dd.test(e)?(s=e.match(dd),l=e.match(/!\[.*https:\/\/firebasestorage.*?alt=media&.*?(?=\s|$)/)):(s=e.match(O1),l=e.match(/https:\/\/firebasestorage.*?alt=media&.*?(?=\s|$)/)),s&&l){let c="https://firebasestorage"+s[1],p=decodeURIComponent(c.split("/").last()||"");if(p){let d=p.split("/");d.length>1&&(d.splice(-1,1),this.createFolders(`${i}/${d.join("/")}`))}else{let d=Math.floor(Date.now()/1e3),f=c.slice(-5).match(/(.*?)\.(.+)/);if(!f)return r.reportSkipped(s[1],"Unexpected file extension"),e;p=`${d}.${f[2]}`}let m=`${i}/${p}`;if(o.getAbstractFileByPath(m))return r.reportSkipped(s[1],"File already exists"),e;a=s[0].slice(0,-1);let E=await(await fetch(a,{})).arrayBuffer();return await o.createBinary(m,E),r.reportAttachmentSuccess(a),e.replace(l[0],`![[${m}]]`)}}catch(s){console.error(s),r.reportFailed(a,s)}return e}};var jt=require("obsidian");var md=/!\[\]\(assets\/([^)]*)\)/g,qr=class extends ce{init(){jt.Platform.isMacOS||this.modal.contentEl.createEl("p",{text:"Due to platform limitations, only textpack and zip files can be imported from this device. Open your vault on a Mac to import textbundle files."});let e=jt.Platform.isMacOS?["textbundle","textpack","zip"]:["textpack","zip"];this.addFileChooserSetting("Textbundle",e,!0),this.addOutputLocationSetting("Textbundle")}async import(e){let{files:i}=this;if(i.length===0){new jt.Notice("Please pick at least one file to import.");return}let r=await this.getOutputFolder();if(!r){new jt.Notice("Please select a location to export to.");return}this.attachmentsFolderPath=await this.createFolders(`${r.path}/assets`);for(let o of i)if(o.extension==="textpack")await gt(o,async(a,s)=>{await this.process(e,o.name,s)});else if(o.extension==="zip")await gt(o,async(a,s)=>{let l=this.groupFilesByTextbundle(o.name,s);for(let c of l)await this.process(e,o.name,c)});else{let s=await new ut(`${o.toString()}/`).list();await this.process(e,o.name,s)}}groupFilesByTextbundle(e,i){let r={},o=e+"/",a=".textbundle";for(let s of i){if(!s.fullpath.startsWith(o)){console.log("Skipping",s.fullpath);continue}let l=s.fullpath.slice(o.length);if(l.startsWith("._")||l.startsWith("__MACOSX")){console.log("Skipping",s.fullpath);continue}let c=l.indexOf(a);if(c===-1){console.log("Skipping",s.fullpath);continue}let p=l.slice(0,c)+".textbundle";if(l.slice(c+a.length+1).startsWith("._")){console.log("Skipping",s.fullpath);continue}p in r?r[p].push(s):r[p]=[s]}return Object.values(r)}async process(e,i,r){let o=r.find(a=>a.name==="info.json");if(o){let a=await o.readText(),s=JSON.parse(a);if(s.hasOwnProperty("type")&&s.type!=="net.daringfireball.markdown"){e.reportSkipped(i,"The textbundle does not contain markdown");return}}for(let a of r)if(!a.name.startsWith("._"))try{if(a.type==="file"&&(a.extension==="md"||a.extension==="markdown")){let s="parent"in a?a.parent:i;s=s.replace(/.textbundle$/,"");let l=await a.readText();l.match(md)&&(l=l.replace(md,`![[${this.attachmentsFolderPath.path}/$1]]`));let c=(0,jt.normalizePath)(s),p=await this.getOutputFolder();await this.saveAsMarkdownFile(p,c,l),e.reportNoteSuccess(s)}else if(a.type==="file"&&a.fullpath.contains("assets/"))await this.importAsset(e,a);else if(a.type==="folder"){let{basename:s}=re(a.toString());if(s!=="assets")continue;let c=await new ut(`${a.toString()}/`).list();for(let p of c)await this.importAsset(e,p)}else a.name!=="info.json"&&e.reportSkipped(a.name,"the file is not a media or markdown file.")}catch(s){e.reportFailed(a.name,s)}}async importAsset(e,i){if(i.type==="folder"){e.reportSkipped(i.name);return}let r=`${this.attachmentsFolderPath.path}/${i.name}`;this.vault.getAbstractFileByPath(r)&&e.reportSkipped(i.name,"the file already exists.");let a=await i.read();await this.vault.createBinary(r,a),e.reportAttachmentSuccess(i.name)}};var $r="obsidian://importer-auth/",Ln=["png","webp","jpg","jpeg","gif","bmp","svg","mpg","m4a","webm","wav","ogv","3gp","mov","mp4","mkv","pdf"],Wr=class{constructor(t){this.notes=0;this.attachments=0;this.skipped=[];this.failed=[];this.maxFileNameLength=100;this.cancelled=!1;this.el=t,t.empty(),this.statusEl=t.createDiv("importer-status"),this.progressBarEl=t.createDiv("importer-progress-bar",e=>{this.progressBarInnerEl=e.createDiv("importer-progress-bar-inner")}),t.createDiv("importer-stats-container",e=>{e.createDiv("importer-stat mod-imported",i=>{this.importedCountEl=i.createDiv({cls:"importer-stat-count",text:"0"}),i.createDiv({cls:"importer-stat-name",text:"imported"})}),e.createDiv("importer-stat mod-attachments",i=>{this.attachmentCountEl=i.createDiv({cls:"importer-stat-count",text:"0"}),i.createDiv({cls:"importer-stat-name",text:"attachments"})}),e.createDiv("importer-stat mod-remaining",i=>{this.remainingCountEl=i.createDiv({cls:"importer-stat-count",text:"0"}),i.createDiv({cls:"importer-stat-name",text:"remaining"})}),e.createDiv("importer-stat mod-skipped",i=>{this.skippedCountEl=i.createDiv({cls:"importer-stat-count",text:"0"}),i.createDiv({cls:"importer-stat-name",text:"skipped"})}),e.createDiv("importer-stat mod-failed",i=>{this.failedCountEl=i.createDiv({cls:"importer-stat-count",text:"0"}),i.createDiv({cls:"importer-stat-name",text:"failed"})})}),this.importLogEl=t.createDiv("importer-log"),this.importLogEl.hide()}status(t){this.statusEl.setText(t.trim()+"...")}reportNoteSuccess(t){this.notes++,this.importedCountEl.setText(this.notes.toString())}reportAttachmentSuccess(t){this.attachments++,this.attachmentCountEl.setText(this.attachments.toString())}reportSkipped(t,e){let{importLogEl:i}=this;this.skipped.push(t),this.skippedCountEl.setText(this.skipped.length.toString()),console.log("Import skipped",t,e),this.importLogEl.createDiv("list-item",r=>{r.createSpan({cls:"importer-error",text:"Skipped: "}),r.createSpan({text:`"${Qn(t,this.maxFileNameLength)}"`+(e?` because ${Qn(String(e),this.maxFileNameLength)}`:"")})}),i.scrollTop=i.scrollHeight,i.show()}reportFailed(t,e){let{importLogEl:i}=this;this.failed.push(t),this.failedCountEl.setText(this.failed.length.toString()),console.log("Import failed",t,e),this.importLogEl.createDiv("list-item",r=>{r.createSpan({cls:"importer-error",text:"Failed: "}),r.createSpan({text:`"${Qn(t,this.maxFileNameLength)}"`+(e?` because ${Qn(String(e),this.maxFileNameLength)}`:"")})}),i.scrollTop=i.scrollHeight,i.show()}reportProgress(t,e){e<=0||(console.log("Current progress:",(100*t/e).toFixed(1)+"%"),this.remainingCountEl.setText((e-t).toString()),this.importedCountEl.setText(t.toString()),this.progressBarInnerEl.style.width=(100*t/e).toFixed(1)+"%")}cancel(){this.cancelled=!0,this.progressBarEl.hide(),this.statusEl.hide()}hideStatus(){this.progressBarEl.hide(),this.statusEl.hide()}isCancelled(){return this.cancelled}},C1={importers:{onenote:{previouslyImportedIDs:[]}}},Zr=class extends Ht.Plugin{async onload(){this.importers={"apple-notes":{name:"Apple Notes",optionText:"Apple Notes",importer:br,helpPermalink:"import/apple-notes"},bear:{name:"Bear",optionText:"Bear (.bear2bk)",importer:xr,helpPermalink:"import/bear"},evernote:{name:"Evernote",optionText:"Evernote (.enex)",importer:Cr,helpPermalink:"import/evernote"},keep:{name:"Google Keep",optionText:"Google Keep (.zip/.json)",importer:Fr,helpPermalink:"import/google-keep"},html:{name:"HTML files",optionText:"HTML (.html)",importer:Ir,helpPermalink:"import/html"},onenote:{name:"Microsoft OneNote",optionText:"Microsoft OneNote",importer:Mr,helpPermalink:"import/onenote"},notion:{name:"Notion",optionText:"Notion (.zip)",importer:Pr,helpPermalink:"import/notion",formatDescription:"Export your Notion workspace to HTML format."},"roam-json":{name:"Roam Research",optionText:"Roam Research (.json)",importer:Hr,helpPermalink:"import/roam",formatDescription:"Export your Roam Research workspace to JSON format."},textbundle:{name:"Textbundle files",optionText:"Textbundle (.textbundle, .textpack)",importer:qr,helpPermalink:"import/textbundle"}},this.addRibbonIcon("lucide-import","Open Importer",()=>{new wi(this.app,this).open()}),this.addCommand({id:"open-modal",name:"Open importer",callback:()=>{new wi(this.app,this).open()}}),this.registerObsidianProtocolHandler("importer-auth",e=>{if(this.authCallback){this.authCallback(e),this.authCallback=void 0;return}new Ht.Notice("Unexpected auth event. Please restart the auth process.")})}onunload(){}async loadData(){return Object.assign({},C1,await super.loadData())}async saveData(e){await super.saveData(e)}registerAuthCallback(e){this.authCallback=e}},wi=class extends Ht.Modal{constructor(e,i){super(e);this.current=null;this.plugin=i,this.titleEl.setText("Import data into Obsidian"),this.modalEl.addClass("mod-importer");let r=Object.keys(i.importers);r.length>0&&(this.selectedId=r[0],this.updateContent())}updateContent(){let{contentEl:e,selectedId:i}=this,r=this.plugin.importers,o=r[i];e.empty();let a=new DocumentFragment;if(a.createSpan({text:"The format to be imported."}),o.formatDescription&&(a.createEl("br"),a.createSpan({text:o.formatDescription})),a.createEl("br"),a.createEl("a",{text:`Learn more about importing from ${o.name}.`,href:`https://help.obsidian.md/${o.helpPermalink}`}),new Ht.Setting(e).setName("File format").setDesc(a).addDropdown(s=>{for(let l in r)r.hasOwnProperty(l)&&s.addOption(l,r[l].optionText);s.onChange(l=>{r.hasOwnProperty(l)&&(this.selectedId=l,this.updateContent())}),s.setValue(this.selectedId)}),i&&r.hasOwnProperty(i)){let s=this.importer=new o.importer(this.app,this);if(s.notAvailable)return;e.createDiv("modal-button-container",l=>{l.createEl("button",{cls:"mod-cta",text:"Import"},c=>{c.addEventListener("click",async()=>{this.current&&this.current.cancel(),e.empty();let p=e.createDiv(),m=this.current=new Wr(p),y=e.createDiv("modal-button-container"),w=y.createEl("button",{cls:"mod-danger",text:"Stop"},E=>{E.addEventListener("click",()=>{m.cancel(),w.detach()})});try{await s.import(m)}finally{this.current===m&&(this.current=null),y.createEl("button",{text:"Upload more"},E=>{E.addEventListener("click",()=>this.updateContent())}),w.detach(),y.createEl("button",{cls:"mod-cta",text:"Done"},E=>{E.addEventListener("click",()=>this.close())}),m.hideStatus()}})})})}}onClose(){let{contentEl:e,current:i}=this;e.empty(),i&&i.cancel()}}; +/*! Bundled license information: + +sax/lib/sax.js: + (*! http://mths.be/fromcodepoint v0.1.0 by @mathias *) +*/ + +/* nosourcemap */ \ No newline at end of file diff --git a/content/notes/.obsidian/plugins/obsidian-importer/manifest.json b/content/notes/.obsidian/plugins/obsidian-importer/manifest.json new file mode 100644 index 0000000..8f6bfe3 --- /dev/null +++ b/content/notes/.obsidian/plugins/obsidian-importer/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "obsidian-importer", + "name": "Importer", + "version": "1.6.19", + "minAppVersion": "0.15.0", + "description": "Import data from Notion, Evernote, Apple Notes, Microsoft OneNote, Google Keep, Bear, Roam, and HTML files.", + "author": "Obsidian", + "authorUrl": "https://obsidian.md", + "isDesktopOnly": false +} diff --git a/content/notes/.obsidian/plugins/obsidian-importer/styles.css b/content/notes/.obsidian/plugins/obsidian-importer/styles.css new file mode 100644 index 0000000..6f9b809 --- /dev/null +++ b/content/notes/.obsidian/plugins/obsidian-importer/styles.css @@ -0,0 +1,87 @@ +.modal.mod-importer { + max-height: var(--modal-height); + padding: var(--size-4-4) 0 0 0; + position: relative; + overflow: hidden; +} +.modal.mod-importer .modal-title { + padding: 0 var(--size-4-4); +} +.modal.mod-importer .modal-content { + overflow: auto; + padding: var(--size-4-4); + margin-bottom: calc(var(--input-height) + var(--size-4-8)); + border-top: var(--border-width) solid var(--background-modifier-border); +} +.modal.mod-importer .modal-button-container { + margin: 0 0 0 calc(var(--size-4-4) * -1); + padding: var(--size-4-4); + gap: var(--size-4-2); + position: absolute; + bottom: 0; + background-color: var(--background-primary); + border-top: var(--border-width) solid var(--background-modifier-border); + width: 100%; +} + +.importer-progress-bar { + width: 100%; + height: 8px; + background-color: var(--background-secondary); + overflow: hidden; + box-shadow: inset 0px 0px 0px 1px var(--background-modifier-border); + border-radius: var(--radius-s); +} + +.importer-progress-bar-inner { + width: 0; + height: 100%; + background-color: var(--interactive-accent); +} + +.importer-status { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + padding: var(--size-4-2) 0; +} + +.importer-stats-container { + display: flex; + justify-content: space-evenly; + margin-top: var(--size-4-5); + margin-bottom: var(--size-4-5); +} + +.importer-stat { + text-align: center; +} + +.importer-stat-count { + font-size: var(--font-ui-large); +} + +.importer-log { + overflow: auto; + flex-grow: 1; + font-family: var(--font-monospace); + font-size: var(--font-ui-smaller); + color: var(--text-muted); + border: 1px solid var(--background-modifier-border); + padding: var(--size-4-4); + background-color: var(--background-secondary); + border-radius: var(--radius-s); + max-height: 300px; + user-select: text; +} + +.importer-log .list-item { + display: inline-block; + line-height: var(--line-height-normal); + white-space: pre; + margin: var(--size-2-1); +} + +.importer-error { + color: var(--text-error); +} diff --git a/content/notes/.obsidian/plugins/obsidian-languagetool-plugin/main.js b/content/notes/.obsidian/plugins/obsidian-languagetool-plugin/main.js new file mode 100644 index 0000000..c7473c4 --- /dev/null +++ b/content/notes/.obsidian/plugins/obsidian-languagetool-plugin/main.js @@ -0,0 +1,9 @@ +"use strict";var e=require("obsidian"),t=require("path"),n=require("@codemirror/view"),r=require("@codemirror/state"),i=require("@codemirror/language");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=o(t);function s(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{u(r.next(e))}catch(e){o(e)}}function s(e){try{u(r.throw(e))}catch(e){o(e)}}function u(e){e.done?i(e.value):function(e){return e instanceof n?e:new n((function(t){t(e)}))}(e.value).then(a,s)}u((r=r.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;class u extends Map{constructor(e={}){if(super(),!(e.maxSize&&e.maxSize>0))throw new TypeError("`maxSize` must be a number greater than 0");if("number"==typeof e.maxAge&&0===e.maxAge)throw new TypeError("`maxAge` must be a number greater than 0");this.maxSize=e.maxSize,this.maxAge=e.maxAge||Number.POSITIVE_INFINITY,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_emitEvictions(e){if("function"==typeof this.onEviction)for(const[t,n]of e)this.onEviction(t,n.value)}_deleteIfExpired(e,t){return"number"==typeof t.expiry&&t.expiry<=Date.now()&&("function"==typeof this.onEviction&&this.onEviction(e,t.value),this.delete(e))}_getOrDeleteIfExpired(e,t){if(!1===this._deleteIfExpired(e,t))return t.value}_getItemValue(e,t){return t.expiry?this._getOrDeleteIfExpired(e,t):t.value}_peek(e,t){const n=t.get(e);return this._getItemValue(e,n)}_set(e,t){this.cache.set(e,t),this._size++,this._size>=this.maxSize&&(this._size=0,this._emitEvictions(this.oldCache),this.oldCache=this.cache,this.cache=new Map)}_moveToRecent(e,t){this.oldCache.delete(e),this._set(e,t)}*_entriesAscending(){for(const e of this.oldCache){const[t,n]=e;if(!this.cache.has(t)){!1===this._deleteIfExpired(t,n)&&(yield e)}}for(const e of this.cache){const[t,n]=e;!1===this._deleteIfExpired(t,n)&&(yield e)}}get(e){if(this.cache.has(e)){const t=this.cache.get(e);return this._getItemValue(e,t)}if(this.oldCache.has(e)){const t=this.oldCache.get(e);if(!1===this._deleteIfExpired(e,t))return this._moveToRecent(e,t),t.value}}set(e,t,{maxAge:n=this.maxAge}={}){const r="number"==typeof n&&n!==Number.POSITIVE_INFINITY?Date.now()+n:void 0;return this.cache.has(e)?this.cache.set(e,{value:t,expiry:r}):this._set(e,{value:t,expiry:r}),this}has(e){return this.cache.has(e)?!this._deleteIfExpired(e,this.cache.get(e)):!!this.oldCache.has(e)&&!this._deleteIfExpired(e,this.oldCache.get(e))}peek(e){return this.cache.has(e)?this._peek(e,this.cache):this.oldCache.has(e)?this._peek(e,this.oldCache):void 0}delete(e){const t=this.cache.delete(e);return t&&this._size--,this.oldCache.delete(e)||t}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}resize(e){if(!(e&&e>0))throw new TypeError("`maxSize` must be a number greater than 0");const t=[...this._entriesAscending()],n=t.length-e;n<0?(this.cache=new Map(t),this.oldCache=new Map,this._size=t.length):(n>0&&this._emitEvictions(t.slice(0,n)),this.oldCache=new Map(t.slice(n)),this.cache=new Map,this._size=0),this.maxSize=e}*keys(){for(const[e]of this)yield e}*values(){for(const[,e]of this)yield e}*[Symbol.iterator](){for(const e of this.cache){const[t,n]=e;!1===this._deleteIfExpired(t,n)&&(yield[t,n.value])}for(const e of this.oldCache){const[t,n]=e;if(!this.cache.has(t)){!1===this._deleteIfExpired(t,n)&&(yield[t,n.value])}}}*entriesDescending(){let e=[...this.cache];for(let t=e.length-1;t>=0;--t){const n=e[t],[r,i]=n;!1===this._deleteIfExpired(r,i)&&(yield[r,i.value])}e=[...this.oldCache];for(let t=e.length-1;t>=0;--t){const n=e[t],[r,i]=n;if(!this.cache.has(r)){!1===this._deleteIfExpired(r,i)&&(yield[r,i.value])}}}*entriesAscending(){for(const[e,t]of this._entriesAscending())yield[e,t.value]}get size(){if(!this._size)return this.oldCache.size;let e=0;for(const t of this.oldCache.keys())this.cache.has(t)||e++;return Math.min(this._size+e,this.maxSize)}entries(){return this.entriesAscending()}forEach(e,t=this){for(const[n,r]of this.entriesAscending())e.call(t,r,n,this)}get[Symbol.toStringTag](){return JSON.stringify([...this.entriesAscending()])}}function c(e){var t={exports:{}};return e(t,t.exports),t.exports}var l=c((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.defaults=t.composeannotation=t.collecttextnodes=t.build=void 0;const n={children:e=>e.children,annotatetextnode:(e,t)=>"text"===e.type?{offset:{end:e.position.end.offset,start:e.position.start.offset},text:t.substring(e.position.start.offset,e.position.end.offset)}:null,interpretmarkup:(e="")=>e};function r(e,t,r=n){const i=[];return function e(n){const o=r.annotatetextnode(n,t);null!==o&&i.push(o);const a=r.children(n);null!==a&&Array.isArray(a)&&a.forEach(e)}(e),i}function i(e,t,r=n){const i=[];let o={offset:{end:0,start:0}};for(const n of t){const t=e.substring(o.offset.end,n.offset.start);i.push({interpretAs:r.interpretmarkup(t),markup:t,offset:{end:n.offset.start,start:o.offset.end}}),i.push(n),o=n}const a=e.substring(o.offset.end,e.length);return i.push({interpretAs:r.interpretmarkup(a),markup:a,offset:{end:e.length,start:o.offset.end}}),{annotation:i}}t.defaults=n,t.collecttextnodes=r,t.composeannotation=i,t.build=function(e,t,o=n){return i(e,r(t(e),e,o),o)}})),f=c((function(e){!function(){var t;function n(e){for(var t,n,r,i,o=1,a=[].slice.call(arguments),s=0,u=e.length,c="",l=!1,f=!1,d=function(){return a[o++]},h=function(){for(var n="";/\d/.test(e[s]);)n+=e[s++],t=e[s];return n.length>0?parseInt(n):null};s13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||65535==(65535&n)||65534==(65535&n)||n>1114111?"�":M(n)};var N=function(e){return e<-2};var U=function(e){return-2===e||-1===e||32===e};var j=function(e,t,n,r){var i=r?r-1:1/0,o=0;return function(r){if(U(r))return e.enter(n),a(r);return t(r)};function a(r){return U(r)&&o++t;)i.containerState=o[s][1],o[s][0].exit.call(i,e);o.length=t}},Y={tokenize:function(e,t,n){return j(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4)}},J={tokenize:function(e,t,n){return j(e,e.lazy(this.parser.constructs.flow,t,n),"linePrefix",this.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4)}};var Z=Q,K=Object.defineProperty({tokenize:Z},"__esModule",{value:!0});var X=function(e){for(var t=-1,n=0;++to?0:o+t:t>o?o:t,n=n>0?n:0,r.length<1e4)(i=Array.from(r)).unshift(t,n),te.apply(e,i);else for(n&&te.apply(e,[t,n]);a-1||ee(r.events,"linePrefix")<4?e.interrupt(r.parser.constructs.flow,n,t)(i):t(i)}},partial:!0};var ue=ae;var ce=function(e){var t=this,n=e.attempt(W,(function(r){if(null===r)return void e.consume(r);return e.enter("lineEndingBlank"),e.consume(r),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n}),e.attempt(this.parser.constructs.flowInitial,r,j(e,e.attempt(this.parser.constructs.flow,r,e.attempt(ue,r)),"linePrefix")));return n;function r(r){if(null!==r)return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),t.currentConstruct=void 0,n;e.consume(r)}},le=Object.defineProperty({tokenize:ce},"__esModule",{value:!0}),fe=he("text"),de=he("string");function he(e){return{tokenize:function(t){var n=this,r=this.parser.constructs[e],i=t.attempt(r,o,a);return o;function o(e){return u(e)?i(e):a(e)}function a(e){if(null!==e)return t.enter("data"),t.consume(e),s;t.consume(e)}function s(e){return u(e)?(t.exit("data"),i(e)):(t.consume(e),s)}function u(e){var t=r[e],i=-1;if(null===e)return!0;if(t)for(;++i-1&&(n[0]=n[0].slice(i)),a>0&&n.push(e[o].slice(0,a))),n};var Te=function(e,t,n){var r=n?re(n):{line:1,column:1,offset:0},i={},o=[],a=[],s=[],u={consume:function(e){N(e)?(r.line++,r.column=1,r.offset+=-3===e?2:1,y()):-1!==e&&(r.column++,r.offset++);r._bufferIndex<0?r._index++:(r._bufferIndex++,r._bufferIndex===a[r._index].length&&(r._bufferIndex=-1,r._index++));c.previous=e},enter:function(e,t){var n=t||{};return n.type=e,n.start=d(),c.events.push(["enter",n,c]),s.push(n),n},exit:function(e){var t=s.pop();return t.end=d(),c.events.push(["exit",t,c]),t},attempt:m((function(e,t){v(e,t.from)})),check:m(g),interrupt:m(g,{interrupt:!0}),lazy:m(g,{lazy:!0})},c={previous:null,events:[],parser:e,sliceStream:f,sliceSerialize:function(e){return Ae(f(e))},now:d,defineSkip:function(e){i[e.line]=e.column,y()},write:function(e){if(a=Se(a,e),h(),null!==a[a.length-1])return[];return v(t,0),c.events=Ce(o,c.events,c),c.events}},l=t.tokenize.call(c,u);return t.resolveAll&&o.push(t),r._index=0,r._bufferIndex=-1,c;function f(e){return De(a,e)}function d(){return re(r)}function h(){for(var e,t;r._index-1)return v();return e.tokenize.call(t?O({},c,t):c,u,m,v)(n)}}function m(t){return e(f,h),i}function v(e){return h.restore(),++l1&&e[l][1].end.offset-e[l][1].start.offset>1?2:1)>1?"strongSequence":"emphasisSequence",start:Re(re(e[n][1].end),-s),end:re(e[n][1].end)},a={type:s>1?"strongSequence":"emphasisSequence",start:re(e[l][1].start),end:Re(re(e[l][1].start),s)},i={type:s>1?"strongText":"emphasisText",start:re(e[n][1].end),end:re(e[l][1].start)},r={type:s>1?"strong":"emphasis",start:re(o.start),end:re(a.end)},e[n][1].end=re(o.start),e[l][1].start=re(a.end),u=[],e[n][1].end.offset-e[n][1].start.offset&&(u=Se(u,[["enter",e[n][1],t],["exit",e[n][1],t]])),u=Se(u,[["enter",r,t],["enter",o,t],["exit",o,t],["enter",i,t]]),u=Se(u,Ce(t.parser.constructs.insideSpan.null,e.slice(n+1,l),t)),u=Se(u,[["exit",i,t],["enter",a,t],["exit",a,t],["exit",r,t]]),e[l][1].end.offset-e[l][1].start.offset?(c=2,u=Se(u,[["enter",e[l][1],t],["exit",e[l][1],t]])):c=0,ne(e,n-1,l-n+3,u),l=n+u.length-c-2;break}l=-1;for(;++l-1?void 0:4)}},exit:function(e){e.exit("blockQuote")}};var je=Ue,He=Le(/[!-/:-@[-`{-~]/);var Ge={name:"characterEscape",tokenize:function(e,t,n){return function(t){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(t),e.exit("escapeMarker"),r};function r(r){return He(r)?(e.enter("characterEscapeValue"),e.consume(r),e.exit("characterEscapeValue"),e.exit("characterEscape"),t):n(r)}}},$e={AEli:"Æ",AElig:"Æ",AM:"&",AMP:"&",Aacut:"Á",Aacute:"Á",Abreve:"Ă",Acir:"Â",Acirc:"Â",Acy:"А",Afr:"𝔄",Agrav:"À",Agrave:"À",Alpha:"Α",Amacr:"Ā",And:"⩓",Aogon:"Ą",Aopf:"𝔸",ApplyFunction:"⁡",Arin:"Å",Aring:"Å",Ascr:"𝒜",Assign:"≔",Atild:"Ã",Atilde:"Ã",Aum:"Ä",Auml:"Ä",Backslash:"∖",Barv:"⫧",Barwed:"⌆",Bcy:"Б",Because:"∵",Bernoullis:"ℬ",Beta:"Β",Bfr:"𝔅",Bopf:"𝔹",Breve:"˘",Bscr:"ℬ",Bumpeq:"≎",CHcy:"Ч",COP:"©",COPY:"©",Cacute:"Ć",Cap:"⋒",CapitalDifferentialD:"ⅅ",Cayleys:"ℭ",Ccaron:"Č",Ccedi:"Ç",Ccedil:"Ç",Ccirc:"Ĉ",Cconint:"∰",Cdot:"Ċ",Cedilla:"¸",CenterDot:"·",Cfr:"ℭ",Chi:"Χ",CircleDot:"⊙",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",Colon:"∷",Colone:"⩴",Congruent:"≡",Conint:"∯",ContourIntegral:"∮",Copf:"ℂ",Coproduct:"∐",CounterClockwiseContourIntegral:"∳",Cross:"⨯",Cscr:"𝒞",Cup:"⋓",CupCap:"≍",DD:"ⅅ",DDotrahd:"⤑",DJcy:"Ђ",DScy:"Ѕ",DZcy:"Џ",Dagger:"‡",Darr:"↡",Dashv:"⫤",Dcaron:"Ď",Dcy:"Д",Del:"∇",Delta:"Δ",Dfr:"𝔇",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",Diamond:"⋄",DifferentialD:"ⅆ",Dopf:"𝔻",Dot:"¨",DotDot:"⃜",DotEqual:"≐",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",Downarrow:"⇓",Dscr:"𝒟",Dstrok:"Đ",ENG:"Ŋ",ET:"Ð",ETH:"Ð",Eacut:"É",Eacute:"É",Ecaron:"Ě",Ecir:"Ê",Ecirc:"Ê",Ecy:"Э",Edot:"Ė",Efr:"𝔈",Egrav:"È",Egrave:"È",Element:"∈",Emacr:"Ē",EmptySmallSquare:"◻",EmptyVerySmallSquare:"▫",Eogon:"Ę",Eopf:"𝔼",Epsilon:"Ε",Equal:"⩵",EqualTilde:"≂",Equilibrium:"⇌",Escr:"ℰ",Esim:"⩳",Eta:"Η",Eum:"Ë",Euml:"Ë",Exists:"∃",ExponentialE:"ⅇ",Fcy:"Ф",Ffr:"𝔉",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",Fopf:"𝔽",ForAll:"∀",Fouriertrf:"ℱ",Fscr:"ℱ",GJcy:"Ѓ",G:">",GT:">",Gamma:"Γ",Gammad:"Ϝ",Gbreve:"Ğ",Gcedil:"Ģ",Gcirc:"Ĝ",Gcy:"Г",Gdot:"Ġ",Gfr:"𝔊",Gg:"⋙",Gopf:"𝔾",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",Gt:"≫",HARDcy:"Ъ",Hacek:"ˇ",Hat:"^",Hcirc:"Ĥ",Hfr:"ℌ",HilbertSpace:"ℋ",Hopf:"ℍ",HorizontalLine:"─",Hscr:"ℋ",Hstrok:"Ħ",HumpDownHump:"≎",HumpEqual:"≏",IEcy:"Е",IJlig:"IJ",IOcy:"Ё",Iacut:"Í",Iacute:"Í",Icir:"Î",Icirc:"Î",Icy:"И",Idot:"İ",Ifr:"ℑ",Igrav:"Ì",Igrave:"Ì",Im:"ℑ",Imacr:"Ī",ImaginaryI:"ⅈ",Implies:"⇒",Int:"∬",Integral:"∫",Intersection:"⋂",InvisibleComma:"⁣",InvisibleTimes:"⁢",Iogon:"Į",Iopf:"𝕀",Iota:"Ι",Iscr:"ℐ",Itilde:"Ĩ",Iukcy:"І",Ium:"Ï",Iuml:"Ï",Jcirc:"Ĵ",Jcy:"Й",Jfr:"𝔍",Jopf:"𝕁",Jscr:"𝒥",Jsercy:"Ј",Jukcy:"Є",KHcy:"Х",KJcy:"Ќ",Kappa:"Κ",Kcedil:"Ķ",Kcy:"К",Kfr:"𝔎",Kopf:"𝕂",Kscr:"𝒦",LJcy:"Љ",L:"<",LT:"<",Lacute:"Ĺ",Lambda:"Λ",Lang:"⟪",Laplacetrf:"ℒ",Larr:"↞",Lcaron:"Ľ",Lcedil:"Ļ",Lcy:"Л",LeftAngleBracket:"⟨",LeftArrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",LeftRightArrow:"↔",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",Leftarrow:"⇐",Leftrightarrow:"⇔",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",LessLess:"⪡",LessSlantEqual:"⩽",LessTilde:"≲",Lfr:"𝔏",Ll:"⋘",Lleftarrow:"⇚",Lmidot:"Ŀ",LongLeftArrow:"⟵",LongLeftRightArrow:"⟷",LongRightArrow:"⟶",Longleftarrow:"⟸",Longleftrightarrow:"⟺",Longrightarrow:"⟹",Lopf:"𝕃",LowerLeftArrow:"↙",LowerRightArrow:"↘",Lscr:"ℒ",Lsh:"↰",Lstrok:"Ł",Lt:"≪",Map:"⤅",Mcy:"М",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",MinusPlus:"∓",Mopf:"𝕄",Mscr:"ℳ",Mu:"Μ",NJcy:"Њ",Nacute:"Ń",Ncaron:"Ň",Ncedil:"Ņ",Ncy:"Н",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",Nfr:"𝔑",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",Not:"⫬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",Nscr:"𝒩",Ntild:"Ñ",Ntilde:"Ñ",Nu:"Ν",OElig:"Œ",Oacut:"Ó",Oacute:"Ó",Ocir:"Ô",Ocirc:"Ô",Ocy:"О",Odblac:"Ő",Ofr:"𝔒",Ograv:"Ò",Ograve:"Ò",Omacr:"Ō",Omega:"Ω",Omicron:"Ο",Oopf:"𝕆",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",Or:"⩔",Oscr:"𝒪",Oslas:"Ø",Oslash:"Ø",Otild:"Õ",Otilde:"Õ",Otimes:"⨷",Oum:"Ö",Ouml:"Ö",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",PartialD:"∂",Pcy:"П",Pfr:"𝔓",Phi:"Φ",Pi:"Π",PlusMinus:"±",Poincareplane:"ℌ",Popf:"ℙ",Pr:"⪻",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",Prime:"″",Product:"∏",Proportion:"∷",Proportional:"∝",Pscr:"𝒫",Psi:"Ψ",QUO:'"',QUOT:'"',Qfr:"𝔔",Qopf:"ℚ",Qscr:"𝒬",RBarr:"⤐",RE:"®",REG:"®",Racute:"Ŕ",Rang:"⟫",Rarr:"↠",Rarrtl:"⤖",Rcaron:"Ř",Rcedil:"Ŗ",Rcy:"Р",Re:"ℜ",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",Rfr:"ℜ",Rho:"Ρ",RightAngleBracket:"⟩",RightArrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",Rightarrow:"⇒",Ropf:"ℝ",RoundImplies:"⥰",Rrightarrow:"⇛",Rscr:"ℛ",Rsh:"↱",RuleDelayed:"⧴",SHCHcy:"Щ",SHcy:"Ш",SOFTcy:"Ь",Sacute:"Ś",Sc:"⪼",Scaron:"Š",Scedil:"Ş",Scirc:"Ŝ",Scy:"С",Sfr:"𝔖",ShortDownArrow:"↓",ShortLeftArrow:"←",ShortRightArrow:"→",ShortUpArrow:"↑",Sigma:"Σ",SmallCircle:"∘",Sopf:"𝕊",Sqrt:"√",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",Sscr:"𝒮",Star:"⋆",Sub:"⋐",Subset:"⋐",SubsetEqual:"⊆",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",SuchThat:"∋",Sum:"∑",Sup:"⋑",Superset:"⊃",SupersetEqual:"⊇",Supset:"⋑",THOR:"Þ",THORN:"Þ",TRADE:"™",TSHcy:"Ћ",TScy:"Ц",Tab:"\t",Tau:"Τ",Tcaron:"Ť",Tcedil:"Ţ",Tcy:"Т",Tfr:"𝔗",Therefore:"∴",Theta:"Θ",ThickSpace:"  ",ThinSpace:" ",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",Topf:"𝕋",TripleDot:"⃛",Tscr:"𝒯",Tstrok:"Ŧ",Uacut:"Ú",Uacute:"Ú",Uarr:"↟",Uarrocir:"⥉",Ubrcy:"Ў",Ubreve:"Ŭ",Ucir:"Û",Ucirc:"Û",Ucy:"У",Udblac:"Ű",Ufr:"𝔘",Ugrav:"Ù",Ugrave:"Ù",Umacr:"Ū",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",Uopf:"𝕌",UpArrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",UpEquilibrium:"⥮",UpTee:"⊥",UpTeeArrow:"↥",Uparrow:"⇑",Updownarrow:"⇕",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",Upsilon:"Υ",Uring:"Ů",Uscr:"𝒰",Utilde:"Ũ",Uum:"Ü",Uuml:"Ü",VDash:"⊫",Vbar:"⫫",Vcy:"В",Vdash:"⊩",Vdashl:"⫦",Vee:"⋁",Verbar:"‖",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",Vopf:"𝕍",Vscr:"𝒱",Vvdash:"⊪",Wcirc:"Ŵ",Wedge:"⋀",Wfr:"𝔚",Wopf:"𝕎",Wscr:"𝒲",Xfr:"𝔛",Xi:"Ξ",Xopf:"𝕏",Xscr:"𝒳",YAcy:"Я",YIcy:"Ї",YUcy:"Ю",Yacut:"Ý",Yacute:"Ý",Ycirc:"Ŷ",Ycy:"Ы",Yfr:"𝔜",Yopf:"𝕐",Yscr:"𝒴",Yuml:"Ÿ",ZHcy:"Ж",Zacute:"Ź",Zcaron:"Ž",Zcy:"З",Zdot:"Ż",ZeroWidthSpace:"​",Zeta:"Ζ",Zfr:"ℨ",Zopf:"ℤ",Zscr:"𝒵",aacut:"á",aacute:"á",abreve:"ă",ac:"∾",acE:"∾̳",acd:"∿",acir:"â",acirc:"â",acut:"´",acute:"´",acy:"а",aeli:"æ",aelig:"æ",af:"⁡",afr:"𝔞",agrav:"à",agrave:"à",alefsym:"ℵ",aleph:"ℵ",alpha:"α",amacr:"ā",amalg:"⨿",am:"&",amp:"&",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",aogon:"ą",aopf:"𝕒",ap:"≈",apE:"⩰",apacir:"⩯",ape:"≊",apid:"≋",apos:"'",approx:"≈",approxeq:"≊",arin:"å",aring:"å",ascr:"𝒶",ast:"*",asymp:"≈",asympeq:"≍",atild:"ã",atilde:"ã",aum:"ä",auml:"ä",awconint:"∳",awint:"⨑",bNot:"⫭",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",barvee:"⊽",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",bcy:"б",bdquo:"„",becaus:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",beta:"β",beth:"ℶ",between:"≬",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bnot:"⌐",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxDL:"╗",boxDR:"╔",boxDl:"╖",boxDr:"╓",boxH:"═",boxHD:"╦",boxHU:"╩",boxHd:"╤",boxHu:"╧",boxUL:"╝",boxUR:"╚",boxUl:"╜",boxUr:"╙",boxV:"║",boxVH:"╬",boxVL:"╣",boxVR:"╠",boxVh:"╫",boxVl:"╢",boxVr:"╟",boxbox:"⧉",boxdL:"╕",boxdR:"╒",boxdl:"┐",boxdr:"┌",boxh:"─",boxhD:"╥",boxhU:"╨",boxhd:"┬",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxuL:"╛",boxuR:"╘",boxul:"┘",boxur:"└",boxv:"│",boxvH:"╪",boxvL:"╡",boxvR:"╞",boxvh:"┼",boxvl:"┤",boxvr:"├",bprime:"‵",breve:"˘",brvba:"¦",brvbar:"¦",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",bumpeq:"≏",cacute:"ć",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",caps:"∩︀",caret:"⁁",caron:"ˇ",ccaps:"⩍",ccaron:"č",ccedi:"ç",ccedil:"ç",ccirc:"ĉ",ccups:"⩌",ccupssm:"⩐",cdot:"ċ",cedi:"¸",cedil:"¸",cemptyv:"⦲",cen:"¢",cent:"¢",centerdot:"·",cfr:"𝔠",chcy:"ч",check:"✓",checkmark:"✓",chi:"χ",cir:"○",cirE:"⧃",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledR:"®",circledS:"Ⓢ",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",clubs:"♣",clubsuit:"♣",colon:":",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",conint:"∮",copf:"𝕔",coprod:"∐",cop:"©",copy:"©",copysr:"℗",crarr:"↵",cross:"✗",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",cup:"∪",cupbrcap:"⩈",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curre:"¤",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",dArr:"⇓",dHar:"⥥",dagger:"†",daleth:"ℸ",darr:"↓",dash:"‐",dashv:"⊣",dbkarow:"⤏",dblac:"˝",dcaron:"ď",dcy:"д",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",ddotseq:"⩷",de:"°",deg:"°",delta:"δ",demptyv:"⦱",dfisht:"⥿",dfr:"𝔡",dharl:"⇃",dharr:"⇂",diam:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",digamma:"ϝ",disin:"⋲",div:"÷",divid:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",dopf:"𝕕",dot:"˙",doteq:"≐",doteqdot:"≑",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",downarrow:"↓",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",dscr:"𝒹",dscy:"ѕ",dsol:"⧶",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",dzcy:"џ",dzigrarr:"⟿",eDDot:"⩷",eDot:"≑",eacut:"é",eacute:"é",easter:"⩮",ecaron:"ě",ecir:"ê",ecirc:"ê",ecolon:"≕",ecy:"э",edot:"ė",ee:"ⅇ",efDot:"≒",efr:"𝔢",eg:"⪚",egrav:"è",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",emacr:"ē",empty:"∅",emptyset:"∅",emptyv:"∅",emsp13:" ",emsp14:" ",emsp:" ",eng:"ŋ",ensp:" ",eogon:"ę",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",equals:"=",equest:"≟",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erDot:"≓",erarr:"⥱",escr:"ℯ",esdot:"≐",esim:"≂",eta:"η",et:"ð",eth:"ð",eum:"ë",euml:"ë",euro:"€",excl:"!",exist:"∃",expectation:"ℰ",exponentiale:"ⅇ",fallingdotseq:"≒",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",ffr:"𝔣",filig:"fi",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",fopf:"𝕗",forall:"∀",fork:"⋔",forkv:"⫙",fpartint:"⨍",frac1:"¼",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac3:"¾",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",fscr:"𝒻",gE:"≧",gEl:"⪌",gacute:"ǵ",gamma:"γ",gammad:"ϝ",gap:"⪆",gbreve:"ğ",gcirc:"ĝ",gcy:"г",gdot:"ġ",ge:"≥",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",gfr:"𝔤",gg:"≫",ggg:"⋙",gimel:"ℷ",gjcy:"ѓ",gl:"≷",glE:"⪒",gla:"⪥",glj:"⪤",gnE:"≩",gnap:"⪊",gnapprox:"⪊",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",gopf:"𝕘",grave:"`",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",g:">",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",hArr:"⇔",hairsp:" ",half:"½",hamilt:"ℋ",hardcy:"ъ",harr:"↔",harrcir:"⥈",harrw:"↭",hbar:"ℏ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"𝔥",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"𝕙",horbar:"―",hscr:"𝒽",hslash:"ℏ",hstrok:"ħ",hybull:"⁃",hyphen:"‐",iacut:"í",iacute:"í",ic:"⁣",icir:"î",icirc:"î",icy:"и",iecy:"е",iexc:"¡",iexcl:"¡",iff:"⇔",ifr:"𝔦",igrav:"ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",ijlig:"ij",imacr:"ī",image:"ℑ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",int:"∫",intcal:"⊺",integers:"ℤ",intercal:"⊺",intlarhk:"⨗",intprod:"⨼",iocy:"ё",iogon:"į",iopf:"𝕚",iota:"ι",iprod:"⨼",iques:"¿",iquest:"¿",iscr:"𝒾",isin:"∈",isinE:"⋹",isindot:"⋵",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",itilde:"ĩ",iukcy:"і",ium:"ï",iuml:"ï",jcirc:"ĵ",jcy:"й",jfr:"𝔧",jmath:"ȷ",jopf:"𝕛",jscr:"𝒿",jsercy:"ј",jukcy:"є",kappa:"κ",kappav:"ϰ",kcedil:"ķ",kcy:"к",kfr:"𝔨",kgreen:"ĸ",khcy:"х",kjcy:"ќ",kopf:"𝕜",kscr:"𝓀",lAarr:"⇚",lArr:"⇐",lAtail:"⤛",lBarr:"⤎",lE:"≦",lEg:"⪋",lHar:"⥢",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",lambda:"λ",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",laqu:"«",laquo:"«",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",latail:"⤙",late:"⪭",lates:"⪭︀",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",lcaron:"ľ",lcedil:"ļ",lceil:"⌈",lcub:"{",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",leftarrow:"←",leftarrowtail:"↢",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",leftthreetimes:"⋋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",lessgtr:"≶",lesssim:"≲",lfisht:"⥼",lfloor:"⌊",lfr:"𝔩",lg:"≶",lgE:"⪑",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",ljcy:"љ",ll:"≪",llarr:"⇇",llcorner:"⌞",llhard:"⥫",lltri:"◺",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnE:"≨",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",longleftrightarrow:"⟷",longmapsto:"⟼",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",lscr:"𝓁",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",lstrok:"ł",l:"<",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltrPar:"⦖",ltri:"◃",ltrie:"⊴",ltrif:"◂",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",mDDot:"∺",mac:"¯",macr:"¯",male:"♂",malt:"✠",maltese:"✠",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",mcy:"м",mdash:"—",measuredangle:"∡",mfr:"𝔪",mho:"℧",micr:"µ",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middo:"·",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",mopf:"𝕞",mp:"∓",mscr:"𝓂",mstpos:"∾",mu:"μ",multimap:"⊸",mumap:"⊸",nGg:"⋙̸",nGt:"≫⃒",nGtv:"≫̸",nLeftarrow:"⇍",nLeftrightarrow:"⇎",nLl:"⋘̸",nLt:"≪⃒",nLtv:"≪̸",nRightarrow:"⇏",nVDash:"⊯",nVdash:"⊮",nabla:"∇",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbs:" ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",ncaron:"ň",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",ncy:"н",ndash:"–",ne:"≠",neArr:"⇗",nearhk:"⤤",nearr:"↗",nearrow:"↗",nedot:"≐̸",nequiv:"≢",nesear:"⤨",nesim:"≂̸",nexist:"∄",nexists:"∄",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",ngsim:"≵",ngt:"≯",ngtr:"≯",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",njcy:"њ",nlArr:"⇍",nlE:"≦̸",nlarr:"↚",nldr:"‥",nle:"≰",nleftarrow:"↚",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nlsim:"≴",nlt:"≮",nltri:"⋪",nltrie:"⋬",nmid:"∤",nopf:"𝕟",no:"¬",not:"¬",notin:"∉",notinE:"⋹̸",notindot:"⋵̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",ntild:"ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",nu:"ν",num:"#",numero:"№",numsp:" ",nvDash:"⊭",nvHarr:"⤄",nvap:"≍⃒",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwArr:"⇖",nwarhk:"⤣",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",oS:"Ⓢ",oacut:"ó",oacute:"ó",oast:"⊛",ocir:"ô",ocirc:"ô",ocy:"о",odash:"⊝",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",oelig:"œ",ofcir:"⦿",ofr:"𝔬",ogon:"˛",ograv:"ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",omacr:"ō",omega:"ω",omicron:"ο",omid:"⦶",ominus:"⊖",oopf:"𝕠",opar:"⦷",operp:"⦹",oplus:"⊕",or:"∨",orarr:"↻",ord:"º",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oscr:"ℴ",oslas:"ø",oslash:"ø",osol:"⊘",otild:"õ",otilde:"õ",otimes:"⊗",otimesas:"⨶",oum:"ö",ouml:"ö",ovbar:"⌽",par:"¶",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",pfr:"𝔭",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",plusm:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",pointint:"⨕",popf:"𝕡",poun:"£",pound:"£",pr:"≺",prE:"⪳",prap:"⪷",prcue:"≼",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",prime:"′",primes:"ℙ",prnE:"⪵",prnap:"⪹",prnsim:"⋨",prod:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",propto:"∝",prsim:"≾",prurel:"⊰",pscr:"𝓅",psi:"ψ",puncsp:" ",qfr:"𝔮",qint:"⨌",qopf:"𝕢",qprime:"⁗",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quo:'"',quot:'"',rAarr:"⇛",rArr:"⇒",rAtail:"⤜",rBarr:"⤏",rHar:"⥤",race:"∽̱",racute:"ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raqu:"»",raquo:"»",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",rarrtl:"↣",rarrw:"↝",ratail:"⤚",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",rcaron:"ř",rcedil:"ŗ",rceil:"⌉",rcub:"}",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",re:"®",reg:"®",rfisht:"⥽",rfloor:"⌋",rfr:"𝔯",rhard:"⇁",rharu:"⇀",rharul:"⥬",rho:"ρ",rhov:"ϱ",rightarrow:"→",rightarrowtail:"↣",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",rightthreetimes:"⋌",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",rsaquo:"›",rscr:"𝓇",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",ruluhar:"⥨",rx:"℞",sacute:"ś",sbquo:"‚",sc:"≻",scE:"⪴",scap:"⪸",scaron:"š",sccue:"≽",sce:"⪰",scedil:"ş",scirc:"ŝ",scnE:"⪶",scnap:"⪺",scnsim:"⋩",scpolint:"⨓",scsim:"≿",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",seArr:"⇘",searhk:"⤥",searr:"↘",searrow:"↘",sec:"§",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",sfr:"𝔰",sfrown:"⌢",sharp:"♯",shchcy:"щ",shcy:"ш",shortmid:"∣",shortparallel:"∥",sh:"­",shy:"­",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",square:"□",squarf:"▪",squf:"▪",srarr:"→",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",sub:"⊂",subE:"⫅",subdot:"⪽",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",sum:"∑",sung:"♪",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supE:"⫆",supdot:"⪾",supdsub:"⫘",supe:"⊇",supedot:"⫄",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swArr:"⇙",swarhk:"⤦",swarr:"↙",swarrow:"↙",swnwar:"⤪",szli:"ß",szlig:"ß",target:"⌖",tau:"τ",tbrk:"⎴",tcaron:"ť",tcedil:"ţ",tcy:"т",tdot:"⃛",telrec:"⌕",tfr:"𝔱",there4:"∴",therefore:"∴",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",thinsp:" ",thkap:"≈",thksim:"∼",thor:"þ",thorn:"þ",tilde:"˜",time:"×",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",tscr:"𝓉",tscy:"ц",tshcy:"ћ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",uArr:"⇑",uHar:"⥣",uacut:"ú",uacute:"ú",uarr:"↑",ubrcy:"ў",ubreve:"ŭ",ucir:"û",ucirc:"û",ucy:"у",udarr:"⇅",udblac:"ű",udhar:"⥮",ufisht:"⥾",ufr:"𝔲",ugrav:"ù",ugrave:"ù",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",umacr:"ū",um:"¨",uml:"¨",uogon:"ų",uopf:"𝕦",uparrow:"↑",updownarrow:"↕",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",upsi:"υ",upsih:"ϒ",upsilon:"υ",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",uring:"ů",urtri:"◹",uscr:"𝓊",utdot:"⋰",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",uum:"ü",uuml:"ü",uwangle:"⦧",vArr:"⇕",vBar:"⫨",vBarv:"⫩",vDash:"⊨",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vcy:"в",vdash:"⊢",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",verbar:"|",vert:"|",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",vopf:"𝕧",vprop:"∝",vrtri:"⊳",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",vzigzag:"⦚",wcirc:"ŵ",wedbar:"⩟",wedge:"∧",wedgeq:"≙",weierp:"℘",wfr:"𝔴",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",yacut:"ý",yacute:"ý",yacy:"я",ycirc:"ŷ",ycy:"ы",ye:"¥",yen:"¥",yfr:"𝔶",yicy:"ї",yopf:"𝕪",yscr:"𝓎",yucy:"ю",yum:"ÿ",yuml:"ÿ",zacute:"ź",zcaron:"ž",zcy:"з",zdot:"ż",zeetrf:"ℨ",zeta:"ζ",zfr:"𝔷",zhcy:"ж",zigrarr:"⇝",zopf:"𝕫",zscr:"𝓏",zwj:"‍",zwnj:"‌"},We=function(e){return!!Qe.call($e,e)&&$e[e]},Qe={}.hasOwnProperty;var Ye=Le(/\d/),Je=Le(/[\dA-Fa-f]/);function Ze(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var Ke=Ze(We),Xe={name:"characterReference",tokenize:function(e,t,n){var r,i,o=this,a=0;return function(t){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(t),e.exit("characterReferenceMarker"),s};function s(t){return 35===t?(e.enter("characterReferenceMarkerNumeric"),e.consume(t),e.exit("characterReferenceMarkerNumeric"),u):(e.enter("characterReferenceValue"),r=31,i=ze,c(t))}function u(t){return 88===t||120===t?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(t),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),r=6,i=Je,c):(e.enter("characterReferenceValue"),r=7,i=Ye,c(t))}function c(s){var u;return 59===s&&a?(u=e.exit("characterReferenceValue"),i!==ze||Ke.default(o.sliceSerialize(u))?(e.enter("characterReferenceMarker"),e.consume(s),e.exit("characterReferenceMarker"),e.exit("characterReference"),t):n(s)):i(s)&&a++-1?void 0:4);function o(t){return e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),a(t)}function a(t){return t===r?(e.consume(t),i++,a):ic?n(i):(e.consume(i),p):41===i?l--?(e.consume(i),p):(e.exit("chunkString"),e.exit(s),e.exit(a),e.exit(r),t(i)):null===i||qe(i)?l?n(i):(e.exit("chunkString"),e.exit(s),e.exit(a),e.exit(r),t(i)):_e(i)?n(i):(e.consume(i),92===i?g:p)}function g(t){return 40===t||41===t||92===t?(e.consume(t),p):p(t)}};var ot=function(e,t,n,r,i,o){var a,s=this,u=0;return function(t){return e.enter(r),e.enter(i),e.consume(t),e.exit(i),e.enter(o),c};function c(f){return null===f||91===f||93===f&&!a||94===f&&!u&&"_hiddenFootnoteSupport"in s.parser.constructs||u>999?n(f):93===f?(e.exit(o),e.enter(i),e.consume(f),e.exit(i),e.exit(r),t):N(f)?(e.enter("lineEnding"),e.consume(f),e.exit("lineEnding"),c):(e.enter("chunkString",{contentType:"string"}),l(f))}function l(t){return null===t||91===t||93===t||N(t)||u++>999?(e.exit("chunkString"),c(t)):(e.consume(t),a=a||!U(t),92===t?f:l)}function f(t){return 91===t||92===t||93===t?(e.consume(t),u++,l):l(t)}};var at=function(e,t){var n;return function r(i){if(N(i))return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),n=!0,r;if(U(i))return j(e,r,n?"linePrefix":"lineSuffix")(i);return t(i)}};var st=function(e,t,n,r,i,o){var a;return function(t){return e.enter(r),e.enter(i),e.consume(t),e.exit(i),a=40===t?41:t,s};function s(n){return n===a?(e.enter(i),e.consume(n),e.exit(i),e.exit(r),t):(e.enter(o),u(n))}function u(t){return t===a?(e.exit(o),s(a)):null===t?n(t):N(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),j(e,u,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),c(t))}function c(t){return t===a||null===t||N(t)?(e.exit("chunkString"),u(t)):(e.consume(t),92===t?l:c)}function l(t){return t===a||92===t?(e.consume(t),c):c(t)}},ut={name:"definition",tokenize:function(e,t,n){var r,i=this;return function(t){return e.enter("definition"),ot.call(i,e,o,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(t)};function o(t){return r=z(i.sliceSerialize(i.events[i.events.length-1][1]).slice(1,-1)),58===t?(e.enter("definitionMarker"),e.consume(t),e.exit("definitionMarker"),at(e,it(e,e.attempt(ct,j(e,a,"whitespace"),j(e,a,"whitespace")),n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString"))):n(t)}function a(o){return null===o||N(o)?(e.exit("definition"),i.parser.defined.indexOf(r)<0&&i.parser.defined.push(r),t(o)):n(o)}}},ct={tokenize:function(e,t,n){return function(t){return qe(t)?at(e,r)(t):n(t)};function r(t){return 34===t||39===t||40===t?st(e,j(e,i,"whitespace"),n,"definitionTitle","definitionTitleMarker","definitionTitleString")(t):n(t)}function i(e){return null===e||N(e)?t(e):n(e)}},partial:!0};var lt={name:"headingAtx",tokenize:function(e,t,n){var r=this,i=0;return function(t){return e.enter("atxHeading"),e.enter("atxHeadingSequence"),o(t)};function o(s){return 35===s&&i++<6?(e.consume(s),o):null===s||qe(s)?(e.exit("atxHeadingSequence"),r.interrupt?t(s):a(s)):n(s)}function a(n){return 35===n?(e.enter("atxHeadingSequence"),s(n)):null===n||N(n)?(e.exit("atxHeading"),t(n)):U(n)?j(e,a,"whitespace")(n):(e.enter("atxHeadingText"),u(n))}function s(t){return 35===t?(e.consume(t),s):(e.exit("atxHeadingSequence"),a(t))}function u(t){return null===t||35===t||qe(t)?(e.exit("atxHeadingText"),a(t)):(e.consume(t),u)}},resolve:function(e,t){var n,r,i=e.length-2,o=3;"whitespace"===e[o][1].type&&(o+=2);i-2>o&&"whitespace"===e[i][1].type&&(i-=2);"atxHeadingSequence"===e[i][1].type&&(o===i-1||i-4>o&&"whitespace"===e[i-2][1].type)&&(i-=o+1===i?2:4);i>o&&(n={type:"atxHeadingText",start:e[o][1].start,end:e[i][1].end},r={type:"chunkText",start:e[o][1].start,end:e[i][1].end,contentType:"text"},ne(e,o,i-o+1,[["enter",n,t],["enter",r,t],["exit",r,t],["exit",n,t]]));return e}};var ft=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","section","source","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],dt=["pre","script","style","textarea"],ht={name:"htmlFlow",tokenize:function(e,t,n){var r,i,o,a,s,u=this;return function(t){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(t),c};function c(a){return 33===a?(e.consume(a),l):47===a?(e.consume(a),h):63===a?(e.consume(a),r=3,u.interrupt?t:P):Be(a)?(e.consume(a),o=M(a),i=!0,p):n(a)}function l(i){return 45===i?(e.consume(i),r=2,f):91===i?(e.consume(i),r=5,o="CDATA[",a=0,d):Be(i)?(e.consume(i),r=4,u.interrupt?t:P):n(i)}function f(r){return 45===r?(e.consume(r),u.interrupt?t:P):n(r)}function d(r){return r===o.charCodeAt(a++)?(e.consume(r),a===o.length?u.interrupt?t:A:d):n(r)}function h(t){return Be(t)?(e.consume(t),o=M(t),p):n(t)}function p(a){return null===a||47===a||62===a||qe(a)?47!==a&&i&&dt.indexOf(o.toLowerCase())>-1?(r=1,u.interrupt?t(a):A(a)):ft.indexOf(o.toLowerCase())>-1?(r=6,47===a?(e.consume(a),g):u.interrupt?t(a):A(a)):(r=7,u.interrupt?n(a):i?v(a):m(a)):45===a||ze(a)?(e.consume(a),o+=M(a),p):n(a)}function g(r){return 62===r?(e.consume(r),u.interrupt?t:A):n(r)}function m(t){return U(t)?(e.consume(t),m):S(t)}function v(t){return 47===t?(e.consume(t),S):58===t||95===t||Be(t)?(e.consume(t),y):U(t)?(e.consume(t),v):S(t)}function y(t){return 45===t||46===t||58===t||95===t||ze(t)?(e.consume(t),y):k(t)}function k(t){return 61===t?(e.consume(t),x):U(t)?(e.consume(t),k):v(t)}function x(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),s=t,b):U(t)?(e.consume(t),x):(s=void 0,w(t))}function b(t){return t===s?(e.consume(t),E):null===t||N(t)?n(t):(e.consume(t),b)}function w(t){return null===t||34===t||39===t||60===t||61===t||62===t||96===t||qe(t)?k(t):(e.consume(t),w)}function E(e){return 47===e||62===e||U(e)?v(e):n(e)}function S(t){return 62===t?(e.consume(t),C):n(t)}function C(t){return U(t)?(e.consume(t),C):null===t||N(t)?A(t):n(t)}function A(t){return 45===t&&2===r?(e.consume(t),q):60===t&&1===r?(e.consume(t),L):62===t&&4===r?(e.consume(t),R):63===t&&3===r?(e.consume(t),P):93===t&&5===r?(e.consume(t),I):!N(t)||6!==r&&7!==r?null===t||N(t)?D(t):(e.consume(t),A):e.check(pt,R,D)(t)}function D(t){return e.exit("htmlFlowData"),T(t)}function T(t){return null===t?V(t):N(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),T):(e.enter("htmlFlowData"),A(t))}function q(t){return 45===t?(e.consume(t),P):A(t)}function L(t){return 47===t?(e.consume(t),o="",F):A(t)}function F(t){return 62===t&&dt.indexOf(o.toLowerCase())>-1?(e.consume(t),R):Be(t)&&o.length<8?(e.consume(t),o+=M(t),F):A(t)}function I(t){return 93===t?(e.consume(t),P):A(t)}function P(t){return 62===t?(e.consume(t),R):A(t)}function R(t){return null===t||N(t)?(e.exit("htmlFlowData"),V(t)):(e.consume(t),R)}function V(n){return e.exit("htmlFlow"),t(n)}},resolveTo:function(e){var t=e.length;for(;t--&&("enter"!==e[t][0]||"htmlFlow"!==e[t][1].type););t>1&&"linePrefix"===e[t-2][1].type&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2));return e},concrete:!0},pt={tokenize:function(e,t,n){return function(r){return e.exit("htmlFlowData"),e.enter("lineEndingBlank"),e.consume(r),e.exit("lineEndingBlank"),e.attempt(W,t,n)}},partial:!0};var gt={name:"htmlText",tokenize:function(e,t,n){var r,i,o,a,s=this;return function(t){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(t),u};function u(t){return 33===t?(e.consume(t),c):47===t?(e.consume(t),w):63===t?(e.consume(t),x):Be(t)?(e.consume(t),C):n(t)}function c(t){return 45===t?(e.consume(t),l):91===t?(e.consume(t),i="CDATA[",o=0,g):Be(t)?(e.consume(t),k):n(t)}function l(t){return 45===t?(e.consume(t),f):n(t)}function f(t){return null===t||62===t?n(t):45===t?(e.consume(t),d):h(t)}function d(e){return null===e||62===e?n(e):h(e)}function h(t){return null===t?n(t):45===t?(e.consume(t),p):N(t)?(a=h,P(t)):(e.consume(t),h)}function p(t){return 45===t?(e.consume(t),V):h(t)}function g(t){return t===i.charCodeAt(o++)?(e.consume(t),o===i.length?m:g):n(t)}function m(t){return null===t?n(t):93===t?(e.consume(t),v):N(t)?(a=m,P(t)):(e.consume(t),m)}function v(t){return 93===t?(e.consume(t),y):m(t)}function y(t){return 62===t?V(t):93===t?(e.consume(t),y):m(t)}function k(t){return null===t||62===t?V(t):N(t)?(a=k,P(t)):(e.consume(t),k)}function x(t){return null===t?n(t):63===t?(e.consume(t),b):N(t)?(a=x,P(t)):(e.consume(t),x)}function b(e){return 62===e?V(e):x(e)}function w(t){return Be(t)?(e.consume(t),E):n(t)}function E(t){return 45===t||ze(t)?(e.consume(t),E):S(t)}function S(t){return N(t)?(a=S,P(t)):U(t)?(e.consume(t),S):V(t)}function C(t){return 45===t||ze(t)?(e.consume(t),C):47===t||62===t||qe(t)?A(t):n(t)}function A(t){return 47===t?(e.consume(t),V):58===t||95===t||Be(t)?(e.consume(t),D):N(t)?(a=A,P(t)):U(t)?(e.consume(t),A):V(t)}function D(t){return 45===t||46===t||58===t||95===t||ze(t)?(e.consume(t),D):T(t)}function T(t){return 61===t?(e.consume(t),q):N(t)?(a=T,P(t)):U(t)?(e.consume(t),T):A(t)}function q(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),r=t,L):N(t)?(a=q,P(t)):U(t)?(e.consume(t),q):(e.consume(t),r=void 0,I)}function L(t){return t===r?(e.consume(t),F):null===t?n(t):N(t)?(a=L,P(t)):(e.consume(t),L)}function F(e){return 62===e||47===e||qe(e)?A(e):n(e)}function I(t){return null===t||34===t||39===t||60===t||61===t||96===t?n(t):62===t||qe(t)?A(t):(e.consume(t),I)}function P(t){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),j(e,R,"linePrefix",s.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:4)}function R(t){return e.enter("htmlTextData"),a(t)}function V(r){return 62===r?(e.consume(r),e.exit("htmlTextData"),e.exit("htmlText"),t):n(r)}}};var mt={name:"labelEnd",tokenize:function(e,t,n){var r,i,o=this,a=o.events.length;for(;a--;)if(("labelImage"===o.events[a][1].type||"labelLink"===o.events[a][1].type)&&!o.events[a][1]._balanced){r=o.events[a][1];break}return function(t){if(!r)return n(t);return r._inactive?u(t):(i=o.parser.defined.indexOf(z(o.sliceSerialize({start:r.end,end:o.now()})))>-1,e.enter("labelEnd"),e.enter("labelMarker"),e.consume(t),e.exit("labelMarker"),e.exit("labelEnd"),s)};function s(n){return 40===n?e.attempt(vt,t,i?t:u)(n):91===n?e.attempt(yt,t,i?e.attempt(kt,t,u):u)(n):i?t(n):u(n)}function u(e){return r._balanced=!0,n(e)}},resolveTo:function(e,t){var n,r,i,o,a,s,u,c=e.length,l=0;for(;c--;)if(o=e[c][1],a){if("link"===o.type||"labelLink"===o.type&&o._inactive)break;"enter"===e[c][0]&&"labelLink"===o.type&&(o._inactive=!0)}else if(s){if("enter"===e[c][0]&&("labelImage"===o.type||"labelLink"===o.type)&&!o._balanced&&(a=c,"labelLink"!==o.type)){l=2;break}}else"labelEnd"===o.type&&(s=c);return n={type:"labelLink"===e[a][1].type?"link":"image",start:re(e[a][1].start),end:re(e[e.length-1][1].end)},r={type:"label",start:re(e[a][1].start),end:re(e[s][1].end)},i={type:"labelText",start:re(e[a+l+2][1].end),end:re(e[s-2][1].start)},u=Se(u=[["enter",n,t],["enter",r,t]],e.slice(a+1,a+l+3)),u=Se(u,[["enter",i,t]]),u=Se(u,Ce(t.parser.constructs.insideSpan.null,e.slice(a+l+4,s-3),t)),u=Se(u,[["exit",i,t],e[s-2],e[s-1],["exit",r,t]]),u=Se(u,e.slice(s+1)),u=Se(u,[["exit",n,t]]),ne(e,a,e.length,u),e},resolveAll:function(e){var t,n=-1;for(;++n-1?void 0:4)(i)}}},exit:function(e){e.exit(this.containerState.type)}},St={tokenize:function(e,t,n){var r=this;return j(e,(function(e){return U(e)||!ee(r.events,"listItemPrefixWhitespace")?n(e):t(e)}),"listItemPrefixWhitespace",r.parser.constructs.disable.null.indexOf("codeIndented")>-1?void 0:5)},partial:!0},Ct={tokenize:function(e,t,n){var r=this;return j(e,(function(e){return ee(r.events,"listItemIndent")===r.containerState.size?t(e):n(e)}),"listItemIndent",r.containerState.size+1)},partial:!0};var At={name:"setextUnderline",tokenize:function(e,t,n){var r,i,o=this,a=o.events.length;for(;a--;)if("lineEnding"!==o.events[a][1].type&&"linePrefix"!==o.events[a][1].type&&"content"!==o.events[a][1].type){i="paragraph"===o.events[a][1].type;break}return function(t){if(!o.lazy&&(o.interrupt||i))return e.enter("setextHeadingLine"),e.enter("setextHeadingLineSequence"),r=t,s(t);return n(t)};function s(t){return t===r?(e.consume(t),s):(e.exit("setextHeadingLineSequence"),j(e,u,"lineSuffix")(t))}function u(r){return null===r||N(r)?(e.exit("setextHeadingLine"),t(r)):n(r)}},resolveTo:function(e,t){var n,r,i,o,a=e.length;for(;a--;)if("enter"===e[a][0]){if("content"===e[a][1].type){n=a;break}"paragraph"===e[a][1].type&&(r=a)}else"content"===e[a][1].type&&e.splice(a,1),i||"definition"!==e[a][1].type||(i=a);o={type:"setextHeading",start:re(e[r][1].start),end:re(e[e.length-1][1].end)},e[r][1].type="setextHeadingText",i?(e.splice(r,0,["enter",o,t]),e.splice(i+1,0,["exit",e[n][1],t]),e[n][1].end=re(e[i][1].end)):e[n][1]=o;return e.push(["exit",o,t]),e}};var Dt={38:Xe,92:Ge},Tt={"-5":xt,"-4":xt,"-3":xt,33:{name:"labelStartImage",tokenize:function(e,t,n){var r=this;return function(t){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(t),e.exit("labelImageMarker"),i};function i(t){return 91===t?(e.enter("labelMarker"),e.consume(t),e.exit("labelMarker"),e.exit("labelImage"),o):n(t)}function o(e){return 94===e&&"_hiddenFootnoteSupport"in r.parser.constructs?n(e):t(e)}},resolveAll:mt.resolveAll},38:Xe,42:Oe,60:[Ne,gt],91:{name:"labelStartLink",tokenize:function(e,t,n){var r=this;return function(t){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(t),e.exit("labelMarker"),e.exit("labelLink"),i};function i(e){return 94===e&&"_hiddenFootnoteSupport"in r.parser.constructs?n(e):t(e)}},resolveAll:mt.resolveAll},92:[{name:"hardBreakEscape",tokenize:function(e,t,n){return function(t){return e.enter("hardBreakEscape"),e.enter("escapeMarker"),e.consume(t),r};function r(r){return N(r)?(e.exit("escapeMarker"),e.exit("hardBreakEscape"),t(r)):n(r)}}},Ge],93:mt,95:Oe,96:rt},qt={91:ut},Lt={null:[]},Ft={42:Et,43:Et,45:Et,48:Et,49:Et,50:Et,51:Et,52:Et,53:Et,54:Et,55:Et,56:Et,57:Et,62:je},It={35:lt,42:wt,45:[At,wt],60:ht,61:At,95:wt,96:et,126:et},Pt={"-2":tt,"-1":tt,32:tt},Rt={null:[Oe,ke.resolver]},Vt=Dt,Ot=Tt,Bt=Object.defineProperty({contentInitial:qt,disable:Lt,document:Ft,flow:It,flowInitial:Pt,insideSpan:Rt,string:Vt,text:Ot},"__esModule",{value:!0});var zt=function(e){var t={defined:[],constructs:Ee([Bt].concat(xe((e||{}).extensions))),content:n($),document:n(K),flow:n(le),string:n(ke.string),text:n(ke.text)};return t;function n(e){return function(n){return Te(t,e,n)}}},Mt=/[\0\t\n\r]/g;var _t=function(){var e,t=!0,n=1,r="";return function(i,o,a){var s,u,c,l,f,d=[];i=r+i.toString(o),c=0,r="",t&&(65279===i.charCodeAt(0)&&c++,t=void 0);for(;c-1&&(q.call(this,e),L.call(this,e))}function I(){a("atHardBreak",!0)}function R(){var e=this.resume();this.stack[this.stack.length-1].value=e}function V(){var e=this.resume();this.stack[this.stack.length-1].value=e}function M(){var e=this.resume();this.stack[this.stack.length-1].value=e}function N(){var e=this.stack[this.stack.length-1];s("inReference")?(e.type+="Reference",e.referenceType=s("referenceType")||"shortcut",delete e.url,delete e.title):(delete e.identifier,delete e.label,delete e.referenceType),a("referenceType")}function U(){var e=this.stack[this.stack.length-1];s("inReference")?(e.type+="Reference",e.referenceType=s("referenceType")||"shortcut",delete e.url,delete e.title):(delete e.identifier,delete e.label,delete e.referenceType),a("referenceType")}function j(e){this.stack[this.stack.length-2].identifier=z(this.sliceSerialize(e)).toLowerCase()}function H(){var e=this.stack[this.stack.length-1],t=this.resume();this.stack[this.stack.length-1].label=t,a("inReference",!0),"link"===this.stack[this.stack.length-1].type?this.stack[this.stack.length-1].children=e.children:this.stack[this.stack.length-1].alt=t}function G(){var e=this.resume();this.stack[this.stack.length-1].url=e}function $(){var e=this.resume();this.stack[this.stack.length-1].title=e}function W(){a("inReference")}function Q(){a("referenceType","collapsed")}function Y(e){var t=this.resume();this.stack[this.stack.length-1].label=t,this.stack[this.stack.length-1].identifier=z(this.sliceSerialize(e)).toLowerCase(),a("referenceType","full")}function J(e){a("characterReferenceType",e.type)}function Z(e){var t,n,r=this.sliceSerialize(e),i=s("characterReferenceType");i?(t=_(r,"characterReferenceMarkerNumeric"===i?10:16),a("characterReferenceType")):t=We(r),(n=this.stack.pop()).value+=t,n.position.end=u(e.end)}function K(e){L.call(this,e),this.stack[this.stack.length-1].url=this.sliceSerialize(e)}function X(e){L.call(this,e),this.stack[this.stack.length-1].url="mailto:"+this.sliceSerialize(e)}function ee(){return{type:"blockquote",children:[]}}function te(){return{type:"code",lang:null,meta:null,value:""}}function ne(){return{type:"inlineCode",value:""}}function re(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function ie(){return{type:"emphasis",children:[]}}function oe(){return{type:"heading",depth:void 0,children:[]}}function ae(){return{type:"break"}}function se(){return{type:"html",value:""}}function ue(){return{type:"image",title:null,url:"",alt:null}}function ce(){return{type:"link",title:null,url:"",children:[]}}function le(e){return{type:"list",ordered:"listOrdered"===e.type,start:null,spread:e._spread,children:[]}}function fe(e){return{type:"listItem",spread:e._spread,checked:null,children:[]}}function de(){return{type:"paragraph",children:[]}}function he(){return{type:"strong",children:[]}}function pe(){return{type:"text",value:""}}function ge(){return{type:"thematicBreak"}}}(n)(Nt(zt(n).document().write(_t()(e,t,!0))))};function Qt(e,t){var n,r;for(n in t)r=B.call(e,n)?e[n]:e[n]={},"canContainEols"===n||"transforms"===n?e[n]=[].concat(r,t[n]):Object.assign(r,t[n])}var Yt=Wt,Jt=function(e){var t=this;this.Parser=function(n){return Yt(n,Object.assign({},t.data("settings"),e,{extensions:t.data("micromarkExtensions")||[],mdastExtensions:t.data("fromMarkdownExtensions")||[]}))}};var Zt=function(e){if(e)throw e} +/*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */;var Kt=function(e){return null!=e&&null!=e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)},Xt=Object.prototype.hasOwnProperty,en=Object.prototype.toString,tn=Object.defineProperty,nn=Object.getOwnPropertyDescriptor,rn=function(e){return"function"==typeof Array.isArray?Array.isArray(e):"[object Array]"===en.call(e)},on=function(e){if(!e||"[object Object]"!==en.call(e))return!1;var t,n=Xt.call(e,"constructor"),r=e.constructor&&e.constructor.prototype&&Xt.call(e.constructor.prototype,"isPrototypeOf");if(e.constructor&&!n&&!r)return!1;for(t in e);return void 0===t||Xt.call(e,t)},an=function(e,t){tn&&"__proto__"===t.name?tn(e,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):e[t.name]=t.newValue},sn=function(e,t){if("__proto__"===t){if(!Xt.call(e,t))return;if(nn)return nn(e,t).value}return e[t]},un=function e(){var t,n,r,i,o,a,s=arguments[0],u=1,c=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[1]||{},u=2),(null==s||"object"!=typeof s&&"function"!=typeof s)&&(s={});u{if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype},ln=[].slice,fn=function(e,t){var n;return function(){var t,o=ln.call(arguments,0),a=e.length>o.length;a&&o.push(r);try{t=e.apply(null,o)}catch(e){if(a&&n)throw e;return r(e)}a||(t&&"function"==typeof t.then?t.then(i,r):t instanceof Error?r(t):i(t))};function r(){n||(n=!0,t.apply(null,arguments))}function i(e){r(null,e)}};var dn=pn;pn.wrap=fn;var hn=[].slice;function pn(){var e=[],t={run:function(){var t=-1,n=hn.call(arguments,0,-1),r=arguments[arguments.length-1];if("function"!=typeof r)throw new Error("Expected function as last argument, not "+r);(function i(o){var a=e[++t],s=hn.call(arguments,0).slice(1),u=n.length,c=-1;if(o)r(o);else{for(;++c1)for(var n=1;n-1)throw new Error("`"+t+"` cannot be a path: did not expect `"+kn.sep+"`")}function Jn(e,t){if(!e)throw new Error("`"+t+"` cannot be empty")}function Zn(e,t){if(!e)throw new Error("Setting `"+t+"` requires `path` to be set too")}Qn.prototype.toString=function(e){return(this.contents||"").toString(e)},Object.defineProperty(Qn.prototype,"path",{get:function(){return this.history[this.history.length-1]},set:function(e){Jn(e,"path"),this.path!==e&&this.history.push(e)}}),Object.defineProperty(Qn.prototype,"dirname",{get:function(){return"string"==typeof this.path?kn.dirname(this.path):void 0},set:function(e){Zn(this.path,"dirname"),this.path=kn.join(e||"",this.basename)}}),Object.defineProperty(Qn.prototype,"basename",{get:function(){return"string"==typeof this.path?kn.basename(this.path):void 0},set:function(e){Jn(e,"basename"),Yn(e,"basename"),this.path=kn.join(this.dirname||"",e)}}),Object.defineProperty(Qn.prototype,"extname",{get:function(){return"string"==typeof this.path?kn.extname(this.path):void 0},set:function(e){if(Yn(e,"extname"),Zn(this.path,"extname"),e){if(46!==e.charCodeAt(0))throw new Error("`extname` must start with `.`");if(e.indexOf(".",1)>-1)throw new Error("`extname` cannot contain multiple dots")}this.path=kn.join(this.dirname,this.stem+(e||""))}}),Object.defineProperty(Qn.prototype,"stem",{get:function(){return"string"==typeof this.path?kn.basename(this.path,this.extname):void 0},set:function(e){Jn(e,"stem"),Yn(e,"stem"),this.path=kn.join(this.dirname||"",e+(this.extname||""))}});var Kn=Gn;Gn.prototype.message=function(e,t,n){var r=new gn(e,t,n);this.path&&(r.name=this.path+":"+r.name,r.file=this.path);return r.fatal=!1,this.messages.push(r),r},Gn.prototype.info=function(){var e=this.message.apply(this,arguments);return e.fatal=null,e},Gn.prototype.fail=function(){var e=this.message.apply(this,arguments);throw e.fatal=!0,e};var Xn=Kn,er=function e(){var t,n=[],r=dn(),i={},o=-1;return a.data=function(e,n){if("string"==typeof e)return 2===arguments.length?(sr("data",t),i[e]=n,a):nr.call(i,e)&&i[e]||null;if(e)return sr("data",t),i=e,a;return i},a.freeze=s,a.attachers=n,a.use=function(e){var r;if(sr("use",t),null==e);else if("function"==typeof e)l.apply(null,arguments);else{if("object"!=typeof e)throw new Error("Expected usable value, not `"+e+"`");"length"in e?c(e):o(e)}r&&(i.settings=un(i.settings||{},r));return a;function o(e){c(e.plugins),e.settings&&(r=un(r||{},e.settings))}function s(e){if("function"==typeof e)l(e);else{if("object"!=typeof e)throw new Error("Expected usable value, not `"+e+"`");"length"in e?l.apply(null,e):o(e)}}function c(e){var t=-1;if(null==e);else{if("object"!=typeof e||!("length"in e))throw new Error("Expected a list of plugins, not `"+e+"`");for(;++tl.defaults.children(e),annotatetextnode:(e,t)=>l.defaults.annotatetextnode(e,t),interpretmarkup:(e="")=>"\n".repeat((e.match(/\n/g)||[]).length),remarkoptions:{}};t.defaults=n,t.build=function(e,t=n){const r=er().use(Jt,t.remarkoptions).use(I,["yaml","toml"]);return l.build(e,r.parse,t)}}));const fr=/frontmatter|code|math|templater|blockid|hashtag|internal/;function dr(e){let t=0;if(0===e.length)return t;for(let n=0;n1&&i.username.length>1&&(u.username=i.username,u.apiKey=i.apikey),i.staticLanguage&&i.staticLanguage.length>0&&"auto"!==i.staticLanguage&&(u.language=i.staticLanguage),i.motherTongue&&i.motherTongue.length>0&&(u.motherTongue=i.motherTongue);try{c=yield fetch(`${i.serverUrl}/v2/check`,{method:"POST",body:Object.keys(u).map((e=>`${encodeURIComponent(e)}=${encodeURIComponent(u[e])}`)).join("&"),headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"}})}catch(t){const n="request-failed";return gr===n&&i.shouldAutoCheck||(new e.Notice("Request to LanguageTool server failed. Please check your connection and LanguageTool server URL",3e3),gr=n),Promise.reject(t)}if(!c.ok){const t="request-not-ok";return yield function(e,t){var n,r;return s(this,void 0,void 0,(function*(){let i=`${(new Date).toLocaleString()}:\n url used for request: ${e.url}\n Status: ${e.status}\n Body: ${(yield e.text()).slice(0,200)}\n Settings: ${JSON.stringify(Object.assign(Object.assign({},t),{username:"REDACTED",apikey:"REDACTED"}))}\n `;(t.username||t.apikey)&&(i=i.replaceAll(null!==(n=t.username)&&void 0!==n?n:"username","<>").replaceAll(null!==(r=t.apikey)&&void 0!==r?r:"apiKey","<>")),pr.push(i),pr.length>10&&pr.shift()}))}(c,i),gr===t&&i.shouldAutoCheck||(new e.Notice(`Request to LanguageTool failed\n${c.statusText}Check Plugin Settings for Logs`,3e3),gr=t),Promise.reject(new Error(`unexpected status ${c.status}, see network tab`))}try{l=yield c.json()}catch(t){const n="json-parse-error";return gr===n&&i.shouldAutoCheck||(new e.Notice("Error processing response from LanguageTool server",3e3),gr=n),Promise.reject(t)}return"ok"===gr&&i.shouldAutoCheck||(new e.Notice("LanguageTool detection restored",5e3),gr="ok"),l}))}const yr=3e3,kr={serverUrl:"https://api.languagetool.org",urlMode:"standard",glassBg:!1,shouldAutoCheck:!1,autoCheckDelay:yr,pickyMode:!1};function xr(e){return"standard"===e?"https://api.languagetool.org":"premium"===e?"https://api.languagetoolplus.com":""}class br extends e.PluginSettingTab{constructor(e,t){super(e,t),this.plugin=t}configureAutoCheckDelaySlider(e,t){const n=function(e){return"standard"===e?yr:"premium"===e?750:50}(t);this.plugin.settings.autoCheckDelaye.json()));return this.languages=e,this.languages}))}display(){const{containerEl:t}=this;let n=null,r=null;t.empty(),t.createEl("h2",{text:"Settings for LanguageTool"});const i=t.createEl("button",{text:"Copy failed Request Logs"});i.onclick=()=>s(this,void 0,void 0,(function*(){yield window.navigator.clipboard.writeText(pr.join("\n")),new e.Notice("Logs copied to clipboard")})),i.style.marginBottom="5px",new e.Setting(t).setName("Endpoint").setDesc("Endpoint that will be used to make requests to").then((e=>{e.controlEl.style.display="inline-grid";let t=null;e.addDropdown((e=>{n=e,e.addOptions({standard:"(Standard) api.languagetool.org",premium:"(Premium) api.languagetoolplus.com",custom:"Custom URL"}).setValue(this.plugin.settings.urlMode).onChange((e=>s(this,void 0,void 0,(function*(){this.plugin.settings.urlMode=e,this.plugin.settings.serverUrl=xr(e),null==t||t.setValue(this.plugin.settings.serverUrl),null==t||t.setDisabled("custom"!==e),this.configureAutoCheckDelaySlider(r,e),yield this.plugin.saveSettings()}))))})),e.addText((e=>{t=e,e.setPlaceholder("https://your-custom-url.com").setValue(this.plugin.settings.serverUrl).setDisabled("custom"===this.plugin.settings.urlMode).onChange((e=>s(this,void 0,void 0,(function*(){this.plugin.settings.serverUrl=e.replace(/\/v2\/check\/$/,"").replace(/\/$/,""),yield this.plugin.saveSettings()}))))}))})),new e.Setting(t).setName("API Username").setDesc("Enter a username/email for API Access").addText((e=>e.setPlaceholder("peterlustig@gmail.com").setValue(this.plugin.settings.username||"").onChange((e=>s(this,void 0,void 0,(function*(){this.plugin.settings.username=e.replace(/\s+/g,""),yield this.plugin.saveSettings()})))))).then((e=>{e.descEl.createEl("br"),e.descEl.createEl("a",{text:"Click here for information about Premium Access",href:"https://github.com/Clemens-E/obsidian-languagetool-plugin#premium-accounts"},(e=>{e.setAttr("target","_blank")}))}));let o,a,u,c,l,f=!1;new e.Setting(t).setName("API Key").setDesc("Enter an API Key").addText((t=>t.setValue(this.plugin.settings.apikey||"").onChange((t=>s(this,void 0,void 0,(function*(){if(this.plugin.settings.apikey=t.replace(/\s+/g,""),this.plugin.settings.apikey.length>0&&"premium"!==this.plugin.settings.urlMode&&!f){const r=new e.Modal(this.app);r.titleEl.createEl("span",{text:"Warning"}),r.contentEl.createEl("p",{text:"You have entered an API Key but you are not using the Premium Endpoint"}),r.contentEl.style.display="grid";const i=r.contentEl.createEl("div",{attr:{style:"justify-self:center"}});i.createEl("button",{text:"I know what I'm doing",attr:{style:"justify-self:flex-start; color:red;"}}).onclick=()=>{f=!0,r.close()},i.createEl("button",{text:"Change to Premium",attr:{style:"justify-self:flex-end"}}).onclick=()=>s(this,void 0,void 0,(function*(){return this.plugin.settings.urlMode="premium",null==n||n.setValue("premium"),this.plugin.settings.serverUrl=xr(t),yield this.plugin.saveSettings(),r.close()})),r.open()}yield this.plugin.saveSettings()})))))).then((e=>{e.descEl.createEl("br"),e.descEl.createEl("a",{text:"Click here for information about Premium Access",href:"https://github.com/Clemens-E/obsidian-languagetool-plugin#premium-accounts"},(e=>{e.setAttr("target","_blank")}))})),new e.Setting(t).setName("Autocheck Text").setDesc("Check text as you type").addToggle((e=>{e.setValue(this.plugin.settings.shouldAutoCheck).onChange((e=>s(this,void 0,void 0,(function*(){this.plugin.settings.shouldAutoCheck=e,yield this.plugin.saveSettings()}))))})),new e.Setting(t).setName("AutoCheck Delay (ms)").setDesc("Length of time to wait for AutoCheck after last key press").addSlider((e=>{r=e,n&&this.configureAutoCheckDelaySlider(r,n.getValue()),e.setValue(this.plugin.settings.autoCheckDelay).onChange((e=>s(this,void 0,void 0,(function*(){this.plugin.settings.autoCheckDelay=e,yield this.plugin.saveSettings()})))),e.setDynamicTooltip()})),new e.Setting(t).setName("Glass Background").setDesc("Use the secondary background color of the theme or a glass background").addToggle((e=>{e.setValue(this.plugin.settings.glassBg).onChange((e=>s(this,void 0,void 0,(function*(){this.plugin.settings.glassBg=e,yield this.plugin.saveSettings()}))))})),new e.Setting(t).setName("Static Language").setDesc("Set a static language that will always be used (LanguageTool tries to auto detect the language, this is usually not necessary)").addDropdown((e=>{o=e,this.requestLanguages().then((t=>{var n;e.addOption("auto","Auto Detect"),t.forEach((t=>e.addOption(t.longCode,t.name))),e.setValue(null!==(n=this.plugin.settings.staticLanguage)&&void 0!==n?n:"auto"),e.onChange((e=>s(this,void 0,void 0,(function*(){this.plugin.settings.staticLanguage=e,"auto"!==e&&(this.plugin.settings.englishVeriety=void 0,null==a||a.setValue("default"),this.plugin.settings.germanVeriety=void 0,null==u||u.setValue("default"),this.plugin.settings.portugueseVeriety=void 0,null==c||c.setValue("default"),this.plugin.settings.catalanVeriety=void 0,null==l||l.setValue("default")),yield this.plugin.saveSettings()}))))})).catch(console.error)})),new e.Setting(t).setName("Mother Tongue").setDesc("Set the language you are most comfortable with. This will be used to interpret the language you are writing in").addDropdown((e=>{this.requestLanguages().then((t=>{e.addOption("empty",""),t.forEach((t=>e.addOption(t.longCode,t.name))),e.onChange((t=>s(this,void 0,void 0,(function*(){var n;this.plugin.settings.motherTongue=t,e.setValue(null!==(n=this.plugin.settings.motherTongue)&&void 0!==n?n:""),yield this.plugin.saveSettings()}))))})).catch(console.error)})),t.createEl("h3",{text:"Language Varieties"}),t.createEl("p",{text:"Some languages have varieties depending on the country they are spoken in."}),new e.Setting(t).setName("Interpret English as").addDropdown((e=>{var t;a=e,e.addOptions({default:"---","en-US":"English (US)","en-GB":"English (British)","en-CA":"English (Canada)","en-AU":"English (Australia)","en-ZA":"English (South Africa)","en-NZ":"English (New Zealand)"}).setValue(null!==(t=this.plugin.settings.englishVeriety)&&void 0!==t?t:"default").onChange((e=>s(this,void 0,void 0,(function*(){"default"===e?this.plugin.settings.englishVeriety=void 0:(this.plugin.settings.staticLanguage="auto",null==o||o.setValue("auto"),this.plugin.settings.englishVeriety=e),yield this.plugin.saveSettings()}))))})),new e.Setting(t).setName("Interpret German as").addDropdown((e=>{var t;u=e,e.addOptions({default:"---","de-DE":"German (Germany)","de-CH":"German (Switzerland)","de-AT":"German (Austria)"}).setValue(null!==(t=this.plugin.settings.germanVeriety)&&void 0!==t?t:"default").onChange((e=>s(this,void 0,void 0,(function*(){"default"===e?this.plugin.settings.germanVeriety=void 0:(this.plugin.settings.staticLanguage="auto",null==o||o.setValue("auto"),this.plugin.settings.germanVeriety=e),yield this.plugin.saveSettings()}))))})),new e.Setting(t).setName("Interpret Portuguese as").addDropdown((e=>{var t;c=e,e.addOptions({default:"---","pt-BR":"Portuguese (Brazil)","pt-PT":"Portuguese (Portugal)","pt-AO":"Portuguese (Angola)","pt-MZ":"Portuguese (Mozambique)"}).setValue(null!==(t=this.plugin.settings.portugueseVeriety)&&void 0!==t?t:"default").onChange((e=>s(this,void 0,void 0,(function*(){"default"===e?this.plugin.settings.portugueseVeriety=void 0:(this.plugin.settings.staticLanguage="auto",null==o||o.setValue("auto"),this.plugin.settings.portugueseVeriety=e),yield this.plugin.saveSettings()}))))})),new e.Setting(t).setName("Interpret Catalan as").addDropdown((e=>{var t;l=e,e.addOptions({default:"---","ca-ES":"Catalan","ca-ES-valencia":"Catalan (Valencian)"}).setValue(null!==(t=this.plugin.settings.catalanVeriety)&&void 0!==t?t:"default").onChange((e=>s(this,void 0,void 0,(function*(){"default"===e?this.plugin.settings.catalanVeriety=void 0:(this.plugin.settings.staticLanguage="auto",null==o||o.setValue("auto"),this.plugin.settings.catalanVeriety=e),yield this.plugin.saveSettings()}))))})),t.createEl("h3",{text:"Rule Categories"}),new e.Setting(t).setName("Picky Mode").setDesc("Provides more style and tonality suggestions, detects long or complex sentences, recognizes colloquialism and redundancies, proactively suggests synonyms for commonly overused words").addToggle((e=>{e.setValue(this.plugin.settings.pickyMode).onChange((e=>s(this,void 0,void 0,(function*(){this.plugin.settings.pickyMode=e,yield this.plugin.saveSettings()}))))})),new e.Setting(t).setName("Other rule categories").setDesc("Enter a comma-separated list of categories").addText((e=>e.setPlaceholder("Eg. CATEGORY_1,CATEGORY_2").setValue(this.plugin.settings.ruleOtherCategories||"").onChange((e=>s(this,void 0,void 0,(function*(){this.plugin.settings.ruleOtherCategories=e.replace(/\s+/g,""),yield this.plugin.saveSettings()})))))).then((e=>{e.descEl.createEl("br"),e.descEl.createEl("a",{text:"Click here for a list of rules and categories",href:"https://community.languagetool.org/rule/list"},(e=>{e.setAttr("target","_blank")}))})),new e.Setting(t).setName("Enable Specific Rules").setDesc("Enter a comma-separated list of rules").addText((e=>e.setPlaceholder("Eg. RULE_1,RULE_2").setValue(this.plugin.settings.ruleOtherRules||"").onChange((e=>s(this,void 0,void 0,(function*(){this.plugin.settings.ruleOtherRules=e.replace(/\s+/g,""),yield this.plugin.saveSettings()})))))).then((e=>{e.descEl.createEl("br"),e.descEl.createEl("a",{text:"Click here for a list of rules and categories",href:"https://community.languagetool.org/rule/list"},(e=>{e.setAttr("target","_blank")}))})),new e.Setting(t).setName("Disable Specific Rules").setDesc("Enter a comma-separated list of rules").addText((e=>e.setPlaceholder("Eg. RULE_1,RULE_2").setValue(this.plugin.settings.ruleOtherDisabledRules||"").onChange((e=>s(this,void 0,void 0,(function*(){this.plugin.settings.ruleOtherDisabledRules=e.replace(/\s+/g,""),yield this.plugin.saveSettings()})))))).then((e=>{e.descEl.createEl("br"),e.descEl.createEl("a",{text:"Click here for a list of rules and categories",href:"https://community.languagetool.org/rule/list"},(e=>{e.setAttr("target","_blank")}))}))}}function wr(t){let r=-1,i=1/0,o=-1/0;return n.EditorView.inputHandler.of(((n,a,s,u)=>{if(!t.settings.shouldAutoCheck||!u.trim())return!1;const c=n.state.field(e.editorViewField);return i=Math.min(i,Math.min(a,s)),o=Math.max(o,Math.max(a,s)),clearTimeout(r),r=window.setTimeout((()=>{const e=n.lineBlockAt(i),r=n.lineBlockAt(o);t.runDetection(n,c,e.from,r.to).catch((e=>{console.error(e)}))}),t.settings.autoCheckDelay),!1}))}const Er=r.StateEffect.define(),Sr=r.StateEffect.define(),Cr=r.StateEffect.define(),Ar=r.StateEffect.define();function Dr(e,t,n,r){return!(e>=n&&e<=r)&&(!(t>=n&&t<=r)&&(!(n>=e&&n<=t)&&!(r>=e&&r<=t)))}const Tr=r.StateField.define({create:()=>({marks:n.Decoration.none,ignoredRanges:new Set}),update(e,t){e.marks=e.marks.map(t.changes),e.ignoredRanges.clear(),e.marks.between(0,t.newDoc.length,((t,n)=>{e.ignoredRanges.add(`${t},${n}`)})),t.docChanged&&t.selection&&e.marks.size&&(e.marks=e.marks.update({filter:(n,r)=>{const i=Dr(n,r,t.selection.main.from,t.selection.main.to);return i||e.ignoredRanges.delete(`${n},${r}`),i}}));for(const r of t.effects)if(r.is(Ar)){const{from:t,to:i}=r.value;e.ignoredRanges.add(`${t},${i}`),e.marks=e.marks.update({add:[n.Decoration.mark({}).range(t,i)]})}return e}}),qr=r.StateField.define({create:()=>n.Decoration.none,update(e,t){const{ignoredRanges:r}=t.state.field(Tr),o=new Set,a={};let s=null;e=e.map(t.changes);const u=e=>{if(void 0!==a[e])return a[e];s||(s=i.syntaxTree(t.state));const n=s.resolveInner(e,1).type.prop(i.tokenClassNodeProp);return n&&fr.test(n)?a[e]=!1:a[e]=!0,a[e]},c=(e,n,r)=>{if("TYPOS"===e.rule.category.id){const e=window.app.vault.getConfig("spellcheckDictionary"),i=t.state.sliceDoc(n,r);if(e&&e.includes(i))return!1}s||(s=i.syntaxTree(t.state));const o=s.resolve(t.newDoc.lineAt(n).from,1).type.prop(i.tokenClassNodeProp);return!(null==o?void 0:o.includes("table"))||"WHITESPACE_RULE"!==e.rule.id};t.docChanged&&t.selection&&e.size&&(e=e.update({filter:(e,n)=>Dr(e,n,t.selection.main.from,t.selection.main.to)}));for(const i of t.effects)if(i.is(Er)){const{from:t,to:a,match:s}=i.value,l=`${t},${a}`;!r.has(l)&&!o.has(l)&&u(t)&&u(a)&&c(s,t,a)&&(o.add(l),e=e.update({add:[n.Decoration.mark({class:`lt-underline ${hr(s.rule.category.id)}`,match:s}).range(t,a)]}))}else i.is(Sr)?e=n.Decoration.none:(i.is(Cr)||i.is(Ar))&&(e=e.update({filter:(e,t)=>Dr(e,t,i.value.from,i.value.to)}));return e},provide:e=>n.EditorView.decorations.from(e)});function Lr(t,n,r){const i=r.match,o=i.message,a=i.shortMessage,s=(i.replacements||[]).slice(0,3).map((e=>e.value)).filter((e=>e.trim())),u=i.rule.category.id,c=i.rule.id,l=t.settings.glassBg?"lt-predictions-container-glass":"lt-predictions-container";return createDiv({cls:[l,hr(u)]},(i=>{a&&i.createSpan({cls:"lt-title"},(e=>{e.createSpan({text:a})})),o&&i.createSpan({cls:"lt-message",text:o});const l=Cr.of({from:r.from,to:r.to}),f=Ar.of({from:r.from,to:r.to});i.createDiv({cls:"lt-bottom"},(t=>{s.length&&t.createDiv({cls:"lt-buttoncontainer"},(e=>{for(const t of s)e.createEl("button",{text:t},(e=>{e.onclick=()=>{n.dispatch({changes:[{from:r.from,to:r.to,insert:t}],effects:[l]})}}))})),t.createDiv({cls:"lt-info-container"},(t=>{t.createEl("button",{cls:"lt-info-button clickable-icon"},(t=>{e.setIcon(t,"info"),t.onclick=()=>{const e=document.getElementsByClassName("lt-info-box").item(0);if(!e)throw Error("Programming error: failed to create popup. Please notify the LanguageTool maintainer if this problem persists.");e.hasClass("hidden")?e.removeClass("hidden"):e.addClass("hidden")}})),t.createDiv({cls:"lt-info-box hidden"},(e=>{e.createDiv({cls:"lt-info",text:`Category: ${u}`}),e.createDiv({cls:"lt-info",text:`Rule: ${c}`})}))}))})),i.createDiv({cls:"lt-ignorecontainer"},(i=>{i.createEl("button",{cls:"lt-ignore-btn"},(i=>{"TYPOS"===u?(e.setIcon(i.createSpan(),"plus-with-circle"),i.createSpan({text:"Add to personal dictionary"}),i.onclick=()=>{const e=t.app.vault.getConfig("spellcheckDictionary")||[];t.app.vault.setConfig("spellcheckDictionary",[...e,n.state.sliceDoc(r.from,r.to)]),n.dispatch({effects:[l]})}):(e.setIcon(i.createSpan(),"cross"),i.createSpan({text:"Ignore suggestion"}),i.onclick=()=>{n.dispatch({effects:[f]})})}))}))}))}function Fr(e,t,n){const r=n.field(qr);if(0===r.size||n.selection.ranges.length>1)return[];let i=null;if(r.between(n.selection.main.from,n.selection.main.to,((e,t,n)=>{i={from:e,to:t,match:n.spec.match}})),null!==i){const{from:n,to:r}=i;if(e.length){const t=e[0];if(t.pos===n&&t.end===r)return e}return[{pos:n,end:r,above:!0,strictSide:!1,arrow:!1,create:e=>({dom:Lr(t,e,i)})}]}return[]}function Ir(e){return r.StateField.define({create:t=>Fr([],e,t),update:(t,n)=>Fr(t,e,n.state),provide:e=>n.showTooltip.computeN([e],(t=>t.field(e)))})}class Pr{get element(){return this.elem}constructor(t,n){const r=t.match.message,i=t.match.shortMessage,o=(t.match.replacements||[]).slice(0,3).map((e=>e.value)),a=t.match.rule.category.id;this.elem=createDiv({cls:[n,hr(a)]},(n=>{n.style.setProperty("left",`${t.position.left}px`),n.style.setProperty("top",`${t.position.bottom}px`),i&&n.createSpan({cls:"lt-title"},(e=>{e.createSpan({text:i})})),r&&n.createSpan({cls:"lt-message",text:r}),o.length&&n.createDiv({cls:"lt-buttoncontainer"},(e=>{for(const n of o)e.createEl("button",{text:n},(e=>{e.onclick=()=>{t.onClick(n)}}))})),n.createDiv({cls:"lt-ignorecontainer"},(n=>{n.createEl("button",{cls:"lt-ignore-btn"},(n=>{"TYPOS"===a?(e.setIcon(n.createSpan(),"plus-with-circle"),n.createSpan({text:"Add to personal dictionary"}),n.onclick=()=>{t.addToDictionary(t.matchedString)}):(e.setIcon(n.createSpan(),"cross"),n.createSpan({text:"Ignore suggestion"}),n.onclick=()=>{t.ignoreSuggestion()})}))}))})),document.body.append(this.elem);const s=this.elem.clientHeight,u=this.elem.clientWidth;t.position.bottom+s>window.innerHeight&&this.elem.style.setProperty("top",t.position.top-s+"px"),t.position.left+u>window.innerWidth&&this.elem.style.setProperty("left",window.innerWidth-u-15+"px")}destroy(){var e;null===(e=this.elem)||void 0===e||e.remove()}}function Rr(e,t){if(!e.getLine(t.line))return!1;const n=e.getTokenTypeAt(t);return!n||!fr.test(n)}function Vr(e,t,n,r){const i=t=>{var n;(null===(n=t.attributes)||void 0===n?void 0:n.isIgnored)||(e.delete(t),t.clear())};if(n&&r)return t.findMarks(n,r).forEach(i);t.getAllMarks().forEach(i)}class Or{constructor(e){this.onCodemirrorChange=(e,t)=>{if(this.openWidget&&(this.openWidget.destroy(),this.openWidget=void 0),this.markerMap.size>0&&t.origin&&"+"===t.origin[0]){const n=e.findMarksAt(t.from);n.length&&n.forEach((e=>e.clear()))}if(this.plugin.settings.shouldAutoCheck&&t.origin&&("+"===t.origin[0]||"paste"===t.origin)){const n=this.dirtyLines.has(e)?this.dirtyLines.get(e):[];t.text.forEach(((r,i)=>{const o=t.from.line+i;Rr(e,Object.assign(Object.assign({},t.from),{line:o}))&&n.push(o)})),this.dirtyLines.set(e,n),this.plugin.setStatusBarWorking(),this.checkLines(e)}},this.runAutoDetection=e=>s(this,void 0,void 0,(function*(){const t=this.dirtyLines.get(e);if(!t||0===t.length)return this.plugin.setStatusBarReady();this.dirtyLines.delete(e);const n=t.sort(((e,t)=>e-t)),r=n[n.length-1],i=e.getLine(r),o={line:n[0],ch:0},a={line:n[n.length-1],ch:i.length};try{yield this.runDetection(e,o,a)}catch(e){console.error(e),this.plugin.setStatusBarReady()}})),this.plugin=e,this.app=e.app}onload(){return s(this,void 0,void 0,(function*(){this.markerMap=new Map,this.hashLru=new u({maxSize:10}),this.dirtyLines=new WeakMap,this.checkLines=e.debounce(this.runAutoDetection,3e3,!0),this.initLegacyEditorHandler()}))}onunload(){this.openWidget&&(this.openWidget.destroy(),this.openWidget=void 0),this.app.workspace.iterateCodeMirrors((e=>{Vr(this.markerMap,e),e.off("change",this.onCodemirrorChange)}))}initLegacyEditorHandler(){this.plugin.registerCodeMirror((e=>{e.on("change",this.onCodemirrorChange)})),this.plugin.registerDomEvent(document,"pointerup",(t=>{var n,r;const i=this.app.workspace.getActiveViewOfType(e.MarkdownView);if(!i)return;if(t.target===(null===(n=this.openWidget)||void 0===n?void 0:n.element)||(null===(r=this.openWidget)||void 0===r?void 0:r.element.contains(t.target)))return;if(this.openWidget&&(this.openWidget.destroy(),this.openWidget=void 0),0===this.markerMap.size||t.target instanceof HTMLElement&&!t.target.hasClass("lt-underline"))return;const o=i.editor.cm;if(!o.getWrapperElement().contains(t.target))return;const a=o.coordsChar({left:t.clientX,top:t.clientY}),s=o.findMarksAt(a);if(0===s.length)return;const u=s[0],c=this.markerMap.get(u);if(!c)return;const{from:l,to:f}=u.find(),d=o.cursorCoords(l),h=o.getRange(l,f);this.openWidget=new Pr({match:c,matchedString:h,position:d,onClick:e=>{var t;o.replaceRange(e,l,f),u.clear(),null===(t=this.openWidget)||void 0===t||t.destroy(),this.openWidget=void 0},addToDictionary:e=>{var t;const n=this.app.vault.getConfig("spellcheckDictionary")||[];this.app.vault.setConfig("spellcheckDictionary",[...n,e]),u.clear(),null===(t=this.openWidget)||void 0===t||t.destroy(),this.openWidget=void 0},ignoreSuggestion:()=>{var e;o.markText(l,f,{clearOnEnter:!1,attributes:{isIgnored:"true"}}),u.clear(),null===(e=this.openWidget)||void 0===e||e.destroy(),this.openWidget=void 0}},this.plugin.settings.glassBg?"lt-predictions-container-glass":"lt-predictions-container")}))}runDetection(e,t,n){return s(this,void 0,void 0,(function*(){this.plugin.setStatusBarWorking();const r=e.getDoc(),i=t&&n?e.getRange(t,n):e.getValue(),o=t&&n?r.indexFromPos(t):0,a=dr(i);if(this.hashLru.has(a))return this.hashLru.get(a);let s;try{s=yield vr(i,(()=>this.plugin.settings)),this.hashLru.set(a,s)}catch(e){return this.plugin.setStatusBarReady(),Promise.reject(e)}if(t&&n?Vr(this.markerMap,e,t,n):Vr(this.markerMap,e),!s.matches)return this.plugin.setStatusBarReady();for(const t of s.matches){const n=r.posFromIndex(t.offset+o),i=e.findMarksAt(n);if(i&&i.length>0)continue;const a=r.posFromIndex(t.offset+o+t.length);if(!Rr(e,n)||!Rr(e,a)||!this.matchAllowed(e,t,n,a))continue;const s=e.markText(n,a,{className:`lt-underline ${hr(t.rule.category.id)}`,clearOnEnter:!1});this.markerMap.set(s,t)}this.plugin.setStatusBarReady()}))}matchAllowed(e,t,n,r){var i;const o=e.getRange(n,r);if("TYPOS"===t.rule.category.id){const e=this.app.vault.getConfig("spellcheckDictionary");if(e&&e.includes(o))return!1}const a=e.getLineTokens(n.line);return!a.length||!(null===(i=a[0].type)||void 0===i?void 0:i.includes("table"))||"WHITESPACE_RULE"!==t.rule.id}}class Br extends e.Plugin{constructor(){super(...arguments),this.isloading=!1,this.handleStatusBarClick=()=>{var t;const n=null===(t=this.statusBarText.parentElement)||void 0===t?void 0:t.getBoundingClientRect(),r=this.statusBarText.getBoundingClientRect();new e.Menu(this.app).addItem((t=>{t.setTitle("Check current document"),t.setIcon("checkbox-glyph"),t.onClick((()=>s(this,void 0,void 0,(function*(){const t=this.app.workspace.activeLeaf;if((null==t?void 0:t.view)instanceof e.MarkdownView&&"source"===t.view.getMode())try{this.isLegacyEditor?yield this.legacyPlugin.runDetection(t.view.editor.cm):yield this.runDetection(t.view.editor.cm,t.view)}catch(e){console.error(e)}}))))})).addItem((e=>{e.setTitle(this.settings.shouldAutoCheck?"Disable automatic checking":"Enable automatic checking"),e.setIcon("uppercase-lowercase-a"),e.onClick((()=>s(this,void 0,void 0,(function*(){this.settings.shouldAutoCheck=!this.settings.shouldAutoCheck,yield this.saveSettings()}))))})).addItem((t=>{t.setTitle("Clear suggestions"),t.setIcon("reset"),t.onClick((()=>{const t=this.app.workspace.getActiveViewOfType(e.MarkdownView);if(t)if(this.isLegacyEditor){const e=t.editor.cm;Vr(this.legacyPlugin.markerMap,e)}else{t.editor.cm.dispatch({effects:[Sr.of(null)]})}}))})).showAtPosition({x:r.right+5,y:((null==n?void 0:n.top)||0)-5})}}onload(){return s(this,void 0,void 0,(function*(){this.isLegacyEditor=Boolean(!this.app.isMobile&&this.app.vault.getConfig("legacyEditor")),yield this.loadSettings();let t=yield this.loadData();if(t&&0!==Object.keys(t).length||(t=this.settings),!t.urlMode||0===t.urlMode.length){const{serverUrl:t}=this.settings;this.settings.urlMode="https://api.languagetool.org"===t?"standard":"https://api.languagetoolplus.com"===t?"premium":"custom";try{yield this.saveSettings(),yield this.loadSettings(),new e.Notice("updated LanguageTool Settings, please confirm your server URL in the settings tab",1e4)}catch(e){console.error(e)}}if(this.settings.serverUrl.includes("/v2/check")){new e.Notice("invalid or outdated LanguageTool Settings, I'm trying to fix it.\nIf it does not work, simply reinstall the plugin",1e4),this.settings.serverUrl=this.settings.serverUrl.replace("/v2/check","");try{yield this.saveSettings()}catch(e){console.error(e)}}var r;this.addSettingTab(new br(this.app,this)),this.app.workspace.onLayoutReady((()=>{this.statusBarText=this.addStatusBarItem(),this.setStatusBarReady(),this.registerDomEvent(this.statusBarText,"click",this.handleStatusBarClick)})),this.isLegacyEditor?(this.legacyPlugin=new Or(this),yield this.legacyPlugin.onload()):(this.hashLru=new u({maxSize:10}),this.registerEditorExtension((r=this,[n.tooltips({position:"absolute",tooltipSpace:e=>{const t=e.dom.getBoundingClientRect();return{top:t.top,left:t.left,bottom:t.bottom,right:t.right}}}),Tr,qr,Ir(r),wr(r)]))),this.registerCommands()}))}onunload(){this.isLegacyEditor&&this.legacyPlugin.onunload(),this.hashLru.clear()}registerCommands(){this.addCommand({id:"ltcheck-text",name:"Check Text",editorCallback:(e,t)=>{if(this.isLegacyEditor){const t=e.cm;e.somethingSelected()?this.legacyPlugin.runDetection(t,t.getCursor("from"),t.getCursor("to")).catch((e=>{console.error(e)})):this.legacyPlugin.runDetection(t).catch((e=>{console.error(e)}))}else this.runDetection(e.cm,t).catch((e=>{console.error(e)}))}}),this.addCommand({id:"ltautocheck-text",name:"Toggle Automatic Checking",callback:()=>s(this,void 0,void 0,(function*(){this.settings.shouldAutoCheck=!this.settings.shouldAutoCheck,yield this.saveSettings()}))}),this.addCommand({id:"ltclear",name:"Clear Suggestions",editorCallback:e=>{if(this.isLegacyEditor){if(this.legacyPlugin.markerMap.size>0){const t=e.cm;Vr(this.legacyPlugin.markerMap,t)}}else{e.cm.dispatch({effects:[Sr.of(null)]})}}}),this.addCommand({id:"ltjump-to-next-suggestion",name:"Jump to next Suggestion",editorCheckCallback:(e,t)=>{const n=t.cm,r=t.posToOffset(t.getCursor());let i=null;if(n.state.field(qr).between(r+1,1/0,((e,t)=>{(!i||i.from>e)&&(i={from:e,to:t})})),e)return Boolean(i);i&&n.dispatch({selection:{anchor:i.from,head:i.to}})}}),this.addCommand({id:"ltjump-to-previous-suggestion",name:"Jump to previous Suggestion",editorCheckCallback:(e,t)=>{const n=t.cm,r=t.posToOffset(t.getCursor("from"));let i=null;if(n.state.field(qr).between(0,r-1,((e,t)=>{(!i||i.from{l.push({from:e,to:t,value:n})}));const f=1===l.length&&(null===(s=null===(a=null===(o=null===(i=null===(r=l[0])||void 0===r?void 0:r.value)||void 0===i?void 0:i.spec)||void 0===o?void 0:o.match)||void 0===a?void 0:a.replacements)||void 0===s?void 0:s.length)>=e;if(t)return f;if(!f)return void console.error("Preconditions were not successfull to apply LT-suggestions.");const{from:d,to:h,value:p}=l[0],g={from:d,to:h,insert:p.spec.match.replacements[e-1].value};u.dispatch({changes:[g],effects:[Cr.of({from:d,to:h})]})}}}setStatusBarReady(){this.isloading=!1,this.statusBarText.empty(),this.statusBarText.createSpan({cls:"lt-status-bar-btn"},(e=>{e.createSpan({cls:"lt-status-bar-check-icon",text:"Aa"})}))}setStatusBarWorking(){this.isloading||(this.isloading=!0,this.statusBarText.empty(),this.statusBarText.createSpan({cls:["lt-status-bar-btn","lt-loading"]},(t=>{e.setIcon(t,"sync-small")})))}runDetection(e,t,n,r){var i,o;return s(this,void 0,void 0,(function*(){const a=null===(i=this.app.metadataCache.getFileCache(t.file))||void 0===i?void 0:i.frontmatter;if(null===(o=null==a?void 0:a.tags)||void 0===o?void 0:o.includes("lt-ignore"))return;this.setStatusBarWorking();const s=e.state.selection.main;let u=t.data,c=0,l=!1,f=0,d=0;void 0===n&&s&&s.from!==s.to&&(n=s.from,r=s.to),void 0!==n&&void 0!==r&&(u=e.state.sliceDoc(n,r),c=n,f=n,d=r,l=!0);const h=dr(u);let p;if(this.hashLru.has(h))p=this.hashLru.get(h);else try{p=yield vr(u,(()=>this.settings)),this.hashLru.set(h,p)}catch(e){return this.setStatusBarReady(),Promise.reject(e)}const g=[];if(l?g.push(Cr.of({from:f,to:d})):g.push(Sr.of(null)),p.matches)for(const e of p.matches){const t=e.offset+c,n=e.offset+c+e.length;g.push(Er.of({from:t,to:n,match:e}))}g.length&&e.dispatch({effects:g}),this.setStatusBarReady()}))}loadSettings(){return s(this,void 0,void 0,(function*(){this.settings=Object.assign({},kr,yield this.loadData())}))}saveSettings(){return s(this,void 0,void 0,(function*(){yield this.saveData(this.settings)}))}}module.exports=Br; + +/* nosourcemap */ \ No newline at end of file diff --git a/content/notes/.obsidian/plugins/obsidian-languagetool-plugin/manifest.json b/content/notes/.obsidian/plugins/obsidian-languagetool-plugin/manifest.json new file mode 100644 index 0000000..5dc251d --- /dev/null +++ b/content/notes/.obsidian/plugins/obsidian-languagetool-plugin/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "obsidian-languagetool-plugin", + "name": "LanguageTool Integration", + "version": "0.3.7", + "minAppVersion": "0.15.2", + "description": "Inofficial LanguageTool plugin", + "author": "Clemens Ertle", + "authorUrl": "https://github.com/Clemens-E", + "isDesktopOnly": false +} diff --git a/content/notes/.obsidian/plugins/obsidian-languagetool-plugin/styles.css b/content/notes/.obsidian/plugins/obsidian-languagetool-plugin/styles.css new file mode 100644 index 0000000..de39594 --- /dev/null +++ b/content/notes/.obsidian/plugins/obsidian-languagetool-plugin/styles.css @@ -0,0 +1,204 @@ +.lt-underline { + cursor: pointer; + transition: background-color 100ms ease-out; +} + +.lt-underline.lt-minor { + box-shadow: inset 0 -2px #e9b35f; +} + +.lt-underline.lt-major { + box-shadow: inset 0 -2px #da615c; +} + +.lt-underline.lt-style { + box-shadow: inset 0 -2px #8981f3; +} + +.lt-underline.lt-minor:hover { + background-color: #e9b35f21; +} + +.lt-underline.lt-major:hover { + background-color: #da615c21; +} + +.lt-underline.lt-style:hover { + background-color: #8981f321; +} + +@keyframes lineInserted { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +.lt-predictions-container-glass.cm-tooltip, +.lt-predictions-container.cm-tooltip, +.lt-predictions-container-glass, +.lt-predictions-container { + position: absolute; + animation-duration: 150ms; + animation-name: lineInserted; + font-family: var(--default-font); + font-size: 0.93rem; + padding: 12px 0 0; + background-color: var(--background-primary); + border: 1px solid var(--background-modifier-border); + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); + border-radius: 6px; + width: 300px; + line-height: 1.5; + z-index: var(--layer-popover); + overflow: visible; +} + +.lt-predictions-container-glass { + background: hsla(0, 0%, 100%, 0.25); + backdrop-filter: blur(12px); +} + +.lt-predictions-container > button { + transition-delay: 0.5s; +} + +.lt-buttoncontainer:not(:empty) { + padding-top: 10px; +} + +.lt-buttoncontainer > button { + border: 1px solid var(--background-modifier-border); + font-size: 1rem; + margin-right: 4px; + margin-bottom: 4px; + padding: 4px 10px; +} + +.lt-title { + display: block; + font-weight: 600; + margin-bottom: 6px; + padding: 0 12px; +} + +.lt-message { + padding: 0 12px; + display: block; +} + +.lt-bottom { + min-height: 10px; + padding-left: 12px; + position: relative; +} + +.lt-info-container { + position: absolute; + right: 0; + bottom: 0; +} + +.lt-info-button { + color: var(--text-faint); +} + +.lt-info-box { + position: absolute; + right: 0; + animation-duration: 150ms; + animation-name: lineInserted; + font-family: var(--default-font); + font-size: 0.93rem; + padding: 12px 0; + background-color: var(--background-primary); + border: 1px solid var(--background-modifier-border); + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); + border-radius: 6px; + line-height: 1.5; + z-index: var(--layer-popover); + overflow: hidden; +} + +.hidden { + display: none; +} + +.lt-info { + padding: 0 12px; + display: block; + font-size: 0.8rem; + color: var(--text-muted); + user-select: text; + -webkit-user-select: text; +} + +.lt-ignorecontainer { + display: flex; +} + +.lt-status-bar-btn { + height: 100%; + display: flex; + cursor: pointer; + line-height: 1; + align-items: center; +} + +.lt-status-bar-check-icon { + display: block; + text-decoration: underline; + text-decoration-style: dotted; +} + +.lt-ignore-btn { + margin: 0; + padding: 12px; + display: flex; + width: 100%; + text-align: left; + border-radius: 0; + align-items: center; + line-height: 1; + border-top: 1px solid var(--background-modifier-border); +} + +.lt-ignore-btn > span { + display: flex; +} + +.lt-ignore-btn > span:last-child { + margin-left: 5px; +} + +.lt-minor .lt-title > span { + box-shadow: inset 0 -2px #e9b35f88; +} + +.lt-major .lt-title > span { + box-shadow: inset 0 -2px #da615c88; +} + +.lt-style .lt-title > span { + box-shadow: inset 0 -2px #8981f388; +} + +.lt-loading > svg { + animation-name: spin; + animation-duration: 1s; + animation-iteration-count: infinite; + animation-timing-function: linear; +} + +@keyframes spin { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } +} diff --git a/content/notes/.obsidian/plugins/obsidian-linter/data.json b/content/notes/.obsidian/plugins/obsidian-linter/data.json new file mode 100644 index 0000000..61d0a83 --- /dev/null +++ b/content/notes/.obsidian/plugins/obsidian-linter/data.json @@ -0,0 +1,293 @@ +{ + "ruleConfigs": { + "add-blank-line-after-yaml": { + "enabled": false + }, + "dedupe-yaml-array-values": { + "enabled": false, + "dedupe-alias-key": true, + "dedupe-tag-key": true, + "dedupe-array-keys": true, + "ignore-keys": "" + }, + "escape-yaml-special-characters": { + "enabled": false, + "try-to-escape-single-line-arrays": false + }, + "force-yaml-escape": { + "enabled": false, + "force-yaml-escape-keys": "" + }, + "format-tags-in-yaml": { + "enabled": false + }, + "format-yaml-array": { + "enabled": false, + "alias-key": true, + "tag-key": true, + "default-array-style": "single-line", + "default-array-keys": true, + "force-single-line-array-style": "", + "force-multi-line-array-style": "" + }, + "insert-yaml-attributes": { + "enabled": false, + "text-to-insert": "aliases: \ntags: " + }, + "move-tags-to-yaml": { + "enabled": false, + "how-to-handle-existing-tags": "Nothing", + "tags-to-ignore": "" + }, + "remove-yaml-keys": { + "enabled": false, + "yaml-keys-to-remove": "" + }, + "sort-yaml-array-values": { + "enabled": false, + "sort-alias-key": true, + "sort-tag-key": true, + "sort-array-keys": true, + "ignore-keys": "", + "sort-order": "Ascending Alphabetical" + }, + "yaml-key-sort": { + "enabled": false, + "yaml-key-priority-sort-order": "", + "priority-keys-at-start-of-yaml": true, + "yaml-sort-order-for-other-keys": "None" + }, + "yaml-timestamp": { + "enabled": false, + "date-created": true, + "date-created-key": "date created", + "date-created-source-of-truth": "file system", + "date-modified": true, + "date-modified-key": "date modified", + "date-modified-source-of-truth": "file system", + "format": "dddd, MMMM Do YYYY, h:mm:ss a", + "convert-to-utc": false, + "update-on-file-contents-updated": "never" + }, + "yaml-title": { + "enabled": false, + "title-key": "title", + "mode": "first-h1-or-filename-if-h1-missing" + }, + "yaml-title-alias": { + "enabled": false, + "preserve-existing-alias-section-style": true, + "keep-alias-that-matches-the-filename": false, + "use-yaml-key-to-keep-track-of-old-filename-or-heading": true, + "alias-helper-key": "linter-yaml-title-alias" + }, + "capitalize-headings": { + "enabled": true, + "style": "Title Case", + "ignore-case-words": true, + "ignore-words": "macOS, iOS, iPhone, iPad, JavaScript, TypeScript, AppleScript, I", + "lowercase-words": "a, an, the, aboard, about, abt., above, abreast, absent, across, after, against, along, aloft, alongside, amid, amidst, mid, midst, among, amongst, anti, apropos, around, round, as, aslant, astride, at, atop, ontop, bar, barring, before, B4, behind, below, beneath, neath, beside, besides, between, 'tween, beyond, but, by, chez, circa, c., ca., come, concerning, contra, counting, cum, despite, spite, down, during, effective, ere, except, excepting, excluding, failing, following, for, from, in, including, inside, into, less, like, minus, modulo, mod, near, nearer, nearest, next, notwithstanding, of, o', off, offshore, on, onto, opposite, out, outside, over, o'er, pace, past, pending, per, plus, post, pre, pro, qua, re, regarding, respecting, sans, save, saving, short, since, sub, than, through, thru, throughout, thruout, till, times, to, t', touching, toward, towards, under, underneath, unlike, until, unto, up, upon, versus, vs., v., via, vice, vis-à-vis, wanting, with, w/, w., c̄, within, w/i, without, 'thout, w/o, abroad, adrift, aft, afterward, afterwards, ahead, apart, ashore, aside, away, back, backward, backwards, beforehand, downhill, downstage, downstairs, downstream, downward, downwards, downwind, east, eastward, eastwards, forth, forward, forwards, heavenward, heavenwards, hence, henceforth, here, hereby, herein, hereof, hereto, herewith, home, homeward, homewards, indoors, inward, inwards, leftward, leftwards, north, northeast, northward, northwards, northwest, now, onward, onwards, outdoors, outward, outwards, overboard, overhead, overland, overseas, rightward, rightwards, seaward, seawards, skywards, skyward, south, southeast, southwards, southward, southwest, then, thence, thenceforth, there, thereby, therein, thereof, thereto, therewith, together, underfoot, underground, uphill, upstage, upstairs, upstream, upward, upwards, upwind, west, westward, westwards, when, whence, where, whereby, wherein, whereto, wherewith, although, because, considering, given, granted, if, lest, once, provided, providing, seeing, so, supposing, though, unless, whenever, whereas, wherever, while, whilst, ago, according to, as regards, counter to, instead of, owing to, pertaining to, at the behest of, at the expense of, at the hands of, at risk of, at the risk of, at variance with, by dint of, by means of, by virtue of, by way of, for the sake of, for sake of, for lack of, for want of, from want of, in accordance with, in addition to, in case of, in charge of, in compliance with, in conformity with, in contact with, in exchange for, in favor of, in front of, in lieu of, in light of, in the light of, in line with, in place of, in point of, in quest of, in relation to, in regard to, with regard to, in respect to, with respect to, in return for, in search of, in step with, in touch with, in terms of, in the name of, in view of, on account of, on behalf of, on grounds of, on the grounds of, on the part of, on top of, with a view to, with the exception of, à la, a la, as soon as, as well as, close to, due to, far from, in case, other than, prior to, pursuant to, regardless of, subsequent to, as long as, as much as, as far as, by the time, in as much as, inasmuch, in order to, in order that, even, provide that, if only, whether, whose, whoever, why, how, or not, whatever, what, both, and, or, not only, but also, either, neither, nor, just, rather, no sooner, such, that, yet, is, it" + }, + "file-name-heading": { + "enabled": false + }, + "header-increment": { + "enabled": true, + "start-at-h2": true + }, + "headings-start-line": { + "enabled": true + }, + "remove-trailing-punctuation-in-heading": { + "enabled": false, + "punctuation-to-remove": ".,;:!。,;:!" + }, + "footnote-after-punctuation": { + "enabled": false + }, + "move-footnotes-to-the-bottom": { + "enabled": false + }, + "re-index-footnotes": { + "enabled": false + }, + "auto-correct-common-misspellings": { + "enabled": false, + "ignore-words": "", + "skip-words-with-multiple-capitals": false, + "extra-auto-correct-files": [] + }, + "blockquote-style": { + "enabled": true, + "style": "space" + }, + "convert-bullet-list-markers": { + "enabled": false + }, + "default-language-for-code-fences": { + "enabled": false, + "default-language": "" + }, + "emphasis-style": { + "enabled": true, + "style": "asterisk" + }, + "no-bare-urls": { + "enabled": false, + "no-bare-uris": false + }, + "ordered-list-style": { + "enabled": true, + "number-style": "ascending", + "list-end-style": ".", + "preserve-start": true + }, + "proper-ellipsis": { + "enabled": false + }, + "quote-style": { + "enabled": true, + "single-quote-enabled": true, + "single-quote-style": "''", + "double-quote-enabled": true, + "double-quote-style": "\"\"" + }, + "remove-consecutive-list-markers": { + "enabled": true + }, + "remove-empty-list-markers": { + "enabled": true + }, + "remove-hyphenated-line-breaks": { + "enabled": true + }, + "remove-multiple-spaces": { + "enabled": true + }, + "strong-style": { + "enabled": true, + "style": "asterisk" + }, + "two-spaces-between-lines-with-content": { + "enabled": true, + "line-break-indicator": " " + }, + "unordered-list-style": { + "enabled": true, + "list-style": "-" + }, + "compact-yaml": { + "enabled": false, + "inner-new-lines": false + }, + "consecutive-blank-lines": { + "enabled": false + }, + "convert-spaces-to-tabs": { + "enabled": false, + "tabsize": 4 + }, + "empty-line-around-blockquotes": { + "enabled": true + }, + "empty-line-around-code-fences": { + "enabled": true + }, + "empty-line-around-horizontal-rules": { + "enabled": true + }, + "empty-line-around-math-blocks": { + "enabled": true + }, + "empty-line-around-tables": { + "enabled": true + }, + "heading-blank-lines": { + "enabled": true, + "bottom": true, + "empty-line-after-yaml": true + }, + "line-break-at-document-end": { + "enabled": true + }, + "move-math-block-indicators-to-their-own-line": { + "enabled": false + }, + "paragraph-blank-lines": { + "enabled": false + }, + "remove-empty-lines-between-list-markers-and-checklists": { + "enabled": false + }, + "remove-link-spacing": { + "enabled": false + }, + "remove-space-around-characters": { + "enabled": false, + "include-fullwidth-forms": true, + "include-cjk-symbols-and-punctuation": true, + "include-dashes": true, + "other-symbols": "" + }, + "remove-space-before-or-after-characters": { + "enabled": false, + "characters-to-remove-space-before": ",!?;:).’”]", + "characters-to-remove-space-after": "¿¡‘“([" + }, + "space-after-list-markers": { + "enabled": false + }, + "space-between-chinese-japanese-or-korean-and-english-or-numbers": { + "enabled": false, + "english-symbols-punctuation-before": "-+;:'\"°%$)]", + "english-symbols-punctuation-after": "-+'\"([¥$" + }, + "trailing-spaces": { + "enabled": false, + "twp-space-line-break": false + }, + "add-blockquote-indentation-on-paste": { + "enabled": false + }, + "prevent-double-checklist-indicator-on-paste": { + "enabled": false + }, + "prevent-double-list-item-indicator-on-paste": { + "enabled": false + }, + "proper-ellipsis-on-paste": { + "enabled": false + }, + "remove-hyphens-on-paste": { + "enabled": false + }, + "remove-leading-or-trailing-whitespace-on-paste": { + "enabled": false + }, + "remove-leftover-footnotes-from-quote-on-paste": { + "enabled": false + }, + "remove-multiple-blank-lines-on-paste": { + "enabled": false + } + }, + "lintOnSave": true, + "recordLintOnSaveLogs": false, + "displayChanged": true, + "lintOnFileChange": false, + "displayLintOnFileChangeNotice": false, + "settingsConvertedToConfigKeyValues": true, + "foldersToIgnore": [], + "filesToIgnore": [], + "linterLocale": "system-default", + "logLevel": "ERROR", + "lintCommands": [], + "customRegexes": [], + "commonStyles": { + "aliasArrayStyle": "single-line", + "tagArrayStyle": "single-line", + "minimumNumberOfDollarSignsToBeAMathBlock": 2, + "escapeCharacter": "\"", + "removeUnnecessaryEscapeCharsForMultiLineArrays": false + } +} \ No newline at end of file diff --git a/content/notes/.obsidian/plugins/obsidian-linter/main.js b/content/notes/.obsidian/plugins/obsidian-linter/main.js new file mode 100644 index 0000000..00b3c7e --- /dev/null +++ b/content/notes/.obsidian/plugins/obsidian-linter/main.js @@ -0,0 +1,325 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var mf=Object.create;var or=Object.defineProperty;var ou=Object.getOwnPropertyDescriptor;var ff=Object.getOwnPropertyNames;var gf=Object.getPrototypeOf,hf=Object.prototype.hasOwnProperty;var Tn=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),su=(e,n)=>{for(var t in n)or(e,t,{get:n[t],enumerable:!0})},lu=(e,n,t,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of ff(n))!hf.call(e,r)&&r!==t&&or(e,r,{get:()=>n[r],enumerable:!(i=ou(n,r))||i.enumerable});return e};var Cn=(e,n,t)=>(t=e!=null?mf(gf(e)):{},lu(n||!e||!e.__esModule?or(t,"default",{value:e,enumerable:!0}):t,e)),yf=e=>lu(or({},"__esModule",{value:!0}),e),L=(e,n,t,i)=>{for(var r=i>1?void 0:i?ou(n,t):n,a=e.length-1,o;a>=0;a--)(o=e[a])&&(r=(i?o(n,t,r):o(r))||r);return i&&r&&or(n,t,r),r};var Gs=(e,n,t)=>{if(!n.has(e))throw TypeError("Cannot "+t)};var Y=(e,n,t)=>(Gs(e,n,"read from private field"),t?t.call(e):n.get(e)),xe=(e,n,t)=>{if(n.has(e))throw TypeError("Cannot add the same private member more than once");n instanceof WeakSet?n.add(e):n.set(e,t)},Fe=(e,n,t,i)=>(Gs(e,n,"write to private field"),i?i.call(e,t):n.set(e,t),t);var Zs=(e,n,t,i)=>({set _(r){Fe(e,n,r,t)},get _(){return Y(e,n,i)}}),me=(e,n,t)=>(Gs(e,n,"access private method"),t);var so=Tn((Ju,oo)=>{(function(e,n){"use strict";typeof define=="function"&&define.amd?define(n):typeof oo=="object"&&oo.exports?oo.exports=n():e.log=n()})(Ju,function(){"use strict";var e=function(){},n="undefined",t=typeof window!==n&&typeof window.navigator!==n&&/Trident\/|MSIE /.test(window.navigator.userAgent),i=["trace","debug","info","warn","error"],r={},a=null;function o(f,b){var h=f[b];if(typeof h.bind=="function")return h.bind(f);try{return Function.prototype.bind.call(h,f)}catch{return function(){return Function.prototype.apply.apply(h,[f,arguments])}}}function s(){console.log&&(console.log.apply?console.log.apply(console,arguments):Function.prototype.apply.apply(console.log,[console,arguments])),console.trace&&console.trace()}function l(f){return f==="debug"&&(f="log"),typeof console===n?!1:f==="trace"&&t?s:console[f]!==void 0?o(console,f):console.log!==void 0?o(console,"log"):e}function c(){for(var f=this.getLevel(),b=0;b=0&&V<=h.levels.SILENT)return V;throw new TypeError("log.setLevel() called with invalid level: "+z)}h.name=f,h.levels={TRACE:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,SILENT:5},h.methodFactory=b||d,h.getLevel=function(){return S??A??k},h.setLevel=function(z,V){return S=N(z),V!==!1&&M(S),c.call(h)},h.setDefaultLevel=function(z){A=N(z),E()||h.setLevel(z,!1)},h.resetLevel=function(){S=null,O(),c.call(h)},h.enableAll=function(z){h.setLevel(h.levels.TRACE,z)},h.disableAll=function(z){h.setLevel(h.levels.SILENT,z)},h.rebuild=function(){if(a!==h&&(k=N(a.getLevel())),c.call(h),a===h)for(var z in r)r[z].rebuild()},k=N(a?a.getLevel():"WARN");var B=E();B!=null&&(S=N(B)),c.call(h)}a=new m,a.getLogger=function(b){if(typeof b!="symbol"&&typeof b!="string"||b==="")throw new TypeError("You must supply a name when creating a logger.");var h=r[b];return h||(h=r[b]=new m(b,a.methodFactory)),h};var p=typeof window!==n?window.log:void 0;return a.noConflict=function(){return typeof window!==n&&window.log===a&&(window.log=p),a},a.getLoggers=function(){return r},a.default=a,a})});var Yd=Tn((HE,Kl)=>{(function(){var e;typeof Kl<"u"?e=Kl.exports=i:e=function(){return this||(0,eval)("this")}(),e.format=i,e.vsprintf=t,typeof console<"u"&&typeof console.log=="function"&&(e.printf=n);function n(){console.log(i.apply(null,arguments))}function t(r,a){return i.apply(null,[r].concat(a))}function i(r){for(var a=1,o=[].slice.call(arguments),s=0,l=r.length,c="",u,d=!1,m,p,f=!1,b,h=function(){return o[a++]},k=function(){for(var A="";/\d/.test(r[s]);)A+=r[s++],u=r[s];return A.length>0?parseInt(A):null};s{var I=function(){this.Diff_Timeout=1,this.Diff_EditCost=4,this.Match_Threshold=.5,this.Match_Distance=1e3,this.Patch_DeleteThreshold=.5,this.Patch_Margin=4,this.Match_MaxBits=32},ie=-1,oe=1,G=0;I.Diff=function(e,n){return[e,n]};I.prototype.diff_main=function(e,n,t,i){typeof i>"u"&&(this.Diff_Timeout<=0?i=Number.MAX_VALUE:i=new Date().getTime()+this.Diff_Timeout*1e3);var r=i;if(e==null||n==null)throw new Error("Null input. (diff_main)");if(e==n)return e?[new I.Diff(G,e)]:[];typeof t>"u"&&(t=!0);var a=t,o=this.diff_commonPrefix(e,n),s=e.substring(0,o);e=e.substring(o),n=n.substring(o),o=this.diff_commonSuffix(e,n);var l=e.substring(e.length-o);e=e.substring(0,e.length-o),n=n.substring(0,n.length-o);var c=this.diff_compute_(e,n,a,r);return s&&c.unshift(new I.Diff(G,s)),l&&c.push(new I.Diff(G,l)),this.diff_cleanupMerge(c),c};I.prototype.diff_compute_=function(e,n,t,i){var r;if(!e)return[new I.Diff(oe,n)];if(!n)return[new I.Diff(ie,e)];var a=e.length>n.length?e:n,o=e.length>n.length?n:e,s=a.indexOf(o);if(s!=-1)return r=[new I.Diff(oe,a.substring(0,s)),new I.Diff(G,o),new I.Diff(oe,a.substring(s+o.length))],e.length>n.length&&(r[0][0]=r[2][0]=ie),r;if(o.length==1)return[new I.Diff(ie,e),new I.Diff(oe,n)];var l=this.diff_halfMatch_(e,n);if(l){var c=l[0],u=l[1],d=l[2],m=l[3],p=l[4],f=this.diff_main(c,d,t,i),b=this.diff_main(u,m,t,i);return f.concat([new I.Diff(G,p)],b)}return t&&e.length>100&&n.length>100?this.diff_lineMode_(e,n,i):this.diff_bisect_(e,n,i)};I.prototype.diff_lineMode_=function(e,n,t){var i=this.diff_linesToChars_(e,n);e=i.chars1,n=i.chars2;var r=i.lineArray,a=this.diff_main(e,n,!1,t);this.diff_charsToLines_(a,r),this.diff_cleanupSemantic(a),a.push(new I.Diff(G,""));for(var o=0,s=0,l=0,c="",u="";o=1&&l>=1){a.splice(o-s-l,s+l),o=o-s-l;for(var d=this.diff_main(c,u,!1,t),m=d.length-1;m>=0;m--)a.splice(o,0,d[m]);o=o+d.length}l=0,s=0,c="",u="";break}o++}return a.pop(),a};I.prototype.diff_bisect_=function(e,n,t){for(var i=e.length,r=n.length,a=Math.ceil((i+r)/2),o=a,s=2*a,l=new Array(s),c=new Array(s),u=0;ut);k++){for(var A=-k+p;A<=k-f;A+=2){var S=o+A,T;A==-k||A!=k&&l[S-1]i)f+=2;else if(M>r)p+=2;else if(m){var E=o+d-A;if(E>=0&&E=O)return this.diff_bisectSplit_(e,n,T,M,t)}}}for(var N=-k+b;N<=k-h;N+=2){var E=o+N,O;N==-k||N!=k&&c[E-1]i)h+=2;else if(B>r)b+=2;else if(!m){var S=o+d-N;if(S>=0&&S=O)return this.diff_bisectSplit_(e,n,T,M,t)}}}}return[new I.Diff(ie,e),new I.Diff(oe,n)]};I.prototype.diff_bisectSplit_=function(e,n,t,i,r){var a=e.substring(0,t),o=n.substring(0,i),s=e.substring(t),l=n.substring(i),c=this.diff_main(a,o,!1,r),u=this.diff_main(s,l,!1,r);return c.concat(u)};I.prototype.diff_linesToChars_=function(e,n){var t=[],i={};t[0]="";function r(l){for(var c="",u=0,d=-1,m=t.length;di?e=e.substring(t-i):tn.length?e:n,i=e.length>n.length?n:e;if(t.length<4||i.length*2=f.length?[T,M,E,O,S]:null}var o=a(t,i,Math.ceil(t.length/4)),s=a(t,i,Math.ceil(t.length/2)),l;if(!o&&!s)return null;s?o?l=o[4].length>s[4].length?o:s:l=s:l=o;var c,u,d,m;e.length>n.length?(c=l[0],u=l[1],d=l[2],m=l[3]):(d=l[0],m=l[1],c=l[2],u=l[3]);var p=l[4];return[c,u,d,m,p]};I.prototype.diff_cleanupSemantic=function(e){for(var n=!1,t=[],i=0,r=null,a=0,o=0,s=0,l=0,c=0;a0?t[i-1]:-1,o=0,s=0,l=0,c=0,r=null,n=!0)),a++;for(n&&this.diff_cleanupMerge(e),this.diff_cleanupSemanticLossless(e),a=1;a=p?(m>=u.length/2||m>=d.length/2)&&(e.splice(a,0,new I.Diff(G,d.substring(0,m))),e[a-1][1]=u.substring(0,u.length-m),e[a+1][1]=d.substring(m),a++):(p>=u.length/2||p>=d.length/2)&&(e.splice(a,0,new I.Diff(G,u.substring(0,p))),e[a-1][0]=oe,e[a-1][1]=d.substring(0,d.length-p),e[a+1][0]=ie,e[a+1][1]=u.substring(p),a++),a++}a++}};I.prototype.diff_cleanupSemanticLossless=function(e){function n(p,f){if(!p||!f)return 6;var b=p.charAt(p.length-1),h=f.charAt(0),k=b.match(I.nonAlphaNumericRegex_),A=h.match(I.nonAlphaNumericRegex_),S=k&&b.match(I.whitespaceRegex_),T=A&&h.match(I.whitespaceRegex_),M=S&&b.match(I.linebreakRegex_),E=T&&h.match(I.linebreakRegex_),O=M&&p.match(I.blanklineEndRegex_),N=E&&f.match(I.blanklineStartRegex_);return O||N?5:M||E?4:k&&!S&&T?3:S||T?2:k||A?1:0}for(var t=1;t=d&&(d=m,l=i,c=r,u=a)}e[t-1][1]!=l&&(l?e[t-1][1]=l:(e.splice(t-1,1),t--),e[t][1]=c,u?e[t+1][1]=u:(e.splice(t+1,1),t--))}t++}};I.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;I.whitespaceRegex_=/\s/;I.linebreakRegex_=/[\r\n]/;I.blanklineEndRegex_=/\n\r?\n$/;I.blanklineStartRegex_=/^\r?\n\r?\n/;I.prototype.diff_cleanupEfficiency=function(e){for(var n=!1,t=[],i=0,r=null,a=0,o=!1,s=!1,l=!1,c=!1;a0?t[i-1]:-1,l=c=!1),n=!0)),a++;n&&this.diff_cleanupMerge(e)};I.prototype.diff_cleanupMerge=function(e){e.push(new I.Diff(G,""));for(var n=0,t=0,i=0,r="",a="",o;n1?(t!==0&&i!==0&&(o=this.diff_commonPrefix(a,r),o!==0&&(n-t-i>0&&e[n-t-i-1][0]==G?e[n-t-i-1][1]+=a.substring(0,o):(e.splice(0,0,new I.Diff(G,a.substring(0,o))),n++),a=a.substring(o),r=r.substring(o)),o=this.diff_commonSuffix(a,r),o!==0&&(e[n][1]=a.substring(a.length-o)+e[n][1],a=a.substring(0,a.length-o),r=r.substring(0,r.length-o))),n-=t+i,e.splice(n,t+i),r.length&&(e.splice(n,0,new I.Diff(ie,r)),n++),a.length&&(e.splice(n,0,new I.Diff(oe,a)),n++),n++):n!==0&&e[n-1][0]==G?(e[n-1][1]+=e[n][1],e.splice(n,1)):n++,i=0,t=0,r="",a="";break}e[e.length-1][1]===""&&e.pop();var s=!1;for(n=1;nn));o++)r=t,a=i;return e.length!=o&&e[o][0]===ie?a:a+(n-r)};I.prototype.diff_prettyHtml=function(e){for(var n=[],t=/&/g,i=//g,a=/\n/g,o=0;o");switch(s){case oe:n[o]=''+c+"";break;case ie:n[o]=''+c+"";break;case G:n[o]=""+c+"";break}}return n.join("")};I.prototype.diff_text1=function(e){for(var n=[],t=0;tthis.Match_MaxBits)throw new Error("Pattern too long for this browser.");var i=this.match_alphabet_(n),r=this;function a(T,M){var E=T/n.length,O=Math.abs(t-M);return r.Match_Distance?E+O/r.Match_Distance:O?1:E}var o=this.Match_Threshold,s=e.indexOf(n,t);s!=-1&&(o=Math.min(a(0,s),o),s=e.lastIndexOf(n,t+n.length),s!=-1&&(o=Math.min(a(0,s),o)));var l=1<=f;k--){var A=i[e.charAt(k-1)];if(p===0?h[k]=(h[k+1]<<1|1)&A:h[k]=(h[k+1]<<1|1)&A|((m[k+1]|m[k])<<1|1)|m[k+1],h[k]&l){var S=a(p,k-1);if(S<=o)if(o=S,s=k-1,s>t)f=Math.max(1,2*t-s);else break}}if(a(p+1,t)>o)break;m=h}return s};I.prototype.match_alphabet_=function(e){for(var n={},t=0;t"u")i=e,r=this.diff_main(i,n,!0),r.length>2&&(this.diff_cleanupSemantic(r),this.diff_cleanupEfficiency(r));else if(e&&typeof e=="object"&&typeof n>"u"&&typeof t>"u")r=e,i=this.diff_text1(r);else if(typeof e=="string"&&n&&typeof n=="object"&&typeof t>"u")i=e,r=n;else if(typeof e=="string"&&typeof n=="string"&&t&&typeof t=="object")i=e,r=t;else throw new Error("Unknown call format to patch_make.");if(r.length===0)return[];for(var a=[],o=new I.patch_obj,s=0,l=0,c=0,u=i,d=i,m=0;m=2*this.Patch_Margin&&s&&(this.patch_addContext_(o,u),a.push(o),o=new I.patch_obj,s=0,u=d,l=c);break}p!==oe&&(l+=f.length),p!==ie&&(c+=f.length)}return s&&(this.patch_addContext_(o,u),a.push(o)),a};I.prototype.patch_deepCopy=function(e){for(var n=[],t=0;tthis.Match_MaxBits?(l=this.match_main(n,s.substring(0,this.Match_MaxBits),o),l!=-1&&(c=this.match_main(n,s.substring(s.length-this.Match_MaxBits),o+s.length-this.Match_MaxBits),(c==-1||l>=c)&&(l=-1))):l=this.match_main(n,s,o),l==-1)r[a]=!1,i-=e[a].length2-e[a].length1;else{r[a]=!0,i=l-o;var u;if(c==-1?u=n.substring(l,l+s.length):u=n.substring(l,c+this.Match_MaxBits),s==u)n=n.substring(0,l)+this.diff_text2(e[a].diffs)+n.substring(l+s.length);else{var d=this.diff_main(s,u,!1);if(s.length>this.Match_MaxBits&&this.diff_levenshtein(d)/s.length>this.Patch_DeleteThreshold)r[a]=!1;else{this.diff_cleanupSemanticLossless(d);for(var m=0,p,f=0;fa[0][1].length){var o=n-a[0][1].length;a[0][1]=t.substring(a[0][1].length)+a[0][1],r.start1-=o,r.start2-=o,r.length1+=o,r.length2+=o}if(r=e[e.length-1],a=r.diffs,a.length==0||a[a.length-1][0]!=G)a.push(new I.Diff(G,t)),r.length1+=n,r.length2+=n;else if(n>a[a.length-1][1].length){var o=n-a[a.length-1][1].length;a[a.length-1][1]+=t.substring(0,o),r.length1+=o,r.length2+=o}return t};I.prototype.patch_splitMax=function(e){for(var n=this.Match_MaxBits,t=0;t2*n?(s.length1+=u.length,r+=u.length,l=!1,s.diffs.push(new I.Diff(c,u)),i.diffs.shift()):(u=u.substring(0,n-s.length1-this.Patch_Margin),s.length1+=u.length,r+=u.length,c===G?(s.length2+=u.length,a+=u.length):l=!1,s.diffs.push(new I.Diff(c,u)),u==i.diffs[0][1]?i.diffs.shift():i.diffs[0][1]=i.diffs[0][1].substring(u.length))}o=this.diff_text2(s.diffs),o=o.substring(o.length-this.Patch_Margin);var d=this.diff_text1(i.diffs).substring(0,this.Patch_Margin);d!==""&&(s.length1+=d.length,s.length2+=d.length,s.diffs.length!==0&&s.diffs[s.diffs.length-1][0]===G?s.diffs[s.diffs.length-1][1]+=d:s.diffs.push(new I.Diff(G,d))),l||e.splice(++t,0,s)}}};I.prototype.patch_toText=function(e){for(var n=[],t=0;t{Ym.exports=hA;var pw=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],mw=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],fw=["Su","Mo","Tu","We","Th","Fr","Sa"],Ms=["January","February","March","April","May","June","July","August","September","October","November","December"],gw=["ACDT","ACST","ACWT","ADT","ACT","AEDT","AEST","AFT","AKDT","AKST","ALMT","AMT","AMST","ANAT","ANAST","AQTT","ART","AST","AWDT","AWST","AZOT","AZOST","AZT","AZST","BNT","BDT","BOT","BRT","BRST","BST","BTT","B","CAST","CAT","CCT","CDT","CEDT","CEST","CET","CHADT","CHAST","CHOT","CHOST","CHsT","CHUT","CIT","CKT","CLST","CLT","COT","CST","CVT","CWST","CXT","C","DAVT","DDUT","DST","EASST","EAST","EAT","ECT","EDT","EEDT","EEST","EET","EGT","EGST","EST","E","EIT","FET","FJT","FJST","FKST","FKT","FNT","F","GALT","GAMT","GET","GFT","GILT","GMT","GST","GYT","G","HADT","HAST","HKT","HOVT","HOVST","HST","ICT","IDT","IOT","IRDT","IRKT","IRKST","IRST","IST","JST","KGT","KOST","KRAT","KRAST","KST","KUYT","LHDT","LHST","LINT","L","MAGT","MAGST","MART","MAWT","MDT","MeST","MHT","MIST","MMT","MSD","MSK","MST","MUT","MVT","MYT","NCT","NDT","NFT","N","NOVT","NOVST","NPT","NRT","NST","NT","NUT","NZDT","NZST","OMST","OMSST","ORAT","O","PDT","PET","PETT","PETST","PGT","PHT","PHOT","PKT","PMDT","PMST","PONT","PST","PWT","PYT","PYST","P","QYZT","RET","ROTT","R","SAKT","SAMT","SAST","SBT","SCT","SGT","SRT","SLT","SLST","SRET","SST","SYOT","TAHT","TFT","TJT","TKT","TLT","TMT","TOT","TRUT","TVT","T","ULAT","ULAST","UTC","UYST","UYT","UZT","U","VET","VLAT","VLAST","VOLT","VUT","V","WAKT","WAT","WAST","WDT","WEDT","WEST","WET","WFT","WGT","WGST","WIB","WIT","WITA","WST","WT","YAKT","YAKST","YAP","YEK","YEKS"],Is=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],hw=new RegExp(pw.join("|"),"i"),yw=new RegExp(mw.join("|"),"i"),bw=new RegExp("\\b("+fw.join("|")+")\\b","i"),vw=new RegExp(Ms.join("|"),"i"),kw=new RegExp(Is.join("|"),"i"),ww=new RegExp("\\b("+gw.join("|")+")\\b","i"),Aw=/(\d+)(st|nd|rd|th)\b/i,xw=/(\d{1,4})([/.-])(\d{1,2})[/.-](\d{1,4})/,Lw=/((\+|-)(12:00|11:00|10:00|09:30|09:00|08:00|07:00|06:00|05:00|04:00|03:30|03:00|02:00|01:00|00:00|01:00|02:00|03:00|03:30|04:00|04:30|05:00|05:30|05:45|06:00|06:30|07:00|08:00|08:45|09:00|09:30|10:00|10:30|11:00|12:00|12:45|13:00|14:00))$/,Sw=/((\+|-)(1200|1100|1000|0930|0900|0800|0700|0600|0500|0400|0330|0300|0200|0100|0000|0100|0200|0300|0330|0400|0430|0500|0530|0545|0600|0630|0700|0800|0845|0900|0930|1000|1030|1100|1200|1245|1300|1400))$/,Ji="("+["AM?","PM?"].join("|")+")",Ew=new RegExp("0\\d\\:\\d{1,2}\\:\\d{1,2}(\\s*)"+Ji,"i"),Tw=new RegExp("0\\d\\:\\d{1,2}(\\s*)"+Ji,"i"),Cw=new RegExp("0\\d(\\s*)"+Ji,"i"),Ow=new RegExp("\\d{1,2}\\:\\d{1,2}\\:\\d{1,2}(\\s*)"+Ji,"i"),Mw=new RegExp("\\d{1,2}\\:\\d{1,2}(\\s*)"+Ji,"i"),Iw=new RegExp("\\d{1,2}(\\s*)"+Ji,"i"),Fw=new RegExp("\\d{1,2}"),Rw=new RegExp(Ms.join("|")+"-\\d{2}","i"),Bw=new RegExp(Is.join("|")+"-\\d{2}","i"),Xc=new RegExp("(\\d{1,2})(\\D+)("+Ms.join("|")+"|"+Is.join("|")+")(\\2)('?\\d{2,4})"),Dw=/\d{2}:\d{2}:\d{2}\.\d{3}/,Kw=/\d{2}:\d{2}:\d{2}\.\d{2}/,zw=/\d{2}:\d{2}:\d{2}\.\d{1}/,Nw=/T\d{2}:\d{2}:\d{2}/,Yw=/0\d:\d{2}:\d{2}/,_w=/0\d:\d{2}/,Pw=/\b([01]?[0-9]|2[0-3]):[0-5][0-9]:\d{2}/,Hw=/\b([01]?[0-9]|2[0-3]):[0-5][0-9]:\d{2}\.\d{3}/,qw=/\b([01]?[0-9]|2[0-3]):[0-5][0-9]:\d{2}\.\d{2}/,Uw=/\b([01]?[0-9]|2[0-3]):[0-5][0-9]:\d{2}\.\d{1}/,Ww=/\b([01]?[0-9]|2[0-3]):[0-5][0-9]/,Vw=/24:00:\d{2}/,jw=/24:00:\d{2}\.\d{3}/,$w=/24:00:\d{2}\.\d{2}/,Gw=/24:00:\d{2}\.\d{1}/,Zw=/24:00/,Qw=/\d{4}/,Jw=/\d{2}/,Xw=/'\d{2}/,Bm=/0\d/,Dm=/\d{1,2}/,eA=/0\d/,tA=/\d{1,2}/,nA=/^([1-9])\/([1-9]|0[1-9])$/,iA=/^([1-9])\/(1[012])$/,rA=/^(0[1-9]|[12][0-9]|3[01])\/([1-9])$/,aA=/^(0[1-9]|[12][0-9]|3[01])\/(1[012]|0[1-9])$/,oA=/^([1-9])(\D)([1-9][0-9])$/,sA=/^([1-9])(\D)([0][0-9])$/,lA=/^(0[1-9]|1[012])(\D)([1-9][0-9])$/,cA=/^(0[1-9]|1[012])(\D)([0][0-9])$/,eu=/([/][M]|[M][/]|[MM]|[MMMM])/,Km=/(D)/,tu=/(Y)/,zm=/\d+\D.+$/,Nm=/\D+(\d+)($|Z)/,uA=/M\s*\d{1,2}\b.+$/,dA=/M\D+(0[1-9])\b.+$/,Os=/\d+\s+(H|h|k)/,pA=/\b(at)\b/i,mA=/\d{13}/,fA=/\d{10}/,gA={"/":"MDY",".":"DMY","-":"YMD"};function hA(e,n){var t=e.toString();if(n=n||{},n.preferredOrder=n.preferredOrder||gA,t=t.replace(mA,"x"),t=t.replace(fA,"X"),t=t.replace(pA,"[$1]"),t.match(Xc)){let[,c,u,d,m,p]=t.match(Xc),f=[];c.length===2&&c[0]==="0"||n.preferLongFormat?f.push("DD"):f.push("D"),f.push(u),d.match(Ms)?f.push("MMMM"):d.match(Is)?f.push("MMM"):f.push(d),f.push(m),p[0]==="'"?f.push("'YY"):p.length===2?f.push("YY"):(p.length,f.push("YYYY"));var i=f.join("");t=t.replace(Xc,i)}t=t.replace(hw,"dddd"),t=t.replace(yw,"ddd"),t=t.replace(bw,"dd"),t=t.replace(Aw,"Do"),t=t.replace(vw,"MMMM"),t=t.replace(kw,"MMM"),t=t.replace(xw,yA.bind(null,n)),t=t.replace(ww,c=>"["+c+"]"),t=t.replace(Lw,"Z"),t=t.replace(Sw,"ZZ"),t=t.replace(Dw,"HH:mm:ss.SSS"),t=t.replace(Kw,"HH:mm:ss.SS"),t=t.replace(zw,"HH:mm:ss.S"),t=t.replace(Nw,"THH:mm:ss");function r(c){return function(u,d,m){return c+d+(m[0].toUpperCase()===m[0]?"A":"a")}}if(t=t.replace(Ew,r("hh:mm:ss")),t=t.replace(Ow,r("h:mm:ss")),t=t.replace(Tw,r("hh:mm")),t=t.replace(Mw,r("h:mm")),t=t.replace(Cw,r("hh")),t=t.replace(Iw,r("h")),t=t.replace(Yw,"HH:mm:ss"),t=t.replace(Hw,"H:mm:ss.SSS"),t=t.replace(jw,(n.preferLongFormat?"kk":"k")+":mm:ss.SSS"),t=t.replace(qw,"H:mm:ss.SS"),t=t.replace($w,(n.preferLongFormat?"kk":"k")+":mm:ss.SS"),t=t.replace(Uw,"H:mm:ss.S"),t=t.replace(Gw,(n.preferLongFormat?"kk":"k")+":mm:ss.S"),t=t.replace(Pw,"H:mm:ss"),t=t.replace(Vw,(n.preferLongFormat?"kk":"k")+":mm:ss"),t=t.replace(_w,"HH:mm"),t=t.replace(Ww,"H:mm"),t=t.replace(Zw,(n.preferLongFormat?"kk":"k")+":mm"),t=t.replace(Qw,"YYYY"),t=t.replace(Xw,"'YY"),t=t.replace(Rw,"MMMM-YY"),t=t.replace(Bw,"MMM-YY"),t=t.replace(nA,"D/M"),t=t.replace(iA,"D/MM"),t=t.replace(rA,"DD/M"),t=t.replace(aA,"DD/MM"),t=t.replace(oA,"M$2YY"),t=t.replace(lA,"MM$2YY"),t=t.replace(sA,"M$2DD"),t=t.replace(cA,"MM$2DD"),t.match(eu)){var a=/0\d\.\d{2}|\d{2}\.\d{2}/,o=/\d{1}\.\d{2}/;t=t.replace(a,"H.mm"),t=t.replace(o,"h.mm")}if(!t.match(eu)&&t.match(tu)&&(t=t.replace(eA,"MM")),!t.match(eu)&&t.match(tu)&&(t=t.replace(tA,n.preferLongFormat?"MM":"M")),t.match(dA)&&!t.match(Os)&&(t=t.replace(Bm,"DD")),t.match(uA)&&!t.match(Os)&&(t=t.replace(Dm,n.preferLongFormat?"DD":"D")),!t.match(Km)&&t.match(zm)&&!t.match(Os)&&(t=t.replace(Bm,"DD")),!t.match(Km)&&t.match(zm)&&!t.match(Os)&&(t=t.replace(Dm,n.preferLongFormat?"DD":"D")),t.match(tu)||(t=t.replace(Jw,"YY")),t.match(Nm)){var s=t.match(Nm)[1],l;s==="00"?l="HH":s==="24"?l=n.preferLongFormat?"kk":"k":s>12?l=n.preferLongFormat?"HH":"H":s[0]==="0"?l=n.preferLongFormat?"hh":"h":l=n.preferLongFormat?"hh":"k",t=t.replace(Fw,l)}return t.length<1&&(t=void 0),t}function yA(e,n,t,i,r,a){var o,s=0,l=1,c=2,u=[t.length===1,r.length===1,a.length===1],d=[t[0]==="0",r[0]==="0",a[0]==="0"],m=t.length===4,p=r.length===4,f=a.length===4,b=typeof e.preferredOrder=="string"?e.preferredOrder:e.preferredOrder[i];t=parseInt(t,10),r=parseInt(r,10),a=parseInt(a,10),o=[t,r,a],b=b.toUpperCase();var h=function(A,S){u[A]!==u[S]&&!d[A]&&!d[S]&&(u[A]=!0,u[S]=!0)};if(t>31)return h(l,c),o[0]=m?"YYYY":"YY",o[1]=u[l]?"M":"MM",o[2]=u[c]?"D":"DD",o.join(i);if(t>12)return h(s,l),o[0]=u[s]?"D":"DD",o[1]=u[l]?"M":"MM",o[2]=f?"YYYY":"YY",o.join(i);if(r>12)return h(s,l),o[0]=u[s]?"M":"MM",o[1]=u[l]?"D":"DD",o[2]=f?"YYYY":"YY",o.join(i);if(a>31)return o[2]=f?"YYYY":"YY",b[0]==="M"&&t<13?(h(s,l),o[0]=u[s]?"M":"MM",o[1]=u[l]?"D":"DD",o.join(i)):(h(s,l),o[0]=u[s]?"D":"DD",o[1]=u[l]?"M":"MM",o.join(i));let k=[m,p,f];return h(b.indexOf("D"),b.indexOf("M")),o[b.indexOf("D")]=u[b.indexOf("D")]?"D":"DD",o[b.indexOf("M")]=u[b.indexOf("M")]?"M":"MM",o[b.indexOf("Y")]=k[b.indexOf("Y")]?"YYYY":"YY",o.join(i)}});var qm=Tn((m_,Hm)=>{var Pm=_m();Hm.exports=Pm;typeof window<"u"&&window.moment&&(window.moment.parseFormat=Pm)});var of=Tn((Rq,af)=>{"use strict";var ut=function(e){if(e=e||{},this.Promise=e.Promise||Promise,this.queues=Object.create(null),this.domainReentrant=e.domainReentrant||!1,this.domainReentrant){if(typeof process>"u"||typeof process.domain>"u")throw new Error("Domain-reentrant locks require `process.domain` to exist. Please flip `opts.domainReentrant = false`, use a NodeJS version that still implements Domain, or install a browser polyfill.");this.domains=Object.create(null)}this.timeout=e.timeout||ut.DEFAULT_TIMEOUT,this.maxOccupationTime=e.maxOccupationTime||ut.DEFAULT_MAX_OCCUPATION_TIME,this.maxExecutionTime=e.maxExecutionTime||ut.DEFAULT_MAX_EXECUTION_TIME,e.maxPending===1/0||Number.isInteger(e.maxPending)&&e.maxPending>=0?this.maxPending=e.maxPending:this.maxPending=ut.DEFAULT_MAX_PENDING};ut.DEFAULT_TIMEOUT=0;ut.DEFAULT_MAX_OCCUPATION_TIME=0;ut.DEFAULT_MAX_EXECUTION_TIME=0;ut.DEFAULT_MAX_PENDING=1e3;ut.prototype.acquire=function(e,n,t,i){if(Array.isArray(e))return this._acquireBatch(e,n,t,i);if(typeof n!="function")throw new Error("You must pass a function to execute");var r=null,a=null,o=null;typeof t!="function"&&(i=t,t=null,o=new this.Promise(function(A,S){r=A,a=S})),i=i||{};var s=!1,l=null,c=null,u=null,d=this,m=function(A,S,T){c&&(clearTimeout(c),c=null),u&&(clearTimeout(u),u=null),A&&(d.queues[e]&&d.queues[e].length===0&&delete d.queues[e],d.domainReentrant&&delete d.domains[e]),s||(o?S?a(S):r(T):typeof t=="function"&&t(S,T),s=!0),A&&d.queues[e]&&d.queues[e].length>0&&d.queues[e].shift()()},p=function(A){if(s)return m(A);l&&(clearTimeout(l),l=null),d.domainReentrant&&A&&(d.domains[e]=process.domain);var S=i.maxExecutionTime||d.maxExecutionTime;if(S&&(u=setTimeout(function(){d.queues[e]&&m(A,new Error("Maximum execution time is exceeded "+e))},S)),n.length===1){var T=!1;try{n(function(M,E){T||(T=!0,m(A,M,E))})}catch(M){T||(T=!0,m(A,M))}}else d._promiseTry(function(){return n()}).then(function(M){m(A,void 0,M)},function(M){m(A,M)})};d.domainReentrant&&process.domain&&(p=process.domain.bind(p));var f=i.maxPending||d.maxPending;if(!d.queues[e])d.queues[e]=[],p(!0);else if(d.domainReentrant&&process.domain&&process.domain===d.domains[e])p(!1);else if(d.queues[e].length>=f)m(!1,new Error("Too many pending tasks in queue "+e));else{var b=function(){p(!0)};i.skipQueue?d.queues[e].unshift(b):d.queues[e].push(b);var h=i.timeout||d.timeout;h&&(l=setTimeout(function(){l=null,m(!1,new Error("async-lock timed out in queue "+e))},h))}var k=i.maxOccupationTime||d.maxOccupationTime;if(k&&(c=setTimeout(function(){d.queues[e]&&m(!1,new Error("Maximum occupation time is exceeded in queue "+e))},k)),o)return o};ut.prototype._acquireBatch=function(e,n,t,i){typeof t!="function"&&(i=t,t=null);var r=this,a=function(s,l){return function(c){r.acquire(s,l,c,i)}},o=e.reduceRight(function(s,l){return a(l,s)},n);if(typeof t=="function")o(t);else return new this.Promise(function(s,l){o.length===1?o(function(c,u){c?l(c):s(u)}):s(o())})};ut.prototype.isBusy=function(e){return e?!!this.queues[e]:Object.keys(this.queues).length>0};ut.prototype._promiseTry=function(e){try{return this.Promise.resolve(e())}catch(n){return this.Promise.reject(n)}};af.exports=ut});var lf=Tn((Bq,sf)=>{"use strict";sf.exports=of()});var WA={};su(WA,{default:()=>$s});module.exports=yf(WA);var X=require("obsidian");function Lu(e){return typeof e>"u"||e===null}function bf(e){return typeof e=="object"&&e!==null}function vf(e){return Array.isArray(e)?e:Lu(e)?[]:[e]}function kf(e,n){var t,i,r,a;if(n)for(a=Object.keys(n),t=0,i=a.length;ts&&(a=" ... ",n=i-s+a.length),t-i>s&&(o=" ...",t=i+s-o.length),{str:a+e.slice(n,t).replace(/\t/g,"\u2192")+o,pos:i-n+a.length}}function Js(e,n){return Ee.repeat(" ",n-e.length)+e}function Of(e,n){if(n=Object.create(n||null),!e.buffer)return null;n.maxLength||(n.maxLength=79),typeof n.indent!="number"&&(n.indent=1),typeof n.linesBefore!="number"&&(n.linesBefore=3),typeof n.linesAfter!="number"&&(n.linesAfter=2);for(var t=/\r?\n|\r|\0/g,i=[0],r=[],a,o=-1;a=t.exec(e.buffer);)r.push(a.index),i.push(a.index+a[0].length),e.position<=a.index&&o<0&&(o=i.length-2);o<0&&(o=i.length-1);var s="",l,c,u=Math.min(e.line+n.linesAfter,r.length).toString().length,d=n.maxLength-(n.indent+u+3);for(l=1;l<=n.linesBefore&&!(o-l<0);l++)c=Qs(e.buffer,i[o-l],r[o-l],e.position-(i[o]-i[o-l]),d),s=Ee.repeat(" ",n.indent)+Js((e.line-l+1).toString(),u)+" | "+c.str+` +`+s;for(c=Qs(e.buffer,i[o],r[o],e.position,d),s+=Ee.repeat(" ",n.indent)+Js((e.line+1).toString(),u)+" | "+c.str+` +`,s+=Ee.repeat("-",n.indent+u+3+c.pos)+`^ +`,l=1;l<=n.linesAfter&&!(o+l>=r.length);l++)c=Qs(e.buffer,i[o+l],r[o+l],e.position-(i[o]-i[o+l]),d),s+=Ee.repeat(" ",n.indent)+Js((e.line+l+1).toString(),u)+" | "+c.str+` +`;return s.replace(/\n$/,"")}var Mf=Of,If=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],Ff=["scalar","sequence","mapping"];function Rf(e){var n={};return e!==null&&Object.keys(e).forEach(function(t){e[t].forEach(function(i){n[String(i)]=t})}),n}function Bf(e,n){if(n=n||{},Object.keys(n).forEach(function(t){if(If.indexOf(t)===-1)throw new Ge('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')}),this.options=n,this.tag=e,this.kind=n.kind||null,this.resolve=n.resolve||function(){return!0},this.construct=n.construct||function(t){return t},this.instanceOf=n.instanceOf||null,this.predicate=n.predicate||null,this.represent=n.represent||null,this.representName=n.representName||null,this.defaultStyle=n.defaultStyle||null,this.multi=n.multi||!1,this.styleAliases=Rf(n.styleAliases||null),Ff.indexOf(this.kind)===-1)throw new Ge('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}var Ue=Bf;function cu(e,n){var t=[];return e[n].forEach(function(i){var r=t.length;t.forEach(function(a,o){a.tag===i.tag&&a.kind===i.kind&&a.multi===i.multi&&(r=o)}),t[r]=i}),t}function Df(){var e={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},n,t;function i(r){r.multi?(e.multi[r.kind].push(r),e.multi.fallback.push(r)):e[r.kind][r.tag]=e.fallback[r.tag]=r}for(n=0,t=arguments.length;n=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),ng=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function ig(e){return!(e===null||!ng.test(e)||e[e.length-1]==="_")}function rg(e){var n,t;return n=e.replace(/_/g,"").toLowerCase(),t=n[0]==="-"?-1:1,"+-".indexOf(n[0])>=0&&(n=n.slice(1)),n===".inf"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:n===".nan"?NaN:t*parseFloat(n,10)}var ag=/^[-+]?[0-9]+e/;function og(e,n){var t;if(isNaN(e))switch(n){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(n){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(n){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(Ee.isNegativeZero(e))return"-0.0";return t=e.toString(10),ag.test(t)?t.replace("e",".e"):t}function sg(e){return Object.prototype.toString.call(e)==="[object Number]"&&(e%1!==0||Ee.isNegativeZero(e))}var lg=new Ue("tag:yaml.org,2002:float",{kind:"scalar",resolve:ig,construct:rg,predicate:sg,represent:og,defaultStyle:"lowercase"}),cg=_f.extend({implicit:[Uf,$f,tg,lg]}),ug=cg,Eu=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Tu=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function dg(e){return e===null?!1:Eu.exec(e)!==null||Tu.exec(e)!==null}function pg(e){var n,t,i,r,a,o,s,l=0,c=null,u,d,m;if(n=Eu.exec(e),n===null&&(n=Tu.exec(e)),n===null)throw new Error("Date resolve error");if(t=+n[1],i=+n[2]-1,r=+n[3],!n[4])return new Date(Date.UTC(t,i,r));if(a=+n[4],o=+n[5],s=+n[6],n[7]){for(l=n[7].slice(0,3);l.length<3;)l+="0";l=+l}return n[9]&&(u=+n[10],d=+(n[11]||0),c=(u*60+d)*6e4,n[9]==="-"&&(c=-c)),m=new Date(Date.UTC(t,i,r,a,o,s,l)),c&&m.setTime(m.getTime()-c),m}function mg(e){return e.toISOString()}var fg=new Ue("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:dg,construct:pg,instanceOf:Date,represent:mg});function gg(e){return e==="<<"||e===null}var hg=new Ue("tag:yaml.org,2002:merge",{kind:"scalar",resolve:gg}),al=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function yg(e){if(e===null)return!1;var n,t,i=0,r=e.length,a=al;for(t=0;t64)){if(n<0)return!1;i+=6}return i%8===0}function bg(e){var n,t,i=e.replace(/[\r\n=]/g,""),r=i.length,a=al,o=0,s=[];for(n=0;n>16&255),s.push(o>>8&255),s.push(o&255)),o=o<<6|a.indexOf(i.charAt(n));return t=r%4*6,t===0?(s.push(o>>16&255),s.push(o>>8&255),s.push(o&255)):t===18?(s.push(o>>10&255),s.push(o>>2&255)):t===12&&s.push(o>>4&255),new Uint8Array(s)}function vg(e){var n="",t=0,i,r,a=e.length,o=al;for(i=0;i>18&63],n+=o[t>>12&63],n+=o[t>>6&63],n+=o[t&63]),t=(t<<8)+e[i];return r=a%3,r===0?(n+=o[t>>18&63],n+=o[t>>12&63],n+=o[t>>6&63],n+=o[t&63]):r===2?(n+=o[t>>10&63],n+=o[t>>4&63],n+=o[t<<2&63],n+=o[64]):r===1&&(n+=o[t>>2&63],n+=o[t<<4&63],n+=o[64],n+=o[64]),n}function kg(e){return Object.prototype.toString.call(e)==="[object Uint8Array]"}var wg=new Ue("tag:yaml.org,2002:binary",{kind:"scalar",resolve:yg,construct:bg,predicate:kg,represent:vg}),Ag=Object.prototype.hasOwnProperty,xg=Object.prototype.toString;function Lg(e){if(e===null)return!0;var n=[],t,i,r,a,o,s=e;for(t=0,i=s.length;t>10)+55296,(e-65536&1023)+56320)}var Ru=new Array(256),Bu=new Array(256);for(On=0;On<256;On++)Ru[On]=pu(On)?1:0,Bu[On]=pu(On);var On;function qg(e,n){this.input=e,this.filename=n.filename||null,this.schema=n.schema||Cu,this.onWarning=n.onWarning||null,this.legacy=n.legacy||!1,this.json=n.json||!1,this.listener=n.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function Du(e,n){var t={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return t.snippet=Mf(t),new Ge(n,t)}function _(e,n){throw Du(e,n)}function no(e,n){e.onWarning&&e.onWarning.call(null,Du(e,n))}var mu={YAML:function(n,t,i){var r,a,o;n.version!==null&&_(n,"duplication of %YAML directive"),i.length!==1&&_(n,"YAML directive accepts exactly one argument"),r=/^([0-9]+)\.([0-9]+)$/.exec(i[0]),r===null&&_(n,"ill-formed argument of the YAML directive"),a=parseInt(r[1],10),o=parseInt(r[2],10),a!==1&&_(n,"unacceptable YAML version of the document"),n.version=i[0],n.checkLineBreaks=o<2,o!==1&&o!==2&&no(n,"unsupported YAML version of the document")},TAG:function(n,t,i){var r,a;i.length!==2&&_(n,"TAG directive accepts exactly two arguments"),r=i[0],a=i[1],Iu.test(r)||_(n,"ill-formed tag handle (first argument) of the TAG directive"),nn.call(n.tagMap,r)&&_(n,'there is a previously declared suffix for "'+r+'" tag handle'),Fu.test(a)||_(n,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch{_(n,"tag prefix is malformed: "+a)}n.tagMap[r]=a}};function tn(e,n,t,i){var r,a,o,s;if(n1&&(e.result+=Ee.repeat(` +`,n-1))}function Ug(e,n,t){var i,r,a,o,s,l,c,u,d=e.kind,m=e.result,p;if(p=e.input.charCodeAt(e.position),tt(p)||Ei(p)||p===35||p===38||p===42||p===33||p===124||p===62||p===39||p===34||p===37||p===64||p===96||(p===63||p===45)&&(r=e.input.charCodeAt(e.position+1),tt(r)||t&&Ei(r)))return!1;for(e.kind="scalar",e.result="",a=o=e.position,s=!1;p!==0;){if(p===58){if(r=e.input.charCodeAt(e.position+1),tt(r)||t&&Ei(r))break}else if(p===35){if(i=e.input.charCodeAt(e.position-1),tt(i))break}else{if(e.position===e.lineStart&&ao(e)||t&&Ei(p))break;if(It(p))if(l=e.line,c=e.lineStart,u=e.lineIndent,Le(e,!1,-1),e.lineIndent>=n){s=!0,p=e.input.charCodeAt(e.position);continue}else{e.position=o,e.line=l,e.lineStart=c,e.lineIndent=u;break}}s&&(tn(e,a,o,!1),sl(e,e.line-l),a=o=e.position,s=!1),Mn(p)||(o=e.position+1),p=e.input.charCodeAt(++e.position)}return tn(e,a,o,!1),e.result?!0:(e.kind=d,e.result=m,!1)}function Wg(e,n){var t,i,r;if(t=e.input.charCodeAt(e.position),t!==39)return!1;for(e.kind="scalar",e.result="",e.position++,i=r=e.position;(t=e.input.charCodeAt(e.position))!==0;)if(t===39)if(tn(e,i,e.position,!0),t=e.input.charCodeAt(++e.position),t===39)i=e.position,e.position++,r=e.position;else return!0;else It(t)?(tn(e,i,r,!0),sl(e,Le(e,!1,n)),i=r=e.position):e.position===e.lineStart&&ao(e)?_(e,"unexpected end of the document within a single quoted scalar"):(e.position++,r=e.position);_(e,"unexpected end of the stream within a single quoted scalar")}function Vg(e,n){var t,i,r,a,o,s;if(s=e.input.charCodeAt(e.position),s!==34)return!1;for(e.kind="scalar",e.result="",e.position++,t=i=e.position;(s=e.input.charCodeAt(e.position))!==0;){if(s===34)return tn(e,t,e.position,!0),e.position++,!0;if(s===92){if(tn(e,t,e.position,!0),s=e.input.charCodeAt(++e.position),It(s))Le(e,!1,n);else if(s<256&&Ru[s])e.result+=Bu[s],e.position++;else if((o=_g(s))>0){for(r=o,a=0;r>0;r--)s=e.input.charCodeAt(++e.position),(o=Yg(s))>=0?a=(a<<4)+o:_(e,"expected hexadecimal character");e.result+=Hg(a),e.position++}else _(e,"unknown escape sequence");t=i=e.position}else It(s)?(tn(e,t,i,!0),sl(e,Le(e,!1,n)),t=i=e.position):e.position===e.lineStart&&ao(e)?_(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}_(e,"unexpected end of the stream within a double quoted scalar")}function jg(e,n){var t=!0,i,r,a,o=e.tag,s,l=e.anchor,c,u,d,m,p,f=Object.create(null),b,h,k,A;if(A=e.input.charCodeAt(e.position),A===91)u=93,p=!1,s=[];else if(A===123)u=125,p=!0,s={};else return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=s),A=e.input.charCodeAt(++e.position);A!==0;){if(Le(e,!0,n),A=e.input.charCodeAt(e.position),A===u)return e.position++,e.tag=o,e.anchor=l,e.kind=p?"mapping":"sequence",e.result=s,!0;t?A===44&&_(e,"expected the node content, but found ','"):_(e,"missed comma between flow collection entries"),h=b=k=null,d=m=!1,A===63&&(c=e.input.charCodeAt(e.position+1),tt(c)&&(d=m=!0,e.position++,Le(e,!0,n))),i=e.line,r=e.lineStart,a=e.position,Ci(e,n,eo,!1,!0),h=e.tag,b=e.result,Le(e,!0,n),A=e.input.charCodeAt(e.position),(m||e.line===i)&&A===58&&(d=!0,A=e.input.charCodeAt(++e.position),Le(e,!0,n),Ci(e,n,eo,!1,!0),k=e.result),p?Ti(e,s,f,h,b,k,i,r,a):d?s.push(Ti(e,null,f,h,b,k,i,r,a)):s.push(b),Le(e,!0,n),A=e.input.charCodeAt(e.position),A===44?(t=!0,A=e.input.charCodeAt(++e.position)):t=!1}_(e,"unexpected end of the stream within a flow collection")}function $g(e,n){var t,i,r=Xs,a=!1,o=!1,s=n,l=0,c=!1,u,d;if(d=e.input.charCodeAt(e.position),d===124)i=!1;else if(d===62)i=!0;else return!1;for(e.kind="scalar",e.result="";d!==0;)if(d=e.input.charCodeAt(++e.position),d===43||d===45)Xs===r?r=d===43?uu:Dg:_(e,"repeat of a chomping mode identifier");else if((u=Pg(d))>=0)u===0?_(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):o?_(e,"repeat of an indentation width identifier"):(s=n+u-1,o=!0);else break;if(Mn(d)){do d=e.input.charCodeAt(++e.position);while(Mn(d));if(d===35)do d=e.input.charCodeAt(++e.position);while(!It(d)&&d!==0)}for(;d!==0;){for(ol(e),e.lineIndent=0,d=e.input.charCodeAt(e.position);(!o||e.lineIndents&&(s=e.lineIndent),It(d)){l++;continue}if(e.lineIndentn)&&l!==0)_(e,"bad indentation of a sequence entry");else if(e.lineIndentn)&&(h&&(o=e.line,s=e.lineStart,l=e.position),Ci(e,n,to,!0,r)&&(h?f=e.result:b=e.result),h||(Ti(e,d,m,p,f,b,o,s,l),p=f=b=null),Le(e,!0,-1),A=e.input.charCodeAt(e.position)),(e.line===a||e.lineIndent>n)&&A!==0)_(e,"bad indentation of a mapping entry");else if(e.lineIndentn?l=1:e.lineIndent===n?l=0:e.lineIndentn?l=1:e.lineIndent===n?l=0:e.lineIndent tag; it should be "scalar", not "'+e.kind+'"'),d=0,m=e.implicitTypes.length;d"),e.result!==null&&f.kind!==e.kind&&_(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+f.kind+'", not "'+e.kind+'"'),f.resolve(e.result,e.tag)?(e.result=f.construct(e.result,e.tag),e.anchor!==null&&(e.anchorMap[e.anchor]=e.result)):_(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return e.listener!==null&&e.listener("close",e),e.tag!==null||e.anchor!==null||u}function Xg(e){var n=e.position,t,i,r,a=!1,o;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);(o=e.input.charCodeAt(e.position))!==0&&(Le(e,!0,-1),o=e.input.charCodeAt(e.position),!(e.lineIndent>0||o!==37));){for(a=!0,o=e.input.charCodeAt(++e.position),t=e.position;o!==0&&!tt(o);)o=e.input.charCodeAt(++e.position);for(i=e.input.slice(t,e.position),r=[],i.length<1&&_(e,"directive name must not be less than one character in length");o!==0;){for(;Mn(o);)o=e.input.charCodeAt(++e.position);if(o===35){do o=e.input.charCodeAt(++e.position);while(o!==0&&!It(o));break}if(It(o))break;for(t=e.position;o!==0&&!tt(o);)o=e.input.charCodeAt(++e.position);r.push(e.input.slice(t,e.position))}o!==0&&ol(e),nn.call(mu,i)?mu[i](e,i,r):no(e,'unknown document directive "'+i+'"')}if(Le(e,!0,-1),e.lineIndent===0&&e.input.charCodeAt(e.position)===45&&e.input.charCodeAt(e.position+1)===45&&e.input.charCodeAt(e.position+2)===45?(e.position+=3,Le(e,!0,-1)):a&&_(e,"directives end mark is expected"),Ci(e,e.lineIndent-1,to,!1,!0),Le(e,!0,-1),e.checkLineBreaks&&zg.test(e.input.slice(n,e.position))&&no(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&ao(e)){e.input.charCodeAt(e.position)===46&&(e.position+=3,Le(e,!0,-1));return}if(e.position"u"&&(t=n,n=null);var i=Ku(e,t);if(typeof n!="function")return i;for(var r=0,a=i.length;r=55296&&t<=56319&&n+1=56320&&i<=57343)?(t-55296)*1024+i-56320+65536:t}function Wu(e){var n=/^\n* /;return n.test(e)}var Vu=1,il=2,ju=3,$u=4,Si=5;function Oh(e,n,t,i,r,a,o,s){var l,c=0,u=null,d=!1,m=!1,p=i!==-1,f=-1,b=Th(sr(e,0))&&Ch(sr(e,e.length-1));if(n||o)for(l=0;l=65536?l+=2:l++){if(c=sr(e,l),!dr(c))return Si;b=b&&bu(c,u,s),u=c}else{for(l=0;l=65536?l+=2:l++){if(c=sr(e,l),c===cr)d=!0,p&&(m=m||l-f-1>i&&e[f+1]!==" ",f=l);else if(!dr(c))return Si;b=b&&bu(c,u,s),u=c}m=m||p&&l-f-1>i&&e[f+1]!==" "}return!d&&!m?b&&!o&&!r(e)?Vu:a===ur?Si:il:t>9&&Wu(e)?Si:o?a===ur?Si:il:m?$u:ju}function Mh(e,n,t,i,r){e.dump=function(){if(n.length===0)return e.quotingType===ur?'""':"''";if(!e.noCompatMode&&(kh.indexOf(n)!==-1||wh.test(n)))return e.quotingType===ur?'"'+n+'"':"'"+n+"'";var a=e.indent*Math.max(1,t),o=e.lineWidth===-1?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-a),s=i||e.flowLevel>-1&&t>=e.flowLevel;function l(c){return Eh(e,c)}switch(Oh(n,s,e.indent,o,l,e.quotingType,e.forceQuotes&&!i,r)){case Vu:return n;case il:return"'"+n.replace(/'/g,"''")+"'";case ju:return"|"+vu(n,e.indent)+ku(hu(n,a));case $u:return">"+vu(n,e.indent)+ku(hu(Ih(n,o),a));case Si:return'"'+Fh(n)+'"';default:throw new Ge("impossible error: invalid scalar style")}}()}function vu(e,n){var t=Wu(e)?String(n):"",i=e[e.length-1]===` +`,r=i&&(e[e.length-2]===` +`||e===` +`),a=r?"+":i?"":"-";return t+a+` +`}function ku(e){return e[e.length-1]===` +`?e.slice(0,-1):e}function Ih(e,n){for(var t=/(\n+)([^\n]*)/g,i=function(){var c=e.indexOf(` +`);return c=c!==-1?c:e.length,t.lastIndex=c,wu(e.slice(0,c),n)}(),r=e[0]===` +`||e[0]===" ",a,o;o=t.exec(e);){var s=o[1],l=o[2];a=l[0]===" ",i+=s+(!r&&!a&&l!==""?` +`:"")+wu(l,n),r=a}return i}function wu(e,n){if(e===""||e[0]===" ")return e;for(var t=/ [^ ]/g,i,r=0,a,o=0,s=0,l="";i=t.exec(e);)s=i.index,s-r>n&&(a=o>r?o:s,l+=` +`+e.slice(r,a),r=a+1),o=s;return l+=` +`,e.length-r>n&&o>r?l+=e.slice(r,o)+` +`+e.slice(o+1):l+=e.slice(r),l.slice(1)}function Fh(e){for(var n="",t=0,i,r=0;r=65536?r+=2:r++)t=sr(e,r),i=We[t],!i&&dr(t)?(n+=e[r],t>=65536&&(n+=e[r+1])):n+=i||xh(t);return n}function Rh(e,n,t){var i="",r=e.tag,a,o,s;for(a=0,o=t.length;a"u"&&Wt(e,n,null,!1,!1))&&(i!==""&&(i+=","+(e.condenseFlow?"":" ")),i+=e.dump);e.tag=r,e.dump="["+i+"]"}function Au(e,n,t,i){var r="",a=e.tag,o,s,l;for(o=0,s=t.length;o"u"&&Wt(e,n+1,null,!0,!0,!1,!0))&&((!i||r!=="")&&(r+=nl(e,n)),e.dump&&cr===e.dump.charCodeAt(0)?r+="-":r+="- ",r+=e.dump);e.tag=a,e.dump=r||"[]"}function Bh(e,n,t){var i="",r=e.tag,a=Object.keys(t),o,s,l,c,u;for(o=0,s=a.length;o1024&&(u+="? "),u+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),Wt(e,n,c,!1,!1)&&(u+=e.dump,i+=u));e.tag=r,e.dump="{"+i+"}"}function Dh(e,n,t,i){var r="",a=e.tag,o=Object.keys(t),s,l,c,u,d,m;if(e.sortKeys===!0)o.sort();else if(typeof e.sortKeys=="function")o.sort(e.sortKeys);else if(e.sortKeys)throw new Ge("sortKeys must be a boolean or a function");for(s=0,l=o.length;s1024,d&&(e.dump&&cr===e.dump.charCodeAt(0)?m+="?":m+="? "),m+=e.dump,d&&(m+=nl(e,n)),Wt(e,n+1,u,!0,d)&&(e.dump&&cr===e.dump.charCodeAt(0)?m+=":":m+=": ",m+=e.dump,r+=m));e.tag=a,e.dump=r||"{}"}function xu(e,n,t){var i,r,a,o,s,l;for(r=t?e.explicitTypes:e.implicitTypes,a=0,o=r.length;a tag resolver accepts not "'+l+'" style');e.dump=i}return!0}return!1}function Wt(e,n,t,i,r,a,o){e.tag=null,e.dump=t,xu(e,t,!1)||xu(e,t,!0);var s=Nu.call(e.dump),l=i,c;i&&(i=e.flowLevel<0||e.flowLevel>n);var u=s==="[object Object]"||s==="[object Array]",d,m;if(u&&(d=e.duplicates.indexOf(t),m=d!==-1),(e.tag!==null&&e.tag!=="?"||m||e.indent!==2&&n>0)&&(r=!1),m&&e.usedDuplicates[d])e.dump="*ref_"+d;else{if(u&&m&&!e.usedDuplicates[d]&&(e.usedDuplicates[d]=!0),s==="[object Object]")i&&Object.keys(e.dump).length!==0?(Dh(e,n,e.dump,r),m&&(e.dump="&ref_"+d+e.dump)):(Bh(e,n,e.dump),m&&(e.dump="&ref_"+d+" "+e.dump));else if(s==="[object Array]")i&&e.dump.length!==0?(e.noArrayIndent&&!o&&n>0?Au(e,n-1,e.dump,r):Au(e,n,e.dump,r),m&&(e.dump="&ref_"+d+e.dump)):(Rh(e,n,e.dump),m&&(e.dump="&ref_"+d+" "+e.dump));else if(s==="[object String]")e.tag!=="?"&&Mh(e,e.dump,n,a,l);else{if(s==="[object Undefined]")return!1;if(e.skipInvalid)return!1;throw new Ge("unacceptable kind of an object to dump "+s)}e.tag!==null&&e.tag!=="?"&&(c=encodeURI(e.tag[0]==="!"?e.tag.slice(1):e.tag).replace(/!/g,"%21"),e.tag[0]==="!"?c="!"+c:c.slice(0,18)==="tag:yaml.org,2002:"?c="!!"+c.slice(18):c="!<"+c+">",e.dump=c+" "+e.dump)}return!0}function Kh(e,n){var t=[],i=[],r,a;for(rl(e,t,i),r=0,a=i.length;rre.default.levels.DEBUG||ml.set(e,performance.now())}function rn(e){if(re.default.getLevel()>re.default.levels.DEBUG)return;ml.has(e)||pt(x("logs.timing-key-not-found").replace("{TIMING_KEY}",e));let n=performance.now()-ml.get(e);nt(`${e}: ${n} `+x("logs.milliseconds-abbreviation"))}function po(e,n){re.default.getLevel()<=n&&co.push(e)}function Xu(){co=[]}function fl(e){mr=e}function mo(e){switch(e){case"INFO":{re.default.setLevel("info");break}case"TRACE":{re.default.setLevel("trace");break}case"DEBUG":{re.default.setLevel("debug");break}case"SILENT":{re.default.setLevel("silent");break}case"ERROR":{re.default.setLevel("error");break}case"WARN":{re.default.setLevel("warn");break}}}function ed(e){switch(e){case re.default.levels.INFO:return"INFO";case re.default.levels.TRACE:return"TRACE";case re.default.levels.DEBUG:return"DEBUG";case re.default.levels.SILENT:return"SILENT";case re.default.levels.ERROR:return"ERROR";case re.default.levels.WARN:return"WARN"}}var td={};var nd={};var id={};var rd={commands:{"lint-file":{name:"Linten Sie die aktuelle Datei","error-message":"Lint-Datei-Fehler in der Datei"},"lint-file-unless-ignored":{name:"Linten Sie die aktuelle Datei, es sei denn, sie wird ignoriert"},"lint-all-files":{name:"Linten Sie alle Dateien im Vault","error-message":"Beim Linten aller Dateien Fehler in der Datei","success-message":"Alle Dateien gelinted","errors-message-singular":"Beim Linten aller Dateien gab es einen Fehler.","errors-message-plural":"Beim Linten aller Dateien gab es {NUM} Fehler.","start-message":"Dadurch werden alle Ihre Dateien ver\xE4ndert und es k\xF6nnen Fehler entstehen.","submit-button-text":"Linte alle","submit-button-notice-text":"Linte alle Dateien..."},"lint-all-files-in-folder":{name:"Linte alle Dateien im aktuellen Ordner","start-message":"Dadurch werden alle Ihre Dateien in {FOLDER_NAME} bearbeitet, einschlie\xDFlich der Dateien in den Unterordnern, was zu Fehlern f\xFChren kann.","submit-button-text":"Linte alle Dateien in {FOLDER_NAME}","submit-button-notice-text":"Linten aller Dateien in {FOLDER_NAME}...","error-message":"Beim Linten aller Dateien im Ordner gab es Fehler in der Datei","success-message":"Alle {NUM}-Dateien in {FOLDER_NAME} wurden gelinted.","message-singular":"Alle {NUM}-Dateien in {FOLDER_NAME} wurden gelinted und es trat ein Fehler auf.","message-plural":"Alle {FILE_COUNT}-Dateien in {FOLDER_NAME} wurden gelinted und es gab {ERROR_COUNT} Fehler."},"paste-as-plain-text":{name:"Einf\xFCgen als reiner Text und ohne \xC4nderungen"},"lint-file-pop-up-menu-text":{name:"Linte Datei"},"lint-folder-pop-up-menu-text":{name:"Linte Ordner"}},logs:{"plugin-load":"Plugin wird geladen","plugin-unload":"Plugin entladen","folder-lint":"Linting-Ordner ","linter-run":"Laufender Linter","paste-link-warning":"Abgebrochenes Einf\xFCgen des Lints, da der Inhalt der Zwischenablage ein Link ist, wodurch Konflikte mit anderen Plugins vermieden werden, die das Einf\xFCgen \xE4ndern.","see-console":"Weitere Informationen finden Sie in der Konsole.","unknown-error":"Beim Linten ist ein unbekannter Fehler aufgetreten.","moment-locale-not-found":"Beim Versuch, Moment.js locale auf {MOMENT_LOCALE} umzustellen, wurde {CURRENT_LOCALE} angezeigt","file-change-lint-message-start":"Linted","pre-rules":"Regeln vor regul\xE4ren Regeln","post-rules":"Regeln nach regul\xE4ren Regeln","rule-running":"Laufende Regeln","custom-regex":"Benutzerdefinierte Regex-Regeln","running-custom-regex":"Ausf\xFChren von benutzerdefinierten Regex","running-custom-lint-command":"Ausf\xFChren von benutzerdefinierten Lint-Befehlen","custom-lint-duplicate-warning":'Sie k\xF6nnen denselben Befehl ("{COMMAND_NAME}") nicht zweimal als benutzerdefinierte Lint-Regel ausf\xFChren.',"custom-lint-error-message":"Benutzerdefinierter Lint-Befehl","disabled-text":"ist deaktiviert","run-rule-text":"L\xE4uft","timing-key-not-found":"Der Timing-Schl\xFCssel '{TIMING_KEY}' ist in der Timing-Info-Liste nicht vorhanden, daher wurde er ignoriert","milliseconds-abbreviation":"ms","invalid-date-format-error":"Das Format des Erstellungsdatums '{DATE}' konnte nicht analysiert oder bestimmt werden, sodass das Erstellungsdatum in '{FILE_NAME}","invalid-delimiter-error-message":"Trennzeichen darf nur ein einzelnes Zeichen sein","missing-footnote-error-message":"Die Fu\xDFnote '{FOOTNOTE}' hat keinen entsprechenden Fu\xDFnotenverweis vor dem Fu\xDFnoteninhalt und kann nicht verarbeitet werden. Bitte achten Sie darauf, dass alle Fu\xDFnoten vor dem Inhalt der Fu\xDFnote einen entsprechenden Verweis haben.","too-many-footnotes-error-message":"Der Fu\xDFnotenschl\xFCssel '{FOOTNOTE_KEY}' hat mehr als 1 Fu\xDFnote, die darauf verweist. Bitte aktualisieren Sie die Fu\xDFnoten so, dass es nur noch eine Fu\xDFnote pro Fu\xDFnotenschl\xFCssel gibt.","wrapper-yaml-error":"Fehler in der YAML: {ERROR_MESSAGE}","wrapper-unknown-error":"Unbekannter Fehler: {ERROR_MESSAGE}"},"notice-text":{"empty-clipboard":"Es gibt keinen Inhalt in der Zwischenablage.","characters-added":"Zeichen hinzugef\xFCgt","characters-removed":"Zeichen entfernt","copy-to-clipboard-failed":"Kopieren des Textes in die Zwischenablage fehlgeschlagen: "},"all-rules-option":"Alle","linter-title":"Linter","empty-search-results-text":"Keine Einstellungen stimmen mit der Suche \xFCberein","warning-text":"Warnung","file-backup-text":"Stellen Sie sicher, dass Sie Ihre Dateien gesichert haben.",tabs:{names:{general:"Allgemein",custom:"Individuell",yaml:"YAML",heading:"\xDCberschrift",content:"Inhalt",footnote:"Fu\xDFnote",spacing:"Abstand",paste:"Einf\xFCgen",debug:"Debuggen"},"default-search-bar-text":"Alle Einstellungen durchsuchen",general:{"lint-on-save":{name:"Linten beim Speichern",description:"Linten der Datei beim manuellen Speichern (wenn Strg + S gedr\xFCckt wird oder wenn :w ausgef\xFChrt wird, w\xE4hrend vim-Tastenkombinationen verwendet werden)"},"display-message":{name:"Meldung beim Linten anzeigen",description:"Zeigen Sie die Anzahl der Zeichen an, die sich nach dem Linten ge\xE4ndert haben"},"lint-on-file-change":{name:"Linten bei Datei\xE4nderungen",description:"Wenn eine Datei geschlossen oder zu einer neuen Datei gewechselt wird, wird die vorherige Datei gelinted."},"display-lint-on-file-change-message":{name:"Nachricht beim Linten nach einer Datei\xE4nderung anzeigen",description:"Zeigt eine Meldung an, wenn Linten bei Datei\xE4nderungen ausgel\xF6st wurde"},"folders-to-ignore":{name:"Ordner, die ignoriert werden sollen",description:"Ordner, die ignoriert werden sollen, wenn alle Dateien gelinted oder beim Speichern gelinted werden. Geben Sie Ordnerpfade ein, die durch Zeilenumbr\xFCche getrennt sind","folder-search-placeholder-text":"Ordner-Name","add-input-button-text":"Einen anderen zu ignorierenden Ordner hinzuf\xFCgen","delete-tooltip":"L\xF6schen"},"override-locale":{name:"Gebietsschema \xFCberschreiben",description:"Legen Sie diese Option fest, wenn Sie ein anderes Gebietsschema als das Standardgebietsschema verwenden m\xF6chten"},"same-as-system-locale":"Identisch mit System ({SYS_LOCALE})","yaml-aliases-section-style":{name:"YAML-Aliase-Abschnittsstil",description:"Der Stil des YAML-Aliasabschnitts"},"yaml-tags-section-style":{name:"Abschnittsstil f\xFCr YAML-Tags",description:"Der Stil des YAML-Tags-Abschnitts"},"default-escape-character":{name:"Standard-Escape-Zeichen",description:"Das Standardzeichen, das zum Maskieren von YAML-Werten verwendet werden soll, wenn ein einfaches Anf\xFChrungszeichen und kein doppeltes Anf\xFChrungszeichen vorhanden sind."},"remove-unnecessary-escape-chars-in-multi-line-arrays":{name:"Entfernen Sie unn\xF6tige Escape-Zeichen im mehrzeiligen Array-Format",description:"Escape-Zeichen f\xFCr mehrzeilige YAML-Arrays ben\xF6tigen nicht die gleiche Escape-Funktion wie einzeilige Arrays. Entfernen Sie also im mehrzeiligen Format zus\xE4tzliche Escapezeichen, die nicht erforderlich sind"},"number-of-dollar-signs-to-indicate-math-block":{name:"Anzahl der Dollarzeichen, die den Matheblock anzeigen",description:"Die Anzahl der Dollarzeichen, um den mathematischen Inhalt als mathematischen Block anstelle von Inline-Mathematik zu betrachten"}},debug:{"log-level":{name:"Log-Ebene",description:"Die Arten von Logmeldungen, die vom Dienst protokolliert werden d\xFCrfen. Der Standardwert ist Fehler."},"linter-config":{name:"Linter-Konfiguration",description:"Der Inhalt der data.json f\xFCr den Linter zum Zeitpunkt des Ladens der Einstellungsseite"},"log-collection":{name:"Sammeln Sie Protokolle bei aktiviertem Linten beim Speichern und dem Linten der aktuellen Datei",description:"Sammelt die Log-Meldungen, wenn Sie Linten beim Speichern aktiviert haben und die aktuelle Datei linten. Diese Protokolle k\xF6nnen beim Debuggen und Erstellen von Fehlerberichten hilfreich sein."},"linter-logs":{name:"Linter-Protokolle",description:"Die Protokolle des letzten Linten beim Speichern-Durchlaufes oder dem letzten Linten der aktuellen Datei werden gesammelt, wenn die Option aktiviert ist."}}},options:{"custom-command":{name:"Benutzerdefinierte Befehle",description:"Benutzerdefinierte Befehle sind Obsidian-Befehle, die ausgef\xFChrt werden, nachdem der Linter seine regul\xE4ren Regeln ausgef\xFChrt hat. Dies bedeutet, dass sie nicht ausgef\xFChrt werden, bevor die YAML-Zeitstempellogik ausgef\xFChrt wird, sodass sie dazu f\xFChren k\xF6nnen, dass der YAML-Zeitstempel bei der n\xE4chsten Ausf\xFChrung des Linters ausgel\xF6st wird. Sie k\xF6nnen einen Obsidian-Befehl nur einmal ausw\xE4hlen.",warning:"Wenn Sie eine Option ausw\xE4hlen, stellen Sie sicher, dass Sie die Option entweder mit der Maus oder durch Dr\xFCcken der Eingabetaste ausw\xE4hlen. Andere Auswahlmethoden funktionieren m\xF6glicherweise nicht und es werden nur Auswahlen eines tats\xE4chlichen Obsidian-Befehls oder einer leeren Zeichenfolge gespeichert.","add-input-button-text":"Neuen Befehl hinzuf\xFCgen","command-search-placeholder-text":"Obsidian-Befehl","move-up-tooltip":"Aufr\xFCcken","move-down-tooltip":"Bewegen Sie sich nach unten","delete-tooltip":"L\xF6schen"},"custom-replace":{name:"Benutzerdefinierter Regex-Ersatz",description:"Der benutzerdefinierte Regex-Ersatz kann verwendet werden, um alles zu ersetzen, was mit dem Such-Regex mit dem Ersatzwert \xFCbereinstimmt. Bei den Werten replace und find muss es sich um g\xFCltige Regex-Werte handeln.",warning:"Verwenden Sie dies mit Vorsicht, wenn Sie Regex nicht kennen. Stellen Sie au\xDFerdem sicher, dass Sie keine Lookbehinds in Ihrem regul\xE4ren Ausdruck auf iOS-Mobilger\xE4ten verwenden, da dies dazu f\xFChrt, dass Lints fehlschlagen, da dies auf dieser Plattform nicht unterst\xFCtzt wird.","add-input-button-text":"Neuen Regex-Ersatz hinzuf\xFCgen","regex-to-find-placeholder-text":"Regex zu finden","flags-placeholder-text":"Flaggen","regex-to-replace-placeholder-text":"Regex zu ersetzen","label-placeholder-text":"Etikett","move-up-tooltip":"Aufr\xFCcken","move-down-tooltip":"Bewegen Sie sich nach unten","delete-tooltip":"L\xF6schen"}},rules:{"auto-correct-common-misspellings":{name:"H\xE4ufige Rechtschreibfehler automatisch korrigieren",description:'Verwendet ein W\xF6rterbuch mit h\xE4ufigen Rechtschreibfehlern, um sie automatisch in die richtige Schreibweise umzuwandeln. Siehe Autokorrekturkarte f\xFCr die vollst\xE4ndige Liste der automatisch korrigierten W\xF6rter.',"ignore-words":{name:"Ignorieren Sie W\xF6rter",description:"Eine durch Kommas getrennte Liste von W\xF6rtern in Kleinbuchstaben, die bei der automatischen Korrektur ignoriert werden sollen"}},"add-blockquote-indentation-on-paste":{name:"Blockquote-Einr\xFCckung beim Einf\xFCgen hinzuf\xFCgen",description:"F\xFCgt Blockzitate zu allen au\xDFer der ersten Zeile hinzu, wenn sich der Cursor w\xE4hrend des Einf\xFCgens in einer Blockquote/Callout-Zeile befindet"},"blockquote-style":{name:"Blockquote-Stil",description:"Stellt sicher, dass der Blockquote-Stil konsistent ist.",style:{name:"Stil",description:"Der f\xFCr Blockquote-Indikatoren verwendete Stil"}},"capitalize-headings":{name:"\xDCberschriften gro\xDF schreiben",description:"\xDCberschriften sollten mit Gro\xDF- und Kleinschreibung formatiert werden",style:{name:"Stil",description:"Die Art der zu verwendenden Gro\xDFschreibung"},"ignore-case-words":{name:"Ignore Cased Words",description:"Only apply title case style to words that are all lowercase"},"ignore-words":{name:"Ignorieren Sie Gro\xDF-/Kleinschreibungsw\xF6rter",description:"Eine durch Kommas getrennte Liste von W\xF6rtern, die bei der Gro\xDFschreibung ignoriert werden sollen"},"lowercase-words":{name:"W\xF6rter in Kleinbuchstaben",description:"Eine durch Kommas getrennte Liste von W\xF6rtern, um Kleinbuchstaben zu behalten"}},"compact-yaml":{name:"YAML komprimieren",description:"Entfernt f\xFChrende und nachfolgende Leerzeilen im YAML-Frontmatter.","inner-new-lines":{name:"Innere neue Zeilen",description:"Entfernen Sie neue Zeilen, die sich nicht am Anfang oder am Ende der YAML befinden"}},"consecutive-blank-lines":{name:"aufeinanderfolgende Leerzeilen zusammenfassen",description:"Es sollte h\xF6chstens eine aufeinanderfolgende Leerzeile geben."},"convert-bullet-list-markers":{name:"Konvertiere Aufz\xE4hlungszeichen",description:"Konvertiert g\xE4ngige Symbole f\xFCr Aufz\xE4hlungslisten in Markdown-Listenmarkierungen."},"convert-spaces-to-tabs":{name:"Leerzeichen in Tabulatoren konvertieren",description:"Konvertiert f\xFChrende Leerzeichen in Tabulatoren.",tabsize:{name:"Tabgr\xF6\xDFe",description:"Anzahl der Leerzeichen, die in einen Tabulator umgewandelt werden"}},"emphasis-style":{name:"Hervorhebungsstil",description:"Stellt sicher, dass der Hervorhebungsstil konsistent ist.",style:{name:"Stil",description:"Der Stil, der verwendet wird, um hervorgehobene Inhalte zu kennzeichnen"}},"empty-line-around-blockquotes":{name:"Leere Zeile um Blockquotes",description:"Stellt sicher, dass Blockzitate in einer leeren Zeile stehen, es sei denn, sie beginnen oder beenden ein Dokument. Beachten Sie, dass eine leere Zeile entweder eine Verschachtelungsebene weniger f\xFCr Blockzitate oder ein Zeilenumbruchzeichen ist."},"empty-line-around-code-fences":{name:"Leere Zeile um Code-Bereiche",description:"Stellt sicher, dass Codebereiche mit einer leeren Zeile versehen sind, es sei denn, sie beginnen oder beenden ein Dokument."},"empty-line-around-math-blocks":{name:"Leere Zeile um mathematische Bl\xF6cke",description:"Stellt sicher, dass es eine leere Zeile um mathematische Bl\xF6cke gibt, indem Anzahl der Dollarzeichen, die einen mathematischen Block anzeigen verwendet wird, um zu bestimmen, wie viele Dollarzeichen einen mathematischen Block f\xFCr einzeilige Mathematik anzeigen."},"empty-line-around-tables":{name:"Leere Zeile um Tabellen",description:"Stellt sicher, dass es eine leere Zeile um Github-formatierte Tabellen gibt, es sei denn, sie beginnen oder beenden ein Dokument."},"escape-yaml-special-characters":{name:"Escape-YAML-Sonderzeichen",description:`Maskiert Doppelpunkte mit einem Leerzeichen nach ihnen (: ), einfache Anf\xFChrungszeichen (') und doppelte Anf\xFChrungszeichen (") in YAML.`,"try-to-escape-single-line-arrays":{name:"Versucht, Single-Line-Arrays zu vermeiden",description:'Versucht, Arraywerte zu maskieren, wobei davon ausgegangen wird, dass ein Array mit "[" beginnt, mit "]" endet und Elemente enth\xE4lt, die durch "," getrennt sind.'}},"file-name-heading":{name:"\xDCberschrift des Dateinamens",description:"F\xFCgt den Dateinamen als H1-\xDCberschrift ein, wenn keine H1-\xDCberschrift vorhanden ist."},"footnote-after-punctuation":{name:"Fu\xDFnote nach Interpunktion",description:"Stellt sicher, dass Fu\xDFnotenverweise nach der Interpunktion und nicht davor platziert werden."},"force-yaml-escape":{name:"YAML-Escape erzwingen",description:"Maskiert die Werte f\xFCr die angegebenen YAML-Schl\xFCssel.","force-yaml-escape-keys":{name:"Erzwingen Sie die YAML-Escape-Klausel f\xFCr Schl\xFCssel",description:"Verwendet das YAML-Escapezeichen f\xFCr die angegebenen YAML-Schl\xFCssel, die durch ein Zeilenumbruchzeichen getrennt sind, wenn es nicht bereits mit Escapezeichen versehen ist. Nicht auf YAML-Arrays verwenden."}},"format-tags-in-yaml":{name:"Formatieren von Tags in YAML",description:"Entfernen Sie Hashtags aus Tags im YAML-Frontmatter, da sie die Tags dort ung\xFCltig machen."},"format-yaml-array":{name:"Formatieren des YAML-Arrays",description:"Erm\xF6glicht die Formatierung von regul\xE4ren YAML-Arrays als mehrzeilig oder einzeilig und tags und aliases d\xFCrfen einige Obsidian-spezifische YAML-Formate haben. Beachten Sie, dass eine einzelne Zeichenfolge zu einer einzelnen Zeile von einem einzelnen Zeichenfolgeneintrag zu einem einzeiligen Array wechselt, wenn mehr als 1 Eintrag vorhanden ist. Das Gleiche gilt f\xFCr eine einzelne Zeichenfolge bis zu einer mehrzeiligen Zeichenfolge, mit der Ausnahme, dass sie zu einem mehrzeiligen Array wird.","alias-key":{name:'Abschnitt "YAML-Aliase" formatieren',description:"Aktiviert die Formatierung f\xFCr den Abschnitt YAML-Aliase. Sie sollten diese Option nicht zusammen mit der Regel YAML-Titel-Alias aktivieren, da sie m\xF6glicherweise nicht gut zusammenarbeiten oder unterschiedliche Formatstile ausgew\xE4hlt haben, was zu unerwarteten Ergebnissen f\xFChrt."},"tag-key":{name:'Abschnitt "YAML-Tags formatieren"',description:"Aktiviert die Formatierung f\xFCr den Abschnitt YAML-Tags."},"default-array-style":{name:"Standardm\xE4\xDFiger YAML-Array-Abschnittsstil",description:"Der Stil anderer YAML-Arrays, die nicht tags oder aliases sind oder bei Erzwingt f\xFCr Schl\xFCsselwerte einzeilige Arrays und Erzwingt f\xFCr Schl\xFCsselwerte mehrzeilige Arrays"},"default-array-keys":{name:"Formatieren von YAML-Array-Abschnitten",description:"Aktiviert die Formatierung f\xFCr regul\xE4re YAML-Arrays"},"force-single-line-array-style":{name:"Erzwingt f\xFCr Schl\xFCsselwerte einzeilige Arrays",description:"Erzwingt, dass das YAML-Array f\xFCr die neuen zeilengetrennten Schl\xFCssel im einzeiligen Format vorliegt (leer lassen, um diese Option zu deaktivieren)"},"force-multi-line-array-style":{name:"Erzwingt f\xFCr Schl\xFCsselwerte mehrzeilige Arrays",description:"Erzwingt, dass das YAML-Array f\xFCr die neuen zeilengetrennten Schl\xFCssel im mehrzeiligen Format vorliegt (leer lassen, um diese Option zu deaktivieren)"}},"header-increment":{name:"Header-Inkrement",description:"\xDCberschriftenebenen sollten jeweils nur um eine Ebene erh\xF6ht werden","start-at-h2":{name:"Start-Header-Inkrement auf \xDCberschriftenebene 2",description:"Legt die \xDCberschriftenebene 2 als minimale \xDCberschriftenebene in einer Datei f\xFCr das Kopfzeileninkrement fest und verschiebt alle \xDCberschriften entsprechend, sodass sie beginnend mit einer \xDCberschrift der Ebene 2 inkrementiert werden."}},"heading-blank-lines":{name:"\xDCberschriften mit Leerzeilen",description:"Alle \xDCberschriften haben sowohl davor als auch danach eine Leerzeile (au\xDFer wenn sich die \xDCberschrift am Anfang oder Ende des Dokuments befindet).",bottom:{name:"Darunter",description:"Einf\xFCgen einer Leerzeile unter \xDCberschriften"},"empty-line-after-yaml":{name:"Leere Zeile zwischen YAML und Header",description:"Behalten Sie die leere Zeile zwischen dem YAML-Frontmatter und dem Header bei"}},"headings-start-line":{name:"\xDCberschriften am Zeilenbeginn",description:"Bei \xDCberschriften, die keine Zeile beginnen, wird der vorangehende Leerraum entfernt, um sicherzustellen, dass sie als \xDCberschriften erkannt werden."},"insert-yaml-attributes":{name:"Einf\xFCgen von YAML-Attributen",description:"F\xFCgt die angegebenen YAML-Attribute in den YAML-Frontmatter ein. Setzen Sie jedes Attribut in eine einzelne Zeile.","text-to-insert":{name:"Text zum Einf\xFCgen",description:"Text, der in den YAML-Frontmatter eingef\xFCgt werden soll"}},"line-break-at-document-end":{name:"Zeilenumbruch am Dokumentende",description:"Stellt sicher, dass am Ende eines Dokuments genau ein Zeilenumbruch steht."},"move-footnotes-to-the-bottom":{name:"Fu\xDFnoten nach unten verschieben",description:"Verschieben Sie alle Fu\xDFnoten an das Ende des Dokuments."},"move-math-block-indicators-to-their-own-line":{name:"Verschieben Sie mathematische Blockindikatoren in eine eigene Zeile",description:"Verschieben Sie alle Anfangs- und Endindikatoren f\xFCr mathematische Bl\xF6cke in ihre eigenen Zeilen, indem Sie Anzahl der Dollarzeichen, die einen mathematischen Block anzeigen verwenden, um zu bestimmen, wie viele Dollarzeichen einen mathematischen Block f\xFCr einzeilige Mathematik anzeigen."},"move-tags-to-yaml":{name:"Tags nach YAML verschieben",description:"Verschieben Sie alle Tags in den YAML-Frontmatter des Dokuments.","how-to-handle-existing-tags":{name:"Body-Tag-Operation",description:"Die Aktion, die mit nicht ignorierten Tags im Hauptteil der Datei ausgef\xFChrt werden soll, nachdem sie in den Frontmatter verschoben wurden"},"tags-to-ignore":{name:"ignorierte Tags",description:"Die Tags, die nicht in das Tags-Array verschoben oder aus dem Textinhalt entfernt werden, wenn Entfernen Sie den Hashtag aus Tags im Inhaltstext aktiviert ist. Jedes Tag sollte in einer neuen Zeile und ohne das # stehen. Stellen Sie sicher, dass Sie den Hashtag nicht in den Tag-Namen aufnehmen."}},"no-bare-urls":{name:"Keine blo\xDFen URLs",description:"Umschlie\xDFt blo\xDFe URLs mit spitzen Klammern, es sei denn, sie sind in Back-Ticks, eckige Klammern oder einfache oder doppelte Anf\xFChrungszeichen eingeschlossen."},"ordered-list-style":{name:"Geordneter Listenstil",description:"Stellt sicher, dass geordnete Listen dem angegebenen Stil entsprechen. Beachten Sie, dass 2 Leerzeichen oder 1 Tabulator als Einr\xFCckungsebene betrachtet werden.","number-style":{name:"Zahlen-Stil",description:"Der Zahlenstil, der in geordneten Listenindikatoren verwendet wird"},"list-end-style":{name:"Endestil des Indikators f\xFCr eine geordnete Liste",description:"Das Endezeichen eines geordneten Listenkennzeichens"}},"paragraph-blank-lines":{name:"Leere Absatzzeilen",description:"Alle Abs\xE4tze sollten sowohl davor als auch danach genau eine Leerzeile haben."},"prevent-double-checklist-indicator-on-paste":{name:"Verhindern Sie eine doppelte Checklistenanzeige beim Einf\xFCgen",description:"Entfernt die Start-Checklisten-Anzeige aus dem Text, um sie einzuf\xFCgen, wenn die Zeile, auf der sich der Cursor in der Datei befindet, \xFCber eine Checklistenanzeige verf\xFCgt"},"prevent-double-list-item-indicator-on-paste":{name:"Verhindern Sie die Anzeige f\xFCr doppelte Listenelemente beim Einf\xFCgen",description:"Entfernt den Startlistenindikator aus dem Text, der eingef\xFCgt werden soll, wenn die Zeile, auf der sich der Cursor in der Datei befindet, einen Listenindikator hat"},"proper-ellipsis-on-paste":{name:"Richtige Auslassungspunkte auf Paste",description:"Ersetzt drei aufeinanderfolgende Punkte durch Auslassungspunkte, auch wenn sie im Text ein Leerzeichen zum Einf\xFCgen haben"},"proper-ellipsis":{name:"Richtige Auslassungspunkte",description:"Ersetzt drei aufeinanderfolgende Punkte durch Auslassungspunkte."},"quote-style":{name:"Zitatstil",description:"Aktualisiert die Anf\xFChrungszeichen im Textk\xF6rperinhalt, sodass sie auf die angegebenen einfachen und doppelten Anf\xFChrungszeichenstile aktualisiert werden.","single-quote-enabled":{name:"Aktivieren Sie Stil f\xFCr einfache Anf\xFChrungszeichen",description:"Gibt an, dass der ausgew\xE4hlte einfache Anf\xFChrungszeichenstil verwendet werden soll."},"single-quote-style":{name:"Stil f\xFCr einfache Anf\xFChrungszeichen",description:"Der Stil der zu verwendenden einfachen Anf\xFChrungszeichen."},"double-quote-enabled":{name:"Aktivieren Sie Stil f\xFCr doppelte Anf\xFChrungszeichen",description:"Gibt an, dass der ausgew\xE4hlte doppelte Anf\xFChrungszeichenstil verwendet werden soll."},"double-quote-style":{name:"Stil f\xFCr doppelte Anf\xFChrungszeichen",description:"Der zu verwendende Stil der doppelten Anf\xFChrungszeichen."}},"re-index-footnotes":{name:"Fu\xDFnoten neu indizieren",description:"Indiziert Fu\xDFnotenschl\xFCssel und Fu\xDFnoten basierend auf der Reihenfolge des Auftretens neu (HINWEIS: Diese Regel funktioniert *nicht*, wenn es mehr als eine Fu\xDFnote f\xFCr einen Schl\xFCssel gibt.)"},"remove-consecutive-list-markers":{name:"Entfernen Sie aufeinanderfolgende Listenmarkierungen",description:"Entfernt aufeinanderfolgende Listenmarkierungen. N\xFCtzlich beim Kopieren und Einf\xFCgen von Listenelementen."},"remove-empty-lines-between-list-markers-and-checklists":{name:"Entfernen Sie leere Zeilen zwischen Listenmarkierungen und Checklisten",description:"Es sollten keine leeren Zeilen zwischen Listenmarkierungen und Checklisten stehen."},"remove-empty-list-markers":{name:"Entfernen Sie leere Listenmarkierungen",description:"Entfernt leere Listenmarkierungen, d.h. Listenelemente ohne Inhalt."},"remove-hyphenated-line-breaks":{name:"Entfernen Sie Zeilenumbr\xFCche mit Bindestrich",description:"Entfernt Zeilenumbr\xFCche mit Bindestrich. N\xFCtzlich beim Einf\xFCgen von Text aus Lehrb\xFCchern."},"remove-hyphens-on-paste":{name:"Entfernen Sie Bindestriche auf Paste",description:"Entfernt Bindestriche aus dem Text zum Einf\xFCgen"},"remove-leading-or-trailing-whitespace-on-paste":{name:"Entfernen Sie f\xFChrende oder nachgestellte Leerzeichen beim Einf\xFCgen",description:"Entfernt alle f\xFChrenden Leerzeichen ohne Tabulatoren und alle nachgestellten Leerzeichen, die der Text einf\xFCgen kann"},"remove-leftover-footnotes-from-quote-on-paste":{name:"Entfernen Sie \xFCbrig gebliebene Fu\xDFnoten aus dem Zitat beim Einf\xFCgen",description:"Entfernt alle \xFCbrig gebliebenen Fu\xDFnotenverweise, die der Text einf\xFCgen kann"},"remove-link-spacing":{name:"Linkabstand entfernen",description:"Entfernt den Abstand um den Linktext."},"remove-multiple-blank-lines-on-paste":{name:"Entfernen Sie mehrfache Leerzeilen beim Einf\xFCgen",description:"Verdichtet mehrere Leerzeilen zu einer Leerzeile, damit der Text eingef\xFCgt werden kann"},"remove-multiple-spaces":{name:"Entfernen Sie mehrfache Leerzeichen",description:"Entfernt zwei oder mehr aufeinanderfolgende Leerzeichen. Ignoriert Leerzeichen am Anfang und am Ende der Zeile."},"remove-space-around-characters":{name:"Entfernen Sie den Abstand um die Zeichen",description:"Stellt sicher, dass bestimmte Zeichen nicht von Leerzeichen umgeben sind (entweder einzelne Leerzeichen oder ein Tabulator). Beachten Sie, dass dies in einigen F\xE4llen zu Problemen mit dem Markdown-Format f\xFChren kann.","include-fullwidth-forms":{name:"Einf\xFCgen von Formularen in voller Breite",description:'Einschlie\xDFen Unicode-Block "Formulare" in voller Breite'},"include-cjk-symbols-and-punctuation":{name:"CJK-Symbole und Satzzeichen einschlie\xDFen",description:'Einschlie\xDFen CJK-Symbole und Satzzeichen Unicode-Block'},"include-dashes":{name:"Bindestriche einschlie\xDFen",description:"F\xFCgen Sie den Gedankenstrich (\u2013) und den Gedankenstrich (\u2014) ein"},"other-symbols":{name:"Andere Symbole",description:"Andere Symbole, die enthalten sind"}},"remove-space-before-or-after-characters":{name:"Entfernen Sie Leerzeichen vor oder nach Zeichen",description:"Entfernt Leerzeichen vor und nach den angegebenen Zeichen. Beachten Sie, dass dies in einigen F\xE4llen zu Problemen mit dem Markdown-Format f\xFChren kann.","characters-to-remove-space-before":{name:"Leerzeichen vor Zeichen entfernen",description:"Entfernt Leerzeichen vor den angegebenen Zeichen. Hinweis: Die Verwendung von { oder } in der Zeichenliste wirkt sich unerwartet auf Dateien aus, da es in der Ignoriersyntax hinter den Kulissen verwendet wird."},"characters-to-remove-space-after":{name:"Leerzeichen nach Zeichen entfernen",description:"Entfernt Leerzeichen vor den angegebenen Zeichen. Hinweis: Die Verwendung von { oder } in der Zeichenliste wirkt sich unerwartet auf Dateien aus, da es in der Ignoriersyntax hinter den Kulissen verwendet wird."}},"remove-trailing-punctuation-in-heading":{name:"Entfernen Sie nachgestellte Satzzeichen in der \xDCberschrift",description:'Entfernt die angegebene Interpunktion am Ende von \xDCberschriften, wobei darauf zu achten ist, dass das Semikolon am Ende von HTML-Entit\xE4tsreferenzen ignoriert wird.',"punctuation-to-remove":{name:"Nachfolgende Interpunktion",description:"Das nachfolgende Satzzeichen, das aus den \xDCberschriften in der Datei entfernt werden soll."}},"remove-yaml-keys":{name:"Entfernen von YAML-Schl\xFCsseln",description:"Entfernt die angegebenen YAML-Schl\xFCssel","yaml-keys-to-remove":{name:"Zu entfernende YAML-Schl\xFCssel",description:"Die zu entfernenden YAML-Schl\xFCssel aus dem YAML-Frontmatter mit oder ohne Doppelpunkt"}},"space-after-list-markers":{name:"Leerzeichen nach Listenmarkierungen",description:"Es sollte ein einzelnes Leerzeichen nach Listenmarkierungen und Kontrollk\xE4stchen geben."},"space-between-chinese-japanese-or-korean-and-english-or-numbers":{name:"Leerzeichen zwischen Chinesisch, Japanisch oder Koreanisch und Englisch oder Zahlen",description:'Stellt sicher, dass Chinesisch, Japanisch oder Koreanisch und Englisch oder Zahlen durch ein einziges Leerzeichen getrennt werden. Folgt diesen Richtlinien'},"strong-style":{name:"Starker Stil",description:"Stellt sicher, dass der starke Stil konsistent ist.",style:{name:"Stil",description:"Der Stil, der verwendet wird, um starke/fettgedruckte Inhalte zu kennzeichnen"}},"trailing-spaces":{name:"Nachgestellte Leerzeichen",description:"Entfernt zus\xE4tzliche Leerzeichen nach jeder Zeile.","twp-space-line-break":{name:"Zwei Leerzeichen Zeilenumbruch",description:'Ignorieren Sie zwei Leerzeichen, gefolgt von einem Zeilenumbruch ("Zwei-Leerzeichen-Regel").'}},"two-spaces-between-lines-with-content":{name:"Zwei Leerzeichen zwischen Zeilen mit Inhalt",description:"Stellt sicher, dass zwei Leerzeichen an den Zeilenenden hinzugef\xFCgt werden, wobei der Inhalt in der n\xE4chsten Zeile f\xFCr Abs\xE4tze, Blockzitate und Listenelemente fortgesetzt wird"},"unordered-list-style":{name:"Ungeordneter Listenstil",description:"Stellt sicher, dass ungeordnete Listen dem angegebenen Stil folgen.","list-style":{name:"Stil des Listenelements",description:"Das Listenelementformat, das in ungeordneten Listen verwendet werden soll"}},"yaml-key-sort":{name:"Sortierung von YAML-Schl\xFCsseln",description:"Sortiert die YAML-Schl\xFCssel basierend auf der angegebenen Reihenfolge und Priorit\xE4t. Hinweis: Kann auch Leerzeilen entfernen.","yaml-key-priority-sort-order":{name:"Priorit\xE4tssortierreihenfolge der YAML-Schl\xFCssel",description:"Die Reihenfolge, in der die Schl\xFCssel sortiert werden sollen, wobei in jeder Zeile ein Schl\xFCssel in der Reihenfolge der Liste sortiert wird"},"priority-keys-at-start-of-yaml":{name:"Priorit\xE4tsschl\xFCssel am Anfang von YAML",description:"Die priorisierte Sortierreihenfolge der YAML-Schl\xFCssel wird am Anfang des YAML-Frontmatters platziert"},"yaml-sort-order-for-other-keys":{name:"YAML-Sortierreihenfolge f\xFCr andere Schl\xFCssel",description:"Die Art und Weise, wie die Schl\xFCssel sortiert werden, die nicht im Textbereich der priorisierten Sortierreihenfolge von YAML-Keys vorhanden sind"}},"yaml-timestamp":{name:"YAML-Zeitstempel",description:"Verfolgen Sie das Datum, an dem die Datei zuletzt bearbeitet wurde, im YAML-Frontmatter. Ruft Datumsangaben aus Dateimetadaten ab.","date-created":{name:"Erstellungsdatum",description:"Geben Sie das Datum ein, an dem die Datei erstellt wurde"},"date-created-key":{name:"Schl\xFCssel f\xFCr das Erstellungsdatum",description:"Der YAML-Schl\xFCssel, der f\xFCr das Erstellungsdatum verwendet werden soll"},"date-modified":{name:"\xC4nderungsdatum",description:"Geben Sie das Datum ein, an dem die Datei zuletzt ge\xE4ndert wurde"},"date-modified-key":{name:"Schl\xFCssel f\xFCr das \xC4nderungsdatum",description:"Der YAML-Schl\xFCssel, der f\xFCr das \xC4nderungsdatum verwendet werden soll"},format:{name:"Format",description:'Zu verwendendes Datumsformat f\xFCr Moment.js (siehe Momentformatoptionen)'}},"yaml-title-alias":{name:"YAML-Titel-Alias",description:"F\xFCgt den Titel der Datei in den Aliasabschnitt des YAML-Frontmatters ein. Ruft den Titel aus dem ersten H1- oder Dateinamen ab.","preserve-existing-alias-section-style":{name:"Vorhandenes Alias-Abschnittsformat beibehalten",description:"Wenn diese Option festgelegt ist, gilt die Einstellung YAML-Aliase-Abschnittsstil nur f\xFCr die neu erstellten Abschnitte"},"keep-alias-that-matches-the-filename":{name:"Behalten Sie einen Alias bei, der mit dem Dateinamen \xFCbereinstimmt",description:"Solche Aliase sind in der Regel redundant"},"use-yaml-key-to-keep-track-of-old-filename-or-heading":{name:"Verwenden Sie den YAML-Schl\xFCssel linter-yaml-title-alias, um bei \xC4nderungen von Dateinamen und \xDCberschriften zu helfen",description:"Wenn sich die erste H1-\xDCberschrift \xE4ndert oder der Dateiname ge\xE4ndert wird, wenn der erste H1 nicht vorhanden ist, wird der alte Alias, der in diesem Schl\xFCssel gespeichert ist, durch den neuen Wert ersetzt, anstatt nur einen neuen Eintrag in das Alias-Array einzuf\xFCgen"}},"yaml-title":{name:"YAML-Titel",description:"F\xFCgt den Titel der Datei in das YAML-Frontmatter ein. Ruft den Titel basierend auf dem ausgew\xE4hlten Modus ab.","title-key":{name:"Titel-Schl\xFCssel",description:"Der YAML-Schl\xFCssel, der f\xFCr den Titel verwendet werden soll"},mode:{name:"Modus",description:"Die zum Abrufen des Titels zu verwendende Methode"}}},enums:{"Title Case":"Titel Gro\xDF- und Kleinschreibung","ALL CAPS":"GROSSBUCHSTABEN","First letter":"Anfangsbuchstabe",".":".",")":")",ERROR:"Fehler",TRACE:"Spur",DEBUG:"Debuggen",INFO:"Info",WARN:"Warnen",SILENT:"Leise",ascending:"aufsteigend",lazy:"lazy",Nothing:"Faul","Remove hashtag":"Hashtag entfernen","Remove whole tag":"Ganzes Tag entfernen",asterisk:"Sternchen",underscore:"unterstreichen",consistent:"folgerichtig","-":"-","*":"*","+":"+",space:"Raum","no space":"kein Platz",None:"Nichts","Ascending Alphabetical":"Aufsteigend Alphabetisch","Descending Alphabetical":"Absteigend Alphabetisch","multi-line":"mehrzeilig","single-line":"einzeilig","single string to single-line":"Single String zu Single-Line","single string to multi-line":"Single String zu Multi-Line","single string comma delimited":"Komma mit Trennzeichen f\xFCr eine Zeichenfolge","single string space delimited":"Einzelzeichenfolgenabstand durch Trennzeichen","single-line space delimited":"einzeiliger Abstand durch Trennzeichen","first-h1":"erste \xDCberschrift der Ebene 1","first-h1-or-filename-if-h1-missing":"Erste \xDCberschrift der Ebene 1 oder Dateiname, wenn die \xDCberschrift der Ebene 1 fehlt",filename:"Dateinamen","''":"''","\u2018\u2019":"\u2018\u2019",'""':'""',"\u201C\u201D":"\u201C\u201D","\\":"\\","
    ":"
    "," ":" ","
    ":"
    "}};var gl={commands:{"lint-file":{name:"Lint the current file","error-message":"Lint File Error in File"},"lint-file-unless-ignored":{name:"Lint the current file unless ignored"},"lint-all-files":{name:"Lint all files in the vault","error-message":"Lint All Files Error in File","success-message":"Linted all files","errors-message-singular":"Linted all files and there was 1 error.","errors-message-plural":"Linted all files and there were {NUM} errors.","start-message":"This will edit all of your files and may introduce errors.","submit-button-text":"Lint All","submit-button-notice-text":"Linting all files..."},"lint-all-files-in-folder":{name:"Lint all files in the current folder","start-message":"This will edit all of your files in {FOLDER_NAME} including files in its subfolders which may introduce errors.","submit-button-text":"Lint All Files in {FOLDER_NAME}","submit-button-notice-text":"Linting all files in {FOLDER_NAME}...","error-message":"Lint All Files in Folder Error in File","success-message":"Linted all {NUM} files in {FOLDER_NAME}.","message-singular":"Linted all {NUM} files in {FOLDER_NAME} and there was 1 error.","message-plural":"Linted all {FILE_COUNT} files in {FOLDER_NAME} and there were {ERROR_COUNT} error."},"paste-as-plain-text":{name:"Paste as Plain Text & without Modifications"},"lint-file-pop-up-menu-text":{name:"Lint file"},"lint-folder-pop-up-menu-text":{name:"Lint folder"}},logs:{"plugin-load":"Loading plugin","plugin-unload":"Unloading plugin","folder-lint":"Linting folder ","linter-run":"Running linter","file-change-yaml-lint-run":"Running editor content change YAML linting","file-change-yaml-lint-skipped":"No file change detected, so YAML linting skipped","file-change-yaml-lint-warning":"No file info is present, but debounce ran. Something went wrong somewhere.","paste-link-warning":"aborted paste lint as the clipboard content is a link and doing so will avoid conflicts with other plugins that modify pasting.","see-console":"See console for more details.","unknown-error":"An unknown error occurred during linting.","moment-locale-not-found":"Trying to switch Moment.js locale to {MOMENT_LOCALE}, got {CURRENT_LOCALE}","file-change-lint-message-start":"Linted","custom-command-callback-warning":"Please only set the custom command callback for integration tests.","pre-rules":"rules before regular rules","post-rules":"rules after regular rules","rule-running":"rules running","custom-regex":"custom regex rules","running-custom-regex":"Running Custom Regex","running-custom-lint-command":"Running Custom Lint Commands","custom-lint-duplicate-warning":'You cannot run the same command ("{COMMAND_NAME}") as a custom lint rule twice.',"custom-lint-error-message":"Custom Lint Command","disabled-text":"is disabled","run-rule-text":"Running","timing-key-not-found":"timing key '{TIMING_KEY}' does not exist in the timing info list, so it was ignored","milliseconds-abbreviation":"ms","invalid-date-format-error":"The format of the created date '{DATE}' could not be parsed or determined so the created date was left alone in '{FILE_NAME}'","invalid-delimiter-error-message":"delimiter is only allowed to be a single character","missing-footnote-error-message":"Footnote '{FOOTNOTE}' has no corresponding footnote reference before the footnote contents and cannot be processed. Please make sure that all footnotes have a corresponding reference before the content of the footnote.","too-many-footnotes-error-message":"Footnote key '{FOOTNOTE_KEY}' has more than 1 footnote referencing it. Please update the footnotes so that there is only one footnote per footnote key.","wrapper-yaml-error":"error in the YAML: {ERROR_MESSAGE}","wrapper-unknown-error":"unknown error: {ERROR_MESSAGE}"},"notice-text":{"empty-clipboard":"There is no clipboard content.","characters-added":"characters added","characters-removed":"characters removed","copy-to-clipboard-failed":"Failed to copy text to clipboard: "},"all-rules-option":"All","linter-title":"Linter","empty-search-results-text":"No settings match search","warning-text":"Warning","file-backup-text":"Make sure you have backed up your files.","custom-command-warning":"Linting multiple files with custom commands enabled is a slow process that requires the ability to open panes in the side panel. It is noticeably slower than running without custom commands enabled. Please proceed with caution.","cancel-button-text":"Cancel","copy-aria-label":"Copy","disabled-other-rule-notice":"If you enable {NAME_1}, it will disable {NAME_2}. Would you like to proceed?","disabled-conflicting-rule-notice":"{NAME_1}, conflicts with {NAME_2}, so it has been turned off. You can switch which setting is off in the settings tab.",ok:"Ok","parse-results-heading-text":"Custom Parse Values","file-parse-description-text":"The following is the list of custom replacements found in {FILE}.","no-parsed-values-found-text":"There were no custom replacements found in {FILE}. Please make sure that all tables with custom replacements in {FILE} only have two columns and all rows start and end with a pipe (i.e. |).","find-header-text":"Word to Find","replace-header-text":"Replacement Word","close-button-text":"Close",tabs:{names:{general:"General",custom:"Custom",yaml:"YAML",heading:"Heading",content:"Content",footnote:"Footnote",spacing:"Spacing",paste:"Paste",debug:"Debug"},"default-search-bar-text":"Search all settings",general:{"lint-on-save":{name:"Lint on save",description:"Lint the file on manual save (when Ctrl + S is pressed or when :w is executed while using vim keybindings)"},"display-message":{name:"Display message on lint",description:"Display the number of characters changed after linting"},"lint-on-file-change":{name:"Lint on Focused File Change",description:"When a file is closed or a new file is swapped to, the previous file is linted."},"display-lint-on-file-change-message":{name:"Display Lint on File Change Message",description:"Displays a message when Lint on Focused File Change occurs"},"folders-to-ignore":{name:"Folders to ignore",description:"Folders to ignore when linting all files or linting on save.","folder-search-placeholder-text":"Folder name","add-input-button-text":"Add another folder to ignore","delete-tooltip":"Delete"},"files-to-ignore":{name:"Files to ignore",description:"Files to ignore when linting all files or linting on save.","file-search-placeholder-text":"regex for file to ignore","add-input-button-text":"Add another file to ignore regex","delete-tooltip":"Delete","label-placeholder-text":"label","flags-placeholder-text":"flags",warning:"Use this with caution if you do not know regex. Also, please make sure that if you use lookbehinds in your regex on iOS mobile that you are on a version that supports using them."},"override-locale":{name:"Override locale",description:"Set this if you want to use a locale different from the default"},"same-as-system-locale":"Same as system ({SYS_LOCALE})","yaml-aliases-section-style":{name:"YAML aliases section style",description:"The style of the YAML aliases section"},"yaml-tags-section-style":{name:"YAML tags section style",description:"The style of the YAML tags section"},"default-escape-character":{name:"Default Escape Character",description:"The default character to use to escape YAML values when a single quote and double quote are not present."},"remove-unnecessary-escape-chars-in-multi-line-arrays":{name:"Remove Unnecessary Escape Characters when in Multi-Line Array Format",description:"Escape characters for multi-line YAML arrays don't need the same escaping as single-line arrays, so when in multi-line format remove extra escapes that are not necessary"},"number-of-dollar-signs-to-indicate-math-block":{name:"Number of Dollar Signs to Indicate Math Block",description:"The amount of dollar signs to consider the math content to be a math block instead of inline math"}},debug:{"log-level":{name:"Log Level",description:"The types of logs that will be allowed to be logged by the service. The default is ERROR."},"linter-config":{name:"Linter Config",description:"The contents of the data.json for the Linter as of the setting page loading"},"log-collection":{name:"Collect logs when linting on save and linting the current file",description:"Goes ahead and collects logs when you Lint on save and linting the current file. These logs can be helpful for debugging and create bug reports."},"linter-logs":{name:"Linter Logs",description:"The logs from the last Lint on save or the last lint current file run if enabled."}}},options:{"custom-command":{name:"Custom Commands",description:"Custom commands are Obsidian commands that get run after the linter is finished running its regular rules. This means that they do not run before the YAML timestamp logic runs, so they can cause YAML timestamp to be triggered on the next run of the linter. You may only select an Obsidian command once.",warning:"When selecting an option, make sure to select the option either by using the mouse or by hitting the enter key. Other selection methods may not work and only selections of an actual Obsidian command or an empty string will be saved.","add-input-button-text":"Add new command","command-search-placeholder-text":"Obsidian command","move-up-tooltip":"Move up","move-down-tooltip":"Move down","delete-tooltip":"Delete"},"custom-replace":{name:"Custom Regex Replacement",description:"Custom regex replacement can be used to replace anything that matches the find regex with the replacement value. The replace and find values will need to be valid regex values.",warning:"Use this with caution if you do not know regex. Also, please make sure that if you use lookbehinds in your regex on iOS mobile that you are on a version that supports using them.","add-input-button-text":"Add new regex replacement","regex-to-find-placeholder-text":"regex to find","flags-placeholder-text":"flags","regex-to-replace-placeholder-text":"regex to replace","label-placeholder-text":"label","move-up-tooltip":"Move up","move-down-tooltip":"Move down","delete-tooltip":"Delete"},"custom-auto-correct":{"delete-tooltip":"Delete","show-parsed-contents-tooltip":"View parsed replacements","custom-row-parse-warning":'"{ROW}" is not a valid row with custom replacements. It must have only 2 columns.',"file-search-placeholder-text":"File name","add-new-replacement-file-tooltip":"Add another custom file","warning-text":"Selected files will automatically have {NAME} disabled.","refresh-tooltip-text":"Reload custom replacements"}},rules:{"auto-correct-common-misspellings":{name:"Auto-correct Common Misspellings",description:'Uses a dictionary of common misspellings to automatically convert them to their proper spellings. See auto-correct map for the full list of auto-corrected words. Note: this list can work on text from multiple languages, but this list is the same no matter what language is currently in use.',"ignore-words":{name:"Ignore Words",description:"A comma separated list of lowercased words to ignore when auto-correcting"},"extra-auto-correct-files":{name:"Extra Auto-Correct Source Files",description:"These are files that have a markdown table in them that have the initial word and the word to correct it to (these are case insensitive corrections). Note: the tables used should have the starting and ending | indicators present for each line."},"skip-words-with-multiple-capitals":{name:"Skip Words with Multiple Capitals",description:"Will skip any files that have a capital letter in them other than as the first letter of the word. Acronyms and some other words can benefit from this. It may cause issues with proper nouns being properly fixed."},"default-install":"You are using Auto-correct Common Misspellings. In order to do so, the default misspellings will be downloaded. This should only happen once. Please wait...","default-install-failed":"Failed to download {URL}. Disabling Auto-correct Common Misspellings.","defaults-missing":"Failed to find default common auto-correct file: {FILE}."},"add-blank-line-after-yaml":{name:"Add Blank Line After YAML",description:"Adds a blank line after the YAML block if it does not end the current file or it is not already followed by at least 1 blank line"},"add-blockquote-indentation-on-paste":{name:"Add Blockquote Indentation on Paste",description:"Adds blockquotes to all but the first line, when the cursor is in a blockquote/callout line during pasting"},"blockquote-style":{name:"Blockquote Style",description:"Makes sure the blockquote style is consistent.",style:{name:"Style",description:"The style used on blockquote indicators"}},"capitalize-headings":{name:"Capitalize Headings",description:"Headings should be formatted with capitalization",style:{name:"Style",description:"The style of capitalization to use"},"ignore-case-words":{name:"Ignore Cased Words",description:"Only apply title case style to words that are all lowercase"},"ignore-words":{name:"Ignore Words",description:"A comma separated list of words to ignore when capitalizing"},"lowercase-words":{name:"Lowercase Words",description:"A comma separated list of words to keep lowercase"}},"compact-yaml":{name:"Compact YAML",description:"Removes leading and trailing blank lines in the YAML front matter.","inner-new-lines":{name:"Inner New Lines",description:"Remove new lines that are not at the start or the end of the YAML"}},"consecutive-blank-lines":{name:"Consecutive blank lines",description:"There should be at most one consecutive blank line."},"convert-bullet-list-markers":{name:"Convert Bullet List Markers",description:"Converts common bullet list marker symbols to markdown list markers."},"convert-spaces-to-tabs":{name:"Convert Spaces to Tabs",description:"Converts leading spaces to tabs.",tabsize:{name:"Tabsize",description:"Number of spaces that will be converted to a tab"}},"dedupe-yaml-array-values":{name:"Dedupe YAML Array Values",description:"Removes duplicate array values in a case sensitive manner.","dedupe-alias-key":{name:"Dedupe YAML aliases section",description:"Turns on removing duplicate aliases."},"dedupe-tag-key":{name:"Dedupe YAML tags section",description:"Turns on removing duplicate tags."},"dedupe-array-keys":{name:"Dedupe YAML array sections",description:"Turns on removing duplicate values for regular YAML arrays"},"ignore-keys":{name:"YAML Keys to Ignore",description:"A list of YAML keys without the ending colon on their own lines that are not meant to have duplicate values removed from them."}},"default-language-for-code-fences":{name:"Default Language For Code Fences",description:"Add a default language to code fences that do not have a language specified.","default-language":{name:"Programming Language",description:'Leave empty to do nothing. Languages tags can be found here.'}},"emphasis-style":{name:"Emphasis Style",description:"Makes sure the emphasis style is consistent.",style:{name:"Style",description:"The style used to denote emphasized content"}},"empty-line-around-blockquotes":{name:"Empty Line Around Blockquotes",description:"Ensures that there is an empty line around blockquotes unless they start or end a document. Note: an empty line is either one less level of nesting for blockquotes or a newline character."},"empty-line-around-code-fences":{name:"Empty Line Around Code Fences",description:"Ensures that there is an empty line around code fences unless they start or end a document."},"empty-line-around-math-blocks":{name:"Empty Line Around Math Blocks",description:"Ensures that there is an empty line around math blocks using Number of Dollar Signs to Indicate a Math Block to determine how many dollar signs indicates a math block for single-line math."},"empty-line-around-tables":{name:"Empty Line Around Tables",description:"Ensures that there is an empty line around github flavored tables unless they start or end a document."},"escape-yaml-special-characters":{name:"Escape YAML Special Characters",description:`Escapes colons with a space after them (: ), single quotes ('), and double quotes (") in YAML.`,"try-to-escape-single-line-arrays":{name:"Try to Escape Single Line Arrays",description:'Tries to escape array values assuming that an array starts with "[", ends with "]", and has items that are delimited by ",".'}},"file-name-heading":{name:"File Name Heading",description:"Inserts the file name as a H1 heading if no H1 heading exists."},"footnote-after-punctuation":{name:"Footnote after Punctuation",description:"Ensures that footnote references are placed after punctuation, not before."},"force-yaml-escape":{name:"Force YAML Escape",description:"Escapes the values for the specified YAML keys.","force-yaml-escape-keys":{name:"Force YAML Escape on Keys",description:"Uses the YAML escape character on the specified YAML keys separated by a new line character if it is not already escaped. Do not use on YAML arrays."}},"format-tags-in-yaml":{name:"Format Tags in YAML",description:"Remove Hashtags from tags in the YAML frontmatter, as they make the tags there invalid."},"format-yaml-array":{name:"Format YAML Array",description:"Allows for the formatting of regular YAML arrays as either multi-line or single-line and tags and aliases are allowed to have some Obsidian specific YAML formats. Note: that single string to single-line goes from a single string entry to a single-line array if more than 1 entry is present. The same is true for single string to multi-line except it becomes a multi-line array.","alias-key":{name:"Format YAML aliases section",description:"Turns on formatting for the YAML aliases section. You should not enable this option alongside the rule YAML Title Alias as they may not work well together or they may have different format styles selected causing unexpected results."},"tag-key":{name:"Format YAML tags section",description:"Turns on formatting for the YAML tags section."},"default-array-style":{name:"Default YAML array section style",description:"The style of other YAML arrays that are not tags, aliases or in Force key values to be single-line arrays and Force key values to be multi-line arrays"},"default-array-keys":{name:"Format YAML array sections",description:"Turns on formatting for regular YAML arrays"},"force-single-line-array-style":{name:"Force key values to be single-line arrays",description:"Forces the YAML array for the new line separated keys to be in single-line format (leave empty to disable this option)"},"force-multi-line-array-style":{name:"Force key values to be multi-line arrays",description:"Forces the YAML array for the new line separated keys to be in multi-line format (leave empty to disable this option)"}},"header-increment":{name:"Header Increment",description:"Heading levels should only increment by one level at a time","start-at-h2":{name:"Start Header Increment at Heading Level 2",description:"Makes heading level 2 the minimum heading level in a file for header increment and shifts all headings accordingly so they increment starting with a level 2 heading."}},"heading-blank-lines":{name:"Heading blank lines",description:"All headings have one blank line both before and after (except where the heading is at the beginning or end of the document).",bottom:{name:"Bottom",description:"Ensures one blank line after headings"},"empty-line-after-yaml":{name:"Empty Line Between YAML and Header",description:"Keep the empty line between the YAML frontmatter and header"}},"headings-start-line":{name:"Headings Start Line",description:"Headings that do not start a line will have their preceding whitespace removed to make sure they get recognized as headers."},"insert-yaml-attributes":{name:"Insert YAML attributes",description:"Inserts the given YAML attributes into the YAML frontmatter. Put each attribute on a single line.","text-to-insert":{name:"Text to insert",description:"Text to insert into the YAML frontmatter"}},"line-break-at-document-end":{name:"Line Break at Document End",description:"Ensures that there is exactly one line break at the end of a document if the note is not empty."},"move-footnotes-to-the-bottom":{name:"Move Footnotes to the bottom",description:"Move all footnotes to the bottom of the document and makes sure they are sorted based on the order they are referenced in the file's body."},"move-math-block-indicators-to-their-own-line":{name:"Move Math Block Indicators to Their Own Line",description:"Move all starting and ending math block indicators to their own lines using Number of Dollar Signs to Indicate a Math Block to determine how many dollar signs indicates a math block for single-line math."},"move-tags-to-yaml":{name:"Move Tags to YAML",description:"Move all tags to YAML frontmatter of the document.","how-to-handle-existing-tags":{name:"Body tag operation",description:"What to do with non-ignored tags in the body of the file once they have been moved to the frontmatter"},"tags-to-ignore":{name:"Tags to ignore",description:"The tags that will not be moved to the tags array or removed from the body content if Remove the hashtag from tags in content body is enabled. Each tag should be on a new line and without the #. Make sure not to include the hashtag in the tag name."}},"no-bare-urls":{name:"No Bare URLs",description:"Encloses bare URLs with angle brackets except when enclosed in back ticks, square braces, or single or double quotes.","no-bare-uris":{name:"No Bare URIs",description:"Attempts to enclose bare URIs with angle brackets except when enclosed in back ticks, square braces, or single or double quotes."}},"ordered-list-style":{name:"Ordered List Style",description:"Makes sure that ordered lists follow the style specified. Note: that 2 spaces or 1 tab is considered to be an indentation level.","number-style":{name:"Number Style",description:"The number style used in ordered list indicators"},"list-end-style":{name:"Ordered List Indicator End Style",description:"The ending character of an ordered list indicator"},"preserve-start":{name:"Preserve Starting Number",description:"Whether to preserve the starting number of an ordered list. This can be used to have an ordered list that has content in between the ordered list items."}},"paragraph-blank-lines":{name:"Paragraph blank lines",description:"All paragraphs should have exactly one blank line both before and after."},"prevent-double-checklist-indicator-on-paste":{name:"Prevent Double Checklist Indicator on Paste",description:"Removes starting checklist indicator from the text to paste if the line the cursor is on in the file has a checklist indicator"},"prevent-double-list-item-indicator-on-paste":{name:"Prevent Double List Item Indicator on Paste",description:"Removes starting list indicator from the text to paste if the line the cursor is on in the file has a list indicator"},"proper-ellipsis-on-paste":{name:"Proper Ellipsis on Paste",description:"Replaces three consecutive dots with an ellipsis even if they have a space between them in the text to paste"},"proper-ellipsis":{name:"Proper Ellipsis",description:"Replaces three consecutive dots with an ellipsis."},"quote-style":{name:"Quote Style",description:"Updates the quotes in the body content to be updated to the specified single and double quote styles.","single-quote-enabled":{name:"Enable Single Quote Style",description:"Specifies that the selected single quote style should be used."},"single-quote-style":{name:"Single Quote Style",description:"The style of single quotes to use."},"double-quote-enabled":{name:"Enable Double Quote Style",description:"Specifies that the selected double quote style should be used."},"double-quote-style":{name:"Double Quote Style",description:"The style of double quotes to use."}},"re-index-footnotes":{name:"Re-Index Footnotes",description:"Re-indexes footnote keys and footnote, based on the order of occurrence. Note: This rule does not work if there is more than one footnote for a key."},"remove-consecutive-list-markers":{name:"Remove Consecutive List Markers",description:"Removes consecutive list markers. Useful when copy-pasting list items."},"remove-empty-lines-between-list-markers-and-checklists":{name:"Remove Empty Lines Between List Markers and Checklists",description:"There should not be any empty lines between list markers and checklists."},"remove-empty-list-markers":{name:"Remove Empty List Markers",description:"Removes empty list markers, i.e. list items without content."},"empty-line-around-horizontal-rules":{name:"Empty Line Around Horizontal Rules",description:"Ensures that there is an empty line around horizontal rules unless they start or end a document."},"remove-hyphenated-line-breaks":{name:"Remove Hyphenated Line Breaks",description:"Removes hyphenated line breaks. Useful when pasting text from textbooks."},"remove-hyphens-on-paste":{name:"Remove Hyphens on Paste",description:"Removes hyphens from the text to paste"},"remove-leading-or-trailing-whitespace-on-paste":{name:"Remove Leading or Trailing Whitespace on Paste",description:"Removes any leading non-tab whitespace and all trailing whitespace for the text to paste"},"remove-leftover-footnotes-from-quote-on-paste":{name:"Remove Leftover Footnotes from Quote on Paste",description:"Removes any leftover footnote references for the text to paste"},"remove-link-spacing":{name:"Remove link spacing",description:"Removes spacing around link text."},"remove-multiple-blank-lines-on-paste":{name:"Remove Multiple Blank Lines on Paste",description:"Condenses multiple blank lines down into one blank line for the text to paste"},"remove-multiple-spaces":{name:"Remove Multiple Spaces",description:"Removes two or more consecutive spaces. Ignores spaces at the beginning and ending of the line. "},"remove-space-around-characters":{name:"Remove Space around Characters",description:"Ensures that certain characters are not surrounded by whitespace (either single spaces or a tab). Note: this may causes issues with markdown format in some cases.","include-fullwidth-forms":{name:"Include Fullwidth Forms",description:'Include Fullwidth Forms Unicode block'},"include-cjk-symbols-and-punctuation":{name:"Include CJK Symbols and Punctuation",description:'Include CJK Symbols and Punctuation Unicode block'},"include-dashes":{name:"Include Dashes",description:"Include en dash (\u2013) and em dash (\u2014)"},"other-symbols":{name:"Other symbols",description:"Other symbols to include"}},"remove-space-before-or-after-characters":{name:"Remove Space Before or After Characters",description:"Removes space before the specified characters and after the specified characters. Note: this may causes issues with markdown format in some cases.","characters-to-remove-space-before":{name:"Remove Space Before Characters",description:"Removes space before the specified characters. Note: using { or } in the list of characters will unexpectedly affect files as it is used in the ignore syntax behind the scenes."},"characters-to-remove-space-after":{name:"Remove Space After Characters",description:"Removes space after the specified characters. >Note: using { or } in the list of characters will unexpectedly affect files as it is used in the ignore syntax behind the scenes."}},"remove-trailing-punctuation-in-heading":{name:"Remove Trailing Punctuation in Heading",description:'Removes the specified punctuation from the end of headings making sure to ignore the semicolon at the end of HTML entity references.',"punctuation-to-remove":{name:"Trailing Punctuation",description:"The trailing punctuation to remove from the headings in the file."}},"remove-yaml-keys":{name:"Remove YAML Keys",description:"Removes the YAML keys specified","yaml-keys-to-remove":{name:"YAML Keys to Remove",description:"The YAML keys to remove from the YAML frontmatter with or without colons"}},"sort-yaml-array-values":{name:"Sort YAML Array Values",description:"Sorts YAML array values based on the specified sort order.","sort-alias-key":{name:"Sort YAML aliases section",description:"Turns on sorting aliases."},"sort-tag-key":{name:"Sort YAML tags section",description:"Turns on sorting tags."},"sort-array-keys":{name:"Sort YAML array sections",description:"Turns on sorting values for regular YAML arrays"},"ignore-keys":{name:"YAML Keys to Ignore",description:"A list of YAML keys without the ending colon on their own lines that are not meant to have their values sorted."},"sort-order":{name:"Sort Order",description:"The way to sort the YAML array values."}},"space-after-list-markers":{name:"Space after list markers",description:"There should be a single space after list markers and checkboxes."},"space-between-chinese-japanese-or-korean-and-english-or-numbers":{name:"Space between Chinese Japanese or Korean and English or numbers",description:'Ensures that Chinese, Japanese, or Korean and English or numbers are separated by a single space. Follows these guidelines',"english-symbols-punctuation-before":{name:"English Punctuations and Symbols Before CJK",description:'The list of non-letter punctuation and symbols to consider to be from English when found before Chinese, Japanese, or Korean characters. Note: "*" is always considered to be English and is necessary for handling some markdown syntaxes properly.'},"english-symbols-punctuation-after":{name:"English Punctuations and Symbols After CJK",description:'The list of non-letter punctuation and symbols to consider to be from English when found after Chinese, Japanese, or Korean characters. Note: "*" is always considered to be English and is necessary for handling some markdown syntaxes properly.'}},"strong-style":{name:"Strong Style",description:"Makes sure the strong style is consistent.",style:{name:"Style",description:"The style used to denote strong/bolded content"}},"trailing-spaces":{name:"Trailing spaces",description:"Removes extra spaces after every line.","twp-space-line-break":{name:"Two Space Linebreak",description:'Ignore two spaces followed by a line break ("Two Space Rule").'}},"two-spaces-between-lines-with-content":{name:"Line Break Between Lines with Content",description:"Makes sure that the specified line break is added to the ends of lines with content continued on the next line for paragraphs, blockquotes, and list items","line-break-indicator":{name:"Line Break Indicator",description:"The line break indicator to use."}},"unordered-list-style":{name:"Unordered List Style",description:"Makes sure that unordered lists follow the style specified.","list-style":{name:"List item style",description:"The list item style to use in unordered lists"}},"yaml-key-sort":{name:"YAML Key Sort",description:"Sorts the YAML keys based on the order and priority specified. Note: may remove blank lines as well. Only works on non-nested keys.","yaml-key-priority-sort-order":{name:"YAML Key Priority Sort Order",description:"The order in which to sort keys with one on each line where it sorts in the order found in the list"},"priority-keys-at-start-of-yaml":{name:"Priority Keys at Start of YAML",description:"YAML Key Priority Sort Order is placed at the start of the YAML frontmatter"},"yaml-sort-order-for-other-keys":{name:"YAML Sort Order for Other Keys",description:"The way in which to sort the keys that are not found in the YAML Key Priority Sort Order text area"}},"yaml-timestamp":{name:"YAML Timestamp",description:"Keep track of the date the file was last edited in the YAML front matter. Gets dates from file metadata.","date-created":{name:"Date Created",description:"Insert the file creation date"},"date-created-key":{name:"Date Created Key",description:"Which YAML key to use for creation date"},"date-created-source-of-truth":{name:"Date Created Source of Truth",description:"Specifies where to get the date created value from if it is already present in the frontmatter."},"date-modified-source-of-truth":{name:"Date Modified Source of Truth",description:"Specifies what way should be used to determine when the date modified should be updated if it is already present in the frontmatter."},"date-modified":{name:"Date Modified",description:"Insert the date the file was last modified"},"date-modified-key":{name:"Date Modified Key",description:"Which YAML key to use for modification date"},format:{name:"Format",description:'Moment date format to use (see Moment format options)'},"convert-to-utc":{name:"Convert Local Time to UTC",description:"Uses UTC equivalent for saved dates instead of local time"},"update-on-file-contents-updated":{name:"Update YAML Timestamp on File Contents Update",description:"When the currently active note is modified, YAML Timestamp is run on the note. This should update the modified note timestamp if it is more than 5 seconds off from the current value."}},"yaml-title-alias":{name:"YAML Title Alias",description:"Inserts or updates the title of the file into the YAML frontmatter's aliases section. Gets the title from the first H1 or filename.","preserve-existing-alias-section-style":{name:"Preserve existing aliases section style",description:"If set, the YAML aliases section style setting applies only to the newly created sections"},"keep-alias-that-matches-the-filename":{name:"Keep alias that matches the filename",description:"Such aliases are usually redundant"},"use-yaml-key-to-keep-track-of-old-filename-or-heading":{name:"Use the YAML key specified by Alias Helper Key to help with filename and heading changes",description:"If set, when the first H1 heading changes or filename if first H1 is not present changes, then the old alias stored in this key will be replaced with the new value instead of just inserting a new entry in the aliases array"},"alias-helper-key":{name:"Alias Helper Key",description:"The key to use to help keep track of what the last file name or heading was that was stored in the frontmatter by this rule."}},"yaml-title":{name:"YAML Title",description:"Inserts the title of the file into the YAML frontmatter. Gets the title based on the selected mode.","title-key":{name:"Title Key",description:"Which YAML key to use for title"},mode:{name:"Mode",description:"The method to use to get the title"}}},enums:{"Title Case":"Title Case","ALL CAPS":"ALL CAPS","First letter":"First letter",".":".",")":")",ERROR:"error",TRACE:"trace",DEBUG:"debug",INFO:"info",WARN:"warn",SILENT:"silent",ascending:"ascending",lazy:"lazy",preserve:"preserve",Nothing:"Nothing","Remove hashtag":"Remove hashtag","Remove whole tag":"Remove whole tag",asterisk:"asterisk",underscore:"underscore",consistent:"consistent","-":"-","*":"*","+":"+",space:"space","no space":"no space",None:"None","Ascending Alphabetical":"Ascending Alphabetical","Descending Alphabetical":"Descending Alphabetical","multi-line":"multi-line","single-line":"single-line","single string to single-line":"single string to single-line","single string to multi-line":"single string to multi-line","single string comma delimited":"single string comma delimited","single string space delimited":"single string space delimited","single-line space delimited":"single-line space delimited","first-h1":"First H1","first-h1-or-filename-if-h1-missing":"First H1 or Filename if H1 is Missing",filename:"Filename",never:"Never","after 5 seconds":"After 5 seconds","after 10 seconds":"After 10 seconds","after 15 seconds":"After 15 seconds","after 30 seconds":"After 30 seconds","after 1 minute":"After 1 minute","file system":"File system",frontmatter:"YAML frontmatter","user or Linter edits":"Changes in Obsidian","''":"''","\u2018\u2019":"\u2018\u2019",'""':'""',"\u201C\u201D":"\u201C\u201D","\\":"\\","
    ":"
    "," ":" ","
    ":"
    "}};var ad={commands:{"lint-file":{name:"Analizar este archivo","error-message":"Error Analizando un Archivooccuri\xF3 en el Archivo"},"lint-file-unless-ignored":{name:"Analizar este archivo si no es ignorado"},"lint-all-files":{name:"Analizar todos los archivos en la b\xF3veda","error-message":"Error Analizando Todos los Archivos en Archivo","success-message":"Analiz\xF3 todos los archivos","errors-message-singular":"Analiz\xF3 todos los archivos y un error ocurri\xF3.","errors-message-plural":"Analiz\xF3 todos los archivos y {NUM} errores ocurrieron","start-message":"Esto editar\xE1 todos de sus archivos y es possible que introduzca errores","submit-button-text":"Analizar Todo","submit-button-notice-text":"Analizando todos los archivos..."},"lint-all-files-in-folder":{name:"Analizar todos los archivos en esta carpeta","start-message":"Esto editar\xE1 todos de sus archivos en {FOLDER_NAME} incluyendo los archivos que existen en las subcarpetas y es possible que introduzca errores.","submit-button-text":"Analizar Todos los Archivos en {FOLDER_NAME}","submit-button-notice-text":"Analizando todos los archivos en {FOLDER_NAME}...","error-message":"Error Analizando Todos los Archivos en Carpeta en Archivo","success-message":"Analiz\xF3 los {NUM} archivos en {FOLDER_NAME}.","message-singular":"Analiz\xF3 los {NUM} archivos en {FOLDER_NAME} y un error ocurri\xF3.","message-plural":"Analiz\xF3 los {FILE_COUNT} archivos en {FOLDER_NAME} y {ERROR_COUNT} errores ocurrieron."},"paste-as-plain-text":{name:"Pegar como texto sin formato y sin modificaciones"},"lint-file-pop-up-menu-text":{name:"Analizar el archivo"},"lint-folder-pop-up-menu-text":{name:"Analizar la carpeta"}},logs:{"plugin-load":"Cargando el programa adicional","plugin-unload":"Descargando el programa adicional","folder-lint":"Analizando la carpeta ","linter-run":"Usando linter","paste-link-warning":"abort\xF3 lint de pagar porque el contento del portapapeles es un enlace y no lo hizo para evitar conflictos con otros programas adicionales que modifican lo que hace el pegar.","see-console":"Consulte la consola para obtener m\xE1s detalles.","unknown-error":"Se ha producido un error desconocido durante el linting.","moment-locale-not-found":"Intentando cambiar la zona de Moment.js a {MOMENT_LOCALE}, el resulto fue {CURRENT_LOCALE}","file-change-lint-message-start":"Analiz\xF3","pre-rules":"Las reglas antes de las reglas normales","post-rules":"las reglas despu\xE9s de las reglas normales","rule-running":"usando las reglas","custom-regex":"las reglas regex personalizadas","running-custom-regex":"Usando regex personalizada","running-custom-lint-command":"Usando comandos de lint personalizados","custom-lint-duplicate-warning":'No se puede usar el mismo comando ("{COMMAND_NAME}") dos veces como un comando de lint.',"custom-lint-error-message":"El commando de lint personalizado","disabled-text":"es inhabilitado","run-rule-text":"Usando","timing-key-not-found":"clave de ritmo '{TIMING_KEY}' no ya existe en la lista de claves de ritmo y fue ignorado por eso","milliseconds-abbreviation":"ms","invalid-date-format-error":"No se pudo analizar ni identificar el formato de la fech de creaci\xF3n `{DATE}` entonces la fecha de creaci\xF3n se dej\xF3 sola en `{FILE_NAME}`","invalid-delimiter-error-message":"El delimitador solo puede ser de un solo car\xE1cter","missing-footnote-error-message":"La nota al pie `{FOOTNOTE}` no tiene ninguna referencia de nota al pie correspondiente antes del contenido de la nota al pie y no se puede procesar. Aseg\xFArese de que todas las notas a pie de p\xE1gina tengan una referencia correspondiente antes del contenido de la nota al pie de p\xE1gina.","too-many-footnotes-error-message":"La clave de nota al pie '{FOOTNOTE_KEY}' tiene m\xE1s de 1 nota al pie que hace referencia a ella. Actualice las notas al pie para que solo haya una nota al pie por clave de nota al pie.","wrapper-yaml-error":"hubo un error en el YAML: {ERROR_MESSAGE}","wrapper-unknown-error":"huno un error desconocido: {ERROR_MESSAGE}"},"notice-text":{"empty-clipboard":"No hay contenido del portapapeles.","characters-added":"Caracteres a\xF1adidos","characters-removed":"Caracteres eliminados"},"all-rules-option":"Todo","linter-title":"Linter","empty-search-results-text":"No hay configuraci\xF3n que coincida con la b\xFAsqueda","warning-text":"Advertencia","file-backup-text":"Aseg\xFArese de haber realizado una copia de seguridad de sus archivos.","copy-aria-label":"Copiar",tabs:{names:{general:"General",custom:"Personalizado",yaml:"YAML",heading:"Encabezado",content:"Contenido",footnote:"Notas al pie",spacing:"Espacio en blanco",paste:"Pegar",debug:"Depurar"},"default-search-bar-text":"Buscar en todos los ajustes",general:{"lint-on-save":{name:"Analizar en guardar",description:"Analizar el archivo en el guardado manual (cuando se presiona `Ctrl + S` o cuando se ejecuta `:w` mientras se usan combinaciones de claves de vim)"},"display-message":{name:"Mostrar mensaje en analizar",description:"Mostrar el n\xFAmero de caracteres modificados despu\xE9s de analizar"},"folders-to-ignore":{name:"Carpetas para omitir",description:"Carpetas que se deben omitir al analizar todos los archivos o al guardar en l\xEDnea.","folder-search-placeholder-text":"El nombre de la carpeta","add-input-button-text":"Agregar otra carpeta para ignorar","delete-tooltip":"Borrar"},"lint-on-file-change":{name:"Analizar archivo en cambiar",description:"Cuando se cierra un archivo o se cambia a un nuevo archivo, el archivo anterior se analiza."},"display-lint-on-file-change-message":{name:"Mostrar mensaje en cambiar el archivo",description:"Muestra un mensaje cuando se produce `Analizar archivo en cambiar`"},"override-locale":{name:"Anular configuraci\xF3n regional",description:"Establezca esta opci\xF3n si desea utilizar una configuraci\xF3n regional diferente de la predeterminada"},"same-as-system-locale":"Igual que el sistema ({SYS_LOCALE})","yaml-aliases-section-style":{name:"Estilo de secci\xF3n de alias de YAML",description:"El estilo de la secci\xF3n de alias de YAML"},"yaml-tags-section-style":{name:"Estilo de secci\xF3n de etiquetas de YAML",description:"El estilo de la secci\xF3n de etiquetas de YAML"},"default-escape-character":{name:"Car\xE1cter de escape predeterminado",description:"El car\xE1cter predeterminado que se va a usar para escapar de los valores YAML cuando no hay comillas simples y comillas dobles."},"remove-unnecessary-escape-chars-in-multi-line-arrays":{name:"Eliminaci\xF3n de caracteres de escape innecesarios cuando est\xE1 en formato de matriz multil\xEDnea",description:"Los caracteres de escape para matrices de YAML multil\xEDnea no necesitan el mismo escape que las matrices de una sola l\xEDnea, por lo que cuando est\xE1n en formato multil\xEDnea, elimine los escapes adicionales que no son necesarios"},"number-of-dollar-signs-to-indicate-math-block":{name:"N\xFAmero de signos de d\xF3lar para indicar el bloque matem\xE1tico",description:"La cantidad de signos de d\xF3lar para considerar el contenido matem\xE1tico como un bloque matem\xE1tico en lugar de matem\xE1ticas en l\xEDnea"}},debug:{"log-level":{name:"Nivel de registro",description:"Los tipos de registros que el servicio permitir\xE1 registrar. El valor predeterminado es error."},"linter-config":{name:"Configuraci\xF3n de Linter",description:"El contenido del archivo data.json para Linter a partir de la carga de la p\xE1gina de configuraci\xF3n"},"log-collection":{name:"Recopilar registros al activar y desactivar el archivo actual",description:"Contin\xFAa y recopila registros cuando `Analizar en guardar` y analizar el archivo actual. Estos registros pueden ser \xFAtiles para depurar y crear informes de errores."},"linter-logs":{name:"Registros de Linter",description:"Los registros del \xFAltimo `Analizar en guardar` o del \xFAltimo archivo actual de analizar se ejecutan si est\xE1n habilitados."}}},options:{"custom-command":{name:"Comandos personalizados",description:"Los comandos personalizados son comandos de Obsidian que se ejecutan despu\xE9s de que Linter termina de ejecutar sus reglas regulares. Esto significa que no se ejecutan antes de que se ejecute la l\xF3gica de marca de tiempo YAML, por lo que pueden hacer que la marca de tiempo de YAML se active en la siguiente ejecuci\xF3n del Linter. Solo puede seleccionar un comando de Obsidian una vez.",warning:"Al seleccionar una opci\xF3n, aseg\xFArese de seleccionar la opci\xF3n usando el rat\xF3n o presionando la clave Intro. Es posible que otros m\xE9todos de selecci\xF3n no funcionen y solo se guardar\xE1n las selecciones de un comando de Obsidian real o una cadena vac\xEDa.","add-input-button-text":"Agregar nuevo comando","command-search-placeholder-text":"Comando de Obsidian","move-up-tooltip":"Desplazar hacia arriba","move-down-tooltip":"Desplazar hacia abajo","delete-tooltip":"Borrar"},"custom-replace":{name:"Reemplazo regex personalizado",description:"El reemplazo de regex personalizado se puede usar para reemplazar cualquier cosa que coincida con el valor de b\xFAsqueda de regex con el valor de reemplazo. Los valores de reemplazo y b\xFAsqueda deber\xE1n ser valores regex v\xE1lidos.",warning:"Use esto con precauci\xF3n si no conoce regex. Adem\xE1s, aseg\xFArese de no usar lookbehinds en su regex en dispositivos m\xF3viles iOS, ya que eso har\xE1 que falle analizar ya que no es compatible con esa plataforma.","add-input-button-text":"Agregar nuevo reemplazo de regex","regex-to-find-placeholder-text":"Regex para encontrar","flags-placeholder-text":"Marcas","regex-to-replace-placeholder-text":"Regex para reemplazar","label-placeholder-text":"etiqueta","move-up-tooltip":"Desplazar hacia arriba","move-down-tooltip":"Desplazar hacia abajo","delete-tooltip":"Borrar"}},rules:{"auto-correct-common-misspellings":{name:"Correcci\xF3n autom\xE1tica de errores ortogr\xE1ficos comunes",description:'Utiliza un diccionario de errores ortogr\xE1ficos comunes para convertirlos autom\xE1ticamente a su ortograf\xEDa correcta. Consulte mapa de autocorrecci\xF3n para obtener la lista completa de palabras corregidas autom\xE1ticamente. Nota: esta lista puede funcionar en texto de varios idiomas, pero esta lista es la misma sin importar qu\xE9 idioma est\xE9 en uso actualmente.',"ignore-words":{name:"Ignorar palabras",description:"Una lista separada por comas de palabras en min\xFAsculas para ignorar al corregir autom\xE1ticamente"}},"add-blockquote-indentation-on-paste":{name:"Agregar sangr\xEDa de blockquote en pegar",description:"Agrega blockquotes a todas menos a la primera l\xEDnea, cuando el cursor est\xE1 en una l\xEDnea blockquote/callout durante el pegado"},"blockquote-style":{name:"Estilo de cotizaci\xF3n en bloque",description:"Se asegura de que el estilo de la cita en bloque sea consistente.",style:{name:"Estilo",description:"El estilo utilizado en los indicadores de cotizaci\xF3n en bloque"}},"capitalize-headings":{name:"Poner may\xFAsculas en los encabezados",description:"Los encabezados deben estar formateados con may\xFAsculas",style:{name:"Estilo",description:"El estilo de may\xFAsculas que se va a utilizar"},"ignore-case-words":{name:"Ignorar palabras en may\xFAsculas y min\xFAsculas",description:"Solo aplique el estilo de may\xFAsculas y min\xFAsculas a las palabras que est\xE9n todas en min\xFAsculas"},"ignore-words":{name:"Ignorar palabras",description:"Una lista de palabras separadas por comas para ignorar al poner en may\xFAsculas"},"lowercase-words":{name:"Palabras en min\xFAsculas",description:"Una lista de palabras separadas por comas para mantener min\xFAsculas"}},"compact-yaml":{name:"YAML compacto",description:"Elimina las l\xEDneas en blanco iniciales y finales en la materia frontal de YAML.","inner-new-lines":{name:"Nuevas l\xEDneas internas",description:"Quitar nuevas l\xEDneas que no est\xE9n al principio o al final del YAML"}},"consecutive-blank-lines":{name:"L\xEDneas en blanco consecutivas",description:"Debe haber como m\xE1ximo una l\xEDnea en blanco consecutiva."},"convert-bullet-list-markers":{name:"Convertir marcadores de lista de vi\xF1etas",description:"Convierte s\xEDmbolos de marcador de lista de vi\xF1etas comunes en marcadores de lista de rebajas."},"convert-spaces-to-tabs":{name:"Convertir espacios en pesta\xF1as",description:"Convierte los espacios iniciales en pesta\xF1as.",tabsize:{name:"Tama\xF1o de la pesta\xF1a",description:"N\xFAmero de espacios que se convertir\xE1n en una pesta\xF1a"}},"emphasis-style":{name:"Estilo de \xE9nfasis",description:"Se asegura de que el estilo de \xE9nfasis sea consistente.",style:{name:"Estilo",description:"El estilo utilizado para denotar el contenido enfatizado"}},"empty-line-around-blockquotes":{name:"L\xEDnea vac\xEDa alrededor de blockquotes",description:"Asegura que haya una l\xEDnea vac\xEDa alrededor de blockquotes a menos que inicien o finalicen un documento. **Tenga en cuenta que una l\xEDnea vac\xEDa es un nivel menos de anidamiento para blockquotes o un car\xE1cter de nueva l\xEDnea.**"},"empty-line-around-code-fences":{name:"L\xEDnea vac\xEDa alrededor de las vallas de c\xF3digo",description:"Garantiza que haya una l\xEDnea vac\xEDa alrededor de las vallas de c\xF3digo a menos que inicien o finalicen un documento."},"empty-line-around-math-blocks":{name:"L\xEDnea vac\xEDa alrededor de los bloques matem\xE1ticos",description:"Asegura que haya una l\xEDnea vac\xEDa alrededor de los bloques matem\xE1ticos usando `N\xFAmero de signos de d\xF3lar para indicar un bloque matem\xE1tico` para determinar cu\xE1ntos signos de d\xF3lar indica un bloque matem\xE1tico para matem\xE1ticas de una sola l\xEDnea."},"empty-line-around-tables":{name:"L\xEDnea vac\xEDa alrededor de las tablas",description:"Asegura que haya una l\xEDnea vac\xEDa alrededor de las tablas con sabor a github a menos que inicien o finalicen un documento."},"escape-yaml-special-characters":{name:"Evitar los caracteres especiales de YAML",description:`Escapa dos puntos con un espacio despu\xE9s de ellos (:), comillas simples (') y comillas dobles (") en YAML.`,"try-to-escape-single-line-arrays":{name:"Intente escapar las matrices de una sola l\xEDnea",description:'Intenta escapar de los valores de matriz suponiendo que una matriz comienza con "[", termina con "]" y tiene elementos que est\xE1n delimitados por ",".'}},"file-name-heading":{name:"Encabezado de nombre de archivo",description:"Inserta el nombre de archivo como un encabezado H1 si no existe ning\xFAn encabezado H1."},"footnote-after-punctuation":{name:"Nota al pie despu\xE9s de la puntuaci\xF3n",description:"Asegura que las referencias de notas al pie se coloquen despu\xE9s de la puntuaci\xF3n, no antes."},"force-yaml-escape":{name:"Forzar escape de YAML",description:"Escapa los valores de las claves YAML especificadas.","force-yaml-escape-keys":{name:"Forzar escape de YAML en las claves",description:"Utiliza el car\xE1cter de escape de YAML en las claves de YAML especificadas separadas por un nuevo car\xE1cter de l\xEDnea si a\xFAn no est\xE1 escapado. No lo use en matrices de YAML."}},"format-tags-in-yaml":{name:"Dar formato a las etiquetas de formato en YAML",description:"Elimine los hashtags de las etiquetas en el frontmatter del YAML, ya que hacen que las etiquetas no sean v\xE1lidas."},"format-yaml-array":{name:"Dar formato a las matrices de YAML",description:"Permite el formato de matrices regulares de YAML como multil\xEDnea o de una sola l\xEDnea y las `etiquetas` y `alias` pueden tener algunos formatos espec\xEDficos de YAML de Obsidian. Tenga en cuenta que una sola cadena a una sola l\xEDnea pasa de una sola entrada de cadena a una matriz de una sola l\xEDnea si hay m\xE1s de 1 entrada presente. Lo mismo es cierto para una sola cadena a multil\xEDnea, excepto que se convierte en una matriz multil\xEDnea.","alias-key":{name:"Dar formato a la secci\xF3n de alias de YAML",description:"Activa el formato para la secci\xF3n de alias YAML. No debe habilitar esta opci\xF3n junto con la regla `Alias de t\xEDtulo YAML`, ya que es posible que no funcionen bien juntos o que tengan diferentes estilos de formato seleccionados que causen resultados inesperados."},"tag-key":{name:"Dar formato a la secci\xF3n de etiquetas de YAML",description:"Activa el formato para la secci\xF3n de etiquetas de YAML."},"default-array-style":{name:"Estilo de secci\xF3n de matriz predeterminado de YAML",description:"El estilo de otras matrices de YAML que no son `etiquetas`, `alias` o en `Forzar valores de clave para que sean matrices de una sola l\xEDnea` y `Forzar valores de clave para que sean matrices multil\xEDnea`"},"default-array-keys":{name:"Dar formato a las secciones de matrices de YAML",description:"Activa el formato para matrices normales de YAML"},"force-single-line-array-style":{name:"Forzar que los valores de clave sean matrices de una sola l\xEDnea",description:"Fuerza la matriz de YAML para que las nuevas claves separadas por l\xEDnea est\xE9n en formato de una sola l\xEDnea (deje vac\xEDo para deshabilitar esta opci\xF3n)"},"force-multi-line-array-style":{name:"Forzar que los valores de las claves sean matrices multil\xEDneas",description:"Fuerza la matriz de YAML para que las nuevas claves separadas por l\xEDnea est\xE9n en formato multil\xEDnea (deje vac\xEDa para deshabilitar esta opci\xF3n)"}},"header-increment":{name:"Incremento de encabezado",description:"Los niveles de encabezado solo deben aumentar en un nivel a la vez","start-at-h2":{name:"Iniciar el incremento de encabezado en el nivel de encabezado 2",description:"Hace que el nivel de encabezado 2 sea el nivel de t\xEDtulo m\xEDnimo en un archivo para el incremento de encabezado y desplaza todos los encabezados en consecuencia para que se incrementen a partir de un encabezado de nivel 2."}},"heading-blank-lines":{name:"L\xEDneas en blanco de encabezado",description:"Todos los encabezados tienen una l\xEDnea en blanco antes y despu\xE9s (excepto cuando el encabezado est\xE1 al principio o al final del documento).",bottom:{name:"Abajo",description:"Asegura una l\xEDnea en blanco despu\xE9s de los encabezados"},"empty-line-after-yaml":{name:"L\xEDnea vac\xEDa entre el YAML y el encabezado",description:"Mantenga la l\xEDnea vac\xEDa entre el frontmatter del YAML y el encabezado"}},"headings-start-line":{name:"Comenzar los encabezados al principio de la l\xEDnea",description:"Los encabezados que no inician una l\xEDnea tendr\xE1n su espacio en blanco anterior eliminado para asegurarse de que se reconozcan como encabezados."},"insert-yaml-attributes":{name:"Insertar atributos de YAML",description:"Inserta los atributos especificados de YAML en el frontmatter del YAML. Coloque cada atributo en una sola l\xEDnea.","text-to-insert":{name:"Texto a insertar",description:"Texto para insertar en el frontmatter del YAML"}},"line-break-at-document-end":{name:"Salto de l\xEDnea al final del documento",description:"Asegura que haya exactamente un salto de l\xEDnea al final de un documento."},"move-footnotes-to-the-bottom":{name:"Mover las notas al pie a la parte inferior",description:"Mueva todas las notas al pie de p\xE1gina a la parte inferior del documento."},"move-math-block-indicators-to-their-own-line":{name:"Mover los indicadores de bloques matem\xE1ticos a su propia l\xEDnea",description:"Mueva todos los indicadores de bloques matem\xE1ticos iniciales y finales a sus propias l\xEDneas usando `N\xFAmero de signos de d\xF3lar para indicar un bloque matem\xE1tico` para determinar cu\xE1ntos signos de d\xF3lar indica un bloque matem\xE1tico para matem\xE1ticas de una sola l\xEDnea."},"move-tags-to-yaml":{name:"Mover etiquetas a YAML",description:"Mueva todas las etiquetas al frontmatter del YAML del documento.","how-to-handle-existing-tags":{name:"Operaci\xF3n de etiqueta corporal",description:"Lo qur se debe hacer con las etiquetas no ignoradas en el cuerpo del archivo una vez que se han movido al frontmatter"},"tags-to-ignore":{name:"Etiquetas para omitir",description:"Las etiquetas que no se mover\xE1n a la matriz de etiquetas ni se eliminar\xE1n del contenido del cuerpo si est\xE1 habilitado `Eliminar el hashtag de las etiquetas en el cuerpo del contenido`. Cada etiqueta debe estar en una nueva l\xEDnea y sin el `#`. **Aseg\xFArese de no incluir el hashtag en el nombre de la etiqueta.**"}},"no-bare-urls":{name:"Sin URL desnuda",description:"Encierra las direcciones URL desnudas con corchetes angulares, excepto cuando est\xE1n encerradas en marcas traseras, llaves cuadradas o comillas simples o dobles.","no-bare-uris":{name:"Sin URI desnuda",description:"Encierra las direcciones URI desnudas con corchetes angulares, excepto cuando est\xE1n encerradas en marcas traseras, llaves cuadradas o comillas simples o dobles."}},"ordered-list-style":{name:"Estilo de lista ordenada",description:"Se asegura de que las listas ordenadas siguen el estilo especificado. Tenga en cuenta que 2 espacios o 1 tabulaci\xF3n se considera un nivel de sangr\xEDa.","number-style":{name:"Estilo num\xE9rico",description:"El estilo num\xE9rico utilizado en los indicadores de lista ordenada"},"list-end-style":{name:"Estilo final del indicador de lista ordenada",description:"El car\xE1cter final de un indicador de lista ordenada"}},"paragraph-blank-lines":{name:"L\xEDneas en blanco del p\xE1rrafo",description:"Todos los p\xE1rrafos deben tener exactamente una l\xEDnea en blanco antes y despu\xE9s."},"prevent-double-checklist-indicator-on-paste":{name:"Evitar el indicador de doble lista de verificaci\xF3n en pegar",description:"Elimina el indicador de lista de verificaci\xF3n inicial del texto para pegar si la l\xEDnea en la que se encuentra el cursor en el archivo tiene un indicador de lista de verificaci\xF3n"},"prevent-double-list-item-indicator-on-paste":{name:"Prevenir el indicador de elemento de lista doble al pegar",description:"Elimina el indicador de lista inicial del texto para pegar si la l\xEDnea en la que se encuentra el cursor en el archivo tiene un indicador de lista"},"proper-ellipsis-on-paste":{name:"Puntos suspensivos adecuados al pegar",description:"Reemplaza tres puntos consecutivos por puntos suspensivos aunque tengan un espacio entre ellos en el texto a pegar"},"proper-ellipsis":{name:"Puntos suspensivos propios",description:"Reemplaza tres puntos consecutivos con puntos suspensivos."},"quote-style":{name:"Estilo de cotizaci\xF3n",description:"Actualiza las comillas en el contenido del cuerpo para que se actualicen a los estilos de comillas simples y dobles especificados.","single-quote-enabled":{name:"Habilitar `Estilo de comillas simples`",description:"Especifica que se debe utilizar el estilo de comillas simples seleccionado."},"single-quote-style":{name:"Estilo de comillas simples",description:"El estilo de las comillas simples a utilizar."},"double-quote-enabled":{name:"Habilitar `Estilo de comillas dobles`",description:"Especifica que se debe utilizar el estilo de comillas dobles seleccionado."},"double-quote-style":{name:"Estilo de comillas dobles",description:"El estilo de comillas dobles a utilizar."}},"re-index-footnotes":{name:"Volver a indexar notas al pie",description:"Vuelve a indexar las notas al pie de p\xE1gina y las notas al pie, seg\xFAn el orden de aparici\xF3n (NOTA: esta regla *no* funciona si hay m\xE1s de una nota al pie para una clave)."},"remove-consecutive-list-markers":{name:"Eliminar marcadores de lista consecutiva",description:"Elimina marcadores de lista consecutivos. \xDAtil al copiar y pegar elementos de la lista."},"remove-empty-lines-between-list-markers-and-checklists":{name:"Eliminar l\xEDneas vac\xEDas entre marcadores de lista y listas de verificaci\xF3n",description:"No debe haber l\xEDneas vac\xEDas entre los marcadores de lista y las listas de verificaci\xF3n."},"remove-empty-list-markers":{name:"Eliminar marcadores de lista vac\xEDa",description:"Elimina marcadores de listas vac\xEDas, es decir, lista de elementos sin contenido."},"remove-hyphenated-line-breaks":{name:"Eliminar saltos de l\xEDnea con gui\xF3n",description:"Elimina los saltos de l\xEDnea con gui\xF3n. \xDAtil al pegar texto de libros de texto."},"remove-hyphens-on-paste":{name:"Eliminar guiones al pegar",description:"Elimina guiones del texto al pegar"},"remove-leading-or-trailing-whitespace-on-paste":{name:"Eliminar espacios en blanco iniciales o finales al pegar",description:"Elimina cualquier espacio en blanco inicial que no sea una pesta\xF1a y todos los espacios en blanco finales para que el texto se pegue"},"remove-leftover-footnotes-from-quote-on-paste":{name:"Eliminar las notas al pie sobrantes de la cita al pegar",description:"Elimina las referencias de notas al pie sobrantes para que el texto se pegue"},"remove-link-spacing":{name:"Quitar el espacio entre enlaces",description:"Elimina el espacio alrededor del texto del enlace."},"remove-multiple-blank-lines-on-paste":{name:"Eliminar varias l\xEDneas en blanco al pegar",description:"Condensa varias l\xEDneas en blanco en una l\xEDnea en blanco para que el texto se pegue"},"remove-multiple-spaces":{name:"Quitar varios espacios",description:"Elimina dos o m\xE1s espacios consecutivos. Ignora los espacios al principio y al final de la l\xEDnea."},"remove-space-around-characters":{name:"Quitar el espacio alrededor de los caracteres",description:"Garantiza que determinados caracteres no est\xE9n rodeados de espacios en blanco (ya sean espacios individuales o tabulaciones). Tenga en cuenta que esto puede causar problemas con el formato de descuento en algunos casos.","include-fullwidth-forms":{name:"Incluir formularios de ancho completo",description:'Incluir bloque Unicode de formularios de ancho completo'},"include-cjk-symbols-and-punctuation":{name:"Incluir s\xEDmbolos de CJK y puntuaci\xF3n",description:'Incluir Bloque Unicode de s\xEDmbolos y puntuaci\xF3n de CJK'},"include-dashes":{name:"Incluir guiones",description:"Incluir gui\xF3n corto (\u2013) y gui\xF3n largo (\u2014)"},"other-symbols":{name:"Otros s\xEDmbolos",description:"Otros s\xEDmbolos para incluir"}},"remove-space-before-or-after-characters":{name:"Quitar el espacio antes o despu\xE9s de los caracteres",description:"Elimina el espacio antes de los caracteres especificados y despu\xE9s de los caracteres especificados. Tenga en cuenta que esto puede causar problemas con el formato de descuento en algunos casos.","characters-to-remove-space-before":{name:"Eliminar espacio antes de los caracteres",description:"Elimina el espacio antes de los caracteres especificados. **Nota: el uso de `{` o `}` en la lista de caracteres afectar\xE1 inesperadamente a los archivos, ya que se usa en la sintaxis de ignorar en segundo plano.**"},"characters-to-remove-space-after":{name:"Eliminar espacio despu\xE9s de los caracteres",description:"Elimina el espacio despu\xE9s de los caracteres especificados. **Nota: el uso de `{` o `}` en la lista de caracteres afectar\xE1 inesperadamente a los archivos, ya que se usa en la sintaxis de ignorar en segundo plano.**"}},"remove-trailing-punctuation-in-heading":{name:"Eliminar la puntuaci\xF3n final en el encabezado",description:'Elimina la puntuaci\xF3n especificada al final de los encabezados, asegur\xE1ndose de ignorar el punto y coma al final de referencias de entidades de HTML.',"punctuation-to-remove":{name:"Puntuaci\xF3n final",description:"La puntuaci\xF3n final que se eliminar\xE1 de los encabezados del archivo."}},"remove-yaml-keys":{name:"Eliminar claves de YAML",description:"Elimina las claves especificadas de YAML","yaml-keys-to-remove":{name:"Claves de YAML para eliminar",description:"Las claves de YAML para eliminar del frontmatter del YAML con o sin dos puntos"}},"space-after-list-markers":{name:"Espacio despu\xE9s de los marcadores de lista",description:"Debe haber un solo espacio despu\xE9s de los marcadores de lista y las casillas de verificaci\xF3n."},"space-between-chinese-japanese-or-korean-and-english-or-numbers":{name:"Espacio entre chino japon\xE9s o coreano e ingl\xE9s o n\xFAmeros",description:'Garantiza que el chino, el japon\xE9s o el coreano y el ingl\xE9s o los n\xFAmeros est\xE9n separados por un solo espacio. Sigue estas directrices'},"strong-style":{name:"Estilo fuerte",description:"Se asegura de que el estilo fuerte sea consistente.",style:{name:"Estilo",description:"El estilo utilizado para denotar contenido fuerte/en negrita"}},"trailing-spaces":{name:"Espacios finales",description:"Elimina espacios adicionales despu\xE9s de cada l\xEDnea.","twp-space-line-break":{name:"Salto de l\xEDnea de dos espacios",description:'Ignore dos espacios seguidos de un salto de l\xEDnea ("Regla de dos espacios").'}},"two-spaces-between-lines-with-content":{name:"Dos espacios entre l\xEDneas con contenido",description:"Se asegura de que el salto de l\xEDnea especificado se agregue al final de las l\xEDneas y el contenido contin\xFAe en la l\xEDnea siguiente para p\xE1rrafos, citas en bloque y elementos de lista.","line-break-indicator":{name:"Indicador de salto de l\xEDnea",description:"El indicador de salto de l\xEDnea a utilizar."}},"unordered-list-style":{name:"Estilo de lista desordenada",description:"Se asegura de que las listas desordenadas sigan el estilo especificado.","list-style":{name:"Estilo de elemento de lista",description:"El estilo de elemento de lista para usar en listas desordenadas"}},"yaml-key-sort":{name:"Clasificaci\xF3n de clave de YAML",description:"Ordena las claves de YAML seg\xFAn el orden y la prioridad especificados. Nota: tambi\xE9n puede eliminar las l\xEDneas en blanco.","yaml-key-priority-sort-order":{name:"Orden de clasificaci\xF3n de prioridad de clave de YAML",description:"El orden en el que se ordenan las claves con una en cada l\xEDnea donde se ordena en el orden que se encuentra en la lista"},"priority-keys-at-start-of-yaml":{name:"Claves de prioridad al inicio del YAML",description:"El orden de clasificaci\xF3n de prioridad clave de YAML se coloca al comienzo del frontmatter del YAML"},"yaml-sort-order-for-other-keys":{name:"Orden de clasificaci\xF3n de YAML para otras claves",description:"La forma en que ordenar las claves que no se encuentran en el \xE1rea de texto `Orden de clasificaci\xF3n de prioridad de clave de YAML`"}},"yaml-timestamp":{name:"Marca de tiempo de YAML",description:"Lleve un registro de la fecha en que se edit\xF3 el archivo por \xFAltima vez en el frente del YAML. Obtiene las fechas de los metadatos del archivo.","date-created":{name:"Fecha de creaci\xF3n",description:"Inserte la fecha de creaci\xF3n del archivo"},"date-created-key":{name:"Clave de fecha de creaci\xF3n",description:"La clave de YAML para usar para la fecha de creaci\xF3n"},"date-modified":{name:"Fecha modificada",description:"Inserte la fecha en que se modific\xF3 el archivo por \xFAltima vez"},"date-modified-key":{name:"Clave de fecha modificada",description:"La clave de YAML para usar para la fecha de modificaci\xF3n"},format:{name:"Formato",description:"Formato de fecha de Moment a usar (ver [Opciones de formato de Moment](https://momentjscom.readthedocs.io/en/latest/moment/04-displaying/01-format/))"}},"yaml-title-alias":{name:"Alias de t\xEDtulo de YAML",description:"Inserta o actualiza el t\xEDtulo del archivo en la secci\xF3n de alias de YAML frontmatter. Obtiene el t\xEDtulo del primer H1 o nombre de archivo.","preserve-existing-alias-section-style":{name:"Conservar el estilo de secci\xF3n de alias existente",description:"Si se establece, la configuraci\xF3n `Estilo de secci\xF3n de alias de YAML` se aplica solo a las secciones reci\xE9n creadas"},"keep-alias-that-matches-the-filename":{name:"Mantenga el alias que coincida con el nombre del archivo",description:"Estos alias suelen ser redundantes."},"use-yaml-key-to-keep-track-of-old-filename-or-heading":{name:"Use la clave de YAML especificado por `Clave auxiliar de alias` para ayudar con los cambios de nombre de archivo y encabezado",description:"Si se establece, cuando cambia el primer encabezado H1 o cambia el nombre de archivo si el primer H1 no est\xE1 presente, el alias anterior almacenado en esta clave se reemplazar\xE1 con el nuevo valor en lugar de simplemente insertar una nueva entrada en la matriz de alias."},"alias-helper-key":{name:"Clave auxiliar de alias",description:"La clave que se debe utilizar para ayudar a realizar un seguimiento de cu\xE1l fue el \xFAltimo nombre de archivo o encabezado que esta regla almacen\xF3 en el frontmatter."}},"yaml-title":{name:"T\xEDtulo de YAML",description:"Inserta el t\xEDtulo del archivo en el frontmatter de YAML. Obtiene el t\xEDtulo seg\xFAn el modo seleccionado.","title-key":{name:"Clave de t\xEDtulo",description:"La clave de YAML para usar para el t\xEDtulo"},mode:{name:"Modo",description:"El m\xE9todo a utilizar para obtener el t\xEDtulo"}}},enums:{"Title Case":"Titulo del Caso","ALL CAPS":"TODO MAY\xDASCULAS","First letter":"Primera letra",".":".",")":")",ERROR:"error",TRACE:"trazar",DEBUG:"depurar",INFO:"informaci\xF3n",WARN:"advertencia",SILENT:"silencio",ascending:"ascendente",lazy:"perezoso",Nothing:"nada","Remove hashtag":"Remove hashtag","Remove whole tag":"Remove whole tag",asterisk:"asterisco",underscore:"guion bajo",consistent:"congruente","-":"-","*":"*","+":"+",space:"espacio","no space":"sin espacio",None:"nada","Ascending Alphabetical":"Ascendente alfab\xE9tico","Descending Alphabetical":"Descendiente alfab\xE9tico","multi-line":"multil\xEDnea","single-line":"linea sola","single string to single-line":"una sola cadena a una sola l\xEDnea","single string to multi-line":"cadena \xFAnica a multil\xEDnea","single string comma delimited":"cadena \xFAnica delimitada por comas","single string space delimited":"espacio de una sola cadena delimitado","single-line space delimited":"espacio de una sola l\xEDnea delimitado","first-h1":"primer encabezado de nivel 1","first-h1-or-filename-if-h1-missing":"primer encabezado de nivel 1 o nombre de archivo si falta el encabezado de primer nivel 1",filename:"nombre del archivo","''":"''","\u2018\u2019":"\u2018\u2019",'""':'""',"\u201C\u201D":"\u201C\u201D","\\":"\\","
    ":"
    "," ":" ","
    ":"
    "}};var od={};var sd={};var ld={};var cd={};var ud={};var dd={};var pd={};var md={};var fd={};var gd={};var hd={};var yd={};var bd={commands:{"lint-file":{name:"\u041B\u0438\u043D\u0442 \u0442\u0435\u043A\u0443\u0449\u0435\u0433\u043E \u0444\u0430\u0439\u043B\u0430","error-message":"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u043B\u0438\u043D\u0442\u0435 \u0442\u0435\u043A\u0443\u0449\u0435\u0433\u043E \u0444\u0430\u0439\u043B\u0430"},"lint-file-unless-ignored":{name:"\u041B\u0438\u043D\u0442 \u0442\u0435\u043A\u0443\u0449\u0435\u0433\u043E \u0444\u0430\u0439\u043B\u0430, \u0435\u0441\u043B\u0438 \u043E\u043D \u043D\u0435 \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044F"},"lint-all-files":{name:"\u041B\u0438\u043D\u0442 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432 \u0432 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435","error-message":"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u043B\u0438\u043D\u0442\u0435 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432","success-message":"\u041B\u0438\u043D\u0442 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432 \u043F\u0440\u043E\u0448\u0435\u043B \u0443\u0441\u043F\u0435\u0448\u043D\u043E","errors-message-singular":"\u041B\u0438\u043D\u0442\u0435\u0440 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u043B \u0432\u0441\u0435 \u0444\u0430\u0439\u043B\u044B \u0441 1 \u043E\u0448\u0438\u0431\u043A\u043E\u0439.","errors-message-plural":"\u041B\u0438\u043D\u0442\u0435\u0440 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u043B \u0432\u0441\u0435 \u0444\u0430\u0439\u043B\u044B \u0441 {NUM} \u043E\u0448\u0438\u0431\u043E\u043A.","start-message":"\u042D\u0442\u043E \u0438\u0437\u043C\u0435\u043D\u0438\u0442 \u0432\u0441\u0435 \u0432\u0430\u0448\u0438 \u0444\u0430\u0439\u043B\u044B \u0438 \u043C\u043E\u0436\u0435\u0442 \u0432\u044B\u0437\u0432\u0430\u0442\u044C \u043E\u0448\u0438\u0431\u043A\u0438.","submit-button-text":"\u041B\u0438\u043D\u0442 \u0432\u0441\u0435\u0433\u043E","submit-button-notice-text":"\u041B\u0438\u043D\u0442 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432..."},"lint-all-files-in-folder":{name:"\u041B\u0438\u043D\u0442 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432 \u0432 \u0442\u0435\u043A\u0443\u0449\u0435\u0439 \u043F\u0430\u043F\u043A\u0435","start-message":"\u042D\u0442\u043E \u0438\u0437\u043C\u0435\u043D\u0438\u0442 \u0432\u0441\u0435 \u0444\u0430\u0439\u043B\u044B \u0432 {FOLDER_NAME}, \u0432\u043A\u043B\u044E\u0447\u0430\u044F \u0444\u0430\u0439\u043B\u044B \u0432 \u043F\u043E\u0434\u043F\u0430\u043F\u043A\u0430\u0445, \u0447\u0442\u043E \u043C\u043E\u0436\u0435\u0442 \u0432\u044B\u0437\u0432\u0430\u0442\u044C \u043E\u0448\u0438\u0431\u043A\u0438.","submit-button-text":"\u041B\u0438\u043D\u0442 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432 \u0432 {FOLDER_NAME}","submit-button-notice-text":"\u041B\u0438\u043D\u0442 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432 \u0432 {FOLDER_NAME}...","error-message":"\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u043B\u0438\u043D\u0442\u0435 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432 \u0432 \u043F\u0430\u043F\u043A\u0435","success-message":"\u041B\u0438\u043D\u0442 \u0432\u0441\u0435\u0445 {NUM} \u0444\u0430\u0439\u043B\u043E\u0432 \u0432 {FOLDER_NAME} \u043F\u0440\u043E\u0448\u0435\u043B \u0443\u0441\u043F\u0435\u0448\u043D\u043E.","message-singular":"\u041B\u0438\u043D\u0442\u0435\u0440 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u043B \u0432\u0441\u0435 {NUM} \u0444\u0430\u0439\u043B\u043E\u0432 \u0432 {FOLDER_NAME} \u0441 1 \u043E\u0448\u0438\u0431\u043A\u043E\u0439.","message-plural":"\u041B\u0438\u043D\u0442\u0435\u0440 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u043B \u0432\u0441\u0435 {FILE_COUNT} \u0444\u0430\u0439\u043B\u043E\u0432 \u0432 {FOLDER_NAME} \u0441 {ERROR_COUNT} \u043E\u0448\u0438\u0431\u043E\u043A."},"paste-as-plain-text":{name:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043A\u0430\u043A Plain Text, \u0431\u0435\u0437 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439"},"lint-file-pop-up-menu-text":{name:"\u041B\u0438\u043D\u0442 \u0444\u0430\u0439\u043B\u0430"},"lint-folder-pop-up-menu-text":{name:"\u041B\u0438\u043D\u0442 \u043F\u0430\u043F\u043A\u0438"}},logs:{"plugin-load":"\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u043F\u043B\u0430\u0433\u0438\u043D\u0430","plugin-unload":"\u0412\u044B\u0433\u0440\u0443\u0437\u043A\u0430 \u043F\u043B\u0430\u0433\u0438\u043D\u0430","folder-lint":"\u041B\u0438\u043D\u0442 \u043F\u0430\u043F\u043A\u0438 ","linter-run":"\u0417\u0430\u043F\u0443\u0441\u043A \u043B\u0438\u043D\u0442\u0435\u0440\u0430","file-change-yaml-lint-run":"\u0417\u0430\u043F\u0443\u0441\u043A \u043B\u0438\u043D\u0442\u0430 YAML \u043F\u0440\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0438 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430","file-change-yaml-lint-skipped":"\u041D\u0435 \u043E\u0431\u043D\u0430\u0440\u0443\u0436\u0435\u043D\u043E \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0444\u0430\u0439\u043B\u0430, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u043B\u0438\u043D\u0442 YAML \u043F\u0440\u043E\u043F\u0443\u0449\u0435\u043D","file-change-yaml-lint-warning":"\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u0444\u0430\u0439\u043B\u0435 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u043D\u043E (debounce) \u0437\u0430\u043F\u0443\u0449\u0435\u043D. \u0413\u0434\u0435-\u0442\u043E \u0447\u0442\u043E-\u0442\u043E \u043F\u043E\u0448\u043B\u043E \u043D\u0435 \u0442\u0430\u043A.","paste-link-warning":"\u0432\u0441\u0442\u0430\u0432\u043A\u0430 \u043F\u0440\u0435\u0440\u0432\u0430\u043D\u0430, \u0442\u0430\u043A \u043A\u0430\u043A \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435 \u0431\u0443\u0444\u0435\u0440\u0430 \u043E\u0431\u043C\u0435\u043D\u0430 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0441\u0441\u044B\u043B\u043A\u043E\u0439, \u0438 \u044D\u0442\u043E \u043F\u043E\u0437\u0432\u043E\u043B\u0438\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044C \u043A\u043E\u043D\u0444\u043B\u0438\u043A\u0442\u043E\u0432 \u0441 \u0434\u0440\u0443\u0433\u0438\u043C\u0438 \u043F\u043B\u0430\u0433\u0438\u043D\u0430\u043C\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0438\u0437\u043C\u0435\u043D\u044F\u044E\u0442 \u0432\u0441\u0442\u0430\u0432\u043A\u0443.","see-console":"\u0411\u043E\u043B\u0435\u0435 \u043F\u043E\u0434\u0440\u043E\u0431\u043D\u0443\u044E \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044E \u0441\u043C\u043E\u0442\u0440\u0438\u0442\u0435 \u0432 \u043A\u043E\u043D\u0441\u043E\u043B\u0438.","unknown-error":"\u0412\u043E \u0432\u0440\u0435\u043C\u044F \u043B\u0438\u043D\u0442\u0438\u043D\u0433\u0430 \u043F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043D\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430.","moment-locale-not-found":"\u041F\u043E\u043F\u044B\u0442\u043A\u0430 \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C Moment.js \u043D\u0430 {MOMENT_LOCALE}, \u0441 {CURRENT_LOCALE}","file-change-lint-message-start":"\u041B\u0438\u043D\u0442 \u0443\u0441\u043F\u0435\u0448\u0435\u043D","custom-command-callback-warning":"\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 \u043A\u0430\u0441\u0442\u043E\u043C\u043D\u044B\u0439 (callback) \u0434\u043B\u044F \u0438\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0445 \u0442\u0435\u0441\u0442\u043E\u0432.","pre-rules":"\u043F\u0440\u0430\u0432\u0438\u043B\u0430 \u043F\u0435\u0440\u0435\u0434 \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u044B\u043C\u0438 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u043C\u0438","post-rules":"\u043F\u0440\u0430\u0432\u0438\u043B\u0430 \u043F\u043E\u0441\u043B\u0435 \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u044B\u0445 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0439","rule-running":"\u043F\u0440\u0430\u0432\u0438\u043B\u0430 \u0437\u0430\u043F\u0443\u0449\u0435\u043D\u044B","custom-regex":"\u043A\u0430\u0441\u0442\u043E\u043C\u043D\u044B\u0435 \u043F\u0440\u0430\u0432\u0438\u043B\u0430 \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u044B\u0445 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0439","running-custom-regex":"\u0417\u0430\u043F\u0443\u0441\u043A \u043A\u0430\u0441\u0442\u043E\u043C\u043D\u044B\u0445 \u043F\u0440\u0430\u0432\u0438\u043B \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u044B\u0445 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0439","running-custom-lint-command":"\u0417\u0430\u043F\u0443\u0441\u043A \u043A\u0430\u0441\u0442\u043E\u043C\u043D\u044B\u0445 \u043A\u043E\u043C\u0430\u043D\u0434 \u043B\u0438\u043D\u0442\u0430","custom-lint-duplicate-warning":'\u0412\u044B \u043D\u0435 \u043C\u043E\u0436\u0435\u0442\u0435 \u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C \u043E\u0434\u043D\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u0443 ("{COMMAND_NAME}") \u043A\u0430\u043A \u043A\u0430\u0441\u0442\u043E\u043C\u043D\u043E\u0435 \u043F\u0440\u0430\u0432\u0438\u043B\u043E \u043B\u0438\u043D\u0442\u0430 \u0434\u0432\u0430\u0436\u0434\u044B.',"custom-lint-error-message":"\u041A\u0430\u0441\u0442\u043E\u043C\u043D\u0430\u044F \u043A\u043E\u043C\u0430\u043D\u0434\u0430 \u043B\u0438\u043D\u0442\u0430","disabled-text":"\u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D\u043E","run-rule-text":"\u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F","timing-key-not-found":"\u043A\u043B\u044E\u0447 \u0442\u0430\u0439\u043C\u0438\u043D\u0433\u0430 '{TIMING_KEY}' \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D \u0432 \u0441\u043F\u0438\u0441\u043A\u0435 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0438 \u043E \u0442\u0430\u0439\u043C\u0438\u043D\u0433\u0430\u0445, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u043E\u043D \u0431\u044B\u043B \u043F\u0440\u043E\u0438\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u043D","milliseconds-abbreviation":"\u043C\u0441","invalid-date-format-error":"\u0424\u043E\u0440\u043C\u0430\u0442 \u0441\u043E\u0437\u0434\u0430\u043D\u043D\u043E\u0439 \u0434\u0430\u0442\u044B '{DATE}' \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0440\u043E\u0430\u043D\u0430\u043B\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D \u0438\u043B\u0438 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0434\u0430\u0442\u0430 \u0431\u044B\u043B\u0430 \u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0430 \u0431\u0435\u0437 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0432 '{FILE_NAME}'","invalid-delimiter-error-message":"\u0432 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044F \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0434\u0438\u043D \u0441\u0438\u043C\u0432\u043E\u043B","missing-footnote-error-message":"\u0421\u043D\u043E\u0441\u043A\u0430 '{FOOTNOTE}' \u043D\u0435 \u0438\u043C\u0435\u0435\u0442 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044E\u0449\u0435\u0439 \u0441\u0441\u044B\u043B\u043A\u0438 \u043D\u0430 \u0441\u043D\u043E\u0441\u043A\u0443 \u043F\u0435\u0440\u0435\u0434 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u044B\u043C \u0441\u043D\u043E\u0441\u043A\u0438 \u0438 \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0430\u043D\u0430. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044C, \u0447\u0442\u043E \u0432\u0441\u0435 \u0441\u043D\u043E\u0441\u043A\u0438 \u0438\u043C\u0435\u044E\u0442 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044E\u0449\u0443\u044E \u0441\u0441\u044B\u043B\u043A\u0443 \u043F\u0435\u0440\u0435\u0434 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u044B\u043C \u0441\u043D\u043E\u0441\u043A\u0438.","too-many-footnotes-error-message":"\u0421\u043D\u043E\u0441\u043A\u0430 \u0441 \u043A\u043B\u044E\u0447\u043E\u043C '{FOOTNOTE_KEY}' \u0438\u043C\u0435\u0435\u0442 \u0431\u043E\u043B\u0435\u0435 \u043E\u0434\u043D\u043E\u0439 \u0441\u0441\u044B\u043B\u043A\u0438 \u043D\u0430 \u043D\u0435\u0451. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u0435 \u0441\u043D\u043E\u0441\u043A\u0438 \u0442\u0430\u043A, \u0447\u0442\u043E\u0431\u044B \u0431\u044B\u043B\u043E \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0434\u043D\u0430 \u0441\u043D\u043E\u0441\u043A\u0430 \u043D\u0430 \u043A\u043B\u044E\u0447 \u0441\u043D\u043E\u0441\u043A\u0438.","wrapper-yaml-error":"\u043E\u0448\u0438\u0431\u043A\u0430 \u0432 YAML: {ERROR_MESSAGE}","wrapper-unknown-error":"\u043D\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430: {ERROR_MESSAGE}"},"notice-text":{"empty-clipboard":"\u041D\u0435\u0442 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0433\u043E \u0432 \u0431\u0443\u0444\u0435\u0440\u0435 \u043E\u0431\u043C\u0435\u043D\u0430.","characters-added":"\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043E","characters-removed":"\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0443\u0434\u0430\u043B\u0435\u043D\u043E","copy-to-clipboard-failed":"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0442\u0435\u043A\u0441\u0442 \u0432 \u0431\u0443\u0444\u0435\u0440 \u043E\u0431\u043C\u0435\u043D\u0430: "},"all-rules-option":"\u0412\u0441\u0435","linter-title":"\u041B\u0438\u043D\u0442\u0435\u0440","empty-search-results-text":"\u041D\u0435\u0442 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A, \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0445 \u043F\u043E\u0438\u0441\u043A\u0443","warning-text":"\u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435","file-backup-text":"\u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044C, \u0447\u0442\u043E \u0432\u044B \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u043B\u0438 \u0441\u0432\u043E\u0438 \u0444\u0430\u0439\u043B\u044B.","custom-command-warning":"\u041B\u0438\u043D\u0442 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u0444\u0430\u0439\u043B\u043E\u0432 \u0441 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044B\u043C\u0438 \u043A\u0430\u0441\u0442\u043E\u043C\u043D\u044B\u043C\u0438 \u043A\u043E\u043C\u0430\u043D\u0434\u0430\u043C\u0438 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043C\u0435\u0434\u043B\u0435\u043D\u043D\u044B\u043C \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u043E\u043C, \u0442\u0440\u0435\u0431\u0443\u044E\u0449\u0438\u043C \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u0438 \u043E\u0442\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u043F\u0430\u043D\u0435\u043B\u0438 \u0432 \u0431\u043E\u043A\u043E\u0432\u043E\u0439 \u043F\u0430\u043D\u0435\u043B\u0438. \u041E\u043D \u0437\u0430\u043C\u0435\u0442\u043D\u043E \u043C\u0435\u0434\u043B\u0435\u043D\u043D\u0435\u0435, \u0447\u0435\u043C \u0437\u0430\u043F\u0443\u0441\u043A \u0431\u0435\u0437 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044B\u0445 \u043A\u0430\u0441\u0442\u043E\u043C\u043D\u044B\u0445 \u043A\u043E\u043C\u0430\u043D\u0434. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0439\u0442\u0435 \u0441 \u043E\u0441\u0442\u043E\u0440\u043E\u0436\u043D\u043E\u0441\u0442\u044C\u044E.","cancel-button-text":"\u041E\u0442\u043C\u0435\u043D\u0430","copy-aria-label":"\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C","disabled-other-rule-notice":"\u0415\u0441\u043B\u0438 \u0432\u044B \u0432\u043A\u043B\u044E\u0447\u0438\u0442\u0435 {NAME_1}, \u043E\u043D \u043E\u0442\u043A\u043B\u044E\u0447\u0438\u0442 {NAME_2}. \u0425\u043E\u0442\u0438\u0442\u0435 \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C?","disabled-conflicting-rule-notice":"{NAME_1}, \u043A\u043E\u043D\u0444\u043B\u0438\u043A\u0442\u0443\u0435\u0442 \u0441 {NAME_2}, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u043E\u043D \u0431\u044B\u043B \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D. \u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C, \u043A\u0430\u043A\u043E\u0439 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D \u0432 \u0442\u0430\u0431\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A.",ok:"\u0425\u043E\u0440\u043E\u0448\u043E","parse-results-heading-text":"\u041A\u0430\u0441\u0442\u043E\u043C\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u043F\u0430\u0440\u0441\u0438\u043D\u0433\u0430","file-parse-description-text":"\u041D\u0438\u0436\u0435 \u043F\u0440\u0438\u0432\u0435\u0434\u0435\u043D \u0441\u043F\u0438\u0441\u043E\u043A \u0437\u0430\u043C\u0435\u043D, \u043D\u0430\u0439\u0434\u0435\u043D\u043D\u044B\u0445 \u0432 {FILE}.","no-parsed-values-found-text":"\u0412 {FILE} \u043D\u0435 \u0431\u044B\u043B\u043E \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u0437\u0430\u043C\u0435\u043D. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044C, \u0447\u0442\u043E \u0432\u0441\u0435 \u0442\u0430\u0431\u043B\u0438\u0446\u044B \u0441 \u043A\u0430\u0441\u0442\u043E\u043C\u043D\u044B\u043C\u0438 \u0437\u0430\u043C\u0435\u043D\u0430\u043C\u0438 \u0432 {FILE} \u0438\u043C\u0435\u044E\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u0432\u0435 \u043A\u043E\u043B\u043E\u043D\u043A\u0438 \u0438 \u0432\u0441\u0435 \u0441\u0442\u0440\u043E\u043A\u0438 \u043D\u0430\u0447\u0438\u043D\u0430\u044E\u0442\u0441\u044F \u0438 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u044E\u0442\u0441\u044F \u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u043E\u0439 \u0447\u0435\u0440\u0442\u043E\u0439 (\u0442.\u0435. |).","find-header-text":"\u0421\u043B\u043E\u0432\u043E \u0434\u043B\u044F \u041F\u043E\u0438\u0441\u043A\u0430","replace-header-text":"\u0417\u0430\u043C\u0435\u043D\u044F\u0435\u043C\u043E\u0435 \u0441\u043B\u043E\u0432\u043E","close-button-text":"\u0417\u0430\u043A\u0440\u044B\u0442\u044C",tabs:{names:{general:"\u041E\u0431\u0449\u0438\u0435",custom:"\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435",yaml:"YAML",heading:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0438",content:"\u041A\u043E\u043D\u0442\u0435\u043D\u0442",footnote:"\u0421\u043D\u043E\u0441\u043A\u0438",spacing:"\u041E\u0442\u0441\u0442\u0443\u043F\u044B",paste:"\u0412\u0441\u0442\u0430\u0432\u043A\u0430",debug:"\u041E\u0442\u043B\u0430\u0434\u043A\u0430"},"default-search-bar-text":"\u041F\u043E\u0438\u0441\u043A \u0432\u0441\u0435\u0445 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A",general:{"lint-on-save":{name:"\u041B\u0438\u043D\u0442 \u043F\u0440\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0438",description:"\u041B\u0438\u043D\u0442 \u0444\u0430\u0439\u043B\u0430 \u043F\u0440\u0438 \u0440\u0443\u0447\u043D\u043E\u043C \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0438 (\u043A\u043E\u0433\u0434\u0430 \u043D\u0430\u0436\u0430\u0442\u0430 Ctrl + S \u0438\u043B\u0438 \u043A\u043E\u0433\u0434\u0430 :w \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u043F\u0440\u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0438 VIM-\u0440\u0435\u0436\u0438\u043C\u0430)"},"display-message":{name:"\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0435 \u043F\u043E\u0441\u043B\u0435 \u043B\u0438\u043D\u0442\u0430",description:"\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432, \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u043D\u044B\u0445 \u043F\u043E\u0441\u043B\u0435 \u043B\u0438\u043D\u0442\u0430"},"lint-on-file-change":{name:"\u041B\u0438\u043D\u0442 \u043F\u0440\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0438 \u0444\u0430\u0439\u043B\u0430 \u0432 \u0444\u043E\u043A\u0443\u0441\u0435",description:"\u041A\u043E\u0433\u0434\u0430 \u0444\u0430\u0439\u043B \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u0438\u043B\u0438 \u0437\u0430\u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F \u043D\u0430 \u043D\u043E\u0432\u044B\u0439, \u043F\u0440\u0435\u0434\u044B\u0434\u0443\u0449\u0438\u0439 \u0444\u0430\u0439\u043B \u043B\u0438\u043D\u0442\u0438\u0442\u0441\u044F."},"display-lint-on-file-change-message":{name:"\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u043F\u0440\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0438 \u0444\u0430\u0439\u043B\u0430 \u0432 \u0444\u043E\u043A\u0443\u0441\u0435",description:"\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u043F\u0440\u0438 \u041B\u0438\u043D\u0442 \u043F\u0440\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0438 \u0444\u0430\u0439\u043B\u0430 \u0432 \u0444\u043E\u043A\u0443\u0441\u0435"},"folders-to-ignore":{name:"\u0418\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u0430\u043F\u043A\u0438",description:"\u041F\u0430\u043F\u043A\u0438, \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C\u044B\u0435 \u043F\u0440\u0438 \u043B\u0438\u043D\u0442\u0435 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432 \u0438\u043B\u0438 \u043F\u0440\u0438 \u043B\u0438\u043D\u0442\u0435 \u043F\u0440\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0438.","folder-search-placeholder-text":"\u0418\u043C\u044F \u043F\u0430\u043F\u043A\u0438","add-input-button-text":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0434\u0440\u0443\u0433\u0443\u044E \u043F\u0430\u043F\u043A\u0443 \u043A \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C\u044B\u043C","delete-tooltip":"\u0423\u0434\u0430\u043B\u0438\u0442\u044C"},"files-to-ignore":{name:"\u0418\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0444\u0430\u0439\u043B\u044B",description:"\u0424\u0430\u0439\u043B\u044B, \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C\u044B\u0435 \u043F\u0440\u0438 \u043B\u0438\u043D\u0442\u0435 \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043B\u043E\u0432 \u0438\u043B\u0438 \u043F\u0440\u0438 \u043B\u0438\u043D\u0442\u0435 \u043F\u0440\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0438.","file-search-placeholder-text":"\u0418\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C\u044B\u0435 \u0444\u0430\u0439\u043B\u044B \u043F\u0440\u0438 \u043B\u0438\u043D\u0442\u0435 \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u044B\u0445 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0439 (regex)","add-input-button-text":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0434\u0440\u0443\u0433\u043E\u0439 \u0444\u0430\u0439\u043B \u043A \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C\u044B\u043C (regex)","delete-tooltip":"\u0423\u0434\u0430\u043B\u0438\u0442\u044C","label-placeholder-text":"\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A","flags-placeholder-text":"\u0444\u043B\u0430\u0433\u0438",warning:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u044D\u0442\u043E \u0441 \u043E\u0441\u0442\u043E\u0440\u043E\u0436\u043D\u043E\u0441\u0442\u044C\u044E, \u0435\u0441\u043B\u0438 \u0432\u044B \u043D\u0435 \u0437\u043D\u0430\u0435\u0442\u0435 \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u044B\u0435 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u044F. \u041A\u0440\u043E\u043C\u0435 \u0442\u043E\u0433\u043E, \u0435\u0441\u043B\u0438 \u0432\u044B \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0435 (lookbehinds) \u0432 \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u044B\u0445 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u0445 \u043D\u0430 \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u043E\u043C \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0435 iOS, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044C, \u0447\u0442\u043E \u0432\u0430\u0448\u0430 \u0432\u0435\u0440\u0441\u0438\u044F \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u0445 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435."},"override-locale":{name:"\u041F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0438\u0442\u044C \u044F\u0437\u044B\u043A",description:"\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0435 \u044D\u0442\u043E, \u0435\u0441\u043B\u0438 \u0432\u044B \u0445\u043E\u0442\u0438\u0442\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u044F\u0437\u044B\u043A, \u043E\u0442\u043B\u0438\u0447\u043D\u044B\u0439 \u043E\u0442 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u043E\u0433\u043E"},"same-as-system-locale":"\u0422\u043E \u0436\u0435, \u0447\u0442\u043E \u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043C\u0435 ({SYS_LOCALE})","yaml-aliases-section-style":{name:"\u0421\u0442\u0438\u043B\u044C \u0440\u0430\u0437\u0434\u0435\u043B\u0430 YAML (aliases)",description:"\u0421\u0442\u0438\u043B\u044C \u0440\u0430\u0437\u0434\u0435\u043B\u0430 YAML (aliases)"},"yaml-tags-section-style":{name:"\u0421\u0442\u0438\u043B\u044C \u0440\u0430\u0437\u0434\u0435\u043B\u0430 YAML (tags)",description:"\u0421\u0442\u0438\u043B\u044C \u0440\u0430\u0437\u0434\u0435\u043B\u0430 YAML (tags)"},"default-escape-character":{name:"\u0421\u0438\u043C\u0432\u043E\u043B \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0434\u043B\u044F \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F YAML (escape)",description:"\u0421\u0438\u043C\u0432\u043E\u043B \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0439 \u0434\u043B\u044F \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 YAML \u043F\u0440\u0438 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043E\u0434\u0438\u043D\u0430\u0440\u043D\u044B\u0445 \u0438 \u0434\u0432\u043E\u0439\u043D\u044B\u0445 \u043A\u0430\u0432\u044B\u0447\u0435\u043A."},"remove-unnecessary-escape-chars-in-multi-line-arrays":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043D\u0435\u043D\u0443\u0436\u043D\u044B\u0435 \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u043E\u0433\u043E \u043C\u0430\u0441\u0441\u0438\u0432\u0430",description:"\u0421\u0438\u043C\u0432\u043E\u043B\u044B \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0434\u043B\u044F \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0445 \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u0432 YAML \u043D\u0435 \u043D\u0443\u0436\u0434\u0430\u044E\u0442\u0441\u044F \u0432 \u0442\u0430\u043A\u043E\u043C \u0436\u0435 \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0438, \u043A\u0430\u043A \u043E\u0434\u043D\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0435 \u043C\u0430\u0441\u0441\u0438\u0432\u044B, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0432 \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u0435 \u043B\u0438\u0448\u043D\u0438\u0435 \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043D\u0435 \u043D\u0443\u0436\u043D\u044B."},"number-of-dollar-signs-to-indicate-math-block":{name:"\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0437\u043D\u0430\u043A\u043E\u0432 \u0434\u043E\u043B\u043B\u0430\u0440\u0430 \u0434\u043B\u044F \u043E\u0431\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u043C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u0431\u043B\u043E\u043A\u0430",description:"\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0437\u043D\u0430\u043A\u043E\u0432 \u0434\u043E\u043B\u043B\u0430\u0440\u0430, \u043F\u0440\u0438 \u043A\u043E\u0442\u043E\u0440\u043E\u043C \u043C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044F \u043C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u043C \u0431\u043B\u043E\u043A\u043E\u043C, \u0430 \u043D\u0435 \u0432\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u043E\u0439 \u043C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u043A\u043E\u0439."}},debug:{"log-level":{name:"\u0423\u0440\u043E\u0432\u0435\u043D\u044C \u043B\u043E\u0433\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F",description:"\u0422\u0438\u043F\u044B \u043B\u043E\u0433\u043E\u0432, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u044B \u0434\u043B\u044F \u0437\u0430\u043F\u0438\u0441\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043E\u043C. \u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E ERROR."},"linter-config":{name:"\u041A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044F \u043B\u0438\u043D\u0442\u0435\u0440\u0430",description:"\u0421\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435 data.json \u0434\u043B\u044F \u043B\u0438\u043D\u0442\u0435\u0440\u0430 \u043D\u0430 \u043C\u043E\u043C\u0435\u043D\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A"},"log-collection":{name:"\u0421\u043E\u0431\u0438\u0440\u0430\u0442\u044C \u043B\u043E\u0433\u0438 \u043F\u0440\u0438 \u043B\u0438\u043D\u0442\u0435 \u043F\u0440\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0438 \u0438 \u043B\u0438\u043D\u0442\u0435 \u0442\u0435\u043A\u0443\u0449\u0435\u0433\u043E \u0444\u0430\u0439\u043B\u0430",description:"\u0421\u043E\u0431\u0438\u0440\u0430\u0435\u0442 \u043B\u043E\u0433\u0438 \u043F\u0440\u0438 \u041B\u0438\u043D\u0442 \u043F\u0440\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0438 \u0438 \u043B\u0438\u043D\u0442\u0435 \u0442\u0435\u043A\u0443\u0449\u0435\u0433\u043E \u0444\u0430\u0439\u043B\u0430. \u042D\u0442\u0438 \u043B\u043E\u0433\u0438 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u043F\u043E\u043B\u0435\u0437\u043D\u044B \u0434\u043B\u044F \u043E\u0442\u043B\u0430\u0434\u043A\u0438 \u0438 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u043E\u0442\u0447\u0435\u0442\u043E\u0432 \u043E\u0431 \u043E\u0448\u0438\u0431\u043A\u0430\u0445."},"linter-logs":{name:"\u041B\u043E\u0433\u0438 \u043B\u0438\u043D\u0442\u0435\u0440\u0430",description:"\u041B\u043E\u0433\u0438 \u043E\u0442 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0433\u043E \u041B\u0438\u043D\u0442 \u043F\u0440\u0438 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0438 \u0438\u043B\u0438 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0433\u043E \u043B\u0438\u043D\u0442\u0438\u043D\u0433\u0430 \u0442\u0435\u043A\u0443\u0449\u0435\u0433\u043E \u0444\u0430\u0439\u043B\u0430, \u0435\u0441\u043B\u0438 \u043E\u043D\u0438 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u044B."}}},options:{"custom-command":{name:"\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u044B",description:"\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u044B \u2014 \u044D\u0442\u043E \u043A\u043E\u043C\u0430\u043D\u0434\u044B Obsidian, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0437\u0430\u043F\u0443\u0441\u043A\u0430\u044E\u0442\u0441\u044F \u043F\u043E\u0441\u043B\u0435 \u0442\u043E\u0433\u043E, \u043A\u0430\u043A linter \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435 \u0441\u0432\u043E\u0438\u0445 \u043E\u0431\u044B\u0447\u043D\u044B\u0445 \u043F\u0440\u0430\u0432\u0438\u043B. \u042D\u0442\u043E \u043E\u0437\u043D\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043E \u043E\u043D\u0438 \u043D\u0435 \u0437\u0430\u043F\u0443\u0441\u043A\u0430\u044E\u0442\u0441\u044F \u0434\u043E \u0437\u0430\u043F\u0443\u0441\u043A\u0430 \u043B\u043E\u0433\u0438\u043A\u0438 \u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0439 \u043C\u0435\u0442\u043A\u0438 YAML, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u043E\u043D\u0438 \u043C\u043E\u0433\u0443\u0442 \u0432\u044B\u0437\u0432\u0430\u0442\u044C \u0441\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u043D\u0438\u0435 \u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0439 \u043C\u0435\u0442\u043A\u0438 YAML \u043F\u0440\u0438 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u043C \u0437\u0430\u043F\u0443\u0441\u043A\u0435 linter. \u0412\u044B \u043C\u043E\u0436\u0435\u0442\u0435 \u0432\u044B\u0431\u0440\u0430\u0442\u044C \u043A\u043E\u043C\u0430\u043D\u0434\u0443 Obsidian \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0434\u0438\u043D \u0440\u0430\u0437.",warning:"\u041F\u0440\u0438 \u0432\u044B\u0431\u043E\u0440\u0435 \u043E\u043F\u0446\u0438\u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044C, \u0447\u0442\u043E \u0432\u044B \u0432\u044B\u0431\u0440\u0430\u043B\u0438 \u0435\u0435 \u043B\u0438\u0431\u043E \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043C\u044B\u0448\u0438, \u043B\u0438\u0431\u043E \u043D\u0430\u0436\u0430\u0432 \u043A\u043B\u0430\u0432\u0438\u0448\u0443 Enter. \u0414\u0440\u0443\u0433\u0438\u0435 \u043C\u0435\u0442\u043E\u0434\u044B \u0432\u044B\u0431\u043E\u0440\u0430 \u043C\u043E\u0433\u0443\u0442 \u043D\u0435 \u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C, \u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u044B \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u044B\u0431\u043E\u0440\u044B \u0444\u0430\u043A\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0439 \u043A\u043E\u043C\u0430\u043D\u0434\u044B Obsidian \u0438\u043B\u0438 \u043F\u0443\u0441\u0442\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438.","add-input-button-text":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u043E\u0432\u0443\u044E \u043A\u043E\u043C\u0430\u043D\u0434\u0443","command-search-placeholder-text":"\u041A\u043E\u043C\u0430\u043D\u0434\u0430 Obsidian","move-up-tooltip":"\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0432\u0432\u0435\u0440\u0445","move-down-tooltip":"\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0432\u043D\u0438\u0437","delete-tooltip":"\u0423\u0434\u0430\u043B\u0438\u0442\u044C"},"custom-replace":{name:"\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0437\u0430\u043C\u0435\u043D\u044B \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u044B\u0445 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0439",description:"\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0437\u0430\u043C\u0435\u043D\u044B \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u044B\u0445 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0439 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u044B \u0434\u043B\u044F \u0437\u0430\u043C\u0435\u043D\u044B \u043B\u044E\u0431\u043E\u0433\u043E \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0433\u043E, \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044E\u0449\u0435\u0433\u043E \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u043E\u043C\u0443 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u044E \u043F\u043E\u0438\u0441\u043A\u0430, \u043D\u0430 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0437\u0430\u043C\u0435\u043D\u044B. \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0437\u0430\u043C\u0435\u043D\u044B \u0438 \u043F\u043E\u0438\u0441\u043A\u0430 \u0434\u043E\u043B\u0436\u043D\u044B \u0431\u044B\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u043C\u0438 \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u044B\u043C\u0438 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u043C\u0438.",warning:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u044D\u0442\u043E \u0441 \u043E\u0441\u0442\u043E\u0440\u043E\u0436\u043D\u043E\u0441\u0442\u044C\u044E, \u0435\u0441\u043B\u0438 \u0432\u044B \u043D\u0435 \u0437\u043D\u0430\u0435\u0442\u0435 \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u044B\u0435 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u044F. \u0422\u0430\u043A\u0436\u0435 \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044C, \u0447\u0442\u043E \u0435\u0441\u043B\u0438 \u0432\u044B \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0435 \u043E\u0431\u0440\u0430\u0442\u043D\u044B\u0435 \u0441\u0441\u044B\u043B\u043A\u0438 \u0432 \u0432\u0430\u0448\u0438\u0445 \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u044B\u0445 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u0445 \u043D\u0430 \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u043E\u043C \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0435 iOS, \u0432\u044B \u043D\u0430\u0445\u043E\u0434\u0438\u0442\u0435\u0441\u044C \u043D\u0430 \u0432\u0435\u0440\u0441\u0438\u0438, \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044E\u0449\u0435\u0439 \u0438\u0445 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435.","add-input-button-text":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u043E\u0432\u0443\u044E \u0437\u0430\u043C\u0435\u043D\u0443 \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u043E\u0433\u043E \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u044F","regex-to-find-placeholder-text":"\u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u043E\u0435 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0434\u043B\u044F \u043F\u043E\u0438\u0441\u043A\u0430","flags-placeholder-text":"\u0444\u043B\u0430\u0433\u0438","regex-to-replace-placeholder-text":"\u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u043E\u0435 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u0434\u043B\u044F \u0437\u0430\u043C\u0435\u043D\u044B","label-placeholder-text":"\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A","move-up-tooltip":"\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0432\u0432\u0435\u0440\u0445","move-down-tooltip":"\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0432\u043D\u0438\u0437","delete-tooltip":"\u0423\u0434\u0430\u043B\u0438\u0442\u044C"},"custom-auto-correct":{"delete-tooltip":"\u0423\u0434\u0430\u043B\u0438\u0442\u044C","show-parsed-contents-tooltip":"\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0440\u0430\u0437\u043E\u0431\u0440\u0430\u043D\u043D\u044B\u0435 \u0437\u0430\u043C\u0435\u043D\u044B","custom-row-parse-warning":'"{ROW}" \u043D\u0435 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u043E\u0439 \u0441 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u043C\u0438 \u0437\u0430\u043C\u0435\u043D\u0430\u043C\u0438. \u041E\u043D \u0434\u043E\u043B\u0436\u0435\u043D \u0438\u043C\u0435\u0442\u044C \u0442\u043E\u043B\u044C\u043A\u043E 2 \u043A\u043E\u043B\u043E\u043D\u043A\u0438.',"file-search-placeholder-text":"\u0418\u043C\u044F \u0444\u0430\u0439\u043B\u0430","add-new-replacement-file-tooltip":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0434\u0440\u0443\u0433\u043E\u0439 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u0444\u0430\u0439\u043B","warning-text":"\u0412\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0435 \u0444\u0430\u0439\u043B\u044B \u0431\u0443\u0434\u0443\u0442 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D\u044B.","refresh-tooltip-text":"\u041F\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0437\u0430\u043C\u0435\u043D\u044B"}},rules:{"auto-correct-common-misspellings":{name:"\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u043E\u043F\u0435\u0447\u0430\u0442\u043E\u043A",description:'\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442 \u0441\u043B\u043E\u0432\u0430\u0440\u044C \u0440\u0430\u0441\u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0451\u043D\u043D\u044B\u0445 \u043E\u043F\u0435\u0447\u0430\u0442\u043E\u043A \u0434\u043B\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0438\u0445 \u043D\u0430 \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E\u0435 \u043D\u0430\u043F\u0438\u0441\u0430\u043D\u0438\u0435. \u0421\u043C\u043E\u0442\u0440\u0438\u0442\u0435 auto-correct map \u0434\u043B\u044F \u043F\u043E\u043B\u043D\u043E\u0433\u043E \u0441\u043F\u0438\u0441\u043A\u0430 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438 \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u043C\u044B\u0445 \u0441\u043B\u043E\u0432. \u041F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435: \u044D\u0442\u043E\u0442 \u0441\u043F\u0438\u0441\u043E\u043A \u043C\u043E\u0436\u0435\u0442 \u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u0441 \u0442\u0435\u043A\u0441\u0442\u043E\u043C \u043D\u0430 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u044F\u0437\u044B\u043A\u0430\u0445, \u043D\u043E \u043E\u043D \u043E\u0441\u0442\u0430\u0435\u0442\u0441\u044F \u043E\u0434\u0438\u043D\u0430\u043A\u043E\u0432\u044B\u043C \u043D\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E \u043E\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u043E\u0433\u043E \u0432 \u0434\u0430\u043D\u043D\u044B\u0439 \u043C\u043E\u043C\u0435\u043D\u0442 \u044F\u0437\u044B\u043A\u0430.',"ignore-words":{name:"\u0418\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043B\u043E\u0432\u0430",description:"\u0421\u043F\u0438\u0441\u043E\u043A \u0441\u043B\u043E\u0432, \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0445 \u0437\u0430\u043F\u044F\u0442\u044B\u043C\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043F\u0440\u0438 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u043C \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0438"},"extra-auto-correct-files":{name:"\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u0435 \u0444\u0430\u0439\u043B\u044B \u0430\u0432\u0442\u043E\u043A\u043E\u0440\u0440\u0435\u043A\u0446\u0438\u0438",description:"\u042D\u0442\u0438 \u0444\u0430\u0439\u043B\u044B \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442 markdown-\u0442\u0430\u0431\u043B\u0438\u0446\u044B, \u0432 \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u0435\u0441\u0442\u044C \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0435 \u0441\u043B\u043E\u0432\u043E \u0438 \u0441\u043B\u043E\u0432\u043E \u0434\u043B\u044F \u0435\u0433\u043E \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F (\u044D\u0442\u0438 \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u043D\u0435\u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u044B \u043A \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443). \u041F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435: \u0442\u0430\u0431\u043B\u0438\u0446\u044B, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0435 \u0432 \u044D\u0442\u0438\u0445 \u0444\u0430\u0439\u043B\u0430\u0445, \u0434\u043E\u043B\u0436\u043D\u044B \u0438\u043C\u0435\u0442\u044C \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u044B\u0435 \u0438 \u043A\u043E\u043D\u0435\u0447\u043D\u044B\u0435 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u044B | \u0434\u043B\u044F \u043A\u0430\u0436\u0434\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438."},"skip-words-with-multiple-capitals":{name:"\u041F\u0440\u043E\u043F\u0443\u0441\u043A\u0430\u0442\u044C \u0441\u043B\u043E\u0432\u0430 \u0441 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u043C\u0438 \u0437\u0430\u0433\u043B\u0430\u0432\u043D\u044B\u043C\u0438 \u0431\u0443\u043A\u0432\u0430\u043C\u0438",description:"\u041F\u0440\u043E\u043F\u0443\u0441\u0442\u0438\u0442 \u0432\u0441\u0435 \u0444\u0430\u0439\u043B\u044B, \u0432 \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u0435\u0441\u0442\u044C \u0437\u0430\u0433\u043B\u0430\u0432\u043D\u0430\u044F \u0431\u0443\u043A\u0432\u0430, \u043A\u0440\u043E\u043C\u0435 \u043F\u0435\u0440\u0432\u043E\u0439 \u0431\u0443\u043A\u0432\u044B \u0441\u043B\u043E\u0432\u0430. \u0410\u043A\u0440\u043E\u043D\u0438\u043C\u044B \u0438 \u043D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u043B\u043E\u0432\u0430 \u043C\u043E\u0433\u0443\u0442 \u0432\u044B\u0438\u0433\u0440\u0430\u0442\u044C \u043E\u0442 \u044D\u0442\u043E\u0433\u043E. \u042D\u0442\u043E \u043C\u043E\u0436\u0435\u0442 \u0432\u044B\u0437\u0432\u0430\u0442\u044C \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u044B \u0441 \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u044B\u043C \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u043C \u0438\u043C\u0435\u043D \u0441\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0445."},"default-install":"\u0412\u044B \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0435 \u0444\u0443\u043D\u043A\u0446\u0438\u044E \u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0438\u0441\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0440\u0430\u0441\u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0435\u043D\u043D\u044B\u0445 \u043E\u0448\u0438\u0431\u043E\u043A. \u0414\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u044B \u043E\u0440\u0444\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u043E\u0448\u0438\u0431\u043A\u0438 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E. \u042D\u0442\u043E \u0434\u043E\u043B\u0436\u043D\u043E \u043F\u0440\u043E\u0438\u0437\u043E\u0439\u0442\u0438 \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0434\u0438\u043D \u0440\u0430\u0437. \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u043E\u0434\u043E\u0436\u0434\u0438\u0442\u0435...","default-install-failed":"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C {URL}. \u041E\u0442\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u0430\u0432\u0442\u043E\u043A\u043E\u0440\u0440\u0435\u043A\u0446\u0438\u0438 \u0440\u0430\u0441\u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0435\u043D\u043D\u044B\u0445 \u043E\u0440\u0444\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u043E\u0448\u0438\u0431\u043E\u043A.","defaults-missing":"\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043D\u0430\u0439\u0442\u0438 \u0444\u0430\u0439\u043B \u0430\u0432\u0442\u043E\u043A\u043E\u0440\u0440\u0435\u043A\u0446\u0438\u0438 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E: {FILE}."},"add-blank-line-after-yaml":{name:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043F\u0443\u0441\u0442\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443 \u043F\u043E\u0441\u043B\u0435 YAML",description:"\u0414\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 \u043F\u0443\u0441\u0442\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443 \u043F\u043E\u0441\u043B\u0435 \u0431\u043B\u043E\u043A\u0430 YAML, \u0435\u0441\u043B\u0438 \u043E\u043D \u043D\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0442\u0435\u043A\u0443\u0449\u0438\u0439 \u0444\u0430\u0439\u043B \u0438\u043B\u0438 \u0437\u0430 \u043D\u0438\u043C \u0435\u0449\u0435 \u043D\u0435 \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u0445\u043E\u0442\u044F \u0431\u044B \u043E\u0434\u043D\u0430 \u043F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430."},"add-blockquote-indentation-on-paste":{name:"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043E\u0442\u0441\u0442\u0443\u043F \u0446\u0438\u0442\u0430\u0442\u044B \u043F\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043A\u0435",description:"\u0414\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 \u0446\u0438\u0442\u0430\u0442\u044B \u043A\u043E \u0432\u0441\u0435\u043C \u0441\u0442\u0440\u043E\u043A\u0430\u043C, \u043A\u0440\u043E\u043C\u0435 \u043F\u0435\u0440\u0432\u043E\u0439, \u043A\u043E\u0433\u0434\u0430 \u043A\u0443\u0440\u0441\u043E\u0440 \u043D\u0430\u0445\u043E\u0434\u0438\u0442\u0441\u044F \u0432 \u0441\u0442\u0440\u043E\u043A\u0435 \u0446\u0438\u0442\u0430\u0442\u044B/\u0432\u044B\u043D\u043E\u0441\u043A\u0438 \u0432\u043E \u0432\u0440\u0435\u043C\u044F \u0432\u0441\u0442\u0430\u0432\u043A\u0438"},"blockquote-style":{name:"\u0421\u0442\u0438\u043B\u044C \u0446\u0438\u0442\u0430\u0442\u044B",description:"\u041E\u0431\u0435\u0441\u043F\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0435\u0434\u0438\u043D\u043E\u043E\u0431\u0440\u0430\u0437\u0438\u0435 \u0441\u0442\u0438\u043B\u044F \u0446\u0438\u0442\u0430\u0442.",style:{name:"\u0421\u0442\u0438\u043B\u044C",description:"\u0421\u0442\u0438\u043B\u044C, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0439 \u043D\u0430 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u0430\u0445 \u0446\u0438\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F"}},"capitalize-headings":{name:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0438 \u0441 \u0431\u043E\u043B\u044C\u0448\u043E\u0439 \u0431\u0443\u043A\u0432\u044B",description:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0438 \u0434\u043E\u043B\u0436\u043D\u044B \u0431\u044B\u0442\u044C \u043E\u0442\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u044B \u0441 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u043C \u0437\u0430\u0433\u043B\u0430\u0432\u043D\u044B\u0445 \u0431\u0443\u043A\u0432",style:{name:"\u0421\u0442\u0438\u043B\u044C",description:"\u0421\u0442\u0438\u043B\u044C \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0437\u0430\u0433\u043B\u0430\u0432\u043D\u044B\u0445 \u0431\u0443\u043A\u0432"},"ignore-case-words":{name:"\u0418\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043B\u043E\u0432\u0430 \u0441 \u0437\u0430\u0433\u043B\u0430\u0432\u043D\u043E\u0439 \u0431\u0443\u043A\u0432\u044B",description:"\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u0442\u0438\u043B\u044C \u0437\u0430\u0433\u043B\u0430\u0432\u043D\u044B\u0445 \u0431\u0443\u043A\u0432 \u0442\u043E\u043B\u044C\u043A\u043E \u043A \u0441\u043B\u043E\u0432\u0430\u043C, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043F\u043E\u043B\u043D\u043E\u0441\u0442\u044C\u044E \u043D\u0430\u043F\u0438\u0441\u0430\u043D\u044B \u0441\u0442\u0440\u043E\u0447\u043D\u044B\u043C\u0438 \u0431\u0443\u043A\u0432\u0430\u043C\u0438"},"ignore-words":{name:"\u0418\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043B\u043E\u0432\u0430",description:"\u0421\u043F\u0438\u0441\u043E\u043A \u0441\u043B\u043E\u0432, \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0445 \u0437\u0430\u043F\u044F\u0442\u044B\u043C\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043F\u0440\u0438 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0438 \u0437\u0430\u0433\u043B\u0430\u0432\u043D\u044B\u0445 \u0431\u0443\u043A\u0432"},"lowercase-words":{name:"\u0421\u043B\u043E\u0432\u0430 \u0432 \u043D\u0438\u0436\u043D\u0435\u043C \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435",description:"\u0421\u043F\u0438\u0441\u043E\u043A \u0441\u043B\u043E\u0432, \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0445 \u0437\u0430\u043F\u044F\u0442\u044B\u043C\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0431\u0443\u0434\u0443\u0442 \u043E\u0441\u0442\u0430\u0432\u0430\u0442\u044C\u0441\u044F \u0432 \u043D\u0438\u0436\u043D\u0435\u043C \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435"}},"compact-yaml":{name:"\u0421\u0436\u0430\u0442\u044B\u0439 YAML",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u044B\u0435 \u0438 \u043A\u043E\u043D\u0435\u0447\u043D\u044B\u0435 \u043F\u0443\u0441\u0442\u044B\u0435 \u0441\u0442\u0440\u043E\u043A\u0438 \u0432 \u0431\u043B\u043E\u043A\u0435 YAML.","inner-new-lines":{name:"\u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0438\u0435 \u043D\u043E\u0432\u044B\u0435 \u0441\u0442\u0440\u043E\u043A\u0438",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u043D\u043E\u0432\u044B\u0435 \u0441\u0442\u0440\u043E\u043A\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043D\u0435 \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0432 \u043D\u0430\u0447\u0430\u043B\u0435 \u0438\u043B\u0438 \u0432 \u043A\u043E\u043D\u0446\u0435 YAML"}},"consecutive-blank-lines":{name:"\u041F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043F\u0443\u0441\u0442\u044B\u0435 \u0441\u0442\u0440\u043E\u043A\u0438",description:"\u0414\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043D\u0435 \u0431\u043E\u043B\u0435\u0435 \u043E\u0434\u043D\u043E\u0439 \u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0439 \u043F\u0443\u0441\u0442\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438."},"convert-bullet-list-markers":{name:"\u041F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u0442\u044C \u043C\u0430\u0440\u043A\u0435\u0440\u044B \u0441\u043F\u0438\u0441\u043A\u0430",description:"\u041F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043E\u0431\u0449\u0438\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043C\u0430\u0440\u043A\u0435\u0440\u043E\u0432 \u0441\u043F\u0438\u0441\u043A\u0430 \u0432 \u043C\u0430\u0440\u043A\u0435\u0440\u044B markdown."},"convert-spaces-to-tabs":{name:"\u041F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u0442\u044C \u043F\u0440\u043E\u0431\u0435\u043B\u044B \u0432 \u0442\u0430\u0431\u044B",description:"\u041F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u044B\u0435 \u043F\u0440\u043E\u0431\u0435\u043B\u044B \u0432 \u0442\u0430\u0431\u044B.",tabsize:{name:"\u0420\u0430\u0437\u043C\u0435\u0440 \u0442\u0430\u0431\u0430",description:"\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u0432, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0431\u0443\u0434\u0443\u0442 \u043F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u044B \u0432 \u0442\u0430\u0431\u044B"}},"dedupe-yaml-array-values":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0434\u0443\u0431\u043B\u0438\u043A\u0430\u0442\u044B \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 \u043C\u0430\u0441\u0441\u0438\u0432\u0430 YAML",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u0434\u0443\u0431\u043B\u0438\u043A\u0430\u0442\u044B \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 \u043C\u0430\u0441\u0441\u0438\u0432\u0430 YAML \u0432 \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u043C \u043A \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443.","dedupe-alias-key":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0434\u0443\u0431\u043B\u0438\u043A\u0430\u0442\u044B \u0441\u0435\u043A\u0446\u0438\u0438 YAML aliases",description:"\u0412\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0434\u0443\u0431\u043B\u0438\u043A\u0430\u0442\u043E\u0432 \u043F\u0441\u0435\u0432\u0434\u043E\u043D\u0438\u043C\u043E\u0432."},"dedupe-tag-key":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0434\u0443\u0431\u043B\u0438\u043A\u0430\u0442\u044B \u0441\u0435\u043A\u0446\u0438\u0438 YAML tags",description:"\u0412\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0434\u0443\u0431\u043B\u0438\u043A\u0430\u0442\u043E\u0432 \u0442\u0435\u0433\u043E\u0432."},"dedupe-array-keys":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0434\u0443\u0431\u043B\u0438\u043A\u0430\u0442\u044B \u0441\u0435\u043A\u0446\u0438\u0438 YAML \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u0432",description:"\u0412\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0434\u0443\u0431\u043B\u0438\u043A\u0430\u0442\u043E\u0432 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 \u0434\u043B\u044F \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u044B\u0445 \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u0432 YAML"},"ignore-keys":{name:"YAML \u043A\u043B\u044E\u0447\u0438 \u0434\u043B\u044F \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F",description:"\u0421\u043F\u0438\u0441\u043E\u043A YAML \u043A\u043B\u044E\u0447\u0435\u0439 \u0431\u0435\u0437 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044E\u0449\u0435\u0433\u043E \u0434\u0432\u043E\u0435\u0442\u043E\u0447\u0438\u044F \u043D\u0430 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u044B\u0445 \u0441\u0442\u0440\u043E\u043A\u0430\u0445, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043D\u0435 \u043F\u0440\u0435\u0434\u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u044B \u0434\u043B\u044F \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0434\u0443\u0431\u043B\u0438\u043A\u0430\u0442\u043E\u0432 \u0438\u0437 \u043D\u0438\u0445."}},"default-language-for-code-fences":{name:"\u042F\u0437\u044B\u043A \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0434\u043B\u044F \u0431\u043B\u043E\u043A\u043E\u0432 \u043A\u043E\u0434\u0430",description:"\u0414\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442 \u044F\u0437\u044B\u043A \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0434\u043B\u044F \u0431\u043B\u043E\u043A\u043E\u0432 \u043A\u043E\u0434\u0430, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043D\u0435 \u0438\u043C\u0435\u044E\u0442 \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u043E\u0433\u043E \u044F\u0437\u044B\u043A\u0430.","default-language":{name:"\u042F\u0437\u044B\u043A \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F",description:'\u041E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043F\u0443\u0441\u0442\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u0434\u0435\u043B\u0430\u0442\u044C. \u042F\u0437\u044B\u043A\u0438 \u0442\u0435\u0433\u043E\u0432 \u043C\u043E\u0436\u043D\u043E \u043D\u0430\u0439\u0442\u0438 \u0437\u0434\u0435\u0441\u044C.'}},"emphasis-style":{name:"\u0421\u0442\u0438\u043B\u044C \u0430\u043A\u0446\u0435\u043D\u0442\u0430",description:"\u0413\u0430\u0440\u0430\u043D\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043E \u0441\u0442\u0438\u043B\u044C \u0430\u043A\u0446\u0435\u043D\u0442\u0430 \u0441\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D.",style:{name:"\u0421\u0442\u0438\u043B\u044C",description:"\u0421\u0442\u0438\u043B\u044C, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0439 \u0434\u043B\u044F \u043E\u0431\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0430\u043A\u0446\u0435\u043D\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0433\u043E"}},"empty-line-around-blockquotes":{name:"\u041F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u0432\u043E\u043A\u0440\u0443\u0433 \u0446\u0438\u0442\u0430\u0442",description:"\u0413\u0430\u0440\u0430\u043D\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043E \u0435\u0441\u0442\u044C \u043F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u0432\u043E\u043A\u0440\u0443\u0433 \u0446\u0438\u0442\u0430\u0442, \u0435\u0441\u043B\u0438 \u043E\u043D\u0438 \u043D\u0435 \u043D\u0430\u0447\u0438\u043D\u0430\u044E\u0442\u0441\u044F \u0438\u043B\u0438 \u043D\u0435 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u044E\u0442\u0441\u044F \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u043C. \u041F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435: \u043F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u2014 \u044D\u0442\u043E \u043B\u0438\u0431\u043E \u043E\u0434\u0438\u043D \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E\u0441\u0442\u0438 \u0434\u043B\u044F \u0446\u0438\u0442\u0430\u0442, \u043B\u0438\u0431\u043E \u0441\u0438\u043C\u0432\u043E\u043B \u043D\u043E\u0432\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438."},"empty-line-around-code-fences":{name:"\u041F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u0432\u043E\u043A\u0440\u0443\u0433 \u0431\u043B\u043E\u043A\u043E\u0432 \u043A\u043E\u0434\u0430",description:"\u0413\u0430\u0440\u0430\u043D\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043E \u0435\u0441\u0442\u044C \u043F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u0432\u043E\u043A\u0440\u0443\u0433 \u0431\u043B\u043E\u043A\u043E\u0432 \u043A\u043E\u0434\u0430, \u0435\u0441\u043B\u0438 \u043E\u043D\u0438 \u043D\u0435 \u043D\u0430\u0447\u0438\u043D\u0430\u044E\u0442\u0441\u044F \u0438\u043B\u0438 \u043D\u0435 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u044E\u0442\u0441\u044F \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u043C."},"empty-line-around-math-blocks":{name:"\u041F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u0432\u043E\u043A\u0440\u0443\u0433 \u043C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u0431\u043B\u043E\u043A\u043E\u0432",description:"\u0413\u0430\u0440\u0430\u043D\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043E \u0435\u0441\u0442\u044C \u043F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u0432\u043E\u043A\u0440\u0443\u0433 \u043C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u0431\u043B\u043E\u043A\u043E\u0432, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044F \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0437\u043D\u0430\u043A\u043E\u0432 \u0434\u043E\u043B\u043B\u0430\u0440\u0430 \u0434\u043B\u044F \u043E\u0431\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u043C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u0431\u043B\u043E\u043A\u0430 \u0434\u043B\u044F \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u043D\u0430\u043A\u043E\u0432 \u0434\u043E\u043B\u043B\u0430\u0440\u0430, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u044E\u0442 \u043D\u0430 \u043C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0431\u043B\u043E\u043A \u0434\u043B\u044F \u043E\u0434\u043D\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438."},"empty-line-around-tables":{name:"\u041F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u0432\u043E\u043A\u0440\u0443\u0433 \u0442\u0430\u0431\u043B\u0438\u0446",description:"\u0413\u0430\u0440\u0430\u043D\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043E \u0435\u0441\u0442\u044C \u043F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u0432\u043E\u043A\u0440\u0443\u0433 (github flavored) \u0442\u0430\u0431\u043B\u0438\u0446, \u0435\u0441\u043B\u0438 \u043E\u043D\u0438 \u043D\u0435 \u043D\u0430\u0447\u0438\u043D\u0430\u044E\u0442\u0441\u044F \u0438\u043B\u0438 \u043D\u0435 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u044E\u0442\u0441\u044F \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u043C."},"escape-yaml-special-characters":{name:"\u042D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B YAML",description:`\u042D\u043A\u0440\u0430\u043D\u0438\u0440\u0443\u0435\u0442 \u0434\u0432\u043E\u0435\u0442\u043E\u0447\u0438\u044F \u0441 \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u043C \u043F\u043E\u0441\u043B\u0435 \u043D\u0438\u0445 (: ), \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u044B\u0435 \u043A\u0430\u0432\u044B\u0447\u043A\u0438 ('), \u0438 \u0434\u0432\u043E\u0439\u043D\u044B\u0435 \u043A\u0430\u0432\u044B\u0447\u043A\u0438 (") \u0432 YAML.`,"try-to-escape-single-line-arrays":{name:"\u041F\u043E\u043F\u044B\u0442\u0430\u0442\u044C\u0441\u044F \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043E\u0434\u043D\u043E\u043C\u0435\u0440\u043D\u044B\u0435 \u043C\u0430\u0441\u0441\u0438\u0432\u044B",description:'\u041F\u044B\u0442\u0430\u0435\u0442\u0441\u044F \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u0432, \u043F\u0440\u0435\u0434\u043F\u043E\u043B\u0430\u0433\u0430\u044F, \u0447\u0442\u043E \u043C\u0430\u0441\u0441\u0438\u0432 \u043D\u0430\u0447\u0438\u043D\u0430\u0435\u0442\u0441\u044F \u0441 "[", \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F "]", \u0438 \u0438\u043C\u0435\u0435\u0442 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B, \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0435 ",".'}},"file-name-heading":{name:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0444\u0430\u0439\u043B\u0430",description:"\u0412\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u0438\u043C\u044F \u0444\u0430\u0439\u043B\u0430 \u043A\u0430\u043A \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A H1, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430 H1."},"footnote-after-punctuation":{name:"\u0421\u043D\u043E\u0441\u043A\u0430 \u043F\u043E\u0441\u043B\u0435 \u0437\u043D\u0430\u043A\u0430 \u043F\u0440\u0435\u043F\u0438\u043D\u0430\u043D\u0438\u044F",description:"\u0413\u0430\u0440\u0430\u043D\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043E \u0441\u043D\u043E\u0441\u043A\u0438 \u0441\u0441\u044B\u043B\u043E\u043A \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u044B \u043F\u043E\u0441\u043B\u0435 \u0437\u043D\u0430\u043A\u0430 \u043F\u0440\u0435\u043F\u0438\u043D\u0430\u043D\u0438\u044F, \u0430 \u043D\u0435 \u043F\u0435\u0440\u0435\u0434 \u043D\u0438\u043C."},"force-yaml-escape":{name:"\u041F\u0440\u0438\u043D\u0443\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 YAML",description:"\u042D\u043A\u0440\u0430\u043D\u0438\u0440\u0443\u0435\u0442 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u044B\u0445 \u043A\u043B\u044E\u0447\u0435\u0439 YAML.","force-yaml-escape-keys":{name:"\u041F\u0440\u0438\u043D\u0443\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 YAML \u043D\u0430 \u043A\u043B\u044E\u0447\u0430\u0445",description:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442 \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u0443\u044E\u0449\u0438\u0439 \u0441\u0438\u043C\u0432\u043E\u043B YAML \u043D\u0430 \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u044B\u0445 \u043A\u043B\u044E\u0447\u0430\u0445 YAML, \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u043C \u043D\u043E\u0432\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438, \u0435\u0441\u043B\u0438 \u043E\u043D \u0435\u0449\u0435 \u043D\u0435 \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D. \u041D\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u043D\u0430 \u043C\u0430\u0441\u0441\u0438\u0432\u0430\u0445 YAML."}},"format-tags-in-yaml":{name:"\u0424\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0442\u0435\u0433\u043E\u0432 \u0432 YAML",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u0445\u044D\u0448-\u0442\u0435\u0433\u0438 \u0438\u0437 \u0442\u0435\u0433\u043E\u0432 \u0432 YAML frontmatter, \u0442\u0430\u043A \u043A\u0430\u043A \u043E\u043D\u0438 \u0434\u0435\u043B\u0430\u044E\u0442 \u0442\u0435\u0433\u0438 \u0442\u0430\u043C \u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u043C\u0438."},"format-yaml-array":{name:"\u0424\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043C\u0430\u0441\u0441\u0438\u0432\u0430 YAML",description:"\u041F\u043E\u0437\u0432\u043E\u043B\u044F\u0435\u0442 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u044B\u0435 \u043C\u0430\u0441\u0441\u0438\u0432\u044B YAML \u043A\u0430\u043A \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0435, \u0442\u0430\u043A \u0438 \u043E\u0434\u043D\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0435, \u0438 \u0442\u0435\u0433\u0438 \u0438 \u043F\u0441\u0435\u0432\u0434\u043E\u043D\u0438\u043C\u044B \u043C\u043E\u0433\u0443\u0442 \u0438\u043C\u0435\u0442\u044C \u043D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0441\u043F\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u0434\u043B\u044F Obsidian YAML \u0444\u043E\u0440\u043C\u0430\u0442\u044B. \u041F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435: \u043E\u0434\u043D\u0430 \u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u043E\u0434\u043D\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0439 \u043C\u0430\u0441\u0441\u0438\u0432 \u043F\u0435\u0440\u0435\u0445\u043E\u0434\u0438\u0442, \u0435\u0441\u043B\u0438 \u043F\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043E\u043B\u0435\u0435 \u043E\u0434\u043D\u043E\u0433\u043E \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430. \u0422\u043E \u0436\u0435 \u0441\u0430\u043C\u043E\u0435 \u0432\u0435\u0440\u043D\u043E \u0434\u043B\u044F \u043E\u0434\u043D\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438 \u0432 \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0439 \u043C\u0430\u0441\u0441\u0438\u0432, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0441\u044F \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u043C \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u043C.","alias-key":{name:"\u0424\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0435\u043A\u0446\u0438\u044E YAML \u043F\u0441\u0435\u0432\u0434\u043E\u043D\u0438\u043C\u043E\u0432",description:"\u0412\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0434\u043B\u044F \u0441\u0435\u043A\u0446\u0438\u0438 YAML \u043F\u0441\u0435\u0432\u0434\u043E\u043D\u0438\u043C\u043E\u0432. \u041D\u0435 \u0432\u043A\u043B\u044E\u0447\u0430\u0439\u0442\u0435 \u044D\u0442\u0443 \u043E\u043F\u0446\u0438\u044E \u043E\u0434\u043D\u043E\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E \u0441 \u043F\u0440\u0430\u0432\u0438\u043B\u043E\u043C YAML Title Alias, \u0442\u0430\u043A \u043A\u0430\u043A \u043E\u043D\u0438 \u043C\u043E\u0433\u0443\u0442 \u043D\u0435 \u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u0445\u043E\u0440\u043E\u0448\u043E \u0432\u043C\u0435\u0441\u0442\u0435 \u0438\u043B\u0438 \u043C\u043E\u0433\u0443\u0442 \u0438\u043C\u0435\u0442\u044C \u0440\u0430\u0437\u043D\u044B\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0435 \u0444\u043E\u0440\u043C\u0430\u0442\u044B, \u0447\u0442\u043E \u043F\u0440\u0438\u0432\u043E\u0434\u0438\u0442 \u043A \u043D\u0435\u043E\u0436\u0438\u0434\u0430\u043D\u043D\u044B\u043C \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0430\u043C."},"tag-key":{name:"\u0424\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0435\u043A\u0446\u0438\u044E YAML \u0442\u0435\u0433\u043E\u0432",description:"\u0412\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0434\u043B\u044F \u0441\u0435\u043A\u0446\u0438\u0438 YAML \u0442\u0435\u0433\u043E\u0432."},"default-array-style":{name:"\u0421\u0442\u0438\u043B\u044C \u0441\u0435\u043A\u0446\u0438\u0438 YAML \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u0432 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E",description:"\u0421\u0442\u0438\u043B\u044C \u0434\u0440\u0443\u0433\u0438\u0445 YAML \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u0432, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043D\u0435 \u044F\u0432\u043B\u044F\u044E\u0442\u0441\u044F \u0442\u0435\u0433\u0430\u043C\u0438, \u043F\u0441\u0435\u0432\u0434\u043E\u043D\u0438\u043C\u0430\u043C\u0438 \u0438\u043B\u0438 \u0432 \u041F\u0440\u0438\u043D\u0443\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043A\u043B\u044E\u0447\u0435\u0439 \u0432 \u043E\u0434\u043D\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0435 \u043C\u0430\u0441\u0441\u0438\u0432\u044B \u0438 \u041F\u0440\u0438\u043D\u0443\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043A\u043B\u044E\u0447\u0435\u0439 \u0432 \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0435 \u043C\u0430\u0441\u0441\u0438\u0432\u044B"},"default-array-keys":{name:"\u0424\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0435\u043A\u0446\u0438\u0438 YAML \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u0432",description:"\u0412\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0434\u043B\u044F \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u044B\u0445 YAML \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u0432"},"force-single-line-array-style":{name:"\u041F\u0440\u0438\u043D\u0443\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043A\u043B\u044E\u0447\u0435\u0439 \u0432 \u043E\u0434\u043D\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0435 \u043C\u0430\u0441\u0441\u0438\u0432\u044B",description:"\u041F\u0440\u0438\u043D\u0443\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 YAML \u043C\u0430\u0441\u0441\u0438\u0432\u0430 \u0434\u043B\u044F \u043A\u043B\u044E\u0447\u0435\u0439, \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0445 \u043D\u043E\u0432\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u043E\u0439, \u0432 \u043E\u0434\u043D\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435 (\u043E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043F\u0443\u0441\u0442\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u044D\u0442\u0443 \u043E\u043F\u0446\u0438\u044E)"},"force-multi-line-array-style":{name:"\u041F\u0440\u0438\u043D\u0443\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043A\u043B\u044E\u0447\u0435\u0439 \u0432 \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0435 \u043C\u0430\u0441\u0441\u0438\u0432\u044B",description:"\u041F\u0440\u0438\u043D\u0443\u0434\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 YAML \u043C\u0430\u0441\u0441\u0438\u0432\u0430 \u0434\u043B\u044F \u043A\u043B\u044E\u0447\u0435\u0439, \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0445 \u043D\u043E\u0432\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u043E\u0439, \u0432 \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u043E\u043C \u0444\u043E\u0440\u043C\u0430\u0442\u0435 (\u043E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043F\u0443\u0441\u0442\u044B\u043C, \u0447\u0442\u043E\u0431\u044B \u043E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u044D\u0442\u0443 \u043E\u043F\u0446\u0438\u044E)"}},"header-increment":{name:"\u0418\u043D\u043A\u0440\u0435\u043C\u0435\u043D\u0442 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u0432",description:"\u0423\u0440\u043E\u0432\u043D\u0438 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u0432 \u0434\u043E\u043B\u0436\u043D\u044B \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043D\u0430 \u043E\u0434\u0438\u043D \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u0437\u0430 \u0440\u0430\u0437","start-at-h2":{name:"\u041D\u0430\u0447\u0430\u0442\u044C \u0438\u043D\u043A\u0440\u0435\u043C\u0435\u043D\u0442 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u0432 \u0441 \u0443\u0440\u043E\u0432\u043D\u044F 2",description:"\u0414\u0435\u043B\u0430\u0435\u0442 \u0443\u0440\u043E\u0432\u0435\u043D\u044C \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430 2 \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u043C \u0443\u0440\u043E\u0432\u043D\u0435\u043C \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430 \u0432 \u0444\u0430\u0439\u043B\u0435 \u0434\u043B\u044F \u0438\u043D\u043A\u0440\u0435\u043C\u0435\u043D\u0442\u0430 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u0432 \u0438 \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442 \u0432\u0441\u0435 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0438 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043D\u043D\u043E, \u0447\u0442\u043E\u0431\u044B \u043E\u043D\u0438 \u043D\u0430\u0447\u0438\u043D\u0430\u043B\u0438\u0441\u044C \u0441 \u0443\u0440\u043E\u0432\u043D\u044F 2 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430."}},"heading-blank-lines":{name:"\u041F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u0432\u043E\u043A\u0440\u0443\u0433 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u0432",description:"\u0412\u0441\u0435 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0438 \u0438\u043C\u0435\u044E\u0442 \u043E\u0434\u043D\u0443 \u043F\u0443\u0441\u0442\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443 \u0434\u043E \u0438 \u043F\u043E\u0441\u043B\u0435 (\u0437\u0430 \u0438\u0441\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435\u043C \u0441\u043B\u0443\u0447\u0430\u0435\u0432, \u043A\u043E\u0433\u0434\u0430 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u043D\u0430\u0445\u043E\u0434\u0438\u0442\u0441\u044F \u0432 \u043D\u0430\u0447\u0430\u043B\u0435 \u0438\u043B\u0438 \u0432 \u043A\u043E\u043D\u0446\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430).",bottom:{name:"\u041D\u0438\u0436\u043D\u0438\u0439",description:"\u0413\u0430\u0440\u0430\u043D\u0442\u0438\u0440\u0443\u0435\u0442 \u043E\u0434\u043D\u0443 \u043F\u0443\u0441\u0442\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443 \u043F\u043E\u0441\u043B\u0435 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u0432"},"empty-line-after-yaml":{name:"\u041F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u043C\u0435\u0436\u0434\u0443 YAML \u0438 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u043C",description:"\u041E\u0441\u0442\u0430\u0432\u044C\u0442\u0435 \u043F\u0443\u0441\u0442\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443 \u043C\u0435\u0436\u0434\u0443 YAML frontmatter \u0438 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u043C"}},"headings-start-line":{name:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0438 \u043D\u0430\u0447\u0438\u043D\u0430\u044E\u0442\u0441\u044F \u0441 \u043D\u043E\u0432\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438",description:"\u0423 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u0432, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043D\u0435 \u043D\u0430\u0447\u0438\u043D\u0430\u044E\u0442 \u0441\u0442\u0440\u043E\u043A\u0443, \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043B\u0435\u043D\u044B \u043F\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0443\u044E\u0449\u0438\u0435 \u0438\u043C \u043F\u0440\u043E\u0431\u0435\u043B\u044B, \u0447\u0442\u043E\u0431\u044B \u043E\u043D\u0438 \u0431\u044B\u043B\u0438 \u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u043D\u044B \u043A\u0430\u043A \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0438."},"insert-yaml-attributes":{name:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044C YAML \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B",description:"\u0412\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u044B\u0435 YAML \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044B \u0432 YAML frontmatter. \u041F\u043E\u043C\u0435\u0441\u0442\u0438\u0442\u0435 \u043A\u0430\u0436\u0434\u044B\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u043D\u0430 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443.","text-to-insert":{name:"\u0422\u0435\u043A\u0441\u0442 \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043A\u0438",description:"\u0422\u0435\u043A\u0441\u0442 \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043A\u0438 \u0432 YAML frontmatter"}},"line-break-at-document-end":{name:"\u0420\u0430\u0437\u0440\u044B\u0432 \u0441\u0442\u0440\u043E\u043A\u0438 \u0432 \u043A\u043E\u043D\u0446\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430",description:"\u0413\u0430\u0440\u0430\u043D\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043E \u0432 \u043A\u043E\u043D\u0446\u0435 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0435\u0441\u0442\u044C \u0440\u043E\u0432\u043D\u043E \u043E\u0434\u043D\u0430 \u043F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430."},"move-footnotes-to-the-bottom":{name:"\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0441\u043D\u043E\u0441\u043A\u0438 \u0432\u043D\u0438\u0437",description:"\u041F\u0435\u0440\u0435\u043C\u0435\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u0441\u043D\u043E\u0441\u043A\u0438 \u0432\u043D\u0438\u0437 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0438 \u0433\u0430\u0440\u0430\u043D\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043E \u043E\u043D\u0438 \u0441\u043E\u0440\u0442\u0438\u0440\u0443\u044E\u0442\u0441\u044F \u0432 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043F\u043E\u0440\u044F\u0434\u043A\u043E\u043C, \u0432 \u043A\u043E\u0442\u043E\u0440\u043E\u043C \u043E\u043D\u0438 \u0443\u043F\u043E\u043C\u0438\u043D\u0430\u044E\u0442\u0441\u044F \u0432 \u0442\u0435\u043B\u0435 \u0444\u0430\u0439\u043B\u0430."},"move-math-block-indicators-to-their-own-line":{name:"\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u044B \u043C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u0431\u043B\u043E\u043A\u043E\u0432 \u0432 \u0441\u0432\u043E\u044E \u0441\u0442\u0440\u043E\u043A\u0443",description:"\u041F\u0435\u0440\u0435\u043C\u0435\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u044B\u0435 \u0438 \u043A\u043E\u043D\u0435\u0447\u043D\u044B\u0435 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u044B \u043C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u0431\u043B\u043E\u043A\u043E\u0432 \u043D\u0430 \u0441\u0432\u043E\u0438 \u0441\u0442\u0440\u043E\u043A\u0438, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044F \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0437\u043D\u0430\u043A\u043E\u0432 \u0434\u043E\u043B\u043B\u0430\u0440\u0430 \u0434\u043B\u044F \u043E\u0431\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u043C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043E \u0431\u043B\u043E\u043A\u0430 \u0434\u043B\u044F \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u043D\u0430\u043A\u043E\u0432 \u0434\u043E\u043B\u043B\u0430\u0440\u0430, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u044E\u0442 \u043D\u0430 \u043C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u0431\u043B\u043E\u043A \u0434\u043B\u044F \u043E\u0434\u043D\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438."},"move-tags-to-yaml":{name:"\u041F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C \u0442\u0435\u0433\u0438 \u0432 YAML",description:"\u041F\u0435\u0440\u0435\u043C\u0435\u0449\u0430\u0435\u0442 \u0432\u0441\u0435 \u0442\u0435\u0433\u0438 \u0432 YAML frontmatter \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430.","how-to-handle-existing-tags":{name:"\u041E\u043F\u0435\u0440\u0430\u0446\u0438\u044F \u0442\u0435\u0433\u0430 \u0432 \u0442\u0435\u043B\u0435 \u0444\u0430\u0439\u043B\u0430",description:"\u0427\u0442\u043E \u0434\u0435\u043B\u0430\u0442\u044C \u0441 \u043D\u0435\u0438\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u043C\u044B\u043C\u0438 \u0442\u0435\u0433\u0430\u043C\u0438 \u0432 \u0442\u0435\u043B\u0435 \u0444\u0430\u0439\u043B\u0430 \u043F\u043E\u0441\u043B\u0435 \u0438\u0445 \u043F\u0435\u0440\u0435\u043C\u0435\u0449\u0435\u043D\u0438\u044F \u0432 frontmatter"},"tags-to-ignore":{name:"\u0422\u0435\u0433\u0438 \u0434\u043B\u044F \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F",description:"\u0422\u0435\u0433\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043D\u0435 \u0431\u0443\u0434\u0443\u0442 \u043F\u0435\u0440\u0435\u043C\u0435\u0449\u0435\u043D\u044B \u0432 \u043C\u0430\u0441\u0441\u0438\u0432 \u0442\u0435\u0433\u043E\u0432 \u0438\u043B\u0438 \u0443\u0434\u0430\u043B\u0435\u043D\u044B \u0438\u0437 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0433\u043E \u0442\u0435\u043B\u0430 \u0444\u0430\u0439\u043B\u0430, \u0435\u0441\u043B\u0438 \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0445\u044D\u0448-\u0442\u0435\u0433 \u0438\u0437 \u0442\u0435\u0433\u043E\u0432 \u0432 \u0442\u0435\u043B\u0435 \u0444\u0430\u0439\u043B\u0430 \u0432\u043A\u043B\u044E\u0447\u0435\u043D. \u041A\u0430\u0436\u0434\u044B\u0439 \u0442\u0435\u0433 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043D\u0430 \u043D\u043E\u0432\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0435 \u0438 \u0431\u0435\u0437 #. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044C, \u0447\u0442\u043E \u043D\u0435 \u0432\u043A\u043B\u044E\u0447\u0430\u0442\u044C \u0445\u044D\u0448-\u0442\u0435\u0433 \u0432 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0442\u0435\u0433\u0430."}},"no-bare-urls":{name:"\u041E\u0431\u0435\u0440\u043D\u0443\u0442\u044C URL",description:"\u041E\u0431\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0433\u043E\u043B\u044B\u0435 URL \u0443\u0433\u043B\u043E\u0432\u044B\u043C\u0438 \u0441\u043A\u043E\u0431\u043A\u0430\u043C\u0438, \u0437\u0430 \u0438\u0441\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435\u043C \u0441\u043B\u0443\u0447\u0430\u0435\u0432, \u043A\u043E\u0433\u0434\u0430 \u043E\u043D\u0438 \u0437\u0430\u043A\u043B\u044E\u0447\u0435\u043D\u044B \u0432 \u043E\u0431\u0440\u0430\u0442\u043D\u044B\u0435 \u043A\u0430\u0432\u044B\u0447\u043A\u0438, \u043A\u0432\u0430\u0434\u0440\u0430\u0442\u043D\u044B\u0435 \u0441\u043A\u043E\u0431\u043A\u0438 \u0438\u043B\u0438 \u043E\u0434\u0438\u043D\u0430\u0440\u043D\u044B\u0435 \u0438\u043B\u0438 \u0434\u0432\u043E\u0439\u043D\u044B\u0435 \u043A\u0430\u0432\u044B\u0447\u043A\u0438.","no-bare-uris":{name:"\u041E\u0431\u0435\u0440\u043D\u0443\u0442\u044C URI",description:"\u041E\u0431\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0433\u043E\u043B\u044B\u0435 URI \u0443\u0433\u043B\u043E\u0432\u044B\u043C\u0438 \u0441\u043A\u043E\u0431\u043A\u0430\u043C\u0438, \u0437\u0430 \u0438\u0441\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435\u043C \u0441\u043B\u0443\u0447\u0430\u0435\u0432, \u043A\u043E\u0433\u0434\u0430 \u043E\u043D\u0438 \u0437\u0430\u043A\u043B\u044E\u0447\u0435\u043D\u044B \u0432 \u043E\u0431\u0440\u0430\u0442\u043D\u044B\u0435 \u043A\u0430\u0432\u044B\u0447\u043A\u0438, \u043A\u0432\u0430\u0434\u0440\u0430\u0442\u043D\u044B\u0435 \u0441\u043A\u043E\u0431\u043A\u0438 \u0438\u043B\u0438 \u043E\u0434\u0438\u043D\u0430\u0440\u043D\u044B\u0435 \u0438\u043B\u0438 \u0434\u0432\u043E\u0439\u043D\u044B\u0435 \u043A\u0430\u0432\u044B\u0447\u043A\u0438."}},"ordered-list-style":{name:"\u0421\u0442\u0438\u043B\u044C \u043D\u0443\u043C\u0435\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u0441\u043F\u0438\u0441\u043A\u0430",description:"\u0413\u0430\u0440\u0430\u043D\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043E \u043D\u0443\u043C\u0435\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0441\u043F\u0438\u0441\u043A\u0438 \u0441\u043B\u0435\u0434\u0443\u044E\u0442 \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u043E\u043C\u0443 \u0441\u0442\u0438\u043B\u044E. \u041F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435: 2 \u043F\u0440\u043E\u0431\u0435\u043B\u0430 \u0438\u043B\u0438 1 \u0442\u0430\u0431\u0443\u043B\u044F\u0446\u0438\u044F \u0441\u0447\u0438\u0442\u0430\u044E\u0442\u0441\u044F \u0443\u0440\u043E\u0432\u043D\u0435\u043C \u043E\u0442\u0441\u0442\u0443\u043F\u0430.","number-style":{name:"\u0421\u0442\u0438\u043B\u044C \u0447\u0438\u0441\u043B\u0430",description:"\u0421\u0442\u0438\u043B\u044C \u0447\u0438\u0441\u043B\u0430, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0439 \u0432 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u0430\u0445 \u043D\u0443\u043C\u0435\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0445 \u0441\u043F\u0438\u0441\u043A\u043E\u0432"},"list-end-style":{name:"\u0421\u0442\u0438\u043B\u044C \u043A\u043E\u043D\u0446\u0430 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u0430 \u043D\u0443\u043C\u0435\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u0441\u043F\u0438\u0441\u043A\u0430",description:"\u041A\u043E\u043D\u0435\u0447\u043D\u044B\u0439 \u0441\u0438\u043C\u0432\u043E\u043B \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u0430 \u043D\u0443\u043C\u0435\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u0441\u043F\u0438\u0441\u043A\u0430"},"preserve-start":{name:"\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E",description:"\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u043B\u0438 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E \u043D\u0443\u043C\u0435\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u0441\u043F\u0438\u0441\u043A\u0430. \u042D\u0442\u043E \u043C\u043E\u0436\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0434\u043B\u044F \u043D\u0443\u043C\u0435\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u0441\u043F\u0438\u0441\u043A\u0430, \u043A\u043E\u0442\u043E\u0440\u044B\u0439 \u0438\u043C\u0435\u0435\u0442 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435 \u043C\u0435\u0436\u0434\u0443 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u043C\u0438 \u043D\u0443\u043C\u0435\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u0441\u043F\u0438\u0441\u043A\u0430."}},"paragraph-blank-lines":{name:"\u041F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u043C\u0435\u0436\u0434\u0443 \u0430\u0431\u0437\u0430\u0446\u0430\u043C\u0438",description:"\u0412\u0441\u0435 \u0430\u0431\u0437\u0430\u0446\u044B \u0434\u043E\u043B\u0436\u043D\u044B \u0438\u043C\u0435\u0442\u044C \u0440\u043E\u0432\u043D\u043E \u043E\u0434\u043D\u0443 \u043F\u0443\u0441\u0442\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443 \u0434\u043E \u0438 \u043F\u043E\u0441\u043B\u0435."},"prevent-double-checklist-indicator-on-paste":{name:"\u041F\u0440\u0435\u0434\u043E\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044C \u0434\u0432\u043E\u0439\u043D\u043E\u0439 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440 \u0447\u0435\u043A-\u043B\u0438\u0441\u0442\u0430 \u043F\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043A\u0435",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u044B\u0439 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440 \u0447\u0435\u043A-\u043B\u0438\u0441\u0442\u0430 \u0438\u0437 \u0442\u0435\u043A\u0441\u0442\u0430 \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043A\u0438, \u0435\u0441\u043B\u0438 \u0441\u0442\u0440\u043E\u043A\u0430, \u043D\u0430 \u043A\u043E\u0442\u043E\u0440\u043E\u0439 \u043D\u0430\u0445\u043E\u0434\u0438\u0442\u0441\u044F \u043A\u0443\u0440\u0441\u043E\u0440 \u0432 \u0444\u0430\u0439\u043B\u0435, \u0438\u043C\u0435\u0435\u0442 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440 \u0447\u0435\u043A-\u043B\u0438\u0441\u0442\u0430"},"prevent-double-list-item-indicator-on-paste":{name:"\u041F\u0440\u0435\u0434\u043E\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044C \u0434\u0432\u043E\u0439\u043D\u043E\u0439 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 \u0441\u043F\u0438\u0441\u043A\u0430 \u043F\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043A\u0435",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u044B\u0439 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440 \u0441\u043F\u0438\u0441\u043A\u0430 \u0438\u0437 \u0442\u0435\u043A\u0441\u0442\u0430 \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043A\u0438, \u0435\u0441\u043B\u0438 \u0441\u0442\u0440\u043E\u043A\u0430, \u043D\u0430 \u043A\u043E\u0442\u043E\u0440\u043E\u0439 \u043D\u0430\u0445\u043E\u0434\u0438\u0442\u0441\u044F \u043A\u0443\u0440\u0441\u043E\u0440 \u0432 \u0444\u0430\u0439\u043B\u0435, \u0438\u043C\u0435\u0435\u0442 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440 \u0441\u043F\u0438\u0441\u043A\u0430"},"proper-ellipsis-on-paste":{name:"\u041F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0430\u044F \u043C\u043D\u043E\u0433\u043E\u0442\u043E\u0447\u0438\u0435 \u043F\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043A\u0435",description:"\u0417\u0430\u043C\u0435\u043D\u044F\u0435\u0442 \u0442\u0440\u0438 \u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0442\u043E\u0447\u043A\u0438 \u043D\u0430 \u043C\u043D\u043E\u0433\u043E\u0442\u043E\u0447\u0438\u0435, \u0434\u0430\u0436\u0435 \u0435\u0441\u043B\u0438 \u043E\u043D\u0438 \u0438\u043C\u0435\u044E\u0442 \u043F\u0440\u043E\u0431\u0435\u043B \u043C\u0435\u0436\u0434\u0443 \u043D\u0438\u043C\u0438 \u0432 \u0442\u0435\u043A\u0441\u0442\u0435 \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043A\u0438"},"proper-ellipsis":{name:"\u041F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0430\u044F \u043C\u043D\u043E\u0433\u043E\u0442\u043E\u0447\u0438\u0435",description:"\u0417\u0430\u043C\u0435\u043D\u044F\u0435\u0442 \u0442\u0440\u0438 \u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0442\u043E\u0447\u043A\u0438 \u043D\u0430 \u043C\u043D\u043E\u0433\u043E\u0442\u043E\u0447\u0438\u0435."},"quote-style":{name:"\u0421\u0442\u0438\u043B\u044C \u043A\u0430\u0432\u044B\u0447\u0435\u043A",description:"\u041E\u0431\u043D\u043E\u0432\u043B\u044F\u0435\u0442 \u043A\u0430\u0432\u044B\u0447\u043A\u0438 \u0432 \u0442\u0435\u043B\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0433\u043E \u0434\u043E \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u043E\u0433\u043E \u0441\u0442\u0438\u043B\u044F \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u044B\u0445 \u0438 \u0434\u0432\u043E\u0439\u043D\u044B\u0445 \u043A\u0430\u0432\u044B\u0447\u0435\u043A.","single-quote-enabled":{name:"\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0421\u0442\u0438\u043B\u044C \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u043E\u0439 \u043A\u0430\u0432\u044B\u0447\u043A\u0438",description:"\u0423\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442, \u0447\u0442\u043E \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u043E\u0439 \u043A\u0430\u0432\u044B\u0447\u043A\u0438."},"single-quote-style":{name:"\u0421\u0442\u0438\u043B\u044C \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u043E\u0439 \u043A\u0430\u0432\u044B\u0447\u043A\u0438",description:"\u0421\u0442\u0438\u043B\u044C \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u043E\u0439 \u043A\u0430\u0432\u044B\u0447\u043A\u0438 \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F."},"double-quote-enabled":{name:"\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0421\u0442\u0438\u043B\u044C \u0434\u0432\u043E\u0439\u043D\u043E\u0439 \u043A\u0430\u0432\u044B\u0447\u043A\u0438",description:"\u0423\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442, \u0447\u0442\u043E \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u0434\u0432\u043E\u0439\u043D\u043E\u0439 \u043A\u0430\u0432\u044B\u0447\u043A\u0438."},"double-quote-style":{name:"\u0421\u0442\u0438\u043B\u044C \u0434\u0432\u043E\u0439\u043D\u043E\u0439 \u043A\u0430\u0432\u044B\u0447\u043A\u0438",description:"\u0421\u0442\u0438\u043B\u044C \u0434\u0432\u043E\u0439\u043D\u043E\u0439 \u043A\u0430\u0432\u044B\u0447\u043A\u0438 \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F."}},"re-index-footnotes":{name:"\u041F\u0435\u0440\u0435\u0438\u043D\u0434\u0435\u043A\u0441\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u043D\u043E\u0441\u043A\u0438",description:"\u041F\u0435\u0440\u0435\u0438\u043D\u0434\u0435\u043A\u0441\u0438\u0440\u0443\u0435\u0442 \u043A\u043B\u044E\u0447\u0438 \u0438 \u0441\u043D\u043E\u0441\u043A\u0438 \u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u0435 \u043F\u043E\u0440\u044F\u0434\u043A\u0430 \u0438\u0445 \u043F\u043E\u044F\u0432\u043B\u0435\u043D\u0438\u044F. \u041F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435: \u042D\u0442\u043E \u043F\u0440\u0430\u0432\u0438\u043B\u043E \u043D\u0435 \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442, \u0435\u0441\u043B\u0438 \u0434\u043B\u044F \u043E\u0434\u043D\u043E\u0433\u043E \u0438 \u0442\u043E\u0433\u043E \u0436\u0435 \u043A\u043B\u044E\u0447\u0430 \u0435\u0441\u0442\u044C \u0431\u043E\u043B\u0435\u0435 \u043E\u0434\u043D\u043E\u0439 \u0441\u043D\u043E\u0441\u043A\u0438."},"remove-consecutive-list-markers":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u044B \u0441\u043F\u0438\u0441\u043A\u0430",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u044B \u0441\u043F\u0438\u0441\u043A\u0430. \u0423\u0434\u043E\u0431\u043D\u043E \u043F\u0440\u0438 \u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0438 \u0438 \u0432\u0441\u0442\u0430\u0432\u043A\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 \u0441\u043F\u0438\u0441\u043A\u0430."},"remove-empty-lines-between-list-markers-and-checklists":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u0443\u0441\u0442\u044B\u0435 \u0441\u0442\u0440\u043E\u043A\u0438 \u043C\u0435\u0436\u0434\u0443 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u0430\u043C\u0438 \u0441\u043F\u0438\u0441\u043A\u0430 \u0438 \u0447\u0435\u043A-\u043B\u0438\u0441\u0442\u0430\u043C\u0438",description:"\u041C\u0435\u0436\u0434\u0443 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u0430\u043C\u0438 \u0441\u043F\u0438\u0441\u043A\u0430 \u0438 \u0447\u0435\u043A-\u043B\u0438\u0441\u0442\u0430\u043C\u0438 \u043D\u0435 \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043F\u0443\u0441\u0442\u044B\u0445 \u0441\u0442\u0440\u043E\u043A."},"remove-empty-list-markers":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u0443\u0441\u0442\u044B\u0435 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u044B \u0441\u043F\u0438\u0441\u043A\u0430",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u043F\u0443\u0441\u0442\u044B\u0435 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u044B \u0441\u043F\u0438\u0441\u043A\u0430, \u0442\u043E \u0435\u0441\u0442\u044C \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0441\u043F\u0438\u0441\u043A\u0430 \u0431\u0435\u0437 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0433\u043E."},"empty-line-around-horizontal-rules":{name:"\u041F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u0432\u043E\u043A\u0440\u0443\u0433 \u0433\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u044C\u043D\u044B\u0445 \u043F\u0440\u0430\u0432\u0438\u043B",description:"\u0413\u0430\u0440\u0430\u043D\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043E \u0435\u0441\u0442\u044C \u043F\u0443\u0441\u0442\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u0432\u043E\u043A\u0440\u0443\u0433 \u0433\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u044C\u043D\u044B\u0445 \u043F\u0440\u0430\u0432\u0438\u043B, \u0435\u0441\u043B\u0438 \u043E\u043D\u0438 \u043D\u0435 \u043D\u0430\u0447\u0438\u043D\u0430\u044E\u0442\u0441\u044F \u0438\u043B\u0438 \u043D\u0435 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u044E\u0442\u0441\u044F \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u043C."},"remove-hyphenated-line-breaks":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0433\u0438\u043F\u0435\u0440\u0431\u043E\u043B\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u0440\u0430\u0437\u0440\u044B\u0432\u044B \u0441\u0442\u0440\u043E\u043A",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u0433\u0438\u043F\u0435\u0440\u0431\u043E\u043B\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u0440\u0430\u0437\u0440\u044B\u0432\u044B \u0441\u0442\u0440\u043E\u043A. \u0423\u0434\u043E\u0431\u043D\u043E \u043F\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043A\u0435 \u0442\u0435\u043A\u0441\u0442\u0430 \u0438\u0437 \u0443\u0447\u0435\u0431\u043D\u0438\u043A\u043E\u0432."},"remove-hyphens-on-paste":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0434\u0435\u0444\u0438\u0441\u044B \u043F\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043A\u0435",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u0434\u0435\u0444\u0438\u0441\u044B \u0438\u0437 \u0442\u0435\u043A\u0441\u0442\u0430 \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043A\u0438"},"remove-leading-or-trailing-whitespace-on-paste":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u044B\u0435 \u0438\u043B\u0438 \u043A\u043E\u043D\u0435\u0447\u043D\u044B\u0435 \u043F\u0440\u043E\u0431\u0435\u043B\u044B \u043F\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043A\u0435",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u043B\u044E\u0431\u044B\u0435 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u044B\u0435 \u043D\u0435\u0442\u0430\u0431\u043E\u0432\u044B\u0435 \u043F\u0440\u043E\u0431\u0435\u043B\u044B \u0438 \u0432\u0441\u0435 \u043A\u043E\u043D\u0435\u0447\u043D\u044B\u0435 \u043F\u0440\u043E\u0431\u0435\u043B\u044B \u0434\u043B\u044F \u0442\u0435\u043A\u0441\u0442\u0430 \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043A\u0438"},"remove-leftover-footnotes-from-quote-on-paste":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043E\u0441\u0442\u0430\u0442\u043E\u0447\u043D\u044B\u0435 \u0441\u043D\u043E\u0441\u043A\u0438 \u0438\u0437 \u0446\u0438\u0442\u0430\u0442\u044B \u043F\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043A\u0435",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u043B\u044E\u0431\u044B\u0435 \u043E\u0441\u0442\u0430\u0442\u043E\u0447\u043D\u044B\u0435 \u0441\u043D\u043E\u0441\u043A\u0438 \u0434\u043B\u044F \u0442\u0435\u043A\u0441\u0442\u0430 \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043A\u0438"},"remove-link-spacing":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u0440\u043E\u0431\u0435\u043B\u044B \u0432\u043E\u043A\u0440\u0443\u0433 \u0442\u0435\u043A\u0441\u0442\u0430 \u0441\u0441\u044B\u043B\u043A\u0438",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u043F\u0440\u043E\u0431\u0435\u043B\u044B \u0432\u043E\u043A\u0440\u0443\u0433 \u0442\u0435\u043A\u0441\u0442\u0430 \u0441\u0441\u044B\u043B\u043A\u0438."},"remove-multiple-blank-lines-on-paste":{name:"\u0423\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u043F\u0443\u0441\u0442\u044B\u0445 \u0441\u0442\u0440\u043E\u043A \u043F\u0440\u0438 \u0432\u0441\u0442\u0430\u0432\u043A\u0435",description:"\u0421\u0436\u0438\u043C\u0430\u0435\u0442 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u043F\u0443\u0441\u0442\u044B\u0445 \u0441\u0442\u0440\u043E\u043A \u0432 \u043E\u0434\u043D\u0443 \u043F\u0443\u0441\u0442\u0443\u044E \u0441\u0442\u0440\u043E\u043A\u0443 \u0434\u043B\u044F \u0432\u0441\u0442\u0430\u0432\u043A\u0438 \u0442\u0435\u043A\u0441\u0442\u0430"},"remove-multiple-spaces":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u0432",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u0434\u0432\u0430 \u0438\u043B\u0438 \u0431\u043E\u043B\u0435\u0435 \u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0445 \u043F\u0440\u043E\u0431\u0435\u043B\u0430. \u0418\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u0442 \u043F\u0440\u043E\u0431\u0435\u043B\u044B \u0432 \u043D\u0430\u0447\u0430\u043B\u0435 \u0438 \u0432 \u043A\u043E\u043D\u0446\u0435 \u0441\u0442\u0440\u043E\u043A\u0438."},"remove-space-around-characters":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u0440\u043E\u0431\u0435\u043B\u044B \u0432\u043E\u043A\u0440\u0443\u0433 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432",description:"\u0413\u0430\u0440\u0430\u043D\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043E \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043D\u0435 \u043E\u043A\u0440\u0443\u0436\u0435\u043D\u044B \u043F\u0440\u043E\u0431\u0435\u043B\u0430\u043C\u0438 (\u043B\u0438\u0431\u043E \u043E\u0434\u0438\u043D\u043E\u0447\u043D\u044B\u043C\u0438 \u043F\u0440\u043E\u0431\u0435\u043B\u0430\u043C\u0438, \u043B\u0438\u0431\u043E \u0442\u0430\u0431\u0443\u043B\u044F\u0446\u0438\u0435\u0439). \u041F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435: \u044D\u0442\u043E \u043C\u043E\u0436\u0435\u0442 \u0432\u044B\u0437\u0432\u0430\u0442\u044C \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u044B \u0441 \u0444\u043E\u0440\u043C\u0430\u0442\u043E\u043C markdown \u0432 \u043D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u0441\u043B\u0443\u0447\u0430\u044F\u0445.","include-fullwidth-forms":{name:"\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043F\u043E\u043B\u043D\u044B\u0435 \u0444\u043E\u0440\u043C\u044B",description:'\u0412\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0411\u043B\u043E\u043A \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 Halfwidth and Fullwidth Forms Unicode'},"include-cjk-symbols-and-punctuation":{name:"\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u0438 \u043F\u0443\u043D\u043A\u0442\u0443\u0430\u0446\u0438\u044E CJK",description:'\u0412\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0411\u043B\u043E\u043A \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 CJK Symbols and Punctuation Unicode'},"include-dashes":{name:"\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0434\u0435\u0444\u0438\u0441\u044B",description:"\u0412\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0434\u0435\u0444\u0438\u0441 (\u2013) \u0438 \u044D\u043C-\u0434\u0435\u0444\u0438\u0441 (\u2014)"},"other-symbols":{name:"\u0414\u0440\u0443\u0433\u0438\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B",description:"\u0414\u0440\u0443\u0433\u0438\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B"}},"remove-space-before-or-after-characters":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u0440\u043E\u0431\u0435\u043B\u044B \u0434\u043E \u0438 \u043F\u043E\u0441\u043B\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u043F\u0440\u043E\u0431\u0435\u043B\u044B \u0434\u043E \u0438 \u043F\u043E\u0441\u043B\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u044B\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432. \u041F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435: \u044D\u0442\u043E \u043C\u043E\u0436\u0435\u0442 \u0432\u044B\u0437\u0432\u0430\u0442\u044C \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u044B \u0441 \u0444\u043E\u0440\u043C\u0430\u0442\u043E\u043C markdown \u0432 \u043D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u0441\u043B\u0443\u0447\u0430\u044F\u0445.","characters-to-remove-space-before":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u0440\u043E\u0431\u0435\u043B\u044B \u0434\u043E \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u043F\u0440\u043E\u0431\u0435\u043B\u044B \u0434\u043E \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u044B\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432. \u041F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435: \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435 { \u0438\u043B\u0438 } \u0432 \u0441\u043F\u0438\u0441\u043A\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043D\u0435\u043E\u0436\u0438\u0434\u0430\u043D\u043D\u043E \u043F\u043E\u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u0444\u0430\u0439\u043B\u044B, \u0442\u0430\u043A \u043A\u0430\u043A \u043E\u043D\u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442\u0441\u044F \u0432 \u0441\u0438\u043D\u0442\u0430\u043A\u0441\u0438\u0441\u0435 \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0437\u0430 \u043A\u0443\u043B\u0438\u0441\u0430\u043C\u0438."},"characters-to-remove-space-after":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u0440\u043E\u0431\u0435\u043B\u044B \u043F\u043E\u0441\u043B\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u043F\u0440\u043E\u0431\u0435\u043B\u044B \u043F\u043E\u0441\u043B\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u044B\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432. \u041F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435: \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435 { \u0438\u043B\u0438 } \u0432 \u0441\u043F\u0438\u0441\u043A\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u043D\u0435\u043E\u0436\u0438\u0434\u0430\u043D\u043D\u043E \u043F\u043E\u0432\u043B\u0438\u044F\u0435\u0442 \u043D\u0430 \u0444\u0430\u0439\u043B\u044B, \u0442\u0430\u043A \u043A\u0430\u043A \u043E\u043D\u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442\u0441\u044F \u0432 \u0441\u0438\u043D\u0442\u0430\u043A\u0441\u0438\u0441\u0435 \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0437\u0430 \u043A\u0443\u043B\u0438\u0441\u0430\u043C\u0438."}},"remove-trailing-punctuation-in-heading":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0437\u043D\u0430\u043A\u0438 \u043F\u0440\u0435\u043F\u0438\u043D\u0430\u043D\u0438\u044F \u0432 \u043A\u043E\u043D\u0446\u0435 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430",description:'\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u044B\u0435 \u0437\u043D\u0430\u043A\u0438 \u043F\u0440\u0435\u043F\u0438\u043D\u0430\u043D\u0438\u044F \u0438\u0437 \u043A\u043E\u043D\u0446\u0430 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u0432, \u043F\u0440\u0438 \u044D\u0442\u043E\u043C \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u043E\u0447\u043A\u0443 \u0441 \u0437\u0430\u043F\u044F\u0442\u043E\u0439 \u0432 \u043A\u043E\u043D\u0446\u0435 HTML entity references.',"punctuation-to-remove":{name:"\u0417\u043D\u0430\u043A\u0438 \u043F\u0440\u0435\u043F\u0438\u043D\u0430\u043D\u0438\u044F \u0434\u043B\u044F \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F",description:"\u0417\u043D\u0430\u043A\u0438 \u043F\u0440\u0435\u043F\u0438\u043D\u0430\u043D\u0438\u044F \u0434\u043B\u044F \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0438\u0437 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u0432."}},"remove-yaml-keys":{name:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C YAML \u043A\u043B\u044E\u0447\u0438",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u044B\u0435 YAML \u043A\u043B\u044E\u0447\u0438","yaml-keys-to-remove":{name:"YAML \u043A\u043B\u044E\u0447\u0438 \u0434\u043B\u044F \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F",description:"YAML \u043A\u043B\u044E\u0447\u0438 \u0434\u043B\u044F \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0438\u0437 YAML frontmatter \u0441 \u0438\u043B\u0438 \u0431\u0435\u0437 \u0434\u0432\u043E\u0435\u0442\u043E\u0447\u0438\u044F"}},"sort-yaml-array-values":{name:"\u0421\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F YAML \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u0432",description:"\u0421\u043E\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F YAML \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u0432 \u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u043E\u0433\u043E \u043F\u043E\u0440\u044F\u0434\u043A\u0430 \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0438.","sort-alias-key":{name:"\u0421\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C YAML aliases section",description:"\u0412\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0443 \u0430\u043B\u0438\u0430\u0441\u043E\u0432."},"sort-tag-key":{name:"\u0421\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C YAML tags section",description:"\u0412\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0443 \u0442\u0435\u0433\u043E\u0432."},"sort-array-keys":{name:"\u0421\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C YAML \u043C\u0430\u0441\u0441\u0438\u0432\u044B",description:"\u0412\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0443 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 \u0434\u043B\u044F \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u044B\u0445 YAML \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u0432"},"ignore-keys":{name:"YAML \u043A\u043B\u044E\u0447\u0438 \u0434\u043B\u044F \u0438\u0433\u043D\u043E\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F",description:"\u0421\u043F\u0438\u0441\u043E\u043A YAML \u043A\u043B\u044E\u0447\u0435\u0439 \u0431\u0435\u0437 \u0434\u0432\u043E\u0435\u0442\u043E\u0447\u0438\u044F \u043D\u0430 \u0441\u0432\u043E\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0435, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043D\u0435 \u043F\u0440\u0435\u0434\u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u044B \u0434\u043B\u044F \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0438 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439."},"sort-order":{name:"\u041F\u043E\u0440\u044F\u0434\u043E\u043A \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0438",description:"\u0421\u043F\u043E\u0441\u043E\u0431 \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0438 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 YAML \u043C\u0430\u0441\u0441\u0438\u0432\u043E\u0432."}},"space-after-list-markers":{name:"\u041F\u0440\u043E\u0431\u0435\u043B \u043F\u043E\u0441\u043B\u0435 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u043E\u0432 \u0441\u043F\u0438\u0441\u043A\u0430",description:"\u041C\u0435\u0436\u0434\u0443 \u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u0430\u043C\u0438 \u0441\u043F\u0438\u0441\u043A\u0430 \u0438 \u0447\u0435\u043A-\u043B\u0438\u0441\u0442\u0430\u043C\u0438 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043E\u0434\u0438\u043D \u043F\u0440\u043E\u0431\u0435\u043B."},"space-between-chinese-japanese-or-korean-and-english-or-numbers":{name:"\u041F\u0440\u043E\u0431\u0435\u043B \u043C\u0435\u0436\u0434\u0443 \u043A\u0438\u0442\u0430\u0439\u0441\u043A\u0438\u043C, \u044F\u043F\u043E\u043D\u0441\u043A\u0438\u043C \u0438\u043B\u0438 \u043A\u043E\u0440\u0435\u0439\u0441\u043A\u0438\u043C \u0438 \u0430\u043D\u0433\u043B\u0438\u0439\u0441\u043A\u0438\u043C \u0438\u043B\u0438 \u0447\u0438\u0441\u043B\u0430\u043C\u0438",description:'\u0413\u0430\u0440\u0430\u043D\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043E \u043A\u0438\u0442\u0430\u0439\u0441\u043A\u0438\u0435, \u044F\u043F\u043E\u043D\u0441\u043A\u0438\u0435 \u0438\u043B\u0438 \u043A\u043E\u0440\u0435\u0439\u0441\u043A\u0438\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u0438 \u0430\u043D\u0433\u043B\u0438\u0439\u0441\u043A\u0438\u0435 \u0438\u043B\u0438 \u0447\u0438\u0441\u043B\u0430 \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u044B \u043E\u0434\u043D\u0438\u043C \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u043C. \u0421\u043B\u0435\u0434\u0443\u0435\u0442 \u044D\u0442\u0438\u043C \u0440\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0430\u0446\u0438\u044F\u043C',"english-symbols-punctuation-before":{name:"\u0410\u043D\u0433\u043B\u0438\u0439\u0441\u043A\u0430\u044F \u043F\u0443\u043D\u043A\u0442\u0443\u0430\u0446\u0438\u044F \u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043F\u0435\u0440\u0435\u0434 CJK",description:'\u0421\u043F\u0438\u0441\u043E\u043A \u0437\u043D\u0430\u043A\u043E\u0432 \u043F\u0440\u0435\u043F\u0438\u043D\u0430\u043D\u0438\u044F \u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432, \u043D\u0435 \u043E\u0442\u043D\u043E\u0441\u044F\u0449\u0438\u0445\u0441\u044F \u043A \u0431\u0443\u043A\u0432\u0430\u043C, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044C \u0430\u043D\u0433\u043B\u0438\u0439\u0441\u043A\u0438\u043C\u0438, \u0435\u0441\u043B\u0438 \u043E\u043D\u0438 \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u043F\u0435\u0440\u0435\u0434 \u043A\u0438\u0442\u0430\u0439\u0441\u043A\u0438\u043C\u0438, \u044F\u043F\u043E\u043D\u0441\u043A\u0438\u043C\u0438 \u0438\u043B\u0438 \u043A\u043E\u0440\u0435\u0439\u0441\u043A\u0438\u043C\u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u0430\u043C\u0438. \u041F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435: "*" \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044F \u0430\u043D\u0433\u043B\u0438\u0439\u0441\u043A\u0438\u043C \u0438 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C \u0434\u043B\u044F \u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E\u0439 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u0441\u0438\u043D\u0442\u0430\u043A\u0441\u0438\u0441\u043E\u0432 markdown.'},"english-symbols-punctuation-after":{name:"\u0410\u043D\u0433\u043B\u0438\u0439\u0441\u043A\u0430\u044F \u043F\u0443\u043D\u043A\u0442\u0443\u0430\u0446\u0438\u044F \u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u043F\u043E\u0441\u043B\u0435 CJK",description:'\u0421\u043F\u0438\u0441\u043E\u043A \u0437\u043D\u0430\u043A\u043E\u0432 \u043F\u0440\u0435\u043F\u0438\u043D\u0430\u043D\u0438\u044F \u0438 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432, \u043D\u0435 \u043E\u0442\u043D\u043E\u0441\u044F\u0449\u0438\u0445\u0441\u044F \u043A \u0431\u0443\u043A\u0432\u0430\u043C, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044C \u0430\u043D\u0433\u043B\u0438\u0439\u0441\u043A\u0438\u043C\u0438, \u0435\u0441\u043B\u0438 \u043E\u043D\u0438 \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u043F\u043E\u0441\u043B\u0435 \u043A\u0438\u0442\u0430\u0439\u0441\u043A\u0438\u0445, \u044F\u043F\u043E\u043D\u0441\u043A\u0438\u0445 \u0438\u043B\u0438 \u043A\u043E\u0440\u0435\u0439\u0441\u043A\u0438\u0445 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432. \u041F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435: "*" \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044F \u0430\u043D\u0433\u043B\u0438\u0439\u0441\u043A\u0438\u043C \u0438 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C \u0434\u043B\u044F \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E\u0439 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043D\u0435\u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u0441\u0438\u043D\u0442\u0430\u043A\u0441\u0438\u0441\u043E\u0432 markdown.'}},"strong-style":{name:'\u0421\u0442\u0438\u043B\u044C "\u0436\u0438\u0440\u043D\u044B\u0439"',description:'\u041E\u0431\u0435\u0441\u043F\u0435\u0447\u0435\u043D\u0438\u0435 \u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u0438 \u0441\u0442\u0438\u043B\u044F "\u0436\u0438\u0440\u043D\u044B\u0439".',style:{name:"\u0421\u0442\u0438\u043B\u044C",description:"\u0421\u0442\u0438\u043B\u044C \u0434\u043B\u044F \u043E\u0431\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0436\u0438\u0440\u043D\u043E\u0433\u043E \u0442\u0435\u043A\u0441\u0442\u0430"}},"trailing-spaces":{name:"\u041F\u0440\u043E\u0431\u0435\u043B\u044B \u0432 \u043A\u043E\u043D\u0446\u0435 \u0441\u0442\u0440\u043E\u043A\u0438",description:"\u0423\u0434\u0430\u043B\u044F\u0435\u0442 \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043F\u0440\u043E\u0431\u0435\u043B\u044B \u043F\u043E\u0441\u043B\u0435 \u043A\u0430\u0436\u0434\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0438.","twp-space-line-break":{name:"\u0414\u0432\u0435 \u043F\u0440\u043E\u0431\u0435\u043B\u0430 \u0432 \u043A\u043E\u043D\u0446\u0435 \u0441\u0442\u0440\u043E\u043A\u0438",description:'\u0418\u0433\u043D\u043E\u0440\u0438\u0440\u0443\u0435\u0442 \u0434\u0432\u0435 \u043F\u0440\u043E\u0431\u0435\u043B\u0430, \u0437\u0430 \u043A\u043E\u0442\u043E\u0440\u044B\u043C\u0438 \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u0440\u0430\u0437\u0440\u044B\u0432 \u0441\u0442\u0440\u043E\u043A\u0438 ("\u0414\u0432\u0435 \u043F\u0440\u043E\u0431\u0435\u043B\u0430 \u0432 \u043A\u043E\u043D\u0446\u0435 \u0441\u0442\u0440\u043E\u043A\u0438").'}},"two-spaces-between-lines-with-content":{name:"\u0420\u0430\u0437\u0440\u044B\u0432 \u0441\u0442\u0440\u043E\u043A\u0438 \u043C\u0435\u0436\u0434\u0443 \u0441\u0442\u0440\u043E\u043A\u0430\u043C\u0438 \u0441 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u044B\u043C",description:"\u0413\u0430\u0440\u0430\u043D\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043E \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u044B\u0439 \u0440\u0430\u0437\u0440\u044B\u0432 \u0441\u0442\u0440\u043E\u043A\u0438 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u043A \u043A\u043E\u043D\u0446\u0430\u043C \u0441\u0442\u0440\u043E\u043A \u0441 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u044B\u043C, \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u044E\u0449\u0438\u043C\u0441\u044F \u043D\u0430 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0439 \u0441\u0442\u0440\u043E\u043A\u0435 \u0434\u043B\u044F \u043F\u0430\u0440\u0430\u0433\u0440\u0430\u0444\u043E\u0432, \u0446\u0438\u0442\u0430\u0442 \u0438 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 \u0441\u043F\u0438\u0441\u043A\u0430","line-break-indicator":{name:"\u0420\u0430\u0437\u0440\u044B\u0432 \u0441\u0442\u0440\u043E\u043A\u0438",description:"\u0420\u0430\u0437\u0440\u044B\u0432 \u0441\u0442\u0440\u043E\u043A\u0438 \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F."}},"unordered-list-style":{name:"\u0421\u0442\u0438\u043B\u044C \u043D\u0435\u0443\u043F\u043E\u0440\u044F\u0434\u043E\u0447\u0435\u043D\u043D\u043E\u0433\u043E \u0441\u043F\u0438\u0441\u043A\u0430",description:"\u0413\u0430\u0440\u0430\u043D\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043E \u043D\u0435\u0443\u043F\u043E\u0440\u044F\u0434\u043E\u0447\u0435\u043D\u043D\u044B\u0435 \u0441\u043F\u0438\u0441\u043A\u0438 \u0441\u043B\u0435\u0434\u0443\u044E\u0442 \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u043E\u043C\u0443 \u0441\u0442\u0438\u043B\u044E.","list-style":{name:"\u0421\u0442\u0438\u043B\u044C \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 \u0441\u043F\u0438\u0441\u043A\u0430",description:"\u0421\u0442\u0438\u043B\u044C \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 \u0441\u043F\u0438\u0441\u043A\u0430 \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0432 \u043D\u0435\u0443\u043F\u043E\u0440\u044F\u0434\u043E\u0447\u0435\u043D\u043D\u044B\u0445 \u0441\u043F\u0438\u0441\u043A\u0430\u0445"}},"yaml-key-sort":{name:"\u0421\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0430 YAML \u043A\u043B\u044E\u0447\u0435\u0439",description:"\u0421\u043E\u0440\u0442\u0438\u0440\u0443\u0435\u0442 YAML \u043A\u043B\u044E\u0447\u0438 \u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u0435 \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u043E\u0433\u043E \u043F\u043E\u0440\u044F\u0434\u043A\u0430 \u0438 \u043F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442\u0430. \u041F\u0440\u0438\u043C\u0435\u0447\u0430\u043D\u0438\u0435: \u043C\u043E\u0436\u0435\u0442 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u0443\u0441\u0442\u044B\u0435 \u0441\u0442\u0440\u043E\u043A\u0438. \u0420\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u0441 \u043D\u0435\u0432\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u043C\u0438 \u043A\u043B\u044E\u0447\u0430\u043C\u0438.","yaml-key-priority-sort-order":{name:"\u041F\u043E\u0440\u044F\u0434\u043E\u043A \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0438 YAML \u043A\u043B\u044E\u0447\u0435\u0439",description:"\u041F\u043E\u0440\u044F\u0434\u043E\u043A, \u0432 \u043A\u043E\u0442\u043E\u0440\u043E\u043C \u0441\u043E\u0440\u0442\u0438\u0440\u0443\u044E\u0442\u0441\u044F \u043A\u043B\u044E\u0447\u0438 \u0441 \u043E\u0434\u043D\u0438\u043C \u043D\u0430 \u043A\u0430\u0436\u0434\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0435, \u0433\u0434\u0435 \u043E\u043D\u0438 \u0441\u043E\u0440\u0442\u0438\u0440\u0443\u044E\u0442\u0441\u044F \u0432 \u043F\u043E\u0440\u044F\u0434\u043A\u0435, \u043D\u0430\u0439\u0434\u0435\u043D\u043D\u043E\u043C \u0432 \u0441\u043F\u0438\u0441\u043A\u0435"},"priority-keys-at-start-of-yaml":{name:"\u041F\u0440\u0438\u043E\u0440\u0438\u0442\u0435\u0442\u043D\u044B\u0435 \u043A\u043B\u044E\u0447\u0438 \u0432 \u043D\u0430\u0447\u0430\u043B\u0435 YAML",description:"\u041F\u043E\u0440\u044F\u0434\u043E\u043A \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0438 YAML \u043A\u043B\u044E\u0447\u0435\u0439 \u0440\u0430\u0441\u043F\u043E\u043B\u0430\u0433\u0430\u0435\u0442\u0441\u044F \u0432 \u043D\u0430\u0447\u0430\u043B\u0435 YAML frontmatter"},"yaml-sort-order-for-other-keys":{name:"\u041F\u043E\u0440\u044F\u0434\u043E\u043A \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0438 YAML \u0434\u043B\u044F \u0434\u0440\u0443\u0433\u0438\u0445 \u043A\u043B\u044E\u0447\u0435\u0439",description:"\u0421\u043F\u043E\u0441\u043E\u0431 \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0438 \u043A\u043B\u044E\u0447\u0435\u0439, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u044B \u0432 \u0442\u0435\u043A\u0441\u0442\u043E\u0432\u043E\u043C \u043F\u043E\u043B\u0435 \u041F\u043E\u0440\u044F\u0434\u043A\u0430 \u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0438 YAML \u043A\u043B\u044E\u0447\u0435\u0439"}},"yaml-timestamp":{name:"YAML Timestamp",description:"\u041E\u0442\u0441\u043B\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u0430\u0442\u0443 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0433\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0444\u0430\u0439\u043B\u0430 \u0432 YAML frontmatter. \u041F\u043E\u043B\u0443\u0447\u0430\u0435\u0442 \u0434\u0430\u0442\u044B \u0438\u0437 \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u0444\u0430\u0439\u043B\u0430.","date-created":{name:"\u0414\u0430\u0442\u0430 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F",description:"\u0412\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u0434\u0430\u0442\u0443 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u0444\u0430\u0439\u043B\u0430"},"date-created-key":{name:"\u041A\u043B\u044E\u0447 \u0434\u0430\u0442\u044B \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F",description:"\u041A\u0430\u043A\u043E\u0439 YAML \u043A\u043B\u044E\u0447 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0434\u043B\u044F \u0434\u0430\u0442\u044B \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F"},"date-created-source-of-truth":{name:"\u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A \u0438\u0441\u0442\u0438\u043D\u043D\u043E\u0439 \u0434\u0430\u0442\u044B \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F",description:"\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043E\u0442\u043A\u0443\u0434\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0434\u0430\u0442\u044B \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F, \u0435\u0441\u043B\u0438 \u043E\u043D\u043E \u0443\u0436\u0435 \u043F\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 frontmatter."},"date-modified-source-of-truth":{name:"\u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A \u0438\u0441\u0442\u0438\u043D\u043D\u043E\u0439 \u0434\u0430\u0442\u044B \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F",description:"\u041E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u0435\u0442, \u043A\u0430\u043A\u0438\u043C \u0441\u043F\u043E\u0441\u043E\u0431\u043E\u043C \u0441\u043B\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0434\u043B\u044F \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0434\u0430\u0442\u044B \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F, \u0435\u0441\u043B\u0438 \u043E\u043D\u0430 \u0443\u0436\u0435 \u043F\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 frontmatter."},"date-modified":{name:"\u0414\u0430\u0442\u0430 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F",description:"\u0412\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u0434\u0430\u0442\u0443 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0433\u043E \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0444\u0430\u0439\u043B\u0430"},"date-modified-key":{name:"\u041A\u043B\u044E\u0447 \u0434\u0430\u0442\u044B \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F",description:"\u041A\u0430\u043A\u043E\u0439 YAML \u043A\u043B\u044E\u0447 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0434\u043B\u044F \u0434\u0430\u0442\u044B \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F"},format:{name:"\u0424\u043E\u0440\u043C\u0430\u0442",description:'\u0424\u043E\u0440\u043C\u0430\u0442 \u0434\u0430\u0442\u044B, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0439 Moment (\u0441\u043C. Moment format options)'},"convert-to-utc":{name:"\u041F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u0442\u044C \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u043E\u0435 \u0432\u0440\u0435\u043C\u044F \u0432 UTC",description:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442 \u044D\u043A\u0432\u0438\u0432\u0430\u043B\u0435\u043D\u0442 UTC \u0434\u043B\u044F \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u043D\u044B\u0445 \u0434\u0430\u0442 \u0432\u043C\u0435\u0441\u0442\u043E \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0432\u0440\u0435\u043C\u0435\u043D\u0438"},"update-on-file-contents-updated":{name:"\u041E\u0431\u043D\u043E\u0432\u0438\u0442\u044C YAML Timestamp \u043F\u0440\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0438 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0433\u043E \u0444\u0430\u0439\u043B\u0430",description:"\u041A\u043E\u0433\u0434\u0430 \u0438\u0437\u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F \u0442\u0435\u043A\u0443\u0449\u0430\u044F \u0430\u043A\u0442\u0438\u0432\u043D\u0430\u044F \u0437\u0430\u043C\u0435\u0442\u043A\u0430, YAML Timestamp \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \u043D\u0430 \u0437\u0430\u043C\u0435\u0442\u043A\u0435. \u042D\u0442\u043E \u0434\u043E\u043B\u0436\u043D\u043E \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u044C \u0432\u0440\u0435\u043C\u0435\u043D\u043D\u0443\u044E \u043C\u0435\u0442\u043A\u0443 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u043D\u043E\u0439 \u0437\u0430\u043C\u0435\u0442\u043A\u0438, \u0435\u0441\u043B\u0438 \u043E\u043D\u0430 \u043E\u0442\u043B\u0438\u0447\u0430\u0435\u0442\u0441\u044F \u043E\u0442 \u0442\u0435\u043A\u0443\u0449\u0435\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0431\u043E\u043B\u0435\u0435 \u0447\u0435\u043C \u043D\u0430 5 \u0441\u0435\u043A\u0443\u043D\u0434."}},"yaml-title-alias":{name:"YAML \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0410\u043B\u0438\u0430\u0441",description:"\u0412\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u0438\u043B\u0438 \u043E\u0431\u043D\u043E\u0432\u043B\u044F\u0435\u0442 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0444\u0430\u0439\u043B\u0430 \u0432 YAML frontmatter's aliases section. \u041F\u043E\u043B\u0443\u0447\u0430\u0435\u0442 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0438\u0437 \u043F\u0435\u0440\u0432\u043E\u0433\u043E H1 \u0438\u043B\u0438 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F \u0444\u0430\u0439\u043B\u0430.","preserve-existing-alias-section-style":{name:"\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0441\u0442\u0438\u043B\u044C \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044E\u0449\u0435\u0433\u043E \u0440\u0430\u0437\u0434\u0435\u043B\u0430 \u0430\u043B\u0438\u0430\u0441\u043E\u0432",description:"\u0415\u0441\u043B\u0438 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E, \u0442\u043E \u0421\u0442\u0438\u043B\u044C \u0440\u0430\u0437\u0434\u0435\u043B\u0430 \u0430\u043B\u0438\u0430\u0441\u043E\u0432 YAML \u043F\u0440\u0438\u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u043A \u043D\u043E\u0432\u044B\u043C \u0441\u043E\u0437\u0434\u0430\u043D\u043D\u044B\u043C \u0440\u0430\u0437\u0434\u0435\u043B\u0430\u043C"},"keep-alias-that-matches-the-filename":{name:"\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0430\u043B\u0438\u0430\u0441, \u0441\u043E\u0432\u043F\u0430\u0434\u0430\u044E\u0449\u0438\u0439 \u0441 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435\u043C \u0444\u0430\u0439\u043B\u0430",description:"\u0422\u0430\u043A\u0438\u0435 \u0430\u043B\u0438\u0430\u0441\u044B \u043E\u0431\u044B\u0447\u043D\u043E \u044F\u0432\u043B\u044F\u044E\u0442\u0441\u044F \u0438\u0437\u0431\u044B\u0442\u043E\u0447\u043D\u044B\u043C\u0438"},"use-yaml-key-to-keep-track-of-old-filename-or-heading":{name:"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C YAML \u043A\u043B\u044E\u0447, \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u044B\u0439 \u0432 \u041A\u043B\u044E\u0447 \u043F\u043E\u043C\u043E\u0449\u043D\u0438\u043A\u0430 \u0430\u043B\u0438\u0430\u0441\u0430, \u0434\u043B\u044F \u043F\u043E\u043C\u043E\u0449\u0438 \u0441 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\u043C\u0438 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F \u0444\u0430\u0439\u043B\u0430 \u0438\u043B\u0438 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430",description:"\u0415\u0441\u043B\u0438 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E, \u043A\u043E\u0433\u0434\u0430 \u043F\u0435\u0440\u0432\u044B\u0439 H1 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0438\u0437\u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F \u0438\u043B\u0438 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0444\u0430\u0439\u043B\u0430, \u0435\u0441\u043B\u0438 \u043F\u0435\u0440\u0432\u044B\u0439 H1 \u043D\u0435 \u043F\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0442\u043E \u0441\u0442\u0430\u0440\u044B\u0439 \u0430\u043B\u0438\u0430\u0441, \u0445\u0440\u0430\u043D\u044F\u0449\u0438\u0439\u0441\u044F \u0432 \u044D\u0442\u043E\u043C \u043A\u043B\u044E\u0447\u0435, \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043C\u0435\u043D\u0435\u043D \u043D\u0430 \u043D\u043E\u0432\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432\u043C\u0435\u0441\u0442\u043E \u0442\u043E\u0433\u043E, \u0447\u0442\u043E\u0431\u044B \u043F\u0440\u043E\u0441\u0442\u043E \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043D\u043E\u0432\u0443\u044E \u0437\u0430\u043F\u0438\u0441\u044C \u0432 \u043C\u0430\u0441\u0441\u0438\u0432 \u0430\u043B\u0438\u0430\u0441\u043E\u0432"},"alias-helper-key":{name:"\u041A\u043B\u044E\u0447 \u043F\u043E\u043C\u043E\u0449\u043D\u0438\u043A\u0430 \u0430\u043B\u0438\u0430\u0441\u0430",description:"\u041A\u043B\u044E\u0447 \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0434\u043B\u044F \u043F\u043E\u043C\u043E\u0449\u0438 \u0432 \u043E\u0442\u0441\u043B\u0435\u0436\u0438\u0432\u0430\u043D\u0438\u0438 \u0442\u043E\u0433\u043E, \u043A\u0430\u043A\u043E\u0439 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0439 \u0444\u0430\u0439\u043B \u0438\u043B\u0438 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0431\u044B\u043B \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D \u0432 frontmatter \u044D\u0442\u0438\u043C \u043F\u0440\u0430\u0432\u0438\u043B\u043E\u043C."}},"yaml-title":{name:"YAML \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A",description:"\u0412\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0444\u0430\u0439\u043B\u0430 \u0432 YAML frontmatter. \u041F\u043E\u043B\u0443\u0447\u0430\u0435\u0442 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0440\u0435\u0436\u0438\u043C\u0430.","title-key":{name:"\u041A\u043B\u044E\u0447 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F",description:"\u041A\u0430\u043A\u043E\u0439 YAML \u043A\u043B\u044E\u0447 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0434\u043B\u044F \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F"},mode:{name:"\u0420\u0435\u0436\u0438\u043C",description:"\u041C\u0435\u0442\u043E\u0434 \u0434\u043B\u044F \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u044F \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F"}}},enums:{"Title Case":"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A","ALL CAPS":"\u0412\u0421\u0415 \u041A\u0410\u041F\u0421\u041E\u041C","First letter":"\u041F\u0435\u0440\u0432\u0430\u044F \u0431\u0443\u043A\u0432\u0430",".":".",")":")",ERROR:"\u041E\u0428\u0418\u0411\u041A\u0410",TRACE:"\u0422\u0420\u0410\u0421\u0421\u0418\u0420\u041E\u0412\u041A\u0410",DEBUG:"\u041E\u0422\u041B\u0410\u0414\u041A\u0410",INFO:"\u0418\u041D\u0424\u041E\u0420\u041C\u0410\u0426\u0418\u042F",WARN:"\u041F\u0420\u0415\u0414\u0423\u041F\u0420\u0415\u0416\u0414\u0415\u041D\u0418\u0415",SILENT:"\u0411\u0415\u0417 \u0417\u0412\u0423\u041A\u0410",ascending:"\u041F\u043E \u0432\u043E\u0437\u0440\u0430\u0441\u0442\u0430\u043D\u0438\u044E",lazy:"\u043B\u0435\u043D\u0438\u0432\u044B\u0439",preserve:"\u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C",Nothing:"\u041D\u0438\u0447\u0435\u0433\u043E","Remove hashtag":"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0445\u044D\u0448\u0442\u0435\u0433","Remove whole tag":"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0435\u0441\u044C \u0442\u0435\u0433",asterisk:"\u0437\u0432\u0435\u0437\u0434\u043E\u0447\u043A\u0430",underscore:"\u043D\u0438\u0436\u043D\u0435\u0435 \u043F\u043E\u0434\u0447\u0435\u0440\u043A\u0438\u0432\u0430\u043D\u0438\u0435",consistent:"\u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439","-":"-","*":"*","+":"+",space:"\u043F\u0440\u043E\u0431\u0435\u043B","no space":"\u0431\u0435\u0437 \u043F\u0440\u043E\u0431\u0435\u043B\u0430",None:"\u041D\u0438\u0447\u0435\u0433\u043E","Ascending Alphabetical":"\u0412 \u0430\u043B\u0444\u0430\u0432\u0438\u0442\u043D\u043E\u043C \u043F\u043E\u0440\u044F\u0434\u043A\u0435","Descending Alphabetical":"\u0412 \u043E\u0431\u0440\u0430\u0442\u043D\u043E\u043C \u0430\u043B\u0444\u0430\u0432\u0438\u0442\u043D\u043E\u043C \u043F\u043E\u0440\u044F\u0434\u043A\u0435","multi-line":"\u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0439","single-line":"\u043E\u0434\u043D\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0439","single string to single-line":"\u043E\u0434\u043D\u0430 \u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u043E\u0434\u043D\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0439","single string to multi-line":"\u043E\u0434\u043D\u0430 \u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u043C\u043D\u043E\u0433\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u044B\u0439","single string comma delimited":"\u043E\u0434\u043D\u0430 \u0441\u0442\u0440\u043E\u043A\u0430, \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u0430\u044F \u0437\u0430\u043F\u044F\u0442\u044B\u043C\u0438","single string space delimited":"\u043E\u0434\u043D\u0430 \u0441\u0442\u0440\u043E\u043A\u0430, \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u0430\u044F \u043F\u0440\u043E\u0431\u0435\u043B\u0430\u043C\u0438","single-line space delimited":"\u043E\u0434\u043D\u043E\u0441\u0442\u0440\u043E\u0447\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430, \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u043D\u0430\u044F \u043F\u0440\u043E\u0431\u0435\u043B\u0430\u043C\u0438","first-h1":"\u041F\u0435\u0440\u0432\u044B\u0439 H1","first-h1-or-filename-if-h1-missing":"\u041F\u0435\u0440\u0432\u044B\u0439 H1 \u0438\u043B\u0438 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0444\u0430\u0439\u043B\u0430, \u0435\u0441\u043B\u0438 H1 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D",filename:"\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0444\u0430\u0439\u043B\u0430",never:"\u041D\u0438\u043A\u043E\u0433\u0434\u0430","after 5 seconds":"\u0427\u0435\u0440\u0435\u0437 5 \u0441\u0435\u043A\u0443\u043D\u0434","after 10 seconds":"\u0427\u0435\u0440\u0435\u0437 10 \u0441\u0435\u043A\u0443\u043D\u0434","after 15 seconds":"\u0427\u0435\u0440\u0435\u0437 15 \u0441\u0435\u043A\u0443\u043D\u0434","after 30 seconds":"\u0427\u0435\u0440\u0435\u0437 30 \u0441\u0435\u043A\u0443\u043D\u0434","after 1 minute":"\u0427\u0435\u0440\u0435\u0437 1 \u043C\u0438\u043D\u0443\u0442\u0443","file system":"\u0421\u0438\u0441\u0442\u0435\u043C\u0430 \u0444\u0430\u0439\u043B\u043E\u0432",frontmatter:"YAML frontmatter","user or Linter edits":"\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0432 Obsidian","''":"''","\u2018\u2019":"\u2018\u2019",'""':'""',"\u201C\u201D":"\u201C\u201D","\\":"\\","
    ":"
    "," ":" ","
    ":"
    "}};var vd={};var kd={commands:{"lint-file":{name:"Ge\xE7erli dosyay\u0131 lintle","error-message":"Dosyada Lintleme Hatas\u0131"},"lint-file-unless-ignored":{name:"Yoksay\u0131lmad\u0131k\xE7a ge\xE7erli dosyay\u0131 lintle"},"lint-all-files":{name:"Kasadaki t\xFCm dosyalar\u0131 lintle","error-message":"Dosyada T\xFCm Dosyalar\u0131 Lintleme Hatas\u0131","success-message":"T\xFCm dosyalar lintlendi","errors-message-singular":"T\xFCm dosyalar lintlendi ve 1 hata vard\u0131.","errors-message-plural":"T\xFCm dosyalar lintlendi ve {NUM} hata vard\u0131.","start-message":"Bu, t\xFCm dosyalar\u0131n\u0131z\u0131 d\xFCzenler ve hatalara yol a\xE7abilir.","submit-button-text":"T\xFCm\xFCn\xFC Lintle","submit-button-notice-text":"T\xFCm dosyalar lintleniyor..."},"lint-all-files-in-folder":{name:"Ge\xE7erli klas\xF6rdeki t\xFCm dosyalar\u0131 lintle","start-message":"Bu, {FOLDER_NAME} dahilindeki t\xFCm dosyalar\u0131n\u0131z\u0131 ve alt klas\xF6rlerini d\xFCzenler ve hatalara yol a\xE7abilir.","submit-button-text":"{FOLDER_NAME} i\xE7indeki T\xFCm Dosyalar\u0131 Lintle","submit-button-notice-text":"{FOLDER_NAME} i\xE7indeki t\xFCm dosyalar lintleniyor...","error-message":"Klas\xF6rdeki T\xFCm Dosyalar\u0131 Lintleme Hatas\u0131 Dosyada","success-message":"{FOLDER_NAME} i\xE7indeki t\xFCm {NUM} dosya lintlendi.","message-singular":"{FOLDER_NAME} i\xE7indeki t\xFCm {NUM} dosya lintlendi ve 1 hata vard\u0131.","message-plural":"{FOLDER_NAME} i\xE7indeki t\xFCm {FILE_COUNT} dosya lintlendi ve {ERROR_COUNT} hata vard\u0131."},"paste-as-plain-text":{name:"D\xFCz Metin Olarak & Modifikasyonsuz Yap\u0131\u015Ft\u0131r"},"lint-file-pop-up-menu-text":{name:"Dosyay\u0131 lintle"},"lint-folder-pop-up-menu-text":{name:"Klas\xF6r\xFC lintle"}},logs:{"plugin-load":"Eklenti y\xFCkleniyor","plugin-unload":"Eklenti kald\u0131r\u0131l\u0131yor","folder-lint":"Klas\xF6r lintleniyor ","linter-run":"Lintleme \xE7al\u0131\u015Ft\u0131r\u0131l\u0131yor","paste-link-warning":"pano i\xE7eri\u011Fi bir link oldu\u011Fu ve yap\u0131\u015Ft\u0131rmay\u0131 de\u011Fi\u015Ftiren di\u011Fer eklentilerle \xE7ak\u0131\u015Fmay\u0131 \xF6nlemek i\xE7in lintleme yap\u0131\u015Ft\u0131rmas\u0131 iptal edildi.","see-console":"Daha fazla detay i\xE7in konsolu kontrol edin.","unknown-error":"Lintleme s\u0131ras\u0131nda bilinmeyen bir hata olu\u015Ftu.","moment-locale-not-found":"Moment.js yerelini {MOMENT_LOCALE} olarak de\u011Fi\u015Ftirmeye \xE7al\u0131\u015F\u0131yor, elde edilen {CURRENT_LOCALE}","file-change-lint-message-start":"Lintlendi","pre-rules":"normal kurallardan \xF6nceki kurallar","post-rules":"normal kurallardan sonraki kurallar","rule-running":"kurallar \xE7al\u0131\u015Ft\u0131r\u0131l\u0131yor","custom-regex":"\xF6zel regex kurallar\u0131","running-custom-regex":"\xD6zel Regex \xC7al\u0131\u015Ft\u0131r\u0131l\u0131yor","running-custom-lint-command":"\xD6zel Lint Komutlar\u0131 \xC7al\u0131\u015Ft\u0131r\u0131l\u0131yor","custom-lint-duplicate-warning":'Ayn\u0131 komutu ("{COMMAND_NAME}") \xF6zel bir lint kural\u0131 olarak iki kez \xE7al\u0131\u015Ft\u0131ramazs\u0131n\u0131z.',"custom-lint-error-message":"\xD6zel Lint Komutu Hatas\u0131","disabled-text":"devre d\u0131\u015F\u0131","run-rule-text":"\xC7al\u0131\u015Ft\u0131r\u0131l\u0131yor","timing-key-not-found":"'{TIMING_KEY}' zamanlama anahtar\u0131 zamanlama bilgisi listesinde bulunamad\u0131, bu y\xFCzden yoksay\u0131ld\u0131","milliseconds-abbreviation":"ms","invalid-date-format-error":"Olu\u015Fturulan tarih format\u0131 '{DATE}' ayr\u0131\u015Ft\u0131r\u0131lamad\u0131 veya belirlenemedi, bu y\xFCzden '{FILE_NAME}' dosyas\u0131ndaki olu\u015Fturulan tarih ayn\u0131 b\u0131rak\u0131ld\u0131","invalid-delimiter-error-message":"ayra\xE7 sadece tek bir karakter olabilir","missing-footnote-error-message":"'{FOOTNOTE}' dipnotunun i\xE7eri\u011Finden \xF6nce kar\u015F\u0131l\u0131k gelen bir dipnot referans\u0131 yok ve i\u015Flenemez. L\xFCtfen t\xFCm dipnotlar\u0131n, dipnot i\xE7eri\u011Finden \xF6nce kar\u015F\u0131l\u0131k gelen bir referans\u0131 oldu\u011Fundan emin olun.","too-many-footnotes-error-message":"'{FOOTNOTE_KEY}' dipnot anahtar\u0131 birden fazla dipnota at\u0131fta bulunuyor. L\xFCtfen dipnotlar\u0131 g\xFCncelleyin, b\xF6ylece her dipnot anahtar\u0131 i\xE7in yaln\u0131zca bir dipnot olur.","wrapper-yaml-error":"YAML'da hata: {ERROR_MESSAGE}","wrapper-unknown-error":"bilinmeyen hata: {ERROR_MESSAGE}"},"notice-text":{"empty-clipboard":"Panoda i\xE7erik yok.","characters-added":"karakterler eklendi","characters-removed":"karakterler kald\u0131r\u0131ld\u0131"},"all-rules-option":"T\xFCm\xFC","linter-title":"Linter","empty-search-results-text":"Arama ile e\u015Fle\u015Fen ayar bulunamad\u0131","warning-text":"Uyar\u0131","file-backup-text":"Dosyalar\u0131n\u0131z\u0131n yede\u011Fini ald\u0131\u011F\u0131n\u0131zdan emin olun.",tabs:{names:{general:"Genel",custom:"\xD6zel",yaml:"YAML",heading:"Ba\u015Fl\u0131k",content:"\u0130\xE7erik",footnote:"Dipnot",spacing:"Bo\u015Fluk",paste:"Yap\u0131\u015Ft\u0131r",debug:"Hata ay\u0131kla"},"default-search-bar-text":"T\xFCm ayarlar\u0131 ara",general:{"lint-on-save":{name:"Kaydederken d\xFCzelt",description:"Manuel kaydetme (Ctrl + S tu\u015Funa bas\u0131ld\u0131\u011F\u0131nda veya vim tu\u015F ba\u011Flamalar\u0131n\u0131 kullan\u0131rken :w komutu \xE7al\u0131\u015Ft\u0131r\u0131ld\u0131\u011F\u0131nda) dosyay\u0131 d\xFCzeltir"},"display-message":{name:"D\xFCzeltme sonras\u0131 mesaj\u0131 g\xF6ster",description:"D\xFCzeltme sonras\u0131 de\u011Fi\u015Fen karakter say\u0131s\u0131n\u0131 g\xF6sterir"},"lint-on-file-change":{name:"Dosya De\u011Fi\u015Fikli\u011Finde D\xFCzeltme",description:"Bir dosya kapat\u0131ld\u0131\u011F\u0131nda veya yeni bir dosya a\xE7\u0131ld\u0131\u011F\u0131nda, \xF6nceki dosya d\xFCzeltilir."},"display-lint-on-file-change-message":{name:"Dosya De\u011Fi\u015Fikli\u011Finde D\xFCzeltme Mesaj\u0131n\u0131 G\xF6ster",description:"Dosya De\u011Fi\u015Fikli\u011Finde D\xFCzeltme oldu\u011Funda bir mesaj g\xF6sterir"},"folders-to-ignore":{name:"Yoksay\u0131lacak klas\xF6rler",description:"T\xFCm dosyalar\u0131 d\xFCzeltirken veya kaydederken d\xFCzeltme i\u015Fleminin yoksay\u0131laca\u011F\u0131 klas\xF6rler. Klas\xF6r yollar\u0131n\u0131 yeni sat\u0131rlarla ay\u0131rarak girin"},"override-locale":{name:"Yerel ayarlar\u0131n \xFCzerine yaz",description:"Varsay\u0131lan\u0131n d\u0131\u015F\u0131nda bir yerel ayar kullanmak istiyorsan\u0131z bunu ayarlay\u0131n"},"same-as-system-locale":"Sistemle ayn\u0131 ({SYS_LOCALE})","yaml-aliases-section-style":{name:"YAML takma adlar\u0131 b\xF6l\xFCm\xFC stili",description:"YAML takma adlar\u0131 b\xF6l\xFCm\xFCn\xFCn stili"},"yaml-tags-section-style":{name:"YAML etiketleri b\xF6l\xFCm\xFC stili",description:"YAML etiketleri b\xF6l\xFCm\xFCn\xFCn stili"},"default-escape-character":{name:"Varsay\u0131lan Ka\xE7\u0131\u015F Karakteri",description:"Tek t\u0131rnak ve \xE7ift t\u0131rnak bulunmayan YAML de\u011Ferlerinden ka\xE7mak i\xE7in kullan\u0131lacak varsay\u0131lan karakter."},"remove-unnecessary-escape-chars-in-multi-line-arrays":{name:"\xC7ok Sat\u0131rl\u0131 Dizi Format\u0131ndayken Gereksiz Ka\xE7\u0131\u015F Karakterlerini Kald\u0131r",description:"\xC7ok sat\u0131rl\u0131 YAML dizileri i\xE7in ka\xE7\u0131\u015F karakterleri tek sat\u0131rl\u0131 dizilere g\xF6re ayn\u0131 ka\xE7\u0131\u015Fa ihtiya\xE7 duymaz, bu y\xFCzden \xE7ok sat\u0131rl\u0131 format i\xE7erisinde gerekli olmayan ekstra ka\xE7\u0131\u015Flar\u0131 kald\u0131r\u0131r"},"number-of-dollar-signs-to-indicate-math-block":{name:"Matematiksel Blo\u011Fu Belirtmek \u0130\xE7in Dolar \u0130\u015Fareti Say\u0131s\u0131",description:"Matematik i\xE7eri\u011Finin bir matematiksel blok yerine inline matematik olup olmad\u0131\u011F\u0131n\u0131 belirlemek i\xE7in kullan\u0131lacak dolar i\u015Fareti say\u0131s\u0131"}},debug:{"log-level":{name:"Log D\xFCzeyi",description:"Hizmetin loglamaya izin verdi\u011Fi log t\xFCrleri. Varsay\u0131lan ERROR'dur."},"linter-config":{name:"Linter Yap\u0131land\u0131rmas\u0131",description:"Ayar sayfas\u0131n\u0131n y\xFCklenmesi s\u0131ras\u0131nda Linter i\xE7in data.json i\xE7eri\u011Fi"},"log-collection":{name:"Kaydetme d\xFCzeltmesi ve mevcut dosyan\u0131n d\xFCzeltilmesi s\u0131ras\u0131nda loglar\u0131 topla",description:"Kaydetme d\xFCzeltmesi yapt\u0131\u011F\u0131n\u0131zda ve mevcut dosyay\u0131 d\xFCzeltirken loglar\u0131 toplar. Bu loglar hata ay\u0131klama ve hata raporlar\u0131 olu\u015Fturma i\xE7in yard\u0131mc\u0131 olabilir."},"linter-logs":{name:"Linter Loglar\u0131",description:"Son Kaydetme d\xFCzeltmesi veya son mevcut dosya \xE7al\u0131\u015Ft\u0131rmas\u0131ndan elde edilen loglar (e\u011Fer etkinle\u015Ftirilmi\u015Fse)."}}},options:{"custom-command":{name:"\xD6zel Komutlar",description:"\xD6zel komutlar, linter normal kurallar\u0131n\u0131 \xE7al\u0131\u015Ft\u0131rmay\u0131 bitirdikten sonra \xE7al\u0131\u015Ft\u0131r\u0131lan Obsidyen komutlard\u0131r. Bu, YAML zaman damgas\u0131 mant\u0131\u011F\u0131 \xE7al\u0131\u015Fmadan \xF6nce \xE7al\u0131\u015Fmad\u0131klar\u0131 anlam\u0131na gelir, dolay\u0131s\u0131yla linterin bir sonraki \xE7al\u0131\u015Fmas\u0131nda YAML zaman damgas\u0131n\u0131n tetiklenmesine neden olabilirler. Bir Obsidyen komutunu yaln\u0131zca bir kez se\xE7ebilirsiniz.",warning:"Bir se\xE7ene\u011Fi se\xE7erken, se\xE7ene\u011Fi fareyi kullanarak veya enter tu\u015Funa basarak se\xE7ti\u011Finizden emin olun. Di\u011Fer se\xE7im y\xF6ntemleri \xE7al\u0131\u015Fmayabilir ve yaln\u0131zca ger\xE7ek bir Obsidian komutunun veya bo\u015F bir dizinin se\xE7imleri kaydedilir.","add-input-button-text":"Yeni komut ekle","command-search-placeholder-text":"Obsidian komutu","move-up-tooltip":"Yukar\u0131","move-down-tooltip":"A\u015Fa\u011F\u0131","delete-tooltip":"Sil"},"custom-replace":{name:"\xD6zel Regex De\u011Fi\u015Ftirme",description:"\xD6zel regex de\u011Fi\u015Ftirme, bulunan regex ile e\u015Fle\u015Fen her \u015Feyi de\u011Fi\u015Ftirme de\u011Feri ile de\u011Fi\u015Ftirmek i\xE7in kullan\u0131labilir. De\u011Fi\u015Ftirme ve bulma de\u011Ferleri ge\xE7erli regex de\u011Ferleri olmal\u0131d\u0131r.",warning:"Regex hakk\u0131nda bilginiz yoksa dikkatli kullan\u0131n. Ayr\u0131ca, l\xFCtle iOS mobil platformunda regexinizde geriye d\xF6n\xFCk aramalar\u0131 kullanmay\u0131n \xE7\xFCnk\xFC bu, o platformda desteklenmedi\u011Fi i\xE7in lint i\u015Fleminin ba\u015Far\u0131s\u0131z olmas\u0131na neden olur.","add-input-button-text":"Yeni regex de\u011Fi\u015Ftirme ekle","regex-to-find-placeholder-text":"bulunacak regex","flags-placeholder-text":"bayraklar","regex-to-replace-placeholder-text":"de\u011Fi\u015Ftirilecek regex","label-placeholder-text":"etiket","move-up-tooltip":"Yukar\u0131 ta\u015F\u0131","move-down-tooltip":"A\u015Fa\u011F\u0131 ta\u015F\u0131","delete-tooltip":"Sil"}},rules:{"auto-correct-common-misspellings":{name:"Yayg\u0131n Yanl\u0131\u015F Yaz\u0131mlar\u0131 Otomatik D\xFCzelt",description:'Yayg\u0131n yanl\u0131\u015F yaz\u0131mlar\u0131n s\xF6zl\xFC\u011F\xFCn\xFC kullanarak bunlar\u0131 do\u011Fru yaz\u0131mlar\u0131na otomatik olarak d\xF6n\xFC\u015Ft\xFCr\xFCr. Otomatik d\xFCzeltilen kelimelerin tam listesi i\xE7in otomatik-d\xFCzeltme haritas\u0131na bak\u0131n.',"ignore-words":{name:"Kelimeleri Yoksay",description:"Otomatik d\xFCzeltme s\u0131ras\u0131nda yoksay\u0131lacak k\xFC\xE7\xFCk harfli kelimelerin virg\xFClle ayr\u0131lm\u0131\u015F listesi"}},"add-blockquote-indentation-on-paste":{name:"Yap\u0131\u015Ft\u0131rma S\u0131ras\u0131nda Blok Al\u0131nt\u0131 Girintisini Ekle",description:"\u0130mle\xE7 bir blok al\u0131nt\u0131/callout sat\u0131r\u0131nda oldu\u011Funda, t\xFCm sat\u0131rlara, ilk sat\u0131r hari\xE7, blok al\u0131nt\u0131lar ekler"},"blockquote-style":{name:"Blok Al\u0131nt\u0131 Stili",description:"Blok al\u0131nt\u0131 stili tutarl\u0131 olmal\u0131d\u0131r.",style:{name:"Stil",description:"Blok al\u0131nt\u0131 g\xF6stergelerinde kullan\u0131lan stil"}},"capitalize-headings":{name:"B\xFCy\xFCk Harfli Ba\u015Fl\u0131klar",description:"Ba\u015Fl\u0131klar b\xFCy\xFCk harfle bi\xE7imlendirilmelidir",style:{name:"Stil",description:"Kullan\u0131lacak b\xFCy\xFCk harfle ba\u015Flatma stili"},"ignore-case-words":{name:"Durum S\xF6zc\xFCklerini Yoksay",description:"Ba\u015Fl\u0131k durum stilini sadece t\xFCm k\xFC\xE7\xFCk harfli s\xF6zc\xFCklere uygula"},"ignore-words":{name:"S\xF6zc\xFCkleri Yoksay",description:"B\xFCy\xFCk harfle ba\u015Flat\u0131rken yoksay\u0131lacak s\xF6zc\xFCklerin virg\xFClle ayr\u0131lm\u0131\u015F listesi"},"lowercase-words":{name:"K\xFC\xE7\xFCk Harfli S\xF6zc\xFCkler",description:"K\xFC\xE7\xFCk harfli tutulacak s\xF6zc\xFCklerin virg\xFClle ayr\u0131lm\u0131\u015F listesi"}},"compact-yaml":{name:"S\u0131k\u0131\u015Ft\u0131r\u0131lm\u0131\u015F YAML",description:"YAML \xF6n bilgisindeki ba\u015Ftaki ve sondaki bo\u015F sat\u0131rlar\u0131 kald\u0131r\u0131r.","inner-new-lines":{name:"\u0130\xE7 Yeni Sat\u0131rlar",description:"YAML'\u0131n ba\u015F\u0131nda veya sonunda olmayan yeni sat\u0131rlar\u0131 kald\u0131r\u0131r."}},"consecutive-blank-lines":{name:"Ard\u0131\u015F\u0131k bo\u015F sat\u0131rlar",description:"En fazla bir ard\u0131\u015F\u0131k bo\u015F sat\u0131r olmal\u0131d\u0131r."},"convert-bullet-list-markers":{name:"Bullet List Markerlar\u0131n\u0131 D\xF6n\xFC\u015Ft\xFCr",description:"Bullet list marker sembollerini markdown list markerlar\u0131na d\xF6n\xFC\u015Ft\xFCr\xFCr."},"convert-spaces-to-tabs":{name:"Bo\u015Fluklar\u0131 Sekmeye D\xF6n\xFC\u015Ft\xFCr",description:"Ba\u015Ftaki bo\u015Fluklar\u0131 sekmeye d\xF6n\xFC\u015Ft\xFCr\xFCr.",tabsize:{name:"Sekme Boyutu",description:"Bir sekme haline d\xF6n\xFC\u015Ft\xFCr\xFClecek bo\u015Fluk say\u0131s\u0131"}},"emphasis-style":{name:"Vurgu Stili",description:"Vurgu stilinin tutarl\u0131 olmas\u0131n\u0131 sa\u011Flar.",style:{name:"Stil",description:"Vurgulanan i\xE7eri\u011Fi belirtmek i\xE7in kullan\u0131lan stil"}},"empty-line-around-blockquotes":{name:"Al\u0131nt\u0131 Bloklar\u0131n\u0131n Etraf\u0131nda Bo\u015F Sat\u0131r",description:"Bir belgenin ba\u015F\u0131n\u0131 veya sonunu ba\u015Flatmayan al\u0131nt\u0131 bloklar\u0131n etraf\u0131nda bo\u015F bir sat\u0131r olmal\u0131d\u0131r.Not: bo\u015F bir sat\u0131r ya al\u0131nt\u0131 bloklar i\xE7in bir seviye daha az girinti veya yeni bir sat\u0131r karakteri demektir."},"empty-line-around-code-fences":{name:"Kod \xC7itlerinin Etraf\u0131nda Bo\u015F Sat\u0131r",description:"Bir belgenin ba\u015F\u0131n\u0131 veya sonunu ba\u015Flatmayan kod \xE7itlerinin etraf\u0131nda bo\u015F bir sat\u0131r olmal\u0131d\u0131r."},"empty-line-around-math-blocks":{name:"Matematik Bloklar\u0131n\u0131n Etraf\u0131nda Bo\u015F Sat\u0131r",description:"Tek sat\u0131rl\u0131k matematik i\xE7in bir matematik blo\u011Funu belirtmek i\xE7in ka\xE7 dolar i\u015Fareti oldu\u011Funu belirleyen Dolar \u0130\u015Faretlerinin Say\u0131s\u0131yla Matematik Blo\u011Funu Belirt kullan\u0131larak matematik bloklar\u0131n\u0131n etraf\u0131nda bo\u015F bir sat\u0131r olmal\u0131d\u0131r."},"empty-line-around-tables":{name:"Tablolar\u0131n Etraf\u0131nda Bo\u015F Sat\u0131r",description:"Bir belgenin ba\u015F\u0131n\u0131 veya sonunu ba\u015Flatmayan github flavored tablolar\u0131n etraf\u0131nda bo\u015F bir sat\u0131r olmal\u0131d\u0131r."},"escape-yaml-special-characters":{name:"YAML \xD6zel Karakterlerine Ka\xE7\u0131\u015F \u0130\u015Flemi Yap",description:`YAML i\xE7indeki bo\u015Flukla beraber gelen iki nokta \xFCst \xFCste (:), tek t\u0131rnak (') ve \xE7ift t\u0131rnak (") karakterlerini ka\xE7\u0131\u015F i\u015Flemine tabi tutar.`,"try-to-escape-single-line-arrays":{name:"Tek Sat\u0131rl\u0131k Listeleri Ka\xE7\u0131\u015F Denemesi",description:'Bir dizinin "[" ile ba\u015Flad\u0131\u011F\u0131n\u0131, "]" ile bitti\u011Fini ve \xF6\u011Felerin "," ile ayr\u0131ld\u0131\u011F\u0131n\u0131 varsayarak dizi de\u011Ferlerini ka\xE7\u0131\u015F i\u015Flemine tabi tutmaya \xE7al\u0131\u015F\u0131r.'}},"file-name-heading":{name:"Dosya Ad\u0131 Ba\u015Fl\u0131\u011F\u0131",description:"E\u011Fer hi\xE7 H1 ba\u015Fl\u0131\u011F\u0131 yoksa dosya ad\u0131n\u0131 H1 ba\u015Fl\u0131\u011F\u0131 olarak ekler."},"footnote-after-punctuation":{name:"Noktalama \u0130\u015Faretinden Sonra Dipnot",description:"Dipnot referanslar\u0131n\u0131n noktalama i\u015Faretinden \xF6nce de\u011Fil, sonra yerle\u015Ftirildi\u011Finden emin olur."},"force-yaml-escape":{name:"YAML Ka\xE7\u0131\u015F\u0131n\u0131 Zorla",description:"Belirtilen YAML anahtarlar\u0131 i\xE7in ka\xE7\u0131\u015F de\u011Ferleri.","force-yaml-escape-keys":{name:"Anahtarlarda YAML Ka\xE7\u0131\u015F\u0131n\u0131 Zorla",description:"Yeni bir sat\u0131r karakteri ile ayr\u0131lm\u0131\u015F belirtilen YAML anahtarlar\u0131nda YAML ka\xE7\u0131\u015F karakterini kullan\u0131r, e\u011Fer zaten ka\xE7\u0131\u015F yap\u0131lmam\u0131\u015Fsa. YAML dizilerinde kullanmay\u0131n"}},"format-tags-in-yaml":{name:"YAML Etiketlerini Bi\xE7imlendir",description:"YAML \xF6n madde i\xE7indeki etiketlerden hashtagleri kald\u0131r\u0131r, \xE7\xFCnk\xFC bunlar etiketleri ge\xE7ersiz k\u0131lar."},"format-yaml-array":{name:"YAML Dizisini Bi\xE7imlendir",description:"Normal YAML dizilerinin \xE7ok sat\u0131rl\u0131 veya tek sat\u0131rl\u0131 olarak bi\xE7imlendirilmesine izin verir ve tags ve aliases baz\u0131 Obsidian \xF6zg\xFC \xF6zelliklerine sahip YAML formatlar\u0131nda bulunabilir.Not: Tek giri\u015Fli bir diziden birden fazla giri\u015Fi olan tek sat\u0131rl\u0131 bir diziye ge\xE7mek ayn\u0131d\u0131r, tek fark \xE7ok sat\u0131rl\u0131 bir dizi olmas\u0131d\u0131r.","alias-key":{name:"YAML takma adlar\u0131 b\xF6l\xFCm\xFCn\xFC bi\xE7imlendir",description:"YAML takma adlar\u0131 b\xF6l\xFCm\xFC i\xE7in bi\xE7imlendirmeyi a\xE7ar. Bu se\xE7ene\u011Fi YAML Title Alias kural\u0131yla birlikte kullanmaman\u0131z \xF6nerilir \xE7\xFCnk\xFC birlikte d\xFCzg\xFCn \xE7al\u0131\u015Fmayabilir veya farkl\u0131 bi\xE7imlendirme stilleri se\xE7ilmi\u015F olabilir, bu beklenmeyen sonu\xE7lara yol a\xE7abilir."},"tag-key":{name:"YAML etiketleri b\xF6l\xFCm\xFCn\xFC bi\xE7imlendir",description:"YAML etiketleri b\xF6l\xFCm\xFC i\xE7in bi\xE7imlendirmeyi a\xE7ar."},"default-array-style":{name:"Varsay\u0131lan YAML dizi b\xF6l\xFCm\xFC stili",description:"tags, aliases veya Force key values to be single-line arrays ve Force key values to be multi-line arrays olmayan di\u011Fer YAML dizilerinin stili"},"default-array-keys":{name:"YAML dizi b\xF6l\xFCmlerini bi\xE7imlendir",description:"Normal YAML dizileri i\xE7in bi\xE7imlendirmeyi a\xE7ar"},"force-single-line-array-style":{name:"Anahtar de\u011Ferlerini tek sat\u0131rl\u0131 dizilere zorla",description:"Yeni sat\u0131r ile ayr\u0131lan anahtarlar i\xE7in YAML dizisini tek sat\u0131rl\u0131 formatta olmaya zorlar (bu se\xE7ene\u011Fi devre d\u0131\u015F\u0131 b\u0131rakmak i\xE7in bo\u015F b\u0131rak\u0131n)"},"force-multi-line-array-style":{name:"Anahtar de\u011Ferlerini \xE7ok sat\u0131rl\u0131 dizilere zorla",description:"Yeni sat\u0131r ile ayr\u0131lan anahtarlar i\xE7in YAML dizisini \xE7ok sat\u0131rl\u0131 formatta olmaya zorlar (bu se\xE7ene\u011Fi devre d\u0131\u015F\u0131 b\u0131rakmak i\xE7in bo\u015F b\u0131rak\u0131n)"}},"header-increment":{name:"Ba\u015Fl\u0131k Art\u0131r\u0131m\u0131",description:"Ba\u015Fl\u0131k seviyeleri bir seferde sadece bir seviye artmal\u0131d\u0131r","start-at-h2":{name:"Ba\u015Fl\u0131k Art\u0131r\u0131m\u0131n\u0131 Ba\u015Fl\u0131k Seviyesi 2\u2019de Ba\u015Flat",description:"Bir dosyadaki minimum ba\u015Fl\u0131k seviyesini ba\u015Fl\u0131k seviyesi 2 yapar ve buna g\xF6re t\xFCm ba\u015Fl\u0131klar\u0131 kayd\u0131r\u0131r, b\xF6ylece ba\u015Fl\u0131k art\u0131\u015F\u0131 seviye 2 ba\u015Fl\u0131\u011F\u0131 ile ba\u015Flar."}},"heading-blank-lines":{name:"Ba\u015Fl\u0131k Bo\u015F Sat\u0131rlar\u0131",description:"T\xFCm ba\u015Fl\u0131klar\u0131n hem \xF6ncesinde hem de sonras\u0131nda birer bo\u015F sat\u0131r olmal\u0131d\u0131r (ba\u015Fl\u0131k belgenin ba\u015F\u0131nda veya sonunda oldu\u011Funda bu durum ge\xE7erli de\u011Fildir).",bottom:{name:"Alt",description:"Ba\u015Fl\u0131klar\u0131n sonras\u0131na bo\u015F sat\u0131r ekler"},"empty-line-after-yaml":{name:"YAML ve Ba\u015Fl\u0131k Aras\u0131nda Bo\u015F Sat\u0131r",description:"YAML \xF6n madde ve ba\u015Fl\u0131k aras\u0131ndaki bo\u015F sat\u0131r\u0131 korur"}},"headings-start-line":{name:"Ba\u015Fl\u0131klar Sat\u0131r\u0131 Ba\u015Flat\u0131r",description:"Bir sat\u0131r\u0131 ba\u015Flatmayan ba\u015Fl\u0131klar\u0131n \xF6ncesi bo\u015Fluklar\u0131 kald\u0131r\u0131l\u0131r ki ba\u015Fl\u0131klar ba\u015Fl\u0131k olarak tan\u0131nabilsin."},"insert-yaml-attributes":{name:"YAML \xD6zniteliklerini Ekle",description:"Verilen YAML \xF6zniteliklerini YAML \xF6n maddesine ekler. Her \xF6zniteli\u011Fi tek bir sat\u0131ra koyun.","text-to-insert":{name:"Eklenecek metin",description:"YAML \xF6n maddesine eklenen metin"}},"line-break-at-document-end":{name:"Belge Sonunda Sat\u0131r Sonu",description:"Bir belgenin sonunda tam olarak bir sat\u0131r sonu oldu\u011Funu garanti eder."},"move-footnotes-to-the-bottom":{name:"Dipnotlar\u0131 Altbilgiye Ta\u015F\u0131",description:"T\xFCm dipnotlar\u0131 belgenin alt\u0131na ta\u015F\u0131r."},"move-math-block-indicators-to-their-own-line":{name:"Matematik Blok G\xF6stergelerini Kendi Sat\u0131rlar\u0131na Ta\u015F\u0131",description:'Tek sat\u0131rl\u0131 matematik i\xE7in ka\xE7 dolar i\u015Faretinin bir matematik blo\u011Funu g\xF6sterdi\u011Fini belirlemek i\xE7in "Bir Matematik Blo\u011Fu G\xF6stermek \u0130\xE7in Dolar \u0130\u015Fareti Say\u0131s\u0131"n\u0131 kullanarak t\xFCm ba\u015Flang\u0131\xE7 ve biti\u015F matematik blo\u011Fu g\xF6stergelerini kendi sat\u0131rlar\u0131na ta\u015F\u0131y\u0131n.'},"move-tags-to-yaml":{name:"Etiketleri YAML'a Ta\u015F\u0131",description:"T\xFCm etiketleri belgenin YAML \xF6n maddesine ta\u015F\u0131r.","how-to-handle-existing-tags":{name:"Metin i\xE7indeki etiket i\u015Flemi",description:"\xD6n maddeye ta\u015F\u0131nd\u0131ktan sonra dosyan\u0131n i\xE7eri\u011Finde bulunan ve yoksay\u0131lmayan etiketlerle ne yap\u0131laca\u011F\u0131"},"tags-to-ignore":{name:"Yoksay\u0131lacak etiketler",description:"\u0130\xE7erik g\xF6vdesindeki hashtag'lerden kald\u0131rma etkinle\u015Ftirilmi\u015Fse, etiketler dizisine ta\u015F\u0131nmayacak veya i\xE7erik g\xF6vdesinden kald\u0131r\u0131lmayacak etiketler. Her etiket yeni bir sat\u0131rda ve # olmadan olmal\u0131d\u0131r.Etiket ad\u0131nda hashtag i\xE7ermedi\u011Finizden emin olun."}},"no-bare-urls":{name:"Yal\u0131n URL'ler Olmas\u0131n",description:"Yal\u0131n URL'leri a\xE7\u0131l\u0131 ayra\xE7lar ile ku\u015Fat\u0131r, tek veya \xE7ift t\u0131rnak, k\xF6\u015Feli parantez veya e\u011Fik kesme i\u015Fareti i\xE7inde de\u011Filse."},"ordered-list-style":{name:"S\u0131ral\u0131 Liste Stili",description:"S\u0131ral\u0131 listelerin belirtilen stili izlemesini sa\u011Flar.Not: 2 bo\u015Fluk veya 1 sekme bir girinti seviyesi olarak kabul edilir.","number-style":{name:"Numara Stili",description:"S\u0131ral\u0131 liste g\xF6stergelerinde kullan\u0131lan numara stili"},"list-end-style":{name:"S\u0131ral\u0131 Liste G\xF6sterge Sonu Stili",description:"Bir s\u0131ral\u0131 liste g\xF6stergesinin biti\u015F karakteri"}},"paragraph-blank-lines":{name:"Paragraf Bo\u015F Sat\u0131rlar\u0131",description:"T\xFCm paragraflar\u0131n hem \xF6nce hem sonra tam olarak bir bo\u015F sat\u0131r\u0131 olmal\u0131d\u0131r."},"prevent-double-checklist-indicator-on-paste":{name:"Yap\u0131\u015Ft\u0131rmada \xC7ift Kontrol Listesi G\xF6stergesini \xD6nle",description:"Kurs\xF6r\xFCn dosyadaki sat\u0131rda bir kontrol listesi g\xF6stergesi varsa, yap\u0131\u015Ft\u0131r\u0131lacak metinden ba\u015Flang\u0131\xE7 kontrol listesi g\xF6stergesini kald\u0131r\u0131r"},"prevent-double-list-item-indicator-on-paste":{name:"Yap\u0131\u015Ft\u0131rmada \xC7ift Liste \xD6\u011Fesi G\xF6stergesini \xD6nle",description:"Kurs\xF6r\xFCn dosyadaki sat\u0131rda bir liste g\xF6stergesi varsa, yap\u0131\u015Ft\u0131r\u0131lacak metinden ba\u015Flang\u0131\xE7 listesi g\xF6stergesini kald\u0131r\u0131r"},"proper-ellipsis-on-paste":{name:"Yap\u0131\u015Ft\u0131rmada Uygun \xDC\xE7 Nokta",description:"Yap\u0131\u015Ft\u0131r\u0131lacak metinde aralar\u0131nda bo\u015Fluk olsa bile ard\u0131\u015F\u0131k \xFC\xE7 noktay\u0131, \xFC\xE7 nokta karakteriyle ile de\u011Fi\u015Ftirir"},"proper-ellipsis":{name:"Uygun \xDC\xE7 Nokta",description:"Ard\u0131\u015F\u0131k \xFC\xE7 tane noktay\u0131, \xFC\xE7 nokta karakteriyle de\u011Fi\u015Ftirir."},"quote-style":{name:"\xFC\xE7 nokta karakteriyle",description:"G\xF6vde i\xE7eri\u011Findeki al\u0131nt\u0131lar\u0131 belirtilen tek ve \xE7ift al\u0131nt\u0131 stillerine g\xFCnceller.","single-quote-enabled":{name:"Tek Al\u0131nt\u0131 Stili Kullan\u0131m\u0131",description:"Se\xE7ilen tek al\u0131nt\u0131 stilinin kullan\u0131laca\u011F\u0131n\u0131 belirtir."},"single-quote-style":{name:"Tek Al\u0131nt\u0131 Stili",description:"Kullan\u0131lacak tek al\u0131nt\u0131 stilidir."},"double-quote-enabled":{name:"\xC7ift Al\u0131nt\u0131 Stili Kullan\u0131m\u0131",description:"Se\xE7ilen \xE7ift al\u0131nt\u0131 stilinin kullan\u0131laca\u011F\u0131n\u0131 belirtir."},"double-quote-style":{name:"\xC7ift Al\u0131nt\u0131 Stili",description:"Kullan\u0131lacak \xE7ift al\u0131nt\u0131 stilidir."}},"re-index-footnotes":{name:"Dipnotlar\u0131 Yeniden \u0130ndeksle",description:"Dipnot anahtarlar\u0131n\u0131 ve dipnotlar\u0131, olu\u015Fum s\u0131ras\u0131na g\xF6re yeniden indeksler.Not: Bir anahtar i\xE7in birden fazla dipnot varsa, bu kural \xE7al\u0131\u015Fmaz."},"remove-consecutive-list-markers":{name:"Ard\u0131\u015F\u0131k Liste \u0130\u015Faretlerini Kald\u0131r",description:"Ard\u0131\u015F\u0131k liste i\u015Faretlerini kald\u0131r\u0131r. Liste \xF6\u011Felerini kopyala-yap\u0131\u015Ft\u0131r yaparken kullan\u0131\u015Fl\u0131d\u0131r."},"remove-empty-lines-between-list-markers-and-checklists":{name:"Liste \u0130\u015Faretleri ve Kontrol Listeleri Aras\u0131ndaki Bo\u015F Sat\u0131rlar\u0131 Kald\u0131r",description:"Liste i\u015Faretleri ve kontrol listeleri aras\u0131nda bo\u015F sat\u0131r olmamal\u0131d\u0131r."},"remove-empty-list-markers":{name:"Bo\u015F Liste \u0130\u015Faret\xE7ilerini Kald\u0131r",description:"Bo\u015F liste i\u015Faret\xE7ilerini, yani i\xE7eriksiz liste \xF6\u011Felerini kald\u0131r\u0131r."},"remove-hyphenated-line-breaks":{name:"Tireli Sat\u0131r Sonlar\u0131n\u0131 Kald\u0131r",description:"Removes hyphenated line breaks. Useful when pasting text from textbooks."},"remove-hyphens-on-paste":{name:"Yap\u0131\u015Ft\u0131r\u0131rken Tireleri Kald\u0131r",description:"Yap\u0131\u015Ft\u0131r\u0131lacak metindeki tireleri kald\u0131r\u0131r"},"remove-leading-or-trailing-whitespace-on-paste":{name:"Yap\u0131\u015Ft\u0131rda \xD6ndeki veya Sondaki Bo\u015Fluklar\u0131 Kald\u0131r",description:"Yap\u0131\u015Ft\u0131r\u0131lacak metnin ba\u015F\u0131ndaki sekme olmayan bo\u015Fluklar\u0131 ve sonundaki t\xFCm bo\u015Fluklar\u0131 kald\u0131r\u0131r"},"remove-leftover-footnotes-from-quote-on-paste":{name:"Yap\u0131\u015Ft\u0131rmada Al\u0131nt\u0131dan Kalan Dipnotlar\u0131 Kald\u0131r",description:"Yap\u0131\u015Ft\u0131r\u0131lacak metinden herhangi bir kal\u0131nt\u0131 dipnot referanslar\u0131n\u0131 kald\u0131r\u0131r"},"remove-link-spacing":{name:"Link Aral\u0131\u011F\u0131n\u0131 Kald\u0131r",description:"Link metninin etraf\u0131ndaki bo\u015Fluklar\u0131 kald\u0131r\u0131r."},"remove-multiple-blank-lines-on-paste":{name:"Yap\u0131\u015Ft\u0131r\u0131rken Birden Fazla Bo\u015F Sat\u0131r\u0131 Kald\u0131r",description:"Metnin yap\u0131\u015Ft\u0131r\u0131lmas\u0131 i\xE7in birden \xE7ok bo\u015F sat\u0131r\u0131 tek bir bo\u015F sat\u0131ra s\u0131k\u0131\u015Ft\u0131r\u0131r"},"remove-multiple-spaces":{name:"Birden Fazla Bo\u015Flu\u011Fu Kald\u0131r",description:"\u0130ki veya daha fazla ard\u0131\u015F\u0131k bo\u015Flu\u011Fu kald\u0131r\u0131r. Sat\u0131r\u0131n ba\u015F\u0131ndaki ve sonundaki bo\u015Fluklar\u0131 g\xF6rmezden gelir. "},"remove-space-around-characters":{name:"Karakterler Etraf\u0131ndaki Bo\u015Flu\u011Fu Kald\u0131r",description:"Belirli karakterlerin bo\u015Fluklarla (tek bo\u015Fluk veya sekme) \xE7evrelenmemesini sa\u011Flar.Not: Bu, baz\u0131 durumlarda indirim bi\xE7imiyle ilgili sorunlara neden olabilir.","include-fullwidth-forms":{name:"Tam Geni\u015Flikte Formlar\u0131 Dahil Et",description:'Tam Geni\u015Flikte Formlar Unicode blo\u011Funu dahil eder'},"include-cjk-symbols-and-punctuation":{name:"CJK Sembol ve Noktalama \u0130\u015Faretlerini Dahil Et",description:'CJK Sembol ve Noktalama Unicode blo\u011Funu dahil eder'},"include-dashes":{name:"Tireleri Dahil Et",description:"En tire (\u2013) ve em tireyi (\u2014) dahil eder"},"other-symbols":{name:"Di\u011Fer Semboller",description:"Dahil edilecek di\u011Fer semboller"}},"remove-space-before-or-after-characters":{name:"Karakterlerden \xD6nce veya Sonra Bo\u015Flu\u011Fu Kald\u0131r",description:"Belirtilen karakterlerden \xF6nceki ve sonraki bo\u015Flu\u011Fu kald\u0131r\u0131r.Not: bu durum baz\u0131 durumlarda markdown format\u0131nda sorunlara neden olabilir.","characters-to-remove-space-before":{name:"\xD6nceki Bo\u015Flu\u011Fu Kald\u0131r\u0131lacak Karakterler",description:"Belirtilen karakterlerden \xF6nceki bo\u015Flu\u011Fu kald\u0131r\u0131r.Not: karakter listesinde { veya } kullanmak, sahne arkas\u0131nda yoksayma s\xF6zdizimi kullan\u0131ld\u0131\u011F\u0131 i\xE7in dosyalar\u0131 beklenmedik \u015Fekilde etkiler."},"characters-to-remove-space-after":{name:"Sonraki Bo\u015Flu\u011Fu Kald\u0131r\u0131lacak Karakterler",description:"Belirtilen karakterlerden sonraki bo\u015Flu\u011Fu kald\u0131r\u0131r.Not: karakter listesinde { veya } kullanmak, sahne arkas\u0131nda yoksayma s\xF6zdizimi kullan\u0131ld\u0131\u011F\u0131 i\xE7in dosyalar\u0131 beklenmedik \u015Fekilde etkiler."}},"remove-trailing-punctuation-in-heading":{name:"Ba\u015Fl\u0131klardaki Son Noktalama \u0130\u015Faretlerini Kald\u0131r",description:'Belirtilen noktalama i\u015Faretlerini ba\u015Fl\u0131klar\u0131n sonundan kald\u0131r\u0131r ve HTML varl\u0131k referanslar\u0131n\u0131n sonundaki noktal\u0131 virg\xFCl\xFC yoksayar.',"punctuation-to-remove":{name:"Sondaki Noktalama",description:"Dosyadaki ba\u015Fl\u0131klardan kald\u0131r\u0131lacak noktalama i\u015Faretleri."}},"remove-yaml-keys":{name:"YAML Anahtarlar\u0131n\u0131 Kald\u0131r",description:"Belirtilen YAML anahtarlar\u0131n\u0131 kald\u0131r\u0131r","yaml-keys-to-remove":{name:"Kald\u0131r\u0131lacak YAML Anahtarlar\u0131",description:"YAML \xF6n maddesinden iki nokta \xFCst \xFCste ile veya olmadan kald\u0131r\u0131lacak YAML anahtarlar\u0131"}},"space-after-list-markers":{name:"Liste \u0130\u015Faretlerinden Sonra Bo\u015Fluk",description:"Liste i\u015Faretleri ve onay kutular\u0131ndan sonra tek bir bo\u015Fluk olmal\u0131d\u0131r"},"space-between-chinese-japanese-or-korean-and-english-or-numbers":{name:"\xC7ince, Japonca veya Korece ve \u0130ngilizce veya Say\u0131lar Aras\u0131nda Bo\u015Fluk",description:'\xC7ince, Japonca veya Korece ve \u0130ngilizce veya say\u0131lar aras\u0131nda tek bir bo\u015Fluk olmas\u0131 gerekti\u011Fini sa\u011Flar. Bu kurallar\u0131 takip eder'},"strong-style":{name:"Kal\u0131n Stil",description:"Kal\u0131n stilin tutarl\u0131 oldu\u011Funu garanti eder.",style:{name:"Stil",description:"Kal\u0131n/yo\u011Fun i\xE7eri\u011Fi belirtmek i\xE7in kullan\u0131lan stil"}},"trailing-spaces":{name:"Sondaki bo\u015Fluklar",description:"Her sat\u0131r\u0131n sonundaki fazladan bo\u015Fluklar\u0131 kald\u0131r\u0131r.","twp-space-line-break":{name:"\u0130ki Bo\u015Fluklu Sat\u0131r Sonu",description:'Bir sat\u0131r sonunu takiben iki bo\u015Flu\u011Fu g\xF6z ard\u0131 et ("\u0130ki Bo\u015Fluk Kural\u0131").'}},"two-spaces-between-lines-with-content":{name:"\u0130\xE7eri\u011Fi Olan Sat\u0131rlar Aras\u0131nda \u0130ki Bo\u015Fluk",description:"\u0130\xE7eri\u011Fi devam eden sat\u0131rlar\u0131n sonuna paragraflar, blok al\u0131nt\u0131lar\u0131 ve liste \xF6\u011Feleri i\xE7in iki bo\u015Fluk eklenmesini sa\u011Flar"},"unordered-list-style":{name:"S\u0131ras\u0131z Liste Stili",description:"S\u0131ras\u0131z listelerin belirtilen stili takip etti\u011Finden emin olur.","list-style":{name:"Liste \xF6\u011Fesi stili",description:"S\u0131ras\u0131z listelerde kullan\u0131lacak liste \xF6\u011Fesi stili"}},"yaml-key-sort":{name:"YAML Anahtar S\u0131ralamas\u0131",description:"YAML anahtarlar\u0131n\u0131 belirtilen s\u0131ra ve \xF6nceli\u011Fe g\xF6re s\u0131ralar.Not: bo\u015F sat\u0131rlar\u0131 da kald\u0131rabilir.","yaml-key-priority-sort-order":{name:"YAML Anahtar \xD6ncelik S\u0131ralama D\xFCzeni",description:"Her sat\u0131rda bir tane olacak \u015Fekilde anahtarlar\u0131n hangi s\u0131rayla s\u0131ralanaca\u011F\u0131"},"priority-keys-at-start-of-yaml":{name:"\xD6ncelikli Anahtarlar YAML'\u0131n Ba\u015F\u0131nda",description:"YAML Anahtar \xD6ncelik S\u0131ralama D\xFCzeni, YAML \xF6n maddesinin ba\u015F\u0131nda yer al\u0131r"},"yaml-sort-order-for-other-keys":{name:"Di\u011Fer Anahtarlar \u0130\xE7in YAML S\u0131ralama D\xFCzeni",description:"YAML Anahtar \xD6ncelik S\u0131ralama D\xFCzeni metin alan\u0131nda bulunmayan anahtarlar\u0131 nas\u0131l s\u0131ralayaca\u011F\u0131"}},"yaml-timestamp":{name:"YAML Zaman Damgas\u0131",description:"Dosyan\u0131n son d\xFCzenlendi\u011Fi tarihi YAML \xF6n maddesinde takip eder. Tarihler dosya metadatas\u0131ndan al\u0131n\u0131r.","date-created":{name:"Olu\u015Fturma Tarihi",description:"Dosyan\u0131n olu\u015Fturma tarihini ekler"},"date-created-key":{name:"Olu\u015Fturma Tarihi Anahtar\u0131",description:"Olu\u015Fturma tarihi i\xE7in hangi YAML anahtar\u0131n\u0131 kullanaca\u011F\u0131"},"date-modified":{name:"De\u011Fi\u015Ftirme Tarihi",description:"Dosyan\u0131n son de\u011Fi\u015Ftirildi\u011Fi tarihi ekler"},"date-modified-key":{name:"De\u011Fi\u015Ftirme Tarihi Anahtar\u0131",description:"De\u011Fi\u015Ftirme tarihi i\xE7in hangi YAML anahtar\u0131n\u0131 kullanaca\u011F\u0131"},format:{name:"Format",description:'Kullan\u0131lacak Zaman format\u0131 (bak\u0131n\u0131z Moment format options)'}},"yaml-title-alias":{name:"YAML Ba\u015Fl\u0131k Takma Ad\u0131",description:"Dosyan\u0131n ba\u015Fl\u0131\u011F\u0131n\u0131 YAML \xF6n maddesinin takma adlar\u0131 b\xF6l\xFCm\xFCne ekler. Ba\u015Fl\u0131\u011F\u0131 ilk H1 veya dosya ad\u0131ndan al\u0131r.","preserve-existing-alias-section-style":{name:"Mevcut takma adlar b\xF6l\xFCm stilini koru",description:"Ayarlan\u0131rsa, YAML takma adlar b\xF6l\xFCm\xFC stili ayar\u0131 yaln\u0131zca yeni olu\u015Fturulan b\xF6l\xFCmlere uygulan\u0131r"},"keep-alias-that-matches-the-filename":{name:"Dosya ad\u0131na uyan takma ad\u0131 koru",description:"Bu t\xFCr takma adlar genellikle gereksizdir"},"use-yaml-key-to-keep-track-of-old-filename-or-heading":{name:"linter-yaml-title-alias YAML anahtar\u0131n\u0131 kullanarak eski dosya ad\u0131 ve ba\u015Fl\u0131k de\u011Fi\u015Fikliklerini takip et",description:"Ayarlan\u0131rsa, ilk H1 ba\u015Fl\u0131\u011F\u0131 de\u011Fi\u015Fti\u011Finde veya ilk H1 yoksa dosya ad\u0131 de\u011Fi\u015Fti\u011Finde, bu anahtarda saklanan eski takma ad, takma adlar dizisine yeni bir giri\u015F eklemek yerine yeni de\u011Ferle de\u011Fi\u015Ftirilir"}},"yaml-title":{name:"YAML Ba\u015Fl\u0131k",description:"Dosyan\u0131n ba\u015Fl\u0131\u011F\u0131n\u0131 YAML \xF6n maddesine ekler. Ba\u015Fl\u0131k se\xE7ilen moda g\xF6re al\u0131n\u0131r.","title-key":{name:"Ba\u015Fl\u0131k Anahtar\u0131",description:"Ba\u015Fl\u0131k i\xE7in hangi YAML anahtar\u0131n\u0131 kullanaca\u011F\u0131"},mode:{name:"Mod",description:"Ba\u015Fl\u0131\u011F\u0131 almak i\xE7in kullan\u0131lacak y\xF6ntem"}}},enums:{"Title Case":"Ba\u015F Harfleri B\xFCy\xFCk","ALL CAPS":"T\xDCM\xDC B\xDCY\xDCK HARF","First letter":"\u0130lk Harf",".":".",")":")",ERROR:"hata",TRACE:"i\u015Faret",DEBUG:"hata ay\u0131klama",INFO:"bilgi",WARN:"uyar\u0131",SILENT:"sessiz",ascending:"artan",lazy:"tembel",Nothing:"Hi\xE7biri","Remove hashtag":"Hashtagi Kald\u0131r","Remove whole tag":"T\xFCm Etiketi Kald\u0131r",asterisk:"y\u0131ld\u0131z",underscore:"alt \xE7izgi",consistent:"tutarl\u0131","-":"-","*":"*","+":"+",space:"bo\u015Fluk","no space":"bo\u015Fluk yok",None:"Yok","Ascending Alphabetical":"Artan Alfabetik","Descending Alphabetical":"Azalan Alfabetik","multi-line":"\xE7oklu-sat\u0131r","single-line":"tek-sat\u0131r","single string to single-line":"tek dizeden tek sat\u0131ra","single string to multi-line":"tek dizeden \xE7ok sat\u0131ra","single string comma delimited":"virg\xFClle ayr\u0131lm\u0131\u015F tek dize","single string space delimited":"bo\u015Flukla ayr\u0131lm\u0131\u015F tek dize","single-line space delimited":"bo\u015Flukla ayr\u0131lm\u0131\u015F tek sat\u0131r","first-h1":"\u0130lk H1","first-h1-or-filename-if-h1-missing":"\u0130lk H1 veya H1 Eksikse Dosya Ad\u0131",filename:"Dosya Ad\u0131","''":"''","\u2018\u2019":"\u2018\u2019",'""':'""',"\u201C\u201D":"\u201C\u201D","\\":"\\","
    ":"
    "," ":" ","
    ":"
    "}};var wd={};var Ad={commands:{"lint-file":{name:"\u683C\u5F0F\u5316\u5F53\u524D\u6587\u4EF6","error-message":"\u683C\u5F0F\u5316\u5F53\u524D\u6587\u4EF6\u65F6\u51FA\u9519"},"lint-file-unless-ignored":{name:"\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6\uFF08\u9664\u4E86\u88AB\u5FFD\u7565\u7684\u6587\u4EF6\uFF09"},"lint-all-files":{name:"\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6","error-message":"\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6\u65F6\u51FA\u9519","success-message":"\u5DF2\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6","errors-message-singular":"\u5DF2\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6\uFF0C\u5176\u4E2D\u6709 1 \u4E2A\u9519\u8BEF","errors-message-plural":"\u5DF2\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6\uFF0C\u5176\u4E2D\u6709 {NUM} \u4E2A\u9519\u8BEF","start-message":"\u8FD9\u5C06\u6539\u52A8\u6240\u6709\u6587\u4EF6\uFF0C\u5305\u62EC\u5B50\u6587\u4EF6\u5939\u4E2D\u7684\u6587\u4EF6\uFF0C\u53EF\u80FD\u4F1A\u5F15\u5165\u9519\u8BEF","submit-button-text":"\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6","submit-button-notice-text":"\u6B63\u5728\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6..."},"lint-all-files-in-folder":{name:"\u683C\u5F0F\u5316\u6587\u4EF6\u5939\u4E2D\u7684\u6240\u6709\u6587\u4EF6","start-message":"\u8FD9\u5C06\u6539\u52A8\u6587\u4EF6\u5939 {FOLDER_NAME} \u4E2D\u7684\u6240\u6709\u6587\u4EF6\uFF0C\u5305\u62EC\u5B50\u6587\u4EF6\u5939\u4E2D\u7684\u6587\u4EF6\uFF0C\u53EF\u80FD\u4F1A\u5F15\u5165\u9519\u8BEF","submit-button-text":"\u683C\u5F0F\u5316\u6587\u4EF6\u5939 {FOLDER_NAME} \u4E2D\u7684\u6240\u6709\u6587\u4EF6","submit-button-notice-text":"\u6B63\u5728\u683C\u5F0F\u5316\u6587\u4EF6\u5939 {FOLDER_NAME} \u4E2D\u7684\u6240\u6709\u6587\u4EF6...","error-message":"\u683C\u5F0F\u5316\u6587\u4EF6\u5939\u4E2D\u7684\u6240\u6709\u6587\u4EF6\u65F6\u51FA\u9519","success-message":"\u5DF2\u683C\u5F0F\u5316\u6587\u4EF6\u5939 {FOLDER_NAME} \u4E2D\u7684\u6240\u6709 {NUM} \u4E2A\u6587\u4EF6","message-singular":"\u5DF2\u683C\u5F0F\u5316\u6587\u4EF6\u5939 {FOLDER_NAME} \u4E2D\u7684\u6240\u6709 {NUM} \u4E2A\u6587\u4EF6\uFF0C\u5176\u4E2D\u6709 1 \u4E2A\u9519\u8BEF","message-plural":"\u5DF2\u683C\u5F0F\u5316\u6587\u4EF6\u5939 {FOLDER_NAME} \u4E2D\u7684 {FILE_COUNT} \u4E2A\u6587\u4EF6\uFF0C\u5176\u4E2D\u6709 {ERROR_COUNT} \u4E2A\u9519\u8BEF."},"paste-as-plain-text":{name:"\u7C98\u8D34\u4E3A\u7EAF\u6587\u672C\u4E14\u4E0D\u63D0\u9192"},"lint-file-pop-up-menu-text":{name:"\u683C\u5F0F\u5316\u6587\u4EF6"},"lint-folder-pop-up-menu-text":{name:"\u683C\u5F0F\u5316\u6587\u4EF6\u5939"}},logs:{"plugin-load":"\u6B63\u5728\u52A0\u8F7D\u63D2\u4EF6","plugin-unload":"\u6B63\u5728\u5378\u8F7D\u63D2\u4EF6","folder-lint":"\u6B63\u5728\u683C\u5F0F\u5316\u6587\u4EF6\u5939","linter-run":"\u6B63\u5728\u8FD0\u884C Linter","file-change-yaml-lint-run":"\u6587\u4EF6\u5185\u5BB9\u53D8\u66F4\uFF0C \u6B63\u5728\u683C\u5F0F\u5316 YAML","file-change-yaml-lint-skipped":"\u6CA1\u6709\u68C0\u6D4B\u5230\u6587\u4EF6\u5185\u5BB9\u53D8\u66F4, \u8DF3\u8FC7 YAML \u683C\u5F0F\u5316","file-change-yaml-lint-warning":"\u6CA1\u6709\u68C0\u6D4B\u5230\u6587\u4EF6\u5185\u5BB9\u53D8\u66F4, \u4F46\u662F YAML \u683C\u5F0F\u5316\u88AB\u89E6\u53D1\uFF0C\u8BF7\u68C0\u67E5\u9519\u8BEF","paste-link-warning":"\u4E2D\u6B62\u7C98\u8D34\u683C\u5F0F\u5316 \uFF0C\u56E0\u4E3A\u526A\u8D34\u677F\u5185\u5BB9\u662F\u4E00\u4E2A\u94FE\u63A5\uFF0C\u8FD9\u6837\u505A\u5C06\u907F\u514D\u4E0E\u5176\u4ED6\u4FEE\u6539\u7C98\u8D34\u884C\u4E3A\u7684\u63D2\u4EF6\u53D1\u751F\u51B2\u7A81","see-console":"\u8BF7\u67E5\u770B\u63A7\u5236\u53F0\u4EE5\u83B7\u53D6\u66F4\u591A\u4FE1\u606F","unknown-error":"\u683C\u5F0F\u5316\u8FC7\u7A0B\u53D1\u751F\u672A\u77E5\u9519\u8BEF","moment-locale-not-found":"\u5C1D\u8BD5\u5C06 Moment.js \u7684\u9ED8\u8BA4\u5730\u533A\u8BED\u8A00\u5207\u6362\u5230 {MOMENT_LOCALE}, \u5B9E\u9645\u5207\u6362\u5230 {CURRENT_LOCALE}","file-change-lint-message-start":"\u683C\u5F0F\u5316\u5DF2\u5B8C\u6210","custom-command-callback-warning":"Please only set the custom command callback for integration tests.","pre-rules":"\u6BD4\u6B63\u5E38\u89C4\u5219\u4F18\u5148\u7EA7\u66F4\u9AD8\u7684\u89C4\u5219","post-rules":"\u6BD4\u6B63\u5E38\u89C4\u5219\u4F18\u5148\u7EA7\u66F4\u4F4E\u7684\u89C4\u5219","rule-running":"\u6B63\u5728\u8FD0\u884C\u89C4\u5219","custom-regex":"\u81EA\u5B9A\u4E49\u6B63\u5219\u8868\u8FBE\u5F0F\u89C4\u5219","running-custom-regex":"\u6B63\u5728\u8FD0\u884C\u81EA\u5B9A\u4E49\u6B63\u5219\u8868\u8FBE\u5F0F\u89C4\u5219","running-custom-lint-command":"\u6B63\u5728\u8FD0\u884C\u81EA\u5B9A\u4E49\u683C\u5F0F\u5316\u547D\u4EE4","custom-lint-duplicate-warning":'\u4F60\u4E0D\u80FD\u8FD0\u884C\u540C\u4E00\u4E2A\u81EA\u5B9A\u4E49\u89C4\u5219 ("{COMMAND_NAME}") \u4E24\u6B21',"custom-lint-error-message":"\u81EA\u5B9A\u4E49\u683C\u5F0F\u5316\u547D\u4EE4","disabled-text":"\u5DF2\u7981\u7528","run-rule-text":"\u8FD0\u884C\u4E2D","timing-key-not-found":"\u8BA1\u65F6\u952E '{TIMING_KEY}' \u5728\u8BA1\u65F6\u4FE1\u606F\u5217\u8868\u4E2D\u4E0D\u5B58\u5728\uFF0C\u5DF2\u5FFD\u7565","milliseconds-abbreviation":"\u6BEB\u79D2","invalid-date-format-error":"\u65E0\u6CD5\u89E3\u6790\u6216\u786E\u5B9A'{FILE_NAME}'\u4E2D\u7684\u521B\u5EFA\u65E5\u671F'{DATE}'\u7684\u683C\u5F0F\uFF0C\u521B\u5EFA\u65E5\u671F\u672A\u8FDB\u884C\u4FEE\u6539","invalid-delimiter-error-message":"\u5206\u9694\u7B26\u53EA\u80FD\u4E3A\u5355\u4E2A\u5B57\u7B26","missing-footnote-error-message":"\u811A\u6CE8 '{FOOTNOTE}' \u6CA1\u6709\u5BF9\u5E94\u7684\u5F15\u7528\uFF0C\u65E0\u6CD5\u5904\u7406\u3002\u8BF7\u786E\u4FDD\u6240\u6709\u811A\u6CE8\u90FD\u6709\u76F8\u5E94\u7684\u5F15\u7528\u3002","too-many-footnotes-error-message":"\u811A\u6CE8\u7F16\u53F7 '{FOOTNOTE_KEY}' \u6709\u8D85\u8FC71\u4E2A\u811A\u6CE8\u5728\u4F7F\u7528\uFF0C\u8BF7\u4FEE\u6539\u811A\u6CE8\u4F7F\u5F97\u4E00\u4E2A\u811A\u6CE8\u7F16\u53F7\u5BF9\u5E94\u4E00\u4E2A\u811A\u6CE8","wrapper-yaml-error":"YAML \u51FA\u73B0\u9519\u8BEF: {ERROR_MESSAGE}","wrapper-unknown-error":"\u672A\u77E5\u9519\u8BEF: {ERROR_MESSAGE}"},"notice-text":{"empty-clipboard":"\u526A\u8D34\u677F\u4E3A\u7A7A","characters-added":"\u4E2A\u5B57\u7B26\u88AB\u6DFB\u52A0","characters-removed":"\u4E2A\u5B57\u7B26\u88AB\u79FB\u9664","copy-to-clipboard-failed":"\u5C06\u5185\u5BB9\u590D\u5236\u5230\u526A\u8D34\u677F\u65F6\u5931\u8D25: "},"all-rules-option":"\u5168\u90E8","linter-title":"Linter","empty-search-results-text":"\u6CA1\u6709\u5339\u914D\u7684\u8BBE\u7F6E\u9879","warning-text":"\u8B66\u544A","file-backup-text":"\u8BF7\u786E\u4FDD\u4F60\u5DF2\u5907\u4EFD\u6587\u4EF6","custom-command-warning":"\u542F\u7528\u81EA\u5B9A\u4E49\u547D\u4EE4\u65F6\u683C\u5F0F\u5316\u591A\u4E2A\u6587\u4EF6\u9700\u8981\u542F\u7528\u4FA7\u8FB9\u680F\uFF0C\u540C\u65F6\u4F1A\u663E\u8457\u7684\u66F4\u52A0\u8017\u65F6\uFF0C\u8BF7\u4FDD\u6301\u8010\u5FC3","cancel-button-text":"\u53D6\u6D88","copy-aria-label":"\u590D\u5236","disabled-other-rule-notice":"\u5982\u679C\u542F\u7528\u89C4\u5219 {NAME_1}\uFF0C\u5219\u5C06\u7981\u7528\u89C4\u5219 {NAME_2}\u3002","disabled-conflicting-rule-notice":"{NAME_1} \u56E0\u4E0E {NAME_2} \u51B2\u7A81\u800C\u7981\u7528\u3002",ok:"\u786E\u5B9A","parse-results-heading-text":"Custom Parse Values","file-parse-description-text":"The following is the list of custom replacements found in {FILE}.","no-parsed-values-found-text":"There were no custom replacements found in {FILE}. Please make sure that all tables with custom replacements in {FILE} only have two columns and all rows start and end with a pipe (i.e. |).","find-header-text":"Word to Find","replace-header-text":"Replacement Word","close-button-text":"Close",tabs:{names:{general:"\u57FA\u7840",custom:"\u81EA\u5B9A\u4E49",yaml:"YAML",heading:"\u6807\u9898",content:"\u5185\u5BB9",footnote:"\u811A\u6CE8",spacing:"\u7A7A\u884C",paste:"\u7C98\u8D34",debug:"Debug"},"default-search-bar-text":"\u641C\u7D22\u8BBE\u7F6E\u9879",general:{"lint-on-save":{name:"\u4FDD\u5B58\u65F6\u683C\u5F0F\u5316\u6587\u4EF6",description:"\u624B\u52A8\u4FDD\u5B58\u65F6\u683C\u5F0F\u5316\u6587\u4EF6\uFF08\u5F53\u6309 Ctrl + S \u65F6\u6216\u5728 vim \u6A21\u5F0F\u4E2D\u4F7F\u7528 :w \u65F6\uFF09"},"display-message":{name:"\u683C\u5F0F\u5316\u540E\u663E\u793A\u6D88\u606F",description:"\u683C\u5F0F\u5316\u540E\u663E\u793A\u4FEE\u6539\u4E86\u591A\u5C11\u5B57\u7B26"},"lint-on-file-change":{name:"\u6587\u4EF6\u4FEE\u6539\u65F6\u683C\u5F0F\u5316",description:"\u5F53\u6587\u4EF6\u5173\u95ED\u6216\u662F\u5207\u6362\u5230\u65B0\u6587\u4EF6\u65F6\uFF0C\u683C\u5F0F\u5316\u4E4B\u524D\u7684\u6587\u4EF6"},"display-lint-on-file-change-message":{name:"\u63D0\u9192\u6587\u4EF6\u4FEE\u6539\u65F6\u683C\u5F0F\u5316",description:"\u5F53\u6587\u4EF6\u4FEE\u6539\u65F6\u683C\u5F0F\u5316\u89E6\u53D1\u65F6\uFF0C\u5F39\u51FA\u4E00\u6761\u63D0\u793A\u4FE1\u606F"},"folders-to-ignore":{name:"\u5FFD\u7565\u6587\u4EF6\u5939",description:"\u9700\u8981\u5FFD\u7565\u7684\u6587\u4EF6\u5939\uFF08\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6\u6216\u4FDD\u5B58\u65F6\u683C\u5F0F\u5316\u65F6\u751F\u6548\uFF09\uFF0C\u6BCF\u884C\u8F93\u5165\u4E00\u4E2A\u6587\u4EF6\u5939\u8DEF\u5F84","folder-search-placeholder-text":"\u6587\u4EF6\u5939","add-input-button-text":"\u6DFB\u52A0\u8981\u5FFD\u7565\u7684\u6587\u4EF6\u5939","delete-tooltip":"\u5220\u9664"},"files-to-ignore":{name:"\u5FFD\u7565\u6587\u4EF6",description:"\u9700\u8981\u5FFD\u7565\u7684\u6587\u4EF6\uFF08\u683C\u5F0F\u5316\u6240\u6709\u6587\u4EF6\u6216\u4FDD\u5B58\u65F6\u683C\u5F0F\u5316\u65F6\u751F\u6548\uFF09","file-search-placeholder-text":"\u6B63\u5219\u8868\u8FBE\u5F0F","add-input-button-text":"\u6DFB\u52A0\u6B63\u5219\u8868\u8FBE\u5F0F","delete-tooltip":"\u5220\u9664","label-placeholder-text":"\u540D\u79F0","flags-placeholder-text":"\u4FEE\u9970\u7B26",warning:"\u5982\u679C\u60A8\u4E0D\u77E5\u9053\u6B63\u5219\u8868\u8FBE\u5F0F\u662F\u4EC0\u4E48\uFF0C\u8BF7\u8C28\u614E\u4F7F\u7528\u3002\u6B64\u5916\uFF0C\u5982\u679C\u5728 iOS \u79FB\u52A8\u8BBE\u5907\u4E0A\u4F7F\u7528\u540E\u884C\u65AD\u8A00\uFF0C\u8BF7\u786E\u4FDD\u7CFB\u7EDF\u7248\u672C\u652F\u6301"},"override-locale":{name:"\u8986\u76D6\u9ED8\u8BA4\u5730\u533A\u8BED\u8A00",description:"\u4F7F\u7528\u4E0D\u540C\u4E8E\u9ED8\u8BA4\u5730\u533A\u8BED\u8A00\u65F6\u9700\u8981\u8BBE\u7F6E\u6B64\u9879"},"same-as-system-locale":"\u9ED8\u8BA4 ({SYS_LOCALE}) ","yaml-aliases-section-style":{name:"YAML aliases \u6837\u5F0F",description:"YAML aliases \u6837\u5F0F"},"yaml-tags-section-style":{name:"YAML tags \u6837\u5F0F",description:"YAML tags \u6837\u5F0F"},"default-escape-character":{name:"\u9ED8\u8BA4\u8F6C\u4E49\u5B57\u7B26",description:"\u5F53\u5355\u5F15\u53F7\u6216\u53CC\u5F15\u53F7\u4E0D\u5B58\u5728\u65F6\u7528\u4E8E\u8F6C\u4E49 YAML \u503C\u7684\u9ED8\u8BA4\u5B57\u7B26"},"remove-unnecessary-escape-chars-in-multi-line-arrays":{name:"\u5F53\u4F7F\u7528 YAML \u591A\u884C\u6570\u7EC4\u65F6\u5220\u9664\u4E0D\u5FC5\u8981\u7684\u8F6C\u4E49\u5B57\u7B26",description:"YAML \u591A\u884C\u6570\u7EC4\u7684\u8F6C\u4E49\u5B57\u7B26\u548C YAML \u5355\u884C\u6570\u7EC4\u4E0D\u540C\uFF0C\u56E0\u6B64\u5728\u4F7F\u7528\u591A\u884C\u6570\u7EC4\u65F6\uFF0C\u5220\u9664\u4E0D\u5FC5\u8981\u7684\u8F6C\u4E49\u5B57\u7B26"},"number-of-dollar-signs-to-indicate-math-block":{name:"Latex \u5757\u6807\u8BB0\u7B26 $ \u6570\u91CF",description:"\u5C06 Latex \u5185\u5BB9\u89C6\u4E3A Latex \u5757\u800C\u4E0D\u662F\u884C\u5185 Latex \u7684 $ \u7B26\u53F7\u7684\u6570\u91CF"}},debug:{"log-level":{name:"\u65E5\u5FD7\u7EA7\u522B",description:"\u5141\u8BB8\u8F93\u51FA\u7684\u65E5\u5FD7\u7EA7\u522B\uFF0C\u9ED8\u8BA4\u662F ERROR"},"linter-config":{name:"Linter \u914D\u7F6E",description:"\u6253\u5F00\u8BBE\u7F6E\u9875\u9762\u540E\uFF0CLinter \u52A0\u8F7D\u7684 data.json \u4E2D\u7684\u5185\u5BB9"},"log-collection":{name:"\u683C\u5F0F\u5316\u5F53\u524D\u6587\u4EF6\u65F6\u6536\u96C6\u65E5\u5FD7",description:"\u5728\u683C\u5F0F\u5316\u5F53\u524D\u6587\u4EF6\u65F6\u6536\u96C6\u65E5\u5FD7\u3002\u8FD9\u4E9B\u65E5\u5FD7\u6709\u52A9\u4E8E\u8C03\u8BD5\u548C\u521B\u5EFA\u9519\u8BEF\u62A5\u544A"},"linter-logs":{name:"Linter \u65E5\u5FD7",description:"\u5982\u679C\u5F00\u542F\uFF0C\u5219\u663E\u793A\u6700\u540E\u4E00\u6B21\u683C\u5F0F\u5316\u5F53\u524D\u6587\u4EF6\u65F6\u751F\u6210\u7684\u65E5\u5FD7"}}},options:{"custom-command":{name:"\u81EA\u5B9A\u4E49\u547D\u4EE4",description:"\u81EA\u5B9A\u4E49\u547D\u4EE4\u662F\u5728 Linter \u5B8C\u6210\u683C\u5F0F\u5316\u540E\u8FD0\u884C\u7684 Obsidian \u547D\u4EE4\u3002\u8FD9\u610F\u5473\u7740 Obsidian \u547D\u4EE4\u4F1A\u5728 YAML \u65F6\u95F4\u6233\u4FEE\u6539\u4E4B\u540E\u8FD0\u884C\uFF0C\u56E0\u6B64\u5B83\u4EEC\u53EF\u80FD\u4F1A\u5BFC\u81F4\u5728\u4E0B\u6B21\u8FD0\u884C Linter \u65F6\u89E6\u53D1 YAML \u65F6\u95F4\u6233\u4FEE\u6539\u3002\u4E00\u4E2A Obsidian \u547D\u4EE4\u53EA\u80FD\u9009\u62E9\u4E00\u6B21\u3002",warning:"\u9009\u62E9\u547D\u4EE4\u65F6\uFF0C\u8BF7\u786E\u4FDD\u4F7F\u7528\u9F20\u6807\u6216\u6309\u56DE\u8F66\u952E\u9009\u62E9\u8BE5\u9009\u9879\uFF0C\u5176\u4ED6\u9009\u62E9\u65B9\u6CD5\u53EF\u80FD\u4E0D\u8D77\u4F5C\u7528\u3002\u53EA\u6709 Obsidian \u547D\u4EE4\u6216\u7A7A\u5B57\u7B26\u4E32\u4F1A\u88AB\u4FDD\u5B58","add-input-button-text":"\u6DFB\u52A0\u65B0\u547D\u4EE4","command-search-placeholder-text":"Obsidian \u547D\u4EE4","move-up-tooltip":"\u4E0A\u79FB","move-down-tooltip":"\u4E0B\u79FB","delete-tooltip":"\u5220\u9664"},"custom-replace":{name:"\u81EA\u5B9A\u4E49\u6B63\u5219\u8868\u8FBE\u5F0F\u66FF\u6362",description:"\u81EA\u5B9A\u4E49\u6B63\u5219\u8868\u8FBE\u5F0F\u66FF\u6362\u53EF\u5C06\u4EFB\u610F\u7684\u6B63\u5219\u5339\u914D\u5185\u5BB9\u66FF\u6362\u4E3A\u6307\u5B9A\u503C\u3002\u67E5\u627E\u503C\u548C\u66FF\u6362\u503C\u5FC5\u987B\u662F\u6709\u6548\u7684\u6B63\u5219\u8868\u8FBE\u5F0F",warning:"\u5982\u679C\u60A8\u4E0D\u77E5\u9053\u6B63\u5219\u8868\u8FBE\u5F0F\u662F\u4EC0\u4E48\uFF0C\u8BF7\u8C28\u614E\u4F7F\u7528\u3002\u6B64\u5916\uFF0C\u5982\u679C\u5728 iOS \u79FB\u52A8\u8BBE\u5907\u4E0A\u4F7F\u7528\u540E\u884C\u65AD\u8A00\uFF0C\u8BF7\u786E\u4FDD\u7CFB\u7EDF\u7248\u672C\u652F\u6301","add-input-button-text":"\u6DFB\u52A0\u65B0\u7684\u6B63\u5219\u66FF\u6362\u89C4\u5219","regex-to-find-placeholder-text":"\u67E5\u627E\u7528\u6B63\u5219\u8868\u8FBE\u5F0F","flags-placeholder-text":"\u4FEE\u9970\u7B26","regex-to-replace-placeholder-text":"\u66FF\u6362\u7528\u6B63\u5219\u8868\u8FBE\u5F0F","label-placeholder-text":"\u540D\u79F0","move-up-tooltip":"\u4E0A\u79FB","move-down-tooltip":"\u4E0B\u79FB","delete-tooltip":"\u5220\u9664"},"custom-auto-correct":{"delete-tooltip":"\u5220\u9664","show-parsed-contents-tooltip":"\u67E5\u770B\u52A0\u8F7D\u7684\u66FF\u6362\u6587\u4EF6","custom-row-parse-warning":'"{ROW}" \u683C\u5F0F\u9519\u8BEF\uFF0C\u9700\u8981\u81F3\u5C11\u4E24\u5217',"file-search-placeholder-text":"\u6587\u4EF6\u540D\u79F0","add-new-replacement-file-tooltip":"\u6DFB\u52A0\u81EA\u5B9A\u4E49\u6587\u4EF6","warning-text":"\u88AB\u9009\u4E2D\u7684\u6587\u4EF6\u5C06\u81EA\u52A8\u5173\u95ED\u89C4\u5219 {NAME}","refresh-tooltip-text":"\u91CD\u65B0\u52A0\u8F7D\u81EA\u5B9A\u4E49\u66FF\u6362\u6587\u4EF6"}},rules:{"auto-correct-common-misspellings":{name:"\u81EA\u52A8\u66F4\u6B63\u5E38\u89C1\u7684\u62FC\u5199\u9519\u8BEF",description:'\u901A\u8FC7\u5E38\u89C1\u62FC\u5199\u9519\u8BEF\u5B57\u5178\u81EA\u52A8\u5C06\u9519\u8BEF\u62FC\u5199\u66F4\u6B63\u4E3A\u6B63\u786E\u62FC\u5199\u3002\u6709\u5173\u81EA\u52A8\u66F4\u6B63\u5355\u8BCD\u7684\u5B8C\u6574\u5217\u8868\uFF0C\u8BF7\u53C2\u9605 auto-correct map',"ignore-words":{name:"\u5FFD\u7565\u5355\u8BCD",description:"\u4EE5\u9017\u53F7\u5206\u9694\u7684\u5C0F\u5199\u5355\u8BCD\u5217\u8868\uFF0C\u5728\u81EA\u52A8\u66F4\u6B63\u65F6\u4F1A\u5FFD\u7565"},"extra-auto-correct-files":{name:"\u989D\u5916\u81EA\u52A8\u66F4\u6B63\u539F\u59CB\u6587\u4EF6",description:"\u6587\u4EF6\u4E2D\u6709\u4E00\u4E2A markdown \u8868\u683C\uFF0C\u5176\u4E2D\u5305\u542B\u521D\u59CB\u5355\u8BCD\u548C\u8981\u66F4\u6B63\u7684\u5355\u8BCD\uFF08\u4E0D\u533A\u5206\u5927\u5C0F\u5199\uFF09\u3002 \u6CE8\u610F\uFF1A\u4F7F\u7528\u7684\u8868\u683C\u5E94\u8BE5\u5BF9\u6BCF\u884C\u90FD\u6709\u8D77\u59CB\u548C\u7ED3\u675F\u7684 | \u6807\u5FD7"},"skip-words-with-multiple-capitals":{name:"\u8DF3\u8FC7\u6709\u591A\u4E2A\u5927\u5199\u5B57\u6BCD\u7684\u5355\u8BCD",description:"\u8DF3\u8FC7\u6709\u591A\u4E2A\u5927\u5199\u5B57\u6BCD\u7684\u5355\u8BCD\uFF0C\u9996\u5B57\u6BCD\u7F29\u5199\u8BCD\u548C\u5176\u4ED6\u4E00\u4E9B\u5355\u8BCD\u53EF\u80FD\u4F1A\u53D7\u76CA\u4E8E\u6B64\u3002\u8FD9\u53EF\u80FD\u4F1A\u5BFC\u81F4\u4E13\u6709\u540D\u8BCD\u65E0\u6CD5\u6B63\u786E\u4FEE\u590D"},"default-install":"\u6B63\u5728\u4E0B\u8F7D\u9ED8\u8BA4\u7684\u62FC\u5199\u9519\u8BEF\u4FEE\u6B63\u6570\u636E\uFF0C\u4EC5\u5728\u7B2C\u4E00\u6B21\u542F\u7528\u65F6\u4E0B\u8F7D\uFF0C\u8BF7\u7B49\u5F85...","default-install-failed":"\u4E0B\u8F7D {URL} \u5931\u8D25\u3002\u7981\u7528\u81EA\u52A8\u66F4\u6B63\u5E38\u89C1\u7684\u62FC\u5199\u9519\u8BEF","defaults-missing":"\u672A\u627E\u5230\u9ED8\u8BA4\u7684\u5E38\u89C1\u81EA\u52A8\u66F4\u6B63\u6587\u4EF6: {FILE}"},"add-blank-line-after-yaml":{name:"YAML \u5757\u540E\u7A7A\u884C",description:"\u786E\u4FDD YAML \u5757\u540E\u6709\u7A7A\u884C\uFF0C\u9664\u975E\u5B83\u5728\u6587\u6863\u7684\u7ED3\u5C3E"},"add-blockquote-indentation-on-paste":{name:"\u6DFB\u52A0\u5F15\u7528\u5757\u7F29\u8FDB",description:"\u7C98\u8D34\u65F6\uFF0C\u5982\u679C\u5149\u6807\u4F4D\u4E8E\u5F15\u7528\u884C\u6216\u6807\u6CE8\u884C\uFF0C\u5219\u5C06\u5F15\u7528\u6DFB\u52A0\u5230\u9664\u7B2C\u4E00\u884C\u4EE5\u5916\u7684\u6240\u6709\u884C"},"blockquote-style":{name:"\u5F15\u7528\u5757\u6837\u5F0F",description:"\u786E\u4FDD\u5F15\u7528\u5757\u6837\u5F0F\u4E00\u81F4",style:{name:"\u6837\u5F0F",description:"\u5F15\u7528\u5757\u6807\u5FD7\u5B57\u7B26\u7684\u6837\u5F0F"}},"capitalize-headings":{name:"\u5927\u5199\u6807\u9898",description:"\u6807\u9898\u4F1A\u5728\u683C\u5F0F\u5316\u540E\u5927\u5199",style:{name:"\u6837\u5F0F",description:"\u5927\u5199\u7684\u65B9\u5F0F"},"ignore-case-words":{name:"\u5FFD\u7565\u5927\u5199\u5355\u8BCD",description:"\u5728\u6837\u5F0F\u8BBE\u4E3A\u6BCF\u8BCD\u9996\u5B57\u6BCD\u5927\u5199\u65F6\uFF0C\u4EC5\u683C\u5F0F\u5316\u5168\u5C0F\u5199\u7684\u5355\u8BCD"},"ignore-words":{name:"\u5FFD\u7565\u5355\u8BCD",description:"\u4E0D\u683C\u5F0F\u5316\u7684\u5355\u8BCD\uFF0C\u4EE5\u9017\u53F7\u5206\u9694"},"lowercase-words":{name:"\u5C0F\u5199\u5355\u8BCD",description:"\u4FDD\u6301\u5C0F\u5199\u7684\u5355\u8BCD\uFF0C\u4EE5\u9017\u53F7\u5206\u9694"}},"compact-yaml":{name:"\u7CBE\u7B80 YAML",description:"\u79FB\u9664 YAML Front-matter \u5F00\u5934\u7ED3\u5C3E\u7684\u7A7A\u884C","inner-new-lines":{name:"\u5185\u90E8\u7A7A\u884C",description:"\u79FB\u9664 YAML Front-matter \u5185\u90E8\u7684\u7A7A\u884C"}},"consecutive-blank-lines":{name:"\u8FDE\u7EED\u7A7A\u884C",description:"\u6700\u591A\u5141\u8BB8\u4E00\u4E2A\u8FDE\u7EED\u7A7A\u884C"},"convert-bullet-list-markers":{name:"\u8F6C\u6362\u65E0\u5E8F\u5217\u8868\u6807\u5FD7",description:"\u5C06\u5176\u4ED6\u683C\u5F0F\u65E0\u5E8F\u5217\u8868\u6807\u5FD7\u8F6C\u6362\u4E3A Markdown \u683C\u5F0F\u65E0\u5E8F\u5217\u8868\u6807\u5FD7"},"convert-spaces-to-tabs":{name:"\u7A7A\u683C\u8F6C\u4E3A\u5236\u8868\u7B26",description:"\u5C06\u524D\u5BFC\u7A7A\u683C\u8F6C\u6362\u4E3A\u5236\u8868\u7B26",tabsize:{name:"\u5236\u8868\u7B26\u5BBD\u5EA6",description:"\u5236\u8868\u7B26\u5BF9\u5E94\u7684\u7A7A\u683C\u6570\u91CF"}},"dedupe-yaml-array-values":{name:"YAML \u503C\u53BB\u91CD",description:"\u53BB\u91CD\u65F6\u533A\u5206\u5927\u5C0F\u5199","dedupe-alias-key":{name:"YAML aliases \u53BB\u91CD",description:"\u6253\u5F00\u4EE5\u5BF9 YAML aliases \u53BB\u91CD"},"dedupe-tag-key":{name:"YAML tags \u53BB\u91CD",description:"\u6253\u5F00\u4EE5\u5BF9 YAML tags \u53BB\u91CD"},"dedupe-array-keys":{name:"YAML array \u53BB\u91CD",description:"\u6253\u5F00\u4EE5\u5BF9\u666E\u901A YAML \u6570\u7EC4\u4E2D\u7684\u503C\u53BB\u91CD"},"ignore-keys":{name:"\u8981\u5FFD\u7565\u7684 YAML \u952E",description:"\u8981\u5FFD\u7565\u7684 YAML \u952E\u5217\u8868\uFF0C\u6BCF\u884C\u4E00\u4E2A\u952E"}},"default-language-for-code-fences":{name:"\u4EE3\u7801\u5757\u9ED8\u8BA4\u8BED\u8A00",description:"\u4E3A\u6CA1\u6709\u6307\u5B9A\u8BED\u8A00\u7684\u4EE3\u7801\u5757\u6DFB\u52A0\u9ED8\u8BA4\u8BED\u8A00\u3002","default-language":{name:"\u7F16\u7A0B\u8BED\u8A00",description:'\u7559\u7A7A\u4E0D\u8FDB\u884C\u4EFB\u4F55\u64CD\u4F5C\u3002\u53EF\u4EE5\u5728\u8FD9\u91CC\u627E\u5230\u8BED\u8A00\u6807\u7B7E\u3002'}},"emphasis-style":{name:"\u7A81\u51FA\u6837\u5F0F",description:"\u4FDD\u6301\u7A81\u51FA\u6837\u5F0F\u4E00\u81F4\u6027",style:{name:"\u6837\u5F0F",description:"\u7528\u4E8E\u8868\u793A\u7A81\u51FA\u5185\u5BB9\u7684\u6837\u5F0F"}},"empty-line-around-blockquotes":{name:"\u5F15\u7528\u5757\u524D\u540E\u7A7A\u884C",description:"\u786E\u4FDD\u5F15\u7528\u5757\u524D\u540E\u6709\u7A7A\u884C\uFF0C\u9664\u975E\u5B83\u5728\u6587\u6863\u7684\u5F00\u5934\u6216\u7ED3\u5C3E\u3002\u6CE8\u610F\uFF0C\u8FD9\u91CC\u5D4C\u5957\u5F15\u7528\u5757\u4E5F\u4F1A\u6709\u5BF9\u5E94\u7684\u7A7A\u884C"},"empty-line-around-code-fences":{name:"\u4EE3\u7801\u5757\u524D\u540E\u7A7A\u884C",description:"\u786E\u4FDD\u4EE3\u7801\u5757\u524D\u540E\u6709\u7A7A\u884C\uFF0C\u9664\u975E\u5B83\u5728\u6587\u6863\u7684\u5F00\u5934\u6216\u7ED3\u5C3E"},"empty-line-around-math-blocks":{name:"Latex \u5757\u524D\u540E\u7A7A\u884C",description:"\u786E\u4FDD Latex \u524D\u540E\u6709\u7A7A\u884C\uFF0C\u6839\u636E Latex \u5757\u6807\u8BB0\u7B26 $ \u6570\u91CF\u6765\u786E\u5B9A\u5355\u884C Latex \u662F\u5426\u88AB\u8BA4\u5B9A\u4E3A Latex \u5757"},"empty-line-around-tables":{name:"\u8868\u683C\u524D\u540E\u7A7A\u884C",description:"\u786E\u4FDD\u8868\u683C\u524D\u540E\u6709\u7A7A\u884C\uFF0C\u9664\u975E\u5B83\u5728\u6587\u6863\u7684\u5F00\u5934\u6216\u7ED3\u5C3E"},"escape-yaml-special-characters":{name:"\u8F6C\u4E49 YAML \u7279\u6B8A\u5B57\u7B26",description:`\u8F6C\u4E49 YAML \u4E2D\u7684\u5192\u53F7(:)\uFF0C\u5355\u5F15\u53F7 (') \u548C\u53CC\u5F15\u53F7 (")`,"try-to-escape-single-line-arrays":{name:"\u5C1D\u8BD5\u8F6C\u4E49\u5355\u884C\u6570\u7EC4",description:'\u5C1D\u8BD5\u8F6C\u4E49\u6570\u7EC4\u503C\uFF0C\u5047\u8BBE\u6570\u7EC4\u4EE5 "[" \u5F00\u5934\uFF0C "]" \u7ED3\u5C3E\uFF0C\u5E76\u4E14\u7531 "," \u5206\u9694'}},"file-name-heading":{name:"\u6587\u4EF6\u540D\u4F5C\u4E3A\u6807\u9898",description:"\u5982\u679C\u6CA1\u6709 H1 \u6807\u9898\uFF0C\u5219\u63D2\u5165\u6587\u4EF6\u540D\u4F5C\u4E3A H1 \u6807\u9898"},"footnote-after-punctuation":{name:"\u811A\u6CE8\u5F15\u7528\u79FB\u81F3\u6807\u70B9\u7B26\u53F7\u540E",description:"\u5C06\u811A\u6CE8\u5F15\u7528\u79FB\u81F3\u6807\u70B9\u7B26\u53F7\u540E"},"force-yaml-escape":{name:"\u5F3A\u5236 YAML \u8F6C\u4E49",description:"\u8F6C\u4E49\u6307\u5B9A YAML \u952E\u7684\u503C","force-yaml-escape-keys":{name:"\u8981\u5F3A\u5236\u8F6C\u79FB\u7684 YAML \u952E",description:"\u5982\u679C\u672A\u8F6C\u4E49\uFF0C\u5219\u4F7F\u7528 YAML \u8F6C\u4E49\u5B57\u7B26\u5BF9\u6307\u5B9A YAML \u952E\u8FDB\u884C\u8F6C\u4E49\uFF0C\u6BCF\u4E2A\u952E\u4E00\u884C\u3002 \u4E0D\u8981\u5BF9 YAML \u6570\u7EC4\u4F7F\u7528"}},"format-tags-in-yaml":{name:"\u683C\u5F0F\u5316 YAML \u4E2D\u7684 tags",description:"\u628A YAML Front-matter \u4E2D tag \u7684\u4E95\u53F7\u5220\u9664\uFF0C\u56E0\u4E3A\u4E95\u53F7\u4F1A\u4F7F tag \u65E0\u6548"},"format-yaml-array":{name:"\u683C\u5F0F\u5316 YAML \u6570\u7EC4",description:"\u5141\u8BB8\u5C06\u5E38\u89C4 YAML \u6570\u7EC4\u683C\u5F0F\u5316\u4E3A\u591A\u884C\u6216\u5355\u884C\uFF0C\u5E76\u5141\u8BB8\u90E8\u5206\u6570\u7EC4(tags, aliases) \u4FDD\u7559 Obsidian \u539F\u6709\u7684 YAML \u683C\u5F0F\u3002\u8BF7\u6CE8\u610F\uFF0C\u5355\u5B57\u7B26\u4E32\u8F6C\u6362\u4E3A\u5355\u884C\uFF0C\u5982\u679C\u5B58\u5728\u591A\u4E2A\u6761\u76EE\uFF0C\u5219\u4F1A\u53D8\u4E3A\u5355\u884C\u6570\u7EC4\u3002\u5BF9\u4E8E\u5355\u5B57\u7B26\u4E32\u8F6C\u6362\u4E3A\u591A\u884C\uFF0C\u60C5\u51B5\u4E5F\u662F\u5982\u6B64\uFF0C\u53EA\u662F\u5B83\u53D8\u6210\u4E86\u591A\u884C\u6570\u7EC4","alias-key":{name:"\u683C\u5F0F\u5316 YAML aliases",description:"\u6253\u5F00 YAML aliases \u90E8\u5206\u7684\u683C\u5F0F\u8BBE\u7F6E\u3002\u4E0D\u5E94\u4E0E\u89C4\u5219YAML \u6807\u9898\u522B\u540D\u540C\u65F6\u542F\u7528\uFF0C\u56E0\u4E3A\u5B83\u4EEC\u53EF\u80FD\u4E0D\u4F1A\u5F88\u597D\u5730\u534F\u540C\u5DE5\u4F5C\uFF0C\u6216\u8005\u5B83\u4EEC\u53EF\u80FD\u6709\u4E0D\u540C\u7684\u683C\u5F0F\u6837\u5F0F\u9009\u62E9\uFF0C\u4ECE\u800C\u5BFC\u81F4\u610F\u5916\u7ED3\u679C"},"tag-key":{name:"\u683C\u5F0F\u5316 YAML tags",description:"\u6253\u5F00 YAML tags \u90E8\u5206\u7684\u683C\u5F0F\u8BBE\u7F6E"},"default-array-style":{name:"\u9ED8\u8BA4\u7684 YAML \u6570\u7EC4\u683C\u5F0F",description:"\u9664\u4E86 tags, aliases \u6216\u5C06\u952E\u503C\u5F3A\u5236\u4E3A\u5355\u884C\u6570\u7EC4\u548C\u5C06\u952E\u503C\u5F3A\u5236\u4E3A\u591A\u884C\u6570\u7EC4\u4E4B\u5916\uFF0C\u5176\u4ED6\u4E3A\u5E38\u89C4 YAML \u6570\u7EC4\u7684\u6837\u5F0F"},"default-array-keys":{name:"\u683C\u5F0F\u5316 YAML \u6570\u7EC4",description:"\u5BF9 YAML \u6570\u7EC4\u8FDB\u884C\u683C\u5F0F\u5316"},"force-single-line-array-style":{name:"\u5F3A\u5236\u8F6C\u4E3A\u5355\u884C\u6570\u7EC4",description:"\u5F3A\u5236\u5C06\u6307\u5B9A\u952E\u7684 YAML \u6570\u7EC4\u8F6C\u4E3A\u5355\u884C\u6570\u7EC4\uFF0C\u6309\u884C\u5206\u9694\uFF08\u7559\u7A7A\u4EE5\u7981\u7528\u6B64\u9009\u9879\uFF09"},"force-multi-line-array-style":{name:"\u5F3A\u5236\u8F6C\u4E3A\u591A\u884C\u6570\u7EC4",description:"\u5F3A\u5236\u5C06\u6307\u5B9A\u952E\u7684 YAML \u6570\u7EC4\u8F6C\u4E3A\u591A\u884C\u6570\u7EC4\uFF0C\u6309\u884C\u5206\u9694\uFF08\u7559\u7A7A\u4EE5\u7981\u7528\u6B64\u9009\u9879\uFF09"}},"header-increment":{name:"\u6807\u9898\u7EA7\u522B\u9012\u589E",description:"\u6807\u9898\u4E00\u6B21\u4EC5\u9012\u589E\u4E00\u4E2A\u7EA7\u522B","start-at-h2":{name:"\u4ECE H2 \u6807\u9898\u5F00\u59CB\u9012\u589E",description:"\u4F7F H2 \u6807\u9898\u6210\u4E3A\u6587\u4EF6\u4E2D\u7684\u6700\u9AD8\u6807\u9898\u7EA7\u522B\uFF0C\u5176\u4ED6\u7EA7\u522B\u7684\u6807\u9898\u8FDB\u884C\u76F8\u5E94\u7684\u9012\u63A8"}},"heading-blank-lines":{name:"\u6807\u9898\u524D\u540E\u7A7A\u884C",description:"\u786E\u4FDD\u6807\u9898\u524D\u540E\u6709\u4E00\u4E2A\u7A7A\u884C\uFF0C\u9664\u975E\u5B83\u5728\u6587\u6863\u7684\u5F00\u5934\u6216\u7ED3\u5C3E",bottom:{name:"\u6807\u9898\u540E\u7A7A\u884C",description:"\u5728\u6807\u9898\u540E\u63D2\u5165\u4E00\u4E2A\u7A7A\u884C"},"empty-line-after-yaml":{name:"YAML \u4E0E\u6807\u9898\u4E4B\u95F4\u7684\u7A7A\u884C",description:"\u4FDD\u7559 YAML Front-matter \u548C\u6807\u9898\u4E4B\u95F4\u7684\u7A7A\u884C"}},"headings-start-line":{name:"\u6807\u9898\u5BF9\u9F50\u884C\u9996",description:"\u5C06\u6807\u9898\u524D\u7684\u7A7A\u683C\u5220\u9664\uFF0C\u4F7F\u6807\u9898\u80FD\u88AB\u6B63\u786E\u8BC6\u522B"},"insert-yaml-attributes":{name:"\u63D2\u5165 YAML \u5C5E\u6027",description:"\u628A\u6307\u5B9A\u7684 YAML \u952E\u63D2\u5165\u5230 YAML Front-matter \u4E2D\u3002\u6BCF\u4E2A\u952E\u5360\u4E00\u884C","text-to-insert":{name:"\u8981\u63D2\u5165\u7684\u952E",description:"\u8981\u63D2\u5165\u5230 YAML Front-matter \u4E2D\u7684\u952E"}},"line-break-at-document-end":{name:"\u6587\u4EF6\u7ED3\u5C3E\u6362\u884C",description:"\u786E\u4FDD\u6587\u6863\u7ED3\u5C3E\u6709\u4E00\u884C\u7A7A\u884C"},"move-footnotes-to-the-bottom":{name:"\u811A\u6CE8\u79FB\u81F3\u6587\u6863\u5E95\u90E8",description:"\u5C06\u6240\u6709\u811A\u6CE8\u79FB\u52A8\u5230\u6587\u6863\u5E95\u90E8"},"move-math-block-indicators-to-their-own-line":{name:"\u683C\u5F0F\u5316 Latex \u5757\u6807\u8BB0",description:"\u5C06 Latex \u5757\u6807\u8BB0\u79FB\u5230\u65B0\u884C\u3002\u6839\u636E Latex \u5757\u6807\u8BB0\u7B26 $ \u6570\u91CF\u6765\u786E\u5B9A\u5355\u884C Latex \u662F\u5426\u88AB\u8BA4\u5B9A\u4E3A Latex \u5757"},"move-tags-to-yaml":{name:"\u5C06 tags \u79FB\u81F3 YAML",description:"\u5C06\u6587\u6863\u5185\u6240\u6709\u7684 tags \u79FB\u52A8\u5230 YAML Front-matter \u5185","how-to-handle-existing-tags":{name:"\u5982\u4F55\u5904\u7406\u539F\u6709\u7684 tag",description:"\u5BF9\u4E8E\u6587\u6863\u4E2D\u975E\u88AB\u5FFD\u7565\u7684 tag\uFF0C\u79FB\u52A8\u5230 YAML Front-matter \u540E\u5E94\u8BE5\u91C7\u53D6\u4F55\u79CD\u64CD\u4F5C\uFF1F"},"tags-to-ignore":{name:"\u5FFD\u7565\u7684 tag",description:"\u8FD9\u4E9B tags \u4E0D\u4F1A\u88AB\u79FB\u52A8 YAML Front-matter \u4E2D\u3002\u6BCF\u4E2A tag \u6309\u884C\u5206\u9694\uFF0C\u4E0D\u8981\u5305\u542B#"}},"no-bare-urls":{name:"\u7981\u6B62\u539F\u59CB URL",description:"\u7528\u5C16\u62EC\u53F7\u5305\u56F4\u539F\u59CB URL\uFF0C\u9664\u975E URL \u5728\u53CD\u5F15\u53F7\u3001\u65B9\u62EC\u53F7\u6216\u5355\u5F15\u53F7/\u53CC\u5F15\u53F7\u8303\u56F4\u5185","no-bare-uris":{name:"\u7981\u6B62\u539F\u59CB URI",description:"\u7528\u5C16\u62EC\u53F7\u5305\u56F4\u539F\u59CB URI\uFF0C\u9664\u975E URI \u5728\u53CD\u5F15\u53F7\u3001\u65B9\u62EC\u53F7\u6216\u5355\u5F15\u53F7/\u53CC\u5F15\u53F7\u8303\u56F4\u5185"}},"ordered-list-style":{name:"\u6709\u5E8F\u5217\u8868\u6837\u5F0F",description:"\u786E\u4FDD\u6709\u5E8F\u5217\u8868\u9075\u5FAA\u6307\u5B9A\u7684\u6837\u5F0F\u3002\u8BF7\u6CE8\u610F\uFF0C2\u4E2A\u7A7A\u683C\u62161\u4E2A\u5236\u8868\u7B26\u88AB\u89C6\u4E3A\u4E00\u4E2A\u7F29\u8FDB\u7EA7\u522B","number-style":{name:"\u6392\u5E8F\u65B9\u5F0F",description:"\u6709\u5E8F\u5217\u8868\u5E8F\u53F7\u683C\u5F0F\u5316\u65B9\u5F0F"},"list-end-style":{name:"\u6709\u5E8F\u5217\u8868\u6807\u5FD7\u6837\u5F0F",description:"\u6709\u5E8F\u5217\u8868\u6807\u5FD7\u6837\u5F0F"},"preserve-start":{name:"\u4FDD\u7559\u8D77\u59CB\u503C",description:"\u662F\u5426\u4FDD\u7559\u6709\u5E8F\u5217\u8868\u7684\u8D77\u59CB\u503C"}},"paragraph-blank-lines":{name:"\u6BB5\u843D\u7A7A\u884C",description:"\u6BCF\u4E2A\u6BB5\u843D\u524D\u540E\u4FDD\u8BC1\u6709\u4E14\u4EC5\u6709\u4E00\u884C\u7A7A\u884C"},"prevent-double-checklist-indicator-on-paste":{name:"\u9632\u6B62\u91CD\u590D\u7684\u6E05\u5355\u6807\u8BB0",description:"\u7C98\u8D34\u65F6\uFF0C\u5982\u679C\u5149\u6807\u6240\u5728\u884C\u6709\u6E05\u5355\u6807\u8BB0\uFF0C\u5219\u4ECE\u8981\u7C98\u8D34\u7684\u6587\u672C\u4E2D\u79FB\u9664\u6E05\u5355\u6807\u8BB0"},"prevent-double-list-item-indicator-on-paste":{name:"\u9632\u6B62\u91CD\u590D\u7684\u5217\u8868\u6807\u8BB0",description:"\u7C98\u8D34\u65F6\uFF0C\u5982\u679C\u5149\u6807\u6240\u5728\u884C\u6709\u5217\u8868\u6807\u5FD7\uFF0C\u5219\u4ECE\u8981\u7C98\u8D34\u7684\u6587\u672C\u4E2D\u79FB\u9664\u5217\u8868\u6807\u5FD7"},"proper-ellipsis-on-paste":{name:"\u66F4\u6B63\u7701\u7565\u53F7",description:"\u7C98\u8D34\u65F6\uFF0C\u7528\u7701\u7565\u53F7\u66FF\u6362\u4E09\u4E2A\u8FDE\u7EED\u7684\u70B9\uFF08\u70B9\u4E4B\u95F4\u6709\u7A7A\u683C\u4E5F\u4F1A\u751F\u6548\uFF09"},"proper-ellipsis":{name:"\u66F4\u6B63\u7701\u7565\u53F7",description:"\u7528\u7701\u7565\u53F7\u66FF\u6362\u4E09\u4E2A\u8FDE\u7EED\u7684\u70B9"},"quote-style":{name:"\u5F15\u53F7\u6837\u5F0F",description:"\u683C\u5F0F\u5316\u6B63\u6587\u5185\u5BB9\u4E2D\u7684\u5F15\u53F7\u6837\u5F0F\u4E3A\u5355\u5F15\u53F7\u6216\u53CC\u5F15\u53F7","single-quote-enabled":{name:"\u542F\u7528\u5355\u5F15\u53F7\u6837\u5F0F",description:"\u6307\u5B9A\u5E94\u4F7F\u7528\u9009\u5B9A\u7684\u5355\u5F15\u53F7\u6837\u5F0F"},"single-quote-style":{name:"\u5355\u5F15\u53F7\u6837\u5F0F",description:"\u8981\u4F7F\u7528\u7684\u5355\u5F15\u53F7\u6837\u5F0F"},"double-quote-enabled":{name:"\u542F\u7528\u53CC\u5F15\u53F7\u6837\u5F0F",description:"\u6307\u5B9A\u5E94\u4F7F\u7528\u9009\u5B9A\u7684\u53CC\u5F15\u53F7\u6837\u5F0F"},"double-quote-style":{name:"\u53CC\u5F15\u53F7\u6837\u5F0F",description:"\u8981\u4F7F\u7528\u7684\u53CC\u5F15\u53F7\u6837\u5F0F"}},"re-index-footnotes":{name:"\u811A\u6CE8\u91CD\u65B0\u7D22\u5F15",description:"\u57FA\u4E8E\u51FA\u73B0\u7684\u987A\u5E8F\u5BF9\u811A\u6CE8\u91CD\u65B0\u7D22\u5F15\u3002\u6CE8\u610F\uFF0C\u5982\u679C\u4E00\u4E2A\u5F15\u7528\u5BF9\u5E94\u591A\u6761\u811A\u6CE8\uFF0C\u5219\u6B64\u89C4\u5219\u5931\u6548"},"remove-consecutive-list-markers":{name:"\u79FB\u9664\u91CD\u590D\u7684\u5217\u8868\u6807\u5FD7",description:"\u79FB\u9664\u91CD\u590D\u7684\u5217\u8868\u6807\u5FD7\u3002\u590D\u5236\u7C98\u8D34\u5217\u8868\u9879\u65F6\u5F88\u6709\u7528"},"remove-empty-lines-between-list-markers-and-checklists":{name:"\u79FB\u9664\u5217\u8868\u548C checklist \u9879\u76EE\u4E4B\u95F4\u7684\u7A7A\u884C",description:"\u5217\u8868\u548C checklist \u9879\u76EE\u4E4B\u95F4\u4E0D\u5E94\u6709\u7A7A\u884C"},"remove-empty-list-markers":{name:"\u79FB\u9664\u7A7A\u7684\u5217\u8868\u6807\u5FD7",description:"\u79FB\u9664\u7A7A\u7684\u5217\u8868\u6807\u5FD7\uFF0C\u6BD4\u5982\u5217\u8868\u540E\u6CA1\u5185\u5BB9"},"empty-line-around-horizontal-rules":{name:"\u5206\u9694\u7EBF\u524D\u540E\u7A7A\u884C",description:"\u786E\u4FDD\u5206\u9694\u7EBF\u524D\u540E\u6709\u7A7A\u884C\uFF0C\u9664\u975E\u5B83\u5728\u6587\u6863\u7684\u5F00\u5934\u6216\u7ED3\u5C3E"},"remove-hyphenated-line-breaks":{name:"\u79FB\u9664\u8FDE\u5B57\u7B26",description:"\u79FB\u9664\u4E2D\u5212\u7EBF\u8FDE\u5B57\u7B26\u3002\u4ECE\u6587\u7AE0\u4E2D\u7C98\u8D34\u65F6\u5F88\u6709\u7528"},"remove-hyphens-on-paste":{name:"\u79FB\u9664\u8FDE\u5B57\u7B26",description:"\u7C98\u8D34\u65F6\uFF0C\u4ECE\u8981\u7C98\u8D34\u7684\u6587\u672C\u4E2D\u79FB\u9664\u8FDE\u5B57\u7B26"},"remove-leading-or-trailing-whitespace-on-paste":{name:"\u79FB\u9664\u524D\u5BFC\u6216\u5C3E\u968F\u7A7A\u683C",description:"\u7C98\u8D34\u65F6\uFF0C\u4ECE\u8981\u7C98\u8D34\u7684\u6587\u672C\u4E2D\u79FB\u9664\u4EFB\u4F55\u524D\u5BFC\u975E\u5236\u8868\u7B26\u7A7A\u683C\u548C\u6240\u6709\u5C3E\u968F\u7A7A\u683C"},"remove-leftover-footnotes-from-quote-on-paste":{name:"\u79FB\u9664\u811A\u6CE8\u5F15\u7528",description:"\u7C98\u8D34\u65F6\uFF0C\u4ECE\u8981\u7C98\u8D34\u7684\u6587\u672C\u4E2D\u79FB\u9664\u811A\u6CE8\u5F15\u7528"},"remove-link-spacing":{name:"\u79FB\u9664\u94FE\u63A5\u7A7A\u683C",description:"\u79FB\u9664\u94FE\u63A5\u6587\u672C\u9996\u5C3E\u7684\u7A7A\u683C"},"remove-multiple-blank-lines-on-paste":{name:"\u79FB\u9664\u91CD\u590D\u7A7A\u884C",description:"\u7C98\u8D34\u65F6\uFF0C\u4ECE\u8981\u7C98\u8D34\u7684\u6587\u672C\u4E2D\u5C06\u591A\u4E2A\u7A7A\u884C\u538B\u7F29\u4E3A\u4E00\u4E2A\u7A7A\u884C"},"remove-multiple-spaces":{name:"\u79FB\u9664\u91CD\u590D\u7A7A\u683C",description:"\u79FB\u9664\u4E24\u4E2A\u6216\u66F4\u591A\u8FDE\u7EED\u7684\u7A7A\u683C\uFF0C\u5FFD\u7565\u884C\u9996\u548C\u884C\u5C3E\u7684\u7A7A\u683C"},"remove-space-around-characters":{name:"\u79FB\u9664\u5B57\u7B26\u5468\u56F4\u7684\u7A7A\u683C",description:"\u786E\u4FDD\u67D0\u4E9B\u5B57\u7B26\u5468\u56F4\u6CA1\u6709\u7A7A\u683C\uFF08\u5305\u62EC\u5355\u4E2A\u7A7A\u683C\u6216\u5236\u8868\u7B26\uFF09\u3002\u6CE8\u610F\uFF0C\u8FD9\u53EF\u80FD\u4F1A\u5728\u67D0\u4E9B\u60C5\u51B5\u4E0B\u5F71\u54CD markdown \u683C\u5F0F","include-fullwidth-forms":{name:"\u5305\u62EC\u5168\u89D2\u5F62\u5F0F",description:'\u5305\u62EC\u5168\u89D2\u5F62\u5F0FUnicode\u5757'},"include-cjk-symbols-and-punctuation":{name:"\u5305\u62ECCJK\u7B26\u53F7\u548C\u6807\u70B9",description:'\u5305\u62ECCJK\u7B26\u53F7\u548C\u6807\u70B9Unicode\u5757'},"include-dashes":{name:"\u5305\u62EC\u7834\u6298\u53F7",description:"\u5305\u62EC en dash (\u2013) \u548C em dash (\u2014)"},"other-symbols":{name:"\u5176\u4ED6\u7B26\u53F7",description:"\u8981\u5305\u62EC\u7684\u5176\u4ED6\u7B26\u53F7"}},"remove-space-before-or-after-characters":{name:"\u79FB\u9664\u5B57\u7B26\u524D\u540E\u7684\u7A7A\u683C",description:"\u79FB\u9664\u6307\u5B9A\u5B57\u7B26\u4E4B\u524D\u548C\u6307\u5B9A\u5B57\u7B26\u4E4B\u540E\u7684\u7A7A\u683C\u3002 \u6CE8\u610F\uFF0C\u5728\u67D0\u4E9B\u60C5\u51B5\u4E0B\uFF0C\u8FD9\u53EF\u80FD\u4F1A\u5BFC\u81F4 markdown \u683C\u5F0F\u51FA\u73B0\u95EE\u9898","characters-to-remove-space-before":{name:"\u79FB\u9664\u5B57\u7B26\u524D\u7684\u7A7A\u683C",description:"\u79FB\u9664\u6307\u5B9A\u5B57\u7B26\u524D\u7684\u7A7A\u683C\u3002 \u6CE8\u610F\uFF0C\u5728\u5B57\u7B26\u5217\u8868\u4E2D\u4F7F\u7528{\u6216}\u4F1A\u610F\u5916\u5F71\u54CD\u6587\u4EF6\uFF0C\u56E0\u4E3A\u5B83\u5728\u7A0B\u5E8F\u540E\u53F0\u7684\u5FFD\u7565\u8BED\u6CD5\u4E2D\u4F7F\u7528"},"characters-to-remove-space-after":{name:"\u79FB\u9664\u5B57\u7B26\u540E\u7684\u7A7A\u683C",description:"\u79FB\u9664\u6307\u5B9A\u5B57\u7B26\u540E\u7684\u7A7A\u683C\u3002 \u6CE8\u610F\uFF0C\u5728\u5B57\u7B26\u5217\u8868\u4E2D\u4F7F\u7528{\u6216}\u4F1A\u610F\u5916\u5F71\u54CD\u6587\u4EF6\uFF0C\u56E0\u4E3A\u5B83\u5728\u7A0B\u5E8F\u540E\u53F0\u7684\u5FFD\u7565\u8BED\u6CD5\u4E2D\u4F7F\u7528"}},"remove-trailing-punctuation-in-heading":{name:"\u79FB\u9664\u6807\u9898\u4E2D\u7684\u7ED3\u5C3E\u6807\u70B9\u7B26\u53F7",description:'\u4ECE\u6807\u9898\u7684\u672B\u5C3E\u5220\u9664\u6307\u5B9A\u7684\u6807\u70B9\u7B26\u53F7\uFF0C\u4E0D\u4F1A\u5220\u9664 HTML \u5B57\u7B26\u5B9E\u4F53\u672B\u5C3E\u7684\u5206\u53F7',"punctuation-to-remove":{name:"\u8981\u5220\u9664\u7684\u7ED3\u5C3E\u6807\u70B9\u7B26\u53F7",description:"\u8981\u4ECE\u6587\u4EF6\u6807\u9898\u7ED3\u5C3E\u4E2D\u5220\u9664\u7684\u6807\u70B9\u7B26\u53F7"}},"remove-yaml-keys":{name:"\u79FB\u9664 YAML \u952E",description:"\u79FB\u9664\u6307\u5B9A\u7684 YAML \u952E","yaml-keys-to-remove":{name:"\u9700\u8981\u79FB\u9664\u7684 YAML \u952E",description:"\u8981\u4ECE YAML Front-matter \u4E2D\u5220\u9664\u7684 YAML \u952E \uFF08\u53EF\u5E26\u6216\u4E0D\u5E26\u5192\u53F7\uFF09"}},"sort-yaml-array-values":{name:"YAML \u503C\u6392\u5E8F",description:"\u57FA\u4E8E\u6307\u5B9A\u89C4\u5219\u5BF9 YAML \u503C\u6392\u5E8F","sort-alias-key":{name:"YAML aliases \u6392\u5E8F",description:"\u6253\u5F00\u4EE5\u5BF9 YAML aliases \u6392\u5E8F"},"sort-tag-key":{name:"YAML tags \u6392\u5E8F",description:"\u6253\u5F00\u4EE5\u5BF9 YAML tags \u6392\u5E8F"},"sort-array-keys":{name:"YAML array \u6392\u5E8F",description:"\u6253\u5F00\u4EE5\u5BF9\u666E\u901A YAML \u6570\u7EC4\u4E2D\u7684\u503C\u6392\u5E8F"},"ignore-keys":{name:"\u8981\u5FFD\u7565\u7684 YAML \u952E",description:"\u8981\u5FFD\u7565\u7684 YAML \u952E\u5217\u8868\uFF0C\u6BCF\u884C\u4E00\u4E2A\u952E"},"sort-order":{name:"\u6392\u5E8F\u65B9\u5F0F",description:"\u6392\u5E8F\u65B9\u5F0F"}},"space-after-list-markers":{name:"\u5217\u8868\u6807\u5FD7\u7A7A\u683C",description:"\u5217\u8868\u6807\u5FD7\u548C checkbox \u540E\u5E94\u6709\u4E00\u4E2A\u7A7A\u683C"},"space-between-chinese-japanese-or-korean-and-english-or-numbers":{name:"\u4E2D\u65E5\u97E9\u8BED\u4E0E\u82F1\u8BED\u6216\u6570\u5B57\u4E4B\u95F4\u7684\u7A7A\u683C",description:'\u786E\u4FDD\u4E2D\u65E5\u97E9\u6587\u4E0E\u82F1\u6587\u6570\u5B57\u4E4B\u95F4\u6709\u4E00\u4E2A\u7A7A\u683C \u53C2\u8003\u94FE\u63A5',"english-symbols-punctuation-before":{name:"English Punctuations and Symbols Before CJK",description:'\u88AB\u8BA4\u4E3A\u662F\u82F1\u6587\u7684\u5728\u4E2D\u65E5\u97E9\u6587\u5B57\u7B26\u4E4B"\u524D"\u627E\u5230\u7684\u975E\u5B57\u6BCD\u6807\u70B9\u7B26\u53F7 \u6CE8\u610F: "*" \u4F1A\u88AB\u8BA4\u4E3A\u662F\u82F1\u6587'},"english-symbols-punctuation-after":{name:"English Punctuations and Symbols After CJK",description:'\u88AB\u8BA4\u4E3A\u662F\u82F1\u6587\u7684\u5728\u4E2D\u65E5\u97E9\u6587\u5B57\u7B26\u4E4B"\u540E"\u627E\u5230\u7684\u975E\u5B57\u6BCD\u6807\u70B9\u7B26\u53F7 \u6CE8\u610F: "*" \u4F1A\u88AB\u8BA4\u4E3A\u662F\u82F1\u6587'}},"strong-style":{name:"\u7C97\u4F53\u6837\u5F0F",description:"\u786E\u4FDD\u7C97\u4F53\u6837\u5F0F\u4E00\u81F4",style:{name:"\u6837\u5F0F",description:"\u7528\u4E8E\u8868\u793A\u7C97\u4F53\u7684\u6837\u5F0F"}},"trailing-spaces":{name:"\u672B\u5C3E\u7A7A\u683C",description:"\u79FB\u9664\u6BCF\u884C\u672B\u5C3E\u591A\u4F59\u7684\u7A7A\u683C","twp-space-line-break":{name:"\u4E24\u7A7A\u683C\u6362\u884C",description:'\u5FFD\u7565\u4E24\u4E2A\u7A7A\u683C\u540E\u63A5\u6362\u884C\u7B26\u7684\u60C5\u51B5\uFF08"\u4E24\u7A7A\u683C\u89C4\u5219"\uFF09'}},"two-spaces-between-lines-with-content":{name:"\u4E0D\u540C\u5185\u5BB9\u95F4\u6362\u884C",description:"\u786E\u4FDD\u5728\u6BB5\u843D\u3001\u5F15\u7528\u548C\u5217\u8868\u9879\u4E4B\u95F4\uFF0C\u6BCF\u5757\u5185\u5BB9\u7684\u672B\u5C3E\u6709\u4E24\u4E2A\u7A7A\u683C","line-break-indicator":{name:"\u6362\u884C\u6807\u8BB0",description:"\u8981\u4F7F\u7528\u7684\u6362\u884C\u6807\u8BB0"}},"unordered-list-style":{name:"\u65E0\u5E8F\u5217\u8868\u6837\u5F0F",description:"\u786E\u4FDD\u65E0\u5E8F\u5217\u8868\u7B26\u5408\u6307\u5B9A\u7684\u6837\u5F0F","list-style":{name:"\u5217\u8868\u9879\u6837\u5F0F",description:"\u5217\u8868\u9879\u9700\u8981\u6307\u5B9A\u7684\u6837\u5F0F"}},"yaml-key-sort":{name:"YAML \u952E\u6392\u5E8F",description:"\u6839\u636E\u6307\u5B9A\u7684\u987A\u5E8F\u548C\u4F18\u5148\u7EA7\u5BF9 YAML \u952E\u8FDB\u884C\u6392\u5E8F\u3002\u6CE8\u610F\uFF0C\u4E5F\u8BB8\u4E5F\u4F1A\u5220\u9664\u7A7A\u884C","yaml-key-priority-sort-order":{name:"YAML \u952E\u4F18\u5148\u7EA7\u6392\u5E8F\u987A\u5E8F",description:"\u5BF9\u952E\u8FDB\u884C\u6392\u5E8F\u7684\u987A\u5E8F\uFF0C\u6BCF\u884C\u4E00\u4E2A\u952E\uFF0C\u6309\u5217\u8868\u4E2D\u7684\u987A\u5E8F\u8FDB\u884C\u6392\u5E8F"},"priority-keys-at-start-of-yaml":{name:"\u6392\u5E8F\u952E\u653E\u5728 YAML \u5F00\u5934",description:"\u6309\u7167 YAML \u952E\u4F18\u5148\u7EA7\u6392\u5E8F\u987A\u5E8F\u5C06\u952E\u653E\u4E8E YAML Front-matter \u5F00\u5934"},"yaml-sort-order-for-other-keys":{name:"YAML \u5176\u5B83\u952E\u7684\u6392\u5E8F\u987A\u5E8F",description:"\u5BF9 YAML \u952E\u4F18\u5148\u7EA7\u6392\u5E8F\u987A\u5E8F\u4E2D\u672A\u627E\u5230\u7684\u952E\u8FDB\u884C\u6392\u5E8F"}},"yaml-timestamp":{name:"YAML \u65F6\u95F4\u6233",description:"\u5728 YAML Front-matter \u4E2D\u8BB0\u5F55\u4E0A\u6B21\u7F16\u8F91\u6587\u6863\u7684\u65E5\u671F\u3002\u4ECE\u6587\u6863\u5143\u6570\u636E\u4E2D\u83B7\u53D6\u65E5\u671F\u6570\u636E","date-created":{name:"\u521B\u5EFA\u65E5\u671F",description:"\u63D2\u5165\u6587\u4EF6\u7684\u521B\u5EFA\u65E5\u671F"},"date-created-key":{name:"\u521B\u5EFA\u65E5\u671F\u952E\u540D",description:"\u4F7F\u7528\u54EA\u4E2A YAML \u952E\u6765\u8868\u793A\u521B\u5EFA\u65E5\u671F"},"date-created-source-of-truth":{name:"\u521B\u5EFA\u65E5\u671F\u6570\u636E\u6E90",description:"\u5982\u679C YAML Front-matter \u4E2D\u5DF2\u7ECF\u6709\u521B\u5EFA\u65F6\u95F4\uFF0C\u4ECE\u54EA\u91CC\u83B7\u53D6\u521B\u5EFA\u65F6\u95F4\u65B0\u503C"},"date-modified-source-of-truth":{name:"\u4FEE\u6539\u65E5\u671F\u6570\u636E\u6E90",description:"\u5982\u679C YAML Front-matter \u4E2D\u5DF2\u7ECF\u6709\u4FEE\u6539\u65E5\u671F\uFF0C\u4ECE\u54EA\u91CC\u83B7\u53D6\u4FEE\u6539\u65F6\u95F4\u65B0\u503C"},"date-modified":{name:"\u4FEE\u6539\u65E5\u671F",description:"\u63D2\u5165\u6587\u4EF6\u7684\u6700\u8FD1\u4E00\u6B21\u7684\u4FEE\u6539\u65E5\u671F"},"date-modified-key":{name:"\u4FEE\u6539\u65E5\u671F\u952E\u540D",description:"\u4F7F\u7528\u54EA\u4E2A YAML \u952E\u6765\u8868\u793A\u4FEE\u6539\u65E5\u671F"},format:{name:"\u683C\u5F0F",description:'Moment.js \u8BED\u6CD5\u683C\u5F0F \u8BF4\u660E\uFF09'},"convert-to-utc":{name:"\u672C\u5730\u65F6\u95F4\u8F6C\u4E3A UTC \u65F6\u95F4",description:"\u672C\u5730\u65F6\u95F4\u8F6C\u4E3A UTC \u65F6\u95F4"},"update-on-file-contents-updated":{name:"\u6587\u4EF6\u5185\u5BB9\u53D8\u5316\u65F6\u66F4\u65B0 YAML \u65F6\u95F4\u6233",description:"\u5F53\u524D\u6D3B\u52A8\u7B14\u8BB0\u88AB\u4FEE\u6539\u65F6\uFF0C\u4FEE\u6539\u65E5\u671F\u5C06\u4F1A\u5B9E\u65F6\u66F4\u65B0\u3002"}},"yaml-title-alias":{name:"YAML \u6807\u9898\u522B\u540D",description:"\u5C06\u6587\u6863\u7684\u6807\u9898\u63D2\u5165 YAML Front-matter \u7684 aliases \u90E8\u5206\u3002\u4ECE\u7B2C\u4E00\u4E2A H1 \u6807\u9898\u6216\u6587\u6863\u540D\u4E2D\u83B7\u53D6\u503C","preserve-existing-alias-section-style":{name:"\u4FDD\u7559\u73B0\u6709\u522B\u540D\u90E8\u5206\u6837\u5F0F",description:"\u5982\u679C\u8BBE\u7F6E\uFF0C\u6B64\u9879\u4EC5\u5728\u65B0\u521B\u5EFA\u7684\u522B\u540D\u90E8\u5206\u751F\u6548"},"keep-alias-that-matches-the-filename":{name:"\u786E\u4FDD\u522B\u540D\u4E0E\u6587\u4EF6\u540D\u5339\u914D",description:"\u8FD9\u6837\u7684\u522B\u540D\u901A\u5E38\u662F\u5197\u4F59\u7684"},"use-yaml-key-to-keep-track-of-old-filename-or-heading":{name:"\u4F7F\u7528 YAML \u952E linter-yaml-title-alias \u6765\u4FDD\u7559\u6807\u9898\u4FEE\u6539\u8BB0\u5F55",description:"\u5982\u679C\u8BBE\u7F6E\uFF0C\u5F53\u7B2C\u4E00\u4E2A H1 \u6807\u9898\u66F4\u6539\u6216\u6587\u6863\u540D\u66F4\u6539\u65F6\uFF0C\u6B64\u952E\u4E2D\u5B58\u50A8\u7684\u65E7 aliases \u5C06\u66FF\u6362\u4E3A\u65B0\u503C\uFF0C\u800C\u4E0D\u4EC5\u4EC5\u662F\u5728 aliases \u4E2D\u63D2\u5165\u65B0\u6761\u76EE"},"alias-helper-key":{name:"\u522B\u540D\u8F85\u52A9\u952E",description:"\u6B64\u952E\u7528\u4E8E\u4FDD\u5B58\u6807\u9898\u522B\u540D\u5386\u53F2"}},"yaml-title":{name:"YAML \u6807\u9898",description:"\u6839\u636E\u6307\u5B9A\u6A21\u5F0F\uFF0C\u5C06\u6587\u4EF6\u7684\u6807\u9898\u63D2\u5165\u5230 YAML Front-matter \u4E2D","title-key":{name:"\u6807\u9898\u952E",description:"\u6807\u9898\u4F7F\u7528\u54EA\u4E00\u4E2A YAML \u952E"},mode:{name:"\u6A21\u5F0F",description:"\u7528\u4E8E\u83B7\u53D6\u6807\u9898\u7684\u65B9\u6CD5"}}},enums:{"Title Case":"\u6BCF\u8BCD\u9996\u5B57\u6BCD\u5927\u5199","ALL CAPS":"\u5168\u90E8\u5927\u5199","First letter":"\u4EC5\u9996\u5B57\u6BCD\u5927\u5199",".":".",")":")",ERROR:"ERROR",TRACE:"TRACE",DEBUG:"DEBUG",INFO:"INFO",WARN:"WARN",SILENT:"SILENT",ascending:"\u5347\u5E8F",lazy:"\u5168\u4E3A1",preserve:"\u4FDD\u6301\u539F\u6837",Nothing:"\u65E0","Remove hashtag":"\u79FB\u9664 hashtag","Remove whole tag":"\u79FB\u9664\u6574\u4E2A tag",asterisk:"\u661F\u53F7(*)",underscore:"\u4E0B\u5212\u7EBF(_)",consistent:"\u4FDD\u6301\u4E00\u81F4","-":"-","*":"*","+":"+",space:"\u6709\u7A7A\u683C","no space":"\u65E0\u7A7A\u683C",None:"\u65E0","Ascending Alphabetical":"\u6309\u5B57\u6BCD\u987A\u5E8F\u5347\u5E8F","Descending Alphabetical":"\u6309\u5B57\u6BCD\u987A\u5E8F\u964D\u5E8F","multi-line":"\u591A\u884C\u6570\u7EC4","single-line":"\u5355\u884C\u6570\u7EC4","single string to single-line":"\u5B57\u7B26\u4E32\u8F6C\u5355\u884C\u6570\u7EC4","single string to multi-line":"\u5B57\u7B26\u4E32\u8F6C\u591A\u884C\u6570\u7EC4","single string comma delimited":"\u9017\u53F7\u5206\u9694\u5B57\u7B26\u4E32","single string space delimited":"\u7A7A\u683C\u5206\u9694\u5B57\u7B26\u4E32","single-line space delimited":"\u7A7A\u683C\u5206\u9694\u5355\u884C\u6570\u7EC4","first-h1":"\u7B2C\u4E00\u4E2A H1 \u6807\u9898","first-h1-or-filename-if-h1-missing":"\u7B2C\u4E00\u4E2A H1 \u6807\u9898\u6216\u6587\u4EF6\u540D\uFF08\u7B2C\u4E00\u4E2A H1 \u6807\u9898\u4E0D\u5B58\u5728\u65F6\uFF09",filename:"\u6587\u4EF6\u540D",never:"Never","after 5 seconds":"5 \u79D2\u540E","after 10 seconds":"10 \u79D2\u540E","after 15 seconds":"15 \u79D2\u540E","after 30 seconds":"30 \u79D2\u540E","after 1 minute":"1 \u5206\u949F\u540E","file system":"\u7CFB\u7EDF",frontmatter:"YAML Front-matter","user or Linter edits":"Obsidian","''":"''","\u2018\u2019":"\u2018\u2019",'""':'""',"\u201C\u201D":"\u201C\u201D","\\":"\\","
    ":"
    "," ":" ","
    ":"
    "}};var xd={};var hl={ar:td,cz:nd,da:id,de:rd,en:gl,es:ad,fr:od,hi:sd,id:ld,it:cd,ja:ud,ko:dd,nl:pd,no:md,pl:fd,"pt-BR":hd,pt:gd,ro:yd,ru:bd,sq:vd,tr:kd,uk:wd,"zh-TW":xd,zh:Ad};var Ld="en",fo=Ld,fr=hl[fo];function go(e){fo=e,fr=hl[fo],fr||(pt(`locale not found for '${fo}'`),fr=hl[Ld])}function x(e){return fr&&pr(fr,e)||pr(gl,e)}var ho=function(e){if(e==null)return qh;if(typeof e=="function")return yo(e);if(typeof e=="object")return Array.isArray(e)?_h(e):Ph(e);if(typeof e=="string")return Hh(e);throw new Error("Expected function, string, or object as test")};function _h(e){let n=[],t=-1;for(;++t":""))+")"})}return m;function m(){let p=Sd,f,b,h;if((!n||a(l,c,u[u.length-1]||void 0))&&(p=Wh(t(l,u)),p[0]===bo))return p;if("children"in l&&l.children){let k=l;if(k.children&&p[0]!==bl)for(b=(i?k.children.length:-1)+o,h=u.concat(k);b>-1&&b=0;){let r=e.charAt(i);if(r===` +`)break;r.trim()===""||r===">"?t=r+t:t="",i--}return[t,i]}function kl(e=""){let[n]=Oi(e,e.length);return` +`+n.trim()}function Ed(e="",n=!1,t=1){let i=kl(e),r=sn(i,">");return(n||wo.test(e))&&t===r||t")):i}function Vh(e,n){if(n===0)return e;let t=n,i=n;for(;t>=0;){let r=e.charAt(t);if(r.trim()!=="")break;r===` +`&&(i=t),t--}return t<0||i===0?e.substring(n+1):e.substring(0,i)+` +`+e.substring(n)}function jh(e,n,t,i=!1,r=!1){if(t===0)return e;let a=n.split(">").length-1,o=t,s=t,l=0,c=!1,u="";for(;o>=0;){let A=e.charAt(o);if(A.trim()!==""&&A!==">")break;if(A===">"){if(c)break;l++}else if(A===` +`)if(l===0||l===a||l+1===a)s=o,l=0,u===` +`&&(c=!0);else break;o--,u=A}if(o<0||s===0)return e.substring(t+1);let d=e.substring(s,t);if(d===` +`||d.startsWith(` + +`))return e.substring(0,s)+` +`+e.substring(t);let p=e.lastIndexOf(` +`,s-1),f="";p===-1?f=e.substring(0,s):f=e.substring(p,s);let b,h=e.indexOf(` +`,t+1);h===-1?b=e.substring(t):b=e.substring(t,h);let k;return r?k=Ed(f,i,a):sn(f,">")!=0&&!wo.test(f)&&(gr.test(f)||gr.test(b))?k=e.substring(s,t).trimEnd():k=kl(f),e.substring(0,s)+k+e.substring(t)}function $h(e,n){if(n===e.length-1)return e;let t=n,i=n,r=!0;for(;t").length-1,o=t,s=t,l=!0,c=0,u=!1,d="",m=!0,p=e.charAt(o-1);for(;o")break;if(M===">"){if(u)break;c++}else if(M===` +`)if(c===0||c===a||c+1===a)c=0,l?l=!1:s=o,d===` +`&&(u=!0);else break;if(o++,d=M,m&&M===` +`&&r&&p===` +`){s=o;break}m=!1}if(o===e.length||s===e.length-1)return e.substring(0,t);let f=e.substring(t,s);if(f===` +`||f.endsWith(` + +`))return e.substring(0,t)+` +`+e.substring(s);let h=e.indexOf(` +`,s+1),k="";h===-1?k=e.substring(s):k=e.substring(s+1,h);let A,S=e.lastIndexOf(` +`,t-1);S===-1?A=e.substring(0,s):A=e.substring(S+1,t);let T;return r?T=Ed(k,i,a):gr.test(k)||gr.test(A)?T=e.substring(t,s).trimEnd():T=kl(k),e.substring(0,t)+T+e.substring(s)}function on(e,n,t,i=!1){let[r,a]=Oi(e,n);if(r.trim()!==""){let s=wo.test(e.substring(n,t)),l=sn(r,">"),c=Qh(e,t,l),u=Gh(e,r,c,s,i);return a=Zh(u,a,l),jh(u,r,a,s,i)}let o=$h(e,t);return Vh(o,a)}function Td(e,n=0){let t=3735928559^n,i=1103547991^n;for(let r=0,a;r>>16,2246822507)^Math.imul(i^i>>>13,3266489909),i=Math.imul(i^i>>>16,2246822507)^Math.imul(t^t>>>13,3266489909),4294967296*(2097151&i)+(t>>>0)}function Cd(e){return e=e.replaceAll("\\b","\b"),e=e.replaceAll("\\f","\f"),e=e.replaceAll("\\n",` +`),e=e.replaceAll("\\r","\r"),e=e.replaceAll("\\t"," "),e=e.replaceAll("\\v","\v"),e}function hr(e,n){if(n==0)return n;let t=n;for(;t>0&&e.charAt(t-1)!==` +`;)t--;return t}function Od(e,n,t,i){return i>e.length-1?e:e.slice(0,i)+e.slice(i,e.length).replace(n,t)}function sn(e,n){let t=0;for(let i=0,r=e.length;i-1&&(t++,i=a)}return t}function ko(e){let n=typeof e;return n!="string"?n==="number":!isNaN(e)&&!isNaN(parseFloat(e))}function Md(e,n){let t=[],i=-1;for(;(i=n.indexOf(e,i+1))>=0;)t.push(i);return t}function Zh(e,n,t){let i=n,r=n+1,a="",o=!1,s=0;for(;r"){o=!0;break}else if(a===` +`){if(s!==t)break;s=0,i=r}else a===">"&&s++;r++}return o?i:n}function Qh(e,n,t){let i=n,r=n-1,a="",o=!1,s=0;for(;r>=0;){if(a=e.charAt(r),a.trim()!==""&&a!==">"){o=!0;break}else if(a===` +`){if(s!==t)break;s=0,i=r}else a===">"&&s++;r--}return o?i:n}function Mi(e){let n=Ii(e),t=new Map,i="",r=[],a=[];for(let o of n){i=e.substring(o.startIndex,o.endIndex),r=i.split(` +`),r.splice(0,2);for(let s of r){if(a=s.split("|"),a.length!==4){pt(x("options.custom-auto-correct.custom-row-parse-warning").replace("{ROW}",s));continue}t.set(a[1].trim().toLowerCase(),a[2].trim())}}return t}function ze(e,n,t,i){let r=e.length,a=0,o;if(n<0?n=-n>r?0:r+n:n=n>r?r:n,t=t>0?t:0,i.length<1e4)o=Array.from(i),o.unshift(n,t),e.splice(...o);else for(t&&e.splice(n,t);a0?(ze(e,e.length,0,n),e):n}var Jh=ln(/\p{P}/u),at=ln(/[A-Za-z]/),Qe=ln(/[\dA-Za-z]/),Id=ln(/[#-'*+\--9=?A-Z^-~]/);function yr(e){return e!==null&&(e<32||e===127)}var br=ln(/\d/),Fd=ln(/[\dA-Fa-f]/),wl=ln(/[!-/:-@[-`{-~]/);function F(e){return e!==null&&e<-2}function ne(e){return e!==null&&(e<0||e===32)}function H(e){return e===-2||e===-1||e===32}function Rd(e){return wl(e)||Jh(e)}var Bd=ln(/\s/);function ln(e){return n;function n(t){return t!==null&&t>-1&&e.test(String.fromCharCode(t))}}function Al(e){if(e===null||ne(e)||Bd(e))return 1;if(Rd(e))return 2}function Fi(e,n,t){let i=[],r=-1;for(;++r1&&e[t][1].end.offset-e[t][1].start.offset>1?2:1;let d=Object.assign({},e[i][1].end),m=Object.assign({},e[t][1].start);Dd(d,-l),Dd(m,l),o={type:l>1?"strongSequence":"emphasisSequence",start:d,end:Object.assign({},e[i][1].end)},s={type:l>1?"strongSequence":"emphasisSequence",start:Object.assign({},e[t][1].start),end:m},a={type:l>1?"strongText":"emphasisText",start:Object.assign({},e[i][1].end),end:Object.assign({},e[t][1].start)},r={type:l>1?"strong":"emphasis",start:Object.assign({},o.start),end:Object.assign({},s.end)},e[i][1].end=Object.assign({},o.start),e[t][1].start=Object.assign({},s.end),c=[],e[i][1].end.offset-e[i][1].start.offset&&(c=Ze(c,[["enter",e[i][1],n],["exit",e[i][1],n]])),c=Ze(c,[["enter",r,n],["enter",o,n],["exit",o,n],["enter",a,n]]),c=Ze(c,Fi(n.parser.constructs.insideSpan.null,e.slice(i+1,t),n)),c=Ze(c,[["exit",a,n],["enter",s,n],["exit",s,n],["exit",r,n]]),e[t][1].end.offset-e[t][1].start.offset?(u=2,c=Ze(c,[["enter",e[t][1],n],["exit",e[t][1],n]])):u=0,ze(e,i-1,t-i+3,c),t=i+c.length-u-2;break}}for(t=-1;++t0&&H(E)?P(e,A,"linePrefix",a+1)(E):A(E)}function A(E){return E===null||F(E)?e.check(zd,b,T)(E):(e.enter("codeFlowValue"),S(E))}function S(E){return E===null||F(E)?(e.exit("codeFlowValue"),A(E)):(e.consume(E),S)}function T(E){return e.exit("codeFenced"),n(E)}function M(E,O,N){let B=0;return z;function z(W){return E.enter("lineEnding"),E.consume(W),E.exit("lineEnding"),V}function V(W){return E.enter("codeFencedFence"),H(W)?P(E,$,"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(W):$(W)}function $(W){return W===s?(E.enter("codeFencedFenceSequence"),D(W)):N(W)}function D(W){return W===s?(B++,E.consume(W),D):B>=o?(E.exit("codeFencedFenceSequence"),H(W)?P(E,U,"whitespace")(W):U(W)):N(W)}function U(W){return W===null||F(W)?(E.exit("codeFencedFence"),O(W)):N(W)}}}function cy(e,n,t){let i=this;return r;function r(o){return o===null?t(o):(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),a)}function a(o){return i.parser.lazy[i.now().line]?t(o):n(o)}}var kr={name:"codeIndented",tokenize:dy},uy={tokenize:py,partial:!0};function dy(e,n,t){let i=this;return r;function r(c){return e.enter("codeIndented"),P(e,a,"linePrefix",5)(c)}function a(c){let u=i.events[i.events.length-1];return u&&u[1].type==="linePrefix"&&u[2].sliceSerialize(u[1],!0).length>=4?o(c):t(c)}function o(c){return c===null?l(c):F(c)?e.attempt(uy,o,l)(c):(e.enter("codeFlowValue"),s(c))}function s(c){return c===null||F(c)?(e.exit("codeFlowValue"),o(c)):(e.consume(c),s)}function l(c){return e.exit("codeIndented"),n(c)}}function py(e,n,t){let i=this;return r;function r(o){return i.parser.lazy[i.now().line]?t(o):F(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),r):P(e,a,"linePrefix",5)(o)}function a(o){let s=i.events[i.events.length-1];return s&&s[1].type==="linePrefix"&&s[2].sliceSerialize(s[1],!0).length>=4?n(o):F(o)?r(o):t(o)}}var Ll={name:"codeText",tokenize:gy,resolve:my,previous:fy};function my(e){let n=e.length-4,t=3,i,r;if((e[t][1].type==="lineEnding"||e[t][1].type==="space")&&(e[n][1].type==="lineEnding"||e[n][1].type==="space")){for(i=t;++i=4?n(o):e.interrupt(i.parser.constructs.flow,t,n)(o)}}function To(e,n,t,i,r,a,o,s,l){let c=l||Number.POSITIVE_INFINITY,u=0;return d;function d(k){return k===60?(e.enter(i),e.enter(r),e.enter(a),e.consume(k),e.exit(a),m):k===null||k===32||k===41||yr(k)?t(k):(e.enter(i),e.enter(o),e.enter(s),e.enter("chunkString",{contentType:"string"}),b(k))}function m(k){return k===62?(e.enter(a),e.consume(k),e.exit(a),e.exit(r),e.exit(i),n):(e.enter(s),e.enter("chunkString",{contentType:"string"}),p(k))}function p(k){return k===62?(e.exit("chunkString"),e.exit(s),m(k)):k===null||k===60||F(k)?t(k):(e.consume(k),k===92?f:p)}function f(k){return k===60||k===62||k===92?(e.consume(k),p):p(k)}function b(k){return!u&&(k===null||k===41||ne(k))?(e.exit("chunkString"),e.exit(s),e.exit(o),e.exit(i),n(k)):u999||p===null||p===91||p===93&&!l||p===94&&!s&&"_hiddenFootnoteSupport"in o.parser.constructs?t(p):p===93?(e.exit(a),e.enter(r),e.consume(p),e.exit(r),e.exit(i),n):F(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),u):(e.enter("chunkString",{contentType:"string"}),d(p))}function d(p){return p===null||p===91||p===93||F(p)||s++>999?(e.exit("chunkString"),u(p)):(e.consume(p),l||(l=!H(p)),p===92?m:d)}function m(p){return p===91||p===92||p===93?(e.consume(p),s++,d):d(p)}}function Oo(e,n,t,i,r,a){let o;return s;function s(m){return m===34||m===39||m===40?(e.enter(i),e.enter(r),e.consume(m),e.exit(r),o=m===40?41:m,l):t(m)}function l(m){return m===o?(e.enter(r),e.consume(m),e.exit(r),e.exit(i),n):(e.enter(a),c(m))}function c(m){return m===o?(e.exit(a),l(o)):m===null?t(m):F(m)?(e.enter("lineEnding"),e.consume(m),e.exit("lineEnding"),P(e,c,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),u(m))}function u(m){return m===o||m===null||F(m)?(e.exit("chunkString"),c(m)):(e.consume(m),m===92?d:u)}function d(m){return m===o||m===92?(e.consume(m),u):u(m)}}function Rn(e,n){let t;return i;function i(r){return F(r)?(e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),t=!0,i):H(r)?P(e,i,t?"linePrefix":"lineSuffix")(r):n(r)}}function Ve(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}var El={name:"definition",tokenize:Ay},wy={tokenize:xy,partial:!0};function Ay(e,n,t){let i=this,r;return a;function a(p){return e.enter("definition"),o(p)}function o(p){return Co.call(i,e,s,t,"definitionLabel","definitionLabelMarker","definitionLabelString")(p)}function s(p){return r=Ve(i.sliceSerialize(i.events[i.events.length-1][1]).slice(1,-1)),p===58?(e.enter("definitionMarker"),e.consume(p),e.exit("definitionMarker"),l):t(p)}function l(p){return ne(p)?Rn(e,c)(p):c(p)}function c(p){return To(e,u,t,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(p)}function u(p){return e.attempt(wy,d,d)(p)}function d(p){return H(p)?P(e,m,"whitespace")(p):m(p)}function m(p){return p===null||F(p)?(e.exit("definition"),i.parser.defined.push(r),n(p)):t(p)}}function xy(e,n,t){return i;function i(s){return ne(s)?Rn(e,r)(s):t(s)}function r(s){return Oo(e,a,t,"definitionTitle","definitionTitleMarker","definitionTitleString")(s)}function a(s){return H(s)?P(e,o,"whitespace")(s):o(s)}function o(s){return s===null||F(s)?n(s):t(s)}}var Tl={name:"hardBreakEscape",tokenize:Ly};function Ly(e,n,t){return i;function i(a){return e.enter("hardBreakEscape"),e.consume(a),r}function r(a){return F(a)?(e.exit("hardBreakEscape"),n(a)):t(a)}}var Cl={name:"headingAtx",tokenize:Ey,resolve:Sy};function Sy(e,n){let t=e.length-2,i=3,r,a;return e[i][1].type==="whitespace"&&(i+=2),t-2>i&&e[t][1].type==="whitespace"&&(t-=2),e[t][1].type==="atxHeadingSequence"&&(i===t-1||t-4>i&&e[t-2][1].type==="whitespace")&&(t-=i+1===t?2:4),t>i&&(r={type:"atxHeadingText",start:e[i][1].start,end:e[t][1].end},a={type:"chunkText",start:e[i][1].start,end:e[t][1].end,contentType:"text"},ze(e,i,t-i+1,[["enter",r,n],["enter",a,n],["exit",a,n],["exit",r,n]])),e}function Ey(e,n,t){let i=0;return r;function r(u){return e.enter("atxHeading"),a(u)}function a(u){return e.enter("atxHeadingSequence"),o(u)}function o(u){return u===35&&i++<6?(e.consume(u),o):u===null||ne(u)?(e.exit("atxHeadingSequence"),s(u)):t(u)}function s(u){return u===35?(e.enter("atxHeadingSequence"),l(u)):u===null||F(u)?(e.exit("atxHeading"),n(u)):H(u)?P(e,s,"whitespace")(u):(e.enter("atxHeadingText"),c(u))}function l(u){return u===35?(e.consume(u),l):(e.exit("atxHeadingSequence"),s(u))}function c(u){return u===null||u===35||ne(u)?(e.exit("atxHeadingText"),s(u)):(e.consume(u),c)}}var Nd=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],Ol=["pre","script","style","textarea"];var Ml={name:"htmlFlow",tokenize:My,resolveTo:Oy,concrete:!0},Ty={tokenize:Fy,partial:!0},Cy={tokenize:Iy,partial:!0};function Oy(e){let n=e.length;for(;n--&&!(e[n][0]==="enter"&&e[n][1].type==="htmlFlow"););return n>1&&e[n-2][1].type==="linePrefix"&&(e[n][1].start=e[n-2][1].start,e[n+1][1].start=e[n-2][1].start,e.splice(n-2,2)),e}function My(e,n,t){let i=this,r,a,o,s,l;return c;function c(w){return u(w)}function u(w){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(w),d}function d(w){return w===33?(e.consume(w),m):w===47?(e.consume(w),a=!0,b):w===63?(e.consume(w),r=3,i.interrupt?n:v):at(w)?(e.consume(w),o=String.fromCharCode(w),h):t(w)}function m(w){return w===45?(e.consume(w),r=2,p):w===91?(e.consume(w),r=5,s=0,f):at(w)?(e.consume(w),r=4,i.interrupt?n:v):t(w)}function p(w){return w===45?(e.consume(w),i.interrupt?n:v):t(w)}function f(w){let Ae="CDATA[";return w===Ae.charCodeAt(s++)?(e.consume(w),s===Ae.length?i.interrupt?n:$:f):t(w)}function b(w){return at(w)?(e.consume(w),o=String.fromCharCode(w),h):t(w)}function h(w){if(w===null||w===47||w===62||ne(w)){let Ae=w===47,qe=o.toLowerCase();return!Ae&&!a&&Ol.includes(qe)?(r=1,i.interrupt?n(w):$(w)):Nd.includes(o.toLowerCase())?(r=6,Ae?(e.consume(w),k):i.interrupt?n(w):$(w)):(r=7,i.interrupt&&!i.parser.lazy[i.now().line]?t(w):a?A(w):S(w))}return w===45||Qe(w)?(e.consume(w),o+=String.fromCharCode(w),h):t(w)}function k(w){return w===62?(e.consume(w),i.interrupt?n:$):t(w)}function A(w){return H(w)?(e.consume(w),A):z(w)}function S(w){return w===47?(e.consume(w),z):w===58||w===95||at(w)?(e.consume(w),T):H(w)?(e.consume(w),S):z(w)}function T(w){return w===45||w===46||w===58||w===95||Qe(w)?(e.consume(w),T):M(w)}function M(w){return w===61?(e.consume(w),E):H(w)?(e.consume(w),M):S(w)}function E(w){return w===null||w===60||w===61||w===62||w===96?t(w):w===34||w===39?(e.consume(w),l=w,O):H(w)?(e.consume(w),E):N(w)}function O(w){return w===l?(e.consume(w),l=null,B):w===null||F(w)?t(w):(e.consume(w),O)}function N(w){return w===null||w===34||w===39||w===47||w===60||w===61||w===62||w===96||ne(w)?M(w):(e.consume(w),N)}function B(w){return w===47||w===62||H(w)?S(w):t(w)}function z(w){return w===62?(e.consume(w),V):t(w)}function V(w){return w===null||F(w)?$(w):H(w)?(e.consume(w),V):t(w)}function $(w){return w===45&&r===2?(e.consume(w),Q):w===60&&r===1?(e.consume(w),ee):w===62&&r===4?(e.consume(w),He):w===63&&r===3?(e.consume(w),v):w===93&&r===5?(e.consume(w),Ie):F(w)&&(r===6||r===7)?(e.exit("htmlFlowData"),e.check(Ty,$e,D)(w)):w===null||F(w)?(e.exit("htmlFlowData"),D(w)):(e.consume(w),$)}function D(w){return e.check(Cy,U,$e)(w)}function U(w){return e.enter("lineEnding"),e.consume(w),e.exit("lineEnding"),W}function W(w){return w===null||F(w)?D(w):(e.enter("htmlFlowData"),$(w))}function Q(w){return w===45?(e.consume(w),v):$(w)}function ee(w){return w===47?(e.consume(w),o="",Pe):$(w)}function Pe(w){if(w===62){let Ae=o.toLowerCase();return Ol.includes(Ae)?(e.consume(w),He):$(w)}return at(w)&&o.length<8?(e.consume(w),o+=String.fromCharCode(w),Pe):$(w)}function Ie(w){return w===93?(e.consume(w),v):$(w)}function v(w){return w===62?(e.consume(w),He):w===45&&r===2?(e.consume(w),v):$(w)}function He(w){return w===null||F(w)?(e.exit("htmlFlowData"),$e(w)):(e.consume(w),He)}function $e(w){return e.exit("htmlFlow"),n(w)}}function Iy(e,n,t){let i=this;return r;function r(o){return F(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),a):t(o)}function a(o){return i.parser.lazy[i.now().line]?t(o):n(o)}}function Fy(e,n,t){return i;function i(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),e.attempt(Ft,n,t)}}var Il={name:"htmlText",tokenize:Ry};function Ry(e,n,t){let i=this,r,a,o;return s;function s(v){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(v),l}function l(v){return v===33?(e.consume(v),c):v===47?(e.consume(v),M):v===63?(e.consume(v),S):at(v)?(e.consume(v),N):t(v)}function c(v){return v===45?(e.consume(v),u):v===91?(e.consume(v),a=0,f):at(v)?(e.consume(v),A):t(v)}function u(v){return v===45?(e.consume(v),p):t(v)}function d(v){return v===null?t(v):v===45?(e.consume(v),m):F(v)?(o=d,ee(v)):(e.consume(v),d)}function m(v){return v===45?(e.consume(v),p):d(v)}function p(v){return v===62?Q(v):v===45?m(v):d(v)}function f(v){let He="CDATA[";return v===He.charCodeAt(a++)?(e.consume(v),a===He.length?b:f):t(v)}function b(v){return v===null?t(v):v===93?(e.consume(v),h):F(v)?(o=b,ee(v)):(e.consume(v),b)}function h(v){return v===93?(e.consume(v),k):b(v)}function k(v){return v===62?Q(v):v===93?(e.consume(v),k):b(v)}function A(v){return v===null||v===62?Q(v):F(v)?(o=A,ee(v)):(e.consume(v),A)}function S(v){return v===null?t(v):v===63?(e.consume(v),T):F(v)?(o=S,ee(v)):(e.consume(v),S)}function T(v){return v===62?Q(v):S(v)}function M(v){return at(v)?(e.consume(v),E):t(v)}function E(v){return v===45||Qe(v)?(e.consume(v),E):O(v)}function O(v){return F(v)?(o=O,ee(v)):H(v)?(e.consume(v),O):Q(v)}function N(v){return v===45||Qe(v)?(e.consume(v),N):v===47||v===62||ne(v)?B(v):t(v)}function B(v){return v===47?(e.consume(v),Q):v===58||v===95||at(v)?(e.consume(v),z):F(v)?(o=B,ee(v)):H(v)?(e.consume(v),B):Q(v)}function z(v){return v===45||v===46||v===58||v===95||Qe(v)?(e.consume(v),z):V(v)}function V(v){return v===61?(e.consume(v),$):F(v)?(o=V,ee(v)):H(v)?(e.consume(v),V):B(v)}function $(v){return v===null||v===60||v===61||v===62||v===96?t(v):v===34||v===39?(e.consume(v),r=v,D):F(v)?(o=$,ee(v)):H(v)?(e.consume(v),$):(e.consume(v),U)}function D(v){return v===r?(e.consume(v),r=void 0,W):v===null?t(v):F(v)?(o=D,ee(v)):(e.consume(v),D)}function U(v){return v===null||v===34||v===39||v===60||v===61||v===96?t(v):v===47||v===62||ne(v)?B(v):(e.consume(v),U)}function W(v){return v===47||v===62||ne(v)?B(v):t(v)}function Q(v){return v===62?(e.consume(v),e.exit("htmlTextData"),e.exit("htmlText"),n):t(v)}function ee(v){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(v),e.exit("lineEnding"),Pe}function Pe(v){return H(v)?P(e,Ie,"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(v):Ie(v)}function Ie(v){return e.enter("htmlTextData"),o(v)}}var Bn={name:"labelEnd",tokenize:Yy,resolveTo:Ny,resolveAll:zy},By={tokenize:_y},Dy={tokenize:Py},Ky={tokenize:Hy};function zy(e){let n=-1;for(;++n=3&&(c===null||F(c))?(e.exit("thematicBreak"),n(c)):t(c)}function l(c){return c===r?(e.consume(c),i++,l):(e.exit("thematicBreakSequence"),H(c)?P(e,s,"whitespace")(c):s(c))}}var je={name:"list",tokenize:Gy,continuation:{tokenize:Zy},exit:Jy},jy={tokenize:Xy,partial:!0},$y={tokenize:Qy,partial:!0};function Gy(e,n,t){let i=this,r=i.events[i.events.length-1],a=r&&r[1].type==="linePrefix"?r[2].sliceSerialize(r[1],!0).length:0,o=0;return s;function s(p){let f=i.containerState.type||(p===42||p===43||p===45?"listUnordered":"listOrdered");if(f==="listUnordered"?!i.containerState.marker||p===i.containerState.marker:br(p)){if(i.containerState.type||(i.containerState.type=f,e.enter(f,{_container:!0})),f==="listUnordered")return e.enter("listItemPrefix"),p===42||p===45?e.check(Dn,t,c)(p):c(p);if(!i.interrupt||p===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),l(p)}return t(p)}function l(p){return br(p)&&++o<10?(e.consume(p),l):(!i.interrupt||o<2)&&(i.containerState.marker?p===i.containerState.marker:p===41||p===46)?(e.exit("listItemValue"),c(p)):t(p)}function c(p){return e.enter("listItemMarker"),e.consume(p),e.exit("listItemMarker"),i.containerState.marker=i.containerState.marker||p,e.check(Ft,i.interrupt?t:u,e.attempt(jy,m,d))}function u(p){return i.containerState.initialBlankLine=!0,a++,m(p)}function d(p){return H(p)?(e.enter("listItemPrefixWhitespace"),e.consume(p),e.exit("listItemPrefixWhitespace"),m):t(p)}function m(p){return i.containerState.size=a+i.sliceSerialize(e.exit("listItemPrefix"),!0).length,n(p)}}function Zy(e,n,t){let i=this;return i.containerState._closeFlow=void 0,e.check(Ft,r,a);function r(s){return i.containerState.furtherBlankLines=i.containerState.furtherBlankLines||i.containerState.initialBlankLine,P(e,n,"listItemIndent",i.containerState.size+1)(s)}function a(s){return i.containerState.furtherBlankLines||!H(s)?(i.containerState.furtherBlankLines=void 0,i.containerState.initialBlankLine=void 0,o(s)):(i.containerState.furtherBlankLines=void 0,i.containerState.initialBlankLine=void 0,e.attempt($y,n,o)(s))}function o(s){return i.containerState._closeFlow=!0,i.interrupt=void 0,P(e,e.attempt(je,n,t),"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(s)}}function Qy(e,n,t){let i=this;return P(e,r,"listItemIndent",i.containerState.size+1);function r(a){let o=i.events[i.events.length-1];return o&&o[1].type==="listItemIndent"&&o[2].sliceSerialize(o[1],!0).length===i.containerState.size?n(a):t(a)}}function Jy(e){e.exit(this.containerState.type)}function Xy(e,n,t){let i=this;return P(e,r,"listItemPrefixWhitespace",i.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function r(a){let o=i.events[i.events.length-1];return!H(a)&&o&&o[1].type==="listItemPrefixWhitespace"?n(a):t(a)}}var Mo={name:"setextUnderline",tokenize:tb,resolveTo:eb};function eb(e,n){let t=e.length,i,r,a;for(;t--;)if(e[t][0]==="enter"){if(e[t][1].type==="content"){i=t;break}e[t][1].type==="paragraph"&&(r=t)}else e[t][1].type==="content"&&e.splice(t,1),!a&&e[t][1].type==="definition"&&(a=t);let o={type:"setextHeading",start:Object.assign({},e[r][1].start),end:Object.assign({},e[e.length-1][1].end)};return e[r][1].type="setextHeadingText",a?(e.splice(r,0,["enter",o,n]),e.splice(a+1,0,["exit",e[i][1],n]),e[i][1].end=Object.assign({},e[a][1].end)):e[i][1]=o,e.push(["exit",o,n]),e}function tb(e,n,t){let i=this,r;return a;function a(c){let u=i.events.length,d;for(;u--;)if(i.events[u][1].type!=="lineEnding"&&i.events[u][1].type!=="linePrefix"&&i.events[u][1].type!=="content"){d=i.events[u][1].type==="paragraph";break}return!i.parser.lazy[i.now().line]&&(i.interrupt||d)?(e.enter("setextHeadingLine"),r=c,o(c)):t(c)}function o(c){return e.enter("setextHeadingLineSequence"),s(c)}function s(c){return c===r?(e.consume(c),s):(e.exit("setextHeadingLineSequence"),H(c)?P(e,l,"lineSuffix")(c):l(c))}function l(c){return c===null||F(c)?(e.exit("setextHeadingLine"),n(c)):t(c)}}var nb={tokenize:cb,partial:!0};function Bl(){return{document:{91:{tokenize:ob,continuation:{tokenize:sb},exit:lb}},text:{91:{tokenize:ab},93:{add:"after",tokenize:ib,resolveTo:rb}}}}function ib(e,n,t){let i=this,r=i.events.length,a=i.parser.gfmFootnotes||(i.parser.gfmFootnotes=[]),o;for(;r--;){let l=i.events[r][1];if(l.type==="labelImage"){o=l;break}if(l.type==="gfmFootnoteCall"||l.type==="labelLink"||l.type==="label"||l.type==="image"||l.type==="link")break}return s;function s(l){if(!o||!o._balanced)return t(l);let c=Ve(i.sliceSerialize({start:o.end,end:i.now()}));return c.codePointAt(0)!==94||!a.includes(c.slice(1))?t(l):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(l),e.exit("gfmFootnoteCallLabelMarker"),n(l))}}function rb(e,n){let t=e.length,i;for(;t--;)if(e[t][1].type==="labelImage"&&e[t][0]==="enter"){i=e[t][1];break}e[t+1][1].type="data",e[t+3][1].type="gfmFootnoteCallLabelMarker";let r={type:"gfmFootnoteCall",start:Object.assign({},e[t+3][1].start),end:Object.assign({},e[e.length-1][1].end)},a={type:"gfmFootnoteCallMarker",start:Object.assign({},e[t+3][1].end),end:Object.assign({},e[t+3][1].end)};a.end.column++,a.end.offset++,a.end._bufferIndex++;let o={type:"gfmFootnoteCallString",start:Object.assign({},a.end),end:Object.assign({},e[e.length-1][1].start)},s={type:"chunkString",contentType:"string",start:Object.assign({},o.start),end:Object.assign({},o.end)},l=[e[t+1],e[t+2],["enter",r,n],e[t+3],e[t+4],["enter",a,n],["exit",a,n],["enter",o,n],["enter",s,n],["exit",s,n],["exit",o,n],e[e.length-2],e[e.length-1],["exit",r,n]];return e.splice(t,e.length-t+1,...l),e}function ab(e,n,t){let i=this,r=i.parser.gfmFootnotes||(i.parser.gfmFootnotes=[]),a=0,o;return s;function s(d){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(d),e.exit("gfmFootnoteCallLabelMarker"),l}function l(d){return d!==94?t(d):(e.enter("gfmFootnoteCallMarker"),e.consume(d),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",c)}function c(d){if(a>999||d===93&&!o||d===null||d===91||ne(d))return t(d);if(d===93){e.exit("chunkString");let m=e.exit("gfmFootnoteCallString");return r.includes(Ve(i.sliceSerialize(m)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(d),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),n):t(d)}return ne(d)||(o=!0),a++,e.consume(d),d===92?u:c}function u(d){return d===91||d===92||d===93?(e.consume(d),a++,c):c(d)}}function ob(e,n,t){let i=this,r=i.parser.gfmFootnotes||(i.parser.gfmFootnotes=[]),a,o=0,s;return l;function l(f){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(f),e.exit("gfmFootnoteDefinitionLabelMarker"),c}function c(f){return f===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(f),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",u):t(f)}function u(f){if(o>999||f===93&&!s||f===null||f===91||ne(f))return t(f);if(f===93){e.exit("chunkString");let b=e.exit("gfmFootnoteDefinitionLabelString");return a=Ve(i.sliceSerialize(b)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(f),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),m}return ne(f)||(s=!0),o++,e.consume(f),f===92?d:u}function d(f){return f===91||f===92||f===93?(e.consume(f),o++,u):u(f)}function m(f){return f===58?(e.enter("definitionMarker"),e.consume(f),e.exit("definitionMarker"),r.includes(a)||r.push(a),P(e,p,"gfmFootnoteDefinitionWhitespace")):t(f)}function p(f){return n(f)}}function sb(e,n,t){return e.check(Ft,n,e.attempt(nb,n,t))}function lb(e){e.exit("gfmFootnoteDefinition")}function cb(e,n,t){let i=this;return P(e,r,"gfmFootnoteDefinitionIndent",5);function r(a){let o=i.events[i.events.length-1];return o&&o[1].type==="gfmFootnoteDefinitionIndent"&&o[2].sliceSerialize(o[1],!0).length===4?n(a):t(a)}}var ub={tokenize:db};function Dl(){return{text:{91:ub}}}function db(e,n,t){let i=this;return r;function r(l){return i.previous!==null||!i._gfmTasklistFirstContentOfListItem?t(l):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(l),e.exit("taskListCheckMarker"),a)}function a(l){return ne(l)?(e.enter("taskListCheckValueUnchecked"),e.consume(l),e.exit("taskListCheckValueUnchecked"),o):l===88||l===120?(e.enter("taskListCheckValueChecked"),e.consume(l),e.exit("taskListCheckValueChecked"),o):t(l)}function o(l){return l===93?(e.enter("taskListCheckMarker"),e.consume(l),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),s):t(l)}function s(l){return F(l)?n(l):H(l)?e.check({tokenize:pb},n,t)(l):t(l)}}function pb(e,n,t){return P(e,i,"whitespace");function i(r){return r===null?t(r):n(r)}}var _d=Cn(Yd(),1),Ar=Object.assign(Kn(Error),{eval:Kn(EvalError),range:Kn(RangeError),reference:Kn(ReferenceError),syntax:Kn(SyntaxError),type:Kn(TypeError),uri:Kn(URIError)});function Kn(e){return n.displayName=e.displayName||e.name,n;function n(t,...i){let r=t&&(0,_d.default)(t,...i);return new e(r)}}var Io={}.hasOwnProperty,Pd={yaml:"-",toml:"+"};function xr(e){let n=[],t=-1,i=Array.isArray(e)?e:e?[e]:["yaml"];for(;++t13&&t<32||t>126&&t<160||t>55295&&t<57344||t>64975&&t<65008||(t&65535)===65535||(t&65535)===65534||t>1114111?"\uFFFD":String.fromCodePoint(t)}var Gd={tokenize:Eb};function Eb(e){let n=e.attempt(this.parser.constructs.contentInitial,i,r),t;return n;function i(s){if(s===null){e.consume(s);return}return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),P(e,n,"linePrefix")}function r(s){return e.enter("paragraph"),a(s)}function a(s){let l=e.enter("chunkText",{contentType:"text",previous:t});return t&&(t.next=l),t=l,o(s)}function o(s){if(s===null){e.exit("chunkText"),e.exit("paragraph"),e.consume(s);return}return F(s)?(e.consume(s),e.exit("chunkText"),a):(e.consume(s),o)}}var Qd={tokenize:Tb},Zd={tokenize:Cb};function Tb(e){let n=this,t=[],i=0,r,a,o;return s;function s(S){if(io))return;let O=n.events.length,N=O,B,z;for(;N--;)if(n.events[N][0]==="exit"&&n.events[N][1].type==="chunkFlow"){if(B){z=n.events[N][1].end;break}B=!0}for(k(i),E=O;ES;){let M=t[T];n.containerState=M[1],M[0].exit.call(n,e)}t.length=S}function A(){r.write([null]),a=void 0,r=void 0,n.containerState._closeFlow=void 0}}function Cb(e,n,t){return P(e,e.attempt(this.parser.constructs.document,n,t),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}var Jd={tokenize:Ob};function Ob(e){let n=this,t=e.attempt(Ft,i,e.attempt(this.parser.constructs.flowInitial,r,P(e,e.attempt(this.parser.constructs.flow,r,e.attempt(Sl,r)),"linePrefix")));return t;function i(a){if(a===null){e.consume(a);return}return e.enter("lineEndingBlank"),e.consume(a),e.exit("lineEndingBlank"),n.currentConstruct=void 0,t}function r(a){if(a===null){e.consume(a);return}return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),n.currentConstruct=void 0,t}}var Xd={resolveAll:ip()},ep=np("string"),tp=np("text");function np(e){return{tokenize:n,resolveAll:ip(e==="text"?Mb:void 0)};function n(t){let i=this,r=this.parser.constructs[e],a=t.attempt(r,o,s);return o;function o(u){return c(u)?a(u):s(u)}function s(u){if(u===null){t.consume(u);return}return t.enter("data"),t.consume(u),l}function l(u){return c(u)?(t.exit("data"),a(u)):(t.consume(u),l)}function c(u){if(u===null)return!0;let d=r[u],m=-1;if(d)for(;++m-1){let s=o[0];typeof s=="string"?o[0]=s.slice(i):o.shift()}a>0&&o.push(e[r].slice(0,a))}return o}function Fb(e,n){let t=-1,i=[],r;for(;++t_b,contentInitial:()=>Bb,disable:()=>Pb,document:()=>Rb,flow:()=>Kb,flowInitial:()=>Db,insideSpan:()=>Yb,string:()=>zb,text:()=>Nb});var Rb={42:je,43:je,45:je,48:je,49:je,50:je,51:je,52:je,53:je,54:je,55:je,56:je,57:je,62:Ao},Bb={91:El},Db={[-2]:kr,[-1]:kr,32:kr},Kb={35:Cl,42:Dn,45:[Mo,Dn],60:Ml,61:Mo,95:Dn,96:So,126:So},zb={38:Lo,92:xo},Nb={[-5]:wr,[-4]:wr,[-3]:wr,33:Fl,38:Lo,42:vr,60:[xl,Il],91:Rl,92:[Tl,xo],93:Bn,95:vr,96:Ll},Yb={null:[vr,Xd]},_b={null:[42,95]},Pb={null:[]};function Ul(e){let t=Fo([ql,...(e||{}).extensions||[]]),i={defined:[],lazy:{},constructs:t,content:r(Gd),document:r(Qd),flow:r(Jd),string:r(ep),text:r(tp)};return i;function r(a){return o;function o(s){return rp(i,a,s)}}}function Wl(e){for(;!Eo(e););return e}var ap=/[\0\t\n\r]/g;function Vl(){let e=1,n="",t=!0,i;return r;function r(a,o,s){let l=[],c,u,d,m,p;for(a=n+(typeof a=="string"?a.toString():new TextDecoder(o||void 0).decode(a)),d=0,n="",t&&(a.charCodeAt(0)===65279&&d++,t=void 0);d0){let bt=j.tokenStack[j.tokenStack.length-1];(bt[1]||cp).call(j,void 0,bt[0])}for(R.position={start:cn(C.length>0?C[0][1].start:{line:1,column:1,offset:0}),end:cn(C.length>0?C[C.length-2][1].end:{line:1,column:1,offset:0})},te=-1;++te0))throw new TypeError("`maxSize` must be a number greater than 0");if(typeof t.maxAge=="number"&&t.maxAge===0)throw new TypeError("`maxAge` must be a number greater than 0");Fe(this,un,t.maxSize),Fe(this,Sr,t.maxAge||Number.POSITIVE_INFINITY),Fe(this,dn,t.onEviction)}get __oldCache(){return Y(this,fe)}get(t){if(Y(this,ce).has(t)){let i=Y(this,ce).get(t);return me(this,Tr,Jl).call(this,t,i)}if(Y(this,fe).has(t)){let i=Y(this,fe).get(t);if(me(this,ot,kt).call(this,t,i)===!1)return me(this,Do,fp).call(this,t,i),i.value}}set(t,i,{maxAge:r=Y(this,Sr)}={}){let a=typeof r=="number"&&r!==Number.POSITIVE_INFINITY?Date.now()+r:void 0;return Y(this,ce).has(t)?Y(this,ce).set(t,{value:i,expiry:a}):me(this,Or,ec).call(this,t,{value:i,expiry:a}),this}has(t){return Y(this,ce).has(t)?!me(this,ot,kt).call(this,t,Y(this,ce).get(t)):Y(this,fe).has(t)?!me(this,ot,kt).call(this,t,Y(this,fe).get(t)):!1}peek(t){if(Y(this,ce).has(t))return me(this,Cr,Xl).call(this,t,Y(this,ce));if(Y(this,fe).has(t))return me(this,Cr,Xl).call(this,t,Y(this,fe))}delete(t){let i=Y(this,ce).delete(t);return i&&Zs(this,mt)._--,Y(this,fe).delete(t)||i}clear(){Y(this,ce).clear(),Y(this,fe).clear(),Fe(this,mt,0)}resize(t){if(!(t&&t>0))throw new TypeError("`maxSize` must be a number greater than 0");let i=[...me(this,Mr,tc).call(this)],r=i.length-t;r<0?(Fe(this,ce,new Map(i)),Fe(this,fe,new Map),Fe(this,mt,i.length)):(r>0&&me(this,Er,Ql).call(this,i.slice(0,r)),Fe(this,fe,new Map(i.slice(r))),Fe(this,ce,new Map),Fe(this,mt,0)),Fe(this,un,t)}*keys(){for(let[t]of this)yield t}*values(){for(let[,t]of this)yield t}*[Symbol.iterator](){for(let t of Y(this,ce)){let[i,r]=t;me(this,ot,kt).call(this,i,r)===!1&&(yield[i,r.value])}for(let t of Y(this,fe)){let[i,r]=t;Y(this,ce).has(i)||me(this,ot,kt).call(this,i,r)===!1&&(yield[i,r.value])}}*entriesDescending(){let t=[...Y(this,ce)];for(let i=t.length-1;i>=0;--i){let r=t[i],[a,o]=r;me(this,ot,kt).call(this,a,o)===!1&&(yield[a,o.value])}t=[...Y(this,fe)];for(let i=t.length-1;i>=0;--i){let r=t[i],[a,o]=r;Y(this,ce).has(a)||me(this,ot,kt).call(this,a,o)===!1&&(yield[a,o.value])}}*entriesAscending(){for(let[t,i]of me(this,Mr,tc).call(this))yield[t,i.value]}get size(){if(!Y(this,mt))return Y(this,fe).size;let t=0;for(let i of Y(this,fe).keys())Y(this,ce).has(i)||t++;return Math.min(Y(this,mt)+t,Y(this,un))}get maxSize(){return Y(this,un)}entries(){return this.entriesAscending()}forEach(t,i=this){for(let[r,a]of this.entriesAscending())t.call(i,a,r,this)}get[Symbol.toStringTag](){return JSON.stringify([...this.entriesAscending()])}};mt=new WeakMap,ce=new WeakMap,fe=new WeakMap,un=new WeakMap,Sr=new WeakMap,dn=new WeakMap,Er=new WeakSet,Ql=function(t){if(typeof Y(this,dn)=="function")for(let[i,r]of t)Y(this,dn).call(this,i,r.value)},ot=new WeakSet,kt=function(t,i){return typeof i.expiry=="number"&&i.expiry<=Date.now()?(typeof Y(this,dn)=="function"&&Y(this,dn).call(this,t,i.value),this.delete(t)):!1},Bo=new WeakSet,mp=function(t,i){if(me(this,ot,kt).call(this,t,i)===!1)return i.value},Tr=new WeakSet,Jl=function(t,i){return i.expiry?me(this,Bo,mp).call(this,t,i):i.value},Cr=new WeakSet,Xl=function(t,i){let r=i.get(t);return me(this,Tr,Jl).call(this,t,r)},Or=new WeakSet,ec=function(t,i){Y(this,ce).set(t,i),Zs(this,mt)._++,Y(this,mt)>=Y(this,un)&&(Fe(this,mt,0),me(this,Er,Ql).call(this,Y(this,fe)),Fe(this,fe,Y(this,ce)),Fe(this,ce,new Map))},Do=new WeakSet,fp=function(t,i){Y(this,fe).delete(t),me(this,Or,ec).call(this,t,i)},Mr=new WeakSet,tc=function*(){for(let t of Y(this,fe)){let[i,r]=t;Y(this,ce).has(i)||me(this,ot,kt).call(this,i,r)===!1&&(yield t)}for(let t of Y(this,ce)){let[i,r]=t;me(this,ot,kt).call(this,i,r)===!1&&(yield t)}};var nc=new Lr({maxSize:200});function yp(e){let n=Td(e);if(nc.has(n))return nc.get(n);let t=$l(e,{extensions:[Fo([Bl(),Dl(),Nl(["yaml"])]),_l()],mdastExtensions:[[Gl(),Zl,Yl(["yaml"])],Pl()]});return nc.set(n,t),t}function ge(e,n){let t=yp(n),i=[];return vo(t,e,r=>{i.push(r.position)}),i.sort((r,a)=>a.start.offset-r.start.offset),i}function iv(e){let n=yp(e),t=[];return vo(n,"listItem",i=>{if(i.children)for(let r of i.children)r.type==="paragraph"&&t.push(r.position)}),t.sort((i,r)=>r.start.offset-i.start.offset),t}function bp(e){let n=ge("footnoteDefinition",e),t=[],i=new Map,r=new Map,a=function(o,s,l){let c=s.match(/\[\^.*?\]/)[0];if(i.has(c)){let p=i.get(c);p.footnotesReferencingKey.push(s),i.set(c,p);return}let u,d=[];do u=o.lastIndexOf(c,l),u!==-1&&(d.push(u),l=u-1);while(u>0);let m={key:c,referencePositions:d,footnotesReferencingKey:[s]};i.set(c,m)};for(let o of n){let s=e.substring(o.start.offset,o.end.offset);t.push(s),o.end.offset=0?l:0;let c=0;for(let u of s.footnotesReferencingKey){if(c+l>=s.referencePositions.length)throw new Error(x("logs.missing-footnote-error-message").replace("{FOOTNOTE}",u));r.set(u,s.referencePositions[l+c++])}}t=t.sort((o,s)=>r.get(o)-r.get(s)),t.length>0&&(e=e.trimEnd()+` +`);for(let o of t)e+=` +`+o;return e}function vp(e){let n=ge("footnoteDefinition",e),t=[],i=new Map,r=new Map,a=[],o=new Set,s=[],l=function(d,m,p){let f=m.match(/\[\^.*?\]/)[0];i.set(m,f);let b=o.has(f);if(b&&t.includes(m)){s.unshift(m);return}else if(b)throw new Error(x("logs.too-many-footnotes-error-message").replace("{FOOTNOTE_KEY}",f));let h;do h=d.lastIndexOf(f,p),h!==-1&&((h+m.length>d.length||d.substring(h,h+m.length)!==m)&&a.push({key:f,position:h}),p=h-1);while(h>0);o.add(f)};for(let d of n){let m=e.substring(d.start.offset,d.end.offset);t.unshift(m),l(e,m,d.start.offset)}let c=1,u=new Set;for(let d of t){if(u.has(d))continue;u.add(d);let m=i.get(d),p=`[^${c++}]`;r.set(m,p)}a.sort((d,m)=>m.position-d.position);for(let d of a){let m=r.get(d.key);e=Od(e,d.key,m,d.position)}for(let d of u){let m=i.get(d),p=r.get(m);e=e.replace(d,d.replace(m,p))}for(let d of s){let m=e.replace(` +${d} +`,` +`);e===m&&(m=e.replace(d,"")),e=m}return e}function Ko(e,n,t){let i=ge(t,e);if(i.length===0)return e;let r="";if(n==="underscore")r="_";else if(n==="asterisk")r="*";else{let a=i[i.length-1];r=e.substring(a.start.offset,a.start.offset+1)}t==="strong"&&(r+=r);for(let a of i){let o=r+e.substring(a.start.offset+r.length,a.end.offset-r.length)+r;e=le(e,a.start.offset,a.end.offset,o)}return e}function kp(e,n){let t=ge("paragraph",e);if(t.length===0)return e;for(let i of t){let r=e.substring(i.start.offset,i.end.offset).split(` +`),a=r.length-1;if(!(a<1)){for(let o=0;o")&&n=="
    "||e.endsWith("
    ")&&n=="
    "||e.endsWith(" ")&&n==" "||!e.endsWith("\\\\")&&e.endsWith("\\")&&n=="\\")}function av(e,n){e=e.trimEnd();let t=0;return e.endsWith("
    ")&&(t=4),e.endsWith("
    ")&&(t=5),!e.endsWith("\\\\")&&e.endsWith("\\")&&(t=1),t&&(e=e.substring(0,e.length-t)),e.trimEnd()+n}function wp(e){let n=e.endsWith(` +`),t=ge("paragraph",e);if(t.length===0)return e;for(let i of t){let r=i.start.offset;for(r>0&&r--;r>=0&&e.charAt(r)!=` +`;)r--;r++;let a=e.substring(r,i.end.offset).split(` +`),o=a[0].trimStart();if(o.startsWith(">")||o.match(zo)||o.match(No))continue;let s=a.length,l=[],c=!1;for(let f=0;f")||b.endsWith("
    ")||b.endsWith(" ")||!b.endsWith("\\\\")&&b.endsWith("\\")}for(;r>0&&e.charAt(r-1)==` +`;)r--;let u=e.length,d=i.end.offset;for(d0&&e.charAt(r-1).trim()==="";)r--;(r===0||e.charAt(r-1).trim()!="")&&r++;let a=e.substring(r,i.end.offset);Yp.test(a)&&(r+=4,a=a.substring(4)),a=n(a),e=le(e,r,i.end.offset,a)}return e}function Sp(e){let n=ge("code",e);for(let t of n){let i=e.substring(t.start.offset,t.end.offset);!i.startsWith("```")&&!i.startsWith("~~~")||(e=on(e,t.start.offset,t.end.offset))}return e}function Ep(e,n){let t=ge("math",e);for(let i of t)e=on(e,i.start.offset,i.end.offset);t=ge("inlineMath",e);for(let i of t)e.substring(i.start.offset,i.end.offset).startsWith("$".repeat(n))&&(e=on(e,i.start.offset,i.end.offset));return e}function Tp(e){let n=ge("blockquote",e);for(let t of n){let i=t.end.offset;for(;i0&&e.charAt(o-1)!==` +`;)o--;let s=e.substring(o,a.end.offset),l=function(m){let p=m.lastIndexOf("> ");return p!==-1&&(m=m.substring(p+2)),m=m.replaceAll(" "," "),Math.floor((m.split(" ").length-1)/2)+1},c=new Map,u=function(m,p){let f=p;for(;f>m;)c.delete(f--)},d=-1;s=s.replace(/^(( |\t|> )*)((\d+(\.|\)))|[-*+])([^\n]*)$/gm,(m,p="",f,b,h,k,A)=>{let S=n==="preserve"||i?Number(h):1,T=l(p);if(!/^\d/.test(b)){let M=T>d?T:d;return u(T,M),m}return c.has(T)?n==="ascending"?(S=c.get(T)+1,c.set(T,S)):i&&(S=c.get(T)):c.set(T,S),d>T&&u(T,d),d=T,`${p}${S}${t}${A}`}),e=le(e,o,a.end.offset,s)}return e}function Mp(e,n){let t=ge("listItem",e);if(!t)return e;let i=/^((\d+[.)])|(- \[[ x]\]))/m,r=n;if(n=="consistent"){let a=t.length-1;for(;a>=0;){let o=e.substring(t[a].start.offset,t[a].end.offset);if(a--,!o.match(i)){r=o.charAt(0);break}}if(a==-1)return e}for(let a of t){let o=e.substring(a.start.offset,a.end.offset);o.match(i)||(o=r+o.substring(1),e=le(e,a.start.offset,a.end.offset,o))}return e}function ac(e,n){let t=ge("blockquote",e);for(let i of t){let r=i.end.offset;for(;r2;){let c=e.indexOf(i,l)+i.length;a.unshift({startIndex:s,endIndex:t+c}),s=t+c+1,l=c+1,o-=2}return a.unshift({startIndex:t+e.indexOf(i,l),endIndex:t+e.length}),a}function gp(e,n,t,i,r){let a=e.substring(hr(e,n),n)??"",[o]=Oi(a,a.length),s=e.substring(hr(e,t),t)??"",l=e.substring(n,t),c=Bp.test(a.trim()),u=!1;for(l=l.replace(i,(d,m,p="")=>{let f="";return!c&&a.trim()!=""?(f+=` +`,u=!0):c&&!ic.test(a)&&(f+=` +`+o,u=!0),f+=m+` +`,p===""&&c&&(f+=o),f}),l=l.replace(r,(d,m="",p,f)=>{let b=m==="";return b&&c&&ic.test(s.trim())?d:b&&c?` +`+o+p+f:` +`+p+f});u&&n>0;){let d=e[n-1];if(d!==" "&&d!==" ")break;n--}return le(e,n,t,l)}function Ii(e){let n=[...e.matchAll(Dp)],t=[];for(let i of n){let r=hr(e,i.index);if(r===0)continue;let a=hr(e,r-1),o=i[0],s=e.substring(r,i.index+o.length);if(sv(s,o))continue;let l=a,c=e.substring(a,r-1);if(!o.includes("|")&&!c.includes("|"))continue;c=c.replace(rc,f=>{let b=f.trim();return b===""||b==="|"||(l+=f.length-1),""});let u=o.replace(rc,"");if(c.endsWith("|")&&(c=c.slice(0,-1)),u.endsWith("|")&&(u=u.slice(0,-1)),hp(c)!==hp(u))continue;let d=i.index+i[0].length;if(d>=e.length-1){t.push({startIndex:l,endIndex:e.length});continue}let m=e.substring(d+1).split(` +`),p=0;for(;p]/.test(t)}function hp(e){let n=!1,t=0,i=0,r="";for(let a=0;a{n=a.index;let o=!1,s=e.length-1;for(;r&&r.length!==0&&!o;)if(r[0].index<=n)r.shift();else{o=!0;let l=r[0];s=l.index+l[0].length}t.push({startIndex:n,endIndex:s}),!r||r.length}),t.reverse()}function Rp(e,n){let t=ge("code",e);for(let i of t){let r=e.substring(i.start.offset,i.end.offset);!r.startsWith("```")||r.substring(3,r.indexOf(` +`)).trim()!==""||(e=le(e,i.start.offset+3,i.start.offset+3,n))}return e}var pn=/^([ \t]*)(#+)([ \t]+)([^\n\r]*?)([ \t]+#+)?$/gm,_p=`^XXX\\.*? +(?:((?:.| +)*?) +)?XXX(?=\\s|$)$`,Ne=/^---\n((?:(((?!---)(?:.|\n)*?)\n)?))---(?=\n|$)/,lv=_p.replaceAll("X","`"),cv=_p.replaceAll("X","~"),uv=`^(( |( {4})).* +)+`,GT=new RegExp(`${lv}|${cv}|${uv}`,"gm"),Yo=/(!?)\[{2}([^\][\n|]+)(\|([^\][\n|]+))?(\|([^\][\n|]+))?\]{2}/g,Ir=/(!?)\[([^[]*)\](\(.*\))/g,Fr=/(\s|^)(#[\p{L}\-_\d/\p{Emoji_Presentation}]+)/gu,Pp=/^%%\n[^%]*\n%%/gm,Rr=/[,\s]+/,_o=/(\. ?){2}\./g,Br="\\s*(>\\s*)*",ic=/^(>( |\t)*)+\$*?$/m,Bp=/^\s*(>\s*)+/m,Dp=/(\|? *:?-{1,}:? *\|?)(\| *:?-{1,}:? *\|?)*( |\t)*$/gm,rc=/^(((>[ ]?)*)|([ ]{0,3}))\|/m,Kp=/[^\n]*?\|[^\n]*?(\n|$)/m,Hp=/(([a-z\-0-9]+:)\/{2,3})([^\s/?#]*[^\s")'.?!/]|[/])?(([/?#][^\s")']*[^\s")'.?!])|[/])?/gi,zn=/(?:(?:(?:[a-z]+:)?\/\/)|www\.)(?:localhost|(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?:(?:[a-fA-F\d]{1,4}:){7}(?:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,2}|:)|(?:[a-fA-F\d]{1,4}:){4}(?:(?::[a-fA-F\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,3}|:)|(?:[a-fA-F\d]{1,4}:){3}(?:(?::[a-fA-F\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,4}|:)|(?:[a-fA-F\d]{1,4}:){2}(?:(?::[a-fA-F\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,5}|:)|(?:[a-fA-F\d]{1,4}:){1}(?:(?::[a-fA-F\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?|(?:(?:[a-z0-9][-_]*)*[a-z0-9]+)(?:\.(?:[a-z0-9]-*)*[a-z0-9]+)*(?:\.(?:[a-z]{2,})))(?::\d{2,5})?(?:(?:[/?#][a-z0-9-_%/&=?$.+~!*‘(,#@]*[a-z0-9-%_/$+~!*‘(,])|[/])?/gi,ZT=new RegExp("^"+zn.source+"$","si"),qp=/]+)>((?:.(?!<\/a>))*.)<\/a>/g,Up=/[\p{L}\p{N}\p{Pc}\p{M}\-'’`]+/gu,Wp=/&[^\s]+;$/mi,zp=Xp(!0),Np=Xp(!1),Vp=/[“”„«»]/g,jp=/[‘’‚‹›]/g,$p=/<%[^]*?%>/g,Nn="\\[.\\]",Yp=new RegExp(`^${Nn}`),Gp=new RegExp(`^${Br}- ${Nn} `),Po=new RegExp(`^\\s*- ${Nn} `),zo=new RegExp(`^\\s*(-|\\*|\\+|\\d+[.)]|- (${Nn}))`,"m"),No=/^(\[\^[^\]]*\]) ?([,.;!:?])/gm,wo=/^(>\s*)+\[![^\s]*\]/m,gr=/^\n?(>\s*)+((```)|(~~~))/m,oc=RegExp(/\p{L}/,"u");function Je(e){return e.replace(/\$/g,"$$$$")}function mn(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Zp(e){let n=e.match(Yo);if(n){for(let t of n)if(t.includes("|")){let i=t.indexOf("|"),r=t.substring(0,i+1)+t.substring(i+1,t.length-2).trim()+"]]";e=e.replace(t,r)}}return e}function Qp(e){let n=Ii(e);if(n.length===0)return e;for(let t of n)e=on(e,t.startIndex,t.endIndex);return e}function Ho(e){let n=e.match(/^#\s+(.*)/m);if(n&&n[1]){let t=n[1];return t=t.replaceAll(Yo,(i,r,a,o)=>o!=null?o.replace("|",""):a),t.replaceAll(Ir,"$2")}return""}function Jp(e){return[...e.matchAll(Fr)].map(n=>n[2])}function Xp(e){let n="(?:|%%)",t="";return e?t+="disable":t+="enable",new RegExp(n.replace("{ENDING_TEXT}",t),"g")}var sc="tag",Dr="tags",wt=[sc,Dr],dv="alias",lc="aliases",At=[dv,lc],cc="linter-yaml-title-alias",Ki="disabled rules";function Rt(e){return e.match(Ne)===null&&(e=`--- +--- +`+e),e}function zi(e){let n=e.match(Ne);return n?n[1]:null}function he(e,n){if(!e.match(Ne))return e;let t=e.match(Ne)[0],i=n(t);return e=e.replace(t,Je(i)),e}function uc(e,n=!0){return n?new RegExp(`^([\\t ]*)${e}:[ \\t]*(\\S.*|(?:(?:\\n *- \\S.*)|((?:\\n *- *))*|(\\n([ \\t]+[^\\n]*))*)*)\\n`,"m"):new RegExp(`^${e}:[ \\t]*(\\S.*|(?:(?:\\n *- \\S.*)|((?:\\n *- *))*|(\\n([ \\t]+[^\\n]*))*)*)\\n`,"m")}function ae(e,n,t){let i=`${n}:${t} +`,r=!1,a=e.replace(uc(n),(o,s)=>(r=!0,s+i));return r||(a=`${e}${i}`),a}function ue(e,n,t=!0){let i=e.match(uc(n,t));if(i==null)return null;let r=i[2];return t||(r=i[1]),r}function Yn(e,n,t=!0){return e.replace(uc(n,t),"")}function st(e){if(e==null)return null;let n=ul(e.replace(/\n(\t)+/g,` + `));return n??{}}function be(e,n,t,i,r=!1){if(typeof e=="string"&&(e=[e]),e==null||e.length===0)return pv(n);let a=i&&(n=="multi-line"||n=="single string to multi-line"&&e.length>1);if(r||a)for(let o=0;ot!="");if(e.includes(` +`)){let n=e.split(/[ \t]*\n[ \t]*-[ \t]*/);return n.splice(0,1),n=n.filter(t=>t!=""),n==null||n.length===0?null:n}return e}function fn(e){if(e==null)return[];let n=[],t=[];Array.isArray(e)?t=e:e.includes(",")?t=qo(e,","):t=qo(e," ");for(let i of t)n.push(i.trim());return n}function gn(e){return typeof e=="string"?qo(e,","):e}function qo(e,n=","){if(e==""||e==null)return null;if(n.length>1)throw new Error(x("logs.invalid-delimiter-error-message"));let t=[],i="",r=0;for(;r1&&(e.startsWith("'")&&e.endsWith("'")||e.startsWith('"')&&e.endsWith('"'))}function xt(e,n,t=!1,i=!1){let r=fv(e,n,t);if(i)return r;try{if(ul(r)===e)return r}catch{}let a=dl(e,{lineWidth:-1,quotingType:n,forceQuotes:t}).slice(0,-1),o=dl(e,{lineWidth:-1,quotingType:n=='"'?"'":'"',forceQuotes:t}).slice(0,-1);return o===e||o.length{t.setIcon("plus-with-circle").setTooltip(this.addInputTooltip).onClick(()=>this.onAddInput()),t.buttonEl.addClass("clickable-icon")}).addButton(t=>{t.setIcon("reset").setTooltip(this.refreshBtnTooltip).onClick(()=>this.onRefresh()),t.buttonEl.addClass("clickable-icon")}).setClass("linter-border-bottom").setDesc(this.warning??"").descEl.addClass("mod-warning"),this.inputElDiv=this.containerEl.createDiv(),this.showInputEls()}resetInputEls(){this.inputElDiv.empty(),this.showInputEls()}};var Lm=require("obsidian");var ye="top",Ce="bottom",Se="right",ve="left",Wo="auto",hn=[ye,Ce,Se,ve],Vt="start",_n="end",im="clippingParents",Vo="viewport",Yi="popper",rm="reference",dc=hn.reduce(function(e,n){return e.concat([n+"-"+Vt,n+"-"+_n])},[]),jo=[].concat(hn,[Wo]).reduce(function(e,n){return e.concat([n,n+"-"+Vt,n+"-"+_n])},[]),gv="beforeRead",hv="read",yv="afterRead",bv="beforeMain",vv="main",kv="afterMain",wv="beforeWrite",Av="write",xv="afterWrite",am=[gv,hv,yv,bv,vv,kv,wv,Av,xv];function Be(e){return e?(e.nodeName||"").toLowerCase():null}function de(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var n=e.ownerDocument;return n&&n.defaultView||window}return e}function ft(e){var n=de(e).Element;return e instanceof n||e instanceof Element}function Oe(e){var n=de(e).HTMLElement;return e instanceof n||e instanceof HTMLElement}function _i(e){if(typeof ShadowRoot>"u")return!1;var n=de(e).ShadowRoot;return e instanceof n||e instanceof ShadowRoot}function Lv(e){var n=e.state;Object.keys(n.elements).forEach(function(t){var i=n.styles[t]||{},r=n.attributes[t]||{},a=n.elements[t];!Oe(a)||!Be(a)||(Object.assign(a.style,i),Object.keys(r).forEach(function(o){var s=r[o];s===!1?a.removeAttribute(o):a.setAttribute(o,s===!0?"":s)}))})}function Sv(e){var n=e.state,t={popper:{position:n.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(n.elements.popper.style,t.popper),n.styles=t,n.elements.arrow&&Object.assign(n.elements.arrow.style,t.arrow),function(){Object.keys(n.elements).forEach(function(i){var r=n.elements[i],a=n.attributes[i]||{},o=Object.keys(n.styles.hasOwnProperty(i)?n.styles[i]:t[i]),s=o.reduce(function(l,c){return l[c]="",l},{});!Oe(r)||!Be(r)||(Object.assign(r.style,s),Object.keys(a).forEach(function(l){r.removeAttribute(l)}))})}}var om={name:"applyStyles",enabled:!0,phase:"write",fn:Lv,effect:Sv,requires:["computeStyles"]};function De(e){return e.split("-")[0]}var Lt=Math.max,Pn=Math.min,jt=Math.round;function Pi(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(n){return n.brand+"/"+n.version}).join(" "):navigator.userAgent}function Kr(){return!/^((?!chrome|android).)*safari/i.test(Pi())}function gt(e,n,t){n===void 0&&(n=!1),t===void 0&&(t=!1);var i=e.getBoundingClientRect(),r=1,a=1;n&&Oe(e)&&(r=e.offsetWidth>0&&jt(i.width)/e.offsetWidth||1,a=e.offsetHeight>0&&jt(i.height)/e.offsetHeight||1);var o=ft(e)?de(e):window,s=o.visualViewport,l=!Kr()&&t,c=(i.left+(l&&s?s.offsetLeft:0))/r,u=(i.top+(l&&s?s.offsetTop:0))/a,d=i.width/r,m=i.height/a;return{width:d,height:m,top:u,right:c+d,bottom:u+m,left:c,x:c,y:u}}function Hn(e){var n=gt(e),t=e.offsetWidth,i=e.offsetHeight;return Math.abs(n.width-t)<=1&&(t=n.width),Math.abs(n.height-i)<=1&&(i=n.height),{x:e.offsetLeft,y:e.offsetTop,width:t,height:i}}function zr(e,n){var t=n.getRootNode&&n.getRootNode();if(e.contains(n))return!0;if(t&&_i(t)){var i=n;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function Xe(e){return de(e).getComputedStyle(e)}function pc(e){return["table","td","th"].indexOf(Be(e))>=0}function _e(e){return((ft(e)?e.ownerDocument:e.document)||window.document).documentElement}function $t(e){return Be(e)==="html"?e:e.assignedSlot||e.parentNode||(_i(e)?e.host:null)||_e(e)}function sm(e){return!Oe(e)||Xe(e).position==="fixed"?null:e.offsetParent}function Ev(e){var n=/firefox/i.test(Pi()),t=/Trident/i.test(Pi());if(t&&Oe(e)){var i=Xe(e);if(i.position==="fixed")return null}var r=$t(e);for(_i(r)&&(r=r.host);Oe(r)&&["html","body"].indexOf(Be(r))<0;){var a=Xe(r);if(a.transform!=="none"||a.perspective!=="none"||a.contain==="paint"||["transform","perspective"].indexOf(a.willChange)!==-1||n&&a.willChange==="filter"||n&&a.filter&&a.filter!=="none")return r;r=r.parentNode}return null}function St(e){for(var n=de(e),t=sm(e);t&&pc(t)&&Xe(t).position==="static";)t=sm(t);return t&&(Be(t)==="html"||Be(t)==="body"&&Xe(t).position==="static")?n:t||Ev(e)||n}function qn(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Un(e,n,t){return Lt(e,Pn(n,t))}function lm(e,n,t){var i=Un(e,n,t);return i>t?t:i}function Nr(){return{top:0,right:0,bottom:0,left:0}}function Yr(e){return Object.assign({},Nr(),e)}function _r(e,n){return n.reduce(function(t,i){return t[i]=e,t},{})}var Tv=function(n,t){return n=typeof n=="function"?n(Object.assign({},t.rects,{placement:t.placement})):n,Yr(typeof n!="number"?n:_r(n,hn))};function Cv(e){var n,t=e.state,i=e.name,r=e.options,a=t.elements.arrow,o=t.modifiersData.popperOffsets,s=De(t.placement),l=qn(s),c=[ve,Se].indexOf(s)>=0,u=c?"height":"width";if(!(!a||!o)){var d=Tv(r.padding,t),m=Hn(a),p=l==="y"?ye:ve,f=l==="y"?Ce:Se,b=t.rects.reference[u]+t.rects.reference[l]-o[l]-t.rects.popper[u],h=o[l]-t.rects.reference[l],k=St(a),A=k?l==="y"?k.clientHeight||0:k.clientWidth||0:0,S=b/2-h/2,T=d[p],M=A-m[u]-d[f],E=A/2-m[u]/2+S,O=Un(T,E,M),N=l;t.modifiersData[i]=(n={},n[N]=O,n.centerOffset=O-E,n)}}function Ov(e){var n=e.state,t=e.options,i=t.element,r=i===void 0?"[data-popper-arrow]":i;r!=null&&(typeof r=="string"&&(r=n.elements.popper.querySelector(r),!r)||zr(n.elements.popper,r)&&(n.elements.arrow=r))}var cm={name:"arrow",enabled:!0,phase:"main",fn:Cv,effect:Ov,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ht(e){return e.split("-")[1]}var Mv={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Iv(e,n){var t=e.x,i=e.y,r=n.devicePixelRatio||1;return{x:jt(t*r)/r||0,y:jt(i*r)/r||0}}function um(e){var n,t=e.popper,i=e.popperRect,r=e.placement,a=e.variation,o=e.offsets,s=e.position,l=e.gpuAcceleration,c=e.adaptive,u=e.roundOffsets,d=e.isFixed,m=o.x,p=m===void 0?0:m,f=o.y,b=f===void 0?0:f,h=typeof u=="function"?u({x:p,y:b}):{x:p,y:b};p=h.x,b=h.y;var k=o.hasOwnProperty("x"),A=o.hasOwnProperty("y"),S=ve,T=ye,M=window;if(c){var E=St(t),O="clientHeight",N="clientWidth";if(E===de(t)&&(E=_e(t),Xe(E).position!=="static"&&s==="absolute"&&(O="scrollHeight",N="scrollWidth")),E=E,r===ye||(r===ve||r===Se)&&a===_n){T=Ce;var B=d&&E===M&&M.visualViewport?M.visualViewport.height:E[O];b-=B-i.height,b*=l?1:-1}if(r===ve||(r===ye||r===Ce)&&a===_n){S=Se;var z=d&&E===M&&M.visualViewport?M.visualViewport.width:E[N];p-=z-i.width,p*=l?1:-1}}var V=Object.assign({position:s},c&&Mv),$=u===!0?Iv({x:p,y:b},de(t)):{x:p,y:b};if(p=$.x,b=$.y,l){var D;return Object.assign({},V,(D={},D[T]=A?"0":"",D[S]=k?"0":"",D.transform=(M.devicePixelRatio||1)<=1?"translate("+p+"px, "+b+"px)":"translate3d("+p+"px, "+b+"px, 0)",D))}return Object.assign({},V,(n={},n[T]=A?b+"px":"",n[S]=k?p+"px":"",n.transform="",n))}function Fv(e){var n=e.state,t=e.options,i=t.gpuAcceleration,r=i===void 0?!0:i,a=t.adaptive,o=a===void 0?!0:a,s=t.roundOffsets,l=s===void 0?!0:s,c={placement:De(n.placement),variation:ht(n.placement),popper:n.elements.popper,popperRect:n.rects.popper,gpuAcceleration:r,isFixed:n.options.strategy==="fixed"};n.modifiersData.popperOffsets!=null&&(n.styles.popper=Object.assign({},n.styles.popper,um(Object.assign({},c,{offsets:n.modifiersData.popperOffsets,position:n.options.strategy,adaptive:o,roundOffsets:l})))),n.modifiersData.arrow!=null&&(n.styles.arrow=Object.assign({},n.styles.arrow,um(Object.assign({},c,{offsets:n.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),n.attributes.popper=Object.assign({},n.attributes.popper,{"data-popper-placement":n.placement})}var dm={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:Fv,data:{}};var $o={passive:!0};function Rv(e){var n=e.state,t=e.instance,i=e.options,r=i.scroll,a=r===void 0?!0:r,o=i.resize,s=o===void 0?!0:o,l=de(n.elements.popper),c=[].concat(n.scrollParents.reference,n.scrollParents.popper);return a&&c.forEach(function(u){u.addEventListener("scroll",t.update,$o)}),s&&l.addEventListener("resize",t.update,$o),function(){a&&c.forEach(function(u){u.removeEventListener("scroll",t.update,$o)}),s&&l.removeEventListener("resize",t.update,$o)}}var pm={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:Rv,data:{}};var Bv={left:"right",right:"left",bottom:"top",top:"bottom"};function Hi(e){return e.replace(/left|right|bottom|top/g,function(n){return Bv[n]})}var Dv={start:"end",end:"start"};function Go(e){return e.replace(/start|end/g,function(n){return Dv[n]})}function Wn(e){var n=de(e),t=n.pageXOffset,i=n.pageYOffset;return{scrollLeft:t,scrollTop:i}}function Vn(e){return gt(_e(e)).left+Wn(e).scrollLeft}function mc(e,n){var t=de(e),i=_e(e),r=t.visualViewport,a=i.clientWidth,o=i.clientHeight,s=0,l=0;if(r){a=r.width,o=r.height;var c=Kr();(c||!c&&n==="fixed")&&(s=r.offsetLeft,l=r.offsetTop)}return{width:a,height:o,x:s+Vn(e),y:l}}function fc(e){var n,t=_e(e),i=Wn(e),r=(n=e.ownerDocument)==null?void 0:n.body,a=Lt(t.scrollWidth,t.clientWidth,r?r.scrollWidth:0,r?r.clientWidth:0),o=Lt(t.scrollHeight,t.clientHeight,r?r.scrollHeight:0,r?r.clientHeight:0),s=-i.scrollLeft+Vn(e),l=-i.scrollTop;return Xe(r||t).direction==="rtl"&&(s+=Lt(t.clientWidth,r?r.clientWidth:0)-a),{width:a,height:o,x:s,y:l}}function jn(e){var n=Xe(e),t=n.overflow,i=n.overflowX,r=n.overflowY;return/auto|scroll|overlay|hidden/.test(t+r+i)}function Zo(e){return["html","body","#document"].indexOf(Be(e))>=0?e.ownerDocument.body:Oe(e)&&jn(e)?e:Zo($t(e))}function yn(e,n){var t;n===void 0&&(n=[]);var i=Zo(e),r=i===((t=e.ownerDocument)==null?void 0:t.body),a=de(i),o=r?[a].concat(a.visualViewport||[],jn(i)?i:[]):i,s=n.concat(o);return r?s:s.concat(yn($t(o)))}function qi(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function Kv(e,n){var t=gt(e,!1,n==="fixed");return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}function mm(e,n,t){return n===Vo?qi(mc(e,t)):ft(n)?Kv(n,t):qi(fc(_e(e)))}function zv(e){var n=yn($t(e)),t=["absolute","fixed"].indexOf(Xe(e).position)>=0,i=t&&Oe(e)?St(e):e;return ft(i)?n.filter(function(r){return ft(r)&&zr(r,i)&&Be(r)!=="body"}):[]}function gc(e,n,t,i){var r=n==="clippingParents"?zv(e):[].concat(n),a=[].concat(r,[t]),o=a[0],s=a.reduce(function(l,c){var u=mm(e,c,i);return l.top=Lt(u.top,l.top),l.right=Pn(u.right,l.right),l.bottom=Pn(u.bottom,l.bottom),l.left=Lt(u.left,l.left),l},mm(e,o,i));return s.width=s.right-s.left,s.height=s.bottom-s.top,s.x=s.left,s.y=s.top,s}function Pr(e){var n=e.reference,t=e.element,i=e.placement,r=i?De(i):null,a=i?ht(i):null,o=n.x+n.width/2-t.width/2,s=n.y+n.height/2-t.height/2,l;switch(r){case ye:l={x:o,y:n.y-t.height};break;case Ce:l={x:o,y:n.y+n.height};break;case Se:l={x:n.x+n.width,y:s};break;case ve:l={x:n.x-t.width,y:s};break;default:l={x:n.x,y:n.y}}var c=r?qn(r):null;if(c!=null){var u=c==="y"?"height":"width";switch(a){case Vt:l[c]=l[c]-(n[u]/2-t[u]/2);break;case _n:l[c]=l[c]+(n[u]/2-t[u]/2);break;default:}}return l}function Et(e,n){n===void 0&&(n={});var t=n,i=t.placement,r=i===void 0?e.placement:i,a=t.strategy,o=a===void 0?e.strategy:a,s=t.boundary,l=s===void 0?im:s,c=t.rootBoundary,u=c===void 0?Vo:c,d=t.elementContext,m=d===void 0?Yi:d,p=t.altBoundary,f=p===void 0?!1:p,b=t.padding,h=b===void 0?0:b,k=Yr(typeof h!="number"?h:_r(h,hn)),A=m===Yi?rm:Yi,S=e.rects.popper,T=e.elements[f?A:m],M=gc(ft(T)?T:T.contextElement||_e(e.elements.popper),l,u,o),E=gt(e.elements.reference),O=Pr({reference:E,element:S,strategy:"absolute",placement:r}),N=qi(Object.assign({},S,O)),B=m===Yi?N:E,z={top:M.top-B.top+k.top,bottom:B.bottom-M.bottom+k.bottom,left:M.left-B.left+k.left,right:B.right-M.right+k.right},V=e.modifiersData.offset;if(m===Yi&&V){var $=V[r];Object.keys(z).forEach(function(D){var U=[Se,Ce].indexOf(D)>=0?1:-1,W=[ye,Ce].indexOf(D)>=0?"y":"x";z[D]+=$[W]*U})}return z}function hc(e,n){n===void 0&&(n={});var t=n,i=t.placement,r=t.boundary,a=t.rootBoundary,o=t.padding,s=t.flipVariations,l=t.allowedAutoPlacements,c=l===void 0?jo:l,u=ht(i),d=u?s?dc:dc.filter(function(f){return ht(f)===u}):hn,m=d.filter(function(f){return c.indexOf(f)>=0});m.length===0&&(m=d);var p=m.reduce(function(f,b){return f[b]=Et(e,{placement:b,boundary:r,rootBoundary:a,padding:o})[De(b)],f},{});return Object.keys(p).sort(function(f,b){return p[f]-p[b]})}function Nv(e){if(De(e)===Wo)return[];var n=Hi(e);return[Go(e),n,Go(n)]}function Yv(e){var n=e.state,t=e.options,i=e.name;if(!n.modifiersData[i]._skip){for(var r=t.mainAxis,a=r===void 0?!0:r,o=t.altAxis,s=o===void 0?!0:o,l=t.fallbackPlacements,c=t.padding,u=t.boundary,d=t.rootBoundary,m=t.altBoundary,p=t.flipVariations,f=p===void 0?!0:p,b=t.allowedAutoPlacements,h=n.options.placement,k=De(h),A=k===h,S=l||(A||!f?[Hi(h)]:Nv(h)),T=[h].concat(S).reduce(function(Ae,qe){return Ae.concat(De(qe)===Wo?hc(n,{placement:qe,boundary:u,rootBoundary:d,padding:c,flipVariations:f,allowedAutoPlacements:b}):qe)},[]),M=n.rects.reference,E=n.rects.popper,O=new Map,N=!0,B=T[0],z=0;z=0,W=U?"width":"height",Q=Et(n,{placement:V,boundary:u,rootBoundary:d,altBoundary:m,padding:c}),ee=U?D?Se:ve:D?Ce:ye;M[W]>E[W]&&(ee=Hi(ee));var Pe=Hi(ee),Ie=[];if(a&&Ie.push(Q[$]<=0),s&&Ie.push(Q[ee]<=0,Q[Pe]<=0),Ie.every(function(Ae){return Ae})){B=V,N=!1;break}O.set(V,Ie)}if(N)for(var v=f?3:1,He=function(qe){var Yt=T.find(function(_t){var se=O.get(_t);if(se)return se.slice(0,qe).every(function(Pt){return Pt})});if(Yt)return B=Yt,"break"},$e=v;$e>0;$e--){var w=He($e);if(w==="break")break}n.placement!==B&&(n.modifiersData[i]._skip=!0,n.placement=B,n.reset=!0)}}var fm={name:"flip",enabled:!0,phase:"main",fn:Yv,requiresIfExists:["offset"],data:{_skip:!1}};function gm(e,n,t){return t===void 0&&(t={x:0,y:0}),{top:e.top-n.height-t.y,right:e.right-n.width+t.x,bottom:e.bottom-n.height+t.y,left:e.left-n.width-t.x}}function hm(e){return[ye,Se,Ce,ve].some(function(n){return e[n]>=0})}function _v(e){var n=e.state,t=e.name,i=n.rects.reference,r=n.rects.popper,a=n.modifiersData.preventOverflow,o=Et(n,{elementContext:"reference"}),s=Et(n,{altBoundary:!0}),l=gm(o,i),c=gm(s,r,a),u=hm(l),d=hm(c);n.modifiersData[t]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:u,hasPopperEscaped:d},n.attributes.popper=Object.assign({},n.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":d})}var ym={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:_v};function Pv(e,n,t){var i=De(e),r=[ve,ye].indexOf(i)>=0?-1:1,a=typeof t=="function"?t(Object.assign({},n,{placement:e})):t,o=a[0],s=a[1];return o=o||0,s=(s||0)*r,[ve,Se].indexOf(i)>=0?{x:s,y:o}:{x:o,y:s}}function Hv(e){var n=e.state,t=e.options,i=e.name,r=t.offset,a=r===void 0?[0,0]:r,o=jo.reduce(function(u,d){return u[d]=Pv(d,n.rects,a),u},{}),s=o[n.placement],l=s.x,c=s.y;n.modifiersData.popperOffsets!=null&&(n.modifiersData.popperOffsets.x+=l,n.modifiersData.popperOffsets.y+=c),n.modifiersData[i]=o}var bm={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:Hv};function qv(e){var n=e.state,t=e.name;n.modifiersData[t]=Pr({reference:n.rects.reference,element:n.rects.popper,strategy:"absolute",placement:n.placement})}var vm={name:"popperOffsets",enabled:!0,phase:"read",fn:qv,data:{}};function yc(e){return e==="x"?"y":"x"}function Uv(e){var n=e.state,t=e.options,i=e.name,r=t.mainAxis,a=r===void 0?!0:r,o=t.altAxis,s=o===void 0?!1:o,l=t.boundary,c=t.rootBoundary,u=t.altBoundary,d=t.padding,m=t.tether,p=m===void 0?!0:m,f=t.tetherOffset,b=f===void 0?0:f,h=Et(n,{boundary:l,rootBoundary:c,padding:d,altBoundary:u}),k=De(n.placement),A=ht(n.placement),S=!A,T=qn(k),M=yc(T),E=n.modifiersData.popperOffsets,O=n.rects.reference,N=n.rects.popper,B=typeof b=="function"?b(Object.assign({},n.rects,{placement:n.placement})):b,z=typeof B=="number"?{mainAxis:B,altAxis:B}:Object.assign({mainAxis:0,altAxis:0},B),V=n.modifiersData.offset?n.modifiersData.offset[n.placement]:null,$={x:0,y:0};if(E){if(a){var D,U=T==="y"?ye:ve,W=T==="y"?Ce:Se,Q=T==="y"?"height":"width",ee=E[T],Pe=ee+h[U],Ie=ee-h[W],v=p?-N[Q]/2:0,He=A===Vt?O[Q]:N[Q],$e=A===Vt?-N[Q]:-O[Q],w=n.elements.arrow,Ae=p&&w?Hn(w):{width:0,height:0},qe=n.modifiersData["arrow#persistent"]?n.modifiersData["arrow#persistent"].padding:Nr(),Yt=qe[U],_t=qe[W],se=Un(0,O[Q],Ae[Q]),Pt=S?O[Q]/2-v-se-Yt-z.mainAxis:He-se-Yt-z.mainAxis,dt=S?-O[Q]/2+v+se+_t+z.mainAxis:$e+se+_t+z.mainAxis,Mt=n.elements.arrow&&St(n.elements.arrow),en=Mt?T==="y"?Mt.clientTop||0:Mt.clientLeft||0:0,Ai=(D=V?.[T])!=null?D:0,ja=ee+Pt-Ai-en,$a=ee+dt-Ai,nr=Un(p?Pn(Pe,ja):Pe,ee,p?Lt(Ie,$a):Ie);E[T]=nr,$[T]=nr-ee}if(s){var Ga,Za=T==="x"?ye:ve,Qa=T==="x"?Ce:Se,Ht=E[M],xi=M==="y"?"height":"width",Ja=Ht+h[Za],Xa=Ht-h[Qa],ir=[ye,ve].indexOf(k)!==-1,C=(Ga=V?.[M])!=null?Ga:0,R=ir?Ja:Ht-O[xi]-N[xi]-C+z.altAxis,j=ir?Ht+O[xi]+N[xi]-C-z.altAxis:Xa,Z=p&&ir?lm(R,Ht,j):Un(p?R:Ja,Ht,p?j:Xa);E[M]=Z,$[M]=Z-Ht}n.modifiersData[i]=$}}var km={name:"preventOverflow",enabled:!0,phase:"main",fn:Uv,requiresIfExists:["offset"]};function bc(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function vc(e){return e===de(e)||!Oe(e)?Wn(e):bc(e)}function Wv(e){var n=e.getBoundingClientRect(),t=jt(n.width)/e.offsetWidth||1,i=jt(n.height)/e.offsetHeight||1;return t!==1||i!==1}function kc(e,n,t){t===void 0&&(t=!1);var i=Oe(n),r=Oe(n)&&Wv(n),a=_e(n),o=gt(e,r,t),s={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(i||!i&&!t)&&((Be(n)!=="body"||jn(a))&&(s=vc(n)),Oe(n)?(l=gt(n,!0),l.x+=n.clientLeft,l.y+=n.clientTop):a&&(l.x=Vn(a))),{x:o.left+s.scrollLeft-l.x,y:o.top+s.scrollTop-l.y,width:o.width,height:o.height}}function Vv(e){var n=new Map,t=new Set,i=[];e.forEach(function(a){n.set(a.name,a)});function r(a){t.add(a.name);var o=[].concat(a.requires||[],a.requiresIfExists||[]);o.forEach(function(s){if(!t.has(s)){var l=n.get(s);l&&r(l)}}),i.push(a)}return e.forEach(function(a){t.has(a.name)||r(a)}),i}function wc(e){var n=Vv(e);return am.reduce(function(t,i){return t.concat(n.filter(function(r){return r.phase===i}))},[])}function Ac(e){var n;return function(){return n||(n=new Promise(function(t){Promise.resolve().then(function(){n=void 0,t(e())})})),n}}function xc(e){var n=e.reduce(function(t,i){var r=t[i.name];return t[i.name]=r?Object.assign({},r,i,{options:Object.assign({},r.options,i.options),data:Object.assign({},r.data,i.data)}):i,t},{});return Object.keys(n).map(function(t){return n[t]})}var wm={placement:"bottom",modifiers:[],strategy:"absolute"};function Am(){for(var e=arguments.length,n=new Array(e),t=0;t(e%n+n)%n,Sc=class{constructor(n,t,i){this.owner=n,this.containerEl=t,t.on("click",".suggestion-item",this.onSuggestionClick.bind(this)),t.on("mousemove",".suggestion-item",this.onSuggestionMouseover.bind(this)),i.register([],"ArrowUp",r=>{if(!r.isComposing)return this.setSelectedItem(this.selectedItem-1,!0),!1}),i.register([],"ArrowDown",r=>{if(!r.isComposing)return this.setSelectedItem(this.selectedItem+1,!0),!1}),i.register([],"Enter",r=>{if(!r.isComposing)return this.useSelectedItem(r),!1})}onSuggestionClick(n,t){n.preventDefault();let i=this.suggestions.indexOf(t);this.setSelectedItem(i,!1),this.useSelectedItem(n)}onSuggestionMouseover(n,t){let i=this.suggestions.indexOf(t);this.setSelectedItem(i,!1)}setSuggestions(n){this.containerEl.empty();let t=[];n.forEach(i=>{let r=this.containerEl.createDiv("suggestion-item");this.owner.renderSuggestion(i,r),t.push(r)}),this.values=n,this.suggestions=t,this.setSelectedItem(0,!1)}useSelectedItem(n){let t=this.values[this.selectedItem];t&&this.owner.selectSuggestion(t,n)}setSelectedItem(n,t){let i=$v(n,this.suggestions.length),r=this.suggestions[this.selectedItem],a=this.suggestions[i];r?.removeClass("is-selected"),a?.addClass("is-selected"),this.selectedItem=i,t&&a.scrollIntoView(!1)}},bn=class{constructor(n,t){this.app=n,this.inputEl=t,this.scope=new Lm.Scope,this.suggestEl=createDiv("suggestion-container");let i=this.suggestEl.createDiv("suggestion");this.suggest=new Sc(this,i,this.scope),this.scope.register([],"Escape",this.close.bind(this)),this.inputEl.addEventListener("input",this.onInputChanged.bind(this)),this.inputEl.addEventListener("focus",this.onInputChanged.bind(this)),this.inputEl.addEventListener("blur",this.close.bind(this)),this.suggestEl.on("mousedown",".suggestion-container",r=>{r.preventDefault()})}onInputChanged(){let n=this.inputEl.value,t=this.getSuggestions(n);if(!t){this.close();return}t.length>0?(this.suggest.setSuggestions(t),this.open(this.app.dom.appContainerEl,this.inputEl)):this.close()}open(n,t){this.app.keymap.pushScope(this.scope),n.appendChild(this.suggestEl),this.popper=Lc(t,this.suggestEl,{placement:"bottom-start",modifiers:[{name:"sameWidth",enabled:!0,fn:({state:i,instance:r})=>{let a=`${i.rects.reference.width}px`;i.styles.popper.width!==a&&(i.styles.popper.width=a,r.update())},phase:"beforeWrite",requires:["computeStyles"]}]})}close(){this.app.keymap.popScope(this.scope),this.suggest.setSuggestions([]),this.popper&&this.popper.destroy(),this.suggestEl.detach()}};var Sm=require("obsidian"),Hr=class extends bn{constructor(t,i,r=[]){super(t,i);this.app=t;this.inputEl=i;this.valuesToExclude=r}getSuggestions(t){let i=this.app.vault.getAllLoadedFiles().filter(s=>s instanceof Sm.TFile&&s.path.endsWith(".md")).map(s=>s.path);if(!i)return[];let r=i.filter(s=>!this.valuesToExclude.includes(s)||s===this.inputEl.getAttribute("fileName")),a=[],o=t.toLowerCase();return r.forEach(s=>{s.toLowerCase().contains(o)&&a.push(s)}),a}renderSuggestion(t,i){i.setText(t)}selectSuggestion(t){this.inputEl.setAttribute("fileName",t),this.inputEl.value=t,this.inputEl.trigger("input"),this.close()}};var Em=require("obsidian");var Qo=class extends Em.Modal{constructor(n,t){if(super(n),this.modalEl.addClass("confirm-modal"),this.contentEl.createEl("h3",{text:x("parse-results-heading-text"),cls:"modal-heading"}),t?.customReplacements.size>0){this.contentEl.createEl("p",{text:x("file-parse-description-text").replace("{FILE}",t.filePath)}).id="confirm-dialog";let i=this.contentEl.createDiv().createEl("table",{cls:"markdown-rendered"}),r=i.createEl("tr");r.createEl("th",{text:x("find-header-text")}),r.createEl("th",{text:x("replace-header-text")});let a;for(let o of t.customReplacements)a=i.createEl("tr"),a.createEl("td",{text:o[0]}),a.createEl("td",{text:o[1]})}else this.contentEl.createEl("p",{text:x("no-parsed-values-found-text").replaceAll("{FILE}",t.filePath),cls:"modal-warn"});this.contentEl.createDiv("modal-button-container",i=>{i.createEl("button",{text:x("close-button-text")}).addEventListener("click",()=>this.close())})}};var Jo=class extends Uo{constructor(t,i,r,a,o,s){super(t,x(o),x(s),x("options.custom-auto-correct.warning-text").replace("{NAME}",x("rules.auto-correct-common-misspellings.name")),x("options.custom-auto-correct.add-new-replacement-file-tooltip"),x("options.custom-auto-correct.refresh-tooltip-text"),r,a,()=>{this.selectedFiles=[];for(let c of this.filesPicked)this.selectedFiles.push(c.filePath);let l={filePath:"",customReplacements:null};this.filesPicked.push(l),this.selectedFiles.push(""),this.saveSettings(),this.addPickedFile(l,this.filesPicked.length-1,!0)},async()=>{for(let l of this.filesPicked)if(l.filePath!=""){let c=this.getFileFromPath(l.filePath);c&&(l.customReplacements=Mi(an(await this.app.vault.cachedRead(c))))}});this.filesPicked=i;this.selectedFiles=[];this.display(),this.inputElDiv.addClass("linter-folder-ignore-container")}showInputEls(){this.filesPicked.forEach((t,i)=>{this.addPickedFile(t,i)})}addPickedFile(t,i,r=!1){let a;new Ui.Setting(this.inputElDiv).addSearch(s=>{new Hr(this.app,s.inputEl,this.selectedFiles),s.setPlaceholder(x("options.custom-auto-correct.file-search-placeholder-text")).setValue(t.filePath).onChange(async l=>{let c=l;if(c===""||c===s.inputEl.getAttribute("fileName")){let u=this.getFileFromPath(c);t.filePath=c,u?(t.customReplacements=Mi(an(await this.app.vault.read(u))),a.disabled=!1,a.extraSettingsEl.addClass("clickable-icon")):(a.disabled=!0,t.customReplacements=null,a.extraSettingsEl.removeClass("clickable-icon")),this.filesPicked[i]=t,this.saveSettings()}}),s.inputEl.setAttr("tabIndex",i),s.inputEl.addClass("linter-folder-ignore"),r&&s.inputEl.focus()}).addExtraButton(s=>{a=s,s.setIcon("info").setTooltip(x("options.custom-auto-correct.show-parsed-contents-tooltip")).onClick(()=>{new Qo(this.app,t).open()}),t.filePath===""&&(s.disabled=!0,s.extraSettingsEl.removeClass("clickable-icon"))}).addExtraButton(s=>{s.setIcon("trash").setTooltip(x("options.custom-auto-correct.delete-tooltip")).onClick(()=>{this.filesPicked.splice(i,1),this.saveSettings(),this.resetInputEls()})}).settingEl.addClass("linter-no-border")}getFileFromPath(t){let i=this.app.vault.getAbstractFileByPath((0,Ui.normalizePath)(t));return i instanceof Ui.TFile?i:null}};var vn=class{constructor(n,t,i,r,a){this.configKey=n;this.nameKey=t;this.descriptionKey=i;this.defaultValue=r;a&&(this.ruleAlias=a)}getName(){return x(this.nameKey)??""}getDescription(){return x(this.descriptionKey)??""}getSearchInfo(){return{name:this.getName(),description:this.getDescription()}}setOption(n,t){t.ruleConfigs[this.ruleAlias][this.configKey]=n}parseNameAndDescriptionAndRemoveSettingBorder(){it(this.getName(),this.setting.nameEl),it(this.getDescription(),this.setting.descEl),this.setting.settingEl.addClass("linter-no-border"),this.setting.descEl.addClass("linter-no-padding-top")}hide(){Te(this.setting.settingEl)}unhide(){Ye(this.setting.settingEl)}},kn=class extends vn{constructor(t,i,r,a,o,s){super(t,i,r,a,o);this.onChange=s}display(t,i,r){this.setting=new Wi.Setting(t).addToggle(a=>{this.toggleComponent=a,a.setValue(i.ruleConfigs[this.ruleAlias][this.configKey]),a.onChange(o=>{this.setOption(o,i),r.settings=i,this.onChange&&this.onChange(o,r.app),r.saveSettings()})}),this.parseNameAndDescriptionAndRemoveSettingBorder()}getValue(){return this.toggleComponent.getValue()}setValue(t){this.toggleComponent.setValue(t)}},qr=class extends vn{display(n,t,i){this.setting=new Wi.Setting(n).addText(r=>{r.setValue(t.ruleConfigs[this.ruleAlias][this.configKey]),r.onChange(a=>{this.setOption(a,t),i.settings=t,i.saveSettings()})}),this.parseNameAndDescriptionAndRemoveSettingBorder()}},Xo=class extends vn{display(n,t,i){this.setting=new Wi.Setting(n).addTextArea(r=>{r.setValue(t.ruleConfigs[this.ruleAlias][this.configKey]),r.onChange(a=>{this.setOption(a,t),i.settings=t,i.saveSettings()})}),this.parseNameAndDescriptionAndRemoveSettingBorder()}},es=class extends vn{display(n,t,i){this.setting=new Wi.Setting(n).addMomentFormat(r=>{r.setValue(t.ruleConfigs[this.ruleAlias][this.configKey]),r.setPlaceholder("dddd, MMMM Do YYYY, h:mm:ss a"),r.onChange(a=>{this.setOption(a,t),i.settings=t,i.saveSettings()})}),this.parseNameAndDescriptionAndRemoveSettingBorder()}},ts=class{constructor(n,t){this.value=n,this.description=t}getDisplayValue(){return x(this.value)??""}},ns=class extends vn{constructor(n,t,i,r,a,o){super(n,t,i,r,o),this.options=a}getSearchInfo(){return{name:this.getName(),description:this.getDescription(),options:this.options}}display(n,t,i){this.setting=new Wi.Setting(n).addDropdown(r=>{for(let a of this.options)r.addOption(a.value.replace("enums.",""),a.getDisplayValue());r.setValue(t.ruleConfigs[this.ruleAlias][this.configKey]),r.onChange(a=>{this.setOption(a,t),i.settings=t,i.saveSettings()})}),this.parseNameAndDescriptionAndRemoveSettingBorder()}},is=class extends vn{constructor(n,t,i,r){super(n,t,i,[],r)}display(n,t,i){t.ruleConfigs[this.ruleAlias][this.configKey]=t.ruleConfigs[this.ruleAlias][this.configKey]??[],this.settingEl=n.createDiv(),new Jo(this.settingEl,t.ruleConfigs[this.ruleAlias][this.configKey],i.app,()=>{i.saveSettings()},this.nameKey,this.descriptionKey)}hide(){Te(this.settingEl)}unhide(){Ye(this.settingEl)}};var Vi=class e extends Error{constructor(n,t){super(n),this.cause=t??null,this.stack=t.stack??null,Object.setPrototypeOf(this,e.prototype)}};var g={code:{replaceAction:"code",placeholder:"{CODE_BLOCK_PLACEHOLDER}"},inlineCode:{replaceAction:"inlineCode",placeholder:"{INLINE_CODE_BLOCK_PLACEHOLDER}"},image:{replaceAction:"image",placeholder:"{IMAGE_PLACEHOLDER}"},thematicBreak:{replaceAction:"thematicBreak",placeholder:"{HORIZONTAL_RULE_PLACEHOLDER}"},italics:{replaceAction:"emphasis",placeholder:"{ITALICS_PLACEHOLDER}"},bold:{replaceAction:"strong",placeholder:"{STRONG_PLACEHOLDER}"},list:{replaceAction:"list",placeholder:"{LIST_PLACEHOLDER}"},blockquote:{replaceAction:"blockquote",placeholder:"{BLOCKQUOTE_PLACEHOLDER}"},math:{replaceAction:"math",placeholder:"{MATH_PLACEHOLDER}"},inlineMath:{replaceAction:"inlineMath",placeholder:"{INLINE_MATH_PLACEHOLDER}"},html:{replaceAction:"html",placeholder:"{HTML_PLACEHOLDER}"},yaml:{replaceAction:Ne,placeholder:Je(`--- +---`)},wikiLink:{replaceAction:Yo,placeholder:"{WIKI_LINK_PLACEHOLDER}"},obsidianMultiLineComments:{replaceAction:Pp,placeholder:"{OBSIDIAN_COMMENT_PLACEHOLDER}"},footnoteAtStartOfLine:{replaceAction:No,placeholder:"{FOOTNOTE_AT_START_OF_LINE_PLACEHOLDER}"},footnoteAfterATask:{replaceAction:/- \[.] (\[\^\w+\]) ?([,.;!:?])/gm,placeholder:"{FOOTNOTE_AFTER_A_TASK_PLACEHOLDER}"},url:{replaceAction:zn,placeholder:"{URL_PLACEHOLDER}"},anchorTag:{replaceAction:qp,placeholder:"{ANCHOR_PLACEHOLDER}"},templaterCommand:{replaceAction:$p,placeholder:"{TEMPLATER_PLACEHOLDER}"},link:{replaceAction:Qv,placeholder:"{REGULAR_LINK_PLACEHOLDER}"},tag:{replaceAction:Jv,placeholder:"#tag-placeholder"},table:{replaceAction:Xv,placeholder:"{TABLE_PLACEHOLDER}"},customIgnore:{replaceAction:ek,placeholder:"{CUSTOM_IGNORE_PLACEHOLDER}"}};function ke(e,n,t){let i=[];for(let r of e){let a;if(typeof r.replaceAction=="string")a=Gv(n,r.placeholder,r.replaceAction);else if(r.replaceAction instanceof RegExp)a=Zv(n,r.placeholder,r.replaceAction);else if(typeof r.replaceAction=="function"){let o=r.replaceAction;a=o(n,r.placeholder)}n=a.newText,i.push({replacedValues:a.replacedValues,placeholder:r.placeholder})}return n=t(n),i=i.reverse(),i!=null&&i.length>0&&i.forEach(r=>{r.replacedValues.forEach(a=>{n=n.replace(new RegExp(r.placeholder,"i"),Je(a))})}),n}function Gv(e,n,t){let i=ge(t,e),r=[];for(let a of i){let o=e.substring(a.start.offset,a.end.offset);r.push(o),e=le(e,a.start.offset,a.end.offset,n)}return r.reverse(),{newText:e,replacedValues:r}}function Zv(e,n,t){let i=e.match(t),r=[];if(t.flags.includes("g")){if(e=e.replaceAll(t,n),i)for(let a of i)r.push(a)}else e=e.replace(t,n),i&&r.push(i[0]);return{newText:e,replacedValues:r}}function Qv(e,n){let t=ge("link",e),i=[];for(let r of t){if(r==null)continue;let a=e.substring(r.start.offset,r.end.offset);a.match(Ir)&&(i.push(a),e=le(e,r.start.offset,r.end.offset,n))}return i.reverse(),{newText:e,replacedValues:i}}function Jv(e,n){let t=[];return e=e.replace(Fr,(i,r,a)=>(t.push(a),r+n)),{newText:e,replacedValues:t}}function Xv(e,n){let t=Ii(e),i=new Array(t.length),r=0,a=i.length;for(let o of t)i[a-1-r++]=e.substring(o.startIndex,o.endIndex),e=le(e,o.startIndex,o.endIndex,n);return{newText:e,replacedValues:i}}function ek(e,n){let t=Fp(e),i=new Array(t.length),r=0,a=i.length;for(let o of t)i[a-1-r++]=e.substring(o.startIndex,o.endIndex),e=le(e,o.startIndex,o.endIndex,n);return{newText:e,replacedValues:i}}var K=(o=>(o.YAML="YAML",o.HEADING="Heading",o.FOOTNOTE="Footnote",o.CONTENT="Content",o.SPACING="Spacing",o.PASTE="Paste",o))(K||{}),rs=class{constructor(n,t,i,r,a,o,s=[],l=!1,c=[],u=null){this.nameKey=n;this.descriptionKey=t;this.settingsKey=i;this.alias=r;this.type=a;this.applyAfterIgnore=o;this.options=s;this.hasSpecialExecutionOrder=l;this.ignoreTypes=c;this.ruleHeading=this.getName().toLowerCase().replaceAll(" ","-"),s.unshift(new kn("enabled",this.descriptionKey,"",!1,r,(d,m)=>{if(d&&u&&u(d,m),s.length>1)for(let p=1;pthis.applyAfterIgnore(i,t))}};var Cm=Object.values(K);function as(e){let n=zi(e);if(n===null)return[[],!1];let t=tm(n);return t.includes("all")?[Bt.map(i=>i.alias),!0]:[t,!1]}var Bt=[],lt={},$n=new Map;function Om(e){Bt.push(e),lt[e.alias]=e,$n.has(e.type)?$n.get(e.type).push(e):$n.set(e.type,[e])}function Mm(){Bt.sort((e,n)=>Cm.indexOf(e.type)-Cm.indexOf(n.type)||e.settingsKey.localeCompare(n.settingsKey))}function os(e,n){let t;throw e instanceof Gu?(t=e.toString(),t=x("logs.wrapper-yaml-error").replace("{ERROR_MESSAGE}",t.substring(t.indexOf(":")+1))):t=x("logs.wrapper-unknown-error").replace("{ERROR_MESSAGE}",e.message),new Vi(`"${n}" encountered an ${t}`,e)}var tr=Cn(Im());function tk(e){for(var n=[],t=1;ti.option),n.hasSpecialExecutionOrder,n.ignoreTypes,n.disableConflictingOptions);Y(et,$i).set(this.name,t),Y(et,Ur).set(n.alias,n)}return Y(et,$i).get(this.name)}static applyIfEnabledBase(n,t,i,r){let a=n.getOptions(i);if(a[n.enabledOptionName()]){In(n.alias);let o=Object.assign({},a,r);nt(`${x("logs.run-rule-text")} ${n.getName()}`);try{let s=n.apply(t,o);return rn(n.alias),nt(s),[s,!0]}catch(s){rn(n.alias),os(s,n.getName())}}else return[t,!1]}static getBuilderByName(n){return Y(et,Ur).get(n)}static setNoSettingControl(n,t){Y(et,wn).has(n)||Y(et,wn).set(n,[]),Y(et,wn).get(n).push(t)}static hasSettingControl(n,t){return!Y(et,wn).has(n)||!Y(et,wn).get(n).includes(t)}};$i=new WeakMap,Ur=new WeakMap,wn=new WeakMap,xe(et,$i,new Map),xe(et,Ur,new Map),xe(et,wn,new Map);var An=et,y=class extends An{constructor(n){super(),this.alias=n.nameKey.substring(6,n.nameKey.length-5),this.settingsKey=this.alias,this.nameKey=n.nameKey,this.descriptionKey=n.descriptionKey,this.type=n.type,this.hasSpecialExecutionOrder=n.hasSpecialExecutionOrder??!1,this.disableConflictingOptions=n.disableConflictingOptions??null,n.ruleIgnoreTypes?this.ignoreTypes=[g.customIgnore,...n.ruleIgnoreTypes]:this.ignoreTypes=[g.customIgnore]}static register(n){let t=n.getRule();Om(t)}safeApply(n,t){return this.apply(n,this.buildRuleOptions(t))}buildRuleOptions(n){n=n??{};let t=new this.OptionsClass,i=Object.assign(t,n);for(let r of this.optionBuilders)r.setRuleOption(i,n);return i}static applyIfEnabled(n,t,i,r){let a=this.getRule();return i.includes(a.alias)?(nt(a.alias+" "+x("logs.disabled-text")),[n,!1]):An.applyIfEnabledBase(a,n,t,r)}static getRuleOptions(n){let t=An.getRule.bind(this)(),i=new this,r=t.getOptions(n);return i.buildRuleOptions(r)}static noSettingControl(){return(n,t)=>{let i=n.constructor.name;An.setNoSettingControl(i,t)}}};var Gi,Gt=class{constructor(n){xe(this,Gi,void 0);this.OptionsClass=n.OptionsClass;let t=n.nameKey.split(".");t.length==1?this.configKey=t[0]:this.configKey=t[t.length-2],this.nameKey=n.nameKey,this.descriptionKey=n.descriptionKey,this.optionsKey=n.optionsKey}get defaultValue(){return new this.OptionsClass()[this.optionsKey]}get option(){return Y(this,Gi)||Fe(this,Gi,this.buildOption()),Y(this,Gi)}setRuleOption(n,t){let i=t[this.configKey];i!==void 0&&(n[this.optionsKey]=i)}};Gi=new WeakMap;var q=class extends Gt{constructor(n){super(n),this.onChange=n.onChange??null}buildOption(){return new kn(this.configKey,this.nameKey,this.descriptionKey,this.defaultValue,null,this.onChange)}},ss=class extends Gt{buildOption(){return new qr(this.configKey,this.nameKey,this.descriptionKey,this.defaultValue)}},J=class extends Gt{constructor(n){super(n),this.records=n.records.map(t=>new ts("enums."+t.value,t.description))}buildOption(){return new ns(this.configKey,this.nameKey,this.descriptionKey,this.defaultValue,this.records)}},pe=class extends Gt{constructor(n){super(n),this.separator=n.separator??` +`,this.splitter=n.splitter??/\n/}buildOption(){return new Xo(this.configKey,this.nameKey,this.descriptionKey,this.defaultValue.join(this.separator))}setRuleOption(n,t){if(t[this.configKey]!==void 0){let i=t[this.configKey].split(this.splitter).filter(function(r){return r!=""});n[this.optionsKey]=i}}},we=class extends Gt{buildOption(){return new qr(this.configKey,this.nameKey,this.descriptionKey,this.defaultValue)}},ls=class extends Gt{buildOption(){return new es(this.configKey,this.nameKey,this.descriptionKey,this.defaultValue)}},cs=class extends Gt{buildOption(){return new is(this.configKey,this.nameKey,this.descriptionKey)}};var Ec=class{},xn=class extends y{constructor(){super({nameKey:"rules.add-blank-line-after-yaml.name",descriptionKey:"rules.add-blank-line-after-yaml.description",type:"YAML",hasSpecialExecutionOrder:!0})}get OptionsClass(){return Ec}apply(n,t){let i=n.match(Ne);if(i===null)return n;let r=i[0],a=n.indexOf(r)+r.length;return a+1>=n.length||n.trimEnd()===r.trimEnd()||n.charAt(a+1)===` +`?n:n.replace(r,r+` +`)}get optionBuilders(){return[]}};xn=L([y.register],xn);var Gn=class{constructor(){this.ignoreWords=[];this.extraAutoCorrectFiles=[];this.skipWordsWithMultipleCapitals=!1;this.misspellingToCorrection=new Map}};L([y.noSettingControl()],Gn.prototype,"misspellingToCorrection",2);var Zn=class extends y{constructor(){super({nameKey:"rules.auto-correct-common-misspellings.name",descriptionKey:"rules.auto-correct-common-misspellings.description",type:"Content",hasSpecialExecutionOrder:!0,ruleIgnoreTypes:[g.yaml,g.code,g.inlineCode,g.math,g.inlineMath,g.link,g.wikiLink,g.tag,g.image,g.url]})}get OptionsClass(){return Gn}apply(n,t){return n.replaceAll(Up,i=>this.replaceWordWithCorrectCasing(i,t))}replaceWordWithCorrectCasing(n,t){let i=n.toLowerCase();if(t.ignoreWords.includes(i)||t.skipWordsWithMultipleCapitals&&n.length>1&&i.substring(1)!==n.substring(1))return n;if(t.misspellingToCorrection.has(i))return this.determineCorrectedWord(n,t.misspellingToCorrection.get(i));if(t.extraAutoCorrectFiles){for(let r=0;rthis.updateBlockquoteLines(i,this.addSpaceToIndicator)):ac(n,i=>this.updateBlockquoteLines(i,this.removeSpaceFromIndicator))}removeSpaceFromIndicator(n,t){return t?n.replace(/>[ \t]+>/g,">>"):n.replace(/>[ \t]+/g,">")}addSpaceToIndicator(n,t){let i=n.replace(/>([^ ]|$)/g,"> $1").replace(/>>/g,"> >");return t?i:i.replace(/>(?:[ \t]{2,}|\t+)/g,"> ")}updateBlockquoteLines(n,t){let i=0,r=0,a="",o="",s=0,l=n,c=!1;do{r=l.indexOf(` +`,i),r===-1&&(r=l.length-1,c=!0),[a,s]=Oi(l,r-1);let u=s+a.length+1,d=r;c&&d++;let m=l.substring(u,d);if(m.includes(g.math.placeholder)||m.includes(g.code.placeholder)){i++;continue}let p=zo.test(m);o=t(a,p),s++,l=le(l,s,s+a.length,o),i=r+1+o.length-a.length}while(!c);return l}get optionBuilders(){return[new J({OptionsClass:us,nameKey:"rules.blockquote-style.style.name",descriptionKey:"rules.blockquote-style.style.description",optionsKey:"style",records:[{value:"space",description:"> indicator is followed by a space"},{value:"no space",description:">indicator is not followed by a space"}]})]}};Qn=L([y.register],Qn);var ds=class{};L([y.noSettingControl()],ds.prototype,"lineContent",2);var Jn=class extends y{constructor(){super({nameKey:"rules.add-blockquote-indentation-on-paste.name",descriptionKey:"rules.add-blockquote-indentation-on-paste.description",type:"Paste"})}get OptionsClass(){return ds}apply(n,t){let i=/^(\s*)((> ?)+) .*/,r=t.lineContent.match(i);if(!r)return n;let a=r[1]??"",o=r[2]??"";return n.trim().replace(/\n/gm,` +${a}${o} `)}get optionBuilders(){return[]}};Jn=L([y.register],Jn);var Xn=class{constructor(){this.style="Title Case";this.ignoreWords=["macOS","iOS","iPhone","iPad","JavaScript","TypeScript","AppleScript","I"];this.lowercaseWords=["a","an","the","aboard","about","abt.","above","abreast","absent","across","after","against","along","aloft","alongside","amid","amidst","mid","midst","among","amongst","anti","apropos","around","round","as","aslant","astride","at","atop","ontop","bar","barring","before","B4","behind","below","beneath","neath","beside","besides","between","'tween","beyond","but","by","chez","circa","c.","ca.","come","concerning","contra","counting","cum","despite","spite","down","during","effective","ere","except","excepting","excluding","failing","following","for","from","in","including","inside","into","less","like","minus","modulo","mod","near","nearer","nearest","next","notwithstanding","of","o'","off","offshore","on","onto","opposite","out","outside","over","o'er","pace","past","pending","per","plus","post","pre","pro","qua","re","regarding","respecting","sans","save","saving","short","since","sub","than","through","thru","throughout","thruout","till","times","to","t'","touching","toward","towards","under","underneath","unlike","until","unto","up","upon","versus","vs.","v.","via","vice","vis-\xE0-vis","wanting","with","w/","w.","c\u0304","within","w/i","without","'thout","w/o","abroad","adrift","aft","afterward","afterwards","ahead","apart","ashore","aside","away","back","backward","backwards","beforehand","downhill","downstage","downstairs","downstream","downward","downwards","downwind","east","eastward","eastwards","forth","forward","forwards","heavenward","heavenwards","hence","henceforth","here","hereby","herein","hereof","hereto","herewith","home","homeward","homewards","indoors","inward","inwards","leftward","leftwards","north","northeast","northward","northwards","northwest","now","onward","onwards","outdoors","outward","outwards","overboard","overhead","overland","overseas","rightward","rightwards","seaward","seawards","skywards","skyward","south","southeast","southwards","southward","southwest","then","thence","thenceforth","there","thereby","therein","thereof","thereto","therewith","together","underfoot","underground","uphill","upstage","upstairs","upstream","upward","upwards","upwind","west","westward","westwards","when","whence","where","whereby","wherein","whereto","wherewith","although","because","considering","given","granted","if","lest","once","provided","providing","seeing","so","supposing","though","unless","whenever","whereas","wherever","while","whilst","ago","according to","as regards","counter to","instead of","owing to","pertaining to","at the behest of","at the expense of","at the hands of","at risk of","at the risk of","at variance with","by dint of","by means of","by virtue of","by way of","for the sake of","for sake of","for lack of","for want of","from want of","in accordance with","in addition to","in case of","in charge of","in compliance with","in conformity with","in contact with","in exchange for","in favor of","in front of","in lieu of","in light of","in the light of","in line with","in place of","in point of","in quest of","in relation to","in regard to","with regard to","in respect to","with respect to","in return for","in search of","in step with","in touch with","in terms of","in the name of","in view of","on account of","on behalf of","on grounds of","on the grounds of","on the part of","on top of","with a view to","with the exception of","\xE0 la","a la","as soon as","as well as","close to","due to","far from","in case","other than","prior to","pursuant to","regardless of","subsequent to","as long as","as much as","as far as","by the time","in as much as","inasmuch","in order to","in order that","even","provide that","if only","whether","whose","whoever","why","how","or not","whatever","what","both","and","or","not only","but also","either","neither","nor","just","rather","no sooner","such","that","yet","is","it"];this.ignoreCasedWords=!0}},ei=class extends y{constructor(){super({nameKey:"rules.capitalize-headings.name",descriptionKey:"rules.capitalize-headings.description",type:"Heading",hasSpecialExecutionOrder:!0,ruleIgnoreTypes:[g.code,g.inlineCode,g.yaml,g.link,g.wikiLink,g.tag]})}get OptionsClass(){return Xn}apply(n,t){return n.replace(pn,i=>{if(t.style==="ALL CAPS")return i.toUpperCase();let r=t.style==="First letter",a=i.match(/\S+/g),o=t.ignoreWords,s=t.lowercaseWords,l=!0;for(let c=1;c(i=i.replace(/^---\n+/,`--- +`),i=i.replace(/\n+---/,` +---`),t.innerNewLines&&(i=i.replaceAll(/\n{2,}/g,` +`)),i))}get optionBuilders(){return[new q({OptionsClass:ps,nameKey:"rules.compact-yaml.inner-new-lines.name",descriptionKey:"rules.compact-yaml.inner-new-lines.description",optionsKey:"innerNewLines"})]}};Wr=L([y.register],Wr);var Tc=class{},ti=class extends y{constructor(){super({nameKey:"rules.consecutive-blank-lines.name",descriptionKey:"rules.consecutive-blank-lines.description",type:"Spacing",ruleIgnoreTypes:[g.code,g.math,g.yaml,g.link,g.wikiLink,g.tag],hasSpecialExecutionOrder:!0})}get OptionsClass(){return Tc}apply(n,t){return n.replace(/(\n([\t\v\f\r \u00a0\u2000-\u200b\u2028-\u2029\u3000]+)?){2,}\n/g,` + +`)}get optionBuilders(){return[]}};ti=L([y.register],ti);var Cc=class{},Vr=class extends y{constructor(){super({nameKey:"rules.convert-bullet-list-markers.name",descriptionKey:"rules.convert-bullet-list-markers.description",type:"Content",ruleIgnoreTypes:[g.code,g.math,g.yaml,g.link,g.wikiLink,g.tag]})}get OptionsClass(){return Cc}apply(n,t){return n.replace(/^([^\S\n]*)([•§])([^\S\n]*)/gm,"$1-$3")}get optionBuilders(){return[]}};Vr=L([y.register],Vr);var ms=class{constructor(){this.tabsize=4}},jr=class extends y{constructor(){super({nameKey:"rules.convert-spaces-to-tabs.name",descriptionKey:"rules.convert-spaces-to-tabs.description",type:"Spacing",ruleIgnoreTypes:[g.code,g.math,g.yaml,g.link,g.wikiLink,g.tag]})}get OptionsClass(){return ms}apply(n,t){let i=String(t.tabsize),r=new RegExp("^( *) {"+i+"}","gm");n=this.replaceAllRegexMatches(n,r);let a=new RegExp("^((>( | *))*(>( | )) *) {"+i+"}","gm");return n=this.replaceAllRegexMatches(n,a),n}replaceAllRegexMatches(n,t){for(;n.match(t)!=null;)n=n.replace(t,"$1 ");return n}get optionBuilders(){return[new ss({OptionsClass:ms,nameKey:"rules.convert-spaces-to-tabs.tabsize.name",descriptionKey:"rules.convert-spaces-to-tabs.tabsize.description",optionsKey:"tabsize"})]}};jr=L([y.register],jr);var Tt=class{constructor(){this.aliasArrayStyle="single-line";this.dedupeAliasKey=!0;this.tagArrayStyle="single-line";this.dedupeTagKey=!0;this.dedupeArrayKeys=!0;this.ignoreDedupeArrayKeys=[];this.defaultEscapeCharacter='"';this.removeUnnecessaryEscapeCharsForMultiLineArrays=!1}};L([y.noSettingControl()],Tt.prototype,"aliasArrayStyle",2),L([y.noSettingControl()],Tt.prototype,"tagArrayStyle",2),L([y.noSettingControl()],Tt.prototype,"defaultEscapeCharacter",2),L([y.noSettingControl()],Tt.prototype,"removeUnnecessaryEscapeCharsForMultiLineArrays",2);var $r=class extends y{constructor(){super({nameKey:"rules.dedupe-yaml-array-values.name",descriptionKey:"rules.dedupe-yaml-array-values.description",type:"YAML"})}get OptionsClass(){return Tt}apply(n,t){return he(n,i=>{let r=st(i.replace(`--- +`,"").replace(` +---`,""));if(!r)return i;for(let a of At)if(t.dedupeAliasKey&&Object.keys(r).includes(a)){i=ae(i,a,be(gn(this.getUniqueArray(Re(ue(i,a)))),t.aliasArrayStyle,t.defaultEscapeCharacter,t.removeUnnecessaryEscapeCharsForMultiLineArrays,!0));break}for(let a of wt)if(t.dedupeTagKey&&Object.keys(r).includes(a)){i=ae(i,a,be(fn(this.getUniqueArray(Re(ue(i,a)))),t.tagArrayStyle,t.defaultEscapeCharacter,t.removeUnnecessaryEscapeCharsForMultiLineArrays));break}if(t.dedupeArrayKeys){let a=[...At,...wt,...t.ignoreDedupeArrayKeys];for(let o of Object.keys(r)){if(a.includes(o)||!Array.isArray(r[o])||r[o].length!==0&&typeof r[o][0]=="object"&&r[o][0]!==null)continue;let s=ue(i,o),l="single-line";s.includes(` +`)&&(l="multi-line");let c=this.getUniqueArray(Re(s));i=ae(i,o,be(c,l,t.defaultEscapeCharacter,t.removeUnnecessaryEscapeCharsForMultiLineArrays))}}return i})}getUniqueArray(n){return n==null||typeof n=="string"||n.length<=1?n:[...new Set(n)]}get optionBuilders(){return[new q({OptionsClass:Tt,nameKey:"rules.dedupe-yaml-array-values.dedupe-alias-key.name",descriptionKey:"rules.dedupe-yaml-array-values.dedupe-alias-key.description",optionsKey:"dedupeAliasKey"}),new q({OptionsClass:Tt,nameKey:"rules.dedupe-yaml-array-values.dedupe-tag-key.name",descriptionKey:"rules.dedupe-yaml-array-values.dedupe-tag-key.description",optionsKey:"dedupeTagKey"}),new q({OptionsClass:Tt,nameKey:"rules.dedupe-yaml-array-values.dedupe-array-keys.name",descriptionKey:"rules.dedupe-yaml-array-values.dedupe-array-keys.description",optionsKey:"dedupeArrayKeys"}),new pe({OptionsClass:Tt,nameKey:"rules.dedupe-yaml-array-values.ignore-keys.name",descriptionKey:"rules.dedupe-yaml-array-values.ignore-keys.description",optionsKey:"ignoreDedupeArrayKeys"})]}};$r=L([y.register],$r);var fs=class{constructor(){this.defaultLanguage=""}},Gr=class extends y{constructor(){super({nameKey:"rules.default-language-for-code-fences.name",descriptionKey:"rules.default-language-for-code-fences.description",type:"Content",ruleIgnoreTypes:[g.yaml,g.math,g.yaml,g.link,g.wikiLink,g.tag]})}get OptionsClass(){return fs}apply(n,t){return Rp(n,t.defaultLanguage)}get optionBuilders(){return[new we({OptionsClass:fs,nameKey:"rules.default-language-for-code-fences.default-language.name",descriptionKey:"rules.default-language-for-code-fences.default-language.description",optionsKey:"defaultLanguage"})]}};Gr=L([y.register],Gr);var gs=class{constructor(){this.style="consistent"}},Zr=class extends y{constructor(){super({nameKey:"rules.emphasis-style.name",descriptionKey:"rules.emphasis-style.description",type:"Content",ruleIgnoreTypes:[g.code,g.math,g.yaml,g.link,g.wikiLink,g.tag,g.math,g.inlineMath]})}get OptionsClass(){return gs}apply(n,t){return Ko(n,t.style,"emphasis")}get optionBuilders(){return[new J({OptionsClass:gs,nameKey:"rules.emphasis-style.style.name",descriptionKey:"rules.emphasis-style.style.description",optionsKey:"style",records:[{value:"consistent",description:"Makes sure the first instance of emphasis is the style that will be used throughout the document"},{value:"asterisk",description:"Makes sure * is the emphasis indicator"},{value:"underscore",description:"Makes sure _ is the emphasis indicator"}]})]}};Zr=L([y.register],Zr);var Oc=class{},Qr=class extends y{constructor(){super({nameKey:"rules.empty-line-around-blockquotes.name",descriptionKey:"rules.empty-line-around-blockquotes.description",type:"Spacing"})}get OptionsClass(){return Oc}apply(n,t){return Tp(n)}get optionBuilders(){return[]}};Qr=L([y.register],Qr);var Mc=class{},Jr=class extends y{constructor(){super({nameKey:"rules.empty-line-around-code-fences.name",descriptionKey:"rules.empty-line-around-code-fences.description",type:"Spacing"})}get OptionsClass(){return Mc}apply(n,t){return Sp(n)}get optionBuilders(){return[]}};Jr=L([y.register],Jr);var Ic=class{},Xr=class extends y{constructor(){super({nameKey:"rules.empty-line-around-horizontal-rules.name",descriptionKey:"rules.empty-line-around-horizontal-rules.description",type:"Spacing"})}get OptionsClass(){return Ic}apply(n,t){return Cp(n)}get optionBuilders(){return[]}};Xr=L([y.register],Xr);var hs=class{constructor(){this.minimumNumberOfDollarSignsToBeAMathBlock=2}};L([y.noSettingControl()],hs.prototype,"minimumNumberOfDollarSignsToBeAMathBlock",2);var ea=class extends y{constructor(){super({nameKey:"rules.empty-line-around-math-blocks.name",descriptionKey:"rules.empty-line-around-math-blocks.description",type:"Spacing",ruleIgnoreTypes:[g.yaml,g.code]})}get OptionsClass(){return hs}apply(n,t){return Ep(n,t.minimumNumberOfDollarSignsToBeAMathBlock)}get optionBuilders(){return[]}};ea=L([y.register],ea);var Fc=class{},ta=class extends y{constructor(){super({nameKey:"rules.empty-line-around-tables.name",descriptionKey:"rules.empty-line-around-tables.description",type:"Spacing",ruleIgnoreTypes:[g.yaml,g.code,g.math,g.inlineMath,g.wikiLink,g.link]})}get OptionsClass(){return Fc}apply(n,t){return Qp(n)}get optionBuilders(){return[]}};ta=L([y.register],ta);var na=class{constructor(){this.defaultEscapeCharacter='"';this.tryToEscapeSingleLineArrays=!1}};L([y.noSettingControl()],na.prototype,"defaultEscapeCharacter",2);var ni=class extends y{constructor(){super({nameKey:"rules.escape-yaml-special-characters.name",descriptionKey:"rules.escape-yaml-special-characters.description",type:"YAML",hasSpecialExecutionOrder:!0})}get OptionsClass(){return na}apply(n,t){return he(n,i=>{let r=i.split(` +`),a=r.length;if(a<1)return i;for(let o=0;o=s.length,u=s.startsWith("-"),d=u&&s.length<2;if(c&&d)continue;let m=1;if(!u)m+=l;else if(l!==-1&&o+1{s.createEl("button",{text:x("cancel-button-text")}).addEventListener("click",()=>{a(),this.close()});let l=s.createEl("button",{attr:{type:"submit"},cls:"mod-cta",text:x("ok")});l.addEventListener("click",()=>{this.close(),r()}),setTimeout(()=>{l.focus()},50)})}};var ys=class{};L([y.noSettingControl()],ys.prototype,"fileName",2);var ia=class extends y{constructor(){super({nameKey:"rules.file-name-heading.name",descriptionKey:"rules.file-name-heading.description",type:"Heading",ruleIgnoreTypes:[g.code,g.math,g.yaml,g.link,g.wikiLink,g.tag],disableConflictingOptions(n,t){let i=lt["header-increment"],r=i.options[0],a=i.options[1];n&&r.getValue()&&new Dt(t,"rules.file-name-heading.name","rules.header-increment.start-at-h2.name",()=>{a.setValue(!1)},()=>{lt["file-name-heading"].options[0].setValue(!1)}).open()}})}get OptionsClass(){return ys}apply(n,t){if(n.match(/^#\s.*/m))return n;let r=t.fileName,a=n.indexOf(` +---`);a=a==-1||!n.startsWith(`--- +`)?0:a+5;let o=`# ${r} +`;return n.length{for(let r of t.forceYamlEscape){let a=ue(i,r);if(a!=null){if(a.includes(` +`)||a.startsWith(" [")||Ni(a))continue;a=xt(a,t.defaultEscapeCharacter,!0),i=ae(i,r," "+a)}}return i})}get optionBuilders(){return[new pe({OptionsClass:aa,nameKey:"rules.force-yaml-escape.force-yaml-escape-keys.name",descriptionKey:"rules.force-yaml-escape.force-yaml-escape-keys.description",optionsKey:"forceYamlEscape"})]}};ii=L([y.register],ii);var Bc=class{},ri=class extends y{constructor(){super({nameKey:"rules.format-tags-in-yaml.name",descriptionKey:"rules.format-tags-in-yaml.description",type:"YAML",hasSpecialExecutionOrder:!0})}get OptionsClass(){return Bc}apply(n,t){return he(n,i=>i.replace(new RegExp(`^(${Dr}|${sc}):[ \\t]*(\\S.*|(?:(?:\\n *- \\S.*)|((?:\\n *- *))*|(\\n([ \\t]+[^\\n]*))*)*)\\n`,"m"),function(r){return r.replaceAll("#","")}))}get optionBuilders(){return[]}};ri=L([y.register],ri);var ct=class{constructor(){this.aliasArrayStyle="single-line";this.formatAliasKey=!0;this.tagArrayStyle="single-line";this.formatTagKey=!0;this.defaultArrayStyle="single-line";this.formatArrayKeys=!0;this.forceSingleLineArrayStyle=[];this.forceMultiLineArrayStyle=[];this.defaultEscapeCharacter='"';this.removeUnnecessaryEscapeCharsForMultiLineArrays=!1}};L([y.noSettingControl()],ct.prototype,"aliasArrayStyle",2),L([y.noSettingControl()],ct.prototype,"tagArrayStyle",2),L([y.noSettingControl()],ct.prototype,"defaultEscapeCharacter",2),L([y.noSettingControl()],ct.prototype,"removeUnnecessaryEscapeCharsForMultiLineArrays",2);var oa=class extends y{constructor(){super({nameKey:"rules.format-yaml-array.name",descriptionKey:"rules.format-yaml-array.description",type:"YAML"})}get OptionsClass(){return ct}apply(n,t){return he(n,i=>{let r=st(i.replace(`--- +`,"").replace(` +---`,""));if(!r)return i;for(let a of At)if(t.formatAliasKey&&Object.keys(r).includes(a)){i=ae(i,a,be(gn(Re(ue(i,a))),t.aliasArrayStyle,t.defaultEscapeCharacter,t.removeUnnecessaryEscapeCharsForMultiLineArrays,!0));break}for(let a of wt)if(t.formatTagKey&&Object.keys(r).includes(a)){i=ae(i,a,be(fn(Re(ue(i,a))),t.tagArrayStyle,t.defaultEscapeCharacter,t.removeUnnecessaryEscapeCharsForMultiLineArrays));break}if(t.formatArrayKeys){let a=[...At,...wt,...t.forceMultiLineArrayStyle,...t.forceSingleLineArrayStyle];for(let o of Object.keys(r))a.includes(o)||!Array.isArray(r[o])||r[o].length!==0&&typeof r[o][0]=="object"&&r[o][0]!==null||(i=ae(i,o,be(Re(ue(i,o)),t.defaultArrayStyle,t.defaultEscapeCharacter,t.removeUnnecessaryEscapeCharsForMultiLineArrays)))}for(let a of t.forceSingleLineArrayStyle)Object.keys(r).includes(a)&&(i=ae(i,a,be(Re(ue(i,a)),"single-line",t.defaultEscapeCharacter,t.removeUnnecessaryEscapeCharsForMultiLineArrays)));for(let a of t.forceMultiLineArrayStyle)Object.keys(r).includes(a)&&(i=ae(i,a,be(Re(ue(i,a)),"multi-line",t.defaultEscapeCharacter,t.removeUnnecessaryEscapeCharsForMultiLineArrays)));return i})}get optionBuilders(){return[new q({OptionsClass:ct,nameKey:"rules.format-yaml-array.alias-key.name",descriptionKey:"rules.format-yaml-array.alias-key.description",optionsKey:"formatAliasKey"}),new q({OptionsClass:ct,nameKey:"rules.format-yaml-array.tag-key.name",descriptionKey:"rules.format-yaml-array.tag-key.description",optionsKey:"formatTagKey"}),new J({OptionsClass:ct,nameKey:"rules.format-yaml-array.default-array-style.name",descriptionKey:"rules.format-yaml-array.default-array-style.description",optionsKey:"defaultArrayStyle",records:[{value:"multi-line",description:"```key:\\n - value```"},{value:"single-line",description:"```key: [value]```"}]}),new q({OptionsClass:ct,nameKey:"rules.format-yaml-array.default-array-keys.name",descriptionKey:"rules.format-yaml-array.default-array-keys.description",optionsKey:"formatArrayKeys"}),new pe({OptionsClass:ct,nameKey:"rules.format-yaml-array.force-single-line-array-style.name",descriptionKey:"rules.format-yaml-array.force-single-line-array-style.description",optionsKey:"forceSingleLineArrayStyle"}),new pe({OptionsClass:ct,nameKey:"rules.format-yaml-array.force-multi-line-array-style.name",descriptionKey:"rules.format-yaml-array.force-multi-line-array-style.description",optionsKey:"forceMultiLineArrayStyle"})]}};oa=L([y.register],oa);var bs=class{constructor(){this.startAtH2=!1}},sa=class extends y{constructor(){super({nameKey:"rules.header-increment.name",descriptionKey:"rules.header-increment.description",type:"Heading",ruleIgnoreTypes:[g.code,g.math,g.yaml,g.link,g.wikiLink,g.tag]})}get OptionsClass(){return bs}apply(n,t){let i=0,r=t.startAtH2?2:1,a=[],o=[0,0,0,0,0,0],s=o.length;return n.replace(pn,(l,c="",u="",d="",m="",p="")=>{let f=u.length;if(f=f<=s?f:s,o[f-1]>=0&&f=b;h--)o[h]=0}if(o[f-1]<=0){let b=i,h=a.length+r;h=h<=s?h:s;for(let k=b;k{i.setValue(!1)},()=>{lt["header-increment"].options[1].setValue(!1)}).open()}})]}};sa=L([y.register],sa);var ca=class{constructor(){this.bottom=!0;this.emptyLineAfterYaml=!0}},la=class extends y{constructor(){super({nameKey:"rules.heading-blank-lines.name",descriptionKey:"rules.heading-blank-lines.description",type:"Spacing",ruleIgnoreTypes:[g.code,g.math,g.yaml,g.link,g.wikiLink]})}get OptionsClass(){return ca}apply(n,t){return t.bottom?(n=n.replace(/^(#+\s.*)/gm,` + +$1 + +`),n=n.replace(/\n+(#+\s.*)/g,` + +$1`),n=n.replace(/(^#+\s.*)\n+/gm,`$1 + +`)):n=n.replace(/^([^#\n][^\n]+)\n+(#+\s.*)/gm,`$1 + +$2`),n=n.replace(/^\n+(#+\s.*)/,"$1"),n=n.replace(/(#+\s.*)\n+$/,"$1"),t.emptyLineAfterYaml||(n=n.replace(new RegExp("("+Ne.source+")\\n+(#+\\s.*)"),`$1 +$5`)),n}get optionBuilders(){return[new q({OptionsClass:ca,nameKey:"rules.heading-blank-lines.bottom.name",descriptionKey:"rules.heading-blank-lines.bottom.description",optionsKey:"bottom"}),new q({OptionsClass:ca,nameKey:"rules.heading-blank-lines.empty-line-after-yaml.name",descriptionKey:"rules.heading-blank-lines.empty-line-after-yaml.description",optionsKey:"emptyLineAfterYaml"})]}};la=L([y.register],la);var Dc=class{},ua=class extends y{constructor(){super({nameKey:"rules.headings-start-line.name",descriptionKey:"rules.headings-start-line.description",type:"Heading",ruleIgnoreTypes:[g.code,g.math,g.yaml]})}get OptionsClass(){return Dc}apply(n,t){return n.replaceAll(pn,i=>i.trimStart())}get optionBuilders(){return[]}};ua=L([y.register],ua);var vs=class{constructor(){this.textToInsert=["aliases: ","tags: "]}},da=class extends y{constructor(){super({nameKey:"rules.insert-yaml-attributes.name",descriptionKey:"rules.insert-yaml-attributes.description",type:"YAML"})}get OptionsClass(){return vs}apply(n,t){return n=Rt(n),he(n,i=>{let r=t.textToInsert.reverse(),a=st(i.match(Ne)[1]);for(let o of r){let s=o.split(":")[0];Object.prototype.hasOwnProperty.call(a,s)||(i=i.replace(/^---\n/,Je(`--- +${o} +`)))}return i})}get optionBuilders(){return[new pe({OptionsClass:vs,nameKey:"rules.insert-yaml-attributes.text-to-insert.name",descriptionKey:"rules.insert-yaml-attributes.text-to-insert.description",optionsKey:"textToInsert"})]}};da=L([y.register],da);var Kc=class{},pa=class extends y{constructor(){super({nameKey:"rules.line-break-at-document-end.name",descriptionKey:"rules.line-break-at-document-end.description",type:"Spacing"})}get OptionsClass(){return Kc}apply(n,t){return n.length===0||(n=n.replace(/\n+$/g,""),n+=` +`),n}get optionBuilders(){return[]}};pa=L([y.register],pa);var zc=class{},ma=class extends y{constructor(){super({nameKey:"rules.move-footnotes-to-the-bottom.name",descriptionKey:"rules.move-footnotes-to-the-bottom.description",type:"Footnote",ruleIgnoreTypes:[g.code,g.inlineCode,g.math,g.yaml]})}get OptionsClass(){return zc}apply(n,t){return bp(n)}get optionBuilders(){return[]}};ma=L([y.register],ma);var ks=class{constructor(){this.minimumNumberOfDollarSignsToBeAMathBlock=2}};L([y.noSettingControl()],ks.prototype,"minimumNumberOfDollarSignsToBeAMathBlock",2);var ai=class extends y{constructor(){super({nameKey:"rules.move-math-block-indicators-to-their-own-line.name",descriptionKey:"rules.move-math-block-indicators-to-their-own-line.description",type:"Spacing",ruleIgnoreTypes:[g.code,g.inlineCode],hasSpecialExecutionOrder:!0})}get OptionsClass(){return ks}apply(n,t){return Ip(n,t.minimumNumberOfDollarSignsToBeAMathBlock)}get optionBuilders(){return[]}};ai=L([y.register],ai);var Ln=class{constructor(){this.tagArrayStyle="single-line";this.howToHandleExistingTags="Nothing";this.tagsToIgnore=[];this.defaultEscapeCharacter='"';this.removeUnnecessaryEscapeCharsForMultiLineArrays=!1}};L([y.noSettingControl()],Ln.prototype,"tagArrayStyle",2),L([y.noSettingControl()],Ln.prototype,"defaultEscapeCharacter",2),L([y.noSettingControl()],Ln.prototype,"removeUnnecessaryEscapeCharsForMultiLineArrays",2);var fa=class extends y{constructor(){super({nameKey:"rules.move-tags-to-yaml.name",descriptionKey:"rules.move-tags-to-yaml.description",type:"YAML",ruleIgnoreTypes:[g.code,g.inlineCode,g.math,g.html,g.wikiLink,g.link]})}get OptionsClass(){return Ln}apply(n,t){let i;return ke([g.yaml],n,r=>(i=Jp(r),r)),i.length===0||(n=Rt(n),n=he(n,r=>{r=r.replace(`--- +`,"").replace("---","");let a=[],o=Dr;for(let c of wt){let u=ue(r,c);if(u!=null){a=fn(Re(u)),o=c;break}}let s=new Set;if(typeof a=="string")s.add(a),a=[a];else if(a!=null)for(let c of a)s.add(c);else a=[];for(let c of i){let u=c.trim().substring(1);!s.has(u)&&!t.tagsToIgnore.includes(u)&&(s.add(u),a.push(u))}return`--- +${ae(r,o,be(a,t.tagArrayStyle,t.defaultEscapeCharacter,t.removeUnnecessaryEscapeCharsForMultiLineArrays))}---`}),n=ke([g.yaml],n,r=>(t.howToHandleExistingTags!=="Nothing"&&(r=r.replace(Fr,a=>{let o=a.indexOf("#"),s=a.substring(o+1);return t.tagsToIgnore.includes(s)?a:t.howToHandleExistingTags==="Remove hashtag"?a.substring(0,o)+s:""})),r)),n=n.replace(/(\n---)( |\t)+/,"$1")),n}get optionBuilders(){return[new J({OptionsClass:Ln,nameKey:"rules.move-tags-to-yaml.how-to-handle-existing-tags.name",descriptionKey:"rules.move-tags-to-yaml.how-to-handle-existing-tags.description",optionsKey:"howToHandleExistingTags",records:[{value:"Nothing",description:"Leaves tags in the body of the file alone"},{value:"Remove hashtag",description:"Removes `#` from tags in content body after moving them to the YAML frontmatter"},{value:"Remove whole tag",description:"Removes the whole tag in content body after moving them to the YAML frontmatter. _Note that this removes the first space prior to the tag as well_"}]}),new pe({OptionsClass:Ln,nameKey:"rules.move-tags-to-yaml.tags-to-ignore.name",descriptionKey:"rules.move-tags-to-yaml.tags-to-ignore.description",optionsKey:"tagsToIgnore"})]}};fa=L([y.register],fa);var As=class{constructor(){this.noBareURIs=!1}},ws="'\"\u2018\u2019\u201C\u201D`[]",Bk=["http","ftp","https","smtp"],ga=class extends y{constructor(){super({nameKey:"rules.no-bare-urls.name",descriptionKey:"rules.no-bare-urls.description",type:"Content",ruleIgnoreTypes:[g.code,g.math,g.yaml,g.link,g.wikiLink,g.tag,g.image,g.inlineCode,g.anchorTag,g.html]})}get OptionsClass(){return As}apply(n,t){let i=n.match(zn);if(i&&(n=this.handleMatches(n,i,!1)),t.noBareURIs){let r=n.match(Hp);r&&(n=this.handleMatches(n,r,!0))}return n}handleMatches(n,t,i){let r=0,a=t.length;for(let o=0;o"&&(s=s.substring(0,s.length-1),c--);let u=l===0?void 0:n.charAt(l-1),d=c>=n.length?void 0:n.charAt(c),m=sn(s,"(");if(m!=0&&m!=sn(s,")")&&d==")"?(s+=d,c++,d=c>=n.length?void 0:n.charAt(c)):m==0&&s.endsWith(")")&&(d=")",c--,s=s.substring(0,s.length-1)),this.skipMatch(u,d,s,i)){r=l+s.length;continue}if(u!=null&&u==="<"&&d!=null&&d===">"){let p=l-1;for(;p>0&&n.charAt(p-1)==="<";)p--;let f=c;for(;f";)f++;n=le(n,p,f+1,"<"+s+">"),r=l+s.length;continue}n=le(n,l,l+s.length,"<"+s+">"),r=l+s.length+2}return n}skipMatch(n,t,i,r){let a=n!=null&&ws.includes(n)||ws.includes(i.charAt(0)),o=t!=null&&ws.includes(t)||ws.includes(i.charAt(i.length-1));return a&&o?!0:r?Bk.includes(i.substring(0,i.indexOf(":"))):!1}get optionBuilders(){return[new q({OptionsClass:As,nameKey:"rules.no-bare-urls.no-bare-uris.name",descriptionKey:"rules.no-bare-urls.no-bare-uris.description",optionsKey:"noBareURIs"})]}};ga=L([y.register],ga);var Qi=class{constructor(){this.numberStyle="ascending";this.listEndStyle="."}},ha=class extends y{constructor(){super({nameKey:"rules.ordered-list-style.name",descriptionKey:"rules.ordered-list-style.description",type:"Content",ruleIgnoreTypes:[g.code,g.math,g.yaml,g.tag]})}get OptionsClass(){return Qi}apply(n,t){return Op(n,t.numberStyle,t.listEndStyle,t.preserveStart)}get optionBuilders(){return[new J({OptionsClass:Qi,nameKey:"rules.ordered-list-style.number-style.name",descriptionKey:"rules.ordered-list-style.number-style.description",optionsKey:"numberStyle",records:[{value:"ascending",description:"Makes sure ordered list items are ascending (i.e. 1, 2, 3, etc.)"},{value:"lazy",description:"Makes sure ordered list item indicators all are the same"},{value:"preserve",description:"Preserves ordered list item indicators as they are"}]}),new J({OptionsClass:Qi,nameKey:"rules.ordered-list-style.list-end-style.name",descriptionKey:"rules.ordered-list-style.list-end-style.description",optionsKey:"listEndStyle",records:[{value:".",description:"Makes sure ordered list items indicators end in '.' (i.e `1.`)"},{value:")",description:"Makes sure ordered list item indicators end in ')' (i.e. `1)`)"}]}),new q({OptionsClass:Qi,nameKey:"rules.ordered-list-style.preserve-start.name",descriptionKey:"rules.ordered-list-style.preserve-start.description",optionsKey:"preserveStart"})]}};ha=L([y.register],ha);var Nc=class{},ya=class extends y{constructor(){super({nameKey:"rules.paragraph-blank-lines.name",descriptionKey:"rules.paragraph-blank-lines.description",type:"Spacing",ruleIgnoreTypes:[g.obsidianMultiLineComments,g.yaml,g.table],disableConflictingOptions(n,t){let i=lt["two-spaces-between-lines-with-content"].options[0];n&&i.getValue()&&new Dt(t,"rules.paragraph-blank-lines.name","rules.two-spaces-between-lines-with-content.name",()=>{i.setValue(!1)},()=>{lt["paragraph-blank-lines"].options[0].setValue(!1)}).open()}})}get OptionsClass(){return Nc}apply(n,t){return wp(n)}get optionBuilders(){return[]}};ya=L([y.register],ya);var ba=class{};L([y.noSettingControl()],ba.prototype,"lineContent",2),L([y.noSettingControl()],ba.prototype,"selectedText",2);var oi=class extends y{constructor(){super({nameKey:"rules.prevent-double-checklist-indicator-on-paste.name",descriptionKey:"rules.prevent-double-checklist-indicator-on-paste.description",type:"Paste"})}get OptionsClass(){return ba}apply(n,t){let i=Gp.test(t.lineContent),r=Po.test(n),a=Po.test(t.selectedText);return!i||!r||a?n:n.replace(Po,"")}get optionBuilders(){return[]}};oi=L([y.register],oi);var va=class{};L([y.noSettingControl()],va.prototype,"lineContent",2),L([y.noSettingControl()],va.prototype,"selectedText",2);var si=class extends y{constructor(){super({nameKey:"rules.prevent-double-list-item-indicator-on-paste.name",descriptionKey:"rules.prevent-double-list-item-indicator-on-paste.description",type:"Paste"})}get OptionsClass(){return va}apply(n,t){let i=new RegExp(`^${Br}[*+-] `),r=/^\s*[*+-] /,a=i.test(t.lineContent),o=i.test(t.selectedText),s=r.test(n);return o||!a||!s?n:n.replace(r,"")}get optionBuilders(){return[]}};si=L([y.register],si);var Yc=class{},li=class extends y{constructor(){super({nameKey:"rules.proper-ellipsis-on-paste.name",descriptionKey:"rules.proper-ellipsis-on-paste.description",type:"Paste"})}get OptionsClass(){return Yc}apply(n,t){return n.replaceAll(_o,"\u2026")}get optionBuilders(){return[]}};li=L([y.register],li);var _c=class{},ka=class extends y{constructor(){super({nameKey:"rules.proper-ellipsis.name",descriptionKey:"rules.proper-ellipsis.description",type:"Content"})}get OptionsClass(){return _c}apply(n,t){return ke([g.code,g.math,g.yaml,g.link,g.wikiLink,g.tag,g.image],n,i=>i.replaceAll(_o,"\u2026"))}get optionBuilders(){return[]}};ka=L([y.register],ka);var ci=class{constructor(){this.singleQuoteStyleEnabled=!0;this.singleQuoteStyle="''";this.doubleQuoteStyleEnabled=!0;this.doubleQuoteStyle='""'}},wa=class extends y{constructor(){super({nameKey:"rules.quote-style.name",descriptionKey:"rules.quote-style.description",type:"Content",ruleIgnoreTypes:[g.code,g.inlineCode,g.math,g.yaml,g.math,g.inlineMath,g.html,g.link,g.wikiLink,g.templaterCommand,g.image]})}get OptionsClass(){return ci}apply(n,t){let i=n;return t.doubleQuoteStyleEnabled&&(t.doubleQuoteStyle==='""'?i=this.convertSmartDoubleQuotesToStraightQuotes(i):i=this.convertStraightQuoteToSmartQuote(i,'"',"\u201C\u201D"[0],"\u201C\u201D"[1],!1)),t.singleQuoteStyleEnabled&&(t.singleQuoteStyle==="''"?i=this.convertSmartSingleQuotesToStraightQuotes(i):i=this.convertStraightQuoteToSmartQuote(i,"'","\u2018\u2019"[0],"\u2018\u2019"[1],!0)),i}convertSmartSingleQuotesToStraightQuotes(n){return n.replace(jp,"'")}convertSmartDoubleQuotesToStraightQuotes(n){return n.replace(Vp,'"')}convertStraightQuoteToSmartQuote(n,t,i,r,a){let o=Md(t,n);if(o.length===0)return n;let s=n.length-1,l,c="",u="",d=!1,m=!1,p=!1,f=!1,b=!1,h="";for(let k of o)c=k==0?"":n.charAt(k-1),u=k===s?"":n.charAt(k+1),d=oc.test(c),m=oc.test(u),b=d&&m,p=c!=""&&c.trim()==="",f=u!=""&&u.trim()==="",b&&a?l=r:f&&!p?(l=r,h=l):p&&!f?(l=i,h=l):(h===""||h===r?l=i:l=r,h=l),n=le(n,k,k+1,l);return n}get optionBuilders(){return[new q({OptionsClass:ci,nameKey:"rules.quote-style.single-quote-enabled.name",descriptionKey:"rules.quote-style.single-quote-enabled.description",optionsKey:"singleQuoteStyleEnabled"}),new J({OptionsClass:ci,nameKey:"rules.quote-style.single-quote-style.name",descriptionKey:"rules.quote-style.single-quote-style.description",optionsKey:"singleQuoteStyle",records:[{value:"''",description:`Uses "'" instead of smart single quotes`},{value:"\u2018\u2019",description:'Uses "\u2018" and "\u2019" instead of straight single quotes'}]}),new q({OptionsClass:ci,nameKey:"rules.quote-style.double-quote-enabled.name",descriptionKey:"rules.quote-style.double-quote-enabled.description",optionsKey:"doubleQuoteStyleEnabled"}),new J({OptionsClass:ci,nameKey:"rules.quote-style.double-quote-style.name",descriptionKey:"rules.quote-style.double-quote-style.description",optionsKey:"doubleQuoteStyle",records:[{value:'""',description:`Uses '"' instead of smart double quotes`},{value:"\u201C\u201D",description:"Uses '\u201C' and '\u201D' instead of straight double quotes"}]})]}};wa=L([y.register],wa);var Pc=class{},Aa=class extends y{constructor(){super({nameKey:"rules.re-index-footnotes.name",descriptionKey:"rules.re-index-footnotes.description",type:"Footnote",ruleIgnoreTypes:[g.code,g.inlineCode,g.math,g.yaml,g.tag]})}get OptionsClass(){return Pc}apply(n,t){return vp(n)}get optionBuilders(){return[]}};Aa=L([y.register],Aa);var Hc=class{},xa=class extends y{constructor(){super({nameKey:"rules.remove-consecutive-list-markers.name",descriptionKey:"rules.remove-consecutive-list-markers.description",type:"Content",ruleIgnoreTypes:[g.code,g.math,g.yaml,g.link,g.wikiLink,g.tag]})}get OptionsClass(){return Hc}apply(n,t){return n.replace(/^([ |\t]*)- - \b/gm,"$1- ")}get optionBuilders(){return[]}};xa=L([y.register],xa);var qc=class{},La=class extends y{constructor(){super({nameKey:"rules.remove-empty-lines-between-list-markers-and-checklists.name",descriptionKey:"rules.remove-empty-lines-between-list-markers-and-checklists.description",type:"Spacing",ruleIgnoreTypes:[g.code,g.math,g.yaml,g.link,g.wikiLink,g.tag,g.thematicBreak]});this.replaceEmptyLinesBetweenList=function(t,i){let r=new RegExp(`^${i} +{2,}${i}$`,"gm"),a,o=t;do a=o.match(r),o=o.replaceAll(r,`$1 +$4`);while(a);return o}}get OptionsClass(){return qc}apply(t,i){let r=`(( |\\t)*- ${Nn}( |\\t)+.+)`;t=this.replaceEmptyLinesBetweenList(t,r),t=this.replaceEmptyLinesBetweenList(t,"(( |\\t)*\\d+\\.( |\\t)+.+)"),t=this.replaceEmptyLinesBetweenList(t,"(( |\\t)*\\+( |\\t)+.+)");let s=`(( |\\t)*-(?! ${Nn})( |\\t)+.+)`;return t=this.replaceEmptyLinesBetweenList(t,s),this.replaceEmptyLinesBetweenList(t,"(( |\\t)*\\*( |\\t)+.+)")}get optionBuilders(){return[]}};La=L([y.register],La);var Uc=class{},Sa=class extends y{constructor(){super({nameKey:"rules.remove-empty-list-markers.name",descriptionKey:"rules.remove-empty-list-markers.description",type:"Content",ruleIgnoreTypes:[g.code,g.math,g.yaml,g.link,g.wikiLink,g.tag]})}get OptionsClass(){return Uc}apply(n,t){let i=new RegExp(`^${Br}(-|\\*|\\+|\\d+[.)]|- (\\[(.)\\]))\\s*?$`,"gm");return n=n.replace(new RegExp(i.source+"\\n","gm"),""),n=n.replace(new RegExp("\\n"+i.source,"gm"),""),n.replace(i,"")}get optionBuilders(){return[]}};Sa=L([y.register],Sa);var Wc=class{},Ea=class extends y{constructor(){super({nameKey:"rules.remove-hyphenated-line-breaks.name",descriptionKey:"rules.remove-hyphenated-line-breaks.description",type:"Content",ruleIgnoreTypes:[g.code,g.math,g.yaml,g.link,g.wikiLink,g.tag]})}get OptionsClass(){return Wc}apply(n,t){return n.replace(/\b[-‐] \b/g,"")}get optionBuilders(){return[]}};Ea=L([y.register],Ea);var Vc=class{},ui=class extends y{constructor(){super({nameKey:"rules.remove-hyphens-on-paste.name",descriptionKey:"rules.remove-hyphens-on-paste.description",type:"Paste"})}get OptionsClass(){return Vc}apply(n,t){return n.replace(/([^\s-])[-‐]\s+\n?(?=\w)/g,"$1")}get optionBuilders(){return[]}};ui=L([y.register],ui);var jc=class{},di=class extends y{constructor(){super({nameKey:"rules.remove-leading-or-trailing-whitespace-on-paste.name",descriptionKey:"rules.remove-leading-or-trailing-whitespace-on-paste.description",type:"Paste"})}get OptionsClass(){return jc}apply(n,t){return n.replace(/^[\n ]+|\s+$/g,"")}get optionBuilders(){return[]}};di=L([y.register],di);var $c=class{},pi=class extends y{constructor(){super({nameKey:"rules.remove-leftover-footnotes-from-quote-on-paste.name",descriptionKey:"rules.remove-leftover-footnotes-from-quote-on-paste.description",ruleIgnoreTypes:[g.wikiLink,g.link,g.image],type:"Paste"})}get OptionsClass(){return $c}apply(n,t){return n.replace(/(\D)[.,]\d+/g,"$1")}get optionBuilders(){return[]}};pi=L([y.register],pi);var Gc=class{},Ta=class extends y{constructor(){super({nameKey:"rules.remove-link-spacing.name",descriptionKey:"rules.remove-link-spacing.description",type:"Spacing"})}get OptionsClass(){return Gc}apply(n,t){return n=Ap(n),Zp(n)}get optionBuilders(){return[]}};Ta=L([y.register],Ta);var Zc=class{},mi=class extends y{constructor(){super({nameKey:"rules.remove-multiple-blank-lines-on-paste.name",descriptionKey:"rules.remove-multiple-blank-lines-on-paste.description",type:"Paste"})}get OptionsClass(){return Zc}apply(n,t){return n.replace(/\n{3,}/g,` + +`)}get optionBuilders(){return[]}};mi=L([y.register],mi);var Qc=class{},Ca=class extends y{constructor(){super({nameKey:"rules.remove-multiple-spaces.name",descriptionKey:"rules.remove-multiple-spaces.description",type:"Content",ruleIgnoreTypes:[g.code,g.inlineCode,g.math,g.inlineMath,g.yaml,g.link,g.wikiLink,g.tag,g.table]})}get OptionsClass(){return Qc}apply(n,t){return n=ke([g.list],n,i=>i.replace(/(?!^>)([^\s])( ){2,}([^\s])/gm,"$1 $3")),n=Di(n,i=>i.replace(/([^\s])( ){2,}([^\s])/gm,"$1 $3")),n}get optionBuilders(){return[]}};Ca=L([y.register],Ca);var fi=class{constructor(){this.includeFullwidthForms=!0;this.includeCJKSymbolsAndPunctuation=!0;this.includeDashes=!0;this.otherSymbols=""}},Oa=class extends y{constructor(){super({nameKey:"rules.remove-space-around-characters.name",descriptionKey:"rules.remove-space-around-characters.description",type:"Spacing",ruleIgnoreTypes:[g.code,g.inlineCode,g.math,g.yaml,g.link,g.wikiLink,g.tag]})}get OptionsClass(){return fi}apply(n,t){let i="";if(t.includeFullwidthForms&&(i+="\uFF01-\uFF5E"),t.includeCJKSymbolsAndPunctuation&&(i+="\u3000-\u303F"),t.includeDashes&&(i+="\u2013\u2014"),i+=mn(t.otherSymbols),!i)return n;let r=new RegExp(`([ ])+([${i}])`,"g"),a=new RegExp(`([${i}])([ ])+`,"g"),o=function(l){return l.replace(r,"$2").replace(a,"$1")},s=ke([g.list],n,o);return s=Di(s,o),s}get optionBuilders(){return[new q({nameKey:"rules.remove-space-around-characters.include-fullwidth-forms.name",descriptionKey:"rules.remove-space-around-characters.include-fullwidth-forms.description",OptionsClass:fi,optionsKey:"includeFullwidthForms"}),new q({nameKey:"rules.remove-space-around-characters.include-cjk-symbols-and-punctuation.name",descriptionKey:"rules.remove-space-around-characters.include-cjk-symbols-and-punctuation.description",OptionsClass:fi,optionsKey:"includeCJKSymbolsAndPunctuation"}),new q({nameKey:"rules.remove-space-around-characters.include-dashes.name",descriptionKey:"rules.remove-space-around-characters.include-dashes.description",OptionsClass:fi,optionsKey:"includeDashes"}),new we({nameKey:"rules.remove-space-around-characters.other-symbols.name",descriptionKey:"rules.remove-space-around-characters.other-symbols.description",OptionsClass:fi,optionsKey:"otherSymbols"})]}};Oa=L([y.register],Oa);var Ia=class{constructor(){this.charactersToRemoveSpacesBefore=",!?;:).\u2019\u201D]";this.charactersToRemoveSpacesAfter="\xBF\xA1\u2018\u201C(["}},Ma=class extends y{constructor(){super({nameKey:"rules.remove-space-before-or-after-characters.name",descriptionKey:"rules.remove-space-before-or-after-characters.description",type:"Spacing",ruleIgnoreTypes:[g.code,g.math,g.yaml,g.link,g.wikiLink,g.tag]})}get OptionsClass(){return Ia}apply(n,t){let i=mn(t.charactersToRemoveSpacesBefore),r=mn(t.charactersToRemoveSpacesAfter);if(!i&&!r)return n;let a=new RegExp(`([ ])+([${i}])`,"g"),o=new RegExp(`([${r}])([ ])+`,"g"),s=function(c){return c.replace(a,"$2").replace(o,"$1")},l=ke([g.list,g.html],n,s);return l=Di(l,s),l}get optionBuilders(){return[new we({nameKey:"rules.remove-space-before-or-after-characters.characters-to-remove-space-before.name",descriptionKey:"rules.remove-space-before-or-after-characters.characters-to-remove-space-before.description",OptionsClass:Ia,optionsKey:"charactersToRemoveSpacesBefore"}),new we({nameKey:"rules.remove-space-before-or-after-characters.characters-to-remove-space-after.name",descriptionKey:"rules.remove-space-before-or-after-characters.characters-to-remove-space-after.description",OptionsClass:Ia,optionsKey:"charactersToRemoveSpacesAfter"})]}};Ma=L([y.register],Ma);var xs=class{constructor(){this.punctuationToRemove=".,;:!\u3002\uFF0C\uFF1B\uFF1A\uFF01"}},Fa=class extends y{constructor(){super({nameKey:"rules.remove-trailing-punctuation-in-heading.name",descriptionKey:"rules.remove-trailing-punctuation-in-heading.description",type:"Heading",ruleIgnoreTypes:[g.code,g.math,g.yaml]})}get OptionsClass(){return xs}apply(n,t){return n.replaceAll(pn,(i,r="",a="",o="",s="",l="")=>{if(s==""||s.match(Wp))return i;let c=s.trimEnd(),u=c.charAt(c.length-1);return t.punctuationToRemove.includes(u)?r+a+o+s.substring(0,c.length-1)+s.substring(c.length)+l:i})}get optionBuilders(){return[new we({OptionsClass:xs,nameKey:"rules.remove-trailing-punctuation-in-heading.punctuation-to-remove.name",descriptionKey:"rules.remove-trailing-punctuation-in-heading.punctuation-to-remove.description",optionsKey:"punctuationToRemove"})]}};Fa=L([y.register],Fa);var Ls=class{constructor(){this.yamlKeysToRemove=[]}},Ra=class extends y{constructor(){super({nameKey:"rules.remove-yaml-keys.name",descriptionKey:"rules.remove-yaml-keys.description",type:"YAML"})}get OptionsClass(){return Ls}apply(n,t){let i=t.yamlKeysToRemove;if(i.length===0)return n;let r=zi(n);if(r===null)return n;let a=r;for(let o of i){let s=o.trim();s.endsWith(":")&&(s=s.substring(0,s.length-1)),a=Yn(a,s)}return n.replace(r,a)}get optionBuilders(){return[new pe({OptionsClass:Ls,nameKey:"rules.remove-yaml-keys.yaml-keys-to-remove.name",descriptionKey:"rules.remove-yaml-keys.yaml-keys-to-remove.description",optionsKey:"yamlKeysToRemove"})]}};Ra=L([y.register],Ra);var yt=class{constructor(){this.aliasArrayStyle="single-line";this.sortAliasKey=!0;this.tagArrayStyle="single-line";this.sortTagKey=!0;this.sortArrayKeys=!0;this.sortOrder="Ascending Alphabetical";this.ignoreSortArrayKeys=[];this.defaultEscapeCharacter='"';this.removeUnnecessaryEscapeCharsForMultiLineArrays=!1}};L([y.noSettingControl()],yt.prototype,"aliasArrayStyle",2),L([y.noSettingControl()],yt.prototype,"tagArrayStyle",2),L([y.noSettingControl()],yt.prototype,"defaultEscapeCharacter",2),L([y.noSettingControl()],yt.prototype,"removeUnnecessaryEscapeCharsForMultiLineArrays",2);var Ba=class extends y{constructor(){super({nameKey:"rules.sort-yaml-array-values.name",descriptionKey:"rules.sort-yaml-array-values.description",type:"YAML"})}get OptionsClass(){return yt}apply(n,t){return he(n,i=>{let r=st(i.replace(`--- +`,"").replace(` +---`,""));if(!r)return i;for(let a of At)if(t.sortAliasKey&&Object.keys(r).includes(a)){i=ae(i,a,be(gn(this.sortArray(Re(ue(i,a)),t.sortOrder)),t.aliasArrayStyle,t.defaultEscapeCharacter,t.removeUnnecessaryEscapeCharsForMultiLineArrays,!0));break}for(let a of wt)if(t.sortTagKey&&Object.keys(r).includes(a)){i=ae(i,a,be(fn(this.sortArray(Re(ue(i,a)),t.sortOrder)),t.tagArrayStyle,t.defaultEscapeCharacter,t.removeUnnecessaryEscapeCharsForMultiLineArrays));break}if(t.sortArrayKeys){let a=[...At,...wt,...t.ignoreSortArrayKeys];for(let o of Object.keys(r)){if(a.includes(o)||!Array.isArray(r[o])||r[o].length!==0&&typeof r[o][0]=="object"&&r[o][0]!==null)continue;let s=ue(i,o),l="single-line";s.includes(` +`)&&(l="multi-line");let c=this.sortArray(Re(s),t.sortOrder);i=ae(i,o,be(c,l,t.defaultEscapeCharacter,t.removeUnnecessaryEscapeCharsForMultiLineArrays))}}return i})}sortArray(n,t){return n==null||typeof n=="string"||n.length<=1||(n.sort(function(i,r){let a=i.toLowerCase().localeCompare(r.toLowerCase());return a===0?i.localeCompare(r):a}),t==="Ascending Alphabetical")||n.reverse(),n}get optionBuilders(){return[new q({OptionsClass:yt,nameKey:"rules.sort-yaml-array-values.sort-alias-key.name",descriptionKey:"rules.sort-yaml-array-values.sort-alias-key.description",optionsKey:"sortAliasKey"}),new q({OptionsClass:yt,nameKey:"rules.sort-yaml-array-values.sort-tag-key.name",descriptionKey:"rules.sort-yaml-array-values.sort-tag-key.description",optionsKey:"sortTagKey"}),new q({OptionsClass:yt,nameKey:"rules.sort-yaml-array-values.sort-array-keys.name",descriptionKey:"rules.sort-yaml-array-values.sort-array-keys.description",optionsKey:"sortArrayKeys"}),new pe({OptionsClass:yt,nameKey:"rules.sort-yaml-array-values.ignore-keys.name",descriptionKey:"rules.sort-yaml-array-values.ignore-keys.description",optionsKey:"ignoreSortArrayKeys"}),new J({OptionsClass:yt,nameKey:"rules.sort-yaml-array-values.sort-order.name",descriptionKey:"rules.sort-yaml-array-values.sort-order.description",optionsKey:"sortOrder",records:[{value:"Ascending Alphabetical",description:"Sorts the array values from a to z"},{value:"Descending Alphabetical",description:"Sorts the array values from z to a"}]})]}};Ba=L([y.register],Ba);var Jc=class{},Da=class extends y{constructor(){super({nameKey:"rules.space-after-list-markers.name",descriptionKey:"rules.space-after-list-markers.description",type:"Spacing",ruleIgnoreTypes:[g.code,g.math,g.yaml,g.link,g.wikiLink,g.tag]})}get OptionsClass(){return Jc}apply(n,t){return n=n.replace(/^(\s*\d+\.|\s*[-+*])[^\S\r\n]+/gm,"$1 "),n.replace(/^(\s*\d+\.|\s*[-+*]\s+\[[ xX]\])[^\S\r\n]+/gm,"$1 ")}get optionBuilders(){return[]}};Da=L([y.register],Da);var za=class{constructor(){this.englishNonLetterCharactersAfterCJKCharacters=`-+'"([\xA5$`;this.englishNonLetterCharactersBeforeCJKCharacters=`-+;:'"\xB0%$)]`}},Ka=class extends y{constructor(){super({nameKey:"rules.space-between-chinese-japanese-or-korean-and-english-or-numbers.name",descriptionKey:"rules.space-between-chinese-japanese-or-korean-and-english-or-numbers.description",type:"Spacing",ruleIgnoreTypes:[g.code,g.inlineCode,g.yaml,g.image,g.link,g.wikiLink,g.tag,g.math,g.inlineMath,g.html]})}get OptionsClass(){return za}apply(n,t){let i=this.buildHeadRegex(t.englishNonLetterCharactersAfterCJKCharacters),r=this.buildTailRegex(t.englishNonLetterCharactersBeforeCJKCharacters),a=`${g.link.placeholder}|${g.inlineMath.placeholder}|${g.inlineCode.placeholder}|${g.wikiLink.placeholder}`.replaceAll("{","\\{").replaceAll("}","\\}"),o=new RegExp(`(\\p{sc=Han}|\\p{sc=Katakana}|\\p{sc=Hiragana}|\\p{sc=Hangul})( *)(${a})`,"gmu"),s=new RegExp(`(${a})( *)(\\p{sc=Han}|\\p{sc=Katakana}|\\p{sc=Hiragana}|\\p{sc=Hangul})`,"gmu"),l=function(u){return u.replace(i,"$1 $3").replace(r,"$1 $3")},c=ke([g.italics,g.bold],n,l);return c=c.replace(o,"$1 $3").replace(s,"$1 $3"),c=xp(c,l),c=Lp(c,l),c}buildHeadRegex(n){n&&n!==""&&(n=n.replaceAll(/\s/g,""));let t="";return n&&n.length!=0&&(t=`|[${mn(n)}]`),new RegExp(`(\\p{sc=Han}|\\p{sc=Katakana}|\\p{sc=Hiragana}|\\p{sc=Hangul})( *)(\\[[^[]*\\]\\(.*\\)|\`[^\`]*\`|\\w+${t}|\\*[^*])`,"gmu")}buildTailRegex(n){n&&n!==""&&(n=n.replaceAll(/\s/g,""));let t="";return n&&n.length!=0&&(t=`|[${mn(n)}]`),new RegExp(`(\\[[^[]*\\]\\(.*\\)|\`[^\`]*\`|\\w+${t}|[^*]\\*)( *)(\\p{sc=Han}|\\p{sc=Katakana}|\\p{sc=Hiragana}|\\p{sc=Hangul})`,"gmu")}get optionBuilders(){return[new we({OptionsClass:za,nameKey:"rules.space-between-chinese-japanese-or-korean-and-english-or-numbers.english-symbols-punctuation-before.name",descriptionKey:"rules.space-between-chinese-japanese-or-korean-and-english-or-numbers.english-symbols-punctuation-before.description",optionsKey:"englishNonLetterCharactersBeforeCJKCharacters"}),new we({OptionsClass:za,nameKey:"rules.space-between-chinese-japanese-or-korean-and-english-or-numbers.english-symbols-punctuation-after.name",descriptionKey:"rules.space-between-chinese-japanese-or-korean-and-english-or-numbers.english-symbols-punctuation-after.description",optionsKey:"englishNonLetterCharactersAfterCJKCharacters"})]}};Ka=L([y.register],Ka);var Ss=class{constructor(){this.style="consistent"}},Na=class extends y{constructor(){super({nameKey:"rules.strong-style.name",descriptionKey:"rules.strong-style.description",type:"Content",ruleIgnoreTypes:[g.code,g.yaml,g.link,g.wikiLink,g.tag,g.math,g.inlineMath]})}get OptionsClass(){return Ss}apply(n,t){return Ko(n,t.style,"strong")}get optionBuilders(){return[new J({OptionsClass:Ss,nameKey:"rules.strong-style.style.name",descriptionKey:"rules.strong-style.style.description",optionsKey:"style",records:[{value:"consistent",description:"Makes sure the first instance of strong is the style that will be used throughout the document"},{value:"asterisk",description:"Makes sure ** is the strong indicator"},{value:"underscore",description:"Makes sure __ is the strong indicator"}]})]}};Na=L([y.register],Na);var Es=class{constructor(){this.twoSpaceLineBreak=!1}},gi=class extends y{constructor(){super({nameKey:"rules.trailing-spaces.name",descriptionKey:"rules.trailing-spaces.description",type:"Spacing",hasSpecialExecutionOrder:!0,ruleIgnoreTypes:[g.code,g.math,g.yaml,g.link,g.wikiLink,g.tag]})}get OptionsClass(){return Es}apply(n,t){return t.twoSpaceLineBreak?(n=n.replace(/(\S)[ \t]$/gm,"$1"),n=n.replace(/(\S)[ \t]{3,}$/gm,"$1"),n=n.replace(/(\S)( ?\t\t? ?)$/gm,"$1"),n):n.replace(/[ \t]+$/gm,"")}get optionBuilders(){return[new q({OptionsClass:Es,nameKey:"rules.trailing-spaces.twp-space-line-break.name",descriptionKey:"rules.trailing-spaces.twp-space-line-break.description",optionsKey:"twoSpaceLineBreak"})]}};gi=L([y.register],gi);var Ts=class{constructor(){this.lineBreakIndicator=" "}},Ya=class extends y{constructor(){super({nameKey:"rules.two-spaces-between-lines-with-content.name",descriptionKey:"rules.two-spaces-between-lines-with-content.description",type:"Content",ruleIgnoreTypes:[g.obsidianMultiLineComments,g.yaml,g.table],disableConflictingOptions(n,t){let i=lt["paragraph-blank-lines"].options[0];n&&i.getValue()&&new Dt(t,"rules.paragraph-blank-lines.name","rules.two-spaces-between-lines-with-content.name",()=>{i.setValue(!1)},()=>{lt["two-spaces-between-lines-with-content"].options[0].setValue(!1)}).open()}})}get OptionsClass(){return Ts}apply(n,t){return kp(n,t.lineBreakIndicator)}get optionBuilders(){return[new J({OptionsClass:Ts,nameKey:"rules.two-spaces-between-lines-with-content.line-break-indicator.name",descriptionKey:"rules.two-spaces-between-lines-with-content.line-break-indicator.description",optionsKey:"lineBreakIndicator",records:[{value:" ",description:" "},{value:"
    ",description:"
    "},{value:"
    ",description:"
    "},{value:"\\",description:"\\"}]})]}};Ya=L([y.register],Ya);var Cs=class{constructor(){this.listStyle="consistent"}},_a=class extends y{constructor(){super({nameKey:"rules.unordered-list-style.name",descriptionKey:"rules.unordered-list-style.description",type:"Content",ruleIgnoreTypes:[g.code,g.math,g.yaml,g.tag]})}get OptionsClass(){return Cs}apply(n,t){return Mp(n,t.listStyle)}get optionBuilders(){return[new J({OptionsClass:Cs,nameKey:"rules.unordered-list-style.list-style.name",descriptionKey:"rules.unordered-list-style.list-style.description",optionsKey:"listStyle",records:[{value:"consistent",description:"Makes sure unordered list items use a consistent list item indicator in the file which will be based on the first list item found"},{value:"-",description:"Makes sure unordered list items use `-` as their indicator"},{value:"*",description:"Makes sure unordered list items use `*` as their indicator"},{value:"+",description:"Makes sure unordered list items use `+` as their indicator"}]})]}};_a=L([y.register],_a);var Zt=class{constructor(){this.priorityKeysAtStartOfYaml=!0;this.yamlKeyPrioritySortOrder=[];this.yamlSortOrderForOtherKeys="None"}};L([y.noSettingControl()],Zt.prototype,"dateModifiedKey",2),L([y.noSettingControl()],Zt.prototype,"currentTimeFormatted",2),L([y.noSettingControl()],Zt.prototype,"yamlTimestampDateModifiedEnabled",2);var hi=class extends y{constructor(){super({nameKey:"rules.yaml-key-sort.name",descriptionKey:"rules.yaml-key-sort.description",type:"YAML",hasSpecialExecutionOrder:!0})}get OptionsClass(){return Zt}apply(n,t){let i=zi(n);if(i===null)return n;let r=i,a=t.priorityKeysAtStartOfYaml,o=t.yamlKeyPrioritySortOrder,s=0;for(let b of o)b=b.trimEnd(),b.endsWith(":")?o[s]=b.substring(0,b.length-1):b!=o[s]&&(o[s]=b),s++;let l=st(r),c=this.getYAMLKeysSorted(r,o,l),u=c.sortedYamlKeyValues;r=c.remainingYaml;let d=t.yamlSortOrderForOtherKeys;if(l==null)return this.getTextWithNewYamlFrontmatter(n,i,u,r,a,t.dateModifiedKey,t.currentTimeFormatted,t.yamlTimestampDateModifiedEnabled);let m=Object.keys(l),p;if(d==="Ascending Alphabetical")p=this.sortAlphabeticallyAsc;else if(d==="Descending Alphabetical")p=this.sortAlphabeticallyDesc;else return this.getTextWithNewYamlFrontmatter(n,i,u,r,a,t.dateModifiedKey,t.currentTimeFormatted,t.yamlTimestampDateModifiedEnabled);m=m.sort(p);let f=this.getYAMLKeysSorted(r,m,l);return this.getTextWithNewYamlFrontmatter(n,i,u,f.sortedYamlKeyValues,a,t.dateModifiedKey,t.currentTimeFormatted,t.yamlTimestampDateModifiedEnabled)}getYAMLKeysSorted(n,t,i){let r="";for(let a of t){if(!(a in i))continue;let o=ue(n,a,!1);o!==null&&(o.includes(` +`)?r+=`${a}:${o} +`:r+=`${a}: ${o} +`,n=Yn(n,a,!1))}return{remainingYaml:n,sortedYamlKeyValues:r}}updateDateModifiedIfYamlChanged(n,t,i,r){return n==t?t:ae(t,i," "+r)}getTextWithNewYamlFrontmatter(n,t,i,r,a,o,s,l){let c=`${r}${i}`;return a&&(c=`${i}${r}`),l&&(c=this.updateDateModifiedIfYamlChanged(t,c,o,s)),n.replace(t,c)}sortAlphabeticallyAsc(n,t){return n=n.toLowerCase(),t=t.toLowerCase(),nt?-1:t>n?1:0}get optionBuilders(){return[new pe({OptionsClass:Zt,nameKey:"rules.yaml-key-sort.yaml-key-priority-sort-order.name",descriptionKey:"rules.yaml-key-sort.yaml-key-priority-sort-order.description",optionsKey:"yamlKeyPrioritySortOrder"}),new q({OptionsClass:Zt,nameKey:"rules.yaml-key-sort.priority-keys-at-start-of-yaml.name",descriptionKey:"rules.yaml-key-sort.priority-keys-at-start-of-yaml.description",optionsKey:"priorityKeysAtStartOfYaml"}),new J({OptionsClass:Zt,nameKey:"rules.yaml-key-sort.yaml-sort-order-for-other-keys.name",descriptionKey:"rules.yaml-key-sort.yaml-sort-order-for-other-keys.description",optionsKey:"yamlSortOrderForOtherKeys",records:[{value:"None",description:"No sorting other than what is in the YAML Key Priority Sort Order text area"},{value:"Ascending Alphabetical",description:"Sorts the keys based on key value from a to z"},{value:"Descending Alphabetical",description:"Sorts the keys based on key value from z to a"}]})]}};hi=L([y.register],hi);var Ct=require("obsidian");var nu=Cn(qm());var Pa={ruleConfigs:{},lintOnSave:!1,recordLintOnSaveLogs:!1,displayChanged:!0,lintOnFileChange:!1,displayLintOnFileChangeNotice:!1,settingsConvertedToConfigKeyValues:!1,foldersToIgnore:[],filesToIgnore:[],linterLocale:"system-default",logLevel:"ERROR",lintCommands:[],customRegexes:[],commonStyles:{aliasArrayStyle:"single-line",tagArrayStyle:"single-line",minimumNumberOfDollarSignsToBeAMathBlock:2,escapeCharacter:'"',removeUnnecessaryEscapeCharsForMultiLineArrays:!1}};var Ke=class{constructor(){this.dateCreatedKey="date created";this.dateCreated=!0;this.dateCreatedSourceOfTruth="file system";this.dateModifiedSourceOfTruth="file system";this.format="dddd, MMMM Do YYYY, h:mm:ss a";this.dateModified=!0;this.dateModifiedKey="date modified";this.convertToUTC=!1;this.timestampUpdateOnFileContentUpdated="never";this.locale="en"}};L([y.noSettingControl()],Ke.prototype,"alreadyModified",2),L([y.noSettingControl()],Ke.prototype,"fileCreatedTime",2),L([y.noSettingControl()],Ke.prototype,"fileModifiedTime",2),L([y.noSettingControl()],Ke.prototype,"locale",2),L([y.noSettingControl()],Ke.prototype,"currentTime",2),L([y.noSettingControl()],Ke.prototype,"fileName",2);var Qt=class extends y{constructor(){super({nameKey:"rules.yaml-timestamp.name",descriptionKey:"rules.yaml-timestamp.description",type:"YAML",hasSpecialExecutionOrder:!0})}get OptionsClass(){return Ke}apply(n,t){let i=t.alreadyModified,r=Rt(n);return i=i||r!==n,t.format=t.format.trimEnd(),he(r,a=>{if(t.dateCreated){let o=!1;[a,o]=this.handleDateCreatedValue(a,t),i=i||o}return t.dateModified&&(a=this.handleDateModifiedValue(a,i,t)),a})}handleDateCreatedValue(n,t){let i=!1,r=` +${t.dateCreatedKey}: [^ +]+ +`,a=` +${t.dateCreatedKey}:[ ]* +`,o=new RegExp(a),s=new RegExp(r),l=(0,Ct.moment)(t.fileCreatedTime);l.locale(t.locale);let c=t.convertToUTC?l.utc().format(t.format):l.format(t.format),u=` +${t.dateCreatedKey}: ${c}`,d=s.test(n);if(!d&&o.test(n))n=n.replace(o,Je(u)+` +`),i=!0;else if(d){if(d){let m=this.getYAMLTimestampString(n,s,t.dateCreatedKey),p=(0,nu.default)(m);if(t.dateCreatedSourceOfTruth=="frontmatter"&&t.format!==p){let f=this.parseValueToCurrentFormatIfPossible(m,t.format,t.locale,t.convertToUTC);if(f==null)throw new Error(x("logs.invalid-date-format-error").replace("{DATE}",m).replace("{FILE_NAME}",t.fileName));let b=t.convertToUTC?f.utc().format(t.format):f.format(t.format);if(b!==m){let h=` +${t.dateCreatedKey}: ${b}`;n=n.replace(s,Je(h)+` +`),i=!0}}else if(t.dateCreatedSourceOfTruth!="frontmatter"){let f=(0,Ct.moment)(m,t.format,t.locale,!0);(f==null||!f.isValid())&&(n=n.replace(s,Je(u)+` +`),i=!0)}}}else{let m=n.indexOf(` +---`);n=Fn(n,m,` +${t.dateCreatedKey}: ${c}`),i=!0}return[n,i]}handleDateModifiedValue(n,t,i){let r=` +${i.dateModifiedKey}: [^ +]+ +`,a=` +${i.dateModifiedKey}:[ ]* +`,o=new RegExp(a),s=new RegExp(r),l=(0,Ct.moment)(i.fileModifiedTime);l.locale(i.locale);let c=i.convertToUTC?i.currentTime.utc().format(i.format):i.currentTime.format(i.format),u=` +${i.dateModifiedKey}: ${c}`,d=s.test(n);if(d){let m=(0,Ct.moment)(this.getYAMLTimestampString(n,s,i.dateModifiedKey),i.format,i.locale,!0);(t||m==null||!m.isValid()||i.dateModifiedSourceOfTruth!="user or Linter edits"&&this.getTimeDifferenceInSeconds(m,l,i)>5)&&(n=n.replace(s,Je(u)+` +`))}else if(o.test(n))n=n.replace(o,Je(u)+` +`);else if(!d){let m=n.indexOf(` +---`);n=Fn(n,m,u)}return n}parseValueToCurrentFormatIfPossible(n,t,i,r){if(n==null)return null;let a=r?Ct.moment.utc(n,t,i,!0):(0,Ct.moment)(n,t,i,!0);if(a!=null&&a.isValid())return a;let o=(0,nu.default)(n);if(o!=null){let s=r?Ct.moment.utc(n,o):(0,Ct.moment)(n,o);s.locale(i);let l=r?s.utc().format(t):s.format(t);return(0,Ct.moment)(l,t,i,!0)}return null}getYAMLTimestampString(n,t,i){return n.match(t)[0].replace(i+":","").trim()}getTimeDifferenceInSeconds(n,t,i){let r=(0,Ct.moment)(t.format(i.format),i.format,i.locale,!0);return Math.abs(n.diff(r,"seconds"))}get optionBuilders(){return[new q({OptionsClass:Ke,nameKey:"rules.yaml-timestamp.date-created.name",descriptionKey:"rules.yaml-timestamp.date-created.description",optionsKey:"dateCreated"}),new we({OptionsClass:Ke,nameKey:"rules.yaml-timestamp.date-created-key.name",descriptionKey:"rules.yaml-timestamp.date-created-key.description",optionsKey:"dateCreatedKey"}),new J({OptionsClass:Ke,nameKey:"rules.yaml-timestamp.date-created-source-of-truth.name",descriptionKey:"rules.yaml-timestamp.date-created-source-of-truth.description",optionsKey:"dateCreatedSourceOfTruth",records:[{value:"file system",description:"The file system date created value is used to set the value of date created in the frontmatter"},{value:"frontmatter",description:"When a value is present in the frontmatter for date created, this value is used as the value for the date created"}]}),new q({OptionsClass:Ke,nameKey:"rules.yaml-timestamp.date-modified.name",descriptionKey:"rules.yaml-timestamp.date-modified.description",optionsKey:"dateModified"}),new we({OptionsClass:Ke,nameKey:"rules.yaml-timestamp.date-modified-key.name",descriptionKey:"rules.yaml-timestamp.date-modified-key.description",optionsKey:"dateModifiedKey"}),new J({OptionsClass:Ke,nameKey:"rules.yaml-timestamp.date-modified-source-of-truth.name",descriptionKey:"rules.yaml-timestamp.date-modified-source-of-truth.description",optionsKey:"dateModifiedSourceOfTruth",records:[{value:"file system",description:"The file system date modified value is used to set the value of date modified in the frontmatter"},{value:"user or Linter edits",description:"When a value is present in the frontmatter for date modified, date modified is kept as is unless the Linter makes a change to a note or the user edits a note with the setting `{NAME}` set to something other than `{NEVER}`.".replace("{NAME}",x("rules.yaml-timestamp.update-on-file-contents-updated.name")).replace("{NEVER}",x("enums.never"))}]}),new ls({OptionsClass:Ke,nameKey:"rules.yaml-timestamp.format.name",descriptionKey:"rules.yaml-timestamp.format.description",optionsKey:"format"}),new q({OptionsClass:Ke,nameKey:"rules.yaml-timestamp.convert-to-utc.name",descriptionKey:"rules.yaml-timestamp.convert-to-utc.description",optionsKey:"convertToUTC"}),new J({OptionsClass:Ke,nameKey:"rules.yaml-timestamp.update-on-file-contents-updated.name",descriptionKey:"rules.yaml-timestamp.update-on-file-contents-updated.description",optionsKey:"timestampUpdateOnFileContentUpdated",records:[{value:"never",description:"never"},{value:"after 5 seconds",description:"after 5 seconds"},{value:"after 10 seconds",description:"after 10 seconds"},{value:"after 15 seconds",description:"after 15 seconds"},{value:"after 30 seconds",description:"after 30 seconds"},{value:"after 1 minute",description:"after 1 minute"}]})]}};Qt=L([y.register],Qt);var Ot=class{constructor(){this.preserveExistingAliasesSectionStyle=!0;this.keepAliasThatMatchesTheFilename=!1;this.useYamlKeyToKeepTrackOfOldFilenameOrHeading=!0;this.aliasHelperKey=cc;this.aliasArrayStyle="multi-line";this.defaultEscapeCharacter='"';this.removeUnnecessaryEscapeCharsForMultiLineArrays=!1}};L([y.noSettingControl()],Ot.prototype,"aliasArrayStyle",2),L([y.noSettingControl()],Ot.prototype,"fileName",2),L([y.noSettingControl()],Ot.prototype,"defaultEscapeCharacter",2),L([y.noSettingControl()],Ot.prototype,"removeUnnecessaryEscapeCharsForMultiLineArrays",2);var yi=class extends y{constructor(){super({nameKey:"rules.yaml-title-alias.name",descriptionKey:"rules.yaml-title-alias.description",type:"YAML",hasSpecialExecutionOrder:!0})}get OptionsClass(){return Ot}apply(n,t){n=Rt(n);let[i,r]=this.getTitleInfo(n,t.fileName,t.aliasArrayStyle,t.defaultEscapeCharacter),a=null,o=n.match(Ne)[1],s=!t.keepAliasThatMatchesTheFilename&&i===t.fileName,l=o.replace(`--- +`,"").replace(` +---`,""),c=st(o),u=t.aliasHelperKey??cc;u.endsWith(":")&&(u=u.substring(0,u.length-1)),a=c[u]??null,a!=null&&(a=a+"",a=xt(a,t.defaultEscapeCharacter,this.forceEscape(a,t.aliasArrayStyle)));let d=null,m=Object.keys(c);for(let p of At)if(m.includes(p)){d=p;break}if(d!=null){let p=ue(l,d),f="multi-line",b=p==="",h=!1;!p.includes(` +`)&&!(p==="[]"&&t.aliasArrayStyle==="multi-line")&&(p.match(/^\[.*\]/)===null?(f="single string to single-line",h=!0):f="single-line");let k=gn(Re(p)),A=this.getNewAliasValue(k,s,r,a);A===""?l=Yn(l,d):t.preserveExistingAliasesSectionStyle?!b&&(h&&r==A||!h||k==A)?l=ae(l,d,be(A,f,t.defaultEscapeCharacter,t.removeUnnecessaryEscapeCharsForMultiLineArrays,!0)):l=ae(l,d,be(A,t.aliasArrayStyle,t.defaultEscapeCharacter,t.removeUnnecessaryEscapeCharsForMultiLineArrays,!0)):l=ae(l,d,be(A,t.aliasArrayStyle,t.defaultEscapeCharacter,t.removeUnnecessaryEscapeCharsForMultiLineArrays,!0))}else s||(l=ae(l,lc,be(r,t.aliasArrayStyle,t.defaultEscapeCharacter,t.removeUnnecessaryEscapeCharsForMultiLineArrays,!0)));return!t.useYamlKeyToKeepTrackOfOldFilenameOrHeading||s?l=Yn(l,u):l=ae(l,u,` ${r}`),n=n.replace(`--- +${o}---`,`--- +${l}---`),n}getTitleInfo(n,t,i,r){let a=ke([g.code,g.math,g.yaml,g.tag],n,Ho);a=a||t;let o=xt(a,r,this.forceEscape(a,i));return[a,o]}forceEscape(n,t){return ko(n)||n.includes(",")&&(t==="single-line"||t==="single string to single-line"||t==="single string comma delimited")}getNewAliasValue(n,t,i,r){if(n==null)return t?"":i;if(typeof n=="string")t?n===i&&(n=""):r===n?n=i:n=[i,n];else if(r!==null){let a=n.indexOf(r);a===-1&&Ni(r)&&(a=n.indexOf(r.substring(1,r.length-1))),a!==-1?t?n.splice(a,1):n[a]=i:n=[i,...n]}else{let a=n.indexOf(i);a!==-1?t&&n.splice(a,1):t||(n=[i,...n])}return n===""||n.length===0?"":n}get optionBuilders(){return[new q({OptionsClass:Ot,nameKey:"rules.yaml-title-alias.preserve-existing-alias-section-style.name",descriptionKey:"rules.yaml-title-alias.preserve-existing-alias-section-style.description",optionsKey:"preserveExistingAliasesSectionStyle"}),new q({OptionsClass:Ot,nameKey:"rules.yaml-title-alias.keep-alias-that-matches-the-filename.name",descriptionKey:"rules.yaml-title-alias.keep-alias-that-matches-the-filename.description",optionsKey:"keepAliasThatMatchesTheFilename"}),new q({OptionsClass:Ot,nameKey:"rules.yaml-title-alias.use-yaml-key-to-keep-track-of-old-filename-or-heading.name",descriptionKey:"rules.yaml-title-alias.use-yaml-key-to-keep-track-of-old-filename-or-heading.description",optionsKey:"useYamlKeyToKeepTrackOfOldFilenameOrHeading"}),new we({OptionsClass:Ot,nameKey:"rules.yaml-title-alias.alias-helper-key.name",descriptionKey:"rules.yaml-title-alias.alias-helper-key.description",optionsKey:"aliasHelperKey"})]}};yi=L([y.register],yi);var bi=class{constructor(){this.defaultEscapeCharacter='"';this.titleKey="title";this.mode="first-h1-or-filename-if-h1-missing"}};L([y.noSettingControl()],bi.prototype,"fileName",2),L([y.noSettingControl()],bi.prototype,"defaultEscapeCharacter",2);var vi=class extends y{constructor(){super({nameKey:"rules.yaml-title.name",descriptionKey:"rules.yaml-title.description",type:"YAML",hasSpecialExecutionOrder:!0})}get OptionsClass(){return bi}apply(n,t){n=Rt(n);let i="";switch(t.mode){case"filename":i=t.fileName;break;case"first-h1":i=this.getFirstH1Header(n);break;default:i=this.getFirstH1Header(n),i=i||t.fileName}return i=xt(i,t.defaultEscapeCharacter),he(n,r=>{let a=` +${t.titleKey}.* +`,o=new RegExp(a);if(o.test(r))r=r.replace(o,Je(` +${t.titleKey}: ${i} +`));else{let s=r.indexOf(` +---`);r=Fn(r,s,` +${t.titleKey}: ${i}`)}return r})}getFirstH1Header(n){return ke([g.code,g.math,g.yaml,g.tag],n,Ho)}get optionBuilders(){return[new we({OptionsClass:bi,nameKey:"rules.yaml-title.title-key.name",descriptionKey:"rules.yaml-title.title-key.description",optionsKey:"titleKey"}),new J({OptionsClass:bi,nameKey:"rules.yaml-title.mode.name",descriptionKey:"rules.yaml-title.mode.description",optionsKey:"mode",records:[{value:"first-h1-or-filename-if-h1-missing",description:"Uses the first H1 in the file or the filename of the file if there is not H1"},{value:"filename",description:"Uses the filename as the title"},{value:"first-h1",description:"Uses the first H1 in the file as the title"}]})]}};vi=L([y.register],vi);var xA=` + + + + + + + + + + + +`,LA=` + + + + + + + + + + +`,SA=` + + + + + + + + + + + +`,EA=` + + + +`,TA=` + + + +`,CA=` + + + + +`,OA=` + + + + + + +`,MA=` + + + +`,IA=` + + + + +`,FA=` + + + +`,RA=` + + + + +`,BA=` + + +`,DA=` + + + + + + + + + +`,KA=` + + +`,zA=` + +`,Me={folder:{id:"lint-folder",source:LA},file:{id:"lint-file",source:xA},vault:{id:"lint-vault",source:SA},whitespace:{id:"lint-whitespace",source:EA},math:{id:"lint-math",source:TA},content:{id:"lint-content",source:CA},paste:{id:"lint-paste",source:OA},custom:{id:"lint-custom",source:MA},heading:{id:"lint-heading",source:IA},footer:{id:"lint-footer",source:FA},yaml:{id:"lint-yaml",source:RA},general:{id:"lint-general",source:BA},debug:{id:"lint-debug",source:DA},clipboard:{id:"linter-clipboard",source:KA},success:{id:"linter-success",source:zA}};var Xi=require("obsidian");var Fs=class{constructor(){this.disabledRules=[]}lintText(n){this.skipFile=!1;let t=n.oldText;if([this.disabledRules,this.skipFile]=as(t),this.skipFile)return t;In(x("logs.rule-running"));let i=x("logs.pre-rules");In(i);let r=this.runBeforeRegularRules(n);rn(i);let a=!1;for(let l of n.settings.ruleConfigs["auto-correct-common-misspellings"]["extra-auto-correct-files"]??[])if(l.filePath!=""){a=!0;break}let o=x("logs.disabled-text");for(let l of Bt){if(this.disabledRules.includes(l.alias)){nt(l.alias+" "+o);continue}else if(l.hasSpecialExecutionOrder||l.type==="Paste")continue;if(l.alias==="auto-correct-common-misspellings"&&a){let c=!1;for(let u of n.settings.ruleConfigs["auto-correct-common-misspellings"]["extra-auto-correct-files"]??[])if(u.filePath==n.fileInfo.path){c=!0;break}if(c){nt(l.alias+" "+o);continue}}[r]=An.applyIfEnabledBase(l,r,n.settings,{fileCreatedTime:n.fileInfo.createdAtFormatted,fileModifiedTime:n.fileInfo.modifiedAtFormatted,fileName:n.fileInfo.name,locale:n.momentLocale,minimumNumberOfDollarSignsToBeAMathBlock:n.settings.commonStyles.minimumNumberOfDollarSignsToBeAMathBlock,aliasArrayStyle:n.settings.commonStyles.aliasArrayStyle,tagArrayStyle:n.settings.commonStyles.tagArrayStyle,defaultEscapeCharacter:n.settings.commonStyles.escapeCharacter,removeUnnecessaryEscapeCharsForMultiLineArrays:n.settings.commonStyles.removeUnnecessaryEscapeCharsForMultiLineArrays})}let s=x("logs.custom-regex");return In(s),r=this.runCustomRegexReplacement(n.settings.customRegexes,r),rn(s),n.oldText=r,this.runAfterRegularRules(t,n)}runBeforeRegularRules(n){let t=n.oldText;return[t]=ri.applyIfEnabled(t,n.settings,this.disabledRules),[t]=ni.applyIfEnabled(t,n.settings,this.disabledRules,{defaultEscapeCharacter:n.settings.commonStyles.escapeCharacter}),[t]=ai.applyIfEnabled(t,n.settings,this.disabledRules,{minimumNumberOfDollarSignsToBeAMathBlock:n.settings.commonStyles.minimumNumberOfDollarSignsToBeAMathBlock}),[t]=Zn.applyIfEnabled(t,n.settings,this.disabledRules,{misspellingToCorrection:n.defaultMisspellings}),t}runAfterRegularRules(n,t){let i=t.oldText,r=x("logs.post-rules");In(r),[i]=ei.applyIfEnabled(i,t.settings,this.disabledRules),[i]=vi.applyIfEnabled(i,t.settings,this.disabledRules,{fileName:t.fileInfo.name,defaultEscapeCharacter:t.settings.commonStyles.escapeCharacter}),[i]=yi.applyIfEnabled(i,t.settings,this.disabledRules,{fileName:t.fileInfo.name,aliasArrayStyle:t.settings.commonStyles.aliasArrayStyle,defaultEscapeCharacter:t.settings.commonStyles.escapeCharacter,removeUnnecessaryEscapeCharsForMultiLineArrays:t.settings.commonStyles.removeUnnecessaryEscapeCharsForMultiLineArrays}),[i]=Qn.applyIfEnabled(i,t.settings,this.disabledRules),[i]=ii.applyIfEnabled(i,t.settings,this.disabledRules,{defaultEscapeCharacter:t.settings.commonStyles.escapeCharacter}),[i]=gi.applyIfEnabled(i,t.settings,this.disabledRules),[i]=ti.applyIfEnabled(i,t.settings,this.disabledRules);let a=i.match(Ne);a!=null&&([i]=xn.applyIfEnabled(i,t.settings,this.disabledRules));let o=t.getCurrentTime(),s;[i,s]=Qt.applyIfEnabled(i,t.settings,this.disabledRules,{fileCreatedTime:t.fileInfo.createdAtFormatted,fileModifiedTime:t.fileInfo.modifiedAtFormatted,currentTime:o,alreadyModified:n!=i,locale:t.momentLocale}),a===null&&([i]=xn.applyIfEnabled(i,t.settings,this.disabledRules));let l=Qt.getRuleOptions(t.settings);return o=t.getCurrentTime(),l.convertToUTC&&(o=o.utc()),[i]=hi.applyIfEnabled(i,t.settings,this.disabledRules,{currentTimeFormatted:o.format(l.format.trimEnd()),yamlTimestampDateModifiedEnabled:s&&l.dateModified,dateModifiedKey:l.dateModifiedKey}),rn(r),rn(x("logs.rule-running")),i}runCustomCommands(n,t){if(this.skipFile)return;nt(x("logs.running-custom-lint-command"));let i=new Set;for(let r of n)if(!(!r.id||!r.enabled)){if(i.has(r.id)){pt(x("logs.custom-lint-duplicate-warning").replace("{COMMAND_NAME}",r.name));continue}try{i.add(r.id),t.executeCommandById(r.id)}catch(a){os(a,`${x("logs.custom-lint-error-message")} ${r.id}`)}}}runCustomRegexReplacement(n,t){return ke([g.customIgnore],t,i=>{nt(x("logs.running-custom-regex"));let r=i,a=i;for(let o of n){let s=o.find===void 0||o.find==""||o.find===null,l=o.replace===void 0||o.replace===null;if(s||l||!o.enabled)continue;let c=o.label;c&&c.trim()!=""&&(c+=`: +`),c+=`/${o.find}/${o.flags}/${o.replace}/`,nt(c);let u=new RegExp(`${o.find}`,o.flags);r=r.replace(u,Cd(o.replace)),a!=r&&nt(r),a=r}return r})}runPasteLint(n,t,i){let r=i.oldText;return[r]=ui.applyIfEnabled(r,i.settings,[]),[r]=mi.applyIfEnabled(r,i.settings,[]),[r]=pi.applyIfEnabled(r,i.settings,[]),[r]=li.applyIfEnabled(r,i.settings,[]),[r]=di.applyIfEnabled(r,i.settings,[]),[r]=oi.applyIfEnabled(r,i.settings,[],{lineContent:n,selectedText:t}),[r]=si.applyIfEnabled(r,i.settings,[],{lineContent:n,selectedText:t}),[r]=Jn.applyIfEnabled(r,i.settings,[],{lineContent:n}),r}runYAMLTimestampByItself(n){let t=n.oldText,i=n.getCurrentTime();return[t]=Qt.applyIfEnabled(t,n.settings,this.disabledRules,{fileCreatedTime:n.fileInfo.createdAtFormatted,fileModifiedTime:n.fileInfo.modifiedAtFormatted,currentTime:i,alreadyModified:!0,locale:n.momentLocale}),t}};function ki(e,n=null,t,i,r){let a=n&&n.stat.ctime!==0?(0,Xi.moment)(n.stat.ctime):(0,Xi.moment)();a.locale(t);let o=n?(0,Xi.moment)(n.stat.mtime):(0,Xi.moment)();o.locale(t);let s=o.format(),l=a.format();return{oldText:e,fileInfo:{name:n?n.basename:"",createdAtFormatted:l,modifiedAtFormatted:s,path:n?n.path:""},settings:i,momentLocale:t,getCurrentTime:()=>{let c=(0,Xi.moment)();return c.locale(t),c},defaultMisspellings:r}}var Rs=require("obsidian");var Ha=class extends Rs.Modal{constructor(n,t,i,r,a,o=!1){super(n),this.modalEl.addClass("confirm-modal"),this.contentEl.createEl("h3",{text:x("warning-text"),cls:"modal-heading"}),o&&this.contentEl.createEl("p",{text:x("custom-command-warning"),cls:"modal-warn"}),this.contentEl.createEl("p",{text:t+" "+x("file-backup-text")}).id="confirm-dialog",this.contentEl.createDiv("modal-button-container",s=>{s.createEl("button",{text:x("cancel-button-text")}).addEventListener("click",()=>this.close());let l=s.createEl("button",{attr:{type:"submit"},cls:"mod-cta",text:i});l.addEventListener("click",async c=>{new Rs.Notice(r),this.close(),await a()}),setTimeout(()=>{l.focus()},50)})}};var Va=require("obsidian");var Bs=require("obsidian");var NA={General:Me.general.id,Custom:Me.custom.id,YAML:Me.yaml.id,Heading:Me.heading.id,Footnote:Me.footer.id,Content:Me.content.id,Spacing:Me.whitespace.id,Paste:Me.paste.id,Debug:Me.debug.id},YA={General:"tabs.names.general",Custom:"tabs.names.custom",YAML:"tabs.names.yaml",Heading:"tabs.names.heading",Footnote:"tabs.names.footnote",Content:"tabs.names.content",Spacing:"tabs.names.spacing",Paste:"tabs.names.paste",Debug:"tabs.names.debug"},Kt=class{constructor(n,t,i,r,a){this.name=i;this.isMobile=r;this.plugin=a;this.searchSettingInfo=[];this.navButton=n.createDiv("linter-navigation-item");let o="linter-desktop";r&&(o="linter-mobile"),this.navButton.addClass(o),(0,Bs.setIcon)(this.navButton.createSpan({cls:"linter-navigation-item-icon"}),NA[i]);let s=x(YA[i]);this.navButton.createSpan().setText(s),this.contentEl=t.createDiv("linter-tab-settings"),this.contentEl.id=i.toLowerCase().replace(" ","-"),this.headingEl=new Bs.Setting(this.contentEl).setName(s).setHeading().nameEl,Te(this.headingEl)}addSettingSearchInfo(n,t="",i="",r=null,a=null){this.searchSettingInfo.push({containerEl:n,name:t.toLowerCase(),description:i.toLowerCase(),options:r,alias:a})}addSettingSearchInfoForGeneralSettings(n){this.searchSettingInfo.push({containerEl:n.containerEl,name:n.name.toLowerCase(),description:n.description.toLowerCase(),options:null,alias:null})}updateTabDisplayMode(n,t="the status is still the same"){switch(n?(this.navButton.addClass("linter-navigation-item-selected"),Ye(this.contentEl)):(this.navButton.removeClass("linter-navigation-item-selected"),Te(this.contentEl)),t){case"entering search mode by focusing on the search input box":Ye(this.contentEl),Ye(this.headingEl);for(let i of this.searchSettingInfo)Ye(i.containerEl);break;case"leaving search mode by selecting a tab":Te(this.headingEl);for(let i of this.searchSettingInfo)Ye(i.containerEl);break}}};var Qm=require("obsidian");var Um=require("obsidian");var Sn=class{constructor(n,t,i,r,a,o=null){this.containerEl=n;this.keyToUpdate=r;this.plugin=a;this.beforeSave=o;this.name=x(t),this.description=x(i)}async saveValue(n){let t=this.keyToUpdate.split(".");t.length===2?this.plugin.settings[t[0]][t[1]]=n:this.plugin.settings[this.keyToUpdate]=n,this.beforeSave&&this.beforeSave(),await this.plugin.saveSettings()}getDefaultValue(){let n=this.keyToUpdate.split(".");return n.length===2?Pa[n[0]][n[1]]:Pa[this.keyToUpdate]}getString(){return pr(this.plugin.settings,this.keyToUpdate)??this.getDefaultValue()}getBoolean(){return Qu(this.plugin.settings,this.keyToUpdate)??this.getDefaultValue()}getNumber(){return Zu(this.plugin.settings,this.keyToUpdate)??this.getDefaultValue()}parseNameAndDescription(){it(this.name,this.setting.nameEl),it(this.description,this.setting.descEl),this.setting.descEl.addClass("linter-no-padding-top")}};var Jt=class extends Sn{constructor(t,i,r,a,o,s,l=null){super(t,i,r,a,o,l);this.dropdownRecords=s;this.display()}display(){this.setting=new Um.Setting(this.containerEl).setName(this.name).setDesc(this.description).addDropdown(t=>{this.addDropdownRecords(t),t.setValue(this.getString()),t.onChange(async i=>{this.saveValue(i)})})}addDropdownRecords(t){if(this.dropdownRecords.isForEnum){for(let i of this.dropdownRecords.values){let r="enums."+i;t.addOption(i,x(r))}return}for(let i=0;i{n.inputEl.type="number",n.setValue(this.getNumber().toString()).onChange(async t=>{this.saveValue(parseInt(t))})})}};var Vm=require("obsidian");var zt=class extends Sn{constructor(t,i,r,a,o,s){super(t,i,r,a,o);this.onChange=s;this.display()}display(){this.setting=new Vm.Setting(this.containerEl).addToggle(t=>{t.setValue(this.getBoolean()).onChange(async i=>{this.onChange&&this.onChange(i),this.saveValue(i)})}),this.parseNameAndDescription()}hide(){Te(this.setting.settingEl)}unhide(){Ye(this.setting.settingEl)}};var Gm=require("obsidian");var jm=require("obsidian");var Nt=class{constructor(n,t,i,r,a,o,s,l){this.containerEl=n;this.name=t;this.description=i;this.warning=r;this.addInputBtnText=a;this.app=o;this.saveSettings=s;this.onAddInput=l}display(){this.containerEl.createDiv({cls:"setting-item-name",text:this.name});let n=this.containerEl.createDiv({cls:"setting-item-description"});it(this.description,n.createEl("p",{cls:"custom-row-description"})),new jm.Setting(this.containerEl).addButton(t=>{t.setIcon("plus-with-circle").setTooltip(this.addInputBtnText).onClick(()=>this.onAddInput()),t.buttonEl.addClass("clickable-icon")}).setClass("linter-border-bottom").setDesc(this.warning??"").descEl.addClass("mod-warning"),this.inputElDiv=this.containerEl.createDiv(),this.showInputEls()}resetInputEls(){this.inputElDiv.empty(),this.showInputEls()}};var $m=require("obsidian"),qa=class extends bn{constructor(t,i,r=[]){super(t,i);this.app=t;this.inputEl=i;this.valuesToExclude=r}getSuggestions(t){let i=this.app.vault.getAllLoadedFiles().filter(s=>s instanceof $m.TFolder&&s.path!=="/").map(s=>s.path);if(!i)return[];let r=i.filter(s=>!this.valuesToExclude.includes(s)||s===this.inputEl.getAttribute("folderName")),a=[],o=t.toLowerCase();return r.forEach(s=>{s.toLowerCase().contains(o)&&a.push(s)}),a}renderSuggestion(t,i){i.setText(t)}selectSuggestion(t){this.inputEl.setAttribute("folderName",t),this.inputEl.value=t,this.inputEl.trigger("input"),this.close()}};var Ks=class extends Nt{constructor(t,i,r,a){super(t,x("tabs.general.folders-to-ignore.name"),x("tabs.general.folders-to-ignore.description"),null,x("tabs.general.folders-to-ignore.add-input-button-text"),r,a,()=>{let o="";this.foldersToIgnore.push(o),this.saveSettings(),this.addFolderToIgnore(o,this.foldersToIgnore.length-1,!0)});this.foldersToIgnore=i;this.display(),this.inputElDiv.addClass("linter-folder-ignore-container")}showInputEls(){this.foldersToIgnore.forEach((t,i)=>{this.addFolderToIgnore(t,i)})}addFolderToIgnore(t,i,r=!1){new Gm.Setting(this.inputElDiv).addSearch(o=>{new qa(this.app,o.inputEl,this.foldersToIgnore),o.setPlaceholder(x("tabs.general.folders-to-ignore.folder-search-placeholder-text")).setValue(t).onChange(s=>{let l=s;(l===""||l===o.inputEl.getAttribute("folderName"))&&(this.foldersToIgnore[i]=l,this.saveSettings())}),o.inputEl.setAttr("tabIndex",i),o.inputEl.addClass("linter-folder-ignore"),r&&o.inputEl.focus()}).addExtraButton(o=>{o.setIcon("trash").setTooltip(x("tabs.general.folders-to-ignore.delete-tooltip")).onClick(()=>{this.foldersToIgnore.splice(i,1),this.saveSettings(),this.resetInputEls()})}).settingEl.addClass("linter-no-border")}};var Zm=require("obsidian");var _A="i",zs=class extends Nt{constructor(t,i,r,a){super(t,x("tabs.general.files-to-ignore.name"),x("tabs.general.files-to-ignore.description"),x("tabs.general.files-to-ignore.warning"),x("tabs.general.files-to-ignore.add-input-button-text"),r,a,()=>{let o={label:"",match:"",flags:_A};this.filesToIgnore.push(o),this.saveSettings(),this.addFileToIgnore(o,this.filesToIgnore.length-1,!0)});this.filesToIgnore=i;this.display(),this.inputElDiv.addClass("linter-files-to-ignore-container")}showInputEls(){this.filesToIgnore.forEach((t,i)=>{this.addFileToIgnore(t,i)})}addFileToIgnore(t,i,r=!1){let a=this.inputElDiv.createDiv({cls:"linter-files-to-ignore"});new Zm.Setting(a).addText(o=>{o.setPlaceholder(x("tabs.general.files-to-ignore.label-placeholder-text")).setValue(t.label).onChange(s=>{this.filesToIgnore[i].label=s,this.saveSettings()}),o.inputEl.addClass("linter-files-to-ignore-normal-input"),r&&o.inputEl.focus()}).addText(o=>{o.setPlaceholder(x("tabs.general.files-to-ignore.file-search-placeholder-text")).setValue(t.match).onChange(s=>{this.filesToIgnore[i].match=s,this.saveSettings()}),o.inputEl.addClass("linter-files-to-ignore-normal-input")}).addText(o=>{o.setPlaceholder(x("tabs.general.files-to-ignore.flags-placeholder-text")).setValue(t.flags).onChange(s=>{this.filesToIgnore[i].flags=s,this.saveSettings()}),o.inputEl.addClass("linter-files-to-ignore-flags")}).addExtraButton(o=>{o.setIcon("trash").setTooltip(x("tabs.general.files-to-ignore.delete-tooltip")).onClick(()=>{this.filesToIgnore.splice(i,1),this.saveSettings(),this.resetInputEls()})})}};var Ns=class extends Kt{constructor(t,i,r,a,o){super(t,i,"General",r,a);this.app=o;this.display()}display(){let t=this.contentEl.createDiv(),i=null,r=new zt(t,"tabs.general.lint-on-save.name","tabs.general.lint-on-save.description","lintOnSave",this.plugin,S=>{S?i.unhide():i.hide()});this.addSettingSearchInfoForGeneralSettings(r),t=this.contentEl.createDiv(),i=new zt(t,"tabs.general.display-message.name","tabs.general.display-message.description","displayChanged",this.plugin),this.addSettingSearchInfoForGeneralSettings(i),r.getBoolean()||i.hide();let a=null;t=this.contentEl.createDiv();let o=new zt(t,"tabs.general.lint-on-file-change.name","tabs.general.lint-on-file-change.description","lintOnFileChange",this.plugin,S=>{S?a.unhide():a.hide()});this.addSettingSearchInfoForGeneralSettings(o),t=this.contentEl.createDiv(),a=new zt(t,"tabs.general.display-lint-on-file-change-message.name","tabs.general.display-lint-on-file-change-message.description","displayLintOnFileChangeNotice",this.plugin),this.addSettingSearchInfoForGeneralSettings(a),o.getBoolean()||a.hide();let s=navigator.language?.toLowerCase(),l=["system-default"],c=[x("tabs.general.same-as-system-locale").replace("{SYS_LOCALE}",s)];for(let S of Qm.moment.locales())l.push(S),c.push(S);let u={isForEnum:!1,values:l,descriptions:c};t=this.contentEl.createDiv(),this.addSettingSearchInfoForGeneralSettings(new Jt(t,"tabs.general.override-locale.name","tabs.general.override-locale.description","linterLocale",this.plugin,u,async()=>{await this.plugin.setOrUpdateMomentInstance()}));let d={isForEnum:!0,values:["multi-line","single-line","single string comma delimited","single string to single-line","single string to multi-line"],descriptions:[]};t=this.contentEl.createDiv(),this.addSettingSearchInfoForGeneralSettings(new Jt(t,"tabs.general.yaml-aliases-section-style.name","tabs.general.yaml-aliases-section-style.description","commonStyles.aliasArrayStyle",this.plugin,d));let m={isForEnum:!0,values:["multi-line","single-line","single string to single-line","single string to multi-line","single-line space delimited","single string space delimited","single string comma delimited"],descriptions:[]};t=this.contentEl.createDiv(),this.addSettingSearchInfoForGeneralSettings(new Jt(t,"tabs.general.yaml-tags-section-style.name","tabs.general.yaml-tags-section-style.description","commonStyles.tagArrayStyle",this.plugin,m));let p=['"',"'"],f={isForEnum:!1,values:p,descriptions:p};t=this.contentEl.createDiv(),this.addSettingSearchInfoForGeneralSettings(new Jt(t,"tabs.general.default-escape-character.name","tabs.general.default-escape-character.description","commonStyles.escapeCharacter",this.plugin,f)),t=this.contentEl.createDiv(),this.addSettingSearchInfoForGeneralSettings(new zt(t,"tabs.general.remove-unnecessary-escape-chars-in-multi-line-arrays.name","tabs.general.remove-unnecessary-escape-chars-in-multi-line-arrays.description","commonStyles.removeUnnecessaryEscapeCharsForMultiLineArrays",this.plugin)),t=this.contentEl.createDiv(),this.addSettingSearchInfoForGeneralSettings(new Ds(t,"tabs.general.number-of-dollar-signs-to-indicate-math-block.name","tabs.general.number-of-dollar-signs-to-indicate-math-block.description","commonStyles.minimumNumberOfDollarSignsToBeAMathBlock",this.plugin));let b=this.contentEl.createDiv(),h=new Ks(b,this.plugin.settings.foldersToIgnore,this.app,()=>{this.plugin.saveSettings()});this.addSettingSearchInfo(b,h.name,h.description.replaceAll(` +`," "));let k=this.contentEl.createDiv(),A=new zs(k,this.plugin.settings.filesToIgnore,this.app,()=>{this.plugin.saveSettings()});this.addSettingSearchInfo(k,A.name,A.description.replaceAll(` +`," "))}};var Jm=require("obsidian"),Ys=class extends Kt{constructor(t,i,r,a,o,s){super(t,i,r,o,s);this.rules=a;this.display()}display(){for(let t of this.rules){let i=this.contentEl.createDiv();i.id=t.alias,new Jm.Setting(i).setHeading().nameEl.createEl("a",{href:t.getURL(),text:t.getName()});let r=[],a=!0,o=!1;for(let s of t.options)s.display(i,this.plugin.settings,this.plugin),r.push(s.getSearchInfo()),a?(a=!1,s instanceof kn&&(o=!this.plugin.settings.ruleConfigs[s.ruleAlias][s.configKey])):o&&s.hide();this.addSettingSearchInfo(i,t.getName().toLowerCase(),t.getDescription().toLowerCase(),r,i.id)}}};var Xm=require("obsidian");var Ua=class extends bn{constructor(t,i,r=[]){super(t,i);this.app=t;this.inputEl=i;this.valuesToExclude=r}getSuggestions(t){let i=this.app.commands.listCommands();if(!i)return[];let r=i.filter(s=>{for(let l of this.valuesToExclude)if(l.id==s.id&&!(this.inputEl.hasAttribute("commandId")&&this.inputEl.getAttribute("commandId")==s.id))return!1;return!0}),a=[],o=t.toLowerCase();return r.forEach(s=>{(s.id.contains(o)||s.name.toLowerCase().contains(o))&&a.push(s)}),a}renderSuggestion(t,i){i.setText(t.name)}selectSuggestion(t){this.inputEl.value=t.name,this.inputEl.setAttribute("commandId",t.id),this.inputEl.trigger("input"),this.close()}};var _s=class extends Nt{constructor(t,i,r,a){super(t,x("options.custom-command.name"),x("options.custom-command.description"),x("options.custom-command.warning"),x("options.custom-command.add-input-button-text"),r,a,()=>{let o={id:"",name:"",enabled:!0};this.lintCommands.push(o),this.saveSettings(),this.addCommand(o,this.lintCommands.length-1,!0)});this.lintCommands=i;this.display()}showInputEls(){this.lintCommands.forEach((t,i)=>{this.addCommand(t,i)})}addCommand(t,i,r=!1){new Xm.Setting(this.inputElDiv).addSearch(a=>{new Ua(this.app,a.inputEl,this.lintCommands),a.setPlaceholder(x("options.custom-command.command-search-placeholder-text")).setValue(t.name).onChange(o=>{let s={id:a.inputEl.getAttribute("commandId"),name:o,enabled:t.enabled};s.name&&s.id?(this.lintCommands[i]=s,this.saveSettings()):!s.name&&!s.id&&(this.lintCommands[i]=s,this.saveSettings())}),a.inputEl.setAttr("tabIndex",i),a.inputEl.addClass("linter-custom-command"),r&&a.inputEl.focus()}).addExtraButton(a=>{a.setIcon("up-chevron-glyph").setTooltip(x("options.custom-command.move-up-tooltip")).onClick(()=>{this.arrayMove(i,i-1),this.saveSettings(),this.resetInputEls()})}).addExtraButton(a=>{a.setIcon("down-chevron-glyph").setTooltip(x("options.custom-command.move-down-tooltip")).onClick(()=>{this.arrayMove(i,i+1),this.saveSettings(),this.resetInputEls()})}).addExtraButton(a=>{a.setIcon("trash").setTooltip(x("options.custom-command.delete-tooltip")).onClick(()=>{this.lintCommands.splice(i,1),this.saveSettings(),this.resetInputEls()})}).addToggle(a=>{a.setValue(t.enabled).onChange(o=>{t.enabled=o})})}arrayMove(t,i){if(i<0||i===this.lintCommands.length)return;let r=this.lintCommands[t];this.lintCommands[t]=this.lintCommands[i],this.lintCommands[i]=r}};var iu=require("obsidian");var PA="gm",Ps=class extends Nt{constructor(t,i,r,a){super(t,x("options.custom-replace.name"),x("options.custom-replace.description"),x("options.custom-replace.warning"),x("options.custom-replace.add-input-button-text"),r,a,()=>{let o={label:"",find:"",replace:"",flags:PA,enabled:!0};this.regexes.push(o),this.saveSettings(),this.addRegex(o,this.regexes.length-1,!0)});this.regexes=i;this.display(),this.inputElDiv.addClass("linter-custom-regex-replacement-container")}showInputEls(){this.regexes.forEach((t,i)=>{this.addRegex(t,i)})}addRegex(t,i,r=!1){let a=this.inputElDiv.createDiv({cls:"linter-custom-regex-replacement"}),o=a.createDiv(),s=new iu.Setting(o).addText(u=>{u.setPlaceholder(x("options.custom-replace.label-placeholder-text")).setValue(t.label).onChange(d=>{this.regexes[i].label=d,this.saveSettings()}),u.inputEl.setAttr("inputIndex",i),u.inputEl.addClass("linter-custom-regex-replacement-label-input"),r&&u.inputEl.focus()});s.controlEl.addClass("linter-custom-regex-replacement-label"),s.descEl.remove(),s.infoEl.remove(),s.nameEl.remove();let l=a.createDiv();new iu.Setting(l).addText(u=>{u.setPlaceholder(x("options.custom-replace.regex-to-find-placeholder-text")).setValue(t.find).onChange(d=>{this.regexes[i].find=d,this.saveSettings()}),u.inputEl.addClass("linter-custom-regex-replacement-normal-input")}).addText(u=>{u.setPlaceholder(x("options.custom-replace.flags-placeholder-text")).setValue(t.flags).onChange(d=>{this.regexes[i].flags=d,this.saveSettings()}),u.inputEl.addClass("linter-custom-regex-replacement-flags")}).addText(u=>{u.setPlaceholder(x("options.custom-replace.regex-to-replace-placeholder-text")).setValue(t.replace).onChange(d=>{this.regexes[i].replace=d,this.saveSettings()}),u.inputEl.addClass("linter-custom-regex-replacement-normal-input")}).addExtraButton(u=>{u.setIcon("up-chevron-glyph").setTooltip(x("options.custom-replace.move-up-tooltip")).onClick(()=>{this.arrayMove(i,i-1),this.saveSettings(),this.resetInputEls()})}).addExtraButton(u=>{u.setIcon("down-chevron-glyph").setTooltip(x("options.custom-replace.move-down-tooltip")).onClick(()=>{this.arrayMove(i,i+1),this.saveSettings(),this.resetInputEls()})}).addExtraButton(u=>{u.setIcon("trash").setTooltip(x("options.custom-replace.delete-tooltip")).onClick(()=>{this.regexes.splice(i,1),this.saveSettings(),this.resetInputEls()})}).addToggle(u=>{u.setValue(t.enabled).onChange(d=>{t.enabled=d})}).settingEl.addClass("linter-custom-regex-replacement-row2")}arrayMove(t,i){if(i<0||i===this.regexes.length)return;let r=this.regexes[t];this.regexes[t]=this.regexes[i],this.regexes[i]=r}};var Hs=class extends Kt{constructor(t,i,r,a,o){super(t,i,"Custom",r,o);this.app=a;this.display()}display(){let t=this.contentEl.createDiv(),i=new _s(t,this.plugin.settings.lintCommands,this.app,()=>{this.plugin.saveSettings()});this.addSettingSearchInfo(t,i.name,i.description.replaceAll(` +`," ")+i.warning.replaceAll(` +`," "));let r=this.contentEl.createDiv(),a=new Ps(r,this.plugin.settings.customRegexes,this.app,()=>{this.plugin.saveSettings()});this.addSettingSearchInfo(r,a.name,a.description.replaceAll(` +`," ")+a.warning.replaceAll(` +`," "))}};var ef=require("obsidian");var qs=class{constructor(n,t,i,r){this.containerEl=n;this.searchZeroState=t;this.tabNameToTab=i;this.onFocus=r;this.searchSettingInfo=new Map;for(let[a,o]of i)this.searchSettingInfo.set(a,o.searchSettingInfo);this.display()}display(){let n=new ef.Setting(this.containerEl);n.settingEl.addClass("linter-no-border"),n.addSearch(t=>{this.search=t}),this.search.setPlaceholder(x("tabs.default-search-bar-text")),this.search.inputEl.onfocus=()=>{this.onFocus()},this.search.onChange(t=>{this.searchSettings(t.toLowerCase())})}searchSettings(n){let t=new Set,i=function(r,a){Ye(r),t.has(a)||t.add(a)};for(let[r,a]of this.searchSettingInfo)for(let o of a)if(n.trim()===""||o.alias?.includes(n)||o.description.includes(n)||o.name.includes(n))i(o.containerEl,r);else if(o.options)for(let s of o.options){if(s.description.toLowerCase().includes(n)||s.name.toLowerCase().includes(n)){i(o.containerEl,r);break}else if(s.options){for(let l of s.options)if(l.description.toLowerCase().includes(n)||l.value.toLowerCase().includes(n)){i(o.containerEl,r);break}}Te(o.containerEl)}else Te(o.containerEl);for(let[r,a]of this.tabNameToTab)t.has(r)?Ye(a.headingEl):Te(a.headingEl);t.size===0?Ye(this.searchZeroState):Te(this.searchZeroState)}focusOnInput(){this.search.inputEl.focus()}};var tf=Cn(so());var er=require("obsidian");var Wa=class{constructor(n,t,i,r=!0){this.containerEl=n;this.name=t;this.description=i;this.disabled=r;this.display()}display(){this.settingEl=this.containerEl.createDiv();let n=this.settingEl.createDiv("setting-item-info");this.nameEl=n.createDiv("setting-item-name"),this.nameEl.setText(this.name),this.descEl=n.createDiv("setting-item-description"),this.descEl.setText(this.description),this.inputContainerEl=this.settingEl.createDiv("full-width-textbox-input-wrapper"),this.inputContainerEl.onmouseover=()=>{this.getInput().trim()!=""&&this.copyEl.removeClass("linter-visually-hidden")},this.inputContainerEl.onmouseleave=()=>{this.copyEl.addClass("linter-visually-hidden")},this.inputEl=this.inputContainerEl.createEl("textarea",{cls:"full-width"}),this.inputEl.spellcheck=!1,this.inputEl.disabled=this.disabled,this.copyEl=this.inputContainerEl.createDiv({cls:"settings-copy-button linter-visually-hidden ",attr:{"aria-label":x("copy-aria-label")}}),this.copyIconEl=this.copyEl.createSpan(),(0,er.setIcon)(this.copyIconEl,"linter-clipboard"),this.copyIconEl.onclick=()=>{this.handleCopy(this.copyIconEl)}}getInput(){return this.inputEl.value}handleCopy(n){navigator.clipboard.writeText(this.getInput()).then(()=>{(0,er.setIcon)(n,"linter-success"),setTimeout(()=>{(0,er.setIcon)(n,"linter-clipboard")},1500)},t=>{new er.Notice(`${x("notice-text.copy-to-clipboard-failed")+t}`,0)})}hide(){Te(this.settingEl)}unhide(){Ye(this.settingEl)}};var HA=Object.keys(tf.default.levels),Us=class extends Kt{constructor(n,t,i,r){super(n,t,"Debug",i,r),this.display()}display(){let n=this.contentEl.createDiv(),t={isForEnum:!0,values:HA,descriptions:[]};this.addSettingSearchInfoForGeneralSettings(new Jt(n,"tabs.debug.log-level.name","tabs.debug.log-level.description","logLevel",this.plugin,t,async()=>{mo(this.plugin.settings.logLevel)})),n=this.contentEl.createDiv();let i=x("tabs.debug.linter-config.name"),r=x("tabs.debug.linter-config.description");new Wa(n,i,r).inputEl.setText(JSON.stringify(this.plugin.settings,null,2)),this.addSettingSearchInfo(n,i,r);let o=null;n=this.contentEl.createDiv();let s=new zt(n,"tabs.debug.log-collection.name","tabs.debug.log-collection.description","recordLintOnSaveLogs",this.plugin,l=>{l?o.unhide():o.hide()});this.addSettingSearchInfoForGeneralSettings(s),n=this.contentEl.createDiv(),i=x("tabs.debug.linter-logs.name"),r=x("tabs.debug.linter-logs.description"),o=new Wa(n,i,""),o.inputEl.setText(co.join(` +`)),it(r,o.descEl),s.getBoolean()||o.hide(),this.addSettingSearchInfo(n,i,r)}};var Ws=class extends Va.PluginSettingTab{constructor(t,i){super(t,i);this.plugin=i;this.tabNameToTab=new Map;this.selectedTab="General"}display(){let{containerEl:t}=this;t.empty();let i=t.createDiv("linter-setting-title");Va.Platform.isMobile?i.addClass("linter-mobile"):i.createEl("h1").setText(x("linter-title")),this.navContainer=t.createEl("nav",{cls:"linter-setting-header"}),this.tabNavEl=this.navContainer.createDiv("linter-setting-tab-group"),this.settingsContentEl=t.createDiv("linter-setting-content"),this.addTabs(Va.Platform.isMobile),this.createSearchZeroState(),this.generateSearchBar(i),this.selectedTab==""&&this.tabSearcher.focusOnInput()}addTabs(t){this.addTab(new Ns(this.tabNavEl,this.settingsContentEl,t,this.plugin,this.app));for(let i of Object.values(K))this.addTab(new Ys(this.tabNavEl,this.settingsContentEl,i,$n.get(i),t,this.plugin));this.addTab(new Hs(this.tabNavEl,this.settingsContentEl,t,this.app,this.plugin)),this.addTab(new Us(this.tabNavEl,this.settingsContentEl,t,this.plugin))}generateSearchBar(t){this.tabSearcher=new qs(t,this.searchZeroState,this.tabNameToTab,()=>{for(let i of this.tabNameToTab.values()){i.updateTabDisplayMode(!1,"entering search mode by focusing on the search input box");let r=this.tabSearcher.search.getValue();this.selectedTab==""&&r.trim()!=""&&this.tabSearcher.searchSettings(r.toLowerCase()),this.selectedTab=""}})}createSearchZeroState(){this.searchZeroState=this.settingsContentEl.createDiv({cls:"search-zero-state"}),Te(this.searchZeroState),this.searchZeroState.createEl("p",{text:x("empty-search-results-text")})}addTab(t){t.navButton.onclick=()=>{this.onTabClick(t.name)},t.updateTabDisplayMode(this.selectedTab===t.name,"the status is still the same"),this.tabNameToTab.set(t.name,t)}onTabClick(t){if(this.selectedTab!==t){if(this.selectedTab=="")for(let[i,r]of this.tabNameToTab)r.updateTabDisplayMode(i===t,"leaving search mode by selecting a tab");else Te(this.searchZeroState),this.tabNameToTab.get(t).updateTabDisplayMode(!0),this.tabNameToTab.get(this.selectedTab).updateTabDisplayMode(!1);this.selectedTab=t}}};var rf=require("obsidian");var qA=/^---\n/gm,nf=`${Ki}:`,Vs=class extends rf.EditorSuggest{constructor(t){super(t.app);this.plugin=t;this.inline=!1;let i=x("all-rules-option");this.ruleInfo=[{displayName:i,name:i.toLowerCase(),alias:"all"}];for(let r of Bt){let a=r.getName();this.ruleInfo.push({displayName:a,name:a.toLowerCase(),alias:r.alias})}}onTrigger(t,i,r){let a=i.getLine(t.line).toLowerCase();if(a.startsWith(nf)||this.disabledRulesIsEndOfStartOfFileToCursor(i.getRange({line:0,ch:0},t))){this.inline=a.startsWith(nf);let s=i.getLine(t.line).substring(0,t.ch),l=s.match(/(\S+)$/)?.first().replaceAll("[","").replaceAll("]","");if(l)return{end:t,start:{ch:s.lastIndexOf(l),line:t.line},query:l}}return null}getSuggestions(t){let[i,r]=as(t.editor.getValue());if(r)return[];let a=t.query.toLowerCase();return this.ruleInfo.filter(s=>(s.name.contains(a)||s.alias.contains(a))&&!i.includes(s.alias))}renderSuggestion(t,i){i.addClass("mod-complex");let r=i.createDiv({cls:"suggestion-content"});r.createDiv({cls:"suggestion-title"}).setText(`${t.displayName}`),r.createDiv({cls:"suggestion-note"}).setText(`${t.alias}`)}selectSuggestion(t){if(this.context){let i=t.alias;this.inline?i=`${i},`:i=`${i} + -`,this.context.editor.replaceRange(`${i} `,this.context.start,this.context.end)}}disabledRulesIsEndOfStartOfFileToCursor(t){if(!t||!t.length||t.match(qA)?.length!=1)return!1;let i=ue(t+` +`,Ki)?.trimEnd();return i===null?!1:t.trimEnd().endsWith(i)}};var df=Cn(lf()),pf=Cn(so());var wi=require("obsidian");var au="default-misspellings.md",ru=`https://raw.githubusercontent.com/platers/obsidian-linter/refs/heads/master/src/utils/${au}`;async function cf(e,n){let t=e.app,i=e.manifest.dir??"",r=(0,wi.normalizePath)(i+"/"+au);if(await t.vault.adapter.exists(r))return;let a=new wi.Notice(x("rules.auto-correct-common-misspellings.default-install")),o;try{o=await(0,wi.requestUrl)(ru)}catch(s){uo(x("rules.auto-correct-common-misspellings.default-install-failed").replace("{URL}",ru),s)}if(!o||o.status!==200){let s=x("rules.auto-correct-common-misspellings.default-install-failed").replace("{URL}",ru)+x("logs.see-console");await n(s);return}await t.vault.adapter.exists(i)||await t.vault.adapter.mkdir(i),await t.vault.adapter.writeBinary(r,o.arrayBuffer),a.hide()}async function uf(e){let n=e.app,t=e.manifest.dir??"",i=(0,wi.normalizePath)(t+"/"+au);return await n.vault.adapter.exists(i)?await n.vault.adapter.read(i):(pt(x("rules.auto-correct-common-misspellings.defaults-missing").replace("{FILE}",i)),"")}var UA={en:"en-gb",zh:"zh-cn","zh-TW":"zh-tw",ru:"ru",ko:"ko",it:"it",id:"id",ro:"ro","pt-BR":"pt-br",cz:"cs",da:"da",de:"de",es:"es",fr:"fr",no:"nn",pl:"pl",pt:"pt",tr:"tr",hi:"hi",nl:"nl",ar:"ar",ja:"ja"},Xt=0,$s=class extends X.Plugin{constructor(){super(...arguments);this.eventRefs=[];this.isEnabled=!0;this.rulesRunner=new Fs;this.overridePaste=!1;this.hasCustomCommands=!1;this.customCommandsLock=new df.default;this.originalSaveCallback=null;this.editorLintFiles=[];this.fileLintFiles=new Set;this.customCommandsCallback=null;this.currentlyOpeningSidebar=!1;this.activeFileChangeDebouncer=new Map;this.defaultAutoCorrectMisspellings=new Map;this.hasLoadedMisspellingFiles=!1}async onload(){Mm(),go(window.localStorage.getItem("language")),vt(x("logs.plugin-load")),this.isEnabled=!0;for(let t in Me){let i=Me[t];(0,X.addIcon)(i.id,i.source)}await this.loadSettings(),this.addCommands(),this.registerEventsAndSaveCallback(),this.registerEditorSuggest(new Vs(this)),this.settingsTab=new Ws(this.app,this),this.addSettingTab(this.settingsTab)}async onunload(){vt(x("logs.plugin-unload")),this.isEnabled=!1;for(let i of this.eventRefs)this.app.workspace.offref(i);let t=this.app.commands?.commands?.["editor:save-file"];t&&t.callback&&this.originalSaveCallback&&(t.callback=this.originalSaveCallback)}async loadSettings(){let t=await this.loadData();this.settings=Object.assign({},Pa,t),typeof this.settings.logLevel=="number"&&(this.settings.logLevel=ed(this.settings.logLevel)),mo(this.settings.logLevel),await this.setOrUpdateMomentInstance(),this.updatePasteOverrideStatus(),this.updateHasCustomCommandStatus()}async saveSettings(){this.hasLoadedMisspellingFiles||await this.loadAutoCorrectFiles(!1),await this.saveData(this.settings),this.updatePasteOverrideStatus(),this.updateHasCustomCommandStatus()}addCommands(){let t=this;this.addCommand({id:"lint-file",name:x("commands.lint-file.name"),editorCheckCallback(i,r,a){if(i)return t.isMarkdownFile(a.file)&&r.cm!=null;t.runLinterEditor(r)},icon:Me.file.id}),this.addCommand({id:"lint-file-unless-ignored",name:x("commands.lint-file-unless-ignored.name"),editorCheckCallback(i,r,a){if(i)return t.isMarkdownFile(a.file);!t.shouldIgnoreFile(a.file)&&r.cm&&t.runLinterEditor(r)},icon:Me.file.id}),this.addCommand({id:"lint-all-files",name:x("commands.lint-all-files.name"),icon:Me.vault.id,callback:()=>{let i=x("commands.lint-all-files.start-message"),r=x("commands.lint-all-files.submit-button-text"),a=x("commands.lint-all-files.submit-button-notice-text");new Ha(this.app,i,r,a,()=>this.runLinterAllFiles(this.app),this.settings.lintCommands&&this.settings.lintCommands.length>0).open()}}),this.addCommand({id:"lint-all-files-in-folder",name:x("commands.lint-all-files-in-folder.name"),icon:Me.folder.id,editorCheckCallback:(i,r,a)=>{if(i)return a&&a.file&&a.file instanceof X.TFile&&a.file.parent?!a.file.parent.isRoot():!1;this.createFolderLintModal(a.file.parent)}}),this.addCommand({id:"paste-as-plain-text",name:x("commands.paste-as-plain-text.name"),editorCheckCallback:(i,r)=>{if(i)return this.overridePaste;this.pasteAsPlainText(r)}})}registerEventsAndSaveCallback(){let t=this.app.workspace.on("editor-paste",(a,o)=>{a.defaultPrevented||!this.overridePaste||this.modifyPasteEvent(a,o)});this.registerEvent(t),this.eventRefs.push(t),t=this.app.workspace.on("file-menu",(a,o,s)=>this.onMenuOpenCallback(a,o,s)),this.registerEvent(t),this.eventRefs.push(t),this.lastActiveFile=this.app.workspace.getActiveFile(),t=this.app.workspace.on("active-leaf-change",()=>this.onActiveLeafChange()),this.registerEvent(t),this.eventRefs.push(t),t=this.app.metadataCache.on("changed",a=>this.onMetadataCacheUpdatedCallback(a)),this.registerEvent(t),this.eventRefs.push(t),t=this.app.workspace.on("editor-change",async(a,o)=>{if((this.settings.ruleConfigs["yaml-timestamp"]["update-on-file-contents-updated"]??"never")!="never"&&!(this.shouldIgnoreFile(o.file)||!this.isMarkdownFile(o.file)||!a.cm))if(this.activeFileChangeDebouncer.has(o.file.path))this.activeFileChangeDebouncer.get(o.file.path).isRunning||this.activeFileChangeDebouncer.get(o.file.path).debounceFn(o.file,a);else{let s={debounceFn:this.createDebouncedFileUpdate(),isRunning:!1,originalText:""};this.activeFileChangeDebouncer.set(o.file.path,s),s.originalText=await this.app.vault.cachedRead(o.file),s.debounceFn(o.file,a)}}),this.registerEvent(t),this.eventRefs.push(t),this.app.workspace.onLayoutReady(async()=>{await this.makeSureSettingsFilledInAndCleanupSettings(),await this.loadAutoCorrectFiles(!0)});let i=this.app.commands?.commands?.["editor:save-file"];this.originalSaveCallback=i?.callback,typeof this.originalSaveCallback=="function"&&(i.callback=()=>{if(this.originalSaveCallback(),this.settings.lintOnSave&&this.isEnabled){let a=this.getEditor();if(a){let o=this.app.workspace.getActiveFile();!this.shouldIgnoreFile(o)&&this.isMarkdownFile(o)&&a.cm&&this.runLinterEditor(a)}}});let r=this;window.CodeMirrorAdapter.commands.save=()=>{r.app.commands.executeCommandById("editor:save-file")}}async onMetadataCacheUpdatedCallback(t){this.editorLintFiles.includes(t)?(this.editorLintFiles.remove(t),this.runCustomCommands(t)):this.fileLintFiles.has(t)&&(this.fileLintFiles.delete(t),this.runCustomCommandsInSidebar(t))}async loadAutoCorrectFiles(t){let i=this.settings.ruleConfigs["auto-correct-common-misspellings"];if(!(!i||!i.enabled)&&(await cf(this,async r=>{t&&(r=`Obsidian Linter: +`+r),new X.Notice(r),this.settings.ruleConfigs["auto-correct-common-misspellings"].enabled=!1,await this.saveSettings()}),!!this.settings.ruleConfigs["auto-correct-common-misspellings"].enabled)){this.defaultAutoCorrectMisspellings=Mi(an(await uf(this)));for(let r of this.settings.ruleConfigs["auto-correct-common-misspellings"]["extra-auto-correct-files"]??[])if(r.filePath!=""){let a=this.getFileFromPath(r.filePath);a&&(r.customReplacements=Mi(an(await this.app.vault.cachedRead(a))))}this.hasLoadedMisspellingFiles=!0}}onMenuOpenCallback(t,i,r){i instanceof X.TFile&&this.isMarkdownFile(i)?t.addItem(a=>{a.setIcon(Me.file.id).setTitle(x("commands.lint-file-pop-up-menu-text.name")).onClick(()=>{let o=this.app.workspace.getActiveFile(),s=this.getEditor();o===i&&s&&s.cm?this.runLinterEditor(s):this.runLinterFile(i)})}):i instanceof X.TFolder&&t.addItem(a=>{a.setTitle(x("commands.lint-folder-pop-up-menu-text.name")).setIcon(Me.folder.id).onClick(()=>this.createFolderLintModal(i))})}async onActiveLeafChange(){if(!this.isEnabled||this.currentlyOpeningSidebar)return;let t=this.app.workspace.getActiveFile(),i=this.lastActiveFile==null?!1:await this.app.vault.adapter.exists(this.lastActiveFile.path);if(!this.settings.lintOnFileChange||!i||this.lastActiveFile===t||!this.isMarkdownFile(this.lastActiveFile)||this.shouldIgnoreFile(this.lastActiveFile)){this.lastActiveFile=t;return}try{await this.runLinterFile(this.lastActiveFile,!0)}catch(r){this.handleLintError(this.lastActiveFile,r,x("commands.lint-file.error-message")+" '{FILE_PATH}'",!1)}finally{this.lastActiveFile=t}}shouldIgnoreFile(t){for(let i of this.settings.foldersToIgnore)if(i.length>0&&t.path.startsWith((0,X.normalizePath)(i)+"/"))return!0;for(let i of this.settings.filesToIgnore){if(!i.match)continue;if(new RegExp(`${i.match}`,i.flags).test(t.path))return!0}return!1}isMarkdownFile(t){return t&&t.extension==="md"}async runLinterFile(t,i=!1){let r=an(await this.app.vault.read(t)),a=this.rulesRunner.lintText(ki(r,t,this.momentLocale,this.settings,this.defaultAutoCorrectMisspellings));if(r!=a){if(await this.app.vault.modify(t,a),i){let o=x("logs.file-change-lint-message-start")+" "+this.lastActiveFile.path;this.settings.displayLintOnFileChangeNotice&&new X.Notice(o),vt(o)}this.fileLintFiles.add(t);return}await this.runCustomCommandsInSidebar(t)}async runLinterAllFiles(t){let i=0;if(await Promise.all(t.vault.getMarkdownFiles().map(async r=>{if(!this.shouldIgnoreFile(r))try{await this.runLinterFile(r)}catch(a){this.handleLintError(r,a,x("commands.lint-all-files.error-message")+" '{FILE_PATH}'"),i+=1}})),i===0)new X.Notice(x("commands.lint-all-files.success-message"),Xt);else{let r=i===1?x("commands.lint-all-files.errors-message-singular"):x("commands.lint-all-files.errors-message-plural").replace("{NUM}",i.toString());new X.Notice(r,Xt)}}async runLinterAllFilesInFolder(t){vt(x("logs.folder-lint")+t.name);let i=0,r=0,a=this.getAllFilesInFolder(t);if(await Promise.all(a.map(async o=>{if(!this.shouldIgnoreFile(o)){try{await this.runLinterFile(o)}catch(s){this.handleLintError(o,s,x("commands.lint-all-files-in-folder.error-message")+" '{FILE_PATH}'"),i+=1}r++}})),i===0)new X.Notice(x("commands.lint-all-files-in-folder.success-message").replace("{NUM}",r.toString()).replace("{FOLDER_NAME}",t.name),Xt);else{let o=i===1?x("commands.lint-all-files-in-folder.message-singular").replace("{NUM}",r.toString()).replace("{FOLDER_NAME}",t.name):x("commands.lint-all-files-in-folder.message-plural").replace("{FILE_COUNT}",r.toString()).replace("{FOLDER_NAME}",t.name).replace("{ERROR_COUNT}",i.toString());new X.Notice(o,Xt)}}createFolderLintModal(t){let i=x("commands.lint-all-files-in-folder.start-message").replace("{FOLDER_NAME}",t.name),r=x("commands.lint-all-files-in-folder.submit-button-text").replace("{FOLDER_NAME}",t.name),a=x("commands.lint-all-files-in-folder.submit-button-notice-text").replace("{FOLDER_NAME}",t.name);new Ha(this.app,i,r,a,()=>this.runLinterAllFilesInFolder(t),this.settings.lintCommands&&this.settings.lintCommands.length>0).open()}async runLinterEditor(t){fl(this.settings.recordLintOnSaveLogs),Xu(),vt(x("logs.linter-run"));let i=this.app.workspace.getActiveFile(),r=t.getValue(),a;try{a=this.rulesRunner.lintText(ki(r,i,this.momentLocale,this.settings,this.defaultAutoCorrectMisspellings))}catch(c){this.handleLintError(i,c,x("commands.lint-file.error-message")+" '{FILE_PATH}'",!1);return}let o=this.updateEditor(r,a,t),s=o.map(c=>c[0]==tr.default.DIFF_INSERT?c[1].length:0).reduce((c,u)=>c+u,0),l=o.map(c=>c[0]==tr.default.DIFF_DELETE?c[1].length:0).reduce((c,u)=>c+u,0);this.displayChangedMessage(s,l),!s&&!l?this.runCustomCommands(i):this.editorLintFiles.push(i),this.updateFileDebouncerText(i,a),fl(!1)}async setOrUpdateMomentInstance(){let t=localStorage.getItem("language")||"en",i=navigator.language?.toLowerCase(),r=UA[t];this.settings.linterLocale!=="system-default"?r=this.settings.linterLocale:i.startsWith(t)&&(r=i),this.momentLocale=r;let a=js.moment.locale(),o=js.moment.locale(r);nt(x("logs.moment-locale-not-found").replace("{MOMENT_LOCALE}",r).replace("{CURRENT_LOCALE}",o)),js.moment.locale(a)}async makeSureSettingsFilledInAndCleanupSettings(){let t=!1;this.settings.settingsConvertedToConfigKeyValues||(t=await this.moveConfigValuesToKeyBasedFormat()),"lintOnFileContentChangeDelay"in this.settings&&(this.settings.ruleConfigs["yaml-timestamp"]["update-on-file-contents-updated"]=this.settings.lintOnFileContentChangeDelay,delete this.settings.lintOnFileContentChangeDelay,t=!0);let i="Obsidian Linter:",r=!1;this.settings.ruleConfigs["header-increment"]&&this.settings.ruleConfigs["header-increment"].enabled&&this.settings.ruleConfigs["header-increment"]["start-at-h2"]&&this.settings.ruleConfigs["file-name-heading"]&&this.settings.ruleConfigs["file-name-heading"].enabled&&(this.settings.ruleConfigs["header-increment"]["start-at-h2"]=!1,t=!0,r=!0,i+=` +`+x("disabled-conflicting-rule-notice").replace("{NAME_1}",x("rules.header-increment.start-at-h2.name")).replace("{NAME_2}",x("rules.file-name-heading.name"))),this.settings.ruleConfigs["paragraph-blank-lines"]&&this.settings.ruleConfigs["paragraph-blank-lines"].enabled&&this.settings.ruleConfigs["two-spaces-between-lines-with-content"]&&this.settings.ruleConfigs["two-spaces-between-lines-with-content"].enabled&&(this.settings.ruleConfigs["paragraph-blank-lines"].enabled=!1,t=!0,r&&(i+=` +`),r=!0,i+=` +`+x("disabled-conflicting-rule-notice").replace("{NAME_1}",x("rules.paragraph-blank-lines.name")).replace("{NAME_2}",x("rules.two-spaces-between-lines-with-content.name"))),r&&new X.Notice(i,Xt);for(let a of Bt){let o=a.getDefaultOptions();if(!this.settings.ruleConfigs[a.alias]){this.settings.ruleConfigs[a.alias]=o,t=!0;continue}if(a.alias=="space-between-chinese-japanese-or-korean-and-english-or-numbers")"english-symbols-punctuation-before"in this.settings.ruleConfigs[a.alias]||(this.settings.ruleConfigs[a.alias]["english-symbols-punctuation-before"]=o["english-symbols-punctuation-before"],t=!0),"english-symbols-punctuation-after"in this.settings.ruleConfigs[a.alias]||(this.settings.ruleConfigs[a.alias]["english-symbols-punctuation-after"]=o["english-symbols-punctuation-after"],t=!0);else if(a.alias=="yaml-timestamp"){let s=a.getDefaultOptions();"force-retention-of-create-value"in this.settings.ruleConfigs[a.alias]&&("date-created-source-of-truth"in this.settings.ruleConfigs[a.alias]||(this.settings.ruleConfigs[a.alias]["force-retention-of-create-value"]?this.settings.ruleConfigs[a.alias]["date-created-source-of-truth"]="frontmatter":this.settings.ruleConfigs[a.alias]["date-created-source-of-truth"]=s["date-created-source-of-truth"]),delete this.settings.ruleConfigs[a.alias]["force-retention-of-create-value"],t=!0),"date-modified-source-of-truth"in this.settings.ruleConfigs[a.alias]||(this.settings.ruleConfigs[a.alias]["date-modified-source-of-truth"]=s["date-modified-source-of-truth"],t=!0)}for(let s of Object.keys(o))Object.hasOwn(this.settings.ruleConfigs[a.alias],s)||(this.settings.ruleConfigs[a.alias][s]=o[s],t=!0)}for(let a of this.settings.customRegexes)Object.hasOwn(a,"enabled")||(a.enabled=!0,t=!0);for(let a of this.settings.lintCommands)Object.hasOwn(a,"enabled")||(a.enabled=!0,t=!0);t&&await this.saveSettings()}createDebouncedFileUpdate(){let t=5e3;switch(this.settings.ruleConfigs["yaml-timestamp"]["update-on-file-contents-updated"]??"never"){case"after 10 seconds":t=1e4;break;case"after 15 seconds":t=15e3;break;case"after 30 seconds":t=3e4;break;case"after 1 minute":t=6e4;break}return(0,X.debounce)(async(i,r)=>{if(!this.activeFileChangeDebouncer.has(i.path)){pt(x("logs.file-change-yaml-lint-warning"));return}let a=this.activeFileChangeDebouncer.get(i.path);a.isRunning=!0;let o=r.getValue(),s=await this.app.vault.cachedRead(i),l=o===s,c="";if(l){c=o;let u=c;if(c!=a.originalText){vt(x("logs.file-change-yaml-lint-run"));try{u=this.rulesRunner.runYAMLTimestampByItself(ki(c,i,this.momentLocale,this.settings,null))}catch(d){this.handleLintError(i,d,x("commands.lint-file.error-message")+" '{FILE_PATH}'",!1);return}this.updateEditor(c,u,r)}else vt(x("logs.file-change-yaml-lint-skipped"))}else c=s,c!=a.originalText?(vt(x("logs.file-change-yaml-lint-run")),await this.app.vault.process(i,u=>{vt(x("logs.file-change-yaml-lint-run"));try{return this.rulesRunner.runYAMLTimestampByItself(ki(c,i,this.momentLocale,this.settings,null))}catch(d){return this.handleLintError(i,d,x("commands.lint-file.error-message")+" '{FILE_PATH}'",!1),u}})):vt(x("logs.file-change-yaml-lint-skipped"));this.activeFileChangeDebouncer.delete(i.path),a.isRunning=!1},t,!0)}updateEditor(t,i,r){let o=new tr.default.diff_match_patch().diff_main(t,i),s="";return o.forEach(l=>{let[c,u]=l;if(c==tr.default.DIFF_INSERT)r.cm.dispatch({changes:[{from:r.posToOffset(this.endOfDocument(s)),insert:u}],filter:!1}),s+=u;else if(c==tr.default.DIFF_DELETE){let d=this.endOfDocument(s),m=s;m+=u;let p=this.endOfDocument(m);r.cm.dispatch({changes:[{from:r.posToOffset(d),to:r.posToOffset(p),insert:""}],filter:!1})}else s+=u}),o}displayChangedMessage(t,i){if(this.settings.displayChanged){let r=Fm` + ${t} ${x("notice-text.characters-added")} + ${i} ${x("notice-text.characters-removed")} + `;new X.Notice(r)}}handleLintError(t,i,r,a=!0){let o=r.replace("{FILE_PATH}",t.path),s=x("logs.see-console");i instanceof Vi?a?new X.Notice(`${o} ${i.message}. +${s}`,Xt):new X.Notice(`${i.message}. +${s}`,Xt):new X.Notice(`${x("logs.unknown-error")} ${s}`,Xt),uo(o,i)}async modifyPasteEvent(t,i){if(!i)return;let r=t.clipboardData.getData("text/plain");if(!r)return;let a=r.trim();if(zn.test(a)){pt(x("logs.paste-link-warning"));return}if(t.stopPropagation(),t.preventDefault(),!t.defaultPrevented)return;let o=this.app.vault.getConfig("autoConvertHtml"),s=t.clipboardData.getData("text/html"),l=s&&o?(0,X.htmlToMarkdown)(s):r,c=i.listSelections();if(c.length===1){let u=c[0];l=this.rulesRunner.runPasteLint(this.getLineContent(i,u),i.getSelection()??"",ki(l,null,this.momentLocale,this.settings,null)),i.replaceSelection(l)}else this.handleMultiCursorPaste(i,c,l)}handleMultiCursorPaste(t,i,r){let a=this.convertContentIntoProperPasteContent(i,r),o=[];i.forEach((s,l)=>{r=this.rulesRunner.runPasteLint(this.getLineContent(t,s),t.getRange(s.anchor,s.head)??"",ki(a[l],null,this.momentLocale,this.settings,null)),o.push({text:r,from:s.anchor,to:s.head})}),t.transaction({changes:o})}convertContentIntoProperPasteContent(t,i){let r=i.split(` +`),a=[];if(r.length%t.length!==0)for(let o=0;o{this.currentlyOpeningSidebar=!0,await i.openFile(t),this.rulesRunner.runCustomCommands(this.settings.lintCommands,this.app.commands),this.customCommandsCallback&&await this.customCommandsCallback(t)}),i.detach(),r&&r.focus(),this.currentlyOpeningSidebar=!1}async runCustomCommands(t){!this.settings.lintCommands||this.settings.lintCommands.length==0||!this.hasCustomCommands||(await this.customCommandsLock.acquire("command",async()=>{try{this.rulesRunner.runCustomCommands(this.settings.lintCommands,this.app.commands)}catch(i){this.handleLintError(t,i,x("commands.lint-file.error-message")+" '{FILE_PATH}'",!1)}this.customCommandsCallback&&await this.customCommandsCallback(t)}),this.updateFileDebouncerText(t,an(await this.app.vault.read(t))))}getEditor(){let t=this.app.workspace.getActiveViewOfType(X.MarkdownView);return t?t.editor:null}getLineContent(t,i){return t.getLine(i.anchor.line)}async moveConfigValuesToKeyBasedFormat(){go("en");let t=!1;for(let i of Bt){let r=x("rules."+i.alias+".name"),a=this.settings.ruleConfigs[r];if(a!=null){let o=x("rules."+i.alias+".description"),s={enabled:a[o]??!1};for(let l of i.options){if(l.configKey==="enabled")continue;let c=x("rules."+i.alias+"."+l.configKey+".name");s[l.configKey]=a[c]??l.defaultValue}this.settings.ruleConfigs[i.alias]=s,delete this.settings.ruleConfigs[r],t=!0}}return this.settings.settingsConvertedToConfigKeyValues=!0,await this.saveSettings(),go(window.localStorage.getItem("language")),t}getAllFilesInFolder(t){let i=[],r=[t];for(let a of r)for(let o of a.children)o instanceof X.TFile&&this.isMarkdownFile(o)?i.push(o):o instanceof X.TFolder&&r.push(o);return i}updatePasteOverrideStatus(){for(let t of $n.get("Paste"))if(t.getOptions(this.settings)?.enabled){this.overridePaste=!0;return}this.overridePaste=!1}updateHasCustomCommandStatus(){for(let t of this.settings.lintCommands)if(t.id&&t.id.trim()!=""&&t.enabled){this.hasCustomCommands=!0;return}this.hasCustomCommands=!1}endOfDocument(t){let i=t.split(` +`);return{line:i.length-1,ch:i[i.length-1].length}}getFileFromPath(t){let i=this.app.vault.getAbstractFileByPath((0,X.normalizePath)(t));return i instanceof X.TFile?i:null}updateFileDebouncerText(t,i){this.activeFileChangeDebouncer.has(t.path)&&(this.activeFileChangeDebouncer.get(t.path).originalText=i)}}; +/*! Bundled license information: + +js-yaml/dist/js-yaml.mjs: + (*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT *) +*/ + +/* nosourcemap */ \ No newline at end of file diff --git a/content/notes/.obsidian/plugins/obsidian-linter/manifest.json b/content/notes/.obsidian/plugins/obsidian-linter/manifest.json new file mode 100644 index 0000000..18b34d4 --- /dev/null +++ b/content/notes/.obsidian/plugins/obsidian-linter/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "obsidian-linter", + "name": "Linter", + "version": "1.28.0", + "minAppVersion": "1.5.7", + "description": "Formats and styles your notes. It can be used to format YAML tags, aliases, arrays, and metadata; footnotes; headings; spacing; math blocks; regular markdown contents like list, italics, and bold styles; and more with the use of custom rule options as well.", + "author": "Victor Tao", + "authorUrl": "https://github.com/platers", + "helpUrl": "https://platers.github.io/obsidian-linter/", + "isDesktopOnly": false +} diff --git a/content/notes/.obsidian/plugins/obsidian-linter/styles.css b/content/notes/.obsidian/plugins/obsidian-linter/styles.css new file mode 100644 index 0000000..ffbfc22 --- /dev/null +++ b/content/notes/.obsidian/plugins/obsidian-linter/styles.css @@ -0,0 +1 @@ +.linter-navigation-item{align-items:center;background-color:var(--background-primary-secondary-alt);border:1px solid var(--background-modifier-border);border-radius:100px;border-radius:8px 8px 2px 2px;cursor:pointer;display:flex;flex-direction:row;font-size:16px;font-weight:700;gap:4px;height:32px;overflow:hidden;padding:4px 6px;transition:color .25s ease-in-out,padding .25s ease-in-out,background-color .35s cubic-bezier(.45,.25,.83,.67),max-width .35s cubic-bezier(.57,.04,.58,1);white-space:nowrap}@media screen and (max-width:1325px){.linter-navigation-item.linter-desktop{max-width:32px}}@media screen and (max-width:800px){.linter-navigation-item.linter-mobile{max-width:32px}}.linter-navigation-item-icon,.linter-warning{padding-top:5px}.linter-navigation-item:hover{border-color:var(--interactive-accent-hover);border-bottom:0}.linter-navigation-item-selected{background-color:var(--interactive-accent)!important;border:1px solid var(--background-modifier-border);border-bottom:0;border-radius:8px 8px 2px 2px;color:var(--text-on-accent);max-width:100%!important;padding:4px 9px!important;transition:color .25s ease-in-out,padding .25s ease-in-out,background-color .35s cubic-bezier(.45,.25,.83,.67),max-width .45s cubic-bezier(.57,.04,.58,1) .2s}.linter{transition:transform .4s 0s}.linter-setting-title{align-items:baseline;display:flex;gap:30px;justify-content:space-between}.linter-setting-title.linter-mobile{justify-content:space-around}.linter-setting-title h1{font-weight:900;margin-bottom:12px;margin-top:6px}.linter-setting-header{margin-bottom:24px;overflow-x:auto;overflow-y:hidden}.linter-setting-header .linter-setting-tab-group{align-items:flex-end;display:flex;flex-wrap:wrap;width:100%}.linter-setting-tab-group{border-bottom:2px solid var(--background-modifier-border);margin-top:6px;padding-left:2px;padding-right:2px}.linter-setting-header .linter-tab-settings{border-left:2px solid transparent;border-right:2px solid transparent;cursor:pointer;font-weight:600;padding:6px 12px;white-space:nowrap}.linter-setting-header .linter-tab-settings:first-child{margin-left:6px}.linter-setting-header .linter-tab-settings.linter-tab-settings-active{border:2px solid var(--background-modifier-border);border-bottom-color:var(--background-primary);border-radius:2px;transform:translateY(2px)}.linter-navigation-item:not(.linter-navigation-item-selected)>span:nth-child(2),.linter-visually-hidden{border:0;clip:rect(0 0 0 0);clip-path:rect(0 0 0 0);height:auto;margin:0;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}textarea.full-width{margin-bottom:.8em;margin-top:.8em;min-height:10em;width:100%}.full-width-textbox-input-wrapper{position:relative}.settings-copy-button{margin:0 0 0 auto;padding:4px;position:absolute;right:.8em;top:.8em}.settings-copy-button svg.linter-clipboard path{fill:var(--text-faint)}.settings-copy-button svg.linter-success path{fill:var(--interactive-success)}.settings-copy-button:active,.settings-copy-button:hover{cursor:pointer}.settings-copy-button:active svg path,.settings-copy-button:hover svg path{fill:var(--text-accent-hover);transition:all .3s ease}.settings-copy-button:focus{outline:0}.linter-custom-regex-replacement-container div:last-child{border:none}.linter-custom-regex-replacement{border:none;border-bottom:var(--hr-thickness) solid;border-color:var(--hr-color);margin-bottom:15px}.linter-custom-regex-replacement-row2{flex-wrap:wrap}.linter-custom-regex-replacement-normal-input{width:40%}.linter-custom-regex-replacement-flags{width:15%}.linter-custom-regex-replacement-label{flex-direction:row-reverse}.linter-custom-regex-replacement-label-input{width:50%}.linter-files-to-ignore-container div:last-child{border:none}.linter-files-to-ignore{border:none;border-bottom:var(--hr-thickness) solid;border-color:var(--hr-color);margin-bottom:15px}.linter-files-to-ignore-normal-input{width:40%}.linter-files-to-ignore-flags{width:15%}.linter-no-border{border:none}.linter-border-bottom{border-bottom:1px solid var(--background-modifier-border);border-top:0;margin-bottom:.75em}.linter-no-padding-top{padding-top:0}.custom-row-description{margin-top:0}.modal-warn,.search-zero-state{font-weight:700}.modal-heading,.search-zero-state{text-align:center} \ No newline at end of file diff --git a/content/notes/.obsidian/plugins/obsidian-local-images-plus/main.js b/content/notes/.obsidian/plugins/obsidian-local-images-plus/main.js new file mode 100644 index 0000000..7bde8c3 --- /dev/null +++ b/content/notes/.obsidian/plugins/obsidian-local-images-plus/main.js @@ -0,0 +1,21405 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ROLLUP +if you want to view the source visit the plugins github repository +*/ + +'use strict'; + +var obsidian = require('obsidian'); +var path = require('path'); +var fs$2 = require('fs'); +var url = require('url'); + +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +var path__default = /*#__PURE__*/_interopDefaultLegacy(path); +var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs$2); + +/****************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { + var e = new Error(message); + return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; +}; + +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +function getDefaultExportFromCjs (x) { + return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; +} + +function getAugmentedNamespace(n) { + if (n.__esModule) return n; + var f = n.default; + if (typeof f == "function") { + var a = function a () { + if (this instanceof a) { + var args = [null]; + args.push.apply(args, arguments); + var Ctor = Function.bind.apply(f, args); + return new Ctor(); + } + return f.apply(this, arguments); + }; + a.prototype = f.prototype; + } else a = {}; + Object.defineProperty(a, '__esModule', {value: true}); + Object.keys(n).forEach(function (k) { + var d = Object.getOwnPropertyDescriptor(n, k); + Object.defineProperty(a, k, d.get ? d : { + enumerable: true, + get: function () { + return n[k]; + } + }); + }); + return a; +} + +var lib$3 = {}; + +var FsPromise = {}; + +/** + * Module convert fs functions to promise based functions + */ +Object.defineProperty(FsPromise, "__esModule", { value: true }); +FsPromise.readFile = FsPromise.writeFileSync = FsPromise.writeFile = FsPromise.read = FsPromise.open = FsPromise.close = FsPromise.stat = FsPromise.createReadStream = FsPromise.pathExists = void 0; +const fs$1 = fs__default["default"]; +FsPromise.pathExists = fs$1.existsSync; +FsPromise.createReadStream = fs$1.createReadStream; +async function stat(path) { + return new Promise((resolve, reject) => { + fs$1.stat(path, (err, stats) => { + if (err) + reject(err); + else + resolve(stats); + }); + }); +} +FsPromise.stat = stat; +async function close(fd) { + return new Promise((resolve, reject) => { + fs$1.close(fd, err => { + if (err) + reject(err); + else + resolve(); + }); + }); +} +FsPromise.close = close; +async function open(path, mode) { + return new Promise((resolve, reject) => { + fs$1.open(path, mode, (err, fd) => { + if (err) + reject(err); + else + resolve(fd); + }); + }); +} +FsPromise.open = open; +async function read(fd, buffer, offset, length, position) { + return new Promise((resolve, reject) => { + fs$1.read(fd, buffer, offset, length, position, (err, bytesRead, _buffer) => { + if (err) + reject(err); + else + resolve({ bytesRead, buffer: _buffer }); + }); + }); +} +FsPromise.read = read; +async function writeFile(path, data) { + return new Promise((resolve, reject) => { + fs$1.writeFile(path, data, err => { + if (err) + reject(err); + else + resolve(); + }); + }); +} +FsPromise.writeFile = writeFile; +function writeFileSync(path, data) { + fs$1.writeFileSync(path, data); +} +FsPromise.writeFileSync = writeFileSync; +async function readFile(path) { + return new Promise((resolve, reject) => { + fs$1.readFile(path, (err, buffer) => { + if (err) + reject(err); + else + resolve(buffer); + }); + }); +} +FsPromise.readFile = readFile; + +var core$3 = {}; + +var ReadStreamTokenizer$1 = {}; + +var AbstractTokenizer$1 = {}; + +var lib$2 = {}; + +var EndOfFileStream = {}; + +(function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.EndOfStreamError = exports.defaultMessages = void 0; + exports.defaultMessages = 'End-Of-Stream'; + /** + * Thrown on read operation of the end of file or stream has been reached + */ + class EndOfStreamError extends Error { + constructor() { + super(exports.defaultMessages); + } + } + exports.EndOfStreamError = EndOfStreamError; +} (EndOfFileStream)); + +var StreamReader = {}; + +var Deferred$1 = {}; + +Object.defineProperty(Deferred$1, "__esModule", { value: true }); +Deferred$1.Deferred = void 0; +class Deferred { + constructor() { + this.resolve = () => null; + this.reject = () => null; + this.promise = new Promise((resolve, reject) => { + this.reject = reject; + this.resolve = resolve; + }); + } +} +Deferred$1.Deferred = Deferred; + +(function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.StreamReader = exports.EndOfStreamError = void 0; + const EndOfFileStream_1 = EndOfFileStream; + const Deferred_1 = Deferred$1; + var EndOfFileStream_2 = EndOfFileStream; + Object.defineProperty(exports, "EndOfStreamError", { enumerable: true, get: function () { return EndOfFileStream_2.EndOfStreamError; } }); + const maxStreamReadSize = 1 * 1024 * 1024; // Maximum request length on read-stream operation + class StreamReader { + constructor(s) { + this.s = s; + /** + * Deferred used for postponed read request (as not data is yet available to read) + */ + this.deferred = null; + this.endOfStream = false; + /** + * Store peeked data + * @type {Array} + */ + this.peekQueue = []; + if (!s.read || !s.once) { + throw new Error('Expected an instance of stream.Readable'); + } + this.s.once('end', () => this.reject(new EndOfFileStream_1.EndOfStreamError())); + this.s.once('error', err => this.reject(err)); + this.s.once('close', () => this.reject(new Error('Stream closed'))); + } + /** + * Read ahead (peek) from stream. Subsequent read or peeks will return the same data + * @param uint8Array - Uint8Array (or Buffer) to store data read from stream in + * @param offset - Offset target + * @param length - Number of bytes to read + * @returns Number of bytes peeked + */ + async peek(uint8Array, offset, length) { + const bytesRead = await this.read(uint8Array, offset, length); + this.peekQueue.push(uint8Array.subarray(offset, offset + bytesRead)); // Put read data back to peek buffer + return bytesRead; + } + /** + * Read chunk from stream + * @param buffer - Target Uint8Array (or Buffer) to store data read from stream in + * @param offset - Offset target + * @param length - Number of bytes to read + * @returns Number of bytes read + */ + async read(buffer, offset, length) { + if (length === 0) { + return 0; + } + if (this.peekQueue.length === 0 && this.endOfStream) { + throw new EndOfFileStream_1.EndOfStreamError(); + } + let remaining = length; + let bytesRead = 0; + // consume peeked data first + while (this.peekQueue.length > 0 && remaining > 0) { + const peekData = this.peekQueue.pop(); // Front of queue + if (!peekData) + throw new Error('peekData should be defined'); + const lenCopy = Math.min(peekData.length, remaining); + buffer.set(peekData.subarray(0, lenCopy), offset + bytesRead); + bytesRead += lenCopy; + remaining -= lenCopy; + if (lenCopy < peekData.length) { + // remainder back to queue + this.peekQueue.push(peekData.subarray(lenCopy)); + } + } + // continue reading from stream if required + while (remaining > 0 && !this.endOfStream) { + const reqLen = Math.min(remaining, maxStreamReadSize); + const chunkLen = await this.readFromStream(buffer, offset + bytesRead, reqLen); + bytesRead += chunkLen; + if (chunkLen < reqLen) + break; + remaining -= chunkLen; + } + return bytesRead; + } + /** + * Read chunk from stream + * @param buffer Target Uint8Array (or Buffer) to store data read from stream in + * @param offset Offset target + * @param length Number of bytes to read + * @returns Number of bytes read + */ + async readFromStream(buffer, offset, length) { + const readBuffer = this.s.read(length); + if (readBuffer) { + buffer.set(readBuffer, offset); + return readBuffer.length; + } + else { + const request = { + buffer, + offset, + length, + deferred: new Deferred_1.Deferred() + }; + this.deferred = request.deferred; + this.s.once('readable', () => { + this.readDeferred(request); + }); + return request.deferred.promise; + } + } + /** + * Process deferred read request + * @param request Deferred read request + */ + readDeferred(request) { + const readBuffer = this.s.read(request.length); + if (readBuffer) { + request.buffer.set(readBuffer, request.offset); + request.deferred.resolve(readBuffer.length); + this.deferred = null; + } + else { + this.s.once('readable', () => { + this.readDeferred(request); + }); + } + } + reject(err) { + this.endOfStream = true; + if (this.deferred) { + this.deferred.reject(err); + this.deferred = null; + } + } + } + exports.StreamReader = StreamReader; +} (StreamReader)); + +(function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.StreamReader = exports.EndOfStreamError = void 0; + var EndOfFileStream_1 = EndOfFileStream; + Object.defineProperty(exports, "EndOfStreamError", { enumerable: true, get: function () { return EndOfFileStream_1.EndOfStreamError; } }); + var StreamReader_1 = StreamReader; + Object.defineProperty(exports, "StreamReader", { enumerable: true, get: function () { return StreamReader_1.StreamReader; } }); +} (lib$2)); + +Object.defineProperty(AbstractTokenizer$1, "__esModule", { value: true }); +AbstractTokenizer$1.AbstractTokenizer = void 0; +const peek_readable_1$3 = lib$2; +/** + * Core tokenizer + */ +class AbstractTokenizer { + constructor(fileInfo) { + /** + * Tokenizer-stream position + */ + this.position = 0; + this.numBuffer = new Uint8Array(8); + this.fileInfo = fileInfo ? fileInfo : {}; + } + /** + * Read a token from the tokenizer-stream + * @param token - The token to read + * @param position - If provided, the desired position in the tokenizer-stream + * @returns Promise with token data + */ + async readToken(token, position = this.position) { + const uint8Array = Buffer.alloc(token.len); + const len = await this.readBuffer(uint8Array, { position }); + if (len < token.len) + throw new peek_readable_1$3.EndOfStreamError(); + return token.get(uint8Array, 0); + } + /** + * Peek a token from the tokenizer-stream. + * @param token - Token to peek from the tokenizer-stream. + * @param position - Offset where to begin reading within the file. If position is null, data will be read from the current file position. + * @returns Promise with token data + */ + async peekToken(token, position = this.position) { + const uint8Array = Buffer.alloc(token.len); + const len = await this.peekBuffer(uint8Array, { position }); + if (len < token.len) + throw new peek_readable_1$3.EndOfStreamError(); + return token.get(uint8Array, 0); + } + /** + * Read a numeric token from the stream + * @param token - Numeric token + * @returns Promise with number + */ + async readNumber(token) { + const len = await this.readBuffer(this.numBuffer, { length: token.len }); + if (len < token.len) + throw new peek_readable_1$3.EndOfStreamError(); + return token.get(this.numBuffer, 0); + } + /** + * Read a numeric token from the stream + * @param token - Numeric token + * @returns Promise with number + */ + async peekNumber(token) { + const len = await this.peekBuffer(this.numBuffer, { length: token.len }); + if (len < token.len) + throw new peek_readable_1$3.EndOfStreamError(); + return token.get(this.numBuffer, 0); + } + /** + * Ignore number of bytes, advances the pointer in under tokenizer-stream. + * @param length - Number of bytes to ignore + * @return resolves the number of bytes ignored, equals length if this available, otherwise the number of bytes available + */ + async ignore(length) { + if (this.fileInfo.size !== undefined) { + const bytesLeft = this.fileInfo.size - this.position; + if (length > bytesLeft) { + this.position += bytesLeft; + return bytesLeft; + } + } + this.position += length; + return length; + } + async close() { + // empty + } + normalizeOptions(uint8Array, options) { + if (options && options.position !== undefined && options.position < this.position) { + throw new Error('`options.position` must be equal or greater than `tokenizer.position`'); + } + if (options) { + return { + mayBeLess: options.mayBeLess === true, + offset: options.offset ? options.offset : 0, + length: options.length ? options.length : (uint8Array.length - (options.offset ? options.offset : 0)), + position: options.position ? options.position : this.position + }; + } + return { + mayBeLess: false, + offset: 0, + length: uint8Array.length, + position: this.position + }; + } +} +AbstractTokenizer$1.AbstractTokenizer = AbstractTokenizer; + +Object.defineProperty(ReadStreamTokenizer$1, "__esModule", { value: true }); +ReadStreamTokenizer$1.ReadStreamTokenizer = void 0; +const AbstractTokenizer_1$2 = AbstractTokenizer$1; +const peek_readable_1$2 = lib$2; +const maxBufferSize = 256000; +class ReadStreamTokenizer extends AbstractTokenizer_1$2.AbstractTokenizer { + constructor(stream, fileInfo) { + super(fileInfo); + this.streamReader = new peek_readable_1$2.StreamReader(stream); + } + /** + * Get file information, an HTTP-client may implement this doing a HEAD request + * @return Promise with file information + */ + async getFileInfo() { + return this.fileInfo; + } + /** + * Read buffer from tokenizer + * @param uint8Array - Target Uint8Array to fill with data read from the tokenizer-stream + * @param options - Read behaviour options + * @returns Promise with number of bytes read + */ + async readBuffer(uint8Array, options) { + const normOptions = this.normalizeOptions(uint8Array, options); + const skipBytes = normOptions.position - this.position; + if (skipBytes > 0) { + await this.ignore(skipBytes); + return this.readBuffer(uint8Array, options); + } + else if (skipBytes < 0) { + throw new Error('`options.position` must be equal or greater than `tokenizer.position`'); + } + if (normOptions.length === 0) { + return 0; + } + const bytesRead = await this.streamReader.read(uint8Array, normOptions.offset, normOptions.length); + this.position += bytesRead; + if ((!options || !options.mayBeLess) && bytesRead < normOptions.length) { + throw new peek_readable_1$2.EndOfStreamError(); + } + return bytesRead; + } + /** + * Peek (read ahead) buffer from tokenizer + * @param uint8Array - Uint8Array (or Buffer) to write data to + * @param options - Read behaviour options + * @returns Promise with number of bytes peeked + */ + async peekBuffer(uint8Array, options) { + const normOptions = this.normalizeOptions(uint8Array, options); + let bytesRead = 0; + if (normOptions.position) { + const skipBytes = normOptions.position - this.position; + if (skipBytes > 0) { + const skipBuffer = new Uint8Array(normOptions.length + skipBytes); + bytesRead = await this.peekBuffer(skipBuffer, { mayBeLess: normOptions.mayBeLess }); + uint8Array.set(skipBuffer.subarray(skipBytes), normOptions.offset); + return bytesRead - skipBytes; + } + else if (skipBytes < 0) { + throw new Error('Cannot peek from a negative offset in a stream'); + } + } + if (normOptions.length > 0) { + try { + bytesRead = await this.streamReader.peek(uint8Array, normOptions.offset, normOptions.length); + } + catch (err) { + if (options && options.mayBeLess && err instanceof peek_readable_1$2.EndOfStreamError) { + return 0; + } + throw err; + } + if ((!normOptions.mayBeLess) && bytesRead < normOptions.length) { + throw new peek_readable_1$2.EndOfStreamError(); + } + } + return bytesRead; + } + async ignore(length) { + // debug(`ignore ${this.position}...${this.position + length - 1}`); + const bufSize = Math.min(maxBufferSize, length); + const buf = new Uint8Array(bufSize); + let totBytesRead = 0; + while (totBytesRead < length) { + const remaining = length - totBytesRead; + const bytesRead = await this.readBuffer(buf, { length: Math.min(bufSize, remaining) }); + if (bytesRead < 0) { + return bytesRead; + } + totBytesRead += bytesRead; + } + return totBytesRead; + } +} +ReadStreamTokenizer$1.ReadStreamTokenizer = ReadStreamTokenizer; + +var BufferTokenizer$1 = {}; + +Object.defineProperty(BufferTokenizer$1, "__esModule", { value: true }); +BufferTokenizer$1.BufferTokenizer = void 0; +const peek_readable_1$1 = lib$2; +const AbstractTokenizer_1$1 = AbstractTokenizer$1; +class BufferTokenizer extends AbstractTokenizer_1$1.AbstractTokenizer { + /** + * Construct BufferTokenizer + * @param uint8Array - Uint8Array to tokenize + * @param fileInfo - Pass additional file information to the tokenizer + */ + constructor(uint8Array, fileInfo) { + super(fileInfo); + this.uint8Array = uint8Array; + this.fileInfo.size = this.fileInfo.size ? this.fileInfo.size : uint8Array.length; + } + /** + * Read buffer from tokenizer + * @param uint8Array - Uint8Array to tokenize + * @param options - Read behaviour options + * @returns {Promise} + */ + async readBuffer(uint8Array, options) { + if (options && options.position) { + if (options.position < this.position) { + throw new Error('`options.position` must be equal or greater than `tokenizer.position`'); + } + this.position = options.position; + } + const bytesRead = await this.peekBuffer(uint8Array, options); + this.position += bytesRead; + return bytesRead; + } + /** + * Peek (read ahead) buffer from tokenizer + * @param uint8Array + * @param options - Read behaviour options + * @returns {Promise} + */ + async peekBuffer(uint8Array, options) { + const normOptions = this.normalizeOptions(uint8Array, options); + const bytes2read = Math.min(this.uint8Array.length - normOptions.position, normOptions.length); + if ((!normOptions.mayBeLess) && bytes2read < normOptions.length) { + throw new peek_readable_1$1.EndOfStreamError(); + } + else { + uint8Array.set(this.uint8Array.subarray(normOptions.position, normOptions.position + bytes2read), normOptions.offset); + return bytes2read; + } + } + async close() { + // empty + } +} +BufferTokenizer$1.BufferTokenizer = BufferTokenizer; + +(function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.fromBuffer = exports.fromStream = exports.EndOfStreamError = void 0; + const ReadStreamTokenizer_1 = ReadStreamTokenizer$1; + const BufferTokenizer_1 = BufferTokenizer$1; + var peek_readable_1 = lib$2; + Object.defineProperty(exports, "EndOfStreamError", { enumerable: true, get: function () { return peek_readable_1.EndOfStreamError; } }); + /** + * Construct ReadStreamTokenizer from given Stream. + * Will set fileSize, if provided given Stream has set the .path property/ + * @param stream - Read from Node.js Stream.Readable + * @param fileInfo - Pass the file information, like size and MIME-type of the corresponding stream. + * @returns ReadStreamTokenizer + */ + function fromStream(stream, fileInfo) { + fileInfo = fileInfo ? fileInfo : {}; + return new ReadStreamTokenizer_1.ReadStreamTokenizer(stream, fileInfo); + } + exports.fromStream = fromStream; + /** + * Construct ReadStreamTokenizer from given Buffer. + * @param uint8Array - Uint8Array to tokenize + * @param fileInfo - Pass additional file information to the tokenizer + * @returns BufferTokenizer + */ + function fromBuffer(uint8Array, fileInfo) { + return new BufferTokenizer_1.BufferTokenizer(uint8Array, fileInfo); + } + exports.fromBuffer = fromBuffer; +} (core$3)); + +var FileTokenizer$1 = {}; + +Object.defineProperty(FileTokenizer$1, "__esModule", { value: true }); +FileTokenizer$1.fromFile = FileTokenizer$1.FileTokenizer = void 0; +const AbstractTokenizer_1 = AbstractTokenizer$1; +const peek_readable_1 = lib$2; +const fs = FsPromise; +class FileTokenizer extends AbstractTokenizer_1.AbstractTokenizer { + constructor(fd, fileInfo) { + super(fileInfo); + this.fd = fd; + } + /** + * Read buffer from file + * @param uint8Array - Uint8Array to write result to + * @param options - Read behaviour options + * @returns Promise number of bytes read + */ + async readBuffer(uint8Array, options) { + const normOptions = this.normalizeOptions(uint8Array, options); + this.position = normOptions.position; + const res = await fs.read(this.fd, uint8Array, normOptions.offset, normOptions.length, normOptions.position); + this.position += res.bytesRead; + if (res.bytesRead < normOptions.length && (!options || !options.mayBeLess)) { + throw new peek_readable_1.EndOfStreamError(); + } + return res.bytesRead; + } + /** + * Peek buffer from file + * @param uint8Array - Uint8Array (or Buffer) to write data to + * @param options - Read behaviour options + * @returns Promise number of bytes read + */ + async peekBuffer(uint8Array, options) { + const normOptions = this.normalizeOptions(uint8Array, options); + const res = await fs.read(this.fd, uint8Array, normOptions.offset, normOptions.length, normOptions.position); + if ((!normOptions.mayBeLess) && res.bytesRead < normOptions.length) { + throw new peek_readable_1.EndOfStreamError(); + } + return res.bytesRead; + } + async close() { + return fs.close(this.fd); + } +} +FileTokenizer$1.FileTokenizer = FileTokenizer; +async function fromFile$1(sourceFilePath) { + const stat = await fs.stat(sourceFilePath); + if (!stat.isFile) { + throw new Error(`File not a file: ${sourceFilePath}`); + } + const fd = await fs.open(sourceFilePath, 'r'); + return new FileTokenizer(fd, { path: sourceFilePath, size: stat.size }); +} +FileTokenizer$1.fromFile = fromFile$1; + +(function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.fromStream = exports.fromBuffer = exports.EndOfStreamError = exports.fromFile = void 0; + const fs = FsPromise; + const core = core$3; + var FileTokenizer_1 = FileTokenizer$1; + Object.defineProperty(exports, "fromFile", { enumerable: true, get: function () { return FileTokenizer_1.fromFile; } }); + var core_1 = core$3; + Object.defineProperty(exports, "EndOfStreamError", { enumerable: true, get: function () { return core_1.EndOfStreamError; } }); + Object.defineProperty(exports, "fromBuffer", { enumerable: true, get: function () { return core_1.fromBuffer; } }); + /** + * Construct ReadStreamTokenizer from given Stream. + * Will set fileSize, if provided given Stream has set the .path property. + * @param stream - Node.js Stream.Readable + * @param fileInfo - Pass additional file information to the tokenizer + * @returns Tokenizer + */ + async function fromStream(stream, fileInfo) { + fileInfo = fileInfo ? fileInfo : {}; + if (stream.path) { + const stat = await fs.stat(stream.path); + fileInfo.path = stream.path; + fileInfo.size = stat.size; + } + return core.fromStream(stream, fileInfo); + } + exports.fromStream = fromStream; +} (lib$3)); + +var lib$1 = {}; + +var ieee754 = {}; + +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ + +ieee754.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m; + var eLen = (nBytes * 8) - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var nBits = -7; + var i = isLE ? (nBytes - 1) : 0; + var d = isLE ? -1 : 1; + var s = buffer[offset + i]; + + i += d; + + e = s & ((1 << (-nBits)) - 1); + s >>= (-nBits); + nBits += eLen; + for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1); + e >>= (-nBits); + nBits += mLen; + for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen); + e = e - eBias; + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) +}; + +ieee754.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c; + var eLen = (nBytes * 8) - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0); + var i = isLE ? 0 : (nBytes - 1); + var d = isLE ? 1 : -1; + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0; + + value = Math.abs(value); + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0; + e = eMax; + } else { + e = Math.floor(Math.log(value) / Math.LN2); + if (value * (c = Math.pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * Math.pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = ((value * c) - 1) * Math.pow(2, mLen); + e = e + eBias; + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen); + e = 0; + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m; + eLen += mLen; + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128; +}; + +(function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.AnsiStringType = exports.StringType = exports.BufferType = exports.Uint8ArrayType = exports.IgnoreType = exports.Float80_LE = exports.Float80_BE = exports.Float64_LE = exports.Float64_BE = exports.Float32_LE = exports.Float32_BE = exports.Float16_LE = exports.Float16_BE = exports.INT64_BE = exports.UINT64_BE = exports.INT64_LE = exports.UINT64_LE = exports.INT32_LE = exports.INT32_BE = exports.INT24_BE = exports.INT24_LE = exports.INT16_LE = exports.INT16_BE = exports.INT8 = exports.UINT32_BE = exports.UINT32_LE = exports.UINT24_BE = exports.UINT24_LE = exports.UINT16_BE = exports.UINT16_LE = exports.UINT8 = void 0; + const ieee754$1 = ieee754; + // Primitive types + function dv(array) { + return new DataView(array.buffer, array.byteOffset); + } + /** + * 8-bit unsigned integer + */ + exports.UINT8 = { + len: 1, + get(array, offset) { + return dv(array).getUint8(offset); + }, + put(array, offset, value) { + dv(array).setUint8(offset, value); + return offset + 1; + } + }; + /** + * 16-bit unsigned integer, Little Endian byte order + */ + exports.UINT16_LE = { + len: 2, + get(array, offset) { + return dv(array).getUint16(offset, true); + }, + put(array, offset, value) { + dv(array).setUint16(offset, value, true); + return offset + 2; + } + }; + /** + * 16-bit unsigned integer, Big Endian byte order + */ + exports.UINT16_BE = { + len: 2, + get(array, offset) { + return dv(array).getUint16(offset); + }, + put(array, offset, value) { + dv(array).setUint16(offset, value); + return offset + 2; + } + }; + /** + * 24-bit unsigned integer, Little Endian byte order + */ + exports.UINT24_LE = { + len: 3, + get(array, offset) { + const dataView = dv(array); + return dataView.getUint8(offset) + (dataView.getUint16(offset + 1, true) << 8); + }, + put(array, offset, value) { + const dataView = dv(array); + dataView.setUint8(offset, value & 0xff); + dataView.setUint16(offset + 1, value >> 8, true); + return offset + 3; + } + }; + /** + * 24-bit unsigned integer, Big Endian byte order + */ + exports.UINT24_BE = { + len: 3, + get(array, offset) { + const dataView = dv(array); + return (dataView.getUint16(offset) << 8) + dataView.getUint8(offset + 2); + }, + put(array, offset, value) { + const dataView = dv(array); + dataView.setUint16(offset, value >> 8); + dataView.setUint8(offset + 2, value & 0xff); + return offset + 3; + } + }; + /** + * 32-bit unsigned integer, Little Endian byte order + */ + exports.UINT32_LE = { + len: 4, + get(array, offset) { + return dv(array).getUint32(offset, true); + }, + put(array, offset, value) { + dv(array).setUint32(offset, value, true); + return offset + 4; + } + }; + /** + * 32-bit unsigned integer, Big Endian byte order + */ + exports.UINT32_BE = { + len: 4, + get(array, offset) { + return dv(array).getUint32(offset); + }, + put(array, offset, value) { + dv(array).setUint32(offset, value); + return offset + 4; + } + }; + /** + * 8-bit signed integer + */ + exports.INT8 = { + len: 1, + get(array, offset) { + return dv(array).getInt8(offset); + }, + put(array, offset, value) { + dv(array).setInt8(offset, value); + return offset + 1; + } + }; + /** + * 16-bit signed integer, Big Endian byte order + */ + exports.INT16_BE = { + len: 2, + get(array, offset) { + return dv(array).getInt16(offset); + }, + put(array, offset, value) { + dv(array).setInt16(offset, value); + return offset + 2; + } + }; + /** + * 16-bit signed integer, Little Endian byte order + */ + exports.INT16_LE = { + len: 2, + get(array, offset) { + return dv(array).getInt16(offset, true); + }, + put(array, offset, value) { + dv(array).setInt16(offset, value, true); + return offset + 2; + } + }; + /** + * 24-bit signed integer, Little Endian byte order + */ + exports.INT24_LE = { + len: 3, + get(array, offset) { + const unsigned = exports.UINT24_LE.get(array, offset); + return unsigned > 0x7fffff ? unsigned - 0x1000000 : unsigned; + }, + put(array, offset, value) { + const dataView = dv(array); + dataView.setUint8(offset, value & 0xff); + dataView.setUint16(offset + 1, value >> 8, true); + return offset + 3; + } + }; + /** + * 24-bit signed integer, Big Endian byte order + */ + exports.INT24_BE = { + len: 3, + get(array, offset) { + const unsigned = exports.UINT24_BE.get(array, offset); + return unsigned > 0x7fffff ? unsigned - 0x1000000 : unsigned; + }, + put(array, offset, value) { + const dataView = dv(array); + dataView.setUint16(offset, value >> 8); + dataView.setUint8(offset + 2, value & 0xff); + return offset + 3; + } + }; + /** + * 32-bit signed integer, Big Endian byte order + */ + exports.INT32_BE = { + len: 4, + get(array, offset) { + return dv(array).getInt32(offset); + }, + put(array, offset, value) { + dv(array).setInt32(offset, value); + return offset + 4; + } + }; + /** + * 32-bit signed integer, Big Endian byte order + */ + exports.INT32_LE = { + len: 4, + get(array, offset) { + return dv(array).getInt32(offset, true); + }, + put(array, offset, value) { + dv(array).setInt32(offset, value, true); + return offset + 4; + } + }; + /** + * 64-bit unsigned integer, Little Endian byte order + */ + exports.UINT64_LE = { + len: 8, + get(array, offset) { + return dv(array).getBigUint64(offset, true); + }, + put(array, offset, value) { + dv(array).setBigUint64(offset, value, true); + return offset + 8; + } + }; + /** + * 64-bit signed integer, Little Endian byte order + */ + exports.INT64_LE = { + len: 8, + get(array, offset) { + return dv(array).getBigInt64(offset, true); + }, + put(array, offset, value) { + dv(array).setBigInt64(offset, value, true); + return offset + 8; + } + }; + /** + * 64-bit unsigned integer, Big Endian byte order + */ + exports.UINT64_BE = { + len: 8, + get(array, offset) { + return dv(array).getBigUint64(offset); + }, + put(array, offset, value) { + dv(array).setBigUint64(offset, value); + return offset + 8; + } + }; + /** + * 64-bit signed integer, Big Endian byte order + */ + exports.INT64_BE = { + len: 8, + get(array, offset) { + return dv(array).getBigInt64(offset); + }, + put(array, offset, value) { + dv(array).setBigInt64(offset, value); + return offset + 8; + } + }; + /** + * IEEE 754 16-bit (half precision) float, big endian + */ + exports.Float16_BE = { + len: 2, + get(dataView, offset) { + return ieee754$1.read(dataView, offset, false, 10, this.len); + }, + put(dataView, offset, value) { + ieee754$1.write(dataView, value, offset, false, 10, this.len); + return offset + this.len; + } + }; + /** + * IEEE 754 16-bit (half precision) float, little endian + */ + exports.Float16_LE = { + len: 2, + get(array, offset) { + return ieee754$1.read(array, offset, true, 10, this.len); + }, + put(array, offset, value) { + ieee754$1.write(array, value, offset, true, 10, this.len); + return offset + this.len; + } + }; + /** + * IEEE 754 32-bit (single precision) float, big endian + */ + exports.Float32_BE = { + len: 4, + get(array, offset) { + return dv(array).getFloat32(offset); + }, + put(array, offset, value) { + dv(array).setFloat32(offset, value); + return offset + 4; + } + }; + /** + * IEEE 754 32-bit (single precision) float, little endian + */ + exports.Float32_LE = { + len: 4, + get(array, offset) { + return dv(array).getFloat32(offset, true); + }, + put(array, offset, value) { + dv(array).setFloat32(offset, value, true); + return offset + 4; + } + }; + /** + * IEEE 754 64-bit (double precision) float, big endian + */ + exports.Float64_BE = { + len: 8, + get(array, offset) { + return dv(array).getFloat64(offset); + }, + put(array, offset, value) { + dv(array).setFloat64(offset, value); + return offset + 8; + } + }; + /** + * IEEE 754 64-bit (double precision) float, little endian + */ + exports.Float64_LE = { + len: 8, + get(array, offset) { + return dv(array).getFloat64(offset, true); + }, + put(array, offset, value) { + dv(array).setFloat64(offset, value, true); + return offset + 8; + } + }; + /** + * IEEE 754 80-bit (extended precision) float, big endian + */ + exports.Float80_BE = { + len: 10, + get(array, offset) { + return ieee754$1.read(array, offset, false, 63, this.len); + }, + put(array, offset, value) { + ieee754$1.write(array, value, offset, false, 63, this.len); + return offset + this.len; + } + }; + /** + * IEEE 754 80-bit (extended precision) float, little endian + */ + exports.Float80_LE = { + len: 10, + get(array, offset) { + return ieee754$1.read(array, offset, true, 63, this.len); + }, + put(array, offset, value) { + ieee754$1.write(array, value, offset, true, 63, this.len); + return offset + this.len; + } + }; + /** + * Ignore a given number of bytes + */ + class IgnoreType { + /** + * @param len number of bytes to ignore + */ + constructor(len) { + this.len = len; + } + // ToDo: don't read, but skip data + get(array, off) { + } + } + exports.IgnoreType = IgnoreType; + class Uint8ArrayType { + constructor(len) { + this.len = len; + } + get(array, offset) { + return array.subarray(offset, offset + this.len); + } + } + exports.Uint8ArrayType = Uint8ArrayType; + class BufferType { + constructor(len) { + this.len = len; + } + get(uint8Array, off) { + return Buffer.from(uint8Array.subarray(off, off + this.len)); + } + } + exports.BufferType = BufferType; + /** + * Consume a fixed number of bytes from the stream and return a string with a specified encoding. + */ + class StringType { + constructor(len, encoding) { + this.len = len; + this.encoding = encoding; + } + get(uint8Array, offset) { + return Buffer.from(uint8Array).toString(this.encoding, offset, offset + this.len); + } + } + exports.StringType = StringType; + /** + * ANSI Latin 1 String + * Using windows-1252 / ISO 8859-1 decoding + */ + class AnsiStringType { + constructor(len) { + this.len = len; + } + static decode(buffer, offset, until) { + let str = ''; + for (let i = offset; i < until; ++i) { + str += AnsiStringType.codePointToString(AnsiStringType.singleByteDecoder(buffer[i])); + } + return str; + } + static inRange(a, min, max) { + return min <= a && a <= max; + } + static codePointToString(cp) { + if (cp <= 0xFFFF) { + return String.fromCharCode(cp); + } + else { + cp -= 0x10000; + return String.fromCharCode((cp >> 10) + 0xD800, (cp & 0x3FF) + 0xDC00); + } + } + static singleByteDecoder(bite) { + if (AnsiStringType.inRange(bite, 0x00, 0x7F)) { + return bite; + } + const codePoint = AnsiStringType.windows1252[bite - 0x80]; + if (codePoint === null) { + throw Error('invaliding encoding'); + } + return codePoint; + } + get(buffer, offset = 0) { + return AnsiStringType.decode(buffer, offset, offset + this.len); + } + } + exports.AnsiStringType = AnsiStringType; + AnsiStringType.windows1252 = [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, + 8249, 338, 141, 381, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, + 8482, 353, 8250, 339, 157, 382, 376, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255]; +} (lib$1)); + +var util$4 = {}; + +util$4.stringToBytes = string => [...string].map(character => character.charCodeAt(0)); + +/** +Checks whether the TAR checksum is valid. + +@param {Buffer} buffer - The TAR header `[offset ... offset + 512]`. +@param {number} offset - TAR header offset. +@returns {boolean} `true` if the TAR checksum is valid, otherwise `false`. +*/ +util$4.tarHeaderChecksumMatches = (buffer, offset = 0) => { + const readSum = parseInt(buffer.toString('utf8', 148, 154).replace(/\0.*$/, '').trim(), 8); // Read sum in header + if (isNaN(readSum)) { + return false; + } + + let sum = 8 * 0x20; // Initialize signed bit sum + + for (let i = offset; i < offset + 148; i++) { + sum += buffer[i]; + } + + for (let i = offset + 156; i < offset + 512; i++) { + sum += buffer[i]; + } + + return readSum === sum; +}; + +/** +ID3 UINT32 sync-safe tokenizer token. +28 bits (representing up to 256MB) integer, the msb is 0 to avoid "false syncsignals". +*/ +util$4.uint32SyncSafeToken = { + get: (buffer, offset) => { + return (buffer[offset + 3] & 0x7F) | ((buffer[offset + 2]) << 7) | ((buffer[offset + 1]) << 14) | ((buffer[offset]) << 21); + }, + len: 4 +}; + +var supported$1 = { + extensions: [ + 'jpg', + 'png', + 'apng', + 'gif', + 'webp', + 'flif', + 'xcf', + 'cr2', + 'cr3', + 'orf', + 'arw', + 'dng', + 'nef', + 'rw2', + 'raf', + 'tif', + 'bmp', + 'icns', + 'jxr', + 'psd', + 'indd', + 'zip', + 'tar', + 'rar', + 'gz', + 'bz2', + '7z', + 'dmg', + 'mp4', + 'mid', + 'mkv', + 'webm', + 'mov', + 'avi', + 'mpg', + 'mp2', + 'mp3', + 'm4a', + 'oga', + 'ogg', + 'ogv', + 'opus', + 'flac', + 'wav', + 'spx', + 'amr', + 'pdf', + 'epub', + 'exe', + 'swf', + 'rtf', + 'wasm', + 'woff', + 'woff2', + 'eot', + 'ttf', + 'otf', + 'ico', + 'flv', + 'ps', + 'xz', + 'sqlite', + 'nes', + 'crx', + 'xpi', + 'cab', + 'deb', + 'ar', + 'rpm', + 'Z', + 'lz', + 'cfb', + 'mxf', + 'mts', + 'blend', + 'bpg', + 'docx', + 'pptx', + 'xlsx', + '3gp', + '3g2', + 'jp2', + 'jpm', + 'jpx', + 'mj2', + 'aif', + 'qcp', + 'odt', + 'ods', + 'odp', + 'xml', + 'mobi', + 'heic', + 'cur', + 'ktx', + 'ape', + 'wv', + 'dcm', + 'ics', + 'glb', + 'pcap', + 'dsf', + 'lnk', + 'alias', + 'voc', + 'ac3', + 'm4v', + 'm4p', + 'm4b', + 'f4v', + 'f4p', + 'f4b', + 'f4a', + 'mie', + 'asf', + 'ogm', + 'ogx', + 'mpc', + 'arrow', + 'shp', + 'aac', + 'mp1', + 'it', + 's3m', + 'xm', + 'ai', + 'skp', + 'avif', + 'eps', + 'lzh', + 'pgp', + 'asar', + 'stl', + 'chm', + '3mf', + 'zst', + 'jxl', + 'vcf' + ], + mimeTypes: [ + 'image/jpeg', + 'image/png', + 'image/gif', + 'image/webp', + 'image/flif', + 'image/x-xcf', + 'image/x-canon-cr2', + 'image/x-canon-cr3', + 'image/tiff', + 'image/bmp', + 'image/vnd.ms-photo', + 'image/vnd.adobe.photoshop', + 'application/x-indesign', + 'application/epub+zip', + 'application/x-xpinstall', + 'application/vnd.oasis.opendocument.text', + 'application/vnd.oasis.opendocument.spreadsheet', + 'application/vnd.oasis.opendocument.presentation', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'application/zip', + 'application/x-tar', + 'application/x-rar-compressed', + 'application/gzip', + 'application/x-bzip2', + 'application/x-7z-compressed', + 'application/x-apple-diskimage', + 'application/x-apache-arrow', + 'video/mp4', + 'audio/midi', + 'video/x-matroska', + 'video/webm', + 'video/quicktime', + 'video/vnd.avi', + 'audio/vnd.wave', + 'audio/qcelp', + 'audio/x-ms-asf', + 'video/x-ms-asf', + 'application/vnd.ms-asf', + 'video/mpeg', + 'video/3gpp', + 'audio/mpeg', + 'audio/mp4', // RFC 4337 + 'audio/opus', + 'video/ogg', + 'audio/ogg', + 'application/ogg', + 'audio/x-flac', + 'audio/ape', + 'audio/wavpack', + 'audio/amr', + 'application/pdf', + 'application/x-msdownload', + 'application/x-shockwave-flash', + 'application/rtf', + 'application/wasm', + 'font/woff', + 'font/woff2', + 'application/vnd.ms-fontobject', + 'font/ttf', + 'font/otf', + 'image/x-icon', + 'video/x-flv', + 'application/postscript', + 'application/eps', + 'application/x-xz', + 'application/x-sqlite3', + 'application/x-nintendo-nes-rom', + 'application/x-google-chrome-extension', + 'application/vnd.ms-cab-compressed', + 'application/x-deb', + 'application/x-unix-archive', + 'application/x-rpm', + 'application/x-compress', + 'application/x-lzip', + 'application/x-cfb', + 'application/x-mie', + 'application/mxf', + 'video/mp2t', + 'application/x-blender', + 'image/bpg', + 'image/jp2', + 'image/jpx', + 'image/jpm', + 'image/mj2', + 'audio/aiff', + 'application/xml', + 'application/x-mobipocket-ebook', + 'image/heif', + 'image/heif-sequence', + 'image/heic', + 'image/heic-sequence', + 'image/icns', + 'image/ktx', + 'application/dicom', + 'audio/x-musepack', + 'text/calendar', + 'text/vcard', + 'model/gltf-binary', + 'application/vnd.tcpdump.pcap', + 'audio/x-dsf', // Non-standard + 'application/x.ms.shortcut', // Invented by us + 'application/x.apple.alias', // Invented by us + 'audio/x-voc', + 'audio/vnd.dolby.dd-raw', + 'audio/x-m4a', + 'image/apng', + 'image/x-olympus-orf', + 'image/x-sony-arw', + 'image/x-adobe-dng', + 'image/x-nikon-nef', + 'image/x-panasonic-rw2', + 'image/x-fujifilm-raf', + 'video/x-m4v', + 'video/3gpp2', + 'application/x-esri-shape', + 'audio/aac', + 'audio/x-it', + 'audio/x-s3m', + 'audio/x-xm', + 'video/MP1S', + 'video/MP2P', + 'application/vnd.sketchup.skp', + 'image/avif', + 'application/x-lzh-compressed', + 'application/pgp-encrypted', + 'application/x-asar', + 'model/stl', + 'application/vnd.ms-htmlhelp', + 'model/3mf', + 'image/jxl', + 'application/zstd' + ] +}; + +const Token = lib$1; +const strtok3$1 = core$3; +const { + stringToBytes, + tarHeaderChecksumMatches, + uint32SyncSafeToken +} = util$4; +const supported = supported$1; + +const minimumBytes = 4100; // A fair amount of file-types are detectable within this range + +async function fromStream(stream) { + const tokenizer = await strtok3$1.fromStream(stream); + try { + return await fromTokenizer(tokenizer); + } finally { + await tokenizer.close(); + } +} + +async function fromBuffer(input) { + if (!(input instanceof Uint8Array || input instanceof ArrayBuffer || Buffer.isBuffer(input))) { + throw new TypeError(`Expected the \`input\` argument to be of type \`Uint8Array\` or \`Buffer\` or \`ArrayBuffer\`, got \`${typeof input}\``); + } + + const buffer = input instanceof Buffer ? input : Buffer.from(input); + + if (!(buffer && buffer.length > 1)) { + return; + } + + const tokenizer = strtok3$1.fromBuffer(buffer); + return fromTokenizer(tokenizer); +} + +function _check(buffer, headers, options) { + options = { + offset: 0, + ...options + }; + + for (const [index, header] of headers.entries()) { + // If a bitmask is set + if (options.mask) { + // If header doesn't equal `buf` with bits masked off + if (header !== (options.mask[index] & buffer[index + options.offset])) { + return false; + } + } else if (header !== buffer[index + options.offset]) { + return false; + } + } + + return true; +} + +async function fromTokenizer(tokenizer) { + try { + return _fromTokenizer(tokenizer); + } catch (error) { + if (!(error instanceof strtok3$1.EndOfStreamError)) { + throw error; + } + } +} + +async function _fromTokenizer(tokenizer) { + let buffer = Buffer.alloc(minimumBytes); + const bytesRead = 12; + const check = (header, options) => _check(buffer, header, options); + const checkString = (header, options) => check(stringToBytes(header), options); + + // Keep reading until EOF if the file size is unknown. + if (!tokenizer.fileInfo.size) { + tokenizer.fileInfo.size = Number.MAX_SAFE_INTEGER; + } + + await tokenizer.peekBuffer(buffer, {length: bytesRead, mayBeLess: true}); + + // -- 2-byte signatures -- + + if (check([0x42, 0x4D])) { + return { + ext: 'bmp', + mime: 'image/bmp' + }; + } + + if (check([0x0B, 0x77])) { + return { + ext: 'ac3', + mime: 'audio/vnd.dolby.dd-raw' + }; + } + + if (check([0x78, 0x01])) { + return { + ext: 'dmg', + mime: 'application/x-apple-diskimage' + }; + } + + if (check([0x4D, 0x5A])) { + return { + ext: 'exe', + mime: 'application/x-msdownload' + }; + } + + if (check([0x25, 0x21])) { + await tokenizer.peekBuffer(buffer, {length: 24, mayBeLess: true}); + + if (checkString('PS-Adobe-', {offset: 2}) && + checkString(' EPSF-', {offset: 14})) { + return { + ext: 'eps', + mime: 'application/eps' + }; + } + + return { + ext: 'ps', + mime: 'application/postscript' + }; + } + + if ( + check([0x1F, 0xA0]) || + check([0x1F, 0x9D]) + ) { + return { + ext: 'Z', + mime: 'application/x-compress' + }; + } + + // -- 3-byte signatures -- + + if (check([0xFF, 0xD8, 0xFF])) { + return { + ext: 'jpg', + mime: 'image/jpeg' + }; + } + + if (check([0x49, 0x49, 0xBC])) { + return { + ext: 'jxr', + mime: 'image/vnd.ms-photo' + }; + } + + if (check([0x1F, 0x8B, 0x8])) { + return { + ext: 'gz', + mime: 'application/gzip' + }; + } + + if (check([0x42, 0x5A, 0x68])) { + return { + ext: 'bz2', + mime: 'application/x-bzip2' + }; + } + + if (checkString('ID3')) { + await tokenizer.ignore(6); // Skip ID3 header until the header size + const id3HeaderLen = await tokenizer.readToken(uint32SyncSafeToken); + if (tokenizer.position + id3HeaderLen > tokenizer.fileInfo.size) { + // Guess file type based on ID3 header for backward compatibility + return { + ext: 'mp3', + mime: 'audio/mpeg' + }; + } + + await tokenizer.ignore(id3HeaderLen); + return fromTokenizer(tokenizer); // Skip ID3 header, recursion + } + + // Musepack, SV7 + if (checkString('MP+')) { + return { + ext: 'mpc', + mime: 'audio/x-musepack' + }; + } + + if ( + (buffer[0] === 0x43 || buffer[0] === 0x46) && + check([0x57, 0x53], {offset: 1}) + ) { + return { + ext: 'swf', + mime: 'application/x-shockwave-flash' + }; + } + + // -- 4-byte signatures -- + + if (check([0x47, 0x49, 0x46])) { + return { + ext: 'gif', + mime: 'image/gif' + }; + } + + if (checkString('FLIF')) { + return { + ext: 'flif', + mime: 'image/flif' + }; + } + + if (checkString('8BPS')) { + return { + ext: 'psd', + mime: 'image/vnd.adobe.photoshop' + }; + } + + if (checkString('WEBP', {offset: 8})) { + return { + ext: 'webp', + mime: 'image/webp' + }; + } + + // Musepack, SV8 + if (checkString('MPCK')) { + return { + ext: 'mpc', + mime: 'audio/x-musepack' + }; + } + + if (checkString('FORM')) { + return { + ext: 'aif', + mime: 'audio/aiff' + }; + } + + if (checkString('icns', {offset: 0})) { + return { + ext: 'icns', + mime: 'image/icns' + }; + } + + // Zip-based file formats + // Need to be before the `zip` check + if (check([0x50, 0x4B, 0x3, 0x4])) { // Local file header signature + try { + while (tokenizer.position + 30 < tokenizer.fileInfo.size) { + await tokenizer.readBuffer(buffer, {length: 30}); + + // https://en.wikipedia.org/wiki/Zip_(file_format)#File_headers + const zipHeader = { + compressedSize: buffer.readUInt32LE(18), + uncompressedSize: buffer.readUInt32LE(22), + filenameLength: buffer.readUInt16LE(26), + extraFieldLength: buffer.readUInt16LE(28) + }; + + zipHeader.filename = await tokenizer.readToken(new Token.StringType(zipHeader.filenameLength, 'utf-8')); + await tokenizer.ignore(zipHeader.extraFieldLength); + + // Assumes signed `.xpi` from addons.mozilla.org + if (zipHeader.filename === 'META-INF/mozilla.rsa') { + return { + ext: 'xpi', + mime: 'application/x-xpinstall' + }; + } + + if (zipHeader.filename.endsWith('.rels') || zipHeader.filename.endsWith('.xml')) { + const type = zipHeader.filename.split('/')[0]; + switch (type) { + case '_rels': + break; + case 'word': + return { + ext: 'docx', + mime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' + }; + case 'ppt': + return { + ext: 'pptx', + mime: 'application/vnd.openxmlformats-officedocument.presentationml.presentation' + }; + case 'xl': + return { + ext: 'xlsx', + mime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + }; + default: + break; + } + } + + if (zipHeader.filename.startsWith('xl/')) { + return { + ext: 'xlsx', + mime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + }; + } + + if (zipHeader.filename.startsWith('3D/') && zipHeader.filename.endsWith('.model')) { + return { + ext: '3mf', + mime: 'model/3mf' + }; + } + + // The docx, xlsx and pptx file types extend the Office Open XML file format: + // https://en.wikipedia.org/wiki/Office_Open_XML_file_formats + // We look for: + // - one entry named '[Content_Types].xml' or '_rels/.rels', + // - one entry indicating specific type of file. + // MS Office, OpenOffice and LibreOffice may put the parts in different order, so the check should not rely on it. + if (zipHeader.filename === 'mimetype' && zipHeader.compressedSize === zipHeader.uncompressedSize) { + const mimeType = await tokenizer.readToken(new Token.StringType(zipHeader.compressedSize, 'utf-8')); + + switch (mimeType) { + case 'application/epub+zip': + return { + ext: 'epub', + mime: 'application/epub+zip' + }; + case 'application/vnd.oasis.opendocument.text': + return { + ext: 'odt', + mime: 'application/vnd.oasis.opendocument.text' + }; + case 'application/vnd.oasis.opendocument.spreadsheet': + return { + ext: 'ods', + mime: 'application/vnd.oasis.opendocument.spreadsheet' + }; + case 'application/vnd.oasis.opendocument.presentation': + return { + ext: 'odp', + mime: 'application/vnd.oasis.opendocument.presentation' + }; + default: + } + } + + // Try to find next header manually when current one is corrupted + if (zipHeader.compressedSize === 0) { + let nextHeaderIndex = -1; + + while (nextHeaderIndex < 0 && (tokenizer.position < tokenizer.fileInfo.size)) { + await tokenizer.peekBuffer(buffer, {mayBeLess: true}); + + nextHeaderIndex = buffer.indexOf('504B0304', 0, 'hex'); + // Move position to the next header if found, skip the whole buffer otherwise + await tokenizer.ignore(nextHeaderIndex >= 0 ? nextHeaderIndex : buffer.length); + } + } else { + await tokenizer.ignore(zipHeader.compressedSize); + } + } + } catch (error) { + if (!(error instanceof strtok3$1.EndOfStreamError)) { + throw error; + } + } + + return { + ext: 'zip', + mime: 'application/zip' + }; + } + + if (checkString('OggS')) { + // This is an OGG container + await tokenizer.ignore(28); + const type = Buffer.alloc(8); + await tokenizer.readBuffer(type); + + // Needs to be before `ogg` check + if (_check(type, [0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64])) { + return { + ext: 'opus', + mime: 'audio/opus' + }; + } + + // If ' theora' in header. + if (_check(type, [0x80, 0x74, 0x68, 0x65, 0x6F, 0x72, 0x61])) { + return { + ext: 'ogv', + mime: 'video/ogg' + }; + } + + // If '\x01video' in header. + if (_check(type, [0x01, 0x76, 0x69, 0x64, 0x65, 0x6F, 0x00])) { + return { + ext: 'ogm', + mime: 'video/ogg' + }; + } + + // If ' FLAC' in header https://xiph.org/flac/faq.html + if (_check(type, [0x7F, 0x46, 0x4C, 0x41, 0x43])) { + return { + ext: 'oga', + mime: 'audio/ogg' + }; + } + + // 'Speex ' in header https://en.wikipedia.org/wiki/Speex + if (_check(type, [0x53, 0x70, 0x65, 0x65, 0x78, 0x20, 0x20])) { + return { + ext: 'spx', + mime: 'audio/ogg' + }; + } + + // If '\x01vorbis' in header + if (_check(type, [0x01, 0x76, 0x6F, 0x72, 0x62, 0x69, 0x73])) { + return { + ext: 'ogg', + mime: 'audio/ogg' + }; + } + + // Default OGG container https://www.iana.org/assignments/media-types/application/ogg + return { + ext: 'ogx', + mime: 'application/ogg' + }; + } + + if ( + check([0x50, 0x4B]) && + (buffer[2] === 0x3 || buffer[2] === 0x5 || buffer[2] === 0x7) && + (buffer[3] === 0x4 || buffer[3] === 0x6 || buffer[3] === 0x8) + ) { + return { + ext: 'zip', + mime: 'application/zip' + }; + } + + // + + // File Type Box (https://en.wikipedia.org/wiki/ISO_base_media_file_format) + // It's not required to be first, but it's recommended to be. Almost all ISO base media files start with `ftyp` box. + // `ftyp` box must contain a brand major identifier, which must consist of ISO 8859-1 printable characters. + // Here we check for 8859-1 printable characters (for simplicity, it's a mask which also catches one non-printable character). + if ( + checkString('ftyp', {offset: 4}) && + (buffer[8] & 0x60) !== 0x00 // Brand major, first character ASCII? + ) { + // They all can have MIME `video/mp4` except `application/mp4` special-case which is hard to detect. + // For some cases, we're specific, everything else falls to `video/mp4` with `mp4` extension. + const brandMajor = buffer.toString('binary', 8, 12).replace('\0', ' ').trim(); + switch (brandMajor) { + case 'avif': + return {ext: 'avif', mime: 'image/avif'}; + case 'mif1': + return {ext: 'heic', mime: 'image/heif'}; + case 'msf1': + return {ext: 'heic', mime: 'image/heif-sequence'}; + case 'heic': + case 'heix': + return {ext: 'heic', mime: 'image/heic'}; + case 'hevc': + case 'hevx': + return {ext: 'heic', mime: 'image/heic-sequence'}; + case 'qt': + return {ext: 'mov', mime: 'video/quicktime'}; + case 'M4V': + case 'M4VH': + case 'M4VP': + return {ext: 'm4v', mime: 'video/x-m4v'}; + case 'M4P': + return {ext: 'm4p', mime: 'video/mp4'}; + case 'M4B': + return {ext: 'm4b', mime: 'audio/mp4'}; + case 'M4A': + return {ext: 'm4a', mime: 'audio/x-m4a'}; + case 'F4V': + return {ext: 'f4v', mime: 'video/mp4'}; + case 'F4P': + return {ext: 'f4p', mime: 'video/mp4'}; + case 'F4A': + return {ext: 'f4a', mime: 'audio/mp4'}; + case 'F4B': + return {ext: 'f4b', mime: 'audio/mp4'}; + case 'crx': + return {ext: 'cr3', mime: 'image/x-canon-cr3'}; + default: + if (brandMajor.startsWith('3g')) { + if (brandMajor.startsWith('3g2')) { + return {ext: '3g2', mime: 'video/3gpp2'}; + } + + return {ext: '3gp', mime: 'video/3gpp'}; + } + + return {ext: 'mp4', mime: 'video/mp4'}; + } + } + + if (checkString('MThd')) { + return { + ext: 'mid', + mime: 'audio/midi' + }; + } + + if ( + checkString('wOFF') && + ( + check([0x00, 0x01, 0x00, 0x00], {offset: 4}) || + checkString('OTTO', {offset: 4}) + ) + ) { + return { + ext: 'woff', + mime: 'font/woff' + }; + } + + if ( + checkString('wOF2') && + ( + check([0x00, 0x01, 0x00, 0x00], {offset: 4}) || + checkString('OTTO', {offset: 4}) + ) + ) { + return { + ext: 'woff2', + mime: 'font/woff2' + }; + } + + if (check([0xD4, 0xC3, 0xB2, 0xA1]) || check([0xA1, 0xB2, 0xC3, 0xD4])) { + return { + ext: 'pcap', + mime: 'application/vnd.tcpdump.pcap' + }; + } + + // Sony DSD Stream File (DSF) + if (checkString('DSD ')) { + return { + ext: 'dsf', + mime: 'audio/x-dsf' // Non-standard + }; + } + + if (checkString('LZIP')) { + return { + ext: 'lz', + mime: 'application/x-lzip' + }; + } + + if (checkString('fLaC')) { + return { + ext: 'flac', + mime: 'audio/x-flac' + }; + } + + if (check([0x42, 0x50, 0x47, 0xFB])) { + return { + ext: 'bpg', + mime: 'image/bpg' + }; + } + + if (checkString('wvpk')) { + return { + ext: 'wv', + mime: 'audio/wavpack' + }; + } + + if (checkString('%PDF')) { + await tokenizer.ignore(1350); + const maxBufferSize = 10 * 1024 * 1024; + const buffer = Buffer.alloc(Math.min(maxBufferSize, tokenizer.fileInfo.size)); + await tokenizer.readBuffer(buffer, {mayBeLess: true}); + + // Check if this is an Adobe Illustrator file + if (buffer.includes(Buffer.from('AIPrivateData'))) { + return { + ext: 'ai', + mime: 'application/postscript' + }; + } + + // Assume this is just a normal PDF + return { + ext: 'pdf', + mime: 'application/pdf' + }; + } + + if (check([0x00, 0x61, 0x73, 0x6D])) { + return { + ext: 'wasm', + mime: 'application/wasm' + }; + } + + // TIFF, little-endian type + if (check([0x49, 0x49, 0x2A, 0x0])) { + if (checkString('CR', {offset: 8})) { + return { + ext: 'cr2', + mime: 'image/x-canon-cr2' + }; + } + + if (check([0x1C, 0x00, 0xFE, 0x00], {offset: 8}) || check([0x1F, 0x00, 0x0B, 0x00], {offset: 8})) { + return { + ext: 'nef', + mime: 'image/x-nikon-nef' + }; + } + + if ( + check([0x08, 0x00, 0x00, 0x00], {offset: 4}) && + (check([0x2D, 0x00, 0xFE, 0x00], {offset: 8}) || + check([0x27, 0x00, 0xFE, 0x00], {offset: 8})) + ) { + return { + ext: 'dng', + mime: 'image/x-adobe-dng' + }; + } + + buffer = Buffer.alloc(24); + await tokenizer.peekBuffer(buffer); + if ( + (check([0x10, 0xFB, 0x86, 0x01], {offset: 4}) || check([0x08, 0x00, 0x00, 0x00], {offset: 4})) && + // This pattern differentiates ARW from other TIFF-ish file types: + check([0x00, 0xFE, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x01], {offset: 9}) + ) { + return { + ext: 'arw', + mime: 'image/x-sony-arw' + }; + } + + return { + ext: 'tif', + mime: 'image/tiff' + }; + } + + // TIFF, big-endian type + if (check([0x4D, 0x4D, 0x0, 0x2A])) { + return { + ext: 'tif', + mime: 'image/tiff' + }; + } + + if (checkString('MAC ')) { + return { + ext: 'ape', + mime: 'audio/ape' + }; + } + + // https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska + if (check([0x1A, 0x45, 0xDF, 0xA3])) { // Root element: EBML + async function readField() { + const msb = await tokenizer.peekNumber(Token.UINT8); + let mask = 0x80; + let ic = 0; // 0 = A, 1 = B, 2 = C, 3 = D + + while ((msb & mask) === 0 && mask !== 0) { + ++ic; + mask >>= 1; + } + + const id = Buffer.alloc(ic + 1); + await tokenizer.readBuffer(id); + return id; + } + + async function readElement() { + const id = await readField(); + const lenField = await readField(); + lenField[0] ^= 0x80 >> (lenField.length - 1); + const nrLen = Math.min(6, lenField.length); // JavaScript can max read 6 bytes integer + return { + id: id.readUIntBE(0, id.length), + len: lenField.readUIntBE(lenField.length - nrLen, nrLen) + }; + } + + async function readChildren(level, children) { + while (children > 0) { + const e = await readElement(); + if (e.id === 0x4282) { + return tokenizer.readToken(new Token.StringType(e.len, 'utf-8')); // Return DocType + } + + await tokenizer.ignore(e.len); // ignore payload + --children; + } + } + + const re = await readElement(); + const docType = await readChildren(1, re.len); + + switch (docType) { + case 'webm': + return { + ext: 'webm', + mime: 'video/webm' + }; + + case 'matroska': + return { + ext: 'mkv', + mime: 'video/x-matroska' + }; + + default: + return; + } + } + + // RIFF file format which might be AVI, WAV, QCP, etc + if (check([0x52, 0x49, 0x46, 0x46])) { + if (check([0x41, 0x56, 0x49], {offset: 8})) { + return { + ext: 'avi', + mime: 'video/vnd.avi' + }; + } + + if (check([0x57, 0x41, 0x56, 0x45], {offset: 8})) { + return { + ext: 'wav', + mime: 'audio/vnd.wave' + }; + } + + // QLCM, QCP file + if (check([0x51, 0x4C, 0x43, 0x4D], {offset: 8})) { + return { + ext: 'qcp', + mime: 'audio/qcelp' + }; + } + } + + if (checkString('SQLi')) { + return { + ext: 'sqlite', + mime: 'application/x-sqlite3' + }; + } + + if (check([0x4E, 0x45, 0x53, 0x1A])) { + return { + ext: 'nes', + mime: 'application/x-nintendo-nes-rom' + }; + } + + if (checkString('Cr24')) { + return { + ext: 'crx', + mime: 'application/x-google-chrome-extension' + }; + } + + if ( + checkString('MSCF') || + checkString('ISc(') + ) { + return { + ext: 'cab', + mime: 'application/vnd.ms-cab-compressed' + }; + } + + if (check([0xED, 0xAB, 0xEE, 0xDB])) { + return { + ext: 'rpm', + mime: 'application/x-rpm' + }; + } + + if (check([0xC5, 0xD0, 0xD3, 0xC6])) { + return { + ext: 'eps', + mime: 'application/eps' + }; + } + + if (check([0x28, 0xB5, 0x2F, 0xFD])) { + return { + ext: 'zst', + mime: 'application/zstd' + }; + } + + // -- 5-byte signatures -- + + if (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) { + return { + ext: 'otf', + mime: 'font/otf' + }; + } + + if (checkString('#!AMR')) { + return { + ext: 'amr', + mime: 'audio/amr' + }; + } + + if (checkString('{\\rtf')) { + return { + ext: 'rtf', + mime: 'application/rtf' + }; + } + + if (check([0x46, 0x4C, 0x56, 0x01])) { + return { + ext: 'flv', + mime: 'video/x-flv' + }; + } + + if (checkString('IMPM')) { + return { + ext: 'it', + mime: 'audio/x-it' + }; + } + + if ( + checkString('-lh0-', {offset: 2}) || + checkString('-lh1-', {offset: 2}) || + checkString('-lh2-', {offset: 2}) || + checkString('-lh3-', {offset: 2}) || + checkString('-lh4-', {offset: 2}) || + checkString('-lh5-', {offset: 2}) || + checkString('-lh6-', {offset: 2}) || + checkString('-lh7-', {offset: 2}) || + checkString('-lzs-', {offset: 2}) || + checkString('-lz4-', {offset: 2}) || + checkString('-lz5-', {offset: 2}) || + checkString('-lhd-', {offset: 2}) + ) { + return { + ext: 'lzh', + mime: 'application/x-lzh-compressed' + }; + } + + // MPEG program stream (PS or MPEG-PS) + if (check([0x00, 0x00, 0x01, 0xBA])) { + // MPEG-PS, MPEG-1 Part 1 + if (check([0x21], {offset: 4, mask: [0xF1]})) { + return { + ext: 'mpg', // May also be .ps, .mpeg + mime: 'video/MP1S' + }; + } + + // MPEG-PS, MPEG-2 Part 1 + if (check([0x44], {offset: 4, mask: [0xC4]})) { + return { + ext: 'mpg', // May also be .mpg, .m2p, .vob or .sub + mime: 'video/MP2P' + }; + } + } + + if (checkString('ITSF')) { + return { + ext: 'chm', + mime: 'application/vnd.ms-htmlhelp' + }; + } + + // -- 6-byte signatures -- + + if (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) { + return { + ext: 'xz', + mime: 'application/x-xz' + }; + } + + if (checkString('')) { + await tokenizer.ignore(8); + const str = await tokenizer.readToken(new Token.StringType(13, 'ascii')); + if (str === 'debian-binary') { + return { + ext: 'deb', + mime: 'application/x-deb' + }; + } + + return { + ext: 'ar', + mime: 'application/x-unix-archive' + }; + } + + // -- 8-byte signatures -- + + if (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) { + // APNG format (https://wiki.mozilla.org/APNG_Specification) + // 1. Find the first IDAT (image data) chunk (49 44 41 54) + // 2. Check if there is an "acTL" chunk before the IDAT one (61 63 54 4C) + + // Offset calculated as follows: + // - 8 bytes: PNG signature + // - 4 (length) + 4 (chunk type) + 13 (chunk data) + 4 (CRC): IHDR chunk + + await tokenizer.ignore(8); // ignore PNG signature + + async function readChunkHeader() { + return { + length: await tokenizer.readToken(Token.INT32_BE), + type: await tokenizer.readToken(new Token.StringType(4, 'binary')) + }; + } + + do { + const chunk = await readChunkHeader(); + if (chunk.length < 0) { + return; // Invalid chunk length + } + + switch (chunk.type) { + case 'IDAT': + return { + ext: 'png', + mime: 'image/png' + }; + case 'acTL': + return { + ext: 'apng', + mime: 'image/apng' + }; + default: + await tokenizer.ignore(chunk.length + 4); // Ignore chunk-data + CRC + } + } while (tokenizer.position + 8 < tokenizer.fileInfo.size); + + return { + ext: 'png', + mime: 'image/png' + }; + } + + if (check([0x41, 0x52, 0x52, 0x4F, 0x57, 0x31, 0x00, 0x00])) { + return { + ext: 'arrow', + mime: 'application/x-apache-arrow' + }; + } + + if (check([0x67, 0x6C, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00])) { + return { + ext: 'glb', + mime: 'model/gltf-binary' + }; + } + + // `mov` format variants + if ( + check([0x66, 0x72, 0x65, 0x65], {offset: 4}) || // `free` + check([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // `mdat` MJPEG + check([0x6D, 0x6F, 0x6F, 0x76], {offset: 4}) || // `moov` + check([0x77, 0x69, 0x64, 0x65], {offset: 4}) // `wide` + ) { + return { + ext: 'mov', + mime: 'video/quicktime' + }; + } + + // -- 9-byte signatures -- + + if (check([0x49, 0x49, 0x52, 0x4F, 0x08, 0x00, 0x00, 0x00, 0x18])) { + return { + ext: 'orf', + mime: 'image/x-olympus-orf' + }; + } + + if (checkString('gimp xcf ')) { + return { + ext: 'xcf', + mime: 'image/x-xcf' + }; + } + + // -- 12-byte signatures -- + + if (check([0x49, 0x49, 0x55, 0x00, 0x18, 0x00, 0x00, 0x00, 0x88, 0xE7, 0x74, 0xD8])) { + return { + ext: 'rw2', + mime: 'image/x-panasonic-rw2' + }; + } + + // ASF_Header_Object first 80 bytes + if (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) { + async function readHeader() { + const guid = Buffer.alloc(16); + await tokenizer.readBuffer(guid); + return { + id: guid, + size: Number(await tokenizer.readToken(Token.UINT64_LE)) + }; + } + + await tokenizer.ignore(30); + // Search for header should be in first 1KB of file. + while (tokenizer.position + 24 < tokenizer.fileInfo.size) { + const header = await readHeader(); + let payload = header.size - 24; + if (_check(header.id, [0x91, 0x07, 0xDC, 0xB7, 0xB7, 0xA9, 0xCF, 0x11, 0x8E, 0xE6, 0x00, 0xC0, 0x0C, 0x20, 0x53, 0x65])) { + // Sync on Stream-Properties-Object (B7DC0791-A9B7-11CF-8EE6-00C00C205365) + const typeId = Buffer.alloc(16); + payload -= await tokenizer.readBuffer(typeId); + + if (_check(typeId, [0x40, 0x9E, 0x69, 0xF8, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) { + // Found audio: + return { + ext: 'asf', + mime: 'audio/x-ms-asf' + }; + } + + if (_check(typeId, [0xC0, 0xEF, 0x19, 0xBC, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) { + // Found video: + return { + ext: 'asf', + mime: 'video/x-ms-asf' + }; + } + + break; + } + + await tokenizer.ignore(payload); + } + + // Default to ASF generic extension + return { + ext: 'asf', + mime: 'application/vnd.ms-asf' + }; + } + + if (check([0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A])) { + return { + ext: 'ktx', + mime: 'image/ktx' + }; + } + + if ((check([0x7E, 0x10, 0x04]) || check([0x7E, 0x18, 0x04])) && check([0x30, 0x4D, 0x49, 0x45], {offset: 4})) { + return { + ext: 'mie', + mime: 'application/x-mie' + }; + } + + if (check([0x27, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], {offset: 2})) { + return { + ext: 'shp', + mime: 'application/x-esri-shape' + }; + } + + if (check([0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A])) { + // JPEG-2000 family + + await tokenizer.ignore(20); + const type = await tokenizer.readToken(new Token.StringType(4, 'ascii')); + switch (type) { + case 'jp2 ': + return { + ext: 'jp2', + mime: 'image/jp2' + }; + case 'jpx ': + return { + ext: 'jpx', + mime: 'image/jpx' + }; + case 'jpm ': + return { + ext: 'jpm', + mime: 'image/jpm' + }; + case 'mjp2': + return { + ext: 'mj2', + mime: 'image/mj2' + }; + default: + return; + } + } + + if ( + check([0xFF, 0x0A]) || + check([0x00, 0x00, 0x00, 0x0C, 0x4A, 0x58, 0x4C, 0x20, 0x0D, 0x0A, 0x87, 0x0A]) + ) { + return { + ext: 'jxl', + mime: 'image/jxl' + }; + } + + // -- Unsafe signatures -- + + if ( + check([0x0, 0x0, 0x1, 0xBA]) || + check([0x0, 0x0, 0x1, 0xB3]) + ) { + return { + ext: 'mpg', + mime: 'video/mpeg' + }; + } + + if (check([0x00, 0x01, 0x00, 0x00, 0x00])) { + return { + ext: 'ttf', + mime: 'font/ttf' + }; + } + + if (check([0x00, 0x00, 0x01, 0x00])) { + return { + ext: 'ico', + mime: 'image/x-icon' + }; + } + + if (check([0x00, 0x00, 0x02, 0x00])) { + return { + ext: 'cur', + mime: 'image/x-icon' + }; + } + + if (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) { + // Detected Microsoft Compound File Binary File (MS-CFB) Format. + return { + ext: 'cfb', + mime: 'application/x-cfb' + }; + } + + // Increase sample size from 12 to 256. + await tokenizer.peekBuffer(buffer, {length: Math.min(256, tokenizer.fileInfo.size), mayBeLess: true}); + + // -- 15-byte signatures -- + + if (checkString('BEGIN:')) { + if (checkString('VCARD', {offset: 6})) { + return { + ext: 'vcf', + mime: 'text/vcard' + }; + } + + if (checkString('VCALENDAR', {offset: 6})) { + return { + ext: 'ics', + mime: 'text/calendar' + }; + } + } + + // `raf` is here just to keep all the raw image detectors together. + if (checkString('FUJIFILMCCD-RAW')) { + return { + ext: 'raf', + mime: 'image/x-fujifilm-raf' + }; + } + + if (checkString('Extended Module:')) { + return { + ext: 'xm', + mime: 'audio/x-xm' + }; + } + + if (checkString('Creative Voice File')) { + return { + ext: 'voc', + mime: 'audio/x-voc' + }; + } + + if (check([0x04, 0x00, 0x00, 0x00]) && buffer.length >= 16) { // Rough & quick check Pickle/ASAR + const jsonSize = buffer.readUInt32LE(12); + if (jsonSize > 12 && buffer.length >= jsonSize + 16) { + try { + const header = buffer.slice(16, jsonSize + 16).toString(); + const json = JSON.parse(header); + // Check if Pickle is ASAR + if (json.files) { // Final check, assuring Pickle/ASAR format + return { + ext: 'asar', + mime: 'application/x-asar' + }; + } + } catch (_) { + } + } + } + + if (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) { + return { + ext: 'mxf', + mime: 'application/mxf' + }; + } + + if (checkString('SCRM', {offset: 44})) { + return { + ext: 's3m', + mime: 'audio/x-s3m' + }; + } + + if (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) { + return { + ext: 'mts', + mime: 'video/mp2t' + }; + } + + if (check([0x42, 0x4F, 0x4F, 0x4B, 0x4D, 0x4F, 0x42, 0x49], {offset: 60})) { + return { + ext: 'mobi', + mime: 'application/x-mobipocket-ebook' + }; + } + + if (check([0x44, 0x49, 0x43, 0x4D], {offset: 128})) { + return { + ext: 'dcm', + mime: 'application/dicom' + }; + } + + if (check([0x4C, 0x00, 0x00, 0x00, 0x01, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46])) { + return { + ext: 'lnk', + mime: 'application/x.ms.shortcut' // Invented by us + }; + } + + if (check([0x62, 0x6F, 0x6F, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x72, 0x6B, 0x00, 0x00, 0x00, 0x00])) { + return { + ext: 'alias', + mime: 'application/x.apple.alias' // Invented by us + }; + } + + if ( + check([0x4C, 0x50], {offset: 34}) && + ( + check([0x00, 0x00, 0x01], {offset: 8}) || + check([0x01, 0x00, 0x02], {offset: 8}) || + check([0x02, 0x00, 0x02], {offset: 8}) + ) + ) { + return { + ext: 'eot', + mime: 'application/vnd.ms-fontobject' + }; + } + + if (check([0x06, 0x06, 0xED, 0xF5, 0xD8, 0x1D, 0x46, 0xE5, 0xBD, 0x31, 0xEF, 0xE7, 0xFE, 0x74, 0xB7, 0x1D])) { + return { + ext: 'indd', + mime: 'application/x-indesign' + }; + } + + // Increase sample size from 256 to 512 + await tokenizer.peekBuffer(buffer, {length: Math.min(512, tokenizer.fileInfo.size), mayBeLess: true}); + + // Requires a buffer size of 512 bytes + if (tarHeaderChecksumMatches(buffer)) { + return { + ext: 'tar', + mime: 'application/x-tar' + }; + } + + if (check([0xFF, 0xFE, 0xFF, 0x0E, 0x53, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x55, 0x00, 0x70, 0x00, 0x20, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6C, 0x00])) { + return { + ext: 'skp', + mime: 'application/vnd.sketchup.skp' + }; + } + + if (checkString('-----BEGIN PGP MESSAGE-----')) { + return { + ext: 'pgp', + mime: 'application/pgp-encrypted' + }; + } + + // Check MPEG 1 or 2 Layer 3 header, or 'layer 0' for ADTS (MPEG sync-word 0xFFE) + if (buffer.length >= 2 && check([0xFF, 0xE0], {offset: 0, mask: [0xFF, 0xE0]})) { + if (check([0x10], {offset: 1, mask: [0x16]})) { + // Check for (ADTS) MPEG-2 + if (check([0x08], {offset: 1, mask: [0x08]})) { + return { + ext: 'aac', + mime: 'audio/aac' + }; + } + + // Must be (ADTS) MPEG-4 + return { + ext: 'aac', + mime: 'audio/aac' + }; + } + + // MPEG 1 or 2 Layer 3 header + // Check for MPEG layer 3 + if (check([0x02], {offset: 1, mask: [0x06]})) { + return { + ext: 'mp3', + mime: 'audio/mpeg' + }; + } + + // Check for MPEG layer 2 + if (check([0x04], {offset: 1, mask: [0x06]})) { + return { + ext: 'mp2', + mime: 'audio/mpeg' + }; + } + + // Check for MPEG layer 1 + if (check([0x06], {offset: 1, mask: [0x06]})) { + return { + ext: 'mp1', + mime: 'audio/mpeg' + }; + } + } +} + +const stream = readableStream => new Promise((resolve, reject) => { + // Using `eval` to work around issues when bundling with Webpack + const stream = eval('require')('stream'); // eslint-disable-line no-eval + + readableStream.on('error', reject); + readableStream.once('readable', async () => { + // Set up output stream + const pass = new stream.PassThrough(); + let outputStream; + if (stream.pipeline) { + outputStream = stream.pipeline(readableStream, pass, () => { + }); + } else { + outputStream = readableStream.pipe(pass); + } + + // Read the input stream and detect the filetype + const chunk = readableStream.read(minimumBytes) || readableStream.read() || Buffer.alloc(0); + try { + const fileType = await fromBuffer(chunk); + pass.fileType = fileType; + } catch (error) { + reject(error); + } + + resolve(outputStream); + }); +}); + +const fileType$1 = { + fromStream, + fromTokenizer, + fromBuffer, + stream +}; + +Object.defineProperty(fileType$1, 'extensions', { + get() { + return new Set(supported.extensions); + } +}); + +Object.defineProperty(fileType$1, 'mimeTypes', { + get() { + return new Set(supported.mimeTypes); + } +}); + +var core$2 = fileType$1; + +const strtok3 = lib$3; +const core$1 = core$2; + +async function fromFile(path) { + const tokenizer = await strtok3.fromFile(path); + try { + return await core$1.fromTokenizer(tokenizer); + } finally { + await tokenizer.close(); + } +} + +const fileType = { + fromFile +}; + +Object.assign(fileType, core$1); + +Object.defineProperty(fileType, 'extensions', { + get() { + return core$1.extensions; + } +}); + +Object.defineProperty(fileType, 'mimeTypes', { + get() { + return core$1.mimeTypes; + } +}); + +var fileType_1 = fileType; + +var isSvg$2 = {exports: {}}; + +var validator$2 = {}; + +var util$3 = {}; + +(function (exports) { + + const nameStartChar = ':A-Za-z_\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD'; + const nameChar = nameStartChar + '\\-.\\d\\u00B7\\u0300-\\u036F\\u203F-\\u2040'; + const nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*'; + const regexName = new RegExp('^' + nameRegexp + '$'); + + const getAllMatches = function(string, regex) { + const matches = []; + let match = regex.exec(string); + while (match) { + const allmatches = []; + allmatches.startIndex = regex.lastIndex - match[0].length; + const len = match.length; + for (let index = 0; index < len; index++) { + allmatches.push(match[index]); + } + matches.push(allmatches); + match = regex.exec(string); + } + return matches; + }; + + const isName = function(string) { + const match = regexName.exec(string); + return !(match === null || typeof match === 'undefined'); + }; + + exports.isExist = function(v) { + return typeof v !== 'undefined'; + }; + + exports.isEmptyObject = function(obj) { + return Object.keys(obj).length === 0; + }; + + /** + * Copy all the properties of a into b. + * @param {*} target + * @param {*} a + */ + exports.merge = function(target, a, arrayMode) { + if (a) { + const keys = Object.keys(a); // will return an array of own properties + const len = keys.length; //don't make it inline + for (let i = 0; i < len; i++) { + if (arrayMode === 'strict') { + target[keys[i]] = [ a[keys[i]] ]; + } else { + target[keys[i]] = a[keys[i]]; + } + } + } + }; + /* exports.merge =function (b,a){ + return Object.assign(b,a); + } */ + + exports.getValue = function(v) { + if (exports.isExist(v)) { + return v; + } else { + return ''; + } + }; + + // const fakeCall = function(a) {return a;}; + // const fakeCallNoReturn = function() {}; + + exports.isName = isName; + exports.getAllMatches = getAllMatches; + exports.nameRegexp = nameRegexp; +} (util$3)); + +const util$2 = util$3; + +const defaultOptions$2 = { + allowBooleanAttributes: false, //A tag can have attributes without any value + unpairedTags: [] +}; + +//const tagsPattern = new RegExp("<\\/?([\\w:\\-_\.]+)\\s*\/?>","g"); +validator$2.validate = function (xmlData, options) { + options = Object.assign({}, defaultOptions$2, options); + + //xmlData = xmlData.replace(/(\r\n|\n|\r)/gm,"");//make it single line + //xmlData = xmlData.replace(/(^\s*<\?xml.*?\?>)/g,"");//Remove XML starting tag + //xmlData = xmlData.replace(/()/g,"");//Remove DOCTYPE + const tags = []; + let tagFound = false; + + //indicates that the root tag has been closed (aka. depth 0 has been reached) + let reachedRoot = false; + + if (xmlData[0] === '\ufeff') { + // check for byte order mark (BOM) + xmlData = xmlData.substr(1); + } + + for (let i = 0; i < xmlData.length; i++) { + + if (xmlData[i] === '<' && xmlData[i+1] === '?') { + i+=2; + i = readPI(xmlData,i); + if (i.err) return i; + }else if (xmlData[i] === '<') { + //starting of tag + //read until you reach to '>' avoiding any '>' in attribute value + let tagStartPos = i; + i++; + + if (xmlData[i] === '!') { + i = readCommentAndCDATA(xmlData, i); + continue; + } else { + let closingTag = false; + if (xmlData[i] === '/') { + //closing tag + closingTag = true; + i++; + } + //read tagname + let tagName = ''; + for (; i < xmlData.length && + xmlData[i] !== '>' && + xmlData[i] !== ' ' && + xmlData[i] !== '\t' && + xmlData[i] !== '\n' && + xmlData[i] !== '\r'; i++ + ) { + tagName += xmlData[i]; + } + tagName = tagName.trim(); + //console.log(tagName); + + if (tagName[tagName.length - 1] === '/') { + //self closing tag without attributes + tagName = tagName.substring(0, tagName.length - 1); + //continue; + i--; + } + if (!validateTagName(tagName)) { + let msg; + if (tagName.trim().length === 0) { + msg = "Invalid space after '<'."; + } else { + msg = "Tag '"+tagName+"' is an invalid name."; + } + return getErrorObject('InvalidTag', msg, getLineNumberForPosition(xmlData, i)); + } + + const result = readAttributeStr(xmlData, i); + if (result === false) { + return getErrorObject('InvalidAttr', "Attributes for '"+tagName+"' have open quote.", getLineNumberForPosition(xmlData, i)); + } + let attrStr = result.value; + i = result.index; + + if (attrStr[attrStr.length - 1] === '/') { + //self closing tag + const attrStrStart = i - attrStr.length; + attrStr = attrStr.substring(0, attrStr.length - 1); + const isValid = validateAttributeString(attrStr, options); + if (isValid === true) { + tagFound = true; + //continue; //text may presents after self closing tag + } else { + //the result from the nested function returns the position of the error within the attribute + //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute + //this gives us the absolute index in the entire xml, which we can use to find the line at last + return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, attrStrStart + isValid.err.line)); + } + } else if (closingTag) { + if (!result.tagClosed) { + return getErrorObject('InvalidTag', "Closing tag '"+tagName+"' doesn't have proper closing.", getLineNumberForPosition(xmlData, i)); + } else if (attrStr.trim().length > 0) { + return getErrorObject('InvalidTag', "Closing tag '"+tagName+"' can't have attributes or invalid starting.", getLineNumberForPosition(xmlData, tagStartPos)); + } else if (tags.length === 0) { + return getErrorObject('InvalidTag', "Closing tag '"+tagName+"' has not been opened.", getLineNumberForPosition(xmlData, tagStartPos)); + } else { + const otg = tags.pop(); + if (tagName !== otg.tagName) { + let openPos = getLineNumberForPosition(xmlData, otg.tagStartPos); + return getErrorObject('InvalidTag', + "Expected closing tag '"+otg.tagName+"' (opened in line "+openPos.line+", col "+openPos.col+") instead of closing tag '"+tagName+"'.", + getLineNumberForPosition(xmlData, tagStartPos)); + } + + //when there are no more tags, we reached the root level. + if (tags.length == 0) { + reachedRoot = true; + } + } + } else { + const isValid = validateAttributeString(attrStr, options); + if (isValid !== true) { + //the result from the nested function returns the position of the error within the attribute + //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute + //this gives us the absolute index in the entire xml, which we can use to find the line at last + return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line)); + } + + //if the root level has been reached before ... + if (reachedRoot === true) { + return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i)); + } else if(options.unpairedTags.indexOf(tagName) !== -1); else { + tags.push({tagName, tagStartPos}); + } + tagFound = true; + } + + //skip tag text value + //It may include comments and CDATA value + for (i++; i < xmlData.length; i++) { + if (xmlData[i] === '<') { + if (xmlData[i + 1] === '!') { + //comment or CADATA + i++; + i = readCommentAndCDATA(xmlData, i); + continue; + } else if (xmlData[i+1] === '?') { + i = readPI(xmlData, ++i); + if (i.err) return i; + } else { + break; + } + } else if (xmlData[i] === '&') { + const afterAmp = validateAmpersand(xmlData, i); + if (afterAmp == -1) + return getErrorObject('InvalidChar', "char '&' is not expected.", getLineNumberForPosition(xmlData, i)); + i = afterAmp; + }else { + if (reachedRoot === true && !isWhiteSpace(xmlData[i])) { + return getErrorObject('InvalidXml', "Extra text at the end", getLineNumberForPosition(xmlData, i)); + } + } + } //end of reading tag text value + if (xmlData[i] === '<') { + i--; + } + } + } else { + if ( isWhiteSpace(xmlData[i])) { + continue; + } + return getErrorObject('InvalidChar', "char '"+xmlData[i]+"' is not expected.", getLineNumberForPosition(xmlData, i)); + } + } + + if (!tagFound) { + return getErrorObject('InvalidXml', 'Start tag expected.', 1); + }else if (tags.length == 1) { + return getErrorObject('InvalidTag', "Unclosed tag '"+tags[0].tagName+"'.", getLineNumberForPosition(xmlData, tags[0].tagStartPos)); + }else if (tags.length > 0) { + return getErrorObject('InvalidXml', "Invalid '"+ + JSON.stringify(tags.map(t => t.tagName), null, 4).replace(/\r?\n/g, '')+ + "' found.", {line: 1, col: 1}); + } + + return true; +}; + +function isWhiteSpace(char){ + return char === ' ' || char === '\t' || char === '\n' || char === '\r'; +} +/** + * Read Processing insstructions and skip + * @param {*} xmlData + * @param {*} i + */ +function readPI(xmlData, i) { + const start = i; + for (; i < xmlData.length; i++) { + if (xmlData[i] == '?' || xmlData[i] == ' ') { + //tagname + const tagname = xmlData.substr(start, i - start); + if (i > 5 && tagname === 'xml') { + return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i)); + } else if (xmlData[i] == '?' && xmlData[i + 1] == '>') { + //check if valid attribut string + i++; + break; + } else { + continue; + } + } + } + return i; +} + +function readCommentAndCDATA(xmlData, i) { + if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') { + //comment + for (i += 3; i < xmlData.length; i++) { + if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') { + i += 2; + break; + } + } + } else if ( + xmlData.length > i + 8 && + xmlData[i + 1] === 'D' && + xmlData[i + 2] === 'O' && + xmlData[i + 3] === 'C' && + xmlData[i + 4] === 'T' && + xmlData[i + 5] === 'Y' && + xmlData[i + 6] === 'P' && + xmlData[i + 7] === 'E' + ) { + let angleBracketsCount = 1; + for (i += 8; i < xmlData.length; i++) { + if (xmlData[i] === '<') { + angleBracketsCount++; + } else if (xmlData[i] === '>') { + angleBracketsCount--; + if (angleBracketsCount === 0) { + break; + } + } + } + } else if ( + xmlData.length > i + 9 && + xmlData[i + 1] === '[' && + xmlData[i + 2] === 'C' && + xmlData[i + 3] === 'D' && + xmlData[i + 4] === 'A' && + xmlData[i + 5] === 'T' && + xmlData[i + 6] === 'A' && + xmlData[i + 7] === '[' + ) { + for (i += 8; i < xmlData.length; i++) { + if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') { + i += 2; + break; + } + } + } + + return i; +} + +const doubleQuote = '"'; +const singleQuote = "'"; + +/** + * Keep reading xmlData until '<' is found outside the attribute value. + * @param {string} xmlData + * @param {number} i + */ +function readAttributeStr(xmlData, i) { + let attrStr = ''; + let startChar = ''; + let tagClosed = false; + for (; i < xmlData.length; i++) { + if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) { + if (startChar === '') { + startChar = xmlData[i]; + } else if (startChar !== xmlData[i]) ; else { + startChar = ''; + } + } else if (xmlData[i] === '>') { + if (startChar === '') { + tagClosed = true; + break; + } + } + attrStr += xmlData[i]; + } + if (startChar !== '') { + return false; + } + + return { + value: attrStr, + index: i, + tagClosed: tagClosed + }; +} + +/** + * Select all the attributes whether valid or invalid. + */ +const validAttrStrRegxp = new RegExp('(\\s*)([^\\s=]+)(\\s*=)?(\\s*([\'"])(([\\s\\S])*?)\\5)?', 'g'); + +//attr, ="sd", a="amit's", a="sd"b="saf", ab cd="" + +function validateAttributeString(attrStr, options) { + //console.log("start:"+attrStr+":end"); + + //if(attrStr.trim().length === 0) return true; //empty string + + const matches = util$2.getAllMatches(attrStr, validAttrStrRegxp); + const attrNames = {}; + + for (let i = 0; i < matches.length; i++) { + if (matches[i][1].length === 0) { + //nospace before attribute name: a="sd"b="saf" + return getErrorObject('InvalidAttr', "Attribute '"+matches[i][2]+"' has no space in starting.", getPositionFromMatch(matches[i])) + } else if (matches[i][3] !== undefined && matches[i][4] === undefined) { + return getErrorObject('InvalidAttr', "Attribute '"+matches[i][2]+"' is without value.", getPositionFromMatch(matches[i])); + } else if (matches[i][3] === undefined && !options.allowBooleanAttributes) { + //independent attribute: ab + return getErrorObject('InvalidAttr', "boolean attribute '"+matches[i][2]+"' is not allowed.", getPositionFromMatch(matches[i])); + } + /* else if(matches[i][6] === undefined){//attribute without value: ab= + return { err: { code:"InvalidAttr",msg:"attribute " + matches[i][2] + " has no value assigned."}}; + } */ + const attrName = matches[i][2]; + if (!validateAttrName(attrName)) { + return getErrorObject('InvalidAttr', "Attribute '"+attrName+"' is an invalid name.", getPositionFromMatch(matches[i])); + } + if (!attrNames.hasOwnProperty(attrName)) { + //check for duplicate attribute. + attrNames[attrName] = 1; + } else { + return getErrorObject('InvalidAttr', "Attribute '"+attrName+"' is repeated.", getPositionFromMatch(matches[i])); + } + } + + return true; +} + +function validateNumberAmpersand(xmlData, i) { + let re = /\d/; + if (xmlData[i] === 'x') { + i++; + re = /[\da-fA-F]/; + } + for (; i < xmlData.length; i++) { + if (xmlData[i] === ';') + return i; + if (!xmlData[i].match(re)) + break; + } + return -1; +} + +function validateAmpersand(xmlData, i) { + // https://www.w3.org/TR/xml/#dt-charref + i++; + if (xmlData[i] === ';') + return -1; + if (xmlData[i] === '#') { + i++; + return validateNumberAmpersand(xmlData, i); + } + let count = 0; + for (; i < xmlData.length; i++, count++) { + if (xmlData[i].match(/\w/) && count < 20) + continue; + if (xmlData[i] === ';') + break; + return -1; + } + return i; +} + +function getErrorObject(code, message, lineNumber) { + return { + err: { + code: code, + msg: message, + line: lineNumber.line || lineNumber, + col: lineNumber.col, + }, + }; +} + +function validateAttrName(attrName) { + return util$2.isName(attrName); +} + +// const startsWithXML = /^xml/i; + +function validateTagName(tagname) { + return util$2.isName(tagname) /* && !tagname.match(startsWithXML) */; +} + +//this function returns the line number for the character at the given index +function getLineNumberForPosition(xmlData, index) { + const lines = xmlData.substring(0, index).split(/\r?\n/); + return { + line: lines.length, + + // column number is last line's length + 1, because column numbering starts at 1: + col: lines[lines.length - 1].length + 1 + }; +} + +//this function returns the position of the first character of match within attrStr +function getPositionFromMatch(match) { + return match.startIndex + match[1].length; +} + +var OptionsBuilder = {}; + +const defaultOptions$1 = { + preserveOrder: false, + attributeNamePrefix: '@_', + attributesGroupName: false, + textNodeName: '#text', + ignoreAttributes: true, + removeNSPrefix: false, // remove NS from tag name or attribute name if true + allowBooleanAttributes: false, //a tag can have attributes without any value + //ignoreRootElement : false, + parseTagValue: true, + parseAttributeValue: false, + trimValues: true, //Trim string values of tag and attributes + cdataPropName: false, + numberParseOptions: { + hex: true, + leadingZeros: true, + eNotation: true + }, + tagValueProcessor: function(tagName, val) { + return val; + }, + attributeValueProcessor: function(attrName, val) { + return val; + }, + stopNodes: [], //nested tags will not be parsed even for errors + alwaysCreateTextNode: false, + isArray: () => false, + commentPropName: false, + unpairedTags: [], + processEntities: true, + htmlEntities: false, + ignoreDeclaration: false, + ignorePiTags: false, + transformTagName: false, + transformAttributeName: false, + updateTag: function(tagName, jPath, attrs){ + return tagName + }, + // skipEmptyListItem: false +}; + +const buildOptions$1 = function(options) { + return Object.assign({}, defaultOptions$1, options); +}; + +OptionsBuilder.buildOptions = buildOptions$1; +OptionsBuilder.defaultOptions = defaultOptions$1; + +class XmlNode{ + constructor(tagname) { + this.tagname = tagname; + this.child = []; //nested tags, text, cdata, comments in order + this[":@"] = {}; //attributes map + } + add(key,val){ + // this.child.push( {name : key, val: val, isCdata: isCdata }); + if(key === "__proto__") key = "#__proto__"; + this.child.push( {[key]: val }); + } + addChild(node) { + if(node.tagname === "__proto__") node.tagname = "#__proto__"; + if(node[":@"] && Object.keys(node[":@"]).length > 0){ + this.child.push( { [node.tagname]: node.child, [":@"]: node[":@"] }); + }else { + this.child.push( { [node.tagname]: node.child }); + } + }; +} + +var xmlNode$1 = XmlNode; + +const util$1 = util$3; + +//TODO: handle comments +function readDocType$1(xmlData, i){ + + const entities = {}; + if( xmlData[i + 3] === 'O' && + xmlData[i + 4] === 'C' && + xmlData[i + 5] === 'T' && + xmlData[i + 6] === 'Y' && + xmlData[i + 7] === 'P' && + xmlData[i + 8] === 'E') + { + i = i+9; + let angleBracketsCount = 1; + let hasBody = false, comment = false; + let exp = ""; + for(;i') { //Read tag content + if(comment){ + if( xmlData[i - 1] === "-" && xmlData[i - 2] === "-"){ + comment = false; + angleBracketsCount--; + } + }else { + angleBracketsCount--; + } + if (angleBracketsCount === 0) { + break; + } + }else if( xmlData[i] === '['){ + hasBody = true; + }else { + exp += xmlData[i]; + } + } + if(angleBracketsCount !== 0){ + throw new Error(`Unclosed DOCTYPE`); + } + }else { + throw new Error(`Invalid Tag instead of DOCTYPE`); + } + return {entities, i}; +} + +function readEntityExp(xmlData,i){ + //External entities are not supported + // + + //Parameter entities are not supported + // + + //Internal entities are supported + // + + //read EntityName + let entityName = ""; + for (; i < xmlData.length && (xmlData[i] !== "'" && xmlData[i] !== '"' ); i++) { + // if(xmlData[i] === " ") continue; + // else + entityName += xmlData[i]; + } + entityName = entityName.trim(); + if(entityName.indexOf(" ") !== -1) throw new Error("External entites are not supported"); + + //read Entity Value + const startChar = xmlData[i++]; + let val = ""; + for (; i < xmlData.length && xmlData[i] !== startChar ; i++) { + val += xmlData[i]; + } + return [entityName, val, i]; +} + +function isComment(xmlData, i){ + if(xmlData[i+1] === '!' && + xmlData[i+2] === '-' && + xmlData[i+3] === '-') return true + return false +} +function isEntity(xmlData, i){ + if(xmlData[i+1] === '!' && + xmlData[i+2] === 'E' && + xmlData[i+3] === 'N' && + xmlData[i+4] === 'T' && + xmlData[i+5] === 'I' && + xmlData[i+6] === 'T' && + xmlData[i+7] === 'Y') return true + return false +} +function isElement(xmlData, i){ + if(xmlData[i+1] === '!' && + xmlData[i+2] === 'E' && + xmlData[i+3] === 'L' && + xmlData[i+4] === 'E' && + xmlData[i+5] === 'M' && + xmlData[i+6] === 'E' && + xmlData[i+7] === 'N' && + xmlData[i+8] === 'T') return true + return false +} + +function isAttlist(xmlData, i){ + if(xmlData[i+1] === '!' && + xmlData[i+2] === 'A' && + xmlData[i+3] === 'T' && + xmlData[i+4] === 'T' && + xmlData[i+5] === 'L' && + xmlData[i+6] === 'I' && + xmlData[i+7] === 'S' && + xmlData[i+8] === 'T') return true + return false +} +function isNotation(xmlData, i){ + if(xmlData[i+1] === '!' && + xmlData[i+2] === 'N' && + xmlData[i+3] === 'O' && + xmlData[i+4] === 'T' && + xmlData[i+5] === 'A' && + xmlData[i+6] === 'T' && + xmlData[i+7] === 'I' && + xmlData[i+8] === 'O' && + xmlData[i+9] === 'N') return true + return false +} + +function validateEntityName(name){ + if (util$1.isName(name)) + return name; + else + throw new Error(`Invalid entity name ${name}`); +} + +var DocTypeReader = readDocType$1; + +const hexRegex = /^[-+]?0x[a-fA-F0-9]+$/; +const numRegex = /^([\-\+])?(0*)(\.[0-9]+([eE]\-?[0-9]+)?|[0-9]+(\.[0-9]+([eE]\-?[0-9]+)?)?)$/; +// const octRegex = /0x[a-z0-9]+/; +// const binRegex = /0x[a-z0-9]+/; + + +//polyfill +if (!Number.parseInt && window.parseInt) { + Number.parseInt = window.parseInt; +} +if (!Number.parseFloat && window.parseFloat) { + Number.parseFloat = window.parseFloat; +} + + +const consider = { + hex : true, + leadingZeros: true, + decimalPoint: "\.", + eNotation: true + //skipLike: /regex/ +}; + +function toNumber$1(str, options = {}){ + // const options = Object.assign({}, consider); + // if(opt.leadingZeros === false){ + // options.leadingZeros = false; + // }else if(opt.hex === false){ + // options.hex = false; + // } + + options = Object.assign({}, consider, options ); + if(!str || typeof str !== "string" ) return str; + + let trimmedStr = str.trim(); + // if(trimmedStr === "0.0") return 0; + // else if(trimmedStr === "+0.0") return 0; + // else if(trimmedStr === "-0.0") return -0; + + if(options.skipLike !== undefined && options.skipLike.test(trimmedStr)) return str; + else if (options.hex && hexRegex.test(trimmedStr)) { + return Number.parseInt(trimmedStr, 16); + // } else if (options.parseOct && octRegex.test(str)) { + // return Number.parseInt(val, 8); + // }else if (options.parseBin && binRegex.test(str)) { + // return Number.parseInt(val, 2); + }else { + //separate negative sign, leading zeros, and rest number + const match = numRegex.exec(trimmedStr); + if(match){ + const sign = match[1]; + const leadingZeros = match[2]; + let numTrimmedByZeros = trimZeros(match[3]); //complete num without leading zeros + //trim ending zeros for floating number + + const eNotation = match[4] || match[6]; + if(!options.leadingZeros && leadingZeros.length > 0 && sign && trimmedStr[2] !== ".") return str; //-0123 + else if(!options.leadingZeros && leadingZeros.length > 0 && !sign && trimmedStr[1] !== ".") return str; //0123 + else {//no leading zeros or leading zeros are allowed + const num = Number(trimmedStr); + const numStr = "" + num; + if(numStr.search(/[eE]/) !== -1){ //given number is long and parsed to eNotation + if(options.eNotation) return num; + else return str; + }else if(eNotation){ //given number has enotation + if(options.eNotation) return num; + else return str; + }else if(trimmedStr.indexOf(".") !== -1){ //floating number + // const decimalPart = match[5].substr(1); + // const intPart = trimmedStr.substr(0,trimmedStr.indexOf(".")); + + + // const p = numStr.indexOf("."); + // const givenIntPart = numStr.substr(0,p); + // const givenDecPart = numStr.substr(p+1); + if(numStr === "0" && (numTrimmedByZeros === "") ) return num; //0.0 + else if(numStr === numTrimmedByZeros) return num; //0.456. 0.79000 + else if( sign && numStr === "-"+numTrimmedByZeros) return num; + else return str; + } + + if(leadingZeros){ + // if(numTrimmedByZeros === numStr){ + // if(options.leadingZeros) return num; + // else return str; + // }else return str; + if(numTrimmedByZeros === numStr) return num; + else if(sign+numTrimmedByZeros === numStr) return num; + else return str; + } + + if(trimmedStr === numStr) return num; + else if(trimmedStr === sign+numStr) return num; + // else{ + // //number with +/- sign + // trimmedStr.test(/[-+][0-9]); + + // } + return str; + } + // else if(!eNotation && trimmedStr && trimmedStr !== Number(trimmedStr) ) return str; + + }else { //non-numeric string + return str; + } + } +} + +/** + * + * @param {string} numStr without leading zeros + * @returns + */ +function trimZeros(numStr){ + if(numStr && numStr.indexOf(".") !== -1){//float + numStr = numStr.replace(/0+$/, ""); //remove ending zeros + if(numStr === ".") numStr = "0"; + else if(numStr[0] === ".") numStr = "0"+numStr; + else if(numStr[numStr.length-1] === ".") numStr = numStr.substr(0,numStr.length-1); + return numStr; + } + return numStr; +} +var strnum = toNumber$1; + +function getIgnoreAttributesFn$2(ignoreAttributes) { + if (typeof ignoreAttributes === 'function') { + return ignoreAttributes + } + if (Array.isArray(ignoreAttributes)) { + return (attrName) => { + for (const pattern of ignoreAttributes) { + if (typeof pattern === 'string' && attrName === pattern) { + return true + } + if (pattern instanceof RegExp && pattern.test(attrName)) { + return true + } + } + } + } + return () => false +} + +var ignoreAttributes = getIgnoreAttributesFn$2; + +///@ts-check + +const util = util$3; +const xmlNode = xmlNode$1; +const readDocType = DocTypeReader; +const toNumber = strnum; +const getIgnoreAttributesFn$1 = ignoreAttributes; + +// const regx = +// '<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)' +// .replace(/NAME/g, util.nameRegexp); + +//const tagsRegx = new RegExp("<(\\/?[\\w:\\-\._]+)([^>]*)>(\\s*"+cdataRegx+")*([^<]+)?","g"); +//const tagsRegx = new RegExp("<(\\/?)((\\w*:)?([\\w:\\-\._]+))([^>]*)>([^<]*)("+cdataRegx+"([^<]*))*([^<]+)?","g"); + +class OrderedObjParser$1{ + constructor(options){ + this.options = options; + this.currentNode = null; + this.tagsNodeStack = []; + this.docTypeEntities = {}; + this.lastEntities = { + "apos" : { regex: /&(apos|#39|#x27);/g, val : "'"}, + "gt" : { regex: /&(gt|#62|#x3E);/g, val : ">"}, + "lt" : { regex: /&(lt|#60|#x3C);/g, val : "<"}, + "quot" : { regex: /&(quot|#34|#x22);/g, val : "\""}, + }; + this.ampEntity = { regex: /&(amp|#38|#x26);/g, val : "&"}; + this.htmlEntities = { + "space": { regex: /&(nbsp|#160);/g, val: " " }, + // "lt" : { regex: /&(lt|#60);/g, val: "<" }, + // "gt" : { regex: /&(gt|#62);/g, val: ">" }, + // "amp" : { regex: /&(amp|#38);/g, val: "&" }, + // "quot" : { regex: /&(quot|#34);/g, val: "\"" }, + // "apos" : { regex: /&(apos|#39);/g, val: "'" }, + "cent" : { regex: /&(cent|#162);/g, val: "¢" }, + "pound" : { regex: /&(pound|#163);/g, val: "£" }, + "yen" : { regex: /&(yen|#165);/g, val: "¥" }, + "euro" : { regex: /&(euro|#8364);/g, val: "€" }, + "copyright" : { regex: /&(copy|#169);/g, val: "©" }, + "reg" : { regex: /&(reg|#174);/g, val: "®" }, + "inr" : { regex: /&(inr|#8377);/g, val: "₹" }, + "num_dec": { regex: /&#([0-9]{1,7});/g, val : (_, str) => String.fromCharCode(Number.parseInt(str, 10)) }, + "num_hex": { regex: /&#x([0-9a-fA-F]{1,6});/g, val : (_, str) => String.fromCharCode(Number.parseInt(str, 16)) }, + }; + this.addExternalEntities = addExternalEntities; + this.parseXml = parseXml; + this.parseTextData = parseTextData; + this.resolveNameSpace = resolveNameSpace; + this.buildAttributesMap = buildAttributesMap; + this.isItStopNode = isItStopNode; + this.replaceEntitiesValue = replaceEntitiesValue$1; + this.readStopNodeData = readStopNodeData; + this.saveTextToParentTag = saveTextToParentTag; + this.addChild = addChild; + this.ignoreAttributesFn = getIgnoreAttributesFn$1(this.options.ignoreAttributes); + } + +} + +function addExternalEntities(externalEntities){ + const entKeys = Object.keys(externalEntities); + for (let i = 0; i < entKeys.length; i++) { + const ent = entKeys[i]; + this.lastEntities[ent] = { + regex: new RegExp("&"+ent+";","g"), + val : externalEntities[ent] + }; + } +} + +/** + * @param {string} val + * @param {string} tagName + * @param {string} jPath + * @param {boolean} dontTrim + * @param {boolean} hasAttributes + * @param {boolean} isLeafNode + * @param {boolean} escapeEntities + */ +function parseTextData(val, tagName, jPath, dontTrim, hasAttributes, isLeafNode, escapeEntities) { + if (val !== undefined) { + if (this.options.trimValues && !dontTrim) { + val = val.trim(); + } + if(val.length > 0){ + if(!escapeEntities) val = this.replaceEntitiesValue(val); + + const newval = this.options.tagValueProcessor(tagName, val, jPath, hasAttributes, isLeafNode); + if(newval === null || newval === undefined){ + //don't parse + return val; + }else if(typeof newval !== typeof val || newval !== val){ + //overwrite + return newval; + }else if(this.options.trimValues){ + return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions); + }else { + const trimmedVal = val.trim(); + if(trimmedVal === val){ + return parseValue(val, this.options.parseTagValue, this.options.numberParseOptions); + }else { + return val; + } + } + } + } +} + +function resolveNameSpace(tagname) { + if (this.options.removeNSPrefix) { + const tags = tagname.split(':'); + const prefix = tagname.charAt(0) === '/' ? '/' : ''; + if (tags[0] === 'xmlns') { + return ''; + } + if (tags.length === 2) { + tagname = prefix + tags[1]; + } + } + return tagname; +} + +//TODO: change regex to capture NS +//const attrsRegx = new RegExp("([\\w\\-\\.\\:]+)\\s*=\\s*(['\"])((.|\n)*?)\\2","gm"); +const attrsRegx = new RegExp('([^\\s=]+)\\s*(=\\s*([\'"])([\\s\\S]*?)\\3)?', 'gm'); + +function buildAttributesMap(attrStr, jPath, tagName) { + if (this.options.ignoreAttributes !== true && typeof attrStr === 'string') { + // attrStr = attrStr.replace(/\r?\n/g, ' '); + //attrStr = attrStr || attrStr.trim(); + + const matches = util.getAllMatches(attrStr, attrsRegx); + const len = matches.length; //don't make it inline + const attrs = {}; + for (let i = 0; i < len; i++) { + const attrName = this.resolveNameSpace(matches[i][1]); + if (this.ignoreAttributesFn(attrName, jPath)) { + continue + } + let oldVal = matches[i][4]; + let aName = this.options.attributeNamePrefix + attrName; + if (attrName.length) { + if (this.options.transformAttributeName) { + aName = this.options.transformAttributeName(aName); + } + if(aName === "__proto__") aName = "#__proto__"; + if (oldVal !== undefined) { + if (this.options.trimValues) { + oldVal = oldVal.trim(); + } + oldVal = this.replaceEntitiesValue(oldVal); + const newVal = this.options.attributeValueProcessor(attrName, oldVal, jPath); + if(newVal === null || newVal === undefined){ + //don't parse + attrs[aName] = oldVal; + }else if(typeof newVal !== typeof oldVal || newVal !== oldVal){ + //overwrite + attrs[aName] = newVal; + }else { + //parse + attrs[aName] = parseValue( + oldVal, + this.options.parseAttributeValue, + this.options.numberParseOptions + ); + } + } else if (this.options.allowBooleanAttributes) { + attrs[aName] = true; + } + } + } + if (!Object.keys(attrs).length) { + return; + } + if (this.options.attributesGroupName) { + const attrCollection = {}; + attrCollection[this.options.attributesGroupName] = attrs; + return attrCollection; + } + return attrs + } +} + +const parseXml = function(xmlData) { + xmlData = xmlData.replace(/\r\n?/g, "\n"); //TODO: remove this line + const xmlObj = new xmlNode('!xml'); + let currentNode = xmlObj; + let textData = ""; + let jPath = ""; + for(let i=0; i< xmlData.length; i++){//for each char in XML data + const ch = xmlData[i]; + if(ch === '<'){ + // const nextIndex = i+1; + // const _2ndChar = xmlData[nextIndex]; + if( xmlData[i+1] === '/') {//Closing Tag + const closeIndex = findClosingIndex(xmlData, ">", i, "Closing Tag is not closed."); + let tagName = xmlData.substring(i+2,closeIndex).trim(); + + if(this.options.removeNSPrefix){ + const colonIndex = tagName.indexOf(":"); + if(colonIndex !== -1){ + tagName = tagName.substr(colonIndex+1); + } + } + + if(this.options.transformTagName) { + tagName = this.options.transformTagName(tagName); + } + + if(currentNode){ + textData = this.saveTextToParentTag(textData, currentNode, jPath); + } + + //check if last tag of nested tag was unpaired tag + const lastTagName = jPath.substring(jPath.lastIndexOf(".")+1); + if(tagName && this.options.unpairedTags.indexOf(tagName) !== -1 ){ + throw new Error(`Unpaired tag can not be used as closing tag: `); + } + let propIndex = 0; + if(lastTagName && this.options.unpairedTags.indexOf(lastTagName) !== -1 ){ + propIndex = jPath.lastIndexOf('.', jPath.lastIndexOf('.')-1); + this.tagsNodeStack.pop(); + }else { + propIndex = jPath.lastIndexOf("."); + } + jPath = jPath.substring(0, propIndex); + + currentNode = this.tagsNodeStack.pop();//avoid recursion, set the parent tag scope + textData = ""; + i = closeIndex; + } else if( xmlData[i+1] === '?') { + + let tagData = readTagExp(xmlData,i, false, "?>"); + if(!tagData) throw new Error("Pi Tag is not closed."); + + textData = this.saveTextToParentTag(textData, currentNode, jPath); + if( (this.options.ignoreDeclaration && tagData.tagName === "?xml") || this.options.ignorePiTags);else { + + const childNode = new xmlNode(tagData.tagName); + childNode.add(this.options.textNodeName, ""); + + if(tagData.tagName !== tagData.tagExp && tagData.attrExpPresent){ + childNode[":@"] = this.buildAttributesMap(tagData.tagExp, jPath, tagData.tagName); + } + this.addChild(currentNode, childNode, jPath); + + } + + + i = tagData.closeIndex + 1; + } else if(xmlData.substr(i + 1, 3) === '!--') { + const endIndex = findClosingIndex(xmlData, "-->", i+4, "Comment is not closed."); + if(this.options.commentPropName){ + const comment = xmlData.substring(i + 4, endIndex - 2); + + textData = this.saveTextToParentTag(textData, currentNode, jPath); + + currentNode.add(this.options.commentPropName, [ { [this.options.textNodeName] : comment } ]); + } + i = endIndex; + } else if( xmlData.substr(i + 1, 2) === '!D') { + const result = readDocType(xmlData, i); + this.docTypeEntities = result.entities; + i = result.i; + }else if(xmlData.substr(i + 1, 2) === '![') { + const closeIndex = findClosingIndex(xmlData, "]]>", i, "CDATA is not closed.") - 2; + const tagExp = xmlData.substring(i + 9,closeIndex); + + textData = this.saveTextToParentTag(textData, currentNode, jPath); + + let val = this.parseTextData(tagExp, currentNode.tagname, jPath, true, false, true, true); + if(val == undefined) val = ""; + + //cdata should be set even if it is 0 length string + if(this.options.cdataPropName){ + currentNode.add(this.options.cdataPropName, [ { [this.options.textNodeName] : tagExp } ]); + }else { + currentNode.add(this.options.textNodeName, val); + } + + i = closeIndex + 2; + }else {//Opening tag + let result = readTagExp(xmlData,i, this.options.removeNSPrefix); + let tagName= result.tagName; + const rawTagName = result.rawTagName; + let tagExp = result.tagExp; + let attrExpPresent = result.attrExpPresent; + let closeIndex = result.closeIndex; + + if (this.options.transformTagName) { + tagName = this.options.transformTagName(tagName); + } + + //save text as child node + if (currentNode && textData) { + if(currentNode.tagname !== '!xml'){ + //when nested tag is found + textData = this.saveTextToParentTag(textData, currentNode, jPath, false); + } + } + + //check if last tag was unpaired tag + const lastTag = currentNode; + if(lastTag && this.options.unpairedTags.indexOf(lastTag.tagname) !== -1 ){ + currentNode = this.tagsNodeStack.pop(); + jPath = jPath.substring(0, jPath.lastIndexOf(".")); + } + if(tagName !== xmlObj.tagname){ + jPath += jPath ? "." + tagName : tagName; + } + if (this.isItStopNode(this.options.stopNodes, jPath, tagName)) { + let tagContent = ""; + //self-closing tag + if(tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1){ + if(tagName[tagName.length - 1] === "/"){ //remove trailing '/' + tagName = tagName.substr(0, tagName.length - 1); + jPath = jPath.substr(0, jPath.length - 1); + tagExp = tagName; + }else { + tagExp = tagExp.substr(0, tagExp.length - 1); + } + i = result.closeIndex; + } + //unpaired tag + else if(this.options.unpairedTags.indexOf(tagName) !== -1){ + + i = result.closeIndex; + } + //normal tag + else { + //read until closing tag is found + const result = this.readStopNodeData(xmlData, rawTagName, closeIndex + 1); + if(!result) throw new Error(`Unexpected end of ${rawTagName}`); + i = result.i; + tagContent = result.tagContent; + } + + const childNode = new xmlNode(tagName); + if(tagName !== tagExp && attrExpPresent){ + childNode[":@"] = this.buildAttributesMap(tagExp, jPath, tagName); + } + if(tagContent) { + tagContent = this.parseTextData(tagContent, tagName, jPath, true, attrExpPresent, true, true); + } + + jPath = jPath.substr(0, jPath.lastIndexOf(".")); + childNode.add(this.options.textNodeName, tagContent); + + this.addChild(currentNode, childNode, jPath); + }else { + //selfClosing tag + if(tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1){ + if(tagName[tagName.length - 1] === "/"){ //remove trailing '/' + tagName = tagName.substr(0, tagName.length - 1); + jPath = jPath.substr(0, jPath.length - 1); + tagExp = tagName; + }else { + tagExp = tagExp.substr(0, tagExp.length - 1); + } + + if(this.options.transformTagName) { + tagName = this.options.transformTagName(tagName); + } + + const childNode = new xmlNode(tagName); + if(tagName !== tagExp && attrExpPresent){ + childNode[":@"] = this.buildAttributesMap(tagExp, jPath, tagName); + } + this.addChild(currentNode, childNode, jPath); + jPath = jPath.substr(0, jPath.lastIndexOf(".")); + } + //opening tag + else { + const childNode = new xmlNode( tagName); + this.tagsNodeStack.push(currentNode); + + if(tagName !== tagExp && attrExpPresent){ + childNode[":@"] = this.buildAttributesMap(tagExp, jPath, tagName); + } + this.addChild(currentNode, childNode, jPath); + currentNode = childNode; + } + textData = ""; + i = closeIndex; + } + } + }else { + textData += xmlData[i]; + } + } + return xmlObj.child; +}; + +function addChild(currentNode, childNode, jPath){ + const result = this.options.updateTag(childNode.tagname, jPath, childNode[":@"]); + if(result === false);else if(typeof result === "string"){ + childNode.tagname = result; + currentNode.addChild(childNode); + }else { + currentNode.addChild(childNode); + } +} + +const replaceEntitiesValue$1 = function(val){ + + if(this.options.processEntities){ + for(let entityName in this.docTypeEntities){ + const entity = this.docTypeEntities[entityName]; + val = val.replace( entity.regx, entity.val); + } + for(let entityName in this.lastEntities){ + const entity = this.lastEntities[entityName]; + val = val.replace( entity.regex, entity.val); + } + if(this.options.htmlEntities){ + for(let entityName in this.htmlEntities){ + const entity = this.htmlEntities[entityName]; + val = val.replace( entity.regex, entity.val); + } + } + val = val.replace( this.ampEntity.regex, this.ampEntity.val); + } + return val; +}; +function saveTextToParentTag(textData, currentNode, jPath, isLeafNode) { + if (textData) { //store previously collected data as textNode + if(isLeafNode === undefined) isLeafNode = Object.keys(currentNode.child).length === 0; + + textData = this.parseTextData(textData, + currentNode.tagname, + jPath, + false, + currentNode[":@"] ? Object.keys(currentNode[":@"]).length !== 0 : false, + isLeafNode); + + if (textData !== undefined && textData !== "") + currentNode.add(this.options.textNodeName, textData); + textData = ""; + } + return textData; +} + +//TODO: use jPath to simplify the logic +/** + * + * @param {string[]} stopNodes + * @param {string} jPath + * @param {string} currentTagName + */ +function isItStopNode(stopNodes, jPath, currentTagName){ + const allNodesExp = "*." + currentTagName; + for (const stopNodePath in stopNodes) { + const stopNodeExp = stopNodes[stopNodePath]; + if( allNodesExp === stopNodeExp || jPath === stopNodeExp ) return true; + } + return false; +} + +/** + * Returns the tag Expression and where it is ending handling single-double quotes situation + * @param {string} xmlData + * @param {number} i starting index + * @returns + */ +function tagExpWithClosingIndex(xmlData, i, closingChar = ">"){ + let attrBoundary; + let tagExp = ""; + for (let index = i; index < xmlData.length; index++) { + let ch = xmlData[index]; + if (attrBoundary) { + if (ch === attrBoundary) attrBoundary = "";//reset + } else if (ch === '"' || ch === "'") { + attrBoundary = ch; + } else if (ch === closingChar[0]) { + if(closingChar[1]){ + if(xmlData[index + 1] === closingChar[1]){ + return { + data: tagExp, + index: index + } + } + }else { + return { + data: tagExp, + index: index + } + } + } else if (ch === '\t') { + ch = " "; + } + tagExp += ch; + } +} + +function findClosingIndex(xmlData, str, i, errMsg){ + const closingIndex = xmlData.indexOf(str, i); + if(closingIndex === -1){ + throw new Error(errMsg) + }else { + return closingIndex + str.length - 1; + } +} + +function readTagExp(xmlData,i, removeNSPrefix, closingChar = ">"){ + const result = tagExpWithClosingIndex(xmlData, i+1, closingChar); + if(!result) return; + let tagExp = result.data; + const closeIndex = result.index; + const separatorIndex = tagExp.search(/\s/); + let tagName = tagExp; + let attrExpPresent = true; + if(separatorIndex !== -1){//separate tag name and attributes expression + tagName = tagExp.substring(0, separatorIndex); + tagExp = tagExp.substring(separatorIndex + 1).trimStart(); + } + + const rawTagName = tagName; + if(removeNSPrefix){ + const colonIndex = tagName.indexOf(":"); + if(colonIndex !== -1){ + tagName = tagName.substr(colonIndex+1); + attrExpPresent = tagName !== result.data.substr(colonIndex + 1); + } + } + + return { + tagName: tagName, + tagExp: tagExp, + closeIndex: closeIndex, + attrExpPresent: attrExpPresent, + rawTagName: rawTagName, + } +} +/** + * find paired tag for a stop node + * @param {string} xmlData + * @param {string} tagName + * @param {number} i + */ +function readStopNodeData(xmlData, tagName, i){ + const startIndex = i; + // Starting at 1 since we already have an open tag + let openTagCount = 1; + + for (; i < xmlData.length; i++) { + if( xmlData[i] === "<"){ + if (xmlData[i+1] === "/") {//close tag + const closeIndex = findClosingIndex(xmlData, ">", i, `${tagName} is not closed`); + let closeTagName = xmlData.substring(i+2,closeIndex).trim(); + if(closeTagName === tagName){ + openTagCount--; + if (openTagCount === 0) { + return { + tagContent: xmlData.substring(startIndex, i), + i : closeIndex + } + } + } + i=closeIndex; + } else if(xmlData[i+1] === '?') { + const closeIndex = findClosingIndex(xmlData, "?>", i+1, "StopNode is not closed."); + i=closeIndex; + } else if(xmlData.substr(i + 1, 3) === '!--') { + const closeIndex = findClosingIndex(xmlData, "-->", i+3, "StopNode is not closed."); + i=closeIndex; + } else if(xmlData.substr(i + 1, 2) === '![') { + const closeIndex = findClosingIndex(xmlData, "]]>", i, "StopNode is not closed.") - 2; + i=closeIndex; + } else { + const tagData = readTagExp(xmlData, i, '>'); + + if (tagData) { + const openTagName = tagData && tagData.tagName; + if (openTagName === tagName && tagData.tagExp[tagData.tagExp.length-1] !== "/") { + openTagCount++; + } + i=tagData.closeIndex; + } + } + } + }//end for loop +} + +function parseValue(val, shouldParse, options) { + if (shouldParse && typeof val === 'string') { + //console.log(options) + const newval = val.trim(); + if(newval === 'true' ) return true; + else if(newval === 'false' ) return false; + else return toNumber(val, options); + } else { + if (util.isExist(val)) { + return val; + } else { + return ''; + } + } +} + + +var OrderedObjParser_1 = OrderedObjParser$1; + +var node2json = {}; + +/** + * + * @param {array} node + * @param {any} options + * @returns + */ +function prettify$1(node, options){ + return compress( node, options); +} + +/** + * + * @param {array} arr + * @param {object} options + * @param {string} jPath + * @returns object + */ +function compress(arr, options, jPath){ + let text; + const compressedObj = {}; + for (let i = 0; i < arr.length; i++) { + const tagObj = arr[i]; + const property = propName$1(tagObj); + let newJpath = ""; + if(jPath === undefined) newJpath = property; + else newJpath = jPath + "." + property; + + if(property === options.textNodeName){ + if(text === undefined) text = tagObj[property]; + else text += "" + tagObj[property]; + }else if(property === undefined){ + continue; + }else if(tagObj[property]){ + + let val = compress(tagObj[property], options, newJpath); + const isLeaf = isLeafTag(val, options); + + if(tagObj[":@"]){ + assignAttributes( val, tagObj[":@"], newJpath, options); + }else if(Object.keys(val).length === 1 && val[options.textNodeName] !== undefined && !options.alwaysCreateTextNode){ + val = val[options.textNodeName]; + }else if(Object.keys(val).length === 0){ + if(options.alwaysCreateTextNode) val[options.textNodeName] = ""; + else val = ""; + } + + if(compressedObj[property] !== undefined && compressedObj.hasOwnProperty(property)) { + if(!Array.isArray(compressedObj[property])) { + compressedObj[property] = [ compressedObj[property] ]; + } + compressedObj[property].push(val); + }else { + //TODO: if a node is not an array, then check if it should be an array + //also determine if it is a leaf node + if (options.isArray(property, newJpath, isLeaf )) { + compressedObj[property] = [val]; + }else { + compressedObj[property] = val; + } + } + } + + } + // if(text && text.length > 0) compressedObj[options.textNodeName] = text; + if(typeof text === "string"){ + if(text.length > 0) compressedObj[options.textNodeName] = text; + }else if(text !== undefined) compressedObj[options.textNodeName] = text; + return compressedObj; +} + +function propName$1(obj){ + const keys = Object.keys(obj); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if(key !== ":@") return key; + } +} + +function assignAttributes(obj, attrMap, jpath, options){ + if (attrMap) { + const keys = Object.keys(attrMap); + const len = keys.length; //don't make it inline + for (let i = 0; i < len; i++) { + const atrrName = keys[i]; + if (options.isArray(atrrName, jpath + "." + atrrName, true, true)) { + obj[atrrName] = [ attrMap[atrrName] ]; + } else { + obj[atrrName] = attrMap[atrrName]; + } + } + } +} + +function isLeafTag(obj, options){ + const { textNodeName } = options; + const propCount = Object.keys(obj).length; + + if (propCount === 0) { + return true; + } + + if ( + propCount === 1 && + (obj[textNodeName] || typeof obj[textNodeName] === "boolean" || obj[textNodeName] === 0) + ) { + return true; + } + + return false; +} +node2json.prettify = prettify$1; + +const { buildOptions} = OptionsBuilder; +const OrderedObjParser = OrderedObjParser_1; +const { prettify} = node2json; +const validator$1 = validator$2; + +class XMLParser$2{ + + constructor(options){ + this.externalEntities = {}; + this.options = buildOptions(options); + + } + /** + * Parse XML dats to JS object + * @param {string|Buffer} xmlData + * @param {boolean|Object} validationOption + */ + parse(xmlData,validationOption){ + if(typeof xmlData === "string");else if( xmlData.toString){ + xmlData = xmlData.toString(); + }else { + throw new Error("XML data is accepted in String or Bytes[] form.") + } + if( validationOption){ + if(validationOption === true) validationOption = {}; //validate with default options + + const result = validator$1.validate(xmlData, validationOption); + if (result !== true) { + throw Error( `${result.err.msg}:${result.err.line}:${result.err.col}` ) + } + } + const orderedObjParser = new OrderedObjParser(this.options); + orderedObjParser.addExternalEntities(this.externalEntities); + const orderedResult = orderedObjParser.parseXml(xmlData); + if(this.options.preserveOrder || orderedResult === undefined) return orderedResult; + else return prettify(orderedResult, this.options); + } + + /** + * Add Entity which is not by default supported by this library + * @param {string} key + * @param {string} value + */ + addEntity(key, value){ + if(value.indexOf("&") !== -1){ + throw new Error("Entity value can't have '&'") + }else if(key.indexOf("&") !== -1 || key.indexOf(";") !== -1){ + throw new Error("An entity must be set without '&' and ';'. Eg. use '#xD' for ' '") + }else if(value === "&"){ + throw new Error("An entity with value '&' is not permitted"); + }else { + this.externalEntities[key] = value; + } + } +} + +var XMLParser_1 = XMLParser$2; + +const EOL = "\n"; + +/** + * + * @param {array} jArray + * @param {any} options + * @returns + */ +function toXml(jArray, options) { + let indentation = ""; + if (options.format && options.indentBy.length > 0) { + indentation = EOL; + } + return arrToStr(jArray, options, "", indentation); +} + +function arrToStr(arr, options, jPath, indentation) { + let xmlStr = ""; + let isPreviousElementTag = false; + + for (let i = 0; i < arr.length; i++) { + const tagObj = arr[i]; + const tagName = propName(tagObj); + if(tagName === undefined) continue; + + let newJPath = ""; + if (jPath.length === 0) newJPath = tagName; + else newJPath = `${jPath}.${tagName}`; + + if (tagName === options.textNodeName) { + let tagText = tagObj[tagName]; + if (!isStopNode(newJPath, options)) { + tagText = options.tagValueProcessor(tagName, tagText); + tagText = replaceEntitiesValue(tagText, options); + } + if (isPreviousElementTag) { + xmlStr += indentation; + } + xmlStr += tagText; + isPreviousElementTag = false; + continue; + } else if (tagName === options.cdataPropName) { + if (isPreviousElementTag) { + xmlStr += indentation; + } + xmlStr += ``; + isPreviousElementTag = false; + continue; + } else if (tagName === options.commentPropName) { + xmlStr += indentation + ``; + isPreviousElementTag = true; + continue; + } else if (tagName[0] === "?") { + const attStr = attr_to_str(tagObj[":@"], options); + const tempInd = tagName === "?xml" ? "" : indentation; + let piTextNodeName = tagObj[tagName][0][options.textNodeName]; + piTextNodeName = piTextNodeName.length !== 0 ? " " + piTextNodeName : ""; //remove extra spacing + xmlStr += tempInd + `<${tagName}${piTextNodeName}${attStr}?>`; + isPreviousElementTag = true; + continue; + } + let newIdentation = indentation; + if (newIdentation !== "") { + newIdentation += options.indentBy; + } + const attStr = attr_to_str(tagObj[":@"], options); + const tagStart = indentation + `<${tagName}${attStr}`; + const tagValue = arrToStr(tagObj[tagName], options, newJPath, newIdentation); + if (options.unpairedTags.indexOf(tagName) !== -1) { + if (options.suppressUnpairedNode) xmlStr += tagStart + ">"; + else xmlStr += tagStart + "/>"; + } else if ((!tagValue || tagValue.length === 0) && options.suppressEmptyNode) { + xmlStr += tagStart + "/>"; + } else if (tagValue && tagValue.endsWith(">")) { + xmlStr += tagStart + `>${tagValue}${indentation}`; + } else { + xmlStr += tagStart + ">"; + if (tagValue && indentation !== "" && (tagValue.includes("/>") || tagValue.includes("`; + } + isPreviousElementTag = true; + } + + return xmlStr; +} + +function propName(obj) { + const keys = Object.keys(obj); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if(!obj.hasOwnProperty(key)) continue; + if (key !== ":@") return key; + } +} + +function attr_to_str(attrMap, options) { + let attrStr = ""; + if (attrMap && !options.ignoreAttributes) { + for (let attr in attrMap) { + if(!attrMap.hasOwnProperty(attr)) continue; + let attrVal = options.attributeValueProcessor(attr, attrMap[attr]); + attrVal = replaceEntitiesValue(attrVal, options); + if (attrVal === true && options.suppressBooleanAttributes) { + attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}`; + } else { + attrStr += ` ${attr.substr(options.attributeNamePrefix.length)}="${attrVal}"`; + } + } + } + return attrStr; +} + +function isStopNode(jPath, options) { + jPath = jPath.substr(0, jPath.length - options.textNodeName.length - 1); + let tagName = jPath.substr(jPath.lastIndexOf(".") + 1); + for (let index in options.stopNodes) { + if (options.stopNodes[index] === jPath || options.stopNodes[index] === "*." + tagName) return true; + } + return false; +} + +function replaceEntitiesValue(textValue, options) { + if (textValue && textValue.length > 0 && options.processEntities) { + for (let i = 0; i < options.entities.length; i++) { + const entity = options.entities[i]; + textValue = textValue.replace(entity.regex, entity.val); + } + } + return textValue; +} +var orderedJs2Xml = toXml; + +//parse Empty Node as self closing node +const buildFromOrderedJs = orderedJs2Xml; +const getIgnoreAttributesFn = ignoreAttributes; + +const defaultOptions = { + attributeNamePrefix: '@_', + attributesGroupName: false, + textNodeName: '#text', + ignoreAttributes: true, + cdataPropName: false, + format: false, + indentBy: ' ', + suppressEmptyNode: false, + suppressUnpairedNode: true, + suppressBooleanAttributes: true, + tagValueProcessor: function(key, a) { + return a; + }, + attributeValueProcessor: function(attrName, a) { + return a; + }, + preserveOrder: false, + commentPropName: false, + unpairedTags: [], + entities: [ + { regex: new RegExp("&", "g"), val: "&" },//it must be on top + { regex: new RegExp(">", "g"), val: ">" }, + { regex: new RegExp("<", "g"), val: "<" }, + { regex: new RegExp("\'", "g"), val: "'" }, + { regex: new RegExp("\"", "g"), val: """ } + ], + processEntities: true, + stopNodes: [], + // transformTagName: false, + // transformAttributeName: false, + oneListGroup: false +}; + +function Builder(options) { + this.options = Object.assign({}, defaultOptions, options); + if (this.options.ignoreAttributes === true || this.options.attributesGroupName) { + this.isAttribute = function(/*a*/) { + return false; + }; + } else { + this.ignoreAttributesFn = getIgnoreAttributesFn(this.options.ignoreAttributes); + this.attrPrefixLen = this.options.attributeNamePrefix.length; + this.isAttribute = isAttribute; + } + + this.processTextOrObjNode = processTextOrObjNode; + + if (this.options.format) { + this.indentate = indentate; + this.tagEndChar = '>\n'; + this.newLine = '\n'; + } else { + this.indentate = function() { + return ''; + }; + this.tagEndChar = '>'; + this.newLine = ''; + } +} + +Builder.prototype.build = function(jObj) { + if(this.options.preserveOrder){ + return buildFromOrderedJs(jObj, this.options); + }else { + if(Array.isArray(jObj) && this.options.arrayNodeName && this.options.arrayNodeName.length > 1){ + jObj = { + [this.options.arrayNodeName] : jObj + }; + } + return this.j2x(jObj, 0, []).val; + } +}; + +Builder.prototype.j2x = function(jObj, level, ajPath) { + let attrStr = ''; + let val = ''; + const jPath = ajPath.join('.'); + for (let key in jObj) { + if(!Object.prototype.hasOwnProperty.call(jObj, key)) continue; + if (typeof jObj[key] === 'undefined') { + // supress undefined node only if it is not an attribute + if (this.isAttribute(key)) { + val += ''; + } + } else if (jObj[key] === null) { + // null attribute should be ignored by the attribute list, but should not cause the tag closing + if (this.isAttribute(key)) { + val += ''; + } else if (key[0] === '?') { + val += this.indentate(level) + '<' + key + '?' + this.tagEndChar; + } else { + val += this.indentate(level) + '<' + key + '/' + this.tagEndChar; + } + // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar; + } else if (jObj[key] instanceof Date) { + val += this.buildTextValNode(jObj[key], key, '', level); + } else if (typeof jObj[key] !== 'object') { + //premitive type + const attr = this.isAttribute(key); + if (attr && !this.ignoreAttributesFn(attr, jPath)) { + attrStr += this.buildAttrPairStr(attr, '' + jObj[key]); + } else if (!attr) { + //tag value + if (key === this.options.textNodeName) { + let newval = this.options.tagValueProcessor(key, '' + jObj[key]); + val += this.replaceEntitiesValue(newval); + } else { + val += this.buildTextValNode(jObj[key], key, '', level); + } + } + } else if (Array.isArray(jObj[key])) { + //repeated nodes + const arrLen = jObj[key].length; + let listTagVal = ""; + let listTagAttr = ""; + for (let j = 0; j < arrLen; j++) { + const item = jObj[key][j]; + if (typeof item === 'undefined') ; else if (item === null) { + if(key[0] === "?") val += this.indentate(level) + '<' + key + '?' + this.tagEndChar; + else val += this.indentate(level) + '<' + key + '/' + this.tagEndChar; + // val += this.indentate(level) + '<' + key + '/' + this.tagEndChar; + } else if (typeof item === 'object') { + if(this.options.oneListGroup){ + const result = this.j2x(item, level + 1, ajPath.concat(key)); + listTagVal += result.val; + if (this.options.attributesGroupName && item.hasOwnProperty(this.options.attributesGroupName)) { + listTagAttr += result.attrStr; + } + }else { + listTagVal += this.processTextOrObjNode(item, key, level, ajPath); + } + } else { + if (this.options.oneListGroup) { + let textValue = this.options.tagValueProcessor(key, item); + textValue = this.replaceEntitiesValue(textValue); + listTagVal += textValue; + } else { + listTagVal += this.buildTextValNode(item, key, '', level); + } + } + } + if(this.options.oneListGroup){ + listTagVal = this.buildObjectNode(listTagVal, key, listTagAttr, level); + } + val += listTagVal; + } else { + //nested node + if (this.options.attributesGroupName && key === this.options.attributesGroupName) { + const Ks = Object.keys(jObj[key]); + const L = Ks.length; + for (let j = 0; j < L; j++) { + attrStr += this.buildAttrPairStr(Ks[j], '' + jObj[key][Ks[j]]); + } + } else { + val += this.processTextOrObjNode(jObj[key], key, level, ajPath); + } + } + } + return {attrStr: attrStr, val: val}; +}; + +Builder.prototype.buildAttrPairStr = function(attrName, val){ + val = this.options.attributeValueProcessor(attrName, '' + val); + val = this.replaceEntitiesValue(val); + if (this.options.suppressBooleanAttributes && val === "true") { + return ' ' + attrName; + } else return ' ' + attrName + '="' + val + '"'; +}; + +function processTextOrObjNode (object, key, level, ajPath) { + const result = this.j2x(object, level + 1, ajPath.concat(key)); + if (object[this.options.textNodeName] !== undefined && Object.keys(object).length === 1) { + return this.buildTextValNode(object[this.options.textNodeName], key, result.attrStr, level); + } else { + return this.buildObjectNode(result.val, key, result.attrStr, level); + } +} + +Builder.prototype.buildObjectNode = function(val, key, attrStr, level) { + if(val === ""){ + if(key[0] === "?") return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar; + else { + return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar; + } + }else { + + let tagEndExp = '' + val + tagEndExp ); + } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) { + return this.indentate(level) + `` + this.newLine; + }else { + return ( + this.indentate(level) + '<' + key + attrStr + piClosingChar + this.tagEndChar + + val + + this.indentate(level) + tagEndExp ); + } + } +}; + +Builder.prototype.closeTag = function(key){ + let closeTag = ""; + if(this.options.unpairedTags.indexOf(key) !== -1){ //unpaired + if(!this.options.suppressUnpairedNode) closeTag = "/"; + }else if(this.options.suppressEmptyNode){ //empty + closeTag = "/"; + }else { + closeTag = `>` + this.newLine; + }else if (this.options.commentPropName !== false && key === this.options.commentPropName) { + return this.indentate(level) + `` + this.newLine; + }else if(key[0] === "?") {//PI tag + return this.indentate(level) + '<' + key + attrStr+ '?' + this.tagEndChar; + }else { + let textValue = this.options.tagValueProcessor(key, val); + textValue = this.replaceEntitiesValue(textValue); + + if( textValue === ''){ + return this.indentate(level) + '<' + key + attrStr + this.closeTag(key) + this.tagEndChar; + }else { + return this.indentate(level) + '<' + key + attrStr + '>' + + textValue + + ' 0 && this.options.processEntities){ + for (let i=0; i { + if (input === undefined || input === null) { + return false; + } + + input = input.toString().trim(); + + if (input.length === 0) { + return false; + } + + // Has to be `!==` as it can also return an object with error info. + if (XMLValidator.validate(input) !== true) { + return false; + } + + let jsonObject; + const parser = new XMLParser(); + + try { + jsonObject = parser.parse(input); + } catch (_) { + return false; + } + + if (!jsonObject) { + return false; + } + + if (!('svg' in jsonObject)) { + return false; + } + + return true; +}; + +isSvg$2.exports = isSvg; +// TODO: Remove this for the next major release +isSvg$2.exports.default = isSvg; + +var isSvgExports = isSvg$2.exports; +var isSvg$1 = /*@__PURE__*/getDefaultExportFromCjs(isSvgExports); + +var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; + +var escapeStringRegexp$2 = function (str) { + if (typeof str !== 'string') { + throw new TypeError('Expected a string'); + } + + return str.replace(matchOperatorsRe, '\\$&'); +}; + +var escapeStringRegexp$1 = escapeStringRegexp$2; + +var trimRepeated = function (str, target) { + if (typeof str !== 'string' || typeof target !== 'string') { + throw new TypeError('Expected a string'); + } + + return str.replace(new RegExp('(?:' + escapeStringRegexp$1(target) + '){2,}', 'g'), target); +}; + +var trimRepeated$1 = /*@__PURE__*/getDefaultExportFromCjs(trimRepeated); + +var filenameReservedRegex$1 = {exports: {}}; + +/* eslint-disable no-control-regex */ +// TODO: remove parens when Node.js 6 is targeted. Node.js 4 barfs at it. +filenameReservedRegex$1.exports = () => (/[<>:"\/\\|?*\x00-\x1F]/g); +filenameReservedRegex$1.exports.windowsNames = () => (/^(con|prn|aux|nul|com[0-9]|lpt[0-9])$/i); + +var filenameReservedRegexExports = filenameReservedRegex$1.exports; +var filenameReservedRegex = /*@__PURE__*/getDefaultExportFromCjs(filenameReservedRegexExports); + +var escapeStringRegexp = escapeStringRegexp$2; + +var stripOuter = function (str, sub) { + if (typeof str !== 'string' || typeof sub !== 'string') { + throw new TypeError(); + } + + sub = escapeStringRegexp(sub); + return str.replace(new RegExp('^' + sub + '|' + sub + '$', 'g'), ''); +}; + +var stripOuter$1 = /*@__PURE__*/getDefaultExportFromCjs(stripOuter); + +// Doesn't make sense to have longer filenames +const MAX_FILENAME_LENGTH = 100; + +const reControlChars = /[\u0000-\u001F\u0080-\u009F]/g; // eslint-disable-line no-control-regex +const reRelativePath = /^\.+/; +const reTrailingPeriods = /\.+$/; + +function filenamify(string, options = {}) { + if (typeof string !== 'string') { + throw new TypeError('Expected a string'); + } + + const replacement = options.replacement === undefined ? '!' : options.replacement; + + if (filenameReservedRegex().test(replacement) && reControlChars.test(replacement)) { + throw new Error('Replacement string cannot contain reserved filename characters'); + } + + string = string.replace(filenameReservedRegex(), replacement); + string = string.replace(reControlChars, replacement); + string = string.replace(reRelativePath, replacement); + string = string.replace(reTrailingPeriods, ''); + + if (replacement.length > 0) { + string = trimRepeated$1(string, replacement); + string = string.length > 1 ? stripOuter$1(string, replacement) : string; + } + + string = filenameReservedRegex.windowsNames().test(string) ? string + replacement : string; + string = string.slice(0, typeof options.maxLength === 'number' ? options.maxLength : MAX_FILENAME_LENGTH); + + return string; +} + +var md5$1 = {exports: {}}; + +function commonjsRequire(path) { + throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.'); +} + +var core = {exports: {}}; + +var _nodeResolve_empty = {}; + +var _nodeResolve_empty$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + 'default': _nodeResolve_empty +}); + +var require$$0 = /*@__PURE__*/getAugmentedNamespace(_nodeResolve_empty$1); + +core.exports; + +var hasRequiredCore; + +function requireCore () { + if (hasRequiredCore) return core.exports; + hasRequiredCore = 1; + (function (module, exports) { +(function (root, factory) { + { + // CommonJS + module.exports = factory(); + } + }(commonjsGlobal, function () { + + /*globals window, global, require*/ + + /** + * CryptoJS core components. + */ + var CryptoJS = CryptoJS || (function (Math, undefined$1) { + + var crypto; + + // Native crypto from window (Browser) + if (typeof window !== 'undefined' && window.crypto) { + crypto = window.crypto; + } + + // Native crypto in web worker (Browser) + if (typeof self !== 'undefined' && self.crypto) { + crypto = self.crypto; + } + + // Native crypto from worker + if (typeof globalThis !== 'undefined' && globalThis.crypto) { + crypto = globalThis.crypto; + } + + // Native (experimental IE 11) crypto from window (Browser) + if (!crypto && typeof window !== 'undefined' && window.msCrypto) { + crypto = window.msCrypto; + } + + // Native crypto from global (NodeJS) + if (!crypto && typeof commonjsGlobal !== 'undefined' && commonjsGlobal.crypto) { + crypto = commonjsGlobal.crypto; + } + + // Native crypto import via require (NodeJS) + if (!crypto && typeof commonjsRequire === 'function') { + try { + crypto = require$$0; + } catch (err) {} + } + + /* + * Cryptographically secure pseudorandom number generator + * + * As Math.random() is cryptographically not safe to use + */ + var cryptoSecureRandomInt = function () { + if (crypto) { + // Use getRandomValues method (Browser) + if (typeof crypto.getRandomValues === 'function') { + try { + return crypto.getRandomValues(new Uint32Array(1))[0]; + } catch (err) {} + } + + // Use randomBytes method (NodeJS) + if (typeof crypto.randomBytes === 'function') { + try { + return crypto.randomBytes(4).readInt32LE(); + } catch (err) {} + } + } + + throw new Error('Native crypto module could not be used to get secure random number.'); + }; + + /* + * Local polyfill of Object.create + + */ + var create = Object.create || (function () { + function F() {} + + return function (obj) { + var subtype; + + F.prototype = obj; + + subtype = new F(); + + F.prototype = null; + + return subtype; + }; + }()); + + /** + * CryptoJS namespace. + */ + var C = {}; + + /** + * Library namespace. + */ + var C_lib = C.lib = {}; + + /** + * Base object for prototypal inheritance. + */ + var Base = C_lib.Base = (function () { + + + return { + /** + * Creates a new object that inherits from this object. + * + * @param {Object} overrides Properties to copy into the new object. + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * field: 'value', + * + * method: function () { + * } + * }); + */ + extend: function (overrides) { + // Spawn + var subtype = create(this); + + // Augment + if (overrides) { + subtype.mixIn(overrides); + } + + // Create default initializer + if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { + subtype.init = function () { + subtype.$super.init.apply(this, arguments); + }; + } + + // Initializer's prototype is the subtype object + subtype.init.prototype = subtype; + + // Reference supertype + subtype.$super = this; + + return subtype; + }, + + /** + * Extends this object and runs the init method. + * Arguments to create() will be passed to init(). + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var instance = MyType.create(); + */ + create: function () { + var instance = this.extend(); + instance.init.apply(instance, arguments); + + return instance; + }, + + /** + * Initializes a newly created object. + * Override this method to add some logic when your objects are created. + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * init: function () { + * // ... + * } + * }); + */ + init: function () { + }, + + /** + * Copies properties into this object. + * + * @param {Object} properties The properties to mix in. + * + * @example + * + * MyType.mixIn({ + * field: 'value' + * }); + */ + mixIn: function (properties) { + for (var propertyName in properties) { + if (properties.hasOwnProperty(propertyName)) { + this[propertyName] = properties[propertyName]; + } + } + + // IE won't copy toString using the loop above + if (properties.hasOwnProperty('toString')) { + this.toString = properties.toString; + } + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = instance.clone(); + */ + clone: function () { + return this.init.prototype.extend(this); + } + }; + }()); + + /** + * An array of 32-bit words. + * + * @property {Array} words The array of 32-bit words. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var WordArray = C_lib.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of 32-bit words. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.create(); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined$1) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 4; + } + }, + + /** + * Converts this word array to a string. + * + * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex + * + * @return {string} The stringified word array. + * + * @example + * + * var string = wordArray + ''; + * var string = wordArray.toString(); + * var string = wordArray.toString(CryptoJS.enc.Utf8); + */ + toString: function (encoder) { + return (encoder || Hex).stringify(this); + }, + + /** + * Concatenates a word array to this word array. + * + * @param {WordArray} wordArray The word array to append. + * + * @return {WordArray} This word array. + * + * @example + * + * wordArray1.concat(wordArray2); + */ + concat: function (wordArray) { + // Shortcuts + var thisWords = this.words; + var thatWords = wordArray.words; + var thisSigBytes = this.sigBytes; + var thatSigBytes = wordArray.sigBytes; + + // Clamp excess bits + this.clamp(); + + // Concat + if (thisSigBytes % 4) { + // Copy one byte at a time + for (var i = 0; i < thatSigBytes; i++) { + var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); + } + } else { + // Copy one word at a time + for (var j = 0; j < thatSigBytes; j += 4) { + thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2]; + } + } + this.sigBytes += thatSigBytes; + + // Chainable + return this; + }, + + /** + * Removes insignificant bits. + * + * @example + * + * wordArray.clamp(); + */ + clamp: function () { + // Shortcuts + var words = this.words; + var sigBytes = this.sigBytes; + + // Clamp + words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); + words.length = Math.ceil(sigBytes / 4); + }, + + /** + * Creates a copy of this word array. + * + * @return {WordArray} The clone. + * + * @example + * + * var clone = wordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone.words = this.words.slice(0); + + return clone; + }, + + /** + * Creates a word array filled with random bytes. + * + * @param {number} nBytes The number of random bytes to generate. + * + * @return {WordArray} The random word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.random(16); + */ + random: function (nBytes) { + var words = []; + + for (var i = 0; i < nBytes; i += 4) { + words.push(cryptoSecureRandomInt()); + } + + return new WordArray.init(words, nBytes); + } + }); + + /** + * Encoder namespace. + */ + var C_enc = C.enc = {}; + + /** + * Hex encoding strategy. + */ + var Hex = C_enc.Hex = { + /** + * Converts a word array to a hex string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The hex string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.enc.Hex.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var hexChars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + hexChars.push((bite >>> 4).toString(16)); + hexChars.push((bite & 0x0f).toString(16)); + } + + return hexChars.join(''); + }, + + /** + * Converts a hex string to a word array. + * + * @param {string} hexStr The hex string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Hex.parse(hexString); + */ + parse: function (hexStr) { + // Shortcut + var hexStrLength = hexStr.length; + + // Convert + var words = []; + for (var i = 0; i < hexStrLength; i += 2) { + words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); + } + + return new WordArray.init(words, hexStrLength / 2); + } + }; + + /** + * Latin1 encoding strategy. + */ + var Latin1 = C_enc.Latin1 = { + /** + * Converts a word array to a Latin1 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Latin1 string. + * + * @static + * + * @example + * + * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var latin1Chars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + latin1Chars.push(String.fromCharCode(bite)); + } + + return latin1Chars.join(''); + }, + + /** + * Converts a Latin1 string to a word array. + * + * @param {string} latin1Str The Latin1 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); + */ + parse: function (latin1Str) { + // Shortcut + var latin1StrLength = latin1Str.length; + + // Convert + var words = []; + for (var i = 0; i < latin1StrLength; i++) { + words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); + } + + return new WordArray.init(words, latin1StrLength); + } + }; + + /** + * UTF-8 encoding strategy. + */ + var Utf8 = C_enc.Utf8 = { + /** + * Converts a word array to a UTF-8 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-8 string. + * + * @static + * + * @example + * + * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); + */ + stringify: function (wordArray) { + try { + return decodeURIComponent(escape(Latin1.stringify(wordArray))); + } catch (e) { + throw new Error('Malformed UTF-8 data'); + } + }, + + /** + * Converts a UTF-8 string to a word array. + * + * @param {string} utf8Str The UTF-8 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); + */ + parse: function (utf8Str) { + return Latin1.parse(unescape(encodeURIComponent(utf8Str))); + } + }; + + /** + * Abstract buffered block algorithm template. + * + * The property blockSize must be implemented in a concrete subtype. + * + * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 + */ + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ + /** + * Resets this block algorithm's data buffer to its initial state. + * + * @example + * + * bufferedBlockAlgorithm.reset(); + */ + reset: function () { + // Initial values + this._data = new WordArray.init(); + this._nDataBytes = 0; + }, + + /** + * Adds new data to this block algorithm's buffer. + * + * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. + * + * @example + * + * bufferedBlockAlgorithm._append('data'); + * bufferedBlockAlgorithm._append(wordArray); + */ + _append: function (data) { + // Convert string to WordArray, else assume WordArray already + if (typeof data == 'string') { + data = Utf8.parse(data); + } + + // Append + this._data.concat(data); + this._nDataBytes += data.sigBytes; + }, + + /** + * Processes available data blocks. + * + * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. + * + * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. + * + * @return {WordArray} The processed data. + * + * @example + * + * var processedData = bufferedBlockAlgorithm._process(); + * var processedData = bufferedBlockAlgorithm._process(!!'flush'); + */ + _process: function (doFlush) { + var processedWords; + + // Shortcuts + var data = this._data; + var dataWords = data.words; + var dataSigBytes = data.sigBytes; + var blockSize = this.blockSize; + var blockSizeBytes = blockSize * 4; + + // Count blocks ready + var nBlocksReady = dataSigBytes / blockSizeBytes; + if (doFlush) { + // Round up to include partial blocks + nBlocksReady = Math.ceil(nBlocksReady); + } else { + // Round down to include only full blocks, + // less the number of blocks that must remain in the buffer + nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); + } + + // Count words ready + var nWordsReady = nBlocksReady * blockSize; + + // Count bytes ready + var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); + + // Process blocks + if (nWordsReady) { + for (var offset = 0; offset < nWordsReady; offset += blockSize) { + // Perform concrete-algorithm logic + this._doProcessBlock(dataWords, offset); + } + + // Remove processed words + processedWords = dataWords.splice(0, nWordsReady); + data.sigBytes -= nBytesReady; + } + + // Return processed words + return new WordArray.init(processedWords, nBytesReady); + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = bufferedBlockAlgorithm.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone._data = this._data.clone(); + + return clone; + }, + + _minBufferSize: 0 + }); + + /** + * Abstract hasher template. + * + * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) + */ + C_lib.Hasher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + */ + cfg: Base.extend(), + + /** + * Initializes a newly created hasher. + * + * @param {Object} cfg (Optional) The configuration options to use for this hash computation. + * + * @example + * + * var hasher = CryptoJS.algo.SHA256.create(); + */ + init: function (cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Set initial values + this.reset(); + }, + + /** + * Resets this hasher to its initial state. + * + * @example + * + * hasher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-hasher logic + this._doReset(); + }, + + /** + * Updates this hasher with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {Hasher} This hasher. + * + * @example + * + * hasher.update('message'); + * hasher.update(wordArray); + */ + update: function (messageUpdate) { + // Append + this._append(messageUpdate); + + // Update the hash + this._process(); + + // Chainable + return this; + }, + + /** + * Finalizes the hash computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The hash. + * + * @example + * + * var hash = hasher.finalize(); + * var hash = hasher.finalize('message'); + * var hash = hasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Final message update + if (messageUpdate) { + this._append(messageUpdate); + } + + // Perform concrete-hasher logic + var hash = this._doFinalize(); + + return hash; + }, + + blockSize: 512/32, + + /** + * Creates a shortcut function to a hasher's object interface. + * + * @param {Hasher} hasher The hasher to create a helper for. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); + */ + _createHelper: function (hasher) { + return function (message, cfg) { + return new hasher.init(cfg).finalize(message); + }; + }, + + /** + * Creates a shortcut function to the HMAC's object interface. + * + * @param {Hasher} hasher The hasher to use in this HMAC helper. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); + */ + _createHmacHelper: function (hasher) { + return function (message, key) { + return new C_algo.HMAC.init(hasher, key).finalize(message); + }; + } + }); + + /** + * Algorithm namespace. + */ + var C_algo = C.algo = {}; + + return C; + }(Math)); + + + return CryptoJS; + + })); + } (core, core.exports)); + return core.exports; +} + +md5$1.exports; + +(function (module, exports) { +(function (root, factory) { + { + // CommonJS + module.exports = factory(requireCore()); + } + }(commonjsGlobal, function (CryptoJS) { + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Constants table + var T = []; + + // Compute constants + (function () { + for (var i = 0; i < 64; i++) { + T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; + } + }()); + + /** + * MD5 hash algorithm. + */ + var MD5 = C_algo.MD5 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476 + ]); + }, + + _doProcessBlock: function (M, offset) { + // Swap endian + for (var i = 0; i < 16; i++) { + // Shortcuts + var offset_i = offset + i; + var M_offset_i = M[offset_i]; + + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ); + } + + // Shortcuts + var H = this._hash.words; + + var M_offset_0 = M[offset + 0]; + var M_offset_1 = M[offset + 1]; + var M_offset_2 = M[offset + 2]; + var M_offset_3 = M[offset + 3]; + var M_offset_4 = M[offset + 4]; + var M_offset_5 = M[offset + 5]; + var M_offset_6 = M[offset + 6]; + var M_offset_7 = M[offset + 7]; + var M_offset_8 = M[offset + 8]; + var M_offset_9 = M[offset + 9]; + var M_offset_10 = M[offset + 10]; + var M_offset_11 = M[offset + 11]; + var M_offset_12 = M[offset + 12]; + var M_offset_13 = M[offset + 13]; + var M_offset_14 = M[offset + 14]; + var M_offset_15 = M[offset + 15]; + + // Working variables + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + + // Computation + a = FF(a, b, c, d, M_offset_0, 7, T[0]); + d = FF(d, a, b, c, M_offset_1, 12, T[1]); + c = FF(c, d, a, b, M_offset_2, 17, T[2]); + b = FF(b, c, d, a, M_offset_3, 22, T[3]); + a = FF(a, b, c, d, M_offset_4, 7, T[4]); + d = FF(d, a, b, c, M_offset_5, 12, T[5]); + c = FF(c, d, a, b, M_offset_6, 17, T[6]); + b = FF(b, c, d, a, M_offset_7, 22, T[7]); + a = FF(a, b, c, d, M_offset_8, 7, T[8]); + d = FF(d, a, b, c, M_offset_9, 12, T[9]); + c = FF(c, d, a, b, M_offset_10, 17, T[10]); + b = FF(b, c, d, a, M_offset_11, 22, T[11]); + a = FF(a, b, c, d, M_offset_12, 7, T[12]); + d = FF(d, a, b, c, M_offset_13, 12, T[13]); + c = FF(c, d, a, b, M_offset_14, 17, T[14]); + b = FF(b, c, d, a, M_offset_15, 22, T[15]); + + a = GG(a, b, c, d, M_offset_1, 5, T[16]); + d = GG(d, a, b, c, M_offset_6, 9, T[17]); + c = GG(c, d, a, b, M_offset_11, 14, T[18]); + b = GG(b, c, d, a, M_offset_0, 20, T[19]); + a = GG(a, b, c, d, M_offset_5, 5, T[20]); + d = GG(d, a, b, c, M_offset_10, 9, T[21]); + c = GG(c, d, a, b, M_offset_15, 14, T[22]); + b = GG(b, c, d, a, M_offset_4, 20, T[23]); + a = GG(a, b, c, d, M_offset_9, 5, T[24]); + d = GG(d, a, b, c, M_offset_14, 9, T[25]); + c = GG(c, d, a, b, M_offset_3, 14, T[26]); + b = GG(b, c, d, a, M_offset_8, 20, T[27]); + a = GG(a, b, c, d, M_offset_13, 5, T[28]); + d = GG(d, a, b, c, M_offset_2, 9, T[29]); + c = GG(c, d, a, b, M_offset_7, 14, T[30]); + b = GG(b, c, d, a, M_offset_12, 20, T[31]); + + a = HH(a, b, c, d, M_offset_5, 4, T[32]); + d = HH(d, a, b, c, M_offset_8, 11, T[33]); + c = HH(c, d, a, b, M_offset_11, 16, T[34]); + b = HH(b, c, d, a, M_offset_14, 23, T[35]); + a = HH(a, b, c, d, M_offset_1, 4, T[36]); + d = HH(d, a, b, c, M_offset_4, 11, T[37]); + c = HH(c, d, a, b, M_offset_7, 16, T[38]); + b = HH(b, c, d, a, M_offset_10, 23, T[39]); + a = HH(a, b, c, d, M_offset_13, 4, T[40]); + d = HH(d, a, b, c, M_offset_0, 11, T[41]); + c = HH(c, d, a, b, M_offset_3, 16, T[42]); + b = HH(b, c, d, a, M_offset_6, 23, T[43]); + a = HH(a, b, c, d, M_offset_9, 4, T[44]); + d = HH(d, a, b, c, M_offset_12, 11, T[45]); + c = HH(c, d, a, b, M_offset_15, 16, T[46]); + b = HH(b, c, d, a, M_offset_2, 23, T[47]); + + a = II(a, b, c, d, M_offset_0, 6, T[48]); + d = II(d, a, b, c, M_offset_7, 10, T[49]); + c = II(c, d, a, b, M_offset_14, 15, T[50]); + b = II(b, c, d, a, M_offset_5, 21, T[51]); + a = II(a, b, c, d, M_offset_12, 6, T[52]); + d = II(d, a, b, c, M_offset_3, 10, T[53]); + c = II(c, d, a, b, M_offset_10, 15, T[54]); + b = II(b, c, d, a, M_offset_1, 21, T[55]); + a = II(a, b, c, d, M_offset_8, 6, T[56]); + d = II(d, a, b, c, M_offset_15, 10, T[57]); + c = II(c, d, a, b, M_offset_6, 15, T[58]); + b = II(b, c, d, a, M_offset_13, 21, T[59]); + a = II(a, b, c, d, M_offset_4, 6, T[60]); + d = II(d, a, b, c, M_offset_11, 10, T[61]); + c = II(c, d, a, b, M_offset_2, 15, T[62]); + b = II(b, c, d, a, M_offset_9, 21, T[63]); + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + + var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); + var nBitsTotalL = nBitsTotal; + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( + (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | + (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) + ); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | + (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) + ); + + data.sigBytes = (dataWords.length + 1) * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var hash = this._hash; + var H = hash.words; + + // Swap endian + for (var i = 0; i < 4; i++) { + // Shortcut + var H_i = H[i]; + + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); + } + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + function FF(a, b, c, d, x, s, t) { + var n = a + ((b & c) | (~b & d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function GG(a, b, c, d, x, s, t) { + var n = a + ((b & d) | (c & ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function HH(a, b, c, d, x, s, t) { + var n = a + (b ^ c ^ d) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function II(a, b, c, d, x, s, t) { + var n = a + (c ^ (b | ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.MD5('message'); + * var hash = CryptoJS.MD5(wordArray); + */ + C.MD5 = Hasher._createHelper(MD5); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacMD5(message, key); + */ + C.HmacMD5 = Hasher._createHmacHelper(MD5); + }(Math)); + + + return CryptoJS.MD5; + + })); +} (md5$1, md5$1.exports)); + +var md5Exports = md5$1.exports; +var md5 = /*@__PURE__*/getDefaultExportFromCjs(md5Exports); + +const APP_TITLE = "Local Images Plus 0.16.3"; +//Option to enable debugging +let VERBOSE = false; +function setDebug(value = false) { + VERBOSE = value; +} +const SUPPORTED_OS = { "win": "win32", "unix": "linux,darwin,freebsd,openbsd" }; +const USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'; +const MD_SEARCH_PATTERN = [ + //file link + /\!\[(?(.{0}|(?!^file\:\/)+?))\]\((?((file\:\/)[^\!]+?(\.{1}.{3,4}\) {0,1}|\)$|\)\n|\)])))/gm, + //hypertext link + ///\!\[(?(.{0}|[^\[]+?))\]\((?((http(s){0,1}).+?(\) |\..{3,4}\)|\)$|\)\n|\)\]|\)\[)))/gm, + /\!\[(?([^\]]*))\]\((?((http(s){0,1}).+?(\) |\..{3,4}\)|\)$|\)\n|\)\]|\)\[)))/gm, + //Base64 encoded data + /\!\[[^\[](?(.{0}|[^\[]+?))\]\((?((data\:.+?base64\,).+?(\) |\..{3,4}\)|\)$|\)\n|\)\]|\)\[)))/gm, + /\!\[(?(.{0}|[^\[]+?))\]\((?((http(s){0,1}|(data\:.+?base64\,)).+?\)))/gm +]; +const MD_LINK = /\http(s){0,1}.+?( {1}|\)\n)/g; +const ATT_SIZE_ACHOR = /(^(?.{1,})\|(?[0-9]{2,4})$)|(?^[0-9]{2,4}$)/gm; +// Looks like timeouts in Obsidian API are set in milliseconds +const NOTICE_TIMEOUT = 5 * 1000; +const TIMEOUT_LIKE_INFINITY = 24 * 60 * 60 * 1000; +const FORBIDDEN_SYMBOLS_FILENAME_PATTERN = /\s+/g; +const DEFAULT_SETTINGS = { + processCreated: true, + ignoredExt: "cnt|php|htm|html", + processAll: true, + useCaptions: true, + pathInTags: "fullDirPath", + downUnknown: false, + saveAttE: "obsFolder", + realTimeUpdate: true, + filesizeLimit: 0, + tryCount: 2, + realTimeUpdateInterval: 5, + addNameOfFile: true, + showNotifications: true, + includeps: "md|canvas", + includepattern: "(?.*\\.md)|(?.*\\.canvas)", + mediaRootDir: "_resources/${notename}", + disAddCom: false, + useMD5ForNewAtt: true, + removeMediaFolder: true, + removeOrphansCompl: false, + PngToJpeg: false, + PngToJpegLocal: true, + JpegQuality: 80, + DoNotCreateObsFolder: false, + DateFormat: "YYYY MM DD" +}; + +const fs2 = require('fs').promises; +//import { TIMEOUT } from "dns"; +//import fs from "fs"; +/* +https://stackoverflow.com/a/48032528/1020973 +It will be better to do it type-correct. +*/ +function showBalloon(str, show = true, timeout = NOTICE_TIMEOUT) { + return __awaiter(this, void 0, void 0, function* () { + if (show) { + new obsidian.Notice(APP_TITLE + "\r\n" + str, timeout); + } + }); +} +function displayError(error, file) { + if (file) { + showBalloon(`LocalImagesPlus: Error while handling file ${file.name}, ${error.toString()}`); + } + else { + showBalloon(error.toString()); + } + logError(`LocalImagesPlus: error: ${error}`, false); +} +function logError(str, isObj = false) { + return __awaiter(this, void 0, void 0, function* () { + if (VERBOSE) { + console.log(APP_TITLE + ": "); + if (isObj) { + console.table(str); + } + else { + console.log(str); + } + } + }); +} +function md5Sig(contentData = undefined) { + try { + var dec = new TextDecoder("utf-8"); + const arrMid = Math.round(contentData.byteLength / 2); + const chunk = 15000; + const signature = md5([ + contentData.slice(0, chunk), + contentData.slice(arrMid, arrMid + chunk), + contentData.slice(-chunk) + ].map(x => dec.decode(x)).join()).toString(); + return signature + "_MD5"; + } + catch (e) { + logError("Cannot generate md5: " + e, false); + return null; + } +} +function replaceAsync(str, regex, asyncFn) { + return __awaiter(this, void 0, void 0, function* () { + logError("replaceAsync: \r\nstr: " + str + "\r\nregex: "); + logError(regex, true); + let errorflag = false; + const promises = []; + let dictPatt = []; + let link; + let anchor; + let replp; + let caption = ""; + let filesArr = []; + let AttSize = ""; + regex.forEach((element) => { + var _a; + logError("cur regex: " + element); + const matches = str.matchAll(element); + for (const match of matches) { + logError("match: " + match); + anchor = trimAny(match.groups.anchor, [")", "(", "]", "[", " "]); + const AttSizeMatch = anchor.matchAll(ATT_SIZE_ACHOR); + for (const match of AttSizeMatch) { + AttSize = (match.groups.attsize !== undefined) ? trimAny(match.groups.attsize, [")", "(", "]", "[", " "]) : + (match.groups.attsize2 !== undefined) ? trimAny(match.groups.attsize2, [")", "(", "]", "[", " "]) : + ""; + } + link = ((_a = match.groups.link.match(MD_LINK)) !== null && _a !== void 0 ? _a : [match.groups.link])[0]; + caption = trimAny((match.groups.link.match(MD_LINK) !== null ? + (match.groups.link.split(link).length > 1 ? + match.groups.link.split(link)[1] : "") : + ""), [")", "]", "(", "[", " "]); + link = trimAny(link, [")", "(", "]", "[", " "]); + replp = trimAny(match[0], ["[", "(", "]"]); + logError("repl: " + replp + + "\r\nahc: " + anchor + + "\r\nlink: " + link + + "\r\ncaption: " + caption + + "\r\nAttSize: " + AttSize); + dictPatt[replp] = [anchor, link, caption, AttSize]; + } + }); + for (var key in dictPatt) { + const promise = asyncFn(key, dictPatt[key][0], dictPatt[key][1], dictPatt[key][2], dictPatt[key][3]); + logError(promise, true); + promises.push(promise); + } + const data = yield Promise.all(promises); + logError("Promises: "); + logError(data, true); + // return str.replace((reg: RegExp, str: String) => { + data.forEach((element) => { + if (element !== null) { + logError("el: " + element[0] + " el2: " + element[1] + element[2]); + str = str.replaceAll(element[0], element[1] + element[2]); + filesArr.push(element[1]); + } + else { + errorflag = true; + } + }); + return [str, errorflag, filesArr]; + // return str.replace( () => data.shift()); + }); +} +function isUrl(link) { + logError("IsUrl: " + link, false); + try { + return Boolean(new URL(link)); + } + catch (_) { + return false; + } +} +function base64ToBuff(data) { + return __awaiter(this, void 0, void 0, function* () { + logError("base64ToBuff: \r\n", false); + try { + const BufferData = Buffer.from(data.split("base64,")[1], 'base64'); + logError(BufferData); + return BufferData; + } + catch (e) { + logError("Cannot read base64: " + e, false); + return null; + } + }); +} +function readFromDiskB(file, count = undefined) { + return __awaiter(this, void 0, void 0, function* () { + try { + const buffer = Buffer.alloc(count); + const fd = fs__default["default"].openSync(file, "r+"); + fs__default["default"].readSync(fd, buffer, 0, buffer.length, 0); + logError(buffer); + fs__default["default"].closeSync(fd); + return buffer; + } + catch (e) { + logError("Cannot read the file: " + e, false); + return null; + } + }); +} +function readFromDisk(file) { + return __awaiter(this, void 0, void 0, function* () { + logError("readFromDisk: " + file, false); + try { + const data = yield fs2.readFile(file, null); + return Buffer.from(data); + } + catch (e) { + logError("Cannot read the file: " + e, false); + return null; + } + }); +} +function downloadImage(url) { + return __awaiter(this, void 0, void 0, function* () { + logError("Downloading: " + url, false); + const headers = { + 'method': 'GET', + 'User-Agent': USER_AGENT + }; + try { + const res = yield obsidian.requestUrl({ url: url, headers }); + logError(res, true); + return res.arrayBuffer; + } + catch (e) { + logError("Cannot download the file: " + e, false); + return null; + } + }); +} +function getFileExt(content, link) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + const fileExtByLink = path__default["default"].extname(link).replace("\.", ""); + const fileExtByBuffer = (_a = (yield fileType_1.fromBuffer(content))) === null || _a === void 0 ? void 0 : _a.ext; + // if XML, probably it is SVG + if (fileExtByBuffer == "xml" || !fileExtByBuffer) { + const buffer = Buffer.from(content); + if (isSvg$1(buffer)) + return "svg"; + } + logError("fileExtByBuffer" + fileExtByBuffer); + if (fileExtByBuffer != undefined && fileExtByBuffer && fileExtByBuffer.length <= 5 && (fileExtByBuffer === null || fileExtByBuffer === void 0 ? void 0 : fileExtByBuffer.length) > 0) { + return fileExtByBuffer; + } + logError("fileExtByLink " + fileExtByLink); + if (fileExtByLink != undefined && fileExtByLink.length <= 5 && (fileExtByLink === null || fileExtByLink === void 0 ? void 0 : fileExtByLink.length) > 0) { + return fileExtByLink; + } + return "unknown"; + }); +} +//https://stackoverflow.com/questions/26156292/trim-specific-character-from-a-string +function trimAny(str, chars) { + var start = 0, end = str.length; + while (start < end && chars.indexOf(str[start]) >= 0) + ++start; + while (end > start && chars.indexOf(str[end - 1]) >= 0) + --end; + return (start > 0 || end < str.length) ? str.substring(start, end) : str; +} +function cFileName(name) { + const cleanedName = name.replace(/(\)|\(|\"|\'|\#|\]|\[|\:|\>|\<|\*|\|)/g, " "); + return cleanedName; +} +function cleanFileName(name) { + const cleanedName = filenamify(name).replace(FORBIDDEN_SYMBOLS_FILENAME_PATTERN, "_"); + return cleanedName; +} +function pathJoin(parts) { + const result = path__default["default"].join(...parts); + // it seems that obsidian do not understand paths with backslashes in Windows, so turn them into forward slashes + return result.replace(/\\/g, "/"); +} +function normalizePath(path) { + return path.replace(/\\/g, "/"); +} +function encObsURI(e) { + return e.replace(/[\\\x00\x08\x0B\x0C\x0E-\x1F ]/g, (function (e) { + return encodeURIComponent(e); + })); +} +/** + * https://github.com/mnaoumov/obsidian-dev-utils + * + * Converts a Blob object to a JPEG ArrayBuffer with the specified quality. + * + * @param blob - The Blob object to convert. + * @param jpegQuality - The quality of the JPEG image (0 to 1). + * @returns A promise that resolves to an ArrayBuffer. + */ +function blobToJpegArrayBuffer(blob, jpegQuality) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve) => { + const reader = new FileReader(); + reader.onloadend = () => { + const image = new Image(); + image.onload = () => { + const canvas = document.createElement('canvas'); + const context = canvas.getContext('2d'); + if (!context) { + throw new Error('Could not get 2D context.'); + } + const imageWidth = image.width; + const imageHeight = image.height; + let data = ''; + canvas.width = imageWidth; + canvas.height = imageHeight; + context.fillStyle = '#fff'; + context.fillRect(0, 0, imageWidth, imageHeight); + context.save(); + context.translate(imageWidth / 2, imageHeight / 2); + context.drawImage(image, 0, 0, imageWidth, imageHeight, -imageWidth / 2, -imageHeight / 2, imageWidth, imageHeight); + context.restore(); + data = canvas.toDataURL('image/jpeg', jpegQuality); + const arrayBuffer = base64ToBuff(data); + resolve(arrayBuffer); + }; + image.src = reader.result; + }; + reader.readAsDataURL(blob); + }); + }); +} + +// Generic options +class AnalyzerOptions { + constructor(heuristic_replimit) { + this.heuristic_replimit = heuristic_replimit; + } +} + +// Abstract class +class Analyzer { + constructor(analyzerOptions) { + this.options = analyzerOptions; + } + + // Subclasser must implement + // Return boolean + isVulnerable(regExp) { + return false; + } + + // Subclass must implement + // Returns an AttackString or null + genAttackString(regExp) { + return null; + } +} + +var analyzer$2 = function(re, replimit) { + // Build an AST + let myRegExp = null; + let ast = null; + try { + // Construct a RegExp object + if (re instanceof RegExp) { + myRegExp = re; + } else if (typeof re === "string") { + myRegExp = new RegExp(re); + } else { + myRegExp = new RegExp(String(re)); + } + + // Build an AST + ast = regexpTree.parse(myRegExp); + } catch (err) { + // Invalid or unparseable input + return false; + } + + let currentStarHeight = 0; + let maxObservedStarHeight = 0; + + let repetitionCount = 0; + + regexpTree.traverse(ast, { + Repetition: { + pre({ node }) { + repetitionCount++; + + currentStarHeight++; + if (maxObservedStarHeight < currentStarHeight) { + maxObservedStarHeight = currentStarHeight; + } + }, + + post({ node }) { + currentStarHeight--; + } + } + }); + + return maxObservedStarHeight <= 1 && repetitionCount <= replimit; +}; + +analyzer$2 = { + "AnalyzerOptions": AnalyzerOptions, + "Analyzer": Analyzer, +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * A regexp-tree plugin to translate `/./s` to `/[\0-\uFFFF]/`. + */ + +var compatDotallSTransform = { + + // Whether `u` flag present. In which case we transform to + // \u{10FFFF} instead of \uFFFF. + _hasUFlag: false, + + // Only run this plugin if we have `s` flag. + shouldRun: function shouldRun(ast) { + var shouldRun = ast.flags.includes('s'); + + if (!shouldRun) { + return false; + } + + // Strip the `s` flag. + ast.flags = ast.flags.replace('s', ''); + + // Whether we have also `u`. + this._hasUFlag = ast.flags.includes('u'); + + return true; + }, + Char: function Char(path) { + var node = path.node; + + + if (node.kind !== 'meta' || node.value !== '.') { + return; + } + + var toValue = '\\uFFFF'; + var toSymbol = '\uFFFF'; + + if (this._hasUFlag) { + toValue = '\\u{10FFFF}'; + toSymbol = '\uDBFF\uDFFF'; + } + + path.replace({ + type: 'CharacterClass', + expressions: [{ + type: 'ClassRange', + from: { + type: 'Char', + value: '\\0', + kind: 'decimal', + symbol: '\0' + }, + to: { + type: 'Char', + value: toValue, + kind: 'unicode', + symbol: toSymbol + } + }] + }); + } +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * A regexp-tree plugin to translate `/(?a)\k/` to `/(a)\1/`. + */ + +var compatNamedCapturingGroupsTransform = { + // To track the names of the groups, and return them + // in the transform result state. + // + // A map from name to number: {foo: 2, bar: 4} + _groupNames: {}, + + /** + * Initialises the trasnform. + */ + init: function init() { + this._groupNames = {}; + }, + + + /** + * Returns extra state, which eventually is returned to + */ + getExtra: function getExtra() { + return this._groupNames; + }, + Group: function Group(path) { + var node = path.node; + + + if (!node.name) { + return; + } + + // Record group name. + this._groupNames[node.name] = node.number; + + delete node.name; + delete node.nameRaw; + }, + Backreference: function Backreference(path) { + var node = path.node; + + + if (node.kind !== 'name') { + return; + } + + node.kind = 'number'; + node.reference = node.number; + delete node.referenceRaw; + } +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * A regexp-tree plugin to remove `x` flag `/foo/x` to `/foo/`. + * + * Note: other features of `x` flags (whitespace, comments) are + * already removed at parsing stage. + */ + +var compatXFlagTransform = { + RegExp: function RegExp(_ref) { + var node = _ref.node; + + if (node.flags.includes('x')) { + node.flags = node.flags.replace('x', ''); + } + } +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var transforms$1 = { + // "dotAll" `s` flag + dotAll: compatDotallSTransform, + + // Named capturing groups. + namedCapturingGroups: compatNamedCapturingGroupsTransform, + + // `x` flag + xFlag: compatXFlagTransform +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * Helper `gen` function calls node type handler. + */ + +function gen$1(node) { + return node ? generator$3[node.type](node) : ''; +} + +/** + * AST handler. + */ +var generator$3 = { + RegExp: function RegExp(node) { + return '/' + gen$1(node.body) + '/' + node.flags; + }, + Alternative: function Alternative(node) { + return (node.expressions || []).map(gen$1).join(''); + }, + Disjunction: function Disjunction(node) { + return gen$1(node.left) + '|' + gen$1(node.right); + }, + Group: function Group(node) { + var expression = gen$1(node.expression); + + if (node.capturing) { + // A named group. + if (node.name) { + return '(?<' + (node.nameRaw || node.name) + '>' + expression + ')'; + } + + return '(' + expression + ')'; + } + + return '(?:' + expression + ')'; + }, + Backreference: function Backreference(node) { + switch (node.kind) { + case 'number': + return '\\' + node.reference; + case 'name': + return '\\k<' + (node.referenceRaw || node.reference) + '>'; + default: + throw new TypeError('Unknown Backreference kind: ' + node.kind); + } + }, + Assertion: function Assertion(node) { + switch (node.kind) { + case '^': + case '$': + case '\\b': + case '\\B': + return node.kind; + + case 'Lookahead': + { + var assertion = gen$1(node.assertion); + + if (node.negative) { + return '(?!' + assertion + ')'; + } + + return '(?=' + assertion + ')'; + } + + case 'Lookbehind': + { + var _assertion = gen$1(node.assertion); + + if (node.negative) { + return '(? + */ + +var NON_BINARY_PROP_NAMES_TO_ALIASES = { + General_Category: 'gc', + Script: 'sc', + Script_Extensions: 'scx' +}; + +var NON_BINARY_ALIASES_TO_PROP_NAMES = inverseMap(NON_BINARY_PROP_NAMES_TO_ALIASES); + +var BINARY_PROP_NAMES_TO_ALIASES = { + ASCII: 'ASCII', + ASCII_Hex_Digit: 'AHex', + Alphabetic: 'Alpha', + Any: 'Any', + Assigned: 'Assigned', + Bidi_Control: 'Bidi_C', + Bidi_Mirrored: 'Bidi_M', + Case_Ignorable: 'CI', + Cased: 'Cased', + Changes_When_Casefolded: 'CWCF', + Changes_When_Casemapped: 'CWCM', + Changes_When_Lowercased: 'CWL', + Changes_When_NFKC_Casefolded: 'CWKCF', + Changes_When_Titlecased: 'CWT', + Changes_When_Uppercased: 'CWU', + Dash: 'Dash', + Default_Ignorable_Code_Point: 'DI', + Deprecated: 'Dep', + Diacritic: 'Dia', + Emoji: 'Emoji', + Emoji_Component: 'Emoji_Component', + Emoji_Modifier: 'Emoji_Modifier', + Emoji_Modifier_Base: 'Emoji_Modifier_Base', + Emoji_Presentation: 'Emoji_Presentation', + Extended_Pictographic: 'Extended_Pictographic', + Extender: 'Ext', + Grapheme_Base: 'Gr_Base', + Grapheme_Extend: 'Gr_Ext', + Hex_Digit: 'Hex', + IDS_Binary_Operator: 'IDSB', + IDS_Trinary_Operator: 'IDST', + ID_Continue: 'IDC', + ID_Start: 'IDS', + Ideographic: 'Ideo', + Join_Control: 'Join_C', + Logical_Order_Exception: 'LOE', + Lowercase: 'Lower', + Math: 'Math', + Noncharacter_Code_Point: 'NChar', + Pattern_Syntax: 'Pat_Syn', + Pattern_White_Space: 'Pat_WS', + Quotation_Mark: 'QMark', + Radical: 'Radical', + Regional_Indicator: 'RI', + Sentence_Terminal: 'STerm', + Soft_Dotted: 'SD', + Terminal_Punctuation: 'Term', + Unified_Ideograph: 'UIdeo', + Uppercase: 'Upper', + Variation_Selector: 'VS', + White_Space: 'space', + XID_Continue: 'XIDC', + XID_Start: 'XIDS' +}; + +var BINARY_ALIASES_TO_PROP_NAMES = inverseMap(BINARY_PROP_NAMES_TO_ALIASES); + +var GENERAL_CATEGORY_VALUE_TO_ALIASES = { + Cased_Letter: 'LC', + Close_Punctuation: 'Pe', + Connector_Punctuation: 'Pc', + Control: ['Cc', 'cntrl'], + Currency_Symbol: 'Sc', + Dash_Punctuation: 'Pd', + Decimal_Number: ['Nd', 'digit'], + Enclosing_Mark: 'Me', + Final_Punctuation: 'Pf', + Format: 'Cf', + Initial_Punctuation: 'Pi', + Letter: 'L', + Letter_Number: 'Nl', + Line_Separator: 'Zl', + Lowercase_Letter: 'Ll', + Mark: ['M', 'Combining_Mark'], + Math_Symbol: 'Sm', + Modifier_Letter: 'Lm', + Modifier_Symbol: 'Sk', + Nonspacing_Mark: 'Mn', + Number: 'N', + Open_Punctuation: 'Ps', + Other: 'C', + Other_Letter: 'Lo', + Other_Number: 'No', + Other_Punctuation: 'Po', + Other_Symbol: 'So', + Paragraph_Separator: 'Zp', + Private_Use: 'Co', + Punctuation: ['P', 'punct'], + Separator: 'Z', + Space_Separator: 'Zs', + Spacing_Mark: 'Mc', + Surrogate: 'Cs', + Symbol: 'S', + Titlecase_Letter: 'Lt', + Unassigned: 'Cn', + Uppercase_Letter: 'Lu' +}; + +var GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES = inverseMap(GENERAL_CATEGORY_VALUE_TO_ALIASES); + +var SCRIPT_VALUE_TO_ALIASES = { + Adlam: 'Adlm', + Ahom: 'Ahom', + Anatolian_Hieroglyphs: 'Hluw', + Arabic: 'Arab', + Armenian: 'Armn', + Avestan: 'Avst', + Balinese: 'Bali', + Bamum: 'Bamu', + Bassa_Vah: 'Bass', + Batak: 'Batk', + Bengali: 'Beng', + Bhaiksuki: 'Bhks', + Bopomofo: 'Bopo', + Brahmi: 'Brah', + Braille: 'Brai', + Buginese: 'Bugi', + Buhid: 'Buhd', + Canadian_Aboriginal: 'Cans', + Carian: 'Cari', + Caucasian_Albanian: 'Aghb', + Chakma: 'Cakm', + Cham: 'Cham', + Cherokee: 'Cher', + Common: 'Zyyy', + Coptic: ['Copt', 'Qaac'], + Cuneiform: 'Xsux', + Cypriot: 'Cprt', + Cyrillic: 'Cyrl', + Deseret: 'Dsrt', + Devanagari: 'Deva', + Dogra: 'Dogr', + Duployan: 'Dupl', + Egyptian_Hieroglyphs: 'Egyp', + Elbasan: 'Elba', + Ethiopic: 'Ethi', + Georgian: 'Geor', + Glagolitic: 'Glag', + Gothic: 'Goth', + Grantha: 'Gran', + Greek: 'Grek', + Gujarati: 'Gujr', + Gunjala_Gondi: 'Gong', + Gurmukhi: 'Guru', + Han: 'Hani', + Hangul: 'Hang', + Hanifi_Rohingya: 'Rohg', + Hanunoo: 'Hano', + Hatran: 'Hatr', + Hebrew: 'Hebr', + Hiragana: 'Hira', + Imperial_Aramaic: 'Armi', + Inherited: ['Zinh', 'Qaai'], + Inscriptional_Pahlavi: 'Phli', + Inscriptional_Parthian: 'Prti', + Javanese: 'Java', + Kaithi: 'Kthi', + Kannada: 'Knda', + Katakana: 'Kana', + Kayah_Li: 'Kali', + Kharoshthi: 'Khar', + Khmer: 'Khmr', + Khojki: 'Khoj', + Khudawadi: 'Sind', + Lao: 'Laoo', + Latin: 'Latn', + Lepcha: 'Lepc', + Limbu: 'Limb', + Linear_A: 'Lina', + Linear_B: 'Linb', + Lisu: 'Lisu', + Lycian: 'Lyci', + Lydian: 'Lydi', + Mahajani: 'Mahj', + Makasar: 'Maka', + Malayalam: 'Mlym', + Mandaic: 'Mand', + Manichaean: 'Mani', + Marchen: 'Marc', + Medefaidrin: 'Medf', + Masaram_Gondi: 'Gonm', + Meetei_Mayek: 'Mtei', + Mende_Kikakui: 'Mend', + Meroitic_Cursive: 'Merc', + Meroitic_Hieroglyphs: 'Mero', + Miao: 'Plrd', + Modi: 'Modi', + Mongolian: 'Mong', + Mro: 'Mroo', + Multani: 'Mult', + Myanmar: 'Mymr', + Nabataean: 'Nbat', + New_Tai_Lue: 'Talu', + Newa: 'Newa', + Nko: 'Nkoo', + Nushu: 'Nshu', + Ogham: 'Ogam', + Ol_Chiki: 'Olck', + Old_Hungarian: 'Hung', + Old_Italic: 'Ital', + Old_North_Arabian: 'Narb', + Old_Permic: 'Perm', + Old_Persian: 'Xpeo', + Old_Sogdian: 'Sogo', + Old_South_Arabian: 'Sarb', + Old_Turkic: 'Orkh', + Oriya: 'Orya', + Osage: 'Osge', + Osmanya: 'Osma', + Pahawh_Hmong: 'Hmng', + Palmyrene: 'Palm', + Pau_Cin_Hau: 'Pauc', + Phags_Pa: 'Phag', + Phoenician: 'Phnx', + Psalter_Pahlavi: 'Phlp', + Rejang: 'Rjng', + Runic: 'Runr', + Samaritan: 'Samr', + Saurashtra: 'Saur', + Sharada: 'Shrd', + Shavian: 'Shaw', + Siddham: 'Sidd', + SignWriting: 'Sgnw', + Sinhala: 'Sinh', + Sogdian: 'Sogd', + Sora_Sompeng: 'Sora', + Soyombo: 'Soyo', + Sundanese: 'Sund', + Syloti_Nagri: 'Sylo', + Syriac: 'Syrc', + Tagalog: 'Tglg', + Tagbanwa: 'Tagb', + Tai_Le: 'Tale', + Tai_Tham: 'Lana', + Tai_Viet: 'Tavt', + Takri: 'Takr', + Tamil: 'Taml', + Tangut: 'Tang', + Telugu: 'Telu', + Thaana: 'Thaa', + Thai: 'Thai', + Tibetan: 'Tibt', + Tifinagh: 'Tfng', + Tirhuta: 'Tirh', + Ugaritic: 'Ugar', + Vai: 'Vaii', + Warang_Citi: 'Wara', + Yi: 'Yiii', + Zanabazar_Square: 'Zanb' +}; + +var SCRIPT_VALUE_ALIASES_TO_VALUE = inverseMap(SCRIPT_VALUE_TO_ALIASES); + +function inverseMap(data) { + var inverse = {}; + + for (var name in data) { + if (!data.hasOwnProperty(name)) { + continue; + } + var value = data[name]; + if (Array.isArray(value)) { + for (var i = 0; i < value.length; i++) { + inverse[value[i]] = name; + } + } else { + inverse[value] = name; + } + } + + return inverse; +} + +function isValidName(name) { + return NON_BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name) || BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name); +} + +function isValidValue(name, value) { + if (isGeneralCategoryName(name)) { + return isGeneralCategoryValue(value); + } + + if (isScriptCategoryName(name)) { + return isScriptCategoryValue(value); + } + + return false; +} + +function isAlias(name) { + return NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name); +} + +function isGeneralCategoryName(name) { + return name === 'General_Category' || name == 'gc'; +} + +function isScriptCategoryName(name) { + return name === 'Script' || name === 'Script_Extensions' || name === 'sc' || name === 'scx'; +} + +function isGeneralCategoryValue(value) { + return GENERAL_CATEGORY_VALUE_TO_ALIASES.hasOwnProperty(value) || GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES.hasOwnProperty(value); +} + +function isScriptCategoryValue(value) { + return SCRIPT_VALUE_TO_ALIASES.hasOwnProperty(value) || SCRIPT_VALUE_ALIASES_TO_VALUE.hasOwnProperty(value); +} + +function isBinaryPropertyName(name) { + return BINARY_PROP_NAMES_TO_ALIASES.hasOwnProperty(name) || BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name); +} + +function getCanonicalName(name) { + if (NON_BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name)) { + return NON_BINARY_ALIASES_TO_PROP_NAMES[name]; + } + + if (BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(name)) { + return BINARY_ALIASES_TO_PROP_NAMES[name]; + } + + return null; +} + +function getCanonicalValue(value) { + if (GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES.hasOwnProperty(value)) { + return GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES[value]; + } + + if (SCRIPT_VALUE_ALIASES_TO_VALUE.hasOwnProperty(value)) { + return SCRIPT_VALUE_ALIASES_TO_VALUE[value]; + } + + if (BINARY_ALIASES_TO_PROP_NAMES.hasOwnProperty(value)) { + return BINARY_ALIASES_TO_PROP_NAMES[value]; + } + + return null; +} + +var parserUnicodeProperties = { + isAlias: isAlias, + isValidName: isValidName, + isValidValue: isValidValue, + isGeneralCategoryValue: isGeneralCategoryValue, + isScriptCategoryValue: isScriptCategoryValue, + isBinaryPropertyName: isBinaryPropertyName, + getCanonicalName: getCanonicalName, + getCanonicalValue: getCanonicalValue, + + NON_BINARY_PROP_NAMES_TO_ALIASES: NON_BINARY_PROP_NAMES_TO_ALIASES, + NON_BINARY_ALIASES_TO_PROP_NAMES: NON_BINARY_ALIASES_TO_PROP_NAMES, + + BINARY_PROP_NAMES_TO_ALIASES: BINARY_PROP_NAMES_TO_ALIASES, + BINARY_ALIASES_TO_PROP_NAMES: BINARY_ALIASES_TO_PROP_NAMES, + + GENERAL_CATEGORY_VALUE_TO_ALIASES: GENERAL_CATEGORY_VALUE_TO_ALIASES, + GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES: GENERAL_CATEGORY_VALUE_ALIASES_TO_VALUES, + + SCRIPT_VALUE_TO_ALIASES: SCRIPT_VALUE_TO_ALIASES, + SCRIPT_VALUE_ALIASES_TO_VALUE: SCRIPT_VALUE_ALIASES_TO_VALUE +}; + +/** + * LR parser generated by the Syntax tool. + * + * https://www.npmjs.com/package/syntax-cli + * + * npm install -g syntax-cli + * + * syntax-cli --help + * + * To regenerate run: + * + * syntax-cli \ + * --grammar ~/path-to-grammar-file \ + * --mode \ + * --output ~/path-to-output-parser-file.js + */ + +/** + * Matched token text. + */ + +var _slicedToArray$2 = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +function _toConsumableArray$8(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var yytext = void 0; + +/** + * Storage object. + */ +var yy = {}; + +/** + * Result of semantic action. + */ +var __ = void 0; + +/** + * Result location object. + */ +var __loc = void 0; + +function yyloc(start, end) { + if (!yy.options.captureLocations) { + return null; + } + + // Epsilon doesn't produce location. + if (!start || !end) { + return start || end; + } + + return { + startOffset: start.startOffset, + endOffset: end.endOffset, + startLine: start.startLine, + endLine: end.endLine, + startColumn: start.startColumn, + endColumn: end.endColumn + }; +} + +var EOF = '$'; + +/** + * List of productions (generated by Syntax tool). + */ +var productions = [[-1, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = _1; +}], [0, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) { + __loc = yyloc(_1loc, _4loc); + __ = Node({ + type: 'RegExp', + body: _2, + flags: checkFlags(_4) + }, loc(_1loc, _4loc || _3loc)); +}], [1, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = _1; +}], [1, 0, function () { + __loc = null;__ = ''; +}], [2, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = _1; +}], [2, 2, function (_1, _2, _1loc, _2loc) { + __loc = yyloc(_1loc, _2loc);__ = _1 + _2; +}], [3, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = _1; +}], [4, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = _1; +}], [4, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { + __loc = yyloc(_1loc, _3loc); + // Location for empty disjunction: /|/ + var _loc = null; + + if (_2loc) { + _loc = loc(_1loc || _2loc, _3loc || _2loc); + } + __ = Node({ + type: 'Disjunction', + left: _1, + right: _3 + }, _loc); +}], [5, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc); + if (_1.length === 0) { + __ = null; + return; + } + + if (_1.length === 1) { + __ = Node(_1[0], __loc); + } else { + __ = Node({ + type: 'Alternative', + expressions: _1 + }, __loc); + } +}], [6, 0, function () { + __loc = null;__ = []; +}], [6, 2, function (_1, _2, _1loc, _2loc) { + __loc = yyloc(_1loc, _2loc);__ = _1.concat(_2); +}], [7, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = Node(Object.assign({ type: 'Assertion' }, _1), __loc); +}], [7, 2, function (_1, _2, _1loc, _2loc) { + __loc = yyloc(_1loc, _2loc); + __ = _1; + + if (_2) { + __ = Node({ + type: 'Repetition', + expression: _1, + quantifier: _2 + }, __loc); + } +}], [8, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = { kind: '^' }; +}], [8, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = { kind: '$' }; +}], [8, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = { kind: '\\b' }; +}], [8, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = { kind: '\\B' }; +}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { + __loc = yyloc(_1loc, _3loc); + __ = { + kind: 'Lookahead', + assertion: _2 + }; +}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { + __loc = yyloc(_1loc, _3loc); + __ = { + kind: 'Lookahead', + negative: true, + assertion: _2 + }; +}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { + __loc = yyloc(_1loc, _3loc); + __ = { + kind: 'Lookbehind', + assertion: _2 + }; +}], [8, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { + __loc = yyloc(_1loc, _3loc); + __ = { + kind: 'Lookbehind', + negative: true, + assertion: _2 + }; +}], [9, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = _1; +}], [9, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = _1; +}], [9, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = _1; +}], [10, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'simple', __loc); +}], [10, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = Char(_1.slice(1), 'simple', __loc);__.escaped = true; +}], [10, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'unicode', __loc);__.isSurrogatePair = true; +}], [10, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'unicode', __loc); +}], [10, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = UnicodeProperty(_1, __loc); +}], [10, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'control', __loc); +}], [10, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'hex', __loc); +}], [10, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'oct', __loc); +}], [10, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = GroupRefOrDecChar(_1, __loc); +}], [10, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc); +}], [10, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc); +}], [10, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = NamedGroupRefOrChars(_1, _1loc); +}], [11, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = _1; +}], [11, 0], [12, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = _1; +}], [12, 2, function (_1, _2, _1loc, _2loc) { + __loc = yyloc(_1loc, _2loc); + _1.greedy = false; + __ = _1; +}], [13, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc); + __ = Node({ + type: 'Quantifier', + kind: _1, + greedy: true + }, __loc); +}], [13, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc); + __ = Node({ + type: 'Quantifier', + kind: _1, + greedy: true + }, __loc); +}], [13, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc); + __ = Node({ + type: 'Quantifier', + kind: _1, + greedy: true + }, __loc); +}], [13, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc); + var range = getRange(_1); + __ = Node({ + type: 'Quantifier', + kind: 'Range', + from: range[0], + to: range[0], + greedy: true + }, __loc); +}], [13, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc); + __ = Node({ + type: 'Quantifier', + kind: 'Range', + from: getRange(_1)[0], + greedy: true + }, __loc); +}], [13, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc); + var range = getRange(_1); + __ = Node({ + type: 'Quantifier', + kind: 'Range', + from: range[0], + to: range[1], + greedy: true + }, __loc); +}], [14, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = _1; +}], [14, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = _1; +}], [15, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { + __loc = yyloc(_1loc, _3loc); + var nameRaw = String(_1); + var name = decodeUnicodeGroupName(nameRaw); + if (!yy.options.allowGroupNameDuplicates && namedGroups.hasOwnProperty(name)) { + throw new SyntaxError('Duplicate of the named group "' + name + '".'); + } + + namedGroups[name] = _1.groupNumber; + + __ = Node({ + type: 'Group', + capturing: true, + name: name, + nameRaw: nameRaw, + number: _1.groupNumber, + expression: _2 + }, __loc); +}], [15, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { + __loc = yyloc(_1loc, _3loc); + __ = Node({ + type: 'Group', + capturing: true, + number: _1.groupNumber, + expression: _2 + }, __loc); +}], [16, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { + __loc = yyloc(_1loc, _3loc); + __ = Node({ + type: 'Group', + capturing: false, + expression: _2 + }, __loc); +}], [17, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { + __loc = yyloc(_1loc, _3loc); + __ = Node({ + type: 'CharacterClass', + negative: true, + expressions: _2 + }, __loc); +}], [17, 3, function (_1, _2, _3, _1loc, _2loc, _3loc) { + __loc = yyloc(_1loc, _3loc); + __ = Node({ + type: 'CharacterClass', + expressions: _2 + }, __loc); +}], [18, 0, function () { + __loc = null;__ = []; +}], [18, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = _1; +}], [19, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = [_1]; +}], [19, 2, function (_1, _2, _1loc, _2loc) { + __loc = yyloc(_1loc, _2loc);__ = [_1].concat(_2); +}], [19, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) { + __loc = yyloc(_1loc, _4loc); + checkClassRange(_1, _3); + + __ = [Node({ + type: 'ClassRange', + from: _1, + to: _3 + }, loc(_1loc, _3loc))]; + + if (_4) { + __ = __.concat(_4); + } +}], [20, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = _1; +}], [20, 2, function (_1, _2, _1loc, _2loc) { + __loc = yyloc(_1loc, _2loc);__ = [_1].concat(_2); +}], [20, 4, function (_1, _2, _3, _4, _1loc, _2loc, _3loc, _4loc) { + __loc = yyloc(_1loc, _4loc); + checkClassRange(_1, _3); + + __ = [Node({ + type: 'ClassRange', + from: _1, + to: _3 + }, loc(_1loc, _3loc))]; + + if (_4) { + __ = __.concat(_4); + } +}], [21, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'simple', __loc); +}], [21, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = _1; +}], [22, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = _1; +}], [22, 1, function (_1, _1loc) { + __loc = yyloc(_1loc, _1loc);__ = Char(_1, 'meta', __loc); +}]]; + +/** + * Encoded tokens map. + */ +var tokens = { "SLASH": "23", "CHAR": "24", "BAR": "25", "BOS": "26", "EOS": "27", "ESC_b": "28", "ESC_B": "29", "POS_LA_ASSERT": "30", "R_PAREN": "31", "NEG_LA_ASSERT": "32", "POS_LB_ASSERT": "33", "NEG_LB_ASSERT": "34", "ESC_CHAR": "35", "U_CODE_SURROGATE": "36", "U_CODE": "37", "U_PROP_VALUE_EXP": "38", "CTRL_CH": "39", "HEX_CODE": "40", "OCT_CODE": "41", "DEC_CODE": "42", "META_CHAR": "43", "ANY": "44", "NAMED_GROUP_REF": "45", "Q_MARK": "46", "STAR": "47", "PLUS": "48", "RANGE_EXACT": "49", "RANGE_OPEN": "50", "RANGE_CLOSED": "51", "NAMED_CAPTURE_GROUP": "52", "L_PAREN": "53", "NON_CAPTURE_GROUP": "54", "NEG_CLASS": "55", "R_BRACKET": "56", "L_BRACKET": "57", "DASH": "58", "$": "59" }; + +/** + * Parsing table (generated by Syntax tool). + */ +var table = [{ "0": 1, "23": "s2" }, { "59": "acc" }, { "3": 3, "4": 4, "5": 5, "6": 6, "23": "r10", "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "23": "s7" }, { "23": "r6", "25": "s12" }, { "23": "r7", "25": "r7", "31": "r7" }, { "7": 14, "8": 15, "9": 16, "10": 25, "14": 27, "15": 42, "16": 43, "17": 26, "23": "r9", "24": "s28", "25": "r9", "26": "s17", "27": "s18", "28": "s19", "29": "s20", "30": "s21", "31": "r9", "32": "s22", "33": "s23", "34": "s24", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "52": "s44", "53": "s45", "54": "s46", "55": "s40", "57": "s41" }, { "1": 8, "2": 9, "24": "s10", "59": "r3" }, { "59": "r1" }, { "24": "s11", "59": "r2" }, { "24": "r4", "59": "r4" }, { "24": "r5", "59": "r5" }, { "5": 13, "6": 6, "23": "r10", "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "23": "r8", "25": "r8", "31": "r8" }, { "23": "r11", "24": "r11", "25": "r11", "26": "r11", "27": "r11", "28": "r11", "29": "r11", "30": "r11", "31": "r11", "32": "r11", "33": "r11", "34": "r11", "35": "r11", "36": "r11", "37": "r11", "38": "r11", "39": "r11", "40": "r11", "41": "r11", "42": "r11", "43": "r11", "44": "r11", "45": "r11", "52": "r11", "53": "r11", "54": "r11", "55": "r11", "57": "r11" }, { "23": "r12", "24": "r12", "25": "r12", "26": "r12", "27": "r12", "28": "r12", "29": "r12", "30": "r12", "31": "r12", "32": "r12", "33": "r12", "34": "r12", "35": "r12", "36": "r12", "37": "r12", "38": "r12", "39": "r12", "40": "r12", "41": "r12", "42": "r12", "43": "r12", "44": "r12", "45": "r12", "52": "r12", "53": "r12", "54": "r12", "55": "r12", "57": "r12" }, { "11": 47, "12": 48, "13": 49, "23": "r38", "24": "r38", "25": "r38", "26": "r38", "27": "r38", "28": "r38", "29": "r38", "30": "r38", "31": "r38", "32": "r38", "33": "r38", "34": "r38", "35": "r38", "36": "r38", "37": "r38", "38": "r38", "39": "r38", "40": "r38", "41": "r38", "42": "r38", "43": "r38", "44": "r38", "45": "r38", "46": "s52", "47": "s50", "48": "s51", "49": "s53", "50": "s54", "51": "s55", "52": "r38", "53": "r38", "54": "r38", "55": "r38", "57": "r38" }, { "23": "r14", "24": "r14", "25": "r14", "26": "r14", "27": "r14", "28": "r14", "29": "r14", "30": "r14", "31": "r14", "32": "r14", "33": "r14", "34": "r14", "35": "r14", "36": "r14", "37": "r14", "38": "r14", "39": "r14", "40": "r14", "41": "r14", "42": "r14", "43": "r14", "44": "r14", "45": "r14", "52": "r14", "53": "r14", "54": "r14", "55": "r14", "57": "r14" }, { "23": "r15", "24": "r15", "25": "r15", "26": "r15", "27": "r15", "28": "r15", "29": "r15", "30": "r15", "31": "r15", "32": "r15", "33": "r15", "34": "r15", "35": "r15", "36": "r15", "37": "r15", "38": "r15", "39": "r15", "40": "r15", "41": "r15", "42": "r15", "43": "r15", "44": "r15", "45": "r15", "52": "r15", "53": "r15", "54": "r15", "55": "r15", "57": "r15" }, { "23": "r16", "24": "r16", "25": "r16", "26": "r16", "27": "r16", "28": "r16", "29": "r16", "30": "r16", "31": "r16", "32": "r16", "33": "r16", "34": "r16", "35": "r16", "36": "r16", "37": "r16", "38": "r16", "39": "r16", "40": "r16", "41": "r16", "42": "r16", "43": "r16", "44": "r16", "45": "r16", "52": "r16", "53": "r16", "54": "r16", "55": "r16", "57": "r16" }, { "23": "r17", "24": "r17", "25": "r17", "26": "r17", "27": "r17", "28": "r17", "29": "r17", "30": "r17", "31": "r17", "32": "r17", "33": "r17", "34": "r17", "35": "r17", "36": "r17", "37": "r17", "38": "r17", "39": "r17", "40": "r17", "41": "r17", "42": "r17", "43": "r17", "44": "r17", "45": "r17", "52": "r17", "53": "r17", "54": "r17", "55": "r17", "57": "r17" }, { "4": 57, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 59, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 61, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 63, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "23": "r22", "24": "r22", "25": "r22", "26": "r22", "27": "r22", "28": "r22", "29": "r22", "30": "r22", "31": "r22", "32": "r22", "33": "r22", "34": "r22", "35": "r22", "36": "r22", "37": "r22", "38": "r22", "39": "r22", "40": "r22", "41": "r22", "42": "r22", "43": "r22", "44": "r22", "45": "r22", "46": "r22", "47": "r22", "48": "r22", "49": "r22", "50": "r22", "51": "r22", "52": "r22", "53": "r22", "54": "r22", "55": "r22", "57": "r22" }, { "23": "r23", "24": "r23", "25": "r23", "26": "r23", "27": "r23", "28": "r23", "29": "r23", "30": "r23", "31": "r23", "32": "r23", "33": "r23", "34": "r23", "35": "r23", "36": "r23", "37": "r23", "38": "r23", "39": "r23", "40": "r23", "41": "r23", "42": "r23", "43": "r23", "44": "r23", "45": "r23", "46": "r23", "47": "r23", "48": "r23", "49": "r23", "50": "r23", "51": "r23", "52": "r23", "53": "r23", "54": "r23", "55": "r23", "57": "r23" }, { "23": "r24", "24": "r24", "25": "r24", "26": "r24", "27": "r24", "28": "r24", "29": "r24", "30": "r24", "31": "r24", "32": "r24", "33": "r24", "34": "r24", "35": "r24", "36": "r24", "37": "r24", "38": "r24", "39": "r24", "40": "r24", "41": "r24", "42": "r24", "43": "r24", "44": "r24", "45": "r24", "46": "r24", "47": "r24", "48": "r24", "49": "r24", "50": "r24", "51": "r24", "52": "r24", "53": "r24", "54": "r24", "55": "r24", "57": "r24" }, { "23": "r25", "24": "r25", "25": "r25", "26": "r25", "27": "r25", "28": "r25", "29": "r25", "30": "r25", "31": "r25", "32": "r25", "33": "r25", "34": "r25", "35": "r25", "36": "r25", "37": "r25", "38": "r25", "39": "r25", "40": "r25", "41": "r25", "42": "r25", "43": "r25", "44": "r25", "45": "r25", "46": "r25", "47": "r25", "48": "r25", "49": "r25", "50": "r25", "51": "r25", "52": "r25", "53": "r25", "54": "r25", "55": "r25", "56": "r25", "57": "r25", "58": "r25" }, { "23": "r26", "24": "r26", "25": "r26", "26": "r26", "27": "r26", "28": "r26", "29": "r26", "30": "r26", "31": "r26", "32": "r26", "33": "r26", "34": "r26", "35": "r26", "36": "r26", "37": "r26", "38": "r26", "39": "r26", "40": "r26", "41": "r26", "42": "r26", "43": "r26", "44": "r26", "45": "r26", "46": "r26", "47": "r26", "48": "r26", "49": "r26", "50": "r26", "51": "r26", "52": "r26", "53": "r26", "54": "r26", "55": "r26", "56": "r26", "57": "r26", "58": "r26" }, { "23": "r27", "24": "r27", "25": "r27", "26": "r27", "27": "r27", "28": "r27", "29": "r27", "30": "r27", "31": "r27", "32": "r27", "33": "r27", "34": "r27", "35": "r27", "36": "r27", "37": "r27", "38": "r27", "39": "r27", "40": "r27", "41": "r27", "42": "r27", "43": "r27", "44": "r27", "45": "r27", "46": "r27", "47": "r27", "48": "r27", "49": "r27", "50": "r27", "51": "r27", "52": "r27", "53": "r27", "54": "r27", "55": "r27", "56": "r27", "57": "r27", "58": "r27" }, { "23": "r28", "24": "r28", "25": "r28", "26": "r28", "27": "r28", "28": "r28", "29": "r28", "30": "r28", "31": "r28", "32": "r28", "33": "r28", "34": "r28", "35": "r28", "36": "r28", "37": "r28", "38": "r28", "39": "r28", "40": "r28", "41": "r28", "42": "r28", "43": "r28", "44": "r28", "45": "r28", "46": "r28", "47": "r28", "48": "r28", "49": "r28", "50": "r28", "51": "r28", "52": "r28", "53": "r28", "54": "r28", "55": "r28", "56": "r28", "57": "r28", "58": "r28" }, { "23": "r29", "24": "r29", "25": "r29", "26": "r29", "27": "r29", "28": "r29", "29": "r29", "30": "r29", "31": "r29", "32": "r29", "33": "r29", "34": "r29", "35": "r29", "36": "r29", "37": "r29", "38": "r29", "39": "r29", "40": "r29", "41": "r29", "42": "r29", "43": "r29", "44": "r29", "45": "r29", "46": "r29", "47": "r29", "48": "r29", "49": "r29", "50": "r29", "51": "r29", "52": "r29", "53": "r29", "54": "r29", "55": "r29", "56": "r29", "57": "r29", "58": "r29" }, { "23": "r30", "24": "r30", "25": "r30", "26": "r30", "27": "r30", "28": "r30", "29": "r30", "30": "r30", "31": "r30", "32": "r30", "33": "r30", "34": "r30", "35": "r30", "36": "r30", "37": "r30", "38": "r30", "39": "r30", "40": "r30", "41": "r30", "42": "r30", "43": "r30", "44": "r30", "45": "r30", "46": "r30", "47": "r30", "48": "r30", "49": "r30", "50": "r30", "51": "r30", "52": "r30", "53": "r30", "54": "r30", "55": "r30", "56": "r30", "57": "r30", "58": "r30" }, { "23": "r31", "24": "r31", "25": "r31", "26": "r31", "27": "r31", "28": "r31", "29": "r31", "30": "r31", "31": "r31", "32": "r31", "33": "r31", "34": "r31", "35": "r31", "36": "r31", "37": "r31", "38": "r31", "39": "r31", "40": "r31", "41": "r31", "42": "r31", "43": "r31", "44": "r31", "45": "r31", "46": "r31", "47": "r31", "48": "r31", "49": "r31", "50": "r31", "51": "r31", "52": "r31", "53": "r31", "54": "r31", "55": "r31", "56": "r31", "57": "r31", "58": "r31" }, { "23": "r32", "24": "r32", "25": "r32", "26": "r32", "27": "r32", "28": "r32", "29": "r32", "30": "r32", "31": "r32", "32": "r32", "33": "r32", "34": "r32", "35": "r32", "36": "r32", "37": "r32", "38": "r32", "39": "r32", "40": "r32", "41": "r32", "42": "r32", "43": "r32", "44": "r32", "45": "r32", "46": "r32", "47": "r32", "48": "r32", "49": "r32", "50": "r32", "51": "r32", "52": "r32", "53": "r32", "54": "r32", "55": "r32", "56": "r32", "57": "r32", "58": "r32" }, { "23": "r33", "24": "r33", "25": "r33", "26": "r33", "27": "r33", "28": "r33", "29": "r33", "30": "r33", "31": "r33", "32": "r33", "33": "r33", "34": "r33", "35": "r33", "36": "r33", "37": "r33", "38": "r33", "39": "r33", "40": "r33", "41": "r33", "42": "r33", "43": "r33", "44": "r33", "45": "r33", "46": "r33", "47": "r33", "48": "r33", "49": "r33", "50": "r33", "51": "r33", "52": "r33", "53": "r33", "54": "r33", "55": "r33", "56": "r33", "57": "r33", "58": "r33" }, { "23": "r34", "24": "r34", "25": "r34", "26": "r34", "27": "r34", "28": "r34", "29": "r34", "30": "r34", "31": "r34", "32": "r34", "33": "r34", "34": "r34", "35": "r34", "36": "r34", "37": "r34", "38": "r34", "39": "r34", "40": "r34", "41": "r34", "42": "r34", "43": "r34", "44": "r34", "45": "r34", "46": "r34", "47": "r34", "48": "r34", "49": "r34", "50": "r34", "51": "r34", "52": "r34", "53": "r34", "54": "r34", "55": "r34", "56": "r34", "57": "r34", "58": "r34" }, { "23": "r35", "24": "r35", "25": "r35", "26": "r35", "27": "r35", "28": "r35", "29": "r35", "30": "r35", "31": "r35", "32": "r35", "33": "r35", "34": "r35", "35": "r35", "36": "r35", "37": "r35", "38": "r35", "39": "r35", "40": "r35", "41": "r35", "42": "r35", "43": "r35", "44": "r35", "45": "r35", "46": "r35", "47": "r35", "48": "r35", "49": "r35", "50": "r35", "51": "r35", "52": "r35", "53": "r35", "54": "r35", "55": "r35", "56": "r35", "57": "r35", "58": "r35" }, { "23": "r36", "24": "r36", "25": "r36", "26": "r36", "27": "r36", "28": "r36", "29": "r36", "30": "r36", "31": "r36", "32": "r36", "33": "r36", "34": "r36", "35": "r36", "36": "r36", "37": "r36", "38": "r36", "39": "r36", "40": "r36", "41": "r36", "42": "r36", "43": "r36", "44": "r36", "45": "r36", "46": "r36", "47": "r36", "48": "r36", "49": "r36", "50": "r36", "51": "r36", "52": "r36", "53": "r36", "54": "r36", "55": "r36", "56": "r36", "57": "r36", "58": "r36" }, { "10": 70, "18": 65, "19": 66, "21": 67, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r54", "58": "s68" }, { "10": 70, "18": 83, "19": 66, "21": 67, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r54", "58": "s68" }, { "23": "r47", "24": "r47", "25": "r47", "26": "r47", "27": "r47", "28": "r47", "29": "r47", "30": "r47", "31": "r47", "32": "r47", "33": "r47", "34": "r47", "35": "r47", "36": "r47", "37": "r47", "38": "r47", "39": "r47", "40": "r47", "41": "r47", "42": "r47", "43": "r47", "44": "r47", "45": "r47", "46": "r47", "47": "r47", "48": "r47", "49": "r47", "50": "r47", "51": "r47", "52": "r47", "53": "r47", "54": "r47", "55": "r47", "57": "r47" }, { "23": "r48", "24": "r48", "25": "r48", "26": "r48", "27": "r48", "28": "r48", "29": "r48", "30": "r48", "31": "r48", "32": "r48", "33": "r48", "34": "r48", "35": "r48", "36": "r48", "37": "r48", "38": "r48", "39": "r48", "40": "r48", "41": "r48", "42": "r48", "43": "r48", "44": "r48", "45": "r48", "46": "r48", "47": "r48", "48": "r48", "49": "r48", "50": "r48", "51": "r48", "52": "r48", "53": "r48", "54": "r48", "55": "r48", "57": "r48" }, { "4": 85, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 87, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "4": 89, "5": 5, "6": 6, "24": "r10", "25": "r10", "26": "r10", "27": "r10", "28": "r10", "29": "r10", "30": "r10", "31": "r10", "32": "r10", "33": "r10", "34": "r10", "35": "r10", "36": "r10", "37": "r10", "38": "r10", "39": "r10", "40": "r10", "41": "r10", "42": "r10", "43": "r10", "44": "r10", "45": "r10", "52": "r10", "53": "r10", "54": "r10", "55": "r10", "57": "r10" }, { "23": "r13", "24": "r13", "25": "r13", "26": "r13", "27": "r13", "28": "r13", "29": "r13", "30": "r13", "31": "r13", "32": "r13", "33": "r13", "34": "r13", "35": "r13", "36": "r13", "37": "r13", "38": "r13", "39": "r13", "40": "r13", "41": "r13", "42": "r13", "43": "r13", "44": "r13", "45": "r13", "52": "r13", "53": "r13", "54": "r13", "55": "r13", "57": "r13" }, { "23": "r37", "24": "r37", "25": "r37", "26": "r37", "27": "r37", "28": "r37", "29": "r37", "30": "r37", "31": "r37", "32": "r37", "33": "r37", "34": "r37", "35": "r37", "36": "r37", "37": "r37", "38": "r37", "39": "r37", "40": "r37", "41": "r37", "42": "r37", "43": "r37", "44": "r37", "45": "r37", "52": "r37", "53": "r37", "54": "r37", "55": "r37", "57": "r37" }, { "23": "r39", "24": "r39", "25": "r39", "26": "r39", "27": "r39", "28": "r39", "29": "r39", "30": "r39", "31": "r39", "32": "r39", "33": "r39", "34": "r39", "35": "r39", "36": "r39", "37": "r39", "38": "r39", "39": "r39", "40": "r39", "41": "r39", "42": "r39", "43": "r39", "44": "r39", "45": "r39", "46": "s56", "52": "r39", "53": "r39", "54": "r39", "55": "r39", "57": "r39" }, { "23": "r41", "24": "r41", "25": "r41", "26": "r41", "27": "r41", "28": "r41", "29": "r41", "30": "r41", "31": "r41", "32": "r41", "33": "r41", "34": "r41", "35": "r41", "36": "r41", "37": "r41", "38": "r41", "39": "r41", "40": "r41", "41": "r41", "42": "r41", "43": "r41", "44": "r41", "45": "r41", "46": "r41", "52": "r41", "53": "r41", "54": "r41", "55": "r41", "57": "r41" }, { "23": "r42", "24": "r42", "25": "r42", "26": "r42", "27": "r42", "28": "r42", "29": "r42", "30": "r42", "31": "r42", "32": "r42", "33": "r42", "34": "r42", "35": "r42", "36": "r42", "37": "r42", "38": "r42", "39": "r42", "40": "r42", "41": "r42", "42": "r42", "43": "r42", "44": "r42", "45": "r42", "46": "r42", "52": "r42", "53": "r42", "54": "r42", "55": "r42", "57": "r42" }, { "23": "r43", "24": "r43", "25": "r43", "26": "r43", "27": "r43", "28": "r43", "29": "r43", "30": "r43", "31": "r43", "32": "r43", "33": "r43", "34": "r43", "35": "r43", "36": "r43", "37": "r43", "38": "r43", "39": "r43", "40": "r43", "41": "r43", "42": "r43", "43": "r43", "44": "r43", "45": "r43", "46": "r43", "52": "r43", "53": "r43", "54": "r43", "55": "r43", "57": "r43" }, { "23": "r44", "24": "r44", "25": "r44", "26": "r44", "27": "r44", "28": "r44", "29": "r44", "30": "r44", "31": "r44", "32": "r44", "33": "r44", "34": "r44", "35": "r44", "36": "r44", "37": "r44", "38": "r44", "39": "r44", "40": "r44", "41": "r44", "42": "r44", "43": "r44", "44": "r44", "45": "r44", "46": "r44", "52": "r44", "53": "r44", "54": "r44", "55": "r44", "57": "r44" }, { "23": "r45", "24": "r45", "25": "r45", "26": "r45", "27": "r45", "28": "r45", "29": "r45", "30": "r45", "31": "r45", "32": "r45", "33": "r45", "34": "r45", "35": "r45", "36": "r45", "37": "r45", "38": "r45", "39": "r45", "40": "r45", "41": "r45", "42": "r45", "43": "r45", "44": "r45", "45": "r45", "46": "r45", "52": "r45", "53": "r45", "54": "r45", "55": "r45", "57": "r45" }, { "23": "r46", "24": "r46", "25": "r46", "26": "r46", "27": "r46", "28": "r46", "29": "r46", "30": "r46", "31": "r46", "32": "r46", "33": "r46", "34": "r46", "35": "r46", "36": "r46", "37": "r46", "38": "r46", "39": "r46", "40": "r46", "41": "r46", "42": "r46", "43": "r46", "44": "r46", "45": "r46", "46": "r46", "52": "r46", "53": "r46", "54": "r46", "55": "r46", "57": "r46" }, { "23": "r40", "24": "r40", "25": "r40", "26": "r40", "27": "r40", "28": "r40", "29": "r40", "30": "r40", "31": "r40", "32": "r40", "33": "r40", "34": "r40", "35": "r40", "36": "r40", "37": "r40", "38": "r40", "39": "r40", "40": "r40", "41": "r40", "42": "r40", "43": "r40", "44": "r40", "45": "r40", "52": "r40", "53": "r40", "54": "r40", "55": "r40", "57": "r40" }, { "25": "s12", "31": "s58" }, { "23": "r18", "24": "r18", "25": "r18", "26": "r18", "27": "r18", "28": "r18", "29": "r18", "30": "r18", "31": "r18", "32": "r18", "33": "r18", "34": "r18", "35": "r18", "36": "r18", "37": "r18", "38": "r18", "39": "r18", "40": "r18", "41": "r18", "42": "r18", "43": "r18", "44": "r18", "45": "r18", "52": "r18", "53": "r18", "54": "r18", "55": "r18", "57": "r18" }, { "25": "s12", "31": "s60" }, { "23": "r19", "24": "r19", "25": "r19", "26": "r19", "27": "r19", "28": "r19", "29": "r19", "30": "r19", "31": "r19", "32": "r19", "33": "r19", "34": "r19", "35": "r19", "36": "r19", "37": "r19", "38": "r19", "39": "r19", "40": "r19", "41": "r19", "42": "r19", "43": "r19", "44": "r19", "45": "r19", "52": "r19", "53": "r19", "54": "r19", "55": "r19", "57": "r19" }, { "25": "s12", "31": "s62" }, { "23": "r20", "24": "r20", "25": "r20", "26": "r20", "27": "r20", "28": "r20", "29": "r20", "30": "r20", "31": "r20", "32": "r20", "33": "r20", "34": "r20", "35": "r20", "36": "r20", "37": "r20", "38": "r20", "39": "r20", "40": "r20", "41": "r20", "42": "r20", "43": "r20", "44": "r20", "45": "r20", "52": "r20", "53": "r20", "54": "r20", "55": "r20", "57": "r20" }, { "25": "s12", "31": "s64" }, { "23": "r21", "24": "r21", "25": "r21", "26": "r21", "27": "r21", "28": "r21", "29": "r21", "30": "r21", "31": "r21", "32": "r21", "33": "r21", "34": "r21", "35": "r21", "36": "r21", "37": "r21", "38": "r21", "39": "r21", "40": "r21", "41": "r21", "42": "r21", "43": "r21", "44": "r21", "45": "r21", "52": "r21", "53": "r21", "54": "r21", "55": "r21", "57": "r21" }, { "56": "s72" }, { "56": "r55" }, { "10": 70, "20": 73, "21": 75, "22": 76, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r56", "58": "s74" }, { "24": "r62", "28": "r62", "35": "r62", "36": "r62", "37": "r62", "38": "r62", "39": "r62", "40": "r62", "41": "r62", "42": "r62", "43": "r62", "44": "r62", "45": "r62", "56": "r62", "58": "r62" }, { "24": "r63", "28": "r63", "35": "r63", "36": "r63", "37": "r63", "38": "r63", "39": "r63", "40": "r63", "41": "r63", "42": "r63", "43": "r63", "44": "r63", "45": "r63", "56": "r63", "58": "r63" }, { "24": "r64", "28": "r64", "35": "r64", "36": "r64", "37": "r64", "38": "r64", "39": "r64", "40": "r64", "41": "r64", "42": "r64", "43": "r64", "44": "r64", "45": "r64", "56": "r64", "58": "r64" }, { "24": "r65", "28": "r65", "35": "r65", "36": "r65", "37": "r65", "38": "r65", "39": "r65", "40": "r65", "41": "r65", "42": "r65", "43": "r65", "44": "r65", "45": "r65", "56": "r65", "58": "r65" }, { "23": "r52", "24": "r52", "25": "r52", "26": "r52", "27": "r52", "28": "r52", "29": "r52", "30": "r52", "31": "r52", "32": "r52", "33": "r52", "34": "r52", "35": "r52", "36": "r52", "37": "r52", "38": "r52", "39": "r52", "40": "r52", "41": "r52", "42": "r52", "43": "r52", "44": "r52", "45": "r52", "46": "r52", "47": "r52", "48": "r52", "49": "r52", "50": "r52", "51": "r52", "52": "r52", "53": "r52", "54": "r52", "55": "r52", "57": "r52" }, { "56": "r57" }, { "10": 70, "21": 77, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r62", "58": "s68" }, { "56": "r59" }, { "10": 70, "20": 79, "21": 75, "22": 76, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r63", "58": "s80" }, { "10": 70, "18": 78, "19": 66, "21": 67, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r54", "58": "s68" }, { "56": "r58" }, { "56": "r60" }, { "10": 70, "21": 81, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r62", "58": "s68" }, { "10": 70, "18": 82, "19": 66, "21": 67, "22": 69, "24": "s28", "28": "s71", "35": "s29", "36": "s30", "37": "s31", "38": "s32", "39": "s33", "40": "s34", "41": "s35", "42": "s36", "43": "s37", "44": "s38", "45": "s39", "56": "r54", "58": "s68" }, { "56": "r61" }, { "56": "s84" }, { "23": "r53", "24": "r53", "25": "r53", "26": "r53", "27": "r53", "28": "r53", "29": "r53", "30": "r53", "31": "r53", "32": "r53", "33": "r53", "34": "r53", "35": "r53", "36": "r53", "37": "r53", "38": "r53", "39": "r53", "40": "r53", "41": "r53", "42": "r53", "43": "r53", "44": "r53", "45": "r53", "46": "r53", "47": "r53", "48": "r53", "49": "r53", "50": "r53", "51": "r53", "52": "r53", "53": "r53", "54": "r53", "55": "r53", "57": "r53" }, { "25": "s12", "31": "s86" }, { "23": "r49", "24": "r49", "25": "r49", "26": "r49", "27": "r49", "28": "r49", "29": "r49", "30": "r49", "31": "r49", "32": "r49", "33": "r49", "34": "r49", "35": "r49", "36": "r49", "37": "r49", "38": "r49", "39": "r49", "40": "r49", "41": "r49", "42": "r49", "43": "r49", "44": "r49", "45": "r49", "46": "r49", "47": "r49", "48": "r49", "49": "r49", "50": "r49", "51": "r49", "52": "r49", "53": "r49", "54": "r49", "55": "r49", "57": "r49" }, { "25": "s12", "31": "s88" }, { "23": "r50", "24": "r50", "25": "r50", "26": "r50", "27": "r50", "28": "r50", "29": "r50", "30": "r50", "31": "r50", "32": "r50", "33": "r50", "34": "r50", "35": "r50", "36": "r50", "37": "r50", "38": "r50", "39": "r50", "40": "r50", "41": "r50", "42": "r50", "43": "r50", "44": "r50", "45": "r50", "46": "r50", "47": "r50", "48": "r50", "49": "r50", "50": "r50", "51": "r50", "52": "r50", "53": "r50", "54": "r50", "55": "r50", "57": "r50" }, { "25": "s12", "31": "s90" }, { "23": "r51", "24": "r51", "25": "r51", "26": "r51", "27": "r51", "28": "r51", "29": "r51", "30": "r51", "31": "r51", "32": "r51", "33": "r51", "34": "r51", "35": "r51", "36": "r51", "37": "r51", "38": "r51", "39": "r51", "40": "r51", "41": "r51", "42": "r51", "43": "r51", "44": "r51", "45": "r51", "46": "r51", "47": "r51", "48": "r51", "49": "r51", "50": "r51", "51": "r51", "52": "r51", "53": "r51", "54": "r51", "55": "r51", "57": "r51" }]; + +/** + * Parsing stack. + */ +var stack = []; + +/** + * Tokenizer instance. + */ +var tokenizer = void 0; +/** + * Generic tokenizer used by the parser in the Syntax tool. + * + * https://www.npmjs.com/package/syntax-cli + * + * See `--custom-tokinzer` to skip this generation, and use a custom one. + */ + +var lexRules = [[/^#[^\n]+/, function () {/* skip comments */}], [/^\s+/, function () {/* skip whitespace */}], [/^-/, function () { + return 'DASH'; +}], [/^\//, function () { + return 'CHAR'; +}], [/^#/, function () { + return 'CHAR'; +}], [/^\|/, function () { + return 'CHAR'; +}], [/^\./, function () { + return 'CHAR'; +}], [/^\{/, function () { + return 'CHAR'; +}], [/^\{\d+\}/, function () { + return 'RANGE_EXACT'; +}], [/^\{\d+,\}/, function () { + return 'RANGE_OPEN'; +}], [/^\{\d+,\d+\}/, function () { + return 'RANGE_CLOSED'; +}], [/^\\k<(([\u0041-\u005a\u0061-\u007a\u00aa\u00b5\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376-\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e-\u066f\u0671-\u06d3\u06d5\u06e5-\u06e6\u06ee-\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4-\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08bd\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f-\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc-\u09dd\u09df-\u09e1\u09f0-\u09f1\u09fc\u0a05-\u0a0a\u0a0f-\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32-\u0a33\u0a35-\u0a36\u0a38-\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2-\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0-\u0ae1\u0af9\u0b05-\u0b0c\u0b0f-\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32-\u0b33\u0b35-\u0b39\u0b3d\u0b5c-\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99-\u0b9a\u0b9c\u0b9e-\u0b9f\u0ba3-\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60-\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0-\u0ce1\u0cf1-\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32-\u0e33\u0e40-\u0e46\u0e81-\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2-\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065-\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae-\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5-\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fef\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a-\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7c6\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd-\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5-\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab67\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c-\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\udd40-\udd74\ude80-\ude9c\udea0-\uded0\udf00-\udf1f\udf2d-\udf4a\udf50-\udf75\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf\udfd1-\udfd5]|\ud801[\udc00-\udc9d\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37-\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4-\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe-\uddbf\ude00\ude10-\ude13\ude15-\ude17\ude19-\ude35\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee4\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd23\udf00-\udf1c\udf27\udf30-\udf45\udfe0-\udff6]|\ud804[\udc03-\udc37\udc83-\udcaf\udcd0-\udce8\udd03-\udd26\udd44\udd50-\udd72\udd76\udd83-\uddb2\uddc1-\uddc4\uddda\udddc\ude00-\ude11\ude13-\ude2b\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udede\udf05-\udf0c\udf0f-\udf10\udf13-\udf28\udf2a-\udf30\udf32-\udf33\udf35-\udf39\udf3d\udf50\udf5d-\udf61]|\ud805[\udc00-\udc34\udc47-\udc4a\udc5f\udc80-\udcaf\udcc4-\udcc5\udcc7\udd80-\uddae\uddd8-\udddb\ude00-\ude2f\ude44\ude80-\udeaa\udeb8\udf00-\udf1a]|\ud806[\udc00-\udc2b\udca0-\udcdf\udcff\udda0-\udda7\uddaa-\uddd0\udde1\udde3\ude00\ude0b-\ude32\ude3a\ude50\ude5c-\ude89\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc2e\udc40\udc72-\udc8f\udd00-\udd06\udd08-\udd09\udd0b-\udd30\udd46\udd60-\udd65\udd67-\udd68\udd6a-\udd89\udd98\udee0-\udef2]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc80-\udd43]|\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\uded0-\udeed\udf00-\udf2f\udf40-\udf43\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf50\udf93-\udf9f\udfe0-\udfe1\udfe3]|\ud81c[\udc00-\udfff]|\ud81d[\udc00-\udfff]|\ud81e[\udc00-\udfff]|\ud81f[\udc00-\udfff]|\ud820[\udc00-\udfff]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e-\udc9f\udca2\udca5-\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb]|\ud838[\udd00-\udd2c\udd37-\udd3d\udd4e\udec0-\udeeb]|\ud83a[\udc00-\udcc4\udd00-\udd43\udd4b]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21-\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51-\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61-\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud840[\udc00-\udfff]|\ud841[\udc00-\udfff]|\ud842[\udc00-\udfff]|\ud843[\udc00-\udfff]|\ud844[\udc00-\udfff]|\ud845[\udc00-\udfff]|\ud846[\udc00-\udfff]|\ud847[\udc00-\udfff]|\ud848[\udc00-\udfff]|\ud849[\udc00-\udfff]|\ud84a[\udc00-\udfff]|\ud84b[\udc00-\udfff]|\ud84c[\udc00-\udfff]|\ud84d[\udc00-\udfff]|\ud84e[\udc00-\udfff]|\ud84f[\udc00-\udfff]|\ud850[\udc00-\udfff]|\ud851[\udc00-\udfff]|\ud852[\udc00-\udfff]|\ud853[\udc00-\udfff]|\ud854[\udc00-\udfff]|\ud855[\udc00-\udfff]|\ud856[\udc00-\udfff]|\ud857[\udc00-\udfff]|\ud858[\udc00-\udfff]|\ud859[\udc00-\udfff]|\ud85a[\udc00-\udfff]|\ud85b[\udc00-\udfff]|\ud85c[\udc00-\udfff]|\ud85d[\udc00-\udfff]|\ud85e[\udc00-\udfff]|\ud85f[\udc00-\udfff]|\ud860[\udc00-\udfff]|\ud861[\udc00-\udfff]|\ud862[\udc00-\udfff]|\ud863[\udc00-\udfff]|\ud864[\udc00-\udfff]|\ud865[\udc00-\udfff]|\ud866[\udc00-\udfff]|\ud867[\udc00-\udfff]|\ud868[\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86a[\udc00-\udfff]|\ud86b[\udc00-\udfff]|\ud86c[\udc00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud86f[\udc00-\udfff]|\ud870[\udc00-\udfff]|\ud871[\udc00-\udfff]|\ud872[\udc00-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud874[\udc00-\udfff]|\ud875[\udc00-\udfff]|\ud876[\udc00-\udfff]|\ud877[\udc00-\udfff]|\ud878[\udc00-\udfff]|\ud879[\udc00-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d])|[$_]|(\\u[0-9a-fA-F]{4}|\\u\{[0-9a-fA-F]{1,}\}))(([\u0030-\u0039\u0041-\u005a\u005f\u0061-\u007a\u00aa\u00b5\u00b7\u00ba\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0300-\u0374\u0376-\u0377\u037a-\u037d\u037f\u0386-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u0483-\u0487\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u05d0-\u05ea\u05ef-\u05f2\u0610-\u061a\u0620-\u0669\u066e-\u06d3\u06d5-\u06dc\u06df-\u06e8\u06ea-\u06fc\u06ff\u0710-\u074a\u074d-\u07b1\u07c0-\u07f5\u07fa\u07fd\u0800-\u082d\u0840-\u085b\u0860-\u086a\u08a0-\u08b4\u08b6-\u08bd\u08d3-\u08e1\u08e3-\u0963\u0966-\u096f\u0971-\u0983\u0985-\u098c\u098f-\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bc-\u09c4\u09c7-\u09c8\u09cb-\u09ce\u09d7\u09dc-\u09dd\u09df-\u09e3\u09e6-\u09f1\u09fc\u09fe\u0a01-\u0a03\u0a05-\u0a0a\u0a0f-\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32-\u0a33\u0a35-\u0a36\u0a38-\u0a39\u0a3c\u0a3e-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a59-\u0a5c\u0a5e\u0a66-\u0a75\u0a81-\u0a83\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2-\u0ab3\u0ab5-\u0ab9\u0abc-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ad0\u0ae0-\u0ae3\u0ae6-\u0aef\u0af9-\u0aff\u0b01-\u0b03\u0b05-\u0b0c\u0b0f-\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32-\u0b33\u0b35-\u0b39\u0b3c-\u0b44\u0b47-\u0b48\u0b4b-\u0b4d\u0b56-\u0b57\u0b5c-\u0b5d\u0b5f-\u0b63\u0b66-\u0b6f\u0b71\u0b82-\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99-\u0b9a\u0b9c\u0b9e-\u0b9f\u0ba3-\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd0\u0bd7\u0be6-\u0bef\u0c00-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c58-\u0c5a\u0c60-\u0c63\u0c66-\u0c6f\u0c80-\u0c83\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbc-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5-\u0cd6\u0cde\u0ce0-\u0ce3\u0ce6-\u0cef\u0cf1-\u0cf2\u0d00-\u0d03\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d44\u0d46-\u0d48\u0d4a-\u0d4e\u0d54-\u0d57\u0d5f-\u0d63\u0d66-\u0d6f\u0d7a-\u0d7f\u0d82-\u0d83\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2-\u0df3\u0e01-\u0e3a\u0e40-\u0e4e\u0e50-\u0e59\u0e81-\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0ebd\u0ec0-\u0ec4\u0ec6\u0ec8-\u0ecd\u0ed0-\u0ed9\u0edc-\u0edf\u0f00\u0f18-\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e-\u0f47\u0f49-\u0f6c\u0f71-\u0f84\u0f86-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u1049\u1050-\u109d\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u135d-\u135f\u1369-\u1371\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176c\u176e-\u1770\u1772-\u1773\u1780-\u17d3\u17d7\u17dc-\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u1820-\u1878\u1880-\u18aa\u18b0-\u18f5\u1900-\u191e\u1920-\u192b\u1930-\u193b\u1946-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u19d0-\u19da\u1a00-\u1a1b\u1a20-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1aa7\u1ab0-\u1abd\u1b00-\u1b4b\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1bf3\u1c00-\u1c37\u1c40-\u1c49\u1c4d-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1cd0-\u1cd2\u1cd4-\u1cfa\u1d00-\u1df9\u1dfb-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u203f-\u2040\u2054\u2071\u207f\u2090-\u209c\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d7f-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2de0-\u2dff\u3005-\u3007\u3021-\u302f\u3031-\u3035\u3038-\u303c\u3041-\u3096\u3099-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fef\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua62b\ua640-\ua66f\ua674-\ua67d\ua67f-\ua6f1\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7c6\ua7f7-\ua827\ua840-\ua873\ua880-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f7\ua8fb\ua8fd-\ua92d\ua930-\ua953\ua960-\ua97c\ua980-\ua9c0\ua9cf-\ua9d9\ua9e0-\ua9fe\uaa00-\uaa36\uaa40-\uaa4d\uaa50-\uaa59\uaa60-\uaa76\uaa7a-\uaac2\uaadb-\uaadd\uaae0-\uaaef\uaaf2-\uaaf6\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab67\uab70-\uabea\uabec-\uabed\uabf0-\uabf9\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe00-\ufe0f\ufe20-\ufe2f\ufe33-\ufe34\ufe4d-\ufe4f\ufe70-\ufe74\ufe76-\ufefc\uff10-\uff19\uff21-\uff3a\uff3f\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]|\ud800[\udc00-\udc0b\udc0d-\udc26\udc28-\udc3a\udc3c-\udc3d\udc3f-\udc4d\udc50-\udc5d\udc80-\udcfa\udd40-\udd74\uddfd\ude80-\ude9c\udea0-\uded0\udee0\udf00-\udf1f\udf2d-\udf4a\udf50-\udf7a\udf80-\udf9d\udfa0-\udfc3\udfc8-\udfcf\udfd1-\udfd5]|\ud801[\udc00-\udc9d\udca0-\udca9\udcb0-\udcd3\udcd8-\udcfb\udd00-\udd27\udd30-\udd63\ude00-\udf36\udf40-\udf55\udf60-\udf67]|\ud802[\udc00-\udc05\udc08\udc0a-\udc35\udc37-\udc38\udc3c\udc3f-\udc55\udc60-\udc76\udc80-\udc9e\udce0-\udcf2\udcf4-\udcf5\udd00-\udd15\udd20-\udd39\udd80-\uddb7\uddbe-\uddbf\ude00-\ude03\ude05-\ude06\ude0c-\ude13\ude15-\ude17\ude19-\ude35\ude38-\ude3a\ude3f\ude60-\ude7c\ude80-\ude9c\udec0-\udec7\udec9-\udee6\udf00-\udf35\udf40-\udf55\udf60-\udf72\udf80-\udf91]|\ud803[\udc00-\udc48\udc80-\udcb2\udcc0-\udcf2\udd00-\udd27\udd30-\udd39\udf00-\udf1c\udf27\udf30-\udf50\udfe0-\udff6]|\ud804[\udc00-\udc46\udc66-\udc6f\udc7f-\udcba\udcd0-\udce8\udcf0-\udcf9\udd00-\udd34\udd36-\udd3f\udd44-\udd46\udd50-\udd73\udd76\udd80-\uddc4\uddc9-\uddcc\uddd0-\uddda\udddc\ude00-\ude11\ude13-\ude37\ude3e\ude80-\ude86\ude88\ude8a-\ude8d\ude8f-\ude9d\ude9f-\udea8\udeb0-\udeea\udef0-\udef9\udf00-\udf03\udf05-\udf0c\udf0f-\udf10\udf13-\udf28\udf2a-\udf30\udf32-\udf33\udf35-\udf39\udf3b-\udf44\udf47-\udf48\udf4b-\udf4d\udf50\udf57\udf5d-\udf63\udf66-\udf6c\udf70-\udf74]|\ud805[\udc00-\udc4a\udc50-\udc59\udc5e-\udc5f\udc80-\udcc5\udcc7\udcd0-\udcd9\udd80-\uddb5\uddb8-\uddc0\uddd8-\udddd\ude00-\ude40\ude44\ude50-\ude59\ude80-\udeb8\udec0-\udec9\udf00-\udf1a\udf1d-\udf2b\udf30-\udf39]|\ud806[\udc00-\udc3a\udca0-\udce9\udcff\udda0-\udda7\uddaa-\uddd7\uddda-\udde1\udde3-\udde4\ude00-\ude3e\ude47\ude50-\ude99\ude9d\udec0-\udef8]|\ud807[\udc00-\udc08\udc0a-\udc36\udc38-\udc40\udc50-\udc59\udc72-\udc8f\udc92-\udca7\udca9-\udcb6\udd00-\udd06\udd08-\udd09\udd0b-\udd36\udd3a\udd3c-\udd3d\udd3f-\udd47\udd50-\udd59\udd60-\udd65\udd67-\udd68\udd6a-\udd8e\udd90-\udd91\udd93-\udd98\udda0-\udda9\udee0-\udef6]|\ud808[\udc00-\udf99]|\ud809[\udc00-\udc6e\udc80-\udd43]|\ud80c[\udc00-\udfff]|\ud80d[\udc00-\udc2e]|\ud811[\udc00-\ude46]|\ud81a[\udc00-\ude38\ude40-\ude5e\ude60-\ude69\uded0-\udeed\udef0-\udef4\udf00-\udf36\udf40-\udf43\udf50-\udf59\udf63-\udf77\udf7d-\udf8f]|\ud81b[\ude40-\ude7f\udf00-\udf4a\udf4f-\udf87\udf8f-\udf9f\udfe0-\udfe1\udfe3]|\ud81c[\udc00-\udfff]|\ud81d[\udc00-\udfff]|\ud81e[\udc00-\udfff]|\ud81f[\udc00-\udfff]|\ud820[\udc00-\udfff]|\ud821[\udc00-\udff7]|\ud822[\udc00-\udef2]|\ud82c[\udc00-\udd1e\udd50-\udd52\udd64-\udd67\udd70-\udefb]|\ud82f[\udc00-\udc6a\udc70-\udc7c\udc80-\udc88\udc90-\udc99\udc9d-\udc9e]|\ud834[\udd65-\udd69\udd6d-\udd72\udd7b-\udd82\udd85-\udd8b\uddaa-\uddad\ude42-\ude44]|\ud835[\udc00-\udc54\udc56-\udc9c\udc9e-\udc9f\udca2\udca5-\udca6\udca9-\udcac\udcae-\udcb9\udcbb\udcbd-\udcc3\udcc5-\udd05\udd07-\udd0a\udd0d-\udd14\udd16-\udd1c\udd1e-\udd39\udd3b-\udd3e\udd40-\udd44\udd46\udd4a-\udd50\udd52-\udea5\udea8-\udec0\udec2-\udeda\udedc-\udefa\udefc-\udf14\udf16-\udf34\udf36-\udf4e\udf50-\udf6e\udf70-\udf88\udf8a-\udfa8\udfaa-\udfc2\udfc4-\udfcb\udfce-\udfff]|\ud836[\ude00-\ude36\ude3b-\ude6c\ude75\ude84\ude9b-\ude9f\udea1-\udeaf]|\ud838[\udc00-\udc06\udc08-\udc18\udc1b-\udc21\udc23-\udc24\udc26-\udc2a\udd00-\udd2c\udd30-\udd3d\udd40-\udd49\udd4e\udec0-\udef9]|\ud83a[\udc00-\udcc4\udcd0-\udcd6\udd00-\udd4b\udd50-\udd59]|\ud83b[\ude00-\ude03\ude05-\ude1f\ude21-\ude22\ude24\ude27\ude29-\ude32\ude34-\ude37\ude39\ude3b\ude42\ude47\ude49\ude4b\ude4d-\ude4f\ude51-\ude52\ude54\ude57\ude59\ude5b\ude5d\ude5f\ude61-\ude62\ude64\ude67-\ude6a\ude6c-\ude72\ude74-\ude77\ude79-\ude7c\ude7e\ude80-\ude89\ude8b-\ude9b\udea1-\udea3\udea5-\udea9\udeab-\udebb]|\ud840[\udc00-\udfff]|\ud841[\udc00-\udfff]|\ud842[\udc00-\udfff]|\ud843[\udc00-\udfff]|\ud844[\udc00-\udfff]|\ud845[\udc00-\udfff]|\ud846[\udc00-\udfff]|\ud847[\udc00-\udfff]|\ud848[\udc00-\udfff]|\ud849[\udc00-\udfff]|\ud84a[\udc00-\udfff]|\ud84b[\udc00-\udfff]|\ud84c[\udc00-\udfff]|\ud84d[\udc00-\udfff]|\ud84e[\udc00-\udfff]|\ud84f[\udc00-\udfff]|\ud850[\udc00-\udfff]|\ud851[\udc00-\udfff]|\ud852[\udc00-\udfff]|\ud853[\udc00-\udfff]|\ud854[\udc00-\udfff]|\ud855[\udc00-\udfff]|\ud856[\udc00-\udfff]|\ud857[\udc00-\udfff]|\ud858[\udc00-\udfff]|\ud859[\udc00-\udfff]|\ud85a[\udc00-\udfff]|\ud85b[\udc00-\udfff]|\ud85c[\udc00-\udfff]|\ud85d[\udc00-\udfff]|\ud85e[\udc00-\udfff]|\ud85f[\udc00-\udfff]|\ud860[\udc00-\udfff]|\ud861[\udc00-\udfff]|\ud862[\udc00-\udfff]|\ud863[\udc00-\udfff]|\ud864[\udc00-\udfff]|\ud865[\udc00-\udfff]|\ud866[\udc00-\udfff]|\ud867[\udc00-\udfff]|\ud868[\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|\ud86a[\udc00-\udfff]|\ud86b[\udc00-\udfff]|\ud86c[\udc00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d\udc20-\udfff]|\ud86f[\udc00-\udfff]|\ud870[\udc00-\udfff]|\ud871[\udc00-\udfff]|\ud872[\udc00-\udfff]|\ud873[\udc00-\udea1\udeb0-\udfff]|\ud874[\udc00-\udfff]|\ud875[\udc00-\udfff]|\ud876[\udc00-\udfff]|\ud877[\udc00-\udfff]|\ud878[\udc00-\udfff]|\ud879[\udc00-\udfff]|\ud87a[\udc00-\udfe0]|\ud87e[\udc00-\ude1d]|\udb40[\udd00-\uddef])|[$_]|(\\u[0-9a-fA-F]{4}|\\u\{[0-9a-fA-F]{1,}\})|[\u200c\u200d])*>/, function () { + var groupName = yytext.slice(3, -1); + validateUnicodeGroupName(groupName, this.getCurrentState()); + return 'NAMED_GROUP_REF'; +}], [/^\\b/, function () { + return 'ESC_b'; +}], [/^\\B/, function () { + return 'ESC_B'; +}], [/^\\c[a-zA-Z]/, function () { + return 'CTRL_CH'; +}], [/^\\0\d{1,2}/, function () { + return 'OCT_CODE'; +}], [/^\\0/, function () { + return 'DEC_CODE'; +}], [/^\\\d{1,3}/, function () { + return 'DEC_CODE'; +}], [/^\\u[dD][89abAB][0-9a-fA-F]{2}\\u[dD][c-fC-F][0-9a-fA-F]{2}/, function () { + return 'U_CODE_SURROGATE'; +}], [/^\\u\{[0-9a-fA-F]{1,}\}/, function () { + return 'U_CODE'; +}], [/^\\u[0-9a-fA-F]{4}/, function () { + return 'U_CODE'; +}], [/^\\[pP]\{\w+(?:=\w+)?\}/, function () { + return 'U_PROP_VALUE_EXP'; +}], [/^\\x[0-9a-fA-F]{2}/, function () { + return 'HEX_CODE'; +}], [/^\\[tnrdDsSwWvf]/, function () { + return 'META_CHAR'; +}], [/^\\\//, function () { + return 'ESC_CHAR'; +}], [/^\\[ #]/, function () { + return 'ESC_CHAR'; +}], [/^\\[\^\$\.\*\+\?\(\)\\\[\]\{\}\|\/]/, function () { + return 'ESC_CHAR'; +}], [/^\\[^*?+\[()\\|]/, function () { + var s = this.getCurrentState(); + if (s === 'u_class' && yytext === "\\-") { + return 'ESC_CHAR'; + } else if (s === 'u' || s === 'xu' || s === 'u_class') { + throw new SyntaxError('invalid Unicode escape ' + yytext); + } + return 'ESC_CHAR'; +}], [/^\(/, function () { + return 'CHAR'; +}], [/^\)/, function () { + return 'CHAR'; +}], [/^\(\?=/, function () { + return 'POS_LA_ASSERT'; +}], [/^\(\?!/, function () { + return 'NEG_LA_ASSERT'; +}], [/^\(\?<=/, function () { + return 'POS_LB_ASSERT'; +}], [/^\(\?/, function () { + yytext = yytext.slice(3, -1); + validateUnicodeGroupName(yytext, this.getCurrentState()); + return 'NAMED_CAPTURE_GROUP'; +}], [/^\(/, function () { + return 'L_PAREN'; +}], [/^\)/, function () { + return 'R_PAREN'; +}], [/^[*?+[^$]/, function () { + return 'CHAR'; +}], [/^\\\]/, function () { + return 'ESC_CHAR'; +}], [/^\]/, function () { + this.popState();return 'R_BRACKET'; +}], [/^\^/, function () { + return 'BOS'; +}], [/^\$/, function () { + return 'EOS'; +}], [/^\*/, function () { + return 'STAR'; +}], [/^\?/, function () { + return 'Q_MARK'; +}], [/^\+/, function () { + return 'PLUS'; +}], [/^\|/, function () { + return 'BAR'; +}], [/^\./, function () { + return 'ANY'; +}], [/^\//, function () { + return 'SLASH'; +}], [/^[^*?+\[()\\|]/, function () { + return 'CHAR'; +}], [/^\[\^/, function () { + var s = this.getCurrentState();this.pushState(s === 'u' || s === 'xu' ? 'u_class' : 'class');return 'NEG_CLASS'; +}], [/^\[/, function () { + var s = this.getCurrentState();this.pushState(s === 'u' || s === 'xu' ? 'u_class' : 'class');return 'L_BRACKET'; +}]]; +var lexRulesByConditions = { "INITIAL": [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 23, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "u": [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "xu": [0, 1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "x": [0, 1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 23, 24, 26, 27, 30, 31, 32, 33, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "u_class": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51], "class": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51] }; + +var EOF_TOKEN = { + type: EOF, + value: '' +}; + +tokenizer = { + initString: function initString(string) { + this._string = string; + this._cursor = 0; + + this._states = ['INITIAL']; + this._tokensQueue = []; + + this._currentLine = 1; + this._currentColumn = 0; + this._currentLineBeginOffset = 0; + + /** + * Matched token location data. + */ + this._tokenStartOffset = 0; + this._tokenEndOffset = 0; + this._tokenStartLine = 1; + this._tokenEndLine = 1; + this._tokenStartColumn = 0; + this._tokenEndColumn = 0; + + return this; + }, + + + /** + * Returns tokenizer states. + */ + getStates: function getStates() { + return this._states; + }, + getCurrentState: function getCurrentState() { + return this._states[this._states.length - 1]; + }, + pushState: function pushState(state) { + this._states.push(state); + }, + begin: function begin(state) { + this.pushState(state); + }, + popState: function popState() { + if (this._states.length > 1) { + return this._states.pop(); + } + return this._states[0]; + }, + getNextToken: function getNextToken() { + // Something was queued, return it. + if (this._tokensQueue.length > 0) { + return this.onToken(this._toToken(this._tokensQueue.shift())); + } + + if (!this.hasMoreTokens()) { + return this.onToken(EOF_TOKEN); + } + + var string = this._string.slice(this._cursor); + var lexRulesForState = lexRulesByConditions[this.getCurrentState()]; + + for (var i = 0; i < lexRulesForState.length; i++) { + var lexRuleIndex = lexRulesForState[i]; + var lexRule = lexRules[lexRuleIndex]; + + var matched = this._match(string, lexRule[0]); + + // Manual handling of EOF token (the end of string). Return it + // as `EOF` symbol. + if (string === '' && matched === '') { + this._cursor++; + } + + if (matched !== null) { + yytext = matched; + yytext.length; + var token = lexRule[1].call(this); + + if (!token) { + return this.getNextToken(); + } + + // If multiple tokens are returned, save them to return + // on next `getNextToken` call. + + if (Array.isArray(token)) { + var tokensToQueue = token.slice(1); + token = token[0]; + if (tokensToQueue.length > 0) { + var _tokensQueue; + + (_tokensQueue = this._tokensQueue).unshift.apply(_tokensQueue, _toConsumableArray$8(tokensToQueue)); + } + } + + return this.onToken(this._toToken(token, yytext)); + } + } + + if (this.isEOF()) { + this._cursor++; + return EOF_TOKEN; + } + + this.throwUnexpectedToken(string[0], this._currentLine, this._currentColumn); + }, + + + /** + * Throws default "Unexpected token" exception, showing the actual + * line from the source, pointing with the ^ marker to the bad token. + * In addition, shows `line:column` location. + */ + throwUnexpectedToken: function throwUnexpectedToken(symbol, line, column) { + var lineSource = this._string.split('\n')[line - 1]; + var lineData = ''; + + if (lineSource) { + var pad = ' '.repeat(column); + lineData = '\n\n' + lineSource + '\n' + pad + '^\n'; + } + + throw new SyntaxError(lineData + 'Unexpected token: "' + symbol + '" ' + ('at ' + line + ':' + column + '.')); + }, + getCursor: function getCursor() { + return this._cursor; + }, + getCurrentLine: function getCurrentLine() { + return this._currentLine; + }, + getCurrentColumn: function getCurrentColumn() { + return this._currentColumn; + }, + _captureLocation: function _captureLocation(matched) { + var nlRe = /\n/g; + + // Absolute offsets. + this._tokenStartOffset = this._cursor; + + // Line-based locations, start. + this._tokenStartLine = this._currentLine; + this._tokenStartColumn = this._tokenStartOffset - this._currentLineBeginOffset; + + // Extract `\n` in the matched token. + var nlMatch = void 0; + while ((nlMatch = nlRe.exec(matched)) !== null) { + this._currentLine++; + this._currentLineBeginOffset = this._tokenStartOffset + nlMatch.index + 1; + } + + this._tokenEndOffset = this._cursor + matched.length; + + // Line-based locations, end. + this._tokenEndLine = this._currentLine; + this._tokenEndColumn = this._currentColumn = this._tokenEndOffset - this._currentLineBeginOffset; + }, + _toToken: function _toToken(tokenType) { + var yytext = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + + return { + // Basic data. + type: tokenType, + value: yytext, + + // Location data. + startOffset: this._tokenStartOffset, + endOffset: this._tokenEndOffset, + startLine: this._tokenStartLine, + endLine: this._tokenEndLine, + startColumn: this._tokenStartColumn, + endColumn: this._tokenEndColumn + }; + }, + isEOF: function isEOF() { + return this._cursor === this._string.length; + }, + hasMoreTokens: function hasMoreTokens() { + return this._cursor <= this._string.length; + }, + _match: function _match(string, regexp) { + var matched = string.match(regexp); + if (matched) { + // Handle `\n` in the matched token to track line numbers. + this._captureLocation(matched[0]); + this._cursor += matched[0].length; + return matched[0]; + } + return null; + }, + + + /** + * Allows analyzing, and transforming token. Default implementation + * just passes the token through. + */ + onToken: function onToken(token) { + return token; + } +}; + +/** + * Expose tokenizer so it can be accessed in semantic actions. + */ +yy.lexer = tokenizer; +yy.tokenizer = tokenizer; + +/** + * Global parsing options. Some options can be shadowed per + * each `parse` call, if the optations are passed. + * + * Initalized to the `captureLocations` which is passed + * from the generator. Other options can be added at runtime. + */ +yy.options = { + captureLocations: true +}; + +/** + * Parsing module. + */ +var yyparse = { + /** + * Sets global parsing options. + */ + setOptions: function setOptions(options) { + yy.options = options; + return this; + }, + + + /** + * Returns parsing options. + */ + getOptions: function getOptions() { + return yy.options; + }, + + + /** + * Parses a string. + */ + parse: function parse(string, parseOptions) { + if (!tokenizer) { + throw new Error('Tokenizer instance wasn\'t specified.'); + } + + tokenizer.initString(string); + + /** + * If parse options are passed, override global parse options for + * this call, and later restore global options. + */ + var globalOptions = yy.options; + if (parseOptions) { + yy.options = Object.assign({}, yy.options, parseOptions); + } + + /** + * Allow callers to do setup work based on the + * parsing string, and passed options. + */ + yyparse.onParseBegin(string, tokenizer, yy.options); + + stack.length = 0; + stack.push(0); + + var token = tokenizer.getNextToken(); + var shiftedToken = null; + + do { + if (!token) { + // Restore options. + yy.options = globalOptions; + unexpectedEndOfInput(); + } + + var state = stack[stack.length - 1]; + var column = tokens[token.type]; + + if (!table[state].hasOwnProperty(column)) { + yy.options = globalOptions; + unexpectedToken(token); + } + + var entry = table[state][column]; + + // Shift action. + if (entry[0] === 's') { + var _loc2 = null; + + if (yy.options.captureLocations) { + _loc2 = { + startOffset: token.startOffset, + endOffset: token.endOffset, + startLine: token.startLine, + endLine: token.endLine, + startColumn: token.startColumn, + endColumn: token.endColumn + }; + } + + shiftedToken = this.onShift(token); + + stack.push({ symbol: tokens[shiftedToken.type], semanticValue: shiftedToken.value, loc: _loc2 }, Number(entry.slice(1))); + + token = tokenizer.getNextToken(); + } + + // Reduce action. + else if (entry[0] === 'r') { + var productionNumber = entry.slice(1); + var production = productions[productionNumber]; + var hasSemanticAction = typeof production[2] === 'function'; + var semanticValueArgs = hasSemanticAction ? [] : null; + + var locationArgs = hasSemanticAction && yy.options.captureLocations ? [] : null; + + if (production[1] !== 0) { + var rhsLength = production[1]; + while (rhsLength-- > 0) { + stack.pop(); + var stackEntry = stack.pop(); + + if (hasSemanticAction) { + semanticValueArgs.unshift(stackEntry.semanticValue); + + if (locationArgs) { + locationArgs.unshift(stackEntry.loc); + } + } + } + } + + var reduceStackEntry = { symbol: production[0] }; + + if (hasSemanticAction) { + yytext = shiftedToken ? shiftedToken.value : null; + shiftedToken ? shiftedToken.value.length : null; + + var semanticActionArgs = locationArgs !== null ? semanticValueArgs.concat(locationArgs) : semanticValueArgs; + + production[2].apply(production, _toConsumableArray$8(semanticActionArgs)); + + reduceStackEntry.semanticValue = __; + + if (locationArgs) { + reduceStackEntry.loc = __loc; + } + } + + var nextState = stack[stack.length - 1]; + var symbolToReduceWith = production[0]; + + stack.push(reduceStackEntry, table[nextState][symbolToReduceWith]); + } + + // Accept. + else if (entry === 'acc') { + stack.pop(); + var parsed = stack.pop(); + + if (stack.length !== 1 || stack[0] !== 0 || tokenizer.hasMoreTokens()) { + // Restore options. + yy.options = globalOptions; + unexpectedToken(token); + } + + if (parsed.hasOwnProperty('semanticValue')) { + yy.options = globalOptions; + yyparse.onParseEnd(parsed.semanticValue); + return parsed.semanticValue; + } + + yyparse.onParseEnd(); + + // Restore options. + yy.options = globalOptions; + return true; + } + } while (tokenizer.hasMoreTokens() || stack.length > 1); + }, + setTokenizer: function setTokenizer(customTokenizer) { + tokenizer = customTokenizer; + return yyparse; + }, + getTokenizer: function getTokenizer() { + return tokenizer; + }, + onParseBegin: function onParseBegin(string, tokenizer, options) {}, + onParseEnd: function onParseEnd(parsed) {}, + + + /** + * Allows analyzing, and transforming shifted token. Default implementation + * just passes the token through. + */ + onShift: function onShift(token) { + return token; + } +}; + +/** + * Tracks capturing groups. + */ +var capturingGroupsCount = 0; + +/** + * Tracks named groups. + */ +var namedGroups = {}; + +/** + * Parsing string. + */ +var parsingString = ''; + +yyparse.onParseBegin = function (string, lexer) { + parsingString = string; + capturingGroupsCount = 0; + namedGroups = {}; + + var lastSlash = string.lastIndexOf('/'); + var flags = string.slice(lastSlash); + + if (flags.includes('x') && flags.includes('u')) { + lexer.pushState('xu'); + } else { + if (flags.includes('x')) { + lexer.pushState('x'); + } + if (flags.includes('u')) { + lexer.pushState('u'); + } + } +}; + +/** + * On shifting `(` remember its number to used on reduce. + */ +yyparse.onShift = function (token) { + if (token.type === 'L_PAREN' || token.type === 'NAMED_CAPTURE_GROUP') { + token.value = new String(token.value); + token.value.groupNumber = ++capturingGroupsCount; + } + return token; +}; + +/** + * Extracts ranges from the range string. + */ +function getRange(text) { + var range = text.match(/\d+/g).map(Number); + + if (Number.isFinite(range[1]) && range[1] < range[0]) { + throw new SyntaxError('Numbers out of order in ' + text + ' quantifier'); + } + + return range; +} + +/** + * Checks class range + */ +function checkClassRange(from, to) { + if (from.kind === 'control' || to.kind === 'control' || !isNaN(from.codePoint) && !isNaN(to.codePoint) && from.codePoint > to.codePoint) { + throw new SyntaxError('Range ' + from.value + '-' + to.value + ' out of order in character class'); + } +} + +// ---------------------- Unicode property ------------------------------------------- + +var unicodeProperties = parserUnicodeProperties; + +/** + * Unicode property. + */ +function UnicodeProperty(matched, loc) { + var negative = matched[1] === 'P'; + var separatorIdx = matched.indexOf('='); + + var name = matched.slice(3, separatorIdx !== -1 ? separatorIdx : -1); + var value = void 0; + + // General_Category allows using only value as a shorthand. + var isShorthand = separatorIdx === -1 && unicodeProperties.isGeneralCategoryValue(name); + + // Binary propery name. + var isBinaryProperty = separatorIdx === -1 && unicodeProperties.isBinaryPropertyName(name); + + if (isShorthand) { + value = name; + name = 'General_Category'; + } else if (isBinaryProperty) { + value = name; + } else { + if (!unicodeProperties.isValidName(name)) { + throw new SyntaxError('Invalid unicode property name: ' + name + '.'); + } + + value = matched.slice(separatorIdx + 1, -1); + + if (!unicodeProperties.isValidValue(name, value)) { + throw new SyntaxError('Invalid ' + name + ' unicode property value: ' + value + '.'); + } + } + + return Node({ + type: 'UnicodeProperty', + name: name, + value: value, + negative: negative, + shorthand: isShorthand, + binary: isBinaryProperty, + canonicalName: unicodeProperties.getCanonicalName(name) || name, + canonicalValue: unicodeProperties.getCanonicalValue(value) || value + }, loc); +} + +// ---------------------------------------------------------------------------------- + + +/** + * Creates a character node. + */ +function Char(value, kind, loc) { + var symbol = void 0; + var codePoint = void 0; + + switch (kind) { + case 'decimal': + { + codePoint = Number(value.slice(1)); + symbol = String.fromCodePoint(codePoint); + break; + } + case 'oct': + { + codePoint = parseInt(value.slice(1), 8); + symbol = String.fromCodePoint(codePoint); + break; + } + case 'hex': + case 'unicode': + { + if (value.lastIndexOf('\\u') > 0) { + var _value$split$slice = value.split('\\u').slice(1), + _value$split$slice2 = _slicedToArray$2(_value$split$slice, 2), + lead = _value$split$slice2[0], + trail = _value$split$slice2[1]; + + lead = parseInt(lead, 16); + trail = parseInt(trail, 16); + codePoint = (lead - 0xd800) * 0x400 + (trail - 0xdc00) + 0x10000; + + symbol = String.fromCodePoint(codePoint); + } else { + var hex = value.slice(2).replace('{', ''); + codePoint = parseInt(hex, 16); + if (codePoint > 0x10ffff) { + throw new SyntaxError('Bad character escape sequence: ' + value); + } + + symbol = String.fromCodePoint(codePoint); + } + break; + } + case 'meta': + { + switch (value) { + case '\\t': + symbol = '\t'; + codePoint = symbol.codePointAt(0); + break; + case '\\n': + symbol = '\n'; + codePoint = symbol.codePointAt(0); + break; + case '\\r': + symbol = '\r'; + codePoint = symbol.codePointAt(0); + break; + case '\\v': + symbol = '\v'; + codePoint = symbol.codePointAt(0); + break; + case '\\f': + symbol = '\f'; + codePoint = symbol.codePointAt(0); + break; + case '\\b': + symbol = '\b'; + codePoint = symbol.codePointAt(0); + case '\\0': + symbol = '\0'; + codePoint = 0; + case '.': + symbol = '.'; + codePoint = NaN; + break; + default: + codePoint = NaN; + } + break; + } + case 'simple': + { + symbol = value; + codePoint = symbol.codePointAt(0); + break; + } + } + + return Node({ + type: 'Char', + value: value, + kind: kind, + symbol: symbol, + codePoint: codePoint + }, loc); +} + +/** + * Valid flags per current ECMAScript spec and + * stage 3+ proposals. + */ +var validFlags = 'gimsuxy'; + +/** + * Checks the flags are valid, and that + * we don't duplicate flags. + */ +function checkFlags(flags) { + var seen = new Set(); + + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = flags[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var flag = _step.value; + + if (seen.has(flag) || !validFlags.includes(flag)) { + throw new SyntaxError('Invalid flags: ' + flags); + } + seen.add(flag); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + return flags.split('').sort().join(''); +} + +/** + * Parses patterns like \1, \2, etc. either as a backreference + * to a group, or a deciaml char code. + */ +function GroupRefOrDecChar(text, textLoc) { + var reference = Number(text.slice(1)); + + if (reference > 0 && reference <= capturingGroupsCount) { + return Node({ + type: 'Backreference', + kind: 'number', + number: reference, + reference: reference + }, textLoc); + } + + return Char(text, 'decimal', textLoc); +} + +/** + * Unicode names. + */ +var uReStart = /^\\u[0-9a-fA-F]{4}/; // only matches start of string +var ucpReStart = /^\\u\{[0-9a-fA-F]{1,}\}/; // only matches start of string +var ucpReAnywhere = /\\u\{[0-9a-fA-F]{1,}\}/; // matches anywhere in string + +/** + * Validates Unicode group name. + */ +function validateUnicodeGroupName(name, state) { + var isUnicodeName = ucpReAnywhere.test(name); + var isUnicodeState = state === 'u' || state === 'xu' || state === 'u_class'; + + if (isUnicodeName && !isUnicodeState) { + throw new SyntaxError('invalid group Unicode name "' + name + '", use `u` flag.'); + } + + return name; +} + +// Matches the following production: https://tc39.es/ecma262/#prod-RegExpUnicodeEscapeSequence +// +// RegExpUnicodeEscapeSequence :: +// `u` LeadSurrogate `\u` TrailSurrogate # as 'leadSurrogate', 'trailSurrogate' +// `u` LeadSurrogate # as 'leadSurrogateOnly' +// `u` TrailSurrogate # as 'trailSurrogateOnly' +// `u` NonSurrogate # as 'nonSurrogate' +// `u` `{` CodePoint `}` # as 'codePoint' +// +// LeadSurrogate :: +// Hex4Digits but only if the SV of Hex4Digits is in the inclusive range 0xD800 to 0xDBFF # [dD][89aAbB][0-9a-fA-F]{2} +// +// TrailSurrogate :: +// Hex4Digits but only if the SV of Hex4Digits is in the inclusive range 0xDC00 to 0xDFFF # [dD][c-fC-F][0-9a-fA-F]{2} +// +// NonSurrogate :: +// Hex4Digits but only if the SV of Hex4Digits is not in the inclusive range 0xD800 to 0xDFFF # [0-9a-ce-fA-CE-F][0-9a-fA-F]{3}|[dD][0-7][0-9a-fA-F]{2} +// +// CodePoint :: +// HexDigits but only if MV of HexDigits ≤ 0x10FFFF # 0*(?:[0-9a-fA-F]{1,5}|10[0-9a-fA-F]{4}) +// +var uidRe = /\\u(?:([dD][89aAbB][0-9a-fA-F]{2})\\u([dD][c-fC-F][0-9a-fA-F]{2})|([dD][89aAbB][0-9a-fA-F]{2})|([dD][c-fC-F][0-9a-fA-F]{2})|([0-9a-ce-fA-CE-F][0-9a-fA-F]{3}|[dD][0-7][0-9a-fA-F]{2})|\{(0*(?:[0-9a-fA-F]{1,5}|10[0-9a-fA-F]{4}))\})/; + +function decodeUnicodeGroupName(name) { + return name.replace(new RegExp(uidRe, 'g'), function (_, leadSurrogate, trailSurrogate, leadSurrogateOnly, trailSurrogateOnly, nonSurrogate, codePoint) { + if (leadSurrogate) { + return String.fromCodePoint(parseInt(leadSurrogate, 16), parseInt(trailSurrogate, 16)); + } + if (leadSurrogateOnly) { + return String.fromCodePoint(parseInt(leadSurrogateOnly, 16)); + } + if (trailSurrogateOnly) { + // TODO: Per the spec: https://tc39.es/ecma262/#prod-RegExpUnicodeEscapeSequence + // > Each `\u` TrailSurrogate for which the choice of associated `u` LeadSurrogate is ambiguous shall be associated with the nearest possible `u` LeadSurrogate that would otherwise have no corresponding `\u` TrailSurrogate. + return String.fromCodePoint(parseInt(trailSurrogateOnly, 16)); + } + if (nonSurrogate) { + return String.fromCodePoint(parseInt(nonSurrogate, 16)); + } + if (codePoint) { + return String.fromCodePoint(parseInt(codePoint, 16)); + } + return _; + }); +} + +/** + * Extracts from `\k` pattern either a backreference + * to a named capturing group (if it presents), or parses it + * as a list of char: `\k`, `<`, `f`, etc. + */ +function NamedGroupRefOrChars(text, textLoc) { + var referenceRaw = text.slice(3, -1); + var reference = decodeUnicodeGroupName(referenceRaw); + + if (namedGroups.hasOwnProperty(reference)) { + return Node({ + type: 'Backreference', + kind: 'name', + number: namedGroups[reference], + reference: reference, + referenceRaw: referenceRaw + }, textLoc); + } + + // Else `\k` should be parsed as a list of `Char`s. + // This is really a 0.01% edge case, but we should handle it. + + var startOffset = null; + var startLine = null; + var endLine = null; + var startColumn = null; + + if (textLoc) { + startOffset = textLoc.startOffset; + startLine = textLoc.startLine; + endLine = textLoc.endLine; + startColumn = textLoc.startColumn; + } + + var charRe = /^[\w$<>]/; + var loc = void 0; + + var chars = [ + // Init to first \k, taking 2 symbols. + Char(text.slice(1, 2), 'simple', startOffset ? { + startLine: startLine, + endLine: endLine, + startColumn: startColumn, + startOffset: startOffset, + endOffset: startOffset += 2, + endColumn: startColumn += 2 + } : null)]; + + // For \k + chars[0].escaped = true; + + // Other symbols. + text = text.slice(2); + + while (text.length > 0) { + var matched = null; + + // Unicode, \u003B or \u{003B} + if ((matched = text.match(uReStart)) || (matched = text.match(ucpReStart))) { + if (startOffset) { + loc = { + startLine: startLine, + endLine: endLine, + startColumn: startColumn, + startOffset: startOffset, + endOffset: startOffset += matched[0].length, + endColumn: startColumn += matched[0].length + }; + } + chars.push(Char(matched[0], 'unicode', loc)); + text = text.slice(matched[0].length); + } + + // Simple char. + else if (matched = text.match(charRe)) { + if (startOffset) { + loc = { + startLine: startLine, + endLine: endLine, + startColumn: startColumn, + startOffset: startOffset, + endOffset: ++startOffset, + endColumn: ++startColumn + }; + } + chars.push(Char(matched[0], 'simple', loc)); + text = text.slice(1); + } + } + + return chars; +} + +/** + * Creates an AST node with a location. + */ +function Node(node, loc) { + if (yy.options.captureLocations) { + node.loc = { + source: parsingString.slice(loc.startOffset, loc.endOffset), + start: { + line: loc.startLine, + column: loc.startColumn, + offset: loc.startOffset + }, + end: { + line: loc.endLine, + column: loc.endColumn, + offset: loc.endOffset + } + }; + } + return node; +} + +/** + * Creates location node. + */ +function loc(start, end) { + if (!yy.options.captureLocations) { + return null; + } + + return { + startOffset: start.startOffset, + endOffset: end.endOffset, + startLine: start.startLine, + endLine: end.endLine, + startColumn: start.startColumn, + endColumn: end.endColumn + }; +} + +function unexpectedToken(token) { + if (token.type === EOF) { + unexpectedEndOfInput(); + } + + tokenizer.throwUnexpectedToken(token.value, token.startLine, token.startColumn); +} + +function unexpectedEndOfInput() { + parseError('Unexpected end of input.'); +} + +function parseError(message) { + throw new SyntaxError(message); +} + +var regexpTree$4 = yyparse; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var regexpTreeParser = regexpTree$4; + +/** + * Original parse function. + */ +var generatedParseFn = regexpTreeParser.parse.bind(regexpTreeParser); + +/** + * Parses a regular expression. + * + * Override original `regexpTreeParser.parse` to convert a value to a string, + * since in regexp-tree we may pass strings, and RegExp instance. + */ +regexpTreeParser.parse = function (regexp, options) { + return generatedParseFn('' + regexp, options); +}; + +// By default do not capture locations; callers may override. +regexpTreeParser.setOptions({ captureLocations: false }); + +var parser$4 = regexpTreeParser; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var _createClass$6 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck$6(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var DEFAULT_COLLECTION_PROP = 'expressions'; +var DEFAULT_SINGLE_PROP = 'expression'; + +/** + * NodePath class encapsulates a traversing node, + * its parent node, property name in the parent node, and + * an index (in case if a node is part of a collection). + * It also provides set of methods for AST manipulation. + */ + +var NodePath$3 = function () { + /** + * NodePath constructor. + * + * @param Object node - an AST node + * @param NodePath parentPath - a nullable parent path + * @param string property - property name of the node in the parent + * @param number index - index of the node in a collection. + */ + function NodePath(node) { + var parentPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + var property = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; + + _classCallCheck$6(this, NodePath); + + this.node = node; + this.parentPath = parentPath; + this.parent = parentPath ? parentPath.node : null; + this.property = property; + this.index = index; + } + + _createClass$6(NodePath, [{ + key: '_enforceProp', + value: function _enforceProp(property) { + if (!this.node.hasOwnProperty(property)) { + throw new Error('Node of type ' + this.node.type + ' doesn\'t have "' + property + '" collection.'); + } + } + + /** + * Sets a node into a children collection or the single child. + * By default child nodes are supposed to be under `expressions` property. + * An explicit property can be passed. + * + * @param Object node - a node to set into a collection or as single child + * @param number index - index at which to set + * @param string property - name of the collection or single property + */ + + }, { + key: 'setChild', + value: function setChild(node) { + var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + var property = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + + + var childPath = void 0; + if (index != null) { + if (!property) { + property = DEFAULT_COLLECTION_PROP; + } + this._enforceProp(property); + this.node[property][index] = node; + childPath = NodePath.getForNode(node, this, property, index); + } else { + if (!property) { + property = DEFAULT_SINGLE_PROP; + } + this._enforceProp(property); + this.node[property] = node; + childPath = NodePath.getForNode(node, this, property, null); + } + return childPath; + } + + /** + * Appends a node to a children collection. + * By default child nodes are supposed to be under `expressions` property. + * An explicit property can be passed. + * + * @param Object node - a node to set into a collection or as single child + * @param string property - name of the collection or single property + */ + + }, { + key: 'appendChild', + value: function appendChild(node) { + var property = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + + + if (!property) { + property = DEFAULT_COLLECTION_PROP; + } + this._enforceProp(property); + var end = this.node[property].length; + return this.setChild(node, end, property); + } + + /** + * Inserts a node into a collection. + * By default child nodes are supposed to be under `expressions` property. + * An explicit property can be passed. + * + * @param Object node - a node to insert into a collection + * @param number index - index at which to insert + * @param string property - name of the collection property + */ + + }, { + key: 'insertChildAt', + value: function insertChildAt(node, index) { + var property = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_COLLECTION_PROP; + + this._enforceProp(property); + + this.node[property].splice(index, 0, node); + + // If we inserted a node before the traversing index, + // we should increase the later. + if (index <= NodePath.getTraversingIndex()) { + NodePath.updateTraversingIndex(+1); + } + + this._rebuildIndex(this.node, property); + } + + /** + * Removes a node. + */ + + }, { + key: 'remove', + value: function remove() { + if (this.isRemoved()) { + return; + } + NodePath.registry.delete(this.node); + + this.node = null; + + if (!this.parent) { + return; + } + + // A node is in a collection. + if (this.index !== null) { + this.parent[this.property].splice(this.index, 1); + + // If we remove a node before the traversing index, + // we should increase the later. + if (this.index <= NodePath.getTraversingIndex()) { + NodePath.updateTraversingIndex(-1); + } + + // Rebuild index. + this._rebuildIndex(this.parent, this.property); + + this.index = null; + this.property = null; + + return; + } + + // A simple node. + delete this.parent[this.property]; + this.property = null; + } + + /** + * Rebuilds child nodes index (used on remove/insert). + */ + + }, { + key: '_rebuildIndex', + value: function _rebuildIndex(parent, property) { + var parentPath = NodePath.getForNode(parent); + + for (var i = 0; i < parent[property].length; i++) { + var path = NodePath.getForNode(parent[property][i], parentPath, property, i); + path.index = i; + } + } + + /** + * Whether the path was removed. + */ + + }, { + key: 'isRemoved', + value: function isRemoved() { + return this.node === null; + } + + /** + * Replaces a node with the passed one. + */ + + }, { + key: 'replace', + value: function replace(newNode) { + NodePath.registry.delete(this.node); + + this.node = newNode; + + if (!this.parent) { + return null; + } + + // A node is in a collection. + if (this.index !== null) { + this.parent[this.property][this.index] = newNode; + } + + // A simple node. + else { + this.parent[this.property] = newNode; + } + + // Rebuild the node path for the new node. + return NodePath.getForNode(newNode, this.parentPath, this.property, this.index); + } + + /** + * Updates a node inline. + */ + + }, { + key: 'update', + value: function update(nodeProps) { + Object.assign(this.node, nodeProps); + } + + /** + * Returns parent. + */ + + }, { + key: 'getParent', + value: function getParent() { + return this.parentPath; + } + + /** + * Returns nth child. + */ + + }, { + key: 'getChild', + value: function getChild() { + var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + + if (this.node.expressions) { + return NodePath.getForNode(this.node.expressions[n], this, DEFAULT_COLLECTION_PROP, n); + } else if (this.node.expression && n == 0) { + return NodePath.getForNode(this.node.expression, this, DEFAULT_SINGLE_PROP); + } + return null; + } + + /** + * Whether a path node is syntactically equal to the passed one. + * + * NOTE: we don't rely on `source` property from the `loc` data + * (which would be the fastest comparison), since it might be unsync + * after several modifications. We use here simple `JSON.stringify` + * excluding the `loc` data. + * + * @param NodePath other - path to compare to. + * @return boolean + */ + + }, { + key: 'hasEqualSource', + value: function hasEqualSource(path) { + return JSON.stringify(this.node, jsonSkipLoc) === JSON.stringify(path.node, jsonSkipLoc); + } + + /** + * JSON-encodes a node skipping location. + */ + + }, { + key: 'jsonEncode', + value: function jsonEncode() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + format = _ref.format, + useLoc = _ref.useLoc; + + return JSON.stringify(this.node, useLoc ? null : jsonSkipLoc, format); + } + + /** + * Returns previous sibling. + */ + + }, { + key: 'getPreviousSibling', + value: function getPreviousSibling() { + if (!this.parent || this.index == null) { + return null; + } + return NodePath.getForNode(this.parent[this.property][this.index - 1], NodePath.getForNode(this.parent), this.property, this.index - 1); + } + + /** + * Returns next sibling. + */ + + }, { + key: 'getNextSibling', + value: function getNextSibling() { + if (!this.parent || this.index == null) { + return null; + } + return NodePath.getForNode(this.parent[this.property][this.index + 1], NodePath.getForNode(this.parent), this.property, this.index + 1); + } + + /** + * Returns a NodePath instance for a node. + * + * The same NodePath can be reused in several places, e.g. + * a parent node passed for all its children. + */ + + }], [{ + key: 'getForNode', + value: function getForNode(node) { + var parentPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + var prop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : -1; + + if (!node) { + return null; + } + + if (!NodePath.registry.has(node)) { + NodePath.registry.set(node, new NodePath(node, parentPath, prop, index == -1 ? null : index)); + } + + var path = NodePath.registry.get(node); + + if (parentPath !== null) { + path.parentPath = parentPath; + path.parent = path.parentPath.node; + } + + if (prop !== null) { + path.property = prop; + } + + if (index >= 0) { + path.index = index; + } + + return path; + } + + /** + * Initializes the NodePath registry. The registry is a map from + * a node to its NodePath instance. + */ + + }, { + key: 'initRegistry', + value: function initRegistry() { + if (!NodePath.registry) { + NodePath.registry = new Map(); + } + NodePath.registry.clear(); + } + + /** + * Updates index of a currently traversing collection. + */ + + }, { + key: 'updateTraversingIndex', + value: function updateTraversingIndex(dx) { + return NodePath.traversingIndexStack[NodePath.traversingIndexStack.length - 1] += dx; + } + + /** + * Returns current traversing index. + */ + + }, { + key: 'getTraversingIndex', + value: function getTraversingIndex() { + return NodePath.traversingIndexStack[NodePath.traversingIndexStack.length - 1]; + } + }]); + + return NodePath; +}(); + +NodePath$3.initRegistry(); + +/** + * Index of a currently traversing collection is stored on top of the + * `NodePath.traversingIndexStack`. Remove/insert methods can adjust + * this index. + */ +NodePath$3.traversingIndexStack = []; + +// Helper function used to skip `loc` in JSON operations. +function jsonSkipLoc(prop, value) { + if (prop === 'loc') { + return undefined; + } + return value; +} + +var nodePath = NodePath$3; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var NodePath$2 = nodePath; + +/** + * Does an actual AST traversal, using visitor pattern, + * and calling set of callbacks. + * + * Based on https://github.com/olov/ast-traverse + * + * Expects AST in Mozilla Parser API: nodes which are supposed to be + * handled should have `type` property. + * + * @param Object root - a root node to start traversal from. + * + * @param Object options - an object with set of callbacks: + * + * - `pre(node, parent, prop, index)` - a hook called on node enter + * - `post`(node, parent, prop, index) - a hook called on node exit + * - `skipProperty(prop)` - a predicated whether a property should be skipped + */ +function astTraverse(root) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var pre = options.pre; + var post = options.post; + var skipProperty = options.skipProperty; + + function visit(node, parent, prop, idx) { + if (!node || typeof node.type !== 'string') { + return; + } + + var res = undefined; + if (pre) { + res = pre(node, parent, prop, idx); + } + + if (res !== false) { + + // A node can be replaced during traversal, so we have to + // recalculate it from the parent, to avoid traversing "dead" nodes. + if (parent && parent[prop]) { + if (!isNaN(idx)) { + node = parent[prop][idx]; + } else { + node = parent[prop]; + } + } + + for (var _prop in node) { + if (node.hasOwnProperty(_prop)) { + if (skipProperty ? skipProperty(_prop, node) : _prop[0] === '$') { + continue; + } + + var child = node[_prop]; + + // Collection node. + // + // NOTE: a node (or several nodes) can be removed or inserted + // during traversal. + // + // Current traversing index is stored on top of the + // `NodePath.traversingIndexStack`. The stack is used to support + // recursive nature of the traversal. + // + // In this case `NodePath.traversingIndex` (which we use here) is + // updated in the NodePath remove/insert methods. + // + if (Array.isArray(child)) { + var index = 0; + NodePath$2.traversingIndexStack.push(index); + while (index < child.length) { + visit(child[index], node, _prop, index); + index = NodePath$2.updateTraversingIndex(+1); + } + NodePath$2.traversingIndexStack.pop(); + } + + // Simple node. + else { + visit(child, node, _prop); + } + } + } + } + + if (post) { + post(node, parent, prop, idx); + } + } + + visit(root, null); +} + +var traverse$1 = { + /** + * Traverses an AST. + * + * @param Object ast - an AST node + * + * @param Object | Array handlers: + * + * an object (or an array of objects) + * + * Each such object contains a handler function per node. + * In case of an array of handlers, they are applied in order. + * A handler may return a transformed node (or a different type). + * + * The per-node function may instead be an object with functions pre and post. + * pre is called before visiting the node, post after. + * If a handler is a function, it is treated as the pre function, with an empty post. + * + * @param Object options: + * + * a config object, specifying traversal options: + * + * `asNodes`: boolean - whether handlers should receives raw AST nodes + * (false by default), instead of a `NodePath` wrapper. Note, by default + * `NodePath` wrapper provides a set of convenient method to manipulate + * a traversing AST, and also has access to all parents list. A raw + * nodes traversal should be used in rare cases, when no `NodePath` + * features are needed. + * + * Special hooks: + * + * - `shouldRun(ast)` - a predicate determining whether the handler + * should be applied. + * + * NOTE: Multiple handlers are used as an optimization of applying all of + * them in one AST traversal pass. + */ + traverse: function traverse(ast, handlers) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { asNodes: false }; + + + if (!Array.isArray(handlers)) { + handlers = [handlers]; + } + + // Filter out handlers by result of `shouldRun`, if the method is present. + handlers = handlers.filter(function (handler) { + if (typeof handler.shouldRun !== 'function') { + return true; + } + return handler.shouldRun(ast); + }); + + NodePath$2.initRegistry(); + + // Allow handlers to initializer themselves. + handlers.forEach(function (handler) { + if (typeof handler.init === 'function') { + handler.init(ast); + } + }); + + function getPathFor(node, parent, prop, index) { + var parentPath = NodePath$2.getForNode(parent); + var nodePath = NodePath$2.getForNode(node, parentPath, prop, index); + + return nodePath; + } + + // Handle actual nodes. + astTraverse(ast, { + /** + * Handler on node enter. + */ + pre: function pre(node, parent, prop, index) { + var nodePath = void 0; + if (!options.asNodes) { + nodePath = getPathFor(node, parent, prop, index); + } + + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = handlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var handler = _step.value; + + // "Catch-all" `*` handler. + if (typeof handler['*'] === 'function') { + if (nodePath) { + // A path/node can be removed by some previous handler. + if (!nodePath.isRemoved()) { + var handlerResult = handler['*'](nodePath); + // Explicitly stop traversal. + if (handlerResult === false) { + return false; + } + } + } else { + handler['*'](node, parent, prop, index); + } + } + + // Per-node handler. + var handlerFuncPre = void 0; + if (typeof handler[node.type] === 'function') { + handlerFuncPre = handler[node.type]; + } else if (typeof handler[node.type] === 'object' && typeof handler[node.type].pre === 'function') { + handlerFuncPre = handler[node.type].pre; + } + + if (handlerFuncPre) { + if (nodePath) { + // A path/node can be removed by some previous handler. + if (!nodePath.isRemoved()) { + var _handlerResult = handlerFuncPre.call(handler, nodePath); + // Explicitly stop traversal. + if (_handlerResult === false) { + return false; + } + } + } else { + handlerFuncPre.call(handler, node, parent, prop, index); + } + } + } // Loop over handlers + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + }, + // pre func + + /** + * Handler on node exit. + */ + post: function post(node, parent, prop, index) { + if (!node) { + return; + } + + var nodePath = void 0; + if (!options.asNodes) { + nodePath = getPathFor(node, parent, prop, index); + } + + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = handlers[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var handler = _step2.value; + + // Per-node handler. + var handlerFuncPost = void 0; + if (typeof handler[node.type] === 'object' && typeof handler[node.type].post === 'function') { + handlerFuncPost = handler[node.type].post; + } + + if (handlerFuncPost) { + if (nodePath) { + // A path/node can be removed by some previous handler. + if (!nodePath.isRemoved()) { + var handlerResult = handlerFuncPost.call(handler, nodePath); + // Explicitly stop traversal. + if (handlerResult === false) { + return false; + } + } + } else { + handlerFuncPost.call(handler, node, parent, prop, index); + } + } + } // Loop over handlers + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + }, + // post func + + /** + * Skip locations by default. + */ + skipProperty: function skipProperty(prop) { + return prop === 'loc'; + } + }); + } +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var _createClass$5 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck$5(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var generator$2 = generator_1; +var parser$3 = parser$4; +var traverse = traverse$1; + +/** + * Transform result. + */ + +var TransformResult = function () { + /** + * Initializes a transform result for an AST. + * + * @param Object ast - an AST node + * @param mixed extra - any extra data a transform may return + */ + function TransformResult(ast) { + var extra = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + + _classCallCheck$5(this, TransformResult); + + this._ast = ast; + this._source = null; + this._string = null; + this._regexp = null; + this._extra = extra; + } + + _createClass$5(TransformResult, [{ + key: 'getAST', + value: function getAST() { + return this._ast; + } + }, { + key: 'setExtra', + value: function setExtra(extra) { + this._extra = extra; + } + }, { + key: 'getExtra', + value: function getExtra() { + return this._extra; + } + }, { + key: 'toRegExp', + value: function toRegExp() { + if (!this._regexp) { + this._regexp = new RegExp(this.getSource(), this._ast.flags); + } + return this._regexp; + } + }, { + key: 'getSource', + value: function getSource() { + if (!this._source) { + this._source = generator$2.generate(this._ast.body); + } + return this._source; + } + }, { + key: 'getFlags', + value: function getFlags() { + return this._ast.flags; + } + }, { + key: 'toString', + value: function toString() { + if (!this._string) { + this._string = generator$2.generate(this._ast); + } + return this._string; + } + }]); + + return TransformResult; +}(); + +var transform$1 = { + /** + * Expose `TransformResult`. + */ + TransformResult: TransformResult, + + /** + * Transforms a regular expression applying a set of + * transformation handlers. + * + * @param string | AST | RegExp: + * + * a regular expression in different representations: a string, + * a RegExp object, or an AST. + * + * @param Object | Array: + * + * a handler (or a list of handlers) from `traverse` API. + * + * @return TransformResult instance. + * + * Example: + * + * transform(/[a-z]/i, { + * onChar(path) { + * const {node} = path; + * + * if (...) { + * path.remove(); + * } + * } + * }); + */ + transform: function transform(regexp, handlers) { + var ast = regexp; + + if (regexp instanceof RegExp) { + regexp = '' + regexp; + } + + if (typeof regexp === 'string') { + ast = parser$3.parse(regexp, { + captureLocations: true + }); + } + + traverse.traverse(ast, handlers); + + return new TransformResult(ast); + } +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var compatTransforms = transforms$1; +var _transform$1 = transform$1; + +var compatTranspiler$1 = { + /** + * Translates a regexp in new syntax to equivalent regexp in old syntax. + * + * @param string|RegExp|AST - regexp + * @param Array transformsWhitelist - names of the transforms to apply + */ + transform: function transform(regexp) { + var transformsWhitelist = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + + var transformToApply = transformsWhitelist.length > 0 ? transformsWhitelist : Object.keys(compatTransforms); + + var result = void 0; + + // Collect extra data per transform. + var extra = {}; + + transformToApply.forEach(function (transformName) { + + if (!compatTransforms.hasOwnProperty(transformName)) { + throw new Error('Unknown compat-transform: ' + transformName + '. ' + 'Available transforms are: ' + Object.keys(compatTransforms).join(', ')); + } + + var handler = compatTransforms[transformName]; + + result = _transform$1.transform(regexp, handler); + regexp = result.getAST(); + + // Collect `extra` transform result. + if (typeof handler.getExtra === 'function') { + extra[transformName] = handler.getExtra(); + } + }); + + // Set the final extras for all transforms. + result.setExtra(extra); + + return result; + } +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * Performs a deep copy of an simple object. + * Only handles scalar values, arrays and objects. + * + * @param obj Object + */ + +var clone$1 = function clone(obj) { + if (obj === null || typeof obj !== 'object') { + return obj; + } + var res = void 0; + if (Array.isArray(obj)) { + res = []; + } else { + res = {}; + } + for (var i in obj) { + res[i] = clone(obj[i]); + } + return res; +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * A regexp-tree plugin to transform surrogate pairs into single unicode code point + * + * \ud83d\ude80 -> \u{1f680} + */ + +var charSurrogatePairToSingleUnicodeTransform = { + shouldRun: function shouldRun(ast) { + return ast.flags.includes('u'); + }, + Char: function Char(path) { + var node = path.node; + + if (node.kind !== 'unicode' || !node.isSurrogatePair || isNaN(node.codePoint)) { + return; + } + node.value = '\\u{' + node.codePoint.toString(16) + '}'; + delete node.isSurrogatePair; + } +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var UPPER_A_CP$1 = 'A'.codePointAt(0); +var UPPER_Z_CP$1 = 'Z'.codePointAt(0); +var LOWER_A_CP = 'a'.codePointAt(0); +var LOWER_Z_CP = 'z'.codePointAt(0); +var DIGIT_0_CP = '0'.codePointAt(0); +var DIGIT_9_CP = '9'.codePointAt(0); + +/** + * A regexp-tree plugin to transform coded chars into simple chars. + * + * \u0061 -> a + */ +var charCodeToSimpleCharTransform = { + Char: function Char(path) { + var node = path.node, + parent = path.parent; + + if (isNaN(node.codePoint) || node.kind === 'simple') { + return; + } + + if (parent.type === 'ClassRange') { + if (!isSimpleRange(parent)) { + return; + } + } + + if (!isPrintableASCIIChar(node.codePoint)) { + return; + } + + var symbol = String.fromCodePoint(node.codePoint); + var newChar = { + type: 'Char', + kind: 'simple', + value: symbol, + symbol: symbol, + codePoint: node.codePoint + }; + if (needsEscape(symbol, parent.type)) { + newChar.escaped = true; + } + path.replace(newChar); + } +}; + +/** + * Checks if a range is included either in 0-9, a-z or A-Z + * @param classRange + * @returns {boolean} + */ +function isSimpleRange(classRange) { + var from = classRange.from, + to = classRange.to; + + return from.codePoint >= DIGIT_0_CP && from.codePoint <= DIGIT_9_CP && to.codePoint >= DIGIT_0_CP && to.codePoint <= DIGIT_9_CP || from.codePoint >= UPPER_A_CP$1 && from.codePoint <= UPPER_Z_CP$1 && to.codePoint >= UPPER_A_CP$1 && to.codePoint <= UPPER_Z_CP$1 || from.codePoint >= LOWER_A_CP && from.codePoint <= LOWER_Z_CP && to.codePoint >= LOWER_A_CP && to.codePoint <= LOWER_Z_CP; +} + +/** + * Checks if a code point in the range of printable ASCII chars + * (DEL char excluded) + * @param codePoint + * @returns {boolean} + */ +function isPrintableASCIIChar(codePoint) { + return codePoint >= 0x20 && codePoint <= 0x7e; +} + +function needsEscape(symbol, parentType) { + if (parentType === 'ClassRange' || parentType === 'CharacterClass') { + return (/[\]\\^-]/.test(symbol) + ); + } + + return (/[*[()+?^$./\\|{}]/.test(symbol) + ); +} + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var UPPER_A_CP = 'A'.codePointAt(0); +var UPPER_Z_CP = 'Z'.codePointAt(0); +/** + * Transforms case-insensitive regexp to lowercase + * + * /AaBbÏ/i -> /aabbï/i + */ +var charCaseInsensitiveLowercaseTransform = { + _AZClassRanges: null, + _hasUFlag: false, + init: function init(ast) { + this._AZClassRanges = new Set(); + this._hasUFlag = ast.flags.includes('u'); + }, + shouldRun: function shouldRun(ast) { + return ast.flags.includes('i'); + }, + Char: function Char(path) { + var node = path.node, + parent = path.parent; + + if (isNaN(node.codePoint)) { + return; + } + + // Engine support for case-insensitive matching without the u flag + // for characters above \u1000 does not seem reliable. + if (!this._hasUFlag && node.codePoint >= 0x1000) { + return; + } + + if (parent.type === 'ClassRange') { + // The only class ranges we handle must be inside A-Z. + // After the `from` char is processed, the isAZClassRange test + // will be false, so we use a Set to keep track of parents and + // process the `to` char. + if (!this._AZClassRanges.has(parent) && !isAZClassRange(parent)) { + return; + } + this._AZClassRanges.add(parent); + } + + var lower = node.symbol.toLowerCase(); + if (lower !== node.symbol) { + node.value = displaySymbolAsValue(lower, node); + node.symbol = lower; + node.codePoint = lower.codePointAt(0); + } + } +}; + +function isAZClassRange(classRange) { + var from = classRange.from, + to = classRange.to; + // A-Z + + return from.codePoint >= UPPER_A_CP && from.codePoint <= UPPER_Z_CP && to.codePoint >= UPPER_A_CP && to.codePoint <= UPPER_Z_CP; +} + +function displaySymbolAsValue(symbol, node) { + var codePoint = symbol.codePointAt(0); + if (node.kind === 'decimal') { + return '\\' + codePoint; + } + if (node.kind === 'oct') { + return '\\0' + codePoint.toString(8); + } + if (node.kind === 'hex') { + return '\\x' + codePoint.toString(16); + } + if (node.kind === 'unicode') { + if (node.isSurrogatePair) { + var _getSurrogatePairFrom = getSurrogatePairFromCodePoint(codePoint), + lead = _getSurrogatePairFrom.lead, + trail = _getSurrogatePairFrom.trail; + + return '\\u' + '0'.repeat(4 - lead.length) + lead + '\\u' + '0'.repeat(4 - trail.length) + trail; + } else if (node.value.includes('{')) { + return '\\u{' + codePoint.toString(16) + '}'; + } else { + var code = codePoint.toString(16); + return '\\u' + '0'.repeat(4 - code.length) + code; + } + } + // simple + return symbol; +} + +/** + * Converts a code point to a surrogate pair. + * Conversion algorithm is taken from The Unicode Standard 3.0 Section 3.7 + * (https://www.unicode.org/versions/Unicode3.0.0/ch03.pdf) + * @param {number} codePoint - Between 0x10000 and 0x10ffff + * @returns {{lead: string, trail: string}} + */ +function getSurrogatePairFromCodePoint(codePoint) { + var lead = Math.floor((codePoint - 0x10000) / 0x400) + 0xd800; + var trail = (codePoint - 0x10000) % 0x400 + 0xdc00; + return { + lead: lead.toString(16), + trail: trail.toString(16) + }; +} + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * A regexp-tree plugin to remove duplicates from character classes. + */ + +var charClassRemoveDuplicatesTransform = { + CharacterClass: function CharacterClass(path) { + var node = path.node; + + var sources = {}; + + for (var i = 0; i < node.expressions.length; i++) { + var childPath = path.getChild(i); + var source = childPath.jsonEncode(); + + if (sources.hasOwnProperty(source)) { + childPath.remove(); + + // Since we remove the current node. + // TODO: make it simpler for users with a method. + i--; + } + + sources[source] = true; + } + } +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * Flattens a nested disjunction node to a list. + * + * /a|b|c|d/ + * + * {{{a, b}, c}, d} -> [a, b, c, d] + */ + +function _toConsumableArray$7(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +function disjunctionToList$1(node) { + if (node.type !== 'Disjunction') { + throw new TypeError('Expected "Disjunction" node, got "' + node.type + '"'); + } + + var list = []; + + if (node.left && node.left.type === 'Disjunction') { + list.push.apply(list, _toConsumableArray$7(disjunctionToList$1(node.left)).concat([node.right])); + } else { + list.push(node.left, node.right); + } + + return list; +} + +/** + * Builds a nested disjunction node from a list. + * + * /a|b|c|d/ + * + * [a, b, c, d] -> {{{a, b}, c}, d} + */ +function listToDisjunction$1(list) { + return list.reduce(function (left, right) { + return { + type: 'Disjunction', + left: left, + right: right + }; + }); +} + +/** + * Increases a quantifier by one. + * Does not change greediness. + * * -> + + * + -> {2,} + * ? -> {1,2} + * {2} -> {3} + * {2,} -> {3,} + * {2,3} -> {3,4} + */ +function increaseQuantifierByOne$2(quantifier) { + if (quantifier.kind === '*') { + + quantifier.kind = '+'; + } else if (quantifier.kind === '+') { + + quantifier.kind = 'Range'; + quantifier.from = 2; + delete quantifier.to; + } else if (quantifier.kind === '?') { + + quantifier.kind = 'Range'; + quantifier.from = 1; + quantifier.to = 2; + } else if (quantifier.kind === 'Range') { + + quantifier.from += 1; + if (quantifier.to) { + quantifier.to += 1; + } + } +} + +var utils = { + disjunctionToList: disjunctionToList$1, + listToDisjunction: listToDisjunction$1, + increaseQuantifierByOne: increaseQuantifierByOne$2 +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var _require$8 = utils, + increaseQuantifierByOne$1 = _require$8.increaseQuantifierByOne; + +/** + * A regexp-tree plugin to merge quantifiers + * + * a+a+ -> a{2,} + * a{2}a{3} -> a{5} + * a{1,2}a{2,3} -> a{3,5} + */ + + +var quantifiersMergeTransform = { + Repetition: function Repetition(path) { + var node = path.node, + parent = path.parent; + + + if (parent.type !== 'Alternative' || !path.index) { + return; + } + + var previousSibling = path.getPreviousSibling(); + + if (!previousSibling) { + return; + } + + if (previousSibling.node.type === 'Repetition') { + if (!previousSibling.getChild().hasEqualSource(path.getChild())) { + return; + } + + var _extractFromTo = extractFromTo(previousSibling.node.quantifier), + previousSiblingFrom = _extractFromTo.from, + previousSiblingTo = _extractFromTo.to; + + var _extractFromTo2 = extractFromTo(node.quantifier), + nodeFrom = _extractFromTo2.from, + nodeTo = _extractFromTo2.to; + + // It's does not seem reliable to merge quantifiers with different greediness + // when none of both is a greedy open range + + + if (previousSibling.node.quantifier.greedy !== node.quantifier.greedy && !isGreedyOpenRange(previousSibling.node.quantifier) && !isGreedyOpenRange(node.quantifier)) { + return; + } + + // a*a* -> a* + // a*a+ -> a+ + // a+a+ -> a{2,} + // a{2}a{4} -> a{6} + // a{1,2}a{2,3} -> a{3,5} + // a{1,}a{2,} -> a{3,} + // a+a{2,} -> a{3,} + + // a??a{2,} -> a{2,} + // a*?a{2,} -> a{2,} + // a+?a{2,} -> a{3,} + + node.quantifier.kind = 'Range'; + node.quantifier.from = previousSiblingFrom + nodeFrom; + if (previousSiblingTo && nodeTo) { + node.quantifier.to = previousSiblingTo + nodeTo; + } else { + delete node.quantifier.to; + } + if (isGreedyOpenRange(previousSibling.node.quantifier) || isGreedyOpenRange(node.quantifier)) { + node.quantifier.greedy = true; + } + + previousSibling.remove(); + } else { + if (!previousSibling.hasEqualSource(path.getChild())) { + return; + } + + increaseQuantifierByOne$1(node.quantifier); + previousSibling.remove(); + } + } +}; + +function isGreedyOpenRange(quantifier) { + return quantifier.greedy && (quantifier.kind === '+' || quantifier.kind === '*' || quantifier.kind === 'Range' && !quantifier.to); +} + +function extractFromTo(quantifier) { + var from = void 0, + to = void 0; + if (quantifier.kind === '*') { + from = 0; + } else if (quantifier.kind === '+') { + from = 1; + } else if (quantifier.kind === '?') { + from = 0; + to = 1; + } else { + from = quantifier.from; + if (quantifier.to) { + to = quantifier.to; + } + } + return { from: from, to: to }; +} + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * A regexp-tree plugin to replace different range-based quantifiers + * with their symbol equivalents. + * + * a{0,} -> a* + * a{1,} -> a+ + * a{1} -> a + * + * NOTE: the following is automatically handled in the generator: + * + * a{3,3} -> a{3} + */ + +var quantifierRangeToSymbolTransform = { + Quantifier: function Quantifier(path) { + var node = path.node; + + + if (node.kind !== 'Range') { + return; + } + + // a{0,} -> a* + rewriteOpenZero(path); + + // a{1,} -> a+ + rewriteOpenOne(path); + + // a{1} -> a + rewriteExactOne(path); + } +}; + +function rewriteOpenZero(path) { + var node = path.node; + + + if (node.from !== 0 || node.to) { + return; + } + + node.kind = '*'; + delete node.from; +} + +function rewriteOpenOne(path) { + var node = path.node; + + + if (node.from !== 1 || node.to) { + return; + } + + node.kind = '+'; + delete node.from; +} + +function rewriteExactOne(path) { + var node = path.node; + + + if (node.from !== 1 || node.to !== 1) { + return; + } + + path.parentPath.replace(path.parentPath.node.expression); +} + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * A regexp-tree plugin to simplify character classes + * spanning only one or two chars. + * + * [a-a] -> [a] + * [a-b] -> [ab] + */ + +var charClassClassrangesToCharsTransform = { + ClassRange: function ClassRange(path) { + var node = path.node; + + + if (node.from.codePoint === node.to.codePoint) { + + path.replace(node.from); + } else if (node.from.codePoint === node.to.codePoint - 1) { + + path.getParent().insertChildAt(node.to, path.index + 1); + path.replace(node.from); + } + } +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * A regexp-tree plugin to replace standard character classes with + * their meta symbols equivalents. + */ + +function _toConsumableArray$6(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var charClassToMetaTransform = { + _hasIFlag: false, + _hasUFlag: false, + init: function init(ast) { + this._hasIFlag = ast.flags.includes('i'); + this._hasUFlag = ast.flags.includes('u'); + }, + CharacterClass: function CharacterClass(path) { + // [0-9] -> \d + rewriteNumberRanges(path); + + // [a-zA-Z_0-9] -> \w + rewriteWordRanges(path, this._hasIFlag, this._hasUFlag); + + // [ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] -> \s + rewriteWhitespaceRanges(path); + } +}; + +/** + * Rewrites number ranges: [0-9] -> \d + */ +function rewriteNumberRanges(path) { + var node = path.node; + + + node.expressions.forEach(function (expression, i) { + if (isFullNumberRange(expression)) { + path.getChild(i).replace({ + type: 'Char', + value: '\\d', + kind: 'meta' + }); + } + }); +} + +/** + * Rewrites word ranges: [a-zA-Z_0-9] -> \w + * Thus, the ranges may go in any order, and other symbols/ranges + * are kept untouched, e.g. [a-z_\dA-Z$] -> [\w$] + */ +function rewriteWordRanges(path, hasIFlag, hasUFlag) { + var node = path.node; + + + var numberPath = null; + var lowerCasePath = null; + var upperCasePath = null; + var underscorePath = null; + var u017fPath = null; + var u212aPath = null; + + node.expressions.forEach(function (expression, i) { + // \d + if (isMetaChar(expression, '\\d')) { + numberPath = path.getChild(i); + } + + // a-z + else if (isLowerCaseRange(expression)) { + lowerCasePath = path.getChild(i); + } + + // A-Z + else if (isUpperCaseRange(expression)) { + upperCasePath = path.getChild(i); + } + + // _ + else if (isUnderscore(expression)) { + underscorePath = path.getChild(i); + } else if (hasIFlag && hasUFlag && isCodePoint(expression, 0x017f)) { + u017fPath = path.getChild(i); + } else if (hasIFlag && hasUFlag && isCodePoint(expression, 0x212a)) { + u212aPath = path.getChild(i); + } + }); + + // If we found the whole pattern, replace it. + if (numberPath && (lowerCasePath && upperCasePath || hasIFlag && (lowerCasePath || upperCasePath)) && underscorePath && (!hasUFlag || !hasIFlag || u017fPath && u212aPath)) { + // Put \w in place of \d. + numberPath.replace({ + type: 'Char', + value: '\\w', + kind: 'meta' + }); + + // Other paths are removed. + if (lowerCasePath) { + lowerCasePath.remove(); + } + if (upperCasePath) { + upperCasePath.remove(); + } + underscorePath.remove(); + if (u017fPath) { + u017fPath.remove(); + } + if (u212aPath) { + u212aPath.remove(); + } + } +} + +/** + * Rewrites whitespace ranges: [ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] -> \s. + */ +var whitespaceRangeTests = [function (node) { + return isChar(node, ' '); +}].concat(_toConsumableArray$6(['\\f', '\\n', '\\r', '\\t', '\\v'].map(function (char) { + return function (node) { + return isMetaChar(node, char); + }; +})), _toConsumableArray$6([0x00a0, 0x1680, 0x2028, 0x2029, 0x202f, 0x205f, 0x3000, 0xfeff].map(function (codePoint) { + return function (node) { + return isCodePoint(node, codePoint); + }; +})), [function (node) { + return node.type === 'ClassRange' && isCodePoint(node.from, 0x2000) && isCodePoint(node.to, 0x200a); +}]); + +function rewriteWhitespaceRanges(path) { + var node = path.node; + + + if (node.expressions.length < whitespaceRangeTests.length || !whitespaceRangeTests.every(function (test) { + return node.expressions.some(function (expression) { + return test(expression); + }); + })) { + return; + } + + // If we found the whole pattern, replace it. + + // Put \s in place of \n. + var nNode = node.expressions.find(function (expression) { + return isMetaChar(expression, '\\n'); + }); + nNode.value = '\\s'; + nNode.symbol = undefined; + nNode.codePoint = NaN; + + // Other paths are removed. + node.expressions.map(function (expression, i) { + return whitespaceRangeTests.some(function (test) { + return test(expression); + }) ? path.getChild(i) : undefined; + }).filter(Boolean).forEach(function (path) { + return path.remove(); + }); +} + +function isFullNumberRange(node) { + return node.type === 'ClassRange' && node.from.value === '0' && node.to.value === '9'; +} + +function isChar(node, value) { + var kind = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'simple'; + + return node.type === 'Char' && node.value === value && node.kind === kind; +} + +function isMetaChar(node, value) { + return isChar(node, value, 'meta'); +} + +function isLowerCaseRange(node) { + return node.type === 'ClassRange' && node.from.value === 'a' && node.to.value === 'z'; +} + +function isUpperCaseRange(node) { + return node.type === 'ClassRange' && node.from.value === 'A' && node.to.value === 'Z'; +} + +function isUnderscore(node) { + return node.type === 'Char' && node.value === '_' && node.kind === 'simple'; +} + +function isCodePoint(node, codePoint) { + return node.type === 'Char' && node.kind === 'unicode' && node.codePoint === codePoint; +} + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * A regexp-tree plugin to replace single char character classes with + * just that character. + * + * [\d] -> \d, [^\w] -> \W + */ + +var charClassToSingleCharTransform = { + CharacterClass: function CharacterClass(path) { + var node = path.node; + + + if (node.expressions.length !== 1 || !hasAppropriateSiblings$1(path) || !isAppropriateChar(node.expressions[0])) { + return; + } + + var _node$expressions$ = node.expressions[0], + value = _node$expressions$.value, + kind = _node$expressions$.kind, + escaped = _node$expressions$.escaped; + + + if (node.negative) { + // For negative can extract only meta chars like [^\w] -> \W + // cannot do for [^a] -> a (wrong). + if (!isMeta$1(value)) { + return; + } + + value = getInverseMeta(value); + } + + path.replace({ + type: 'Char', + value: value, + kind: kind, + escaped: escaped || shouldEscape(value) + }); + } +}; + +function isAppropriateChar(node) { + return node.type === 'Char' && + // We don't extract [\b] (backspace) since \b has different + // semantics (word boundary). + node.value !== '\\b'; +} + +function isMeta$1(value) { + return (/^\\[dwsDWS]$/.test(value) + ); +} + +function getInverseMeta(value) { + return (/[dws]/.test(value) ? value.toUpperCase() : value.toLowerCase() + ); +} + +function hasAppropriateSiblings$1(path) { + var parent = path.parent, + index = path.index; + + + if (parent.type !== 'Alternative') { + return true; + } + + var previousNode = parent.expressions[index - 1]; + if (previousNode == null) { + return true; + } + + // Don't optimized \1[0] to \10 + if (previousNode.type === 'Backreference' && previousNode.kind === 'number') { + return false; + } + + // Don't optimized \2[0] to \20 + if (previousNode.type === 'Char' && previousNode.kind === 'decimal') { + return false; + } + + return true; +} + +// Note: \{ and \} are always preserved to avoid `a[{]2[}]` turning +// into `a{2}`. +function shouldEscape(value) { + return (/[*[()+?$./{}|]/.test(value) + ); +} + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * A regexp-tree plugin to remove unnecessary escape. + * + * \e -> e + * + * [\(] -> [(] + */ + +var charEscapeUnescapeTransform = { + _hasXFlag: false, + init: function init(ast) { + this._hasXFlag = ast.flags.includes('x'); + }, + Char: function Char(path) { + var node = path.node; + + + if (!node.escaped) { + return; + } + + if (shouldUnescape(path, this._hasXFlag)) { + delete node.escaped; + } + } +}; + +function shouldUnescape(path, hasXFlag) { + var value = path.node.value, + index = path.index, + parent = path.parent; + + // In char class (, etc are allowed. + + if (parent.type !== 'CharacterClass' && parent.type !== 'ClassRange') { + return !preservesEscape(value, index, parent, hasXFlag); + } + + return !preservesInCharClass(value, index, parent); +} + +/** + * \], \\, \^, \- + */ +function preservesInCharClass(value, index, parent) { + if (value === '^') { + // Avoid [\^a] turning into [^a] + return index === 0 && !parent.negative; + } + if (value === '-') { + // Avoid [a\-z] turning into [a-z] + return true; + } + return (/[\]\\]/.test(value) + ); +} + +function preservesEscape(value, index, parent, hasXFlag) { + if (value === '{') { + return preservesOpeningCurlyBraceEscape(index, parent); + } + + if (value === '}') { + return preservesClosingCurlyBraceEscape(index, parent); + } + + if (hasXFlag && /[ #]/.test(value)) { + return true; + } + + return (/[*[()+?^$./\\|]/.test(value) + ); +} + +function consumeNumbers(startIndex, parent, rtl) { + var i = startIndex; + var siblingNode = (rtl ? i >= 0 : i < parent.expressions.length) && parent.expressions[i]; + + while (siblingNode && siblingNode.type === 'Char' && siblingNode.kind === 'simple' && !siblingNode.escaped && /\d/.test(siblingNode.value)) { + rtl ? i-- : i++; + siblingNode = (rtl ? i >= 0 : i < parent.expressions.length) && parent.expressions[i]; + } + + return Math.abs(startIndex - i); +} + +function isSimpleChar(node, value) { + return node && node.type === 'Char' && node.kind === 'simple' && !node.escaped && node.value === value; +} + +function preservesOpeningCurlyBraceEscape(index, parent) { + // (?:\{) -> (?:{) + if (index == null) { + return false; + } + + var nbFollowingNumbers = consumeNumbers(index + 1, parent); + var i = index + nbFollowingNumbers + 1; + var nextSiblingNode = i < parent.expressions.length && parent.expressions[i]; + + if (nbFollowingNumbers) { + // Avoid \{3} turning into {3} + if (isSimpleChar(nextSiblingNode, '}')) { + return true; + } + + if (isSimpleChar(nextSiblingNode, ',')) { + nbFollowingNumbers = consumeNumbers(i + 1, parent); + i = i + nbFollowingNumbers + 1; + nextSiblingNode = i < parent.expressions.length && parent.expressions[i]; + + // Avoid \{3,} turning into {3,} + return isSimpleChar(nextSiblingNode, '}'); + } + } + return false; +} + +function preservesClosingCurlyBraceEscape(index, parent) { + // (?:\{) -> (?:{) + if (index == null) { + return false; + } + + var nbPrecedingNumbers = consumeNumbers(index - 1, parent, true); + var i = index - nbPrecedingNumbers - 1; + var previousSiblingNode = i >= 0 && parent.expressions[i]; + + // Avoid {3\} turning into {3} + if (nbPrecedingNumbers && isSimpleChar(previousSiblingNode, '{')) { + return true; + } + + if (isSimpleChar(previousSiblingNode, ',')) { + nbPrecedingNumbers = consumeNumbers(i - 1, parent, true); + i = i - nbPrecedingNumbers - 1; + previousSiblingNode = i < parent.expressions.length && parent.expressions[i]; + + // Avoid {3,\} turning into {3,} + return nbPrecedingNumbers && isSimpleChar(previousSiblingNode, '{'); + } + return false; +} + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * A regexp-tree plugin to merge class ranges. + * + * [a-ec] -> [a-e] + * [a-ec-e] -> [a-e] + * [\w\da-f] -> [\w] + * [abcdef] -> [a-f] + */ + +var charClassClassrangesMergeTransform = { + _hasIUFlags: false, + init: function init(ast) { + this._hasIUFlags = ast.flags.includes('i') && ast.flags.includes('u'); + }, + CharacterClass: function CharacterClass(path) { + var node = path.node; + + var expressions = node.expressions; + + var metas = []; + // Extract metas + expressions.forEach(function (expression) { + if (isMeta(expression)) { + metas.push(expression.value); + } + }); + + expressions.sort(sortCharClass); + + for (var i = 0; i < expressions.length; i++) { + var expression = expressions[i]; + if (fitsInMetas(expression, metas, this._hasIUFlags) || combinesWithPrecedingClassRange(expression, expressions[i - 1]) || combinesWithFollowingClassRange(expression, expressions[i + 1])) { + expressions.splice(i, 1); + i--; + } else { + var nbMergedChars = charCombinesWithPrecedingChars(expression, i, expressions); + expressions.splice(i - nbMergedChars + 1, nbMergedChars); + i -= nbMergedChars; + } + } + } +}; + +/** + * Sorts expressions in char class in the following order: + * - meta chars, ordered alphabetically by value + * - chars (except `control` kind) and class ranges, ordered alphabetically (`from` char is used for class ranges) + * - if ambiguous, class range comes before char + * - if ambiguous between two class ranges, orders alphabetically by `to` char + * - control chars, ordered alphabetically by value + * @param {Object} a - Left Char or ClassRange node + * @param {Object} b - Right Char or ClassRange node + * @returns {number} + */ +function sortCharClass(a, b) { + var aValue = getSortValue(a); + var bValue = getSortValue(b); + + if (aValue === bValue) { + // We want ClassRange before Char + // [bb-d] -> [b-db] + if (a.type === 'ClassRange' && b.type !== 'ClassRange') { + return -1; + } + if (b.type === 'ClassRange' && a.type !== 'ClassRange') { + return 1; + } + if (a.type === 'ClassRange' && b.type === 'ClassRange') { + return getSortValue(a.to) - getSortValue(b.to); + } + if (isMeta(a) && isMeta(b) || isControl(a) && isControl(b)) { + return a.value < b.value ? -1 : 1; + } + } + return aValue - bValue; +} + +/** + * @param {Object} expression - Char or ClassRange node + * @returns {number} + */ +function getSortValue(expression) { + if (expression.type === 'Char') { + if (expression.value === '-') { + return Infinity; + } + if (expression.kind === 'control') { + return Infinity; + } + if (expression.kind === 'meta' && isNaN(expression.codePoint)) { + return -1; + } + return expression.codePoint; + } + // ClassRange + return expression.from.codePoint; +} + +/** + * Checks if a node is a meta char from the set \d\w\s\D\W\S + * @param {Object} expression - Char or ClassRange node + * @param {?string} value + * @returns {boolean} + */ +function isMeta(expression) { + var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + + return expression.type === 'Char' && expression.kind === 'meta' && (value ? expression.value === value : /^\\[dws]$/i.test(expression.value)); +} + +/** + * @param {Object} expression - Char or ClassRange node + * @returns {boolean} + */ +function isControl(expression) { + return expression.type === 'Char' && expression.kind === 'control'; +} + +/** + * @param {Object} expression - Char or ClassRange node + * @param {string[]} metas - Array of meta chars, e.g. ["\\w", "\\s"] + * @param {boolean} hasIUFlags + * @returns {boolean} + */ +function fitsInMetas(expression, metas, hasIUFlags) { + for (var i = 0; i < metas.length; i++) { + if (fitsInMeta(expression, metas[i], hasIUFlags)) { + return true; + } + } + return false; +} + +/** + * @param {Object} expression - Char or ClassRange node + * @param {string} meta - e.g. "\\w" + * @param {boolean} hasIUFlags + * @returns {boolean} + */ +function fitsInMeta(expression, meta, hasIUFlags) { + if (expression.type === 'ClassRange') { + return fitsInMeta(expression.from, meta, hasIUFlags) && fitsInMeta(expression.to, meta, hasIUFlags); + } + + // Special cases: + // \S contains \w and \d + if (meta === '\\S' && (isMeta(expression, '\\w') || isMeta(expression, '\\d'))) { + return true; + } + // \D contains \W and \s + if (meta === '\\D' && (isMeta(expression, '\\W') || isMeta(expression, '\\s'))) { + return true; + } + // \w contains \d + if (meta === '\\w' && isMeta(expression, '\\d')) { + return true; + } + // \W contains \s + if (meta === '\\W' && isMeta(expression, '\\s')) { + return true; + } + + if (expression.type !== 'Char' || isNaN(expression.codePoint)) { + return false; + } + + if (meta === '\\s') { + return fitsInMetaS(expression); + } + if (meta === '\\S') { + return !fitsInMetaS(expression); + } + if (meta === '\\d') { + return fitsInMetaD(expression); + } + if (meta === '\\D') { + return !fitsInMetaD(expression); + } + if (meta === '\\w') { + return fitsInMetaW(expression, hasIUFlags); + } + if (meta === '\\W') { + return !fitsInMetaW(expression, hasIUFlags); + } + return false; +} + +/** + * @param {Object} expression - Char node with codePoint + * @returns {boolean} + */ +function fitsInMetaS(expression) { + return expression.codePoint === 0x0009 || // \t + expression.codePoint === 0x000a || // \n + expression.codePoint === 0x000b || // \v + expression.codePoint === 0x000c || // \f + expression.codePoint === 0x000d || // \r + expression.codePoint === 0x0020 || // space + expression.codePoint === 0x00a0 || // nbsp + expression.codePoint === 0x1680 || // part of Zs + expression.codePoint >= 0x2000 && expression.codePoint <= 0x200a || // part of Zs + expression.codePoint === 0x2028 || // line separator + expression.codePoint === 0x2029 || // paragraph separator + expression.codePoint === 0x202f || // part of Zs + expression.codePoint === 0x205f || // part of Zs + expression.codePoint === 0x3000 || // part of Zs + expression.codePoint === 0xfeff; // zwnbsp +} + +/** + * @param {Object} expression - Char node with codePoint + * @returns {boolean} + */ +function fitsInMetaD(expression) { + return expression.codePoint >= 0x30 && expression.codePoint <= 0x39; // 0-9 +} + +/** + * @param {Object} expression - Char node with codePoint + * @param {boolean} hasIUFlags + * @returns {boolean} + */ +function fitsInMetaW(expression, hasIUFlags) { + return fitsInMetaD(expression) || expression.codePoint >= 0x41 && expression.codePoint <= 0x5a || // A-Z + expression.codePoint >= 0x61 && expression.codePoint <= 0x7a || // a-z + expression.value === '_' || hasIUFlags && (expression.codePoint === 0x017f || expression.codePoint === 0x212a); +} + +/** + * @param {Object} expression - Char or ClassRange node + * @param {Object} classRange - Char or ClassRange node + * @returns {boolean} + */ +function combinesWithPrecedingClassRange(expression, classRange) { + if (classRange && classRange.type === 'ClassRange') { + if (fitsInClassRange(expression, classRange)) { + // [a-gc] -> [a-g] + // [a-gc-e] -> [a-g] + return true; + } else if ( + // We only want \w chars or char codes to keep readability + isMetaWCharOrCode(expression) && classRange.to.codePoint === expression.codePoint - 1) { + // [a-de] -> [a-e] + classRange.to = expression; + return true; + } else if (expression.type === 'ClassRange' && expression.from.codePoint <= classRange.to.codePoint + 1 && expression.to.codePoint >= classRange.from.codePoint - 1) { + // [a-db-f] -> [a-f] + // [b-fa-d] -> [a-f] + // [a-cd-f] -> [a-f] + if (expression.from.codePoint < classRange.from.codePoint) { + classRange.from = expression.from; + } + if (expression.to.codePoint > classRange.to.codePoint) { + classRange.to = expression.to; + } + return true; + } + } + return false; +} + +/** + * @param {Object} expression - Char or ClassRange node + * @param {Object} classRange - Char or ClassRange node + * @returns {boolean} + */ +function combinesWithFollowingClassRange(expression, classRange) { + if (classRange && classRange.type === 'ClassRange') { + // Considering the elements were ordered alphabetically, + // there is only one case to handle + // [ab-e] -> [a-e] + if ( + // We only want \w chars or char codes to keep readability + isMetaWCharOrCode(expression) && classRange.from.codePoint === expression.codePoint + 1) { + classRange.from = expression; + return true; + } + } + + return false; +} + +/** + * @param {Object} expression - Char or ClassRange node + * @param {Object} classRange - ClassRange node + * @returns {boolean} + */ +function fitsInClassRange(expression, classRange) { + if (expression.type === 'Char' && isNaN(expression.codePoint)) { + return false; + } + if (expression.type === 'ClassRange') { + return fitsInClassRange(expression.from, classRange) && fitsInClassRange(expression.to, classRange); + } + return expression.codePoint >= classRange.from.codePoint && expression.codePoint <= classRange.to.codePoint; +} + +/** + * @param {Object} expression - Char or ClassRange node + * @param {Number} index + * @param {Object[]} expressions - expressions in CharClass + * @returns {number} - Number of characters combined with expression + */ +function charCombinesWithPrecedingChars(expression, index, expressions) { + // We only want \w chars or char codes to keep readability + if (!isMetaWCharOrCode(expression)) { + return 0; + } + var nbMergedChars = 0; + while (index > 0) { + var currentExpression = expressions[index]; + var precedingExpresion = expressions[index - 1]; + if (isMetaWCharOrCode(precedingExpresion) && precedingExpresion.codePoint === currentExpression.codePoint - 1) { + nbMergedChars++; + index--; + } else { + break; + } + } + + if (nbMergedChars > 1) { + expressions[index] = { + type: 'ClassRange', + from: expressions[index], + to: expression + }; + return nbMergedChars; + } + return 0; +} + +function isMetaWCharOrCode(expression) { + return expression && expression.type === 'Char' && !isNaN(expression.codePoint) && (fitsInMetaW(expression, false) || expression.kind === 'unicode' || expression.kind === 'hex' || expression.kind === 'oct' || expression.kind === 'decimal'); +} + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var NodePath$1 = nodePath; + +var _require$7 = utils, + disjunctionToList = _require$7.disjunctionToList, + listToDisjunction = _require$7.listToDisjunction; + +/** + * Removes duplicates from a disjunction sequence: + * + * /(ab|bc|ab)+(xy|xy)+/ -> /(ab|bc)+(xy)+/ + */ + + +var disjunctionRemoveDuplicatesTransform = { + Disjunction: function Disjunction(path) { + var node = path.node; + + // Make unique nodes. + + var uniqueNodesMap = {}; + + var parts = disjunctionToList(node).filter(function (part) { + var encoded = part ? NodePath$1.getForNode(part).jsonEncode() : 'null'; + + // Already recorded this part, filter out. + if (uniqueNodesMap.hasOwnProperty(encoded)) { + return false; + } + + uniqueNodesMap[encoded] = part; + return true; + }); + + // Replace with the optimized disjunction. + path.replace(listToDisjunction(parts)); + } +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * A regexp-tree plugin to replace single char group disjunction to char group + * + * a|b|c -> [abc] + * [12]|3|4 -> [1234] + * (a|b|c) -> ([abc]) + * (?:a|b|c) -> [abc] + */ + +var groupSingleCharsToCharClass = { + Disjunction: function Disjunction(path) { + var node = path.node, + parent = path.parent; + + + if (!handlers[parent.type]) { + return; + } + + var charset = new Map(); + + if (!shouldProcess(node, charset) || !charset.size) { + return; + } + + var characterClass = { + type: 'CharacterClass', + expressions: Array.from(charset.keys()).sort().map(function (key) { + return charset.get(key); + }) + }; + + handlers[parent.type](path.getParent(), characterClass); + } +}; + +var handlers = { + RegExp: function RegExp(path, characterClass) { + var node = path.node; + + + node.body = characterClass; + }, + Group: function Group(path, characterClass) { + var node = path.node; + + + if (node.capturing) { + node.expression = characterClass; + } else { + path.replace(characterClass); + } + } +}; + +function shouldProcess(expression, charset) { + if (!expression) { + // Abort on empty disjunction part + return false; + } + + var type = expression.type; + + + if (type === 'Disjunction') { + var left = expression.left, + right = expression.right; + + + return shouldProcess(left, charset) && shouldProcess(right, charset); + } else if (type === 'Char') { + if (expression.kind === 'meta' && expression.symbol === '.') { + return false; + } + + var value = expression.value; + + + charset.set(value, expression); + + return true; + } else if (type === 'CharacterClass' && !expression.negative) { + return expression.expressions.every(function (expression) { + return shouldProcess(expression, charset); + }); + } + + return false; +} + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * A regexp-tree plugin to remove non-capturing empty groups. + * + * /(?:)a/ -> /a/ + * /a|(?:)/ -> /a|/ + */ + +var removeEmptyGroupTransform = { + Group: function Group(path) { + var node = path.node, + parent = path.parent; + + var childPath = path.getChild(); + + if (node.capturing || childPath) { + return; + } + + if (parent.type === 'Repetition') { + + path.getParent().replace(node); + } else if (parent.type !== 'RegExp') { + + path.remove(); + } + } +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * A regexp-tree plugin to remove unnecessary groups. + * + * /(?:a)/ -> /a/ + */ + +function _toConsumableArray$5(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var ungroupTransform = { + Group: function Group(path) { + var node = path.node, + parent = path.parent; + + var childPath = path.getChild(); + + if (node.capturing || !childPath) { + return; + } + + // Don't optimize \1(?:0) to \10 + if (!hasAppropriateSiblings(path)) { + return; + } + + // Don't optimize /a(?:b|c)/ to /ab|c/ + // but /(?:b|c)/ to /b|c/ is ok + if (childPath.node.type === 'Disjunction' && parent.type !== 'RegExp') { + return; + } + + // Don't optimize /(?:ab)+/ to /ab+/ + // but /(?:a)+/ to /a+/ is ok + // and /(?:[a-d])+/ to /[a-d]+/ is ok too + if (parent.type === 'Repetition' && childPath.node.type !== 'Char' && childPath.node.type !== 'CharacterClass') { + return; + } + + if (childPath.node.type === 'Alternative') { + var parentPath = path.getParent(); + if (parentPath.node.type === 'Alternative') { + // /abc(?:def)ghi/ When (?:def) is ungrouped its content must be merged with parent alternative + + parentPath.replace({ + type: 'Alternative', + expressions: [].concat(_toConsumableArray$5(parent.expressions.slice(0, path.index)), _toConsumableArray$5(childPath.node.expressions), _toConsumableArray$5(parent.expressions.slice(path.index + 1))) + }); + } + } else { + path.replace(childPath.node); + } + } +}; + +function hasAppropriateSiblings(path) { + var parent = path.parent, + index = path.index; + + + if (parent.type !== 'Alternative') { + return true; + } + + var previousNode = parent.expressions[index - 1]; + if (previousNode == null) { + return true; + } + + // Don't optimized \1(?:0) to \10 + if (previousNode.type === 'Backreference' && previousNode.kind === 'number') { + return false; + } + + // Don't optimized \2(?:0) to \20 + if (previousNode.type === 'Char' && previousNode.kind === 'decimal') { + return false; + } + + return true; +} + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +function _toConsumableArray$4(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var NodePath = nodePath; + +var _require$6 = utils, + increaseQuantifierByOne = _require$6.increaseQuantifierByOne; + +/** + * A regexp-tree plugin to combine repeating patterns. + * + * /^abcabcabc/ -> /^abc{3}/ + * /^(?:abc){2}abc/ -> /^(?:abc){3}/ + * /^abc(?:abc){2}/ -> /^(?:abc){3}/ + */ + +var combineRepeatingPatternsTransform = { + Alternative: function Alternative(path) { + var node = path.node; + + // We can skip the first child + + var index = 1; + while (index < node.expressions.length) { + var child = path.getChild(index); + index = Math.max(1, combineRepeatingPatternLeft(path, child, index)); + + if (index >= node.expressions.length) { + break; + } + + child = path.getChild(index); + index = Math.max(1, combineWithPreviousRepetition(path, child, index)); + + if (index >= node.expressions.length) { + break; + } + + child = path.getChild(index); + index = Math.max(1, combineRepetitionWithPrevious(path, child, index)); + + index++; + } + } +}; + +// abcabc -> (?:abc){2} +function combineRepeatingPatternLeft(alternative, child, index) { + var node = alternative.node; + + + var nbPossibleLengths = Math.ceil(index / 2); + var i = 0; + + while (i < nbPossibleLengths) { + var startIndex = index - 2 * i - 1; + var right = void 0, + left = void 0; + + if (i === 0) { + right = child; + left = alternative.getChild(startIndex); + } else { + right = NodePath.getForNode({ + type: 'Alternative', + expressions: [].concat(_toConsumableArray$4(node.expressions.slice(index - i, index)), [child.node]) + }); + + left = NodePath.getForNode({ + type: 'Alternative', + expressions: [].concat(_toConsumableArray$4(node.expressions.slice(startIndex, index - i))) + }); + } + + if (right.hasEqualSource(left)) { + for (var j = 0; j < 2 * i + 1; j++) { + alternative.getChild(startIndex).remove(); + } + + child.replace({ + type: 'Repetition', + expression: i === 0 && right.node.type !== 'Repetition' ? right.node : { + type: 'Group', + capturing: false, + expression: right.node + }, + quantifier: { + type: 'Quantifier', + kind: 'Range', + from: 2, + to: 2, + greedy: true + } + }); + return startIndex; + } + + i++; + } + + return index; +} + +// (?:abc){2}abc -> (?:abc){3} +function combineWithPreviousRepetition(alternative, child, index) { + var node = alternative.node; + + + var i = 0; + while (i < index) { + var previousChild = alternative.getChild(i); + + if (previousChild.node.type === 'Repetition' && previousChild.node.quantifier.greedy) { + var left = previousChild.getChild(); + var right = void 0; + + if (left.node.type === 'Group' && !left.node.capturing) { + left = left.getChild(); + } + + if (i + 1 === index) { + right = child; + if (right.node.type === 'Group' && !right.node.capturing) { + right = right.getChild(); + } + } else { + right = NodePath.getForNode({ + type: 'Alternative', + expressions: [].concat(_toConsumableArray$4(node.expressions.slice(i + 1, index + 1))) + }); + } + + if (left.hasEqualSource(right)) { + for (var j = i; j < index; j++) { + alternative.getChild(i + 1).remove(); + } + + increaseQuantifierByOne(previousChild.node.quantifier); + + return i; + } + } + + i++; + } + return index; +} + +// abc(?:abc){2} -> (?:abc){3} +function combineRepetitionWithPrevious(alternative, child, index) { + var node = alternative.node; + + + if (child.node.type === 'Repetition' && child.node.quantifier.greedy) { + var right = child.getChild(); + var left = void 0; + + if (right.node.type === 'Group' && !right.node.capturing) { + right = right.getChild(); + } + + var rightLength = void 0; + if (right.node.type === 'Alternative') { + rightLength = right.node.expressions.length; + left = NodePath.getForNode({ + type: 'Alternative', + expressions: [].concat(_toConsumableArray$4(node.expressions.slice(index - rightLength, index))) + }); + } else { + rightLength = 1; + left = alternative.getChild(index - 1); + if (left.node.type === 'Group' && !left.node.capturing) { + left = left.getChild(); + } + } + + if (left.hasEqualSource(right)) { + for (var j = index - rightLength; j < index; j++) { + alternative.getChild(index - rightLength).remove(); + } + + increaseQuantifierByOne(child.node.quantifier); + + return index - rightLength; + } + } + return index; +} + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var transforms = new Map([ +// \ud83d\ude80 -> \u{1f680} +['charSurrogatePairToSingleUnicode', charSurrogatePairToSingleUnicodeTransform], + +// \u0061 -> a +['charCodeToSimpleChar', charCodeToSimpleCharTransform], + +// /Aa/i -> /aa/i +['charCaseInsensitiveLowerCaseTransform', charCaseInsensitiveLowercaseTransform], + +// [\d\d] -> [\d] +['charClassRemoveDuplicates', charClassRemoveDuplicatesTransform], + +// a{1,2}a{2,3} -> a{3,5} +['quantifiersMerge', quantifiersMergeTransform], + +// a{1,} -> a+, a{3,3} -> a{3}, a{1} -> a +['quantifierRangeToSymbol', quantifierRangeToSymbolTransform], + +// [a-a] -> [a], [a-b] -> [ab] +['charClassClassrangesToChars', charClassClassrangesToCharsTransform], + +// [0-9] -> [\d] +['charClassToMeta', charClassToMetaTransform], + +// [\d] -> \d, [^\w] -> \W +['charClassToSingleChar', charClassToSingleCharTransform], + +// \e -> e +['charEscapeUnescape', charEscapeUnescapeTransform], + +// [a-de-f] -> [a-f] +['charClassClassrangesMerge', charClassClassrangesMergeTransform], + +// (ab|ab) -> (ab) +['disjunctionRemoveDuplicates', disjunctionRemoveDuplicatesTransform], + +// (a|b|c) -> [abc] +['groupSingleCharsToCharClass', groupSingleCharsToCharClass], + +// (?:)a -> a +['removeEmptyGroup', removeEmptyGroupTransform], + +// (?:a) -> a +['ungroup', ungroupTransform], + +// abcabcabc -> (?:abc){3} +['combineRepeatingPatterns', combineRepeatingPatternsTransform]]); + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var clone = clone$1; +var parser$2 = parser$4; +var transform = transform$1; +var optimizationTransforms = transforms; + +var optimizer$1 = { + /** + * Optimizer transforms a regular expression into an optimized version, + * replacing some sub-expressions with their idiomatic patterns. + * + * @param string | RegExp | AST - a regexp to optimize. + * + * @return TransformResult - an optimized regexp. + * + * Example: + * + * /[a-zA-Z_0-9][a-zA-Z_0-9]*\e{1,}/ + * + * Optimized to: + * + * /\w+e+/ + */ + optimize: function optimize(regexp) { + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref$whitelist = _ref.whitelist, + whitelist = _ref$whitelist === undefined ? [] : _ref$whitelist, + _ref$blacklist = _ref.blacklist, + blacklist = _ref$blacklist === undefined ? [] : _ref$blacklist; + + var transformsRaw = whitelist.length > 0 ? whitelist : Array.from(optimizationTransforms.keys()); + + var transformToApply = transformsRaw.filter(function (transform) { + return !blacklist.includes(transform); + }); + + var ast = regexp; + if (regexp instanceof RegExp) { + regexp = '' + regexp; + } + + if (typeof regexp === 'string') { + ast = parser$2.parse(regexp); + } + + var result = new transform.TransformResult(ast); + var prevResultString = void 0; + + do { + // Get a copy of the current state here so + // we can compare it with the state at the + // end of the loop. + prevResultString = result.toString(); + ast = clone(result.getAST()); + + transformToApply.forEach(function (transformName) { + if (!optimizationTransforms.has(transformName)) { + throw new Error('Unknown optimization-transform: ' + transformName + '. ' + 'Available transforms are: ' + Array.from(optimizationTransforms.keys()).join(', ')); + } + + var transformer = optimizationTransforms.get(transformName); + + // Don't override result just yet since we + // might want to rollback the transform + var newResult = transform.transform(ast, transformer); + + if (newResult.toString() !== result.toString()) { + if (newResult.toString().length <= result.toString().length) { + result = newResult; + } else { + // Result has changed but is not shorter: + // restore ast to its previous state. + + ast = clone(result.getAST()); + } + } + }); + + // Keep running the optimizer until it stops + // making any change to the regexp. + } while (result.toString() !== prevResultString); + + return result; + } +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * Epsilon, the empty string. + */ + +var EPSILON$3 = 'ε'; + +/** + * Epsilon-closure. + */ +var EPSILON_CLOSURE$2 = EPSILON$3 + '*'; + +var specialSymbols = { + EPSILON: EPSILON$3, + EPSILON_CLOSURE: EPSILON_CLOSURE$2 +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var _slicedToArray$1 = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var _createClass$4 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _toConsumableArray$3(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +function _classCallCheck$4(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var _require$5 = specialSymbols, + EPSILON$2 = _require$5.EPSILON, + EPSILON_CLOSURE$1 = _require$5.EPSILON_CLOSURE; + +/** + * NFA fragment. + * + * NFA sub-fragments can be combined to a larger NFAs building + * the resulting machine. Combining the fragments is done by patching + * edges of the in- and out-states. + * + * 2-states implementation, `in`, and `out`. Eventually all transitions + * go to the same `out`, which can further be connected via ε-transition + * with other fragment. + */ + + +var NFA$2 = function () { + function NFA(inState, outState) { + _classCallCheck$4(this, NFA); + + this.in = inState; + this.out = outState; + } + + /** + * Tries to recognize a string based on this NFA fragment. + */ + + + _createClass$4(NFA, [{ + key: 'matches', + value: function matches(string) { + return this.in.matches(string); + } + + /** + * Returns an alphabet for this NFA. + */ + + }, { + key: 'getAlphabet', + value: function getAlphabet() { + if (!this._alphabet) { + this._alphabet = new Set(); + var table = this.getTransitionTable(); + for (var state in table) { + var transitions = table[state]; + for (var symbol in transitions) { + if (symbol !== EPSILON_CLOSURE$1) { + this._alphabet.add(symbol); + } + } + } + } + return this._alphabet; + } + + /** + * Returns set of accepting states. + */ + + }, { + key: 'getAcceptingStates', + value: function getAcceptingStates() { + if (!this._acceptingStates) { + // States are determined during table construction. + this.getTransitionTable(); + } + return this._acceptingStates; + } + + /** + * Returns accepting state numbers. + */ + + }, { + key: 'getAcceptingStateNumbers', + value: function getAcceptingStateNumbers() { + if (!this._acceptingStateNumbers) { + this._acceptingStateNumbers = new Set(); + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = this.getAcceptingStates()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var acceptingState = _step.value; + + this._acceptingStateNumbers.add(acceptingState.number); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + } + return this._acceptingStateNumbers; + } + + /** + * Builds and returns transition table. + */ + + }, { + key: 'getTransitionTable', + value: function getTransitionTable() { + var _this = this; + + if (!this._transitionTable) { + this._transitionTable = {}; + this._acceptingStates = new Set(); + + var visited = new Set(); + var symbols = new Set(); + + var visitState = function visitState(state) { + if (visited.has(state)) { + return; + } + + visited.add(state); + state.number = visited.size; + _this._transitionTable[state.number] = {}; + + if (state.accepting) { + _this._acceptingStates.add(state); + } + + var transitions = state.getTransitions(); + + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = transitions[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var _ref = _step2.value; + + var _ref2 = _slicedToArray$1(_ref, 2); + + var symbol = _ref2[0]; + var symbolTransitions = _ref2[1]; + + var combinedState = []; + symbols.add(symbol); + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; + + try { + for (var _iterator3 = symbolTransitions[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var nextState = _step3.value; + + visitState(nextState); + combinedState.push(nextState.number); + } + } catch (err) { + _didIteratorError3 = true; + _iteratorError3 = err; + } finally { + try { + if (!_iteratorNormalCompletion3 && _iterator3.return) { + _iterator3.return(); + } + } finally { + if (_didIteratorError3) { + throw _iteratorError3; + } + } + } + + _this._transitionTable[state.number][symbol] = combinedState; + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + }; + + // Traverse the graph starting from the `in`. + visitState(this.in); + + // Append epsilon-closure column. + visited.forEach(function (state) { + delete _this._transitionTable[state.number][EPSILON$2]; + _this._transitionTable[state.number][EPSILON_CLOSURE$1] = [].concat(_toConsumableArray$3(state.getEpsilonClosure())).map(function (s) { + return s.number; + }); + }); + } + + return this._transitionTable; + } + }]); + + return NFA; +}(); + +var nfa = NFA$2; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +// DFA minization. + +/** + * Map from state to current set it goes. + */ + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); } + +function _toConsumableArray$2(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var currentTransitionMap = null; + +/** + * Takes a DFA, and returns a minimized version of it + * compressing some states to groups (using standard, 0-, 1-, + * 2-, ... N-equivalence algorithm). + */ +function minimize(dfa) { + var table = dfa.getTransitionTable(); + var allStates = Object.keys(table); + var alphabet = dfa.getAlphabet(); + var accepting = dfa.getAcceptingStateNumbers(); + + currentTransitionMap = {}; + + var nonAccepting = new Set(); + + allStates.forEach(function (state) { + state = Number(state); + var isAccepting = accepting.has(state); + + if (isAccepting) { + currentTransitionMap[state] = accepting; + } else { + nonAccepting.add(state); + currentTransitionMap[state] = nonAccepting; + } + }); + + // --------------------------------------------------------------------------- + // Step 1: build equivalent sets. + + // All [1..N] equivalent sets. + var all = [ + // 0-equivalent sets. + [nonAccepting, accepting].filter(function (set) { + return set.size > 0; + })]; + + var current = void 0; + var previous = void 0; + + // Top of the stack is the current list of sets to analyze. + current = all[all.length - 1]; + + // Previous set (to check whether we need to stop). + previous = all[all.length - 2]; + + // Until we'll not have the same N and N-1 equivalent rows. + + var _loop = function _loop() { + var newTransitionMap = {}; + + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; + + try { + for (var _iterator3 = current[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var _set = _step3.value; + + // Handled states for this set. + var handledStates = {}; + + var _set2 = _toArray(_set), + first = _set2[0], + rest = _set2.slice(1); + + handledStates[first] = new Set([first]); + + // Have to compare each from the rest states with + // the already handled states, and see if they are equivalent. + var _iteratorNormalCompletion4 = true; + var _didIteratorError4 = false; + var _iteratorError4 = undefined; + + try { + restSets: for (var _iterator4 = rest[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { + var state = _step4.value; + var _iteratorNormalCompletion5 = true; + var _didIteratorError5 = false; + var _iteratorError5 = undefined; + + try { + for (var _iterator5 = Object.keys(handledStates)[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { + var handledState = _step5.value; + + // This and some previously handled state are equivalent -- + // just append this state to the same set. + if (areEquivalent(state, handledState, table, alphabet)) { + handledStates[handledState].add(state); + handledStates[state] = handledStates[handledState]; + continue restSets; + } + } + // Else, this state is not equivalent to any of the + // handled states -- allocate a new set for it. + } catch (err) { + _didIteratorError5 = true; + _iteratorError5 = err; + } finally { + try { + if (!_iteratorNormalCompletion5 && _iterator5.return) { + _iterator5.return(); + } + } finally { + if (_didIteratorError5) { + throw _iteratorError5; + } + } + } + + handledStates[state] = new Set([state]); + } + } catch (err) { + _didIteratorError4 = true; + _iteratorError4 = err; + } finally { + try { + if (!_iteratorNormalCompletion4 && _iterator4.return) { + _iterator4.return(); + } + } finally { + if (_didIteratorError4) { + throw _iteratorError4; + } + } + } + + // Add these handled states to all states map. + + + Object.assign(newTransitionMap, handledStates); + } + + // Update current transition map for the handled row. + } catch (err) { + _didIteratorError3 = true; + _iteratorError3 = err; + } finally { + try { + if (!_iteratorNormalCompletion3 && _iterator3.return) { + _iterator3.return(); + } + } finally { + if (_didIteratorError3) { + throw _iteratorError3; + } + } + } + + currentTransitionMap = newTransitionMap; + + var newSets = new Set(Object.keys(newTransitionMap).map(function (state) { + return newTransitionMap[state]; + })); + + all.push([].concat(_toConsumableArray$2(newSets))); + + // Top of the stack is the current. + current = all[all.length - 1]; + + // Previous set. + previous = all[all.length - 2]; + }; + + while (!sameRow(current, previous)) { + _loop(); + } + + // --------------------------------------------------------------------------- + // Step 2: build minimized table from the equivalent sets. + + // Remap state numbers from sets to index-based. + var remaped = new Map(); + var idx = 1; + current.forEach(function (set) { + return remaped.set(set, idx++); + }); + + // Build the minimized table from the calculated equivalent sets. + var minimizedTable = {}; + + var minimizedAcceptingStates = new Set(); + + var updateAcceptingStates = function updateAcceptingStates(set, idx) { + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = set[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var state = _step.value; + + if (accepting.has(state)) { + minimizedAcceptingStates.add(idx); + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + }; + + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = remaped.entries()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var _ref = _step2.value; + + var _ref2 = _slicedToArray(_ref, 2); + + var set = _ref2[0]; + var _idx = _ref2[1]; + + minimizedTable[_idx] = {}; + var _iteratorNormalCompletion6 = true; + var _didIteratorError6 = false; + var _iteratorError6 = undefined; + + try { + for (var _iterator6 = alphabet[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { + var symbol = _step6.value; + + updateAcceptingStates(set, _idx); + + // Determine original transition for this symbol from the set. + var originalTransition = void 0; + var _iteratorNormalCompletion7 = true; + var _didIteratorError7 = false; + var _iteratorError7 = undefined; + + try { + for (var _iterator7 = set[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { + var originalState = _step7.value; + + originalTransition = table[originalState][symbol]; + if (originalTransition) { + break; + } + } + } catch (err) { + _didIteratorError7 = true; + _iteratorError7 = err; + } finally { + try { + if (!_iteratorNormalCompletion7 && _iterator7.return) { + _iterator7.return(); + } + } finally { + if (_didIteratorError7) { + throw _iteratorError7; + } + } + } + + if (originalTransition) { + minimizedTable[_idx][symbol] = remaped.get(currentTransitionMap[originalTransition]); + } + } + } catch (err) { + _didIteratorError6 = true; + _iteratorError6 = err; + } finally { + try { + if (!_iteratorNormalCompletion6 && _iterator6.return) { + _iterator6.return(); + } + } finally { + if (_didIteratorError6) { + throw _iteratorError6; + } + } + } + } + + // Update the table, and accepting states on the original DFA. + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + + dfa.setTransitionTable(minimizedTable); + dfa.setAcceptingStateNumbers(minimizedAcceptingStates); + + return dfa; +} + +function sameRow(r1, r2) { + if (!r2) { + return false; + } + + if (r1.length !== r2.length) { + return false; + } + + for (var i = 0; i < r1.length; i++) { + var s1 = r1[i]; + var s2 = r2[i]; + + if (s1.size !== s2.size) { + return false; + } + + if ([].concat(_toConsumableArray$2(s1)).sort().join(',') !== [].concat(_toConsumableArray$2(s2)).sort().join(',')) { + return false; + } + } + + return true; +} + +/** + * Checks whether two states are N-equivalent, i.e. whether they go + * to the same set on a symbol. + */ +function areEquivalent(s1, s2, table, alphabet) { + var _iteratorNormalCompletion8 = true; + var _didIteratorError8 = false; + var _iteratorError8 = undefined; + + try { + for (var _iterator8 = alphabet[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) { + var symbol = _step8.value; + + if (!goToSameSet(s1, s2, table, symbol)) { + return false; + } + } + } catch (err) { + _didIteratorError8 = true; + _iteratorError8 = err; + } finally { + try { + if (!_iteratorNormalCompletion8 && _iterator8.return) { + _iterator8.return(); + } + } finally { + if (_didIteratorError8) { + throw _iteratorError8; + } + } + } + + return true; +} + +/** + * Checks whether states go to the same set. + */ +function goToSameSet(s1, s2, table, symbol) { + if (!currentTransitionMap[s1] || !currentTransitionMap[s2]) { + return false; + } + + var originalTransitionS1 = table[s1][symbol]; + var originalTransitionS2 = table[s2][symbol]; + + // If no actual transition on this symbol, treat it as positive. + if (!originalTransitionS1 && !originalTransitionS2) { + return true; + } + + // Otherwise, check if they are in the same sets. + return currentTransitionMap[s1].has(originalTransitionS1) && currentTransitionMap[s2].has(originalTransitionS2); +} + +var dfaMinimizer = { + minimize: minimize +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var _createClass$3 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _toConsumableArray$1(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +function _classCallCheck$3(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var DFAMinimizer = dfaMinimizer; + +var _require$4 = specialSymbols, + EPSILON_CLOSURE = _require$4.EPSILON_CLOSURE; + +/** + * DFA is build by converting from NFA (subset construction). + */ + + +var DFA$1 = function () { + function DFA(nfa) { + _classCallCheck$3(this, DFA); + + this._nfa = nfa; + } + + /** + * Minimizes DFA. + */ + + + _createClass$3(DFA, [{ + key: 'minimize', + value: function minimize() { + this.getTransitionTable(); + + this._originalAcceptingStateNumbers = this._acceptingStateNumbers; + this._originalTransitionTable = this._transitionTable; + + DFAMinimizer.minimize(this); + } + + /** + * Returns alphabet for this DFA. + */ + + }, { + key: 'getAlphabet', + value: function getAlphabet() { + return this._nfa.getAlphabet(); + } + + /** + * Returns accepting states. + */ + + }, { + key: 'getAcceptingStateNumbers', + value: function getAcceptingStateNumbers() { + if (!this._acceptingStateNumbers) { + // Accepting states are determined during table construction. + this.getTransitionTable(); + } + + return this._acceptingStateNumbers; + } + + /** + * Returns original accepting states. + */ + + }, { + key: 'getOriginaAcceptingStateNumbers', + value: function getOriginaAcceptingStateNumbers() { + if (!this._originalAcceptingStateNumbers) { + // Accepting states are determined during table construction. + this.getTransitionTable(); + } + + return this._originalAcceptingStateNumbers; + } + + /** + * Sets transition table. + */ + + }, { + key: 'setTransitionTable', + value: function setTransitionTable(table) { + this._transitionTable = table; + } + + /** + * Sets accepting states. + */ + + }, { + key: 'setAcceptingStateNumbers', + value: function setAcceptingStateNumbers(stateNumbers) { + this._acceptingStateNumbers = stateNumbers; + } + + /** + * DFA transition table is built from NFA table. + */ + + }, { + key: 'getTransitionTable', + value: function getTransitionTable() { + var _this = this; + + if (this._transitionTable) { + return this._transitionTable; + } + + // Calculate from NFA transition table. + var nfaTable = this._nfa.getTransitionTable(); + var nfaStates = Object.keys(nfaTable); + + this._acceptingStateNumbers = new Set(); + + // Start state of DFA is E(S[nfa]) + var startState = nfaTable[nfaStates[0]][EPSILON_CLOSURE]; + + // Init the worklist (states which should be in the DFA). + var worklist = [startState]; + + var alphabet = this.getAlphabet(); + var nfaAcceptingStates = this._nfa.getAcceptingStateNumbers(); + + var dfaTable = {}; + + // Determine whether the combined DFA state is accepting. + var updateAcceptingStates = function updateAcceptingStates(states) { + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = nfaAcceptingStates[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var nfaAcceptingState = _step.value; + + // If any of the states from NFA is accepting, DFA's + // state is accepting as well. + if (states.indexOf(nfaAcceptingState) !== -1) { + _this._acceptingStateNumbers.add(states.join(',')); + break; + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + }; + + while (worklist.length > 0) { + var states = worklist.shift(); + var dfaStateLabel = states.join(','); + dfaTable[dfaStateLabel] = {}; + + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = alphabet[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var symbol = _step2.value; + + var onSymbol = []; + + // Determine whether the combined state is accepting. + updateAcceptingStates(states); + + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; + + try { + for (var _iterator3 = states[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var state = _step3.value; + + var nfaStatesOnSymbol = nfaTable[state][symbol]; + if (!nfaStatesOnSymbol) { + continue; + } + + var _iteratorNormalCompletion4 = true; + var _didIteratorError4 = false; + var _iteratorError4 = undefined; + + try { + for (var _iterator4 = nfaStatesOnSymbol[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { + var nfaStateOnSymbol = _step4.value; + + if (!nfaTable[nfaStateOnSymbol]) { + continue; + } + onSymbol.push.apply(onSymbol, _toConsumableArray$1(nfaTable[nfaStateOnSymbol][EPSILON_CLOSURE])); + } + } catch (err) { + _didIteratorError4 = true; + _iteratorError4 = err; + } finally { + try { + if (!_iteratorNormalCompletion4 && _iterator4.return) { + _iterator4.return(); + } + } finally { + if (_didIteratorError4) { + throw _iteratorError4; + } + } + } + } + } catch (err) { + _didIteratorError3 = true; + _iteratorError3 = err; + } finally { + try { + if (!_iteratorNormalCompletion3 && _iterator3.return) { + _iterator3.return(); + } + } finally { + if (_didIteratorError3) { + throw _iteratorError3; + } + } + } + + var dfaStatesOnSymbolSet = new Set(onSymbol); + var dfaStatesOnSymbol = [].concat(_toConsumableArray$1(dfaStatesOnSymbolSet)); + + if (dfaStatesOnSymbol.length > 0) { + var dfaOnSymbolStr = dfaStatesOnSymbol.join(','); + + dfaTable[dfaStateLabel][symbol] = dfaOnSymbolStr; + + if (!dfaTable.hasOwnProperty(dfaOnSymbolStr)) { + worklist.unshift(dfaStatesOnSymbol); + } + } + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + } + + return this._transitionTable = this._remapStateNumbers(dfaTable); + } + + /** + * Remaps state numbers in the resulting table: + * combined states '1,2,3' -> 1, '3,4' -> 2, etc. + */ + + }, { + key: '_remapStateNumbers', + value: function _remapStateNumbers(calculatedDFATable) { + var newStatesMap = {}; + + this._originalTransitionTable = calculatedDFATable; + var transitionTable = {}; + + Object.keys(calculatedDFATable).forEach(function (originalNumber, newNumber) { + newStatesMap[originalNumber] = newNumber + 1; + }); + + for (var originalNumber in calculatedDFATable) { + var originalRow = calculatedDFATable[originalNumber]; + var row = {}; + + for (var symbol in originalRow) { + row[symbol] = newStatesMap[originalRow[symbol]]; + } + + transitionTable[newStatesMap[originalNumber]] = row; + } + + // Remap accepting states. + this._originalAcceptingStateNumbers = this._acceptingStateNumbers; + this._acceptingStateNumbers = new Set(); + + var _iteratorNormalCompletion5 = true; + var _didIteratorError5 = false; + var _iteratorError5 = undefined; + + try { + for (var _iterator5 = this._originalAcceptingStateNumbers[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { + var _originalNumber = _step5.value; + + this._acceptingStateNumbers.add(newStatesMap[_originalNumber]); + } + } catch (err) { + _didIteratorError5 = true; + _iteratorError5 = err; + } finally { + try { + if (!_iteratorNormalCompletion5 && _iterator5.return) { + _iterator5.return(); + } + } finally { + if (_didIteratorError5) { + throw _iteratorError5; + } + } + } + + return transitionTable; + } + + /** + * Returns original DFA table, where state numbers + * are combined numbers from NFA. + */ + + }, { + key: 'getOriginalTransitionTable', + value: function getOriginalTransitionTable() { + if (!this._originalTransitionTable) { + // Original table is determined during table construction. + this.getTransitionTable(); + } + return this._originalTransitionTable; + } + + /** + * Checks whether this DFA accepts a string. + */ + + }, { + key: 'matches', + value: function matches(string) { + var state = 1; + var i = 0; + var table = this.getTransitionTable(); + + while (string[i]) { + state = table[state][string[i++]]; + if (!state) { + return false; + } + } + + if (!this.getAcceptingStateNumbers().has(state)) { + return false; + } + + return true; + } + }]); + + return DFA; +}(); + +var dfa = DFA$1; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * A generic FA State class (base for NFA and DFA). + * + * Maintains the transition map, and the flag whether + * the state is accepting. + */ + +var _createClass$2 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck$2(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var State$1 = function () { + function State() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + _ref$accepting = _ref.accepting, + accepting = _ref$accepting === undefined ? false : _ref$accepting; + + _classCallCheck$2(this, State); + + /** + * Outgoing transitions to other states. + */ + this._transitions = new Map(); + + /** + * Whether the state is accepting. + */ + this.accepting = accepting; + } + + /** + * Returns transitions for this state. + */ + + + _createClass$2(State, [{ + key: 'getTransitions', + value: function getTransitions() { + return this._transitions; + } + + /** + * Creates a transition on symbol. + */ + + }, { + key: 'addTransition', + value: function addTransition(symbol, toState) { + this.getTransitionsOnSymbol(symbol).add(toState); + return this; + } + + /** + * Returns transitions set on symbol. + */ + + }, { + key: 'getTransitionsOnSymbol', + value: function getTransitionsOnSymbol(symbol) { + var transitions = this._transitions.get(symbol); + + if (!transitions) { + transitions = new Set(); + this._transitions.set(symbol, transitions); + } + + return transitions; + } + }]); + + return State; +}(); + +var state = State$1; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var _createClass$1 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck$1(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var State = state; + +var _require$3 = specialSymbols, + EPSILON$1 = _require$3.EPSILON; + +/** + * NFA state. + * + * Allows nondeterministic transitions to several states on the + * same symbol, and also epsilon-transitions. + */ + + +var NFAState$1 = function (_State) { + _inherits(NFAState, _State); + + function NFAState() { + _classCallCheck$1(this, NFAState); + + return _possibleConstructorReturn(this, (NFAState.__proto__ || Object.getPrototypeOf(NFAState)).apply(this, arguments)); + } + + _createClass$1(NFAState, [{ + key: 'matches', + + + /** + * Whether this state matches a string. + * + * We maintain set of visited epsilon-states to avoid infinite loops + * when an epsilon-transition goes eventually to itself. + * + * NOTE: this function is rather "educational", since we use DFA for strings + * matching. DFA is built on top of NFA, and uses fast transition table. + */ + value: function matches(string) { + var visited = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Set(); + + // An epsilon-state has been visited, stop to avoid infinite loop. + if (visited.has(this)) { + return false; + } + + visited.add(this); + + // No symbols left.. + if (string.length === 0) { + // .. and we're in the accepting state. + if (this.accepting) { + return true; + } + + // Check if we can reach any accepting state from + // on the epsilon transitions. + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = this.getTransitionsOnSymbol(EPSILON$1)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var nextState = _step.value; + + if (nextState.matches('', visited)) { + return true; + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + return false; + } + + // Else, we get some symbols. + var symbol = string[0]; + var rest = string.slice(1); + + var symbolTransitions = this.getTransitionsOnSymbol(symbol); + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = symbolTransitions[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var _nextState = _step2.value; + + if (_nextState.matches(rest)) { + return true; + } + } + + // If we couldn't match on symbol, check still epsilon-transitions + // without consuming the symbol (i.e. continue from `string`, not `rest`). + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; + + try { + for (var _iterator3 = this.getTransitionsOnSymbol(EPSILON$1)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var _nextState2 = _step3.value; + + if (_nextState2.matches(string, visited)) { + return true; + } + } + } catch (err) { + _didIteratorError3 = true; + _iteratorError3 = err; + } finally { + try { + if (!_iteratorNormalCompletion3 && _iterator3.return) { + _iterator3.return(); + } + } finally { + if (_didIteratorError3) { + throw _iteratorError3; + } + } + } + + return false; + } + + /** + * Returns an ε-closure for this state: + * self + all states following ε-transitions. + */ + + }, { + key: 'getEpsilonClosure', + value: function getEpsilonClosure() { + var _this2 = this; + + if (!this._epsilonClosure) { + (function () { + var epsilonTransitions = _this2.getTransitionsOnSymbol(EPSILON$1); + var closure = _this2._epsilonClosure = new Set(); + closure.add(_this2); + var _iteratorNormalCompletion4 = true; + var _didIteratorError4 = false; + var _iteratorError4 = undefined; + + try { + for (var _iterator4 = epsilonTransitions[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { + var nextState = _step4.value; + + if (!closure.has(nextState)) { + closure.add(nextState); + var nextClosure = nextState.getEpsilonClosure(); + nextClosure.forEach(function (state) { + return closure.add(state); + }); + } + } + } catch (err) { + _didIteratorError4 = true; + _iteratorError4 = err; + } finally { + try { + if (!_iteratorNormalCompletion4 && _iterator4.return) { + _iterator4.return(); + } + } finally { + if (_didIteratorError4) { + throw _iteratorError4; + } + } + } + })(); + } + + return this._epsilonClosure; + } + }]); + + return NFAState; +}(State); + +var nfaState = NFAState$1; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var NFA$1 = nfa; +var NFAState = nfaState; + +var _require$2 = specialSymbols, + EPSILON = _require$2.EPSILON; + +// ----------------------------------------------------------------------------- +// Char NFA fragment: `c` + +/** + * Char factory. + * + * Creates an NFA fragment for a single char. + * + * [in] --c--> [out] + */ + + +function char$1(c) { + var inState = new NFAState(); + var outState = new NFAState({ + accepting: true + }); + + return new NFA$1(inState.addTransition(c, outState), outState); +} + +// ----------------------------------------------------------------------------- +// Epsilon NFA fragment + +/** + * Epsilon factory. + * + * Creates an NFA fragment for ε (recognizes an empty string). + * + * [in] --ε--> [out] + */ +function e() { + return char$1(EPSILON); +} + +// ----------------------------------------------------------------------------- +// Alteration NFA fragment: `abc` + +/** + * Creates a connection between two NFA fragments on epsilon transition. + * + * [in-a] --a--> [out-a] --ε--> [in-b] --b--> [out-b] + */ +function altPair(first, second) { + first.out.accepting = false; + second.out.accepting = true; + + first.out.addTransition(EPSILON, second.in); + + return new NFA$1(first.in, second.out); +} + +/** + * Alteration factory. + * + * Creates a alteration NFA for (at least) two NFA-fragments. + */ +function alt$1(first) { + for (var _len = arguments.length, fragments = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + fragments[_key - 1] = arguments[_key]; + } + + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = fragments[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var fragment = _step.value; + + first = altPair(first, fragment); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + return first; +} + +// ----------------------------------------------------------------------------- +// Disjunction NFA fragment: `a|b` + +/** + * Creates a disjunction choice between two fragments. + */ +function orPair(first, second) { + var inState = new NFAState(); + var outState = new NFAState(); + + inState.addTransition(EPSILON, first.in); + inState.addTransition(EPSILON, second.in); + + outState.accepting = true; + first.out.accepting = false; + second.out.accepting = false; + + first.out.addTransition(EPSILON, outState); + second.out.addTransition(EPSILON, outState); + + return new NFA$1(inState, outState); +} + +/** + * Disjunction factory. + * + * Creates a disjunction NFA for (at least) two NFA-fragments. + */ +function or$1(first) { + for (var _len2 = arguments.length, fragments = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + fragments[_key2 - 1] = arguments[_key2]; + } + + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = fragments[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var fragment = _step2.value; + + first = orPair(first, fragment); + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + + return first; +} + +// ----------------------------------------------------------------------------- +// Kleene-closure + +/** + * Kleene star/closure. + * + * a* + */ +function repExplicit(fragment) { + var inState = new NFAState(); + var outState = new NFAState({ + accepting: true + }); + + // 0 or more. + inState.addTransition(EPSILON, fragment.in); + inState.addTransition(EPSILON, outState); + + fragment.out.accepting = false; + fragment.out.addTransition(EPSILON, outState); + outState.addTransition(EPSILON, fragment.in); + + return new NFA$1(inState, outState); +} + +/** + * Optimized Kleene-star: just adds ε-transitions from + * input to the output, and back. + */ +function rep$1(fragment) { + fragment.in.addTransition(EPSILON, fragment.out); + fragment.out.addTransition(EPSILON, fragment.in); + return fragment; +} + +/** + * Optimized Plus: just adds ε-transitions from + * the output to the input. + */ +function plusRep$1(fragment) { + fragment.out.addTransition(EPSILON, fragment.in); + return fragment; +} + +/** + * Optimized ? repetition: just adds ε-transitions from + * the input to the output. + */ +function questionRep$1(fragment) { + fragment.in.addTransition(EPSILON, fragment.out); + return fragment; +} + +var builders$1 = { + alt: alt$1, + char: char$1, + e: e, + or: or$1, + rep: rep$1, + repExplicit: repExplicit, + plusRep: plusRep$1, + questionRep: questionRep$1 +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var parser$1 = parser$4; + +var _require$1 = builders$1, + alt = _require$1.alt, + char = _require$1.char, + or = _require$1.or, + rep = _require$1.rep, + plusRep = _require$1.plusRep, + questionRep = _require$1.questionRep; + +/** + * Helper `gen` function calls node type handler. + */ + + +function gen(node) { + if (node && !generator$1[node.type]) { + throw new Error(node.type + ' is not supported in NFA/DFA interpreter.'); + } + + return node ? generator$1[node.type](node) : ''; +} + +/** + * AST handler. + */ +var generator$1 = { + RegExp: function RegExp(node) { + if (node.flags !== '') { + throw new Error('NFA/DFA: Flags are not supported yet.'); + } + + return gen(node.body); + }, + Alternative: function Alternative(node) { + var fragments = (node.expressions || []).map(gen); + return alt.apply(undefined, _toConsumableArray(fragments)); + }, + Disjunction: function Disjunction(node) { + return or(gen(node.left), gen(node.right)); + }, + Repetition: function Repetition(node) { + switch (node.quantifier.kind) { + case '*': + return rep(gen(node.expression)); + case '+': + return plusRep(gen(node.expression)); + case '?': + return questionRep(gen(node.expression)); + default: + throw new Error('Unknown repeatition: ' + node.quantifier.kind + '.'); + } + }, + Char: function Char(node) { + if (node.kind !== 'simple') { + throw new Error('NFA/DFA: Only simple chars are supported yet.'); + } + + return char(node.value); + }, + Group: function Group(node) { + return gen(node.expression); + } +}; + +var nfaFromRegexp = { + /** + * Builds an NFA from the passed regexp. + */ + build: function build(regexp) { + var ast = regexp; + + if (regexp instanceof RegExp) { + regexp = '' + regexp; + } + + if (typeof regexp === 'string') { + ast = parser$1.parse(regexp, { + captureLocations: true + }); + } + + return gen(ast); + } +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var NFA = nfa; +var DFA = dfa; + +var nfaFromRegExp = nfaFromRegexp; +var builders = builders$1; + +var finiteAutomaton = { + + /** + * Export NFA and DFA classes. + */ + NFA: NFA, + DFA: DFA, + + /** + * Expose builders. + */ + builders: builders, + + /** + * Builds an NFA for the passed regexp. + * + * @param string | AST | RegExp: + * + * a regular expression in different representations: a string, + * a RegExp object, or an AST. + */ + toNFA: function toNFA(regexp) { + return nfaFromRegExp.build(regexp); + }, + + + /** + * Builds DFA for the passed regexp. + * + * @param string | AST | RegExp: + * + * a regular expression in different representations: a string, + * a RegExp object, or an AST. + */ + toDFA: function toDFA(regexp) { + return new DFA(this.toNFA(regexp)); + }, + + + /** + * Returns true if regexp accepts the string. + */ + test: function test(regexp, string) { + return this.toDFA(regexp).matches(string); + } +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +/** + * The `RegExpTree` class provides runtime support for `compat-transpiler` + * module from `regexp-tree`. + * + * E.g. it tracks names of the capturing groups, in order to access the + * names on the matched result. + * + * It's a thin-wrapper on top of original regexp. + */ + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var RegExpTree$1 = function () { + /** + * Initializes a `RegExpTree` instance. + * + * @param RegExp - a regular expression + * + * @param Object state: + * + * An extra state which may store any related to transformation + * data, for example, names of the groups. + * + * - flags - original flags + * - groups - names of the groups, and their indices + * - source - original source + */ + function RegExpTree(re, _ref) { + var flags = _ref.flags, + groups = _ref.groups, + source = _ref.source; + + _classCallCheck(this, RegExpTree); + + this._re = re; + this._groups = groups; + + // Original props. + this.flags = flags; + this.source = source || re.source; + this.dotAll = flags.includes('s'); + + // Inherited directly from `re`. + this.global = re.global; + this.ignoreCase = re.ignoreCase; + this.multiline = re.multiline; + this.sticky = re.sticky; + this.unicode = re.unicode; + } + + /** + * Facade wrapper for RegExp `test` method. + */ + + + _createClass(RegExpTree, [{ + key: 'test', + value: function test(string) { + return this._re.test(string); + } + + /** + * Facade wrapper for RegExp `compile` method. + */ + + }, { + key: 'compile', + value: function compile(string) { + return this._re.compile(string); + } + + /** + * Facade wrapper for RegExp `toString` method. + */ + + }, { + key: 'toString', + value: function toString() { + if (!this._toStringResult) { + this._toStringResult = '/' + this.source + '/' + this.flags; + } + return this._toStringResult; + } + + /** + * Facade wrapper for RegExp `exec` method. + */ + + }, { + key: 'exec', + value: function exec(string) { + var result = this._re.exec(string); + + if (!this._groups || !result) { + return result; + } + + result.groups = {}; + + for (var group in this._groups) { + var groupNumber = this._groups[group]; + result.groups[group] = result[groupNumber]; + } + + return result; + } + }]); + + return RegExpTree; +}(); + +var runtime = { + RegExpTree: RegExpTree$1 +}; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var compatTranspiler = compatTranspiler$1; +var generator = generator_1; +var optimizer = optimizer$1; +var parser = parser$4; +var _transform = transform$1; +var _traverse = traverse$1; +var fa = finiteAutomaton; + +var _require = runtime, + RegExpTree = _require.RegExpTree; + +/** + * An API object for RegExp processing (parsing/transform/generation). + */ + + +var regexpTree$3 = { + /** + * Parser module exposed. + */ + parser: parser, + + /** + * Expose finite-automaton module. + */ + fa: fa, + + /** + * `TransformResult` exposed. + */ + TransformResult: _transform.TransformResult, + + /** + * Parses a regexp string, producing an AST. + * + * @param string regexp + * + * a regular expression in different formats: string, AST, RegExp. + * + * @param Object options + * + * parsing options for this parse call. Default are: + * + * - captureLocations: boolean + * - any other custom options + * + * @return Object AST + */ + parse: function parse(regexp, options) { + return parser.parse('' + regexp, options); + }, + + + /** + * Traverses a RegExp AST. + * + * @param Object ast + * @param Object | Array handlers + * + * Each `handler` is an object containing handler function for needed + * node types. Example: + * + * regexpTree.traverse(ast, { + * onChar(node) { + * ... + * }, + * }); + * + * The value for a node type may also be an object with functions pre and post. + * This enables more context-aware analyses, e.g. measuring star height. + */ + traverse: function traverse(ast, handlers, options) { + return _traverse.traverse(ast, handlers, options); + }, + + + /** + * Transforms a regular expression. + * + * A regexp can be passed in different formats (string, regexp or AST), + * applying a set of transformations. It is a convenient wrapper + * on top of "parse-traverse-generate" tool chain. + * + * @param string | AST | RegExp regexp - a regular expression; + * @param Object | Array handlers - a list of handlers. + * + * @return TransformResult - a transformation result. + */ + transform: function transform(regexp, handlers) { + return _transform.transform(regexp, handlers); + }, + + + /** + * Generates a RegExp string from an AST. + * + * @param Object ast + * + * Invariant: + * + * regexpTree.generate(regexpTree.parse('/[a-z]+/i')); // '/[a-z]+/i' + */ + generate: function generate(ast) { + return generator.generate(ast); + }, + + + /** + * Creates a RegExp object from a regexp string. + * + * @param string regexp + */ + toRegExp: function toRegExp(regexp) { + var compat = this.compatTranspile(regexp); + return new RegExp(compat.getSource(), compat.getFlags()); + }, + + + /** + * Optimizes a regular expression by replacing some + * sub-expressions with their idiomatic patterns. + * + * @param string regexp + * + * @return TransformResult object + */ + optimize: function optimize(regexp, whitelist) { + var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + blacklist = _ref.blacklist; + + return optimizer.optimize(regexp, { whitelist: whitelist, blacklist: blacklist }); + }, + + + /** + * Translates a regular expression in new syntax or in new format + * into equivalent expressions in old syntax. + * + * @param string regexp + * + * @return TransformResult object + */ + compatTranspile: function compatTranspile(regexp, whitelist) { + return compatTranspiler.transform(regexp, whitelist); + }, + + + /** + * Executes a regular expression on a string. + * + * @param RegExp|string re - a regular expression. + * @param string string - a testing string. + */ + exec: function exec(re, string) { + if (typeof re === 'string') { + var compat = this.compatTranspile(re); + var extra = compat.getExtra(); + + if (extra.namedCapturingGroups) { + re = new RegExpTree(compat.toRegExp(), { + flags: compat.getFlags(), + source: compat.getSource(), + groups: extra.namedCapturingGroups + }); + } else { + re = compat.toRegExp(); + } + } + + return re.exec(string); + } +}; + +var regexpTree_1 = regexpTree$3; + +/** + * The MIT License (MIT) + * Copyright (c) 2017-present Dmitry Soshnikov + */ + +var regexpTree$2 = regexpTree_1; + +// Exports an Analyzer subclass + +const regexpTree$1 = regexpTree$2; +const analyzer$1 = analyzer$2; + +class HeuristicAnalyzer extends analyzer$1.Analyzer { + constructor(analyzerOptions) { + super(analyzerOptions); + } + + isVulnerable(regExp) { + // Heuristic #1: Star height > 1 + const starHeight = this._measureStarHeight(regExp); + if (starHeight > 1) { + return true; + } + + // Heuristic #2: # repetitions > limit + // TODO This is a poor heuristic + const nRepetitions = this._measureRepetitions(regExp); + if (nRepetitions > this.options.heuristic_replimit) { + return true; + } + + return false; + } + + genAttackString(regExp) { + return null; + } + + _measureStarHeight(regExp) { + let currentStarHeight = 0; + let maxObservedStarHeight = 0; + + const ast = regexpTree$1.parse(regExp); + + regexpTree$1.traverse(ast, { + Repetition: { + pre({ node }) { + currentStarHeight++; + if (maxObservedStarHeight < currentStarHeight) { + maxObservedStarHeight = currentStarHeight; + } + }, + + post({ node }) { + currentStarHeight--; + } + } + }); + + return maxObservedStarHeight; + } + + _measureRepetitions(regExp) { + let nRepetitions = 0; + + const ast = regexpTree$1.parse(regExp); + regexpTree$1.traverse(ast, { + Repetition: { + pre({ node }) { + nRepetitions++; + } + } + }); + + return nRepetitions; + } +} + +var heuristicAnalyzer$1 = HeuristicAnalyzer; + +// Load the analyzers +const heuristicAnalyzer = heuristicAnalyzer$1; + +var analyzerFamily$1 = [heuristicAnalyzer]; + +const analyzer = analyzer$2; +const analyzerFamily = analyzerFamily$1; + +const DEFAULT_SAFE_REP_LIMIT = 25; +const RET_IS_SAFE = true; +const RET_IS_VULNERABLE = false; + +class Args { + constructor(regExp, analyzerOptions) { + this.regExp = regExp; + this.analyzerOptions = analyzerOptions; + } +} + +function safeRegex(re, opts) { + try { + const args = buildArgs(re, opts); + const analyzerResponses = askAnalyzersIfVulnerable(args); + + // Did any analyzer say true? + if (analyzerResponses.find((isVulnerable) => isVulnerable)) { + return RET_IS_VULNERABLE; + } else { + return RET_IS_SAFE; + } + } catch (err) { + // Invalid or unparseable input + return false; + } +} + +function buildArgs(re, opts) { + // Build AnalyzerOptions + if (!opts) opts = {}; + const heuristic_replimit = opts.limit === undefined ? DEFAULT_SAFE_REP_LIMIT : opts.limit; + + const analyzerOptions = new analyzer.AnalyzerOptions(heuristic_replimit); + + // Build RegExp + let regExp = null; + // Construct a RegExp object + if (re instanceof RegExp) { + regExp = re; + } else if (typeof re === 'string') { + regExp = new RegExp(re); + } else { + regExp = new RegExp(String(re)); + } + + return new Args(regExp, analyzerOptions); +} + +function askAnalyzersIfVulnerable(args) { + let analyzerSaysVulnerable = []; + + // Query the Analyzers + let Analyzer; + for (Analyzer of analyzerFamily) { + try { + const analyzer = new Analyzer(args.analyzerOptions); + analyzerSaysVulnerable.push(analyzer.isVulnerable(args.regExp)); + } catch (err) { + /* istanbul ignore next */ // No need to worry about code coverage here. + analyzerSaysVulnerable.push(false); + } + } + + return analyzerSaysVulnerable; +} + +// Export + +var safeRegex_1 = safeRegex; + +var safeRegex$1 = /*@__PURE__*/getDefaultExportFromCjs(safeRegex_1); + +class SettingTab extends obsidian.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + displSw(cont) { + cont.findAll(".setting-item").forEach((el) => { + if (el.getAttr("class").includes("media_folder_set")) { + if (this.plugin.settings.saveAttE === "obsFolder" || + this.plugin.settings.saveAttE === "nextToNote") { + el.hide(); + } + else { + el.show(); + } + } + }); + } + display() { + let { containerEl } = this; + containerEl.empty(); + containerEl.createEl("h1", { text: APP_TITLE }); + containerEl.createEl("div"); + // donheader.createEl("a", { text: "Support the project! ", href: "https://www.buymeacoffee.com/sergeikorneev", cls: "donheader_txt" }) + containerEl.createEl("h3", { text: "Interface settings" }); + new obsidian.Setting(containerEl) + .setName("Show notifications") + .setDesc("Show notifications when pages were processed.") + .addToggle((toggle) => toggle + .setValue(this.plugin.settings.showNotifications) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.showNotifications = value; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName("Disable additional commands") + .setDesc("Do not show additional commands in command palette. Reload the plugin in settings to take effect (turn off/on).") + .addToggle((toggle) => toggle + .setValue(this.plugin.settings.disAddCom) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.disAddCom = value; + yield this.plugin.saveSettings(); + }))); + containerEl.createEl("h3", { text: "Processing settings" }); + new obsidian.Setting(containerEl) + .setName("Automatic processing") + .setDesc("Process notes on create/copy/paste.") + .addToggle((toggle) => toggle + .setValue(this.plugin.settings.realTimeUpdate) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.realTimeUpdate = value; + yield this.plugin.saveSettings(); + this.plugin.setupQueueInterval(); + }))); + new obsidian.Setting(containerEl) + .setName("Automatic processing interval") + .setDesc("Interval in seconds for processing update. It takes some time to reveal changed content of a note to plugins.") + .addText((text) => text + .setValue(String(this.plugin.settings.realTimeUpdateInterval)) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + let numberValue = Number(value); + if (isNaN(numberValue) || + !Number.isInteger(numberValue) || + numberValue <= 5 || + numberValue > 3600) { + displayError("The value should be a positive integer number between 5 and 3600!"); + return; + } + if (numberValue < 5) { + numberValue = 5; + } + this.plugin.settings.realTimeUpdateInterval = numberValue; + yield this.plugin.saveSettings(); + this.plugin.setupQueueInterval(); + }))); + new obsidian.Setting(containerEl) + .setName("Number of retries for every single attachment") + .setDesc("If an error occurs during downloading (network etc.) try to re-download several times.") + .addText((text) => text + .setValue(String(this.plugin.settings.tryCount)) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + let numberValue = Number(value); + if (isNaN(numberValue) || + !Number.isInteger(numberValue) || + numberValue < 1 || + numberValue > 6) { + displayError("The value should be a positive integer number between 1 and 6!"); + return; + } + this.plugin.settings.tryCount = numberValue; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName("Process all new markdown files") + .setDesc("Process all new created/cloud-synced files with corresponding extensions.") + .addToggle((toggle) => toggle + .setValue(this.plugin.settings.processCreated) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.processCreated = value; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName("Process all new attachments") + .setDesc("The plugin will also move all attachments from obsidian default folder to plugin folder.") + .addToggle((toggle) => toggle + .setValue(this.plugin.settings.processAll) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.processAll = value; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName("Use MD5 for new attachments (Pasted images and files)") + .setDesc("The plugin will use MD5 when renaming all new attachments.") + .addToggle((toggle) => toggle + .setValue(this.plugin.settings.useMD5ForNewAtt) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.useMD5ForNewAtt = value; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName("Download unknown filetypes") + .setDesc("Download unknown filetypes and save them with .unknown extension.") + .addToggle((toggle) => toggle + .setValue(this.plugin.settings.downUnknown) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.downUnknown = value; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName("Convert PNG to JPEG (Web Images)") + .setDesc("Convert all downloaded PNG files to JPEG. May reduce file size by several times, but can also affect performance.") + .addToggle((toggle) => toggle + .setValue(this.plugin.settings.PngToJpeg) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.PngToJpeg = value; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName("Convert PNG to JPEG (Pasted Images)") + .setDesc("Convert all pasted PNG files to JPEG. May reduce file size by several times, but can also affect performance.") + .addToggle((toggle) => toggle + .setValue(this.plugin.settings.PngToJpegLocal) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.PngToJpegLocal = value; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName("Jpeg Quality") + .setDesc("Jpeg quality selection (30 to 100).") + .addText((text) => text + .setValue(String(this.plugin.settings.JpegQuality)) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + let numberValue = Number(value); + if (isNaN(numberValue) || + !Number.isInteger(numberValue) || + numberValue < 10 || + numberValue > 100) { + displayError("The value should be a positive integer number between 10 and 100!"); + return; + } + this.plugin.settings.JpegQuality = numberValue; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName("File size lower limit in Kb") + .setDesc("Do not download files with size less than this value. Set 0 for no limit.") + .addText((text) => text + .setValue(String(this.plugin.settings.filesizeLimit)) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + let numberValue = Number(value); + if (isNaN(numberValue) || + !Number.isInteger(numberValue) || + numberValue < 0) { + displayError("The value should be a positive integer!"); + return; + } + if (numberValue < 0) { + numberValue = 0; + } + this.plugin.settings.filesizeLimit = numberValue; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName("Exclusions") + .setDesc("The plugin will not download attachments with these extensions.") + .addText((text) => text + .setValue(this.plugin.settings.ignoredExt) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.ignoredExt = value; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName("Do not create Obsidian attachment folder (For compatibility with other plugins)") + .setDesc("The plugin will not create an Obsidian attachments folder. This may cause the plugin to behave incorrectly. ") + .addToggle((toggle) => toggle + .setValue(this.plugin.settings.DoNotCreateObsFolder) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.DoNotCreateObsFolder = value; + yield this.plugin.saveSettings(); + }))); + containerEl.createEl("h3", { text: "Note settings" }); + new obsidian.Setting(containerEl) + .setName("Preserve link captions") + .setDesc("Add media links captions to converted tags.") + .addToggle((toggle) => toggle + .setValue(this.plugin.settings.useCaptions) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.useCaptions = value; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName("Add original filename or 'Open file' tag") + .setDesc("Add [[original filename]] or [original filename](link to attachment) after replaced tag (only for file:// protocol or dropped/pasted files ).") + .addToggle((toggle) => toggle + .setValue(this.plugin.settings.addNameOfFile) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.addNameOfFile = value; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName("Include pattern") + .setDesc("Include only files with extensions only matching this pattern. Example: md|canvas") + .addText((text) => text.setValue(this.plugin.settings.includeps).onChange((value) => __awaiter(this, void 0, void 0, function* () { + //Transform string to regex + let ExtArray = value.split("|"); + if (ExtArray.length >= 1) { + let regexconverted = trimAny(ExtArray.map((extension) => { if (trimAny(extension, [" ", "|"]) !== "") { + return "(?<" + trimAny(extension, [" ", "|"]) + ">.*\\." + trimAny(extension, [" ", "|"]) + ")"; + } }).join("|"), [" ", "|"]); + if (!safeRegex$1(value)) { + displayError("Unsafe regex! https://www.npmjs.com/package/safe-regex"); + return; + } + this.plugin.settings.includepattern = regexconverted; + logError(regexconverted); + yield this.plugin.saveSettings(); + } + }))); + containerEl.createEl("h3", { text: "Orphaned attachments" }); + new obsidian.Setting(containerEl) + .setName("Remove files completely") + .setDesc("Do not move orphaned files into the garbage can.") + .addToggle((toggle) => toggle + .setValue(this.plugin.settings.removeOrphansCompl) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.removeOrphansCompl = value; + yield this.plugin.saveSettings(); + }))); + containerEl.createEl("h3", { text: "Media folder settings" }); + new obsidian.Setting(containerEl) + .setName("How to write paths in tags") + .setDesc("Select whether to write full paths in tags or not.") + .addDropdown((text) => text + .addOption("fullDirPath", "Full path") + .addOption("onlyRelative", "Relative to note") + .addOption("baseFileName", "Only filename") + .setValue(this.plugin.settings.pathInTags) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.pathInTags = value; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName("Date format") + .setDesc("Date format for ${date} variable. E.g. \ + | MMMM Do YYYY, h:mm:ss a (March 20th 2024, 10:54:46 am) \ + | dddd (Wednesday)\ + | MMM Do YY (Mar 20th 24)") + .addText((text) => text.setValue(this.plugin.settings.DateFormat).onChange((value) => __awaiter(this, void 0, void 0, function* () { + if (value.match(/(\)|\(|\"|\'|\#|\]|\[|\:|\>|\<|\*|\|)/g) !== null) { + displayError("Unsafe folder name! Some chars are forbidden in some filesystems."); + return; + } + this.plugin.settings.DateFormat = value; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName("Folder to save new attachments") + .setDesc("Select where all new attachments will be saved.\nYou can use templates e.g. _resouces/${date}/${notename}") + .addDropdown((text) => text + .addOption("obsFolder", "Copy Obsidian settings") + .addOption("inFolderBelow", "In the root folder specified below") + .addOption("nextToNoteS", "Next to note in the folder specified below") + .setValue(this.plugin.settings.saveAttE) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.saveAttE = value; + this.displSw(containerEl); + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName("Move/delete/rename media folder") + .setDesc("Rename or move this folder to the obsidian or system garbage can when the associated note is deleted/renamed/moved. \ + This setting takes effect only if the path contains ${notename} template at the end\ + and the options 'Next to note in the folder specified below' / 'Relative to note' are selected.\ + Use this setting at your own risk.") + .setClass("media_folder_set") + .addToggle((toggle) => toggle + .setValue(this.plugin.settings.removeMediaFolder) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.removeMediaFolder = value; + yield this.plugin.saveSettings(); + }))); + new obsidian.Setting(containerEl) + .setName("Media folder") + .setDesc("Folder to keep all downloaded media files.") + .setClass("media_folder_set") + .addText((text) => text + .setValue(this.plugin.settings.mediaRootDir) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + if (value.match(/(\)|\(|\"|\'|\#|\]|\[|\:|\>|\<|\*|\|)/g) !== null) { + displayError("Unsafe folder name! Some chars are forbidden in some filesystems."); + return; + } + this.plugin.settings.mediaRootDir = value; + yield this.plugin.saveSettings(); + }))); + containerEl.createEl("h3", { text: "Troubleshooting" }); + new obsidian.Setting(containerEl) + .setName("Debug") + .setDesc("Enable debug output to console.") + .addToggle((toggle) => toggle + .setValue(VERBOSE) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + setDebug(value); + yield this.plugin.saveSettings(); + }))); + this.displSw(containerEl); + } +} + +var AsyncLock$1 = function (opts) { + opts = opts || {}; + + this.Promise = opts.Promise || Promise; + + // format: {key : [fn, fn]} + // queues[key] = null indicates no job running for key + this.queues = Object.create(null); + + // lock is reentrant for same domain + this.domainReentrant = opts.domainReentrant || false; + if (this.domainReentrant) { + if (typeof process === 'undefined' || typeof process.domain === 'undefined') { + throw new Error( + 'Domain-reentrant locks require `process.domain` to exist. Please flip `opts.domainReentrant = false`, ' + + 'use a NodeJS version that still implements Domain, or install a browser polyfill.'); + } + // domain of current running func {key : fn} + this.domains = Object.create(null); + } + + this.timeout = opts.timeout || AsyncLock$1.DEFAULT_TIMEOUT; + this.maxOccupationTime = opts.maxOccupationTime || AsyncLock$1.DEFAULT_MAX_OCCUPATION_TIME; + this.maxExecutionTime = opts.maxExecutionTime || AsyncLock$1.DEFAULT_MAX_EXECUTION_TIME; + if (opts.maxPending === Infinity || (Number.isInteger(opts.maxPending) && opts.maxPending >= 0)) { + this.maxPending = opts.maxPending; + } else { + this.maxPending = AsyncLock$1.DEFAULT_MAX_PENDING; + } +}; + +AsyncLock$1.DEFAULT_TIMEOUT = 0; //Never +AsyncLock$1.DEFAULT_MAX_OCCUPATION_TIME = 0; //Never +AsyncLock$1.DEFAULT_MAX_EXECUTION_TIME = 0; //Never +AsyncLock$1.DEFAULT_MAX_PENDING = 1000; + +/** + * Acquire Locks + * + * @param {String|Array} key resource key or keys to lock + * @param {function} fn async function + * @param {function} cb callback function, otherwise will return a promise + * @param {Object} opts options + */ +AsyncLock$1.prototype.acquire = function (key, fn, cb, opts) { + if (Array.isArray(key)) { + return this._acquireBatch(key, fn, cb, opts); + } + + if (typeof (fn) !== 'function') { + throw new Error('You must pass a function to execute'); + } + + // faux-deferred promise using new Promise() (as Promise.defer is deprecated) + var deferredResolve = null; + var deferredReject = null; + var deferred = null; + + if (typeof (cb) !== 'function') { + opts = cb; + cb = null; + + // will return a promise + deferred = new this.Promise(function(resolve, reject) { + deferredResolve = resolve; + deferredReject = reject; + }); + } + + opts = opts || {}; + + var resolved = false; + var timer = null; + var occupationTimer = null; + var executionTimer = null; + var self = this; + + var done = function (locked, err, ret) { + + if (occupationTimer) { + clearTimeout(occupationTimer); + occupationTimer = null; + } + + if (executionTimer) { + clearTimeout(executionTimer); + executionTimer = null; + } + + if (locked) { + if (!!self.queues[key] && self.queues[key].length === 0) { + delete self.queues[key]; + } + if (self.domainReentrant) { + delete self.domains[key]; + } + } + + if (!resolved) { + if (!deferred) { + if (typeof (cb) === 'function') { + cb(err, ret); + } + } + else { + //promise mode + if (err) { + deferredReject(err); + } + else { + deferredResolve(ret); + } + } + resolved = true; + } + + if (locked) { + //run next func + if (!!self.queues[key] && self.queues[key].length > 0) { + self.queues[key].shift()(); + } + } + }; + + var exec = function (locked) { + if (resolved) { // may due to timed out + return done(locked); + } + + if (timer) { + clearTimeout(timer); + timer = null; + } + + if (self.domainReentrant && locked) { + self.domains[key] = process.domain; + } + + var maxExecutionTime = opts.maxExecutionTime || self.maxExecutionTime; + if (maxExecutionTime) { + executionTimer = setTimeout(function () { + if (!!self.queues[key]) { + done(locked, new Error('Maximum execution time is exceeded ' + key)); + } + }, maxExecutionTime); + } + + // Callback mode + if (fn.length === 1) { + var called = false; + try { + fn(function (err, ret) { + if (!called) { + called = true; + done(locked, err, ret); + } + }); + } catch (err) { + // catching error thrown in user function fn + if (!called) { + called = true; + done(locked, err); + } + } + } + else { + // Promise mode + self._promiseTry(function () { + return fn(); + }) + .then(function(ret){ + done(locked, undefined, ret); + }, function(error){ + done(locked, error); + }); + } + }; + + if (self.domainReentrant && !!process.domain) { + exec = process.domain.bind(exec); + } + + var maxPending = opts.maxPending || self.maxPending; + + if (!self.queues[key]) { + self.queues[key] = []; + exec(true); + } + else if (self.domainReentrant && !!process.domain && process.domain === self.domains[key]) { + // If code is in the same domain of current running task, run it directly + // Since lock is re-enterable + exec(false); + } + else if (self.queues[key].length >= maxPending) { + done(false, new Error('Too many pending tasks in queue ' + key)); + } + else { + var taskFn = function () { + exec(true); + }; + if (opts.skipQueue) { + self.queues[key].unshift(taskFn); + } else { + self.queues[key].push(taskFn); + } + + var timeout = opts.timeout || self.timeout; + if (timeout) { + timer = setTimeout(function () { + timer = null; + done(false, new Error('async-lock timed out in queue ' + key)); + }, timeout); + } + } + + var maxOccupationTime = opts.maxOccupationTime || self.maxOccupationTime; + if (maxOccupationTime) { + occupationTimer = setTimeout(function () { + if (!!self.queues[key]) { + done(false, new Error('Maximum occupation time is exceeded in queue ' + key)); + } + }, maxOccupationTime); + } + + if (deferred) { + return deferred; + } +}; + +/* + * Below is how this function works: + * + * Equivalent code: + * self.acquire(key1, function(cb){ + * self.acquire(key2, function(cb){ + * self.acquire(key3, fn, cb); + * }, cb); + * }, cb); + * + * Equivalent code: + * var fn3 = getFn(key3, fn); + * var fn2 = getFn(key2, fn3); + * var fn1 = getFn(key1, fn2); + * fn1(cb); + */ +AsyncLock$1.prototype._acquireBatch = function (keys, fn, cb, opts) { + if (typeof (cb) !== 'function') { + opts = cb; + cb = null; + } + + var self = this; + var getFn = function (key, fn) { + return function (cb) { + self.acquire(key, fn, cb, opts); + }; + }; + + var fnx = keys.reduceRight(function (prev, key) { + return getFn(key, prev); + }, fn); + + if (typeof (cb) === 'function') { + fnx(cb); + } + else { + return new this.Promise(function (resolve, reject) { + // check for promise mode in case keys is empty array + if (fnx.length === 1) { + fnx(function (err, ret) { + if (err) { + reject(err); + } + else { + resolve(ret); + } + }); + } else { + resolve(fnx()); + } + }); + } +}; + +/* + * Whether there is any running or pending asyncFunc + * + * @param {String} key + */ +AsyncLock$1.prototype.isBusy = function (key) { + if (!key) { + return Object.keys(this.queues).length > 0; + } + else { + return !!this.queues[key]; + } +}; + +/** + * Promise.try() implementation to become independent of Q-specific methods + */ +AsyncLock$1.prototype._promiseTry = function(fn) { + try { + return this.Promise.resolve(fn()); + } catch (e) { + return this.Promise.reject(e); + } +}; + +var lib = AsyncLock$1; + +var asyncLock = lib; + +var AsyncLock = /*@__PURE__*/getDefaultExportFromCjs(asyncLock); + +var moment$1 = {exports: {}}; + +moment$1.exports; + +(function (module, exports) { +(function (global, factory) { + module.exports = factory() ; + }(commonjsGlobal, (function () { + var hookCallback; + + function hooks() { + return hookCallback.apply(null, arguments); + } + + // This is done to register the method called with moment() + // without creating circular dependencies. + function setHookCallback(callback) { + hookCallback = callback; + } + + function isArray(input) { + return ( + input instanceof Array || + Object.prototype.toString.call(input) === '[object Array]' + ); + } + + function isObject(input) { + // IE8 will treat undefined and null as object if it wasn't for + // input != null + return ( + input != null && + Object.prototype.toString.call(input) === '[object Object]' + ); + } + + function hasOwnProp(a, b) { + return Object.prototype.hasOwnProperty.call(a, b); + } + + function isObjectEmpty(obj) { + if (Object.getOwnPropertyNames) { + return Object.getOwnPropertyNames(obj).length === 0; + } else { + var k; + for (k in obj) { + if (hasOwnProp(obj, k)) { + return false; + } + } + return true; + } + } + + function isUndefined(input) { + return input === void 0; + } + + function isNumber(input) { + return ( + typeof input === 'number' || + Object.prototype.toString.call(input) === '[object Number]' + ); + } + + function isDate(input) { + return ( + input instanceof Date || + Object.prototype.toString.call(input) === '[object Date]' + ); + } + + function map(arr, fn) { + var res = [], + i, + arrLen = arr.length; + for (i = 0; i < arrLen; ++i) { + res.push(fn(arr[i], i)); + } + return res; + } + + function extend(a, b) { + for (var i in b) { + if (hasOwnProp(b, i)) { + a[i] = b[i]; + } + } + + if (hasOwnProp(b, 'toString')) { + a.toString = b.toString; + } + + if (hasOwnProp(b, 'valueOf')) { + a.valueOf = b.valueOf; + } + + return a; + } + + function createUTC(input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, true).utc(); + } + + function defaultParsingFlags() { + // We need to deep clone this object. + return { + empty: false, + unusedTokens: [], + unusedInput: [], + overflow: -2, + charsLeftOver: 0, + nullInput: false, + invalidEra: null, + invalidMonth: null, + invalidFormat: false, + userInvalidated: false, + iso: false, + parsedDateParts: [], + era: null, + meridiem: null, + rfc2822: false, + weekdayMismatch: false, + }; + } + + function getParsingFlags(m) { + if (m._pf == null) { + m._pf = defaultParsingFlags(); + } + return m._pf; + } + + var some; + if (Array.prototype.some) { + some = Array.prototype.some; + } else { + some = function (fun) { + var t = Object(this), + len = t.length >>> 0, + i; + + for (i = 0; i < len; i++) { + if (i in t && fun.call(this, t[i], i, t)) { + return true; + } + } + + return false; + }; + } + + function isValid(m) { + var flags = null, + parsedParts = false, + isNowValid = m._d && !isNaN(m._d.getTime()); + if (isNowValid) { + flags = getParsingFlags(m); + parsedParts = some.call(flags.parsedDateParts, function (i) { + return i != null; + }); + isNowValid = + flags.overflow < 0 && + !flags.empty && + !flags.invalidEra && + !flags.invalidMonth && + !flags.invalidWeekday && + !flags.weekdayMismatch && + !flags.nullInput && + !flags.invalidFormat && + !flags.userInvalidated && + (!flags.meridiem || (flags.meridiem && parsedParts)); + if (m._strict) { + isNowValid = + isNowValid && + flags.charsLeftOver === 0 && + flags.unusedTokens.length === 0 && + flags.bigHour === undefined; + } + } + if (Object.isFrozen == null || !Object.isFrozen(m)) { + m._isValid = isNowValid; + } else { + return isNowValid; + } + return m._isValid; + } + + function createInvalid(flags) { + var m = createUTC(NaN); + if (flags != null) { + extend(getParsingFlags(m), flags); + } else { + getParsingFlags(m).userInvalidated = true; + } + + return m; + } + + // Plugins that add properties should also add the key here (null value), + // so we can properly clone ourselves. + var momentProperties = (hooks.momentProperties = []), + updateInProgress = false; + + function copyConfig(to, from) { + var i, + prop, + val, + momentPropertiesLen = momentProperties.length; + + if (!isUndefined(from._isAMomentObject)) { + to._isAMomentObject = from._isAMomentObject; + } + if (!isUndefined(from._i)) { + to._i = from._i; + } + if (!isUndefined(from._f)) { + to._f = from._f; + } + if (!isUndefined(from._l)) { + to._l = from._l; + } + if (!isUndefined(from._strict)) { + to._strict = from._strict; + } + if (!isUndefined(from._tzm)) { + to._tzm = from._tzm; + } + if (!isUndefined(from._isUTC)) { + to._isUTC = from._isUTC; + } + if (!isUndefined(from._offset)) { + to._offset = from._offset; + } + if (!isUndefined(from._pf)) { + to._pf = getParsingFlags(from); + } + if (!isUndefined(from._locale)) { + to._locale = from._locale; + } + + if (momentPropertiesLen > 0) { + for (i = 0; i < momentPropertiesLen; i++) { + prop = momentProperties[i]; + val = from[prop]; + if (!isUndefined(val)) { + to[prop] = val; + } + } + } + + return to; + } + + // Moment prototype object + function Moment(config) { + copyConfig(this, config); + this._d = new Date(config._d != null ? config._d.getTime() : NaN); + if (!this.isValid()) { + this._d = new Date(NaN); + } + // Prevent infinite loop in case updateOffset creates new moment + // objects. + if (updateInProgress === false) { + updateInProgress = true; + hooks.updateOffset(this); + updateInProgress = false; + } + } + + function isMoment(obj) { + return ( + obj instanceof Moment || (obj != null && obj._isAMomentObject != null) + ); + } + + function warn(msg) { + if ( + hooks.suppressDeprecationWarnings === false && + typeof console !== 'undefined' && + console.warn + ) { + console.warn('Deprecation warning: ' + msg); + } + } + + function deprecate(msg, fn) { + var firstTime = true; + + return extend(function () { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(null, msg); + } + if (firstTime) { + var args = [], + arg, + i, + key, + argLen = arguments.length; + for (i = 0; i < argLen; i++) { + arg = ''; + if (typeof arguments[i] === 'object') { + arg += '\n[' + i + '] '; + for (key in arguments[0]) { + if (hasOwnProp(arguments[0], key)) { + arg += key + ': ' + arguments[0][key] + ', '; + } + } + arg = arg.slice(0, -2); // Remove trailing comma and space + } else { + arg = arguments[i]; + } + args.push(arg); + } + warn( + msg + + '\nArguments: ' + + Array.prototype.slice.call(args).join('') + + '\n' + + new Error().stack + ); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); + } + + var deprecations = {}; + + function deprecateSimple(name, msg) { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(name, msg); + } + if (!deprecations[name]) { + warn(msg); + deprecations[name] = true; + } + } + + hooks.suppressDeprecationWarnings = false; + hooks.deprecationHandler = null; + + function isFunction(input) { + return ( + (typeof Function !== 'undefined' && input instanceof Function) || + Object.prototype.toString.call(input) === '[object Function]' + ); + } + + function set(config) { + var prop, i; + for (i in config) { + if (hasOwnProp(config, i)) { + prop = config[i]; + if (isFunction(prop)) { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + } + this._config = config; + // Lenient ordinal parsing accepts just a number in addition to + // number + (possibly) stuff coming from _dayOfMonthOrdinalParse. + // TODO: Remove "ordinalParse" fallback in next major release. + this._dayOfMonthOrdinalParseLenient = new RegExp( + (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + + '|' + + /\d{1,2}/.source + ); + } + + function mergeConfigs(parentConfig, childConfig) { + var res = extend({}, parentConfig), + prop; + for (prop in childConfig) { + if (hasOwnProp(childConfig, prop)) { + if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { + res[prop] = {}; + extend(res[prop], parentConfig[prop]); + extend(res[prop], childConfig[prop]); + } else if (childConfig[prop] != null) { + res[prop] = childConfig[prop]; + } else { + delete res[prop]; + } + } + } + for (prop in parentConfig) { + if ( + hasOwnProp(parentConfig, prop) && + !hasOwnProp(childConfig, prop) && + isObject(parentConfig[prop]) + ) { + // make sure changes to properties don't modify parent config + res[prop] = extend({}, res[prop]); + } + } + return res; + } + + function Locale(config) { + if (config != null) { + this.set(config); + } + } + + var keys; + + if (Object.keys) { + keys = Object.keys; + } else { + keys = function (obj) { + var i, + res = []; + for (i in obj) { + if (hasOwnProp(obj, i)) { + res.push(i); + } + } + return res; + }; + } + + var defaultCalendar = { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }; + + function calendar(key, mom, now) { + var output = this._calendar[key] || this._calendar['sameElse']; + return isFunction(output) ? output.call(mom, now) : output; + } + + function zeroFill(number, targetLength, forceSign) { + var absNumber = '' + Math.abs(number), + zerosToFill = targetLength - absNumber.length, + sign = number >= 0; + return ( + (sign ? (forceSign ? '+' : '') : '-') + + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + + absNumber + ); + } + + var formattingTokens = + /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, + localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, + formatFunctions = {}, + formatTokenFunctions = {}; + + // token: 'M' + // padded: ['MM', 2] + // ordinal: 'Mo' + // callback: function () { this.month() + 1 } + function addFormatToken(token, padded, ordinal, callback) { + var func = callback; + if (typeof callback === 'string') { + func = function () { + return this[callback](); + }; + } + if (token) { + formatTokenFunctions[token] = func; + } + if (padded) { + formatTokenFunctions[padded[0]] = function () { + return zeroFill(func.apply(this, arguments), padded[1], padded[2]); + }; + } + if (ordinal) { + formatTokenFunctions[ordinal] = function () { + return this.localeData().ordinal( + func.apply(this, arguments), + token + ); + }; + } + } + + function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); + } + + function makeFormatFunction(format) { + var array = format.match(formattingTokens), + i, + length; + + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } + + return function (mom) { + var output = '', + i; + for (i = 0; i < length; i++) { + output += isFunction(array[i]) + ? array[i].call(mom, format) + : array[i]; + } + return output; + }; + } + + // format date using native date object + function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } + + format = expandFormat(format, m.localeData()); + formatFunctions[format] = + formatFunctions[format] || makeFormatFunction(format); + + return formatFunctions[format](m); + } + + function expandFormat(format, locale) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } + + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace( + localFormattingTokens, + replaceLongDateFormatTokens + ); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; + } + + var defaultLongDateFormat = { + LTS: 'h:mm:ss A', + LT: 'h:mm A', + L: 'MM/DD/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY h:mm A', + LLLL: 'dddd, MMMM D, YYYY h:mm A', + }; + + function longDateFormat(key) { + var format = this._longDateFormat[key], + formatUpper = this._longDateFormat[key.toUpperCase()]; + + if (format || !formatUpper) { + return format; + } + + this._longDateFormat[key] = formatUpper + .match(formattingTokens) + .map(function (tok) { + if ( + tok === 'MMMM' || + tok === 'MM' || + tok === 'DD' || + tok === 'dddd' + ) { + return tok.slice(1); + } + return tok; + }) + .join(''); + + return this._longDateFormat[key]; + } + + var defaultInvalidDate = 'Invalid date'; + + function invalidDate() { + return this._invalidDate; + } + + var defaultOrdinal = '%d', + defaultDayOfMonthOrdinalParse = /\d{1,2}/; + + function ordinal(number) { + return this._ordinal.replace('%d', number); + } + + var defaultRelativeTime = { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + w: 'a week', + ww: '%d weeks', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }; + + function relativeTime(number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return isFunction(output) + ? output(number, withoutSuffix, string, isFuture) + : output.replace(/%d/i, number); + } + + function pastFuture(diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return isFunction(format) ? format(output) : format.replace(/%s/i, output); + } + + var aliases = { + D: 'date', + dates: 'date', + date: 'date', + d: 'day', + days: 'day', + day: 'day', + e: 'weekday', + weekdays: 'weekday', + weekday: 'weekday', + E: 'isoWeekday', + isoweekdays: 'isoWeekday', + isoweekday: 'isoWeekday', + DDD: 'dayOfYear', + dayofyears: 'dayOfYear', + dayofyear: 'dayOfYear', + h: 'hour', + hours: 'hour', + hour: 'hour', + ms: 'millisecond', + milliseconds: 'millisecond', + millisecond: 'millisecond', + m: 'minute', + minutes: 'minute', + minute: 'minute', + M: 'month', + months: 'month', + month: 'month', + Q: 'quarter', + quarters: 'quarter', + quarter: 'quarter', + s: 'second', + seconds: 'second', + second: 'second', + gg: 'weekYear', + weekyears: 'weekYear', + weekyear: 'weekYear', + GG: 'isoWeekYear', + isoweekyears: 'isoWeekYear', + isoweekyear: 'isoWeekYear', + w: 'week', + weeks: 'week', + week: 'week', + W: 'isoWeek', + isoweeks: 'isoWeek', + isoweek: 'isoWeek', + y: 'year', + years: 'year', + year: 'year', + }; + + function normalizeUnits(units) { + return typeof units === 'string' + ? aliases[units] || aliases[units.toLowerCase()] + : undefined; + } + + function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; + } + + var priorities = { + date: 9, + day: 11, + weekday: 11, + isoWeekday: 11, + dayOfYear: 4, + hour: 13, + millisecond: 16, + minute: 14, + month: 8, + quarter: 7, + second: 15, + weekYear: 1, + isoWeekYear: 1, + week: 5, + isoWeek: 5, + year: 1, + }; + + function getPrioritizedUnits(unitsObj) { + var units = [], + u; + for (u in unitsObj) { + if (hasOwnProp(unitsObj, u)) { + units.push({ unit: u, priority: priorities[u] }); + } + } + units.sort(function (a, b) { + return a.priority - b.priority; + }); + return units; + } + + var match1 = /\d/, // 0 - 9 + match2 = /\d\d/, // 00 - 99 + match3 = /\d{3}/, // 000 - 999 + match4 = /\d{4}/, // 0000 - 9999 + match6 = /[+-]?\d{6}/, // -999999 - 999999 + match1to2 = /\d\d?/, // 0 - 99 + match3to4 = /\d\d\d\d?/, // 999 - 9999 + match5to6 = /\d\d\d\d\d\d?/, // 99999 - 999999 + match1to3 = /\d{1,3}/, // 0 - 999 + match1to4 = /\d{1,4}/, // 0 - 9999 + match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999 + matchUnsigned = /\d+/, // 0 - inf + matchSigned = /[+-]?\d+/, // -inf - inf + matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z + matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z + matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 + // any word (or two) characters or numbers including two/three word month in arabic. + // includes scottish gaelic two word and hyphenated months + matchWord = + /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, + match1to2NoLeadingZero = /^[1-9]\d?/, // 1-99 + match1to2HasZero = /^([1-9]\d|\d)/, // 0-99 + regexes; + + regexes = {}; + + function addRegexToken(token, regex, strictRegex) { + regexes[token] = isFunction(regex) + ? regex + : function (isStrict, localeData) { + return isStrict && strictRegex ? strictRegex : regex; + }; + } + + function getParseRegexForToken(token, config) { + if (!hasOwnProp(regexes, token)) { + return new RegExp(unescapeFormat(token)); + } + + return regexes[token](config._strict, config._locale); + } + + // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + function unescapeFormat(s) { + return regexEscape( + s + .replace('\\', '') + .replace( + /\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, + function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4; + } + ) + ); + } + + function regexEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } + + function absFloor(number) { + if (number < 0) { + // -0 -> 0 + return Math.ceil(number) || 0; + } else { + return Math.floor(number); + } + } + + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + value = absFloor(coercedNumber); + } + + return value; + } + + var tokens = {}; + + function addParseToken(token, callback) { + var i, + func = callback, + tokenLen; + if (typeof token === 'string') { + token = [token]; + } + if (isNumber(callback)) { + func = function (input, array) { + array[callback] = toInt(input); + }; + } + tokenLen = token.length; + for (i = 0; i < tokenLen; i++) { + tokens[token[i]] = func; + } + } + + function addWeekParseToken(token, callback) { + addParseToken(token, function (input, array, config, token) { + config._w = config._w || {}; + callback(input, config._w, config, token); + }); + } + + function addTimeToArrayFromToken(token, input, config) { + if (input != null && hasOwnProp(tokens, token)) { + tokens[token](input, config._a, config, token); + } + } + + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + } + + var YEAR = 0, + MONTH = 1, + DATE = 2, + HOUR = 3, + MINUTE = 4, + SECOND = 5, + MILLISECOND = 6, + WEEK = 7, + WEEKDAY = 8; + + // FORMATTING + + addFormatToken('Y', 0, 0, function () { + var y = this.year(); + return y <= 9999 ? zeroFill(y, 4) : '+' + y; + }); + + addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100; + }); + + addFormatToken(0, ['YYYY', 4], 0, 'year'); + addFormatToken(0, ['YYYYY', 5], 0, 'year'); + addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); + + // PARSING + + addRegexToken('Y', matchSigned); + addRegexToken('YY', match1to2, match2); + addRegexToken('YYYY', match1to4, match4); + addRegexToken('YYYYY', match1to6, match6); + addRegexToken('YYYYYY', match1to6, match6); + + addParseToken(['YYYYY', 'YYYYYY'], YEAR); + addParseToken('YYYY', function (input, array) { + array[YEAR] = + input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); + }); + addParseToken('YY', function (input, array) { + array[YEAR] = hooks.parseTwoDigitYear(input); + }); + addParseToken('Y', function (input, array) { + array[YEAR] = parseInt(input, 10); + }); + + // HELPERS + + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + + // HOOKS + + hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; + + // MOMENTS + + var getSetYear = makeGetSet('FullYear', true); + + function getIsLeapYear() { + return isLeapYear(this.year()); + } + + function makeGetSet(unit, keepTime) { + return function (value) { + if (value != null) { + set$1(this, unit, value); + hooks.updateOffset(this, keepTime); + return this; + } else { + return get(this, unit); + } + }; + } + + function get(mom, unit) { + if (!mom.isValid()) { + return NaN; + } + + var d = mom._d, + isUTC = mom._isUTC; + + switch (unit) { + case 'Milliseconds': + return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds(); + case 'Seconds': + return isUTC ? d.getUTCSeconds() : d.getSeconds(); + case 'Minutes': + return isUTC ? d.getUTCMinutes() : d.getMinutes(); + case 'Hours': + return isUTC ? d.getUTCHours() : d.getHours(); + case 'Date': + return isUTC ? d.getUTCDate() : d.getDate(); + case 'Day': + return isUTC ? d.getUTCDay() : d.getDay(); + case 'Month': + return isUTC ? d.getUTCMonth() : d.getMonth(); + case 'FullYear': + return isUTC ? d.getUTCFullYear() : d.getFullYear(); + default: + return NaN; // Just in case + } + } + + function set$1(mom, unit, value) { + var d, isUTC, year, month, date; + + if (!mom.isValid() || isNaN(value)) { + return; + } + + d = mom._d; + isUTC = mom._isUTC; + + switch (unit) { + case 'Milliseconds': + return void (isUTC + ? d.setUTCMilliseconds(value) + : d.setMilliseconds(value)); + case 'Seconds': + return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value)); + case 'Minutes': + return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value)); + case 'Hours': + return void (isUTC ? d.setUTCHours(value) : d.setHours(value)); + case 'Date': + return void (isUTC ? d.setUTCDate(value) : d.setDate(value)); + // case 'Day': // Not real + // return void (isUTC ? d.setUTCDay(value) : d.setDay(value)); + // case 'Month': // Not used because we need to pass two variables + // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value)); + case 'FullYear': + break; // See below ... + default: + return; // Just in case + } + + year = value; + month = mom.month(); + date = mom.date(); + date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date; + void (isUTC + ? d.setUTCFullYear(year, month, date) + : d.setFullYear(year, month, date)); + } + + // MOMENTS + + function stringGet(units) { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](); + } + return this; + } + + function stringSet(units, value) { + if (typeof units === 'object') { + units = normalizeObjectUnits(units); + var prioritized = getPrioritizedUnits(units), + i, + prioritizedLen = prioritized.length; + for (i = 0; i < prioritizedLen; i++) { + this[prioritized[i].unit](units[prioritized[i].unit]); + } + } else { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](value); + } + } + return this; + } + + function mod(n, x) { + return ((n % x) + x) % x; + } + + var indexOf; + + if (Array.prototype.indexOf) { + indexOf = Array.prototype.indexOf; + } else { + indexOf = function (o) { + // I know + var i; + for (i = 0; i < this.length; ++i) { + if (this[i] === o) { + return i; + } + } + return -1; + }; + } + + function daysInMonth(year, month) { + if (isNaN(year) || isNaN(month)) { + return NaN; + } + var modMonth = mod(month, 12); + year += (month - modMonth) / 12; + return modMonth === 1 + ? isLeapYear(year) + ? 29 + : 28 + : 31 - ((modMonth % 7) % 2); + } + + // FORMATTING + + addFormatToken('M', ['MM', 2], 'Mo', function () { + return this.month() + 1; + }); + + addFormatToken('MMM', 0, 0, function (format) { + return this.localeData().monthsShort(this, format); + }); + + addFormatToken('MMMM', 0, 0, function (format) { + return this.localeData().months(this, format); + }); + + // PARSING + + addRegexToken('M', match1to2, match1to2NoLeadingZero); + addRegexToken('MM', match1to2, match2); + addRegexToken('MMM', function (isStrict, locale) { + return locale.monthsShortRegex(isStrict); + }); + addRegexToken('MMMM', function (isStrict, locale) { + return locale.monthsRegex(isStrict); + }); + + addParseToken(['M', 'MM'], function (input, array) { + array[MONTH] = toInt(input) - 1; + }); + + addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { + var month = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (month != null) { + array[MONTH] = month; + } else { + getParsingFlags(config).invalidMonth = input; + } + }); + + // LOCALES + + var defaultLocaleMonths = + 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + defaultLocaleMonthsShort = + 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/, + defaultMonthsShortRegex = matchWord, + defaultMonthsRegex = matchWord; + + function localeMonths(m, format) { + if (!m) { + return isArray(this._months) + ? this._months + : this._months['standalone']; + } + return isArray(this._months) + ? this._months[m.month()] + : this._months[ + (this._months.isFormat || MONTHS_IN_FORMAT).test(format) + ? 'format' + : 'standalone' + ][m.month()]; + } + + function localeMonthsShort(m, format) { + if (!m) { + return isArray(this._monthsShort) + ? this._monthsShort + : this._monthsShort['standalone']; + } + return isArray(this._monthsShort) + ? this._monthsShort[m.month()] + : this._monthsShort[ + MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone' + ][m.month()]; + } + + function handleStrictParse(monthName, format, strict) { + var i, + ii, + mom, + llc = monthName.toLocaleLowerCase(); + if (!this._monthsParse) { + // this is not used + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + for (i = 0; i < 12; ++i) { + mom = createUTC([2000, i]); + this._shortMonthsParse[i] = this.monthsShort( + mom, + '' + ).toLocaleLowerCase(); + this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'MMM') { + ii = indexOf.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'MMM') { + ii = indexOf.call(this._shortMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._longMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } + } + + function localeMonthsParse(monthName, format, strict) { + var i, mom, regex; + + if (this._monthsParseExact) { + return handleStrictParse.call(this, monthName, format, strict); + } + + if (!this._monthsParse) { + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + } + + // TODO: add sorting + // Sorting makes sure if one month (or abbr) is a prefix of another + // see sorting in computeMonthsParse + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + if (strict && !this._longMonthsParse[i]) { + this._longMonthsParse[i] = new RegExp( + '^' + this.months(mom, '').replace('.', '') + '$', + 'i' + ); + this._shortMonthsParse[i] = new RegExp( + '^' + this.monthsShort(mom, '').replace('.', '') + '$', + 'i' + ); + } + if (!strict && !this._monthsParse[i]) { + regex = + '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if ( + strict && + format === 'MMMM' && + this._longMonthsParse[i].test(monthName) + ) { + return i; + } else if ( + strict && + format === 'MMM' && + this._shortMonthsParse[i].test(monthName) + ) { + return i; + } else if (!strict && this._monthsParse[i].test(monthName)) { + return i; + } + } + } + + // MOMENTS + + function setMonth(mom, value) { + if (!mom.isValid()) { + // No op + return mom; + } + + if (typeof value === 'string') { + if (/^\d+$/.test(value)) { + value = toInt(value); + } else { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (!isNumber(value)) { + return mom; + } + } + } + + var month = value, + date = mom.date(); + + date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month)); + void (mom._isUTC + ? mom._d.setUTCMonth(month, date) + : mom._d.setMonth(month, date)); + return mom; + } + + function getSetMonth(value) { + if (value != null) { + setMonth(this, value); + hooks.updateOffset(this, true); + return this; + } else { + return get(this, 'Month'); + } + } + + function getDaysInMonth() { + return daysInMonth(this.year(), this.month()); + } + + function monthsShortRegex(isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsShortStrictRegex; + } else { + return this._monthsShortRegex; + } + } else { + if (!hasOwnProp(this, '_monthsShortRegex')) { + this._monthsShortRegex = defaultMonthsShortRegex; + } + return this._monthsShortStrictRegex && isStrict + ? this._monthsShortStrictRegex + : this._monthsShortRegex; + } + } + + function monthsRegex(isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsStrictRegex; + } else { + return this._monthsRegex; + } + } else { + if (!hasOwnProp(this, '_monthsRegex')) { + this._monthsRegex = defaultMonthsRegex; + } + return this._monthsStrictRegex && isStrict + ? this._monthsStrictRegex + : this._monthsRegex; + } + } + + function computeMonthsParse() { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var shortPieces = [], + longPieces = [], + mixedPieces = [], + i, + mom, + shortP, + longP; + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + shortP = regexEscape(this.monthsShort(mom, '')); + longP = regexEscape(this.months(mom, '')); + shortPieces.push(shortP); + longPieces.push(longP); + mixedPieces.push(longP); + mixedPieces.push(shortP); + } + // Sorting makes sure if one month (or abbr) is a prefix of another it + // will match the longer piece. + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + + this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._monthsShortRegex = this._monthsRegex; + this._monthsStrictRegex = new RegExp( + '^(' + longPieces.join('|') + ')', + 'i' + ); + this._monthsShortStrictRegex = new RegExp( + '^(' + shortPieces.join('|') + ')', + 'i' + ); + } + + function createDate(y, m, d, h, M, s, ms) { + // can't just apply() to create a date: + // https://stackoverflow.com/q/181348 + var date; + // the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + date = new Date(y + 400, m, d, h, M, s, ms); + if (isFinite(date.getFullYear())) { + date.setFullYear(y); + } + } else { + date = new Date(y, m, d, h, M, s, ms); + } + + return date; + } + + function createUTCDate(y) { + var date, args; + // the Date.UTC function remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + args = Array.prototype.slice.call(arguments); + // preserve leap years using a full 400 year cycle, then reset + args[0] = y + 400; + date = new Date(Date.UTC.apply(null, args)); + if (isFinite(date.getUTCFullYear())) { + date.setUTCFullYear(y); + } + } else { + date = new Date(Date.UTC.apply(null, arguments)); + } + + return date; + } + + // start-of-first-week - start-of-year + function firstWeekOffset(year, dow, doy) { + var // first-week day -- which january is always in the first week (4 for iso, 1 for other) + fwd = 7 + dow - doy, + // first-week day local weekday -- which local weekday is fwd + fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; + + return -fwdlw + fwd - 1; + } + + // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday + function dayOfYearFromWeeks(year, week, weekday, dow, doy) { + var localWeekday = (7 + weekday - dow) % 7, + weekOffset = firstWeekOffset(year, dow, doy), + dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, + resYear, + resDayOfYear; + + if (dayOfYear <= 0) { + resYear = year - 1; + resDayOfYear = daysInYear(resYear) + dayOfYear; + } else if (dayOfYear > daysInYear(year)) { + resYear = year + 1; + resDayOfYear = dayOfYear - daysInYear(year); + } else { + resYear = year; + resDayOfYear = dayOfYear; + } + + return { + year: resYear, + dayOfYear: resDayOfYear, + }; + } + + function weekOfYear(mom, dow, doy) { + var weekOffset = firstWeekOffset(mom.year(), dow, doy), + week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, + resWeek, + resYear; + + if (week < 1) { + resYear = mom.year() - 1; + resWeek = week + weeksInYear(resYear, dow, doy); + } else if (week > weeksInYear(mom.year(), dow, doy)) { + resWeek = week - weeksInYear(mom.year(), dow, doy); + resYear = mom.year() + 1; + } else { + resYear = mom.year(); + resWeek = week; + } + + return { + week: resWeek, + year: resYear, + }; + } + + function weeksInYear(year, dow, doy) { + var weekOffset = firstWeekOffset(year, dow, doy), + weekOffsetNext = firstWeekOffset(year + 1, dow, doy); + return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; + } + + // FORMATTING + + addFormatToken('w', ['ww', 2], 'wo', 'week'); + addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); + + // PARSING + + addRegexToken('w', match1to2, match1to2NoLeadingZero); + addRegexToken('ww', match1to2, match2); + addRegexToken('W', match1to2, match1to2NoLeadingZero); + addRegexToken('WW', match1to2, match2); + + addWeekParseToken( + ['w', 'ww', 'W', 'WW'], + function (input, week, config, token) { + week[token.substr(0, 1)] = toInt(input); + } + ); + + // HELPERS + + // LOCALES + + function localeWeek(mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; + } + + var defaultLocaleWeek = { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }; + + function localeFirstDayOfWeek() { + return this._week.dow; + } + + function localeFirstDayOfYear() { + return this._week.doy; + } + + // MOMENTS + + function getSetWeek(input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); + } + + function getSetISOWeek(input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); + } + + // FORMATTING + + addFormatToken('d', 0, 'do', 'day'); + + addFormatToken('dd', 0, 0, function (format) { + return this.localeData().weekdaysMin(this, format); + }); + + addFormatToken('ddd', 0, 0, function (format) { + return this.localeData().weekdaysShort(this, format); + }); + + addFormatToken('dddd', 0, 0, function (format) { + return this.localeData().weekdays(this, format); + }); + + addFormatToken('e', 0, 0, 'weekday'); + addFormatToken('E', 0, 0, 'isoWeekday'); + + // PARSING + + addRegexToken('d', match1to2); + addRegexToken('e', match1to2); + addRegexToken('E', match1to2); + addRegexToken('dd', function (isStrict, locale) { + return locale.weekdaysMinRegex(isStrict); + }); + addRegexToken('ddd', function (isStrict, locale) { + return locale.weekdaysShortRegex(isStrict); + }); + addRegexToken('dddd', function (isStrict, locale) { + return locale.weekdaysRegex(isStrict); + }); + + addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { + var weekday = config._locale.weekdaysParse(input, token, config._strict); + // if we didn't get a weekday name, mark the date as invalid + if (weekday != null) { + week.d = weekday; + } else { + getParsingFlags(config).invalidWeekday = input; + } + }); + + addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { + week[token] = toInt(input); + }); + + // HELPERS + + function parseWeekday(input, locale) { + if (typeof input !== 'string') { + return input; + } + + if (!isNaN(input)) { + return parseInt(input, 10); + } + + input = locale.weekdaysParse(input); + if (typeof input === 'number') { + return input; + } + + return null; + } + + function parseIsoWeekday(input, locale) { + if (typeof input === 'string') { + return locale.weekdaysParse(input) % 7 || 7; + } + return isNaN(input) ? null : input; + } + + // LOCALES + function shiftWeekdays(ws, n) { + return ws.slice(n, 7).concat(ws.slice(0, n)); + } + + var defaultLocaleWeekdays = + 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + defaultWeekdaysRegex = matchWord, + defaultWeekdaysShortRegex = matchWord, + defaultWeekdaysMinRegex = matchWord; + + function localeWeekdays(m, format) { + var weekdays = isArray(this._weekdays) + ? this._weekdays + : this._weekdays[ + m && m !== true && this._weekdays.isFormat.test(format) + ? 'format' + : 'standalone' + ]; + return m === true + ? shiftWeekdays(weekdays, this._week.dow) + : m + ? weekdays[m.day()] + : weekdays; + } + + function localeWeekdaysShort(m) { + return m === true + ? shiftWeekdays(this._weekdaysShort, this._week.dow) + : m + ? this._weekdaysShort[m.day()] + : this._weekdaysShort; + } + + function localeWeekdaysMin(m) { + return m === true + ? shiftWeekdays(this._weekdaysMin, this._week.dow) + : m + ? this._weekdaysMin[m.day()] + : this._weekdaysMin; + } + + function handleStrictParse$1(weekdayName, format, strict) { + var i, + ii, + mom, + llc = weekdayName.toLocaleLowerCase(); + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._shortWeekdaysParse = []; + this._minWeekdaysParse = []; + + for (i = 0; i < 7; ++i) { + mom = createUTC([2000, 1]).day(i); + this._minWeekdaysParse[i] = this.weekdaysMin( + mom, + '' + ).toLocaleLowerCase(); + this._shortWeekdaysParse[i] = this.weekdaysShort( + mom, + '' + ).toLocaleLowerCase(); + this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); + } + } + + if (strict) { + if (format === 'dddd') { + ii = indexOf.call(this._weekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'dddd') { + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._minWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } + } + } + + function localeWeekdaysParse(weekdayName, format, strict) { + var i, mom, regex; + + if (this._weekdaysParseExact) { + return handleStrictParse$1.call(this, weekdayName, format, strict); + } + + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._minWeekdaysParse = []; + this._shortWeekdaysParse = []; + this._fullWeekdaysParse = []; + } + + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + + mom = createUTC([2000, 1]).day(i); + if (strict && !this._fullWeekdaysParse[i]) { + this._fullWeekdaysParse[i] = new RegExp( + '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + this._shortWeekdaysParse[i] = new RegExp( + '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + this._minWeekdaysParse[i] = new RegExp( + '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + } + if (!this._weekdaysParse[i]) { + regex = + '^' + + this.weekdays(mom, '') + + '|^' + + this.weekdaysShort(mom, '') + + '|^' + + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if ( + strict && + format === 'dddd' && + this._fullWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if ( + strict && + format === 'ddd' && + this._shortWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if ( + strict && + format === 'dd' && + this._minWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } + } + + // MOMENTS + + function getSetDayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + + var day = get(this, 'Day'); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } + } + + function getSetLocaleDayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); + } + + function getSetISODayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + + if (input != null) { + var weekday = parseIsoWeekday(input, this.localeData()); + return this.day(this.day() % 7 ? weekday : weekday - 7); + } else { + return this.day() || 7; + } + } + + function weekdaysRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysStrictRegex; + } else { + return this._weekdaysRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysRegex')) { + this._weekdaysRegex = defaultWeekdaysRegex; + } + return this._weekdaysStrictRegex && isStrict + ? this._weekdaysStrictRegex + : this._weekdaysRegex; + } + } + + function weekdaysShortRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysShortStrictRegex; + } else { + return this._weekdaysShortRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysShortRegex')) { + this._weekdaysShortRegex = defaultWeekdaysShortRegex; + } + return this._weekdaysShortStrictRegex && isStrict + ? this._weekdaysShortStrictRegex + : this._weekdaysShortRegex; + } + } + + function weekdaysMinRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysMinStrictRegex; + } else { + return this._weekdaysMinRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysMinRegex')) { + this._weekdaysMinRegex = defaultWeekdaysMinRegex; + } + return this._weekdaysMinStrictRegex && isStrict + ? this._weekdaysMinStrictRegex + : this._weekdaysMinRegex; + } + } + + function computeWeekdaysParse() { + function cmpLenRev(a, b) { + return b.length - a.length; + } + + var minPieces = [], + shortPieces = [], + longPieces = [], + mixedPieces = [], + i, + mom, + minp, + shortp, + longp; + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, 1]).day(i); + minp = regexEscape(this.weekdaysMin(mom, '')); + shortp = regexEscape(this.weekdaysShort(mom, '')); + longp = regexEscape(this.weekdays(mom, '')); + minPieces.push(minp); + shortPieces.push(shortp); + longPieces.push(longp); + mixedPieces.push(minp); + mixedPieces.push(shortp); + mixedPieces.push(longp); + } + // Sorting makes sure if one weekday (or abbr) is a prefix of another it + // will match the longer piece. + minPieces.sort(cmpLenRev); + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + + this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._weekdaysShortRegex = this._weekdaysRegex; + this._weekdaysMinRegex = this._weekdaysRegex; + + this._weekdaysStrictRegex = new RegExp( + '^(' + longPieces.join('|') + ')', + 'i' + ); + this._weekdaysShortStrictRegex = new RegExp( + '^(' + shortPieces.join('|') + ')', + 'i' + ); + this._weekdaysMinStrictRegex = new RegExp( + '^(' + minPieces.join('|') + ')', + 'i' + ); + } + + // FORMATTING + + function hFormat() { + return this.hours() % 12 || 12; + } + + function kFormat() { + return this.hours() || 24; + } + + addFormatToken('H', ['HH', 2], 0, 'hour'); + addFormatToken('h', ['hh', 2], 0, hFormat); + addFormatToken('k', ['kk', 2], 0, kFormat); + + addFormatToken('hmm', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); + }); + + addFormatToken('hmmss', 0, 0, function () { + return ( + '' + + hFormat.apply(this) + + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2) + ); + }); + + addFormatToken('Hmm', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2); + }); + + addFormatToken('Hmmss', 0, 0, function () { + return ( + '' + + this.hours() + + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2) + ); + }); + + function meridiem(token, lowercase) { + addFormatToken(token, 0, 0, function () { + return this.localeData().meridiem( + this.hours(), + this.minutes(), + lowercase + ); + }); + } + + meridiem('a', true); + meridiem('A', false); + + // PARSING + + function matchMeridiem(isStrict, locale) { + return locale._meridiemParse; + } + + addRegexToken('a', matchMeridiem); + addRegexToken('A', matchMeridiem); + addRegexToken('H', match1to2, match1to2HasZero); + addRegexToken('h', match1to2, match1to2NoLeadingZero); + addRegexToken('k', match1to2, match1to2NoLeadingZero); + addRegexToken('HH', match1to2, match2); + addRegexToken('hh', match1to2, match2); + addRegexToken('kk', match1to2, match2); + + addRegexToken('hmm', match3to4); + addRegexToken('hmmss', match5to6); + addRegexToken('Hmm', match3to4); + addRegexToken('Hmmss', match5to6); + + addParseToken(['H', 'HH'], HOUR); + addParseToken(['k', 'kk'], function (input, array, config) { + var kInput = toInt(input); + array[HOUR] = kInput === 24 ? 0 : kInput; + }); + addParseToken(['a', 'A'], function (input, array, config) { + config._isPm = config._locale.isPM(input); + config._meridiem = input; + }); + addParseToken(['h', 'hh'], function (input, array, config) { + array[HOUR] = toInt(input); + getParsingFlags(config).bigHour = true; + }); + addParseToken('hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + getParsingFlags(config).bigHour = true; + }); + addParseToken('hmmss', function (input, array, config) { + var pos1 = input.length - 4, + pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + getParsingFlags(config).bigHour = true; + }); + addParseToken('Hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + }); + addParseToken('Hmmss', function (input, array, config) { + var pos1 = input.length - 4, + pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + }); + + // LOCALES + + function localeIsPM(input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return (input + '').toLowerCase().charAt(0) === 'p'; + } + + var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i, + // Setting the hour should keep the time, because the user explicitly + // specified which hour they want. So trying to maintain the same hour (in + // a new timezone) makes sense. Adding/subtracting hours does not follow + // this rule. + getSetHour = makeGetSet('Hours', true); + + function localeMeridiem(hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } + } + + var baseConfig = { + calendar: defaultCalendar, + longDateFormat: defaultLongDateFormat, + invalidDate: defaultInvalidDate, + ordinal: defaultOrdinal, + dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse, + relativeTime: defaultRelativeTime, + + months: defaultLocaleMonths, + monthsShort: defaultLocaleMonthsShort, + + week: defaultLocaleWeek, + + weekdays: defaultLocaleWeekdays, + weekdaysMin: defaultLocaleWeekdaysMin, + weekdaysShort: defaultLocaleWeekdaysShort, + + meridiemParse: defaultLocaleMeridiemParse, + }; + + // internal storage for locale config files + var locales = {}, + localeFamilies = {}, + globalLocale; + + function commonPrefix(arr1, arr2) { + var i, + minl = Math.min(arr1.length, arr2.length); + for (i = 0; i < minl; i += 1) { + if (arr1[i] !== arr2[i]) { + return i; + } + } + return minl; + } + + function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; + } + + // pick the locale from the array + // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each + // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root + function chooseLocale(names) { + var i = 0, + j, + next, + locale, + split; + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if ( + next && + next.length >= j && + commonPrefix(split, next) >= j - 1 + ) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return globalLocale; + } + + function isLocaleNameSane(name) { + // Prevent names that look like filesystem paths, i.e contain '/' or '\' + // Ensure name is available and function returns boolean + return !!(name && name.match('^[^/\\\\]*$')); + } + + function loadLocale(name) { + var oldLocale = null, + aliasedRequire; + // TODO: Find a better way to register and load all the locales in Node + if ( + locales[name] === undefined && + 'object' !== 'undefined' && + module && + module.exports && + isLocaleNameSane(name) + ) { + try { + oldLocale = globalLocale._abbr; + aliasedRequire = commonjsRequire; + aliasedRequire('./locale/' + name); + getSetGlobalLocale(oldLocale); + } catch (e) { + // mark as not found to avoid repeating expensive file require call causing high CPU + // when trying to find en-US, en_US, en-us for every format call + locales[name] = null; // null means not found + } + } + return locales[name]; + } + + // This function will load locale and then set the global locale. If + // no arguments are passed in, it will simply return the current global + // locale key. + function getSetGlobalLocale(key, values) { + var data; + if (key) { + if (isUndefined(values)) { + data = getLocale(key); + } else { + data = defineLocale(key, values); + } + + if (data) { + // moment.duration._locale = moment._locale = data; + globalLocale = data; + } else { + if (typeof console !== 'undefined' && console.warn) { + //warn user if arguments are passed but the locale could not be set + console.warn( + 'Locale ' + key + ' not found. Did you forget to load it?' + ); + } + } + } + + return globalLocale._abbr; + } + + function defineLocale(name, config) { + if (config !== null) { + var locale, + parentConfig = baseConfig; + config.abbr = name; + if (locales[name] != null) { + deprecateSimple( + 'defineLocaleOverride', + 'use moment.updateLocale(localeName, config) to change ' + + 'an existing locale. moment.defineLocale(localeName, ' + + 'config) should only be used for creating a new locale ' + + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.' + ); + parentConfig = locales[name]._config; + } else if (config.parentLocale != null) { + if (locales[config.parentLocale] != null) { + parentConfig = locales[config.parentLocale]._config; + } else { + locale = loadLocale(config.parentLocale); + if (locale != null) { + parentConfig = locale._config; + } else { + if (!localeFamilies[config.parentLocale]) { + localeFamilies[config.parentLocale] = []; + } + localeFamilies[config.parentLocale].push({ + name: name, + config: config, + }); + return null; + } + } + } + locales[name] = new Locale(mergeConfigs(parentConfig, config)); + + if (localeFamilies[name]) { + localeFamilies[name].forEach(function (x) { + defineLocale(x.name, x.config); + }); + } + + // backwards compat for now: also set the locale + // make sure we set the locale AFTER all child locales have been + // created, so we won't end up with the child locale set. + getSetGlobalLocale(name); + + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } + } + + function updateLocale(name, config) { + if (config != null) { + var locale, + tmpLocale, + parentConfig = baseConfig; + + if (locales[name] != null && locales[name].parentLocale != null) { + // Update existing child locale in-place to avoid memory-leaks + locales[name].set(mergeConfigs(locales[name]._config, config)); + } else { + // MERGE + tmpLocale = loadLocale(name); + if (tmpLocale != null) { + parentConfig = tmpLocale._config; + } + config = mergeConfigs(parentConfig, config); + if (tmpLocale == null) { + // updateLocale is called for creating a new locale + // Set abbr so it will have a name (getters return + // undefined otherwise). + config.abbr = name; + } + locale = new Locale(config); + locale.parentLocale = locales[name]; + locales[name] = locale; + } + + // backwards compat for now: also set the locale + getSetGlobalLocale(name); + } else { + // pass null for config to unupdate, useful for tests + if (locales[name] != null) { + if (locales[name].parentLocale != null) { + locales[name] = locales[name].parentLocale; + if (name === getSetGlobalLocale()) { + getSetGlobalLocale(name); + } + } else if (locales[name] != null) { + delete locales[name]; + } + } + } + return locales[name]; + } + + // returns locale data + function getLocale(key) { + var locale; + + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } + + if (!key) { + return globalLocale; + } + + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + + return chooseLocale(key); + } + + function listLocales() { + return keys(locales); + } + + function checkOverflow(m) { + var overflow, + a = m._a; + + if (a && getParsingFlags(m).overflow === -2) { + overflow = + a[MONTH] < 0 || a[MONTH] > 11 + ? MONTH + : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) + ? DATE + : a[HOUR] < 0 || + a[HOUR] > 24 || + (a[HOUR] === 24 && + (a[MINUTE] !== 0 || + a[SECOND] !== 0 || + a[MILLISECOND] !== 0)) + ? HOUR + : a[MINUTE] < 0 || a[MINUTE] > 59 + ? MINUTE + : a[SECOND] < 0 || a[SECOND] > 59 + ? SECOND + : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 + ? MILLISECOND + : -1; + + if ( + getParsingFlags(m)._overflowDayOfYear && + (overflow < YEAR || overflow > DATE) + ) { + overflow = DATE; + } + if (getParsingFlags(m)._overflowWeeks && overflow === -1) { + overflow = WEEK; + } + if (getParsingFlags(m)._overflowWeekday && overflow === -1) { + overflow = WEEKDAY; + } + + getParsingFlags(m).overflow = overflow; + } + + return m; + } + + // iso 8601 regex + // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) + var extendedIsoRegex = + /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + basicIsoRegex = + /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + tzRegex = /Z|[+-]\d\d(?::?\d\d)?/, + isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], + ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], + ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], + ['GGGG-[W]WW', /\d{4}-W\d\d/, false], + ['YYYY-DDD', /\d{4}-\d{3}/], + ['YYYY-MM', /\d{4}-\d\d/, false], + ['YYYYYYMMDD', /[+-]\d{10}/], + ['YYYYMMDD', /\d{8}/], + ['GGGG[W]WWE', /\d{4}W\d{3}/], + ['GGGG[W]WW', /\d{4}W\d{2}/, false], + ['YYYYDDD', /\d{7}/], + ['YYYYMM', /\d{6}/, false], + ['YYYY', /\d{4}/, false], + ], + // iso time formats and regexes + isoTimes = [ + ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], + ['HH:mm:ss', /\d\d:\d\d:\d\d/], + ['HH:mm', /\d\d:\d\d/], + ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], + ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], + ['HHmmss', /\d\d\d\d\d\d/], + ['HHmm', /\d\d\d\d/], + ['HH', /\d\d/], + ], + aspNetJsonRegex = /^\/?Date\((-?\d+)/i, + // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3 + rfc2822 = + /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/, + obsOffsets = { + UT: 0, + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60, + }; + + // date from iso format + function configFromISO(config) { + var i, + l, + string = config._i, + match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), + allowTime, + dateFormat, + timeFormat, + tzFormat, + isoDatesLen = isoDates.length, + isoTimesLen = isoTimes.length; + + if (match) { + getParsingFlags(config).iso = true; + for (i = 0, l = isoDatesLen; i < l; i++) { + if (isoDates[i][1].exec(match[1])) { + dateFormat = isoDates[i][0]; + allowTime = isoDates[i][2] !== false; + break; + } + } + if (dateFormat == null) { + config._isValid = false; + return; + } + if (match[3]) { + for (i = 0, l = isoTimesLen; i < l; i++) { + if (isoTimes[i][1].exec(match[3])) { + // match[2] should be 'T' or space + timeFormat = (match[2] || ' ') + isoTimes[i][0]; + break; + } + } + if (timeFormat == null) { + config._isValid = false; + return; + } + } + if (!allowTime && timeFormat != null) { + config._isValid = false; + return; + } + if (match[4]) { + if (tzRegex.exec(match[4])) { + tzFormat = 'Z'; + } else { + config._isValid = false; + return; + } + } + config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); + configFromStringAndFormat(config); + } else { + config._isValid = false; + } + } + + function extractFromRFC2822Strings( + yearStr, + monthStr, + dayStr, + hourStr, + minuteStr, + secondStr + ) { + var result = [ + untruncateYear(yearStr), + defaultLocaleMonthsShort.indexOf(monthStr), + parseInt(dayStr, 10), + parseInt(hourStr, 10), + parseInt(minuteStr, 10), + ]; + + if (secondStr) { + result.push(parseInt(secondStr, 10)); + } + + return result; + } + + function untruncateYear(yearStr) { + var year = parseInt(yearStr, 10); + if (year <= 49) { + return 2000 + year; + } else if (year <= 999) { + return 1900 + year; + } + return year; + } + + function preprocessRFC2822(s) { + // Remove comments and folding whitespace and replace multiple-spaces with a single space + return s + .replace(/\([^()]*\)|[\n\t]/g, ' ') + .replace(/(\s\s+)/g, ' ') + .replace(/^\s\s*/, '') + .replace(/\s\s*$/, ''); + } + + function checkWeekday(weekdayStr, parsedInput, config) { + if (weekdayStr) { + // TODO: Replace the vanilla JS Date object with an independent day-of-week check. + var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), + weekdayActual = new Date( + parsedInput[0], + parsedInput[1], + parsedInput[2] + ).getDay(); + if (weekdayProvided !== weekdayActual) { + getParsingFlags(config).weekdayMismatch = true; + config._isValid = false; + return false; + } + } + return true; + } + + function calculateOffset(obsOffset, militaryOffset, numOffset) { + if (obsOffset) { + return obsOffsets[obsOffset]; + } else if (militaryOffset) { + // the only allowed military tz is Z + return 0; + } else { + var hm = parseInt(numOffset, 10), + m = hm % 100, + h = (hm - m) / 100; + return h * 60 + m; + } + } + + // date and time from ref 2822 format + function configFromRFC2822(config) { + var match = rfc2822.exec(preprocessRFC2822(config._i)), + parsedArray; + if (match) { + parsedArray = extractFromRFC2822Strings( + match[4], + match[3], + match[2], + match[5], + match[6], + match[7] + ); + if (!checkWeekday(match[1], parsedArray, config)) { + return; + } + + config._a = parsedArray; + config._tzm = calculateOffset(match[8], match[9], match[10]); + + config._d = createUTCDate.apply(null, config._a); + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + + getParsingFlags(config).rfc2822 = true; + } else { + config._isValid = false; + } + } + + // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict + function configFromString(config) { + var matched = aspNetJsonRegex.exec(config._i); + if (matched !== null) { + config._d = new Date(+matched[1]); + return; + } + + configFromISO(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + configFromRFC2822(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } + + if (config._strict) { + config._isValid = false; + } else { + // Final attempt, use Input Fallback + hooks.createFromInputFallback(config); + } + } + + hooks.createFromInputFallback = deprecate( + 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + + 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.', + function (config) { + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); + } + ); + + // Pick the first defined of two or three arguments. + function defaults(a, b, c) { + if (a != null) { + return a; + } + if (b != null) { + return b; + } + return c; + } + + function currentDateArray(config) { + // hooks is actually the exported moment object + var nowValue = new Date(hooks.now()); + if (config._useUTC) { + return [ + nowValue.getUTCFullYear(), + nowValue.getUTCMonth(), + nowValue.getUTCDate(), + ]; + } + return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; + } + + // convert an array to a date. + // the array should mirror the parameters below + // note: all values past the year are optional and will default to the lowest possible value. + // [year, month, day , hour, minute, second, millisecond] + function configFromArray(config) { + var i, + date, + input = [], + currentDate, + expectedWeekday, + yearToUse; + + if (config._d) { + return; + } + + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear != null) { + yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); + + if ( + config._dayOfYear > daysInYear(yearToUse) || + config._dayOfYear === 0 + ) { + getParsingFlags(config)._overflowDayOfYear = true; + } + + date = createUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = + config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i]; + } + + // Check for 24:00:00.000 + if ( + config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0 + ) { + config._nextDay = true; + config._a[HOUR] = 0; + } + + config._d = (config._useUTC ? createUTCDate : createDate).apply( + null, + input + ); + expectedWeekday = config._useUTC + ? config._d.getUTCDay() + : config._d.getDay(); + + // Apply timezone offset from input. The actual utcOffset can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + } + + if (config._nextDay) { + config._a[HOUR] = 24; + } + + // check for mismatching day of week + if ( + config._w && + typeof config._w.d !== 'undefined' && + config._w.d !== expectedWeekday + ) { + getParsingFlags(config).weekdayMismatch = true; + } + } + + function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = defaults( + w.GG, + config._a[YEAR], + weekOfYear(createLocal(), 1, 4).year + ); + week = defaults(w.W, 1); + weekday = defaults(w.E, 1); + if (weekday < 1 || weekday > 7) { + weekdayOverflow = true; + } + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + curWeek = weekOfYear(createLocal(), dow, doy); + + weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); + + // Default to current week. + week = defaults(w.w, curWeek.week); + + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < 0 || weekday > 6) { + weekdayOverflow = true; + } + } else if (w.e != null) { + // local weekday -- counting starts from beginning of week + weekday = w.e + dow; + if (w.e < 0 || w.e > 6) { + weekdayOverflow = true; + } + } else { + // default to beginning of week + weekday = dow; + } + } + if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { + getParsingFlags(config)._overflowWeeks = true; + } else if (weekdayOverflow != null) { + getParsingFlags(config)._overflowWeekday = true; + } else { + temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } + } + + // constant that refers to the ISO standard + hooks.ISO_8601 = function () {}; + + // constant that refers to the RFC 2822 form + hooks.RFC_2822 = function () {}; + + // date from string and format string + function configFromStringAndFormat(config) { + // TODO: Move this to another part of the creation flow to prevent circular deps + if (config._f === hooks.ISO_8601) { + configFromISO(config); + return; + } + if (config._f === hooks.RFC_2822) { + configFromRFC2822(config); + return; + } + config._a = []; + getParsingFlags(config).empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, + parsedInput, + tokens, + token, + skipped, + stringLength = string.length, + totalParsedInputLength = 0, + era, + tokenLen; + + tokens = + expandFormat(config._f, config._locale).match(formattingTokens) || []; + tokenLen = tokens.length; + for (i = 0; i < tokenLen; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || + [])[0]; + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + getParsingFlags(config).unusedInput.push(skipped); + } + string = string.slice( + string.indexOf(parsedInput) + parsedInput.length + ); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + getParsingFlags(config).empty = false; + } else { + getParsingFlags(config).unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } else if (config._strict && !parsedInput) { + getParsingFlags(config).unusedTokens.push(token); + } + } + + // add remaining unparsed input length to the string + getParsingFlags(config).charsLeftOver = + stringLength - totalParsedInputLength; + if (string.length > 0) { + getParsingFlags(config).unusedInput.push(string); + } + + // clear _12h flag if hour is <= 12 + if ( + config._a[HOUR] <= 12 && + getParsingFlags(config).bigHour === true && + config._a[HOUR] > 0 + ) { + getParsingFlags(config).bigHour = undefined; + } + + getParsingFlags(config).parsedDateParts = config._a.slice(0); + getParsingFlags(config).meridiem = config._meridiem; + // handle meridiem + config._a[HOUR] = meridiemFixWrap( + config._locale, + config._a[HOUR], + config._meridiem + ); + + // handle era + era = getParsingFlags(config).era; + if (era !== null) { + config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]); + } + + configFromArray(config); + checkOverflow(config); + } + + function meridiemFixWrap(locale, hour, meridiem) { + var isPm; + + if (meridiem == null) { + // nothing to do + return hour; + } + if (locale.meridiemHour != null) { + return locale.meridiemHour(hour, meridiem); + } else if (locale.isPM != null) { + // Fallback + isPm = locale.isPM(meridiem); + if (isPm && hour < 12) { + hour += 12; + } + if (!isPm && hour === 12) { + hour = 0; + } + return hour; + } else { + // this is not supposed to happen + return hour; + } + } + + // date from string and array of format strings + function configFromStringAndArray(config) { + var tempConfig, + bestMoment, + scoreToBeat, + i, + currentScore, + validFormatFound, + bestFormatIsValid = false, + configfLen = config._f.length; + + if (configfLen === 0) { + getParsingFlags(config).invalidFormat = true; + config._d = new Date(NaN); + return; + } + + for (i = 0; i < configfLen; i++) { + currentScore = 0; + validFormatFound = false; + tempConfig = copyConfig({}, config); + if (config._useUTC != null) { + tempConfig._useUTC = config._useUTC; + } + tempConfig._f = config._f[i]; + configFromStringAndFormat(tempConfig); + + if (isValid(tempConfig)) { + validFormatFound = true; + } + + // if there is any input that was not parsed add a penalty for that format + currentScore += getParsingFlags(tempConfig).charsLeftOver; + + //or tokens + currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; + + getParsingFlags(tempConfig).score = currentScore; + + if (!bestFormatIsValid) { + if ( + scoreToBeat == null || + currentScore < scoreToBeat || + validFormatFound + ) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + if (validFormatFound) { + bestFormatIsValid = true; + } + } + } else { + if (currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } + } + + extend(config, bestMoment || tempConfig); + } + + function configFromObject(config) { + if (config._d) { + return; + } + + var i = normalizeObjectUnits(config._i), + dayOrDate = i.day === undefined ? i.date : i.day; + config._a = map( + [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond], + function (obj) { + return obj && parseInt(obj, 10); + } + ); + + configFromArray(config); + } + + function createFromConfig(config) { + var res = new Moment(checkOverflow(prepareConfig(config))); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } + + return res; + } + + function prepareConfig(config) { + var input = config._i, + format = config._f; + + config._locale = config._locale || getLocale(config._l); + + if (input === null || (format === undefined && input === '')) { + return createInvalid({ nullInput: true }); + } + + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } + + if (isMoment(input)) { + return new Moment(checkOverflow(input)); + } else if (isDate(input)) { + config._d = input; + } else if (isArray(format)) { + configFromStringAndArray(config); + } else if (format) { + configFromStringAndFormat(config); + } else { + configFromInput(config); + } + + if (!isValid(config)) { + config._d = null; + } + + return config; + } + + function configFromInput(config) { + var input = config._i; + if (isUndefined(input)) { + config._d = new Date(hooks.now()); + } else if (isDate(input)) { + config._d = new Date(input.valueOf()); + } else if (typeof input === 'string') { + configFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + configFromArray(config); + } else if (isObject(input)) { + configFromObject(config); + } else if (isNumber(input)) { + // from milliseconds + config._d = new Date(input); + } else { + hooks.createFromInputFallback(config); + } + } + + function createLocalOrUTC(input, format, locale, strict, isUTC) { + var c = {}; + + if (format === true || format === false) { + strict = format; + format = undefined; + } + + if (locale === true || locale === false) { + strict = locale; + locale = undefined; + } + + if ( + (isObject(input) && isObjectEmpty(input)) || + (isArray(input) && input.length === 0) + ) { + input = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c._isAMomentObject = true; + c._useUTC = c._isUTC = isUTC; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + + return createFromConfig(c); + } + + function createLocal(input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, false); + } + + var prototypeMin = deprecate( + 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other < this ? this : other; + } else { + return createInvalid(); + } + } + ), + prototypeMax = deprecate( + 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other > this ? this : other; + } else { + return createInvalid(); + } + } + ); + + // Pick a moment m from moments so that m[fn](other) is true for all + // other. This relies on the function fn to be transitive. + // + // moments should either be an array of moment objects or an array, whose + // first element is an array of moment objects. + function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return createLocal(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (!moments[i].isValid() || moments[i][fn](res)) { + res = moments[i]; + } + } + return res; + } + + // TODO: Use [].sort instead? + function min() { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); + } + + function max() { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); + } + + var now = function () { + return Date.now ? Date.now() : +new Date(); + }; + + var ordering = [ + 'year', + 'quarter', + 'month', + 'week', + 'day', + 'hour', + 'minute', + 'second', + 'millisecond', + ]; + + function isDurationValid(m) { + var key, + unitHasDecimal = false, + i, + orderLen = ordering.length; + for (key in m) { + if ( + hasOwnProp(m, key) && + !( + indexOf.call(ordering, key) !== -1 && + (m[key] == null || !isNaN(m[key])) + ) + ) { + return false; + } + } + + for (i = 0; i < orderLen; ++i) { + if (m[ordering[i]]) { + if (unitHasDecimal) { + return false; // only allow non-integers for smallest unit + } + if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) { + unitHasDecimal = true; + } + } + } + + return true; + } + + function isValid$1() { + return this._isValid; + } + + function createInvalid$1() { + return createDuration(NaN); + } + + function Duration(duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || normalizedInput.isoWeek || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; + + this._isValid = isDurationValid(normalizedInput); + + // representation for dateAddRemove + this._milliseconds = + +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + weeks * 7; + // It is impossible to translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + quarters * 3 + years * 12; + + this._data = {}; + + this._locale = getLocale(); + + this._bubble(); + } + + function isDuration(obj) { + return obj instanceof Duration; + } + + function absRound(number) { + if (number < 0) { + return Math.round(-1 * number) * -1; + } else { + return Math.round(number); + } + } + + // compare two arrays, return the number of differences + function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ( + (dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i])) + ) { + diffs++; + } + } + return diffs + lengthDiff; + } + + // FORMATTING + + function offset(token, separator) { + addFormatToken(token, 0, 0, function () { + var offset = this.utcOffset(), + sign = '+'; + if (offset < 0) { + offset = -offset; + sign = '-'; + } + return ( + sign + + zeroFill(~~(offset / 60), 2) + + separator + + zeroFill(~~offset % 60, 2) + ); + }); + } + + offset('Z', ':'); + offset('ZZ', ''); + + // PARSING + + addRegexToken('Z', matchShortOffset); + addRegexToken('ZZ', matchShortOffset); + addParseToken(['Z', 'ZZ'], function (input, array, config) { + config._useUTC = true; + config._tzm = offsetFromString(matchShortOffset, input); + }); + + // HELPERS + + // timezone chunker + // '+10:00' > ['10', '00'] + // '-1530' > ['-15', '30'] + var chunkOffset = /([\+\-]|\d\d)/gi; + + function offsetFromString(matcher, string) { + var matches = (string || '').match(matcher), + chunk, + parts, + minutes; + + if (matches === null) { + return null; + } + + chunk = matches[matches.length - 1] || []; + parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; + minutes = +(parts[1] * 60) + toInt(parts[2]); + + return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes; + } + + // Return a moment from input, that is local/utc/zone equivalent to model. + function cloneWithOffset(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = + (isMoment(input) || isDate(input) + ? input.valueOf() + : createLocal(input).valueOf()) - res.valueOf(); + // Use low-level api, because this fn is low-level api. + res._d.setTime(res._d.valueOf() + diff); + hooks.updateOffset(res, false); + return res; + } else { + return createLocal(input).local(); + } + } + + function getDateOffset(m) { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return -Math.round(m._d.getTimezoneOffset()); + } + + // HOOKS + + // This function will be called whenever a moment is mutated. + // It is intended to keep the offset in sync with the timezone. + hooks.updateOffset = function () {}; + + // MOMENTS + + // keepLocalTime = true means only change the timezone, without + // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> + // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset + // +0200, so we adjust the time as needed, to be valid. + // + // Keeping the time actually adds/subtracts (one hour) + // from the actual represented time. That is why we call updateOffset + // a second time. In case it wants us to change the offset again + // _changeInProgress == true case, then we have to adjust, because + // there is no such time in the given timezone. + function getSetOffset(input, keepLocalTime, keepMinutes) { + var offset = this._offset || 0, + localAdjust; + if (!this.isValid()) { + return input != null ? this : NaN; + } + if (input != null) { + if (typeof input === 'string') { + input = offsetFromString(matchShortOffset, input); + if (input === null) { + return this; + } + } else if (Math.abs(input) < 16 && !keepMinutes) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = getDateOffset(this); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.add(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + addSubtract( + this, + createDuration(input - offset, 'm'), + 1, + false + ); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + hooks.updateOffset(this, true); + this._changeInProgress = null; + } + } + return this; + } else { + return this._isUTC ? offset : getDateOffset(this); + } + } + + function getSetZone(input, keepLocalTime) { + if (input != null) { + if (typeof input !== 'string') { + input = -input; + } + + this.utcOffset(input, keepLocalTime); + + return this; + } else { + return -this.utcOffset(); + } + } + + function setOffsetToUTC(keepLocalTime) { + return this.utcOffset(0, keepLocalTime); + } + + function setOffsetToLocal(keepLocalTime) { + if (this._isUTC) { + this.utcOffset(0, keepLocalTime); + this._isUTC = false; + + if (keepLocalTime) { + this.subtract(getDateOffset(this), 'm'); + } + } + return this; + } + + function setOffsetToParsedOffset() { + if (this._tzm != null) { + this.utcOffset(this._tzm, false, true); + } else if (typeof this._i === 'string') { + var tZone = offsetFromString(matchOffset, this._i); + if (tZone != null) { + this.utcOffset(tZone); + } else { + this.utcOffset(0, true); + } + } + return this; + } + + function hasAlignedHourOffset(input) { + if (!this.isValid()) { + return false; + } + input = input ? createLocal(input).utcOffset() : 0; + + return (this.utcOffset() - input) % 60 === 0; + } + + function isDaylightSavingTime() { + return ( + this.utcOffset() > this.clone().month(0).utcOffset() || + this.utcOffset() > this.clone().month(5).utcOffset() + ); + } + + function isDaylightSavingTimeShifted() { + if (!isUndefined(this._isDSTShifted)) { + return this._isDSTShifted; + } + + var c = {}, + other; + + copyConfig(c, this); + c = prepareConfig(c); + + if (c._a) { + other = c._isUTC ? createUTC(c._a) : createLocal(c._a); + this._isDSTShifted = + this.isValid() && compareArrays(c._a, other.toArray()) > 0; + } else { + this._isDSTShifted = false; + } + + return this._isDSTShifted; + } + + function isLocal() { + return this.isValid() ? !this._isUTC : false; + } + + function isUtcOffset() { + return this.isValid() ? this._isUTC : false; + } + + function isUtc() { + return this.isValid() ? this._isUTC && this._offset === 0 : false; + } + + // ASP.NET json date format regex + var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/, + // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html + // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere + // and further modified to allow for strings containing both week and day + isoRegex = + /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; + + function createDuration(input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + diffRes; + + if (isDuration(input)) { + duration = { + ms: input._milliseconds, + d: input._days, + M: input._months, + }; + } else if (isNumber(input) || !isNaN(+input)) { + duration = {}; + if (key) { + duration[key] = +input; + } else { + duration.milliseconds = +input; + } + } else if ((match = aspNetRegex.exec(input))) { + sign = match[1] === '-' ? -1 : 1; + duration = { + y: 0, + d: toInt(match[DATE]) * sign, + h: toInt(match[HOUR]) * sign, + m: toInt(match[MINUTE]) * sign, + s: toInt(match[SECOND]) * sign, + ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match + }; + } else if ((match = isoRegex.exec(input))) { + sign = match[1] === '-' ? -1 : 1; + duration = { + y: parseIso(match[2], sign), + M: parseIso(match[3], sign), + w: parseIso(match[4], sign), + d: parseIso(match[5], sign), + h: parseIso(match[6], sign), + m: parseIso(match[7], sign), + s: parseIso(match[8], sign), + }; + } else if (duration == null) { + // checks for null or undefined + duration = {}; + } else if ( + typeof duration === 'object' && + ('from' in duration || 'to' in duration) + ) { + diffRes = momentsDifference( + createLocal(duration.from), + createLocal(duration.to) + ); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + + ret = new Duration(duration); + + if (isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } + + if (isDuration(input) && hasOwnProp(input, '_isValid')) { + ret._isValid = input._isValid; + } + + return ret; + } + + createDuration.fn = Duration.prototype; + createDuration.invalid = createInvalid$1; + + function parseIso(inp, sign) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; + } + + function positiveMomentsDifference(base, other) { + var res = {}; + + res.months = + other.month() - base.month() + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } + + res.milliseconds = +other - +base.clone().add(res.months, 'M'); + + return res; + } + + function momentsDifference(base, other) { + var res; + if (!(base.isValid() && other.isValid())) { + return { milliseconds: 0, months: 0 }; + } + + other = cloneWithOffset(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } + + return res; + } + + // TODO: remove 'name' arg after deprecation is removed + function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple( + name, + 'moment().' + + name + + '(period, number) is deprecated. Please use moment().' + + name + + '(number, period). ' + + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.' + ); + tmp = val; + val = period; + period = tmp; + } + + dur = createDuration(val, period); + addSubtract(this, dur, direction); + return this; + }; + } + + function addSubtract(mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = absRound(duration._days), + months = absRound(duration._months); + + if (!mom.isValid()) { + // No op + return; + } + + updateOffset = updateOffset == null ? true : updateOffset; + + if (months) { + setMonth(mom, get(mom, 'Month') + months * isAdding); + } + if (days) { + set$1(mom, 'Date', get(mom, 'Date') + days * isAdding); + } + if (milliseconds) { + mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); + } + if (updateOffset) { + hooks.updateOffset(mom, days || months); + } + } + + var add = createAdder(1, 'add'), + subtract = createAdder(-1, 'subtract'); + + function isString(input) { + return typeof input === 'string' || input instanceof String; + } + + // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined + function isMomentInput(input) { + return ( + isMoment(input) || + isDate(input) || + isString(input) || + isNumber(input) || + isNumberOrStringArray(input) || + isMomentInputObject(input) || + input === null || + input === undefined + ); + } + + function isMomentInputObject(input) { + var objectTest = isObject(input) && !isObjectEmpty(input), + propertyTest = false, + properties = [ + 'years', + 'year', + 'y', + 'months', + 'month', + 'M', + 'days', + 'day', + 'd', + 'dates', + 'date', + 'D', + 'hours', + 'hour', + 'h', + 'minutes', + 'minute', + 'm', + 'seconds', + 'second', + 's', + 'milliseconds', + 'millisecond', + 'ms', + ], + i, + property, + propertyLen = properties.length; + + for (i = 0; i < propertyLen; i += 1) { + property = properties[i]; + propertyTest = propertyTest || hasOwnProp(input, property); + } + + return objectTest && propertyTest; + } + + function isNumberOrStringArray(input) { + var arrayTest = isArray(input), + dataTypeTest = false; + if (arrayTest) { + dataTypeTest = + input.filter(function (item) { + return !isNumber(item) && isString(input); + }).length === 0; + } + return arrayTest && dataTypeTest; + } + + function isCalendarSpec(input) { + var objectTest = isObject(input) && !isObjectEmpty(input), + propertyTest = false, + properties = [ + 'sameDay', + 'nextDay', + 'lastDay', + 'nextWeek', + 'lastWeek', + 'sameElse', + ], + i, + property; + + for (i = 0; i < properties.length; i += 1) { + property = properties[i]; + propertyTest = propertyTest || hasOwnProp(input, property); + } + + return objectTest && propertyTest; + } + + function getCalendarFormat(myMoment, now) { + var diff = myMoment.diff(now, 'days', true); + return diff < -6 + ? 'sameElse' + : diff < -1 + ? 'lastWeek' + : diff < 0 + ? 'lastDay' + : diff < 1 + ? 'sameDay' + : diff < 2 + ? 'nextDay' + : diff < 7 + ? 'nextWeek' + : 'sameElse'; + } + + function calendar$1(time, formats) { + // Support for single parameter, formats only overload to the calendar function + if (arguments.length === 1) { + if (!arguments[0]) { + time = undefined; + formats = undefined; + } else if (isMomentInput(arguments[0])) { + time = arguments[0]; + formats = undefined; + } else if (isCalendarSpec(arguments[0])) { + formats = arguments[0]; + time = undefined; + } + } + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're local/utc/offset or not. + var now = time || createLocal(), + sod = cloneWithOffset(now, this).startOf('day'), + format = hooks.calendarFormat(this, sod) || 'sameElse', + output = + formats && + (isFunction(formats[format]) + ? formats[format].call(this, now) + : formats[format]); + + return this.format( + output || this.localeData().calendar(format, this, createLocal(now)) + ); + } + + function clone() { + return new Moment(this); + } + + function isAfter(input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() > localInput.valueOf(); + } else { + return localInput.valueOf() < this.clone().startOf(units).valueOf(); + } + } + + function isBefore(input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() < localInput.valueOf(); + } else { + return this.clone().endOf(units).valueOf() < localInput.valueOf(); + } + } + + function isBetween(from, to, units, inclusivity) { + var localFrom = isMoment(from) ? from : createLocal(from), + localTo = isMoment(to) ? to : createLocal(to); + if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) { + return false; + } + inclusivity = inclusivity || '()'; + return ( + (inclusivity[0] === '(' + ? this.isAfter(localFrom, units) + : !this.isBefore(localFrom, units)) && + (inclusivity[1] === ')' + ? this.isBefore(localTo, units) + : !this.isAfter(localTo, units)) + ); + } + + function isSame(input, units) { + var localInput = isMoment(input) ? input : createLocal(input), + inputMs; + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() === localInput.valueOf(); + } else { + inputMs = localInput.valueOf(); + return ( + this.clone().startOf(units).valueOf() <= inputMs && + inputMs <= this.clone().endOf(units).valueOf() + ); + } + } + + function isSameOrAfter(input, units) { + return this.isSame(input, units) || this.isAfter(input, units); + } + + function isSameOrBefore(input, units) { + return this.isSame(input, units) || this.isBefore(input, units); + } + + function diff(input, units, asFloat) { + var that, zoneDelta, output; + + if (!this.isValid()) { + return NaN; + } + + that = cloneWithOffset(input, this); + + if (!that.isValid()) { + return NaN; + } + + zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; + + units = normalizeUnits(units); + + switch (units) { + case 'year': + output = monthDiff(this, that) / 12; + break; + case 'month': + output = monthDiff(this, that); + break; + case 'quarter': + output = monthDiff(this, that) / 3; + break; + case 'second': + output = (this - that) / 1e3; + break; // 1000 + case 'minute': + output = (this - that) / 6e4; + break; // 1000 * 60 + case 'hour': + output = (this - that) / 36e5; + break; // 1000 * 60 * 60 + case 'day': + output = (this - that - zoneDelta) / 864e5; + break; // 1000 * 60 * 60 * 24, negate dst + case 'week': + output = (this - that - zoneDelta) / 6048e5; + break; // 1000 * 60 * 60 * 24 * 7, negate dst + default: + output = this - that; + } + + return asFloat ? output : absFloor(output); + } + + function monthDiff(a, b) { + if (a.date() < b.date()) { + // end-of-month calculations work correct when the start month has more + // days than the end month. + return -monthDiff(b, a); + } + // difference in months + var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()), + // b is in (anchor - 1 month, anchor + 1 month) + anchor = a.clone().add(wholeMonthDiff, 'months'), + anchor2, + adjust; + + if (b - anchor < 0) { + anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor - anchor2); + } else { + anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor2 - anchor); + } + + //check for negative zero, return zero if negative zero + return -(wholeMonthDiff + adjust) || 0; + } + + hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; + hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; + + function toString() { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); + } + + function toISOString(keepOffset) { + if (!this.isValid()) { + return null; + } + var utc = keepOffset !== true, + m = utc ? this.clone().utc() : this; + if (m.year() < 0 || m.year() > 9999) { + return formatMoment( + m, + utc + ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' + : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ' + ); + } + if (isFunction(Date.prototype.toISOString)) { + // native implementation is ~50x faster, use it when we can + if (utc) { + return this.toDate().toISOString(); + } else { + return new Date(this.valueOf() + this.utcOffset() * 60 * 1000) + .toISOString() + .replace('Z', formatMoment(m, 'Z')); + } + } + return formatMoment( + m, + utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ' + ); + } + + /** + * Return a human readable representation of a moment that can + * also be evaluated to get a new moment which is the same + * + * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects + */ + function inspect() { + if (!this.isValid()) { + return 'moment.invalid(/* ' + this._i + ' */)'; + } + var func = 'moment', + zone = '', + prefix, + year, + datetime, + suffix; + if (!this.isLocal()) { + func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone'; + zone = 'Z'; + } + prefix = '[' + func + '("]'; + year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY'; + datetime = '-MM-DD[T]HH:mm:ss.SSS'; + suffix = zone + '[")]'; + + return this.format(prefix + year + datetime + suffix); + } + + function format(inputString) { + if (!inputString) { + inputString = this.isUtc() + ? hooks.defaultFormatUtc + : hooks.defaultFormat; + } + var output = formatMoment(this, inputString); + return this.localeData().postformat(output); + } + + function from(time, withoutSuffix) { + if ( + this.isValid() && + ((isMoment(time) && time.isValid()) || createLocal(time).isValid()) + ) { + return createDuration({ to: this, from: time }) + .locale(this.locale()) + .humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } + } + + function fromNow(withoutSuffix) { + return this.from(createLocal(), withoutSuffix); + } + + function to(time, withoutSuffix) { + if ( + this.isValid() && + ((isMoment(time) && time.isValid()) || createLocal(time).isValid()) + ) { + return createDuration({ from: this, to: time }) + .locale(this.locale()) + .humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } + } + + function toNow(withoutSuffix) { + return this.to(createLocal(), withoutSuffix); + } + + // If passed a locale key, it will set the locale for this + // instance. Otherwise, it will return the locale configuration + // variables for this instance. + function locale(key) { + var newLocaleData; + + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = getLocale(key); + if (newLocaleData != null) { + this._locale = newLocaleData; + } + return this; + } + } + + var lang = deprecate( + 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + return this.locale(key); + } + } + ); + + function localeData() { + return this._locale; + } + + var MS_PER_SECOND = 1000, + MS_PER_MINUTE = 60 * MS_PER_SECOND, + MS_PER_HOUR = 60 * MS_PER_MINUTE, + MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR; + + // actual modulo - handles negative numbers (for dates before 1970): + function mod$1(dividend, divisor) { + return ((dividend % divisor) + divisor) % divisor; + } + + function localStartOfDate(y, m, d) { + // the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + return new Date(y + 400, m, d) - MS_PER_400_YEARS; + } else { + return new Date(y, m, d).valueOf(); + } + } + + function utcStartOfDate(y, m, d) { + // Date.UTC remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS; + } else { + return Date.UTC(y, m, d); + } + } + + function startOf(units) { + var time, startOfDate; + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond' || !this.isValid()) { + return this; + } + + startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; + + switch (units) { + case 'year': + time = startOfDate(this.year(), 0, 1); + break; + case 'quarter': + time = startOfDate( + this.year(), + this.month() - (this.month() % 3), + 1 + ); + break; + case 'month': + time = startOfDate(this.year(), this.month(), 1); + break; + case 'week': + time = startOfDate( + this.year(), + this.month(), + this.date() - this.weekday() + ); + break; + case 'isoWeek': + time = startOfDate( + this.year(), + this.month(), + this.date() - (this.isoWeekday() - 1) + ); + break; + case 'day': + case 'date': + time = startOfDate(this.year(), this.month(), this.date()); + break; + case 'hour': + time = this._d.valueOf(); + time -= mod$1( + time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), + MS_PER_HOUR + ); + break; + case 'minute': + time = this._d.valueOf(); + time -= mod$1(time, MS_PER_MINUTE); + break; + case 'second': + time = this._d.valueOf(); + time -= mod$1(time, MS_PER_SECOND); + break; + } + + this._d.setTime(time); + hooks.updateOffset(this, true); + return this; + } + + function endOf(units) { + var time, startOfDate; + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond' || !this.isValid()) { + return this; + } + + startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; + + switch (units) { + case 'year': + time = startOfDate(this.year() + 1, 0, 1) - 1; + break; + case 'quarter': + time = + startOfDate( + this.year(), + this.month() - (this.month() % 3) + 3, + 1 + ) - 1; + break; + case 'month': + time = startOfDate(this.year(), this.month() + 1, 1) - 1; + break; + case 'week': + time = + startOfDate( + this.year(), + this.month(), + this.date() - this.weekday() + 7 + ) - 1; + break; + case 'isoWeek': + time = + startOfDate( + this.year(), + this.month(), + this.date() - (this.isoWeekday() - 1) + 7 + ) - 1; + break; + case 'day': + case 'date': + time = startOfDate(this.year(), this.month(), this.date() + 1) - 1; + break; + case 'hour': + time = this._d.valueOf(); + time += + MS_PER_HOUR - + mod$1( + time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), + MS_PER_HOUR + ) - + 1; + break; + case 'minute': + time = this._d.valueOf(); + time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1; + break; + case 'second': + time = this._d.valueOf(); + time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1; + break; + } + + this._d.setTime(time); + hooks.updateOffset(this, true); + return this; + } + + function valueOf() { + return this._d.valueOf() - (this._offset || 0) * 60000; + } + + function unix() { + return Math.floor(this.valueOf() / 1000); + } + + function toDate() { + return new Date(this.valueOf()); + } + + function toArray() { + var m = this; + return [ + m.year(), + m.month(), + m.date(), + m.hour(), + m.minute(), + m.second(), + m.millisecond(), + ]; + } + + function toObject() { + var m = this; + return { + years: m.year(), + months: m.month(), + date: m.date(), + hours: m.hours(), + minutes: m.minutes(), + seconds: m.seconds(), + milliseconds: m.milliseconds(), + }; + } + + function toJSON() { + // new Date(NaN).toJSON() === null + return this.isValid() ? this.toISOString() : null; + } + + function isValid$2() { + return isValid(this); + } + + function parsingFlags() { + return extend({}, getParsingFlags(this)); + } + + function invalidAt() { + return getParsingFlags(this).overflow; + } + + function creationData() { + return { + input: this._i, + format: this._f, + locale: this._locale, + isUTC: this._isUTC, + strict: this._strict, + }; + } + + addFormatToken('N', 0, 0, 'eraAbbr'); + addFormatToken('NN', 0, 0, 'eraAbbr'); + addFormatToken('NNN', 0, 0, 'eraAbbr'); + addFormatToken('NNNN', 0, 0, 'eraName'); + addFormatToken('NNNNN', 0, 0, 'eraNarrow'); + + addFormatToken('y', ['y', 1], 'yo', 'eraYear'); + addFormatToken('y', ['yy', 2], 0, 'eraYear'); + addFormatToken('y', ['yyy', 3], 0, 'eraYear'); + addFormatToken('y', ['yyyy', 4], 0, 'eraYear'); + + addRegexToken('N', matchEraAbbr); + addRegexToken('NN', matchEraAbbr); + addRegexToken('NNN', matchEraAbbr); + addRegexToken('NNNN', matchEraName); + addRegexToken('NNNNN', matchEraNarrow); + + addParseToken( + ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], + function (input, array, config, token) { + var era = config._locale.erasParse(input, token, config._strict); + if (era) { + getParsingFlags(config).era = era; + } else { + getParsingFlags(config).invalidEra = input; + } + } + ); + + addRegexToken('y', matchUnsigned); + addRegexToken('yy', matchUnsigned); + addRegexToken('yyy', matchUnsigned); + addRegexToken('yyyy', matchUnsigned); + addRegexToken('yo', matchEraYearOrdinal); + + addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR); + addParseToken(['yo'], function (input, array, config, token) { + var match; + if (config._locale._eraYearOrdinalRegex) { + match = input.match(config._locale._eraYearOrdinalRegex); + } + + if (config._locale.eraYearOrdinalParse) { + array[YEAR] = config._locale.eraYearOrdinalParse(input, match); + } else { + array[YEAR] = parseInt(input, 10); + } + }); + + function localeEras(m, format) { + var i, + l, + date, + eras = this._eras || getLocale('en')._eras; + for (i = 0, l = eras.length; i < l; ++i) { + switch (typeof eras[i].since) { + case 'string': + // truncate time + date = hooks(eras[i].since).startOf('day'); + eras[i].since = date.valueOf(); + break; + } + + switch (typeof eras[i].until) { + case 'undefined': + eras[i].until = +Infinity; + break; + case 'string': + // truncate time + date = hooks(eras[i].until).startOf('day').valueOf(); + eras[i].until = date.valueOf(); + break; + } + } + return eras; + } + + function localeErasParse(eraName, format, strict) { + var i, + l, + eras = this.eras(), + name, + abbr, + narrow; + eraName = eraName.toUpperCase(); + + for (i = 0, l = eras.length; i < l; ++i) { + name = eras[i].name.toUpperCase(); + abbr = eras[i].abbr.toUpperCase(); + narrow = eras[i].narrow.toUpperCase(); + + if (strict) { + switch (format) { + case 'N': + case 'NN': + case 'NNN': + if (abbr === eraName) { + return eras[i]; + } + break; + + case 'NNNN': + if (name === eraName) { + return eras[i]; + } + break; + + case 'NNNNN': + if (narrow === eraName) { + return eras[i]; + } + break; + } + } else if ([name, abbr, narrow].indexOf(eraName) >= 0) { + return eras[i]; + } + } + } + + function localeErasConvertYear(era, year) { + var dir = era.since <= era.until ? +1 : -1; + if (year === undefined) { + return hooks(era.since).year(); + } else { + return hooks(era.since).year() + (year - era.offset) * dir; + } + } + + function getEraName() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.clone().startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].name; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].name; + } + } + + return ''; + } + + function getEraNarrow() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.clone().startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].narrow; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].narrow; + } + } + + return ''; + } + + function getEraAbbr() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.clone().startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].abbr; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].abbr; + } + } + + return ''; + } + + function getEraYear() { + var i, + l, + dir, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + dir = eras[i].since <= eras[i].until ? +1 : -1; + + // truncate time + val = this.clone().startOf('day').valueOf(); + + if ( + (eras[i].since <= val && val <= eras[i].until) || + (eras[i].until <= val && val <= eras[i].since) + ) { + return ( + (this.year() - hooks(eras[i].since).year()) * dir + + eras[i].offset + ); + } + } + + return this.year(); + } + + function erasNameRegex(isStrict) { + if (!hasOwnProp(this, '_erasNameRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasNameRegex : this._erasRegex; + } + + function erasAbbrRegex(isStrict) { + if (!hasOwnProp(this, '_erasAbbrRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasAbbrRegex : this._erasRegex; + } + + function erasNarrowRegex(isStrict) { + if (!hasOwnProp(this, '_erasNarrowRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasNarrowRegex : this._erasRegex; + } + + function matchEraAbbr(isStrict, locale) { + return locale.erasAbbrRegex(isStrict); + } + + function matchEraName(isStrict, locale) { + return locale.erasNameRegex(isStrict); + } + + function matchEraNarrow(isStrict, locale) { + return locale.erasNarrowRegex(isStrict); + } + + function matchEraYearOrdinal(isStrict, locale) { + return locale._eraYearOrdinalRegex || matchUnsigned; + } + + function computeErasParse() { + var abbrPieces = [], + namePieces = [], + narrowPieces = [], + mixedPieces = [], + i, + l, + erasName, + erasAbbr, + erasNarrow, + eras = this.eras(); + + for (i = 0, l = eras.length; i < l; ++i) { + erasName = regexEscape(eras[i].name); + erasAbbr = regexEscape(eras[i].abbr); + erasNarrow = regexEscape(eras[i].narrow); + + namePieces.push(erasName); + abbrPieces.push(erasAbbr); + narrowPieces.push(erasNarrow); + mixedPieces.push(erasName); + mixedPieces.push(erasAbbr); + mixedPieces.push(erasNarrow); + } + + this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i'); + this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i'); + this._erasNarrowRegex = new RegExp( + '^(' + narrowPieces.join('|') + ')', + 'i' + ); + } + + // FORMATTING + + addFormatToken(0, ['gg', 2], 0, function () { + return this.weekYear() % 100; + }); + + addFormatToken(0, ['GG', 2], 0, function () { + return this.isoWeekYear() % 100; + }); + + function addWeekYearFormatToken(token, getter) { + addFormatToken(0, [token, token.length], 0, getter); + } + + addWeekYearFormatToken('gggg', 'weekYear'); + addWeekYearFormatToken('ggggg', 'weekYear'); + addWeekYearFormatToken('GGGG', 'isoWeekYear'); + addWeekYearFormatToken('GGGGG', 'isoWeekYear'); + + // ALIASES + + // PARSING + + addRegexToken('G', matchSigned); + addRegexToken('g', matchSigned); + addRegexToken('GG', match1to2, match2); + addRegexToken('gg', match1to2, match2); + addRegexToken('GGGG', match1to4, match4); + addRegexToken('gggg', match1to4, match4); + addRegexToken('GGGGG', match1to6, match6); + addRegexToken('ggggg', match1to6, match6); + + addWeekParseToken( + ['gggg', 'ggggg', 'GGGG', 'GGGGG'], + function (input, week, config, token) { + week[token.substr(0, 2)] = toInt(input); + } + ); + + addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { + week[token] = hooks.parseTwoDigitYear(input); + }); + + // MOMENTS + + function getSetWeekYear(input) { + return getSetWeekYearHelper.call( + this, + input, + this.week(), + this.weekday() + this.localeData()._week.dow, + this.localeData()._week.dow, + this.localeData()._week.doy + ); + } + + function getSetISOWeekYear(input) { + return getSetWeekYearHelper.call( + this, + input, + this.isoWeek(), + this.isoWeekday(), + 1, + 4 + ); + } + + function getISOWeeksInYear() { + return weeksInYear(this.year(), 1, 4); + } + + function getISOWeeksInISOWeekYear() { + return weeksInYear(this.isoWeekYear(), 1, 4); + } + + function getWeeksInYear() { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + } + + function getWeeksInWeekYear() { + var weekInfo = this.localeData()._week; + return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy); + } + + function getSetWeekYearHelper(input, week, weekday, dow, doy) { + var weeksTarget; + if (input == null) { + return weekOfYear(this, dow, doy).year; + } else { + weeksTarget = weeksInYear(input, dow, doy); + if (week > weeksTarget) { + week = weeksTarget; + } + return setWeekAll.call(this, input, week, weekday, dow, doy); + } + } + + function setWeekAll(weekYear, week, weekday, dow, doy) { + var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), + date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); + + this.year(date.getUTCFullYear()); + this.month(date.getUTCMonth()); + this.date(date.getUTCDate()); + return this; + } + + // FORMATTING + + addFormatToken('Q', 0, 'Qo', 'quarter'); + + // PARSING + + addRegexToken('Q', match1); + addParseToken('Q', function (input, array) { + array[MONTH] = (toInt(input) - 1) * 3; + }); + + // MOMENTS + + function getSetQuarter(input) { + return input == null + ? Math.ceil((this.month() + 1) / 3) + : this.month((input - 1) * 3 + (this.month() % 3)); + } + + // FORMATTING + + addFormatToken('D', ['DD', 2], 'Do', 'date'); + + // PARSING + + addRegexToken('D', match1to2, match1to2NoLeadingZero); + addRegexToken('DD', match1to2, match2); + addRegexToken('Do', function (isStrict, locale) { + // TODO: Remove "ordinalParse" fallback in next major release. + return isStrict + ? locale._dayOfMonthOrdinalParse || locale._ordinalParse + : locale._dayOfMonthOrdinalParseLenient; + }); + + addParseToken(['D', 'DD'], DATE); + addParseToken('Do', function (input, array) { + array[DATE] = toInt(input.match(match1to2)[0]); + }); + + // MOMENTS + + var getSetDayOfMonth = makeGetSet('Date', true); + + // FORMATTING + + addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); + + // PARSING + + addRegexToken('DDD', match1to3); + addRegexToken('DDDD', match3); + addParseToken(['DDD', 'DDDD'], function (input, array, config) { + config._dayOfYear = toInt(input); + }); + + // HELPERS + + // MOMENTS + + function getSetDayOfYear(input) { + var dayOfYear = + Math.round( + (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5 + ) + 1; + return input == null ? dayOfYear : this.add(input - dayOfYear, 'd'); + } + + // FORMATTING + + addFormatToken('m', ['mm', 2], 0, 'minute'); + + // PARSING + + addRegexToken('m', match1to2, match1to2HasZero); + addRegexToken('mm', match1to2, match2); + addParseToken(['m', 'mm'], MINUTE); + + // MOMENTS + + var getSetMinute = makeGetSet('Minutes', false); + + // FORMATTING + + addFormatToken('s', ['ss', 2], 0, 'second'); + + // PARSING + + addRegexToken('s', match1to2, match1to2HasZero); + addRegexToken('ss', match1to2, match2); + addParseToken(['s', 'ss'], SECOND); + + // MOMENTS + + var getSetSecond = makeGetSet('Seconds', false); + + // FORMATTING + + addFormatToken('S', 0, 0, function () { + return ~~(this.millisecond() / 100); + }); + + addFormatToken(0, ['SS', 2], 0, function () { + return ~~(this.millisecond() / 10); + }); + + addFormatToken(0, ['SSS', 3], 0, 'millisecond'); + addFormatToken(0, ['SSSS', 4], 0, function () { + return this.millisecond() * 10; + }); + addFormatToken(0, ['SSSSS', 5], 0, function () { + return this.millisecond() * 100; + }); + addFormatToken(0, ['SSSSSS', 6], 0, function () { + return this.millisecond() * 1000; + }); + addFormatToken(0, ['SSSSSSS', 7], 0, function () { + return this.millisecond() * 10000; + }); + addFormatToken(0, ['SSSSSSSS', 8], 0, function () { + return this.millisecond() * 100000; + }); + addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { + return this.millisecond() * 1000000; + }); + + // PARSING + + addRegexToken('S', match1to3, match1); + addRegexToken('SS', match1to3, match2); + addRegexToken('SSS', match1to3, match3); + + var token, getSetMillisecond; + for (token = 'SSSS'; token.length <= 9; token += 'S') { + addRegexToken(token, matchUnsigned); + } + + function parseMs(input, array) { + array[MILLISECOND] = toInt(('0.' + input) * 1000); + } + + for (token = 'S'; token.length <= 9; token += 'S') { + addParseToken(token, parseMs); + } + + getSetMillisecond = makeGetSet('Milliseconds', false); + + // FORMATTING + + addFormatToken('z', 0, 0, 'zoneAbbr'); + addFormatToken('zz', 0, 0, 'zoneName'); + + // MOMENTS + + function getZoneAbbr() { + return this._isUTC ? 'UTC' : ''; + } + + function getZoneName() { + return this._isUTC ? 'Coordinated Universal Time' : ''; + } + + var proto = Moment.prototype; + + proto.add = add; + proto.calendar = calendar$1; + proto.clone = clone; + proto.diff = diff; + proto.endOf = endOf; + proto.format = format; + proto.from = from; + proto.fromNow = fromNow; + proto.to = to; + proto.toNow = toNow; + proto.get = stringGet; + proto.invalidAt = invalidAt; + proto.isAfter = isAfter; + proto.isBefore = isBefore; + proto.isBetween = isBetween; + proto.isSame = isSame; + proto.isSameOrAfter = isSameOrAfter; + proto.isSameOrBefore = isSameOrBefore; + proto.isValid = isValid$2; + proto.lang = lang; + proto.locale = locale; + proto.localeData = localeData; + proto.max = prototypeMax; + proto.min = prototypeMin; + proto.parsingFlags = parsingFlags; + proto.set = stringSet; + proto.startOf = startOf; + proto.subtract = subtract; + proto.toArray = toArray; + proto.toObject = toObject; + proto.toDate = toDate; + proto.toISOString = toISOString; + proto.inspect = inspect; + if (typeof Symbol !== 'undefined' && Symbol.for != null) { + proto[Symbol.for('nodejs.util.inspect.custom')] = function () { + return 'Moment<' + this.format() + '>'; + }; + } + proto.toJSON = toJSON; + proto.toString = toString; + proto.unix = unix; + proto.valueOf = valueOf; + proto.creationData = creationData; + proto.eraName = getEraName; + proto.eraNarrow = getEraNarrow; + proto.eraAbbr = getEraAbbr; + proto.eraYear = getEraYear; + proto.year = getSetYear; + proto.isLeapYear = getIsLeapYear; + proto.weekYear = getSetWeekYear; + proto.isoWeekYear = getSetISOWeekYear; + proto.quarter = proto.quarters = getSetQuarter; + proto.month = getSetMonth; + proto.daysInMonth = getDaysInMonth; + proto.week = proto.weeks = getSetWeek; + proto.isoWeek = proto.isoWeeks = getSetISOWeek; + proto.weeksInYear = getWeeksInYear; + proto.weeksInWeekYear = getWeeksInWeekYear; + proto.isoWeeksInYear = getISOWeeksInYear; + proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear; + proto.date = getSetDayOfMonth; + proto.day = proto.days = getSetDayOfWeek; + proto.weekday = getSetLocaleDayOfWeek; + proto.isoWeekday = getSetISODayOfWeek; + proto.dayOfYear = getSetDayOfYear; + proto.hour = proto.hours = getSetHour; + proto.minute = proto.minutes = getSetMinute; + proto.second = proto.seconds = getSetSecond; + proto.millisecond = proto.milliseconds = getSetMillisecond; + proto.utcOffset = getSetOffset; + proto.utc = setOffsetToUTC; + proto.local = setOffsetToLocal; + proto.parseZone = setOffsetToParsedOffset; + proto.hasAlignedHourOffset = hasAlignedHourOffset; + proto.isDST = isDaylightSavingTime; + proto.isLocal = isLocal; + proto.isUtcOffset = isUtcOffset; + proto.isUtc = isUtc; + proto.isUTC = isUtc; + proto.zoneAbbr = getZoneAbbr; + proto.zoneName = getZoneName; + proto.dates = deprecate( + 'dates accessor is deprecated. Use date instead.', + getSetDayOfMonth + ); + proto.months = deprecate( + 'months accessor is deprecated. Use month instead', + getSetMonth + ); + proto.years = deprecate( + 'years accessor is deprecated. Use year instead', + getSetYear + ); + proto.zone = deprecate( + 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', + getSetZone + ); + proto.isDSTShifted = deprecate( + 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', + isDaylightSavingTimeShifted + ); + + function createUnix(input) { + return createLocal(input * 1000); + } + + function createInZone() { + return createLocal.apply(null, arguments).parseZone(); + } + + function preParsePostFormat(string) { + return string; + } + + var proto$1 = Locale.prototype; + + proto$1.calendar = calendar; + proto$1.longDateFormat = longDateFormat; + proto$1.invalidDate = invalidDate; + proto$1.ordinal = ordinal; + proto$1.preparse = preParsePostFormat; + proto$1.postformat = preParsePostFormat; + proto$1.relativeTime = relativeTime; + proto$1.pastFuture = pastFuture; + proto$1.set = set; + proto$1.eras = localeEras; + proto$1.erasParse = localeErasParse; + proto$1.erasConvertYear = localeErasConvertYear; + proto$1.erasAbbrRegex = erasAbbrRegex; + proto$1.erasNameRegex = erasNameRegex; + proto$1.erasNarrowRegex = erasNarrowRegex; + + proto$1.months = localeMonths; + proto$1.monthsShort = localeMonthsShort; + proto$1.monthsParse = localeMonthsParse; + proto$1.monthsRegex = monthsRegex; + proto$1.monthsShortRegex = monthsShortRegex; + proto$1.week = localeWeek; + proto$1.firstDayOfYear = localeFirstDayOfYear; + proto$1.firstDayOfWeek = localeFirstDayOfWeek; + + proto$1.weekdays = localeWeekdays; + proto$1.weekdaysMin = localeWeekdaysMin; + proto$1.weekdaysShort = localeWeekdaysShort; + proto$1.weekdaysParse = localeWeekdaysParse; + + proto$1.weekdaysRegex = weekdaysRegex; + proto$1.weekdaysShortRegex = weekdaysShortRegex; + proto$1.weekdaysMinRegex = weekdaysMinRegex; + + proto$1.isPM = localeIsPM; + proto$1.meridiem = localeMeridiem; + + function get$1(format, index, field, setter) { + var locale = getLocale(), + utc = createUTC().set(setter, index); + return locale[field](utc, format); + } + + function listMonthsImpl(format, index, field) { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + + if (index != null) { + return get$1(format, index, field, 'month'); + } + + var i, + out = []; + for (i = 0; i < 12; i++) { + out[i] = get$1(format, i, field, 'month'); + } + return out; + } + + // () + // (5) + // (fmt, 5) + // (fmt) + // (true) + // (true, 5) + // (true, fmt, 5) + // (true, fmt) + function listWeekdaysImpl(localeSorted, format, index, field) { + if (typeof localeSorted === 'boolean') { + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } else { + format = localeSorted; + index = format; + localeSorted = false; + + if (isNumber(format)) { + index = format; + format = undefined; + } + + format = format || ''; + } + + var locale = getLocale(), + shift = localeSorted ? locale._week.dow : 0, + i, + out = []; + + if (index != null) { + return get$1(format, (index + shift) % 7, field, 'day'); + } + + for (i = 0; i < 7; i++) { + out[i] = get$1(format, (i + shift) % 7, field, 'day'); + } + return out; + } + + function listMonths(format, index) { + return listMonthsImpl(format, index, 'months'); + } + + function listMonthsShort(format, index) { + return listMonthsImpl(format, index, 'monthsShort'); + } + + function listWeekdays(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); + } + + function listWeekdaysShort(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); + } + + function listWeekdaysMin(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); + } + + getSetGlobalLocale('en', { + eras: [ + { + since: '0001-01-01', + until: +Infinity, + offset: 1, + name: 'Anno Domini', + narrow: 'AD', + abbr: 'AD', + }, + { + since: '0000-12-31', + until: -Infinity, + offset: 1, + name: 'Before Christ', + narrow: 'BC', + abbr: 'BC', + }, + ], + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal: function (number) { + var b = number % 10, + output = + toInt((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, + }); + + // Side effect imports + + hooks.lang = deprecate( + 'moment.lang is deprecated. Use moment.locale instead.', + getSetGlobalLocale + ); + hooks.langData = deprecate( + 'moment.langData is deprecated. Use moment.localeData instead.', + getLocale + ); + + var mathAbs = Math.abs; + + function abs() { + var data = this._data; + + this._milliseconds = mathAbs(this._milliseconds); + this._days = mathAbs(this._days); + this._months = mathAbs(this._months); + + data.milliseconds = mathAbs(data.milliseconds); + data.seconds = mathAbs(data.seconds); + data.minutes = mathAbs(data.minutes); + data.hours = mathAbs(data.hours); + data.months = mathAbs(data.months); + data.years = mathAbs(data.years); + + return this; + } + + function addSubtract$1(duration, input, value, direction) { + var other = createDuration(input, value); + + duration._milliseconds += direction * other._milliseconds; + duration._days += direction * other._days; + duration._months += direction * other._months; + + return duration._bubble(); + } + + // supports only 2.0-style add(1, 's') or add(duration) + function add$1(input, value) { + return addSubtract$1(this, input, value, 1); + } + + // supports only 2.0-style subtract(1, 's') or subtract(duration) + function subtract$1(input, value) { + return addSubtract$1(this, input, value, -1); + } + + function absCeil(number) { + if (number < 0) { + return Math.floor(number); + } else { + return Math.ceil(number); + } + } + + function bubble() { + var milliseconds = this._milliseconds, + days = this._days, + months = this._months, + data = this._data, + seconds, + minutes, + hours, + years, + monthsFromDays; + + // if we have a mix of positive and negative values, bubble down first + // check: https://github.com/moment/moment/issues/2166 + if ( + !( + (milliseconds >= 0 && days >= 0 && months >= 0) || + (milliseconds <= 0 && days <= 0 && months <= 0) + ) + ) { + milliseconds += absCeil(monthsToDays(months) + days) * 864e5; + days = 0; + months = 0; + } + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + + seconds = absFloor(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absFloor(seconds / 60); + data.minutes = minutes % 60; + + hours = absFloor(minutes / 60); + data.hours = hours % 24; + + days += absFloor(hours / 24); + + // convert days to months + monthsFromDays = absFloor(daysToMonths(days)); + months += monthsFromDays; + days -= absCeil(monthsToDays(monthsFromDays)); + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + + return this; + } + + function daysToMonths(days) { + // 400 years have 146097 days (taking into account leap year rules) + // 400 years have 12 months === 4800 + return (days * 4800) / 146097; + } + + function monthsToDays(months) { + // the reverse of daysToMonths + return (months * 146097) / 4800; + } + + function as(units) { + if (!this.isValid()) { + return NaN; + } + var days, + months, + milliseconds = this._milliseconds; + + units = normalizeUnits(units); + + if (units === 'month' || units === 'quarter' || units === 'year') { + days = this._days + milliseconds / 864e5; + months = this._months + daysToMonths(days); + switch (units) { + case 'month': + return months; + case 'quarter': + return months / 3; + case 'year': + return months / 12; + } + } else { + // handle milliseconds separately because of floating point math errors (issue #1867) + days = this._days + Math.round(monthsToDays(this._months)); + switch (units) { + case 'week': + return days / 7 + milliseconds / 6048e5; + case 'day': + return days + milliseconds / 864e5; + case 'hour': + return days * 24 + milliseconds / 36e5; + case 'minute': + return days * 1440 + milliseconds / 6e4; + case 'second': + return days * 86400 + milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': + return Math.floor(days * 864e5) + milliseconds; + default: + throw new Error('Unknown unit ' + units); + } + } + } + + function makeAs(alias) { + return function () { + return this.as(alias); + }; + } + + var asMilliseconds = makeAs('ms'), + asSeconds = makeAs('s'), + asMinutes = makeAs('m'), + asHours = makeAs('h'), + asDays = makeAs('d'), + asWeeks = makeAs('w'), + asMonths = makeAs('M'), + asQuarters = makeAs('Q'), + asYears = makeAs('y'), + valueOf$1 = asMilliseconds; + + function clone$1() { + return createDuration(this); + } + + function get$2(units) { + units = normalizeUnits(units); + return this.isValid() ? this[units + 's']() : NaN; + } + + function makeGetter(name) { + return function () { + return this.isValid() ? this._data[name] : NaN; + }; + } + + var milliseconds = makeGetter('milliseconds'), + seconds = makeGetter('seconds'), + minutes = makeGetter('minutes'), + hours = makeGetter('hours'), + days = makeGetter('days'), + months = makeGetter('months'), + years = makeGetter('years'); + + function weeks() { + return absFloor(this.days() / 7); + } + + var round = Math.round, + thresholds = { + ss: 44, // a few seconds to seconds + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month/week + w: null, // weeks to month + M: 11, // months to year + }; + + // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize + function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); + } + + function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) { + var duration = createDuration(posNegDuration).abs(), + seconds = round(duration.as('s')), + minutes = round(duration.as('m')), + hours = round(duration.as('h')), + days = round(duration.as('d')), + months = round(duration.as('M')), + weeks = round(duration.as('w')), + years = round(duration.as('y')), + a = + (seconds <= thresholds.ss && ['s', seconds]) || + (seconds < thresholds.s && ['ss', seconds]) || + (minutes <= 1 && ['m']) || + (minutes < thresholds.m && ['mm', minutes]) || + (hours <= 1 && ['h']) || + (hours < thresholds.h && ['hh', hours]) || + (days <= 1 && ['d']) || + (days < thresholds.d && ['dd', days]); + + if (thresholds.w != null) { + a = + a || + (weeks <= 1 && ['w']) || + (weeks < thresholds.w && ['ww', weeks]); + } + a = a || + (months <= 1 && ['M']) || + (months < thresholds.M && ['MM', months]) || + (years <= 1 && ['y']) || ['yy', years]; + + a[2] = withoutSuffix; + a[3] = +posNegDuration > 0; + a[4] = locale; + return substituteTimeAgo.apply(null, a); + } + + // This function allows you to set the rounding function for relative time strings + function getSetRelativeTimeRounding(roundingFunction) { + if (roundingFunction === undefined) { + return round; + } + if (typeof roundingFunction === 'function') { + round = roundingFunction; + return true; + } + return false; + } + + // This function allows you to set a threshold for relative time strings + function getSetRelativeTimeThreshold(threshold, limit) { + if (thresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return thresholds[threshold]; + } + thresholds[threshold] = limit; + if (threshold === 's') { + thresholds.ss = limit - 1; + } + return true; + } + + function humanize(argWithSuffix, argThresholds) { + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var withSuffix = false, + th = thresholds, + locale, + output; + + if (typeof argWithSuffix === 'object') { + argThresholds = argWithSuffix; + argWithSuffix = false; + } + if (typeof argWithSuffix === 'boolean') { + withSuffix = argWithSuffix; + } + if (typeof argThresholds === 'object') { + th = Object.assign({}, thresholds, argThresholds); + if (argThresholds.s != null && argThresholds.ss == null) { + th.ss = argThresholds.s - 1; + } + } + + locale = this.localeData(); + output = relativeTime$1(this, !withSuffix, th, locale); + + if (withSuffix) { + output = locale.pastFuture(+this, output); + } + + return locale.postformat(output); + } + + var abs$1 = Math.abs; + + function sign(x) { + return (x > 0) - (x < 0) || +x; + } + + function toISOString$1() { + // for ISO strings we do not use the normal bubbling rules: + // * milliseconds bubble up until they become hours + // * days do not bubble at all + // * months bubble up until they become years + // This is because there is no context-free conversion between hours and days + // (think of clock changes) + // and also not between days and months (28-31 days per month) + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var seconds = abs$1(this._milliseconds) / 1000, + days = abs$1(this._days), + months = abs$1(this._months), + minutes, + hours, + years, + s, + total = this.asSeconds(), + totalSign, + ymSign, + daysSign, + hmsSign; + + if (!total) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + // 3600 seconds -> 60 minutes -> 1 hour + minutes = absFloor(seconds / 60); + hours = absFloor(minutes / 60); + seconds %= 60; + minutes %= 60; + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : ''; + + totalSign = total < 0 ? '-' : ''; + ymSign = sign(this._months) !== sign(total) ? '-' : ''; + daysSign = sign(this._days) !== sign(total) ? '-' : ''; + hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : ''; + + return ( + totalSign + + 'P' + + (years ? ymSign + years + 'Y' : '') + + (months ? ymSign + months + 'M' : '') + + (days ? daysSign + days + 'D' : '') + + (hours || minutes || seconds ? 'T' : '') + + (hours ? hmsSign + hours + 'H' : '') + + (minutes ? hmsSign + minutes + 'M' : '') + + (seconds ? hmsSign + s + 'S' : '') + ); + } + + var proto$2 = Duration.prototype; + + proto$2.isValid = isValid$1; + proto$2.abs = abs; + proto$2.add = add$1; + proto$2.subtract = subtract$1; + proto$2.as = as; + proto$2.asMilliseconds = asMilliseconds; + proto$2.asSeconds = asSeconds; + proto$2.asMinutes = asMinutes; + proto$2.asHours = asHours; + proto$2.asDays = asDays; + proto$2.asWeeks = asWeeks; + proto$2.asMonths = asMonths; + proto$2.asQuarters = asQuarters; + proto$2.asYears = asYears; + proto$2.valueOf = valueOf$1; + proto$2._bubble = bubble; + proto$2.clone = clone$1; + proto$2.get = get$2; + proto$2.milliseconds = milliseconds; + proto$2.seconds = seconds; + proto$2.minutes = minutes; + proto$2.hours = hours; + proto$2.days = days; + proto$2.weeks = weeks; + proto$2.months = months; + proto$2.years = years; + proto$2.humanize = humanize; + proto$2.toISOString = toISOString$1; + proto$2.toString = toISOString$1; + proto$2.toJSON = toISOString$1; + proto$2.locale = locale; + proto$2.localeData = localeData; + + proto$2.toIsoString = deprecate( + 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', + toISOString$1 + ); + proto$2.lang = lang; + + // FORMATTING + + addFormatToken('X', 0, 0, 'unix'); + addFormatToken('x', 0, 0, 'valueOf'); + + // PARSING + + addRegexToken('x', matchSigned); + addRegexToken('X', matchTimestamp); + addParseToken('X', function (input, array, config) { + config._d = new Date(parseFloat(input) * 1000); + }); + addParseToken('x', function (input, array, config) { + config._d = new Date(toInt(input)); + }); + + //! moment.js + + hooks.version = '2.30.1'; + + setHookCallback(createLocal); + + hooks.fn = proto; + hooks.min = min; + hooks.max = max; + hooks.now = now; + hooks.utc = createUTC; + hooks.unix = createUnix; + hooks.months = listMonths; + hooks.isDate = isDate; + hooks.locale = getSetGlobalLocale; + hooks.invalid = createInvalid; + hooks.duration = createDuration; + hooks.isMoment = isMoment; + hooks.weekdays = listWeekdays; + hooks.parseZone = createInZone; + hooks.localeData = getLocale; + hooks.isDuration = isDuration; + hooks.monthsShort = listMonthsShort; + hooks.weekdaysMin = listWeekdaysMin; + hooks.defineLocale = defineLocale; + hooks.updateLocale = updateLocale; + hooks.locales = listLocales; + hooks.weekdaysShort = listWeekdaysShort; + hooks.normalizeUnits = normalizeUnits; + hooks.relativeTimeRounding = getSetRelativeTimeRounding; + hooks.relativeTimeThreshold = getSetRelativeTimeThreshold; + hooks.calendarFormat = getCalendarFormat; + hooks.prototype = proto; + + // currently HTML5 input type only supports 24-hour formats + hooks.HTML5_FMT = { + DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // + DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // + DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // + DATE: 'YYYY-MM-DD', // + TIME: 'HH:mm', // + TIME_SECONDS: 'HH:mm:ss', // + TIME_MS: 'HH:mm:ss.SSS', // + WEEK: 'GGGG-[W]WW', // + MONTH: 'YYYY-MM', // + }; + + return hooks; + + }))); +} (moment$1, moment$1.exports)); + +var momentExports = moment$1.exports; +var moment = /*@__PURE__*/getDefaultExportFromCjs(momentExports); + +function imageTagProcessor(app, noteFile, settings, defaultdir) { + const unique = Math.random().toString(16).slice(2); + function processImageTag(match, anchor, link, caption, imgsize) { + return __awaiter(this, void 0, void 0, function* () { + logError("processImageTag: " + match); + if (!isUrl(link)) { + return match; + } + try { + var lock = new AsyncLock(); + let fpath; + let fileData; + const opsys = process.platform; + const mediaDir = yield getMDir(app.app, noteFile, settings, defaultdir, unique); + yield app.ensureFolderExists(mediaDir); + const protocol = link.slice(0, 5); + if (protocol == "data:") { + logError("ReadBase64: \r\n" + fpath, false); + fileData = yield base64ToBuff(link); + } + else if (protocol == "file:") { + logError("Readlocal: \r\n" + fpath, false); + if (SUPPORTED_OS.win.includes(opsys)) { + fpath = link.replace("file:///", ""); + } + else if (SUPPORTED_OS.unix.includes(opsys)) { + fpath = link.replace("file://", ""); + } + else { + fpath = link.replace("file://", ""); + } + fileData = yield readFromDisk(fpath); + if (fileData === null) { + fileData = yield readFromDisk(decodeURI(fpath)); + } + } + else { + //Try to download several times + let trycount = 0; + while (trycount < settings.tryCount) { + fileData = yield downloadImage(link); + logError("\r\n\nDownloading (try): " + trycount + "\r\n\n"); + if (fileData !== null) { + break; + } + trycount++; + } + } + if (fileData === null) { + logError("Cannot get an attachment content!", false); + return null; + } + if (Math.round(fileData.byteLength / 1024) < settings.filesizeLimit) { + logError("Lower limit of the file size!", false); + return null; + } + try { + const { fileName, needWrite } = yield lock.acquire(match, function () { + return __awaiter(this, void 0, void 0, function* () { + const parsedUrl = new url.URL(link); + let fileExt = yield getFileExt(fileData, parsedUrl.pathname); + if (fileExt == "png" && settings.PngToJpeg) { + const blob = new Blob([new Uint8Array(fileData)]); + fileData = yield blobToJpegArrayBuffer(blob, settings.JpegQuality * 0.01); + logError("arbuf: "); + logError(fileData); + } + const { fileName, needWrite } = yield chooseFileName(app.app.vault.adapter, mediaDir, link, fileData, settings); + return { fileName, needWrite }; + }); + }); + if (needWrite && fileName) { + yield app.app.vault.createBinary(fileName, fileData); + } + if (fileName) { + let shortName = ""; + const rdir = yield getRDir(noteFile, settings, fileName, link); + let pathWiki = rdir[0]; + let pathMd = rdir[1]; + if (settings.addNameOfFile && protocol == "file:") { + if (!app.app.vault.getConfig("useMarkdownLinks")) { + shortName = "\r\n[[" + + fileName + + "\|" + + rdir[2]["lnkurid"] + "]]\r\n"; + } + else { + shortName = "\r\n[" + + rdir[2]["lnkurid"] + + "](" + + rdir[2]["pathuri"] + + ")\r\n"; + } + } + if (!app.app.vault.getConfig("useMarkdownLinks")) { + // image caption + (!settings.useCaptions || !caption.length) ? caption = "" : caption = "\|" + caption; + // image size has higher priority + (!settings.useCaptions || !imgsize.length) ? caption = "" : caption = "\|" + imgsize; + return [match, `![[${pathWiki}${caption}]]`, `${shortName}`]; + } + else { + (!settings.useCaptions || !caption.length) ? caption = "" : caption = " " + caption; + return [match, `![${anchor}](${pathMd}${caption})`, `${shortName}`]; + } + } + else { + return null; + } + } + catch (error) { + if (error.message === "File already exists.") { + } + else { + throw error; + } + } + return null; + } + catch (error) { + logError("Image processing failed: " + error, false); + return null; + } + }); + } + return processImageTag; +} +function getRDir(noteFile, settings, fileName, link = undefined) { + return __awaiter(this, void 0, void 0, function* () { + let pathWiki = ""; + let pathMd = ""; + const notePath = normalizePath(noteFile.parent.path); + const parsedPath = path__default["default"].parse(normalizePath(fileName)); + const parsedPathE = { + parentd: path__default["default"].basename(parsedPath["dir"]), + basen: (parsedPath["name"] + parsedPath["ext"]), + lnkurid: path__default["default"].basename(decodeURI(link)), + pathuri: encodeURI(normalizePath(fileName)) + }; + switch (settings.pathInTags) { + case "baseFileName": + pathWiki = pathMd = parsedPathE["basen"]; + break; + case "onlyRelative": + pathWiki = pathJoin([path__default["default"].relative(path__default["default"].sep + notePath, path__default["default"].sep + parsedPath["dir"]), parsedPathE["basen"]]); + pathMd = encodeURI(pathWiki); + break; + case "fullDirPath": + pathWiki = fileName.replace(/\\/g, "/"); + pathMd = parsedPathE["pathuri"]; + break; + default: + pathWiki = fileName; + pathMd = parsedPathE["pathuri"]; + } + return [pathWiki, pathMd, parsedPathE]; + }); +} +function getMDir(app, noteFile, settings, defaultdir = false, unique = "") { + return __awaiter(this, void 0, void 0, function* () { + noteFile.parent.path; + const current_date = moment().format(settings.DateFormat); + const obsmediadir = app.vault.getConfig("attachmentFolderPath"); + const mediadir = settings.mediaRootDir; + var attdir = settings.saveAttE; + if (defaultdir) { + attdir = ""; + } + let root = "/"; + switch (attdir) { + case 'inFolderBelow': + root = mediadir + .replace("${notename}", noteFile.basename) + .replace("${unique}", unique) + .replace("${date}", current_date); + break; + case 'nextToNoteS': + root = (pathJoin([noteFile.parent.path, mediadir])) + .replace("${notename}", noteFile.basename) + .replace("${unique}", unique) + .replace("${date}", current_date); + break; + default: + if (obsmediadir === '/') { + root = obsmediadir; + } + else if (obsmediadir === './') { + root = pathJoin([noteFile.parent.path]); + } + else if (obsmediadir.match(/\.\/.+/g) !== null) { + root = pathJoin([noteFile.parent.path, obsmediadir.replace('\.\/', '')]); + } + else { + root = normalizePath(obsmediadir); + } + } + return trimAny(root, ["/", "\\"]); + }); +} +function chooseFileName(adapter, dir, link, contentData, settings) { + return __awaiter(this, void 0, void 0, function* () { + const parsedUrl = new url.URL(link); + const ignoredExt = settings.ignoredExt.split("|"); + let fileExt = yield getFileExt(contentData, parsedUrl.pathname); + logError("file: " + link + " content: " + contentData + " file ext: " + fileExt, false); + if (fileExt == "unknown" && !settings.downUnknown) { + return { fileName: "", needWrite: false }; + } + if (ignoredExt.includes(fileExt)) { + return { fileName: "", needWrite: false }; + } + const baseName = md5Sig(contentData); + let needWrite = true; + let fileName = ""; + const suggestedName = pathJoin([dir, cleanFileName(`${baseName}` + `.${fileExt}`)]); + if (yield adapter.exists(suggestedName, false)) { + const fileData = yield adapter.readBinary(suggestedName); + const existing_file_md5 = md5Sig(fileData); + if (existing_file_md5 === baseName) { + fileName = suggestedName; + needWrite = false; + } + else { + fileName = pathJoin([dir, cleanFileName(Math.random().toString(9).slice(2) + `.${fileExt}`)]); + } + } + else { + fileName = suggestedName; + } + logError("File name: " + fileName, false); + if (!fileName) { + throw new Error("Failed to generate file name for media file."); + } + //linkHashes.ensureHashGenerated(link, contentData); + return { fileName, needWrite }; + }); +} + +// Queue that keep only unique values and counts attempts +class UniqueQueue { + constructor() { + this.queue = new Array(); + } + push(value, attempts) { + if (attempts < 1) { + console.error("Triyng to enqueue item with attempts < 1"); + return; + } + this.remove(value); + this.queue.push({ value, attempts }); + } + remove(value) { + this.queue = this.queue.filter((item) => item.value !== value); + } + iterationQueue() { + const extractIteration = (prev, curr) => { + prev.iteration.push(curr.value); + if (curr.attempts > 1) { + prev.queue.push(curr.value, curr.attempts - 1); + } + return prev; + }; + const { queue, iteration } = this.queue.reduce(extractIteration, { + queue: new UniqueQueue(), + iteration: [], + }); + this.queue = queue.queue; + return iteration; + } +} + +class ModalW1 extends obsidian.Modal { + constructor(app) { + super(app); + this.messg = ""; + this.callbackFunc = null; + } + onOpen() { + let { contentEl, titleEl } = this; + titleEl.setText(APP_TITLE); + contentEl.createDiv({ + text: this.messg + }); + contentEl.createEl("button", { + cls: ["mod-cta"], + text: "Cancel" + }).addEventListener("click", () => __awaiter(this, void 0, void 0, function* () { + this.close(); + })); + contentEl.createEl("button", { + cls: ["mod-cta"], + text: "Confirm" + }).addEventListener("click", () => __awaiter(this, void 0, void 0, function* () { + this.close(); + if (this.callbackFunc) { + this.callbackFunc(); + } + })); + } + onClose() { + let { contentEl } = this; + contentEl.empty(); + } +} + +require('fs').promises; +//import { count, log } from "console" +class LocalImagesPlugin extends obsidian.Plugin { + constructor() { + super(...arguments); + this.modifiedQueue = new UniqueQueue(); + this.intervalId = 0; + this.newfCreated = []; + this.noteModified = []; + this.newfMoveReq = true; + this.newfCreatedByDownloader = []; + // using arrow syntax for callbacks to correctly pass this context + this.processActivePage = (defaultdir = false) => () => __awaiter(this, void 0, void 0, function* () { + logError("processActivePage"); + try { + const activeFile = this.getCurrentNote(); + yield this.processPage(activeFile, defaultdir); + } + catch (e) { + showBalloon(`Please select a note or click inside selected note in canvas.`, this.settings.showNotifications); + return; + } + }); + this.processAllPages = () => __awaiter(this, void 0, void 0, function* () { + const files = this.app.vault.getMarkdownFiles(); + const pagesCount = files.length; + const notice = this.settings.showNotifications + ? new obsidian.Notice(APP_TITLE + `\nStart processing. Total ${pagesCount} pages. `, TIMEOUT_LIKE_INFINITY) + : null; + for (const [index, file] of files.entries()) { + if (this.ExemplaryOfMD(file.path)) { + if (notice) { + //setMessage() is undeclared but factically existing, so ignore the TS error //@ts-expect-error + notice.setMessage(APP_TITLE + `\nProcessing \n"${file.path}" \nPage ${index} of ${pagesCount}`); + } + yield this.processPage(file); + } + } + if (notice) { + // dum @ts-expect-error + notice.setMessage(APP_TITLE + `\n${pagesCount} pages were processed.`); + setTimeout(() => { + notice.hide(); + }, NOTICE_TIMEOUT); + } + }); + this.removeOrphans = (type = undefined, filesToRemove = undefined, noteFile = undefined) => () => __awaiter(this, void 0, void 0, function* () { + var _a, _b, _c, _d, _e; + const obsmediadir = app.vault.getConfig("attachmentFolderPath"); + const allFiles = this.app.vault.getFiles(); + let oldRootdir = this.settings.mediaRootDir; + if (type == "plugin") { + let orphanedAttachments = []; + let allAttachmentsLinks = []; + if (this.settings.saveAttE != "nextToNoteS" || + !path__default["default"].basename(oldRootdir).endsWith("${notename}") || + oldRootdir.includes("${date}")) { + showBalloon("This command requires the settings 'Next to note in the folder specified below' and pattern '${notename}' at the end to be enabled, also the path cannot contain ${date} pattern.\nPlease, change settings first!\r\n", this.settings.showNotifications); + return; + } + if (!noteFile) { + noteFile = this.getCurrentNote(); + if (!noteFile) { + showBalloon("Please, select a note or click inside a note in canvas!", this.settings.showNotifications); + return; + } + } + if (this.ExemplaryOfMD(noteFile.path)) { + oldRootdir = oldRootdir.replace("${notename}", (_a = path__default["default"].parse(noteFile.path)) === null || _a === void 0 ? void 0 : _a.name); + oldRootdir = trimAny(pathJoin([(_b = path__default["default"].parse(noteFile.path)) === null || _b === void 0 ? void 0 : _b.dir, oldRootdir]), ["\/"]); + if (!(yield this.app.vault.exists(oldRootdir))) { + showBalloon("The attachment folder " + oldRootdir + " does not exist!", this.settings.showNotifications); + return; + } + const allAttachments = yield ((_c = this.app.vault.getAbstractFileByPath(oldRootdir)) === null || _c === void 0 ? void 0 : _c.children); + const metaCache = this.app.metadataCache.getFileCache(noteFile); + const embeds = metaCache === null || metaCache === void 0 ? void 0 : metaCache.embeds; + const links = metaCache === null || metaCache === void 0 ? void 0 : metaCache.links; + if (embeds) { + for (const embed of embeds) { + allAttachmentsLinks.push(path__default["default"].basename(embed.link)); + } + } + if (links) { + for (const link of links) { + allAttachmentsLinks.push(path__default["default"].basename(link.link)); + } + } + if (allAttachments) { + for (const attach of allAttachments) { + if (!allAttachmentsLinks.includes(attach.name) && attach.children == undefined) { + logError("orph: " + attach.basename); + orphanedAttachments.push(attach); + } + } + } + if (orphanedAttachments.length > 0) { + const mod = new ModalW1(this.app); + mod.messg = "Confirm remove " + orphanedAttachments.length + " orphan(s) from '" + oldRootdir + "'\r\n\r\n "; + mod.plugin = this; + mod.callbackFunc = this.removeOrphans("execremove", orphanedAttachments); + mod.open(); + } + else { + showBalloon("No orphaned files found!", this.settings.showNotifications); + } + } + } + if (type == "obsidian") { + if (obsmediadir.slice(0, 2) == "./" || obsmediadir == "/") { + showBalloon("This command cannot run on vault's root or on subfolder next to note!\nPlease, change settings first!\r\n", this.settings.showNotifications); + return; + } + const allAttachments = (_d = this.app.vault.getAbstractFileByPath(obsmediadir)) === null || _d === void 0 ? void 0 : _d.children; + let orphanedAttachments = []; + let allAttachmentsLinks = []; + if (allFiles) { + for (const file of allFiles) { + //Fix for canvas files + if (file !== null && this.ExemplaryOfCANVAS(file.path)) { + logError(file); + logError(this.app.metadataCache.getCache(file.path)); + let canvasData; + try { + canvasData = JSON.parse(yield app.vault.cachedRead(file)); + } + catch (e) { + logError("Parse canvas data error"); + continue; + } + if (canvasData.nodes && canvasData.nodes.length > 0) { + for (const node of canvasData.nodes) { + logError(node); + if (node.type === "file") { + logError("file json"); + allAttachmentsLinks.push(path__default["default"].basename(node.file)); + } + else if (node.type == "text") { + logError("text json"); + //https://github.com/Fevol/obsidian-typings + //Undocumented API may be altered in the future + const AllNodeLinks = (_e = (yield this.app.internalPlugins.plugins.canvas.instance.index.parseText(node.text))) === null || _e === void 0 ? void 0 : _e.links; + logError(AllNodeLinks); + if (AllNodeLinks === undefined) { + continue; + } + for (const Nodelink of AllNodeLinks) { + allAttachmentsLinks.push(path__default["default"].basename(Nodelink.link)); + } + } + } + } + } + if (file !== null && this.ExemplaryOfMD(file.path)) { + const metaCache = this.app.metadataCache.getCache(file.path); + const embeds = metaCache === null || metaCache === void 0 ? void 0 : metaCache.embeds; + const links = metaCache === null || metaCache === void 0 ? void 0 : metaCache.links; + logError(embeds); + logError(links); + if (embeds) { + for (const embed of embeds) { + allAttachmentsLinks.push(path__default["default"].basename(embed.link)); + } + } + if (links) { + for (const link of links) { + allAttachmentsLinks.push(path__default["default"].basename(link.link)); + } + } + } + } + for (const attach of allAttachments) { + if (!allAttachmentsLinks.includes(attach.name) && attach.children == undefined) { + logError(allAttachmentsLinks); + logError(attach.name); + logError("orph: " + attach.name); + orphanedAttachments.push(attach); + } + } + } + logError("Orphaned: "); + logError(orphanedAttachments, true); + if (orphanedAttachments.length > 0) { + const mod = new ModalW1(this.app); + mod.messg = "Confirm remove " + orphanedAttachments.length + " orphan(s) from '" + obsmediadir + " '\r\n \ + NOTE: Be careful when running this command on Obsidian attachments folder, since some html-linked files may also be moved.\r\n "; + mod.plugin = this; + mod.callbackFunc = this.removeOrphans("execremove", orphanedAttachments); + mod.open(); + } + else { + showBalloon("No orphaned files found!", this.settings.showNotifications); + } + } + if (type == "execremove") { + const useSysTrash = (this.app.vault.getConfig("trashOption") === "system"); + const remcompl = this.settings.removeOrphansCompl; + let msg = ""; + if (filesToRemove) { + filesToRemove.forEach((el) => { + if (remcompl) { + msg = "were deleted completely."; + this.app.vault.delete(el, true); + } + else { + if (useSysTrash) { + msg = "were moved to the system garbage can."; + } + else { + msg = "were moved to the Obsidian garbage can."; + } + this.app.vault.trash(el, useSysTrash); + } + }); + } + showBalloon(filesToRemove.length + " file(s) " + msg, this.settings.showNotifications); + } + }); + this.openProcessAllModal = () => { + const mod = new ModalW1(this.app); + mod.messg = "Confirm processing all pages.\r\n "; + mod.plugin = this; + mod.callbackFunc = this.processAllPages; + mod.open(); + }; + this.processMdFilesOnTimer = () => __awaiter(this, void 0, void 0, function* () { + var _f; + const th = this; + function onRet() { + th.newfCreated = []; + th.newfCreatedByDownloader = []; + th.noteModified = []; + th.newfMoveReq = false; + window.clearInterval(th.newfProcInt); + th.newfProcInt = 0; + } + logError("func processMdFilesOnTimer:\r\n"); + logError(this.noteModified, true); + try { + window.clearInterval(this.newfProcInt); + this.newfProcInt = 0; + this.newfMoveReq = false; + let itemcount = 0; + const useMdLinks = this.app.vault.getConfig("useMarkdownLinks"); + for (let note of this.noteModified) { + const metaCache = this.app.metadataCache.getFileCache(note); + let filedata = yield this.app.vault.cachedRead(note); + let pr = false; + for (const reg_p of MD_SEARCH_PATTERN) { + if (reg_p.test(filedata)) { + pr = true; + break; + } + } + const mdir = yield getMDir(this.app, note, this.settings); + const obsmdir = yield getMDir(this.app, note, this.settings, true); + let embeds = metaCache === null || metaCache === void 0 ? void 0 : metaCache.embeds; + if (obsmdir != "" && !(yield this.app.vault.adapter.exists(obsmdir))) { + if (!this.settings.DoNotCreateObsFolder) { + this.ensureFolderExists(obsmdir); + showBalloon("You obsidian media folder set to '" + obsmdir + "', and has been created by the plugin. Please, try again. ", this.settings.showNotifications); + onRet(); + } + return; + } + if (embeds || pr) { + yield this.ensureFolderExists(mdir); + for (let el of embeds) { + logError(el); + let oldpath = pathJoin([obsmdir, path__default["default"].basename(el.link)]); + let oldtag = el["original"]; + logError(useMdLinks); + logError(this.newfCreated); + if ((this.newfCreated.indexOf(el.link) != -1 || (obsmdir != "" && (this.newfCreated.includes(oldpath) || this.newfCreated.includes(el.link)))) && + !this.newfCreatedByDownloader.includes(oldtag)) { + if (!(yield this.app.vault.adapter.exists(oldpath))) { + logError("Cannot find " + el.link + " skipping..."); + continue; + } + let newpath = pathJoin([mdir, cFileName(path__default["default"].basename(el.link))]); + let newlink = yield getRDir(note, this.settings, newpath); + logError(el.link); + //let newBinData: Buffer | null = null + let newBinData = null; + let newMD5 = null; + const oldBinData = yield readFromDiskB(pathJoin([this.app.vault.adapter.basePath, oldpath]), 5000); + const oldMD5 = md5Sig(oldBinData); + const fileExt = yield getFileExt(oldBinData, oldpath); + logError("oldbindata: " + oldBinData); + logError("oldext: " + fileExt); + if (this.settings.PngToJpegLocal && fileExt == "png") { + logError("converting to Jpeg"); + const blob = new Blob([new Uint8Array(yield this.app.vault.adapter.readBinary(oldpath))]); + newBinData = yield blobToJpegArrayBuffer(blob, this.settings.JpegQuality * 0.01); + newMD5 = md5Sig(newBinData); + logError(newBinData); + if (newBinData != null) { + if (this.settings.useMD5ForNewAtt) { + newpath = pathJoin([mdir, newMD5 + ".jpeg"]); + } + else { + newpath = pathJoin([mdir, cFileName(((_f = path__default["default"].parse(el.link)) === null || _f === void 0 ? void 0 : _f.name) + ".jpeg")]); + } + newlink = yield getRDir(note, this.settings, newpath); + } + } + else if (this.settings.useMD5ForNewAtt) { + newpath = pathJoin([mdir, oldMD5 + path__default["default"].extname(el.link)]); + newlink = yield getRDir(note, this.settings, newpath); + } + else if (!this.settings.useMD5ForNewAtt) { + newpath = pathJoin([mdir, cFileName(path__default["default"].basename(el.link))]); + newlink = yield getRDir(note, this.settings, newpath); + } + if (yield this.app.vault.adapter.exists(newpath)) { + let newFMD5; + if (newBinData != null) { + newFMD5 = md5Sig(yield this.app.vault.adapter.readBinary(newpath)); + } + else { + newFMD5 = md5Sig(yield readFromDiskB(pathJoin([this.app.vault.adapter.basePath, newpath]), 5000)); + } + if (newMD5 === newFMD5 || (oldMD5 === newFMD5 && oldpath != newpath)) { + logError(path__default["default"].dirname(oldpath)); + logError("Deleting duplicate file: " + oldpath); + yield this.app.vault.adapter.remove(oldpath); + } + else if (oldpath != newpath) { + logError("Renaming existing: " + oldpath); + let inc = 1; + while (yield this.app.vault.adapter.exists(newpath)) { + newpath = pathJoin([mdir, `(${inc}) ` + cFileName(path__default["default"].basename(el.link))]); + inc++; + } + newlink = yield getRDir(note, this.settings, newpath); + yield this.app.vault.adapter.rename(oldpath, newpath); + } + } + else { + logError(`renaming ${oldpath} to ${newpath}`); + try { + if (newBinData != null) { + yield this.app.vault.adapter.writeBinary(newpath, newBinData).then(); + { + yield this.app.vault.adapter.remove(oldpath); + } + } + else { + yield this.app.vault.adapter.rename(oldpath, newpath); + } + } + catch (error) { + logError(error); + } + } + let addName = ""; + if (this.settings.addNameOfFile) { + if (useMdLinks) { + addName = `[Open: ${path__default["default"].basename(el.link)}](${newlink[1]})\r\n`; + } + else { + addName = `[[${newlink[0]}|Open: ${path__default["default"].basename(el.link)}]]\r\n`; + } + } + let newtag = addName + oldtag.replace(el.link, newlink[0]); + if (useMdLinks) { + newtag = addName + oldtag.replace(encObsURI(el.link), newlink[1]); + } + filedata = filedata.replaceAll(oldtag, newtag); + itemcount++; + } + } + } + if (itemcount > 0) { + yield this.app.vault.modify(note, filedata); + showBalloon(itemcount + " attachments for note " + note.path + " were processed.", this.settings.showNotifications); + itemcount = 0; + } + } + } + catch (e) { + logError(e); + onRet(); + } + onRet(); + }); + this.setTitleAsName = () => __awaiter(this, void 0, void 0, function* () { + try { + const noteFile = this.getCurrentNote(); + const fileData = yield this.app.vault.cachedRead(noteFile); + const title = fileData.match(/^#{1,6} .+?($|\n)/gm); + var ind = 0; + if (title !== null) { + const newName = cFileName(trimAny(title[0].toString(), ["#", " "])).slice(0, 200); + var fullPath = pathJoin([noteFile.parent.path, newName + ".md"]); + var fExist = yield this.app.vault.exists(fullPath); + if (trimAny(noteFile.path, ["\\", "/"]) != trimAny(fullPath, ["\\", "/"])) { + while (fExist) { + ind++; + var fullPath = pathJoin([noteFile.parent.path, newName + " (" + ind + ")" + ".md"]); + var fExist = yield this.app.vault.exists(fullPath); + } + yield this.app.vault.rename(noteFile, fullPath); + showBalloon(`The note was renamed to ` + fullPath, this.settings.showNotifications); + } + } + } + catch (e) { + showBalloon(`Cannot rename.`, this.settings.showNotifications); + return; + } + }); + this.convertSelToURI = () => __awaiter(this, void 0, void 0, function* () { + this.app.workspace.activeEditor.editor.replaceSelection(encObsURI(yield this.app.workspace.activeEditor.getSelection())); + }); + this.convertSelToMD = () => __awaiter(this, void 0, void 0, function* () { + this.app.workspace.activeEditor.editor.replaceSelection(obsidian.htmlToMarkdown(yield this.app.workspace.activeEditor.getSelection())); + }); + this.processModifiedQueue = () => __awaiter(this, void 0, void 0, function* () { + const iteration = this.modifiedQueue.iterationQueue(); + for (const page of iteration) { + this.processPage(page, false); + } + }); + } + onload() { + return __awaiter(this, void 0, void 0, function* () { + yield this.loadSettings(); + this.addCommand({ + id: "download-images", + name: "Localize attachments for the current note (plugin folder)", + callback: this.processActivePage(false), + }); + this.addCommand({ + id: "download-images-def", + name: "Localize attachments for the current note (Obsidian folder)", + callback: this.processActivePage(true), + }); + if (!this.settings.disAddCom) { + this.addRibbonIcon("dice", APP_TITLE + "\r\nLocalize attachments (plugin folder)", () => { + this.processActivePage(false)(); + }); + this.addCommand({ + id: "set-title-as-name", + name: "Set the first found # header as a note name.", + callback: this.setTitleAsName, + }); + this.addCommand({ + id: "download-images-all", + name: "Localize attachments for all your notes (plugin folder)", + callback: this.openProcessAllModal, + }); + this.addCommand({ + id: "convert-selection-to-URI", + name: "Convert selection to URI", + callback: this.convertSelToURI, + }); + this.addCommand({ + id: "convert-selection-to-md", + name: "Convert selection from html to markdown", + callback: this.convertSelToMD, + }); + this.addCommand({ + id: "remove-orphans-from-obsidian-folder", + name: "Remove all orphaned attachments (Obsidian folder)", + callback: () => { this.removeOrphans("obsidian")(); }, + }); + this.addCommand({ + id: "remove-orphans-from-plugin-folder", + name: "Remove all orphaned attachments (Plugin folder)", + callback: () => { this.removeOrphans("plugin")(); }, + }); + } + // Some file has been created + this.app.vault.on('create', (file) => __awaiter(this, void 0, void 0, function* () { + logError("New file created: " + file.path); + if (this.ExemplaryOfMD(file.path)) { + this.onMdCreateFunc(file); + } + else { + this.onFCreateFunc(file); + } + })); + // Some file has been deleted + this.app.vault.on('delete', (file) => __awaiter(this, void 0, void 0, function* () { + if (!file || + !(file instanceof obsidian.TFile) || + !(this.ExemplaryOfMD(file.path)) || + !this.settings.removeMediaFolder || + this.settings.saveAttE != "nextToNoteS") { + return; + } + let rootdir = this.settings.mediaRootDir; + const useSysTrash = (this.app.vault.getConfig("trashOption") === "system"); + if (this.settings.saveAttE !== "obsFolder" && + path__default["default"].basename(rootdir).includes("${notename}") && + !rootdir.includes("${date}")) { + rootdir = rootdir.replace("${notename}", file.basename); + if (this.settings.saveAttE == "nextToNoteS") { + rootdir = pathJoin([path__default["default"].dirname((file === null || file === void 0 ? void 0 : file.path) || ""), rootdir]); + } + try { + if (this.app.vault.getAbstractFileByPath(rootdir) instanceof obsidian.TFolder) { + this.app.vault.trash(app.vault.getAbstractFileByPath(rootdir), useSysTrash); + showBalloon("Attachment folder " + rootdir + " was moved to trash can.", this.settings.showNotifications); + } + } + catch (e) { + logError(e); + return; + } + } + })); + this.app.vault.on('rename', (file, oldPath) => __awaiter(this, void 0, void 0, function* () { + var _a, _b, _c; + if (!file || + !(file instanceof obsidian.TFile) || + !(this.ExemplaryOfMD(file.path)) || + !this.settings.removeMediaFolder || + this.settings.saveAttE != "nextToNoteS" || + this.settings.pathInTags != "onlyRelative") { + return; + } + let oldRootdir = this.settings.mediaRootDir; + if (path__default["default"].basename(oldRootdir).includes("${notename}") && + !oldRootdir.includes("${date}")) { + oldRootdir = oldRootdir.replace("${notename}", (_a = path__default["default"].parse(oldPath)) === null || _a === void 0 ? void 0 : _a.name); + let newRootDir = oldRootdir.replace((_b = path__default["default"].parse(oldPath)) === null || _b === void 0 ? void 0 : _b.name, (_c = path__default["default"].parse(file.path)) === null || _c === void 0 ? void 0 : _c.name); + let newRootDir_ = newRootDir; + let oldRootdir_ = oldRootdir; + oldRootdir_ = pathJoin([(path__default["default"].dirname(oldPath) || ""), oldRootdir]); + newRootDir_ = pathJoin([(path__default["default"].dirname(file.path) || ""), newRootDir]); + try { + if (this.app.vault.getAbstractFileByPath(oldRootdir_) instanceof obsidian.TFolder) { + yield this.ensureFolderExists(path__default["default"].dirname(newRootDir_)); + //await this.app.fileManager.renameFile(app.vault.getAbstractFileByPath(oldRootdir),newRootDir) + yield this.app.vault.adapter.rename(oldRootdir_, newRootDir_); + showBalloon("Attachment folder was renamed to " + newRootDir_, this.settings.showNotifications); + } + } + catch (e) { + showBalloon("Cannot move attachment folder: \r\n" + e, this.settings.showNotifications); + logError(e); + return; + } + let content = yield this.app.vault.cachedRead(file); + content = content + .replaceAll("](" + encodeURI(oldRootdir), "](" + encodeURI(newRootDir)) + .replaceAll("[" + oldRootdir, "[" + newRootDir); + this.app.vault.modify(file, content); + } + })); + // Some file has been modified + this.app.vault.on('modify', (file) => __awaiter(this, void 0, void 0, function* () { + if (!this.newfMoveReq) + return; + logError("File modified: " + file.path, false); + if (!file || + !(file instanceof obsidian.TFile) || + !(this.ExemplaryOfMD(file.path))) { + return; + } + else { + if (this.settings.processAll) { + if (!this.noteModified.includes(file)) { + this.noteModified.push(file); + } + this.setupNewMdFilesProcInterval(); + } + } + })); + this.app.workspace.on("editor-paste", (evt, editor, info) => { + this.onPasteFunc(evt, editor, info); + }); + this.setupQueueInterval(); + this.addSettingTab(new SettingTab(this.app, this)); + }); + } + setupQueueInterval() { + if (this.intervalId) { + const intervalId = this.intervalId; + this.intervalId = 0; + window.clearInterval(intervalId); + } + if (this.settings.realTimeUpdate && + this.settings.realTimeUpdateInterval > 0) { + this.intervalId = window.setInterval(this.processModifiedQueue, this.settings.realTimeUpdateInterval * 1000); + this.registerInterval(this.intervalId); + } + } + getCurrentNote() { + try { + const noteFile = app.workspace.activeEditor.file; + return noteFile; + } + catch (e) { + showBalloon("Cannot get current note! ", this.settings.showNotifications); + } + return null; + } + processPage(file, defaultdir = false) { + return __awaiter(this, void 0, void 0, function* () { + if (file == null) { + return null; + } + const content = yield this.app.vault.cachedRead(file); + if (content.length == 0) { + return null; + } + const fixedContent = yield replaceAsync(content, MD_SEARCH_PATTERN, imageTagProcessor(this, file, this.settings, defaultdir)); + if (content != fixedContent[0] && fixedContent[1] === false) { + this.modifiedQueue.remove(file); + yield this.app.vault.modify(file, fixedContent[0]); + fixedContent[2].forEach((element) => { + this.newfCreatedByDownloader.push(element); + }); + showBalloon(`Attachments for "${file.path}" were processed.`, this.settings.showNotifications); + } + else if (content != fixedContent[0] && fixedContent[1] === true) { + this.modifiedQueue.remove(file); + yield this.app.vault.modify(file, fixedContent[0]); + fixedContent[2].forEach((element) => { + this.newfCreatedByDownloader.push(element); + }); + showBalloon(`WARNING!\r\nAttachments for "${file.path}" were processed, but some attachments were not downloaded/replaced...`, this.settings.showNotifications); + } + else { + if (this.settings.showNotifications) { + showBalloon(`Page "${file.path}" has been processed, but nothing was changed.`, this.settings.showNotifications); + } + } + }); + } + onPasteFunc(evt = undefined, editor = undefined, info = undefined) { + return __awaiter(this, void 0, void 0, function* () { + if (evt === undefined) { + return; + } + if (!this.settings.realTimeUpdate) { + return; + } + try { + const activeFile = this.getCurrentNote(); + const fItems = evt.clipboardData.files; + const tItems = evt.clipboardData.items; + if (fItems.length != 0) { + return; + } + for (const key in tItems) { + // Check if it was a text/html + if (tItems[key].kind == "string") { + if (this.settings.realTimeUpdate) { + const cont = obsidian.htmlToMarkdown(evt.clipboardData.getData("text/html")) + + obsidian.htmlToMarkdown(evt.clipboardData.getData("text")); + for (const reg_p of MD_SEARCH_PATTERN) { + if (reg_p.test(cont)) { + logError("content: " + cont); + showBalloon("Media links were found, processing...", this.settings.showNotifications); + this.enqueueActivePage(activeFile); + this.setupQueueInterval(); + break; + } + } + } + return; + } + } + } + catch (e) { + showBalloon(`Please select a note or click inside selected note in canvas.`, this.settings.showNotifications); + return; + } + }); + } + onMdCreateFunc(file) { + return __awaiter(this, void 0, void 0, function* () { + if (!file || + !(file instanceof obsidian.TFile) || + !(this.settings.processCreated) || + !this.ExemplaryOfMD(file.path)) + return; + const timeGapMs = Math.abs(Date.now() - file.stat.ctime); + if (timeGapMs > 1000) + return; + logError("func onMdCreateFunc: " + file.path); + logError(file, true); + var cont = yield this.app.vault.cachedRead(file); + logError(cont); + this.enqueueActivePage(file); + this.setupQueueInterval(); + this.setupNewMdFilesProcInterval(); + }); + } + onFCreateFunc(file) { + return __awaiter(this, void 0, void 0, function* () { + if (!file || + !(file instanceof obsidian.TFile) || + this.ExemplaryOfMD(file.path) || + this.ExemplaryOfCANVAS(file.path) || + !(this.settings.processAll)) + return; + if (!file.stat.ctime) + return; + const timeGapMs = Math.abs(Date.now() - file.stat.mtime); + if (timeGapMs > 1000) + return; + this.newfCreated.push(file.path); + this.newfMoveReq = true; + this.setupNewMdFilesProcInterval(); + logError("file created "); + }); + } + ExemplaryOfMD(pat) { + var _a, _b; + const includeRegex = new RegExp(this.settings.includepattern, "i"); + return (((_b = (_a = pat.match(includeRegex)) === null || _a === void 0 ? void 0 : _a.groups) === null || _b === void 0 ? void 0 : _b.md) != undefined); + } + ExemplaryOfCANVAS(pat) { + var _a, _b; + const includeRegex = new RegExp(this.settings.includepattern, "i"); + return (((_b = (_a = pat.match(includeRegex)) === null || _a === void 0 ? void 0 : _a.groups) === null || _b === void 0 ? void 0 : _b.canvas) != undefined); + } + setupNewMdFilesProcInterval() { + logError("func setupNewFilesProcInterval: \r\n"); + window.clearInterval(this.newfProcInt); + this.newfProcInt = 0; + this.newfProcInt = window.setInterval(this.processMdFilesOnTimer, this.settings.realTimeUpdateInterval * 1000); + this.registerInterval(this.newfProcInt); + } + enqueueActivePage(activeFile) { + this.modifiedQueue.push(activeFile, 1 //this.settings.realTim3AttemptsToProcess + ); + } + // ------------ Load / Save settings ----------------- + onunload() { + return __awaiter(this, void 0, void 0, function* () { + this.app.workspace.off("editor-drop", null); + this.app.workspace.off("editor-paste", null); + this.app.workspace.off('file-menu', null); + //this.app.vault.off("create", null) + logError(" unloaded."); + }); + } + loadSettings() { + return __awaiter(this, void 0, void 0, function* () { + this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData()); + this.setupQueueInterval(); + }); + } + saveSettings() { + return __awaiter(this, void 0, void 0, function* () { + try { + yield this.saveData(this.settings); + } + catch (error) { + displayError(error); + } + }); + } + ensureFolderExists(folderPath) { + return __awaiter(this, void 0, void 0, function* () { + try { + yield this.app.vault.createFolder(folderPath); + return; + } + catch (e) { + logError(e); + return; + } + }); + } +} + +module.exports = LocalImagesPlugin; + + +/* nosourcemap */ \ No newline at end of file diff --git a/content/notes/.obsidian/plugins/obsidian-local-images-plus/manifest.json b/content/notes/.obsidian/plugins/obsidian-local-images-plus/manifest.json new file mode 100644 index 0000000..cfae28c --- /dev/null +++ b/content/notes/.obsidian/plugins/obsidian-local-images-plus/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "obsidian-local-images-plus", + "name": "Local Images Plus", + "version": "0.16.3", + "minAppVersion": "1.0.3", + "description": "Local Images Plus plugin searches for all external media links in your notes, downloads and saves them locally and adjusts the links in your notes to point to the saved files.", + "author": "catalysm, aleksey-rezvov, Sergei Korneev", + "authorUrl": "https://github.com/Sergei-Korneev/obsidian-local-images-plus", + "fundingUrl": "https://www.buymeacoffee.com/sergeikorneev", + "isDesktopOnly": true +} diff --git a/content/notes/.obsidian/plugins/obsidian-local-images-plus/styles.css b/content/notes/.obsidian/plugins/obsidian-local-images-plus/styles.css new file mode 100644 index 0000000..0b77bfa --- /dev/null +++ b/content/notes/.obsidian/plugins/obsidian-local-images-plus/styles.css @@ -0,0 +1,14 @@ +/* This file was created to satisfy requirements for Obsidian's plugins */ + +.title_txt{ + color:white; + align:center; +} + +.donheader_txt{ + text-shadow: 1px 1px 2px black, 0 0 25px blue, 0 0 5px darkblue; + font-weight: 600; + color:red; + align:center; +} + diff --git a/content/notes/.obsidian/plugins/table-editor-obsidian/data.json b/content/notes/.obsidian/plugins/table-editor-obsidian/data.json new file mode 100644 index 0000000..9009465 --- /dev/null +++ b/content/notes/.obsidian/plugins/table-editor-obsidian/data.json @@ -0,0 +1,6 @@ +{ + "formatType": "normal", + "showRibbonIcon": true, + "bindEnter": true, + "bindTab": true +} \ No newline at end of file diff --git a/content/notes/.obsidian/plugins/table-editor-obsidian/main.js b/content/notes/.obsidian/plugins/table-editor-obsidian/main.js new file mode 100644 index 0000000..9c205fc --- /dev/null +++ b/content/notes/.obsidian/plugins/table-editor-obsidian/main.js @@ -0,0 +1,236 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var c9=Object.create;var x1=Object.defineProperty;var f9=Object.getOwnPropertyDescriptor;var h9=Object.getOwnPropertyNames;var d9=Object.getPrototypeOf,g9=Object.prototype.hasOwnProperty;var we=(s,r)=>()=>(r||s((r={exports:{}}).exports,r),r.exports),p9=(s,r)=>{for(var l in r)x1(s,l,{get:r[l],enumerable:!0})},wl=(s,r,l,c)=>{if(r&&typeof r=="object"||typeof r=="function")for(let d of h9(r))!g9.call(s,d)&&d!==l&&x1(s,d,{get:()=>r[d],enumerable:!(c=f9(r,d))||c.enumerable});return s};var y1=(s,r,l)=>(l=s!=null?c9(d9(s)):{},wl(r||!s||!s.__esModule?x1(l,"default",{value:s,enumerable:!0}):l,s)),m9=s=>wl(x1({},"__esModule",{value:!0}),s);var O1=we(L1=>{"use strict";Object.defineProperty(L1,"__esModule",{value:!0});L1.Point=void 0;var s3=class{constructor(r,l){this.row=r,this.column=l}equals(r){return this.row===r.row&&this.column===r.column}};L1.Point=s3});var P1=we(S1=>{"use strict";Object.defineProperty(S1,"__esModule",{value:!0});S1.Range=void 0;var l3=class{constructor(r,l){this.start=r,this.end=l}};S1.Range=l3});var W1=we(I1=>{"use strict";Object.defineProperty(I1,"__esModule",{value:!0});I1.Focus=void 0;var u3=class s{constructor(r,l,c){this.row=r,this.column=l,this.offset=c}posEquals(r){return this.row===r.row&&this.column===r.column}setRow(r){return new s(r,this.column,this.offset)}setColumn(r){return new s(this.row,r,this.offset)}setOffset(r){return new s(this.row,this.column,r)}};I1.Focus=u3});var vi=we(Dn=>{"use strict";Object.defineProperty(Dn,"__esModule",{value:!0});Dn.HeaderAlignment=Dn.DefaultAlignment=Dn.Alignment=void 0;var _l;(function(s){s.NONE="none",s.LEFT="left",s.RIGHT="right",s.CENTER="center"})(_l||(Dn.Alignment=_l={}));var bl;(function(s){s.LEFT="left",s.RIGHT="right",s.CENTER="center"})(bl||(Dn.DefaultAlignment=bl={}));var El;(function(s){s.FOLLOW="follow",s.LEFT="left",s.RIGHT="right",s.CENTER="center"})(El||(Dn.HeaderAlignment=El={}))});var Pr=we(D1=>{"use strict";Object.defineProperty(D1,"__esModule",{value:!0});D1.TableCell=void 0;var M1=vi(),a3=class{constructor(r){this.rawContent=r,this.content=r.trim(),this.paddingLeft=this.content===""?this.rawContent===""?0:1:this.rawContent.length-this.rawContent.trimLeft().length,this.paddingRight=this.rawContent.length-this.content.length-this.paddingLeft}toText(){return this.rawContent}isDelimiter(){return/^\s*:?-+:?\s*$/.test(this.rawContent)}getAlignment(){if(this.isDelimiter())return this.content[0]===":"?this.content[this.content.length-1]===":"?M1.Alignment.CENTER:M1.Alignment.LEFT:this.content[this.content.length-1]===":"?M1.Alignment.RIGHT:M1.Alignment.NONE}computeContentOffset(r){return this.content===""||r{"use strict";Object.defineProperty(F1,"__esModule",{value:!0});F1.TableRow=void 0;var w9=Pr(),c3=class s{constructor(r,l,c){this._cells=r.slice(),this.marginLeft=l,this.marginRight=c}getWidth(){return this._cells.length}getCells(){return this._cells.slice()}getCellAt(r){return this._cells[r]}setCellAt(r,l){let c=this.getCells();return c[r]=new w9.TableCell(l),new s(c,this.marginLeft,this.marginRight)}toText(){if(this._cells.length===0)return this.marginLeft;let r=this._cells.map(l=>l.toText()).join("|");return`${this.marginLeft}|${r}|${this.marginRight}`}isDelimiter(){return this._cells.every(r=>r.isDelimiter())}};F1.TableRow=c3});var Xt=we(ct=>{"use strict";Object.defineProperty(ct,"__esModule",{value:!0});ct.Err=ct.Ok=ct.err=ct.ok=void 0;var C9=s=>new k1(s);ct.ok=C9;var v9=s=>new U1(s);ct.err=v9;var k1=class{constructor(r){this.value=r,this.match=(l,c)=>l(this.value)}isOk(){return!0}isErr(){return!this.isOk()}map(r){return(0,ct.ok)(r(this.value))}mapErr(r){return(0,ct.ok)(this.value)}andThen(r){return r(this.value)}unwrapOr(r){return this.value}_unsafeUnwrap(){return this.value}_unsafeUnwrapErr(){throw new Error("Called `_unsafeUnwrapErr` on an Ok")}};ct.Ok=k1;var U1=class{constructor(r){this.error=r,this.match=(l,c)=>c(this.error)}isOk(){return!1}isErr(){return!this.isOk()}map(r){return(0,ct.err)(this.error)}mapErr(r){return(0,ct.err)(r(this.error))}andThen(r){return(0,ct.err)(this.error)}unwrapOr(r){return r}_unsafeUnwrap(){throw new Error("Called `_unsafeUnwrap` on an Err")}_unsafeUnwrapErr(){return this.error}};ct.Err=U1});var $t=we(St=>{"use strict";Object.defineProperty(St,"__esModule",{value:!0});St.prettyPrintAST=St.checkChildLength=St.checkType=St.errRelativeReferenceIndex=St.errIndex0=void 0;St.errIndex0=new Error("Index 0 used to create a reference");St.errRelativeReferenceIndex=new Error("Can not use relative reference where absolute reference is required");var _9=(s,...r)=>{if(!(r.indexOf(s.type)>=0))return new Error(`Formula element '${s.text}' is a ${s.type} but expected one of ${r} in this position.`)};St.checkType=_9;var b9=(s,r)=>{if(s.children.length!==r)return new Error(`Formula element '${s.text}' was expected to have ${r} elements, but had ${s.children.length}`)};St.checkChildLength=b9;var E9=(s,r=0)=>{console.log(" ".repeat(r)+`|-${s.type}${s.children.length===0?"="+s.text:""}`),s.children&&s.children.forEach(l=>{(0,St.prettyPrintAST)(l,r+1)})};St.prettyPrintAST=E9});var f3=we((Al,q1)=>{(function(s){"use strict";var r=9e15,l=1e9,c="0123456789abcdef",d="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",C="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",_={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-r,maxE:r,crypto:!1},m,A,P,y,S=!0,V="[DecimalError] ",M=V+"Invalid argument: ",Y=V+"Precision limit exceeded",se=V+"crypto unavailable",ge="[object Decimal]",D=Math.floor,$=Math.pow,U=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,K=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,te=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,J=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Q=1e7,G=7,Ce=9007199254740991,Pe=d.length-1,ot=C.length-1,B={toStringTag:ge};B.absoluteValue=B.abs=function(){var o=new this.constructor(this);return o.s<0&&(o.s=1),j(o)},B.ceil=function(){return j(new this.constructor(this),this.e+1,2)},B.clampedTo=B.clamp=function(o,u){var a,f=this,g=f.constructor;if(o=new g(o),u=new g(u),!o.s||!u.s)return new g(NaN);if(o.gt(u))throw Error(M+u);return a=f.cmp(o),a<0?o:f.cmp(u)>0?u:new g(f)},B.comparedTo=B.cmp=function(o){var u,a,f,g,p=this,E=p.d,T=(o=new p.constructor(o)).d,L=p.s,x=o.s;if(!E||!T)return!L||!x?NaN:L!==x?L:E===T?0:!E^L<0?1:-1;if(!E[0]||!T[0])return E[0]?L:T[0]?-x:0;if(L!==x)return L;if(p.e!==o.e)return p.e>o.e^L<0?1:-1;for(f=E.length,g=T.length,u=0,a=fT[u]^L<0?1:-1;return f===g?0:f>g^L<0?1:-1},B.cosine=B.cos=function(){var o,u,a=this,f=a.constructor;return a.d?a.d[0]?(o=f.precision,u=f.rounding,f.precision=o+Math.max(a.e,a.sd())+G,f.rounding=1,a=Lo(f,Fi(f,a)),f.precision=o,f.rounding=u,j(y==2||y==3?a.neg():a,o,u,!0)):new f(1):new f(NaN)},B.cubeRoot=B.cbrt=function(){var o,u,a,f,g,p,E,T,L,x,I=this,F=I.constructor;if(!I.isFinite()||I.isZero())return new F(I);for(S=!1,p=I.s*$(I.s*I,1/3),!p||Math.abs(p)==1/0?(a=Oe(I.d),o=I.e,(p=(o-a.length+1)%3)&&(a+=p==1||p==-2?"0":"00"),p=$(a,1/3),o=D((o+1)/3)-(o%3==(o<0?-1:2)),p==1/0?a="5e"+o:(a=p.toExponential(),a=a.slice(0,a.indexOf("e")+1)+o),f=new F(a),f.s=I.s):f=new F(p.toString()),E=(o=F.precision)+3;;)if(T=f,L=T.times(T).times(T),x=L.plus(I),f=Ae(x.plus(I).times(T),x.plus(L),E+2,1),Oe(T.d).slice(0,E)===(a=Oe(f.d)).slice(0,E))if(a=a.slice(E-3,E+1),a=="9999"||!g&&a=="4999"){if(!g&&(j(T,o+1,0),T.times(T).times(T).eq(I))){f=T;break}E+=4,g=1}else{(!+a||!+a.slice(1)&&a.charAt(0)=="5")&&(j(f,o+1,1),u=!f.times(f).times(f).eq(I));break}return S=!0,j(f,o,F.rounding,u)},B.decimalPlaces=B.dp=function(){var o,u=this.d,a=NaN;if(u){if(o=u.length-1,a=(o-D(this.e/G))*G,o=u[o],o)for(;o%10==0;o/=10)a--;a<0&&(a=0)}return a},B.dividedBy=B.div=function(o){return Ae(this,new this.constructor(o))},B.dividedToIntegerBy=B.divToInt=function(o){var u=this,a=u.constructor;return j(Ae(u,new a(o),0,1,1),a.precision,a.rounding)},B.equals=B.eq=function(o){return this.cmp(o)===0},B.floor=function(){return j(new this.constructor(this),this.e+1,3)},B.greaterThan=B.gt=function(o){return this.cmp(o)>0},B.greaterThanOrEqualTo=B.gte=function(o){var u=this.cmp(o);return u==1||u===0},B.hyperbolicCosine=B.cosh=function(){var o,u,a,f,g,p=this,E=p.constructor,T=new E(1);if(!p.isFinite())return new E(p.s?1/0:NaN);if(p.isZero())return T;a=E.precision,f=E.rounding,E.precision=a+Math.max(p.e,p.sd())+4,E.rounding=1,g=p.d.length,g<32?(o=Math.ceil(g/3),u=(1/Zn(4,o)).toString()):(o=16,u="2.3283064365386962890625e-10"),p=et(E,1,p.times(u),new E(1),!0);for(var L,x=o,I=new E(8);x--;)L=p.times(p),p=T.minus(L.times(I.minus(L.times(I))));return j(p,E.precision=a,E.rounding=f,!0)},B.hyperbolicSine=B.sinh=function(){var o,u,a,f,g=this,p=g.constructor;if(!g.isFinite()||g.isZero())return new p(g);if(u=p.precision,a=p.rounding,p.precision=u+Math.max(g.e,g.sd())+4,p.rounding=1,f=g.d.length,f<3)g=et(p,2,g,g,!0);else{o=1.4*Math.sqrt(f),o=o>16?16:o|0,g=g.times(1/Zn(5,o)),g=et(p,2,g,g,!0);for(var E,T=new p(5),L=new p(16),x=new p(20);o--;)E=g.times(g),g=g.times(T.plus(E.times(L.times(E).plus(x))))}return p.precision=u,p.rounding=a,j(g,u,a,!0)},B.hyperbolicTangent=B.tanh=function(){var o,u,a=this,f=a.constructor;return a.isFinite()?a.isZero()?new f(a):(o=f.precision,u=f.rounding,f.precision=o+7,f.rounding=1,Ae(a.sinh(),a.cosh(),f.precision=o,f.rounding=u)):new f(a.s)},B.inverseCosine=B.acos=function(){var o,u=this,a=u.constructor,f=u.abs().cmp(1),g=a.precision,p=a.rounding;return f!==-1?f===0?u.isNeg()?Ze(a,g,p):new a(0):new a(NaN):u.isZero()?Ze(a,g+4,p).times(.5):(a.precision=g+6,a.rounding=1,u=u.asin(),o=Ze(a,g+4,p).times(.5),a.precision=g,a.rounding=p,o.minus(u))},B.inverseHyperbolicCosine=B.acosh=function(){var o,u,a=this,f=a.constructor;return a.lte(1)?new f(a.eq(1)?0:NaN):a.isFinite()?(o=f.precision,u=f.rounding,f.precision=o+Math.max(Math.abs(a.e),a.sd())+4,f.rounding=1,S=!1,a=a.times(a).minus(1).sqrt().plus(a),S=!0,f.precision=o,f.rounding=u,a.ln()):new f(a)},B.inverseHyperbolicSine=B.asinh=function(){var o,u,a=this,f=a.constructor;return!a.isFinite()||a.isZero()?new f(a):(o=f.precision,u=f.rounding,f.precision=o+2*Math.max(Math.abs(a.e),a.sd())+6,f.rounding=1,S=!1,a=a.times(a).plus(1).sqrt().plus(a),S=!0,f.precision=o,f.rounding=u,a.ln())},B.inverseHyperbolicTangent=B.atanh=function(){var o,u,a,f,g=this,p=g.constructor;return g.isFinite()?g.e>=0?new p(g.abs().eq(1)?g.s/0:g.isZero()?g:NaN):(o=p.precision,u=p.rounding,f=g.sd(),Math.max(f,o)<2*-g.e-1?j(new p(g),o,u,!0):(p.precision=a=f-g.e,g=Ae(g.plus(1),new p(1).minus(g),a+o,1),p.precision=o+4,p.rounding=1,g=g.ln(),p.precision=o,p.rounding=u,g.times(.5))):new p(NaN)},B.inverseSine=B.asin=function(){var o,u,a,f,g=this,p=g.constructor;return g.isZero()?new p(g):(u=g.abs().cmp(1),a=p.precision,f=p.rounding,u!==-1?u===0?(o=Ze(p,a+4,f).times(.5),o.s=g.s,o):new p(NaN):(p.precision=a+6,p.rounding=1,g=g.div(new p(1).minus(g.times(g)).sqrt().plus(1)).atan(),p.precision=a,p.rounding=f,g.times(2)))},B.inverseTangent=B.atan=function(){var o,u,a,f,g,p,E,T,L,x=this,I=x.constructor,F=I.precision,z=I.rounding;if(x.isFinite()){if(x.isZero())return new I(x);if(x.abs().eq(1)&&F+4<=ot)return E=Ze(I,F+4,z).times(.25),E.s=x.s,E}else{if(!x.s)return new I(NaN);if(F+4<=ot)return E=Ze(I,F+4,z).times(.5),E.s=x.s,E}for(I.precision=T=F+10,I.rounding=1,a=Math.min(28,T/G+2|0),o=a;o;--o)x=x.div(x.times(x).plus(1).sqrt().plus(1));for(S=!1,u=Math.ceil(T/G),f=1,L=x.times(x),E=new I(x),g=x;o!==-1;)if(g=g.times(L),p=E.minus(g.div(f+=2)),g=g.times(L),E=p.plus(g.div(f+=2)),E.d[u]!==void 0)for(o=u;E.d[o]===p.d[o]&&o--;);return a&&(E=E.times(2<this.d.length-2},B.isNaN=function(){return!this.s},B.isNegative=B.isNeg=function(){return this.s<0},B.isPositive=B.isPos=function(){return this.s>0},B.isZero=function(){return!!this.d&&this.d[0]===0},B.lessThan=B.lt=function(o){return this.cmp(o)<0},B.lessThanOrEqualTo=B.lte=function(o){return this.cmp(o)<1},B.logarithm=B.log=function(o){var u,a,f,g,p,E,T,L,x=this,I=x.constructor,F=I.precision,z=I.rounding,ie=5;if(o==null)o=new I(10),u=!0;else{if(o=new I(o),a=o.d,o.s<0||!a||!a[0]||o.eq(1))return new I(NaN);u=o.eq(10)}if(a=x.d,x.s<0||!a||!a[0]||x.eq(1))return new I(a&&!a[0]?-1/0:x.s!=1?NaN:a?0:1/0);if(u)if(a.length>1)p=!0;else{for(g=a[0];g%10===0;)g/=10;p=g!==1}if(S=!1,T=F+ie,E=bt(x,T),f=u?pr(I,T+10):bt(o,T),L=Ae(E,f,T,1),vt(L.d,g=F,z))do if(T+=10,E=bt(x,T),f=u?pr(I,T+10):bt(o,T),L=Ae(E,f,T,1),!p){+Oe(L.d).slice(g+1,g+15)+1==1e14&&(L=j(L,F+1,0));break}while(vt(L.d,g+=10,z));return S=!0,j(L,F,z)},B.minus=B.sub=function(o){var u,a,f,g,p,E,T,L,x,I,F,z,ie=this,_e=ie.constructor;if(o=new _e(o),!ie.d||!o.d)return!ie.s||!o.s?o=new _e(NaN):ie.d?o.s=-o.s:o=new _e(o.d||ie.s!==o.s?ie:NaN),o;if(ie.s!=o.s)return o.s=-o.s,ie.plus(o);if(x=ie.d,z=o.d,T=_e.precision,L=_e.rounding,!x[0]||!z[0]){if(z[0])o.s=-o.s;else if(x[0])o=new _e(ie);else return new _e(L===3?-0:0);return S?j(o,T,L):o}if(a=D(o.e/G),I=D(ie.e/G),x=x.slice(),p=I-a,p){for(F=p<0,F?(u=x,p=-p,E=z.length):(u=z,a=I,E=x.length),f=Math.max(Math.ceil(T/G),E)+2,p>f&&(p=f,u.length=1),u.reverse(),f=p;f--;)u.push(0);u.reverse()}else{for(f=x.length,E=z.length,F=f0;--f)x[E++]=0;for(f=z.length;f>p;){if(x[--f]E?p+1:E+1,g>E&&(g=E,a.length=1),a.reverse();g--;)a.push(0);a.reverse()}for(E=x.length,g=I.length,E-g<0&&(g=E,a=I,I=x,x=a),u=0;g;)u=(x[--g]=x[g]+I[g]+u)/Q|0,x[g]%=Q;for(u&&(x.unshift(u),++f),E=x.length;x[--E]==0;)x.pop();return o.d=x,o.e=gr(x,f),S?j(o,T,L):o},B.precision=B.sd=function(o){var u,a=this;if(o!==void 0&&o!==!!o&&o!==1&&o!==0)throw Error(M+o);return a.d?(u=zn(a.d),o&&a.e+1>u&&(u=a.e+1)):u=NaN,u},B.round=function(){var o=this,u=o.constructor;return j(new u(o),o.e+1,u.rounding)},B.sine=B.sin=function(){var o,u,a=this,f=a.constructor;return a.isFinite()?a.isZero()?new f(a):(o=f.precision,u=f.rounding,f.precision=o+Math.max(a.e,a.sd())+G,f.rounding=1,a=Oo(f,Fi(f,a)),f.precision=o,f.rounding=u,j(y>2?a.neg():a,o,u,!0)):new f(NaN)},B.squareRoot=B.sqrt=function(){var o,u,a,f,g,p,E=this,T=E.d,L=E.e,x=E.s,I=E.constructor;if(x!==1||!T||!T[0])return new I(!x||x<0&&(!T||T[0])?NaN:T?E:1/0);for(S=!1,x=Math.sqrt(+E),x==0||x==1/0?(u=Oe(T),(u.length+L)%2==0&&(u+="0"),x=Math.sqrt(u),L=D((L+1)/2)-(L<0||L%2),x==1/0?u="5e"+L:(u=x.toExponential(),u=u.slice(0,u.indexOf("e")+1)+L),f=new I(u)):f=new I(x.toString()),a=(L=I.precision)+3;;)if(p=f,f=p.plus(Ae(E,p,a+2,1)).times(.5),Oe(p.d).slice(0,a)===(u=Oe(f.d)).slice(0,a))if(u=u.slice(a-3,a+1),u=="9999"||!g&&u=="4999"){if(!g&&(j(p,L+1,0),p.times(p).eq(E))){f=p;break}a+=4,g=1}else{(!+u||!+u.slice(1)&&u.charAt(0)=="5")&&(j(f,L+1,1),o=!f.times(f).eq(E));break}return S=!0,j(f,L,I.rounding,o)},B.tangent=B.tan=function(){var o,u,a=this,f=a.constructor;return a.isFinite()?a.isZero()?new f(a):(o=f.precision,u=f.rounding,f.precision=o+10,f.rounding=1,a=a.sin(),a.s=1,a=Ae(a,new f(1).minus(a.times(a)).sqrt(),o+10,0),f.precision=o,f.rounding=u,j(y==2||y==4?a.neg():a,o,u,!0)):new f(NaN)},B.times=B.mul=function(o){var u,a,f,g,p,E,T,L,x,I=this,F=I.constructor,z=I.d,ie=(o=new F(o)).d;if(o.s*=I.s,!z||!z[0]||!ie||!ie[0])return new F(!o.s||z&&!z[0]&&!ie||ie&&!ie[0]&&!z?NaN:!z||!ie?o.s/0:o.s*0);for(a=D(I.e/G)+D(o.e/G),L=z.length,x=ie.length,L=0;){for(u=0,g=L+f;g>f;)T=p[g]+ie[f]*z[g-f-1]+u,p[g--]=T%Q|0,u=T/Q|0;p[g]=(p[g]+u)%Q|0}for(;!p[--E];)p.pop();return u?++a:p.shift(),o.d=p,o.e=gr(p,a),S?j(o,F.precision,F.rounding):o},B.toBinary=function(o,u){return cn(this,2,o,u)},B.toDecimalPlaces=B.toDP=function(o,u){var a=this,f=a.constructor;return a=new f(a),o===void 0?a:(je(o,0,l),u===void 0?u=f.rounding:je(u,0,8),j(a,o+a.e+1,u))},B.toExponential=function(o,u){var a,f=this,g=f.constructor;return o===void 0?a=Mt(f,!0):(je(o,0,l),u===void 0?u=g.rounding:je(u,0,8),f=j(new g(f),o+1,u),a=Mt(f,!0,o+1)),f.isNeg()&&!f.isZero()?"-"+a:a},B.toFixed=function(o,u){var a,f,g=this,p=g.constructor;return o===void 0?a=Mt(g):(je(o,0,l),u===void 0?u=p.rounding:je(u,0,8),f=j(new p(g),o+g.e+1,u),a=Mt(f,!1,o+f.e+1)),g.isNeg()&&!g.isZero()?"-"+a:a},B.toFraction=function(o){var u,a,f,g,p,E,T,L,x,I,F,z,ie=this,_e=ie.d,ce=ie.constructor;if(!_e)return new ce(ie);if(x=a=new ce(1),f=L=new ce(0),u=new ce(f),p=u.e=zn(_e)-ie.e-1,E=p%G,u.d[0]=$(10,E<0?G+E:E),o==null)o=p>0?u:x;else{if(T=new ce(o),!T.isInt()||T.lt(x))throw Error(M+T);o=T.gt(u)?p>0?u:x:T}for(S=!1,T=new ce(Oe(_e)),I=ce.precision,ce.precision=p=_e.length*G*2;F=Ae(T,u,0,1,1),g=a.plus(F.times(f)),g.cmp(o)!=1;)a=f,f=g,g=x,x=L.plus(F.times(g)),L=g,g=u,u=T.minus(F.times(g)),T=g;return g=Ae(o.minus(a),f,0,1,1),L=L.plus(g.times(x)),a=a.plus(g.times(f)),L.s=x.s=ie.s,z=Ae(x,f,p,1).minus(ie).abs().cmp(Ae(L,a,p,1).minus(ie).abs())<1?[x,f]:[L,a],ce.precision=I,S=!0,z},B.toHexadecimal=B.toHex=function(o,u){return cn(this,16,o,u)},B.toNearest=function(o,u){var a=this,f=a.constructor;if(a=new f(a),o==null){if(!a.d)return a;o=new f(1),u=f.rounding}else{if(o=new f(o),u===void 0?u=f.rounding:je(u,0,8),!a.d)return o.s?a:o;if(!o.d)return o.s&&(o.s=a.s),o}return o.d[0]?(S=!1,a=Ae(a,o,0,u,1).times(o),S=!0,j(a)):(o.s=a.s,a=o),a},B.toNumber=function(){return+this},B.toOctal=function(o,u){return cn(this,8,o,u)},B.toPower=B.pow=function(o){var u,a,f,g,p,E,T=this,L=T.constructor,x=+(o=new L(o));if(!T.d||!o.d||!T.d[0]||!o.d[0])return new L($(+T,x));if(T=new L(T),T.eq(1))return T;if(f=L.precision,p=L.rounding,o.eq(1))return j(T,f,p);if(u=D(o.e/G),u>=o.d.length-1&&(a=x<0?-x:x)<=Ce)return g=En(L,T,a,f),o.s<0?new L(1).div(g):j(g,f,p);if(E=T.s,E<0){if(uL.maxE+1||u0?E/0:0):(S=!1,L.rounding=T.s=1,a=Math.min(12,(u+"").length),g=Tn(o.times(bt(T,f+a)),f),g.d&&(g=j(g,f+5,1),vt(g.d,f,p)&&(u=f+10,g=j(Tn(o.times(bt(T,u+a)),u),u+5,1),+Oe(g.d).slice(f+1,f+15)+1==1e14&&(g=j(g,f+1,0)))),g.s=E,S=!0,L.rounding=p,j(g,f,p))},B.toPrecision=function(o,u){var a,f=this,g=f.constructor;return o===void 0?a=Mt(f,f.e<=g.toExpNeg||f.e>=g.toExpPos):(je(o,1,l),u===void 0?u=g.rounding:je(u,0,8),f=j(new g(f),o,u),a=Mt(f,o<=f.e||f.e<=g.toExpNeg,o)),f.isNeg()&&!f.isZero()?"-"+a:a},B.toSignificantDigits=B.toSD=function(o,u){var a=this,f=a.constructor;return o===void 0?(o=f.precision,u=f.rounding):(je(o,1,l),u===void 0?u=f.rounding:je(u,0,8)),j(new f(a),o,u)},B.toString=function(){var o=this,u=o.constructor,a=Mt(o,o.e<=u.toExpNeg||o.e>=u.toExpPos);return o.isNeg()&&!o.isZero()?"-"+a:a},B.truncated=B.trunc=function(){return j(new this.constructor(this),this.e+1,1)},B.valueOf=B.toJSON=function(){var o=this,u=o.constructor,a=Mt(o,o.e<=u.toExpNeg||o.e>=u.toExpPos);return o.isNeg()?"-"+a:a};function Oe(o){var u,a,f,g=o.length-1,p="",E=o[0];if(g>0){for(p+=E,u=1;ua)throw Error(M+o)}function vt(o,u,a,f){var g,p,E,T;for(p=o[0];p>=10;p/=10)--u;return--u<0?(u+=G,g=0):(g=Math.ceil((u+1)/G),u%=G),p=$(10,G-u),T=o[g]%p|0,f==null?u<3?(u==0?T=T/100|0:u==1&&(T=T/10|0),E=a<4&&T==99999||a>3&&T==49999||T==5e4||T==0):E=(a<4&&T+1==p||a>3&&T+1==p/2)&&(o[g+1]/p/100|0)==$(10,u-2)-1||(T==p/2||T==0)&&(o[g+1]/p/100|0)==0:u<4?(u==0?T=T/1e3|0:u==1?T=T/100|0:u==2&&(T=T/10|0),E=(f||a<4)&&T==9999||!f&&a>3&&T==4999):E=((f||a<4)&&T+1==p||!f&&a>3&&T+1==p/2)&&(o[g+1]/p/1e3|0)==$(10,u-3)-1,E}function _t(o,u,a){for(var f,g=[0],p,E=0,T=o.length;Ea-1&&(g[f+1]===void 0&&(g[f+1]=0),g[f+1]+=g[f]/a|0,g[f]%=a)}return g.reverse()}function Lo(o,u){var a,f,g;if(u.isZero())return u;f=u.d.length,f<32?(a=Math.ceil(f/3),g=(1/Zn(4,a)).toString()):(a=16,g="2.3283064365386962890625e-10"),o.precision+=a,u=et(o,1,u.times(g),new o(1));for(var p=a;p--;){var E=u.times(u);u=E.times(E).minus(E).times(8).plus(1)}return o.precision-=a,u}var Ae=function(){function o(f,g,p){var E,T=0,L=f.length;for(f=f.slice();L--;)E=f[L]*g+T,f[L]=E%p|0,T=E/p|0;return T&&f.unshift(T),f}function u(f,g,p,E){var T,L;if(p!=E)L=p>E?1:-1;else for(T=L=0;Tg[T]?1:-1;break}return L}function a(f,g,p,E){for(var T=0;p--;)f[p]-=T,T=f[p]1;)f.shift()}return function(f,g,p,E,T,L){var x,I,F,z,ie,_e,ce,Ye,Me,Et,Re,Be,Yn,At,ri,Jn,nn,Cr,Tt,Xn,Qn=f.constructor,jn=f.s==g.s?1:-1,Ge=f.d,ye=g.d;if(!Ge||!Ge[0]||!ye||!ye[0])return new Qn(!f.s||!g.s||(Ge?ye&&Ge[0]==ye[0]:!ye)?NaN:Ge&&Ge[0]==0||!ye?jn*0:jn/0);for(L?(ie=1,I=f.e-g.e):(L=Q,ie=G,I=D(f.e/ie)-D(g.e/ie)),Tt=ye.length,nn=Ge.length,Me=new Qn(jn),Et=Me.d=[],F=0;ye[F]==(Ge[F]||0);F++);if(ye[F]>(Ge[F]||0)&&I--,p==null?(At=p=Qn.precision,E=Qn.rounding):T?At=p+(f.e-g.e)+1:At=p,At<0)Et.push(1),_e=!0;else{if(At=At/ie+2|0,F=0,Tt==1){for(z=0,ye=ye[0],At++;(F1&&(ye=o(ye,z,L),Ge=o(Ge,z,L),Tt=ye.length,nn=Ge.length),Jn=Tt,Re=Ge.slice(0,Tt),Be=Re.length;Be=L/2&&++Cr;do z=0,x=u(ye,Re,Tt,Be),x<0?(Yn=Re[0],Tt!=Be&&(Yn=Yn*L+(Re[1]||0)),z=Yn/Cr|0,z>1?(z>=L&&(z=L-1),ce=o(ye,z,L),Ye=ce.length,Be=Re.length,x=u(ce,Re,Ye,Be),x==1&&(z--,a(ce,Tt=10;z/=10)F++;Me.e=F+I*ie-1,j(Me,T?p+Me.e+1:p,E,_e)}return Me}}();function j(o,u,a,f){var g,p,E,T,L,x,I,F,z,ie=o.constructor;e:if(u!=null){if(F=o.d,!F)return o;for(g=1,T=F[0];T>=10;T/=10)g++;if(p=u-g,p<0)p+=G,E=u,I=F[z=0],L=I/$(10,g-E-1)%10|0;else if(z=Math.ceil((p+1)/G),T=F.length,z>=T)if(f){for(;T++<=z;)F.push(0);I=L=0,g=1,p%=G,E=p-G+1}else break e;else{for(I=T=F[z],g=1;T>=10;T/=10)g++;p%=G,E=p-G+g,L=E<0?0:I/$(10,g-E-1)%10|0}if(f=f||u<0||F[z+1]!==void 0||(E<0?I:I%$(10,g-E-1)),x=a<4?(L||f)&&(a==0||a==(o.s<0?3:2)):L>5||L==5&&(a==4||f||a==6&&(p>0?E>0?I/$(10,g-E):0:F[z-1])%10&1||a==(o.s<0?8:7)),u<1||!F[0])return F.length=0,x?(u-=o.e+1,F[0]=$(10,(G-u%G)%G),o.e=-u||0):F[0]=o.e=0,o;if(p==0?(F.length=z,T=1,z--):(F.length=z+1,T=$(10,G-p),F[z]=E>0?(I/$(10,g-E)%$(10,E)|0)*T:0),x)for(;;)if(z==0){for(p=1,E=F[0];E>=10;E/=10)p++;for(E=F[0]+=T,T=1;E>=10;E/=10)T++;p!=T&&(o.e++,F[0]==Q&&(F[0]=1));break}else{if(F[z]+=T,F[z]!=Q)break;F[z--]=0,T=1}for(p=F.length;F[--p]===0;)F.pop()}return S&&(o.e>ie.maxE?(o.d=null,o.e=NaN):o.e0?p=p.charAt(0)+"."+p.slice(1)+tn(f):E>1&&(p=p.charAt(0)+"."+p.slice(1)),p=p+(o.e<0?"e":"e+")+o.e):g<0?(p="0."+tn(-g-1)+p,a&&(f=a-E)>0&&(p+=tn(f))):g>=E?(p+=tn(g+1-E),a&&(f=a-g-1)>0&&(p=p+"."+tn(f))):((f=g+1)0&&(g+1===E&&(p+="."),p+=tn(f))),p}function gr(o,u){var a=o[0];for(u*=G;a>=10;a/=10)u++;return u}function pr(o,u,a){if(u>Pe)throw S=!0,a&&(o.precision=a),Error(Y);return j(new o(d),u,1,!0)}function Ze(o,u,a){if(u>ot)throw Error(Y);return j(new o(C),u,a,!0)}function zn(o){var u=o.length-1,a=u*G+1;if(u=o[u],u){for(;u%10==0;u/=10)a--;for(u=o[0];u>=10;u/=10)a++}return a}function tn(o){for(var u="";o--;)u+="0";return u}function En(o,u,a,f){var g,p=new o(1),E=Math.ceil(f/G+4);for(S=!1;;){if(a%2&&(p=p.times(u),ht(p.d,E)&&(g=!0)),a=D(a/2),a===0){a=p.d.length-1,g&&p.d[a]===0&&++p.d[a];break}u=u.times(u),ht(u.d,E)}return S=!0,p}function An(o){return o.d[o.d.length-1]&1}function Di(o,u,a){for(var f,g=new o(u[0]),p=0;++p17)return new z(o.d?o.d[0]?o.s<0?0:1/0:1:o.s?o.s<0?0:o:NaN);for(u==null?(S=!1,L=_e):L=u,T=new z(.03125);o.e>-2;)o=o.times(T),F+=5;for(f=Math.log($(2,F))/Math.LN10*2+5|0,L+=f,a=p=E=new z(1),z.precision=L;;){if(p=j(p.times(o),L,1),a=a.times(++I),T=E.plus(Ae(p,a,L,1)),Oe(T.d).slice(0,L)===Oe(E.d).slice(0,L)){for(g=F;g--;)E=j(E.times(E),L,1);if(u==null)if(x<3&&vt(E.d,L-f,ie,x))z.precision=L+=10,a=p=T=new z(1),I=0,x++;else return j(E,z.precision=_e,ie,S=!0);else return z.precision=_e,E}E=T}}function bt(o,u){var a,f,g,p,E,T,L,x,I,F,z,ie=1,_e=10,ce=o,Ye=ce.d,Me=ce.constructor,Et=Me.rounding,Re=Me.precision;if(ce.s<0||!Ye||!Ye[0]||!ce.e&&Ye[0]==1&&Ye.length==1)return new Me(Ye&&!Ye[0]?-1/0:ce.s!=1?NaN:Ye?0:ce);if(u==null?(S=!1,I=Re):I=u,Me.precision=I+=_e,a=Oe(Ye),f=a.charAt(0),Math.abs(p=ce.e)<15e14){for(;f<7&&f!=1||f==1&&a.charAt(1)>3;)ce=ce.times(o),a=Oe(ce.d),f=a.charAt(0),ie++;p=ce.e,f>1?(ce=new Me("0."+a),p++):ce=new Me(f+"."+a.slice(1))}else return x=pr(Me,I+2,Re).times(p+""),ce=bt(new Me(f+"."+a.slice(1)),I-_e).plus(x),Me.precision=Re,u==null?j(ce,Re,Et,S=!0):ce;for(F=ce,L=E=ce=Ae(ce.minus(1),ce.plus(1),I,1),z=j(ce.times(ce),I,1),g=3;;){if(E=j(E.times(z),I,1),x=L.plus(Ae(E,new Me(g),I,1)),Oe(x.d).slice(0,I)===Oe(L.d).slice(0,I))if(L=L.times(2),p!==0&&(L=L.plus(pr(Me,I+2,Re).times(p+""))),L=Ae(L,new Me(ie),I,1),u==null)if(vt(L.d,I-_e,Et,T))Me.precision=I+=_e,x=E=ce=Ae(F.minus(1),F.plus(1),I,1),z=j(ce.times(ce),I,1),g=T=1;else return j(L,Me.precision=Re,Et,S=!0);else return Me.precision=Re,L;L=x,g+=2}}function Zr(o){return String(o.s*o.s/0)}function st(o,u){var a,f,g;for((a=u.indexOf("."))>-1&&(u=u.replace(".","")),(f=u.search(/e/i))>0?(a<0&&(a=f),a+=+u.slice(f+1),u=u.substring(0,f)):a<0&&(a=u.length),f=0;u.charCodeAt(f)===48;f++);for(g=u.length;u.charCodeAt(g-1)===48;--g);if(u=u.slice(f,g),u){if(g-=f,o.e=a=a-f-1,o.d=[],f=(a+1)%G,a<0&&(f+=G),fo.constructor.maxE?(o.d=null,o.e=NaN):o.e-1){if(u=u.replace(/(\d)_(?=\d)/g,"$1"),J.test(u))return st(o,u)}else if(u==="Infinity"||u==="NaN")return+u||(o.s=NaN),o.e=NaN,o.d=null,o;if(K.test(u))a=16,u=u.toLowerCase();else if(U.test(u))a=2;else if(te.test(u))a=8;else throw Error(M+u);for(p=u.search(/p/i),p>0?(L=+u.slice(p+1),u=u.substring(2,p)):u=u.slice(2),p=u.indexOf("."),E=p>=0,f=o.constructor,E&&(u=u.replace(".",""),T=u.length,p=T-p,g=En(f,new f(a),p,p*2)),x=_t(u,a,Q),I=x.length-1,p=I;x[p]===0;--p)x.pop();return p<0?new f(o.s*0):(o.e=gr(x,I),o.d=x,S=!1,E&&(o=Ae(o,g,T*4)),L&&(o=o.times(Math.abs(L)<54?$(2,L):m.pow(2,L))),S=!0,o)}function Oo(o,u){var a,f=u.d.length;if(f<3)return u.isZero()?u:et(o,2,u,u);a=1.4*Math.sqrt(f),a=a>16?16:a|0,u=u.times(1/Zn(5,a)),u=et(o,2,u,u);for(var g,p=new o(5),E=new o(16),T=new o(20);a--;)g=u.times(u),u=u.times(p.plus(g.times(E.times(g).minus(T))));return u}function et(o,u,a,f,g){var p,E,T,L,x=1,I=o.precision,F=Math.ceil(I/G);for(S=!1,L=a.times(a),T=new o(f);;){if(E=Ae(T.times(L),new o(u++*u++),I,1),T=g?f.plus(E):f.minus(E),f=Ae(E.times(L),new o(u++*u++),I,1),E=T.plus(f),E.d[F]!==void 0){for(p=F;E.d[p]===T.d[p]&&p--;);if(p==-1)break}p=T,T=f,f=E,E=p,x++}return S=!0,E.d.length=F+1,E}function Zn(o,u){for(var a=o;--u;)a*=o;return a}function Fi(o,u){var a,f=u.s<0,g=Ze(o,o.precision,1),p=g.times(.5);if(u=u.abs(),u.lte(p))return y=f?4:1,u;if(a=u.divToInt(g),a.isZero())y=f?3:2;else{if(u=u.minus(a.times(g)),u.lte(p))return y=An(a)?f?2:3:f?4:1,u;y=An(a)?f?1:4:f?3:2}return u.minus(g).abs()}function cn(o,u,a,f){var g,p,E,T,L,x,I,F,z,ie=o.constructor,_e=a!==void 0;if(_e?(je(a,1,l),f===void 0?f=ie.rounding:je(f,0,8)):(a=ie.precision,f=ie.rounding),!o.isFinite())I=Zr(o);else{for(I=Mt(o),E=I.indexOf("."),_e?(g=2,u==16?a=a*4-3:u==8&&(a=a*3-2)):g=u,E>=0&&(I=I.replace(".",""),z=new ie(1),z.e=I.length-E,z.d=_t(Mt(z),10,g),z.e=z.d.length),F=_t(I,10,g),p=L=F.length;F[--L]==0;)F.pop();if(!F[0])I=_e?"0p+0":"0";else{if(E<0?p--:(o=new ie(o),o.d=F,o.e=p,o=Ae(o,z,a,f,0,g),F=o.d,p=o.e,x=A),E=F[a],T=g/2,x=x||F[a+1]!==void 0,x=f<4?(E!==void 0||x)&&(f===0||f===(o.s<0?3:2)):E>T||E===T&&(f===4||x||f===6&&F[a-1]&1||f===(o.s<0?8:7)),F.length=a,x)for(;++F[--a]>g-1;)F[a]=0,a||(++p,F.unshift(1));for(L=F.length;!F[L-1];--L);for(E=0,I="";E1)if(u==16||u==8){for(E=u==16?4:3,--L;L%E;L++)I+="0";for(F=_t(I,g,u),L=F.length;!F[L-1];--L);for(E=1,I="1.";EL)for(p-=L;p--;)I+="0";else pu)return o.length=u,!0}function Gn(o){return new this(o).abs()}function mr(o){return new this(o).acos()}function So(o){return new this(o).acosh()}function Vn(o,u){return new this(o).plus(u)}function Po(o){return new this(o).asin()}function Kn(o){return new this(o).asinh()}function Rn(o){return new this(o).atan()}function Gr(o){return new this(o).atanh()}function Vr(o,u){o=new this(o),u=new this(u);var a,f=this.precision,g=this.rounding,p=f+4;return!o.s||!u.s?a=new this(NaN):!o.d&&!u.d?(a=Ze(this,p,1).times(u.s>0?.25:.75),a.s=o.s):!u.d||o.isZero()?(a=u.s<0?Ze(this,f,g):new this(0),a.s=o.s):!o.d||u.isZero()?(a=Ze(this,p,1).times(.5),a.s=o.s):u.s<0?(this.precision=p,this.rounding=1,a=this.atan(Ae(o,u,p,1)),u=Ze(this,p,1),this.precision=f,this.rounding=g,a=o.s<0?a.minus(u):a.plus(u)):a=this.atan(Ae(o,u,p,1)),a}function Kr(o){return new this(o).cbrt()}function Yr(o){return j(o=new this(o),o.e+1,2)}function Jr(o,u,a){return new this(o).clamp(u,a)}function Xr(o){if(!o||typeof o!="object")throw Error(V+"Object expected");var u,a,f,g=o.defaults===!0,p=["precision",1,l,"rounding",0,8,"toExpNeg",-r,0,"toExpPos",0,r,"maxE",0,r,"minE",-r,0,"modulo",0,9];for(u=0;u=p[u+1]&&f<=p[u+2])this[a]=f;else throw Error(M+a+": "+f);if(a="crypto",g&&(this[a]=_[a]),(f=o[a])!==void 0)if(f===!0||f===!1||f===0||f===1)if(f)if(typeof crypto!="undefined"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[a]=!0;else throw Error(se);else this[a]=!1;else throw Error(M+a+": "+f);return this}function Qr(o){return new this(o).cos()}function jr(o){return new this(o).cosh()}function wr(o){var u,a,f;function g(p){var E,T,L,x=this;if(!(x instanceof g))return new g(p);if(x.constructor=g,ei(p)){x.s=p.s,S?!p.d||p.e>g.maxE?(x.e=NaN,x.d=null):p.e=10;T/=10)E++;S?E>g.maxE?(x.e=NaN,x.d=null):E=429e7?u[p]=crypto.getRandomValues(new Uint32Array(1))[0]:T[p++]=g%1e7;else if(crypto.randomBytes){for(u=crypto.randomBytes(f*=4);p=214e7?crypto.randomBytes(4).copy(u,p):(T.push(g%1e7),p+=4);p=f/4}else throw Error(se);else for(;p=10;g/=10)f++;f{(function(){var s,r="4.17.21",l=200,c="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",d="Expected a function",C="Invalid `variable` option passed into `_.template`",_="__lodash_hash_undefined__",m=500,A="__lodash_placeholder__",P=1,y=2,S=4,V=1,M=2,Y=1,se=2,ge=4,D=8,$=16,U=32,K=64,te=128,J=256,Q=512,G=30,Ce="...",Pe=800,ot=16,B=1,Oe=2,je=3,vt=1/0,_t=9007199254740991,Lo=17976931348623157e292,Ae=NaN,j=4294967295,Mt=j-1,gr=j>>>1,pr=[["ary",te],["bind",Y],["bindKey",se],["curry",D],["curryRight",$],["flip",Q],["partial",U],["partialRight",K],["rearg",J]],Ze="[object Arguments]",zn="[object Array]",tn="[object AsyncFunction]",En="[object Boolean]",An="[object Date]",Di="[object DOMException]",Tn="[object Error]",bt="[object Function]",Zr="[object GeneratorFunction]",st="[object Map]",$n="[object Number]",Oo="[object Null]",et="[object Object]",Zn="[object Promise]",Fi="[object Proxy]",cn="[object RegExp]",ht="[object Set]",Gn="[object String]",mr="[object Symbol]",So="[object Undefined]",Vn="[object WeakMap]",Po="[object WeakSet]",Kn="[object ArrayBuffer]",Rn="[object DataView]",Gr="[object Float32Array]",Vr="[object Float64Array]",Kr="[object Int8Array]",Yr="[object Int16Array]",Jr="[object Int32Array]",Xr="[object Uint8Array]",Qr="[object Uint8ClampedArray]",jr="[object Uint16Array]",wr="[object Uint32Array]",Io=/\b__p \+= '';/g,Wo=/\b(__p \+=) '' \+/g,Mo=/(__e\(.*?\)|\b__t\)) \+\n'';/g,ki=/&(?:amp|lt|gt|quot|#39);/g,ei=/[&<>"']/g,Do=RegExp(ki.source),Fo=RegExp(ei.source),ko=/<%-([\s\S]+?)%>/g,Uo=/<%([\s\S]+?)%>/g,Ui=/<%=([\s\S]+?)%>/g,qo=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ho=/^\w*$/,Bo=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ti=/[\\^$.*+?()[\]{}|]/g,zo=RegExp(ti.source),ni=/^\s+/,$o=/\s/,Zo=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Go=/\{\n\/\* \[wrapped with (.+)\] \*/,Vo=/,? & /,Ko=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Yo=/[()=,{}\[\]\/\s]/,Jo=/\\(\\)?/g,Xo=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,qi=/\w*$/,o=/^[-+]0x[0-9a-f]+$/i,u=/^0b[01]+$/i,a=/^\[object .+?Constructor\]$/,f=/^0o[0-7]+$/i,g=/^(?:0|[1-9]\d*)$/,p=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,E=/($^)/,T=/['\n\r\u2028\u2029\\]/g,L="\\ud800-\\udfff",x="\\u0300-\\u036f",I="\\ufe20-\\ufe2f",F="\\u20d0-\\u20ff",z=x+I+F,ie="\\u2700-\\u27bf",_e="a-z\\xdf-\\xf6\\xf8-\\xff",ce="\\xac\\xb1\\xd7\\xf7",Ye="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",Me="\\u2000-\\u206f",Et=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Re="A-Z\\xc0-\\xd6\\xd8-\\xde",Be="\\ufe0e\\ufe0f",Yn=ce+Ye+Me+Et,At="['\u2019]",ri="["+L+"]",Jn="["+Yn+"]",nn="["+z+"]",Cr="\\d+",Tt="["+ie+"]",Xn="["+_e+"]",Qn="[^"+L+Yn+Cr+ie+_e+Re+"]",jn="\\ud83c[\\udffb-\\udfff]",Ge="(?:"+nn+"|"+jn+")",ye="[^"+L+"]",Qo="(?:\\ud83c[\\udde6-\\uddff]){2}",jo="[\\ud800-\\udbff][\\udc00-\\udfff]",vr="["+Re+"]",r0="\\u200d",i0="(?:"+Xn+"|"+Qn+")",du="(?:"+vr+"|"+Qn+")",o0="(?:"+At+"(?:d|ll|m|re|s|t|ve))?",s0="(?:"+At+"(?:D|LL|M|RE|S|T|VE))?",l0=Ge+"?",u0="["+Be+"]?",gu="(?:"+r0+"(?:"+[ye,Qo,jo].join("|")+")"+u0+l0+")*",pu="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",mu="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",a0=u0+l0+gu,wu="(?:"+[Tt,Qo,jo].join("|")+")"+a0,Cu="(?:"+[ye+nn+"?",nn,Qo,jo,ri].join("|")+")",vu=RegExp(At,"g"),_u=RegExp(nn,"g"),e2=RegExp(jn+"(?="+jn+")|"+Cu+a0,"g"),bu=RegExp([vr+"?"+Xn+"+"+o0+"(?="+[Jn,vr,"$"].join("|")+")",du+"+"+s0+"(?="+[Jn,vr+i0,"$"].join("|")+")",vr+"?"+i0+"+"+o0,vr+"+"+s0,mu,pu,Cr,wu].join("|"),"g"),Eu=RegExp("["+r0+L+z+Be+"]"),Au=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Tu=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Ru=-1,De={};De[Gr]=De[Vr]=De[Kr]=De[Yr]=De[Jr]=De[Xr]=De[Qr]=De[jr]=De[wr]=!0,De[Ze]=De[zn]=De[Kn]=De[En]=De[Rn]=De[An]=De[Tn]=De[bt]=De[st]=De[$n]=De[et]=De[cn]=De[ht]=De[Gn]=De[Vn]=!1;var Ie={};Ie[Ze]=Ie[zn]=Ie[Kn]=Ie[Rn]=Ie[En]=Ie[An]=Ie[Gr]=Ie[Vr]=Ie[Kr]=Ie[Yr]=Ie[Jr]=Ie[st]=Ie[$n]=Ie[et]=Ie[cn]=Ie[ht]=Ie[Gn]=Ie[mr]=Ie[Xr]=Ie[Qr]=Ie[jr]=Ie[wr]=!0,Ie[Tn]=Ie[bt]=Ie[Vn]=!1;var xu={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},yu={"&":"&","<":"<",">":">",'"':""","'":"'"},Nu={"&":"&","<":"<",">":">",""":'"',"'":"'"},Lu={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ou=parseFloat,Su=parseInt,c0=typeof global=="object"&&global&&global.Object===Object&&global,Pu=typeof self=="object"&&self&&self.Object===Object&&self,Ve=c0||Pu||Function("return this")(),t2=typeof Ir=="object"&&Ir&&!Ir.nodeType&&Ir,er=t2&&typeof bi=="object"&&bi&&!bi.nodeType&&bi,f0=er&&er.exports===t2,n2=f0&&c0.process,Dt=function(){try{var N=er&&er.require&&er.require("util").types;return N||n2&&n2.binding&&n2.binding("util")}catch(k){}}(),h0=Dt&&Dt.isArrayBuffer,d0=Dt&&Dt.isDate,g0=Dt&&Dt.isMap,p0=Dt&&Dt.isRegExp,m0=Dt&&Dt.isSet,w0=Dt&&Dt.isTypedArray;function Rt(N,k,W){switch(W.length){case 0:return N.call(k);case 1:return N.call(k,W[0]);case 2:return N.call(k,W[0],W[1]);case 3:return N.call(k,W[0],W[1],W[2])}return N.apply(k,W)}function Iu(N,k,W,ee){for(var fe=-1,Te=N==null?0:N.length;++fe-1}function r2(N,k,W){for(var ee=-1,fe=N==null?0:N.length;++ee-1;);return W}function R0(N,k){for(var W=N.length;W--&&_r(k,N[W],0)>-1;);return W}function Bu(N,k){for(var W=N.length,ee=0;W--;)N[W]===k&&++ee;return ee}var zu=l2(xu),$u=l2(yu);function Zu(N){return"\\"+Lu[N]}function Gu(N,k){return N==null?s:N[k]}function br(N){return Eu.test(N)}function Vu(N){return Au.test(N)}function Ku(N){for(var k,W=[];!(k=N.next()).done;)W.push(k.value);return W}function f2(N){var k=-1,W=Array(N.size);return N.forEach(function(ee,fe){W[++k]=[fe,ee]}),W}function x0(N,k){return function(W){return N(k(W))}}function Nn(N,k){for(var W=-1,ee=N.length,fe=0,Te=[];++W-1}function M4(e,t){var n=this.__data__,i=i1(n,e);return i<0?(++this.size,n.push([e,t])):n[i][1]=t,this}fn.prototype.clear=S4,fn.prototype.delete=P4,fn.prototype.get=I4,fn.prototype.has=W4,fn.prototype.set=M4;function hn(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t=t?e:t)),e}function qt(e,t,n,i,h,v){var b,R=t&P,O=t&y,q=t&S;if(n&&(b=h?n(e,i,h,v):n(e)),b!==s)return b;if(!ke(e))return e;var H=he(e);if(H){if(b=U6(e),!R)return dt(e,b)}else{var Z=nt(e),X=Z==bt||Z==Zr;if(Mn(e))return us(e,R);if(Z==et||Z==Ze||X&&!h){if(b=O||X?{}:ys(e),!R)return O?N6(e,X4(b,e)):y6(e,k0(b,e))}else{if(!Ie[Z])return h?e:{};b=q6(e,Z,R)}}v||(v=new Kt);var ne=v.get(e);if(ne)return ne;v.set(e,b),nl(e)?e.forEach(function(ae){b.add(qt(ae,t,n,ae,e,v))}):el(e)&&e.forEach(function(ae,ve){b.set(ve,qt(ae,t,n,ve,e,v))});var ue=q?O?F2:D2:O?pt:Ke,pe=H?s:ue(e);return Ft(pe||e,function(ae,ve){pe&&(ve=ae,ae=e[ve]),ci(b,ve,qt(ae,t,n,ve,e,v))}),b}function Q4(e){var t=Ke(e);return function(n){return U0(n,e,t)}}function U0(e,t,n){var i=n.length;if(e==null)return!i;for(e=Se(e);i--;){var h=n[i],v=t[h],b=e[h];if(b===s&&!(h in e)||!v(b))return!1}return!0}function q0(e,t,n){if(typeof e!="function")throw new kt(d);return wi(function(){e.apply(s,n)},t)}function fi(e,t,n,i){var h=-1,v=Hi,b=!0,R=e.length,O=[],q=t.length;if(!R)return O;n&&(t=Fe(t,xt(n))),i?(v=r2,b=!1):t.length>=l&&(v=ii,b=!1,t=new rr(t));e:for(;++hh?0:h+n),i=i===s||i>h?h:de(i),i<0&&(i+=h),i=n>i?0:il(i);n0&&n(R)?t>1?Je(R,t-1,n,i,h):yn(h,R):i||(h[h.length]=R)}return h}var C2=gs(),z0=gs(!0);function rn(e,t){return e&&C2(e,t,Ke)}function v2(e,t){return e&&z0(e,t,Ke)}function s1(e,t){return xn(t,function(n){return wn(e[n])})}function or(e,t){t=In(t,e);for(var n=0,i=t.length;e!=null&&nt}function t6(e,t){return e!=null&&Ne.call(e,t)}function n6(e,t){return e!=null&&t in Se(e)}function r6(e,t,n){return e>=tt(t,n)&&e<$e(t,n)}function b2(e,t,n){for(var i=n?r2:Hi,h=e[0].length,v=e.length,b=v,R=W(v),O=1/0,q=[];b--;){var H=e[b];b&&t&&(H=Fe(H,xt(t))),O=tt(H.length,O),R[b]=!n&&(t||h>=120&&H.length>=120)?new rr(b&&H):s}H=e[0];var Z=-1,X=R[0];e:for(;++Z-1;)R!==e&&Xi.call(R,O,1),Xi.call(e,O,1);return e}function es(e,t){for(var n=e?t.length:0,i=n-1;n--;){var h=t[n];if(n==i||h!==v){var v=h;mn(h)?Xi.call(e,h,1):L2(e,h)}}return e}function x2(e,t){return e+e1(W0()*(t-e+1))}function m6(e,t,n,i){for(var h=-1,v=$e(ji((t-e)/(n||1)),0),b=W(v);v--;)b[i?v:++h]=e,e+=n;return b}function y2(e,t){var n="";if(!e||t<1||t>_t)return n;do t%2&&(n+=e),t=e1(t/2),t&&(e+=e);while(t);return n}function me(e,t){return $2(Os(e,t,mt),e+"")}function w6(e){return F0(Sr(e))}function C6(e,t){var n=Sr(e);return w1(n,ir(t,0,n.length))}function gi(e,t,n,i){if(!ke(e))return e;t=In(t,e);for(var h=-1,v=t.length,b=v-1,R=e;R!=null&&++hh?0:h+t),n=n>h?h:n,n<0&&(n+=h),h=t>n?0:n-t>>>0,t>>>=0;for(var v=W(h);++i>>1,b=e[v];b!==null&&!Nt(b)&&(n?b<=t:b=l){var q=t?null:P6(e);if(q)return zi(q);b=!1,h=ii,O=new rr}else O=t?[]:R;e:for(;++i=i?e:Ht(e,t,n)}var ls=a4||function(e){return Ve.clearTimeout(e)};function us(e,t){if(t)return e.slice();var n=e.length,i=L0?L0(n):new e.constructor(n);return e.copy(i),i}function I2(e){var t=new e.constructor(e.byteLength);return new Yi(t).set(new Yi(e)),t}function A6(e,t){var n=t?I2(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}function T6(e){var t=new e.constructor(e.source,qi.exec(e));return t.lastIndex=e.lastIndex,t}function R6(e){return ai?Se(ai.call(e)):{}}function as(e,t){var n=t?I2(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}function cs(e,t){if(e!==t){var n=e!==s,i=e===null,h=e===e,v=Nt(e),b=t!==s,R=t===null,O=t===t,q=Nt(t);if(!R&&!q&&!v&&e>t||v&&b&&O&&!R&&!q||i&&b&&O||!n&&O||!h)return 1;if(!i&&!v&&!q&&e=R)return O;var q=n[i];return O*(q=="desc"?-1:1)}}return e.index-t.index}function fs(e,t,n,i){for(var h=-1,v=e.length,b=n.length,R=-1,O=t.length,q=$e(v-b,0),H=W(O+q),Z=!i;++R1?n[h-1]:s,b=h>2?n[2]:s;for(v=e.length>3&&typeof v=="function"?(h--,v):s,b&&ut(n[0],n[1],b)&&(v=h<3?s:v,h=1),t=Se(t);++i-1?h[v?t[b]:b]:s}}function ws(e){return pn(function(t){var n=t.length,i=n,h=Ut.prototype.thru;for(e&&t.reverse();i--;){var v=t[i];if(typeof v!="function")throw new kt(d);if(h&&!b&&p1(v)=="wrapper")var b=new Ut([],!0)}for(i=b?i:n;++i1&&Ee.reverse(),H&&OR))return!1;var q=v.get(e),H=v.get(t);if(q&&H)return q==t&&H==e;var Z=-1,X=!0,ne=n&M?new rr:s;for(v.set(e,t),v.set(t,e);++Z1?"& ":"")+t[i],t=t.join(n>2?", ":" "),e.replace(Zo,`{ +/* [wrapped with `+t+`] */ +`)}function B6(e){return he(e)||ur(e)||!!(P0&&e&&e[P0])}function mn(e,t){var n=typeof e;return t=t==null?_t:t,!!t&&(n=="number"||n!="symbol"&&g.test(e))&&e>-1&&e%1==0&&e0){if(++t>=Pe)return arguments[0]}else t=0;return e.apply(s,arguments)}}function w1(e,t){var n=-1,i=e.length,h=i-1;for(t=t===s?i:t;++n1?e[t-1]:s;return n=typeof n=="function"?(e.pop(),n):s,Bs(e,n)});function zs(e){var t=w(e);return t.__chain__=!0,t}function ja(e,t){return t(e),e}function C1(e,t){return t(e)}var e8=pn(function(e){var t=e.length,n=t?e[0]:0,i=this.__wrapped__,h=function(v){return w2(v,e)};return t>1||this.__actions__.length||!(i instanceof be)||!mn(n)?this.thru(h):(i=i.slice(n,+n+(t?1:0)),i.__actions__.push({func:C1,args:[h],thisArg:s}),new Ut(i,this.__chain__).thru(function(v){return t&&!v.length&&v.push(s),v}))});function t8(){return zs(this)}function n8(){return new Ut(this.value(),this.__chain__)}function r8(){this.__values__===s&&(this.__values__=rl(this.value()));var e=this.__index__>=this.__values__.length,t=e?s:this.__values__[this.__index__++];return{done:e,value:t}}function i8(){return this}function o8(e){for(var t,n=this;n instanceof r1;){var i=Ds(n);i.__index__=0,i.__values__=s,t?h.__wrapped__=i:t=i;var h=i;n=n.__wrapped__}return h.__wrapped__=e,t}function s8(){var e=this.__wrapped__;if(e instanceof be){var t=e;return this.__actions__.length&&(t=new be(this)),t=t.reverse(),t.__actions__.push({func:C1,args:[Z2],thisArg:s}),new Ut(t,this.__chain__)}return this.thru(Z2)}function l8(){return os(this.__wrapped__,this.__actions__)}var u8=c1(function(e,t,n){Ne.call(e,n)?++e[n]:dn(e,n,1)});function a8(e,t,n){var i=he(e)?C0:j4;return n&&ut(e,t,n)&&(t=s),i(e,le(t,3))}function c8(e,t){var n=he(e)?xn:B0;return n(e,le(t,3))}var f8=ms(Fs),h8=ms(ks);function d8(e,t){return Je(v1(e,t),1)}function g8(e,t){return Je(v1(e,t),vt)}function p8(e,t,n){return n=n===s?1:de(n),Je(v1(e,t),n)}function $s(e,t){var n=he(e)?Ft:Sn;return n(e,le(t,3))}function Zs(e,t){var n=he(e)?Wu:H0;return n(e,le(t,3))}var m8=c1(function(e,t,n){Ne.call(e,n)?e[n].push(t):dn(e,n,[t])});function w8(e,t,n,i){e=gt(e)?e:Sr(e),n=n&&!i?de(n):0;var h=e.length;return n<0&&(n=$e(h+n,0)),T1(e)?n<=h&&e.indexOf(t,n)>-1:!!h&&_r(e,t,n)>-1}var C8=me(function(e,t,n){var i=-1,h=typeof t=="function",v=gt(e)?W(e.length):[];return Sn(e,function(b){v[++i]=h?Rt(t,b,n):hi(b,t,n)}),v}),v8=c1(function(e,t,n){dn(e,n,t)});function v1(e,t){var n=he(e)?Fe:K0;return n(e,le(t,3))}function _8(e,t,n,i){return e==null?[]:(he(t)||(t=t==null?[]:[t]),n=i?s:n,he(n)||(n=n==null?[]:[n]),Q0(e,t,n))}var b8=c1(function(e,t,n){e[n?0:1].push(t)},function(){return[[],[]]});function E8(e,t,n){var i=he(e)?i2:E0,h=arguments.length<3;return i(e,le(t,4),n,h,Sn)}function A8(e,t,n){var i=he(e)?Mu:E0,h=arguments.length<3;return i(e,le(t,4),n,h,H0)}function T8(e,t){var n=he(e)?xn:B0;return n(e,E1(le(t,3)))}function R8(e){var t=he(e)?F0:w6;return t(e)}function x8(e,t,n){(n?ut(e,t,n):t===s)?t=1:t=de(t);var i=he(e)?K4:C6;return i(e,t)}function y8(e){var t=he(e)?Y4:_6;return t(e)}function N8(e){if(e==null)return 0;if(gt(e))return T1(e)?Er(e):e.length;var t=nt(e);return t==st||t==ht?e.size:A2(e).length}function L8(e,t,n){var i=he(e)?o2:b6;return n&&ut(e,t,n)&&(t=s),i(e,le(t,3))}var O8=me(function(e,t){if(e==null)return[];var n=t.length;return n>1&&ut(e,t[0],t[1])?t=[]:n>2&&ut(t[0],t[1],t[2])&&(t=[t[0]]),Q0(e,Je(t,1),[])}),_1=c4||function(){return Ve.Date.now()};function S8(e,t){if(typeof t!="function")throw new kt(d);return e=de(e),function(){if(--e<1)return t.apply(this,arguments)}}function Gs(e,t,n){return t=n?s:t,t=e&&t==null?e.length:t,gn(e,te,s,s,s,s,t)}function Vs(e,t){var n;if(typeof t!="function")throw new kt(d);return e=de(e),function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=s),n}}var V2=me(function(e,t,n){var i=Y;if(n.length){var h=Nn(n,Lr(V2));i|=U}return gn(e,i,t,n,h)}),Ks=me(function(e,t,n){var i=Y|se;if(n.length){var h=Nn(n,Lr(Ks));i|=U}return gn(t,i,e,n,h)});function Ys(e,t,n){t=n?s:t;var i=gn(e,D,s,s,s,s,s,t);return i.placeholder=Ys.placeholder,i}function Js(e,t,n){t=n?s:t;var i=gn(e,$,s,s,s,s,s,t);return i.placeholder=Js.placeholder,i}function Xs(e,t,n){var i,h,v,b,R,O,q=0,H=!1,Z=!1,X=!0;if(typeof e!="function")throw new kt(d);t=zt(t)||0,ke(n)&&(H=!!n.leading,Z="maxWait"in n,v=Z?$e(zt(n.maxWait)||0,t):v,X="trailing"in n?!!n.trailing:X);function ne(He){var Jt=i,vn=h;return i=h=s,q=He,b=e.apply(vn,Jt),b}function ue(He){return q=He,R=wi(ve,t),H?ne(He):b}function pe(He){var Jt=He-O,vn=He-q,ml=t-Jt;return Z?tt(ml,v-vn):ml}function ae(He){var Jt=He-O,vn=He-q;return O===s||Jt>=t||Jt<0||Z&&vn>=v}function ve(){var He=_1();if(ae(He))return Ee(He);R=wi(ve,pe(He))}function Ee(He){return R=s,X&&i?ne(He):(i=h=s,b)}function Lt(){R!==s&&ls(R),q=0,i=O=h=R=s}function at(){return R===s?b:Ee(_1())}function Ot(){var He=_1(),Jt=ae(He);if(i=arguments,h=this,O=He,Jt){if(R===s)return ue(O);if(Z)return ls(R),R=wi(ve,t),ne(O)}return R===s&&(R=wi(ve,t)),b}return Ot.cancel=Lt,Ot.flush=at,Ot}var P8=me(function(e,t){return q0(e,1,t)}),I8=me(function(e,t,n){return q0(e,zt(t)||0,n)});function W8(e){return gn(e,Q)}function b1(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new kt(d);var n=function(){var i=arguments,h=t?t.apply(this,i):i[0],v=n.cache;if(v.has(h))return v.get(h);var b=e.apply(this,i);return n.cache=v.set(h,b)||v,b};return n.cache=new(b1.Cache||hn),n}b1.Cache=hn;function E1(e){if(typeof e!="function")throw new kt(d);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}function M8(e){return Vs(2,e)}var D8=E6(function(e,t){t=t.length==1&&he(t[0])?Fe(t[0],xt(le())):Fe(Je(t,1),xt(le()));var n=t.length;return me(function(i){for(var h=-1,v=tt(i.length,n);++h=t}),ur=Z0(function(){return arguments}())?Z0:function(e){return Ue(e)&&Ne.call(e,"callee")&&!S0.call(e,"callee")},he=W.isArray,X8=h0?xt(h0):o6;function gt(e){return e!=null&&A1(e.length)&&!wn(e)}function qe(e){return Ue(e)&>(e)}function Q8(e){return e===!0||e===!1||Ue(e)&<(e)==En}var Mn=h4||o3,j8=d0?xt(d0):s6;function e5(e){return Ue(e)&&e.nodeType===1&&!Ci(e)}function t5(e){if(e==null)return!0;if(gt(e)&&(he(e)||typeof e=="string"||typeof e.splice=="function"||Mn(e)||Or(e)||ur(e)))return!e.length;var t=nt(e);if(t==st||t==ht)return!e.size;if(mi(e))return!A2(e).length;for(var n in e)if(Ne.call(e,n))return!1;return!0}function n5(e,t){return di(e,t)}function r5(e,t,n){n=typeof n=="function"?n:s;var i=n?n(e,t):s;return i===s?di(e,t,s,n):!!i}function Y2(e){if(!Ue(e))return!1;var t=lt(e);return t==Tn||t==Di||typeof e.message=="string"&&typeof e.name=="string"&&!Ci(e)}function i5(e){return typeof e=="number"&&I0(e)}function wn(e){if(!ke(e))return!1;var t=lt(e);return t==bt||t==Zr||t==tn||t==Fi}function js(e){return typeof e=="number"&&e==de(e)}function A1(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=_t}function ke(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}function Ue(e){return e!=null&&typeof e=="object"}var el=g0?xt(g0):u6;function o5(e,t){return e===t||E2(e,t,U2(t))}function s5(e,t,n){return n=typeof n=="function"?n:s,E2(e,t,U2(t),n)}function l5(e){return tl(e)&&e!=+e}function u5(e){if(Z6(e))throw new fe(c);return G0(e)}function a5(e){return e===null}function c5(e){return e==null}function tl(e){return typeof e=="number"||Ue(e)&<(e)==$n}function Ci(e){if(!Ue(e)||lt(e)!=et)return!1;var t=Ji(e);if(t===null)return!0;var n=Ne.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&Gi.call(n)==s4}var J2=p0?xt(p0):a6;function f5(e){return js(e)&&e>=-_t&&e<=_t}var nl=m0?xt(m0):c6;function T1(e){return typeof e=="string"||!he(e)&&Ue(e)&<(e)==Gn}function Nt(e){return typeof e=="symbol"||Ue(e)&<(e)==mr}var Or=w0?xt(w0):f6;function h5(e){return e===s}function d5(e){return Ue(e)&&nt(e)==Vn}function g5(e){return Ue(e)&<(e)==Po}var p5=g1(T2),m5=g1(function(e,t){return e<=t});function rl(e){if(!e)return[];if(gt(e))return T1(e)?Vt(e):dt(e);if(oi&&e[oi])return Ku(e[oi]());var t=nt(e),n=t==st?f2:t==ht?zi:Sr;return n(e)}function Cn(e){if(!e)return e===0?e:0;if(e=zt(e),e===vt||e===-vt){var t=e<0?-1:1;return t*Lo}return e===e?e:0}function de(e){var t=Cn(e),n=t%1;return t===t?n?t-n:t:0}function il(e){return e?ir(de(e),0,j):0}function zt(e){if(typeof e=="number")return e;if(Nt(e))return Ae;if(ke(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=ke(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=A0(e);var n=u.test(e);return n||f.test(e)?Su(e.slice(2),n?2:8):o.test(e)?Ae:+e}function ol(e){return on(e,pt(e))}function w5(e){return e?ir(de(e),-_t,_t):e===0?e:0}function xe(e){return e==null?"":yt(e)}var C5=yr(function(e,t){if(mi(t)||gt(t)){on(t,Ke(t),e);return}for(var n in t)Ne.call(t,n)&&ci(e,n,t[n])}),sl=yr(function(e,t){on(t,pt(t),e)}),R1=yr(function(e,t,n,i){on(t,pt(t),e,i)}),v5=yr(function(e,t,n,i){on(t,Ke(t),e,i)}),_5=pn(w2);function b5(e,t){var n=xr(e);return t==null?n:k0(n,t)}var E5=me(function(e,t){e=Se(e);var n=-1,i=t.length,h=i>2?t[2]:s;for(h&&ut(t[0],t[1],h)&&(i=1);++n1),v}),on(e,F2(e),n),i&&(n=qt(n,P|y|S,I6));for(var h=t.length;h--;)L2(n,t[h]);return n});function q5(e,t){return ul(e,E1(le(t)))}var H5=pn(function(e,t){return e==null?{}:g6(e,t)});function ul(e,t){if(e==null)return{};var n=Fe(F2(e),function(i){return[i]});return t=le(t),j0(e,n,function(i,h){return t(i,h[0])})}function B5(e,t,n){t=In(t,e);var i=-1,h=t.length;for(h||(h=1,e=s);++it){var i=e;e=t,t=i}if(n||e%1||t%1){var h=W0();return tt(e+h*(t-e+Ou("1e-"+((h+"").length-1))),t)}return x2(e,t)}var j5=Nr(function(e,t,n){return t=t.toLowerCase(),e+(n?fl(t):t)});function fl(e){return j2(xe(e).toLowerCase())}function hl(e){return e=xe(e),e&&e.replace(p,zu).replace(_u,"")}function ec(e,t,n){e=xe(e),t=yt(t);var i=e.length;n=n===s?i:ir(de(n),0,i);var h=n;return n-=t.length,n>=0&&e.slice(n,h)==t}function tc(e){return e=xe(e),e&&Fo.test(e)?e.replace(ei,$u):e}function nc(e){return e=xe(e),e&&zo.test(e)?e.replace(ti,"\\$&"):e}var rc=Nr(function(e,t,n){return e+(n?"-":"")+t.toLowerCase()}),ic=Nr(function(e,t,n){return e+(n?" ":"")+t.toLowerCase()}),oc=ps("toLowerCase");function sc(e,t,n){e=xe(e),t=de(t);var i=t?Er(e):0;if(!t||i>=t)return e;var h=(t-i)/2;return d1(e1(h),n)+e+d1(ji(h),n)}function lc(e,t,n){e=xe(e),t=de(t);var i=t?Er(e):0;return t&&i>>0,n?(e=xe(e),e&&(typeof t=="string"||t!=null&&!J2(t))&&(t=yt(t),!t&&br(e))?Wn(Vt(e),0,n):e.split(t,n)):[]}var gc=Nr(function(e,t,n){return e+(n?" ":"")+j2(t)});function pc(e,t,n){return e=xe(e),n=n==null?0:ir(de(n),0,e.length),t=yt(t),e.slice(n,n+t.length)==t}function mc(e,t,n){var i=w.templateSettings;n&&ut(e,t,n)&&(t=s),e=xe(e),t=R1({},t,i,Es);var h=R1({},t.imports,i.imports,Es),v=Ke(h),b=c2(h,v),R,O,q=0,H=t.interpolate||E,Z="__p += '",X=h2((t.escape||E).source+"|"+H.source+"|"+(H===Ui?Xo:E).source+"|"+(t.evaluate||E).source+"|$","g"),ne="//# sourceURL="+(Ne.call(t,"sourceURL")?(t.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Ru+"]")+` +`;e.replace(X,function(ae,ve,Ee,Lt,at,Ot){return Ee||(Ee=Lt),Z+=e.slice(q,Ot).replace(T,Zu),ve&&(R=!0,Z+=`' + +__e(`+ve+`) + +'`),at&&(O=!0,Z+=`'; +`+at+`; +__p += '`),Ee&&(Z+=`' + +((__t = (`+Ee+`)) == null ? '' : __t) + +'`),q=Ot+ae.length,ae}),Z+=`'; +`;var ue=Ne.call(t,"variable")&&t.variable;if(!ue)Z=`with (obj) { +`+Z+` +} +`;else if(Yo.test(ue))throw new fe(C);Z=(O?Z.replace(Io,""):Z).replace(Wo,"$1").replace(Mo,"$1;"),Z="function("+(ue||"obj")+`) { +`+(ue?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(R?", __e = _.escape":"")+(O?`, __j = Array.prototype.join; +function print() { __p += __j.call(arguments, '') } +`:`; +`)+Z+`return __p +}`;var pe=gl(function(){return Te(v,ne+"return "+Z).apply(s,b)});if(pe.source=Z,Y2(pe))throw pe;return pe}function wc(e){return xe(e).toLowerCase()}function Cc(e){return xe(e).toUpperCase()}function vc(e,t,n){if(e=xe(e),e&&(n||t===s))return A0(e);if(!e||!(t=yt(t)))return e;var i=Vt(e),h=Vt(t),v=T0(i,h),b=R0(i,h)+1;return Wn(i,v,b).join("")}function _c(e,t,n){if(e=xe(e),e&&(n||t===s))return e.slice(0,y0(e)+1);if(!e||!(t=yt(t)))return e;var i=Vt(e),h=R0(i,Vt(t))+1;return Wn(i,0,h).join("")}function bc(e,t,n){if(e=xe(e),e&&(n||t===s))return e.replace(ni,"");if(!e||!(t=yt(t)))return e;var i=Vt(e),h=T0(i,Vt(t));return Wn(i,h).join("")}function Ec(e,t){var n=G,i=Ce;if(ke(t)){var h="separator"in t?t.separator:h;n="length"in t?de(t.length):n,i="omission"in t?yt(t.omission):i}e=xe(e);var v=e.length;if(br(e)){var b=Vt(e);v=b.length}if(n>=v)return e;var R=n-Er(i);if(R<1)return i;var O=b?Wn(b,0,R).join(""):e.slice(0,R);if(h===s)return O+i;if(b&&(R+=O.length-R),J2(h)){if(e.slice(R).search(h)){var q,H=O;for(h.global||(h=h2(h.source,xe(qi.exec(h))+"g")),h.lastIndex=0;q=h.exec(H);)var Z=q.index;O=O.slice(0,Z===s?R:Z)}}else if(e.indexOf(yt(h),R)!=R){var X=O.lastIndexOf(h);X>-1&&(O=O.slice(0,X))}return O+i}function Ac(e){return e=xe(e),e&&Do.test(e)?e.replace(ki,Qu):e}var Tc=Nr(function(e,t,n){return e+(n?" ":"")+t.toUpperCase()}),j2=ps("toUpperCase");function dl(e,t,n){return e=xe(e),t=n?s:t,t===s?Vu(e)?t4(e):ku(e):e.match(t)||[]}var gl=me(function(e,t){try{return Rt(e,s,t)}catch(n){return Y2(n)?n:new fe(n)}}),Rc=pn(function(e,t){return Ft(t,function(n){n=sn(n),dn(e,n,V2(e[n],e))}),e});function xc(e){var t=e==null?0:e.length,n=le();return e=t?Fe(e,function(i){if(typeof i[1]!="function")throw new kt(d);return[n(i[0]),i[1]]}):[],me(function(i){for(var h=-1;++h_t)return[];var n=j,i=tt(e,j);t=le(t),e-=j;for(var h=a2(i,t);++n0||t<0)?new be(n):(e<0?n=n.takeRight(-e):e&&(n=n.drop(e)),t!==s&&(t=de(t),n=t<0?n.dropRight(-t):n.take(t-e)),n)},be.prototype.takeRightWhile=function(e){return this.reverse().takeWhile(e).reverse()},be.prototype.toArray=function(){return this.take(j)},rn(be.prototype,function(e,t){var n=/^(?:filter|find|map|reject)|While$/.test(t),i=/^(?:head|last)$/.test(t),h=w[i?"take"+(t=="last"?"Right":""):t],v=i||/^find/.test(t);h&&(w.prototype[t]=function(){var b=this.__wrapped__,R=i?[1]:arguments,O=b instanceof be,q=R[0],H=O||he(b),Z=function(ve){var Ee=h.apply(w,yn([ve],R));return i&&X?Ee[0]:Ee};H&&n&&typeof q=="function"&&q.length!=1&&(O=H=!1);var X=this.__chain__,ne=!!this.__actions__.length,ue=v&&!X,pe=O&&!ne;if(!v&&H){b=pe?b:new be(this);var ae=e.apply(b,R);return ae.__actions__.push({func:C1,args:[Z],thisArg:s}),new Ut(ae,X)}return ue&&pe?e.apply(this,R):(ae=this.thru(Z),ue?i?ae.value()[0]:ae.value():ae)})}),Ft(["pop","push","shift","sort","splice","unshift"],function(e){var t=$i[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",i=/^(?:pop|shift)$/.test(e);w.prototype[e]=function(){var h=arguments;if(i&&!this.__chain__){var v=this.value();return t.apply(he(v)?v:[],h)}return this[n](function(b){return t.apply(he(b)?b:[],h)})}}),rn(be.prototype,function(e,t){var n=w[t];if(n){var i=n.name+"";Ne.call(Rr,i)||(Rr[i]=[]),Rr[i].push({name:t,func:n})}}),Rr[f1(s,se).name]=[{name:"wrapper",func:s}],be.prototype.clone=A4,be.prototype.reverse=T4,be.prototype.value=R4,w.prototype.at=e8,w.prototype.chain=t8,w.prototype.commit=n8,w.prototype.next=r8,w.prototype.plant=o8,w.prototype.reverse=s8,w.prototype.toJSON=w.prototype.valueOf=w.prototype.value=l8,w.prototype.first=w.prototype.head,oi&&(w.prototype[oi]=i8),w},Ln=n4();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(Ve._=Ln,define(function(){return Ln})):er?((er.exports=Ln)._=Ln,t2._=Ln):Ve._=Ln}).call(Ir)});var Fn=we(Qt=>{"use strict";var A9=Qt&&Qt.__importDefault||function(s){return s&&s.__esModule?s:{default:s}};Object.defineProperty(Qt,"__esModule",{value:!0});Qt.Value=Qt.Arity=Qt.FloatOrMilliseconds=void 0;var Ei=A9(f3()),T9=Wr(),R9=new RegExp("[1-9][0-9]{3}-[01][0-9]-[0-3][0-9][T ][0-2][0-9]:[0-5][0-9]"),x9=new RegExp("^-?[0-9]+:[0-5][0-9]"),y9=s=>{let r=s.trim();if(r==="")return new Ei.default(0);if(R9.test(r))return new Ei.default(new Date(r).valueOf());if(x9.test(r)){let c=r.charAt(0)=="-",d=r.slice(c?1:0),C=parseInt(d.slice(0,-3))*60+parseInt(d.slice(-2));return new Ei.default((c?-1:1)*C*6e4)}let l=new Ei.default(r);return l.isNaN()?new Ei.default(0):l};Qt.FloatOrMilliseconds=y9;var H1=class{constructor(r,l){this.isRow=()=>this.rows>1&&this.cols===1,this.isColumn=()=>this.rows===1&&this.cols>1,this.isCell=()=>this.rows===1&&this.cols===1,this.rows=r,this.cols=l}};Qt.Arity=H1;var h3=class{constructor(r){this.get=(l,c)=>this.val[l][c],this.getAsNumber=(l,c)=>{let d=this.get(l,c);return(0,Qt.FloatOrMilliseconds)(d)},this.getArity=()=>{let l=this.val.reduce((c,d)=>Math.max(c,d.length),0);return new H1(this.val.length,l)},this.toString=()=>this.getArity().isCell()?this.get(0,0):`[${(0,T9.flatten)(this.val).map(l=>l.trim()).filter(l=>l!=="").join(", ")}]`,this.val=r}};Qt.Value=h3});var Rl=we($1=>{"use strict";Object.defineProperty($1,"__esModule",{value:!0});$1.AlgebraicOperation=void 0;var ar=Xt(),d3=$t(),Tl=Ai(),B1=Fn(),z1=Wr(),g3=class{constructor(r,l){this.getValue=(_,m)=>{switch(this.operator){case"+":return this.add(_,m);case"-":return this.subtract(_,m);case"*":return this.multiply(_,m);case"/":return this.divide(_,m);default:return(0,ar.err)(Error("Invalid algbraic operator: "+this.operator))}},this.withCellAndRange=(_,m,A,P,y)=>{let S=this.leftSource.getValue(_,m);if(S.isErr())return(0,ar.err)(S.error);let V=this.rightSource.getValue(_,m);if(V.isErr())return(0,ar.err)(V.error);let M=S.value.getArity(),Y=V.value.getArity();if(!Y.isCell()&&!M.isCell())return(0,ar.err)(Error(`At least one operand in algebraic "${A}" must be a single cell.`));if(!Y.isCell()&&!P)return(0,ar.err)(Error(`Right operand in algebraic "${A}" must be a single cell.`));if(Y.isCell()){let D=V.value.getAsNumber(0,0),$=(0,z1.map)(S.value.val,U=>(0,z1.map)(U,K=>{let te=(0,B1.FloatOrMilliseconds)(K);return y(te,D).toString()}));return(0,ar.ok)(new B1.Value($))}let se=S.value.getAsNumber(0,0),ge=(0,z1.map)(V.value.val,D=>(0,z1.map)(D,$=>{let U=(0,B1.FloatOrMilliseconds)($);return y(se,U).toString()}));return(0,ar.ok)(new B1.Value(ge))},this.add=(_,m)=>this.withCellAndRange(_,m,"add",!0,(A,P)=>A.plus(P)),this.subtract=(_,m)=>this.withCellAndRange(_,m,"subtract",!0,(A,P)=>A.minus(P)),this.multiply=(_,m)=>this.withCellAndRange(_,m,"multiply",!0,(A,P)=>A.times(P)),this.divide=(_,m)=>this.withCellAndRange(_,m,"divide",!1,(A,P)=>A.dividedBy(P));let c=(0,d3.checkType)(r,"algebraic_operation");if(c)throw c;let d=(0,d3.checkChildLength)(r,3);if(d)throw d;let C=(0,d3.checkType)(r.children[1],"algebraic_operator");if(C)throw C;this.operator=r.children[1].text;try{this.leftSource=new Tl.Source(r.children[0],l),this.rightSource=new Tl.Source(r.children[2],l)}catch(_){throw _}}};$1.AlgebraicOperation=g3});var xl=we(G1=>{"use strict";Object.defineProperty(G1,"__esModule",{value:!0});G1.ConditionalFunctionCall=void 0;var jt=Xt(),Ti=$t(),Z1=Ai(),p3=class{constructor(r,l){this.getValue=(C,_)=>this.predicate.eval(C,_).andThen(m=>m?this.leftSource.getValue(C,_):this.rightSource.getValue(C,_));let c=(0,Ti.checkType)(r,"conditional_function_call");if(c)throw c;let d=(0,Ti.checkChildLength)(r,3);if(d)throw d;try{this.predicate=new m3(r.children[0],l),this.leftSource=new Z1.Source(r.children[1],l),this.rightSource=new Z1.Source(r.children[2],l)}catch(C){throw C}}};G1.ConditionalFunctionCall=p3;var m3=class{constructor(r,l){this.eval=(_,m)=>{let A=this.leftSource.getValue(_,m);if(A.isErr())return(0,jt.err)(A.error);let P=this.rightSource.getValue(_,m);if(P.isErr())return(0,jt.err)(P.error);let y=A.value.getArity(),S=P.value.getArity();if(!y.isCell())return(0,jt.err)(Error("Can only use comparison operator on a single cell. Left side is not a cell."));if(!S.isCell())return(0,jt.err)(Error("Can only use comparison operator on a single cell. Right side is not a cell."));let V=A.value.getAsNumber(0,0),M=P.value.getAsNumber(0,0);switch(this.operator){case">":return(0,jt.ok)(V.greaterThan(M));case">=":return(0,jt.ok)(V.greaterThanOrEqualTo(M));case"<":return(0,jt.ok)(V.lessThan(M));case"<=":return(0,jt.ok)(V.lessThanOrEqualTo(M));case"==":return(0,jt.ok)(V.equals(M));case"!=":return(0,jt.ok)(!V.equals(M));default:return(0,jt.err)(Error("Invalid conditional operator: "+this.operator))}};let c=(0,Ti.checkType)(r,"predicate");if(c)throw c;let d=(0,Ti.checkChildLength)(r,3);if(d)throw d;let C=(0,Ti.checkType)(r.children[1],"conditional_operator");if(C)throw C;this.operator=r.children[1].text;try{this.leftSource=new Z1.Source(r.children[0],l),this.rightSource=new Z1.Source(r.children[2],l)}catch(_){throw _}}}});var yl=we(V1=>{"use strict";Object.defineProperty(V1,"__esModule",{value:!0});V1.Constant=void 0;var N9=Xt(),L9=$t(),O9=Fn(),w3=class{constructor(r,l){let c=(0,L9.checkType)(r,"real","float");if(c)throw c;let d=r.text[0]==="-"?-1:1;r.type==="real"?this.value=d*parseInt(r.children[0].text):this.value=d*parseFloat(r.children[0].text+"."+r.children[1].text)}getValue(r,l){return(0,N9.ok)(new O9.Value([[this.value.toString()]]))}};V1.Constant=w3});var v3=we(Un=>{"use strict";Object.defineProperty(Un,"__esModule",{value:!0});Un.AbsoluteColumn=Un.Column=Un.newColumn=void 0;var kn=Xt(),Ri=$t(),S9=Fn(),P9=(s,r)=>{try{switch(s.type){case"relative_column":return(0,kn.ok)(new C3(s,r));case"absolute_column":return(0,kn.ok)(new K1(s,r));default:return(0,kn.err)(new Error(`Formula element '${s.text}' is a ${s.type} but expected an relatve_column or absolute_column in this position.`))}}catch(l){return(0,kn.err)(l)}};Un.newColumn=P9;var xi=class{constructor(){this.getValue=(r,l)=>{var c;let d=((c=r.getCellAt(l.row,this.getIndex(l)))===null||c===void 0?void 0:c.toText())||"";return(0,kn.ok)(new S9.Value([[d]]))}}};Un.Column=xi;var C3=class extends xi{constructor(r,l){super(),this.getIndex=_=>_.column+this.offset,this.getAbsoluteIndex=()=>(0,kn.err)(Ri.errRelativeReferenceIndex);let c=(0,Ri.checkType)(r,"relative_column");if(c)throw c;let d=(0,Ri.checkChildLength)(r,1);if(d)throw d;let C=r.text[1]==="-"?-1:1;this.offset=C*parseInt(r.children[0].text)}},K1=class extends xi{constructor(r,l){super(),this.getIndex=C=>this.index,this.getAbsoluteIndex=()=>(0,kn.ok)(this.index);let c=-1,d="";switch(r.children.length){case 0:d=r.text[1];break;case 1:let C=(0,Ri.checkType)(r.children[0],"int");if(C)throw(0,kn.err)(C);c=parseInt(r.children[0].text);break;default:throw new Error(`Formula element '${r.text}' is a ${r.type} but expected a 'absolute_column' in this position.`)}switch(d){case"":break;case"<":c=1;break;case">":c=l.getWidth();break;default:throw new Error(`Invalid column symbol '${d}'`)}if(c===0)throw Ri.errIndex0;this.index=c-1}};Un.AbsoluteColumn=K1});var b3=we(Hn=>{"use strict";Object.defineProperty(Hn,"__esModule",{value:!0});Hn.AbsoluteRow=Hn.Row=Hn.newRow=void 0;var qn=Xt(),yi=$t(),I9=Fn(),W9=(s,r)=>{try{switch(s.type){case"relative_row":return(0,qn.ok)(new _3(s,r));case"absolute_row":return(0,qn.ok)(new Y1(s,r));default:return(0,qn.err)(new Error(`Formula element '${s.text}' is a ${s.type} but expected an relatve_row or absolute_row in this position.`))}}catch(l){return(0,qn.err)(l)}};Hn.newRow=W9;var Ni=class{constructor(){this.getValue=(r,l)=>{var c;let d=((c=r.getCellAt(this.getIndex(l),l.column))===null||c===void 0?void 0:c.toText())||"";return(0,qn.ok)(new I9.Value([[d]]))}}};Hn.Row=Ni;var _3=class extends Ni{constructor(r,l){super(),this.getIndex=_=>_.row+this.offset,this.getAbsoluteIndex=()=>(0,qn.err)(yi.errRelativeReferenceIndex);let c=(0,yi.checkType)(r,"relative_row");if(c)throw c;let d=(0,yi.checkChildLength)(r,1);if(d)throw d;let C=r.text[1]==="-"?-1:1;this.offset=C*parseInt(r.children[0].text)}},Y1=class extends Ni{constructor(r,l){super(),this.getIndex=C=>this.index,this.getAbsoluteIndex=()=>(0,qn.ok)(this.index);let c=-1,d="";switch(r.children.length){case 0:d=r.text[1];break;case 1:let C=(0,yi.checkType)(r.children[0],"int");if(C)throw(0,qn.err)(C);c=parseInt(r.children[0].text);break;default:throw new Error(`Formula element '${r.text}' is a ${r.type} but expected a 'absolute_row' in this position.`)}switch(d){case"":break;case"<":c=1;break;case">":c=l.getHeight()-1;break;case"I":c=2;break;default:throw new Error(`Invalid row symbol '${d}'`)}if(c===0)throw yi.errIndex0;c===1?this.index=0:this.index=c}};Hn.AbsoluteRow=Y1});var T3=we(J1=>{"use strict";Object.defineProperty(J1,"__esModule",{value:!0});J1.Reference=void 0;var M9=Xt(),E3=$t(),D9=v3(),F9=Fn(),k9=b3(),A3=class{constructor(r,l){this.getValue=(d,C)=>{var _;let m={row:this.row?this.row.getIndex(C):C.row,column:this.column?this.column.getIndex(C):C.column},A=((_=d.getCellAt(m.row,m.column))===null||_===void 0?void 0:_.toText())||"";return(0,M9.ok)(new F9.Value([[A]]))};let c=(0,E3.checkType)(r,"source_reference","absolute_reference","relative_reference");if(c)throw c;for(let d=0;d{"use strict";Object.defineProperty(Q1,"__esModule",{value:!0});Q1.Range=void 0;var X1=Xt(),Mr=$t(),Nl=T3(),U9=Fn(),cr=Wr(),R3=class{constructor(r,l){this.getValue=(P,y)=>{let S=this.startColumn?this.startColumn.getIndex(y):y.column,V=this.endColumn?this.endColumn.getIndex(y):S,M=this.startRow?this.startRow.getIndex(y):y.row,Y=this.endRow?this.endRow.getIndex(y):y.row;return(0,X1.ok)(new U9.Value((0,cr.map)((0,cr.range)(M,Y+1),se=>(0,cr.map)((0,cr.range)(S,V+1),ge=>{var D;return((D=P.getCellAt(se,ge))===null||D===void 0?void 0:D.toText())||""}))))},this.asCells=()=>{if(!this.startColumn||!this.startRow||!this.endRow)return(0,X1.err)(new Error("A range used as a desintation must define rows and cells"));let P=this.endColumn;P||(P=this.startColumn);let y=this.startRow.getAbsoluteIndex(),S=this.endRow.getAbsoluteIndex(),V=this.startColumn.getAbsoluteIndex(),M=P.getAbsoluteIndex();if(y.isErr()||S.isErr()||V.isErr()||M.isErr())return(0,X1.err)(new Error("A relative range can not be used in a formula destination"));let Y=Math.min(y.value,S.value),se=Math.max(y.value,S.value),ge=Math.min(V.value,M.value),D=Math.max(V.value,M.value);return(0,X1.ok)((0,cr.flatMap)((0,cr.range)(Y,se+1),$=>(0,cr.range)(ge,D+1).map(U=>({row:$,column:U}))))};let c=(0,Mr.checkType)(r,"range");if(c)throw c;let d=(0,Mr.checkChildLength)(r,2);if(d)throw d;let C=r.children[0],_=r.children[1];if(c=(0,Mr.checkType)(C,"source_reference"),c||(c=(0,Mr.checkType)(_,"source_reference"),c))throw c;if(d=(0,Mr.checkChildLength)(C,1),d||(d=(0,Mr.checkChildLength)(_,1),d))throw d;let m=new Nl.Reference(C.children[0],l),A=new Nl.Reference(_.children[0],l);if(m.row&&!A.row||A.row&&!m.row)throw new Error("Range must use references of the same kind");if(!m.row&&!m.column)throw console.log(m),new Error("Range must have a row or a column defined");m.row&&(this.startRow=m.row),m.column&&(this.startColumn=m.column),A.row&&(this.endRow=A.row),A.column?this.endColumn=A.column:this.endColumn=m.column}};Q1.Range=R3});var Pl=we(Zt=>{"use strict";Object.defineProperty(Zt,"__esModule",{value:!0});Zt.RangeDestination=Zt.CellDestination=Zt.ColumnDestination=Zt.RowDestination=Zt.newDestination=void 0;var Pt=Xt(),wt=$t(),Ll=v3(),q9=x3(),Ol=b3(),Sl=Wr(),H9=(s,r,l)=>{let c=(0,wt.checkType)(s,"destination");if(c)return(0,Pt.err)(c);let d=(0,wt.checkChildLength)(s,1);if(d)return(0,Pt.err)(d);let C=s.children[0];if(C.type==="range")return(0,Pt.ok)(new no(C,r,l));try{switch(C.children.length){case 2:return(0,Pt.ok)(new to(C,r,l));case 1:let _=C.children[0];if(_.type==="absolute_row")return(0,Pt.ok)(new j1(C,r,l));if(_.type==="absolute_column")return(0,Pt.ok)(new eo(C,r,l));default:return(0,Pt.err)(new Error("Unexpected destination type "+C.type))}}catch(_){return _===wt.errIndex0?(0,Pt.err)(new Error("Index 0 may not be used in a destination")):(0,Pt.err)(_)}};Zt.newDestination=H9;var j1=class{constructor(r,l,c){this.merge=(m,A)=>{let P=(0,Sl.range)(0,A.getWidth()).map(y=>({row:this.row.index,column:y}));return ro(m,A,P,this.formatter)},this.formatter=c;let d=(0,wt.checkType)(r,"absolute_reference");if(d)throw d;let C=(0,wt.checkChildLength)(r,1);if(C)throw C;let _=r.children[0];try{this.row=new Ol.AbsoluteRow(_,l)}catch(m){throw m}}};Zt.RowDestination=j1;var eo=class{constructor(r,l,c){this.merge=(m,A)=>{let P=(0,Sl.range)(2,A.getHeight()).map(y=>({row:y,column:this.column.index}));return ro(m,A,P,this.formatter)},this.formatter=c;let d=(0,wt.checkType)(r,"absolute_reference");if(d)throw d;let C=(0,wt.checkChildLength)(r,1);if(C)throw C;let _=r.children[0];try{this.column=new Ll.AbsoluteColumn(_,l)}catch(m){throw m}}};Zt.ColumnDestination=eo;var to=class{constructor(r,l,c){this.merge=(A,P)=>{let y={row:this.row.index,column:this.column.index};return ro(A,P,[y],this.formatter)},this.formatter=c;let d=(0,wt.checkType)(r,"absolute_reference");if(d)throw d;let C=(0,wt.checkChildLength)(r,2);if(C)throw C;let _=r.children[0],m=r.children[1];try{this.row=new Ol.AbsoluteRow(_,l),this.column=new Ll.AbsoluteColumn(m,l)}catch(A){throw A}}};Zt.CellDestination=to;var no=class{constructor(r,l,c){this.merge=(_,m)=>this.range.asCells().andThen(A=>ro(_,m,A,this.formatter)),this.formatter=c;let d=(0,wt.checkType)(r,"range");if(d)throw d;let C=(0,wt.checkChildLength)(r,2);if(C)throw C;r.children.forEach(_=>{let m=(0,wt.checkType)(_,"source_reference");if(m)throw m;let A=(0,wt.checkChildLength)(_,1);if(A)throw A;if(m=(0,wt.checkType)(_.children[0],"absolute_reference"),m)throw m}),this.range=new q9.Range(r,l)}};Zt.RangeDestination=no;var ro=(s,r,l,c)=>l.reduce((d,C)=>d.andThen(_=>s.getValue(_,C).andThen(m=>(0,Pt.ok)(m.toString())).andThen(m=>(0,Pt.ok)(m.trim()===""?"0":m)).andThen(m=>(0,Pt.ok)(_.setCellAt(C.row,C.column,c.format(m))))),(0,Pt.ok)(r))});var Il=we(Dr=>{"use strict";Object.defineProperty(Dr,"__esModule",{value:!0});Dr.DisplayDirective=Dr.DefaultFormatter=void 0;var fr=$t(),y3=class{constructor(){this.format=r=>typeof r=="string"?r:r.toString()}};Dr.DefaultFormatter=y3;var N3=class{constructor(r){this.format=m=>{let A=typeof m=="string"?parseFloat(m):m;if(this.displayAsDatetime){let P=new Date(A),y=ge=>`0${ge}`.slice(-2),S=P.getFullYear(),V=y(P.getMonth()+1),M=y(P.getDate()),Y=y(P.getHours()),se=y(P.getMinutes());return`${S}-${V}-${M} ${Y}:${se}`}if(this.displayAsHourMinute){let P=A<0?"-":"",y=Math.floor(Math.abs(A)/6e4),S=Y=>`0${Y}`.slice(-2),V=S(Math.floor(y/60)),M=S(y%60);return`${P}${V}:${M}`}return A.toFixed(this.decimalLength)};let l=(0,fr.checkType)(r,"display_directive");if(l)throw l;let c=(0,fr.checkChildLength)(r,1);if(c)throw c;let d=r.children[0];if(l=(0,fr.checkType)(d,"display_directive_option"),l)throw l;if(c=(0,fr.checkChildLength)(d,1),c)throw c;let C=d.children[0];if(l=(0,fr.checkType)(C,"formatting_directive","datetime_directive","hourminute_directive"),l)throw l;if(this.displayAsDatetime=C.type==="datetime_directive",this.displayAsHourMinute=C.type==="hourminute_directive",this.displayAsDatetime||this.displayAsHourMinute){this.decimalLength=-1;return}if(c=(0,fr.checkChildLength)(C,1),c)throw c;let _=C.children[0];if(l=(0,fr.checkType)(_,"int"),l)throw l;this.decimalLength=parseInt(_.text)}};Dr.DisplayDirective=N3});var Wl=we(Fr=>{"use strict";var B9=Fr&&Fr.__importDefault||function(s){return s&&s.__esModule?s:{default:s}};Object.defineProperty(Fr,"__esModule",{value:!0});Fr.SingleParamFunctionCall=void 0;var z9=Xt(),L3=$t(),$9=Ai(),O3=Fn(),Z9=B9(f3()),S3=class{constructor(r,l){this.getValue=(m,A)=>this.param.getValue(m,A).andThen(P=>(0,z9.ok)(this.op(P)));let c=(0,L3.checkType)(r,"single_param_function_call");if(c)throw c;let d=(0,L3.checkChildLength)(r,2);if(d)throw d;let C=(0,L3.checkType)(r.children[0],"single_param_function");if(C)throw C;let _=r.children[0].text;switch(_){case"sum":this.op=G9;break;case"mean":this.op=V9;break;default:throw Error("Unknown single param function call: "+_)}this.param=new $9.Source(r.children[1],l)}};Fr.SingleParamFunctionCall=S3;var G9=s=>{let r=s.val.reduce((l,c)=>c.reduce((d,C)=>(0,O3.FloatOrMilliseconds)(C).add(d),l),new Z9.default(0));return new O3.Value([[r.toString()]])},V9=s=>{let{total:r,count:l}=s.val.reduce(({total:c,count:d},C)=>C.reduce(({total:_,count:m},A)=>({total:_+ +A,count:m+1}),{total:c,count:d}),{total:0,count:0});return new O3.Value([[(r/l).toString()]])}});var oo=we(io=>{"use strict";Object.defineProperty(io,"__esModule",{value:!0});io.TokenError=void 0;var P3=class extends Error{constructor(r,l){if(super(r),this.message=r,this.token=l,l&&l.errors)l.errors.push(this);else throw this}inspect(){return"SyntaxError: "+this.message}};io.TokenError=P3});var Li=we(It=>{"use strict";Object.defineProperty(It,"__esModule",{value:!0});It.Parser=It.findRuleByName=It.parseRuleName=It.escapeRegExp=It.readToken=void 0;var Ml=/^[A-Z0-9_]+$/,Dl=/(\?|\+|\*)$/,Fl=/^(@|&|!)/,so="WS",lo=oo();function I3(s,r){let l=r.exec(s);return l&&l.index==0?l[0].length==0&&r.source.length>0?null:{type:null,text:l[0],rest:s.substr(l[0].length),start:0,end:l[0].length-1,fullText:l[0],errors:[],children:[],parent:null}:null}It.readToken=I3;function kl(s){return s.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}It.escapeRegExp=kl;function Ul(s){s.rest="",s.children&&s.children.forEach(r=>Ul(r))}function ql(s,r){s.start+=r,s.end+=r,s.children&&s.children.forEach(l=>ql(l,s.start))}function Hl(s,r){r.errors&&r.errors.length&&r.errors.forEach(l=>s.push(l)),r.children&&r.children.forEach(l=>Hl(s,l))}function hr(s){let r=Dl.exec(s),l=Fl.exec(s),c=r&&r[0]||"",d=l&&l[0]||"",C={raw:s,name:s.replace(Dl,"").replace(Fl,""),isOptional:c=="?"||c=="*",allowRepetition:c=="+"||c=="*",atLeastOne:c=="+",lookupPositive:d=="&",lookupNegative:d=="!",pinned:d=="@",lookup:!1,isLiteral:!1};return C.isLiteral=C.name[0]=="'"||C.name[0]=='"',C.lookup=C.lookupNegative||C.lookupPositive,C}It.parseRuleName=hr;function Bl(s,r){let l=hr(s);return r.cachedRules[l.name]||null}It.findRuleByName=Bl;function W3(s,r){if(s.children){let l=s.children.filter(c=>c.type&&r.test(c.type));for(let c=0;cW3(c,r))}}var K9=["EOF"],uo=class{constructor(r,l){this.grammarRules=r,this.options=l,this.cachedRules={},this.debug=l?l.debug===!0:!1;let c=[],d=[];if(r.forEach(C=>{let _=hr(C.name);if(_.name in this.cachedRules){c.push("Duplicated rule "+_.name);return}else this.cachedRules[_.name]=C;if(!C.bnf||!C.bnf.length){let m="Missing rule content, rule: "+C.name;c.indexOf(m)==-1&&c.push(m)}else C.bnf.forEach(m=>{if(typeof m[0]=="string"&&hr(m[0]).name==C.name){let P="Left recursion is not allowed, rule: "+C.name;c.indexOf(P)==-1&&c.push(P)}m.forEach(A=>{if(typeof A=="string"){let P=hr(A);!P.isLiteral&&d.indexOf(P.name)==-1&&K9.indexOf(P.name)==-1&&d.push(P.name)}})});so==C.name&&(C.implicitWs=!1),C.implicitWs&&d.indexOf(so)==-1&&d.push(so),C.recover&&d.indexOf(C.recover)==-1&&d.push(C.recover)}),d.forEach(C=>{C in this.cachedRules||c.push("Missing rule "+C)}),c.length)throw new Error(c.join(` +`))}getAST(r,l){l||(l=this.grammarRules.filter(d=>!d.fragment&&d.name.indexOf("%")!=0)[0].name);let c=this.parse(r,l);if(c){Hl(c.errors,c),ql(c,0),W3(c,/^%/),(!this.options||!this.options.keepUpperRules)&&W3(c,Ml);let d=c.rest;d&&new lo.TokenError(`Unexpected end of input: +`+d,c),Ul(c),c.rest=d}return c}emitSource(){return"CANNOT EMIT SOURCE FROM BASE Parser"}parse(r,l,c=0){let d=null,C=hr(l),_,m=this.debug&&!Ml.test(C.name);m&&console.log(new Array(c).join("\u2502 ")+"Trying to get "+l+" from "+JSON.stringify(r.split(` +`)[0]));let A=C.name,P=Bl(C.name,this);if(C.name=="EOF"){if(r.length)return null;if(r.length==0)return{type:"EOF",text:"",rest:"",start:0,end:0,fullText:"",errors:[],children:[],parent:null}}try{if(!P&&C.isLiteral){let y=C.name.trim();if(y.startsWith('"')?y=JSON.parse(y):y.startsWith("'")&&(y=y.replace(/^'(.+)'$/,"$1").replace(/\\'/g,"'")),y==="")return{type:"%%EMPTY%%",text:"",rest:r,start:0,end:0,fullText:"",errors:[],children:[],parent:null};_=new RegExp(kl(y)),A=null}}catch(y){return y instanceof ReferenceError&&console.error(y),null}if(_){let y=I3(r,_);if(y)return y.type=A,y}else{let y=P.bnf;y instanceof Array&&y.forEach(S=>{if(d)return;let V=null,M={type:C.name,text:"",children:[],end:0,errors:[],fullText:"",parent:null,start:0,rest:r};P.fragment&&(M.fragment=!0);let Y=r,se=0,ge=S.length>0,D=!1;for(let $=0;${J.start+=se,J.end+=se,J.parent=M,M.children.push(J)}):(K.parent=M,M.children.push(K))),U.lookup&&(K.lookup=!0),m&&console.log(new Array(c+1).join("\u2502 ")+"\u2514\u2500 "+K.type+" "+JSON.stringify(K.text)),!U.lookup&&!K.lookup&&(M.text=M.text+K.text,M.end=M.text.length,Y=Y.substr(K.text.length),se+=K.text.length),M.rest=Y}while(K&&U.allowRepetition&&Y.length&&!K.lookup)}else{let U=I3(Y,S[$]);if(!U)return;m&&console.log(new Array(c+1).join("\u2502 ")+"\u2514> "+JSON.stringify(U.text)+S[$].source),D=!0,U.start+=se,U.end+=se,M.text=M.text+U.text,M.end=M.text.length,Y=Y.substr(U.text.length),se+=U.text.length,M.rest=Y}D&&(d=M,m&&console.log(new Array(c).join("\u2502 ")+"\u251C<\u2500\u2534< PUSHING "+d.type+" "+JSON.stringify(d.text)))}),d&&P.simplifyWhenOneChildren&&d.children.length==1&&(d=d.children[0])}return d||m&&console.log(l+" NOT RESOLVED FROM "+r),d}parseRecovery(r,l,c){if(r.recover&&l.length){let d=this.debug;d&&console.log(new Array(c+1).join("\u2502 ")+"Trying to recover until token "+r.recover+" from "+JSON.stringify(l.split(` +`)[0]+l.split(` +`)[1]));let C={type:"SyntaxError",text:"",children:[],end:0,errors:[],fullText:"",parent:null,start:0,rest:""},_;do if(_=this.parse(l,r.recover,c+1),_){new lo.TokenError('Unexpected input: "'+C.text+`" Expecting: ${r.name}`,C);break}else C.text=C.text+l[0],C.end=C.text.length,l=l.substr(1);while(!_&&l.length>0);if(C.text.length>0&&_)return d&&console.log(new Array(c+1).join("\u2502 ")+"Recovered text: "+JSON.stringify(C.text)),C}return null}};It.Parser=uo;It.default=uo});var zl=we(ao=>{"use strict";Object.defineProperty(ao,"__esModule",{value:!0});ao.findChildrenByType=void 0;function Y9(s,r){return s.children?s.children.filter(l=>l.type==r):[]}ao.findChildrenByType=Y9});var $l=we(F3=>{"use strict";Object.defineProperty(F3,"__esModule",{value:!0});var Bn=zl(),M3=Li(),D3;(function(s){s.RULES=[{name:"syntax",bnf:[["RULE_EOL*","rule+"]]},{name:"rule",bnf:[['" "*','"<"',"rule-name",'">"','" "*','"::="',"firstExpression","otherExpression*",'" "*',"RULE_EOL+",'" "*']]},{name:"firstExpression",bnf:[['" "*',"list"]]},{name:"otherExpression",bnf:[['" "*','"|"','" "*',"list"]]},{name:"RULE_EOL",bnf:[['"\\r"'],['"\\n"']]},{name:"list",bnf:[["term",'" "*',"list"],["term"]]},{name:"term",bnf:[["literal"],['"<"',"rule-name",'">"']]},{name:"literal",bnf:[[`'"'`,"RULE_CHARACTER1*",`'"'`],[`"'"`,"RULE_CHARACTER2*",`"'"`]]},{name:"RULE_CHARACTER",bnf:[['" "'],["RULE_LETTER"],["RULE_DIGIT"],["RULE_SYMBOL"]]},{name:"RULE_LETTER",bnf:[['"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"'],['"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"']]},{name:"RULE_DIGIT",bnf:[['"0"'],['"1"'],['"2"'],['"3"'],['"4"'],['"5"'],['"6"'],['"7"'],['"8"'],['"9"']]},{name:"RULE_SYMBOL",bnf:[['"-"'],['"_"'],['"!"'],['"#"'],['"$"'],['"%"'],['"&"'],['"("'],['")"'],['"*"'],['"+"'],['","'],['"-"'],['"."'],['"/"'],['":"'],['";"'],['"<"'],['"="'],['">"'],['"?"'],['"@"'],['"["'],['"\\"'],['"]"'],['"^"'],['"_"'],['"`"'],['"{"'],['"|"'],['"}"'],['"~"']]},{name:"RULE_CHARACTER1",bnf:[["RULE_CHARACTER"],[`"'"`]]},{name:"RULE_CHARACTER2",bnf:[["RULE_CHARACTER"],[`'"'`]]},{name:"rule-name",bnf:[["RULE_LETTER","RULE_CHAR*"]]},{name:"RULE_CHAR",bnf:[["RULE_LETTER"],["RULE_DIGIT"],['"_"'],['"-"']]}],s.defaultParser=new M3.Parser(s.RULES,{debug:!1});function r(C){let _=Bn.findChildrenByType(C,"term").map(m=>Bn.findChildrenByType(m,"literal").concat(Bn.findChildrenByType(m,"rule-name"))[0].text);return Bn.findChildrenByType(C,"list").forEach(m=>{_=_.concat(r(m))}),_}function l(C,_=s.defaultParser){let m=_.getAST(C);if(!m)throw new Error("Could not parse "+C);if(m.errors&&m.errors.length)throw m.errors[0];let P=Bn.findChildrenByType(m,"rule").map(y=>{let S=Bn.findChildrenByType(y,"rule-name")[0].text,V=Bn.findChildrenByType(y,"firstExpression").concat(Bn.findChildrenByType(y,"otherExpression")),M=[];return V.forEach(Y=>{M.push(r(Y))}),{name:S,bnf:M}});return P.some(y=>y.name=="EOL")||P.push({name:"EOL",bnf:[['"\\r\\n"','"\\r"','"\\n"']]}),P}s.getRules=l;function c(C,_=s.defaultParser){return l(C.join(""),_)}s.Transform=c;class d extends M3.Parser{constructor(_,m){let A=m&&m.debugRulesParser===!0?new M3.Parser(s.RULES,{debug:!0}):s.defaultParser;super(l(_,A),m),this.source=_}emitSource(){return this.source}}s.Parser=d})(D3||(D3={}));F3.default=D3});var Zl=we(U3=>{"use strict";Object.defineProperty(U3,"__esModule",{value:!0});var Oi=Li(),k3;(function(s){s.RULES=[{name:"Grammar",bnf:[["RULE_S*","%Atomic*","EOF"]]},{name:"%Atomic",bnf:[["Production","RULE_S*"]],fragment:!0},{name:"Production",bnf:[["NCName","RULE_S*",'"::="',"RULE_WHITESPACE*","Choice","RULE_WHITESPACE*","RULE_EOL+","RULE_S*"]]},{name:"NCName",bnf:[[/[a-zA-Z][a-zA-Z_0-9]*/]]},{name:"Choice",bnf:[["SequenceOrDifference","%_Choice_1*"]],fragment:!0},{name:"%_Choice_1",bnf:[["RULE_WHITESPACE*",'"|"',"RULE_WHITESPACE*","SequenceOrDifference"]],fragment:!0},{name:"SequenceOrDifference",bnf:[["Item","RULE_WHITESPACE*","%_Item_1?"]]},{name:"%_Item_1",bnf:[["Minus","Item"],["Item*"]],fragment:!0},{name:"Minus",bnf:[['"-"']]},{name:"Item",bnf:[["RULE_WHITESPACE*","%Primary","PrimaryDecoration?"]],fragment:!0},{name:"PrimaryDecoration",bnf:[['"?"'],['"*"'],['"+"']]},{name:"DecorationName",bnf:[['"ebnf://"',/[^\x5D#]+/]]},{name:"%Primary",bnf:[["NCName"],["StringLiteral"],["CharCode"],["CharClass"],["SubItem"]],fragment:!0},{name:"SubItem",bnf:[['"("',"RULE_WHITESPACE*","Choice","RULE_WHITESPACE*",'")"']]},{name:"StringLiteral",bnf:[[`'"'`,/[^"]*/,`'"'`],[`"'"`,/[^']*/,`"'"`]],pinned:1},{name:"CharCode",bnf:[['"#x"',/[0-9a-zA-Z]+/]]},{name:"CharClass",bnf:[["'['","'^'?","%RULE_CharClass_1+",'"]"']]},{name:"%RULE_CharClass_1",bnf:[["CharCodeRange"],["CharRange"],["CharCode"],["RULE_Char"]],fragment:!0},{name:"RULE_Char",bnf:[[/\x09/],[/\x0A/],[/\x0D/],[/[\x20-\x5c]/],[/[\x5e-\uD7FF]/],[/[\uE000-\uFFFD]/]]},{name:"CharRange",bnf:[["RULE_Char",'"-"',"RULE_Char"]]},{name:"CharCodeRange",bnf:[["CharCode",'"-"',"CharCode"]]},{name:"RULE_WHITESPACE",bnf:[["%RULE_WHITESPACE_CHAR*"],["Comment","RULE_WHITESPACE*"]]},{name:"RULE_S",bnf:[["RULE_WHITESPACE","RULE_S*"],["RULE_EOL","RULE_S*"]]},{name:"%RULE_WHITESPACE_CHAR",bnf:[[/\x09/],[/\x20/]],fragment:!0},{name:"Comment",bnf:[['"/*"',"%RULE_Comment_Body*",'"*/"']]},{name:"%RULE_Comment_Body",bnf:[['!"*/"',/[^*]/]],fragment:!0},{name:"RULE_EOL",bnf:[[/\x0D/,/\x0A/],[/\x0A/],[/\x0D/]]},{name:"Link",bnf:[["'['","Url","']'"]]},{name:"Url",bnf:[[/[^\x5D:/?#]/,'"://"',/[^\x5D#]+/,"%Url1?"]]},{name:"%Url1",bnf:[['"#"',"NCName"]],fragment:!0}],s.defaultParser=new Oi.Parser(s.RULES,{debug:!1});let r=/^(!|&)/,l=/(\?|\+|\*)$/,c=/^%/;function d(D,$){if(typeof D=="string"){if(r.test(D))return"";if(c.test(D)){let K=l.exec(D),te=K?K[0]+" ":"";return C(D,$)?m(D,$)+te:"("+m(D,$)+")"+te}return D}else return D.source.replace(/\\(?:x|u)([a-zA-Z0-9]+)/g,"#x$1").replace(/\[\\(?:x|u)([a-zA-Z0-9]+)-\\(?:x|u)([a-zA-Z0-9]+)\]/g,"[#x$1-#x$2]")}function C(D,$){let U=Oi.findRuleByName(D,$);return U&&U.bnf.length==1&&U.bnf[0].length==1&&(U.bnf[0][0]instanceof RegExp||U.bnf[0][0][0]=='"'||U.bnf[0][0][0]=="'")}function _(D,$){return D.map(U=>d(U,$)).join(" ")}function m(D,$){let U=Oi.findRuleByName(D,$);return U?U.bnf.map(K=>_(K,$)).join(" | "):"RULE_NOT_FOUND {"+D+"}"}function A(D){let $=[];return D.grammarRules.forEach(U=>{if(!/^%/.test(U.name)){let K=U.recover?" /* { recoverUntil="+U.recover+" } */":"";$.push(U.name+" ::= "+m(U.name,D)+K)}}),$.join(` +`)}s.emit=A;let P=0;function y(D,$){throw console.log("reberia restar "+$+" a "+D),new Error("Difference not supported yet")}function S(D){return new RegExp(D.replace(/#x([a-zA-Z0-9]{4})/g,"\\u$1").replace(/#x([a-zA-Z0-9]{3})/g,"\\u0$1").replace(/#x([a-zA-Z0-9]{2})/g,"\\x$1").replace(/#x([a-zA-Z0-9]{1})/g,"\\x0$1"))}function V(D,$,U){let K=null,te=[];return $.children.forEach((J,Q)=>{J.type=="Minus"&&y(K,J);let G=$.children[Q+1];G=G&&G.type=="PrimaryDecoration"&&G.text||"";let Ce="";switch(J.type){case"SubItem":let Pe="%"+(U+P++);M(D,J,Pe),te.push(Ce+Pe+G);break;case"NCName":case"StringLiteral":te.push(Ce+J.text+G);break;case"CharCode":case"CharClass":if(G||Ce){let ot={name:"%"+(U+P++),bnf:[[S(J.text)]]};D.push(ot),te.push(Ce+ot.name+G)}else te.push(S(J.text));break;case"PrimaryDecoration":break;default:throw new Error(" HOW SHOULD I PARSE THIS? "+J.type+" -> "+JSON.stringify(J.text))}K=J}),te}function M(D,$,U){let K=$.children.filter(Q=>Q.type=="SequenceOrDifference").map(Q=>V(D,Q,U)),te={name:U,bnf:K},J=null;K.forEach(Q=>{J=J||Q.recover,delete Q.recover}),U.indexOf("%")==0&&(te.fragment=!0),J&&(te.recover=J),D.push(te)}function Y(D,$=s.defaultParser){let U=$.getAST(D);if(!U)throw new Error("Could not parse "+D);if(U.errors&&U.errors.length)throw U.errors[0];let K=[];return U.children.filter(te=>te.type=="Production").map(te=>{let J=te.children.filter(Q=>Q.type=="NCName")[0].text;M(K,te,J)}),K}s.getRules=Y;function se(D,$=s.defaultParser){return Y(D.join(""),$)}s.Transform=se;class ge extends Oi.Parser{constructor($,U){let K=U&&U.debugRulesParser===!0?new Oi.Parser(s.RULES,{debug:!0}):s.defaultParser;super(Y($,K),U)}emitSource(){return A(this)}}s.Parser=ge})(k3||(k3={}));U3.default=k3});var Gl=we(H3=>{"use strict";Object.defineProperty(H3,"__esModule",{value:!0});var co=oo(),kr=Li(),q3;(function(s){s.RULES=[{name:"Grammar",bnf:[["RULE_S*","Attributes?","RULE_S*","%Atomic*","EOF"]]},{name:"%Atomic",bnf:[["Production","RULE_S*"]],fragment:!0},{name:"Production",bnf:[["NCName","RULE_S*",'"::="',"RULE_WHITESPACE*","%Choice","RULE_WHITESPACE*","Attributes?","RULE_EOL+","RULE_S*"]]},{name:"NCName",bnf:[[/[a-zA-Z][a-zA-Z_0-9]*/]]},{name:"Attributes",bnf:[['"{"',"Attribute","%Attributes*","RULE_S*",'"}"']]},{name:"%Attributes",bnf:[["RULE_S*",'","',"Attribute"]],fragment:!0},{name:"Attribute",bnf:[["RULE_S*","NCName","RULE_WHITESPACE*",'"="',"RULE_WHITESPACE*","AttributeValue"]]},{name:"AttributeValue",bnf:[["NCName"],[/[1-9][0-9]*/]]},{name:"%Choice",bnf:[["SequenceOrDifference","%_Choice_1*"]],fragment:!0},{name:"%_Choice_1",bnf:[["RULE_S*",'"|"',"RULE_S*","SequenceOrDifference"]],fragment:!0},{name:"SequenceOrDifference",bnf:[["%Item","RULE_WHITESPACE*","%_Item_1?"]]},{name:"%_Item_1",bnf:[["Minus","%Item"],["%Item*"]],fragment:!0},{name:"Minus",bnf:[['"-"']]},{name:"%Item",bnf:[["RULE_WHITESPACE*","PrimaryPreDecoration?","%Primary","PrimaryDecoration?"]],fragment:!0},{name:"PrimaryDecoration",bnf:[['"?"'],['"*"'],['"+"']]},{name:"PrimaryPreDecoration",bnf:[['"&"'],['"!"'],['"~"']]},{name:"%Primary",bnf:[["NCName"],["StringLiteral"],["CharCode"],["CharClass"],["SubItem"]],fragment:!0},{name:"SubItem",bnf:[['"("',"RULE_S*","%Choice","RULE_S*",'")"']]},{name:"StringLiteral",bnf:[[`'"'`,/[^"]*/,`'"'`],[`"'"`,/[^']*/,`"'"`]]},{name:"CharCode",bnf:[['"#x"',/[0-9a-zA-Z]+/]]},{name:"CharClass",bnf:[["'['","'^'?","%RULE_CharClass_1+",'"]"']]},{name:"%RULE_CharClass_1",bnf:[["CharCodeRange"],["CharRange"],["CharCode"],["RULE_Char"]],fragment:!0},{name:"RULE_Char",bnf:[[/\x09/],[/\x0A/],[/\x0D/],[/[\x20-\x5c]/],[/[\x5e-\uD7FF]/],[/[\uE000-\uFFFD]/]]},{name:"CharRange",bnf:[["RULE_Char",'"-"',"RULE_Char"]]},{name:"CharCodeRange",bnf:[["CharCode",'"-"',"CharCode"]]},{name:"RULE_WHITESPACE",bnf:[["%RULE_WHITESPACE_CHAR*"],["Comment","RULE_WHITESPACE*"]]},{name:"RULE_S",bnf:[["RULE_WHITESPACE","RULE_S*"],["RULE_EOL","RULE_S*"]]},{name:"%RULE_WHITESPACE_CHAR",bnf:[[/\x09/],[/\x20/]],fragment:!0},{name:"Comment",bnf:[['"/*"',"%RULE_Comment_Body*",'"*/"']]},{name:"%RULE_Comment_Body",bnf:[[/[^*]/],['"*"+',/[^/]*/]],fragment:!0},{name:"RULE_EOL",bnf:[[/\x0D/,/\x0A/],[/\x0A/],[/\x0D/]]},{name:"Link",bnf:[["'['","Url","']'"]]},{name:"Url",bnf:[[/[^\x5D:/?#]/,'"://"',/[^\x5D#]+/,"%Url1?"]]},{name:"%Url1",bnf:[['"#"',"NCName"]],fragment:!0}],s.defaultParser=new kr.Parser(s.RULES,{debug:!1});let r=/^(!|&)/,l=/(\?|\+|\*)$/,c=/^%/;function d(D,$){if(typeof D=="string"){let U=l.exec(D),K=r.exec(D),te=K?K[0]:"",J=U?U[0]+" ":"";return c.test(D)?C(D,$)?te+m(D,$)+J:te+"("+m(D,$)+")"+J:D.replace(r,te)}else return D.source.replace(/\\(?:x|u)([a-zA-Z0-9]+)/g,"#x$1").replace(/\[\\(?:x|u)([a-zA-Z0-9]+)-\\(?:x|u)([a-zA-Z0-9]+)\]/g,"[#x$1-#x$2]")}function C(D,$){let U=kr.findRuleByName(D,$);return U&&U.bnf.length==1&&U.bnf[0].length==1&&(U.bnf[0][0]instanceof RegExp||U.bnf[0][0][0]=='"'||U.bnf[0][0][0]=="'")}function _(D,$){return D.map(U=>d(U,$)).join(" ")}function m(D,$){let U=kr.findRuleByName(D,$);return U?U.bnf.map(K=>_(K,$)).join(" | "):"RULE_NOT_FOUND {"+D+"}"}function A(D){let $=[];return D.grammarRules.forEach(U=>{if(!/^%/.test(U.name)){let K=U.recover?" { recoverUntil="+U.recover+" }":"";$.push(U.name+" ::= "+m(U.name,D)+K)}}),$.join(` +`)}s.emit=A;let P=0;function y(D,$){throw console.log("reberia restar "+$+" a "+D),new Error("Difference not supported yet")}function S(D){return new RegExp(D.replace(/#x([a-zA-Z0-9]{4})/g,"\\u$1").replace(/#x([a-zA-Z0-9]{3})/g,"\\u0$1").replace(/#x([a-zA-Z0-9]{2})/g,"\\x$1").replace(/#x([a-zA-Z0-9]{1})/g,"\\x0$1"))}function V(D,$,U,K){let te=null,J=[];return $.children.forEach((Q,G)=>{Q.type=="Minus"&&y(te,Q);let Ce=$.children[G+1];Ce=Ce&&Ce.type=="PrimaryDecoration"&&Ce.text||"";let Pe="";te&&te.type=="PrimaryPreDecoration"&&(Pe=te.text);let ot=Pe=="~"?1:void 0;switch(ot&&(Pe=""),Q.type){case"SubItem":let B="%"+(U+P++);M(D,Q,B,K),J.push(Pe+B+Ce);break;case"NCName":J.push(Pe+Q.text+Ce);break;case"StringLiteral":if(Ce||Pe||!/^['"/()a-zA-Z0-9&_.:=,+*\-\^\\]+$/.test(Q.text))J.push(Pe+Q.text+Ce);else for(let Oe of Q.text.slice(1,-1))K&&K.ignoreCase=="true"&&/[a-zA-Z]/.test(Oe)?J.push(new RegExp("["+Oe.toUpperCase()+Oe.toLowerCase()+"]")):J.push(new RegExp(kr.escapeRegExp(Oe)));break;case"CharCode":case"CharClass":if(Ce||Pe){let Oe={name:"%"+(U+P++),bnf:[[S(Q.text)]],pinned:ot};D.push(Oe),J.push(Pe+Oe.name+Ce)}else J.push(S(Q.text));break;case"PrimaryPreDecoration":case"PrimaryDecoration":break;default:throw new Error(" HOW SHOULD I PARSE THIS? "+Q.type+" -> "+JSON.stringify(Q.text))}te=Q}),J}function M(D,$,U,K=void 0){let te=$.children.filter(Ce=>Ce.type=="Attributes")[0],J={};te&&te.children.forEach(Ce=>{let Pe=Ce.children.filter(ot=>ot.type=="NCName")[0].text;if(Pe in J)throw new co.TokenError("Duplicated attribute "+Pe,Ce);J[Pe]=Ce.children.filter(ot=>ot.type=="AttributeValue")[0].text});let Q=$.children.filter(Ce=>Ce.type=="SequenceOrDifference").map(Ce=>V(D,Ce,U,K||J)),G={name:U,bnf:Q};if(U.indexOf("%")==0&&(G.fragment=!0),J.recoverUntil&&(G.recover=J.recoverUntil,G.bnf.length>1))throw new co.TokenError("only one-option productions are suitable for error recovering",$);if("pin"in J){let Ce=parseInt(J.pin);if(isNaN(Ce)||(G.pinned=Ce),G.bnf.length>1)throw new co.TokenError("only one-option productions are suitable for pinning",$)}"ws"in J?G.implicitWs=J.ws!="explicit":G.implicitWs=null,G.fragment=G.fragment||J.fragment=="true",G.simplifyWhenOneChildren=J.simplifyWhenOneChildren=="true",D.push(G)}function Y(D,$=s.defaultParser){let U=$.getAST(D);if(!U)throw new Error("Could not parse "+D);if(U.errors&&U.errors.length)throw U.errors[0];let K=null,te=U.children.filter(G=>G.type=="Attributes")[0],J={};te&&te.children.forEach(G=>{let Ce=G.children.filter(Pe=>Pe.type=="NCName")[0].text;if(Ce in J)throw new co.TokenError("Duplicated attribute "+Ce,G);J[Ce]=G.children.filter(Pe=>Pe.type=="AttributeValue")[0].text}),K=J.ws=="implicit";let Q=[];return U.children.filter(G=>G.type=="Production").map(G=>{let Ce=G.children.filter(Pe=>Pe.type=="NCName")[0].text;M(Q,G,Ce)}),Q.forEach(G=>{G.implicitWs===null&&(G.implicitWs=K)}),Q}s.getRules=Y;function se(D,$=s.defaultParser){return Y(D.join(""),$)}s.Transform=se;class ge extends kr.Parser{constructor($,U){let K=U&&U.debugRulesParser===!0?new kr.Parser(s.RULES,{debug:!0}):s.defaultParser;super(Y($,K),U)}emitSource(){return A(this)}}s.Parser=ge})(q3||(q3={}));H3.default=q3});var Vl=we(Si=>{"use strict";Object.defineProperty(Si,"__esModule",{value:!0});var J9=$l();Object.defineProperty(Si,"BNF",{enumerable:!0,get:function(){return J9.default}});var X9=Zl();Object.defineProperty(Si,"W3C",{enumerable:!0,get:function(){return X9.default}});var Q9=Gl();Object.defineProperty(Si,"Custom",{enumerable:!0,get:function(){return Q9.default}})});var Kl=we(Pi=>{"use strict";Object.defineProperty(Pi,"__esModule",{value:!0});var j9=Li();Object.defineProperty(Pi,"Parser",{enumerable:!0,get:function(){return j9.Parser}});var e7=oo();Object.defineProperty(Pi,"TokenError",{enumerable:!0,get:function(){return e7.TokenError}});Pi.Grammars=Vl()});var Ai=we(en=>{"use strict";Object.defineProperty(en,"__esModule",{value:!0});en.parseFormula=en.parseAndApply=en.Source=en.Formula=void 0;var Xe=Xt(),t7=Rl(),B3=$t(),n7=xl(),Yl=yl(),r7=Pl(),Jl=Il(),i7=x3(),o7=T3(),s7=Wl(),l7=Kl(),u7=Wr(),a7=` +tblfm_line ::= "" +formula_list ::= formula ( "::" formula_list )? +formula ::= destination "=" source display_directive? + +source ::= range | source_reference | single_param_function_call | conditional_function_call | algebraic_operation | float | real +range ::= source_reference ".." source_reference +source_reference ::= absolute_reference | relative_reference +destination ::= range | absolute_reference + +relative_reference ::= (relative_row | absolute_row) (relative_column | absolute_column) | relative_row | relative_column +relative_row ::= "@" ( "-" | "+" ) int +relative_column ::= "$" ( "-" | "+" ) int + +absolute_reference ::= absolute_row absolute_column | absolute_row | absolute_column +absolute_row ::= "@" ( "I" | "<" | ">" | int ) +absolute_column ::= "$" ( "<" | ">" | int ) + +single_param_function_call ::= single_param_function "(" source ")" +single_param_function ::= "mean" | "sum" + +conditional_function_call ::= "if(" predicate "," " "? source "," " "? source ")" +predicate ::= source_without_range conditional_operator source_without_range +source_without_range ::= source_reference | single_param_function_call | conditional_function_call | algebraic_operation | float | real +conditional_operator ::= ">" | "<" | ">=" | "<=" | "==" | "!=" + +algebraic_operation ::= "(" source " "? algebraic_operator " "? source ")" +algebraic_operator ::= "+" | "-" | "*" | "/" + +display_directive ::= ";" display_directive_option +display_directive_option ::= formatting_directive | datetime_directive | hourminute_directive +formatting_directive ::= "%." int "f" +datetime_directive ::= "dt" +hourminute_directive ::= "hm" + +float ::= "-"? int "." int +real ::= "-"? int +int ::= [0-9]+ +`,fo=class{constructor(r,l){this.merge=C=>this.destination.merge(this.source,C);let c=new Jl.DefaultFormatter;r.children.length===3&&(c=new Jl.DisplayDirective(r.children[2]));let d=(0,r7.newDestination)(r.children[0],l,c);if(d.isErr())throw d.error;this.destination=d.value,this.source=new ho(r.children[1],l)}};en.Formula=fo;var ho=class{constructor(r,l){if(this.getValue=(C,_)=>this.locationDescriptor.getValue(C,_),r.type!=="source"&&r.type!=="source_without_range")throw Error("Invalid AST token type of "+r.type);if(r.children.length!==1)throw Error("Unexpected children length in Source");let c=r.children[0],d=c7(c,l);if(d.isErr())throw d.error;this.locationDescriptor=d.value}};en.Source=ho;var c7=(s,r)=>{try{switch(s.type){case"range":return(0,Xe.ok)(new i7.Range(s,r));case"source_reference":let l=(0,B3.checkChildLength)(s,1);return l?(0,Xe.err)(l):(0,Xe.ok)(new o7.Reference(s.children[0],r));case"single_param_function_call":return(0,Xe.ok)(new s7.SingleParamFunctionCall(s,r));case"conditional_function_call":return(0,Xe.ok)(new n7.ConditionalFunctionCall(s,r));case"algebraic_operation":return(0,Xe.ok)(new t7.AlgebraicOperation(s,r));case"real":return(0,Xe.ok)(new Yl.Constant(s,r));case"float":return(0,Xe.ok)(new Yl.Constant(s,r));default:throw Error("Unrecognized valueProvider type "+s.type)}}catch(l){return(0,Xe.err)(l)}},f7=(s,r)=>s.reduce((c,d)=>c.andThen(C=>{let _=(0,en.parseFormula)(d,r);return _.isErr()?_:(0,Xe.ok)((0,u7.concat)(_.value,C))}),(0,Xe.ok)([])).andThen(c=>c.reduceRight((d,C)=>d.andThen(_=>C.merge(_)),(0,Xe.ok)(r)));en.parseAndApply=f7;var h7=(s,r)=>{let c=new l7.Grammars.W3C.Parser(a7).getAST(s);if(!c)return(0,Xe.err)(new Error(`Formula '${s}' could not be parsed`));let d=(0,B3.checkType)(c,"tblfm_line");if(d)return(0,Xe.err)(d);let C=(0,B3.checkChildLength)(c,1);if(C)return(0,Xe.err)(C);let _=c.children[0].children,m=[];try{do m.push(new fo(_[0],r)),_.length>1&&_[1].type==="formula_list"?_=_[1].children:_=[];while(_.length>0);return(0,Xe.ok)(m)}catch(A){return(0,Xe.err)(A)}};en.parseFormula=h7});var Ii=we(po=>{"use strict";Object.defineProperty(po,"__esModule",{value:!0});po.Table=void 0;var d7=Ai(),Xl=W1(),go=O1(),g7=P1(),z3=class s{constructor(r){this._rows=r.slice()}getHeight(){return this._rows.length}getWidth(){return this._rows.map(r=>r.getWidth()).reduce((r,l)=>Math.max(r,l),0)}getHeaderWidth(){return this._rows[0].getWidth()}getRows(){return this._rows.slice()}getDelimiterRow(){let r=this._rows[1];if(r!==void 0&&r.isDelimiter())return r}getCellAt(r,l){let c=this._rows[r];if(c!==void 0)return c.getCellAt(l)}getFocusedCell(r){return this.getCellAt(r.row,r.column)}toLines(){return this._rows.map(r=>r.toText())}setCellAt(r,l,c){let d=this.getRows();return d[r]=d[r].setCellAt(l,c),new s(d)}focusOfPosition(r,l){let c=r.row-l,d=this._rows[c];if(d===void 0)return;if(r.columnP.rawContent.length),_=d.marginLeft.length+1,m=0;for(;mr.column);m++)_+=C[m]+1;let A=r.column-_;return new Xl.Focus(c,m,A)}positionOfFocus(r,l){let c=this._rows[r.row];if(c===void 0)return;let d=r.row+l;if(r.column<0)return new go.Point(d,r.offset);let C=c.getCells().map(A=>A.rawContent.length),_=Math.min(r.column,C.length),m=c.marginLeft.length+1;for(let A=0;A<_;A++)m+=C[A]+1;return new go.Point(d,m+r.offset)}selectionRangeOfFocus(r,l){let c=this._rows[r.row];if(c===void 0)return;let d=c.getCellAt(r.column);if(d===void 0||d.content==="")return;let C=r.row+l,_=c.getCells().map(A=>A.rawContent.length),m=c.marginLeft.length+1;for(let A=0;A{"use strict";Object.defineProperty(rt,"__esModule",{value:!0});rt.readTable=rt._marginRegex=rt.marginRegexSrc=rt._readRow=rt._splitCells=void 0;var p7=Ii(),m7=Pr(),w7=_i(),C7=s=>{let r=[],l="",c=s;for(;c!=="";)switch(c[0]){case"`":{let d=c.match(/^`*/);if(d===null)break;let C=d[0],_=C,m=c.substr(C.length),A=!1;for(;m!=="";)if(m[0]==="`"){let P=m.match(/^`*/);if(P===null)break;let y=P[0];if(_+=y,m=m.substr(y.length),y.length===C.length){A=!0;break}}else _+=m[0],m=m.substr(1);A?(l+=_,c=m):(l+="`",c=c.substr(1))}break;case"\\":c.length>=2?(l+=c.substr(0,2),c=c.substr(2)):(l+="\\",c=c.substr(1));break;case"[":if(l+="[",c=c.substr(1),/\[[^\\|\]]+\|[^|\]]+]]/.test(c)){let d=c.indexOf("|");l+=c.slice(0,d),l+="\\|",c=c.substr(d+1)}break;case"|":r.push(l),l="",c=c.substr(1);break;default:l+=c[0],c=c.substr(1)}return r.push(l),r};rt._splitCells=C7;var v7=(s,r=/^\s*$/)=>{let l=(0,rt._splitCells)(s),c;l.length>0&&r.test(l[0])?(c=l[0],l=l.slice(1)):c="";let d;return l.length>1&&/^\s*$/.test(l[l.length-1])?(d=l[l.length-1],l=l.slice(0,l.length-1)):d="",new w7.TableRow(l.map(C=>new m7.TableCell(C)),c,d)};rt._readRow=v7;var _7=s=>{let r="";return s.forEach(l=>{l!=="|"&&l!=="\\"&&l!=="`"&&(r+=`\\u{${l.codePointAt(0).toString(16)}}`)}),`[\\s${r}]*`};rt.marginRegexSrc=_7;var b7=s=>new RegExp(`^${(0,rt.marginRegexSrc)(s)}$`,"u");rt._marginRegex=b7;var E7=(s,r)=>{let l=(0,rt._marginRegex)(r.leftMarginChars);return new p7.Table(s.map(c=>(0,rt._readRow)(c,l)))};rt.readTable=E7});var jl=we(Wi=>{"use strict";Object.defineProperty(Wi,"__esModule",{value:!0});var Z3=[[0,31,"N"],[32,126,"Na"],[127,160,"N"],[161,161,"A"],[162,163,"Na"],[164,164,"A"],[165,166,"Na"],[167,168,"A"],[169,169,"N"],[170,170,"A"],[171,171,"N"],[172,172,"Na"],[173,174,"A"],[175,175,"Na"],[176,180,"A"],[181,181,"N"],[182,186,"A"],[187,187,"N"],[188,191,"A"],[192,197,"N"],[198,198,"A"],[199,207,"N"],[208,208,"A"],[209,214,"N"],[215,216,"A"],[217,221,"N"],[222,225,"A"],[226,229,"N"],[230,230,"A"],[231,231,"N"],[232,234,"A"],[235,235,"N"],[236,237,"A"],[238,239,"N"],[240,240,"A"],[241,241,"N"],[242,243,"A"],[244,246,"N"],[247,250,"A"],[251,251,"N"],[252,252,"A"],[253,253,"N"],[254,254,"A"],[255,256,"N"],[257,257,"A"],[258,272,"N"],[273,273,"A"],[274,274,"N"],[275,275,"A"],[276,282,"N"],[283,283,"A"],[284,293,"N"],[294,295,"A"],[296,298,"N"],[299,299,"A"],[300,304,"N"],[305,307,"A"],[308,311,"N"],[312,312,"A"],[313,318,"N"],[319,322,"A"],[323,323,"N"],[324,324,"A"],[325,327,"N"],[328,331,"A"],[332,332,"N"],[333,333,"A"],[334,337,"N"],[338,339,"A"],[340,357,"N"],[358,359,"A"],[360,362,"N"],[363,363,"A"],[364,461,"N"],[462,462,"A"],[463,463,"N"],[464,464,"A"],[465,465,"N"],[466,466,"A"],[467,467,"N"],[468,468,"A"],[469,469,"N"],[470,470,"A"],[471,471,"N"],[472,472,"A"],[473,473,"N"],[474,474,"A"],[475,475,"N"],[476,476,"A"],[477,592,"N"],[593,593,"A"],[594,608,"N"],[609,609,"A"],[610,707,"N"],[708,708,"A"],[709,710,"N"],[711,711,"A"],[712,712,"N"],[713,715,"A"],[716,716,"N"],[717,717,"A"],[718,719,"N"],[720,720,"A"],[721,727,"N"],[728,731,"A"],[732,732,"N"],[733,733,"A"],[734,734,"N"],[735,735,"A"],[736,767,"N"],[768,879,"A"],[880,912,"N"],[913,929,"A"],[930,930,"N"],[931,937,"A"],[938,944,"N"],[945,961,"A"],[962,962,"N"],[963,969,"A"],[970,1024,"N"],[1025,1025,"A"],[1026,1039,"N"],[1040,1103,"A"],[1104,1104,"N"],[1105,1105,"A"],[1106,4351,"N"],[4352,4447,"W"],[4448,8207,"N"],[8208,8208,"A"],[8209,8210,"N"],[8211,8214,"A"],[8215,8215,"N"],[8216,8217,"A"],[8218,8219,"N"],[8220,8221,"A"],[8222,8223,"N"],[8224,8226,"A"],[8227,8227,"N"],[8228,8231,"A"],[8232,8239,"N"],[8240,8240,"A"],[8241,8241,"N"],[8242,8243,"A"],[8244,8244,"N"],[8245,8245,"A"],[8246,8250,"N"],[8251,8251,"A"],[8252,8253,"N"],[8254,8254,"A"],[8255,8307,"N"],[8308,8308,"A"],[8309,8318,"N"],[8319,8319,"A"],[8320,8320,"N"],[8321,8324,"A"],[8325,8360,"N"],[8361,8361,"H"],[8362,8363,"N"],[8364,8364,"A"],[8365,8450,"N"],[8451,8451,"A"],[8452,8452,"N"],[8453,8453,"A"],[8454,8456,"N"],[8457,8457,"A"],[8458,8466,"N"],[8467,8467,"A"],[8468,8469,"N"],[8470,8470,"A"],[8471,8480,"N"],[8481,8482,"A"],[8483,8485,"N"],[8486,8486,"A"],[8487,8490,"N"],[8491,8491,"A"],[8492,8530,"N"],[8531,8532,"A"],[8533,8538,"N"],[8539,8542,"A"],[8543,8543,"N"],[8544,8555,"A"],[8556,8559,"N"],[8560,8569,"A"],[8570,8584,"N"],[8585,8585,"A"],[8586,8591,"N"],[8592,8601,"A"],[8602,8631,"N"],[8632,8633,"A"],[8634,8657,"N"],[8658,8658,"A"],[8659,8659,"N"],[8660,8660,"A"],[8661,8678,"N"],[8679,8679,"A"],[8680,8703,"N"],[8704,8704,"A"],[8705,8705,"N"],[8706,8707,"A"],[8708,8710,"N"],[8711,8712,"A"],[8713,8714,"N"],[8715,8715,"A"],[8716,8718,"N"],[8719,8719,"A"],[8720,8720,"N"],[8721,8721,"A"],[8722,8724,"N"],[8725,8725,"A"],[8726,8729,"N"],[8730,8730,"A"],[8731,8732,"N"],[8733,8736,"A"],[8737,8738,"N"],[8739,8739,"A"],[8740,8740,"N"],[8741,8741,"A"],[8742,8742,"N"],[8743,8748,"A"],[8749,8749,"N"],[8750,8750,"A"],[8751,8755,"N"],[8756,8759,"A"],[8760,8763,"N"],[8764,8765,"A"],[8766,8775,"N"],[8776,8776,"A"],[8777,8779,"N"],[8780,8780,"A"],[8781,8785,"N"],[8786,8786,"A"],[8787,8799,"N"],[8800,8801,"A"],[8802,8803,"N"],[8804,8807,"A"],[8808,8809,"N"],[8810,8811,"A"],[8812,8813,"N"],[8814,8815,"A"],[8816,8833,"N"],[8834,8835,"A"],[8836,8837,"N"],[8838,8839,"A"],[8840,8852,"N"],[8853,8853,"A"],[8854,8856,"N"],[8857,8857,"A"],[8858,8868,"N"],[8869,8869,"A"],[8870,8894,"N"],[8895,8895,"A"],[8896,8977,"N"],[8978,8978,"A"],[8979,8985,"N"],[8986,8987,"W"],[8988,9e3,"N"],[9001,9002,"W"],[9003,9192,"N"],[9193,9196,"W"],[9197,9199,"N"],[9200,9200,"W"],[9201,9202,"N"],[9203,9203,"W"],[9204,9311,"N"],[9312,9449,"A"],[9450,9450,"N"],[9451,9547,"A"],[9548,9551,"N"],[9552,9587,"A"],[9588,9599,"N"],[9600,9615,"A"],[9616,9617,"N"],[9618,9621,"A"],[9622,9631,"N"],[9632,9633,"A"],[9634,9634,"N"],[9635,9641,"A"],[9642,9649,"N"],[9650,9651,"A"],[9652,9653,"N"],[9654,9655,"A"],[9656,9659,"N"],[9660,9661,"A"],[9662,9663,"N"],[9664,9665,"A"],[9666,9669,"N"],[9670,9672,"A"],[9673,9674,"N"],[9675,9675,"A"],[9676,9677,"N"],[9678,9681,"A"],[9682,9697,"N"],[9698,9701,"A"],[9702,9710,"N"],[9711,9711,"A"],[9712,9724,"N"],[9725,9726,"W"],[9727,9732,"N"],[9733,9734,"A"],[9735,9736,"N"],[9737,9737,"A"],[9738,9741,"N"],[9742,9743,"A"],[9744,9747,"N"],[9748,9749,"W"],[9750,9755,"N"],[9756,9756,"A"],[9757,9757,"N"],[9758,9758,"A"],[9759,9791,"N"],[9792,9792,"A"],[9793,9793,"N"],[9794,9794,"A"],[9795,9799,"N"],[9800,9811,"W"],[9812,9823,"N"],[9824,9825,"A"],[9826,9826,"N"],[9827,9829,"A"],[9830,9830,"N"],[9831,9834,"A"],[9835,9835,"N"],[9836,9837,"A"],[9838,9838,"N"],[9839,9839,"A"],[9840,9854,"N"],[9855,9855,"W"],[9856,9874,"N"],[9875,9875,"W"],[9876,9885,"N"],[9886,9887,"A"],[9888,9888,"N"],[9889,9889,"W"],[9890,9897,"N"],[9898,9899,"W"],[9900,9916,"N"],[9917,9918,"W"],[9919,9919,"A"],[9920,9923,"N"],[9924,9925,"W"],[9926,9933,"A"],[9934,9934,"W"],[9935,9939,"A"],[9940,9940,"W"],[9941,9953,"A"],[9954,9954,"N"],[9955,9955,"A"],[9956,9959,"N"],[9960,9961,"A"],[9962,9962,"W"],[9963,9969,"A"],[9970,9971,"W"],[9972,9972,"A"],[9973,9973,"W"],[9974,9977,"A"],[9978,9978,"W"],[9979,9980,"A"],[9981,9981,"W"],[9982,9983,"A"],[9984,9988,"N"],[9989,9989,"W"],[9990,9993,"N"],[9994,9995,"W"],[9996,10023,"N"],[10024,10024,"W"],[10025,10044,"N"],[10045,10045,"A"],[10046,10059,"N"],[10060,10060,"W"],[10061,10061,"N"],[10062,10062,"W"],[10063,10066,"N"],[10067,10069,"W"],[10070,10070,"N"],[10071,10071,"W"],[10072,10101,"N"],[10102,10111,"A"],[10112,10132,"N"],[10133,10135,"W"],[10136,10159,"N"],[10160,10160,"W"],[10161,10174,"N"],[10175,10175,"W"],[10176,10213,"N"],[10214,10221,"Na"],[10222,10628,"N"],[10629,10630,"Na"],[10631,11034,"N"],[11035,11036,"W"],[11037,11087,"N"],[11088,11088,"W"],[11089,11092,"N"],[11093,11093,"W"],[11094,11097,"A"],[11098,11903,"N"],[11904,11929,"W"],[11930,11930,"N"],[11931,12019,"W"],[12020,12031,"N"],[12032,12245,"W"],[12246,12271,"N"],[12272,12283,"W"],[12284,12287,"N"],[12288,12288,"F"],[12289,12350,"W"],[12351,12352,"N"],[12353,12438,"W"],[12439,12440,"N"],[12441,12543,"W"],[12544,12548,"N"],[12549,12591,"W"],[12592,12592,"N"],[12593,12686,"W"],[12687,12687,"N"],[12688,12771,"W"],[12772,12783,"N"],[12784,12830,"W"],[12831,12831,"N"],[12832,12871,"W"],[12872,12879,"A"],[12880,19903,"W"],[19904,19967,"N"],[19968,42124,"W"],[42125,42127,"N"],[42128,42182,"W"],[42183,43359,"N"],[43360,43388,"W"],[43389,44031,"N"],[44032,55203,"W"],[55204,57343,"N"],[57344,63743,"A"],[63744,64255,"W"],[64256,65023,"N"],[65024,65039,"A"],[65040,65049,"W"],[65050,65071,"N"],[65072,65106,"W"],[65107,65107,"N"],[65108,65126,"W"],[65127,65127,"N"],[65128,65131,"W"],[65132,65280,"N"],[65281,65376,"F"],[65377,65470,"H"],[65471,65473,"N"],[65474,65479,"H"],[65480,65481,"N"],[65482,65487,"H"],[65488,65489,"N"],[65490,65495,"H"],[65496,65497,"N"],[65498,65500,"H"],[65501,65503,"N"],[65504,65510,"F"],[65511,65511,"N"],[65512,65518,"H"],[65519,65532,"N"],[65533,65533,"A"],[65534,94175,"N"],[94176,94180,"W"],[94181,94191,"N"],[94192,94193,"W"],[94194,94207,"N"],[94208,100343,"W"],[100344,100351,"N"],[100352,101589,"W"],[101590,101631,"N"],[101632,101640,"W"],[101641,110591,"N"],[110592,110878,"W"],[110879,110927,"N"],[110928,110930,"W"],[110931,110947,"N"],[110948,110951,"W"],[110952,110959,"N"],[110960,111355,"W"],[111356,126979,"N"],[126980,126980,"W"],[126981,127182,"N"],[127183,127183,"W"],[127184,127231,"N"],[127232,127242,"A"],[127243,127247,"N"],[127248,127277,"A"],[127278,127279,"N"],[127280,127337,"A"],[127338,127343,"N"],[127344,127373,"A"],[127374,127374,"W"],[127375,127376,"A"],[127377,127386,"W"],[127387,127404,"A"],[127405,127487,"N"],[127488,127490,"W"],[127491,127503,"N"],[127504,127547,"W"],[127548,127551,"N"],[127552,127560,"W"],[127561,127567,"N"],[127568,127569,"W"],[127570,127583,"N"],[127584,127589,"W"],[127590,127743,"N"],[127744,127776,"W"],[127777,127788,"N"],[127789,127797,"W"],[127798,127798,"N"],[127799,127868,"W"],[127869,127869,"N"],[127870,127891,"W"],[127892,127903,"N"],[127904,127946,"W"],[127947,127950,"N"],[127951,127955,"W"],[127956,127967,"N"],[127968,127984,"W"],[127985,127987,"N"],[127988,127988,"W"],[127989,127991,"N"],[127992,128062,"W"],[128063,128063,"N"],[128064,128064,"W"],[128065,128065,"N"],[128066,128252,"W"],[128253,128254,"N"],[128255,128317,"W"],[128318,128330,"N"],[128331,128334,"W"],[128335,128335,"N"],[128336,128359,"W"],[128360,128377,"N"],[128378,128378,"W"],[128379,128404,"N"],[128405,128406,"W"],[128407,128419,"N"],[128420,128420,"W"],[128421,128506,"N"],[128507,128591,"W"],[128592,128639,"N"],[128640,128709,"W"],[128710,128715,"N"],[128716,128716,"W"],[128717,128719,"N"],[128720,128722,"W"],[128723,128724,"N"],[128725,128727,"W"],[128728,128746,"N"],[128747,128748,"W"],[128749,128755,"N"],[128756,128764,"W"],[128765,128991,"N"],[128992,129003,"W"],[129004,129291,"N"],[129292,129338,"W"],[129339,129339,"N"],[129340,129349,"W"],[129350,129350,"N"],[129351,129400,"W"],[129401,129401,"N"],[129402,129483,"W"],[129484,129484,"N"],[129485,129535,"W"],[129536,129647,"N"],[129648,129652,"W"],[129653,129655,"N"],[129656,129658,"W"],[129659,129663,"N"],[129664,129670,"W"],[129671,129679,"N"],[129680,129704,"W"],[129705,129711,"N"],[129712,129718,"W"],[129719,129727,"N"],[129728,129730,"W"],[129731,129743,"N"],[129744,129750,"W"],[129751,131071,"N"],[131072,196605,"W"],[196606,196607,"N"],[196608,262141,"W"],[262142,917759,"N"],[917760,917999,"A"],[918e3,983039,"N"],[983040,1048573,"A"],[1048574,1048575,"N"],[1048576,1114109,"A"],[1114110,1114111,"N"]],A7="13.0.0";function T7(s){for(var r=0,l=Z3.length-1;r!==l;){var c=r+(l-r>>1),d=Z3[c],C=d[0],_=d[1],m=d[2];if(s_)r=c+1;else return m}return Z3[r][2]}function Ql(s,r){r===void 0&&(r=0);var l=s.codePointAt(r);if(l!==void 0)return T7(l)}var R7={N:1,Na:1,W:2,F:2,H:1,A:1};function x7(s,r){for(var l=0,c=0,d=s;c{"use strict";Object.defineProperty(oe,"__esModule",{value:!0});oe.moveColumn=oe.deleteColumn=oe.insertColumn=oe.moveRow=oe.deleteRow=oe.insertRow=oe.alterAlignment=oe.formatTable=oe.FormatType=oe._weakFormatTable=oe._formatTable=oe._padText=oe._alignText=oe._computeTextWidth=oe.completeTable=oe._extendArray=oe._delimiterText=void 0;var ft=vi(),Gt=Ii(),Ct=Pr(),Qe=_i(),y7=jl(),N7=(s,r)=>{let l="-".repeat(r);switch(s){case ft.Alignment.NONE:return` ${l} `;case ft.Alignment.LEFT:return`:${l} `;case ft.Alignment.RIGHT:return` ${l}:`;case ft.Alignment.CENTER:return`:${l}:`;default:throw new Error("Unknown alignment: "+s)}};oe._delimiterText=N7;var L7=(s,r,l)=>{let c=s.slice();for(let d=s.length;d{let l=s.getHeight(),c=s.getWidth();if(l===0)throw new Error("Empty table");let d=s.getRows(),C=[],_=d[0],m=_.getCells();C.push(new Qe.TableRow((0,oe._extendArray)(m,c,P=>new Ct.TableCell(P===m.length?_.marginRight:"")),_.marginLeft,m.lengthnew Ct.TableCell((0,oe._delimiterText)(ft.Alignment.NONE,y===P.length?Math.max(r.minDelimiterWidth,A.marginRight.length-2):r.minDelimiterWidth))),A.marginLeft,P.lengthnew Ct.TableCell((0,oe._delimiterText)(ft.Alignment.NONE,r.minDelimiterWidth))),"",""));for(let P=A!==void 0?2:1;Pnew Ct.TableCell(V===S.length?y.marginRight:"")),y.marginLeft,S.length{let l=r.normalize?s.normalize("NFC"):s,c=0;for(let d of l){if(r.wideChars.has(d)){c+=2;continue}if(r.narrowChars.has(d)){c+=1;continue}switch((0,y7.getEAW)(d)){case"F":case"W":c+=2;break;case"A":c+=r.ambiguousAsWide?2:1;break;default:c+=1}}return c};oe._computeTextWidth=S7;var P7=(s,r,l,c)=>{let d=r-(0,oe._computeTextWidth)(s,c);if(d<0)return s;switch(l){case ft.Alignment.NONE:throw new Error("Unexpected default alignment");case ft.Alignment.LEFT:return s+" ".repeat(d);case ft.Alignment.RIGHT:return" ".repeat(d)+s;case ft.Alignment.CENTER:return" ".repeat(Math.floor(d/2))+s+" ".repeat(Math.ceil(d/2));default:throw new Error("Unknown alignment: "+l)}};oe._alignText=P7;var I7=s=>` ${s} `;oe._padText=I7;var W7=(s,r)=>{let l=s.getHeight(),c=s.getWidth();if(l===0)return{table:s,marginLeft:""};let d=s.getRows()[0].marginLeft;if(c===0){let y=new Array(l).fill(new Qe.TableRow([],d,""));return{table:new Gt.Table(y),marginLeft:d}}let C=s.getDelimiterRow(),_=new Array(c).fill(0);if(C!==void 0){let y=C.getWidth();for(let S=0;Sy.getAlignment()),c,()=>r.defaultAlignment):new Array(c).fill(r.defaultAlignment),A=[],P=s.getRows()[0];A.push(new Qe.TableRow(P.getCells().map((y,S)=>new Ct.TableCell((0,oe._padText)((0,oe._alignText)(y.content,_[S],r.headerAlignment===ft.HeaderAlignment.FOLLOW?m[S]===ft.Alignment.NONE?r.defaultAlignment:m[S]:r.headerAlignment,r.textWidthOptions)))),d,"")),C!==void 0&&A.push(new Qe.TableRow(C.getCells().map((y,S)=>new Ct.TableCell((0,oe._delimiterText)(m[S],_[S]))),d,""));for(let y=C!==void 0?2:1;ynew Ct.TableCell((0,oe._padText)((0,oe._alignText)(V.content,_[M],m[M]===ft.Alignment.NONE?r.defaultAlignment:m[M],r.textWidthOptions)))),d,""))}return{table:new Gt.Table(A),marginLeft:d}};oe._formatTable=W7;var M7=(s,r)=>{let l=s.getHeight(),c=s.getWidth();if(l===0)return{table:s,marginLeft:""};let d=s.getRows()[0].marginLeft;if(c===0){let A=new Array(l).fill(new Qe.TableRow([],d,""));return{table:new Gt.Table(A),marginLeft:d}}let C=s.getDelimiterRow(),_=[],m=s.getRows()[0];_.push(new Qe.TableRow(m.getCells().map(A=>new Ct.TableCell((0,oe._padText)(A.content))),d,"")),C!==void 0&&_.push(new Qe.TableRow(C.getCells().map(A=>new Ct.TableCell((0,oe._delimiterText)(A.getAlignment(),r.minDelimiterWidth))),d,""));for(let A=C!==void 0?2:1;Anew Ct.TableCell((0,oe._padText)(y.content))),d,""))}return{table:new Gt.Table(_),marginLeft:d}};oe._weakFormatTable=M7;var mo;(function(s){s.NORMAL="normal",s.WEAK="weak"})(mo||(oe.FormatType=mo={}));var D7=(s,r)=>{switch(r.formatType){case mo.NORMAL:return(0,oe._formatTable)(s,r);case mo.WEAK:return(0,oe._weakFormatTable)(s,r);default:throw new Error("Unknown format type: "+r.formatType)}};oe.formatTable=D7;var F7=(s,r,l,c)=>{if(s.getHeight()<1)return s;let d=s.getRows()[1];if(r<0||d.getWidth()-1{let c=s.getRows();return c.splice(Math.max(r,2),0,l),new Gt.Table(c)};oe.insertRow=k7;var U7=(s,r)=>{if(r===1)return s;let l=s.getRows();if(r===0){let c=l[0];l[0]=new Qe.TableRow(new Array(c.getWidth()).fill(new Ct.TableCell("")),c.marginLeft,c.marginRight)}else l.splice(r,1);return new Gt.Table(l)};oe.deleteRow=U7;var q7=(s,r,l)=>{if(r<=1||l<=1||r===l)return s;let c=s.getRows(),d=c[r];return c.splice(r,1),c.splice(l,0,d),new Gt.Table(c)};oe.moveRow=q7;var H7=(s,r,l,c)=>{let d=s.getRows();for(let C=0;C1?C-1:C];m.splice(r,0,A),d[C]=new Qe.TableRow(m,_.marginLeft,_.marginRight)}return new Gt.Table(d)};oe.insertColumn=H7;var B7=(s,r,l)=>{let c=s.getRows();for(let d=0;d{if(r===l)return s;let c=s.getRows();for(let d=0;d{"use strict";Object.defineProperty(Wt,"__esModule",{value:!0});Wt.shortestEditScript=Wt.applyEditScript=Wt._applyCommand=Wt.Delete=Wt.Insert=void 0;var Ur=class{constructor(r,l){this.row=r,this.line=l}};Wt.Insert=Ur;var qr=class{constructor(r){this.row=r}};Wt.Delete=qr;var $7=(s,r,l)=>{if(r instanceof Ur)s.insertLine(l+r.row,r.line);else if(r instanceof qr)s.deleteLine(l+r.row);else throw new Error("Unknown command")};Wt._applyCommand=$7;var Z7=(s,r,l)=>{for(let c of r)(0,Wt._applyCommand)(s,c,l)};Wt.applyEditScript=Z7;var Co=class{get car(){throw new Error("Not implemented")}get cdr(){throw new Error("Not implemented")}isEmpty(){throw new Error("Not implemented")}unshift(r){return new V3(r,this)}toArray(){let r=[],l=this;for(;!l.isEmpty();)r.push(l.car),l=l.cdr;return r}},G3=class extends Co{constructor(){super()}get car(){throw new Error("Empty list")}get cdr(){throw new Error("Empty list")}isEmpty(){return!0}},V3=class extends Co{constructor(r,l){super(),this._car=r,this._cdr=l}get car(){return this._car}get cdr(){return this._cdr}isEmpty(){return!1}},G7=(s,r,l=-1)=>{let c=s.length,d=r.length,C=l>=0?Math.min(l,c+d):c+d,_=new Array(Math.min(C,c)+Math.min(C,d)+1),m=Math.min(C,c);for(let A=0;A<=C;A++){let P=A<=c?-A:A-2*c,y=A<=d?A:-A+2*d;for(let S=P;S<=y;S+=2){let V,M;if(A===0)V=0,M=new G3;else if(S===-A)V=_[m+S+1].i+1,M=_[m+S+1].script.unshift(new qr(V+S));else if(S===A)V=_[m+S-1].i,M=_[m+S-1].script.unshift(new Ur(V+S-1,r[V+S-1]));else{let Y=_[m+S+1].i+1,se=_[m+S-1].i;Y>se?(V=Y,M=_[m+S+1].script.unshift(new qr(V+S))):(V=se,M=_[m+S-1].script.unshift(new Ur(V+S-1,r[V+S-1])))}for(;V{"use strict";Object.defineProperty(vo,"__esModule",{value:!0});vo.ITextEditor=void 0;var Y3=class{getCursorPosition(){throw new Error("Not implemented: getCursorPosition")}setCursorPosition(r){throw new Error("Not implemented: setCursorPosition")}setSelectionRange(r){throw new Error("Not implemented: setSelectionRange")}getLastRow(){throw new Error("Not implemented: getLastRow")}acceptsTableEdit(r){throw new Error("Not implemented: acceptsTableEdit")}getLine(r){throw new Error("Not implemented: getLine")}insertLine(r,l){throw new Error("Not implemented: insertLine")}deleteLine(r){throw new Error("Not implemented: deleteLine")}replaceLines(r,l,c){throw new Error("Not implemented: replaceLines")}transact(r){throw new Error("Not implemented: transact")}};vo.ITextEditor=Y3});var ru=we(dr=>{"use strict";Object.defineProperty(dr,"__esModule",{value:!0});dr.defaultOptions=dr.optionsWithDefaults=void 0;var tu=vi(),V7=wo(),nu={normalize:!0,wideChars:new Set,narrowChars:new Set,ambiguousAsWide:!1},K7={leftMarginChars:new Set,formatType:V7.FormatType.NORMAL,minDelimiterWidth:3,defaultAlignment:tu.DefaultAlignment.LEFT,headerAlignment:tu.HeaderAlignment.FOLLOW,smartCursor:!1},Y7=s=>Object.assign(Object.assign(Object.assign({},K7),s),{textWidthOptions:s.textWidthOptions?Object.assign(Object.assign({},nu),s.textWidthOptions):nu});dr.optionsWithDefaults=Y7;dr.defaultOptions=(0,dr.optionsWithDefaults)({})});var su=we(We=>{"use strict";Object.defineProperty(We,"__esModule",{value:!0});We.TableEditor=We._computeNewOffset=We._createIsTableFormulaRegex=We._createIsTableRowRegex=We.SortOrder=void 0;var iu=K3(),_o=W1(),Le=wo(),Br=$3(),ln=O1(),J3=P1(),ou=Ii(),un=Pr(),Hr=_i(),X3;(function(s){s.Ascending="ascending",s.Descending="descending"})(X3||(We.SortOrder=X3={}));var J7=s=>new RegExp(`^${(0,Br.marginRegexSrc)(s)}\\|`,"u");We._createIsTableRowRegex=J7;var X7=s=>new RegExp(`^${(0,Br.marginRegexSrc)(s)}$`,"u");We._createIsTableFormulaRegex=X7;var Q7=(s,r,l,c)=>{if(c){let _=l.table.getFocusedCell(s);return _!==void 0?_.computeRawOffset(0):s.column<0?l.marginLeft.length:0}let d=r.getFocusedCell(s),C=l.table.getFocusedCell(s);if(d!==void 0&&C!==void 0){let _=Math.min(d.computeContentOffset(s.offset),C.content.length);return C.computeRawOffset(_)}return s.column<0?l.marginLeft.length:0};We._computeNewOffset=Q7;var Q3=class{constructor(r){this._textEditor=r,this._scActive=!1}resetSmartCursor(){this._scActive=!1}cursorIsInTable(r){let l=(0,We._createIsTableRowRegex)(r.leftMarginChars),c=this._textEditor.getCursorPosition();return this._textEditor.acceptsTableEdit(c.row)&&l.test(this._textEditor.getLine(c.row))}cursorIsInTableFormula(r){let l=(0,We._createIsTableFormulaRegex)(r.leftMarginChars),c=this._textEditor.getCursorPosition();return this._textEditor.acceptsTableEdit(c.row)&&l.test(this._textEditor.getLine(c.row))}_findTable(r){let l=(0,We._createIsTableRowRegex)(r.leftMarginChars),c=(0,We._createIsTableFormulaRegex)(r.leftMarginChars),d=this._textEditor.getCursorPosition(),C=this._textEditor.getLastRow(),_=[],m=[],A=d.row,P=d.row;{let M=this._textEditor.getLine(d.row);for(;c.test(M)&&d.row>=0;)d=new ln.Point(d.row-1,d.column),P--,M=this._textEditor.getLine(d.row)}{let M=this._textEditor.getLine(d.row);if(!this._textEditor.acceptsTableEdit(d.row)||!l.test(M))return;_.push(M)}for(let M=d.row-1;M>=0;M--){let Y=this._textEditor.getLine(M);if(!this._textEditor.acceptsTableEdit(M)||!l.test(Y))break;_.unshift(Y),A=M}for(let M=d.row+1;M<=C;M++){let Y=this._textEditor.getLine(M);if(!this._textEditor.acceptsTableEdit(M)||!l.test(Y))break;_.push(Y),P=M}for(let M=P+1;M<=C;M++){let Y=this._textEditor.getLine(M);if(!this._textEditor.acceptsTableEdit(M)||!c.test(Y))break;m.push(Y)}let y=new J3.Range(new ln.Point(A,0),new ln.Point(P,_[_.length-1].length)),S=(0,Br.readTable)(_,r),V=S.focusOfPosition(d,A);if(V!==void 0)return{range:y,lines:_,formulaLines:m,table:S,focus:V}}_withTable(r,l){let c=this._findTable(r);if(c!==void 0)return l(c)}_updateLines(r,l,c,d=void 0){if(d!==void 0){let C=(0,iu.shortestEditScript)(d,c,3);if(C!==void 0){(0,iu.applyEditScript)(this._textEditor,C,r);return}}this._textEditor.replaceLines(r,l,c)}_moveToFocus(r,l,c){let d=l.positionOfFocus(c,r);d!==void 0&&this._textEditor.setCursorPosition(d)}_selectFocus(r,l,c){let d=l.selectionRangeOfFocus(c,r);d!==void 0?this._textEditor.setSelectionRange(d):this._moveToFocus(r,l,c)}format(r){this.withCompletedTable(r,({range:l,lines:c,table:d,focus:C})=>{let _=C;this._textEditor.transact(()=>{this._updateLines(l.start.row,l.end.row+1,d.toLines(),c),this._moveToFocus(l.start.row,d,_)})})}escape(r){this._withTable(r,({range:l,lines:c,table:d,focus:C})=>{let _=(0,Le.completeTable)(d,r),m=(0,Le.formatTable)(_.table,r),A=l.end.row+(_.delimiterInserted?2:1);this._textEditor.transact(()=>{this._updateLines(l.start.row,l.end.row+1,m.table.toLines(),c);let P;if(A>this._textEditor.getLastRow())this._textEditor.insertLine(A,""),P=new ln.Point(A,0);else{let y=new RegExp(`^${(0,Br.marginRegexSrc)(r.leftMarginChars)}`,"u"),S=this._textEditor.getLine(A),V=y.exec(S)[0];P=new ln.Point(A,V.length)}this._textEditor.setCursorPosition(P)}),this.resetSmartCursor()})}alignColumn(r,l){this.withCompletedTable(l,({range:c,lines:d,table:C,focus:_})=>{let m=_,A=C;0<=m.column&&m.column<=A.getHeaderWidth()-1&&(A=(0,Le.alterAlignment)(C,m.column,r,l));let P=(0,Le.formatTable)(A,l);m=m.setOffset((0,We._computeNewOffset)(m,C,P,!1)),this._textEditor.transact(()=>{this._updateLines(c.start.row,c.end.row+1,P.table.toLines(),d),this._moveToFocus(c.start.row,P.table,m)})})}selectCell(r){this.withCompletedTable(r,({range:l,lines:c,table:d,focus:C})=>{let _=C;this._textEditor.transact(()=>{this._updateLines(l.start.row,l.end.row+1,d.toLines(),c),this._selectFocus(l.start.row,d,_)})})}moveFocus(r,l,c){this.withCompletedTable(c,({range:d,lines:C,table:_,focus:m})=>{let A=m,P=A;if(r!==0){let V=_.getHeight(),M=A.row<1&&A.row+r>=1?1:A.row>1&&A.row+r<=1?-1:0;A=A.setRow(Math.min(Math.max(A.row+r+M,0),V<=2?0:V-1))}if(l!==0){let V=_.getHeaderWidth();!(A.column<0&&l<0)&&!(A.column>V-1&&l>0)&&(A=A.setColumn(Math.min(Math.max(A.column+l,0),V-1)))}let y=!A.posEquals(P),S=(0,Le.formatTable)(_,c);A=A.setOffset((0,We._computeNewOffset)(A,_,S,y)),this._textEditor.transact(()=>{this._updateLines(d.start.row,d.end.row+1,S.table.toLines(),C),y?this._selectFocus(d.start.row,S.table,A):this._moveToFocus(d.start.row,S.table,A)}),y&&this.resetSmartCursor()})}nextCell(r){this._withTable(r,({range:l,lines:c,table:d,focus:C})=>{let _=this._scTablePos!==void 0&&!l.start.equals(this._scTablePos)||this._scLastFocus!==void 0&&!C.posEquals(this._scLastFocus);this._scActive&&_&&this.resetSmartCursor();let m=C,A=(0,Le.completeTable)(d,r);A.delimiterInserted&&m.row>0&&(m=m.setRow(m.row+1));let P=m,y=A.table;if(m.row===1){if(m=m.setRow(2),r.smartCursor?(m.column<0||y.getHeaderWidth()-1y.getHeight()-1){let M=new Array(y.getHeaderWidth()).fill(new un.TableCell(""));y=(0,Le.insertRow)(y,y.getHeight(),new Hr.TableRow(M,"",""))}}else{if(m.column>y.getHeaderWidth()-1){let M=new Array(y.getHeight()-1).fill(new un.TableCell(""));y=(0,Le.insertColumn)(y,y.getHeaderWidth(),M,r)}m=m.setColumn(m.column+1)}let S=(0,Le.formatTable)(y,r);m=m.setOffset((0,We._computeNewOffset)(m,y,S,!0));let V=S.table.toLines();m.column>S.table.getHeaderWidth()-1&&(V[m.row]+=" ",m=m.setOffset(1)),this._textEditor.transact(()=>{this._updateLines(l.start.row,l.end.row+1,V,c),this._selectFocus(l.start.row,S.table,m)}),r.smartCursor&&(this._scActive||(this._scActive=!0,this._scTablePos=l.start,P.column<0||S.table.getHeaderWidth()-1{let _=C,m=_;_.row===0?_.column>0&&(_=_.setColumn(_.column-1)):_.row===1?_=new _o.Focus(0,d.getHeaderWidth()-1,_.offset):_.column>0?_=_.setColumn(_.column-1):_=new _o.Focus(_.row===2?0:_.row-1,d.getHeaderWidth()-1,_.offset);let A=!_.posEquals(m),P=(0,Le.formatTable)(d,r);_=_.setOffset((0,We._computeNewOffset)(_,d,P,A)),this._textEditor.transact(()=>{this._updateLines(l.start.row,l.end.row+1,P.table.toLines(),c),A?this._selectFocus(l.start.row,P.table,_):this._moveToFocus(l.start.row,P.table,_)}),A&&this.resetSmartCursor()})}nextRow(r){this._withTable(r,({range:l,lines:c,table:d,focus:C})=>{let _=this._scTablePos!==void 0&&!l.start.equals(this._scTablePos)||this._scLastFocus!==void 0&&!C.posEquals(this._scLastFocus);this._scActive&&_&&this.resetSmartCursor();let m=C,A=(0,Le.completeTable)(d,r);A.delimiterInserted&&m.row>0&&(m=m.setRow(m.row+1));let P=m,y=A.table;if(m.row===0?m=m.setRow(2):m=m.setRow(m.row+1),r.smartCursor?this._scActive&&this._scStartFocus!==void 0?m=m.setColumn(this._scStartFocus.column):(m.column<0||y.getHeaderWidth()-1y.getHeight()-1){let V=new Array(y.getHeaderWidth()).fill(new un.TableCell(""));y=(0,Le.insertRow)(y,y.getHeight(),new Hr.TableRow(V,"",""))}let S=(0,Le.formatTable)(y,r);m=m.setOffset((0,We._computeNewOffset)(m,y,S,!0)),this._textEditor.transact(()=>{this._updateLines(l.start.row,l.end.row+1,S.table.toLines(),c),this._selectFocus(l.start.row,S.table,m)}),r.smartCursor&&(this._scActive||(this._scActive=!0,this._scTablePos=l.start,P.column<0||S.table.getHeaderWidth()-1{let m=_;m.row<=1&&(m=m.setRow(2)),m=m.setColumn(0);let A=new Array(C.getHeaderWidth()).fill(new un.TableCell("")),P=(0,Le.insertRow)(C,m.row,new Hr.TableRow(A,"",""));this.formatAndApply(r,l,c,d,P,m)})}deleteRow(r){this.withCompletedTable(r,({range:l,lines:c,formulaLines:d,table:C,focus:_})=>{let m=_,A=C,P=!1;m.row!==1&&(A=(0,Le.deleteRow)(A,m.row),P=!0,m.row>A.getHeight()-1&&(m=m.setRow(m.row===2?0:m.row-1))),this.formatAndApply(r,l,c,d,A,m,P)})}moveRow(r,l){this.withCompletedTable(l,({range:c,lines:d,formulaLines:C,table:_,focus:m})=>{let A=m,P=_;if(A.row>1){let y=Math.min(Math.max(A.row+r,2),P.getHeight()-1);P=(0,Le.moveRow)(P,A.row,y),A=A.setRow(y)}this.formatAndApply(l,c,d,C,P,A)})}evaluateFormulas(r){return this.withCompletedTable(r,({range:l,lines:c,formulaLines:d,table:C,focus:_})=>{let m=C.applyFormulas(d);if(m.isErr())return m.error;let{table:A,focus:P}=this.formatAndApply(r,l,c,d,m.value,_,!1)})}transpose(r){this.withCompletedTable(r,({range:l,lines:c,formulaLines:d,table:C,focus:_})=>{var m,A,P,y,S,V,M,Y;let se=C.getWidth(),ge=C.getHeight(),D=new Array(se+1);for(let te=0;te1){let G=(y=(P=C.getCellAt(Q,te))===null||P===void 0?void 0:P.content)!==null&&y!==void 0?y:"";J[Q-1]=new un.TableCell(G)}}D[te]=new Hr.TableRow(J,"","")}else if(te===1){let J=new Array(ge-1);for(let Q=0;Q1){let J=new Array(ge-1);for(let Q=0;Q1){let G=(Y=(M=C.getCellAt(Q,te-1))===null||M===void 0?void 0:M.content)!==null&&Y!==void 0?Y:"";J[Q-1]=new un.TableCell(G)}}D[te]=new Hr.TableRow(J,"","")}let $=new ou.Table(D),{table:U,focus:K}=this.formatAndApply(r,l,c,d,$,_,!0);this._moveToFocus(l.start.row,U,K)})}sortRows(r,l){this.withCompletedTable(l,({range:c,lines:d,formulaLines:C,table:_,focus:m})=>{let A=_.getRows().slice(2),P=se=>/^\s*[-+]?((\d+(\.\d+)?)|(\d+\.)|(\.\d+))([eE][-+]?\d+)?\s*$/.test(se),y=A.map(se=>{var ge;return(ge=se.getCellAt(m.column))===null||ge===void 0?void 0:ge.content}).some(se=>se!==void 0&&se!==""&&!P(se));A.sort((se,ge)=>{let D=se.getCellAt(m.column),$=ge.getCellAt(m.column);if(D===void 0||D.content==="")return $===void 0||$.content===""?0:-1;if($===void 0||$.content==="")return 1;let U=y?D.content.replace(/[*~_$]/g,""):parseFloat(D.content),K=y?$.content.replace(/[*~_$]/g,""):parseFloat($.content);return U===K?0:U===void 0?-1:K===void 0?1:U{let m=_;m.row===1&&(m=m.setRow(0)),m.column<0&&(m=m.setColumn(0));let A=new Array(C.getHeight()-1).fill(new un.TableCell("")),P=(0,Le.insertColumn)(C,m.column,A,r);this.formatAndApply(r,l,c,d,P,m)})}deleteColumn(r){this.withCompletedTable(r,({range:l,lines:c,formulaLines:d,table:C,focus:_})=>{let m=_;m.row===1&&(m=m.setRow(0));let A=C,P=!1;0<=m.column&&m.column<=A.getHeaderWidth()-1&&(A=(0,Le.deleteColumn)(C,m.column,r),P=!0,m.column>A.getHeaderWidth()-1&&(m=m.setColumn(A.getHeaderWidth()-1))),this.formatAndApply(r,l,c,d,A,m,P)})}moveColumn(r,l){this.withCompletedTable(l,({range:c,lines:d,formulaLines:C,table:_,focus:m})=>{let A=m,P=_;if(0<=A.column&&A.column<=P.getHeaderWidth()-1){let y=Math.min(Math.max(A.column+r,0),P.getHeaderWidth()-1);P=(0,Le.moveColumn)(P,A.column,y),A=A.setColumn(y)}this.formatAndApply(l,c,d,C,P,A)})}formatAll(r){this._textEditor.transact(()=>{let l=(0,We._createIsTableRowRegex)(r.leftMarginChars),c=this._textEditor.getCursorPosition(),d=[],C,_=this._textEditor.getLastRow();for(let m=0;m<=_;m++){let A=this._textEditor.getLine(m);if(this._textEditor.acceptsTableEdit(m)&&l.test(A))d.push(A),C===void 0&&(C=m);else if(C!==void 0){let P=m-1,y=new J3.Range(new ln.Point(C,0),new ln.Point(P,d[d.length-1].length)),S=(0,Br.readTable)(d,r),V=S.focusOfPosition(c,C),M;if(V!==void 0){let Y=V,se=(0,Le.completeTable)(S,r);se.delimiterInserted&&Y.row>0&&(Y=Y.setRow(Y.row+1));let ge=(0,Le.formatTable)(se.table,r);Y=Y.setOffset((0,We._computeNewOffset)(Y,se.table,ge,!1));let D=ge.table.toLines();this._updateLines(y.start.row,y.end.row+1,D,d),M=D.length-d.length,c=ge.table.positionOfFocus(Y,C)}else{let Y=(0,Le.completeTable)(S,r),ge=(0,Le.formatTable)(Y.table,r).table.toLines();this._updateLines(y.start.row,y.end.row+1,ge,d),M=ge.length-d.length,c.row>P&&(c=new ln.Point(c.row+M,c.column))}d=[],C=void 0,_+=M,m+=M}}if(C!==void 0){let m=_,A=new J3.Range(new ln.Point(C,0),new ln.Point(m,d[d.length-1].length)),P=(0,Br.readTable)(d,r),S=P.focusOfPosition(c,C),V=(0,Le.completeTable)(P,r);V.delimiterInserted&&S.row>0&&(S=S.setRow(S.row+1));let M=(0,Le.formatTable)(V.table,r);S=S.setOffset((0,We._computeNewOffset)(S,V.table,M,!1));let Y=M.table.toLines();this._updateLines(A.start.row,A.end.row+1,Y,d),c=M.table.positionOfFocus(S,C)}this._textEditor.setCursorPosition(c)})}exportTable(r,l){return this.withCompletedTable(l,({range:c,lines:d,formulaLines:C,table:_,focus:m})=>{let A=_.getRows();return A.length>0&&!r&&A.splice(0,2),A.map(P=>P.getCells().map(y=>y.content))})}exportCSV(r,l){let c=this.exportTable(r,l);return c?c.map(d=>d.join(" ")).join(` +`):void 0}withCompletedTable(r,l){return this._withTable(r,c=>{let d=c.focus,C=(0,Le.completeTable)(c.table,r);C.delimiterInserted&&d.row>0&&(d=d.setRow(d.row+1));let _=(0,Le.formatTable)(C.table,r);return d=d.setOffset((0,We._computeNewOffset)(d,C.table,_,!1)),c.table=_.table,c.focus=d,l(c)})}formatAndApply(r,l,c,d,C,_,m=!1){let A=(0,Le.formatTable)(C,r);return _=_.setOffset((0,We._computeNewOffset)(_,C,A,m)),this._textEditor.transact(()=>{this._updateLines(l.start.row,l.end.row+1,A.table.toLines(),c),m?this._selectFocus(l.start.row,A.table,_):this._moveToFocus(l.start.row,A.table,_)}),this.resetSmartCursor(),{range:l,lines:c,formulaLines:d,table:A.table,focus:_}}};We.TableEditor=Q3});var Mi=we(re=>{"use strict";Object.defineProperty(re,"__esModule",{value:!0});re.SortOrder=re.TableEditor=re.optionsWithDefaults=re.defaultOptions=re.ITextEditor=re.shortestEditScript=re.applyEditScript=re.Delete=re.Insert=re.moveColumn=re.deleteColumn=re.insertColumn=re.moveRow=re.deleteRow=re.insertRow=re.alterAlignment=re.formatTable=re.completeTable=re.FormatType=re.readTable=re.Table=re.TableRow=re.TableCell=re.HeaderAlignment=re.DefaultAlignment=re.Alignment=re.Focus=re.Range=re.Point=void 0;var j7=O1();Object.defineProperty(re,"Point",{enumerable:!0,get:function(){return j7.Point}});var ef=P1();Object.defineProperty(re,"Range",{enumerable:!0,get:function(){return ef.Range}});var tf=W1();Object.defineProperty(re,"Focus",{enumerable:!0,get:function(){return tf.Focus}});var j3=vi();Object.defineProperty(re,"Alignment",{enumerable:!0,get:function(){return j3.Alignment}});Object.defineProperty(re,"DefaultAlignment",{enumerable:!0,get:function(){return j3.DefaultAlignment}});Object.defineProperty(re,"HeaderAlignment",{enumerable:!0,get:function(){return j3.HeaderAlignment}});var nf=Pr();Object.defineProperty(re,"TableCell",{enumerable:!0,get:function(){return nf.TableCell}});var rf=_i();Object.defineProperty(re,"TableRow",{enumerable:!0,get:function(){return rf.TableRow}});var of=Ii();Object.defineProperty(re,"Table",{enumerable:!0,get:function(){return of.Table}});var sf=$3();Object.defineProperty(re,"readTable",{enumerable:!0,get:function(){return sf.readTable}});var an=wo();Object.defineProperty(re,"FormatType",{enumerable:!0,get:function(){return an.FormatType}});Object.defineProperty(re,"completeTable",{enumerable:!0,get:function(){return an.completeTable}});Object.defineProperty(re,"formatTable",{enumerable:!0,get:function(){return an.formatTable}});Object.defineProperty(re,"alterAlignment",{enumerable:!0,get:function(){return an.alterAlignment}});Object.defineProperty(re,"insertRow",{enumerable:!0,get:function(){return an.insertRow}});Object.defineProperty(re,"deleteRow",{enumerable:!0,get:function(){return an.deleteRow}});Object.defineProperty(re,"moveRow",{enumerable:!0,get:function(){return an.moveRow}});Object.defineProperty(re,"insertColumn",{enumerable:!0,get:function(){return an.insertColumn}});Object.defineProperty(re,"deleteColumn",{enumerable:!0,get:function(){return an.deleteColumn}});Object.defineProperty(re,"moveColumn",{enumerable:!0,get:function(){return an.moveColumn}});var bo=K3();Object.defineProperty(re,"Insert",{enumerable:!0,get:function(){return bo.Insert}});Object.defineProperty(re,"Delete",{enumerable:!0,get:function(){return bo.Delete}});Object.defineProperty(re,"applyEditScript",{enumerable:!0,get:function(){return bo.applyEditScript}});Object.defineProperty(re,"shortestEditScript",{enumerable:!0,get:function(){return bo.shortestEditScript}});var lf=eu();Object.defineProperty(re,"ITextEditor",{enumerable:!0,get:function(){return lf.ITextEditor}});var lu=ru();Object.defineProperty(re,"defaultOptions",{enumerable:!0,get:function(){return lu.defaultOptions}});Object.defineProperty(re,"optionsWithDefaults",{enumerable:!0,get:function(){return lu.optionsWithDefaults}});var uu=su();Object.defineProperty(re,"TableEditor",{enumerable:!0,get:function(){return uu.TableEditor}});Object.defineProperty(re,"SortOrder",{enumerable:!0,get:function(){return uu.SortOrder}})});var ff={};p9(ff,{default:()=>No});module.exports=m9(ff);var Cl=require("obsidian"),N1={spreadsheet:` + + +`,alignLeft:` + + + + + + + +`,alignCenter:` + + + + + + + +`,alignRight:` + + + + + +`,deleteColumn:` + + + +`,deleteRow:` + + + + +`,insertColumn:` + + + + + + + +`,insertRow:` + + + + + + + +`,moveColumnLeft:` + + + + +`,moveColumnRight:` + + + + +`,moveRowDown:` + + + + +`,moveRowUp:` + + + + +`,transpose:` + + + + +`,sortAsc:` + + + + + + + +`,sortDesc:` + + + + + + + +`,formula:` + + + +`,help:` + + + + +`,csv:` + + +`,arrowenter:` + + +`,arrowtab:` + + +`},vl=()=>{Object.keys(N1).forEach(s=>{s!=="help"&&(0,Cl.addIcon)(s,N1[s])})};var Ao=y1(Mi()),e0={formatType:Ao.FormatType.NORMAL,showRibbonIcon:!0,bindEnter:!0,bindTab:!0},Eo=class{constructor(r){let l={...e0,...r};this.formatType=l.formatType,this.showRibbonIcon=l.showRibbonIcon,this.bindEnter=l.bindEnter,this.bindTab=l.bindTab}asOptions(){return(0,Ao.optionsWithDefaults)({formatType:this.formatType})}};var au=y1(Mi()),To=class{constructor(r,l,c){this.getCursorPosition=()=>{let r=this.editor.getCursor();return new au.Point(r.line,r.ch)};this.setCursorPosition=r=>{this.editor.setCursor({line:r.row,ch:r.column})};this.setSelectionRange=r=>{this.editor.setSelection({line:r.start.row,ch:r.start.column},{line:r.end.row,ch:r.end.column})};this.getLastRow=()=>this.editor.lastLine();this.acceptsTableEdit=r=>{let l=this.app.metadataCache.getFileCache(this.file);if(!l.sections)return!0;let c=l.sections.find(C=>C.position.start.line<=r&&C.position.end.line>=r&&C.type!=="code"&&C.type!=="math");if(c===void 0)return!1;let d=c.position.start.line;return!(d>=0&&this.getLine(d)==="-tx-")};this.getLine=r=>this.editor.getLine(r);this.insertLine=(r,l)=>{r>this.getLastRow()?this.editor.replaceRange(` +`+l,{line:r,ch:0}):this.editor.replaceRange(l+` +`,{line:r,ch:0})};this.deleteLine=r=>{if(r===this.getLastRow()){let l=this.getLine(r);this.editor.replaceRange("",{line:r,ch:0},{line:r,ch:l.length})}else this.editor.replaceRange("",{line:r,ch:0},{line:r+1,ch:0})};this.replaceLines=(r,l,c)=>{let d=l-1,_=this.editor.getLine(d).length;this.editor.replaceRange(c.join(` +`),{line:r,ch:0},{line:d,ch:_})};this.transact=r=>{r()};this.app=r,this.file=l,this.editor=c}};var _n=y1(Mi()),Ro=require("obsidian"),bn=class{constructor(r,l,c,d){this.cursorIsInTableFormula=()=>this.mte.cursorIsInTableFormula(this.settings.asOptions());this.cursorIsInTable=()=>this.mte.cursorIsInTable(this.settings.asOptions());this.nextCell=()=>{this.mte.nextCell(this.settings.asOptions())};this.previousCell=()=>{this.mte.previousCell(this.settings.asOptions())};this.nextRow=()=>{this.mte.nextRow(this.settings.asOptions())};this.formatTable=()=>{this.mte.format(this.settings.asOptions())};this.formatAllTables=()=>{this.mte.formatAll(this.settings.asOptions())};this.insertColumn=()=>{this.mte.insertColumn(this.settings.asOptions())};this.insertRow=()=>{this.mte.insertRow(this.settings.asOptions())};this.leftAlignColumn=()=>{this.mte.alignColumn(_n.Alignment.LEFT,this.settings.asOptions())};this.centerAlignColumn=()=>{this.mte.alignColumn(_n.Alignment.CENTER,this.settings.asOptions())};this.rightAlignColumn=()=>{this.mte.alignColumn(_n.Alignment.RIGHT,this.settings.asOptions())};this.moveColumnLeft=()=>{this.mte.moveColumn(-1,this.settings.asOptions())};this.moveColumnRight=()=>{this.mte.moveColumn(1,this.settings.asOptions())};this.moveRowUp=()=>{this.mte.moveRow(-1,this.settings.asOptions())};this.moveRowDown=()=>{this.mte.moveRow(1,this.settings.asOptions())};this.deleteColumn=()=>{this.mte.deleteColumn(this.settings.asOptions())};this.deleteRow=()=>{this.mte.deleteRow(this.settings.asOptions())};this.sortRowsAsc=()=>{this.mte.sortRows(_n.SortOrder.Ascending,this.settings.asOptions())};this.sortRowsDesc=()=>{this.mte.sortRows(_n.SortOrder.Descending,this.settings.asOptions())};this.transpose=()=>{this.mte.transpose(this.settings.asOptions())};this.escape=()=>{this.mte.escape(this.settings.asOptions())};this.evaluateFormulas=()=>{let r=this.mte.evaluateFormulas(this.settings.asOptions());r&&new Ro.Notice(r.message)};this.exportCSVModal=()=>{new t0(this.app,this.mte,this.settings).open()};this.app=r,this.settings=d;let C=new To(r,l,c);this.mte=new _n.TableEditor(C)}},t0=class extends Ro.Modal{constructor(r,l,c){super(r),this.mte=l,this.settings=c}onOpen(){let{contentEl:r}=this,l=r.createDiv({cls:"advanced-tables-csv-export"}),c=l.createEl("textarea",{attr:{readonly:!0}});c.value=this.mte.exportCSV(!0,this.settings.asOptions()),c.onClickEvent(()=>c.select());let d=l.createEl("label"),C=d.createEl("input",{type:"checkbox",attr:{checked:!0}});d.createSpan().setText("Include table headers"),C.onClickEvent(()=>{c.value=this.mte.exportCSV(C.checked,this.settings.asOptions())})}onClose(){let{contentEl:r}=this;r.empty()}};var zr=require("obsidian"),$r="advanced-tables-toolbar",xo=class extends zr.ItemView{constructor(l,c){super(l);this.draw=()=>{let l=this.containerEl.children[1],c=document.createElement("div");c.addClass("advanced-tables-buttons"),c.createDiv().createSpan({cls:"title"}).setText("Advanced Tables");let d=c.createDiv({cls:"nav-header"}),C=d.createDiv({cls:"nav-buttons-container"});C.createSpan({cls:"advanced-tables-row-label"}).setText("Align:"),this.drawBtn(C,"alignLeft","left align column",y=>y.leftAlignColumn()),this.drawBtn(C,"alignCenter","center align column",y=>y.centerAlignColumn()),this.drawBtn(C,"alignRight","right align column",y=>y.rightAlignColumn());let _=d.createDiv({cls:"nav-buttons-container"});_.createSpan({cls:"advanced-tables-row-label"}).setText("Move:"),this.drawBtn(_,"moveRowDown","move row down",y=>y.moveRowDown()),this.drawBtn(_,"moveRowUp","move row up",y=>y.moveRowUp()),this.drawBtn(_,"moveColumnRight","move column right",y=>y.moveColumnRight()),this.drawBtn(_,"moveColumnLeft","move column left",y=>y.moveColumnLeft()),this.drawBtn(_,"transpose","transpose",y=>y.transpose());let m=d.createDiv({cls:"nav-buttons-container"});m.createSpan({cls:"advanced-tables-row-label"}).setText("Edit:"),this.drawBtn(m,"insertRow","insert row above",y=>y.insertRow()),this.drawBtn(m,"insertColumn","insert column left",y=>y.insertColumn()),this.drawBtn(m,"deleteRow","delete row",y=>y.deleteRow()),this.drawBtn(m,"deleteColumn","delete column",y=>y.deleteColumn());let A=d.createDiv({cls:"nav-buttons-container"});A.createSpan({cls:"advanced-tables-row-label"}).setText("Sort/F:"),this.drawBtn(A,"sortAsc","sort by column ascending",y=>y.sortRowsAsc()),this.drawBtn(A,"sortDesc","sort by column descending",y=>y.sortRowsDesc()),this.drawBtn(A,"formula","evaluate formulas",y=>y.evaluateFormulas());let P=d.createDiv({cls:"nav-buttons-container"});P.createSpan({cls:"advanced-tables-row-label"}).setText("Misc:"),this.drawBtn(P,"csv","export as csv",y=>y.exportCSVModal()),this.drawBtn(P,"help","help",()=>window.open("https://github.com/tgrosinger/advanced-tables-obsidian/blob/main/docs/help.md")),l.empty(),l.appendChild(c)};this.drawBtn=(l,c,d,C)=>{let _=A=>d==="evaluate formulas"?A.cursorIsInTable()||A.cursorIsInTableFormula():A.cursorIsInTable(),m=l.createDiv({cls:"advanced-tables-button nav-action-button",title:d});m.onClickEvent(()=>this.withTE(C,_)),m.appendChild(uf(N1[c]))};this.withTE=(l,c,d=!0)=>{let C,_=this.app.workspace.getMostRecentLeaf();if(_.view instanceof zr.MarkdownView)C=_.view.editor;else{console.warn("Advanced Tables: Unable to determine current editor.");return}let m=new bn(this.app,_.view.file,C,this.settings);if(!c(m)){d&&new zr.Notice("Advanced Tables: Cursor must be in a table.");return}l(m)};this.settings=c}getViewType(){return $r}getDisplayText(){return"Advanced Tables"}getIcon(){return"spreadsheet"}load(){super.load(),this.draw()}},uf=s=>new DOMParser().parseFromString(s,"text/xml").documentElement;var fu=require("@codemirror/state"),hu=require("@codemirror/view"),yo=y1(Mi()),it=require("obsidian"),No=class extends it.Plugin{constructor(){super(...arguments);this.makeEditorExtension=()=>{let l=[];return this.settings.bindEnter&&l.push({key:"Enter",run:()=>this.newPerformTableActionCM6(c=>c.nextRow())(),preventDefault:!0}),this.settings.bindTab&&l.push({key:"Tab",run:()=>this.newPerformTableActionCM6(c=>c.nextCell())(),shift:()=>this.newPerformTableActionCM6(c=>c.previousCell())(),preventDefault:!0}),fu.Prec.highest(hu.keymap.of(l))};this.newPerformTableActionCM6=l=>()=>{let c=this.app.workspace.getActiveViewOfType(it.MarkdownView);if(c){let d=c.currentMode;if("sourceMode"in d&&!d.sourceMode)return!1;let C=new bn(this.app,c.file,c.editor,this.settings);if(C.cursorIsInTable())return l(C),!0}return!1};this.newPerformTableAction=(l,c=!0)=>(d,C,_)=>{let m=new bn(this.app,_.file,C,this.settings);if(d)return m.cursorIsInTable();l(m)};this.handleKeyDown=(l,c)=>{if(["Tab","Enter"].contains(c.key)){let d=this.app.workspace.getActiveViewOfType(it.MarkdownView),C=d?d.editor:null,_=this.newPerformTableAction(m=>{switch(c.key){case"Tab":if(!this.settings.bindTab)return;c.shiftKey?m.previousCell():m.nextCell();break;case"Enter":if(!this.settings.bindEnter)return;if(c.shiftKey)m.escape();else{if(c.ctrlKey||c.metaKey||c.altKey)return;m.nextRow()}break}c.preventDefault()},!1);_(!0,C,d)&&_(!1,C,d)}};this.toggleTableControlsView=async()=>{let l=this.app.workspace.getLeavesOfType($r);if(l.length){this.app.workspace.revealLeaf(l[0]);return}await this.app.workspace.getRightLeaf(!1).setViewState({type:$r,active:!0}),this.app.workspace.revealLeaf(this.app.workspace.getLeavesOfType($r)[0])};this.isMobile=()=>this.app.isMobile}async onload(){console.log("loading markdown-table-editor plugin"),await this.loadSettings(),this.registerView($r,l=>new xo(l,this.settings)),vl(),this.settings.showRibbonIcon&&this.addRibbonIcon("spreadsheet","Advanced Tables Toolbar",()=>{this.toggleTableControlsView()}),this.registerEditorExtension(this.makeEditorExtension()),this.addCommand({id:"next-row",name:"Go to next row",icon:"arrowenter",editorCheckCallback:this.newPerformTableAction(l=>{this.settings.bindEnter&&!this.isMobile&&new it.Notice("Advanced Tables: Next row also bound to enter. Possibly producing double actions. See Advanced Tables settings."),l.nextRow()})}),this.addCommand({id:"next-cell",name:"Go to next cell",icon:"arrowtab",editorCheckCallback:this.newPerformTableAction(l=>{this.settings.bindTab&&!this.isMobile&&new it.Notice("Advanced Tables: Next cell also bound to tab. Possibly producing double actions. See Advanced Tables settings."),l.nextCell()})}),this.addCommand({id:"previous-cell",name:"Go to previous cell",editorCheckCallback:this.newPerformTableAction(l=>{this.settings.bindTab&&!this.isMobile&&new it.Notice("Advanced Tables: Previous cell also bound to shift+tab. Possibly producing double actions. See Advanced Tables settings."),l.previousCell()})}),this.addCommand({id:"format-table",name:"Format table at the cursor",editorCheckCallback:this.newPerformTableAction(l=>{l.formatTable()})}),this.addCommand({id:"format-all-tables",name:"Format all tables in this file",editorCallback:(l,c)=>{new bn(this.app,c.file,l,this.settings).formatAllTables()}}),this.addCommand({id:"insert-column",name:"Insert column before current",icon:"insertColumn",editorCheckCallback:this.newPerformTableAction(l=>{l.insertColumn()})}),this.addCommand({id:"insert-row",name:"Insert row before current",icon:"insertRow",editorCheckCallback:this.newPerformTableAction(l=>{l.insertRow()})}),this.addCommand({id:"escape-table",name:"Move cursor out of table",editorCheckCallback:this.newPerformTableAction(l=>{l.escape()})}),this.addCommand({id:"left-align-column",name:"Left align column",icon:"alignLeft",editorCheckCallback:this.newPerformTableAction(l=>{l.leftAlignColumn()})}),this.addCommand({id:"center-align-column",name:"Center align column",icon:"alignCenter",editorCheckCallback:this.newPerformTableAction(l=>{l.centerAlignColumn()})}),this.addCommand({id:"right-align-column",name:"Right align column",icon:"alignRight",editorCheckCallback:this.newPerformTableAction(l=>{l.rightAlignColumn()})}),this.addCommand({id:"move-column-left",name:"Move column left",icon:"moveColumnLeft",editorCheckCallback:this.newPerformTableAction(l=>{l.moveColumnLeft()})}),this.addCommand({id:"move-column-right",name:"Move column right",icon:"moveColumnRight",editorCheckCallback:this.newPerformTableAction(l=>{l.moveColumnRight()})}),this.addCommand({id:"move-row-up",name:"Move row up",icon:"moveRowUp",editorCheckCallback:this.newPerformTableAction(l=>{l.moveRowUp()})}),this.addCommand({id:"move-row-down",name:"Move row down",icon:"moveRowDown",editorCheckCallback:this.newPerformTableAction(l=>{l.moveRowDown()})}),this.addCommand({id:"delete-column",name:"Delete column",icon:"deleteColumn",editorCheckCallback:this.newPerformTableAction(l=>{l.deleteColumn()})}),this.addCommand({id:"delete-row",name:"Delete row",icon:"deleteRow",editorCheckCallback:this.newPerformTableAction(l=>{l.deleteRow()})}),this.addCommand({id:"sort-rows-ascending",name:"Sort rows ascending",icon:"sortAsc",editorCheckCallback:this.newPerformTableAction(l=>{l.sortRowsAsc()})}),this.addCommand({id:"sort-rows-descending",name:"Sort rows descending",icon:"sortDesc",editorCheckCallback:this.newPerformTableAction(l=>{l.sortRowsDesc()})}),this.addCommand({id:"transpose",name:"Transpose",icon:"transpose",editorCheckCallback:this.newPerformTableAction(l=>{l.transpose()})}),this.addCommand({id:"evaluate-formulas",name:"Evaluate table formulas",icon:"formula",editorCheckCallback:(l,c,d)=>{let C=new bn(this.app,d.file,c,this.settings);if(l)return C.cursorIsInTable()||C.cursorIsInTableFormula();C.evaluateFormulas()}}),this.addCommand({id:"table-control-bar",name:"Open table controls toolbar",hotkeys:[{modifiers:["Mod","Shift"],key:"d"}],callback:()=>{this.toggleTableControlsView()}}),this.addSettingTab(new n0(this.app,this))}async loadSettings(){let l=Object.assign(e0,await this.loadData());this.settings=new Eo(l),this.saveData(this.settings)}},n0=class extends it.PluginSettingTab{constructor(r,l){super(r,l),this.plugin=l}display(){let{containerEl:r}=this;r.empty(),new it.Setting(r).setName("Bind enter to table navigation").setDesc('Requires restart of Obsidian. If enabled, when the cursor is in a table, enter advances to the next row. Disabling this can help avoid conflicting with tag or CJK autocompletion. If disabling, bind "Go to ..." in the Obsidian Hotkeys settings.').addToggle(C=>C.setValue(this.plugin.settings.bindEnter).onChange(_=>{this.plugin.settings.bindEnter=_,this.plugin.saveData(this.plugin.settings),this.display()})),new it.Setting(r).setName("Bind tab to table navigation").setDesc('Requires restart of Obsidian. If enabled, when the cursor is in a table, tab/shift+tab navigate between cells. Disabling this can help avoid conflicting with tag or CJK autocompletion. If disabling, bind "Go to ..." in the Obsidian Hotkeys settings.').addToggle(C=>C.setValue(this.plugin.settings.bindTab).onChange(_=>{this.plugin.settings.bindTab=_,this.plugin.saveData(this.plugin.settings),this.display()})),new it.Setting(r).setName("Pad cell width using spaces").setDesc("If enabled, table cells will have spaces added to match the width of the longest cell in the column.").addToggle(C=>C.setValue(this.plugin.settings.formatType===yo.FormatType.NORMAL).onChange(_=>{this.plugin.settings.formatType=_?yo.FormatType.NORMAL:yo.FormatType.WEAK,this.plugin.saveData(this.plugin.settings),this.display()})),new it.Setting(r).setName("Show icon in sidebar").setDesc("If enabled, a button which opens the table controls toolbar will be added to the Obsidian sidebar. The toolbar can also be opened with a Hotkey. Changes only take effect on reload.").addToggle(C=>C.setValue(this.plugin.settings.showRibbonIcon).onChange(_=>{this.plugin.settings.showRibbonIcon=_,this.plugin.saveData(this.plugin.settings),this.display()}));let l=r.createEl("div",{cls:"advanced-tables-donation"}),c=document.createElement("p");c.appendText("If this plugin adds value for you and you would like to help support continued development, please use the buttons below:"),l.appendChild(c);let d=new DOMParser;l.appendChild(cu("https://paypal.me/tgrosinger",d.parseFromString(cf,"text/xml").documentElement)),l.appendChild(cu("https://www.buymeacoffee.com/tgrosinger",d.parseFromString(af,"text/xml").documentElement))}},cu=(s,r)=>{let l=document.createElement("a");return l.setAttribute("href",s),l.addClass("advanced-tables-donate-button"),l.appendChild(r),l},af=` + + + + + + + + + + + + + + + + + + + + + +`,cf=` + + + + + + + +`; +/*! Bundled license information: + +decimal.js/decimal.js: + (*! + * decimal.js v10.4.3 + * An arbitrary-precision Decimal type for JavaScript. + * https://github.com/MikeMcl/decimal.js + * Copyright (c) 2022 Michael Mclaughlin + * MIT Licence + *) + +lodash/lodash.js: + (** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + *) +*/ + +/* nosourcemap */ \ No newline at end of file diff --git a/content/notes/.obsidian/plugins/table-editor-obsidian/manifest.json b/content/notes/.obsidian/plugins/table-editor-obsidian/manifest.json new file mode 100644 index 0000000..cc84eb7 --- /dev/null +++ b/content/notes/.obsidian/plugins/table-editor-obsidian/manifest.json @@ -0,0 +1,17 @@ +{ + "id": "table-editor-obsidian", + "name": "Advanced Tables", + "author": "Tony Grosinger", + "authorUrl": "https://grosinger.net", + "description": "Improved table navigation, formatting, manipulation, and formulas", + "isDesktopOnly": false, + "minAppVersion": "1.0.0", + "version": "0.22.1", + "js": "main.js", + "fundingUrl": { + "Github Sponsor": "https://github.com/sponsors/tgrosinger", + "Buy me a Coffee": "https://buymeacoffee.com/tgrosinger", + "Paypal": "https://paypal.me/tgrosinger" + }, + "donation": "https://buymeacoffee.com/tgrosinger" +} diff --git a/content/notes/.obsidian/plugins/table-editor-obsidian/styles.css b/content/notes/.obsidian/plugins/table-editor-obsidian/styles.css new file mode 100644 index 0000000..089b8cd --- /dev/null +++ b/content/notes/.obsidian/plugins/table-editor-obsidian/styles.css @@ -0,0 +1,78 @@ +:root { + --advanced-tables-helper-size: 28px; +} + +.HyperMD-table-row span.cm-inline-code { + font-size: 100%; + padding: 0px; +} + +.advanced-tables-buttons>div>.title { + font-weight: var(--font-medium); + font-size: var(--nav-item-size); + color: var(--nav-item-color); + text-decoration: underline; +} + +[data-type="advanced-tables-toolbar"] .nav-buttons-container { + column-gap: 0.2rem; + margin: 0.2rem 0 0.2rem 0; + justify-content: start; +} + +[data-type="advanced-tables-toolbar"] .nav-buttons-container::before { + min-width: 2.6rem; + line-height: var(--advanced-tables-helper-size); + font-size: var(--nav-item-size); + font-weight: var(--nav-item-weight); + color: var(--nav-item-color); +} + +[data-type="advanced-tables-toolbar"] .nav-buttons-container>* { + height: var(--advanced-tables-helper-size); + line-height: var(--advanced-tables-helper-size); +} + +[data-type="advanced-tables-toolbar"] .nav-buttons-container .nav-action-button { + width: var(--advanced-tables-helper-size); + height: var(--advanced-tables-helper-size); + display: flex; + justify-content: center; + align-items: center; + border-radius: var(--radius-s); +} + +[data-type="advanced-tables-toolbar"] .nav-buttons-container .nav-action-button:hover { + background-color: var(--nav-item-background-hover); + color: var(--nav-item-color-hover); + font-weight: var(--nav-item-weight-hover); +} + +.advanced-tables-row-label { + width: 50px; +} + +.widget-icon { + width: 20px; + height: 20px; + fill: var(--text-muted); +} + +.widget-icon:hover { + fill: var(--text-normal); +} + +.advanced-tables-csv-export textarea { + height: 200px; + width: 100%; +} + +.advanced-tables-donation { + width: 70%; + margin: 0 auto; + text-align: center; +} + +.advanced-tables-donate-button { + margin: 10px; +} \ No newline at end of file diff --git a/content/notes/.obsidian/themes/Adwaita/manifest.json b/content/notes/.obsidian/themes/Adwaita/manifest.json new file mode 100644 index 0000000..abb2424 --- /dev/null +++ b/content/notes/.obsidian/themes/Adwaita/manifest.json @@ -0,0 +1,7 @@ +{ + "name": "Adwaita", + "version": "0.5.0", + "minAppVersion": "1.0.0", + "author": "@birneee", + "authorUrl": "https://github.com/birneee" +} diff --git a/content/notes/.obsidian/themes/Adwaita/theme.css b/content/notes/.obsidian/themes/Adwaita/theme.css new file mode 100644 index 0000000..d6e2fc5 --- /dev/null +++ b/content/notes/.obsidian/themes/Adwaita/theme.css @@ -0,0 +1,744 @@ +/* This file is generated; DO NOT EDIT. */ +/* @settings + +name: Adwaita +id: com-github-birneee-obsidian-adwaita +settings: + - + title: Window Buttons + description: Style of minimize, maximize and close window buttons + type: heading + level: 2 + collapsed: false + - + id: adwaita-mod + title: Enable + description: Whether to use the Adwaita style window buttons + type: class-select + default: adwaita-mod-linux-only + allowEmpty: false + options: + - + label: Always + value: adwaita-mod-always + - + label: Linux Only + value: adwaita-mod-linux-only + - + label: Never + value: adwaita-mod-never + - + id: adwaita-mod-scale + title: Scale + description: + type: variable-number + default: 1 + - + id: adwaita-mod-right-margin + title: Right Margin + type: variable-number + default: 8 + format: px + - + id: adwaita-window-button-minimize-hide + title: Hide minimize button + type: class-toggle + - + id: adwaita-window-button-maximize-hide + title: Hide maximize button + type: class-toggle + - + id: adwaita-window-button-close-hide + title: Hide close button + type: class-toggle + + - + title: Tabs + type: heading + level: 2 + collapsed: false + - + id: adwaita-tabs + title: Enable + description: Whether to use the Adwaita style tabs + type: class-select + default: adwaita-tabs-linux-only + allowEmpty: false + options: + - + label: Always + value: adwaita-tabs-always + - + label: Linux Only + value: adwaita-tabs-linux-only + - + label: Never + value: adwaita-tabs-never + - + id: adwaita-tabs-short + title: Short + type: class-toggle + + - + title: Colors + type: heading + level: 2 + collapsed: false + - + id: adwaita-colors + title: Enable + description: Whether to use the Adwaita colors + type: class-select + default: adwaita-colors-linux-only + allowEmpty: false + options: + - + label: Always + value: adwaita-colors-always + - + label: Linux Only + value: adwaita-colors-linux-only + - + label: Never + value: adwaita-colors-never + + - + title: Font + type: heading + level: 2 + collapsed: false + - + id: adwaita-font + title: Enable + description: Whether to use the Cantarell font (must be installed on system) + type: class-select + default: adwaita-font-linux-only + allowEmpty: false + options: + - + label: Always + value: adwaita-font-always + - + label: Linux Only + value: adwaita-font-linux-only + - + label: Never + value: adwaita-font-never + + - + title: Icons + type: heading + level: 2 + collapsed: false + - + id: adwaita-icon + title: Enable + description: Whether to use the Adwaita icons + type: class-select + default: adwaita-icons-linux-only + allowEmpty: false + options: + - + label: Always + value: adwaita-icons-always + - + label: Linux Only + value: adwaita-icons-linux-only + - + label: Never + value: adwaita-icons-never +*/ +:root { + --adwaita-mod-scale: 1; + --adwaita-mod-right-margin: 8px; + /* TODO window radius */ } + +:root { + --adwaita-icon-folder-saved-search-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBkPSJtIDYuNjA1NDY5IDAuMDU4NTkzOCBjIC0zLjU3ODEyNSAwIC02LjUgMi45MjE4NzUyIC02LjUgNi41MDAwMDAyIHMgMi45MjE4NzUgNi40OTYwOTQgNi41IDYuNDk2MDk0IGMgMS40Mjk2ODcgMCAyLjc1MzkwNiAtMC40NjQ4NDQgMy44MjgxMjUgLTEuMjUzOTA3IGwgMi45NzI2NTYgMi45NzI2NTcgYyAwLjk1NzAzMSAwLjk0MTQwNiAyLjM2MzI4MSAtMC40OTYwOTQgMS40MDYyNSAtMS40Mzc1IGwgLTIuOTU3MDMxIC0yLjk1NzAzMiBjIDAuNzgxMjUgLTEuMDc0MjE4IDEuMjUgLTIuMzk0NTMxIDEuMjUgLTMuODIwMzEyIGMgMCAtMy41NzgxMjUgLTIuOTI1NzgxIC02LjUwMDAwMDIgLTYuNSAtNi41MDAwMDAyIHogbSAwIDIuMDAwMDAwMiBjIDIuNDk2MDkzIDAgNC41IDIuMDAzOTA2IDQuNSA0LjUgcyAtMi4wMDM5MDcgNC40OTYwOTQgLTQuNSA0LjQ5NjA5NCBjIC0yLjUgMCAtNC41IC0yIC00LjUgLTQuNDk2MDk0IHMgMiAtNC41IDQuNSAtNC41IHogbSAwIDAiIGZpbGw9IiMyZTM0MzYiLz4KPC9zdmc+Cg=="); + --adwaita-icon-folder-visiting-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBkPSJtIDMgMSBjIC0xLjY0NDUzMSAwIC0zIDEuMzU1NDY5IC0zIDMgdiA4IGMgMCAxLjY0NDUzMSAxLjM1NTQ2OSAzIDMgMyBoIDEwIGMgMS42NDQ1MzEgMCAzIC0xLjM1NTQ2OSAzIC0zIHYgLTYgYyAwIC0xLjY0NDUzMSAtMS4zNTU0NjkgLTMgLTMgLTMgaCAtMy41ODU5MzggbCAtMS43MDcwMzEgLTEuNzA3MDMxIGMgLTAuMTg3NSAtMC4xODc1IC0wLjQ0MTQwNiAtMC4yOTI5NjkgLTAuNzA3MDMxIC0wLjI5Mjk2OSB6IG0gMCAyIGggMy41ODU5MzggbCAxLjcwNzAzMSAxLjcwNzAzMSBjIDAuMTg3NSAwLjE4NzUgMC40NDE0MDYgMC4yOTI5NjkgMC43MDcwMzEgMC4yOTI5NjkgaCA0IGMgMC41NjI1IDAgMSAwLjQzNzUgMSAxIHYgNiBjIDAgMC41NjY0MDYgLTAuNDM3NSAxIC0xIDEgaCAtMTAgYyAtMC41NjI1IDAgLTEgLTAuNDMzNTk0IC0xIC0xIHYgLTggYyAwIC0wLjU2MjUgMC40Mzc1IC0xIDEgLTEgeiBtIDAgMCIgZmlsbD0iIzJlMzQzNiIvPgo8L3N2Zz4K"); + --adwaita-icon-go-down-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBkPSJtIDEgNSBjIDAgLTAuMjY1NjI1IDAuMTA1NDY5IC0wLjUxOTUzMSAwLjI5Mjk2OSAtMC43MDcwMzEgYyAwLjM5MDYyNSAtMC4zOTA2MjUgMS4wMjM0MzcgLTAuMzkwNjI1IDEuNDE0MDYyIDAgbCA1LjI5Mjk2OSA1LjI5Mjk2OSBsIDUuMjkyOTY5IC01LjI5Mjk2OSBjIDAuMzkwNjI1IC0wLjM5MDYyNSAxLjAyMzQzNyAtMC4zOTA2MjUgMS40MTQwNjIgMCBjIDAuMTg3NSAwLjE4NzUgMC4yOTI5NjkgMC40NDE0MDYgMC4yOTI5NjkgMC43MDcwMzEgcyAtMC4xMDU0NjkgMC41MTk1MzEgLTAuMjkyOTY5IDAuNzA3MDMxIGwgLTYgNiBjIC0wLjM5MDYyNSAwLjM5MDYyNSAtMS4wMjM0MzcgMC4zOTA2MjUgLTEuNDE0MDYyIDAgbCAtNiAtNiBjIC0wLjE4NzUgLTAuMTg3NSAtMC4yOTI5NjkgLTAuNDQxNDA2IC0wLjI5Mjk2OSAtMC43MDcwMzEgeiBtIDAgMCIgZmlsbD0iIzJlMzQzNiIvPgo8L3N2Zz4K"); + --adwaita-icon-sidebar-show-right-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBmaWxsPSIjMmUzNDM2Ij4KICAgICAgICA8cGF0aCBkPSJtIDkuNSAxNCB2IC0xMiBoIDUgdiAxMiB6IG0gMCAwIiBmaWxsLW9wYWNpdHk9IjAuMzQ5MDIiLz4KICAgICAgICA8cGF0aCBkPSJtIDEzIDEgYyAxLjY0NDUzMSAwIDMgMS4zNTU0NjkgMyAzIHYgOCBjIDAgMS42NDQ1MzEgLTEuMzU1NDY5IDMgLTMgMyBoIC0xMCBjIC0xLjY0NDUzMSAwIC0zIC0xLjM1NTQ2OSAtMyAtMyB2IC04IGMgMCAtMS42NDQ1MzEgMS4zNTU0NjkgLTMgMyAtMyB6IG0gMCAyIGggLTEwIGMgLTAuNTcwMzEyIDAgLTEgMC40Mjk2ODggLTEgMSB2IDggYyAwIDAuNTcwMzEyIDAuNDI5Njg4IDEgMSAxIGggMTAgYyAwLjU3MDMxMiAwIDEgLTAuNDI5Njg4IDEgLTEgdiAtOCBjIDAgLTAuNTcwMzEyIC0wLjQyOTY4OCAtMSAtMSAtMSB6IG0gMCAwIi8+CiAgICAgICAgPHBhdGggZD0ibSAxMCAyIGggLTEgdiAxMiBoIDEgeiBtIDAgMCIvPgogICAgPC9nPgo8L3N2Zz4K"); + --adwaita-icon-sidebar-show-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBmaWxsPSIjMmUzNDM2Ij4KICAgICAgICA8cGF0aCBkPSJtIDYuNSAxNCB2IC0xMiBoIC01IHYgMTIgeiBtIDAgMCIgZmlsbC1vcGFjaXR5PSIwLjM0OTAyIi8+CiAgICAgICAgPHBhdGggZD0ibSAzIDEgYyAtMS42NDQ1MzEgMCAtMyAxLjM1NTQ2OSAtMyAzIHYgOCBjIDAgMS42NDQ1MzEgMS4zNTU0NjkgMyAzIDMgaCAxMCBjIDEuNjQ0NTMxIDAgMyAtMS4zNTU0NjkgMyAtMyB2IC04IGMgMCAtMS42NDQ1MzEgLTEuMzU1NDY5IC0zIC0zIC0zIHogbSAwIDIgaCAxMCBjIDAuNTcwMzEyIDAgMSAwLjQyOTY4OCAxIDEgdiA4IGMgMCAwLjU3MDMxMiAtMC40Mjk2ODggMSAtMSAxIGggLTEwIGMgLTAuNTcwMzEyIDAgLTEgLTAuNDI5Njg4IC0xIC0xIHYgLTggYyAwIC0wLjU3MDMxMiAwLjQyOTY4OCAtMSAxIC0xIHogbSAwIDAiLz4KICAgICAgICA8cGF0aCBkPSJtIDYgMiBoIDEgdiAxMiBoIC0xIHogbSAwIDAiLz4KICAgIDwvZz4KPC9zdmc+Cg=="); + --adwaita-icon-tab-new-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8ZyBmaWxsPSIjMmUzNDM2Ij4KICAgICAgICA8cGF0aCBkPSJtIDMgMCBjIC0xLjY0NDUzMSAwIC0zIDEuMzU1NDY5IC0zIDMgdiAxMCBjIDAgMS42NDQ1MzEgMS4zNTU0NjkgMyAzIDMgaCAxMCBjIDEuNjQ0NTMxIDAgMyAtMS4zNTU0NjkgMyAtMyB2IC0xMCBjIDAgLTEuNjQ0NTMxIC0xLjM1NTQ2OSAtMyAtMyAtMyB6IG0gMCAyIGggMTAgYyAwLjU3MDMxMiAwIDEgMC40Mjk2ODggMSAxIHYgMTAgYyAwIDAuNTcwMzEyIC0wLjQyOTY4OCAxIC0xIDEgaCAtMTAgYyAtMC41NzAzMTIgMCAtMSAtMC40Mjk2ODggLTEgLTEgdiAtMTAgYyAwIC0wLjU3MDMxMiAwLjQyOTY4OCAtMSAxIC0xIHogbSAwIDAiLz4KICAgICAgICA8cGF0aCBkPSJtIDQgNyBoIDggdiAyIGggLTggeiBtIDAgMCIvPgogICAgICAgIDxwYXRoIGQ9Im0gOSA0IHYgOCBoIC0yIHYgLTggeiBtIDAgMCIvPgogICAgPC9nPgo8L3N2Zz4K"); + --adwaita-icon-view-more-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBkPSJtIDcuOTk2MDk0IDAgYyAtMS4xMDU0NjkgMCAtMiAwLjg5NDUzMSAtMiAyIHMgMC44OTQ1MzEgMiAyIDIgYyAxLjEwMTU2MiAwIDIgLTAuODk0NTMxIDIgLTIgcyAtMC44OTg0MzggLTIgLTIgLTIgeiBtIDAgNiBjIC0xLjEwNTQ2OSAwIC0yIDAuODk0NTMxIC0yIDIgcyAwLjg5NDUzMSAyIDIgMiBjIDEuMTAxNTYyIDAgMiAtMC44OTQ1MzEgMiAtMiBzIC0wLjg5ODQzOCAtMiAtMiAtMiB6IG0gMCA2IGMgLTEuMTA1NDY5IDAgLTIgMC44OTQ1MzEgLTIgMiBzIDAuODk0NTMxIDIgMiAyIGMgMS4xMDE1NjIgMCAyIC0wLjg5NDUzMSAyIC0yIHMgLTAuODk4NDM4IC0yIC0yIC0yIHogbSAwIDAiIGZpbGw9IiMyZTM0MzYiLz4KPC9zdmc+Cg=="); + --adwaita-icon-window-close-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBkPSJtIDQgNCBoIDEgaCAwLjAzMTI1IGMgMC4yNTM5MDYgMC4wMTE3MTkgMC41MTE3MTkgMC4xMjg5MDYgMC42ODc1IDAuMzEyNSBsIDIuMjgxMjUgMi4yODEyNSBsIDIuMzEyNSAtMi4yODEyNSBjIDAuMjY1NjI1IC0wLjIzMDQ2OSAwLjQ0NTMxMiAtMC4zMDQ2ODggMC42ODc1IC0wLjMxMjUgaCAxIHYgMSBjIDAgMC4yODUxNTYgLTAuMDM1MTU2IDAuNTUwNzgxIC0wLjI1IDAuNzUgbCAtMi4yODEyNSAyLjI4MTI1IGwgMi4yNSAyLjI1IGMgMC4xODc1IDAuMTg3NSAwLjI4MTI1IDAuNDUzMTI1IDAuMjgxMjUgMC43MTg3NSB2IDEgaCAtMSBjIC0wLjI2NTYyNSAwIC0wLjUzMTI1IC0wLjA5Mzc1IC0wLjcxODc1IC0wLjI4MTI1IGwgLTIuMjgxMjUgLTIuMjgxMjUgbCAtMi4yODEyNSAyLjI4MTI1IGMgLTAuMTg3NSAwLjE4NzUgLTAuNDUzMTI1IDAuMjgxMjUgLTAuNzE4NzUgMC4yODEyNSBoIC0xIHYgLTEgYyAwIC0wLjI2NTYyNSAwLjA5Mzc1IC0wLjUzMTI1IDAuMjgxMjUgLTAuNzE4NzUgbCAyLjI4MTI1IC0yLjI1IGwgLTIuMjgxMjUgLTIuMjgxMjUgYyAtMC4yMTA5MzggLTAuMTk1MzEyIC0wLjMwNDY4OCAtMC40Njg3NSAtMC4yODEyNSAtMC43NSB6IG0gMCAwIiBmaWxsPSIjMmUzNDM2Ii8+Cjwvc3ZnPgo="); + --adwaita-icon-window-maximize-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBkPSJtIDMuOTg4MjgxIDMuOTkyMTg4IHYgOC4wMTE3MTggaCA4LjAxMTcxOSB2IC04LjAxMTcxOCB6IG0gMiAyIGggNC4wMTE3MTkgdiA0LjAxMTcxOCBoIC00LjAxMTcxOSB6IG0gMCAwIiBmaWxsPSIjMmUzNDM2Ii8+Cjwvc3ZnPgo="); + --adwaita-icon-window-minimize-symbolic: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBoZWlnaHQ9IjE2cHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2cHgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBkPSJtIDQgMTAuMDA3ODEyIGggOCB2IDEuOTg4MjgyIGggLTggeiBtIDAgMCIgZmlsbD0iIzJlMzQzNiIvPgo8L3N2Zz4K"); } + +body { + --adwaita-blue-1: #99c1f1; + --adwaita-blue-2: #62a0ea; + --adwaita-blue-3: #3584e4; + --adwaita-blue-4: #1c71d8; + --adwaita-blue-5: #1a5fb4; + --adwaita-green-1: #8ff0a4; + --adwaita-green-2: #57e389; + --adwaita-green-3: #33d17a; + --adwaita-green-4: #2ec27e; + --adwaita-green-5: #26a269; + --adwaita-yellow-1: #f9f06b; + --adwaita-yellow-2: #f8e45c; + --adwaita-yellow-3: #f6d32d; + --adwaita-yellow-4: #f5c211; + --adwaita-yellow-5: #e5a50a; + --adwaita-orange-1: #ffbe6f; + --adwaita-orange-2: #ffa348; + --adwaita-orange-3: #ff7800; + --adwaita-orange-4: #e66100; + --adwaita-orange-5: #c64600; + --adwaita-red-1: #f66151; + --adwaita-red-2: #ed333b; + --adwaita-red-3: #e01b24; + --adwaita-red-4: #c01c28; + --adwaita-red-5: #a51d2d; + --adwaita-purple-1: #dc8add; + --adwaita-purple-2: #c061cb; + --adwaita-purple-3: #9141ac; + --adwaita-purple-4: #813d9c; + --adwaita-purple-5: #613583; + --adwaita-brown-2: #b5835a; + --adwaita-brown-1: #cdab8f; + --adwaita-brown-3: #986a44; + --adwaita-brown-4: #865e3c; + --adwaita-brown-5: #63452c; + --adwaita-light-1: #ffffff; + --adwaita-light-2: #f6f5f4; + --adwaita-light-3: #deddda; + --adwaita-light-4: #c0bfbc; + --adwaita-light-5: #9a9996; + --adwaita-dark-1: #77767b; + --adwaita-dark-2: #5e5c64; + --adwaita-dark-3: #3d3846; + --adwaita-dark-4: #241f31; + --adwaita-dark-5: #000000; } + body.theme-dark { + --adwaita-accent-color: #78aeed; + --adwaita-accent-bg-color: #3584e4; + --adwaita-accent-fg-color: #ffffff; + --adwaita-destructive-color: #ff7b63; + --adwaita-destructive-bg-color: #c01c28; + --adwaita-destructive-fg-color: #ffffff; + --adwaita-success-color: #8ff0a4; + --adwaita-success-bg-color: #26a269; + --adwaita-success-fg-color: #ffffff; + --adwaita-warning-color: #f8e45c; + --adwaita-warning-bg-color: #cd9309; + --adwaita-warning-fg-color: rgba(0, 0, 0, 0.8); + --adwaita-error-color: #ff7b63; + --adwaita-error-bg-color: #c01c28; + --adwaita-error-fg-color: #ffffff; + --adwaita-window-bg-color: #242424; + --adwaita-window-fg-color: #ffffff; + --adwaita-view-bg-color: #1e1e1e; + --adwaita-view-fg-color: #ffffff; + --adwaita-headerbar-bg-color: #303030; + --adwaita-headerbar-fg-color: #ffffff; + --adwaita-headerbar-border-color: #ffffff; + --adwaita-headerbar-backdrop-color: #242424; + --adwaita-headerbar-shade-color: rgba(0, 0, 0, 0.36); + --adwaita-card-bg-color: rgba(255, 255, 255, 0.08); + --adwaita-card-fg-color: #ffffff; + --adwaita-card-shade-color: rgba(0, 0, 0, 0.36); + --adwaita-dialog-bg-color: #383838; + --adwaita-dialog-fg-color: #ffffff; + --adwaita-popover-bg-color: #383838; + --adwaita-popover-fg-color: #ffffff; + --adwaita-popover-shader-color: rgba(0, 0, 0, 0.36); + --adwaita-shade-color: rgba(0, 0, 0, 0.36); + --adwaita-scrollbar-outline-color: rgba(0, 0, 0, 0.5); } + body.theme-light { + --adwaita-accent-color: #1c71d8; + --adwaita-accent-bg-color: #3584e4; + --adwaita-accent-fg-color: #ffffff; + --adwaita-destructive-color: #c01c28; + --adwaita-destructive-bg-color: #e01b24; + --adwaita-destructive-fg-color: #ffffff; + --adwaita-success-color: #1b8553; + --adwaita-success-bg-color: #2ec27e; + --adwaita-success-fg-color: #ffffff; + --adwaita-warning-color: #9c6e03; + --adwaita-warning-bg-color: #e5a50a; + --adwaita-warning-fg-color: rgba(0, 0, 0, 0.8); + --adwaita-error-color: #c01c28; + --adwaita-error-bg-color: #e01b24; + --adwaita-error-fg-color: #ffffff; + --adwaita-window-bg-color: #fafafa; + --adwaita-window-fg-color: rgba(0, 0, 0, 0.8); + --adwaita-view-bg-color: #ffffff; + --adwaita-view-fg-color: rgba(0, 0, 0, 0.8); + --adwaita-headerbar-bg-color: #ffffff; + --adwaita-headerbar-fg-color: rgba(0, 0, 0, 0.8); + --adwaita-headerbar-border-color: rgba(0, 0, 0, 0.8); + --adwaita-headerbar-backdrop-color: #fafafa; + --adwaita-headerbar-shade-color: rgba(0, 0, 0, 0.12); + --adwaita-card-bg-color: #ffffff; + --adwaita-card-fg-color: rgba(0, 0, 0, 0.8); + --adwaita-card-shade-color: rgba(0, 0, 0, 0.07); + --adwaita-dialog-bg-color: #ffffff; + --adwaita-dialog-fg-color: rgba(0, 0, 0, 0.8); + --adwaita-popover-bg-color: #fafafa; + --adwaita-popover-fg-color: rgba(0, 0, 0, 0.8); + --adwaita-popover-shader-color: rgba(0, 0, 0, 0.07); + --adwaita-shade-color: rgba(0, 0, 0, 0.07); + --adwaita-scrollbar-outline-color: #ffffff; } + +body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux, +body.adwaita-colors-always, +body.adwaita-colors-linux-only.mod-linux { + --titlebar-background: var(--adwaita-headerbar-backdrop-color); + --titlebar-background-focused: var(--adwaita-headerbar-bg-color); + --titlebar-text-color-focused: var(--adwaita-headerbar-fg-color); + --text-normal: var(--adwaita-view-fg-color); } + body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux.is-focused .workspace-tabs.mod-top .workspace-tab-header-container, + body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux.is-focused .sidebar-toggle-button, + body.adwaita-colors-always.is-focused .workspace-tabs.mod-top .workspace-tab-header-container, + body.adwaita-colors-always.is-focused .sidebar-toggle-button, + body.adwaita-colors-linux-only.mod-linux.is-focused .workspace-tabs.mod-top .workspace-tab-header-container, + body.adwaita-colors-linux-only.mod-linux.is-focused .sidebar-toggle-button { + --icon-color: var(--adwaita-headerbar-fg-color); + --icon-color-hover: var(--adwaita-headerbar-fg-color); + --icon-color-focused: var(--adwaita-headerbar-fg-color); + --tab-text-color-focused: var(--adwaita-headerbar-fg-color); + --tab-text-color-focused-active-current: var(--adwaita-headerbar-fg-color); } + body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux.theme-dark, + body.adwaita-colors-always.theme-dark, + body.adwaita-colors-linux-only.mod-linux.theme-dark { + --titlebar-text-color: #919191; + --icon-color: #929292; + --icon-color-hover: #929292; + --icon-color-focused: #929292; + --tab-text-color: #929292; + --tab-text-color-focused: #8a8a8a; + --tab-text-color-focused-active-current: #8a8a8a; + --background-modifier-hover: #323232; } + body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux.theme-dark.is-focused .workspace-tabs.mod-top .workspace-tab-header-container, + body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux.theme-dark.is-focused .sidebar-toggle-button, + body.adwaita-colors-always.theme-dark.is-focused .workspace-tabs.mod-top .workspace-tab-header-container, + body.adwaita-colors-always.theme-dark.is-focused .sidebar-toggle-button, + body.adwaita-colors-linux-only.mod-linux.theme-dark.is-focused .workspace-tabs.mod-top .workspace-tab-header-container, + body.adwaita-colors-linux-only.mod-linux.theme-dark.is-focused .sidebar-toggle-button { + --background-modifier-hover: #464646; } + body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux.theme-light, + body.adwaita-colors-always.theme-light, + body.adwaita-colors-linux-only.mod-linux.theme-light { + --titlebar-text-color: #8c8c8c; + --icon-color: #939393; + --icon-color-hover: #939393; + --icon-color-focused: #939393; + --tab-text-color: #939393; + --tab-text-color-focused: #939393; + --tab-text-color-focused-active-current: #939393; + --background-modifier-hover: #f0f0f0; } + body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux.theme-light.is-focused .workspace-tabs.mod-top .workspace-tab-header-container, + body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux.theme-light.is-focused .sidebar-toggle-button, + body.adwaita-colors-always.theme-light.is-focused .workspace-tabs.mod-top .workspace-tab-header-container, + body.adwaita-colors-always.theme-light.is-focused .sidebar-toggle-button, + body.adwaita-colors-linux-only.mod-linux.theme-light.is-focused .workspace-tabs.mod-top .workspace-tab-header-container, + body.adwaita-colors-linux-only.mod-linux.theme-light.is-focused .sidebar-toggle-button { + --background-modifier-hover: #d8d8d8; } + body:not(.adwaita-colors-always, .adwaita-colors-linux-only, .adwaita-colors-never).mod-linux .titlebar-button.mod-logo:hover, + body.adwaita-colors-always .titlebar-button.mod-logo:hover, + body.adwaita-colors-linux-only.mod-linux .titlebar-button.mod-logo:hover { + background-color: inherit; } + +body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux, +body.adwaita-mod-always, +body.adwaita-mod-linux-only.mod-linux { + --frame-right-space: calc(var(--adwaita-mod-scale) * 120px); + --adwaita-mod-foreground-focus: var(--adwaita-headerbar-fg-color); } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.theme-dark, + body.adwaita-mod-always.theme-dark, + body.adwaita-mod-linux-only.mod-linux.theme-dark { + --adwaita-mod-background: #2e2e2e; + --adwaita-mod-background-focus: #444444; + --adwaita-mod-background-hover: #4f4f4f; + --adwaita-mod-background-active: #6e6e6e; + --adwaita-mod-foreground: #929292; } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.theme-light, + body.adwaita-mod-always.theme-light, + body.adwaita-mod-linux-only.mod-linux.theme-light { + --adwaita-mod-background: #efefef; + --adwaita-mod-background-focus: #d8d8d8; + --adwaita-mod-background-hover: #cfcfcf; + --adwaita-mod-background-active: #b3b3b3; + --adwaita-mod-foreground: #949494; } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-minimize-hide .titlebar-button-container.mod-right .titlebar-button.mod-minimize, + body.adwaita-mod-always.adwaita-window-button-minimize-hide .titlebar-button-container.mod-right .titlebar-button.mod-minimize, + body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-minimize-hide .titlebar-button-container.mod-right .titlebar-button.mod-minimize { + display: none; } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-maximize-hide .titlebar-button-container.mod-right .titlebar-button.mod-maximize, + body.adwaita-mod-always.adwaita-window-button-maximize-hide .titlebar-button-container.mod-right .titlebar-button.mod-maximize, + body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-maximize-hide .titlebar-button-container.mod-right .titlebar-button.mod-maximize { + display: none; } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-close-hide .titlebar-button-container.mod-right .titlebar-button.mod-close, + body.adwaita-mod-always.adwaita-window-button-close-hide .titlebar-button-container.mod-right .titlebar-button.mod-close, + body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-close-hide .titlebar-button-container.mod-right .titlebar-button.mod-close { + display: none; } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-minimize-hide:not(.adwaita-window-button-maximize-hide.adwaita-window-button-close-hide), body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-maximize-hide:not(.adwaita-window-button-close-hide.adwaita-window-button-minimize-hide), body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-close-hide:not(.adwaita-window-button-minimize-hide.adwaita-window-button-maximize-hide), + body.adwaita-mod-always.adwaita-window-button-minimize-hide:not(.adwaita-window-button-maximize-hide.adwaita-window-button-close-hide), + body.adwaita-mod-always.adwaita-window-button-maximize-hide:not(.adwaita-window-button-close-hide.adwaita-window-button-minimize-hide), + body.adwaita-mod-always.adwaita-window-button-close-hide:not(.adwaita-window-button-minimize-hide.adwaita-window-button-maximize-hide), + body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-minimize-hide:not(.adwaita-window-button-maximize-hide.adwaita-window-button-close-hide), + body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-maximize-hide:not(.adwaita-window-button-close-hide.adwaita-window-button-minimize-hide), + body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-close-hide:not(.adwaita-window-button-minimize-hide.adwaita-window-button-maximize-hide) { + --frame-right-space: calc(var(--adwaita-mod-scale) * (120px - 38px)); } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-minimize-hide.adwaita-window-button-maximize-hide:not(.adwaita-window-button-close-hide), body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-maximize-hide.adwaita-window-button-close-hide:not(.adwaita-window-button-minimize-hide), body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-close-hide.adwaita-window-button-minimize-hide:not(.adwaita-window-button-maximize-hide), + body.adwaita-mod-always.adwaita-window-button-minimize-hide.adwaita-window-button-maximize-hide:not(.adwaita-window-button-close-hide), + body.adwaita-mod-always.adwaita-window-button-maximize-hide.adwaita-window-button-close-hide:not(.adwaita-window-button-minimize-hide), + body.adwaita-mod-always.adwaita-window-button-close-hide.adwaita-window-button-minimize-hide:not(.adwaita-window-button-maximize-hide), + body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-minimize-hide.adwaita-window-button-maximize-hide:not(.adwaita-window-button-close-hide), + body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-maximize-hide.adwaita-window-button-close-hide:not(.adwaita-window-button-minimize-hide), + body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-close-hide.adwaita-window-button-minimize-hide:not(.adwaita-window-button-maximize-hide) { + --frame-right-space: calc(var(--adwaita-mod-scale) * (120px - 38px - 38px)); } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.adwaita-window-button-minimize-hide.adwaita-window-button-maximize-hide.adwaita-window-button-close-hide, + body.adwaita-mod-always.adwaita-window-button-minimize-hide.adwaita-window-button-maximize-hide.adwaita-window-button-close-hide, + body.adwaita-mod-linux-only.mod-linux.adwaita-window-button-minimize-hide.adwaita-window-button-maximize-hide.adwaita-window-button-close-hide { + --frame-right-space: calc(var(--adwaita-mod-scale) * (120px - 38px - 38px - 38px)); } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right, + body.adwaita-mod-always .titlebar-button-container.mod-right, + body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right { + transform: scale(var(--adwaita-mod-scale)); + margin-right: var(--adwaita-mod-right-margin); + transform-origin: right; } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button, + body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button, + body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button { + height: 24px; + width: 24px; + border-radius: 12px; + padding: 0; + margin: auto 0 auto 14px; + background: var(--adwaita-mod-background); + color: var(--adwaita-mod-foreground); } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-minimize svg, body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-maximize svg, body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-close svg, + body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button.mod-minimize svg, + body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button.mod-maximize svg, + body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button.mod-close svg, + body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-minimize svg, + body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-maximize svg, + body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-close svg { + display: none; } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button::after, + body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button::after, + body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button::after { + content: ''; + background-color: currentColor; + width: 16px; + height: 16px; + margin: auto; } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-minimize::after, + body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button.mod-minimize::after, + body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-minimize::after { + -webkit-mask-image: var(--adwaita-icon-window-minimize-symbolic); + mask-image: var(--adwaita-icon-window-minimize-symbolic); } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-maximize::after, + body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button.mod-maximize::after, + body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-maximize::after { + -webkit-mask-image: var(--adwaita-icon-window-maximize-symbolic); + mask-image: var(--adwaita-icon-window-maximize-symbolic); } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-close::after, + body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button.mod-close::after, + body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button.mod-close::after { + -webkit-mask-image: var(--adwaita-icon-window-close-symbolic); + mask-image: var(--adwaita-icon-window-close-symbolic); } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button:hover, + body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button:hover, + body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button:hover { + background: var(--adwaita-mod-background) !important; } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .titlebar-button-container.mod-right .titlebar-button svg, + body.adwaita-mod-always .titlebar-button-container.mod-right .titlebar-button svg, + body.adwaita-mod-linux-only.mod-linux .titlebar-button-container.mod-right .titlebar-button svg { + width: 12px; + height: 12px; + margin: auto; } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.is-focused .titlebar-button-container.mod-right .titlebar-button, + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.is-focused .modal-close-button, + body.adwaita-mod-always.is-focused .titlebar-button-container.mod-right .titlebar-button, + body.adwaita-mod-always.is-focused .modal-close-button, + body.adwaita-mod-linux-only.mod-linux.is-focused .titlebar-button-container.mod-right .titlebar-button, + body.adwaita-mod-linux-only.mod-linux.is-focused .modal-close-button { + background: var(--adwaita-mod-background-focus); + color: var(--adwaita-mod-foreground-focus); } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.is-focused .titlebar-button-container.mod-right .titlebar-button:hover, + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.is-focused .modal-close-button:hover, + body.adwaita-mod-always.is-focused .titlebar-button-container.mod-right .titlebar-button:hover, + body.adwaita-mod-always.is-focused .modal-close-button:hover, + body.adwaita-mod-linux-only.mod-linux.is-focused .titlebar-button-container.mod-right .titlebar-button:hover, + body.adwaita-mod-linux-only.mod-linux.is-focused .modal-close-button:hover { + background: var(--adwaita-mod-background-hover) !important; } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.is-focused .titlebar-button-container.mod-right .titlebar-button:active, + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux.is-focused .modal-close-button:active, + body.adwaita-mod-always.is-focused .titlebar-button-container.mod-right .titlebar-button:active, + body.adwaita-mod-always.is-focused .modal-close-button:active, + body.adwaita-mod-linux-only.mod-linux.is-focused .titlebar-button-container.mod-right .titlebar-button:active, + body.adwaita-mod-linux-only.mod-linux.is-focused .modal-close-button:active { + background: var(--adwaita-mod-background-active) !important; } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .modal-close-button, + body.adwaita-mod-always .modal-close-button, + body.adwaita-mod-linux-only.mod-linux .modal-close-button { + height: 24px; + width: 24px; + border-radius: 12px; + color: var(--adwaita-mod-foreground); + background: var(--adwaita-mod-background); + transform: scale(var(--adwaita-mod-scale)); + transform-origin: right; } + body:not(.adwaita-mod-always, .adwaita-mod-linux-only, .adwaita-mod-never).mod-linux .modal-close-button:before, + body.adwaita-mod-always .modal-close-button:before, + body.adwaita-mod-linux-only.mod-linux .modal-close-button:before { + content: ''; + display: block; + width: 16px; + height: 16px; + margin: auto; + top: 50%; + position: absolute; + transform: translateY(-50%); + -webkit-mask-image: var(--adwaita-icon-window-close-symbolic); + mask-image: var(--adwaita-icon-window-close-symbolic); + background-color: currentColor; } + +body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux, +body.adwaita-tabs-always, +body.adwaita-tabs-linux-only.mod-linux { + --tab-radius-active: 4px; } + body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux:not(.adwaita-tabs-short), + body.adwaita-tabs-always:not(.adwaita-tabs-short), + body.adwaita-tabs-linux-only.mod-linux:not(.adwaita-tabs-short) { + --tab-width: 10000px; + /* infinite width */ + --tab-max-width: none; } + body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux.theme-dark, + body.adwaita-tabs-always.theme-dark, + body.adwaita-tabs-linux-only.mod-linux.theme-dark { + --tab-background-active: #323232; } + body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux.theme-dark.is-focused, + body.adwaita-tabs-always.theme-dark.is-focused, + body.adwaita-tabs-linux-only.mod-linux.theme-dark.is-focused { + --tab-background-active: #464646; } + body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux.theme-light, + body.adwaita-tabs-always.theme-light, + body.adwaita-tabs-linux-only.mod-linux.theme-light { + --tab-background-active: #f0f0f0; } + body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux.theme-light.is-focused, + body.adwaita-tabs-always.theme-light.is-focused, + body.adwaita-tabs-linux-only.mod-linux.theme-light.is-focused { + --tab-background-active: #d8d8d8; } + body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .workspace-tab-header-container .workspace-tab-header-container-inner, + body.adwaita-tabs-always .workspace-tab-header-container .workspace-tab-header-container-inner, + body.adwaita-tabs-linux-only.mod-linux .workspace-tab-header-container .workspace-tab-header-container-inner { + --tab-outline-width: 0; } + body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .workspace-tab-header-container .workspace-tab-header-new-tab, + body.adwaita-tabs-always .workspace-tab-header-container .workspace-tab-header-new-tab, + body.adwaita-tabs-linux-only.mod-linux .workspace-tab-header-container .workspace-tab-header-new-tab { + margin-right: var(--size-4-1); } + body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .workspace-tab-header-new-tab, + body.adwaita-tabs-always .workspace-tab-header-new-tab, + body.adwaita-tabs-linux-only.mod-linux .workspace-tab-header-new-tab { + order: 1; } + body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .workspace-tab-header-tab-list, + body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .sidebar-toggle-button.mod-right, + body.adwaita-tabs-always .workspace-tab-header-tab-list, + body.adwaita-tabs-always .sidebar-toggle-button.mod-right, + body.adwaita-tabs-linux-only.mod-linux .workspace-tab-header-tab-list, + body.adwaita-tabs-linux-only.mod-linux .sidebar-toggle-button.mod-right { + order: 2; } + body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header, + body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header, + body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header { + padding: 0; + margin: 5px 3px 5px 2px; } + body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active, + body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active, + body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active { + color: var(--tab-text-color-focused); } + body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:before, body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:after, + body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:before, + body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:after, + body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:before, + body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:after { + content: none; } + body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header .workspace-tab-header-inner::after, + body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header .workspace-tab-header-inner::after, + body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header .workspace-tab-header-inner::after { + right: -6px; } + body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header .workspace-tab-header-inner-title, + body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header .workspace-tab-header-inner-title, + body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header .workspace-tab-header-inner-title { + padding-left: 20px; + text-align: center; } + body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:last-child .workspace-tab-header-inner::after, + body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:last-child .workspace-tab-header-inner::after, + body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header:last-child .workspace-tab-header-inner::after { + content: none; } + body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header .workspace-tab-header-inner-close-button, + body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header .workspace-tab-header-inner-close-button, + body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header .workspace-tab-header-inner-close-button { + opacity: 0; + display: flex; } + body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active .workspace-tab-header-inner-close-button, body:not(.adwaita-tabs-always, .adwaita-tabs-linux-only, .adwaita-tabs-never).mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header :hover .workspace-tab-header-inner-close-button, + body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active .workspace-tab-header-inner-close-button, + body.adwaita-tabs-always .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header :hover .workspace-tab-header-inner-close-button, + body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header.is-active .workspace-tab-header-inner-close-button, + body.adwaita-tabs-linux-only.mod-linux .mod-root .workspace-tabs:not(.mod-stacked) .workspace-tab-header :hover .workspace-tab-header-inner-close-button { + opacity: 1; } + +body:not(.adwaita-font-always, .adwaita-font-linux-only, .adwaita-font-never).mod-linux, +body.adwaita-font-always, +body.adwaita-font-linux-only.mod-linux { + --titlebar-height: 45px; + --font-interface-theme: Cantarell; + --font-ui-small: 15px; + --h1-weight: 900; } + body:not(.adwaita-font-always, .adwaita-font-linux-only, .adwaita-font-never).mod-linux .titlebar-text, + body.adwaita-font-always .titlebar-text, + body.adwaita-font-linux-only.mod-linux .titlebar-text { + top: 10px; + height: auto; } + +body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux, +body.adwaita-icons-always, +body.adwaita-icons-linux-only.mod-linux { + --titlebar-height: 45px; + --header-height: 46px; } + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux svg.logo-wireframe, + body.adwaita-icons-always svg.logo-wireframe, + body.adwaita-icons-linux-only.mod-linux svg.logo-wireframe { + stroke-width: 45; } + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux.is-frameless:not(.is-hidden-frameless) .app-container, + body.adwaita-icons-always.is-frameless:not(.is-hidden-frameless) .app-container, + body.adwaita-icons-linux-only.mod-linux.is-frameless:not(.is-hidden-frameless) .app-container { + margin-top: -9px; + height: calc(100% + 9px); } + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .sidebar-toggle-button, + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header-new-tab, + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header-tab-list, + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .mod-left-split .workspace-tabs .workspace-tab-header-container-inner, + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .mod-right-split .workspace-tabs .workspace-tab-header-container-inner, + body.adwaita-icons-always .sidebar-toggle-button, + body.adwaita-icons-always .workspace-tab-header-new-tab, + body.adwaita-icons-always .workspace-tab-header-tab-list, + body.adwaita-icons-always .mod-left-split .workspace-tabs .workspace-tab-header-container-inner, + body.adwaita-icons-always .mod-right-split .workspace-tabs .workspace-tab-header-container-inner, + body.adwaita-icons-linux-only.mod-linux .sidebar-toggle-button, + body.adwaita-icons-linux-only.mod-linux .workspace-tab-header-new-tab, + body.adwaita-icons-linux-only.mod-linux .workspace-tab-header-tab-list, + body.adwaita-icons-linux-only.mod-linux .mod-left-split .workspace-tabs .workspace-tab-header-container-inner, + body.adwaita-icons-linux-only.mod-linux .mod-right-split .workspace-tabs .workspace-tab-header-container-inner { + margin-top: 0; + padding-top: 0; + padding-bottom: 0; } + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .mod-left-split .workspace-tabs .workspace-tab-header, + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .mod-right-split .workspace-tabs .workspace-tab-header, + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .sidebar-toggle-button .clickable-icon, + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tabs.mod-top .workspace-tab-header-container .clickable-icon, + body.adwaita-icons-always .mod-left-split .workspace-tabs .workspace-tab-header, + body.adwaita-icons-always .mod-right-split .workspace-tabs .workspace-tab-header, + body.adwaita-icons-always .sidebar-toggle-button .clickable-icon, + body.adwaita-icons-always .workspace-tabs.mod-top .workspace-tab-header-container .clickable-icon, + body.adwaita-icons-linux-only.mod-linux .mod-left-split .workspace-tabs .workspace-tab-header, + body.adwaita-icons-linux-only.mod-linux .mod-right-split .workspace-tabs .workspace-tab-header, + body.adwaita-icons-linux-only.mod-linux .sidebar-toggle-button .clickable-icon, + body.adwaita-icons-linux-only.mod-linux .workspace-tabs.mod-top .workspace-tab-header-container .clickable-icon { + height: 34px; + min-width: 34px; + margin-top: auto; + margin-bottom: auto; } + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .sidebar-toggle-button.mod-left .clickable-icon svg, + body.adwaita-icons-always .sidebar-toggle-button.mod-left .clickable-icon svg, + body.adwaita-icons-linux-only.mod-linux .sidebar-toggle-button.mod-left .clickable-icon svg { + display: none; } + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .sidebar-toggle-button.mod-left .clickable-icon::after, + body.adwaita-icons-always .sidebar-toggle-button.mod-left .clickable-icon::after, + body.adwaita-icons-linux-only.mod-linux .sidebar-toggle-button.mod-left .clickable-icon::after { + content: ''; + background-color: currentColor !important; + -webkit-mask-image: var(--adwaita-icon-sidebar-show-symbolic); + mask-image: var(--adwaita-icon-sidebar-show-symbolic); + width: 16px; + height: 16px; + margin: auto; } + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .sidebar-toggle-button.mod-right .clickable-icon svg, + body.adwaita-icons-always .sidebar-toggle-button.mod-right .clickable-icon svg, + body.adwaita-icons-linux-only.mod-linux .sidebar-toggle-button.mod-right .clickable-icon svg { + display: none; } + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .sidebar-toggle-button.mod-right .clickable-icon::after, + body.adwaita-icons-always .sidebar-toggle-button.mod-right .clickable-icon::after, + body.adwaita-icons-linux-only.mod-linux .sidebar-toggle-button.mod-right .clickable-icon::after { + content: ''; + background-color: currentColor !important; + -webkit-mask-image: var(--adwaita-icon-sidebar-show-right-symbolic); + mask-image: var(--adwaita-icon-sidebar-show-right-symbolic); + width: 16px; + height: 16px; + margin: auto; } + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header-new-tab .clickable-icon svg, + body.adwaita-icons-always .workspace-tab-header-new-tab .clickable-icon svg, + body.adwaita-icons-linux-only.mod-linux .workspace-tab-header-new-tab .clickable-icon svg { + display: none; } + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header-new-tab .clickable-icon::after, + body.adwaita-icons-always .workspace-tab-header-new-tab .clickable-icon::after, + body.adwaita-icons-linux-only.mod-linux .workspace-tab-header-new-tab .clickable-icon::after { + content: ''; + background-color: currentColor !important; + -webkit-mask-image: var(--adwaita-icon-tab-new-symbolic); + mask-image: var(--adwaita-icon-tab-new-symbolic); + width: 16px; + height: 16px; + margin: auto; } + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header-tab-list .clickable-icon svg, + body.adwaita-icons-always .workspace-tab-header-tab-list .clickable-icon svg, + body.adwaita-icons-linux-only.mod-linux .workspace-tab-header-tab-list .clickable-icon svg { + display: none; } + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header-tab-list .clickable-icon::after, + body.adwaita-icons-always .workspace-tab-header-tab-list .clickable-icon::after, + body.adwaita-icons-linux-only.mod-linux .workspace-tab-header-tab-list .clickable-icon::after { + content: ''; + background-color: currentColor !important; + -webkit-mask-image: var(--adwaita-icon-go-down-symbolic); + mask-image: var(--adwaita-icon-go-down-symbolic); + width: 16px; + height: 16px; + margin: auto; } + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header-inner-close-button svg, + body.adwaita-icons-always .workspace-tab-header-inner-close-button svg, + body.adwaita-icons-linux-only.mod-linux .workspace-tab-header-inner-close-button svg { + display: none; } + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header-inner-close-button::after, + body.adwaita-icons-always .workspace-tab-header-inner-close-button::after, + body.adwaita-icons-linux-only.mod-linux .workspace-tab-header-inner-close-button::after { + content: ''; + background-color: currentColor !important; + -webkit-mask-image: var(--adwaita-icon-window-close-symbolic); + mask-image: var(--adwaita-icon-window-close-symbolic); + width: 16px; + height: 16px; + margin: auto; } + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header[data-type="file-explorer"] .workspace-tab-header-inner-icon svg, + body.adwaita-icons-always .workspace-tab-header[data-type="file-explorer"] .workspace-tab-header-inner-icon svg, + body.adwaita-icons-linux-only.mod-linux .workspace-tab-header[data-type="file-explorer"] .workspace-tab-header-inner-icon svg { + display: none; } + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header[data-type="file-explorer"] .workspace-tab-header-inner-icon::after, + body.adwaita-icons-always .workspace-tab-header[data-type="file-explorer"] .workspace-tab-header-inner-icon::after, + body.adwaita-icons-linux-only.mod-linux .workspace-tab-header[data-type="file-explorer"] .workspace-tab-header-inner-icon::after { + content: ''; + background-color: currentColor !important; + -webkit-mask-image: var(--adwaita-icon-folder-visiting-symbolic); + mask-image: var(--adwaita-icon-folder-visiting-symbolic); + width: 16px; + height: 16px; + margin: auto; } + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header[data-type="search"] .workspace-tab-header-inner-icon svg, + body.adwaita-icons-always .workspace-tab-header[data-type="search"] .workspace-tab-header-inner-icon svg, + body.adwaita-icons-linux-only.mod-linux .workspace-tab-header[data-type="search"] .workspace-tab-header-inner-icon svg { + display: none; } + body:not(.adwaita-icons-always, .adwaita-icons-linux-only, .adwaita-icons-never).mod-linux .workspace-tab-header[data-type="search"] .workspace-tab-header-inner-icon::after, + body.adwaita-icons-always .workspace-tab-header[data-type="search"] .workspace-tab-header-inner-icon::after, + body.adwaita-icons-linux-only.mod-linux .workspace-tab-header[data-type="search"] .workspace-tab-header-inner-icon::after { + content: ''; + background-color: currentColor !important; + -webkit-mask-image: var(--adwaita-icon-folder-saved-search-symbolic); + mask-image: var(--adwaita-icon-folder-saved-search-symbolic); + width: 16px; + height: 16px; + margin: auto; } diff --git a/content/notes/.obsidian/workspace.json b/content/notes/.obsidian/workspace.json new file mode 100644 index 0000000..064db33 --- /dev/null +++ b/content/notes/.obsidian/workspace.json @@ -0,0 +1,239 @@ +{ + "main": { + "id": "707cdff055641daf", + "type": "split", + "children": [ + { + "id": "4ff646379bdc32f1", + "type": "tabs", + "children": [ + { + "id": "41d42d82984d27da", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "Notion/Memory.md", + "mode": "source", + "source": false + }, + "icon": "lucide-file", + "title": "Memory" + } + } + ] + } + ], + "direction": "vertical" + }, + "left": { + "id": "8554fcd8146aea7c", + "type": "split", + "children": [ + { + "id": "65145a8fc625fc73", + "type": "tabs", + "dimension": 66.13756613756614, + "children": [ + { + "id": "3e60316ef665bcea", + "type": "leaf", + "state": { + "type": "file-explorer", + "state": { + "sortOrder": "alphabetical", + "autoReveal": false + }, + "icon": "lucide-folder-closed", + "title": "Files" + } + }, + { + "id": "66bab8cc98ffff03", + "type": "leaf", + "state": { + "type": "search", + "state": { + "query": "", + "matchingCase": false, + "explainSearch": false, + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical" + }, + "icon": "lucide-search", + "title": "Search" + } + }, + { + "id": "9febdd5b0820c714", + "type": "leaf", + "state": { + "type": "bookmarks", + "state": {}, + "icon": "lucide-bookmark", + "title": "Bookmarks" + } + } + ] + }, + { + "id": "e6a895c667054857", + "type": "tabs", + "dimension": 33.86243386243386, + "children": [ + { + "id": "f7c232306fce05bc", + "type": "leaf", + "state": { + "type": "graph", + "state": {}, + "icon": "lucide-git-fork", + "title": "Graph view" + } + } + ] + } + ], + "direction": "horizontal", + "width": 284.5110321044922 + }, + "right": { + "id": "65640e3e4a22a762", + "type": "split", + "children": [ + { + "id": "c2a2b4ff04865342", + "type": "tabs", + "children": [ + { + "id": "5a238d79ee59fbda", + "type": "leaf", + "state": { + "type": "backlink", + "state": { + "file": "binary-operations/index.md", + "collapseAll": true, + "extraContext": false, + "sortOrder": "alphabetical", + "showSearch": false, + "searchQuery": "", + "backlinkCollapsed": false, + "unlinkedCollapsed": true + }, + "icon": "links-coming-in", + "title": "Backlinks for index" + } + }, + { + "id": "0bf5145fd219badf", + "type": "leaf", + "state": { + "type": "outgoing-link", + "state": { + "linksCollapsed": false, + "unlinkedCollapsed": true + }, + "icon": "links-going-out", + "title": "Outgoing links" + } + }, + { + "id": "f07e471ad3a546d5", + "type": "leaf", + "state": { + "type": "tag", + "state": { + "sortOrder": "frequency", + "useHierarchy": true, + "showSearch": false, + "searchQuery": "" + }, + "icon": "lucide-tags", + "title": "Tags" + } + }, + { + "id": "6e617d9f3ccf8c06", + "type": "leaf", + "state": { + "type": "outline", + "state": { + "file": "Notion/Memory.md", + "followCursor": false, + "showSearch": false, + "searchQuery": "" + }, + "icon": "lucide-list", + "title": "Outline of Memory" + } + } + ], + "currentTab": 2 + } + ], + "direction": "horizontal", + "width": 218.5 + }, + "left-ribbon": { + "hiddenItems": { + "switcher:Open quick switcher": false, + "graph:Open graph view": false, + "canvas:Create new canvas": false, + "daily-notes:Open today's daily note": false, + "templates:Insert template": false, + "command-palette:Open command palette": false, + "obsidian-importer:Open Importer": false, + "table-editor-obsidian:Advanced Tables Toolbar": false, + "obsidian-local-images-plus:Local Images Plus 0.16.3\r\nLocalize attachments (plugin folder)": false + } + }, + "active": "41d42d82984d27da", + "lastOpenFiles": [ + "Notion/CPU Architecture.md", + "Notion/Databases SQL.md", + "macOS.md", + "Notion/Memory.md", + "lua.md", + "tmux/index.md", + "Notion/Text Editor NVIM.md", + "tmux/tmux_design.png", + "tmux", + "transistors/index.md", + "transistors/image4.png", + "transistors/image3.png", + "transistors/image2.png", + "transistors/image1.png", + "transistors", + "assembly.md", + "Notion/Untitled.md", + "binary-operations/index.md", + "linux/index.md", + "linux", + "pass.md", + "git.md", + "flask.md", + "https-ssl-certs.md", + "encryption.md", + "http.md", + "python.md", + "wsl2.md", + "irc.md", + "c-language.md", + "Notion/CSS.md", + "ssh.md", + "html.md", + "compiling.md", + "EXT2.png", + "image 96.png", + "image 95.png", + "image 94.png", + "pngwing.com.png", + "Notion2", + "binary-operations", + "algorithms-and-data", + "C language", + "temp", + "Notion" + ] +} \ No newline at end of file diff --git a/content/notes/Notion/CPU Architecture.md b/content/notes/Notion/CPU Architecture.md new file mode 100644 index 0000000..33f4d47 --- /dev/null +++ b/content/notes/Notion/CPU Architecture.md @@ -0,0 +1,165 @@ +--- +Status: Ready +Created by: Trude EH +tags: + - computer-science + - notes +author: TrudeEH +draft: false +searchHidden: false +showToc: true +title: CPU Architecture +--- + +## Components + +### Registers + +We can combine registers to reduce the amount of wires needed. +![[image8.png]] +Using a data bus (wiring at the top) and a binary decoder, we can select which register to read/write to. + +### Memory + +![[image9.png]] + +## Assembly + +Assembly is a human-friendly representation of code: binary values that a computer can understand. +![[image10.png]] +An assembler converts ASM instructions into machine code, which is given to the CPU as input. + +### Arithmetic Operations + +For example, a simple computer architecture could use `00` to represent arithmetic operations. +![[image11.png]] +To decide which type of operation to execute (subtraction, multiplication, addition, etc), the 3rd and 4th bits could be used. +![[image12.png]] +Using a [[binary-operations/index]], we can build an inefficient, but simple circuit to do this. +![[image13.png]] +This type of circuit is an Arithmetic Logic Unit (ALU). + +### Memory Operations + +Of course, assembly can also provide instructions to store or load values. +![[image14.png]] + +#### Load + +```Assembly +LOAD R2 1000 ;Load into register 2 the value in the memory address 1000 +``` + +![[image15.png]] + +#### Store + +```Assembly +STORE R1 0110 ;Store the value in register 1 into the 0110 memory address +``` + +![[image16.png]] + +#### Select Which Instruction to Execute (first 2 bits) + +To decide which operation to execute, a binary decoder can be used. +![[image17.png]] +For memory operations, the 3rd and 4th bits are used to select which register to use. +![[image18.png]] +The last 4 bits represent the memory address to read/write to. +![[image19.png]] + +### Instruction Register + +For the instruction to be given, it is stored in a special register: An Instruction Register. +![[image20.png]] + +### Optimization + +We can use a single Binary Decoder instead of two, to achieve the same result. (Optimization on the right pane) +![[image21.png]] +Different architectures can have the exact same functionality, while being implemented differently, or even having different instructions. This is why code that is compiled for Intel x64 is not compatible with ARM or RISC-V. + +## Control Unit + +We can finally add the ALU (Arithmetic Logic Unit) we built before into the new circuit, like so: +![[image22.png]] +The gray trapezoids are multiplexers: +![[image23.png]] +The output value is then stored in a temporary register, before replacing the first operand register's value. +The component we just built to control the `ALU` is part of a `Control Unit`. The full `control unit` is very complex, as it needs to handle every possible instruction. (So far, we have seen how to implement the `ALU` and `RAM`.) +![[image24.png]] +Each register in the `CU` has a specific purpose, unlike `RAM`, which can be used to store any values. +![[image25.png]] +To read the first instruction, the `CU` will **fetch** data from the first address in memory. +![[image26.png]] +After **fetching**, the `CU` will **decode** the instruction: interpret the bit sequence in the `instruction register`, to send the necessary signals to the components that will **execute** the instruction. We can finally load instructions into the instruction register. +![[image27.png]] +Then, the `CU` increments 1 byte, to point the `address register` to the next instruction. (Modern architectures increment different values, as the instruction set is more complex) +If the instruction is an arithmetic operation, the steps are similar. The ALU stores the output in a temporary register, which overwrites the register 0 with the result. The result can then be stored in `RAM`. +![[image28.png]] + +## Load a Program Into Memory + +So far, we can store instructions in memory, but it is also necessary to store values, besides from the instructions themselves. +For example: +![[image29.png]] +This program uses 2 numeric values. The first 2 instructions load these values into the registers, and then, these values are added together and stored in another memory address. The final instruction, `HALT`, marks the end of the program, to make sure the `CU` does not attempt to read the number 20 as an instruction. +If the program is extended, all memory addresses must be altered. To fix this issue, we can instead store values at the end of the memory stack. +![[image30.png]] + +## Conditions and Loops + +To create a loop, we can simply jump to a smaller address in memory. +![[image31.png]] +Internally, the `JMP` command overwrites the Address Register, making it so that the next CPU **cycle** *fetches* the chosen memory address, instead of the next one. +![[image32.png]] + +### Flags + +Sometimes, we might want to loop only if a certain condition is met. +For context, imagine subtracting a number from itself. In this case, the ALU will provide some extra information, using 1 bit registers called `flags`. +![[image33.png]] + +| | | | +|---|---|---| +|0|**O**verflow|When a number is too large to fit in the output register.| +|1|**Z**ero|When the result is zero.| +|0|**N**egative|When a number is negative.| + +This additional information can be used to make decisions, and make **conditional jumps** possible. + +| | | | +|---|---|---| +|`JMP_OFW XXXX`|Jump Overflow|Overwrites the `Address Register` with the value `XXXX` if the `O_FLAG` is **ON**. If the flag is **OFF**, the `Address Register`'s value is incremented by **1**.| +|`JMP_ZRO XXXX`|Jump Zero|Overwrites the `Address Register` with the value `XXXX` if the `Z_FLAG` is **ON**. If the flag is **OFF**, the `Address Register`'s value is incremented by **1**.| +|`JMP_NEG XXXX`|Jump Negative|Overwrites the `Address Register` with the value `XXXX` if the `N_FLAG` is **ON**. If the flag is **OFF**, the `Address Register`'s value is incremented by **1**.| +|`JMP_ABV XXXX`|Jump Above|Overwrites the `Address Register` with the value `XXXX` if **neither** the `Z_FLAG` nor `N_FLAG` are **ON**. If either is **ON,** the `Address Register`'s value is incremented by **1**.| + +Comparing two numbers is the same as subtracting them. + +$$a - 5 = b$$ + +| | | | +|---|---|---| +|**b** is negative|**b** is zero|**b** is positive| +|then|then|then| +|a < 5|a == 5|a > 5| + +For example: +![[image34.png]] +An `IF` statement works in the exact same way, but without the need to loop: +![[image35.png]] +Note: These instructions are not from any real architecture. These are examples for this simple, custom architecture. + +## Clock + +The final piece of the puzzle is the clock. A clock can give us time before a circuit loops. +![[image36.png]] +This is necessary, because energy travels extremely quickly, and so, all memory would be reset before we could even use the stored values. Each clock tick corresponds to an action the `CU` performs (fetch, decode and execute). +A `Data FLIP-FLOP`, for example, uses the clock to store data, acting as the manual `RESET` input. +![[image37.png]] +This circuit can be used to build a single bit register. +![[image38.png]] +To generate a clock pulse, we can use a circuit similar to this one: +![[image39.png]] diff --git a/content/notes/Notion/Databases SQL.md b/content/notes/Notion/Databases SQL.md new file mode 100644 index 0000000..57a5662 --- /dev/null +++ b/content/notes/Notion/Databases SQL.md @@ -0,0 +1,324 @@ +--- +Status: Ready +Created by: Trude EH +tags: + - notes + - programming + - web +author: TrudeEH +draft: false +searchHidden: false +showToc: true +title: Databases [SQL] +--- + +## Flat-File Databases + +A "table" written into a single file. The most common file type for this purpose is `CSV`. +The `CSV` format reads each line as a row, and each comma-separated value as a column. +The first row on a `CSV` file is used to describe the data in each column. If a `,` is present on the dataset, surround that entry with `"` to 'escape' it. +These files can be read and written to using languages like [[c-language]] and [[python]]. + +## Relational Databases + +Instead of using a single table, a relational database can store data in multiple tables, and then define relationships between them. +Each table must have one column with an unique key that identifies each row. +![[image94.png]] + +### Relationships + +#### One-to-one Relationship + +In this example, `id` in `shows` corresponds to the `show_id` in the `ratings` table. + +#### One-to-many Relationship + +`shows` has a one-to-many relationship with `genres`, because a single show entry can have many genders. + +#### Many-to-many Relationship + +Both the `people` and `writers` table have a field shared with `stars`. + +## SQL + +`SQL` is a language designed specifically for interfacing with relational databases. +To use `SQL`, a database is needed, so, for this example, I will use `sqlite3`. + +### Create a Database + +```Shell +sqlite3 name.db # Create a db file and initialize it. +``` + +### `sqlite3` Commands + +#### Import a `CSV` Table + +```SQL +.mode csv +.import name.csv table_name +``` + +#### General Commands + +```SQL +.schema -- Print all tables and fields (using the commands used for creation) +.schema table -- Show the command used for creating a table +.exit +``` + +### Base Syntax + +```SQL +CREATE TABLE table (column type, ...); -- Create a new table +SELECT columns FROM table; -- Output/Print data +INSERT INTO table (column, ...) VALUES(value, ...); -- Add data +UPDATE table SET column = value WHERE condition; -- Update values +DELETE FROM table WHERE condition; -- Delete data +``` + +> [!important] In `SQL`, there is **NO WAY** to undo actions. Especially when writing or deleting from the database, do not type `;` unless you know exactly what you are doing! + +#### Wildcard + +```SQL +SELECT * FROM table; -- Outputs every column in the table (wildcard selector) +``` + +### Functions + +#### Math Functions + +- `AVG` +- `COUNT` +- `DISTINCT` +- `LOWER` +- `MAX` +- `MIN` +- `UPPER` +- `LOWER` +- `…` + + ```SQL + SELECT COUNT(*) FROM table; -- Counts the number of rows in a table + SELECT DISTINCT column from table; -- Show only the unique values in a column + SELECT COUNT(DISTINCT column) FROM table; -- Count the unique values in a column + ``` + +#### Logic Functions + +- `GROUP BY` +- `LIKE` +- `LIMIT` +- `ORDER BY` +- `WHERE` +- `…` + +```SQL +-- Count every instance of a value in a column +SELECT COUNT(*) FROM table WHERE column = 'string'; +-- LIKE is used to select using formatting. '%' selects every character after) +SELECT * FROM favorites WHERE prog_language = 'C' AND problem LIKE "Hello, %" +-- Group all individual rows and display their count +SELECT prog_language, COUNT(*) FROM favorites GROUP BY prog_language; +-- Sort values by their count, ascending. +SELECT prog_language, COUNT(*) FROM favorites GROUP BY prog_language ORDER BY COUNT(*); +-- Sort values by their count, descending. +SELECT prog_language, COUNT(*) FROM favorites GROUP BY prog_language ORDER BY COUNT(*) DESC; +-- Limit the output to a single row (showing the most popular language, in this case) +SELECT prog_language, COUNT(*) FROM favorites GROUP BY prog_language ORDER BY COUNT(*) DESC LIMIT 1; +``` + +#### Operators + +- `AND` +- `OR` + +```SQL +-- Using the AND operator to select two values +SELECT * FROM table WHERE column1 = 'a' AND column2 = 'b'; +-- AND and OR (' is escaped using '' (' twice)) +SELECT * FROM table WHERE prog_language = 'C' AND (problem = 'Hello, World' OR problem = 'Hello, It''s Me'); +``` + +#### Aliases + +- `AS` + +```SQL +-- The column COUNT(*) will be renamed to 'n'. +SELECT prog_language, COUNT(*) AS n FROM favorites GROUP BY prog_language ORDER BY n DESC; +``` + +#### Conditions + +- `IS` + +```SQL +-- Delete all values where timestamp1 is a NULL value. +DELETE FROM favorites WHERE timestamp1 IS NULL; +``` + +### Data Types + +- `BLOB` +- `INTEGER` +- `NUMERIC` +- `REAL` +- `TEXT` + +- `NULL` +- `NOT NULL` +- `UNIQUE` + +- `PRIMARY KEY` +- `FOREIGN KEY` + +### Relationships + +- `IN` +- `JOIN` + +#### One-to-one + +```SQL +-- 'shows' table +CREATE TABLE shows ( + id INTEGER, + title TEXT NOT NULL, + year NUMERIC, + episodes INTEGER, + PRIMARY KEY(id) +); +-- Table connected with a one-to-one relationship with the 'shows' table +CREATE TABLE ratings ( + show_id INTEGER NOT NULL, + rating REAL NOT NULL, + votes INTEGER NOT NULL, + FOREIGN KEY(show_id) REFERENCES shows(id) +); +-- Lists 'show_id', but not the actual names of each show. +SELECT show_id FROM ratings WHERE rating >= 6.0 LIMIT 10; +-- Executes the nested query first, then shows the entries selected on 'shows' +SELECT * FROM shows WHERE id IN +(SELECT show_id FROM ratings WHERE rating >= 6.0) +LIMIT 10; +-- Join both tables +SELECT title, rating FROM shows JOIN +ratings ON shows.id = ratings.show_id WHERE rating >= 6.0 +LIMIT 10; +``` + +#### One-to-many + +- `ON` + +```SQL +CREATE TABLE genres ( + show_id INTEGER NOT NULL, + genre TEXT NOT NULL, + FOREIGN KEY(show_id) REFERENCES shows(id) +); + +-- Search for all genres for a show +SELECT genre FROM genres WHERE show_id = +(SELECT id FROM shows WHERE title = 'TitleOfShow'); +-- Join tables, to show title alongside genres of a show +SELECT title, genre FROM shows JOIN genres ON shows.id = +genres.show_id WHERE id = +(SELECT id FROM shows WHERE title = 'TitleOfShow'); +``` + +#### Many-to-many + +![[image95.png]] + +```SQL +-- Select every person who starred in a show +SELECT name FROM people WHERE id IN +(SELECT person_id FROM stars WHERE show_id = +(SELECT id FROM shows WHERE title = 'Some Name')); +-- Joined table with the show name and stars +SELECT title FROM shows JOIN people.name WHERE id IN +(SELECT person_id FROM stars WHERE show_id = +(SELECT id FROM shows WHERE title = 'Some Name')); +-- Another way to join tables +SELECT title FROM shows, stars, people +WHERE shows.id = stars.show_id +AND people.id = stars.person_id +AND name = 'Name'; +``` + +### Indexes + +Load an index of the database into RAM to optimize searches. +The underneath algorithm is a `B-Tree`, which takes up more space in memory and slightly slows write speed on the database. + +```SQL +CREATE INDEX name ON table (column, ...); +.timer ON -- sqlite3 command to show how long operations take to complete +SELECT * FROM shows WHERE title = 'Name'; -- 0.043s +CREATE INDEX title_index ON shows(title); -- Index title on shows +SELECT * FROM shows WHERE title = 'Name'; -- 0.001s +SELECT name FROM people WHERE id IN +(SELECT person_id FROM stars WHERE show_id = +(SELECT id FROM shows WHERE title = 'Some Name')); -- 0.215s +CREATE INDEX name_index ON people(name); +CREATE INDEX person_index ON stars(person_id); +SELECT name FROM people WHERE id IN +(SELECT person_id FROM stars WHERE show_id = +(SELECT id FROM shows WHERE title = 'Some Name')); -- 0.001s +``` + +### Race Conditions + +When `SQL` is integrated with languages such as `Python`, for example, or is being accessed by multiple instances, race conditions may arise. +For example, consider the following code: + +```Python +... +rows = db.execute("SELECT likes FROM posts WHERE id = ?", id); +likes = rows[0]["likes"] +db.execute("UPDATE posts SET likes = ? WHERE id = ?", likes + 1, id); +``` + +If this code is executed twice at the same time, instead of adding 2 likes to the database, only one will be added, because the program would read the database in the same state, and then add +1 like to that same, previous state. +`SQL` provides solutions to this in the form of **transactions**: +- `BEGIN TRANSACTION` +- `COMMIT` +- `ROLLBACK` +On `Python`, a solution could be: + +```Python +db.execute("BEGIN TRANSACTION") +rows = db.execute("SELECT likes FROM posts WHERE id = ?", id); +likes = rows[0]["likes"] +db.execute("UPDATE posts SET likes = ? WHERE id = ?", likes + 1, id); +db.execute("COMMIT") +``` + +Where the database would be "locked" while the program ran. + +### `SQL` Injection Attacks + +If a program asks for user input, and that input is then passed over to the database, the user could write special `SQL` syntax to break the query. +For example: +If a program takes an email address as input, some user could type: `email@example.com'--`, which marks a comment. +If the query was similar to the following: + +```Python +rows = db.execute(f"SELECT * FROM users WHERE email = '{email}' AND password = {psk}") +``` + +Replacing values… + +```Python +rows = db.execute(f"SELEC * FROM users WHERE email = 'email@example.com'--' AND password = 'password123'") +``` + +Which would result in the user being able to log in without needing a password. +The solution to this is to use a library which uses placeholders to insert data in queries. + +```Python +rows = db.execute("SELECT * FROM users WHERE email = ? AND password = ?", email, psk) +``` diff --git a/content/notes/Notion/Debug-Repair Tools.md b/content/notes/Notion/Debug-Repair Tools.md new file mode 100644 index 0000000..e30deab --- /dev/null +++ b/content/notes/Notion/Debug-Repair Tools.md @@ -0,0 +1,18 @@ +--- +Status: Planned +Created by: Trude EH +tags: + - notes + - tools +author: TrudeEH +draft: false +searchHidden: false +showToc: true +title: Debug/Repair Tools +--- +Scrcpy +scrcpy —otg +scrcpy + +ADB +adb kill-server diff --git a/content/notes/Notion/Debugging GDB.md b/content/notes/Notion/Debugging GDB.md new file mode 100644 index 0000000..9c1fbd7 --- /dev/null +++ b/content/notes/Notion/Debugging GDB.md @@ -0,0 +1,70 @@ +--- +Status: Ready +Created by: Trude EH +tags: + - notes + - programming +author: TrudeEH +draft: false +searchHidden: false +showToc: true +title: Debugging [GDB] +--- + +## GDB Debugging + +### Compile with Debug Information + +To allow `gdb` access to the source code (Provides debug symbols - Do not share publicly as it contains the source code). + +```Shell +gcc -g +``` + +### Look for / Fix Bugs + +First, initialize `gdb` with the executable to debug. + +```Shell +gdb ./ --tui +``` + +After `gdb` is ready, we can use the following commands: + +|Command|Description| +|---|---| +|`lay next`|Switch to the next layout (Enables TUI mode if disabled - Allows for reading the code while debugging both in `C` and `ASM`).| +|`ref`|Refresh (if a program prints to the terminal, it can break `gdb`'s interface).`| +|`q`|Quit `gdb`.| +||| +|`b main`|Add a breakpoint at the main function.| +|`b`|Place a breakpoint at the current line.| +|`b `|Place a breakpoint at line `N`.| +|`b +`|Place a breakpoint N lines down.| +|`b `|Place a breakpoint at `fn` function.| +|`d`|Delete all breakpoints.| +|`d `|Delete breakpoint number `N`.| +|`clear `|Clear the breakpoint set to `fn` function.| +||| +|`n`|Execute up to the next line in `C`. If a function call is found, execute the function completely.| +|`s`|Execute up to the next line in `C`. (Jump over)| +|`s `|Run `N` lines.| +|`u`|Same as `n`, but if in a loop, execute until the loop exits.| +|`nexti`|Execute up to the next instruction (line in `ASM`).| +|`r`|Run the program until a breakpoint or error is reached.| +|`c`|Continue running the program until a breakpoint or error is reached.| +||| +|`x/i $pc`|Examine the previous instruction (View memory).| +|`info registers`|Read the CPU registers used by the program.| +|`bt`|See the call stack up to the current line. (How we got here, so to speak)| +|`print sizeof()`|Check the size of a struct/variable/pointer.| +|`p `|Print variable `var` value.| +|`info break`|List breakpoints.| + +## Check for Memory Leaks + +Use `valgrind` to check for lost memory. + +```Shell +valgrind --leak-check=full ./ +``` diff --git a/content/notes/Notion/Diodes.md b/content/notes/Notion/Diodes.md new file mode 100644 index 0000000..67bd117 --- /dev/null +++ b/content/notes/Notion/Diodes.md @@ -0,0 +1,109 @@ +--- +Status: Ready +Created by: Trude EH +tags: + - electronics + - notes +author: TrudeEH +draft: false +searchHidden: false +showToc: true +title: Diodes +--- +A diode allows current to only flow in one direction in a circuit. + +## Schematic + +```Plain +Anode (+) --|>|-- Cathode (-) +``` + +## Examples + +```Plain +[Conventional Current (+) -> (-)] +(+)------|>|------(-) Current can flow - The diode is now a conductor. +(+)------|<|------(-) Current can't flow - The diode is now an insulator. +``` + +## Use Cases + +- Protect a circuit (if a battery is connected incorrectly, for example) +- Convert AC to DC current +Fun fact: An LED, for example, is a Light-Emitting Diode. + +## How a Diode Works + +### Conductors and Insulators + +An atom contains the following elements: +- Nucleus (Protons - Neutrons) +- Orbital Shells (Holds the electrons, which orbit around the nucleus) +- Conduction band +The electrons closest to the nucleus hold the most energy. +The outermost shell is the valence shell. A conductor has 1-3 electrons in the valence shell. +If an electron reaches the conduction band, it can break free and move to another atom. +An insulator, however, has a conduction band that is far from the valence shell, making it difficult for an electron to escape. +For example, for copper (a great conductor), the valence shell and conduction band overlap, so it's very easy for an electron to jump between atoms. +Semiconductors have a conduction band close to the valence shell, but have one extra electron in it, making it an insulator. However, given some external energy, some electrons will gain enough energy to reach the conduction band and become free. + +### P-Type and N-Type Doping + +Silicon is a good semiconductor, having 4 electrons in its valence shell. When close to other `Si` atoms, they share 4 electrons with their neighbors, thus, having 8, each, and becoming stable. + +```Plain +Silicon: +Si Si Si Si Si Si Si Si Si Si Si +Si Si Si Si Si Si Si Si Si Si Si +Si Si Si Si Si Si Si Si Si Si Si +Si Si Si Si Si Si Si Si Si Si Si +Si Si Si Si Si Si Si Si Si Si Si +Si Si Si Si Si Si Si Si Si Si Si +``` + +#### N-Type + +Some Phosphorus is added to the Silicon. ==`p`== has one extra electron in its valence shell. +These electrons are not needed, and so, they flow freely from atom to atom. + +```Plain +Si Si p Si Si Si Si Si Si Si p +p Si Si Si Si p Si Si Si Si Si +Si Si Si p Si Si Si Si p Si Si +Si p Si Si p Si Si Si Si Si Si +Si Si Si Si Si Si p Si Si p Si +Si p Si Si Si Si Si Si p Si Si +``` + +#### P-Type + +Some Aluminum is added to the Silicon. `Al` is missing one electron, so it can't provide its 4 neighbors with an electron to share. + +```Plain +Si Si Al Si Si Si Si Si Si Si Al +Al Si Si Si Si Al Si Si Si Si Si +Si Si Si Al Si Si Si Si Al Si Si +Si Al Si Si Al Si Si Si Si Si Si +Si Si Si Si Si Si Al Si Si Al Si +Si Al Si Si Si Si Si Si Al Si Si +``` + +### Combining both Types + +When an N-Type is combined with a P-Type, some electrons from the N-Type side will move over to the P-Type side and occupy the missing electrons there. This creates a barrier between both types, creating an electric field that prevents more electrons from switching sides. + +#### Forward Bias + +If energy is provided to the Cathode, the electrons flow, as the voltage is superior to the barrier's. + +```Plain +(-)-----[P|N]-----(+) +``` + +#### Reverse Bias + +If energy is provided to the Anode, the electrons can't flow, as the barrier expands. + +```Plain +(-)--[P] [N]--(+) +``` diff --git a/content/notes/Notion/JavaScript.md b/content/notes/Notion/JavaScript.md new file mode 100644 index 0000000..0a2d343 --- /dev/null +++ b/content/notes/Notion/JavaScript.md @@ -0,0 +1,13 @@ +--- +Status: Planned +Created by: Trude EH +tags: + - notes + - programming + - web +author: TrudeEH +draft: false +searchHidden: false +showToc: true +title: JavaScript +--- diff --git a/content/notes/Notion/Linux Architecture.md b/content/notes/Notion/Linux Architecture.md new file mode 100644 index 0000000..98e9563 --- /dev/null +++ b/content/notes/Notion/Linux Architecture.md @@ -0,0 +1,199 @@ +--- +Status: In progress +Created by: Trude EH +tags: + - computer-science + - notes + - os +author: TrudeEH +draft: false +searchHidden: false +showToc: true +title: Linux Architecture +--- + +## Kernel + +Linux is a kernel: the core of an operative system. OSes that use the Linux kernel are called Linux Distros (Distributions). +A Kernel does the following: +- Executes first when the computer boots up and has full access to the hardware. +- Implements drivers to control peripherals, network devices and other resources. +- Runs other programs (userland software) and allows them to communicate with each other and with the hardware. + +### Syscalls + +To "ask" the kernel to perform a hardware task, or to access the file system or other resources, a program executes a syscall. +For example (x64 assembly): + +```Assembly +// sys_write (Print to stdout) +mov rax, 1 +mov rdi, 1 +lea rsi, [hello_world] +// Buffer length +mov rdx, 14 +syscall +``` + +This snippet implements a syscall that prints text to `stdout`, usually a terminal window. + +### Processes + +A program is an executable containing machine code. When a computer executes a program, it is first loaded into memory. +![[image5.png]] +A program loaded in memory is a process. + +> [!important] Note: For interpreted languages, the interpreter creates a process that executes the code directly. + +### Modules + +## Devices + +### Device Drivers + +Once a new device is plugged in, it attempts to call the Kernel, which identifies that device. The Kernel then loads the appropriate driver. Drivers are Kernel Modules used to interact with hardware. Once the required module is loaded, the Kernel calls the `udevadm` program, that creates a device file in the `/dev` directory. +Whenever there is a read/write operation to that device, the Kernel intercepts the request and calls the driver function instead, which implements that operation, and this is why a driver must implement all possible file operations. +Not all devices control hardware. For example, `/dev/random` generates a random number. +In the Linux Kernel, there are **Character Type Devices** and **Block Type Devices.** +A Character Device provides an endless stream or characters that can be read one at a time. This includes a keyboard and sensors, for example. Block Devices provide data as blocks of a defined size. These include disks and USB drives. +The only exceptions are Network Devices. Network data cannot be manipulated with file operations, so they are handled differently in the kernel. + +### Network Devices + +If a network card is plugged in, like any other device, it communicates with the Kernel, and the Kernel loads the appropriate Kernel Module that contains the driver. After that, the driver adds new entries to the Kernel's `NICs`, which are data structures stored in memory. The driver then creates configuration files in the `/sys/class/net/` directory. These are not device files, just configuration files. Different network cards can have multiple network interfaces, and even multiple ports to connect to an Ethernet cable, for example. Each interface gets its own folder, as they can have different configurations. Editing these files can change device configurations, but the only way to actually use these interfaces is by calling the Kernel directly. The Kernel can, in turn, create a virtual file in memory, which is then passed as an ID to the application. The application still receives it as a regular file ID (File Descriptor), like with any other device, but it works differently from the Kernel's perspective. +A GPU works similarly, and although the Kernel exposes these devices as files, they are not real files in the filesystem, as doing so would slow them down immensely. + +### GPUs + +At the startup time, a device file is generated for the GPU, like any other device. +When an application attempts to use the GPU, it first searches for a **Graphics API** to use with it. Examples include Vulkan, OpenGL and DirectX. +These APIs are code functions that forward the requests to a library such as `Mesa`. + +`Mesa` then calls the Kernel's DRM (Direct Rendering Engine), which then calls the GPU driver to provide GPU capabilities. +The GPU still has a device file, which is used by the Kernel's DRM and Mesa, but most commands are delivered to the GPU driver directly. + +## File Systems + +> [!important] This section is heavily simplified and only covers `EXT2-4`. + +### Concepts + +- An `inode` provides the following information: + - Pointer to the file + - Creation date / Modified times + - Permissions +- A `directory (table)` contains the data before the current directory, the directory itself, and every file inside that directory. +- A `block` is the standard data unit for data in a hard drive. (Same size as memory pages. Ex `x86` CPU would use `4 KB` as the block size.) + + +### EXT2 + +Uses linked lists to store and lookup data, to keep the implementation of the filesystem itself as simple as possible. A simple filesystem makes it easier to repair (or skip) broken sectors on the hard drive. + +#### Partition Layout + +![[EXT2.png]] + +### EXT3 + +#### Journal + +`EXT3` implements a journal to act as a buffer after a crash. If any operation in the journal fails, because it was logged, the filesystem is able to recover and finish any pending operations quickly, and not lose data. `EXT2` had another issue, where if an opened directory were deleted, its `inode` wouldn't be deleted, leaving an orphaned, empty `inode` on the filesystem. If the program holding it was to be closed, the `inode` would be deleted, but in the event of a crash, the `inode` would be left in the filesystem, with no way to be freed. + +#### HTrees + +`EXT3` can also use a [[algorithms-and-data/index]] instead of a linked list to store directory entries, making lookup times much faster. To build the HTree, all filenames are hashed and ordered, making the implementation more complex. This feature is disabled by default. + +#### Scalability + +Before, only one core could write to the *superblock* at a time, but `EXT3` updates `inode` and `block` count at the *block group descrip_t_or* level. The superblock is only updated through a system call: `statfs()`, or if the filesystem is unmounted. +`EXT3` also removed *big kernel locks* (deprecated feature that added the ability to freeze the kernel), and `sleep_on()`, which was replaced with `wait_event()`, preventing infinite loops. +These patches improved multicore performance by over 10x. + +#### Preallocation / Reservation + +Writing two files simultaneously can create noncontinuous space. +![[image6.png]] +Because `EXT3` was designed to be used with HDDs, and separate portions of a file would slow down read speeds, `EXT3` implemented a preallocation/reservation system. +Inside the block bitmap, a few extra blocks were preallocated, storing both files in separate locations. +![[image7.png]] +Instead of `EXT2`, where errors were corrected directly in the hard drive, `EXT3` reserves space for each specific `inode` in memory. In the event of a crash, all data would be stored in memory, and thus, not corrupting the HDD itself. + +#### Online Resizer + +`EXT3` also implements a protocol to support `LVM`, which allows for many disks to be used as a single partition. The largest possible space `EXT3` supports without patches is 16 GB. + +#### Partition Layout + +![[EXT3.png]] + +### EXT4 + +#### Larger FS + +`EXT3` can only support up to 16 TB. This is why `EXT4` was created. +Instead of ==32 bits== capacity to count blocks, `EXT4` divides each entry in the block descriptor table in two parts: An upper, and a lower entry. This lower entry extends the upper one, and since each supports up to ==32 bits==, the total supported block count (in the block descriptor table) rises to ==64 bits== (16 TB → 1,000,000,000 TB). + +#### Extents + +Instead of using block mapping (the filesystem allocates blocks individually for each file), which can lead to fragmentation, `EXT4` uses **extents**, a range of contiguous blocks, allocated to each file. +This uses a 48 bit system, which limits the FS capacity to 1 EB (1,000,000 TB). +Each extent can point to 128 MB of data, or 1 block group. + +#### Compatibility + +The `EXT4` driver supports `EXT3` as well, and so, the Linux kernel only uses the `EXT2` and `EXT4` drivers. The `EXT3` driver was removed as the new one is more performant. + +#### HTrees + +HTrees are now enabled by default, allowing up to 10 million subdirectories. However, `EXT4` implements a Three Level HTree, which can be enabled using the `large_dir` flag, and extends this limit to 2 Billion subdirectories. + +#### Fast FS Check + +The `big_itable_unused` field was added to the block descriptor table, allowing for fast filesystem checks and error correction, as well as some other improvements. + +#### Multiblock Allocation + +Previously, each block needed one call to be allocated. `EXT4` added support for multi-block allocation, which means that only one call is needed to allocate multiple blocks. + +#### Delayed Allocation + +Every write command is delayed for as long as possible, making it so that changes can be made in memory before they affect (and possible fragment) the actual drive. + +#### Persistent PreAllocaition + +The FS can now be called to preallocate an empty extent, so, once that file is populated, it stays as a contiguous space. + +#### Metadata Checksums + +Metadata is checked often, which helps find any issues with the file system, as each data structure is now properly 'documented'. + +#### Better Times + +- A creation time was added; +- The time precision was increased to nanoseconds instead of only seconds; +- The maximum supported time was increased as well (the standard UNIX time can only go up to 2038). + +#### Extended Attributes + +The filesystem can also be customized with new entries at the end of each `inode`. + +#### Quotas + +`EXT4` also supports adding limits to the size of a file, or even multiple files spread across the filesystem. + +#### Barriers + +Some hard drives have caches, which impact the journal, sometimes causing it to be written after the cache, which would create conflicts. To fix this issue, `EXT4` creates a 'barrier', preventing the disk from writing data before the journal is written to the drive. This feature impacts performance, but is also very needed. + +#### Flexible Block Groups + +Groups blocks together, isolating chucks to write data on, which helps make data more contiguous. + +#### Meta Block Groups + +If the whole filesystem was only a single block group, it would max out at 256 TB of total data. Using meta block groups, this limit is increased to 32 bits of block group descriptor, which makes the **total capacity of the filesystem** ==**512 PB**==. + +#### Partition Layout + +[https://maplecircuit.dev/linux/fs/ext/ext4.html](https://maplecircuit.dev/linux/fs/ext/ext4.html) diff --git a/content/notes/Notion/Logic Gates.md b/content/notes/Notion/Logic Gates.md new file mode 100644 index 0000000..8c0eea4 --- /dev/null +++ b/content/notes/Notion/Logic Gates.md @@ -0,0 +1,125 @@ +--- +Status: Ready +Created by: Trude EH +tags: + - computer-science + - electronics + - notes +author: TrudeEH +draft: false +searchHidden: false +showToc: true +title: Logic Gates +--- + +## NOT + +Invert the input. +![[image42.png]] + +### Truth Table + +|**Input**|**Output**| +|---|---| +|0|1| +|1|0| + +## AND + +Output `1` only when both inputs are `1`. +![[image43.png]] + +### Truth Table + +|A|**B**|**Output**| +|---|---|---| +|0|0|0| +|0|1|0| +|1|0|0| +|1|1|1| + +## OR + +Output `1` if at least one input is `1`. +![[image44.png]] + +### Truth Table + +|A|**B**|**Output**| +|---|---|---| +|0|0|0| +|0|1|1| +|1|0|1| +|1|1|1| + +## NAND + +An `AND` gate followed by a `NOT` gate. +![[image45.png]] + +### Truth Table + +|A|**B**|**Output**| +|---|---|---| +|0|0|1| +|0|1|1| +|1|0|1| +|1|1|0| + +## NOR + +An `OR` gate followed by a `NOT` gate. +![[image46.png]] + +### Truth Table + +|A|**B**|**Output**| +|---|---|---| +|0|0|1| +|0|1|0| +|1|0|0| +|1|1|0| + +## XOR + +Either input is `1`, exclusively. +![[image47.png]] +![[image48.png]] + +### Truth Table + +|A|**B**|**Output**| +|---|---|---| +|0|0|0| +|0|1|1| +|1|0|1| +|1|1|0| + +## XNOR + +Inverted `XOR`. +![[image49.png]] + +### Truth Table + +|A|**B**|**Output**| +|---|---|---| +|0|0|1| +|0|1|0| +|1|0|0| +|1|1|1| + +## Implementation Examples + +### NOT + +![[image50.png]] + +### AND + +![[image51.png]] +![[image52.png]] + +### OR + +![[image53.png]] diff --git a/content/notes/Notion/Memory.md b/content/notes/Notion/Memory.md new file mode 100644 index 0000000..3410558 --- /dev/null +++ b/content/notes/Notion/Memory.md @@ -0,0 +1,72 @@ +--- +Status: Ready +Created by: Trude EH +tags: + - computer-science + - notes +author: TrudeEH +draft: false +searchHidden: false +showToc: true +title: Memory +--- + +## Remembering Data + +An `OR` gate could be used to store a single bit. +![[image76.png]] +If the input `A` is changed to `1`, the `OR` gate will output `1`, and then receive it. +![[image77.png]] +Even after the input `A` is set to `0`, the output does not change. The `OR` gate "remembers" that, at one point in the past, the `A` input was set to `1`. +![[image78.png]] +The inverse can be done with an `AND` gate. +![[image79.png]] +To remember either a `1` or a `0`, we can do the following: +![[image80.png]] +AND-OR LATCH +The input `A` sets the output to `1`, and the input `B` sets the output to `0`. This circuit is able to store a bit of information, while powered on, even after both inputs are set to `0`. +A slightly more advanced and intuitive version can be built as follows: +![[image81.png]] +GATED LATCH +The input `A` is the value to store, and when `B` is set to `1`, the value is stored. +This is not the only way to store data using logic gates, but it is one of the simplest. + +## Registers + +A single bit isn't very useful, so we can use the previous circuit to create an 8bit register. +![[image82.png]] + +## Binary Decoder + +Select which circuit to activate, depending on the task at hand. +![[image83.png]] + +## RAM + +Registers don't scale well, however, as storing a large amount of data would require millions of wires. +We can organize latches in a matrix instead of a long, horizontal line. +![[image84.png]] +To access a specific latch, binary decoders can be used. +![[image85.png]] +This way, a single, short memory address can select any latch in the matrix. + +### Reading and Writing to the Matrix + +We can modify the latch to reduce the amount of wires needed. +![[image86.png]] +This new latch uses the same wire for both input and output. +![[image87.png]] +This circuit would store the same value on every latch, which isn't useful. With some modifications, however, we can use the memory address to select which latch to modify. +![[image88.png]] +![[image89.png]] + +### Storing Bytes Instead of Bits + +![[image90.png]] +In this example, we can provide 1 byte of information, a `write` or `read` signal, and a memory address. Since we are storing a full byte, the same memory address applies for all 8, single bit circuits. +This configuration is more commonly known as **RAM**. +To make it easier to understand, we can abstract these concepts further. +![[image91.png]] +The largest the Address Bus is, the more bits can be managed. This is why a 32bit CPU can't manage more than 4 GB of RAM. +![[image92.png]] +This kind of RAM is Static RAM (**S**RAM), which uses many transistors, making it faster, but more expensive to produce than **D**RAM. diff --git a/content/notes/algorithms-and-data/bigO.png b/content/notes/algorithms-and-data/bigO.png new file mode 100644 index 0000000000000000000000000000000000000000..132515e474374fff3c677ca4a166abf8e8a0ce74 GIT binary patch literal 249196 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 z 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 literal 0 HcmV?d00001 diff --git a/content/notes/algorithms-and-data/index.md b/content/notes/algorithms-and-data/index.md new file mode 100644 index 0000000..cc5cec2 --- /dev/null +++ b/content/notes/algorithms-and-data/index.md @@ -0,0 +1,498 @@ +--- +tags: + - notes + - programming + - c +author: TrudeEH +draft: false +showToc: true +title: Algorithms & Data Structures +--- + +## Time Complexity + +The amount of steps required for an algorithm to execute. + +### Big O Notation + +Maximum time for `n` input size. (Upper bound - worst case) +![Big-O Complexity Chart](bigO.png) + +### Omega Notation + +Minimum time for `n` input size. (Lower bound) +- `Ω(n²)` +- `Ω(n log n)` +- `Ω(n)` +- `Ω(log n)` +- `Ω(1)` + +> If both are the same, use `θ` + +## Searching Algorithms + +|Algorithm|Average Time Complexity|RAM| +|---|---|---| +|Linear Search|O(n) \| Ω(1)|0| +|Binary Search|O(log n) \| Ω(1)|0| + +### Linear Search + +Check every element until `n` is found. + +```C +#include +int main(void) { + int n = 1; // number to find + int numbers[] = {20, 500, 10, 5, 100, 1, 50}; + const int numbersLength = 7; + for (int i = 0; i < numbersLength; i++) { + if (numbers[i] == n) { + printf("Found n\n"); + return 0; + } + } + printf("Not found\n"); + return 1; +} +``` + +### Binary Search + +```C +#include +int main() +{ + int c; + int n = 10 // Number of elements in array + int array[] = {0, 1, 2, 3, 4, 5, 6, 7, 8 ,9} + int search = 2; // Number to find + int first = 0; + int last = n - 1; + int middle = (first+last)/2; // Average + while (first <= last) { + if (array[middle] < search) + first = middle + 1; + else if (array[middle] == search) { + printf("%d found at location %d.\n", search, middle+1); + break; + } + else + last = middle - 1; + middle = (first + last)/2; + } + if (first > last) + printf("Not found! %d isn't present in the list.\n", search); + return 0; +} +``` + +## Sorting Algorithms + +|Algorithm|Average Time Complexity|RAM|Use If| +|---|---|---|---| +|Selection Sort|O(n²) \| Ω(n²)|1 var|Never| +|Bubble Sort|O(n²) \| Ω(n)|0|| +|Insertion Sort|O(n²) (Faster if the data is kind of sorted)|0|| +|Merge Sort|O(n log n) \| Ω(n log n)|More RAM|Large Arrays| +|Quick Sort|O(n log n)|Less RAM|Small arrays| + +## Data Structures + +### Queue (Concept) + +First In, First Out +- enqueue - Add an item to the end of the line. +- dequeue - Remove an item from the beginning of the line. + +### Stack (Concept) + +Last In, First Out +The last item added will be used first, so the first ones added might never be used. +- push - Add an item to the top of the stack +- pop - Remove an item from the top of the stack + +### Arrays + +|Search|O(log n)| +|---|---| +|Multiple data types|No| +|Resizable|No| +|RAM Usage|Low| + +```C +double prices[] = {5.0, 3.2, 13.0}; +double values[5]; //Initialize an empty array, that can hold 5 items. +printf("%lf€", prices[0]); +printf("%d", sizeof(prices)); //3 +``` + +#### 2D Arrays + +```C +int numbers[2][3] = { + {1, 2, 3}, + {4, 5, 6} +}; +numbers[0][1]; //2 +numbers[1][2]; //6 +numbers[0][1] = 10; //Set [0][1] to 10. +// Note: Calculate the rows and columns automatically. +int rows = sizeof(numbers)/sizeof(numbers[0]); +int columns = sizeof(numbers[0])/sizeof(numbers[0][0]); +``` + +#### Array of Strings + +```C +char cars[][10] = {"Mustang", "Corvette", "Camaro"}; +//cars[0] = "Tesla"; ERROR! String arrays don't support item assignment. +strcpy(cars[0], "Tesla"); //Does the same, but must be included. +``` + +### Resize Array + +#### Manually + +```C +#include +int *list = malloc(3 * sizeof(int)); +// Works like an array +list[0] = 1; +list[1] = 2; +list[2] = 3; +//Same as +*list = 1; +*(list + 1) = 2; +*(list + 2) = 3; +// ... +// Add 1 extra byte to the array +int *tmp = malloc(4 * sizeof(int)); +if (tmp == NULL) { + free(list); + return 1; +} +for (int i = 0; i < 3; i++){ + tmp[i] = list[i]; +} +tmp[3] = 4; +free(list); +list = tmp; +// ... +free(list); +return 0; +``` + +#### Realloc + +```C +int *list = malloc(3 * sizeof(int)); +list[0] = 1; +list[1] = 2; +list[2] = 3; +// ... +int *tmp = realloc(list, 4 * sizeof(int)); //tmp is only needed to verify if realloc was successful, if realloc was assigned to int and failed, the 3 bytes from the list would be lost as list = NULL. +if (tmp == NULL) { + free(list); + return 1; +} +list = tmp; +list[3] = 4; +// ... +free(list); +return 0; +``` + +### Linked Lists + +| Linked List | TC | +| --------------------- | ------ | +| Add element unordered | O(1) | +| Add element ordered | O(n) | +| Search | O(n) | +| Insert | O(n) | +| Multiple data types | Yes | +| Resizable | Yes | +| RAM Usage | Medium | + +Each element has its value, and a pointer to the next element. The last element's pointer is `NULL`. (NULL == 0x0) + +```Plain +[N] -> [N] -> [N] -> [N] ... +``` + +```C +typedef struct node { + int number; // Value + struct node *next; // Pointer to the next node +} node; +``` + +#### Unordered Linked List Example + +Both code blocks are unsafe (if there's no memory, the program won't free) + +```C +typedef struct node { + int number; + struct node *next; +} node; +int main(void) { + node *list = NULL; + node *n = malloc(sizeof(node)); // n points at the first node of the linked list. + (*n).number = 1; // First element = 1. + //Or + n->number = 1; // Same. + n->next = NULL; // Point to NULL so it won't point to a garbage value. + list = n; + node *n = malloc(sizeof(node)); // n points at the first node of the linked list. + n->number = 2; + n->next = list; + list = n; +} +``` + +```C +\#include +\#include +typedef struct node { + int number; + struct node *next; +} node; +int main(void) { + node *list = NULL; + int numbers[] = {1, 2, 3}; + // Create linked list with the elements in the array. + for (int i = 0; i < 3; i++) { + node *n = malloc(sizeof(node)); + if (n == NULL) return 1; + n->number = number; + n->next = NULL; + n->next = list; + list = n; + } + // Print all elements from linked list. + node *ptr = list; + while (ptr != NULL) { + printf("%i\\n", ptr->number); + ptr = ptr->next; // Borrow the value in the list->n, which has the next node address. + } + // Free the list's memory. + ptr = list; + while (ptr != NULL) { + node *next = ptr->next; + free(ptr); + ptr = next; + } +} +``` + +### Trees + +| Balanced | Unbalanced | TC | +| ------------------- | ---------- | ---- | +| Add element | O(n) | O(n) | +| Search | O(log n) | O(n) | +| Insert | O(log n) | O(n) | +| Multiple data types | Yes | Yes | +| Resizable | Yes | Yes | +| RAM Usage | High | High | + +If organized correctly, allows for binary search. +Each node has 2 pointers. + +```Plain + [N] - root / parent + / \\ + [N] [N] - parent and children + / \\ / \\ + [N] [N] [N] [N] - leaf / child +``` + +```C +typedef struct treenode { + int value; + struct treenode *left; + struct treenode *right; +} treenode; +treenode *createnode(int value) { + treenode* result = malloc(sizeof(treenode)); + if (result != NULL) { + result->left = NULL; + result->right = NULL; + result->value = value; + } + return result; +} +void printtabs(int numtabs){ + for (int i=0; i < numtabs; i++){ + printf("\\t"); + } +} +void printtree_rec(treenode *root, int level){ + if (root == NULL) { + printtabs(level); + printf("---------\\n"); + return; + } + // Preordered + printtabs(level); + printf("value = %d\\n", root->value); + printtabs(level); + printf("left\\n"); + printtree_rec(root->left, level + 1); + printtabs(level); + printf("right\\n"); + printtree_rec(root->right, level + 1); + printtabs(level); + printf("done\\n"); +} +void printtree(treenode *root) { + printtree_rec(root, 0); +} +int main(void){ + treenode *n1 = createnode(10); + treenode *n2 = createnode(11); + treenode *n3 = createnode(12); + treenode *n4 = createnode(13); + treenode *n5 = createnode(14); + // n1 will be the root + n1->left = n2; + n1->right = n3; + n3->left = n4; + n4->right = n5; + printtree(n1); + free(n1); + free(n2); + free(n3); + free(n4); + free(n5); +} +``` + +### Hash Tables + +| Average | Worst | Best | +| ------------------- | --------- | --------- | +| Add element | O(1) | O(n) | +| Search | O(1) | O(n) | +| Insert | O(1) | O(n) | +| Multiple data types | Yes | Yes | +| Resizable | Yes | Yes | +| RAM Usage | Very High | Very High | + +An array, in which every element is a linked list. +The array is used to 'choose' a linked list, and the linked list stores a dynamic number of elements. + +```C +[0] -> [N] -> [N] -> [N] +[1] -> [N] -> [N] +[2] -> [N] +[3] -> [N] -> [N] +[4] -> [N] -> [N] -> [N] +[5] -> [N] -> [N] +0-5 - Array element +N - Linked list node +``` + +### Trie + +| Trie | Average | Worst | +| ------------------- | -------------- | -------------- | +| Add element | O(1) | O(1) | +| Search | O(1) | O(1) | +| Insert | O(1) | O(1) | +| Multiple data types | Yes | Yes | +| Resizable | Yes | Yes | +| RAM Usage | Extremely High | Extremely High | + +Tree, but every node is an array. +Useful to store words. Every element in an array is linked to the next letter. +![Trie](trie.png) + +```C +#include +#include +#include +#include +#define ALPHABET_SIZE 26 +struct TrieNode { + struct TrieNode *children[ALPHABET_SIZE]; + bool isendofword; +}; +typedef struct TrieNode TrieNode; +TrieNode *createNode() { + TrieNode *node = (TrieNode *)malloc(sizeof(TrieNode)); + node->isendofword = false; + for (int i = 0; i < ALPHABET_SIZE; i++) { + node->children[i] = NULL; + } + return node; +} +void insert(TrieNode *root, const char *key) { + TrieNode *current = root; + for (int i = 0; i < strlen(key); i++) { + int index = key[i] - 'a'; + if (current->children[index] == NULL) { + current->children[index] = createNode(); + } + current = current->children[index]; + } + current->isendofword = true; +} +bool search(TrieNode *root, const char *key) { + TrieNode *current = root; + for (int i = 0; i < strlen(key); i++) { + int index = key[i] - 'a'; + if (current->children[index] == NULL) { + return false; + } + current = current->children[index]; + } + return (current != NULL && current->isendofword); +} +bool isempty(TrieNode *root) { + for (int i = 0; i < ALPHABET_SIZE; i++) { + if (root->children[i] != NULL) { + return false; + } + } + return true; +} +TrieNode *deleteHelper(TrieNode *root, const char *key, int depth) { + if (root == NULL) { + return NULL; + } + if (depth == strlen(key)) { + if (root->isendofword) { + root->isendofword = false; + } + if (isempty(root)) { + free(root); + root = NULL; + } + return root; + } + int index = key[depth] - 'a'; + root->children[index] = deleteHelper(root->children[index], key, depth + 1); + if (isempty(root) && !root->isendofword) { + free(root); + root = NULL; + } + return root; +} +void deletekey(TrieNode *root, const char *key) { + deleteHelper(root, key, 0); +} +int main() { + TrieNode *root = createNode(); + insert(root, "example"); + insert(root, "word"); + printf("%s\n", search(root, "word") ? "Found" : "Not Found"); + printf("%s\n", search(root, "example") ? "Found" : "Not Found"); + printf("%s\n", search(root, "trude") ? "Found" : "Not Found"); + deletekey(root, "word"); + printf("%s\n", search(root, "word") ? "Found" : "Not Found"); + return 0; +} +``` diff --git a/content/notes/algorithms-and-data/trie.png b/content/notes/algorithms-and-data/trie.png new file mode 100644 index 0000000000000000000000000000000000000000..b5fd56e21240f8710c6ee7f4f3d19c0e2dedd4a0 GIT binary patch literal 146557 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⪼Y9N{m#%64Y{y;Rzu< zBQth(NDzy`+B561jKA{|j8ISz4=KO(9m+h&zHrWx=CG4`EX%X0NMc4K@=c>Hl?(SF zKas@NIpMxsQ8bx!iL}K4p+G|zfn*V6J(R$k-L(^fJPb{G&GwpIK=_cb=!P3^@QjV5 zDhPjgC1+Of2<~k5vf~P*p0O;0jexQ-|AZ1nkb)Zw?!yi{Of&J-9EF_+F99ECyWey7 zJ=MMU-CGR~4myo19tBVu$mM^3DPKXjJ{Np*8CqaZHttuJymsDsCk3Of;r{b1fp@#? zyo;Cg>Wa#z(olX|s_(=Kks0skV~!CVQzSp{wmZ35n2bO_1W|G?a+NVpgCq@wnq~u$ zuHsE?(YpQiJG?a#S;{gGW0T_q{o^U!Qwdb2Ye|%1+&AgH4VwObq3!GsI%XqnS3K$D zlN3z3i{0%GqAaw4=k)4puC9Lhi(ksEzNRzk?YHlKo>^zy1qMN@#B7`I=reMH(9H)Q zc(6MA?4MW9%V=QIwcmdGO0I0+I4L|lEEBCSxdeVa>FhIZ#!;CUOf^v;frk4GBs1Wr z=qzSj4Ok}3+t1tYq;Hrct=^nn9R&b z^-79E>OAeV)3lA?7z=IMUwM_4O~@7;BE-4`7)_`>=v-b!&)|Y28WaoOh2I4G3v$O? ze)$#E|9;|sTj?Hg#NpK^KY5x7o?sn_f)lW&X&s%CGj0c&l;9CydFGjCe5~Pjzx!Re zR983L?|J!_)xz|7j}L=Z!CaA@p{aR2}y07*naRN4DK=xe&OVzEUq6#(NhP2P2SEQZ^^`qG!aRBfs~{tM<4L>5uMvBVR`7mAiK<{SXV?_xdozn*#4 z!i&5H2OfBU4a{Ut?njtdp_h_MC9lC97I*%j|DYo;(de4!AcRq23*A9Z=qCj?$6m5U zjiXP$_{A^UXtCna^YyX|yu<~)@tc>TuDIN3hF^T~1uxSOe}Yk%?L$w*c&xq7+E$zy zP2a{F*_l4R8&CcRVx~BV6lD(IS#kJ!^oyM>zxvg$ZIrRa^K+m3T(yM`smTKD@ILZ_ z&y1~i2Kf273!{!%+4I*t?|>%uX_H|OS^*~*G$?eoCRxd;`N@<2A#joSKzVK4u&;!>Mqg zfi%LCACp%>0P8>$zY-*bOdv3h9%Ag^@p$cy+r5O#q%X64LPy}llQ_LAJ3^a$=m$E+ zQJEu8!Ud6oZGg+T!WayC&aksHbQJf*w%cu6-FDk;Lax?eclhCl%M#tq!n~VnEUnQ_q}H&TDRe541YOHYkGnBO)?RCE z#{fVeyavQnn{U3EEkgQ)Kw%&uB-d%75ce`;#3O;gAYnh-ldyz|reyy)>*NR{gbPMN z;;@BRAY1wj(}}yK^*y8gF?>Ap;1BfZKi;MZ&m7jlE{XMYKK70~g|~x%DsIRbspB4s zD~_2fN)cLOJe&wf1>6hJ! z7#%W9i*U7o)-{54NPUXo`IfQ2<7c83Ik2S6NW8D0+z$jCtu3z@ zgOfPscap?hbIr9Li=3HmsWtyBj=&bbv2~T=2zVFp6b1oa4m@DE@DccU4B&UxSquQw#X@8#Iyy+O_*m+^+-<;7bHuCjn%44c8hK~ETYe*W8%;n0O|Yi}zjc>LmB zR1;LjU73#-?qm)G5H9iuwEn=_a}w#CIgiOzct!P!)|3x9_zGj^y0>lPMUQ$Hg#IuL&r`w~CPBv@`(ZC9`i4R*^phDUsf1Z_ ztYbSG)hB&%32crxA9U}@BCdiSL({#`uY5TfnefMVf(Tiry;93stICki44~)}mVa1g zKo=pm9o1gwAn2nt9^vWA_$a}UtlS-(al5+IlzHMB7doy)+#TKrDMA8K1ecxlqaRhb zDiZU|FP~X`UdJ5bDkAueW9z>6{qNZYjT_09wsDz)x+q)oe+$Xug|#LzL_dOznc>}h z^Uc-&{9pf52FhdAp@)8``s&|))yZw>)7w%WH|qe2Z|W@Kz4qM8u3wT~keSJDbqs_y za2pI;6x4Y2;hj}a3h2?zpqSmE7>RWKk!b8cl@I(?9fwF%D++=5hzqo(N4kDD)kFkQ72m0t32$ewZ0CYhbI){Yo^mkMff5vddbA3872C6T3Zrr&9$H z+;|x>kf(F0sULi?I5-Jj3f^7R^T3<|g5B5& zkEbfDjh)8Nt&gb~#$T3n>&K$5rD4(_;nwG3jtoy#;e2vkJXBk7^%eZuh<}{?+VbDB|#3&7C{P6ESoSL9WmX2Fy!J zAj9jAN-s_T=0E@QKk0Cv?R$HP66fW8qIhlTDf2Q81h8!)B~1_t0c>x2FKOlIOOznW z@#2dvuJ+t>&+4f4j#Sk5qt$PI^J`mC1k{n)2zO}gK`kbb={Zo?LE4Ky`pqX*>9Bes zZoMFUEL~15y6yJcsvC8bC3{xaUr#XrsspQye8~j!u!Rbt8_NnYJIR3$@4`s-<@j{v zom7hj^00yF-a`V0{&?vhtE;a1v(~`3a5U=nI(>`as@oOAaQS7IdygtJJ0i%bn1IBX z1$D1;Jg=sZiSA6XYaN#{L0iO#5UqZl0!Fvpc3aP!5XcB;$6sizcpLH46HiX{_8dyq zH=ZyqXb61v~I#Fw;lkYK}ho zCyCJALS_mFSo#TbKVfDo9 zNNeN@&PmtJlaD{?Srh`8lht4f*2J-HxgW)j%WJ+Esb&(GO}~K)%{Rl)9oE|N3pIW^ zX91){Eq}dCA*cdR$kS5XP~X9d_Ws=GKC1*ATYFYMM;1Eg&tG@lb>7xP#4e?0eN@=z zV$Y2P4Mrg|D3YrDS$uJnc89Dfmof^Bpf|R8?yOu2EDyY*?UN+Ipjc;3D#aCw!m#PZ zs4cQsRy2gLzU53E1NkN;-~k5+Wwx8~`HCy9tTxgtYa<0Y<)dRZA{GhQQn;Z9y5y5= z0Mp`yHVB16lsGvx2!cZ%<(hX61GEmFkhvI%JWGo_=CI@+^xyNom| zp%{V1IPirDF4->vDeR(A1|}l(FS+;Tl3P%dl(p#72~a87@TJ>vt;S*yW1Pz^lUf;$+tP>Q}#NW+sA~^=HT` zBie`Kq`!k>ayO1GAvKchz>eJMX;1LIweI;t3~)Ako-oFbV@c(Str&@U^tyU=~8&0kQ#J ze);9qwbxziSsV!_Fc2{!ciVk82QNZ{k0}^4gkq18>a!3FPfZ9};Ni&M&9~TGv~_27 zhvH7JW%y4W`uS^x#<56&4d?>84@uncq=wm z2DihtPn|LTsj|qCxsgCX`p@r*#2Ogvp zg4;$=nP(nLFS^tOk%WQBFV^2Cn{MKaWE`LO%U}LdX-0qTWC}(%en%buho^X-Qn)PsX{{#2iP~+HPk6Y(V zYE(#B_HHuGSXUJRRd<2!c`c9+ULpuLJcdbc&>lfxb>N#Ru{@(X+KhqDW+oZRntjUM zNXTGkiWF~y1E2FCC61AQ%{AB9>&uLOp5mb1qdY0Z&}<j$-X#fyw*Iwrc$rqk~!Taj-5Dg3J z=8NH<$PRRN=w0yLUJ(`2b`A~>dJEG{+GRi#G#SEBkk?;#gK{gs;Uq^0GhFPE#<8Ic z8uV-t*D-Dght6w@jou;?sFVHE1cb8X>hZac>olkP9r%V|VwVIF-0b>rrp3i5DfAZO z(ZzdYG)lk%5#|opaIAZh@oj;(Sg|FKb#sDfF__s|!g3cA1YGT;;lR2lUjwOGPde!&yVEgpST6nA*Z#%3sUCggQG0;8Dd^hJDTwNJPrq=o#~?Ugl`EPV?Js`$3um*MG2_tc{U3P0+=;h)5Ad(FKa!d60m|i0rnNSW zSQFqF-HS_z<*>@sBle492})_8xM$3m;jC0Y|M|~7Gly_q((L?seJ1^DvXGl!)|qAr zaX6ljo7OZAoo+^s)Z_q(AN=44ra2gn1S}kqfRROl3=Sr_N-lST$~cUJ$lr#D3p&;X zGpqjbBW;{tK@Wow z(aMpo)0Eq%0uwkow7i>1_*1_kYII7q=_Z?cYZ}Q2X3m`HKtG~GfzyKj-6CB2GzPt^ zW!$aJ+X_+5q_1QK%c)WqYr6?i>v)AYgn?xowx!{E!?S{i#nIq7wyupa4u!&aH=79S zJZNCNl_+uZ}am!^JMn~r($iU$ad%ng>Tw2tQ`nwN5?YvE%^)20|9Oi zKm3rl=Y9CY$5khPzmvu4eel0q`>-=%vCo!cPB+luEY0H^Ey8LlT|7jZkQ)@+nL#Ui0WmO>;}uFh zguDf*UsL7!Tg`By(C5ybqrJ<|Inf8RK=yBTleOcm1jb4jll}hD;Kys@8vf3iIfp51 zIk=@y6GNF_bkRjth(4f0_dln-L=y91nD=K&dLxJOCL*~xDxyBtr8jR_dP&i;+$o8(|PdHwu8%?*XlQnW&X`C%h zuo7!z)Yr_F&ej5s|6>m^Yt$C%V=WAL8xsuU2-jE(^_J{hZfYI1w${);Y~u zi#hSc6Mf_)vjo;V35a8_a|ULN6~uS%{jIU+WSpiTPIoML3d1ViIaq>OIBQ}Ys=`i# z>t#H?yzu2Z%hlRK)vhK}w+SkWF_HlcDpe1rg`+R~%fsZD4VePvSOw?q-MJa&-ycuLEbF0~eBZ!Q7SaJO5B0W?7unzDu_q5Y;T?F1v}vs-_s zc;ZBS#Yay))k}ZSP}Cp7x0|#BMOOM9KL&4g!D%Nz6ZE}1?=^rHsCcsQOh91V&mU{& z$H;(ZGP(O6yGMk(bQAaCf+yz*lQ*)JvNOV49!qKJ3L6ULLI%K1MA!SS%-h6nL7D|{ zDOf{nM7GSFx>~V^@dcH8*H$lm3j(Klq2gLr-}$k5W#+QGIWvfBTF1G-%_+= zMP$Gi1DwzHB2|bRg-kzqg0XHw+HDa+uF$_c=>u2h8l#@4jWw3RT9 z)1(I43IR$JD4^zSvAY0i0=5{R3(=*ZXfqfB90%gC6^(uK-U%YQdP9-i@n{5z@qAYW zwiqCd_akMr>Qm9$2a~}YuCCxU3PN_Tz4tN>So6fNxACkFGlu-W)s|aU8=Sg<`4GdN zBu?FM5tKr$txv;S9`D|dt-h3jyw?VhbD{Srg%_F@5p)4>@I1#&pC|>z%$zmilz2>i zy3=zZx?#=rl8(b}oRAASIcnq2&Xx<>>M_=L^v(&A2jGJ(#n2L|Z;{Ug&2jh=fv3#U zk?(Vd<_4bB{o3d=idwpZ`fXHAfK}LcW!}VLT0m{rgedZ4zx?t`Mgax)88eN6!2$DD z5^uWFQPvTtv`Qcofu0gi&-2^b8kk)7Xtp=1&m-_h=ku)F<@!9o5lQP5vnqKy5d(_C zN1z~ZvL6fI;#_kC)8t}?&OT1Y@3kT?%+rDqT(%D&>&Nw95%dUq&`u_`ZMNB32ICgB z7lnJBcUgaIZ}RYn8J$Cb_MkPID1vkhzW2G^3>} zys3UxsB;o9Xof$1$5`e#SX}Yxes|Axe=iweSN;UWMD<0PgBTE!j00grumDIQCwW9l z!hpEgnVAz*V4I+D+AW$9T)Mj>$1;tGS(g8yRc?3~Y z2MpkS;JVaIsoGACF*G@dZ>nAdC-rlPg=at7BFAxz>8hbmMAc&rzWTo?oYiwbUL%r5@F=Ms$!kEBZ!c_l zRJsela3KTlSPQiM7p0eEzcf%`;6fJ}u;Xsv?$@s@KhXwP+rg{vsU`a0YK28 z=}^~s9vbFZ>WA-|OHvc2_yjXNiD3+^@DStbyz6?=$G6}sk}XM)GFBPG!m+|k2Kb&c zGSdeGu75ntbrMc7M&K}MfIeF=>ks@SZs2u(>10KAPFX0a7E& zC4pq#H6a>$Yp57X{@s90XrT{5FPv^za<3N%&%S5!lbULhx&z>z9@4B6K@yq zDG(Um$Df$%lzAv#3LPi=8~ex!M1m-9xZ(Qh+u#1SUF`hM8uJDU?n%X)%A4n5SOhu3 zh%?TwzUJyWDa((3^y9MiYa=U0wivK(O%f1WO3+-F5>|f@H|^ufC;v6|bLfUM)G>G> zhKH19*2-5#$930TZx{y$2du=QXV&alI^cfx#gmzePG3zyJhQgw~2OlsNbPUgc0{J0m!cSaU zyZfHItM7j2yTa$H7D5(KDfqh}7^Ca*%dgP*KW|s$#mcikYu0Svi7-edo^;OlR0<(r z!m{sD^@x{H(9p?EH{EDD<^;a)e($^9>X>b1`?TZS*`gr`k1bfxEQ$(4n3J9;2pI0= z9wPOb`EI@SHq}Ae(zW_(tDFBa=k$aMWZ?|OLZ4rM<@M^WyYH&**8cg|bQ~>xq~vZF z4!MA5NF>F%*n>Z41wJLiBr!Un z#5NB8>N0E#bOl)!G6fa~5N`pRt1C$7R>)Dk7jo*I9?bY|7AB}Ufc!nvwA+N$M z9ZM7_Iga~8X>qb3%7`PIlYY`5LN<{}kw9e{S~{v6UTlpyu(DU2{`0~}v~gApHYQ~3 zD&n2p5I_F$kBvk6fNnD1>R#x^xGeGkTv;jW8nWae1yzzc5?yeSc3zSGm3%2w!1CN4 zd+y=DXN(EzYX)iegNCMv0D7pk#c$3QkRDH=gHT~R*-w7*6Cap@bsUTrGadHwqWGGH z^-P`zIYhA|oKsMy0JZh5L4--kAjgSO^WJ#V)nFBEsr531HiBz^9cOpCf|>}Zb4lXW zd(+~r_Y;dSF*MFsMEzN3{m{{{SYEGtb`WcJO?b0T2m)BChgn=&_y`BqSstG|SIR|w zwK5u3gDRqyPTz z-;lv}oo9-m#~upfOke}M3b;ejC(ktNZo^xVi*$FGoU_hvF${Gdb>vaizy9mLIwN7t zj|ErV;P2Zt%hTvHZIDEXN#Xau|9u~x(&~HbAQ|pU4_sHc8nPj244uU1^aeMdgQwi} zqRc<_sZUk^<-h)yYH(oCa;9Z$c5Q8mFOKWXJP9p^T;H&kjASWoG3rxKK2<&Vz=L)} zfLyMF7+e=9Z%Vq?KpI5(7b$tRa^c3{B(=4)KNzbz6=iU?8qq(jP8cwZ2+h`?f38~L zMO^l)dbWmA&-)wWG#rUVUSKG2=6J3pF{@{`Y(veQQuox~lQ4k$?FHe|$C8^ib($@{ z=U;oyGmN#@T|3d@wrd7aebkXg(AqjkhV{O-HBq-|x5x4Vz6#!1J0>`VJ;pD{n-W2g z!$&z3L(E`7U9xQ(7NwB_L`BH3H+c`NUDP|kJk+E z88a!21)gJui2{F7V-8Z*lE)00gx7;LQGPdnHw#}U1|_3HGk9aBx5gUpafU)XnJ9NW z4{W6*4*{M)Jc)Qi**Z(Guv2FXAK+=;oAaz-pr`QEu#I+2$18D-x=7;XQWPclXOcmn zFHzkjRPw}&KjEhXYoqGRc-+*fl-c!!#{gP*_~D1EN0qq^9m4o-u)+Gm%S%@H&>J!q z+IWw)3(wNTk{tiuUoM%AOu+lI<(69+H??u+{;I?JN0z~-wN)DL67e@{6T_i)*-p(e zY92L9jE&WX>1h0kX!HW&rP)vlO=iNaQ7O9{+}OXQq$ z&T$4F@@Nyi>hzk0bV31!+rH*O2ungNwh`ez+oall`|U*3tJVT52cuS|0^2ilAv~0Te*Xt8Pduh=g@0WgsaYequz@3^JeT)SMkp@~eEQAv#3nFFV9O$2G)H%f06g1r zi^bSsR;KGsnKAAN8KJ_IvAO<>_X4jb-cJ+~6Bzmh{PYK2V5yM)PSY|AMh(C7+=I%3 z_?zGS);Ku%!e?g$2rxbAU&d`X^{I9m;cbMDFeH=aMgYHWKQ-Hi zhFF4N3o6D7?r+@b$Ovd11U@t3CsP8vBAnDQQF;~w3Z29j$<<^Wu)Gy{L?R&?$O}U`<$o^?u=pq%F6|b-t`VNp z9zIz;tRGC>OTjHr1^-|Q+&~>d(gUN*L=w)Eu!XQLzv6Q5jofY5-Kq~A_MxyOStDD7 zg=3|xLYtt^Yb$&hgz39teDT zO9t1~)!9Ek+v~*~CwlC$$5ty(i>` zM4|1VV`BH&XCHh0;G4Ri2zd#0>g5?5FtjbaAruhMIfM5^fKDU1%iGezQ8(O!HxzFs zJHklYYOAe$YmPB^&EQ6NrmzA5yw_ZNjpIS+?>@>VND?KKv*|+jhTA;)Zdo13sCkEL zj2G>ipL_$f)eYK-yJn+Mpb$ijH+Ox_#PM9jV1~P!K4y$a#8kXxkKDqo7Mk{m;ksUN zP$*#tWdMBMfkh zKw90Q)7>?z*ajw4|5^Wb{&jr@DY#G}N?eDbqFeQ)#mW`W-qdggcGNVc4|#A!Ct?{W z>Ik&AYHuk9U>NS^wosubdav8{EGTM%5CV?Q7KeY2y3(tlAT8el^~AmXC5hqiOvWpL z?qHPgz{Hq%oIn+0IHk4zn|QbwbCe2K^e>DW$tC)z@5m}np5u4$Pru9uDiJ@SCrV#auD=D&-d3QP{&LLR;8LI; z1KL>x2e881l%R24VTD`(L0$w5t+kXyXWO(>8r3HY6s{BjO8-X(L91R9$*7=ihvl9A%}fGv z;W58rWIO4h8y>90h-y;>2yt&QB=AcQFAMlio?zQltKZpw=%r~OFM{IrGiXd_ayNWU z$hE>FjHeCl9LN?s84S;M+IW$RMd2)>t0otOa?*_&(=NkWzJ#E5E5qc98=pkQa>V@& zSdEi{s}7X4L0!ur-xPAqj~1L#FZaMBY4l`JaPHscUg$2DWb*rDK~HxXTLzt8lOJLP zB!N~88v2drA(rf7%cSY26zh{hrzztLR(%I>#H6u)q^}<)P??X6z>#~|!hFyi-@_6b z`MLIATMVG0Nk%;jr-K zFD4md!U9Z&$_v-oG<$whC?$iAslugnbHa?_$SaJIMFUeC0oGyMr^g=}ZfP*MnUlCJ2n@@_)npPEmO?R;`_eYZFQ4Q2Scc?%Z> zv1O@Vo@5o2hO%#s0b?^|h%KCPgXNf;)gQR$_eC`{!M}GC)!}1}K8z;ePAnfN{sb?N z`c4K<&(I5%w7OL4EOc0q)B3p$nEqmFT$Q;yT9_g{8ihg@XE1y9+t-7T+GhGa+Az`a zM7qY)0IJ&=# zYcIs4I}o9i%ODm|95VqZ#Oo0r2A*|>x&zd)Q zZ!$u+3i@y@_=cIDmeZ0ayR{SS;9q*)*SM!!6bvlZ`&&L+IlIr{Rt`DD!_g<-r_T`-*ow7C z9QL>8qp!W2VdE|&eOO$8ufQ1})1ZkMD=p<}ZQL;x!bvPgiAI%GFg!cNSrl54aT7^; z!qslik!We^iqTlx|G}uE@5mVM99L!D);7IZ0;|6kEXH@DBu67I*}5K~Br%#uYebIx zj9c?Sl{Q>|yK8TRChMPSCP~RqeyJ_nkp$Oh8d!c$8JR*G8nhHjV?hn>b+#q3ZH2Yx zc3K%rO%s1_3fET4No?RGXg=w_8*Xgia9=IuQpingU)=t93%Wo-p%KslQ@8gk-Nsx^ zW3L?yaLA((YvAAb-oV$yVye*^uypiiI4s=MrKIv|;E21LeQ(LjmeS&$mfN`XaF15H zG(34OMgJ1=#=O1Y)LUEYC7ojM=r_hb&ApHn3bZZ8Q0*0SwG)q(zA5wQX#3!mK971t zjkKg0z4JX8sfpCC6^b&GIO}H`_#GLR*0WhR{pltUySCl9*tCvE!F`LWZu##cU|?~^ z2-;wOF%hgp_`=JJGtMJ`)z_bbwxQRCa7|hrg*<8TM%=tK`W~<^QZtPSkCs3D886me zZSo^43mFl8H~lnPX+7V%nD`nKFnze$a2RY9P4@<(@56ti&ozDmOYJw6-@80n>!>8H zUTqA2w!c?m9EZ2j3pX|T{78&DePR|)YHjECC=a&+GSNW8k===dCO!9Te>kX1e5Fsy zygSMFLU^keEy7GD1Hny!V|3!$(B1MZi<^&Kv6v*t?~$r67-DpI>>RYt zr}FmzNB;*%jobJIc*9lKt-dDQ?JmKx=HA)p^6zaJ=!VmgP=u?Q6UR8=?)jnTd(h2D zHT37Vr2nivXW_hCobX>E=j<~sLV}XQfb7nLSzk9ib?2G>^lx~rE#4gd+t{x}*L(tZckbF4xuzU*`cTiX5mR+gSF2z3r~Du< zXg8V}xy6b6wfmSXTIYo7@VM)bB?Pv6I?ug4SKi_}3MDbToq%Wf_5R_cPs)7B0UoA{ zVI;QV7_q!q`y?=dty|`@ay{B!nuOO9Ax%8M41k$~+=DsVXtFzjE;)9W*N_;naxBD_ zd($V=;Tpq7s!&%$ASe8z5jw-`YhCF!>lo?&$^BbnVgR6GK7yE=a-o-u;5xV{oEq|_ zNS?q^yR4bqco-SFQHz_F*o_MH9ePV#A%fotCFDV4;)KjDoil$;;(ktAWgh$o#T0TY z#02p;su1SXHD)7mN4c+1R5wQLW^wn60Ncjg-N?Q$Gw-3u1&kS_^a$AASpv3S*j}=F znWfYM+=4vJ#U-n?KTl(Kw9__9E4)l*6<%Eg&Z1_Nrn4^3^`{s8uhl_~L|Qk;Gx=~7 z%_k2gKN>$ha65|XCfzMLS@Mt%n>h^!w<(i`|N2h5($FO!Ncb^tP4Y6SlsS0I@PBgS z;{G8JArl-hbFvGh;Z`Df0hoqyo65SLtu#i#j6Dj%9m|-p9}$;KWKAl5gSU}$7yPOaJQ506M9>q%za#E9H1A* zkAgdMyy>Ucka-K0ex$v6JC%s%?G+*sQf8wfYaN~h;9qftIL37$TdxYCL3d=h%H&18 z+MCSRbC*FHGROn|nuP>XJ{3-KzzK15&k7|IAiQZj>RKieL6$U2C#~dfP2TL})5(l8 z!=|y%L@E9%V&D(_Ko>-8LtCVIC0%sVOv)|rPM_mBRbb8EF2E*=AKagDEQt$_r*^cu z4B~0xAI=DP_03nE_SPq;iJqVt?hiSyw8MhKI1(yaMot&OK92B?rm9J$%)t^llu0j0 zgfT)C2IdIMOi4%%<~&WQR?fns&l0ynAGzD(t!0q^KW1C z!3OmqGXj%y(XBKrrJ95>avzreIyww=3L0<^lUkS+p+rK6$LBt-BSY^ujdAiGhx>4% zSY~+QP!5!QXMLlCV(fPzXj75H3$a~BUMSPpRAoC`SUvsp(>`aNJllDAMn>bO;=))V zzkl~g?XknPw4VSkV1^vq?Ef{d6^7@HT-)qQAPw}B%3aSvDx^{dhcR|T&YNw;y*RRW z5wc}zBl z+HE%->LG7KY!gbt7(e*Nshi7WHBIG<07GeC^2bYjzywr+LT6_C=%bHW5pe%G=ln|f z^zXEQi`Ud@#-WE+`|Q1s^E8hq?es=!c#sgj7#}yxyrH`3#+zgia)MRllYd;w3YtTi z!w(3iRV8eoCEV`oufIXH#~yq5OaQLMa@4X-SGdlZEk2;L+W+*YD}Cx!=yFoCzFp0F zcvf}Cop;#y=b(%^bLRS_E1rSBcHC*l>LVwgTpQ4>z^~pTu`K_B!Glctiw*&~=%R~l zu+nD^7kXa#>+iVp&T7`IhpoUlo*Ft@Sqd%F1aH5?_SL}$AMBIH;FZAjvW$@eyO^Ks zZXDcmtk(&%UI{k>1H(H%P+lL{r0!NHFHKzcg@IGS*iNl zXY zWr0=~A>4^DbkC)iU0Pjw>7}0eQ8w6c{c4MWfoiWk_tH0vt%*q*0xTp)frdEAiBkjb zl#!7I-oUd1JU8Ebb9L>t*S6WQ2fgp0`Y6xLwY@A8mbV9$eEA66E3Uk2gO_wa}%!n8lCT;53R`zvhyv;DwH!u&Ue23o%*D> z+R)YQujyp93opE|y6}PvYdmbV^_JBazVL;hu|ha)bD$JdDXdz}PHJ4*L&5Ta;N@VR z>6=XV$#S>ddV96Pv`E=X2coZ2>J#Q>&z@~w+++9Ms{zS__19Z}f(-l7qjQC?eeG-i zGWy&5acAwoF>+wkd+xhOmeRA4FI!0GI>^o0xQSGZy~cZ1uRi?Y<8<8NM}1llF6(wx z80$R=bt?04&qaOEX=~kMbp2}@1Guf$TkpMgM?E^{Q7;ojJ8D~lPu_0~3xv^BeZ~mc zW6wRR(?0o0owxfwpDXPsefQD8)bKRn3M>VDNob>k_T6_^YewFZFeqoXpy6iaT86{bsO{9;f zGRMsi%$%40sAlL`aFL|HRu11Q6V@VE)2tv&}cFzWUX_t^Vqizp6IdY%_Z# zoNkhP7Nxuz=mP4=BBa0tGfZRw{Lga2;NYOgeHV-qe52sv`5kXu;RL@U8TGYyJwPKfL3_XFQ3P*bIj*!%^YJH z-BW9fLL+=%LoqZ*9d%Uo$xnQu+HPCX5iVA601r0kXlZu2FUq`Kpf0+5MxK$P8HN}X zfwYPQ?=za6KmWq>COXzQlBl?cS;yx;|M_bF{rA^-zFH?#GnojXiD2j~k)7`&DRaZl zLmkZC>_u~C&TI{V!R#EEpMCaO2URc=1n%4(gU4Z=b=H4{#Huy10VQ+$F*ftjtiKJtR(x9G>`GRk>V@}!XXah)z@A%{p5WJ-EE}szxuad zt&TtL_-f;gH?n(`-(xpLyFgA}r~&Cv^P30|l zulVjc@!S(nJZ>H_z8Grtov}VnxcI{7zo7HYx3_03a8cw<&cbwmlh?8r)E5-AEb&^y z3xh19XQBb{!lZ)<#C`YOrvSKT>LWk-eZl+%S~Fg=I{KKSt1o@=OInuL%V(vJME9nT zWeGK9U{gQk4i92sHr{w+2L{f4e6HQ@9((9R1^z$qpaZK#etLxvo?J0tT00XCImZX1Ov??8keKp@*vnGj+SpSgf(e8dd}_<>PX>6BQ04 zBl=d6p~#Hn%rAernlWRB1zNXy+M!vzZz)tps^7o)-xTx3`Wvk8;H8H&BPIQ8dJERn z>;hqP>Zu>|Iv`I#r;z}s5OV{}W}E!#*?R{bJHIbpFBkn(ud&S86E);#FNxr-)8DGA zty*m|eG?lv1TkWqc_~EqFylJlfCH+}e&(|h!28IPx2pTct0l}aor_Rz;-* zv1n|Kd`I?;yV!DRkBmJxim{Nv_uluu*Re^&`9SyJ9^+_DDYPRs^Zeo$zF6(E&pxL6 zT!QM=V$x=>-zV$!Fw($Fcxdokub1Tx@+}!|Ml-YGhbyT ztv5ro`im0ZT(2%*n8v3L6qQ*>5@YN6XuD=_-N!wiL6<*jbnu-UhhFJHH<;m+jyE-QQPx?zyK869kf94%TDs6SsU;8t<;Y2=Zn>Lgo$^ z&>g*eXMZiYH;Rf9igC}8Y7CGuTmB#lp>EChtXT~V4tU!VYp+B=<7#8}!dl^}r=D7^ zz2@3da&ZJ=tJd~US+mEkjMZom53Eh2uvh)fai?Ac4np~HMRGs(*ki5(kJM2|9bKJ% z#_84e+imY_JXh~kFMV%dp>Rw=A_`7_O+IMibu|51l6$Oxc!9$jvIts?ZG=&~aiM?o zj~DO~iOsq$OC~dC&UD-W{oZw#U8}Er(y9z=H_g zLr*BIuW0!X12%U*7+2t}%b%-{8w{d9kMY&5USBJ1(#GQ8-5x6p78Ybpww;J zQ=7{tzCIWj%=>bD12xA&h0bOo9#cU#`u?0J7!1V3}; zjouoE631E{vU2ZTdFGe^U&!hS&dp`Jcb6{_~vw^w@g6s#hh*7!}qA*}BFI z0~c5dy523nyMAd#tFydu{dLz>_uO-@mt>&7q^nLP1(re(RdPArYuZ8y;Fg5}35NN` zH@;CL)AbqqAs}+6gx?Ddvjqye+GW>Ws@0`nqI4($Zl?hi^ThnOt0%Ru{VMUqBah6s zTRfFiEWyAVQB#r%&$C61K)4W~^6Y44@vOGe{O)(ZtIj*`Jkws%Fg?u#IMl>%)J_PgODh~2ZlX+ zeCY@B0fYFKTW_fieuOa3U3Jw}qKA8Y-G+_oN2XBhwa|0a!T7Jf`f9@URJ&VIXvDyz zo7KyAdQrz{3$(`{xh3w@7O?9?n`~oExtG85?se`W2W|XIHZbg_xg>zna3O~_Fu0HB zZOBO3Fy7hEr1M%S>pqrf?z-zP!!mV6?hiS8k+ub2qpezOtEE_mt3mhM?|}#U<@)q; zKgw*ANl*X)AOJ~3K~&7&UK3ADdI+|1nP;qI^}J;&lOc>VwSza7m?(@iJeW*^*k+lf zMb~X80NQ|8pPWzP)iY#<#MhKURMRyM=;Am*p z>{&y9{||pZq>h>Ppa;L0)aK{r^`PY;5%$o^tFAn>>guZwt)h1++B=m)u9 z(r=xDQzw(~c=1H)+O9vYNOx{c4YwQWf2%|jpi_{WCszUQtX2_?bW4(~*ayT?)O z@&X^X-gfKICrczqS)RR+B9+`->PURVwke84N(rYe40X=vI?EBZS4sqg8mqcQF> z;@l3eU3cGg=)CjKlWu(5vf<4IZ^l>(zOmp#9v$hOp`quVe{SgCzwz%w+wZWQ;F@N* zpc`ZZee|`YFaIXE)fdKxclyTkZNgLZkgtC`X_dQr< zM5?~2wF<0Dl6a6_5UXjPqIR)%u+p$@=F26@H3}A*BiL;|c9de)VxePUVeJvbu(Gxy z5EYC&C0%SbIXen<@<*T@YpXl#utPO_mDzsAsWCmP9#Y-ZFSzxYS-97|nXL&VtbJw^ z_Dq!ffz&fIZb^@Xu7L|&ytIi6-T_&%{MJ^$+*Vs}`_>pmrZi?ft@NG@+I$586JC8eb+N0%m5I%w*{=vxXO+f6;E}op#!(&g=zv;A|7|<6fFMY_P!wt^*vz_Ri9Q z33$s{95|-$tX;B%hD(!eo_M+D$}4vN0}mP}QuuNWzvAfP%{JTIIRKdTFlz*Vk!OM| zUUSW#xRkk{vBtyl$Rm$>*3R+@I3yTyYw_5I8*b$9>nZMqb!F#-&|fVbG$;uxXvy*G zg(8b3>5etDt#IG{_Enp&+iOHXFCI7g3H`9vPo4lgEx2@d+G*!%BLy$oEw10wJ)Ux^ zTf4*x+I6HU(Sjs_>-aNBLSl{X_|HSk6Tyg~cm!nkB+uflfSmy|PvWg?bPS;J>0 zOOWE)Yp>&-O2oD7Dt<=xF>YBF?W#8SRBI~%49T9>RA0#AmRSJl*Gt->ce`fabLY%) zwIs#C3$U_u1T;o;yLC&E(RdMR&ycET+{hAl^Ub$7xy&v*?^0)kqmK@d(>?4-=Xhm4 zga7o()twpV4^yxf#<|W~!KUlP%26+fj`c|bcTn)cxtZ_An{KRr`jek}aM=%f;z=i( z;FFV50UAy{lSGkj)*w7{PaqBCX&^|Xf$LE-?CO+LPN|MQ`e-xjz~DeNUG6jpgSwgw z0=?nx1U`f}?s4E^OGnYe)iezj0)YfKXaD@{>J?>JI^`p$C_v(U)mq9FgyCRUC%^)- z1+&4c3w;7^+Pg{_1KH49q~pEt!V5%C z=Q{K}nPjymU8 z=TtY|cw=?&2M?~~r7>Tmkz!gcyw&0hDLml5pwh={oD-&q*M^F1c~ZC6`n` z{ppXrr13X@^EV1s+{OJu;D^wU5qw2Kv$?zm*s09e32>fh;oNi2webFjzyAjXejRBX zBo2vgM&TvDdNf-DX)JVp?}i#fBKYYGG6Md#kuO6EqYVDPQps<=`OR<2Sh?T35We)K zFU6KZ(NGkT5(N)h;K`gGd`{?bO$J$p& zE0N8ux8CYqBcJ~Cr@adULm4HGVS(Yz@@f{t(Pcc`jY30qp9|)BHriscWnNL6;2&d{ zB7JF%=2HC`>HyUn#>C2xo6B zYsBkVPzC~$n3AZ?{VIObGikk+%epR0N|qH0_o9m~w3SU#nZrKxAw|Hh76i*ow>;lO zTnYdPW}27|0nMzhMJTbKmAcsyL*JM^ur26N)lXI-lrV!y{YgZ?+0I(@tcB!L-U5SbT_t3}Ak0~u*9##+#=YT4 z30PzF{kaeVbt9}uNHbk)v=*fLBLba6Q;5@Gt@XBBZ}Uv+eFwcyNpD2IHV%V$b3H$S zPXYd-W?2XoW~`(R-fGLOyfw0&3faFMftR!!YH(uc1T=w)fCmKv&V-MtD;p=I)&y6n zgz=j2nyncj0+!&|?X+*4l$xP{qCN~H`hxKbZ-VPwBc(NjIcZIafakfv!NF?lt+sYs zF;2pQhfpw;GrVhB3xG$BAjS#4W$l06Y3n*(CzS&sXAM5r>BW^4O zTSv+px${lyu(MhQ`-(qv)p<4+fsXgw;w2n;V5&B=+Y`*gu+C(O9DKFG& z+D(AsV@Cma#JKeYuBmWKeZY};#5iO2jh6)@3IljRla}2zlcjENLoPakHk)*boJ>WV zutnYezjPPo)4H`}Jumu`eVzl#DU179(bOWZ;`VVndMj485aL+x4u zc035|-^a6qSA>%E2t3LA+4llqU*7tx%;`+H^gt9$nuLVF1;SQ zxj`Su{cItsTS+>??7@n^SidGZ{SMrjG^WW2)Mw!e!%(f8j1;2?7zh|99u!l+F!SUF z%WXx#ryZQq{h#9K?Q%c5gkEJkn(iFytcaJ%dtD&SV_@Ni!&qM7`{*a%b zP}3pBu4|1Ih8!+z??O<0%(SQ=>V`&RM(G-vr5DYf^gt`LWdWnKtd*QprfJ;^jJ)2Q zKhK5;f{%7FNcfC9GG|cc2Otz})(XouWb}r2=pT9nZe}T-m5IK5f1&ld-_iSt`M;n# z8%r;l$1Mol_@uAE%Q6G-dnrWyrq2!*Lva*O$dH2fFu)_Cn{kdMzWEE4l~I5E=H(W- ziWz&n9DEK}^U4Jj20xxP8fyT@h!$02r6YsDr|y+WOQqEe!(8Yw6)63QB}bjYsOOqq z#~dGU>6y&c@C=>tqx(s9t62s$H$VlHzv)G#j4)c&c zColP)M&WtJmU@H6%e@6AXoaOVvcI8^Sb9ayf(L>>8G~H9LfMm{llxstyCFv+XGOp+ z_(fakiVxVLLBKUf>O)(XsyIA? zSuIR@uM!))s?)2OQ8Pz6e-kI`o=qJGmj``;-gxd zv*E&@mHdicf8Sg)3EX(V7RwOf$^j?9hT#EW#~OSiGPH%hXm|PlZ9?B-NsO9fkpi$t zrutq80)_DO)3Y2goo-LYm!WSe0xWIlkJ$pnj9Zu%n(`R(XGRS{WPxa^qZq1yNtaAp zr6m3Peq9g2OPo%rN91LJ1P$wV1SK;(+9E=m_07S7LC*^KEozQup*t67Q=fUBXL;2H zG8bK@z-#?5F`p7gZ8&N05m4|O^1=6tKlq+_;~M?M1M%2nbNtSX3*Lvn7$j6Lny7!QM-iGkY`EJV2D z_Qg01Srak@w>z;##4`*G40r|@J1$nNUV8Z@AG`zn16vH}IgYt~%Q@Cbo`VcT9LNE6hl{fM?Mk3&1d>TEK_(6D=lgLMR5s_cxjTYZ>*nh zC>q6`z2lBMT9!LrVU?&ay;|U(F@xT1*dz@boR*hls*K;7$LUBZg>?KajRt@5FnS?HAmt21N*8nq=qv{&uts?B!3P_W3*`cbxY=?5QPfs1h(=>~DHbq*3)qG5 zO*h5u#v`r4vp5e%6h+}K`;|`KI)^Q2x+~o6%-*I|J8Zv$w^|&2#1Re}p>pFvb;Ilk zuC!tktZZk<9)d2wF27`2t4kTT{2m5fi9tH>S35Z#*`}`)8mVE(52l|6Y{PDd3-vv^Hz<c>C+vA3aZ zwbh{4(f2=K|7wjDIO?==o(fI`qcD~%H>82&HCfHf9B^u^sff=~Ho@;U>hrhK?x^1a z`NM9{vA~$Z)yyn9mQJFr$EA>2k7ldoZoBPXede>DsrJ-1CqxCt=R*%Zq_yU6SK4J$ zeN0J$SmLvHNCi(!r*atvfN3^`37>oSFz6dO6^04l9oHe_iseP(05Bqe{}p)!*v9p< zpZ&~n9#1^^go8H;YV$Iu0vnG%{x}CMA{SF(r-vcs8~AZdRVj>l&2K@pqvEUK{VrEp zB-G+Bi{bdg%W=ysw|GsQz}9WH+17{jG-1fkDZhKRHGx0$O_|e&=rEXT&Q|nIRLLI& zfaW)+NhofD zejs|d8RbaIM@Nt15pdhBG3Ciauo-yAuw>jA6NHTgiv%S1^4;_!LDXJa1BEz12T*#6$R_>ye)z*es!{T540&A_ zF4T+y#&Bh35Xu4gaMu_5F7-JO6D?4LVBLZ*h3Cq@FU2yf?*$g%;x~GfM!0`!j0MYG z_uhMNb%%nf?z{iqYU^#bcJ#is3fh~-lGy$C-)E&y#zrR@C))aE`Im|dB?*n;eMBkFyx~T{{(z&z*$K4a1{>=Bg*HIh3(Zalj((=E zJO`c9=URS@2&8(}Npn5!584kJf!0z9a~;_63?a9mM@>0%&S!l3)Alsf-VjE(G1h?5iT5C3a0uKz03FNar1{b=j}oa*#0C8WPGkbO_V|=W zp+zQvhFvJ>%{u{P@H+jAF&_(vW4*Vp%DfveW}ZZ(Zb;&tJ^K;Qp1~PwSr96O{-BNy zB_RmgB|t1mHYlVbB$ALQ^Y!Egz2o*fyv<=-Sy9tBp6<0p1Q~^(G}0A91~{mD;%;y|sV6kX4ASc3Ew z_;BBLwwdju$Xx`;O|ah8pBXO~_ztG!g9?iLs3VVZ@Du_N<;boFW)tN4KT%o32(V(@ zm{Abu0%NxXO#2AXPIJtf?zpbZju1%LMlnKJKeUmBYY0{ZDQkWi$j0x%W1+-TdDvj= zAq9I~9|dTAy(Qrag9l!YSK^f4z3!;VWaDpha~tuD;d{{JeRb-zQX=gD?x4Mh_V@ zw#e{8@ZhR(_8->Db&Vqq$?`-NpV^PhuAY1%lsSrz$-uRsZqSqk#u$Xgy4G$YE=xQu@2@y3MJz3j6i<`uVA3;yU)JW)mL5Z^qb5K zFg{}aC>XgW0$>ElLJSdQnov(5g)CxJm$jdv34{rP2P10Uf^f5ER5LWnjKSYEmf^w< zg2}P5@GL_CEp*Z}IB5#Jalw(=wD4$F#+P#4?G?Cc0hP}f;I=2n1*D0rBn7{DqLdK0 z5iO13zxn37*o%jUh2W(P#l~6bOFJn2quJyn^KPN3 zCT%t0=*Hjt&KOyz`N7a_BSSp$ukC#w`?m>H=F#15AQD+fzF?Dc5ssWdM&JQic4p0* zr6|?y?M5dW64&*eciic-jPJeo9!IJ(Gba(q;NYN%%C0Nn&ceGWR4aH7o_-i-yfT~^ zBt#5jnUb*%D-<^<$^#<;mmqE@!&H_4OjL!KJln`GiKt!_)(w%%ueD*o%*G$@=C}Bs zV;=&qxL`#i5mOP--?1c9f^Z70l-k@zbDV0SI*wx%bWsR{_C(JCZ;NnKAT>LkV#Q?C z*8f&rZAe;1z8J?vK9m6ne5j8YUMz(ie8|Dh_QksGWtUy1#4`JMkG);-df708^^pUK z4vPZ))nn|z9oOPm)epN6FmAHRraC<5jOyWs9#+uruc}}F`qz#J$b!6xSOQg0 zXuQ>rE|r!C$E@g8Rni*IW*bz8V#f=)P>Pwo;)fq`xFhs`ry$MCF1y@8rR?J;Px-$4 z?(5wKOtx~@2z60+lefkd`HQN|s4EjG!P3UU^qX-j@4%T+@2*zYTV5R=9+`BScv}=$ zi}U-0D)VjtdLWA+C3<*pP{{}6nt?b-5y-mN!w=7@uD<4K9sBr@)AYUneed`7lR0zd z$gTE}6R$j|ZAR-V1ti3d!UV0tn=I@av=H&T*1;?kBNeX`UgVgRaZ07nvwk&7Q!s{- z=(u4CkkM2)-KsJC`N!w7+oF#C)it{S?UCxfbE8|mlkr-NUuyv9J25I=%k+Q^DF$Nm z>VW+ZaK^_QHIv0PO(wKAwe1Tp3&r??_Z*$=#|jUk;Ky(5df_m~%&^!+3n3;9z`%eL!LaU(yZz69{N8$Eo?P;e zH9w98>`~ua&=vP%RFtTF!4L*}-q3bqt9p}6&`nbojJo}Cym6^3a}eRA9KsbY8k98I znQ+IT+{w^G-eLAn63xDo_M@Y)Nh!$em#kd4by#a>4SIcLYqPa#6vOC5i3dR@@gclB z*S*IBr&#|Pz?O++URNTARkdsYJdt)XT~xC2n4K2^0#iWTL{wt!HHGvr*n)P3U0!}+ zbQl=UbRs_f6*|e^EyQ#!H^~ea_Bjwe7=3i$jOwl$=0;PoJR`b+W>_0`bb2F7TeRh+ zC0*y9Wx03;&x#n6=q#GQ6d;^0GcNx5~4a0MCi4*84R6Jw`&203^xW+)WfwJ>PjVt8 zn89DPxxjhzIhy+GU;lb_#pPExq0N3eV21Mq{^_6o$@$BX-N28Mr@!={HjM|@Uko)6 zp#mwly?nL*#rjCaykveFT}c}4c6U?pcl&)jt}S(CPA4pQ3K65oaf@MbZ>mUd5+b0G zUzF8H*0;gIK}Se#w)tk-uCbki%wB%+Wv^4SuI_x<)QJV@_i&%V$n_wN2j;reLH(rq z%q=eqlxYkjf^BrqYirt#H_o(hA)+1+Lu79XX6A4K*4rIzZ@E2sBI*Ll@=K$|KoOvz z8=OZZ@yNKh@F~xQ(j58z(SkDKeIZ|hHj03O&hS?8Vpj)e1z-#V6M~nx41!6at=tAQ zVjIiCkHQ18HWfgVPf}nK1WR1a;J|?Sk^31}VrSY*LFxnyUoX@GLCU4pJpotJ7II-b z$-3i?JI=W&Ue<|Y5zrgrJ9JLSP>T%=7b*7fF9q9bBk|8CCMC#d&PcyW=O0{l`DF@P zzDu$>f|`B0pW>o8t&H_@PK85;*QFnzE>7o-yLd3^ig(7r2AKXPvs|7~H#>-U;H5SI z03ZNKL_t(&5kU)SCRzy}2+`|cLMV7;mdzFiBHR^Q>}_1k%5kSb3|OjbDWChi*XMbr z8^;QgGO@v(`pEh_N32p}VB(g>T>;EE{7-~EQJm~wz4(%gZHZ!V00Z6y_QrqU1Mk;< z=KZ`(K(sBzGej*95GY5nyv`RFCJVtEx_3f}(GTWib`!HbdsQ09E=GEpJ@tcPMvu$n zA7~h*ed%SF+Kow&B@x9aZjvaSto_K$&ba>Kb4q-n^q+CW>FC>tnRFo-qoC5Jm|7>1ohoPXA@>I2K8d+oJXb=B2Z`D8o1 z2FD(ItYV1Pm6E@^x=;sRJ^ILF)v+Hw##?s16gtef8VO>?c% zs*8S~ap;Wdj5E$q&fgtPM0g+|7Cw7@-)^k(5~J|vzAR7YIxfT4DG+RNvmPrvvlWPg zBXCtFm3A7R;{wDeD)B5Jfo(91X+?h|A$mgRO5bqZ4Q;jUvg^(c9L1P~b}$x6xk*x@ zWx4bcl<*6RguTvA03*I5#{@AqC!TPEmEKur{m}PtEsOOiN=fY1?vjQcxXUA;cU;~} z=D>6_))O)s+xR%zcWVU}%K;hoz{;{CaYTGav2cF-3F;Hu?|%K8Ups;yrPwT)C~MSf z=50^+`T`#4KvQzJ?geI+JP%ZcJti_Ni(a53Qm?w|&kihoRe3^~r0lcrKGjEbR5Sr{ z#0WLd>*&>T^ZJsGLuVU|F#Lp}8}t=3Zs)88lI9=|Dx$OlJ!d z`+WkHxjF_-IPpmf6Rh*$j>h`5TSin5VvS_YW^uEB@)Mu5!ahV>PdMriVN0Tz-L>7} z^wUqT*T^_X0iq9AX<wWlB1h}yU<4mm&?V@wDSp$b?N$1L7 zuPZC{SYiSPk-~*+a&WC0FR#8!Pmhs*0&z#yQ7$aB!gd+~+=LWnSl97f2+=*;B`xa{e~5j^zX* z$cL9APlo@nL|1x=BS*QbPXn6|7~dSMa_u$OI!6eZ6OoDJI42p?o_p*WG9D~+%*?a@ zp#zo()I~nb7%xAy!e(PQ3W-nw~cp(*3 z(k_DMErM6Po>K&rK7vrTEWEBf%jC)CIS|V`saZeusne_!Nv{cVxz3g^&e1*fqo?{A zX2cwyni`P(fI(zLct((tM;HNJvZ?VNVRFOAKAD|&W^N`hKhJmvS;rgFRF?@t(Y<7{ z`@jc2AOhag%K=!l87q|-@_63# z5d`o0sn^hyXA>CSgKT`IHU@O7$GG`i<5n9F<%JjLy;@Ep4e*Q^ht_mObB^{F92^yj z&?kaB_$=C@y@+%+Mgqb>TA6heJQdn*g5B@WhNj@Ki6oDk;lYEo(D5gK(WzX>3kOT- zH)h-iAAE4N_da`j+bWsH@;N+woUDj}L%kSl>7g@jG}!|04j3!m8O8`ug6CtbV|-f% z)mZRB-|XU7VWMFgHQTFA(Th)QQ$OgF$5CU5%8KiA@L#zjQbWslds)y zX*)l+k4au#viEVFnY$bMFWi<07!AB;;_jeu&9(-DA%f8IJYtyP)=nlx8BD59>U5P}AdAR-IOMp3}tXMn{6za1vVrB|BTfH7u^Sknb znM`ACMTM{fZ>F18Vf?@&8Tf30%L4>`redG^wwP7NDzaUMLY<6}8D3)$^c>@BpF+ba2`MQ=@}Ps28H5EQ|shtsu+;peP{svjed+6eX>S|fO>*;3MY ztvp1dw3Y4Q{WAP|6dbIOUMwB$OT9U3ZPq!_pRKzA(J%@wcvsg}T5%Aka3AYK-WR5#S(ZfYM7ZV!r1y6x{vG>N+bzg zz(NQXz`E8ke8EeSFx(G=4yoQ?jPO=)e(_`4r-}R2%3SwAh~#G;MhxAM{cgJ^1Y2Oh zfclI0gLbSlwkT%@KV>J(^OIkJaDWBLrEb;_HrK==8gjW2kEnX~#5xSis&8J^UUn&5&GFLcleUMjIvUI=f-9!0Xo)HVEE8cyj6^BCkXmhtdd0aE+$b~e}g z?&sJd8_G3hkDu3n7Wkqa`h!;znZVw0pY`p=ioDb39!u4ATe*7%85dFGFWJk9_cA+T z*~ve>$E>(F=$*eLIxski!C-d|L3nOM{1Cf#=1CrsBAF#cXekh91=oeJUVG~`1;jn- zy4co6HqSfnyu&+^S{~LRdzrdD-w9*qckoSY0Rf_nw+%M_1P@!4?^LusxWKrZIdf+5 z?8;~muUi2ZuPC&TdWSaPKa8+jZn@PvNbm}i%;&O8FZ0rG=n{64yybxHfq?;gPbQ*F z5#tncUGnBET=Xw3NDqPt2!?!02asH;6T@!OsXA|ncw>NqGdKergg}T6auWhf(FHQB zA`4#qfmqkCx;^u62+u@1zcbr?M2eAmNiVpU) z`{nAZude>|r#~qwHnxL=)h4ANg>b(z9B~vO%9r4ejW^!d18TvnLcK}Y0UNHhu*^{+ zC^Zs=WFtc(!k!Xp7; zSN`crpF?a{s&E9;fx|asAaVpF=Rj|y+y#5?xtAG?83AK}k~3~0xx&QI5NKw+ptYA2 zJ$|2(UOc9=09eOlYaufbV4w|-r{uh5)&~(l6qB!o0Ur<&`JP^)Db-zyPX4`4#RC4I zi7*J5mAoWR%?%PX2qd;K?!5EPo`HrtQeGR?P212L1`C45#-Wrr!jY{)D6d_$R!mS_ ztS1WyaHIaQ)sv+KQgE^c&-J7+LmB|{u@5D=44mWrl1D_dqX!;*z^Pb?KzCr0l|gv4 z*jvpy>|Ei4wQ_=EN!LpM6V{YL0Bob6Lq;HcITDqqaF!%kUf~2oKGR+DxpQjX&b#a! zir5|>{UPM_*EEh6g%n`IgK+cBH&>UdPk7zvi#?b64H?4N-l4=-uW0#zfM1f{Kug&l z+Ot9|!Z5vmUf&fw^ba>X5#z)SkjfgokXS46VjMKaa_qwzGy@38XeL}Fhy2}O!B=K1?$G!?r(nk8*gjop76kEW-hrv+Fybr@xHI8teq^6dPzh0 zW}*j-PT*DOFTJzWgIpm=*|X0)YZv`{*MG0;;8}h*FA9FnZa?FUPkX7Svoyz}^S8zQ z-j|tqGL)6C@Vh|5s#OQEMTO9p~9L=vv`&+LuBFn;n}y+rSsN;_9$c0 zHS(e$d{Gd4?X|ZVoFn*_mlg)h5GVmL51FTaarQ49MLSZN_3&&dirFLGvdG_Vnt4;j zt64VNVl!`>MB!@W;wJ<*JYaf)HiEABF_?LZ4LP!6A=K;!w6t%l+F$sc*GR?BO9*wA znK#VT+1N8XFIQ`>9Y?$Fw%e{gM<7oc9Cl+LE)==zn&Cf|r{+t*V<0n*H{IBd-%b!7 zpZj>ltF4StKFoXL&Fa!WUfNd0^i8L0O?p=w`c|ZPTU2k#gibhmeTOu8203%54E~@0 z{A?M6_w~Bn*GDtPBUYdvi7B}9iYpg&+qnLI$8C31yt1scvW}yDGlDOXf6ygLF%4vF zna+Y@ojt3;m%`tXM;=ifeDJ|Gvf4|~IIi~wOVzi)TNvmlU<`Yv)Zv z88*t6LApV@CG>&)$1LTUJ&1-n+=D0Lc>XC1)gOBuSE_5(Jc_7#iBPyI=P= z-uK2E{l<9XdtRlKFn}V#KvqBnC8mBQ&X-c&3DNV2Igk&-NM19IyGJ5=9_9M{qJPM%apeG5>mx zMt(17{ss>hCLo#QP-QN&6J9^29R&B%bRFsuT>(ez`An9tm2eqRCH)CSGW|m2gn2%A ziqS9LI-WbDdT7Nif_T!K>a6pKurR7=oG55a{b8mAu|+{Ww!eyiB8k z|I8_(0n?<*0ZaYIZ$wy#Ho?z~R7XcgZG^x<0NF%S(s9ISMSoRyOTVSAjrs@cz3yK2 z=vCONG+y%*EvZU)8acb^=9_#R?FQ>_P$DSnSx?vS6x0Vy2}|Gu1Bx7tjEr<{F4GNI z-|sP^UW=uPim>dVfe?nekU8*;ZV*4&xlmgGZg7Ne#n!1vnv}!$CKGU9au?9f8YJ~_1?&Y>Y3Z(cM|mSjB<=Oj)@cd1Rs6FP~h1m zLu{tggf95=3moo5(DS62wsi6Jc^>h9;#_T5~j ze{9z=N!RFy=|8hDQ>Z=vl0v?}fSd{sEmB<1+B^rmm=u?=kvCCnG;!|N7T` zJoTxko~r4b-7R}SX6~x_nnr47_iy|oSBSz?RzZF*GzDke-#A3n%_@QAyx|!0*3_9J z@TMv75;Bz)+ez2u$2BF)Tt3m(H8pr-rNkC;@a^0Kck-och%fE_WdCw?3oEOFR=r)A z$}3Z9%mXl(RUR5|sH;Lp2pO-u(aJu*8#J1AI|$lzi|a57$i=Gyv3Sf}M=h6xyyY0r{3z1hi#wsO=5=h8m}GvIB8`K+e7|-)w~Ue%+~6}rV0aw%t8>_Ep&{abC7Zq;G52H5F>1$QjzJ6$HV-E*#(30*mom(~iD&r5Z@v7Szf;F>^|aw( zL@u*mU>FP1sr_wwjJaXN5cLB#36qT5pUNOP5F1MyjAlj-MmX8W8Oj{2r24f!%(X^| z&_;JBLIACJ^oH<;wJrT>#Mkw9a*yBrmuMtB`FvE_Up?v6W4^m)+ zr&Cb|l|$h-xVPnTJ2k!HTcZRz_`W}H4-II!k+xC+w-p;d15xr|eCw>;%BUEILHL>_ zCwZny;IUVJy74?%F*h_xx{l=(463I;ZVLUR1JF8?Enz6SpGJT14?UNq;Vm|_dV85h zXXFU4juddKI~+!*yY^wf_wVRVswJJy+0sd~i9yIIi$Dk{N;2m`TqFkRIV_xI1Vbfk93*+|wFy@t7In{TK z)y9}r_0xS_5A>@$JvJ0j+}=;n8)dJXgpYprbVJv}IC;YmJlS2>((%0?eTM0IgU~i= za|G5cfV5InRjIr`H3!mf7?6g#2i}W5r?bIh-Hx7>k!}M@-w*JUMb%JnE$U5+0^In| z4l>}KP!F!BKeZ>?=l=DNSGSEgB<$7!X~<33{&i0j!pYu`L(&T#hB%gejtyRa*!y1v z!a=|EyWa0w7uCmG#NQVw2uI-0KFFja{BQ{hcju=VLWnGVnjDy zG-xq^y~s_Z+)u8e&>53^c1d|^kl_egFDX#A;TX<&S`r~|!Gz3Xb5I0>NU(%;VR}a9 zi`dD2ifa+8oQB84V;)qoM@8m>7AIf}1~5h~0G81KHw|j+o$GxuFj1vaJBn?R75hDt zG|7=!Ju0tbD@1XrNPmFpQq)r z4Mp--*C>TSz?;e<9;>g(lhMBzy^nSOv~;3Rr86ljeZU##Qm?KBhh5~T>u}%nZ}L1j z4mgYO^Acms8^wz^EtF*zU{~j?ugWMr@Y+j^MZm|@Jh}veG&LRj)2;=*YQ?z3Ia4rH zj1r1@3J3@ASt#`8$40jP_~@6g4^plJ`&Jwtnvm~IR1xwS<*na@HBYA8P zz!5P@!?i!S$0N#Z5|B4&-Rjv6eqK{d20}% z61h`h)Y}dRL`PY++a-+2_k`PUwt(b&6Y7j#a>+`7a832BmdTl z)^bHzLao;ThH2zVJ*h!2OP@qjmVM?fXl%;CiHyyNkc{e3Z4J!}29_{1SSN@-t^d#+ zqG9ebh;FcBCi?P^;?+EQFT0HP;eYdW?-QQC$1RJvT(=KBk`^^j>7LYUz!Dp80fsGM z)Sy4sZTjn7J=G5m^|3RhYktoB%k9%|`P~PaDR_=#*9Hdg>@0l4rMwf#SM2kljmwZX zEw_8?RX)G&ZCb5Apark!L?6s8-b+h_F>foaG>C8O$hx<*G$WWz3HNyy^ShrC(U&E+-C_Y=gz_+9@#gyP`1}kYR9dL@G z&tx#uL+qecu+_55Yqu|LHp6ePvnwHV3#tU&&^x|Zh_x66H}wPHqTH=G^nSDK|KIRR zz}C5pCN?ulUJIq!>3Gf{d4^~@@m=tbobWEnKQ|v?Qx)_AiuaAT<4_DL=e{^pLl_Wk zkB~r5JAP%e{;m8~Kj$Hw- ztcRz>ssYJJd6_P{&X&h)+T$auO9iga{#Oj#rp&$!?7?t9ED^@M1Ig*7auNQ3Ig3Do zwDgu>dd{fzZ5DE&x{u9HrUCI&g>>_1Y3@}{=%VO*Zt2=-;N$1<{$E0zyYawW;(rgN zQ%EA3#Jcft{NN{+RC87U+wO9#DZ4wdg)Tc)*)um2#mPq&T76w!qrk;oU@@yg!Qg%5 z^^PJ#rO%w=7fLD^(f!fZu5aqM+)mab_3~ca@GnYx#Rha#(H{LV8f6<^P8|yrqwFA`MaKHLun=vp>~V(VYFapr_I_ovt%wn@JI_S=nn4ryUq zSN55wzdXCXwvOJ~JKU`lI7VeyZ_I32tXircVqp=yqGfb@(r?EA03ZNKL_t*O`x8$- z;WKTY)d@NrNRM~Ke&u)G`D-1{^0b-hN}amK?}XV<+z9E&=!myVhlyd(E?zvP>jcyD&LwY3*00p&ms-Ux0u8>)~> zXPz$>6^%3YJoK?a2aVqJArQ*8A1D}(*qo!oE7sLV z-uv$LR>$AI?Az6E@B6LK8(8aIYk50LrVTg>lY>-d&C;IO>F^F{Zb`aaJK%PvBn-u= zLNJgo4j;MZ+H0y`OE2&}`vxxVGftlI>5O;Yd54W7qbm+wIpmN-s$F;6)rgHMEzl}6 zCvc7$NEg7HKmPHLb*RcOwCDb_wI1NiZ1|HiAinz5uln#0A`&>E@aB#?>{uOl{Bb@$ z6^F;pt5Fs*FjaK5v%qM!R7ey7XNlu#fg637qg#yhoH=vkcs%2&kbn4xfAChjE6SN# zO$SnKv(45zNatW5sxvbs_~_9`AFaOm&2Jih^Z-tXqdj_I=+OrpojiB$gO(>8D4eH* z4?e`_jBL5(mKrU@;WGUqKa0C>i*Ee}LL6lG|6}kKKY_eg7QU>rq93X*yX-RUXMUrZ z(H@|-CRMn^`J>sN49Lhjv) zw>C~QsB|WSzs2`V!CzlK3q=hMAAWd2^{sDyOAg_cJ}K=*ox}&OnO|je4o_Y6!>g*B zZoJ8KS}5LIXPtE=xS#f44kY0opX=+=7=fu)p45k8M%mw^bECif=bo)@ zz4hlh4)@E|OE13E0UmTkhy3u$D`jw+<%JyMdG$5FK_uDoJ(;t41CSZ83>>F13Y^=rOwt&_Z{`a@1bqvG_k ze?R-)-*eYJWiS|Wl5_jqkE8Xdj^ z^c!uoarM+wPYHRC_U$enlbwS?_${{FLPm0pI9;dj6N`Q^2MD2ALcL_I9Kgacc{km3 zlScyv>nh3e|T;neGrMMumMP=m#C z2qi%1a(x{~xXrfPXq5YtYMz`hMiQ?(=`GGDMt})l!+%*P2S#kR*@z=5(36tc;z=`u zkRu_{3B|jph5B;TwwaD&-G2M+s(bFfr&{>NLc_sGiTPAUXs^Bfnhif^H$T1b86CU0 zo)3%Jdh4xyA9eLanHCkmDSRFWInmdyHs)AE-soRUHO%sXMMNELzx_5x=^T>wX@oIV z0$vD_zP)TXJe)$f)s|c7kdlq#^g%TiGTo0(F`wGqJt92AY){(#+*se?6GtUQ!;LrI zq}orX-`#x6E!D4e{&}#q8Ou7whEGoCa?3^J>9vKgnV0w8Yi}O{<)k?on?>Qhel!>) zT!K8PAU@UgmtK6iT02)(Y zfw_0wdB^Jf3(l{OKkj&sLR_f2C8Jidg-erJ`zyB)@HU)nMytb2Wn`XEFDnLKPe(T5 zh~T9X>N8VYNCObsV_pl!#-ls=~^B7MHu7x*_e{BRQ4E&O;kca1l zDZUeWca?s;2JM*!AsqRdA|o7o>JV+Q+8ApaNbwn;U)B62;lNLR@{)kk>y6+)({ftK7F_3AR3O3+dW6d>uOe(8h<~%sZ#~?f3 zf!`%_4hQRgrX;w2)KN$J=;VF&-Pe%~>K)Wi@PuyRZ~FzxLY^m%ANUMsBcpn4+$FCN zVOek8^?Wq)yt(r{8ie*3a8KQ-Z$$i@O!nFv)#h7_I@Ej2(Z~3RWcUTrwRx}I&Y=Es zPwj}72L|cD?)$(kjwa64BM(1fosHA%B3R%_j5tmZqj>1{!4H10I`^D&s?DVPBDp!} z-(M%UdoYpDjYHP-rJ*@^Vh{!VOiOW+CsS%nmxA9_L<8sr&ftaA6MOHyw~rd$ci;Uy zipO!{o;X#lbb2CSPVv3dZp?!L`e@uf9Rb0F&0*>n6at+)Z?3((3`fBr2r6Z#op-9v zKKpDL#*=+!ZtAC;x3OTCHw>OkZlzYPw?Swi?1UAISyUzDTfPuwzmWn%Dh~GT-D<#G2oiZ2$WAU1mop6Yu z#_@akm6xjp^A~t75@Ga_g=GZvn!?yyY9xmtKk~>Us}0`0K~a{$Q~e-FWoce3#4N0{ zNOYrKl64quub~JON|X6XMyc+v-tY&?2WREjV~=y_mHZ5*1={?SFam%3bGtu-uJ`Nn zR9x#eK5bbTR6l23b3`SM8B=icbc8Ka4>q>K7qrF*qOAAYYcCn{PgZ;Fy_abpM&B41 zRDF+ei@O_rGVsAMeu(@H3|rGKv|*`P8cFEIh>t-Gc>#pmfj3H_vy993%HhC}zwe0m zRqL#~P92p5mxJgx=z1r}MaLCg1gIVGb`vWQV}rQqrkh%(9)9HEpoMsn{-OIYhAXVJ zLUsJ{$9rmV#~pVH{b=3=AAytMU>pO2UI+ygSpU0WxsALHw1;0lO>4F>bz_`U4CW7>^*ZKZnK z?zsZG5yW*hKS|Qc-O4n4{PD+4@bpe$d`2o5@ehCaRD0Ut2N)XrgchSYiwC+t@~m@mpZM7p%E zex!Z?4{!_f;6zs#5JZyZ%QhOR|486F`>eC1|4ykmvmIkkxS9gS2GMWO^`Uje+O&O{-H*J*7HYd_xQK?Q9^s&FF;9_)d5U!$?RB z5A_LoOw4gGFSPbLYddUqstoyd+ivG<_6UE*{2_B5KATxeJ42NyLzF}iHZd8nB|;lM z%HKmUaxMKS#)Hl~q?!BxQZA zB-p}9m-F?8_ZS&r9F92Ri0ZsgoaYdtX`p8@qJFFH%zBMFV?>{GpPsArt10FiUny5b z>}9n^4jIWvQijXD^s>l7@&r7D3}MhW*1Rupknl!m5CsY@h*W*{v!AUFJ>*bbTd|HZ zw0Sk175^% z4d-Q0KhI+LQZE?>@hPv|?1z3v?$Aay=7fHEhPu|@VEyX6^UkYIJ@vy{ZSgLLu)$N! z=YkvE0e=uKW`v*7ri^F;L%%+lJAtS0sBr+F6g*hogboittSkfn#*6TeqqOoWtkhYi znm_*`%|Sm~l7W}6cH3@Y>eW?MJA2Jl`+?j5|Tb~8y4c}skORm0Jzboa?T zt&$^a@IlwOjx422yPvv7*nHDXHnrV(Qmd*SQO*|l!`=`{{pd$NT8)m58kPvF7wPPS zPwq+n0tV_&Isik`JDq|)-I>&-X-R-fLxp01x#%2BKq!n52HioiQrg66e@1aJ`o@(jX^2Wv^gS!bPHy=RyAh!NiO@(9ZuNGb%R-c(8u8KN+94sS6K%|k(s!Fc1@ zFbWyc48iV(J1c?#2{#>~@YgSY^~>rz-~Nu3KM5)a9(bTa?0Z}J01raqrE~~TQ5c3K zJVsnbv9gL*I6!26~iJ=HzE~CV@&8j1gJi?>%`|i6> z^L?)?1h}I|UVwKa!&SeRgyZHY=AwYI9+Zk+<}W?BP}4Ig8yg%w zTswLRaN!ZYlC6Hg{s&ao{q(x(r%(OVQ#+fDY*u~rqaUpf5|5!+S#pb{Y?j$zA?%>;D7@hBAqvPt`bcjv+>)0 z`yHx1_T1B7pT=q8z*$#4vvqxLN(&(gUduUWxC!zZoT*S(pS6Pum1^id!yoo64 zg8v1RphpCbQrwZgzS5J z;Z}`Xa2>n>9dI&PJ6;!f7lSDJgwquU6FRISV~)X|r|D7X!HN-hjO0!F1CK9c)rcbr z(a&B;;)+*n2o~oJCmXFI0xBGDEA#_strJ?wwaEO{wKjQZa& zk*ijk{uhiDA*t}bK+N~Q{{tt9K~xZHeoHA_1+c#q;9-X!<|S+$As{0+D&U#6L% zQ%84~urI+Y!DoEN+54fED*fzdKeMt+-XbZio58~%#8ozh_{HtNsGfRK8SKJ6Mx14X zk;NLu4NtzQgpmoz2<1*)7#&7`#~ypE=hi%@<^pd<_>^bDx!}3@tS76x?*5IITV7nv zduX25*F+EpMdh`K!aK`SEtY35WHI8hhoIt5Yna8{%&~PpF2-9&t|JlzyDhKV* zaZ9aqnXUW?HqvQIe}q_ub<l0REvu%7912gTA(ulI(@Yg&z;73SU3=}d z9%X0vHtR(3cg(#O{qd$~{NRIgweQAntgoOekt6tQtF5=PQ)dnikFIrOG)my!QBopE8NJ9~;UB^J;G74Y;ZB~= zN~^5oe4-IKoU>=I?kFR)HnLl~zZ)hZxa1WfQ*6-EBMV&*glshz=@Sn6RY2rp61MBFzpnbm#h27@Eu&2J zp?wJxzpCzf_O9x#-`q7!-#YGjScyYqU3!k4#0BcpexVPX{HtE%G#g+qUJ$FHheZn-&#-_hRS+87}`_4HHK=;)}8#By4C@=gg1 zq+x`3IAAPM!tr9C0*BN@MvoluuRvStuSa2eWeCnSnjb37z5c$;zc!dgF=Uvsx!U<@ z3nk1k`q*l#tvrq5QZ$BnEgSF;NQ#z{z42Q0J1H90={|7(172E`yx6ZzXV41vya%Ph zn=JS1BwHOtZPUm0TI>8BM}?^Z`0HiujX-wpy2?YbqM3lf>TGcG-{>nw{Uv2QW5n5D z>5gCC5k|CxEYraWhdJ89a9G#$DXhKcO-Uuo-}dwMW6($VqP}-;_-^O4>?G%Cd2P1C zGtGP`1T`^-DomviCBYzHcG;!wTSjfnlawy-ZR7=q4Xpmr{w#bE{bg4>95~(`MIc!> zb?X)Aspq!aZd*Hh?~x8kJhq=tSwfCd9loHPpI<4u_^oe!t9oR?BhBq}pL+GD?u)*V zT*#gvF7&COY2nKYtGRMYcu%At3+PX#jVNx9zadOxRz)NR=ZD;qD=xpn`$l9X=J7IB zfDB|owlXS~Z4luB=fC{LFYEivtHrL_khgK3K$g2%ZN*4`=bg3JgMNdLNX(4-yNNYs zmxlUrN{xBbWAzbUv@4>2A_^nw6HojAn6%=Wtpu=lDJg|S4>AbJf`kAhx8czcj^;Ub z=3-kwmJ_9SMxCC6kRa!LM0&R@4MT}zxCuW}$arNvAsYms$U<-l^@NgcGe{zuV^|^Z ze*5oduj;wyp7+*%&q{GVr8Xckn^(-AKi}=)J?^s0&Wa#B=Y%CfxHvPwPn(RoV0M%V z%9k(_o*quZLz-hkDetAQAjW{v1TgX(-x<-z{Mb-5U8-(^UcA8((=y=8AubHC-i%Z* z609wU&q&lc_~3&**X&V|l}>1$!)~|NQ5-NxpmER-M#AlHhya``&7F zbhJ!4u<6ch?-u7|IklTP4Up05YzXwgKfK^W=8+j;o~I>Egq^csIC1pv(+Kv48*i+h zmwwrG*Ilc>7nbRMf2ynInWll%vr*~=p$kNrCl zeG6Q(;^W|h4>6ChjVy(B=o5~^?|%0?JI^@IvY_WO$+^`=qFM;UHx#ym1e$R*(j7AUHOXB+LuXnQE zR$Fc9$Zak+8>=1g7yYWdvg9YyE6|Pz7xV)Mw821uKicxr$TI#$!; z{x&Vf9H7n4g@7n6l-;q%9qUE+Fg45qv$2EPRaakC{p-K{YxTIct32tXld98CKh2q% ztj%WLgD@F&)dW$uY{-i-H@6FcKmYm9tH1wWfA6~g$N%_$JpYMu#BgpTLk?pSzH(?> z^$qrrLWEY){U{9Pu3%vA;VoDQ2eRej4cFgL{r%tny`2sEcIqjodUqfaUM!F*FgyDY z6E-6Bf-n$%N-vO&W-h$&LOC((R{!}w|KC<5R&F9V3=Q$w+P3X*j7!y}>;`Z|HY(d% zl3iqN1SC;E$<|E!Xd>Etn-Vgxg=K8v{a`5sp-V&0{gTetR(F8pXZxgB{-1))_ zFI4+zjq6{0<}aKa)m_?(vi)1i;G=Q|kh6O=GQVO~T^~wRRlYfiB5*Og|Uq1gY9QOYp##p?H$QSE!ckbZ`pHkUfsvNh z{r2VG+UTEu{sqzN-tvpP~q!Wj0{o0-p%Yw!D3M?Z@$ z#Q>qJF;Mh_!iW?+y{IK~=xnw*eN+RQJv9hnUxQ7w@eO!(yLw^3EJOa+7;`T-R$C;R z{rCU=k_TJ+AF#g?IRDa9R7`Kci_ixdZ9m%=?yieC14KneM@Kw>a{_EVRTk5rL`#_3 zdimv-Wytrh{_3y(%F|Aiu|xo#NPOJ!t2?Y);K%pB{}|`3tf~PTc?#IT6_lLKw1#
    HGm({NJ^3yNdojW*VMqgrXONeug{lVE`GqGa~cu0}ln zri?B`fR`hgE|N1`t=>keFpt1vKpDZ{AXvF8oQ~pZ3k8fF2`L80r7@Dg+k1VMm|~?B zd28#~VxS=on~1=8KFC4J9*>^P$Bo{-QBz6zB=(^te}fs86|=vge!)nLihyB7;f7J; zdUAS5M55462Odj(@BHb-K;U&*(~Y=!$y1Zd-|otE{?`=BL*dKS)q*%;BS;nE&t428F4LE=zvPzrfIjx&B>ny)yEO z4Ly9uayp_`+)L6YP6~aXL~e@C33w|K$Fd)J{W-yn!6xgO`l%0owLFLy4RgIkZ9ctt z{<{5wqFP-@38DxMmtcgp%jw8ZA|g9z_b{e0kaL`NR*v8#)4vs$*H+0oO$?gjydhu6 zEPW==z;oxK1O2C6a62+OT5Y5)I^PuTxNjNBdm0Z0Azl|;=$W(`4>NIJqfam{tJQfF zolnz;OhUwnMZeZCZ+ewfgao6m{y4vYNIKxdXy4S>td4xKCWhii$|` zVS8YdA^JK5Er`Xv2q4Kro`a{BLJR)1$&!b;1k$>Q>Iah#$Kgi*oX_{a7ye;6CWS+Y z7;&?_j?aX2M>ZSr=p7!*J-uy<^k2vFq*hC=%(wJ`J%3z`e*+GTI55XfZp*9?OM=*V zsg?_&2z)qvDT0u^#6e9=r+6Am3VRDpE3j26MjZ!%{1xbk5(h^p++s^j<85lg|CX0b1b>^y`L2KTEA{4dk&bC0 z;K9kncqjO5iOgwaOi2<6n5_{n)2wW8gEQ(-vtGgO;ZTOWh0dNXc-!?FYy4-q7v=RA zo&et-S*t%dEH339>=U1HqQhn}(6sB|I%Zma7OOGuKxR>(D4AT#jrRjGQMM?jYp(fG zb@RpVr=r(a}XH;2dpOP*OJ9jZg9Cw%~JO(@%9; z+E0J-)4G*pR4(9ju!Gb4-~WDxfVu%pPtFgU+utdZ#Xtxt3{X69^BmC`MmDeew4^Jq z{DF-IVbxj~VH;iBQh67LYVT?0$Ag9eiRo=kz@Kmg2Eo|ojY0R+*9B^_t68@=rTm_- zAqyxKqEPVIFMjb0CuwqM3{Vh}V*uzDU#-2@$YVer^|iKIb{GzU$QoJXSbW#9gG_4s3tdnZp|CKOM8 z0z2`se*@=N1dVuN+b?op1P^jIPfPA_oL5nlg=jK%%TrXqycq0E4?(&v%$P9;j!=*~`AMT} z!W_&GV$31toH=uVs zV<5b@=unG`wNim-5F}P*Ts=e)F~J^2;x;KJdX0Xb8niOt-n1qa?{}{k37Z_#`jxMIMaha! zc^YF4g`pqQyz*DS`V}8W_1Ay>SJk_fTZ9gr(Nbg-IFNm!G$fsJ`sKx6ySRGak?(UN zGJ87ES9s~>n{TNuy68f0Hubmv*WU_!@hHwEST^z-y)YAfTkII6&uuRTB)|}BE8)#c zd%T8nwuOwu2nrjnkm#!Cgd@Mz>tBW|fbM>rlaNO17%9@C~3 zY%RIk>{T@yIK*D`8k$c*s8AXt0+I|vrX%p#pc~F)h?!u6KfN|VjRix{_$(xFf{!!H-e4-b+(TebPX=@Y@%XU7bJ-pXjcm1AT z+DWq^j3p&KH%#M&w$V-g{=FQhCVQ?Cc1`g&IK+ zo;~u2BfSMIBcwmJ((5pVvX2mQI8=n6fApgt`RLj+PCvt=?`^k<40jR&IoODNoG*Og z3tn@)!}dEkl#UbUWGg2;#ncP z=`O2wh+bkqG3LqH=p%RqVfin8mj z@9_Zb31zP{Ex*9%YSt$)~**UD~zY*vPY$do8cUNQEzIr@uj!bZLJ zT7zGlf|)KeV9bTLR?ovjiZgIic%5ZP=56u*Kq5vG4q&Mo41zbvyg54|G2)%|RtuZr zknowNckTt^k*G(3$WEjZ?9RTGlY*D`^fS-Y2~@V|f(-+*s&<8IN-$IF!aE-q2?JrW z2ReB0hu@m_lfrxO!8z4$wQiR6=&4juig@5Yx7g8>nNvIP7Cg_?0AY2M;^tdy?lAh! zGTvUkQ%0~GZM1Q9$f1W+*WYlxcfMi-$H{Mup#InjdV(cJ-358aSdpkivKxCntgj?2 zmNzkfOJO_TkhN8{i{gO_@!nirb=6f4x93WRElMI8(LVAfXb%~l>N3bVX!B>%kAVsE z|7>_ehWH+P?%{RfuW6vbJ-~`V|J%R)TQ6B;eRjLlTsrmL=s^o~z&PiM0S0ET$^n_9 zC30W-(nSuhkBp9b2RQaf_&@*jPa3$b;bq4$2(qG{@q%H_q*7KpVc1C`ee$U%t1GU! z!rRdjTBqP3S>?hqGwulkS$XP?v)!-0`f4ZEvRM^+C-#6?F7}^bs%|lta5-tT z*+YZ;4Z_kaKZM3a5}41mlS!vlFf<1%p^r%5s;#AC{;`m>soPhlyr5R?Y+=yL>Iy>A zY=cW=;X9h^zh2V>O!W{sV#zUkoRh4~Go~SBrc_?xAKG`G1hT_t$r;lzyQ&{-5qz7b z4X(WMhd#a)J@2*i8n7*i`g+EVIf%iSqo@!td#gndlQU6ZEYNQk65$9#9dgLQb@uv{ zbLsCn`rR%pmtncndlY(NwDnGzISim6U)AO$k3Rfp zb^q`0?*Zfh z!&90BOdAEXmdYQeDGwup0%kPrXo~QIL(kGD8^(?iQz&bG$FX78F*XNbBN6fso>AnC z(eO+sWD$MDK(M5a^Xj1;dV-vd6*U-Ow>aqL{RQ-5fDo>mrtGv-w_T>&kehdE9UU3r z=x;VaI{oz1y^lG`rQ{BAh5&Dp;>h3N^t4k?J=Fsq^WPG{giS;S52bSU{qEX*?iI<~ z7ykVV)iu{%;|K`)ou!csHZzjaf%qBzGV{h~u@UfGPH=qGzuwbwVz$aPy%Bt!++gE<9oWMsq%6nko4USRb6znB(- zK!|-0ZSlvo_TIqL4C*`855NE+SGJ90Dc727O5qm;LxhD5O19r_dkZc<)msv{cN{umiyP8hi`=*W}ggHflAxp>o2uG+vY0orpCn6i_P57Lq& zc52Ja^p`Y}B^t)AVT68>P3ClwISe+2g$lSIFT zqhyG)Aq-vjX=4KV#g}!~gZ52-O#NlIyzSso_lCO`Pl@(uEB4Ot=1Lm5vTGbmIXS9z zu2x;JT`LFRurK}Ze*3%Xd*AzBwS{0l{P4pU51@To0ZZKukEKFCkfG1qKbwxByGdwf z+gh^RnJ&QTN*?rxelg;_PggoF&A2fyIJ6Q%0f9)A5JobOE_|=DjsNm5|I+)l<6XxZ z!SId0xf_cKv#z9AILM&WnEhEmb! z=^bNkv`kB}0Un|d;bFA|`+*ahhOW6Xf$(9y#i_{MD6kJZk8gO6YT`cBgj#|E4^bgDP=&n)#~G|1?YJqEakLzmXo-tN$RSbmwN-W7cnyVJ3T znNT`Ybieuaue~mNMXi}%L486ulA-_qY5tjWAJ{^a6B#iqQ`v{QF4SB_uthwv2?&QJ^>)Y!L|D zEOnxvc-Q>q(bhX^O62}`hzO;*=uym+T%X*KTYs=R%-`C zJkKU5J8IsM&0v_%`>~Ar12X7Dw2&F*jye42b{!-_QW*DbyWO_txBdxmGu5L-LmP6$ zrYh(JrW;85L&^U9Ru00M>rgenLAw{ULmo+QEJMSwK|!;x1->4MWh8Iqij+lzYT{1= zqv6!s^T>K(w3*{){-3idIB$Z3m@wk(UdKuq&U5&QRx04sY@qpF_?FM+-zh0A`58}? z)E-V1&g5Np-R)Hrmwe+AXW26?M1+Ce-`KT|$SQq|D3X?XNw1p_Gg!JY27G`-f1m}Y zp6#bo1;Ot;Z5TrY8Ral_xSqPsPs_-Bke3pp~@CAi~LP8KzxcE+)r;JsWpX5Hw zvAfes+9+c^d!;0_vVMr7^cp9(LHFPUPW~zVYV#r&C_01aB6dkQGKl z(1@uJG!tV3IBe}aFbj}ee5;C#ys?i!)&~ldmUcyue;lD zfE!ph`Z*k42lsI7U#7*FkKJVFuXGROWj9e+Y!gW5bJP24uDQmWC@@0u$Xvq5sFwsK zPP<_ax}$)-LM&U+NtQNII+!k*Si~lwjc_K1y1<-_#5v^*Bk}KF`1k5N-}#P#fq8;& zXF1gO+0TBqI{N6N##OSD1pQC`v4ON1qUZ3~8*eD-Nzol5L4?qlQ%xft#zKcl$RK`D z>(9^o#CbNP-HBC0G&Sxmp*-WZkF_BzRLtjRy>=%YP~$GHaAC}y^Db@WAvgzYjD2AwwP;;Ji$ zBQ{r2hJXE+f2l70k4x>O5#i&Mu6HS4=tCd+kTa~k`=uE+647GRJ2|2y9YS>m)5TWr zz06}+nex<|NEW(}&0shQ?ce_G->WZw`7718{^LKa--s&Eu^n}c?`b*_lk9eKqS$z) zEyt6Cy7#FLnSyV^7!-pV_jAqsR0?olhj8wg?p<9G8}=e#1Wrx@%RQOaVv4|k3!Ih36GO`mF*PL!~l>u!G;Np7Fc4E2{tGserKeI!FTP* z;S_qOV|3@O(%#~kEl`)^hqsuB7A z`|V$Cr}eS)3CrbC-x6B76%Aj(2Lv|=tTG&BSGR75j=JwBO@F`|GxLV zPm1_Z9U;4qH_ySaaJ(vc1|-W79b-A$Yj1?X;q0<>+1mMy zV?|l(Ou`#5)5oKZI?87|&>tMNgmKXfgc?p>EFXgd`|)mWOe2m&Z{rB*HV$1mMsUrR zynI&)W8^CE!v^o(z#I7-t}Uz&((Zi76aDq^!_%PqsJo$IMp*)8^Hal0W;O7~8^;&J zjofdbHU3<~CJ|jY=ICR*?empCywWEa4&vGVB9;v{dZGV)i*|K-j5+vn_?UN%*1nK} zlpL88qGo3+b_gPT^yyE3T4xr2q~2l3M56A(bTAEq3^P$jmhj@cDAv_Fb>&=rKfrp4 z)zp{#7YZfz`Ht=VbQGaN{*31KRS1l0czNEPt6+k;e&*@e&5n+=qY{w1QC|I^dgmG# zXlN5O;d{SQ@8|6wTSBalglG>t?68VMIBI2>tlCl8EUiFT)$@PD8ANExJZNN~r=oBh z{uhl{todiy1AhP3g2B%;KN~8dQ#c}{qnmqYK|<~iFIeCaCQ%}$dtz^LEnAbL`_?kC zKldOU(Ll=Jc%k?Xv`pET1`i#$DfNQ`;3F}~aO!Vf172jGJQR*G#kt>22V^jMMfRXE z%e$DK!*F|Ux%E7|eNpdQY%rr@nxMB*z`OdGd@^j;6X(M|mpsA%fvHA}$Vn%i7Elm zaH6LG*xZPm6y%3+b?$*)>p4}PG%q4B9;gHR*nwkYrT|{!#7D*dRO<2=KatMMzoR#c~Xvw4)6?Mn*?$aAEF&jGFXm(JAmSdBZrcts21% zlaq1J+&&&Z{UhAD+A6EbOT}2nS-vP66J5X4AB4}w0f8|?8xsX(;3FIp-QA(w>*kl@ z5B+E}NJy4#@dQHaXNznhpeUC(pSdJqiU$7KtlNkk&k;tP=)5_i%d;Fy8MJ3~FtO54 znPv@4@361I$fhGc%e>~K=zwnvgv-5vBCzipgewhd)k1ZC@f z=^cADggmnBll&R)+6TR5n32!i6vQGX*@704P!u$jC_OZ|0Y?(()YitHbwQb+uv1&-L>Y=%jIk^HyXbkA|)5hw}|r0{~I4&E+Kf zQY}L<=;OEb)?Z(|wP8%p$bn(7z*J4Q6P$8STaCo4QnfdryA$Zy;9IB6n75l~i>5yd zF+M6zUtqjsa(|bh=J?WNR1i$K5L^;M;@%v+_9CLW!bTcxW@l$F1Q~|6;OhmWx$O|0 zzF3Lho1YAa2==y=rHh(`c&`(_)Q^T=aFV!}=iSC_5KqFG%P*+N#0+7D`Pq&Vqt12u zh*R*o>dGj?tXZs+75qGx0?`-hrS)RaKZOZ8dAT2`7fPTD^Qz2ofqrO9*cm)y$TcQ& zva*(o_%k$_^^!Ii12y4n$ zaJFx@>tlk|X7FOET=y~ZMxigaOo(zM=)`&5befT<;Z(hWCysxm9?6Sj(FQ?%vRKSO zNoh=xghp-Sl=uX9Y+uR_ZbTutAAESU{X_Oq!1N6qy!~eA5uT;~hyunb zjhwPrFWmg{m%r4phR^AyS=D8iURKR{V2(pl%$=<-uZrUj zeOw<&8wz*lJbSzDL~Jl&f=FON?UM#;GBCA1waST6@z+BZNR$#h22b&KuGU>Yuk7aEX%F^q>#Su)Z{akBhi)ZgqtJ^A!sZx}2X&|i z$(bCzOHyVoXX6p*zO}M+H&P;G=(C_ZuzA1lQf~+Rx`m}Kti5GtHxwg<=TW}*-g}?U zD*v@*wxt>qv_S8W&^?Na9U%Hm5h+u67MVdZ!rW2|A`YAbk7 z@_@2N;V*`geXtQLFyn}je?l@MBXDHM_klb8MR!0y;AG!y&duh#OSz{39b=gIiQmBw zbYw?K@Xn?y*Is+AagUy$-jx+u+kX2UJkJ|)o1<0!_O8_*geuzNejNPyTGI48(U>i( zsWW*12klvky8(24{d( z4J7H>anpuH*Sfgbc^4+G%0 z%<7eN58fyWp>A=}Kg^Nxb`q7Vnq=dHT>(M9o zqHJLTkE&F>O{EyB&K?dP9ta<8!<-O|Q+sd%)?6!=tMQr4Rx*1(``N$HvWRVK1Dr;@ zL&3IMVa@J0zj;aZumAdQPG(C*hbITIfESMrC4j(~NP3ajk+9oKgd1A4<38ZUXd}oZ z^f5ZaIAk^|_mEIR*6PPT_AwZP48*fy7?A(u4r=M}U zH*#?)lBMdc+-f1#chB9b?OU}r`hWe;|EZm_eil(0J;Qa6fCN8AnD6ZAZ%5KmBK1m* zCl2_Vb*Iuup5qywXN1Q!WRd<;*kFY@z(4=<&-nOZEBd0Sq65?Sf4d#}1U@i8*U3PC z{_~&rsbSDD>5;Gz&0?7zGPZ)~0PREHM8vFt7(|9VhSL_m(=PQUkK|q!j^60u?X=YO zzy8<%S{-@Rk=4p8uB=fqCo;y)U`fMau>$NkQaF#C+IIIncU#w`9>HM)-RycvS$>7( z>{Mk*-fg$n##`csxoV6bd-l7Y6_+=!s#N{fhk|A9+)%7yqr9So~@$+dVbmEV}EvJA$7QU64}x#`4b(8W1G=N_&fW) zf?!@jqgv|4sUL%wISUVmxCGY>68_6Me(U_{V?z$BMH(ni7sL^6c|KBun6n zcFA{gL;`_T@n1fw@5w{i7yjZ14Uv}5drFrK3syYpnx{Q$`-!)!Z z&@IZxDIb}eEntpR3WZVd8WC0)4zD{HIz~`*&?DTUOp?Ihl4?M7U33l4F7J(YXfL+A zBugB`laztL;!NmtvVz2< zdTudUsAjFA5mHGM-h+QAC~#JAa7-kZXb(j~eQXNCh=hI-$$>9WAUG$lycGK|EGK13 zf)Oy$S73!Fz5S=^fiFpnqhJJ)6?lu}(bd!@^>T$a($M(k=_~~$G=bxeF-I22bY4f< z!Xy|WJ66(qr6B=ljDVPT#bK@$qV7e%JoATV+<$h9WJwyz8Kdc>M9~tb8RJK83kD5& zrr#lBvBn#I0>{=9wC{EVXm=9T82AaeLMM^P#<8X7J$MEhTW|4J{W;YE3=y3{Hw7;< zs^kqW)>@lB$>0dS)O%D0&A7(MJMn=*p&jtWp7o4&;eE3A9d4&W|6d{x@zw28sE@2| zmcHRU`98feItdLjA`0BbU!f`Y05kd)<3>^(8y*GB5lH}M(^Rka00y~)7Z}Jee@zYq zZ5MDGdbe<&Fy|%c$uo?I!3oX`z`6bCo?$0cZak}hxu=Oo@cRDjb2{h#c{YgADVM9S zW}b8yzTkoD&^7on=m~EHZ@wi*b9vL8K_0pUd5k_3yqlq>woK{BoQ^?MI-G=yWR+#i z$oJlJuXn6s6NGwnK@TxpXK>`l001BWNklSBLi1n|9D+CXL@ zh;>^+esWP8KWzf@nNZ@s+R4Y8Yd{bfNy1EXsZ?n_;pQ_A2;teg6$1K$m=jNokT}eT zg79&90}2iRq4!&EzQso1a4nG`v`fDewlZkm5lTAcBq3}oXhvWc zUU;FxzfV_Zo_UrxDDhk|a!x_ksn1h?agFD31Q``VH)sGJNiIYoC+;n?`UhQxE!52$ z!$4%u&VEN7wbC;`MA6P@n!+Oj!Qm?CkBh%?vGDRrb=SgGatME@DXojY{&mU3+ukylZMks{a}d{RzUL$N;E=H21G<8!8V;*T z%zyN=z>&J4r;yBp#Rwg{;7x9`&DMTX;Fa`D zQ3iuYF>gzu{GqyBb3n|g5YGJg$3E^O4LzqcpkWv}417c^Xw!^b3;NjbE`7fS?cp7a z@6J2#tQ`TjvC@ZDjdD;@rIa-#6JIb~@E@Zuc6Pez>Z?5JX1UtY+FS&W8s6eQ-YEQZ z-c0+V)S;(GM&e|K z<88Ly#_M1ieLLb%coP_3RhYO9FHE1X11tQDTsZ7Mu0-^MX7bl+ouPJf_1Nl zXPxao<1iU;*_~M(Nrf0T5N)8zl~-O_{Xx9QVL+^xx85v?i~P=g zlx`lgKGn;kO(GeNy!0P{6iISFc`d)Z)>mt(7AHW)CMlt>2RSp@4}Paz_K#=#RzlA^ z0N+3$zi6)pU`Ll(ri$K%<~Z45+Ip3ulN%xI1dC-(bi{GpR!+qDnm!r;ZXz|$DzAh* zif>=`Z9CcU5_`-O`I@MVwEGZAjnk*hr_7jl<2yTTfz>Mo6R&V}d1Hybert01jpyJy zgcl^Da6mN3O~%2~rS4P;*5D|l7XA4x-=Ub>+wtjkKavRUWE|RgO>II1!c@XEu|{fmWL9G@MwCMeH{RU44m${t7Cx&?W1I^fEZ!4JC=>U^Vd8=vJrxVN1r1P z@ENpfH#;?B_Q#U*xb%^gg3XSLUy8r5h0wi1tufY>2E%+^!I``R#>6OkP*T4n* z^rqHTCl51P3WFA*)h5#Au1s@@{f_rWBWzds9xHx`yGYv#m@Q*R!hRcK~jij@m7sG*-g3&8PP(w*-a&hCMpdkYT0i**hC zhTqILg`dHru~FKnD{^Bl@D_R*Lyk55fP9%g-F*oFWQJw$K z-&>dZeC&kD@ay$vadgb%#!cWkd7g@*Pfe9%ySvYTr8m4pu3F1{?%|5IknYbHwY3ULEmeG&1N5yK#G83w7lQiw^X8^WpU^5Q_O z6IL_=$~D2sP=2he;Z0%a#)d;k`GPSq$QI-lfPSd^dt6Iz5=M~fFHGLuN_;n5g<-e? z!*~e?BLfKtC6r~?^M%jrtA#NFr|%f@E^PIF4MwmqnbxKO$nL$>SCFrA4}4WSOpMHU z44#qpwqirsyQ--7Z7Cm0&KIJLOjFfq9xV0ykG}Jq4FN)J2!qdN*?~-+Yo=a;E%Tlx z6l_CnJ~5X$MBXUd7(M1(q47Y(3Yb{Xo3Jp_D{%Uv3b3c*N(I*mTi!YKe@%jvDoidm)EiA#+t6N?%}ke!LW(0ls#_6F^5$3}edN zc2}ElgzIk8DV)rv`Jj68phw5tURcPHO~Gp(F?&Xf{$Ka;HwGd6*3}8$qHCo-?zJP8 zo%K%vU$)=dbu*?*82>mGl4+@wvy3`6t;6$1t4qjEfkWS8N+s%x8yYy`iRL*zB^yOu z1sq+B9He|AXxQd2Ap(?Nnd~oG0*B=!AgDn8}a&8=ozgB1G_awhfT2&)hv( zhU%=Q{x)UCd_esjmn~p=M{-j1EEpwkYe=1lNk-?nP>6w)d^(a+;`u~uXQNpYf*%Y~ zaPHg2LTHY3>UKLS9_Nbzq(S-fBEN#CPK}tNgC3*~0v}G#! zt4(9Bg*uE%`eC1@((nWibxA6Z>cKFkd}steYi(p1fcLoqy&?EhdX;@^o_&@%dK35v4 ze$P(JH8pO7QfO&l{59~^)28mjV6*Rl@9L6;-2%KZVW zzOQxs`y1_{Kif9dxsw5pui0&r_e<$J` zJi|S`Jst%6;2OvOW$KK18{U+L0qxtMm*3*C@^EjTeU}-myt^?9!_>%X=+?B%wE|Cs zV|Bs*1~k^X+@2pwMkqYe>RGY??F4j~f|^)`0mdd?3TP)x@yq}?TM#UjA5GUndJKX! z-SD^y`iHVNZ%O!a3M50#jCP=R$}qL3GNCCvb>Gk>=pDSJ`%Fjb@o29L#_WfgQor|+ z9e1llpn?xeeF+#pw-gnhGY@4jZ*;+tH~R8`-v(DU>0cTripX6c+xV*SGIrH%e5Slk zfDP)(qucz?$hnK?P;D}mmf8zZ4X@Q~C+!Bml*h@tnP{fy-ht=31h&l#PEk4icdg#$rQNYtY z=$~sE1}3vl-5^HYJX@aE!^XaqfA`(J-+A72OFqt9vbsg!rQX(>D^q67JBT?%hX;Ac zV*%UmH{&ZPWu~XJNEO!#JUtB1r^0qW+6>hb9;aOdKy{=S>~`Z{frB4)NrY`H+dj?4 zjrl{VyZ?RfTm=KB6T>EqU!iX|X2!!gvgu@;LLc)7Ra)pUtP!>B=9?7OcILP1$cIsc z1~Te%r3rI4kmY-}9Yew1n^OL1r-r%In|ISbFsD<}oh;U_wYyLGTYsh83(r(t>5#WB z<=2+uLG2}8{I`A&V2DAL__`n|j|J`8H)nm5sW<8wgzvf)>y2UnT1_W@_#4xMGS`~2 zVS5nr@*15JJeIHRYzZ} zOuWsd=ZTQ*M%HJ%=lwvb*%4kC%$t)l9MPZ+TdBL7$GUN12UD*YpkWZn!XLj3hJ5g| z6YW#mKxeI%5&f5jn=c_Vt!w>2aHodpS-*$%WFG_H|IW!>ogQO8`TjP&ppGtT_g785 zjkO%9$zi3>QxheG1t8(?1+h;Hx}^L1_p$%&?_4eT>Wg0q=pb#;eI2}yA!r>m$+rAA zRX|W8Jnz)6-Hr68mf5`2>Cb(_?CmELOyJFTcg=%FFU@@|g!RQ;ca1auJ?Ue$+kx82 zc3`;Y65j)PX$aH|)JJ_-WEjIaM3a-dr3)q9xHf;FDGj zoYYhBPIq6zd`ER@@W-ODWs2L|ILiK^wa3sOlLC4Y4^4|Pp9+K2<57XEHmB4~)y8gO zU@9P(1U5S!X~LmEI1I6u1gICa*GtOtV+v+bMk&zU90aXmU2@KSwfQRU4qA0R*==Wr zLPkS%RNgQ;!Mvn@^l=!z>IS23!_{>6zWeSa?0c78m`wla(Xh{r#Ye+qrazY31|{nn z-w`W!n*I^C9pnJC`#9*Hb|1Q-^!JiC68FI?4FQsmf)9h2xE6-5jO=wgk*$7x9Ugy+ zekXk)XC=Y+cfQb_k|r@$Dd44)s*pA?GN+Yv>5YY8lL<;ZD~&CT5=VVA%thf z(F(&T@yX-tohJujAQWB*c8(;1R!cBXS!43A$U<8r26gn0{CYdvznz#msc!uV2-`sJ z)DLNL#?v{I!5#9_U9Wx1T#Mf29CE+mSps-84Y+l3tMj>xGcWZzAA#-0l;_h-tB=Co5sR~kRbVQTd@>QqGdIdg9@gug zIL3PYOOE+VI=-biQ$5-fylkETlgE1V*k3+&U;@V2&prFFBrwCo@v-DR0sedaXOhC; z8Fmzm{q+sGSxUP;X{|ZinNrw)--lt8HRkZ!pybEt?7hb_jA&R-Sw1(*UE&y1_?|6j z+0~9c;@M}N0>3fm?_KY5)KTP&-*Y5|M)PQ;Rr=ws~&{7gG>l2SZ;iDX3WR9Ku z#V>xLgA3O74r6iZ({kROY9%S$P*hV1=~7%5^y#M^bon{$2=>7J4^$66IL9==5k#S| zpF11JJoEfBI@V2_kj~C}H->m~;@cKBk9;1MA#o^$d9kpNa2|9j~bB34qKJ&wH z@1kIN>39~QO5tkLiIF)K;tgo}B&pYoE)%)Ln zj11&j(<-!Wg}`UvgTJo0{EF(!U;eU{y^XmF3KIvC5fIUXb=FziBL<8=J0}J%Qm)(LvT; z(203OEI1Sc`oRmx9EZuAa`GwFDW{xlBZARMTxR4W`p8JDF^E&CKiW79T8E*9HaPxY z{pweJKnaIZ0h^r_{l;L1?Ljdnj1JL@^cADXVKN-OyXBT!+TeGOXp`2%OilDNNTKsW zH-YDN{hU4j^{;=e`o<-fR8MM<1yg}993{>u$AAN~Pp>OZC{dB4k2$*fvrm6oXMJy9 z24L`Dr`OaEmTn&Gey02PLEr5FmK_o~Nao-E{oiz`%Egu`9~7f4bBT!LIp{dX9D7WA z)-8H{@Pi+$&inXzJ_{n`X97;sAix&!`eGfK4Y^7E>zua4vA&^ata z6Z3l1E5^S4_Fq^Lu}$AHy0+&YdwP_P2kz3v6pM(TaUVx1gq5fXBii5> zMcT?<)X+nSf;;ZGvwGy=N23wx1dJJa;*Gc7s2+d(aVuVQ#_ZX%t6g^4#fq2H(HI0!sI!}2 zx*@K0mi?bjgVTL)_xCoQyMK%J{l8(r!PsoG&1_H}eWdhBzpk*-3U)H#M~owVB#J~~ zfUu1Q2=E4x&9~kXemtGjl!RfKAs9!3W~WI>8#@4ffdXz%0IZoBPPd!|#3>!r88&?c#bt;|FZ zUaROxS(Fca_2Aq&K4KC&K|_Z%t=z-=MqzHV-8R)14AN2NTfqb0 z5X$3hX2R`EF)gd}%gtXzd2n_GlZ}{^K7Baoy$4liopn~V$DVumx3)n_*xPc^Y0#qo zQ`yHwtt$-@^#J#VW$GhC?mm1(P8RZ(G{OLaBmVBR^G-gs@O_F>a7Yb)fg^av4Rg57 z!8115od~JHA9Q_S{|a%(elBi8f2_04x;_J(ur5&-1_H4`OswIC#`F)~+)@$B^UpuO z`oIT1V53q;BnQ|O8z%oY;D&*nh#&e5IDm(#L#8l(_xs;ff6z&h9QZ@@z>cPVr|%rN zf-ziOQ&qrx=9y>e$l#59c$H72>kAWb#@iab4^8@A8>bt#A?ZYLFFeAT>CbB#mq-t` zhZ1l_ZM1_7@g5o7%#pfNPC3O>92xOg6x@yn^RT}!R%7n)#uzU=G#L8b@7_S6rsu2q z^XJF;;U(cMI|ZY!zrp&|@y8!uopjR43NbMc2J^(Ii8j)pPln**Bd?``1v4YJO*Y-s zp_oVIg+BfC(;k@v10FL4g|VC%XaD{8t3LhdKdTPZ)BwgM8D)Cl9KR=jig%!(v$TyR zJhJY3>sBM1jrfdmjAI^&T0dZ2C&Mr0N*L{=lTPwnH1zQaYEp`euLSfc#r5Q@!e`7C zGbNDDZ7LbU&y;=l+gJScX&u?PhmQnpmo|?L`i%Zu(s_~j*)=u7!-#p#R%g1m4L*I& zea4AuoN@XY)e%P?QLQW8k~)Zcz;5UXj74Iqzv1B5$>L?0=b$6!%x|#41~z=q`IT2* zwobDy5rDigM%!<{ef8PTezrR5sH3WNG@t=?M_tCS(>MW>GB`p~?F{B;5T`eFuBHLl zMmj5<=m61>XLJ@g0~W(uUWwV0PCiLa=9z+j2kUEoALJajZAHS}jmPfq+0Iyh>%Nqm zJS8JO;)re{UkoBc2EuV?FqYFDn{TnX;6J#u{rnyhvD@iE5)?91N>ckUHtWH1ubf00( zJf{^n)w;6yYXSFXoCrRa{kQWzR~y7gB=LMQ7@ui6jYBshxCh)Xmf9-YQiBaz8XH83ElcFuzjdUZwW9e8w|b=Ij)KjU;qUf^R&)F;>szY2e)PxHBe zx`BO|ei&}1BlK83NJ>U=n{L{=k2C0*Hsmi;1W!Hnl=~YwDQ|jJ#XkG)Q=NP6xzg9W zh=*Ar61+_t^ef-71TlCzI@6MyXtMr)ynfJ!)bDw3;-p;_JVVaO#*%e(_W}(fGt-`q zGQ9>}P8A=W_Tkg2k!%FJm_(r2Osoa9D{(xXw20kI;IYTykNWNDT<7c z;quEWbSO_0g}c_;Yk8#m$it6R&ph*tnS*->X`iel78rwhFv2>77b(o6`>lH&(uNn+ zMDk!J0$H6QMCDymMjsNkB)SFB%ofQg@i`n5oD-A_eSuhv`Y`B(of!3To^m|@W;Hsx zd3D-przw%@{neTZ>%_5}0dIPK^wCCzQ=Zf=f*G&|!;Htg?SA~Je{Rz-6@hsm1+FAxi=>aOrQw2EkWd)({E3LSa4Ht@@?__H;hnjWnwfA1t1s7aU z9dpbvo-Y@NnwP@SiR^8!qEH{G8=j+WCtq4-!iX8l)Ic53&g>V%RCEVn+~t;ueh}(h zTe^Zs-rTu!L*CRk4BbaRdZvxuW{Sk%&=46*rwO^uI$3svt|9Wmb!d@WleT-^m#zcQ zlKhD*^Bnczgdq2PH=F7|&)@T<@CH1(!TK9`T8AkW`eY|l&k$KS;e->a(@vK`85s$h z6(=ykFgvOa`U&5f{(Lu0qs?^k27vB*0SA2?{4>j|a=0GRspJup#5}b6>Y59egN#0A z0QU4#Py2rQyq}^)pZe6Ns>2UE+>Ww&e!!au1Mpc^u?x`I_~|W!=)v`TqnG(?StvLN zs8e*IO)NZzyN=8%ktjj7>mwU<*Njug`mEnN-= zMeWt?_x5Efu1s|{&p?_-d)&5BU%!SHy_haPrlb?dFSdI=PD%wBVLwdY=YimCT=sFW}%LJfnt(0A3* zh9vr<1Q;2UHD<5jd)nT8Jh=4!-^La~2QFXHXohpX$1A3n@VTj$m$0hf_SmxQrGLX0uB}65l>R8CKw~HNLE`}5v8Gu+DGu=A4XyDPCB6Z7kH2tXQ?ZS zz=-FOM<4Mhd?Ps`e2>1&^2ih3Lw@Ejct{F$zIh%86XiqL7N>X-87>&LpQcC>GAi723gh0&X0}IdkTi&xo|3mvH*g zbMS8HM(9n1@=ep0d34V^V~_bSNKxuOA$tRvPGkN|XRXn0Z-5_o7e=6FVfoU8@*0E`Il(H%F3JJK8!i}H5dchga7(}B7PzmtO!QB%}(7jNk+c@R$M)Nk~G*+o3B^D`SowAOTKxD_m;rsV26-<=t>x!5}*XWz%ejB zt7UZz9_`@kMU(``A17LmI?4kIf{<-9|xizr$putg;#m6eA{t60hD~u6}0}65bNu8|G@)i(zIIaP76%#>NdM8X-v% z+JYH!nFyJ*z@3}NWVi)T=mQZ3mZu?oJWo6H`;FHdcwzeNGs+vUmiIBw9AgHDSpd~A zHt4PUyEJ_;9W20v?XqR%en52s|Ax9)@RpvQ)_~hkklvn1TB?8TB;$ zzzFPi42y!rI5AJ`L^s$~&!RBs3k*dTG@BC<+RHqRS{8Ia8;yXA$KQV3&*CV*q)`UT zDW87kX(#!?ze{RibPKHC{MI+CCmwska-6v72Qxb74_aB$UBDyHGOa=g8$4rZURUG- zncZ`*y{zbSL|qFSyE`h1*VYx?b+^C61Kf)NVU+#A0~$@wn=1p|89734z&~~nAq+gJ z=ggb&v6gp|HhKH{7zN&RRpK4`x{0C=42B}(z0r03s(|0o$v8PoT>u;VWaN}#zqXgv zvN!ZAJS7(IDGZ8u4^^b%7>T3*X>-`;z_s^)v#|j`PO0<;Gr~u3 zQUO{pLm0y1nXra;O5r|?AtTtUuDYsPAVYod!3Qf*Y!8n#(qJZ6BY4?{pH>s0F9R_P zWaQbrh5A^tdGH|zd!C7r4Ri1)T*_-w3^76ry=diFN;{Oz`t?H(J;b9ll&+1a|HaN+ zI44*A@P}U3aQOQUcY+(EX$ztX#vu(b+W_X=ezt|@ca=u|3j{AjKj=VZxGR|t!JrP> zBmBoQ4%hQeX)plIJTgWQXK5|=X4N_8oa3pPlqG-uHUM zN@3*Y5rsw^jQ(tdC6T!l2U_Q71mjAm5aYXtHf1^BfCHWXfYD@*mZf0K9S$t28-q^4 zn}^QZZMR)@!TA?dbB~?t(N^I|8&>iz7=`k8-+lIV-*6zJ1oH>$24BKs7<(K)4AnK) zTw{f}pPY>S_uJnF-EFJC@D^>bkr8djDYvDSCFzf+yVUK~R$t9Yek|?GNJ~FB zQ#a68-r$A)F&Mb{=9{&P-a}rq4sMA|FluEP8}g1Gh!I%Uj7|$Y_iL-?nrR&aiCuTw zHI|Vn3ep~I;P~U@Lt`Q?+iUGSG{&)_ZL~-jsiI5WNPNcONLpdE*a(Rz08@E8?zn?9 zwCOK~ab#qq+I{!kJ*w}muYnwVL4KS;RtkLRqz}nK-QS~BcBaDtLblM~^XAQ~ZoKhE zhn*Sm@1n#u5)%16228=3=*t3f4~n>eT>ex#+qo*o9_LXo_-D!lBRD!b()YQZi*6?{ zhC{u)bnoVyZ|-SX21!IdQZE1>&K~pPjM!IQYgJE2AzR@fMm?!>yZZwUDHwZjP8Pp+ z=95#%`g7z8eZc%WdY$%7s|m1APydFvFr~&k+cU%X3*M>vATA;N2cz!2&)yv#HOlrD z3D(_r-|Zz`7{qhVJtsE2C|+W1zzcu0`<0i#)m&x2zaoWu(~UQo!9M=+k9!$XDydla z-OSgdkayM>+(&&7Ww+gSmvHRVqvQz9egFGEsII^6dX1o7wX!@(%)hRZKp;K{NM+*s z3n7~jmA2&6)B|fuf%%B{9Z`Ma6Q8g%U}f7Hd61Nmb-J!VZX4{S@3ZACMlkTlyQF*$ zJ@il+>Vs*8860B@oJUV9-Uy^QsQ{Ow2ssi@)^!%~M9vg;+7K<@uWcc8NbG)P3^K$x7 z3?y@5aDa=t%B}xDd+z~nTUFirFD^wAgq?1r-s+f+exU7VAHG=H+ib z`N!Ad)0f1Sn14+EFDB23APNFvK@e1$fFQlxOB2CMZ&EM+-}g7>SbObt_TFcobI(5a zDrfDp&)$2LImaAxv^nOOV;0(q@={=(dDfZLMHgRWZxqHcOM))|34?i*o0O$aiSP?;RRrXB)D5WVQ@VxWRa~fJ;VG8iAno`?L z2E6-7H(GY_fZ9Q<10ISl<)TX%0~cR>arKa1M`@+ZF~_{h$yrPzx{i@*BT!{Tgmt4) zF4{FjJ$%YYMo|GbZ+kp#XvV!5Ap!Rlc15Ge!6AbV3;_xPMhpqs0p2LnFV*F;^hvd6 zpZ#6;$A+5nAh?fAcHp1BU`oWf0E&0Y0Q5WDgy?kYpudR|_~a))Df!H56@ZF6_)h=- z&ENiwjXHGF$3FJ4YP)T>Gi*UeQJitZU%^qWGYSfsy84%Y{+H@xd5pHz^B?-qhpL4O z7aHHR0lG>9Jjw`M_iM(ooF9oY?*=Fk?D=6?n=e>7=DPD9I*z=;San!7SZ3>JX&T>+ z*t&y4V4@6rA%$}UTHuz30dYw(KS-|KF2UCTuI{uJ1{2*52m)r5Y1cimejJybFX+v8 zGT1S%(mjd}p_zmPa3LgCGJMIj2x;0*K#Yk;FBh%$g1Zn5bEES%vDd62yn3ob?>vI3 z6(A*MwtyBM5fF@~VX}x;Ed~KNZqf$5R5~3#=2`lREOH1p3_Svr$Q4jX)O5*`Q@2yo_)F(??N z5J>4HB+#GUVOY4RP%=KZ;?fr`T;O)pxdc4@fQ*3OIYLeZUch1SRZ%47rRZk_D|n!r z;J5k8)lRHI8eUD$TwrJV|AE0YD0nl*r&${E4S^4xq3AIr*kfXKy_0~_(6swo<#3Oe zO-U|go1JR37-tx%jB=qBE6{=q>P=c{p6kF9_d-sIJL5tRd5UMH*ocTSpnZ%h;324( zQS^GM6B?sUw8bg-JjO9_63_`PPvrm?*`MeY z-tG(2LEwRDU+@O~Z1J)!s`0ULCzP@gS9m1x8+8X~b3KFExQ~Gxt0}zsiext)KRjJo zUp_k(_@{gC$dq{!vJof@HU(u9SUQ~Cy-@%EnYD_bW-LS0{!d zEuvJnx(o=NccbDY>_LdLVAUUOX&#=7Ldl94n+JCVA#@AH*5iHzyaZG63&N$Ho${K{ zCUbRFHuqyV3<&u#PaOi^U8;W`@rW_QN$;NPq7U~`gVe0(pvgiHHY$0lbZ)RZqi@kg zuZhC~t!b)3PANFrjqzy2um)rS-E-Ark3Uw^NsN3NPYM>?hs@F9l6D?%wUcK9ezyv! z3+(Z1oM}U_g8ded80aW)(rtqOChimeDQL1c`HXAkxO(Jhp{$p2$UW{`Fk$p8`#~9r z*kvdW4-LksSHR$v(7*@f3VlFlz@7>S1&=Wh-l1qqTXto`k`5D3zPs6eovmtNSJTK8K4(;! zC$f?$Oa#$8eZeQv9G6f=*)no^fkq?u-FJU=^)**J1Kjr8Zx{1=Ah8gfJumL~DB2?@ zy%KqW&>*5v@JS$jLFrs51Yr1k5fkUQ)S@)zKnWUQ7b`{pxOs@m?99CZVJXnC18-Ct zXaZl|@Fgy%5_~g63xB6?3A}}sZ2~aEOgyrGd`shw3~u`QWk0WOU3_b`&9>XvHAbq> zJnmA2`!9ZRg#(V5AAgyw_ap{0H|1sDnGiel&`br{fhzjFrkR=yRFa9go1WsnIB%NP zn-My0!5fq|c!B2PcHMP1yP3I{H(rU$<+42W)Ng6}<~kdjDOeEj4wfrNsouYWKbq43 z!AEWSt{ z7#@tM89>@w|a-hA^-UQWmoRrm+*!?xRQt2mQw4S)0<^w2RZ-Ka*DO*o@j zCX5D1z2KV&@i1p*RGCk#umfm(Yj9Gz8S94S7X%j}m{_WT#dn(`KmY0f{U?t^KBm-# zEbTJE>RNQRsdvJWjA7EYWf=@*LLBnQ4q&hHB&_D6&lT?gW&2PsK^Rz}mtS#t^~EoI z(Z&aE*o9=M!xh`(Xm+#-qX_jLx6YkvVZgYjOL@b+XP5SCVm_1I_mDOL|82_To zWd4joW{#B=5nuoM*S%ba-2=B6+oFO_5#ppZWh+#6Si_BoqH^>$_$ho)5Y|<7)8(E# z)lXPXgn2Y)z(N}a6dvoHYfS44Bg8yBGL+JJTwV#{8knww52MZ9a8h=-OiTZ%LQ4vx zzw=4V+Z04ccO^soN)Hc8B;B{o$8J*2bNc&~Q%Ij4XRS=W+{=l?8FW4Vg*|14a?bp6}Nx_6bvF4}pcA*9T(0+%vdO_9y9JK!2vncd38gJd|^X9Mc(0RFVAu2X2Vu#NE`1*f1 zFz?q|x|%u%gJj=*_jPv2y_7eEY2Dz_fVBgE8@6Qr;BWfKO$}me-#qQ#BUa{3fa$b} zaDsT|h_LX8EF{A45ed*GOYT)r+|_2d+(05NXUZ`mTwZsf#*eQ@U5UntHTOT$#Bnc# zKg;qYs%s1B?^in?kp_;qW!~hK8;NosR=|WP{NE`p)9lH9B z)+!T~d(YkX*nn(yClT;OkrRN1lEAgbI`m$BW>V}y+W^z9dn&z%(BX(>lp%mN-BdfF zsWL|BKh-i%ggbMM2-KT2lHmMt_dmX?zRX$)28A7b|8MAV7~d-FTDpbP%!5;0C-jr{==wD{Y!0EN*8n zXM=H*g@L1Z8!h?{A32GNlptw_zb?G9l`HWa#~puMwYvg{QR48@1?OMjC79rQY;4S{ zN=%bxo-~R(fQK^Y_tZLowqV@a;O@~`Z5qc2N%#8o*Ii$I`5(VreM{agJT|0IW@-nI z5CO|4o%D6{6|n+%#?mlId=!@LjeU1-0JJP}p?BemW$1TdS~(LmP5HgKF4(Q2 zd4<3s4qP+6anZp2n65b z=XGE01`YRh=l&w#h6B6nF1Mi@JYR2~N-qF`N8`#`Mly=;Ybg@zXITY-A&gMJQ^Mvq zOMc_k7i4xj=bUq#aLEa1iWg~=!ekoF@9{{q+~OU47i7?9ELlQ{)tT=aeaCI|6>IIk zuPv0%I_oTFgJby`%l~2xefLNWB}8U2WDXmKL{)`mdUZ+Q`ytYx!??h>bPItO>>tzEMK|A!V;(-89n% z=bZCH!%RD%N6MK^xR(_jz?)siccPD(t29p)p2rU*lH zvEo&lo`p6xdj6h(vz~WNdNTMrgf)g9X`A6CysGfiYhU|X?Mio)(>>D$FNsv};Umf^ za{B3~mmT=@JT!_?i45`7Ta?)kfKe%O>RV3AyrGcw6_&M-(RWAP>WF}sSTC3eLI@95 zrUiw~4hOe0L;x20z+f(H8W^QsD&nunr88A`Rx$T!3=B;R{qR+Iu2$@Q?z2L%Qi;#f z!F}!?&FLBj@dhr-?YG%fo`;=Cj79} zVxl%v+LS2uqW7 zl33qFxu*~#NDhn7YX?g}?w}Dy(!pecdWwBM@%Da3m;lI*8wK%A1myX5X4H74YwPZ9 z_A`Au>*y{3sA8;t_UL94iYtF{rCpmlDWMDraS;A5lN)+#T_bB38NV`kE`{%`gT9Ov zrXd0b2t@KIO4D#%Q(U^p{N{}}+~_1sM`-E+*XY0efB)iyEO*{{hZC|e+N~7jo{{Ke z|H~vznemSWhocs{y-;GK1)9?*UdcPPW7*z~xjMA)M=$H&L*H6mL49&Kbo&WCn#Mq310Tj9G{n>fDWXq5?KB0IKH&Hi=;&Z&7d?7|S4vmC*xr%0UYjY{ zrc%zVD)Sz?+``kaeRgS<4JR5dwIuj{jr4fADSZ3gxJ>6QT3kXX6~1?i zcr)4TOZ{bP)$jYmG0N*Ej_jf~$>9ve5#Rv$ypA=vn=JR-nldD>~;cF-Gw zaq;3sioAbBg8!gu!;Lod1~N8&Elrn?f|?0>GW=>k$vs#%&)nu?k4L`!kf0GGvqXWj z#0bz&ha7T{>R4SXVRyd#(lf%FJwf6oN$Q!T^OJcS?^ zExJW6_N$~!9&-dZ>0aqmWF_uwuCbhw939K+VC3zrnhFjD?@vgPL#rq^rb;~(QiO3# z_pGE5?r%)5$oN>^)ew?2zy8_5#f-PF@URVBh>JQ6YIuU70SCRxz0T*AG6>H&<4lj* zx$jv;<`bK;>n^)G9dgpnjKev_0%uj32i97`REWdU!QuglEKwtXqRwI5ma^^N?FKil zk9zdxs!f35g0;ZUcOlBALTH0J_xpDd107>AWI!!_W~DI%yS-SRtNHV{_Re06z<>PX z^PJxwg-332@(vdP9?`f5H^+fm}+kNn!H#Iw%c5RL9^$dCxO zB)0~;F5ai*g>0Ha>QP+4-i%6cvy}JhtFNh++`Git$Ck%IAFT1>HMCpc`u3(`RAf8@ zdzllw7h6sTf1tdX=J=JCt8tAu0K7<@>~2tHaFk`L8Z|5OyVT>_iyTjU!ao>=tnDYo zF2Rzdo@IXq?^Uk$Kuh^r9{td)b5@nPtsouo8Q+CJTiYN8E67%I39iU=m1MO_X5-l$ z!FM8!yV01VD9Rqik%BQ{YSv-F8I5#c4TediCXBmy2BPlu>?mNJE3@Fefe0*aT!SQo zpf6cV&e9*gLx+rLakn``TzRwm6{Dg!QUi{Nzy@?0?oF0pjg5_0`$<7DVmMQg+e8&J zcTV)Ml^u#uV5SQ&dC$b@Xx`a}eL%DNUNV&ahx>UIyTvj1QSS8Li{<9L>%lN+9@pF^ zo0X6+A0@$F5F}e+^o?8kAbBlFxr|&uMzGw7vPo1GT)X^ml12ohJaQmhsSQZ(*GP~E zaNO+cC|2TbEup;j+H0yG$^&uHMHf}qNTH99jrGOdC@(mWQ0QVR2gQssXCDkFF1q|O z2e`2$a6Kt|=A4n)OcMY%%6`v1_pCOTGN*4imZv-F=9+>M!=nYPvfYlwy~+bz+16O08Bci5L~%JG=zy%sNC+(_7= zJ&EOkU`HK<(%dn77=WIdZ(S;W&=fM&$h049nJ?EOo za+3QbNkOUMYTtXGeYBa%#nr8B<*64-*4QkVIKn^!Pn1a+&T}rIjL>GM zvf$_C)3FZD6I^6ayIt$GZ@&2!jd)*D9evEv)$5LXog=J~jclm0MCp3j;OUY}E*8!1 z)en6mJr6yh&?6(?Qjf~vryUpUSe^5ubE?mO{_`Gzvk40WG}f8_@CQGvzWd$pI$6vs zUhxX=5zdZd6XfVfA@44n-o|(*cftJm^Q&DHe{#wx-}Dp~`)r`dF;+14FTd<^%L;T7 zeCQ>g08b$+058p|GH)yLL@QPs0+f+?9ZaF6KxBJjsmYhV^d)COBB%n38>ZZ6?|rIw zz588`?5(Z3Swd*X7U^buyM^=zk^fxomwGeA zFHBNidV_jhpUHF39xFY_C%uo9IirM|Zn()&?mH~lK~c6u*ha>A>g{FVhBBK;s76$l z+8PQyGIhoBJXX7)Jl>`}S>nKx&8gUoIWU@$hWy6Q?tw$pDctGjLSZ65i)?QL(Xj(zR1)q2{+FI?%% z$AAKFnTnNV%;V$ZinlmaiI*;v(Q&o{4R6*CbjLV0fxybsPe08@BL<*#z%1#TVf%O1 zl(|zCcC=s(A3+kV@q|zvAt_>pN!QYvzRfn%@%w)Gz9^bPZ1xChhBCa~r3 z!;jE<)8nd_zU-xDdX$7UgpO|IJ&3Eh)?ZkKVITXcx9O=D?5-Em(Sze-g7 zCu`8y#cFJP%n{1;Gw93qvSSycF)xp5$fi&*GuJx!m@=uiNjD)!e8rW~ET-i+c2jmS zj5XjR@GtSfHnxXK;oyDP;3XT_;AD<{wh!6?oss^OEu5bg+_>6b{pwdcE8#az`i8e= zWh4tP;*EU$8;;jD#fLfR%}eBUU}Vd|XRlPYv(YBnk;%O<>Ik01DE!+0`I_@MFh|bZ z|Kp-N+PA%uF+C;&5|16;6k=Fb6#khtW!|@A#9Wzj68Fpc>u=zBu&p$5W#moDKN2M% zq!3~t9s(wb0#>ydg~a*|d5S>y{rzQVUvP%G5J4NcFRz|ZJrD&hK++d};uD{cBELb= zoliP1J20Za>3H^~hC#jaPD8N3tZ5`93=qkRLMX%FWkt9rlTZvBVTwZk@P|KK9eUWI zvczxlJULc60cIFwYs+ZNvQj7~snO^09){3(sw1>J^h&?SC~{c*St-aEM93gK4}AH7 zqO;ZQmc<3nTyh@J9PVb4eEcpSj$M%QpbzMe)aPvPdfxKR^pf@JXYlz-mKR4Ib(B-KA`h8Pv>YhU zVVH4^O-qm|8^~B;dE$z4FfcptzyquC@$u@&Baf8l;1+LI#5S|YMvP?Ur#xRI zd|D6#Ka7c(Ho&ER>}y`*rJt-AAOjy62Z>qObI-l(eITZRZD!Zi)Qmkq^v*CMV8l&a z?#kTD8#Ll!*BbIkW5F>>=Ql2nh=PngngeIr&_r`EUi#3mbek4$rr|X1Ix=*|P#JD> z0@-5Zmx>q*6Za>9H@I*SI4d*9rx(vaIIN||m7D8Y0jl{u%QEOiS@3;Mu@BdMW-if` zH_2&B=^jNOXt$Zajo(=0Jd1Flk5-W)00cq%zO z@Wt2)-huc0MEMP_nXV()30FPQ?{VlEyk%P>92$Fry(?1(& zX(4hj8F7`J3NF=kLG&e)f!>zG}ES#cI?I67%NiBfgOpUN!UKBr=hL-cy=Zvcy{otmw z+w29gw>KUT`oS*2(pNAb=MnS@V=+TQiv(Dim?X4g$|pv8WU+d7B?%xYNrV$ZmA;@n zMtvv+>UY2E(>r-lpvs~+%c+L2N(BS0(YMeU-Y0IhM+p%08A>_U@&e;;m8ELk5;)0o zu|zB8(4(%%Gi@5CJ%Wug$l(Co1df{LbdmD;Za1M`&g-DxD>99NSK5?3O*1D3lGYeE z9`k_jkv-|!Wy*wUx~s3g+Cf-bC=m}4%EYz6+t5pMoiv!~U2<17ogW349{Dl)2eTkt ze`ze>n)V14{#N09&nW%m`798*M>)B@Zr~uY*zpX%$qIM7)^M|r_}Xi&T^pv9%V-$* z`PWyGG+;|OjW0cuw2A_wF8Ivwmg$ejCA-*5o#$BjQQ0{Z7(arjq1-1RM0gu54s-Bib4|3nP&_D`!R|btiMh@WiR#I@N2;6TA*N6yv$Tj*&>L z38QlO<=Shnt-krqQ|;|yHOM@@F;I!%CNtW`T7M1QhLM>KFYRAJJ}|Uc=7bjlga4w7 zF0^3J6$TcLbf0iL$RL5QW7*LoZW(m(oin~;p2is4YRj$c3XT|_=JZG4cxd4(c<3kQ z{2zSeK`)KFRkF#;;mQI0x7>2Gl`!x#&2#c8CwuKSwBaUU06?SlQ}LzQMrh;VhaZwM zyw4lVkYEOx;RtyhOcjwWjy6s#DGSCB3|^o02&#WZGw&|q*-9ui1VL&(n(t=V%@GC9T z`sS(MtS-3V0wt?|xCqZ6Rw7OjW)S*%8?0xBVt$L~KoWCd%s=CnK^Z%EOh=Z@ckV@@ zX0rbmYh=Hj=0jOm3SmGLZ$0ruXM&<*(+KF-B$x;#O9bPo+71s!B>y!XO~4J=w(kD* z-L4nQm>?S5O3e3Tbf8ck6`|9?C}u_!Sk=s3vL5yk&ATuXXOn`bl?>vAFH(+ZEK!XZ zAX;FAm|yj(S5&)d7A7qrI6mUO0H_`>I{VCfHN1BDK=#s(^3 zMbq!@e+eD>$wEhc8YAkMlWp;GEjtiI7@d^OT&CUd8dadQ$H&L3cfIRf-s_lk&W6uI zCl0&s`K`aS)={YB+y2z2KBX*Q7uapia~!GgF?Qhr_<>O)v`?GU@QAiW9ckrG}bQc&cU z5sZF|Oy~y?IL|b$^gBxEnWsXruD$NsR!l@!A93Un)dxTDK`*lcZy06GBcq@D)syF; zP5Kg#8(V*}8y6Yr>~b!2mvmrdF8GlFX++R(R=oP_-zVTEJTS-_JPVA#R})?s&_L(l zaI3AhR2R=B-npLq#ygopz=x?9r^|M4GRufFd3Met?T6?54Y-)RP9GQ|6#KjqH1|%HkQmvt!vuKKhYrr-eIBKzA5B z9sX+G5GzlXdSCLdeT_i2D{R0vR^fB#h9?fH@FOf zMu@Ov-MU?qMOwR4iXi71?oA@$8brxjV~BwzFTlqAjI8rODZFsy7usFKNISIyjD)w~ zu}2@b`!2EBo`P$Aq+6G|BG4?7xOl@3 z34h+yov>xEP=|#{QR==&FDFLgrMhu9A}FK3k$dtel}Kjj0waZX(_YTwDM*F1x)cFr zBz;4d4)`jEU9qCCJZK+f!dv8O$Q=f|>8!qexqXQqR@bO;Y;Lj3uDev%-*CNyl45!! z@CZBP2r6)2I8Dz{2Hs*ORk$|q8SyM_UOhZz^bI&=T`}H@)ir-^MJwf&yl0oYj$!bV z^;?FOGN6yOb)!NcuqzEPZCFWeA=X+8EP_OuxtrD7c}UjW^z; z(EU8i8b*ZF13frbf|R&v&)ArFP@jz=U8W8c6UH8S3#bEp!%yG`r3Wp6f4o2s$^%Ju zzKzsBtcRzKi>2V6QQA`u252a_m_m5kuy}e$?Zx1PmRX&Y#u@En-kKyXImMX}d!*lk zzqp<_gAZ{3-*M+1&dqX+`T#g+^1nzL{9KB z{A{uaPbxncRM1Y^gpS)?oBV9AL`KjXt893lK48s_4MXUvcb8<7hyEPN$ehNwiCDw> z#L`0nUUk(~wqme~E!e;WjY|yigY!JAhJr*A-LppY+;h(r0j%Ps4fE%3?NJfPw@@t4 zC!^U4S4VLjVn#r-IR(o-(rB=C?0PH(YJ_Hal!;=vMbVg-D8DnwDS#~N@WYM6&qZT= z7Pk~e0GVjAf_Gs%N5Er{bnw)?>-qb=+3)lfbOO#Z zKqan+q70m89|c2!IgBty9^d-bw`{zzKlp+j7kK0cU6>lnr^&T2qx;eHz+C&PUK595eV+C(M;Wnf3R$qGlr=OLQ+i~Kd&HU8P<$9@ELp=<4+?Ui!03}) z1nH$}cVikB;Eur;zZu;#4T#$qk0-bw1?zgk6W1{&@4xSUUuS@Z@?|QMsjO2qtwTa4 z6hG_AiDU@U$SdUzSg-nMx0V$%z_AZ7yn#P1hKKQQ$~yb^SA^)**(TI3pU(TeV1+2d}zOLu6w zv|-RI@fiGqp3Y3FsfR+LpZcwD&)$G0=~EO4BdERi+Pm6I%U&`_llzi} z^BL2!jbmu}8P8cFVA*YOpMCbO-u>=(+biYZ%sxV*TbUPEqG`;vSpX7Oup%67@}~Wa zV0YMIfwGG2VvkA~LEms-+19Wd(*lx!MEE>pR20m2j;KfH^oJs6PW&OcgITi1axXjx zPf97GXfQJH5TUe@hZwSqdYdC!D`wr#Xq9JrwZoWTh7Hm=$;hUT5%!A}UU%jqUvu*?!_%PIRi|x{p)`hrP8rC>J{PcfFo`TJ%)-(6Lt@;6|VNruyLdNeHX^ zfxf>+!nuHkh;w_jQ9vF^xS5u5GL1wOF-Qu_4EHF}tSoVeIZv*^9PJ|slk?OGLvb$Z z7xNE59>heE5Fw2Jv>1}#Dy8vU2#t2VIojtutwuOPL=oi}9o-Aw?s6c+M(38VX|x0} z%^U%=+wi;eJNhU_65xdw0>V}=JiXGbG8HC`-_xu#YwZ0Aj0j2I2;U}MhIQY8+2v-pm(z^GIGA5_yUV*DeM3WuC)0VhMd!n4 ziRFC#p6}g?(VPXeXl8r^CijJYg0H&0rGM!AP~5@usi+6F<(X&0gGfCd;j3(fe2_}i zp0tv(Yfx*OG{^Vw0K_z7D9UgVQ|3G=-0XmaJIl65pd2VqM)D|Z?z1wL(pmk5odHP( zckx_)Z_Zm&RGuFMKi8-O+?q}bQJc<$n=o(-j_4izp>*xV^1~5D&R2|!#2IDg&U7fv zY%lOS9XD^4<*BZ6G;z>{AK;^-1{~3UOh?6i@DlMztIDG>=wN^;ZnQ_3GVmB6zk!j2 zGVl*N$-piRS~P6>6Zh3c<4$*isd7+OOkXJ z7nAfy7o3T(5Y{XU>lS?NMm2w1#2XHs)n_En(C-?V-B0^AuF^;9JUZBq7X=&F^R7WP zbB#ippOf9+|9X=#f>`_C`+T|rZ7>?eLaqgv5Y)eiyRl>1;4n=hD8gNqH0NvX!*b}p zD7|qmznbWKoF8y1`M~aEy;Aw~D+ai-{#wW-d?vRhu-z3~p)iu@S2(vDasD>|>e;vy zGNe;eM_D(8dni!aWcAq-u)h7(^KR;mo@id~U2@L?>XYOIxvEBDJj_vDAy)c7~38F<>I{}M2+t7P6tT56!TWq95o~EVUXFU zeL1KZ)Sh6&QpvIi%Pc}I@8Y!rThd!Uy6Xue_~Dg!>Uq=jPL4#G8<}cwx*ZZU8W4=t zr>FY1LH8#DRfb2dbsc>liVH1aJvrimF-GGSjdqnZ$(Ujhy6vO;OjbMbzV>s&|E@;| z6gpKD4qwgh+@16(qc$5{rn|s;DC$5|t+ZRM>(FFz&FgwHTYam^t(3_!GiMxZb^!Il z@YX4l9$j6hhtefl*HM=}L}6JQx0+2l209+gm3(_?i-`pn=8%lme`LX1h%* z%@#HZZxC26r&vFHANILHWwx%3M47w!J^CtKC&QyRy2LFHu>EMx!^`b0Mu{uMNa#^? zxVl6dMc8Kh2O+a*{dFsbc-po0XkQbz0Wttha$|X@pR#F|>DIS7sC~op^tbz0FWko+ z9Q7cG7Jleoyf3%~`HqXx0@$wh9!Kd?3#rlUUS~P zS&y&lWnpJBjF$x|bKVT21{~?0?ng(1_+mh@BfFIF^n=UO1=BqG_VF~!Yd%V_`3XM3Gb*n!7BO z+VA$#3AOMtmN>}+U>>1HNA)Wp&SxjbeUscgxTq;yMc7Xc+Y}0%yLAW*m}#dV;9*{p z^)xeyr6B56U6dbm+$B6rmZPDqntlaP)EtJ3MJ832cj1m+U=KXkR|pP#YVP7pV!*V6 zd%qrjNalgcjljw)ood5=_7BxhI!D29Rm#VN%cbQhMcFD*xG~zacPGMph=zT0S=# z(yL8F6g%Bp!h0J=?^KK*?oBUWmrODI(TLgR{>gAKtIB+83bo_#2)cmKgF0;Z)r2xx z6KCdnKiHe+n-Q2DP7FYU>1LUdXQt`DTcv<*Ph1a&YmXWn7opGQDgu>2pYdWowU?1F z+k!MWLdFO20kklsQ{e@}IwWuOqvzkP&i*}vmVV5DXZjLjQFQ5kcOQ3zUY&k;1weu6 zuE}o#v(|YDa{2T~xz(0YHX(U5_@aZqUi@6cQGo9}%QEZen0T&RwyY?;G^@&dDxGHJ z=L3ZRl4u|t6Gel#r&9Jz-rJif8l+ts0RgwwOYdiA61wMKS*D4G;Ft^pk&hteAKUX< zIp61mAqdq}o|6?i!s~#LF&$2hq`Eq5U5f%(0r+BsDEPf8x=BwqCh5yY>$(&q^016x zy3Vg4*s#%2_`@w}3A@g6GA`7TeFcHO1qR?1Chb>`wxUH2_aK2VJyOh=TeFC*_MSff$o&Y zy~>&}Diu7L55Uj)0Cw6GJBY=(px0hyj_zE6$Y2$`2Xy{rJo-y0?=YGJc24?L_{=x) zw+t&4X1blTs>~;Je4{mW)T1yI3I7{}T?7%)oJ9UQudiNC@Sqo2h#(e_Zv#LIp6lU` zjB;iYaS0!cMM_35xgg3^Z{Q&g8Y3iAI_6q+N1;9!OE==W3=y@5?==&eXJ;PfnQZ@x zUlvT)4JC$CCeEOb630(hPdh8s!%C%^X(NMa^*l5Mot2D*?I`!z=qG2Y@-zTc6~Y7> zCy|KhPl=SAqrD_lGR;~3h}OuFK-{zGtDDY7A@o;#x>#`_G>z#6p@u?^gfAp7a*`<< zX!gPNqNS`d0swoW#jaoKcRgPCMIo4wARSV?yu=hMYgn=OX7kDT!lC z+LXJTXJrVfV1XYP3?GK4;ENCxY??wY?98UbCp)aM!NAi?JDHFA;b`vs@EEX#-8v8?4?p^_cd9cJmV+%4 zZ`D?#&==R}p4xDanpbb*f#SAEC`$?>v0 z?HuRi+Q04A+iDuU;f5Q$wKDSJ!V7<-}p z_1AlgUG}a(A(A#5TK&mSe&W3D1eSj9duMxlV(*h7qh!YgJ9^Iv^0w!c(Wo%qEee7! zs4LJOxHrG(g`R*nNP7#^SPd&9d^Q<$SZ#gvW5ABlD?~PvZ%ccBtU)Vi@sUef8DVcfNCm_9Xv>X$K}|H$FD) zU}FU~uVDM#@$qqwBDhX!$Nl%)zk0(7Z>Yw{#=4aGOph#@|8 z4c0eHdQ>ZgzUQ8MRv-SzhpRpJ*we~>lt;px%T>eB1ss%jrQGX}*%-cA`UM%mmc!^F z_G>_1V3_Q_$L`g^2OsR*?C2AAvcrhlZMWUTa~sm)Q8r=dvR9CidF1jX(1@Ld&OYmG zH^3WDn4kk$jB?pR)vl*DAQ7GrB)cMA`HQQ% z5T9Ae7!9(;9t3R{z1oBlUu*5PtTaLad7!Uj#UPBXhWsAxYuG@cUh#%6X4u%H|b|7cZ*L|M3M~ zkFUH+xZm&B9_vfA`&33kul9mfwXwzF9=W+)xNRY>!bjmQTtR$;Q$fh@)x9Xb@E+1E zD>Ze|ZSoTR<{rt4a(Mo^9PAp`JW!H&Uf5pLQ!!mvXXXcz)(Wvb^we**lx7Dqc;YvA z2h7Me_yEe0V z$b&<+-L7}#RC_MH2k``h1MZN1gj)l0OiTi0G1GlTYNm9p|* z{^ei(Kht`01|LGupcFlSEM(n!+pV_rpiYmlJ!hDt8tzA`XRAL(On>~rKlZkTbWYA+ zry`#j>$JPENu-b})-wD4(xL2|3&VL2YW;=@fCCs34mK+|;DG(BKmOxCt`5_7u2|FD zmwRo`AX=Z7MKwncO$2b>dyWg=ixw@iE1hX*1d3f|^1Mn4#eZ+XjGsyDyo z&D#3$WmbyKY;8^2GEIc+>caa}=&$Qukvp3=uq`9|L9e^+dUjPVxo=5qbt*c_-T%^y zVE4IT*nWo{s`tPD{ngRO937r2yh!3Nj-W^MdPhk-F9~HuXmo>KkYy+bMtzrGak=Fo z#wUGi*;w8yuNng!yfJT+LV3@7-cv1Du)uW5y-gaL3hnhp2V^b2NST-SVH_jp;0v~u zzCqIi4{B$(7ilVrdOc_<<^|8gcktgKha6meCZ4q{S%``B+idf#=oU8_I%gFmRY-FDkL&Spk% zy^O6Lkunb|MY%SQS|2w~a*K&YZ(N$|NodjO-Y{MkY6czn5g|VV;FxdOL++0^zVS_V zgCLM=K~)rJK2rU;I@(9?W-JszK*e!jOLT$qJ z)`=!Acm|l5mO&7{RQpJCojKIUv@K&@rfIPR^y&L1n`|teIH5XDu(LlmMu`m&T}yfl zvgu7c)9sJR+BSE+2L>!2q8}KrU_5TH!3Nc>ix*e7-g>L!9DJQW-=_Io&8@Tl_A6fT zis~J2e}}x1yIHQ}cB&KUvq!xXPIY8k=TgugG>8Xs!l6f?Ev63FU3Xo_1>seA^pThn z$hZvPhChghTCn4S>ir-1Ky~2D541PIP4888S7q%RdeiL$_{xdIpE1p&`sWv)`i)Vt zhIUf}|7_X%=wpvam#pg1x%o;r*+a(u_Ilw3{^&g^jpn}VC)M~;ax>o{~c^9nGBaS%Sk)2i$bWYbO zJ}QX$5?wF#yHlr#{cKYyu`VkV({q})T-WoI5WyXH-0A(y;~Lgq?9;p9OE$Dccl`0k zSDS6NSsiUZRRL;TmDd!Tv7E_`>N7GH0ny=rVf!R;%BNqYWAZb~nb=Hd2&KqqXUna& zvYYRhniG3ifr{p8|E;9{d)f?q;LBfLeL#X|uf6vQV+&|8y1HOS;Ds`E97XHpi+O)3 ze23DJFyovUNf5Kj`#}y!k!9j7* zB}T~>is^Xso8DXCYTQo0|qelq^!m3fd>{(-Lc0WYgfDZh5I@v8wQ+_-7^wp-slQrKZ0)x zLI*Sj875?OYhPUOrYVnDTTF^6vn}Z+zf`AE*vL{BW;^$-pkh77d`!;o4BBLv<0C#0xs% zvwZ|iz!h?tX#xf)kIHMbNS=kqBm*e}p4wcB@*OfTPkhUXreCHSJH_h1TDRJv^wSF zQ>q6ade9@;y)@VIK1FXHc;L%zmFAK)kV(fh>vHK>m#U1>ajrY}e#I8h0YQ^M3Q!Y1 zx(QlOh!)w|it|Kn()o;hw%KMIxj2tggyb))Yp%K40(X_wUr_C}*WPy9Zo0`Po)^oY zw^RZq%)-Q)mc*mmVj)YOq*p`!U7C4?j{}bL}=Yja*4$#s0kY2hyI|uq}{a@khJqoJ89(cvcLzpD7bOznZ!#Q zk^O$Fe^!~dO7+AuPgD;pQ3!!IOyQ7!VI2vHU3S^II`7BlRVxer9d=mY_z_@X9dh%? zC3u`O9SIH$jy%tAMpaC2v6`g8HvJ%*J3kZ#)En@YWCEkTpa1+)D>;nKNNpOt35_OA zn-2AM{Et4N<)@`gpL$YxDD;~tN7kX|hCqHUNU<9t`nb4|;W^yMyY9McwdMGDDZ6vK zdAD)6NXbU>8{DB~wO9Z0Y8j3XxGfBZTxZuK{0O+Y#=QC6ci&y-L|~eTydYwkZ{1j2`0TV{|JLDzXd+)vNZAm#X zIh51CVY;mRlnf&f``1Of@G zh;!ZZADxcPvH~s7Iibv}UiGT#;~)RHti*-3mYT<4!s^_a?E(g@<(tH8|L_n0Q2pQs zKd>@~$$)cp3) zXSCakESiFY>-n2cguF+VDk~E}q{3?Pyo=6fL!fl<-^6EWg6{=y^yfw!ZCHKiLm#$F zm}v>ho{Gyo`vHvc9lZYHiYuzW`@6r>DEnKc4Gyg6*pNavRJ%-H1rDzB9PUg;x!FFH zIrHk2fwv__+0>&4)I_hA&?o(yt~i*O2=Whq_`}t)uQ}FB4x0zhU>LZJ0Y{q-p@qw@ zxU4!^o+;MGV;BM_BOZkOHCJC_+Cb=Sw%O*UH6NX>@SJ7RNS2?T25^ph{*V6XkE%WQ z+S7?g=8l=cK*}+Uu#1#8ZJrWs6U_UKlfO}YS@I1zXR@+~DCATxd0;xz zKV*jud3}<=3)#m3-C0JKk$$sX?eFl=YmR+Q^oRh`%UjldxX*8JO@CY~ zqyMv?{a@m%lP#OUHS_u$lnozs#UB*8VVxtMp`A9c8b>b2;}mjdr=51L{?mW@Q{{Ph zwFZ#lt4VmjtFUSQ812YhK+(w6=dG?xXKPm*N{DYDcLk#;M{0(YvEXE}J`HARgR@o{ zX+ad3Jb~MB`S2U}BKLDI_v50X~-LK>x4=ecxuyfx_6tPMN<8@#p#k~mX zXEevY+6z~6q$dG&%*~)&u>2q}FL~38HXzVbsN?2;Tv>_`#=t;woxHbJ5HOk;@ku>L z89Cxl3!Z+$rHo~YWsM7pI+^1lNe}L_x~zgLZ~!bQH8Q3-4xljngBslu3`4&V1A+T@ zT}A7X{&sCGWqFwbVqU0zq0Ay4>K+)TUphi4Mx3h&*UW2S3D-igFer1(VIBwD6Mb!iMJ>baW@h!(a*TzAatU2u^WGo=- z)(!V1alq*4?6c37vGR**o%PnK)>?Bd(=oV)&fp0~3eZtqOQSOS2095EQP7-(6*P#! zN&j*Uo@q}F3(rn0f;*^#JQ#iVGmn z5BWkY5i$>cTT?McJIT`p?wZUKx}Y#>Kjil~@3!gf0R>)F^#eR~*kOly3Y7Zb2jm!s zWnIbx-JgREagg>yXy_O=Am6r3WtFAIrd`E7d z8*jYP%4pyH_N{i^W!Gx{{P{LkQ1mbt%n2?bNa}`=$Y92G1Tu!u24aRaCGhPwCDKyL zHAnP32i|Ek<)DlqVD94+MShF=;+x<6W_9j)=T;kUw6R9eACgOV7e`XNJo=Qj(RX-D zR3@LXHZ!t0J)w49arqV1r$7B^C0w|)+E4AlE3&OpIPx4Ra1mI*NNG(%Z+>@0eGX_K z-SH@>ZMWIhbwq-c5Lzf>U?#}z^Pm4*b^iGmcx~wWKk$ApH-nke0;k@jD+@dUmWB@B z31$R8pHn%fefzZPm9KoIqTS!Gc{HuO(Csie1}lbCTTrUeAql5xjuLT*DS#!z2>>+{TU2*y4)tA2X_th2hED@*izW2SaD1lf`*zSg; zQLt+|)#0`2N^0`o{@Z`|R35=`9m_}yvg!%H!Tk&xQ{7d3=|ZQL682$RuRc2tu&2H`o_Chjmy{$pvvJR1u;QQvW|6$5Q-B3cb(oQZ5%V@uqAWQCj-2MOn_AB&e8cvIAJCEaQ!njdq^gtd8+e`(08GU)8DKzp zq0A3C_+SaQwT!XVKi3obWFQ!B*Pn?#HeS$Fg`x+ z6+s-&E{%<-a;kEkc4IT2xR#I==0nYuTjH9Z<|$f!4ZnjX0&I8|nt|>KW+rbrUckuT zuwl*5E*skKq0E!NC<~7TctB}yrM9Ca@uG6DDHU+#)Z}#8C=@hEFT7X^3Qy{KPI|+7 z`6jOhjDg|i_ZTcF&P3i1rnl~t%troWDDnBs%Istqu_?j#%f|ag#E{2mlz9XG_!8B+AY}iq7yi{ zCm){@alnIS!orDBWf^_Tl_|nTgAlaDjr?v}Wv&ZY)IJmgZAK^qBW(ocWFmG*;(*vG z!}aQU6D5D%-6z_)bScZ?VoCyBX5=aNljI-?Gzq#^o+^NAoaa6ca9@w+RS|H-<~1SQ zamm7*brh{C;hvli2JWoSI4-E7y^b4@5fgPqgHn)iYcjY2ne0&EO$F(4)DFLd1HNb9 zhUcIx??Slf?dcX==)x~;vdc~LdKs7$!YeYtWgn&oBH9=INIe#i>JN^@mph9CIOAWQ znXF|Ku7fGcMc^Pn@c=|$1`gb2+Fod*uCtUxTj3w}0$5w~kRBPTANce$$Z(LQ?>2G^ z;t~fF0Gc~76b7Jx%(|EKXr+`)QFw!u2q<#`WLHz41W#1+`{}0Y=uc!=g5cBv^Am>c?ttuGoaLzJaU!E&FUe41hCc|XhhulUF*@L0O100N) zSw2Rh%-e!F@FZl&@`s@4bnXek$Y*qH3RZ}7iFXjX!GyW{Zo6BUAy7F|-~_HZNK0Z% z#Rx+AP8q4h^6n6b!y~*Fau5@gkw+l{T>U}#hETU)kVN^+u^>QEdJwP~sR5f6MKLxg zI_7aHCm7chXeS@)eR{ygTl=(;f&mEul}F-HNbe^}~)k?ilVv<1%m#;1*7n5VRwH19_+K zCU3`NcNp$YbK-WYYzPXlXPOZV5$xwP6N-ihfQ?VCCyylj%p*o}CLZm$7$+1ocVb8k zOhVVCn~+P;57Q|S6aB-+Ki6qV8dGpA$xRu?@=Nle+rzZow)O_%E%Nh{9~}i9hI&$h z`G6PNta0T1A={t{F7j-^WVUHMV+E$VR(>{(zGx%oF#7M%Dx*s-x!AEOJ8KS^U}L78 zI6U1&RR3i^_bL{4O=C2hN6phJ(#jCREQi14&q>f)KQ!SB{2OhK$^b&DK%ST%Edv73EIU6ZfHI;JBT?r4V08zn#cq2MNOUqTDBS7< z8zE#Npv8-Cu0H>{&zZRY^MC$x?NGC;2x3TZ8~tPT1~Fqz1-AQvH|hCa1VEeoY7j_M z*y8qHRW43~-8@Q?_kqz>4|(fyI8q4?0>}(EuPB#tBk)a|)*F>Uw7e(}BZc{5b`kpG z7r*HF|AgJwQE>C~@$prJ4e*g-Hjt z8ZQ&UU4}EXvfvneG`{;6vdp|7qXr&PJ4wq;awb5GfZYyX6(j{bO&k>nN7IJE%^y-b z4lZP>SDWr@6KtK=M=OQ%oV1)wvN7Hs9@ps*Imk#(U+sxWP zt7)Kp_?F>t-+r{;Z;Pa21VKZz13Jo)-1ai6c2Q7IOeb|<%>JzVRTTiSN96Wgh2W1E z2>d=h+S3oHx${F|pfFRSUUi`-_GWd`;QZSt$ghxBf-a)ng} zU;XM={rp=_e2Wbe@Po_0mfzrlfn0;nmxm$;#^p*pn2rDdAOJ~3K~$p5n^Ms0u@#xk z$dy0}mN9v5)j}7dDH*k)${$$rzS z&Bk};!PsEnZEt&9#lGLxXPEPXlK`un>rY}XI;R#`z|d&jWFSrNdO=5+II-}~P86aoKvDg0Zk^jUi1`9GIm_t0P%`}E)7ho*LweqmV? z8MjV7^_$h}l=pvptSr4#Q8`B%NrD)W#~i$IpwS2J(dSC?B;!oiLy^NVbH_|#pe^K+ zU*UzG0Gwku)xd> zqXl`W)-NYz-hquyd`#{^f<4w#L?iPlL}R8fPT}8+AlohMMW9g*#M0@!_H)bh+e#vs zsMDdr1t_}5AAP(!_eba2O^wjKWUnqpj4J3C}b1aMF>5h{|NjgWwyYX&L?GK|Tar)-XAvbM8)B zs{3h%V47|*jNrgGS;2n#)1R2eHq?%A?7#jZ@ld@p6&0BNJ9DP-z0hrgu<9w0=>j$P z+|)6UO4G7Lj~CvfZ*w$nV_Ly&?D$9IIPwzN8Os#Qb5pN*T2I(u&}bB|DS6g`v16zZ zxxbzjKFjVUlbC*Gq&7ysLpS7l?sw+(@AB@s(y7?xrL;umaKZ>)03H-C9hUo)b?GE&lqUmsF zr?0z9oaJADQD~*9)X4#G<4rf&%}%5)Q#~YU!8#{(D$7t%`fU8OLLKUl$CZ@l=a*il z^{$IWbF0`5d-27WDneRGLtYTcm!cmUeBws*F>Ys###Sgyjue=XPkj(;nvCjgH0wLw z6!-@@h-WB+#-L9&0l|fhLL46(iwufIFf`@JC>umQc&R)Z_e6UKegefd)e=-((wAO( zsk7cKP`cqGk33S-a~nA}iX0oxHdv3)!s8WEXBK3I(3~O{BgtM7DRGNg{Ucw=RlmH- zvYV9##G(+4c-?i^SK}Ilt+C1))>Uc5xM%xx?o(lET&s<(UKNhy+%TLKM8(L4eEI+U&;M)zLz>j56--934goO7 zzV=uvbLN$Y4!|5qnbtm+cQ&#N~vR~Wh=YEd@ z15JU}DqrMU$IsLRBl$vXWzr^lAhEPW(EFXcCKemNZWH3|maF})G`20W5bhP@C- zl?-l44)x>ne(b#Rq=DW4fc?Fk7~aX%A71^l0vxlb%mC{^6u&#IrRj+PqHuq$c^{$% z*@}{R6|dK8;0GcJ0^sBTrdZwx4b#pR8kxG2FmHA|> z6-HBxRM|a=U`wVzaHp}h)ENb3R5BXpI~lgj{40X_-RKZtWQQj_31qQi59}{}@k#>9R@VgY!5T`C#3#zHR^oadmk6VyXGF}LXTBzni2^)?b(7H(j^??U{GPTdWfJ6po9S_l zW?64Jf9tKQ-LCctR{kzrAe)h9!uf6wj&iGz}#^<2BiHtKd zfX!zt#ZciU|@r+6j!3b*^OwZHjUXPsG{dDdATwKH;L&AIsvF>9l9 zc8*>=j$(v|Fz|QXe%I=F1!Vq%Hkn~`i%h>yQ(8{iBqMnOq((#>O`4tY!2r5M3K+vZ z=I(Pf2Ro|WXS^~P+hM^D_JA-L!#KI|#v7{hFSx+F6gue)C@=DHb}&A;mRV8ebUGd9 zPJ!SGxq(o!a50z82t6|Zd3l-;jXMJZAmNIm4b_&6uI3r#v8sivi?)D{`+7Ee#8loS zPORzM6}>)R=?WnR_Fm_c&i z>hBf4BMx_G}iM|-Hu;bsiw40$l2~vVJoI}dv-fdfkRwVmM zrzE^6^;|2@a@B3O-Oho&Tpt@BvtmbHv*!fUavfQ~^umg9%!)F1QxWc(qRZW> zC~5=|2?Xv{q$4|PWg>p8qetWhWhA?ncC{gz)0ucQN3rgD>(;weIpyI5l*Y2L<$-44 z#?5)B)>IyP$f1tTC;D{5mu#r5GPke3|NZY*Khaz|jJk=o0F7X=fV5$p8cjjS%cB(& z>%_>Sj~3ms$kufp2nr&q(g>W624MG6VP6fCQs} zHRx#^&=+Bp`cWTd>RIIGq?Ma*zNNZM%ACN;13&z3y7)y{CVI|7TGE3_#S#m3ha4DT*mDXOKX_bDCc!@Q4UUgb^E+AXpihvt1`d z@cA!%-o%S`!_7z%f^ix0y%1l)*zO%uIMKYj7q7U3Ms zY}oO=?`bEAu-$3rojn47MB56(Blp~MkD((5 zg|+95jEKz`hR)-j+3mN!{qsD&;B7V)hzadMmq}}!XO~9iq)|M-`OQ5JfP@|}J~5=} zfBF$cJJrM9Km8@Ggre$A>#>{*c^Wb+Nj{h<{y^KC`H_*ZROa}<}+_i*`pvhA?ROgpI(RocPEU870Mgs$mnWKCC6dJ z9&0tRvSWuh@X_6##9X>_I_}}t$hxh12^-@1irCW^j0OoF^d;B0!9*+ zD#9m%|E4ZT+VxKMyGdgf02V|cSZd~n;sSkL#i6uGdAhxV_Si0x2-V!xiuST`3X!Y? zyWnkrE)hD*{ZLzg??DAWEnc+PUJ~ZWF&a_i&=$0YG0A=R-n+yji4C>w>EHt-%{)I0 zu5<1xbm}EudYghxzj{ll;pRO?D?`Y?PT%rIv7^wp-fC-YIr@49YTfQQBl?{!Y)QD~ zQ9Yyc!kfcmIqD7h7|YEl!+h3*G!o9{<~(c%3_l^)$lHLDWOWF;WxnanZ}NbKfH<-# zvV_&L!qcL(yQ9?2v<>)I7A<#<9>5IW$kv^KC-g}q!l|n9@iEJA)|ay-HSLUSij|k% zk`RZie4KB3RHqHX3_ds#WuEYL1a1$B+GqqLBq9bOVmcoJVS|g0e)MD2p@$vj5p5te z(jMY!-*S9Qr!w^Vz*XBFob?4U+Dg?e0Z&{DS_vj<8w1nDFV-c(pQ!G4zx&-%28Y-`S++s=@=n?Mt@k}OoNb6!8!KTC%J5+UC*d~GC*&ZaPNX z>Y_15IxIZ{*U&ex+k2(P!aq!dtg*%#7CgDxML*cV8*OgM(0;eiogXm*Ye7X-+ z9P(FNGE3GFO}~NSQ|)Fo^ctb1zQ|gr`nHdiE}|eRpgV z?OiM-Q|KR-fUamuRY#)CL#QGYV}xunvB1b4K)GdK#Im-Eo1zoXpo6UfRc}?!{99f#tM75>--Tp~adwr%KoD=P3vx#h|D=rj+i{ zfQXrlbwt$K71n4Ex1qREAVjiq%|y?4w@262#(GU=X{Y;B@1TRgOR3TZ!Z5v)W%yGM zqu4kYy>No|KqoLNWikQ+S4oFV2e8LF@cDjS=Y9^{*~D=$g5W%F%Ao`d0Se0Y*+O^O zVI0zzal~`3Z^$Wq3^cY%Sk?Aiwi7?qSk z`S1pC`Mb)Dx?)bY0|VHaJ7y9CNqZ>FNDdSImh{C4l|FjWsxJz!5Hw}_4&@4+LIZ3U z?JSJyB7Wy6*pcG&r_RF<&<--ja*~tgxsI~uy6G4&3JLMaIUBa7LET^Y9vVW?5}3?8 zX^Ev=cm^0r1ruD0vh?-B&pZ$4GkGKq+)m?0 zgA(BsnQVMF+MjIYb_ib#UKq7UI_LllnfK&VAp>YD9_Dy%h5;Xdgb^rnD566b{%+!E zLJ`83Gj!PF+Tb4dAWAHeYh**fRx)&ExS^Y+fVxy5EK{Q+=#b_pILe8qh`lp{87Vgl zn&NlL%o6N|21cDTQ$h3^4MLz+U=2pdXCO>q%)HqqewV11&Zo6&gJqc@om#_aM=UK- zTg1q@#+~I`ZZpchFnY7(^gM9RJ*z(pg2I7Jcf?AC5K7s;xZhne&7(n7`s%m@)fEPz ziq!66hQauboYMTTk*61y^=hkz0TM1V6nT`10pmn5GD>(Jx}*%eDopRBFmhYwZ|M~=8=>gDe|PJ6M*SAb zkrfxBks?&-JB+$84#Go4yb*K)y^z(=G*kC$DcGzLa@Ks?I4IMySn}DPQPB%fvy}@p zXTw-;=n!L=@>zY92kpgMX7gG_^E~|NpM{s${V%77sQ=MNA90#g%CYQG`4NTR;f%V1 zDSwIf8D`bbo3-vlrZW$Yp}`XA#3{wQ2TC{i>4FoK_)~foh0UPlDaix|J>FA9FA{3e zc8s0bJZ4mxn;^PrLdZeXMQ8SISP%@)VpZbGWNr2;vi=}63})xGgbkDhg}50wEGK%VnfPDS0X6-|7A znWCfxL(Z2Xco@O3;SG2MP79wlTTn%51N8$p*%dJ^5k#!A*le@SjT4@?_d(Y@RZ$9~ z*ol4JANIK`6EP576MW2og``+aBht6&@q*uRJ;Q%bDG>91?GVXw$zFV)L1NBL;R87m zyQQHB!>Ep^>?Ps@>Y+aPZIg{R@hA1w2c(0XYS9pNlNuQL32X#cLKk@-H2#pmF0(#UG#ATx8^e0vfB*eX&_a;eU0Oqbm*S(=Dv84gh+cmKEf1qy zXq;zfN z9AX_NOTKndaL6Ht93q$YmVy%(Ybe5sF{`mR&963DXu{`(7WJ1h09cC%C4U~bmWvu>U>=d{&Ux85*3_YeTcUg1Ae#v}{@ za8B|I+Qw!&>uCywL^{k%qnK(&Pk4;3!JHfIgYn|NyA*JE`e~2YCGKl1vGZ#+zJ=Js9K zTsIH_=jZ^4B<~AGiRV(DaW91E016S#WtUxM;{i~>`{7dTpU~0`=17AO+PyP8Mqx14 zOERZQup7CO&phMI>Z~)*RNZB6YhZCe>i!LduV-KqM(Hg3y6(E`9K3|l(m1S(f&+50;{^P9FUI_VJ0=+xPPu&jb55=fUV?oB8vdLUp5}%xfCgP0jDU z%4?rPVdLiCSe8Be$6u{{{-pMtkpp>HoCoaNe1LXY18#z?Vk8A}=Z5<6bfnk5e9|Pm2f1CdniCKE0s&D z0H1HLMapI0u7CVSF1}dtG#K4G?zq6gz>eRcZU7kZF&bsA#_?J@FGdhpiA3I#{S1MW zOUj~^>4JA}*&^iGaCtDdSxIQ#>-E|ogx$GbqO#oMMn0v)JWjYc!}_Ch_)Q03?d`YU zz7DEGSb3hiSccQZFI!BqREv!`Hr!}KyU3^yw=4qE3N$;v)sf*23q^=>13zhfn<#9t zCt(Ey!FjGhK;QP|-BhKmO9A(%;?f)@e& zdwyQ$!DX~F+Lmo`>s4<|cPyTi?s0x^2P>u8R0g|pl&=u(D{oMCBKzq?cqlpZm*U19;Z_Sj>q?X~)*vmZP-sk>xANu5h>2mP$}f@^TTws6H17M_KT zl@QFk!x?L#mxd~Mnm5g$o4o@;5~9zz|Cv|R9E>f(G9+jK-0b9hHs_8Xe)ys4yWc&# z`kTM~8w=n+`^29qAMq<}VKS1nOIsGE@!EqxlWCHG>P{_i)Pyw!1Oi7gUd%g&8ylA` zN*IFdj98~oaO+m{juF`Zu)3nYh9GF(o!5QNeGy7JfA%W57arrj=QO&wy88IXKVDsU z;f2)+a)bSk|NcKb=Q`B`c#|F?$fYC5rqd@=tv~O_n!Z5!mOt{5k9cnRFaF|_)oZoG z9i!sOj{>vsiV*Yu=O}qJu8-)uetpv}Kl^(k|4?M{d=w)hag;T+%Npi4ywL4kiF$^4 zcJ7|xG2s5!%U%!UR81Eh8flj1zAkih&N)A-{>y*;FIJ9!{(t{@b@*Y2J4XU?4;knI zi;gauDTQ?m24rK8vx(Jfr&bU;njv;=c<1 z0}njVFy}!{gUaI?a(xxGFSo?z+3C31>pE3t)T!Fl#+;Ju)rRSu%l5=TF?fGa8>dsp zpl7CU>I^EidCkg$f21Ak2<)y~3bk|*pYHV>l7c-*h(OQ>=)p2&J{@8-qLMj`yNROB zj8m=|3^7SsNz+vtwIGGySk_d<(k3fTS{YKg*~Dpm5422dQ?oGYLLf)Y%_|UY=eI|a z{vCoP6~|Noqb>}xG|Hy6o;>K>-4d?-asudP2zSG_%bo}c4Gf|+wN`#@EuCSCW3^Qx z$S7&0S9u+rC$9NSj|WdcpS@|mcX{QRa?t`gf_Ply4t|3fq&Ts9nwC$E6J76` z3(gCLAl-xIu!vj+3gOXU#t^cU4TC1iOz^h=03ZNKL_t(D&5Y1A$xRAp2nHCh5NdLG zn^;f=E^kWmzpIoin!e0wie8?UcGd0QNdm!CovX{zC+#|h{cR;_Z%RxlfFtPDBO@JM z24jyx6Q6#50!>Zcf6XFG54kU!{hIesKFZvJ+`=|6$#eWodNg=o(tGD_m@y16y}{DO zq$N5F!EZPGBz;oTfuIQwWOOvV2+ienXu$hkG!OlBo#hB}=}#yf@-48IN2emss4nw8 z;5kK!*Ys&-0hmb|%^m&ZSXTq5_QN=8$myv)J;~kR+P6&Jwn<8w_T`Z%^R`g4keVRq zdciDI*SJ79G6${spE45ER}+efrO>1aWzaDK+$M}}Qz<{;NFtmRu0b&SS~BgB4KOkF zzqbS5q!kao!C*x{g?oP(cXW4=fxp&BVv=qg4Ak_mqO=KGVO}#byv6!cjL7;JfZHxw z&;xDP-Bg>^?8D@l6hhz~UhoJ2Z;XX`>G%F!-xE2e2mR6hm7j~X_C0T$JGtx_XwXm6 zew$Z&Dla|Plqd~W}4m(l#4b?3S86qI-y z$V~JKAMhTYOyf>Sy*;WQ1j}UCrqZs-%39H`PhAqvatll-MItith7e7R!&AlVL0kxT zGW%lo0Gi>NNvc=x9AdBi;&PPI z@JcN+{TCiu=5i)!(A?!2z(7OprB zMsCYxU5PazthKYMy3R^WE6=%9_n z%|7x*Po#}jm1XqK7-xbJFtw4=RNAtl5@#C+leMXDI}j?oFEKd{kh$!+@}%Q(Edoj7M~J-sG&~a+2p;_owdR`rnrlwk-l8QArIfY5 zde~Zuy4l0kJL_nv3%xDrt2M^mncL{J+yMLlQOZrOY?O%fIp_+(?d9(H&J6ah*|#_s zFb>w24_fA?qqhGv!o8u;>DX}!7jld*evY`qc*uGNLt%>{M`!f-bSxCp)7t|A1wk&^ z=zJ``gQxr+Q&lTJdro8)=`Z#aA=&o5j)EL{9r<;=e$mTpER}l0*z&JR*QN7khd`&c z%$p+|KpKgEkjFkbF1G_lpB=_kbOo?A1uIKv6Zc}r1S-nN*6G&J!3m*8{Lhs=vm*3& zk`%3nEX`&yo15cO6-`?jO6P|_X2Cl5Dhl+%E(!acl-MZI64ZHVjRF9IXN=E(YGd9f zn(|H;lnH1m%k?fkK$p%U%scg1&19d<1|0V8wAr zPrcO&k&ybDjANv(RwXv`K5_W9M7lS|1<#@PIfg5KZO_rO)nE9x=bz9n7yI-4@LqBk zuL7AFiBW+j-5T#S;^!QI(s^#}6qdQPN<$RN{zc6c42igtDS*y|xlRZU0yo{AlmvOx zk*;!p4J7Jwgzy_^$yJJF{+d1)P47wTT^aX{gH&wk!m{Cy90sH^rRrG>e50U5!k5;A zeQK#b1j-3=)gHHCMB$$Oku9!UH%pizPnYvMD&BFBO1g(~A-K?1>1dazif7@_7RDxJ zF|6OWM!#h`LhQfZ;m39p!J|sPWPioj6VLqt?YZ!F-l45)R{oSj$z>v=FL^j{NJrBl z&?$tuWVta{B|XRx#)nXUGNUUgrY~*kFcV{LDy00nqC!>qK1yo7{PHW|`s=R`)2Ck~ zf^?0$@;x2-i;{F;Nnr8V`grs zL+?J8A=89+TMIxJe0ec!!%muhfuP=tuel2m%*p1!6y zW3_vhICy?}pQhQ*&Y3eurA5!P;tbQLO%GRJ zJWU)%)<4$vkpODyp9>(?u%{Mxl^Rmyae;T!JDox65w zoG?*}tPHWzpd^wZeI^xqW)b;-5FMk<+_S2tQ3E_jXbiuW~`}T%y=2|~^@Q~F&7-c+egq0Bu#Un}a77l2sE;(vuFIxy<>ry20!KKi6}eDfHn)bXO{!q0y8)3C;9 ziXtY^0^>sY*kuA8_xecdGbxf0^w7gJTb`qM(1L3hs1&b`3N%#Oy&``v{Uv>GSIfK- z5`lndb31nI2v0uwWcc@g|93G~v^U;C3<+fW_lsZrLP`9UpV*i*b+sRO;DJDODXMtI zeX|ia;xl=MpKBu4)EaKM)YGVe8O-CYx8BlR95D?WMuGNy*aSLNk#Gm@*tsJ-@x&8h z@#4i|E)yqC41e+`e_{guG9zAU_%?nZ=epUmG&gNLE%XoTV9|4n!cQLkiR!Y0a}u`p zqU0j3&E@Yb_fFFvJ6|`sE=-*|RaR1T7nY6+c$HN|gtBcsu+q+?@0}Y0D3|4WXeSYT zt4yJlUzD@bEa4f>s?KyTjkhr(~&dv;fmqh1n-=9;IBXD$F0;VM@(W6Nq+u?hNH@8XxENi)-M~kFYW6dXr`Dgu@X=kHreKkqRb<^%Bdb-``Xw3 zsv|qgq%!Bdd-YLqdXVv*9NyAk{9lTXoF@5qsNu4lXV!o3(MO8qP=8l?|kx4Q6a*R7LMb@)ng`O z8jM5MLq?%od&3P2!+rOC%&gn-QpCK?`s0-4p!vz?rDmSakX-BLG ztn|LNEsa7x5g%B->Dk+=@Y%Si@B|EQx%uYs$@@PUE}A|)>tUsSmSfS;E9ApVg1vL$ zd}rzn#iU4FgjI_`htJ{d!ZnSsj(OSPg|0lF2@4l43=ci@P?$Gwp1aviV&^UMs5V5} zZmscRnbQYS$5Q&2y4~--`>uHr_Jkf5L`ol_pBPlC^>otA8tK&4)rAjz_(S2Q8*ft4 znC2?+iFa3?#da0uc}5-)Qg)dk@F}aRhRbEVxjD(mh5HlN6Vb-1Pi=>SI^;UHdb{Sf zx#NyI!k_)wpP3N3L9Sqah?aO>knlOr+@%$wvDV-b;Zr(vMWWh^xj1=>+Uz~U#0e7x zPZTTWgK9{)%J6>R6^SlqtcGhBTpK>~ng0}KUN$qFXKP~2YiXYH{4)`K?lNQAazd}P zV=eq%D$H3=B;PtY*vE_>Bi!1!X`@_&Fd2g47(X6|xSmctz~?^qxp2j-D^%nMJak;b z5@!VVLbjKa{RRt>*vrB2XuAv_{lJ3%7x+6pMEHO@Pi++C9827Tb@tr;?7 zPGVa2#~S%(Kl@n)_<>&q7iPq@rz#wS6_2Y7&&qzi0*i9*VKDvfu{JupPHxba{V~l zx!6894W00Qo-K7EoCzA;wtZXJv3*DOn?Duu*ndD)A$NcH)o`=9*l`uoSMZB#8nY&NMm8+5wp3t0WMM<4pwk^sB_*E<2sd(HEeQGk{UKJbALgwKEe z^Wnk^FU&l9cnP@Q`Fgz8VN#@{QjXB_{uiKKwIA9w08Y%#@vHz)__!% z*?0A)6lF?V>Du4(1jx256ea??NIKz4kZJuUs5l_d{^&!h*tTt3A=s^u7Xn<%XiVs7_aNYDZ>a6i=xwnu&1ZFv z_uA90ww+r-Lq~0=(LRf|XZb05x28^=5-yv0nH2v+7DS5|m2uo~;|)@*H=2i!_#5cL z6@g6o&-yMt0St^ku%_PMl2Y;D{I*aTXo;`{r~J{r!kh^JCp2+BX>2XqxN&26{`u#% zMJNhZEU3elx^Vx2{j#P&7$Vm}j@7G(_*|=K%-+v>Oe-Sy5)U@Io{A}r%tI3tvxGp0Zq$@S~s)pcY_;~j!#J^j&t zdsK|6z*GQl#;h{hWWqTqA&MK3Ep5{+sEj<*9IdHPfnJ(t`e1mr-Q0fP`qsC?i!Z*Y zhEzb`Ju>kCk{oU_=7hbc#KkYTQ#+0|+yD#NHmcF$e;RHNb!+gjT z8@5ei`KP1SA>d1S2(XnaS8A8e?|=V$?bu;W8GJfz?~bQ#QHv!SzLC=ayoLWo#Tq4? ztzJL--~Ze2_@xX7osGIz38CveRglkwBkS;!ZAZra_up?qbzT@WcuN-(dmm zcDEfQQ_LlQuZ)PnE$nlP2HJ&hYFA+%;UsNTT;42ebEPj@v?%=T-~Me_x30J)19wr> z_@Y4Azi)qdcG0up`Nhu*A#exNjx+C!!77N$Qw9>W#5HK8U;gr!!vz;y5C#q!m?1rP z)y5H*AQ&yMC;02pNB=GS+_w3NknA5YLr9%OYvwN#hD6h1$@87P*{4rs`%A1X2>Sa! z_-(#>(0ZR;J+2RJyf|Gsv^|39Iy=C!SIQc>` zUY^-Hqo@tstmaW__l*UUf=eVNVjCxduBiw7i_C;kNT0TyB-^)c*XyiDCd|2xV7f~! zuH~YOFIJEpmU`0 zeAeYjm^Tq{&6(9EHre=P&e%Z+G%#n5tJkbHgj=mG7&B*HYD|7aVGUedQ-~Db{l2^s z8lOnILj(-Si}l6&%!G*(wEjMM@?>pqQ!_PoI5Y5pck9+eTh3T}qvDybC!^uJ;6+d^ zTei$Bi0z8to@p*K-0XNn;x;sdeY8&fJ_jg*3@gDisqGCbmM@n=Hhuau3xFA`HkcQZ zvRq;oEEal2k4g*YDE7yNs;`+NfWf-~1N&P*+rn_yU3X>fb%ec-oyUn$fgl-jMx`cp zg>fyiL^_W@{)D_jANtUTl&k}I;+DU}T%fEE#$50%974LSN+19}q2R)U=FFWVHij^d z0+H_+CGae^qhU2WT?}#;dJ}mS-X;=mkqil3BXs>Fw7KlmJ@Kd>u}j$k9`-~$f>)uv1-+-u*HJ?=<~(a)&NsD zCQYgfH{Nh#7^MKebTkD5?JmqqJB5H?|1#Fxg|>C!i(mXN3UEVv)Ou<}iqacPzH=>> zI|*gJ`OR;J_3PG$8*jYPwnBVb)*n%zBtF449JgznrOB%K*#l#oGeA&dM~_vc_Ja>T zSX_5A_#;>$((iox+u>jS<^MA#Fed!fU;VX`z(CN_=xsj4q|99oVRN2y(NzX~5$G?O zEASiN_Va_2J@+WMOtRAch=A?auWvnJ+FAg2SGXe%!8!C5{J;|cZXtxR zQ20%ZN`pX2tdDH*eC!uvV-No8Z@i)90k%fodh0E6AA-jX*Z-vswAQdvJ6#L{(ak*N z!YN_w17pJ{Kk*59xj3RgXZh+o-~CSb-ama$is4tj@@2C|XO+RF%7fpreS3K7si(q! z|L^~gwyCjY?HY@8CmuvgL`H8c84)S(-ZRJd$}Q%8$%W43i|O8DxZebov$O;zA2MVyMY zADYzLn!c#Rg*g)oQYa|GrUGkijG`jVif-mX3eE{;A;CadlVR`qMAM2#40r90z3f`o zwaiIP))Jc8ht7DpwpC?<3L*pE11%C3_p%EccYkxfpD8?~jO0259!nELEqx^43+>oM zl?wAHq_Muy&>?79=|i-}JU_><#OiW%BbpbeL$x<|Bz0;+S}WYJz|3Ij_> z&?td&oP!oQz)6-Hp+{b&N~PA(TXfx;(~NT@h~(b-a~Y!fJ{%mqNFl*9dxMR zI&0JE)C?wV?e)Z44LwM?w#$43|JBFrU6(LE`-2V`!^zVpGjD>^h+pr|6ECpSjLVgI zyB(v-8j%7se3-nZkvGL)x^6~K9KQW70w8N&@GaBX8a~zW!rXu#=cK^kZK6ODxN9u) zCx+VCZ73B1sLdrX3O#u){t;nHM% z5gbt8?JqC5*_IZW7Wh)>5US;@1u-V$l`7$DTP31$TIv3DzQ!O>hVFm>!brGiA5ft2 zgeirq?T#SshaDB`)~<77MA_fsPKxf~GRw3`+zSbiibBn;-GWinieQ$YwLejf(KCmZ zsZK{q@^{Wh0}S5n29_zg_7^RA`pY$Vu*O>dCtDI3*7~E7A;y!AW<#LEg}G0gO*Ip2 zf12=YGWktt10os2JfTS9<8q&~PMK%KTo#o9wsBC(a+f6oIbi`7G!p4a2&3=uOtWFu zHE$?0=KAj73`ho^g5_>X5L*0^BS%#o>4!i3p-M0^M`->o)Z9gQ(Zv^q`|iCj-0}W9 z1YdVYTk2P{8Z<9Cs5v1Q=e$(`%Ct7%1)2B2e)5!<)*tJWmJKq-#64`)TW&#nxZ*Fi z$X{9c<=S&@nRPqEqll~xo(=le7_PPIgm&%5BA;;-aAYc=PY%Dxh=ven_sBu3n)dv2 z&xc38{YY4|dX4ahB^~e;!vtQ4q4L?!{%6a@agVYtI{yS#j@zQK9G5HbyJn*z?Uk7W zNF&4RJbpXxh{DPxrBGL{T&2B-1hwgi$Z7AYEVK{h5 zTyVSf0ZfZ>&>tA5PtPq(X3L?kb?dzEJZlO|o7&LZwrv&jfH{I2y(~5ZoC8-Tfhe571L27c5-f?%>cYuP zQsVt0$qL3w-@eB!^W}!HZ0RzU8KxQ`rFo$}$Hg<2ZEcJK#_9!#sV$zDQI+2Ov-cxX zTXP`py^eQiT=pFL5o2ERtrdki>+>PJ@%kIu7D`##xzT=p zqg(~~+AB6TSZ0>)H>zWy_Xu z`)#*dtOn8ig{&jVN-0hYUrOqm&m4D_a3Id1j&QNY?hwFv>OW!Kd9#ao!Ss zV@YLxYBkzf;+ivOZs^~ye=z?-VfIm^$+C!o?ZEM$k{~aDsL3BZDx%4kx7CHF>6w*8 z@CR#0zRu!^k8n9|d!OHadr5fVg%`wZfBy4-m-|U>((I3(fpD%l`dTmNBJ#I})z?;| z@2GYQuqjX_oTlW^G-R5%x%h|#C)$+aBWx{0X(B?`Ed-P^zh28Fk!hi{*`Kcu=5sN_ z3d*sA(oVGGySE$XoggF%_)My+Q}7#B1qV38-gnYWKJ&~oN?H4+d4Rw*YPvVJc3!#f zv>k1;mh?T{)72r6$7)wD8BwY9b9xc^*?*@LG>Qk&>5X%{tcE$Mu8CA5v94}e2M49kNYwL%5UI&_C zhKB*g#r6Ma%%MPdTk-nJ^wxI6>`E;+#q4O~@xb^z+LEY7wq}6DtPM$vwPWknZMKi{ zX}O+`96BO*?^|!ZWr;e*n-)97FUnJoosj^_7uUxk3!E6DLMv?$c)+S z*tsJtF~y3gaA1spCg6?4GPnW}>IhINR`F%cDG<)KikTg3-%2K{6(K0R$qw+y%e6Yw zB!B#F$I$>f+K8OD2gX| z%z87K)<`c*{s)$Z{Pu1NFr{2{zgTl3;(XS4sVeD;d+U#~&?3XKev7BrXHs)7F&<6) z5=#Xnv|%qi$-AhaCQpTt>Ja1K@D04F9O@_hBQk%^Wn+p;QBgT+!|`;%raOT!cg$vj zVxkxq2F{e(Mnp!kcb30n*~n%p`99f_u+ZQ4zH61*KnNm!pw7%x;ins)BV$FX4``-_bJ@%OINzVX8H2VV&JSd(B zUdJOU=;fER+6GBoDX}$jOQFni0n3{hUb}bi3AbBfrRDD|mqPOL%P)sJ@4Qph)i@YG z%LKUCJCE=!GL?_7U?U5P!mQz&&^09VSkgC|bhP_2!#z zD9tw3I_u?(k>vx7G-xYX-7TN8P9e;RJ}2EOd&5Cq0y_}sCy$<#MNT=rOD$*n>^ZX) zz(l@Yw7r*Kd0CaW$QXC}bbWD+^@aNvWQhpgaxkSkfdI_os;jOHcU$dpmN+DqO~{e> zfpVzhtfVLh!ZU9fpd=KDv;zbnmXAFa2acz=bVf;#5mEYEw{B6I*V(gYE8jGV3I% zYzogLOBzw`@xV%k*7DYRD|Sdf8YDAD-^tf2K(Fc7w=IaXwClCQd=D^%;N-N)or&N!#k{8CF?3622Ay} zS6`KTX|}m<$B!GYidA#1+~j{e_8+Q(wf&auo;V@y7q;00*+34Z+eDaWGs^j51bqhx zl`f81%++{Hm%H$Wg^I34xFM)jghf%|`9v!n58vn=px-dT-p2T_0vsXEC>H@1#Cf)@ z?&h0rwsfy-Me82s&!4Zt6mM7#_TT>Yx7vzFA(e(!L-O}@ag^>f-G_!onju46hj=0i zvEl6KQKQ53Y13_A`ADs=%P=uMh6hPC7Yf|XhvIJbwscpQ(sk~;eLQ4V`7_TxqdMmp zTGU{Ger~z>mhj5UuV~p|oyDZE-41uW(sXdC z;}Kvi1hKIf_JAdUz+Fvp3*3SP!?E>*l<oXDIppGa*s%b&LRn@qs^N1mqwi9I+SA z8si~&kJnM#B13`;w*A0tbNZpoo#8Xx&0`2eZd+p_hWVr{s7-*iHiO4lP1;KYm$~r z2ih{#<(FR`uDId~@$=Vh@3{hKbISuX6Zv;T{?W*T(@zBmbhu@%NzAP3n3I=tY)4zM zaz)skYE6&id!B_iFKG)UVX)aEN-_w=c8m*!EmMNSsNY^pSbI};5*g; zLXOB<7zsfvKl;&+H76oE0Bvu*Oi)fWYn>8?V@7*`OMEVu<+p-$gceS&0R%eFhDjbd zV(WUZzaCz+>TX+9YuW0WTOu5k6JCoJEt0bG_S;L9Oor_IP{*DknL%Us0+9CQnYPb4lb zwceWrXElZ89Qi4pb@v?P+dX|{SX@ifErG!ug1fuBYl1@{_}~P0ch?ZyU4kXJ4(`F- z-GaNj-QnbW@AU84Pw(E>Jv$m85P-a@@SHBFd#>3`Da8y9L`;i`!NDf~Cr4P|a&@NmaUm237{VC?{SGjWI zmRO>YX%}W>$a1KQQsCz*LcZ2mQ9J0qdN)#OmprLtwegJz#8@WE0)dw>zkArxxbP)j zm@Bp=zf&hN%YsOZgJ^riz#9c}Z)Da9Ptl>fN*JQk7m8+Tsu6`A2?$IvLAO&u)ycr+EE#oi zJl@|gL3qYwfzO$HdaQa80Wa0IYv}3*^PiB{uhP#%fKXcfEo&efvW2-yAj=Lt3>JA6 z-R&2%$gt<*86+CJcE}C#JMR@6*Yp5nX;p)|?{6 zk&bHo;Dx`k{Xt=h?8Ft&(24-PWUlevoj)Bp00n0^ei)AfkSAse?VDP7R~_TW=zZTq z!mR1ejJC1^RphT)7C>INihp+z#9P-RK zv&DNngd?B2o|kB|Y?lck?5O&9UpX{d@y>$)#*}`h!t)Qy2p-b+l4MCol^u%CiN$Hp zX07^g{j|Ikev#!rvTJt=vAv=<#+A{-QVpAb?ifXAFxn*guDm$yjV3je5@zi^LBw?O z8n2S@8?~)I#K1cVkR)vfGbn_K_9I?}6KLg71%ID9cKGZyT-c-qC`Rkji&lbjG@I0v z0Sr6vO1P4pb_-hRV0_Y87!Hx8``gc8c|ybssg_G8r;709LR6W23fttnTPkb?8{9$? ztCGlIn{O%_j|oDa3?#e_G(%@cP_ETiMaPJ&-6iAF#UxOhZKDbPx2OCnxWp=9`WOKc zxyPgDVIfHX(2{PTPfj_~2QZR$6Obf^&C(=?Shb&fQPl4W4<~8J(8@t+?3HerngJ2! zx0&slm$s>j!e?9#e`_iA=we*R>x{DSIrLm?Y*~t}tHVzqzET6o=H_z7%@et#veTcxP2_N=&MH?z$60|?} z2MVPb46bXWVtx}KOojR!Y2Tp1IO*{x-p3kbe&41Zmf?aA7qsrOU(OY`l5ukU_G91= zTKKLovpd}FU&w5ww3_M`#x}Zn33nluzkK&FY__EkY7sEP2(}=J?Re52Sv07jupnp*B?lZmFE3F zyXtOwWey;<{k7{1zD~DJ+rDD)y>Ob%go)PB@%W@^E+&+%$Ge7mfpk>D?NCuWEeX6~ zx#TP&>KbN_74o`+!?{WwZDzZM6xtYEYBz3iy&xUQ<4ZJ8b{lA?)et0R^}17O-?;U{ z)^z2yUTT%uyCAk%s#A8S-&tOQ5DAOHt*|j7^>Rv5&{ql4;AOfXeC*e|H^#;tjz+yy zjHRSLjbVYE7wm`@H8?(+uf)+O`;9s54oLq=SnC~el>JJNo{E3-W-+XG=BQLM>a=Qo zd6ikLkcUR&?{<>F8N6UD|9S+TadzL*@g#8ayLD#{SXaqT?v~h5NR(iz?f8W?2yUo2 z$3t8B?497n(W+LMf1ds}_K&}flmnA$gPDA5UAg5WGfX_Z?HW8YxciBwz8+OPV8aj+ z4I}M_)+h*KSKAdi*JDeVdWk?T!^RxWRi)Wz6Qe;iqY-YgrOjlRME*CwL8XroYgw@q z@|D8ti=3$r1~#K6n(0U?Stw?qh2EkilemzDY+pt)Mfx9t%J%1y7NXwp&JOY*%R_I( z=%QT7l{j((SONOi$I7=M(7H|<{At;z7CqzN9|W!Fk*s$3?V*P~5>5sl4wU?`UvKo^ z)cA(CT$Mb!ko*=ZLIPzJoLb{BA{Y-O-8kgb7u|yKy-`fq>Hki!=oJwyyP7{yeUeKI z?tMKkARFko4`HECq7SSQHB(51^9uzoo$HvV3cp=ybRfM~_;fGZwK1iK_S3igBw}MA z8h7}#x^{&xf7%4+5K&3E;x|!&tgT17F38$=_2L!^E&|Y8jy1NhUJxEej5|%|NTx<= zkkg-PPv(Jc?KOu5^ z)Zbm{`@jJG?fQ8-8v)m_e5MU@Me9QkzHo(HP8@3r;-c;WEGkhV>zmXv*%t$hKE|N~ z7pwU)p`!(oh9T+V5&9TFa>s`qi{Cb9e|y=S7bec9{@{GNXHC;gX~(F}x!H`;@t+;n ziNO=1UNLQgC-uIKe9{(nIaSz7G1#5`sN?_Ji0q40=iGD6jqK1x4OL}_2VrK@H;neU z_QISJB1mf4sMAhBnPtgE9x3KXkw4qhX4`c3YwAK2F6rkvSpY|eQ}hafdv_yhX(nT2 znF57sKI~Cw5_HJER zFH^Zf>efJa(-lo7i>dJV&#mfvF<(?~m7Wk#%SahlOFka!vG7LqS!etCk^US1^Jzne z6D|P~S6?PkqNa$rFN=@_~6Pe=TG0eB% zVz}YhevD08|5>ELuB_AVL#l!F^NXd%Gw&l62y;0KPJQYNmT!^)H>4D9Eq4E_+9-6a z*nkPPcT=9RNr&-=Z+@>he(2mbp$1+ucV3pgGAm>RM|Jn@kpfN ziNKht z;vuSs4v=>*+U!WS$4);nX z1^PT2uJK@o`~;PXDM(*1*DZ0tI?hM;L2*(i^u9g%`1BAQt0@?$+KFTU`652k_h3Jz zMVM=LE(OA@;AC*`UE%Pc>W~$lcGbQug`Goh^hP6a zT>VyuY}r#!z(*kr-w%~F(VSsvYM!obYPS{w&YoP?t%5Wtksa9J?UYc_@rzE!Ndl#3$u!3hE_oMvoGR zrj-tF*>qR4=ay7|MTfm?%o2g+T{+r;WI)XhM57AK=vlkp7I3=M=*zLlZ;W1hyw^Am z`xwfts_qg0$9+&myhpj1Lo^o?;fgym_3{~nOtR3F5v|SzSl2-$Ah%TzFG4L})Y}X7 zKGZE2>jamOeCKc#G=`5Eu{ z<-q%jEcH|xjaLBRT?x|FAlIRI33!^E`s~itj3h~*@X>w;@UZ9we2wTc-_^O7ekjHo z=e}L3T?JZo%%g^s)lU{*a3ez25Jyf+LdpftF`gIxu)=~&Qg@+jWMUpj38pHL;{b{q z|Kxienbl(sY*X(_@6#oLlu4zDG)D&v6nsviz!)f?5F-`KWe0qdNzvTVIT>Q*BbGM+ zvRZW6={EhomJ1a91XtIR(PpGHg_;Em+2>As3;`9fc$Mfe-gtOsH@1e1rOYVB0>tb21XYG0R4u9(_9t+e}ify)Rp0Q_f( zc!fh7iNC*ge_;?A;Q~A0A8lJN`dGK(@j`}-l~XlTik2OtT7D?Wr=0rMjI>-|*DLH9 zV!)yh!YK(}NV;Fs#5`uJX&q$Cs;IXxO)zR*x`M;5X;TWfBoq2K`{>6hdi)%bxWe6t zzv~omzLvs6>S9B(bw+jaRC1bTvjRa&@8yKg7c}6qy|!PG4kf^BH5Ca6yX9sD6S0)m zHc4X|a}+UQuUl)nvC-AIDU%PW{Ce1s7Nf0MB<8SyO*v3SmNYN4G@UuqKOXigFoA# z|0`7Y?7R+%y1DpnLkRAJgITu<@k`zDgm)k z6Xf#+$~UoT%tOD!*Jq*D3_R_`kUK?}o5TBdGYmW#V+AdALAwbw^(RuTnF9U_#$S%c zk^nO85+Uo)IWORGqbsO;KsmoV;02a)MrkQJj&?%r=fWugkE>4O+t<4=@K{YHaiO`V zrajjR=W-wvCbc}=`%oh2_VR>!`{xCR zPjfYWZpZsRvmrM32A93a$YxF4$<8*IGC3~F0neU~l4YY5r0{JOBs!C{5|08m>c=Mrs|+Qem|c<^Z%DHlWO#T#p`R z#5T`6jB7~^OG(PnjEFOO>frvM_`f1Qm@p*!WMeUJfS$l1LqA$PTQYsjRkvFsLX-$&cN1&KN#UQ zf3XP#-KF=}JN&Ldl}RVo{Ar{UYGnQxCv~pJ3v614w1eKnoaXk8U|!w&x*KqftcLQj z#%TKxa0#OCef7`#k%sZtRW`*H3HlKBy@K=hXG!o^DSOr&-d8E4$3Lt0z4U_tAwKM4FZIOC>v?)XE3uRhG09+yRnLH(PM&aTmLtVrzuyinuI1b`Y zK2KgZ*skI$5{gWE!;zXPbe@WMkRGqQZ!ul82%6kf!L939rEh3@YQxV>>x&KcK>pk5 z4t#6BYxhb5*TSBzMx-+F&PGjWRBBRq zt739^nFGrG`G9Ao89F$&EjJ*0a4B~fGH6Yax|9w_v3kUT#{_7(f}9%TI}Y4Bt&V9c z?HZJos4#-lTr$q5nft?Iw^r7vQbQ9>Bmin80CZ)D`KNxQ6@y&Yxtt0{3xj2Ga6 zOEk~(Z$}*wVx!I8>h~jN!ui`AI{h5i^oG=p&k;x0T-Coq6H!DJFAb{R#`<6x{XOfp$pbR!TqFd)qz|GKH zuH*;;g1}rxQcP9B_r7YghFMxLNKWW;lN0Ti+3Hkzx&FCFl*z3=ozXf$BNFtm+J2fsPK&~>fx*h&V zU_G0eo(5$lcp-~f6K>S8LDUFP{2_DIahMS7vMM_oWEZhX_BaUW>hxWdhqya6?q1h9 zqxc*-!B6zTVUj+4NJ1>vOg@B~YAykdCB*houNN(xGiW%&#UXH0QIilp2@YQGs#67L zfKLTo@-l5RSA@|id6<+^>!wK6_>gnwR{PLs+fjc{@ODuaNs)70WD?zsj0Cq$N3+Fh}V{eU1CY*5x< zI!h1dPx8r)O)hQ{i^h7y4>;Y$YMpQ6jQmNR1wsHlQ#c8rr0ZHO+z1937mvLV&_80!HHuKM6yGjWgZgTpPJI*2Ou@;Ae zS!=V^JI60}YuzJ@%W@jdY;cK~AP2Z`L-Hj$GlW`?lUa?PY4u_6v-Y+S5usGAmp;RvJfb{1-&*dmtlXnohxQ?Lk-C4kz(Yn!_?use1;L~RX40T& z1Yeyxv>J=t?~yF1gNnCR!YZl;no4QQeq7Jof1R$Jg$bY>DYf|wG!z`e&7?z1l&FdD zxY}Lh_e5R3tq~t&vWNPMzx@>7kQ|&R5fZ|5dfJt8!Gy+0#)uiwyII6n;? z!CL2BSKllNjjmCI&zSkWD?ti>wcAs6c;=sWZ-}=lZ;ndH%BtfzSZG*Rp2nivtQr|| z!b$l{v(`0AFTXz$#l^+NG%criUkmw`kIN!s}dtC$P>M?(;pKm18ylm26oR3ciR;65H zhkP-=rO!1N_Oj+#kNBGxoTlIn{j{mnx6MX zZzxtHppU#WKUL{l2k`7^3E%Rpxl5$2%#~>o zVKaG-S*D^^tHw?Dq_P>W$c972D}G5E4tGduT(W`(fk%5Ie>l(i<+P5H{)1#NAf%9y z@d8{07b0NWK_Pg)0rltt?yr?S8RF*tR8LUen>(`kg_P3mt#JU^Px zx~tf#ezpLb*co1*bglcr+)OK<#{bD8^}Cjb*WhwV04Yz~B<0!AdPM>2!7na2N<%#> zjDAd`&5LHJ@6P2`0?de$Fc};laQvDiPtx)9qk*rl>+!!#grL# z0NUJy`rGSEIqr}sPPeI6!e6X;J~=I=MQ+Y;i?Ph6pY;yL{UHpMttw9=^W{K-xk~*? zfFhh*MCk-JF+0GE-x3khqR+~zJ%e-UnV;J+?H8~zd2TiM0jU(kJp$^pu46A*W}>yN zAzyvciq+{Nj%8GuYL)3!#F^y;G-sSs%Nfa6Bb?+h)+WD}?6|mt$9#8VY3Strlw#{; zAG#{jsxA9=sNP%o#icw3-m&abbFk_ncRC%$V-`i&#J_aux6MOm6~Y*X3NvuA=&C5jY8S5L50d`2iJHEm73$^=Nk==7fppPmsZ_)n6EOgDUdWi zl}2#)it?DdyOTdt(IEv9u6(@i==P&d%!e62?|8jkE7i0*6q5*h^MV-w^u@g|5P$T5 zxxbj92}-@YgTD`TrUrXpQ7DGI+kg+Ov!3`}5nK>oe>tO_?>6QAICXS`ch%6n44G#^ z$|zTVKy!LpwM7R7!Nj)>Im!yS(Q^XPb_$9a`RY(tqwnS7w+hi@*Gq{Y+s9TF1SB7q zlE)~d1RMCbsIg5RuMZ4&N7AV4?zAF@5HEd|@od)HePnCpMOVPYb4ACIs{?zsviD#J zo>Z?a@af(va-x)|lZ(5Za>UBId-Wv>%i5?eFA|G06Q0*VkbLzcM9tTgCXNsPsD@h#D2xfz1&o$ZeaXr7ZBZLkr3q9l1)Xts{doD?PGTJ^kW#m`g8@ zHwnGb8>cpMIu7tw&kGkJo;#UAbG*52)9MUjCnnb)Ewa{|n6s6pzxbemTU;M^>$<|v z>jvvlCWjmLQVe9|l9%#S3SF<+nQ|!RXv5fk5%Y=J7ri)LpB$MeTt#**-x~1Mbheq9 z5GiTfm?DT9P;Jjod8K1HVg%UEJ0ER&EU)HDL+U~(N}Y&8bXfrhbK@k!P{Q()o3R)& zT&|_{vD2qE{IjEpL@Zn6BLa$HQAv=7H5gH!P>(e>lcl}3!zXIeUL3&4hra|B(qy9G z5hm@kYOv^?tx)&(uQb-9UbSpN#_SPfjsPxf-XjNa+KUVExo*Yv%+_5aIRJ=uqq|!@ zOFLkQp$YR|TUH{o;wSh%Z7agP7{(UU*?|&CMojt*L^W&Xt!EiPY_tzu2mMy0vu?k ze&pzv-CV(AQU{Ysgof|R`zc8!iRWgJ#XXsqIQv^@GMDW{bL0&^MW``!uRo8j2d}^G zHnfA1KYU-0ArY~~?#{D6{?+vOm_AW|SzIUD~e|2aAyEv1JPm{QDSW)OdEfq)4p!GPR&kpVV) z?xvY_gZrQKL*EPgy6j)Zk1B1<-Ty?aRZ5$nAOxzSFAO!CpV$*&Er2yVE(!@Bc@0^3 z^u|mc_D8q%w!4t0v$t=*N;4Sw6{K#&NVRrnd5V!g1M;LGO`mYdYf{({aHU@Dhuw3_ z!!ls>L)WU;&}+aP5?>Ve+tpjV!9kI1O#XxxsK<2F^$KCZkV<-{yf z0RL)_jIkwKsZM*;HJ?~6KB>PIkwS9)$!w{5SeAerE))4?UWa#dSn^ZfP83Ia3pik4 z`24Vy#6XVq?KjM^1#jrLG@f7?wVZ$|8Ro86)nK!ayGYIZQ^P^Iw3!ce-Sk{9*To`9 zEt!sy)>(K0wq>>(udP!gZ62C?pG>;)ZPDjwVG*K-e=cFAQuqm!$5l4_(#?8TPVE5# zDo{Rv&pY#Uwl?R4rb9J?wHv3I@dgYm$}Wdw1O{652kGtTXa!z;WK!K8=`43pA}V~! z1wffGoGd=+k{;Aa=*uG)Ms!1$fnuDEx@;H`|uq}sDEg}X!o$#l0~=chl7DF6Y<9L|B`efj|B0`I0~ zUSb!=Gp7*jTqlaJO_GWV=fe1LC9<_Z@xO>H>3dWb9c;1J;Ot8-X|^4m^mO#>M@`f@ zliNPk*X9VC`dP7;t<0p5`^#1DM-)R_y&=i4GU~hVD1DyZcAXA^hkRdLNCDfXmDPje zEv*^s*R3~HSam zA)+-SR?dINT^5e{Xl|_Jf?U64nRU5`v=5x$UF|J(IQzYWm_Sh`F)-TIPCs!XEUk2C zp;Dk%pHk$WXTNLIb(`(C;dN#}%%4{0Vsu0-mm|J)%B*zudjHpnC~4E8m01PQu%P$m z=#Fs{T5SfceN^bD$`_X^L7k(d3c74JRMDWP>F@te z0}ud%CT)8QLn=cf{Sc8P9}Dc-u`y8Aa|2EZdmjH%GhHHaJzKIlAoBv^^|kZmE($x6 zPbw&Qk1x>)(Zf5S8jV+`c&U0Fyd3=ZBJVFF@&1L;sJZ+?ABVi$&QQTr7s_H-4P#7J z8Ss1HPT0_`lTiQM>I66of{zxQtTgnG3(eT9HQB`#C> z0gfv9UxIk*$_GErpO+D%Q7o3C=UT}BlOY?VfNyCHZ2m1qSB-PO0|YIm3eH>BUziE` ztZ(AvqKSoCN_QWM6f#shGL8TILNCeXHlHBfu{$&TqNCbiI4o&6kQoA$gvF z?NQ)aEx;(IQOy3ulv_AS4Mz!H&ZGcYg<_OrSx;vv2?!p36Y1&^ubV?WYA}HcIPpEb zIo5K@__={%^hE!TSSWEWDSf2CrEMn}*xfJkdckV=7x1(=l)hW$xGjR+q&Ed4SPk@D z_jGN}7mLk)mz-GA395HzC?yjFI;aEKfUp!`8nxDDv|jf~d^ks%jgmiA++A!ly9&ef zX7M}F>j)oRo_C@8PE=(5wyG0in*T%o(8!qH|i&Sem%AWGnW4PApQIZ&XGd6kFdewb{Sc#hRwzAh92#wh7;WJ(u zD@mQc({8F)PAb18``@YV)4~;ST}20a(|Fj*BLwwEeo~P6Iz|Mh+z3p2J_6$$WViNp z-4ifwKn3@h8zsq(2P0DJp$R{4qJ}j&?OD7%Y*K_#?I-ECjpUgvDt&W3TCeOl0g4os zej#6B*x+fp&})xk9|b4y{;3sIu+wZs3{40@=_$5w3g*0G)NAE!y&PiL1UI+4Ml)IX zj@}Y2_k7=?k#D@KJuxrtzS!#Tkz?uj2oB9M8Lq9~rg;^3dNlAojVNQkb1>Mpyxg)n zZc8V9Nm@wOU(ZQ+N;ReV-%-K89~Hc4$#*%l-P;DIz36k6x67^bQvDZtLNJL*W*ygs zY=22oDdhlsu+>=g#u79_g|WV;++iNrYy78_00G+mq8PjNtivXKxT{Ccf6N#ybx!(6 zmR@_3nU>7w}Ms_&1+`&U6N zh8=2EH31!gvDW8&5tHap`inRFq4`yO~FewPCjfR|Ho3l#$=#j;sSp-9CEXW>%hcR-&I58~(fUnV4Yh zAwqMmwm#a+UP!G<5Lf!1^kC2^Pt0w%-Zg zDpY2aqW-dw{Qp{wa%35|Q@73IHV0>$p?kHxrsMf$ULWy&1SpvMK^|!@MnnXO;B@kk zGM()^6PfQqNqL*w()~)E;am_`q zyOa7q>@30kIqrgjH#5_lqYY~_OZ?)^0^bd5$}N@6Q)>GJ%u^4l|7}PO{yh-os10QO zC7;evZh3mH%1-Q}Xuo`c+0RrxGFG*HLbW;3C1H4zKD$|nqaW`dW9ysfm0>kCGa_Fkf^q5{v-tSy**`L~+^txO^G?>KrqqzR*suR-KxshcQkZy?yfRXtI zcQ)Fkyt8iPE;_{bdVjLYbGGFC?+=#XMJLlR^d2c%zo&FAt8Q?EKRR>s{$G1==5lMm zj>{<|_ZK#0gI9`p)Xd_$MP-Hn8y2?!8Os>v&mZJIHUke$%a>hio&&gEBeiybBM2Ry zYqOhkKs)4jHZ1}kYq-j`N6Q66kJTORJKl!BX>ywoFiErH1avZx(8a7?T?47-6c6~ZO*@C z^W!B$GmjeAu@=YjOx%?eG3Ph71Ued*S6LL^X#P7@aHGY0{+x%zRLw&QNxihAXq9Pr z=~i!{&C1Qai+o}5l-sW>kk$6Nk=1#B!hVn{CAhSrRTj(;(sAjy&~B5lG2Ij2w;h9f zU3BN@ce8a`g3)L3<^Kc{8vOm25o*+?n8(g3q@qKy7}SGJ&KMCf$8yjPsb@o`ixnB5 zRu-y_yUQ3%2b=YtpN(2<3+LweYIbgsFcydS?BGtPG?F?Qkl$1KVE9Nu8Vk9>4|$li zoo41#Kdlhoky$ejW)13z*crB2Z3zSA-EeF0FaE8nn=jYLaZTIt-RSJ9GVE!2H$T+J z1ao3iZ1#w4f)MFbIhSrlwg2{6j||?YmDlTV^jb(s_u|QUHv`<}2PhcXUmaEM)u6No zZTBz4x8Mpq6bTqq_!q`>qRpJAMJDI;TAV!wB0&oHYuO2zy?=^<{yp9~RP}pRpVD1u zEz@VG&Fc=O)@&Tbc%*PFo$rGKpuqw8XuWYoO|rK=VJ*pX-vN0oKpLnZ5HD(npE;%W zZ%ZCv6qS9R_W_{#u{YQyhImy?x)7Y-HGICmp#H^TPnN?J+Jcn@)|cozyAOgu(o`dk${In<^KrgCQR`cq3GSTw!NR0QC-|tuFV;mE%nxti%jNmu=L_lik-}lCkmg&`N zTj;dh>|>)434aT4AozAdBI4R=a4_sSjxlYJG+bZFov*TSQuy{iC5s;>$|H9f$7{C5 zT9T%Z4gzOv;QU_q{Lp-3KR9gSB$K$FlS^f6j@2I2cbzRfEpN&$u90hglZ#AAz=|Cu>)j9qy6 zA<z-ACv>tBSKLO#onVW@|akPlk9hxz1eep3=ni#ivOWDb80|*Mq3($T+08{ z3mDRJ!_}?mFD-tKe@ysKaQ;IR`R~H>nMN2{;D4CN^W9?KjF^BYPygpk1&T(AgD(?) k);;I(|J;?sfX+A6Rkbr?W9uR_2=GtllcHpWxIy6m1OGV`asU7T literal 0 HcmV?d00001 diff --git a/content/notes/assembly.md b/content/notes/assembly.md new file mode 100644 index 0000000..9d7bcc7 --- /dev/null +++ b/content/notes/assembly.md @@ -0,0 +1,46 @@ +--- +tags: + - computer-science + - notes +author: TrudeEH +draft: true +showToc: true +title: Assembly +--- + +#todo +## Assembler/Compiler + +- `gcc` GNU C Compiler (The package includes `as` (assembler) and `ld` (linker)) + +```Shell +as -o # Assemble +gcc -o -nostdlib -static # Link using gcc +ld # Link using ld +``` + +## Hello World + +```Assembly +.global _start +.intel_syntax noprefix +_start: + // sys_write (Print to stdout) + mov rax, 1 + mov rdi, 1 + lea rsi, [hello_world] + // Buffer length + mov rdx, 14 + syscall + // sys_exit (safely end the program with a re turn code) + mov rax, 60 + // Exit with code 0 + mov rdi, 0 + syscall + +hello_world: + // ASCII, zero delimited + .asciz "Hello, World!\n" +``` + +To know which system calls we can execute and which values needed for the registers, refer to [this table](https://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/). diff --git a/content/notes/binary-operations/addition.png b/content/notes/binary-operations/addition.png new file mode 100644 index 0000000000000000000000000000000000000000..6ba2ad017db533e9f3a53a94d6a90700e976c98d GIT binary patch literal 8391 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⁣A4YNM)MZ1n3h)O=O!7TSF#SS4CtKb{Uz*4%YJz ze_F$xWIn@TwU${ zlqp0Gz^q!)UuzN$s~k}%X6RI*FrbSajHGP@iS<6O%KbFu9a^}oP6Uio=7{h9P9WLB z3+X@m;PI+8p(pD?KSyCnGJ;RZQ^0v8od|vj$Vt~U?sji#1cS84UjBqlz9b8#{r2O)4|GsapJ)lM~ z0s}(HyQ!;7fH{L|I>Ym++05D5S!WrN2Xb|V*~s$bmW>5J+0jevVB}T4hxcw~fJzI{ z1@1sD^pBuTm+HHm9b{_k^LiJhOHFV0M!irBJl`SXt`cEr%cBq5H5X-T%&5J?4F zoBe{#ht;UVuy7C%*$Bhc!NFVP%xG&enD_ei>yR0OH7vQ2wGsH6G0@gKpe~aNdP$bk z>A#cyc z-XW(=D=VHK>nihSxzoB0Ei94&Qw1jn28ltlBbGi8Tv4$k#UDJ8ygdxLoT|V7x-O9u zj{=Pi4wUSe}5+unx|WEGs7_ ztoBz_QiIZ|RGAHIY@Q*nI)=@1J|9fV6Qzd4PaR?<0d zV}IxITe;rH&N8~#;pGMUD5jP5fafTu=SHl1*R}pnc#l|L33d{pqbaca&uHI?FX)Cn z=9O;M-40b33H#Q02;0h#-E&kcZ;7)Jk996M&Lst8R@jBi@4XC z4COAJ^13*GjZpK(DDrKYpS751!b8Zk#Eidi^nZ6;D|LJpdgCnXvY8lNBIdNdmh~MI z;cJ`w=7h_q4dui>-qFms#|7(`ooH&JoQdTZ$FGSp$QuT9`9C?Ndvy_<;$12sn#&V+qaL}&nM(V zK?3^+9NI~K(#YsT5LOHZ$;ig$K2YfX=bElCYLVnvC^tjm-F`1YyFx>+0C(}xLWl_4 zrA`b7Wp`n{eVMdGT=;e;TUY-wU83fTUfJ9Jtap3nV)4WTK3X(ys!8_B{@%SF$I*7n z(eMZ}2+Kj<43L_uMf)!+M8N#|`TLVLyYhUo&K^BF?9hkH)6?SfPa2u&7yI8)6R+S+ z>0dUSwXaom+%4-_F};3Qr(NQqxjmi?pUD~mwKH=Z_#AO5R#-djjG|-RYTq~(a_sTB zq|3LEXWhq2IT9jWh_BsUm^2M<;@TUe^os0RbBy_1m>!RZH@q?PVzt{duvS-hQ`Ub49GW|MI813{gr z&uq-QR=K6by*j2@#nf?+i^`*nG#6QpcL&t=jLe_5&212yTBeHD5U_vSsY6Al_2g6C zJupxJyNF)q8=?atiucXLO1F+t$Nk>j-;s9YH8##yc?)+qW?Ja1~}vUGuH#&?K&OtUqQ7yw{2lh6Q^p`5^`}dVgqtV06)M(3YU(5Q~XPm zs#l|;RI06;OB2t2)j%9}>j{>#(qZ^$DMUm>46Ll~f$ZEZybFMMyG)M&U#EL!=J^z4 z`~1wbWUXOkWrafvbUtv^?1!Y2+u*X9!Otl}whBrKdh0P#83V_4LyPfZJ=@E+hsmS1 zQQQz#qQlG|6Sj8KGc)79eX{`Z-j^PI_fENmG-A2EJ)4#}a#2Z%;a`2b4<}YXe*9?j zZgfPWIm-0%I+|DCr9iUQI`%pc-UzG!hYq0T>KTFna5G;`Z99eX!!zmwub(|~744vt zfn;MVEH6K%5VUd?5;Hihk(ZYzdjx3R%V7cMrA9_ZGnUgkY%*To$gu;+{~mO;!_+o{ z>iu;7FppGOt@p&66AHn<$Oma~L@Z(TCYlVIN=ix(oUfF(_PMBoHU|;EVc@t1H|JN- z*a!}AjSAAvl=SrU;?3+(-qh689eKF;=RAc($O(`U5fM7}9lh@`{R_Cp_xoOu3kU$T zK!QS!m&q1>Xe%8K8R<`Gl8ZV-RncNSr%s>N;V8=WZL$&;6N`sa<{v)<_aYA~`A#Pl z-i7E4#^Yn%Jy;zPX1H0uCIcfQ%0yhjE1cX@2lr)|Dex%tk-XrU!65@BpW@}s_vbE$ q%ql)E=;N{f&nN5u?QDKer66Fc2>aqB{L=vfp`)p%QLSbd`@aCV2Ix-! literal 0 HcmV?d00001 diff --git a/content/notes/binary-operations/binarycalc.png b/content/notes/binary-operations/binarycalc.png new file mode 100644 index 0000000000000000000000000000000000000000..3d524fdffe2d6e8be5fa345fc46b3067560a800f GIT binary patch literal 14601 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 literal 0 HcmV?d00001 diff --git a/content/notes/binary-operations/hand_addition1.png b/content/notes/binary-operations/hand_addition1.png new file mode 100644 index 0000000000000000000000000000000000000000..25f3c0f929e9a0ef57453d24e25b6c3fb766509b GIT binary patch literal 10340 zcmch7byU>f*Y3!dk}l~Kq?HayX;4xc1cpXw0Yy^j1_=Q{5KuxIL{KCK1f)cyr9o-{ zDJiLU&-eG^hzaNk5C{aZhPv`y_`8fi zT*Al4h5zp8N1ef+OI~-?6cH8Q7}wwlwxfcU0s>K;NO)?E1J5sesGE8r5G3uGpG#ft z#dZh;*Rh7Of`PB)=Jc@_<;oe}_F=`1J2fPPy={lY%c4l4&I~gA?;KOt*))2WQW=v( zueHA!;#u1FOnRU#al2>sN&o(d(B&gq8)>Y#3%g8J(QXuRA*K z`(Epf+^{&_dpUvn8TcsIV(0U|jG0Cw7J@E}%!2%wE-a};4aK1x$(<3lN`{j{#*~kw z$XBA$RP>Gt(TF0^6TCdgM!?A?rTjlP=$YHSQk@W1Rz5yL>R22Ul5E~1LqPZ%KQ*C? zID<_!tzsS-hsHvzrqsc`Oij)(MKimo>q)eWD3dwnd(!xP&-TZ5(pye(Ha9mP;^wDY;A?tMbH(M}r~+ z#d;bf|MKNaT_dB;$`?jA(g{nAD^-1b#Maa;#>XtRM7SBq19tvyk$L8bfQCU};6nAl~6}WlplVcTI ziWcU(UEjb_IFn3)5DVMlG1Y0MXKD!$-f5zUIB?`W2-h1MIA3OAxPqhKbrkV-tW$jC zBkS{R**iSg^gbQD>v&lnGkXUhgn@bv- zUCgg}<)!BCceOkEhQXh71&OZ?(a$K)TfI4=bWl}64d3)>&wAHcC|8}YmU$$X9inkJ ze@u5*_*yoVrZBJBrID9vosl6Ls&69a|9C5*IC$m<2=q;cV*j@^rc2j6EmkDu&afNi z4qJn~=gAY)zVUxe?-H*+LLGmUQNwIGbq;lxo3k)42=x4KqW-@ayIukX;E(CM`j-%LBQIWo7){-rg`! zpduhJP!_$uZe3@#D98Mq<1!@7ScOGOR`!mo9xmP97_U~knb6jz_~-DjptO|lx8&~b?)Ty0u;gTl{*~Lw908|0 zT}KPC0%Qc?srIU{f6uG2hn5~%4;51- znUPTh%lUTXc&#HT^^JQ`Fk@eiEQ8m|w~o0vRx@++#SkkitHif=(s>_ys1l&~uV3#_ zB9#r3^*=zKpB{6=(~XH*A?HzkA|j&K<>l8aNYZ=5i5bM_=1`#xiwV-YmX-+%3pV`s z8pxjALZk~=B}gY|l5!H;6IbNtV=+j$eF0=))1Uw}Bqzd!UGkiCt)G{kJtlGJ%g9T8 zEXmk#b}(5TbmsT#*DqFDqWqQ?mONd2dwcuw=0NEO&d!mdF=C$q%l@<>m1V`8CV|aLtIPNWmziAbv`B7=*^$H|ec7xFj`{ zsGuH|9$YQ#GgO1GHD%b`6w$2?wRunuL>#{vjCKzUU}6Yx4(4aopg`P8=77=xOXTI} zU#)n|c$vivVCAFNO55VjmwlsZ6C$|MYuBy;I$BQo|Af7zqM>1@j^$A@(xW1eRz?bE z>YAI!*3<~U{rtCpqWN6&7F&!5Svs7STJAtg7Sa7=|K=f)P&7RKG)bwkAe>`DfzeDJRi;-NTJ<7J}fwnfu zlw18>%j=Z#18rHFs?;kIIwX+RAh;}Ps5S(?6A8tt5FD`gHgL{(Ir2D2OP(ke12ydmBfWEGv zh(W$;Rniv}s2`P?)gOgq;ZDK zRh!%E@!q>?%uQWmy3Il%z<*NFQ}*> z$&zsIEY!;KIN7Xk-#Sz>3M>hkS8`SE&J7e^d*7D9+pN%OBXo2Yv@!LOQZ0cI^_*R; z%5i{si9y_qB3vn!I|kt8>%c(Q@9D;!+T1fD%ot4KK^`j?4C=Y+Xq_=C7wGxQFi&|6 z$ois7infRKb@D!by!qR|#%zG$VqBd&12^gRKX<4QwG%`Tm$z7-!h=r40b+Wm0}(&} zhI+rbs^vO0VSpS9)-wcD-2geODFMB^Z+)^|tbi*$eE2XaJ-vuA^6%swnex~4mvQtR zlf@iH)lKPccCS2-(!=TPKoVb zf&L^H=j~Vz^A?SaQx2Nt4$@O|N}GzBmAM7^SDWy=nY?@95}cxOz-+t)V=1DQ$%t?% z4bYEIUPGBOnVKT!jOl`s72nGLWnG__0Kpk@LMR z`)U&m8VBr;7}L_yA|mK#!wG3Tj(3-=n_l`&D^nW8zYOfdkiGXGK3t`U=AM-DS|<9I zD_>bA@?-lZ`6EVGSJxvTbFn!&%=Qx_rN)CZGb9Q=swROl(N(N9`^tJ@9X6;s=P?hU zl1nOmPOAjCQWPYSgJWZOiCv)pA9nWkJS-YhpPx`xHXYEPpC7h#S-i0I@F0VX=H}*p z+Pf6eVMBK?aZSE@fNo?DTcH(J+3Au$C+|vRNo@SA4qpXW5AYp0H4J+b&szL|k~99b zzEA}GZ+^tss$*xdYjAS1ba-%fmK4wrR`r$1X$Z8NTskzhkTB=ep!hjCxzoc}IoEVJ z!|*7Rs(=g;7o@59LzN60Qx!014XkT!$Jb*YZI~_Ti3Mw`nVU1T5J3DGm6<#PKt&#G zOnmL>p%>@ZR88i%*Am2ZanvQhUEgv>Y+Px%6x+J8mj`r@LEPn*ic0uH2jgk~cag~t z+P-&Zt&deM!piN^Tc1M@4jwhrLSVWzZi<&#G*SbJ^pIri**0}FMc#3X4-ZLVp;fE6ZWfB47&& z0KVzq&!6v}Jm>GU6V59u)4W_*CdJp+R&<5cdR1fumcIwQ;yx45XF%}c;$q#9%vD(l zcGAFZR_fS!^hjxg?~ct6sko;Yax~b@^8c)MGOe-WXGOH@y2p#W-Ggfejdz8W0ic2S z3wbSTLg|4RTUh9b1sWePsL|eh2>b%4aXR7KH*Jj6kZ_;*6`PO=WJN>cGA|#Wb^YYv z;NY`b$ASEUf>416+*Ex;7)Ak`NLgxBuBf1JDSwdr+bikF`WZh$mVj+ks_5O)k(ka- zRhP*R#DvuRPuu5jfd-H}n)~PTZV#Vi@cC&*@K`rM3%~gXqQ}!dG}Qbi2)F_`|G9Qj z`7aFapPykE!r9!U`s!f@?#kf_Mzd_pG%;Mca%J0BX4|i+xS~S!$&;IIQw`5PeE48p z@2^w;>64Vq!MN>smGwWLEd{c*xg5S_M?cwHMm?y@fBP1v-feopm>~_|7cyx@NZG+p^B;3%lmYDh zQp4sWX}6ZMM}4{SvsGKNJQ=va`*lrBqNb*%8fH0aI=N%65)cwTPfzcvd}+j-hzHaF za$A9)TE9Y(6(0*k3VgYq-ro6#ACC<6mk&?$jErz0_#V?y9fYod=J>U|%=y`%Xa;I) zpNn|=ns=K+EswRGypcoVD{aTAS6N&jjP!n!^&f=d=#yasv$1n@Of2nsKe_4g@t)`7 zW{0l+8xjj1lAVTK2Kh+(jK2g}b8;`Dh%HEx`*StXXUIf4&s9Zp^ch2}vhf{VhWj6L zU@h%w%984ctlR(OIHg#y1aD+M4au}V%DK(=eyy+~k;SamGP!Ask?&Es44cx{kqWAh zESi4Bm;S<+`oce=K$5JDSTsFC!HVl5Ms6JM-wR1kRv#{Mm zBqt%xP-`;I)9ZJPB35Z|MB45DCJE^435sA7vJ%c4kl1%0!IQ7vznMff!=pkn*$TaM zGFLMw`z4@$KihG%o|yI95*sP&GZBnXzf))dW(MKf|% zEqb7Dv;)P(2fK5--LlP2UcacwE6cG=>WmG^d?uXNr5--mo=$`_H1|HFNGy?-5LAPn zWc(Q;(2b<$48NT0(H<{CGUp5R)kQADd-e}>ge~Abd_wl{A4ec?dNhXxr75kVVC^um zKi+{)bvQ|JL_*hOv)5MF{si@v+;$f9^75(%hK?Z&u`~jzMn=?DVVX}h@5kAq+RB-) z*|qIGA4M7&8qPn%V{X+6{;TgY+st(H=FI?dVXe0X^?e-oi3__H6$}lpIP|{^2Sf(v zpcy~YVOVy`SL=)TAKr3QYNXp`8j?uzc-1w-_mN8_|$rsnAa z`P(13Wk!6!aWdAwV&5m`Z2uiCnS-l*w;-rDY2)|?KmV7}a&ynQ)=P|%9tcwTQ^CFk>)OW@%~ZrM2xzUL9%lvN=EX@Yq zi83Ltq#x&(mBk4Vcyy(&x)Hohi)5_^`wy`Op0D!B7m63hEJ*dk?g{kj;_dyT!9n@j8ITg z`UhqJw|f1DZulW?i4Q1odp%dEqE37FOubS4i8g7dS3QBU}IeZB+Hf$W(G6o zw(Q8r$av#p0i#OGc+iYXGpS(ufVKhbmwf!25va}6ybl=pW?Jh&yv}5A8o?cNwA(AN z)6JC&>Qbj<5ffK0#hg>k$G~`~pN!w#edzu8@#5+69?XG2fPgJ5Om|Nay{P-a#~5Fa1!)a7rlFlNcu z8Y18-IE2*P_9H_vSNN(PjPSx91spG>uWoKGm9o((J3B_9+i0Bt;wR<#p-#wwh;Ag2Jx!R124Q+kVM5o;HT z{Jub~?4cHSxb4TIWk!b_93A;4@1*_3!A1bH)jxz*@$W;O9!$FLz|Z39V1e)X@ygEW-oWC=m7Lg8U!!@1hSZ<56&^Ix*1igDdYAb;6azU}# z>n*g5#JUA`o3XL+)bPYabVbDt40S#`J4=e}Je~KTm6erUU0Xwyo7YEZ0ax!~@K3fh zLm?!}vj4(zjFN#E`*+QXv9o%S~Cs#$ zX{x}@lxX(S8IgDGg>F-WPE-&Y;C&1_i7r|48-fw?Tpb%;g5S^8IjotY6}t~Cm^gh* zOXp7yBBwQz*COmSd;jP`&9xdR*w74Y2QZ1h;!n+D(UUR5cMWvACHvH zA~Rn5KQSTqk+4itQxlN7o^%NcoU2!MzgOObgLfWI=HO|X^QD(2bmOK{)X~wIx`{VB z`GCXYfE?Xe0b29r*-y*l13 z=JH%M=0{6Gy8>q2UXj0`gGC*t1fszozjuQM%GmtAUmDr&M)RUE0P7faZ#|p>GA9QMSKCXGPF$)SB46q62|N`@tQw(fB7H zKBICopy?Qmpw5A%k&K8J`9|bF+Y`jSGpNQgpJr@{I^J7}OcNs@aERDG4glLw1=I`1 zNyEbvl9c>P6H6E;l>vL}`OXf*h% zB#_)Flmg}?tpaw!mj$ep^}gh*#8x>CUIjG_(}9}JmU%(}CPlzboGNNK6HeO(Y*7rd zfqTUobM@+Td`$C(#?to^DC*x;R!b71qR4?9Sxld1+6@l@q-Q=}Vy5+uKvSxqWC?`| zxsQ(zhPr?mmYVhJ(W6HToAtAu)wW$8;ITINfJ5!E)pUqi1q|mNom#n*4Utoftr5u* zB)P$P7kWUx+bFzh@3p&N*TF^p{_Xa8f7IM}r-LRfYfBr?8|NRU>IoN&rQQsrfUgM* zdhkFLz~X?2Xg>ez3~q_OX;E1jQGb6wMpbS+l7@T%$qxwvunJyB?B2=%DdC=zfq?-M zTzAY|V1z#GKtNgo7-Br@w{KO}aI`onF+?r!7QFb z&kr^yBlp+G+Ls>k7;_-&{kAqYRqovBtrB$P^-C;ax2&Xr{Q!~|b>hm_n9vUtvdVky zM?<3o>>&e4gNSLj#Kx!>&;i57f<0AIPt z9UZry)K4-!W<&=HXKI>!^5%h~p7W4Q^}+N9;ar!{gtUGGjIkZiqQkTZFbr==gb7Dq zjgchs2YX57WV?0<=*EKAuMt2gY0;Tr@4>d%nHr7St`mej1v%?Edv$tck7sP&nk)ZH zo_Uq6Q_DCRJpwlOvt^|)qy3V}_j@;tr#!2C#>q0tBW{HA^a`H_wLEl=Tzd*_F?4Mu zKQ>wr$xViiwFb`0gRIrtg$+LDr{~vwrzWcWlx7JtB93E0>hJO7bKx(%jq(wzgs9i0PU-ZLQpQk`= z*p^cjB^qTA5o9KxzCIux4!uYBx$nPa&?&P)$RS=#BT6M>G(~Z zqMJeTQicB*|L^rye|QI5-9`=5?RRmQrBF8$$!lQ;Wu1OmOn27$tlWFtHFOC_4kfO)Kr>h^Zo=ux5EUw+@7Voyc%3spDP+nUFsDHpnF8L@hE5r2gi$k&#x&%#F2#h zx*2%SF%8l(4ADTF%1mpkkSMIww6u2R={ z`X@Ve-t6Q|RhyNA3i<+F`1wbTY`wzZrGd?=r$_#~`NR#H=-Z`qs(!hF`O-k1GUS8h zYHDlKB3#6?*zmDnC?p-MiL5p`GUV!WQta;8T?fw}$QLOj>$aKLFln$Pm1EfULCO7?l*)xZ?8gyK>(UWqYqa|AO@r0*(vZxER7U#UBK;SHlia?hGwIh4ET|0aG2)BY0A4^$p z_?~;swh!0OS>>*-DrV7XrCp%=mMJ`G{A6asO_nvUt&72DSAO5)d|iSUa?pu*{)mlB zr-^^?jiKebdr(xjlWSsdcA1QPweYFbhSfd|;rpJ_&~BZzqlX=K1xPg6?Dt_xbGer_ z=v^0PmPbLi-^!R5)@j%5zn`%c4wz7$TuCqKbxM<hfB)gFSmL}A zcabF3s5B&%mYs*Mt!qPckIry2=TAA&7u8+plv@FG?63gQ`lVzovm@ae^jZGjzBl~6 zWGbHHpA9|?oEy5!Q^zXMN@evzHw&L$e(1JQNmLN1QGeM1+$R$YTxs$af){%VYIB+s1Sw4S1aY_I^ie zua%~x*j1Mjo zAyB}1t#0V%hBK|0i0;nw541o9(wGpmx=~a7(kFw5k$nxI~$lcOt;Y){1mLn0W1HU@@ zX-WEJB`#A6G0WmnJ-kF$<1-VBoLp!k(l)r3%qqR(y1rpD+&gi;(==yNb!O9k4>%ZF zor6LFh+A8CM8Sq9NM-<#i1YIx#4X5CV`G}XfB&-Lhb(WCP0{Ia;IsQP#;XEvPdU1H_N?E(B*#fXZh5#NUC}fY2~uDwuYG>El2@vAa7tT zeVHPwXmrTG4L4{t^$gUSnVEU~{c}I8-5Sa5asB#rCs)^S@RvJmdUSPUf7vRTici@o zY5UMUS!ItN9W?@_zzQv)ll`T1E6i+B#Kf@^Nxq``l8g}?8n>B>baFdeTc6&=G)jK{ z{29TdCdtS=@+IMIUEP)R8x}FrBFMo@JFO4u6sc6+*ViwC zb4WQ8d=Ypp1Mz)!w(|7r#MU7=$GlufXkWE;gMrL-cl`5*58|Ky{J10OxuAScr`<2- z^fcht$_k9T%ExynbNnD#3z|vb88mpWQCJ2Y+n?^`UMLIFLi-!s7ifE92D{b6gU@Gs za_Hr_yMVd5x#z~X(CNC>MNDbCIyRz{G0c%0Zdoue2!k6VFt=ZTmx!59`;}Dq#p#NC zL(rL23jqYQF8F0|YmY71bO2VK?FvrW26`yz`-CN@M2oY}e z3|`B9sCR~?a069&fWg($h~nrO{Tk~7OqUBYa7agfqzv{1`7Qe<29TiuA?qj8EOTaq z;eH;7QA`K!SBlQ|@k(w1rV-*mOQrehq0}p2pRoSw@87CwYHB~MGr40xfMf{SM(pwh z?fVN{uR$yJfQ($-*wFl&qe-O#_WV`wN`G@uok-{j3KK&VGVB0}&c3+R7D*$dLa60p`Uy literal 0 HcmV?d00001 diff --git a/content/notes/binary-operations/hand_addition2.png b/content/notes/binary-operations/hand_addition2.png new file mode 100644 index 0000000000000000000000000000000000000000..5fcca9a63458402925973b9e5e4bc3b88e204be7 GIT binary patch literal 10315 zcmch7c|6qZ`>#aV_dQD(QH@<>iDXZx*ON*oZL} z(xaXX#SF!l#{Y`ExhXOinV!>mr$qB%m?1u+_OYRzxpe2bPJC3Pa#lYZIr+Q3Z^Kh+ zi#vXcuQl!q4@;ijs961SYd>IMNOHqF<3|$7_0!69jA%wbIudKD*vRv@ZlHO|(w?Bm z+7Sqr$71CFzy74TQ*N`Cf*=>kq>L*#&q>42kr;QuRM~*(YK|^~fn1f3{&mTvXDFKE zGFwx11cNe?g;56?-ia2EjEsC;QK1nWe67(^^yuhl^P^zi^v=pK8y6RIzi^vVS+XHw!j;FAqLQe`yl{XL_6?Nvzw{Pw1zH2RCvn3tqVpUbQ6I9Tc zCj|w3rKZ(q#%o+v3=J7=O}m$ug?aeH-3yuYzD`o9T$gg#Ha_ z-2V|o7TtlaO5i(vpyVkizAY5@__

    dC=ZZWoPHhOln~TLYs#V9q-?NTp)C?T$ucM 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 literal 0 HcmV?d00001 diff --git a/content/notes/binary-operations/index.md b/content/notes/binary-operations/index.md new file mode 100644 index 0000000..74e4a96 --- /dev/null +++ b/content/notes/binary-operations/index.md @@ -0,0 +1,392 @@ +--- +tags: + - computer-science + - notes +author: TrudeEH +draft: true +showToc: true +title: Binary Operations +--- +#todo +## Binary + +Binary is a base-2 numeral system: A simple way to represent numbers using only two states. + +|Binary|Decimal|Hexadecimal| +|---|---|---| +|0000|00|00| +|0001|01|01| +|0010|02|02| +|0011|03|03| +|0100|04|04| +|0101|05|05| +|0110|06|06| +|0111|07|07| +|1000|08|08| +|1001|09|09| +|1010|10|0A| +|1011|11|0B| +|1100|12|0C| +|1101|13|0D| +|1110|14|0E| +|1111|15|0F| + +![Binary Calculations](binarycalc.png) + +### Speaking Binary + +> The information in this section is non-standard, and mostly a curiosity. + +You may struggle to pronounce large binary numbers, as saying a long list of 0s and 1s is very inefficient. Instead, we can do something like this: + +![speaking binary](sb1.png) + +To be able to say any binary number, list the number, starting by the last digit: + +![speaking binary](sb2.png) + +And pronounce the ones that correspond to a `1` bit. + +![speaking binary](sb3.png) + +#### Pronounce a Binary Number at a Glance + +1. Break the number at its largest pair of bits. + + ![speaking binary](sb4.png) + +2. Represent the left and right sides. + + ![speaking binary](sb5.png) + + In this example, there is a `two` in the order of magnitude `hex`. + +3. Continue to represent the left and right sides recursively. + + ![speaking binary](sb6.png) + + The last number is `four`. + + +#### Decode a Spoken Binary Number + +Starting with `two hex four`: + +1. Find the largest power of two. + + ![speaking binary](sb7.png) + +2. The number is equal to the left side, times the order of magnitude, plus the right side. + + ![speaking binary](sb8.png) + + +#### Avoiding Repetition + +Repetition can be avoided by combining some very common, small numbers: + +![speaking binary](sb9.png) + +![speaking binary](sb10.png) + +These shortcuts essentially create a quaternary system to pronounce binary, but in this case, the result improves spoken efficiency by a lot. + +## Arithmetic Operations + +### Addition + +Adding two numbers can be done using a simple, manual algorithm: By adding the last bit of both numbers first, carry if necessary, then move on to the next number, and so on. + +| + | `.` | `\|` | +| ---- | ---- | ----- | +| `.` | `.` | `\|` | +| `\|` | `\|` | `\|.` | + +![addition](addition.png) + +> To add numbers more efficiently by hand, you can group bits together and memorize the patters, effectively doubling your speed. +> +> ![hand addition](hand_addition1.png) +> +> To improve calculation speed even further, you can group more bits, and learn those patterns as well. +> +> ![hand addition](hand_addition2.png) + +#### Half Adder + +Add 2, single-digit binary numbers. + +|**A**|**B**|**Carry**|**Sum**| +|---|---|---|---| +|`.`|`.`|`.`|`.`| +|`.`|`\|`|`.`|`\|`| +|`\|`|`.`|`.`|`\|`| +|`\|`|`\|`|`\|`|`.`| + +![[/image 14.png|image 14.png]] + +#### Full Adder + +When adding 2 binary numbers, one operation might return a carry value, which the `half adder` can't accept, as it only has 2 inputs. + +![[/image 15.png|image 15.png]] + +To solve this issue, a `full adder` accepts 3 inputs. + +![[/image 16.png|image 16.png]] + +#### 8-Bit Adder + +![[/image 17.png|image 17.png]] + +### Subtraction + +Subtraction can result in negative numbers. Like how additions need a carry, subtraction needs a borrow. + +#### Half Subtractor + +Subtract 2, single-digit binary numbers. + +|**A**|**B**|Diff|**Borrow**| +|---|---|---|---| +|`.`|`.`|`.`|`.`| +|`.`|`\|`|`\|`|`\|`| +|`\|`|`.`|`\|`|`.`| +|`\|`|`\|`|`.`|`.`| + +![[/image 18.png|image 18.png]] + +#### Full Subtractor + +A `full subtractor` accepts the borrow value, allowing us to chain results. + +|**A**|**B**|**B**in|**Diff**|**B**out| +|---|---|---|---|---| +|`.`|`.`|`.`|`.`|`.`| +|`.`|`.`|`\|`|`\|`|`\|`| +|`.`|`\|`|`.`|`\|`|`\|`| +|`.`|`\|`|`\|`|`.`|`\|`| +|`\|`|`.`|`.`|`\|`|`.`| +|`\|`|`.`|`\|`|`.`|`.`| +|`\|`|`\|`|`.`|`.`|`.`| +|`\|`|`\|`|`\|`|`\|`|`\|`| + +![[/image 19.png|image 19.png]] + +#### 8-Bit Subtractor + +![[/image 20.png|image 20.png]] + +### Multiplication + +Multiplication is also similar to its decimal counterpart, but because binary is so small compared to decimal, the steps are also much simpler. + +First, multiply the top number to every digit of the bottom one, and then add the results together. + +|X|`.`|`\|`| +|---|---|---| +|`.`|`.`|`.`| +|`\|`|`.`|`\|`| + +```Plain + ||.| + x ||. + .... + ||.| ++ ||.| + |..|||. +``` + +#### 2-Bit By 2-Bit Multiplier + +![[/image 21.png|image 21.png]] + +### Division + +1. Find the smallest part of the dividend greater than or equal to the divisor. + + ```Plain + |.| ||..| + ``` + +2. Write the first digit of ==the answer==, and ==copy the original divisor down==. + + ```Plain + | + |.| ||..| + |.| + ``` + +3. Subtract ==the aligned dividend digits== by ==the digits under the dividend====.== + + ```Plain + | + |.| ||..| + |.| + | + ``` + +4. Lower ==the next dividend digit==. + + ```Plain + | + |.| ||..| + |.| + |. + ``` + +5. Is ==the total== greater or equal to the ==divisor==? If so, add a `1` to the answer. If not, ==add a== ==`0`== ==to the answer== ==and return to step 4==. + + ```Plain + |. + |.| ||..| + |.| + |. + ``` + +6. Return to step 2, until you reach the end of the number. If you reached the end, you found ==the answer==. + + ```Plain + |.| + |.| ||..| + |.| + |.| + |.| + . + ``` + +### ASCII + +Binary can also be used to represent characters. + +| | | | | | | +|---|---|---|---|---|---| +|Dec|Hex|Binary|HTML|Char|Description| +|0|00|00000000|`�`|NUL|Null| +|1|01|00000001|``|SOH|Start of Heading| +|2|02|00000010|``|STX|Start of Text| +|3|03|00000011|``|ETX|End of Text| +|4|04|00000100|``|EOT|End of Transmission| +|5|05|00000101|``|ENQ|Enquiry| +|6|06|00000110|``|ACK|Acknowledge| +|7|07|00000111|``|BEL|Bell| +|8|08|00001000|``|BS|Backspace| +|9|09|00001001|` `|HT|Horizontal Tab| +|10|0A|00001010|` `|LF|Line Feed| +|11|0B|00001011|` `|VT|Vertical Tab| +|12|0C|00001100|` `|FF|Form Feed| +|13|0D|00001101|` `|CR|Carriage Return| +|14|0E|00001110|``|SO|Shift Out| +|15|0F|00001111|``|SI|Shift In| +|16|10|00010000|``|DLE|Data Link Escape| +|17|11|00010001|``|DC1|Device Control 1| +|18|12|00010010|``|DC2|Device Control 2| +|19|13|00010011|``|DC3|Device Control 3| +|20|14|00010100|``|DC4|Device Control 4| +|21|15|00010101|``|NAK|Negative Acknowledge| +|22|16|00010110|``|SYN|Synchronize| +|23|17|00010111|``|ETB|End of Transmission Block| +|24|18|00011000|``|CAN|Cancel| +|25|19|00011001|``|EM|End of Medium| +|26|1A|00011010|``|SUB|Substitute| +|27|1B|00011011|``|ESC|Escape| +|28|1C|00011100|``|FS|File Separator| +|29|1D|00011101|``|GS|Group Separator| +|30|1E|00011110|``|RS|Record Separator| +|31|1F|00011111|``|US|Unit Separator| +|32|20|00100000|` `|space|Space| +|33|21|00100001|`!`|!|exclamation mark| +|34|22|00100010|`"`|"|double quote| +|35|23|00100011|`#`|#|number| +|36|24|00100100|`$`|$|dollar| +|37|25|00100101|`%`|%|percent| +|38|26|00100110|`&`|&|ampersand| +|39|27|00100111|`'`|'|single quote| +|40|28|00101000|`(`|(|left parenthesis| +|41|29|00101001|`)`|)|right parenthesis| +|42|2A|00101010|`*`|*|asterisk| +|43|2B|00101011|`+`|+|plus| +|44|2C|00101100|`,`|,|comma| +|45|2D|00101101|`-`|-|minus| +|46|2E|00101110|`.`|.|period| +|47|2F|00101111|`/`|/|slash| +|48|30|00110000|`0`|0|zero| +|49|31|00110001|`1`|1|one| +|50|32|00110010|`2`|2|two| +|51|33|00110011|`3`|3|three| +|52|34|00110100|`4`|4|four| +|53|35|00110101|`5`|5|five| +|54|36|00110110|`6`|6|six| +|55|37|00110111|`7`|7|seven| +|56|38|00111000|`8`|8|eight| +|57|39|00111001|`9`|9|nine| +|58|3A|00111010|`:`|:|colon| +|59|3B|00111011|`;`|;|semicolon| +|60|3C|00111100|`<`|<|less than| +|61|3D|00111101|`=`|=|equality sign| +|62|3E|00111110|`>`|>|greater than| +|63|3F|00111111|`?`|?|question mark| +|64|40|01000000|`@`|@|at sign| +|65|41|01000001|`A`|A|| +|66|42|01000010|`B`|B|| +|67|43|01000011|`C`|C|| +|68|44|01000100|`D`|D|| +|69|45|01000101|`E`|E|| +|70|46|01000110|`F`|F|| +|71|47|01000111|`G`|G|| +|72|48|01001000|`H`|H|| +|73|49|01001001|`I`|I|| +|74|4A|01001010|`J`|J|| +|75|4B|01001011|`K`|K|| +|76|4C|01001100|`L`|L|| +|77|4D|01001101|`M`|M|| +|78|4E|01001110|`N`|N|| +|79|4F|01001111|`O`|O|| +|80|50|01010000|`P`|P|| +|81|51|01010001|`Q`|Q|| +|82|52|01010010|`R`|R|| +|83|53|01010011|`S`|S|| +|84|54|01010100|`T`|T|| +|85|55|01010101|`U`|U|| +|86|56|01010110|`V`|V|| +|87|57|01010111|`W`|W|| +|88|58|01011000|`X`|X|| +|89|59|01011001|`Y`|Y|| +|90|5A|01011010|`Z`|Z|| +|91|5B|01011011|`[`|[|left square bracket| +|92|5C|01011100|`\`|\|backslash| +|93|5D|01011101|`]`|]|right square bracket| +|94|5E|01011110|`^`|^|caret / circumflex| +|95|5F|01011111|`_`|_|underscore| +|96|60|01100000|```|`|grave / accent| +|97|61|01100001|`a`|a|| +|98|62|01100010|`b`|b|| +|99|63|01100011|`c`|c|| +|100|64|01100100|`d`|d|| +|101|65|01100101|`e`|e|| +|102|66|01100110|`f`|f|| +|103|67|01100111|`g`|g|| +|104|68|01101000|`h`|h|| +|105|69|01101001|`i`|i|| +|106|6A|01101010|`j`|j|| +|107|6B|01101011|`k`|k|| +|108|6C|01101100|`l`|l|| +|109|6D|01101101|`m`|m|| +|110|6E|01101110|`n`|n|| +|111|6F|01101111|`o`|o|| +|112|70|01110000|`p`|p|| +|113|71|01110001|`q`|q|| +|114|72|01110010|`r`|r|| +|115|73|01110011|`s`|s|| +|116|74|01110100|`t`|t|| +|117|75|01110101|`u`|u|| +|118|76|01110110|`v`|v|| +|119|77|01110111|`w`|w|| +|120|78|01111000|`x`|x|| +|121|79|01111001|`y`|y|| +|122|7A|01111010|`z`|z|| +|123|7B|01111011|`{`|{|left curly bracket| +|124|7C|01111100|`|`|\||vertical bar| +|125|7D|01111101|`}`|}|right curly bracket| +|126|7E|01111110|`~`|~|tilde| +|127|7F|01111111|``|DEL|delete| diff --git a/content/notes/binary-operations/sb1.png b/content/notes/binary-operations/sb1.png new file mode 100644 index 0000000000000000000000000000000000000000..bae3cab5ac53e311abf78b024ad14b3ea04b1686 GIT binary patch literal 83917 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�c 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%0D4s3{!g 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 literal 0 HcmV?d00001 diff --git a/content/notes/binary-operations/sb10.png b/content/notes/binary-operations/sb10.png new file mode 100644 index 0000000000000000000000000000000000000000..33f5e13b67a02e872b5321aed470bb623bca415b GIT binary patch literal 88073 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

    ?>vwam1hl5+G`jev1S7k3S4Q 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 T`0~v?_-nrL5~CzTE1&-XuKzNG literal 0 HcmV?d00001 diff --git a/content/notes/binary-operations/sb2.png b/content/notes/binary-operations/sb2.png new file mode 100644 index 0000000000000000000000000000000000000000..a9d5018c7e9fd703bba68b619329d3c017553273 GIT binary patch literal 25628 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Μ&{ynhy^#w6n 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 literal 0 HcmV?d00001 diff --git a/content/notes/binary-operations/sb3.png b/content/notes/binary-operations/sb3.png new file mode 100644 index 0000000000000000000000000000000000000000..dc72686c5e660ded1a3d11aede356285efc45250 GIT binary patch literal 23185 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�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 PFw$AomClMsj=HwLt$QyL literal 0 HcmV?d00001 diff --git a/content/notes/binary-operations/sb4.png b/content/notes/binary-operations/sb4.png new file mode 100644 index 0000000000000000000000000000000000000000..ccb43d984dcdaac4bd1881c133947a565eeba0f2 GIT binary patch literal 3729 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 z zqv2PgukTj?p>6hV5pl~+fA|3J?bFM~>cj<~K9+}+K0%dAGn$<5%?FH4<&&qETn42y zwE}UoxRLrX_BVfk0H~)fdVQGHnRmj9ii(r1u}5pBJm5!woaYpKX`h}<20h^UqR&Ki9~Q0WO&)y9a!P_je9ru_G`UclHr1}~5^UhQ z+1?#!&~?-D4x02MA!)*l^y5GHwkiC-ZQQr!3FEq|BL6{E;5QOvtZ%MYj>S>_2Mmwo Ap#T5? literal 0 HcmV?d00001 diff --git a/content/notes/binary-operations/sb5.png b/content/notes/binary-operations/sb5.png new file mode 100644 index 0000000000000000000000000000000000000000..7168b218a92f55b177afd24a1bd600ddfc4c00ea GIT binary patch literal 15876 zcmeIZXE>IRA3m&aAu=jN#x0c*S-EACO;)lA8JXGHs}Lbnl1(6*~Wrg-9_-w(fSH2LfsSWnS19H>&&C>MuLo$?q9 z?;GsoJI_APcidU?a@(?ufIUl08&cwD0H#qmWA87mZ)Z#t-Dt4CO+ z;V@3L>bv{%MNF2DoFnp*8L~s)>Lc*+$&<->kp*GIT{WHcH4_9>zF9oAX=Zg(shHDQ zQ%7J$KgP?S4nra4x@IdM?RVbOX?>u<^7EgDy!ipap9_v9T!CfEwTGgDj&!92BX&%F zQR>Wypn>R|$J(7%e8H_j3qQl$l;_QJ8F#jH*#-}r2XOC^gIZ+ef6Bzg*YkZWG^?%o>E-}_) z#GhoP(P#2}tO1!5A5_W#CDMp=c)*txnlS9>WJpEOp;I;Uf8Ub&kzU@=`dL4|b+)e1 zygn=AMKDxb#U*q09)iVyEj&i?O4+VGZHuuBAZH}4Qz z{6FRR$=o@OSzBr@1XGCPsvAknP8f<#2S+!-7m@`|) zwEAjN_Q_ywGFG)s1Cu~s?~J!TpZHJPkQ#Fz3P!{$GNFd1q2^q!%zZk7+4K-fo)6r4 z4blI+&#qx*4L#ws*&ZzRD=sr2m84@~3EtVUZ)bqDDk-SGr;Et;@R@yvhf1no)Gt&gWJyhN`}`nKTySdd za>whGil8^LB2&i)b6IdT$HBEnHxOP&2FX24D3l=u4$8vwJ(ohb#QhK5OLL8ZBxmcU zB6GQ=lh1WOAAKtnI}s4n-oHkF(cA7<{3nXB?Q5fGg3Xz;u$gzbsGAD8qudv#fHDIq zDJfp3b&AsibV_-7^rYUJ!lG(lt6E9k+Hyt0uWQ?H(l~@G>jm}nW`vB z#axk_ySwXL2+z?-w^#Gj<@wZZu>P43daRU7Q1G*POyis#LBqYTGOsD5dZ}J|L~AAG zXzSB+r?#B_V@RJ}SN-1gzi7{H^JXX|nza95tvX(eJsa{qC$GKO&o_VjRzjJS=X-oU zVS@}N-jrdl7=JQ`u2WoAtM;T?%D4+6e*OA&J)pt*^5xkkkDy>jSG>STp%HFMN{V&% z)k+aoYatc)0Y-w$vV~OL|14sf$IBg#XNbN3me!tIEp{g+x{+dCQwW_K` z*w#quo}u(#akCtFmsS+tSjowGte&ggbXa@onc#I|eurHz4)dSlP$&{%I{H$f#@r^i zCPtjy#wo?OAIF1w*-~%ZxDhSj%vS&Urb6F5RscI^U-7{tOVE=fX;y1ibpoA$fU#Ih zyyb`HWW6ZVOHEA~H8ryLl|%X-<-AEA<(o~p^&tjaS;e37h49qVq%q+;hy>UfUAk7TB6|6SSH-Ob9%GB`ik&(W_< zc)=tgh-g77NJ&eNlsho${C*q#FV+c_*VCg+M8n@$?ywXk;w>Bz5wWq)cE~w8qP4*5 zd4jBTLL0t)+i|YNtkB2A%$$ru;pY#@J-(BYmiAF4LorRy@ju<6tn6%~dLQhKd9lcE zXPUS;IJ~ygSd5BsGS#D!KK1vSnwnJA)S$8n?ti^LV;cpJ8UD6V^Yg}r^~uQz1qH=) zM>H3;fYWD(r7q4VPrg-@neSF_dWM-MdftJvAt{?S4;@zfv+x|8;kKBWnWK1Y5cKr) z5P^y$UL;aNLxWsMNC?Tp(>FXUV`;gTnm;qpiwvo%66E>fU~fMjoVO;Cq73!3vbs8Z zcDx(M?--OK9o9QB5nquR>?cNd=dtE9HMIfyp}_wAr^lxdlY{k_3>DHazOU!SawU0hsDb&u1#735mATq&r>C+r+R){T?yQ+-33 zKD~vPQlxQLK_n9I$4hUQ6zu=5tgfwT)p+ock&(e22du7IoOxaPMRXPu(;%p*8aN1? z(;RCy;2MW&FSrGq)~BUKPHwFY<~rnOn~(aP%Il>U&7x3km76u~O5P_b`~m`uuSB#& zMXyYqE%J;M7+gh!1!z8QPFILM8p!u*nx1~WI-m;?Z$Y?!-t@jaU9Jc<^nN1aWyB!D zrlw|YW3xnFdxXtiz1QpahJN?-93E4lVG}+jC1qxAZdzGc)U$i<)6GdH$GdRYDMRcx z#`!3zs79*YdB%QQ%^hveH5wN7H%-}Q(a~JL#%niwty}1jdb4VmXklSt-1Bf^+;K>^ zBT*!=s;UZa*YmZA4LtL~LG=UlSW647cL!sl#~(<$mzx_X2uPvJw&4$U{jNVBZ#-gQ zc|c86xf{%zuW|qDJw#X~Rb9M*^Doz36G&AF{i%hkX;oEmBFEt(1``#I8^7XeS&!Y9 zzR5hSo3te$AlM4KJPNDY>y_(>;`B{Cn`g|?tB(2l_157@7r)7n53Jo&!Hwf)}7 z$u5zz29W~uzV!Y8Zmav>w_JLh*T1k8iI2+QnSU%p%*mYH?B+Qa*etE}YWFY3Ia63A zwkh`U`48cJX6Lo#OUvPY@bjjCNme0+Q+Ha3Q@GPcuoSGpjmZjO;Ha|V#6<6fueYrdi|4dJv$9yNGj zoyXAz6z`m!cSlSUd;0soSMU~OFTH91vE9Mdz4cF=xbSto4<2iXi(uE*76&A9qao)Z z-`=qYroE`Bh5P$-l*E4U;6ZUoiSF-T-5njq zJ;{e>M**^HuKMv>lq7-)}%F;Naj4|F)u1P*5;7F|lu}eSQM{WqrIn-1GFHr?0P}CqQ)_2x>ud;v}3*z&aeCHcCf^KO!9AfED4Oe zF2!5RJwSxPW39*39<+(^TFaJD8fsqK_j!42JXi%H)*9;SFSWIwD=87@=H~WM_P5f- z%RKz&7++-C{mXKQ4O+v|hI6f)fdSpst5@Shyc6K6Z4cJ9AOfG@5w88sGQMJOZ_o7T zQBrMfB8&*#zU7~7ZO;=tc4QH*^S1z2O)P|c{%pH7EjsD3s~~)~CGNC7T%V^~X=Y{R z7#slL3WfUq{X2}tu7Ce-T3K0r4%MT6T&UThtFM$G7?^Hu{N_!$T9H9_5jy9=#Kc6^ z<;CgQ#bNDIN|>-=cY@H~!2xuF<&~A0t(k^6A@?6L55=UUn*AJEpoOgub56Q0(M)=s zT0OOy?D%jM7sii_r)D3+vnWW1C`bnaA(EzIVVdao+!|Tufm#axB9@JnhH`0odD14J zwxhXBi6FZ-1REfmjOUs|;JHF6pioaZIO=||>J0yS)9!cEPM9b(G}M0n?=8gyK|H6^ zQo|OA37t?*tb@9bGKwUwmwCZf^It`~?#$!FBO&&0+OsIjv(n z^I2M?-fZHE%bNWvg$e(4K$7zHz54YyzneO3n8N`oH_{w4!eH%U7Lq05Z@p&mhmxC_vg@zw1ukfIM2js1JoNc$9?TTD-xgV^TuUo3Bt2c*vpBX)UJ3MXODBouclL|8l z-cHrTcXf5O-+7?_+26+mSN1;+hLDI)LWz5G5lSyt*`>LWb#=DP=6%o8qYw)+XB^P= zeTYZ(6WOKxtxi+lANbj5pC^r!_T~TcOX)%1*6pL&ZDD`Gl`xc!vt6T@sHMWwOkDIOPl z@t5O~8-II?800lpImp8OEdIUGd)@s}H;z)!g5Bmm8SyRqtewG^R5=-sU&yB4ri+oe z`DQ)HAbW;R3=xr_)$h0Vh*DM@etP5)*h~Q z-+AvCmEH=FQLEgZ9$G#DA>npCF74J13%k;Z3uX_l^%9yoYUY9c?BQ*^(za8yjd%N| z*I^}#mj?|M)g0_%@CEQBAZhL!B$B25{Q177Mwp0JSddlVHaUzN8t3sDB7H7`tBKvx zCMFD!u1m*DiAxjCQ)#ueBKzrBaL%6b@y{q!M}kmnM~A#Kt~oEYiHl2ALjbW7WoRpG zH!eG^j9L}%vUJR0{o9zRJjQ^~1R-}eoe%s1#y9ZsVZ*4Yyx5yQ(X(!hU=a)y zi&a>XGqU5GlM&Oc{h<-vFqxTHSmdf(i)}}70XShAG0mvj9s)rVRurVQLX_l2lcQ|BAbae}V5n-KfqG7n)xG=z1tf2dobI$BaWipN_R8r^b*A~b~B(}_)( zjW-$^8nT9J*s6}AXkyxZBfJ~MOQ_0=mRTORYIW?yE#$CPL`ttE%vugmJ-RXUb2i#m z2OGPocxvjvTRpo0@c_NSulhoPtV#HUBicWaa_YYtLeMMnhj&7&3J;m!MboETJM{v-Tex|=K9%2O{6m>x#V$|_MhaACXX~TR^lPS`XNi& zB!-kb-IAq=dgdg(!#0EcJcALF_agg7Mq0B}G8jD0hL9of9D;&^7+xJ>s46W8Mg8k9 z00IhNh{0~TJsK|TTCInHt^itA71$pEXoT$@)&PHlvVk7sDn0g+l9K+x!HVvWB==7b zHxrA)JRg~MCoD|Y`&t*o9{j6~iJ>&FgL$Ob zoW!PT8;6|jl}z=jV^XrR{9XM{{T9@>{FkYb)4|7E5}rrRKE|OEnVgnd8uql#^ZEDX z+DnX_?P;@v zhQ2JZmSy4gzj9?wFln`!WKYh`?L^D*)BR+^hwY&wmS;1_X8HwFBaEv|6zV=A3`m4W zdaes(Ff_Ma1g-bgU%Yq*J=&{Q#PJsSBUaWoz+ym6_D)SH85zxyosJ~E_ymvS`Sa)F zh-{0n3@542uR_d_&mA1N;1O?hrAgcu1>oZ7=(utH%gUn16SKE(<qpu3ANvf#yeJ5hF--E+od2sf07@UIX2&c&_tKqAtsBqaI z&~V+XKBTyNSF|V~{lvp-qxw(};WB+?XQx>_qb$|W#%nkBagh!;j6b~ms+~5np=@@s z79|B+VL5w^7s+IE!7FCV2cZHq#8>_pi83=8xlS6ki7k-$49XLktE#GqI-=fi9UmTi zFyCNhrPM=tmON(Dd~Wv>%SNm|JJal7=Ur0(&nlz-qtqmqyIfDQ8C3faf*o6`w(bU3 zKYlRm_ah3zLHQ?JETjBI7E_|`K5nfIZnI@YSWmuSfR@d2coLDT3zQ@g2de2Pq}Hi2S-QS0FjSRa}YGpV1J{=>XTGc1Aw{Iome~n zuc4h&AsiNez#R;4$JNxD=CpE@RWX(CGD#;lqaoWuN9kFt=RO(kI8h?Xm{-MrG_Jba& z-;m&p=cFY`))vpW_d?$5-W0wGeQ5H-XPg|J*BJ2Rnzw(EEoES7KsgF;o!nIj_oWuY|RXK5?(sV`gE=%FL9} z?YIUTIS^I&H*N$r8NvYu&!t<)$jMcdm1q1vIoLG^>j&4@i}JjWThdY{ZEI_b;xv+K zE3tXZND<)gzl=sVMH%CcrNNS4nzkUw6EyKF>N!14pu{*~PSG|ECFLyeJt~MRe$`w> zMMZtNUS#eqi9>4`?n&n1H@9$E8vb{mcqUzZfj4r-wY+}|v;PDj+&+yIE&VIV{D8|N z_!n>y=K2BV+A1kHJ$RJ4j3OWC&mCEnCsR}IA;nh1R^jB3Cy~bvqpZt5Q4UX*l9Ut| zS5}Sl)r^}Xpy_gESd?5cRerIJ5*A!GD3RA0s`)TzWiR9u37{JCmdlYa(8J{ z=4r$ibv3fY?xj#~o^>Z_XJ;N5FY)gh6_^_k-y%IWr26t!9UL550l!tZrb1Z^SGjUw z@VKw9@5aQWT7OiOgqtv*S$~|*5C5SJ9?tV7lz$sn2yjmTVE zr0kb_p;;D8LFCx1S+~{Kc}tAO^7IG^2%7Rt(3X!t9^+36a{7^!oE*&@lQfFkV7AeO z>P6#E#JNb>ueWTfc`j>GQA*k&x?LoR2c@r)2`y|Z)fQhj|HfP)S3Q%b2Fz|qNC^tGd3n{i-)l_6&{Qzc)YX4bWh#3AN=flGY6&f$%b(lk)zZ?!&`yA|Dws5&GXtG% z7SjwY7o$=_YIU{Hz6Cin{-bsAns_-ugsGX?GK#s{7y#7FjDhpDk0jr{P797>>+cFV zm zDPiScFrl5L4Uxpd@y*e#{83r6L#C>>&_FCQzYwWkljONj`{X(_U(93{`iOeozm)3^e^)CbR*qvB?9P1&z6D{hbq-sS@GW-v` zNY^f?@tG<4D^?2s?pR0A%!5KpzI=HGi@>`W?tUNp( zfuaQS7+A>6HwnDvze>9tjF=v`DtY}W>J}DQSzy21VRwbUDhK`sLIr*Jc4-FPrzS&d z%~!$A%~Ej>iZi5Cn7`dkB}d zyp2g0aEMb`fU0zuZNw`LncWL&hu+6+IY^(q3lt@Aosf&r^`N=tTP!K=IQX3R@LP1# z*|W;Ks|zwdi<8^IF{tqD8RFO4k@9-dbxk5Q#|Bz0%#@yg|LV}CQ;Oo^SA*}c+OtQV zcwwmH!NJ?mHu35JPr`ApIe2Hn#|JnR!gVX1wpX+BN9PK-d3a%@y?*^AFE5XM@6mkB z@LU{WrQ1`&tE4X?QlEa*Nn!}dG4FOV4GF=q%#1JTae^N>frEtSuY-3_g}wxsZ6fM-}0&}^Y;H=;B@ zfaZF6d3j_`YH)CHG^j{$eVFYMxFg^i7+F|B5rLZ_)MrZ&*W}}(0*n^IU2}7pr5A0m4pp| zf+D$aWYa0Nc4Y7B{%teW1=}V@mjDvT04P9=G6TR_-=UVKl4H2Uk{p9Cim(1f<`O!- zQ6po~n3PoRXdD#UtU;F zu0*bDXDel#n0^bXi>z0@KrHdS8@!=Agqd;P7faqQ(1kFcqZK9Z)r;5@$DM`prGz<~ z%L5zsinBxS%R};2a?2PgSJ&gl2jmKtQ<%a@!maIsp4Hk>RuLbr@0UExir0s4Hb5lT zS4<>t=imK-+mM0VY=WrRQz$#YiavROqlT*b&f#IeLC`tYO{a+FjH}!Z(@s)LS zU?l~CPJic9U11?7kfO2<4n?O7JZL==D=W0$Rk8bD->$Bje2t9-y)O;us+blYqp2`M zrM!2!xp)eF<714tBaxh$j3mKL<4-?CBP)!6HWCjYDg^FQ_rwLfdVR;Eh@$m_h;SPlTAVHy-b%@UzzOC;wk~@Wo5Z~kdUK=K6gW`~%nYk82?83$ zJk*+U&xy>I{BFon`3FC}*|$DAxzKm7{LgVR2<6f$D&bVNUA2G~N&Mr;?%a9eec=K7 z+c^H&|Jw5c@Ov|LAFfh7!u`$Luuh$pmiG9S3)NQ{zl)12KoBjPZAKO3WT%-^0>4O; z?O75xmT@3!Q}P9YK$t)S_9QG!ylRT8%MZCUyWK)-y3iH@iYJEV*7Mk=9~~R(;ige5 zd|C|J%~CyXt)k>dZk@Rh<6OG*fi=g&OTM*GZfk9>+y_|PlA_{rl#EtQiDZ5x0c~07 zK^DVFsqd3`Td4J_*1FsJwl{uN_ow1h$UiXnm^W62)kHb;!FsgXvk9vS5rJ0koLkaV z{kC|!T&tHMm7Sa@^7MFMd2`dbd-&^_Nk>x2<-dv%L&9Sr zBs*OWFrzZOaaDWI^}~inIU_JDSkJ(~0#4B`zrPqADCjTqh0(BFtPSOxcE)gn<|}-< z&V`vV3Emg3lkS^BH~~0lCn~d;E{z&{^0f_JY3q#;5esC=Z|-uBH|vFkX{tX{Rwkt(4C79}OGrqJ@GwgcH9=(takGuK zsaxVE`FP@UN@8DCZSW1HCHAViwoUSkN0sCAc6mmw(APP;x1*O_o!hr)d1OcZ_VzQQ z*g>lY4-22`PO1RkH}e>b>XEU5AJ70AB7kqv4&k14<6RjEG#^J-f>5wYqQSL3RNUIy z+Lgb5|EA_y-vNPKBE=}qTDUWiWDpNOy)Bx=Cv{0?$Pt2(=UNumGG`}E&8wD*LID#X z&u_XN+4=YHbx%*vjVR{<;jv%`ri;#)mTT_f74{3y2lMrnyu5^gftnf6(8nm0zkjRi zxvfb4ww`z{h>%tzoh_u$iq;a`s>9jPb|wE%hYWEpo%(IfZMn~n^@8x@v->g;dJX7{ zw8uMB^@f-D)`zU=9UA^h`$=UjhtV6E#HOg1P5sxI=urQaApL$6A#EAk|6|cw)e()T zrL4X44%eDj4Vi8pg5(tCRueORNfXzOu8(+pkZ)Lcsc3!pl!FUNQoC4>B$+$JwSE!1 z;eWA+gIpo)&FWY?>!}2cNW!RCHs_;oIvoOV`&UuXqsNa^p(niN`1|kQ7lEELV}5@A zaXv4F%8a{#5}8?9bl}d=)U2y=-Tm9uWnygX2ZjOr*+vk&2GJXQaqwudt=;{9r8qID9aIZ|036 z^{Wp9&wr=WsJ$Qv`E=VrtyRdwbc6VKrb=WXVE59`bkQp^jlTW5`;+naPf6E4HTXpr z5GiuXcU<#po$pGnJk~p>-OX@FTu@pRZYN&6&{yx$l>AG=@RcKnd6FY{>|wRiC-FPC zYF^qCcXu3%oNZT$%;D}{d}mzpiX0n@xB;XuaB-p@VW@D4s>v3P7p|i8I zxVZQy1KMxEG5*`PZ+HR`87e^IgbD6k2f*~-YmB)Gf<}^#;3n|x79MNWv8k3dU2;V# zNDioy%HQEZZvA~gH9>;)%Dc5bqW`|Fx4a4x##uARca!RTIIxva<%{#!a02;Eia0MS7m&2lb=};~TC4gQUu$IXCs8T<5 zz3W#-MURcSc~W`#h!8ck02Vt>+>R6ruwWo+VnkzL&Oje^Io}^*cXislxDcLnTT__y zz7&#@^51rOHyg+sgrBXEZ_?mTsKP%}S8|uwA{$@fBx1Jfy4C(yBgEb<_JmusCk5n= zssUv}ue!@+d-H@C57i_^dARq=h*Fpr3;uh+ym&pz&ax#%r_GW%NT@Jkf0SkLgGjm$ zrCN_P>E11}?oYVgnYgTZDN%!aDBkvZSNXw|C+J%)S?7l~oBN!8CvH zwe}P6aqjK{U~pqFNF2F)npy_IGXakT_#-fEX07+-_kh-TU_`3j4=YquW71_owu4at zlsE}dz(inl9Lb_y2mqABv(WU3m$DCUV<>u?$*SzUbl980=;WZ3__4ZgZ*QefL$I@N ze_nO#A@(Xcq0Q0*=7T9@#Db%VfU$Fy`lpoew4nuq3x&aHbJBApMNTPExRWKn>Q9a5Y28I7N#Hdg0x*Iv zcsO)-nSQoDq~-iX^K0%+=5Cdas6}UZ5}5EFRXEB#JvgIO{8vdlowysc-CRz3D1w*t)ap?Pg(va=TxWMqZ@NS=EZN_^X^5GJ_1@-fnQv{Hc zU5at@_ZUEliehHh+lFk={b0ZsJE+ zy7}kNpMgl9%;r};catINv7|Xz^q76F_XCC6FmKBP&D;-T0rI}|B0UX{?fb1=VnKE| z;YNDsb#&y$7*R0zxC^w=^y0!7q#xl*x2AoGD-vrCHmABX6207-Tyu%R>?W}J zHaR7QMz_@eN0XtliF(KUOaQIPWR*5ZL#;kcZjC$1l2$Bd4ZxpJ%w; zE_D7{&WcnVf_sCbDwf_#tRf?0DcM|72tf?o#87VOU|*j&U>_)2>w&d>H!$oarKkIY ziEE}IARom#quSaUzMPGE?&wHZWYQ_7!p-(hZ+dupPGj9pUlH7tpl=(&#I;0z{0V|Kio*t4>- zlJQzR$sl;qa&$_&Xxz^v0TCZcV0D#g>J9 zEBvd3k+Na}e`_?CivD66#+%49_%O;BWBdo=$_n?@tc-E4Uq%7X zfp5d8C5eD2R~7OE6#6ihN=*mz&mTOstaNiya`GYoV;GBw*V!Dc!<6UY z*T_g|n6SWiCvL59M07719q%lhP2-BZUg=FUJCOHKe39`Ri`^86Zp{upx87%kw6%He zWv3gJ$AhIcjuS!g*KisNZ_P@*t!jF$WS`1(fQ@C!X6kZi07E84?Ud4egLrHyXf^Ktb48;$b5-0w zM*=mqys^=YR6wCnf59~N?j33VP&@2c(R>aJuzf-L-@JYej0AKdB8hwsiv@1`78r;3 zV2+kJ$lm@2U=)KdSj6~ln#lF5=u-H>pAN@@kY{0OiDCSSMa~KY1UvB9`zBqZBO(?O znjTUR%Zy*=!z(wgHObZ5H zNI++zB{0Nb>@$EfGxPFHK!D28Ec78`Q7?c8jZuBT$x^3Ld!lC26&KhtM+crEm=l;} zfg7JV1%Cx7DatQj{(ti{?%im0q*mg>#L(!-SM=^_4;tb4_)g{9e0O_h(FgKxObDCq(l6tMaf|&y z{8?=N6)ouSuD4qm?Lti~Q}EofvMk=#j#>85RQB|dO1}HCT(1#l?lX1tRlS_)-*WD! z`YPOkC(XS7iUK-mHf^nQ7Sh%Fy2RyffY5rO z2-8XKdXo7=nAet$PHQi{T`tcLRc!1PK(Q?YhTCQO1MYaAy8*5)xNpF@lTuk33s$pq za}ZKNcmrRAeKrO@=;%<{RPW!ZJxAN*uZA}aK&s4Oh660rV21)#q_wrxjzw~5R<*B7 zY8PC5zcvs2@n5!_ZDz(xH0S@6EM_vL*p ztuKPjLr6}AHO^H;JXnfG2GvKk$Bxc+yIs-5-eu|WBlwiJ@XOgZMG;x#%Y~3HPa}{AukZmh0O<@O5v-`sN|mVQ*ClfD@|={c z)If-ZE(U~N{EoS=eBVQm&X0GORJ62K)F}bnV62juPk2ord&}DX6X%UrrReFyQ)RUX z4E-4(ayAnr;GJ$^Yx^afQOO=;Ua*w5g4czGESzAc4B2=Umk37d*#~kxmk$r5Ltm+80cwiGc>OTWO?Wx!CLq+d z5m!Xq8!!f8%>CKf51=zmR619l${`gN*7UtUwbbtOl5w$s!#MLm)7+G=qQzIb6ankj zG9tdp=Rb>e*Z#xx5pf;MHNO@fZU$wk6&iE{1vj1ro#2&tKM}=o68d!MK-byEJ&E3? zd+CgyEC+||Chp}iepW<-o_54s)li>H3gFwfz<_G zAjq*`zHP^-|AfF7gdb?67;Y7OZ5Sgg#<$zsYd;cpF(mi!HpX8L^JduU^0fwYYh2r{ zN;QLFMq4y^^!JDK6AK!U0{~|+5(en|4lL#YMe_VVx{slSI{R=!$5fV6_?l&QDE7GWz}&=~@tpVI(VB^N z+PmI}IC=rOvLkNA8pj=)yXlT?>?&$9Q8?9wdZ7eQf0cUUk{jky@D$Q2@cS1(AjL1o z^@W1DMHHZn=KOhne!kIT2Rp2W5MgRE6D&{P;^Wa?5>!-F&~V+`s?l{I0@&h$ zhzxK}g6IIOU=y^K{3C5pxt+yhPBhu2l}TYjN_I=C|JWbbTRkq8|16j-^m?Bd2N&n= z@@8#jZ!JGQCBoy{^;^yPnhtiFfwSX>E~Jbi3G?~u(uq5}+lgBGX%|-Hv4W|LY|(h_ z#VwJ;bHAlKl}}boKhw$A{M~i%Otq2`AeFQe$>Xz`cM-h6*2rVem|tpJ*`+)X6>IfW zwzGSw5t@{5h1jr_BQy`8PzxkbnC{Z+hq5C!~y0V+0tLdcNyXLS;PPHDlNQy h`2VZ-hYK%hqovQP@>$N8;mvI}4gGc80%3WclI{GKL4?Jip`HAjn?KWRxE?Ma59qM1mZ-5Mm884d za_N?@Jg~I2&E&jaMgKFNbns1c9`-~Mcq`OILG|&M^#h-UVQiw8}CayFBLu}%Wd9k zUC6Igw&UX?ztM^I|Kb<0+8NK;;QQVtS1BZ^s;UZ$j0`j^!|Zch5Frd;GPSkEm6esH zqM->G-@tE8+KubN$2V6Vv$@+pI4JAkA?hW;Xu(e{5)(MT9Xh{V91*0Z|2 z`){@d1qDnuZ(@jxi?6S*n+C?bM1i77CWFU;uQfewXw>FI|K!ONSaO^WX<8oNS5LUsn&a~8V8Nkx1w#q4M5 z{olXmLXonwyG@3R0b7GEEoEWBN=JzGdvo(?^;Ce0wU`~0se!f_1CfV^hr`-1{Y=9v ztZ(1G!4AuKd5MvbkSrXXF((YX)#O-k7IobJ^*~2YkN?^}0h5FTgYUkuZ=m50$-f0yVz9KA;Ngn@~F_9=4LUw$x2j({Odk#j7|-7 zP<$MB?#L@DD(~S6My?Z#>Yq>gHiw+{1y1K!amzN8J)I`iCwAT_cGoxff z2^V)3y9^qfEO*+diTIY6m#G*SLVj!(VumzR&Eq?Z(!(yB3S}%FdN5<7iNwgl*FQZy zUAI$+V8W)NrtVl-Va-%$H#9VKI6rpGy!Q&TtE;OcMSwx3l>$>CSJQO$bJFpKhHpg9 z`3n1FtGDOQ&8Sd1X<{2PYWD#P{>J`6xBBpy7zKNK?i(yD@F~v@Os%cgK2*n_o_d_a z3p=mQN3It1+fK=ieJ@;UYHH9;dfk*x45_FR2ILeaZdxJ;4f$R z>y-v~n7)0^NsL8qZf>5Mo{n3ury?tRZO&u!PV>L%=OVBF&V1+%+uhl%<>j@irVb7c z-Z{H)5Y4)6aY&2H$KPEaH&0C@DVjxy8ywKsTOcq#HJ$n=@G0}ayc$Ej|CnuU|G zf&yl(^oGH((JkV3GIy6>jj2P=yar9N@_UV ze>2~;fvL-tG`e{R4Hy0j`9p<&R~4Ow80z7h?bEw7C1Q$lazVA_3`*SmwT971TR2%s zaQl^JO-xCN729_$O${?=By>dbitc6W$uE5cX}Z3S&BMI9I!d7og5BNSu-I54Wxw$D zS9GCORea9Q&h1;SSSA#H>cz4$GHA2G_SI7|hCxwLQF1COxQQy3?VUpYcq*6cyKbXD zeo*f9^5>6XNA?7CcgtB=STJ#M;fjrntN-0UF|GSKHa6z}@1N_z!GYLLk!b>`<|KYbEH`fEkS%kT1bXe0Yd zDk?HYMn--{8rBYlzWZWCuoQp)+T-Kne|Z#h-~;U_dkyM!Y<9MVmA~DQZuairzSzaN z%jWmRDeD}0TU)Lt8u0@b$H&XDyNjWWo%VHD2dHiHMA>V6Vq#Hqb8~S5oSV*~sY6x< zw<(b47Zs&ZDdd0qXJA0t+0`{KKmQuEKxj4T)fJ>LHf~ekA^+d!pyOF(-{b)cqzU=@ zN*ZzNx4US=-#it{fMdSlSuk9%siR&@3N5ml?KCPp9A`371v4&yNs1VqBS{6m|J%Ac z;e|A}Y(Xh5kLZ6hBwEpK$=3&$Apff8|=r~`j1U`QJ7?+qB zbh!D$d~3QkEIizQWG$ck4mKJlCg$kWlrlNrGo4@=)X*;f<-XW_=wnd$UH`UzF1j{d zqcNGDDxe?TK9Vib$txADf#~&v_-P#zva${)^gf zwoy>3$dZ4mCIoHi=;kw>%kwqK<%yDqVKFhiuSUc}hcbk_mUr8E2(^`ds#-=)>>nSC z#I#&VaA!)kt)tLnsfQNl_|V*U{o|)yQm_hrzRRpis`T5}=l5b{p%faMnw~KxammA3 z&JcdN)N(YJQOkqoXIv5b&9>+Fx6&%J9$e^3T2n->Lk&jU_yhz{?L-eAJg9fwqCw_i zZZ5Ooh`@Dv`si)%ZBK(155aS@?>J`I1zSbhB@Ub4@6g?M#V;!>>*zsQI`Z8cV6S?; zZ4AqV*&nLI-fzK=Peio5RX5)oO)G3=mrsA+)%5D}A}lP-&t#?_clW-h7z1EGqb65^ z?bb7H(fjvNckc;qiKYti#r{;N;f7w;IMG zM?>wfqvrFi-fl1wp@$*R1$tD)4^`UuyKmLl0%2KLSfw+qN_DuP>nsSjoe;DhFX1&G zd{uS(+pxCa)W8%r#v#X1K%bmQq!o`KiL1-)tC)z0h_}V(CeRypx)?8sLka2gvg$v4 zz;8S5;clklRt z+T*!GgLasc`kgE zqxZpeZj;vLcVi7>Hr=qvyWON3rn8MMyct6#jy>_BH%Gc0>1OPOF|n|;w6z1w`(koG zestC;6%WageH0YqVRHu??6%7*pXj4GPoiwpL}wwWGvI08)Zkw$nptvap(BqTud+uZ1lYj;+|gN%P4nbF97n{cBctvOc+PU8Zpc2De=EYir3in6qSvH*W} z-4N)`y-}P0*XKVR zY7e*oVHPJ%PPZZ)*G1k`BE}kB40+?=m{o)Dz z?{0lqsB)7wq+?Jk4sC2~Ag6QZe19arvXYo4I)rNjnE)R@lGMGNSAfR?sQ-@c-8b9* z9=jnvKED3pVFhh%l913)K3-m_BrjecM?Vk1_%(HPU8_!G+j75?`xRlrlpD8107O_Y z;{ZTNN=gb$$ggYhEmk>{sauQj={TJJf&%oRp&@}`Q@36GLg*?{v9YqH-!K#9qfFs+ z!HQQw(>TAFzY^E0FeXqxNOTj+_DdsT&0QK87^wF=;s%~$JrTXX+B#%fV|WK}zNUcz zc34tUe7rw86$u?g}pVRRind0$|Tf-7S zX)gCt+7?pU&TlFxDh9sHkLyv)QpYO&76DAw^yjA+I-Dn75<0rNi_jxDZruumMNkn; zt*NzRvPeVVPRpt!y;OGMh1{Kn>F}yNY%sU?M|AE!f z7g%jQvh+>gMBdxmd#5j$U<1E*%M}48FtZtb&-p%9S69J5*pj59k zJ|iPiw^VN|jb}p*%1_vSroF=V;yIL?z=FVbgA_{o%uHL(F)WnB~#w>4?|!-jr~(J0~W{;7GBtv!jl2*wz}tOk5t#m7T1% zCK8N-a+#f-J%)mG++C7)c6r^gNEO;;Z}L%#^N|{RHLEmnrTe~>*VWlP(WHI*zLty)l#QyeU4O&jG;qT8Q(ej`udhn)^hp;M#KV-kKII<7-(s`00TP0zD|7q zZf0W>7V|}rh5$qa1X>^y4-Q0){k@nj=$8oHUHo45Sl~Ob40I?k;FA0T0#z^PCB*jn zS%8@6uyZDKzPPC;@-Roc=7YoQ`mlI3Yp)}01Uuy@T=!Yh%e(u zqPN0vDkv&4TN};-LU}(gFVE)cmk43o`6`d&-cvDj!skF_T^no z46nsbjPqZ@Z5=?S0Sdf0ZFJeB;JS5-PecS8&^(AGFw>!zPTC0}$_*zc4lx0h++y3S zH9`d5JsgxwFue{C+I4F>Sn&Dxc9!9f=+bW=4uphYI=_C6HLtLH;-$k0KXz>&nSXn) z3nz-WTd)Y`^dgV%2_DiZ1O)}R!noMjLK?{lFt2$n;lzVX@E@-Tl{`oNQU0WBVSx#B z3&Bi_ti1Aa!i0nbB{elUBO^LpDI6Re5J~{PR?|!u27NItxNZPg8#)mO2Z!H~RaYpZ zPZ+ZQu$ai!Y8e~H?Cm*$jDgId{QP|9F*38CzznFO6`+;oH8y%odt`=pcFK5dd(L;g z*DXZ}fBydcd)${ThZO4BV#?8Vv-VIuve1D6-S7$u2CuAGq^hx>(>oD)=5(`Sd2e-aePhFa*1mX85+)CHRfITL zSfC?pH!?C`z%;T44FE@Sax(P~mRWmYHa0e1_(f!Fsi`qZN;1MP5_eBUsc$ z0z8z|2)&2h!#wN{s2A;aLhvltR2&ygxKqqQFihbwQ7|`Oj(Tx3Oi?Z2q14&wXk~sS#FjMb%?eOprxEP{D9EM;orB7zv ze+^tGn%X*Xf7QRI>a>T0Qai2SmF$Q9G%k11b00})j*ge-?$D6~Q{?KTmbMAWfqw@C zpowxVv9b)pR#{kEW6krkfUE|aPen_cuTs$3$^cy_-LU|z>J$3_4s!uBIruhF%*G3ML zC^tY;K-5#1A#mUEgjwVt|bGQIJUoXkwQ2M>laACA`7i`Y$l#Bg_a zUtq;629e-+DUxUO`*#Yj!5RQq7zKmuhjvv4l>nuID`L!(xc0whUTlNudc4y`WPNBU zt3!i~TIg>{)L(n`O3C4)JLFH4bab_f*U3P6km6UVYXRiQ{^*_l9QZ1fVLi^m*^zh5fSxWYXFy;dQ!E4B9xhvLYPEh0b6+&_jdA zHwyMhsHww&Hn6a>vmYlv+YQ@n3<{=s5THnMq4?Xn)dk&=jgz2*qPw+EHPI4=29_@ZQC|ErRbB7A@ip_KBqJz+{&F1QRXFl)MdqfaC~z2Ss+1mK z1~N14nF&G1kBE!}C7chSB?wtjF)`ZG`XxI3LqoyeYzbOj3_;StUsB+WSw=M8iErPA zI5nZ}ktcpKp%dY03td$c*3|3d1AxQvXFMg=*=zABDWTBX@`H$ymnYZ6$2 zB+JFc1sGO6KNUo5n6@CL%ARtAq5*3NC2ZNZ%ZP9@M5=3DE~tZF`e!tB32vcLZ( zc6Zm&>+)pn_)ql+@)nADpe5hZFYlad@qDWM5q&-+HI)h(?eJD8ejh*bBN{+-baY3` zoN!U;S@3~1fVHJ1Ghp^ob|xq`c6M^Qy5IDz>Z|$g-VOR$_tG4?C%5*$INSFdE# zI}+AX{!ImYRcyq4pYj^qSB(;OXOMPwDbe8qoR{0s;68oRALPWul$7!HM&UWPYi(z< z+oO|{BE|OUL_{;~#KDR_Cinp0-j$b!n7pB2Ftf&YsdfnVFe!qElw^t_;#7+7G@*$ZQ#PU)k0D?1=QSZmVw_Fy+;3 z`)3z7lxcAhL`Aj4LX-ry3uu?XVll;3)zt8pmY13F_!7_@83nUU? zTk`TfQH^FWb^BuIyAT|EzUF($j;P~+>eQb{QOMeeGpQ-v3T7(XIpK#n4Tl%%S0-0; zv^N&ST#z;iMlx^$JN*9qu><|Gu{zoASD>6ov;qsT_zmO4DVWuOFW%Zm{rdIm-o>(E z83j;|u!xAf#ZVMpetwxi%wMW79t|Hq?oj^s07fxLD$EiR632U$%v*_2fEO1R`+79S ze9Z~{5nz_da_1!yrirwLBI+wok3nH)5DAGkx^X8 z)qMOol9XNjEzB;l5m~n7g?;y@LhPp7b1eo{W;aFt8oz$>$&UKp->JYaU(^t(=u4Ua z2PbEm5bmxI^VZ5C~pq%pm$|z1;ooZfF;jiw@`R@G_t2Q1aW$Wg7W1(_~Zy=v9z-fSQr zB|s&hTp?;~2+pCQrCs~O3R);|2Gm1Pp+R6M688`yQ_{iTy_qna5f{f>(X$)O|K!X= zjA4?JSmIXLCfUmUxEK&)WYTpFZ&R?cvpJ@T*XbLey_s? ze~I-)^jGKd?!vF33k4KGGkfq#p&+hB)MyDg}3z!iGqX@xT`f6INq)*^C;-Ns&UoCJZ zO$GlhG7T7f6g7v}IURNAFFYx=u9^8uJSagJT?+lQWW&Lx2K+ zLI-*-CnsnB=g(;D_Ng$>LK+5{L%`$D`D$_LD>F03ho zC3!hGG0Vi{z-JFx^(hvCMvl4KHrqJS8wQ`Oej@|ahh z7!aX|kkN+%i;%86`Of3F-)tR0qeeO_6hnu+IB}5x$9Rh{EiB62#7Xv$)w7-l6?hMD zSh3MSN+NJt>>dgS^#vaH6(&mjr$Y_WxEd;@d)nfHCILCo&H9fYd(I0#)aYBPIk|yT zK6-+?>_MmzcX3m*a`8dr;yhOp?z3mlzzFXGjJ;6`G#P9+)a^Sat#p7z?v_PO z2#+|@0Z3EYl`44V7QD)Ks^>Vt)yl=)YY<7(T}0J-vODUtDb6%Xaq)zw)Z2?@WjpZ zBCv*FMS_AkQl|j-6x=rp=hx*RgOilbmwuabAi#1Ecj4$-OG^tVFvVzFP7R~qzL8g= zd~u`$03Mf;B3yQ3(VYQWe1CtxAN0G&k7++c;(?!7Yy=CPlUV-tlbswM2}i{$#V=|o zRm-0(KDxV9_K?iP7erV{pr?>>sqkS@Jrl?qO;owLx3`B#gm&|-Sw#nk8}rG2HlmNg zGwM=(?&@D%TQpz|phEA-296ecu-^qsxw`nmxqG(?mJ_$o5hh~qpYjO^*8QYk5ITy?Jyj{(yOkqM`_&xO9k zeKxQuPIMZPN_^_%^yajRS(%eTO)dx(`dnD7s^8$M!sF+(w$E+R$^op)fzXET*!KxW z)R>K&meyE}mcfxs{&qv3Qn$jphBgbc$=g~!U)8HLb9Whs)#%{@i3A?G-Iz zzhufLwe=jdOc}iAFI+wDZjr#FkK(@h>c<~%i;|!T=#^zhU5WdE>$mvd4+b)Z<6*{Tp7x@6lylekUtr*9Pf+QP|9 z*y~$c@(&-9lH=!4Nu+0IGw?1ixZk^-YynoXf66{p?bN8I2~iHuXws@vgH8WOBd22> zP>-NI(K^k^aWSCsZI*^|b3M76G~;o-D^U&9o+#hPJQ1HD{6wa9^rsVT+`=?{F905w z|4q{OQZ=!ijp`AJuE#H1g6rly@PNm=wnsMeT;v?INS-ee9fMurS2yoN`?7f#6NohV z*NtL<>y(tCz(Po#fB%575XyASl&_*50w`DP;@~x$yHHQ%F-9>}W>q;pm7i}87JI0u zOE#lx+~2Lnk6ek~_=flOvSrfMfQ!McEV%Rr==*;gD7(FRiD^45_%VW3p}W6@eIp?y z?NO?*0wqRSr4e#TimzV_0~13r7gSuYXGLUq9na8RuZe<2nue$)KqxD0IL-aYC{)7#i+5MO}I&|lAfS6)C9pcv$b4%UA9wA4i; z+5Xb^47XL}D!9Jfjpw6U#ke^ra){?6Gac{KhGV~}x#K40%$MEI-hIKBYw;`<=S`04 zsTv%8=o!^kf{LTJpK_+Et5X`fR%$W(@>sSR;saMg*Z;B=4<3-Y&a-XCuCm9%kf>@O{2M$7 zFL-+NR~({dcUJb=&9k@JRmZHE3Cnx?`ZnH%e&LQ%FjqR$wUXgxyB;jp2ey%!sVURS zP_3MC^6#b_O7^lzi>3k5pS30C%^szGGQ4q4ax@~7*kc5E9|_z^8GvmLM;huMtPcO% z&nZa0;2cFMdeXZ14|RiX0eF9bJb@KA03})>5G)5!6FWh`;^83z44#^rDfj&OW({{8 zGBYz>{S8XLg(P0ti53hn75dm`3<;UbG&@L5C)XUAiK1_4e&t`|8vI{p+qEf+P^|yd z=-mK+mpmk62S;sAkWjgG7a{E;%S*Oq37%pn-!}$a4RFhLwg86~04*k+&Y zFF}ssPUv*H7|0|fM1eT&%dwJ#0N5c)cz#&nOJGA=_cIvb7=NZTfJ)+Lr$F3v%@Pzq z7D74^2a~J?oum3ko z1S1Fa9k>Cgv1dn1(I?CC7c)? z6;>R;T*eV*6*y|AGpw}!(0ZMn4+6-Qz?$dh=SQ>R0T}`my2uDuT=K8Iayaohsu=NU znxDa6lUG&613#Hw`SijEcxaGU%%FCjUg<8V2c{$0;?U=0VVMz)6y#TL`IA}rQf-%q z6~}vnJd3;aJ+98u`C7~2>(7gAjMslEL{5hH7|CMJyF$8B7I4h%d4 zaxv9KR_Qpvtz$VTx`%osa)`iXVz&IAN)ju13+>mRUL8w6Fo@yBkg$pwttm5+7qkfj1zfMl-y5C{v~fITj@H3CC(lE&ry4 zz8+Yhe`gx5<+y#}?&kEevSRx>ExA@)TTCy8l(?zOKVPY{wdqZnPdglohZbT}_RP z^Gmv=KiuSl0~{LEfu5QSckBH6daC)8;n%>D5Mw)2(w8B}``=VlLjip1P6rk{k_Hv! z-S=pLmF@zmtjcOA9izdXBG8#kBe9ZK(fPX?XnI=0cjcyj*w%7zb7#Mvl@V(mu@f3! zdoy5>nwi-RYW*)Ud2%z~KbxCfpoAvflNMXy=H|9HE^j(N_X3McyMOzc@u+`fT z0$QLKhXP07ssVKfI2U647?$-;B$B>(v4y8zF+VjG4rvGQ`q7$Guc9b5R5S0~I&h8~ z=R5QeXZl_RRr&n+EtrcGtdsllY()jk5n%~`USRide8JG7%dNi!W%$0d^qCdLS7pFO z0LA>k;T%zYCgm(G0pX70P~T&$50C4(SGE&jH6an3`|cgWrXl=`RAcdzKo*bVav*|UuIy?ft?1q zJcun5xNjp?EK-Kk(<;`F>H3%j1V}+TMIRXichE0A-BwLK5Aw~ZeqaV@{2zX_d;|Rr1_Y}M$u_srP=bwbpW%r+bYh?t=@Y^D+p}2<5c{J zgsNJGcXw#oZb0=m>z)BeMn))GYy=U>ofQ-@Q=k)qv)0)xBv}VaRa;xmFh&0enB}m` zHpA<(5ORhse|m9x2wADdA>~H^78LRwja>@0ONimMm4|-)C~aZluT*h}7OpVc+}q$w zLcX>GN|{ONyUAS|0+2kwOOzpG&cylZ2E9m0RWBW2!9|>cc!R|?XV3A z+Vyfc{bUpr+QG$RHl}wKWVrR;ek#Ib^g2ex#G>>eCZm302~!IMR)9``+Q13bR*M}n{5d=zCki!%^GA|VvEW8|4BiWK*n zmVp6roWr-ZeZ&ER<_VH;R#uik<8(4EJO?xvGl*(Biw8_3{n(V3mF;TQFuRG>5WlV# zhRMRrj4C#g4_O)jj{@JTzzhdIRr2LsuMHV;7P0$>{F(Cxz0hkNSy6(O{xG3^v zlkU1Su_@S6w%@q0^KN0}wL`FJ32|dUbliDSy>#dSVL&9KAzi2)j=7hu*)VHw#Muy_ zAt{cP@_ccV7R=#noz%26WsFBkinOTHw^RWQ+A*=?@16(-4&Z8ZNSq-@~uA~T` z80`|oX94L0^a9tvGvU@b-V`umCYZp6fegVCgh3(c=ibkN7iO;u`DtiK%usti%6Svu zLjrDLf=C~nXaf-AAyHKcn~9i{Km~hQV#NYL3`f$UNVWhB6wux1O^>0td0VAC|%^C~W2m2<`c#p>_Ckw5G&5(k}Z zc*PD;@-icMKrow-J2-G0eA;qwHNlve^FEr5Q+Q8|aavNG-8tg(PXLyGI?X*BiUq^x zu+$_M!5E(&Es79As-(T`aVAk{JbApO<$LX&R!mz;km03Lx{6nTcQeO@%=C`pnm_+ReMYw9aI;6JV+#>jCq@ z->@uX%1!~05PjkPo7-bSU@+aid)E{`2~O1U!MFwhft#FyaYzGWmps9Nf}Q167M+9% z1t!55#E0M&iOI=%H8sw?>r!Bs0>+@b=Y$RxU9mzOmCS!Zc$>y!&lexw;zobC1-Yxc zLPAUHWBDT9r_SvI`7lr2{#5mW?ts-|91F=LkK2{{GaB;vh^OS@A_yTTUS3{5h>GPZ zyqWU6ICYu)^x~G978?+kuJmUub;jL}agJ9_#?oYOyB4J&NQWT)$;mJX_c&?Uj{!hN zDiIC~(mG^r0si-j!y_}hP=D}Xtm|L@2S~`|Lm~^@=jxb`q$DJjkkmr5vv8I^MMIMV zz>B;inCCzBAzx-z)oxq+wbE-3pPZchcs%Da2xx=1<(4oRoP})fe~-kj&iBDe!DOAo zPjmYtH1;$=-G)VBe4=9@zH~vRPSOg?@%45D%m(8<_Ghkpmr5ee6(}|@QuKUyKT~%8B-2c6_WBeJ>Yb9<+k&eq;j$oxK}F9%}odd%&EahjDiUZ z+Iz7}VonZ{a&Oc`^xV0*nDJtb<*e6p9pI98nHe!LeEbI?vgQ7Gmj02EVucuIXJaFL zHs8VjqCf~0g-!%=uavnt3!uNi$Raq+rf|v28Izro=;%#2OEcVUf`*GKgIc*U*3}A(05{bTOVT2vr1M?fV*c|JE%v zRp%XFi`x}j5!2X|;Z7OvPynC=raUqzrl+UnsZ-(ck+hhI+YS>V`Immf%^y?R%<=kE zlLfIhMB9cn0-XrC#AMLqdIzqR0PfFvMDPWH>)s7Ugb4%aFcb^5ao`7dxzleOC%hORoU((o7hvDI#?^}MJPtVEvR%N-M`RXvHmdpeu&mxtvjVv$Q**E zo&QVFjuYx28F$D(APaXO{#D(A_a>?JQ{to~z0#il3-==okT_>?q2oftd7YYr>?i;Y z1%>qsBb~@!-~0n5@3X~FnR2A3T^{#ILjL!SM4y*3=!PI=djt82X?%$uJ}58hDXpnP z=FYa~J(77Z5De;|yXktR-+;X$<%QhENlL<~p2E+nAB*?VZ)3Et%gDBayHNg+yD(~S z!hlw&XPoZObj8!CYIqZK~5{$d=K{_yWwI9 z7QAJf$R?A+lIT2CuCeEqpi!$AHL&<5*R9UQu23Wu5zpEMGIdRbbRu<{NRxKyw|e(| zwmJ8;EO`R{UtK>s+ohb%ubUM0nE5N@qp~-$oaf!|-*En_K07r<%{2K63Ad)E!gVg0 z`?Zf}Z0b{k|3X8DNTl|)W#D7u;{wl9H_Vt=NFhK6zx0H3MLsbHGy{m*u{#nH5rw|^ zenb8@3;T0CxygZ%G>0pl^#^4zy9*4VJ zFgM`@wyn3Vb=$CgOhza_r1l`II85{RJ;l+Jp59(e4iY8&XdPwjJkMbW$b-)zg~|?r zgPS+gXmp=t&7EaU2s&)zQ%f$i>HmO~3=q?5iA^JjB_IhX3!)U6Y%J+sOHtYJ+1Y4t z3fyExR+HY6zUqx{xdUy8-|-i^<51`3Awr=+t^s4AXLMAvA5|>3b6*V9#rXfQAreUW z_!qLtuokkjwc6g6yi{??$qFpn0cV)cu9A}}8odL&UM}e+e6Ov+52(q(S$Z2;kZbt+ zG&Q^;+CPmDV)fVMa&DPh^()Dz_A#qOjmC5N_Wr=Tadvr@N^JxeL%MG&V!B6FH26aR t48ON)FmOKnzgyNXS^r;OyY9RqqG{R^G5=0M1Xtcsl;zds%4JLg{s*{uA(Q|B literal 0 HcmV?d00001 diff --git a/content/notes/binary-operations/sb7.png b/content/notes/binary-operations/sb7.png new file mode 100644 index 0000000000000000000000000000000000000000..66b816828b43b7c5601a7e1a2847bf910f40144a GIT binary patch literal 16405 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 VMHC(%KzfyQ`jnRPTSe2`{|_uMQF;IX literal 0 HcmV?d00001 diff --git a/content/notes/binary-operations/sb8.png b/content/notes/binary-operations/sb8.png new file mode 100644 index 0000000000000000000000000000000000000000..7b3fe581776dc202762bf1a1461b25416dbd30f3 GIT binary patch literal 7806 zcmch6hdb48`2Vrju_8{$EGsM7WM@P|l8j?Zva|QzBkRb{ijut(va&)}QrRR)NcQ^O z=kxmyzSs5rUf27q>w3=fe%|+U->-2$(b`(73#wX*=$~hXZqRg? zQMIMN< zq+f0rK9nVHxxLs^HEmCIi#jwkRKoKQ)7f5Q`$A_p8S3)o`!@cp&WN+Sk~c=PwYVA_ zXJY)1_ssi~uT~lGeX^?;Vu*Kcnc?Q=4@Xz_Qp%kK<>#|mdkAYFyI$1PTp*%k?*1{9 zm6VY|lA}cgSIbPo;-ba!%8I#}8N$KAf%4zappTk{h719FwRsEk9iayGb{BtpNdNP> zIW{&n?DL4rXOL$CxpanpA$?E$^729x`r)rX8ivE zAiRi3<7+u*m<(|;GXTP}!v9MB<9_-kN|JHme+V-;h^PW$9on>75;k*Kw7NOpV5hA} zr%kOw<G&1h-9_D`a)c$l z`yf6FRLdz&Zn%yCI#t=hjN*>-6R++yd2TXGB!o___f(j)RC({%6qS@*OHsA1HmHJ? ziHM5kzkW^1H^@#)x-eF(Ve9Dl;ozW2n9RFRZG^t~QT$6nQq1_381@R&_5=>qg!$$E z6acVWQ0Q7(6du371asy2UGQiz$#B3;=?@cq@_Bw$?p%_WmzR|o_as1WI8QE7DUxF0 z-`Y4aVd#K;*fVd~DMEaO_mgE0wqfX{yudTb552wllXf})_t+?|mE@_|*t`^Gq+-^o zcvwq_1rKj;Nr?o!E}9Nh)ysZ|E9qOur~gg(0p~z&<)d=Vw~f-u%HGAE*p3~) z?@I!wr>EGbiDwi~jSbqu*^G-r>gnqj0D=+_5CGGl7#Xv6lAd$NH2LleNJ&eZ3!&zB zee$Q)&13kvrBnk-AgU&#duVQeIx-!h(5SeSOE~ewRhH z+00vaTRS^!cB3K`xM@3^pRR5VOK;9Y9;r)fy%IAZ3{~*k84|x9YK=xS=LQ@-mf8RQ z)a!S3ZfAU zgrcXXXWp9`WQWVnh-ku+wvkb6W+ub)p&!Sx2Chtzzkb=t9RIHU(&jHM=J-A8;x&D< zwXx#9fdNHRQx=$4nk{h*QnlLQn;2lp;&v}fFOaK_j!tlPHWQM9!ot~E=rLn!Dk)~H zPxlfZIU$~YB|82A+M59CI;?joc*arH#)k79TJZMm+b>3KKTS_Z`|kg_(dis+1{K!>|b+!Gpu%v;9yE_(We*XTg$9d=V8sXrLN5jhG7$^h@=Xpef z{WNan6j{p*1zfQFm>5z}mXLBFo6Hnt`wMQxR(WosVK*#5rm5Y%8#!d71j)sF?OIZ9 zZbCu=#lQW1Rfo`8cT=X?e?F~Wsx66r{rZJKK$U~Oge!!V72+`>vx9^!N7V|as8it^ zw|J1V_-*0H9{;`p6#!~0H8u6ct5+oLN0XJG;MoQSZnH9Fw;lhHes_L$EaAInKQVlB zYEe`Gsz#N?pB6h^O-&7m)@2?lV)?>Rv&q-@ZEbDk(db-ZX-!TVEHXtz5L!KYG`P#P zGPUOBwVb3{<-6|)48l{}Wh-KFdbDe6Z;#yrZd%-t9Z+zyeR>ZbSbl48;1&?jw~16K z{I7DMiU3qXK?Su>L|{RH-qcU0qR`6XA)QYvGhwKCXDS9Gws3A!dkM;Kw#kJFD?dX! z5QU=>JnbSQwjzpUlf3O7Xlomrg8Y1(CsP&S9cEC4&%VhEp~9x^Rg{#JJ}#YtV#l&! z-D8?J`s-mQkZmf3)OTgJ@nMTXAUmx0!qi?RS(}>970oyUtB^B_ne`@I7D6HCy#qSK zn{}0H49h`S^Yingn3z)2M=t8nj?T>`4i9S;6&JG!3R1#+85tR+rKLf=OE|qQFqU2r zo$A@TYC(HrvhMlQ&s2de=lr;0*{c4c_x>(>}q`<*^h;B`>= zbZKd6RQNc^uDDLY9#$_J_ zsPpN|m#Cv7AMad|3(0?L`N+}-!+}(c-+5jC^;3)*unkaO%xN|b#^~L@pAYt8a&pq3 z!9L^U9FiX7Zhk`p9jH;zq%tE)l~Y*50~F#qYdwhR_bz+=THDk#5kdyyyi^v$c$ZxT zT`eI`do#|beYVaO1Pgszpr^wG&lQS(zM2CwZN`f9TdT>Mal!(#(X+KvWe*0l!} z^Cfu!F^o@a*jH3A19G2iYV(1vfZ6|WC!r#eJUMc-N`9>~r6@>goOKYf%^ zx+_RR7z&Wx8A3p2LAX1u)@=5wXwnXZLV=jut9cITYL!BrqD-R#?t+#UMgXn9YEo3h zeJ%c2pITwuoLrY8dE;uDdEE!@jUUkk5^OJc&sQWUY-+uAl|-|KX#RL6PMSjiv`Vtv z%1TCU!_bxKs#lWOzaa)|fVxxK=B$J}tc3g57OM^T)LX^#mL!0aC33VRm=a1;>iBNn zG?^u*@4^G+g%5rX1df%J)%!I!ErWD7rcdz68+i!p?QmfVlkmJk5`sur;&kA<6cOBE z_DuEJs2Za&ly7X$1yS@z{Q)A4SK7sj$+8+bVl|&KwyOMOGlp#5pj#Q%rz+E(9!{+9 zLJk59K&EtK_>JaWn^PaI=G1I!MW%`yay?VqrHilQGklbhV7s1(+}f_L23(?^{XGc)mE3n92K8XK|9fnsKkK+RHxDY60Q6#zv6p}J=F{lk*V`g+&= zyxHwP&D~E}?xp#@ThTpMw>iH%n@OX_Yi7-+8j#T7SD{YX^X$*Zh0ZAf3Ls5;dn7}= zN}IF)&W|DW%N=Q>4m{me zAAeHW8Zl)Wc-iUQHsRTR`+2|kO;|BeZz4f0l-5Z>f zGxmcjc1q(88g}c}Z`X4YQb{n?XKIhpZx%dX1A+8fCfbf!c3x#D#OLLE0jH@h!_f*3@-i4oQ7|PU!KU&jDF5ilNnh8O@45&l<4yN z%XKEX0KYLe?3bH9w6L&VC~8nIFDC7-OGrdvyAZ00%ss#vVTG!RTA2wfatY8ppgKS3 zm2*Dcb6A-giC#-JwfgGS;r!ZNr6Ky&*s$IJzD9JWoQPp?>CE3Np_6t!5#)?pv8E@A zZ3)Rs64`Qr%$x6aC=xD9M_|Q21V9is7$K3MJbR*ZajRFQllJe39 zZ4@6?j=i(pxw?(HGo?2tnqJg}J9ZIIGuiXTBPBaIyRSjQci2OX**{Zj45Yr(3#vV| ze3at(l8=t;bERowI@*UMmR>M|l^EcbUcmUh?`CTx216HB5Cw*8aciOLU?lL2BT=Xo zE$Fd18_#dlP}EI)18teu$fvXDj^ebiV$9$)JhI)HP@4?8lIH*Julm*PuhEd0nQLbb zqakll+XgMl8qxaHwf%R5y++%ZaW_JuLF_E=m4{ z!*f3{UAInHFCdrX@#WFaEIiZ>l9{Q*n0wLtk-gXItZJt1z5b1=R)gL+y#53T5UA|0 z<>%B#97_3A0;X+o`?J23Tz7MoS*ZXEwtQMa40i(2)9h*GDQCUTE+%9uXHylM^>UY- zvp79FOnsA($Jc*WzWqyux6JA^B9#m?O3E?m5nE*91ZtZ&k*PS+B3tq)=MVQ(NUE>( zPySxl%o`yBwmU{MGB7|>C~f)=q+e&Dv>NHzH^khWp`a2fxb;U!;i|W0<)7-D5ooj}?Ldm`popXPF zp+lEf0(?q18GS)RgMOP}0~j@d^lNqm-Rpk+>@n=%HiU2704T(o(%hS|*j)t;@OpC> zno`}>nN9nfulk{ChL1ZYYg zCXn*9)^w@u(DNAt!87xjwlVGQ?t%kV1qWp>X7qiSoj|!{JR0;}GdYlYep8bdT1+-t zC}mza4>}bf+qLiA3;p`lu$dehmGWhiA2!Mq4=A!hR`)x|XM%Wm&*SJB|NDIVa~3x; zs3<_g+?*}obltSDx|%vzp4BFl{uVW;PC!f)3WcC)^XK8`Cx^b=b!jr1HbH~3$we%9 z%xnfk);=2HO}VP)=qP~pS|G6h)<7=qG~1o86uC7dKBwvB6>7-Ti)}xCseMGLUtt^# zC3muRH}Lk)E~Z@HKawZVxlG$EzwaTVLkoUwe&=v2QtkvNlHzh^l^-DO!H`oxXh;Yy z@q!UWvAf#3Wha+2R-Vty@SC!SZ;6%yXS-TH_@jGE>>qfPe1Q32d3i0%dP8Vp@(>xX zY$je=VPRoO7i_McwgxnVhfZ*z_k zq!fq_y2{o)2CW>aV$DoF(53AsD}vjdWP+M+H_@QJ|LyMPx3{y%j10P8oymPQYFqFb zr*oG9NjN$_9tvGmNn&9n$K2wjYxB3aJ2&^2${S}pt1WvkoHcz&_5MW#O-Nf2&<0yx zGSHC4zBd~KuhNjB)sb`JzN^ERv!&ea#%MGyICy!XOiWCg+}G(~G2vi5K5}cbpL{z$ zJ_g+t4(1_S#`^+5nwr6juz?baYQ9+LFTlQN`TWvWS0}+n9avGl<3h~trFfO)<>mKF z+i-!Qcn~0@Xl0i6m-}02>fDA02NxF+xK(IuxgOcJn?PzqyA|4AD`K=6riUg;&$q5B zK~q)r>C+qFZqw9%+ybly<;5DqZfIn*y*p*P1VA!irCvO~R^@l-3RX??t&?fA^}{b4 z9#E6)U}33FDNfC=wfc($YN@ZMhR?&~hw^`)+n=vMe+C(E)7SIfc}odxe0 z#@x+~wy>}e`U!u@Iu_lN4?m5L2DhK>R@RcHCPP01t1naT%633~a$bI_L0~tSN7-JW z@VY%IiTV)bxGZH+Pr}navYJw|y}e!fIPLis`UCVcR8&-igoWALE9CE->2bK9G|mMu zVmVv(WJ?L08&66xEkM|mpR(4y%e{%T#Q2;mi5^}W%?t6_c}VD@R-e7FEh=wujln#a zK9~$pEr?nuA-PjR-AzLp{$trhF>iVmk|3pWz3Q8=bYp^4Zb^LQWMX{5nH^b5H{Dj15TEfbhn*3fT>jwE5(zg=vW z!CUn9`RhM68V~me)Z+~{+#8?~d$?72o-&CjR;0$q$=@oY=(8I5KvTBBGtOolsoSg~ z)@`sJ#r5^*UN|c;iiPFwL3PD(4prL%d)hH(f{s8T%IEMQ`<0sp6y)UCqZ5mRxFt=g z=ekyrvELV?7jFErVh3Heu(0qv_%^Rx7+&Gnr%zN6Zj0P#KPt72lEy~Q0db_PJ;3GB z(GeAraOE14ZW45>M^?LXq&+QWX@waf!25q@l%71f217VaxI`IsmoUT0$EN{x4GkcP zjWYh_d!8P-8#g&C%sx~8tYC$3aB@mK8r}n^X51cN60omc@Jr~v8e{C)SpamXN&|?F zx!|Jt)#;uyms(;-J^x7E-M2USMGZKjE{?ZzqxPO5kde3?3zQoFc?%sG#GHQ-FtAd zGjd%_OpNXP;6MUjK|UZr_Pe7vl`Pv;70H)wa(8r%k}Iy?bXmmL%9c>z807YoWkC|+ zk&=;_*Bh?3o^evdGCwWSX2PZ@cvw2VrBao13;us;&k%) z$cii0*a9s&OXcjK&-n%yq0epm_;CkRc-BN~h$I>2LMxgQb{RB8DHqcOT^mXkEh!@t z2W`R?iwn>ShVD7IZ8H?1rKKf`fg$sA^!3;t;f0FKea+3CZ8Cn!$0z#{nZSiv1A#Pdb^X~W9yb}|0ktHDH)=^q zns3UR5BA5pcHHvr|7u-O+}lGxd(4F{PT#J#aE$S6^S7uY&ENEGBKu^v`zj^JFVgI~ zKzD%Wwd$51lVdw#$z{cuskdG0?EV=^LZ(1Vu0T8bwT>76kdM@Ak*g3tQRVba=cM%I zKfDf0z$1DYq**GvK8^`2lGvyj0w>n|&+ZzyA(p7+(5DocRCu;(#`oAy9qX{Dkuy{0cjHK(LzW7sOOlF($&FWDMK21d-+-iZ!_%`y9Ag})! z&^M|7+Yywr7GT`5FZ|x`-`C%m37Hizg*W=;lHrM7|zSMhg@Ol zj2^?*l7aR&9t%b#j(amRGo{&giEE}meHwVy-0MMiw)WWKO5myVz+gQ+z1l3z#JOcp zhrzNvshuiUt{h>La?D6e+Y(&wYr)Je@11ny+^csVKGZEOxqC_~959ZZcbC=I*MIIZ zcIw-=Z_iDhDW&TqBqnuqQ^CLI0oNDgfPUF)zH2l@y=^ZOG`zHF$ z8(D6(1FWHzg+}khL)X{6%{=Fo_xY^4u(GiQDjm@4nV;77NpSLBNDK)J`!&04s2Fz-a~jk2<`zCtUCw{PDD zDq~s8y--(IU;1{ovL)H=%l4}EwUz!?SJ+k-XD6E?xp1|jq9UU=?jrH=@kugnVHFh> z{4-CUJ

    +IFv2K~r<5eNUdn_3JTvWn7=z_X_S}mp*arnwVkkgSi`Wnv|JXl*PVG$!Yybk9e)rL{FXrn$9Mtm4lzCl(5tec~M{$L&3rTg@fkcXwyUERV^r zTUo9A{c%c9FS_f)2W#1dHn9fmlM6=AdickGR&ID(&3<`%>ej9Dd7q8h4T+%O;OsY! zFHJ%#|K(PShOr;D6ql4_-B|J2a7usjmcbS&#Dt3w7aO{zD4LJt6su~(rjbWSfn*I8J$~Gd<5%|Mga8J$rUVJ^s}z$rP`@#(3`Ffgck+=bSR%yz#`%s1Xs&pQiNJud7AH z#VmXGjt^J+U3Yao$Ve)7;%9&Hy`MiFsi>&vXplf1BJS~ zyK9#hCb!?KEj1MsU~G-)otc?wZfUXf^h`=u34cE{6rPjAbe#A|p;hDD%9^#U?Wk+H z5LM6F;LQ-qaiK^cIw3**^5sKVhDpb61Vu(h)>*n>ACYe%{p={UbLY;l{K{WM9Z>$Gq+FnW-YFSZ(Scks{gMHT;8s)YesPI+&RpCmZNEVho zfB*Tjo9gbIyKJdxzI*Y+_3y4SIXQHJN>e|6*f=-{6gKTigwrTx_o)`dw=n4 z*#z^9UJ|y&t&5J14Z_rh&rJ4oK0UTqS!eWRzx|~iipFW*k?~V!w)=8=J|yx18O5&Q zg=M2x4lJolb-cv=N=Q72iDAGs`T6-r!Z((}jS(e_1d6Xsb_COHHGLZIYk68vkKXCc z{I=TKTK%(UuWhU?7T^4H839#QTbuXDkx=A8Q8BTn`S}yC1{@P5ADL?w%a!D`+otE| zhwV9Rc>8GJ4U8PqI62VBlCb@iEA=yfbPWvZYwqrN`t<4JH*b=ZgBc5P$)Dx3a*_^x zw;RVSh>(I{p7!$Pjh16rj*U?~8mek)BkfW{UlGu|wRY+lJouP7G5?h{21Oa@rTnBxL(B$H3upX{5~0Qa}0SX!(&bjt%ML3oeAs}EIHkwn#@{9nx2hgX$_OjWMEDR#xoCZ^m2{XD#6A>Fq7{T)s-&gqPRxJ$v@_{ct@dBjYh& z&vf+KM4N;?OVXc`yqdP36_>gXBJz(dZqOkT3)&X<8@;%=yJW~)258|)PLM#WX{qxa zr2gklLvjK4?$I-miTxNjQu5iicV_%9li4r^k(-(NAS2mu0Gs1x;?2&!mz{F+Tbjwm zkenPK1n03(sRlBqyvnN=FWxWtax)kU#~E?lZE$1R(er=7Bipsx>;wXJuMGUZgPg)M z6GsmP`2s2-m~=B@eNxuklF0QgqZlOCB}d|HcZR06;W-8Wlw+w>GU^ z49JwEWjEUD>#Rn=>A5>Eu8yl$td0v^8@N(}uphZp#AzBuqy^96Cpkn)h~nP8>z;CP z&RiHVI5iYOX?zS!OnQcf0cm{90e1!+8^^DXxR#I6ln;gpXeVv4F>aW?j{KryAmQ@B zNPy8)kV!DkzMqbm$R8*9rIBWgom%4_A4Zd4< zAPl5eRHS_PpdSzrfY51eXGc6PqoC>ip;zXK;Ju>- ztwn9C%L`+(y+cFVd<;QOi9p{kUc|H~N-fNX`y`!ndi&tdOs}4?ai9e=xu3#;NXmq) z`ncWsmBwuBe$||f;T%jv%|f+f$MXBQin`v)^&4{Q^Wnu9TiJay0TvO_(X~Z3tppMV zAh25d_s8MWi$GuBEn3OPlyBXV*}*6OzQqy1|wNRab4p&%KJY}Kci z_S?7l5y`o*P=o}VGIiziBx2XWo|Btv zjIAa0*_o`qz8*=WYiLMli#1*RgZ7;0f388U)hbr2u>p(&zg@vIBRCHvA#Ah+TPv{#FaL4?BmCeU%!5>>-{nBj@*Ph2hcAn zihA?r&C-luTrloR@iFbQXU`C0NFovvTGkeaI?Xr!n2R9_nV6Wk|9m~^{;QeS5fIofY2e{P1yO9 zh?AjqDIN_MuUwI+SbRInqO7dU^dNo}1wzBn+Tak2rlw}YtoNdf6~M`S@A_2udJ`Tj zcOFQL1w$zI>dJua=j+{?^SyC`=P%2y{qAlUsl69^>*wpnGYs|kQ#xC*5`t2P^~#ki z4P)W*j(Mi9-#<4Jm>6UyRm2KR_XJ4?4AA54GyRx>s~>{|XGQo4EbSVGqPC;I}I;VM$V zi{<5Ipi1Fua<^pnAqJ1FMPRZ&eEeupXheLsU1y4>d*gQR%2a@jcRf9)yuIaKzI^Ha z_Dh{*%?)9DKdbK-!ndj@>tGJHXA*hy7Vp!8=gytGbma;UaxM@rHi(Ul4N@H)^)?`D zn+q3665CIqlrc6oo@clbl;%9q#!^;ZPTJJbaS$JwpLYS)SG2RU8y%>>;p$4@+cZAZ zDth|*F-A(IyKHToL-tOMI6u4~d>{Mx@#8x$?R%pV6BCV0fl7)1?AF%SP>rI{LMnco zmlyK>y>40;-{Uj)!@_pqA=T8>0(&_%G&CZ)17l+uw{6>2#a@@5bJ;WDRNg_Ey_($s zy(Af#nIq29bitIp)p^umr^^oL8xS#Kp*wXwhJwR0f?}Wh1$Cc0NC*#@_wLOsFHgKE z9yIWy;quF<$jCdb<7udb0qeC=GOENJOH4d)b0jL3_4;+AD3I2Gwe*CJ4sA$db@CDD5w5&_> z3m?Xje?MMUj^a-1dh&4QAveY}hI{+@UZ98h!_WHIxi!1>o;zQNK4*GBx6&;^Wm!Ojs{nx`Z0f zrT4s>%R;-IEdW@Nm;T`31%g++}%r?_ne9>gy|U(oRl1Ls2RUbPU>N%@a1>!-bG$Gqpx3w^xXH{f(!u}*=J;7IZNQ2kx^5caxmYa zLkHM*E&Q7)K!Ks)Tg`bwcDU!`$B{obkGlP27kc}fj!Dq;VNnV~D%dLEM~n5<NB{P{-jc?JfCcYS?L>EUuM$k#lAKcnjai?p(%KYcQ}Y;Ql-o?WOQ z9biEls3d*!Hy?53J100@T)+WvQ`c5aF5oNq`S>2acp>g>7lxf&?E1q5BTc*+(Oxh1 z2tU6?e~}F_NFy~{i8@{@MV7_K%fTT8QS95y%>2!_1PJam_wj1E&EDqGH`$SVviAl+ z!PA@^OMEoXISs~0BT_&A@AP5SLCL%aCVNM z=hbrl``s7-p&n7X|LrX)?c;wKz$|E+>SI~N_Z>~k&gS**nELiDt++TErT9|v(Niia z*#c6MlBcBEZNUO1%eWOe4OIkRj$;hodcGHF#TNVuyNs)YdaBiFPTFDILz0|V0zxW2 zPh2TI-LIkHl=ou!(0n?_+WnLFc4;=3A2RiciofG&7#J!?-%bNG8Q7;EXmnUFuYTGj zihDb#E`iqh*nIo9J8K>!KKPHk&CfEHFfrI9EVuq2^0jSc!%z6Aw6d?Y3>NXIfh52p z%#HzWLxaSwU4m312_Ln$ukdcug{KX2HYawf)w9QUW=W@{@Ky;~P z@gXl$1qD*`r5dKCfy%XWu>!`vL$i}8f{FTxAfzsIXKD61NPcl2+Zow!Mxg&*TZ7`9 z-kHp@GFIbQmt)EJHsrW|Wc7;+!OlO0mtALsw&9c#!Uq)5pA;#UIhbU_dI7tOL$(%c1(I-bR)QNBb zP>1a>3aR60He^&g)KRy^*O}!%V19tqxM~}NTvpa|BNxtt9@}SQHc|Nn)!TcUC|V-s z0&4rxcIz)#^Tzue+P)T9IBEASJ>;z%{WM*xWknVVV-?l>kJo0FsVWj2fh%LWS%;Yh zvRlemO`{jX>py2rf0;D7DV2H>Jo?in+cT%h)Ndbq#C%wbL9~mXEa;BnLg#@h`;_}O zRb*ciykh8USH9Rv*r$0+%)IiaFS%Ud^y+m=b1f;)!g1a9#b+liNky+k@+%#vH(fW0 zZ2Pg8Frat0&XoI5WYe~!?E~`hmfm6P3kxRgH!`(N&hpUJpEx*N>Px~EKXi`q%&xYr z6Ql+c>#pakkLAZ2OLU3|3564A`^=dWd<i zT8fBsBFdvEHMmYx-|#^3uK49A85f36@Y2M;<`Xz&v7PEhQw9kcv(laVs?aFKz>ML> zDvGIzz}F0YA#JSI>Jcmy0i^Ao$7zg$+eG_=cE&4E`%c(9E@V{F#kcc)z8`u+`eK#h zR=Rzhx2sEESLCW~(`_SpyZbJiPQU+y8%7sTWKpsNzdo+8u%I1Fm8WRAmnweZnsOB@ zgQLRu!S8veEcS~ktMW~FQ@2N4I{50igzD$pHP4{YvD%!VcCk+aDMAJJYxt8og(UX6X24(IDJJ5_@1?h0l|L z_pr;E;N+`$F;q+!+~EkwW@|=#Fk~>gk?7Cj+fF8{X%7} z^)HZ<$v4E@jv@0T-{IpQeSniJ`Q?+(zKNNo4}(Jw3AEKW$O?S58a|m#;rA}%&xM{? zu{$@de^xc9%st=6^zwEZ+N2H|&igfDc9w@?SFtL^`2>U2n$;>oG(B+8co z3J?0(gN((J$l6ZUOz=dQzx!;cx*(wUPuo4i+(E>O!WOmJSK5tQTa ze=2G3I4jjmt&|wKOy}xYuSs=?iSk;6%U`h${)VnDBmZRW=$i9={0a&0>n@WPMLs0U zYpiK}Ud&2Eb;ypgINW8Im==e^)vnjZSFeU!XEU-4Wc+EGC)J}{w3?KB?_xD6zIzwl z1g(x1y#iN@uKv2xFXs~LY-x*I`I0)<7|1OQyKnCv&f9HKDc9kms1$hS_FX!e z8VcqXC~!sp;~B@Mj05!)BAHtjB8~iaumpOA%rT@poV1dE&e6AZbzh%a1gC}iP9saB zrc)KR3Nt2e!-4uGc&r}smTG8I-A|C{+)Z7@S^r(*#lv*H;^(3PEiTkIBUL}{DGCj& z7T2l@BoC;2@|eD=YO6k%j&EIQhKnkd3w7vYH9yk>wj}aYN!zZU4!uZz@WGD6fotT_8q930FZ-Sj{~)K*^`r_?V2)>0WIw3bnNd-7 z-{W!DuBCPp`-6w}eRYq%$a*I5E;YBO|4|ixQfdKPj)K-VQ_Q3tTh^4+Y9F!hFpIJ8 zdGYVg_OL+yanx+iQEl`Cb#KZ`>;=R`NI2f9`E#;5TE9`vsLyudTZ%jyszkB-^9fQa zvxPtG0?d5Bt%QT_Q1CS!(gNdR7{>-x0t2 zL{;@V?Zj%v!H(vd6HMI`+>}v*Lyy)FXuRuQQ7eET{P-aecPZXlmBtW)F6s`f2(MbKrkmi zrQ)hmULu)eR-(FaKi|8s23noZQHr|{EuRpiGkioJYAe32%UPXnIqLMQqYw5|9NvHO zaknsYy!g=jE#%x}mDgQJ0=Fl2D{i^1+^Z&4<iB4t8~v0Rss5@Ba9MC#2nRH9{!>mrV`V8}y`3xNBByKDsQ6-}@2Op)B_m&j)W+E| ze(jZA-EdwwFY8H9!%?e7%4lsZP!w|L{JQ1j+AoOP_YT++u`V@# z<;`ApUQu$ECRJ5cC8#}T+U^D2*|U8I-I(f&1J@Xm#dQ65|GreRc6q64Q&A~tX69qI zwS3XKHL>r0uUy*2DQi}`@e^{AH8~H=Y|@0D)qdC0kl<~fB*_uz;=Ob|QG$QxyT~r# z6YnE4<8K`wa$J89dFEZ)BT>C&x0d@9GGt_Xm#KQ6Syf({y<0n zvc0)LGmqob{a<9*r*p?B){Z|^?1*Y7H)is5$VZGN_u7Bs>aFP83naw3a)JDJ}O zrD=um#ggT&`)TRS$AUzzaYl|x@CORhaa|;*tLeJ6TSVnonB^mj3-!W@;@Q~=nkk29 ztE=uQG<{BRE7H_EIWn*jBrzD!{%Mky)yZP+)^KlCL0h9xdt<@vA(G0iW@0ML!3kq~ zM5(#FD!E z2T%W&YPkF;S&2o3S2?ap^x&z=gHdhkCG6Hos!QBc;wm0y{fy>jb=3d%Ui9y3QhZF} z@#%+7+v|{JzP?D7hDU5%ayd7$NPIH6#h!<5;ZhQL=VDcB)$>rL{fJ3)lSTKDHU3s@jrb`bU#@@NFc){9kJUf!ig8e&KL*Wy(|`f`Fj|B zkNYU8(e1swjGr?2>}eKi9o9Q5Jed`@4mhN=aFPi?6HgIgl0nU;HnF>je?E z@vmTmP}9|<*|&)a2iY1bEX`4otxZu|Tu{l{_TX-leu7$^2HnpV5s%mVFZfdmQj6-` zw|p1c@z6Mtjda_)2$3dHig(m(+sFbKQ!9kY*|+VY6hrr#QLD?G`z zVuxvGizL}(=(Tr6klBvj8M~;;oL5ti{LB)#JhAoU&NKEC&(722J=pUrvt&};Y)7%6 z*JlXJd;$VW-QuW+1><&<5ALH00wv-w@JcfyoZg>?zc#7PJV>3zu;@&)LR!t~>u;Iw zE=L8aL`^k5jLJV!-dUs{SwOWbmm=4{y6Zc{sybBmQ`{A1WbNuxd$?m_N^|fH z{oNp~U82fH{PpTAXYN)jS_5A1yIb#mrtq5Tt_4{It+aOOA7g{>+YYMTrR;C|ny%}s zcsKsJ*LGyozS|E>*!|D+Yusnr-fg)nsk*JRj4IGX-?NFGQ$5{dL^z(uo0smcseXsm z^KiZ&6RQ39kKRz`4PuHnwQe~RPxj$JAw&H5gq(?An>s_#Gp(|&>Gwk$Yhux0OOmyC zK>|E3Dx%ZuhWZWuChOA0godRhX$Vx~e|pXBu3s15tm?_d#iaR_nnWk}Gmd0XQ5f_+ ziA`eQbKDYDeaY&8j7CVigVvGSAj>T80d;@I;^q&+lRIPgkJbB{7dfj2J@0K}pg*T4 zFr#&!Pm7cOaD5+NV+*@OTeX(tu2ofb&MJ-&k-xibq$_x43nGmDsA&)G;j22u?|SID z?%mKsNg0-pnf%U^FCACdm7u3*se4D6FUG>=gkisSj9&EBf(E_`xx7ZjLyQR#?tXlG zCsx&K9cq43c={JwMEI%iH$3!QFEErUPv0_=au2VlS5VvT2?+r-$?&_!CkfITBEcb|4wh50)Xb1O5RxwDTTRRAcOrbtk)RG8 zt|or2ny;-Fo4*gdFMPM3|9hPH7e%Wo*{6+{1E}c6j4tY0f8lO(Ihk0rZ!fbH*$G~q ze}SVXZH*F|GP+5VPT9$Lub;T>H8sCj%4#{#z4JG%g}?AvRNHfMvZ)v8*Y1;?V;GYR3 zNl!NYe$*YRK*4HvzbKV<;3en1kU;OD+?U~WYQ1xBzeu^3CxiFlPuIV3o|li7CB5cSKBe*NF3T$H8NS_6ILdSnbI0 zR9CvVgai-c9)IKZ5$A}+L=7-?kcB|oMMp*|KurQk2F33=gZ~UCzaMcY)xKN7T~Wa{ z0U@n7|2#x}$-*a`Z6?#x(|N|l0oq>Q^gMq>r+y8S`8nLc=JXYRt)a0f9oP+%5cOrY@43e;-5kN(pD1Di$6Y+)*ZN757cVm=oXldKf zzn+q%Y8vk_WV&5Nd3c{l07bmfbH{py~s zvn=FPqa$P%Do}leMrREE1pVs+i8XyaDmhux+gtAS>(|oB9d(x7L2oC=RipgV_~JhA zGmahWK4ZzPR`bI(8uI|92fnVpAAk8+B-j3|bHjl8y9f zqs+iVLpK3Obp}i-_*FtEhrI61*;1A+FGhsRO;WZuMvTXb-3ocC0jp`l?BG)c)T zpX#9eKP@PL?_uX{Rc=K-@wK&acs&T80S^xk{B#(gtRH2thK-I|62>OTuaKe0{q$xh ze_nn4BtJhZEzMVz8!Lhr-V5;Wa6DAO;XwE%x zN8vUs|5+AXxl&$9I5r@+c+dH9%zZEJJc#v}QDRw7RWWy0=!}8EU4d5VWGxIjn9EvW zsJTi9BHg#ZR@c(=?3~A3H3jJ5&oMWei%w(IN(Noo+&;Tdz&GG7yAOFWAqyO{^tB1< zPWcU4p^Bvg@TxFvtr&2sOeRcvoRE=H*MDcr&ezd{ve)J(BP2CKmCTm=!*6o#+;WM} zij?cm&qp)c;2T?RIa{H4{`_7jdK=Yn(v*$_u$8X-ERUCQ6O>FmBKPf0Wu^SOw_K`I z%T4nA{cWEOp~I}eV<;*r3Z042z zE3=iU1ztbwp{{ko($$eHe zf(JQF*don*)^0%mg;xPPnXuA8&;e3~n0HKJ@gw z@9k~G=zz{n(LD%B)TT8y62i=>Q`-<1u3x`CM`+8$+!DzUrqTyub{!zrYaXAxH}&&p zO3^L_)l+E`e3ZT57cC(kb#>|dTUmiJ6UbZ6%)w!YAB~JyKnrJPVTqSCYEPDlV{bcUXRC~gC#S$D5a0{ zQD0SR`~+=dOZ~Rl(`N-=y@4+T@rUphdd?|$|Lab@3YisB4WYUhy#31>F8hlTKt|K_ zE+=oW{sOkuvww~dAv-ZcL{l+q3(-3Hd@G{>f*6BQ4b*JutukeiNzbBO)Su0%~;xA-f zc?2kn>#sL1o`&Ml)ZAP>eO**sTuDQtHN?+k%N-IpUSR>VDj9&r0qYsOfpG(28e8A> z*+aU+8({)^@zPA;;gzUk(pt96+k(;};N^g=l5q6w3#Vu!-3Fy5&+KhNQc@CV^!-ok zF1v_*oX8?F4rqGD;JXMVS(o7byT8-3(Bv6x9_N3TyYtTO71O(2XKK#JKzB!Hsp{dL zYLTAbG1#n)a(_kEms2<5XFVrn@{9_%7#Li-cyXBU>n?v;tY{o`8w#x*QN=j6U3M+s zo88SaJ63M$9DFJr_5?)S%P+O!=j1*57t>o6MYA8BmZH(6waqo&&2FVBwRP)O!k$r7 zBno%2(c7C6@G!t&SqzyEVvcdK?M}$Gfw{E)8M|}uyp4X8aS0A+?uzf3mt8~(|EQ#Q z@kjsU6}t8G3XIeS24mGu2Mc@a>%2$&tb52+G`sQB+>ggHjhipO9Cel+?d*4WrSZ1_ z4lQwvq?41Ar+P!CFYCm0zU=P6tVk0nt&ARpHyhGPV)iu@F$Q z+C8m``}z3!_shtzjZyvM5n3$cY?D-DV;AvpF3Tr8^Mq|;L4Lh)gD_NMP2}XjVi845 zGNy$8OB-vh0+piZEvZJp7!^XIymR9Acx&9X)*~f^Spw+Au_O`cT3thf*ocHh5KaJS zt7B=)5qRzwB_&AGh!X-PFDMIogOR((ufq0JjcC*V;u3v-fB$^24txq~z*+E3=j0qh z`rYev3_|V!US100Sdlih#=>)>a7A1{uM%qmX95w|>i2%Qo59m6N-T4u!UOxNkSAh| zz8@$gAIBxz;>GU4{8qP+5*rssKpQ#OR;3NPdsO@71+ z9o=mzwZctJO^;xIKvIBG+xur}k3-(}M&WL!dS4r9_6ek$x zP^}Y{!7p{`ErW3^?0fT&ygLlnOyz$;pwH~p(i;lL3<7_{Vl0%N5=<=G;CZUck~I7 zSdjO>N~1kNg6JyY!A=WrB&r%zL23f<&Dg@uL_q%1K}YyqU_a~LrmLVTiJ}l`neffP zM*t{*D25D1LV2(Dz}`eoQwp{INodO0$FQbWYIdI99&?0o2VPzfW)`w5?xzdhuJ|4~ zE$>`OnEYC|{P?B=d*#dG()wa$Cpd?pg-|C?KllK#1?ZSi$FQol3^Q-S{4_qQBH6X9 zhWs2{GAPY-o@AdwX$o99gptE%LCUArPHusPa3A*05LPFo6GReN&_bE54^s9v|K82J zT{Vh<=6>8|!=S;?3uQ8{l!`@%goGy1YyeA2Ku?chiu>sHO@ur+>m9eT;ImG%@z-gi z0a%OA@zW8?UbXkz8V}pRvF;wk$=}9^*o$5v5jnXIIN6ravr>Z*Ydl==rp9Mu(Psf0 z)gN$*Tks&{3DFt9vFl2=8KUC3)!?8309N2*7=@P^`(2w~Y&lIE6_C)h-&pxkg*S;d z{OH7Pt!ol7saOWJm-sm^z$crDr5Q^>j<)hp2WuuPf=GUV?UYkT+ zJ#_Emz%M9h3qJ}r@NVjD0P=b*Sf9XNh?cyp zp`(i{piVR4g#4e72|MGHCr>z0`M`U(w6qkG-g!4y=`-wgWgq6~T z4w`{wC;fR1bHJ}%U&~BX=l@dv(7obzAL{{EMGgjxX{EE4v*$?U!&Y9w5OrR0L~F{O{)tRZo?uo z|GQhe7#?-PeUry~5NSd)QPQPbQ;Nve1Y{CKErA5Rd3`u&GfPUCG`s1}x_tEHyc`A! z&l;BciwURBo{f8QluC^Ud+FP^%W#w-tXC4|Ml34$6XEj*dJ#ijdiU;(Y!zC(s1fwL z%HW>eC%5>zQ|J8oc6id@h|BoTTZqK)=g%L)Hnt*0Po{J7BpDH!upg6TJ)&yw(P-bY zNdf+72xTKMZP&#Z{Ms)oD~sO-3u%=1Q%8puP!HjG#hS}Ndk7*D;0|URbsaob^(d&6 z+UJiowYQHGlXER~g&i9Qh_xF=ETU};-cnQ&s7J7XVI6$&>J?%1v)N0uGK@8ZA~TH6 zyO;jyIrsF*lSfF_$gO~hio(nx91B3-~FCtBAL(aKHGBKR zCG{OO)som)`Rg6bXZGsN)1PBzhztl{P+MfegEj0ley=9;k2X8q<(^^8*4 z=ix68#6t`N`ZLF_zHVx5O$U9035LH+B2(>)Z871hpQ|FHA*|}SVZvPOJ{ri|S7fsT zonvbezL!sxQNjvRu>p3R4|{%%BsOIax;>4w-#{S&whba=D(CfJ-(H=DH{*=Qu%}v*kHvgW{!ECpy zc{w>PXrKkzW(!UNaR2IPU0|K%R2g9sCme8KBoX{3+Tx>)1mq033!lymMsWv%q)hQy z_dv}PYVUeO$TS|-P!va~ufKnJn+QO>JMN;<#D(g zV@NdiXlr-I^pYkdB%rx*KWiv#qJiDhNx%M~QG#DcNTv4%u|vQgWe=vHdlWlfm7DHy zPEJr;TU*_Mv+a45VS#9pMt6tYTE%+b){)CyH@wtS2Oh8&BYeU|8Hs8SU>tGR#@$^S zl_T&qm?;>MeH+IJ&v0Dp1EcRn2YZ=?UWURUn{x;>7~Y_HZUzkjYEkH}D@(nLso!x$D-@Uoa& z5CZ5;H7>GlRt`s-%=Pm~-7w;7nV5WfF}a>=VMzGbv16=$e0nKhUcnyTD3&>`LM!(K zp^D&2F26(vUe?=|6bFytX`HG6BmkhjnyB2c0~muDJo`$m2>I#lzUEbGQf<)qNYFCk+T!4DUG82o7f z$pQy{gz=74n!XF-VFD9zuU2II@~vM*fxOR}1sC@P!tc#|H^CqMC7^AB>#yqM)?Ytp z?rHq2C)jZU9Cum1xhTouKsw)|y<(w;BVBFC21SJhc2IA6wpnNjbN@L1M( zkoq)$)6^$AoXx;M=v@3mS;`sR#?P680hX=jzx73PZ%^%P)YCp*U%5V0`HOhY`9}GT z1^ETyzpLHyYxLlPHacj0mQE7rVAnobRbl4Srh^79({E#7`90Asu5VCpS!k-$vsFRW zFp9fgTUspHoh}r0qO2@?rEcZt?SihU-GB%0-n~;^_-M&nsj*c&u{{9oUa{jWt-}28 z%yUAV*T5hXYfGA)=zDUOwxu?C__Dsw+B>yV>W4Uo;DVR7Tz=NAg1-6`Y(PZ#Mh>4O zA|$7-eYe|;MgOMKiGSxOy;sLL7C_Sa_Vo0yko{Wu@xJmoET*SC?==;%b4!+k7_Mo63 zG^)g{g$52;{Gz&73kUk>!ZOzHXu6tH3zaF+b;bx#m zHKrzBI%kz?lSTj7c}+q}svB()XsQHS66;_(t*xDn&PlpJl^u$aE`HI89Xfmo4DINug@=DELv<@s2k`{ULe}=Zp`%5CmPp> z>pj%W|Lrb8?T6I#9MKVVI>0tT2cnxCt!$EsJL6iF(S;y2c%2@smr4{jk#PEp?XvT7 zi;KllG6`J-NwU#CtXg1=wp$LKPa) zW}n|}2o%TVj$KE23#e2vGy7M!H5naWxEG?Sr^tFc$8wVj(Z2?r2ntICh!zwJ*zeeQ zxSYC+0L2|yf(bwvW&Pmh9tLKil`m}-;~AOmuH;w%0W zv{C5K03~)GB?vv}ALJG^L}>`P?ndha`VEn*6B1YvCYur6(TVY&rN8vYtAQmTeRVK} z_jc_aB?uLwPxNXU4pT@+-=bWvz<-rIGOvMw0l^+=dydiz7(Kszg7bF0r3KR3V7Xi8 zL%ICY(uaVTn{MoVg4@xH1~ff(RNLO(9u6j=WcrU4YefHN&GE(0Cou&;x?j6gI0$V; zFD#j0Xs=JB`q%BN^pS^%_nOa5$hNhXXmJHTM0O$Y&)>g)muBvqAW7}K2d6hE4I($1 zni5iGF6(X?>+GTm-Mh!p24%9U%5a`>E)wZT=4&|8Z#ipbonOY>0wfP>R3D^sy(k+f?^>w}5d zoNM^Z5@vKDMrO21CpuL$6V2;C2g`+6-!KL$!RCMh{fxdoL#0>O|8x5y*q!87^Jo2iE{v&h1kOf6brX!9k)pKsy9#Uq&IbHV`ocwGAL< zi=qz9Odvh4`|5n-CiAyoIEh|myamN0LAC()xPKbH_|jyo+6Ary;y8|;9?8tpXU{T$ zQw0@@(jD!WR%lNqges!kMF9%RuNLs-jDbW-|K!QN>=K$*s9-g_A?hOfydN0QKt4tv z(!6X8c*gl&uxf;g(J8l**EGb(Euj`QD)sP+lan1FeD{}x%g0cnfPlM(wg{+`;CPU^ z(TXXT8V=Ar_g+J2erYUx0S9oHF)&-O$~bD#Z;ZD@1oYDA~oIgPW~B>Dk%$2o-8@P?MAP0){X$ zayJgyAW-r3>(2OA?~RqA;wuA^Xm%3pH(l}mk3&S^haOP$&M^mwWY)U=+7m+N$xZI%m$@wqVBho9b(vVYmyL0ka6M{&9A;UBhhwZW{162q>~Eq4_i5 zNxFJ^T$=|JkFxK&dhHsN`}u*qb^?Hb%R$=?f;`h+nP{~rB@8XNl0Ju5?iv@swjjjg z+yr}XQv~77V|-@zKUK*kxWbx0|Ca~;D7^2u_M+bb6c-`)L6wB(rAn9@8xrWr2B%%1 zhH#VcFxey&dHA~7Z3fvB;?2r^GE3526?b_eg~mRKS%cgy46|O*{u;X1A}+e>b%q-zJ zna_1N{M;#@K?r->=00t`2zw`a5aje}N zvDcj3GN{L43tMWfT-B&psuwCkXFWL4=8ldmWJs`==*Nn??xvD@1JqtGfz-T>LTLt+sA!7)r=>V8$|lJz zUZLd;WjTs>LLt5ycO9+(DA#_~{H>H{wM3oxk~do!_Z-ozk&!$c_Hg=gQ1@|O%3|cT zdA71s>0OKB&rcf|fD=Kw#GD8)YFI|j5bc;a`2^r**S)cXZBMXwu;E5mq>Ve65GygM z09R4p%IO4SWAu&!>44vWjLC}AO3*_oSs%1Z+8a+y9eT;LkvR zzK*eRGm$wE@WBXS13|dxx&eGPSFvHsv!L}0(*(R#4F82=#j-6nI7AQ&JQ@aocm{s{ z$3Qh091K5X#e&{eRDs}ZI0++`B%^r=QaSFO$m^TEv{T9}dC0BkGK@sKcVC~8r~mPZ z4=+%LgQ;jGQV$X%hLTV|T+5XYD@3Wo9RlTUvu;@%sN_L%L(3mg>0q=P-6~hk6aAf? zlVkmMspFvX@}-~qXY}CI46nsO6&o9#u8R!igIb6^C@!(!03KL4IKmfm&j~Psxd9da ziyoyc-B}gHYAoDQ;+Q5p5|kJ;Iiq_LWh5*Gjc_oCkKIlos6QdEX$^QRh@+v9Ihuog z_Yoc#;>;PhAuobz+3em!epQbLG}`ArObU`>sdHmh+jaH}bPRg}9pNM#UIHly|4$F_ z(E8sJf_qr<#KBD-1z21}uR8%YFq8k8H-OUN$3XQIsY(vDk(w;Ay#Yd$`_$um($}YG zK^uM5F#ksfguMDYTb?)w<9_N{oMPfWe21d%jfYrS{=!1)MiRj(&39fXG+O#RDc6Wm zYJ@9;use+n;dBF{laXkgY=gG}fgivYxwX1l0agU!xC-}?yG$VO68;`gE|tqaFVk2q zK3GjB6Zoe0AiqK>qh)s_n$hV3;qd7oSYQ3WIJyTw0J#L`1*icPpfR?)hqbu4cp31p zg{g8$8MYl1i%HThz8JD=IFSh@CV`;|O7Hbpm<*z`y6ILNq{6_+2%=aWdCj%_IL@Ha zybXc`XU6F1>WcnI(txCmSVee15!#3Yy@b5yg9&HB1>q(rs7G=B7aF<2@tO+uzDS*U z8zeDe@~me`E=(dj3`wlJTWq{*6APVq6EL~B5@{0;J`aHCw5_eJ=OAJO2o*v;fZmBQ zB8m|6MVvNfV1OgoaB5IsZ%{WTZN7nR`Bz+J8(}NP&cjIvL}dqY1)a?o;X}YO=zI<0 zl*qaTdZp`86~-UY&p`340;X^s3Z9o*; zz-wpp%n&XFgt}Fn9>hc(cSM}UfD~la8hZqX=iEz4N#UPyk!JsVwe<+pHgis>9%#m& zBkD+E5xn{LEthy7wv(yg*;VT=Amm`|hzTYb+9HR3QB(>PyVwcyX!olMtaxHD;C6za z@cZZ2(GwFB{5J3u8C7^5g;0y%1J@#by;&L!UWH1wX$!(hEClBaC|c|``-R^x{EHBX z6~bq9Ythlnd)WqP>>=DzxWMZD?-4F7cYo&>F_Pg%*>@vK4w7cNpvhDtRo1A zn`sWm(eP^}Nh^RmCb&m}M?}3ZE-8sc&gyhCSu1br#9K2{)_~pe%`0o(-mp>55o{)t znfo2AC*lAnoJBV@_n*P2tFC^C33zW{pcN(OC42ky+}vQCb0E-)!#aS_8gMJb5qL;M zM5jCSf<_@KU}RK3co2k}thV61ygY7LL6GXf(}E6a7{6L?E_C=X4o$m{!ADVu1xlRk z1PBkJd;0tLuYtTN!vy4oTFwZ1IU93L@agyV-MkMO0!^~72|FB!dC#}#tUr7}!}2zR zfB$J61_tFoimW@dp|6%OR z!)k25_Fp7P(WF_@Ord#_QW`bOP=w}zG;I>1L8aY1XdYA|WlTtv&^(t6Q5x(tAgNGM zyyunYJ%0cFj<@4@zR&le+I!#kbzj$7=Q`JCG2xB5qH!8$JGQe#u{P@oR1O11!Iv$MdzWo*LH>x}j~xIyz<-5JY}$}rpV`IZ?7%WZZ3$5i!sN!* zR!Dw0aUpXqjp(-#=VgIwPsRC&VLoJHuf9!S{2=EmiSS-)`*w@M3KLHWDphI2t2b|^ zVYo;l_{H9U=~j|O@M#;m>^uFzPgM{oIDgs7Uf+zXdG7p?`2)w*;S{qv6t@t&dEc3f zEiPTn$qFrhx{ki`IIRR37}bQ16WREjIN?v7I)xk>hZEmzzA|7aGIu$e=4D*oVI&#TL#NRJRJdHnbf!a(K;9pH7U9GS*LVnqMm_vPa1ZxzvLC$GdmH$3+!pH8(UoMVV!4 z$O!uh60=-9xwwnSUTANrNC|MIqRg#2Pb@?(SFinf?1uQ4ovEC+ZovfDrLZxuS+*%2TB8!UwT~aj7l(%rY+ii5}YOX8b zGVc8@%(6*GbGsJy-Y)A_KG^6t_NWajZ){?s{_~GSq*D+;?#gt%dQ}Vc5CX zGfnb4+;HJLvkp3t6qinl^X@&BPSfSZ#l*6%2mQwBT`0@*`zq5aDNYVrZH=wUB}+SH ze|tI1oT^A%2j{i9!m@&NxXnnL0wmHw?}15wC;~8~ef|lK-Fr_w`Tx(4rn&je2;b+C ztg*8Wn|YjWr=Fw;A=xcJ5{cl5RJn|dRv_O8?Iz#l-9u0|uzv$80U#BOWo}1~WXNy1 zkH@2`f1Ou`sgY6olqS(NQECXumjd@i}&x>wlB>{O-;3CX(?K?1;CpQ0fAIUjQ*4e7Qvrf)^pY} zP;B^k66`TJDL3I;->5CVKykOIImIeAT$POSKvuc-MVJo@m-*l<5qG*SfQ8xV^i_M|S-X&*7D zM1qXX{VH@vBmsDwq&9BMM@UJI?>OY9hz}^Fw_q~rF!3L62tEd99yDO=tp-Sb@ec6> z5a|JdBC^-sGZU3W`a*buTnMx|s6nJ4?VO3ahfTRJtU2PiqIV%FV_&*@v0MoIW^!`! zB%SO1{kYXgw8&|LbYaUD6#ccXXesl@>;fnbzC-}gbW@yvetBCh;8nrCrBI3)hHgZp z2_Uy%JA%Lc!^M}UGftHy;UPJ4bk4Ub2J)ZH}ba(hijS}Kt)KbI7{H8 zA$CKcL}cK!3%_t-^7jJjS|rcJ8@55LNJLF|ws0Fc;_9nWubi7}4{Sqad2>@HKUEhy zGmKk!TCSmC0)jp<0I~`w-@&@XA9lm^ju3_pg-b*oaebM;=?E zSOTPNOG|c0-K5|S^_n2xJRgrMm_A<!9wJp| zBxIY56I#JAeDUsG6XH3D%~6L{cMiXoB)KRg0BAYqp5dBZU3-PO19>ns$qy%QN5q80 zESf2%@O!5}AO4$xGByy-(BQflHIX18!ok@#+Chq5s#hk)Pk$O69l%AK95#cdda@M^ zSYiP|+4is^oy2P%ff#)N2(<`(l4BN`ow)ci+%x2KkT^+D-PIQ^onmzoZUs1U?Rnt{ z7G}$Z>k66NbPcEZx92Oj*mBv1eKrduWQXHQNjoDugcCz6Wl0kG^cY{4H!K z{@#B;o794JH#ZX8;+u>`YVQ9XJZ`kL-Ez+!EbE5$b}(wr!$5#=4pkHwmSuT|u-Bqo z3h@vp6@oW-U<-S542UAxS5#oKZaI|y8j`MvWtD9Q*6X$m9Zq-WqJZv8FZSW#G!dyyA2=np#l`V2!eZ+@H zD|o6Fj()UoRHCb4Ulh2zjeLKBHxCtLe*mlN& zC5pm{H%zyNe4|f=-ibGcoeb6`lvwuc!NGy_6-Qg11rua{YZ?3(V)Klv=!1bygIgtj zYZqH$q<}SDZ&(wL_czyvb1QevD%b|Bkeu1Ld3fVq8R|-Of0@Dy9Q{6rdHSa&Hm3=G z+4pNJ#f@}QKF(II+md|EmhG0xN(;sShA?x-kA8wO)op?@Ezg=n8lQ30nwH3f(9YN| z%W|RI7p|~E8<^bEzM-ur>OGq|SBBozC>bm9EiSH`=vW_eIliTL`!tMEj_ID%`hH^mJSQ+O4w7smW5ig&oahgqczk?mhE)M3>4t>kv%2JC?#3 z>a?ETeY=u;?X_spk|e1(jv-4C4YN=Krl|vGqa9E4`k2q2lw4~a^}OC$Qd)fF2I?|~ zLHR^w)kHQH$v47|_ZzzVPaKTX!jYYr&QP#Kt-(5h_vwJFx)=SX?b6=Ns;n$&=Y2y@ zwyk`bw<|6=fa}Kp{sJ=|URRNj{P-5J(o3B#%0(`88+Z-fLL+i7J1QC6R&SNi{vmIr z&PCBZ${6n&>)%Sht7YcV%e!~qt~*&ilUDJ5=Z7eXw=#~|imZBaTCU0#Zk`8H=6X#& zpVF#%pt44azRBX-Cq}a!_3mE}Kb|{vV}+#FtAJyV&hq>=**pDX%q%1Io%!AJuis}I zoTTLc9?KqHxTRdH(I($AQOMh{Ok-b%mO!R2SI_d|^24RAKe#gMFS~{>C}uZ`mPK(q zaDB9J>ZaJo-K!vUg8FxT-|afjG6i+@CX~~71q2+c!&ynSmO0GL!(#}`Fc(QA3QWLG zqI%-d|0ElmaLp^`=Sr?h=G>GZ-&|&E78$+u>%yee&mEWH}rLVgchbVevmb9yKm@}pG&X(@S2yEvU$#Z!`;F(x+TNv zj=QG|tiwz+IhYwE`RKTpNLyG(CeK+*?WjAi&2)a!y>Ft@H(m1A5lYn!Z5K7}7xe2a zMMj;{e&1xE25<=)GRVoc*zI>cH!RF1Ka=hBTIXndk&ejn^lNkPYkuAoxW=$Cz9i%K zh9gg0mQJ;v*rMmMhPm0INPm6(yr$yx!Yx1PU?;{}4$8Vs+V*N2qb$?Un@BM3oleXA z+Fe3_#jr(teeL`cO3Vj78vIfOlvC`kED7U6k3UcH&fVNb ze%#G|8`lUtVptnqH-wDTM!}Y;H@GRg+d3{=yxS%sX3n}uJCAPJiu3m0H%R(4R)|!w zCTl&{F86TVEk7!EFY1@_v8N&fhrW2EWciCx{f;wAWaryH_eX@7!gPp1vcyPT;=O#k>KAa5>&eW*%0##8Y2dmTHEa zcv0f$%)WQ{vOG_ih|^QM?uv+X!T7sDJ$HP0%$np3^&I&&mhJR=ZRfb2o7?`1(8~K# zPNKB>-2Mt{=!5=l=35R5`CT`%-^au} z_U;T?slsttmrqRRBGZ*?9yN9K&RYcvs2Sr!<39A1k~=~x%krjtZuCl&r-`a{i1F$= zrpc}nQOun(c=&L~U90t`FRw{Pt!+M;Hzj8)QyU{7T|N4pQ*TFMi$=;{Yd^|)C-IeI z8H_h&3SCjjJ9X>D4Y|JPl`6`s*oRloo(dCwyn+%d%g^o`ysI&Cd6-%L zaXU7p^MqeDoPBayi$pUb8g$Z0M;RA3u%( zI_*A@h6BG;4ZaKWbTDPM7M*Aq%9FQqQ{=FJdSlZ~#+1wP+83ED--*Z2+`eZngkKL< zN@Qj2c4klw)93eI$$ZkjkZEhH?pvLpO`&ghgkBEi+b+3=x~p+#xR`>;#my{BsO!FN zOKg!CiL)E@%PPqA&SKjl*S1%uLOaw-cQP+w)x~Dz7Z$v-_cq+0m!U9x6Je33m*m!W zO0Lw8-xp1HhKZ6TwbZR(y=BCjLXRsKqPaxJY8-7?;q3T%cc)LLWV5nZjzmp6)1w#1YVbzgE-C$GUbd7u z`@kDrf9~@kYDpRK*Yd~ z%Qf*fK_(AucGOqoTC?1!-TA;NFG05IS-Th0v<71!UCxqoVQq&(4ELvcH~44{BDD&)ZZv&Q1U5&P{DRD_yMSX3xjGM{2gC zdq;ewuA9mmo+ZD6%7TuK-eVJIwHE8Sc5&0BWrBQehGcR25>Xc$=NC*b(@k#J=leY5 zIiDTsA0uTD?3c?k%8(H}Jv>sy&qAr13$_&YIJciQ%ttI>_$V#uC*{W8Tj|X#nXSD- zPG4N&o9L%3Cq;c2Vh)K_gzLnvrzsw7KeWBpt~+g1fU<;=a7|y&U|4wl1I|GfStrkW zI&TjDwb_mgC2Y<)9+!9C9oRYRF`;+kzMY)>$7|8+OD{1!?sQwG53bcx!KHq=ow{jU z)w%T2uUsxkO%7aJs=j_e(DDK2u&Vmf;Sqj@wj~DC7v>kab`&*l8KCcN}iMD ztxrdlJ`bK9jn1Xf@3b(~zPdW5%ZEnXj3?RBIH~{>j?-Gb^}8 zigCxAJLYZ@CF9w%PU=l-vPSEIJde-26^K|#ZE(uu5%)B5VR}dxZ8xBQl`dUI!QaJR zG;*h;Wq79#osCp?{I_Ptr7v^`(#^VW9E%Yhd@Vl3vTUZn<=f0o<@1(|@{wY4+tYH~ zm+%kIZ1a3ACOSOQqVr6ywQnVGW^&_PQB)dz^sJnyscl4hkK;1I2J4nF{!Gg`ipTt> zy??l+`)le{N+$Ps1Tbt}CS@&mM}(HPduipn&3|5&rd`uxZrr^0K=iAI%{;tv=Pxh4 zBb-V5;Y48>u8p3(c`KSav;-jiv}V zxMVYLU71-U%h3lSIATRdxb$TuX40ii1s-OS7*R_)>Ya!f^0 zo`uR$`jd%qo9>w0(N<1+7YFm2&7m$FkH4pNU*HVPeCT~Tu%hx0)#dm{d8ONpJlrPC zE?!>kH6s}h=`v4M)y00IYO#vZ#!r~c7dhs3nTBo(omE?ZZfC?Lj^V;k|Ca&tX~L`7 zKWOodoQ(EK8C5!({_y2YilW%GnV`b5C&rZ$OpT-2f;Tg4N~sy5CXNg43O9Gq-*6FT zrPp@<)VP`ZDVO^&y-K2uWA*S z(?ZII_f1|;8t?HJ%Vs+owOxedlN+ujwwxLpA7c*o-z&sgD{B#*J`?R>)>V?r=HQ@i zKsSE3=ggJkrQs@(!7eqsMp`uv%W}7T^dGknbqXJE43_t^R7|qA2&cZLc8{n?v}(o( zcLvuS9o5iJyRc%?QD@$*Nwgu3X;PM^aV4(P!>!9t(w0?W{Bi+@@n)gl3X@8vnX_Y2 zbQ@ZPlFZkoD$8-a%3Zg1?NSwvqT$`(+EH}Q6!Qt5z56U^{-^DI>zg}O0_Q&!WPEhu zrhM@CxF|hoK`H5;-uKh}R!rlWlUG*;>56V&&ab^~XRN)&iUMPf%i(oFLba~1Hyd<( z%e7+Ve8!%>N`cd)+t!>%oyPm{M1$h*08XP}&9)_iywOb^8{DIF+pR^<6y`sb?YN-- zvf~>+vyFlYPXetxP+VqszSmQ+t|jVnBmLL$KQ+eX52HPQPQ<1s>D;iku;f)Sm|B(I z+EY0^`uW^+Kc{J**WsaqD@#RGH%989@dk}CsF0v}J5dZC1ZYBV($-A84Ca$vw%(@l z>|H~R6DC`n%r3a;IHoc2N$t){Ot^E;X;p9f(u=tcxgDOmZVDpN=EcFW`Ruv|de7ZW zvX~^TTA$oo!eu)=5I<(d)phKw{QT7M($|;Md)8ieKWz4t<(&Nv(XNgSbYEPCQx6^2 zZ%y)B&CYe4xz%M4>-qJiRh_cu9TgbQj`}C0$L$;}maef?}qA|Uexq9 z&m7hIg-Vw4RObH<^z8*3LdEG5v6J3T)57OPJ)lu`S z3*tN-=VKIG_9vYolrh&x1Ffe0xy#S97v# z=5y$uLt&Dw3-{75ZR(l#C~|3imu(?kC!@85q2n9f+Xg9@oX+*r&mDMqw;L?E8~;t1 zQ=TQDu18d5Vc52cGQ2yS(c^~pl^4C?T+<&MW7AV^t&(KqZX45X;~$(kyLpt&nrzLK0TD5rB~&YWcgBK>`ai3ldoli-c`Eu z94rd2GM}4vTgNVy+#74io|CF0Xl^*4#kkuck4>ORs$hM>d2O{v=|;{XrDjSSH;ft@ z-dpmx!!7e(4%IgE4$De+YgMDrvu0ZMJ2?D^{&Yb2Zt%@PHh|3>prr3*g-rZY=^E|)61dRG@i9qShrZ#c;CFF zFq2h#??gjpOBB#?pOLkF=--0rSO!J3IXaHV6{7x)U1ol z&n@1F|B+%w0dCJ8RMe6r&8McCwT_F!g_U1>xxSQlWwWFQxDoG_Njz+QBW{7A34zpe!%V%?=zJ(+%l=0K=jFLR-MPb-EPf5>Y`(qRwA@|3 zAxCKU*gu5$jO$;Q0FOa2240imVzdsR>y5A>PMm;;gf9^PHa$i9dC|)o2J!fiqPGEC zVpvy}7Ej_pK|#qSrtIN}r^eJY$%{hA^*bZ%a@Xfw&b|D>U|7)7k7MXm$QO~Fhjl20 z_CIg3rhjJ2u(4NUVd1KaSKY$*MWW@iuG`W&@vyE@K{1{Fg8Mc>$Hi=2SU(Hf$8tD3 zz4(1_3+Jh$k`g}*frLBx9h;tcKL4VBxrgO=$%R&v zhK`NKU)HzSi>iw|Cb%ef{>)Wyi=EASD4Ra3;P%8XNH)+eYm=_Ka;D$y@b2BoX2<7& z$xLXmDPr7sxxqI6xF6?`nq&01?wDa({k4on*4H}f#R(E3byoR@`7Pi6V~u-2D>+D-~Lv)lNLXsp{Bv_(xOocCMzneXB_vBrd5 zAQU4^xGpuxC0QSKM1=)~CR9jj_J_o4>}m~OJ!Tkf*Ky?M%7Yso+ni}s`CZ%V@*pAp z)Vk-Zjz4OBay$K8uV3k5$<+-mBApLB`T}pS&R(Uk;Ur_c*YLSx&(k<&Wn2#LS9nldrI#!xp@1#ymUs6~2si7P_ZX3LQ<&i7ybKh_wylryalgm9u5{3FdQRj2)x8gsSfvxogC$~E<1Q$a>?m%&8XR&+3Zb~Pwm-4y=XM8|ItYFi0l5puapyNT|cyU z&j=}NHD7sB-R6VB+9K)*L8%*+eLEaC!h9-JAl zwy+>>*82atTTmb&jY4^OClf7<*<2)z61~f9|06Xl`jwYP)yjX=?}NwUz?*HV!y_XU z(sGWPk{Ab+Eew9pgwcc(F7xFe)Hy-wC9FL%-iXjH_FUgvf@2Xf3=M^qCNT!I>0=u7W_~U=RC|EY7Cd<2Mn2z zA``J-H6|#4b(mkY*t)lR+jlm?;zI$F{r$=i?`+$d0o4On3JWQuP5H`}vsB=8#Gc47 zrNZha2!kXXiKG@lChw589gUyejvDjds^>8e$qB=C^V`Ad<75}?7e{#%9um@_F#fY9 zb(y{XqIDn)1J_XBhd+RV=Ii{wfj|E!s3v}HnGOqdZ`w!i926q$-$lpITCIPk-}KG* z0z>Lc!bkA%RkCk`;}2ONlRakGg;E~qugIg&UDs@*j2we%)vy@fvmcE#_3`z zwQ<{Xu6nH{HYq4dUO|7QwM_WcO|!c!leX~wo9d$>gg(teA!Ru^8$0ga14`(}Kqs4} zt!;F^6w9hrchP*NH*ymo-2WIISe$5tZh(maHyFD%xK(HYTo2*^+^Cpgg&G~k^B}N6 zkc^Q`AAHNx@MXW5^7uU=4WdyBOAmHwYZ({8vYv5N)GYyZxatlAr9eF$YI^`l5*q}1 zh+z|jrQ%;*H$5%w*lN$DGhx7gzzh$c417Cq8DXBxU97?nld3RN!k~Eh3ral>Wj&|^ zQ!@74+$)Xmfw>xAFj5!7Enn5Y8WXd!r)^PG2Hg-}VjNVp^PZqpf#ueiC=TCZ|L)D5 zmoDRK!Ci&lJm}p$s)3<|l>W0bC9u1q#EY^rX4{Ez$Yp;u;oi1VXni3}c4X}lSe&&? z9SkyanN@QFgyEENTpN=shnf%nk%!R;txj;wp^hub9n}eM%eQZL5|qbI{BD%I^o@9a z@%M!6_T<;A+rDEj#Q$K}XY%Jaw*|%o`1xl`wSFt$)yq%+*r){_r`p+H_k1c~lP4=5 zj?u;8yJsf0(X3^8onY?u=&MLa(;J#{&@crv>@-754uveTXMl?0w1C-mmc6xTzaG%9TWkIC&r(gR>S2-q0I%a0-s9~ zTDz+Ug*mA3Xw{;$)_wmd59ae?uMzukoGcf#$H&#v2EkPO2uR|k6Xh7FH!@auiA@$7`#3Q4NsJ2E9?ZbA1bBt=bvx;O_?(s| zqij<8NdrI;MAPK$G=F^VQW~ro=u~2j509$2lZ~>b(H7f1d*E~?3k=`__}`#Z=45qPJn?`vUh5ox;r`)%Eyr3lK24GZ4R&4(%)z%PV7 zX1?*#{0icfcK7he@-a<1a{;hTnBve}g~blUvQZ+-gojNEtHSkGmufQg+xL?*9pZcq z?1UBbQ_aNGizh)2-cMXTIDvCvDuS&)mb4?gVta$H?4@yhc6KY--ie1rS~`=`*6Uej zwSRvTY+7)PlVXq33ix4v{W|^n_F;2apbwOJe%#tWw~EaDfq$`v=7TH^eHplva7Ed- z+{{RmaUqut&78z)jSYX*I?ZUQNCJ?A&jk*FYJdtCC(;qG3GoHvRiq+AddATgv|%eE5^OLU}Vb3d)a9dw|JsiXO!|X`CXn z9`m1wiRC|xSSoP@gRzCrVgjxpOV>3qBl0Mu9y(2pjAUN)RiB$&x#;M|W9JR(BHVJI z#uQ>+DRwdV#o>$2^dUqanAubMKBSu5HnosluS&xMTZ-Fa4`@jjl1Oif&Q>vr4+CUcwh;p5*tY!lPs2YtIok?L#?OvKJ+0S&TzI7k5B{5&ks-k z_+%Qg2MZE_OMNUq70=!Q@U&Ibo#AbEKnv#L%=1F6g$?LRAcHnBX*CivIQibNGte6) z#)~!H@odrab;=YRyDGx8Bt#g!C+G>S{^&c2W}B(1zcYV_@%u(ps^(Z1`76Nh&O&~0 zI?ilr!o9WZ7M}z~Br>1vAj7S7{|{#&e|*X5?1NwpChVgnh9Sepa*)3M#*?x$sC!4J*~-r%bvV4Gb)9*a&J zRqW!ho54?s1Dj<#HXEF0r0Zef*9i#;39yTB=E8{v2ka0;2a2*f+-xMva#K8_%APJG z(>OI{Q_~5?aBAuWkeTi5f&kXRJj6>GEZ@yKv2@X`STi!6fX=wCF%wf|FW7>+9xJMO zZ8YM5lN%UkzqS#1xjB&%x7vT5&BTDn%fjD}X^$`x!UCu81jGtLXFYHrs(MiN$zc=n z1mg|Djs^PF)qD527TZMG;mXB0LpT9(cEe<~3-e*6BH{4CM{B96VL-PnHZZijVkZNy z9e;vPUR0)l=)w*YAN4H%1-Ewh_gf{U_wLwL>#do69sB@T+2AR{-N7KatdOvr3HWm1 zB7&I;m#3~|u6OlNamudbNmOmREy~ZwwfwcTW;Z)rZSMR%)!l;hME-Yoep5WP; zIu8d09?vp?+i#Ah(Y*EnexzDr&0>>+c!Uxw==Fo8YeH^c3vFy9lb+S&&!&>m8o9Ru zw-9{*Ohwv#$fk>^j2L!FCnX`)kbe-(;Z#IR$<$DiIq_`~Y#e-DR$I=zdANs`xYPF{ z+`DMm#oGi2hEP|Kp1?Hc4O<<~6s$UgO(5LGJEse%c=8HWT>6;Pm44Gl!G`zh$Y8(} z*M^Dki17y^u>Lke9C z{4r=`KbmH~e6ib_4s>`HK4k&3LQW6{WSSAv?g%jDUOl~GN2A8-3)P5Zvdl)JgV>4? zDdHNHSVyCIgKzpplnGjg42r zW`)LEf|me3{D^$VQey;QTnNC?0|n2z!iP!pUE+I#(V;+_Y_U04diO4i>%;P#S6uo@ zf!BKl)}${t(#G_9vV2L*#1vxZZ_^j}cYzR<@M-ZFB#MERR(XcMQtCN-oaF8MW;5RQ8GUhlr%nftjJOHPhbEw$WNbL-s4y&G<-z)vf*5m^EFKm5JT?*E)TIdW|s=! z#p%dg1ckQyZ$0o=1aFJ`Pey8_R?T0TtU!|l`VdGL(6wve1`%>PazhteN#smDJyH2m zBsoUAA?a);K#zU5ho3E9=LG*dPC%czDQChp`T6zz(MRvLEYY=e!j(k4y^O#ETf4)Y zHv?%3*R8IIHaZIsGh-{qd20;(DVe#A-&6n;0e0p^RvIC>sT|7?r0T~12%5oX!HGa7 z;{r8&dS}An%?$$bjYrxXnTOyZq^~ zC*o&LCI%uMAT$7+10lKsO~aB4JppJIgP)nS-yv1ZoU8~DMzbJ7a@!{X=?Je{)ISIa z2q+BaVGBU_H`Wjg&e-npLGFM+zj)Oq`n5j))RS1b1EByY8)*9!ef=qb?DfO3Nuow^ z^*}5t$*@By8bli^PC(6ch5fBCuOnUze^ZJ~a%38fb9homFtK}>@E0p9*WP|(jO60R z^AW$tc&-=+&@72gy6-948%#`|NHNKLI~O~;<_1IroMnz*k3BKDw45j=etvyj*^-F| zY@A(P!O=7lE@s2%7#r^jK*1(ZHo_b$8hIX^Mw@yeZo)pPlI}`anT_Zm zfXa@yeXYJ+5V<1Kig1Ov#t*_aj0iZ;3RTw9|JG1Hexr;GVmB}*a0BbIPN3oF*wzRH z9GEA8UafOg>lVQP$|-{An*`kxXOXTY7h+A%yA7ZsqN@rQ3$ZeCqmf>Xw>X|_^4SbH z$yZWsP5$IwB{}kCBa`;Q&4GL+hHQvM)QPVR|F=Jqi9A907K`1dxG?;3x+77Gcvnum zGXN*b59d+w)i~ntth)ZKhcc3}Q)5?B$()MfVvIFW99czIghL!mgvDqKqnh%i@aNyt zMaOY_@g-*C?b8CdRfFwW%ZsIT*fiMSBs==W%<4OcBLjjs5^QVI%ey0k4Cv!-URAj`5 zmzOc1NO-<3iAzi&GoXzQVA<+QlYa z?CgU8Y1KN2ajc*{{FehHCnLaANq>iLMNm!7Wwd9YC=5a>7`zZ$J$HKfda>&zV5bXt zmOD8C@rPX2J$p7Eeqw@40Nw}UM)aqpIOlhcW=)UgOF=gK4@Q7iK`U!(L*$8*{_`m# zm;{dgGbANw9u_82L_D_+RW=3w_WDZ(&|i_r2Hg0m z%9BafKj8KyBDn)ba<1yn?Y~h7*$O2VY@q^@#-ck;jU4})iN(2?0j)&8PF_`2KkuYO zr7JiCtsq;6ptJ#Y7Jh>^ z=0EML`hdjnyiW@h9~|~X-}={XgzyNeAdWpG$0>L&LlF+PKF-bPwZU!lA5M3*289hR zYoJ~?H;eMJ=7AFU0Q@25qLC=~b8xsJ+I6^=y z^_l#jN1!AiZef!%+?EZx^*1nt!DX8R=(`@xUy$^Q8VUG#@WMJ5h?Zo`$j=@xU@y}7 z+=24*|M}JxT~i-G)>uZgDKx4PtRS@V%SozgYDNeis}{z+=0FVq2j!B_+N3k!Y!_mf zG8njkI%$KHf?5@xA&4i0T7!57aDyYS?|*2#s{kPrB-F5;@nL|Ni8c;I$Ynu4KRrmU1_H#u#n66zYfEGT4RJG82%3^Ww}QC* zCSO1;1+9QW+LQysbdh|3p^QAUpX9w68p&c6IN6@v3KocbZ0wuw!%hEiX zf%v7vAPmXb2nNy=l$5ZS^|Yd|6v}$B&jfP#$(vqhqoAD=(Hl*)bf|F*78T}vfXt|l z_NZqceLK-jhqh^e0LW8?@Cg?Ll1QoYJ&BW-&{j%tv51!tl}l-1en=3KRH;b)w@9MV zE9Q${%*+sb1UKNU*Fn%SCBRgu_9$cJ<*i4j8J-k$Taw94NVc&+RFq6eP&hYoi8PBM zW5I0qw>Aa@v$KeR#Go1orQqSOxOKQnQ zl8azceD8M?iIeLdzi%UQK-rTYoAAE$@rlr1453n_SspZ7nF9|9_Z%5Ep@KCQld)i= z3Ct2o&3n(0ybD6)G)0{bJ)(w+{OH)<1*{w-H9U1l)6c%1qX3+WE1zl8D z$jqyq1=cF=|yL!T(t~1h_y}0(m0ri zev6yevN0BOu>gj)KnjfIf|sr`5~TS05?m9EFOa(sI+3f5j@t^*%>#hxBc)-`vVF0Y z02TcdS(1xw^-v!<%Ls1;>0vas0u!3Rzk{+s9!Q+BDl5hj|ICp=4kQjbdX$E4BH5;v z!RiaZg^-#6o;p0+2LJG%Gc7fb+-l_1M$)+IZ{51}vY<4Ps~#0-z7G!pwBEWo7UwEZ zC0(yy>qAo@1Z5N>`uYxG-qqm}z(J6dM4JP5iu5oy(+0H#(qN1?i_hZ&LJT@q!Mv## zIui}~AL#~;M2K5=fS%d0TLpKBK;Z-CZ0566uIz9zE2gC4F$v9vP>~byai%r$GO}otpH|I=t{{-=ZWBT|Y}JFbC4F zFJQ-HAdi8;1^2$gbXey8leIiH2&|#uEYhM#hJ;37{kP@5ADNND6J^)N#t2a`mZU#w{YZs(c7(~cU>TReoQRw2p)BTt$35cO;p7K{%>Pbo=wk-T?cGHXV*r*DU1 z>%(E7pNx!+9p679jq!Z$Cfwm;#&N?@Vn$>b0!odTqeKHb(i^6GBR9JAE zK~EqYUid#C81%g~l)z>`i0unnJ;WIt+D4`hzHvsIw5B&0LmnC8##xH@hL7kHfXI+Q z_|b=sFh-Ua$?|)#*C(U&HpDhIWrE)grRQ8#zv?jH8=E&vXlebu`u)=V7yZV#O(5qx z06h!k4F@eg7ve-z#F4dQjmhFhquPWMyzX=p{sId(dc_o!QiNR{iZM`?(L$I6sRLj- z0~v0Gl>D?w^(uc{c+k8c_BS>f;T1*{%{N9q2O|&<87a#9`g$H27(TDu{-eH8Ef>(x zOu+~fZXwX5+efMgy*v8*0}s@vl$6LJx(1UB2Q{j9yOM(X9<;c`8f-aF)pcl_dxrfD zA060Y1X0B7I9)k$Hf|#D?{5MISNMZ8@2{qD>Sl}x!t;wMqz{t3fIg2jIB?-jU~BW1sups(cD38CIav~KC&{+88jU3C)b~yU@(;Nn5CaXjowWo7 z8If~6ifbt;xJRHF2a#Idfdg1`1GrXoqq1XDUMSxf#O_X<_`Fxl@l9lYgiP~Hi;TVR zh~YS0oA~Z7qZC$4E-&?ynoBmAM4i#t=O{TU@t{05Q%0k4o^x2P-DKy8`-AU|6??yD z$Ggz{oMqm+gjL&<1DFi$i3^-}q)o#j6+wV$i#$%PKa+8DBY}ThiL>NHo3p{m^Lmo8 zjXW7x@4{@df3#3#1fLq9!qKZCLt+y;ds=$d1novyuH1*lh_RT*)ge+Ly%HF{=B)~Z z_G(;bJO-AQ3HGN^#a15n#Y2WsQ{xIXiKeltphBUZS9HOYTMcJ)-SfG*p)z5nIt}w9 z5!FsR(lPg^5`$HFx4jvo ztSj2~c4(&T`j?Z5V>4M^Gy*_FT!QBjOH{OAukTzKM&+$qMWDh6+ew`l9t`XY(4pka z@pO6JSOdFVCdG{IeL-S$hJu`&y=Ts2rgZc4@rj8-I4$wm?zrc<=WF8L3%D>xkA9B+ zakKHRbn{)ydKXN9fi`M?{D#Y!wzp3dY-~Z96TMc6(WjDELHUjsR@|1!dT(crOk0C~Yo+5P?7y(kPBnlnDN5q__$zx8okBZa(;Y&>K@z z378xkjskxfN@$1{^g#|qxfx-snq(1)C?6f)fGrAti4%5W?y>ybJlV()cOeagUWhF& zvzL}c>V)`ZAQfW|K)}XlECord#Jc607A5^{()9Zl`$GzI9|+P3KZh`#7)O{Gb|pPk zyigBm10NmnMU$zq=GE!?6e^kO0+k%rh9^(XS$?H%t=hY=IVs>-##J(SkMLj-KdpXr zu;-(12^eoVXMfs29FeohV!8ghyE`IZs%~^DuJukk7*3E9P&I=%G0ok8%@Q=)4N_9M zSFbYaSpqMlB=G=rWGrLGZC8)T@}j8eS{DF9{xCq>IBnQrt3bGF^XPbyj|QZ{Jfy=Y zk`vS#@bPQo)Q(QoCkdWtErj0Rgw;i?F-VeebR$7LnRKV|wCeMJgQ!S+0~bVQ!c~x| zf`jSBj6}GY6Ce)JR3Cl*i`QViP*R@u=gUm-*Yp5CGca`U>i|9jjy(m|IB*z`$cyF@ z>@2($A4urcQe0~D#k1DdnM8jitMgWEfjETmE6rIUtnt96U>rq7&)cof@~QDe1rpCZfI*M5oT_| zk?;1s4nh_#C9F%($H}ZypF>kKd-m={2r@Q4{t;@qGQaGeJ@6hnBj5M0JcL7qXp6{r zZrZPU^<7*LWjm}BXme~#D8V65hOCZbccwp33w0<}oS|gM3Ml2RT=jZEi#VuG3<|*= zK`=Jml!{x3EDp&jpr6pWAYUQXhl>zDNJItVFhOP_D)t7GhFsDvqw0Xa(f?u$iQwu1 zN7U5F%uixOL#3rIiv~a)k|z~)Pb2Kk;szaRfS}dGDr%m$qW5O|oq7XP+z3%I$)6$FP9o$6G!~mp~c#EXq z2uY^|ReuKU0gQtESHr@@NW`DGU!;@=EPt~7n|*sQ^{#=;H-mx|nNNlrEK;DFeIamkU~J1DMSqlE1h6*h0e{|V+SJH5Apwi1O2dQGj>qCJ7{s_ETS*`{OJ=w z*PKKIhd4kYLlp1em4v)XWCK!eeS;dcEABJNC%`*GW~w@}gpw3?1-v&bQn0S^l6e2{ zt&pN3shnXrz!m%x~&Q_WOuy4!;M&>Eiy*8wogj(6{l z2)uzD26Bt+82aHAHd>~4W3L=vG;uwha{eOog5`&$8gN@^*D>)&P3Gj=l7sw z;3Sa?{`~rkP<`a8{tG92oR&E1_wG$uFIAMUz=K?v0DIrPgM)+k9r1HgT+cuMkOzAO zUMQlP&VfXV1IGN5_;!{4nVFd+LorO=!|{Nz@llwFi8Kexh|FK_1m>`Rq7d65+CSPx z7cQUl#Fj)y2>Pf$S2|lTCxzkLJNo*}u$%#J#7s`c^L5vb`T8c}C#L?FR$IECF7eDs zka|l3|Nc>PR9YFb{U7oVch~0TDY2sn2XsSC2>FZTfv49yzv=`)nVb+j{{%p({P6o9HB-J^NFsd7~YezvWxEW z&tqfdh2!1%Z1sUFBYq`v4iDA^lo_6GWB&E%UYI{4ymEKHoXyclb%p@IQm>p8xQ^*G z+l6*3zpr9ZMXU<7oi*f3EbPn(&(XzF;?%NdT>q6CxlDXea>AF<|M!o$Yj=VFgB66P zOw3~SUh*;&V<4!dU$yPnVMg$7bM z{^zckBTnzdxt$oT7_`{bfN)(&Yxdb{e@vZ&SJix5Yfa6N5UP=eP2p+9PwXc>#Asi| z)1|YijXc570>Az5d?#Ws4)}ba{{tBa&_CC9a&}tlF9irb*v^Uy)6>#WX$w;|bG?;) z*=p{_)|0*N*jG{8M7!LQOYNzryK9D0aJo)m^fwU)QKY~pCq;_+FRog&@v{D5RLlqA z4=U?zd^+?R@hY@KpxwbLC6~QiJjzUPjz#o&7?&aDEfL!pl0_5P4nEm)CLP#?QUb1b zh%hPF|G{k1lqxcHibV6Xm;O!%PL&1zE*lUwi@hE-K9ZGWGW_}jXZk=J7-Fa)u(!mvCO5VNhyGXT2o>0NJ7F0wYkOWVI6T43e;uH z``~Fnyny*hq1A)S-t%+}MK$v57eruVdGY1#3I0SeWKCrJCJud^R%rIb&V^_QG90R7 zm}3LPK2(Ykb-`5-M_hhr-m{hg(CwcO|Dn60Or!`@6$q<>tLmd2M-RmzV1`}ifydkD zu-cOG4~Q8ul`0!6|4kHze2KRP(rZj?HfkfV>0nM1o@`N3NBy_y1nUU9kicuNfrRn6 zJ3iHnJ0qif)V;DtRz1$Pa~aP1=&lY$u$+JjRQM2s!uT!*=CZEC&>g) zVuXav1XwN4Gga+m4EDI66_jbjo7mxD(+kk-kDd`=VMGq2FNCNJ`Ur{@rETVq{W4K08qeT zua3Z|LDFoo+4iBG;1(&V0m9SAL%pc;qk^Isizu@MJ^&KEAP9jU3l&r3&_w8l5tks$ zp|)mJjx5VZ%tVA|h{?QN^iaQWcw;cul`CN&y+R3LV{oz=MpRY->8_Nq9G4c==xIzW z++}&lOy5O9s4Np&D*Cj_y(gDIaFs(XF8ze=BfnPuoPbXo5DF938uC4!fI^At&p)QV z?O0uUs@VlUa%$xLNwvVQz0rzz8p%)rymsH|&zpWuEY=)IEQRVj)*T(*I-I~m_-I3L zcs-)U>Z9O*1_?s=hG`3-P}Qe?qt z%|FpLGQBwU6gP{G*ySNvXp3>sS5kfv9wervdP9otJ2kQvr)iAqby!%5iwUt9(sjHd z2;R4DZN?Etu#*>7t#xp7Yf!Cs8npQ)Oja3bP(z*zzA%(p0#beTDmmj~R+gahv3I%{ z41gbp%2fib@XU+ReS7y34yM(?gM@nt(aRvm+{d9D9>hR#viFi0ql{qCrR*4GM3Xe%IaS`}_X$ z`{&oA_oKJwea^Y>>vdhvaXn!!7;wow2A zmtJw1MYFlF9`mHT2=&TSBl0 zK;97tiS8NR{}WsVi`HQvuJ{d;22fM5C>wx8C^m4MufT0_QsE{9ibDVX?MuG>%HPXx z&>z++$}ovU|7$9imJ($RPj3NiOHD(KP%BZMazu|z<>R=PHFe?s+H{?lC{xE+k{9 zYyS%bMkrO^|ig8 z4?(pQWZ~=;unz=3(#Ro>7{r?b_6jgANie~BW@&#n>62c&w;aoi;=Rnx6h<8tm`egw80r(;tx^;eZy}NfM(6kV9wF58mJ6vB= z#9=tHX%^1hc}RQ%(q68?Uj*7Zvbd5VjCnCJIH?t zYQLi(FoQ=hACJ^;kU}FH4xlWCgJ0(N?u&CjwwWRvfO1A&2|{9b{P)@mSkn8RFAN}* zMuzVDj+>p^Q^V3&k7GVEhgm7sF92EzHevMb`lEOV`ZA_}Lod`|WQX}nKXU>h1a2d!Zu3t->Ou+WFw zOo!dDCwpkI^BO{wA-dpyKLu!^pL%K`KPqpb}iy-rE*k41r2KfkVAG~Obk%0nmi zwk6X`K;Qw)f_zZ~0{N~VP~HVpETYnZUx0oK7{HiHtyn&jMwmn4LO{m^t_fs|GtjsQ zO%DIC+f5h1GC@@F85}dyqlZCo^yjH-ObLBIrax_B|ksE(Vye!c)js> zya5F3-8y{@ArcYWCt$Mxd;lN}10T%ZZ@;w-0(l^nsaGmGYJ4T&QAo1=MRJ^BJ`%i%KN{se14e9RdD+u-Q|bP#SjXnBC30+A75|4Z9y-xZ{Nv!=a{u$Z2!#%k-xzB3WX4`CorWX4>*lQ!9^iO3!vuz zIgXikGo7LOK>fA@#V)+d(DXug1AQMj3y=i7;#6cFhY??hJsGjdh>IKiV+`}&xU?0R za+!oFQ_IP5tsh(3t+faW3a$de5I!PfcS$%0jK}bV1SH+2m*jZ5HBLP0RV-d_ykXlSpStfMNwVj?p7$MwTaW^Sos@;q6u=$X zwYQewW-0Bu4I=DfMiHtXRFtx)!EYO``~U6FO$Nnm+BxeUIikVJ$#vA#{p$Ly1G2IF zH-}G6H#RrRtE*`M>xE_oT787khxjBFK7_vmpdaLm08Imj1>t~@M5V#p3d}z+ou$gp zz)lY=7lLkF$u9%Zh9Cf>pl5?>1oJ|ru#62EdkI09J`jXNh)OkL=VU}5SbSU+!RZ=1+@(LYY-+^f;_kAIdHUizI4!8 zj6rdLI}b!mAQ}6gq8YSPE-w8w4gj}9y99y`?$q&3BN;F&nxAC@lJwoy$>)mnWB10c z1p@p6=09jl>V!Uc`uyW17+&E(fWF4P!IT82`{W5##iHlK3Fq$( zS+T|;)_V__j_-#{Vv)Cn2M+&$zpJKyW1;^avwkm64y)TZke-R&1DY>7lj*o8zkuG9+v#lU+GXAk5_48su&<|d$1x#@3SR^&m%6NKhU z{)xv4l1aF7QQW#$$H!kC!XfD!ssCN){_1jT;_;YJqq2fq&2gvi^AEy;k5`5K_Sq{& zMJn!j2i~zkt0qgApAP}$44j9c2IWUbPZe~4MhQWzAhig(3iwz73W7=s{V3q9pljpy zI;M7fW@j%r)GNT(I%wsl1m3=Jj#&xv2n7AMcXbw_OlX2fvw3jCNA9+cAkrr|`!@js z2VyZ8&_Fo}a1;Pe2;d26;J}%Jln!WJKpqjfQSF4xz+vQdfVPOz&7h&bU{I{l`6|4QI)I&Ve&m~?E7S7ZZddl|)Dh#mSWqY!qs+HqA zppqql-eD^u;(B0?fj&T?oE;`OM+gCd)$nlV!yFSI9}kczygtAeK*x6z_81d-m$y4& z29wL(N#ER*CRV?;hz`hXkQdfx=x;sU2uuk)Yo)>b)q_y=W4AjSdJRM%1kMpa5J2S) zdorL8g~R<{oMR4PMNniAB@&E%P}QMsA2H|Q<*fwOmpLnxnRw@J@8OmdFr+}gy5es2 zbfCwLO9(s@a?;Xdh4C*uJ1-{;Z}_bQC?yW9z`;JHc7pU{_H>+B_U4IGApjX1T$%7R zPG6Mcu~_p8JoQ;Zep997BN-S+ft?qDYXa^X$`af*Q1t+&gj3_g&%IAj(BZm}oL-pX z0QlnyJOr@?d??%&B0i6=4c@4N?i#oc08l}244+r6z7cz*wm_N=Q?RYONJ5{ZrH+0U z)Y5nx1tnV+N^*GoAo$(e);zg7p zq+HhR$Il>E<%qJbx#1R-HD4oFc&1?_fpZNA1{i?hDF94X+ng0nUbs$#)r5iF?A*Bo zh+V#O$F**!d#2WQYD8>| zg#Ur{Sb`lASpJQMfGlDdsLffaZ1NCN3K7r4*~>3;g7-ydO=aQJJaJHw|Ni~EjVGNo zOYV zAge4cJ?Dn7cFd81)nxb}mS$@$icf`N6Bfo1il;ru!&8=0qcr%HEFvoFTVDDMGf-#P z6`h2d`}bp@GP@)j>3h(ImUVE=k)c0)X!iMH8xR-(v|`|#n1IbY_Hzlx`O<+VkE#Ob zs^`4zxhmu;p*;lb8{WJO;KRLz@~$Vqy#@-V1N;Q=ki!RB@%_KuT}0sLj1N8u#RdL6(glI+p+!Ot;vIZ_8wIxi?RW`> zHr}lmngbZr%3E5n)iWb-`aB8#x;hOSj)(O0^oTqTPy-OpLPPum(x;q_{_|@8@dDV@ zbLZSXQ)lcZW#bcJmPOE@e}Y+%X##B=3OR`c=zvnzWZL%OVFFAV&JkhuWMF7|LbcN% z%%jiovBg;%eGQFe%j*}Dv@gvTQ4xU*;DAk-KHt?%Bc?J*u@gtH2|62uxX!$5n3JVHw=#*y(f*v}#O zPn!4)0zyFn4R1O~0HCaa@H2+11XMuLb#?FR{8Hp)^>Wze}`8PbjQ~`hh5b&JJ6dk|D zmE-jxAr&}a8$cYPClyWV{d?mVlHr!J7(w6#W}d^G6}l4ybpm`C>E+=!BD6HXlht6T z0}*-n-<{jYQ1&+XRl>-E2$y#_bc^s8^~BJ?ejy{zmLhl{cK7xxJj|@D48F9u0(xfw zA4XE{@vH0038B9eMQR)GR&+I{&%L`EgG{U^2WC&l=dx|6T*S z4Hpc@A`(RdTsu7aAi0r+`VN&78e-%N_}hUNL%v{O;2e7M<_!WDAl^U6OPxF*Vu9T+ zRbg)=IiT}Eg!e!n1Y0SxCyzmuQ_5@E%fss3?UcxA2jAWa4KAX z>+W-D;?`-9yM_;5nbgIOJUk2MBw%lllw<^rxa#c*wCUdF-9`l67`ypc-o_eENEk}W zVIYJwML)QEXYuzD!Kv5z<8Yu@yA;5w1fVi(qk`-cVZP+RpR;0%lX3o!$S@%KBuIBJ zO)^J|t^_TqO%8ZZ&CR`GFICo|g7|Nr@@@TR`#+a0GEswq zIizzzwm>b}sipf2}{`}cxVgyDpc!rUZJ=s-U#ZE&YscQP()`sH3`xicsvoB_t+S`-#2%uni zcEb29GIfA~2;|;Y(xexjcOo1jVcHR#?rOX4?4Jog4V5K{&+o6*4`m+cKs-%{J5&N% z?)z7Va`N$&RX=vley%Dss^W$TuR{a0|VmpLI zjf6vd8ziLnK_>$38>l;L_0`h{o1x-9g;Nlz41oB65ei{(wyv)!!ww#3yvBeq4tu=$}vgUp(ne zU|p|fA+88$y;2}p4|0QL$0s1ODUih)oUPGp!&EQHOa;DQ`P>m(0xNdx19rrihwb#~XnPZEBcTK2q=U4~OR<~d;iHnQ?N~ya~?>Y<3yY4=E zC+-Q7hl&U{_9?%|f*l%{=-+t9|82xv=q;^;rQyfq+<1wU>iG zXf8(|Rv3Rze~oX%3lqxwrQOC42`b&TczfpJdbawvi%g6CF2WaU6i=U3$v(XOcHh6< z<3ArK3c9FY^7JnXkE*S3e9|tI;Ea|`6L5KJ&B-d1M&edBBQO?IrcrQAuIs*E^sU?V zrAS{Sw}~<$$G)7U6c&EGOutYiG9Y_aeoHvo=gbMB@WuOCRW;uWHyI^G2Ci@&o zkHKX68&{m0;iPs_w>#XwpS0pMc1^?A;p<+Ye&n%Xt^Vq$>rAJ{cC=@2Z`pTcKS?b; zY?vr|m*rFNOJ%OrLLy%APrC4ns5PHdZmJuMeN3zr3f*Uj0Sc)MCk$xC*?ul-v*c zw9+*jvx#@u(~TYOr2b}iOuz%mJ7KTHUf#oUg|!tNF~9wof!r|aY&Z3vccUI3Tpm&D z%sz89lky5&py(W<+5JSd+f^;NF@c$UX7kZiRHVk1Y~%w~D%VT4}e`&vgLuX*S}% zUl{8Ib)k&VB9&Gi!tT3fqy0R4dU=%L$8RblE$`Y4k~(kclU<5 zcxDb0XOu6<=2~0FlsufT$^TNBjH9UQbsydH4x{Lz${cF`Mi#8->JF1WhfF##o|bxJRPI-5ESaja{`~YJZgRR>6l2v$)2ab85;ptWERGClG0# z2`O7y78lk@nKpk%Gb%d5=4UI%3Zte9I_^KB#4}&_Lr10~<|+uS$CM!$ER}d_iO7FU z`8egtPgEja{*$6g-_A?ymSs#@zU2STD(QJol2yam>@4ZiRvGtIYMS)rN|Og=rBg$* z$}Cqj!Z}6WoCrrn$B~~HCvdZ0h_#|fUt024QHjh}n72tQ`9&%6Av%R3*Wa=?By=tG zuB7I9=1^`CruPmo39LAr4z_Zrro?dVRkg${lFz5aiBNI8h>qmR6<@*>t0WaYC)lJK zcjcve{|QMYOZ1r2Uzt?q^@H;IUxM`EC9sEj$PP9qSrq?*pn#8P=aur0Tzf>?cX*w$3*8X&$kn!-#6) zX)rY0SO<;XWIaA?n_eZote~jfjI#a+b&n4^Z%mG09g}^=`v9{|%dA<>OYb`D!Y>`A z!&E0g#AeW_Bn{_ND#t~~`C#qlutrALF73wO2Dbo#bfd@Qm&Q#Xo<- zGDcYOEf_S8nVBf8kZWk0(p1%qx{9T_5?x|`!X%sB&GInSE3$FLfyXKd!zt9`${N47 zZ%K2VOXQOf6N_yMy=^S5`~`XKTLV49b~(;H36T`JWM;y{mL9S{hTTPX%Vop!Db=TS z$I=CN*owWowPmbOVF|U}qRQA;B%;~I3o2!O=BvE)6SP)!4=I1(trN4)ULDrLAK5O; zOxIJ8b+u-W47QA)xVT}|R z&*}DnaG@}s!a7<#RhZukWsGl)k1s7^e1tPkXXD_m5VgZtHk6gGS3OE-I&++`!QT^p zIm^DYR4u08nK0aIAV&vTL6PV+(zFh1DrX#tl};8%cLC2SUD5E?BCG1Tzx-=GzY@xd z{%@tr8ZPK4ivCyHITrm&hADFWgxZ0&v`g|PEt1|$xE;#i@6FTN(auJ2JXVteVhG~? zEzD@gfhau@@r5uO>>lQ2SSbdh%}lr})Jp1|f8eI$+c6rIO0wjiN*~p5k~j5Qrrlp8@=LWCopKfBL8V3P$ZL#GL`&<29LR=lZ$|Z#tKd* z81n&bK92o>!i;;Fn|R4Icvu|qQ8Y_1(#z(Ybt)FpxGmY_wP)_Z$X`A!;#rKb40}*( zvKipOqUc>Xh`Ag+)1SG!|C_B?V#t^?*V(A)w)7AwpnxDqq%Ad1A;$B|L>dfTz((?K zXGqSn5!MBJ1cc{JW3&5PbyD=pDKkZTqj}b~%V?fAi62B=LDv(7Xi~{!aqJD)_tM$C zg1y>K49tD$>Z;ga^D2tCm#khIjDBj{l#B-c)B4eUu}XTy7X2PLlUU9+602iRn)*q) zPWSt1np@N%eZLQNL1MW5@;jQVnWPFC14^68VOCeWnUCfubPal!ws5NG zp0?9z#+Ig;*wHt!KOz#h<(z(}aHTSw7Gg`svgke?7MgE=%(hj%(;*=BbOqGuC$ZP4`wI;6Par5p1NWWqJ0 zkFmUWBhF9YnJdhjTG)?|T(v0tiy=G0#&*QV+}Cn)C{f%Xe^!00=c_gjhEh3p@T^IAt@e}zs(hCAG5U*m`k%@@@r$&m&rQETQ03Nqm) zDRYV6PWdn52E(xo8z0;GN)ssSs+L|*zD4V`zYwJ%=StNmCz@~T%i3#bzSP}OLbsZ8 z&h`em`)hfhbE=?Ib{4%pOsOV3mY(>n@YY--_Wiz*EHUSf^(zU2*lgo9k>-t(ZDVV( z0Rs{LMd#=U;ju2}_ZJg)O#2Vq%0IiH;s_6i>veFSgfl0}sAy39fyJDSvOQhQAF9KC z+=wA47r2lJ0t-%9b@@|CCY=@!sc7yH)&+VR6St-Muf|a}mcx%fXk|>KqYRUqHM8d< zD?`k_9@*bi4auz}2+y4gw~FdKTDLfSgls`widl!!MVNV=>eR0DLYOuWSw%G~P5czP zVg*a&jgBqlcpbS&v87p&h!&@NMY_88-lscJhcZspSfGA?DUUxpAy)(YS!B!vYd5p? zj#i#rcaor2EKt5G=y%L2iP=|K-v>-oCzQX0*>GtSHE=i*0~&QfhvM{$$#hemWyAK3 zyH+P}3@{V)qZjZ5`Ujh#;cNu5&)Q|#l;lS|spzSCE!`wWa)gLvu}XN~q*V;tk+Y@+ zg|;_?J24AM-<8XGb?(r*llze6N8NR2c=tUmLdD;~#rDUs*-sZ4I8p7prr(e5qbh#d z-9#}^P>ABqnm?7h%?!v;6o{hEnXL;&ou3+>r1TCeG{V0{$L_Vs=s!Nl5p>pAL19z{ zM*Zb&ch}r0#>t+TDQU5qTi6J{u3@jzxg3(U+WwkOBC?yd{JLJsjQfL6TX(q#bf57i zEHWxJZxf7^aKV30S*%pyN->Hle%K6jZR(Y|)FyfYTw*Yn*9`fEZ5-x#j%1nXHq66P{Qc!9WZMUf~;L4t;HSU|A-w};PF#-=HfS?7 z;`>|5Ng6xKLi0$aQ%-<|(th$Io_#UHlqB;xRx!txo7hTC8Pue3LE%C-e zM={l^Slx(QSP4pIQno`5C6>FOy-ne~)RsqB(JNEl;~9x5=X|ehQ6-<@1urT)@DA+H zasr#HJZd(-xQ%^{Q>R0dNP5w+Bx$z+Esi18Qsc(!O3_3;DYDRELeq5o=oS7djWp`G zc74HPiDXv7l&OqWyj-%8Dy+;{29ia^_$yp(|L(8gPsT)Qlm=cd=OrqO*TY!h?TE~) zw?|I4=Q~y{y3a@YTT-7X7Ru`1&2&3S%ZhaoG#j?mx>e6MLTxg6Sd_e)xw`ZGzv7X1 z6`O*Mk~u}i*S;#~AB(EII*~wIN|P#MsS-_0<7b)eG@i-i)Lg2&HJGS}&aC%%cE8;H zLB(`>JdfyPpFvvLWb`R5^(;J<$0+trMuS+aJh@cwQLmdq7nXK1nsL*H(I0I--kegF z5>!7XPKP6}XLabgm!IXLt4Dz&?S2y6wG`>P`Bzmi>~Vj2dR2Do6{gF|s0~qh{_i4s zzp1bhQQa5$zjNqy#E!+FT{bMtf;)NNdDf1UteSl2ISNbbc0fV=4bc{Vge67YUv9}N zzNKG&!Zvbi!&0ye=V=iq^l-^kq^#(Lt$8AvPN_T>E8+4f4&R_3bLaC@U}z1(!5i-Qu3DUdlo_4^Mk1Wk+k@4lFLD zVc9jmDeYA-vpeWn*E8+sA-?f?Od$z{!s4QZ`Q0tj9Pi6qu)B0^tWrAZXLF7H%S*?T z_p??5OzRN=PTvoG0hk}x4q4#(h*tIxU#II;w_NMY{FcR z$A^0Ul=u)HlB}Fd6B4^x3|37rEA1ewQ(({Yvkr*$hOY&aa4pvxsbAdRsU-*-E8Z@= z{84j;CpCPw_ExPh7K?8o&qx0$H{kI5yDmrzy6JLTTLh6|Mts~MSne2V6D2`Q=anoh;JtNMpV3!y$)y(b6m zZRPQrza70E+IaIX@5uM?yYCVu>9o|3(V>}{t8^r|hHIkr(xo3hC^J6x@K?t0oNl_$ zlqQjRW3I}mIw`zMEIF%2>Y%WsHppTxbo1!=h1-XmSz8X`QrSX2U-!#Q|bR=67dX}4pNnMVWo-bA0)GMa8h@4Cjf#;c%NcS!h300L8r~HoxB5hL zo;h1zr};=YBPLcmW1Wp{;R9d08OBUZ$AxxD*MZkvh@5fewEyWH+t&2&>;Fp@YT z?>laf4JzZzE7Z5dw!7*V>t3te_`y4)>-t#DIlSg)4S^c%K96Z$==E0K`&#u~xy+P8 zd+)6&opXS6M$ojuhne5E!+zB|shrKCw8V#D4oHLu)7V23_?~n4=74x`i1~0RJb0)T zd%F%J>Au;e=5NIIaP?i1tZR@SHHWFtUdNNm!N!*qbxb|$-l_eXxnW@0cs-_uAfL;O zQX&oOF>C~41-qHW3-kC*O9Dd1H63{4g0T#r;sWh%@3QYD`n=)g5?c?nG$Fcp_h*vc z_Fd5wKAG*^nmsN5;a7+k_UGGKG&ik$pM=7>YQ2{`7pR4)a%D6WP7&+EJ1I+zxQ<=Y zo_@a1xWF5tJY`rondQNe<#8`cCZOo9U?y=!H?5=wFQ2P&wt{Y$-F2nBo1Z)8=dK>- z5h>IFnw1R8eYsHc@l#=GhLrLw^}aIW(2lD3MZ>JIz<0@7p||0_aD~o7jK~Q?tn%yoxC`+`dN>&RUO7dL2Ct$^1t14P~jTRmX_<6JpWi4U8M7)h@wQj z(#ye3w1-c5^l#?qJCw2H+E?{D6-Y3QP+v0OS5v51FyOC<*UBHI^|qgRY%Z4qlaTVfOtC4VFQjArqpGhZyKZk?Z1OV;34 zI~pexq@V9Qm3ebK_U|p{LIXu^*T{>koB}2^wA8702M6M2%7ly|4u8 z8E{KlmuPWH_xsVgSJv9;h|`#Ljxv3->QlpF9*5SJ7j}yhYh;_{0CZ=CC^E7*$ zAVg_kAD9F-89cf%k~W#s`1dpZ*>2Er-R~!lP+ack((1csBRZYmAal>h=n$`aH)OM9 zEWa)M&1n%acl*YCBu2!zND*wY@Wukvk1YHH-=ZE!$}{yq*#+*Oe_nz|k6s=~UcrY} zPo<0%Zk`OyK;yC%4IPWps+56(+ff&g*L3fnTGw&b+wu=4?{uG^947mWVn`N`snJRA zq9-Kx^3%0N$K*z53(cT#$?X)nT$3asAN$Wqf^mvh`_SDHO*vO@a>T;A_!q zO*_l~{&wNQ(~)LeuGp`UFSKO0&rYKlK$Ew`}CU+1T zfb~PM=m_iz!zY3f%{j{TNi2GruPf;RwkO57|1J_Ys^B|B{+t;z?*##b!T2weXy)C>PqSI z426ai%_D)C8r``mGY=iduBWP!uY#2KtQ((YeiH~RprlEhQTSp{A60ia$n8RxiP@b@ z=jQhKY1@wK)M74Bq-oqJ85OFrT=&|Hr;MTy<%RXjLH@_7ze3NpnDf{j_are;n@Oi( zeJ<$JQ;JaQZ)A$BZ^Nn|Ycd(`^DEZ*Nk?}l#J;+tz0q|!WaED3XUktxqP?1YR?|~W z(SlBueVcDHXD?go2P;m)=Mda~BvIHm3P7}k95hIJzH zXV4N^o`ntS$kL4kRknPMEIhDiAUgy15?+6BXxR^TgT+6;B-h^z9viT@fMu_2_WXj3 zWp|nmhFgF#nzSltk=7mH^3tjLOpvsg#@)L0mi=0;JKTv*ys=aT7B!!R4Avg-*>Rbr zrZ6d=*84n*jWT9T@4V(GH5h5+vDymeBXC((-kJ{8X=|IE}FcFRS# ztn@uH%*deC)H56AR3}PJJy!l^%1qnSCY#hfCe7}G!lL~TID?7pH?fI4Vk@nb)=?=; z^!cQ~NW#L*t!o04yYFts>CobS%#RG|aAEiK>W2ooUm3UKr>cy<$Y=GFvsReL98pvB zDQ%7+tnFU8Q@;4^LQ*a>yQRxG*6pOZ?G=pX$vD$;ClL)v9L!=vns>f2uq&>VQt~*O zuS7C0pR~Ps_wA3ti!;W9EH(3bW+bALRi1+*7xr$(d~~Y9JcJZ-q%tLbSN+D-HFB5! z?9pIW?_%6&txdnVeE*b*D&wiB7@~)kOutNdh&3Kdi4oIw;$r`*4w3O4C(|^($H2A<`=8>$ye^8)>D20?|U?vdD^0nswuKkHejpu4LMV9m7aUb zFB|;%K_ZSuD9+h)cD_)LOvU{mQx6?1S=OAunP07NtI)nRev(s5LpY6|O$ui-KinTr zU!cEK&-{MwHRY2Bgid;g$0yskn9N9QClzg}qWYpWb)KZH_g66kuU-F`=g$GH0M4(!`z|tE1y1s#t$>7CPUQ5l2-dI#WBK)HuLd z9DJ*$$nky?%iy5@3ZMmdzv3%4|5A|?d9BykiH!8-X&KTTBL#|G%CQF45fdB32hCX4 zdk4+@{F4U7M~Mfg&ByPgY;WO{d}R5i-M-nOuV&ElXGg`-M{(lLnIDiuk1?-(f6%?Z zEfT(aa z&G`jSd;nz7q@-?X?&medIE_yaPJ|N|yls>8_+%Y5O1a_`zsx*T9-*#g$dq@X zrb_jCJsYf8>not7W=X~>z^sXiO#@IFbKfw+mrAb&{UEE<^>v3&)@rd0v#4ez@g3u+Bsz9#ea_OSbUM}`U6T0t z6aNjqth`#(>4~axUs^r)l(MO0^(Q`>x07DW?d)4e$x5-@6gytN#FKYjZA8|x)K}!=OSkt!lbn+!mA2-sQKRb@!gXhCSXT~U&H37~qhZ1# zr>&}u#4T>m+NYJCQ-AiLEpc{?Jr#|;J##Fy^K!m75qepy(+Oakv^-c{m15^Qh6EvS)KH~dP!lI z3uDDIc^3HH5c!6~MaxQ$D@v-m)v`7T4_8}m+AJDptttm>PGr^3Vfy^nUxr?(*1s&3 zSA z;0%&KC_!C-Z|p~$HaY&MNH|=S`G1}0R2ICz(Zjbh(*NI|vX);Feb$1JmHf9y^U;&` zXaAE$=!?_ysWKwgmM&PerKN{j=K^Y0(^jnrz zz*Ya8UaF%T*+K=PFW6y%xWy241!CcbEr%crZ37!B2(N3ai*8;oE8shdSD2o*o6?0V z{Hh8X2V+>l2AnMz;3b}cbpZDDf~6L8D4^CyjK9q2%3GdJ-{S_VhPLe}u5(4@GaoQ@ zN02>D?WT`5is4^2It>>5)mz{u7e%AWMY((Wg!DBbDu7xFeh`;=C-!UJWL!xHH-FRF7S7W>Zz-4SGuej zvP%i+fwb7@WB(CLoLOotTV_Q+0`b4o-#!!?KTO~}JYV9H&Mo)f4`e6xV+n5mS@|zj z6HWt+ITWAHM&%|E8zgVSKdd#ozci-X-?(KH!kVjA8bC%s@luVi|MHi7bfVPA=x=9} zdw-@4Wq=HBLpd&AAgh|T^##Ghop41;%j5NbYWs8=6T_<_ZRxK&!_zkKozh=^?p(Le z>N5N*NPqeJQT?A?^m{(uk;k^lvD}V8&>7n~|Ktm9e)BmZ-{AY>6SKaB^o|(S?8K4l zKb&6|JQ;Li*XGijJI!Et#eYm^kY=^QoH2(?`=?0dR{RN*H(ySf9{T(gwU|Ar{(QPb z{!BXk&)=7rhi7@_HuTyHBq?Xfi*`*bp3=Af;yY<()wyHFFiY`i&$RPz%82n5x4yEj z7>Pe^_kJo%QCOjhqK>E^$&fLf%H7Mf9eLp8jpB}c>%p_MXk6dU`EmV86URDAtinma zge(sCr-W^D;zQ@amSJ9jodZ{s$>D{&LCHD}uLCl`U?g}>%0jNsXRN-K?`jt(oLRD^Q1nm7Wgv#-e*uCfD2DTvcX76!K4x?@eEds zG{e3R@C0Xt{XE@6E4P(<%Y9(w4V`ZOuntPO@ zou37?9!XdBbIvq=q2A2A$|>R{bW+3Sl69(#?3cydZi@0$?z;(1rBioJz8L$=@XYLy zyoW|92=lS2x%0IHI!dyt@+&n)Z(}aJzM#(5M3qS6=cmS~=-@^b?Ac^Sis#9le^Bx< z+d2qyU9YJ{GkBS;r&_#TeaX>VB_-Q<#EUlgyEeU*u`5IF2=L;#^{q#mzQxD-M`H-D zVpCrbY6f%?9fXWoZ_cs~s`cr8xxX~K<11&Sxa^|9ZY9vdkjQXjcU`00NJ@F1*2+_Y zaaub{K*2F58y|eZ#R|pbv@B5Xt#Rq7;@3VMC6tCGrGw_NIQRrMx;=?}te-8ddHX3j zr*n!%<7<)+6nh4BMzrJkWoyLbKB`|1yLFl6i@ctqi@Zdk!HK4$JWR_jELK*|cleYc z+>1mOQy9%P-sjSMANJOxDXpIbpZF(r)da;Q7)fDkqCZ&pr0D#2QOAXNicZ+qDe$-! z)~7R^m6yj$R5}Wfh>!TQPt5xzvY!&l6&5lOZelxLbSKEJrF*X*e<6$_heCyvy5=`S zO1WUsR;BInV(TcGqTsii>o~(EKjYNtda-zS)#&~ig0&bylv&~cL(89;Y@}o*9$On9 zOf;0v!0Clx^HsU8vD2q7RoMrb@!Qh6qqxwlf)=T{vM%20YIJ=w+&*_z>B6{=d--Fh zS?d&1Q_B-h^%$oKuh6t)h+r>?nECX@T zOql}mY0MwVWF)cg>7bT=h-P0d=C07P@Fz3G)ank_3AZ*3w5G*Zrt3Wxyid);Rnu?Y zibI(7s{O@dQ@Ry@3VStNv-sr2Bi)+6<0Uoqg0h#Iq({ul?F0;@WIl`LpxNmtm9xl> z+NSh8;U{A(Wj_#CLC31nN^o%k;aoQ-w#OZ;% zjESeet-^*=i}@~Aj;sW^%6+w+#_==wxm1hdjpgDn>Y zd#{NWt1nB?t(mn}iUoOyoBt77D>c94aaF$HQ;nUv#S@H~jwTL!cKRTwSSo;H(?zHGtJ+nIft5iHOq7O1! zJ#w}~^bdEXj2udBSelX*;6gaQLL=>6q?D(vGBmTA3eXu3@2O zk)o@l30>y7^r{^OMNhu~intK;j^WB@-46tA4zmsIfg}TrtcEv31!yz`!|Yu@&Dlf` zQ^F|b7ghB9vDFQq8z(@`@&NOm%-^>9w8gYb2VEkH$UDp+c)v(=OLjyAPe>W{w@k}i zYRy|}ufm$N2Pr~bU)l|uJ1eqzQ z%?i{9gwU;&Q`;YR$r;JpsdBxD0CLBroSWcH|60kS>uP3^_$f6)0e~L3L=va6c`HK@ z*@Pws%bv2p5rK+CA&#zRYu5ACSa%KQ^K&C3s_hP4JOZhOrfJ#WQtL5lM^ zF=%o*`cIABi=EnnL$zy%TrNYo3qQ)cI%jy#@tsvaOCG0LwseFxl96(L*Sk;n{N+1} zXYSs~3wqKhTv>gRd*P~-)1tc$M)3J?|5(w@t1`zfeS8|aZ?MT1`Y6-(^7?5FGCaB$ zyI7>z<}4eywJ&h)*61k$RpjS7R83KY4p#l_$MKRk^@p~Q0;d!-Tj)bB;`LkDshUu;g%47a ztu_6=8R1u|3o*yLpH3xDY^#nmcbhuY|HYp3lyw@*H%5WA%`dDG5!xh2DFL^dX-0;XCVmAp zOV8!V3^j z#))=)&=s?&P;t_Y!s>M&vm*(eh?be-Rl7x8V=UX~b&SpEoFzov5&vN0QN7b`za*`| zsu1sIou-xi;661kD;uBj@(CA@x98o);HVxN$7jY-CQ`F>-r1HKbqHX5Du&Y-@YU;QVvc!JJ1%!sUJ&X zlxN{I!AP4&FxpM^OUcvf320|<$h5`=o$o^_Yvb=n@iw8K<9NIMFwa6mLj>!(l_WTt z-5HLmb1;Tq_&s=!i#*%9f%(au89lwy_yGrh>8mZ_$;|picA>bi#H(ZpQp?+hSAWw< zcE$Hez2BB2)b~}y3hUN4ja98oGFa&x$tdslN*6e%!muD3;65mX_9*{0nDgB)Eh936 zN|e3AqaZjx#mQ^w)Q&jc^0#-N8H)T^naepbpB~$E%DNmhE$88e`fa^+NCsjCcd%g3 zSqlkY3ps$C#BLLcYt{_AOBqAX49{F&QJbS)H@TOll&fg5dOB%Xk*8w3 z&OR3>zpAdx_@%Y9wA|^tXZ+3G72gL$)~Mh_`#T!ULvKzOHXaV#C^Zx1O*}B_59U?5 zvu)nW8D{qOo}tQe&^NAy0k>I{>b>@>npeJI+BqwaB&fK4V0KrCIk4gAgfFcL#iGo14A;qr!&Ci3Kk z_iz4uNs~(mWV2?Yueh{ZJS(;6hh<4nd*+p9fSxw?EWPw78XM)+|LP+tS!yBPfHENR zjg(Jze9g zfEy7Tc7hEdZ?m626*wYvBj3B1X^K+*;&J?oaR+}^f;gX){*!@xv%)u16IT02PfWheCsVV#qEVf?_Py+9*Sgyh9PADuc zSlj(PM64W8D8~BFX&Fb$>f94@6a3jEp*>a3nxC^$Uq4dPZ)PDtf41Y*6GIPSwqpL3 z7IY_nGwVI=H&^@iA3B)DI;B1*5{|K2ZL*MBOK=T$WnNe{D>%hcR(O2z9B62kYZw^V z(#uz*%C==`SZU@Mczn4#qS^JYT5#6k82+%J#g6UoJIfy|b-y{zfAHW55Ig(Q4p+Nl z6q~Jszs&pcL|4I^n;t|@T5olSic^^;z7GpDy|LPKZ@p5s??!O%Ux;ToWc7nr>?Bro zq1NO0v~98swUF+4F6YgCp`r6aYJt2oLj}ff+)vFu&@p`QwSYLr>WP)`pW>zyc9Lo0 zjEm_Dm2krwd{c?<*4Zr}7(J!AY1XW*lt=fKi>2AN|4d<-;6uu>{!hk*{tm=w!Xc?{#%m4DJO*=_rKK-?fyuw91fOr z)V4lQ|Jr_6r#bQogB`wHZ#Y2SaLT%ZaA~DxOlFB8kJih^<;2}6Z3CGyi8Yr9CsEDc zH<>l0_@0eSEgtk*u6`^f3f~f1WmvBNDtDJmB$1HZb3aLyKKT;!+Y-XE>!rO_uk-~kN@MOiLy?On*b${{NtM)6$)7~>{W8yTUkabYt0Yg0WobiOT zK4e4E?=`iF_#-@|@^$g768d>d>-O|=<1{{T#l?9t3#J@tcU<0Zvvz5lxAXE@7Sz#! zY2iHAMO(>Ngd^6tc~gpCq*kMT9IxVXQ;Wd#G>1T_GGoj^isLKYZcMq&L*C;pjR9%` za2$C1s7#Bsk&rx zdZM>(g%{$F(KnsPL_fB(`ILC?rOI{lV5D1buAYN+JieaejXNm~dkdyM+P+!-r>Mj{pgl zl^Hu6N7v%|v>Yh9ZJ@y8+-D-0GpsbAH|JebxQ8H%{+=OpS2emfu~vF9YiEAa6V7L# z5^NK}C~dVvFK{IZ5yNa(#Nc%_m{gJz>~#!8;j$y?IKhQ=*oK|WF~)afN1=2Fc3)%6mUZTggaXc*rQV9r^xY|bawbEI07sRkztPyIznpJY#v_PpVL zaZJCwX6Ew)wcdoj8>T=Z!K_%q@XMy!pncXYhpC+)mNxbf?GNnaWUka0Z5PgJ--+k3 zRnB=h!O5Mw7uq>8qhb28Vf+2eXrZI4~qo{vt*j@9G&?w8^raYYNpv}xlC;7rnHJW~0B^rb-r&wGDP)G*t>K4Qf z=r<0LKbuzxHz^&LNX)clB@TS*y12e!GciEbB7NpJ0sw`U#+$!1>#UPqq?7g{d|N}W z7J76Tc3?(NqF@ulx8DAI0xV?zb^)8+qcd7Pz{XP=@?Y8jX<+Q#-isKBX__2hVm;)g z@8tSCmatq3k;pe#fC%<*W_m-5Ex~HGWci#fHo-M-#N<*Ar4}1*pEy`<{EKtyS|_Wn z7=(tvlH7;dq+5JRUYS}fHgGF-*yAC57|{ zN=S#dnwLjqY_`pyE_-kn%DJf6`%CgOlfz&nz64m#V5MI-O>fOgOj4-&nmz8KlIR3F zqKGOla0g>tPHl8|h&o9vbR}ahDty%>i^c>2a0f~;+;%a^rySL8u=G}uCOO`h7J-hLk8?pUdw zw>YBR8a`~lVqxoAs@w876(h|Cfz0EoFJy8MkP|-C5u%~XM#cLwlbMVviUuG3^^w~q zm~k0jWRR~4kMIPQrrzf;ZSmX7a`%I$)eQ#QO6BI$XI-8N1VRyW4~`})5|Tt;549{ zIkh7vW?r@dD5t*N+XG45V*TU~4G87VyXj3W1Asn1?hG2Q{gQ-mx+!LiO+o=ymS%hOH z#QCY@+*_rn$Jcl}5-+tqJ-;a@u@pMA*p4mR_b6`jN!44PeHpA@<=oDLC2hRZDp9q_dqHFsczfcqNbC^E`bY($AK1A&Zl;u@uzlkn4I*c2*4qg{Wg7 zg*c5iTQhlXC6}yy$^IRvxxrx6ll*Yb=(7=D;YLaKQn`9=0y*iH!^%wpHq$jzx~zD) zd)0x}J)ibLp2*Kz)>B1o=C^A#^#rSQraECy&7)lU*0c9pXG65QIN{QUDz7Bu-)gol z=s(JH<~#{lpr2V&i(g z(|*O}M(0LNqpLZRZw-{Yu3b65uuh^+gPL8b*of~o5;c_jZKJDHFYiUp64b?=Tb26- z``_Enbih^rpWm{aCzEA$aV$J?UcOrT8NiRTU(?88pPfC2g@-pQ+w(v7lAp(vmTQ9D z0F6=Paq0SY#{~aFpFYQKU&xh{uqzX1v`eN$5HLz#aoC*>U;vIE0$N7(!%=p$)hOUg z#)3c77Xk!wKxwdY ziW=HKey)4r@XgadZ@%TKpJ_`*N70m4V4t58BD`ptlP;>6D*7g-Opr7)YIf&g4*;(N zR7^)d)XVn(8aBCFFBQNGRso;}PZnSu4~!uyXfkOv*?JsqjX_iOU=vk90|L-bjK7id zBGhG-J;(AL7(rdNk5hezQg){ak!*#EzD(&CfOpLO8gO1&i6>G}-&PwZA$CUCLqy7l zANHl%0avd~&vVCHH%EtHaV))Xn3429RLZ)*+`k9re~UkC-k)dwVdn#Ry7m32&f`ky zaqBA$v>NaZhs8U`>9K8@u%$L6%NWT;OFcuEg(X+RW(SPf0)5CKHRQ=AxJAw$1?RR^gN7vjGmC`YPLY zxDa8jpW;Hw*7d&U{UG#W$=FiWBJQilSt%|N``84dxj?3KEd9zirS~O(UUg?BR}?nJ<19t&@Bsi4&IEX&CTuTfZJ7=SwH2I z@{|r)oI9iDDE`}W{msmO?~|GR49ZJ-@H`VP8PB(S-_>tUiVTmx?XxFURfvbI( zo#U4C%Rw|PF9Ng}JmsaIY#+`i5K)jlMwHfQ02-EUv$n?u%=LGI3vXbzL)sA%2y?ar z3GX#x$k4DHHpYD;8g};pr86oHDggCP_C}x*&}r@{9kS$$WjdGQ;VB8w^hfrkx=eLC zpip3i6k`l85TJz39Gw&C2m?k zWld%aOt{4JY`t!z)x#X|w<>|GG^J>m zaU)V)!JCDP0i~7x%KKBA;ple&j-_7o!Fw4%Y#C34o7a*Mpq-;Ll*7 z00j(CM?u$50K^XkfL40``}-$7(*^-OQ&>3n-VjNF18_pp8POJylJW)rA^Otvya!#O z+z!o@>g3O?^L4_LsjqJHz$cs{m$tgtG81o<%a>29S>qo>38kP2gmU+T$nEtBJev{iA=H$#*|?mB2K#%JHxQx^15N{98~*y^Oyuv7I;? zt9+BD&YZ_zGARdoOzNh|-?n*(p0Z%cP{-5>EbMh`C<~WOoKdp=KS!8m(nQR6R0A?8 z=q86F2m0PWHvUTuT9C0fv}J~mElV+5u9d{M+o8!AEwX3cDJm#%*oOm50#>OFy1&XS zAxVK+5wG9KJ)`HOzCi5?pP+QN7puqna@JsyuS-djPH$4IhC`@z6~9GZIFLsSna18i zeT9TxQsJ-8e|(D6m&H%}N8TWLsz@usGu$6p4|Rug@l$E)W>{qT$Vyee(F+OQ&7yn z=&H3trd1U%GuJ?1_jwN~jfCsWC1AH_{@)>3402wCSc6){%{lTN!tKo69ho9|D=g-x ztktF2J5uF>ErB}zEc*tP$-(AbsyuzNj^91&^IFo%RP z$5Z&2CYwxURZGFUAIt0($dvL*~dad;ECf<2l`Ojy{ZOHZ4&xj|eV zpL!wpl2Ha|F7O{HDt0qi{Mdo}8u6gnC73mId7K7*0m*?yW>KhcPZAKJ;(-(1RE4ah z+V3jOn^*ZPAy0pi!dV(&_iRU*Um$2ss!u^G_Le{!;cp4!kQrH?`?f~}AITBkFWWLM zk_l{$COW!4Tr;EnVsLnhl=_-OF>C&_!fhp*!7hsywpNOZI)n<<-|=nTr{j;1IszR&UO@}15_XE;A`!W zU#-Qv($XmdKW(=A;^BLY5h+H0<9M%#ZgKdPhM~Kur(1NnN+i)R5f9s+&GZEN8D0fX z~Ck0?bTYP><*7ovnq;_zR|62cmX=Uz;CY1(oMV95UgQ z8J8_aeN)`zpJ}K&{`;pc(lbAWO1bY9cco_JBsrXsWX@tB3&mqHs+kL?6JVmvl4%dN z#Fz2)=QAZDuG!cP1x-gLWpUM&k+@xS&K|2e4x{J5XXBj zPN{KR?SpYU0=OG20p$7Q2?jxfKBw$b$<>y}vllp6WWZ(AV9-8jZ~nzWU);1dY%S+j z%^&PsXvDZNbj#0;#Y8P7aZ2zq$QSaw3MMUHNJ`+=`DyowGfa>25e=#8tKCA3Yi^h; zNQM@V9?3!0g|^NklWM`iRR3ajl5BaZMpRuiBXPlg+9dWDr-F9ThNEw+ zE24-dL>umFm1$KY7f%Dl4BGP87hNL#DqEmxcH}G8o96?cT)hLjO!X@{CTpy*pAX`< z2(;8SB_~6{q$_Mky2yLAnQL^{Xv!x-va;aRy^dp|E~+-`N_;Y%x5Hp4;eGSAJyVc@ z)hC)Y8u0WJp=t%;cjvy0Z{Bu+v$R=Ke$fu5?8K-KIRE@D-VAFPk#pnYC+WBt{c<9j z2OI_n4VfrDu}N+}wxSLH)FXJ`d+IkH-y3sh`*pf^CgH<%n;+zmsGBcnC@xICYhF1| zYe&Mk!DPbf`QJhZ7eQc~s#p5zzEMgWFS-;~`aA0xLsfLhSC%EN2zs=o4M!0_5RlOo>xzLxMCFQhVngF0yhrl_n5qrb#xAE%l;JUbN6^>C*Z{fK4gGJMoc)kw`1V-nK<4ML>I8J@H3-Z&_?{v=v$YFLqO)MeLF z35I$H06O62PII2Uw>MRcMx~o!*$4k>r8xwTA7H@lh|Lf_J^QUWf7$?QZnP|37w>Ud z@wVkoTI3zXE7}m~vi4{wh_li$-JmxwHwzx4E$c5uA4Il7zO+^0*pLf>Fj#e0zBAns z_!b)towkHpxd?6zJ~w4!EJeSeBhu+i(cY}Y6tU5EC8HZnFYz5(@J(c7OKNOs@X#Oj zo5NTR&nbdE#2cnsjVhid?_BlQO4qLAv9(#x@9yFp3786x+jcmVpGkgU?09ZQd_x5O z-HqEM$^mh|ZKl(%eDmk?tr3@46E1Ke!-`RQ{HXM=ugiT5pQzV3xjr%}e4M{ECePo& zlv*E067(N56AqL8@4f#Y=v`mlap>VNN>DIzI(4?8B2=0UOAXem^#zPW)owT&9&8ck1O6+~RTh`&| z1^aa+;6a<3NLQ*MmPoxvmqD4-)0U^c>Mlp`R9+e99=%(Y90E~&pj=QSt(52Dao?SjUcaspaG!qHj@~gataGiUhtwqjyULcd}z9MDh>6oib1l} zwy$=)HNn_5Eb~>MV8?JhG%mnm)a##*_RkJckl$`kGCL#fR{lF}i!Ru($J#{y`s3?1 zfo7wBtVBvW=Hymk!oMuv;3vM*3VNa)AWm_kQ_8;T3a!-&qQ?0`On&NxrJ1BrKDNnc zFT_1wSc^IMDy{9>Zx#CPm3AL}>^?Z(7j5?V$j`W?QVUG)AkK7Ll>W&n?5H5lIt5_H zMjvwB&vyOy&2{fp^ygRMN0VY7pPI1-KQ~h7?+d#t z*s!~czIZds+wuS_Ct9d&MY1l9{pu;K+A;>2mK7{63P(ax7@@#E&LFYNRz;WS2Qs(X zLD+q_qp-}DkY zXZ(o5v%@Tgco8aTNJt7(LnAgtqM<3IfT zS%7>l3vgEr3?>xk!pklT+fSQHHz+iBI!2A?4Ez5K!KBrXsk)4Wa88SF6k+I7y>r9q zQ$mpwUVQrM2MXut)8i#+dU>{tsHM;8#aKZaKjyyr70V$dOY{hW_q3gVZ|9G;#fz=H zkU#vIicWppv{xTpO6Z}Sh>T_nl#@%Cq}5{o8K++n-LPQz;R*VyVfXhU^-~M-KKo%X z;}0Q;NQa(;XNoOp7t#W(XTKiS?>(s}tt zHX5Gu?c4ZWrzVHr1LN!02`fdNTORx5m-7BhixWDg{@KEzhU4ac?nv+?&SaO*$*PEU zY4&YFZd1=(VLPa3I!vPdO-+4Yi~LlqWp4hyF8OKIv-=)#4h(yGu{-vH6AFy}t&=<0 z)1fP$VFs;=P66t{{WdZxbD^4$fL&H&Wmk)11J1!YYOa>5F?5TL3ABo&!snBwa(T(y z4US9SGEX+WI2>ZCG-E*ISXm89uYRk=)!+2+1>|3}7!wzF7d4kp1kG&@lm(f={nOvB z+v7BM*|{vV>o*fxBt>s5e@#dcd-*c=@{g07n;PE&g>NxghR zFy-{+z-r)#7e}d{oK<8KtWDy`KXD6_AVrP(i+N!1WFFu$~eOj-6f zBgxO~k{6kRh9A!)YHdvgW#9Tn*xpSji%jhYPx=(yr>)L&6^3_1u1@&~-dOBTb^^W3 z$qULQI_l_)j4b09yzzKbEw@qwelbsUZ9nV#ybsWU8k!>E~N%(2ACDb0%%*##R(9dOrUy;OFT6QI76I@ ztB+|GLlJL*)=f!^?t=iqM*13bH){uoTgRORrtGe9_|+Tfjnq(DBd?t|t?Y|wzKpG) zF*j`P;D6|dbI3%P2#Ia0#-y5*A7jjCI(O}|wQ3+xm6iP^F=zS(OS$))CfnXIBoU~C zwY`}~Yyvs~E$;-MjKbj=gzT+d^zEv@=+}?K{ojlGgKS{^r-8b8q&hg5t zNkjv=Rap^Z1dn|9z9S_rZN^Kpe$W50=JmFd@fAJFAi>X&+zJfVNjdkl14hxvb)fT# z?Sla!Ny_&(!DpIe8J2k`fGRu(GzI~j?l(Jn(K(Kmo7M><*{nO@ueXG>(pe{q0<*5B zc!;yQqdY0+JN=l4Cl->&9l$lb(vzYmydj|FRQEKz-qeoLjy#f67vunky{f{*UDpu@ zOH6k-eqV8@)l8DHl|kBQ-gyTz;XUVI#l{;rT9XMc%)kCrZc*;dXsxW`c^@`%ErVPR zc^MtwO5G51B4dl^wpID^GQwV|`@)f?1+w;|$Yy!aXh3y`z6QmBsfG3LHUF|ISmpuSW=qJ;%o)>Hmwc(2=Pd4!>i zgb5`>2RG@K4anl~6vU01#F|JUdPhpm456 z|N0Ejk2}6NeN)c_sJLOTuHKnn;R#-}H=cj<#(C~hJmvu)*x3abz{M|FRMHW~xTH5R zw-q>$o}Cd@!tu!YXA8~{CalxADwHP2?F4lIQe5LuYoftql6ci$KhMjbcsO;G);jvg zwnOJ4l7=Xtd6BT)o{)g@2zo@#Pui)0z7v^<<~Y<)8|Ld&zR{CKC<@~)aC=XxGh03lU2(V@o;a#9i!M zm*~idbnLyFVghtWhpmNcbzl1=*FGH3l^aBkx(D+22%@x}3Y%f1Z>$%}zz7)wh}%iy z^HI7vC6bxiCgpEAjiL`&OEPnP==7xh$JQT8%)REVvCb&icTFdGL}Cet1#EC8okyj@ z_dn7=F>&#NTQWGVWK@Cmb*2T}oy~>B2~C#EY$5$kT~eeO9l85I(N@>+2B|0`4VB++ zbRm}xP;^R`+sJ}_*~w#Cmx4Vt;emzEgaqF;feo|Cp*$St&If8(!Di@!)3w@hSt~Dg z=Jq7KpgL!E4M!ndP-^szV!ue{fxcVnw$4(Hp|?{0uYk?^TnYd<@B8=nmm}a8bLR#E z3yC_^>zTJ4>!3~nKnDb9m=6s#=8c?00m+6(d;>Fi)@2&^3VbS}3c~hwrMpL{IXxUR zJ$R(w5~;wFv1XVr`dyrvRAYXjeDK#1m)oh6+_AQy;mjoY7atmKb|-H*S!96Kr6rPl zwrNw)zb=e{EV=tTkYnCFC5kzuZ`WM->&Uv@vWCf&siUi+Kd2olj%4^4YBg2h1(iIa z6UHv~o-10Tw-qvTDE!7Zb0}9qK+U0?^g_&DC*w`X`{6zA0tY|ZKnz@?O%ZxSuoJ`RocRemE4P^w^UCdk+%EHIOci5uL)7RY#9U%pm3uoErhr> z(tcUdyhISHY$Fgg1S;e>ZOKc2eP{ECO8O+%vk30cJ)K#!EpD?LBB44@M!6t`--tar z;6QxQ>NubDYqIMsX$@A4w6eb@;9sJ7Lz4e(_$Q%lJ<#m4pA6FnivovEFY)hmWD};D zTzJ${?uCT2CMA)(GT6M;qep1(8x)^dZ@(6&d{<&hI2|-fS7vO38;Fd4r{dQIA``c; zX}!s#-()eWGG8gO_z5TV8xuRy3MZQf4E&cw=59Oj9K2C6AX*tcRJlZWzs*fc4P32@ ztBo^REgJQ`{=!x*8I;P$^)AxKTd9|i07wmlHmt!_c!`mliCgvH-I!0GMCXE3hwY9y zK_#Ov<&RZR$xbd;MKl+kxnz>hEwYKy(rgP$i#_rx3N0~r%{xNhF5;EB#ga?*On)Ih zMCR*8JG6oWJED7;4l4Z%e=0eCDs7jcC|I%*lie!e6Uzv9vizFk$*6Mf&{4mfKgD$8 zK!W2h&ZvCcRLI|;rNEm|dHm_sL5UaHuUnUiXbt1c^&B~jSWFII1WuvI<-1Wx2QOw5 zWqy-w+pM}%mW_pU6aFL!OYjP>TJo;2>^&h5$vMwhY3x*JczV`J;LZHRRXplc{95n# z_OBa@78%r$1-U+q5il5-{qUmb50k0EH(3WN5YyaFep{XS<1-jOq zTP8XJBm!PaUtSJ*-2`Ktd?b)r!~Dq>(zYzYC6684u{24)SjhX<_b0gnTH$`gk|mTm zZKd-!mho>6(>-A|ySP&Z)QrwiS(xYkoZ9yf+~*`ezI=Ev`BD9s!k|uiu4(#Vi5H7n zs(T!-6gTH)2SXCIdO@})qvpkJ>IzS#EpIhoSR$ee_7cX;w$JPo07MA;C>d&iTEizY z66R_8)&mLMTAnyOJiIGl&Ng#*#~2CDw+5P~faDI4pkD{nXXk^9uObBd#)#*jy;Y8B z8H;|BV~Bz%?s6O49Wz_5FUBq9W{4$I@w7bqS@|` zSVmqVmMTRaW{eMevWzk6tO&*WI8k;pNlnr;j;WbxcoKAlGI>pRaonyf6&YOo_(Za>vOV!IU*Lh07D-PU-pihfL zE99?sSROII5BOkKE8&=OXPGwV6AKv1HfsB@mbl!ij{F#BJbR!XyD5Ov;Le!I^17Cq z8mQRLF9n(#){{@!#LImW-0D_Df^c~xx(%QLlKWoo{ulv*zIML_J0szc(d;e6i>K636tb3)z=dpq?B?$zdCbLie#B5}pE z4F#P?O{-N-aOVm1vcoRfBk-KThujx+0>dVrnDLK~hMV@ygq|Ff6EaF6{l-yUIlr3a z^NPDIjCvjm^C;;cb3NQeA!WnrX1Ln)-+3Y@(Q6M7a4D^a+wb*ShC{`J>w8Qp>(b)V z-YPK`7tua4RH^!!e3>GaTwq?geL^SRrZnd%MfznRcbiG>l9N}d156n*msC8S@hEsK z<^C1HsI|aV)#}l^ay?>gveN3s7k~`>H)0<;!@M4DUpjNxHzK8-ap^XK2PJ!J;-YV` z4(Wq!_p6y^-MDcjqaLSKQ{it$=b{$$FWC#PSKCDW(N0L>bT5#mkXEI6Zm_)n5mIvm zFP?ifuph5Ai86gkxjvPi_WzOx=Y(x30ilVrSOPh# ziu(W33WWFXDO7-iW47)0RNKJ;>4Lnb<}5(7fB)sn?qbDX1=l|x91f!@00uu0W&(O< z_x@9@04VJ$fQ6!_CcXI2e-jS43h-GD;qKkj5w4;C%+vyMHiQ4mA(TG-QF`X32WG3n zfEk>=_EgRS=aTL2pzyJc(Q}bJP|2 zA8UxsqCS>qfrIF?z(GJd5IA60210NrQRW%snm<7P2^MyAEVq^)4K+9!!V- zX6`?A_<9(OA@6s@tb0=bQ@$^F@=*hWS}pQ!EYsUIf{jAQDyw9T};O zV^PikB4f#V_$;?L1s>6-!M_K9kdnr~iVd>Ss|u@#q3!Oj54*~qxC@Ziv2Uza6LslJ zl#8~nV2l6JQ+@}V9zB(vyhQ78YGnE7l6S%8pQ?+?=OXpE2(EkYd^Jc?YCE^JBRDVaLzTkbC9N}&;-3$x0P@mbp^#|zSub!B!7vr^~ht}&}r zI+U+dwV1v1(G-m-(EO5f*a5@fMGVlf_(bl4l!wulL&~Ca#hXTIQf7~jr}#b{SEm(z zt%42tT-p6im8VqMy0_w-F*H+TVU9$&S?L(#UEKYvvP^yb z)${R)CRc}Cm0j|n3;ejdW2QTDUx%k~=4b138L=fpjn42yXD;Qa3Qxf2bf#YZakP`* zP6ooS;onz$`~aEAyuqchlPJJv7yhMh5Acueoym9sBZmLuse%2WX~4^>CKc`@oyG2c zSNVV{B`I_nN0Q-}^5xuUXG$74AaGT*hPRB=FqMt8vxd_aCfUaFe-0VL2{$o2#m*3O zQR-T;{0fE1QpwwIAI4;EbtJ<$kbCVIh`k1pbAu69E->dAt{yXCf5cJ~TGwLy;odIO z5W~W~Sh3I_!Xo@t#M{`wk%kK~c&m=Ig%G{)DCmsFX?NA3Y#_B}Iw^NMA`f=5*~M6) z=i6+(Wcp+uPwaR8a4Zk~fl%q8wDTlULzzfLWpbKaWJW&?26Z@PPsmrP`n`TOsp@>v zOVn!Wv^`7-k*QQiNbu|5U6%IT%|&P?PE3#w1^7?0Jn2%{Ac~c%wL!0ATZv*Jj_D?N zZ(5V*Ar+ikQM5_)lU-C}dVUXS%V`JIQ|3frNSxNt35A$@8d(Oruz?lhry>3?kC0kn5M4c&_KH!TCoe+L9~u)Z zuVn0c0@F0!Yy^C3Z_wofR_O~L?fXOev_^sXmNyc|C)yh}gvcEA%&oA?;9kl+&5PO! zpDr`G-(LxJWZ9HzzwJ{%w(L>}tBBYwRuM4}aiTn#+B51+{dJSCcT?6^u@xwd>P2!k zgG}toccy$SciunaP}z}OJ1_Z_x?+@4)1P>|PUVJVSxzSx4bYMIc3Q4?5=V>;*rG&1 z&Gg~WnY{;anj7UOjiJlDN7dQ)L8mHMbshSTlU*#Cf`WVBwwEhYZ;H=wI8zp2{U4Z! zq8q^H9a1XLPKre`30MtncEBW154drYW~4D&p^+_yM97Iow_zGePc12R_g` zph@nqrCgr}QyqrlqKt&+34y5|8o!a!S1cqiEX?vo7F0W?TxUp9JZ%{fqjwSZhynpy#k`&rz;MX<$!+Lg3N z$y<(@vvw)iki$>&MlNN03d(4YiZrrUuzlPya?!M4jyI1zR^4hmUu^h<{(a_o;+)mC zXLt65_hrEbYoSIu0`qB{1h#i-lXW3;(}#RW@INbJ03pl@j%KYS*NsLwnB1`4pKpsq zE}g%%HXAiJ`0iMG<$rr8csfWfr%77Yuv|O8Vf`|MP;w`Tn4lO)r)g4te!ECu zivi+!lzu|>R4Zd*QoaT2VujO9NJ~EI;y;B&d|7O@&A;B(DjQdIA)Nb^NwcCVaRAZD zk|g4LE))|>(m!IMY(YY)-`Mg@g@gg$O`$+0{!GHWxw-ieIl(75(NGb6*L)Jscj>=jh>P_8lyY0 za#^Z&M2}*bwhvVd6W`{o803e&KzMMY7gOWu%vrHRvAzzVis8*JC=k|Or2XWPrjZws zDM3j<5MzJm(9(oU875BcV0Ct^lz!-a| z9;}aD?G0WpbI!mIP~ag9qyco<@bl#A3Yb_sFy!!b?BE}1$)vG$G9uB5u~GVMc zY3>4L{3%%QvRj0~Pyqb_te}@smiuS^bj;C*s-KfT53Zgfg(e(9(T0haSUdQZnFr4g zvZzZ6zh~{pP%lNy{ES8kQ8sGRQgw;`(b|$}!4ybJytCx^ZDj-|^3s{D~@lN%2P~tY&ypAFeNg76nc- zfkgHE!#hyLwc2NbNbiXI0@SFzm^@2$-g8P)uIzWBs%x0Rd(|5>+%e zzL@i!mo5Xe&lZ}Dmxke5O;puxtd<<2xb+UDaik_J$d7akOxAJgK1?)+*cwG`;Vt#} z323sTPP4~@-MXt+#XrInb*8?$z1N*F`s$|h+p1Xu&e&|6+2r+GAtzsGn*gLGw+UWS z!7EuO?WR-5RkRyrpbq0LE0t{ma`A8X{sKnf+^v_T^{i^b?9}eb?Fr}6B`+>P1yk6! z?nd#E@U$u~x0|OF3%eBkrklHy^7jpQ(Q?YUKZ*-bHAEi&7Yy%-b<9^YwXWhx2yigS zNA_mTJC373YSj)D+C^|%?wmth_)kk)t3h3|+Niz1)XVk41o8=+b^Vlwr=#b~TQ&Xi z&o10hRZ)5~SCr*VnOpQVRa36OuQyuyep1vkP16z`QDG4*xLxN%r339uxU|qYjx3b z1#9hDvTiaUXuzq#G?>j;{dqBx90%*|x zXJP@^x$^~=+AY8EM*lMx-85ww!>XH+3E+40((wpRZCHXQi-BoiP`am|UKed0J>mpBTUOgoKPZ+M2i^&AT5s%s$=2A(LPm2%BAR(bEZKcA&bT zM-OH`AlK0b1=ev(pkF*J5&u!X%)#?Y4YDgg%)wkIT+8V;N_}6k1#!WfM^dlGSGi|x{7~bN z&(p(3o+)rLo~+`y!0NjT^d?|Edg<18j#qz@4~AtH z2aA+zuQpGvFa8_i2bvNWG`_O_`|0{G;O~zs|MnvPd~|KFl~7z$dT7YLoo=cwl)H-yv?1UF|eAHvwP0Z<^DG&5C+C)wod&QOpP^?e+m6H69(M_ks8wpz5y=n z)Le`NEuxXmcaxBD$>#BB4*EyW=<8hy90pE#A?#6i%f|9q&goB!-{@+(UHbm* zBx+Hd&0<~6uD-SRM=O;`?ZsE`KipN;ttMUr(9tGFV*$Ue`nF(EZSYyPQ0TNsC0`P? z!V@jVLL+ElyKQY-B+;YE&*bKLYT1{{lj<42zVT*y6^Xe7M9(m@^)}~F8mV9t+5u5B zkIBLzVij{;A)7jYiup`8{q4g`z;>yyrkR9S+_~-)$!nJ!{=|bN!t=e}d{VWZpMKsB zOF>wU0@3Zg1K4Ct57o4hkn#$NWUZEg_rL<*TKnUc?Rc0842?}qGt*tMMKMr8Ft1Mu z$16M-szJ_c2v?VayfpvVUam`yLagLR%j* zc_^918=2zA26;a$Zl~?Pmhj*~+f%7U{9vAI^P%PC0!y($Qf7qUH3Qxg=H1hVCs`i2m*Y z2xyDzUZ~6`>2Vk^iG6IYdZui9^?nf3)eDg+`xZ+ErQeKz!4*@vTWik^V;J8%2FyEI zINu2zbO=aa;+;FLe|x9(@l*xpqTVP}_FAwEz1)vk=lEdcAHvto4d~x4?-KMg_PD_DLOY!p8F|@M)@AW zZA%3|^V1?cxpSqsW!*;|kPAMXe;M-#zZYyFDWwuUT9iOw)ufkHfIFBSmNd$ZIy^nF7bYHnac`+1$>3bCDU z1>nsm^QMFn&0sKFPVy+Y)bVO*T)vcY1Kx66E|7yS_L>6w5_X(d+UOIJTktc&zS0qd zp_|BWZF_7%E@SBE<}pjMlYitb_Gbs5qoOnVPCbpp@@nGo_|HLs4&K}#o=Nxd$4;&0 z36uMu6wNmcoh!qPG8jGnXez0r|w%a03TW7*Q#^E~KN+94q4M;-Vi)KtM9O5>sf!T?9tPIxTxj6!>pwj zRJzuC&g1Dw`ZJ4!7qc|u`Yf0+35Czbq4Tt5G9B2voWP_AtiYS?Pir?xkgmZddu4)w zN2vNuKZ|ox&v+r@k=%Xf*iQR0OF^NgC$&5`_)8|+OXEhFkWi*GzwYCJS0G@PzRx8i zU(%uT##`VzRb?Qtwkk4nNqbEfNC5+FW?cv$?AYu%HnS_El?=YR^QrgV9(*(uo#9~N z7o3)5Nq!l|IgK}+WyeUf`n+_E(@nk2Jr7*Om%Er?G`Bs0aeC{>9xJy8rrop|!q#gs z*QsXc=z>3F(a?4^=NEXVj#IDnDyL1`tK+OWYdN(C*p?G?l~Zh*$EEFd&{O(>O93+s z3rlZPkI*0Ln_u``!pY&ZC*udqX`|TQRoVpT_61-D!qTs=ui`6*^lHZa{E?mD6HF3^ z^@$hTug<-%(kt|Q;+cPdi2XxT{42pVCU%4Vf|hA(zP2c_seGZ&-7rk11(&qBzpEGT zVZVqnH}IC>um0)S6UeM**6`FhQ21bSi5AM}$dcE+mBxh9BiCXIePl5@1@4#>(e8q- zoEdToz3+vBDBDoRzKcm_Y=25#XxHtIa>7*GVK#Pa_JW1MzP4UP0jORbTp7SD=m19h zsu9(eh<3nYd}H9V5-@gXEbj8k`(?A;>aAB-zkVH6qvTnC{rQc~zut~%)d zMj1AL|2R%>E8$qa`x==fwT;-2N!fvi4w1`zW5@Ce$^|a4c&?;XTcBr+6y{cd_TNvL zSyeV489xIXd;ZH0@q4D}sZFZTo!ZzjLN~c5qq$}MacaoGr7_QKj81Yq)87oawiG&5 zXM8f#YZ;cB_hJV8>0_3|8_CxP!QtFvG~qY1Jh`YXtgdG=$Xi%%1x-}ZC$V#{32bF$ z>GD1xUWb;3SWZ!-I1X{=3BulVT1NPe3z$a_a(A#$qRq9OpV#`?GKss9FsHdc|kOYnV9TI0Tsqvvfk9w0Xjt) zc^&2IPqycM^?^M8CceR4;~-0T#8sj@97;N7%gU(~5a0bWT*F)l)C&wpn;!b!jII(1 zSiG)Yuw|tknt~7I$!ryW6@53_pT{{M)*bpl%W+`PeDtBxtV?dK=paodH4IBA(?0}J z|FQ|lIQNd!$y<2s2x{eVe51zBycHm~z@Jx>S8Xd{h2#|U=DAyL5D*~wBXa1=4UK!>kyn09S`b1uN4ig* ziMkX=eoSCd4c)=i#i-4%rjwXlkSSqJS@#U^9vad#Pz2>j6mlgSO)(bzB2)7C^kx=C zy`&*1-=WAD{D1%!^q|I#5pq`FxO0Rkmn0p8CvX&>a41b4 z#ys|=uaX;qFFZ^AWPSt=Ow(@-*hb(QrMua&gIr1c>gJ#}2sY##b~TRl`LxnyP1K8C zRs}xNqyyXfpW4nVsHrb}*Yw^(4H8;tp+$=HD!um-s#NJnQ3M49X`%Ptdyx(zNUxzt z6Qw8uNkBwVAb@}%p8fmJxi}YR=3E^n6DAXGGQ-|kYkklAyi3V0tYPuTHgV%5B2S%q zY3Ii;6}5z)%CYah9yetR_)X#vz{#jLeE_%5!v^95J!XF;edl%PW~2+~^l6hUcfolz zA74d_!jxZ*k2BgBCh9`Us>hx-1aR$1q`BSvu0|xyso~DhT~u?=pgjZ^<~ua<-_-P< zQO=u++@%W;v8;ay8SG{%r%~ME-wjh+sQJ~$s*}^gEhkq`34}262;aE&vQ0k3J;nsc z6^)MwOvO84g)bt>=`npO0BbP&+4Z?nTqR!4C)gnf9fzn8QQSYTSBFF15whd+z*rR}Ms@J*+fHl$udxfP`ww1QOI;!#`kL%s z$Cc&g8706*LWF;J@QfaaI=;}RyO;D~L*2lLSzDUwVyCMFQtag{+0tC6@oFLPeaE59 zYp=0ESpCR_>F&#*FeB0dr&s5xD;>YRZBq2_=gKyrZJGw$>sP-vlg(0&$i@>awNX(0 zAYk)NGi0>UjV6GTHl8@}UvgN|JV41`Rfu6EloM*zbl8$2am`#Pt)%A4X*ER?IH|?7 zxdHAXwnWEkx(uPrb}ZOLubuOiS}pA!xsfOF>W-L3S!d9?;q-!q*?Ggzlc}J%3}{l^ zE&^JgyQ!5Z#R#}4OoLK}40G9g#x@%*%)jBS>b)Hd{)A>?3Yykh`&pdSdp?!OdtNb) z2Y+MgCfP#ONFTNrWHf4QQ8--j4$%Hm)eTK~AM=@;4tLLy;F@bR5`==ZSRGwUfZnuT;n{NV^XDGW6Yufm?US52_Z0E-k)jFP zl7fN;(oc*OanICnTx2GCpm=VNg%W2}8v7wIG%{La2d#Y<3Y_tqa3?F5h7dsEdRG59 zVdFj_vrrR^Q5fFjmtKR4&@yDc*@h7g)AWok-#Of<0m=F4PJa=dU6$OQwA?FyKAOL> zyC%RknJeD90}#$lKzwTSL=t5en;sIe=jVTf;A0VSi3! zQ}(>ne#>llFL4)LL||~wS?4GxmSf3t$T}jOc#_UNt#;ap(g|qXsq)>;FYZG_oI;<+ zpE7u`om{;LEO)?*M50^R6tQ9_%Dx%3f~ zpl0MNDJu2>=s&iU7B_fWVh+hrt%Oo zxjPXlVC5@$)S5KEFTaG6TI~MKucb+ykY_Pb3ktg$3d!LWZ%=XUgBG0_$Vq31cZD^c zhAO51eEjX1+V4i`k^{Eviefi?{a19}Fi;o6NbH%7Um3r;JbgE`&}M6~|24u-vf)ETMKu47QFUq9MEZ{8%4zQML*L06!&BE z`u-<@M)RN-xWiOMmCvEW=a1qam!B$s>IEGHW-FG%c^o1o-%Y)F$7dm=S7@QsCMDA< zL(_I~{m@fd<*HE10KFwU^ z3y*rd9aHHDU?#=j*t$=DH0A%ZJU=yLJ{fM(yfKRuw+sH+eeeH(Db7+Ks_0MC)hz@V zq_uReI_B0WaxY&+-QBo)&UZf$U?h@CN@6bMa5o}9H}7Xkzasb5iMns2za@mT`smQi zx}~Bgq4L?E_+@=HA z0nI`I|CCmizFi9WduBdKM0qf|_G%2r*UQBR7pz;P@=;8(XBEJ9!h=f_I?WP`v*W=_;e{)~KV?-Sfv#kiRF zpdB;=AA1PZ*!!X%#ocJ$ z7QX*F1A^NuYkG6{r9T}4zIQI;g(|FYOKsEt<002>@TVa(#{C_M;=$*}Na;(BUF5e> zF|LSJ;awX~kqZ2>?!e*h8H$68-|=0PY?Wp{fu)iu^+aXecH2_F3~3nr4F|3DzvSr- z#=ALoFPcpG-q-CvC;Z{|F2`53J{6pCdz3G1lWg$aJ|pCj^uMel8l!=W~#X8`uK6qf2?m}B00yi zZ`?rjI{C|}r(0nO){bFuK=V}KqSA#^3i|9|Me+2VWQoGl))PxkupH~sQ@qbns3k>% zvc1bou&r1#@vljD1-M)C;yXjAZ=DY7oQ+)FM<&cVQ8;8?;5d}7{Q7t!3FTb@G+v5i_Qeat{Bhg~yaxog zL5ja7JtXBwOjRcuO3cdR^K}0JW;2ZG1jenpEGdSv+mNzoIt5YvLaSbX**R7|X{zN`EIZ+IwS$o@i!X!Z^|! znV$g%P-B03d6^JrU^)MB&AHE3(~v7(W!fxPVfa%_7nLFP99hU}3r3oI;^#;VjH7OZ zKm1eT5|M~T7i<3W=;s~2S}Vl%IYYw?myF6j0fi%CP`~;bcI8BjtEW|UV?{5LFYERj zA;%ONWLc#y2-myjnGmN^BvOo?Q-}3bucs|ORAhD`??{m;WC)IS8@x8%aqU%%or~xN zHaxbB4u~e`-8=i1pmm`|YCMuTykop$(;aTeugN`sd#kydK_ZJgv%1y92y#V|a7h03 z$$Hwjw7tLf3b&u+vYW`F6mT_f4nXq!`04D-%e+&j6IKqbmOOa+NKjc7{!v? z_GUwT0&J2ONy1mrT^3;ozdomWvM_iCsTE=QBwCm;EEZaPY-61EWEXg%ZknzLipro| z_jW~g|dw9U-DI5p$tU?c`}z9KtF8jC(JW=l=67|W)kuWGZNYK==YyvBp zgZP@?TOoR+DK%w&bYG-#eq?{26P@_nBUyW=#AB*!n~PMFxqY^iIc^ zU=<|&sqX|h-fv_d*1qNEtj3zQkrBup+aL9yVnP7c`Cd@0NhHB{x&R^V6SZiLac+w# z>Kt%wvZwd?#sOe8;bqXzGi&>MeiGW&+10d~Oyk7db$w$5rVEkLisiM_O1n1cC?SaS zPFE(uc<5t#(@}e=wzryT5%*tY=pxz-9TRf({)R+B9ffBjtbZ)tQE4={l!W?l}@nc?>7wKTmrXx|*H26kNn3AqjU)-FS$bG!8vpvZu5s3zxW*ST$|71&2?1 z?ML3oC3;dtgVfSC0)KCa|29X%q_h&-VY4IRQ(?(-hhHW7`^M~+$w;dus;S+dAOo(U z#2i&|(m-#@DZh1SA}Ayxii&ZM^Y1$Ec+3R0d5>DsXg3~9TZblyr{&>$KPMI1zrDqvsk!?G#FR`|2A_a1uzP;vCa$# zD(aCb`h@`I8XTFjCjc(vcWLXjR;-{M7ouvh3PvKIie1wC-->a}9k&x1z~;znH?%dl z?h~h@-?xQtnQ<>}Abv#RU1|pT){KC>ZIsKeT3XcG29FZamhQaqkr!@$IqY|@*8vAv{b%4?Y<*d(UoY& zheUf3ICe1o{*;mF^{9y50575AZ~};m-oe)gAP5!c?lAp{H8>J_ibZJ*q@Yt^ZGIzn z?&+WO8B7?dEzGV*lFc)R2f?5s`H+M!Lc29mn7a7q)4{}(>4IJ5NXMO1fNq3xa4edm zjRjBrG8t4xad{03bEZ^TJYzw~jJZ_K3v;z(;d2(jV==keSu`i?^k40}ZKq4_JQlG5 zfgnFVj^uzowGs3OdK2LQfjm(d^N!2(sWkp})w?%H0K=#UQV2(PG*mS-x^o zf5IVyGEzZP^%IAwtD~GNA1aj*oJd}b#$#t2KL=*PbYY=g&sle+wE|;knbbY4wz0FH zTwTo{QjVU_7YFn+3WLyUjdSq|@z(2@8Su&0ci0D@<^F6ek@{iRzJ47-=YF zD90tfRZdP+D$J(3$N`+FtVD818Zvvm2&{SfQru~e<8S&{WU1`E1Gq);era@&v*gU3 zT3ngiedX*poWjBLWZD(u_WD1_s!!8#aE^Ky&Jrx0-{w2Xe2_xL5HK>w=_)Dwz2Kmr zZKw!KrTCXny89>*0Dx$mNb{`42GYv}n{31!&0iIw<*7PF+ zkKI0#Kb{uetF87)v!mHp8~SN@2{9jfbyR&Am)xnsPC`VcDh<6_on+G|86GV$2X$w; z%1GS`SPsQFljaRVc_NW}pJNaCYnbNPg;4SXubP|7nf>VV+sV@v;ccIEZ&N5##yZ(T zNkiE$Ir8co0tzHbH8v9;l38*poIqa7f<*!#g(Xilz8ixmCI7ob#Y`5)X#glJZ zYcUb>6HQw$6Vks*@n1??0$1;Ysec?^9FkVK1%Akv!XUM>HKLDP8-x(C;{>2HQB{zk6JtJ) zIt)I}4aj=4kV-@)86z)sTJdB_52u0(G6?t`7mM~rbMs*%?g&LH?Z)RG@y)S$n{PtxezldN#{XEjr4P=_|VuIJr|ai0?)8A|LEI!*!^ zGt*UKL5^%k@8NMLA@3`a9K&?vPI3pN4D(i;_ueCN!tWboS@ZClbin;aI7D2{%G-yU z=^k`><;sj16c?LM_`5grMwEA3zlCRyF!jCqV*9qa))0#54*+YQGUrKZJQkXCxu@CD zZf6=Q?NX9KE)vH2BEpkDN{I*vB4u@Jn&pe{DD5~j8PIn!mY?@NuK6y-_ATpAw^Og` z1RP2;Q}p85VF}^Z7*0Byh=@v`N*&`8GC^6_VbMOIU8odmZxCV48|{=IC9Vb$@srJ2 zI-dsAgFr{ZJ^c9b*pev|!*hMuRumQiH>p;grhjDvOIi=#$rC_nCAYJZI|?U`_>R|+ zSYYsFsK=T?mVqs$giuC5dcik%h$Q`)XAnuybyQN^q%{Aqrm9L34TQf1Q$t;tLEf)1 z@j;LZUbj3lI($(+MaK}r67w#o$bysl>Bj>cpA1f=KfG zW1*OU?I5w*{F_fcgC8N=T?HI>(#7i=GRB;h^ip-(%+b+M2DbLsVzerMthObmkB2ob z=JH1{60k(Mf@i^R1HoD=g=SS4@d}u$TnySio2#lj3qugLm!aRnGWDZZllz@S1d(qp z(M|g7X1GRPT0CC9P?8YwyKXoEfDpRCZ5gS@3HDi0EG=MLE_mWSR+qq<(F_TGqWd`=5Zl&6p z>MJiFN`^(I(%drn-3-G{+F&RB-MG76*cX)(A&TaG&qH1>NOZ*c~U!(;#}!KJ)ns>4LYNRSi1pk<~8u zw%c(nGus|_(!C6jxM#%E!sW!XwdNwfrE3c;IxtW3GN$h^Blu<@fZdt9XoVhqkodZA z++-Ex>ixAvEgI2cNhQbV5ZYby-yP9*x&b)Y?lY(W_f4(VPBgt%rP0rSR~-w({I&o? z2p<34(gLe8?2{M?I|(tRd~>luesyKM+V94-d11GgW{;M~j+STtWm`oi(*Kw-9jR=< z^jr<|$~pS1yl^#(+Vz2!vKvd&_niD^a5uOC0iOV^9Azcw`;=*))l=>`A4UKfq&mWBZ zK-|JNp;O}=T&l8aAexE1s^NV6J?X_SpkoTg)Pk^W?{`*6AlhiNPbuATW|eo zdv1_~p2P4w#8gd@PC>!{q|oU{(ep!$4~RRLP7}i=^*(<76Jl*G3cIEECYXnQZ=$O9 zusHclc4?i>mp7hgq__HD4Y0|POuSYR+NunSFhbai z!1OB~=FuhwRca8Qn5;B6Z$t@e)VI{WtQ0D%d8qSGv8>wsiSCrK;v&1LVVf4taHh(< zL8LONyflktx`&&PhYsjPC56-Y4wZAms$>HP%@@P~$2x=$FcXtsrz(XNr z(?>t71yN+|p`p*0sK% zR(=2R{0%{tv>~#8L#EF8JA5*uC>4Qpky}d8*HnO*=9!P^?sSTaw8Mo14hZdA`f5b> z`RF$Zq)Zhd-1$DQXFr6Sd}v?eZKF*>n0`2y+Vy#@ZNC=!YZ4tC7~wmpgk>&m%sEq} zN=y{*5X;`?do61?0n8IQ!TZ~iqnu`6w@tqS?38iA4lV0GAP}cz#STl%&P`nF?-Q;S zWuKMd~vXH{3GI6%EmAL~j2`Siky zez3Ywh7~SvlAQU>#}aCj_3<9H;JHG%7?P_t#4K_B6V#@oLBzrHDNIK!_+n6-(2>y& zNm?PxH(D+r+ffN2%9EKR*K1yK6E8UL`!Rp-&dKZ!iVv}&-V=JLbnzSF_dE|$8t5IdN_O~<^*!Ce zL5+2}J3sDm4%?EgqL9NFZ%h8G{-)0<^Ur*4Gp#Z(tj}6jOUE=ZVOBgYjd9ef<+uWi zqTpExA^$aTHnYya+2J^ehsKRa1`Pn6gS(P1F}A25+|f?=G8I!bZMir-?5lI-6K^#} z)-vrE`F{?jnR?PhFRrFxGo@eUS)+aYI@81{`~_5oVe$=sA##ggC>?#bMe+4d##)e(OYA zq?}j+XmY`L$(pM6yt^XvG4{$Zp%K9<+1M}gXX~115WO9$&O)1Ga1y6H?fV>^aloaacWw!YskxTEEy@u%4p1V=y33rXj zT9{X-A$mYojRmumzS6y@M1J=DKDx5ci6?DcwqFPLD++0{>h17(GcG?r$acAR<(ZrO z`|WJ9aXb9LL5yjZ#=ax1`$mxEYY=4z6}}$@yjZBdItpa!v}nqsJt8#o4(luz-JIjN1?E?(Sat_))4pwm_@Oa`JKYbhX!D^iPl# zvPMlK&4fM{^@@8RDWfH@y60{q{G9~1D)CSazUD_FOAW~~Jk$?dPeEnHUkD~v+41yo z6YeN^L+a(RE;pq2HK8uXPRlT>46JmJh-dF&w(cAJe0)VTQ-zAUzh#wkkrVLl zd5>sQH<}};6zfoY^Xw<@-eACwhNhRB% zVAj;Qo78U^P2E}EVAvWSlhKaboAQ)87`bcnQ|PMBebVPiPnUHnG`@FG9PD@M6rbZd_F;h%X% z0L&_dK0jbxkhPS4dlnqP*qc(v^WHZN<90QU`kv2Lk1CAke$^Sysx?%YF0h zkl@V2ICfN)b_YTJM|!7~OnEf_n#s1?tpk^;D*`sdpcRWy>ws(X%D-XIWP`i!1=)Nh zkRYL*E!z^}ewwl0bs4TfBZh$0^s-+Kub78Fzxt9%G0~gvH$%LA2Zf&_-Y%9%*7qA*hvi18zuzvd zb-at;h6#?MxHy(Gepk;shue9mR4RJUHfc??{@XqG(-N9AhpaP50QnqWVWkqFQKJt6 zKx~cvo*BIza$WCR1xUPfKspbGM)~(ypmsWkdq6-&NPnt$y!Y#*qw9%4W`_lpS06h! zLAqIVDDl=GKy%SY!D3!=AX4_w+uPf41(hp~<7#wWkJINA~VRPrQtyCxh~oY|sS5;+}i7qTOUT+Ghe z`$tEfjc}xA9W)p@^_OvIolCvAc@zi`HI5mK zRPk(X=L3$RyjFb8p=9X-$GvLrp7Vx(7CZ?>YAyf~H&A;vGExM~d!q%Z@&Im-&Q?Yd zs#8WpRGDT1PQoA=@sc{x1KO_ZhYR(KH1_la${m9Be%U^8SMB@(wE8lF&&k2uRcUBJ zGn(YIA+>2Z298~>*tW(u#Xgcz{NS?o);HimNgF;Qm z`qBFJ1&UulpJ6=V<-L?SVi&kx&^1)6WRWNKkazd3c!{{^5P#;?l<%|Z=vvZoJdWpk z78&GbX-;9LQ>RDdaz--aqx=sOucjWZh_Q{j%B11-hx~K_WDR@I7s}PEH@Lk5yjcGkB9fDRN-tg{inwLZv;THok4A~%KOxW}Z&3K+ zd+xLOcqh60iz%3=GWjnNRe}FQ_Vh0QvFohK?IfHZVLbV_5a~dk<1kd}70l}?M_G@g zN>-fLbMeEvSu)GAswr8^-=?+6QIAs4hATVNckJ!P6K|o7RKMj!;N%gqhukjU1o80i z7VC!8oaKwiD@n?m)ZY^7Ka=W1Got*3?0L|NfdbL@GyN;lP+&{5wpl)zy{c(C(;?y= znmlR0KrRB3KrpvcN``58{P8ywN}S`tr-J03`O^1KTcpxr=TIl>&T9Vsa1Xn@yR=0$e?o zt>OE$>0MC{WzXmZ;%zC#o0LTrzvMQ`LC|cVJt?vQ6j&Hbi@frm|I(%{K%!>WgI!8T z87|-Z_x*m9e7k6 z?wbGAj73xVsjh}H{CU7e!dztd6gha(125gb)AdHVTeNkU>b}>IyxddNQ>EktLz6jfGUC8zLhOB zxxn}^rt(b%L+3rkV)$~*5B{$Xwk16WoibnGnLh&w{+#sbB%60% zzU4wG%Q2ja;e!*BdnOslWhgK1PdT-v{5WioST|H9&L+yX z>7es>m{~a}EIxIgb^KVT@SZTBULGA-jN*)pyrQTZXir=M;KihM;-8#$-= zqS_M;w13T@JGuAmW>$Bzf6u4`wvn1}hD=dqOLmkY%4o&wRE`6vGjTG4bIga|S zh1L1nGmB`}RSGVAq2Hra4e42IoiRTj{qlb5^kzs2dJ!hhE1Y_;sr#9iW`>!HDGa{* zM^50$GsJ@yKBN1K(yrgKhKsApC2==;Rt@PZa%9{;ur{nLdqGI_+`>w%9Mx0(g@82k zP=5bh`Mr&jqN-xa()Q!2ZypPG$7F9+Tx(+3uh>DJI0kkvJ@+~GjDOqHO0)m&X6Mga zEk8u`g-ETnNx2s)>N!BJ`m*ekZc3<@-*S{~Tvd3-D zUBDuT-Yap|a&nLgpGWkiy5oG_3C*_8hOqo-&nl5A8sN~3Ko~}F)P8yO(cLP8b{LO! z?{5t(sS1{4@)*LXX$m~B4gbBSt(r3Z@0DIdpat+Nhu#~)1iW1vdq?}fzY?tc|M~XG Z0~TTJ4rJ|@bUffkSJOzNRn6(;{{n{CHgy01 literal 0 HcmV?d00001 diff --git a/content/notes/c-language.md b/content/notes/c-language.md new file mode 100644 index 0000000..39b0430 --- /dev/null +++ b/content/notes/c-language.md @@ -0,0 +1,695 @@ +--- +tags: + - notes + - programming + - c +author: TrudeEH +showToc: true +title: C Language +description: +draft: false +--- + +## Tools + +- `indent` (format code) +- `gcc` / `clang` (compile code) +- `man ` (see function documentation) +- `tldr ` (quick command usage examples) +- `valgrind` (Look for memory leaks) +- `valgrind —tool=massif` (check a program's RAM usage) + - View the output with `Massif-Visualizer` +- `gdb` (debugger) + - `gdb —args ` (if the program has command line args) + - Type `run` to start debugging, and `backtrace` for error details. +- `file` Check file information and, if it is an executable, compilation details. +- `perf stat -r 10 -d ` Benchmark a program. + +## Data Types and Variables + +The binary length of each data type depends on the CPU, OS, and compiler, but in general, they follow the C specifications. To check the exact values for your platform, see `limits.h`. + +| Type | C SPEC | x64 Linux (Example) | +| ------------- | --------- | ------------------- | +| `char` | ≥ 8 bits | 8 bits | +| `short` | ≥ 16 bits | 16 bits | +| `int` | ≥ 16 bits | 32 bits | +| `long` | ≥ 32 bits | 64 bits | +| `long long` | ≥ 64 bits | 64 bits | +| `float` | | 32 bits | +| `double` | | 64 bits | +| `long double` | | 128 bits | + +| Unsigned Bytes (8 bits) | Maximum Decimal Value | +| ----------------------- | --------------------------------------------------- | +| 1 | 255 | +| 2 | 65.535 | +| 4 | 4.294.967.295 | +| 8 | 18.446.744.073.709.551.615 | +| 16 | 340.282.366.920.938.463.463.374.607.431.768.211.455 | +| 32 | 1.157 × 10^76 | + +Examples + +```C +char a = 'C'; // single character %c '' +char b[] = "Trude" // array of characters %s "" +unsigned int // Unsigned. The number must be positive. +int // Signed. Negative and positive numbers. +char f = 100; // %d (number) %c (character) +unsigned char g = 255; // %d (number) %c (character) +short h = 32767; // %d +unsigned short i = 65535; // %d +int j = 2147483647; // %d +unsigned int k = 4294967295; // %u +long long l = ... // %lld +unsigned long long m = ...32U // %llu +float c = 3.141592; // %f +double d = 3.141592653589793; // %lf +``` + +### Format Specifiers + +These format codes indicate which data type is being used. They are needed for `printf` and `scanf`, for example. + +| `%` | Description | +| ------ | ------------------------------------------- | +| `%%` | `%` | +| `%-` | left align | +| `%.1` | decimal precision | +| `%1` | minimum field width | +| `%c` | character | +| `%d` | signed integer of base 10 | +| `%e` | scientific notation | +| `%f` | float | +| `%hd` | small decimal (short) | +| `%hhd` | very small decimal (char) | +| `%i` | integer of any base (detects automatically) | +| `%lf` | double | +| `%o` | octal (base 8) | +| `%p` | address/pointer | +| `%s` | string (array of characters) | +| `%u` | unsigned integer of base 10 | +| `%x` | hexadecimal (base 16) | + +```C +float item1 = 5.75; +printf("Item1: %-8.2\n", item1); +``` + +## Numbers + +`C` can handle multiple numeric bases. + +```C +int x = 255; // Decimal +int y = 0xff; // Hexadecimal +``` + +### Type Casting + +Convert a type into another. + +```C +int x = 1, y = 10; +float z = (float) x / (float) y; +``` + +## Escape Sequences + +Escape sequences are used to allow typing characters in a string that would otherwise be interpreted as `C` instructions. + +| Seq | Name | Description | +| ------ | ------------------ | -------------------------------------------------------------------------------------- | +| `\a` | Alarm or Beep | It is used to generate a bell sound in the C program. | +| `\b` | Backspace | It is used to move the cursor one place backward. | +| `\f` | Form Feed | It is used to move the cursor to the start of the next logical page. | +| `\n` | New Line | It moves the cursor to the start of the next line. | +| `\r` | Carriage Return | It moves the cursor to the start of the current line. | +| `\t` | Horizontal Tab | It inserts some whitespace to the left of the cursor and moves the cursor accordingly. | +| `\v` | Vertical Tab | It is used to insert vertical space. | +| `\\` | Backlash | Use to insert backslash character. | +| `\'` | Single Quote | It is used to display a single quotation mark. | +| `\"` | Double Quote | It is used to display double quotation marks. | +| `\?` | Question Mark | It is used to display a question mark. | +| `\ooo` | Octal Number | It is used to represent an octal number. | +| `\xhh` | Hexadecimal Number | It represents the hexadecimal number. | +| `\0` | `NULL` | It represents the NULL character. | +| `\e` | Escape sequence | It represents the ASCII escape character. | +| `\s` | Space Character | It represents the ASCII space character. | +| `\d` | Delete Character | It represents the ASCII DEL character. | + +## Constants + +Add `const` before a variable declaration to prevent the value from being changed. + +```C +const float PI 3.14159; +``` + +Another option is to use `define`. + +```C +#define MAX 9 +``` + +This command replaces the 'MAX' word with '9', using the preprocessor (before compiling). No extra memory required. + +## Arithmetic Operators + +```C +// + (addition) +// - (subtraction) +// * (multiplication) +// / (division) +// % (modulus / remainder) +// ++ (increment) +// -- (decrement) +int x = 1; +int y = 2; +int z = x + y; // 3 +// Augmented assignment operators +x++; // x = x + 1 +y--; // y = y - 1 +x+=2; // x = x + 2 +x*=2; // x = x * 2 +``` + +## Control Flow + +### Boolean Values + +In `C`, there are no `true` or `false` keywords, so integers are used instead. +- `0` generally represents `false`. +- Any non-zero value (`1`, `-1`, etc…) represents `true`. + +### IF Statement + +```C +if(a == 1) printf("A is 1.\\n"); +``` + +Use `{}` for multiple items. + +```C +if(age == 18){ + printf("You are 18."); +} +else if(age < 0){ + printf("You haven't been born yet."); +} +else{ + printf("You are not 18."); +} +``` + +### Switch Statement + +Faster than IF when over 5 cases. + +```C +switch(grade){ + case 'A': + printf("perfect.\n"); + break; + case 'B': + printf("good.\n"); + break; + case 'C': + printf("okay.\n"); + break; + case 'D': + printf("meh.\n"); + break; + case 'F': + printf("failed.\n"); + break; + default: + printf("Enter only valied grades.\n"); +} +// If break; is missing, the next case is also executed. +``` + +## Operators + +### Logical Operators + +#### AND (`&&`) + +```C +if(temp >= 0 && temp <= 30){ + printf("\nThe weather is good.") +} +``` + +#### OR (`||`) + +```C +if(temp <= 0 || temp >= 30){ + printf("\nThe weather is good.") +} +``` + +#### NOT (`!`) + +```C +if(!(temp <= 0 || temp >= 30)){ + printf("\nThe weather is bad.") +} +``` + +##### **NOT** Truth Table + +| `condition` | `!(condition)` | +| ----------- | -------------- | +| 1 | 0 | +| 0 | 1 | + +### Ternary Operator + +Shorthand syntax for if/else when assigning or returning a value. + +```C +// (condition) ? value if true : value if false +int max = (x > y) ? x : y; +``` + +### Bitwise Operators + +Special operators used in bit-level programming. (Logic gates) + +```C +int x = 6; // 6 = 00000110 +int y = 12; // 12 = 00001100 +int z = 0; // 0 = 00000000 +z = x & y; // AND - 00000100 (4) +z = x | y; // OR - 00001110 (14) +z = x ^ y; // XOR - 00001010 (10) +z = x << 1; // Left Shift - 00001100 (12) (Shift all bits to the left.) +z = x >> 1; // Right Shift - 00000011 (3) (Shift all bits to the right.) +``` + +## Functions + +Functions are snippets of code that can be reused multiple times across the same file. These can receive multiple arguments as input, but can only return a single value. + +```C +void myFunction(); // Function Prototype +int main() { + myFunction(); // Call function + return 0; +} +void myFunction() { // Function Definition + //... +} +``` + +### Arguments + +```C +void greet(char x[], int y); +int main() { + char name[] = "Trude"; + int age = 132; + greet(name, age); +} +void greet(char x[], int y) { + printf("\nHello %s, you are %d years old.", x, y); +} +``` + +### Return Values + +```C +double square(double x); +int main() { + double x = square(3.14); + printf("%lf", x); + return 0; +} +double square(double x) { + return x * x; +} +``` + +### Recursion + +A function can call itself, creating a loop. + +```C +int i = 0; +void plusOne(int n) { + printf("%d", n); + if (n < 10000) plusOne(n); +} +``` + +### Function Prototypes + +Function declaration without a body, before `main()`. +Prototypes ensure that calls to a function are made with the correct arguments, and allow functions to be defined under the function call. + +```C +void hello(char[], int); // Function Prototype +int main() { + hello(//...); + return 0; +} +void hello(char name[], int age){ + //... +} +``` + +> **Note:** Many C compilers don't check for parameter matching, so missing arguments can lead to unexpected behavior. +> +> Function prototypes flag errors when arguments are missing. +> +> While not necessary if functions are declared before `main()`, using prototypes first and then declaring functions after `main()` improves readability and aids debugging. + +## Loops + +### For Loop + +Loop through an interval. + +```C +for(int i = 0; i < 10; i++){ + printf("%d\n", I); //0-9 +} +//Multiple initial variables +for(int i = 0, int y = 1; i < 10; i++){ + printf("%d\n", I); //0-9 +} +``` + +### While Loop + +Loop until a condition is met. + +```C +while(test == 1){ + printf("Test is not 1.\n"); +} +``` + +### Do While Loop + +Run the code once, then repeat until a condition is met. + +```C +do { + printf("Enter a number above 0: "); + scanf("%d", &number) +} while (number > 0); +``` + +### Endless Loop + +```C +while (true) { + ... +} +``` + +### Continue & Break Statements + +- `continue` - Skips rest of code and forces the next iteration of the loop. +- `break` - Exits a loop/switch. + +## Structs + +Structs can group values. They are similar to classes, but can't hold methods. +Being able to group variables avoids repetition and name collision (when two variables have the same name). + +```C +struct Player { + char name[12]; + int score; +}; +int main(){ + struct Player player1; + struct Player player2; + strcpy(player1.name, "Trude"); + player1.score = 4; + strcpy(player2.name, "JCionx"); + player2.score = 7; + player1.score; //4 +} +``` + +### Arrays of Structs + +```C +struct Student { + char name[12]; + float gpa; +}; +int main() { + struct Student s1 = {"Peter", 3.0}; + struct Student s2 = {"Jean", 4.0}; + struct Student s3 = {"David", 2.5}; + struct Student students[] = {s1, s2, s3}; + printf("%f\n", students[0].gpa); // Print the student 1 gpa. + return 0; +} +``` + +## Typedef + +Create a shortcut for a type of data. + +```C +typedef char user[25]; +int main() { + user user1 = "Trude"; +} +``` + +Typedef can be used to simplify structs. + +```C +typedef struct { + char name[25]; + char password[12]; + int id; +} User; +int main(){ + User user1 = {"Trude", "hello123", 12335}; +} +``` + +## Nul Character + +```C +\0 // This character represents 00000000 and marks the end of a string. +// Same as 0x0 and null. +``` + +## Command-Line Arguments + +- `argc` is the number of arguments in `argv`. +- `argv[0]` is the name of the program, all others are the user arguments. + +```C +int main(int argc, char argv[]) { + if (argc == 2) { + printf("hello, %s\n", argv[1]); + } else { + printf("You need to add 1 argument.\n"); + return 1; + } + return 0; +} +``` + +## Enums + +Enums are a list of constant values that help make programs more readable. +Enums are treated as integers. + +```C +// enum Day{Sun, Mon, Tue, Wed, Thu, Fri, Sat}; (This enum starts from 0 to 6.) +enum Day{Sun = 1, Mon = 2, Tue = 3, Wed = 4, Thu = 5, Fri = 6, Sat = 7}; +int main(){ + enum Day today = Sun; + if(today == Sun || today == Sat){ + printf("It's the weekend."); + } +} +``` + +## Memory Management + +- `a` - A variable +- `&a` - The address of the variable `a` in memory. (The format is `%p`) +- `int *p` - A pointer. Holds the memory address of another variable. (8 bits usually, depends on the CPU architecture (max RAM supported). +- `*p` - Dereference a pointer. Returns the value in the address stored. (go to address's variable) + +```C +int age = 21; +int *pAge = &age; +int valueOfAge = *pAge; +printf("%p and %p are the same.", &age, pAge); +``` + +NOTE: A pointer must be `int`, as it points to a memory address. + +### Strings + +Strings are arrays of characters. +A string can be returned as a memory address. +A string ends in `\0`, the null character. + +```C +/* Use char[] when: + - The maximum string length is known. + - No need to modify the whole string. + - No need to pass the string to a function [that modifies it] +*/ +char name[] = "Trude"; // 6 bits on stack memory. +name[0] = 'T'; // Elements of an array can be modified. +/* Use char* when: + - The maximum string length is NOT known. + - The string will later be modified. + - The string will be passed to a function [that modifies it]. +*/ +const char *name = "Trude"; // 8 bits in stack + 6 bits read-only. +name = "TrudeEH"; // Pointers can be overwritten. +name++; // rudeEH - Works because the pointer is shifted to the next value. +peintf("%c\n", *(name+1)); // Prints 'r'. +printf("%c\n", name[1]); // Works with both for reading. +printf("%s\n", name); // Print a string. +// The string in memory: +// [T][r][u][d][e][\\0] +// The memory address of T is stored. +``` + +### String Operations + +#### Compare String + +```C +#include +#include +char s* = "Trude"; +char t* = "Trude"; +if (strcmp(s, t) == 0) { + printf("Same string."); +} +``` + +#### Copy String (`malloc` example) Manually + +```C +#include +char *s = "Trude"; +char *t = malloc(strlen(s) + 1); +// 2 variables are declared, so strlen isn't called with every iteration. +for (int i = 0, n = strlen(s) + 1; i < n; i++) { + t[i] = s[i]; +) +//... +free(t); +``` + +#### Copy String (string.h) + +```C +#include +#include +char *s = "Trude"; +char *t = malloc(strlen(s) + 1); +strcpy(t, s); +//... +free(t); +``` + +Note: Use `valgrind` to detect memory leaks (lack of `free()`) + +> **Always** initialize variables to a value, or random garbage values may be still in the variable's memory address. + +### Input + +#### Get Integer + +```C +#include +int main(void){ + int x; + scanf("%i", &x); +} +``` + +#### Get String (Length is Known, safe) + +`scanf` reads up to a whitespace. + +```C +#include +int main(void){ + char s[4]; + scanf("%4s", s); //No &, s is an address already. +} +``` + +`fgets` reads whitespaces. + +```C +#include +#include +int age; +char name[25]; +printf("What is your name? "); +fgets(name, 25, stdin); // name of variable, max size, input. +name[strlen(name)-1] = '\0'; // removes the line break fgets adds. String library is required. +printf("How old are you? "); +scanf("%d", &age); +``` + +## Files + +### Write to a File + +```C +#include +int main() { + FILE *file = fopen("test.txt", "w"); // w - overwrite / a - append + fprintf(file, "Some Text"); + fclose(file); + return 0; +} +``` + +### Delete a File + +```C +#include +int main() { + if(remove("test.txt") == 0){ + printf("File removed.\n"); + } else { + printf("Failed to delete file.\n"); + } + return 0; +} +``` + +### Read a File + +```C +#include +int main() { + FILE *pF = fopen("test.txt", "r") // r - read. + char buffer[255]; // Will hold 1 line of the file. + if(pF == NULL){ + printf("File does not exist."); + return 1; + } + fgets(buffer, 255, pF); + printf("%s", buffer); // Print first line of file. Use in a while loop to print all of them. + fclose(pF); + return 0; +} +``` + +File manipulation accepts relative and absolute file paths. diff --git a/content/notes/c-snippets.md b/content/notes/c-snippets.md new file mode 100644 index 0000000..2f3cf1e --- /dev/null +++ b/content/notes/c-snippets.md @@ -0,0 +1,38 @@ +--- +tags: + - notes + - programming + - c +author: TrudeEH +draft: false +showToc: true +title: C Snippets +--- + +## Cast Strings to Numbers + +The `atoi()` function in `stdlib` has a similar implementation to the one below. + +ASCII encodes numbers in order, after special characters. + +The encoded value for `'0'` is 48, so subtracting any numeric char by 48 outputs its real numerical value. + +```C +char number = '7'; +int result = number - 48; +int same_result = number - '0'; +``` + +Algorithm to convert strings to numbers: + +```C +int str_to_int(char *str) { + int result = 0; + for (int i = 0; str[i] != '\0'; i++) { + if (str[i] < '0' && str[1] > '9') return -1; // Error if NaN + result = (result * 10) + (str[i] - '0'); + return result; +} +``` + +`(result * 10)` is shifting the previous number to the left, as it is an order of magnitude above the following digit. diff --git a/content/notes/compiling.md b/content/notes/compiling.md new file mode 100644 index 0000000..8a47bf9 --- /dev/null +++ b/content/notes/compiling.md @@ -0,0 +1,76 @@ +--- +tags: + - notes + - programming +author: TrudeEH +draft: false +showToc: true +title: Compiling [MAKE / GCC] +--- +Convert `C` code into machine code in 4 steps: +1. **Preprocessing** (Convert all preprocessor instructions: `#…`) +2. **Compiling** (Convert `C` code to machine code) +3. **Assembling** (Compile the necessary libraries) +4. **Linking** (Merge the compiled code with the compiled libraries) + +## Libraries + +Libraries are pre-written collections of code that can be reused in other programs. On **UNIX* systems, they are usually located in the `/lib/` and `/usr/include` directories. + +### Math.h + +For example, `math.h` is very useful to implement complex arithmetic operations. + +```C +#include +double A = sqrt(9); +double B = pow(2, 4); +int C = round(3.14); +int D = ceil(3.14); +int E = floor(3.99); +double F = fabs(-100); +double G = log(3); +double H = sin(45); +double I = cos(45); +double J = tan(45); +``` + +### Using Libraries + +To use a library, we first have to include it in the `C` code. + +```C +#include // cs50.h library will be included. +``` + +Then, the library must be linked at compile time. + +```Shell +gcc -o hello hello.c -lcs50 +./hello +``` + +## Optimization Flags + +- `-O2` Optimize for speed +- `-O3` Optimize for speed aggressively +- `-Os` Optimize for size +- `-Og` Optimize for debugging +- `-Oz` Optimize for size aggressively + +## Make + +`Make` Is a build automation tool that automates the process of compiling, linking and building executables. +An example `Makefile` could look like the following: + +```Makefile +hello: + gcc -o hello hello.c -lcs50 +clean: + rm -f hello +``` + +```Shell +make #Compiles hello.c +make clean #Removes the executable (hello) generated by the make command. +``` diff --git a/content/notes/encryption.md b/content/notes/encryption.md new file mode 100644 index 0000000..fffc5a5 --- /dev/null +++ b/content/notes/encryption.md @@ -0,0 +1,117 @@ +--- +tags: + - networking + - notes + - tools +author: TrudeEH +draft: false +showToc: true +title: Encryption [GPG] +--- + +## Symmetric Encryption + +- User A sends a password to user B. +- The password is used to encrypt the messages. +- A secure way to share the password is required. + +## Asymmetric Encryption + +- Users A and B have a public key and a private key. +- The public keys are shared, and they are used to encrypt the messages. +- The users can use their private keys to decrypt the messages. + +## GPG + +### Create a Set of Keys + +```Shell +gpg --full-gen-key +Select ECC (sign and encrypt) - The most secure option +Select default curve +``` + +### Encrypt a File + +```Shell +gpg --encrypt -r email@example.org # Encrypt with the recipient (-r) key. +``` + +### Decrypt a File + +```Shell +gpg --decrypt --output # Use the private key to decrypt a file. +``` + +### Encrypt a Message + +```Shell +echo "Very safe message" | --encrypt --armor -r email@example.org +``` + +- `-armor` Saves the encrypted info in plain text. (Great for blog posts or copying/pasting) + +### Decrypt a Message + +GPG automatically figures out which private key to use. The encrypted file includes some metadata. + +```Shell +cat encrypted-message.txt | gpg --decrypt +``` + +### Sign a Message + +Uses a public key to sign a message, making sure that the contents are not tampered with. + +```Shell +echo "Very important message" | gpg --clearsign -u email@example.org +``` + +- `-clearsign` Is used to sign plain (clear) text. + +### Sign a File + +The signature is embedded in the file + +```Shell +gpg --sign -u email@example.org +``` + +The signature is separate from the file + +```Shell +gpg --detach-sign -u email@example.org +``` + +### Verify Signed message/file + +```Shell +gpg --verify signed-message.txt +# or, if detached +gpg --verify +``` + +### Import + +```Shell +gpg --import public.pgp +gpg --import private.pgp +# To be able to use the key for encryption, it must be trusted. +gpg --edit-key email@example.com +> trust +> 5 +``` + +### Export + +```Shell +gpg --output public.pgp --armor --export email@example.com +gpg --output private.pgp --armor --export-secret-keys email@example.com +``` + +### List Keys + +```Shell +gpg --list-keys # Same as gpg -k +gpg --list-secret-keys +``` diff --git a/content/notes/flask.md b/content/notes/flask.md new file mode 100644 index 0000000..7645be1 --- /dev/null +++ b/content/notes/flask.md @@ -0,0 +1,345 @@ +--- +tags: + - notes + - programming + - web +author: TrudeEH +draft: false +showToc: true +title: Flask +--- +Flask is a web framework for Python. It facilitates the creation of web apps (dynamic web pages). + +## Run Flask + +Flask comes with its own server for debugging purposes, which can be started with: + +```Bash +flask run +``` + +## Folder Structure + +```Bash +app.py # main code +requirements.txt # required libraries +static/ # files that never change +templates/ # dynamic files +``` + +## "Hello, name" — Example App + +**templates/index.html** + +```HTML + + + + + Hello + + + hello, {{ name_placeholder }} + + +``` + +**app.py** +`http://website.domain/?name=Trude` + +```Python +from flask import Flask, render_template, request +app = Flask(__name__) +# When user visits / (the website root), load index.html. +# If the key name exists, store the value in a variable. If not, store world. +@app.route("/") +def index(): + name = request.args.get("name", "world") + return render_template("index.html", name_placeholder=name) +``` + +## HTML Form + +### Sample App + +**templates/index.html** + +```HTML + + + + + Hello + + +
    + + +
    + + +``` + +**app.py** +`http://website.domain/?name=Trude` + +```Python +from flask import Flask, render_template, request +app = Flask(__name__) +# When user visits / (the website root), load index.html. +# If the key name exists, store the value in a variable. If not, store world. +@app.route("/") +def index(): + name = request.args.get("name", "world") + return render_template("index.html", name_placeholder=name) +``` + +### Custom Route + +Both the form and /greet works. +**templates/index.html** + +```HTML + + + + + Hello + + +
    + + +
    + + +``` + +**templates/greet.html** + +```HTML + + + + + Hello + + + hello,{{name}} + + +``` + +**app.py** +`http://website.domain/?name=Trude` + +```Python +from flask import Flask, render_template, request +app = Flask(__name__) +# When user visits / (the website root), load index.html. +# If the key name exists, store the value in a variable. If not, store world. +@app.route("/") +def index(): + name = request.args.get("name", "world") + return render_template("index.html", name_placeholder=name) +@app.route("/greet") +def greet(): + return render_template("greet.html", name=request.args.get("name", "world")) +``` + +### Avoid HTML Repetition + +Use a layout instead of copying blocks. +**templates/index.html** + +```HTML +{% extends "layout.html" %} +{% block body %} +
    + + +
    +{% endblock %} +``` + +**templates/greet.html** + +```HTML +{% extends "layout.html" %} +{% block body %} + hello, {{name}} +{% endblock %} +``` + +**templates/layout.html** + +```HTML + + + + + Hello + + + {% block body %}{% endblock %} + + +``` + +**app.py** +`http://website.domain/?name=Trude` + +```Python +from flask import Flask, render_template, request +app = Flask(__name__) +# When user visits / (the website root), load index.html. +# If the key name exists, store the value in a variable. If not, store world. +@app.route("/") +def index(): + name = request.args.get("name", "world") + return render_template("index.html", name_placeholder=name) +@app.route("/greet") +def greet(): + return render_template("greet.html", name=request.args.get("name", "world")) +``` + +### Hide Sensitive Requests from the URL + +Use post instead of get. +**templates/index.html** + +```HTML +{% extends "layout.html" %} +{% block body %} +
    + + +
    +{% endblock %} +``` + +**templates/greet.html** + +```HTML +{% extends "layout.html" %} +{% block body %} + hello, {{name}} +{% endblock %} +``` + +**templates/layout.html** + +```HTML + + + + + Hello + + + {% block body %}{% endblock %} + + +``` + +**app.py** +`http://website.domain/greet` +The name doesn't appear in the URL anymore. + +```Python +from flask import Flask, render_template, request +app = Flask(__name__) +# When user visits / (the website root), load index.html. +# If the key name exists, store the value in a variable. If not, store world. +@app.route("/") +def index(): + name = request.args.get("name", "world") + return render_template("index.html", name_placeholder=name) +@app.route("/greet", methods=["POST"]) +def greet(): + return render_template("greet.html", name=request.form.get("name", "world")) +``` + +### Combine Routes to save Resources + +GET is always the default. +POST is used to send information to the server. +**templates/index.html** + +```HTML +{% extends "layout.html" %} +{% block body %} +
    + + +
    +{% endblock %} +``` + +**templates/greet.html** + +```HTML +{% extends "layout.html" %} +{% block body %} + hello, {{name}} +{% endblock %} +``` + +**templates/layout.html** + +```HTML + + + + + Hello + + + {% block body %}{% endblock %} + + +``` + +**app.py** +`http://website.domain/` + +```Python +from flask import Flask, render_template, request +app = Flask(__name__) +# When user visits / (the website root), load index.html. +# If the key name exists, store the value in a variable. If not, store world. +@app.route("/", methods=["GET, POST"]) +def index(): + if request.method == "GET": + return render_template("index.html") + elif request.method == "POST": + return render_template("greet.html", name=request.form.get("name", "world")) +``` + +## Cookies - Session + +Used to store data and to recognize the user. +- Server → Client + - `Set-Cookie session=value` +- Client → Server + - `Cookie session` + +```Python +from flask import session +# Configure app +app = Flask(__name__) +# Configure session +app.config["SESSION_PERMANENT"] = False +app.config["SESSION_TYPE"] = "filesystem" +Session(app) +# Redirect to login if no cookie exists +@app.route("/") +def index(): + if not session.get("name"): + return redirect("/login") + return render_template("index.html") +# EXAMPLES +# session is a dictionary +session["cart"] = [] +books = db.execute("SELECT * FROM books WHERE id IN (?)", session["cart"]) +``` diff --git a/content/notes/git.md b/content/notes/git.md new file mode 100644 index 0000000..7b2203e --- /dev/null +++ b/content/notes/git.md @@ -0,0 +1,358 @@ +--- +tags: + - notes + - programming + - tools +author: TrudeEH +draft: false +showToc: true +title: Version Control [GIT] +--- +Git is a version control system first developed by Linus Torvalds. It facilitates collaboration on large projects, keeps track of changes, and allows mistakes to be rolled back into a previous state. + +## Configure Git + +Git uses a hierarchy of configuration files: +- **System**: (`/etc/gitconfig`) Configuration for all users in a system. +- **Global**: (`~/.gitconfig`) Configure Git for all project of the current user. +- **Local**: (`.git/config`) Configure Git for the current project. +- **Worktree**: (`.git/config.worktree`) Configure part of a project. + +```Shell +# Check if user name and email are set. +git config --get user.name +git config --get user.email +# If not, set those values. +git config --add --global user.name "username" +git config --add --global user.email "email@example.com" +git config --add --global init.defaultBranch main # GitHub's default +git config --unset example.key # Remove a configuration value +git config --unset-all example.key # Remove all instances of a configuration key +git config --remove-section section # Remove an entire section +# Rebase on pull by default to keep a linear history +git config --global pull.rebase true +``` + +## Create a Repository + +Git stores all project information in the `.git` directory. This includes branches, commits, and metadata. + +```Shell +mkdir project && cd project +git init +``` + +## Status + +A file can be in one of several states in a Git repository. +- `untracked`: Not being tracked by Git +- `staged`: Marked to be included in the next commit +- `committed`: Saved to the repository's history + +```Shell +git status # Shows he state of a repository. +``` + +## Staging + +Untracked files need to be indexed before being committed. + +```Shell +git add filename.ext # Add a file +git add . # Add every file in the current directory, recursively. +``` + +## Commit + +A commit is a snapshot of the entire repository at a given point in time. Each commit has a message that describes the changes made in that commit. +To commit all staged files: + +```Shell +git commit -m "message" # Commit all staged files +git commit --amend -m "message" # Replace the last commit's message +``` + +## Git Log + +The `git log` command shows the history of commits in a repository. It provides information on who made a commit, when it was made, and what files were changed. +Each commit also has a unique identifier (commit hash). +For example, this is a valid commit hash: `46a4b5904d4ad737447052fed90c754ce8c616b6`. +Since these identifiers are very long, they are often shortened to their first `7` characters (`46a4b59` in this example). + +```Shell +git log # Show the log in an interactive pager +git --no-pager log -n 10 # Show the last 10 lines from the log, without using the pager +git log -1 # Fetch the header of the first commit +git log --decorate=full # Shows the full pointer to a commit +git log --decorate=no # Don't show branch names +git log --oneline # Show each commit in a single line. ("compact" mode) +git reflog # History of actions. Commits, clone, pull, etc. +``` + +## Git Diff + +Show differences: + +```Shell +git diff # Differences between the working tree and the last commit +git diff HEAD~1 # Same, but includes the last commit and uncommitted changes +git diff COMMIT_HASH_1 COMMIT_HASH_2 # Differences between two commits +``` + +## Git Tags + +A tag is a name linked to a commit that doesn't move between commits. Useful to mark versions. + +```Shell +git tag # List the current tag +git tag -a "tag name" -m "tag message" # Add a new tag +git tag -a v3.10.2 -m "Fixed a lil bug" # Example marking a release +``` + +### Semantic Versioning (Semver) + +Naming convention for versioning software. + +```Plain +v3.12.5 + | | | + | | Patch (safe bug fixes) + | Minor (safe features) + Major (breaking changes) +``` + +## Branch + +A Git branch allows you to keep track of different changes separately. + +```Plain + D - E other_branch + / +A - B - C main +``` + +```Shell +git branch # Check which branches are available, and which one is selected +git branch -m oldname newname # Rename a branch +git branch my_new_branch # Create a new branch +git switch -c my_new_branch # Create a new branch and switch to it immediately +git switch branch_name # Switch to an existing branch +git checkout branch_name # Deprecated alternative to git switch +git branch -d branch_name # Delete a branch +``` + +### Merge + +After modifying a new branch, all commits performed on it can be merged into the main branch. + +```Plain +A - B - C - F main + \ / + D - E other_branch +``` + +```Shell +git log --oneline --graph --all # Show an ASCII representation of the commit history +git log --oneline --decorate --graph --parents # Also display any parent branches +git merge branch_name # Merge a branch into the current branch +``` + +### Rebase + +After a branch is created, it might fall behind its origin. A rebase includes the new changes from the origin into the current branch, without leaving a merge message behind. While merging can often accomplish the same task, a rebase keeps history linear and makes it easier to read. It's recommended to use it on the main branch, for example, when updating smaller ones. +Before a rebase, the commit history might have the following structure: + +```Plain +A - B - C main + \ + D - E feature_branch +``` + +After a rebase, the target branch is updated against its origin: + +```Plain +A - B - C main + \ + D - E feature_branch +``` + +```Shell +git rebase origin_name # Rebase against the origin +``` + +> You should *never* rebase a public branch (like `main`) onto anything else, to not break commit history. + +### Conflicts + +If a modified is pushed to another branch where that same file has been modified as well, a conflict arises. These can be fixed manually by editing text, or using Git commands. + +```Shell +git checkout --theirs path/to/file # Discard the current branch's changes and accept the target's changes +git checkout --ours path/to/file # Discard the target changes and replace with the ones in the current branch +git reset --soft HEAD~1 # Undo an accidental conflict resolution +``` + +### Squash + +Combine various commits into one: +1. Start an interactive rebase with the command `git rebase -i HEAD~n`, where `n` is the number of commits you want to squash. +2. Git will open your default editor with a list of commits. Change the word `pick` to `squash` for all but the first commit. +3. Save and close the editor. + +> If the squashed commits already existed in the remote repository, it might be needed to push using: `git push origin main --force`. + +### Stash + +`git stash` saves the state of the current working directory and the index (staging area), then returns the repository to `HEAD`. This allows you to work on a different issue, and then resume your previous task. + +```Shell +git stash +git stash -m "message" # It's also possible to stash with a message +git stash list # List all stashes +git stash pop # Apply the most recent stash to the working directory +git stash apply # Same as before, but doesn't delete the stash after applying +git stash drop # Discard a stash without applying changes +git stash apply stash@{2} # Apply the third most recent stash +``` + +### Worktrees + +The directory where the code tracked with Git lives. (And where the `.git` directory is located). +Use instead of a `stash` if the current worktree is too busy, or for long-lived changes. This acts like cloning the repo again and working there, except it doesn't take up space on the host machine. +Any change done on a linked worktree is reflected on the main one instantly. Think of it as a different view of the main worktree. + +```Shell +git worktree list # Lists worktrees +git worktree add [] # Create a worktree linked to the main one +git worktree remove WORKTREE_NAME # Remove a worktree +git worktree prune # Remove an empty worktree if its directories were removed +``` + +### Bisect + +Find a specific commit with binary tree search. +For example, if trying to find a bug in 100 commits, `git bisect` allows it to be found with only `7` attempts. +1. `git bisect start` +2. Use: `git bisect good ` to select a commit where the bug wasn't introduced yet. +3. Select a commit where the bug exists using: `git bisect bad `. +4. Git will checkout a commit between the good and bad commits for you to test to see if the bug is present. +5. Execute `git bisect good` or `git bisect bad`. +6. Loop back to step 4 (until `git bisect` completes) +7. Exit the bisect mode with `git bisect reset` + +```Shell +git bisect start +git bisect good # Select a commit where the bug wasn't introduced yet. +git bisect bad # Select a commit where the bug exists +``` + +#### Automated Bisect + +If you have a script that can tell if the current source code is good or bad, you can bisect by issuing the command: + +```Shell +git bisect run