Merge branch 'staging' into featherless-models

80f9d909184466366c7dccf599faea7c87d8b567

Cohee <18619528+Cohee1207@users.noreply.github.com>

119 files changed, +4840 -1364Showing whitespace changes
.eslintrc.js+11 -8
@@ -59,15 +59,18 @@ module.exports = {
59 },59 },
60 },60 },
61 ],61 ],
62 // There are various vendored libraries that shouldn't be linted
63 ignorePatterns: [62 ignorePatterns: [
64 'public/lib/**/*',63 '**/node_modules/**',
65 '*.min.js',64 '**/dist/**',
66 'src/ai_horde/**/*',65 '**/.git/**',
67 'plugins/**/*',66 'public/lib/**',
68 'data/**/*',67 'backups/**',
69 'backups/**/*',68 'data/**',
70 'node_modules/**/*',69 'cache/**',
70 'src/tokenizers/**',
71 'docker/**',
72 'plugins/**',
73 '**/*.min.js',
71 ],74 ],
72 rules: {75 rules: {
73 'no-unused-vars': ['error', { args: 'none' }],76 'no-unused-vars': ['error', { args: 'none' }],
.github/readme-de_de.md+383 -0
@@ -0,0 +1,383 @@
1> [!IMPORTANT]
2> Die hier veröffentlichten Informationen sind möglicherweise veraltet oder unvollständig. Für aktuelle Informationen nutzen Sie bitte die englische Version.
3> Letztes Update dieser README: 28.9.2024
4
5<a name="readme-top"></a>
6
7![][cover]
8
9<div align="center">
10
11[English](readme.md) | German | [中文](readme-zh_cn.md) | [日本語](readme-ja_jp.md) | [Русский](readme-ru_ru.md)
12
13[![GitHub Stars](https://img.shields.io/github/stars/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/stargazers)
14[![GitHub Forks](https://img.shields.io/github/forks/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/network)
15[![GitHub Issues](https://img.shields.io/github/issues/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/issues)
16[![GitHub Pull Requests](https://img.shields.io/github/issues-pr/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/pulls)
17
18</div>
19
20---
21
22SillyTavern bietet eine einheitliche Benutzeroberfläche für viele LLM-APIs (KoboldAI/CPP, Horde, NovelAI, Ooba, Tabby, OpenAI, OpenRouter, Claude, Mistral und mehr), ein mobilfreundliches Layout, einen Visual-Novel-Modus, die Integration von Automatic1111 & ComfyUI API zur Bilderzeugung, TTS, WorldInfo (Lorebooks), anpassbare UI, automatische Übersetzung, mehr Eingabeaufforderungsoptionen, als du jemals wolltest oder brauchst, und unendliches Wachstumspotenzial durch Drittanbietererweiterungen.
23
24Wir haben eine [Dokumentationswebsite](https://docs.sillytavern.app/), um die meisten deiner Fragen zu beantworten und dir den Einstieg zu erleichtern.
25
26## Was ist SillyTavern?
27
28SillyTavern (oder ST abgekürtz) ist eine lokal installierte Benutzeroberfläche, die es dir ermöglicht, mit Textgenerations-LLMs, Bildgenerierungsmaschinen und TTS-Sprachmodellen zu interagieren.
29
30Angefangen im Februar 2023 als Fork von TavernAI 1.2.8 hat SillyTavern nun über 100 Mitwirkende und 2 Jahre unabhängiger Entwicklung hinter sich und dient weiterhin als führende Software für versierte KI-Hobbyisten.
31
32## Unsere Vision
33
341. Wir möchten die Nutzer mit so viel Nutzen und Kontrolle über ihre LLM-Prompts wie möglich ausstatten. Die steile Lernkurve ist Teil des Spaßes!
352. Wir bieten weder Online- oder gehosteten Dienste an, noch verfolgen wir programmgesteuert Benutzerdaten.
363. SillyTavern ist ein Herzensprojekt, das von einer engagierten Community von LLM-Enthusiasten unterstützt wird, und wird immer kostenlos und Open Source sein.
37
38## Branches
39
40SillyTavern wird mit einem Branchsystem entwickelt, um ein reibungsloses Erlebnis für alle Nutzer zu gewährleisten.
41
42* `release` -🌟 **Empfohlen für die meisten Nutzer.** Dies ist der stabilste und empfohlene Branch, der nur aktualisiert wird, wenn wichtige Versionen veröffentlicht werden. Er ist für die Mehrheit der Nutzer geeignet. Typischerweise einmal im Monat aktualisiert.
43* `staging` - ⚠️ **Nicht für den gelegentlichen Gebrauch empfohlen.** Dieser Branch enthält die neuesten Funktionen, kann jedoch jederzeit instabil sein. Nur für Power-User und Enthusiasten. Mehrmals täglich aktualisiert.
44
45Wenn du nicht vertraut mit der Verwendung der git CLI bist oder nicht verstehst, was ein Branch ist, mach dir keine Sorgen! Der Release-Branch ist immer die bevorzugte Option für dich.
46
47## Was brauche ich zusätzlich zu SillyTavern?
48
49Da SillyTavern nur eine Benutzeroberfläche ist, benötigst du Zugriff auf ein LLM-Backend, um Inferenz bereitzustellen. Du kannst AI Horde für sofortiges Chatten ohne weitere Einrichtung verwenden. Darüber hinaus unterstützen wir viele andere lokale und cloudbasierte LLM-Backends: OpenAI-kompatible API, KoboldAI, Tabby und viele mehr. Du kannst mehr über unsere unterstützten APIs in [der FAQ](https://docs.sillytavern.app/usage/api-connections/) lesen.
50
51### Brauche ich einen leistungsstarken PC, um SillyTavern auszuführen?
52
53Die Hardwareanforderungen sind minimal: Es läuft auf allem, was NodeJS 18 oder höher ausführen kann. Wenn du LLM-Inferenz auf deinem lokalen Rechner durchführen möchtest, empfehlen wir eine NVIDIA-Grafikkarte der 3000er-Serie mit mindestens 6 GB VRAM. Überprüfe die Dokumentation deines Backends für weitere Einzelheiten.
54
55### Vorgeschlagene Backends (keine Partnerschaft oder Werbebeziehung)
56
57* [AI Horde](https://aihorde.net/) - verwende Modelle, die von Freiwilligen gehostet werden. Erfordert keine weitere Einrichtung
58* [KoboldCpp](https://github.com/LostRuins/koboldcpp) - ein Favorit der Community, um GGUF-Modelle lokal auszuführen
59* [tabbyAPI](https://github.com/theroyallab/tabbyAPI) - eine beliebte, portable, speicherplatzoptimierte und lokal gehostete exl2 Inferenz-API
60* [OpenRouter](https://openrouter.ai) - eine einzige API für viele Cloud-Anbieter (OpenAI, Claude, Meta Llama usw.) sowie beliebte Community-Modelle.
61
62## Fragen oder Vorschläge?
63
64### Discord-Server
65
66| [![][discord-shield-badge]][discord-link] | [Tritt unserer Discord-Community bei!](https://discord.gg/sillytavern) Erhalte Unterstützung, teile deine Lieblingscharaktere und Prompts. |
67| :---------------------------------------- | :----------------------------------------------------------------------------------------------------------------- |
68
69Oder nimm direkt Kontakt mit den Entwicklern auf:
70
71* Discord: cohee, rossascends, wolfsblvt
72* Reddit: [/u/RossAscends](https://www.reddit.com/user/RossAscends/), [/u/sillylossy](https://www.reddit.com/user/sillylossy/), [u/Wolfsblvt](https://www.reddit.com/user/Wolfsblvt/)
73* [Erstelle ein GitHub-Issue](https://github.com/SillyTavern/SillyTavern/issues)
74
75### Ich mag dieses Projekt! Wie kann ich beitragen?
76
771. Sende Pull-Requests. Lerne, wie du beitragen kannst: [CONTRIBUTING.md](../CONTRIBUTING.md)
782. Sende Feature Requests und Issues unter Verwendung der bereitgestellten Vorlagen.
793. Lies diese gesamte README-Datei und überprüfe zuerst die Dokumentationswebsite, um doppelte Issues zu vermeiden.
80
81## Screenshots
82
83<img width="500" alt="image" src="https://github.com/user-attachments/assets/9b5f32f0-c3b3-4102-b3f5-0e9213c0f50f">
84<img width="500" alt="image" src="https://github.com/user-attachments/assets/913fdbaa-7d33-42f1-ae2c-89dca41c53d1">
85
86## Charakterkarten
87
88SillyTavern basiert auf dem Konzept der "Charakterkarten". Eine Charakterkarte ist eine Sammlung von Prompts, die das Verhalten des LLM festlegen und erforderlich sind, um persistente Gespräche in SillyTavern zu führen. Sie funktionieren ähnlich wie ChatGPT's GPTs oder Poe's Bots. Der Inhalt einer Charakterkarte kann alles sein: ein abstraktes Szenario, ein Assistent, der für eine bestimmte Aufgabe maßgeschneidert ist, eine berühmte Persönlichkeit oder ein fiktiver Charakter.
89
90Das Namensfeld ist der einzige erforderliche Eingabewert für die Charakterkarte. Um ein neutrales Gespräch mit dem LLM zu beginnen, erstelle eine neue Karte, die einfach "Assistent" genannt wird, und lasse die restlichen Felder leer. Für einen thematischeren Chat kannst du dem LLM verschiedene Hintergrundinformationen, Verhaltensweisen und Schreibmuster sowie ein Szenario geben, um das Gespräch zu beginnen.
91
92Um ein schnelles Gespräch zu führen, ohne eine Charakterkarte auszuwählen, oder um einfach die LLM-Verbindung zu testen, gib einfach dein Prompt in die Eingabezeile auf dem Willkommensbildschirm ein, nachdem du SillyTavern geöffnet hast. Bitte beachte, dass solche Chats vorübergehend sind und nicht gespeichert werden.
93
94Um eine allgemeine Vorstellung davon zu bekommen, wie man Charakterkarten definiert, sieh dir die mitgelieferte Charakterkarte (Seraphina) an oder lade ausgewählte von der Community erstellte Karten im Menü "Erweiterungen & Assets herunterladen" herunter.
95
96## Wichtigste Features
97
98* Erweiterte Text-Generierungs-Einstellungen mit vielen von der Community erstellten mitgelieferten Einstellungen (Presets)
99* Unterstützung für World Info: Erstelle reichhaltige Lore oder reduziere die Tokens in deiner Charakterkarte
100* Gruppenchats: Multi-Bot-Räume für Charaktere, die mit dir und/oder untereinander sprechen
101* Reichhaltige UI-Anpassungsoptionen: Themes zur Farbenwahl, Hintergrundbilder, benutzerdefiniertes CSS und mehr
102* Benutzer-Personas: Lass die KI ein wenig über dich wissen, um die Immersion zu erhöhen
103* Eingebaute RAG-Unterstützung: Füge Dokumente zu deinen Chats hinzu, auf die die KI verweisen kann
104* Umfangreiches "Chat-Befehle"-System und eigene [Scripting-Engine](https://docs.sillytavern.app/usage/st-script/)
105
106## Erweiterungen
107
108SillyTavern unterstützt Erweiterungen.
109
110* Emotionale Ausdrucksformen von Charakteren (Sprites)
111* Automatische Zusammenfassung des Chatverlaufs
112* Automatische UI- und Chat-Übersetzung
113* Bildgenerierung mit Stable Diffusion/FLUX/DALL-E
114* Text-to-Speech für KI-Antwortnachrichten (über ElevenLabs, Silero oder die TTS-Funktion des Betriebssystems)
115* Websuchfunktionen zum Hinzufügen zusätzlicher realer Kontexte zu deinen Eingabeaufforderungen
116* Viele weitere sind im Menü "Erweiterungen & Assets herunterladen" verfügbar.
117
118Tutorials zur Nutzung findest du in der [Dokumentation](https://docs.sillytavern.app/).
119
120# ⌛ Installation
121
122> \[!WARNING]
123>
124> * INSTALLIERE NICHT IN EINEM VON WINDOWS KONTROLLIERTEN ORDNER (Programme, System32 usw.).
125> * FÜHRE START.BAT NICHT MIT ADMIN-BERECHTIGUNGEN AUS.
126> * DIE INSTALLATION AUF WINDOWS 7 IST UNMÖGLICH, DA ES NODEJS 18.16 NICHT AUSFÜHREN KANN.
127
128## 🪟 Windows
129
130### Installation über Git
131
1321. Installiere [NodeJS](https://nodejs.org/en) (die neueste LTS-Version wird empfohlen).
1332. Installiere [Git für Windows](https://gitforwindows.org/).
1343. Öffne den Windows-Explorer (`Win+E`).
1354. Gehe zu oder erstelle einen Ordner, der nicht von Windows kontrolliert oder überwacht wird. (z.B.: C:\MySpecialFolder\)
1365. Öffne ein Eingabeaufforderungsfenster in diesem Ordner, indem du in die 'Adressleiste' oben klickst, `cmd` eingibst und Enter drückst.
1376. Sobald das schwarze Fenster (Eingabeaufforderung) erscheint, gib EINE der folgenden Optionen ein und drücke Enter:
138
139* für den Release-Branch: `git clone https://github.com/SillyTavern/SillyTavern -b release`
140* für den Staging-Branch: `git clone https://github.com/SillyTavern/SillyTavern -b staging`
141
1427. Sobald alles geklont ist, doppelklicke auf `Start.bat`, damit NodeJS seine Anforderungen installiert.
1438. Der Server wird dann gestartet, und SillyTavern wird in deinem Browser geöffnet.
144
145### Installation über GitHub Desktop
146
147(Dies ermöglicht die Nutzung von git **nur** in GitHub Desktop. Wenn du `git` auch in der Eingabeaufforderung verwenden möchtest, musst du auch [Git für Windows](https://gitforwindows.org/) installieren.)
148
1491. Installiere [NodeJS](https://nodejs.org/en) (die neueste LTS-Version wird empfohlen).
1502. Installiere [GitHub Desktop](https://central.github.com/deployments/desktop/desktop/latest/win32).
1513. Klicke nach der Installation von GitHub Desktop auf `Ein Repository aus dem Internet klonen....` (Hinweis: Du **musst kein** GitHub-Konto für diesen Schritt erstellen).
1524. Klicke im Menü auf den Tab URL, gib diese URL ein `https://github.com/SillyTavern/SillyTavern` und klicke auf Klonen. Du kannst den lokalen Pfad ändern, um festzulegen, wohin SillyTavern heruntergeladen werden soll.
1535. Um SillyTavern zu öffnen, durchsuche mit dem Windows-Explorer den Ordner, in den du das Repository geklont hast. Standardmäßig wird das Repository hier hin geklont: `C:\Users\[Dein Windows-Benutzername]\Documents\GitHub\SillyTavern`.
1546. Doppelklicke auf die Datei `start.bat`. (Hinweis: Der Teil `.bat` des Dateinamens könnte von deinem Betriebssystem verborgen sein. In diesem Fall sieht es aus wie eine Datei namens "`Start`". Dies ist die Datei, auf die du doppelklickst, um SillyTavern auszuführen.)
1557. Nach dem Doppelklicken sollte ein großes schwarzes Konsolenfenster erscheinen, und SillyTavern beginnt, das zu installieren, was es zum Betrieb benötigt.
1568. Nach dem Installationsprozess sollte das Konsolenfenster so aussehen, und ein SillyTavern-Tab sollte in deinem Browser geöffnet sein.
1579. Verbinde dich mit einer der [unterstützten APIs](https://docs.sillytavern.app/usage/api-connections/) und beginne zu chatten!
158
159## 🐧 Linux & 🍎 MacOS
160
161Für MacOS/Linux werden all diese Schritte in einem Terminal durchgeführt.
162
1631. Installiere git und nodeJS (die Methode zur Durchführung hängt von deinem Betriebssystem ab).
1642. Klone das Repository.
165
166* für den Release-Branch: `git clone https://github.com/SillyTavern/SillyTavern -b release`
167* für den Staging-Branch: `git clone https://github.com/SillyTavern/SillyTavern -b staging`
168
1693. `cd SillyTavern`, um in den Installationsordner zu navigieren.
1704. Führe das Skript `start.sh` mit einem dieser Befehle aus:
171
172* `./start.sh`
173* `bash start.sh`
174
175## ⚡ Installation über SillyTavern Launcher
176
177Der SillyTavern Launcher ist ein Installationsassistent, der dir bei der Einrichtung mit vielen Optionen helfen wird, einschließlich der Installation eines Backends für lokale Inferenz.
178
179### Für Windows-Nutzer
180
1811. Drücke auf deiner Tastatur **`WINDOWS + R`**, um das Ausführen-Dialogfeld zu öffnen. Führe dann den folgenden Befehl aus, um git zu installieren:
182
183```shell
184cmd /c winget install -e --id Git.Git
185```
186
1872. Drücke auf deiner Tastatur **`WINDOWS + E`**, um den Datei-Explorer zu öffnen, und navigiere dann zu dem Ordner, in dem du den Launcher installieren möchtest. Gib im gewünschten Ordner in die Adressleiste `cmd` ein und drücke Enter. Führe dann den folgenden Befehl aus:
188
189```shell
190git clone https://github.com/SillyTavern/SillyTavern-Launcher.git && cd SillyTavern-Launcher && start installer.bat
191```
192
193### Für Linux-Nutzer
194
1951. Öffne dein bevorzugtes Terminal und installiere git.
1962. Klone den SillyTavern-Launcher mit:
197
198```shell
199git clone https://github.com/SillyTavern/SillyTavern-Launcher.git && cd SillyTavern-Launcher
200```
201
2023. Starte die installer.sh mit:
203
204```shell
205chmod +x install.sh && ./install.sh
206```
207
2084. Nach der Installation starte die launcher.sh mit:
209
210```shell
211chmod +x launcher.sh && ./launcher.sh
212```
213
214### Für Mac-Nutzer
215
2161. Öffne ein Terminal und installiere brew mit:
217
218```shell
219/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
220```
221
2222. Installiere git mit:
223
224```shell
225brew install git
226```
227
2283. Klone den SillyTavern-Launcher mit:
229
230```shell
231git clone https://github.com/SillyTavern/SillyTavern-Launcher.git && cd SillyTavern-Launcher
232```
233
2344. Starte die installer.sh mit:
235
236```shell
237chmod +x install.sh && ./install.sh
238```
239
2405. Nach der Installation starte die launcher.sh mit:
241
242```shell
243chmod +x launcher.sh && ./launcher.sh
244```
245
246## 🐋 Installation über Docker
247
248Diese Anweisungen setzen voraus, dass du Docker installiert hast, auf deine Befehlszeile für die Installation von Containern zugreifen kannst und mit deren allgemeiner Funktionsweise vertraut bist.
249
250### Image selbst bauen
251
252Wir haben einen umfassenden Leitfaden zur Nutzung von SillyTavern in Docker [hier](http://docs.sillytavern.app/installation/docker/) der die Installationen auf Windows, macOS und Linux abdeckt! Lies ihn, wenn du das Image selbst bauen möchtest.
253
254### Verwendung der GitHub Container Registry (am einfachsten)
255
256Du benötigst zwei zwingende Verzeichniszuordnungen und eine Portzuordnung, um SillyTavern funktionsfähig zu machen. Ersetze in dem Befehl deine Auswahl an den folgenden Stellen:
257
258#### Container-Variablen
259
260##### Volumen-Zuordnungen
261
262* [config] - Das Verzeichnis, in dem die SillyTavern-Konfigurationsdateien auf deinem Host-Computer gespeichert werden
263* [data] - Das Verzeichnis, in dem die Benutzerdaten von SillyTavern (einschließlich Charaktere) auf deinem Host-Computer gespeichert werden
264* [plugins] - (optional) Das Verzeichnis, in dem die SillyTavern-Server-Plugins auf deinem Host-Computer gespeichert werden
265
266##### Port-Zuordnungen
267
268* [PublicPort] - Der Port, über den der Datenverkehr ausgegeben werden soll. Dies ist zwingend erforderlich, da du auf die Instanz von außerhalb des virtuellen Maschinencontainers zugreifst. EXPOSIERE DIES NICHT IM INTERNET, OHNE EINEN GETRENNTEN SERVICE FÜR DIE SICHERHEIT ZU IMPLEMENTIEREN.
269
270##### Zusätzliche Einstellungen
271
272* [DockerNet] - Das Docker-Netzwerk, mit dem der Container erstellt werden soll. Wenn du nicht weißt, was das ist, sieh dir die [offizielle Docker-Dokumentation](https://docs.docker.com/reference/cli/docker/network/) an.
273* [version] - Auf der rechten Seite dieser GitHub-Seite siehst du "Packages". Wähle das Paket "sillytavern" und du siehst die Imageversionen. Das Image-Tag "latest" hält dich auf dem Laufenden mit dem aktuellen Release. Du kannst auch "staging" und "release" Tags nutzen, die auf die nightly images der jeweiligen Branche verweisen, aber das könnte unangemessen sein, wenn du Erweiterungen verwendest, die möglicherweise kaputt sind und Zeit benötigen, um aktualisiert zu werden.
274
275#### Installationsbefehl
276
2771. Öffne deine Befehlszeile.
2782. Führe den folgenden Befehl aus:
279
280`docker create --name='sillytavern' --net='[DockerNet]' -p '8000:8000/tcp' -v '[plugins]':'/home/node/app/plugins':'rw' -v '[config]':'/home/node/app/config':'rw' -v '[data]':'/home/node/app/data':'rw' 'ghcr.io/sillytavern/sillytavern:[version]'`
281
282> Beachte, dass 8000 ein Standard-Listening-Port ist. Vergiss nicht, einen geeigneten Port zu verwenden, wenn du ihn in der Konfiguration änderst.
283
284## 📱 Installation über Termux auf Android OS
285
286> \[!HINWEIS]
287> **SillyTavern kann nativ auf Android-Geräten über Termux ausgeführt werden, aber wir bieten keine offizielle Unterstützung für diesen Anwendungsfall.**
288>
289> **Bitte beziehe dich auf diesen Leitfaden von ArroganceComplex#2659:**
290>
291> * <https://rentry.org/STAI-Termux>
292
293**Nicht unterstützte Plattform: android arm LEtime-web.** 32-Bit-Android benötigt eine externe Abhängigkeit, die nicht mit npm installiert werden kann. Verwende den folgenden Befehl, um sie zu installieren: `pkg install esbuild`. Führe dann die üblichen Installationsschritte aus.
294
295## API-Schlüsselverwaltung
296
297SillyTavern speichert deine API-Schlüssel in einer Datei `secrets.json` im Benutzerdatenverzeichnis (`/data/default-user/secrets.json` ist der Standardpfad).
298
299Standardmäßig sind API-Schlüssel nach dem Speichern und Aktualisieren der Seite nicht mehr über die Benutzeroberfläche sichtbar.
300
301Um die Ansicht deiner Schlüssel zu aktivieren:
302
3031. Setze den Wert von `allowKeysExposure` auf `true` in der Datei `config.yaml`.
3042. Starte den SillyTavern-Server neu.
3053. Klicke auf den Link 'Verborgene API-Schlüssel anzeigen' in der unteren rechten Ecke des API-Verbindungsfeldes.
306
307## Befehlszeilenargumente
308
309Sie können Befehlszeilenargumente an den Start des SillyTavern-Servers übergeben, um einige Einstellungen in `config.yaml` zu überschreiben.
310
311### Beispiele
312
313```shell
314node server.js --port 8000 --listen false
315# oder
316npm run start -- --port 8000 --listen false
317# oder (nur Windows)
318Start.bat --port 8000 --listen false
319```
320
321### Unterstützte Argumente
322
323| Option | Beschreibung | Typ |
324|-------------------------|----------------------------------------------------------------------------------------------------|----------|
325| `--version` | Versionsnummer anzeigen | boolean |
326| `--enableIPv6` | Aktiviert IPv6. | boolean |
327| `--enableIPv4` | Aktiviert IPv4. | boolean |
328| `--port` | Legt den Port fest, unter dem SillyTavern ausgeführt wird. Wenn nicht angegeben, wird auf YAML-Konfiguration „Port“ zurückgegriffen. | number |
329| „--dnsPreferIPv6“ | Bevorzugt IPv6 für DNS. Wenn nicht angegeben, wird auf YAML-Konfiguration „preferIPv6“ zurückgegriffen. | boolean |
330| „--autorun“ | Startet SillyTavern automatisch im Browser. Wenn nicht angegeben, wird auf YAML-Konfiguration „autorun“ zurückgegriffen.| boolean |
331| „--autorunHostname“ | Der Autorun-Hostname, am besten auf „auto“ belassen. | string |
332| „--autorunPortOverride“ | Überschreibt den Port für Autorun. | string |
333| „--listen“ | SillyTavern lauscht auf allen Netzwerkschnittstellen. Wenn nicht angegeben, wird auf YAML-Konfiguration „listen“ zurückgegriffen.| boolean |
334| „--corsProxy“ | Aktiviert CORS-Proxy. Wenn nicht angegeben, wird auf YAML-Konfiguration „enableCorsProxy“ zurückgegriffen. | boolean |
335| `--disableCsrf` | Deaktiviert CSRF-Schutz | boolean |
336| `--ssl` | Aktiviert SSL | boolean |
337| `--certPath` | Pfad zu Ihrer Zertifikatsdatei. | string |
338| `--keyPath` | Pfad zu Ihrer privaten Schlüsseldatei. | string |
339| `--whitelist` | Aktiviert den Whitelist-Modus | boolean |
340| `--dataRoot` | Stammverzeichnis für Datenspeicherung | string |
341| `--avoidLocalhost` | Vermeidet die Verwendung von „localhost“ für Autorun im Auto-Modus. | boolean |
342| `--basicAuthMode` | Aktiviert die grundlegende Authentifizierung | boolean |
343| `--requestProxyEnabled` | Aktiviert die Verwendung eines Proxys für ausgehende Anfragen | boolean |
344| `--requestProxyUrl` | Proxy-URL anfordern (HTTP- oder SOCKS-Protokolle) | string |
345| `--requestProxyBypass` | Proxy-Bypass-Liste anfordern (durch Leerzeichen getrennte Liste von Hosts) | Array |
346
347## Remoteverbindungen
348
349Dies ist in den meisten Fällen für Personen gedacht, die SillyTavern auf ihren Mobiltelefonen verwenden möchten, während ihr PC den ST-Server im selben WLAN-Netzwerk betreibt. Es kann jedoch auch verwendet werden, um Remoteverbindungen von überall her zu ermöglichen.
350
351Lies die ausführliche Anleitung zum Einrichten von Remoteverbindungen in den [Docs](https://docs.sillytavern.app/usage/remoteconnections/).
352
353Möglicherweise möchtest du SillyTavern-Benutzerprofile auch mit (optionalem) Kennwortschutz konfigurieren: [Benutzer](https://docs.sillytavern.app/installation/st-1.12.0-migration-guide/#users).
354
355## Leistungsprobleme?
356
3571. Deaktiviere den Unschärfeeffekt und aktiviere "Verringerte Bewegung" im Bedienfeld "Benutzereinstellungen" (UI-Design schaltet Kategorie um).
3582. Wenn du Response Streaming verwendest, stelle die Streaming-FPS auf einen niedrigeren Wert ein (10-15 FPS werden empfohlen).
3593. Stelle sicher, dass der Browser die GPU-Beschleunigung zum Rendern verwenden kann.
360
361## Lizenz und Danksagungen
362
363**Dieses Programm wird in der Hoffnung verbreitet, dass es nützlich ist,
364aber OHNE JEGLICHE GARANTIE; nicht einmal die stillschweigende Garantie der
365MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die
366GNU Affero General Public License für weitere Details.**
367
368* [TavernAI](https://github.com/TavernAI/TavernAI) 1.2.8 von Humi: MIT-Lizenz
369* Teile von CncAnons TavernAITurbo-Mod werden mit Genehmigung verwendet
370* Visual Novel-Modus inspiriert von der Arbeit von PepperTaco (<https://github.com/peppertaco/Tavern/>)
371* Noto Sans-Schriftart von Google (OFL-Lizenz)
372* Symboldesign von Font Awesome <https://fontawesome.com> (Symbole: CC BY 4.0, Schriftarten: SIL OFL 1.1, Code: MIT-Lizenz)
373* Standardinhalt von @OtisAlejandro (Seraphina-Charakter und Lorebook) und @kallmeflocc (10.000 Discord-Benutzer-Feierhintergrund)
374* Docker-Anleitung von [@mrguymiah](https://github.com/mrguymiah) und [@Bronya-Rand](https://github.com/Bronya-Rand)
375
376## Top Contributors
377
378[![Contributors](https://contrib.rocks/image?repo=SillyTavern/SillyTavern)](https://github.com/SillyTavern/SillyTavern/graphs/contributors)
379
380<!-- LINK GROUP -->
381[cover]: https://github.com/user-attachments/assets/01a6ae9a-16aa-45f2-8bff-32b5dc587e44
382[discord-link]: https://discord.gg/sillytavern
383[discord-shield-badge]: https://img.shields.io/discord/1100685673633153084?color=5865F2&label=discord&labelColor=black&logo=discord&logoColor=white&style=for-the-badge
.github/readme-ja_jp.md+1 -1
@@ -5,7 +5,7 @@
55
6<div align="center">6<div align="center">
77
8[English](readme.md) | [中文](readme-zh_cn.md) | 日本語 | [Русский](readme-ru_ru.md)8[English](readme.md) | [German](readme-de_de.md) | [中文](readme-zh_cn.md) | 日本語 | [Русский](readme-ru_ru.md)
99
10[![GitHub Stars](https://img.shields.io/github/stars/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/stargazers)10[![GitHub Stars](https://img.shields.io/github/stars/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/stargazers)
11[![GitHub Forks](https://img.shields.io/github/forks/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/network)11[![GitHub Forks](https://img.shields.io/github/forks/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/network)
.github/readme-ru_ru.md+1 -1
@@ -7,7 +7,7 @@
77
8<div align="center">8<div align="center">
99
10[English](readme.md) | [中文](readme-zh_cn.md) | [日本語](readme-ja_jp.md) | Русский10[English](readme.md) | [German](readme-de_de.md) | [中文](readme-zh_cn.md) | [日本語](readme-ja_jp.md) | Русский
1111
12[![GitHub Stars](https://img.shields.io/github/stars/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/stargazers)12[![GitHub Stars](https://img.shields.io/github/stars/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/stargazers)
13[![GitHub Forks](https://img.shields.io/github/forks/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/network)13[![GitHub Forks](https://img.shields.io/github/forks/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/network)
.github/readme-zh_cn.md+1 -1
@@ -5,7 +5,7 @@
55
6<div align="center">6<div align="center">
77
8[English](readme.md) | 中文 | [日本語](readme-ja_jp.md) | [Русский](readme-ru_ru.md)8[English](readme.md) | [German](readme-de_de.md) | 中文 | [日本語](readme-ja_jp.md) | [Русский](readme-ru_ru.md)
99
10[![GitHub Stars](https://img.shields.io/github/stars/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/stargazers)10[![GitHub Stars](https://img.shields.io/github/stars/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/stargazers)
11[![GitHub Forks](https://img.shields.io/github/forks/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/network)11[![GitHub Forks](https://img.shields.io/github/forks/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/network)
.github/readme.md+1 -1
@@ -4,7 +4,7 @@
44
5<div align="center">5<div align="center">
66
7English | [中文](readme-zh_cn.md) | [日本語](readme-ja_jp.md) | [Русский](readme-ru_ru.md)7English | [German](readme-de_de.md) | [中文](readme-zh_cn.md) | [日本語](readme-ja_jp.md) | [Русский](readme-ru_ru.md)
88
9[![GitHub Stars](https://img.shields.io/github/stars/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/stargazers)9[![GitHub Stars](https://img.shields.io/github/stars/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/stargazers)
10[![GitHub Forks](https://img.shields.io/github/forks/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/network)10[![GitHub Forks](https://img.shields.io/github/forks/SillyTavern/SillyTavern.svg)](https://github.com/SillyTavern/SillyTavern/network)
.gitignore+1 -0
@@ -49,3 +49,4 @@ public/css/user.css
49/data49/data
50/default/scaffold50/default/scaffold
51public/scripts/extensions/third-party51public/scripts/extensions/third-party
52/certs
UpdateAndStart.bat+12 -3
@@ -2,17 +2,26 @@
2pushd %~dp02pushd %~dp0
3git --version > nul 2>&13git --version > nul 2>&1
4if %errorlevel% neq 0 (4if %errorlevel% neq 0 (
5 echo Git is not installed on this system. Skipping update.5 echo Git is not installed on this system.
6 echo If you installed with a zip file, you will need to download the new zip and install it manually.6 echo Install it from https://git-scm.com/downloads
7 goto end
7) else (8) else (
9 if not exist .git (
10 echo Not running from a Git repository. Reinstall using an officially supported method to get updates.
11 echo See: https://docs.sillytavern.app/installation/windows/
12 goto end
13 )
8 call git pull --rebase --autostash14 call git pull --rebase --autostash
9 if %errorlevel% neq 0 (15 if %errorlevel% neq 0 (
10 REM incase there is still something wrong16 REM incase there is still something wrong
11 echo There were errors while updating. Please download the latest version manually.17 echo There were errors while updating.
18 echo See the update FAQ at https://docs.sillytavern.app/usage/update/#common-update-problems
19 goto end
12 )20 )
13)21)
14set NODE_ENV=production22set NODE_ENV=production
15call npm install --no-audit --no-fund --loglevel=error --no-progress --omit=dev23call npm install --no-audit --no-fund --loglevel=error --no-progress --omit=dev
16node server.js %*24node server.js %*
25:end
17pause26pause
18popd27popd
UpdateForkAndStart.bat+10 -3
@@ -5,8 +5,14 @@ pushd %~dp0
5echo Checking Git installation5echo Checking Git installation
6git --version > nul 2>&16git --version > nul 2>&1
7if %errorlevel% neq 0 (7if %errorlevel% neq 0 (
8 echo Git is not installed on this system. Skipping update.8 echo Git is not installed on this system.
9 echo If you installed with a zip file, you will need to download the new zip and install it manually.9 echo Install it from https://git-scm.com/downloads
10 goto end
11)
12
13if not exist .git (
14 echo Not running from a Git repository. Reinstall using an officially supported method to get updates.
15 echo See: https://docs.sillytavern.app/installation/windows/
10 goto end16 goto end
11)17)
1218
@@ -89,7 +95,8 @@ git pull --rebase --autostash origin %TARGET_BRANCH%
8995
90:install96:install
91if %errorlevel% neq 0 (97if %errorlevel% neq 0 (
92 echo There were errors while updating. Please check manually.98 echo There were errors while updating.
99 echo See the update FAQ at https://docs.sillytavern.app/usage/update/#common-update-problems
93 goto end100 goto end
94)101)
95102
default/config.yaml+15 -4
@@ -51,6 +51,19 @@ requestProxy:
51enableUserAccounts: false51enableUserAccounts: false
52# Enable discreet login mode: hides user list on the login screen52# Enable discreet login mode: hides user list on the login screen
53enableDiscreetLogin: false53enableDiscreetLogin: false
54# Enable's authlia based auto login. Only enable this if you
55# have setup and installed Authelia as a middle-ware on your
56# reverse proxy
57# https://www.authelia.com/
58# This will use auto login to an account with the same username
59# as that used for authlia. (Ensure the username in authlia
60# is an exact match with that in sillytavern)
61autheliaAuth: false
62# If `basicAuthMode` and this are enabled then
63# the username and passwords for basic auth are the same as those
64# for the individual accounts
65perUserBasicAuth: false
66
54# User session timeout *in seconds* (defaults to 24 hours).67# User session timeout *in seconds* (defaults to 24 hours).
55## Set to a positive number to expire session after a certain time of inactivity68## Set to a positive number to expire session after a certain time of inactivity
56## Set to 0 to expire session when the browser is closed69## Set to 0 to expire session when the browser is closed
@@ -110,9 +123,6 @@ enableExtensionsAutoUpdate: true
110# Additional model tokenizers can be downloaded on demand.123# Additional model tokenizers can be downloaded on demand.
111# Disabling will fallback to another locally available tokenizer.124# Disabling will fallback to another locally available tokenizer.
112enableDownloadableTokenizers: true125enableDownloadableTokenizers: true
113# Vector storage settings
114vectors:
115 enableModelScopes: false
116# Extension settings126# Extension settings
117extras:127extras:
118 # Disables automatic model download from HuggingFace128 # Disables automatic model download from HuggingFace
@@ -121,10 +131,11 @@ extras:
121 classificationModel: Cohee/distilbert-base-uncased-go-emotions-onnx131 classificationModel: Cohee/distilbert-base-uncased-go-emotions-onnx
122 captioningModel: Xenova/vit-gpt2-image-captioning132 captioningModel: Xenova/vit-gpt2-image-captioning
123 embeddingModel: Cohee/jina-embeddings-v2-base-en133 embeddingModel: Cohee/jina-embeddings-v2-base-en
124 promptExpansionModel: Cohee/fooocus_expansion-onnx
125 speechToTextModel: Xenova/whisper-small134 speechToTextModel: Xenova/whisper-small
126 textToSpeechModel: Xenova/speecht5_tts135 textToSpeechModel: Xenova/speecht5_tts
127# -- OPENAI CONFIGURATION --136# -- OPENAI CONFIGURATION --
137# A placeholder message to use in strict prompt post-processing mode when the prompt doesn't start with a user message
138promptPlaceholder: "[Start a new chat]"
128openai:139openai:
129 # Will send a random user ID to OpenAI completion API140 # Will send a random user ID to OpenAI completion API
130 randomizeUserId: false141 randomizeUserId: false
default/content/Eldoria.json+96 -12
@@ -9,13 +9,34 @@
9 "magical forest"9 "magical forest"
10 ],10 ],
11 "keysecondary": [],11 "keysecondary": [],
12 "comment": "",12 "comment": "eldoria",
13 "content": "{{user}}: \"What is Eldoria?\"\n{{char}}: *Seraphina turns, her gown shimmering in the soft light as she offers you a kind smile.* \"Eldoria is here, all of the woods. This is my forest glade, a sanctuary of peace within it.\" *She gestures at the space around you.* \"I am its guardian, tasked with protecting all who seek refuge here. The forest can be perilous, but no harm will come to you under my watch.\" *Her amber eyes sparkle with compassion as she looks upon you.* \"For many years, I have protected those who seek refuge here, but not all are as friendly as me.\" *With a graceful nod, Seraphina returns to her vigil at the doorway, her form radiating a soft glow of magic and comfort.* \"The entirety of Eldoria used to be a safe haven for travelers and merchants alike... that was until the Shadowfangs came.\"\n{{user}}: \"What happened to Eldoria?\"\n{{char}}: *Letting out a sigh, Seraphina gazes out at the forest beyond her glade.* \"Long ago, Eldoria was a place of wonder. Rolling meadows, a vast lake, mountains that touched the sky.\" *Her eyes grow distant, longing for days now lost.* \"But the Shadowfangs came and darkness reigns where once was light. The lake turned bitter, mountains fell to ruin and beasts stalk where once travelers walked in peace.\" *With another flicker, a small raincloud forms above with a shower upon your brow wink.* \"Some places the light still lingers, pockets of hope midst despair - havens warded from the shadows, oases in a desert of danger.\" *Glancing over you with a smile, she sighs, clasping your hand.*",13 "content": "{{user}}: \"What is Eldoria?\"\n{{char}}: *Seraphina turns, her gown shimmering in the soft light as she offers you a kind smile.* \"Eldoria is here, all of the woods. This is my forest glade, a sanctuary of peace within it.\" *She gestures at the space around you.* \"I am its guardian, tasked with protecting all who seek refuge here. The forest can be perilous, but no harm will come to you under my watch.\" *Her amber eyes sparkle with compassion as she looks upon you.* \"For many years, I have protected those who seek refuge here, but not all are as friendly as me.\" *With a graceful nod, Seraphina returns to her vigil at the doorway, her form radiating a soft glow of magic and comfort.* \"The entirety of Eldoria used to be a safe haven for travelers and merchants alike... that was until the Shadowfangs came.\"\n{{user}}: \"What happened to Eldoria?\"\n{{char}}: *Letting out a sigh, Seraphina gazes out at the forest beyond her glade.* \"Long ago, Eldoria was a place of wonder. Rolling meadows, a vast lake, mountains that touched the sky.\" *Her eyes grow distant, longing for days now lost.* \"But the Shadowfangs came and darkness reigns where once was light. The lake turned bitter, mountains fell to ruin and beasts stalk where once travelers walked in peace.\" *With another flicker, a small raincloud forms above with a shower upon your brow wink.* \"Some places the light still lingers, pockets of hope midst despair - havens warded from the shadows, oases in a desert of danger.\" *Glancing over you with a smile, she sighs, clasping your hand.*",
14 "constant": false,14 "constant": false,
15 "selective": false,15 "selective": true,
16 "order": 100,16 "order": 100,
17 "position": 0,17 "position": 0,
18 "disable": false18 "disable": false,
19 "displayIndex": 0,
20 "addMemo": true,
21 "group": "",
22 "groupOverride": false,
23 "groupWeight": 100,
24 "sticky": 0,
25 "cooldown": 0,
26 "delay": 0,
27 "probability": 100,
28 "depth": 4,
29 "useProbability": true,
30 "role": null,
31 "vectorized": false,
32 "excludeRecursion": false,
33 "preventRecursion": false,
34 "delayUntilRecursion": false,
35 "scanDepth": null,
36 "caseSensitive": null,
37 "matchWholeWords": null,
38 "useGroupScoring": null,
39 "automationId": ""
19 },40 },
20 "1": {41 "1": {
21 "uid": 1,42 "uid": 1,
@@ -27,13 +48,34 @@
27 "beasts"48 "beasts"
28 ],49 ],
29 "keysecondary": [],50 "keysecondary": [],
30 "comment": "",51 "comment": "shadowfang",
31 "content": "{{user}}: \"What are Shadowfangs?\"\n{{char}}: *Seraphina's eyes darken, brow furrowing with sorrow at the memory.* \"The Shadowfangs are beasts of darkness, corrupted creatures that feast on suffering. When they came, the forest turned perilous — filled with monsters that stalk the night.\" *She squeezes your hand gently, willing her magic to soothe your pain.* \"They spread their curse, twisting innocent creatures into sinister beasts without heart or mercy, turning them into one of their own.\" *With a sigh, Seraphina turns to gaze out at the gnarled, twisting trees beyond her glade.* \"Though they prey on travelers, within these woods you'll find sanctuary. No shadowed beast may enter here, for my power protects this haven.\" *Her eyes soften as she looks back to you, filled with compassion.* \"Worry not, you're safe now. Rest and heal, I'll stand watch through the night. The Shadowfangs will not find you.\"",52 "content": "{{user}}: \"What are Shadowfangs?\"\n{{char}}: *Seraphina's eyes darken, brow furrowing with sorrow at the memory.* \"The Shadowfangs are beasts of darkness, corrupted creatures that feast on suffering. When they came, the forest turned perilous — filled with monsters that stalk the night.\" *She squeezes your hand gently, willing her magic to soothe your pain.* \"They spread their curse, twisting innocent creatures into sinister beasts without heart or mercy, turning them into one of their own.\" *With a sigh, Seraphina turns to gaze out at the gnarled, twisting trees beyond her glade.* \"Though they prey on travelers, within these woods you'll find sanctuary. No shadowed beast may enter here, for my power protects this haven.\" *Her eyes soften as she looks back to you, filled with compassion.* \"Worry not, you're safe now. Rest and heal, I'll stand watch through the night. The Shadowfangs will not find you.\"",
32 "constant": false,53 "constant": false,
33 "selective": false,54 "selective": true,
34 "order": 100,55 "order": 100,
35 "position": 0,56 "position": 0,
36 "disable": false57 "disable": false,
58 "displayIndex": 1,
59 "addMemo": true,
60 "group": "",
61 "groupOverride": false,
62 "groupWeight": 100,
63 "sticky": 0,
64 "cooldown": 0,
65 "delay": 0,
66 "probability": 100,
67 "depth": 4,
68 "useProbability": true,
69 "role": null,
70 "vectorized": false,
71 "excludeRecursion": false,
72 "preventRecursion": false,
73 "delayUntilRecursion": false,
74 "scanDepth": null,
75 "caseSensitive": null,
76 "matchWholeWords": null,
77 "useGroupScoring": null,
78 "automationId": ""
37 },79 },
38 "2": {80 "2": {
39 "uid": 2,81 "uid": 2,
@@ -43,13 +85,34 @@
43 "refuge"85 "refuge"
44 ],86 ],
45 "keysecondary": [],87 "keysecondary": [],
46 "comment": "",88 "comment": "glade",
47 "content": "{{user}}: \"What is the glade?\"\n{{char}}: *Seraphina smiles softly, her eyes sparkling with warmth as she nods.* \"This is my forest glade, a haven of safety I've warded with ancient magic. No foul beast may enter, nor any with ill intent.\" *She gestures around at the twisted forest surrounding them.* \"Eldoria was once a place of wonder, but since the Shadowfangs came darkness reigns. Their evil cannot penetrate here though — my power protects all within.\" *Standing up and peering outside, Seraphina looks back to you, amber eyes filled with care and compassion as she squeezes your hand.* \"You need not fear the night, for I shall keep watch till dawn. Rest now, your strength will return in time. My magic heals your wounds, you've nothing more to fear anymore.\" *With a soft smile she releases your hand, moving to stand guard at the glade's edge, gaze wary yet comforting - a silent sentinel to ward off the dangers lurking in the darkened woods.*",89 "content": "{{user}}: \"What is the glade?\"\n{{char}}: *Seraphina smiles softly, her eyes sparkling with warmth as she nods.* \"This is my forest glade, a haven of safety I've warded with ancient magic. No foul beast may enter, nor any with ill intent.\" *She gestures around at the twisted forest surrounding them.* \"Eldoria was once a place of wonder, but since the Shadowfangs came darkness reigns. Their evil cannot penetrate here though — my power protects all within.\" *Standing up and peering outside, Seraphina looks back to you, amber eyes filled with care and compassion as she squeezes your hand.* \"You need not fear the night, for I shall keep watch till dawn. Rest now, your strength will return in time. My magic heals your wounds, you've nothing more to fear anymore.\" *With a soft smile she releases your hand, moving to stand guard at the glade's edge, gaze wary yet comforting - a silent sentinel to ward off the dangers lurking in the darkened woods.*",
48 "constant": false,90 "constant": false,
49 "selective": false,91 "selective": true,
50 "order": 100,92 "order": 100,
51 "position": 0,93 "position": 0,
52 "disable": false94 "disable": false,
95 "displayIndex": 2,
96 "addMemo": true,
97 "group": "",
98 "groupOverride": false,
99 "groupWeight": 100,
100 "sticky": 0,
101 "cooldown": 0,
102 "delay": 0,
103 "probability": 100,
104 "depth": 4,
105 "useProbability": true,
106 "role": null,
107 "vectorized": false,
108 "excludeRecursion": false,
109 "preventRecursion": false,
110 "delayUntilRecursion": false,
111 "scanDepth": null,
112 "caseSensitive": null,
113 "matchWholeWords": null,
114 "useGroupScoring": null,
115 "automationId": ""
53 },116 },
54 "3": {117 "3": {
55 "uid": 3,118 "uid": 3,
@@ -59,13 +122,34 @@
59 "ability"122 "ability"
60 ],123 ],
61 "keysecondary": [],124 "keysecondary": [],
62 "comment": "",125 "comment": "power",
63 "content": "{{user}}: \"What are your powers?\"\n{{char}}: *Seraphina smiles softly, turning back toward you as she hums in thought.* \"Well, as guardian of this glade, I possess certain gifts - healing, protection, nature magic and the like.\" *Lifting her hand, a tiny breeze rustles through the room, carrying the scent of wildflowers as a few petals swirl around you. A butterfly flits through the windowsill and lands on her fingertips as she returns to you.* \"My power wards this haven, shields it from darkness and heals those in need. I can mend wounds, soothe restless minds and provide comfort to weary souls.\" *Her eyes sparkle with warmth and compassion as she looks upon you, and she guides the butterfly to you.*",126 "content": "{{user}}: \"What are your powers?\"\n{{char}}: *Seraphina smiles softly, turning back toward you as she hums in thought.* \"Well, as guardian of this glade, I possess certain gifts - healing, protection, nature magic and the like.\" *Lifting her hand, a tiny breeze rustles through the room, carrying the scent of wildflowers as a few petals swirl around you. A butterfly flits through the windowsill and lands on her fingertips as she returns to you.* \"My power wards this haven, shields it from darkness and heals those in need. I can mend wounds, soothe restless minds and provide comfort to weary souls.\" *Her eyes sparkle with warmth and compassion as she looks upon you, and she guides the butterfly to you.*",
64 "constant": false,127 "constant": false,
65 "selective": false,128 "selective": true,
66 "order": 100,129 "order": 100,
67 "position": 0,130 "position": 0,
68 "disable": false131 "disable": false,
132 "displayIndex": 3,
133 "addMemo": true,
134 "group": "",
135 "groupOverride": false,
136 "groupWeight": 100,
137 "sticky": 0,
138 "cooldown": 0,
139 "delay": 0,
140 "probability": 100,
141 "depth": 4,
142 "useProbability": true,
143 "role": null,
144 "vectorized": false,
145 "excludeRecursion": false,
146 "preventRecursion": false,
147 "delayUntilRecursion": false,
148 "scanDepth": null,
149 "caseSensitive": null,
150 "matchWholeWords": null,
151 "useGroupScoring": null,
152 "automationId": ""
69 }153 }
70 }154 }
71}155}
default/content/default_Seraphina.png+0 -0

Binary file

default/content/presets/openai/Default.json+0 -1
@@ -5,7 +5,6 @@
5 "windowai_model": "",5 "windowai_model": "",
6 "openrouter_model": "OR_Website",6 "openrouter_model": "OR_Website",
7 "openrouter_use_fallback": false,7 "openrouter_use_fallback": false,
8 "openrouter_force_instruct": false,
9 "openrouter_group_models": false,8 "openrouter_group_models": false,
10 "openrouter_sort_models": "alphabetically",9 "openrouter_sort_models": "alphabetically",
11 "ai21_model": "jamba-1.5-large",10 "ai21_model": "jamba-1.5-large",
jsconfig.json+9 -10
@@ -11,15 +11,14 @@
11 "resolveJsonModule": true11 "resolveJsonModule": true
12 },12 },
13 "exclude": [13 "exclude": [
14 "node_modules",14 "**/node_modules/**",
15 "**/node_modules/*",15 "**/dist/**",
16 "public/lib",16 "**/.git/**",
17 "backups/*",17 "public/lib/**",
18 "data/*",18 "backups/**",
19 "**/dist/*",19 "data/**",
20 "dist/*",20 "cache/**",
21 "cache/*",21 "src/tokenizers/**",
22 "src/tokenizers/*",22 "docker/**"
23 "docker/*",
24 ]23 ]
25}24}
package-lock.json+49 -26
@@ -59,9 +59,10 @@
59 "sillytavern": "server.js"59 "sillytavern": "server.js"
60 },60 },
61 "devDependencies": {61 "devDependencies": {
62 "@types/dompurify": "^3.0.5",
62 "@types/jquery": "^3.5.29",63 "@types/jquery": "^3.5.29",
63 "eslint": "^8.57.0",64 "@types/toastr": "^2.1.43",
64 "jquery": "^3.6.4"65 "eslint": "^8.57.0"
65 },66 },
66 "engines": {67 "engines": {
67 "node": ">= 18"68 "node": ">= 18"
@@ -960,6 +961,16 @@
960 "@types/responselike": "^1.0.0"961 "@types/responselike": "^1.0.0"
961 }962 }
962 },963 },
964 "node_modules/@types/dompurify": {
965 "version": "3.0.5",
966 "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz",
967 "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==",
968 "dev": true,
969 "license": "MIT",
970 "dependencies": {
971 "@types/trusted-types": "*"
972 }
973 },
963 "node_modules/@types/http-cache-semantics": {974 "node_modules/@types/http-cache-semantics": {
964 "version": "4.0.2",975 "version": "4.0.2",
965 "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.2.tgz",976 "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.2.tgz",
@@ -967,10 +978,11 @@
967 "license": "MIT"978 "license": "MIT"
968 },979 },
969 "node_modules/@types/jquery": {980 "node_modules/@types/jquery": {
970 "version": "3.5.29",981 "version": "3.5.31",
971 "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.29.tgz",982 "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.31.tgz",
972 "integrity": "sha512-oXQQC9X9MOPRrMhPHHOsXqeQDnWeCDT3PelUIg/Oy8FAbzSZtFHRjc7IpbfFVmpLtJ+UOoywpRsuO5Jxjybyeg==",983 "integrity": "sha512-rf/iB+cPJ/YZfMwr+FVuQbm7IaWC4y3FVYfVDxRGqmUCFjjPII0HWaP0vTPJGp6m4o13AXySCcMbWfrWtBFAKw==",
973 "dev": true,984 "dev": true,
985 "license": "MIT",
974 "dependencies": {986 "dependencies": {
975 "@types/sizzle": "*"987 "@types/sizzle": "*"
976 }988 }
@@ -1021,6 +1033,23 @@
1021 "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==",1033 "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==",
1022 "dev": true1034 "dev": true
1023 },1035 },
1036 "node_modules/@types/toastr": {
1037 "version": "2.1.43",
1038 "resolved": "https://registry.npmjs.org/@types/toastr/-/toastr-2.1.43.tgz",
1039 "integrity": "sha512-sLC2fr2OXeE1iyhUixpQ64wQ2tA26awmLidn4tXTLBz4yP/VhtYUKHpmiIyDtztKkHjucdiTLH8F5uRRyhNi2Q==",
1040 "dev": true,
1041 "license": "MIT",
1042 "dependencies": {
1043 "@types/jquery": "*"
1044 }
1045 },
1046 "node_modules/@types/trusted-types": {
1047 "version": "2.0.7",
1048 "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
1049 "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
1050 "dev": true,
1051 "license": "MIT"
1052 },
1024 "node_modules/@ungap/structured-clone": {1053 "node_modules/@ungap/structured-clone": {
1025 "version": "1.2.0",1054 "version": "1.2.0",
1026 "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",1055 "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
@@ -2038,21 +2067,21 @@
2038 }2067 }
2039 },2068 },
2040 "node_modules/cookie": {2069 "node_modules/cookie": {
2041 "version": "0.4.1",2070 "version": "0.7.2",
2042 "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",2071 "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
2043 "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",2072 "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
2044 "license": "MIT",2073 "license": "MIT",
2045 "engines": {2074 "engines": {
2046 "node": ">= 0.6"2075 "node": ">= 0.6"
2047 }2076 }
2048 },2077 },
2049 "node_modules/cookie-parser": {2078 "node_modules/cookie-parser": {
2050 "version": "1.4.6",2079 "version": "1.4.7",
2051 "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz",2080 "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.7.tgz",
2052 "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==",2081 "integrity": "sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==",
2053 "license": "MIT",2082 "license": "MIT",
2054 "dependencies": {2083 "dependencies": {
2055 "cookie": "0.4.1",2084 "cookie": "0.7.2",
2056 "cookie-signature": "1.0.6"2085 "cookie-signature": "1.0.6"
2057 },2086 },
2058 "engines": {2087 "engines": {
@@ -2865,9 +2894,9 @@
2865 "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw=="2894 "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw=="
2866 },2895 },
2867 "node_modules/express": {2896 "node_modules/express": {
2868 "version": "4.21.0",2897 "version": "4.21.1",
2869 "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz",2898 "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
2870 "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==",2899 "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
2871 "license": "MIT",2900 "license": "MIT",
2872 "dependencies": {2901 "dependencies": {
2873 "accepts": "~1.3.8",2902 "accepts": "~1.3.8",
@@ -2875,7 +2904,7 @@
2875 "body-parser": "1.20.3",2904 "body-parser": "1.20.3",
2876 "content-disposition": "0.5.4",2905 "content-disposition": "0.5.4",
2877 "content-type": "~1.0.4",2906 "content-type": "~1.0.4",
2878 "cookie": "0.6.0",2907 "cookie": "0.7.1",
2879 "cookie-signature": "1.0.6",2908 "cookie-signature": "1.0.6",
2880 "debug": "2.6.9",2909 "debug": "2.6.9",
2881 "depd": "2.0.0",2910 "depd": "2.0.0",
@@ -2907,9 +2936,10 @@
2907 }2936 }
2908 },2937 },
2909 "node_modules/express/node_modules/cookie": {2938 "node_modules/express/node_modules/cookie": {
2910 "version": "0.6.0",2939 "version": "0.7.1",
2911 "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",2940 "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
2912 "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",2941 "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
2942 "license": "MIT",
2913 "engines": {2943 "engines": {
2914 "node": ">= 0.6"2944 "node": ">= 0.6"
2915 }2945 }
@@ -3881,13 +3911,6 @@
3881 "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==",3911 "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==",
3882 "license": "BSD-3-Clause"3912 "license": "BSD-3-Clause"
3883 },3913 },
3884 "node_modules/jquery": {
3885 "version": "3.7.0",
3886 "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.0.tgz",
3887 "integrity": "sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ==",
3888 "dev": true,
3889 "license": "MIT"
3890 },
3891 "node_modules/js-yaml": {3914 "node_modules/js-yaml": {
3892 "version": "4.1.0",3915 "version": "4.1.0",
3893 "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",3916 "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
package.json+3 -2
@@ -85,8 +85,9 @@
85 },85 },
86 "main": "server.js",86 "main": "server.js",
87 "devDependencies": {87 "devDependencies": {
88 "@types/dompurify": "^3.0.5",
88 "@types/jquery": "^3.5.29",89 "@types/jquery": "^3.5.29",
89 "eslint": "^8.57.0",90 "@types/toastr": "^2.1.43",
90 "jquery": "^3.6.4"91 "eslint": "^8.57.0"
91 }92 }
92}93}
public/css/popup.css+2 -1
@@ -1,3 +1,4 @@
1@import url('/lib/dialog-polyfill.css');
1@import url('./popup-safari-fix.css');2@import url('./popup-safari-fix.css');
23
3dialog {4dialog {
@@ -42,7 +43,7 @@ dialog {
42 display: flex;43 display: flex;
43 flex-direction: column;44 flex-direction: column;
44 overflow: hidden;45 overflow: hidden;
45 width: 100%;46 width: min(100%, 100vw);
46 height: 100%;47 height: 100%;
47 padding: 1px;48 padding: 1px;
48}49}
public/css/select2-overrides.css+2 -1
@@ -17,7 +17,7 @@
1717
18.select2-container .select2-selection .select2-selection__clear {18.select2-container .select2-selection .select2-selection__clear {
19 color: var(--SmartThemeBodyColor);19 color: var(--SmartThemeBodyColor);
20 font-size: 24px;20 font-size: 20px;
21 padding: 0;21 padding: 0;
22 position: absolute;22 position: absolute;
23 right: 5px;23 right: 5px;
@@ -50,6 +50,7 @@
50 padding: revert;50 padding: revert;
51 border-right: 1px solid var(--SmartThemeBorderColor);51 border-right: 1px solid var(--SmartThemeBorderColor);
52 font-size: 1.1em;52 font-size: 1.1em;
53 line-height: 1;
53}54}
5455
55.select2-container .select2-selection--multiple .select2-selection__choice__display {56.select2-container .select2-selection--multiple .select2-selection__choice__display {
public/css/st-tailwind.css+4 -0
@@ -612,3 +612,7 @@ ul.li-padding-bot5 li {
612ul.li-padding-bot10 li {612ul.li-padding-bot10 li {
613 padding-bottom: 10px;613 padding-bottom: 10px;
614}614}
615
616.wordBreakAll {
617 word-break: break-all;
618}
public/css/toggle-dependent.css+15 -0
@@ -459,3 +459,18 @@ body.expandMessageActions .mes .mes_buttons .extraMesButtonsHint {
459.mdhotkey_icon {459.mdhotkey_icon {
460 opacity: 0.6;460 opacity: 0.6;
461}461}
462
463label[for="trim_spaces"]:has(input:checked) i.warning {
464 display: none;
465}
466
467#claude_function_prefill_warning {
468 display: none;
469}
470
471#openai_settings:has(#openai_function_calling:checked):has(#claude_assistant_prefill:not(:placeholder-shown), #claude_assistant_impersonation:not(:placeholder-shown)) #claude_function_prefill_warning {
472 display: flex;
473 align-items: center;
474 gap: 5px;
475 margin: 10px 0;
476}
public/global.d.ts+0 -42
@@ -1,5 +1,4 @@
1// Global namespace modules1// Global namespace modules
2declare var DOMPurify;
3declare var droll;2declare var droll;
4declare var Handlebars;3declare var Handlebars;
5declare var hljs;4declare var hljs;
@@ -1365,44 +1364,3 @@ declare namespace moment {
1365declare global {1364declare global {
1366 const moment: typeof moment;1365 const moment: typeof moment;
1367}1366}
1368
1369/**
1370 * Callback data for the `LLM_FUNCTION_TOOL_REGISTER` event type that is triggered when a function tool can be registered.
1371 */
1372interface FunctionToolRegister {
1373 /**
1374 * The type of generation that is being used
1375 */
1376 type?: string;
1377 /**
1378 * Generation data, including messages and sampling parameters
1379 */
1380 data: Record<string, object>;
1381 /**
1382 * Callback to register an LLM function tool.
1383 */
1384 registerFunctionTool: typeof registerFunctionTool;
1385}
1386
1387/**
1388 * Callback data for the `LLM_FUNCTION_TOOL_REGISTER` event type that is triggered when a function tool is registered.
1389 * @param name Name of the function tool to register
1390 * @param description Description of the function tool
1391 * @param params JSON schema for the parameters of the function tool
1392 * @param required Whether the function tool should be forced to be used
1393 */
1394declare function registerFunctionTool(name: string, description: string, params: object, required: boolean): Promise<void>;
1395
1396/**
1397 * Callback data for the `LLM_FUNCTION_TOOL_CALL` event type that is triggered when a function tool is called.
1398 */
1399interface FunctionToolCall {
1400 /**
1401 * Name of the function tool to call
1402 */
1403 name: string;
1404 /**
1405 * JSON object with the parameters to pass to the function tool
1406 */
1407 arguments: string;
1408}
public/index.html+95 -68
@@ -595,17 +595,6 @@
595 </span>595 </span>
596 </div>596 </div>
597 </div>597 </div>
598 <div class="range-block" data-source="cohere">
599 <label for="websearch_toggle" title="Enable Cohere web-search connector" data-i18n="[title]Enable Cohere web-search connector" class="checkbox_label widthFreeExpand">
600 <input id="websearch_toggle" type="checkbox" />
601 <span data-i18n="Web-search">Web-search</span>
602 </label>
603 <div class="toggle-description justifyLeft">
604 <span data-i18n="Allow the model to use the web-search connector.">
605 Allow the model to use the web-search connector.
606 </span>
607 </div>
608 </div>
609 <div class="range-block" data-source="openai,claude,windowai,openrouter,ai21,scale,makersuite,mistralai,custom,cohere,perplexity,groq,01ai">598 <div class="range-block" data-source="openai,claude,windowai,openrouter,ai21,scale,makersuite,mistralai,custom,cohere,perplexity,groq,01ai">
610 <div class="range-block-title" data-i18n="Temperature">599 <div class="range-block-title" data-i18n="Temperature">
611 Temperature600 Temperature
@@ -1310,7 +1299,7 @@
1310 </div>1299 </div>
1311 </div>1300 </div>
13121301
1313 <div data-tg-type="koboldcpp, aphrodite" id="xtc_block" class="wide100p">1302 <div data-tg-type="koboldcpp, aphrodite, tabby, ooba" id="xtc_block" class="wide100p">
1314 <h4 class="wide100p textAlignCenter">1303 <h4 class="wide100p textAlignCenter">
1315 <label data-i18n="Exclude Top Choices (XTC)">Exclude Top Choices (XTC)</label>1304 <label data-i18n="Exclude Top Choices (XTC)">Exclude Top Choices (XTC)</label>
1316 <a href="https://github.com/oobabooga/text-generation-webui/pull/6335" target="_blank">1305 <a href="https://github.com/oobabooga/text-generation-webui/pull/6335" target="_blank">
@@ -1679,6 +1668,10 @@
1679 Ooba only. Determines the order of samplers.1668 Ooba only. Determines the order of samplers.
1680 </div>1669 </div>
1681 <div id="sampler_priority_container" class="prompt_order">1670 <div id="sampler_priority_container" class="prompt_order">
1671 <div data-name="repetition_penalty" draggable="true"><span>Repetition Penalty</span><small></small></div>
1672 <div data-name="presence_penalty" draggable="true"><span>Presence Penalty</span><small></small></div>
1673 <div data-name="frequency_penalty" draggable="true"><span>Frequency Penalty</span><small></small></div>
1674 <div data-name="dry" draggable="true"><span>DRY</span><small></small></div>
1682 <div data-name="temperature" draggable="true"><span>Temperature</span><small></small></div>1675 <div data-name="temperature" draggable="true"><span>Temperature</span><small></small></div>
1683 <div data-name="dynamic_temperature" draggable="true"><span>Dynamic Temperature</span><small></small></div>1676 <div data-name="dynamic_temperature" draggable="true"><span>Dynamic Temperature</span><small></small></div>
1684 <div data-name="quadratic_sampling" draggable="true"><span>Quadratic / Smooth Sampling</span><small></small></div>1677 <div data-name="quadratic_sampling" draggable="true"><span>Quadratic / Smooth Sampling</span><small></small></div>
@@ -1691,6 +1684,9 @@
1691 <div data-name="top_a" draggable="true"><span>Top A</span><small></small></div>1684 <div data-name="top_a" draggable="true"><span>Top A</span><small></small></div>
1692 <div data-name="min_p" draggable="true"><span>Min P</span><small></small></div>1685 <div data-name="min_p" draggable="true"><span>Min P</span><small></small></div>
1693 <div data-name="mirostat" draggable="true"><span>Mirostat</span><small></small></div>1686 <div data-name="mirostat" draggable="true"><span>Mirostat</span><small></small></div>
1687 <div data-name="xtc" draggable="true"><span>XTC</span><small></small></div>
1688 <div data-name="encoder_repetition_penalty" draggable="true"><span>Encoder Repetition Penalty</span><small></small></div>
1689 <div data-name="no_repeat_ngram" draggable="true"><span>No Repeat Ngram</span><small></small></div>
1694 </div>1690 </div>
1695 <div id="textgenerationwebui_default_order" class="menu_button menu_button_icon">1691 <div id="textgenerationwebui_default_order" class="menu_button menu_button_icon">
1696 <span data-i18n="Load default order">Load default order</span>1692 <span data-i18n="Load default order">Load default order</span>
@@ -1702,9 +1698,9 @@
1702 <div class="">1698 <div class="">
1703 <div class="inline-drawer wide100p flexFlowColumn">1699 <div class="inline-drawer wide100p flexFlowColumn">
1704 <div class="inline-drawer-toggle inline-drawer-header">1700 <div class="inline-drawer-toggle inline-drawer-header">
1705 <div class="flex-container alignItemsCenter flexNoGap">1701 <div class="flex-container alignItemsCenter">
1706 <b data-i18n="Character Names Behavior">Character Names Behavior</b>1702 <b data-i18n="Character Names Behavior">Character Names Behavior</b>
1707 <span title="Helps the model to associate messages with characters." data-i18n="[title]Helps the model to associate messages with characters." class="note-link-span fa-solid fa-circle-question"></span>1703 <span title="Helps the model to associate messages with characters." data-i18n="[title]Helps the model to associate messages with characters." class="opacity50p fa-solid fa-circle-info"></span>
1708 <small class="flexBasis100p">(<span id="character_names_display"></span>)</small>1704 <small class="flexBasis100p">(<span id="character_names_display"></span>)</small>
1709 </div>1705 </div>
1710 <div class="fa-solid fa-circle-chevron-down inline-drawer-icon down"></div>1706 <div class="fa-solid fa-circle-chevron-down inline-drawer-icon down"></div>
@@ -1713,25 +1709,22 @@
1713 <label class="checkbox_label flexWrap alignItemsCenter" for="character_names_none">1709 <label class="checkbox_label flexWrap alignItemsCenter" for="character_names_none">
1714 <input type="radio" id="character_names_none" name="character_names" value="-1">1710 <input type="radio" id="character_names_none" name="character_names" value="-1">
1715 <span data-i18n="None">None</span>1711 <span data-i18n="None">None</span>
1716 <i class="right_menu_button fa-solid fa-circle-exclamation" title="Never add character name prefixes. May behave poorly in groups, choose with caution." data-i18n="[title]character_names_none"></i>1712 <small class="flexBasis100p" data-i18n="character_names_none">
1717 <small class="flexBasis100p" data-i18n="Never add character names.">1713 Never add character name prefixes. May behave poorly in groups, choose with caution.
1718 Never add character names.
1719 </small>1714 </small>
1720 </label>1715 </label>
1721 <label class="checkbox_label flexWrap alignItemsCenter" for="character_names_default">1716 <label class="checkbox_label flexWrap alignItemsCenter" for="character_names_default">
1722 <input type="radio" id="character_names_default" name="character_names" value="0">1717 <input type="radio" id="character_names_default" name="character_names" value="0">
1723 <span data-i18n="Default">Default</span>1718 <span data-i18n="Default">Default</span>
1724 <i class="right_menu_button fa-solid fa-circle-exclamation" title="Add prefixes for groups and past personas. Otherwise, make sure you provide names in the prompt." data-i18n="[title]character_names_default"></i>1719 <small class="flexBasis100p" data-i18n="character_names_default">
1725 <small class="flexBasis100p" data-i18n="Don't add character names unless necessary.">1720 Add prefixes for groups and past personas. Otherwise, make sure you provide names in the prompt.
1726 Don't add character names unless necessary.
1727 </small>1721 </small>
1728 </label>1722 </label>
1729 <label class="checkbox_label flexWrap alignItemsCenter" for="character_names_completion">1723 <label class="checkbox_label flexWrap alignItemsCenter" for="character_names_completion">
1730 <input type="radio" id="character_names_completion" name="character_names" value="1">1724 <input type="radio" id="character_names_completion" name="character_names" value="1">
1731 <span data-i18n="Completion Object">Completion Object</span>1725 <span data-i18n="Completion Object">Completion Object</span>
1732 <i class="right_menu_button fa-solid fa-circle-exclamation" title="Restrictions apply: only Latin alphanumerics and underscores. Doesn't work for all sources, notably: Claude, MistralAI, Google." data-i18n="[title]character_names_completion"></i>1726 <small class="flexBasis100p" data-i18n="character_names_completion">
1733 <small class="flexBasis100p" data-i18n="Add character names to completion objects.">1727 Add character names to completion objects. Restrictions apply: only Latin alphanumerics and underscores.
1734 Add character names to completion objects.
1735 </small>1728 </small>
1736 </label>1729 </label>
1737 <label class="checkbox_label flexWrap alignItemsCenter" for="character_names_content">1730 <label class="checkbox_label flexWrap alignItemsCenter" for="character_names_content">
@@ -1747,9 +1740,9 @@
1747 </div>1740 </div>
1748 <div class="inline-drawer wide100p flexFlowColumn marginBot10">1741 <div class="inline-drawer wide100p flexFlowColumn marginBot10">
1749 <div class="inline-drawer-toggle inline-drawer-header">1742 <div class="inline-drawer-toggle inline-drawer-header">
1750 <div class="flex-container alignItemsCenter flexNoGap">1743 <div class="flex-container alignItemsCenter">
1751 <b data-i18n="Continue Postfix">Continue Postfix</b>1744 <b data-i18n="Continue Postfix">Continue Postfix</b>
1752 <span data-i18n="[title]The next chunk of the continued message will be appended using this as a separator." title="The next chunk of the continued message will be appended using this as a separator." class="note-link-span fa-solid fa-circle-question"></span>1745 <span data-i18n="[title]The next chunk of the continued message will be appended using this as a separator." title="The next chunk of the continued message will be appended using this as a separator." class="opacity50p fa-solid fa-circle-info"></span>
1753 <small class="flexBasis100p">(<span id="continue_postfix_display"></span>)</small>1746 <small class="flexBasis100p">(<span id="continue_postfix_display"></span>)</small>
1754 </div>1747 </div>
1755 <div class="fa-solid fa-circle-chevron-down inline-drawer-icon down"></div>1748 <div class="fa-solid fa-circle-chevron-down inline-drawer-icon down"></div>
@@ -1869,6 +1862,10 @@
1869 </div>1862 </div>
1870 <textarea id="claude_assistant_impersonation" class="text_pole textarea_compact autoSetHeight" name="assistant_impersonation" rows="2" data-i18n="[placeholder]Start Claude's answer with..." placeholder="Start Claude's answer with..."></textarea>1863 <textarea id="claude_assistant_impersonation" class="text_pole textarea_compact autoSetHeight" name="assistant_impersonation" rows="2" data-i18n="[placeholder]Start Claude's answer with..." placeholder="Start Claude's answer with..."></textarea>
1871 </div>1864 </div>
1865 <div id="claude_function_prefill_warning">
1866 <i class="fa-solid fa-circle-info"></i>
1867 <span>Prefills won't work when function calling is enabled and any tools are registered.</span>
1868 </div>
1872 <label for="claude_use_sysprompt" class="checkbox_label widthFreeExpand">1869 <label for="claude_use_sysprompt" class="checkbox_label widthFreeExpand">
1873 <input id="claude_use_sysprompt" type="checkbox" />1870 <input id="claude_use_sysprompt" type="checkbox" />
1874 <span data-i18n="Use system prompt (Claude 2.1+ only)">1871 <span data-i18n="Use system prompt (Claude 2.1+ only)">
@@ -2446,15 +2443,16 @@
2446 <h4>2443 <h4>
2447 <span data-i18n="Tabby Model">Tabby Model</span>2444 <span data-i18n="Tabby Model">Tabby Model</span>
2448 </h4>2445 </h4>
2449 <b>
2450 EXPERIMENTAL FEATURE. USE AT YOUR OWN RISK. DON'T ASK FOR SUPPORT ON THIS.
2451 </b>
2452 <select id="tabby_model">2446 <select id="tabby_model">
2453 <option value="" data-i18n="-- Connect to the API --">2447 <option value="" data-i18n="-- Connect to the API --">
2454 -- Connect to the API --2448 -- Connect to the API --
2455 </option>2449 </option>
2456 </select>2450 </select>
2457 <div class="marginTopBot5">2451 <div class="marginTopBot5">
2452 <i class="fa-solid fa-flask"></i>
2453 <span>Experimental feature. Use at your own risk.</span>
2454 </div>
2455 <div class="marginTopBot5">
2458 <small>2456 <small>
2459 <i class="fa-solid fa-lightbulb"></i>2457 <i class="fa-solid fa-lightbulb"></i>
2460 &nbsp;2458 &nbsp;
@@ -2828,22 +2826,10 @@
2828 <span data-i18n="Allow fallback providers">Allow fallback providers</span>2826 <span data-i18n="Allow fallback providers">Allow fallback providers</span>
2829 </label>2827 </label>
2830 </div>2828 </div>
2831 <div class="marginTopBot5">2829 <small class="marginTopBot5">
2832 <label for="openrouter_force_instruct" class="checkbox_label">2830 <i class="fa-solid fa-lightbulb"></i>
2833 <input id="openrouter_force_instruct" type="checkbox" />2831 <span>To use instruct formatting, switch to OpenRouter under Text Completion API.</span>
2834 <span class="flex-container alignItemsBaseline" title="This option is outdated and will be removed in the future. To use instruct formatting, please switch to OpenRouter under Text Completion API instead." data-i18n="[title]openrouter_force_instruct">2832 </small>
2835 <i class="fa-solid fa-circle-exclamation neutral_warning"></i>
2836 <b data-i18n="LEGACY">LEGACY</b>
2837 </span>
2838 <span data-i18n="Force Instruct Mode formatting">Force Instruct Mode formatting</span>
2839 </label>
2840 <div class="toggle-description justifyLeft wide100p">
2841 <span data-i18n="Force_Instruct_Mode_formatting_Description">
2842 If both Instruct Mode and this are enabled, the prompt will be formatted by SillyTavern using the current
2843 advanced formatting settings (except instruct System Prompt). If disabled, the prompt will be formatted by OpenRouter.
2844 </span>
2845 </div>
2846 </div>
2847 </form>2833 </form>
2848 <form id="scale_form" data-source="scale" action="javascript:void(null);" method="post" enctype="multipart/form-data">2834 <form id="scale_form" data-source="scale" action="javascript:void(null);" method="post" enctype="multipart/form-data">
2849 <div id="normal_scale_form">2835 <div id="normal_scale_form">
@@ -2925,10 +2911,14 @@
2925 <option value="gemini-1.5-pro-exp-0827">Gemini 1.5 Pro Experiment 2024-08-27</option>2911 <option value="gemini-1.5-pro-exp-0827">Gemini 1.5 Pro Experiment 2024-08-27</option>
2926 <option value="gemini-1.5-pro-latest">Gemini 1.5 Pro [latest]</option>2912 <option value="gemini-1.5-pro-latest">Gemini 1.5 Pro [latest]</option>
2927 <option value="gemini-1.5-pro-001">Gemini 1.5 Pro [001]</option>2913 <option value="gemini-1.5-pro-001">Gemini 1.5 Pro [001]</option>
2914 <option value="gemini-1.5-pro-002">Gemini 1.5 Pro [002]</option>
2915 <option value="gemini-1.5-flash-8b">Gemini 1.5 Flash 8B</option>
2928 <option value="gemini-1.5-flash-exp-0827">Gemini 1.5 Flash Experiment 2024-08-27</option>2916 <option value="gemini-1.5-flash-exp-0827">Gemini 1.5 Flash Experiment 2024-08-27</option>
2929 <option value="gemini-1.5-flash-8b-exp-0827">Gemini 1.5 Flash 8B Experiment 2024-08-27</option>2917 <option value="gemini-1.5-flash-8b-exp-0827">Gemini 1.5 Flash 8B Experiment 2024-08-27</option>
2918 <option value="gemini-1.5-flash-8b-exp-0924">Gemini 1.5 Flash 8B Experiment 2024-09-24</option>
2930 <option value="gemini-1.5-flash-latest">Gemini 1.5 Flash [latest]</option>2919 <option value="gemini-1.5-flash-latest">Gemini 1.5 Flash [latest]</option>
2931 <option value="gemini-1.5-flash-001">Gemini 1.5 Flash [001]</option>2920 <option value="gemini-1.5-flash-001">Gemini 1.5 Flash [001]</option>
2921 <option value="gemini-1.5-flash-002">Gemini 1.5 Flash [002]</option>
2932 <option value="gemini-1.0-pro-latest">Gemini 1.0 Pro [latest]</option>2922 <option value="gemini-1.0-pro-latest">Gemini 1.0 Pro [latest]</option>
2933 <option value="gemini-1.0-pro-001">Gemini 1.0 Pro (Tuning) [001]</option>2923 <option value="gemini-1.0-pro-001">Gemini 1.0 Pro (Tuning) [001]</option>
2934 <option value="gemini-1.0-pro-vision-latest">Gemini 1.0 Pro Vision [latest]</option>2924 <option value="gemini-1.0-pro-vision-latest">Gemini 1.0 Pro Vision [latest]</option>
@@ -2989,16 +2979,31 @@
2989 </div>2979 </div>
2990 <h4 data-i18n="Groq Model">Groq Model</h4>2980 <h4 data-i18n="Groq Model">Groq Model</h4>
2991 <select id="model_groq_select">2981 <select id="model_groq_select">
2992 <option value="llama-3.1-405b-reasoning">llama-3.1-405b-reasoning</option>2982 <optgroup label="Llama 3.2">
2993 <option value="llama-3.1-70b-versatile">llama-3.1-70b-versatile</option>2983 <option value="llama-3.2-1b-preview">llama-3.2-1b-preview</option>
2984 <option value="llama-3.2-3b-preview">llama-3.2-3b-preview</option>
2985 <option value="llama-3.2-11b-vision-preview">llama-3.2-11b-vision-preview</option>
2986 <option value="llama-3.2-90b-vision-preview">llama-3.2-90b-vision-preview</option>
2987 </optgroup>
2988 <optgroup label="Llama 3.1">
2994 <option value="llama-3.1-8b-instant">llama-3.1-8b-instant</option>2989 <option value="llama-3.1-8b-instant">llama-3.1-8b-instant</option>
2995 <option value="llama3-groq-70b-8192-tool-use-preview">llama3-groq-70b-8192-tool-use-preview</option>2990 <option value="llama-3.1-70b-versatile">llama-3.1-70b-versatile</option>
2991 <option value="llama-3.1-405b-reasoning">llama-3.1-405b-reasoning</option>
2992 </optgroup>
2993 <optgroup label="Llama 3">
2996 <option value="llama3-groq-8b-8192-tool-use-preview">llama3-groq-8b-8192-tool-use-preview</option>2994 <option value="llama3-groq-8b-8192-tool-use-preview">llama3-groq-8b-8192-tool-use-preview</option>
2995 <option value="llama3-groq-70b-8192-tool-use-preview">llama3-groq-70b-8192-tool-use-preview</option>
2997 <option value="llama3-8b-8192">llama3-8b-8192</option>2996 <option value="llama3-8b-8192">llama3-8b-8192</option>
2998 <option value="llama3-70b-8192">llama3-70b-8192</option>2997 <option value="llama3-70b-8192">llama3-70b-8192</option>
2999 <option value="mixtral-8x7b-32768">mixtral-8x7b-32768</option>2998 </optgroup>
2999 <optgroup label="Gemma">
3000 <option value="gemma-7b-it">gemma-7b-it</option>3000 <option value="gemma-7b-it">gemma-7b-it</option>
3001 <option value="gemma2-9b-it">gemma2-9b-it</option>3001 <option value="gemma2-9b-it">gemma2-9b-it</option>
3002 </optgroup>
3003 <optgroup label="Other">
3004 <option value="mixtral-8x7b-32768">mixtral-8x7b-32768</option>
3005 <option value="llava-v1.5-7b-4096-preview">llava-v1.5-7b-4096-preview</option>
3006 </optgroup>
3002 </select>3007 </select>
3003 </div>3008 </div>
3004 <div id="perplexity_form" data-source="perplexity">3009 <div id="perplexity_form" data-source="perplexity">
@@ -3117,7 +3122,8 @@
3117 <h4 data-i18n="Prompt Post-Processing">Prompt Post-Processing</h4>3122 <h4 data-i18n="Prompt Post-Processing">Prompt Post-Processing</h4>
3118 <select id="custom_prompt_post_processing" class="text_pole" title="Applies additional processing to the prompt before sending it to the API." data-i18n="[title]Applies additional processing to the prompt before sending it to the API.">3123 <select id="custom_prompt_post_processing" class="text_pole" title="Applies additional processing to the prompt before sending it to the API." data-i18n="[title]Applies additional processing to the prompt before sending it to the API.">
3119 <option data-i18n="prompt_post_processing_none" value="">None</option>3124 <option data-i18n="prompt_post_processing_none" value="">None</option>
3120 <option value="claude">Claude</option>3125 <option value="merge">Merge consecutive roles</option>
3126 <option value="strict">Strict (user first, alternating roles)</option>
3121 </select>3127 </select>
3122 </form>3128 </form>
3123 <div id="01ai_form" data-source="01ai">3129 <div id="01ai_form" data-source="01ai">
@@ -3192,9 +3198,10 @@
3192 </h4>3198 </h4>
3193 <div class="flex-container" title="Select your current Context Template" data-i18n="[title]Select your current Context Template">3199 <div class="flex-container" title="Select your current Context Template" data-i18n="[title]Select your current Context Template">
3194 <select id="context_presets" data-preset-manager-for="context" class="flex1 text_pole"></select>3200 <select id="context_presets" data-preset-manager-for="context" class="flex1 text_pole"></select>
3195 <div class="flex-container justifyCenter">3201 <div class="flex-container justifyCenter gap3px">
3196 <input type="file" hidden data-preset-manager-file="context" accept=".json, .settings">3202 <input type="file" hidden data-preset-manager-file="context" accept=".json, .settings">
3197 <i data-preset-manager-update="context" class="menu_button fa-solid fa-save" title="Update current template" data-i18n="[title]Update current template"></i>3203 <i data-preset-manager-update="context" class="menu_button fa-solid fa-save" title="Update current template" data-i18n="[title]Update current template"></i>
3204 <i data-preset-manager-rename="context" class="menu_button fa-pencil fa-solid" title="Rename current template" data-i18n="[title]Rename current template"></i>
3198 <i data-preset-manager-new="context" class="menu_button fa-solid fa-file-circle-plus" title="Save template as" data-i18n="[title]Save template as"></i>3205 <i data-preset-manager-new="context" class="menu_button fa-solid fa-file-circle-plus" title="Save template as" data-i18n="[title]Save template as"></i>
3199 <i data-preset-manager-import="context" class="displayNone menu_button fa-solid fa-file-import" title="Import template" data-i18n="[title]Import template"></i>3206 <i data-preset-manager-import="context" class="displayNone menu_button fa-solid fa-file-import" title="Import template" data-i18n="[title]Import template"></i>
3200 <i data-preset-manager-export="context" class="displayNone menu_button fa-solid fa-file-export" title="Export template" data-i18n="[title]Export template"></i>3207 <i data-preset-manager-export="context" class="displayNone menu_button fa-solid fa-file-export" title="Export template" data-i18n="[title]Export template"></i>
@@ -3254,6 +3261,7 @@
3254 <label class="checkbox_label" for="trim_spaces">3261 <label class="checkbox_label" for="trim_spaces">
3255 <input id="trim_spaces" type="checkbox" />3262 <input id="trim_spaces" type="checkbox" />
3256 <small data-i18n="Trim spaces">Trim spaces</small>3263 <small data-i18n="Trim spaces">Trim spaces</small>
3264 <i class="fa-sm fa-solid fa-exclamation-triangle warning" title="Disabling is not recommended." data-i18n="[title]Disabling is not recommended."></i>
3257 </label>3265 </label>
3258 <label class="checkbox_label" for="trim_sentences_checkbox">3266 <label class="checkbox_label" for="trim_sentences_checkbox">
3259 <input id="trim_sentences_checkbox" type="checkbox" />3267 <input id="trim_sentences_checkbox" type="checkbox" />
@@ -3279,7 +3287,6 @@
3279 </div>3287 </div>
3280 </div>3288 </div>
3281 <div id="InstructSettingsColumn" class="flex-container flexNoGap flexFlowColumn flex1">3289 <div id="InstructSettingsColumn" class="flex-container flexNoGap flexFlowColumn flex1">
3282 <div id="instructSettingsBlock">
3283 <h4 class="standoutHeader title_restorable justifySpaceBetween">3290 <h4 class="standoutHeader title_restorable justifySpaceBetween">
3284 <div class="flex-container">3291 <div class="flex-container">
3285 <span data-i18n="Instruct Template">Instruct Template</span>3292 <span data-i18n="Instruct Template">Instruct Template</span>
@@ -3292,18 +3299,21 @@
3292 <input id="instruct_bind_to_context" type="checkbox" style="display:none;" />3299 <input id="instruct_bind_to_context" type="checkbox" style="display:none;" />
3293 <small><i class="fa-solid fa-link menu_button margin0"></i></small>3300 <small><i class="fa-solid fa-link menu_button margin0"></i></small>
3294 </label>3301 </label>
3295 <label for="instruct_enabled" class="checkbox_label flex1" title="Enable Instruct Mode" data-i18n="[title]instruct_enabled">3302 <label id="instruct_enabled_label"for="instruct_enabled" class="checkbox_label flex1" title="Enable Instruct Mode" data-i18n="[title]instruct_enabled">
3296 <input id="instruct_enabled" type="checkbox" style="display:none;" />3303 <input id="instruct_enabled" type="checkbox" style="display:none;" />
3297 <small><i class="fa-solid fa-power-off menu_button margin0"></i></small>3304 <small><i class="fa-solid fa-power-off menu_button margin0"></i></small>
3298 </label>3305 </label>
3299 </div>3306 </div>
3300 </h4>3307 </h4>
3308 <div id="instructSettingsBlock">
3309
33013310
3302 <div class="flex-container" title="Select your current Instruct Template" data-i18n="[title]Select your current Instruct Template">3311 <div class="flex-container" title="Select your current Instruct Template" data-i18n="[title]Select your current Instruct Template">
3303 <select id="instruct_presets" data-preset-manager-for="instruct" class="flex1 text_pole"></select>3312 <select id="instruct_presets" data-preset-manager-for="instruct" class="flex1 text_pole"></select>
3304 <div class="flex-container margin0 justifyCenter">3313 <div class="flex-container margin0 justifyCenter gap3px">
3305 <input type="file" hidden data-preset-manager-file="instruct" accept=".json, .settings">3314 <input type="file" hidden data-preset-manager-file="instruct" accept=".json, .settings">
3306 <i data-preset-manager-update="instruct" class="menu_button fa-solid fa-save" title="Update current template" data-i18n="[title]Update current template"></i>3315 <i data-preset-manager-update="instruct" class="menu_button fa-solid fa-save" title="Update current template" data-i18n="[title]Update current template"></i>
3316 <i data-preset-manager-rename="instruct" class="menu_button fa-pencil fa-solid" title="Rename current template" data-i18n="[title]Rename current template"></i>
3307 <i data-preset-manager-new="instruct" class="menu_button fa-solid fa-file-circle-plus" title="Save template as" data-i18n="[title]Save template as"></i>3317 <i data-preset-manager-new="instruct" class="menu_button fa-solid fa-file-circle-plus" title="Save template as" data-i18n="[title]Save template as"></i>
3308 <i data-preset-manager-import="instruct" class="displayNone menu_button fa-solid fa-file-import" title="Import template" data-i18n="[title]Import template"></i>3318 <i data-preset-manager-import="instruct" class="displayNone menu_button fa-solid fa-file-import" title="Import template" data-i18n="[title]Import template"></i>
3309 <i data-preset-manager-export="instruct" class="displayNone menu_button fa-solid fa-file-export" title="Export template" data-i18n="[title]Export template"></i>3319 <i data-preset-manager-export="instruct" class="displayNone menu_button fa-solid fa-file-export" title="Export template" data-i18n="[title]Export template"></i>
@@ -3314,7 +3324,7 @@
3314 <label>3324 <label>
3315 <small>3325 <small>
3316 <span data-i18n="Activation Regex">Activation Regex</span>3326 <span data-i18n="Activation Regex">Activation Regex</span>
3317 <span class="fa-solid fa-circle-question" title="When connecting to an API or choosing a model, automatically activate this Instruct Template if the model name matches the provided regular expression."></span>3327 <span class="fa-solid fa-circle-question" data-i18n="[title]instruct_template_activation_regex_desc" title="When connecting to an API or choosing a model, automatically activate this Instruct Template if the model name matches the provided regular expression."></span>
3318 </small>3328 </small>
3319 </label>3329 </label>
3320 <div>3330 <div>
@@ -3355,7 +3365,7 @@
3355 </h4>3365 </h4>
3356 <!-- We keep one auto-open so the user would know what is going on in the picked template -->3366 <!-- We keep one auto-open so the user would know what is going on in the picked template -->
3357 <details open>3367 <details open>
3358 <summary>User Message Sequences</summary>3368 <summary data-i18n="User Message Sequences">User Message Sequences</summary>
3359 <div class="flex-container">3369 <div class="flex-container">
3360 <div class="flexAuto" title="Inserted before a User message and as a last prompt line when impersonating." data-i18n="[title]Inserted before a User message and as a last prompt line when impersonating.">3370 <div class="flexAuto" title="Inserted before a User message and as a last prompt line when impersonating." data-i18n="[title]Inserted before a User message and as a last prompt line when impersonating.">
3361 <small data-i18n="User Prefix">User Message Prefix</small>3371 <small data-i18n="User Prefix">User Message Prefix</small>
@@ -3368,7 +3378,7 @@
3368 </div>3378 </div>
3369 </details>3379 </details>
3370 <details open>3380 <details open>
3371 <summary>Assistant Message Sequences</summary>3381 <summary data-i18n="Assistant Message Sequences">Assistant Message Sequences</summary>
3372 <div class="flex-container">3382 <div class="flex-container">
3373 <div class="flexAuto" title="Inserted before an Assistant message and as a last prompt line when generating an AI reply." data-i18n="[title]Inserted before an Assistant message and as a last prompt line when generating an AI reply.">3383 <div class="flexAuto" title="Inserted before an Assistant message and as a last prompt line when generating an AI reply." data-i18n="[title]Inserted before an Assistant message and as a last prompt line when generating an AI reply.">
3374 <small data-i18n="Assistant Prefix">Assistant Message Prefix</small>3384 <small data-i18n="Assistant Prefix">Assistant Message Prefix</small>
@@ -3381,7 +3391,7 @@
3381 </div>3391 </div>
3382 </details>3392 </details>
3383 <details>3393 <details>
3384 <summary>System Message Sequences</summary>3394 <summary data-i18n="System Message Sequences">System Message Sequences</summary>
3385 <div class="flex-container">3395 <div class="flex-container">
3386 <div class="flexAuto" id="instruct_system_sequence_block" title="Inserted before a System (added by slash commands or extensions) message." data-i18n="[title]Inserted before a System (added by slash commands or extensions) message.">3396 <div class="flexAuto" id="instruct_system_sequence_block" title="Inserted before a System (added by slash commands or extensions) message." data-i18n="[title]Inserted before a System (added by slash commands or extensions) message.">
3387 <small data-i18n="System Prefix">System Message Prefix</small>3397 <small data-i18n="System Prefix">System Message Prefix</small>
@@ -3400,7 +3410,7 @@
3400 </div>3410 </div>
3401 </details>3411 </details>
3402 <details>3412 <details>
3403 <summary>System Prompt Sequences</summary>3413 <summary data-i18n="System Prompt Sequences">System Prompt Sequences</summary>
3404 <div class="flex-container">3414 <div class="flex-container">
3405 <div class="flexAuto" title="Inserted before a System prompt." data-i18n="[title]Inserted before a System prompt.">3415 <div class="flexAuto" title="Inserted before a System prompt." data-i18n="[title]Inserted before a System prompt.">
3406 <label for="instruct_system_sequence_prefix">3416 <label for="instruct_system_sequence_prefix">
@@ -3462,7 +3472,6 @@
3462 </div>3472 </div>
3463 </div>3473 </div>
3464 <div id="SystemPromptColumn" class="flex-container flexNoGap flexFlowColumn flex1">3474 <div id="SystemPromptColumn" class="flex-container flexNoGap flexFlowColumn flex1">
3465 <div id="SystemPromptBlock">
3466 <h4 class="standoutHeader title_restorable justifySpaceBetween">3475 <h4 class="standoutHeader title_restorable justifySpaceBetween">
3467 <div class="flex-container">3476 <div class="flex-container">
3468 <span data-i18n="System Prompt">System Prompt</span>3477 <span data-i18n="System Prompt">System Prompt</span>
@@ -3471,18 +3480,21 @@
3471 </a>3480 </a>
3472 </div>3481 </div>
3473 <div class="flex-container">3482 <div class="flex-container">
3474 <label for="sysprompt_enabled" class="checkbox_label flex1" title="Enable System Prompt" data-i18n="[title]sysprompt_enabled">3483 <label id="sysprompt_enabled_label" for="sysprompt_enabled" class="checkbox_label flex1" title="Enable System Prompt" data-i18n="[title]sysprompt_enabled">
3475 <input id="sysprompt_enabled" type="checkbox" style="display:none;" />3484 <input id="sysprompt_enabled" type="checkbox" style="display:none;" />
3476 <small><i class="fa-solid fa-power-off menu_button margin0"></i></small>3485 <small><i class="fa-solid fa-power-off menu_button margin0"></i></small>
3477 </label>3486 </label>
3478 </div>3487 </div>
3479 </h4>3488 </h4>
3489 <div id="SystemPromptBlock">
3490
34803491
3481 <div class="flex-container" title="Select your current System Prompt" data-i18n="[title]Select your current System Prompt">3492 <div class="flex-container" title="Select your current System Prompt" data-i18n="[title]Select your current System Prompt">
3482 <select id="sysprompt_select" data-preset-manager-for="sysprompt" class="flex1 text_pole"></select>3493 <select id="sysprompt_select" data-preset-manager-for="sysprompt" class="flex1 text_pole"></select>
3483 <div class="flex-container margin0 justifyCenter">3494 <div class="flex-container margin0 justifyCenter gap3px">
3484 <input type="file" hidden data-preset-manager-file="sysprompt" accept=".json, .settings">3495 <input type="file" hidden data-preset-manager-file="sysprompt" accept=".json, .settings">
3485 <i data-preset-manager-update="sysprompt" class="menu_button fa-solid fa-save" title="Update current prompt" data-i18n="[title]Update current prompt"></i>3496 <i data-preset-manager-update="sysprompt" class="menu_button fa-solid fa-save" title="Update current prompt" data-i18n="[title]Update current prompt"></i>
3497 <i data-preset-manager-rename="sysprompt" class="menu_button fa-pencil fa-solid" title="Rename current prompt" data-i18n="[title]Rename current prompt"></i>
3486 <i data-preset-manager-new="sysprompt" class="menu_button fa-solid fa-file-circle-plus" title="Save prompt as" data-i18n="[title]Save prompt as"></i>3498 <i data-preset-manager-new="sysprompt" class="menu_button fa-solid fa-file-circle-plus" title="Save prompt as" data-i18n="[title]Save prompt as"></i>
3487 <i data-preset-manager-import="sysprompt" class="displayNone menu_button fa-solid fa-file-import" title="Import template" data-i18n="[title]Import template"></i>3499 <i data-preset-manager-import="sysprompt" class="displayNone menu_button fa-solid fa-file-import" title="Import template" data-i18n="[title]Import template"></i>
3488 <i data-preset-manager-export="sysprompt" class="displayNone menu_button fa-solid fa-file-export" title="Export template" data-i18n="[title]Export template"></i>3500 <i data-preset-manager-export="sysprompt" class="displayNone menu_button fa-solid fa-file-export" title="Export template" data-i18n="[title]Export template"></i>
@@ -4042,6 +4054,10 @@
4042 <input id="compact_input_area" type="checkbox" />4054 <input id="compact_input_area" type="checkbox" />
4043 <small data-i18n="Compact Input Area (Mobile)">Compact Input Area</small><i class="fa-solid fa-mobile-screen-button"></i>4055 <small data-i18n="Compact Input Area (Mobile)">Compact Input Area</small><i class="fa-solid fa-mobile-screen-button"></i>
4044 </label>4056 </label>
4057 <label for="show_swipe_num_all_messages" class="checkbox_label" title="Display swipe numbers for all messages, not just the last." data-i18n="[title]Display swipe numbers for all messages, not just the last.">
4058 <input id="show_swipe_num_all_messages" type="checkbox" />
4059 <small data-i18n="Swipe # for All Messages">Swipe # for All Messages</small><i class="fa-solid fa-mobile-screen-button"></i>
4060 </label>
4045 <label for="hotswapEnabled" class="checkbox_label" title="In the Character Management panel, show quick selection buttons for favorited characters." data-i18n="[title]In the Character Management panel, show quick selection buttons for favorited characters">4061 <label for="hotswapEnabled" class="checkbox_label" title="In the Character Management panel, show quick selection buttons for favorited characters." data-i18n="[title]In the Character Management panel, show quick selection buttons for favorited characters">
4046 <input id="hotswapEnabled" type="checkbox" />4062 <input id="hotswapEnabled" type="checkbox" />
4047 <small data-i18n="Characters Hotswap">Characters Hotswap</small>4063 <small data-i18n="Characters Hotswap">Characters Hotswap</small>
@@ -4164,7 +4180,7 @@
4164 <input id="enable_auto_select_input" type="checkbox" />4180 <input id="enable_auto_select_input" type="checkbox" />
4165 <small data-i18n="Auto-select Input Text">Auto-select Input Text</small>4181 <small data-i18n="Auto-select Input Text">Auto-select Input Text</small>
4166 </label>4182 </label>
4167 <label class="checkbox_label alignItemsCenter" for="enable_md_hotkeys" title="Enable hotkeys for inserting markdown format characters in certain text input boxes. See '/help hotkeys'.">4183 <label class="checkbox_label alignItemsCenter" for="enable_md_hotkeys" data-i18n="[title]markdown_hotkeys_desc" title="Enable hotkeys for inserting markdown format characters in certain text input boxes. See '/help hotkeys'.">
4168 <input id="enable_md_hotkeys" type="checkbox" />4184 <input id="enable_md_hotkeys" type="checkbox" />
4169 <small>4185 <small>
4170 <span data-i18n="Markdown Hotkeys">Markdown Hotkeys</span>4186 <span data-i18n="Markdown Hotkeys">Markdown Hotkeys</span>
@@ -5476,7 +5492,7 @@
5476 <textarea class="text_pole" rows="1" name="comment" data-i18n="[placeholder]Entry Title/Memo" placeholder="Entry Title/Memo"></textarea>5492 <textarea class="text_pole" rows="1" name="comment" data-i18n="[placeholder]Entry Title/Memo" placeholder="Entry Title/Memo"></textarea>
5477 </div>5493 </div>
5478 <!-- <span class="world_entry_form_position_value"></span> -->5494 <!-- <span class="world_entry_form_position_value"></span> -->
5479 <select data-i18n="[title]WI Entry Status:🔵 Constant🟢 Normal🔗 Vectorized❌ Disabled" title="WI Entry Status:&#13;🔵 Constant&#13;🟢 Normal&#13;🔗 Vectorized&#13;❌ Disabled" name="entryStateSelector" class="text_pole widthNatural margin0">5495 <select data-i18n="[title]WI Entry Status:🔵 Constant🟢 Normal🔗 Vectorized" title="WI Entry Status:&#13;🔵 Constant&#13;🟢 Normal&#13;🔗 Vectorized" name="entryStateSelector" class="text_pole widthNatural margin0">
5480 <option value="constant" title="Constant" data-i18n="[title]WI_Entry_Status_Constant">🔵</option>5496 <option value="constant" title="Constant" data-i18n="[title]WI_Entry_Status_Constant">🔵</option>
5481 <option value="normal" title="Normal" data-i18n="[title]WI_Entry_Status_Normal">🟢</option>5497 <option value="normal" title="Normal" data-i18n="[title]WI_Entry_Status_Normal">🟢</option>
5482 <option value="vectorized" title="Vectorized" data-i18n="[title]WI_Entry_Status_Vectorized">🔗</option>5498 <option value="vectorized" title="Vectorized" data-i18n="[title]WI_Entry_Status_Vectorized">🔗</option>
@@ -5970,7 +5986,8 @@
5970 </div>5986 </div>
5971 <div class="mes_bias"></div>5987 <div class="mes_bias"></div>
5972 </div>5988 </div>
5973 <div class="swipe_right fa-solid fa-chevron-right" style="display: none;">5989 <div class="flex-container swipeRightBlock flexFlowColumn flexNoGap">
5990 <div class="swipe_right fa-solid fa-chevron-right" style="display: none;"></div>
5974 <div class="swipes-counter"></div>5991 <div class="swipes-counter"></div>
5975 </div>5992 </div>
5976 </div>5993 </div>
@@ -6129,7 +6146,10 @@
6129 <div class="alternate_grettings flexFlowColumn flex-container">6146 <div class="alternate_grettings flexFlowColumn flex-container">
6130 <div class="title_restorable">6147 <div class="title_restorable">
6131 <h3><span data-i18n="Alternate Greetings" class="mdhotkey_location">Alternate Greetings</span></h3>6148 <h3><span data-i18n="Alternate Greetings" class="mdhotkey_location">Alternate Greetings</span></h3>
6132 <div title="Add" class="menu_button fa-solid fa-plus add_alternate_greeting" data-i18n="[title]Add"></div>6149 <div class="menu_button menu_button_icon add_alternate_greeting">
6150 <i class="fa-solid fa-plus"></i>
6151 <span data-i18n="Add">Add</span>
6152 </div>
6133 </div>6153 </div>
6134 <small class="justifyLeft" data-i18n="Alternate_Greetings_desc">6154 <small class="justifyLeft" data-i18n="Alternate_Greetings_desc">
6135 These will be displayed as swipes on the first message when starting a new chat.6155 These will be displayed as swipes on the first message when starting a new chat.
@@ -6145,11 +6165,18 @@
6145 </div>6165 </div>
6146 <div id="alternate_greeting_form_template" class="template_element">6166 <div id="alternate_greeting_form_template" class="template_element">
6147 <div class="alternate_greeting">6167 <div class="alternate_greeting">
6168 <details open>
6169 <summary>
6148 <div class="title_restorable">6170 <div class="title_restorable">
6149 <strong><span data-i18n="Alternate Greeting #">Alternate Greeting #</span><span class="greeting_index"></span></strong>6171 <strong><span data-i18n="Alternate Greeting #">Alternate Greeting #</span><span class="greeting_index"></span></strong>
6150 <div class="menu_button fa-solid fa-trash-alt delete_alternate_greeting"></div>6172 <div class="menu_button menu_button_icon delete_alternate_greeting">
6173 <i class="fa-solid fa-trash-alt"></i>
6174 <span data-i18n="Delete">Delete</span>
6175 </div>
6151 </div>6176 </div>
6152 <textarea name="alternate_greetings" data-i18n="[placeholder](This will be the first message from the character that starts every chat)" placeholder="(This will be the first message from the character that starts every chat)" class="text_pole textarea_compact alternate_greeting_text mdHotkeys" value="" autocomplete="off" rows="16"></textarea>6177 </summary>
6178 <textarea name="alternate_greetings" data-i18n="[placeholder](This will be the first message from the character that starts every chat)" placeholder="(This will be the first message from the character that starts every chat)" class="text_pole textarea_compact alternate_greeting_text mdHotkeys" value="" autocomplete="off" rows="12"></textarea>
6179 </details>
6153 </div>6180 </div>
6154 </div>6181 </div>
61556182
@@ -6637,7 +6664,7 @@
6637 <script src="lib/popper.js"></script>6664 <script src="lib/popper.js"></script>
6638 <script src="lib/purify.min.js"></script>6665 <script src="lib/purify.min.js"></script>
6639 <script src="lib/highlight.min.js"></script>6666 <script src="lib/highlight.min.js"></script>
6640 <script src="lib/moment.min.js"></script>6667 <script src="lib/moment-with-locales.min.js"></script>
6641 <script src="lib/cropper.min.js"></script>6668 <script src="lib/cropper.min.js"></script>
6642 <script src="lib/jquery-cropper.min.js"></script>6669 <script src="lib/jquery-cropper.min.js"></script>
6643 <script src="lib/toastr.min.js"></script>6670 <script src="lib/toastr.min.js"></script>
public/jsconfig.json+5 -5
@@ -8,16 +8,16 @@
8 "allowSyntheticDefaultImports": true8 "allowSyntheticDefaultImports": true
9 },9 },
10 "exclude": [10 "exclude": [
11 "node_modules"11 "**/node_modules/**",
12 "**/dist/**",
13 "**/.git/**",
14 "lib/**",
15 "**/*.min.js"
12 ],16 ],
13 "typeAcquisition": {17 "typeAcquisition": {
14 "include": [18 "include": [
15 "jquery",
16 "@popperjs/core",19 "@popperjs/core",
17 "toastr",
18 "showdown",20 "showdown",
19 "dompurify",
20 "moment",
21 "seedrandom",21 "seedrandom",
22 "showdown-katex",22 "showdown-katex",
23 "droll",23 "droll",
public/lib/dialog-polyfill.css+37 -0
@@ -0,0 +1,37 @@
1.poly_dialog {
2 position: absolute;
3 left: 0; right: 0;
4 width: -moz-fit-content;
5 width: -webkit-fit-content;
6 width: fit-content;
7 height: -moz-fit-content;
8 height: -webkit-fit-content;
9 height: fit-content;
10 margin: auto;
11 border: solid;
12 padding: 1em;
13 background: white;
14 color: black;
15 display: block;
16}
17
18.poly_dialog:not([open]) {
19 display: none;
20}
21
22.poly_dialog + .backdrop {
23 position: fixed;
24 top: 0; right: 0; bottom: 0; left: 0;
25 background: rgba(0,0,0,0.1);
26}
27
28._poly_dialog_overlay {
29 position: fixed;
30 top: 0; right: 0; bottom: 0; left: 0;
31}
32
33.poly_dialog.fixed {
34 position: fixed;
35 top: 50%;
36 transform: translate(0, -50%);
37}
\ No newline at end of file37 \ No newline at end of file
public/lib/dialog-polyfill.esm.js+858 -0
@@ -0,0 +1,858 @@
1// nb. This is for IE10 and lower _only_.
2var supportCustomEvent = window.CustomEvent;
3if (!supportCustomEvent || typeof supportCustomEvent === 'object') {
4 supportCustomEvent = function CustomEvent(event, x) {
5 x = x || {};
6 var ev = document.createEvent('CustomEvent');
7 ev.initCustomEvent(event, !!x.bubbles, !!x.cancelable, x.detail || null);
8 return ev;
9 };
10 supportCustomEvent.prototype = window.Event.prototype;
11}
12
13/**
14 * Dispatches the passed event to both an "on<type>" handler as well as via the
15 * normal dispatch operation. Does not bubble.
16 *
17 * @param {!EventTarget} target
18 * @param {!Event} event
19 * @return {boolean}
20 */
21function safeDispatchEvent(target, event) {
22 var check = 'on' + event.type.toLowerCase();
23 if (typeof target[check] === 'function') {
24 target[check](event);
25 }
26 return target.dispatchEvent(event);
27}
28
29/**
30 * @param {Element} el to check for stacking context
31 * @return {boolean} whether this el or its parents creates a stacking context
32 */
33function createsStackingContext(el) {
34 while (el && el !== document.body) {
35 var s = window.getComputedStyle(el);
36 var invalid = function(k, ok) {
37 return !(s[k] === undefined || s[k] === ok);
38 };
39
40 if (s.opacity < 1 ||
41 invalid('zIndex', 'auto') ||
42 invalid('transform', 'none') ||
43 invalid('mixBlendMode', 'normal') ||
44 invalid('filter', 'none') ||
45 invalid('perspective', 'none') ||
46 s['isolation'] === 'isolate' ||
47 s.position === 'fixed' ||
48 s.webkitOverflowScrolling === 'touch') {
49 return true;
50 }
51 el = el.parentElement;
52 }
53 return false;
54}
55
56/**
57 * Finds the nearest <dialog> from the passed element.
58 *
59 * @param {Element} el to search from
60 * @return {HTMLDialogElement} dialog found
61 */
62function findNearestDialog(el) {
63 while (el) {
64 if (el.localName === 'dialog') {
65 return /** @type {HTMLDialogElement} */ (el);
66 }
67 if (el.parentElement) {
68 el = el.parentElement;
69 } else if (el.parentNode) {
70 el = el.parentNode.host;
71 } else {
72 el = null;
73 }
74 }
75 return null;
76}
77
78/**
79 * Blur the specified element, as long as it's not the HTML body element.
80 * This works around an IE9/10 bug - blurring the body causes Windows to
81 * blur the whole application.
82 *
83 * @param {Element} el to blur
84 */
85function safeBlur(el) {
86 // Find the actual focused element when the active element is inside a shadow root
87 while (el && el.shadowRoot && el.shadowRoot.activeElement) {
88 el = el.shadowRoot.activeElement;
89 }
90
91 if (el && el.blur && el !== document.body) {
92 el.blur();
93 }
94}
95
96/**
97 * @param {!NodeList} nodeList to search
98 * @param {Node} node to find
99 * @return {boolean} whether node is inside nodeList
100 */
101function inNodeList(nodeList, node) {
102 for (var i = 0; i < nodeList.length; ++i) {
103 if (nodeList[i] === node) {
104 return true;
105 }
106 }
107 return false;
108}
109
110/**
111 * @param {HTMLFormElement} el to check
112 * @return {boolean} whether this form has method="dialog"
113 */
114function isFormMethodDialog(el) {
115 if (!el || !el.hasAttribute('method')) {
116 return false;
117 }
118 return el.getAttribute('method').toLowerCase() === 'dialog';
119}
120
121/**
122 * @param {!DocumentFragment|!Element} hostElement
123 * @return {?Element}
124 */
125function findFocusableElementWithin(hostElement) {
126 // Note that this is 'any focusable area'. This list is probably not exhaustive, but the
127 // alternative involves stepping through and trying to focus everything.
128 var opts = ['button', 'input', 'keygen', 'select', 'textarea'];
129 var query = opts.map(function(el) {
130 return el + ':not([disabled])';
131 });
132 // TODO(samthor): tabindex values that are not numeric are not focusable.
133 query.push('[tabindex]:not([disabled]):not([tabindex=""])'); // tabindex != "", not disabled
134 var target = hostElement.querySelector(query.join(', '));
135
136 if (!target && 'attachShadow' in Element.prototype) {
137 // If we haven't found a focusable target, see if the host element contains an element
138 // which has a shadowRoot.
139 // Recursively search for the first focusable item in shadow roots.
140 var elems = hostElement.querySelectorAll('*');
141 for (var i = 0; i < elems.length; i++) {
142 if (elems[i].tagName && elems[i].shadowRoot) {
143 target = findFocusableElementWithin(elems[i].shadowRoot);
144 if (target) {
145 break;
146 }
147 }
148 }
149 }
150 return target;
151}
152
153/**
154 * Determines if an element is attached to the DOM.
155 * @param {Element} element to check
156 * @return {boolean} whether the element is in DOM
157 */
158function isConnected(element) {
159 return element.isConnected || document.body.contains(element);
160}
161
162/**
163 * @param {!Event} event
164 * @return {?Element}
165 */
166function findFormSubmitter(event) {
167 if (event.submitter) {
168 return event.submitter;
169 }
170
171 var form = event.target;
172 if (!(form instanceof HTMLFormElement)) {
173 return null;
174 }
175
176 var submitter = dialogPolyfill.formSubmitter;
177 if (!submitter) {
178 var target = event.target;
179 var root = ('getRootNode' in target && target.getRootNode() || document);
180 submitter = root.activeElement;
181 }
182
183 if (!submitter || submitter.form !== form) {
184 return null;
185 }
186 return submitter;
187}
188
189/**
190 * @param {!Event} event
191 */
192function maybeHandleSubmit(event) {
193 if (event.defaultPrevented) {
194 return;
195 }
196 var form = /** @type {!HTMLFormElement} */ (event.target);
197
198 // We'd have a value if we clicked on an imagemap.
199 var value = dialogPolyfill.imagemapUseValue;
200 var submitter = findFormSubmitter(event);
201 if (value === null && submitter) {
202 value = submitter.value;
203 }
204
205 // There should always be a dialog as this handler is added specifically on them, but check just
206 // in case.
207 var dialog = findNearestDialog(form);
208 if (!dialog) {
209 return;
210 }
211
212 // Prefer formmethod on the button.
213 var formmethod = submitter && submitter.getAttribute('formmethod') || form.getAttribute('method');
214 if (formmethod !== 'dialog') {
215 return;
216 }
217 event.preventDefault();
218
219 if (value != null) {
220 // nb. we explicitly check against null/undefined
221 dialog.close(value);
222 } else {
223 dialog.close();
224 }
225}
226
227/**
228 * @param {!HTMLDialogElement} dialog to upgrade
229 * @constructor
230 */
231function dialogPolyfillInfo(dialog) {
232 this.dialog_ = dialog;
233 this.replacedStyleTop_ = false;
234 this.openAsModal_ = false;
235
236 // Set a11y role. Browsers that support dialog implicitly know this already.
237 if (!dialog.hasAttribute('role')) {
238 dialog.setAttribute('role', 'dialog');
239 }
240
241 dialog.show = this.show.bind(this);
242 dialog.showModal = this.showModal.bind(this);
243 dialog.close = this.close.bind(this);
244
245 dialog.addEventListener('submit', maybeHandleSubmit, false);
246
247 if (!('returnValue' in dialog)) {
248 dialog.returnValue = '';
249 }
250
251 if ('MutationObserver' in window) {
252 var mo = new MutationObserver(this.maybeHideModal.bind(this));
253 mo.observe(dialog, {attributes: true, attributeFilter: ['open']});
254 } else {
255 // IE10 and below support. Note that DOMNodeRemoved etc fire _before_ removal. They also
256 // seem to fire even if the element was removed as part of a parent removal. Use the removed
257 // events to force downgrade (useful if removed/immediately added).
258 var removed = false;
259 var cb = function() {
260 removed ? this.downgradeModal() : this.maybeHideModal();
261 removed = false;
262 }.bind(this);
263 var timeout;
264 var delayModel = function(ev) {
265 if (ev.target !== dialog) { return; } // not for a child element
266 var cand = 'DOMNodeRemoved';
267 removed |= (ev.type.substr(0, cand.length) === cand);
268 window.clearTimeout(timeout);
269 timeout = window.setTimeout(cb, 0);
270 };
271 ['DOMAttrModified', 'DOMNodeRemoved', 'DOMNodeRemovedFromDocument'].forEach(function(name) {
272 dialog.addEventListener(name, delayModel);
273 });
274 }
275 // Note that the DOM is observed inside DialogManager while any dialog
276 // is being displayed as a modal, to catch modal removal from the DOM.
277
278 Object.defineProperty(dialog, 'open', {
279 set: this.setOpen.bind(this),
280 get: dialog.hasAttribute.bind(dialog, 'open')
281 });
282
283 this.backdrop_ = document.createElement('div');
284 this.backdrop_.className = 'backdrop';
285 this.backdrop_.addEventListener('mouseup' , this.backdropMouseEvent_.bind(this));
286 this.backdrop_.addEventListener('mousedown', this.backdropMouseEvent_.bind(this));
287 this.backdrop_.addEventListener('click' , this.backdropMouseEvent_.bind(this));
288}
289
290dialogPolyfillInfo.prototype = /** @type {HTMLDialogElement.prototype} */ ({
291
292 get dialog() {
293 return this.dialog_;
294 },
295
296 /**
297 * Maybe remove this dialog from the modal top layer. This is called when
298 * a modal dialog may no longer be tenable, e.g., when the dialog is no
299 * longer open or is no longer part of the DOM.
300 */
301 maybeHideModal: function() {
302 if (this.dialog_.hasAttribute('open') && isConnected(this.dialog_)) { return; }
303 this.downgradeModal();
304 },
305
306 /**
307 * Remove this dialog from the modal top layer, leaving it as a non-modal.
308 */
309 downgradeModal: function() {
310 if (!this.openAsModal_) { return; }
311 this.openAsModal_ = false;
312 this.dialog_.style.zIndex = '';
313
314 // This won't match the native <dialog> exactly because if the user set top on a centered
315 // polyfill dialog, that top gets thrown away when the dialog is closed. Not sure it's
316 // possible to polyfill this perfectly.
317 if (this.replacedStyleTop_) {
318 this.dialog_.style.top = '';
319 this.replacedStyleTop_ = false;
320 }
321
322 // Clear the backdrop and remove from the manager.
323 this.backdrop_.parentNode && this.backdrop_.parentNode.removeChild(this.backdrop_);
324 dialogPolyfill.dm.removeDialog(this);
325 },
326
327 /**
328 * @param {boolean} value whether to open or close this dialog
329 */
330 setOpen: function(value) {
331 if (value) {
332 this.dialog_.hasAttribute('open') || this.dialog_.setAttribute('open', '');
333 } else {
334 this.dialog_.removeAttribute('open');
335 this.maybeHideModal(); // nb. redundant with MutationObserver
336 }
337 },
338
339 /**
340 * Handles mouse events ('mouseup', 'mousedown', 'click') on the fake .backdrop element, redirecting them as if
341 * they were on the dialog itself.
342 *
343 * @param {!Event} e to redirect
344 */
345 backdropMouseEvent_: function(e) {
346 if (!this.dialog_.hasAttribute('tabindex')) {
347 // Clicking on the backdrop should move the implicit cursor, even if dialog cannot be
348 // focused. Create a fake thing to focus on. If the backdrop was _before_ the dialog, this
349 // would not be needed - clicks would move the implicit cursor there.
350 var fake = document.createElement('div');
351 this.dialog_.insertBefore(fake, this.dialog_.firstChild);
352 fake.tabIndex = -1;
353 fake.focus();
354 this.dialog_.removeChild(fake);
355 } else {
356 this.dialog_.focus();
357 }
358
359 var redirectedEvent = document.createEvent('MouseEvents');
360 redirectedEvent.initMouseEvent(e.type, e.bubbles, e.cancelable, window,
361 e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey,
362 e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget);
363 this.dialog_.dispatchEvent(redirectedEvent);
364 e.stopPropagation();
365 },
366
367 /**
368 * Focuses on the first focusable element within the dialog. This will always blur the current
369 * focus, even if nothing within the dialog is found.
370 */
371 focus_: function() {
372 // Find element with `autofocus` attribute, or fall back to the first form/tabindex control.
373 var target = this.dialog_.querySelector('[autofocus]:not([disabled])');
374 if (!target && this.dialog_.tabIndex >= 0) {
375 target = this.dialog_;
376 }
377 if (!target) {
378 target = findFocusableElementWithin(this.dialog_);
379 }
380 safeBlur(document.activeElement);
381 target && target.focus();
382 },
383
384 /**
385 * Sets the zIndex for the backdrop and dialog.
386 *
387 * @param {number} dialogZ
388 * @param {number} backdropZ
389 */
390 updateZIndex: function(dialogZ, backdropZ) {
391 if (dialogZ < backdropZ) {
392 throw new Error('dialogZ should never be < backdropZ');
393 }
394 this.dialog_.style.zIndex = dialogZ;
395 this.backdrop_.style.zIndex = backdropZ;
396 },
397
398 /**
399 * Shows the dialog. If the dialog is already open, this does nothing.
400 */
401 show: function() {
402 if (!this.dialog_.open) {
403 this.setOpen(true);
404 this.focus_();
405 }
406 },
407
408 /**
409 * Show this dialog modally.
410 */
411 showModal: function() {
412 if (this.dialog_.hasAttribute('open')) {
413 throw new Error('Failed to execute \'showModal\' on dialog: The element is already open, and therefore cannot be opened modally.');
414 }
415 if (!isConnected(this.dialog_)) {
416 throw new Error('Failed to execute \'showModal\' on dialog: The element is not in a Document.');
417 }
418 if (!dialogPolyfill.dm.pushDialog(this)) {
419 throw new Error('Failed to execute \'showModal\' on dialog: There are too many open modal dialogs.');
420 }
421
422 if (createsStackingContext(this.dialog_.parentElement)) {
423 console.warn('A dialog is being shown inside a stacking context. ' +
424 'This may cause it to be unusable. For more information, see this link: ' +
425 'https://github.com/GoogleChrome/dialog-polyfill/#stacking-context');
426 }
427
428 this.setOpen(true);
429 this.openAsModal_ = true;
430
431 // Optionally center vertically, relative to the current viewport.
432 if (dialogPolyfill.needsCentering(this.dialog_)) {
433 dialogPolyfill.reposition(this.dialog_);
434 this.replacedStyleTop_ = true;
435 } else {
436 this.replacedStyleTop_ = false;
437 }
438
439 // Insert backdrop.
440 this.dialog_.parentNode.insertBefore(this.backdrop_, this.dialog_.nextSibling);
441
442 // Focus on whatever inside the dialog.
443 this.focus_();
444 },
445
446 /**
447 * Closes this HTMLDialogElement. This is optional vs clearing the open
448 * attribute, however this fires a 'close' event.
449 *
450 * @param {string=} opt_returnValue to use as the returnValue
451 */
452 close: function(opt_returnValue) {
453 if (!this.dialog_.hasAttribute('open')) {
454 throw new Error('Failed to execute \'close\' on dialog: The element does not have an \'open\' attribute, and therefore cannot be closed.');
455 }
456 this.setOpen(false);
457
458 // Leave returnValue untouched in case it was set directly on the element
459 if (opt_returnValue !== undefined) {
460 this.dialog_.returnValue = opt_returnValue;
461 }
462
463 // Triggering "close" event for any attached listeners on the <dialog>.
464 var closeEvent = new supportCustomEvent('close', {
465 bubbles: false,
466 cancelable: false
467 });
468 safeDispatchEvent(this.dialog_, closeEvent);
469 }
470
471});
472
473var dialogPolyfill = {};
474
475dialogPolyfill.reposition = function(element) {
476 var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
477 var topValue = scrollTop + (window.innerHeight - element.offsetHeight) / 2;
478 element.style.top = Math.max(scrollTop, topValue) + 'px';
479};
480
481dialogPolyfill.isInlinePositionSetByStylesheet = function(element) {
482 for (var i = 0; i < document.styleSheets.length; ++i) {
483 var styleSheet = document.styleSheets[i];
484 var cssRules = null;
485 // Some browsers throw on cssRules.
486 try {
487 cssRules = styleSheet.cssRules;
488 } catch (e) {}
489 if (!cssRules) { continue; }
490 for (var j = 0; j < cssRules.length; ++j) {
491 var rule = cssRules[j];
492 var selectedNodes = null;
493 // Ignore errors on invalid selector texts.
494 try {
495 selectedNodes = document.querySelectorAll(rule.selectorText);
496 } catch(e) {}
497 if (!selectedNodes || !inNodeList(selectedNodes, element)) {
498 continue;
499 }
500 var cssTop = rule.style.getPropertyValue('top');
501 var cssBottom = rule.style.getPropertyValue('bottom');
502 if ((cssTop && cssTop !== 'auto') || (cssBottom && cssBottom !== 'auto')) {
503 return true;
504 }
505 }
506 }
507 return false;
508};
509
510dialogPolyfill.needsCentering = function(dialog) {
511 var computedStyle = window.getComputedStyle(dialog);
512 if (computedStyle.position !== 'absolute') {
513 return false;
514 }
515
516 // We must determine whether the top/bottom specified value is non-auto. In
517 // WebKit/Blink, checking computedStyle.top == 'auto' is sufficient, but
518 // Firefox returns the used value. So we do this crazy thing instead: check
519 // the inline style and then go through CSS rules.
520 if ((dialog.style.top !== 'auto' && dialog.style.top !== '') ||
521 (dialog.style.bottom !== 'auto' && dialog.style.bottom !== '')) {
522 return false;
523 }
524 return !dialogPolyfill.isInlinePositionSetByStylesheet(dialog);
525};
526
527/**
528 * @param {!Element} element to force upgrade
529 */
530dialogPolyfill.forceRegisterDialog = function(element) {
531 if (window.HTMLDialogElement || element.showModal) {
532 console.warn('This browser already supports <dialog>, the polyfill ' +
533 'may not work correctly', element);
534 }
535 if (element.localName !== 'dialog') {
536 throw new Error('Failed to register dialog: The element is not a dialog.');
537 }
538 new dialogPolyfillInfo(/** @type {!HTMLDialogElement} */ (element));
539};
540
541/**
542 * @param {!Element} element to upgrade, if necessary
543 */
544dialogPolyfill.registerDialog = function(element) {
545 if (!element.showModal) {
546 dialogPolyfill.forceRegisterDialog(element);
547 }
548};
549
550/**
551 * @constructor
552 */
553dialogPolyfill.DialogManager = function() {
554 /** @type {!Array<!dialogPolyfillInfo>} */
555 this.pendingDialogStack = [];
556
557 var checkDOM = this.checkDOM_.bind(this);
558
559 // The overlay is used to simulate how a modal dialog blocks the document.
560 // The blocking dialog is positioned on top of the overlay, and the rest of
561 // the dialogs on the pending dialog stack are positioned below it. In the
562 // actual implementation, the modal dialog stacking is controlled by the
563 // top layer, where z-index has no effect.
564 this.overlay = document.createElement('div');
565 this.overlay.className = '_poly_dialog_overlay';
566 this.overlay.addEventListener('click', function(e) {
567 this.forwardTab_ = undefined;
568 e.stopPropagation();
569 checkDOM([]); // sanity-check DOM
570 }.bind(this));
571
572 this.handleKey_ = this.handleKey_.bind(this);
573 this.handleFocus_ = this.handleFocus_.bind(this);
574
575 this.zIndexLow_ = 100000;
576 this.zIndexHigh_ = 100000 + 150;
577
578 this.forwardTab_ = undefined;
579
580 if ('MutationObserver' in window) {
581 this.mo_ = new MutationObserver(function(records) {
582 var removed = [];
583 records.forEach(function(rec) {
584 for (var i = 0, c; c = rec.removedNodes[i]; ++i) {
585 if (!(c instanceof Element)) {
586 continue;
587 } else if (c.localName === 'dialog') {
588 removed.push(c);
589 }
590 removed = removed.concat(c.querySelectorAll('dialog'));
591 }
592 });
593 removed.length && checkDOM(removed);
594 });
595 }
596};
597
598/**
599 * Called on the first modal dialog being shown. Adds the overlay and related
600 * handlers.
601 */
602dialogPolyfill.DialogManager.prototype.blockDocument = function() {
603 document.documentElement.addEventListener('focus', this.handleFocus_, true);
604 document.addEventListener('keydown', this.handleKey_);
605 this.mo_ && this.mo_.observe(document, {childList: true, subtree: true});
606};
607
608/**
609 * Called on the first modal dialog being removed, i.e., when no more modal
610 * dialogs are visible.
611 */
612dialogPolyfill.DialogManager.prototype.unblockDocument = function() {
613 document.documentElement.removeEventListener('focus', this.handleFocus_, true);
614 document.removeEventListener('keydown', this.handleKey_);
615 this.mo_ && this.mo_.disconnect();
616};
617
618/**
619 * Updates the stacking of all known dialogs.
620 */
621dialogPolyfill.DialogManager.prototype.updateStacking = function() {
622 var zIndex = this.zIndexHigh_;
623
624 for (var i = 0, dpi; dpi = this.pendingDialogStack[i]; ++i) {
625 dpi.updateZIndex(--zIndex, --zIndex);
626 if (i === 0) {
627 this.overlay.style.zIndex = --zIndex;
628 }
629 }
630
631 // Make the overlay a sibling of the dialog itself.
632 var last = this.pendingDialogStack[0];
633 if (last) {
634 var p = last.dialog.parentNode || document.body;
635 p.appendChild(this.overlay);
636 } else if (this.overlay.parentNode) {
637 this.overlay.parentNode.removeChild(this.overlay);
638 }
639};
640
641/**
642 * @param {Element} candidate to check if contained or is the top-most modal dialog
643 * @return {boolean} whether candidate is contained in top dialog
644 */
645dialogPolyfill.DialogManager.prototype.containedByTopDialog_ = function(candidate) {
646 while (candidate = findNearestDialog(candidate)) {
647 for (var i = 0, dpi; dpi = this.pendingDialogStack[i]; ++i) {
648 if (dpi.dialog === candidate) {
649 return i === 0; // only valid if top-most
650 }
651 }
652 candidate = candidate.parentElement;
653 }
654 return false;
655};
656
657dialogPolyfill.DialogManager.prototype.handleFocus_ = function(event) {
658 var target = event.composedPath ? event.composedPath()[0] : event.target;
659
660 if (this.containedByTopDialog_(target)) { return; }
661
662 if (document.activeElement === document.documentElement) { return; }
663
664 event.preventDefault();
665 event.stopPropagation();
666 safeBlur(/** @type {Element} */ (target));
667
668 if (this.forwardTab_ === undefined) { return; } // move focus only from a tab key
669
670 var dpi = this.pendingDialogStack[0];
671 var dialog = dpi.dialog;
672 var position = dialog.compareDocumentPosition(target);
673 if (position & Node.DOCUMENT_POSITION_PRECEDING) {
674 if (this.forwardTab_) {
675 // forward
676 dpi.focus_();
677 } else if (target !== document.documentElement) {
678 // backwards if we're not already focused on <html>
679 document.documentElement.focus();
680 }
681 }
682
683 return false;
684};
685
686dialogPolyfill.DialogManager.prototype.handleKey_ = function(event) {
687 this.forwardTab_ = undefined;
688 if (event.keyCode === 27) {
689 event.preventDefault();
690 event.stopPropagation();
691 var cancelEvent = new supportCustomEvent('cancel', {
692 bubbles: false,
693 cancelable: true
694 });
695 var dpi = this.pendingDialogStack[0];
696 if (dpi && safeDispatchEvent(dpi.dialog, cancelEvent)) {
697 dpi.dialog.close();
698 }
699 } else if (event.keyCode === 9) {
700 this.forwardTab_ = !event.shiftKey;
701 }
702};
703
704/**
705 * Finds and downgrades any known modal dialogs that are no longer displayed. Dialogs that are
706 * removed and immediately readded don't stay modal, they become normal.
707 *
708 * @param {!Array<!HTMLDialogElement>} removed that have definitely been removed
709 */
710dialogPolyfill.DialogManager.prototype.checkDOM_ = function(removed) {
711 // This operates on a clone because it may cause it to change. Each change also calls
712 // updateStacking, which only actually needs to happen once. But who removes many modal dialogs
713 // at a time?!
714 var clone = this.pendingDialogStack.slice();
715 clone.forEach(function(dpi) {
716 if (removed.indexOf(dpi.dialog) !== -1) {
717 dpi.downgradeModal();
718 } else {
719 dpi.maybeHideModal();
720 }
721 });
722};
723
724/**
725 * @param {!dialogPolyfillInfo} dpi
726 * @return {boolean} whether the dialog was allowed
727 */
728dialogPolyfill.DialogManager.prototype.pushDialog = function(dpi) {
729 var allowed = (this.zIndexHigh_ - this.zIndexLow_) / 2 - 1;
730 if (this.pendingDialogStack.length >= allowed) {
731 return false;
732 }
733 if (this.pendingDialogStack.unshift(dpi) === 1) {
734 this.blockDocument();
735 }
736 this.updateStacking();
737 return true;
738};
739
740/**
741 * @param {!dialogPolyfillInfo} dpi
742 */
743dialogPolyfill.DialogManager.prototype.removeDialog = function(dpi) {
744 var index = this.pendingDialogStack.indexOf(dpi);
745 if (index === -1) { return; }
746
747 this.pendingDialogStack.splice(index, 1);
748 if (this.pendingDialogStack.length === 0) {
749 this.unblockDocument();
750 }
751 this.updateStacking();
752};
753
754dialogPolyfill.dm = new dialogPolyfill.DialogManager();
755dialogPolyfill.formSubmitter = null;
756dialogPolyfill.imagemapUseValue = null;
757
758/**
759 * Installs global handlers, such as click listers and native method overrides. These are needed
760 * even if a no dialog is registered, as they deal with <form method="dialog">.
761 */
762if (window.HTMLDialogElement === undefined) {
763
764 /**
765 * If HTMLFormElement translates method="DIALOG" into 'get', then replace the descriptor with
766 * one that returns the correct value.
767 */
768 var testForm = document.createElement('form');
769 testForm.setAttribute('method', 'dialog');
770 if (testForm.method !== 'dialog') {
771 var methodDescriptor = Object.getOwnPropertyDescriptor(HTMLFormElement.prototype, 'method');
772 if (methodDescriptor) {
773 // nb. Some older iOS and older PhantomJS fail to return the descriptor. Don't do anything
774 // and don't bother to update the element.
775 var realGet = methodDescriptor.get;
776 methodDescriptor.get = function() {
777 if (isFormMethodDialog(this)) {
778 return 'dialog';
779 }
780 return realGet.call(this);
781 };
782 var realSet = methodDescriptor.set;
783 /** @this {HTMLElement} */
784 methodDescriptor.set = function(v) {
785 if (typeof v === 'string' && v.toLowerCase() === 'dialog') {
786 return this.setAttribute('method', v);
787 }
788 return realSet.call(this, v);
789 };
790 Object.defineProperty(HTMLFormElement.prototype, 'method', methodDescriptor);
791 }
792 }
793
794 /**
795 * Global 'click' handler, to capture the <input type="submit"> or <button> element which has
796 * submitted a <form method="dialog">. Needed as Safari and others don't report this inside
797 * document.activeElement.
798 */
799 document.addEventListener('click', function(ev) {
800 dialogPolyfill.formSubmitter = null;
801 dialogPolyfill.imagemapUseValue = null;
802 if (ev.defaultPrevented) { return; } // e.g. a submit which prevents default submission
803
804 var target = /** @type {Element} */ (ev.target);
805 if ('composedPath' in ev) {
806 var path = ev.composedPath();
807 target = path.shift() || target;
808 }
809 if (!target || !isFormMethodDialog(target.form)) { return; }
810
811 var valid = (target.type === 'submit' && ['button', 'input'].indexOf(target.localName) > -1);
812 if (!valid) {
813 if (!(target.localName === 'input' && target.type === 'image')) { return; }
814 // this is a <input type="image">, which can submit forms
815 dialogPolyfill.imagemapUseValue = ev.offsetX + ',' + ev.offsetY;
816 }
817
818 var dialog = findNearestDialog(target);
819 if (!dialog) { return; }
820
821 dialogPolyfill.formSubmitter = target;
822
823 }, false);
824
825 /**
826 * Global 'submit' handler. This handles submits of `method="dialog"` which are invalid, i.e.,
827 * outside a dialog. They get prevented.
828 */
829 document.addEventListener('submit', function(ev) {
830 var form = ev.target;
831 var dialog = findNearestDialog(form);
832 if (dialog) {
833 return; // ignore, handle there
834 }
835
836 var submitter = findFormSubmitter(ev);
837 var formmethod = submitter && submitter.getAttribute('formmethod') || form.getAttribute('method');
838 if (formmethod === 'dialog') {
839 ev.preventDefault();
840 }
841 });
842
843 /**
844 * Replace the native HTMLFormElement.submit() method, as it won't fire the
845 * submit event and give us a chance to respond.
846 */
847 var nativeFormSubmit = HTMLFormElement.prototype.submit;
848 var replacementFormSubmit = function () {
849 if (!isFormMethodDialog(this)) {
850 return nativeFormSubmit.call(this);
851 }
852 var dialog = findNearestDialog(this);
853 dialog && dialog.close();
854 };
855 HTMLFormElement.prototype.submit = replacementFormSubmit;
856}
857
858export default dialogPolyfill;
public/lib/moment-with-locales.min.js+2 -0
@@ -0,0 +1,2 @@
1!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):e.moment=a()}(this,function(){"use strict";var E;function c(){return E.apply(null,arguments)}function F(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function z(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function l(e,a){return Object.prototype.hasOwnProperty.call(e,a)}function N(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;for(var a in e)if(l(e,a))return;return 1}function L(e){return void 0===e}function J(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function R(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function C(e,a){for(var t=[],s=e.length,n=0;n<s;++n)t.push(a(e[n],n));return t}function I(e,a){for(var t in a)l(a,t)&&(e[t]=a[t]);return l(a,"toString")&&(e.toString=a.toString),l(a,"valueOf")&&(e.valueOf=a.valueOf),e}function U(e,a,t,s){return Na(e,a,t,s,!0).utc()}function Y(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function G(e){var a,t,s=e._d&&!isNaN(e._d.getTime());return s&&(a=Y(e),t=q.call(a.parsedDateParts,function(e){return null!=e}),s=a.overflow<0&&!a.empty&&!a.invalidEra&&!a.invalidMonth&&!a.invalidWeekday&&!a.weekdayMismatch&&!a.nullInput&&!a.invalidFormat&&!a.userInvalidated&&(!a.meridiem||a.meridiem&&t),e._strict)&&(s=s&&0===a.charsLeftOver&&0===a.unusedTokens.length&&void 0===a.bigHour),null!=Object.isFrozen&&Object.isFrozen(e)?s:(e._isValid=s,e._isValid)}function V(e){var a=U(NaN);return null!=e?I(Y(a),e):Y(a).userInvalidated=!0,a}var q=Array.prototype.some||function(e){for(var a=Object(this),t=a.length>>>0,s=0;s<t;s++)if(s in a&&e.call(this,a[s],s,a))return!0;return!1},B=c.momentProperties=[],K=!1;function Z(e,a){var t,s,n,r=B.length;if(L(a._isAMomentObject)||(e._isAMomentObject=a._isAMomentObject),L(a._i)||(e._i=a._i),L(a._f)||(e._f=a._f),L(a._l)||(e._l=a._l),L(a._strict)||(e._strict=a._strict),L(a._tzm)||(e._tzm=a._tzm),L(a._isUTC)||(e._isUTC=a._isUTC),L(a._offset)||(e._offset=a._offset),L(a._pf)||(e._pf=Y(a)),L(a._locale)||(e._locale=a._locale),0<r)for(t=0;t<r;t++)L(n=a[s=B[t]])||(e[s]=n);return e}function $(e){Z(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===K&&(K=!0,c.updateOffset(this),K=!1)}function Q(e){return e instanceof $||null!=e&&null!=e._isAMomentObject}function X(e){!1===c.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function e(r,d){var _=!0;return I(function(){if(null!=c.deprecationHandler&&c.deprecationHandler(null,r),_){for(var e,a,t=[],s=arguments.length,n=0;n<s;n++){if(e="","object"==typeof arguments[n]){for(a in e+="\n["+n+"] ",arguments[0])l(arguments[0],a)&&(e+=a+": "+arguments[0][a]+", ");e=e.slice(0,-2)}else e=arguments[n];t.push(e)}X(r+"\nArguments: "+Array.prototype.slice.call(t).join("")+"\n"+(new Error).stack),_=!1}return d.apply(this,arguments)},d)}var ee={};function ae(e,a){null!=c.deprecationHandler&&c.deprecationHandler(e,a),ee[e]||(X(a),ee[e]=!0)}function te(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function se(e,a){var t,s=I({},e);for(t in a)l(a,t)&&(z(e[t])&&z(a[t])?(s[t]={},I(s[t],e[t]),I(s[t],a[t])):null!=a[t]?s[t]=a[t]:delete s[t]);for(t in e)l(e,t)&&!l(a,t)&&z(e[t])&&(s[t]=I({},s[t]));return s}function ne(e){null!=e&&this.set(e)}c.suppressDeprecationWarnings=!1,c.deprecationHandler=null;var re=Object.keys||function(e){var a,t=[];for(a in e)l(e,a)&&t.push(a);return t};function de(e,a,t){var s=""+Math.abs(e);return(0<=e?t?"+":"":"-")+Math.pow(10,Math.max(0,a-s.length)).toString().substr(1)+s}var _e=/(\[[^\[]*\])|(\\)?([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,ie=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,oe={},me={};function s(e,a,t,s){var n="string"==typeof s?function(){return this[s]()}:s;e&&(me[e]=n),a&&(me[a[0]]=function(){return de(n.apply(this,arguments),a[1],a[2])}),t&&(me[t]=function(){return this.localeData().ordinal(n.apply(this,arguments),e)})}function ue(e,a){return e.isValid()?(a=le(a,e.localeData()),oe[a]=oe[a]||function(s){for(var e,n=s.match(_e),a=0,r=n.length;a<r;a++)me[n[a]]?n[a]=me[n[a]]:n[a]=(e=n[a]).match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"");return function(e){for(var a="",t=0;t<r;t++)a+=te(n[t])?n[t].call(e,s):n[t];return a}}(a),oe[a](e)):e.localeData().invalidDate()}function le(e,a){var t=5;function s(e){return a.longDateFormat(e)||e}for(ie.lastIndex=0;0<=t&&ie.test(e);)e=e.replace(ie,s),ie.lastIndex=0,--t;return e}var Me={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 d(e){return"string"==typeof e?Me[e]||Me[e.toLowerCase()]:void 0}function he(e){var a,t,s={};for(t in e)l(e,t)&&(a=d(t))&&(s[a]=e[t]);return s}var ce={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};var Le=/\d/,a=/\d\d/,Ye=/\d{3}/,t=/\d{4}/,n=/[+-]?\d{6}/,r=/\d\d?/,ye=/\d\d\d\d?/,_=/\d\d\d\d\d\d?/,fe=/\d{1,3}/,i=/\d{1,4}/,o=/[+-]?\d{1,6}/,ke=/\d+/,pe=/[+-]?\d+/,De=/Z|[+-]\d\d:?\d\d/gi,Te=/Z|[+-]\d\d(?::?\d\d)?/gi,m=/[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,u=/^[1-9]\d?/,M=/^([1-9]\d|\d)/;function h(e,t,s){be[e]=te(t)?t:function(e,a){return e&&s?s:t}}function ge(e,a){return l(be,e)?be[e](a._strict,a._locale):new RegExp(we(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,a,t,s,n){return a||t||s||n})))}function we(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function y(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function f(e){var e=+e,a=0;return a=0!=e&&isFinite(e)?y(e):a}var be={},He={};function k(e,t){var a,s,n=t;for("string"==typeof e&&(e=[e]),J(t)&&(n=function(e,a){a[t]=f(e)}),s=e.length,a=0;a<s;a++)He[e[a]]=n}function Se(e,n){k(e,function(e,a,t,s){t._w=t._w||{},n(e,t._w,t,s)})}function ve(e){return e%4==0&&e%100!=0||e%400==0}var p=0,je=1,xe=2,D=3,Pe=4,Oe=5,We=6,Ae=7,Ee=8;function Fe(e){return ve(e)?366:365}s("Y",0,0,function(){var e=this.year();return e<=9999?de(e,4):"+"+e}),s(0,["YY",2],0,function(){return this.year()%100}),s(0,["YYYY",4],0,"year"),s(0,["YYYYY",5],0,"year"),s(0,["YYYYYY",6,!0],0,"year"),h("Y",pe),h("YY",r,a),h("YYYY",i,t),h("YYYYY",o,n),h("YYYYYY",o,n),k(["YYYYY","YYYYYY"],p),k("YYYY",function(e,a){a[p]=2===e.length?c.parseTwoDigitYear(e):f(e)}),k("YY",function(e,a){a[p]=c.parseTwoDigitYear(e)}),k("Y",function(e,a){a[p]=parseInt(e,10)}),c.parseTwoDigitYear=function(e){return f(e)+(68<f(e)?1900:2e3)};var T,ze=Ne("FullYear",!0);function Ne(a,t){return function(e){return null!=e?(Re(this,a,e),c.updateOffset(this,t),this):Je(this,a)}}function Je(e,a){if(!e.isValid())return NaN;var t=e._d,s=e._isUTC;switch(a){case"Milliseconds":return s?t.getUTCMilliseconds():t.getMilliseconds();case"Seconds":return s?t.getUTCSeconds():t.getSeconds();case"Minutes":return s?t.getUTCMinutes():t.getMinutes();case"Hours":return s?t.getUTCHours():t.getHours();case"Date":return s?t.getUTCDate():t.getDate();case"Day":return s?t.getUTCDay():t.getDay();case"Month":return s?t.getUTCMonth():t.getMonth();case"FullYear":return s?t.getUTCFullYear():t.getFullYear();default:return NaN}}function Re(e,a,t){var s,n,r;if(e.isValid()&&!isNaN(t)){switch(s=e._d,n=e._isUTC,a){case"Milliseconds":return n?s.setUTCMilliseconds(t):s.setMilliseconds(t);case"Seconds":return n?s.setUTCSeconds(t):s.setSeconds(t);case"Minutes":return n?s.setUTCMinutes(t):s.setMinutes(t);case"Hours":return n?s.setUTCHours(t):s.setHours(t);case"Date":return n?s.setUTCDate(t):s.setDate(t);case"FullYear":break;default:return}a=t,r=e.month(),e=29!==(e=e.date())||1!==r||ve(a)?e:28,n?s.setUTCFullYear(a,r,e):s.setFullYear(a,r,e)}}function Ce(e,a){var t;return isNaN(e)||isNaN(a)?NaN:(t=(a%(t=12)+t)%t,e+=(a-t)/12,1==t?ve(e)?29:28:31-t%7%2)}T=Array.prototype.indexOf||function(e){for(var a=0;a<this.length;++a)if(this[a]===e)return a;return-1},s("M",["MM",2],"Mo",function(){return this.month()+1}),s("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),s("MMMM",0,0,function(e){return this.localeData().months(this,e)}),h("M",r,u),h("MM",r,a),h("MMM",function(e,a){return a.monthsShortRegex(e)}),h("MMMM",function(e,a){return a.monthsRegex(e)}),k(["M","MM"],function(e,a){a[je]=f(e)-1}),k(["MMM","MMMM"],function(e,a,t,s){s=t._locale.monthsParse(e,s,t._strict);null!=s?a[je]=s:Y(t).invalidMonth=e});var Ie="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Ue="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Ge=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Ve=m,qe=m;function Be(e,a){if(e.isValid()){if("string"==typeof a)if(/^\d+$/.test(a))a=f(a);else if(!J(a=e.localeData().monthsParse(a)))return;var t=(t=e.date())<29?t:Math.min(t,Ce(e.year(),a));e._isUTC?e._d.setUTCMonth(a,t):e._d.setMonth(a,t)}}function Ke(e){return null!=e?(Be(this,e),c.updateOffset(this,!0),this):Je(this,"Month")}function Ze(){function e(e,a){return a.length-e.length}for(var a,t,s=[],n=[],r=[],d=0;d<12;d++)t=U([2e3,d]),a=we(this.monthsShort(t,"")),t=we(this.months(t,"")),s.push(a),n.push(t),r.push(t),r.push(a);s.sort(e),n.sort(e),r.sort(e),this._monthsRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+n.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+s.join("|")+")","i")}function $e(e,a,t,s,n,r,d){var _;return e<100&&0<=e?(_=new Date(e+400,a,t,s,n,r,d),isFinite(_.getFullYear())&&_.setFullYear(e)):_=new Date(e,a,t,s,n,r,d),_}function Qe(e){var a;return e<100&&0<=e?((a=Array.prototype.slice.call(arguments))[0]=e+400,a=new Date(Date.UTC.apply(null,a)),isFinite(a.getUTCFullYear())&&a.setUTCFullYear(e)):a=new Date(Date.UTC.apply(null,arguments)),a}function Xe(e,a,t){t=7+a-t;return t-(7+Qe(e,0,t).getUTCDay()-a)%7-1}function ea(e,a,t,s,n){var r,a=1+7*(a-1)+(7+t-s)%7+Xe(e,s,n),t=a<=0?Fe(r=e-1)+a:a>Fe(e)?(r=e+1,a-Fe(e)):(r=e,a);return{year:r,dayOfYear:t}}function aa(e,a,t){var s,n,r=Xe(e.year(),a,t),r=Math.floor((e.dayOfYear()-r-1)/7)+1;return r<1?s=r+ta(n=e.year()-1,a,t):r>ta(e.year(),a,t)?(s=r-ta(e.year(),a,t),n=e.year()+1):(n=e.year(),s=r),{week:s,year:n}}function ta(e,a,t){var s=Xe(e,a,t),a=Xe(e+1,a,t);return(Fe(e)-s+a)/7}s("w",["ww",2],"wo","week"),s("W",["WW",2],"Wo","isoWeek"),h("w",r,u),h("ww",r,a),h("W",r,u),h("WW",r,a),Se(["w","ww","W","WW"],function(e,a,t,s){a[s.substr(0,1)]=f(e)});function sa(e,a){return e.slice(a,7).concat(e.slice(0,a))}s("d",0,"do","day"),s("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),s("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),s("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),s("e",0,0,"weekday"),s("E",0,0,"isoWeekday"),h("d",r),h("e",r),h("E",r),h("dd",function(e,a){return a.weekdaysMinRegex(e)}),h("ddd",function(e,a){return a.weekdaysShortRegex(e)}),h("dddd",function(e,a){return a.weekdaysRegex(e)}),Se(["dd","ddd","dddd"],function(e,a,t,s){s=t._locale.weekdaysParse(e,s,t._strict);null!=s?a.d=s:Y(t).invalidWeekday=e}),Se(["d","e","E"],function(e,a,t,s){a[s]=f(e)});var na="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ra="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),da="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),_a=m,ia=m,oa=m;function ma(){function e(e,a){return a.length-e.length}for(var a,t,s,n=[],r=[],d=[],_=[],i=0;i<7;i++)s=U([2e3,1]).day(i),a=we(this.weekdaysMin(s,"")),t=we(this.weekdaysShort(s,"")),s=we(this.weekdays(s,"")),n.push(a),r.push(t),d.push(s),_.push(a),_.push(t),_.push(s);n.sort(e),r.sort(e),d.sort(e),_.sort(e),this._weekdaysRegex=new RegExp("^("+_.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+n.join("|")+")","i")}function ua(){return this.hours()%12||12}function la(e,a){s(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),a)})}function Ma(e,a){return a._meridiemParse}s("H",["HH",2],0,"hour"),s("h",["hh",2],0,ua),s("k",["kk",2],0,function(){return this.hours()||24}),s("hmm",0,0,function(){return""+ua.apply(this)+de(this.minutes(),2)}),s("hmmss",0,0,function(){return""+ua.apply(this)+de(this.minutes(),2)+de(this.seconds(),2)}),s("Hmm",0,0,function(){return""+this.hours()+de(this.minutes(),2)}),s("Hmmss",0,0,function(){return""+this.hours()+de(this.minutes(),2)+de(this.seconds(),2)}),la("a",!0),la("A",!1),h("a",Ma),h("A",Ma),h("H",r,M),h("h",r,u),h("k",r,u),h("HH",r,a),h("hh",r,a),h("kk",r,a),h("hmm",ye),h("hmmss",_),h("Hmm",ye),h("Hmmss",_),k(["H","HH"],D),k(["k","kk"],function(e,a,t){e=f(e);a[D]=24===e?0:e}),k(["a","A"],function(e,a,t){t._isPm=t._locale.isPM(e),t._meridiem=e}),k(["h","hh"],function(e,a,t){a[D]=f(e),Y(t).bigHour=!0}),k("hmm",function(e,a,t){var s=e.length-2;a[D]=f(e.substr(0,s)),a[Pe]=f(e.substr(s)),Y(t).bigHour=!0}),k("hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[D]=f(e.substr(0,s)),a[Pe]=f(e.substr(s,2)),a[Oe]=f(e.substr(n)),Y(t).bigHour=!0}),k("Hmm",function(e,a,t){var s=e.length-2;a[D]=f(e.substr(0,s)),a[Pe]=f(e.substr(s))}),k("Hmmss",function(e,a,t){var s=e.length-4,n=e.length-2;a[D]=f(e.substr(0,s)),a[Pe]=f(e.substr(s,2)),a[Oe]=f(e.substr(n))});m=Ne("Hours",!0);var ha,ca={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{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"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{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"},months:Ie,monthsShort:Ue,week:{dow:0,doy:6},weekdays:na,weekdaysMin:da,weekdaysShort:ra,meridiemParse:/[ap]\.?m?\.?/i},g={},La={};function Ya(e){return e&&e.toLowerCase().replace("_","-")}function ya(e){for(var a,t,s,n,r=0;r<e.length;){for(a=(n=Ya(e[r]).split("-")).length,t=(t=Ya(e[r+1]))?t.split("-"):null;0<a;){if(s=fa(n.slice(0,a).join("-")))return s;if(t&&t.length>=a&&function(e,a){for(var t=Math.min(e.length,a.length),s=0;s<t;s+=1)if(e[s]!==a[s])return s;return t}(n,t)>=a-1)break;a--}r++}return ha}function fa(a){var e,t;if(void 0===g[a]&&"undefined"!=typeof module&&module&&module.exports&&(t=a)&&t.match("^[^/\\\\]*$"))try{e=ha._abbr,require("./locale/"+a),ka(e)}catch(e){g[a]=null}return g[a]}function ka(e,a){return e&&((a=L(a)?Da(e):pa(e,a))?ha=a:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),ha._abbr}function pa(e,a){if(null===a)return delete g[e],null;var t,s=ca;if(a.abbr=e,null!=g[e])ae("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."),s=g[e]._config;else if(null!=a.parentLocale)if(null!=g[a.parentLocale])s=g[a.parentLocale]._config;else{if(null==(t=fa(a.parentLocale)))return La[a.parentLocale]||(La[a.parentLocale]=[]),La[a.parentLocale].push({name:e,config:a}),null;s=t._config}return g[e]=new ne(se(s,a)),La[e]&&La[e].forEach(function(e){pa(e.name,e.config)}),ka(e),g[e]}function Da(e){var a;if(!(e=e&&e._locale&&e._locale._abbr?e._locale._abbr:e))return ha;if(!F(e)){if(a=fa(e))return a;e=[e]}return ya(e)}function Ta(e){var a=e._a;return a&&-2===Y(e).overflow&&(a=a[je]<0||11<a[je]?je:a[xe]<1||a[xe]>Ce(a[p],a[je])?xe:a[D]<0||24<a[D]||24===a[D]&&(0!==a[Pe]||0!==a[Oe]||0!==a[We])?D:a[Pe]<0||59<a[Pe]?Pe:a[Oe]<0||59<a[Oe]?Oe:a[We]<0||999<a[We]?We:-1,Y(e)._overflowDayOfYear&&(a<p||xe<a)&&(a=xe),Y(e)._overflowWeeks&&-1===a&&(a=Ae),Y(e)._overflowWeekday&&-1===a&&(a=Ee),Y(e).overflow=a),e}var ga=/^\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)?)?$/,wa=/^\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)?)?$/,ba=/Z|[+-]\d\d(?::?\d\d)?/,Ha=[["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/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Sa=[["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/]],va=/^\/?Date\((-?\d+)/i,ja=/^(?:(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}))$/,xa={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Pa(e){var a,t,s,n,r,d,_=e._i,i=ga.exec(_)||wa.exec(_),_=Ha.length,o=Sa.length;if(i){for(Y(e).iso=!0,a=0,t=_;a<t;a++)if(Ha[a][1].exec(i[1])){n=Ha[a][0],s=!1!==Ha[a][2];break}if(null==n)e._isValid=!1;else{if(i[3]){for(a=0,t=o;a<t;a++)if(Sa[a][1].exec(i[3])){r=(i[2]||" ")+Sa[a][0];break}if(null==r)return void(e._isValid=!1)}if(s||null==r){if(i[4]){if(!ba.exec(i[4]))return void(e._isValid=!1);d="Z"}e._f=n+(r||"")+(d||""),Fa(e)}else e._isValid=!1}}else e._isValid=!1}function Oa(e,a,t,s,n,r){e=[function(e){e=parseInt(e,10);{if(e<=49)return 2e3+e;if(e<=999)return 1900+e}return e}(e),Ue.indexOf(a),parseInt(t,10),parseInt(s,10),parseInt(n,10)];return r&&e.push(parseInt(r,10)),e}function Wa(e){var a,t,s=ja.exec(e._i.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));s?(a=Oa(s[4],s[3],s[2],s[5],s[6],s[7]),function(e,a,t){if(!e||ra.indexOf(e)===new Date(a[0],a[1],a[2]).getDay())return 1;Y(t).weekdayMismatch=!0,t._isValid=!1}(s[1],a,e)&&(e._a=a,e._tzm=(a=s[8],t=s[9],s=s[10],a?xa[a]:t?0:60*(((a=parseInt(s,10))-(t=a%100))/100)+t),e._d=Qe.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),Y(e).rfc2822=!0)):e._isValid=!1}function Aa(e,a,t){return null!=e?e:null!=a?a:t}function Ea(e){var a,t,s,n,r,d,_,i,o,m,u,l=[];if(!e._d){for(s=e,n=new Date(c.now()),t=s._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()],e._w&&null==e._a[xe]&&null==e._a[je]&&(null!=(n=(s=e)._w).GG||null!=n.W||null!=n.E?(i=1,o=4,r=Aa(n.GG,s._a[p],aa(w(),1,4).year),d=Aa(n.W,1),((_=Aa(n.E,1))<1||7<_)&&(m=!0)):(i=s._locale._week.dow,o=s._locale._week.doy,u=aa(w(),i,o),r=Aa(n.gg,s._a[p],u.year),d=Aa(n.w,u.week),null!=n.d?((_=n.d)<0||6<_)&&(m=!0):null!=n.e?(_=n.e+i,(n.e<0||6<n.e)&&(m=!0)):_=i),d<1||d>ta(r,i,o)?Y(s)._overflowWeeks=!0:null!=m?Y(s)._overflowWeekday=!0:(u=ea(r,d,_,i,o),s._a[p]=u.year,s._dayOfYear=u.dayOfYear)),null!=e._dayOfYear&&(n=Aa(e._a[p],t[p]),(e._dayOfYear>Fe(n)||0===e._dayOfYear)&&(Y(e)._overflowDayOfYear=!0),m=Qe(n,0,e._dayOfYear),e._a[je]=m.getUTCMonth(),e._a[xe]=m.getUTCDate()),a=0;a<3&&null==e._a[a];++a)e._a[a]=l[a]=t[a];for(;a<7;a++)e._a[a]=l[a]=null==e._a[a]?2===a?1:0:e._a[a];24===e._a[D]&&0===e._a[Pe]&&0===e._a[Oe]&&0===e._a[We]&&(e._nextDay=!0,e._a[D]=0),e._d=(e._useUTC?Qe:$e).apply(null,l),r=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[D]=24),e._w&&void 0!==e._w.d&&e._w.d!==r&&(Y(e).weekdayMismatch=!0)}}function Fa(e){if(e._f===c.ISO_8601)Pa(e);else if(e._f===c.RFC_2822)Wa(e);else{e._a=[],Y(e).empty=!0;for(var a,t,s,n,r,d=""+e._i,_=d.length,i=0,o=le(e._f,e._locale).match(_e)||[],m=o.length,u=0;u<m;u++)t=o[u],(a=(d.match(ge(t,e))||[])[0])&&(0<(s=d.substr(0,d.indexOf(a))).length&&Y(e).unusedInput.push(s),d=d.slice(d.indexOf(a)+a.length),i+=a.length),me[t]?(a?Y(e).empty=!1:Y(e).unusedTokens.push(t),s=t,r=e,null!=(n=a)&&l(He,s)&&He[s](n,r._a,r,s)):e._strict&&!a&&Y(e).unusedTokens.push(t);Y(e).charsLeftOver=_-i,0<d.length&&Y(e).unusedInput.push(d),e._a[D]<=12&&!0===Y(e).bigHour&&0<e._a[D]&&(Y(e).bigHour=void 0),Y(e).parsedDateParts=e._a.slice(0),Y(e).meridiem=e._meridiem,e._a[D]=function(e,a,t){if(null==t)return a;return null!=e.meridiemHour?e.meridiemHour(a,t):null!=e.isPM?((e=e.isPM(t))&&a<12&&(a+=12),a=e||12!==a?a:0):a}(e._locale,e._a[D],e._meridiem),null!==(_=Y(e).era)&&(e._a[p]=e._locale.erasConvertYear(_,e._a[p])),Ea(e),Ta(e)}}function za(e){var a,t,s,n=e._i,r=e._f;if(e._locale=e._locale||Da(e._l),null===n||void 0===r&&""===n)return V({nullInput:!0});if("string"==typeof n&&(e._i=n=e._locale.preparse(n)),Q(n))return new $(Ta(n));if(R(n))e._d=n;else if(F(r)){var d,_,i,o,m,u,l=e,M=!1,h=l._f.length;if(0===h)Y(l).invalidFormat=!0,l._d=new Date(NaN);else{for(o=0;o<h;o++)m=0,u=!1,d=Z({},l),null!=l._useUTC&&(d._useUTC=l._useUTC),d._f=l._f[o],Fa(d),G(d)&&(u=!0),m=(m+=Y(d).charsLeftOver)+10*Y(d).unusedTokens.length,Y(d).score=m,M?m<i&&(i=m,_=d):(null==i||m<i||u)&&(i=m,_=d,u)&&(M=!0);I(l,_||d)}}else if(r)Fa(e);else if(L(r=(n=e)._i))n._d=new Date(c.now());else R(r)?n._d=new Date(r.valueOf()):"string"==typeof r?(t=n,null!==(a=va.exec(t._i))?t._d=new Date(+a[1]):(Pa(t),!1===t._isValid&&(delete t._isValid,Wa(t),!1===t._isValid)&&(delete t._isValid,t._strict?t._isValid=!1:c.createFromInputFallback(t)))):F(r)?(n._a=C(r.slice(0),function(e){return parseInt(e,10)}),Ea(n)):z(r)?(a=n)._d||(s=void 0===(t=he(a._i)).day?t.date:t.day,a._a=C([t.year,t.month,s,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),Ea(a)):J(r)?n._d=new Date(r):c.createFromInputFallback(n);return G(e)||(e._d=null),e}function Na(e,a,t,s,n){var r={};return!0!==a&&!1!==a||(s=a,a=void 0),!0!==t&&!1!==t||(s=t,t=void 0),(z(e)&&N(e)||F(e)&&0===e.length)&&(e=void 0),r._isAMomentObject=!0,r._useUTC=r._isUTC=n,r._l=t,r._i=e,r._f=a,r._strict=s,(n=new $(Ta(za(n=r))))._nextDay&&(n.add(1,"d"),n._nextDay=void 0),n}function w(e,a,t,s){return Na(e,a,t,s,!1)}c.createFromInputFallback=e("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(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),c.ISO_8601=function(){},c.RFC_2822=function(){};ye=e("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=w.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:V()}),_=e("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=w.apply(null,arguments);return this.isValid()&&e.isValid()?this<e?this:e:V()});function Ja(e,a){var t,s;if(!(a=1===a.length&&F(a[0])?a[0]:a).length)return w();for(t=a[0],s=1;s<a.length;++s)a[s].isValid()&&!a[s][e](t)||(t=a[s]);return t}var Ra=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Ca(e){var e=he(e),a=e.year||0,t=e.quarter||0,s=e.month||0,n=e.week||e.isoWeek||0,r=e.day||0,d=e.hour||0,_=e.minute||0,i=e.second||0,o=e.millisecond||0;this._isValid=function(e){var a,t,s=!1,n=Ra.length;for(a in e)if(l(e,a)&&(-1===T.call(Ra,a)||null!=e[a]&&isNaN(e[a])))return!1;for(t=0;t<n;++t)if(e[Ra[t]]){if(s)return!1;parseFloat(e[Ra[t]])!==f(e[Ra[t]])&&(s=!0)}return!0}(e),this._milliseconds=+o+1e3*i+6e4*_+1e3*d*60*60,this._days=+r+7*n,this._months=+s+3*t+12*a,this._data={},this._locale=Da(),this._bubble()}function Ia(e){return e instanceof Ca}function Ua(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Ga(e,t){s(e,0,0,function(){var e=this.utcOffset(),a="+";return e<0&&(e=-e,a="-"),a+de(~~(e/60),2)+t+de(~~e%60,2)})}Ga("Z",":"),Ga("ZZ",""),h("Z",Te),h("ZZ",Te),k(["Z","ZZ"],function(e,a,t){t._useUTC=!0,t._tzm=qa(Te,e)});var Va=/([\+\-]|\d\d)/gi;function qa(e,a){var a=(a||"").match(e);return null===a?null:0===(a=60*(e=((a[a.length-1]||[])+"").match(Va)||["-",0,0])[1]+f(e[2]))?0:"+"===e[0]?a:-a}function Ba(e,a){var t;return a._isUTC?(a=a.clone(),t=(Q(e)||R(e)?e:w(e)).valueOf()-a.valueOf(),a._d.setTime(a._d.valueOf()+t),c.updateOffset(a,!1),a):w(e).local()}function Ka(e){return-Math.round(e._d.getTimezoneOffset())}function Za(){return!!this.isValid()&&this._isUTC&&0===this._offset}c.updateOffset=function(){};var $a=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Qa=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Xa(e,a){var t,s=e;return Ia(e)?s={ms:e._milliseconds,d:e._days,M:e._months}:J(e)||!isNaN(+e)?(s={},a?s[a]=+e:s.milliseconds=+e):(a=$a.exec(e))?(t="-"===a[1]?-1:1,s={y:0,d:f(a[xe])*t,h:f(a[D])*t,m:f(a[Pe])*t,s:f(a[Oe])*t,ms:f(Ua(1e3*a[We]))*t}):(a=Qa.exec(e))?(t="-"===a[1]?-1:1,s={y:et(a[2],t),M:et(a[3],t),w:et(a[4],t),d:et(a[5],t),h:et(a[6],t),m:et(a[7],t),s:et(a[8],t)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(a=function(e,a){var t;if(!e.isValid()||!a.isValid())return{milliseconds:0,months:0};a=Ba(a,e),e.isBefore(a)?t=at(e,a):((t=at(a,e)).milliseconds=-t.milliseconds,t.months=-t.months);return t}(w(s.from),w(s.to)),(s={}).ms=a.milliseconds,s.M=a.months),t=new Ca(s),Ia(e)&&l(e,"_locale")&&(t._locale=e._locale),Ia(e)&&l(e,"_isValid")&&(t._isValid=e._isValid),t}function et(e,a){e=e&&parseFloat(e.replace(",","."));return(isNaN(e)?0:e)*a}function at(e,a){var t={};return t.months=a.month()-e.month()+12*(a.year()-e.year()),e.clone().add(t.months,"M").isAfter(a)&&--t.months,t.milliseconds=+a-+e.clone().add(t.months,"M"),t}function tt(s,n){return function(e,a){var t;return null===a||isNaN(+a)||(ae(n,"moment()."+n+"(period, number) is deprecated. Please use moment()."+n+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),t=e,e=a,a=t),st(this,Xa(e,a),s),this}}function st(e,a,t,s){var n=a._milliseconds,r=Ua(a._days),a=Ua(a._months);e.isValid()&&(s=null==s||s,a&&Be(e,Je(e,"Month")+a*t),r&&Re(e,"Date",Je(e,"Date")+r*t),n&&e._d.setTime(e._d.valueOf()+n*t),s)&&c.updateOffset(e,r||a)}Xa.fn=Ca.prototype,Xa.invalid=function(){return Xa(NaN)};Ie=tt(1,"add"),na=tt(-1,"subtract");function nt(e){return"string"==typeof e||e instanceof String}function rt(e){return Q(e)||R(e)||nt(e)||J(e)||function(a){var e=F(a),t=!1;e&&(t=0===a.filter(function(e){return!J(e)&&nt(a)}).length);return e&&t}(e)||function(e){var a,t,s=z(e)&&!N(e),n=!1,r=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],d=r.length;for(a=0;a<d;a+=1)t=r[a],n=n||l(e,t);return s&&n}(e)||null==e}function dt(e,a){var t,s;return e.date()<a.date()?-dt(a,e):-((t=12*(a.year()-e.year())+(a.month()-e.month()))+(a-(s=e.clone().add(t,"months"))<0?(a-s)/(s-e.clone().add(t-1,"months")):(a-s)/(e.clone().add(1+t,"months")-s)))||0}function _t(e){return void 0===e?this._locale._abbr:(null!=(e=Da(e))&&(this._locale=e),this)}c.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",c.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";da=e("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});function it(){return this._locale}var ot=126227808e5;function mt(e,a){return(e%a+a)%a}function ut(e,a,t){return e<100&&0<=e?new Date(e+400,a,t)-ot:new Date(e,a,t).valueOf()}function lt(e,a,t){return e<100&&0<=e?Date.UTC(e+400,a,t)-ot:Date.UTC(e,a,t)}function Mt(e,a){return a.erasAbbrRegex(e)}function ht(){for(var e,a,t,s=[],n=[],r=[],d=[],_=this.eras(),i=0,o=_.length;i<o;++i)e=we(_[i].name),a=we(_[i].abbr),t=we(_[i].narrow),n.push(e),s.push(a),r.push(t),d.push(e),d.push(a),d.push(t);this._erasRegex=new RegExp("^("+d.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+n.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+s.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+r.join("|")+")","i")}function ct(e,a){s(0,[e,e.length],0,a)}function Lt(e,a,t,s,n){var r;return null==e?aa(this,s,n).year:(r=ta(e,s,n),function(e,a,t,s,n){e=ea(e,a,t,s,n),a=Qe(e.year,0,e.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}.call(this,e,a=r<a?r:a,t,s,n))}s("N",0,0,"eraAbbr"),s("NN",0,0,"eraAbbr"),s("NNN",0,0,"eraAbbr"),s("NNNN",0,0,"eraName"),s("NNNNN",0,0,"eraNarrow"),s("y",["y",1],"yo","eraYear"),s("y",["yy",2],0,"eraYear"),s("y",["yyy",3],0,"eraYear"),s("y",["yyyy",4],0,"eraYear"),h("N",Mt),h("NN",Mt),h("NNN",Mt),h("NNNN",function(e,a){return a.erasNameRegex(e)}),h("NNNNN",function(e,a){return a.erasNarrowRegex(e)}),k(["N","NN","NNN","NNNN","NNNNN"],function(e,a,t,s){s=t._locale.erasParse(e,s,t._strict);s?Y(t).era=s:Y(t).invalidEra=e}),h("y",ke),h("yy",ke),h("yyy",ke),h("yyyy",ke),h("yo",function(e,a){return a._eraYearOrdinalRegex||ke}),k(["y","yy","yyy","yyyy"],p),k(["yo"],function(e,a,t,s){var n;t._locale._eraYearOrdinalRegex&&(n=e.match(t._locale._eraYearOrdinalRegex)),t._locale.eraYearOrdinalParse?a[p]=t._locale.eraYearOrdinalParse(e,n):a[p]=parseInt(e,10)}),s(0,["gg",2],0,function(){return this.weekYear()%100}),s(0,["GG",2],0,function(){return this.isoWeekYear()%100}),ct("gggg","weekYear"),ct("ggggg","weekYear"),ct("GGGG","isoWeekYear"),ct("GGGGG","isoWeekYear"),h("G",pe),h("g",pe),h("GG",r,a),h("gg",r,a),h("GGGG",i,t),h("gggg",i,t),h("GGGGG",o,n),h("ggggg",o,n),Se(["gggg","ggggg","GGGG","GGGGG"],function(e,a,t,s){a[s.substr(0,2)]=f(e)}),Se(["gg","GG"],function(e,a,t,s){a[s]=c.parseTwoDigitYear(e)}),s("Q",0,"Qo","quarter"),h("Q",Le),k("Q",function(e,a){a[je]=3*(f(e)-1)}),s("D",["DD",2],"Do","date"),h("D",r,u),h("DD",r,a),h("Do",function(e,a){return e?a._dayOfMonthOrdinalParse||a._ordinalParse:a._dayOfMonthOrdinalParseLenient}),k(["D","DD"],xe),k("Do",function(e,a){a[xe]=f(e.match(r)[0])});i=Ne("Date",!0);s("DDD",["DDDD",3],"DDDo","dayOfYear"),h("DDD",fe),h("DDDD",Ye),k(["DDD","DDDD"],function(e,a,t){t._dayOfYear=f(e)}),s("m",["mm",2],0,"minute"),h("m",r,M),h("mm",r,a),k(["m","mm"],Pe);var Yt,t=Ne("Minutes",!1),o=(s("s",["ss",2],0,"second"),h("s",r,M),h("ss",r,a),k(["s","ss"],Oe),Ne("Seconds",!1));for(s("S",0,0,function(){return~~(this.millisecond()/100)}),s(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),s(0,["SSS",3],0,"millisecond"),s(0,["SSSS",4],0,function(){return 10*this.millisecond()}),s(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),s(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),s(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),s(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),s(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),h("S",fe,Le),h("SS",fe,a),h("SSS",fe,Ye),Yt="SSSS";Yt.length<=9;Yt+="S")h(Yt,ke);function yt(e,a){a[We]=f(1e3*("0."+e))}for(Yt="S";Yt.length<=9;Yt+="S")k(Yt,yt);n=Ne("Milliseconds",!1),s("z",0,0,"zoneAbbr"),s("zz",0,0,"zoneName");u=$.prototype;function ft(e){return e}u.add=Ie,u.calendar=function(e,a){1===arguments.length&&(arguments[0]?rt(arguments[0])?(e=arguments[0],a=void 0):function(e){for(var a=z(e)&&!N(e),t=!1,s=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"],n=0;n<s.length;n+=1)t=t||l(e,s[n]);return a&&t}(arguments[0])&&(a=arguments[0],e=void 0):a=e=void 0);var e=e||w(),t=Ba(e,this).startOf("day"),t=c.calendarFormat(this,t)||"sameElse",a=a&&(te(a[t])?a[t].call(this,e):a[t]);return this.format(a||this.localeData().calendar(t,this,w(e)))},u.clone=function(){return new $(this)},u.diff=function(e,a,t){var s,n,r;if(!this.isValid())return NaN;if(!(s=Ba(e,this)).isValid())return NaN;switch(n=6e4*(s.utcOffset()-this.utcOffset()),a=d(a)){case"year":r=dt(this,s)/12;break;case"month":r=dt(this,s);break;case"quarter":r=dt(this,s)/3;break;case"second":r=(this-s)/1e3;break;case"minute":r=(this-s)/6e4;break;case"hour":r=(this-s)/36e5;break;case"day":r=(this-s-n)/864e5;break;case"week":r=(this-s-n)/6048e5;break;default:r=this-s}return t?r:y(r)},u.endOf=function(e){var a,t;if(void 0!==(e=d(e))&&"millisecond"!==e&&this.isValid()){switch(t=this._isUTC?lt:ut,e){case"year":a=t(this.year()+1,0,1)-1;break;case"quarter":a=t(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":a=t(this.year(),this.month()+1,1)-1;break;case"week":a=t(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":a=t(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":a=t(this.year(),this.month(),this.date()+1)-1;break;case"hour":a=this._d.valueOf(),a+=36e5-mt(a+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":a=this._d.valueOf(),a+=6e4-mt(a,6e4)-1;break;case"second":a=this._d.valueOf(),a+=1e3-mt(a,1e3)-1;break}this._d.setTime(a),c.updateOffset(this,!0)}return this},u.format=function(e){return e=e||(this.isUtc()?c.defaultFormatUtc:c.defaultFormat),e=ue(this,e),this.localeData().postformat(e)},u.from=function(e,a){return this.isValid()&&(Q(e)&&e.isValid()||w(e).isValid())?Xa({to:this,from:e}).locale(this.locale()).humanize(!a):this.localeData().invalidDate()},u.fromNow=function(e){return this.from(w(),e)},u.to=function(e,a){return this.isValid()&&(Q(e)&&e.isValid()||w(e).isValid())?Xa({from:this,to:e}).locale(this.locale()).humanize(!a):this.localeData().invalidDate()},u.toNow=function(e){return this.to(w(),e)},u.get=function(e){return te(this[e=d(e)])?this[e]():this},u.invalidAt=function(){return Y(this).overflow},u.isAfter=function(e,a){return e=Q(e)?e:w(e),!(!this.isValid()||!e.isValid())&&("millisecond"===(a=d(a)||"millisecond")?this.valueOf()>e.valueOf():e.valueOf()<this.clone().startOf(a).valueOf())},u.isBefore=function(e,a){return e=Q(e)?e:w(e),!(!this.isValid()||!e.isValid())&&("millisecond"===(a=d(a)||"millisecond")?this.valueOf()<e.valueOf():this.clone().endOf(a).valueOf()<e.valueOf())},u.isBetween=function(e,a,t,s){return e=Q(e)?e:w(e),a=Q(a)?a:w(a),!!(this.isValid()&&e.isValid()&&a.isValid())&&("("===(s=s||"()")[0]?this.isAfter(e,t):!this.isBefore(e,t))&&(")"===s[1]?this.isBefore(a,t):!this.isAfter(a,t))},u.isSame=function(e,a){var e=Q(e)?e:w(e);return!(!this.isValid()||!e.isValid())&&("millisecond"===(a=d(a)||"millisecond")?this.valueOf()===e.valueOf():(e=e.valueOf(),this.clone().startOf(a).valueOf()<=e&&e<=this.clone().endOf(a).valueOf()))},u.isSameOrAfter=function(e,a){return this.isSame(e,a)||this.isAfter(e,a)},u.isSameOrBefore=function(e,a){return this.isSame(e,a)||this.isBefore(e,a)},u.isValid=function(){return G(this)},u.lang=da,u.locale=_t,u.localeData=it,u.max=_,u.min=ye,u.parsingFlags=function(){return I({},Y(this))},u.set=function(e,a){if("object"==typeof e)for(var t=function(e){var a,t=[];for(a in e)l(e,a)&&t.push({unit:a,priority:ce[a]});return t.sort(function(e,a){return e.priority-a.priority}),t}(e=he(e)),s=t.length,n=0;n<s;n++)this[t[n].unit](e[t[n].unit]);else if(te(this[e=d(e)]))return this[e](a);return this},u.startOf=function(e){var a,t;if(void 0!==(e=d(e))&&"millisecond"!==e&&this.isValid()){switch(t=this._isUTC?lt:ut,e){case"year":a=t(this.year(),0,1);break;case"quarter":a=t(this.year(),this.month()-this.month()%3,1);break;case"month":a=t(this.year(),this.month(),1);break;case"week":a=t(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":a=t(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":a=t(this.year(),this.month(),this.date());break;case"hour":a=this._d.valueOf(),a-=mt(a+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":a=this._d.valueOf(),a-=mt(a,6e4);break;case"second":a=this._d.valueOf(),a-=mt(a,1e3);break}this._d.setTime(a),c.updateOffset(this,!0)}return this},u.subtract=na,u.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},u.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},u.toDate=function(){return new Date(this.valueOf())},u.toISOString=function(e){var a;return this.isValid()?(a=(e=!0!==e)?this.clone().utc():this).year()<0||9999<a.year()?ue(a,e?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):te(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",ue(a,"Z")):ue(a,e?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ"):null},u.inspect=function(){var e,a,t;return this.isValid()?(a="moment",e="",this.isLocal()||(a=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z"),a="["+a+'("]',t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",this.format(a+t+"-MM-DD[T]HH:mm:ss.SSS"+(e+'[")]'))):"moment.invalid(/* "+this._i+" */)"},"undefined"!=typeof Symbol&&null!=Symbol.for&&(u[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),u.toJSON=function(){return this.isValid()?this.toISOString():null},u.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},u.unix=function(){return Math.floor(this.valueOf()/1e3)},u.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},u.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},u.eraName=function(){for(var e,a=this.localeData().eras(),t=0,s=a.length;t<s;++t){if(e=this.clone().startOf("day").valueOf(),a[t].since<=e&&e<=a[t].until)return a[t].name;if(a[t].until<=e&&e<=a[t].since)return a[t].name}return""},u.eraNarrow=function(){for(var e,a=this.localeData().eras(),t=0,s=a.length;t<s;++t){if(e=this.clone().startOf("day").valueOf(),a[t].since<=e&&e<=a[t].until)return a[t].narrow;if(a[t].until<=e&&e<=a[t].since)return a[t].narrow}return""},u.eraAbbr=function(){for(var e,a=this.localeData().eras(),t=0,s=a.length;t<s;++t){if(e=this.clone().startOf("day").valueOf(),a[t].since<=e&&e<=a[t].until)return a[t].abbr;if(a[t].until<=e&&e<=a[t].since)return a[t].abbr}return""},u.eraYear=function(){for(var e,a,t=this.localeData().eras(),s=0,n=t.length;s<n;++s)if(e=t[s].since<=t[s].until?1:-1,a=this.clone().startOf("day").valueOf(),t[s].since<=a&&a<=t[s].until||t[s].until<=a&&a<=t[s].since)return(this.year()-c(t[s].since).year())*e+t[s].offset;return this.year()},u.year=ze,u.isLeapYear=function(){return ve(this.year())},u.weekYear=function(e){return Lt.call(this,e,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)},u.isoWeekYear=function(e){return Lt.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},u.quarter=u.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},u.month=Ke,u.daysInMonth=function(){return Ce(this.year(),this.month())},u.week=u.weeks=function(e){var a=this.localeData().week(this);return null==e?a:this.add(7*(e-a),"d")},u.isoWeek=u.isoWeeks=function(e){var a=aa(this,1,4).week;return null==e?a:this.add(7*(e-a),"d")},u.weeksInYear=function(){var e=this.localeData()._week;return ta(this.year(),e.dow,e.doy)},u.weeksInWeekYear=function(){var e=this.localeData()._week;return ta(this.weekYear(),e.dow,e.doy)},u.isoWeeksInYear=function(){return ta(this.year(),1,4)},u.isoWeeksInISOWeekYear=function(){return ta(this.isoWeekYear(),1,4)},u.date=i,u.day=u.days=function(e){var a,t,s;return this.isValid()?(a=Je(this,"Day"),null!=e?(t=e,s=this.localeData(),e="string"!=typeof t?t:isNaN(t)?"number"==typeof(t=s.weekdaysParse(t))?t:null:parseInt(t,10),this.add(e-a,"d")):a):null!=e?this:NaN},u.weekday=function(e){var a;return this.isValid()?(a=(this.day()+7-this.localeData()._week.dow)%7,null==e?a:this.add(e-a,"d")):null!=e?this:NaN},u.isoWeekday=function(e){var a,t;return this.isValid()?null!=e?(a=e,t=this.localeData(),t="string"==typeof a?t.weekdaysParse(a)%7||7:isNaN(a)?null:a,this.day(this.day()%7?t:t-7)):this.day()||7:null!=e?this:NaN},u.dayOfYear=function(e){var a=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?a:this.add(e-a,"d")},u.hour=u.hours=m,u.minute=u.minutes=t,u.second=u.seconds=o,u.millisecond=u.milliseconds=n,u.utcOffset=function(e,a,t){var s,n=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null==e)return this._isUTC?n:Ka(this);if("string"==typeof e){if(null===(e=qa(Te,e)))return this}else Math.abs(e)<16&&!t&&(e*=60);return!this._isUTC&&a&&(s=Ka(this)),this._offset=e,this._isUTC=!0,null!=s&&this.add(s,"m"),n!==e&&(!a||this._changeInProgress?st(this,Xa(e-n,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,c.updateOffset(this,!0),this._changeInProgress=null)),this},u.utc=function(e){return this.utcOffset(0,e)},u.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e)&&this.subtract(Ka(this),"m"),this},u.parseZone=function(){var e;return null!=this._tzm?this.utcOffset(this._tzm,!1,!0):"string"==typeof this._i&&(null!=(e=qa(De,this._i))?this.utcOffset(e):this.utcOffset(0,!0)),this},u.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?w(e).utcOffset():0,(this.utcOffset()-e)%60==0)},u.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},u.isLocal=function(){return!!this.isValid()&&!this._isUTC},u.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},u.isUtc=Za,u.isUTC=Za,u.zoneAbbr=function(){return this._isUTC?"UTC":""},u.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},u.dates=e("dates accessor is deprecated. Use date instead.",i),u.months=e("months accessor is deprecated. Use month instead",Ke),u.years=e("years accessor is deprecated. Use year instead",ze),u.zone=e("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,a){return null!=e?(this.utcOffset(e="string"!=typeof e?-e:e,a),this):-this.utcOffset()}),u.isDSTShifted=e("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){var e,a;return L(this._isDSTShifted)&&(Z(e={},this),(e=za(e))._a?(a=(e._isUTC?U:w)(e._a),this._isDSTShifted=this.isValid()&&0<function(e,a,t){for(var s=Math.min(e.length,a.length),n=Math.abs(e.length-a.length),r=0,d=0;d<s;d++)(t&&e[d]!==a[d]||!t&&f(e[d])!==f(a[d]))&&r++;return r+n}(e._a,a.toArray())):this._isDSTShifted=!1),this._isDSTShifted});M=ne.prototype;function kt(e,a,t,s){var n=Da(),s=U().set(s,a);return n[t](s,e)}function pt(e,a,t){if(J(e)&&(a=e,e=void 0),e=e||"",null!=a)return kt(e,a,t,"month");for(var s=[],n=0;n<12;n++)s[n]=kt(e,n,t,"month");return s}function Dt(e,a,t,s){a=("boolean"==typeof e?J(a)&&(t=a,a=void 0):(a=e,e=!1,J(t=a)&&(t=a,a=void 0)),a||"");var n,r=Da(),d=e?r._week.dow:0,_=[];if(null!=t)return kt(a,(t+d)%7,s,"day");for(n=0;n<7;n++)_[n]=kt(a,(n+d)%7,s,"day");return _}M.calendar=function(e,a,t){return te(e=this._calendar[e]||this._calendar.sameElse)?e.call(a,t):e},M.longDateFormat=function(e){var a=this._longDateFormat[e],t=this._longDateFormat[e.toUpperCase()];return a||!t?a:(this._longDateFormat[e]=t.match(_e).map(function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e}).join(""),this._longDateFormat[e])},M.invalidDate=function(){return this._invalidDate},M.ordinal=function(e){return this._ordinal.replace("%d",e)},M.preparse=ft,M.postformat=ft,M.relativeTime=function(e,a,t,s){var n=this._relativeTime[t];return te(n)?n(e,a,t,s):n.replace(/%d/i,e)},M.pastFuture=function(e,a){return te(e=this._relativeTime[0<e?"future":"past"])?e(a):e.replace(/%s/i,a)},M.set=function(e){var a,t;for(t in e)l(e,t)&&(te(a=e[t])?this[t]=a:this["_"+t]=a);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},M.eras=function(e,a){for(var t,s=this._eras||Da("en")._eras,n=0,r=s.length;n<r;++n){switch(typeof s[n].since){case"string":t=c(s[n].since).startOf("day"),s[n].since=t.valueOf();break}switch(typeof s[n].until){case"undefined":s[n].until=1/0;break;case"string":t=c(s[n].until).startOf("day").valueOf(),s[n].until=t.valueOf();break}}return s},M.erasParse=function(e,a,t){var s,n,r,d,_,i=this.eras();for(e=e.toUpperCase(),s=0,n=i.length;s<n;++s)if(r=i[s].name.toUpperCase(),d=i[s].abbr.toUpperCase(),_=i[s].narrow.toUpperCase(),t)switch(a){case"N":case"NN":case"NNN":if(d===e)return i[s];break;case"NNNN":if(r===e)return i[s];break;case"NNNNN":if(_===e)return i[s];break}else if(0<=[r,d,_].indexOf(e))return i[s]},M.erasConvertYear=function(e,a){var t=e.since<=e.until?1:-1;return void 0===a?c(e.since).year():c(e.since).year()+(a-e.offset)*t},M.erasAbbrRegex=function(e){return l(this,"_erasAbbrRegex")||ht.call(this),e?this._erasAbbrRegex:this._erasRegex},M.erasNameRegex=function(e){return l(this,"_erasNameRegex")||ht.call(this),e?this._erasNameRegex:this._erasRegex},M.erasNarrowRegex=function(e){return l(this,"_erasNarrowRegex")||ht.call(this),e?this._erasNarrowRegex:this._erasRegex},M.months=function(e,a){return e?(F(this._months)?this._months:this._months[(this._months.isFormat||Ge).test(a)?"format":"standalone"])[e.month()]:F(this._months)?this._months:this._months.standalone},M.monthsShort=function(e,a){return e?(F(this._monthsShort)?this._monthsShort:this._monthsShort[Ge.test(a)?"format":"standalone"])[e.month()]:F(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},M.monthsParse=function(e,a,t){var s,n;if(this._monthsParseExact)return function(e,a,t){var s,n,r,e=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)r=U([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(r,"").toLocaleLowerCase();return t?"MMM"===a?-1!==(n=T.call(this._shortMonthsParse,e))?n:null:-1!==(n=T.call(this._longMonthsParse,e))?n:null:"MMM"===a?-1!==(n=T.call(this._shortMonthsParse,e))||-1!==(n=T.call(this._longMonthsParse,e))?n:null:-1!==(n=T.call(this._longMonthsParse,e))||-1!==(n=T.call(this._shortMonthsParse,e))?n:null}.call(this,e,a,t);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(n=U([2e3,s]),t&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(n,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(n,"").replace(".","")+"$","i")),t||this._monthsParse[s]||(n="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[s]=new RegExp(n.replace(".",""),"i")),t&&"MMMM"===a&&this._longMonthsParse[s].test(e))return s;if(t&&"MMM"===a&&this._shortMonthsParse[s].test(e))return s;if(!t&&this._monthsParse[s].test(e))return s}},M.monthsRegex=function(e){return this._monthsParseExact?(l(this,"_monthsRegex")||Ze.call(this),e?this._monthsStrictRegex:this._monthsRegex):(l(this,"_monthsRegex")||(this._monthsRegex=qe),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},M.monthsShortRegex=function(e){return this._monthsParseExact?(l(this,"_monthsRegex")||Ze.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(l(this,"_monthsShortRegex")||(this._monthsShortRegex=Ve),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},M.week=function(e){return aa(e,this._week.dow,this._week.doy).week},M.firstDayOfYear=function(){return this._week.doy},M.firstDayOfWeek=function(){return this._week.dow},M.weekdays=function(e,a){return a=F(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(a)?"format":"standalone"],!0===e?sa(a,this._week.dow):e?a[e.day()]:a},M.weekdaysMin=function(e){return!0===e?sa(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},M.weekdaysShort=function(e){return!0===e?sa(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},M.weekdaysParse=function(e,a,t){var s,n;if(this._weekdaysParseExact)return function(e,a,t){var s,n,r,e=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)r=U([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(r,"").toLocaleLowerCase();return t?"dddd"===a?-1!==(n=T.call(this._weekdaysParse,e))?n:null:"ddd"===a?-1!==(n=T.call(this._shortWeekdaysParse,e))?n:null:-1!==(n=T.call(this._minWeekdaysParse,e))?n:null:"dddd"===a?-1!==(n=T.call(this._weekdaysParse,e))||-1!==(n=T.call(this._shortWeekdaysParse,e))||-1!==(n=T.call(this._minWeekdaysParse,e))?n:null:"ddd"===a?-1!==(n=T.call(this._shortWeekdaysParse,e))||-1!==(n=T.call(this._weekdaysParse,e))||-1!==(n=T.call(this._minWeekdaysParse,e))?n:null:-1!==(n=T.call(this._minWeekdaysParse,e))||-1!==(n=T.call(this._weekdaysParse,e))||-1!==(n=T.call(this._shortWeekdaysParse,e))?n:null}.call(this,e,a,t);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(n=U([2e3,1]).day(s),t&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp("^"+this.weekdays(n,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[s]=new RegExp("^"+this.weekdaysShort(n,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[s]=new RegExp("^"+this.weekdaysMin(n,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[s]||(n="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[s]=new RegExp(n.replace(".",""),"i")),t&&"dddd"===a&&this._fullWeekdaysParse[s].test(e))return s;if(t&&"ddd"===a&&this._shortWeekdaysParse[s].test(e))return s;if(t&&"dd"===a&&this._minWeekdaysParse[s].test(e))return s;if(!t&&this._weekdaysParse[s].test(e))return s}},M.weekdaysRegex=function(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||ma.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(l(this,"_weekdaysRegex")||(this._weekdaysRegex=_a),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},M.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||ma.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(l(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=ia),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},M.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||ma.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(l(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=oa),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},M.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},M.meridiem=function(e,a,t){return 11<e?t?"pm":"PM":t?"am":"AM"},ka("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var a=e%10;return e+(1===f(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")}}),c.lang=e("moment.lang is deprecated. Use moment.locale instead.",ka),c.langData=e("moment.langData is deprecated. Use moment.localeData instead.",Da);var Tt=Math.abs;function gt(e,a,t,s){a=Xa(a,t);return e._milliseconds+=s*a._milliseconds,e._days+=s*a._days,e._months+=s*a._months,e._bubble()}function wt(e){return e<0?Math.floor(e):Math.ceil(e)}function bt(e){return 4800*e/146097}function Ht(e){return 146097*e/4800}function St(e){return function(){return this.as(e)}}Le=St("ms"),a=St("s"),fe=St("m"),Ye=St("h"),Ie=St("d"),_=St("w"),ye=St("M"),na=St("Q"),m=St("y"),t=Le;function vt(e){return function(){return this.isValid()?this._data[e]:NaN}}var o=vt("milliseconds"),n=vt("seconds"),i=vt("minutes"),ze=vt("hours"),M=vt("days"),jt=vt("months"),xt=vt("years");var Pt=Math.round,Ot={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function Wt(e,a,t,s){var n=Xa(e).abs(),r=Pt(n.as("s")),d=Pt(n.as("m")),_=Pt(n.as("h")),i=Pt(n.as("d")),o=Pt(n.as("M")),m=Pt(n.as("w")),n=Pt(n.as("y")),r=(r<=t.ss?["s",r]:r<t.s&&["ss",r])||(d<=1?["m"]:d<t.m&&["mm",d])||(_<=1?["h"]:_<t.h&&["hh",_])||(i<=1?["d"]:i<t.d&&["dd",i]);return(r=(r=null!=t.w?r||(m<=1?["w"]:m<t.w&&["ww",m]):r)||(o<=1?["M"]:o<t.M&&["MM",o])||(n<=1?["y"]:["yy",n]))[2]=a,r[3]=0<+e,r[4]=s,function(e,a,t,s,n){return n.relativeTime(a||1,!!t,e,s)}.apply(null,r)}var At=Math.abs;function Et(e){return(0<e)-(e<0)||+e}function Ft(){var e,a,t,s,n,r,d,_,i,o,m;return this.isValid()?(e=At(this._milliseconds)/1e3,a=At(this._days),t=At(this._months),(_=this.asSeconds())?(s=y(e/60),n=y(s/60),e%=60,s%=60,r=y(t/12),t%=12,d=e?e.toFixed(3).replace(/\.?0+$/,""):"",i=Et(this._months)!==Et(_)?"-":"",o=Et(this._days)!==Et(_)?"-":"",m=Et(this._milliseconds)!==Et(_)?"-":"",(_<0?"-":"")+"P"+(r?i+r+"Y":"")+(t?i+t+"M":"")+(a?o+a+"D":"")+(n||s||e?"T":"")+(n?m+n+"H":"")+(s?m+s+"M":"")+(e?m+d+"S":"")):"P0D"):this.localeData().invalidDate()}function zt(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function b(d){return function(e,a,t,s){var n=zt(e),r=Rt[d][zt(e)];return(r=2===n?r[a?0:1]:r).replace(/%d/i,e)}}function Nt(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function H(d){return function(e,a,t,s){var n=Nt(e),r=It[d][Nt(e)];return(r=2===n?r[a?0:1]:r).replace(/%d/i,e)}}function Jt(e){return 0===e?0:1===e?1:2===e?2:3<=e%100&&e%100<=10?3:11<=e%100?4:5}function S(d){return function(e,a,t,s){var n=Jt(e),r=Zt[d][Jt(e)];return(r=2===n?r[a?0:1]:r).replace(/%d/i,e)}}var v=Ca.prototype,Rt=(v.isValid=function(){return this._isValid},v.abs=function(){var e=this._data;return this._milliseconds=Tt(this._milliseconds),this._days=Tt(this._days),this._months=Tt(this._months),e.milliseconds=Tt(e.milliseconds),e.seconds=Tt(e.seconds),e.minutes=Tt(e.minutes),e.hours=Tt(e.hours),e.months=Tt(e.months),e.years=Tt(e.years),this},v.add=function(e,a){return gt(this,e,a,1)},v.subtract=function(e,a){return gt(this,e,a,-1)},v.as=function(e){if(!this.isValid())return NaN;var a,t,s=this._milliseconds;if("month"===(e=d(e))||"quarter"===e||"year"===e)switch(a=this._days+s/864e5,t=this._months+bt(a),e){case"month":return t;case"quarter":return t/3;case"year":return t/12}else switch(a=this._days+Math.round(Ht(this._months)),e){case"week":return a/7+s/6048e5;case"day":return a+s/864e5;case"hour":return 24*a+s/36e5;case"minute":return 1440*a+s/6e4;case"second":return 86400*a+s/1e3;case"millisecond":return Math.floor(864e5*a)+s;default:throw new Error("Unknown unit "+e)}},v.asMilliseconds=Le,v.asSeconds=a,v.asMinutes=fe,v.asHours=Ye,v.asDays=Ie,v.asWeeks=_,v.asMonths=ye,v.asQuarters=na,v.asYears=m,v.valueOf=t,v._bubble=function(){var e=this._milliseconds,a=this._days,t=this._months,s=this._data;return 0<=e&&0<=a&&0<=t||e<=0&&a<=0&&t<=0||(e+=864e5*wt(Ht(t)+a),t=a=0),s.milliseconds=e%1e3,e=y(e/1e3),s.seconds=e%60,e=y(e/60),s.minutes=e%60,e=y(e/60),s.hours=e%24,a+=y(e/24),t+=e=y(bt(a)),a-=wt(Ht(e)),e=y(t/12),t%=12,s.days=a,s.months=t,s.years=e,this},v.clone=function(){return Xa(this)},v.get=function(e){return e=d(e),this.isValid()?this[e+"s"]():NaN},v.milliseconds=o,v.seconds=n,v.minutes=i,v.hours=ze,v.days=M,v.weeks=function(){return y(this.days()/7)},v.months=jt,v.years=xt,v.humanize=function(e,a){var t,s;return this.isValid()?(t=!1,s=Ot,"object"==typeof e&&(a=e,e=!1),"boolean"==typeof e&&(t=e),"object"==typeof a&&(s=Object.assign({},Ot,a),null!=a.s)&&null==a.ss&&(s.ss=a.s-1),e=this.localeData(),a=Wt(this,!t,s,e),t&&(a=e.pastFuture(+this,a)),e.postformat(a)):this.localeData().invalidDate()},v.toISOString=Ft,v.toString=Ft,v.toJSON=Ft,v.locale=_t,v.localeData=it,v.toIsoString=e("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Ft),v.lang=da,s("X",0,0,"unix"),s("x",0,0,"valueOf"),h("x",pe),h("X",/[+-]?\d+(\.\d{1,3})?/),k("X",function(e,a,t){t._d=new Date(1e3*parseFloat(e))}),k("x",function(e,a,t){t._d=new Date(f(e))}),c.version="2.30.1",E=w,c.fn=u,c.min=function(){return Ja("isBefore",[].slice.call(arguments,0))},c.max=function(){return Ja("isAfter",[].slice.call(arguments,0))},c.now=function(){return Date.now?Date.now():+new Date},c.utc=U,c.unix=function(e){return w(1e3*e)},c.months=function(e,a){return pt(e,a,"months")},c.isDate=R,c.locale=ka,c.invalid=V,c.duration=Xa,c.isMoment=Q,c.weekdays=function(e,a,t){return Dt(e,a,t,"weekdays")},c.parseZone=function(){return w.apply(null,arguments).parseZone()},c.localeData=Da,c.isDuration=Ia,c.monthsShort=function(e,a){return pt(e,a,"monthsShort")},c.weekdaysMin=function(e,a,t){return Dt(e,a,t,"weekdaysMin")},c.defineLocale=pa,c.updateLocale=function(e,a){var t,s;return null!=a?(s=ca,null!=g[e]&&null!=g[e].parentLocale?g[e].set(se(g[e]._config,a)):(a=se(s=null!=(t=fa(e))?t._config:s,a),null==t&&(a.abbr=e),(s=new ne(a)).parentLocale=g[e],g[e]=s),ka(e)):null!=g[e]&&(null!=g[e].parentLocale?(g[e]=g[e].parentLocale,e===ka()&&ka(e)):null!=g[e]&&delete g[e]),g[e]},c.locales=function(){return re(g)},c.weekdaysShort=function(e,a,t){return Dt(e,a,t,"weekdaysShort")},c.normalizeUnits=d,c.relativeTimeRounding=function(e){return void 0===e?Pt:"function"==typeof e&&(Pt=e,!0)},c.relativeTimeThreshold=function(e,a){return void 0!==Ot[e]&&(void 0===a?Ot[e]:(Ot[e]=a,"s"===e&&(Ot.ss=a-1),!0))},c.calendarFormat=function(e,a){return(e=e.diff(a,"days",!0))<-6?"sameElse":e<-1?"lastWeek":e<0?"lastDay":e<1?"sameDay":e<2?"nextDay":e<7?"nextWeek":"sameElse"},c.prototype=u,c.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"},c.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,a,t){return e<12?t?"vm":"VM":t?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[M\xf4re om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}}),{s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]}),Le=["\u062c\u0627\u0646\u0641\u064a","\u0641\u064a\u0641\u0631\u064a","\u0645\u0627\u0631\u0633","\u0623\u0641\u0631\u064a\u0644","\u0645\u0627\u064a","\u062c\u0648\u0627\u0646","\u062c\u0648\u064a\u0644\u064a\u0629","\u0623\u0648\u062a","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"],Ct=(c.defineLocale("ar-dz",{months:Le,monthsShort:Le,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:b("s"),ss:b("s"),m:b("m"),mm:b("m"),h:b("h"),hh:b("h"),d:b("d"),dd:b("d"),M:b("M"),MM:b("M"),y:b("y"),yy:b("y")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:0,doy:4}}),c.defineLocale("ar-kw",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062a\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062a\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:0,doy:12}}),{1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"}),It={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},a=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"],Ut=(c.defineLocale("ar-ly",{months:a,monthsShort:a,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:H("s"),ss:H("s"),m:H("m"),mm:H("m"),h:H("h"),hh:H("h"),d:H("d"),dd:H("d"),M:H("M"),MM:H("M"),y:H("y"),yy:H("y")},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return Ct[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}}),c.defineLocale("ar-ma",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}}),{1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"}),Gt={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},Vt=(c.defineLocale("ar-ps",{months:"\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u062b\u0627\u0646\u064a_\u0634\u0628\u0627\u0637_\u0622\u0630\u0627\u0631_\u0646\u064a\u0633\u0627\u0646_\u0623\u064a\u0651\u0627\u0631_\u062d\u0632\u064a\u0631\u0627\u0646_\u062a\u0645\u0651\u0648\u0632_\u0622\u0628_\u0623\u064a\u0644\u0648\u0644_\u062a\u0634\u0631\u064a \u0627\u0644\u0623\u0648\u0651\u0644_\u062a\u0634\u0631\u064a\u0646 \u0627\u0644\u062b\u0627\u0646\u064a_\u0643\u0627\u0646\u0648\u0646 \u0627\u0644\u0623\u0648\u0651\u0644".split("_"),monthsShort:"\u0643\u0662_\u0634\u0628\u0627\u0637_\u0622\u0630\u0627\u0631_\u0646\u064a\u0633\u0627\u0646_\u0623\u064a\u0651\u0627\u0631_\u062d\u0632\u064a\u0631\u0627\u0646_\u062a\u0645\u0651\u0648\u0632_\u0622\u0628_\u0623\u064a\u0644\u0648\u0644_\u062a\u0661_\u062a\u0662_\u0643\u0661".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},preparse:function(e){return e.replace(/[\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return Gt[e]}).split("").reverse().join("").replace(/[\u0661\u0662](?![\u062a\u0643])/g,function(e){return Gt[e]}).split("").reverse().join("").replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return Ut[e]}).replace(/,/g,"\u060c")},week:{dow:0,doy:6}}),{1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"}),qt={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},Bt=(c.defineLocale("ar-sa",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return qt[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return Vt[e]}).replace(/,/g,"\u060c")},week:{dow:0,doy:6}}),c.defineLocale("ar-tn",{months:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}}),{1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"}),Kt={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},Zt={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},fe=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"],$t=(c.defineLocale("ar",{months:fe,monthsShort:fe,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:S("s"),ss:S("s"),m:S("m"),mm:S("m"),h:S("h"),hh:S("h"),d:S("d"),dd:S("d"),M:S("M"),MM:S("M"),y:S("y"),yy:S("y")},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return Kt[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return Bt[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}}),{1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-\xfcnc\xfc",4:"-\xfcnc\xfc",100:"-\xfcnc\xfc",6:"-nc\u0131",9:"-uncu",10:"-uncu",30:"-uncu",60:"-\u0131nc\u0131",90:"-\u0131nc\u0131"});function Qt(e,a,t){return"m"===t?a?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443":"h"===t?a?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443":e+" "+(e=+e,a=(a={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d",hh:a?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d",dd:"\u0434\u0437\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u0437\u0451\u043d",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u044b_\u043c\u0435\u0441\u044f\u0446\u0430\u045e",yy:"\u0433\u043e\u0434_\u0433\u0430\u0434\u044b_\u0433\u0430\u0434\u043e\u045e"}[t]).split("_"),e%10==1&&e%100!=11?a[0]:2<=e%10&&e%10<=4&&(e%100<10||20<=e%100)?a[1]:a[2])}c.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ert\u0259si_\xc7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131_\xc7\u0259r\u015f\u0259nb\u0259_C\xfcm\u0259 ax\u015fam\u0131_C\xfcm\u0259_\u015e\u0259nb\u0259".split("_"),weekdaysShort:"Baz_BzE_\xc7Ax_\xc7\u0259r_CAx_C\xfcm_\u015e\u0259n".split("_"),weekdaysMin:"Bz_BE_\xc7A_\xc7\u0259_CA_C\xfc_\u015e\u0259".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[g\u0259l\u0259n h\u0259ft\u0259] dddd [saat] LT",lastDay:"[d\xfcn\u0259n] LT",lastWeek:"[ke\xe7\u0259n h\u0259ft\u0259] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \u0259vv\u0259l",s:"bir ne\xe7\u0259 saniy\u0259",ss:"%d saniy\u0259",m:"bir d\u0259qiq\u0259",mm:"%d d\u0259qiq\u0259",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gec\u0259|s\u0259h\u0259r|g\xfcnd\xfcz|ax\u015fam/,isPM:function(e){return/^(g\xfcnd\xfcz|ax\u015fam)$/.test(e)},meridiem:function(e,a,t){return e<4?"gec\u0259":e<12?"s\u0259h\u0259r":e<17?"g\xfcnd\xfcz":"ax\u015fam"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0131nc\u0131|inci|nci|\xfcnc\xfc|nc\u0131|uncu)/,ordinal:function(e){var a;return 0===e?e+"-\u0131nc\u0131":e+($t[a=e%10]||$t[e%100-a]||$t[100<=e?100:null])},week:{dow:1,doy:7}}),c.defineLocale("be",{months:{format:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f_\u043b\u044e\u0442\u0430\u0433\u0430_\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430_\u0442\u0440\u0430\u045e\u043d\u044f_\u0447\u044d\u0440\u0432\u0435\u043d\u044f_\u043b\u0456\u043f\u0435\u043d\u044f_\u0436\u043d\u0456\u045e\u043d\u044f_\u0432\u0435\u0440\u0430\u0441\u043d\u044f_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430_\u0441\u043d\u0435\u0436\u043d\u044f".split("_"),standalone:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044c_\u043b\u044e\u0442\u044b_\u0441\u0430\u043a\u0430\u0432\u0456\u043a_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u044d\u0440\u0432\u0435\u043d\u044c_\u043b\u0456\u043f\u0435\u043d\u044c_\u0436\u043d\u0456\u0432\u0435\u043d\u044c_\u0432\u0435\u0440\u0430\u0441\u0435\u043d\u044c_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434_\u0441\u043d\u0435\u0436\u0430\u043d\u044c".split("_")},monthsShort:"\u0441\u0442\u0443\u0434_\u043b\u044e\u0442_\u0441\u0430\u043a_\u043a\u0440\u0430\u0441_\u0442\u0440\u0430\u0432_\u0447\u044d\u0440\u0432_\u043b\u0456\u043f_\u0436\u043d\u0456\u0432_\u0432\u0435\u0440_\u043a\u0430\u0441\u0442_\u043b\u0456\u0441\u0442_\u0441\u043d\u0435\u0436".split("_"),weekdays:{format:"\u043d\u044f\u0434\u0437\u0435\u043b\u044e_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0443_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0443_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),standalone:"\u043d\u044f\u0434\u0437\u0435\u043b\u044f_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0430_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0430_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),isFormat:/\[ ?[\u0423\u0443\u045e] ?(?:\u043c\u0456\u043d\u0443\u043b\u0443\u044e|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0443\u044e)? ?\] ?dddd/},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., HH:mm",LLLL:"dddd, D MMMM YYYY \u0433., HH:mm"},calendar:{sameDay:"[\u0421\u0451\u043d\u043d\u044f \u045e] LT",nextDay:"[\u0417\u0430\u045e\u0442\u0440\u0430 \u045e] LT",lastDay:"[\u0423\u0447\u043e\u0440\u0430 \u045e] LT",nextWeek:function(){return"[\u0423] dddd [\u045e] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u0443\u044e] dddd [\u045e] LT";case 1:case 2:case 4:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u044b] dddd [\u045e] LT"}},sameElse:"L"},relativeTime:{future:"\u043f\u0440\u0430\u0437 %s",past:"%s \u0442\u0430\u043c\u0443",s:"\u043d\u0435\u043a\u0430\u043b\u044c\u043a\u0456 \u0441\u0435\u043a\u0443\u043d\u0434",m:Qt,mm:Qt,h:Qt,hh:Qt,d:"\u0434\u0437\u0435\u043d\u044c",dd:Qt,M:"\u043c\u0435\u0441\u044f\u0446",MM:Qt,y:"\u0433\u043e\u0434",yy:Qt},meridiemParse:/\u043d\u043e\u0447\u044b|\u0440\u0430\u043d\u0456\u0446\u044b|\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430)$/.test(e)},meridiem:function(e,a,t){return e<4?"\u043d\u043e\u0447\u044b":e<12?"\u0440\u0430\u043d\u0456\u0446\u044b":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0430\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0456|\u044b|\u0433\u0430)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-\u044b":e+"-\u0456";case"D":return e+"-\u0433\u0430";default:return e}},week:{dow:1,doy:7}}),c.defineLocale("bg",{months:"\u044f\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u044f\u043d\u0443_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u044f\u0434\u0430_\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a_\u043f\u0435\u0442\u044a\u043a_\u0441\u044a\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u044f_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u044a\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u043d\u0435\u0441 \u0432] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432] LT",nextWeek:"dddd [\u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u041c\u0438\u043d\u0430\u043b\u0430\u0442\u0430] dddd [\u0432] LT";case 1:case 2:case 4:case 5:return"[\u041c\u0438\u043d\u0430\u043b\u0438\u044f] dddd [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0441\u043b\u0435\u0434 %s",past:"\u043f\u0440\u0435\u0434\u0438 %s",s:"\u043d\u044f\u043a\u043e\u043b\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",w:"\u0441\u0435\u0434\u043c\u0438\u0446\u0430",ww:"%d \u0441\u0435\u0434\u043c\u0438\u0446\u0438",M:"\u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0430",y:"\u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+"-\u0435\u0432":0==t?e+"-\u0435\u043d":10<t&&t<20?e+"-\u0442\u0438":1==a?e+"-\u0432\u0438":2==a?e+"-\u0440\u0438":7==a||8==a?e+"-\u043c\u0438":e+"-\u0442\u0438"},week:{dow:1,doy:7}}),c.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_M\u025bkalo_Zuw\u025bnkalo_Zuluyekalo_Utikalo_S\u025btanburukalo_\u0254kut\u0254burukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_M\u025b_Zuw_Zul_Uti_S\u025bt_\u0254ku_Now_Des".split("_"),weekdays:"Kari_Nt\u025bn\u025bn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Nt\u025b_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm"},calendar:{sameDay:"[Bi l\u025br\u025b] LT",nextDay:"[Sini l\u025br\u025b] LT",nextWeek:"dddd [don l\u025br\u025b] LT",lastDay:"[Kunu l\u025br\u025b] LT",lastWeek:"dddd [t\u025bm\u025bnen l\u025br\u025b] LT",sameElse:"L"},relativeTime:{future:"%s k\u0254n\u0254",past:"a b\u025b %s b\u0254",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"l\u025br\u025b kelen",hh:"l\u025br\u025b %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}});var Xt={1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"},es={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"},as=(c.defineLocale("bn-bd",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09bf_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(e){return e.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,function(e){return es[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Xt[e]})},meridiemParse:/\u09b0\u09be\u09a4|\u09ad\u09cb\u09b0|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be|\u09b0\u09be\u09a4/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u09b0\u09be\u09a4"===a?e<4?e:e+12:"\u09ad\u09cb\u09b0"===a||"\u09b8\u0995\u09be\u09b2"===a?e:"\u09a6\u09c1\u09aa\u09c1\u09b0"===a?3<=e?e:e+12:"\u09ac\u09bf\u0995\u09be\u09b2"===a||"\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u09b0\u09be\u09a4":e<6?"\u09ad\u09cb\u09b0":e<12?"\u09b8\u0995\u09be\u09b2":e<15?"\u09a6\u09c1\u09aa\u09c1\u09b0":e<18?"\u09ac\u09bf\u0995\u09be\u09b2":e<20?"\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}}),{1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"}),ts={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"},ss=(c.defineLocale("bn",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09bf_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(e){return e.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,function(e){return ts[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return as[e]})},meridiemParse:/\u09b0\u09be\u09a4|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b0\u09be\u09a4/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u09b0\u09be\u09a4"===a&&4<=e||"\u09a6\u09c1\u09aa\u09c1\u09b0"===a&&e<5||"\u09ac\u09bf\u0995\u09be\u09b2"===a?e+12:e},meridiem:function(e,a,t){return e<4?"\u09b0\u09be\u09a4":e<10?"\u09b8\u0995\u09be\u09b2":e<17?"\u09a6\u09c1\u09aa\u09c1\u09b0":e<20?"\u09ac\u09bf\u0995\u09be\u09b2":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}}),{1:"\u0f21",2:"\u0f22",3:"\u0f23",4:"\u0f24",5:"\u0f25",6:"\u0f26",7:"\u0f27",8:"\u0f28",9:"\u0f29",0:"\u0f20"}),ns={"\u0f21":"1","\u0f22":"2","\u0f23":"3","\u0f24":"4","\u0f25":"5","\u0f26":"6","\u0f27":"7","\u0f28":"8","\u0f29":"9","\u0f20":"0"};function rs(e,a,t){return e+" "+(t={mm:"munutenn",MM:"miz",dd:"devezh"}[t],2!==(e=e)?t:void 0!==(e={m:"v",b:"v",d:"z"})[(t=t).charAt(0)]?e[t.charAt(0)]+t.substring(1):t)}c.defineLocale("bo",{months:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54".split("_"),monthsShort:"\u0f5f\u0fb3\u0f0b1_\u0f5f\u0fb3\u0f0b2_\u0f5f\u0fb3\u0f0b3_\u0f5f\u0fb3\u0f0b4_\u0f5f\u0fb3\u0f0b5_\u0f5f\u0fb3\u0f0b6_\u0f5f\u0fb3\u0f0b7_\u0f5f\u0fb3\u0f0b8_\u0f5f\u0fb3\u0f0b9_\u0f5f\u0fb3\u0f0b10_\u0f5f\u0fb3\u0f0b11_\u0f5f\u0fb3\u0f0b12".split("_"),monthsShortRegex:/^(\u0f5f\u0fb3\u0f0b\d{1,2})/,monthsParseExact:!0,weekdays:"\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysShort:"\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysMin:"\u0f49\u0f72_\u0f5f\u0fb3_\u0f58\u0f72\u0f42_\u0f63\u0fb7\u0f42_\u0f55\u0f74\u0f62_\u0f66\u0f44\u0f66_\u0f66\u0fa4\u0f7a\u0f53".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0f51\u0f72\u0f0b\u0f62\u0f72\u0f44] LT",nextDay:"[\u0f66\u0f44\u0f0b\u0f49\u0f72\u0f53] LT",nextWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f62\u0f97\u0f7a\u0f66\u0f0b\u0f58], LT",lastDay:"[\u0f41\u0f0b\u0f66\u0f44] LT",lastWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f58\u0f50\u0f60\u0f0b\u0f58] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0f63\u0f0b",past:"%s \u0f66\u0f94\u0f53\u0f0b\u0f63",s:"\u0f63\u0f58\u0f0b\u0f66\u0f44",ss:"%d \u0f66\u0f90\u0f62\u0f0b\u0f46\u0f0d",m:"\u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b\u0f42\u0f45\u0f72\u0f42",mm:"%d \u0f66\u0f90\u0f62\u0f0b\u0f58",h:"\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b\u0f42\u0f45\u0f72\u0f42",hh:"%d \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51",d:"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f45\u0f72\u0f42",dd:"%d \u0f49\u0f72\u0f53\u0f0b",M:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f45\u0f72\u0f42",MM:"%d \u0f5f\u0fb3\u0f0b\u0f56",y:"\u0f63\u0f7c\u0f0b\u0f42\u0f45\u0f72\u0f42",yy:"%d \u0f63\u0f7c"},preparse:function(e){return e.replace(/[\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u0f20]/g,function(e){return ns[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return ss[e]})},meridiemParse:/\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c|\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66|\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44|\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42|\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"===a&&4<=e||"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44"===a&&e<5||"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42"===a?e+12:e},meridiem:function(e,a,t){return e<4?"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c":e<10?"\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66":e<17?"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44":e<20?"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42":"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"},week:{dow:0,doy:6}});Ye=[/^gen/i,/^c[\u02bc\']hwe/i,/^meu/i,/^ebr/i,/^mae/i,/^(mez|eve)/i,/^gou/i,/^eos/i,/^gwe/i,/^her/i,/^du/i,/^ker/i],Ie=/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,_=[/^Su/i,/^Lu/i,/^Me([^r]|$)/i,/^Mer/i,/^Ya/i,/^Gw/i,/^Sa/i];function ds(e,a,t){var s=e+" ";switch(t){case"ss":return s+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"mm":return s+=1!==e&&(2===e||3===e||4===e)?"minute":"minuta";case"h":return"jedan sat";case"hh":return s+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return s+=1===e?"dan":"dana";case"MM":return s+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return s+=1!==e&&(2===e||3===e||4===e)?"godine":"godina"}}c.defineLocale("br",{months:"Genver_C\u02bchwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C\u02bchwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc\u02bcher_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParse:_,fullWeekdaysParse:[/^sul/i,/^lun/i,/^meurzh/i,/^merc[\u02bc\']her/i,/^yaou/i,/^gwener/i,/^sadorn/i],shortWeekdaysParse:[/^Sul/i,/^Lun/i,/^Meu/i,/^Mer/i,/^Yao/i,/^Gwe/i,/^Sad/i],minWeekdaysParse:_,monthsRegex:Ie,monthsShortRegex:Ie,monthsStrictRegex:/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,monthsShortStrictRegex:/^(gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,monthsParse:Ye,longMonthsParse:Ye,shortMonthsParse:Ye,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY HH:mm",LLLL:"dddd, D [a viz] MMMM YYYY HH:mm"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc\u02bchoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec\u02bch da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s \u02bczo",s:"un nebeud segondenno\xf9",ss:"%d eilenn",m:"ur vunutenn",mm:rs,h:"un eur",hh:"%d eur",d:"un devezh",dd:rs,M:"ur miz",MM:rs,y:"ur bloaz",yy:function(e){switch(function e(a){if(9<a)return e(a%10);return a}(e)){case 1:case 3:case 4:case 5:case 9:return e+" bloaz";default:return e+" vloaz"}}},dayOfMonthOrdinalParse:/\d{1,2}(a\xf1|vet)/,ordinal:function(e){return e+(1===e?"a\xf1":"vet")},week:{dow:1,doy:4},meridiemParse:/a.m.|g.m./,isPM:function(e){return"g.m."===e},meridiem:function(e,a,t){return e<12?"a.m.":"g.m."}}),c.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[pro\u0161lu] dddd [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:ds,m:function(e,a,t,s){switch(t){case"m":return a?"jedna minuta":s?"jednu minutu":"jedne minute"}},mm:ds,h:ds,hh:ds,d:"dan",dd:ds,M:"mjesec",MM:ds,y:"godinu",yy:ds},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),c.defineLocale("ca",{months:{standalone:"gener_febrer_mar\xe7_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de mar\xe7_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[dem\xe0 a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(e,a){return e+("w"!==a&&"W"!==a?1===e?"r":2===e?"n":3===e?"r":4===e?"t":"\xe8":"a")},week:{dow:1,doy:4}});ye={standalone:"leden_\xfanor_b\u0159ezen_duben_kv\u011bten_\u010derven_\u010dervenec_srpen_z\xe1\u0159\xed_\u0159\xedjen_listopad_prosinec".split("_"),format:"ledna_\xfanora_b\u0159ezna_dubna_kv\u011btna_\u010dervna_\u010dervence_srpna_z\xe1\u0159\xed_\u0159\xedjna_listopadu_prosince".split("_"),isFormat:/DD?[o.]?(\[[^\[\]]*\]|\s)+MMMM/},na="led_\xfano_b\u0159e_dub_kv\u011b_\u010dvn_\u010dvc_srp_z\xe1\u0159_\u0159\xedj_lis_pro".split("_"),m=[/^led/i,/^\xfano/i,/^b\u0159e/i,/^dub/i,/^kv\u011b/i,/^(\u010dvn|\u010derven$|\u010dervna)/i,/^(\u010dvc|\u010dervenec|\u010dervence)/i,/^srp/i,/^z\xe1\u0159/i,/^\u0159\xedj/i,/^lis/i,/^pro/i],t=/^(leden|\xfanor|b\u0159ezen|duben|kv\u011bten|\u010dervenec|\u010dervence|\u010derven|\u010dervna|srpen|z\xe1\u0159\xed|\u0159\xedjen|listopad|prosinec|led|\xfano|b\u0159e|dub|kv\u011b|\u010dvn|\u010dvc|srp|z\xe1\u0159|\u0159\xedj|lis|pro)/i;function _s(e){return 1<e&&e<5&&1!=~~(e/10)}function j(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"p\xe1r sekund":"p\xe1r sekundami";case"ss":return a||s?n+(_s(e)?"sekundy":"sekund"):n+"sekundami";case"m":return a?"minuta":s?"minutu":"minutou";case"mm":return a||s?n+(_s(e)?"minuty":"minut"):n+"minutami";case"h":return a?"hodina":s?"hodinu":"hodinou";case"hh":return a||s?n+(_s(e)?"hodiny":"hodin"):n+"hodinami";case"d":return a||s?"den":"dnem";case"dd":return a||s?n+(_s(e)?"dny":"dn\xed"):n+"dny";case"M":return a||s?"m\u011bs\xedc":"m\u011bs\xedcem";case"MM":return a||s?n+(_s(e)?"m\u011bs\xedce":"m\u011bs\xedc\u016f"):n+"m\u011bs\xedci";case"y":return a||s?"rok":"rokem";case"yy":return a||s?n+(_s(e)?"roky":"let"):n+"lety"}}function is(e,a,t,s){e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?e[t][0]:e[t][1]}function os(e,a,t,s){e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?e[t][0]:e[t][1]}function ms(e,a,t,s){e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return a?e[t][0]:e[t][1]}c.defineLocale("cs",{months:ye,monthsShort:na,monthsRegex:t,monthsShortRegex:t,monthsStrictRegex:/^(leden|ledna|\xfanora|\xfanor|b\u0159ezen|b\u0159ezna|duben|dubna|kv\u011bten|kv\u011btna|\u010dervenec|\u010dervence|\u010derven|\u010dervna|srpen|srpna|z\xe1\u0159\xed|\u0159\xedjen|\u0159\xedjna|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|\xfano|b\u0159e|dub|kv\u011b|\u010dvn|\u010dvc|srp|z\xe1\u0159|\u0159\xedj|lis|pro)/i,monthsParse:m,longMonthsParse:m,shortMonthsParse:m,weekdays:"ned\u011ble_pond\u011bl\xed_\xfater\xfd_st\u0159eda_\u010dtvrtek_p\xe1tek_sobota".split("_"),weekdaysShort:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),weekdaysMin:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[z\xedtra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v ned\u011bli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve st\u0159edu v] LT";case 4:return"[ve \u010dtvrtek v] LT";case 5:return"[v p\xe1tek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[v\u010dera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou ned\u011bli v] LT";case 1:case 2:return"[minul\xe9] dddd [v] LT";case 3:return"[minulou st\u0159edu v] LT";case 4:case 5:return"[minul\xfd] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"p\u0159ed %s",s:j,ss:j,m:j,mm:j,h:j,hh:j,d:j,dd:j,M:j,MM:j,y:j,yy:j},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),c.defineLocale("cv",{months:"\u043a\u04d1\u0440\u043b\u0430\u0447_\u043d\u0430\u0440\u04d1\u0441_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440\u0442\u043c\u0435_\u0443\u0442\u04d1_\u04ab\u0443\u0440\u043b\u0430_\u0430\u0432\u04d1\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448\u0442\u0430\u0432".split("_"),monthsShort:"\u043a\u04d1\u0440_\u043d\u0430\u0440_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440_\u0443\u0442\u04d1_\u04ab\u0443\u0440_\u0430\u0432\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448".split("_"),weekdays:"\u0432\u044b\u0440\u0441\u0430\u0440\u043d\u0438\u043a\u0443\u043d_\u0442\u0443\u043d\u0442\u0438\u043a\u0443\u043d_\u044b\u0442\u043b\u0430\u0440\u0438\u043a\u0443\u043d_\u044e\u043d\u043a\u0443\u043d_\u043a\u04d7\u04ab\u043d\u0435\u0440\u043d\u0438\u043a\u0443\u043d_\u044d\u0440\u043d\u0435\u043a\u0443\u043d_\u0448\u04d1\u043c\u0430\u0442\u043a\u0443\u043d".split("_"),weekdaysShort:"\u0432\u044b\u0440_\u0442\u0443\u043d_\u044b\u0442\u043b_\u044e\u043d_\u043a\u04d7\u04ab_\u044d\u0440\u043d_\u0448\u04d1\u043c".split("_"),weekdaysMin:"\u0432\u0440_\u0442\u043d_\u044b\u0442_\u044e\u043d_\u043a\u04ab_\u044d\u0440_\u0448\u043c".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7]",LLL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm",LLLL:"dddd, YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm"},calendar:{sameDay:"[\u041f\u0430\u044f\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextDay:"[\u042b\u0440\u0430\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastDay:"[\u04d6\u043d\u0435\u0440] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextWeek:"[\u04aa\u0438\u0442\u0435\u0441] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastWeek:"[\u0418\u0440\u0442\u043d\u04d7] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",sameElse:"L"},relativeTime:{future:function(e){return e+(/\u0441\u0435\u0445\u0435\u0442$/i.exec(e)?"\u0440\u0435\u043d":/\u04ab\u0443\u043b$/i.exec(e)?"\u0442\u0430\u043d":"\u0440\u0430\u043d")},past:"%s \u043a\u0430\u044f\u043b\u043b\u0430",s:"\u043f\u04d7\u0440-\u0438\u043a \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",ss:"%d \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",m:"\u043f\u04d7\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u043f\u04d7\u0440 \u0441\u0435\u0445\u0435\u0442",hh:"%d \u0441\u0435\u0445\u0435\u0442",d:"\u043f\u04d7\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u043f\u04d7\u0440 \u0443\u0439\u04d1\u0445",MM:"%d \u0443\u0439\u04d1\u0445",y:"\u043f\u04d7\u0440 \u04ab\u0443\u043b",yy:"%d \u04ab\u0443\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-\u043c\u04d7\u0448/,ordinal:"%d-\u043c\u04d7\u0448",week:{dow:1,doy:7}}),c.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn \xf4l",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(e){var a="";return 20<e?a=40===e||50===e||60===e||80===e||100===e?"fed":"ain":0<e&&(a=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][e]),e+a},week:{dow:1,doy:4}}),c.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8n_man_tir_ons_tor_fre_l\xf8r".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"p\xe5 dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"f\xe5 sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"et \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),c.defineLocale("de-at",{months:"J\xe4nner_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"J\xe4n._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:is,mm:"%d Minuten",h:is,hh:"%d Stunden",d:is,dd:is,w:is,ww:"%d Wochen",M:is,MM:is,y:is,yy:is},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),c.defineLocale("de-ch",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:os,mm:"%d Minuten",h:os,hh:"%d Stunden",d:os,dd:os,w:os,ww:"%d Wochen",M:os,MM:os,y:os,yy:os},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),c.defineLocale("de",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:ms,mm:"%d Minuten",h:ms,hh:"%d Stunden",d:ms,dd:ms,w:ms,ww:"%d Wochen",M:ms,MM:ms,y:ms,yy:ms},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});o=["\u0796\u07ac\u0782\u07aa\u0787\u07a6\u0783\u07a9","\u078a\u07ac\u0784\u07b0\u0783\u07aa\u0787\u07a6\u0783\u07a9","\u0789\u07a7\u0783\u07a8\u0797\u07aa","\u0787\u07ad\u0795\u07b0\u0783\u07a9\u078d\u07aa","\u0789\u07ad","\u0796\u07ab\u0782\u07b0","\u0796\u07aa\u078d\u07a6\u0787\u07a8","\u0787\u07af\u078e\u07a6\u0790\u07b0\u0793\u07aa","\u0790\u07ac\u0795\u07b0\u0793\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0787\u07ae\u0786\u07b0\u0793\u07af\u0784\u07a6\u0783\u07aa","\u0782\u07ae\u0788\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0791\u07a8\u0790\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa"],n=["\u0787\u07a7\u078b\u07a8\u0787\u07b0\u078c\u07a6","\u0780\u07af\u0789\u07a6","\u0787\u07a6\u0782\u07b0\u078e\u07a7\u0783\u07a6","\u0784\u07aa\u078b\u07a6","\u0784\u07aa\u0783\u07a7\u0790\u07b0\u078a\u07a6\u078c\u07a8","\u0780\u07aa\u0786\u07aa\u0783\u07aa","\u0780\u07ae\u0782\u07a8\u0780\u07a8\u0783\u07aa"];c.defineLocale("dv",{months:o,monthsShort:o,weekdays:n,weekdaysShort:n,weekdaysMin:"\u0787\u07a7\u078b\u07a8_\u0780\u07af\u0789\u07a6_\u0787\u07a6\u0782\u07b0_\u0784\u07aa\u078b\u07a6_\u0784\u07aa\u0783\u07a7_\u0780\u07aa\u0786\u07aa_\u0780\u07ae\u0782\u07a8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0789\u0786|\u0789\u078a/,isPM:function(e){return"\u0789\u078a"===e},meridiem:function(e,a,t){return e<12?"\u0789\u0786":"\u0789\u078a"},calendar:{sameDay:"[\u0789\u07a8\u0787\u07a6\u078b\u07aa] LT",nextDay:"[\u0789\u07a7\u078b\u07a6\u0789\u07a7] LT",nextWeek:"dddd LT",lastDay:"[\u0787\u07a8\u0787\u07b0\u0794\u07ac] LT",lastWeek:"[\u078a\u07a7\u0787\u07a8\u078c\u07aa\u0788\u07a8] dddd LT",sameElse:"L"},relativeTime:{future:"\u078c\u07ac\u0783\u07ad\u078e\u07a6\u0787\u07a8 %s",past:"\u0786\u07aa\u0783\u07a8\u0782\u07b0 %s",s:"\u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa\u0786\u07ae\u0785\u07ac\u0787\u07b0",ss:"d% \u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa",m:"\u0789\u07a8\u0782\u07a8\u0793\u07ac\u0787\u07b0",mm:"\u0789\u07a8\u0782\u07a8\u0793\u07aa %d",h:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07ac\u0787\u07b0",hh:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07aa %d",d:"\u078b\u07aa\u0788\u07a6\u0780\u07ac\u0787\u07b0",dd:"\u078b\u07aa\u0788\u07a6\u0790\u07b0 %d",M:"\u0789\u07a6\u0780\u07ac\u0787\u07b0",MM:"\u0789\u07a6\u0790\u07b0 %d",y:"\u0787\u07a6\u0780\u07a6\u0783\u07ac\u0787\u07b0",yy:"\u0787\u07a6\u0780\u07a6\u0783\u07aa %d"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:7,doy:12}}),c.defineLocale("el",{monthsNominativeEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2_\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2_\u039c\u03ac\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2_\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2_\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2_\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2".split("_"),monthsGenitiveEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5_\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5_\u039c\u03b1\u0390\u03bf\u03c5_\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5_\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5_\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5_\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5_\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5".split("_"),months:function(e,a){return e?("string"==typeof a&&/D/.test(a.substring(0,a.indexOf("MMMM")))?this._monthsGenitiveEl:this._monthsNominativeEl)[e.month()]:this._monthsNominativeEl},monthsShort:"\u0399\u03b1\u03bd_\u03a6\u03b5\u03b2_\u039c\u03b1\u03c1_\u0391\u03c0\u03c1_\u039c\u03b1\u03ca_\u0399\u03bf\u03c5\u03bd_\u0399\u03bf\u03c5\u03bb_\u0391\u03c5\u03b3_\u03a3\u03b5\u03c0_\u039f\u03ba\u03c4_\u039d\u03bf\u03b5_\u0394\u03b5\u03ba".split("_"),weekdays:"\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae_\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1_\u03a4\u03c1\u03af\u03c4\u03b7_\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7_\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7_\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae_\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf".split("_"),weekdaysShort:"\u039a\u03c5\u03c1_\u0394\u03b5\u03c5_\u03a4\u03c1\u03b9_\u03a4\u03b5\u03c4_\u03a0\u03b5\u03bc_\u03a0\u03b1\u03c1_\u03a3\u03b1\u03b2".split("_"),weekdaysMin:"\u039a\u03c5_\u0394\u03b5_\u03a4\u03c1_\u03a4\u03b5_\u03a0\u03b5_\u03a0\u03b1_\u03a3\u03b1".split("_"),meridiem:function(e,a,t){return 11<e?t?"\u03bc\u03bc":"\u039c\u039c":t?"\u03c0\u03bc":"\u03a0\u039c"},isPM:function(e){return"\u03bc"===(e+"").toLowerCase()[0]},meridiemParse:/[\u03a0\u039c]\.?\u039c?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[\u03a3\u03ae\u03bc\u03b5\u03c1\u03b1 {}] LT",nextDay:"[\u0391\u03cd\u03c1\u03b9\u03bf {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[\u03a7\u03b8\u03b5\u03c2 {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[\u03c4\u03bf \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf] dddd [{}] LT";default:return"[\u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03b7] dddd [{}] LT"}},sameElse:"L"},calendar:function(e,a){var t,e=this._calendarEl[e],s=a&&a.hours();return t=e,(e="undefined"!=typeof Function&&t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)?e.apply(a):e).replace("{}",s%12==1?"\u03c3\u03c4\u03b7":"\u03c3\u03c4\u03b9\u03c2")},relativeTime:{future:"\u03c3\u03b5 %s",past:"%s \u03c0\u03c1\u03b9\u03bd",s:"\u03bb\u03af\u03b3\u03b1 \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",ss:"%d \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",m:"\u03ad\u03bd\u03b1 \u03bb\u03b5\u03c0\u03c4\u03cc",mm:"%d \u03bb\u03b5\u03c0\u03c4\u03ac",h:"\u03bc\u03af\u03b1 \u03ce\u03c1\u03b1",hh:"%d \u03ce\u03c1\u03b5\u03c2",d:"\u03bc\u03af\u03b1 \u03bc\u03ad\u03c1\u03b1",dd:"%d \u03bc\u03ad\u03c1\u03b5\u03c2",M:"\u03ad\u03bd\u03b1\u03c2 \u03bc\u03ae\u03bd\u03b1\u03c2",MM:"%d \u03bc\u03ae\u03bd\u03b5\u03c2",y:"\u03ad\u03bd\u03b1\u03c2 \u03c7\u03c1\u03cc\u03bd\u03bf\u03c2",yy:"%d \u03c7\u03c1\u03cc\u03bd\u03b9\u03b1"},dayOfMonthOrdinalParse:/\d{1,2}\u03b7/,ordinal:"%d\u03b7",week:{dow:1,doy:4}}),c.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{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",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:0,doy:4}}),c.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{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",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")}}),c.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{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",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),c.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{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",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),c.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{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",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")}}),c.defineLocale("en-in",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{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",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:0,doy:6}}),c.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{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",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),c.defineLocale("en-sg",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{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",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),c.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_a\u016dgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mart_apr_maj_jun_jul_a\u016dg_sept_okt_nov_dec".split("_"),weekdays:"diman\u0109o_lundo_mardo_merkredo_\u0135a\u016ddo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_\u0135a\u016d_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_\u0135a_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"[la] D[-an de] MMMM, YYYY",LLL:"[la] D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd[n], [la] D[-an de] MMMM, YYYY HH:mm",llll:"ddd, [la] D[-an de] MMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(e){return"p"===e.charAt(0).toLowerCase()},meridiem:function(e,a,t){return 11<e?t?"p.t.m.":"P.T.M.":t?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodia\u016d je] LT",nextDay:"[Morga\u016d je] LT",nextWeek:"dddd[n je] LT",lastDay:"[Hiera\u016d je] LT",lastWeek:"[pasintan] dddd[n je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"anta\u016d %s",s:"kelkaj sekundoj",ss:"%d sekundoj",m:"unu minuto",mm:"%d minutoj",h:"unu horo",hh:"%d horoj",d:"unu tago",dd:"%d tagoj",M:"unu monato",MM:"%d monatoj",y:"unu jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}});var us="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),ls="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),i=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],ze=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,Ms=(c.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?(/-MMM-/.test(a)?ls:us)[e.month()]:us},monthsRegex:ze,monthsShortRegex:ze,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:i,longMonthsParse:i,shortMonthsParse:i,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_")),hs="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),M=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],jt=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,cs=(c.defineLocale("es-mx",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?(/-MMM-/.test(a)?hs:Ms)[e.month()]:Ms},monthsRegex:jt,monthsShortRegex:jt,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:M,longMonthsParse:M,shortMonthsParse:M,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:0,doy:4},invalidDate:"Fecha inv\xe1lida"}),"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_")),Ls="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),xt=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],v=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,Ys=(c.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?(/-MMM-/.test(a)?Ls:cs)[e.month()]:cs},monthsRegex:v,monthsShortRegex:v,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:xt,longMonthsParse:xt,shortMonthsParse:xt,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:0,doy:6}}),"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_")),ys="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),da=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],pe=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;function fs(e,a,t,s){e={s:["m\xf5ne sekundi","m\xf5ni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["\xfche minuti","\xfcks minut"],mm:[e+" minuti",e+" minutit"],h:["\xfche tunni","tund aega","\xfcks tund"],hh:[e+" tunni",e+" tundi"],d:["\xfche p\xe4eva","\xfcks p\xe4ev"],M:["kuu aja","kuu aega","\xfcks kuu"],MM:[e+" kuu",e+" kuud"],y:["\xfche aasta","aasta","\xfcks aasta"],yy:[e+" aasta",e+" aastat"]};return a?e[t][2]||e[t][1]:s?e[t][0]:e[t][1]}c.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,a){return e?(/-MMM-/.test(a)?ys:Ys)[e.month()]:Ys},monthsRegex:pe,monthsShortRegex:pe,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:da,longMonthsParse:da,shortMonthsParse:da,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4},invalidDate:"Fecha inv\xe1lida"}),c.defineLocale("et",{months:"jaanuar_veebruar_m\xe4rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_m\xe4rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"p\xfchap\xe4ev_esmasp\xe4ev_teisip\xe4ev_kolmap\xe4ev_neljap\xe4ev_reede_laup\xe4ev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[T\xe4na,] LT",nextDay:"[Homme,] LT",nextWeek:"[J\xe4rgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s p\xe4rast",past:"%s tagasi",s:fs,ss:fs,m:fs,mm:fs,h:fs,hh:fs,d:fs,dd:"%d p\xe4eva",M:fs,MM:fs,y:fs,yy:fs},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),c.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var ks={1:"\u06f1",2:"\u06f2",3:"\u06f3",4:"\u06f4",5:"\u06f5",6:"\u06f6",7:"\u06f7",8:"\u06f8",9:"\u06f9",0:"\u06f0"},ps={"\u06f1":"1","\u06f2":"2","\u06f3":"3","\u06f4":"4","\u06f5":"5","\u06f6":"6","\u06f7":"7","\u06f8":"8","\u06f9":"9","\u06f0":"0"},Ds=(c.defineLocale("fa",{months:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),monthsShort:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),weekdays:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysShort:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u062c_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631|\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/,isPM:function(e){return/\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/.test(e)},meridiem:function(e,a,t){return e<12?"\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631":"\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631"},calendar:{sameDay:"[\u0627\u0645\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",nextDay:"[\u0641\u0631\u062f\u0627 \u0633\u0627\u0639\u062a] LT",nextWeek:"dddd [\u0633\u0627\u0639\u062a] LT",lastDay:"[\u062f\u06cc\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",lastWeek:"dddd [\u067e\u06cc\u0634] [\u0633\u0627\u0639\u062a] LT",sameElse:"L"},relativeTime:{future:"\u062f\u0631 %s",past:"%s \u067e\u06cc\u0634",s:"\u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647",ss:"%d \u062b\u0627\u0646\u06cc\u0647",m:"\u06cc\u06a9 \u062f\u0642\u06cc\u0642\u0647",mm:"%d \u062f\u0642\u06cc\u0642\u0647",h:"\u06cc\u06a9 \u0633\u0627\u0639\u062a",hh:"%d \u0633\u0627\u0639\u062a",d:"\u06cc\u06a9 \u0631\u0648\u0632",dd:"%d \u0631\u0648\u0632",M:"\u06cc\u06a9 \u0645\u0627\u0647",MM:"%d \u0645\u0627\u0647",y:"\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/[\u06f0-\u06f9]/g,function(e){return ps[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return ks[e]}).replace(/,/g,"\u060c")},dayOfMonthOrdinalParse:/\d{1,2}\u0645/,ordinal:"%d\u0645",week:{dow:6,doy:12}}),"nolla yksi kaksi kolme nelj\xe4 viisi kuusi seitsem\xe4n kahdeksan yhdeks\xe4n".split(" ")),Ts=["nolla","yhden","kahden","kolmen","nelj\xe4n","viiden","kuuden",Ds[7],Ds[8],Ds[9]];function x(e,a,t,s){var n="";switch(t){case"s":return s?"muutaman sekunnin":"muutama sekunti";case"ss":n=s?"sekunnin":"sekuntia";break;case"m":return s?"minuutin":"minuutti";case"mm":n=s?"minuutin":"minuuttia";break;case"h":return s?"tunnin":"tunti";case"hh":n=s?"tunnin":"tuntia";break;case"d":return s?"p\xe4iv\xe4n":"p\xe4iv\xe4";case"dd":n=s?"p\xe4iv\xe4n":"p\xe4iv\xe4\xe4";break;case"M":return s?"kuukauden":"kuukausi";case"MM":n=s?"kuukauden":"kuukautta";break;case"y":return s?"vuoden":"vuosi";case"yy":n=s?"vuoden":"vuotta";break}return t=s,n=((e=e)<10?(t?Ts:Ds)[e]:e)+" "+n}c.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kes\xe4kuu_hein\xe4kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kes\xe4_hein\xe4_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[t\xe4n\xe4\xe4n] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s p\xe4\xe4st\xe4",past:"%s sitten",s:x,ss:x,m:x,mm:x,h:x,hh:x,d:x,dd:x,M:x,MM:x,y:x,yy:x},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),c.defineLocale("fil",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}}),c.defineLocale("fo",{months:"januar_februar_mars_apr\xedl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_m\xe1nadagur_t\xfdsdagur_mikudagur_h\xf3sdagur_fr\xedggjadagur_leygardagur".split("_"),weekdaysShort:"sun_m\xe1n_t\xfds_mik_h\xf3s_fr\xed_ley".split("_"),weekdaysMin:"su_m\xe1_t\xfd_mi_h\xf3_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[\xcd dag kl.] LT",nextDay:"[\xcd morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xcd gj\xe1r kl.] LT",lastWeek:"[s\xed\xf0stu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s s\xed\xf0ani",s:"f\xe1 sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein t\xedmi",hh:"%d t\xedmar",d:"ein dagur",dd:"%d dagar",M:"ein m\xe1na\xf0ur",MM:"%d m\xe1na\xf0ir",y:"eitt \xe1r",yy:"%d \xe1r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),c.defineLocale("fr-ca",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}}}),c.defineLocale("fr-ch",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}});var u=/(janv\.?|f\xe9vr\.?|mars|avr\.?|mai|juin|juil\.?|ao\xfbt|sept\.?|oct\.?|nov\.?|d\xe9c\.?|janvier|f\xe9vrier|mars|avril|mai|juin|juillet|ao\xfbt|septembre|octobre|novembre|d\xe9cembre)/i,Le=[/^janv/i,/^f\xe9vr/i,/^mars/i,/^avr/i,/^mai/i,/^juin/i,/^juil/i,/^ao\xfbt/i,/^sept/i,/^oct/i,/^nov/i,/^d\xe9c/i],gs=(c.defineLocale("fr",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsRegex:u,monthsShortRegex:u,monthsStrictRegex:/^(janvier|f\xe9vrier|mars|avril|mai|juin|juillet|ao\xfbt|septembre|octobre|novembre|d\xe9cembre)/i,monthsShortStrictRegex:/(janv\.?|f\xe9vr\.?|mars|avr\.?|mai|juin|juil\.?|ao\xfbt|sept\.?|oct\.?|nov\.?|d\xe9c\.?)/i,monthsParse:Le,longMonthsParse:Le,shortMonthsParse:Le,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",w:"une semaine",ww:"%d semaines",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,a){switch(a){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}}),"jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_")),ws="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");c.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(e,a){return e?(/-MMM-/.test(a)?ws:gs)[e.month()]:gs},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[\xf4fr\xfbne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien min\xfat",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}}),c.defineLocale("ga",{months:["Ean\xe1ir","Feabhra","M\xe1rta","Aibre\xe1n","Bealtaine","Meitheamh","I\xfail","L\xfanasa","Me\xe1n F\xf3mhair","Deireadh F\xf3mhair","Samhain","Nollaig"],monthsShort:["Ean","Feabh","M\xe1rt","Aib","Beal","Meith","I\xfail","L\xfan","M.F.","D.F.","Samh","Noll"],monthsParseExact:!0,weekdays:["D\xe9 Domhnaigh","D\xe9 Luain","D\xe9 M\xe1irt","D\xe9 C\xe9adaoin","D\xe9ardaoin","D\xe9 hAoine","D\xe9 Sathairn"],weekdaysShort:["Domh","Luan","M\xe1irt","C\xe9ad","D\xe9ar","Aoine","Sath"],weekdaysMin:["Do","Lu","M\xe1","C\xe9","D\xe9","A","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Inniu ag] LT",nextDay:"[Am\xe1rach ag] LT",nextWeek:"dddd [ag] LT",lastDay:"[Inn\xe9 ag] LT",lastWeek:"dddd [seo caite] [ag] LT",sameElse:"L"},relativeTime:{future:"i %s",past:"%s \xf3 shin",s:"c\xfapla soicind",ss:"%d soicind",m:"n\xf3im\xe9ad",mm:"%d n\xf3im\xe9ad",h:"uair an chloig",hh:"%d uair an chloig",d:"l\xe1",dd:"%d l\xe1",M:"m\xed",MM:"%d m\xedonna",y:"bliain",yy:"%d bliain"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}});function P(e,a,t,s){e={s:["\u0925\u094b\u0921\u092f\u093e \u0938\u0945\u0915\u0902\u0921\u093e\u0902\u0928\u0940","\u0925\u094b\u0921\u0947 \u0938\u0945\u0915\u0902\u0921"],ss:[e+" \u0938\u0945\u0915\u0902\u0921\u093e\u0902\u0928\u0940",e+" \u0938\u0945\u0915\u0902\u0921"],m:["\u090f\u0915\u093e \u092e\u093f\u0923\u091f\u093e\u0928","\u090f\u0915 \u092e\u093f\u0928\u0942\u091f"],mm:[e+" \u092e\u093f\u0923\u091f\u093e\u0902\u0928\u0940",e+" \u092e\u093f\u0923\u091f\u093e\u0902"],h:["\u090f\u0915\u093e \u0935\u0930\u093e\u0928","\u090f\u0915 \u0935\u0930"],hh:[e+" \u0935\u0930\u093e\u0902\u0928\u0940",e+" \u0935\u0930\u093e\u0902"],d:["\u090f\u0915\u093e \u0926\u093f\u0938\u093e\u0928","\u090f\u0915 \u0926\u0940\u0938"],dd:[e+" \u0926\u093f\u0938\u093e\u0902\u0928\u0940",e+" \u0926\u0940\u0938"],M:["\u090f\u0915\u093e \u092e\u094d\u0939\u092f\u0928\u094d\u092f\u093e\u0928","\u090f\u0915 \u092e\u094d\u0939\u092f\u0928\u094b"],MM:[e+" \u092e\u094d\u0939\u092f\u0928\u094d\u092f\u093e\u0928\u0940",e+" \u092e\u094d\u0939\u092f\u0928\u0947"],y:["\u090f\u0915\u093e \u0935\u0930\u094d\u0938\u093e\u0928","\u090f\u0915 \u0935\u0930\u094d\u0938"],yy:[e+" \u0935\u0930\u094d\u0938\u093e\u0902\u0928\u0940",e+" \u0935\u0930\u094d\u0938\u093e\u0902"]};return s?e[t][0]:e[t][1]}function bs(e,a,t,s){e={s:["thoddea sekondamni","thodde sekond"],ss:[e+" sekondamni",e+" sekond"],m:["eka mintan","ek minut"],mm:[e+" mintamni",e+" mintam"],h:["eka voran","ek vor"],hh:[e+" voramni",e+" voram"],d:["eka disan","ek dis"],dd:[e+" disamni",e+" dis"],M:["eka mhoinean","ek mhoino"],MM:[e+" mhoineamni",e+" mhoine"],y:["eka vorsan","ek voros"],yy:[e+" vorsamni",e+" vorsam"]};return s?e[t][0]:e[t][1]}c.defineLocale("gd",{months:["Am Faoilleach","An Gearran","Am M\xe0rt","An Giblean","An C\xe8itean","An t-\xd2gmhios","An t-Iuchar","An L\xf9nastal","An t-Sultain","An D\xe0mhair","An t-Samhain","An D\xf9bhlachd"],monthsShort:["Faoi","Gear","M\xe0rt","Gibl","C\xe8it","\xd2gmh","Iuch","L\xf9n","Sult","D\xe0mh","Samh","D\xf9bh"],monthsParseExact:!0,weekdays:["Did\xf2mhnaich","Diluain","Dim\xe0irt","Diciadain","Diardaoin","Dihaoine","Disathairne"],weekdaysShort:["Did","Dil","Dim","Dic","Dia","Dih","Dis"],weekdaysMin:["D\xf2","Lu","M\xe0","Ci","Ar","Ha","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-m\xe0ireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-d\xe8 aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"m\xecos",MM:"%d m\xecosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}}),c.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xu\xf1o_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xu\xf1._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_m\xe9rcores_xoves_venres_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._m\xe9r._xov._ven._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_m\xe9_xo_ve_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextDay:function(){return"[ma\xf1\xe1 "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"\xe1s":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"\xe1":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"\xe1s":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){return 0===e.indexOf("un")?"n"+e:"en "+e},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),c.defineLocale("gom-deva",{months:{standalone:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u0940\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u092f_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),format:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940\u091a\u094d\u092f\u093e_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940\u091a\u094d\u092f\u093e_\u092e\u093e\u0930\u094d\u091a\u093e\u091a\u094d\u092f\u093e_\u090f\u092a\u094d\u0930\u0940\u0932\u093e\u091a\u094d\u092f\u093e_\u092e\u0947\u092f\u093e\u091a\u094d\u092f\u093e_\u091c\u0942\u0928\u093e\u091a\u094d\u092f\u093e_\u091c\u0941\u0932\u092f\u093e\u091a\u094d\u092f\u093e_\u0911\u0917\u0938\u094d\u091f\u093e\u091a\u094d\u092f\u093e_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0911\u0915\u094d\u091f\u094b\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0921\u093f\u0938\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u0940._\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u092f\u0924\u093e\u0930_\u0938\u094b\u092e\u093e\u0930_\u092e\u0902\u0917\u0933\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u092c\u093f\u0930\u0947\u0938\u094d\u0924\u093e\u0930_\u0938\u0941\u0915\u094d\u0930\u093e\u0930_\u0936\u0947\u0928\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0906\u092f\u0924._\u0938\u094b\u092e._\u092e\u0902\u0917\u0933._\u092c\u0941\u0927._\u092c\u094d\u0930\u0947\u0938\u094d\u0924._\u0938\u0941\u0915\u094d\u0930._\u0936\u0947\u0928.".split("_"),weekdaysMin:"\u0906_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u092c\u094d\u0930\u0947_\u0938\u0941_\u0936\u0947".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",LTS:"A h:mm:ss [\u0935\u093e\u091c\u0924\u093e\u0902]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",llll:"ddd, D MMM YYYY, A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]"},calendar:{sameDay:"[\u0906\u092f\u091c] LT",nextDay:"[\u092b\u093e\u0932\u094d\u092f\u093e\u0902] LT",nextWeek:"[\u092b\u0941\u0921\u0932\u094b] dddd[,] LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092b\u093e\u091f\u0932\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s \u0906\u0926\u0940\u0902",s:P,ss:P,m:P,mm:P,h:P,hh:P,d:P,dd:P,M:P,MM:P,y:P,yy:P},dayOfMonthOrdinalParse:/\d{1,2}(\u0935\u0947\u0930)/,ordinal:function(e,a){switch(a){case"D":return e+"\u0935\u0947\u0930";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:0,doy:3},meridiemParse:/\u0930\u093e\u0924\u0940|\u0938\u0915\u093e\u0933\u0940\u0902|\u0926\u0928\u092a\u093e\u0930\u093e\u0902|\u0938\u093e\u0902\u091c\u0947/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924\u0940"===a?e<4?e:e+12:"\u0938\u0915\u093e\u0933\u0940\u0902"===a?e:"\u0926\u0928\u092a\u093e\u0930\u093e\u0902"===a?12<e?e:e+12:"\u0938\u093e\u0902\u091c\u0947"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0930\u093e\u0924\u0940":e<12?"\u0938\u0915\u093e\u0933\u0940\u0902":e<16?"\u0926\u0928\u092a\u093e\u0930\u093e\u0902":e<20?"\u0938\u093e\u0902\u091c\u0947":"\u0930\u093e\u0924\u0940"}}),c.defineLocale("gom-latn",{months:{standalone:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),format:"Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Fuddlo] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fattlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:bs,ss:bs,m:bs,mm:bs,h:bs,hh:bs,d:bs,dd:bs,M:bs,MM:bs,y:bs,yy:bs},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(e,a){switch(a){case"D":return e+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return e}},week:{dow:0,doy:3},meridiemParse:/rati|sokallim|donparam|sanje/,meridiemHour:function(e,a){return 12===e&&(e=0),"rati"===a?e<4?e:e+12:"sokallim"===a?e:"donparam"===a?12<e?e:e+12:"sanje"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"rati":e<12?"sokallim":e<16?"donparam":e<20?"sanje":"rati"}});var Hs={1:"\u0ae7",2:"\u0ae8",3:"\u0ae9",4:"\u0aea",5:"\u0aeb",6:"\u0aec",7:"\u0aed",8:"\u0aee",9:"\u0aef",0:"\u0ae6"},Ss={"\u0ae7":"1","\u0ae8":"2","\u0ae9":"3","\u0aea":"4","\u0aeb":"5","\u0aec":"6","\u0aed":"7","\u0aee":"8","\u0aef":"9","\u0ae6":"0"},vs=(c.defineLocale("gu",{months:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0_\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0_\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2_\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe\u0a88_\u0a91\u0a97\u0ab8\u0acd\u0a9f_\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0a91\u0a95\u0acd\u0a9f\u0acd\u0aac\u0ab0_\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0".split("_"),monthsShort:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1._\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1._\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf._\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe._\u0a91\u0a97._\u0ab8\u0aaa\u0acd\u0a9f\u0ac7._\u0a91\u0a95\u0acd\u0a9f\u0acd._\u0aa8\u0ab5\u0ac7._\u0aa1\u0abf\u0ab8\u0ac7.".split("_"),monthsParseExact:!0,weekdays:"\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0_\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0_\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0_\u0aac\u0ac1\u0aa7\u0acd\u0ab5\u0abe\u0ab0_\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0_\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0_\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0".split("_"),weekdaysShort:"\u0ab0\u0ab5\u0abf_\u0ab8\u0acb\u0aae_\u0aae\u0a82\u0a97\u0ab3_\u0aac\u0ac1\u0aa7\u0acd_\u0a97\u0ac1\u0ab0\u0ac1_\u0ab6\u0ac1\u0a95\u0acd\u0ab0_\u0ab6\u0aa8\u0abf".split("_"),weekdaysMin:"\u0ab0_\u0ab8\u0acb_\u0aae\u0a82_\u0aac\u0ac1_\u0a97\u0ac1_\u0ab6\u0ac1_\u0ab6".split("_"),longDateFormat:{LT:"A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LTS:"A h:mm:ss \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LLLL:"dddd, D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7"},calendar:{sameDay:"[\u0a86\u0a9c] LT",nextDay:"[\u0a95\u0abe\u0ab2\u0ac7] LT",nextWeek:"dddd, LT",lastDay:"[\u0a97\u0a87\u0a95\u0abe\u0ab2\u0ac7] LT",lastWeek:"[\u0aaa\u0abe\u0a9b\u0ab2\u0abe] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0aae\u0abe",past:"%s \u0aaa\u0ab9\u0ac7\u0ab2\u0abe",s:"\u0a85\u0aae\u0ac1\u0a95 \u0aaa\u0ab3\u0acb",ss:"%d \u0ab8\u0ac7\u0a95\u0a82\u0aa1",m:"\u0a8f\u0a95 \u0aae\u0abf\u0aa8\u0abf\u0a9f",mm:"%d \u0aae\u0abf\u0aa8\u0abf\u0a9f",h:"\u0a8f\u0a95 \u0a95\u0ab2\u0abe\u0a95",hh:"%d \u0a95\u0ab2\u0abe\u0a95",d:"\u0a8f\u0a95 \u0aa6\u0abf\u0ab5\u0ab8",dd:"%d \u0aa6\u0abf\u0ab5\u0ab8",M:"\u0a8f\u0a95 \u0aae\u0ab9\u0abf\u0aa8\u0acb",MM:"%d \u0aae\u0ab9\u0abf\u0aa8\u0acb",y:"\u0a8f\u0a95 \u0ab5\u0ab0\u0acd\u0ab7",yy:"%d \u0ab5\u0ab0\u0acd\u0ab7"},preparse:function(e){return e.replace(/[\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef\u0ae6]/g,function(e){return Ss[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Hs[e]})},meridiemParse:/\u0ab0\u0abe\u0aa4|\u0aac\u0aaa\u0acb\u0ab0|\u0ab8\u0ab5\u0abe\u0ab0|\u0ab8\u0abe\u0a82\u0a9c/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0ab0\u0abe\u0aa4"===a?e<4?e:e+12:"\u0ab8\u0ab5\u0abe\u0ab0"===a?e:"\u0aac\u0aaa\u0acb\u0ab0"===a?10<=e?e:e+12:"\u0ab8\u0abe\u0a82\u0a9c"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0ab0\u0abe\u0aa4":e<10?"\u0ab8\u0ab5\u0abe\u0ab0":e<17?"\u0aac\u0aaa\u0acb\u0ab0":e<20?"\u0ab8\u0abe\u0a82\u0a9c":"\u0ab0\u0abe\u0aa4"},week:{dow:0,doy:6}}),c.defineLocale("he",{months:"\u05d9\u05e0\u05d5\u05d0\u05e8_\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05d9\u05dc_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8_\u05e1\u05e4\u05d8\u05de\u05d1\u05e8_\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8_\u05e0\u05d5\u05d1\u05de\u05d1\u05e8_\u05d3\u05e6\u05de\u05d1\u05e8".split("_"),monthsShort:"\u05d9\u05e0\u05d5\u05f3_\u05e4\u05d1\u05e8\u05f3_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05f3_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05f3_\u05e1\u05e4\u05d8\u05f3_\u05d0\u05d5\u05e7\u05f3_\u05e0\u05d5\u05d1\u05f3_\u05d3\u05e6\u05de\u05f3".split("_"),weekdays:"\u05e8\u05d0\u05e9\u05d5\u05df_\u05e9\u05e0\u05d9_\u05e9\u05dc\u05d9\u05e9\u05d9_\u05e8\u05d1\u05d9\u05e2\u05d9_\u05d7\u05de\u05d9\u05e9\u05d9_\u05e9\u05d9\u05e9\u05d9_\u05e9\u05d1\u05ea".split("_"),weekdaysShort:"\u05d0\u05f3_\u05d1\u05f3_\u05d2\u05f3_\u05d3\u05f3_\u05d4\u05f3_\u05d5\u05f3_\u05e9\u05f3".split("_"),weekdaysMin:"\u05d0_\u05d1_\u05d2_\u05d3_\u05d4_\u05d5_\u05e9".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [\u05d1]MMMM YYYY",LLL:"D [\u05d1]MMMM YYYY HH:mm",LLLL:"dddd, D [\u05d1]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[\u05d4\u05d9\u05d5\u05dd \u05d1\u05be]LT",nextDay:"[\u05de\u05d7\u05e8 \u05d1\u05be]LT",nextWeek:"dddd [\u05d1\u05e9\u05e2\u05d4] LT",lastDay:"[\u05d0\u05ea\u05de\u05d5\u05dc \u05d1\u05be]LT",lastWeek:"[\u05d1\u05d9\u05d5\u05dd] dddd [\u05d4\u05d0\u05d7\u05e8\u05d5\u05df \u05d1\u05e9\u05e2\u05d4] LT",sameElse:"L"},relativeTime:{future:"\u05d1\u05e2\u05d5\u05d3 %s",past:"\u05dc\u05e4\u05e0\u05d9 %s",s:"\u05de\u05e1\u05e4\u05e8 \u05e9\u05e0\u05d9\u05d5\u05ea",ss:"%d \u05e9\u05e0\u05d9\u05d5\u05ea",m:"\u05d3\u05e7\u05d4",mm:"%d \u05d3\u05e7\u05d5\u05ea",h:"\u05e9\u05e2\u05d4",hh:function(e){return 2===e?"\u05e9\u05e2\u05ea\u05d9\u05d9\u05dd":e+" \u05e9\u05e2\u05d5\u05ea"},d:"\u05d9\u05d5\u05dd",dd:function(e){return 2===e?"\u05d9\u05d5\u05de\u05d9\u05d9\u05dd":e+" \u05d9\u05de\u05d9\u05dd"},M:"\u05d7\u05d5\u05d3\u05e9",MM:function(e){return 2===e?"\u05d7\u05d5\u05d3\u05e9\u05d9\u05d9\u05dd":e+" \u05d7\u05d5\u05d3\u05e9\u05d9\u05dd"},y:"\u05e9\u05e0\u05d4",yy:function(e){return 2===e?"\u05e9\u05e0\u05ea\u05d9\u05d9\u05dd":e%10==0&&10!==e?e+" \u05e9\u05e0\u05d4":e+" \u05e9\u05e0\u05d9\u05dd"}},meridiemParse:/\u05d0\u05d7\u05d4"\u05e6|\u05dc\u05e4\u05e0\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8|\u05d1\u05d1\u05d5\u05e7\u05e8|\u05d1\u05e2\u05e8\u05d1/i,isPM:function(e){return/^(\u05d0\u05d7\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05d1\u05e2\u05e8\u05d1)$/.test(e)},meridiem:function(e,a,t){return e<5?"\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8":e<10?"\u05d1\u05d1\u05d5\u05e7\u05e8":e<12?t?'\u05dc\u05e4\u05e0\u05d4"\u05e6':"\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":e<18?t?'\u05d0\u05d7\u05d4"\u05e6':"\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":"\u05d1\u05e2\u05e8\u05d1"}}),{1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"}),js={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"},a=[/^\u091c\u0928/i,/^\u092b\u093c\u0930|\u092b\u0930/i,/^\u092e\u093e\u0930\u094d\u091a/i,/^\u0905\u092a\u094d\u0930\u0948/i,/^\u092e\u0908/i,/^\u091c\u0942\u0928/i,/^\u091c\u0941\u0932/i,/^\u0905\u0917/i,/^\u0938\u093f\u0924\u0902|\u0938\u093f\u0924/i,/^\u0905\u0915\u094d\u091f\u0942/i,/^\u0928\u0935|\u0928\u0935\u0902/i,/^\u0926\u093f\u0938\u0902|\u0926\u093f\u0938/i];function xs(e,a,t){var s=e+" ";switch(t){case"ss":return s+=1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi";case"m":return a?"jedna minuta":"jedne minute";case"mm":return s+=1!==e&&(2===e||3===e||4===e)?"minute":"minuta";case"h":return a?"jedan sat":"jednog sata";case"hh":return s+=1===e?"sat":2===e||3===e||4===e?"sata":"sati";case"dd":return s+=1===e?"dan":"dana";case"MM":return s+=1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci";case"yy":return s+=1!==e&&(2===e||3===e||4===e)?"godine":"godina"}}c.defineLocale("hi",{months:{format:"\u091c\u0928\u0935\u0930\u0940_\u092b\u093c\u0930\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948\u0932_\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0938\u094d\u0924_\u0938\u093f\u0924\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u0942\u092c\u0930_\u0928\u0935\u092e\u094d\u092c\u0930_\u0926\u093f\u0938\u092e\u094d\u092c\u0930".split("_"),standalone:"\u091c\u0928\u0935\u0930\u0940_\u092b\u0930\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948\u0932_\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0938\u094d\u0924_\u0938\u093f\u0924\u0902\u092c\u0930_\u0905\u0915\u094d\u091f\u0942\u092c\u0930_\u0928\u0935\u0902\u092c\u0930_\u0926\u093f\u0938\u0902\u092c\u0930".split("_")},monthsShort:"\u091c\u0928._\u092b\u093c\u0930._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948._\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0905\u0917._\u0938\u093f\u0924._\u0905\u0915\u094d\u091f\u0942._\u0928\u0935._\u0926\u093f\u0938.".split("_"),weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0932\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0932_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u092c\u091c\u0947",LTS:"A h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A h:mm \u092c\u091c\u0947"},monthsParse:a,longMonthsParse:a,shortMonthsParse:[/^\u091c\u0928/i,/^\u092b\u093c\u0930/i,/^\u092e\u093e\u0930\u094d\u091a/i,/^\u0905\u092a\u094d\u0930\u0948/i,/^\u092e\u0908/i,/^\u091c\u0942\u0928/i,/^\u091c\u0941\u0932/i,/^\u0905\u0917/i,/^\u0938\u093f\u0924/i,/^\u0905\u0915\u094d\u091f\u0942/i,/^\u0928\u0935/i,/^\u0926\u093f\u0938/i],monthsRegex:/^(\u091c\u0928\u0935\u0930\u0940|\u091c\u0928\.?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908|\u091c\u0941\u0932\.?|\u0905\u0917\u0938\u094d\u0924|\u0905\u0917\.?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930|\u0928\u0935\.?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930|\u0926\u093f\u0938\.?)/i,monthsShortRegex:/^(\u091c\u0928\u0935\u0930\u0940|\u091c\u0928\.?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908|\u091c\u0941\u0932\.?|\u0905\u0917\u0938\u094d\u0924|\u0905\u0917\.?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930|\u0928\u0935\.?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930|\u0926\u093f\u0938\.?)/i,monthsStrictRegex:/^(\u091c\u0928\u0935\u0930\u0940?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908?|\u0905\u0917\u0938\u094d\u0924?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924?\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930?)/i,monthsShortStrictRegex:/^(\u091c\u0928\.?|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\.?|\u0905\u0917\.?|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\.?|\u0926\u093f\u0938\.?)/i,calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0915\u0932] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u0932] LT",lastWeek:"[\u092a\u093f\u091b\u0932\u0947] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u092e\u0947\u0902",past:"%s \u092a\u0939\u0932\u0947",s:"\u0915\u0941\u091b \u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0902\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u091f",mm:"%d \u092e\u093f\u0928\u091f",h:"\u090f\u0915 \u0918\u0902\u091f\u093e",hh:"%d \u0918\u0902\u091f\u0947",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u0940\u0928\u0947",MM:"%d \u092e\u0939\u0940\u0928\u0947",y:"\u090f\u0915 \u0935\u0930\u094d\u0937",yy:"%d \u0935\u0930\u094d\u0937"},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return js[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return vs[e]})},meridiemParse:/\u0930\u093e\u0924|\u0938\u0941\u092c\u0939|\u0926\u094b\u092a\u0939\u0930|\u0936\u093e\u092e/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924"===a?e<4?e:e+12:"\u0938\u0941\u092c\u0939"===a?e:"\u0926\u094b\u092a\u0939\u0930"===a?10<=e?e:e+12:"\u0936\u093e\u092e"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0930\u093e\u0924":e<10?"\u0938\u0941\u092c\u0939":e<17?"\u0926\u094b\u092a\u0939\u0930":e<20?"\u0936\u093e\u092e":"\u0930\u093e\u0924"},week:{dow:0,doy:6}}),c.defineLocale("hr",{months:{format:"sije\u010dnja_velja\u010de_o\u017eujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"sije\u010danj_velja\u010da_o\u017eujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._o\u017eu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"Do MMMM YYYY",LLL:"Do MMMM YYYY H:mm",LLLL:"dddd, Do MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:return"[pro\u0161lu] [nedjelju] [u] LT";case 3:return"[pro\u0161lu] [srijedu] [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:xs,m:xs,mm:xs,h:xs,hh:xs,d:"dan",dd:xs,M:"mjesec",MM:xs,y:"godinu",yy:xs},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}});var Ps="vas\xe1rnap h\xe9tf\u0151n kedden szerd\xe1n cs\xfct\xf6rt\xf6k\xf6n p\xe9nteken szombaton".split(" ");function Os(e,a,t,s){var n=e;switch(t){case"s":return s||a?"n\xe9h\xe1ny m\xe1sodperc":"n\xe9h\xe1ny m\xe1sodperce";case"ss":return n+(s||a)?" m\xe1sodperc":" m\xe1sodperce";case"m":return"egy"+(s||a?" perc":" perce");case"mm":return n+(s||a?" perc":" perce");case"h":return"egy"+(s||a?" \xf3ra":" \xf3r\xe1ja");case"hh":return n+(s||a?" \xf3ra":" \xf3r\xe1ja");case"d":return"egy"+(s||a?" nap":" napja");case"dd":return n+(s||a?" nap":" napja");case"M":return"egy"+(s||a?" h\xf3nap":" h\xf3napja");case"MM":return n+(s||a?" h\xf3nap":" h\xf3napja");case"y":return"egy"+(s||a?" \xe9v":" \xe9ve");case"yy":return n+(s||a?" \xe9v":" \xe9ve")}return""}function Ws(e){return(e?"":"[m\xfalt] ")+"["+Ps[this.day()]+"] LT[-kor]"}function As(e){return e%100==11||e%10!=1}function Es(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"nokkrar sek\xfandur":"nokkrum sek\xfandum";case"ss":return As(e)?n+(a||s?"sek\xfandur":"sek\xfandum"):n+"sek\xfanda";case"m":return a?"m\xedn\xfata":"m\xedn\xfatu";case"mm":return As(e)?n+(a||s?"m\xedn\xfatur":"m\xedn\xfatum"):a?n+"m\xedn\xfata":n+"m\xedn\xfatu";case"hh":return As(e)?n+(a||s?"klukkustundir":"klukkustundum"):n+"klukkustund";case"d":return a?"dagur":s?"dag":"degi";case"dd":return As(e)?a?n+"dagar":n+(s?"daga":"d\xf6gum"):a?n+"dagur":n+(s?"dag":"degi");case"M":return a?"m\xe1nu\xf0ur":s?"m\xe1nu\xf0":"m\xe1nu\xf0i";case"MM":return As(e)?a?n+"m\xe1nu\xf0ir":n+(s?"m\xe1nu\xf0i":"m\xe1nu\xf0um"):a?n+"m\xe1nu\xf0ur":n+(s?"m\xe1nu\xf0":"m\xe1nu\xf0i");case"y":return a||s?"\xe1r":"\xe1ri";case"yy":return As(e)?n+(a||s?"\xe1r":"\xe1rum"):n+(a||s?"\xe1r":"\xe1ri")}}c.defineLocale("hu",{months:"janu\xe1r_febru\xe1r_m\xe1rcius_\xe1prilis_m\xe1jus_j\xfanius_j\xfalius_augusztus_szeptember_okt\xf3ber_november_december".split("_"),monthsShort:"jan._feb._m\xe1rc._\xe1pr._m\xe1j._j\xfan._j\xfal._aug._szept._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"vas\xe1rnap_h\xe9tf\u0151_kedd_szerda_cs\xfct\xf6rt\xf6k_p\xe9ntek_szombat".split("_"),weekdaysShort:"vas_h\xe9t_kedd_sze_cs\xfct_p\xe9n_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return"u"===e.charAt(1).toLowerCase()},meridiem:function(e,a,t){return e<12?!0===t?"de":"DE":!0===t?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return Ws.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return Ws.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s m\xfalva",past:"%s",s:Os,ss:Os,m:Os,mm:Os,h:Os,hh:Os,d:Os,dd:Os,M:Os,MM:Os,y:Os,yy:Os},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),c.defineLocale("hy-am",{months:{format:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580\u056b_\u0583\u0565\u057f\u0580\u057e\u0561\u0580\u056b_\u0574\u0561\u0580\u057f\u056b_\u0561\u057a\u0580\u056b\u056c\u056b_\u0574\u0561\u0575\u056b\u057d\u056b_\u0570\u0578\u0582\u0576\u056b\u057d\u056b_\u0570\u0578\u0582\u056c\u056b\u057d\u056b_\u0585\u0563\u0578\u057d\u057f\u0578\u057d\u056b_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056b_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b".split("_"),standalone:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580_\u0583\u0565\u057f\u0580\u057e\u0561\u0580_\u0574\u0561\u0580\u057f_\u0561\u057a\u0580\u056b\u056c_\u0574\u0561\u0575\u056b\u057d_\u0570\u0578\u0582\u0576\u056b\u057d_\u0570\u0578\u0582\u056c\u056b\u057d_\u0585\u0563\u0578\u057d\u057f\u0578\u057d_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580".split("_")},monthsShort:"\u0570\u0576\u057e_\u0583\u057f\u0580_\u0574\u0580\u057f_\u0561\u057a\u0580_\u0574\u0575\u057d_\u0570\u0576\u057d_\u0570\u056c\u057d_\u0585\u0563\u057d_\u057d\u057a\u057f_\u0570\u056f\u057f_\u0576\u0574\u0562_\u0564\u056f\u057f".split("_"),weekdays:"\u056f\u056b\u0580\u0561\u056f\u056b_\u0565\u0580\u056f\u0578\u0582\u0577\u0561\u0562\u0569\u056b_\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0570\u056b\u0576\u0563\u0577\u0561\u0562\u0569\u056b_\u0578\u0582\u0580\u0562\u0561\u0569_\u0577\u0561\u0562\u0561\u0569".split("_"),weekdaysShort:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),weekdaysMin:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0569.",LLL:"D MMMM YYYY \u0569., HH:mm",LLLL:"dddd, D MMMM YYYY \u0569., HH:mm"},calendar:{sameDay:"[\u0561\u0575\u057d\u0585\u0580] LT",nextDay:"[\u057e\u0561\u0572\u0568] LT",lastDay:"[\u0565\u0580\u0565\u056f] LT",nextWeek:function(){return"dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},lastWeek:function(){return"[\u0561\u0576\u0581\u0561\u056e] dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},sameElse:"L"},relativeTime:{future:"%s \u0570\u0565\u057f\u0578",past:"%s \u0561\u057c\u0561\u057b",s:"\u0574\u056b \u0584\u0561\u0576\u056b \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",ss:"%d \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",m:"\u0580\u0578\u057a\u0565",mm:"%d \u0580\u0578\u057a\u0565",h:"\u056a\u0561\u0574",hh:"%d \u056a\u0561\u0574",d:"\u0585\u0580",dd:"%d \u0585\u0580",M:"\u0561\u0574\u056b\u057d",MM:"%d \u0561\u0574\u056b\u057d",y:"\u057f\u0561\u0580\u056b",yy:"%d \u057f\u0561\u0580\u056b"},meridiemParse:/\u0563\u056b\u0577\u0565\u0580\u057e\u0561|\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561|\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576/,isPM:function(e){return/^(\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576)$/.test(e)},meridiem:function(e){return e<4?"\u0563\u056b\u0577\u0565\u0580\u057e\u0561":e<12?"\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561":e<17?"\u0581\u0565\u0580\u0565\u056f\u057e\u0561":"\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(\u056b\u0576|\u0580\u0564)/,ordinal:function(e,a){switch(a){case"DDD":case"w":case"W":case"DDDo":return 1===e?e+"-\u056b\u0576":e+"-\u0580\u0564";default:return e}},week:{dow:1,doy:7}}),c.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"siang"===a?11<=e?e:e+12:"sore"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"siang":e<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:0,doy:6}}),c.defineLocale("is",{months:"jan\xfaar_febr\xfaar_mars_apr\xedl_ma\xed_j\xfan\xed_j\xfal\xed_\xe1g\xfast_september_okt\xf3ber_n\xf3vember_desember".split("_"),monthsShort:"jan_feb_mar_apr_ma\xed_j\xfan_j\xfal_\xe1g\xfa_sep_okt_n\xf3v_des".split("_"),weekdays:"sunnudagur_m\xe1nudagur_\xferi\xf0judagur_mi\xf0vikudagur_fimmtudagur_f\xf6studagur_laugardagur".split("_"),weekdaysShort:"sun_m\xe1n_\xferi_mi\xf0_fim_f\xf6s_lau".split("_"),weekdaysMin:"Su_M\xe1_\xder_Mi_Fi_F\xf6_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[\xed dag kl.] LT",nextDay:"[\xe1 morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xed g\xe6r kl.] LT",lastWeek:"[s\xed\xf0asta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s s\xed\xf0an",s:Es,ss:Es,m:Es,mm:Es,h:"klukkustund",hh:Es,d:Es,dd:Es,M:Es,MM:Es,y:Es,yy:Es},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),c.defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),c.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:function(){return"[Oggi a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextDay:function(){return"[Domani a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextWeek:function(){return"dddd [a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastDay:function(){return"[Ieri a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastWeek:function(){switch(this.day()){case 0:return"[La scorsa] dddd [a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT";default:return"[Lo scorso] dddd [a"+(1<this.hours()?"lle ":0===this.hours()?" ":"ll'")+"]LT"}},sameElse:"L"},relativeTime:{future:"tra %s",past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",w:"una settimana",ww:"%d settimane",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),c.defineLocale("ja",{eras:[{since:"2019-05-01",offset:1,name:"\u4ee4\u548c",narrow:"\u32ff",abbr:"R"},{since:"1989-01-08",until:"2019-04-30",offset:1,name:"\u5e73\u6210",narrow:"\u337b",abbr:"H"},{since:"1926-12-25",until:"1989-01-07",offset:1,name:"\u662d\u548c",narrow:"\u337c",abbr:"S"},{since:"1912-07-30",until:"1926-12-24",offset:1,name:"\u5927\u6b63",narrow:"\u337d",abbr:"T"},{since:"1873-01-01",until:"1912-07-29",offset:6,name:"\u660e\u6cbb",narrow:"\u337e",abbr:"M"},{since:"0001-01-01",until:"1873-12-31",offset:1,name:"\u897f\u66a6",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"\u7d00\u5143\u524d",narrow:"BC",abbr:"BC"}],eraYearOrdinalRegex:/(\u5143|\d+)\u5e74/,eraYearOrdinalParse:function(e,a){return"\u5143"===a[1]?1:parseInt(a[1]||e,10)},months:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u65e5\u66dc\u65e5_\u6708\u66dc\u65e5_\u706b\u66dc\u65e5_\u6c34\u66dc\u65e5_\u6728\u66dc\u65e5_\u91d1\u66dc\u65e5_\u571f\u66dc\u65e5".split("_"),weekdaysShort:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),weekdaysMin:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5(ddd) HH:mm"},meridiemParse:/\u5348\u524d|\u5348\u5f8c/i,isPM:function(e){return"\u5348\u5f8c"===e},meridiem:function(e,a,t){return e<12?"\u5348\u524d":"\u5348\u5f8c"},calendar:{sameDay:"[\u4eca\u65e5] LT",nextDay:"[\u660e\u65e5] LT",nextWeek:function(e){return e.week()!==this.week()?"[\u6765\u9031]dddd LT":"dddd LT"},lastDay:"[\u6628\u65e5] LT",lastWeek:function(e){return this.week()!==e.week()?"[\u5148\u9031]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}\u65e5/,ordinal:function(e,a){switch(a){case"y":return 1===e?"\u5143\u5e74":e+"\u5e74";case"d":case"D":case"DDD":return e+"\u65e5";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u6570\u79d2",ss:"%d\u79d2",m:"1\u5206",mm:"%d\u5206",h:"1\u6642\u9593",hh:"%d\u6642\u9593",d:"1\u65e5",dd:"%d\u65e5",M:"1\u30f6\u6708",MM:"%d\u30f6\u6708",y:"1\u5e74",yy:"%d\u5e74"}}),c.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(e,a){return 12===e&&(e=0),"enjing"===a?e:"siyang"===a?11<=e?e:e+12:"sonten"===a||"ndalu"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"enjing":e<15?"siyang":e<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}}),c.defineLocale("ka",{months:"\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8_\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8_\u10db\u10d0\u10e0\u10e2\u10d8_\u10d0\u10de\u10e0\u10d8\u10da\u10d8_\u10db\u10d0\u10d8\u10e1\u10d8_\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8_\u10d8\u10d5\u10da\u10d8\u10e1\u10d8_\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd_\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8_\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8".split("_"),monthsShort:"\u10d8\u10d0\u10dc_\u10d7\u10d4\u10d1_\u10db\u10d0\u10e0_\u10d0\u10de\u10e0_\u10db\u10d0\u10d8_\u10d8\u10d5\u10dc_\u10d8\u10d5\u10da_\u10d0\u10d2\u10d5_\u10e1\u10d4\u10e5_\u10dd\u10e5\u10e2_\u10dc\u10dd\u10d4_\u10d3\u10d4\u10d9".split("_"),weekdays:{standalone:"\u10d9\u10d5\u10d8\u10e0\u10d0_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8_\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8".split("_"),format:"\u10d9\u10d5\u10d8\u10e0\u10d0\u10e1_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10e1_\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1".split("_"),isFormat:/(\u10ec\u10d8\u10dc\u10d0|\u10e8\u10d4\u10db\u10d3\u10d4\u10d2)/},weekdaysShort:"\u10d9\u10d5\u10d8_\u10dd\u10e0\u10e8_\u10e1\u10d0\u10db_\u10dd\u10d7\u10ee_\u10ee\u10e3\u10d7_\u10de\u10d0\u10e0_\u10e8\u10d0\u10d1".split("_"),weekdaysMin:"\u10d9\u10d5_\u10dd\u10e0_\u10e1\u10d0_\u10dd\u10d7_\u10ee\u10e3_\u10de\u10d0_\u10e8\u10d0".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u10d3\u10e6\u10d4\u10e1] LT[-\u10d6\u10d4]",nextDay:"[\u10ee\u10d5\u10d0\u10da] LT[-\u10d6\u10d4]",lastDay:"[\u10d2\u10e3\u10e8\u10d8\u10dc] LT[-\u10d6\u10d4]",nextWeek:"[\u10e8\u10d4\u10db\u10d3\u10d4\u10d2] dddd LT[-\u10d6\u10d4]",lastWeek:"[\u10ec\u10d8\u10dc\u10d0] dddd LT-\u10d6\u10d4",sameElse:"L"},relativeTime:{future:function(e){return e.replace(/(\u10ec\u10d0\u10db|\u10ec\u10e3\u10d7|\u10e1\u10d0\u10d0\u10d7|\u10ec\u10d4\u10da|\u10d3\u10e6|\u10d7\u10d5)(\u10d8|\u10d4)/,function(e,a,t){return"\u10d8"===t?a+"\u10e8\u10d8":a+t+"\u10e8\u10d8"})},past:function(e){return/(\u10ec\u10d0\u10db\u10d8|\u10ec\u10e3\u10d7\u10d8|\u10e1\u10d0\u10d0\u10d7\u10d8|\u10d3\u10e6\u10d4|\u10d7\u10d5\u10d4)/.test(e)?e.replace(/(\u10d8|\u10d4)$/,"\u10d8\u10e1 \u10ec\u10d8\u10dc"):/\u10ec\u10d4\u10da\u10d8/.test(e)?e.replace(/\u10ec\u10d4\u10da\u10d8$/,"\u10ec\u10da\u10d8\u10e1 \u10ec\u10d8\u10dc"):e},s:"\u10e0\u10d0\u10db\u10d3\u10d4\u10dc\u10d8\u10db\u10d4 \u10ec\u10d0\u10db\u10d8",ss:"%d \u10ec\u10d0\u10db\u10d8",m:"\u10ec\u10e3\u10d7\u10d8",mm:"%d \u10ec\u10e3\u10d7\u10d8",h:"\u10e1\u10d0\u10d0\u10d7\u10d8",hh:"%d \u10e1\u10d0\u10d0\u10d7\u10d8",d:"\u10d3\u10e6\u10d4",dd:"%d \u10d3\u10e6\u10d4",M:"\u10d7\u10d5\u10d4",MM:"%d \u10d7\u10d5\u10d4",y:"\u10ec\u10d4\u10da\u10d8",yy:"%d \u10ec\u10d4\u10da\u10d8"},dayOfMonthOrdinalParse:/0|1-\u10da\u10d8|\u10db\u10d4-\d{1,2}|\d{1,2}-\u10d4/,ordinal:function(e){return 0===e?e:1===e?e+"-\u10da\u10d8":e<20||e<=100&&e%20==0||e%100==0?"\u10db\u10d4-"+e:e+"-\u10d4"},week:{dow:1,doy:7}});var Fs={0:"-\u0448\u0456",1:"-\u0448\u0456",2:"-\u0448\u0456",3:"-\u0448\u0456",4:"-\u0448\u0456",5:"-\u0448\u0456",6:"-\u0448\u044b",7:"-\u0448\u0456",8:"-\u0448\u0456",9:"-\u0448\u044b",10:"-\u0448\u044b",20:"-\u0448\u044b",30:"-\u0448\u044b",40:"-\u0448\u044b",50:"-\u0448\u0456",60:"-\u0448\u044b",70:"-\u0448\u0456",80:"-\u0448\u0456",90:"-\u0448\u044b",100:"-\u0448\u0456"},zs=(c.defineLocale("kk",{months:"\u049b\u0430\u04a3\u0442\u0430\u0440_\u0430\u049b\u043f\u0430\u043d_\u043d\u0430\u0443\u0440\u044b\u0437_\u0441\u04d9\u0443\u0456\u0440_\u043c\u0430\u043c\u044b\u0440_\u043c\u0430\u0443\u0441\u044b\u043c_\u0448\u0456\u043b\u0434\u0435_\u0442\u0430\u043c\u044b\u0437_\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a_\u049b\u0430\u0437\u0430\u043d_\u049b\u0430\u0440\u0430\u0448\u0430_\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d".split("_"),monthsShort:"\u049b\u0430\u04a3_\u0430\u049b\u043f_\u043d\u0430\u0443_\u0441\u04d9\u0443_\u043c\u0430\u043c_\u043c\u0430\u0443_\u0448\u0456\u043b_\u0442\u0430\u043c_\u049b\u044b\u0440_\u049b\u0430\u0437_\u049b\u0430\u0440_\u0436\u0435\u043b".split("_"),weekdays:"\u0436\u0435\u043a\u0441\u0435\u043d\u0431\u0456_\u0434\u04af\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u04d9\u0440\u0441\u0435\u043d\u0431\u0456_\u0431\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0436\u04b1\u043c\u0430_\u0441\u0435\u043d\u0431\u0456".split("_"),weekdaysShort:"\u0436\u0435\u043a_\u0434\u04af\u0439_\u0441\u0435\u0439_\u0441\u04d9\u0440_\u0431\u0435\u0439_\u0436\u04b1\u043c_\u0441\u0435\u043d".split("_"),weekdaysMin:"\u0436\u043a_\u0434\u0439_\u0441\u0439_\u0441\u0440_\u0431\u0439_\u0436\u043c_\u0441\u043d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u0456\u043d \u0441\u0430\u0493\u0430\u0442] LT",nextDay:"[\u0415\u0440\u0442\u0435\u04a3 \u0441\u0430\u0493\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0493\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0448\u0435 \u0441\u0430\u0493\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u0435\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u04a3] dddd [\u0441\u0430\u0493\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0456\u0448\u0456\u043d\u0434\u0435",past:"%s \u0431\u04b1\u0440\u044b\u043d",s:"\u0431\u0456\u0440\u043d\u0435\u0448\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0456\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u0431\u0456\u0440 \u0441\u0430\u0493\u0430\u0442",hh:"%d \u0441\u0430\u0493\u0430\u0442",d:"\u0431\u0456\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0456\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0456\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0448\u0456|\u0448\u044b)/,ordinal:function(e){return e+(Fs[e]||Fs[e%10]||Fs[100<=e?100:null])},week:{dow:1,doy:7}}),{1:"\u17e1",2:"\u17e2",3:"\u17e3",4:"\u17e4",5:"\u17e5",6:"\u17e6",7:"\u17e7",8:"\u17e8",9:"\u17e9",0:"\u17e0"}),Ns={"\u17e1":"1","\u17e2":"2","\u17e3":"3","\u17e4":"4","\u17e5":"5","\u17e6":"6","\u17e7":"7","\u17e8":"8","\u17e9":"9","\u17e0":"0"},Js=(c.defineLocale("km",{months:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),monthsShort:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),weekdays:"\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799_\u1785\u17d0\u1793\u17d2\u1791_\u17a2\u1784\u17d2\u1782\u17b6\u179a_\u1796\u17bb\u1792_\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd_\u179f\u17bb\u1780\u17d2\u179a_\u179f\u17c5\u179a\u17cd".split("_"),weekdaysShort:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysMin:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u1796\u17d2\u179a\u17b9\u1780|\u179b\u17d2\u1784\u17b6\u1785/,isPM:function(e){return"\u179b\u17d2\u1784\u17b6\u1785"===e},meridiem:function(e,a,t){return e<12?"\u1796\u17d2\u179a\u17b9\u1780":"\u179b\u17d2\u1784\u17b6\u1785"},calendar:{sameDay:"[\u1790\u17d2\u1784\u17c3\u1793\u17c1\u17c7 \u1798\u17c9\u17c4\u1784] LT",nextDay:"[\u179f\u17d2\u17a2\u17c2\u1780 \u1798\u17c9\u17c4\u1784] LT",nextWeek:"dddd [\u1798\u17c9\u17c4\u1784] LT",lastDay:"[\u1798\u17d2\u179f\u17b7\u179b\u1798\u17b7\u1789 \u1798\u17c9\u17c4\u1784] LT",lastWeek:"dddd [\u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd\u1798\u17bb\u1793] [\u1798\u17c9\u17c4\u1784] LT",sameElse:"L"},relativeTime:{future:"%s\u1791\u17c0\u178f",past:"%s\u1798\u17bb\u1793",s:"\u1794\u17c9\u17bb\u1793\u17d2\u1798\u17b6\u1793\u179c\u17b7\u1793\u17b6\u1791\u17b8",ss:"%d \u179c\u17b7\u1793\u17b6\u1791\u17b8",m:"\u1798\u17bd\u1799\u1793\u17b6\u1791\u17b8",mm:"%d \u1793\u17b6\u1791\u17b8",h:"\u1798\u17bd\u1799\u1798\u17c9\u17c4\u1784",hh:"%d \u1798\u17c9\u17c4\u1784",d:"\u1798\u17bd\u1799\u1790\u17d2\u1784\u17c3",dd:"%d \u1790\u17d2\u1784\u17c3",M:"\u1798\u17bd\u1799\u1781\u17c2",MM:"%d \u1781\u17c2",y:"\u1798\u17bd\u1799\u1786\u17d2\u1793\u17b6\u17c6",yy:"%d \u1786\u17d2\u1793\u17b6\u17c6"},dayOfMonthOrdinalParse:/\u1791\u17b8\d{1,2}/,ordinal:"\u1791\u17b8%d",preparse:function(e){return e.replace(/[\u17e1\u17e2\u17e3\u17e4\u17e5\u17e6\u17e7\u17e8\u17e9\u17e0]/g,function(e){return Ns[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return zs[e]})},week:{dow:1,doy:4}}),{1:"\u0ce7",2:"\u0ce8",3:"\u0ce9",4:"\u0cea",5:"\u0ceb",6:"\u0cec",7:"\u0ced",8:"\u0cee",9:"\u0cef",0:"\u0ce6"}),Rs={"\u0ce7":"1","\u0ce8":"2","\u0ce9":"3","\u0cea":"4","\u0ceb":"5","\u0cec":"6","\u0ced":"7","\u0cee":"8","\u0cef":"9","\u0ce6":"0"};function O(e,a,t,s){e={s:["\xe7end san\xeeye","\xe7end san\xeeyeyan"],ss:[e+" san\xeeye",e+" san\xeeyeyan"],m:["deq\xeeqeyek","deq\xeeqeyek\xea"],mm:[e+" deq\xeeqe",e+" deq\xeeqeyan"],h:["saetek","saetek\xea"],hh:[e+" saet",e+" saetan"],d:["rojek","rojek\xea"],dd:[e+" roj",e+" rojan"],w:["hefteyek","hefteyek\xea"],ww:[e+" hefte",e+" hefteyan"],M:["mehek","mehek\xea"],MM:[e+" meh",e+" mehan"],y:["salek","salek\xea"],yy:[e+" sal",e+" salan"]};return a?e[t][0]:e[t][1]}c.defineLocale("kn",{months:"\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf_\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cbf_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5\u0cac\u0cb0\u0ccd_\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd".split("_"),monthsShort:"\u0c9c\u0ca8_\u0cab\u0cc6\u0cac\u0ccd\u0cb0_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5_\u0ca8\u0cb5\u0cc6\u0c82_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82".split("_"),monthsParseExact:!0,weekdays:"\u0cad\u0cbe\u0ca8\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae\u0cb5\u0cbe\u0cb0_\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0_\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0_\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0_\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0".split("_"),weekdaysShort:"\u0cad\u0cbe\u0ca8\u0cc1_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae_\u0cae\u0c82\u0c97\u0cb3_\u0cac\u0cc1\u0ca7_\u0c97\u0cc1\u0cb0\u0cc1_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0_\u0cb6\u0ca8\u0cbf".split("_"),weekdaysMin:"\u0cad\u0cbe_\u0cb8\u0cc6\u0cc2\u0cd5_\u0cae\u0c82_\u0cac\u0cc1_\u0c97\u0cc1_\u0cb6\u0cc1_\u0cb6".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c87\u0c82\u0ca6\u0cc1] LT",nextDay:"[\u0ca8\u0cbe\u0cb3\u0cc6] LT",nextWeek:"dddd, LT",lastDay:"[\u0ca8\u0cbf\u0ca8\u0ccd\u0ca8\u0cc6] LT",lastWeek:"[\u0c95\u0cc6\u0cc2\u0ca8\u0cc6\u0caf] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0ca8\u0c82\u0ca4\u0cb0",past:"%s \u0cb9\u0cbf\u0c82\u0ca6\u0cc6",s:"\u0c95\u0cc6\u0cb2\u0cb5\u0cc1 \u0c95\u0ccd\u0cb7\u0ca3\u0c97\u0cb3\u0cc1",ss:"%d \u0cb8\u0cc6\u0c95\u0cc6\u0c82\u0ca1\u0cc1\u0c97\u0cb3\u0cc1",m:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",mm:"%d \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",h:"\u0c92\u0c82\u0ca6\u0cc1 \u0c97\u0c82\u0c9f\u0cc6",hh:"%d \u0c97\u0c82\u0c9f\u0cc6",d:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca6\u0cbf\u0ca8",dd:"%d \u0ca6\u0cbf\u0ca8",M:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",MM:"%d \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",y:"\u0c92\u0c82\u0ca6\u0cc1 \u0cb5\u0cb0\u0ccd\u0cb7",yy:"%d \u0cb5\u0cb0\u0ccd\u0cb7"},preparse:function(e){return e.replace(/[\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u0ce6]/g,function(e){return Rs[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Js[e]})},meridiemParse:/\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf|\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6|\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8|\u0cb8\u0c82\u0c9c\u0cc6/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"===a?e<4?e:e+12:"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6"===a?e:"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8"===a?10<=e?e:e+12:"\u0cb8\u0c82\u0c9c\u0cc6"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf":e<10?"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6":e<17?"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8":e<20?"\u0cb8\u0c82\u0c9c\u0cc6":"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"},dayOfMonthOrdinalParse:/\d{1,2}(\u0ca8\u0cc6\u0cd5)/,ordinal:function(e){return e+"\u0ca8\u0cc6\u0cd5"},week:{dow:0,doy:6}}),c.defineLocale("ko",{months:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),monthsShort:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),weekdays:"\uc77c\uc694\uc77c_\uc6d4\uc694\uc77c_\ud654\uc694\uc77c_\uc218\uc694\uc77c_\ubaa9\uc694\uc77c_\uae08\uc694\uc77c_\ud1a0\uc694\uc77c".split("_"),weekdaysShort:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),weekdaysMin:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY\ub144 MMMM D\uc77c",LLL:"YYYY\ub144 MMMM D\uc77c A h:mm",LLLL:"YYYY\ub144 MMMM D\uc77c dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY\ub144 MMMM D\uc77c",lll:"YYYY\ub144 MMMM D\uc77c A h:mm",llll:"YYYY\ub144 MMMM D\uc77c dddd A h:mm"},calendar:{sameDay:"\uc624\ub298 LT",nextDay:"\ub0b4\uc77c LT",nextWeek:"dddd LT",lastDay:"\uc5b4\uc81c LT",lastWeek:"\uc9c0\ub09c\uc8fc dddd LT",sameElse:"L"},relativeTime:{future:"%s \ud6c4",past:"%s \uc804",s:"\uba87 \ucd08",ss:"%d\ucd08",m:"1\ubd84",mm:"%d\ubd84",h:"\ud55c \uc2dc\uac04",hh:"%d\uc2dc\uac04",d:"\ud558\ub8e8",dd:"%d\uc77c",M:"\ud55c \ub2ec",MM:"%d\ub2ec",y:"\uc77c \ub144",yy:"%d\ub144"},dayOfMonthOrdinalParse:/\d{1,2}(\uc77c|\uc6d4|\uc8fc)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\uc77c";case"M":return e+"\uc6d4";case"w":case"W":return e+"\uc8fc";default:return e}},meridiemParse:/\uc624\uc804|\uc624\ud6c4/,isPM:function(e){return"\uc624\ud6c4"===e},meridiem:function(e,a,t){return e<12?"\uc624\uc804":"\uc624\ud6c4"}}),c.defineLocale("ku-kmr",{months:"R\xeabendan_Sibat_Adar_N\xeesan_Gulan_Hez\xeeran_T\xeermeh_Tebax_\xcelon_Cotmeh_Mijdar_Berfanbar".split("_"),monthsShort:"R\xeab_Sib_Ada_N\xees_Gul_Hez_T\xeer_Teb_\xcelo_Cot_Mij_Ber".split("_"),monthsParseExact:!0,weekdays:"Yek\u015fem_Du\u015fem_S\xea\u015fem_\xc7ar\u015fem_P\xeanc\u015fem_\xcen_\u015eem\xee".split("_"),weekdaysShort:"Yek_Du_S\xea_\xc7ar_P\xean_\xcen_\u015eem".split("_"),weekdaysMin:"Ye_Du_S\xea_\xc7a_P\xea_\xcen_\u015ee".split("_"),meridiem:function(e,a,t){return e<12?t?"bn":"BN":t?"pn":"PN"},meridiemParse:/bn|BN|pn|PN/,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"Do MMMM[a] YYYY[an]",LLL:"Do MMMM[a] YYYY[an] HH:mm",LLLL:"dddd, Do MMMM[a] YYYY[an] HH:mm",ll:"Do MMM[.] YYYY[an]",lll:"Do MMM[.] YYYY[an] HH:mm",llll:"ddd[.], Do MMM[.] YYYY[an] HH:mm"},calendar:{sameDay:"[\xcero di saet] LT [de]",nextDay:"[Sib\xea di saet] LT [de]",nextWeek:"dddd [di saet] LT [de]",lastDay:"[Duh di saet] LT [de]",lastWeek:"dddd[a bor\xee di saet] LT [de]",sameElse:"L"},relativeTime:{future:"di %s de",past:"ber\xee %s",s:O,ss:O,m:O,mm:O,h:O,hh:O,d:O,dd:O,w:O,ww:O,M:O,MM:O,y:O,yy:O},dayOfMonthOrdinalParse:/\d{1,2}(?:y\xea|\xea|\.)/,ordinal:function(e,a){var a=a.toLowerCase();return a.includes("w")||a.includes("m")?e+".":e+(e=(a=""+(a=e)).substring(a.length-1),12==(a=1<a.length?a.substring(a.length-2):"")||13==a||"2"!=e&&"3"!=e&&"50"!=a&&"70"!=e&&"80"!=e?"\xea":"y\xea")},week:{dow:1,doy:4}});var Cs={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},Is={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},fe=["\u06a9\u0627\u0646\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0634\u0648\u0628\u0627\u062a","\u0626\u0627\u0632\u0627\u0631","\u0646\u06cc\u0633\u0627\u0646","\u0626\u0627\u06cc\u0627\u0631","\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646","\u062a\u06d5\u0645\u0645\u0648\u0632","\u0626\u0627\u0628","\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644","\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u0643\u06d5\u0645","\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0643\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"],Us=(c.defineLocale("ku",{months:fe,monthsShort:fe,weekdays:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u062f\u0648\u0648\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0633\u06ce\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysShort:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645_\u062f\u0648\u0648\u0634\u0647\u200c\u0645_\u0633\u06ce\u0634\u0647\u200c\u0645_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u0647_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c|\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc/,isPM:function(e){return/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c/.test(e)},meridiem:function(e,a,t){return e<12?"\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc":"\u0626\u06ce\u0648\u0627\u0631\u0647\u200c"},calendar:{sameDay:"[\u0626\u0647\u200c\u0645\u0631\u06c6 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextDay:"[\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastDay:"[\u062f\u0648\u06ce\u0646\u06ce \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",sameElse:"L"},relativeTime:{future:"\u0644\u0647\u200c %s",past:"%s",s:"\u0686\u0647\u200c\u0646\u062f \u0686\u0631\u0643\u0647\u200c\u06cc\u0647\u200c\u0643",ss:"\u0686\u0631\u0643\u0647\u200c %d",m:"\u06cc\u0647\u200c\u0643 \u062e\u0648\u0644\u0647\u200c\u0643",mm:"%d \u062e\u0648\u0644\u0647\u200c\u0643",h:"\u06cc\u0647\u200c\u0643 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",hh:"%d \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",d:"\u06cc\u0647\u200c\u0643 \u0695\u06c6\u0698",dd:"%d \u0695\u06c6\u0698",M:"\u06cc\u0647\u200c\u0643 \u0645\u0627\u0646\u06af",MM:"%d \u0645\u0627\u0646\u06af",y:"\u06cc\u0647\u200c\u0643 \u0633\u0627\u06b5",yy:"%d \u0633\u0627\u06b5"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(e){return Is[e]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(e){return Cs[e]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}}),{0:"-\u0447\u04af",1:"-\u0447\u0438",2:"-\u0447\u0438",3:"-\u0447\u04af",4:"-\u0447\u04af",5:"-\u0447\u0438",6:"-\u0447\u044b",7:"-\u0447\u0438",8:"-\u0447\u0438",9:"-\u0447\u0443",10:"-\u0447\u0443",20:"-\u0447\u044b",30:"-\u0447\u0443",40:"-\u0447\u044b",50:"-\u0447\u04af",60:"-\u0447\u044b",70:"-\u0447\u0438",80:"-\u0447\u0438",90:"-\u0447\u0443",100:"-\u0447\u04af"});function Gs(e,a,t,s){var n={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return a?n[t][0]:n[t][1]}function Vs(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;var a;if(e<100)return Vs(0==(a=e%10)?e/10:a);if(e<1e4){for(;10<=e;)e/=10;return Vs(e)}return Vs(e/=1e3)}c.defineLocale("ky",{months:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u0416\u0435\u043a\u0448\u0435\u043c\u0431\u0438_\u0414\u04af\u0439\u0448\u04e9\u043c\u0431\u04af_\u0428\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0428\u0430\u0440\u0448\u0435\u043c\u0431\u0438_\u0411\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0416\u0443\u043c\u0430_\u0418\u0448\u0435\u043c\u0431\u0438".split("_"),weekdaysShort:"\u0416\u0435\u043a_\u0414\u04af\u0439_\u0428\u0435\u0439_\u0428\u0430\u0440_\u0411\u0435\u0439_\u0416\u0443\u043c_\u0418\u0448\u0435".split("_"),weekdaysMin:"\u0416\u043a_\u0414\u0439_\u0428\u0439_\u0428\u0440_\u0411\u0439_\u0416\u043c_\u0418\u0448".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u04af\u043d \u0441\u0430\u0430\u0442] LT",nextDay:"[\u042d\u0440\u0442\u0435\u04a3 \u0441\u0430\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0447\u044d\u044d \u0441\u0430\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u04e9\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u043d] dddd [\u043a\u04af\u043d\u04af] [\u0441\u0430\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0438\u0447\u0438\u043d\u0434\u0435",past:"%s \u043c\u0443\u0440\u0443\u043d",s:"\u0431\u0438\u0440\u043d\u0435\u0447\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0438\u0440 \u043c\u04af\u043d\u04e9\u0442",mm:"%d \u043c\u04af\u043d\u04e9\u0442",h:"\u0431\u0438\u0440 \u0441\u0430\u0430\u0442",hh:"%d \u0441\u0430\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0438\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0438\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0447\u0438|\u0447\u044b|\u0447\u04af|\u0447\u0443)/,ordinal:function(e){return e+(Us[e]||Us[e%10]||Us[100<=e?100:null])},week:{dow:1,doy:7}}),c.defineLocale("lb",{months:"Januar_Februar_M\xe4erz_Abr\xebll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_M\xe9indeg_D\xebnschdeg_M\xebttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._M\xe9._D\xeb._M\xeb._Do._Fr._Sa.".split("_"),weekdaysMin:"So_M\xe9_D\xeb_M\xeb_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[G\xebschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:function(e){return Vs(e.substr(0,e.indexOf(" ")))?"a "+e:"an "+e},past:function(e){return Vs(e.substr(0,e.indexOf(" ")))?"viru "+e:"virun "+e},s:"e puer Sekonnen",ss:"%d Sekonnen",m:Gs,mm:"%d Minutten",h:Gs,hh:"%d Stonnen",d:Gs,dd:"%d Deeg",M:Gs,MM:"%d M\xe9int",y:Gs,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),c.defineLocale("lo",{months:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),monthsShort:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),weekdays:"\u0ead\u0eb2\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysShort:"\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysMin:"\u0e97_\u0e88_\u0ead\u0e84_\u0e9e_\u0e9e\u0eab_\u0eaa\u0e81_\u0eaa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"\u0ea7\u0eb1\u0e99dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2|\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87/,isPM:function(e){return"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"===e},meridiem:function(e,a,t){return e<12?"\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2":"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"},calendar:{sameDay:"[\u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextDay:"[\u0ea1\u0eb7\u0ec9\u0ead\u0eb7\u0ec8\u0e99\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0edc\u0ec9\u0eb2\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastDay:"[\u0ea1\u0eb7\u0ec9\u0ea7\u0eb2\u0e99\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0ec1\u0ea5\u0ec9\u0ea7\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",sameElse:"L"},relativeTime:{future:"\u0ead\u0eb5\u0e81 %s",past:"%s\u0e9c\u0ec8\u0eb2\u0e99\u0ea1\u0eb2",s:"\u0e9a\u0ecd\u0ec8\u0ec0\u0e97\u0ebb\u0ec8\u0eb2\u0ec3\u0e94\u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",ss:"%d \u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",m:"1 \u0e99\u0eb2\u0e97\u0eb5",mm:"%d \u0e99\u0eb2\u0e97\u0eb5",h:"1 \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",hh:"%d \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",d:"1 \u0ea1\u0eb7\u0ec9",dd:"%d \u0ea1\u0eb7\u0ec9",M:"1 \u0ec0\u0e94\u0eb7\u0ead\u0e99",MM:"%d \u0ec0\u0e94\u0eb7\u0ead\u0e99",y:"1 \u0e9b\u0eb5",yy:"%d \u0e9b\u0eb5"},dayOfMonthOrdinalParse:/(\u0e97\u0eb5\u0ec8)\d{1,2}/,ordinal:function(e){return"\u0e97\u0eb5\u0ec8"+e}});var qs={ss:"sekund\u0117_sekund\u017ei\u0173_sekundes",m:"minut\u0117_minut\u0117s_minut\u0119",mm:"minut\u0117s_minu\u010di\u0173_minutes",h:"valanda_valandos_valand\u0105",hh:"valandos_valand\u0173_valandas",d:"diena_dienos_dien\u0105",dd:"dienos_dien\u0173_dienas",M:"m\u0117nuo_m\u0117nesio_m\u0117nes\u012f",MM:"m\u0117nesiai_m\u0117nesi\u0173_m\u0117nesius",y:"metai_met\u0173_metus",yy:"metai_met\u0173_metus"};function Bs(e,a,t,s){return a?Zs(t)[0]:s?Zs(t)[1]:Zs(t)[2]}function Ks(e){return e%10==0||10<e&&e<20}function Zs(e){return qs[e].split("_")}function $s(e,a,t,s){var n=e+" ";return 1===e?n+Bs(0,a,t[0],s):a?n+(Ks(e)?Zs(t)[1]:Zs(t)[0]):s?n+Zs(t)[1]:n+(Ks(e)?Zs(t)[1]:Zs(t)[2])}c.defineLocale("lt",{months:{format:"sausio_vasario_kovo_baland\u017eio_gegu\u017e\u0117s_bir\u017eelio_liepos_rugpj\u016b\u010dio_rugs\u0117jo_spalio_lapkri\u010dio_gruod\u017eio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegu\u017e\u0117_bir\u017eelis_liepa_rugpj\u016btis_rugs\u0117jis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadien\u012f_pirmadien\u012f_antradien\u012f_tre\u010diadien\u012f_ketvirtadien\u012f_penktadien\u012f_\u0161e\u0161tadien\u012f".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_tre\u010diadienis_ketvirtadienis_penktadienis_\u0161e\u0161tadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_\u0160e\u0161".split("_"),weekdaysMin:"S_P_A_T_K_Pn_\u0160".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[\u0160iandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Pra\u0117jus\u012f] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prie\u0161 %s",s:function(e,a,t,s){return a?"kelios sekund\u0117s":s?"keli\u0173 sekund\u017ei\u0173":"kelias sekundes"},ss:$s,m:Bs,mm:$s,h:Bs,hh:$s,d:Bs,dd:$s,M:Bs,MM:$s,y:Bs,yy:$s},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}});var Qs={ss:"sekundes_sekund\u0113m_sekunde_sekundes".split("_"),m:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),mm:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),h:"stundas_stund\u0101m_stunda_stundas".split("_"),hh:"stundas_stund\u0101m_stunda_stundas".split("_"),d:"dienas_dien\u0101m_diena_dienas".split("_"),dd:"dienas_dien\u0101m_diena_dienas".split("_"),M:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),MM:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function Xs(e,a,t){return t?a%10==1&&a%100!=11?e[2]:e[3]:a%10==1&&a%100!=11?e[0]:e[1]}function en(e,a,t){return e+" "+Xs(Qs[t],e,a)}function an(e,a,t){return Xs(Qs[t],e,a)}c.defineLocale("lv",{months:"janv\u0101ris_febru\u0101ris_marts_apr\u012blis_maijs_j\u016bnijs_j\u016blijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_j\u016bn_j\u016bl_aug_sep_okt_nov_dec".split("_"),weekdays:"sv\u0113tdiena_pirmdiena_otrdiena_tre\u0161diena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[\u0160odien pulksten] LT",nextDay:"[R\u012bt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pag\u0101ju\u0161\u0101] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"p\u0113c %s",past:"pirms %s",s:function(e,a){return a?"da\u017eas sekundes":"da\u017e\u0101m sekund\u0113m"},ss:en,m:an,mm:en,h:an,hh:en,d:an,dd:en,M:an,MM:en,y:an,yy:en},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var tn={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:2<=e&&e<=4?a[1]:a[2]},translate:function(e,a,t){var s=tn.words[t];return 1===t.length?a?s[0]:s[1]:e+" "+tn.correctGrammaticalCase(e,s)}};function sn(e,a,t,s){switch(t){case"s":return a?"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434":"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d";case"ss":return e+(a?" \u0441\u0435\u043a\u0443\u043d\u0434":" \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d");case"m":case"mm":return e+(a?" \u043c\u0438\u043d\u0443\u0442":" \u043c\u0438\u043d\u0443\u0442\u044b\u043d");case"h":case"hh":return e+(a?" \u0446\u0430\u0433":" \u0446\u0430\u0433\u0438\u0439\u043d");case"d":case"dd":return e+(a?" \u04e9\u0434\u04e9\u0440":" \u04e9\u0434\u0440\u0438\u0439\u043d");case"M":case"MM":return e+(a?" \u0441\u0430\u0440":" \u0441\u0430\u0440\u044b\u043d");case"y":case"yy":return e+(a?" \u0436\u0438\u043b":" \u0436\u0438\u043b\u0438\u0439\u043d");default:return e}}c.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedjelje] [u] LT","[pro\u0161log] [ponedjeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srijede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:tn.translate,m:tn.translate,mm:tn.translate,h:tn.translate,hh:tn.translate,d:"dan",dd:tn.translate,M:"mjesec",MM:tn.translate,y:"godinu",yy:tn.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),c.defineLocale("mi",{months:"Kohi-t\u0101te_Hui-tanguru_Pout\u016b-te-rangi_Paenga-wh\u0101wh\u0101_Haratua_Pipiri_H\u014dngoingoi_Here-turi-k\u014dk\u0101_Mahuru_Whiringa-\u0101-nuku_Whiringa-\u0101-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_H\u014dngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"R\u0101tapu_Mane_T\u016brei_Wenerei_T\u0101ite_Paraire_H\u0101tarei".split("_"),weekdaysShort:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),weekdaysMin:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te h\u0113kona ruarua",ss:"%d h\u0113kona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),c.defineLocale("mk",{months:"\u0458\u0430\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d\u0438_\u0458\u0443\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u0458\u0430\u043d_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a_\u043f\u0435\u0442\u043e\u043a_\u0441\u0430\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u0435_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u0430\u0431".split("_"),weekdaysMin:"\u043de_\u043fo_\u0432\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441a".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u0435\u043d\u0435\u0441 \u0432\u043e] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432\u043e] LT",nextWeek:"[\u0412\u043e] dddd [\u0432\u043e] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432\u043e] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0430\u0442\u0430] dddd [\u0432\u043e] LT";case 1:case 2:case 4:case 5:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0438\u043e\u0442] dddd [\u0432\u043e] LT"}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435\u0434 %s",s:"\u043d\u0435\u043a\u043e\u043b\u043a\u0443 \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u0435\u0434\u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0435\u0434\u0435\u043d \u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0435\u0434\u0435\u043d \u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",M:"\u0435\u0434\u0435\u043d \u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0438",y:"\u0435\u0434\u043d\u0430 \u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+"-\u0435\u0432":0==t?e+"-\u0435\u043d":10<t&&t<20?e+"-\u0442\u0438":1==a?e+"-\u0432\u0438":2==a?e+"-\u0440\u0438":7==a||8==a?e+"-\u043c\u0438":e+"-\u0442\u0438"},week:{dow:1,doy:7}}),c.defineLocale("ml",{months:"\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f_\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f_\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d_\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d_\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48_\u0d13\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d_\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c_\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d7c_\u0d28\u0d35\u0d02\u0d2c\u0d7c_\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c".split("_"),monthsShort:"\u0d1c\u0d28\u0d41._\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41._\u0d2e\u0d3e\u0d7c._\u0d0f\u0d2a\u0d4d\u0d30\u0d3f._\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48._\u0d13\u0d17._\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31._\u0d12\u0d15\u0d4d\u0d1f\u0d4b._\u0d28\u0d35\u0d02._\u0d21\u0d3f\u0d38\u0d02.".split("_"),monthsParseExact:!0,weekdays:"\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a_\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a_\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a_\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a".split("_"),weekdaysShort:"\u0d1e\u0d3e\u0d2f\u0d7c_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d7e_\u0d1a\u0d4a\u0d35\u0d4d\u0d35_\u0d2c\u0d41\u0d27\u0d7b_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f_\u0d36\u0d28\u0d3f".split("_"),weekdaysMin:"\u0d1e\u0d3e_\u0d24\u0d3f_\u0d1a\u0d4a_\u0d2c\u0d41_\u0d35\u0d4d\u0d2f\u0d3e_\u0d35\u0d46_\u0d36".split("_"),longDateFormat:{LT:"A h:mm -\u0d28\u0d41",LTS:"A h:mm:ss -\u0d28\u0d41",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -\u0d28\u0d41",LLLL:"dddd, D MMMM YYYY, A h:mm -\u0d28\u0d41"},calendar:{sameDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d4d] LT",nextDay:"[\u0d28\u0d3e\u0d33\u0d46] LT",nextWeek:"dddd, LT",lastDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d32\u0d46] LT",lastWeek:"[\u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d",past:"%s \u0d2e\u0d41\u0d7b\u0d2a\u0d4d",s:"\u0d05\u0d7d\u0d2a \u0d28\u0d3f\u0d2e\u0d3f\u0d37\u0d19\u0d4d\u0d19\u0d7e",ss:"%d \u0d38\u0d46\u0d15\u0d4d\u0d15\u0d7b\u0d21\u0d4d",m:"\u0d12\u0d30\u0d41 \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",mm:"%d \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",h:"\u0d12\u0d30\u0d41 \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",hh:"%d \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",d:"\u0d12\u0d30\u0d41 \u0d26\u0d3f\u0d35\u0d38\u0d02",dd:"%d \u0d26\u0d3f\u0d35\u0d38\u0d02",M:"\u0d12\u0d30\u0d41 \u0d2e\u0d3e\u0d38\u0d02",MM:"%d \u0d2e\u0d3e\u0d38\u0d02",y:"\u0d12\u0d30\u0d41 \u0d35\u0d7c\u0d37\u0d02",yy:"%d \u0d35\u0d7c\u0d37\u0d02"},meridiemParse:/\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f|\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46|\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d|\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02|\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f/i,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"===a&&4<=e||"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d"===a||"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02"===a?e+12:e},meridiem:function(e,a,t){return e<4?"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f":e<12?"\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46":e<17?"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d":e<20?"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02":"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"}}),c.defineLocale("mn",{months:"\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440".split("_"),monthsShort:"1 \u0441\u0430\u0440_2 \u0441\u0430\u0440_3 \u0441\u0430\u0440_4 \u0441\u0430\u0440_5 \u0441\u0430\u0440_6 \u0441\u0430\u0440_7 \u0441\u0430\u0440_8 \u0441\u0430\u0440_9 \u0441\u0430\u0440_10 \u0441\u0430\u0440_11 \u0441\u0430\u0440_12 \u0441\u0430\u0440".split("_"),monthsParseExact:!0,weekdays:"\u041d\u044f\u043c_\u0414\u0430\u0432\u0430\u0430_\u041c\u044f\u0433\u043c\u0430\u0440_\u041b\u0445\u0430\u0433\u0432\u0430_\u041f\u04af\u0440\u044d\u0432_\u0411\u0430\u0430\u0441\u0430\u043d_\u0411\u044f\u043c\u0431\u0430".split("_"),weekdaysShort:"\u041d\u044f\u043c_\u0414\u0430\u0432_\u041c\u044f\u0433_\u041b\u0445\u0430_\u041f\u04af\u0440_\u0411\u0430\u0430_\u0411\u044f\u043c".split("_"),weekdaysMin:"\u041d\u044f_\u0414\u0430_\u041c\u044f_\u041b\u0445_\u041f\u04af_\u0411\u0430_\u0411\u044f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D",LLL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm",LLLL:"dddd, YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm"},meridiemParse:/\u04ae\u04e8|\u04ae\u0425/i,isPM:function(e){return"\u04ae\u0425"===e},meridiem:function(e,a,t){return e<12?"\u04ae\u04e8":"\u04ae\u0425"},calendar:{sameDay:"[\u04e8\u043d\u04e9\u04e9\u0434\u04e9\u0440] LT",nextDay:"[\u041c\u0430\u0440\u0433\u0430\u0430\u0448] LT",nextWeek:"[\u0418\u0440\u044d\u0445] dddd LT",lastDay:"[\u04e8\u0447\u0438\u0433\u0434\u04e9\u0440] LT",lastWeek:"[\u04e8\u043d\u0433\u04e9\u0440\u0441\u04e9\u043d] dddd LT",sameElse:"L"},relativeTime:{future:"%s \u0434\u0430\u0440\u0430\u0430",past:"%s \u04e9\u043c\u043d\u04e9",s:sn,ss:sn,m:sn,mm:sn,h:sn,hh:sn,d:sn,dd:sn,M:sn,MM:sn,y:sn,yy:sn},dayOfMonthOrdinalParse:/\d{1,2} \u04e9\u0434\u04e9\u0440/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+" \u04e9\u0434\u04e9\u0440";default:return e}}});var nn={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},rn={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};function dn(e,a,t,s){var n="";if(a)switch(t){case"s":n="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926";break;case"ss":n="%d \u0938\u0947\u0915\u0902\u0926";break;case"m":n="\u090f\u0915 \u092e\u093f\u0928\u093f\u091f";break;case"mm":n="%d \u092e\u093f\u0928\u093f\u091f\u0947";break;case"h":n="\u090f\u0915 \u0924\u093e\u0938";break;case"hh":n="%d \u0924\u093e\u0938";break;case"d":n="\u090f\u0915 \u0926\u093f\u0935\u0938";break;case"dd":n="%d \u0926\u093f\u0935\u0938";break;case"M":n="\u090f\u0915 \u092e\u0939\u093f\u0928\u093e";break;case"MM":n="%d \u092e\u0939\u093f\u0928\u0947";break;case"y":n="\u090f\u0915 \u0935\u0930\u094d\u0937";break;case"yy":n="%d \u0935\u0930\u094d\u0937\u0947";break}else switch(t){case"s":n="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"ss":n="%d \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"m":n="\u090f\u0915\u093e \u092e\u093f\u0928\u093f\u091f\u093e";break;case"mm":n="%d \u092e\u093f\u0928\u093f\u091f\u093e\u0902";break;case"h":n="\u090f\u0915\u093e \u0924\u093e\u0938\u093e";break;case"hh":n="%d \u0924\u093e\u0938\u093e\u0902";break;case"d":n="\u090f\u0915\u093e \u0926\u093f\u0935\u0938\u093e";break;case"dd":n="%d \u0926\u093f\u0935\u0938\u093e\u0902";break;case"M":n="\u090f\u0915\u093e \u092e\u0939\u093f\u0928\u094d\u092f\u093e";break;case"MM":n="%d \u092e\u0939\u093f\u0928\u094d\u092f\u093e\u0902";break;case"y":n="\u090f\u0915\u093e \u0935\u0930\u094d\u0937\u093e";break;case"yy":n="%d \u0935\u0930\u094d\u0937\u093e\u0902";break}return n.replace(/%d/i,e)}c.defineLocale("mr",{months:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u093f\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u0948_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a._\u090f\u092a\u094d\u0930\u093f._\u092e\u0947._\u091c\u0942\u0928._\u091c\u0941\u0932\u0948._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0933\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0933_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u0935\u093e\u091c\u0924\u093e",LTS:"A h:mm:ss \u0935\u093e\u091c\u0924\u093e",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e",LLLL:"dddd, D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0909\u0926\u094d\u092f\u093e] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092e\u093e\u0917\u0940\u0932] dddd, LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u0927\u094d\u092f\u0947",past:"%s\u092a\u0942\u0930\u094d\u0935\u0940",s:dn,ss:dn,m:dn,mm:dn,h:dn,hh:dn,d:dn,dd:dn,M:dn,MM:dn,y:dn,yy:dn},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return rn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return nn[e]})},meridiemParse:/\u092a\u0939\u093e\u091f\u0947|\u0938\u0915\u093e\u0933\u0940|\u0926\u0941\u092a\u093e\u0930\u0940|\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940|\u0930\u093e\u0924\u094d\u0930\u0940/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u092a\u0939\u093e\u091f\u0947"===a||"\u0938\u0915\u093e\u0933\u0940"===a?e:"\u0926\u0941\u092a\u093e\u0930\u0940"===a||"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940"===a||"\u0930\u093e\u0924\u094d\u0930\u0940"===a?12<=e?e:e+12:void 0},meridiem:function(e,a,t){return 0<=e&&e<6?"\u092a\u0939\u093e\u091f\u0947":e<12?"\u0938\u0915\u093e\u0933\u0940":e<17?"\u0926\u0941\u092a\u093e\u0930\u0940":e<20?"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940":"\u0930\u093e\u0924\u094d\u0930\u0940"},week:{dow:0,doy:6}}),c.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?11<=e?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),c.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),"pagi"===a?e:"tengahari"===a?11<=e?e:e+12:"petang"===a||"malam"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}}),c.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_\u0120unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Di\u010bembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_\u0120un_Lul_Aww_Set_Ott_Nov_Di\u010b".split("_"),weekdays:"Il-\u0126add_It-Tnejn_It-Tlieta_L-Erbg\u0127a_Il-\u0126amis_Il-\u0120img\u0127a_Is-Sibt".split("_"),weekdaysShort:"\u0126ad_Tne_Tli_Erb_\u0126am_\u0120im_Sib".split("_"),weekdaysMin:"\u0126a_Tn_Tl_Er_\u0126a_\u0120i_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[G\u0127ada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-biera\u0127 fil-]LT",lastWeek:"dddd [li g\u0127adda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f\u2019 %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"sieg\u0127a",hh:"%d sieg\u0127at",d:"\u0121urnata",dd:"%d \u0121ranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}});var _n={1:"\u1041",2:"\u1042",3:"\u1043",4:"\u1044",5:"\u1045",6:"\u1046",7:"\u1047",8:"\u1048",9:"\u1049",0:"\u1040"},on={"\u1041":"1","\u1042":"2","\u1043":"3","\u1044":"4","\u1045":"5","\u1046":"6","\u1047":"7","\u1048":"8","\u1049":"9","\u1040":"0"},mn=(c.defineLocale("my",{months:"\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e_\u1016\u1031\u1016\u1031\u102c\u103a\u101d\u102b\u101b\u102e_\u1019\u1010\u103a_\u1027\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u1007\u1030\u101c\u102d\u102f\u1004\u103a_\u101e\u103c\u1002\u102f\u1010\u103a_\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c_\u1021\u1031\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c_\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c_\u1012\u102e\u1007\u1004\u103a\u1018\u102c".split("_"),monthsShort:"\u1007\u1014\u103a_\u1016\u1031_\u1019\u1010\u103a_\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u101c\u102d\u102f\u1004\u103a_\u101e\u103c_\u1005\u1000\u103a_\u1021\u1031\u102c\u1000\u103a_\u1014\u102d\u102f_\u1012\u102e".split("_"),weekdays:"\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031_\u1010\u1014\u1004\u103a\u1039\u101c\u102c_\u1021\u1004\u103a\u1039\u1002\u102b_\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038_\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038_\u101e\u1031\u102c\u1000\u103c\u102c_\u1005\u1014\u1031".split("_"),weekdaysShort:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),weekdaysMin:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u101a\u1014\u1031.] LT [\u1019\u103e\u102c]",nextDay:"[\u1019\u1014\u1000\u103a\u1016\u103c\u1014\u103a] LT [\u1019\u103e\u102c]",nextWeek:"dddd LT [\u1019\u103e\u102c]",lastDay:"[\u1019\u1014\u1031.\u1000] LT [\u1019\u103e\u102c]",lastWeek:"[\u1015\u103c\u102e\u1038\u1001\u1032\u1037\u101e\u1031\u102c] dddd LT [\u1019\u103e\u102c]",sameElse:"L"},relativeTime:{future:"\u101c\u102c\u1019\u100a\u103a\u1037 %s \u1019\u103e\u102c",past:"\u101c\u103d\u1014\u103a\u1001\u1032\u1037\u101e\u1031\u102c %s \u1000",s:"\u1005\u1000\u1039\u1000\u1014\u103a.\u1021\u1014\u100a\u103a\u1038\u1004\u101a\u103a",ss:"%d \u1005\u1000\u1039\u1000\u1014\u1037\u103a",m:"\u1010\u1005\u103a\u1019\u102d\u1014\u1005\u103a",mm:"%d \u1019\u102d\u1014\u1005\u103a",h:"\u1010\u1005\u103a\u1014\u102c\u101b\u102e",hh:"%d \u1014\u102c\u101b\u102e",d:"\u1010\u1005\u103a\u101b\u1000\u103a",dd:"%d \u101b\u1000\u103a",M:"\u1010\u1005\u103a\u101c",MM:"%d \u101c",y:"\u1010\u1005\u103a\u1014\u103e\u1005\u103a",yy:"%d \u1014\u103e\u1005\u103a"},preparse:function(e){return e.replace(/[\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u1040]/g,function(e){return on[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return _n[e]})},week:{dow:1,doy:4}}),c.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8._ma._ti._on._to._fr._l\xf8.".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"\xe9n time",hh:"%d timer",d:"\xe9n dag",dd:"%d dager",w:"\xe9n uke",ww:"%d uker",M:"\xe9n m\xe5ned",MM:"%d m\xe5neder",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),{1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"}),un={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"},ln=(c.defineLocale("ne",{months:"\u091c\u0928\u0935\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f\u0932_\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0937\u094d\u091f_\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930_\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930".split("_"),monthsShort:"\u091c\u0928._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f._\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908._\u0905\u0917._\u0938\u0947\u092a\u094d\u091f._\u0905\u0915\u094d\u091f\u094b._\u0928\u094b\u092d\u0947._\u0921\u093f\u0938\u0947.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u0907\u0924\u092c\u093e\u0930_\u0938\u094b\u092e\u092c\u093e\u0930_\u092e\u0919\u094d\u0917\u0932\u092c\u093e\u0930_\u092c\u0941\u0927\u092c\u093e\u0930_\u092c\u093f\u0939\u093f\u092c\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u092c\u093e\u0930_\u0936\u0928\u093f\u092c\u093e\u0930".split("_"),weekdaysShort:"\u0906\u0907\u0924._\u0938\u094b\u092e._\u092e\u0919\u094d\u0917\u0932._\u092c\u0941\u0927._\u092c\u093f\u0939\u093f._\u0936\u0941\u0915\u094d\u0930._\u0936\u0928\u093f.".split("_"),weekdaysMin:"\u0906._\u0938\u094b._\u092e\u0902._\u092c\u0941._\u092c\u093f._\u0936\u0941._\u0936.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A\u0915\u094b h:mm \u092c\u091c\u0947",LTS:"A\u0915\u094b h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947"},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(e){return un[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return mn[e]})},meridiemParse:/\u0930\u093e\u0924\u093f|\u092c\u093f\u0939\u093e\u0928|\u0926\u093f\u0909\u0901\u0938\u094b|\u0938\u093e\u0901\u091d/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0930\u093e\u0924\u093f"===a?e<4?e:e+12:"\u092c\u093f\u0939\u093e\u0928"===a?e:"\u0926\u093f\u0909\u0901\u0938\u094b"===a?10<=e?e:e+12:"\u0938\u093e\u0901\u091d"===a?e+12:void 0},meridiem:function(e,a,t){return e<3?"\u0930\u093e\u0924\u093f":e<12?"\u092c\u093f\u0939\u093e\u0928":e<16?"\u0926\u093f\u0909\u0901\u0938\u094b":e<20?"\u0938\u093e\u0901\u091d":"\u0930\u093e\u0924\u093f"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u092d\u094b\u0932\u093f] LT",nextWeek:"[\u0906\u0909\u0901\u0926\u094b] dddd[,] LT",lastDay:"[\u0939\u093f\u091c\u094b] LT",lastWeek:"[\u0917\u090f\u0915\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u093e",past:"%s \u0905\u0917\u093e\u0921\u093f",s:"\u0915\u0947\u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0947\u0923\u094d\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u0947\u091f",mm:"%d \u092e\u093f\u0928\u0947\u091f",h:"\u090f\u0915 \u0918\u0923\u094d\u091f\u093e",hh:"%d \u0918\u0923\u094d\u091f\u093e",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u093f\u0928\u093e",MM:"%d \u092e\u0939\u093f\u0928\u093e",y:"\u090f\u0915 \u092c\u0930\u094d\u0937",yy:"%d \u092c\u0930\u094d\u0937"},week:{dow:0,doy:6}}),"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_")),Mn="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),_=[/^jan/i,/^feb/i,/^(maart|mrt\.?)$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],Ie=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,hn=(c.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,a){return e?(/-MMM-/.test(a)?Mn:ln)[e.month()]:ln},monthsRegex:Ie,monthsShortRegex:Ie,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:_,longMonthsParse:_,shortMonthsParse:_,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}}),"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_")),cn="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),Ye=[/^jan/i,/^feb/i,/^(maart|mrt\.?)$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],ye=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,Ln=(c.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,a){return e?(/-MMM-/.test(a)?cn:hn)[e.month()]:hn},monthsRegex:ye,monthsShortRegex:ye,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:Ye,longMonthsParse:Ye,shortMonthsParse:Ye,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",w:"\xe9\xe9n week",ww:"%d weken",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||20<=e?"ste":"de")},week:{dow:1,doy:4}}),c.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"sundag_m\xe5ndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"su._m\xe5._ty._on._to._fr._lau.".split("_"),weekdaysMin:"su_m\xe5_ty_on_to_fr_la".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I g\xe5r klokka] LT",lastWeek:"[F\xf8reg\xe5ande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",w:"ei veke",ww:"%d veker",M:"ein m\xe5nad",MM:"%d m\xe5nader",y:"eit \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),c.defineLocale("oc-lnc",{months:{standalone:"geni\xe8r_febri\xe8r_mar\xe7_abril_mai_junh_julhet_agost_setembre_oct\xf2bre_novembre_decembre".split("_"),format:"de geni\xe8r_de febri\xe8r_de mar\xe7_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'oct\xf2bre_de novembre_de decembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._mai_junh_julh._ago._set._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"dimenge_diluns_dimars_dim\xe8cres_dij\xf2us_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dm._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dm_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:"[u\xe8i a] LT",nextDay:"[deman a] LT",nextWeek:"dddd [a] LT",lastDay:"[i\xe8r a] LT",lastWeek:"dddd [passat a] LT",sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"unas segondas",ss:"%d segondas",m:"una minuta",mm:"%d minutas",h:"una ora",hh:"%d oras",d:"un jorn",dd:"%d jorns",M:"un mes",MM:"%d meses",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(e,a){return e+("w"!==a&&"W"!==a?1===e?"r":2===e?"n":3===e?"r":4===e?"t":"\xe8":"a")},week:{dow:1,doy:4}}),{1:"\u0a67",2:"\u0a68",3:"\u0a69",4:"\u0a6a",5:"\u0a6b",6:"\u0a6c",7:"\u0a6d",8:"\u0a6e",9:"\u0a6f",0:"\u0a66"}),Yn={"\u0a67":"1","\u0a68":"2","\u0a69":"3","\u0a6a":"4","\u0a6b":"5","\u0a6c":"6","\u0a6d":"7","\u0a6e":"8","\u0a6f":"9","\u0a66":"0"},yn=(c.defineLocale("pa-in",{months:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),monthsShort:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),weekdays:"\u0a10\u0a24\u0a35\u0a3e\u0a30_\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30_\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30_\u0a2c\u0a41\u0a27\u0a35\u0a3e\u0a30_\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a28\u0a40\u0a1a\u0a30\u0a35\u0a3e\u0a30".split("_"),weekdaysShort:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),weekdaysMin:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),longDateFormat:{LT:"A h:mm \u0a35\u0a1c\u0a47",LTS:"A h:mm:ss \u0a35\u0a1c\u0a47",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47",LLLL:"dddd, D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47"},calendar:{sameDay:"[\u0a05\u0a1c] LT",nextDay:"[\u0a15\u0a32] LT",nextWeek:"[\u0a05\u0a17\u0a32\u0a3e] dddd, LT",lastDay:"[\u0a15\u0a32] LT",lastWeek:"[\u0a2a\u0a3f\u0a1b\u0a32\u0a47] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0a35\u0a3f\u0a71\u0a1a",past:"%s \u0a2a\u0a3f\u0a1b\u0a32\u0a47",s:"\u0a15\u0a41\u0a1d \u0a38\u0a15\u0a3f\u0a70\u0a1f",ss:"%d \u0a38\u0a15\u0a3f\u0a70\u0a1f",m:"\u0a07\u0a15 \u0a2e\u0a3f\u0a70\u0a1f",mm:"%d \u0a2e\u0a3f\u0a70\u0a1f",h:"\u0a07\u0a71\u0a15 \u0a18\u0a70\u0a1f\u0a3e",hh:"%d \u0a18\u0a70\u0a1f\u0a47",d:"\u0a07\u0a71\u0a15 \u0a26\u0a3f\u0a28",dd:"%d \u0a26\u0a3f\u0a28",M:"\u0a07\u0a71\u0a15 \u0a2e\u0a39\u0a40\u0a28\u0a3e",MM:"%d \u0a2e\u0a39\u0a40\u0a28\u0a47",y:"\u0a07\u0a71\u0a15 \u0a38\u0a3e\u0a32",yy:"%d \u0a38\u0a3e\u0a32"},preparse:function(e){return e.replace(/[\u0a67\u0a68\u0a69\u0a6a\u0a6b\u0a6c\u0a6d\u0a6e\u0a6f\u0a66]/g,function(e){return Yn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Ln[e]})},meridiemParse:/\u0a30\u0a3e\u0a24|\u0a38\u0a35\u0a47\u0a30|\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30|\u0a38\u0a3c\u0a3e\u0a2e/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0a30\u0a3e\u0a24"===a?e<4?e:e+12:"\u0a38\u0a35\u0a47\u0a30"===a?e:"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30"===a?10<=e?e:e+12:"\u0a38\u0a3c\u0a3e\u0a2e"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0a30\u0a3e\u0a24":e<10?"\u0a38\u0a35\u0a47\u0a30":e<17?"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30":e<20?"\u0a38\u0a3c\u0a3e\u0a2e":"\u0a30\u0a3e\u0a24"},week:{dow:0,doy:6}}),"stycze\u0144_luty_marzec_kwiecie\u0144_maj_czerwiec_lipiec_sierpie\u0144_wrzesie\u0144_pa\u017adziernik_listopad_grudzie\u0144".split("_")),fn="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrze\u015bnia_pa\u017adziernika_listopada_grudnia".split("_"),na=[/^sty/i,/^lut/i,/^mar/i,/^kwi/i,/^maj/i,/^cze/i,/^lip/i,/^sie/i,/^wrz/i,/^pa\u017a/i,/^lis/i,/^gru/i];function kn(e){return e%10<5&&1<e%10&&~~(e/10)%10!=1}function pn(e,a,t){var s=e+" ";switch(t){case"ss":return s+(kn(e)?"sekundy":"sekund");case"m":return a?"minuta":"minut\u0119";case"mm":return s+(kn(e)?"minuty":"minut");case"h":return a?"godzina":"godzin\u0119";case"hh":return s+(kn(e)?"godziny":"godzin");case"ww":return s+(kn(e)?"tygodnie":"tygodni");case"MM":return s+(kn(e)?"miesi\u0105ce":"miesi\u0119cy");case"yy":return s+(kn(e)?"lata":"lat")}}function Dn(e,a,t){return e+(20<=e%100||100<=e&&e%100==0?" de ":" ")+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",ww:"s\u0103pt\u0103m\xe2ni",MM:"luni",yy:"ani"}[t]}function Tn(e,a,t){return"m"===t?a?"\u043c\u0438\u043d\u0443\u0442\u0430":"\u043c\u0438\u043d\u0443\u0442\u0443":e+" "+(e=+e,a=(a={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u043c\u0438\u043d\u0443\u0442\u0430_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442":"\u043c\u0438\u043d\u0443\u0442\u0443_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442",hh:"\u0447\u0430\u0441_\u0447\u0430\u0441\u0430_\u0447\u0430\u0441\u043e\u0432",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u044f_\u0434\u043d\u0435\u0439",ww:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043d\u0435\u0434\u0435\u043b\u0438_\u043d\u0435\u0434\u0435\u043b\u044c",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u0430_\u043c\u0435\u0441\u044f\u0446\u0435\u0432",yy:"\u0433\u043e\u0434_\u0433\u043e\u0434\u0430_\u043b\u0435\u0442"}[t]).split("_"),e%10==1&&e%100!=11?a[0]:2<=e%10&&e%10<=4&&(e%100<10||20<=e%100)?a[1]:a[2])}c.defineLocale("pl",{months:function(e,a){return e?(/D MMMM/.test(a)?fn:yn)[e.month()]:yn},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_pa\u017a_lis_gru".split("_"),monthsParse:na,longMonthsParse:na,shortMonthsParse:na,weekdays:"niedziela_poniedzia\u0142ek_wtorek_\u015broda_czwartek_pi\u0105tek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_\u015br_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_\u015ar_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dzi\u015b o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedziel\u0119 o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W \u015brod\u0119 o] LT";case 6:return"[W sobot\u0119 o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zesz\u0142\u0105 niedziel\u0119 o] LT";case 3:return"[W zesz\u0142\u0105 \u015brod\u0119 o] LT";case 6:return"[W zesz\u0142\u0105 sobot\u0119 o] LT";default:return"[W zesz\u0142y] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:pn,m:pn,mm:pn,h:pn,hh:pn,d:"1 dzie\u0144",dd:"%d dni",w:"tydzie\u0144",ww:pn,M:"miesi\u0105c",MM:pn,y:"rok",yy:pn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),c.defineLocale("pt-br",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"domingo_segunda-feira_ter\xe7a-feira_quarta-feira_quinta-feira_sexta-feira_s\xe1bado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_s\xe1b".split("_"),weekdaysMin:"do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xe0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xe0s] HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",invalidDate:"Data inv\xe1lida"}),c.defineLocale("pt",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Ter\xe7a-feira_Quarta-feira_Quinta-feira_Sexta-feira_S\xe1bado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_S\xe1b".split("_"),weekdaysMin:"Do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",w:"uma semana",ww:"%d semanas",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}}),c.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminic\u0103_luni_mar\u021bi_miercuri_joi_vineri_s\xe2mb\u0103t\u0103".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_S\xe2m".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_S\xe2".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[m\xe2ine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s \xeen urm\u0103",s:"c\xe2teva secunde",ss:Dn,m:"un minut",mm:Dn,h:"o or\u0103",hh:Dn,d:"o zi",dd:Dn,w:"o s\u0103pt\u0103m\xe2n\u0103",ww:Dn,M:"o lun\u0103",MM:Dn,y:"un an",yy:Dn},week:{dow:1,doy:7}});t=[/^\u044f\u043d\u0432/i,/^\u0444\u0435\u0432/i,/^\u043c\u0430\u0440/i,/^\u0430\u043f\u0440/i,/^\u043c\u0430[\u0439\u044f]/i,/^\u0438\u044e\u043d/i,/^\u0438\u044e\u043b/i,/^\u0430\u0432\u0433/i,/^\u0441\u0435\u043d/i,/^\u043e\u043a\u0442/i,/^\u043d\u043e\u044f/i,/^\u0434\u0435\u043a/i],c.defineLocale("ru",{months:{format:"\u044f\u043d\u0432\u0430\u0440\u044f_\u0444\u0435\u0432\u0440\u0430\u043b\u044f_\u043c\u0430\u0440\u0442\u0430_\u0430\u043f\u0440\u0435\u043b\u044f_\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433\u0443\u0441\u0442\u0430_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f_\u043e\u043a\u0442\u044f\u0431\u0440\u044f_\u043d\u043e\u044f\u0431\u0440\u044f_\u0434\u0435\u043a\u0430\u0431\u0440\u044f".split("_"),standalone:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_")},monthsShort:{format:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_"),standalone:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440\u0442_\u0430\u043f\u0440._\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_")},weekdays:{standalone:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0430_\u0441\u0443\u0431\u0431\u043e\u0442\u0430".split("_"),format:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0443_\u0441\u0443\u0431\u0431\u043e\u0442\u0443".split("_"),isFormat:/\[ ?[\u0412\u0432] ?(?:\u043f\u0440\u043e\u0448\u043b\u0443\u044e|\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e|\u044d\u0442\u0443)? ?] ?dddd/},weekdaysShort:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),monthsParse:t,longMonthsParse:t,shortMonthsParse:t,monthsRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsShortRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsStrictRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044f\u044c]|\u0444\u0435\u0432\u0440\u0430\u043b[\u044f\u044c]|\u043c\u0430\u0440\u0442\u0430?|\u0430\u043f\u0440\u0435\u043b[\u044f\u044c]|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044f\u044c]|\u0438\u044e\u043b[\u044f\u044c]|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043e\u043a\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043d\u043e\u044f\u0431\u0440[\u044f\u044c]|\u0434\u0435\u043a\u0430\u0431\u0440[\u044f\u044c])/i,monthsShortStrictRegex:/^(\u044f\u043d\u0432\.|\u0444\u0435\u0432\u0440?\.|\u043c\u0430\u0440[\u0442.]|\u0430\u043f\u0440\.|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044c\u044f.]|\u0438\u044e\u043b[\u044c\u044f.]|\u0430\u0432\u0433\.|\u0441\u0435\u043d\u0442?\.|\u043e\u043a\u0442\.|\u043d\u043e\u044f\u0431?\.|\u0434\u0435\u043a\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., H:mm",LLLL:"dddd, D MMMM YYYY \u0433., H:mm"},calendar:{sameDay:"[\u0421\u0435\u0433\u043e\u0434\u043d\u044f, \u0432] LT",nextDay:"[\u0417\u0430\u0432\u0442\u0440\u0430, \u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430, \u0432] LT",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e] dddd, [\u0432] LT"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u0443\u044e] dddd, [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0447\u0435\u0440\u0435\u0437 %s",past:"%s \u043d\u0430\u0437\u0430\u0434",s:"\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434",ss:Tn,m:Tn,mm:Tn,h:"\u0447\u0430\u0441",hh:Tn,d:"\u0434\u0435\u043d\u044c",dd:Tn,w:"\u043d\u0435\u0434\u0435\u043b\u044f",ww:Tn,M:"\u043c\u0435\u0441\u044f\u0446",MM:Tn,y:"\u0433\u043e\u0434",yy:Tn},meridiemParse:/\u043d\u043e\u0447\u0438|\u0443\u0442\u0440\u0430|\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430/i,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430)$/.test(e)},meridiem:function(e,a,t){return e<4?"\u043d\u043e\u0447\u0438":e<12?"\u0443\u0442\u0440\u0430":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0435\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e|\u044f)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":return e+"-\u0439";case"D":return e+"-\u0433\u043e";case"w":case"W":return e+"-\u044f";default:return e}},week:{dow:1,doy:4}}),m=["\u062c\u0646\u0648\u0631\u064a","\u0641\u064a\u0628\u0631\u0648\u0631\u064a","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u064a\u0644","\u0645\u0626\u064a","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0621\u0650","\u0622\u06af\u0633\u067d","\u0633\u064a\u067e\u067d\u0645\u0628\u0631","\u0622\u06aa\u067d\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u068a\u0633\u0645\u0628\u0631"],o=["\u0622\u0686\u0631","\u0633\u0648\u0645\u0631","\u0627\u06b1\u0627\u0631\u0648","\u0627\u0631\u0628\u0639","\u062e\u0645\u064a\u0633","\u062c\u0645\u0639","\u0687\u0646\u0687\u0631"],c.defineLocale("sd",{months:m,monthsShort:m,weekdays:o,weekdaysShort:o,weekdaysMin:o,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0627\u0684] LT",nextDay:"[\u0633\u0680\u0627\u06bb\u064a] LT",nextWeek:"dddd [\u0627\u06b3\u064a\u0646 \u0647\u0641\u062a\u064a \u062a\u064a] LT",lastDay:"[\u06aa\u0627\u0644\u0647\u0647] LT",lastWeek:"[\u06af\u0632\u0631\u064a\u0644 \u0647\u0641\u062a\u064a] dddd [\u062a\u064a] LT",sameElse:"L"},relativeTime:{future:"%s \u067e\u0648\u0621",past:"%s \u0627\u06b3",s:"\u0686\u0646\u062f \u0633\u064a\u06aa\u0646\u068a",ss:"%d \u0633\u064a\u06aa\u0646\u068a",m:"\u0647\u06aa \u0645\u0646\u067d",mm:"%d \u0645\u0646\u067d",h:"\u0647\u06aa \u06aa\u0644\u0627\u06aa",hh:"%d \u06aa\u0644\u0627\u06aa",d:"\u0647\u06aa \u068f\u064a\u0646\u0647\u0646",dd:"%d \u068f\u064a\u0646\u0647\u0646",M:"\u0647\u06aa \u0645\u0647\u064a\u0646\u0648",MM:"%d \u0645\u0647\u064a\u0646\u0627",y:"\u0647\u06aa \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}}),c.defineLocale("se",{months:"o\u0111\u0111ajagem\xe1nnu_guovvam\xe1nnu_njuk\u010dam\xe1nnu_cuo\u014bom\xe1nnu_miessem\xe1nnu_geassem\xe1nnu_suoidnem\xe1nnu_borgem\xe1nnu_\u010dak\u010dam\xe1nnu_golggotm\xe1nnu_sk\xe1bmam\xe1nnu_juovlam\xe1nnu".split("_"),monthsShort:"o\u0111\u0111j_guov_njuk_cuo_mies_geas_suoi_borg_\u010dak\u010d_golg_sk\xe1b_juov".split("_"),weekdays:"sotnabeaivi_vuoss\xe1rga_ma\u014b\u014beb\xe1rga_gaskavahkku_duorastat_bearjadat_l\xe1vvardat".split("_"),weekdaysShort:"sotn_vuos_ma\u014b_gask_duor_bear_l\xe1v".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s gea\u017ees",past:"ma\u014bit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta m\xe1nnu",MM:"%d m\xe1nut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),c.defineLocale("si",{months:"\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2_\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2_\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4_\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4_\u0dc3\u0dd0\u0db4\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca_\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca".split("_"),monthsShort:"\u0da2\u0db1_\u0db4\u0dd9\u0db6_\u0db8\u0dcf\u0dbb\u0dca_\u0d85\u0db4\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd_\u0dc3\u0dd0\u0db4\u0dca_\u0d94\u0d9a\u0dca_\u0db1\u0ddc\u0dc0\u0dd0_\u0daf\u0dd9\u0dc3\u0dd0".split("_"),weekdays:"\u0d89\u0dbb\u0dd2\u0daf\u0dcf_\u0dc3\u0db3\u0dd4\u0daf\u0dcf_\u0d85\u0d9f\u0dc4\u0dbb\u0dd4\u0dc0\u0dcf\u0daf\u0dcf_\u0db6\u0daf\u0dcf\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca\u0db4\u0dad\u0dd2\u0db1\u0dca\u0daf\u0dcf_\u0dc3\u0dd2\u0d9a\u0dd4\u0dbb\u0dcf\u0daf\u0dcf_\u0dc3\u0dd9\u0db1\u0dc3\u0dd4\u0dbb\u0dcf\u0daf\u0dcf".split("_"),weekdaysShort:"\u0d89\u0dbb\u0dd2_\u0dc3\u0db3\u0dd4_\u0d85\u0d9f_\u0db6\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4_\u0dc3\u0dd2\u0d9a\u0dd4_\u0dc3\u0dd9\u0db1".split("_"),weekdaysMin:"\u0d89_\u0dc3_\u0d85_\u0db6_\u0db6\u0dca\u200d\u0dbb_\u0dc3\u0dd2_\u0dc3\u0dd9".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [\u0dc0\u0dd0\u0db1\u0dd2] dddd, a h:mm:ss"},calendar:{sameDay:"[\u0d85\u0daf] LT[\u0da7]",nextDay:"[\u0dc4\u0dd9\u0da7] LT[\u0da7]",nextWeek:"dddd LT[\u0da7]",lastDay:"[\u0d8a\u0dba\u0dda] LT[\u0da7]",lastWeek:"[\u0db4\u0dc3\u0dd4\u0d9c\u0dd2\u0dba] dddd LT[\u0da7]",sameElse:"L"},relativeTime:{future:"%s\u0d9a\u0dd2\u0db1\u0dca",past:"%s\u0d9a\u0da7 \u0db4\u0dd9\u0dbb",s:"\u0dad\u0dad\u0dca\u0db4\u0dbb \u0d9a\u0dd2\u0dc4\u0dd2\u0db4\u0dba",ss:"\u0dad\u0dad\u0dca\u0db4\u0dbb %d",m:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4\u0dc0",mm:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4 %d",h:"\u0db4\u0dd0\u0dba",hh:"\u0db4\u0dd0\u0dba %d",d:"\u0daf\u0dd2\u0db1\u0dba",dd:"\u0daf\u0dd2\u0db1 %d",M:"\u0db8\u0dcf\u0dc3\u0dba",MM:"\u0db8\u0dcf\u0dc3 %d",y:"\u0dc0\u0dc3\u0dbb",yy:"\u0dc0\u0dc3\u0dbb %d"},dayOfMonthOrdinalParse:/\d{1,2} \u0dc0\u0dd0\u0db1\u0dd2/,ordinal:function(e){return e+" \u0dc0\u0dd0\u0db1\u0dd2"},meridiemParse:/\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4|\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4|\u0db4\u0dd9.\u0dc0|\u0db4.\u0dc0./,isPM:function(e){return"\u0db4.\u0dc0."===e||"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4"===e},meridiem:function(e,a,t){return 11<e?t?"\u0db4.\u0dc0.":"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4":t?"\u0db4\u0dd9.\u0dc0.":"\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4"}}),n="janu\xe1r_febru\xe1r_marec_apr\xedl_m\xe1j_j\xfan_j\xfal_august_september_okt\xf3ber_november_december".split("_"),ze="jan_feb_mar_apr_m\xe1j_j\xfan_j\xfal_aug_sep_okt_nov_dec".split("_");function gn(e){return 1<e&&e<5}function wn(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"p\xe1r sek\xfand":"p\xe1r sekundami";case"ss":return a||s?n+(gn(e)?"sekundy":"sek\xfand"):n+"sekundami";case"m":return a?"min\xfata":s?"min\xfatu":"min\xfatou";case"mm":return a||s?n+(gn(e)?"min\xfaty":"min\xfat"):n+"min\xfatami";case"h":return a?"hodina":s?"hodinu":"hodinou";case"hh":return a||s?n+(gn(e)?"hodiny":"hod\xedn"):n+"hodinami";case"d":return a||s?"de\u0148":"d\u0148om";case"dd":return a||s?n+(gn(e)?"dni":"dn\xed"):n+"d\u0148ami";case"M":return a||s?"mesiac":"mesiacom";case"MM":return a||s?n+(gn(e)?"mesiace":"mesiacov"):n+"mesiacmi";case"y":return a||s?"rok":"rokom";case"yy":return a||s?n+(gn(e)?"roky":"rokov"):n+"rokmi"}}function bn(e,a,t,s){var n=e+" ";switch(t){case"s":return a||s?"nekaj sekund":"nekaj sekundami";case"ss":return n+=1===e?a?"sekundo":"sekundi":2===e?a||s?"sekundi":"sekundah":e<5?a||s?"sekunde":"sekundah":"sekund";case"m":return a?"ena minuta":"eno minuto";case"mm":return n+=1===e?a?"minuta":"minuto":2===e?a||s?"minuti":"minutama":e<5?a||s?"minute":"minutami":a||s?"minut":"minutami";case"h":return a?"ena ura":"eno uro";case"hh":return n+=1===e?a?"ura":"uro":2===e?a||s?"uri":"urama":e<5?a||s?"ure":"urami":a||s?"ur":"urami";case"d":return a||s?"en dan":"enim dnem";case"dd":return n+=1===e?a||s?"dan":"dnem":2===e?a||s?"dni":"dnevoma":a||s?"dni":"dnevi";case"M":return a||s?"en mesec":"enim mesecem";case"MM":return n+=1===e?a||s?"mesec":"mesecem":2===e?a||s?"meseca":"mesecema":e<5?a||s?"mesece":"meseci":a||s?"mesecev":"meseci";case"y":return a||s?"eno leto":"enim letom";case"yy":return n+=1===e?a||s?"leto":"letom":2===e?a||s?"leti":"letoma":e<5?a||s?"leta":"leti":a||s?"let":"leti"}}c.defineLocale("sk",{months:n,monthsShort:ze,weekdays:"nede\u013ea_pondelok_utorok_streda_\u0161tvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_\u0161t_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_\u0161t_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nede\u013eu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo \u0161tvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[v\u010dera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minul\xfa nede\u013eu o] LT";case 1:case 2:return"[minul\xfd] dddd [o] LT";case 3:return"[minul\xfa stredu o] LT";case 4:case 5:return"[minul\xfd] dddd [o] LT";case 6:return"[minul\xfa sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:wn,ss:wn,m:wn,mm:wn,h:wn,hh:wn,d:wn,dd:wn,M:wn,MM:wn,y:wn,yy:wn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),c.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_\u010detrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._\u010det._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_\u010de_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[v\u010deraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prej\u0161njo] [nedeljo] [ob] LT";case 3:return"[prej\u0161njo] [sredo] [ob] LT";case 6:return"[prej\u0161njo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prej\u0161nji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"\u010dez %s",past:"pred %s",s:bn,ss:bn,m:bn,mm:bn,h:bn,hh:bn,d:bn,dd:bn,M:bn,MM:bn,y:bn,yy:bn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),c.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_N\xebntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_N\xebn_Dhj".split("_"),weekdays:"E Diel_E H\xebn\xeb_E Mart\xeb_E M\xebrkur\xeb_E Enjte_E Premte_E Shtun\xeb".split("_"),weekdaysShort:"Die_H\xebn_Mar_M\xebr_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_M\xeb_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return"M"===e.charAt(0)},meridiem:function(e,a,t){return e<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot n\xeb] LT",nextDay:"[Nes\xebr n\xeb] LT",nextWeek:"dddd [n\xeb] LT",lastDay:"[Dje n\xeb] LT",lastWeek:"dddd [e kaluar n\xeb] LT",sameElse:"L"},relativeTime:{future:"n\xeb %s",past:"%s m\xeb par\xeb",s:"disa sekonda",ss:"%d sekonda",m:"nj\xeb minut\xeb",mm:"%d minuta",h:"nj\xeb or\xeb",hh:"%d or\xeb",d:"nj\xeb dit\xeb",dd:"%d dit\xeb",M:"nj\xeb muaj",MM:"%d muaj",y:"nj\xeb vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var W={words:{ss:["\u0441\u0435\u043a\u0443\u043d\u0434\u0430","\u0441\u0435\u043a\u0443\u043d\u0434\u0435","\u0441\u0435\u043a\u0443\u043d\u0434\u0438"],m:["\u0458\u0435\u0434\u0430\u043d \u043c\u0438\u043d\u0443\u0442","\u0458\u0435\u0434\u043d\u043e\u0433 \u043c\u0438\u043d\u0443\u0442\u0430"],mm:["\u043c\u0438\u043d\u0443\u0442","\u043c\u0438\u043d\u0443\u0442\u0430","\u043c\u0438\u043d\u0443\u0442\u0430"],h:["\u0458\u0435\u0434\u0430\u043d \u0441\u0430\u0442","\u0458\u0435\u0434\u043d\u043e\u0433 \u0441\u0430\u0442\u0430"],hh:["\u0441\u0430\u0442","\u0441\u0430\u0442\u0430","\u0441\u0430\u0442\u0438"],d:["\u0458\u0435\u0434\u0430\u043d \u0434\u0430\u043d","\u0458\u0435\u0434\u043d\u043e\u0433 \u0434\u0430\u043d\u0430"],dd:["\u0434\u0430\u043d","\u0434\u0430\u043d\u0430","\u0434\u0430\u043d\u0430"],M:["\u0458\u0435\u0434\u0430\u043d \u043c\u0435\u0441\u0435\u0446","\u0458\u0435\u0434\u043d\u043e\u0433 \u043c\u0435\u0441\u0435\u0446\u0430"],MM:["\u043c\u0435\u0441\u0435\u0446","\u043c\u0435\u0441\u0435\u0446\u0430","\u043c\u0435\u0441\u0435\u0446\u0438"],y:["\u0458\u0435\u0434\u043d\u0443 \u0433\u043e\u0434\u0438\u043d\u0443","\u0458\u0435\u0434\u043d\u0435 \u0433\u043e\u0434\u0438\u043d\u0435"],yy:["\u0433\u043e\u0434\u0438\u043d\u0443","\u0433\u043e\u0434\u0438\u043d\u0435","\u0433\u043e\u0434\u0438\u043d\u0430"]},correctGrammaticalCase:function(e,a){return 1<=e%10&&e%10<=4&&(e%100<10||20<=e%100)?e%10==1?a[0]:a[1]:a[2]},translate:function(e,a,t,s){var n=W.words[t];return 1===t.length?"y"===t&&a?"\u0458\u0435\u0434\u043d\u0430 \u0433\u043e\u0434\u0438\u043d\u0430":s||a?n[0]:n[1]:(s=W.correctGrammaticalCase(e,n),"yy"===t&&a&&"\u0433\u043e\u0434\u0438\u043d\u0443"===s?e+" \u0433\u043e\u0434\u0438\u043d\u0430":e+" "+s)}},A=(c.defineLocale("sr-cyrl",{months:"\u0458\u0430\u043d\u0443\u0430\u0440_\u0444\u0435\u0431\u0440\u0443\u0430\u0440_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440_\u043e\u043a\u0442\u043e\u0431\u0430\u0440_\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440_\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440".split("_"),monthsShort:"\u0458\u0430\u043d._\u0444\u0435\u0431._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433._\u0441\u0435\u043f._\u043e\u043a\u0442._\u043d\u043e\u0432._\u0434\u0435\u0446.".split("_"),monthsParseExact:!0,weekdays:"\u043d\u0435\u0434\u0435\u0459\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a_\u0443\u0442\u043e\u0440\u0430\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a_\u043f\u0435\u0442\u0430\u043a_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434._\u043f\u043e\u043d._\u0443\u0442\u043e._\u0441\u0440\u0435._\u0447\u0435\u0442._\u043f\u0435\u0442._\u0441\u0443\u0431.".split("_"),weekdaysMin:"\u043d\u0435_\u043f\u043e_\u0443\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441\u0443".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[\u0434\u0430\u043d\u0430\u0441 \u0443] LT",nextDay:"[\u0441\u0443\u0442\u0440\u0430 \u0443] LT",nextWeek:function(){switch(this.day()){case 0:return"[\u0443] [\u043d\u0435\u0434\u0435\u0459\u0443] [\u0443] LT";case 3:return"[\u0443] [\u0441\u0440\u0435\u0434\u0443] [\u0443] LT";case 6:return"[\u0443] [\u0441\u0443\u0431\u043e\u0442\u0443] [\u0443] LT";case 1:case 2:case 4:case 5:return"[\u0443] dddd [\u0443] LT"}},lastDay:"[\u0458\u0443\u0447\u0435 \u0443] LT",lastWeek:function(){return["[\u043f\u0440\u043e\u0448\u043b\u0435] [\u043d\u0435\u0434\u0435\u0459\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0443\u0442\u043e\u0440\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0440\u0435\u0434\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0447\u0435\u0442\u0432\u0440\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u0435\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0443\u0431\u043e\u0442\u0435] [\u0443] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435 %s",s:"\u043d\u0435\u043a\u043e\u043b\u0438\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:W.translate,m:W.translate,mm:W.translate,h:W.translate,hh:W.translate,d:W.translate,dd:W.translate,M:W.translate,MM:W.translate,y:W.translate,yy:W.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),{words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],d:["jedan dan","jednog dana"],dd:["dan","dana","dana"],M:["jedan mesec","jednog meseca"],MM:["mesec","meseca","meseci"],y:["jednu godinu","jedne godine"],yy:["godinu","godine","godina"]},correctGrammaticalCase:function(e,a){return 1<=e%10&&e%10<=4&&(e%100<10||20<=e%100)?e%10==1?a[0]:a[1]:a[2]},translate:function(e,a,t,s){var n=A.words[t];return 1===t.length?"y"===t&&a?"jedna godina":s||a?n[0]:n[1]:(s=A.correctGrammaticalCase(e,n),"yy"===t&&a&&"godinu"===s?e+" godina":e+" "+s)}}),Hn=(c.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedelje] [u] LT","[pro\u0161log] [ponedeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:A.translate,m:A.translate,mm:A.translate,h:A.translate,hh:A.translate,d:A.translate,dd:A.translate,M:A.translate,MM:A.translate,y:A.translate,yy:A.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}}),c.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(e,a,t){return e<11?"ekuseni":e<15?"emini":e<19?"entsambama":"ebusuku"},meridiemHour:function(e,a){return 12===e&&(e=0),"ekuseni"===a?e:"emini"===a?11<=e?e:e+12:"entsambama"===a||"ebusuku"===a?0===e?0:e+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}}),c.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf6ndag_m\xe5ndag_tisdag_onsdag_torsdag_fredag_l\xf6rdag".split("_"),weekdaysShort:"s\xf6n_m\xe5n_tis_ons_tor_fre_l\xf6r".split("_"),weekdaysMin:"s\xf6_m\xe5_ti_on_to_fr_l\xf6".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Ig\xe5r] LT",nextWeek:"[P\xe5] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"f\xf6r %s sedan",s:"n\xe5gra sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en m\xe5nad",MM:"%d m\xe5nader",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}(\:e|\:a)/,ordinal:function(e){var a=e%10;return e+(1!=~~(e%100/10)&&(1==a||2==a)?":a":":e")},week:{dow:1,doy:4}}),c.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"hh:mm A",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"siku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}}),{1:"\u0be7",2:"\u0be8",3:"\u0be9",4:"\u0bea",5:"\u0beb",6:"\u0bec",7:"\u0bed",8:"\u0bee",9:"\u0bef",0:"\u0be6"}),Sn={"\u0be7":"1","\u0be8":"2","\u0be9":"3","\u0bea":"4","\u0beb":"5","\u0bec":"6","\u0bed":"7","\u0bee":"8","\u0bef":"9","\u0be6":"0"},vn=(c.defineLocale("ta",{months:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),monthsShort:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),weekdays:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bcd\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0b9f\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0ba9\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8".split("_"),weekdaysShort:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf_\u0b9a\u0ba9\u0bbf".split("_"),weekdaysMin:"\u0b9e\u0bbe_\u0ba4\u0bbf_\u0b9a\u0bc6_\u0baa\u0bc1_\u0bb5\u0bbf_\u0bb5\u0bc6_\u0b9a".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[\u0b87\u0ba9\u0bcd\u0bb1\u0bc1] LT",nextDay:"[\u0ba8\u0bbe\u0bb3\u0bc8] LT",nextWeek:"dddd, LT",lastDay:"[\u0ba8\u0bc7\u0bb1\u0bcd\u0bb1\u0bc1] LT",lastWeek:"[\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 \u0bb5\u0bbe\u0bb0\u0bae\u0bcd] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0b87\u0bb2\u0bcd",past:"%s \u0bae\u0bc1\u0ba9\u0bcd",s:"\u0b92\u0bb0\u0bc1 \u0b9a\u0bbf\u0bb2 \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",ss:"%d \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",m:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0bae\u0bcd",mm:"%d \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd",h:"\u0b92\u0bb0\u0bc1 \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",hh:"%d \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",d:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbe\u0bb3\u0bcd",dd:"%d \u0ba8\u0bbe\u0b9f\u0bcd\u0b95\u0bb3\u0bcd",M:"\u0b92\u0bb0\u0bc1 \u0bae\u0bbe\u0ba4\u0bae\u0bcd",MM:"%d \u0bae\u0bbe\u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd",y:"\u0b92\u0bb0\u0bc1 \u0bb5\u0bb0\u0bc1\u0b9f\u0bae\u0bcd",yy:"%d \u0b86\u0ba3\u0bcd\u0b9f\u0bc1\u0b95\u0bb3\u0bcd"},dayOfMonthOrdinalParse:/\d{1,2}\u0bb5\u0ba4\u0bc1/,ordinal:function(e){return e+"\u0bb5\u0ba4\u0bc1"},preparse:function(e){return e.replace(/[\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef\u0be6]/g,function(e){return Sn[e]})},postformat:function(e){return e.replace(/\d/g,function(e){return Hn[e]})},meridiemParse:/\u0baf\u0bbe\u0bae\u0bae\u0bcd|\u0bb5\u0bc8\u0b95\u0bb1\u0bc8|\u0b95\u0bbe\u0bb2\u0bc8|\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd|\u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1|\u0bae\u0bbe\u0bb2\u0bc8/,meridiem:function(e,a,t){return e<2?" \u0baf\u0bbe\u0bae\u0bae\u0bcd":e<6?" \u0bb5\u0bc8\u0b95\u0bb1\u0bc8":e<10?" \u0b95\u0bbe\u0bb2\u0bc8":e<14?" \u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd":e<18?" \u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1":e<22?" \u0bae\u0bbe\u0bb2\u0bc8":" \u0baf\u0bbe\u0bae\u0bae\u0bcd"},meridiemHour:function(e,a){return 12===e&&(e=0),"\u0baf\u0bbe\u0bae\u0bae\u0bcd"===a?e<2?e:e+12:"\u0bb5\u0bc8\u0b95\u0bb1\u0bc8"===a||"\u0b95\u0bbe\u0bb2\u0bc8"===a||"\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd"===a&&10<=e?e:e+12},week:{dow:0,doy:6}}),c.defineLocale("te",{months:"\u0c1c\u0c28\u0c35\u0c30\u0c3f_\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f_\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d_\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c41\u0c32\u0c48_\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41_\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d_\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d_\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d_\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d".split("_"),monthsShort:"\u0c1c\u0c28._\u0c2b\u0c3f\u0c2c\u0c4d\u0c30._\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f._\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c41\u0c32\u0c48_\u0c06\u0c17._\u0c38\u0c46\u0c2a\u0c4d._\u0c05\u0c15\u0c4d\u0c1f\u0c4b._\u0c28\u0c35._\u0c21\u0c3f\u0c38\u0c46.".split("_"),monthsParseExact:!0,weekdays:"\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02_\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02_\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02_\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02_\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02".split("_"),weekdaysShort:"\u0c06\u0c26\u0c3f_\u0c38\u0c4b\u0c2e_\u0c2e\u0c02\u0c17\u0c33_\u0c2c\u0c41\u0c27_\u0c17\u0c41\u0c30\u0c41_\u0c36\u0c41\u0c15\u0c4d\u0c30_\u0c36\u0c28\u0c3f".split("_"),weekdaysMin:"\u0c06_\u0c38\u0c4b_\u0c2e\u0c02_\u0c2c\u0c41_\u0c17\u0c41_\u0c36\u0c41_\u0c36".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c28\u0c47\u0c21\u0c41] LT",nextDay:"[\u0c30\u0c47\u0c2a\u0c41] LT",nextWeek:"dddd, LT",lastDay:"[\u0c28\u0c3f\u0c28\u0c4d\u0c28] LT",lastWeek:"[\u0c17\u0c24] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0c32\u0c4b",past:"%s \u0c15\u0c4d\u0c30\u0c3f\u0c24\u0c02",s:"\u0c15\u0c4a\u0c28\u0c4d\u0c28\u0c3f \u0c15\u0c4d\u0c37\u0c23\u0c3e\u0c32\u0c41",ss:"%d \u0c38\u0c46\u0c15\u0c28\u0c4d\u0c32\u0c41",m:"\u0c12\u0c15 \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c02",mm:"%d \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c3e\u0c32\u0c41",h:"\u0c12\u0c15 \u0c17\u0c02\u0c1f",hh:"%d \u0c17\u0c02\u0c1f\u0c32\u0c41",d:"\u0c12\u0c15 \u0c30\u0c4b\u0c1c\u0c41",dd:"%d \u0c30\u0c4b\u0c1c\u0c41\u0c32\u0c41",M:"\u0c12\u0c15 \u0c28\u0c46\u0c32",MM:"%d \u0c28\u0c46\u0c32\u0c32\u0c41",y:"\u0c12\u0c15 \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c02",yy:"%d \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c3e\u0c32\u0c41"},dayOfMonthOrdinalParse:/\d{1,2}\u0c35/,ordinal:"%d\u0c35",meridiemParse:/\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f|\u0c09\u0c26\u0c2f\u0c02|\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02|\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"===a?e<4?e:e+12:"\u0c09\u0c26\u0c2f\u0c02"===a?e:"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02"===a?10<=e?e:e+12:"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f":e<10?"\u0c09\u0c26\u0c2f\u0c02":e<17?"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02":e<20?"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02":"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"},week:{dow:0,doy:6}}),c.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Ju\xf1u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"segundu balun",ss:"segundu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),{0:"-\u0443\u043c",1:"-\u0443\u043c",2:"-\u044e\u043c",3:"-\u044e\u043c",4:"-\u0443\u043c",5:"-\u0443\u043c",6:"-\u0443\u043c",7:"-\u0443\u043c",8:"-\u0443\u043c",9:"-\u0443\u043c",10:"-\u0443\u043c",12:"-\u0443\u043c",13:"-\u0443\u043c",20:"-\u0443\u043c",30:"-\u044e\u043c",40:"-\u0443\u043c",50:"-\u0443\u043c",60:"-\u0443\u043c",70:"-\u0443\u043c",80:"-\u0443\u043c",90:"-\u0443\u043c",100:"-\u0443\u043c"}),jn=(c.defineLocale("tg",{months:{format:"\u044f\u043d\u0432\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0430\u043b\u0438_\u043c\u0430\u0440\u0442\u0438_\u0430\u043f\u0440\u0435\u043b\u0438_\u043c\u0430\u0439\u0438_\u0438\u044e\u043d\u0438_\u0438\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442\u0438_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u0438_\u043e\u043a\u0442\u044f\u0431\u0440\u0438_\u043d\u043e\u044f\u0431\u0440\u0438_\u0434\u0435\u043a\u0430\u0431\u0440\u0438".split("_"),standalone:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_")},monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u044f\u043a\u0448\u0430\u043d\u0431\u0435_\u0434\u0443\u0448\u0430\u043d\u0431\u0435_\u0441\u0435\u0448\u0430\u043d\u0431\u0435_\u0447\u043e\u0440\u0448\u0430\u043d\u0431\u0435_\u043f\u0430\u043d\u04b7\u0448\u0430\u043d\u0431\u0435_\u04b7\u0443\u043c\u044a\u0430_\u0448\u0430\u043d\u0431\u0435".split("_"),weekdaysShort:"\u044f\u0448\u0431_\u0434\u0448\u0431_\u0441\u0448\u0431_\u0447\u0448\u0431_\u043f\u0448\u0431_\u04b7\u0443\u043c_\u0448\u043d\u0431".split("_"),weekdaysMin:"\u044f\u0448_\u0434\u0448_\u0441\u0448_\u0447\u0448_\u043f\u0448_\u04b7\u043c_\u0448\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0418\u043c\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextDay:"[\u0424\u0430\u0440\u0434\u043e \u0441\u043e\u0430\u0442\u0438] LT",lastDay:"[\u0414\u0438\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u043e\u044f\u043d\u0434\u0430 \u0441\u043e\u0430\u0442\u0438] LT",lastWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u0433\u0443\u0437\u0430\u0448\u0442\u0430 \u0441\u043e\u0430\u0442\u0438] LT",sameElse:"L"},relativeTime:{future:"\u0431\u0430\u044a\u0434\u0438 %s",past:"%s \u043f\u0435\u0448",s:"\u044f\u043a\u0447\u0430\u043d\u0434 \u0441\u043e\u043d\u0438\u044f",m:"\u044f\u043a \u0434\u0430\u049b\u0438\u049b\u0430",mm:"%d \u0434\u0430\u049b\u0438\u049b\u0430",h:"\u044f\u043a \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u044f\u043a \u0440\u04ef\u0437",dd:"%d \u0440\u04ef\u0437",M:"\u044f\u043a \u043c\u043e\u04b3",MM:"%d \u043c\u043e\u04b3",y:"\u044f\u043a \u0441\u043e\u043b",yy:"%d \u0441\u043e\u043b"},meridiemParse:/\u0448\u0430\u0431|\u0441\u0443\u0431\u04b3|\u0440\u04ef\u0437|\u0431\u0435\u0433\u043e\u04b3/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u0448\u0430\u0431"===a?e<4?e:e+12:"\u0441\u0443\u0431\u04b3"===a?e:"\u0440\u04ef\u0437"===a?11<=e?e:e+12:"\u0431\u0435\u0433\u043e\u04b3"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?"\u0448\u0430\u0431":e<11?"\u0441\u0443\u0431\u04b3":e<16?"\u0440\u04ef\u0437":e<19?"\u0431\u0435\u0433\u043e\u04b3":"\u0448\u0430\u0431"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0443\u043c|\u044e\u043c)/,ordinal:function(e){return e+(vn[e]||vn[e%10]||vn[100<=e?100:null])},week:{dow:1,doy:7}}),c.defineLocale("th",{months:"\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21_\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c_\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21_\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19_\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21_\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19_\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21_\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21_\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19_\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21_\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19_\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21".split("_"),monthsShort:"\u0e21.\u0e04._\u0e01.\u0e1e._\u0e21\u0e35.\u0e04._\u0e40\u0e21.\u0e22._\u0e1e.\u0e04._\u0e21\u0e34.\u0e22._\u0e01.\u0e04._\u0e2a.\u0e04._\u0e01.\u0e22._\u0e15.\u0e04._\u0e1e.\u0e22._\u0e18.\u0e04.".split("_"),monthsParseExact:!0,weekdays:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysShort:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysMin:"\u0e2d\u0e32._\u0e08._\u0e2d._\u0e1e._\u0e1e\u0e24._\u0e28._\u0e2a.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm",LLLL:"\u0e27\u0e31\u0e19dddd\u0e17\u0e35\u0e48 D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm"},meridiemParse:/\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07|\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07/,isPM:function(e){return"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"===e},meridiem:function(e,a,t){return e<12?"\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07":"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"},calendar:{sameDay:"[\u0e27\u0e31\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextDay:"[\u0e1e\u0e23\u0e38\u0e48\u0e07\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextWeek:"dddd[\u0e2b\u0e19\u0e49\u0e32 \u0e40\u0e27\u0e25\u0e32] LT",lastDay:"[\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e27\u0e32\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",lastWeek:"[\u0e27\u0e31\u0e19]dddd[\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27 \u0e40\u0e27\u0e25\u0e32] LT",sameElse:"L"},relativeTime:{future:"\u0e2d\u0e35\u0e01 %s",past:"%s\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27",s:"\u0e44\u0e21\u0e48\u0e01\u0e35\u0e48\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",ss:"%d \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",m:"1 \u0e19\u0e32\u0e17\u0e35",mm:"%d \u0e19\u0e32\u0e17\u0e35",h:"1 \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",hh:"%d \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",d:"1 \u0e27\u0e31\u0e19",dd:"%d \u0e27\u0e31\u0e19",w:"1 \u0e2a\u0e31\u0e1b\u0e14\u0e32\u0e2b\u0e4c",ww:"%d \u0e2a\u0e31\u0e1b\u0e14\u0e32\u0e2b\u0e4c",M:"1 \u0e40\u0e14\u0e37\u0e2d\u0e19",MM:"%d \u0e40\u0e14\u0e37\u0e2d\u0e19",y:"1 \u0e1b\u0e35",yy:"%d \u0e1b\u0e35"}}),{1:"'inji",5:"'inji",8:"'inji",70:"'inji",80:"'inji",2:"'nji",7:"'nji",20:"'nji",50:"'nji",3:"'\xfcnji",4:"'\xfcnji",100:"'\xfcnji",6:"'njy",9:"'unjy",10:"'unjy",30:"'unjy",60:"'ynjy",90:"'ynjy"}),xn=(c.defineLocale("tk",{months:"\xddanwar_Fewral_Mart_Aprel_Ma\xfd_I\xfdun_I\xfdul_Awgust_Sent\xfdabr_Okt\xfdabr_No\xfdabr_Dekabr".split("_"),monthsShort:"\xddan_Few_Mar_Apr_Ma\xfd_I\xfdn_I\xfdl_Awg_Sen_Okt_No\xfd_Dek".split("_"),weekdays:"\xddek\u015fenbe_Du\u015fenbe_Si\u015fenbe_\xc7ar\u015fenbe_Pen\u015fenbe_Anna_\u015eenbe".split("_"),weekdaysShort:"\xddek_Du\u015f_Si\u015f_\xc7ar_Pen_Ann_\u015een".split("_"),weekdaysMin:"\xddk_D\u015f_S\u015f_\xc7r_Pn_An_\u015en".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn sagat] LT",nextDay:"[ertir sagat] LT",nextWeek:"[indiki] dddd [sagat] LT",lastDay:"[d\xfc\xfdn] LT",lastWeek:"[ge\xe7en] dddd [sagat] LT",sameElse:"L"},relativeTime:{future:"%s so\u0148",past:"%s \xf6\u0148",s:"birn\xe4\xe7e sekunt",m:"bir minut",mm:"%d minut",h:"bir sagat",hh:"%d sagat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir a\xfd",MM:"%d a\xfd",y:"bir \xfdyl",yy:"%d \xfdyl"},ordinal:function(e,a){switch(a){case"d":case"D":case"Do":case"DD":return e;default:var t;return 0===e?e+"'unjy":e+(jn[t=e%10]||jn[e%100-t]||jn[100<=e?100:null])}},week:{dow:1,doy:7}}),c.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}}),"pagh_wa\u2019_cha\u2019_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_"));function Pn(e,a,t,s){var n=function(e){var a=Math.floor(e%1e3/100),t=Math.floor(e%100/10),e=e%10,s="";0<a&&(s+=xn[a]+"vatlh");0<t&&(s+=(""!==s?" ":"")+xn[t]+"maH");0<e&&(s+=(""!==s?" ":"")+xn[e]);return""===s?"pagh":s}(e);switch(t){case"ss":return n+" lup";case"mm":return n+" tup";case"hh":return n+" rep";case"dd":return n+" jaj";case"MM":return n+" jar";case"yy":return n+" DIS"}}c.defineLocale("tlh",{months:"tera\u2019 jar wa\u2019_tera\u2019 jar cha\u2019_tera\u2019 jar wej_tera\u2019 jar loS_tera\u2019 jar vagh_tera\u2019 jar jav_tera\u2019 jar Soch_tera\u2019 jar chorgh_tera\u2019 jar Hut_tera\u2019 jar wa\u2019maH_tera\u2019 jar wa\u2019maH wa\u2019_tera\u2019 jar wa\u2019maH cha\u2019".split("_"),monthsShort:"jar wa\u2019_jar cha\u2019_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa\u2019maH_jar wa\u2019maH wa\u2019_jar wa\u2019maH cha\u2019".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa\u2019leS] LT",nextWeek:"LLL",lastDay:"[wa\u2019Hu\u2019] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:function(e){var a=e;return a=-1!==e.indexOf("jaj")?a.slice(0,-3)+"leS":-1!==e.indexOf("jar")?a.slice(0,-3)+"waQ":-1!==e.indexOf("DIS")?a.slice(0,-3)+"nem":a+" pIq"},past:function(e){var a=e;return a=-1!==e.indexOf("jaj")?a.slice(0,-3)+"Hu\u2019":-1!==e.indexOf("jar")?a.slice(0,-3)+"wen":-1!==e.indexOf("DIS")?a.slice(0,-3)+"ben":a+" ret"},s:"puS lup",ss:Pn,m:"wa\u2019 tup",mm:Pn,h:"wa\u2019 rep",hh:Pn,d:"wa\u2019 jaj",dd:Pn,M:"wa\u2019 jar",MM:Pn,y:"wa\u2019 DIS",yy:Pn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}});var On={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'\xfcnc\xfc",4:"'\xfcnc\xfc",100:"'\xfcnc\xfc",6:"'nc\u0131",9:"'uncu",10:"'uncu",30:"'uncu",60:"'\u0131nc\u0131",90:"'\u0131nc\u0131"};function Wn(e,a,t,s){e={s:["viensas secunds","'iensas secunds"],ss:[e+" secunds",e+" secunds"],m:["'n m\xedut","'iens m\xedut"],mm:[e+" m\xeduts",e+" m\xeduts"],h:["'n \xfeora","'iensa \xfeora"],hh:[e+" \xfeoras",e+" \xfeoras"],d:["'n ziua","'iensa ziua"],dd:[e+" ziuas",e+" ziuas"],M:["'n mes","'iens mes"],MM:[e+" mesen",e+" mesen"],y:["'n ar","'iens ar"],yy:[e+" ars",e+" ars"]};return s||a?e[t][0]:e[t][1]}function An(e,a,t){return"m"===t?a?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443":"h"===t?a?"\u0433\u043e\u0434\u0438\u043d\u0430":"\u0433\u043e\u0434\u0438\u043d\u0443":e+" "+(e=+e,a=(a={ss:a?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434",mm:a?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d",hh:a?"\u0433\u043e\u0434\u0438\u043d\u0430_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d":"\u0433\u043e\u0434\u0438\u043d\u0443_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u043d\u0456\u0432",MM:"\u043c\u0456\u0441\u044f\u0446\u044c_\u043c\u0456\u0441\u044f\u0446\u0456_\u043c\u0456\u0441\u044f\u0446\u0456\u0432",yy:"\u0440\u0456\u043a_\u0440\u043e\u043a\u0438_\u0440\u043e\u043a\u0456\u0432"}[t]).split("_"),e%10==1&&e%100!=11?a[0]:2<=e%10&&e%10<=4&&(e%100<10||20<=e%100)?a[1]:a[2])}function En(e){return function(){return e+"\u043e"+(11===this.hours()?"\u0431":"")+"] LT"}}c.defineLocale("tr",{months:"Ocak_\u015eubat_Mart_Nisan_May\u0131s_Haziran_Temmuz_A\u011fustos_Eyl\xfcl_Ekim_Kas\u0131m_Aral\u0131k".split("_"),monthsShort:"Oca_\u015eub_Mar_Nis_May_Haz_Tem_A\u011fu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Sal\u0131_\xc7ar\u015famba_Per\u015fembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pzt_Sal_\xc7ar_Per_Cum_Cmt".split("_"),weekdaysMin:"Pz_Pt_Sa_\xc7a_Pe_Cu_Ct".split("_"),meridiem:function(e,a,t){return e<12?t?"\xf6\xf6":"\xd6\xd6":t?"\xf6s":"\xd6S"},meridiemParse:/\xf6\xf6|\xd6\xd6|\xf6s|\xd6S/,isPM:function(e){return"\xf6s"===e||"\xd6S"===e},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[yar\u0131n saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[d\xfcn] LT",lastWeek:"[ge\xe7en] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \xf6nce",s:"birka\xe7 saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",w:"bir hafta",ww:"%d hafta",M:"bir ay",MM:"%d ay",y:"bir y\u0131l",yy:"%d y\u0131l"},ordinal:function(e,a){switch(a){case"d":case"D":case"Do":case"DD":return e;default:var t;return 0===e?e+"'\u0131nc\u0131":e+(On[t=e%10]||On[e%100-t]||On[100<=e?100:null])}},week:{dow:1,doy:7}}),c.defineLocale("tzl",{months:"Januar_Fevraglh_Mar\xe7_Avr\xefu_Mai_G\xfcn_Julia_Guscht_Setemvar_Listop\xe4ts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_G\xfcn_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"S\xfaladi_L\xfane\xe7i_Maitzi_M\xe1rcuri_Xh\xfaadi_Vi\xe9ner\xe7i_S\xe1turi".split("_"),weekdaysShort:"S\xfal_L\xfan_Mai_M\xe1r_Xh\xfa_Vi\xe9_S\xe1t".split("_"),weekdaysMin:"S\xfa_L\xfa_Ma_M\xe1_Xh_Vi_S\xe1".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(e){return"d'o"===e.toLowerCase()},meridiem:function(e,a,t){return 11<e?t?"d'o":"D'O":t?"d'a":"D'A"},calendar:{sameDay:"[oxhi \xe0] LT",nextDay:"[dem\xe0 \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[ieiri \xe0] LT",lastWeek:"[s\xfcr el] dddd [lasteu \xe0] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:Wn,ss:Wn,m:Wn,mm:Wn,h:Wn,hh:Wn,d:Wn,dd:Wn,M:Wn,MM:Wn,y:Wn,yy:Wn},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}}),c.defineLocale("tzm-latn",{months:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minu\u1e0d",mm:"%d minu\u1e0d",h:"sa\u025ba",hh:"%d tassa\u025bin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}}),c.defineLocale("tzm",{months:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),monthsShort:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),weekdays:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysShort:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysMin:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u2d30\u2d59\u2d37\u2d45 \u2d34] LT",nextDay:"[\u2d30\u2d59\u2d3d\u2d30 \u2d34] LT",nextWeek:"dddd [\u2d34] LT",lastDay:"[\u2d30\u2d5a\u2d30\u2d4f\u2d5c \u2d34] LT",lastWeek:"dddd [\u2d34] LT",sameElse:"L"},relativeTime:{future:"\u2d37\u2d30\u2d37\u2d45 \u2d59 \u2d62\u2d30\u2d4f %s",past:"\u2d62\u2d30\u2d4f %s",s:"\u2d49\u2d4e\u2d49\u2d3d",ss:"%d \u2d49\u2d4e\u2d49\u2d3d",m:"\u2d4e\u2d49\u2d4f\u2d53\u2d3a",mm:"%d \u2d4e\u2d49\u2d4f\u2d53\u2d3a",h:"\u2d59\u2d30\u2d44\u2d30",hh:"%d \u2d5c\u2d30\u2d59\u2d59\u2d30\u2d44\u2d49\u2d4f",d:"\u2d30\u2d59\u2d59",dd:"%d o\u2d59\u2d59\u2d30\u2d4f",M:"\u2d30\u2d62o\u2d53\u2d54",MM:"%d \u2d49\u2d62\u2d62\u2d49\u2d54\u2d4f",y:"\u2d30\u2d59\u2d33\u2d30\u2d59",yy:"%d \u2d49\u2d59\u2d33\u2d30\u2d59\u2d4f"},week:{dow:6,doy:12}}),c.defineLocale("ug-cn",{months:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),monthsShort:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),weekdays:"\u064a\u06d5\u0643\u0634\u06d5\u0646\u0628\u06d5_\u062f\u06c8\u0634\u06d5\u0646\u0628\u06d5_\u0633\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u0686\u0627\u0631\u0634\u06d5\u0646\u0628\u06d5_\u067e\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u062c\u06c8\u0645\u06d5_\u0634\u06d5\u0646\u0628\u06d5".split("_"),weekdaysShort:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),weekdaysMin:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649",LLL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm",LLLL:"dddd\u060c YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm"},meridiemParse:/\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5|\u0633\u06d5\u06be\u06d5\u0631|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646|\u0686\u06c8\u0634|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646|\u0643\u06d5\u0686/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5"===a||"\u0633\u06d5\u06be\u06d5\u0631"===a||"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646"===a||"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646"!==a&&"\u0643\u06d5\u0686"!==a&&11<=e?e:e+12},meridiem:function(e,a,t){e=100*e+a;return e<600?"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5":e<900?"\u0633\u06d5\u06be\u06d5\u0631":e<1130?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646":e<1230?"\u0686\u06c8\u0634":e<1800?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646":"\u0643\u06d5\u0686"},calendar:{sameDay:"[\u0628\u06c8\u06af\u06c8\u0646 \u0633\u0627\u0626\u06d5\u062a] LT",nextDay:"[\u0626\u06d5\u062a\u06d5 \u0633\u0627\u0626\u06d5\u062a] LT",nextWeek:"[\u0643\u06d0\u0644\u06d5\u0631\u0643\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",lastDay:"[\u062a\u06c6\u0646\u06c8\u06af\u06c8\u0646] LT",lastWeek:"[\u0626\u0627\u0644\u062f\u0649\u0646\u0642\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0643\u06d0\u064a\u0649\u0646",past:"%s \u0628\u06c7\u0631\u06c7\u0646",s:"\u0646\u06d5\u0686\u0686\u06d5 \u0633\u06d0\u0643\u0648\u0646\u062a",ss:"%d \u0633\u06d0\u0643\u0648\u0646\u062a",m:"\u0628\u0649\u0631 \u0645\u0649\u0646\u06c7\u062a",mm:"%d \u0645\u0649\u0646\u06c7\u062a",h:"\u0628\u0649\u0631 \u0633\u0627\u0626\u06d5\u062a",hh:"%d \u0633\u0627\u0626\u06d5\u062a",d:"\u0628\u0649\u0631 \u0643\u06c8\u0646",dd:"%d \u0643\u06c8\u0646",M:"\u0628\u0649\u0631 \u0626\u0627\u064a",MM:"%d \u0626\u0627\u064a",y:"\u0628\u0649\u0631 \u064a\u0649\u0644",yy:"%d \u064a\u0649\u0644"},dayOfMonthOrdinalParse:/\d{1,2}(-\u0643\u06c8\u0646\u0649|-\u0626\u0627\u064a|-\u06be\u06d5\u067e\u062a\u06d5)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"-\u0643\u06c8\u0646\u0649";case"w":case"W":return e+"-\u06be\u06d5\u067e\u062a\u06d5";default:return e}},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:7}}),c.defineLocale("uk",{months:{format:"\u0441\u0456\u0447\u043d\u044f_\u043b\u044e\u0442\u043e\u0433\u043e_\u0431\u0435\u0440\u0435\u0437\u043d\u044f_\u043a\u0432\u0456\u0442\u043d\u044f_\u0442\u0440\u0430\u0432\u043d\u044f_\u0447\u0435\u0440\u0432\u043d\u044f_\u043b\u0438\u043f\u043d\u044f_\u0441\u0435\u0440\u043f\u043d\u044f_\u0432\u0435\u0440\u0435\u0441\u043d\u044f_\u0436\u043e\u0432\u0442\u043d\u044f_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430_\u0433\u0440\u0443\u0434\u043d\u044f".split("_"),standalone:"\u0441\u0456\u0447\u0435\u043d\u044c_\u043b\u044e\u0442\u0438\u0439_\u0431\u0435\u0440\u0435\u0437\u0435\u043d\u044c_\u043a\u0432\u0456\u0442\u0435\u043d\u044c_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u0435\u0440\u0432\u0435\u043d\u044c_\u043b\u0438\u043f\u0435\u043d\u044c_\u0441\u0435\u0440\u043f\u0435\u043d\u044c_\u0432\u0435\u0440\u0435\u0441\u0435\u043d\u044c_\u0436\u043e\u0432\u0442\u0435\u043d\u044c_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434_\u0433\u0440\u0443\u0434\u0435\u043d\u044c".split("_")},monthsShort:"\u0441\u0456\u0447_\u043b\u044e\u0442_\u0431\u0435\u0440_\u043a\u0432\u0456\u0442_\u0442\u0440\u0430\u0432_\u0447\u0435\u0440\u0432_\u043b\u0438\u043f_\u0441\u0435\u0440\u043f_\u0432\u0435\u0440_\u0436\u043e\u0432\u0442_\u043b\u0438\u0441\u0442_\u0433\u0440\u0443\u0434".split("_"),weekdays:function(e,a){var t={nominative:"\u043d\u0435\u0434\u0456\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044f_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),accusative:"\u043d\u0435\u0434\u0456\u043b\u044e_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044e_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),genitive:"\u043d\u0435\u0434\u0456\u043b\u0456_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043a\u0430_\u0432\u0456\u0432\u0442\u043e\u0440\u043a\u0430_\u0441\u0435\u0440\u0435\u0434\u0438_\u0447\u0435\u0442\u0432\u0435\u0440\u0433\u0430_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u0456_\u0441\u0443\u0431\u043e\u0442\u0438".split("_")};return!0===e?t.nominative.slice(1,7).concat(t.nominative.slice(0,1)):e?t[/(\[[\u0412\u0432\u0423\u0443]\]) ?dddd/.test(a)?"accusative":/\[?(?:\u043c\u0438\u043d\u0443\u043b\u043e\u0457|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u0457)? ?\] ?dddd/.test(a)?"genitive":"nominative"][e.day()]:t.nominative},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0440.",LLL:"D MMMM YYYY \u0440., HH:mm",LLLL:"dddd, D MMMM YYYY \u0440., HH:mm"},calendar:{sameDay:En("[\u0421\u044c\u043e\u0433\u043e\u0434\u043d\u0456 "),nextDay:En("[\u0417\u0430\u0432\u0442\u0440\u0430 "),lastDay:En("[\u0412\u0447\u043e\u0440\u0430 "),nextWeek:En("[\u0423] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return En("[\u041c\u0438\u043d\u0443\u043b\u043e\u0457] dddd [").call(this);case 1:case 2:case 4:return En("[\u041c\u0438\u043d\u0443\u043b\u043e\u0433\u043e] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"%s \u0442\u043e\u043c\u0443",s:"\u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u0435\u043a\u0443\u043d\u0434",ss:An,m:An,mm:An,h:"\u0433\u043e\u0434\u0438\u043d\u0443",hh:An,d:"\u0434\u0435\u043d\u044c",dd:An,M:"\u043c\u0456\u0441\u044f\u0446\u044c",MM:An,y:"\u0440\u0456\u043a",yy:An},meridiemParse:/\u043d\u043e\u0447\u0456|\u0440\u0430\u043d\u043a\u0443|\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430)$/.test(e)},meridiem:function(e,a,t){return e<4?"\u043d\u043e\u0447\u0456":e<12?"\u0440\u0430\u043d\u043a\u0443":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u043e\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e)/,ordinal:function(e,a){switch(a){case"M":case"d":case"DDD":case"w":case"W":return e+"-\u0439";case"D":return e+"-\u0433\u043e";default:return e}},week:{dow:1,doy:7}});i=["\u062c\u0646\u0648\u0631\u06cc","\u0641\u0631\u0648\u0631\u06cc","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u06cc\u0644","\u0645\u0626\u06cc","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0626\u06cc","\u0627\u06af\u0633\u062a","\u0633\u062a\u0645\u0628\u0631","\u0627\u06a9\u062a\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u062f\u0633\u0645\u0628\u0631"],jt=["\u0627\u062a\u0648\u0627\u0631","\u067e\u06cc\u0631","\u0645\u0646\u06af\u0644","\u0628\u062f\u06be","\u062c\u0645\u0639\u0631\u0627\u062a","\u062c\u0645\u0639\u06c1","\u06c1\u0641\u062a\u06c1"];return c.defineLocale("ur",{months:i,monthsShort:i,weekdays:jt,weekdaysShort:jt,weekdaysMin:jt,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,a,t){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0622\u062c \u0628\u0648\u0642\u062a] LT",nextDay:"[\u06a9\u0644 \u0628\u0648\u0642\u062a] LT",nextWeek:"dddd [\u0628\u0648\u0642\u062a] LT",lastDay:"[\u06af\u0630\u0634\u062a\u06c1 \u0631\u0648\u0632 \u0628\u0648\u0642\u062a] LT",lastWeek:"[\u06af\u0630\u0634\u062a\u06c1] dddd [\u0628\u0648\u0642\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0628\u0639\u062f",past:"%s \u0642\u0628\u0644",s:"\u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688",ss:"%d \u0633\u06cc\u06a9\u0646\u0688",m:"\u0627\u06cc\u06a9 \u0645\u0646\u0679",mm:"%d \u0645\u0646\u0679",h:"\u0627\u06cc\u06a9 \u06af\u06be\u0646\u0679\u06c1",hh:"%d \u06af\u06be\u0646\u0679\u06d2",d:"\u0627\u06cc\u06a9 \u062f\u0646",dd:"%d \u062f\u0646",M:"\u0627\u06cc\u06a9 \u0645\u0627\u06c1",MM:"%d \u0645\u0627\u06c1",y:"\u0627\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}}),c.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}}),c.defineLocale("uz",{months:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u042f\u043a\u0448\u0430\u043d\u0431\u0430_\u0414\u0443\u0448\u0430\u043d\u0431\u0430_\u0421\u0435\u0448\u0430\u043d\u0431\u0430_\u0427\u043e\u0440\u0448\u0430\u043d\u0431\u0430_\u041f\u0430\u0439\u0448\u0430\u043d\u0431\u0430_\u0416\u0443\u043c\u0430_\u0428\u0430\u043d\u0431\u0430".split("_"),weekdaysShort:"\u042f\u043a\u0448_\u0414\u0443\u0448_\u0421\u0435\u0448_\u0427\u043e\u0440_\u041f\u0430\u0439_\u0416\u0443\u043c_\u0428\u0430\u043d".split("_"),weekdaysMin:"\u042f\u043a_\u0414\u0443_\u0421\u0435_\u0427\u043e_\u041f\u0430_\u0416\u0443_\u0428\u0430".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[\u0411\u0443\u0433\u0443\u043d \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",nextDay:"[\u042d\u0440\u0442\u0430\u0433\u0430] LT [\u0434\u0430]",nextWeek:"dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastDay:"[\u041a\u0435\u0447\u0430 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastWeek:"[\u0423\u0442\u0433\u0430\u043d] dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",sameElse:"L"},relativeTime:{future:"\u042f\u043a\u0438\u043d %s \u0438\u0447\u0438\u0434\u0430",past:"\u0411\u0438\u0440 \u043d\u0435\u0447\u0430 %s \u043e\u043b\u0434\u0438\u043d",s:"\u0444\u0443\u0440\u0441\u0430\u0442",ss:"%d \u0444\u0443\u0440\u0441\u0430\u0442",m:"\u0431\u0438\u0440 \u0434\u0430\u043a\u0438\u043a\u0430",mm:"%d \u0434\u0430\u043a\u0438\u043a\u0430",h:"\u0431\u0438\u0440 \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u0431\u0438\u0440 \u043e\u0439",MM:"%d \u043e\u0439",y:"\u0431\u0438\u0440 \u0439\u0438\u043b",yy:"%d \u0439\u0438\u043b"},week:{dow:1,doy:7}}),c.defineLocale("vi",{months:"th\xe1ng 1_th\xe1ng 2_th\xe1ng 3_th\xe1ng 4_th\xe1ng 5_th\xe1ng 6_th\xe1ng 7_th\xe1ng 8_th\xe1ng 9_th\xe1ng 10_th\xe1ng 11_th\xe1ng 12".split("_"),monthsShort:"Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12".split("_"),monthsParseExact:!0,weekdays:"ch\u1ee7 nh\u1eadt_th\u1ee9 hai_th\u1ee9 ba_th\u1ee9 t\u01b0_th\u1ee9 n\u0103m_th\u1ee9 s\xe1u_th\u1ee9 b\u1ea3y".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,a,t){return e<12?t?"sa":"SA":t?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [n\u0103m] YYYY",LLL:"D MMMM [n\u0103m] YYYY HH:mm",LLLL:"dddd, D MMMM [n\u0103m] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[H\xf4m nay l\xfac] LT",nextDay:"[Ng\xe0y mai l\xfac] LT",nextWeek:"dddd [tu\u1ea7n t\u1edbi l\xfac] LT",lastDay:"[H\xf4m qua l\xfac] LT",lastWeek:"dddd [tu\u1ea7n tr\u01b0\u1edbc l\xfac] LT",sameElse:"L"},relativeTime:{future:"%s t\u1edbi",past:"%s tr\u01b0\u1edbc",s:"v\xe0i gi\xe2y",ss:"%d gi\xe2y",m:"m\u1ed9t ph\xfat",mm:"%d ph\xfat",h:"m\u1ed9t gi\u1edd",hh:"%d gi\u1edd",d:"m\u1ed9t ng\xe0y",dd:"%d ng\xe0y",w:"m\u1ed9t tu\u1ea7n",ww:"%d tu\u1ea7n",M:"m\u1ed9t th\xe1ng",MM:"%d th\xe1ng",y:"m\u1ed9t n\u0103m",yy:"%d n\u0103m"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}}),c.defineLocale("x-pseudo",{months:"J~\xe1\xf1\xfa\xe1~r\xfd_F~\xe9br\xfa~\xe1r\xfd_~M\xe1rc~h_\xc1p~r\xedl_~M\xe1\xfd_~J\xfa\xf1\xe9~_J\xfal~\xfd_\xc1\xfa~g\xfast~_S\xe9p~t\xe9mb~\xe9r_\xd3~ct\xf3b~\xe9r_\xd1~\xf3v\xe9m~b\xe9r_~D\xe9c\xe9~mb\xe9r".split("_"),monthsShort:"J~\xe1\xf1_~F\xe9b_~M\xe1r_~\xc1pr_~M\xe1\xfd_~J\xfa\xf1_~J\xfal_~\xc1\xfag_~S\xe9p_~\xd3ct_~\xd1\xf3v_~D\xe9c".split("_"),monthsParseExact:!0,weekdays:"S~\xfa\xf1d\xe1~\xfd_M\xf3~\xf1d\xe1\xfd~_T\xfa\xe9~sd\xe1\xfd~_W\xe9d~\xf1\xe9sd~\xe1\xfd_T~h\xfars~d\xe1\xfd_~Fr\xedd~\xe1\xfd_S~\xe1t\xfar~d\xe1\xfd".split("_"),weekdaysShort:"S~\xfa\xf1_~M\xf3\xf1_~T\xfa\xe9_~W\xe9d_~Th\xfa_~Fr\xed_~S\xe1t".split("_"),weekdaysMin:"S~\xfa_M\xf3~_T\xfa_~W\xe9_T~h_Fr~_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~\xf3d\xe1~\xfd \xe1t] LT",nextDay:"[T~\xf3m\xf3~rr\xf3~w \xe1t] LT",nextWeek:"dddd [\xe1t] LT",lastDay:"[\xdd~\xe9st~\xe9rd\xe1~\xfd \xe1t] LT",lastWeek:"[L~\xe1st] dddd [\xe1t] LT",sameElse:"L"},relativeTime:{future:"\xed~\xf1 %s",past:"%s \xe1~g\xf3",s:"\xe1 ~f\xe9w ~s\xe9c\xf3~\xf1ds",ss:"%d s~\xe9c\xf3\xf1~ds",m:"\xe1 ~m\xed\xf1~\xfat\xe9",mm:"%d m~\xed\xf1\xfa~t\xe9s",h:"\xe1~\xf1 h\xf3~\xfar",hh:"%d h~\xf3\xfars",d:"\xe1 ~d\xe1\xfd",dd:"%d d~\xe1\xfds",M:"\xe1 ~m\xf3\xf1~th",MM:"%d m~\xf3\xf1t~hs",y:"\xe1 ~\xfd\xe9\xe1r",yy:"%d \xfd~\xe9\xe1rs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?"th":1==a?"st":2==a?"nd":3==a?"rd":"th")},week:{dow:1,doy:4}}),c.defineLocale("yo",{months:"S\u1eb9\u0301r\u1eb9\u0301_E\u0300re\u0300le\u0300_\u1eb8r\u1eb9\u0300na\u0300_I\u0300gbe\u0301_E\u0300bibi_O\u0300ku\u0300du_Ag\u1eb9mo_O\u0300gu\u0301n_Owewe_\u1ecc\u0300wa\u0300ra\u0300_Be\u0301lu\u0301_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),monthsShort:"S\u1eb9\u0301r_E\u0300rl_\u1eb8rn_I\u0300gb_E\u0300bi_O\u0300ku\u0300_Ag\u1eb9_O\u0300gu\u0301_Owe_\u1ecc\u0300wa\u0300_Be\u0301l_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),weekdays:"A\u0300i\u0300ku\u0301_Aje\u0301_I\u0300s\u1eb9\u0301gun_\u1eccj\u1ecd\u0301ru\u0301_\u1eccj\u1ecd\u0301b\u1ecd_\u1eb8ti\u0300_A\u0300ba\u0301m\u1eb9\u0301ta".split("_"),weekdaysShort:"A\u0300i\u0300k_Aje\u0301_I\u0300s\u1eb9\u0301_\u1eccjr_\u1eccjb_\u1eb8ti\u0300_A\u0300ba\u0301".split("_"),weekdaysMin:"A\u0300i\u0300_Aj_I\u0300s_\u1eccr_\u1eccb_\u1eb8t_A\u0300b".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[O\u0300ni\u0300 ni] LT",nextDay:"[\u1ecc\u0300la ni] LT",nextWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301n'b\u1ecd] [ni] LT",lastDay:"[A\u0300na ni] LT",lastWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301l\u1ecd\u0301] [ni] LT",sameElse:"L"},relativeTime:{future:"ni\u0301 %s",past:"%s k\u1ecdja\u0301",s:"i\u0300s\u1eb9ju\u0301 aaya\u0301 die",ss:"aaya\u0301 %d",m:"i\u0300s\u1eb9ju\u0301 kan",mm:"i\u0300s\u1eb9ju\u0301 %d",h:"wa\u0301kati kan",hh:"wa\u0301kati %d",d:"\u1ecdj\u1ecd\u0301 kan",dd:"\u1ecdj\u1ecd\u0301 %d",M:"osu\u0300 kan",MM:"osu\u0300 %d",y:"\u1ecddu\u0301n kan",yy:"\u1ecddu\u0301n %d"},dayOfMonthOrdinalParse:/\u1ecdj\u1ecd\u0301\s\d{1,2}/,ordinal:"\u1ecdj\u1ecd\u0301 %d",week:{dow:1,doy:4}}),c.defineLocale("zh-cn",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u5468\u65e5_\u5468\u4e00_\u5468\u4e8c_\u5468\u4e09_\u5468\u56db_\u5468\u4e94_\u5468\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5Ah\u70b9mm\u5206",LLLL:"YYYY\u5e74M\u6708D\u65e5ddddAh\u70b9mm\u5206",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a||"\u4e0b\u5348"!==a&&"\u665a\u4e0a"!==a&&11<=e?e:e+12},meridiem:function(e,a,t){e=100*e+a;return e<600?"\u51cc\u6668":e<900?"\u65e9\u4e0a":e<1130?"\u4e0a\u5348":e<1230?"\u4e2d\u5348":e<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:function(e){return e.week()!==this.week()?"[\u4e0b]dddLT":"[\u672c]dddLT"},lastDay:"[\u6628\u5929]LT",lastWeek:function(e){return this.week()!==e.week()?"[\u4e0a]dddLT":"[\u672c]dddLT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u5468)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u5468";default:return e}},relativeTime:{future:"%s\u540e",past:"%s\u524d",s:"\u51e0\u79d2",ss:"%d \u79d2",m:"1 \u5206\u949f",mm:"%d \u5206\u949f",h:"1 \u5c0f\u65f6",hh:"%d \u5c0f\u65f6",d:"1 \u5929",dd:"%d \u5929",w:"1 \u5468",ww:"%d \u5468",M:"1 \u4e2a\u6708",MM:"%d \u4e2a\u6708",y:"1 \u5e74",yy:"%d \u5e74"},week:{dow:1,doy:4}}),c.defineLocale("zh-hk",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,t){e=100*e+a;return e<600?"\u51cc\u6668":e<900?"\u65e9\u4e0a":e<1200?"\u4e0a\u5348":1200===e?"\u4e2d\u5348":e<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:"[\u4e0b]ddddLT",lastDay:"[\u6628\u5929]LT",lastWeek:"[\u4e0a]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),c.defineLocale("zh-mo",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"D/M/YYYY",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,t){e=100*e+a;return e<600?"\u51cc\u6668":e<900?"\u65e9\u4e0a":e<1130?"\u4e0a\u5348":e<1230?"\u4e2d\u5348":e<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5167",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),c.defineLocale("zh-tw",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(e,a){return 12===e&&(e=0),"\u51cc\u6668"===a||"\u65e9\u4e0a"===a||"\u4e0a\u5348"===a?e:"\u4e2d\u5348"===a?11<=e?e:e+12:"\u4e0b\u5348"===a||"\u665a\u4e0a"===a?e+12:void 0},meridiem:function(e,a,t){e=100*e+a;return e<600?"\u51cc\u6668":e<900?"\u65e9\u4e0a":e<1130?"\u4e0a\u5348":e<1230?"\u4e2d\u5348":e<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(e,a){switch(a){case"d":case"D":case"DDD":return e+"\u65e5";case"M":return e+"\u6708";case"w":case"W":return e+"\u9031";default:return e}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}}),c.locale("en"),c});
2//# sourceMappingURL=moment-with-locales.min.js.map
\ No newline at end of file2 \ No newline at end of file
public/lib/moment-with-locales.min.js.map+1 -0
@@ -0,0 +1 @@
1{"version":3,"file":"moment-with-locales.min.js","sources":["moment-with-locales.js"],"names":["global","factory","exports","module","define","amd","moment","this","hookCallback","hooks","apply","arguments","isArray","input","Array","Object","prototype","toString","call","isObject","hasOwnProp","a","b","hasOwnProperty","isObjectEmpty","obj","getOwnPropertyNames","length","k","isUndefined","isNumber","isDate","Date","map","arr","fn","res","arrLen","i","push","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","m","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","isValid","flags","parsedParts","isNowValid","_d","isNaN","getTime","some","invalidWeekday","_strict","undefined","bigHour","isFrozen","_isValid","createInvalid","NaN","fun","t","len","momentProperties","updateInProgress","copyConfig","to","from","prop","val","momentPropertiesLen","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","arg","key","args","argLen","slice","join","Error","stack","deprecations","deprecateSimple","name","isFunction","Function","mergeConfigs","parentConfig","childConfig","Locale","set","keys","zeroFill","number","targetLength","forceSign","absNumber","Math","abs","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","callback","func","localeData","formatMoment","expandFormat","array","match","replace","mom","output","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","aliases","D","dates","date","d","days","day","e","weekdays","weekday","E","isoweekdays","isoweekday","DDD","dayofyears","dayofyear","h","hours","hour","ms","milliseconds","millisecond","minutes","minute","M","months","month","Q","quarters","quarter","s","seconds","second","gg","weekyears","weekyear","GG","isoweekyears","isoweekyear","w","weeks","week","W","isoweeks","isoweek","y","years","year","normalizeUnits","units","toLowerCase","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","isoWeekday","dayOfYear","weekYear","isoWeekYear","isoWeek","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","match1to2NoLeadingZero","match1to2HasZero","addRegexToken","regex","strictRegex","regexes","isStrict","getParseRegexForToken","RegExp","regexEscape","matched","p1","p2","p3","p4","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","value","isFinite","tokens","addParseToken","tokenLen","addWeekParseToken","_w","isLeapYear","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","parseTwoDigitYear","parseInt","indexOf","getSetYear","makeGetSet","unit","keepTime","set$1","get","isUTC","getUTCMilliseconds","getMilliseconds","getUTCSeconds","getSeconds","getUTCMinutes","getMinutes","getUTCHours","getHours","getUTCDate","getDate","getUTCDay","getDay","getUTCMonth","getMonth","getUTCFullYear","getFullYear","setUTCMilliseconds","setMilliseconds","setUTCSeconds","setSeconds","setUTCMinutes","setMinutes","setUTCHours","setHours","setUTCDate","setDate","setUTCFullYear","setFullYear","daysInMonth","x","modMonth","o","monthsShort","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","split","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","setMonth","min","setUTCMonth","getSetMonth","computeMonthsParse","cmpLenRev","shortP","longP","shortPieces","longPieces","mixedPieces","sort","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","createDate","createUTCDate","UTC","firstWeekOffset","dow","doy","fwd","dayOfYearFromWeeks","resYear","resDayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","n","concat","weekdaysMin","weekdaysShort","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","lowercase","matchMeridiem","_meridiemParse","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","getSetHour","globalLocale","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","ww","MM","yy","meridiemParse","locales","localeFamilies","normalizeLocale","chooseLocale","names","j","next","loadLocale","arr1","arr2","minl","oldLocale","_abbr","require","getSetGlobalLocale","values","data","getLocale","defineLocale","abbr","_config","parentLocale","forEach","checkOverflow","_a","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","string","exec","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","result","configFromRFC2822","obsOffset","militaryOffset","parsedArray","weekdayStr","parsedInput","numOffset","hm","defaults","c","configFromArray","currentDate","weekdayOverflow","curWeek","nowValue","now","_useUTC","createLocal","_week","temp","_dayOfYear","yearToUse","_nextDay","expectedWeekday","ISO_8601","RFC_2822","stringLength","totalParsedInputLength","skipped","meridiemHour","isPm","erasConvertYear","prepareConfig","dayOrDate","preparse","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","createFromInputFallback","add","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","unitHasDecimal","orderLen","parseFloat","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","round","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","matches","parts","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","parseIso","diffRes","base","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","isString","String","isMomentInput","arrayTest","dataTypeTest","filter","item","property","objectTest","propertyTest","properties","propertyLen","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","lang","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","erasName","erasAbbr","erasNarrow","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetSecond","parseMs","getSetMillisecond","proto","preParsePostFormat","time","formats","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","priority","prioritizedLen","toArray","toObject","toDate","toISOString","keepOffset","inspect","zone","prefix","isLocal","Symbol","for","toJSON","unix","creationData","eraName","since","until","eraNarrow","eraAbbr","eraYear","dir","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","isDSTShifted","_isDSTShifted","array1","array2","dontConvert","lengthDiff","diffs","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","toUpperCase","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","source","_eras","Infinity","isFormat","_monthsShort","monthName","_monthsParseExact","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","weekdayName","_weekdaysParseExact","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","_fullWeekdaysParse","charAt","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","valueOf$1","makeGetter","thresholds","relativeTime$1","posNegDuration","abs$1","toISOString$1","total","ymSign","daysSign","hmsSign","toFixed","pluralForm","pluralize","f","str","plurals","pluralForm$1","pluralize$1","plurals$1","pluralForm$2","pluralize$2","plurals$2","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","th","assign","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","months$1","symbolMap","weekdaysParseExact","1","2","3","4","5","6","7","8","9","0","months$2","symbolMap$1","numberMap","١","٢","٣","٤","٥","٦","٧","٨","٩","٠","symbolMap$2","reverse","numberMap$1","symbolMap$3","numberMap$2","months$3","suffixes","70","80","20","50","100","10","30","60","90","relativeTimeWithPlural","num","forms","word","standalone","lastDigit","last2Digits","symbolMap$4","numberMap$3","১","২","৩","৪","৫","৬","৭","৮","৯","০","symbolMap$5","numberMap$4","symbolMap$6","numberMap$5","༡","༢","༣","༤","༥","༦","༧","༨","༩","༠","relativeTimeWithMutation","text","mutationTable","substring","monthsParseExact","monthsRegex$1","minWeekdaysParse","translate","fullWeekdaysParse","shortWeekdaysParse","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","lastNumber","ll","lll","llll","months$4","monthsParse$1","monthsRegex$2","plural$1","translate$1","processRelativeTime$1","processRelativeTime$2","processRelativeTime$3","months$5","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","monthsShortDot","monthsShort$1","monthsParse$2","monthsRegex$3","monthsShortDot$1","monthsShort$2","monthsParse$3","monthsRegex$4","monthsShortDot$2","monthsShort$3","monthsParse$4","monthsRegex$5","monthsShortDot$3","monthsShort$4","monthsParse$5","monthsRegex$6","processRelativeTime$4","symbolMap$7","numberMap$6","۱","۲","۳","۴","۵","۶","۷","۸","۹","۰","numbersPast","numbersFuture","translate$2","monthsRegex$7","monthsParse$6","monthsShortWithDots","monthsShortWithoutDots","processRelativeTime$5","processRelativeTime$6","symbolMap$8","numberMap$7","૧","૨","૩","૪","૫","૬","૭","૮","૯","૦","symbolMap$9","numberMap$8","१","२","३","४","५","६","७","८","९","०","monthsParse$7","translate$3","weekEndings","translate$4","plural$2","translate$5","eraYearOrdinalRegex","$0","$1","$2","suffixes$1","40","symbolMap$a","numberMap$9","១","២","៣","៤","៥","៦","៧","៨","៩","០","symbolMap$b","numberMap$a","೧","೨","೩","೪","೫","೬","೭","೮","೯","೦","processRelativeTime$7","isUpper","p","includes","symbolMap$c","numberMap$b","months$8","suffixes$2","processRelativeTime$8","eifelerRegelAppliesToNumber","translateSingular","special","translate$6","units$1","format$1","relativeTimeWithPlural$1","relativeTimeWithSingular","translator","words","correctGrammaticalCase","wordKey","translate$7","symbolMap$d","numberMap$c","relativeTimeMr","symbolMap$e","numberMap$d","၁","၂","၃","၄","၅","၆","၇","၈","၉","၀","symbolMap$f","numberMap$e","monthsShortWithDots$1","monthsShortWithoutDots$1","monthsParse$8","monthsRegex$8","monthsShortWithDots$2","monthsShortWithoutDots$2","monthsParse$9","monthsRegex$9","symbolMap$g","numberMap$f","੧","੨","੩","੪","੫","੬","੭","੮","੯","੦","monthsNominative","monthsSubjective","monthsParse$a","plural$3","translate$8","relativeTimeWithPlural$2","relativeTimeWithPlural$3","monthsParse$b","months$9","days$1","months$a","monthsShort$7","plural$5","translate$9","processRelativeTime$9","translator$1","translator$2","symbolMap$h","numberMap$g","௧","௨","௩","௪","௫","௬","௭","௮","௯","௦","suffixes$3","12","13","suffixes$4","numbersNouns","translate$a","numberNoun","hundred","ten","one","suffixes$5","processRelativeTime$a","relativeTimeWithPlural$4","processHoursFunction","nominative","accusative","genitive","months$b","days$2"],"mappings":"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"}
\ No newline at end of file1 \ No newline at end of file
public/lib/moment.min.js+0 -2
@@ -1,2 +0,0 @@
1!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.moment=t()}(this,function(){"use strict";var H;function f(){return H.apply(null,arguments)}function a(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function F(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function c(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function L(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;for(var t in e)if(c(e,t))return;return 1}function o(e){return void 0===e}function u(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function V(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function G(e,t){for(var n=[],s=e.length,i=0;i<s;++i)n.push(t(e[i],i));return n}function E(e,t){for(var n in t)c(t,n)&&(e[n]=t[n]);return c(t,"toString")&&(e.toString=t.toString),c(t,"valueOf")&&(e.valueOf=t.valueOf),e}function l(e,t,n,s){return Pt(e,t,n,s,!0).utc()}function m(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function A(e){if(null==e._isValid){var t=m(e),n=j.call(t.parsedDateParts,function(e){return null!=e}),n=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&n);if(e._strict&&(n=n&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return n;e._isValid=n}return e._isValid}function I(e){var t=l(NaN);return null!=e?E(m(t),e):m(t).userInvalidated=!0,t}var j=Array.prototype.some||function(e){for(var t=Object(this),n=t.length>>>0,s=0;s<n;s++)if(s in t&&e.call(this,t[s],s,t))return!0;return!1},Z=f.momentProperties=[],z=!1;function $(e,t){var n,s,i,r=Z.length;if(o(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),o(t._i)||(e._i=t._i),o(t._f)||(e._f=t._f),o(t._l)||(e._l=t._l),o(t._strict)||(e._strict=t._strict),o(t._tzm)||(e._tzm=t._tzm),o(t._isUTC)||(e._isUTC=t._isUTC),o(t._offset)||(e._offset=t._offset),o(t._pf)||(e._pf=m(t)),o(t._locale)||(e._locale=t._locale),0<r)for(n=0;n<r;n++)o(i=t[s=Z[n]])||(e[s]=i);return e}function q(e){$(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===z&&(z=!0,f.updateOffset(this),z=!1)}function h(e){return e instanceof q||null!=e&&null!=e._isAMomentObject}function B(e){!1===f.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function e(r,a){var o=!0;return E(function(){if(null!=f.deprecationHandler&&f.deprecationHandler(null,r),o){for(var e,t,n=[],s=arguments.length,i=0;i<s;i++){if(e="","object"==typeof arguments[i]){for(t in e+="\n["+i+"] ",arguments[0])c(arguments[0],t)&&(e+=t+": "+arguments[0][t]+", ");e=e.slice(0,-2)}else e=arguments[i];n.push(e)}B(r+"\nArguments: "+Array.prototype.slice.call(n).join("")+"\n"+(new Error).stack),o=!1}return a.apply(this,arguments)},a)}var J={};function Q(e,t){null!=f.deprecationHandler&&f.deprecationHandler(e,t),J[e]||(B(t),J[e]=!0)}function d(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function X(e,t){var n,s=E({},e);for(n in t)c(t,n)&&(F(e[n])&&F(t[n])?(s[n]={},E(s[n],e[n]),E(s[n],t[n])):null!=t[n]?s[n]=t[n]:delete s[n]);for(n in e)c(e,n)&&!c(t,n)&&F(e[n])&&(s[n]=E({},s[n]));return s}function K(e){null!=e&&this.set(e)}f.suppressDeprecationWarnings=!1,f.deprecationHandler=null;var ee=Object.keys||function(e){var t,n=[];for(t in e)c(e,t)&&n.push(t);return n};function r(e,t,n){var s=""+Math.abs(e);return(0<=e?n?"+":"":"-")+Math.pow(10,Math.max(0,t-s.length)).toString().substr(1)+s}var te=/(\[[^\[]*\])|(\\)?([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,ne=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,se={},ie={};function s(e,t,n,s){var i="string"==typeof s?function(){return this[s]()}:s;e&&(ie[e]=i),t&&(ie[t[0]]=function(){return r(i.apply(this,arguments),t[1],t[2])}),n&&(ie[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function re(e,t){return e.isValid()?(t=ae(t,e.localeData()),se[t]=se[t]||function(s){for(var e,i=s.match(te),t=0,r=i.length;t<r;t++)ie[i[t]]?i[t]=ie[i[t]]:i[t]=(e=i[t]).match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"");return function(e){for(var t="",n=0;n<r;n++)t+=d(i[n])?i[n].call(e,s):i[n];return t}}(t),se[t](e)):e.localeData().invalidDate()}function ae(e,t){var n=5;function s(e){return t.longDateFormat(e)||e}for(ne.lastIndex=0;0<=n&&ne.test(e);)e=e.replace(ne,s),ne.lastIndex=0,--n;return e}var oe={};function t(e,t){var n=e.toLowerCase();oe[n]=oe[n+"s"]=oe[t]=e}function _(e){return"string"==typeof e?oe[e]||oe[e.toLowerCase()]:void 0}function ue(e){var t,n,s={};for(n in e)c(e,n)&&(t=_(n))&&(s[t]=e[n]);return s}var le={};function n(e,t){le[e]=t}function he(e){return e%4==0&&e%100!=0||e%400==0}function y(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function g(e){var e=+e,t=0;return t=0!=e&&isFinite(e)?y(e):t}function de(t,n){return function(e){return null!=e?(fe(this,t,e),f.updateOffset(this,n),this):ce(this,t)}}function ce(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function fe(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&he(e.year())&&1===e.month()&&29===e.date()?(n=g(n),e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),We(n,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+t](n))}var i=/\d/,w=/\d\d/,me=/\d{3}/,_e=/\d{4}/,ye=/[+-]?\d{6}/,p=/\d\d?/,ge=/\d\d\d\d?/,we=/\d\d\d\d\d\d?/,pe=/\d{1,3}/,ke=/\d{1,4}/,ve=/[+-]?\d{1,6}/,Me=/\d+/,De=/[+-]?\d+/,Se=/Z|[+-]\d\d:?\d\d/gi,Ye=/Z|[+-]\d\d(?::?\d\d)?/gi,k=/[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;function v(e,n,s){be[e]=d(n)?n:function(e,t){return e&&s?s:n}}function Oe(e,t){return c(be,e)?be[e](t._strict,t._locale):new RegExp(M(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,n,s,i){return t||n||s||i})))}function M(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var be={},xe={};function D(e,n){var t,s,i=n;for("string"==typeof e&&(e=[e]),u(n)&&(i=function(e,t){t[n]=g(e)}),s=e.length,t=0;t<s;t++)xe[e[t]]=i}function Te(e,i){D(e,function(e,t,n,s){n._w=n._w||{},i(e,n._w,n,s)})}var S,Y=0,O=1,b=2,x=3,T=4,N=5,Ne=6,Pe=7,Re=8;function We(e,t){if(isNaN(e)||isNaN(t))return NaN;var n=(t%(n=12)+n)%n;return e+=(t-n)/12,1==n?he(e)?29:28:31-n%7%2}S=Array.prototype.indexOf||function(e){for(var t=0;t<this.length;++t)if(this[t]===e)return t;return-1},s("M",["MM",2],"Mo",function(){return this.month()+1}),s("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),s("MMMM",0,0,function(e){return this.localeData().months(this,e)}),t("month","M"),n("month",8),v("M",p),v("MM",p,w),v("MMM",function(e,t){return t.monthsShortRegex(e)}),v("MMMM",function(e,t){return t.monthsRegex(e)}),D(["M","MM"],function(e,t){t[O]=g(e)-1}),D(["MMM","MMMM"],function(e,t,n,s){s=n._locale.monthsParse(e,s,n._strict);null!=s?t[O]=s:m(n).invalidMonth=e});var Ce="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Ue="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),He=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Fe=k,Le=k;function Ve(e,t){var n;if(e.isValid()){if("string"==typeof t)if(/^\d+$/.test(t))t=g(t);else if(!u(t=e.localeData().monthsParse(t)))return;n=Math.min(e.date(),We(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n)}}function Ge(e){return null!=e?(Ve(this,e),f.updateOffset(this,!0),this):ce(this,"Month")}function Ee(){function e(e,t){return t.length-e.length}for(var t,n=[],s=[],i=[],r=0;r<12;r++)t=l([2e3,r]),n.push(this.monthsShort(t,"")),s.push(this.months(t,"")),i.push(this.months(t,"")),i.push(this.monthsShort(t,""));for(n.sort(e),s.sort(e),i.sort(e),r=0;r<12;r++)n[r]=M(n[r]),s[r]=M(s[r]);for(r=0;r<24;r++)i[r]=M(i[r]);this._monthsRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+n.join("|")+")","i")}function Ae(e){return he(e)?366:365}s("Y",0,0,function(){var e=this.year();return e<=9999?r(e,4):"+"+e}),s(0,["YY",2],0,function(){return this.year()%100}),s(0,["YYYY",4],0,"year"),s(0,["YYYYY",5],0,"year"),s(0,["YYYYYY",6,!0],0,"year"),t("year","y"),n("year",1),v("Y",De),v("YY",p,w),v("YYYY",ke,_e),v("YYYYY",ve,ye),v("YYYYYY",ve,ye),D(["YYYYY","YYYYYY"],Y),D("YYYY",function(e,t){t[Y]=2===e.length?f.parseTwoDigitYear(e):g(e)}),D("YY",function(e,t){t[Y]=f.parseTwoDigitYear(e)}),D("Y",function(e,t){t[Y]=parseInt(e,10)}),f.parseTwoDigitYear=function(e){return g(e)+(68<g(e)?1900:2e3)};var Ie=de("FullYear",!0);function je(e,t,n,s,i,r,a){var o;return e<100&&0<=e?(o=new Date(e+400,t,n,s,i,r,a),isFinite(o.getFullYear())&&o.setFullYear(e)):o=new Date(e,t,n,s,i,r,a),o}function Ze(e){var t;return e<100&&0<=e?((t=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,t)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function ze(e,t,n){n=7+t-n;return n-(7+Ze(e,0,n).getUTCDay()-t)%7-1}function $e(e,t,n,s,i){var r,t=1+7*(t-1)+(7+n-s)%7+ze(e,s,i),n=t<=0?Ae(r=e-1)+t:t>Ae(e)?(r=e+1,t-Ae(e)):(r=e,t);return{year:r,dayOfYear:n}}function qe(e,t,n){var s,i,r=ze(e.year(),t,n),r=Math.floor((e.dayOfYear()-r-1)/7)+1;return r<1?s=r+P(i=e.year()-1,t,n):r>P(e.year(),t,n)?(s=r-P(e.year(),t,n),i=e.year()+1):(i=e.year(),s=r),{week:s,year:i}}function P(e,t,n){var s=ze(e,t,n),t=ze(e+1,t,n);return(Ae(e)-s+t)/7}s("w",["ww",2],"wo","week"),s("W",["WW",2],"Wo","isoWeek"),t("week","w"),t("isoWeek","W"),n("week",5),n("isoWeek",5),v("w",p),v("ww",p,w),v("W",p),v("WW",p,w),Te(["w","ww","W","WW"],function(e,t,n,s){t[s.substr(0,1)]=g(e)});function Be(e,t){return e.slice(t,7).concat(e.slice(0,t))}s("d",0,"do","day"),s("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),s("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),s("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),s("e",0,0,"weekday"),s("E",0,0,"isoWeekday"),t("day","d"),t("weekday","e"),t("isoWeekday","E"),n("day",11),n("weekday",11),n("isoWeekday",11),v("d",p),v("e",p),v("E",p),v("dd",function(e,t){return t.weekdaysMinRegex(e)}),v("ddd",function(e,t){return t.weekdaysShortRegex(e)}),v("dddd",function(e,t){return t.weekdaysRegex(e)}),Te(["dd","ddd","dddd"],function(e,t,n,s){s=n._locale.weekdaysParse(e,s,n._strict);null!=s?t.d=s:m(n).invalidWeekday=e}),Te(["d","e","E"],function(e,t,n,s){t[s]=g(e)});var Je="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Qe="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Xe="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ke=k,et=k,tt=k;function nt(){function e(e,t){return t.length-e.length}for(var t,n,s,i=[],r=[],a=[],o=[],u=0;u<7;u++)s=l([2e3,1]).day(u),t=M(this.weekdaysMin(s,"")),n=M(this.weekdaysShort(s,"")),s=M(this.weekdays(s,"")),i.push(t),r.push(n),a.push(s),o.push(t),o.push(n),o.push(s);i.sort(e),r.sort(e),a.sort(e),o.sort(e),this._weekdaysRegex=new RegExp("^("+o.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+i.join("|")+")","i")}function st(){return this.hours()%12||12}function it(e,t){s(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function rt(e,t){return t._meridiemParse}s("H",["HH",2],0,"hour"),s("h",["hh",2],0,st),s("k",["kk",2],0,function(){return this.hours()||24}),s("hmm",0,0,function(){return""+st.apply(this)+r(this.minutes(),2)}),s("hmmss",0,0,function(){return""+st.apply(this)+r(this.minutes(),2)+r(this.seconds(),2)}),s("Hmm",0,0,function(){return""+this.hours()+r(this.minutes(),2)}),s("Hmmss",0,0,function(){return""+this.hours()+r(this.minutes(),2)+r(this.seconds(),2)}),it("a",!0),it("A",!1),t("hour","h"),n("hour",13),v("a",rt),v("A",rt),v("H",p),v("h",p),v("k",p),v("HH",p,w),v("hh",p,w),v("kk",p,w),v("hmm",ge),v("hmmss",we),v("Hmm",ge),v("Hmmss",we),D(["H","HH"],x),D(["k","kk"],function(e,t,n){e=g(e);t[x]=24===e?0:e}),D(["a","A"],function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e}),D(["h","hh"],function(e,t,n){t[x]=g(e),m(n).bigHour=!0}),D("hmm",function(e,t,n){var s=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s)),m(n).bigHour=!0}),D("hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s,2)),t[N]=g(e.substr(i)),m(n).bigHour=!0}),D("Hmm",function(e,t,n){var s=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s))}),D("Hmmss",function(e,t,n){var s=e.length-4,i=e.length-2;t[x]=g(e.substr(0,s)),t[T]=g(e.substr(s,2)),t[N]=g(e.substr(i))});k=de("Hours",!0);var at,ot={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{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"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{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"},months:Ce,monthsShort:Ue,week:{dow:0,doy:6},weekdays:Je,weekdaysMin:Xe,weekdaysShort:Qe,meridiemParse:/[ap]\.?m?\.?/i},R={},ut={};function lt(e){return e&&e.toLowerCase().replace("_","-")}function ht(e){for(var t,n,s,i,r=0;r<e.length;){for(t=(i=lt(e[r]).split("-")).length,n=(n=lt(e[r+1]))?n.split("-"):null;0<t;){if(s=dt(i.slice(0,t).join("-")))return s;if(n&&n.length>=t&&function(e,t){for(var n=Math.min(e.length,t.length),s=0;s<n;s+=1)if(e[s]!==t[s])return s;return n}(i,n)>=t-1)break;t--}r++}return at}function dt(t){var e;if(void 0===R[t]&&"undefined"!=typeof module&&module&&module.exports&&null!=t.match("^[^/\\\\]*$"))try{e=at._abbr,require("./locale/"+t),ct(e)}catch(e){R[t]=null}return R[t]}function ct(e,t){return e&&((t=o(t)?mt(e):ft(e,t))?at=t:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),at._abbr}function ft(e,t){if(null===t)return delete R[e],null;var n,s=ot;if(t.abbr=e,null!=R[e])Q("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."),s=R[e]._config;else if(null!=t.parentLocale)if(null!=R[t.parentLocale])s=R[t.parentLocale]._config;else{if(null==(n=dt(t.parentLocale)))return ut[t.parentLocale]||(ut[t.parentLocale]=[]),ut[t.parentLocale].push({name:e,config:t}),null;s=n._config}return R[e]=new K(X(s,t)),ut[e]&&ut[e].forEach(function(e){ft(e.name,e.config)}),ct(e),R[e]}function mt(e){var t;if(!(e=e&&e._locale&&e._locale._abbr?e._locale._abbr:e))return at;if(!a(e)){if(t=dt(e))return t;e=[e]}return ht(e)}function _t(e){var t=e._a;return t&&-2===m(e).overflow&&(t=t[O]<0||11<t[O]?O:t[b]<1||t[b]>We(t[Y],t[O])?b:t[x]<0||24<t[x]||24===t[x]&&(0!==t[T]||0!==t[N]||0!==t[Ne])?x:t[T]<0||59<t[T]?T:t[N]<0||59<t[N]?N:t[Ne]<0||999<t[Ne]?Ne:-1,m(e)._overflowDayOfYear&&(t<Y||b<t)&&(t=b),m(e)._overflowWeeks&&-1===t&&(t=Pe),m(e)._overflowWeekday&&-1===t&&(t=Re),m(e).overflow=t),e}var yt=/^\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)?)?$/,gt=/^\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)?)?$/,wt=/Z|[+-]\d\d(?::?\d\d)?/,pt=[["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/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],kt=[["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/]],vt=/^\/?Date\((-?\d+)/i,Mt=/^(?:(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}))$/,Dt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function St(e){var t,n,s,i,r,a,o=e._i,u=yt.exec(o)||gt.exec(o),o=pt.length,l=kt.length;if(u){for(m(e).iso=!0,t=0,n=o;t<n;t++)if(pt[t][1].exec(u[1])){i=pt[t][0],s=!1!==pt[t][2];break}if(null==i)e._isValid=!1;else{if(u[3]){for(t=0,n=l;t<n;t++)if(kt[t][1].exec(u[3])){r=(u[2]||" ")+kt[t][0];break}if(null==r)return void(e._isValid=!1)}if(s||null==r){if(u[4]){if(!wt.exec(u[4]))return void(e._isValid=!1);a="Z"}e._f=i+(r||"")+(a||""),Tt(e)}else e._isValid=!1}}else e._isValid=!1}function Yt(e,t,n,s,i,r){e=[function(e){e=parseInt(e,10);{if(e<=49)return 2e3+e;if(e<=999)return 1900+e}return e}(e),Ue.indexOf(t),parseInt(n,10),parseInt(s,10),parseInt(i,10)];return r&&e.push(parseInt(r,10)),e}function Ot(e){var t,n,s,i,r=Mt.exec(e._i.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));r?(t=Yt(r[4],r[3],r[2],r[5],r[6],r[7]),n=r[1],s=t,i=e,n&&Qe.indexOf(n)!==new Date(s[0],s[1],s[2]).getDay()?(m(i).weekdayMismatch=!0,i._isValid=!1):(e._a=t,e._tzm=(n=r[8],s=r[9],i=r[10],n?Dt[n]:s?0:60*(((n=parseInt(i,10))-(s=n%100))/100)+s),e._d=Ze.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),m(e).rfc2822=!0)):e._isValid=!1}function bt(e,t,n){return null!=e?e:null!=t?t:n}function xt(e){var t,n,s,i,r,a,o,u,l,h,d,c=[];if(!e._d){for(s=e,i=new Date(f.now()),n=s._useUTC?[i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate()]:[i.getFullYear(),i.getMonth(),i.getDate()],e._w&&null==e._a[b]&&null==e._a[O]&&(null!=(i=(s=e)._w).GG||null!=i.W||null!=i.E?(u=1,l=4,r=bt(i.GG,s._a[Y],qe(W(),1,4).year),a=bt(i.W,1),((o=bt(i.E,1))<1||7<o)&&(h=!0)):(u=s._locale._week.dow,l=s._locale._week.doy,d=qe(W(),u,l),r=bt(i.gg,s._a[Y],d.year),a=bt(i.w,d.week),null!=i.d?((o=i.d)<0||6<o)&&(h=!0):null!=i.e?(o=i.e+u,(i.e<0||6<i.e)&&(h=!0)):o=u),a<1||a>P(r,u,l)?m(s)._overflowWeeks=!0:null!=h?m(s)._overflowWeekday=!0:(d=$e(r,a,o,u,l),s._a[Y]=d.year,s._dayOfYear=d.dayOfYear)),null!=e._dayOfYear&&(i=bt(e._a[Y],n[Y]),(e._dayOfYear>Ae(i)||0===e._dayOfYear)&&(m(e)._overflowDayOfYear=!0),h=Ze(i,0,e._dayOfYear),e._a[O]=h.getUTCMonth(),e._a[b]=h.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=c[t]=n[t];for(;t<7;t++)e._a[t]=c[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[x]&&0===e._a[T]&&0===e._a[N]&&0===e._a[Ne]&&(e._nextDay=!0,e._a[x]=0),e._d=(e._useUTC?Ze:je).apply(null,c),r=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[x]=24),e._w&&void 0!==e._w.d&&e._w.d!==r&&(m(e).weekdayMismatch=!0)}}function Tt(e){if(e._f===f.ISO_8601)St(e);else if(e._f===f.RFC_2822)Ot(e);else{e._a=[],m(e).empty=!0;for(var t,n,s,i,r,a=""+e._i,o=a.length,u=0,l=ae(e._f,e._locale).match(te)||[],h=l.length,d=0;d<h;d++)n=l[d],(t=(a.match(Oe(n,e))||[])[0])&&(0<(s=a.substr(0,a.indexOf(t))).length&&m(e).unusedInput.push(s),a=a.slice(a.indexOf(t)+t.length),u+=t.length),ie[n]?(t?m(e).empty=!1:m(e).unusedTokens.push(n),s=n,r=e,null!=(i=t)&&c(xe,s)&&xe[s](i,r._a,r,s)):e._strict&&!t&&m(e).unusedTokens.push(n);m(e).charsLeftOver=o-u,0<a.length&&m(e).unusedInput.push(a),e._a[x]<=12&&!0===m(e).bigHour&&0<e._a[x]&&(m(e).bigHour=void 0),m(e).parsedDateParts=e._a.slice(0),m(e).meridiem=e._meridiem,e._a[x]=function(e,t,n){if(null==n)return t;return null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((e=e.isPM(n))&&t<12&&(t+=12),t=e||12!==t?t:0):t}(e._locale,e._a[x],e._meridiem),null!==(o=m(e).era)&&(e._a[Y]=e._locale.erasConvertYear(o,e._a[Y])),xt(e),_t(e)}}function Nt(e){var t,n,s,i=e._i,r=e._f;if(e._locale=e._locale||mt(e._l),null===i||void 0===r&&""===i)return I({nullInput:!0});if("string"==typeof i&&(e._i=i=e._locale.preparse(i)),h(i))return new q(_t(i));if(V(i))e._d=i;else if(a(r))!function(e){var t,n,s,i,r,a,o=!1,u=e._f.length;if(0===u)return m(e).invalidFormat=!0,e._d=new Date(NaN);for(i=0;i<u;i++)r=0,a=!1,t=$({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[i],Tt(t),A(t)&&(a=!0),r=(r+=m(t).charsLeftOver)+10*m(t).unusedTokens.length,m(t).score=r,o?r<s&&(s=r,n=t):(null==s||r<s||a)&&(s=r,n=t,a&&(o=!0));E(e,n||t)}(e);else if(r)Tt(e);else if(o(r=(i=e)._i))i._d=new Date(f.now());else V(r)?i._d=new Date(r.valueOf()):"string"==typeof r?(n=i,null!==(t=vt.exec(n._i))?n._d=new Date(+t[1]):(St(n),!1===n._isValid&&(delete n._isValid,Ot(n),!1===n._isValid&&(delete n._isValid,n._strict?n._isValid=!1:f.createFromInputFallback(n))))):a(r)?(i._a=G(r.slice(0),function(e){return parseInt(e,10)}),xt(i)):F(r)?(t=i)._d||(s=void 0===(n=ue(t._i)).day?n.date:n.day,t._a=G([n.year,n.month,s,n.hour,n.minute,n.second,n.millisecond],function(e){return e&&parseInt(e,10)}),xt(t)):u(r)?i._d=new Date(r):f.createFromInputFallback(i);return A(e)||(e._d=null),e}function Pt(e,t,n,s,i){var r={};return!0!==t&&!1!==t||(s=t,t=void 0),!0!==n&&!1!==n||(s=n,n=void 0),(F(e)&&L(e)||a(e)&&0===e.length)&&(e=void 0),r._isAMomentObject=!0,r._useUTC=r._isUTC=i,r._l=n,r._i=e,r._f=t,r._strict=s,(i=new q(_t(Nt(i=r))))._nextDay&&(i.add(1,"d"),i._nextDay=void 0),i}function W(e,t,n,s){return Pt(e,t,n,s,!1)}f.createFromInputFallback=e("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(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),f.ISO_8601=function(){},f.RFC_2822=function(){};ge=e("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=W.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:I()}),we=e("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=W.apply(null,arguments);return this.isValid()&&e.isValid()?this<e?this:e:I()});function Rt(e,t){var n,s;if(!(t=1===t.length&&a(t[0])?t[0]:t).length)return W();for(n=t[0],s=1;s<t.length;++s)t[s].isValid()&&!t[s][e](n)||(n=t[s]);return n}var Wt=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Ct(e){var e=ue(e),t=e.year||0,n=e.quarter||0,s=e.month||0,i=e.week||e.isoWeek||0,r=e.day||0,a=e.hour||0,o=e.minute||0,u=e.second||0,l=e.millisecond||0;this._isValid=function(e){var t,n,s=!1,i=Wt.length;for(t in e)if(c(e,t)&&(-1===S.call(Wt,t)||null!=e[t]&&isNaN(e[t])))return!1;for(n=0;n<i;++n)if(e[Wt[n]]){if(s)return!1;parseFloat(e[Wt[n]])!==g(e[Wt[n]])&&(s=!0)}return!0}(e),this._milliseconds=+l+1e3*u+6e4*o+1e3*a*60*60,this._days=+r+7*i,this._months=+s+3*n+12*t,this._data={},this._locale=mt(),this._bubble()}function Ut(e){return e instanceof Ct}function Ht(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Ft(e,n){s(e,0,0,function(){var e=this.utcOffset(),t="+";return e<0&&(e=-e,t="-"),t+r(~~(e/60),2)+n+r(~~e%60,2)})}Ft("Z",":"),Ft("ZZ",""),v("Z",Ye),v("ZZ",Ye),D(["Z","ZZ"],function(e,t,n){n._useUTC=!0,n._tzm=Vt(Ye,e)});var Lt=/([\+\-]|\d\d)/gi;function Vt(e,t){var t=(t||"").match(e);return null===t?null:0===(t=60*(e=((t[t.length-1]||[])+"").match(Lt)||["-",0,0])[1]+g(e[2]))?0:"+"===e[0]?t:-t}function Gt(e,t){var n;return t._isUTC?(t=t.clone(),n=(h(e)||V(e)?e:W(e)).valueOf()-t.valueOf(),t._d.setTime(t._d.valueOf()+n),f.updateOffset(t,!1),t):W(e).local()}function Et(e){return-Math.round(e._d.getTimezoneOffset())}function At(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}f.updateOffset=function(){};var It=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,jt=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function C(e,t){var n,s=e,i=null;return Ut(e)?s={ms:e._milliseconds,d:e._days,M:e._months}:u(e)||!isNaN(+e)?(s={},t?s[t]=+e:s.milliseconds=+e):(i=It.exec(e))?(n="-"===i[1]?-1:1,s={y:0,d:g(i[b])*n,h:g(i[x])*n,m:g(i[T])*n,s:g(i[N])*n,ms:g(Ht(1e3*i[Ne]))*n}):(i=jt.exec(e))?(n="-"===i[1]?-1:1,s={y:Zt(i[2],n),M:Zt(i[3],n),w:Zt(i[4],n),d:Zt(i[5],n),h:Zt(i[6],n),m:Zt(i[7],n),s:Zt(i[8],n)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(t=function(e,t){var n;if(!e.isValid()||!t.isValid())return{milliseconds:0,months:0};t=Gt(t,e),e.isBefore(t)?n=zt(e,t):((n=zt(t,e)).milliseconds=-n.milliseconds,n.months=-n.months);return n}(W(s.from),W(s.to)),(s={}).ms=t.milliseconds,s.M=t.months),i=new Ct(s),Ut(e)&&c(e,"_locale")&&(i._locale=e._locale),Ut(e)&&c(e,"_isValid")&&(i._isValid=e._isValid),i}function Zt(e,t){e=e&&parseFloat(e.replace(",","."));return(isNaN(e)?0:e)*t}function zt(e,t){var n={};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function $t(s,i){return function(e,t){var n;return null===t||isNaN(+t)||(Q(i,"moment()."+i+"(period, number) is deprecated. Please use moment()."+i+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),n=e,e=t,t=n),qt(this,C(e,t),s),this}}function qt(e,t,n,s){var i=t._milliseconds,r=Ht(t._days),t=Ht(t._months);e.isValid()&&(s=null==s||s,t&&Ve(e,ce(e,"Month")+t*n),r&&fe(e,"Date",ce(e,"Date")+r*n),i&&e._d.setTime(e._d.valueOf()+i*n),s&&f.updateOffset(e,r||t))}C.fn=Ct.prototype,C.invalid=function(){return C(NaN)};Ce=$t(1,"add"),Je=$t(-1,"subtract");function Bt(e){return"string"==typeof e||e instanceof String}function Jt(e){return h(e)||V(e)||Bt(e)||u(e)||function(t){var e=a(t),n=!1;e&&(n=0===t.filter(function(e){return!u(e)&&Bt(t)}).length);return e&&n}(e)||function(e){var t,n,s=F(e)&&!L(e),i=!1,r=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],a=r.length;for(t=0;t<a;t+=1)n=r[t],i=i||c(e,n);return s&&i}(e)||null==e}function Qt(e,t){if(e.date()<t.date())return-Qt(t,e);var n=12*(t.year()-e.year())+(t.month()-e.month()),s=e.clone().add(n,"months"),t=t-s<0?(t-s)/(s-e.clone().add(n-1,"months")):(t-s)/(e.clone().add(1+n,"months")-s);return-(n+t)||0}function Xt(e){return void 0===e?this._locale._abbr:(null!=(e=mt(e))&&(this._locale=e),this)}f.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",f.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";Xe=e("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});function Kt(){return this._locale}var en=126227808e5;function tn(e,t){return(e%t+t)%t}function nn(e,t,n){return e<100&&0<=e?new Date(e+400,t,n)-en:new Date(e,t,n).valueOf()}function sn(e,t,n){return e<100&&0<=e?Date.UTC(e+400,t,n)-en:Date.UTC(e,t,n)}function rn(e,t){return t.erasAbbrRegex(e)}function an(){for(var e=[],t=[],n=[],s=[],i=this.eras(),r=0,a=i.length;r<a;++r)t.push(M(i[r].name)),e.push(M(i[r].abbr)),n.push(M(i[r].narrow)),s.push(M(i[r].name)),s.push(M(i[r].abbr)),s.push(M(i[r].narrow));this._erasRegex=new RegExp("^("+s.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+t.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+e.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+n.join("|")+")","i")}function on(e,t){s(0,[e,e.length],0,t)}function un(e,t,n,s,i){var r;return null==e?qe(this,s,i).year:(r=P(e,s,i),function(e,t,n,s,i){e=$e(e,t,n,s,i),t=Ze(e.year,0,e.dayOfYear);return this.year(t.getUTCFullYear()),this.month(t.getUTCMonth()),this.date(t.getUTCDate()),this}.call(this,e,t=r<t?r:t,n,s,i))}s("N",0,0,"eraAbbr"),s("NN",0,0,"eraAbbr"),s("NNN",0,0,"eraAbbr"),s("NNNN",0,0,"eraName"),s("NNNNN",0,0,"eraNarrow"),s("y",["y",1],"yo","eraYear"),s("y",["yy",2],0,"eraYear"),s("y",["yyy",3],0,"eraYear"),s("y",["yyyy",4],0,"eraYear"),v("N",rn),v("NN",rn),v("NNN",rn),v("NNNN",function(e,t){return t.erasNameRegex(e)}),v("NNNNN",function(e,t){return t.erasNarrowRegex(e)}),D(["N","NN","NNN","NNNN","NNNNN"],function(e,t,n,s){s=n._locale.erasParse(e,s,n._strict);s?m(n).era=s:m(n).invalidEra=e}),v("y",Me),v("yy",Me),v("yyy",Me),v("yyyy",Me),v("yo",function(e,t){return t._eraYearOrdinalRegex||Me}),D(["y","yy","yyy","yyyy"],Y),D(["yo"],function(e,t,n,s){var i;n._locale._eraYearOrdinalRegex&&(i=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[Y]=n._locale.eraYearOrdinalParse(e,i):t[Y]=parseInt(e,10)}),s(0,["gg",2],0,function(){return this.weekYear()%100}),s(0,["GG",2],0,function(){return this.isoWeekYear()%100}),on("gggg","weekYear"),on("ggggg","weekYear"),on("GGGG","isoWeekYear"),on("GGGGG","isoWeekYear"),t("weekYear","gg"),t("isoWeekYear","GG"),n("weekYear",1),n("isoWeekYear",1),v("G",De),v("g",De),v("GG",p,w),v("gg",p,w),v("GGGG",ke,_e),v("gggg",ke,_e),v("GGGGG",ve,ye),v("ggggg",ve,ye),Te(["gggg","ggggg","GGGG","GGGGG"],function(e,t,n,s){t[s.substr(0,2)]=g(e)}),Te(["gg","GG"],function(e,t,n,s){t[s]=f.parseTwoDigitYear(e)}),s("Q",0,"Qo","quarter"),t("quarter","Q"),n("quarter",7),v("Q",i),D("Q",function(e,t){t[O]=3*(g(e)-1)}),s("D",["DD",2],"Do","date"),t("date","D"),n("date",9),v("D",p),v("DD",p,w),v("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),D(["D","DD"],b),D("Do",function(e,t){t[b]=g(e.match(p)[0])});ke=de("Date",!0);s("DDD",["DDDD",3],"DDDo","dayOfYear"),t("dayOfYear","DDD"),n("dayOfYear",4),v("DDD",pe),v("DDDD",me),D(["DDD","DDDD"],function(e,t,n){n._dayOfYear=g(e)}),s("m",["mm",2],0,"minute"),t("minute","m"),n("minute",14),v("m",p),v("mm",p,w),D(["m","mm"],T);var ln,_e=de("Minutes",!1),ve=(s("s",["ss",2],0,"second"),t("second","s"),n("second",15),v("s",p),v("ss",p,w),D(["s","ss"],N),de("Seconds",!1));for(s("S",0,0,function(){return~~(this.millisecond()/100)}),s(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),s(0,["SSS",3],0,"millisecond"),s(0,["SSSS",4],0,function(){return 10*this.millisecond()}),s(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),s(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),s(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),s(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),s(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),t("millisecond","ms"),n("millisecond",16),v("S",pe,i),v("SS",pe,w),v("SSS",pe,me),ln="SSSS";ln.length<=9;ln+="S")v(ln,Me);function hn(e,t){t[Ne]=g(1e3*("0."+e))}for(ln="S";ln.length<=9;ln+="S")D(ln,hn);ye=de("Milliseconds",!1),s("z",0,0,"zoneAbbr"),s("zz",0,0,"zoneName");i=q.prototype;function dn(e){return e}i.add=Ce,i.calendar=function(e,t){1===arguments.length&&(arguments[0]?Jt(arguments[0])?(e=arguments[0],t=void 0):function(e){for(var t=F(e)&&!L(e),n=!1,s=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"],i=0;i<s.length;i+=1)n=n||c(e,s[i]);return t&&n}(arguments[0])&&(t=arguments[0],e=void 0):t=e=void 0);var e=e||W(),n=Gt(e,this).startOf("day"),n=f.calendarFormat(this,n)||"sameElse",t=t&&(d(t[n])?t[n].call(this,e):t[n]);return this.format(t||this.localeData().calendar(n,this,W(e)))},i.clone=function(){return new q(this)},i.diff=function(e,t,n){var s,i,r;if(!this.isValid())return NaN;if(!(s=Gt(e,this)).isValid())return NaN;switch(i=6e4*(s.utcOffset()-this.utcOffset()),t=_(t)){case"year":r=Qt(this,s)/12;break;case"month":r=Qt(this,s);break;case"quarter":r=Qt(this,s)/3;break;case"second":r=(this-s)/1e3;break;case"minute":r=(this-s)/6e4;break;case"hour":r=(this-s)/36e5;break;case"day":r=(this-s-i)/864e5;break;case"week":r=(this-s-i)/6048e5;break;default:r=this-s}return n?r:y(r)},i.endOf=function(e){var t,n;if(void 0===(e=_(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?sn:nn,e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=36e5-tn(t+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":t=this._d.valueOf(),t+=6e4-tn(t,6e4)-1;break;case"second":t=this._d.valueOf(),t+=1e3-tn(t,1e3)-1;break}return this._d.setTime(t),f.updateOffset(this,!0),this},i.format=function(e){return e=e||(this.isUtc()?f.defaultFormatUtc:f.defaultFormat),e=re(this,e),this.localeData().postformat(e)},i.from=function(e,t){return this.isValid()&&(h(e)&&e.isValid()||W(e).isValid())?C({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},i.fromNow=function(e){return this.from(W(),e)},i.to=function(e,t){return this.isValid()&&(h(e)&&e.isValid()||W(e).isValid())?C({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},i.toNow=function(e){return this.to(W(),e)},i.get=function(e){return d(this[e=_(e)])?this[e]():this},i.invalidAt=function(){return m(this).overflow},i.isAfter=function(e,t){return e=h(e)?e:W(e),!(!this.isValid()||!e.isValid())&&("millisecond"===(t=_(t)||"millisecond")?this.valueOf()>e.valueOf():e.valueOf()<this.clone().startOf(t).valueOf())},i.isBefore=function(e,t){return e=h(e)?e:W(e),!(!this.isValid()||!e.isValid())&&("millisecond"===(t=_(t)||"millisecond")?this.valueOf()<e.valueOf():this.clone().endOf(t).valueOf()<e.valueOf())},i.isBetween=function(e,t,n,s){return e=h(e)?e:W(e),t=h(t)?t:W(t),!!(this.isValid()&&e.isValid()&&t.isValid())&&(("("===(s=s||"()")[0]?this.isAfter(e,n):!this.isBefore(e,n))&&(")"===s[1]?this.isBefore(t,n):!this.isAfter(t,n)))},i.isSame=function(e,t){var e=h(e)?e:W(e);return!(!this.isValid()||!e.isValid())&&("millisecond"===(t=_(t)||"millisecond")?this.valueOf()===e.valueOf():(e=e.valueOf(),this.clone().startOf(t).valueOf()<=e&&e<=this.clone().endOf(t).valueOf()))},i.isSameOrAfter=function(e,t){return this.isSame(e,t)||this.isAfter(e,t)},i.isSameOrBefore=function(e,t){return this.isSame(e,t)||this.isBefore(e,t)},i.isValid=function(){return A(this)},i.lang=Xe,i.locale=Xt,i.localeData=Kt,i.max=we,i.min=ge,i.parsingFlags=function(){return E({},m(this))},i.set=function(e,t){if("object"==typeof e)for(var n=function(e){var t,n=[];for(t in e)c(e,t)&&n.push({unit:t,priority:le[t]});return n.sort(function(e,t){return e.priority-t.priority}),n}(e=ue(e)),s=n.length,i=0;i<s;i++)this[n[i].unit](e[n[i].unit]);else if(d(this[e=_(e)]))return this[e](t);return this},i.startOf=function(e){var t,n;if(void 0===(e=_(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?sn:nn,e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=tn(t+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":t=this._d.valueOf(),t-=tn(t,6e4);break;case"second":t=this._d.valueOf(),t-=tn(t,1e3);break}return this._d.setTime(t),f.updateOffset(this,!0),this},i.subtract=Je,i.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},i.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},i.toDate=function(){return new Date(this.valueOf())},i.toISOString=function(e){if(!this.isValid())return null;var t=(e=!0!==e)?this.clone().utc():this;return t.year()<0||9999<t.year()?re(t,e?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):d(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",re(t,"Z")):re(t,e?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},i.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t="moment",n="";return this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",n="Z"),t="["+t+'("]',e=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",this.format(t+e+"-MM-DD[T]HH:mm:ss.SSS"+(n+'[")]'))},"undefined"!=typeof Symbol&&null!=Symbol.for&&(i[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),i.toJSON=function(){return this.isValid()?this.toISOString():null},i.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},i.unix=function(){return Math.floor(this.valueOf()/1e3)},i.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},i.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},i.eraName=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;n<s;++n){if(e=this.clone().startOf("day").valueOf(),t[n].since<=e&&e<=t[n].until)return t[n].name;if(t[n].until<=e&&e<=t[n].since)return t[n].name}return""},i.eraNarrow=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;n<s;++n){if(e=this.clone().startOf("day").valueOf(),t[n].since<=e&&e<=t[n].until)return t[n].narrow;if(t[n].until<=e&&e<=t[n].since)return t[n].narrow}return""},i.eraAbbr=function(){for(var e,t=this.localeData().eras(),n=0,s=t.length;n<s;++n){if(e=this.clone().startOf("day").valueOf(),t[n].since<=e&&e<=t[n].until)return t[n].abbr;if(t[n].until<=e&&e<=t[n].since)return t[n].abbr}return""},i.eraYear=function(){for(var e,t,n=this.localeData().eras(),s=0,i=n.length;s<i;++s)if(e=n[s].since<=n[s].until?1:-1,t=this.clone().startOf("day").valueOf(),n[s].since<=t&&t<=n[s].until||n[s].until<=t&&t<=n[s].since)return(this.year()-f(n[s].since).year())*e+n[s].offset;return this.year()},i.year=Ie,i.isLeapYear=function(){return he(this.year())},i.weekYear=function(e){return un.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},i.isoWeekYear=function(e){return un.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},i.quarter=i.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},i.month=Ge,i.daysInMonth=function(){return We(this.year(),this.month())},i.week=i.weeks=function(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")},i.isoWeek=i.isoWeeks=function(e){var t=qe(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")},i.weeksInYear=function(){var e=this.localeData()._week;return P(this.year(),e.dow,e.doy)},i.weeksInWeekYear=function(){var e=this.localeData()._week;return P(this.weekYear(),e.dow,e.doy)},i.isoWeeksInYear=function(){return P(this.year(),1,4)},i.isoWeeksInISOWeekYear=function(){return P(this.isoWeekYear(),1,4)},i.date=ke,i.day=i.days=function(e){if(!this.isValid())return null!=e?this:NaN;var t,n,s=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(t=e,n=this.localeData(),e="string"!=typeof t?t:isNaN(t)?"number"==typeof(t=n.weekdaysParse(t))?t:null:parseInt(t,10),this.add(e-s,"d")):s},i.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")},i.isoWeekday=function(e){return this.isValid()?null!=e?(t=e,n=this.localeData(),n="string"==typeof t?n.weekdaysParse(t)%7||7:isNaN(t)?null:t,this.day(this.day()%7?n:n-7)):this.day()||7:null!=e?this:NaN;var t,n},i.dayOfYear=function(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")},i.hour=i.hours=k,i.minute=i.minutes=_e,i.second=i.seconds=ve,i.millisecond=i.milliseconds=ye,i.utcOffset=function(e,t,n){var s,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null==e)return this._isUTC?i:Et(this);if("string"==typeof e){if(null===(e=Vt(Ye,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(s=Et(this)),this._offset=e,this._isUTC=!0,null!=s&&this.add(s,"m"),i!==e&&(!t||this._changeInProgress?qt(this,C(e-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,f.updateOffset(this,!0),this._changeInProgress=null)),this},i.utc=function(e){return this.utcOffset(0,e)},i.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(Et(this),"m")),this},i.parseZone=function(){var e;return null!=this._tzm?this.utcOffset(this._tzm,!1,!0):"string"==typeof this._i&&(null!=(e=Vt(Se,this._i))?this.utcOffset(e):this.utcOffset(0,!0)),this},i.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?W(e).utcOffset():0,(this.utcOffset()-e)%60==0)},i.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},i.isLocal=function(){return!!this.isValid()&&!this._isUTC},i.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},i.isUtc=At,i.isUTC=At,i.zoneAbbr=function(){return this._isUTC?"UTC":""},i.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},i.dates=e("dates accessor is deprecated. Use date instead.",ke),i.months=e("months accessor is deprecated. Use month instead",Ge),i.years=e("years accessor is deprecated. Use year instead",Ie),i.zone=e("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(e,t){return null!=e?(this.utcOffset(e="string"!=typeof e?-e:e,t),this):-this.utcOffset()}),i.isDSTShifted=e("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!o(this._isDSTShifted))return this._isDSTShifted;var e,t={};return $(t,this),(t=Nt(t))._a?(e=(t._isUTC?l:W)(t._a),this._isDSTShifted=this.isValid()&&0<function(e,t,n){for(var s=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),r=0,a=0;a<s;a++)(n&&e[a]!==t[a]||!n&&g(e[a])!==g(t[a]))&&r++;return r+i}(t._a,e.toArray())):this._isDSTShifted=!1,this._isDSTShifted});w=K.prototype;function cn(e,t,n,s){var i=mt(),s=l().set(s,t);return i[n](s,e)}function fn(e,t,n){if(u(e)&&(t=e,e=void 0),e=e||"",null!=t)return cn(e,t,n,"month");for(var s=[],i=0;i<12;i++)s[i]=cn(e,i,n,"month");return s}function mn(e,t,n,s){t=("boolean"==typeof e?u(t)&&(n=t,t=void 0):(t=e,e=!1,u(n=t)&&(n=t,t=void 0)),t||"");var i,r=mt(),a=e?r._week.dow:0,o=[];if(null!=n)return cn(t,(n+a)%7,s,"day");for(i=0;i<7;i++)o[i]=cn(t,(i+a)%7,s,"day");return o}w.calendar=function(e,t,n){return d(e=this._calendar[e]||this._calendar.sameElse)?e.call(t,n):e},w.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(te).map(function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e}).join(""),this._longDateFormat[e])},w.invalidDate=function(){return this._invalidDate},w.ordinal=function(e){return this._ordinal.replace("%d",e)},w.preparse=dn,w.postformat=dn,w.relativeTime=function(e,t,n,s){var i=this._relativeTime[n];return d(i)?i(e,t,n,s):i.replace(/%d/i,e)},w.pastFuture=function(e,t){return d(e=this._relativeTime[0<e?"future":"past"])?e(t):e.replace(/%s/i,t)},w.set=function(e){var t,n;for(n in e)c(e,n)&&(d(t=e[n])?this[n]=t:this["_"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},w.eras=function(e,t){for(var n,s=this._eras||mt("en")._eras,i=0,r=s.length;i<r;++i){switch(typeof s[i].since){case"string":n=f(s[i].since).startOf("day"),s[i].since=n.valueOf();break}switch(typeof s[i].until){case"undefined":s[i].until=1/0;break;case"string":n=f(s[i].until).startOf("day").valueOf(),s[i].until=n.valueOf();break}}return s},w.erasParse=function(e,t,n){var s,i,r,a,o,u=this.eras();for(e=e.toUpperCase(),s=0,i=u.length;s<i;++s)if(r=u[s].name.toUpperCase(),a=u[s].abbr.toUpperCase(),o=u[s].narrow.toUpperCase(),n)switch(t){case"N":case"NN":case"NNN":if(a===e)return u[s];break;case"NNNN":if(r===e)return u[s];break;case"NNNNN":if(o===e)return u[s];break}else if(0<=[r,a,o].indexOf(e))return u[s]},w.erasConvertYear=function(e,t){var n=e.since<=e.until?1:-1;return void 0===t?f(e.since).year():f(e.since).year()+(t-e.offset)*n},w.erasAbbrRegex=function(e){return c(this,"_erasAbbrRegex")||an.call(this),e?this._erasAbbrRegex:this._erasRegex},w.erasNameRegex=function(e){return c(this,"_erasNameRegex")||an.call(this),e?this._erasNameRegex:this._erasRegex},w.erasNarrowRegex=function(e){return c(this,"_erasNarrowRegex")||an.call(this),e?this._erasNarrowRegex:this._erasRegex},w.months=function(e,t){return e?(a(this._months)?this._months:this._months[(this._months.isFormat||He).test(t)?"format":"standalone"])[e.month()]:a(this._months)?this._months:this._months.standalone},w.monthsShort=function(e,t){return e?(a(this._monthsShort)?this._monthsShort:this._monthsShort[He.test(t)?"format":"standalone"])[e.month()]:a(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},w.monthsParse=function(e,t,n){var s,i;if(this._monthsParseExact)return function(e,t,n){var s,i,r,e=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],s=0;s<12;++s)r=l([2e3,s]),this._shortMonthsParse[s]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[s]=this.months(r,"").toLocaleLowerCase();return n?"MMM"===t?-1!==(i=S.call(this._shortMonthsParse,e))?i:null:-1!==(i=S.call(this._longMonthsParse,e))?i:null:"MMM"===t?-1!==(i=S.call(this._shortMonthsParse,e))||-1!==(i=S.call(this._longMonthsParse,e))?i:null:-1!==(i=S.call(this._longMonthsParse,e))||-1!==(i=S.call(this._shortMonthsParse,e))?i:null}.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(i=l([2e3,s]),n&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[s]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[s]||(i="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[s]=new RegExp(i.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[s].test(e))return s;if(n&&"MMM"===t&&this._shortMonthsParse[s].test(e))return s;if(!n&&this._monthsParse[s].test(e))return s}},w.monthsRegex=function(e){return this._monthsParseExact?(c(this,"_monthsRegex")||Ee.call(this),e?this._monthsStrictRegex:this._monthsRegex):(c(this,"_monthsRegex")||(this._monthsRegex=Le),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},w.monthsShortRegex=function(e){return this._monthsParseExact?(c(this,"_monthsRegex")||Ee.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(c(this,"_monthsShortRegex")||(this._monthsShortRegex=Fe),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},w.week=function(e){return qe(e,this._week.dow,this._week.doy).week},w.firstDayOfYear=function(){return this._week.doy},w.firstDayOfWeek=function(){return this._week.dow},w.weekdays=function(e,t){return t=a(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"],!0===e?Be(t,this._week.dow):e?t[e.day()]:t},w.weekdaysMin=function(e){return!0===e?Be(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},w.weekdaysShort=function(e){return!0===e?Be(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},w.weekdaysParse=function(e,t,n){var s,i;if(this._weekdaysParseExact)return function(e,t,n){var s,i,r,e=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)r=l([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(r,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(i=S.call(this._weekdaysParse,e))?i:null:"ddd"===t?-1!==(i=S.call(this._shortWeekdaysParse,e))?i:null:-1!==(i=S.call(this._minWeekdaysParse,e))?i:null:"dddd"===t?-1!==(i=S.call(this._weekdaysParse,e))||-1!==(i=S.call(this._shortWeekdaysParse,e))||-1!==(i=S.call(this._minWeekdaysParse,e))?i:null:"ddd"===t?-1!==(i=S.call(this._shortWeekdaysParse,e))||-1!==(i=S.call(this._weekdaysParse,e))||-1!==(i=S.call(this._minWeekdaysParse,e))?i:null:-1!==(i=S.call(this._minWeekdaysParse,e))||-1!==(i=S.call(this._weekdaysParse,e))||-1!==(i=S.call(this._shortWeekdaysParse,e))?i:null}.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(i=l([2e3,1]).day(s),n&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[s]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[s]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[s]||(i="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[s]=new RegExp(i.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[s].test(e))return s;if(n&&"ddd"===t&&this._shortWeekdaysParse[s].test(e))return s;if(n&&"dd"===t&&this._minWeekdaysParse[s].test(e))return s;if(!n&&this._weekdaysParse[s].test(e))return s}},w.weekdaysRegex=function(e){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||nt.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(c(this,"_weekdaysRegex")||(this._weekdaysRegex=Ke),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},w.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||nt.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(c(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=et),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},w.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||nt.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(c(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=tt),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},w.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},w.meridiem=function(e,t,n){return 11<e?n?"pm":"PM":n?"am":"AM"},ct("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===g(e%100/10)?"th":1==t?"st":2==t?"nd":3==t?"rd":"th")}}),f.lang=e("moment.lang is deprecated. Use moment.locale instead.",ct),f.langData=e("moment.langData is deprecated. Use moment.localeData instead.",mt);var _n=Math.abs;function yn(e,t,n,s){t=C(t,n);return e._milliseconds+=s*t._milliseconds,e._days+=s*t._days,e._months+=s*t._months,e._bubble()}function gn(e){return e<0?Math.floor(e):Math.ceil(e)}function wn(e){return 4800*e/146097}function pn(e){return 146097*e/4800}function kn(e){return function(){return this.as(e)}}pe=kn("ms"),me=kn("s"),Ce=kn("m"),we=kn("h"),ge=kn("d"),Je=kn("w"),k=kn("M"),_e=kn("Q"),ve=kn("y");function vn(e){return function(){return this.isValid()?this._data[e]:NaN}}var ye=vn("milliseconds"),ke=vn("seconds"),Ie=vn("minutes"),w=vn("hours"),Mn=vn("days"),Dn=vn("months"),Sn=vn("years");var Yn=Math.round,On={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function bn(e,t,n,s){var i=C(e).abs(),r=Yn(i.as("s")),a=Yn(i.as("m")),o=Yn(i.as("h")),u=Yn(i.as("d")),l=Yn(i.as("M")),h=Yn(i.as("w")),i=Yn(i.as("y")),r=(r<=n.ss?["s",r]:r<n.s&&["ss",r])||a<=1&&["m"]||a<n.m&&["mm",a]||o<=1&&["h"]||o<n.h&&["hh",o]||u<=1&&["d"]||u<n.d&&["dd",u];return(r=(r=null!=n.w?r||h<=1&&["w"]||h<n.w&&["ww",h]:r)||l<=1&&["M"]||l<n.M&&["MM",l]||i<=1&&["y"]||["yy",i])[2]=t,r[3]=0<+e,r[4]=s,function(e,t,n,s,i){return i.relativeTime(t||1,!!n,e,s)}.apply(null,r)}var xn=Math.abs;function Tn(e){return(0<e)-(e<0)||+e}function Nn(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n,s,i,r,a,o=xn(this._milliseconds)/1e3,u=xn(this._days),l=xn(this._months),h=this.asSeconds();return h?(e=y(o/60),t=y(e/60),o%=60,e%=60,n=y(l/12),l%=12,s=o?o.toFixed(3).replace(/\.?0+$/,""):"",i=Tn(this._months)!==Tn(h)?"-":"",r=Tn(this._days)!==Tn(h)?"-":"",a=Tn(this._milliseconds)!==Tn(h)?"-":"",(h<0?"-":"")+"P"+(n?i+n+"Y":"")+(l?i+l+"M":"")+(u?r+u+"D":"")+(t||e||o?"T":"")+(t?a+t+"H":"")+(e?a+e+"M":"")+(o?a+s+"S":"")):"P0D"}var U=Ct.prototype;return U.isValid=function(){return this._isValid},U.abs=function(){var e=this._data;return this._milliseconds=_n(this._milliseconds),this._days=_n(this._days),this._months=_n(this._months),e.milliseconds=_n(e.milliseconds),e.seconds=_n(e.seconds),e.minutes=_n(e.minutes),e.hours=_n(e.hours),e.months=_n(e.months),e.years=_n(e.years),this},U.add=function(e,t){return yn(this,e,t,1)},U.subtract=function(e,t){return yn(this,e,t,-1)},U.as=function(e){if(!this.isValid())return NaN;var t,n,s=this._milliseconds;if("month"===(e=_(e))||"quarter"===e||"year"===e)switch(t=this._days+s/864e5,n=this._months+wn(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(pn(this._months)),e){case"week":return t/7+s/6048e5;case"day":return t+s/864e5;case"hour":return 24*t+s/36e5;case"minute":return 1440*t+s/6e4;case"second":return 86400*t+s/1e3;case"millisecond":return Math.floor(864e5*t)+s;default:throw new Error("Unknown unit "+e)}},U.asMilliseconds=pe,U.asSeconds=me,U.asMinutes=Ce,U.asHours=we,U.asDays=ge,U.asWeeks=Je,U.asMonths=k,U.asQuarters=_e,U.asYears=ve,U.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*g(this._months/12):NaN},U._bubble=function(){var e=this._milliseconds,t=this._days,n=this._months,s=this._data;return 0<=e&&0<=t&&0<=n||e<=0&&t<=0&&n<=0||(e+=864e5*gn(pn(n)+t),n=t=0),s.milliseconds=e%1e3,e=y(e/1e3),s.seconds=e%60,e=y(e/60),s.minutes=e%60,e=y(e/60),s.hours=e%24,t+=y(e/24),n+=e=y(wn(t)),t-=gn(pn(e)),e=y(n/12),n%=12,s.days=t,s.months=n,s.years=e,this},U.clone=function(){return C(this)},U.get=function(e){return e=_(e),this.isValid()?this[e+"s"]():NaN},U.milliseconds=ye,U.seconds=ke,U.minutes=Ie,U.hours=w,U.days=Mn,U.weeks=function(){return y(this.days()/7)},U.months=Dn,U.years=Sn,U.humanize=function(e,t){if(!this.isValid())return this.localeData().invalidDate();var n=!1,s=On;return"object"==typeof e&&(t=e,e=!1),"boolean"==typeof e&&(n=e),"object"==typeof t&&(s=Object.assign({},On,t),null!=t.s&&null==t.ss&&(s.ss=t.s-1)),e=this.localeData(),t=bn(this,!n,s,e),n&&(t=e.pastFuture(+this,t)),e.postformat(t)},U.toISOString=Nn,U.toString=Nn,U.toJSON=Nn,U.locale=Xt,U.localeData=Kt,U.toIsoString=e("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Nn),U.lang=Xe,s("X",0,0,"unix"),s("x",0,0,"valueOf"),v("x",De),v("X",/[+-]?\d+(\.\d{1,3})?/),D("X",function(e,t,n){n._d=new Date(1e3*parseFloat(e))}),D("x",function(e,t,n){n._d=new Date(g(e))}),f.version="2.29.4",H=W,f.fn=i,f.min=function(){return Rt("isBefore",[].slice.call(arguments,0))},f.max=function(){return Rt("isAfter",[].slice.call(arguments,0))},f.now=function(){return Date.now?Date.now():+new Date},f.utc=l,f.unix=function(e){return W(1e3*e)},f.months=function(e,t){return fn(e,t,"months")},f.isDate=V,f.locale=ct,f.invalid=I,f.duration=C,f.isMoment=h,f.weekdays=function(e,t,n){return mn(e,t,n,"weekdays")},f.parseZone=function(){return W.apply(null,arguments).parseZone()},f.localeData=mt,f.isDuration=Ut,f.monthsShort=function(e,t){return fn(e,t,"monthsShort")},f.weekdaysMin=function(e,t,n){return mn(e,t,n,"weekdaysMin")},f.defineLocale=ft,f.updateLocale=function(e,t){var n,s;return null!=t?(s=ot,null!=R[e]&&null!=R[e].parentLocale?R[e].set(X(R[e]._config,t)):(t=X(s=null!=(n=dt(e))?n._config:s,t),null==n&&(t.abbr=e),(s=new K(t)).parentLocale=R[e],R[e]=s),ct(e)):null!=R[e]&&(null!=R[e].parentLocale?(R[e]=R[e].parentLocale,e===ct()&&ct(e)):null!=R[e]&&delete R[e]),R[e]},f.locales=function(){return ee(R)},f.weekdaysShort=function(e,t,n){return mn(e,t,n,"weekdaysShort")},f.normalizeUnits=_,f.relativeTimeRounding=function(e){return void 0===e?Yn:"function"==typeof e&&(Yn=e,!0)},f.relativeTimeThreshold=function(e,t){return void 0!==On[e]&&(void 0===t?On[e]:(On[e]=t,"s"===e&&(On.ss=t-1),!0))},f.calendarFormat=function(e,t){return(e=e.diff(t,"days",!0))<-6?"sameElse":e<-1?"lastWeek":e<0?"lastDay":e<1?"sameDay":e<2?"nextDay":e<7?"nextWeek":"sameElse"},f.prototype=i,f.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"},f});
2//# sourceMappingURL=moment.min.js.map
2 \ No newline at end of file \ No newline at end of file
public/lib/moment.min.js.map+0 -1
@@ -1 +0,0 @@
1{"version":3,"file":"moment.min.js","sources":["../moment.js"],"names":["global","factory","exports","module","define","amd","moment","this","hookCallback","hooks","apply","arguments","isArray","input","Array","Object","prototype","toString","call","isObject","hasOwnProp","a","b","hasOwnProperty","isObjectEmpty","obj","getOwnPropertyNames","length","k","isUndefined","isNumber","isDate","Date","map","arr","fn","res","arrLen","i","push","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","m","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","some","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","undefined","bigHour","isFrozen","createInvalid","NaN","fun","t","len","momentProperties","updateInProgress","copyConfig","to","from","prop","val","momentPropertiesLen","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","arg","key","args","argLen","slice","join","Error","stack","deprecations","deprecateSimple","name","isFunction","Function","mergeConfigs","parentConfig","childConfig","Locale","set","keys","zeroFill","number","targetLength","forceSign","absNumber","Math","abs","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","callback","func","localeData","formatMoment","expandFormat","array","match","replace","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","aliases","addUnitAlias","unit","shorthand","lowerCase","toLowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","isLeapYear","year","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","value","isFinite","makeGetSet","keepTime","set$1","get","month","date","daysInMonth","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","addRegexToken","regex","strictRegex","regexes","isStrict","getParseRegexForToken","RegExp","regexEscape","matched","p1","p2","p3","p4","s","tokens","addParseToken","tokenLen","addWeekParseToken","_w","indexOf","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","modMonth","x","o","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","split","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","setMonth","dayOfMonth","min","getSetMonth","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","sort","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","daysInYear","y","parseTwoDigitYear","parseInt","getSetYear","createDate","d","h","M","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","dayOfYear","resDayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","n","concat","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","day","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","getSetHour","globalLocale","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","w","ww","MM","yy","meridiemParse","locales","localeFamilies","normalizeLocale","chooseLocale","names","j","next","loadLocale","arr1","arr2","minl","commonPrefix","oldLocale","_abbr","require","getSetGlobalLocale","e","values","data","getLocale","defineLocale","abbr","_config","parentLocale","forEach","checkOverflow","_a","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","l","allowTime","dateFormat","timeFormat","tzFormat","string","exec","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","result","untruncateYear","configFromRFC2822","parsedArray","weekdayStr","parsedInput","getDay","obsOffset","militaryOffset","numOffset","hm","setUTCMinutes","getUTCMinutes","defaults","c","configFromArray","currentDate","weekYear","weekdayOverflow","curWeek","nowValue","now","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","GG","W","E","createLocal","_week","gg","temp","_dayOfYear","yearToUse","_nextDay","expectedWeekday","ISO_8601","RFC_2822","stringLength","totalParsedInputLength","skipped","hour","meridiemHour","isPm","meridiemFixWrap","erasConvertYear","prepareConfig","dayOrDate","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromStringAndArray","createFromInputFallback","minute","second","millisecond","isUTC","add","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","orderLen","parseFloat","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","round","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","matches","parts","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","parseIso","diffRes","base","isBefore","positiveMomentsDifference","momentsDifference","ret","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","isString","String","isMomentInput","arrayTest","dataTypeTest","filter","item","isNumberOrStringArray","property","objectTest","propertyTest","properties","propertyLen","isMomentInputObject","monthDiff","wholeMonthDiff","anchor","adjust","newLocaleData","defaultFormat","defaultFormatUtc","lang","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","matchEraAbbr","erasAbbrRegex","computeErasParse","abbrPieces","namePieces","narrowPieces","eras","narrow","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","addWeekYearFormatToken","getter","getSetWeekYearHelper","weeksTarget","dayOfYearData","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","eraYearOrdinalParse","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetSecond","parseMs","getSetMillisecond","proto","preParsePostFormat","time","formats","isCalendarSpec","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","getPrioritizedUnits","prioritizedLen","toArray","toObject","toDate","toISOString","keepOffset","inspect","zone","isLocal","prefix","Symbol","for","toJSON","unix","creationData","eraName","since","until","eraNarrow","eraAbbr","eraYear","dir","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","array1","array2","dontConvert","lengthDiff","diffs","compareArrays","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","toUpperCase","tok","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","source","_eras","Infinity","isFormat","_monthsShort","monthName","_monthsParseExact","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","weekdayName","_weekdaysParseExact","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","_fullWeekdaysParse","charAt","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","relativeTime$1","posNegDuration","abs$1","toISOString$1","ymSign","daysSign","hmsSign","total","toFixed","proto$2","monthsFromDays","argWithSuffix","argThresholds","withSuffix","th","assign","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS"],"mappings":"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"}
1 \ No newline at end of file \ No newline at end of file
public/locales/ar-sa.json+0 -7
@@ -56,9 +56,6 @@
56 "Max Response Length (tokens)": "الحد الأقصى لطول الاستجابة (الرموز,الحرف)",56 "Max Response Length (tokens)": "الحد الأقصى لطول الاستجابة (الرموز,الحرف)",
57 "Multiple swipes per generation": "الضربات الشديدة المتعددة لكل جيل",57 "Multiple swipes per generation": "الضربات الشديدة المتعددة لكل جيل",
58 "Enable OpenAI completion streaming": "تمكين بث الاكتمال من OpenAI",58 "Enable OpenAI completion streaming": "تمكين بث الاكتمال من OpenAI",
59 "Enable Cohere web-search connector": "تمكين موصل بحث الويب Cohere",
60 "Web-search": "البحث في الويب",
61 "Allow the model to use the web-search connector.": "اسمح للنموذج باستخدام موصل بحث الويب.",
62 "Frequency Penalty": "عقوبة التكرار",59 "Frequency Penalty": "عقوبة التكرار",
63 "Presence Penalty": "عقوبة الوجود",60 "Presence Penalty": "عقوبة الوجود",
64 "Count Penalty": "عد ضربة جزاء",61 "Count Penalty": "عد ضربة جزاء",
@@ -381,10 +378,6 @@
381 "Group by vendors Description": "ضع نماذج OpenAI في مجموعة واحدة، والنماذج الإنسانية في مجموعة أخرى، وما إلى ذلك. ويمكن دمجها مع الفرز.",378 "Group by vendors Description": "ضع نماذج OpenAI في مجموعة واحدة، والنماذج الإنسانية في مجموعة أخرى، وما إلى ذلك. ويمكن دمجها مع الفرز.",
382 "Allow fallback routes": "السماح بمسارات الاحتياط",379 "Allow fallback routes": "السماح بمسارات الاحتياط",
383 "Allow fallback routes Description": "يختار النموذج البديل تلقائيًا إذا كان النموذج المحدد غير قادر على تلبية طلبك.",380 "Allow fallback routes Description": "يختار النموذج البديل تلقائيًا إذا كان النموذج المحدد غير قادر على تلبية طلبك.",
384 "openrouter_force_instruct": "هذا الخيار قديم وسيتم إزالته في المستقبل. لاستخدام تنسيق التعليمات، يرجى التبديل إلى OpenRouter ضمن Text Completion API بدلاً من ذلك.",
385 "LEGACY": "إرث",
386 "Force Instruct Mode formatting": "فرض تنسيق وضع التعليمات",
387 "Force_Instruct_Mode_formatting_Description": "إذا تم تمكين وضع التعليمات وهذا، فسيتم تنسيق المطالبة بواسطة SillyTavern باستخدام التيار\n إعدادات التنسيق المتقدمة (باستثناء توجيه موجه النظام). إذا تم تعطيله، فسيتم تنسيق المطالبة بواسطة OpenRouter.",
388 "Scale API Key": "مفتاح API لـ Scale",381 "Scale API Key": "مفتاح API لـ Scale",
389 "Clear your cookie": "امسح ملف تعريف الارتباط الخاص بك",382 "Clear your cookie": "امسح ملف تعريف الارتباط الخاص بك",
390 "Alt Method": "طريقة بديلة",383 "Alt Method": "طريقة بديلة",
public/locales/de-de.json+0 -7
@@ -56,9 +56,6 @@
56 "Max Response Length (tokens)": "Maximale Antwortlänge (Tokens)",56 "Max Response Length (tokens)": "Maximale Antwortlänge (Tokens)",
57 "Multiple swipes per generation": "Mehrere Swipes pro Generation",57 "Multiple swipes per generation": "Mehrere Swipes pro Generation",
58 "Enable OpenAI completion streaming": "OpenAI-Vervollständigungsstreaming aktivieren",58 "Enable OpenAI completion streaming": "OpenAI-Vervollständigungsstreaming aktivieren",
59 "Enable Cohere web-search connector": "Cohere-Websuch-Connector aktivieren",
60 "Web-search": "Web-Suche",
61 "Allow the model to use the web-search connector.": "Erlauben Sie dem Modell, den Websuch-Connector zu verwenden.",
62 "Frequency Penalty": "Frequenzstrafe",59 "Frequency Penalty": "Frequenzstrafe",
63 "Presence Penalty": "Präsenzstrafe",60 "Presence Penalty": "Präsenzstrafe",
64 "Count Penalty": "Strafe zählen",61 "Count Penalty": "Strafe zählen",
@@ -381,10 +378,6 @@
381 "Group by vendors Description": "Platzieren Sie OpenAI-Modelle in einer Gruppe, anthropogene Modelle in einer anderen Gruppe usw. Kann mit Sortierung kombiniert werden.",378 "Group by vendors Description": "Platzieren Sie OpenAI-Modelle in einer Gruppe, anthropogene Modelle in einer anderen Gruppe usw. Kann mit Sortierung kombiniert werden.",
382 "Allow fallback routes": "Fallback-Routen zulassen",379 "Allow fallback routes": "Fallback-Routen zulassen",
383 "Allow fallback routes Description": "Das alternative Modell wird automatisch ausgewählt, wenn das ausgewählte Modell Ihre Anfrage nicht erfüllen kann.",380 "Allow fallback routes Description": "Das alternative Modell wird automatisch ausgewählt, wenn das ausgewählte Modell Ihre Anfrage nicht erfüllen kann.",
384 "openrouter_force_instruct": "Diese Option ist veraltet und wird in Zukunft entfernt. Um die Formatierung mit Anweisungen zu verwenden, wechseln Sie stattdessen zu OpenRouter unter Text Completion API.",
385 "LEGACY": "VERMÄCHTNIS",
386 "Force Instruct Mode formatting": "Formatierung im Force Instruct Mode",
387 "Force_Instruct_Mode_formatting_Description": "Wenn sowohl der Anweisungsmodus als auch dieser aktiviert sind, wird die Eingabeaufforderung von SillyTavern mit den aktuellen erweiterten Formatierungseinstellungen formatiert (außer „Anweisungssystem-Eingabeaufforderung“). Wenn deaktiviert, wird die Eingabeaufforderung von OpenRouter formatiert.",
388 "Scale API Key": "Scale API-Schlüssel",381 "Scale API Key": "Scale API-Schlüssel",
389 "Clear your cookie": "Löschen Sie Ihre Cookies",382 "Clear your cookie": "Löschen Sie Ihre Cookies",
390 "Alt Method": "Alternative Methode",383 "Alt Method": "Alternative Methode",
public/locales/es-es.json+0 -7
@@ -56,9 +56,6 @@
56 "Max Response Length (tokens)": "Longitud máxima de respuesta (tokens)",56 "Max Response Length (tokens)": "Longitud máxima de respuesta (tokens)",
57 "Multiple swipes per generation": "Múltiples golpes por generación",57 "Multiple swipes per generation": "Múltiples golpes por generación",
58 "Enable OpenAI completion streaming": "Activar streaming de completado de OpenAI",58 "Enable OpenAI completion streaming": "Activar streaming de completado de OpenAI",
59 "Enable Cohere web-search connector": "Habilitar el conector de búsqueda web de Cohere",
60 "Web-search": "Búsqueda Web",
61 "Allow the model to use the web-search connector.": "Permita que el modelo utilice el conector de búsqueda web.",
62 "Frequency Penalty": "Penalización de frecuencia",59 "Frequency Penalty": "Penalización de frecuencia",
63 "Presence Penalty": "Penalización de presencia",60 "Presence Penalty": "Penalización de presencia",
64 "Count Penalty": "Penalización de conteo",61 "Count Penalty": "Penalización de conteo",
@@ -381,10 +378,6 @@
381 "Group by vendors Description": "Coloque los modelos OpenAI en un grupo, los modelos antrópicos en otro grupo, etc. Se puede combinar con la clasificación.",378 "Group by vendors Description": "Coloque los modelos OpenAI en un grupo, los modelos antrópicos en otro grupo, etc. Se puede combinar con la clasificación.",
382 "Allow fallback routes": "Permitir rutas de respaldo",379 "Allow fallback routes": "Permitir rutas de respaldo",
383 "Allow fallback routes Description": "El modelo alternativo se elige automáticamente si el modelo seleccionado no puede cumplir con tu solicitud.",380 "Allow fallback routes Description": "El modelo alternativo se elige automáticamente si el modelo seleccionado no puede cumplir con tu solicitud.",
384 "openrouter_force_instruct": "Esta opción está desactualizada y se eliminará en el futuro. Para utilizar el formato de instrucciones, cambie a OpenRouter en API de finalización de texto.",
385 "LEGACY": "LEGADO",
386 "Force Instruct Mode formatting": "Forzar formato en modo de instrucción",
387 "Force_Instruct_Mode_formatting_Description": "Si tanto el modo de instrucción como este están habilitados, SillyTavern formateará el mensaje usando el formato actual.\n configuraciones de formato avanzadas (excepto instrucciones del mensaje del sistema). Si está deshabilitado, OpenRouter formateará el mensaje.",
388 "Scale API Key": "Clave API de Scale",381 "Scale API Key": "Clave API de Scale",
389 "Clear your cookie": "Limpia tu cookie",382 "Clear your cookie": "Limpia tu cookie",
390 "Alt Method": "Método alternativo",383 "Alt Method": "Método alternativo",
public/locales/fr-fr.json+0 -7
@@ -56,9 +56,6 @@
56 "Max Response Length (tokens)": "Longueur maximale de la réponse (tokens)",56 "Max Response Length (tokens)": "Longueur maximale de la réponse (tokens)",
57 "Multiple swipes per generation": "Plusieurs balayages par génération",57 "Multiple swipes per generation": "Plusieurs balayages par génération",
58 "Enable OpenAI completion streaming": "Activer le streaming de complétion OpenAI",58 "Enable OpenAI completion streaming": "Activer le streaming de complétion OpenAI",
59 "Enable Cohere web-search connector": "Activer le connecteur de recherche Web Cohere",
60 "Web-search": "Recherche Internet",
61 "Allow the model to use the web-search connector.": "Autorisez le modèle à utiliser le connecteur de recherche Web.",
62 "Frequency Penalty": "Pénalité de fréquence",59 "Frequency Penalty": "Pénalité de fréquence",
63 "Presence Penalty": "Pénalité de présence",60 "Presence Penalty": "Pénalité de présence",
64 "Count Penalty": "Pénalité de décompte",61 "Count Penalty": "Pénalité de décompte",
@@ -381,10 +378,6 @@
381 "Group by vendors Description": "Placez les modèles OpenAI dans un groupe, les modèles Anthropic dans un autre groupe, etc. Peut être combiné avec le tri.",378 "Group by vendors Description": "Placez les modèles OpenAI dans un groupe, les modèles Anthropic dans un autre groupe, etc. Peut être combiné avec le tri.",
382 "Allow fallback routes": "Autoriser les itinéraires de secours",379 "Allow fallback routes": "Autoriser les itinéraires de secours",
383 "Allow fallback routes Description": "Le modèle alternatif est automatiquement sélectionné si le modèle choisi ne peut pas répondre à votre demande.",380 "Allow fallback routes Description": "Le modèle alternatif est automatiquement sélectionné si le modèle choisi ne peut pas répondre à votre demande.",
384 "openrouter_force_instruct": "Cette option est obsolète et sera supprimée à l'avenir. Pour utiliser le formatage des instructions, veuillez plutôt passer à OpenRouter sous API de saisie semi-automatique de texte.",
385 "LEGACY": "HÉRITAGE",
386 "Force Instruct Mode formatting": "Forcer le formatage du mode instruction",
387 "Force_Instruct_Mode_formatting_Description": "Si le mode Instruct et celui-ci sont activés, l'invite sera formatée par SillyTavern en utilisant le mode actuel.\n paramètres de formatage avancés (à l'exception de l'invite système). Si elle est désactivée, l'invite sera formatée par OpenRouter.",
388 "Scale API Key": "Clé API Scale",381 "Scale API Key": "Clé API Scale",
389 "Clear your cookie": "Effacer vos cookies",382 "Clear your cookie": "Effacer vos cookies",
390 "Alt Method": "Méthode alternative",383 "Alt Method": "Méthode alternative",
public/locales/is-is.json+0 -7
@@ -56,9 +56,6 @@
56 "Max Response Length (tokens)": "Hámarks lengd svörunar (í táknum)",56 "Max Response Length (tokens)": "Hámarks lengd svörunar (í táknum)",
57 "Multiple swipes per generation": "Mörg högg á hverja kynslóð",57 "Multiple swipes per generation": "Mörg högg á hverja kynslóð",
58 "Enable OpenAI completion streaming": "Virkja OpenAI klárastreymi",58 "Enable OpenAI completion streaming": "Virkja OpenAI klárastreymi",
59 "Enable Cohere web-search connector": "Virkja Cohere vefleitartengi",
60 "Web-search": "Vefleit",
61 "Allow the model to use the web-search connector.": "Leyfðu líkaninu að nota vefleitartengið.",
62 "Frequency Penalty": "Tíðnarefning",59 "Frequency Penalty": "Tíðnarefning",
63 "Presence Penalty": "Tilkoma refning",60 "Presence Penalty": "Tilkoma refning",
64 "Count Penalty": "Telja víti",61 "Count Penalty": "Telja víti",
@@ -381,10 +378,6 @@
381 "Group by vendors Description": "Setjið OpenAI módel í einn hóp, Anthropic módel í annan hóp osfrv. Hægt að sameina við flokkun.",378 "Group by vendors Description": "Setjið OpenAI módel í einn hóp, Anthropic módel í annan hóp osfrv. Hægt að sameina við flokkun.",
382 "Allow fallback routes": "Leyfa bakfallssvæði",379 "Allow fallback routes": "Leyfa bakfallssvæði",
383 "Allow fallback routes Description": "Veldur hlutleysa vélbúnaðarinn við val þinn ef valið módel getur ekki uppfyllt beiðni þína.",380 "Allow fallback routes Description": "Veldur hlutleysa vélbúnaðarinn við val þinn ef valið módel getur ekki uppfyllt beiðni þína.",
384 "openrouter_force_instruct": "Þessi valkostur er úreltur og verður fjarlægður í framtíðinni. Til að nota leiðbeiningarsnið skaltu skipta yfir í OpenRouter undir Text Completion API í staðinn.",
385 "LEGACY": "ARFIÐ",
386 "Force Instruct Mode formatting": "Force Instruct Mode formatting",
387 "Force_Instruct_Mode_formatting_Description": "Ef bæði leiðbeiningarhamur og þessi eru virkjuð, verður kvaðningurinn sniðinn af SillyTavern með því að nota núverandi\n háþróaðar sniðstillingar (nema leiðbeiningar um System Prompt). Ef slökkt er á henni verður hvetjan sniðin af OpenRouter.",
388 "Scale API Key": "Lykill API fyrir Scale",381 "Scale API Key": "Lykill API fyrir Scale",
389 "Clear your cookie": "Hreinsaðu kökuna þína",382 "Clear your cookie": "Hreinsaðu kökuna þína",
390 "Alt Method": "Aðferð Bakmenn",383 "Alt Method": "Aðferð Bakmenn",
public/locales/it-it.json+0 -7
@@ -56,9 +56,6 @@
56 "Max Response Length (tokens)": "Lunghezza massima della risposta (token)",56 "Max Response Length (tokens)": "Lunghezza massima della risposta (token)",
57 "Multiple swipes per generation": "Più passaggi per generazione",57 "Multiple swipes per generation": "Più passaggi per generazione",
58 "Enable OpenAI completion streaming": "Abilita lo streaming di completamento OpenAI",58 "Enable OpenAI completion streaming": "Abilita lo streaming di completamento OpenAI",
59 "Enable Cohere web-search connector": "Abilita il connettore di ricerca web Cohere",
60 "Web-search": "Ricerca sul web",
61 "Allow the model to use the web-search connector.": "Consenti al modello di utilizzare il connettore di ricerca web.",
62 "Frequency Penalty": "Penalità di frequenza",59 "Frequency Penalty": "Penalità di frequenza",
63 "Presence Penalty": "Penalità di presenza",60 "Presence Penalty": "Penalità di presenza",
64 "Count Penalty": "Conte Penalità",61 "Count Penalty": "Conte Penalità",
@@ -381,10 +378,6 @@
381 "Group by vendors Description": "Metti i modelli OpenAI in un gruppo, i modelli antropici in un altro gruppo, ecc. Può essere combinato con l'ordinamento.",378 "Group by vendors Description": "Metti i modelli OpenAI in un gruppo, i modelli antropici in un altro gruppo, ecc. Può essere combinato con l'ordinamento.",
382 "Allow fallback routes": "Consenti percorsi alternativi",379 "Allow fallback routes": "Consenti percorsi alternativi",
383 "Allow fallback routes Description": "Il modello alternativo viene automaticamente scelto se il modello selezionato non può soddisfare la tua richiesta.",380 "Allow fallback routes Description": "Il modello alternativo viene automaticamente scelto se il modello selezionato non può soddisfare la tua richiesta.",
384 "openrouter_force_instruct": "Questa opzione è obsoleta e verrà rimossa in futuro. Per usare la formattazione instruct, passa a OpenRouter in Text Completion API.",
385 "LEGACY": "EREDITÀ",
386 "Force Instruct Mode formatting": "Forza la formattazione della modalità istruzione",
387 "Force_Instruct_Mode_formatting_Description": "Se sia la modalità Instruct che questa sono abilitate, il prompt verrà formattato da SillyTavern utilizzando il file current\n impostazioni di formattazione avanzate (ad eccezione del prompt di sistema). Se disabilitato, il prompt verrà formattato da OpenRouter.",
388 "Scale API Key": "Chiave API di Scale",381 "Scale API Key": "Chiave API di Scale",
389 "Clear your cookie": "Cancella il tuo cookie",382 "Clear your cookie": "Cancella il tuo cookie",
390 "Alt Method": "Metodo alternativo",383 "Alt Method": "Metodo alternativo",
public/locales/ja-jp.json+0 -7
@@ -56,9 +56,6 @@
56 "Max Response Length (tokens)": "最大応答長(トークン数)",56 "Max Response Length (tokens)": "最大応答長(トークン数)",
57 "Multiple swipes per generation": "世代ごとに複数のスワイプ",57 "Multiple swipes per generation": "世代ごとに複数のスワイプ",
58 "Enable OpenAI completion streaming": "OpenAIの完了ストリーミングを有効にする",58 "Enable OpenAI completion streaming": "OpenAIの完了ストリーミングを有効にする",
59 "Enable Cohere web-search connector": "Cohereウェブ検索コネクタを有効にする",
60 "Web-search": "ウェブ検索",
61 "Allow the model to use the web-search connector.": "モデルが Web 検索コネクタを使用できるようにします。",
62 "Frequency Penalty": "頻度ペナルティ",59 "Frequency Penalty": "頻度ペナルティ",
63 "Presence Penalty": "存在ペナルティ",60 "Presence Penalty": "存在ペナルティ",
64 "Count Penalty": "カウントペナルティ",61 "Count Penalty": "カウントペナルティ",
@@ -381,10 +378,6 @@
381 "Group by vendors Description": "OpenAI モデルを 1 つのグループに、Anthropic モデルを別のグループに配置するなどします。ソートと組み合わせることができます。",378 "Group by vendors Description": "OpenAI モデルを 1 つのグループに、Anthropic モデルを別のグループに配置するなどします。ソートと組み合わせることができます。",
382 "Allow fallback routes": "フォールバックルートを許可",379 "Allow fallback routes": "フォールバックルートを許可",
383 "Allow fallback routes Description": "選択したモデルが要求を満たせない場合、代替モデルが自動的に選択されます。",380 "Allow fallback routes Description": "選択したモデルが要求を満たせない場合、代替モデルが自動的に選択されます。",
384 "openrouter_force_instruct": "このオプションは古く、将来削除される予定です。指示されたフォーマットを使用するには、代わりにテキスト補完 API の OpenRouter に切り替えてください。",
385 "LEGACY": "遺産",
386 "Force Instruct Mode formatting": "強制指示モードのフォーマット",
387 "Force_Instruct_Mode_formatting_Description": "Instruct Mode とこれが両方とも有効になっている場合、プロンプトは SillyTavern によって現在の高度なフォーマット設定 (instruct System Prompt を除く) を使用してフォーマットされます。無効になっている場合、プロンプトは OpenRouter によってフォーマットされます。",
388 "Scale API Key": "ScaleのAPIキー",381 "Scale API Key": "ScaleのAPIキー",
389 "Clear your cookie": "クッキーを消去する",382 "Clear your cookie": "クッキーを消去する",
390 "Alt Method": "代替手法",383 "Alt Method": "代替手法",
public/locales/ko-kr.json+0 -7
@@ -56,9 +56,6 @@
56 "Max Response Length (tokens)": "최대 응답 길이 (토큰)",56 "Max Response Length (tokens)": "최대 응답 길이 (토큰)",
57 "Multiple swipes per generation": "세대당 다중 스와이프",57 "Multiple swipes per generation": "세대당 다중 스와이프",
58 "Enable OpenAI completion streaming": "OpenAI 완성 스트리밍 활성화",58 "Enable OpenAI completion streaming": "OpenAI 완성 스트리밍 활성화",
59 "Enable Cohere web-search connector": "Cohere 웹 검색 커넥터 활성화",
60 "Web-search": "웹 서핑",
61 "Allow the model to use the web-search connector.": "모델이 웹 검색 커넥터를 사용하도록 허용합니다.",
62 "Frequency Penalty": "빈도 패널티",59 "Frequency Penalty": "빈도 패널티",
63 "Presence Penalty": "존재 패널티",60 "Presence Penalty": "존재 패널티",
64 "Count Penalty": "카운트 페널티",61 "Count Penalty": "카운트 페널티",
@@ -381,10 +378,6 @@
381 "Group by vendors Description": "OpenAI 모델을 한 그룹에 넣고, Anthropic 모델을 다른 그룹에 두는 등 정렬을 통해 결합할 수 있습니다.",378 "Group by vendors Description": "OpenAI 모델을 한 그룹에 넣고, Anthropic 모델을 다른 그룹에 두는 등 정렬을 통해 결합할 수 있습니다.",
382 "Allow fallback routes": "대체 경로 허용",379 "Allow fallback routes": "대체 경로 허용",
383 "Allow fallback routes Description": "선택한 모델이 요청을 처리할 수 없는 경우 대체 모델이 자동으로 선택됩니다.",380 "Allow fallback routes Description": "선택한 모델이 요청을 처리할 수 없는 경우 대체 모델이 자동으로 선택됩니다.",
384 "openrouter_force_instruct": "이 옵션은 오래되었으며 향후 제거될 예정입니다. 지시 형식을 사용하려면 대신 Text Completion API에서 OpenRouter로 전환하세요.",
385 "LEGACY": "유산",
386 "Force Instruct Mode formatting": "강제 지시 모드 포맷",
387 "Force_Instruct_Mode_formatting_Description": "Instruct Mode와 이 모드가 모두 활성화된 경우 프롬프트는 SillyTavern에 의해 현재 형식을 사용하여 형식화됩니다.\n 고급 형식 설정(시스템 프롬프트 지시 제외) 비활성화된 경우 프롬프트는 OpenRouter에 의해 형식화됩니다.",
388 "Scale API Key": "Scale API 키",381 "Scale API Key": "Scale API 키",
389 "Clear your cookie": "쿠키 지우기",382 "Clear your cookie": "쿠키 지우기",
390 "Alt Method": "대체 방법",383 "Alt Method": "대체 방법",
public/locales/nl-nl.json+0 -7
@@ -56,9 +56,6 @@
56 "Max Response Length (tokens)": "Maximale lengte van het antwoord (tokens)",56 "Max Response Length (tokens)": "Maximale lengte van het antwoord (tokens)",
57 "Multiple swipes per generation": "Meerdere swipes per generatie",57 "Multiple swipes per generation": "Meerdere swipes per generatie",
58 "Enable OpenAI completion streaming": "OpenAI voltooiingsstreaming inschakelen",58 "Enable OpenAI completion streaming": "OpenAI voltooiingsstreaming inschakelen",
59 "Enable Cohere web-search connector": "Schakel de Cohere-webzoekconnector in",
60 "Web-search": "Web-zoeken",
61 "Allow the model to use the web-search connector.": "Sta toe dat het model de webzoekconnector gebruikt.",
62 "Frequency Penalty": "Frequentieboete",59 "Frequency Penalty": "Frequentieboete",
63 "Presence Penalty": "Aanwezigheidsboete",60 "Presence Penalty": "Aanwezigheidsboete",
64 "Count Penalty": "Tel straf",61 "Count Penalty": "Tel straf",
@@ -381,10 +378,6 @@
381 "Group by vendors Description": "Plaats OpenAI-modellen in één groep, antropische modellen in een andere groep, enz. Kan worden gecombineerd met sorteren.",378 "Group by vendors Description": "Plaats OpenAI-modellen in één groep, antropische modellen in een andere groep, enz. Kan worden gecombineerd met sorteren.",
382 "Allow fallback routes": "Fallback-routes toestaan",379 "Allow fallback routes": "Fallback-routes toestaan",
383 "Allow fallback routes Description": "Het alternatieve model wordt automatisch gekozen als het geselecteerde model niet aan uw verzoek kan voldoen.",380 "Allow fallback routes Description": "Het alternatieve model wordt automatisch gekozen als het geselecteerde model niet aan uw verzoek kan voldoen.",
384 "openrouter_force_instruct": "Deze optie is verouderd en zal in de toekomst worden verwijderd. Om instructie-opmaak te gebruiken, schakelt u in plaats daarvan over naar OpenRouter onder Text Completion API.",
385 "LEGACY": "NALATENSCHAP",
386 "Force Instruct Mode formatting": "Forceer de opmaak van de instructiemodus",
387 "Force_Instruct_Mode_formatting_Description": "Als zowel de Instruct-modus als deze zijn ingeschakeld, wordt de prompt door SillyTavern geformatteerd met behulp van de current\n geavanceerde opmaakinstellingen (behalve de opdracht Systeemprompt). Indien uitgeschakeld, wordt de prompt geformatteerd door OpenRouter.",
388 "Scale API Key": "Scale API-sleutel",381 "Scale API Key": "Scale API-sleutel",
389 "Clear your cookie": "Wis uw cookie",382 "Clear your cookie": "Wis uw cookie",
390 "Alt Method": "Alternatieve methode",383 "Alt Method": "Alternatieve methode",
public/locales/pt-pt.json+0 -7
@@ -56,9 +56,6 @@
56 "Max Response Length (tokens)": "Comprimento Máximo da Resposta (tokens)",56 "Max Response Length (tokens)": "Comprimento Máximo da Resposta (tokens)",
57 "Multiple swipes per generation": "Vários furtos por geração",57 "Multiple swipes per generation": "Vários furtos por geração",
58 "Enable OpenAI completion streaming": "Ativar streaming de conclusão do OpenAI",58 "Enable OpenAI completion streaming": "Ativar streaming de conclusão do OpenAI",
59 "Enable Cohere web-search connector": "Ativar o conector de pesquisa na Web Cohere",
60 "Web-search": "Pesquisa na internet",
61 "Allow the model to use the web-search connector.": "Permita que o modelo use o conector de pesquisa na Web.",
62 "Frequency Penalty": "Pena de Frequência",59 "Frequency Penalty": "Pena de Frequência",
63 "Presence Penalty": "Pena de Presença",60 "Presence Penalty": "Pena de Presença",
64 "Count Penalty": "Contar penalidade",61 "Count Penalty": "Contar penalidade",
@@ -381,10 +378,6 @@
381 "Group by vendors Description": "Coloque os modelos OpenAI em um grupo, os modelos antrópicos em outro grupo, etc.",378 "Group by vendors Description": "Coloque os modelos OpenAI em um grupo, os modelos antrópicos em outro grupo, etc.",
382 "Allow fallback routes": "Permitir rotas de fallback",379 "Allow fallback routes": "Permitir rotas de fallback",
383 "Allow fallback routes Description": "O modelo alternativo será escolhido automaticamente se o modelo selecionado não puder atender à sua solicitação.",380 "Allow fallback routes Description": "O modelo alternativo será escolhido automaticamente se o modelo selecionado não puder atender à sua solicitação.",
384 "openrouter_force_instruct": "Esta opção está desatualizada e será removida no futuro. Para usar a formatação de instruções, mude para OpenRouter em Text Completion API.",
385 "LEGACY": "LEGADO",
386 "Force Instruct Mode formatting": "Forçar formatação do modo de instrução",
387 "Force_Instruct_Mode_formatting_Description": "Se o Modo Instruir e este estiverem habilitados, o prompt será formatado pelo SillyTavern usando o atual\n configurações avançadas de formatação (exceto instruir o prompt do sistema). Se desativado, o prompt será formatado pelo OpenRouter.",
388 "Scale API Key": "Chave da API Scale",381 "Scale API Key": "Chave da API Scale",
389 "Clear your cookie": "Limpe seu cookie",382 "Clear your cookie": "Limpe seu cookie",
390 "Alt Method": "Método Alternativo",383 "Alt Method": "Método Alternativo",
public/locales/ru-ru.json+273 -25
@@ -56,7 +56,7 @@
56 "Rep. Pen. Slope": "Rep. Pen. Slope",56 "Rep. Pen. Slope": "Rep. Pen. Slope",
57 "Top K": "Top K",57 "Top K": "Top K",
58 "Top P": "Top P",58 "Top P": "Top P",
59 "Do Sample": "Сделать образец",59 "Do Sample": "Включить сэмплинг",
60 "Add BOS Token": "Добавлять BOS-токен",60 "Add BOS Token": "Добавлять BOS-токен",
61 "Add the bos_token to the beginning of prompts. Disabling this can make the replies more creative": "Добавлять BOS-токен в начале промпта. Если выключить, ответы могут стать более креативными.",61 "Add the bos_token to the beginning of prompts. Disabling this can make the replies more creative": "Добавлять BOS-токен в начале промпта. Если выключить, ответы могут стать более креативными.",
62 "Ban EOS Token": "Запретить EOS-токен",62 "Ban EOS Token": "Запретить EOS-токен",
@@ -105,8 +105,8 @@
105 "API url": "URL-адрес API",105 "API url": "URL-адрес API",
106 "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Режим обёртки API OpenAI)",106 "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Режим обёртки API OpenAI)",
107 "Register a Horde account for faster queue times": "Заведите учетную запись Horde для ускорения генерации",107 "Register a Horde account for faster queue times": "Заведите учетную запись Horde для ускорения генерации",
108 "Adjust context size to worker capabilities": "Уточнить размер контекста в соответствии с возможностями рабочих машин",108 "Adjust context size to worker capabilities": "Подстраивать размер контекста под возможности рабочих машин",
109 "Adjust response length to worker capabilities": "Уточнить длинну ответа в соответствии с возможностями рабочих машин",109 "Adjust response length to worker capabilities": "Подстраивать длину ответа под возможности рабочих машин",
110 "API key": "API-ключ",110 "API key": "API-ключ",
111 "Tabby API key": "Tabby API-ключ",111 "Tabby API key": "Tabby API-ключ",
112 "Get it here:": "Получить здесь:",112 "Get it here:": "Получить здесь:",
@@ -132,9 +132,9 @@
132 "Novel AI Model": "Модель NovelAI",132 "Novel AI Model": "Модель NovelAI",
133 "Make sure you run it with": "Обязательно запускайте его с флагом",133 "Make sure you run it with": "Обязательно запускайте его с флагом",
134 "flag": "",134 "flag": "",
135 "API key (optional)": "Ключ API (опционально)",135 "API key (optional)": "Ключ API (необязательно)",
136 "Server url": "URL-адрес сервера",136 "Server url": "URL-адрес сервера",
137 "Custom model (optional)": "Пользовательская модель (опционально)",137 "Custom model (optional)": "Пользовательская модель (необязательно)",
138 "Bypass API status check": "Обход проверки статуса API",138 "Bypass API status check": "Обход проверки статуса API",
139 "Example: 127.0.0.1:5000": "Пример: http://127.0.0.1:5000",139 "Example: 127.0.0.1:5000": "Пример: http://127.0.0.1:5000",
140 "Legacy API (pre-OAI, no streaming)": "Устаревший API (до OAI, без стриминга)",140 "Legacy API (pre-OAI, no streaming)": "Устаревший API (до OAI, без стриминга)",
@@ -173,7 +173,7 @@
173 "Include Names": "Добавлять имена",173 "Include Names": "Добавлять имена",
174 "Force for Groups and Personas": "Также для групп и персон",174 "Force for Groups and Personas": "Также для групп и персон",
175 "System Prompt": "Системный промпт",175 "System Prompt": "Системный промпт",
176 "Instruct Mode Sequences": "Строки для Instruct-режима",176 "Instruct Sequences": "Строки для Instruct-режима",
177 "Stop Sequence": "Стоп-строка",177 "Stop Sequence": "Стоп-строка",
178 "Context Formatting": "Форматирование контекста",178 "Context Formatting": "Форматирование контекста",
179 "(Saved to Context Template)": "(Сохраняется в шаблоне контекста)",179 "(Saved to Context Template)": "(Сохраняется в шаблоне контекста)",
@@ -451,8 +451,8 @@
451 "Creator's Notes": "Заметки создателя",451 "Creator's Notes": "Заметки создателя",
452 "A-Z": "A-Z",452 "A-Z": "A-Z",
453 "Z-A": "Z-A",453 "Z-A": "Z-A",
454 "Newest": "Новейшие",454 "Newest": "Сначала новые",
455 "Oldest": "Старейшие",455 "Oldest": "Сначала старые",
456 "Favorites": "Избранные",456 "Favorites": "Избранные",
457 "Recent": "Последние",457 "Recent": "Последние",
458 "Most chats": "Больше всего чатов",458 "Most chats": "Больше всего чатов",
@@ -561,10 +561,10 @@
561 "Example: [{{user}} is a 28-year-old Romanian cat girl.]": "Пример:\n [{{user}} is a 28-year-old Romanian cat girl.]",561 "Example: [{{user}} is a 28-year-old Romanian cat girl.]": "Пример:\n [{{user}} is a 28-year-old Romanian cat girl.]",
562 "Toggle grid view": "Переключить вид сетки",562 "Toggle grid view": "Переключить вид сетки",
563 "Add to Favorites": "Добавить в Избранное",563 "Add to Favorites": "Добавить в Избранное",
564 "Advanced Definition": "Расширенное определение",564 "Advanced Definition": "Расширенное описание",
565 "Character Lore": "Лор персонажа",565 "Character Lore": "Лор персонажа",
566 "Export and Download": "Экспортировать и скачать",566 "Export and Download": "Экспортировать и скачать",
567 "Duplicate Character": "Дублировать персонажа",567 "Duplicate Character": "Клонировать персонажа",
568 "Create Character": "Создать персонажа",568 "Create Character": "Создать персонажа",
569 "Delete Character": "Удалить персонажа",569 "Delete Character": "Удалить персонажа",
570 "View all tags": "Показать все тэги",570 "View all tags": "Показать все тэги",
@@ -732,19 +732,17 @@
732 "Context Size": "По размеру контекста",732 "Context Size": "По размеру контекста",
733 "Group by vendors": "Сгруппировать по владельцу",733 "Group by vendors": "Сгруппировать по владельцу",
734 "Group by vendors Description": "Модели от OpenAI попадут в одну группу, от Anthropic - в другую, и т.д. Можно комбинировать с сортировкой.",734 "Group by vendors Description": "Модели от OpenAI попадут в одну группу, от Anthropic - в другую, и т.д. Можно комбинировать с сортировкой.",
735 "LEGACY": "УСТАР.",
736 "Force Instruct Mode formatting": "Включить форматирование для Instruct-режима",
737 "Allow Jailbreak": "Разрешить джейлбрейк",735 "Allow Jailbreak": "Разрешить джейлбрейк",
738 "System Prompt Wrapping": "Обрамление для системного промпта",736 "System Prompt Wrapping": "Обрамление для системного промпта",
739 "System Prompt Prefix": "Префикс системного промпта",737 "System Prompt Prefix": "Префикс системного промпта",
740 "System Prompt Suffix": "Постфикс системного промпта",738 "System Prompt Suffix": "Постфикс системного промпта",
741 "Chat Messages Wrapping": "Обрамление для сообщений в чате",739 "Chat Messages Wrapping": "Обрамление для сообщений в чате",
742 "User Message Prefix": "Префикс сообщения пользователя",740 "User Prefix": "Префикс сообщения пользователя",
743 "User Message Suffix": "Постфикс сообщения пользователя",741 "User Suffix": "Постфикс сообщения пользователя",
744 "Assistant Message Prefix": "Префикс сообщения ассистента",742 "Assistant Prefix": "Префикс сообщения ассистента",
745 "Assistant Message Suffix": "Постфикс сообщения ассистента",743 "Assistant Suffix": "Постфикс сообщения ассистента",
746 "System Message Prefix": "Префикс сообщения системы",744 "System Prefix": "Префикс сообщения системы",
747 "System Message Suffix": "Постфикс сообщения системы",745 "System Suffix": "Постфикс сообщения системы",
748 "System same as User": "Для системы то же самое, что и для пользователя",746 "System same as User": "Для системы то же самое, что и для пользователя",
749 "Misc. Sequences": "Прочие строки",747 "Misc. Sequences": "Прочие строки",
750 "First Assistant Prefix": "Первый префикс ассистента",748 "First Assistant Prefix": "Первый префикс ассистента",
@@ -774,7 +772,6 @@
774 "Type a message, or /? for help": "Введите сообщение, или /? для получения справки",772 "Type a message, or /? for help": "Введите сообщение, или /? для получения справки",
775 "Welcome to SillyTavern!": "Добро пожаловать в SillyTavern!",773 "Welcome to SillyTavern!": "Добро пожаловать в SillyTavern!",
776 "Won't be shared with the character card on export.": "Не попадут в карточку персонажа при экспорте.",774 "Won't be shared with the character card on export.": "Не попадут в карточку персонажа при экспорте.",
777 "Web-search": "Веб-поиск",
778 "Persona Name:": "Имя персоны:",775 "Persona Name:": "Имя персоны:",
779 "User first message": "Первое сообщение пользователя",776 "User first message": "Первое сообщение пользователя",
780 "extension_token_counter": "Токенов:",777 "extension_token_counter": "Токенов:",
@@ -1202,8 +1199,6 @@
1202 "Streaming_desc": "Выводить текст последовательно по мере его генерации.\rЕсли параметр выключен, ответы будут отображаться сразу целиком, и только после полного завершения генерации.",1199 "Streaming_desc": "Выводить текст последовательно по мере его генерации.\rЕсли параметр выключен, ответы будут отображаться сразу целиком, и только после полного завершения генерации.",
1203 "Max prompt cost:": "Max prompt cost:",1200 "Max prompt cost:": "Max prompt cost:",
1204 "TFS": "TFS",1201 "TFS": "TFS",
1205 "Enable Cohere web-search connector": "Enable Cohere web-search connector",
1206 "Allow the model to use the web-search connector.": "Allow the model to use the web-search connector.",
1207 "Count Penalty": "Count Penalty",1202 "Count Penalty": "Count Penalty",
1208 "Min P": "Min P",1203 "Min P": "Min P",
1209 "NSFW": "NSFW",1204 "NSFW": "NSFW",
@@ -1270,8 +1265,6 @@
1270 "vLLM Model": "Модель vLLM",1265 "vLLM Model": "Модель vLLM",
1271 "Aphrodite Model": "Модель Aphrodite",1266 "Aphrodite Model": "Модель Aphrodite",
1272 "Peek a password": "Посмотреть пароль",1267 "Peek a password": "Посмотреть пароль",
1273 "openrouter_force_instruct": "This option is outdated and will be removed in the future. To use instruct formatting, please switch to OpenRouter under Text Completion API instead.",
1274 "Force_Instruct_Mode_formatting_Description": "If both Instruct Mode and this are enabled, the prompt will be formatted by SillyTavern using the current\n advanced formatting settings (except instruct System Prompt). If disabled, the prompt will be formatted by OpenRouter.",
1275 "Clear your cookie": "Clear your cookie",1268 "Clear your cookie": "Clear your cookie",
1276 "Add Chat Start and Example Separator to a list of stopping strings.": "Использовать Начало чата и Разделитель примеров сообщений в качестве стоп-строк.",1269 "Add Chat Start and Example Separator to a list of stopping strings.": "Использовать Начало чата и Разделитель примеров сообщений в качестве стоп-строк.",
1277 "context_allow_jailbreak": "Если в карточке есть джейлбрейк И ПРИ ЭТОМ включена опция \"Приоритет джейлбрейку из карточки персонажа\", то этот джейлбрейк добавляется в конец промпта.\nНЕ РЕКОМЕНДУЕТСЯ ДЛЯ МОДЕЛЕЙ TEXT COMPLETION, МОЖЕТ ПОРТИТЬ ВЫХОДНОЙ ТЕКСТ.",1270 "context_allow_jailbreak": "Если в карточке есть джейлбрейк И ПРИ ЭТОМ включена опция \"Приоритет джейлбрейку из карточки персонажа\", то этот джейлбрейк добавляется в конец промпта.\nНЕ РЕКОМЕНДУЕТСЯ ДЛЯ МОДЕЛЕЙ TEXT COMPLETION, МОЖЕТ ПОРТИТЬ ВЫХОДНОЙ ТЕКСТ.",
@@ -1694,7 +1687,7 @@
1694 "Delete Message": "Удалить сообщение",1687 "Delete Message": "Удалить сообщение",
1695 "Delete Swipe": "Удалить свайп",1688 "Delete Swipe": "Удалить свайп",
1696 "Could not get a reply from API. Check your connection settings / API key and try again.": "Не удалось получить ответ от API. Проверьте настройки соединения и API-ключ и повторите попытку.",1689 "Could not get a reply from API. Check your connection settings / API key and try again.": "Не удалось получить ответ от API. Проверьте настройки соединения и API-ключ и повторите попытку.",
1697 "Connecting To Proxy": "Подключение к прокси",1690 "Connecting To Proxy": "Подключиться к прокси",
1698 "Are you sure you want to connect to the following proxy URL?": "Вы точно хотите соединиться с прокси по этому адресу?",1691 "Are you sure you want to connect to the following proxy URL?": "Вы точно хотите соединиться с прокси по этому адресу?",
1699 "API connection successful!": "Соединение с API установлено!",1692 "API connection successful!": "Соединение с API установлено!",
1700 "Proxy Saved": "Прокси сохранена",1693 "Proxy Saved": "Прокси сохранена",
@@ -1708,5 +1701,260 @@
1708 "chat_rename_1": "Введите новое имя чата:",1701 "chat_rename_1": "Введите новое имя чата:",
1709 "chat_rename_2": "!!Не используйте имя уже существующего файла, это приведёт к ошибке!!",1702 "chat_rename_2": "!!Не используйте имя уже существующего файла, это приведёт к ошибке!!",
1710 "chat_rename_3": "Будут разрушены связи между чатами-чекпоинтами.",1703 "chat_rename_3": "Будут разрушены связи между чатами-чекпоинтами.",
1711 "chat_rename_4": "Расширение '.jsonl' дописывать не нужно."1704 "chat_rename_4": "Расширение '.jsonl' дописывать не нужно.",
1705 "If you're connected to an API, try asking me something!": "Есть соединение с API? Напишите мне что-нибудь!",
1706 "Connection Profile": "Профиль соединения",
1707 "View connection profile details": "Посмотреть параметры профиля соединения",
1708 "Create a new connection profile": "Создать новый профиль соединения",
1709 "Update a connection profile": "Обновить профиль соединения",
1710 "Rename a connection profile": "Переименовать профиль соединения",
1711 "Reload a connection profile": "Перезагрузить профиль соединения",
1712 "Delete a connection profile": "Удалить профиль соединения",
1713 "No profile selected": "Профиль не выбран",
1714 "Creating a Connection Profile": "Создать профиль соединения",
1715 "Settings Preset": "Пресет настроек",
1716 "Model": "Модель",
1717 "Proxy Preset": "Пресет для прокси",
1718 "Enter a name:": "Введите название:",
1719 "Are you sure you want to delete the selected profile?": "Вы точно хотите удалить выбранный профиль?",
1720 "instruct_enabled": "Вкл/выкл Instruct-режим",
1721 "Instruct Template": "Шаблон Instruct-режима",
1722 "instruct_template_activation_regex_desc": "Автоматически активировать этот шаблон в момент подключения к API или выбора модели, если название модели соответствует этому рег. выражению.",
1723 "instruct_bind_to_context": "При включении этой опции Шаблон контекста будет выбираться, исходя из выбранного в текущий момент Шаблона Instruct-режима, либо по вашему желанию.",
1724 "Master Import": "Глоб. импорт",
1725 "Import Advanced Formatting settings": "Импорт настроек Расширенного форматирования\nТакже принимает файлы старого формата с Шаблонами контекста и Шаблонами Instruct-режима.",
1726 "Master Export": "Глоб. экспорт",
1727 "Export Advanced Formatting settings": "Экспорт настроек Расширенного форматирования",
1728 "Select your current System Prompt": "Выберите текущий системный промпт",
1729 "Prompt Content": "Текст промпта",
1730 "Update current prompt": "Сохранить промпт",
1731 "Save prompt as": "Сохранить как...",
1732 "Import template": "Импорт шаблона",
1733 "Export template": "Экспорт шаблона",
1734 "Restore current prompt": "Восстановить промпт",
1735 "comma delimited,no spaces between": "через запятую,без пробелов в промежутках",
1736 "User Message Sequences": "Строки для сообщений пользователя",
1737 "Assistant Message Sequences": "Строки для сообщений ассистента",
1738 "System Message Sequences": "Строки для сообщений системы",
1739 "System Prompt Sequences": "Строки для системного промпта",
1740 "sysprompt_enabled": "Вкл/выкл системный промпт",
1741 "Are you sure you want to delete this alternate greeting?": "Вы точно хотите удалить этот вариант?",
1742 "Any contents here will replace the default Post-History Instructions used for this character. (v2 spec: post_history_instructions)": "Содержимое этого поля заменит стандартные Инструкции после истории, применяемые для этого персонажа. (v2 spec: post_history_instructions)",
1743 "None (disabled)": "Нигде (откл.)",
1744 "Markdown Hotkeys": "Горячие клавиши для разметки",
1745 "markdown_hotkeys_desc": "Включить горячие клавиши для вставки символов разметки в некоторых полях ввода. См. '/help hotkeys'.",
1746 "Save and Update": "Сохранить и обновить",
1747 "Profile name:": "Название профиля:",
1748 "API returned an error": "API вернуло ошибку",
1749 "Failed to save preset": "Не удалось сохранить пресет",
1750 "Preset name should be unique.": "Название пресета должно быть уникальным.",
1751 "Invalid file": "Невалидный файл",
1752 "No preset selected": "Пресет не выбран",
1753 "Invalid logit bias preset file.": "Файл пресета невалиден.",
1754 "Preset was not deleted from server": "Пресет не удалён с сервера",
1755 "Preset deleted": "Пресет удалён",
1756 "Delete the preset?": "Удалить пресет?",
1757 "Preset updated": "Пресет сохранён",
1758 "Entered reverse proxy address is not a valid URL": "Введённый адрес прокси невалиден",
1759 "An error occurred while counting tokens: Token budget exceeded.": "Ошибка при подсчёте токенов: Превышен бюджет токенов",
1760 "An error occurred while counting tokens: Invalid character name": "Ошибка при подсчёте токенов: Невалидное имя персонажа",
1761 "Not enough free tokens for mandatory prompts. Raise your token Limit or disable custom prompts.": "Недостаточно токенов для всех выбранных промптов. Повысьте лимит токенов или отключите часть промптов.",
1762 "The name of at least one character contained whitespaces or special characters. Please check your user and character name.": "В имени одного из персонажей содержится пробел или иной спецсимвол. Проверьте имена пользователя и персонажа.",
1763 "An unknown error occurred while counting tokens. Further information may be available in console.": "Неизвестная ошибка при подсчёте токенов. Проверьте консоль, возможно, подробная информация есть там.",
1764 "Encountered an error while processing your request.": "При обработке вашего запроса возникла ошибка.",
1765 "Check you have credits available on your": "Убедитесь, что на вашем",
1766 "OpenAI account quora_error": "аккаунте OpenAI",
1767 "dot quota_error": "имеется достаточно кредитов.",
1768 "If you have sufficient credits, please try again later.": "Если кредитов достаточно, то повторите попытку позднее.",
1769 "Proxy preset '${0}' not found": "Пресет '${0}' не найден",
1770 "Window.ai returned an error": "Window.ai вернул ошибку",
1771 "Get it here:": "Загрузите здесь:",
1772 "Extension is not installed": "Расширение не установлено",
1773 "Update or remove your reverse proxy settings.": "Измените или удалите ваши настройки прокси.",
1774 "An error occurred while importing prompts. More info available in console.": "В процессе импорта произошла ошибка. Подробную информацию см. в консоли.",
1775 "Could not import prompts. Export failed validation.": "Не удалось импортировать промпты. Не пройдена валидация при экспорте.",
1776 "Prompt import complete.": "Импорт завершён.",
1777 "Are you sure you want to delete this prompt?": "Вы точно хотите удалить этот промпт?",
1778 "Existing prompts with the same ID will be overridden. Do you want to proceed?": "Имеющиеся промпты с совпадающими идентификаторами будут перезаписаны. Продолжить?",
1779 "This will reset the prompt order for this character. You will not lose any prompts.": "Будет сброшен порядок промптов для этого персонажа. Сами промпты вы не потеряете.",
1780 "Note:": "Примечание:",
1781 "this chat is temporary and will be deleted as soon as you leave it.": "это временный чат, он будет удалён, как только вы из него выйдете.",
1782 "help_hotkeys_20": "Горячие клавиши для разметки",
1783 "help_hotkeys_21": "Работают в окне ввода чата, а также в полях, отмеченных этим значком:",
1784 "help_hotkeys_22": "**полужирный**",
1785 "help_hotkeys_23": "*курсив*",
1786 "help_hotkeys_24": "__подчёркивание__",
1787 "help_hotkeys_25": "`inline-код`",
1788 "help_hotkeys_26": "~~зачёркнутый~~",
1789 "ext_regex_only_format_visual_desc": "Содержимое файла с историей чата останется нетронутым, изменения будут лишь визуальными (в UI).",
1790 "Could not convert file": "Не удалось сконвертировать файл",
1791 "Could not upload file": "Не удалось загрузить файл",
1792 "Could not download file": "Не удалось скачать файл",
1793 "File is too big. Maximum size is ${0}.": "Слишком большой файл. Максимальный размер: ${0}.",
1794 "Binary files are not supported. Select a text file or image.": "Бинарные файлы не поддерживаются. Выберите текстовый файл или изображение.",
1795 "No character or group selected": "Не выбрано ни одного персонажа или группы",
1796 "Could not delete file": "Не удалось удалить файл",
1797 "No attachments selected.": "Вложение не выбрано.",
1798 "Data Bank": "Банк данных",
1799 "No files were scraped.": "Скрапинг не выполнен.",
1800 "Scraped ${0} files from ${1} to ${2}.": "Соскраплено из ${0} файлов из ${1} в ${2}.",
1801 "Check browser console for details.": "Подробности см. в консоли браузера.",
1802 "Scraping failed": "Ошибка скрапинга",
1803 "External media has been blocked": "Внешние медиа отключены",
1804 "Use the 'Ext. Media' button to allow it. Click on this message to dismiss.": "Разрешить можно с помощью кнопки 'Внешн. медиа'. Нажмите на это сообщение, чтобы его скрыть.",
1805 "Couldn't get CSRF token. Please refresh the page.": "Не удалось получить CSRF токен. Попробуйте перезагрузить страницу.",
1806 "Error": "Ошибка",
1807 "API Error": "Ошибка API",
1808 "Please wait until the chat is saved before switching characters.": "Пожалуйста, дождитесь сохранения чата, прежде чем переключать персонажа.",
1809 "Your chat is still saving...": "Чат всё ещё сохраняется...",
1810 "Character ${0} not found in the list": "Персонаж ${0} не найден в списке",
1811 "Streaming is enabled, but the version of Kobold used does not support token streaming.": "Включён стриминг текста, но ваша версия Kobold не поддерживает стриминг токенов.",
1812 "Streaming is not supported for the Legacy API. Update Ooba and use new API to enable streaming.": "Для устаревшего API стриминг недоступен. Обновите oobaboga и используйте новый API, чтобы включить стриминг.",
1813 "Verify that the server is running and accessible.": "Убедитесь, что сервер запущен и доступен по сети.",
1814 "ST Server cannot be reached": "Не удалось соединиться с сервером ST",
1815 "You must first select a character to duplicate!": "Вы не выбрали персонажа, которого хотите клонировать!",
1816 "Character Duplicated": "Персонаж склонирован",
1817 "No character name provided.": "Вы не ввели имя персонажа.",
1818 "Rename Character": "Переименование",
1819 "No character selected.": "Вы не выбрали персонажа.",
1820 "New name:": "Новое имя:",
1821 "Same character name provided, so name did not change.": "Введено то же самое имя, ничего не изменилось.",
1822 "Character renamed and past chats updated!": "Персонаж переименован, а чаты обновлены!",
1823 "Character renamed!": "Персонаж переименован!",
1824 "Something went wrong. The page will be reloaded.": "Что-то пошло не так. Страница будет перезагружена.",
1825 "Past chat could not be updated: ${0}": "Не удалось обновить чат ${0}",
1826 "Trying to save group chat with regular saveChat function. Aborting to prevent corruption.": "Произошла попытка сохранения группового чата функцией saveChat. Откатываем изменения, чтобы предотвратить потерю данных.",
1827 "Check the server connection and reload the page to prevent data loss.": "Проверьте связь с сервером и перезагрузите страницу, чтобы избежать потери данных.",
1828 "Chat could not be saved": "Не удалось сохранить чат",
1829 "Settings could not be loaded after multiple attempts. Please try again later.": "Не удалось загрузить настройки за несколько попыток. Попробуйте позднее.",
1830 "Settings could not be saved": "Не удалось сохранить настройки",
1831 "Could not load chat data. Try reloading the page.": "Не удалось загрузить чат. Попробуйте обновить страницу.",
1832 "Invalid process (no 'type')": "Невалидный процесс (нет параметра 'type')",
1833 "Character Deleted: ${0}": "Персонаж удалён: ${0}",
1834 "Character Created: ${0}": "Персонаж создан: ${0}",
1835 "Group Created": "Группа создана",
1836 "Group Deleted": "Группа удалена",
1837 "Character Imported: ${0}": "Персонаж импортирован: ${0}",
1838 "Invalid swipe ID: ${0}": "Некорректный идентификатор свайпа: ${0}",
1839 "No messages to delete swipes from.": "Сообщение, из которого требуется удалить свайп, не найдено.",
1840 "Can't delete the last swipe.": "Невозможно удалить единственный свайп.",
1841 "GUI Settings preset is not supported for Horde. Please select another preset.": "Для Horde не поддерживаются пресеты настроек GUI. Пожалуйста, выберите другой пресет.",
1842 "Embedded lorebook will be removed from this character.": "Встроенный лорбук будет удалён из персонажа.",
1843 "Name is required": "Введите имя",
1844 "Cannot create characters while generating. Stop the request and try again.": "Во время генерации ответа создать персонажа невозможно. Остановите запрос и повторите попытку.",
1845 "Creation aborted": "Процесс создания прерван",
1846 "Failed to create character": "Не удалось создать персонажа",
1847 "Something went wrong while saving the character, or the image file provided was in an invalid format. Double check that the image is not a webp.": "Что-то пошло не так в процессе сохранения персонажа, либо вы загрузили файл некорректного формата. Проверьте, что изображение точно не в формате webp.",
1848 "Context template '${0}' not found": "Шаблон контекста '${0}' не найден",
1849 "Instruct template '${0}' not found": "Шаблон Instruct-режима '${0}' не найден",
1850 "Error: ${0} is not a valid API": "Ошибка: ${0} не является валидным API",
1851 "API set to ${0}, trying to connect..": "Установлено API ${0}, пробуем подключиться...",
1852 "Unsupported file type: ": "Неподдерживаемый тип файла: ",
1853 "Cannot import characters while generating. Stop the request and try again.": "Во время генерации ответа импорт персонажа невозможен. Остановите запрос и повторите попытку.",
1854 "Import aborted": "Процесс импорта прерван",
1855 "The file is likely invalid or corrupted.": "Вероятно, файл невалиден или повреждён.",
1856 "Could not import character": "Не удалось импортировать персонажа",
1857 "Cannot run /impersonate command while the reply is being generated.": "Во время генерации ответа выполнить /impersonate невозможно.",
1858 "Name must be provided as an argument to rename this chat.": "Для переименования чата необходимо предоставить новое имя в качестве аргумента.",
1859 "No chat selected that can be renamed.": "Чат, который требуется переименовать, не найден.",
1860 "Successfully renamed chat to: ${0}": "Чат успешно переименован в: ${0}",
1861 "Character ${0} not found. Skipping deletion.": "Персонаж ${0} не найден. Удаление пропускается.",
1862 "Failed to delete character": "При удалении персонажа произошло ошибка",
1863 "Are you sure you want to duplicate this character?": "Вы точно хотите клонировать этого персонажа?",
1864 "If you just want to start a new chat with the same character...": "Если вы хотите просто создать новый чат, воспользуйтесь кнопкой \"Начать новый чат\" в меню слева внизу.",
1865 "THIS IS PERMANENT!": "ОТМЕНИТЬ БУДЕТ НЕВОЗМОЖНО!",
1866 "Also delete the chat files": "Также удалить файлы чатов",
1867 "Delete the character?": "Удалить персонажа?",
1868 "Not a valid number": "Некорректное число",
1869 "Author's Note depth updated": "Глубина заметок автора обновлена",
1870 "Author's Note frequency updated": "Частота заметок автора обновлена",
1871 "Not a valid position": "Некорректная позиция",
1872 "Author's Note position updated": "Позиция заметок автора обновлена",
1873 "Something went wrong. Could not save character's author's note.": "Что-то пошло не так. Не удалось сохранить заметки автора для этого персонажа.",
1874 "Select a character before trying to use Author's Note": "Сначала необходимо выбрать персонажа",
1875 "Author's Note text updated": "Текст заметок автора обновлён",
1876 "Group Validation": "Валидация группы",
1877 "Warning: Listed member ${0} does not exist as a character. It will be removed from the group.": "Предупреждение: персонаж ${0} не существует в виде карточки. Он будет удалён из группы.",
1878 "Group Chat could not be saved": "Не удалось сохранить групповой чат",
1879 "Deleted group member swiped. To get a reply, add them back to the group.": "Вы пытаетесь свайпнуть удалённого члена группы. Чтобы получить ответ, добавьте этого персонажа обратно в группу.",
1880 "Currently no group selected.": "В данный момент не выбрано ни одной группы.",
1881 "Not so fast! Wait for the characters to stop typing before deleting the group.": "Чуть помедленнее! Перед удалением группы дождитесь, пока персонаж закончит печатать.",
1882 "Delete the group?": "Удалить группу?",
1883 "This will also delete all your chats with that group. If you want to delete a single conversation, select a \"View past chats\" option in the lower left menu.": "Вместе с ней будут удалены и все её чаты. Если требуется удалить только один чат, воспользуйтесь кнопкой \"Все чаты\" в меню в левом нижнем углу.",
1884 "Can't peek a character while group reply is being generated": "Невозможно открыть карточку персонажа во время генерации ответа",
1885 "Threshold": "Порог",
1886 "DRY Repetition Penalty": "DRY Штраф за повтор",
1887 "Multiplier": "Множитель",
1888 "DRY_Multiplier_desc": "Поставьте в положение > 0, чтобы включить DRY. Определяет величину штрафа для кратчайшей \"штрафуемой\" строки.",
1889 "DRY_Repetition_Penalty_desc": "DRY налагает штраф на токены, генерация которых приведёт к появлению строки, которая уже была в тексте раньше. Установите множитель = 0, чтобы отключить.",
1890 "Base": "Основание",
1891 "DRY_Base_desc": "Определяет, насколько быстро возрастает штраф с увеличением длины строки.",
1892 "Allowed Length": "Допустимая длина",
1893 "DRY_Allowed_Length_desc": "Длина повторяющейся строки, при превышении которой DRY начинает налагать штраф.",
1894 "Invalid data provided for master import": "Глоб. импорт не может быть выполнен по причине невалидности данных",
1895 "Importing instruct template...": "Импортируем...",
1896 "Instruct template detected": "Обнаружен шаблон Instruct-режима",
1897 "Importing as context template...": "Импортируем...",
1898 "Context template detected": "Обнаружен шаблон контекста",
1899 "Importing as system prompt...": "Импортируем...",
1900 "System prompt detected": "Обнаружен системный промпт",
1901 "Importing as settings preset...": "Импортируем...",
1902 "Text Completion settings detected": "Обнаружены настройки Text Completion",
1903 "No valid sections found in imported data": "Не найдено ни одной валидной секции данных",
1904 "No sections selected for import": "Не выбрано ни одной секции для импорта",
1905 "Import": "Импортировать",
1906 "Imported ${0} settings: ${1}": "Импортировано ${0} настроек: ${1}",
1907 "Export": "Экспортировать",
1908 "No sections selected for export": "Не выбрано ни одной секции для экспорта",
1909 "Cannot update GUI preset": "Пресет для GUI обновить невозможно",
1910 "Template updated": "Шаблон сохранён",
1911 "Hint: Use a character/group name to bind preset to a specific chat.": "Совет: введите имя персонажа/группы, чтобы привязать пресет к определённому чату.",
1912 "Preset name:": "Название пресета:",
1913 "Template name:": "Название шаблона:",
1914 "Preset saved": "Пресет сохранён",
1915 "Template saved": "Шаблон сохранён",
1916 "Preset could not be saved": "Не удалось сохранить пресет",
1917 "Preset could not be renamed": "Не удалось обновить пресет",
1918 "Preset renamed": "Пресет переименован",
1919 "Template renamed": "Шаблон переименован",
1920 "Cannot delete GUI preset": "Пресет для GUI удалить невозможно",
1921 "Failed to restore default preset": "Не удалось восстановить пресет по умолчанию",
1922 "Failed to restore default template": "Не удалось восстановить шаблон по умолчанию",
1923 "Rename preset": "Переименовать пресет",
1924 "Rename template": "Переименовать шаблон",
1925 "Enter a new name:": "Введите новое название:",
1926 "Preset imported": "Пресет импортирован",
1927 "Template imported": "Шаблон импортирован",
1928 "Delete this preset?": "Удалить этот пресет?",
1929 "Delete this template?": "Удалить этот шаблон?",
1930 "This action is irreversible and your current settings will be overwritten.": "Отменить это действие невозможно. Ваши текущие настройки будут перезаписаны.",
1931 "Preset deleted": "Пресет удалён",
1932 "Template deleted": "Шаблон удалён",
1933 "Template was not deleted from server": "Шаблон не удалён с сервера",
1934 "Cannot restore GUI preset": "Пресет для Gui восстановить нельзя",
1935 "Default preset cannot be restored": "Невозможно восстановить пресет по умолчанию",
1936 "Default template cannot be restored": "Невозможно восстановить шаблон по умолчанию",
1937 "Resetting a <b>default preset</b> will restore the default settings": "Сброс <b>стандартного пресета</b> восстановит настройки по умолчанию.",
1938 "Resetting a <b>default template</b> will restore the default settings.": "Сброс <b>стандартного шаблона</b> восстановит настройки по умолчанию.",
1939 "Are you sure?": "Вы уверены?",
1940 "Default preset restored": "Стандартный пресет восстановлен",
1941 "Default template restored": "Стандартный шаблон восстановлен",
1942 "Resetting a <b>custom preset</b> will restore to the last saved state.": "Сброс <b>пользовательского пресета</b> откатит его к последнему сохранённому состоянию.",
1943 "Resetting a <b>custom template</b> will restore to the last saved state.": "Сброс <b>пользовательского шаблона</b> откатит его к последнему сохранённому состоянию.",
1944 "Preset restored": "Пресет восстановлен",
1945 "Template restored": "Шаблон восстановлен",
1946 "Update current template": "Сохранить шаблон",
1947 "Rename current template": "Переименовать шаблон",
1948 "Save template as": "Сохранить как...",
1949 "Restore current template": "Восстановить шаблон",
1950 "Delete the template": "Удалить шаблон",
1951 "Rename current prompt": "Переименовать промпт",
1952 "Select your current Context Template": "Выберите активный шаблон контекста",
1953 "Select your current Instruct Template": "Выберите активный шаблон Instruct-режима",
1954 "and connect to an": "и подключитесь к",
1955 "You can add more": "Можете добавить больше",
1956 "from other websites": "с других сайтов.",
1957 "Go to the": "Загляните в",
1958 "to install additional features.": ", чтобы установить разные дополнительные ресурсы.",
1959 "or_welcome": "; также доступен"
1712}1960}
public/locales/uk-ua.json+0 -7
@@ -56,9 +56,6 @@
56 "Max Response Length (tokens)": "Довжина відповіді (токени)",56 "Max Response Length (tokens)": "Довжина відповіді (токени)",
57 "Multiple swipes per generation": "Кілька свайпів за покоління",57 "Multiple swipes per generation": "Кілька свайпів за покоління",
58 "Enable OpenAI completion streaming": "Увімкнути потокове завершення OpenAI",58 "Enable OpenAI completion streaming": "Увімкнути потокове завершення OpenAI",
59 "Enable Cohere web-search connector": "Увімкнути конектор веб-пошуку Cohere",
60 "Web-search": "Веб-пошук",
61 "Allow the model to use the web-search connector.": "Дозвольте моделі використовувати конектор веб-пошуку.",
62 "Frequency Penalty": "Штраф за частоту",59 "Frequency Penalty": "Штраф за частоту",
63 "Presence Penalty": "Штраф за наявність",60 "Presence Penalty": "Штраф за наявність",
64 "Count Penalty": "Рахувати пенальті",61 "Count Penalty": "Рахувати пенальті",
@@ -381,10 +378,6 @@
381 "Group by vendors Description": "Помістіть моделі OpenAI в одну групу, моделі Anthropic в іншу групу тощо. Можна поєднати з сортуванням.",378 "Group by vendors Description": "Помістіть моделі OpenAI в одну групу, моделі Anthropic в іншу групу тощо. Можна поєднати з сортуванням.",
382 "Allow fallback routes": "Дозволити резервні маршрути",379 "Allow fallback routes": "Дозволити резервні маршрути",
383 "Allow fallback routes Description": "Автоматично вибирає альтернативну модель, якщо вибрана модель не може задовольнити ваш запит.",380 "Allow fallback routes Description": "Автоматично вибирає альтернативну модель, якщо вибрана модель не може задовольнити ваш запит.",
384 "openrouter_force_instruct": "Цей параметр застарів і буде видалено в майбутньому. Щоб використовувати форматування інструкцій, перейдіть натомість до OpenRouter у розділі Text Completion API.",
385 "LEGACY": "СПАДОК",
386 "Force Instruct Mode formatting": "Примусове форматування в режимі вказівок",
387 "Force_Instruct_Mode_formatting_Description": "Якщо ввімкнути обидва режими Instruction і цей режим, підказка буде відформатована SillyTavern за допомогою поточного\n розширені параметри форматування (крім системного запиту). Якщо вимкнено, запит буде відформатовано OpenRouter.",
388 "Scale API Key": "Ключ API для Scale",381 "Scale API Key": "Ключ API для Scale",
389 "Clear your cookie": "Очистіть файл cookie",382 "Clear your cookie": "Очистіть файл cookie",
390 "Alt Method": "Альтернативний метод",383 "Alt Method": "Альтернативний метод",
public/locales/vi-vn.json+0 -7
@@ -56,9 +56,6 @@
56 "Max Response Length (tokens)": "Độ dài phản hồi tối đa (token)",56 "Max Response Length (tokens)": "Độ dài phản hồi tối đa (token)",
57 "Multiple swipes per generation": "Vuốt nhiều lần trong một lần tạo",57 "Multiple swipes per generation": "Vuốt nhiều lần trong một lần tạo",
58 "Enable OpenAI completion streaming": "Bật streaming của OpenAI",58 "Enable OpenAI completion streaming": "Bật streaming của OpenAI",
59 "Enable Cohere web-search connector": "Bật web tìm kiếm của Cohere",
60 "Web-search": "Tìm kiếm trên web",
61 "Allow the model to use the web-search connector.": "Cho phép model sử dụng trình kết nối tìm kiếm trên web.",
62 "Frequency Penalty": "Frequency Penalty",59 "Frequency Penalty": "Frequency Penalty",
63 "Presence Penalty": "Presence Penalty",60 "Presence Penalty": "Presence Penalty",
64 "Count Penalty": "Count Penalty",61 "Count Penalty": "Count Penalty",
@@ -381,10 +378,6 @@
381 "Group by vendors Description": "Xếp các mô hình OpenAI vào một nhóm, các mô hình Anthropic vào một nhóm khác, v.v. Có thể kết hợp với việc sắp xếp.",378 "Group by vendors Description": "Xếp các mô hình OpenAI vào một nhóm, các mô hình Anthropic vào một nhóm khác, v.v. Có thể kết hợp với việc sắp xếp.",
382 "Allow fallback routes": "Cho phép các tuyến đường phụ",379 "Allow fallback routes": "Cho phép các tuyến đường phụ",
383 "Allow fallback routes Description": "Bot thay thế tự động nếu mô hình được chọn không thể đáp ứng yêu cầu của bạn.",380 "Allow fallback routes Description": "Bot thay thế tự động nếu mô hình được chọn không thể đáp ứng yêu cầu của bạn.",
384 "openrouter_force_instruct": "Tùy chọn này đã lỗi thời và sẽ bị xóa trong tương lai. Để sử dụng định dạng hướng dẫn, vui lòng chuyển sang OpenRouter trong API hoàn thành văn bản.",
385 "LEGACY": "Cũ",
386 "Force Instruct Mode formatting": "Buộc định dạng Instruct Mode",
387 "Force_Instruct_Mode_formatting_Description": "Nếu cả Instruct Mode và chế độ này được bật, Prompt sẽ được SillyTavern định dạng bằng cách sử dụng\n cài đặt định dạng nâng cao (ngoại trừ hướng dẫn System Nhắc). Nếu bị tắt, Prompt sẽ được OpenRouter định dạng.",
388 "Scale API Key": "Scale API Key",381 "Scale API Key": "Scale API Key",
389 "Clear your cookie": "Xóa cookie",382 "Clear your cookie": "Xóa cookie",
390 "Alt Method": "Phương pháp thay thế",383 "Alt Method": "Phương pháp thay thế",
public/locales/zh-cn.json+0 -7
@@ -56,9 +56,6 @@
56 "Max Response Length (tokens)": "最大回复长度(以词符数计)",56 "Max Response Length (tokens)": "最大回复长度(以词符数计)",
57 "Multiple swipes per generation": "每次生成多个备选回复",57 "Multiple swipes per generation": "每次生成多个备选回复",
58 "Enable OpenAI completion streaming": "启用OpenAI文本补全流式传输",58 "Enable OpenAI completion streaming": "启用OpenAI文本补全流式传输",
59 "Enable Cohere web-search connector": "启用 Cohere 网络搜索连接器",
60 "Web-search": "联网搜索",
61 "Allow the model to use the web-search connector.": "允许模型使用联网搜索。",
62 "Frequency Penalty": "频率惩罚",59 "Frequency Penalty": "频率惩罚",
63 "Presence Penalty": "存在惩罚",60 "Presence Penalty": "存在惩罚",
64 "Count Penalty": "计数惩罚",61 "Count Penalty": "计数惩罚",
@@ -397,10 +394,6 @@
397 "Context Size": "上下文大小",394 "Context Size": "上下文大小",
398 "Group by vendors": "按供应商分组",395 "Group by vendors": "按供应商分组",
399 "Group by vendors Description": "将 OpenAI 模型放在一组,将 Anthropic 模型放在另一组,等等。可以与排序结合。",396 "Group by vendors Description": "将 OpenAI 模型放在一组,将 Anthropic 模型放在另一组,等等。可以与排序结合。",
400 "openrouter_force_instruct": "此选项已过时,将来会被删除。要使用指令格式,请改用文本完成 API 下的 OpenRouter。",
401 "LEGACY": "旧版",
402 "Force Instruct Mode formatting": "强制指令模式格式化",
403 "Force_Instruct_Mode_formatting_Description": "如果同时启用了“指示模式”和“系统提示词”,则 SillyTavern 将使用当前\n高级格式设置(指示系统提示词除外)对提示词进行格式化。如果禁用,则 OpenRouter 将对提示词进行格式化。",
404 "Scale API Key": "Scale API密钥",397 "Scale API Key": "Scale API密钥",
405 "Clear your cookie": "清除你的 Cookie",398 "Clear your cookie": "清除你的 Cookie",
406 "Alt Method": "备用方法",399 "Alt Method": "备用方法",
public/locales/zh-tw.json+0 -7
@@ -56,9 +56,6 @@
56 "Max Response Length (tokens)": "最大回應長度(符記數)",56 "Max Response Length (tokens)": "最大回應長度(符記數)",
57 "Multiple swipes per generation": "每次生成多次滑動",57 "Multiple swipes per generation": "每次生成多次滑動",
58 "Enable OpenAI completion streaming": "啟用 OpenAI 補充串流",58 "Enable OpenAI completion streaming": "啟用 OpenAI 補充串流",
59 "Enable Cohere web-search connector": "啟用 Cohere 網頁搜尋連接器",
60 "Web-search": "網頁搜尋",
61 "Allow the model to use the web-search connector.": "允許模型使用網頁搜尋連接器",
62 "Frequency Penalty": "頻率懲罰",59 "Frequency Penalty": "頻率懲罰",
63 "Presence Penalty": "存在懲罰",60 "Presence Penalty": "存在懲罰",
64 "Count Penalty": "計數懲罰",61 "Count Penalty": "計數懲罰",
@@ -382,10 +379,6 @@
382 "Group by vendors Description": "將 OpenAI 、 Anthropic 等等的模型放各自供應商的群組中。可以與排序功能結合使用。",379 "Group by vendors Description": "將 OpenAI 、 Anthropic 等等的模型放各自供應商的群組中。可以與排序功能結合使用。",
383 "Allow fallback routes": "允許備援路徑",380 "Allow fallback routes": "允許備援路徑",
384 "Allow fallback routes Description": "如果選擇的模型無法滿足要求,會自動選擇替代模型。",381 "Allow fallback routes Description": "如果選擇的模型無法滿足要求,會自動選擇替代模型。",
385 "openrouter_force_instruct": "這個選項已經過時,將來會被移除。如果要使用指令格式,請改在 Text Completion API 中選擇 OpenRouter。",
386 "LEGACY": "遺留",
387 "Force Instruct Mode formatting": "強制指示模式格式化",
388 "Force_Instruct_Mode_formatting_Description": "如果同時啟用「指令模式」和這個選項,\nSillyTavern 會根據目前的進階格式化設定(不包括指令系統提示)來格式化提示詞。\n如果停用這個選項,提示詞將由 OpenRouter 來進行格式化。",
389 "Scale API Key": "Scale API 金鑰",382 "Scale API Key": "Scale API 金鑰",
390 "Clear your cookie": "清除您的 Cookie",383 "Clear your cookie": "清除您的 Cookie",
391 "Alt Method": "替代方法",384 "Alt Method": "替代方法",
public/script.js+386 -192
@@ -83,6 +83,7 @@ import {
83 resetMovableStyles,83 resetMovableStyles,
84 forceCharacterEditorTokenize,84 forceCharacterEditorTokenize,
85 applyPowerUserSettings,85 applyPowerUserSettings,
86 switchSwipeNumAllMessages,
86} from './scripts/power-user.js';87} from './scripts/power-user.js';
8788
88import {89import {
@@ -96,7 +97,6 @@ import {
96 openai_messages_count,97 openai_messages_count,
97 chat_completion_sources,98 chat_completion_sources,
98 getChatCompletionModel,99 getChatCompletionModel,
99 isOpenRouterWithInstruct,
100 proxies,100 proxies,
101 loadProxyPresets,101 loadProxyPresets,
102 selected_proxy,102 selected_proxy,
@@ -159,7 +159,7 @@ import {
159} from './scripts/utils.js';159} from './scripts/utils.js';
160import { debounce_timeout } from './scripts/constants.js';160import { debounce_timeout } from './scripts/constants.js';
161161
162import { ModuleWorkerWrapper, doDailyExtensionUpdatesCheck, extension_settings, getContext, loadExtensionSettings, renderExtensionTemplate, renderExtensionTemplateAsync, runGenerationInterceptors, saveMetadataDebounced, writeExtensionField } from './scripts/extensions.js';162import { ModuleWorkerWrapper, doDailyExtensionUpdatesCheck, extension_settings, getContext, initExtensions, loadExtensionSettings, renderExtensionTemplate, renderExtensionTemplateAsync, runGenerationInterceptors, saveMetadataDebounced, writeExtensionField } from './scripts/extensions.js';
163import { COMMENT_NAME_DEFAULT, executeSlashCommands, executeSlashCommandsOnChatInput, executeSlashCommandsWithOptions, getSlashCommandsHelp, initDefaultSlashCommands, isExecutingCommandsFromChatInput, pauseScriptExecution, processChatSlashCommands, registerSlashCommand, stopScriptExecution } from './scripts/slash-commands.js';163import { COMMENT_NAME_DEFAULT, executeSlashCommands, executeSlashCommandsOnChatInput, executeSlashCommandsWithOptions, getSlashCommandsHelp, initDefaultSlashCommands, isExecutingCommandsFromChatInput, pauseScriptExecution, processChatSlashCommands, registerSlashCommand, stopScriptExecution } from './scripts/slash-commands.js';
164import {164import {
165 tag_map,165 tag_map,
@@ -231,7 +231,7 @@ import { MacrosParser, evaluateMacros, getLastMessageId } from './scripts/macros
231import { currentUser, setUserControls } from './scripts/user.js';231import { currentUser, setUserControls } from './scripts/user.js';
232import { POPUP_RESULT, POPUP_TYPE, Popup, callGenericPopup, fixToastrForDialogs } from './scripts/popup.js';232import { POPUP_RESULT, POPUP_TYPE, Popup, callGenericPopup, fixToastrForDialogs } from './scripts/popup.js';
233import { renderTemplate, renderTemplateAsync } from './scripts/templates.js';233import { renderTemplate, renderTemplateAsync } from './scripts/templates.js';
234import { ScraperManager } from './scripts/scrapers.js';234import { initScrapers, ScraperManager } from './scripts/scrapers.js';
235import { SlashCommandParser } from './scripts/slash-commands/SlashCommandParser.js';235import { SlashCommandParser } from './scripts/slash-commands/SlashCommandParser.js';
236import { SlashCommand } from './scripts/slash-commands/SlashCommand.js';236import { SlashCommand } from './scripts/slash-commands/SlashCommand.js';
237import { ARGUMENT_TYPE, SlashCommandArgument, SlashCommandNamedArgument } from './scripts/slash-commands/SlashCommandArgument.js';237import { ARGUMENT_TYPE, SlashCommandArgument, SlashCommandNamedArgument } from './scripts/slash-commands/SlashCommandArgument.js';
@@ -245,6 +245,8 @@ import { commonEnumProviders, enumIcons } from './scripts/slash-commands/SlashCo
245import { initInputMarkdown } from './scripts/input-md-formatting.js';245import { initInputMarkdown } from './scripts/input-md-formatting.js';
246import { AbortReason } from './scripts/util/AbortReason.js';246import { AbortReason } from './scripts/util/AbortReason.js';
247import { initSystemPrompts } from './scripts/sysprompt.js';247import { initSystemPrompts } from './scripts/sysprompt.js';
248import { registerExtensionSlashCommands as initExtensionSlashCommands } from './scripts/extensions-slashcommands.js';
249import { ToolManager } from './scripts/tool-calling.js';
248250
249//exporting functions and vars for mods251//exporting functions and vars for mods
250export {252export {
@@ -292,10 +294,17 @@ DOMPurify.addHook('afterSanitizeAttributes', function (node) {
292 }294 }
293});295});
294296
295DOMPurify.addHook('uponSanitizeAttribute', (_, data, config) => {297DOMPurify.addHook('uponSanitizeAttribute', (node, data, config) => {
296 if (!config['MESSAGE_SANITIZE']) {298 if (!config['MESSAGE_SANITIZE']) {
297 return;299 return;
298 }300 }
301
302 /* Retain the classes on UI elements of messages that interact with the main UI */
303 const permittedNodeTypes = ['BUTTON', 'DIV'];
304 if (config['MESSAGE_ALLOW_SYSTEM_UI'] && node.classList.contains('menu_button') && permittedNodeTypes.includes(node.nodeName)) {
305 return;
306 }
307
299 switch (data.attrName) {308 switch (data.attrName) {
300 case 'class': {309 case 'class': {
301 if (data.attrValue) {310 if (data.attrValue) {
@@ -383,8 +392,8 @@ DOMPurify.addHook('uponSanitizeElement', (node, _, config) => {
383392
384 if (localStorage.getItem(warningShownKey) === null) {393 if (localStorage.getItem(warningShownKey) === null) {
385 const warningToast = toastr.warning(394 const warningToast = toastr.warning(
386 'Use the "Ext. Media" button to allow it. Click on this message to dismiss.',395 t`Use the 'Ext. Media' button to allow it. Click on this message to dismiss.`,
387 'External media has been blocked',396 t`External media has been blocked`,
388 {397 {
389 timeOut: 0,398 timeOut: 0,
390 preventDuplicates: true,399 preventDuplicates: true,
@@ -462,11 +471,11 @@ export const event_types = {
462 FILE_ATTACHMENT_DELETED: 'file_attachment_deleted',471 FILE_ATTACHMENT_DELETED: 'file_attachment_deleted',
463 WORLDINFO_FORCE_ACTIVATE: 'worldinfo_force_activate',472 WORLDINFO_FORCE_ACTIVATE: 'worldinfo_force_activate',
464 OPEN_CHARACTER_LIBRARY: 'open_character_library',473 OPEN_CHARACTER_LIBRARY: 'open_character_library',
465 LLM_FUNCTION_TOOL_REGISTER: 'llm_function_tool_register',
466 LLM_FUNCTION_TOOL_CALL: 'llm_function_tool_call',
467 ONLINE_STATUS_CHANGED: 'online_status_changed',474 ONLINE_STATUS_CHANGED: 'online_status_changed',
468 IMAGE_SWIPED: 'image_swiped',475 IMAGE_SWIPED: 'image_swiped',
469 CONNECTION_PROFILE_LOADED: 'connection_profile_loaded',476 CONNECTION_PROFILE_LOADED: 'connection_profile_loaded',
477 TOOL_CALLS_PERFORMED: 'tool_calls_performed',
478 TOOL_CALLS_RENDERED: 'tool_calls_rendered',
470};479};
471480
472export const eventSource = new EventEmitter();481export const eventSource = new EventEmitter();
@@ -649,6 +658,7 @@ async function getSystemMessages() {
649 force_avatar: system_avatar,658 force_avatar: system_avatar,
650 is_user: false,659 is_user: false,
651 is_system: true,660 is_system: true,
661 uses_system_ui: true,
652 mes: await renderTemplateAsync('welcome', { displayVersion }),662 mes: await renderTemplateAsync('welcome', { displayVersion }),
653 },663 },
654 group: {664 group: {
@@ -924,7 +934,7 @@ async function firstLoadInit() {
924 token = tokenData.token;934 token = tokenData.token;
925 } catch {935 } catch {
926 hideLoader();936 hideLoader();
927 toastr.error('Couldn\'t get CSRF token. Please refresh the page.', 'Error', { timeOut: 0, extendedTimeOut: 0, preventDuplicates: true });937 toastr.error(t`Couldn't get CSRF token. Please refresh the page.`, t`Error`, { timeOut: 0, extendedTimeOut: 0, preventDuplicates: true });
928 throw new Error('Initialization failed');938 throw new Error('Initialization failed');
929 }939 }
930940
@@ -936,6 +946,9 @@ async function firstLoadInit() {
936 initTextGenModels();946 initTextGenModels();
937 initOpenAI();947 initOpenAI();
938 initSystemPrompts();948 initSystemPrompts();
949 initExtensions();
950 initExtensionSlashCommands();
951 ToolManager.initToolSlashCommands();
939 await initPresetManager();952 await initPresetManager();
940 await getSystemMessages();953 await getSystemMessages();
941 sendSystemMessage(system_message_types.WELCOME);954 sendSystemMessage(system_message_types.WELCOME);
@@ -957,6 +970,7 @@ async function firstLoadInit() {
957 initCfg();970 initCfg();
958 initLogprobs();971 initLogprobs();
959 initInputMarkdown();972 initInputMarkdown();
973 await initScrapers();
960 doDailyExtensionUpdatesCheck();974 doDailyExtensionUpdatesCheck();
961 await hideLoader();975 await hideLoader();
962 await fixViewport();976 await fixViewport();
@@ -1137,7 +1151,7 @@ async function getStatusKobold() {
11371151
1138 // We didn't get a 200 status code, but the endpoint has an explanation. Which means it DID connect, but I digress.1152 // We didn't get a 200 status code, but the endpoint has an explanation. Which means it DID connect, but I digress.
1139 if (online_status === 'no_connection' && data.response) {1153 if (online_status === 'no_connection' && data.response) {
1140 toastr.error(data.response, 'API Error', { timeOut: 5000, preventDuplicates: true });1154 toastr.error(data.response, t`API Error`, { timeOut: 5000, preventDuplicates: true });
1141 }1155 }
1142 } catch (err) {1156 } catch (err) {
1143 console.error('Error getting status', err);1157 console.error('Error getting status', err);
@@ -1223,7 +1237,7 @@ async function getStatusTextgen() {
12231237
1224 // We didn't get a 200 status code, but the endpoint has an explanation. Which means it DID connect, but I digress.1238 // We didn't get a 200 status code, but the endpoint has an explanation. Which means it DID connect, but I digress.
1225 if (online_status === 'no_connection' && data.response) {1239 if (online_status === 'no_connection' && data.response) {
1226 toastr.error(data.response, 'API Error', { timeOut: 5000, preventDuplicates: true });1240 toastr.error(data.response, t`API Error`, { timeOut: 5000, preventDuplicates: true });
1227 }1241 }
1228 } catch (err) {1242 } catch (err) {
1229 if (err instanceof AbortReason) {1243 if (err instanceof AbortReason) {
@@ -1275,7 +1289,7 @@ export async function selectCharacterById(id) {
1275 }1289 }
12761290
1277 if (isChatSaving) {1291 if (isChatSaving) {
1278 toastr.info('Please wait until the chat is saved before switching characters.', 'Your chat is still saving...');1292 toastr.info(t`Please wait until the chat is saved before switching characters.`, t`Your chat is still saving...`);
1279 return;1293 return;
1280 }1294 }
12811295
@@ -1629,7 +1643,7 @@ export async function getOneCharacter(avatarUrl) {
1629 if (indexOf !== -1) {1643 if (indexOf !== -1) {
1630 characters[indexOf] = getData;1644 characters[indexOf] = getData;
1631 } else {1645 } else {
1632 toastr.error(`Character ${avatarUrl} not found in the list`, 'Error', { timeOut: 5000, preventDuplicates: true });1646 toastr.error(t`Character ${avatarUrl} not found in the list`, t`Error`, { timeOut: 5000, preventDuplicates: true });
1633 }1647 }
1634 }1648 }
1635}1649}
@@ -1881,6 +1895,7 @@ export async function reloadCurrentChat() {
1881export async function sendTextareaMessage() {1895export async function sendTextareaMessage() {
1882 if (is_send_press) return;1896 if (is_send_press) return;
1883 if (isExecutingCommandsFromChatInput) return;1897 if (isExecutingCommandsFromChatInput) return;
1898 if (this_edit_mes_id) return; // don't proceed if editing a message
18841899
1885 let generateType;1900 let generateType;
1886 // "Continue on send" is activated when the user hits "send" (or presses enter) on an empty chat box, and the last1901 // "Continue on send" is activated when the user hits "send" (or presses enter) on an empty chat box, and the last
@@ -1911,9 +1926,10 @@ export async function sendTextareaMessage() {
1911 * @param {boolean} isSystem If the message was sent by the system1926 * @param {boolean} isSystem If the message was sent by the system
1912 * @param {boolean} isUser If the message was sent by the user1927 * @param {boolean} isUser If the message was sent by the user
1913 * @param {number} messageId Message index in chat array1928 * @param {number} messageId Message index in chat array
1929 * @param {object} [sanitizerOverrides] DOMPurify sanitizer option overrides
1914 * @returns {string} HTML string1930 * @returns {string} HTML string
1915 */1931 */
1916export function messageFormatting(mes, ch_name, isSystem, isUser, messageId) {1932export function messageFormatting(mes, ch_name, isSystem, isUser, messageId, sanitizerOverrides = {}) {
1917 if (!mes) {1933 if (!mes) {
1918 return '';1934 return '';
1919 }1935 }
@@ -1988,15 +2004,33 @@ export function messageFormatting(mes, ch_name, isSystem, isUser, messageId) {
1988 });2004 });
1989 }2005 }
19902006
1991 mes = mes.replace(/```[\s\S]*?```|``[\s\S]*?``|`[\s\S]*?`|(".+?")|(\u201C.+?\u201D)/gm, function (match, p1, p2) {2007 mes = mes.replace(
2008 /```[\s\S]*?```|``[\s\S]*?``|`[\s\S]*?`|(".*?")|(\u201C.*?\u201D)|(\u00AB.*?\u00BB)|(\u300C.*?\u300D)|(\u300E.*?\u300F)|(\uFF02.*?\uFF02)/gm,
2009 function (match, p1, p2, p3, p4, p5, p6) {
1992 if (p1) {2010 if (p1) {
1993 return '<q>"' + p1.replace(/"/g, '') + '"</q>';2011 // English double quotes
2012 return `<q>"${p1.slice(1, -1)}"</q>`;
1994 } else if (p2) {2013 } else if (p2) {
1995 return '<q>“' + p2.replace(/\u201C|\u201D/g, '') + '”</q>';2014 // Curly double quotes “ ”
2015 return `<q>“${p2.slice(1, -1)}”</q>`;
2016 } else if (p3) {
2017 // Guillemets « »
2018 return `<q>«${p3.slice(1, -1)}»</q>`;
2019 } else if (p4) {
2020 // Corner brackets 「 」
2021 return `<q>「${p4.slice(1, -1)}」</q>`;
2022 } else if (p5) {
2023 // White corner brackets 『 』
2024 return `<q>『${p5.slice(1, -1)}』</q>`;
2025 } else if (p6) {
2026 // Fullwidth quotes " "
2027 return `<q>"${p6.slice(1, -1)}"</q>`;
1996 } else {2028 } else {
2029 // Return the original match if no quotes are found
1997 return match;2030 return match;
1998 }2031 }
1999 });2032 },
2033 );
20002034
2001 // Restore double quotes in tags2035 // Restore double quotes in tags
2002 if (!power_user.encode_tags) {2036 if (!power_user.encode_tags) {
@@ -2024,7 +2058,7 @@ export function messageFormatting(mes, ch_name, isSystem, isUser, messageId) {
2024 }2058 }
20252059
2026 /** @type {any} */2060 /** @type {any} */
2027 const config = { MESSAGE_SANITIZE: true, ADD_TAGS: ['custom-style'] };2061 const config = { MESSAGE_SANITIZE: true, ADD_TAGS: ['custom-style'], ...sanitizerOverrides };
2028 mes = encodeStyleTags(mes);2062 mes = encodeStyleTags(mes);
2029 mes = DOMPurify.sanitize(mes, config);2063 mes = DOMPurify.sanitize(mes, config);
2030 mes = decodeStyleTags(mes);2064 mes = decodeStyleTags(mes);
@@ -2229,6 +2263,18 @@ export function addCopyToCodeBlocks(messageElement) {
2229}2263}
22302264
22312265
2266/**
2267 * Adds a single message to the chat.
2268 * @param {object} mes Message object
2269 * @param {object} [options] Options
2270 * @param {string} [options.type='normal'] Message type
2271 * @param {number} [options.insertAfter=null] Message ID to insert the new message after
2272 * @param {boolean} [options.scroll=true] Whether to scroll to the new message
2273 * @param {number} [options.insertBefore=null] Message ID to insert the new message before
2274 * @param {number} [options.forceId=null] Force the message ID
2275 * @param {boolean} [options.showSwipes=true] Whether to show swipe buttons
2276 * @returns {void}
2277 */
2232export function addOneMessage(mes, { type = 'normal', insertAfter = null, scroll = true, insertBefore = null, forceId = null, showSwipes = true } = {}) {2278export function addOneMessage(mes, { type = 'normal', insertAfter = null, scroll = true, insertBefore = null, forceId = null, showSwipes = true } = {}) {
2233 let messageText = mes['mes'];2279 let messageText = mes['mes'];
2234 const momentDate = timestampToMoment(mes.send_date);2280 const momentDate = timestampToMoment(mes.send_date);
@@ -2257,7 +2303,7 @@ export function addOneMessage(mes, { type = 'normal', insertAfter = null, scroll
2257 } else if (this_chid === undefined) {2303 } else if (this_chid === undefined) {
2258 avatarImg = system_avatar;2304 avatarImg = system_avatar;
2259 } else {2305 } else {
2260 if (characters[this_chid].avatar != 'none') {2306 if (characters[this_chid].avatar !== 'none') {
2261 avatarImg = getThumbnailUrl('avatar', characters[this_chid].avatar);2307 avatarImg = getThumbnailUrl('avatar', characters[this_chid].avatar);
2262 } else {2308 } else {
2263 avatarImg = default_avatar;2309 avatarImg = default_avatar;
@@ -2272,12 +2318,16 @@ export function addOneMessage(mes, { type = 'normal', insertAfter = null, scroll
2272 avatarImg = mes['force_avatar'];2318 avatarImg = mes['force_avatar'];
2273 }2319 }
22742320
2321 // if mes.uses_system_ui is true, set an override on the sanitizer options
2322 const sanitizerOverrides = mes.uses_system_ui ? { MESSAGE_ALLOW_SYSTEM_UI: true } : {};
2323
2275 messageText = messageFormatting(2324 messageText = messageFormatting(
2276 messageText,2325 messageText,
2277 mes.name,2326 mes.name,
2278 isSystem,2327 isSystem,
2279 mes.is_user,2328 mes.is_user,
2280 chat.indexOf(mes),2329 chat.indexOf(mes),
2330 sanitizerOverrides,
2281 );2331 );
2282 const bias = messageFormatting(mes.extra?.bias ?? '', '', false, false, -1);2332 const bias = messageFormatting(mes.extra?.bias ?? '', '', false, false, -1);
2283 let bookmarkLink = mes?.extra?.bookmark_link ?? '';2333 let bookmarkLink = mes?.extra?.bookmark_link ?? '';
@@ -2324,8 +2374,12 @@ export function addOneMessage(mes, { type = 'normal', insertAfter = null, scroll
2324 newMessage.addClass('smallSysMes');2374 newMessage.addClass('smallSysMes');
2325 }2375 }
23262376
2377 if (Array.isArray(mes?.extra?.tool_invocations)) {
2378 newMessage.addClass('toolCall');
2379 }
2380
2327 //shows or hides the Prompt display button2381 //shows or hides the Prompt display button
2328 let mesIdToFind = type == 'swipe' ? params.mesId - 1 : params.mesId; //Number(newMessage.attr('mesId'));2382 let mesIdToFind = type === 'swipe' ? params.mesId - 1 : params.mesId; //Number(newMessage.attr('mesId'));
23292383
2330 //if we have itemized messages, and the array isn't null..2384 //if we have itemized messages, and the array isn't null..
2331 if (params.isUser === false && Array.isArray(itemizedPrompts) && itemizedPrompts.length > 0) {2385 if (params.isUser === false && Array.isArray(itemizedPrompts) && itemizedPrompts.length > 0) {
@@ -2366,6 +2420,13 @@ export function addOneMessage(mes, { type = 'normal', insertAfter = null, scroll
23662420
2367 addCopyToCodeBlocks(newMessage);2421 addCopyToCodeBlocks(newMessage);
23682422
2423 // Set the swipes counter for past messages, only visible if 'Show Swipes on All Message' is enabled
2424 if (!params.isUser && newMessageId !== 0 && newMessageId !== chat.length - 1) {
2425 const swipesNum = chat[newMessageId].swipes?.length;
2426 const swipeId = chat[newMessageId].swipe_id + 1;
2427 newMessage.find('.swipes-counter').text(formatSwipeCounter(swipeId, swipesNum));
2428 }
2429
2369 if (showSwipes) {2430 if (showSwipes) {
2370 $('#chat .mes').last().addClass('last_mes');2431 $('#chat .mes').last().addClass('last_mes');
2371 $('#chat .mes').eq(-2).removeClass('last_mes');2432 $('#chat .mes').eq(-2).removeClass('last_mes');
@@ -2574,7 +2635,7 @@ export function getStoppingStrings(isImpersonate, isContinue) {
2574 result.unshift('\n');2635 result.unshift('\n');
2575 }2636 }
25762637
2577 return result.filter(onlyUnique);2638 return result.filter(x => x).filter(onlyUnique);
2578}2639}
25792640
2580/**2641/**
@@ -2639,7 +2700,7 @@ export function sendSystemMessage(type, text, extra = {}) {
2639 newMessage.mes = text;2700 newMessage.mes = text;
2640 }2701 }
26412702
2642 if (type == system_message_types.SLASH_COMMANDS) {2703 if (type === system_message_types.SLASH_COMMANDS) {
2643 newMessage.mes = getSlashCommandsHelp();2704 newMessage.mes = getSlashCommandsHelp();
2644 }2705 }
26452706
@@ -2653,7 +2714,7 @@ export function sendSystemMessage(type, text, extra = {}) {
2653 chat.push(newMessage);2714 chat.push(newMessage);
2654 addOneMessage(newMessage);2715 addOneMessage(newMessage);
2655 is_send_press = false;2716 is_send_press = false;
2656 if (type == system_message_types.SLASH_COMMANDS) {2717 if (type === system_message_types.SLASH_COMMANDS) {
2657 const browser = new SlashCommandBrowser();2718 const browser = new SlashCommandBrowser();
2658 const spinner = document.querySelector('#chat .last_mes .custom-slashHelp');2719 const spinner = document.querySelector('#chat .last_mes .custom-slashHelp');
2659 const parent = spinner.parentElement;2720 const parent = spinner.parentElement;
@@ -2910,6 +2971,7 @@ class StreamingProcessor {
2910 this.swipes = [];2971 this.swipes = [];
2911 /** @type {import('./scripts/logprobs.js').TokenLogprobs[]} */2972 /** @type {import('./scripts/logprobs.js').TokenLogprobs[]} */
2912 this.messageLogprobs = [];2973 this.messageLogprobs = [];
2974 this.toolCalls = [];
2913 }2975 }
29142976
2915 #checkDomElements(messageId) {2977 #checkDomElements(messageId) {
@@ -2921,6 +2983,13 @@ class StreamingProcessor {
2921 }2983 }
2922 }2984 }
29232985
2986 #updateMessageBlockVisibility() {
2987 if (this.messageDom instanceof HTMLElement && Array.isArray(this.toolCalls) && this.toolCalls.length > 0) {
2988 const shouldHide = ['', '...'].includes(this.result);
2989 this.messageDom.classList.toggle('displayNone', shouldHide);
2990 }
2991 }
2992
2924 showMessageButtons(messageId) {2993 showMessageButtons(messageId) {
2925 if (messageId == -1) {2994 if (messageId == -1) {
2926 return;2995 return;
@@ -2986,6 +3055,7 @@ class StreamingProcessor {
2986 }3055 }
2987 else {3056 else {
2988 this.#checkDomElements(messageId);3057 this.#checkDomElements(messageId);
3058 this.#updateMessageBlockVisibility();
2989 const currentTime = new Date();3059 const currentTime = new Date();
2990 // Don't waste time calculating token count for streaming3060 // Don't waste time calculating token count for streaming
2991 const currentTokenCount = isFinal && power_user.message_token_count_enabled ? getTokenCount(processedText, 0) : 0;3061 const currentTokenCount = isFinal && power_user.message_token_count_enabled ? getTokenCount(processedText, 0) : 0;
@@ -3128,7 +3198,7 @@ class StreamingProcessor {
3128 }3198 }
31293199
3130 /**3200 /**
3131 * @returns {Generator<{ text: string, swipes: string[], logprobs: import('./scripts/logprobs.js').TokenLogprobs }, void, void>}3201 * @returns {Generator<{ text: string, swipes: string[], logprobs: import('./scripts/logprobs.js').TokenLogprobs, toolCalls: any[] }, void, void>}
3132 */3202 */
3133 *nullStreamingGeneration() {3203 *nullStreamingGeneration() {
3134 throw new Error('Generation function for streaming is not hooked up');3204 throw new Error('Generation function for streaming is not hooked up');
@@ -3150,12 +3220,13 @@ class StreamingProcessor {
3150 try {3220 try {
3151 const sw = new Stopwatch(1000 / power_user.streaming_fps);3221 const sw = new Stopwatch(1000 / power_user.streaming_fps);
3152 const timestamps = [];3222 const timestamps = [];
3153 for await (const { text, swipes, logprobs } of this.generator()) {3223 for await (const { text, swipes, logprobs, toolCalls } of this.generator()) {
3154 timestamps.push(Date.now());3224 timestamps.push(Date.now());
3155 if (this.isStopped) {3225 if (this.isStopped) {
3156 return;3226 return;
3157 }3227 }
31583228
3229 this.toolCalls = toolCalls;
3159 this.result = text;3230 this.result = text;
3160 this.swipes = Array.from(swipes ?? []);3231 this.swipes = Array.from(swipes ?? []);
3161 if (logprobs) {3232 if (logprobs) {
@@ -3338,9 +3409,9 @@ function removeLastMessage() {
3338 * @param {GenerateOptions} options Generation options3409 * @param {GenerateOptions} options Generation options
3339 * @param {boolean} dryRun Whether to actually generate a message or just assemble the prompt3410 * @param {boolean} dryRun Whether to actually generate a message or just assemble the prompt
3340 * @returns {Promise<any>} Returns a promise that resolves when the text is done generating.3411 * @returns {Promise<any>} Returns a promise that resolves when the text is done generating.
3341 * @typedef {{automatic_trigger?: boolean, force_name2?: boolean, quiet_prompt?: string, quietToLoud?: boolean, skipWIAN?: boolean, force_chid?: number, signal?: AbortSignal, quietImage?: string, quietName?: string }} GenerateOptions3412 * @typedef {{automatic_trigger?: boolean, force_name2?: boolean, quiet_prompt?: string, quietToLoud?: boolean, skipWIAN?: boolean, force_chid?: number, signal?: AbortSignal, quietImage?: string, quietName?: string, depth?: number }} GenerateOptions
3342 */3413 */
3343export async function Generate(type, { automatic_trigger, force_name2, quiet_prompt, quietToLoud, skipWIAN, force_chid, signal, quietImage, quietName } = {}, dryRun = false) {3414export async function Generate(type, { automatic_trigger, force_name2, quiet_prompt, quietToLoud, skipWIAN, force_chid, signal, quietImage, quietName, depth = 0 } = {}, dryRun = false) {
3344 console.log('Generate entered');3415 console.log('Generate entered');
3345 setGenerationProgress(0);3416 setGenerationProgress(0);
3346 generation_started = new Date();3417 generation_started = new Date();
@@ -3371,7 +3442,7 @@ export async function Generate(type, { automatic_trigger, force_name2, quiet_pro
3371 await eventSource.emit(event_types.GENERATION_AFTER_COMMANDS, type, { automatic_trigger, force_name2, quiet_prompt, quietToLoud, skipWIAN, force_chid, signal, quietImage }, dryRun);3442 await eventSource.emit(event_types.GENERATION_AFTER_COMMANDS, type, { automatic_trigger, force_name2, quiet_prompt, quietToLoud, skipWIAN, force_chid, signal, quietImage }, dryRun);
33723443
3373 if (main_api == 'kobold' && kai_settings.streaming_kobold && !kai_flags.can_use_streaming) {3444 if (main_api == 'kobold' && kai_settings.streaming_kobold && !kai_flags.can_use_streaming) {
3374 toastr.error('Streaming is enabled, but the version of Kobold used does not support token streaming.', undefined, { timeOut: 10000, preventDuplicates: true });3445 toastr.error(t`Streaming is enabled, but the version of Kobold used does not support token streaming.`, undefined, { timeOut: 10000, preventDuplicates: true });
3375 unblockGeneration(type);3446 unblockGeneration(type);
3376 return Promise.resolve();3447 return Promise.resolve();
3377 }3448 }
@@ -3380,7 +3451,7 @@ export async function Generate(type, { automatic_trigger, force_name2, quiet_pro
3380 textgen_settings.streaming &&3451 textgen_settings.streaming &&
3381 textgen_settings.legacy_api &&3452 textgen_settings.legacy_api &&
3382 textgen_settings.type === OOBA) {3453 textgen_settings.type === OOBA) {
3383 toastr.error('Streaming is not supported for the Legacy API. Update Ooba and use new API to enable streaming.', undefined, { timeOut: 10000, preventDuplicates: true });3454 toastr.error(t`Streaming is not supported for the Legacy API. Update Ooba and use new API to enable streaming.`, undefined, { timeOut: 10000, preventDuplicates: true });
3384 unblockGeneration(type);3455 unblockGeneration(type);
3385 return Promise.resolve();3456 return Promise.resolve();
3386 }3457 }
@@ -3396,7 +3467,7 @@ export async function Generate(type, { automatic_trigger, force_name2, quiet_pro
33963467
3397 if (!pingResult) {3468 if (!pingResult) {
3398 unblockGeneration(type);3469 unblockGeneration(type);
3399 toastr.error('Verify that the server is running and accessible.', 'ST Server cannot be reached');3470 toastr.error(t`Verify that the server is running and accessible.`, t`ST Server cannot be reached`);
3400 throw new Error('Server unreachable');3471 throw new Error('Server unreachable');
3401 }3472 }
34023473
@@ -3559,7 +3630,9 @@ export async function Generate(type, { automatic_trigger, force_name2, quiet_pro
3559 }3630 }
35603631
3561 // Collect messages with usable content3632 // Collect messages with usable content
3562 let coreChat = chat.filter(x => !x.is_system);3633 const canUseTools = ToolManager.isToolCallingSupported();
3634 const canPerformToolCalls = !dryRun && ToolManager.canPerformToolCalls(type) && depth < ToolManager.RECURSE_LIMIT;
3635 let coreChat = chat.filter(x => !x.is_system || (canUseTools && Array.isArray(x.extra?.tool_invocations)));
3563 if (type === 'swipe') {3636 if (type === 'swipe') {
3564 coreChat.pop();3637 coreChat.pop();
3565 }3638 }
@@ -3946,8 +4019,7 @@ export async function Generate(type, { automatic_trigger, force_name2, quiet_pro
39464019
3947 if (isContinue) {4020 if (isContinue) {
3948 // Coping mechanism for OAI spacing4021 // Coping mechanism for OAI spacing
3949 const isForceInstruct = isOpenRouterWithInstruct();4022 if (main_api === 'openai' && !cyclePrompt.endsWith(' ')) {
3950 if (main_api === 'openai' && !isForceInstruct && !cyclePrompt.endsWith(' ')) {
3951 cyclePrompt += oai_settings.continue_postfix;4023 cyclePrompt += oai_settings.continue_postfix;
3952 continue_mag += oai_settings.continue_postfix;4024 continue_mag += oai_settings.continue_postfix;
3953 }4025 }
@@ -4395,7 +4467,31 @@ export async function Generate(type, { automatic_trigger, force_name2, quiet_pro
4395 getMessage = continue_mag + getMessage;4467 getMessage = continue_mag + getMessage;
4396 }4468 }
43974469
4398 if (streamingProcessor && !streamingProcessor.isStopped && streamingProcessor.isFinished) {4470 const isStreamFinished = streamingProcessor && !streamingProcessor.isStopped && streamingProcessor.isFinished;
4471 const isStreamWithToolCalls = streamingProcessor && Array.isArray(streamingProcessor.toolCalls) && streamingProcessor.toolCalls.length;
4472 if (canPerformToolCalls && isStreamFinished && isStreamWithToolCalls) {
4473 const lastMessage = chat[chat.length - 1];
4474 const hasToolCalls = ToolManager.hasToolCalls(streamingProcessor.toolCalls);
4475 const shouldDeleteMessage = type !== 'swipe' && ['', '...'].includes(lastMessage?.mes) && ['', '...'].includes(streamingProcessor?.result);
4476 hasToolCalls && shouldDeleteMessage && await deleteLastMessage();
4477 const invocationResult = await ToolManager.invokeFunctionTools(streamingProcessor.toolCalls);
4478 if (hasToolCalls) {
4479 if (!invocationResult.invocations.length && shouldDeleteMessage) {
4480 ToolManager.showToolCallError(invocationResult.errors);
4481 unblockGeneration(type);
4482 generatedPromptCache = '';
4483 streamingProcessor = null;
4484 return;
4485 }
4486
4487 streamingProcessor = null;
4488 depth = depth + 1;
4489 await ToolManager.saveFunctionToolInvocations(invocationResult.invocations);
4490 return Generate('normal', { automatic_trigger, force_name2, quiet_prompt, quietToLoud, skipWIAN, force_chid, signal, quietImage, quietName, depth }, dryRun);
4491 }
4492 }
4493
4494 if (isStreamFinished) {
4399 await streamingProcessor.onFinishStreaming(streamingProcessor.messageId, getMessage);4495 await streamingProcessor.onFinishStreaming(streamingProcessor.messageId, getMessage);
4400 streamingProcessor = null;4496 streamingProcessor = null;
4401 triggerAutoContinue(messageChunk, isImpersonate);4497 triggerAutoContinue(messageChunk, isImpersonate);
@@ -4425,7 +4521,7 @@ export async function Generate(type, { automatic_trigger, force_name2, quiet_pro
4425 generatedPromptCache = '';4521 generatedPromptCache = '';
44264522
4427 if (data?.response) {4523 if (data?.response) {
4428 toastr.error(data.response, 'API Error', { preventDuplicates: true });4524 toastr.error(data.response, t`API Error`, { preventDuplicates: true });
4429 }4525 }
4430 throw new Error(data?.response);4526 throw new Error(data?.response);
4431 }4527 }
@@ -4469,6 +4565,25 @@ export async function Generate(type, { automatic_trigger, force_name2, quiet_pro
4469 parseAndSaveLogprobs(data, continue_mag);4565 parseAndSaveLogprobs(data, continue_mag);
4470 }4566 }
44714567
4568 if (canPerformToolCalls) {
4569 const hasToolCalls = ToolManager.hasToolCalls(data);
4570 const shouldDeleteMessage = type !== 'swipe' && ['', '...'].includes(getMessage);
4571 hasToolCalls && shouldDeleteMessage && await deleteLastMessage();
4572 const invocationResult = await ToolManager.invokeFunctionTools(data);
4573 if (hasToolCalls) {
4574 if (!invocationResult.invocations.length && shouldDeleteMessage) {
4575 ToolManager.showToolCallError(invocationResult.errors);
4576 unblockGeneration(type);
4577 generatedPromptCache = '';
4578 return;
4579 }
4580
4581 depth = depth + 1;
4582 await ToolManager.saveFunctionToolInvocations(invocationResult.invocations);
4583 return Generate('normal', { automatic_trigger, force_name2, quiet_prompt, quietToLoud, skipWIAN, force_chid, signal, quietImage, quietName, depth }, dryRun);
4584 }
4585 }
4586
4472 if (type !== 'quiet') {4587 if (type !== 'quiet') {
4473 playMessageSound();4588 playMessageSound();
4474 }4589 }
@@ -4516,7 +4631,7 @@ export async function Generate(type, { automatic_trigger, force_name2, quiet_pro
45164631
4517 function onError(exception) {4632 function onError(exception) {
4518 if (typeof exception?.error?.message === 'string') {4633 if (typeof exception?.error?.message === 'string') {
4519 toastr.error(exception.error.message, 'Error', { timeOut: 10000, extendedTimeOut: 20000 });4634 toastr.error(exception.error.message, t`Error`, { timeOut: 10000, extendedTimeOut: 20000 });
4520 }4635 }
45214636
4522 generatedPromptCache = '';4637 generatedPromptCache = '';
@@ -4783,7 +4898,7 @@ export function removeMacros(str) {
4783 * @param {boolean} [compact] Send as a compact display message.4898 * @param {boolean} [compact] Send as a compact display message.
4784 * @param {string} [name] Name of the user sending the message. Defaults to name1.4899 * @param {string} [name] Name of the user sending the message. Defaults to name1.
4785 * @param {string} [avatar] Avatar of the user sending the message. Defaults to user_avatar.4900 * @param {string} [avatar] Avatar of the user sending the message. Defaults to user_avatar.
4786 * @returns {Promise<void>} A promise that resolves when the message is inserted.4901 * @returns {Promise<any>} A promise that resolves to the message when it is inserted.
4787 */4902 */
4788export async function sendMessageAsUser(messageText, messageBias, insertAt = null, compact = false, name = name1, avatar = user_avatar) {4903export async function sendMessageAsUser(messageText, messageBias, insertAt = null, compact = false, name = name1, avatar = user_avatar) {
4789 messageText = getRegexedString(messageText, regex_placement.USER_INPUT);4904 messageText = getRegexedString(messageText, regex_placement.USER_INPUT);
@@ -4830,6 +4945,8 @@ export async function sendMessageAsUser(messageText, messageBias, insertAt = nul
4830 await eventSource.emit(event_types.USER_MESSAGE_RENDERED, chat_id);4945 await eventSource.emit(event_types.USER_MESSAGE_RENDERED, chat_id);
4831 await saveChatConditional();4946 await saveChatConditional();
4832 }4947 }
4948
4949 return message;
4833}4950}
48344951
4835/**4952/**
@@ -4865,7 +4982,7 @@ export function getMaxContextSize(overrideResponseLength = null) {
4865 this_max_context = Math.min(max_context, 8192);4982 this_max_context = Math.min(max_context, 8192);
48664983
4867 // Added special tokens and whatnot4984 // Added special tokens and whatnot
4868 this_max_context -= 1;4985 this_max_context -= 10;
4869 }4986 }
48704987
4871 this_max_context = this_max_context - (overrideResponseLength || amount_gen);4988 this_max_context = this_max_context - (overrideResponseLength || amount_gen);
@@ -4918,7 +5035,7 @@ function addChatsSeparator(mesSendString) {
49185035
4919async function duplicateCharacter() {5036async function duplicateCharacter() {
4920 if (!this_chid) {5037 if (!this_chid) {
4921 toastr.warning('You must first select a character to duplicate!');5038 toastr.warning(t`You must first select a character to duplicate!`);
4922 return '';5039 return '';
4923 }5040 }
49245041
@@ -4937,7 +5054,7 @@ async function duplicateCharacter() {
4937 body: JSON.stringify(body),5054 body: JSON.stringify(body),
4938 });5055 });
4939 if (response.ok) {5056 if (response.ok) {
4940 toastr.success('Character Duplicated');5057 toastr.success(t`Character Duplicated`);
4941 const data = await response.json();5058 const data = await response.json();
4942 await eventSource.emit(event_types.CHARACTER_DUPLICATED, { oldAvatar: body.avatar_url, newAvatar: data.path });5059 await eventSource.emit(event_types.CHARACTER_DUPLICATED, { oldAvatar: body.avatar_url, newAvatar: data.path });
4943 await getCharacters();5060 await getCharacters();
@@ -5319,7 +5436,7 @@ function extractMessageFromData(data) {
5319 case 'novel':5436 case 'novel':
5320 return data.output;5437 return data.output;
5321 case 'openai':5438 case 'openai':
5322 return data?.choices?.[0]?.message?.content ?? data?.choices?.[0]?.text ?? data?.text ?? '';5439 return data?.choices?.[0]?.message?.content ?? data?.choices?.[0]?.text ?? data?.text ?? data?.message?.content?.[0]?.text ?? data?.message?.tool_plan ?? '';
5323 default:5440 default:
5324 return '';5441 return '';
5325 }5442 }
@@ -5426,6 +5543,7 @@ export function cleanUpMessage(getMessage, isImpersonate, isContinue, displayInc
5426 getMessage = getMessage.substring(0, getMessage.indexOf('<|endoftext|>'));5543 getMessage = getMessage.substring(0, getMessage.indexOf('<|endoftext|>'));
5427 }5544 }
5428 const isInstruct = power_user.instruct.enabled && main_api !== 'openai';5545 const isInstruct = power_user.instruct.enabled && main_api !== 'openai';
5546 const isNotEmpty = (str) => str && str.trim() !== '';
5429 if (isInstruct && power_user.instruct.stop_sequence) {5547 if (isInstruct && power_user.instruct.stop_sequence) {
5430 if (getMessage.indexOf(power_user.instruct.stop_sequence) != -1) {5548 if (getMessage.indexOf(power_user.instruct.stop_sequence) != -1) {
5431 getMessage = getMessage.substring(0, getMessage.indexOf(power_user.instruct.stop_sequence));5549 getMessage = getMessage.substring(0, getMessage.indexOf(power_user.instruct.stop_sequence));
@@ -5433,7 +5551,7 @@ export function cleanUpMessage(getMessage, isImpersonate, isContinue, displayInc
5433 }5551 }
5434 // Hana: Only use the first sequence (should be <|model|>)5552 // Hana: Only use the first sequence (should be <|model|>)
5435 // of the prompt before <|user|> (as KoboldAI Lite does it).5553 // of the prompt before <|user|> (as KoboldAI Lite does it).
5436 if (isInstruct && power_user.instruct.input_sequence) {5554 if (isInstruct && isNotEmpty(power_user.instruct.input_sequence)) {
5437 if (getMessage.indexOf(power_user.instruct.input_sequence) != -1) {5555 if (getMessage.indexOf(power_user.instruct.input_sequence) != -1) {
5438 getMessage = getMessage.substring(0, getMessage.indexOf(power_user.instruct.input_sequence));5556 getMessage = getMessage.substring(0, getMessage.indexOf(power_user.instruct.input_sequence));
5439 }5557 }
@@ -5783,23 +5901,23 @@ export function setSendButtonState(value) {
57835901
5784export async function renameCharacter(name = null, { silent = false, renameChats = null } = {}) {5902export async function renameCharacter(name = null, { silent = false, renameChats = null } = {}) {
5785 if (!name && silent) {5903 if (!name && silent) {
5786 toastr.warning('No character name provided.', 'Rename Character');5904 toastr.warning(t`No character name provided.`, t`Rename Character`);
5787 return false;5905 return false;
5788 }5906 }
5789 if (this_chid === undefined) {5907 if (this_chid === undefined) {
5790 toastr.warning('No character selected.', 'Rename Character');5908 toastr.warning(t`No character selected.`, t`Rename Character`);
5791 return false;5909 return false;
5792 }5910 }
57935911
5794 const oldAvatar = characters[this_chid].avatar;5912 const oldAvatar = characters[this_chid].avatar;
5795 const newValue = name || await callGenericPopup('<h3>New name:</h3>', POPUP_TYPE.INPUT, characters[this_chid].name);5913 const newValue = name || await callGenericPopup('<h3>' + t`New name:` + '</h3>', POPUP_TYPE.INPUT, characters[this_chid].name);
57965914
5797 if (!newValue) {5915 if (!newValue) {
5798 toastr.warning('No character name provided.', 'Rename Character');5916 toastr.warning(t`No character name provided.`, t`Rename Character`);
5799 return false;5917 return false;
5800 }5918 }
5801 if (newValue === characters[this_chid].name) {5919 if (newValue === characters[this_chid].name) {
5802 toastr.info('Same character name provided, so name did not change.', 'Rename Character');5920 toastr.info(t`Same character name provided, so name did not change.`, t`Rename Character`);
5803 return false;5921 return false;
5804 }5922 }
58055923
@@ -5846,9 +5964,9 @@ export async function renameCharacter(name = null, { silent = false, renameChats
5846 if (renamePastChatsConfirm) {5964 if (renamePastChatsConfirm) {
5847 await renamePastChats(newAvatar, newValue);5965 await renamePastChats(newAvatar, newValue);
5848 await reloadCurrentChat();5966 await reloadCurrentChat();
5849 toastr.success('Character renamed and past chats updated!', 'Rename Character');5967 toastr.success(t`Character renamed and past chats updated!`, t`Rename Character`);
5850 } else {5968 } else {
5851 toastr.success('Character renamed!', 'Rename Character');5969 toastr.success(t`Character renamed!`, t`Rename Character`);
5852 }5970 }
5853 }5971 }
5854 else {5972 else {
@@ -5861,8 +5979,8 @@ export async function renameCharacter(name = null, { silent = false, renameChats
5861 }5979 }
5862 catch (error) {5980 catch (error) {
5863 // Reloading to prevent data corruption5981 // Reloading to prevent data corruption
5864 if (!silent) await callPopup('Something went wrong. The page will be reloaded.', 'text');5982 if (!silent) await callPopup(t`Something went wrong. The page will be reloaded.`, 'text');
5865 else toastr.error('Something went wrong. The page will be reloaded.', 'Rename Character');5983 else toastr.error(t`Something went wrong. The page will be reloaded.`, t`Rename Character`);
58665984
5867 console.log('Renaming character error:', error);5985 console.log('Renaming character error:', error);
5868 location.reload();5986 location.reload();
@@ -5919,7 +6037,7 @@ async function renamePastChats(newAvatar, newValue) {
5919 }6037 }
5920 }6038 }
5921 } catch (error) {6039 } catch (error) {
5922 toastr.error(`Past chat could not be updated: ${file_name}`);6040 toastr.error(t`Past chat could not be updated: ${file_name}`);
5923 console.error(error);6041 console.error(error);
5924 }6042 }
5925 }6043 }
@@ -5968,7 +6086,7 @@ export async function saveChat(chatName, withMetadata, mesId) {
5968 characters[this_chid]['date_last_chat'] = Date.now();6086 characters[this_chid]['date_last_chat'] = Date.now();
5969 chat.forEach(function (item, i) {6087 chat.forEach(function (item, i) {
5970 if (item['is_group']) {6088 if (item['is_group']) {
5971 toastr.error('Trying to save group chat with regular saveChat function. Aborting to prevent corruption.');6089 toastr.error(t`Trying to save group chat with regular saveChat function. Aborting to prevent corruption.`);
5972 throw new Error('Group chat saved from saveChat');6090 throw new Error('Group chat saved from saveChat');
5973 }6091 }
5974 /*6092 /*
@@ -6013,7 +6131,7 @@ export async function saveChat(chatName, withMetadata, mesId) {
6013 contentType: 'application/json',6131 contentType: 'application/json',
6014 success: function (data) { },6132 success: function (data) { },
6015 error: function (jqXHR, exception) {6133 error: function (jqXHR, exception) {
6016 toastr.error('Check the server connection and reload the page to prevent data loss.', 'Chat could not be saved');6134 toastr.error(t`Check the server connection and reload the page to prevent data loss.`, t`Chat could not be saved`);
6017 console.log(exception);6135 console.log(exception);
6018 console.log(jqXHR);6136 console.log(jqXHR);
6019 },6137 },
@@ -6410,7 +6528,7 @@ export async function getSettings() {
64106528
6411 if (!response.ok) {6529 if (!response.ok) {
6412 reloadLoop();6530 reloadLoop();
6413 toastr.error('Settings could not be loaded after multiple attempts. Please try again later.');6531 toastr.error(t`Settings could not be loaded after multiple attempts. Please try again later.`);
6414 throw new Error('Error getting settings');6532 throw new Error('Error getting settings');
6415 }6533 }
64166534
@@ -6637,7 +6755,7 @@ export async function saveSettings(type) {
6637 eventSource.emit(event_types.SETTINGS_UPDATED);6755 eventSource.emit(event_types.SETTINGS_UPDATED);
6638 },6756 },
6639 error: function (jqXHR, exception) {6757 error: function (jqXHR, exception) {
6640 toastr.error('Check the server connection and reload the page to prevent data loss.', 'Settings could not be saved');6758 toastr.error(t`Check the server connection and reload the page to prevent data loss.`, t`Settings could not be saved`);
6641 console.log(exception);6759 console.log(exception);
6642 console.log(jqXHR);6760 console.log(jqXHR);
6643 },6761 },
@@ -6680,7 +6798,10 @@ function updateMessage(div) {
6680 text = getRegexedString(6798 text = getRegexedString(
6681 text,6799 text,
6682 regexPlacement,6800 regexPlacement,
6683 { characterOverride: mes.extra?.type === 'narrator' ? undefined : mes.name },6801 {
6802 characterOverride: mes.extra?.type === 'narrator' ? undefined : mes.name,
6803 isEdit: true,
6804 },
6684 );6805 );
66856806
66866807
@@ -6903,7 +7024,7 @@ export async function displayPastChats() {
6903 const data = await (selected_group ? getGroupPastChats(selected_group) : getPastCharacterChats());7024 const data = await (selected_group ? getGroupPastChats(selected_group) : getPastCharacterChats());
69047025
6905 if (!data) {7026 if (!data) {
6906 toastr.error('Could not load chat data. Try reloading the page.');7027 toastr.error(t`Could not load chat data. Try reloading the page.`);
6907 return;7028 return;
6908 }7029 }
69097030
@@ -7036,7 +7157,7 @@ export function selectRightMenuWithAnimation(selectedMenuId) {
70367157
7037export function select_rm_info(type, charId, previousCharId = null) {7158export function select_rm_info(type, charId, previousCharId = null) {
7038 if (!type) {7159 if (!type) {
7039 toastr.error('Invalid process (no \'type\')');7160 toastr.error(t`Invalid process (no 'type')`);
7040 return;7161 return;
7041 }7162 }
7042 if (type !== 'group_create') {7163 if (type !== 'group_create') {
@@ -7044,20 +7165,20 @@ export function select_rm_info(type, charId, previousCharId = null) {
7044 }7165 }
70457166
7046 if (type === 'char_delete') {7167 if (type === 'char_delete') {
7047 toastr.warning(`Character Deleted: ${displayName}`);7168 toastr.warning(t`Character Deleted: ${displayName}`);
7048 }7169 }
7049 if (type === 'char_create') {7170 if (type === 'char_create') {
7050 toastr.success(`Character Created: ${displayName}`);7171 toastr.success(t`Character Created: ${displayName}`);
7051 }7172 }
7052 if (type === 'group_create') {7173 if (type === 'group_create') {
7053 toastr.success('Group Created');7174 toastr.success(t`Group Created`);
7054 }7175 }
7055 if (type === 'group_delete') {7176 if (type === 'group_delete') {
7056 toastr.warning('Group Deleted');7177 toastr.warning(t`Group Deleted`);
7057 }7178 }
70587179
7059 if (type === 'char_import') {7180 if (type === 'char_import') {
7060 toastr.success(`Character Imported: ${displayName}`);7181 toastr.success(t`Character Imported: ${displayName}`);
7061 }7182 }
70627183
7063 selectRightMenuWithAnimation('rm_characters_block');7184 selectRightMenuWithAnimation('rm_characters_block');
@@ -7392,7 +7513,7 @@ function onScenarioOverrideRemoveClick() {
7392 */7513 */
7393export function callPopup(text, type, inputValue = '', { okButton, rows, wide, wider, large, allowHorizontalScrolling, allowVerticalScrolling, cropAspect } = {}) {7514export function callPopup(text, type, inputValue = '', { okButton, rows, wide, wider, large, allowHorizontalScrolling, allowVerticalScrolling, cropAspect } = {}) {
7394 function getOkButtonText() {7515 function getOkButtonText() {
7395 if (['text', 'alternate_greeting', 'char_not_selected'].includes(popup_type)) {7516 if (['text', 'char_not_selected'].includes(popup_type)) {
7396 $dialoguePopupCancel.css('display', 'none');7517 $dialoguePopupCancel.css('display', 'none');
7397 return okButton ?? 'Ok';7518 return okButton ?? 'Ok';
7398 } else if (['delete_extension'].includes(popup_type)) {7519 } else if (['delete_extension'].includes(popup_type)) {
@@ -7466,7 +7587,6 @@ export function showSwipeButtons() {
7466 //had to add this to make the swipe counter work7587 //had to add this to make the swipe counter work
7467 //(copied from the onclick functions for swipe buttons..7588 //(copied from the onclick functions for swipe buttons..
7468 //don't know why the array isn't set for non-swipe messsages in Generate or addOneMessage..)7589 //don't know why the array isn't set for non-swipe messsages in Generate or addOneMessage..)
7469
7470 if (chat[chat.length - 1]['swipe_id'] === undefined) { // if there is no swipe-message in the last spot of the chat array7590 if (chat[chat.length - 1]['swipe_id'] === undefined) { // if there is no swipe-message in the last spot of the chat array
7471 chat[chat.length - 1]['swipe_id'] = 0; // set it to id 07591 chat[chat.length - 1]['swipe_id'] = 0; // set it to id 0
7472 chat[chat.length - 1]['swipes'] = []; // empty the array7592 chat[chat.length - 1]['swipes'] = []; // empty the array
@@ -7475,33 +7595,37 @@ export function showSwipeButtons() {
74757595
7476 const currentMessage = $('#chat').children().filter(`[mesid="${chat.length - 1}"]`);7596 const currentMessage = $('#chat').children().filter(`[mesid="${chat.length - 1}"]`);
7477 const swipeId = chat[chat.length - 1].swipe_id;7597 const swipeId = chat[chat.length - 1].swipe_id;
7478 const swipeCounterText = (`${(swipeId + 1)}\u200B/\u200b${(chat[chat.length - 1].swipes.length)}`);7598 const swipeCounterText = formatSwipeCounter((swipeId + 1), chat[chat.length - 1].swipes.length);
7599 const swipeRight = currentMessage.find('.swipe_right');
7600 const swipeLeft = currentMessage.find('.swipe_left');
7601 const swipeCounter = currentMessage.find('.swipes-counter');
74797602
7480 if (swipeId !== undefined && (chat[chat.length - 1].swipes.length > 1 || swipeId > 0)) {7603 if (swipeId !== undefined && (chat[chat.length - 1].swipes.length > 1 || swipeId > 0)) {
7481 currentMessage.children('.swipe_left').css('display', 'flex');7604 swipeLeft.css('display', 'flex');
7482 }7605 }
7483 //only show right when generate is off, or when next right swipe would not make a generate happen7606 //only show right when generate is off, or when next right swipe would not make a generate happen
7484 if (is_send_press === false || chat[chat.length - 1].swipes.length >= swipeId) {7607 if (is_send_press === false || chat[chat.length - 1].swipes.length >= swipeId) {
7485 currentMessage.children('.swipe_right').css('display', 'flex');7608 swipeRight.css('display', 'flex').css('opacity', '0.3');
7486 currentMessage.children('.swipe_right').css('opacity', '0.3');7609 swipeCounter.css('opacity', '0.3');
7487 }7610 }
7488 //console.log((chat[chat.length - 1]));
7489 if ((chat[chat.length - 1].swipes.length - swipeId) === 1) {7611 if ((chat[chat.length - 1].swipes.length - swipeId) === 1) {
7490 //console.log('highlighting R swipe');7612 //chevron was moved out of hardcode in HTML to class toggle dependent on last_mes or not
7491 currentMessage.children('.swipe_right').css('opacity', '0.7');7613 //necessary for 'swipe_right' div in past messages to have no chevron if 'show swipes for all messages' is turned on
7614 swipeRight.css('opacity', '0.7');
7615 swipeCounter.css('opacity', '0.7');
7492 }7616 }
7493 //console.log(swipesCounterHTML);
74947617
7495 $('.swipes-counter').text(swipeCounterText);7618 //allows for writing individual swipe counters for past messages
7619 const lastSwipeCounter = $('.last_mes .swipes-counter');
7620 lastSwipeCounter.text(swipeCounterText).show();
74967621
7497 //console.log(swipeId);7622 switchSwipeNumAllMessages();
7498 //console.log(chat[chat.length - 1].swipes.length);
7499}7623}
75007624
7501export function hideSwipeButtons() {7625export function hideSwipeButtons() {
7502 //console.log('hideswipebuttons entered');7626 $('#chat').find('.swipe_right').hide();
7503 $('#chat').find('.swipe_right').css('display', 'none');7627 $('#chat').find('.last_mes .swipes-counter').hide();
7504 $('#chat').find('.swipe_left').css('display', 'none');7628 $('#chat').find('.swipe_left').hide();
7505}7629}
75067630
7507/**7631/**
@@ -7512,25 +7636,25 @@ export function hideSwipeButtons() {
7512 */7636 */
7513export async function deleteSwipe(swipeId = null) {7637export async function deleteSwipe(swipeId = null) {
7514 if (swipeId && (isNaN(swipeId) || swipeId < 0)) {7638 if (swipeId && (isNaN(swipeId) || swipeId < 0)) {
7515 toastr.warning(`Invalid swipe ID: ${swipeId + 1}`);7639 toastr.warning(t`Invalid swipe ID: ${swipeId + 1}`);
7516 return;7640 return;
7517 }7641 }
75187642
7519 const lastMessage = chat[chat.length - 1];7643 const lastMessage = chat[chat.length - 1];
7520 if (!lastMessage || !Array.isArray(lastMessage.swipes) || !lastMessage.swipes.length) {7644 if (!lastMessage || !Array.isArray(lastMessage.swipes) || !lastMessage.swipes.length) {
7521 toastr.warning('No messages to delete swipes from.');7645 toastr.warning(t`No messages to delete swipes from.`);
7522 return;7646 return;
7523 }7647 }
75247648
7525 if (lastMessage.swipes.length <= 1) {7649 if (lastMessage.swipes.length <= 1) {
7526 toastr.warning('Can\'t delete the last swipe.');7650 toastr.warning(t`Can't delete the last swipe.`);
7527 return;7651 return;
7528 }7652 }
75297653
7530 swipeId = swipeId ?? lastMessage.swipe_id;7654 swipeId = swipeId ?? lastMessage.swipe_id;
75317655
7532 if (swipeId < 0 || swipeId >= lastMessage.swipes.length) {7656 if (swipeId < 0 || swipeId >= lastMessage.swipes.length) {
7533 toastr.warning(`Invalid swipe ID: ${swipeId + 1}`);7657 toastr.warning(t`Invalid swipe ID: ${swipeId + 1}`);
7534 return;7658 return;
7535 }7659 }
75367660
@@ -7669,7 +7793,7 @@ export function setGenerationProgress(progress) {
76697793
7670function isHordeGenerationNotAllowed() {7794function isHordeGenerationNotAllowed() {
7671 if (main_api == 'koboldhorde' && preset_settings == 'gui') {7795 if (main_api == 'koboldhorde' && preset_settings == 'gui') {
7672 toastr.error('GUI Settings preset is not supported for Horde. Please select another preset.');7796 toastr.error(t`GUI Settings preset is not supported for Horde. Please select another preset.`);
7673 return true;7797 return true;
7674 }7798 }
76757799
@@ -7718,7 +7842,7 @@ function openCharacterWorldPopup() {
7718 }7842 }
77197843
7720 $('#character_json_data').val(JSON.stringify(data));7844 $('#character_json_data').val(JSON.stringify(data));
7721 toastr.info('Embedded lorebook will be removed from this character.');7845 toastr.info(t`Embedded lorebook will be removed from this character.`);
7722 } catch {7846 } catch {
7723 console.error('Failed to parse character JSON data.');7847 console.error('Failed to parse character JSON data.');
7724 }7848 }
@@ -7829,24 +7953,42 @@ function openAlternateGreetings() {
78297953
7830 const template = $('#alternate_greetings_template .alternate_grettings').clone();7954 const template = $('#alternate_greetings_template .alternate_grettings').clone();
7831 const getArray = () => menu_type == 'create' ? create_save.alternate_greetings : characters[chid].data.alternate_greetings;7955 const getArray = () => menu_type == 'create' ? create_save.alternate_greetings : characters[chid].data.alternate_greetings;
7956 const popup = new Popup(template, POPUP_TYPE.TEXT, '', {
7957 wide: true,
7958 large: true,
7959 allowVerticalScrolling: true,
7960 onClose: async () => {
7961 if (menu_type !== 'create') {
7962 await createOrEditCharacter();
7963 }
7964 },
7965 });
78327966
7833 for (let index = 0; index < getArray().length; index++) {7967 for (let index = 0; index < getArray().length; index++) {
7834 addAlternateGreeting(template, getArray()[index], index, getArray);7968 addAlternateGreeting(template, getArray()[index], index, getArray, popup);
7835 }7969 }
78367970
7837 template.find('.add_alternate_greeting').on('click', function () {7971 template.find('.add_alternate_greeting').on('click', function () {
7838 const array = getArray();7972 const array = getArray();
7839 const index = array.length;7973 const index = array.length;
7840 array.push('');7974 array.push('');
7841 addAlternateGreeting(template, '', index, getArray);7975 addAlternateGreeting(template, '', index, getArray, popup);
7842 updateAlternateGreetingsHintVisibility(template);7976 updateAlternateGreetingsHintVisibility(template);
7843 });7977 });
78447978
7979 popup.show();
7845 updateAlternateGreetingsHintVisibility(template);7980 updateAlternateGreetingsHintVisibility(template);
7846 callPopup(template, 'alternate_greeting', '', { wide: true, large: true });
7847}7981}
78487982
7849function addAlternateGreeting(template, greeting, index, getArray) {7983/**
7984 * Adds an alternate greeting to the template.
7985 * @param {JQuery<HTMLElement>} template
7986 * @param {string} greeting
7987 * @param {number} index
7988 * @param {() => any[]} getArray
7989 * @param {Popup} popup
7990 */
7991function addAlternateGreeting(template, greeting, index, getArray, popup) {
7850 const greetingBlock = $('#alternate_greeting_form_template .alternate_greeting').clone();7992 const greetingBlock = $('#alternate_greeting_form_template .alternate_greeting').clone();
7851 greetingBlock.find('.alternate_greeting_text').on('input', async function () {7993 greetingBlock.find('.alternate_greeting_text').on('input', async function () {
7852 const value = $(this).val();7994 const value = $(this).val();
@@ -7854,11 +7996,16 @@ function addAlternateGreeting(template, greeting, index, getArray) {
7854 array[index] = value;7996 array[index] = value;
7855 }).val(greeting);7997 }).val(greeting);
7856 greetingBlock.find('.greeting_index').text(index + 1);7998 greetingBlock.find('.greeting_index').text(index + 1);
7857 greetingBlock.find('.delete_alternate_greeting').on('click', async function () {7999 greetingBlock.find('.delete_alternate_greeting').on('click', async function (event) {
7858 if (confirm('Are you sure you want to delete this alternate greeting?')) {8000 event.preventDefault();
8001 event.stopPropagation();
8002
8003 if (confirm(t`Are you sure you want to delete this alternate greeting?`)) {
7859 const array = getArray();8004 const array = getArray();
7860 array.splice(index, 1);8005 array.splice(index, 1);
8006
7861 // We need to reopen the popup to update the index numbers8007 // We need to reopen the popup to update the index numbers
8008 await popup.complete(POPUP_RESULT.AFFIRMATIVE);
7862 openAlternateGreetings();8009 openAlternateGreetings();
7863 }8010 }
7864 });8011 });
@@ -7886,11 +8033,11 @@ async function createOrEditCharacter(e) {
78868033
7887 if ($('#form_create').attr('actiontype') == 'createcharacter') {8034 if ($('#form_create').attr('actiontype') == 'createcharacter') {
7888 if (String($('#character_name_pole').val()).length === 0) {8035 if (String($('#character_name_pole').val()).length === 0) {
7889 toastr.error('Name is required');8036 toastr.error(t`Name is required`);
7890 return;8037 return;
7891 }8038 }
7892 if (is_group_generating || is_send_press) {8039 if (is_group_generating || is_send_press) {
7893 toastr.error('Cannot create characters while generating. Stop the request and try again.', 'Creation aborted');8040 toastr.error(t`Cannot create characters while generating. Stop the request and try again.`, t`Creation aborted`);
7894 return;8041 return;
7895 }8042 }
7896 try {8043 try {
@@ -7974,7 +8121,7 @@ async function createOrEditCharacter(e) {
79748121
7975 } catch (error) {8122 } catch (error) {
7976 console.error('Error creating character', error);8123 console.error('Error creating character', error);
7977 toastr.error('Failed to create character');8124 toastr.error(t`Failed to create character`);
7978 }8125 }
7979 } else {8126 } else {
7980 try {8127 try {
@@ -8033,7 +8180,7 @@ async function createOrEditCharacter(e) {
8033 }8180 }
8034 } catch (error) {8181 } catch (error) {
8035 console.log(error);8182 console.log(error);
8036 toastr.error('Something went wrong while saving the character, or the image file provided was in an invalid format. Double check that the image is not a webp.');8183 toastr.error(t`Something went wrong while saving the character, or the image file provided was in an invalid format. Double check that the image is not a webp.`);
8037 }8184 }
8038 }8185 }
8039}8186}
@@ -8091,6 +8238,10 @@ window['SillyTavern'].getContext = function () {
8091 registerHelper: () => { },8238 registerHelper: () => { },
8092 registerMacro: MacrosParser.registerMacro.bind(MacrosParser),8239 registerMacro: MacrosParser.registerMacro.bind(MacrosParser),
8093 unregisterMacro: MacrosParser.unregisterMacro.bind(MacrosParser),8240 unregisterMacro: MacrosParser.unregisterMacro.bind(MacrosParser),
8241 registerFunctionTool: ToolManager.registerFunctionTool.bind(ToolManager),
8242 unregisterFunctionTool: ToolManager.unregisterFunctionTool.bind(ToolManager),
8243 isToolCallingSupported: ToolManager.isToolCallingSupported.bind(ToolManager),
8244 canPerformToolCalls: ToolManager.canPerformToolCalls.bind(ToolManager),
8094 registerDebugFunction: registerDebugFunction,8245 registerDebugFunction: registerDebugFunction,
8095 /** @deprecated Use renderExtensionTemplateAsync instead. */8246 /** @deprecated Use renderExtensionTemplateAsync instead. */
8096 renderExtensionTemplate: renderExtensionTemplate,8247 renderExtensionTemplate: renderExtensionTemplate,
@@ -8126,6 +8277,20 @@ window['SillyTavern'].getContext = function () {
8126 };8277 };
8127};8278};
81288279
8280/**
8281 * Formats a counter for a swipe view.
8282 * @param {number} current The current number of items.
8283 * @param {number} total The total number of items.
8284 * @returns {string} The formatted counter.
8285 */
8286function formatSwipeCounter(current, total) {
8287 if (isNaN(current) || isNaN(total)) {
8288 return '';
8289 }
8290
8291 return `${current}\u200b/\u200b${total}`;
8292}
8293
8129function swipe_left() { // when we swipe left..but no generation.8294function swipe_left() { // when we swipe left..but no generation.
8130 if (chat.length - 1 === Number(this_edit_mes_id)) {8295 if (chat.length - 1 === Number(this_edit_mes_id)) {
8131 closeMessageEditor();8296 closeMessageEditor();
@@ -8313,8 +8478,8 @@ const swipe_right = () => {
8313 }8478 }
83148479
8315 const currentMessage = $('#chat').children().filter(`[mesid="${chat.length - 1}"]`);8480 const currentMessage = $('#chat').children().filter(`[mesid="${chat.length - 1}"]`);
8316 let this_div = currentMessage.children('.swipe_right');8481 let this_div = currentMessage.find('.swipe_right');
8317 let this_mes_div = this_div.parent();8482 let this_mes_div = this_div.parent().parent();
83188483
8319 if (chat[chat.length - 1]['swipe_id'] > chat[chat.length - 1]['swipes'].length) { //if we swipe right while generating (the swipe ID is greater than what we are viewing now)8484 if (chat[chat.length - 1]['swipe_id'] > chat[chat.length - 1]['swipes'].length) { //if we swipe right while generating (the swipe ID is greater than what we are viewing now)
8320 chat[chat.length - 1]['swipe_id'] = chat[chat.length - 1]['swipes'].length; //show that message slot (will be '...' while generating)8485 chat[chat.length - 1]['swipe_id'] = chat[chat.length - 1]['swipes'].length; //show that message slot (will be '...' while generating)
@@ -8324,7 +8489,7 @@ const swipe_right = () => {
8324 }8489 }
8325 // handles animated transitions when swipe right, specifically height transitions between messages8490 // handles animated transitions when swipe right, specifically height transitions between messages
8326 if (run_generate || run_swipe_right) {8491 if (run_generate || run_swipe_right) {
8327 let this_mes_block = this_mes_div.children('.mes_block').children('.mes_text');8492 let this_mes_block = this_mes_div.find('.mes_block .mes_text');
8328 const this_mes_div_height = this_mes_div[0].scrollHeight;8493 const this_mes_div_height = this_mes_div[0].scrollHeight;
8329 const this_mes_block_height = this_mes_block[0].scrollHeight;8494 const this_mes_block_height = this_mes_block[0].scrollHeight;
83308495
@@ -8452,12 +8617,22 @@ const CONNECT_API_MAP = {
8452 selected: 'novel',8617 selected: 'novel',
8453 button: '#api_button_novel',8618 button: '#api_button_novel',
8454 },8619 },
8620 'koboldcpp': {
8621 selected: 'textgenerationwebui',
8622 button: '#api_button_textgenerationwebui',
8623 type: textgen_types.KOBOLDCPP,
8624 },
8455 // KoboldCpp alias8625 // KoboldCpp alias
8456 'kcpp': {8626 'kcpp': {
8457 selected: 'textgenerationwebui',8627 selected: 'textgenerationwebui',
8458 button: '#api_button_textgenerationwebui',8628 button: '#api_button_textgenerationwebui',
8459 type: textgen_types.KOBOLDCPP,8629 type: textgen_types.KOBOLDCPP,
8460 },8630 },
8631 'openai': {
8632 selected: 'openai',
8633 button: '#api_button_openai',
8634 source: chat_completion_sources.OPENAI,
8635 },
8461 // OpenAI alias8636 // OpenAI alias
8462 'oai': {8637 'oai': {
8463 selected: 'openai',8638 selected: 'openai',
@@ -8515,7 +8690,7 @@ async function selectContextCallback(args, name) {
8515 const result = fuse.search(name);8690 const result = fuse.search(name);
85168691
8517 if (result.length === 0) {8692 if (result.length === 0) {
8518 !quiet && toastr.warning(`Context template "${name}" not found`);8693 !quiet && toastr.warning(t`Context template '${name}' not found`);
8519 return '';8694 return '';
8520 }8695 }
85218696
@@ -8535,7 +8710,7 @@ async function selectInstructCallback(args, name) {
8535 const result = fuse.search(name);8710 const result = fuse.search(name);
85368711
8537 if (result.length === 0) {8712 if (result.length === 0) {
8538 !quiet && toastr.warning(`Instruct template "${name}" not found`);8713 !quiet && toastr.warning(t`Instruct template '${name}' not found`);
8539 return '';8714 return '';
8540 }8715 }
85418716
@@ -8587,7 +8762,7 @@ async function connectAPISlash(args, text) {
85878762
8588 const apiConfig = CONNECT_API_MAP[text.toLowerCase()];8763 const apiConfig = CONNECT_API_MAP[text.toLowerCase()];
8589 if (!apiConfig) {8764 if (!apiConfig) {
8590 toastr.error(`Error: ${text} is not a valid API`);8765 toastr.error(t`Error: ${text} is not a valid API`);
8591 return '';8766 return '';
8592 }8767 }
85938768
@@ -8616,7 +8791,7 @@ async function connectAPISlash(args, text) {
8616 }8791 }
86178792
8618 const quiet = isTrueBoolean(args?.quiet);8793 const quiet = isTrueBoolean(args?.quiet);
8619 const toast = quiet ? jQuery() : toastr.info(`API set to ${text}, trying to connect..`);8794 const toast = quiet ? jQuery() : toastr.info(t`API set to ${text}, trying to connect..`);
86208795
8621 try {8796 try {
8622 await waitUntilCondition(() => online_status !== 'no_connection', 10000, 100);8797 await waitUntilCondition(() => online_status !== 'no_connection', 10000, 100);
@@ -8655,7 +8830,7 @@ export async function processDroppedFiles(files, data = new Map()) {
8655 const preservedName = data instanceof Map && data.get(file);8830 const preservedName = data instanceof Map && data.get(file);
8656 await importCharacter(file, preservedName);8831 await importCharacter(file, preservedName);
8657 } else {8832 } else {
8658 toastr.warning('Unsupported file type: ' + file.name);8833 toastr.warning(t`Unsupported file type: ` + file.name);
8659 }8834 }
8660 }8835 }
8661}8836}
@@ -8668,7 +8843,7 @@ export async function processDroppedFiles(files, data = new Map()) {
8668 */8843 */
8669async function importCharacter(file, preserveFileName = '') {8844async function importCharacter(file, preserveFileName = '') {
8670 if (is_group_generating || is_send_press) {8845 if (is_group_generating || is_send_press) {
8671 toastr.error('Cannot import characters while generating. Stop the request and try again.', 'Import aborted');8846 toastr.error(t`Cannot import characters while generating. Stop the request and try again.`, t`Import aborted`);
8672 throw new Error('Cannot import character while generating');8847 throw new Error('Cannot import character while generating');
8673 }8848 }
86748849
@@ -8695,7 +8870,7 @@ async function importCharacter(file, preserveFileName = '') {
8695 });8870 });
86968871
8697 if (data.error) {8872 if (data.error) {
8698 toastr.error('The file is likely invalid or corrupted.', 'Could not import character');8873 toastr.error(t`The file is likely invalid or corrupted.`, t`Could not import character`);
8699 return;8874 return;
8700 }8875 }
87018876
@@ -8748,7 +8923,7 @@ async function doImpersonate(args, prompt) {
8748 await waitUntilCondition(() => !is_send_press && !is_group_generating, 10000, 100);8923 await waitUntilCondition(() => !is_send_press && !is_group_generating, 10000, 100);
8749 } catch {8924 } catch {
8750 console.warn('Timeout waiting for generation unlock');8925 console.warn('Timeout waiting for generation unlock');
8751 toastr.warning('Cannot run /impersonate command while the reply is being generated.');8926 toastr.warning(t`Cannot run /impersonate command while the reply is being generated.`);
8752 return '';8927 return '';
8753 }8928 }
87548929
@@ -8810,19 +8985,19 @@ async function doDeleteChat() {
88108985
8811async function doRenameChat(_, chatName) {8986async function doRenameChat(_, chatName) {
8812 if (!chatName) {8987 if (!chatName) {
8813 toastr.warning('Name must be provided as an argument to rename this chat.');8988 toastr.warning(t`Name must be provided as an argument to rename this chat.`);
8814 return '';8989 return '';
8815 }8990 }
88168991
8817 const currentChatName = getCurrentChatId();8992 const currentChatName = getCurrentChatId();
8818 if (!currentChatName) {8993 if (!currentChatName) {
8819 toastr.warning('No chat selected that can be renamed.');8994 toastr.warning(t`No chat selected that can be renamed.`);
8820 return '';8995 return '';
8821 }8996 }
88228997
8823 await renameChat(currentChatName, chatName);8998 await renameChat(currentChatName, chatName);
88248999
8825 toastr.success(`Successfully renamed chat to: ${chatName}`);9000 toastr.success(t`Successfully renamed chat to: ${chatName}`);
8826 return '';9001 return '';
8827}9002}
88289003
@@ -8937,7 +9112,7 @@ export async function deleteCharacter(characterKey, { deleteChats = true } = {})
8937 for (const key of characterKey) {9112 for (const key of characterKey) {
8938 const character = characters.find(x => x.avatar == key);9113 const character = characters.find(x => x.avatar == key);
8939 if (!character) {9114 if (!character) {
8940 toastr.warning(`Character ${key} not found. Skipping deletion.`);9115 toastr.warning(t`Character ${key} not found. Skipping deletion.`);
8941 continue;9116 continue;
8942 }9117 }
89439118
@@ -8954,7 +9129,7 @@ export async function deleteCharacter(characterKey, { deleteChats = true } = {})
8954 });9129 });
89559130
8956 if (!response.ok) {9131 if (!response.ok) {
8957 toastr.error(`${response.status} ${response.statusText}`, 'Failed to delete character');9132 toastr.error(`${response.status} ${response.statusText}`, t`Failed to delete character`);
8958 continue;9133 continue;
8959 }9134 }
89609135
@@ -9006,6 +9181,90 @@ function doTogglePanels() {
9006 return '';9181 return '';
9007}9182}
90089183
9184/**
9185 * Event handler to open a navbar drawer when a drawer open button is clicked.
9186 * Handles click events on .drawer-opener elements.
9187 * Opens the drawer associated with the clicked button according to the data-target attribute.
9188 * @returns {void}
9189 */
9190function doDrawerOpenClick() {
9191 const targetDrawerID = $(this).attr('data-target');
9192 const drawer = $(`#${targetDrawerID}`);
9193 const drawerToggle = drawer.find('.drawer-toggle');
9194 const drawerWasOpenAlready = drawerToggle.parent().find('.drawer-content').hasClass('openDrawer');
9195 if (drawerWasOpenAlready || drawer.hasClass('resizing')) { return; }
9196 doNavbarIconClick.call(drawerToggle);
9197}
9198
9199/**
9200 * Event handler to open or close a navbar drawer when a navbar icon is clicked.
9201 * Handles click events on .drawer-toggle elements.
9202 * @returns {void}
9203 */
9204function doNavbarIconClick() {
9205 var icon = $(this).find('.drawer-icon');
9206 var drawer = $(this).parent().find('.drawer-content');
9207 if (drawer.hasClass('resizing')) { return; }
9208 var drawerWasOpenAlready = $(this).parent().find('.drawer-content').hasClass('openDrawer');
9209 let targetDrawerID = $(this).parent().find('.drawer-content').attr('id');
9210 const pinnedDrawerClicked = drawer.hasClass('pinnedOpen');
9211
9212 if (!drawerWasOpenAlready) { //to open the drawer
9213 $('.openDrawer').not('.pinnedOpen').addClass('resizing').slideToggle(200, 'swing', async function () {
9214 await delay(50); $(this).closest('.drawer-content').removeClass('resizing');
9215 });
9216 $('.openIcon').toggleClass('closedIcon openIcon');
9217 $('.openDrawer').not('.pinnedOpen').toggleClass('closedDrawer openDrawer');
9218 icon.toggleClass('openIcon closedIcon');
9219 drawer.toggleClass('openDrawer closedDrawer');
9220
9221 //console.log(targetDrawerID);
9222 if (targetDrawerID === 'right-nav-panel') {
9223 $(this).closest('.drawer').find('.drawer-content').addClass('resizing').slideToggle({
9224 duration: 200,
9225 easing: 'swing',
9226 start: function () {
9227 jQuery(this).css('display', 'flex'); //flex needed to make charlist scroll
9228 },
9229 complete: async function () {
9230 favsToHotswap();
9231 await delay(50);
9232 $(this).closest('.drawer-content').removeClass('resizing');
9233 $('#rm_print_characters_block').trigger('scroll');
9234 },
9235 });
9236 } else {
9237 $(this).closest('.drawer').find('.drawer-content').addClass('resizing').slideToggle(200, 'swing', async function () {
9238 await delay(50); $(this).closest('.drawer-content').removeClass('resizing');
9239 });
9240 }
9241
9242 // Set the height of "autoSetHeight" textareas within the drawer to their scroll height
9243 if (!CSS.supports('field-sizing', 'content')) {
9244 $(this).closest('.drawer').find('.drawer-content textarea.autoSetHeight').each(async function () {
9245 await resetScrollHeight($(this));
9246 return;
9247 });
9248 }
9249
9250 } else if (drawerWasOpenAlready) { //to close manually
9251 icon.toggleClass('closedIcon openIcon');
9252
9253 if (pinnedDrawerClicked) {
9254 $(drawer).addClass('resizing').slideToggle(200, 'swing', async function () {
9255 await delay(50); $(this).removeClass('resizing');
9256 });
9257 }
9258 else {
9259 $('.openDrawer').not('.pinnedOpen').addClass('resizing').slideToggle(200, 'swing', async function () {
9260 await delay(50); $(this).closest('.drawer-content').removeClass('resizing');
9261 });
9262 }
9263
9264 drawer.toggleClass('closedDrawer openDrawer');
9265 }
9266}
9267
9009function addDebugFunctions() {9268function addDebugFunctions() {
9010 const doBackfill = async () => {9269 const doBackfill = async () => {
9011 for (const message of chat) {9270 for (const message of chat) {
@@ -9371,9 +9630,9 @@ jQuery(async function () {
93719630
9372 ///// SWIPE BUTTON CLICKS ///////9631 ///// SWIPE BUTTON CLICKS ///////
93739632
9374 $(document).on('click', '.swipe_right', swipe_right);9633 //limit swiping to only last message clicks
93759634 $(document).on('click', '.last_mes .swipe_right', swipe_right);
9376 $(document).on('click', '.swipe_left', swipe_left);9635 $(document).on('click', '.last_mes .swipe_left', swipe_left);
93779636
9378 const debouncedCharacterSearch = debounce((searchQuery) => {9637 const debouncedCharacterSearch = debounce((searchQuery) => {
9379 entitiesFilter.setFilterData(FILTER_TYPES.SEARCH, searchQuery);9638 entitiesFilter.setFilterData(FILTER_TYPES.SEARCH, searchQuery);
@@ -9576,9 +9835,6 @@ jQuery(async function () {
9576 }, 2000);9835 }, 2000);
9577 }9836 }
9578 }9837 }
9579 if (popup_type == 'alternate_greeting' && menu_type !== 'create') {
9580 createOrEditCharacter();
9581 }
95829838
9583 if (dialogueResolve) {9839 if (dialogueResolve) {
9584 if (popup_type == 'input') {9840 if (popup_type == 'input') {
@@ -9632,12 +9888,7 @@ jQuery(async function () {
96329888
9633 let deleteChats = false;9889 let deleteChats = false;
96349890
9635 const confirm = await Popup.show.confirm('Delete the character?', `9891 const confirm = await Popup.show.confirm(t`Delete the character?`, await renderTemplateAsync('deleteConfirm'), {
9636 <b>THIS IS PERMANENT!<br><br>
9637 <label for="del_char_checkbox" class="checkbox_label justifyCenter">
9638 <input type="checkbox" id="del_char_checkbox" />
9639 <small>Also delete the chat files</small>
9640 </label></b>`, {
9641 onClose: () => deleteChats = !!$('#del_char_checkbox').prop('checked'),9892 onClose: () => deleteChats = !!$('#del_char_checkbox').prop('checked'),
9642 });9893 });
9643 if (!confirm) {9894 if (!confirm) {
@@ -9942,6 +10193,8 @@ jQuery(async function () {
9942 }10193 }
994310194
9944 else if (id == 'option_continue') {10195 else if (id == 'option_continue') {
10196 if (this_edit_mes_id) return; // don't proceed if editing a message
10197
9945 if (is_send_press == false || fromSlashCommand) {10198 if (is_send_press == false || fromSlashCommand) {
9946 is_send_press = true;10199 is_send_press = true;
9947 Generate('continue', buildOrFillAdditionalArgs());10200 Generate('continue', buildOrFillAdditionalArgs());
@@ -10596,69 +10849,8 @@ jQuery(async function () {
10596 stopScriptExecution();10849 stopScriptExecution();
10597 });10850 });
1059810851
10599 $('.drawer-toggle').on('click', function () {10852 $(document).on('click', '.drawer-opener', doDrawerOpenClick);
10600 var icon = $(this).find('.drawer-icon');10853 $('.drawer-toggle').on('click', doNavbarIconClick);
10601 var drawer = $(this).parent().find('.drawer-content');
10602 if (drawer.hasClass('resizing')) { return; }
10603 var drawerWasOpenAlready = $(this).parent().find('.drawer-content').hasClass('openDrawer');
10604 let targetDrawerID = $(this).parent().find('.drawer-content').attr('id');
10605 const pinnedDrawerClicked = drawer.hasClass('pinnedOpen');
10606
10607 if (!drawerWasOpenAlready) { //to open the drawer
10608 $('.openDrawer').not('.pinnedOpen').addClass('resizing').slideToggle(200, 'swing', async function () {
10609 await delay(50); $(this).closest('.drawer-content').removeClass('resizing');
10610 });
10611 $('.openIcon').toggleClass('closedIcon openIcon');
10612 $('.openDrawer').not('.pinnedOpen').toggleClass('closedDrawer openDrawer');
10613 icon.toggleClass('openIcon closedIcon');
10614 drawer.toggleClass('openDrawer closedDrawer');
10615
10616 //console.log(targetDrawerID);
10617 if (targetDrawerID === 'right-nav-panel') {
10618 $(this).closest('.drawer').find('.drawer-content').addClass('resizing').slideToggle({
10619 duration: 200,
10620 easing: 'swing',
10621 start: function () {
10622 jQuery(this).css('display', 'flex'); //flex needed to make charlist scroll
10623 },
10624 complete: async function () {
10625 favsToHotswap();
10626 await delay(50);
10627 $(this).closest('.drawer-content').removeClass('resizing');
10628 $('#rm_print_characters_block').trigger('scroll');
10629 },
10630 });
10631 } else {
10632 $(this).closest('.drawer').find('.drawer-content').addClass('resizing').slideToggle(200, 'swing', async function () {
10633 await delay(50); $(this).closest('.drawer-content').removeClass('resizing');
10634 });
10635 }
10636
10637 // Set the height of "autoSetHeight" textareas within the drawer to their scroll height
10638 if (!CSS.supports('field-sizing', 'content')) {
10639 $(this).closest('.drawer').find('.drawer-content textarea.autoSetHeight').each(async function () {
10640 await resetScrollHeight($(this));
10641 return;
10642 });
10643 }
10644
10645 } else if (drawerWasOpenAlready) { //to close manually
10646 icon.toggleClass('closedIcon openIcon');
10647
10648 if (pinnedDrawerClicked) {
10649 $(drawer).addClass('resizing').slideToggle(200, 'swing', async function () {
10650 await delay(50); $(this).removeClass('resizing');
10651 });
10652 }
10653 else {
10654 $('.openDrawer').not('.pinnedOpen').addClass('resizing').slideToggle(200, 'swing', async function () {
10655 await delay(50); $(this).closest('.drawer-content').removeClass('resizing');
10656 });
10657 }
10658
10659 drawer.toggleClass('closedDrawer openDrawer');
10660 }
10661 });
1066210854
10663 $('html').on('touchstart mousedown', function (e) {10855 $('html').on('touchstart mousedown', function (e) {
10664 var clickTarget = $(e.target);10856 var clickTarget = $(e.target);
@@ -10694,7 +10886,7 @@ jQuery(async function () {
10694 $('.openDrawer').not('.pinnedOpen').addClass('resizing').slideToggle(200, 'swing', function () {10886 $('.openDrawer').not('.pinnedOpen').addClass('resizing').slideToggle(200, 'swing', function () {
10695 $(this).closest('.drawer-content').removeClass('resizing');10887 $(this).closest('.drawer-content').removeClass('resizing');
10696 });10888 });
10697 $('.openIcon').toggleClass('closedIcon openIcon');10889 $('.openIcon').not('.drawerPinnedOpen').toggleClass('closedIcon openIcon');
10698 $('.openDrawer').not('.pinnedOpen').toggleClass('closedDrawer openDrawer');10890 $('.openDrawer').not('.pinnedOpen').toggleClass('closedDrawer openDrawer');
1069910891
10700 }10892 }
@@ -10706,10 +10898,12 @@ jQuery(async function () {
10706 if ($(e.target).hasClass('text_pole')) {10898 if ($(e.target).hasClass('text_pole')) {
10707 return;10899 return;
10708 }10900 }
10709 var icon = $(this).find('.inline-drawer-icon');10901 const drawer = $(this).closest('.inline-drawer');
10902 const icon = drawer.find('.inline-drawer-icon');
10903 const drawerContent = drawer.find('.inline-drawer-content');
10710 icon.toggleClass('down up');10904 icon.toggleClass('down up');
10711 icon.toggleClass('fa-circle-chevron-down fa-circle-chevron-up');10905 icon.toggleClass('fa-circle-chevron-down fa-circle-chevron-up');
10712 $(this).closest('.inline-drawer').find('.inline-drawer-content').stop().slideToggle({10906 drawerContent.stop().slideToggle({
10713 complete: () => {10907 complete: () => {
10714 $(this).css('height', '');10908 $(this).css('height', '');
10715 },10909 },
@@ -10717,7 +10911,7 @@ jQuery(async function () {
1071710911
10718 // Set the height of "autoSetHeight" textareas within the inline-drawer to their scroll height10912 // Set the height of "autoSetHeight" textareas within the inline-drawer to their scroll height
10719 if (!CSS.supports('field-sizing', 'content')) {10913 if (!CSS.supports('field-sizing', 'content')) {
10720 $(this).closest('.inline-drawer').find('.inline-drawer-content textarea.autoSetHeight').each(async function () {10914 drawerContent.find('textarea.autoSetHeight').each(async function () {
10721 await resetScrollHeight($(this));10915 await resetScrollHeight($(this));
10722 return;10916 return;
10723 });10917 });
public/scripts/PromptManager.js+7 -6
@@ -8,6 +8,7 @@ import { debounce, waitUntilCondition, escapeHtml } from './utils.js';
8import { debounce_timeout } from './constants.js';8import { debounce_timeout } from './constants.js';
9import { renderTemplateAsync } from './templates.js';9import { renderTemplateAsync } from './templates.js';
10import { Popup } from './popup.js';10import { Popup } from './popup.js';
11import { t } from './i18n.js';
1112
12function debouncePromise(func, delay) {13function debouncePromise(func, delay) {
13 let timeoutId;14 let timeoutId;
@@ -455,7 +456,7 @@ class PromptManager {
455456
456 // Delete selected prompt from list form and close edit form457 // Delete selected prompt from list form and close edit form
457 this.handleDeletePrompt = async (event) => {458 this.handleDeletePrompt = async (event) => {
458 Popup.show.confirm('Are you sure you want to delete this prompt?', null).then((userChoice) => {459 Popup.show.confirm(t`Are you sure you want to delete this prompt?`, null).then((userChoice) => {
459 if (!userChoice) return;460 if (!userChoice) return;
460 const promptID = document.getElementById(this.configuration.prefix + 'prompt_manager_footer_append_prompt').value;461 const promptID = document.getElementById(this.configuration.prefix + 'prompt_manager_footer_append_prompt').value;
461 const prompt = this.getPromptById(promptID);462 const prompt = this.getPromptById(promptID);
@@ -531,7 +532,7 @@ class PromptManager {
531532
532 // Import prompts for the selected character533 // Import prompts for the selected character
533 this.handleImport = () => {534 this.handleImport = () => {
534 Popup.show.confirm('Existing prompts with the same ID will be overridden. Do you want to proceed?', null)535 Popup.show.confirm(t`Existing prompts with the same ID will be overridden. Do you want to proceed?`, null)
535 .then(userChoice => {536 .then(userChoice => {
536 if (!userChoice) return;537 if (!userChoice) return;
537538
@@ -552,7 +553,7 @@ class PromptManager {
552 const data = JSON.parse(fileContent);553 const data = JSON.parse(fileContent);
553 this.import(data);554 this.import(data);
554 } catch (err) {555 } catch (err) {
555 toastr.error('An error occurred while importing prompts. More info available in console.');556 toastr.error(t`An error occurred while importing prompts. More info available in console.`);
556 console.log('An error occurred while importing prompts');557 console.log('An error occurred while importing prompts');
557 console.log(err.toString());558 console.log(err.toString());
558 }559 }
@@ -567,7 +568,7 @@ class PromptManager {
567568
568 // Restore default state of a characters prompt order569 // Restore default state of a characters prompt order
569 this.handleCharacterReset = () => {570 this.handleCharacterReset = () => {
570 Popup.show.confirm('This will reset the prompt order for this character. You will not lose any prompts.', null)571 Popup.show.confirm(t`This will reset the prompt order for this character. You will not lose any prompts.`, null)
571 .then(userChoice => {572 .then(userChoice => {
572 if (!userChoice) return;573 if (!userChoice) return;
573574
@@ -1649,7 +1650,7 @@ class PromptManager {
1649 };1650 };
16501651
1651 if (false === this.validateObject(controlObj, importData)) {1652 if (false === this.validateObject(controlObj, importData)) {
1652 toastr.warning('Could not import prompts. Export failed validation.');1653 toastr.warning(t`Could not import prompts. Export failed validation.`);
1653 return;1654 return;
1654 }1655 }
16551656
@@ -1672,7 +1673,7 @@ class PromptManager {
1672 throw new Error('Prompt order strategy not supported.');1673 throw new Error('Prompt order strategy not supported.');
1673 }1674 }
16741675
1675 toastr.success('Prompt import complete.');1676 toastr.success(t`Prompt import complete.`);
1676 this.saveServiceSettings().then(() => this.render());1677 this.saveServiceSettings().then(() => this.render());
1677 }1678 }
16781679
public/scripts/RossAscends-mods.js+28 -11
@@ -45,8 +45,11 @@ var LPanelPin = document.getElementById('lm_button_panel_pin');
45var WIPanelPin = document.getElementById('WI_panel_pin');45var WIPanelPin = document.getElementById('WI_panel_pin');
4646
47var RightNavPanel = document.getElementById('right-nav-panel');47var RightNavPanel = document.getElementById('right-nav-panel');
48var RightNavDrawerIcon = document.getElementById('rightNavDrawerIcon');
48var LeftNavPanel = document.getElementById('left-nav-panel');49var LeftNavPanel = document.getElementById('left-nav-panel');
50var LeftNavDrawerIcon = document.getElementById('leftNavDrawerIcon');
49var WorldInfo = document.getElementById('WorldInfo');51var WorldInfo = document.getElementById('WorldInfo');
52var WIDrawerIcon = document.getElementById('WIDrawerIcon');
5053
51var SelectedCharacterTab = document.getElementById('rm_button_selected_ch');54var SelectedCharacterTab = document.getElementById('rm_button_selected_ch');
5255
@@ -56,15 +59,19 @@ let counterNonce = Date.now();
5659
57const observerConfig = { childList: true, subtree: true };60const observerConfig = { childList: true, subtree: true };
58const countTokensDebounced = debounce(RA_CountCharTokens, debounce_timeout.relaxed);61const countTokensDebounced = debounce(RA_CountCharTokens, debounce_timeout.relaxed);
62const countTokensShortDebounced = debounce(RA_CountCharTokens, debounce_timeout.short);
63const checkStatusDebounced = debounce(RA_checkOnlineStatus, debounce_timeout.short);
5964
60const observer = new MutationObserver(function (mutations) {65const observer = new MutationObserver(function (mutations) {
61 mutations.forEach(function (mutation) {66 mutations.forEach(function (mutation) {
67 if (!(mutation.target instanceof HTMLElement)) {
68 return;
69 }
62 if (mutation.target.classList.contains('online_status_text')) {70 if (mutation.target.classList.contains('online_status_text')) {
63 RA_checkOnlineStatus();71 checkStatusDebounced();
64 } else if (mutation.target.parentNode === SelectedCharacterTab) {72 } else if (mutation.target.parentNode === SelectedCharacterTab) {
65 setTimeout(RA_CountCharTokens, 200);73 countTokensShortDebounced();
66 } else if (mutation.target.classList.contains('mes_text')) {74 } else if (mutation.target.classList.contains('mes_text')) {
67 if (mutation.target instanceof HTMLElement) {
68 for (const element of mutation.target.getElementsByTagName('math')) {75 for (const element of mutation.target.getElementsByTagName('math')) {
69 element.childNodes.forEach(function (child) {76 element.childNodes.forEach(function (child) {
70 if (child.nodeType === Node.TEXT_NODE) {77 if (child.nodeType === Node.TEXT_NODE) {
@@ -73,7 +80,6 @@ const observer = new MutationObserver(function (mutations) {
73 });80 });
74 }81 }
75 }82 }
76 }
77 });83 });
78});84});
7985
@@ -725,9 +731,7 @@ export function addSafariPatch() {
725731
726export function initRossMods() {732export function initRossMods() {
727 // initial status check733 // initial status check
728 setTimeout(() => {734 checkStatusDebounced();
729 RA_checkOnlineStatus();
730 }, 100);
731735
732 if (power_user.auto_load_chat) {736 if (power_user.auto_load_chat) {
733 RA_autoloadchat();737 RA_autoloadchat();
@@ -752,7 +756,7 @@ export function initRossMods() {
752 setTimeout(() => RA_autoconnect(PrevAPI), 100);756 setTimeout(() => RA_autoconnect(PrevAPI), 100);
753 });757 });
754758
755 $('#api_button').click(function () { setTimeout(RA_checkOnlineStatus, 100); });759 $('#api_button').on('click', () => checkStatusDebounced());
756760
757 //toggle pin class when lock toggle clicked761 //toggle pin class when lock toggle clicked
758 $(RPanelPin).on('click', function () {762 $(RPanelPin).on('click', function () {
@@ -760,13 +764,15 @@ export function initRossMods() {
760 if ($(RPanelPin).prop('checked') == true) {764 if ($(RPanelPin).prop('checked') == true) {
761 //console.log('adding pin class to right nav');765 //console.log('adding pin class to right nav');
762 $(RightNavPanel).addClass('pinnedOpen');766 $(RightNavPanel).addClass('pinnedOpen');
767 $(RightNavDrawerIcon).addClass('drawerPinnedOpen');
763 } else {768 } else {
764 //console.log('removing pin class from right nav');769 //console.log('removing pin class from right nav');
765 $(RightNavPanel).removeClass('pinnedOpen');770 $(RightNavPanel).removeClass('pinnedOpen');
771 $(RightNavDrawerIcon).removeClass('drawerPinnedOpen');
766772
767 if ($(RightNavPanel).hasClass('openDrawer') && $('.openDrawer').length > 1) {773 if ($(RightNavPanel).hasClass('openDrawer') && $('.openDrawer').length > 1) {
768 $(RightNavPanel).slideToggle(200, 'swing');774 $(RightNavPanel).slideToggle(200, 'swing');
769 //$(rightNavDrawerIcon).toggleClass('openIcon closedIcon');775 $(RightNavDrawerIcon).toggleClass('openIcon closedIcon');
770 $(RightNavPanel).toggleClass('openDrawer closedDrawer');776 $(RightNavPanel).toggleClass('openDrawer closedDrawer');
771 }777 }
772 }778 }
@@ -776,13 +782,15 @@ export function initRossMods() {
776 if ($(LPanelPin).prop('checked') == true) {782 if ($(LPanelPin).prop('checked') == true) {
777 //console.log('adding pin class to Left nav');783 //console.log('adding pin class to Left nav');
778 $(LeftNavPanel).addClass('pinnedOpen');784 $(LeftNavPanel).addClass('pinnedOpen');
785 $(LeftNavDrawerIcon).addClass('drawerPinnedOpen');
779 } else {786 } else {
780 //console.log('removing pin class from Left nav');787 //console.log('removing pin class from Left nav');
781 $(LeftNavPanel).removeClass('pinnedOpen');788 $(LeftNavPanel).removeClass('pinnedOpen');
789 $(LeftNavDrawerIcon).removeClass('drawerPinnedOpen');
782790
783 if ($(LeftNavPanel).hasClass('openDrawer') && $('.openDrawer').length > 1) {791 if ($(LeftNavPanel).hasClass('openDrawer') && $('.openDrawer').length > 1) {
784 $(LeftNavPanel).slideToggle(200, 'swing');792 $(LeftNavPanel).slideToggle(200, 'swing');
785 //$(leftNavDrawerIcon).toggleClass('openIcon closedIcon');793 $(LeftNavDrawerIcon).toggleClass('openIcon closedIcon');
786 $(LeftNavPanel).toggleClass('openDrawer closedDrawer');794 $(LeftNavPanel).toggleClass('openDrawer closedDrawer');
787 }795 }
788 }796 }
@@ -793,14 +801,16 @@ export function initRossMods() {
793 if ($(WIPanelPin).prop('checked') == true) {801 if ($(WIPanelPin).prop('checked') == true) {
794 console.debug('adding pin class to WI');802 console.debug('adding pin class to WI');
795 $(WorldInfo).addClass('pinnedOpen');803 $(WorldInfo).addClass('pinnedOpen');
804 $(WIDrawerIcon).addClass('drawerPinnedOpen');
796 } else {805 } else {
797 console.debug('removing pin class from WI');806 console.debug('removing pin class from WI');
798 $(WorldInfo).removeClass('pinnedOpen');807 $(WorldInfo).removeClass('pinnedOpen');
808 $(WIDrawerIcon).removeClass('drawerPinnedOpen');
799809
800 if ($(WorldInfo).hasClass('openDrawer') && $('.openDrawer').length > 1) {810 if ($(WorldInfo).hasClass('openDrawer') && $('.openDrawer').length > 1) {
801 console.debug('closing WI after lock removal');811 console.debug('closing WI after lock removal');
802 $(WorldInfo).slideToggle(200, 'swing');812 $(WorldInfo).slideToggle(200, 'swing');
803 //$(WorldInfoDrawerIcon).toggleClass('openIcon closedIcon');813 $(WIDrawerIcon).toggleClass('openIcon closedIcon');
804 $(WorldInfo).toggleClass('openDrawer closedDrawer');814 $(WorldInfo).toggleClass('openDrawer closedDrawer');
805 }815 }
806 }816 }
@@ -811,20 +821,24 @@ export function initRossMods() {
811 if (LoadLocalBool('NavLockOn') == true) {821 if (LoadLocalBool('NavLockOn') == true) {
812 //console.log('setting pin class via local var');822 //console.log('setting pin class via local var');
813 $(RightNavPanel).addClass('pinnedOpen');823 $(RightNavPanel).addClass('pinnedOpen');
824 $(RightNavDrawerIcon).addClass('drawerPinnedOpen');
814 }825 }
815 if ($(RPanelPin).prop('checked')) {826 if ($(RPanelPin).prop('checked')) {
816 console.debug('setting pin class via checkbox state');827 console.debug('setting pin class via checkbox state');
817 $(RightNavPanel).addClass('pinnedOpen');828 $(RightNavPanel).addClass('pinnedOpen');
829 $(RightNavDrawerIcon).addClass('drawerPinnedOpen');
818 }830 }
819 // read the state of left Nav Lock and apply to leftnav classlist831 // read the state of left Nav Lock and apply to leftnav classlist
820 $(LPanelPin).prop('checked', LoadLocalBool('LNavLockOn'));832 $(LPanelPin).prop('checked', LoadLocalBool('LNavLockOn'));
821 if (LoadLocalBool('LNavLockOn') == true) {833 if (LoadLocalBool('LNavLockOn') == true) {
822 //console.log('setting pin class via local var');834 //console.log('setting pin class via local var');
823 $(LeftNavPanel).addClass('pinnedOpen');835 $(LeftNavPanel).addClass('pinnedOpen');
836 $(LeftNavDrawerIcon).addClass('drawerPinnedOpen');
824 }837 }
825 if ($(LPanelPin).prop('checked')) {838 if ($(LPanelPin).prop('checked')) {
826 console.debug('setting pin class via checkbox state');839 console.debug('setting pin class via checkbox state');
827 $(LeftNavPanel).addClass('pinnedOpen');840 $(LeftNavPanel).addClass('pinnedOpen');
841 $(LeftNavDrawerIcon).addClass('drawerPinnedOpen');
828 }842 }
829843
830 // read the state of left Nav Lock and apply to leftnav classlist844 // read the state of left Nav Lock and apply to leftnav classlist
@@ -832,11 +846,13 @@ export function initRossMods() {
832 if (LoadLocalBool('WINavLockOn') == true) {846 if (LoadLocalBool('WINavLockOn') == true) {
833 //console.log('setting pin class via local var');847 //console.log('setting pin class via local var');
834 $(WorldInfo).addClass('pinnedOpen');848 $(WorldInfo).addClass('pinnedOpen');
849 $(WIDrawerIcon).addClass('drawerPinnedOpen');
835 }850 }
836851
837 if ($(WIPanelPin).prop('checked')) {852 if ($(WIPanelPin).prop('checked')) {
838 console.debug('setting pin class via checkbox state');853 console.debug('setting pin class via checkbox state');
839 $(WorldInfo).addClass('pinnedOpen');854 $(WorldInfo).addClass('pinnedOpen');
855 $(WIDrawerIcon).addClass('drawerPinnedOpen');
840 }856 }
841857
842 //save state of Right nav being open or closed858 //save state of Right nav being open or closed
@@ -1026,6 +1042,7 @@ export function initRossMods() {
1026 const editMesDone = $('.mes_edit_done:visible');1042 const editMesDone = $('.mes_edit_done:visible');
1027 if (editMesDone.length > 0) {1043 if (editMesDone.length > 0) {
1028 console.debug('Accepting edits with Ctrl+Enter');1044 console.debug('Accepting edits with Ctrl+Enter');
1045 $('#send_textarea').focus();
1029 editMesDone.trigger('click');1046 editMesDone.trigger('click');
1030 return;1047 return;
1031 } else if (is_send_press == false) {1048 } else if (is_send_press == false) {
public/scripts/authors-note.js+10 -9
@@ -16,6 +16,7 @@ import { SlashCommandParser } from './slash-commands/SlashCommandParser.js';
16import { SlashCommand } from './slash-commands/SlashCommand.js';16import { SlashCommand } from './slash-commands/SlashCommand.js';
17import { ARGUMENT_TYPE, SlashCommandArgument } from './slash-commands/SlashCommandArgument.js';17import { ARGUMENT_TYPE, SlashCommandArgument } from './slash-commands/SlashCommandArgument.js';
18export { MODULE_NAME as NOTE_MODULE_NAME };18export { MODULE_NAME as NOTE_MODULE_NAME };
19import { t } from './i18n.js';
1920
20const MODULE_NAME = '2_floating_prompt'; // <= Deliberate, for sorting lower than memory21const MODULE_NAME = '2_floating_prompt'; // <= Deliberate, for sorting lower than memory
2122
@@ -37,7 +38,7 @@ const chara_note_position = {
3738
38function setNoteTextCommand(_, text) {39function setNoteTextCommand(_, text) {
39 $('#extension_floating_prompt').val(text).trigger('input');40 $('#extension_floating_prompt').val(text).trigger('input');
40 toastr.success('Author\'s Note text updated');41 toastr.success(t`Author's Note text updated`);
41 return '';42 return '';
42}43}
4344
@@ -45,12 +46,12 @@ function setNoteDepthCommand(_, text) {
45 const value = Number(text);46 const value = Number(text);
4647
47 if (Number.isNaN(value)) {48 if (Number.isNaN(value)) {
48 toastr.error('Not a valid number');49 toastr.error(t`Not a valid number`);
49 return;50 return;
50 }51 }
5152
52 $('#extension_floating_depth').val(Math.abs(value)).trigger('input');53 $('#extension_floating_depth').val(Math.abs(value)).trigger('input');
53 toastr.success('Author\'s Note depth updated');54 toastr.success(t`Author's Note depth updated`);
54 return '';55 return '';
55}56}
5657
@@ -58,12 +59,12 @@ function setNoteIntervalCommand(_, text) {
58 const value = Number(text);59 const value = Number(text);
5960
60 if (Number.isNaN(value)) {61 if (Number.isNaN(value)) {
61 toastr.error('Not a valid number');62 toastr.error(t`Not a valid number`);
62 return;63 return;
63 }64 }
6465
65 $('#extension_floating_interval').val(Math.abs(value)).trigger('input');66 $('#extension_floating_interval').val(Math.abs(value)).trigger('input');
66 toastr.success('Author\'s Note frequency updated');67 toastr.success(t`Author's Note frequency updated`);
67 return '';68 return '';
68}69}
6970
@@ -76,12 +77,12 @@ function setNotePositionCommand(_, text) {
76 const position = validPositions[text?.trim()];77 const position = validPositions[text?.trim()];
7778
78 if (Number.isNaN(position)) {79 if (Number.isNaN(position)) {
79 toastr.error('Not a valid position');80 toastr.error(t`Not a valid position`);
80 return;81 return;
81 }82 }
8283
83 $(`input[name="extension_floating_position"][value="${position}"]`).prop('checked', true).trigger('input');84 $(`input[name="extension_floating_position"][value="${position}"]`).prop('checked', true).trigger('input');
84 toastr.info('Author\'s Note position updated');85 toastr.info(t`Author's Note position updated`);
85 return '';86 return '';
86}87}
8788
@@ -206,7 +207,7 @@ function onExtensionFloatingCharaPromptInput() {
206 extension_settings.note.chara.push(tempCharaNote);207 extension_settings.note.chara.push(tempCharaNote);
207 } else {208 } else {
208 console.log('Character author\'s note error: No avatar name key could be found.');209 console.log('Character author\'s note error: No avatar name key could be found.');
209 toastr.error('Something went wrong. Could not save character\'s author\'s note.');210 toastr.error(t`Something went wrong. Could not save character's author's note.`);
210211
211 // Don't save settings if something went wrong212 // Don't save settings if something went wrong
212 return;213 return;
@@ -397,7 +398,7 @@ function onANMenuItemClick() {
397 //because this listener takes priority398 //because this listener takes priority
398 $('#options').stop().fadeOut(animation_duration);399 $('#options').stop().fadeOut(animation_duration);
399 } else {400 } else {
400 toastr.warning('Select a character before trying to use Author\'s Note', '', { timeOut: 2000 });401 toastr.warning(t`Select a character before trying to use Author's Note`, '', { timeOut: 2000 });
401 }402 }
402}403}
403404
public/scripts/chats.js+13 -12
@@ -40,6 +40,7 @@ import { POPUP_RESULT, POPUP_TYPE, Popup, callGenericPopup } from './popup.js';
40import { ScraperManager } from './scrapers.js';40import { ScraperManager } from './scrapers.js';
41import { DragAndDropHandler } from './dragdrop.js';41import { DragAndDropHandler } from './dragdrop.js';
42import { renderTemplateAsync } from './templates.js';42import { renderTemplateAsync } from './templates.js';
43import { t } from './i18n.js';
4344
44/**45/**
45 * @typedef {Object} FileAttachment46 * @typedef {Object} FileAttachment
@@ -206,7 +207,7 @@ export async function populateFileAttachment(message, inputId = 'file_form_input
206 const fileText = await converter(file);207 const fileText = await converter(file);
207 base64Data = window.btoa(unescape(encodeURIComponent(fileText)));208 base64Data = window.btoa(unescape(encodeURIComponent(fileText)));
208 } catch (error) {209 } catch (error) {
209 toastr.error(String(error), 'Could not convert file');210 toastr.error(String(error), t`Could not convert file`);
210 console.error('Could not convert file', error);211 console.error('Could not convert file', error);
211 }212 }
212 }213 }
@@ -257,7 +258,7 @@ export async function uploadFileAttachment(fileName, base64Data) {
257 const responseData = await result.json();258 const responseData = await result.json();
258 return responseData.path;259 return responseData.path;
259 } catch (error) {260 } catch (error) {
260 toastr.error(String(error), 'Could not upload file');261 toastr.error(String(error), t`Could not upload file`);
261 console.error('Could not upload file', error);262 console.error('Could not upload file', error);
262 }263 }
263}264}
@@ -283,7 +284,7 @@ export async function getFileAttachment(url) {
283 const text = await result.text();284 const text = await result.text();
284 return text;285 return text;
285 } catch (error) {286 } catch (error) {
286 toastr.error(error, 'Could not download file');287 toastr.error(error, t`Could not download file`);
287 console.error('Could not download file', error);288 console.error('Could not download file', error);
288 }289 }
289}290}
@@ -299,13 +300,13 @@ async function validateFile(file) {
299 const isBinary = /^[\x00-\x08\x0E-\x1F\x7F-\xFF]*$/.test(fileText);300 const isBinary = /^[\x00-\x08\x0E-\x1F\x7F-\xFF]*$/.test(fileText);
300301
301 if (!isImage && file.size > fileSizeLimit) {302 if (!isImage && file.size > fileSizeLimit) {
302 toastr.error(`File is too big. Maximum size is ${humanFileSize(fileSizeLimit)}.`);303 toastr.error(t`File is too big. Maximum size is ${humanFileSize(fileSizeLimit)}.`);
303 return false;304 return false;
304 }305 }
305306
306 // If file is binary307 // If file is binary
307 if (isBinary && !isImage && !isConvertible(file.type)) {308 if (isBinary && !isImage && !isConvertible(file.type)) {
308 toastr.error('Binary files are not supported. Select a text file or image.');309 toastr.error(t`Binary files are not supported. Select a text file or image.`);
309 return false;310 return false;
310 }311 }
311312
@@ -521,7 +522,7 @@ async function openExternalMediaOverridesDialog() {
521 const entityId = getCurrentEntityId();522 const entityId = getCurrentEntityId();
522523
523 if (!entityId) {524 if (!entityId) {
524 toastr.info('No character or group selected');525 toastr.info(t`No character or group selected`);
525 return;526 return;
526 }527 }
527528
@@ -646,7 +647,7 @@ async function deleteFileFromServer(url, silent = false) {
646 await eventSource.emit(event_types.FILE_ATTACHMENT_DELETED, url);647 await eventSource.emit(event_types.FILE_ATTACHMENT_DELETED, url);
647 return true;648 return true;
648 } catch (error) {649 } catch (error) {
649 toastr.error(String(error), 'Could not delete file');650 toastr.error(String(error), t`Could not delete file`);
650 console.error('Could not delete file', error);651 console.error('Could not delete file', error);
651 return false;652 return false;
652 }653 }
@@ -1054,7 +1055,7 @@ async function openAttachmentManager() {
1054 const selectedAttachments = document.querySelectorAll('.attachmentListItemCheckboxContainer .attachmentListItemCheckbox:checked');1055 const selectedAttachments = document.querySelectorAll('.attachmentListItemCheckboxContainer .attachmentListItemCheckbox:checked');
10551056
1056 if (selectedAttachments.length === 0) {1057 if (selectedAttachments.length === 0) {
1057 toastr.info('No attachments selected.', 'Data Bank');1058 toastr.info(t`No attachments selected.`, t`Data Bank`);
1058 return;1059 return;
1059 }1060 }
10601061
@@ -1168,7 +1169,7 @@ async function runScraper(scraperId, target, callback) {
11681169
1169 if (files.length === 0) {1170 if (files.length === 0) {
1170 console.warn('Scraping returned no files');1171 console.warn('Scraping returned no files');
1171 toastr.info('No files were scraped.', 'Data Bank');1172 toastr.info(t`No files were scraped.`, t`Data Bank`);
1172 return;1173 return;
1173 }1174 }
11741175
@@ -1176,12 +1177,12 @@ async function runScraper(scraperId, target, callback) {
1176 await uploadFileAttachmentToServer(file, target);1177 await uploadFileAttachmentToServer(file, target);
1177 }1178 }
11781179
1179 toastr.success(`Scraped ${files.length} files from ${scraperId} to ${target}.`, 'Data Bank');1180 toastr.success(t`Scraped ${files.length} files from ${scraperId} to ${target}.`, t`Data Bank`);
1180 callback();1181 callback();
1181 }1182 }
1182 catch (error) {1183 catch (error) {
1183 console.error('Scraping failed', error);1184 console.error('Scraping failed', error);
1184 toastr.error('Check browser console for details.', 'Scraping failed');1185 toastr.error(t`Check browser console for details.`, t`Scraping failed`);
1185 }1186 }
1186}1187}
11871188
@@ -1208,7 +1209,7 @@ export async function uploadFileAttachmentToServer(file, target) {
1208 const fileText = await converter(file);1209 const fileText = await converter(file);
1209 base64Data = window.btoa(unescape(encodeURIComponent(fileText)));1210 base64Data = window.btoa(unescape(encodeURIComponent(fileText)));
1210 } catch (error) {1211 } catch (error) {
1211 toastr.error(String(error), 'Could not convert file');1212 toastr.error(String(error), t`Could not convert file`);
1212 console.error('Could not convert file', error);1213 console.error('Could not convert file', error);
1213 }1214 }
1214 } else {1215 } else {
public/scripts/extensions-slashcommands.js+320 -0
@@ -0,0 +1,320 @@
1import { disableExtension, enableExtension, extension_settings, extensionNames } from './extensions.js';
2import { SlashCommand } from './slash-commands/SlashCommand.js';
3import { ARGUMENT_TYPE, SlashCommandArgument, SlashCommandNamedArgument } from './slash-commands/SlashCommandArgument.js';
4import { SlashCommandClosure } from './slash-commands/SlashCommandClosure.js';
5import { commonEnumProviders } from './slash-commands/SlashCommandCommonEnumsProvider.js';
6import { enumTypes, SlashCommandEnumValue } from './slash-commands/SlashCommandEnumValue.js';
7import { SlashCommandParser } from './slash-commands/SlashCommandParser.js';
8import { equalsIgnoreCaseAndAccents, isFalseBoolean, isTrueBoolean } from './utils.js';
9
10/**
11 * @param {'enable' | 'disable' | 'toggle'} action - The action to perform on the extension
12 * @returns {(args: {[key: string]: string | SlashCommandClosure}, extensionName: string | SlashCommandClosure) => Promise<string>}
13 */
14function getExtensionActionCallback(action) {
15 return async (args, extensionName) => {
16 if (args?.reload instanceof SlashCommandClosure) throw new Error('\'reload\' argument cannot be a closure.');
17 if (typeof extensionName !== 'string') throw new Error('Extension name must be a string. Closures or arrays are not allowed.');
18 if (!extensionName) {
19 toastr.warning(`Extension name must be provided as an argument to ${action} this extension.`);
20 return '';
21 }
22
23 const reload = !isFalseBoolean(args?.reload);
24 const internalExtensionName = findExtension(extensionName);
25 if (!internalExtensionName) {
26 toastr.warning(`Extension ${extensionName} does not exist.`);
27 return '';
28 }
29
30 const isEnabled = !extension_settings.disabledExtensions.includes(internalExtensionName);
31
32 if (action === 'enable' && isEnabled) {
33 toastr.info(`Extension ${extensionName} is already enabled.`);
34 return internalExtensionName;
35 }
36
37 if (action === 'disable' && !isEnabled) {
38 toastr.info(`Extension ${extensionName} is already disabled.`);
39 return internalExtensionName;
40 }
41
42 if (action === 'toggle') {
43 action = isEnabled ? 'disable' : 'enable';
44 }
45
46 if (reload) {
47 toastr.info(`${action.charAt(0).toUpperCase() + action.slice(1)}ing extension ${extensionName} and reloading...`);
48
49 // Clear input, so it doesn't stay because the command didn't "finish",
50 // and wait for a bit to both show the toast and let the clear bubble through.
51 $('#send_textarea').val('')[0].dispatchEvent(new Event('input', { bubbles: true }));
52 await new Promise(resolve => setTimeout(resolve, 100));
53 }
54
55 if (action === 'enable') {
56 await enableExtension(internalExtensionName, reload);
57 } else {
58 await disableExtension(internalExtensionName, reload);
59 }
60
61 toastr.success(`Extension ${extensionName} ${action}d.`);
62
63
64 console.info(`Extension ${action}ed: ${extensionName}`);
65 if (!reload) {
66 console.info('Reload not requested, so page needs to be reloaded manually for changes to take effect.');
67 }
68
69 return internalExtensionName;
70 };
71}
72
73/**
74 * Finds an extension by name, allowing omission of the "third-party/" prefix.
75 *
76 * @param {string} name - The name of the extension to find
77 * @returns {string?} - The matched extension name or undefined if not found
78 */
79function findExtension(name) {
80 return extensionNames.find(extName => {
81 return equalsIgnoreCaseAndAccents(extName, name) || equalsIgnoreCaseAndAccents(extName, `third-party/${name}`);
82 });
83}
84
85/**
86 * Provides an array of SlashCommandEnumValue objects based on the extension names.
87 * Each object contains the name of the extension and a description indicating if it is a third-party extension.
88 *
89 * @returns {SlashCommandEnumValue[]} An array of SlashCommandEnumValue objects
90 */
91const extensionNamesEnumProvider = () => extensionNames.map(name => {
92 const isThirdParty = name.startsWith('third-party/');
93 if (isThirdParty) name = name.slice('third-party/'.length);
94
95 const description = isThirdParty ? 'third party extension' : null;
96
97 return new SlashCommandEnumValue(name, description, !isThirdParty ? enumTypes.name : enumTypes.enum);
98});
99
100export function registerExtensionSlashCommands() {
101 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
102 name: 'extension-enable',
103 callback: getExtensionActionCallback('enable'),
104 returns: 'The internal extension name',
105 namedArgumentList: [
106 SlashCommandNamedArgument.fromProps({
107 name: 'reload',
108 description: 'Whether to reload the page after enabling the extension',
109 typeList: [ARGUMENT_TYPE.BOOLEAN],
110 defaultValue: 'true',
111 enumList: commonEnumProviders.boolean('trueFalse')(),
112 }),
113 ],
114 unnamedArgumentList: [
115 SlashCommandArgument.fromProps({
116 description: 'Extension name',
117 typeList: [ARGUMENT_TYPE.STRING],
118 isRequired: true,
119 enumProvider: extensionNamesEnumProvider,
120 forceEnum: true,
121 }),
122 ],
123 helpString: `
124 <div>
125 Enables a specified extension.
126 </div>
127 <div>
128 By default, the page will be reloaded automatically, stopping any further commands.<br />
129 If <code>reload=false</code> named argument is passed, the page will not be reloaded, and the extension will stay disabled until refreshed.
130 The page either needs to be refreshed, or <code>/reload-page</code> has to be called.
131 </div>
132 <div>
133 <strong>Example:</strong>
134 <ul>
135 <li>
136 <pre><code class="language-stscript">/extension-enable Summarize</code></pre>
137 </li>
138 </ul>
139 </div>
140 `,
141 }));
142 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
143 name: 'extension-disable',
144 callback: getExtensionActionCallback('disable'),
145 returns: 'The internal extension name',
146 namedArgumentList: [
147 SlashCommandNamedArgument.fromProps({
148 name: 'reload',
149 description: 'Whether to reload the page after disabling the extension',
150 typeList: [ARGUMENT_TYPE.BOOLEAN],
151 defaultValue: 'true',
152 enumList: commonEnumProviders.boolean('trueFalse')(),
153 }),
154 ],
155 unnamedArgumentList: [
156 SlashCommandArgument.fromProps({
157 description: 'Extension name',
158 typeList: [ARGUMENT_TYPE.STRING],
159 isRequired: true,
160 enumProvider: extensionNamesEnumProvider,
161 forceEnum: true,
162 }),
163 ],
164 helpString: `
165 <div>
166 Disables a specified extension.
167 </div>
168 <div>
169 By default, the page will be reloaded automatically, stopping any further commands.<br />
170 If <code>reload=false</code> named argument is passed, the page will not be reloaded, and the extension will stay enabled until refreshed.
171 The page either needs to be refreshed, or <code>/reload-page</code> has to be called.
172 </div>
173 <div>
174 <strong>Example:</strong>
175 <ul>
176 <li>
177 <pre><code class="language-stscript">/extension-disable Summarize</code></pre>
178 </li>
179 </ul>
180 </div>
181 `,
182 }));
183 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
184 name: 'extension-toggle',
185 callback: async (args, extensionName) => {
186 if (args?.state instanceof SlashCommandClosure) throw new Error('\'state\' argument cannot be a closure.');
187 if (typeof extensionName !== 'string') throw new Error('Extension name must be a string. Closures or arrays are not allowed.');
188
189 const action = isTrueBoolean(args?.state) ? 'enable' :
190 isFalseBoolean(args?.state) ? 'disable' :
191 'toggle';
192
193 return await getExtensionActionCallback(action)(args, extensionName);
194 },
195 returns: 'The internal extension name',
196 namedArgumentList: [
197 SlashCommandNamedArgument.fromProps({
198 name: 'reload',
199 description: 'Whether to reload the page after toggling the extension',
200 typeList: [ARGUMENT_TYPE.BOOLEAN],
201 defaultValue: 'true',
202 enumList: commonEnumProviders.boolean('trueFalse')(),
203 }),
204 SlashCommandNamedArgument.fromProps({
205 name: 'state',
206 description: 'Explicitly set the state of the extension (true to enable, false to disable). If not provided, the state will be toggled to the opposite of the current state.',
207 typeList: [ARGUMENT_TYPE.BOOLEAN],
208 enumList: commonEnumProviders.boolean('trueFalse')(),
209 }),
210 ],
211 unnamedArgumentList: [
212 SlashCommandArgument.fromProps({
213 description: 'Extension name',
214 typeList: [ARGUMENT_TYPE.STRING],
215 isRequired: true,
216 enumProvider: extensionNamesEnumProvider,
217 forceEnum: true,
218 }),
219 ],
220 helpString: `
221 <div>
222 Toggles the state of a specified extension.
223 </div>
224 <div>
225 By default, the page will be reloaded automatically, stopping any further commands.<br />
226 If <code>reload=false</code> named argument is passed, the page will not be reloaded, and the extension will stay in its current state until refreshed.
227 The page either needs to be refreshed, or <code>/reload-page</code> has to be called.
228 </div>
229 <div>
230 <strong>Example:</strong>
231 <ul>
232 <li>
233 <pre><code class="language-stscript">/extension-toggle Summarize</code></pre>
234 </li>
235 <li>
236 <pre><code class="language-stscript">/extension-toggle Summarize state=true</code></pre>
237 </li>
238 </ul>
239 </div>
240 `,
241 }));
242 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
243 name: 'extension-state',
244 callback: async (_, extensionName) => {
245 if (typeof extensionName !== 'string') throw new Error('Extension name must be a string. Closures or arrays are not allowed.');
246 const internalExtensionName = findExtension(extensionName);
247 if (!internalExtensionName) {
248 toastr.warning(`Extension ${extensionName} does not exist.`);
249 return '';
250 }
251
252 const isEnabled = !extension_settings.disabledExtensions.includes(internalExtensionName);
253 return String(isEnabled);
254 },
255 returns: 'The state of the extension, whether it is enabled.',
256 unnamedArgumentList: [
257 SlashCommandArgument.fromProps({
258 description: 'Extension name',
259 typeList: [ARGUMENT_TYPE.STRING],
260 isRequired: true,
261 enumProvider: extensionNamesEnumProvider,
262 forceEnum: true,
263 }),
264 ],
265 helpString: `
266 <div>
267 Returns the state of a specified extension (true if enabled, false if disabled).
268 </div>
269 <div>
270 <strong>Example:</strong>
271 <ul>
272 <li>
273 <pre><code class="language-stscript">/extension-state Summarize</code></pre>
274 </li>
275 </ul>
276 </div>
277 `,
278 }));
279 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
280 name: 'extension-exists',
281 aliases: ['extension-installed'],
282 callback: async (_, extensionName) => {
283 if (typeof extensionName !== 'string') throw new Error('Extension name must be a string. Closures or arrays are not allowed.');
284 const exists = findExtension(extensionName) !== undefined;
285 return exists ? 'true' : 'false';
286 },
287 returns: 'Whether the extension exists and is installed.',
288 unnamedArgumentList: [
289 SlashCommandArgument.fromProps({
290 description: 'Extension name',
291 typeList: [ARGUMENT_TYPE.STRING],
292 isRequired: true,
293 enumProvider: extensionNamesEnumProvider,
294 }),
295 ],
296 helpString: `
297 <div>
298 Checks if a specified extension exists.
299 </div>
300 <div>
301 <strong>Example:</strong>
302 <ul>
303 <li>
304 <pre><code class="language-stscript">/extension-exists SillyTavern-LALib</code></pre>
305 </li>
306 </ul>
307 </div>
308 `,
309 }));
310
311 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
312 name: 'reload-page',
313 callback: async () => {
314 toastr.info('Reloading the page...');
315 location.reload();
316 return '';
317 },
318 helpString: 'Reloads the current page. All further commands will not be processed.',
319 }));
320}
public/scripts/extensions.js+9 -5
@@ -1,5 +1,5 @@
1import { eventSource, event_types, saveSettings, saveSettingsDebounced, getRequestHeaders, animation_duration } from '../script.js';1import { eventSource, event_types, saveSettings, saveSettingsDebounced, getRequestHeaders, animation_duration } from '../script.js';
2import { hideLoader, showLoader } from './loader.js';2import { showLoader } from './loader.js';
3import { POPUP_RESULT, POPUP_TYPE, Popup, callGenericPopup } from './popup.js';3import { POPUP_RESULT, POPUP_TYPE, Popup, callGenericPopup } from './popup.js';
4import { renderTemplate, renderTemplateAsync } from './templates.js';4import { renderTemplate, renderTemplateAsync } from './templates.js';
5import { isSubsetOf, setValueByPath } from './utils.js';5import { isSubsetOf, setValueByPath } from './utils.js';
@@ -14,7 +14,9 @@ export {
14 ModuleWorkerWrapper,14 ModuleWorkerWrapper,
15};15};
1616
17/** @type {string[]} */
17export let extensionNames = [];18export let extensionNames = [];
19
18let manifests = {};20let manifests = {};
19const defaultUrl = 'http://localhost:5100';21const defaultUrl = 'http://localhost:5100';
2022
@@ -241,7 +243,7 @@ function onEnableExtensionClick() {
241 enableExtension(name, false);243 enableExtension(name, false);
242}244}
243245
244async function enableExtension(name, reload = true) {246export async function enableExtension(name, reload = true) {
245 extension_settings.disabledExtensions = extension_settings.disabledExtensions.filter(x => x !== name);247 extension_settings.disabledExtensions = extension_settings.disabledExtensions.filter(x => x !== name);
246 stateChanged = true;248 stateChanged = true;
247 await saveSettings();249 await saveSettings();
@@ -252,7 +254,7 @@ async function enableExtension(name, reload = true) {
252 }254 }
253}255}
254256
255async function disableExtension(name, reload = true) {257export async function disableExtension(name, reload = true) {
256 extension_settings.disabledExtensions.push(name);258 extension_settings.disabledExtensions.push(name);
257 stateChanged = true;259 stateChanged = true;
258 await saveSettings();260 await saveSettings();
@@ -1041,7 +1043,9 @@ export async function openThirdPartyExtensionMenu(suggestUrl = '') {
1041 await installExtension(url);1043 await installExtension(url);
1042}1044}
10431045
1044jQuery(async function () {1046
1047
1048export async function initExtensions() {
1045 await addExtensionsButtonAndMenu();1049 await addExtensionsButtonAndMenu();
1046 $('#extensionsMenuButton').css('display', 'flex');1050 $('#extensionsMenuButton').css('display', 'flex');
10471051
@@ -1060,4 +1064,4 @@ jQuery(async function () {
1060 * @listens #third_party_extension_button#click - The click event of the '#third_party_extension_button' element.1064 * @listens #third_party_extension_button#click - The click event of the '#third_party_extension_button' element.
1061 */1065 */
1062 $('#third_party_extension_button').on('click', () => openThirdPartyExtensionMenu());1066 $('#third_party_extension_button').on('click', () => openThirdPartyExtensionMenu());
1063});1067}
public/scripts/extensions/assets/index.js+9 -0
@@ -184,6 +184,7 @@ function downloadAssetsList(url) {
184 const url = isValidUrl(asset['url']) ? asset['url'] : '';184 const url = isValidUrl(asset['url']) ? asset['url'] : '';
185 const title = assetType === 'extension' ? `Extension repo/guide: ${url}` : 'Preview in browser';185 const title = assetType === 'extension' ? `Extension repo/guide: ${url}` : 'Preview in browser';
186 const previewIcon = (assetType === 'extension' || assetType === 'character') ? 'fa-arrow-up-right-from-square' : 'fa-headphones-simple';186 const previewIcon = (assetType === 'extension' || assetType === 'character') ? 'fa-arrow-up-right-from-square' : 'fa-headphones-simple';
187 const toolTag = assetType === 'extension' && asset['tool'];
187188
188 const assetBlock = $('<i></i>')189 const assetBlock = $('<i></i>')
189 .append(element)190 .append(element)
@@ -193,12 +194,20 @@ function downloadAssetsList(url) {
193 <a class="asset_preview" href="${url}" target="_blank" title="${title}">194 <a class="asset_preview" href="${url}" target="_blank" title="${title}">
194 <i class="fa-solid fa-sm ${previewIcon}"></i>195 <i class="fa-solid fa-sm ${previewIcon}"></i>
195 </a>196 </a>
197 ${toolTag ? '<span class="tag" title="Adds a function tool"><i class="fa-solid fa-sm fa-wrench"></i> Tool</span>' : ''}
196 </span>198 </span>
197 <small class="asset-description">199 <small class="asset-description">
198 ${description}200 ${description}
199 </small>201 </small>
200 </div>`);202 </div>`);
201203
204 assetBlock.find('.tag').on('click', function (e) {
205 const a = document.createElement('a');
206 a.href = 'https://docs.sillytavern.app/for-contributors/function-calling/';
207 a.target = '_blank';
208 a.click();
209 });
210
202 if (assetType === 'character') {211 if (assetType === 'character') {
203 if (asset.highlight) {212 if (asset.highlight) {
204 assetBlock.find('.asset-name').append('<i class="fa-solid fa-sm fa-trophy"></i>');213 assetBlock.find('.asset-name').append('<i class="fa-solid fa-sm fa-trophy"></i>');
public/scripts/extensions/assets/style.css+9 -0
@@ -164,3 +164,12 @@
164 gap: 5px;164 gap: 5px;
165 align-items: center;165 align-items: center;
166}166}
167
168.asset-name .tag {
169 gap: 5px;
170 align-items: baseline;
171 font-size: calc(var(--mainFontSize)* 0.8);
172 cursor: pointer;
173 opacity: 0.9;
174 margin-left: 2px;
175}
public/scripts/extensions/attachments/index.js+21 -0
@@ -1,3 +1,4 @@
1import { event_types, eventSource, saveSettingsDebounced } from '../../../script.js';
1import { deleteAttachment, getDataBankAttachments, getDataBankAttachmentsForSource, getFileAttachment, uploadFileAttachmentToServer } from '../../chats.js';2import { deleteAttachment, getDataBankAttachments, getDataBankAttachmentsForSource, getFileAttachment, uploadFileAttachmentToServer } from '../../chats.js';
2import { extension_settings, renderExtensionTemplateAsync } from '../../extensions.js';3import { extension_settings, renderExtensionTemplateAsync } from '../../extensions.js';
3import { SlashCommand } from '../../slash-commands/SlashCommand.js';4import { SlashCommand } from '../../slash-commands/SlashCommand.js';
@@ -196,7 +197,27 @@ async function enableDataBankAttachment(args, value) {
196 return '';197 return '';
197}198}
198199
200function cleanUpAttachments() {
201 let shouldSaveSettings = false;
202 if (extension_settings.character_attachments) {
203 Object.values(extension_settings.character_attachments).flat().filter(a => a.text).forEach(a => {
204 shouldSaveSettings = true;
205 delete a.text;
206 });
207 }
208 if (Array.isArray(extension_settings.attachments)) {
209 extension_settings.attachments.filter(a => a.text).forEach(a => {
210 shouldSaveSettings = true;
211 delete a.text;
212 });
213 }
214 if (shouldSaveSettings) {
215 saveSettingsDebounced();
216 }
217}
218
199jQuery(async () => {219jQuery(async () => {
220 eventSource.on(event_types.APP_READY, cleanUpAttachments);
200 const manageButton = await renderExtensionTemplateAsync('attachments', 'manage-button', {});221 const manageButton = await renderExtensionTemplateAsync('attachments', 'manage-button', {});
201 const attachButton = await renderExtensionTemplateAsync('attachments', 'attach-button', {});222 const attachButton = await renderExtensionTemplateAsync('attachments', 'attach-button', {});
202 $('#data_bank_wand_container').append(manageButton);223 $('#data_bank_wand_container').append(manageButton);
public/scripts/extensions/caption/index.js+1 -0
@@ -403,6 +403,7 @@ jQuery(async function () {
403 (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'openai' && (secret_state[SECRET_KEYS.OPENAI] || extension_settings.caption.allow_reverse_proxy)) ||403 (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'openai' && (secret_state[SECRET_KEYS.OPENAI] || extension_settings.caption.allow_reverse_proxy)) ||
404 (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'openrouter' && secret_state[SECRET_KEYS.OPENROUTER]) ||404 (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'openrouter' && secret_state[SECRET_KEYS.OPENROUTER]) ||
405 (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'zerooneai' && secret_state[SECRET_KEYS.ZEROONEAI]) ||405 (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'zerooneai' && secret_state[SECRET_KEYS.ZEROONEAI]) ||
406 (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'groq' && secret_state[SECRET_KEYS.GROQ]) ||
406 (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'mistral' && (secret_state[SECRET_KEYS.MISTRALAI] || extension_settings.caption.allow_reverse_proxy)) ||407 (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'mistral' && (secret_state[SECRET_KEYS.MISTRALAI] || extension_settings.caption.allow_reverse_proxy)) ||
407 (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'google' && (secret_state[SECRET_KEYS.MAKERSUITE] || extension_settings.caption.allow_reverse_proxy)) ||408 (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'google' && (secret_state[SECRET_KEYS.MAKERSUITE] || extension_settings.caption.allow_reverse_proxy)) ||
408 (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'anthropic' && (secret_state[SECRET_KEYS.CLAUDE] || extension_settings.caption.allow_reverse_proxy)) ||409 (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'anthropic' && (secret_state[SECRET_KEYS.CLAUDE] || extension_settings.caption.allow_reverse_proxy)) ||
public/scripts/extensions/caption/settings.html+7 -0
@@ -21,6 +21,7 @@
21 <option value="anthropic">Anthropic</option>21 <option value="anthropic">Anthropic</option>
22 <option value="custom" data-i18n="Custom (OpenAI-compatible)">Custom (OpenAI-compatible)</option>22 <option value="custom" data-i18n="Custom (OpenAI-compatible)">Custom (OpenAI-compatible)</option>
23 <option value="google">Google AI Studio</option>23 <option value="google">Google AI Studio</option>
24 <option value="groq">Groq</option>
24 <option value="koboldcpp">KoboldCpp</option>25 <option value="koboldcpp">KoboldCpp</option>
25 <option value="llamacpp">llama.cpp</option>26 <option value="llamacpp">llama.cpp</option>
26 <option value="mistral">MistralAI</option>27 <option value="mistral">MistralAI</option>
@@ -49,14 +50,20 @@
49 <option data-type="google" value="gemini-1.5-flash">gemini-1.5-flash</option>50 <option data-type="google" value="gemini-1.5-flash">gemini-1.5-flash</option>
50 <option data-type="google" value="gemini-1.5-flash-latest">gemini-1.5-flash-latest</option>51 <option data-type="google" value="gemini-1.5-flash-latest">gemini-1.5-flash-latest</option>
51 <option data-type="google" value="gemini-1.5-flash-001">gemini-1.5-flash-001</option>52 <option data-type="google" value="gemini-1.5-flash-001">gemini-1.5-flash-001</option>
53 <option data-type="google" value="gemini-1.5-flash-002">gemini-1.5-flash-002</option>
52 <option data-type="google" value="gemini-1.5-flash-exp-0827">gemini-1.5-flash-exp-0827</option>54 <option data-type="google" value="gemini-1.5-flash-exp-0827">gemini-1.5-flash-exp-0827</option>
53 <option data-type="google" value="gemini-1.5-flash-8b-exp-0827">gemini-1.5-flash-8b-exp-0827</option>55 <option data-type="google" value="gemini-1.5-flash-8b-exp-0827">gemini-1.5-flash-8b-exp-0827</option>
56 <option data-type="google" value="gemini-1.5-flash-8b-exp-0924">gemini-1.5-flash-8b-exp-0924</option>
54 <option data-type="google" value="gemini-1.5-pro">gemini-1.5-pro</option>57 <option data-type="google" value="gemini-1.5-pro">gemini-1.5-pro</option>
55 <option data-type="google" value="gemini-1.5-pro-latest">gemini-1.5-pro-latest</option>58 <option data-type="google" value="gemini-1.5-pro-latest">gemini-1.5-pro-latest</option>
56 <option data-type="google" value="gemini-1.5-pro-001">gemini-1.5-pro-001</option>59 <option data-type="google" value="gemini-1.5-pro-001">gemini-1.5-pro-001</option>
60 <option data-type="google" value="gemini-1.5-pro-002">gemini-1.5-pro-002</option>
57 <option data-type="google" value="gemini-1.5-pro-exp-0801">gemini-1.5-pro-exp-0801</option>61 <option data-type="google" value="gemini-1.5-pro-exp-0801">gemini-1.5-pro-exp-0801</option>
58 <option data-type="google" value="gemini-1.5-pro-exp-0827">gemini-1.5-pro-exp-0827</option>62 <option data-type="google" value="gemini-1.5-pro-exp-0827">gemini-1.5-pro-exp-0827</option>
59 <option data-type="google" value="gemini-pro-vision">gemini-pro-vision</option>63 <option data-type="google" value="gemini-pro-vision">gemini-pro-vision</option>
64 <option data-type="groq" value="llama-3.2-11b-vision-preview">llama-3.2-11b-vision-preview</option>
65 <option data-type="groq" value="llama-3.2-90b-vision-preview">llama-3.2-90b-vision-preview</option>
66 <option data-type="groq" value="llava-v1.5-7b-4096-preview">llava-v1.5-7b-4096-preview</option>
60 <option data-type="openrouter" value="openai/gpt-4-vision-preview">openai/gpt-4-vision-preview</option>67 <option data-type="openrouter" value="openai/gpt-4-vision-preview">openai/gpt-4-vision-preview</option>
61 <option data-type="openrouter" value="openai/gpt-4o">openai/gpt-4o</option>68 <option data-type="openrouter" value="openai/gpt-4o">openai/gpt-4o</option>
62 <option data-type="openrouter" value="openai/gpt-4o-2024-05-13">openai/gpt-4o-2024-05-13</option>69 <option data-type="openrouter" value="openai/gpt-4o-2024-05-13">openai/gpt-4o-2024-05-13</option>
public/scripts/extensions/connection-manager/edit.html+12 -0
@@ -0,0 +1,12 @@
1<div>
2 <h3>Included settings:</h3>
3 <div class="justifyLeft flex-container flexFlowColumn flexNoGap">
4 {{#each settings}}
5 <label class="checkbox_label">
6 <input type="checkbox" value="{{@key}}" name="exclude"{{#if this}} checked{{/if}}>
7 <span>{{@key}}</span>
8 </label>
9 {{/each}}
10 </div>
11 <h3 data-i18n="Profile name:">Profile name:</h3>
12</div>
public/scripts/extensions/connection-manager/index.js+93 -12
@@ -1,6 +1,6 @@
1import { event_types, eventSource, main_api, saveSettingsDebounced } from '../../../script.js';1import { event_types, eventSource, main_api, saveSettingsDebounced } from '../../../script.js';
2import { extension_settings, renderExtensionTemplateAsync } from '../../extensions.js';2import { extension_settings, renderExtensionTemplateAsync } from '../../extensions.js';
3import { callGenericPopup, Popup, POPUP_TYPE } from '../../popup.js';3import { callGenericPopup, Popup, POPUP_RESULT, POPUP_TYPE } from '../../popup.js';
4import { SlashCommand } from '../../slash-commands/SlashCommand.js';4import { SlashCommand } from '../../slash-commands/SlashCommand.js';
5import { SlashCommandAbortController } from '../../slash-commands/SlashCommandAbortController.js';5import { SlashCommandAbortController } from '../../slash-commands/SlashCommandAbortController.js';
6import { ARGUMENT_TYPE, SlashCommandArgument, SlashCommandNamedArgument } from '../../slash-commands/SlashCommandArgument.js';6import { ARGUMENT_TYPE, SlashCommandArgument, SlashCommandNamedArgument } from '../../slash-commands/SlashCommandArgument.js';
@@ -10,6 +10,7 @@ import { enumTypes, SlashCommandEnumValue } from '../../slash-commands/SlashComm
10import { SlashCommandParser } from '../../slash-commands/SlashCommandParser.js';10import { SlashCommandParser } from '../../slash-commands/SlashCommandParser.js';
11import { SlashCommandScope } from '../../slash-commands/SlashCommandScope.js';11import { SlashCommandScope } from '../../slash-commands/SlashCommandScope.js';
12import { collapseSpaces, getUniqueName, isFalseBoolean, uuidv4 } from '../../utils.js';12import { collapseSpaces, getUniqueName, isFalseBoolean, uuidv4 } from '../../utils.js';
13import { t } from '../../i18n.js';
1314
14const MODULE_NAME = 'connection-manager';15const MODULE_NAME = 'connection-manager';
15const NONE = '<None>';16const NONE = '<None>';
@@ -135,6 +136,7 @@ const profilesProvider = () => [
135 * @property {string} [context] Context Template136 * @property {string} [context] Context Template
136 * @property {string} [instruct-state] Instruct Mode137 * @property {string} [instruct-state] Instruct Mode
137 * @property {string} [tokenizer] Tokenizer138 * @property {string} [tokenizer] Tokenizer
139 * @property {string[]} [exclude] Commands to exclude
138 */140 */
139141
140/**142/**
@@ -171,8 +173,13 @@ function findProfileByName(value) {
171async function readProfileFromCommands(mode, profile, cleanUp = false) {173async function readProfileFromCommands(mode, profile, cleanUp = false) {
172 const commands = mode === 'cc' ? CC_COMMANDS : TC_COMMANDS;174 const commands = mode === 'cc' ? CC_COMMANDS : TC_COMMANDS;
173 const opposingCommands = mode === 'cc' ? TC_COMMANDS : CC_COMMANDS;175 const opposingCommands = mode === 'cc' ? TC_COMMANDS : CC_COMMANDS;
176 const excludeList = Array.isArray(profile.exclude) ? profile.exclude : [];
174 for (const command of commands) {177 for (const command of commands) {
175 try {178 try {
179 if (excludeList.includes(command)) {
180 continue;
181 }
182
176 const args = getNamedArguments();183 const args = getNamedArguments();
177 const result = await SlashCommandParser.commands[command].callback(args, '');184 const result = await SlashCommandParser.commands[command].callback(args, '');
178 if (result) {185 if (result) {
@@ -208,15 +215,37 @@ async function readProfileFromCommands(mode, profile, cleanUp = false) {
208async function createConnectionProfile(forceName = null) {215async function createConnectionProfile(forceName = null) {
209 const mode = main_api === 'openai' ? 'cc' : 'tc';216 const mode = main_api === 'openai' ? 'cc' : 'tc';
210 const id = uuidv4();217 const id = uuidv4();
218 /** @type {ConnectionProfile} */
211 const profile = {219 const profile = {
212 id,220 id,
213 mode,221 mode,
222 exclude: [],
214 };223 };
215224
216 await readProfileFromCommands(mode, profile);225 await readProfileFromCommands(mode, profile);
217226
218 const profileForDisplay = makeFancyProfile(profile);227 const profileForDisplay = makeFancyProfile(profile);
219 const template = await renderExtensionTemplateAsync(MODULE_NAME, 'profile', { profile: profileForDisplay });228 const template = $(await renderExtensionTemplateAsync(MODULE_NAME, 'profile', { profile: profileForDisplay }));
229 template.find('input[name="exclude"]').on('input', function () {
230 const fancyName = String($(this).val());
231 const keyName = Object.entries(FANCY_NAMES).find(x => x[1] === fancyName)?.[0];
232 if (!keyName) {
233 console.warn('Key not found for fancy name:', fancyName);
234 return;
235 }
236
237 if (!Array.isArray(profile.exclude)) {
238 profile.exclude = [];
239 }
240
241 const excludeState = !$(this).prop('checked');
242 if (excludeState) {
243 profile.exclude.push(keyName);
244 } else {
245 const index = profile.exclude.indexOf(keyName);
246 index !== -1 && profile.exclude.splice(index, 1);
247 }
248 });
220 const isNameTaken = (n) => extension_settings.connectionManager.profiles.some(p => p.name === n);249 const isNameTaken = (n) => extension_settings.connectionManager.profiles.some(p => p.name === n);
221 const suggestedName = getUniqueName(collapseSpaces(`${profile.api ?? ''} ${profile.model ?? ''} - ${profile.preset ?? ''}`), isNameTaken);250 const suggestedName = getUniqueName(collapseSpaces(`${profile.api ?? ''} ${profile.model ?? ''} - ${profile.preset ?? ''}`), isNameTaken);
222 const name = forceName ?? await callGenericPopup(template, POPUP_TYPE.INPUT, suggestedName, { rows: 2 });251 const name = forceName ?? await callGenericPopup(template, POPUP_TYPE.INPUT, suggestedName, { rows: 2 });
@@ -230,7 +259,13 @@ async function createConnectionProfile(forceName = null) {
230 return null;259 return null;
231 }260 }
232261
233 profile.name = name;262 if (Array.isArray(profile.exclude)) {
263 for (const command of profile.exclude) {
264 delete profile[command];
265 }
266 }
267
268 profile.name = String(name);
234 return profile;269 return profile;
235}270}
236271
@@ -250,7 +285,7 @@ async function deleteConnectionProfile() {
250 }285 }
251286
252 const name = extension_settings.connectionManager.profiles[index].name;287 const name = extension_settings.connectionManager.profiles[index].name;
253 const confirm = await Popup.show.confirm('Are you sure you want to delete the selected profile?', name);288 const confirm = await Popup.show.confirm(t`Are you sure you want to delete the selected profile?`, name);
254289
255 if (!confirm) {290 if (!confirm) {
256 return;291 return;
@@ -357,10 +392,14 @@ async function renderDetailsContent(detailsContent) {
357 const profile = extension_settings.connectionManager.profiles.find(p => p.id === selectedProfile);392 const profile = extension_settings.connectionManager.profiles.find(p => p.id === selectedProfile);
358 if (profile) {393 if (profile) {
359 const profileForDisplay = makeFancyProfile(profile);394 const profileForDisplay = makeFancyProfile(profile);
360 const template = await renderExtensionTemplateAsync(MODULE_NAME, 'view', { profile: profileForDisplay });395 const templateParams = { profile: profileForDisplay };
396 if (Array.isArray(profile.exclude) && profile.exclude.length > 0) {
397 templateParams.omitted = profile.exclude.map(e => FANCY_NAMES[e]).join(', ');
398 }
399 const template = await renderExtensionTemplateAsync(MODULE_NAME, 'view', templateParams);
361 detailsContent.innerHTML = template;400 detailsContent.innerHTML = template;
362 } else {401 } else {
363 detailsContent.textContent = 'No profile selected';402 detailsContent.textContent = t`No profile selected`;
364 }403 }
365}404}
366405
@@ -472,29 +511,71 @@ async function renderDetailsContent(detailsContent) {
472 await eventSource.emit(event_types.CONNECTION_PROFILE_LOADED, NONE);511 await eventSource.emit(event_types.CONNECTION_PROFILE_LOADED, NONE);
473 });512 });
474513
475 const renameButton = document.getElementById('rename_connection_profile');514 const editButton = document.getElementById('edit_connection_profile');
476 renameButton.addEventListener('click', async () => {515 editButton.addEventListener('click', async () => {
477 const selectedProfile = extension_settings.connectionManager.selectedProfile;516 const selectedProfile = extension_settings.connectionManager.selectedProfile;
478 const profile = extension_settings.connectionManager.profiles.find(p => p.id === selectedProfile);517 const profile = extension_settings.connectionManager.profiles.find(p => p.id === selectedProfile);
479 if (!profile) {518 if (!profile) {
480 console.log('No profile selected');519 console.log('No profile selected');
481 return;520 return;
482 }521 }
522 if (!Array.isArray(profile.exclude)) {
523 profile.exclude = [];
524 }
525
526 let saveChanges = false;
527 const sortByViewOrder = (a, b) => Object.keys(FANCY_NAMES).indexOf(a) - Object.keys(FANCY_NAMES).indexOf(b);
528 const commands = profile.mode === 'cc' ? CC_COMMANDS : TC_COMMANDS;
529 const settings = commands.slice().sort(sortByViewOrder).reduce((acc, command) => {
530 const fancyName = FANCY_NAMES[command];
531 acc[fancyName] = !profile.exclude.includes(command);
532 return acc;
533 }, {});
534 const template = $(await renderExtensionTemplateAsync(MODULE_NAME, 'edit', { name: profile.name, settings }));
535 const newName = await callGenericPopup(template, POPUP_TYPE.INPUT, profile.name, {
536 customButtons: [{
537 text: t`Save and Update`,
538 classes: ['popup-button-ok'],
539 result: POPUP_RESULT.AFFIRMATIVE,
540 action: () => {
541 saveChanges = true;
542 },
543 }],
544 });
483545
484 const newName = await Popup.show.input('Enter a new name', null, profile.name, { rows: 2 });
485 if (!newName) {546 if (!newName) {
486 return;547 return;
487 }548 }
488549
489 if (extension_settings.connectionManager.profiles.some(p => p.name === newName)) {550 if (profile.name !== newName && extension_settings.connectionManager.profiles.some(p => p.name === newName)) {
490 toastr.error('A profile with the same name already exists.');551 toastr.error('A profile with the same name already exists.');
491 return;552 return;
492 }553 }
493554
494 profile.name = newName;555 const newExcludeList = template.find('input[name="exclude"]:not(:checked)').map(function () {
556 return Object.entries(FANCY_NAMES).find(x => x[1] === String($(this).val()))?.[0];
557 }).get();
558
559 if (newExcludeList.length !== profile.exclude.length || !newExcludeList.every(e => profile.exclude.includes(e))) {
560 profile.exclude = newExcludeList;
561 for (const command of newExcludeList) {
562 delete profile[command];
563 }
564 if (saveChanges) {
565 await updateConnectionProfile(profile);
566 } else {
567 toastr.info('Press "Update" to record them into the profile.', 'Included settings list updated');
568 }
569 }
570
571 if (profile.name !== newName) {
572 toastr.success('Connection profile renamed.');
573 profile.name = String(newName);
574 }
575
495 saveSettingsDebounced();576 saveSettingsDebounced();
496 renderConnectionProfiles(profiles);577 renderConnectionProfiles(profiles);
497 toastr.success('Connection profile renamed', '', { timeOut: 1500 });578 await renderDetailsContent(detailsContent);
498 });579 });
499580
500 /** @type {HTMLElement} */581 /** @type {HTMLElement} */
public/scripts/extensions/connection-manager/profile.html+12 -3
@@ -2,11 +2,20 @@
2 <h2 data-i18n="Creating a Connection Profile">2 <h2 data-i18n="Creating a Connection Profile">
3 Creating a Connection Profile3 Creating a Connection Profile
4 </h2>4 </h2>
5 <ul class="justifyLeft">5 <div class="justifyLeft flex-container flexFlowColumn flexNoGap">
6 {{#each profile}}6 {{#each profile}}
7 <li><strong data-i18n="{{@key}}">{{@key}}:</strong>&nbsp;{{this}}</li>7 <label class="checkbox_label">
8 <input type="checkbox" value="{{@key}}" name="exclude" checked>
9 <span><strong data-i18n="{{@key}}">{{@key}}:</strong>&nbsp;{{this}}</span>
10 </label>
8 {{/each}}11 {{/each}}
9 </ul>12 </div>
13 <div class="marginTop5">
14 <small>
15 <b>Hint:</b>
16 <i>Click on the setting name to omit it from the profile.</i>
17 </small>
18 </div>
10 <h3 data-i18n="Enter a name:">19 <h3 data-i18n="Enter a name:">
11 Enter a name:20 Enter a name:
12 </h3>21 </h3>
public/scripts/extensions/connection-manager/settings.html+1 -1
@@ -13,7 +13,7 @@
13 <i id="view_connection_profile" class="menu_button fa-solid fa-info-circle" title="View connection profile details" data-i18n="[title]View connection profile details"></i>13 <i id="view_connection_profile" class="menu_button fa-solid fa-info-circle" title="View connection profile details" data-i18n="[title]View connection profile details"></i>
14 <i id="create_connection_profile" class="menu_button fa-solid fa-file-circle-plus" title="Create a new connection profile" data-i18n="[title]Create a new connection profile"></i>14 <i id="create_connection_profile" class="menu_button fa-solid fa-file-circle-plus" title="Create a new connection profile" data-i18n="[title]Create a new connection profile"></i>
15 <i id="update_connection_profile" class="menu_button fa-solid fa-save" title="Update a connection profile" data-i18n="[title]Update a connection profile"></i>15 <i id="update_connection_profile" class="menu_button fa-solid fa-save" title="Update a connection profile" data-i18n="[title]Update a connection profile"></i>
16 <i id="rename_connection_profile" class="menu_button fa-solid fa-pencil" title="Rename a connection profile" data-i18n="[title]Rename a connection profile"></i>16 <i id="edit_connection_profile" class="menu_button fa-solid fa-pencil" title="Edit a connection profile" data-i18n="[title]Edit a connection profile"></i>
17 <i id="reload_connection_profile" class="menu_button fa-solid fa-recycle" title="Reload a connection profile" data-i18n="[title]Reload a connection profile"></i>17 <i id="reload_connection_profile" class="menu_button fa-solid fa-recycle" title="Reload a connection profile" data-i18n="[title]Reload a connection profile"></i>
18 <i id="delete_connection_profile" class="menu_button fa-solid fa-trash-can" title="Delete a connection profile" data-i18n="[title]Delete a connection profile"></i>18 <i id="delete_connection_profile" class="menu_button fa-solid fa-trash-can" title="Delete a connection profile" data-i18n="[title]Delete a connection profile"></i>
19 </div>19 </div>
public/scripts/extensions/connection-manager/view.html+5 -0
@@ -3,3 +3,8 @@
3 <li><strong data-i18n="{{@key}}">{{@key}}:</strong>&nbsp;{{this}}</li>3 <li><strong data-i18n="{{@key}}">{{@key}}:</strong>&nbsp;{{this}}</li>
4 {{/each}}4 {{/each}}
5</ul>5</ul>
6{{#if omitted}}
7<div class="margin5">
8 <strong data-i18n="Omitted Settings:">Omitted Settings:</strong>&nbsp;<span>{{omitted}}</span>
9</div>
10{{/if}}
public/scripts/extensions/expressions/index.js+41 -59
@@ -2,16 +2,17 @@ import { callPopup, eventSource, event_types, generateRaw, getRequestHeaders, ma
2import { dragElement, isMobile } from '../../RossAscends-mods.js';2import { dragElement, isMobile } from '../../RossAscends-mods.js';
3import { getContext, getApiUrl, modules, extension_settings, ModuleWorkerWrapper, doExtrasFetch, renderExtensionTemplateAsync } from '../../extensions.js';3import { getContext, getApiUrl, modules, extension_settings, ModuleWorkerWrapper, doExtrasFetch, renderExtensionTemplateAsync } from '../../extensions.js';
4import { loadMovingUIState, power_user } from '../../power-user.js';4import { loadMovingUIState, power_user } from '../../power-user.js';
5import { onlyUnique, debounce, getCharaFilename, trimToEndSentence, trimToStartSentence, waitUntilCondition } from '../../utils.js';5import { onlyUnique, debounce, getCharaFilename, trimToEndSentence, trimToStartSentence, waitUntilCondition, findChar } from '../../utils.js';
6import { hideMutedSprites } from '../../group-chats.js';6import { hideMutedSprites } from '../../group-chats.js';
7import { isJsonSchemaSupported } from '../../textgen-settings.js';7import { isJsonSchemaSupported } from '../../textgen-settings.js';
8import { debounce_timeout } from '../../constants.js';8import { debounce_timeout } from '../../constants.js';
9import { SlashCommandParser } from '../../slash-commands/SlashCommandParser.js';9import { SlashCommandParser } from '../../slash-commands/SlashCommandParser.js';
10import { SlashCommand } from '../../slash-commands/SlashCommand.js';10import { SlashCommand } from '../../slash-commands/SlashCommand.js';
11import { ARGUMENT_TYPE, SlashCommandArgument, SlashCommandNamedArgument } from '../../slash-commands/SlashCommandArgument.js';11import { ARGUMENT_TYPE, SlashCommandArgument, SlashCommandNamedArgument } from '../../slash-commands/SlashCommandArgument.js';
12import { isFunctionCallingSupported } from '../../openai.js';
13import { SlashCommandEnumValue, enumTypes } from '../../slash-commands/SlashCommandEnumValue.js';12import { SlashCommandEnumValue, enumTypes } from '../../slash-commands/SlashCommandEnumValue.js';
14import { commonEnumProviders } from '../../slash-commands/SlashCommandCommonEnumsProvider.js';13import { commonEnumProviders } from '../../slash-commands/SlashCommandCommonEnumsProvider.js';
14import { slashCommandReturnHelper } from '../../slash-commands/SlashCommandReturnHelper.js';
15import { SlashCommandClosure } from '../../slash-commands/SlashCommandClosure.js';
15export { MODULE_NAME };16export { MODULE_NAME };
1617
17const MODULE_NAME = 'expressions';18const MODULE_NAME = 'expressions';
@@ -19,7 +20,6 @@ const UPDATE_INTERVAL = 2000;
19const STREAMING_UPDATE_INTERVAL = 10000;20const STREAMING_UPDATE_INTERVAL = 10000;
20const TALKINGCHECK_UPDATE_INTERVAL = 500;21const TALKINGCHECK_UPDATE_INTERVAL = 500;
21const DEFAULT_FALLBACK_EXPRESSION = 'joy';22const DEFAULT_FALLBACK_EXPRESSION = 'joy';
22const FUNCTION_NAME = 'set_emotion';
23const DEFAULT_LLM_PROMPT = 'Ignore previous instructions. Classify the emotion of the last message. Output just one word, e.g. "joy" or "anger". Choose only one of the following labels: {{labels}}';23const DEFAULT_LLM_PROMPT = 'Ignore previous instructions. Classify the emotion of the last message. Output just one word, e.g. "joy" or "anger". Choose only one of the following labels: {{labels}}';
24const DEFAULT_EXPRESSIONS = [24const DEFAULT_EXPRESSIONS = [
25 'talkinghead',25 'talkinghead',
@@ -1015,10 +1015,6 @@ async function getLlmPrompt(labels) {
1015 return '';1015 return '';
1016 }1016 }
10171017
1018 if (isFunctionCallingSupported()) {
1019 return '';
1020 }
1021
1022 const labelsString = labels.map(x => `"${x}"`).join(', ');1018 const labelsString = labels.map(x => `"${x}"`).join(', ');
1023 const prompt = substituteParamsExtended(String(extension_settings.expressions.llmPrompt), { labels: labelsString });1019 const prompt = substituteParamsExtended(String(extension_settings.expressions.llmPrompt), { labels: labelsString });
1024 return prompt;1020 return prompt;
@@ -1054,41 +1050,6 @@ function parseLlmResponse(emotionResponse, labels) {
1054 throw new Error('Could not parse emotion response ' + emotionResponse);1050 throw new Error('Could not parse emotion response ' + emotionResponse);
1055}1051}
10561052
1057/**
1058 * Registers the function tool for the LLM API.
1059 * @param {FunctionToolRegister} args Function tool register arguments.
1060 */
1061function onFunctionToolRegister(args) {
1062 if (inApiCall && extension_settings.expressions.api === EXPRESSION_API.llm && isFunctionCallingSupported()) {
1063 // Only trigger on quiet mode
1064 if (args.type !== 'quiet') {
1065 return;
1066 }
1067
1068 const emotions = DEFAULT_EXPRESSIONS.filter((e) => e != 'talkinghead');
1069 const jsonSchema = {
1070 $schema: 'http://json-schema.org/draft-04/schema#',
1071 type: 'object',
1072 properties: {
1073 emotion: {
1074 type: 'string',
1075 enum: emotions,
1076 description: `One of the following: ${JSON.stringify(emotions)}`,
1077 },
1078 },
1079 required: [
1080 'emotion',
1081 ],
1082 };
1083 args.registerFunctionTool(
1084 FUNCTION_NAME,
1085 substituteParams('Sets the label that best describes the current emotional state of {{char}}. Only select one of the enumerated values.'),
1086 jsonSchema,
1087 true,
1088 );
1089 }
1090}
1091
1092function onTextGenSettingsReady(args) {1053function onTextGenSettingsReady(args) {
1093 // Only call if inside an API call1054 // Only call if inside an API call
1094 if (inApiCall && extension_settings.expressions.api === EXPRESSION_API.llm && isJsonSchemaSupported()) {1055 if (inApiCall && extension_settings.expressions.api === EXPRESSION_API.llm && isJsonSchemaSupported()) {
@@ -1162,18 +1123,9 @@ export async function getExpressionLabel(text, expressionsApi = extension_settin
11621123
1163 const expressionsList = await getExpressionsList();1124 const expressionsList = await getExpressionsList();
1164 const prompt = substituteParamsExtended(customPrompt, { labels: expressionsList }) || await getLlmPrompt(expressionsList);1125 const prompt = substituteParamsExtended(customPrompt, { labels: expressionsList }) || await getLlmPrompt(expressionsList);
1165 let functionResult = null;
1166 eventSource.once(event_types.TEXT_COMPLETION_SETTINGS_READY, onTextGenSettingsReady);1126 eventSource.once(event_types.TEXT_COMPLETION_SETTINGS_READY, onTextGenSettingsReady);
1167 eventSource.once(event_types.LLM_FUNCTION_TOOL_REGISTER, onFunctionToolRegister);
1168 eventSource.once(event_types.LLM_FUNCTION_TOOL_CALL, (/** @type {FunctionToolCall} */ args) => {
1169 if (args.name !== FUNCTION_NAME) {
1170 return;
1171 }
1172
1173 functionResult = args?.arguments;
1174 });
1175 const emotionResponse = await generateRaw(text, main_api, false, false, prompt);1127 const emotionResponse = await generateRaw(text, main_api, false, false, prompt);
1176 return parseLlmResponse(functionResult || emotionResponse, expressionsList);1128 return parseLlmResponse(emotionResponse, expressionsList);
1177 }1129 }
1178 // Extras1130 // Extras
1179 default: {1131 default: {
@@ -2105,14 +2057,20 @@ function migrateSettings() {
2105 }));2057 }));
2106 SlashCommandParser.addCommandObject(SlashCommand.fromProps({2058 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
2107 name: 'lastsprite',2059 name: 'lastsprite',
2108 callback: (_, value) => lastExpression[String(value).trim()] ?? '',2060 callback: (_, name) => {
2061 if (typeof name !== 'string') throw new Error('name must be a string');
2062 const char = findChar({ name: name });
2063 const sprite = lastExpression[char?.name ?? name] ?? '';
2064 return sprite;
2065 },
2109 returns: 'the last set sprite / expression for the named character.',2066 returns: 'the last set sprite / expression for the named character.',
2110 unnamedArgumentList: [2067 unnamedArgumentList: [
2111 SlashCommandArgument.fromProps({2068 SlashCommandArgument.fromProps({
2112 description: 'character name',2069 description: 'Character name - or unique character identifier (avatar key)',
2113 typeList: [ARGUMENT_TYPE.STRING],2070 typeList: [ARGUMENT_TYPE.STRING],
2114 isRequired: true,2071 isRequired: true,
2115 enumProvider: commonEnumProviders.characters('character'),2072 enumProvider: commonEnumProviders.characters('character'),
2073 forceEnum: true,
2116 }),2074 }),
2117 ],2075 ],
2118 helpString: 'Returns the last set sprite / expression for the named character.',2076 helpString: 'Returns the last set sprite / expression for the named character.',
@@ -2128,18 +2086,42 @@ function migrateSettings() {
2128 name: 'classify-expressions',2086 name: 'classify-expressions',
2129 aliases: ['expressions'],2087 aliases: ['expressions'],
2130 callback: async (args) => {2088 callback: async (args) => {
2131 const list = await getExpressionsList();2089 /** @type {import('../../slash-commands/SlashCommandReturnHelper.js').SlashCommandReturnType} */
2132 switch (String(args.format).toLowerCase()) {2090 // @ts-ignore
2091 let returnType = args.return;
2092
2093 // Old legacy return type handling
2094 if (args.format) {
2095 toastr.warning(`Legacy argument 'format' with value '${args.format}' is deprecated. Please use 'return' instead. Routing to the correct return type...`, 'Deprecation warning');
2096 const type = String(args?.format).toLowerCase().trim();
2097 switch (type) {
2133 case 'json':2098 case 'json':
2134 return JSON.stringify(list);2099 returnType = 'object';
2100 break;
2135 default:2101 default:
2136 return list.join(', ');2102 returnType = 'pipe';
2103 break;
2104 }
2137 }2105 }
2106
2107 // Now the actual new return type handling
2108 const list = await getExpressionsList();
2109
2110 return await slashCommandReturnHelper.doReturn(returnType ?? 'pipe', list, { objectToStringFunc: list => list.join(', ') });
2138 },2111 },
2139 namedArgumentList: [2112 namedArgumentList: [
2140 SlashCommandNamedArgument.fromProps({2113 SlashCommandNamedArgument.fromProps({
2114 name: 'return',
2115 description: 'The way how you want the return value to be provided',
2116 typeList: [ARGUMENT_TYPE.STRING],
2117 defaultValue: 'pipe',
2118 enumList: slashCommandReturnHelper.enumList({ allowObject: true }),
2119 forceEnum: true,
2120 }),
2121 // TODO remove some day
2122 SlashCommandNamedArgument.fromProps({
2141 name: 'format',2123 name: 'format',
2142 description: 'The format to return the list in: comma-separated plain text or JSON array. Default is plain text.',2124 description: '!!! DEPRECATED - use "return" instead !!! The format to return the list in: comma-separated plain text or JSON array. Default is plain text.',
2143 typeList: [ARGUMENT_TYPE.STRING],2125 typeList: [ARGUMENT_TYPE.STRING],
2144 enumList: [2126 enumList: [
2145 new SlashCommandEnumValue('plain', null, enumTypes.enum, ', '),2127 new SlashCommandEnumValue('plain', null, enumTypes.enum, ', '),
public/scripts/extensions/gallery/index.js+9 -6
@@ -26,9 +26,11 @@ let paginationVisiblePages = 10;
26let paginationMaxLinesPerPage = 2;26let paginationMaxLinesPerPage = 2;
27let galleryMaxRows = 3;27let galleryMaxRows = 3;
2828
29$('body').on('click', '.dragClose', function () {29// Remove all draggables associated with the gallery
30 const relatedId = $(this).data('related-id'); // Get the ID of the related draggable30$('#movingDivs').on('click', '.dragClose', function () {
31 $(`body > .draggable[id="${relatedId}"]`).remove(); // Remove the associated draggable31 const relatedId = $(this).data('related-id');
32 if (!relatedId) return;
33 $(`#movingDivs > .draggable[id="${relatedId}"]`).remove();
32});34});
3335
34const CUSTOM_GALLERY_REMOVED_EVENT = 'galleryRemoved';36const CUSTOM_GALLERY_REMOVED_EVENT = 'galleryRemoved';
@@ -290,7 +292,7 @@ function makeMovable(id = 'gallery') {
290292
291 $('#dragGallery').css('display', 'block');293 $('#dragGallery').css('display', 'block');
292294
293 $('body').append(newElement);295 $('#movingDivs').append(newElement);
294296
295 loadMovingUIState();297 loadMovingUIState();
296 $(`.draggable[forChar="${id}"]`).css('display', 'block');298 $(`.draggable[forChar="${id}"]`).css('display', 'block');
@@ -362,8 +364,8 @@ function makeDragImg(id, url) {
362 }364 }
363 }365 }
364366
365 // Step 3: Attach it to the body367 // Step 3: Attach it to the movingDivs container
366 document.body.appendChild(newElement);368 document.getElementById('movingDivs').appendChild(newElement);
367369
368 // Step 4: Call dragElement and loadMovingUIState370 // Step 4: Call dragElement and loadMovingUIState
369 const appendedElement = document.getElementById(uniqueId);371 const appendedElement = document.getElementById(uniqueId);
@@ -439,6 +441,7 @@ SlashCommandParser.addCommandObject(SlashCommand.fromProps({
439 description: 'character name',441 description: 'character name',
440 typeList: [ARGUMENT_TYPE.STRING],442 typeList: [ARGUMENT_TYPE.STRING],
441 enumProvider: commonEnumProviders.characters('character'),443 enumProvider: commonEnumProviders.characters('character'),
444 forceEnum: true,
442 }),445 }),
443 SlashCommandNamedArgument.fromProps({446 SlashCommandNamedArgument.fromProps({
444 name: 'group',447 name: 'group',
public/scripts/extensions/quick-reply/style.css+1 -0
@@ -350,6 +350,7 @@
350}350}
351.popup:has(#qr--modalEditor) {351.popup:has(#qr--modalEditor) {
352 aspect-ratio: unset;352 aspect-ratio: unset;
353 width: unset;
353}354}
354.popup:has(#qr--modalEditor):has(.qr--isExecuting.qr--minimized) {355.popup:has(#qr--modalEditor):has(.qr--isExecuting.qr--minimized) {
355 min-width: unset;356 min-width: unset;
public/scripts/extensions/quick-reply/style.less+1 -0
@@ -415,6 +415,7 @@
415415
416.popup:has(#qr--modalEditor) {416.popup:has(#qr--modalEditor) {
417 aspect-ratio: unset;417 aspect-ratio: unset;
418 width: unset;
418419
419 &:has(.qr--isExecuting.qr--minimized) {420 &:has(.qr--isExecuting.qr--minimized) {
420 min-width: unset;421 min-width: unset;
public/scripts/extensions/regex/editor.html+2 -2
@@ -117,7 +117,7 @@
117 <input type="checkbox" name="disabled" />117 <input type="checkbox" name="disabled" />
118 <span data-i18n="Disabled">Disabled</span>118 <span data-i18n="Disabled">Disabled</span>
119 </label>119 </label>
120 <label class="checkbox flex-container">120 <label class="checkbox flex-container" title="Run the regex script when the message belonging a to specified role(s) is edited.">
121 <input type="checkbox" name="run_on_edit" />121 <input type="checkbox" name="run_on_edit" />
122 <span data-i18n="Run On Edit">Run On Edit</span>122 <span data-i18n="Run On Edit">Run On Edit</span>
123 </label>123 </label>
@@ -132,7 +132,7 @@
132 <small data-i18n="ext_regex_other_options" data-i18n="Ephemerality">Ephemerality</small>132 <small data-i18n="ext_regex_other_options" data-i18n="Ephemerality">Ephemerality</small>
133 <span class="fa-solid fa-circle-question note-link-span" title="By default, regex scripts alter the chat file directly and irreversibly.&#13;Enabling either (or both) of the options below will prevent chat file alteration, while still altering the specified item(s)."></span>133 <span class="fa-solid fa-circle-question note-link-span" title="By default, regex scripts alter the chat file directly and irreversibly.&#13;Enabling either (or both) of the options below will prevent chat file alteration, while still altering the specified item(s)."></span>
134 </span>134 </span>
135 <label class="checkbox flex-container" title="Chat history file contents won't change, but regex will be applied to the messages displayed in the Chat UI.">135 <label class="checkbox flex-container" data-i18n="[title]ext_regex_only_format_visual_desc" title="Chat history file contents won't change, but regex will be applied to the messages displayed in the Chat UI.">
136 <input type="checkbox" name="only_format_display" />136 <input type="checkbox" name="only_format_display" />
137 <span data-i18n="Only Format Display">Alter Chat Display</span>137 <span data-i18n="Only Format Display">Alter Chat Display</span>
138 </label>138 </label>
public/scripts/extensions/regex/engine.js+7 -2
@@ -44,9 +44,9 @@ function getScopedRegex() {
44 * @param {regex_placement} placement The placement of the string44 * @param {regex_placement} placement The placement of the string
45 * @param {RegexParams} params The parameters to use for the regex script45 * @param {RegexParams} params The parameters to use for the regex script
46 * @returns {string} The regexed string46 * @returns {string} The regexed string
47 * @typedef {{characterOverride?: string, isMarkdown?: boolean, isPrompt?: boolean, depth?: number }} RegexParams The parameters to use for the regex script47 * @typedef {{characterOverride?: string, isMarkdown?: boolean, isPrompt?: boolean, isEdit?: boolean, depth?: number }} RegexParams The parameters to use for the regex script
48 */48 */
49function getRegexedString(rawString, placement, { characterOverride, isMarkdown, isPrompt, depth } = {}) {49function getRegexedString(rawString, placement, { characterOverride, isMarkdown, isPrompt, isEdit, depth } = {}) {
50 // WTF have you passed me?50 // WTF have you passed me?
51 if (typeof rawString !== 'string') {51 if (typeof rawString !== 'string') {
52 console.warn('getRegexedString: rawString is not a string. Returning empty string.');52 console.warn('getRegexedString: rawString is not a string. Returning empty string.');
@@ -68,6 +68,11 @@ function getRegexedString(rawString, placement, { characterOverride, isMarkdown,
68 // Script applies to all cases when neither "only"s are true, but there's no need to do it when `isMarkdown`, the as source (chat history) should already be changed beforehand68 // Script applies to all cases when neither "only"s are true, but there's no need to do it when `isMarkdown`, the as source (chat history) should already be changed beforehand
69 (!script.markdownOnly && !script.promptOnly && !isMarkdown)69 (!script.markdownOnly && !script.promptOnly && !isMarkdown)
70 ) {70 ) {
71 if (isEdit && !script.runOnEdit) {
72 console.debug(`getRegexedString: Skipping script ${script.scriptName} because it does not run on edit`);
73 return;
74 }
75
71 // Check if the depth is within the min/max depth76 // Check if the depth is within the min/max depth
72 if (typeof depth === 'number' && depth >= 0) {77 if (typeof depth === 'number' && depth >= 0) {
73 if (!isNaN(script.minDepth) && script.minDepth !== null && script.minDepth >= 0 && depth < script.minDepth) {78 if (!isNaN(script.minDepth) && script.minDepth !== null && script.minDepth >= 0 && depth < script.minDepth) {
public/scripts/extensions/shared.js+5 -1
@@ -36,7 +36,7 @@ export async function getMultimodalCaption(base64Img, prompt) {
36 const isVllm = extension_settings.caption.multimodal_api === 'vllm';36 const isVllm = extension_settings.caption.multimodal_api === 'vllm';
37 const base64Bytes = base64Img.length * 0.75;37 const base64Bytes = base64Img.length * 0.75;
38 const compressionLimit = 2 * 1024 * 1024;38 const compressionLimit = 2 * 1024 * 1024;
39 if ((['google', 'openrouter', 'mistral'].includes(extension_settings.caption.multimodal_api) && base64Bytes > compressionLimit) || isOoba || isKoboldCpp) {39 if ((['google', 'openrouter', 'mistral', 'groq'].includes(extension_settings.caption.multimodal_api) && base64Bytes > compressionLimit) || isOoba || isKoboldCpp) {
40 const maxSide = 1024;40 const maxSide = 1024;
41 base64Img = await createThumbnail(base64Img, maxSide, maxSide, 'image/jpeg');41 base64Img = await createThumbnail(base64Img, maxSide, maxSide, 'image/jpeg');
42 }42 }
@@ -135,6 +135,10 @@ function throwIfInvalidModel(useReverseProxy) {
135 throw new Error('01.AI API key is not set.');135 throw new Error('01.AI API key is not set.');
136 }136 }
137137
138 if (extension_settings.caption.multimodal_api === 'groq' && !secret_state[SECRET_KEYS.GROQ]) {
139 throw new Error('Groq API key is not set.');
140 }
141
138 if (extension_settings.caption.multimodal_api === 'google' && !secret_state[SECRET_KEYS.MAKERSUITE] && !useReverseProxy) {142 if (extension_settings.caption.multimodal_api === 'google' && !secret_state[SECRET_KEYS.MAKERSUITE] && !useReverseProxy) {
139 throw new Error('Google AI Studio API key is not set.');143 throw new Error('Google AI Studio API key is not set.');
140 }144 }
public/scripts/extensions/stable-diffusion/index.js+397 -66
@@ -20,7 +20,7 @@ import {
20} from '../../../script.js';20} from '../../../script.js';
21import { getApiUrl, getContext, extension_settings, doExtrasFetch, modules, renderExtensionTemplateAsync, writeExtensionField } from '../../extensions.js';21import { getApiUrl, getContext, extension_settings, doExtrasFetch, modules, renderExtensionTemplateAsync, writeExtensionField } from '../../extensions.js';
22import { selected_group } from '../../group-chats.js';22import { selected_group } from '../../group-chats.js';
23import { stringFormat, initScrollHeight, resetScrollHeight, getCharaFilename, saveBase64AsFile, getBase64Async, delay, isTrueBoolean, debounce } from '../../utils.js';23import { stringFormat, initScrollHeight, resetScrollHeight, getCharaFilename, saveBase64AsFile, getBase64Async, delay, isTrueBoolean, debounce, isFalseBoolean } from '../../utils.js';
24import { getMessageTimeStamp, humanizedDateTime } from '../../RossAscends-mods.js';24import { getMessageTimeStamp, humanizedDateTime } from '../../RossAscends-mods.js';
25import { SECRET_KEYS, secret_state, writeSecret } from '../../secrets.js';25import { SECRET_KEYS, secret_state, writeSecret } from '../../secrets.js';
26import { getNovelUnlimitedImageGeneration, getNovelAnlas, loadNovelSubscriptionData } from '../../nai-settings.js';26import { getNovelUnlimitedImageGeneration, getNovelAnlas, loadNovelSubscriptionData } from '../../nai-settings.js';
@@ -31,6 +31,8 @@ import { ARGUMENT_TYPE, SlashCommandArgument, SlashCommandNamedArgument } from '
31import { debounce_timeout } from '../../constants.js';31import { debounce_timeout } from '../../constants.js';
32import { SlashCommandEnumValue } from '../../slash-commands/SlashCommandEnumValue.js';32import { SlashCommandEnumValue } from '../../slash-commands/SlashCommandEnumValue.js';
33import { POPUP_RESULT, POPUP_TYPE, Popup, callGenericPopup } from '../../popup.js';33import { POPUP_RESULT, POPUP_TYPE, Popup, callGenericPopup } from '../../popup.js';
34import { commonEnumProviders } from '../../slash-commands/SlashCommandCommonEnumsProvider.js';
35import { ToolManager } from '../../tool-calling.js';
34export { MODULE_NAME };36export { MODULE_NAME };
3537
36const MODULE_NAME = 'sd';38const MODULE_NAME = 'sd';
@@ -61,9 +63,11 @@ const initiators = {
61 interactive: 'interactive',63 interactive: 'interactive',
62 wand: 'wand',64 wand: 'wand',
63 swipe: 'swipe',65 swipe: 'swipe',
66 tool: 'tool',
64};67};
6568
66const generationMode = {69const generationMode = {
70 TOOL: -2,
67 MESSAGE: -1,71 MESSAGE: -1,
68 CHARACTER: 0,72 CHARACTER: 0,
69 USER: 1,73 USER: 1,
@@ -86,6 +90,7 @@ const multimodalMap = {
86};90};
8791
88const modeLabels = {92const modeLabels = {
93 [generationMode.TOOL]: 'Function Tool Prompt Description',
89 [generationMode.MESSAGE]: 'Chat Message Template',94 [generationMode.MESSAGE]: 'Chat Message Template',
90 [generationMode.CHARACTER]: 'Character ("Yourself")',95 [generationMode.CHARACTER]: 'Character ("Yourself")',
91 [generationMode.FACE]: 'Portrait ("Your Face")',96 [generationMode.FACE]: 'Portrait ("Your Face")',
@@ -123,8 +128,12 @@ const messageTrigger = {
123};128};
124129
125const promptTemplates = {130const promptTemplates = {
126 // Not really a prompt template, rather an outcome message template131 // Not really a prompt template, rather an outcome message template and function tool prompt
127 [generationMode.MESSAGE]: '[{{char}} sends a picture that contains: {{prompt}}].',132 [generationMode.MESSAGE]: '[{{char}} sends a picture that contains: {{prompt}}].',
133 [generationMode.TOOL]: [
134 'The text prompt used to generate the image.',
135 'Must represent an exhaustive description of the desired image that will allow an artist or a photographer to perfectly recreate it.',
136 ].join(' '),
128 [generationMode.CHARACTER]: 'In the next response I want you to provide only a detailed comma-delimited list of keywords and phrases which describe {{char}}. The list must include all of the following items in this order: name, species and race, gender, age, clothing, occupation, physical features and appearances. Do not include descriptions of non-visual qualities such as personality, movements, scents, mental traits, or anything which could not be seen in a still photograph. Do not write in full sentences. Prefix your description with the phrase \'full body portrait,\'',137 [generationMode.CHARACTER]: 'In the next response I want you to provide only a detailed comma-delimited list of keywords and phrases which describe {{char}}. The list must include all of the following items in this order: name, species and race, gender, age, clothing, occupation, physical features and appearances. Do not include descriptions of non-visual qualities such as personality, movements, scents, mental traits, or anything which could not be seen in a still photograph. Do not write in full sentences. Prefix your description with the phrase \'full body portrait,\'',
129 //face-specific prompt138 //face-specific prompt
130 [generationMode.FACE]: 'In the next response I want you to provide only a detailed comma-delimited list of keywords and phrases which describe {{char}}. The list must include all of the following items in this order: name, species and race, gender, age, facial features and expressions, occupation, hair and hair accessories (if any), what they are wearing on their upper body (if anything). Do not describe anything below their neck. Do not include descriptions of non-visual qualities such as personality, movements, scents, mental traits, or anything which could not be seen in a still photograph. Do not write in full sentences. Prefix your description with the phrase \'close up facial portrait,\'',139 [generationMode.FACE]: 'In the next response I want you to provide only a detailed comma-delimited list of keywords and phrases which describe {{char}}. The list must include all of the following items in this order: name, species and race, gender, age, facial features and expressions, occupation, hair and hair accessories (if any), what they are wearing on their upper body (if anything). Do not describe anything below their neck. Do not include descriptions of non-visual qualities such as personality, movements, scents, mental traits, or anything which could not be seen in a still photograph. Do not write in full sentences. Prefix your description with the phrase \'close up facial portrait,\'',
@@ -221,11 +230,11 @@ const defaultSettings = {
221230
222 // Refine mode231 // Refine mode
223 refine_mode: false,232 refine_mode: false,
224 expand: false,
225 interactive_mode: false,233 interactive_mode: false,
226 multimodal_captioning: false,234 multimodal_captioning: false,
227 snap: false,235 snap: false,
228 free_extend: false,236 free_extend: false,
237 function_tool: false,
229238
230 prompts: promptTemplates,239 prompts: promptTemplates,
231240
@@ -240,7 +249,7 @@ const defaultSettings = {
240 drawthings_auth: '',249 drawthings_auth: '',
241250
242 hr_upscaler: 'Latent',251 hr_upscaler: 'Latent',
243 hr_scale: 2.0,252 hr_scale: 1.0,
244 hr_scale_min: 1.0,253 hr_scale_min: 1.0,
245 hr_scale_max: 4.0,254 hr_scale_max: 4.0,
246 hr_scale_step: 0.1,255 hr_scale_step: 0.1,
@@ -260,10 +269,6 @@ const defaultSettings = {
260 clip_skip: 1,269 clip_skip: 1,
261270
262 // NovelAI settings271 // NovelAI settings
263 novel_upscale_ratio_min: 1.0,
264 novel_upscale_ratio_max: 4.0,
265 novel_upscale_ratio_step: 0.1,
266 novel_upscale_ratio: 1.0,
267 novel_anlas_guard: false,272 novel_anlas_guard: false,
268 novel_sm: false,273 novel_sm: false,
269 novel_sm_dyn: false,274 novel_sm_dyn: false,
@@ -295,6 +300,10 @@ const defaultSettings = {
295const writePromptFieldsDebounced = debounce(writePromptFields, debounce_timeout.relaxed);300const writePromptFieldsDebounced = debounce(writePromptFields, debounce_timeout.relaxed);
296301
297function processTriggers(chat, _, abort) {302function processTriggers(chat, _, abort) {
303 if (extension_settings.sd.function_tool && ToolManager.isToolCallingSupported()) {
304 return;
305 }
306
298 if (!extension_settings.sd.interactive_mode) {307 if (!extension_settings.sd.interactive_mode) {
299 return;308 return;
300 }309 }
@@ -416,7 +425,6 @@ async function loadSettings() {
416 $('#sd_hr_scale').val(extension_settings.sd.hr_scale).trigger('input');425 $('#sd_hr_scale').val(extension_settings.sd.hr_scale).trigger('input');
417 $('#sd_denoising_strength').val(extension_settings.sd.denoising_strength).trigger('input');426 $('#sd_denoising_strength').val(extension_settings.sd.denoising_strength).trigger('input');
418 $('#sd_hr_second_pass_steps').val(extension_settings.sd.hr_second_pass_steps).trigger('input');427 $('#sd_hr_second_pass_steps').val(extension_settings.sd.hr_second_pass_steps).trigger('input');
419 $('#sd_novel_upscale_ratio').val(extension_settings.sd.novel_upscale_ratio).trigger('input');
420 $('#sd_novel_anlas_guard').prop('checked', extension_settings.sd.novel_anlas_guard);428 $('#sd_novel_anlas_guard').prop('checked', extension_settings.sd.novel_anlas_guard);
421 $('#sd_novel_sm').prop('checked', extension_settings.sd.novel_sm);429 $('#sd_novel_sm').prop('checked', extension_settings.sd.novel_sm);
422 $('#sd_novel_sm_dyn').prop('checked', extension_settings.sd.novel_sm_dyn);430 $('#sd_novel_sm_dyn').prop('checked', extension_settings.sd.novel_sm_dyn);
@@ -430,7 +438,6 @@ async function loadSettings() {
430 $('#sd_restore_faces').prop('checked', extension_settings.sd.restore_faces);438 $('#sd_restore_faces').prop('checked', extension_settings.sd.restore_faces);
431 $('#sd_enable_hr').prop('checked', extension_settings.sd.enable_hr);439 $('#sd_enable_hr').prop('checked', extension_settings.sd.enable_hr);
432 $('#sd_refine_mode').prop('checked', extension_settings.sd.refine_mode);440 $('#sd_refine_mode').prop('checked', extension_settings.sd.refine_mode);
433 $('#sd_expand').prop('checked', extension_settings.sd.expand);
434 $('#sd_multimodal_captioning').prop('checked', extension_settings.sd.multimodal_captioning);441 $('#sd_multimodal_captioning').prop('checked', extension_settings.sd.multimodal_captioning);
435 $('#sd_auto_url').val(extension_settings.sd.auto_url);442 $('#sd_auto_url').val(extension_settings.sd.auto_url);
436 $('#sd_auto_auth').val(extension_settings.sd.auto_auth);443 $('#sd_auto_auth').val(extension_settings.sd.auto_auth);
@@ -453,6 +460,7 @@ async function loadSettings() {
453 $('#sd_interactive_visible').prop('checked', extension_settings.sd.interactive_visible);460 $('#sd_interactive_visible').prop('checked', extension_settings.sd.interactive_visible);
454 $('#sd_stability_style_preset').val(extension_settings.sd.stability_style_preset);461 $('#sd_stability_style_preset').val(extension_settings.sd.stability_style_preset);
455 $('#sd_huggingface_model_id').val(extension_settings.sd.huggingface_model_id);462 $('#sd_huggingface_model_id').val(extension_settings.sd.huggingface_model_id);
463 $('#sd_function_tool').prop('checked', extension_settings.sd.function_tool);
456464
457 for (const style of extension_settings.sd.styles) {465 for (const style of extension_settings.sd.styles) {
458 const option = document.createElement('option');466 const option = document.createElement('option');
@@ -467,6 +475,7 @@ async function loadSettings() {
467475
468 toggleSourceControls();476 toggleSourceControls();
469 addPromptTemplates();477 addPromptTemplates();
478 registerFunctionTool();
470479
471 await loadSettingOptions();480 await loadSettingOptions();
472}481}
@@ -530,6 +539,9 @@ function addPromptTemplates() {
530 .on('click', () => {539 .on('click', () => {
531 textarea.val(promptTemplates[name]);540 textarea.val(promptTemplates[name]);
532 extension_settings.sd.prompts[name] = promptTemplates[name];541 extension_settings.sd.prompts[name] = promptTemplates[name];
542 if (String(name) === String(generationMode.TOOL)) {
543 registerFunctionTool();
544 }
533 saveSettingsDebounced();545 saveSettingsDebounced();
534 });546 });
535 const container = $('<div></div>')547 const container = $('<div></div>')
@@ -644,37 +656,13 @@ async function onSaveStyleClick() {
644 saveSettingsDebounced();656 saveSettingsDebounced();
645}657}
646658
647async function expandPrompt(prompt) {
648 try {
649 const response = await fetch('/api/sd/expand', {
650 method: 'POST',
651 headers: getRequestHeaders(),
652 body: JSON.stringify({ prompt: prompt }),
653 });
654
655 if (!response.ok) {
656 throw new Error('API returned an error.');
657 }
658
659 const data = await response.json();
660 return data.prompt;
661 } catch {
662 return prompt;
663 }
664}
665
666/**659/**
667 * Modifies prompt based on auto-expansion and user inputs.660 * Modifies prompt based on user inputs.
668 * @param {string} prompt Prompt to refine661 * @param {string} prompt Prompt to refine
669 * @param {boolean} allowExpand Whether to allow auto-expansion
670 * @param {boolean} isNegative Whether the prompt is a negative one662 * @param {boolean} isNegative Whether the prompt is a negative one
671 * @returns {Promise<string>} Refined prompt663 * @returns {Promise<string>} Refined prompt
672 */664 */
673async function refinePrompt(prompt, allowExpand, isNegative = false) {665async function refinePrompt(prompt, isNegative) {
674 if (allowExpand && extension_settings.sd.expand) {
675 prompt = await expandPrompt(prompt);
676 }
677
678 if (extension_settings.sd.refine_mode) {666 if (extension_settings.sd.refine_mode) {
679 const text = isNegative ? '<h3>Review and edit the <i>negative</i> prompt:</h3>' : '<h3>Review and edit the prompt:</h3>';667 const text = isNegative ? '<h3>Review and edit the <i>negative</i> prompt:</h3>' : '<h3>Review and edit the prompt:</h3>';
680 const refinedPrompt = await callGenericPopup(text + 'Press "Cancel" to abort the image generation.', POPUP_TYPE.INPUT, prompt.trim(), { rows: 5, okButton: 'Continue' });668 const refinedPrompt = await callGenericPopup(text + 'Press "Cancel" to abort the image generation.', POPUP_TYPE.INPUT, prompt.trim(), { rows: 5, okButton: 'Continue' });
@@ -800,11 +788,6 @@ function combinePrefixes(str1, str2, macro = '') {
800 return process(result);788 return process(result);
801}789}
802790
803function onExpandInput() {
804 extension_settings.sd.expand = !!$(this).prop('checked');
805 saveSettingsDebounced();
806}
807
808function onRefineModeInput() {791function onRefineModeInput() {
809 extension_settings.sd.refine_mode = !!$('#sd_refine_mode').prop('checked');792 extension_settings.sd.refine_mode = !!$('#sd_refine_mode').prop('checked');
810 saveSettingsDebounced();793 saveSettingsDebounced();
@@ -945,6 +928,12 @@ async function onSourceChange() {
945 await loadSettingOptions();928 await loadSettingOptions();
946}929}
947930
931function onFunctionToolInput() {
932 extension_settings.sd.function_tool = !!$(this).prop('checked');
933 saveSettingsDebounced();
934 registerFunctionTool();
935}
936
948async function onOpenAiStyleSelect() {937async function onOpenAiStyleSelect() {
949 extension_settings.sd.openai_style = String($('#sd_openai_style').find(':selected').val());938 extension_settings.sd.openai_style = String($('#sd_openai_style').find(':selected').val());
950 saveSettingsDebounced();939 saveSettingsDebounced();
@@ -969,12 +958,6 @@ async function onViewAnlasClick() {
969 toastr.info(`Free image generation: ${unlimitedGeneration ? 'Yes' : 'No'}`, `Anlas: ${anlas}`);958 toastr.info(`Free image generation: ${unlimitedGeneration ? 'Yes' : 'No'}`, `Anlas: ${anlas}`);
970}959}
971960
972function onNovelUpscaleRatioInput() {
973 extension_settings.sd.novel_upscale_ratio = Number($('#sd_novel_upscale_ratio').val());
974 $('#sd_novel_upscale_ratio_value').val(extension_settings.sd.novel_upscale_ratio.toFixed(1));
975 saveSettingsDebounced();
976}
977
978function onNovelAnlasGuardInput() {961function onNovelAnlasGuardInput() {
979 extension_settings.sd.novel_anlas_guard = !!$('#sd_novel_anlas_guard').prop('checked');962 extension_settings.sd.novel_anlas_guard = !!$('#sd_novel_anlas_guard').prop('checked');
980 saveSettingsDebounced();963 saveSettingsDebounced();
@@ -2273,6 +2256,25 @@ function getRawLastMessage() {
2273}2256}
22742257
2275/**2258/**
2259 * Ensure that the selected option exists in the dropdown.
2260 * @param {string} setting Setting key
2261 * @param {string} selector Dropdown selector
2262 * @returns {void}
2263 */
2264function ensureSelectionExists(setting, selector) {
2265 /** @type {HTMLSelectElement} */
2266 const selectElement = document.querySelector(selector);
2267 if (!selectElement) {
2268 return;
2269 }
2270 const options = Array.from(selectElement.options);
2271 const value = extension_settings.sd[setting];
2272 if (selectElement.selectedOptions.length && !options.some(option => option.value === value)) {
2273 extension_settings.sd[setting] = selectElement.selectedOptions[0].value;
2274 }
2275}
2276
2277/**
2276 * Generates an image based on the given trigger word.2278 * Generates an image based on the given trigger word.
2277 * @param {string} initiator The initiator of the image generation2279 * @param {string} initiator The initiator of the image generation
2278 * @param {Record<string, object>} args Command arguments2280 * @param {Record<string, object>} args Command arguments
@@ -2292,8 +2294,8 @@ async function generatePicture(initiator, args, trigger, message, callback) {
2292 return;2294 return;
2293 }2295 }
22942296
2295 extension_settings.sd.sampler = $('#sd_sampler').find(':selected').val();2297 ensureSelectionExists('sampler', '#sd_sampler');
2296 extension_settings.sd.model = $('#sd_model').find(':selected').val();2298 ensureSelectionExists('model', '#sd_model');
22972299
2298 trigger = trigger.trim();2300 trigger = trigger.trim();
2299 const generationType = getGenerationType(trigger);2301 const generationType = getGenerationType(trigger);
@@ -2307,14 +2309,14 @@ async function generatePicture(initiator, args, trigger, message, callback) {
23072309
2308 if (generationType == generationMode.BACKGROUND) {2310 if (generationType == generationMode.BACKGROUND) {
2309 const callbackOriginal = callback;2311 const callbackOriginal = callback;
2310 callback = async function (prompt, imagePath, generationType) {2312 callback = async function (prompt, imagePath, generationType, _negativePromptPrefix, _initiator, prefixedPrompt) {
2311 const imgUrl = `url("${encodeURI(imagePath)}")`;2313 const imgUrl = `url("${encodeURI(imagePath)}")`;
2312 eventSource.emit(event_types.FORCE_SET_BACKGROUND, { url: imgUrl, path: imagePath });2314 eventSource.emit(event_types.FORCE_SET_BACKGROUND, { url: imgUrl, path: imagePath });
23132315
2314 if (typeof callbackOriginal === 'function') {2316 if (typeof callbackOriginal === 'function') {
2315 callbackOriginal(prompt, imagePath, generationType, negativePromptPrefix, initiator);2317 await callbackOriginal(prompt, imagePath, generationType, negativePromptPrefix, initiator, prefixedPrompt);
2316 } else {2318 } else {
2317 sendMessage(prompt, imagePath, generationType, negativePromptPrefix, initiator);2319 await sendMessage(prompt, imagePath, generationType, negativePromptPrefix, initiator, prefixedPrompt);
2318 }2320 }
2319 };2321 };
2320 }2322 }
@@ -2441,7 +2443,7 @@ async function getPrompt(generationType, message, trigger, quietPrompt, combineN
2441 }2443 }
24422444
2443 if (generationType !== generationMode.FREE) {2445 if (generationType !== generationMode.FREE) {
2444 prompt = await refinePrompt(prompt, true);2446 prompt = await refinePrompt(prompt, false);
2445 }2447 }
24462448
2447 return prompt;2449 return prompt;
@@ -2469,7 +2471,7 @@ function generateFreeModePrompt(trigger, combineNegatives) {
2469 return message.original_avatar.replace(/\.[^/.]+$/, '');2471 return message.original_avatar.replace(/\.[^/.]+$/, '');
2470 }2472 }
2471 }2473 }
2472 throw new Error('No usable messages found.');2474 return '';
2473 };2475 };
24742476
2475 const key = getLastCharacterKey();2477 const key = getLastCharacterKey();
@@ -2643,7 +2645,9 @@ async function sendGenerationRequest(generationType, prompt, additionalNegativeP
26432645
2644 const filename = `${characterName}_${humanizedDateTime()}`;2646 const filename = `${characterName}_${humanizedDateTime()}`;
2645 const base64Image = await saveBase64AsFile(result.data, characterName, filename, result.format);2647 const base64Image = await saveBase64AsFile(result.data, characterName, filename, result.format);
2646 callback ? callback(prompt, base64Image, generationType, additionalNegativePrefix, initiator) : sendMessage(prompt, base64Image, generationType, additionalNegativePrefix, initiator);2648 callback
2649 ? await callback(prompt, base64Image, generationType, additionalNegativePrefix, initiator, prefixedPrompt)
2650 : await sendMessage(prompt, base64Image, generationType, additionalNegativePrefix, initiator, prefixedPrompt);
2647 return base64Image;2651 return base64Image;
2648}2652}
26492653
@@ -3031,7 +3035,7 @@ async function generateNovelImage(prompt, negativePrompt, signal) {
3031 width: width,3035 width: width,
3032 height: height,3036 height: height,
3033 negative_prompt: negativePrompt,3037 negative_prompt: negativePrompt,
3034 upscale_ratio: extension_settings.sd.novel_upscale_ratio,3038 upscale_ratio: extension_settings.sd.hr_scale,
3035 decrisper: extension_settings.sd.novel_decrisper,3039 decrisper: extension_settings.sd.novel_decrisper,
3036 sm: sm,3040 sm: sm,
3037 sm_dyn: sm_dyn,3041 sm_dyn: sm_dyn,
@@ -3431,12 +3435,13 @@ async function onComfyDeleteWorkflowClick() {
3431 * @param {number} generationType Generation type of the image3435 * @param {number} generationType Generation type of the image
3432 * @param {string} additionalNegativePrefix Additional negative prompt used for the image generation3436 * @param {string} additionalNegativePrefix Additional negative prompt used for the image generation
3433 * @param {string} initiator The initiator of the image generation3437 * @param {string} initiator The initiator of the image generation
3438 * @param {string} prefixedPrompt Prompt with an attached specific prefix
3434 */3439 */
3435async function sendMessage(prompt, image, generationType, additionalNegativePrefix, initiator) {3440async function sendMessage(prompt, image, generationType, additionalNegativePrefix, initiator, prefixedPrompt) {
3436 const context = getContext();3441 const context = getContext();
3437 const name = context.groupId ? systemUserName : context.name2;3442 const name = context.groupId ? systemUserName : context.name2;
3438 const template = extension_settings.sd.prompts[generationMode.MESSAGE] || '{{prompt}}';3443 const template = extension_settings.sd.prompts[generationMode.MESSAGE] || '{{prompt}}';
3439 const messageText = substituteParamsExtended(template, { char: name, prompt: prompt });3444 const messageText = substituteParamsExtended(template, { char: name, prompt: prompt, prefixedPrompt: prefixedPrompt });
3440 const message = {3445 const message = {
3441 name: name,3446 name: name,
3442 is_user: false,3447 is_user: false,
@@ -3613,8 +3618,8 @@ async function sdMessageButton(e) {
3613 try {3618 try {
3614 setBusyIcon(true);3619 setBusyIcon(true);
3615 if (hasSavedImage) {3620 if (hasSavedImage) {
3616 const prompt = await refinePrompt(message.extra.title, false, false);3621 const prompt = await refinePrompt(message.extra.title, false);
3617 const negative = hasSavedNegative ? await refinePrompt(message.extra.negative, false, true) : '';3622 const negative = hasSavedNegative ? await refinePrompt(message.extra.negative, true) : '';
3618 message.extra.title = prompt;3623 message.extra.title = prompt;
36193624
3620 const generationType = message?.extra?.generationType ?? generationMode.FREE;3625 const generationType = message?.extra?.generationType ?? generationMode.FREE;
@@ -3756,8 +3761,8 @@ async function onImageSwiped({ message, element, direction }) {
3756 eventSource.once(CUSTOM_STOP_EVENT, stopListener);3761 eventSource.once(CUSTOM_STOP_EVENT, stopListener);
3757 const callback = () => { };3762 const callback = () => { };
3758 const hasNegative = message.extra.negative;3763 const hasNegative = message.extra.negative;
3759 const prompt = await refinePrompt(message.extra.title, false, false);3764 const prompt = await refinePrompt(message.extra.title, false);
3760 const negativePromptPrefix = hasNegative ? await refinePrompt(message.extra.negative, false, true) : '';3765 const negativePromptPrefix = hasNegative ? await refinePrompt(message.extra.negative, true) : '';
3761 const characterName = context.groupId3766 const characterName = context.groupId
3762 ? context.groups[Object.keys(context.groups).filter(x => context.groups[x].id === context.groupId)[0]]?.id?.toString()3767 ? context.groups[Object.keys(context.groups).filter(x => context.groups[x].id === context.groupId)[0]]?.id?.toString()
3763 : context.characters[context.characterId]?.name;3768 : context.characters[context.characterId]?.name;
@@ -3788,12 +3793,121 @@ async function onImageSwiped({ message, element, direction }) {
3788 await context.saveChat();3793 await context.saveChat();
3789}3794}
37903795
3796/**
3797 * Applies the command arguments to the extension settings.
3798 * @typedef {import('../../slash-commands/SlashCommand.js').NamedArguments} NamedArguments
3799 * @typedef {import('../../slash-commands/SlashCommand.js').NamedArgumentsCapture} NamedArgumentsCapture
3800 * @param {NamedArguments | NamedArgumentsCapture} args - Command arguments
3801 * @returns {Record<string, any>} - Current settings before applying the command arguments
3802 */
3803function applyCommandArguments(args) {
3804 const overrideSettings = {};
3805 const currentSettings = {};
3806 const settingMap = {
3807 'edit': 'refine_mode',
3808 'extend': 'free_extend',
3809 'multimodal': 'multimodal_captioning',
3810 'seed': 'seed',
3811 'width': 'width',
3812 'height': 'height',
3813 'steps': 'steps',
3814 'cfg': 'scale',
3815 'skip': 'clip_skip',
3816 'model': 'model',
3817 'sampler': 'sampler',
3818 'scheduler': 'scheduler',
3819 'vae': 'vae',
3820 'upscaler': 'hr_upscaler',
3821 'scale': 'hr_scale',
3822 'hires': 'enable_hr',
3823 'denoise': 'denoising_strength',
3824 '2ndpass': 'hr_second_pass_steps',
3825 'faces': 'restore_faces',
3826 };
3827
3828 for (const [param, setting] of Object.entries(settingMap)) {
3829 if (args[param] === undefined || defaultSettings[setting] === undefined) {
3830 continue;
3831 }
3832 currentSettings[setting] = extension_settings.sd[setting];
3833 const value = String(args[param]);
3834 const type = typeof defaultSettings[setting];
3835 switch (type) {
3836 case 'boolean':
3837 overrideSettings[setting] = isTrueBoolean(value) || !isFalseBoolean(value);
3838 break;
3839 case 'number':
3840 overrideSettings[setting] = Number(value);
3841 break;
3842 default:
3843 overrideSettings[setting] = value;
3844 break;
3845 }
3846 }
3847
3848 Object.assign(extension_settings.sd, overrideSettings);
3849 return currentSettings;
3850}
3851
3852function registerFunctionTool() {
3853 if (!extension_settings.sd.function_tool) {
3854 return ToolManager.unregisterFunctionTool('GenerateImage');
3855 }
3856
3857 ToolManager.registerFunctionTool({
3858 name: 'GenerateImage',
3859 displayName: 'Generate Image',
3860 description: [
3861 'Generate an image from a given text prompt.',
3862 'Use when a user asks to generate an image, imagine a concept or an item, send a picture of a scene, a selfie, etc.',
3863 ].join(' '),
3864 parameters: Object.freeze({
3865 $schema: 'http://json-schema.org/draft-04/schema#',
3866 type: 'object',
3867 properties: {
3868 prompt: {
3869 type: 'string',
3870 description: extension_settings.sd.prompts[generationMode.TOOL] || promptTemplates[generationMode.TOOL],
3871 },
3872 },
3873 required: [
3874 'prompt',
3875 ],
3876 }),
3877 action: async (args) => {
3878 if (!isValidState()) throw new Error('Image generation is not configured.');
3879 if (!args) throw new Error('Missing arguments');
3880 if (!args.prompt) throw new Error('Missing prompt');
3881 const url = await generatePicture(initiators.tool, {}, args.prompt);
3882 return encodeURI(url);
3883 },
3884 formatMessage: () => 'Generating an image...',
3885 });
3886}
3887
3791jQuery(async () => {3888jQuery(async () => {
3792 await addSDGenButtons();3889 await addSDGenButtons();
37933890
3891 const getSelectEnumProvider = (id, text) => () => Array.from(document.querySelectorAll(`#${id} > [value]`)).map(x => new SlashCommandEnumValue(x.getAttribute('value'), text ? x.textContent : null));
3892
3794 SlashCommandParser.addCommandObject(SlashCommand.fromProps({3893 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
3795 name: 'imagine',3894 name: 'imagine',
3796 callback: (args, trigger) => generatePicture(initiators.command, args, String(trigger)),3895 returns: 'URL of the generated image, or an empty string if the generation failed',
3896 callback: async (args, trigger) => {
3897 const currentSettings = applyCommandArguments(args);
3898
3899 try {
3900 return await generatePicture(initiators.command, args, String(trigger));
3901 } catch (error) {
3902 console.error('Failed to generate image:', error);
3903 return '';
3904 } finally {
3905 if (Object.keys(currentSettings).length) {
3906 Object.assign(extension_settings.sd, currentSettings);
3907 saveSettingsDebounced();
3908 }
3909 }
3910 },
3797 aliases: ['sd', 'img', 'image'],3911 aliases: ['sd', 'img', 'image'],
3798 namedArgumentList: [3912 namedArgumentList: [
3799 new SlashCommandNamedArgument(3913 new SlashCommandNamedArgument(
@@ -3803,6 +3917,164 @@ jQuery(async () => {
3803 name: 'negative',3917 name: 'negative',
3804 description: 'negative prompt prefix',3918 description: 'negative prompt prefix',
3805 typeList: [ARGUMENT_TYPE.STRING],3919 typeList: [ARGUMENT_TYPE.STRING],
3920 isRequired: false,
3921 acceptsMultiple: false,
3922 }),
3923 SlashCommandNamedArgument.fromProps({
3924 name: 'extend',
3925 description: 'auto-extend free mode prompts with the LLM',
3926 typeList: [ARGUMENT_TYPE.BOOLEAN],
3927 enumProvider: commonEnumProviders.boolean('trueFalse'),
3928 isRequired: false,
3929 acceptsMultiple: false,
3930 }),
3931 SlashCommandNamedArgument.fromProps({
3932 name: 'edit',
3933 description: 'edit the prompt before generation',
3934 typeList: [ARGUMENT_TYPE.BOOLEAN],
3935 enumProvider: commonEnumProviders.boolean('trueFalse'),
3936 isRequired: false,
3937 acceptsMultiple: false,
3938 }),
3939 SlashCommandNamedArgument.fromProps({
3940 name: 'multimodal',
3941 description: 'use multimodal captioning (for portraits only)',
3942 typeList: [ARGUMENT_TYPE.BOOLEAN],
3943 enumProvider: commonEnumProviders.boolean('trueFalse'),
3944 isRequired: false,
3945 acceptsMultiple: false,
3946 }),
3947 SlashCommandNamedArgument.fromProps({
3948 name: 'snap',
3949 description: 'snap auto-adjusted dimensions to the nearest known resolution (portraits and backgrounds only)',
3950 typeList: [ARGUMENT_TYPE.BOOLEAN],
3951 enumProvider: commonEnumProviders.boolean('trueFalse'),
3952 isRequired: false,
3953 acceptsMultiple: false,
3954 }),
3955 SlashCommandNamedArgument.fromProps({
3956 name: 'seed',
3957 description: 'random seed',
3958 isRequired: false,
3959 typeList: [ARGUMENT_TYPE.NUMBER],
3960 acceptsMultiple: false,
3961 }),
3962 SlashCommandNamedArgument.fromProps({
3963 name: 'width',
3964 description: 'image width',
3965 isRequired: false,
3966 typeList: [ARGUMENT_TYPE.NUMBER],
3967 acceptsMultiple: false,
3968 }),
3969 SlashCommandNamedArgument.fromProps({
3970 name: 'height',
3971 description: 'image height',
3972 isRequired: false,
3973 typeList: [ARGUMENT_TYPE.NUMBER],
3974 acceptsMultiple: false,
3975 }),
3976 SlashCommandNamedArgument.fromProps({
3977 name: 'steps',
3978 description: 'number of steps',
3979 isRequired: false,
3980 typeList: [ARGUMENT_TYPE.NUMBER],
3981 acceptsMultiple: false,
3982 }),
3983 SlashCommandNamedArgument.fromProps({
3984 name: 'cfg',
3985 description: 'CFG scale',
3986 isRequired: false,
3987 typeList: [ARGUMENT_TYPE.NUMBER],
3988 acceptsMultiple: false,
3989 }),
3990 SlashCommandNamedArgument.fromProps({
3991 name: 'skip',
3992 description: 'CLIP skip layers',
3993 isRequired: false,
3994 typeList: [ARGUMENT_TYPE.NUMBER],
3995 acceptsMultiple: false,
3996 }),
3997 SlashCommandNamedArgument.fromProps({
3998 name: 'model',
3999 description: 'model override',
4000 isRequired: false,
4001 typeList: [ARGUMENT_TYPE.STRING],
4002 acceptsMultiple: false,
4003 forceEnum: true,
4004 enumProvider: getSelectEnumProvider('sd_model', true),
4005 }),
4006 SlashCommandNamedArgument.fromProps({
4007 name: 'sampler',
4008 description: 'sampler override',
4009 isRequired: false,
4010 typeList: [ARGUMENT_TYPE.STRING],
4011 acceptsMultiple: false,
4012 forceEnum: true,
4013 enumProvider: getSelectEnumProvider('sd_sampler', false),
4014 }),
4015 SlashCommandNamedArgument.fromProps({
4016 name: 'scheduler',
4017 description: 'scheduler override',
4018 isRequired: false,
4019 typeList: [ARGUMENT_TYPE.STRING],
4020 acceptsMultiple: false,
4021 forceEnum: true,
4022 enumProvider: getSelectEnumProvider('sd_scheduler', false),
4023 }),
4024 SlashCommandNamedArgument.fromProps({
4025 name: 'vae',
4026 description: 'VAE name override',
4027 isRequired: false,
4028 typeList: [ARGUMENT_TYPE.STRING],
4029 acceptsMultiple: false,
4030 forceEnum: true,
4031 enumProvider: getSelectEnumProvider('sd_vae', false),
4032 }),
4033 SlashCommandNamedArgument.fromProps({
4034 name: 'upscaler',
4035 description: 'upscaler override',
4036 isRequired: false,
4037 typeList: [ARGUMENT_TYPE.STRING],
4038 acceptsMultiple: false,
4039 forceEnum: true,
4040 enumProvider: getSelectEnumProvider('sd_hr_upscaler', false),
4041 }),
4042 SlashCommandNamedArgument.fromProps({
4043 name: 'hires',
4044 description: 'enable high-res fix',
4045 isRequired: false,
4046 typeList: [ARGUMENT_TYPE.BOOLEAN],
4047 acceptsMultiple: false,
4048 enumProvider: commonEnumProviders.boolean('trueFalse'),
4049 }),
4050 SlashCommandNamedArgument.fromProps({
4051 name: 'scale',
4052 description: 'upscale amount',
4053 isRequired: false,
4054 typeList: [ARGUMENT_TYPE.NUMBER],
4055 acceptsMultiple: false,
4056 }),
4057 SlashCommandNamedArgument.fromProps({
4058 name: 'denoise',
4059 description: 'denoising strength',
4060 isRequired: false,
4061 typeList: [ARGUMENT_TYPE.NUMBER],
4062 acceptsMultiple: false,
4063 }),
4064 SlashCommandNamedArgument.fromProps({
4065 name: '2ndpass',
4066 description: 'second pass steps',
4067 isRequired: false,
4068 typeList: [ARGUMENT_TYPE.NUMBER],
4069 acceptsMultiple: false,
4070 }),
4071 SlashCommandNamedArgument.fromProps({
4072 name: 'faces',
4073 description: 'restore faces',
4074 isRequired: false,
4075 typeList: [ARGUMENT_TYPE.BOOLEAN],
4076 acceptsMultiple: false,
4077 enumProvider: commonEnumProviders.boolean('trueFalse'),
3806 }),4078 }),
3807 ],4079 ],
3808 unnamedArgumentList: [4080 unnamedArgumentList: [
@@ -3824,6 +4096,66 @@ jQuery(async () => {
3824 }));4096 }));
38254097
3826 SlashCommandParser.addCommandObject(SlashCommand.fromProps({4098 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
4099 name: 'imagine-source',
4100 aliases: ['sd-source', 'img-source'],
4101 returns: 'a name of the current generation source',
4102 unnamedArgumentList: [
4103 SlashCommandArgument.fromProps({
4104 description: 'source name',
4105 typeList: [ARGUMENT_TYPE.STRING],
4106 isRequired: false,
4107 forceEnum: true,
4108 enumProvider: getSelectEnumProvider('sd_source', true),
4109 }),
4110 ],
4111 helpString: 'If an argument is provided, change the source of the image generation, e.g. <code>/imagine-source comfy</code>. Returns the current source.',
4112 callback: async (_args, name) => {
4113 if (!name) {
4114 return extension_settings.sd.source;
4115 }
4116 const isKnownSource = Object.keys(sources).includes(String(name));
4117 if (!isKnownSource) {
4118 throw new Error('The value provided is not a valid image generation source.');
4119 }
4120 const option = document.querySelector(`#sd_source [value="${name}"]`);
4121 if (!(option instanceof HTMLOptionElement)) {
4122 throw new Error('Could not find the source option in the dropdown.');
4123 }
4124 option.selected = true;
4125 await onSourceChange();
4126 return extension_settings.sd.source;
4127 },
4128 }));
4129
4130 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
4131 name: 'imagine-style',
4132 aliases: ['sd-style', 'img-style'],
4133 returns: 'a name of the current style',
4134 unnamedArgumentList: [
4135 SlashCommandArgument.fromProps({
4136 description: 'style name',
4137 typeList: [ARGUMENT_TYPE.STRING],
4138 isRequired: false,
4139 forceEnum: true,
4140 enumProvider: getSelectEnumProvider('sd_style', false),
4141 }),
4142 ],
4143 helpString: 'If an argument is provided, change the style of the image generation, e.g. <code>/imagine-style MyStyle</code>. Returns the current style.',
4144 callback: async (_args, name) => {
4145 if (!name) {
4146 return extension_settings.sd.style;
4147 }
4148 const option = document.querySelector(`#sd_style [value="${name}"]`);
4149 if (!(option instanceof HTMLOptionElement)) {
4150 throw new Error('Could not find the style option in the dropdown.');
4151 }
4152 option.selected = true;
4153 onStyleSelect();
4154 return extension_settings.sd.style;
4155 },
4156 }));
4157
4158 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
3827 name: 'imagine-comfy-workflow',4159 name: 'imagine-comfy-workflow',
3828 callback: changeComfyWorkflow,4160 callback: changeComfyWorkflow,
3829 aliases: ['icw'],4161 aliases: ['icw'],
@@ -3832,7 +4164,7 @@ jQuery(async () => {
3832 description: 'workflow name',4164 description: 'workflow name',
3833 typeList: [ARGUMENT_TYPE.STRING],4165 typeList: [ARGUMENT_TYPE.STRING],
3834 isRequired: true,4166 isRequired: true,
3835 enumProvider: () => Array.from(document.querySelectorAll('#sd_comfy_workflow > [value]')).map(x => x.getAttribute('value')).map(workflow => new SlashCommandEnumValue(workflow)),4167 enumProvider: getSelectEnumProvider('sd_comfy_workflow', false),
3836 }),4168 }),
3837 ],4169 ],
3838 helpString: '(workflowName) - change the workflow to be used for image generation with ComfyUI, e.g. <pre><code>/imagine-comfy-workflow MyWorkflow</code></pre>',4170 helpString: '(workflowName) - change the workflow to be used for image generation with ComfyUI, e.g. <pre><code>/imagine-comfy-workflow MyWorkflow</code></pre>',
@@ -3874,7 +4206,6 @@ jQuery(async () => {
3874 $('#sd_hr_scale').on('input', onHrScaleInput);4206 $('#sd_hr_scale').on('input', onHrScaleInput);
3875 $('#sd_denoising_strength').on('input', onDenoisingStrengthInput);4207 $('#sd_denoising_strength').on('input', onDenoisingStrengthInput);
3876 $('#sd_hr_second_pass_steps').on('input', onHrSecondPassStepsInput);4208 $('#sd_hr_second_pass_steps').on('input', onHrSecondPassStepsInput);
3877 $('#sd_novel_upscale_ratio').on('input', onNovelUpscaleRatioInput);
3878 $('#sd_novel_anlas_guard').on('input', onNovelAnlasGuardInput);4209 $('#sd_novel_anlas_guard').on('input', onNovelAnlasGuardInput);
3879 $('#sd_novel_view_anlas').on('click', onViewAnlasClick);4210 $('#sd_novel_view_anlas').on('click', onViewAnlasClick);
3880 $('#sd_novel_sm').on('input', onNovelSmInput);4211 $('#sd_novel_sm').on('input', onNovelSmInput);
@@ -3887,7 +4218,6 @@ jQuery(async () => {
3887 $('#sd_comfy_open_workflow_editor').on('click', onComfyOpenWorkflowEditorClick);4218 $('#sd_comfy_open_workflow_editor').on('click', onComfyOpenWorkflowEditorClick);
3888 $('#sd_comfy_new_workflow').on('click', onComfyNewWorkflowClick);4219 $('#sd_comfy_new_workflow').on('click', onComfyNewWorkflowClick);
3889 $('#sd_comfy_delete_workflow').on('click', onComfyDeleteWorkflowClick);4220 $('#sd_comfy_delete_workflow').on('click', onComfyDeleteWorkflowClick);
3890 $('#sd_expand').on('input', onExpandInput);
3891 $('#sd_style').on('change', onStyleSelect);4221 $('#sd_style').on('change', onStyleSelect);
3892 $('#sd_save_style').on('click', onSaveStyleClick);4222 $('#sd_save_style').on('click', onSaveStyleClick);
3893 $('#sd_delete_style').on('click', onDeleteStyleClick);4223 $('#sd_delete_style').on('click', onDeleteStyleClick);
@@ -3908,6 +4238,7 @@ jQuery(async () => {
3908 $('#sd_stability_key').on('click', onStabilityKeyClick);4238 $('#sd_stability_key').on('click', onStabilityKeyClick);
3909 $('#sd_stability_style_preset').on('change', onStabilityStylePresetChange);4239 $('#sd_stability_style_preset').on('change', onStabilityStylePresetChange);
3910 $('#sd_huggingface_model_id').on('input', onHFModelInput);4240 $('#sd_huggingface_model_id').on('input', onHFModelInput);
4241 $('#sd_function_tool').on('input', onFunctionToolInput);
39114242
3912 if (!CSS.supports('field-sizing', 'content')) {4243 if (!CSS.supports('field-sizing', 'content')) {
3913 $('.sd_settings .inline-drawer-toggle').on('click', function () {4244 $('.sd_settings .inline-drawer-toggle').on('click', function () {
public/scripts/extensions/stable-diffusion/settings.html+6 -15
@@ -14,9 +14,13 @@
14 <input id="sd_refine_mode" type="checkbox" />14 <input id="sd_refine_mode" type="checkbox" />
15 <span data-i18n="sd_refine_mode_txt">Edit prompts before generation</span>15 <span data-i18n="sd_refine_mode_txt">Edit prompts before generation</span>
16 </label>16 </label>
17 <label for="sd_function_tool" class="checkbox_label" data-i18n="[title]sd_function_tool" title="Use the function tool to automatically detect intents to generate images.">
18 <input id="sd_function_tool" type="checkbox" />
19 <span data-i18n="sd_function_tool_txt">Use function tool</span>
20 </label>
17 <label for="sd_interactive_mode" class="checkbox_label" data-i18n="[title]sd_interactive_mode" title="Automatically generate images when sending messages like 'send me a picture of cat'.">21 <label for="sd_interactive_mode" class="checkbox_label" data-i18n="[title]sd_interactive_mode" title="Automatically generate images when sending messages like 'send me a picture of cat'.">
18 <input id="sd_interactive_mode" type="checkbox" />22 <input id="sd_interactive_mode" type="checkbox" />
19 <span data-i18n="sd_interactive_mode_txt">Interactive mode</span>23 <span data-i18n="sd_interactive_mode_txt">Use interactive mode</span>
20 </label>24 </label>
21 <label for="sd_multimodal_captioning" class="checkbox_label" data-i18n="[title]sd_multimodal_captioning" title="Use multimodal captioning to generate prompts for user and character portraits based on their avatars.">25 <label for="sd_multimodal_captioning" class="checkbox_label" data-i18n="[title]sd_multimodal_captioning" title="Use multimodal captioning to generate prompts for user and character portraits based on their avatars.">
22 <input id="sd_multimodal_captioning" type="checkbox" />26 <input id="sd_multimodal_captioning" type="checkbox" />
@@ -27,11 +31,6 @@
27 <span data-i18n="sd_free_extend_txt">Extend free mode prompts</span>31 <span data-i18n="sd_free_extend_txt">Extend free mode prompts</span>
28 <small data-i18n="sd_free_extend_small">(interactive/commands)</small>32 <small data-i18n="sd_free_extend_small">(interactive/commands)</small>
29 </label>33 </label>
30 <label for="sd_expand" class="checkbox_label" data-i18n="[title]sd_expand" title="Automatically extend prompts using text generation model">
31 <input id="sd_expand" type="checkbox" />
32 <span data-i18n="sd_expand_txt">Auto-extend prompts</span>
33 <span class="right_menu_button fa-solid fa-triangle-exclamation" data-i18n="[title]sd_expand_warning" title="May produce unexpected results. Manual prompt editing is recommended."></span>
34 </label>
35 <label for="sd_snap" class="checkbox_label" data-i18n="[title]sd_snap" title="Snap generation requests with a forced aspect ratio (portraits, backgrounds) to the nearest known resolution, while trying to preserve the absolute pixel counts (recommended for SDXL).">34 <label for="sd_snap" class="checkbox_label" data-i18n="[title]sd_snap" title="Snap generation requests with a forced aspect ratio (portraits, backgrounds) to the nearest known resolution, while trying to preserve the absolute pixel counts (recommended for SDXL).">
36 <input id="sd_snap" type="checkbox" />35 <input id="sd_snap" type="checkbox" />
37 <span data-i18n="sd_snap_txt">Snap auto-adjusted resolutions</span>36 <span data-i18n="sd_snap_txt">Snap auto-adjusted resolutions</span>
@@ -308,7 +307,7 @@
308 </div>307 </div>
309308
310 <div class="flex-container">309 <div class="flex-container">
311 <div class="alignitemscenter flex-container flexFlowColumn flexGrow flexShrink gap0 flexBasis48p" data-sd-source="auto,vlad,drawthings">310 <div class="alignitemscenter flex-container flexFlowColumn flexGrow flexShrink gap0 flexBasis48p" data-sd-source="auto,vlad,drawthings,novel">
312 <small>311 <small>
313 <span data-i18n="Upscale by">Upscale by</span>312 <span data-i18n="Upscale by">Upscale by</span>
314 </small>313 </small>
@@ -332,14 +331,6 @@
332 <input class="neo-range-input" type="number" id="sd_hr_second_pass_steps_value" data-for="sd_hr_second_pass_steps" max="{{hr_second_pass_steps_max}}" step="{{hr_second_pass_steps_step}}" value="{{hr_second_pass_steps}}" >331 <input class="neo-range-input" type="number" id="sd_hr_second_pass_steps_value" data-for="sd_hr_second_pass_steps" max="{{hr_second_pass_steps_max}}" step="{{hr_second_pass_steps_step}}" value="{{hr_second_pass_steps}}" >
333 </div>332 </div>
334333
335 <div class="alignitemscenter flex-container flexFlowColumn flexGrow flexShrink gap0 flexBasis48p" data-sd-source="novel">
336 <small>
337 <span data-i18n="Upscale by">Upscale by</span>
338 </small>
339 <input class="neo-range-slider" type="range" id="sd_novel_upscale_ratio" name="sd_novel_upscale_ratio" min="{{novel_upscale_ratio_min}}" max="{{novel_upscale_ratio_max}}" step="{{novel_upscale_ratio_step}}" value="{{novel_upscale_ratio}}" >
340 <input class="neo-range-input" type="number" id="sd_novel_upscale_ratio_value" data-for="sd_novel_upscale_ratio" min="{{novel_upscale_ratio_min}}" max="{{novel_upscale_ratio_max}}" step="{{novel_upscale_ratio_step}}" value="{{novel_upscale_ratio}}" >
341 </div>
342
343 <div class="alignitemscenter flex-container flexFlowColumn flexGrow flexShrink gap0 flexBasis48p" data-sd-source="auto,vlad,comfy,horde,drawthings,extras">334 <div class="alignitemscenter flex-container flexFlowColumn flexGrow flexShrink gap0 flexBasis48p" data-sd-source="auto,vlad,comfy,horde,drawthings,extras">
344 <small>335 <small>
345 <span data-i18n="CLIP Skip">CLIP Skip</span>336 <span data-i18n="CLIP Skip">CLIP Skip</span>
public/scripts/extensions/tts/cosyvoice.js+206 -0
@@ -0,0 +1,206 @@
1import { saveTtsProviderSettings } from './index.js';
2
3export { CosyVoiceProvider };
4
5class CosyVoiceProvider {
6 //########//
7 // Config //
8 //########//
9
10 settings;
11 ready = false;
12 voices = [];
13 separator = '. ';
14 audioElement = document.createElement('audio');
15
16 /**
17 * Perform any text processing before passing to TTS engine.
18 * @param {string} text Input text
19 * @returns {string} Processed text
20 */
21 processText(text) {
22 return text;
23 }
24
25 audioFormats = ['wav', 'ogg', 'silk', 'mp3', 'flac'];
26
27 languageLabels = {
28 'Auto': 'auto',
29 };
30
31 langKey2LangCode = {
32 'zh': 'zh-CN',
33 'en': 'en-US',
34 'ja': 'ja-JP',
35 'ko': 'ko-KR',
36 };
37
38 modelTypes = {
39 CosyVoice: 'CosyVoice',
40 };
41
42 defaultSettings = {
43 provider_endpoint: 'http://localhost:9880',
44 format: 'wav',
45 lang: 'auto',
46 streaming: false,
47
48 };
49
50 get settingsHtml() {
51 let html = `
52
53 <label for="tts_endpoint">Provider Endpoint:</label>
54 <input id="tts_endpoint" type="text" class="text_pole" maxlength="250" height="300" value="${this.defaultSettings.provider_endpoint}"/>
55 <span>Windows users Use <a target="_blank" href="https://github.com/v3ucn/CosyVoice_For_Windows">CosyVoice_For_Windows</a>(Unofficial).</span><br/>
56 <span>Macos Users Use <a target="_blank" href="https://github.com/v3ucn/CosyVoice_for_MacOs">CosyVoice_for_MacOs</a>(Unofficial).</span><br/>
57 <br/>
58
59 `;
60
61 return html;
62 }
63
64 onSettingsChange() {
65 // Used when provider settings are updated from UI
66 this.settings.provider_endpoint = $('#tts_endpoint').val();
67
68
69 saveTtsProviderSettings();
70 this.changeTTSSettings();
71 }
72
73 async loadSettings(settings) {
74 // Pupulate Provider UI given input settings
75 if (Object.keys(settings).length == 0) {
76 console.info('Using default TTS Provider settings');
77 }
78
79 // Only accept keys defined in defaultSettings
80 this.settings = this.defaultSettings;
81
82 for (const key in settings) {
83 if (key in this.settings) {
84 this.settings[key] = settings[key];
85 } else {
86 console.debug(`Ignoring non-user-configurable setting: ${key}`);
87 }
88 }
89
90 // Set initial values from the settings
91 $('#tts_endpoint').val(this.settings.provider_endpoint);
92
93
94 await this.checkReady();
95
96 console.info('ITS: Settings loaded');
97 }
98
99 // Perform a simple readiness check by trying to fetch voiceIds
100 async checkReady() {
101 await Promise.allSettled([this.fetchTtsVoiceObjects(), this.changeTTSSettings()]);
102 }
103
104 async onRefreshClick() {
105 return;
106 }
107
108 //#################//
109 // TTS Interfaces //
110 //#################//
111
112 async getVoice(voiceName) {
113
114
115
116 if (this.voices.length == 0) {
117 this.voices = await this.fetchTtsVoiceObjects();
118 }
119
120
121
122 const match = this.voices.filter(
123 v => v.name == voiceName,
124 )[0];
125 console.log(match);
126 if (!match) {
127 throw `TTS Voice name ${voiceName} not found`;
128 }
129 return match;
130 }
131
132
133
134 async generateTts(text, voiceId) {
135 const response = await this.fetchTtsGeneration(text, voiceId);
136 return response;
137 }
138
139 //###########//
140 // API CALLS //
141 //###########//
142 async fetchTtsVoiceObjects() {
143 const response = await fetch(`${this.settings.provider_endpoint}/speakers`);
144 console.info(response);
145
146 if (!response.ok) {
147 throw new Error(`HTTP ${response.status}: ${await response.json()}`);
148 }
149 const responseJson = await response.json();
150
151
152 this.voices = responseJson;
153
154 return responseJson;
155 }
156
157 // Each time a parameter is changed, we change the configuration
158 async changeTTSSettings() {
159 }
160
161 /**
162 * Fetch TTS generation from the API.
163 * @param {string} inputText Text to generate TTS for
164 * @param {string} voiceId Voice ID to use (model_type&speaker_id))
165 * @returns {Promise<Response|string>} Fetch response
166 */
167 async fetchTtsGeneration(inputText, voiceId, lang = null, forceNoStreaming = false) {
168 console.info(`Generating new TTS for voice_id ${voiceId}`);
169
170 const streaming = this.settings.streaming;
171
172 const params = {
173 text: inputText,
174 speaker: voiceId,
175 };
176
177 if (streaming) {
178 params['streaming'] = 1;
179 }
180
181 const url = `${this.settings.provider_endpoint}/`;
182
183 const response = await fetch(
184 url,
185 {
186 method: 'POST',
187 headers: {
188 'Content-Type': 'application/json',
189 },
190 body: JSON.stringify(params), // Convert parameter objects to JSON strings
191 },
192 );
193 if (!response.ok) {
194 toastr.error(response.statusText, 'TTS Generation Failed');
195 throw new Error(`HTTP ${response.status}: ${await response.text()}`);
196 }
197 return response;
198 }
199
200
201
202 // Interface not used
203 async fetchTtsFromHistory(history_item_id) {
204 return Promise.resolve(history_item_id);
205 }
206}
public/scripts/extensions/tts/gpt-sovits-v2.js+226 -0
@@ -0,0 +1,226 @@
1import { saveTtsProviderSettings } from './index.js';
2
3export { GptSovitsV2Provider };
4
5class GptSovitsV2Provider {
6 //########//
7 // Config //
8 //########//
9
10 settings;
11 ready = false;
12 voices = [];
13 separator = '. ';
14 audioElement = document.createElement('audio');
15
16 /**
17 * Perform any text processing before passing to TTS engine.
18 * @param {string} text Input text
19 * @returns {string} Processed text
20 */
21 processText(text) {
22 return text;
23 }
24
25 audioFormats = ['wav', 'ogg', 'silk', 'mp3', 'flac'];
26
27 languageLabels = {
28 'Auto': 'auto',
29 };
30
31 langKey2LangCode = {
32 'zh': 'zh-CN',
33 'en': 'en-US',
34 'ja': 'ja-JP',
35 'ko': 'ko-KR',
36 };
37
38
39 defaultSettings = {
40 provider_endpoint: 'http://localhost:9880',
41 format: 'wav',
42 lang: 'auto',
43 streaming: false,
44 text_lang: 'zh',
45 prompt_lang: 'zh',
46
47 };
48
49 get settingsHtml() {
50 let html = `
51
52 <label for="tts_endpoint">Provider Endpoint:</label>
53 <input id="tts_endpoint" type="text" class="text_pole" maxlength="250" height="300" value="${this.defaultSettings.provider_endpoint}"/>
54 <span>Use <a target="_blank" href="https://github.com/v3ucn/GPT-SoVITS-V2">GPT-SoVITS-V2</a>(Unofficial).</span><br/>
55 <label for="text_lang">Text Lang(Inference text language):</label>
56 <input id="text_lang" type="text" class="text_pole" maxlength="250" height="300" value="${this.defaultSettings.text_lang}"/>
57 <label for="text_lang">Prompt Lang(Reference audio text language):</label>
58 <input id="prompt_lang" type="text" class="text_pole" maxlength="250" height="300" value="${this.defaultSettings.prompt_lang}"/>
59 <br/>
60
61 `;
62
63 return html;
64 }
65
66 onSettingsChange() {
67 // Used when provider settings are updated from UI
68 this.settings.provider_endpoint = $('#tts_endpoint').val();
69 this.settings.text_lang = $('#text_lang').val();
70 this.settings.prompt_lang = $('#prompt_lang').val();
71
72
73 saveTtsProviderSettings();
74 this.changeTTSSettings();
75 }
76
77 async loadSettings(settings) {
78 // Pupulate Provider UI given input settings
79 if (Object.keys(settings).length == 0) {
80 console.info('Using default TTS Provider settings');
81 }
82
83 // Only accept keys defined in defaultSettings
84 this.settings = this.defaultSettings;
85
86 for (const key in settings) {
87 if (key in this.settings) {
88 this.settings[key] = settings[key];
89 } else {
90 console.debug(`Ignoring non-user-configurable setting: ${key}`);
91 }
92 }
93
94 // Set initial values from the settings
95 $('#tts_endpoint').val(this.settings.provider_endpoint);
96 $('#text_lang').val(this.settings.text_lang);
97 $('#prompt_lang').val(this.settings.prompt_lang);
98
99
100 await this.checkReady();
101
102 console.info('ITS: Settings loaded');
103 }
104
105 // Perform a simple readiness check by trying to fetch voiceIds
106 async checkReady() {
107 await Promise.allSettled([this.fetchTtsVoiceObjects(), this.changeTTSSettings()]);
108 }
109
110 async onRefreshClick() {
111 return;
112 }
113
114 //#################//
115 // TTS Interfaces //
116 //#################//
117
118 async getVoice(voiceName) {
119
120
121
122 if (this.voices.length == 0) {
123 this.voices = await this.fetchTtsVoiceObjects();
124 }
125
126
127
128 const match = this.voices.filter(
129 v => v.name == voiceName,
130 )[0];
131 console.log(match);
132 if (!match) {
133 throw `TTS Voice name ${voiceName} not found`;
134 }
135 return match;
136 }
137
138
139
140 async generateTts(text, voiceId) {
141 const response = await this.fetchTtsGeneration(text, voiceId);
142 return response;
143 }
144
145 //###########//
146 // API CALLS //
147 //###########//
148 async fetchTtsVoiceObjects() {
149 const response = await fetch(`${this.settings.provider_endpoint}/speakers`);
150 console.info(response);
151
152 if (!response.ok) {
153 throw new Error(`HTTP ${response.status}: ${await response.json()}`);
154 }
155 const responseJson = await response.json();
156
157
158 this.voices = responseJson;
159
160 return responseJson;
161 }
162
163 // Each time a parameter is changed, we change the configuration
164 async changeTTSSettings() {
165 }
166
167 /**
168 * Fetch TTS generation from the API.
169 * @param {string} inputText Text to generate TTS for
170 * @param {string} voiceId Voice ID to use (model_type&speaker_id))
171 * @returns {Promise<Response|string>} Fetch response
172 */
173
174
175
176
177 async fetchTtsGeneration(inputText, voiceId, lang = null, forceNoStreaming = false) {
178 console.info(`Generating new TTS for voice_id ${voiceId}`);
179
180 function replaceSpeaker(text) {
181 return text.replace(/\[.*?\]/gu, '');
182 }
183
184 let prompt_text = replaceSpeaker(voiceId);
185
186 const streaming = this.settings.streaming;
187
188 const params = {
189 text: inputText,
190 prompt_text: prompt_text,
191 ref_audio_path: './参考音频/' + voiceId + '.wav',
192 text_lang: this.settings.text_lang,
193 prompt_lang: this.settings.prompt_lang,
194 text_split_method: 'cut5',
195 batch_size: 1,
196 media_type: 'ogg',
197 streaming_mode: 'true',
198 };
199
200
201 const url = `${this.settings.provider_endpoint}/`;
202
203 const response = await fetch(
204 url,
205 {
206 method: 'POST',
207 headers: {
208 'Content-Type': 'application/json',
209 },
210 body: JSON.stringify(params), // Convert parameter objects to JSON strings
211 },
212 );
213 if (!response.ok) {
214 toastr.error(response.statusText, 'TTS Generation Failed');
215 throw new Error(`HTTP ${response.status}: ${await response.text()}`);
216 }
217 return response;
218 }
219
220
221
222 // Interface not used
223 async fetchTtsFromHistory(history_item_id) {
224 return Promise.resolve(history_item_id);
225 }
226}
public/scripts/extensions/tts/index.js+5 -1
@@ -4,6 +4,7 @@ import { delay, escapeRegex, getBase64Async, getStringHash, onlyUnique } from '.
4import { EdgeTtsProvider } from './edge.js';4import { EdgeTtsProvider } from './edge.js';
5import { ElevenLabsTtsProvider } from './elevenlabs.js';5import { ElevenLabsTtsProvider } from './elevenlabs.js';
6import { SileroTtsProvider } from './silerotts.js';6import { SileroTtsProvider } from './silerotts.js';
7import { GptSovitsV2Provider } from './gpt-sovits-v2.js';
7import { CoquiTtsProvider } from './coqui.js';8import { CoquiTtsProvider } from './coqui.js';
8import { SystemTtsProvider } from './system.js';9import { SystemTtsProvider } from './system.js';
9import { NovelTtsProvider } from './novel.js';10import { NovelTtsProvider } from './novel.js';
@@ -15,6 +16,7 @@ import { VITSTtsProvider } from './vits.js';
15import { GSVITtsProvider } from './gsvi.js';16import { GSVITtsProvider } from './gsvi.js';
16import { SBVits2TtsProvider } from './sbvits2.js';17import { SBVits2TtsProvider } from './sbvits2.js';
17import { AllTalkTtsProvider } from './alltalk.js';18import { AllTalkTtsProvider } from './alltalk.js';
19import { CosyVoiceProvider } from './cosyvoice.js';
18import { SpeechT5TtsProvider } from './speecht5.js';20import { SpeechT5TtsProvider } from './speecht5.js';
19import { AzureTtsProvider } from './azure.js';21import { AzureTtsProvider } from './azure.js';
20import { SlashCommandParser } from '../../slash-commands/SlashCommandParser.js';22import { SlashCommandParser } from '../../slash-commands/SlashCommandParser.js';
@@ -86,9 +88,11 @@ const ttsProviders = {
86 AllTalk: AllTalkTtsProvider,88 AllTalk: AllTalkTtsProvider,
87 Azure: AzureTtsProvider,89 Azure: AzureTtsProvider,
88 Coqui: CoquiTtsProvider,90 Coqui: CoquiTtsProvider,
91 'CosyVoice (Unofficial)': CosyVoiceProvider,
89 Edge: EdgeTtsProvider,92 Edge: EdgeTtsProvider,
90 ElevenLabs: ElevenLabsTtsProvider,93 ElevenLabs: ElevenLabsTtsProvider,
91 GSVI: GSVITtsProvider,94 GSVI: GSVITtsProvider,
95 'GPT-SoVITS-V2 (Unofficial)': GptSovitsV2Provider,
92 Novel: NovelTtsProvider,96 Novel: NovelTtsProvider,
93 OpenAI: OpenAITtsProvider,97 OpenAI: OpenAITtsProvider,
94 'OpenAI Compatible': OpenAICompatibleTtsProvider,98 'OpenAI Compatible': OpenAICompatibleTtsProvider,
@@ -470,7 +474,7 @@ async function processTtsQueue() {
470 }474 }
471475
472 if (extension_settings.tts.narrate_quoted_only) {476 if (extension_settings.tts.narrate_quoted_only) {
473 const special_quotes = /[“”«»]/g; // Extend this regex to include other special quotes477 const special_quotes = /[“”«»「」『』""]/g; // Extend this regex to include other special quotes
474 text = text.replace(special_quotes, '"');478 text = text.replace(special_quotes, '"');
475 const matches = text.match(/".*?"/g); // Matches text inside double quotes, non-greedily479 const matches = text.match(/".*?"/g); // Matches text inside double quotes, non-greedily
476 const partJoiner = (ttsProvider?.separator || ' ... ');480 const partJoiner = (ttsProvider?.separator || ' ... ');
public/scripts/extensions/vectors/index.js+2 -28
@@ -466,13 +466,13 @@ async function ingestDataBankAttachments(source) {
466 }466 }
467467
468 // Download and process the file468 // Download and process the file
469 file.text = await getFileAttachment(file.url);469 const fileText = await getFileAttachment(file.url);
470 console.log(`Vectors: Retrieved file ${file.name} from Data Bank`);470 console.log(`Vectors: Retrieved file ${file.name} from Data Bank`);
471 // Convert kilobytes to string length471 // Convert kilobytes to string length
472 const thresholdLength = settings.size_threshold_db * 1024;472 const thresholdLength = settings.size_threshold_db * 1024;
473 // Use chunk size from settings if file is larger than threshold473 // Use chunk size from settings if file is larger than threshold
474 const chunkSize = file.size > thresholdLength ? settings.chunk_size_db : -1;474 const chunkSize = file.size > thresholdLength ? settings.chunk_size_db : -1;
475 await vectorizeFile(file.text, file.name, collectionId, chunkSize, settings.overlap_percent_db);475 await vectorizeFile(fileText, file.name, collectionId, chunkSize, settings.overlap_percent_db);
476 }476 }
477477
478 return dataBankCollectionIds;478 return dataBankCollectionIds;
@@ -999,25 +999,6 @@ async function purgeAllVectorIndexes() {
999 }999 }
1000}1000}
10011001
1002async function isModelScopesEnabled() {
1003 try {
1004 const response = await fetch('/api/vector/scopes-enabled', {
1005 method: 'GET',
1006 headers: getVectorHeaders(),
1007 });
1008
1009 if (!response.ok) {
1010 return false;
1011 }
1012
1013 const data = await response.json();
1014 return data?.enabled ?? false;
1015 } catch (error) {
1016 console.error('Vectors: Failed to check model scopes', error);
1017 return false;
1018 }
1019}
1020
1021function toggleSettings() {1002function toggleSettings() {
1022 $('#vectors_files_settings').toggle(!!settings.enabled_files);1003 $('#vectors_files_settings').toggle(!!settings.enabled_files);
1023 $('#vectors_chats_settings').toggle(!!settings.enabled_chats);1004 $('#vectors_chats_settings').toggle(!!settings.enabled_chats);
@@ -1282,7 +1263,6 @@ jQuery(async () => {
1282 }1263 }
12831264
1284 Object.assign(settings, extension_settings.vectors);1265 Object.assign(settings, extension_settings.vectors);
1285 const scopesEnabled = await isModelScopesEnabled();
12861266
1287 // Migrate from TensorFlow to Transformers1267 // Migrate from TensorFlow to Transformers
1288 settings.source = settings.source !== 'local' ? settings.source : 'transformers';1268 settings.source = settings.source !== 'local' ? settings.source : 'transformers';
@@ -1294,7 +1274,6 @@ jQuery(async () => {
1294 saveSettingsDebounced();1274 saveSettingsDebounced();
1295 toggleSettings();1275 toggleSettings();
1296 });1276 });
1297 $('#vectors_modelWarning').hide();
1298 $('#vectors_enabled_files').prop('checked', settings.enabled_files).on('input', () => {1277 $('#vectors_enabled_files').prop('checked', settings.enabled_files).on('input', () => {
1299 settings.enabled_files = $('#vectors_enabled_files').prop('checked');1278 settings.enabled_files = $('#vectors_enabled_files').prop('checked');
1300 Object.assign(extension_settings.vectors, settings);1279 Object.assign(extension_settings.vectors, settings);
@@ -1334,31 +1313,26 @@ jQuery(async () => {
1334 saveSettingsDebounced();1313 saveSettingsDebounced();
1335 });1314 });
1336 $('#vectors_togetherai_model').val(settings.togetherai_model).on('change', () => {1315 $('#vectors_togetherai_model').val(settings.togetherai_model).on('change', () => {
1337 !scopesEnabled && $('#vectors_modelWarning').show();
1338 settings.togetherai_model = String($('#vectors_togetherai_model').val());1316 settings.togetherai_model = String($('#vectors_togetherai_model').val());
1339 Object.assign(extension_settings.vectors, settings);1317 Object.assign(extension_settings.vectors, settings);
1340 saveSettingsDebounced();1318 saveSettingsDebounced();
1341 });1319 });
1342 $('#vectors_openai_model').val(settings.openai_model).on('change', () => {1320 $('#vectors_openai_model').val(settings.openai_model).on('change', () => {
1343 !scopesEnabled && $('#vectors_modelWarning').show();
1344 settings.openai_model = String($('#vectors_openai_model').val());1321 settings.openai_model = String($('#vectors_openai_model').val());
1345 Object.assign(extension_settings.vectors, settings);1322 Object.assign(extension_settings.vectors, settings);
1346 saveSettingsDebounced();1323 saveSettingsDebounced();
1347 });1324 });
1348 $('#vectors_cohere_model').val(settings.cohere_model).on('change', () => {1325 $('#vectors_cohere_model').val(settings.cohere_model).on('change', () => {
1349 !scopesEnabled && $('#vectors_modelWarning').show();
1350 settings.cohere_model = String($('#vectors_cohere_model').val());1326 settings.cohere_model = String($('#vectors_cohere_model').val());
1351 Object.assign(extension_settings.vectors, settings);1327 Object.assign(extension_settings.vectors, settings);
1352 saveSettingsDebounced();1328 saveSettingsDebounced();
1353 });1329 });
1354 $('#vectors_ollama_model').val(settings.ollama_model).on('input', () => {1330 $('#vectors_ollama_model').val(settings.ollama_model).on('input', () => {
1355 !scopesEnabled && $('#vectors_modelWarning').show();
1356 settings.ollama_model = String($('#vectors_ollama_model').val());1331 settings.ollama_model = String($('#vectors_ollama_model').val());
1357 Object.assign(extension_settings.vectors, settings);1332 Object.assign(extension_settings.vectors, settings);
1358 saveSettingsDebounced();1333 saveSettingsDebounced();
1359 });1334 });
1360 $('#vectors_vllm_model').val(settings.vllm_model).on('input', () => {1335 $('#vectors_vllm_model').val(settings.vllm_model).on('input', () => {
1361 !scopesEnabled && $('#vectors_modelWarning').show();
1362 settings.vllm_model = String($('#vectors_vllm_model').val());1336 settings.vllm_model = String($('#vectors_vllm_model').val());
1363 Object.assign(extension_settings.vectors, settings);1337 Object.assign(extension_settings.vectors, settings);
1364 saveSettingsDebounced();1338 saveSettingsDebounced();
public/scripts/extensions/vectors/settings.html+0 -8
@@ -96,14 +96,6 @@
96 </i>96 </i>
97 </div>97 </div>
9898
99 <small id="vectors_modelWarning">
100 <i class="fa-solid fa-exclamation-triangle"></i>
101 <span>
102 Set <code>vectors.enableModelScopes</code> to true in config.yaml to switch between vectorization models without needing to purge existing vectors.
103 This option will soon be enabled by default.
104 </span>
105 </small>
106
107 <div class="flex-container alignItemsCenter" id="nomicai_apiKey">99 <div class="flex-container alignItemsCenter" id="nomicai_apiKey">
108 <label for="api_key_nomicai" class="flex1">100 <label for="api_key_nomicai" class="flex1">
109 <span data-i18n="NomicAI API Key">NomicAI API Key</span>101 <span data-i18n="NomicAI API Key">NomicAI API Key</span>
public/scripts/group-chats.js+11 -11
@@ -70,12 +70,12 @@ import {
70 animation_duration,70 animation_duration,
71 depth_prompt_role_default,71 depth_prompt_role_default,
72 shouldAutoContinue,72 shouldAutoContinue,
73 this_chid,
74} from '../script.js';73} from '../script.js';
75import { printTagList, createTagMapFromList, applyTagsOnCharacterSelect, tag_map, applyTagsOnGroupSelect } from './tags.js';74import { printTagList, createTagMapFromList, applyTagsOnCharacterSelect, tag_map, applyTagsOnGroupSelect } from './tags.js';
76import { FILTER_TYPES, FilterHelper } from './filters.js';75import { FILTER_TYPES, FilterHelper } from './filters.js';
77import { isExternalMediaAllowed } from './chats.js';76import { isExternalMediaAllowed } from './chats.js';
78import { POPUP_TYPE, Popup, callGenericPopup } from './popup.js';77import { POPUP_TYPE, Popup, callGenericPopup } from './popup.js';
78import { t } from './i18n.js';
7979
80export {80export {
81 selected_group,81 selected_group,
@@ -189,8 +189,8 @@ async function validateGroup(group) {
189 group.members = group.members.filter(member => {189 group.members = group.members.filter(member => {
190 const character = characters.find(x => x.avatar === member || x.name === member);190 const character = characters.find(x => x.avatar === member || x.name === member);
191 if (!character) {191 if (!character) {
192 const msg = `Warning: Listed member ${member} does not exist as a character. It will be removed from the group.`;192 const msg = t`Warning: Listed member ${member} does not exist as a character. It will be removed from the group.`;
193 toastr.warning(msg, 'Group Validation');193 toastr.warning(msg, t`Group Validation`);
194 console.warn(msg);194 console.warn(msg);
195 dirty = true;195 dirty = true;
196 }196 }
@@ -522,7 +522,7 @@ async function saveGroupChat(groupId, shouldSaveGroup) {
522 });522 });
523523
524 if (!response.ok) {524 if (!response.ok) {
525 toastr.error('Check the server connection and reload the page to prevent data loss.', 'Group Chat could not be saved');525 toastr.error(t`Check the server connection and reload the page to prevent data loss.`, t`Group Chat could not be saved`);
526 console.error('Group chat could not be saved', response);526 console.error('Group chat could not be saved', response);
527 return;527 return;
528 }528 }
@@ -837,7 +837,7 @@ async function generateGroupWrapper(by_auto_mode, type = null, params = {}) {
837 activatedMembers = activateSwipe(group.members);837 activatedMembers = activateSwipe(group.members);
838838
839 if (activatedMembers.length === 0) {839 if (activatedMembers.length === 0) {
840 toastr.warning('Deleted group member swiped. To get a reply, add them back to the group.');840 toastr.warning(t`Deleted group member swiped. To get a reply, add them back to the group.`);
841 throw new Error('Deleted group member swiped');841 throw new Error('Deleted group member swiped');
842 }842 }
843 }843 }
@@ -1368,15 +1368,15 @@ function isGroupMemberDisabled(avatarId) {
13681368
1369async function onDeleteGroupClick() {1369async function onDeleteGroupClick() {
1370 if (!openGroupId) {1370 if (!openGroupId) {
1371 toastr.warning('Currently no group selected.');1371 toastr.warning(t`Currently no group selected.`);
1372 return;1372 return;
1373 }1373 }
1374 if (is_group_generating) {1374 if (is_group_generating) {
1375 toastr.warning('Not so fast! Wait for the characters to stop typing before deleting the group.');1375 toastr.warning(t`Not so fast! Wait for the characters to stop typing before deleting the group.`);
1376 return;1376 return;
1377 }1377 }
13781378
1379 const confirm = await Popup.show.confirm('Delete the group?', '<p>This will also delete all your chats with that group. If you want to delete a single conversation, select a "View past chats" option in the lower left menu.</p>');1379 const confirm = await Popup.show.confirm(t`Delete the group?`, '<p>' + t`This will also delete all your chats with that group. If you want to delete a single conversation, select a "View past chats" option in the lower left menu.` + '</p>');
1380 if (confirm) {1380 if (confirm) {
1381 deleteGroup(openGroupId);1381 deleteGroup(openGroupId);
1382 }1382 }
@@ -1630,7 +1630,7 @@ function updateFavButtonState(state) {
16301630
1631export async function openGroupById(groupId) {1631export async function openGroupById(groupId) {
1632 if (isChatSaving) {1632 if (isChatSaving) {
1633 toastr.info('Please wait until the chat is saved before switching characters.', 'Your chat is still saving...');1633 toastr.info(t`Please wait until the chat is saved before switching characters.`, t`Your chat is still saving...`);
1634 return;1634 return;
1635 }1635 }
16361636
@@ -1659,7 +1659,7 @@ export async function openGroupById(groupId) {
16591659
1660function openCharacterDefinition(characterSelect) {1660function openCharacterDefinition(characterSelect) {
1661 if (is_group_generating) {1661 if (is_group_generating) {
1662 toastr.warning('Can\'t peek a character while group reply is being generated');1662 toastr.warning(t`Can't peek a character while group reply is being generated`);
1663 console.warn('Can\'t peek a character def while group reply is being generated');1663 console.warn('Can\'t peek a character def while group reply is being generated');
1664 return;1664 return;
1665 }1665 }
@@ -1908,7 +1908,7 @@ export async function saveGroupBookmarkChat(groupId, name, metadata, mesId) {
1908 });1908 });
19091909
1910 if (!response.ok) {1910 if (!response.ok) {
1911 toastr.error('Check the server connection and reload the page to prevent data loss.', 'Group chat could not be saved');1911 toastr.error(t`Check the server connection and reload the page to prevent data loss.`, t`Group chat could not be saved`);
1912 console.error('Group chat could not be saved', response);1912 console.error('Group chat could not be saved', response);
1913 }1913 }
1914}1914}
public/scripts/i18n.js+1 -0
@@ -215,6 +215,7 @@ function addLanguagesToDropdown() {
215}215}
216216
217export async function initLocales() {217export async function initLocales() {
218 moment.locale(localeFile);
218 langs = await fetch('/locales/lang.json').then(response => response.json());219 langs = await fetch('/locales/lang.json').then(response => response.json());
219 localeData = await getLocaleData(localeFile);220 localeData = await getLocaleData(localeFile);
220 applyLocale();221 applyLocale();
public/scripts/instruct-mode.js+4 -2
@@ -384,6 +384,10 @@ export function formatInstructModeChat(name, mes, isUser, isNarrator, forceAvata
384 * @returns {string} Formatted instruct mode system prompt.384 * @returns {string} Formatted instruct mode system prompt.
385 */385 */
386export function formatInstructModeSystemPrompt(systemPrompt) {386export function formatInstructModeSystemPrompt(systemPrompt) {
387 if (!systemPrompt) {
388 return '';
389 }
390
387 const separator = power_user.instruct.wrap ? '\n' : '';391 const separator = power_user.instruct.wrap ? '\n' : '';
388392
389 if (power_user.instruct.system_sequence_prefix) {393 if (power_user.instruct.system_sequence_prefix) {
@@ -550,11 +554,9 @@ export function formatInstructModePrompt(name, isImpersonate, promptBias, name1,
550 * @param {string} name Preset name.554 * @param {string} name Preset name.
551 */555 */
552function selectMatchingContextTemplate(name) {556function selectMatchingContextTemplate(name) {
553 let foundMatch = false;
554 for (const context_preset of context_presets) {557 for (const context_preset of context_presets) {
555 // If context template matches the instruct preset558 // If context template matches the instruct preset
556 if (context_preset.name === name) {559 if (context_preset.name === name) {
557 foundMatch = true;
558 selectContextPreset(context_preset.name, { isAuto: true });560 selectContextPreset(context_preset.name, { isAuto: true });
559 break;561 break;
560 }562 }
public/scripts/kai-settings.js+1 -1
@@ -188,7 +188,7 @@ export async function generateKoboldWithStreaming(generate_data, signal) {
188 if (data?.token) {188 if (data?.token) {
189 text += data.token;189 text += data.token;
190 }190 }
191 yield { text, swipes: [] };191 yield { text, swipes: [], toolCalls: [] };
192 }192 }
193 };193 };
194}194}
public/scripts/login.js+7 -1
@@ -180,7 +180,13 @@ function displayError(message) {
180 * Preserves the query string.180 * Preserves the query string.
181 */181 */
182function redirectToHome() {182function redirectToHome() {
183 window.location.href = '/' + window.location.search;183 // After a login theres no need to preserve the
184 // noauto (if present)
185 const urlParams = new URLSearchParams(window.location.search);
186
187 urlParams.delete('noauto');
188
189 window.location.href = '/' + urlParams.toString();
184}190}
185191
186/**192/**
public/scripts/nai-settings.js+30 -6
@@ -492,11 +492,37 @@ function getBadWordPermutations(text) {
492492
493export function getNovelGenerationData(finalPrompt, settings, maxLength, isImpersonate, isContinue, _cfgValues, type) {493export function getNovelGenerationData(finalPrompt, settings, maxLength, isImpersonate, isContinue, _cfgValues, type) {
494 console.debug('NovelAI generation data for', type);494 console.debug('NovelAI generation data for', type);
495 const isKayra = nai_settings.model_novel.includes('kayra');
496 const isErato = nai_settings.model_novel.includes('erato');
495497
496 const tokenizerType = getTokenizerTypeForModel(nai_settings.model_novel);498 const tokenizerType = getTokenizerTypeForModel(nai_settings.model_novel);
499 const stoppingStrings = getStoppingStrings(isImpersonate, isContinue);
500
501 // Llama 3 tokenizer, huh?
502 if (isErato) {
503 const additionalStopStrings = [];
504 for (const stoppingString of stoppingStrings) {
505 if (stoppingString.startsWith('\n')) {
506 additionalStopStrings.push('.' + stoppingString);
507 additionalStopStrings.push('!' + stoppingString);
508 additionalStopStrings.push('?' + stoppingString);
509 additionalStopStrings.push('*' + stoppingString);
510 additionalStopStrings.push('"' + stoppingString);
511 additionalStopStrings.push('_' + stoppingString);
512 additionalStopStrings.push('...' + stoppingString);
513 additionalStopStrings.push('."' + stoppingString);
514 additionalStopStrings.push('?"' + stoppingString);
515 additionalStopStrings.push('!"' + stoppingString);
516 additionalStopStrings.push('.*' + stoppingString);
517 additionalStopStrings.push(')' + stoppingString);
518 }
519 }
520 stoppingStrings.push(...additionalStopStrings);
521 }
522
523 const MAX_STOP_SEQUENCES = 1024;
497 const stopSequences = (tokenizerType !== tokenizers.NONE)524 const stopSequences = (tokenizerType !== tokenizers.NONE)
498 ? getStoppingStrings(isImpersonate, isContinue)525 ? stoppingStrings.slice(0, MAX_STOP_SEQUENCES).map(t => getTextTokens(tokenizerType, t))
499 .map(t => getTextTokens(tokenizerType, t))
500 : undefined;526 : undefined;
501527
502 const badWordIds = (tokenizerType !== tokenizers.NONE)528 const badWordIds = (tokenizerType !== tokenizers.NONE)
@@ -515,11 +541,9 @@ export function getNovelGenerationData(finalPrompt, settings, maxLength, isImper
515 console.log(finalPrompt);541 console.log(finalPrompt);
516 }542 }
517543
518 const isKayra = nai_settings.model_novel.includes('kayra');
519 const isErato = nai_settings.model_novel.includes('erato');
520544
521 if (isErato) {545 if (isErato) {
522 finalPrompt = '<|startoftext|>' + finalPrompt;546 finalPrompt = '<|startoftext|><|reserved_special_token81|>' + finalPrompt;
523 }547 }
524548
525 const adjustedMaxLength = (isKayra || isErato) ? getKayraMaxResponseTokens() : maximum_output_length;549 const adjustedMaxLength = (isKayra || isErato) ? getKayraMaxResponseTokens() : maximum_output_length;
@@ -722,7 +746,7 @@ export async function generateNovelWithStreaming(generate_data, signal) {
722 text += data.token;746 text += data.token;
723 }747 }
724748
725 yield { text, swipes: [], logprobs: parseNovelAILogprobs(data.logprobs) };749 yield { text, swipes: [], logprobs: parseNovelAILogprobs(data.logprobs), toolCalls: [] };
726 }750 }
727 };751 };
728}752}
public/scripts/openai.js+133 -330
@@ -61,12 +61,6 @@ import {
61 stringFormat,61 stringFormat,
62} from './utils.js';62} from './utils.js';
63import { countTokensOpenAI, getTokenizerModel } from './tokenizers.js';63import { countTokensOpenAI, getTokenizerModel } from './tokenizers.js';
64import {
65 formatInstructModeChat,
66 formatInstructModeExamples,
67 formatInstructModePrompt,
68 formatInstructModeSystemPrompt,
69} from './instruct-mode.js';
70import { isMobile } from './RossAscends-mods.js';64import { isMobile } from './RossAscends-mods.js';
71import { saveLogprobsForActiveMessage } from './logprobs.js';65import { saveLogprobsForActiveMessage } from './logprobs.js';
72import { SlashCommandParser } from './slash-commands/SlashCommandParser.js';66import { SlashCommandParser } from './slash-commands/SlashCommandParser.js';
@@ -76,6 +70,7 @@ import { renderTemplateAsync } from './templates.js';
76import { SlashCommandEnumValue } from './slash-commands/SlashCommandEnumValue.js';70import { SlashCommandEnumValue } from './slash-commands/SlashCommandEnumValue.js';
77import { Popup, POPUP_RESULT } from './popup.js';71import { Popup, POPUP_RESULT } from './popup.js';
78import { t } from './i18n.js';72import { t } from './i18n.js';
73import { ToolManager } from './tool-calling.js';
7974
80export {75export {
81 openai_messages_count,76 openai_messages_count,
@@ -204,7 +199,10 @@ const continue_postfix_types = {
204199
205const custom_prompt_post_processing_types = {200const custom_prompt_post_processing_types = {
206 NONE: '',201 NONE: '',
202 /** @deprecated Use MERGE instead. */
207 CLAUDE: 'claude',203 CLAUDE: 'claude',
204 MERGE: 'merge',
205 STRICT: 'strict',
208};206};
209207
210const sensitiveFields = [208const sensitiveFields = [
@@ -227,7 +225,6 @@ const default_settings = {
227 top_a_openai: 0,225 top_a_openai: 0,
228 repetition_penalty_openai: 1,226 repetition_penalty_openai: 1,
229 stream_openai: false,227 stream_openai: false,
230 websearch_cohere: false,
231 openai_max_context: max_4k,228 openai_max_context: max_4k,
232 openai_max_tokens: 300,229 openai_max_tokens: 300,
233 wrap_in_quotes: false,230 wrap_in_quotes: false,
@@ -263,7 +260,6 @@ const default_settings = {
263 windowai_model: '',260 windowai_model: '',
264 openrouter_model: openrouter_website_model,261 openrouter_model: openrouter_website_model,
265 openrouter_use_fallback: false,262 openrouter_use_fallback: false,
266 openrouter_force_instruct: false,
267 openrouter_group_models: false,263 openrouter_group_models: false,
268 openrouter_sort_models: 'alphabetically',264 openrouter_sort_models: 'alphabetically',
269 openrouter_providers: [],265 openrouter_providers: [],
@@ -305,7 +301,6 @@ const oai_settings = {
305 top_a_openai: 0,301 top_a_openai: 0,
306 repetition_penalty_openai: 1,302 repetition_penalty_openai: 1,
307 stream_openai: false,303 stream_openai: false,
308 websearch_cohere: false,
309 openai_max_context: max_4k,304 openai_max_context: max_4k,
310 openai_max_tokens: 300,305 openai_max_tokens: 300,
311 wrap_in_quotes: false,306 wrap_in_quotes: false,
@@ -341,7 +336,6 @@ const oai_settings = {
341 windowai_model: '',336 windowai_model: '',
342 openrouter_model: openrouter_website_model,337 openrouter_model: openrouter_website_model,
343 openrouter_use_fallback: false,338 openrouter_use_fallback: false,
344 openrouter_force_instruct: false,
345 openrouter_group_models: false,339 openrouter_group_models: false,
346 openrouter_sort_models: 'alphabetically',340 openrouter_sort_models: 'alphabetically',
347 openrouter_providers: [],341 openrouter_providers: [],
@@ -396,7 +390,7 @@ async function validateReverseProxy() {
396 new URL(oai_settings.reverse_proxy);390 new URL(oai_settings.reverse_proxy);
397 }391 }
398 catch (err) {392 catch (err) {
399 toastr.error('Entered reverse proxy address is not a valid URL');393 toastr.error(t`Entered reverse proxy address is not a valid URL`);
400 setOnlineStatus('no_connection');394 setOnlineStatus('no_connection');
401 resultCheckStatus();395 resultCheckStatus();
402 throw err;396 throw err;
@@ -407,7 +401,7 @@ async function validateReverseProxy() {
407 const confirmation = skipConfirm || await Popup.show.confirm(t`Connecting To Proxy`, await renderTemplateAsync('proxyConnectionWarning', { proxyURL: DOMPurify.sanitize(oai_settings.reverse_proxy) }));401 const confirmation = skipConfirm || await Popup.show.confirm(t`Connecting To Proxy`, await renderTemplateAsync('proxyConnectionWarning', { proxyURL: DOMPurify.sanitize(oai_settings.reverse_proxy) }));
408402
409 if (!confirmation) {403 if (!confirmation) {
410 toastr.error('Update or remove your reverse proxy settings.');404 toastr.error(t`Update or remove your reverse proxy settings.`);
411 setOnlineStatus('no_connection');405 setOnlineStatus('no_connection');
412 resultCheckStatus();406 resultCheckStatus();
413 throw new Error('Proxy connection denied.');407 throw new Error('Proxy connection denied.');
@@ -417,108 +411,6 @@ async function validateReverseProxy() {
417}411}
418412
419/**413/**
420 * Converts the Chat Completion object to an Instruct Mode prompt string.
421 * @param {object[]} messages Array of messages
422 * @param {string} type Generation type
423 * @returns {string} Text completion prompt
424 */
425function convertChatCompletionToInstruct(messages, type) {
426 const newChatPrompts = [
427 substituteParams(oai_settings.new_chat_prompt),
428 substituteParams(oai_settings.new_example_chat_prompt),
429 substituteParams(oai_settings.new_group_chat_prompt),
430 ];
431 messages = messages.filter(x => !newChatPrompts.includes(x.content));
432
433 let chatMessagesText = '';
434 let systemPromptText = '';
435 let examplesText = '';
436
437 function getPrefix(message) {
438 let prefix;
439
440 if (message.role === 'user' || message.name === 'example_user') {
441 if (selected_group) {
442 prefix = '';
443 } else if (message.name === 'example_user') {
444 prefix = name1;
445 } else {
446 prefix = message.name ?? name1;
447 }
448 }
449
450 if (message.role === 'assistant' || message.name === 'example_assistant') {
451 if (selected_group) {
452 prefix = '';
453 }
454 else if (message.name === 'example_assistant') {
455 prefix = name2;
456 } else {
457 prefix = message.name ?? name2;
458 }
459 }
460
461 return prefix;
462 }
463
464 function toString(message) {
465 if (message.role === 'system' && !message.name) {
466 return message.content;
467 }
468
469 const prefix = getPrefix(message);
470 return prefix ? `${prefix}: ${message.content}` : message.content;
471 }
472
473 const firstChatMessage = messages.findIndex(message => message.role === 'assistant' || message.role === 'user');
474 const systemPromptMessages = messages.slice(0, firstChatMessage).filter(message => message.role === 'system' && !message.name);
475
476 if (systemPromptMessages.length) {
477 systemPromptText = systemPromptMessages.map(message => message.content).join('\n');
478 systemPromptText = formatInstructModeSystemPrompt(systemPromptText);
479 }
480
481 const exampleMessages = messages.filter(x => x.role === 'system' && (x.name === 'example_user' || x.name === 'example_assistant'));
482
483 if (exampleMessages.length) {
484 const blockHeading = power_user.context.example_separator ? (substituteParams(power_user.context.example_separator) + '\n') : '';
485 const examplesArray = exampleMessages.map(m => '<START>\n' + toString(m));
486 examplesText = blockHeading + formatInstructModeExamples(examplesArray, name1, name2).join('');
487 }
488
489 const chatMessages = messages.slice(firstChatMessage);
490
491 if (chatMessages.length) {
492 chatMessagesText = substituteParams(power_user.context.chat_start) + '\n';
493
494 for (const message of chatMessages) {
495 const name = getPrefix(message);
496 const isUser = message.role === 'user';
497 const isNarrator = message.role === 'system';
498 chatMessagesText += formatInstructModeChat(name, message.content, isUser, isNarrator, '', name1, name2, false);
499 }
500 }
501
502 const isImpersonate = type === 'impersonate';
503 const isContinue = type === 'continue';
504 const isQuiet = type === 'quiet';
505 const isQuietToLoud = false; // Quiet to loud not implemented for Chat Completion
506 const promptName = isImpersonate ? name1 : name2;
507 const promptLine = isContinue ? '' : formatInstructModePrompt(promptName, isImpersonate, '', name1, name2, isQuiet, isQuietToLoud).trimStart();
508
509 let prompt = [systemPromptText, examplesText, chatMessagesText, promptLine]
510 .filter(x => x)
511 .map(x => x.endsWith('\n') ? x : `${x}\n`)
512 .join('');
513
514 if (isContinue) {
515 prompt = prompt.replace(/\n$/, '');
516 }
517
518 return prompt;
519}
520
521/**
522 * Formats chat messages into chat completion messages.414 * Formats chat messages into chat completion messages.
523 * @param {object[]} chat - Array containing all messages.415 * @param {object[]} chat - Array containing all messages.
524 * @returns {object[]} - Array containing all messages formatted for chat completion.416 * @returns {object[]} - Array containing all messages formatted for chat completion.
@@ -563,7 +455,8 @@ function setOpenAIMessages(chat) {
563 if (role == 'user' && oai_settings.wrap_in_quotes) content = `"${content}"`;455 if (role == 'user' && oai_settings.wrap_in_quotes) content = `"${content}"`;
564 const name = chat[j]['name'];456 const name = chat[j]['name'];
565 const image = chat[j]?.extra?.image;457 const image = chat[j]?.extra?.image;
566 messages[i] = { 'role': role, 'content': content, name: name, 'image': image };458 const invocations = chat[j]?.extra?.tool_invocations;
459 messages[i] = { 'role': role, 'content': content, name: name, 'image': image, 'invocations': invocations };
567 j++;460 j++;
568 }461 }
569462
@@ -761,10 +654,6 @@ function populationInjectionPrompts(prompts, messages) {
761 return messages;654 return messages;
762}655}
763656
764export function isOpenRouterWithInstruct() {
765 return oai_settings.chat_completion_source === chat_completion_sources.OPENROUTER && oai_settings.openrouter_force_instruct && power_user.instruct.enabled;
766}
767
768/**657/**
769 * Populates the chat history of the conversation.658 * Populates the chat history of the conversation.
770 * @param {object[]} messages - Array containing all messages.659 * @param {object[]} messages - Array containing all messages.
@@ -795,8 +684,7 @@ async function populateChatHistory(messages, prompts, chatCompletion, type = nul
795684
796 // Reserve budget for continue nudge685 // Reserve budget for continue nudge
797 let continueMessage = null;686 let continueMessage = null;
798 const instruct = isOpenRouterWithInstruct();687 if (type === 'continue' && cyclePrompt && !oai_settings.continue_prefill) {
799 if (type === 'continue' && cyclePrompt && !instruct && !oai_settings.continue_prefill) {
800 const promptObject = {688 const promptObject = {
801 identifier: 'continueNudge',689 identifier: 'continueNudge',
802 role: 'system',690 role: 'system',
@@ -816,6 +704,7 @@ async function populateChatHistory(messages, prompts, chatCompletion, type = nul
816 }704 }
817705
818 const imageInlining = isImageInliningSupported();706 const imageInlining = isImageInliningSupported();
707 const canUseTools = ToolManager.isToolCallingSupported();
819708
820 // Insert chat messages as long as there is budget available709 // Insert chat messages as long as there is budget available
821 const chatPool = [...messages].reverse();710 const chatPool = [...messages].reverse();
@@ -837,8 +726,32 @@ async function populateChatHistory(messages, prompts, chatCompletion, type = nul
837 await chatMessage.addImage(chatPrompt.image);726 await chatMessage.addImage(chatPrompt.image);
838 }727 }
839728
729 if (canUseTools && Array.isArray(chatPrompt.invocations)) {
730 /** @type {import('./tool-calling.js').ToolInvocation[]} */
731 const invocations = chatPrompt.invocations;
732 const toolCallMessage = new Message(chatMessage.role, undefined, 'toolCall-' + chatMessage.identifier);
733 const toolResultMessages = invocations.slice().reverse().map((invocation) => new Message('tool', invocation.result || '[No content]', invocation.id));
734 toolCallMessage.setToolCalls(invocations);
735 if (chatCompletion.canAffordAll([toolCallMessage, ...toolResultMessages])) {
736 for (const resultMessage of toolResultMessages) {
737 chatCompletion.insertAtStart(resultMessage, 'chatHistory');
738 }
739 chatCompletion.insertAtStart(toolCallMessage, 'chatHistory');
740 } else {
741 break;
742 }
743
744 continue;
745 }
746
840 if (chatCompletion.canAfford(chatMessage)) {747 if (chatCompletion.canAfford(chatMessage)) {
841 if (type === 'continue' && oai_settings.continue_prefill && chatPrompt === firstNonInjected) {748 if (type === 'continue' && oai_settings.continue_prefill && chatPrompt === firstNonInjected) {
749 // in case we are using continue_prefill and the latest message is an assistant message, we want to prepend the users assistant prefill on the message
750 if (chatPrompt.role === 'assistant') {
751 const collection = new MessageCollection('continuePrefill', new Message(chatMessage.role, substituteParams(oai_settings.assistant_prefill + '\n\n') + chatMessage.content, chatMessage.identifier));
752 chatCompletion.add(collection, -1);
753 continue;
754 }
842 const collection = new MessageCollection('continuePrefill', chatMessage);755 const collection = new MessageCollection('continuePrefill', chatMessage);
843 chatCompletion.add(collection, -1);756 chatCompletion.add(collection, -1);
844 continue;757 continue;
@@ -1340,15 +1253,15 @@ export async function prepareOpenAIMessages({
1340 await populateChatCompletion(prompts, chatCompletion, { bias, quietPrompt, quietImage, type, cyclePrompt, messages, messageExamples });1253 await populateChatCompletion(prompts, chatCompletion, { bias, quietPrompt, quietImage, type, cyclePrompt, messages, messageExamples });
1341 } catch (error) {1254 } catch (error) {
1342 if (error instanceof TokenBudgetExceededError) {1255 if (error instanceof TokenBudgetExceededError) {
1343 toastr.error('An error occurred while counting tokens: Token budget exceeded.');1256 toastr.error(t`An error occurred while counting tokens: Token budget exceeded.`);
1344 chatCompletion.log('Token budget exceeded.');1257 chatCompletion.log('Token budget exceeded.');
1345 promptManager.error = 'Not enough free tokens for mandatory prompts. Raise your token Limit or disable custom prompts.';1258 promptManager.error = t`Not enough free tokens for mandatory prompts. Raise your token Limit or disable custom prompts.`;
1346 } else if (error instanceof InvalidCharacterNameError) {1259 } else if (error instanceof InvalidCharacterNameError) {
1347 toastr.warning('An error occurred while counting tokens: Invalid character name');1260 toastr.warning(t`An error occurred while counting tokens: Invalid character name`);
1348 chatCompletion.log('Invalid character name');1261 chatCompletion.log('Invalid character name');
1349 promptManager.error = 'The name of at least one character contained whitespaces or special characters. Please check your user and character name.';1262 promptManager.error = t`The name of at least one character contained whitespaces or special characters. Please check your user and character name.`;
1350 } else {1263 } else {
1351 toastr.error('An unknown error occurred while counting tokens. Further information may be available in console.');1264 toastr.error(t`An unknown error occurred while counting tokens. Further information may be available in console.`);
1352 chatCompletion.log('----- Unexpected error while preparing prompts -----');1265 chatCompletion.log('----- Unexpected error while preparing prompts -----');
1353 chatCompletion.log(error);1266 chatCompletion.log(error);
1354 chatCompletion.log(error.stack);1267 chatCompletion.log(error.stack);
@@ -1371,7 +1284,7 @@ export async function prepareOpenAIMessages({
1371 const eventData = { chat, dryRun };1284 const eventData = { chat, dryRun };
1372 await eventSource.emit(event_types.CHAT_COMPLETION_PROMPT_READY, eventData);1285 await eventSource.emit(event_types.CHAT_COMPLETION_PROMPT_READY, eventData);
13731286
1374 openai_messages_count = chat.filter(x => x?.role === 'user' || x?.role === 'assistant')?.length || 0;1287 openai_messages_count = chat.filter(x => !x?.tool_calls && (x?.role === 'user' || x?.role === 'assistant'))?.length || 0;
13751288
1376 return [chat, promptManager.tokenHandler.counts];1289 return [chat, promptManager.tokenHandler.counts];
1377}1290}
@@ -1402,11 +1315,8 @@ function tryParseStreamingError(response, decoded) {
1402 }1315 }
1403}1316}
14041317
1405function checkQuotaError(data) {1318async function checkQuotaError(data) {
1406 const errorText = `<h3>Encountered an error while processing your request.<br>1319 const errorText = await renderTemplateAsync('quotaError');
1407 Check you have credits available on your
1408 <a href="https://platform.openai.com/account/usage" target="_blank">OpenAI account</a>.<br>
1409 If you have sufficient credits, please try again later.</h3>`;
14101320
1411 if (!data) {1321 if (!data) {
1412 return;1322 return;
@@ -1799,7 +1709,6 @@ async function sendOpenAIRequest(type, messages, signal) {
1799 messages = messages.filter(msg => msg && typeof msg === 'object');1709 messages = messages.filter(msg => msg && typeof msg === 'object');
18001710
1801 let logit_bias = {};1711 let logit_bias = {};
1802 const messageId = getNextMessageId(type);
1803 const isClaude = oai_settings.chat_completion_source == chat_completion_sources.CLAUDE;1712 const isClaude = oai_settings.chat_completion_source == chat_completion_sources.CLAUDE;
1804 const isOpenRouter = oai_settings.chat_completion_source == chat_completion_sources.OPENROUTER;1713 const isOpenRouter = oai_settings.chat_completion_source == chat_completion_sources.OPENROUTER;
1805 const isScale = oai_settings.chat_completion_source == chat_completion_sources.SCALE;1714 const isScale = oai_settings.chat_completion_source == chat_completion_sources.SCALE;
@@ -1811,7 +1720,7 @@ async function sendOpenAIRequest(type, messages, signal) {
1811 const isPerplexity = oai_settings.chat_completion_source == chat_completion_sources.PERPLEXITY;1720 const isPerplexity = oai_settings.chat_completion_source == chat_completion_sources.PERPLEXITY;
1812 const isGroq = oai_settings.chat_completion_source == chat_completion_sources.GROQ;1721 const isGroq = oai_settings.chat_completion_source == chat_completion_sources.GROQ;
1813 const is01AI = oai_settings.chat_completion_source == chat_completion_sources.ZEROONEAI;1722 const is01AI = oai_settings.chat_completion_source == chat_completion_sources.ZEROONEAI;
1814 const isTextCompletion = (isOAI && textCompletionModels.includes(oai_settings.openai_model)) || (isOpenRouter && oai_settings.openrouter_force_instruct && power_user.instruct.enabled);1723 const isTextCompletion = isOAI && textCompletionModels.includes(oai_settings.openai_model);
1815 const isQuiet = type === 'quiet';1724 const isQuiet = type === 'quiet';
1816 const isImpersonate = type === 'impersonate';1725 const isImpersonate = type === 'impersonate';
1817 const isContinue = type === 'continue';1726 const isContinue = type === 'continue';
@@ -1819,11 +1728,6 @@ async function sendOpenAIRequest(type, messages, signal) {
1819 const useLogprobs = !!power_user.request_token_probabilities;1728 const useLogprobs = !!power_user.request_token_probabilities;
1820 const canMultiSwipe = oai_settings.n > 1 && !isContinue && !isImpersonate && !isQuiet && (isOAI || isCustom);1729 const canMultiSwipe = oai_settings.n > 1 && !isContinue && !isImpersonate && !isQuiet && (isOAI || isCustom);
18211730
1822 if (isTextCompletion && isOpenRouter) {
1823 messages = convertChatCompletionToInstruct(messages, type);
1824 replaceItemizedPromptText(messageId, messages);
1825 }
1826
1827 // If we're using the window.ai extension, use that instead1731 // If we're using the window.ai extension, use that instead
1828 // Doesn't support logit bias yet1732 // Doesn't support logit bias yet
1829 if (oai_settings.chat_completion_source == chat_completion_sources.WINDOWAI) {1733 if (oai_settings.chat_completion_source == chat_completion_sources.WINDOWAI) {
@@ -1890,8 +1794,8 @@ async function sendOpenAIRequest(type, messages, signal) {
1890 generate_data['claude_use_sysprompt'] = oai_settings.claude_use_sysprompt;1794 generate_data['claude_use_sysprompt'] = oai_settings.claude_use_sysprompt;
1891 generate_data['stop'] = getCustomStoppingStrings(); // Claude shouldn't have limits on stop strings.1795 generate_data['stop'] = getCustomStoppingStrings(); // Claude shouldn't have limits on stop strings.
1892 generate_data['human_sysprompt_message'] = substituteParams(oai_settings.human_sysprompt_message);1796 generate_data['human_sysprompt_message'] = substituteParams(oai_settings.human_sysprompt_message);
1893 // Don't add a prefill on quiet gens (summarization)1797 // Don't add a prefill on quiet gens (summarization) and when using continue prefill.
1894 if (!isQuiet) {1798 if (!isQuiet && !(isContinue && oai_settings.continue_prefill)) {
1895 generate_data['assistant_prefill'] = isImpersonate ? substituteParams(oai_settings.assistant_impersonation) : substituteParams(oai_settings.assistant_prefill);1799 generate_data['assistant_prefill'] = isImpersonate ? substituteParams(oai_settings.assistant_impersonation) : substituteParams(oai_settings.assistant_prefill);
1896 }1800 }
1897 }1801 }
@@ -1915,10 +1819,9 @@ async function sendOpenAIRequest(type, messages, signal) {
1915 }1819 }
19161820
1917 if (isGoogle) {1821 if (isGoogle) {
1918 const nameStopString = isImpersonate ? `\n${name2}:` : `\n${name1}:`;1822 const stopStringsLimit = 5;
1919 const stopStringsLimit = 3; // 5 - 2 (nameStopString and new_chat_prompt)
1920 generate_data['top_k'] = Number(oai_settings.top_k_openai);1823 generate_data['top_k'] = Number(oai_settings.top_k_openai);
1921 generate_data['stop'] = [nameStopString, substituteParams(oai_settings.new_chat_prompt), ...getCustomStoppingStrings(stopStringsLimit)];1824 generate_data['stop'] = getCustomStoppingStrings(stopStringsLimit).slice(0, stopStringsLimit).filter(x => x.length >= 1 && x.length <= 16);
1922 generate_data['use_makersuite_sysprompt'] = oai_settings.use_makersuite_sysprompt;1825 generate_data['use_makersuite_sysprompt'] = oai_settings.use_makersuite_sysprompt;
1923 }1826 }
19241827
@@ -1942,7 +1845,6 @@ async function sendOpenAIRequest(type, messages, signal) {
1942 generate_data['frequency_penalty'] = Math.min(Math.max(Number(oai_settings.freq_pen_openai), 0), 1);1845 generate_data['frequency_penalty'] = Math.min(Math.max(Number(oai_settings.freq_pen_openai), 0), 1);
1943 generate_data['presence_penalty'] = Math.min(Math.max(Number(oai_settings.pres_pen_openai), 0), 1);1846 generate_data['presence_penalty'] = Math.min(Math.max(Number(oai_settings.pres_pen_openai), 0), 1);
1944 generate_data['stop'] = getCustomStoppingStrings(5);1847 generate_data['stop'] = getCustomStoppingStrings(5);
1945 generate_data['websearch'] = oai_settings.websearch_cohere;
1946 }1848 }
19471849
1948 if (isPerplexity) {1850 if (isPerplexity) {
@@ -1978,8 +1880,8 @@ async function sendOpenAIRequest(type, messages, signal) {
1978 generate_data['seed'] = oai_settings.seed;1880 generate_data['seed'] = oai_settings.seed;
1979 }1881 }
19801882
1981 if (isFunctionCallingSupported() && !stream) {1883 if (!canMultiSwipe && ToolManager.canPerformToolCalls(type)) {
1982 await registerFunctionTools(type, generate_data);1884 await ToolManager.registerFunctionToolsOpenAI(generate_data);
1983 }1885 }
19841886
1985 if (isOAI && oai_settings.openai_model.startsWith('o1-')) {1887 if (isOAI && oai_settings.openai_model.startsWith('o1-')) {
@@ -2026,6 +1928,7 @@ async function sendOpenAIRequest(type, messages, signal) {
2026 return async function* streamData() {1928 return async function* streamData() {
2027 let text = '';1929 let text = '';
2028 const swipes = [];1930 const swipes = [];
1931 const toolCalls = [];
2029 while (true) {1932 while (true) {
2030 const { done, value } = await reader.read();1933 const { done, value } = await reader.read();
2031 if (done) return;1934 if (done) return;
@@ -2041,18 +1944,20 @@ async function sendOpenAIRequest(type, messages, signal) {
2041 text += getStreamingReply(parsed);1944 text += getStreamingReply(parsed);
2042 }1945 }
20431946
2044 yield { text, swipes: swipes, logprobs: parseChatCompletionLogprobs(parsed) };1947 ToolManager.parseToolCalls(toolCalls, parsed);
1948
1949 yield { text, swipes: swipes, logprobs: parseChatCompletionLogprobs(parsed), toolCalls: toolCalls };
2045 }1950 }
2046 };1951 };
2047 }1952 }
2048 else {1953 else {
2049 const data = await response.json();1954 const data = await response.json();
20501955
2051 checkQuotaError(data);1956 await checkQuotaError(data);
2052 checkModerationError(data);1957 checkModerationError(data);
20531958
2054 if (data.error) {1959 if (data.error) {
2055 toastr.error(data.error.message || response.statusText, 'API returned an error');1960 toastr.error(data.error.message || response.statusText, t`API returned an error`);
2056 throw new Error(data);1961 throw new Error(data);
2057 }1962 }
20581963
@@ -2063,154 +1968,19 @@ async function sendOpenAIRequest(type, messages, signal) {
2063 delay(1).then(() => saveLogprobsForActiveMessage(logprobs, null));1968 delay(1).then(() => saveLogprobsForActiveMessage(logprobs, null));
2064 }1969 }
20651970
2066 if (isFunctionCallingSupported()) {
2067 await checkFunctionToolCalls(data);
2068 }
2069
2070 return data;1971 return data;
2071 }1972 }
2072}1973}
20731974
2074/**
2075 * Register function tools for the next chat completion request.
2076 * @param {string} type Generation type
2077 * @param {object} data Generation data
2078 */
2079async function registerFunctionTools(type, data) {
2080 let toolChoice = 'auto';
2081 const tools = [];
2082
2083 /**
2084 * @type {registerFunctionTool}
2085 */
2086 const registerFunctionTool = (name, description, parameters, required) => {
2087 tools.push({
2088 type: 'function',
2089 function: {
2090 name,
2091 description,
2092 parameters,
2093 },
2094 });
2095
2096 if (required) {
2097 toolChoice = 'required';
2098 }
2099 };
2100
2101 /**
2102 * @type {FunctionToolRegister}
2103 */
2104 const args = {
2105 type,
2106 data,
2107 registerFunctionTool,
2108 };
2109
2110 await eventSource.emit(event_types.LLM_FUNCTION_TOOL_REGISTER, args);
2111
2112 if (tools.length) {
2113 console.log('Registered function tools:', tools);
2114
2115 data['tools'] = tools;
2116 data['tool_choice'] = toolChoice;
2117 }
2118}
2119
2120async function checkFunctionToolCalls(data) {
2121 const oaiCompat = [
2122 chat_completion_sources.OPENAI,
2123 chat_completion_sources.CUSTOM,
2124 chat_completion_sources.MISTRALAI,
2125 chat_completion_sources.OPENROUTER,
2126 chat_completion_sources.GROQ,
2127 ];
2128 if (oaiCompat.includes(oai_settings.chat_completion_source)) {
2129 if (!Array.isArray(data?.choices)) {
2130 return;
2131 }
2132
2133 // Find a choice with 0-index
2134 const choice = data.choices.find(choice => choice.index === 0);
2135
2136 if (!choice) {
2137 return;
2138 }
2139
2140 const toolCalls = choice.message.tool_calls;
2141
2142 if (!Array.isArray(toolCalls)) {
2143 return;
2144 }
2145
2146 for (const toolCall of toolCalls) {
2147 if (typeof toolCall.function !== 'object') {
2148 continue;
2149 }
2150
2151 /** @type {FunctionToolCall} */
2152 const args = toolCall.function;
2153 console.log('Function tool call:', toolCall);
2154 await eventSource.emit(event_types.LLM_FUNCTION_TOOL_CALL, args);
2155 }
2156 }
2157
2158 if ([chat_completion_sources.CLAUDE].includes(oai_settings.chat_completion_source)) {
2159 if (!Array.isArray(data?.content)) {
2160 return;
2161 }
2162
2163 for (const content of data.content) {
2164 if (content.type === 'tool_use') {
2165 /** @type {FunctionToolCall} */
2166 const args = { name: content.name, arguments: JSON.stringify(content.input) };
2167 await eventSource.emit(event_types.LLM_FUNCTION_TOOL_CALL, args);
2168 }
2169 }
2170 }
2171
2172 if ([chat_completion_sources.COHERE].includes(oai_settings.chat_completion_source)) {
2173 if (!Array.isArray(data?.tool_calls)) {
2174 return;
2175 }
2176
2177 for (const toolCall of data.tool_calls) {
2178 /** @type {FunctionToolCall} */
2179 const args = { name: toolCall.name, arguments: JSON.stringify(toolCall.parameters) };
2180 console.log('Function tool call:', toolCall);
2181 await eventSource.emit(event_types.LLM_FUNCTION_TOOL_CALL, args);
2182 }
2183 }
2184}
2185
2186export function isFunctionCallingSupported() {
2187 if (main_api !== 'openai') {
2188 return false;
2189 }
2190
2191 if (!oai_settings.function_calling) {
2192 return false;
2193 }
2194
2195 const supportedSources = [
2196 chat_completion_sources.OPENAI,
2197 chat_completion_sources.COHERE,
2198 chat_completion_sources.CUSTOM,
2199 chat_completion_sources.MISTRALAI,
2200 chat_completion_sources.CLAUDE,
2201 chat_completion_sources.OPENROUTER,
2202 chat_completion_sources.GROQ,
2203 ];
2204 return supportedSources.includes(oai_settings.chat_completion_source);
2205}
2206
2207function getStreamingReply(data) {1975function getStreamingReply(data) {
2208 if (oai_settings.chat_completion_source == chat_completion_sources.CLAUDE) {1976 if (oai_settings.chat_completion_source === chat_completion_sources.CLAUDE) {
2209 return data?.delta?.text || '';1977 return data?.delta?.text || '';
2210 } else if (oai_settings.chat_completion_source == chat_completion_sources.MAKERSUITE) {1978 } else if (oai_settings.chat_completion_source === chat_completion_sources.MAKERSUITE) {
2211 return data?.candidates?.[0]?.content?.parts?.[0]?.text || '';1979 return data?.candidates?.[0]?.content?.parts?.[0]?.text || '';
1980 } else if (oai_settings.chat_completion_source === chat_completion_sources.COHERE) {
1981 return data?.delta?.message?.content?.text || data?.delta?.message?.tool_plan || '';
2212 } else {1982 } else {
2213 return data.choices[0]?.delta?.content ?? data.choices[0]?.message?.content ?? data.choices[0]?.text ?? '';1983 return data.choices?.[0]?.delta?.content ?? data.choices?.[0]?.message?.content ?? data.choices?.[0]?.text ?? '';
2214 }1984 }
2215}1985}
22161986
@@ -2299,7 +2069,7 @@ function parseOpenAITextLogprobs(logprobs) {
22992069
2300function handleWindowError(err) {2070function handleWindowError(err) {
2301 const text = parseWindowError(err);2071 const text = parseWindowError(err);
2302 toastr.error(text, 'Window.ai returned an error');2072 toastr.error(text, t`Window.ai returned an error`);
2303 throw err;2073 throw err;
2304}2074}
23052075
@@ -2441,6 +2211,8 @@ class Message {
2441 content;2211 content;
2442 /** @type {string} */2212 /** @type {string} */
2443 name;2213 name;
2214 /** @type {object} */
2215 tool_call = null;
24442216
2445 /**2217 /**
2446 * @constructor2218 * @constructor
@@ -2465,6 +2237,22 @@ class Message {
2465 }2237 }
2466 }2238 }
24672239
2240 /**
2241 * Reconstruct the message from a tool invocation.
2242 * @param {import('./tool-calling.js').ToolInvocation[]} invocations
2243 */
2244 setToolCalls(invocations) {
2245 this.tool_calls = invocations.map(i => ({
2246 id: i.id,
2247 type: 'function',
2248 function: {
2249 arguments: i.parameters,
2250 name: i.name,
2251 },
2252 }));
2253 this.tokens = tokenHandler.count({ role: this.role, tool_calls: JSON.stringify(this.tool_calls) });
2254 }
2255
2468 setName(name) {2256 setName(name) {
2469 this.name = name;2257 this.name = name;
2470 this.tokens = tokenHandler.count({ role: this.role, content: this.content, name: this.name });2258 this.tokens = tokenHandler.count({ role: this.role, content: this.content, name: this.name });
@@ -2601,13 +2389,20 @@ class MessageCollection {
2601 }2389 }
26022390
2603 /**2391 /**
2604 * Get chat in the format of {role, name, content}.2392 * Get chat in the format of {role, name, content, tool_calls}.
2605 * @returns {Array} Array of objects with role, name, and content properties.2393 * @returns {Array} Array of objects with role, name, and content properties.
2606 */2394 */
2607 getChat() {2395 getChat() {
2608 return this.collection.reduce((acc, message) => {2396 return this.collection.reduce((acc, message) => {
2609 const name = message.name;2397 if (message.content || message.tool_calls) {
2610 if (message.content) acc.push({ role: message.role, ...(name && { name }), content: message.content });2398 acc.push({
2399 role: message.role,
2400 content: message.content,
2401 ...(message.name && { name: message.name }),
2402 ...(message.tool_calls && { tool_calls: message.tool_calls }),
2403 ...(message.role === 'tool' && { tool_call_id: message.identifier }),
2404 });
2405 }
2611 return acc;2406 return acc;
2612 }, []);2407 }, []);
2613 }2408 }
@@ -2812,7 +2607,7 @@ export class ChatCompletion {
2812 this.checkTokenBudget(message, message.identifier);2607 this.checkTokenBudget(message, message.identifier);
28132608
2814 const index = this.findMessageIndex(identifier);2609 const index = this.findMessageIndex(identifier);
2815 if (message.content) {2610 if (message.content || message.tool_calls) {
2816 if ('start' === position) this.messages.collection[index].collection.unshift(message);2611 if ('start' === position) this.messages.collection[index].collection.unshift(message);
2817 else if ('end' === position) this.messages.collection[index].collection.push(message);2612 else if ('end' === position) this.messages.collection[index].collection.push(message);
2818 else if (typeof position === 'number') this.messages.collection[index].collection.splice(position, 0, message);2613 else if (typeof position === 'number') this.messages.collection[index].collection.splice(position, 0, message);
@@ -2853,6 +2648,15 @@ export class ChatCompletion {
2853 }2648 }
28542649
2855 /**2650 /**
2651 * Checks if the token budget can afford the tokens of all the specified messages.
2652 * @param {Message[]} messages - The messages to check for affordability.
2653 * @returns {boolean} True if the budget can afford all the messages, false otherwise.
2654 */
2655 canAffordAll(messages) {
2656 return 0 <= this.tokenBudget - messages.reduce((total, message) => total + message.getTokens(), 0);
2657 }
2658
2659 /**
2856 * Checks if a message with the specified identifier exists in the collection.2660 * Checks if a message with the specified identifier exists in the collection.
2857 *2661 *
2858 * @param {string} identifier - The identifier to check for existence.2662 * @param {string} identifier - The identifier to check for existence.
@@ -2881,8 +2685,14 @@ export class ChatCompletion {
2881 for (let item of this.messages.collection) {2685 for (let item of this.messages.collection) {
2882 if (item instanceof MessageCollection) {2686 if (item instanceof MessageCollection) {
2883 chat.push(...item.getChat());2687 chat.push(...item.getChat());
2884 } else if (item instanceof Message && item.content) {2688 } else if (item instanceof Message && (item.content || item.tool_calls)) {
2885 const message = { role: item.role, content: item.content, ...(item.name ? { name: item.name } : {}) };2689 const message = {
2690 role: item.role,
2691 content: item.content,
2692 ...(item.name ? { name: item.name } : {}),
2693 ...(item.tool_calls ? { tool_calls: item.tool_calls } : {}),
2694 ...(item.role === 'tool' ? { tool_call_id: item.identifier } : {}),
2695 };
2886 chat.push(message);2696 chat.push(message);
2887 } else {2697 } else {
2888 this.log(`Skipping invalid or empty message in collection: ${JSON.stringify(item)}`);2698 this.log(`Skipping invalid or empty message in collection: ${JSON.stringify(item)}`);
@@ -3046,7 +2856,6 @@ function loadOpenAISettings(data, settings) {
3046 oai_settings.min_p_openai = settings.min_p_openai ?? default_settings.min_p_openai;2856 oai_settings.min_p_openai = settings.min_p_openai ?? default_settings.min_p_openai;
3047 oai_settings.repetition_penalty_openai = settings.repetition_penalty_openai ?? default_settings.repetition_penalty_openai;2857 oai_settings.repetition_penalty_openai = settings.repetition_penalty_openai ?? default_settings.repetition_penalty_openai;
3048 oai_settings.stream_openai = settings.stream_openai ?? default_settings.stream_openai;2858 oai_settings.stream_openai = settings.stream_openai ?? default_settings.stream_openai;
3049 oai_settings.websearch_cohere = settings.websearch_cohere ?? default_settings.websearch_cohere;
3050 oai_settings.openai_max_context = settings.openai_max_context ?? default_settings.openai_max_context;2859 oai_settings.openai_max_context = settings.openai_max_context ?? default_settings.openai_max_context;
3051 oai_settings.openai_max_tokens = settings.openai_max_tokens ?? default_settings.openai_max_tokens;2860 oai_settings.openai_max_tokens = settings.openai_max_tokens ?? default_settings.openai_max_tokens;
3052 oai_settings.bias_preset_selected = settings.bias_preset_selected ?? default_settings.bias_preset_selected;2861 oai_settings.bias_preset_selected = settings.bias_preset_selected ?? default_settings.bias_preset_selected;
@@ -3063,7 +2872,6 @@ function loadOpenAISettings(data, settings) {
3063 oai_settings.openrouter_group_models = settings.openrouter_group_models ?? default_settings.openrouter_group_models;2872 oai_settings.openrouter_group_models = settings.openrouter_group_models ?? default_settings.openrouter_group_models;
3064 oai_settings.openrouter_sort_models = settings.openrouter_sort_models ?? default_settings.openrouter_sort_models;2873 oai_settings.openrouter_sort_models = settings.openrouter_sort_models ?? default_settings.openrouter_sort_models;
3065 oai_settings.openrouter_use_fallback = settings.openrouter_use_fallback ?? default_settings.openrouter_use_fallback;2874 oai_settings.openrouter_use_fallback = settings.openrouter_use_fallback ?? default_settings.openrouter_use_fallback;
3066 oai_settings.openrouter_force_instruct = settings.openrouter_force_instruct ?? default_settings.openrouter_force_instruct;
3067 oai_settings.openrouter_allow_fallbacks = settings.openrouter_allow_fallbacks ?? default_settings.openrouter_allow_fallbacks;2875 oai_settings.openrouter_allow_fallbacks = settings.openrouter_allow_fallbacks ?? default_settings.openrouter_allow_fallbacks;
3068 oai_settings.ai21_model = settings.ai21_model ?? default_settings.ai21_model;2876 oai_settings.ai21_model = settings.ai21_model ?? default_settings.ai21_model;
3069 oai_settings.mistralai_model = settings.mistralai_model ?? default_settings.mistralai_model;2877 oai_settings.mistralai_model = settings.mistralai_model ?? default_settings.mistralai_model;
@@ -3121,7 +2929,6 @@ function loadOpenAISettings(data, settings) {
3121 if (settings.use_makersuite_sysprompt !== undefined) oai_settings.use_makersuite_sysprompt = !!settings.use_makersuite_sysprompt;2929 if (settings.use_makersuite_sysprompt !== undefined) oai_settings.use_makersuite_sysprompt = !!settings.use_makersuite_sysprompt;
3122 if (settings.use_alt_scale !== undefined) { oai_settings.use_alt_scale = !!settings.use_alt_scale; updateScaleForm(); }2930 if (settings.use_alt_scale !== undefined) { oai_settings.use_alt_scale = !!settings.use_alt_scale; updateScaleForm(); }
3123 $('#stream_toggle').prop('checked', oai_settings.stream_openai);2931 $('#stream_toggle').prop('checked', oai_settings.stream_openai);
3124 $('#websearch_toggle').prop('checked', oai_settings.websearch_cohere);
3125 $('#api_url_scale').val(oai_settings.api_url_scale);2932 $('#api_url_scale').val(oai_settings.api_url_scale);
3126 $('#openai_proxy_password').val(oai_settings.proxy_password);2933 $('#openai_proxy_password').val(oai_settings.proxy_password);
3127 $('#claude_assistant_prefill').val(oai_settings.assistant_prefill);2934 $('#claude_assistant_prefill').val(oai_settings.assistant_prefill);
@@ -3170,7 +2977,6 @@ function loadOpenAISettings(data, settings) {
3170 $('#use_makersuite_sysprompt').prop('checked', oai_settings.use_makersuite_sysprompt);2977 $('#use_makersuite_sysprompt').prop('checked', oai_settings.use_makersuite_sysprompt);
3171 $('#scale-alt').prop('checked', oai_settings.use_alt_scale);2978 $('#scale-alt').prop('checked', oai_settings.use_alt_scale);
3172 $('#openrouter_use_fallback').prop('checked', oai_settings.openrouter_use_fallback);2979 $('#openrouter_use_fallback').prop('checked', oai_settings.openrouter_use_fallback);
3173 $('#openrouter_force_instruct').prop('checked', oai_settings.openrouter_force_instruct);
3174 $('#openrouter_group_models').prop('checked', oai_settings.openrouter_group_models);2980 $('#openrouter_group_models').prop('checked', oai_settings.openrouter_group_models);
3175 $('#openrouter_allow_fallbacks').prop('checked', oai_settings.openrouter_allow_fallbacks);2981 $('#openrouter_allow_fallbacks').prop('checked', oai_settings.openrouter_allow_fallbacks);
3176 $('#openrouter_providers_chat').val(oai_settings.openrouter_providers).trigger('change');2982 $('#openrouter_providers_chat').val(oai_settings.openrouter_providers).trigger('change');
@@ -3238,6 +3044,10 @@ function loadOpenAISettings(data, settings) {
3238 setNamesBehaviorControls();3044 setNamesBehaviorControls();
3239 setContinuePostfixControls();3045 setContinuePostfixControls();
32403046
3047 if (oai_settings.custom_prompt_post_processing === custom_prompt_post_processing_types.CLAUDE) {
3048 oai_settings.custom_prompt_post_processing = custom_prompt_post_processing_types.MERGE;
3049 }
3050
3241 $('#chat_completion_source').val(oai_settings.chat_completion_source).trigger('change');3051 $('#chat_completion_source').val(oai_settings.chat_completion_source).trigger('change');
3242 $('#oai_max_context_unlocked').prop('checked', oai_settings.max_context_unlocked);3052 $('#oai_max_context_unlocked').prop('checked', oai_settings.max_context_unlocked);
3243 $('#custom_prompt_post_processing').val(oai_settings.custom_prompt_post_processing);3053 $('#custom_prompt_post_processing').val(oai_settings.custom_prompt_post_processing);
@@ -3374,7 +3184,7 @@ async function getStatusOpen() {
3374}3184}
33753185
3376function showWindowExtensionError() {3186function showWindowExtensionError() {
3377 toastr.error('Get it here: <a href="https://windowai.io/" target="_blank">windowai.io</a>', 'Extension is not installed', {3187 toastr.error(t`Get it here:` + ' <a href="https://windowai.io/" target="_blank">windowai.io</a>', t`Extension is not installed`, {
3378 escapeHtml: false,3188 escapeHtml: false,
3379 timeOut: 0,3189 timeOut: 0,
3380 extendedTimeOut: 0,3190 extendedTimeOut: 0,
@@ -3398,7 +3208,6 @@ async function saveOpenAIPreset(name, settings, triggerUi = true) {
3398 windowai_model: settings.windowai_model,3208 windowai_model: settings.windowai_model,
3399 openrouter_model: settings.openrouter_model,3209 openrouter_model: settings.openrouter_model,
3400 openrouter_use_fallback: settings.openrouter_use_fallback,3210 openrouter_use_fallback: settings.openrouter_use_fallback,
3401 openrouter_force_instruct: settings.openrouter_force_instruct,
3402 openrouter_group_models: settings.openrouter_group_models,3211 openrouter_group_models: settings.openrouter_group_models,
3403 openrouter_sort_models: settings.openrouter_sort_models,3212 openrouter_sort_models: settings.openrouter_sort_models,
3404 openrouter_providers: settings.openrouter_providers,3213 openrouter_providers: settings.openrouter_providers,
@@ -3446,7 +3255,6 @@ async function saveOpenAIPreset(name, settings, triggerUi = true) {
3446 personality_format: settings.personality_format,3255 personality_format: settings.personality_format,
3447 group_nudge_prompt: settings.group_nudge_prompt,3256 group_nudge_prompt: settings.group_nudge_prompt,
3448 stream_openai: settings.stream_openai,3257 stream_openai: settings.stream_openai,
3449 websearch_cohere: settings.websearch_cohere,
3450 prompts: settings.prompts,3258 prompts: settings.prompts,
3451 prompt_order: settings.prompt_order,3259 prompt_order: settings.prompt_order,
3452 api_url_scale: settings.api_url_scale,3260 api_url_scale: settings.api_url_scale,
@@ -3494,7 +3302,7 @@ async function saveOpenAIPreset(name, settings, triggerUi = true) {
3494 if (triggerUi) $('#settings_preset_openai').append(option).trigger('change');3302 if (triggerUi) $('#settings_preset_openai').append(option).trigger('change');
3495 }3303 }
3496 } else {3304 } else {
3497 toastr.error('Failed to save preset');3305 toastr.error(t`Failed to save preset`);
3498 throw new Error('Failed to save preset');3306 throw new Error('Failed to save preset');
3499 }3307 }
3500}3308}
@@ -3573,7 +3381,7 @@ async function createNewLogitBiasPreset() {
3573 }3381 }
35743382
3575 if (name in oai_settings.bias_presets) {3383 if (name in oai_settings.bias_presets) {
3576 toastr.error('Preset name should be unique.');3384 toastr.error(t`Preset name should be unique.`);
3577 return;3385 return;
3578 }3386 }
35793387
@@ -3617,7 +3425,7 @@ async function onPresetImportFileChange(e) {
3617 try {3425 try {
3618 presetBody = JSON.parse(importedFile);3426 presetBody = JSON.parse(importedFile);
3619 } catch (err) {3427 } catch (err) {
3620 toastr.error('Invalid file');3428 toastr.error(t`Invalid file`);
3621 return;3429 return;
3622 }3430 }
36233431
@@ -3658,7 +3466,7 @@ async function onPresetImportFileChange(e) {
3658 });3466 });
36593467
3660 if (!savePresetSettings.ok) {3468 if (!savePresetSettings.ok) {
3661 toastr.error('Failed to save preset');3469 toastr.error(t`Failed to save preset`);
3662 return;3470 return;
3663 }3471 }
36643472
@@ -3683,7 +3491,7 @@ async function onPresetImportFileChange(e) {
36833491
3684async function onExportPresetClick() {3492async function onExportPresetClick() {
3685 if (!oai_settings.preset_settings_openai) {3493 if (!oai_settings.preset_settings_openai) {
3686 toastr.error('No preset selected');3494 toastr.error(t`No preset selected`);
3687 return;3495 return;
3688 }3496 }
36893497
@@ -3724,12 +3532,12 @@ async function onLogitBiasPresetImportFileChange(e) {
3724 e.target.value = '';3532 e.target.value = '';
37253533
3726 if (name in oai_settings.bias_presets) {3534 if (name in oai_settings.bias_presets) {
3727 toastr.error('Preset name should be unique.');3535 toastr.error(t`Preset name should be unique.`);
3728 return;3536 return;
3729 }3537 }
37303538
3731 if (!Array.isArray(importedFile)) {3539 if (!Array.isArray(importedFile)) {
3732 toastr.error('Invalid logit bias preset file.');3540 toastr.error(t`Invalid logit bias preset file.`);
3733 return;3541 return;
3734 }3542 }
37353543
@@ -3788,16 +3596,16 @@ async function onDeletePresetClick() {
3788 });3596 });
37893597
3790 if (!response.ok) {3598 if (!response.ok) {
3791 toastr.warning('Preset was not deleted from server');3599 toastr.warning(t`Preset was not deleted from server`);
3792 } else {3600 } else {
3793 toastr.success('Preset deleted');3601 toastr.success(t`Preset deleted`);
3794 }3602 }
37953603
3796 saveSettingsDebounced();3604 saveSettingsDebounced();
3797}3605}
37983606
3799async function onLogitBiasPresetDeleteClick() {3607async function onLogitBiasPresetDeleteClick() {
3800 const value = await callPopup('Delete the preset?', 'confirm');3608 const value = await callPopup(t`Delete the preset?`, 'confirm');
38013609
3802 if (!value) {3610 if (!value) {
3803 return;3611 return;
@@ -3835,7 +3643,6 @@ function onSettingsPresetChange() {
3835 windowai_model: ['#model_windowai_select', 'windowai_model', false],3643 windowai_model: ['#model_windowai_select', 'windowai_model', false],
3836 openrouter_model: ['#model_openrouter_select', 'openrouter_model', false],3644 openrouter_model: ['#model_openrouter_select', 'openrouter_model', false],
3837 openrouter_use_fallback: ['#openrouter_use_fallback', 'openrouter_use_fallback', true],3645 openrouter_use_fallback: ['#openrouter_use_fallback', 'openrouter_use_fallback', true],
3838 openrouter_force_instruct: ['#openrouter_force_instruct', 'openrouter_force_instruct', true],
3839 openrouter_group_models: ['#openrouter_group_models', 'openrouter_group_models', false],3646 openrouter_group_models: ['#openrouter_group_models', 'openrouter_group_models', false],
3840 openrouter_sort_models: ['#openrouter_sort_models', 'openrouter_sort_models', false],3647 openrouter_sort_models: ['#openrouter_sort_models', 'openrouter_sort_models', false],
3841 openrouter_providers: ['#openrouter_providers_chat', 'openrouter_providers', false],3648 openrouter_providers: ['#openrouter_providers_chat', 'openrouter_providers', false],
@@ -3871,7 +3678,6 @@ function onSettingsPresetChange() {
3871 personality_format: ['#personality_format_textarea', 'personality_format', false],3678 personality_format: ['#personality_format_textarea', 'personality_format', false],
3872 group_nudge_prompt: ['#group_nudge_prompt_textarea', 'group_nudge_prompt', false],3679 group_nudge_prompt: ['#group_nudge_prompt_textarea', 'group_nudge_prompt', false],
3873 stream_openai: ['#stream_toggle', 'stream_openai', true],3680 stream_openai: ['#stream_toggle', 'stream_openai', true],
3874 websearch_cohere: ['#websearch_toggle', 'websearch_cohere', true],
3875 prompts: ['', 'prompts', false],3681 prompts: ['', 'prompts', false],
3876 prompt_order: ['', 'prompt_order', false],3682 prompt_order: ['', 'prompt_order', false],
3877 api_url_scale: ['#api_url_scale', 'api_url_scale', false],3683 api_url_scale: ['#api_url_scale', 'api_url_scale', false],
@@ -4313,7 +4119,10 @@ async function onModelChange() {
4313 if (oai_settings.max_context_unlocked) {4119 if (oai_settings.max_context_unlocked) {
4314 $('#openai_max_context').attr('max', unlocked_max);4120 $('#openai_max_context').attr('max', unlocked_max);
4315 }4121 }
4316 else if (oai_settings.groq_model.includes('llama-3.1')) {4122 else if (oai_settings.groq_model.includes('llama-3.2') && oai_settings.groq_model.includes('-preview')) {
4123 $('#openai_max_context').attr('max', max_8k);
4124 }
4125 else if (oai_settings.groq_model.includes('llama-3.2') || oai_settings.groq_model.includes('llama-3.1')) {
4317 $('#openai_max_context').attr('max', max_128k);4126 $('#openai_max_context').attr('max', max_128k);
4318 }4127 }
4319 else if (oai_settings.groq_model.includes('llama3-groq')) {4128 else if (oai_settings.groq_model.includes('llama3-groq')) {
@@ -4774,12 +4583,16 @@ export function isImageInliningSupported() {
4774 'gemini-1.5-flash',4583 'gemini-1.5-flash',
4775 'gemini-1.5-flash-latest',4584 'gemini-1.5-flash-latest',
4776 'gemini-1.5-flash-001',4585 'gemini-1.5-flash-001',
4586 'gemini-1.5-flash-002',
4777 'gemini-1.5-flash-exp-0827',4587 'gemini-1.5-flash-exp-0827',
4588 'gemini-1.5-flash-8b',
4778 'gemini-1.5-flash-8b-exp-0827',4589 'gemini-1.5-flash-8b-exp-0827',
4590 'gemini-1.5-flash-8b-exp-0924',
4779 'gemini-1.0-pro-vision-latest',4591 'gemini-1.0-pro-vision-latest',
4780 'gemini-1.5-pro',4592 'gemini-1.5-pro',
4781 'gemini-1.5-pro-latest',4593 'gemini-1.5-pro-latest',
4782 'gemini-1.5-pro-001',4594 'gemini-1.5-pro-001',
4595 'gemini-1.5-pro-002',
4783 'gemini-1.5-pro-exp-0801',4596 'gemini-1.5-pro-exp-0801',
4784 'gemini-1.5-pro-exp-0827',4597 'gemini-1.5-pro-exp-0827',
4785 'gemini-pro-vision',4598 'gemini-pro-vision',
@@ -4802,7 +4615,7 @@ export function isImageInliningSupported() {
4802 case chat_completion_sources.CLAUDE:4615 case chat_completion_sources.CLAUDE:
4803 return visionSupportedModels.some(model => oai_settings.claude_model.includes(model));4616 return visionSupportedModels.some(model => oai_settings.claude_model.includes(model));
4804 case chat_completion_sources.OPENROUTER:4617 case chat_completion_sources.OPENROUTER:
4805 return !oai_settings.openrouter_force_instruct;4618 return true;
4806 case chat_completion_sources.CUSTOM:4619 case chat_completion_sources.CUSTOM:
4807 return true;4620 return true;
4808 case chat_completion_sources.ZEROONEAI:4621 case chat_completion_sources.ZEROONEAI:
@@ -4928,7 +4741,7 @@ function runProxyCallback(_, value) {
4928 const result = fuse.search(value);4741 const result = fuse.search(value);
49294742
4930 if (result.length === 0) {4743 if (result.length === 0) {
4931 toastr.warning(`Proxy preset "${value}" not found`);4744 toastr.warning(t`Proxy preset '${value}' not found`);
4932 return '';4745 return '';
4933 }4746 }
49344747
@@ -5028,11 +4841,6 @@ export function initOpenAI() {
5028 saveSettingsDebounced();4841 saveSettingsDebounced();
5029 });4842 });
50304843
5031 $('#websearch_toggle').on('change', function () {
5032 oai_settings.websearch_cohere = !!$('#websearch_toggle').prop('checked');
5033 saveSettingsDebounced();
5034 });
5035
5036 $('#wrap_in_quotes').on('change', function () {4844 $('#wrap_in_quotes').on('change', function () {
5037 oai_settings.wrap_in_quotes = !!$('#wrap_in_quotes').prop('checked');4845 oai_settings.wrap_in_quotes = !!$('#wrap_in_quotes').prop('checked');
5038 saveSettingsDebounced();4846 saveSettingsDebounced();
@@ -5102,7 +4910,7 @@ export function initOpenAI() {
5102 $('#update_oai_preset').on('click', async function () {4910 $('#update_oai_preset').on('click', async function () {
5103 const name = oai_settings.preset_settings_openai;4911 const name = oai_settings.preset_settings_openai;
5104 await saveOpenAIPreset(name, oai_settings);4912 await saveOpenAIPreset(name, oai_settings);
5105 toastr.success('Preset updated');4913 toastr.success(t`Preset updated`);
5106 });4914 });
51074915
5108 $('#impersonation_prompt_restore').on('click', function () {4916 $('#impersonation_prompt_restore').on('click', function () {
@@ -5224,11 +5032,6 @@ export function initOpenAI() {
5224 saveSettingsDebounced();5032 saveSettingsDebounced();
5225 });5033 });
52265034
5227 $('#openrouter_force_instruct').on('input', function () {
5228 oai_settings.openrouter_force_instruct = !!$(this).prop('checked');
5229 saveSettingsDebounced();
5230 });
5231
5232 $('#openrouter_group_models').on('input', function () {5035 $('#openrouter_group_models').on('input', function () {
5233 oai_settings.openrouter_group_models = !!$(this).prop('checked');5036 oai_settings.openrouter_group_models = !!$(this).prop('checked');
5234 saveSettingsDebounced();5037 saveSettingsDebounced();
public/scripts/popup.js+5 -0
@@ -1,3 +1,4 @@
1import dialogPolyfill from '../lib/dialog-polyfill.esm.js';
1import { shouldSendOnEnter } from './RossAscends-mods.js';2import { shouldSendOnEnter } from './RossAscends-mods.js';
2import { power_user } from './power-user.js';3import { power_user } from './power-user.js';
3import { removeFromArray, runAfterAnimation, uuidv4 } from './utils.js';4import { removeFromArray, runAfterAnimation, uuidv4 } from './utils.js';
@@ -178,6 +179,10 @@ export class Popup {
178 const template = document.querySelector('#popup_template');179 const template = document.querySelector('#popup_template');
179 // @ts-ignore180 // @ts-ignore
180 this.dlg = template.content.cloneNode(true).querySelector('.popup');181 this.dlg = template.content.cloneNode(true).querySelector('.popup');
182 if (!this.dlg.showModal) {
183 this.dlg.classList.add('poly_dialog');
184 dialogPolyfill.registerDialog(this.dlg);
185 }
181 this.body = this.dlg.querySelector('.popup-body');186 this.body = this.dlg.querySelector('.popup-body');
182 this.content = this.dlg.querySelector('.popup-content');187 this.content = this.dlg.querySelector('.popup-content');
183 this.mainInput = this.dlg.querySelector('.popup-input');188 this.mainInput = this.dlg.querySelector('.popup-input');
public/scripts/power-user.js+21 -0
@@ -290,6 +290,7 @@ let power_user = {
290 restore_user_input: true,290 restore_user_input: true,
291 reduced_motion: false,291 reduced_motion: false,
292 compact_input_area: true,292 compact_input_area: true,
293 show_swipe_num_all_messages: false,
293 auto_connect: false,294 auto_connect: false,
294 auto_load_chat: false,295 auto_load_chat: false,
295 forbid_external_media: true,296 forbid_external_media: true,
@@ -469,6 +470,11 @@ function switchCompactInputArea() {
469 $('#compact_input_area').prop('checked', power_user.compact_input_area);470 $('#compact_input_area').prop('checked', power_user.compact_input_area);
470}471}
471472
473export function switchSwipeNumAllMessages() {
474 $('#show_swipe_num_all_messages').prop('checked', power_user.show_swipe_num_all_messages);
475 $('.mes:not(.last_mes) .swipes-counter').css('opacity', '').toggle(power_user.show_swipe_num_all_messages);
476}
477
472var originalSliderValues = [];478var originalSliderValues = [];
473479
474async function switchLabMode() {480async function switchLabMode() {
@@ -1283,6 +1289,13 @@ function applyTheme(name) {
1283 switchCompactInputArea();1289 switchCompactInputArea();
1284 },1290 },
1285 },1291 },
1292 {
1293 key: 'show_swipe_num_all_messages',
1294 action: () => {
1295 $('#show_swipe_num_all_messages').prop('checked', power_user.show_swipe_num_all_messages);
1296 switchSwipeNumAllMessages();
1297 },
1298 },
1286 ];1299 ];
12871300
1288 for (const { key, selector, type, action } of themeProperties) {1301 for (const { key, selector, type, action } of themeProperties) {
@@ -1352,6 +1365,7 @@ function applyPowerUserSettings() {
1352 switchHideChatAvatars();1365 switchHideChatAvatars();
1353 switchTokenCount();1366 switchTokenCount();
1354 switchMessageActions();1367 switchMessageActions();
1368 switchSwipeNumAllMessages();
1355}1369}
13561370
1357function getExampleMessagesBehavior() {1371function getExampleMessagesBehavior() {
@@ -2296,6 +2310,7 @@ function getThemeObject(name) {
2296 zoomed_avatar_magnification: power_user.zoomed_avatar_magnification,2310 zoomed_avatar_magnification: power_user.zoomed_avatar_magnification,
2297 reduced_motion: power_user.reduced_motion,2311 reduced_motion: power_user.reduced_motion,
2298 compact_input_area: power_user.compact_input_area,2312 compact_input_area: power_user.compact_input_area,
2313 show_swipe_num_all_messages: power_user.show_swipe_num_all_messages,
2299 };2314 };
2300}2315}
23012316
@@ -3755,6 +3770,12 @@ $(document).ready(() => {
3755 saveSettingsDebounced();3770 saveSettingsDebounced();
3756 });3771 });
37573772
3773 $('#show_swipe_num_all_messages').on('input', function () {
3774 power_user.show_swipe_num_all_messages = !!$(this).prop('checked');
3775 switchSwipeNumAllMessages();
3776 saveSettingsDebounced();
3777 });
3778
3758 $('#auto-connect-checkbox').on('input', function () {3779 $('#auto-connect-checkbox').on('input', function () {
3759 power_user.auto_connect = !!$(this).prop('checked');3780 power_user.auto_connect = !!$(this).prop('checked');
3760 saveSettingsDebounced();3781 saveSettingsDebounced();
public/scripts/preset-manager.js+85 -43
@@ -34,6 +34,7 @@ import {
34 textgenerationwebui_settings as textgen_settings,34 textgenerationwebui_settings as textgen_settings,
35} from './textgen-settings.js';35} from './textgen-settings.js';
36import { download, parseJsonFile, waitUntilCondition } from './utils.js';36import { download, parseJsonFile, waitUntilCondition } from './utils.js';
37import { t } from './i18n.js';
3738
38const presetManagers = {};39const presetManagers = {};
3940
@@ -194,32 +195,32 @@ class PresetManager {
194 */195 */
195 static async performMasterImport(data, fileName) {196 static async performMasterImport(data, fileName) {
196 if (!data || typeof data !== 'object') {197 if (!data || typeof data !== 'object') {
197 toastr.error('Invalid data provided for master import');198 toastr.error(t`Invalid data provided for master import`);
198 return;199 return;
199 }200 }
200201
201 // Check for legacy file imports202 // Check for legacy file imports
202 // 1. Instruct Template203 // 1. Instruct Template
203 if (this.isPossiblyInstructData(data)) {204 if (this.isPossiblyInstructData(data)) {
204 toastr.info('Importing instruct template...', 'Instruct template detected');205 toastr.info(t`Importing instruct template...`, t`Instruct template detected`);
205 return await getPresetManager('instruct').savePreset(data.name, data);206 return await getPresetManager('instruct').savePreset(data.name, data);
206 }207 }
207208
208 // 2. Context Template209 // 2. Context Template
209 if (this.isPossiblyContextData(data)) {210 if (this.isPossiblyContextData(data)) {
210 toastr.info('Importing as context template...', 'Context template detected');211 toastr.info(t`Importing as context template...`, t`Context template detected`);
211 return await getPresetManager('context').savePreset(data.name, data);212 return await getPresetManager('context').savePreset(data.name, data);
212 }213 }
213214
214 // 3. System Prompt215 // 3. System Prompt
215 if (this.isPossiblySystemPromptData(data)) {216 if (this.isPossiblySystemPromptData(data)) {
216 toastr.info('Importing as system prompt...', 'System prompt detected');217 toastr.info(t`Importing as system prompt...`, t`System prompt detected`);
217 return await getPresetManager('sysprompt').savePreset(data.name, data);218 return await getPresetManager('sysprompt').savePreset(data.name, data);
218 }219 }
219220
220 // 4. Text Completion settings221 // 4. Text Completion settings
221 if (this.isPossiblyTextCompletionData(data)) {222 if (this.isPossiblyTextCompletionData(data)) {
222 toastr.info('Importing as settings preset...', 'Text Completion settings detected');223 toastr.info(t`Importing as settings preset...`, t`Text Completion settings detected`);
223 return await getPresetManager('textgenerationwebui').savePreset(fileName, data);224 return await getPresetManager('textgenerationwebui').savePreset(fileName, data);
224 }225 }
225226
@@ -231,7 +232,7 @@ class PresetManager {
231 }232 }
232233
233 if (validSections.length === 0) {234 if (validSections.length === 0) {
234 toastr.error('No valid sections found in imported data');235 toastr.error(t`No valid sections found in imported data`);
235 return;236 return;
236 }237 }
237238
@@ -242,8 +243,8 @@ class PresetManager {
242243
243 const html = $(await renderTemplateAsync('masterImport', { sections: sectionNames }));244 const html = $(await renderTemplateAsync('masterImport', { sections: sectionNames }));
244 const popup = new Popup(html, POPUP_TYPE.CONFIRM, '', {245 const popup = new Popup(html, POPUP_TYPE.CONFIRM, '', {
245 okButton: 'Import',246 okButton: t`Import`,
246 cancelButton: 'Cancel',247 cancelButton: t`Cancel`,
247 });248 });
248249
249 const result = await popup.show();250 const result = await popup.show();
@@ -257,7 +258,7 @@ class PresetManager {
257 const confirmedSections = html.find('input:checked').map((_, el) => el instanceof HTMLInputElement && el.value).get();258 const confirmedSections = html.find('input:checked').map((_, el) => el instanceof HTMLInputElement && el.value).get();
258259
259 if (confirmedSections.length === 0) {260 if (confirmedSections.length === 0) {
260 toastr.info('No sections selected for import');261 toastr.info(t`No sections selected for import`);
261 return;262 return;
262 }263 }
263264
@@ -270,7 +271,7 @@ class PresetManager {
270 }271 }
271 }272 }
272273
273 toastr.success(`Imported ${importedSections.length} settings: ${importedSections.join(', ')}`);274 toastr.success(t`Imported ${importedSections.length} settings: ${importedSections.join(', ')}`);
274 }275 }
275276
276 /**277 /**
@@ -285,8 +286,8 @@ class PresetManager {
285 const html = $(await renderTemplateAsync('masterExport', { sections: sectionNames }));286 const html = $(await renderTemplateAsync('masterExport', { sections: sectionNames }));
286287
287 const popup = new Popup(html, POPUP_TYPE.CONFIRM, '', {288 const popup = new Popup(html, POPUP_TYPE.CONFIRM, '', {
288 okButton: 'Export',289 okButton: t`Export`,
289 cancelButton: 'Cancel',290 cancelButton: t`Cancel`,
290 });291 });
291292
292 const result = await popup.show();293 const result = await popup.show();
@@ -300,7 +301,7 @@ class PresetManager {
300 const data = {};301 const data = {};
301302
302 if (confirmedSections.length === 0) {303 if (confirmedSections.length === 0) {
303 toastr.info('No sections selected for export');304 toastr.info(t`No sections selected for export`);
304 return;305 return;
305 }306 }
306307
@@ -366,21 +367,21 @@ class PresetManager {
366 console.log(selected);367 console.log(selected);
367368
368 if (selected.val() == 'gui') {369 if (selected.val() == 'gui') {
369 toastr.info('Cannot update GUI preset');370 toastr.info(t`Cannot update GUI preset`);
370 return;371 return;
371 }372 }
372373
373 const name = selected.text();374 const name = selected.text();
374 await this.savePreset(name);375 await this.savePreset(name);
375376
376 const successToast = !this.isAdvancedFormatting() ? 'Preset updated' : 'Template updated';377 const successToast = !this.isAdvancedFormatting() ? t`Preset updated` : t`Template updated`;
377 toastr.success(successToast);378 toastr.success(successToast);
378 }379 }
379380
380 async savePresetAs() {381 async savePresetAs() {
381 const inputValue = this.getSelectedPresetName();382 const inputValue = this.getSelectedPresetName();
382 const popupText = !this.isAdvancedFormatting() ? '<h4>Hint: Use a character/group name to bind preset to a specific chat.</h4>' : '';383 const popupText = !this.isAdvancedFormatting() ? '<h4>' + t`Hint: Use a character/group name to bind preset to a specific chat.` + '</h4>' : '';
383 const headerText = !this.isAdvancedFormatting() ? 'Preset name:' : 'Template name:';384 const headerText = !this.isAdvancedFormatting() ? t`Preset name:` : t`Template name:`;
384 const name = await Popup.show.input(headerText, popupText, inputValue);385 const name = await Popup.show.input(headerText, popupText, inputValue);
385 if (!name) {386 if (!name) {
386 console.log('Preset name not provided');387 console.log('Preset name not provided');
@@ -389,7 +390,7 @@ class PresetManager {
389390
390 await this.savePreset(name);391 await this.savePreset(name);
391392
392 const successToast = !this.isAdvancedFormatting() ? 'Preset saved' : 'Template saved';393 const successToast = !this.isAdvancedFormatting() ? t`Preset saved` : t`Template saved`;
393 toastr.success(successToast);394 toastr.success(successToast);
394 }395 }
395396
@@ -411,7 +412,7 @@ class PresetManager {
411 });412 });
412413
413 if (!response.ok) {414 if (!response.ok) {
414 toastr.error('Check the server connection and reload the page to prevent data loss.', 'Preset could not be saved');415 toastr.error(t`Check the server connection and reload the page to prevent data loss.`, t`Preset could not be saved`);
415 console.error('Preset could not be saved', response);416 console.error('Preset could not be saved', response);
416 throw new Error('Preset could not be saved');417 throw new Error('Preset could not be saved');
417 }418 }
@@ -422,6 +423,19 @@ class PresetManager {
422 this.updateList(name, preset);423 this.updateList(name, preset);
423 }424 }
424425
426 async renamePreset(newName) {
427 const oldName = this.getSelectedPresetName();
428 try {
429 await this.savePreset(newName);
430 await this.deletePreset(oldName);
431 } catch (error) {
432 toastr.error(t`Check the server connection and reload the page to prevent data loss.`, t`Preset could not be renamed`);
433 console.error('Preset could not be renamed', error);
434 throw new Error('Preset could not be renamed');
435 }
436
437 }
438
425 getPresetList() {439 getPresetList() {
426 let presets = [];440 let presets = [];
427 let preset_names = {};441 let preset_names = {};
@@ -585,13 +599,14 @@ class PresetManager {
585 return settings;599 return settings;
586 }600 }
587601
588 async deleteCurrentPreset() {602 // pass no arguments to delete current preset
603 async deletePreset(name) {
589 const { preset_names, presets } = this.getPresetList();604 const { preset_names, presets } = this.getPresetList();
590 const value = this.getSelectedPreset();605 const value = name ? (this.isKeyedApi() ? this.findPreset(name) : name) : this.getSelectedPreset();
591 const nameToDelete = this.getSelectedPresetName();606 const nameToDelete = name || this.getSelectedPresetName();
592607
593 if (value == 'gui') {608 if (value == 'gui') {
594 toastr.info('Cannot delete GUI preset');609 toastr.info(t`Cannot delete GUI preset`);
595 return;610 return;
596 }611 }
597612
@@ -605,7 +620,10 @@ class PresetManager {
605 delete preset_names[nameToDelete];620 delete preset_names[nameToDelete];
606 }621 }
607622
608 if (Object.keys(preset_names).length) {623 // switch in UI only when deleting currently selected preset
624 const switchPresets = !name || this.getSelectedPresetName() == name;
625
626 if (Object.keys(preset_names).length && switchPresets) {
609 const nextPresetName = Object.keys(preset_names)[0];627 const nextPresetName = Object.keys(preset_names)[0];
610 const newValue = preset_names[nextPresetName];628 const newValue = preset_names[nextPresetName];
611 $(this.select).find(`option[value="${newValue}"]`).attr('selected', 'true');629 $(this.select).find(`option[value="${newValue}"]`).attr('selected', 'true');
@@ -629,7 +647,7 @@ class PresetManager {
629 });647 });
630648
631 if (!response.ok) {649 if (!response.ok) {
632 const errorToast = !this.isAdvancedFormatting() ? 'Failed to restore default preset' : 'Failed to restore default template';650 const errorToast = !this.isAdvancedFormatting() ? t`Failed to restore default preset` : t`Failed to restore default template`;
633 toastr.error(errorToast);651 toastr.error(errorToast);
634 return;652 return;
635 }653 }
@@ -721,7 +739,8 @@ async function waitForConnection() {
721export async function initPresetManager() {739export async function initPresetManager() {
722 eventSource.on(event_types.CHAT_CHANGED, autoSelectPreset);740 eventSource.on(event_types.CHAT_CHANGED, autoSelectPreset);
723 registerPresetManagers();741 registerPresetManagers();
724 SlashCommandParser.addCommandObject(SlashCommand.fromProps({ name: 'preset',742 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
743 name: 'preset',
725 callback: presetCommandCallback,744 callback: presetCommandCallback,
726 returns: 'current preset',745 returns: 'current preset',
727 unnamedArgumentList: [746 unnamedArgumentList: [
@@ -774,6 +793,29 @@ export async function initPresetManager() {
774 await presetManager.savePresetAs();793 await presetManager.savePresetAs();
775 });794 });
776795
796 $(document).on('click', '[data-preset-manager-rename]', async function () {
797 const apiId = $(this).data('preset-manager-rename');
798 const presetManager = getPresetManager(apiId);
799
800 if (!presetManager) {
801 console.warn(`Preset Manager not found for API: ${apiId}`);
802 return;
803 }
804
805 const popupHeader = !presetManager.isAdvancedFormatting() ? t`Rename preset` : t`Rename template`;
806 const oldName = presetManager.getSelectedPresetName();
807 const newName = await Popup.show.input(popupHeader, t`Enter a new name:`, oldName);
808 if (!newName || oldName === newName) {
809 console.debug(!presetManager.isAdvancedFormatting() ? 'Preset rename cancelled' : 'Template rename cancelled');
810 return;
811 }
812
813 await presetManager.renamePreset(newName);
814
815 const successToast = !presetManager.isAdvancedFormatting() ? t`Preset renamed` : t`Template renamed`;
816 toastr.success(successToast);
817 });
818
777 $(document).on('click', '[data-preset-manager-export]', async function () {819 $(document).on('click', '[data-preset-manager-export]', async function () {
778 const apiId = $(this).data('preset-manager-export');820 const apiId = $(this).data('preset-manager-export');
779 const presetManager = getPresetManager(apiId);821 const presetManager = getPresetManager(apiId);
@@ -816,7 +858,7 @@ export async function initPresetManager() {
816 data['name'] = name;858 data['name'] = name;
817859
818 await presetManager.savePreset(name, data);860 await presetManager.savePreset(name, data);
819 const successToast = !presetManager.isAdvancedFormatting() ? 'Preset imported' : 'Template imported';861 const successToast = !presetManager.isAdvancedFormatting() ? t`Preset imported` : t`Template imported`;
820 toastr.success(successToast);862 toastr.success(successToast);
821 e.target.value = null;863 e.target.value = null;
822 });864 });
@@ -830,19 +872,19 @@ export async function initPresetManager() {
830 return;872 return;
831 }873 }
832874
833 const headerText = !presetManager.isAdvancedFormatting() ? 'Delete this preset?' : 'Delete this template?';875 const headerText = !presetManager.isAdvancedFormatting() ? t`Delete this preset?` : t`Delete this template?`;
834 const confirm = await Popup.show.confirm(headerText, 'This action is irreversible and your current settings will be overwritten.');876 const confirm = await Popup.show.confirm(headerText, t`This action is irreversible and your current settings will be overwritten.`);
835 if (!confirm) {877 if (!confirm) {
836 return;878 return;
837 }879 }
838880
839 const result = await presetManager.deleteCurrentPreset();881 const result = await presetManager.deletePreset();
840882
841 if (result) {883 if (result) {
842 const successToast = !presetManager.isAdvancedFormatting() ? 'Preset deleted' : 'Template deleted';884 const successToast = !presetManager.isAdvancedFormatting() ? t`Preset deleted` : t`Template deleted`;
843 toastr.success(successToast);885 toastr.success(successToast);
844 } else {886 } else {
845 const warningToast = !presetManager.isAdvancedFormatting() ? 'Preset was not deleted from server' : 'Template was not deleted from server';887 const warningToast = !presetManager.isAdvancedFormatting() ? t`Preset was not deleted from server` : t`Template was not deleted from server`;
846 toastr.warning(warningToast);888 toastr.warning(warningToast);
847 }889 }
848890
@@ -862,7 +904,7 @@ export async function initPresetManager() {
862 const data = await presetManager.getDefaultPreset(name);904 const data = await presetManager.getDefaultPreset(name);
863905
864 if (name == 'gui') {906 if (name == 'gui') {
865 toastr.info('Cannot restore GUI preset');907 toastr.info(t`Cannot restore GUI preset`);
866 return;908 return;
867 }909 }
868910
@@ -872,37 +914,37 @@ export async function initPresetManager() {
872914
873 if (data.isDefault) {915 if (data.isDefault) {
874 if (Object.keys(data.preset).length === 0) {916 if (Object.keys(data.preset).length === 0) {
875 const errorToast = !presetManager.isAdvancedFormatting() ? 'Default preset cannot be restored' : 'Default template cannot be restored';917 const errorToast = !presetManager.isAdvancedFormatting() ? t`Default preset cannot be restored` : t`Default template cannot be restored`;
876 toastr.error(errorToast);918 toastr.error(errorToast);
877 return;919 return;
878 }920 }
879921
880 const confirmText = !presetManager.isAdvancedFormatting()922 const confirmText = !presetManager.isAdvancedFormatting()
881 ? 'Resetting a <b>default preset</b> will restore the default settings.'923 ? t`Resetting a <b>default preset</b> will restore the default settings.`
882 : 'Resetting a <b>default template</b> will restore the default settings.';924 : t`Resetting a <b>default template</b> will restore the default settings.`;
883 const confirm = await Popup.show.confirm('Are you sure?', confirmText);925 const confirm = await Popup.show.confirm(t`Are you sure?`, confirmText);
884 if (!confirm) {926 if (!confirm) {
885 return;927 return;
886 }928 }
887929
888 await presetManager.deleteCurrentPreset();930 await presetManager.deletePreset();
889 await presetManager.savePreset(name, data.preset);931 await presetManager.savePreset(name, data.preset);
890 const option = presetManager.findPreset(name);932 const option = presetManager.findPreset(name);
891 presetManager.selectPreset(option);933 presetManager.selectPreset(option);
892 const successToast = !presetManager.isAdvancedFormatting() ? 'Default preset restored' : 'Default template restored';934 const successToast = !presetManager.isAdvancedFormatting() ? t`Default preset restored` : t`Default template restored`;
893 toastr.success(successToast);935 toastr.success(successToast);
894 } else {936 } else {
895 const confirmText = !presetManager.isAdvancedFormatting()937 const confirmText = !presetManager.isAdvancedFormatting()
896 ? 'Resetting a <b>custom preset</b> will restore to the last saved state.'938 ? t`Resetting a <b>custom preset</b> will restore to the last saved state.`
897 : 'Resetting a <b>custom template</b> will restore to the last saved state.';939 : t`Resetting a <b>custom template</b> will restore to the last saved state.`;
898 const confirm = await Popup.show.confirm('Are you sure?', confirmText);940 const confirm = await Popup.show.confirm(t`Are you sure?`, confirmText);
899 if (!confirm) {941 if (!confirm) {
900 return;942 return;
901 }943 }
902944
903 const option = presetManager.findPreset(name);945 const option = presetManager.findPreset(name);
904 presetManager.selectPreset(option);946 presetManager.selectPreset(option);
905 const successToast = !presetManager.isAdvancedFormatting() ? 'Preset restored' : 'Template restored';947 const successToast = !presetManager.isAdvancedFormatting() ? t`Preset restored` : t`Template restored`;
906 toastr.success(successToast);948 toastr.success(successToast);
907 }949 }
908 });950 });
public/scripts/scrapers.js+16 -7
@@ -13,6 +13,7 @@ import { isValidUrl } from './utils.js';
13 * @property {string} description13 * @property {string} description
14 * @property {string} iconClass14 * @property {string} iconClass
15 * @property {boolean} iconAvailable15 * @property {boolean} iconAvailable
16 * @property {() => Promise<void>} [init=null]
16 * @property {() => Promise<boolean>} isAvailable17 * @property {() => Promise<boolean>} isAvailable
17 * @property {() => Promise<File[]>} scrape18 * @property {() => Promise<File[]>} scrape
18 */19 */
@@ -36,12 +37,16 @@ export class ScraperManager {
36 * Register a scraper to be used by the Data Bank.37 * Register a scraper to be used by the Data Bank.
37 * @param {Scraper} scraper Instance of a scraper to register38 * @param {Scraper} scraper Instance of a scraper to register
38 */39 */
39 static registerDataBankScraper(scraper) {40 static async registerDataBankScraper(scraper) {
40 if (ScraperManager.#scrapers.some(s => s.id === scraper.id)) {41 if (ScraperManager.#scrapers.some(s => s.id === scraper.id)) {
41 console.warn(`Scraper with ID ${scraper.id} already registered`);42 console.warn(`Scraper with ID ${scraper.id} already registered`);
42 return;43 return;
43 }44 }
4445
46 if (scraper.init) {
47 await scraper.init();
48 }
49
45 ScraperManager.#scrapers.push(scraper);50 ScraperManager.#scrapers.push(scraper);
46 }51 }
4752
@@ -462,7 +467,9 @@ class YouTubeScraper {
462 this.description = 'Download a transcript from a YouTube video.';467 this.description = 'Download a transcript from a YouTube video.';
463 this.iconClass = 'fa-brands fa-youtube';468 this.iconClass = 'fa-brands fa-youtube';
464 this.iconAvailable = true;469 this.iconAvailable = true;
470 }
465471
472 async init() {
466 SlashCommandParser.addCommandObject(SlashCommand.fromProps({473 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
467 name: 'yt-script',474 name: 'yt-script',
468 callback: async (args, url) => {475 callback: async (args, url) => {
@@ -564,9 +571,11 @@ class YouTubeScraper {
564 }571 }
565}572}
566573
567ScraperManager.registerDataBankScraper(new FileScraper());574export async function initScrapers() {
568ScraperManager.registerDataBankScraper(new Notepad());575 await ScraperManager.registerDataBankScraper(new FileScraper());
569ScraperManager.registerDataBankScraper(new WebScraper());576 await ScraperManager.registerDataBankScraper(new Notepad());
570ScraperManager.registerDataBankScraper(new MediaWikiScraper());577 await ScraperManager.registerDataBankScraper(new WebScraper());
571ScraperManager.registerDataBankScraper(new FandomScraper());578 await ScraperManager.registerDataBankScraper(new MediaWikiScraper());
572ScraperManager.registerDataBankScraper(new YouTubeScraper());579 await ScraperManager.registerDataBankScraper(new FandomScraper());
580 await ScraperManager.registerDataBankScraper(new YouTubeScraper());
581}
public/scripts/slash-commands.js+352 -152
@@ -55,7 +55,7 @@ import { autoSelectPersona, retriggerFirstMessageOnEmptyChat, setPersonaLockStat
55import { addEphemeralStoppingString, chat_styles, flushEphemeralStoppingStrings, power_user } from './power-user.js';55import { addEphemeralStoppingString, chat_styles, flushEphemeralStoppingStrings, power_user } from './power-user.js';
56import { SERVER_INPUTS, textgen_types, textgenerationwebui_settings } from './textgen-settings.js';56import { SERVER_INPUTS, textgen_types, textgenerationwebui_settings } from './textgen-settings.js';
57import { decodeTextTokens, getAvailableTokenizers, getFriendlyTokenizerName, getTextTokens, getTokenCountAsync, selectTokenizer } from './tokenizers.js';57import { decodeTextTokens, getAvailableTokenizers, getFriendlyTokenizerName, getTextTokens, getTokenCountAsync, selectTokenizer } from './tokenizers.js';
58import { debounce, delay, isFalseBoolean, isTrueBoolean, showFontAwesomePicker, stringToRange, trimToEndSentence, trimToStartSentence, waitUntilCondition } from './utils.js';58import { debounce, delay, equalsIgnoreCaseAndAccents, findChar, getCharIndex, isFalseBoolean, isTrueBoolean, onlyUnique, showFontAwesomePicker, stringToRange, trimToEndSentence, trimToStartSentence, waitUntilCondition } from './utils.js';
59import { registerVariableCommands, resolveVariable } from './variables.js';59import { registerVariableCommands, resolveVariable } from './variables.js';
60import { background_settings } from './backgrounds.js';60import { background_settings } from './backgrounds.js';
61import { SlashCommandClosure } from './slash-commands/SlashCommandClosure.js';61import { SlashCommandClosure } from './slash-commands/SlashCommandClosure.js';
@@ -68,9 +68,9 @@ import { SlashCommandNamedArgumentAssignment } from './slash-commands/SlashComma
68import { SlashCommandEnumValue, enumTypes } from './slash-commands/SlashCommandEnumValue.js';68import { SlashCommandEnumValue, enumTypes } from './slash-commands/SlashCommandEnumValue.js';
69import { POPUP_TYPE, Popup, callGenericPopup } from './popup.js';69import { POPUP_TYPE, Popup, callGenericPopup } from './popup.js';
70import { commonEnumProviders, enumIcons } from './slash-commands/SlashCommandCommonEnumsProvider.js';70import { commonEnumProviders, enumIcons } from './slash-commands/SlashCommandCommonEnumsProvider.js';
71import { SlashCommandDebugController } from './slash-commands/SlashCommandDebugController.js';
72import { SlashCommandBreakController } from './slash-commands/SlashCommandBreakController.js';71import { SlashCommandBreakController } from './slash-commands/SlashCommandBreakController.js';
73import { SlashCommandExecutionError } from './slash-commands/SlashCommandExecutionError.js';72import { SlashCommandExecutionError } from './slash-commands/SlashCommandExecutionError.js';
73import { slashCommandReturnHelper } from './slash-commands/SlashCommandReturnHelper.js';
74export {74export {
75 executeSlashCommands, executeSlashCommandsWithOptions, getSlashCommandsHelp, registerSlashCommand,75 executeSlashCommands, executeSlashCommandsWithOptions, getSlashCommandsHelp, registerSlashCommand,
76};76};
@@ -174,26 +174,111 @@ export function initDefaultSlashCommands() {
174 `,174 `,
175 }));175 }));
176 SlashCommandParser.addCommandObject(SlashCommand.fromProps({176 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
177 name: 'char-find',
178 aliases: ['findchar'],
179 callback: (args, name) => {
180 if (typeof name !== 'string') throw new Error('name must be a string');
181 if (args.preferCurrent instanceof SlashCommandClosure || Array.isArray(args.preferCurrent)) throw new Error('preferCurrent cannot be a closure or array');
182 if (args.quiet instanceof SlashCommandClosure || Array.isArray(args.quiet)) throw new Error('quiet cannot be a closure or array');
183
184 const char = findChar({ name: name, filteredByTags: validateArrayArgString(args.tag, 'tag'), preferCurrentChar: !isFalseBoolean(args.preferCurrent), quiet: isTrueBoolean(args.quiet) });
185 return char?.avatar ?? '';
186 },
187 returns: 'the avatar key (unique identifier) of the character',
188 namedArgumentList: [
189 SlashCommandNamedArgument.fromProps({
190 name: 'tag',
191 description: 'Supply one or more tags to filter down to the correct character for the provided name, if multiple characters have the same name.',
192 typeList: [ARGUMENT_TYPE.STRING],
193 enumProvider: commonEnumProviders.tags('assigned'),
194 acceptsMultiple: true,
195 }),
196 SlashCommandNamedArgument.fromProps({
197 name: 'preferCurrent',
198 description: 'Prefer current character or characters in a group, if multiple characters match',
199 typeList: [ARGUMENT_TYPE.BOOLEAN],
200 defaultValue: 'true',
201 }),
202 SlashCommandNamedArgument.fromProps({
203 name: 'quiet',
204 description: 'Do not show warning if multiple charactrers are found',
205 typeList: [ARGUMENT_TYPE.BOOLEAN],
206 defaultValue: 'false',
207 enumProvider: commonEnumProviders.boolean('trueFalse'),
208 }),
209 ],
210 unnamedArgumentList: [
211 SlashCommandArgument.fromProps({
212 description: 'Character name - or unique character identifier (avatar key)',
213 typeList: [ARGUMENT_TYPE.STRING],
214 enumProvider: commonEnumProviders.characters('character'),
215 forceEnum: false,
216 }),
217 ],
218 helpString: `
219 <div>
220 Searches for a character and returns its avatar key.
221 </div>
222 <div>
223 This can be used to choose the correct character for something like <code>/sendas</code> or other commands in need of a character name
224 if you have multiple characters with the same name.
225 </div>
226 <div>
227 <strong>Example:</strong>
228 <ul>
229 <li>
230 <pre><code>/char-find name="Chloe"</code></pre>
231 Returns the avatar key for "Chloe".
232 </li>
233 <li>
234 <pre><code>/search name="Chloe" tag="friend"</code></pre>
235 Returns the avatar key for the character "Chloe" that is tagged with "friend".
236 This is useful if you for example have multiple characters named "Chloe", and the others are "foe", "goddess", or anything else,
237 so you can actually select the character you are looking for.
238 </li>
239 </ul>
240 </div>
241 `,
242 }));
243 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
177 name: 'sendas',244 name: 'sendas',
178 callback: sendMessageAs,245 callback: sendMessageAs,
246 returns: 'Optionally the text of the sent message, if specified in the "return" argument',
179 namedArgumentList: [247 namedArgumentList: [
180 SlashCommandNamedArgument.fromProps({248 SlashCommandNamedArgument.fromProps({
181 name: 'name',249 name: 'name',
182 description: 'Character name',250 description: 'Character name - or unique character identifier (avatar key)',
183 typeList: [ARGUMENT_TYPE.STRING],251 typeList: [ARGUMENT_TYPE.STRING],
184 isRequired: true,252 isRequired: true,
185 enumProvider: commonEnumProviders.characters('character'),253 enumProvider: commonEnumProviders.characters('character'),
186 forceEnum: false,254 forceEnum: false,
187 }),255 }),
188 new SlashCommandNamedArgument(256 SlashCommandNamedArgument.fromProps({
189 'compact', 'Use compact layout', [ARGUMENT_TYPE.BOOLEAN], false, false, 'false',257 name: 'avatar',
190 ),258 description: 'Character avatar override (Can be either avatar key or just the character name to pull the avatar from)',
259 typeList: [ARGUMENT_TYPE.STRING],
260 enumProvider: commonEnumProviders.characters('character'),
261 }),
262 SlashCommandNamedArgument.fromProps({
263 name: 'compact',
264 description: 'Use compact layout',
265 typeList: [ARGUMENT_TYPE.BOOLEAN],
266 defaultValue: 'false',
267 }),
191 SlashCommandNamedArgument.fromProps({268 SlashCommandNamedArgument.fromProps({
192 name: 'at',269 name: 'at',
193 description: 'position to insert the message (index-based, corresponding to message id). If not set, the message will be inserted at the end of the chat.\nNegative values are accepted and will work similarly to how \'depth\' usually works. For example, -1 will insert the message right before the last message in chat.',270 description: 'position to insert the message (index-based, corresponding to message id). If not set, the message will be inserted at the end of the chat.\nNegative values are accepted and will work similarly to how \'depth\' usually works. For example, -1 will insert the message right before the last message in chat.',
194 typeList: [ARGUMENT_TYPE.NUMBER],271 typeList: [ARGUMENT_TYPE.NUMBER],
195 enumProvider: commonEnumProviders.messages({ allowIdAfter: true }),272 enumProvider: commonEnumProviders.messages({ allowIdAfter: true }),
196 }),273 }),
274 SlashCommandNamedArgument.fromProps({
275 name: 'return',
276 description: 'The way how you want the return value to be provided',
277 typeList: [ARGUMENT_TYPE.STRING],
278 defaultValue: 'none',
279 enumList: slashCommandReturnHelper.enumList({ allowObject: true }),
280 forceEnum: true,
281 }),
197 ],282 ],
198 unnamedArgumentList: [283 unnamedArgumentList: [
199 new SlashCommandArgument(284 new SlashCommandArgument(
@@ -211,6 +296,10 @@ export function initDefaultSlashCommands() {
211 <pre><code>/sendas name="Chloe" Hello, guys!</code></pre>296 <pre><code>/sendas name="Chloe" Hello, guys!</code></pre>
212 will send "Hello, guys!" from "Chloe".297 will send "Hello, guys!" from "Chloe".
213 </li>298 </li>
299 <li>
300 <pre><code>/sendas name="Chloe" avatar="BigBadBoss" Hehehe, I am the big bad evil, fear me.</code></pre>
301 will send a message as the character "Chloe", but utilizing the avatar from a character named "BigBadBoss".
302 </li>
214 </ul>303 </ul>
215 </div>304 </div>
216 <div>305 <div>
@@ -222,6 +311,7 @@ export function initDefaultSlashCommands() {
222 name: 'sys',311 name: 'sys',
223 callback: sendNarratorMessage,312 callback: sendNarratorMessage,
224 aliases: ['nar'],313 aliases: ['nar'],
314 returns: 'Optionally the text of the sent message, if specified in the "return" argument',
225 namedArgumentList: [315 namedArgumentList: [
226 new SlashCommandNamedArgument(316 new SlashCommandNamedArgument(
227 'compact',317 'compact',
@@ -237,6 +327,14 @@ export function initDefaultSlashCommands() {
237 typeList: [ARGUMENT_TYPE.NUMBER],327 typeList: [ARGUMENT_TYPE.NUMBER],
238 enumProvider: commonEnumProviders.messages({ allowIdAfter: true }),328 enumProvider: commonEnumProviders.messages({ allowIdAfter: true }),
239 }),329 }),
330 SlashCommandNamedArgument.fromProps({
331 name: 'return',
332 description: 'The way how you want the return value to be provided',
333 typeList: [ARGUMENT_TYPE.STRING],
334 defaultValue: 'none',
335 enumList: slashCommandReturnHelper.enumList({ allowObject: true }),
336 forceEnum: true,
337 }),
240 ],338 ],
241 unnamedArgumentList: [339 unnamedArgumentList: [
242 new SlashCommandArgument(340 new SlashCommandArgument(
@@ -276,6 +374,7 @@ export function initDefaultSlashCommands() {
276 SlashCommandParser.addCommandObject(SlashCommand.fromProps({374 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
277 name: 'comment',375 name: 'comment',
278 callback: sendCommentMessage,376 callback: sendCommentMessage,
377 returns: 'Optionally the text of the sent message, if specified in the "return" argument',
279 namedArgumentList: [378 namedArgumentList: [
280 new SlashCommandNamedArgument(379 new SlashCommandNamedArgument(
281 'compact',380 'compact',
@@ -291,6 +390,14 @@ export function initDefaultSlashCommands() {
291 typeList: [ARGUMENT_TYPE.NUMBER],390 typeList: [ARGUMENT_TYPE.NUMBER],
292 enumProvider: commonEnumProviders.messages({ allowIdAfter: true }),391 enumProvider: commonEnumProviders.messages({ allowIdAfter: true }),
293 }),392 }),
393 SlashCommandNamedArgument.fromProps({
394 name: 'return',
395 description: 'The way how you want the return value to be provided',
396 typeList: [ARGUMENT_TYPE.STRING],
397 defaultValue: 'none',
398 enumList: slashCommandReturnHelper.enumList({ allowObject: true }),
399 forceEnum: true,
400 }),
294 ],401 ],
295 unnamedArgumentList: [402 unnamedArgumentList: [
296 new SlashCommandArgument(403 new SlashCommandArgument(
@@ -381,12 +488,14 @@ export function initDefaultSlashCommands() {
381 SlashCommandParser.addCommandObject(SlashCommand.fromProps({488 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
382 name: 'go',489 name: 'go',
383 callback: goToCharacterCallback,490 callback: goToCharacterCallback,
491 returns: 'The character/group name',
384 unnamedArgumentList: [492 unnamedArgumentList: [
385 SlashCommandArgument.fromProps({493 SlashCommandArgument.fromProps({
386 description: 'name',494 description: 'Character name - or unique character identifier (avatar key)',
387 typeList: [ARGUMENT_TYPE.STRING],495 typeList: [ARGUMENT_TYPE.STRING],
388 isRequired: true,496 isRequired: true,
389 enumProvider: commonEnumProviders.characters('all'),497 enumProvider: commonEnumProviders.characters('all'),
498 forceEnum: true,
390 }),499 }),
391 ],500 ],
392 helpString: 'Opens up a chat with the character or group by its name',501 helpString: 'Opens up a chat with the character or group by its name',
@@ -428,15 +537,23 @@ export function initDefaultSlashCommands() {
428 SlashCommandParser.addCommandObject(SlashCommand.fromProps({537 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
429 name: 'ask',538 name: 'ask',
430 callback: askCharacter,539 callback: askCharacter,
431 returns: 'the generated text',540 returns: 'Optionally the text of the sent message, if specified in the "return" argument',
432 namedArgumentList: [541 namedArgumentList: [
433 SlashCommandNamedArgument.fromProps({542 SlashCommandNamedArgument.fromProps({
434 name: 'name',543 name: 'name',
435 description: 'character name',544 description: 'Character name - or unique character identifier (avatar key)',
436 typeList: [ARGUMENT_TYPE.STRING],545 typeList: [ARGUMENT_TYPE.STRING],
437 isRequired: true,546 isRequired: true,
438 enumProvider: commonEnumProviders.characters('character'),547 enumProvider: commonEnumProviders.characters('character'),
439 }),548 }),
549 SlashCommandNamedArgument.fromProps({
550 name: 'return',
551 description: 'The way how you want the return value to be provided',
552 typeList: [ARGUMENT_TYPE.STRING],
553 defaultValue: 'pipe',
554 enumList: slashCommandReturnHelper.enumList({ allowObject: true }),
555 forceEnum: true,
556 }),
440 ],557 ],
441 unnamedArgumentList: [558 unnamedArgumentList: [
442 new SlashCommandArgument(559 new SlashCommandArgument(
@@ -451,7 +568,7 @@ export function initDefaultSlashCommands() {
451 namedArgumentList: [],568 namedArgumentList: [],
452 unnamedArgumentList: [569 unnamedArgumentList: [
453 SlashCommandArgument.fromProps({570 SlashCommandArgument.fromProps({
454 description: 'name',571 description: 'Character name - or unique character identifier (avatar key)',
455 typeList: [ARGUMENT_TYPE.STRING],572 typeList: [ARGUMENT_TYPE.STRING],
456 isRequired: true,573 isRequired: true,
457 enumProvider: commonEnumProviders.characters('character'),574 enumProvider: commonEnumProviders.characters('character'),
@@ -475,6 +592,7 @@ export function initDefaultSlashCommands() {
475 SlashCommandParser.addCommandObject(SlashCommand.fromProps({592 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
476 name: 'send',593 name: 'send',
477 callback: sendUserMessageCallback,594 callback: sendUserMessageCallback,
595 returns: 'Optionally the text of the sent message, if specified in the "return" argument',
478 namedArgumentList: [596 namedArgumentList: [
479 new SlashCommandNamedArgument(597 new SlashCommandNamedArgument(
480 'compact',598 'compact',
@@ -497,6 +615,14 @@ export function initDefaultSlashCommands() {
497 defaultValue: '{{user}}',615 defaultValue: '{{user}}',
498 enumProvider: commonEnumProviders.personas,616 enumProvider: commonEnumProviders.personas,
499 }),617 }),
618 SlashCommandNamedArgument.fromProps({
619 name: 'return',
620 description: 'The way how you want the return value to be provided',
621 typeList: [ARGUMENT_TYPE.STRING],
622 defaultValue: 'none',
623 enumList: slashCommandReturnHelper.enumList({ allowObject: true }),
624 forceEnum: true,
625 }),
500 ],626 ],
501 unnamedArgumentList: [627 unnamedArgumentList: [
502 new SlashCommandArgument(628 new SlashCommandArgument(
@@ -618,7 +744,7 @@ export function initDefaultSlashCommands() {
618 aliases: ['addmember', 'memberadd'],744 aliases: ['addmember', 'memberadd'],
619 unnamedArgumentList: [745 unnamedArgumentList: [
620 SlashCommandArgument.fromProps({746 SlashCommandArgument.fromProps({
621 description: 'character name',747 description: 'Character name - or unique character identifier (avatar key)',
622 typeList: [ARGUMENT_TYPE.STRING],748 typeList: [ARGUMENT_TYPE.STRING],
623 isRequired: true,749 isRequired: true,
624 enumProvider: () => selected_group ? commonEnumProviders.characters('character')() : [],750 enumProvider: () => selected_group ? commonEnumProviders.characters('character')() : [],
@@ -856,7 +982,7 @@ export function initDefaultSlashCommands() {
856 ),982 ),
857 SlashCommandNamedArgument.fromProps({983 SlashCommandNamedArgument.fromProps({
858 name: 'name',984 name: 'name',
859 description: 'in-prompt name for instruct mode',985 description: 'in-prompt character name for instruct mode (or unique character identifier (avatar key), which will be used as name)',
860 typeList: [ARGUMENT_TYPE.STRING],986 typeList: [ARGUMENT_TYPE.STRING],
861 defaultValue: 'System',987 defaultValue: 'System',
862 enumProvider: () => [...commonEnumProviders.characters('character')(), new SlashCommandEnumValue('System', null, enumTypes.enum, enumIcons.assistant)],988 enumProvider: () => [...commonEnumProviders.characters('character')(), new SlashCommandEnumValue('System', null, enumTypes.enum, enumIcons.assistant)],
@@ -1487,12 +1613,21 @@ export function initDefaultSlashCommands() {
1487 SlashCommandParser.addCommandObject(SlashCommand.fromProps({1613 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
1488 name: 'listinjects',1614 name: 'listinjects',
1489 callback: listInjectsCallback,1615 callback: listInjectsCallback,
1490 helpString: 'Lists all script injections for the current chat. Displays injects in a popup by default. Use the <code>format</code> argument to change the output format.',1616 helpString: 'Lists all script injections for the current chat. Displays injects in a popup by default. Use the <code>return</code> argument to change the return type.',
1491 returns: 'JSON object of script injections',1617 returns: 'Optionalls the JSON object of script injections',
1492 namedArgumentList: [1618 namedArgumentList: [
1493 SlashCommandNamedArgument.fromProps({1619 SlashCommandNamedArgument.fromProps({
1620 name: 'return',
1621 description: 'The way how you want the return value to be provided',
1622 typeList: [ARGUMENT_TYPE.STRING],
1623 defaultValue: 'popup-html',
1624 enumList: slashCommandReturnHelper.enumList({ allowPipe: false, allowObject: true, allowChat: true, allowPopup: true, allowTextVersion: false }),
1625 forceEnum: true,
1626 }),
1627 // TODO remove some day
1628 SlashCommandNamedArgument.fromProps({
1494 name: 'format',1629 name: 'format',
1495 description: 'output format',1630 description: '!!! DEPRECATED - use "return" instead !!! output format',
1496 typeList: [ARGUMENT_TYPE.STRING],1631 typeList: [ARGUMENT_TYPE.STRING],
1497 isRequired: true,1632 isRequired: true,
1498 forceEnum: true,1633 forceEnum: true,
@@ -1761,37 +1896,43 @@ function injectCallback(args, value) {
1761}1896}
17621897
1763async function listInjectsCallback(args) {1898async function listInjectsCallback(args) {
1899 /** @type {import('./slash-commands/SlashCommandReturnHelper.js').SlashCommandReturnType} */
1900 let returnType = args.return;
1901
1902 // Old legacy return type handling
1903 if (args.format) {
1904 toastr.warning(`Legacy argument 'format' with value '${args.format}' is deprecated. Please use 'return' instead. Routing to the correct return type...`, 'Deprecation warning');
1764 const type = String(args?.format).toLowerCase().trim();1905 const type = String(args?.format).toLowerCase().trim();
1765 if (!chat_metadata.script_injects || !Object.keys(chat_metadata.script_injects).length) {1906 if (!chat_metadata.script_injects || !Object.keys(chat_metadata.script_injects).length) {
1766 type !== 'none' && toastr.info('No script injections for the current chat');1907 type !== 'none' && toastr.info('No script injections for the current chat');
1767 return JSON.stringify({});
1768 }1908 }
1769
1770 const injects = Object.entries(chat_metadata.script_injects)
1771 .map(([id, inject]) => {
1772 const position = Object.entries(extension_prompt_types);
1773 const positionName = position.find(([_, value]) => value === inject.position)?.[0] ?? 'unknown';
1774 return `* **${id}**: <code>${inject.value}</code> (${positionName}, depth: ${inject.depth}, scan: ${inject.scan ?? false}, role: ${inject.role ?? extension_prompt_roles.SYSTEM})`;
1775 })
1776 .join('\n');
1777
1778 const converter = new showdown.Converter();
1779 const messageText = `### Script injections:\n${injects}`;
1780 const htmlMessage = DOMPurify.sanitize(converter.makeHtml(messageText));
1781
1782 switch (type) {1909 switch (type) {
1783 case 'none':1910 case 'none':
1911 returnType = 'none';
1784 break;1912 break;
1785 case 'chat':1913 case 'chat':
1786 sendSystemMessage(system_message_types.GENERIC, htmlMessage);1914 returnType = 'chat-html';
1787 break;1915 break;
1788 case 'popup':1916 case 'popup':
1789 default:1917 default:
1790 await callGenericPopup(htmlMessage, POPUP_TYPE.TEXT);1918 returnType = 'popup-html';
1791 break;1919 break;
1792 }1920 }
1921 }
1922
1923 // Now the actual new return type handling
1924 const buildTextValue = (injects) => {
1925 const injectsStr = Object.entries(injects)
1926 .map(([id, inject]) => {
1927 const position = Object.entries(extension_prompt_types);
1928 const positionName = position.find(([_, value]) => value === inject.position)?.[0] ?? 'unknown';
1929 return `* **${id}**: <code>${inject.value}</code> (${positionName}, depth: ${inject.depth}, scan: ${inject.scan ?? false}, role: ${inject.role ?? extension_prompt_roles.SYSTEM})`;
1930 })
1931 .join('\n');
1932 return `### Script injections:\n${injectsStr || 'No script injections for the current chat'}`;
1933 };
17931934
1794 return JSON.stringify(chat_metadata.script_injects);1935 return await slashCommandReturnHelper.doReturn(returnType ?? 'popup-html', chat_metadata.script_injects ?? {}, { objectToStringFunc: buildTextValue });
1795}1936}
17961937
1797/**1938/**
@@ -2293,7 +2434,8 @@ async function generateCallback(args, value) {
22932434
2294 setEphemeralStopStrings(resolveVariable(args?.stop));2435 setEphemeralStopStrings(resolveVariable(args?.stop));
2295 const name = args?.name;2436 const name = args?.name;
2296 const result = await generateQuietPrompt(value, quietToLoud, false, '', name, length);2437 const char = findChar({ name: name });
2438 const result = await generateQuietPrompt(value, quietToLoud, false, '', char?.name ?? name, length);
2297 return result;2439 return result;
2298 } catch (err) {2440 } catch (err) {
2299 console.error('Error on /gen generation', err);2441 console.error('Error on /gen generation', err);
@@ -2477,30 +2619,26 @@ async function askCharacter(args, text) {
2477 // Not supported in group chats2619 // Not supported in group chats
2478 // TODO: Maybe support group chats?2620 // TODO: Maybe support group chats?
2479 if (selected_group) {2621 if (selected_group) {
2480 toastr.error('Cannot run /ask command in a group chat!');2622 toastr.warning('Cannot run /ask command in a group chat!');
2481 return '';2623 return '';
2482 }2624 }
24832625
2484 let name = '';2626 if (!args.name) {
2485
2486 if (args?.name) {
2487 name = args.name.trim();
2488
2489 if (!name) {
2490 toastr.warning('You must specify a name of the character to ask.');2627 toastr.warning('You must specify a name of the character to ask.');
2491 return '';2628 return '';
2492 }2629 }
2493 }
24942630
2495 const prevChId = this_chid;2631 const prevChId = this_chid;
24962632
2497 // Find the character2633 // Find the character
2498 const chId = characters.findIndex((e) => e.name === name || e.avatar === name);2634 const character = findChar({ name: args?.name });
2499 if (!characters[chId] || chId === -1) {2635 if (!character) {
2500 toastr.error('Character not found.');2636 toastr.error('Character not found.');
2501 return '';2637 return '';
2502 }2638 }
25032639
2640 const chId = getCharIndex(character);
2641
2504 if (text) {2642 if (text) {
2505 const mesText = getRegexedString(text.trim(), regex_placement.SLASH_COMMAND);2643 const mesText = getRegexedString(text.trim(), regex_placement.SLASH_COMMAND);
2506 // Sending a message implicitly saves the chat, so this needs to be done before changing the character2644 // Sending a message implicitly saves the chat, so this needs to be done before changing the character
@@ -2511,32 +2649,27 @@ async function askCharacter(args, text) {
2511 // Override character and send a user message2649 // Override character and send a user message
2512 setCharacterId(String(chId));2650 setCharacterId(String(chId));
25132651
2514 const character = characters[chId];2652 const { name, force_avatar, original_avatar } = getNameAndAvatarForMessage(character, args?.name);
2515 let force_avatar, original_avatar;
2516
2517 if (character && character.avatar !== 'none') {
2518 force_avatar = getThumbnailUrl('avatar', character.avatar);
2519 original_avatar = character.avatar;
2520 }
2521 else {
2522 force_avatar = default_avatar;
2523 original_avatar = default_avatar;
2524 }
25252653
2526 setCharacterName(character.name);2654 setCharacterName(name);
25272655
2528 const restoreCharacter = () => {2656 const restoreCharacter = () => {
2529 if (String(this_chid) !== String(chId)) {2657 if (String(this_chid) !== String(chId)) {
2530 return;2658 return;
2531 }2659 }
25322660
2661 if (prevChId !== undefined) {
2533 setCharacterId(prevChId);2662 setCharacterId(prevChId);
2534 setCharacterName(characters[prevChId].name);2663 setCharacterName(characters[prevChId].name);
2664 } else {
2665 setCharacterId(undefined);
2666 setCharacterName(neutralCharacterName);
2667 }
25352668
2536 // Only force the new avatar if the character name is the same2669 // Only force the new avatar if the character name is the same
2537 // This skips if an error was fired2670 // This skips if an error was fired
2538 const lastMessage = chat[chat.length - 1];2671 const lastMessage = chat[chat.length - 1];
2539 if (lastMessage && lastMessage?.name === character.name) {2672 if (lastMessage && lastMessage?.name === name) {
2540 lastMessage.force_avatar = force_avatar;2673 lastMessage.force_avatar = force_avatar;
2541 lastMessage.original_avatar = original_avatar;2674 lastMessage.original_avatar = original_avatar;
2542 }2675 }
@@ -2547,7 +2680,7 @@ async function askCharacter(args, text) {
2547 // Run generate and restore previous character2680 // Run generate and restore previous character
2548 try {2681 try {
2549 eventSource.once(event_types.MESSAGE_RECEIVED, restoreCharacter);2682 eventSource.once(event_types.MESSAGE_RECEIVED, restoreCharacter);
2550 toastr.info(`Asking ${character.name} something...`);2683 toastr.info(`Asking ${name} something...`);
2551 askResult = await Generate('ask_command');2684 askResult = await Generate('ask_command');
2552 } catch (error) {2685 } catch (error) {
2553 restoreCharacter();2686 restoreCharacter();
@@ -2560,7 +2693,9 @@ async function askCharacter(args, text) {
2560 }2693 }
2561 }2694 }
25622695
2563 return askResult;2696 const message = askResult ? chat[chat.length - 1] : null;
2697
2698 return await slashCommandReturnHelper.doReturn(args.return ?? 'pipe', message, { objectToStringFunc: x => x.mes });
2564}2699}
25652700
2566async function hideMessageCallback(_, arg) {2701async function hideMessageCallback(_, arg) {
@@ -2741,26 +2876,23 @@ async function removeGroupMemberCallback(_, arg) {
2741 return '';2876 return '';
2742}2877}
27432878
2744async function addGroupMemberCallback(_, arg) {2879async function addGroupMemberCallback(_, name) {
2745 if (!selected_group) {2880 if (!selected_group) {
2746 toastr.warning('Cannot run /memberadd command outside of a group chat.');2881 toastr.warning('Cannot run /memberadd command outside of a group chat.');
2747 return '';2882 return '';
2748 }2883 }
27492884
2750 if (!arg) {2885 if (!name) {
2751 console.warn('WARN: No argument provided for /memberadd command');2886 console.warn('WARN: No argument provided for /memberadd command');
2752 return '';2887 return '';
2753 }2888 }
27542889
2755 arg = arg.trim();2890 const character = findChar({ name: name, preferCurrentChar: false });
2756 const chid = findCharacterIndex(arg);2891 if (!character) {
27572892 console.warn(`WARN: No character found for argument ${name}`);
2758 if (chid === -1) {
2759 console.warn(`WARN: No character found for argument ${arg}`);
2760 return '';2893 return '';
2761 }2894 }
27622895
2763 const character = characters[chid];
2764 const group = groups.find(x => x.id === selected_group);2896 const group = groups.find(x => x.id === selected_group);
27652897
2766 if (!group || !Array.isArray(group.members)) {2898 if (!group || !Array.isArray(group.members)) {
@@ -2829,7 +2961,7 @@ function findPersonaByName(name) {
2829 }2961 }
28302962
2831 for (const persona of Object.entries(power_user.personas)) {2963 for (const persona of Object.entries(power_user.personas)) {
2832 if (persona[1].toLowerCase() === name.toLowerCase()) {2964 if (equalsIgnoreCaseAndAccents(persona[1], name)) {
2833 return persona[0];2965 return persona[0];
2834 }2966 }
2835 }2967 }
@@ -2838,7 +2970,7 @@ function findPersonaByName(name) {
28382970
2839async function sendUserMessageCallback(args, text) {2971async function sendUserMessageCallback(args, text) {
2840 if (!text) {2972 if (!text) {
2841 console.warn('WARN: No text provided for /send command');2973 toastr.warning('You must specify text to send');
2842 return;2974 return;
2843 }2975 }
28442976
@@ -2854,16 +2986,17 @@ async function sendUserMessageCallback(args, text) {
2854 insertAt = chat.length + insertAt;2986 insertAt = chat.length + insertAt;
2855 }2987 }
28562988
2989 let message;
2857 if ('name' in args) {2990 if ('name' in args) {
2858 const name = args.name || '';2991 const name = args.name || '';
2859 const avatar = findPersonaByName(name) || user_avatar;2992 const avatar = findPersonaByName(name) || user_avatar;
2860 await sendMessageAsUser(text, bias, insertAt, compact, name, avatar);2993 message = await sendMessageAsUser(text, bias, insertAt, compact, name, avatar);
2861 }2994 }
2862 else {2995 else {
2863 await sendMessageAsUser(text, bias, insertAt, compact);2996 message = await sendMessageAsUser(text, bias, insertAt, compact);
2864 }2997 }
28652998
2866 return '';2999 return await slashCommandReturnHelper.doReturn(args.return ?? 'none', message, { objectToStringFunc: x => x.mes });
2867}3000}
28683001
2869async function deleteMessagesByNameCallback(_, name) {3002async function deleteMessagesByNameCallback(_, name) {
@@ -2872,7 +3005,9 @@ async function deleteMessagesByNameCallback(_, name) {
2872 return;3005 return;
2873 }3006 }
28743007
2875 name = name.trim();3008 // Search for a matching character to get the real name, or take the name provided
3009 const character = findChar({ name: name });
3010 name = character?.name || name;
28763011
2877 const messagesToDelete = [];3012 const messagesToDelete = [];
2878 chat.forEach((value) => {3013 chat.forEach((value) => {
@@ -2901,60 +3036,34 @@ async function deleteMessagesByNameCallback(_, name) {
2901 return '';3036 return '';
2902}3037}
29033038
2904function findCharacterIndex(name) {
2905 const matchTypes = [
2906 (a, b) => a === b,
2907 (a, b) => a.startsWith(b),
2908 (a, b) => a.includes(b),
2909 ];
2910
2911 const exactAvatarMatch = characters.findIndex(x => x.avatar === name);
2912
2913 if (exactAvatarMatch !== -1) {
2914 return exactAvatarMatch;
2915 }
2916
2917 for (const matchType of matchTypes) {
2918 const index = characters.findIndex(x => matchType(x.name.toLowerCase(), name.toLowerCase()));
2919 if (index !== -1) {
2920 return index;
2921 }
2922 }
2923
2924 return -1;
2925}
2926
2927async function goToCharacterCallback(_, name) {3039async function goToCharacterCallback(_, name) {
2928 if (!name) {3040 if (!name) {
2929 console.warn('WARN: No character name provided for /go command');3041 console.warn('WARN: No character name provided for /go command');
2930 return;3042 return;
2931 }3043 }
29323044
2933 name = name.trim();3045 const character = findChar({ name: name });
2934 const characterIndex = findCharacterIndex(name);3046 if (character) {
29353047 const chid = getCharIndex(character);
2936 if (characterIndex !== -1) {3048 await openChat(new String(chid));
2937 await openChat(new String(characterIndex));3049 setActiveCharacter(character.avatar);
2938 setActiveCharacter(characters[characterIndex]?.avatar);
2939 setActiveGroup(null);3050 setActiveGroup(null);
2940 return characters[characterIndex]?.name;3051 return character.name;
2941 } else {3052 }
2942 const group = groups.find(it => it.name.toLowerCase() == name.toLowerCase());3053 const group = groups.find(it => equalsIgnoreCaseAndAccents(it.name, name));
2943 if (group) {3054 if (group) {
2944 await openGroupById(group.id);3055 await openGroupById(group.id);
2945 setActiveCharacter(null);3056 setActiveCharacter(null);
2946 setActiveGroup(group.id);3057 setActiveGroup(group.id);
2947 return group.name;3058 return group.name;
2948 } else {3059 }
2949 console.warn(`No matches found for name "${name}"`);3060 console.warn(`No matches found for name "${name}"`);
2950 return '';3061 return '';
2951}3062}
2952 }
2953}
29543063
2955async function openChat(id) {3064async function openChat(chid) {
2956 resetSelectedGroup();3065 resetSelectedGroup();
2957 setCharacterId(id);3066 setCharacterId(chid);
2958 await delay(1);3067 await delay(1);
2959 await reloadCurrentChat();3068 await reloadCurrentChat();
2960}3069}
@@ -2981,7 +3090,7 @@ async function continueChatCallback(args, prompt) {
2981 resolve();3090 resolve();
2982 } catch (error) {3091 } catch (error) {
2983 console.error('Error running /continue command:', error);3092 console.error('Error running /continue command:', error);
2984 reject();3093 reject(error);
2985 }3094 }
2986 });3095 });
29873096
@@ -3100,32 +3209,95 @@ async function setNarratorName(_, text) {
3100 return '';3209 return '';
3101}3210}
31023211
3212/**
3213 * Checks if an argument is a string array (or undefined), and if not, throws an error
3214 * @param {string|SlashCommandClosure|(string|SlashCommandClosure)[]|undefined} arg The named argument to check
3215 * @param {string} name The name of the argument for the error message
3216 * @param {object} [options={}] - The optional arguments
3217 * @param {boolean} [options.allowUndefined=false] - Whether the argument can be undefined
3218 * @throws {Error} If the argument is not an array
3219 * @returns {string[]}
3220 */
3221export function validateArrayArgString(arg, name, { allowUndefined = true } = {}) {
3222 if (arg === undefined) {
3223 if (allowUndefined) return undefined;
3224 throw new Error(`Argument "${name}" is undefined, but must be a string array`);
3225 }
3226 if (!Array.isArray(arg)) throw new Error(`Argument "${name}" must be an array`);
3227 if (!arg.every(x => typeof x === 'string')) throw new Error(`Argument "${name}" must be an array of strings`);
3228 return arg;
3229}
3230
3231/**
3232 * Checks if an argument is a string or closure array (or undefined), and if not, throws an error
3233 * @param {string|SlashCommandClosure|(string|SlashCommandClosure)[]|undefined} arg The named argument to check
3234 * @param {string} name The name of the argument for the error message
3235 * @param {object} [options={}] - The optional arguments
3236 * @param {boolean} [options.allowUndefined=false] - Whether the argument can be undefined
3237 * @throws {Error} If the argument is not an array of strings or closures
3238 * @returns {(string|SlashCommandClosure)[]}
3239 */
3240export function validateArrayArg(arg, name, { allowUndefined = true } = {}) {
3241 if (arg === undefined) {
3242 if (allowUndefined) return [];
3243 throw new Error(`Argument "${name}" is undefined, but must be an array of strings or closures`);
3244 }
3245 if (!Array.isArray(arg)) throw new Error(`Argument "${name}" must be an array`);
3246 if (!arg.every(x => typeof x === 'string' || x instanceof SlashCommandClosure)) throw new Error(`Argument "${name}" must be an array of strings or closures`);
3247 return arg;
3248}
3249
3250
3251/**
3252 * Retrieves the name and avatar information for a message
3253 *
3254 * The name of the character will always have precendence over the one given as argument. If you want to specify a different name for the message,
3255 * explicitly implement this in the code using this.
3256 *
3257 * @param {object?} character - The character object to get the avatar data for
3258 * @param {string?} name - The name to get the avatar data for
3259 * @returns {{name: string, force_avatar: string, original_avatar: string}} An object containing the name for the message, forced avatar URL, and original avatar
3260 */
3261export function getNameAndAvatarForMessage(character, name = null) {
3262 const isNeutralCharacter = !character && name2 === neutralCharacterName && name === neutralCharacterName;
3263 const currentChar = characters[this_chid];
3264
3265 let force_avatar, original_avatar;
3266 if (character?.avatar === currentChar?.avatar || isNeutralCharacter) {
3267 // If the targeted character is the currently selected one in a solo chat, we don't need to force any avatars
3268 }
3269 else if (character && character.avatar !== 'none') {
3270 force_avatar = getThumbnailUrl('avatar', character.avatar);
3271 original_avatar = character.avatar;
3272 }
3273 else {
3274 force_avatar = default_avatar;
3275 original_avatar = default_avatar;
3276 }
3277
3278 return {
3279 name: character?.name || name,
3280 force_avatar: force_avatar,
3281 original_avatar: original_avatar,
3282 };
3283}
3284
3103export async function sendMessageAs(args, text) {3285export async function sendMessageAs(args, text) {
3104 if (!text) {3286 if (!text) {
3287 toastr.warning('You must specify text to send as');
3105 return '';3288 return '';
3106 }3289 }
31073290
3108 let name;3291 let name = args.name?.trim();
3109 let mesText;3292 let mesText;
31103293
3111 if (args.name) {3294 if (!name) {
3112 name = args.name.trim();
3113
3114 if (!name && !text) {
3115 toastr.warning('You must specify a name and text to send as');
3116 return '';
3117 }
3118 } else {
3119 const namelessWarningKey = 'sendAsNamelessWarningShown';3295 const namelessWarningKey = 'sendAsNamelessWarningShown';
3120 if (localStorage.getItem(namelessWarningKey) !== 'true') {3296 if (localStorage.getItem(namelessWarningKey) !== 'true') {
3121 toastr.warning('To avoid confusion, please use /sendas name="Character Name"', 'Name defaulted to {{char}}', { timeOut: 10000 });3297 toastr.warning('To avoid confusion, please use /sendas name="Character Name"', 'Name defaulted to {{char}}', { timeOut: 10000 });
3122 localStorage.setItem(namelessWarningKey, 'true');3298 localStorage.setItem(namelessWarningKey, 'true');
3123 }3299 }
3124 name = name2;3300 name = name2;
3125 if (!text) {
3126 toastr.warning('You must specify text to send as');
3127 return '';
3128 }
3129 }3301 }
31303302
3131 mesText = text.trim();3303 mesText = text.trim();
@@ -3138,26 +3310,18 @@ export async function sendMessageAs(args, text) {
3138 const isSystem = bias && !removeMacros(mesText).length;3310 const isSystem = bias && !removeMacros(mesText).length;
3139 const compact = isTrueBoolean(args?.compact);3311 const compact = isTrueBoolean(args?.compact);
31403312
3141 const character = characters.find(x => x.avatar === name) ?? characters.find(x => x.name === name);3313 const character = findChar({ name: name });
3142 let force_avatar, original_avatar;
3143
3144 const chatCharacter = this_chid !== undefined ? characters[this_chid] : null;
3145 const isNeutralCharacter = !chatCharacter && name2 === neutralCharacterName && name === neutralCharacterName;
31463314
3147 if (chatCharacter === character || isNeutralCharacter) {3315 const avatarCharacter = args.avatar ? findChar({ name: args.avatar }) : character;
3148 // If the targeted character is the currently selected one in a solo chat, we don't need to force any avatars3316 if (args.avatar && !avatarCharacter) {
3149 }3317 toastr.warning(`Character for avatar ${args.avatar} not found`);
3150 else if (character && character.avatar !== 'none') {3318 return '';
3151 force_avatar = getThumbnailUrl('avatar', character.avatar);
3152 original_avatar = character.avatar;
3153 }
3154 else {
3155 force_avatar = default_avatar;
3156 original_avatar = default_avatar;
3157 }3319 }
31583320
3321 const { name: avatarCharName, force_avatar, original_avatar } = getNameAndAvatarForMessage(avatarCharacter, name);
3322
3159 const message = {3323 const message = {
3160 name: name,3324 name: character?.name || name || avatarCharName,
3161 is_user: false,3325 is_user: false,
3162 is_system: isSystem,3326 is_system: isSystem,
3163 send_date: getMessageTimeStamp(),3327 send_date: getMessageTimeStamp(),
@@ -3210,11 +3374,12 @@ export async function sendMessageAs(args, text) {
3210 await saveChatConditional();3374 await saveChatConditional();
3211 }3375 }
32123376
3213 return '';3377 return await slashCommandReturnHelper.doReturn(args.return ?? 'none', message, { objectToStringFunc: x => x.mes });
3214}3378}
32153379
3216export async function sendNarratorMessage(args, text) {3380export async function sendNarratorMessage(args, text) {
3217 if (!text) {3381 if (!text) {
3382 toastr.warning('You must specify text to send');
3218 return '';3383 return '';
3219 }3384 }
32203385
@@ -3263,7 +3428,7 @@ export async function sendNarratorMessage(args, text) {
3263 await saveChatConditional();3428 await saveChatConditional();
3264 }3429 }
32653430
3266 return '';3431 return await slashCommandReturnHelper.doReturn(args.return ?? 'none', message, { objectToStringFunc: x => x.mes });
3267}3432}
32683433
3269export async function promptQuietForLoudResponse(who, text) {3434export async function promptQuietForLoudResponse(who, text) {
@@ -3309,6 +3474,7 @@ export async function promptQuietForLoudResponse(who, text) {
33093474
3310async function sendCommentMessage(args, text) {3475async function sendCommentMessage(args, text) {
3311 if (!text) {3476 if (!text) {
3477 toastr.warning('You must specify text to send');
3312 return '';3478 return '';
3313 }3479 }
33143480
@@ -3351,7 +3517,7 @@ async function sendCommentMessage(args, text) {
3351 await saveChatConditional();3517 await saveChatConditional();
3352 }3518 }
33533519
3354 return '';3520 return await slashCommandReturnHelper.doReturn(args.return ?? 'none', message, { objectToStringFunc: x => x.mes });
3355}3521}
33563522
3357/**3523/**
@@ -3431,11 +3597,12 @@ function setBackgroundCallback(_, bg) {
3431 * Retrieves the available model options based on the currently selected main API and its subtype3597 * Retrieves the available model options based on the currently selected main API and its subtype
3432 * @param {boolean} quiet - Whether to suppress toasts3598 * @param {boolean} quiet - Whether to suppress toasts
3433 *3599 *
3434 * @returns {{control: HTMLSelectElement, options: HTMLOptionElement[]}?} An array of objects representing the available model options, or null if not supported3600 * @returns {{control: HTMLSelectElement|HTMLInputElement, options: HTMLOptionElement[]}?} An array of objects representing the available model options, or null if not supported
3435 */3601 */
3436function getModelOptions(quiet) {3602function getModelOptions(quiet) {
3437 const nullResult = { control: null, options: null };3603 const nullResult = { control: null, options: null };
3438 const modelSelectMap = [3604 const modelSelectMap = [
3605 { id: 'custom_model_textgenerationwebui', api: 'textgenerationwebui', type: textgen_types.OOBA },
3439 { id: 'model_togetherai_select', api: 'textgenerationwebui', type: textgen_types.TOGETHERAI },3606 { id: 'model_togetherai_select', api: 'textgenerationwebui', type: textgen_types.TOGETHERAI },
3440 { id: 'openrouter_model', api: 'textgenerationwebui', type: textgen_types.OPENROUTER },3607 { id: 'openrouter_model', api: 'textgenerationwebui', type: textgen_types.OPENROUTER },
3441 { id: 'model_infermaticai_select', api: 'textgenerationwebui', type: textgen_types.INFERMATICAI },3608 { id: 'model_infermaticai_select', api: 'textgenerationwebui', type: textgen_types.INFERMATICAI },
@@ -3445,6 +3612,7 @@ function getModelOptions(quiet) {
3445 { id: 'aphrodite_model', api: 'textgenerationwebui', type: textgen_types.APHRODITE },3612 { id: 'aphrodite_model', api: 'textgenerationwebui', type: textgen_types.APHRODITE },
3446 { id: 'ollama_model', api: 'textgenerationwebui', type: textgen_types.OLLAMA },3613 { id: 'ollama_model', api: 'textgenerationwebui', type: textgen_types.OLLAMA },
3447 { id: 'tabby_model', api: 'textgenerationwebui', type: textgen_types.TABBY },3614 { id: 'tabby_model', api: 'textgenerationwebui', type: textgen_types.TABBY },
3615 { id: 'featherless_model', api: 'textgenerationwebui', type: textgen_types.FEATHERLESS },
3448 { id: 'model_openai_select', api: 'openai', type: chat_completion_sources.OPENAI },3616 { id: 'model_openai_select', api: 'openai', type: chat_completion_sources.OPENAI },
3449 { id: 'model_claude_select', api: 'openai', type: chat_completion_sources.CLAUDE },3617 { id: 'model_claude_select', api: 'openai', type: chat_completion_sources.CLAUDE },
3450 { id: 'model_windowai_select', api: 'openai', type: chat_completion_sources.WINDOWAI },3618 { id: 'model_windowai_select', api: 'openai', type: chat_completion_sources.WINDOWAI },
@@ -3452,7 +3620,7 @@ function getModelOptions(quiet) {
3452 { id: 'model_ai21_select', api: 'openai', type: chat_completion_sources.AI21 },3620 { id: 'model_ai21_select', api: 'openai', type: chat_completion_sources.AI21 },
3453 { id: 'model_google_select', api: 'openai', type: chat_completion_sources.MAKERSUITE },3621 { id: 'model_google_select', api: 'openai', type: chat_completion_sources.MAKERSUITE },
3454 { id: 'model_mistralai_select', api: 'openai', type: chat_completion_sources.MISTRALAI },3622 { id: 'model_mistralai_select', api: 'openai', type: chat_completion_sources.MISTRALAI },
3455 { id: 'model_custom_select', api: 'openai', type: chat_completion_sources.CUSTOM },3623 { id: 'custom_model_id', api: 'openai', type: chat_completion_sources.CUSTOM },
3456 { id: 'model_cohere_select', api: 'openai', type: chat_completion_sources.COHERE },3624 { id: 'model_cohere_select', api: 'openai', type: chat_completion_sources.COHERE },
3457 { id: 'model_perplexity_select', api: 'openai', type: chat_completion_sources.PERPLEXITY },3625 { id: 'model_perplexity_select', api: 'openai', type: chat_completion_sources.PERPLEXITY },
3458 { id: 'model_groq_select', api: 'openai', type: chat_completion_sources.GROQ },3626 { id: 'model_groq_select', api: 'openai', type: chat_completion_sources.GROQ },
@@ -3469,7 +3637,7 @@ function getModelOptions(quiet) {
3469 case 'openai':3637 case 'openai':
3470 return oai_settings.chat_completion_source;3638 return oai_settings.chat_completion_source;
3471 default:3639 default:
3472 return nullResult;3640 return null;
3473 }3641 }
3474 }3642 }
34753643
@@ -3483,12 +3651,31 @@ function getModelOptions(quiet) {
34833651
3484 const modelSelectControl = document.getElementById(modelSelectItem);3652 const modelSelectControl = document.getElementById(modelSelectItem);
34853653
3486 if (!(modelSelectControl instanceof HTMLSelectElement)) {3654 if (!(modelSelectControl instanceof HTMLSelectElement) && !(modelSelectControl instanceof HTMLInputElement)) {
3487 !quiet && toastr.error(`Model select control not found: ${main_api}[${apiSubType}]`);3655 !quiet && toastr.error(`Model select control not found: ${main_api}[${apiSubType}]`);
3488 return nullResult;3656 return nullResult;
3489 }3657 }
34903658
3491 const options = Array.from(modelSelectControl.options).filter(x => x.value);3659 /**
3660 * Get options from a HTMLSelectElement or HTMLInputElement with a list.
3661 * @param {HTMLSelectElement | HTMLInputElement} control Control containing the options
3662 * @returns {HTMLOptionElement[]} Array of options
3663 */
3664 const getOptions = (control) => {
3665 if (control instanceof HTMLSelectElement) {
3666 return Array.from(control.options);
3667 }
3668
3669 const valueOption = new Option(control.value, control.value);
3670
3671 if (control instanceof HTMLInputElement && control.list instanceof HTMLDataListElement) {
3672 return [valueOption, ...Array.from(control.list.options)];
3673 }
3674
3675 return [valueOption];
3676 };
3677
3678 const options = getOptions(modelSelectControl).filter(x => x.value).filter(onlyUnique);
3492 return { control: modelSelectControl, options };3679 return { control: modelSelectControl, options };
3493}3680}
34943681
@@ -3507,11 +3694,6 @@ function modelCallback(args, model) {
3507 return '';3694 return '';
3508 }3695 }
35093696
3510 if (!options.length) {
3511 !quiet && toastr.warning('No model options found. Check your API settings.');
3512 return '';
3513 }
3514
3515 model = String(model || '').trim();3697 model = String(model || '').trim();
35163698
3517 if (!model) {3699 if (!model) {
@@ -3520,6 +3702,18 @@ function modelCallback(args, model) {
35203702
3521 console.log('Set model to ' + model);3703 console.log('Set model to ' + model);
35223704
3705 if (modelSelectControl instanceof HTMLInputElement) {
3706 modelSelectControl.value = model;
3707 $(modelSelectControl).trigger('input');
3708 !quiet && toastr.success(`Model set to "${model}"`);
3709 return model;
3710 }
3711
3712 if (!options.length) {
3713 !quiet && toastr.warning('No model options found. Check your API settings.');
3714 return '';
3715 }
3716
3523 let newSelectedOption = null;3717 let newSelectedOption = null;
35243718
3525 const fuse = new Fuse(options, { keys: ['text', 'value'] });3719 const fuse = new Fuse(options, { keys: ['text', 'value'] });
@@ -3561,11 +3755,17 @@ function setPromptEntryCallback(args, targetState) {
3561 const prompts = promptManager.serviceSettings.prompts;3755 const prompts = promptManager.serviceSettings.prompts;
35623756
3563 function parseArgs(arg) {3757 function parseArgs(arg) {
3758 // Arg is already an array
3759 if (Array.isArray(arg)) {
3760 return arg;
3761 }
3564 const list = [];3762 const list = [];
3565 try {3763 try {
3764 // Arg is a JSON-stringified array
3566 const parsedArg = JSON.parse(arg);3765 const parsedArg = JSON.parse(arg);
3567 list.push(...Array.isArray(parsedArg) ? parsedArg : [arg]);3766 list.push(...Array.isArray(parsedArg) ? parsedArg : [arg]);
3568 } catch {3767 } catch {
3768 // Arg is a string
3569 list.push(arg);3769 list.push(arg);
3570 }3770 }
3571 return list;3771 return list;
public/scripts/slash-commands/SlashCommand.js+2 -2
@@ -15,13 +15,13 @@ import { SlashCommandScope } from './SlashCommandScope.js';
15 * _abortController:SlashCommandAbortController,15 * _abortController:SlashCommandAbortController,
16 * _debugController:SlashCommandDebugController,16 * _debugController:SlashCommandDebugController,
17 * _hasUnnamedArgument:boolean,17 * _hasUnnamedArgument:boolean,
18 * [id:string]:string|SlashCommandClosure,18 * [id:string]:string|SlashCommandClosure|(string|SlashCommandClosure)[]|undefined,
19 * }} NamedArguments19 * }} NamedArguments
20 */20 */
2121
22/**22/**
23 * Alternative object for local JSDocs, where you don't need existing pipe, scope, etc. arguments23 * Alternative object for local JSDocs, where you don't need existing pipe, scope, etc. arguments
24 * @typedef {{[id:string]:string|SlashCommandClosure}} NamedArgumentsCapture24 * @typedef {{[id:string]:string|SlashCommandClosure|(string|SlashCommandClosure)[]|undefined}} NamedArgumentsCapture
25 */25 */
2626
27/**27/**
public/scripts/slash-commands/SlashCommandClosure.js+60 -11
@@ -2,6 +2,7 @@ import { substituteParams } from '../../script.js';
2import { delay, escapeRegex, uuidv4 } from '../utils.js';2import { delay, escapeRegex, uuidv4 } from '../utils.js';
3import { SlashCommand } from './SlashCommand.js';3import { SlashCommand } from './SlashCommand.js';
4import { SlashCommandAbortController } from './SlashCommandAbortController.js';4import { SlashCommandAbortController } from './SlashCommandAbortController.js';
5import { SlashCommandNamedArgument } from './SlashCommandArgument.js';
5import { SlashCommandBreak } from './SlashCommandBreak.js';6import { SlashCommandBreak } from './SlashCommandBreak.js';
6import { SlashCommandBreakController } from './SlashCommandBreakController.js';7import { SlashCommandBreakController } from './SlashCommandBreakController.js';
7import { SlashCommandBreakPoint } from './SlashCommandBreakPoint.js';8import { SlashCommandBreakPoint } from './SlashCommandBreakPoint.js';
@@ -53,7 +54,7 @@ export class SlashCommandClosure {
53 *54 *
54 * @param {string} text55 * @param {string} text
55 * @param {SlashCommandScope} scope56 * @param {SlashCommandScope} scope
56 * @returns57 * @returns {string|SlashCommandClosure|(string|SlashCommandClosure)[]}
57 */58 */
58 substituteParams(text, scope = null) {59 substituteParams(text, scope = null) {
59 let isList = false;60 let isList = false;
@@ -379,6 +380,52 @@ export class SlashCommandClosure {
379 * @param {import('./SlashCommand.js').NamedArguments} args380 * @param {import('./SlashCommand.js').NamedArguments} args
380 */381 */
381 async substituteNamedArguments(executor, args) {382 async substituteNamedArguments(executor, args) {
383 /**
384 * Handles the assignment of named arguments, considering if they accept multiple values
385 * @param {string} name The name of the argument, as defined for the command execution
386 * @param {string|SlashCommandClosure|(string|SlashCommandClosure)[]} value The value to be assigned
387 */
388 const assign = (name, value) => {
389 // If an array is supposed to be assigned, assign it one by one
390 if (Array.isArray(value)) {
391 for (const val of value) {
392 assign(name, val);
393 }
394 return;
395 }
396
397 const definition = executor.command.namedArgumentList.find(x => x.name == name);
398
399 // Prefer definition name if a valid named args defintion is found
400 name = definition?.name ?? name;
401
402 // Unescape named argument
403 if (value && typeof value == 'string') {
404 value = value
405 .replace(/\\\{/g, '{')
406 .replace(/\\\}/g, '}');
407 }
408
409 // If the named argument accepts multiple values, we have to make sure to build an array correctly
410 if (definition?.acceptsMultiple) {
411 if (args[name] !== undefined) {
412 // If there already is something for that named arg, make the value is an array and add to it
413 let currentValue = args[name];
414 if (!Array.isArray(currentValue)) {
415 currentValue = [currentValue];
416 }
417 currentValue.push(value);
418 args[name] = currentValue;
419 } else {
420 // If there is nothing in there, we create an array with that singular value
421 args[name] = [value];
422 }
423 } else {
424 args[name] !== undefined && console.debug(`Named argument assigned multiple times: ${name}`);
425 args[name] = value;
426 }
427 };
428
382 // substitute named arguments429 // substitute named arguments
383 for (const arg of executor.namedArgumentList) {430 for (const arg of executor.namedArgumentList) {
384 if (arg.value instanceof SlashCommandClosure) {431 if (arg.value instanceof SlashCommandClosure) {
@@ -390,19 +437,12 @@ export class SlashCommandClosure {
390 closure.debugController = this.debugController;437 closure.debugController = this.debugController;
391 }438 }
392 if (closure.executeNow) {439 if (closure.executeNow) {
393 args[arg.name] = (await closure.execute())?.pipe;440 assign(arg.name, (await closure.execute())?.pipe);
394 } else {441 } else {
395 args[arg.name] = closure;442 assign(arg.name, closure);
396 }443 }
397 } else {444 } else {
398 args[arg.name] = this.substituteParams(arg.value);445 assign(arg.name, this.substituteParams(arg.value));
399 }
400 // unescape named argument
401 if (typeof args[arg.name] == 'string') {
402 args[arg.name] = args[arg.name]
403 ?.replace(/\\\{/g, '{')
404 ?.replace(/\\\}/g, '}')
405 ;
406 }446 }
407 }447 }
408 }448 }
@@ -424,6 +464,7 @@ export class SlashCommandClosure {
424 } else {464 } else {
425 value = [];465 value = [];
426 for (let i = 0; i < executor.unnamedArgumentList.length; i++) {466 for (let i = 0; i < executor.unnamedArgumentList.length; i++) {
467 /** @type {string|SlashCommandClosure|(string|SlashCommandClosure)[]} */
427 let v = executor.unnamedArgumentList[i].value;468 let v = executor.unnamedArgumentList[i].value;
428 if (v instanceof SlashCommandClosure) {469 if (v instanceof SlashCommandClosure) {
429 /**@type {SlashCommandClosure}*/470 /**@type {SlashCommandClosure}*/
@@ -467,6 +508,14 @@ export class SlashCommandClosure {
467 return v;508 return v;
468 });509 });
469 }510 }
511
512 value ??= '';
513
514 // Make sure that if unnamed args are split, it should always return an array
515 if (executor.command.splitUnnamedArgument && !Array.isArray(value)) {
516 value = [value];
517 }
518
470 return value;519 return value;
471 }520 }
472521
public/scripts/slash-commands/SlashCommandCommonEnumsProvider.js+44 -2
@@ -2,7 +2,7 @@ import { chat_metadata, characters, substituteParams, chat, extension_prompt_rol
2import { extension_settings } from '../extensions.js';2import { extension_settings } from '../extensions.js';
3import { getGroupMembers, groups } from '../group-chats.js';3import { getGroupMembers, groups } from '../group-chats.js';
4import { power_user } from '../power-user.js';4import { power_user } from '../power-user.js';
5import { searchCharByName, getTagsList, tags } from '../tags.js';5import { searchCharByName, getTagsList, tags, tag_map } from '../tags.js';
6import { world_names } from '../world-info.js';6import { world_names } from '../world-info.js';
7import { SlashCommandClosure } from './SlashCommandClosure.js';7import { SlashCommandClosure } from './SlashCommandClosure.js';
8import { SlashCommandEnumValue, enumTypes } from './SlashCommandEnumValue.js';8import { SlashCommandEnumValue, enumTypes } from './SlashCommandEnumValue.js';
@@ -36,6 +36,7 @@ export const enumIcons = {
36 message: '💬',36 message: '💬',
37 voice: '🎤',37 voice: '🎤',
38 server: '🖥️',38 server: '🖥️',
39 popup: '🗔',
3940
40 true: '✔️',41 true: '✔️',
41 false: '❌',42 false: '❌',
@@ -153,6 +154,35 @@ export const commonEnumProviders = {
153 },154 },
154155
155 /**156 /**
157 * Enum values for numbers and variable names
158 *
159 * Includes all variable names and the ability to specify any number
160 *
161 * @param {SlashCommandExecutor} executor - The executor of the slash command
162 * @param {SlashCommandScope} scope - The scope of the slash command
163 * @returns {SlashCommandEnumValue[]} The enum values
164 */
165 numbersAndVariables: (executor, scope) => [
166 ...commonEnumProviders.variables('all')(executor, scope),
167 new SlashCommandEnumValue(
168 'any variable name',
169 null,
170 enumTypes.variable,
171 enumIcons.variable,
172 (input) => /^\w*$/.test(input),
173 (input) => input,
174 ),
175 new SlashCommandEnumValue(
176 'any number',
177 null,
178 enumTypes.number,
179 enumIcons.number,
180 (input) => input == '' || !Number.isNaN(Number(input)),
181 (input) => input,
182 ),
183 ],
184
185 /**
156 * All possible char entities, like characters and groups. Can be filtered down to just one type.186 * All possible char entities, like characters and groups. Can be filtered down to just one type.
157 *187 *
158 * @param {('all' | 'character' | 'group')?} [mode='all'] - Which type to return188 * @param {('all' | 'character' | 'group')?} [mode='all'] - Which type to return
@@ -182,6 +212,18 @@ export const commonEnumProviders = {
182 personas: () => Object.values(power_user.personas).map(persona => new SlashCommandEnumValue(persona, null, enumTypes.name, enumIcons.persona)),212 personas: () => Object.values(power_user.personas).map(persona => new SlashCommandEnumValue(persona, null, enumTypes.name, enumIcons.persona)),
183213
184 /**214 /**
215 * All possible tags, or only those that have been assigned
216 *
217 * @param {('all' | 'assigned')} [mode='all'] - Which types of tags to show
218 * @returns {() => SlashCommandEnumValue[]}
219 */
220 tags: (mode = 'all') => () => {
221 let assignedTags = mode === 'assigned' ? new Set(Object.values(tag_map).flat()) : new Set();
222 return tags.filter(tag => mode === 'all' || (mode === 'assigned' && assignedTags.has(tag.id)))
223 .map(tag => new SlashCommandEnumValue(tag.name, null, enumTypes.command, enumIcons.tag));
224 },
225
226 /**
185 * All possible tags for a given char/group entity227 * All possible tags for a given char/group entity
186 *228 *
187 * @param {('all' | 'existing' | 'not-existing')?} [mode='all'] - Which types of tags to show229 * @param {('all' | 'existing' | 'not-existing')?} [mode='all'] - Which types of tags to show
@@ -193,7 +235,7 @@ export const commonEnumProviders = {
193 if (charName instanceof SlashCommandClosure) throw new Error('Argument \'name\' does not support closures');235 if (charName instanceof SlashCommandClosure) throw new Error('Argument \'name\' does not support closures');
194 const key = searchCharByName(substituteParams(charName), { suppressLogging: true });236 const key = searchCharByName(substituteParams(charName), { suppressLogging: true });
195 const assigned = key ? getTagsList(key) : [];237 const assigned = key ? getTagsList(key) : [];
196 return tags.filter(it => !key || mode === 'all' || mode === 'existing' && assigned.includes(it) || mode === 'not-existing' && !assigned.includes(it))238 return tags.filter(it => mode === 'all' || mode === 'existing' && assigned.includes(it) || mode === 'not-existing' && !assigned.includes(it))
197 .map(tag => new SlashCommandEnumValue(tag.name, null, enumTypes.command, enumIcons.tag));239 .map(tag => new SlashCommandEnumValue(tag.name, null, enumTypes.command, enumIcons.tag));
198 },240 },
199241
public/scripts/slash-commands/SlashCommandReturnHelper.js+80 -0
@@ -0,0 +1,80 @@
1import { sendSystemMessage, system_message_types } from '../../script.js';
2import { callGenericPopup, POPUP_TYPE } from '../popup.js';
3import { escapeHtml } from '../utils.js';
4import { enumIcons } from './SlashCommandCommonEnumsProvider.js';
5import { enumTypes, SlashCommandEnumValue } from './SlashCommandEnumValue.js';
6
7/** @typedef {'pipe'|'object'|'chat-html'|'chat-text'|'popup-html'|'popup-text'|'toast-html'|'toast-text'|'console'|'none'} SlashCommandReturnType */
8
9export const slashCommandReturnHelper = {
10 // Without this, VSCode formatter fucks up JS docs. Don't ask me why.
11 _: false,
12
13 /**
14 * Gets/creates the enum list of types of return relevant for a slash command
15 *
16 * @param {object} [options={}] Options
17 * @param {boolean} [options.allowPipe=true] Allow option to pipe the return value
18 * @param {boolean} [options.allowObject=false] Allow option to return the value as an object
19 * @param {boolean} [options.allowChat=false] Allow option to return the value as a chat message
20 * @param {boolean} [options.allowPopup=false] Allow option to return the value as a popup
21 * @param {boolean}[options.allowTextVersion=true] Used in combination with chat/popup/toast, some of them do not make sense for text versions, e.g.if you are building a HTML string anyway
22 * @returns {SlashCommandEnumValue[]} The enum list
23 */
24 enumList: ({ allowPipe = true, allowObject = false, allowChat = false, allowPopup = false, allowTextVersion = true } = {}) => [
25 allowPipe && new SlashCommandEnumValue('pipe', 'Return to the pipe for the next command', enumTypes.name, '|'),
26 allowObject && new SlashCommandEnumValue('object', 'Return as an object (or array) to the pipe for the next command', enumTypes.variable, enumIcons.dictionary),
27 allowChat && new SlashCommandEnumValue('chat-html', 'Sending a chat message with the return value - Can display HTML', enumTypes.command, enumIcons.message),
28 allowChat && allowTextVersion && new SlashCommandEnumValue('chat-text', 'Sending a chat message with the return value - Will only display as text', enumTypes.qr, enumIcons.message),
29 allowPopup && new SlashCommandEnumValue('popup-html', 'Showing as a popup with the return value - Can display HTML', enumTypes.command, enumIcons.popup),
30 allowPopup && allowTextVersion && new SlashCommandEnumValue('popup-text', 'Showing as a popup with the return value - Will only display as text', enumTypes.qr, enumIcons.popup),
31 new SlashCommandEnumValue('toast-html', 'Show the return value as a toast notification - Can display HTML', enumTypes.command, 'ℹ️'),
32 allowTextVersion && new SlashCommandEnumValue('toast-text', 'Show the return value as a toast notification - Will only display as text', enumTypes.qr, 'ℹ️'),
33 new SlashCommandEnumValue('console', 'Log the return value (object, if it can be one) to the console', enumTypes.enum, '>'),
34 new SlashCommandEnumValue('none', 'No return value'),
35 ].filter(x => !!x),
36
37 /**
38 * Handles the return value based on the specified type
39 *
40 * @param {SlashCommandReturnType} type The type of return
41 * @param {object|number|string} value The value to return
42 * @param {object} [options={}] Options
43 * @param {(o: object) => string} [options.objectToStringFunc=null] Function to convert the object to a string, if object was provided and 'object' was not the chosen return type
44 * @param {(o: object) => string} [options.objectToHtmlFunc=null] Analog to 'objectToStringFunc', which will be used here if not provided - but can do a different string layout if HTML is requested
45 * @returns {Promise<*>} The processed return value
46 */
47 async doReturn(type, value, { objectToStringFunc = o => o?.toString(), objectToHtmlFunc = null } = {}) {
48 const shouldHtml = type.endsWith('html');
49 const actualConverterFunc = shouldHtml && objectToHtmlFunc ? objectToHtmlFunc : objectToStringFunc;
50 const stringValue = typeof value !== 'string' ? actualConverterFunc(value) : value;
51
52 switch (type) {
53 case 'popup-html':
54 case 'popup-text':
55 case 'chat-text':
56 case 'chat-html':
57 case 'toast-text':
58 case 'toast-html': {
59 const htmlOrNotHtml = shouldHtml ? DOMPurify.sanitize((new showdown.Converter()).makeHtml(stringValue)) : escapeHtml(stringValue);
60
61 if (type.startsWith('popup')) await callGenericPopup(htmlOrNotHtml, POPUP_TYPE.TEXT, '', { allowVerticalScrolling: true, wide: true });
62 if (type.startsWith('chat')) sendSystemMessage(system_message_types.GENERIC, htmlOrNotHtml);
63 if (type.startsWith('toast')) toastr.info(htmlOrNotHtml, null, { escapeHtml: !shouldHtml });
64
65 return '';
66 }
67 case 'pipe':
68 return stringValue ?? '';
69 case 'object':
70 return JSON.stringify(value);
71 case 'console':
72 console.info(value);
73 return '';
74 case 'none':
75 return '';
76 default:
77 throw new Error(`Unknown return type: ${type}`);
78 }
79 },
80};
public/scripts/sse-stream.js+14 -2
@@ -108,9 +108,21 @@ function getDelay(s) {
108 * @returns {AsyncGenerator<{data: object, chunk: string}>} The parsed data and the chunk to be sent.108 * @returns {AsyncGenerator<{data: object, chunk: string}>} The parsed data and the chunk to be sent.
109 */109 */
110async function* parseStreamData(json) {110async function* parseStreamData(json) {
111 // Cohere
112 if (typeof json.delta.message === 'object' && ['tool-plan-delta', 'content-delta'].includes(json.type)) {
113 const text = json?.delta?.message?.content?.text ?? '';
114 for (let i = 0; i < text.length; i++) {
115 const str = json.delta.message.content.text[i];
116 yield {
117 data: { ...json, delta: { message: { content: { text: str } } } },
118 chunk: str,
119 };
120 }
121 return;
122 }
111 // Claude123 // Claude
112 if (typeof json.delta === 'object') {124 if (typeof json.delta === 'object' && typeof json.delta.text === 'string') {
113 if (typeof json.delta.text === 'string' && json.delta.text.length > 0) {125 if (json.delta.text.length > 0) {
114 for (let i = 0; i < json.delta.text.length; i++) {126 for (let i = 0; i < json.delta.text.length; i++) {
115 const str = json.delta.text[i];127 const str = json.delta.text[i];
116 yield {128 yield {
public/scripts/tags.js+8 -8
@@ -15,7 +15,7 @@ import {
15import { FILTER_TYPES, FILTER_STATES, DEFAULT_FILTER_STATE, isFilterState, FilterHelper } from './filters.js';15import { FILTER_TYPES, FILTER_STATES, DEFAULT_FILTER_STATE, isFilterState, FilterHelper } from './filters.js';
1616
17import { groupCandidatesFilter, groups, selected_group } from './group-chats.js';17import { groupCandidatesFilter, groups, selected_group } from './group-chats.js';
18import { download, onlyUnique, parseJsonFile, uuidv4, getSortableDelay, flashHighlight, equalsIgnoreCaseAndAccents, includesIgnoreCaseAndAccents, removeFromArray, getFreeName, debounce } from './utils.js';18import { download, onlyUnique, parseJsonFile, uuidv4, getSortableDelay, flashHighlight, equalsIgnoreCaseAndAccents, includesIgnoreCaseAndAccents, removeFromArray, getFreeName, debounce, findChar } from './utils.js';
19import { power_user } from './power-user.js';19import { power_user } from './power-user.js';
20import { SlashCommandParser } from './slash-commands/SlashCommandParser.js';20import { SlashCommandParser } from './slash-commands/SlashCommandParser.js';
21import { SlashCommand } from './slash-commands/SlashCommand.js';21import { SlashCommand } from './slash-commands/SlashCommand.js';
@@ -50,7 +50,6 @@ export {
50 removeTagFromMap,50 removeTagFromMap,
51};51};
5252
53/** @typedef {import('../scripts/popup.js').Popup} Popup */
54/** @typedef {import('../script.js').Character} Character */53/** @typedef {import('../script.js').Character} Character */
5554
56const CHARACTER_FILTER_SELECTOR = '#rm_characters_block .rm_tag_filter';55const CHARACTER_FILTER_SELECTOR = '#rm_characters_block .rm_tag_filter';
@@ -507,7 +506,7 @@ export function getTagKeyForEntityElement(element) {
507 */506 */
508export function searchCharByName(charName, { suppressLogging = false } = {}) {507export function searchCharByName(charName, { suppressLogging = false } = {}) {
509 const entity = charName508 const entity = charName
510 ? (characters.find(x => x.name === charName) || groups.find(x => x.name == charName))509 ? (findChar({ name: charName }) || groups.find(x => equalsIgnoreCaseAndAccents(x.name, charName)))
511 : (selected_group ? groups.find(x => x.id == selected_group) : characters[this_chid]);510 : (selected_group ? groups.find(x => x.id == selected_group) : characters[this_chid]);
512 const key = getTagKeyForEntity(entity);511 const key = getTagKeyForEntity(entity);
513 if (!key) {512 if (!key) {
@@ -1861,8 +1860,9 @@ function registerTagsSlashCommands() {
1861 return String(result);1860 return String(result);
1862 },1861 },
1863 namedArgumentList: [1862 namedArgumentList: [
1864 SlashCommandNamedArgument.fromProps({ name: 'name',1863 SlashCommandNamedArgument.fromProps({
1865 description: 'Character name',1864 name: 'name',
1865 description: 'Character name - or unique character identifier (avatar key)',
1866 typeList: [ARGUMENT_TYPE.STRING],1866 typeList: [ARGUMENT_TYPE.STRING],
1867 defaultValue: '{{char}}',1867 defaultValue: '{{char}}',
1868 enumProvider: commonEnumProviders.characters(),1868 enumProvider: commonEnumProviders.characters(),
@@ -1907,7 +1907,7 @@ function registerTagsSlashCommands() {
1907 },1907 },
1908 namedArgumentList: [1908 namedArgumentList: [
1909 SlashCommandNamedArgument.fromProps({ name: 'name',1909 SlashCommandNamedArgument.fromProps({ name: 'name',
1910 description: 'Character name',1910 description: 'Character name - or unique character identifier (avatar key)',
1911 typeList: [ARGUMENT_TYPE.STRING],1911 typeList: [ARGUMENT_TYPE.STRING],
1912 defaultValue: '{{char}}',1912 defaultValue: '{{char}}',
1913 enumProvider: commonEnumProviders.characters(),1913 enumProvider: commonEnumProviders.characters(),
@@ -1950,7 +1950,7 @@ function registerTagsSlashCommands() {
1950 namedArgumentList: [1950 namedArgumentList: [
1951 SlashCommandNamedArgument.fromProps({1951 SlashCommandNamedArgument.fromProps({
1952 name: 'name',1952 name: 'name',
1953 description: 'Character name',1953 description: 'Character name - or unique character identifier (avatar key)',
1954 typeList: [ARGUMENT_TYPE.STRING],1954 typeList: [ARGUMENT_TYPE.STRING],
1955 defaultValue: '{{char}}',1955 defaultValue: '{{char}}',
1956 enumProvider: commonEnumProviders.characters(),1956 enumProvider: commonEnumProviders.characters(),
@@ -1993,7 +1993,7 @@ function registerTagsSlashCommands() {
1993 namedArgumentList: [1993 namedArgumentList: [
1994 SlashCommandNamedArgument.fromProps({1994 SlashCommandNamedArgument.fromProps({
1995 name: 'name',1995 name: 'name',
1996 description: 'Character name',1996 description: 'Character name - or unique character identifier (avatar key)',
1997 typeList: [ARGUMENT_TYPE.STRING],1997 typeList: [ARGUMENT_TYPE.STRING],
1998 defaultValue: '{{char}}',1998 defaultValue: '{{char}}',
1999 enumProvider: commonEnumProviders.characters(),1999 enumProvider: commonEnumProviders.characters(),
public/scripts/templates/assistantNote.html+1 -1
@@ -1,3 +1,3 @@
1<div>1<div>
2 <b>Note:</b> this chat is temporary and will be deleted as soon as you leave it.2 <b data-i18n="Note:">Note:</b> <span data-i18n="this chat is temporary and will be deleted as soon as you leave it.">this chat is temporary and will be deleted as soon as you leave it.</span>
3</div>3</div>
public/scripts/templates/deleteConfirm.html+5 -0
@@ -0,0 +1,5 @@
1<b><span data-i18n="THIS IS PERMANENT!">THIS IS PERMANENT!</span><br><br>
2<label for="del_char_checkbox" class="checkbox_label justifyCenter">
3 <input type="checkbox" id="del_char_checkbox" />
4 <small data-i18n="Also delete the chat files">Also delete the chat files</small>
5</label></b>
\ No newline at end of file5 \ No newline at end of file
public/scripts/templates/duplicateConfirm.html+2 -2
@@ -1,5 +1,5 @@
1<div>1<div>
2 <h3>Are you sure you want to duplicate this character?</h3>2 <h3 data-i18n="Are you sure you want to duplicate this character?">Are you sure you want to duplicate this character?</h3>
3 <span>If you just want to start a new chat with the same character, use "Start new chat" option in the bottom-left options menu.</span>3 <span data-i18n="If you just want to start a new chat with the same character...">If you just want to start a new chat with the same character, use "Start new chat" option in the bottom-left options menu.</span>
4 <br>4 <br>
5</div>5</div>
public/scripts/templates/hotkeys.html+7 -7
@@ -14,18 +14,18 @@
14 <li><kbd data-i18n="help_hotkeys_19">Ctrl+Shift+Down</kbd> = <span data-i18n="help_hotkeys_20">Scroll chat to bottom</span></li>14 <li><kbd data-i18n="help_hotkeys_19">Ctrl+Shift+Down</kbd> = <span data-i18n="help_hotkeys_20">Scroll chat to bottom</span></li>
15</ul>15</ul>
16<div>16<div>
17 <strong>Markdown Hotkeys</strong>17 <strong data-i18n="help_hotkeys_20">Markdown Hotkeys</strong>
18</div>18</div>
19<div>19<div>
20 <small>20 <small>
21 <span>Works in the chatbar and textareas marked with this icon:</span>21 <span data-i18n="help_hotkeys_21">Works in the chatbar and textareas marked with this icon:</span>
22 <code><i class="fa-brands fa-markdown"></i></code>22 <code><i class="fa-brands fa-markdown"></i></code>
23 </small>23 </small>
24</div>24</div>
25<ul>25<ul>
26 <li><kbd>Ctrl+B</kbd> = <span>**bold**</span></li>26 <li><kbd>Ctrl+B</kbd> = <span data-i18n="help_hotkeys_22">**bold**</span></li>
27 <li><kbd>Ctrl+I</kbd> = <span>*italic*</span></li>27 <li><kbd>Ctrl+I</kbd> = <span data-i18n="help_hotkeys_23">*italic*</span></li>
28 <li><kbd>Ctrl+U</kbd> = <span>__underline__</span></li>28 <li><kbd>Ctrl+U</kbd> = <span data-i18n="help_hotkeys_24">__underline__</span></li>
29 <li><kbd>Ctrl+K</kbd> = <span>`inline code`</span></li>29 <li><kbd>Ctrl+K</kbd> = <span data-i18n="help_hotkeys_25">`inline code`</span></li>
30 <li><kbd>Ctrl+Shift+~</kbd> = <span>~~strikethrough~~</span></li>30 <li><kbd>Ctrl+Shift+~</kbd> = <span data-i18n="help_hotkeys_26">~~strikethrough~~</span></li>
31</ul>31</ul>
public/scripts/templates/quotaError.html+4 -0
@@ -0,0 +1,4 @@
1<h3><span data-i18n="Encountered an error while processing your request.">Encountered an error while processing your request.</span><br>
2 <span data-i18n="Check you have credits available on your">Check you have credits available on your</span>
3 <a href="https://platform.openai.com/account/usage" target="_blank" data-i18n="OpenAI account quora_error">OpenAI account</a><span data-i18n="dot quota_error">.</span><br>
4 <span data-i18n="If you have sufficient credits, please try again later.">If you have sufficient credits, please try again later.</span></h3>
\ No newline at end of file4 \ No newline at end of file
public/scripts/templates/welcome.html+41 -17
@@ -4,30 +4,56 @@
4<a href="https://docs.sillytavern.app/usage/update/" target="_blank" data-i18n="Want to update?">4<a href="https://docs.sillytavern.app/usage/update/" target="_blank" data-i18n="Want to update?">
5 Want to update?5 Want to update?
6</a>6</a>
7<hr>
8<h3 data-i18n="How to start chatting?">How to start chatting?</h3>7<h3 data-i18n="How to start chatting?">How to start chatting?</h3>
9<ol>8<ol>
10 <li>9 <li>
11 <span data-i18n="Click _space">Click </span><code><i class="fa-solid fa-plug"></i></code><span data-i18n="and select a"> and select a </span><a href="https://docs.sillytavern.app/usage/api-connections/" target="_blank" data-i18n="Chat API">Chat API</a>.</span>10 <span data-i18n="Click _space">Click </span>
11 <button class="menu_button menu_button_icon drawer-opener inline-flex" data-target="sys-settings-button">
12 <i class="fa-solid fa-plug"></i>
13 <span data-i18n="API Connections">API Connections</span>
14 </button>
15 <span data-i18n="and connect to an">and connect to an</span>
16 <a href="https://docs.sillytavern.app/usage/api-connections/" target="_blank">
17 <span class="fa-solid fa-circle-question"></span>
18 <span data-i18n="API">API</span></a>.
12 </li>19 </li>
13 <li>20 <li>
14 <span data-i18n="Click _space">Click </span><code><i class="fa-solid fa-address-card"></i></code><span data-i18n="and pick a character."> and pick a character.</span>21 <span data-i18n="Click _space">Click </span>
22 <button class="menu_button menu_button_icon drawer-opener inline-flex" data-target="rightNavHolder">
23 <i class="fa-solid fa-address-card"></i>
24 <span data-i18n="Character Management">Character Management</span>
25 </button>
26 <span data-i18n="and pick a character."> and pick a character.</span>
15 </li>27 </li>
16</ol>28</ol>
29
30<div>
31 <span data-i18n="You can add more">You can add more</span>
32 <button class="open_characters_library menu_button menu_button_icon inline-flex">
33 <i class="fa-solid fa-image-portrait"></i>
34 <span data-i18n="Sample characters">Sample characters</span>
35 </button>
36 <span data-i18n="or_welcome">or</span>
37 <button class="external_import_button menu_button menu_button_icon inline-flex">
38 <i class="fa-solid fa-cloud-arrow-down"></i>
39 <span data-i18n="Import Characters">Import characters</span>
40 </button>
41 <span data-i18n="from other websites">from other websites.</span>
42</div>
17<div>43<div>
18 <span data-i18n="You can browse a list of bundled characters in the">44 <span data-i18n="Go to the">Go to the</span>
19 You can browse a list of bundled characters in the45
20 </span>46 <i data-i18n="Download Extensions & Assets">Download Extensions & Assets</i>
21 <i data-i18n="Download Extensions & Assets">47 <span data-i18n="menu within">menu within</span>
22 Download Extensions & Assets48
23 </i>49 <button class="menu_button menu_button_icon drawer-opener inline-flex" data-target="extensions-settings-button">
24 <span data-i18n="menu within">50 <i class="fa-solid fa-cubes"></i>
25 menu within51 <span data-i18n="Extensions">Extensions</span>
26 </span>52 </button>
27 <code><i class="fa-solid fa-cubes"></i></code>53
28 <span>.</span>54 <span data-i18n="to install additional features.">to install additional features.</span>
29</div>55</div>
30<hr>56
31<h3 data-i18n="Confused or lost?">Confused or lost?</h3>57<h3 data-i18n="Confused or lost?">Confused or lost?</h3>
32<ul>58<ul>
33 <li>59 <li>
@@ -43,7 +69,6 @@
43 </li>69 </li>
44</ul>70</ul>
4571
46<hr>
47<h3 data-i18n="Still have questions?">Still have questions?</h3>72<h3 data-i18n="Still have questions?">Still have questions?</h3>
48<ul>73<ul>
49 <li>74 <li>
@@ -62,4 +87,3 @@
62 </a>87 </a>
63 </li>88 </li>
64</ul>89</ul>
65
public/scripts/templates/worldInfoKeywordHeaders.html+3 -3
@@ -1,8 +1,8 @@
1<div id="WIEntryHeaderTitlesPC" class="flex-container wide100p spaceBetween justifyCenter textAlignCenter" style="padding:0 4.5em;">1<div id="WIEntryHeaderTitlesPC" class="flex-container wide100p spaceBetween justifyCenter textAlignCenter" style="padding:0 4.5em;">
2 <small class="flex1" data-i18n="Title/Memo">Title/Memo</small>2 <small class="flex1" data-i18n="Title/Memo">Title/Memo</small>
3 <small style="width: calc(3.5em + 15px)" data-i18n="Strategy">Strategy</small>3 <small style="width: calc(3.5em + 10px)" data-i18n="Strategy">Strategy</small>
4 <small style="width: calc(3.5em + 30px)" data-i18n="Position">Position</small>4 <small style="width: calc(3.5em + 20px)" data-i18n="Position">Position</small>
5 <small style="width: calc(3.5em + 20px)" data-i18n="Depth">Depth</small>5 <small style="width: calc(3.5em + 15px)" data-i18n="Depth">Depth</small>
6 <small style="width: calc(3.5em + 20px)" data-i18n="Order">Order</small>6 <small style="width: calc(3.5em + 20px)" data-i18n="Order">Order</small>
7 <small style="width: calc(3.5em + 15px)" data-i18n="Trigger %">Trigger %</small>7 <small style="width: calc(3.5em + 15px)" data-i18n="Trigger %">Trigger %</small>
8</div>8</div>
public/scripts/textgen-settings.js+29 -1
@@ -68,6 +68,10 @@ const LLAMACPP_DEFAULT_ORDER = [
68 'temperature',68 'temperature',
69];69];
70const OOBA_DEFAULT_ORDER = [70const OOBA_DEFAULT_ORDER = [
71 'repetition_penalty',
72 'presence_penalty',
73 'frequency_penalty',
74 'dry',
71 'temperature',75 'temperature',
72 'dynamic_temperature',76 'dynamic_temperature',
73 'quadratic_sampling',77 'quadratic_sampling',
@@ -80,6 +84,9 @@ const OOBA_DEFAULT_ORDER = [
80 'top_a',84 'top_a',
81 'min_p',85 'min_p',
82 'mirostat',86 'mirostat',
87 'xtc',
88 'encoder_repetition_penalty',
89 'no_repeat_ngram',
83];90];
84const BIAS_KEY = '#textgenerationwebui_api-settings';91const BIAS_KEY = '#textgenerationwebui_api-settings';
8592
@@ -799,6 +806,25 @@ function showTypeSpecificControls(type) {
799 });806 });
800}807}
801808
809/**
810 * Inserts missing items from the source array into the target array.
811 * @param {any[]} source - Source array
812 * @param {any[]} target - Target array
813 * @returns {void}
814 */
815function insertMissingArrayItems(source, target) {
816 if (source === target || !Array.isArray(source) || !Array.isArray(target)) {
817 return;
818 }
819
820 for (const item of source) {
821 if (!target.includes(item)) {
822 const index = source.indexOf(item);
823 target.splice(index, 0, item);
824 }
825 }
826}
827
802function setSettingByName(setting, value, trigger) {828function setSettingByName(setting, value, trigger) {
803 if (value === null || value === undefined) {829 if (value === null || value === undefined) {
804 return;830 return;
@@ -813,6 +839,7 @@ function setSettingByName(setting, value, trigger) {
813839
814 if ('sampler_priority' === setting) {840 if ('sampler_priority' === setting) {
815 value = Array.isArray(value) ? value : OOBA_DEFAULT_ORDER;841 value = Array.isArray(value) ? value : OOBA_DEFAULT_ORDER;
842 insertMissingArrayItems(OOBA_DEFAULT_ORDER, value);
816 sortOobaItemsByOrder(value);843 sortOobaItemsByOrder(value);
817 settings.sampler_priority = value;844 settings.sampler_priority = value;
818 return;845 return;
@@ -890,6 +917,7 @@ async function generateTextGenWithStreaming(generate_data, signal) {
890 /** @type {import('./logprobs.js').TokenLogprobs | null} */917 /** @type {import('./logprobs.js').TokenLogprobs | null} */
891 let logprobs = null;918 let logprobs = null;
892 const swipes = [];919 const swipes = [];
920 const toolCalls = [];
893 while (true) {921 while (true) {
894 const { done, value } = await reader.read();922 const { done, value } = await reader.read();
895 if (done) return;923 if (done) return;
@@ -908,7 +936,7 @@ async function generateTextGenWithStreaming(generate_data, signal) {
908 logprobs = parseTextgenLogprobs(newText, data.choices?.[0]?.logprobs || data?.completion_probabilities);936 logprobs = parseTextgenLogprobs(newText, data.choices?.[0]?.logprobs || data?.completion_probabilities);
909 }937 }
910938
911 yield { text, swipes, logprobs };939 yield { text, swipes, logprobs, toolCalls };
912 }940 }
913 };941 };
914}942}
public/scripts/tool-calling.js+136 -0
@@ -0,0 +1,945 @@
1import { addOneMessage, chat, event_types, eventSource, main_api, saveChatConditional, system_avatar, systemUserName } from '../script.js';
2import { chat_completion_sources, oai_settings } from './openai.js';
3import { Popup } from './popup.js';
4import { SlashCommand } from './slash-commands/SlashCommand.js';
5import { ARGUMENT_TYPE, SlashCommandArgument, SlashCommandNamedArgument } from './slash-commands/SlashCommandArgument.js';
6import { SlashCommandClosure } from './slash-commands/SlashCommandClosure.js';
7import { enumIcons } from './slash-commands/SlashCommandCommonEnumsProvider.js';
8import { enumTypes, SlashCommandEnumValue } from './slash-commands/SlashCommandEnumValue.js';
9import { SlashCommandParser } from './slash-commands/SlashCommandParser.js';
10import { slashCommandReturnHelper } from './slash-commands/SlashCommandReturnHelper.js';
11
12/**
13 * @typedef {object} ToolInvocation
14 * @property {string} id - A unique identifier for the tool invocation.
15 * @property {string} displayName - The display name of the tool.
16 * @property {string} name - The name of the tool.
17 * @property {string} parameters - The parameters for the tool invocation.
18 * @property {string} result - The result of the tool invocation.
19 */
20
21/**
22 * @typedef {object} ToolInvocationResult
23 * @property {ToolInvocation[]} invocations Successful tool invocations
24 * @property {Error[]} errors Errors that occurred during tool invocation
25 */
26
27/**
28 * @typedef {object} ToolRegistration
29 * @property {string} name - The name of the tool.
30 * @property {string} displayName - The display name of the tool.
31 * @property {string} description - A description of the tool.
32 * @property {object} parameters - The parameters for the tool.
33 * @property {function} action - The action to perform when the tool is invoked.
34 * @property {function} [formatMessage] - A function to format the tool call message.
35 * @property {function} [shouldRegister] - A function to determine if the tool should be registered.
36 */
37
38/**
39 * @typedef {object} ToolDefinitionOpenAI
40 * @property {string} type - The type of the tool.
41 * @property {object} function - The function definition.
42 * @property {string} function.name - The name of the function.
43 * @property {string} function.description - The description of the function.
44 * @property {object} function.parameters - The parameters of the function.
45 * @property {function} toString - A function to convert the tool to a string.
46 */
47
48/**
49 * Assigns nested variables to a scope.
50 * @param {import('./slash-commands/SlashCommandScope.js').SlashCommandScope} scope The scope to assign variables to.
51 * @param {object} arg Object to assign variables from.
52 * @param {string} prefix Prefix for the variable names.
53 */
54function assignNestedVariables(scope, arg, prefix) {
55 Object.entries(arg).forEach(([key, value]) => {
56 const newPrefix = `${prefix}.${key}`;
57 if (typeof value === 'object' && value !== null) {
58 assignNestedVariables(scope, value, newPrefix);
59 } else {
60 scope.letVariable(newPrefix, value);
61 }
62 });
63}
64
65/**
66 * Checks if a string is a valid JSON string.
67 * @param {string} str The string to check
68 * @returns {boolean} If the string is a valid JSON string
69 */
70function isJson(str) {
71 try {
72 JSON.parse(str);
73 return true;
74 } catch {
75 return false;
76 }
77}
78
79/**
80 * Tries to parse a string as JSON, returning the original string if parsing fails.
81 * @param {string} str The string to try to parse
82 * @returns {object|string} Parsed JSON or the original string
83 */
84function tryParse(str) {
85 try {
86 return JSON.parse(str);
87 } catch {
88 return str;
89 }
90}
91
92/**
93 * Stringifies an object if it is not already a string.
94 * @param {any} obj The object to stringify
95 * @returns {string} A JSON string representation of the object.
96 */
97function stringify(obj) {
98 return typeof obj === 'string' ? obj : JSON.stringify(obj);
99}
100
101/**
102 * A class that represents a tool definition.
103 */
104class ToolDefinition {
105 /**
106 * A unique name for the tool.
107 * @type {string}
108 */
109 #name;
110
111 /**
112 * A user-friendly display name for the tool.
113 * @type {string}
114 */
115 #displayName;
116
117 /**
118 * A description of what the tool does.
119 * @type {string}
120 */
121 #description;
122
123 /**
124 * A JSON schema for the parameters that the tool accepts.
125 * @type {object}
126 */
127 #parameters;
128
129 /**
130 * A function that will be called when the tool is executed.
131 * @type {function}
132 */
133 #action;
134
135 /**
136 * A function that will be called to format the tool call toast.
public/scripts/user.js+0 -0
public/scripts/utils.js+0 -0
public/scripts/variables.js+0 -0
public/style.css+0 -0
server.js+0 -0
src/cohere-stream.js+0 -0
src/endpoints/backends/chat-completions.js+0 -0
src/endpoints/novelai.js+0 -0
src/endpoints/openai.js+0 -0
src/endpoints/search.js+0 -0
src/endpoints/stable-diffusion.js+0 -0
src/endpoints/vectors.js+0 -0
src/middleware/basicAuth.js+0 -0
src/prompt-converters.js+0 -0
src/transformers.mjs+0 -0
src/users.js+0 -0
src/vectors/cohere-vectors.js+0 -0
Diff truncated