diff --git a/main.py b/main.py
new file mode 100644
index 0000000..8064a1f
--- /dev/null
+++ b/main.py
@@ -0,0 +1,214 @@
+#!/usr/bin/env python
+#-*-coding:utf-8-*-
+
+import os
+import sys
+from PyQt5.QtCore import *
+from PyQt5.QtGui import *
+from PyQt5 import QtWebEngineWidgets
+from PyQt5.QtWidgets import *
+from PyQt5.Qsci import QsciScintilla, QsciLexerPython
+import qrc_resources
+
+filename = "untitled"
+
+dirname = os.path.abspath(os.path.dirname(__file__)) #os.path.dirname('__file__')
+PDFJS = os.path.join(dirname, 'thirdparty/pdfjs/web/viewer.html')
+PDF = os.path.join(dirname, 'example.pdf')
+
+font_family = 'Noto Sans Mono'
+font_size = 11
+
+'''Widget for PDF file viewer'''
+class PDFJSWidget(QtWebEngineWidgets.QWebEngineView):
+ def __init__(self):
+ super(PDFJSWidget, self).__init__()
+ self.load(QUrl.fromUserInput("file://%s?file=file://%s" % (PDFJS, PDF)))
+ print((dirname,PDFJS, PDF))
+
+class CustomQsciEditor(QsciScintilla):
+ def __init__(self, parent=None):
+ super(CustomQsciEditor, self).__init__(parent)
+
+ font = QFont()
+ font.setFamily(font_family)
+ font.setPointSize(font_size)
+ self.setFont(font)
+ self.setMarginsFont(font)
+
+ # Margin 0 for line numbers
+
+ fontMetrics = QFontMetrics(font)
+ self.setMarginsFont(font)
+ self.setMarginWidth(0, fontMetrics.width("000") + 6)
+ self.setMarginLineNumbers(0, True)
+ self.setMarginsBackgroundColor(QColor("#cccccc"))
+
+ # brace matching
+
+ self.setBraceMatching(QsciScintilla.SloppyBraceMatch)
+
+ # current line color
+
+ self.setCaretLineVisible(True)
+ self.setCaretLineBackgroundColor(QColor("#fdffce"))
+
+ # set horizonal scrollbar unvisible
+ #self.SendScintilla(QsciScintilla.SCI_SETHSCROLLBAR, 0)
+
+class Window(QMainWindow):
+ def __init__(self):
+ super(QMainWindow, self).__init__()
+ self._createActions()
+ self._createMenuBar()
+ self._createEditToolBar()
+ self._createFormatToolBar()
+
+ def _createActions(self):
+ self.new_action = QAction(QIcon(":new.svg"), "&New", self)
+ self.open_action = QAction(QIcon(":open.svg"), "&Open...", self)
+ self.save_action = QAction(QIcon(":save.svg"), "&Save", self)
+ self.save_as_action = QAction(QIcon(":save-as.svg"), "Save as...", self)
+
+ self.exit_action = QAction("&Exit", self)
+ self.undo_action = QAction(QIcon(":undo.svg"), "&Undo", self)
+ self.redo_action = QAction(QIcon(":redo.svg"), "&Redo", self)
+ self.copy_action = QAction(QIcon(":copy.svg"), "&Copy", self)
+ self.paste_action = QAction(QIcon(":paste.svg"), "&Paste", self)
+ self.cut_action = QAction(QIcon(":cut.svg"), "C&ut", self)
+ self.convert_action = QAction(QIcon(":convert.svg"), "Con&vert", self)
+
+ self.about_action = QAction("&About", self)
+
+ self.bold_action = QAction(QIcon(":text-bold.svg"), "&Bold", self)
+ self.italic_action = QAction(QIcon(":text-italic.svg"), "&Italic", self)
+ self.strike_action = QAction(QIcon(":text-strikethrough.svg"), "Stri&ke", self)
+ self.underline_action = QAction(QIcon(":text-underline.svg"), "&Underline", self)
+
+ def _createMenuBar(self):
+ menuBar = QMenuBar(self)
+ self.setMenuBar(menuBar)
+ file_menu = menuBar.addMenu("&File")
+ file_menu.addAction(self.new_action)
+ file_menu.addAction(self.open_action)
+ file_menu.addAction(self.save_action)
+ file_menu.addAction(self.save_as_action)
+ file_menu.addAction(self.exit_action)
+
+ edit_menu = menuBar.addMenu("&Edit")
+ edit_menu.addAction(self.copy_action)
+ edit_menu.addAction(self.paste_action)
+ edit_menu.addAction(self.cut_action)
+
+ edit_menu.addSeparator()
+
+ edit_menu.addAction(self.undo_action)
+ edit_menu.addAction(self.redo_action)
+
+ edit_menu.addSeparator()
+
+ edit_menu.addAction(self.convert_action)
+
+
+
+ format_menu = menuBar.addMenu("&Format")
+ format_menu.addAction(self.bold_action)
+ format_menu.addAction(self.italic_action)
+ format_menu.addAction(self.strike_action)
+ format_menu.addAction(self.underline_action)
+
+ help_menu = menuBar.addMenu("&Help")
+ help_menu.addAction(self.about_action)
+
+ def _createEditToolBar(self):
+ editToolBar = QToolBar("Edit", self)
+ editToolBar.toolButtonStyle = Qt.ToolButtonTextOnly
+ self.addToolBar(Qt.TopToolBarArea, editToolBar)
+
+ editToolBar.addAction(self.new_action)
+ editToolBar.addAction(self.open_action)
+ editToolBar.addAction(self.save_action)
+ editToolBar.addAction(self.save_as_action)
+
+
+ tool_bar_separator = editToolBar.addAction('|')
+ tool_bar_separator.setEnabled(False)
+
+ editToolBar.addAction(self.undo_action)
+ editToolBar.addAction(self.redo_action)
+
+ tool_bar_separator = editToolBar.addAction('|')
+ tool_bar_separator.setEnabled(False)
+
+
+ editToolBar.addAction(self.cut_action)
+ editToolBar.addAction(self.copy_action)
+ editToolBar.addAction(self.paste_action)
+
+ tool_bar_separator = editToolBar.addAction('|')
+ tool_bar_separator.setEnabled(False)
+
+ editToolBar.addAction(self.convert_action)
+
+
+ def _createFormatToolBar(self):
+ self.addToolBarBreak() # Toolber newline
+ formatToolBar = QToolBar("Format", self)
+ formatToolBar.toolButtonStyle = Qt.ToolButtonTextOnly
+ self.addToolBar(Qt.TopToolBarArea, formatToolBar)
+
+ formatToolBar.addAction(self.bold_action)
+ formatToolBar.addAction(self.italic_action)
+ formatToolBar.addAction(self.strike_action)
+ formatToolBar.addAction(self.underline_action)
+
+ '''create font adder'''
+ self.font_widget = QHBoxLayout()
+ font_combo_box = QComboBox()
+ font_database = QFontDatabase()
+ font_families = font_database.families()
+
+ font_combo_box.addItems(font_families)
+ line_edit = font_combo_box.lineEdit()
+ #line_edit.setFont(QFont(font_combo_box.currentText(),11))
+ #print(type(font_combo_box.lineEdit()).__name__)
+
+ font_button = QPushButton("Insert font")
+
+ formatToolBar.addWidget(font_combo_box)
+ formatToolBar.addWidget(font_button)
+
+
+if __name__ == '__main__':
+ app = QApplication([])
+
+ app.setApplicationName("Clochur - %s" % filename)
+
+ editor = CustomQsciEditor()
+ editor.setMinimumWidth(200)
+ #editor.resize(QSize(500, 2000))
+
+ pdf_viewer = PDFJSWidget()
+ pdf_viewer.setMinimumWidth(200)
+ #pdf_viewer.resize(QSize(500, 2000))
+
+ splitter = QSplitter(Qt.Horizontal)
+ splitter.addWidget(editor)
+ splitter.addWidget(pdf_viewer)
+ splitter.setStretchFactor(0, 1)
+ splitter.setSizes([500, 500])
+ splitter.setChildrenCollapsible(False) # make the editor and the PDF reader uncollapsible.
+
+ main_layout = QHBoxLayout()
+
+ main_layout.addWidget(splitter)
+ #main_layout.addWidget(pdf_viewer)
+
+ window = Window()
+
+ main_widget = QWidget()
+ main_widget.setLayout(main_layout)
+
+ window.setCentralWidget(main_widget)
+ window.show()
+ app.exec_()
\ No newline at end of file
diff --git a/qrc_resources.py b/qrc_resources.py
new file mode 100644
index 0000000..2fb7fa5
--- /dev/null
+++ b/qrc_resources.py
@@ -0,0 +1,4641 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created by: The Resource Compiler for PyQt5 (Qt v5.15.2)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x18\x54\
+\x00\
+\x00\x5a\x0b\x78\x9c\xdd\x5c\xd9\x72\x1b\x47\x96\x7d\xf7\x57\x60\
+\xa8\x17\x2b\x1a\x28\xe4\xbe\x50\xa2\x3a\x6c\xab\xe5\xf0\x84\x1d\
+\x33\xd1\xb6\x63\xe6\x4d\x01\x02\x45\x0a\x36\x08\x20\x0a\xa0\x48\
+\xea\xeb\xe7\x9c\x4c\x2c\x55\x40\x11\x22\x41\xaa\xe5\x1e\x32\x6c\
+\x01\xb7\x72\xbd\xeb\xb9\x79\xb3\xf8\xfa\xef\xb7\x57\x93\xce\xc7\
+\xb2\x5a\x8c\x67\xd3\xb3\x13\x59\x88\x93\x4e\x39\x1d\xce\x46\xe3\
+\xe9\xe5\xd9\xc9\xef\xbf\xbd\xeb\x85\x93\xce\x62\x39\x98\x8e\x06\
+\x93\xd9\xb4\x3c\x3b\x99\xce\x4e\xfe\xfe\xe6\x9b\xd7\xff\xd1\xeb\
+\x75\x7e\xa8\xca\xc1\xb2\x1c\x75\x6e\xc6\xcb\x0f\x9d\x9f\xa6\x7f\
+\x2e\x86\x83\x79\xd9\xf9\xf6\xc3\x72\x39\x3f\xed\xf7\x6f\x6e\x6e\
+\x8a\xf1\x8a\x58\xcc\xaa\xcb\xfe\xcb\x4e\xaf\x87\x9e\x8b\x8f\x97\
+\xdf\x74\x3a\x1d\x4c\x3b\x5d\x9c\x8e\x86\x67\x27\xab\xf6\xf3\xeb\
+\x6a\x92\xda\x8d\x86\xfd\x72\x52\x5e\x95\xd3\xe5\xa2\x2f\x0b\xd9\
+\x3f\xd9\x36\x1f\x6e\x9b\x0f\x39\xf9\xf8\x63\x39\x9c\x5d\x5d\xcd\
+\xa6\x8b\xd4\x73\xba\x78\x51\x6b\x5c\x8d\x2e\x36\xad\xb9\x98\x1b\
+\x9d\x1a\xc9\x18\x63\x5f\xa8\xbe\x52\x3d\xb4\xe8\x2d\xee\xa6\xcb\
+\xc1\x6d\xaf\xd9\x15\x6b\x6c\xeb\xaa\x84\x10\x7d\x3c\xdb\xb6\x7c\
+\x58\xab\xd3\xdb\x09\x38\x71\xef\x62\xd2\xd3\xfa\xec\xe0\xfe\x1c\
+\xff\x6d\x3a\xac\x09\xc5\x62\x76\x5d\x0d\xcb\x0b\xf4\x2c\x8b\x69\
+\xb9\xec\xbf\xfd\xed\xed\xe6\x61\x4f\x14\xa3\xe5\xa8\x36\xcc\x9a\
+\xf9\x8d\x79\x1b\x12\x99\x0e\xae\xca\xc5\x7c\x30\x2c\x17\xfd\x35\
+\x3d\xf5\xbf\x19\x8f\x96\x1f\xce\x4e\x4c\x48\xdf\x3e\x94\xe3\xcb\
+\x0f\xcb\xcd\xd7\xf1\xe8\xec\x04\xbb\x53\x3a\x04\x9d\x08\xeb\x05\
+\x9c\x6e\xb4\x48\x14\x5a\xe5\xb6\xab\x51\xeb\x8f\x8c\x4b\x8f\x1a\
+\x2a\xd7\x18\x66\x34\x1b\x9e\x0f\x16\x58\x76\xff\xc3\xec\xaa\xec\
+\xff\x31\xbe\xba\x1a\x0c\xfb\x8b\x6a\xd8\x1f\x7e\x5c\xf4\xa1\x8a\
+\x97\xb3\xde\x78\x38\x9b\xf6\x96\x1f\xa0\x25\x7d\x4c\x30\x19\x9c\
+\x4f\xca\xfe\x60\xb8\xc4\x80\x8b\xbd\xc1\xb8\xcb\xb3\x93\x72\x34\
+\x5e\xf6\x86\xd7\xcb\x62\x2d\x99\xcd\xda\xca\xdb\xf9\xac\x5a\xf6\
+\x2e\xc6\x93\x32\x37\xcd\xf3\x5e\x0e\xaa\xaa\x5c\x2e\xfb\x9b\x8e\
+\xf3\x69\x7b\xc7\xdb\xd1\x1c\xa2\x8a\xa2\xf5\xe1\x5d\xeb\xc3\xd9\
+\xf5\x72\x7e\xbd\x7c\x5f\xde\x2e\xcb\x69\xe6\x02\xc4\x51\x93\x4d\
+\x7a\xcc\x95\x6e\x68\x27\x6f\x30\xc0\xeb\x51\x79\xb1\xe0\x40\x59\
+\x0a\xfc\x46\x31\xd8\xf4\x10\x8f\x37\xe3\xcf\xc1\xdc\x79\x39\xa4\
+\x7d\xe4\xe6\x35\x8e\x2c\xef\xa8\x12\xcd\xa6\x3a\xeb\x4d\xa7\x21\
+\xb2\xf9\xfb\x5b\xc8\xab\x73\xda\x51\x06\xff\x93\xad\x2d\xee\x72\
+\x0b\x09\x95\xc7\x3f\xa2\xb5\xcd\x27\xaa\xce\x81\x61\x56\x2b\xe8\
+\xcd\xaa\xf1\xe5\x18\xac\xc8\xed\x5c\xb3\x31\xb6\x5b\xdb\x94\x87\
+\x97\xea\xaf\x36\x0d\xe3\x29\x07\xd5\x8f\xd5\x60\x34\x86\xcb\xd8\
+\x1b\x7d\x38\x9b\x4c\xd0\xe9\xec\x64\x30\xb9\x19\xdc\x2d\x1a\x23\
+\x36\xbb\x2a\xe5\xe2\x8a\x93\x18\x76\xb1\x9c\xcd\xd7\x6d\xc1\xbd\
+\xe5\xdd\x04\x5c\x23\xb1\x87\x11\x67\xd5\xe9\x0b\x91\x7e\x5e\x25\
+\xd2\x0c\x46\x34\x5e\xde\x9d\xca\x57\x27\xdb\x3e\xb3\x8b\x8b\x45\
+\x89\x89\x45\x8d\x96\x8c\x07\x3d\x94\xf2\x72\xb3\x85\x63\x67\x13\
+\x6d\xb3\xc9\xf6\xd9\xf4\x96\x61\xfd\xe6\xb6\x9f\x9f\x8d\xf6\x31\
+\x6c\x8c\x03\x31\x7c\x02\x1b\xdd\xe3\xd8\xd8\x36\xdb\x23\xd8\xe8\
+\xfe\xa5\x6c\x94\x8f\x60\xe3\xe8\x42\x0d\xd4\xe0\x68\x36\x5a\xfd\
+\x28\x36\xb6\xcd\xf6\x08\x36\x5a\x7b\x24\x1b\x5b\xb8\xa4\x1e\xa3\
+\x6c\xa5\xe2\xef\xd1\x5c\xd2\x8f\x53\xb6\x51\xe0\xef\x03\x66\x6b\
+\xe7\x92\xfe\xac\xb2\xf1\xdb\x60\xb2\xcb\xa5\xcb\xd5\xf7\xdf\xa7\
+\xe3\x25\x00\xca\xf5\xa2\xac\x7e\x65\x90\xff\xaf\xe9\xef\x8b\xf2\
+\x64\xb7\xd5\x6f\xd5\x60\xba\x00\xa2\xb8\x3a\x3b\xb9\x1a\x2c\xab\
+\xf1\xed\xb7\x08\xc8\xe9\xa7\x2b\xf6\x3e\xe0\x91\x14\x3a\x7f\x10\
+\x3e\xba\x58\xf6\x64\xe8\x02\x79\x48\x1b\x83\x90\x2f\x37\xa3\x57\
+\x67\x27\xbe\x50\xc1\x04\x15\xd4\x86\x38\x44\xb4\x50\xba\xd0\x1a\
+\x23\x84\x2d\x15\x51\x46\x3a\x5b\x08\x27\x85\x69\x18\x44\x73\x7b\
+\xd2\x05\x2b\xee\x93\xf5\x9a\x6b\x6c\xa4\x4e\x0e\x4a\xe5\x1f\xef\
+\xb4\xd5\xb6\x55\xe6\xf7\x0a\xb7\x3e\xbc\x39\x3c\xfc\xc0\xb4\x38\
+\xea\x56\x99\x6f\x85\xdb\xdc\xe8\x67\x4d\xe0\x7f\x7f\xf9\xf9\xa7\
+\xb7\xef\x43\xf4\xef\xf7\xa4\x79\x58\xe6\xb7\x12\x02\x88\xaa\x88\
+\x1e\x1b\xd9\x50\xef\x40\x35\x85\xb7\x51\x79\xaf\xb7\x6d\x15\xdb\
+\xba\x22\xea\xe8\xe3\xb6\x2d\xa8\x52\x14\x5e\x4a\x03\xf5\xbc\x87\
+\x5b\x6d\x46\xd4\x26\x08\xfe\xfc\xd0\xa2\xfa\xc6\x8a\x78\xc0\x1f\
+\xb5\x59\x4d\xcb\xf0\x17\xe9\xe7\x80\xf5\xd5\xa7\x7b\x82\x43\x9a\
+\x0f\x96\x1f\xb4\xd2\xe2\xbd\x3a\x46\x1c\xd2\xb9\x50\x78\xb7\x02\
+\xc5\x6b\x71\xc8\x60\x0b\x2d\xa4\x77\x0d\x71\x48\xe7\x63\x01\x43\
+\xdb\x11\x87\xb7\x85\x0f\x6b\x30\x5e\x9f\xbd\xcd\xb4\x95\xd4\xa1\
+\x69\xda\xb0\x50\x8b\x0f\x3d\x59\x38\x2f\x91\xbb\x74\x8d\x2b\xbc\
+\x72\xca\x76\x8d\xf1\x45\x34\x46\xbd\x7c\xa2\xa0\xdf\xa5\x9f\x36\
+\xce\x47\xef\x9f\x2c\xe7\x1f\xde\xf1\xb7\x7d\xf4\xf8\x44\xb1\x6a\
+\x29\xdf\xcb\xa3\xc4\x6a\x94\x28\xac\xf1\xa6\x21\xd6\x9e\x15\x45\
+\x94\xd1\x68\xd3\x94\x2b\x1b\x3b\x6b\x54\x43\xae\x3d\x0a\xdb\xa3\
+\xad\x7c\x80\x60\x55\x21\xac\xdc\xf1\xd9\x50\x17\x8a\x13\xde\x19\
+\x2a\x43\x12\x46\x8c\x85\x12\x26\x76\x95\x82\x03\xf7\xca\x3c\x55\
+\xb2\x3f\x98\xef\x30\x70\x3b\xef\x0f\xb8\xd3\x07\x4a\x36\x5a\xff\
+\xdd\x7d\xa3\xab\xe3\x62\xe3\xd6\x7d\xda\x9a\xb9\xb6\x87\xa0\xf6\
+\x70\xd5\x1a\xd9\xbe\x6c\x30\x3d\xac\x76\x4f\x74\xc2\xbb\xd1\x70\
+\xcd\xe3\x20\xd5\xe7\xe3\x21\x40\x4a\x3c\x3c\xfe\x30\xca\x81\x7c\
+\x18\x2e\x7d\xba\xc3\x37\x43\x33\x7c\x80\xc3\x0f\xd2\x3c\x35\xf8\
+\x1a\x7b\x8c\x57\x80\xab\x87\xb7\x56\x51\x37\xbc\x02\x6c\xd1\x28\
+\x13\x84\x6d\x38\x05\x6f\x0a\x1b\xbc\xb4\xa1\xe1\x14\x94\x2f\x82\
+\x76\x30\xec\x27\x8a\xfd\xfb\xef\xbe\x7f\xfb\xbd\x6b\xe1\x8d\xab\
+\x85\xc2\x63\x05\x71\x6f\x60\x77\xd1\x7f\xa1\xfc\x29\x1d\xa1\x9d\
+\x7e\xa8\xca\x8b\xb3\x93\x17\x6d\x11\x79\x3f\x75\x80\xd7\x0d\xb5\
+\x00\xfb\x74\xd4\x8c\xd0\xea\x83\xec\xae\x62\xaa\x89\x76\x15\x53\
+\xa5\xd7\xf8\x84\xd8\x5a\x20\xa5\xeb\xea\x28\x0b\xab\xd5\xcb\x86\
+\x62\x3c\x27\x0a\x78\xea\xc1\xc8\x91\xac\x0c\xe6\x0b\xb0\xb2\x81\
+\x52\x76\x39\xaa\xc1\x9e\xcc\x51\x43\x8e\x8a\x7f\x27\x96\xee\x00\
+\x8b\x76\x96\xc6\xfd\x00\x73\x2c\x4b\x89\x0f\x44\x74\x7e\x07\x1f\
+\xc8\xe8\x33\x3e\x08\x31\x98\x6e\x8f\x19\x2e\xc8\xb1\x8b\x47\x85\
+\x73\x3a\xee\xb0\xf4\x59\x41\xcd\xb3\x32\x75\xdf\x2b\xb7\xb0\xd4\
+\xf9\x5a\xb4\x4a\xb9\x10\x4c\x52\x59\x1d\x63\x63\x43\x88\xf9\x01\
+\x2b\xd4\xb2\xb1\x1f\x65\x0a\x19\x85\x31\x4d\x1d\xc1\x08\xc1\x89\
+\x28\xfc\x03\x25\xf5\x05\x36\x6d\x0f\x9b\xa6\xf3\x6e\x67\xd3\x34\
+\x97\x08\x08\xd5\x34\x0c\x55\x48\xb8\x43\xb1\x9b\x00\x7a\x90\xad\
+\xb4\x4d\xc3\x20\x28\x8a\x0f\x75\x9d\x5f\x61\xcb\x21\x3e\x9f\x33\
+\xd2\x85\x53\xc6\xe8\xd0\x02\xe0\x36\x8f\x7a\x52\x58\x8d\xd0\x1e\
+\xf1\xc9\x41\x79\xfc\xae\x33\x62\x22\xed\x9d\xdc\x51\x34\xf0\x5c\
+\x48\x05\x0d\xdc\xe3\xb9\x8f\x41\x35\x0d\x07\x49\x77\x34\x0e\x88\
+\xe0\x6b\xf0\x33\x9a\xe7\x8b\x93\x60\x1a\x7c\x7b\xd4\xad\xfc\x34\
+\x5e\x68\x6f\x13\x3f\x5d\x21\xa5\x4b\xfc\x14\x39\x53\xd9\xe5\xa7\
+\x09\x4e\xca\x26\x3f\x6d\x61\x85\x8b\xd2\xed\xf0\xd3\x15\xc0\x5c\
+\xa2\xa9\xc3\xb1\x80\xb6\x47\xab\xd4\x97\xe0\x67\xe3\x68\xa6\x95\
+\xa1\xb5\xe3\x97\xa7\x32\xb4\x07\xc7\xa4\x3c\xb4\xab\x85\xa3\x78\
+\x04\xb4\x28\x64\x57\x42\x51\x0b\xe8\x0f\x18\x2a\x0b\xb8\xb1\x68\
+\x77\x19\xfa\x7c\xa7\x42\x5f\x85\xa1\xfe\xf9\x2c\xde\x20\x56\x6a\
+\xa3\xfc\x21\x7e\x82\x8d\x40\x07\xc8\x9c\xfe\xed\x18\xda\x76\xa8\
+\x7a\x80\xb3\x5e\xa8\xe7\x53\x55\x82\x0b\x44\x99\x36\x5f\x0a\xf7\
+\x16\x81\xf0\x00\x47\x2c\x0c\x5f\x49\x29\xbb\x30\x71\x21\x60\xa1\
+\x65\x6f\x07\x2d\xeb\x58\xd0\x97\xd6\xa1\x05\x79\x8b\xb0\x66\x44\
+\xd4\xaa\xc1\xdb\x9e\x26\x36\xdc\x8d\x60\x14\x1a\x30\x8f\x30\x5f\
+\xc4\xfc\x3f\xe3\x4e\xe1\xe3\x9e\x13\x2b\x3f\x80\xa5\x0a\x60\xce\
+\x11\xfd\xdd\xcb\x52\x84\xf4\x00\x24\xd4\x04\xcb\x06\x43\xb9\xe0\
+\x6d\x93\xa3\x40\x86\x5e\x88\x86\xef\xa5\x0e\x17\x5a\x39\xa5\xfc\
+\xd7\x88\x4f\x0c\x1a\x47\x64\xe3\x84\x36\x26\x18\xdb\xd8\x33\x00\
+\x30\x62\x8f\x53\xcd\x3d\x2b\x28\x25\xd8\xa6\x9b\x5a\x04\xe0\xeb\
+\xbd\x09\x61\x7f\xf2\xa3\xe5\x64\xb4\xf0\x80\x11\xc8\x77\x9c\x85\
+\x4b\x7f\xf9\xbc\xdc\x6c\xa9\x9d\xdd\xcf\xd6\xc6\x76\x93\x4b\x63\
+\x16\x16\x84\x6a\x32\x0c\x2a\x05\xd4\xe8\x4c\x68\x32\xcc\x40\x1f\
+\x6c\x1d\x63\xaa\x04\xac\x61\xb4\xf6\xc1\xc2\xfa\xaa\x7b\xf7\x7f\
+\x91\xbd\xdf\x73\x8e\xf9\x0c\x56\xd4\x1c\x59\xa9\xda\x41\x33\x0f\
+\x44\x35\xb6\x81\x84\x20\xd6\xa8\x77\xa0\x7a\x60\xac\xfa\x79\xe8\
+\x45\x6b\xd3\x8b\xb6\xa6\xd5\xd9\x49\x28\x34\xec\x25\xf8\x87\x15\
+\x2b\x0e\x1d\x9d\x82\xf1\xf5\x13\x02\xd8\x8e\x8a\xd1\x4a\xf3\xd0\
+\x63\xd3\x2f\xaa\x5c\x56\x1e\x54\x2e\xbb\xa3\x5c\x31\x00\xf9\xd6\
+\x0b\x97\x77\xd9\x25\x5b\xec\x28\xec\x66\x07\x01\x19\x67\x34\xcd\
+\x63\x41\xba\x6f\x81\xc4\x2e\xfe\x25\x36\x7f\xd8\xb2\x9c\xfd\xab\
+\x6c\xfe\x39\x4c\xab\xe5\x0a\xd1\x21\x1b\xf3\xb6\x61\x63\x8c\x2b\
+\xa1\x4e\x83\xd9\x18\x89\xb4\xd2\x36\xec\x6b\xb7\xd9\xc5\x7e\xb3\
+\x8a\x67\x5b\xb0\x8a\x1a\xe9\x28\xcb\xe2\xd5\x3d\xab\x9c\xe8\x22\
+\x37\x05\x2e\x55\xae\x44\x0a\xd6\x55\x18\x3a\x38\xe1\x1f\x67\x5c\
+\xaf\xfb\xbc\xa1\x96\x3e\x6d\x6e\x9f\xf1\x86\xdd\xe8\xe3\xb8\xbc\
+\xf9\x66\xc3\x23\x5e\xf6\x5b\x8d\x3b\x1f\x5c\x96\xe9\x10\x19\x9c\
+\xcd\xf5\xdb\xd5\x83\xf3\x59\x35\x2a\xab\xf5\x23\x97\x7e\x1a\x8f\
+\x56\x07\xfe\xbc\x60\x28\x75\xfe\x59\x3d\xdf\xde\x33\xc3\xe0\xb5\
+\x66\xa2\xed\xf9\xe2\xc3\x60\x34\xbb\x01\xc7\x77\x1f\x7e\x9a\xcd\
+\xc0\x3f\xc0\x46\x2d\xb5\xdf\xf8\xb4\xad\xae\xd0\x0b\x82\x65\xc8\
+\x1b\xe4\xfe\xc3\x5c\x48\x12\x76\x73\xc0\xb8\x7d\x74\x5d\x55\xe0\
+\x62\x6f\x32\xb8\x2b\xb1\xb3\xf4\xcf\xda\x77\x2c\x3e\xcc\x6e\x2e\
+\x2b\x72\x68\x59\x5d\x97\xbb\x3d\x47\xb3\xe1\x35\xef\xc8\xf6\xae\
+\xb3\x04\xe6\xb7\xbb\x2d\xd8\xb7\x77\x7e\x3e\xbb\x6d\x0c\x40\xea\
+\x72\x36\x29\xa1\x14\xc3\x92\x7c\xb0\xfb\x3d\x6f\xc6\x53\x70\xa1\
+\xb7\xba\x06\x2a\xc5\x06\xeb\xed\xb6\x58\x5f\x0d\x0d\xfb\x9b\x5e\
+\xb5\x60\x65\xcd\xfb\x7b\x1e\x32\x48\xac\xc5\xb0\x58\x56\xb3\x3f\
+\xb1\xa0\xd5\x05\x8a\xdd\x1e\x64\x46\x5d\x40\x17\x83\xc9\xa6\xf6\
+\xf5\xba\xb1\xe5\xba\xf9\xfd\x88\xef\xef\xaa\xd9\xd5\x7f\x57\xa5\
+\x30\xee\xd7\x72\xb9\x1c\x4f\x2f\xb7\x96\x9c\xaf\x42\xde\xde\xb1\
+\xdb\x86\x98\xaf\x21\xf2\xea\xe3\x86\x31\x6b\xe2\x5d\x93\xc8\xab\
+\xb3\x18\x8f\x5b\xdc\xa7\xde\x35\xa9\x6b\xd5\xe5\xde\x36\x5a\xdd\
+\xe9\x94\x57\xf3\x7b\x9e\xd4\x34\x55\xd5\x9b\xd7\xe8\xa6\x4e\x5f\
+\x4d\x0b\xc7\xb0\xb1\xbe\x7d\xa3\x4b\xf4\xab\x72\x39\x18\x0d\x96\
+\x83\xad\x05\xae\x29\xbc\x4c\x1a\xd6\x4c\xad\x46\x17\xa7\xff\x7c\
+\xfb\x6e\x53\x0a\x1a\x0e\x4f\xff\x67\x56\xfd\xb9\x9e\x12\x2e\x07\
+\x0d\x06\xe7\xb3\x6b\xc8\x7f\x53\x8d\xe2\x1d\xd5\xe1\x29\x9d\xcd\
+\x60\xf9\x66\x7c\x05\x81\xf1\x26\xf4\xdf\x6e\xaf\x26\x70\x06\x9b\
+\x07\x8d\xc6\x14\xc2\x76\xd0\x3c\x6c\x55\xe6\x9b\xce\xad\x97\xc3\
+\x47\xc3\xab\x31\x3b\xf5\x7f\x5d\x8e\x27\x93\x9f\x38\x49\xad\x64\
+\xb5\x1a\x74\xbc\x9c\x94\x6f\xfe\x31\x1a\x2f\x3b\x3f\x5c\x2f\xd3\
+\xdc\x99\xd4\x68\x95\xee\x90\xcf\xaa\x37\xb5\xe9\xb9\xcd\xef\x2e\
+\x37\xf5\xa8\xfd\x31\x7f\xcc\xd7\x82\x3b\x3f\x97\x9d\x5f\x31\x73\
+\xdb\xd0\xe4\xfd\xfe\x30\xa9\xe5\xde\x8c\x1c\x78\x71\x7d\xfe\x07\
+\x02\x4d\x63\x00\x72\xe1\xfb\xc1\xe5\xce\x2a\x48\x9d\x8c\xdf\xf0\
+\x4a\xf2\xeb\xfe\xea\x4b\x6b\x8b\xe1\xf5\xe7\x1a\x4c\xc6\xf3\xf3\
+\xd9\xa0\x1a\xb5\x35\xcb\xb4\xc6\xf4\x69\xf5\x7b\x0b\x25\xb7\x26\
+\xe3\x61\x39\x5d\x7c\x5e\x84\x6d\x17\xf6\x57\x7d\x17\x90\xef\x39\
+\x3e\x8f\x66\x57\x83\xf1\xb4\xbf\x27\xcd\xe1\x6c\x8a\xb8\x75\x7e\
+\xfd\x58\x59\xfd\xe7\xe0\xcf\xeb\xf3\xce\xaf\xcb\x12\x41\xba\x7a\
+\xac\xa4\xf6\xe7\x4c\x6d\x69\x03\x75\x9b\xf8\x79\x77\xfb\x35\xb3\
+\x78\xfc\xce\x9b\xac\x9d\x97\x15\x54\x7d\x71\x14\x6b\xa7\x8b\x17\
+\xff\x2c\xe7\xd5\x6c\x74\x9d\xae\xc5\x37\x79\xfa\xf4\xb1\xdf\x8e\
+\x17\x99\x3d\x5f\x62\xec\xb2\x1a\x7f\x4c\x0f\xc8\xec\x45\xbd\x1e\
+\xdd\xdf\x72\x7c\x53\xbf\xdf\xfa\xa9\xd7\xfd\xb5\x27\x4b\xdf\x2e\
+\xb7\x1e\xae\x11\x58\x37\xe1\x62\x32\x38\x2f\x27\x67\x27\x3f\xf3\
+\x61\x67\xef\xe9\x65\x35\xbb\x9e\x5f\xcd\x46\xe5\xaa\xfb\xda\x31\
+\xb2\x80\xb7\x71\xf6\xb9\xfa\x7d\x01\x47\x74\x0a\x17\xf5\xed\x8b\
+\x96\x93\xde\x97\xaf\x72\x6c\x3b\x7d\x01\xef\x3a\x08\x76\xf5\x35\
+\x87\xd7\x53\xb9\xfe\xca\x9e\x98\xf7\x14\xb3\x4e\x47\x75\xe2\x1f\
+\xb3\xf1\xb4\x49\x05\x73\xcb\x6a\x32\xc6\x3f\xa7\x66\x4d\x1b\x0d\
+\x10\x1a\xab\x6a\x70\x77\x3a\x9d\x4d\xcb\x35\x75\x73\x0f\x62\x13\
+\x2a\xc0\x8c\x5f\x3a\x48\xd8\xa4\x37\x5a\xca\x2e\x51\xa4\x89\x31\
+\xfa\xce\x0f\xa4\xea\x00\xc8\x97\xa8\x91\xf7\x42\x2c\x69\x36\x4a\
+\xeb\x41\xf2\xd8\x8c\x93\x91\x24\xd6\x27\xa2\x01\x2d\x20\xa7\x15\
+\x8a\x7d\x6d\x61\x78\xe9\x27\x76\x0d\x50\x50\xb4\x42\xfb\x8e\x06\
+\xb2\x77\xd1\x7b\x9e\x3b\x61\x54\x05\x68\xd4\x41\x52\xa8\x95\xd4\
+\xd6\x74\x03\x3b\x48\xad\x02\x7b\xeb\xc2\x44\x6b\xd1\x5b\x9a\x02\
+\x43\x5b\xd5\x51\x11\x6b\xf0\x42\xc9\xae\x92\x48\xed\x8c\x75\xb6\
+\x03\x1c\x1c\xb0\x54\x1b\xbb\xca\x17\x1e\x38\x95\xab\x4e\x67\x33\
+\x46\x48\x4d\x62\xf0\x4a\x7a\x74\x36\x05\x28\x5e\x2b\xd2\x30\x9a\
+\x0c\xba\x03\x04\xe6\x8c\x47\x52\x91\x68\x2e\x46\xc7\xce\x8a\x97\
+\x7e\x90\x4b\x26\x88\x0b\xa4\xe3\x3b\x48\xf5\x8d\xd6\xc2\xa5\xf1\
+\xbc\xb7\x06\x13\x03\x5a\x47\x45\x86\x91\xa6\x34\x80\x1c\xfb\x22\
+\xa5\xf7\x41\xa3\x2f\x1e\xbb\x60\x30\x0e\x57\x2d\x80\x10\x79\xe2\
+\x0e\x20\x2a\x8d\xc1\xc4\x6d\xcc\xfe\xd4\x69\xa4\x09\x54\x29\x96\
+\x63\x6b\xa7\x67\x8f\xd0\x32\x9e\x56\xbc\x7c\xc5\xa7\xb5\x7b\x2f\
+\x2b\x9d\xab\x2b\xc3\x4a\xe1\x0a\x65\xbf\x92\xce\x29\x18\x80\xd2\
+\xd0\x10\x65\xb3\xba\x09\xeb\x21\x62\x10\xac\xf5\xc6\xaa\x48\x45\
+\x08\x3a\x2a\x11\xba\x90\xaa\x12\xd1\x28\x92\x9c\x50\x3e\x6a\x90\
+\x0c\x13\x1c\xb2\x3e\xa2\x87\x8d\x3a\x74\x59\xb7\x84\x38\x7c\xa4\
+\x1e\x18\x23\x7c\x30\x14\x47\x14\x42\x63\x38\xa8\x0e\x8b\x4d\x1e\
+\x19\x8c\x2d\x56\x5d\x09\xe1\xa9\xb6\x24\x05\x1f\x64\x16\x39\xd4\
+\x4b\x18\xdf\x55\x8e\xe5\x29\x15\x65\x6a\xe7\x68\x05\xa4\x59\xe7\
+\xa3\xd3\x59\x5f\x90\xac\x9a\xa8\x48\xf5\xce\x06\x93\x15\x0b\x76\
+\x13\x12\x2d\xca\x80\xc6\x54\x40\x6f\x9c\x77\x89\xb6\x9a\x38\x14\
+\x16\xfb\xb5\x20\x41\xc3\x78\xcc\x67\x3a\x48\x19\x64\x54\x4e\x27\
+\xbd\x97\x58\x54\x50\xb4\xa4\x68\xb4\x30\xa1\x0b\x35\x55\x1a\xe8\
+\x99\xca\xa6\x61\x42\xc1\x5a\x19\x41\x85\x61\x46\x81\x89\x41\xd3\
+\xd0\x6d\x68\x2a\xe6\x05\x0b\x94\x90\xa9\x77\x54\x46\x90\xe6\xa4\
+\x94\xd9\xb0\xc1\x1a\x07\x70\xe7\xc1\x42\x4c\x0b\x7e\x29\x72\x3f\
+\x2a\x28\xb7\x01\xf7\x23\xcf\xb0\x94\xcc\x0e\x00\xca\x44\x11\x49\
+\xcb\x65\xff\x9c\x68\x52\x06\x99\xc4\x86\xf4\x16\x59\x60\xa6\xd6\
+\x85\x79\x8f\x3a\xd7\xae\x5f\xce\x67\x93\xbb\xcb\xd9\xf4\xc1\x7e\
+\x13\xce\xe6\x3e\x95\xde\xbe\xc4\x51\xd3\x6a\x9e\xcf\xc1\xdc\x84\
+\x0b\xff\x62\xdd\x4e\xfb\xcd\x9b\x33\x56\xd6\x4e\x15\xe7\x98\x86\
+\x89\x19\xeb\xb9\xc2\x18\xa3\xa9\xab\x5a\x20\xab\x86\xca\x44\x88\
+\x2e\x46\x03\x97\xa0\xc1\x72\xe3\x1d\x5d\x07\x54\x1e\xee\x50\x52\
+\x17\x3c\xf3\xfd\x0e\x4b\xf5\x70\x62\x46\xb1\x99\xf3\x50\x00\x95\
+\x9a\x79\x56\x82\xbb\x2c\x3c\x39\xde\x48\xe8\xb4\x4d\xb1\x4d\x72\
+\x9e\xaf\x04\x7b\x8c\x73\x4a\xd5\xe3\xc7\x78\xa7\xbc\x12\xa9\xbe\
+\x86\x8f\x4a\x96\xc9\xab\xcf\xb4\x64\x96\x3e\x60\x3c\x32\x16\x08\
+\x1f\x51\xa4\xb8\x61\x2c\x4c\x26\x24\x5a\x84\xdb\x85\x2d\xc3\xe1\
+\x23\xde\xc1\xd7\xc0\xeb\x98\x20\x95\x4f\xb4\xa8\x15\x8c\x9f\xbd\
+\x03\x84\x1a\xa2\x89\x5d\x2d\x10\x7f\x60\xc2\xbe\x23\x69\xc2\x1e\
+\xa1\xa1\xab\xe1\x8c\x21\x09\x84\x13\xc9\x4b\xa5\x12\x33\xa7\x53\
+\x04\x99\x3c\x06\x69\x1e\xb1\x57\x92\x88\x79\x9d\x91\xa4\xc1\x3d\
+\x29\xd8\x37\xfc\xa2\x8e\xd2\x78\xc3\x39\xf4\xaa\x6b\xd4\xeb\x35\
+\xb3\x24\x0a\xbf\x87\x19\x7c\x94\x29\x26\x0a\x96\xbc\x83\x73\x5c\
+\x89\x8e\x81\x06\x0f\x27\xe7\xe1\xae\xb8\xe1\x50\x04\x89\xad\xc7\
+\xec\x22\x79\x63\x38\x04\x52\xb5\x12\x16\xa1\x12\x8e\xcf\x5a\xc5\
+\x11\x19\x3d\xa5\x33\x2e\xd1\x12\xaf\xfc\xd6\x2f\x2b\x9e\x13\xa5\
+\x38\xe9\xe0\xc8\xad\x31\x69\x0e\x16\xf4\xb2\x7b\x0c\x50\x67\xb4\
+\xdc\xe7\xf3\xae\x07\xc9\x16\xc5\xab\x1c\xee\x58\xb5\xf3\xe6\x2f\
+\x88\xbc\x60\xa0\x30\x5a\x11\x63\x03\x79\x81\xea\xe1\xdb\x21\x9b\
+\x2d\xf2\x92\xe4\xb8\xc0\xa7\x1a\xf4\xa2\x79\x1b\x8f\xe7\x75\xe8\
+\x05\x3f\xe0\x05\x3c\x48\x1d\x7a\x05\xf8\x08\x19\x43\x03\x7a\x45\
+\x9e\x9d\x42\x79\x7c\x03\x7a\xd1\xb3\x28\xe7\xd0\x72\x03\xbd\xa0\
+\x63\x1a\x5a\xe1\xea\xc8\x0b\x76\x89\xc0\xa6\x9b\xc8\x0b\x8b\x90\
+\x3e\x5a\x57\x47\x5e\x5c\x35\xd7\xd2\x00\x5e\xf0\x77\xc1\xea\x06\
+\xf0\xc2\x64\x50\x69\x4c\xbb\x05\x5e\x0e\xe6\xa5\x43\x88\x35\xe0\
+\xc5\x1e\x70\x80\xc2\x37\x80\x17\x4b\xeb\xe0\x5d\x1d\x78\xc9\x34\
+\x0a\x03\xf3\x16\x78\xb5\xf1\xba\x5d\xcf\xf8\x0a\xc8\xd1\xd8\xcb\
+\xfe\xf5\xb1\x17\xf5\x8b\xea\xe5\xd7\xd8\x8b\x8a\x04\x78\x03\x07\
+\x66\x59\xba\x01\xbc\xd1\xd4\x23\xe5\xe1\x7a\x1d\x75\x86\x46\x6f\
+\x2c\x69\x42\xd0\x6b\x75\xb7\x46\x9e\xc2\x93\x46\xaf\x6e\x3a\x79\
+\x17\x1a\x8e\x8e\xce\xcf\x5b\xa4\x05\x04\x37\xd2\xc3\xbd\x05\x8a\
+\x09\xb8\x01\xd4\x8c\xa0\xb2\x83\x60\xb8\x83\x73\xd7\xc9\x19\x28\
+\x01\x3c\x4e\x55\x70\x50\x00\xf6\x05\x66\x81\xf6\xc0\x45\x2a\x02\
+\x15\x0b\xbf\x41\xda\xc6\xbb\x00\xc3\x01\x97\x53\x09\xf1\x09\x21\
+\x50\xa4\x86\x08\x54\xf0\x70\xa4\x09\x4c\x2c\xd3\x80\x80\x66\x88\
+\xc5\x5d\x95\x0a\x53\x49\x57\xe9\xfd\x84\x55\x58\x34\x74\x15\x98\
+\x9f\x7e\x13\xce\xc7\x00\x75\x45\x86\x52\xc5\xeb\xc0\x8a\xe6\x20\
+\x82\x87\x1b\x07\xa7\xdc\x6a\xd1\xa4\x41\xdf\x60\x9d\x00\xaa\x02\
+\x90\x49\x24\xdd\xc2\x78\x84\x91\x44\xf7\x4a\x4a\xda\x4d\x93\xcb\
+\xad\xa0\xc8\x69\x7b\x8f\x9e\x35\xdf\xcf\x1e\x54\xc3\x93\x1d\x15\
+\xdc\xea\x57\xf3\x9d\xe0\x03\x20\x4a\xef\x83\xa8\xf4\xb5\xba\x9e\
+\x24\xf5\xfc\x54\x56\xb3\xe7\xd3\xd6\xab\x41\xf5\x67\x59\xe5\x81\
+\xf2\xe7\xde\x62\x39\xa8\x96\x0d\xca\xd5\x78\xd4\xf8\x5e\x4e\x47\
+\x8d\xa9\x1f\xae\xeb\xa4\xe6\x1b\xe9\xa7\x62\x4f\xff\x5f\x7d\x1c\
+\x2f\xc6\xe7\xe3\x09\xbf\xa4\x8f\x93\xf2\xd5\x68\xbc\x98\x23\x93\
+\x3f\x1d\x4f\xb9\xf0\x57\xb3\x8f\x65\x75\x31\x99\xdd\xac\x9f\xb7\
+\x41\xd8\xda\x25\xd0\x8d\x80\x52\xe1\x06\x3e\x0d\xca\xab\x4c\xcb\
+\xe3\xbb\xb6\x2b\xa4\x9b\xc7\x15\x4f\x96\x11\x5f\xe1\x43\xad\xd2\
+\x2d\xcf\xef\x5a\x9f\x67\x78\xb2\xbe\x83\xda\xd9\x4c\xd0\xf9\xae\
+\xb3\x6d\xdd\xf8\xd8\x01\x58\xe8\x74\x36\x57\x5c\xbb\x0f\xef\xd2\
+\x32\xcb\xa7\x03\x70\x12\x23\xc0\xf0\x5b\xe1\x64\xad\xd0\x84\x24\
+\x02\x40\x97\xd7\x8e\xbd\x41\xf2\x72\x1f\x98\x7c\xb0\x15\xf0\x8a\
+\x04\x0c\x10\x10\xe3\x5e\x73\xd8\x2f\xbe\x1d\xb0\x86\xf2\x63\x39\
+\x9d\x8d\x46\x07\xac\x61\xd7\x14\xce\xaf\x97\xcb\x3d\x4b\x48\xea\
+\xfb\xff\xce\x12\x90\xf8\xf9\x7b\x0c\x61\xa7\x34\xd9\x30\x83\x9d\
+\x1a\x65\xc3\x06\x76\xab\x95\x0d\x03\x60\x66\x6e\x9b\xba\x6f\x34\
+\x7d\x6a\x1e\x11\x1a\xbc\xea\xde\x49\x2d\xd7\x9a\xeb\x0b\xc2\xe0\
+\xc3\x6d\x1a\xe3\x1c\x52\x6b\x7a\x3f\x27\x10\xf9\xda\x8a\xa4\x41\
+\x02\x7a\xc7\x6e\x0f\x33\xc6\xa8\xa3\xe9\x22\x0d\xe0\x75\x32\x79\
+\x8f\x5e\xaf\x19\x89\x14\x51\x87\x5d\x95\xbe\xd7\x81\x33\x15\xbb\
+\x37\x0b\xde\xbc\x68\x7c\x30\xf0\x03\x49\x31\x3f\xd1\x04\xfd\x0a\
+\xf8\x4f\x9b\x1c\x0c\x01\x32\x61\x86\x29\xdb\x90\x80\x55\x3a\xc1\
+\xf4\xe8\x14\x82\xa1\x76\x3c\x65\x0b\x56\x92\x81\x48\x4f\xb4\x0e\
+\xe4\xa9\x42\xd8\x0e\x84\x6e\x12\x90\x01\x79\xa7\x07\xde\xe4\x85\
+\x5b\xf8\x8e\x0e\x30\x97\xf6\x30\x6f\x90\x90\xdb\x00\x39\x20\x92\
+\x82\x35\xa4\x01\xba\x19\x0a\x00\x78\x34\x9d\xf4\xf1\x68\x06\xb9\
+\x07\xdf\x2e\x2d\xa4\x15\x8c\xce\x3c\x98\x93\x80\x7b\xaa\xab\x63\
+\xb2\x6a\xad\x3a\x40\x0c\x36\x1a\xc0\xd0\x2e\x0f\x2a\x80\x0a\x12\
+\x4e\x8e\x44\x19\x18\xd2\xa6\x6c\x0a\xbd\x90\x85\x48\x5e\x6c\x45\
+\x06\x96\x72\x18\x0b\x7c\x6b\x4c\xeb\xb6\x3f\x75\x7e\xe1\xd2\x83\
+\x01\x08\x08\xcc\x9e\x90\x26\x8b\x74\xb6\xc2\x11\x10\xf4\x4d\xca\
+\xa0\x94\xb3\x19\xf7\xe8\xf4\x0a\x0a\xda\x01\x5e\x58\xc0\x94\x98\
+\x8e\x92\x14\xf3\x27\xde\xfb\xd1\x52\x70\x45\x80\x45\xd2\x09\xe4\
+\x43\x5c\x3b\x96\x0b\xac\x0d\x1a\x40\x0c\x93\xf0\xae\x51\x09\x5d\
+\x29\x03\x40\x1e\xa3\x54\x3c\xeb\xd2\xe4\x0b\xb0\x0d\x27\x46\x1a\
+\xa4\x9c\x36\x81\xd4\x08\x50\x12\x24\xc1\x06\x91\x6a\xb0\xec\x8c\
+\x5d\x1b\x30\x03\xcb\x36\x36\x04\x2e\x3b\x62\x63\xdc\x6c\x4e\x0f\
+\x8d\xd2\x52\x27\x81\x01\xfb\xaa\x55\x12\x09\xec\xc3\x65\x23\x3a\
+\x79\x11\x5b\xb7\x0c\x64\x72\x54\x4e\xc5\x9b\x8b\x0f\x01\xbb\xf7\
+\x29\x63\xba\x18\x95\x64\x07\x8d\x53\x09\xcb\x03\x33\x19\x42\xc8\
+\x94\x1f\x47\x20\x34\x49\xae\x00\xd0\x09\x23\x73\x2e\xec\xb5\x70\
+\x60\x3e\x14\xd1\x82\xfb\x69\x17\x40\xa6\x9a\xfc\x83\xbc\xb1\x31\
+\x9e\x44\x73\xbf\xd4\x17\x0d\x1a\x72\x26\x91\x68\x40\x6b\x48\x04\
+\x2c\x05\x02\x8c\x0a\xbd\xc0\x24\x96\xa7\x7f\x9e\x46\x60\xf9\x76\
+\x0a\x70\x20\x18\x93\xae\x34\x06\x01\xb7\x00\xbb\x00\xac\x23\x82\
+\x13\xc0\x90\x0a\xf9\x27\x34\x11\x4c\x43\x6a\x1c\x29\x24\xa4\x27\
+\x46\x70\xdd\x80\x8e\x82\x99\x0f\xb4\x38\x40\x79\xa5\xa5\x84\x91\
+\xf4\x23\xeb\xa2\xbe\x43\x73\x79\x58\xc3\xad\x70\xab\x9a\x34\x0c\
+\x6b\x8d\xca\x7b\x96\x52\x28\x9d\x7b\x23\xd6\x02\x2c\xaf\xde\xa9\
+\xd0\x71\xa5\x0a\xc8\xf2\x92\x5e\x22\xb3\xd3\x96\x34\x6c\x94\xf9\
+\x7f\x36\x3f\x24\xe0\xda\x53\x41\x8c\xf7\xb0\x49\x9e\xd0\x20\x37\
+\xa7\xf9\xc1\xaf\xc1\x0b\x81\x3b\x7c\x11\x81\xd0\xdc\x71\x2b\xc8\
+\xb3\xb4\x33\xf9\x38\x02\x1a\x1a\x03\xf8\x08\xdb\x4e\x37\x3c\x78\
+\x58\x60\xa3\x05\x64\x4f\xa6\x06\x6b\x09\x3e\x1d\x5b\x40\xab\xb3\
+\x87\x90\xce\x8a\x20\xb3\xc6\x69\xcf\xf3\x0a\x1e\x2b\x08\x95\x93\
+\x45\xe8\x17\x2f\x97\x26\x53\x83\x8d\xf3\x24\x64\x4f\xce\xc9\xf6\
+\x58\x36\x40\x96\x9b\x4e\x3d\x10\xb6\x7d\x4a\x7c\xa9\xba\x3c\xaa\
+\xcf\x07\x15\x00\xed\xe9\x38\x03\xde\xc0\x04\x9f\x8c\x0f\x89\x60\
+\xb0\x9c\x39\x2a\xa6\x26\x10\x20\x4c\xd0\x25\x37\x46\x22\x0c\x57\
+\x6b\x4a\x10\x1b\xb0\xe4\x99\xe3\x9d\x4c\xa1\xb3\xa9\xc0\x46\x91\
+\xe4\x62\x89\x70\x6d\x51\x24\xf6\x58\x01\xf7\xe1\x32\xaa\xf7\x9e\
+\x1a\x47\x3e\x46\xa1\x3c\xd2\x66\x5e\x0b\x36\x49\xa1\x0c\x4f\x3b\
+\x49\x85\xea\x59\xc8\xd5\xea\x44\xe3\xe5\x0f\xef\x92\xea\x49\x38\
+\x37\xe4\xb2\x99\x6a\x14\xb4\x02\x1e\x4f\x08\xbe\x05\x42\x71\x41\
+\x1e\xb0\x34\xac\x46\xc2\xfb\xa8\x34\x09\x2c\xd3\x25\x27\xe8\xd8\
+\x50\xc5\xbc\x48\x67\x0c\x1c\x0c\x15\x4a\xc2\x8d\xc4\xe4\x5e\x22\
+\xc1\x52\xec\x30\xbb\xd5\xf0\xba\x81\x92\x09\xac\xcd\x64\xa7\x01\
+\xdb\xd0\x2e\xb1\x47\x4b\xab\x45\x48\xeb\xe6\x66\xd2\x79\x0f\xb8\
+\x48\xb9\x24\xf7\x0a\x65\x48\xec\xc6\xf6\x95\xcb\xae\x8e\x69\x9f\
+\x96\x89\x1a\x20\xd9\xd4\x12\x9f\xac\xca\x2d\xc1\x79\xad\xda\x84\
+\xd5\x7e\xc6\x5b\xfb\x33\x46\x0d\x57\x92\x8f\xfc\x11\x16\x34\x76\
+\x6d\x9a\xd1\xc7\x17\x7c\x15\xcd\xea\x7a\xf4\x49\xc7\x45\xb1\x11\
+\x7d\x14\x04\x68\x75\x50\x8d\xe0\x83\x2e\xce\xf3\x7d\xbd\x6d\xf0\
+\xa1\xf9\x62\x0c\x51\x0f\x3e\xd0\xf9\x10\x0d\x4b\x4f\xf5\xe0\x93\
+\x44\x85\xdc\xce\xd5\x82\x0f\x3e\x69\xba\x5e\x59\x0b\x3e\x98\x10\
+\x83\x78\x72\xa4\x16\x7c\x60\x31\xf0\xeb\xba\x1e\x7b\x52\x74\x08\
+\x4a\xeb\x5a\xec\x69\xdb\x34\xf5\x9f\x86\x04\xdb\x8a\x8d\xd0\xc3\
+\xe2\x86\xd2\x06\x79\xee\x26\xf4\x80\x01\x8e\x6f\xd3\x85\x5a\xec\
+\xc1\xd4\x0e\x5a\x48\xb1\xd5\x62\x0f\x0d\x5b\x3a\x69\x64\x2d\xf6\
+\x80\x66\x3c\x3e\x84\x5a\xec\xc1\x53\x61\xb2\xb7\xaa\x05\x1f\xb2\
+\x4d\x40\xf0\xb5\xd8\xa3\xd3\x8b\x94\x7c\xbb\x72\x1b\x7b\x78\xf4\
+\xe8\x35\x05\x53\x0b\x3d\xe4\x00\xf0\x0e\x66\xd9\xc4\x1e\x90\xbc\
+\xcd\x21\x77\x13\x7b\x5a\xb6\x5c\xd3\xa2\xbd\x68\xb3\x7f\x21\xf5\
+\x68\xf0\xb3\xd1\x50\x18\xbe\x3f\xb6\x0a\xc1\x8b\x9a\xf7\xad\xa0\
+\xb5\xb9\xb3\x2f\x9b\x39\x03\x14\xc0\xb3\x56\x13\xe2\x57\xad\x4a\
+\x08\xd9\x52\x95\x80\x97\x21\xbe\x6d\x54\x25\xa8\x12\xa2\x59\x94\
+\xe0\x8d\x4b\x2f\x63\xbd\x28\x41\x3b\x21\xae\xab\x17\x25\x10\x4d\
+\x90\x65\xca\x46\x51\x62\x7f\x86\xc3\x45\x89\xe3\xde\xb3\x3b\xee\
+\x74\x18\xde\xe1\xe1\xc7\x76\x5f\x4d\x8c\x39\xeb\x77\xb9\x18\x97\
+\x8e\x4f\xf3\xf9\x3e\x8f\xc7\x10\x7d\x01\x27\x15\xeb\x0b\x4e\xf3\
+\x2c\x9f\xe5\x23\x38\x0e\x97\x69\x88\xd2\x32\x9d\xb2\xca\x8c\x8c\
+\xcd\xb6\x27\xc6\x4a\x45\x8a\xc0\xeb\x5e\x91\xe3\x7b\xc0\x07\x99\
+\xfc\x7f\x2a\x28\x4a\xfa\x68\x86\x09\x70\x9a\x0e\x97\x31\xd3\xe7\
+\x12\x26\x5c\x5b\xd4\xc9\xc6\x91\x3e\x38\x95\xbc\xb4\x90\x7c\xff\
+\x97\xbe\x12\x3e\x55\x0b\x9d\x3c\x77\x2e\x66\xe4\xf9\xb3\xc7\xb0\
+\x8c\x36\x29\x6a\x01\xa1\x30\x8a\xb2\x4e\x82\x90\x97\x62\x91\xe7\
+\x79\x9d\xe2\x0c\xa9\x1e\x90\x7c\xec\xba\x6c\x8a\x88\xa5\xa4\xe5\
+\x8a\x3d\x94\x8c\x87\x7e\x79\x83\x2a\x15\x28\xd0\x11\xe1\x9e\x2b\
+\x5e\xed\x74\x5d\x3e\xc9\x27\x8c\x70\x76\xb9\x64\xa1\x82\x4e\x7b\
+\x05\x4e\xd2\x21\x31\x33\x58\xec\x50\xef\xf3\xf7\xde\x5a\x84\x13\
+\xc7\xe2\x66\x15\x9e\x80\x9b\x19\x1a\x02\xb2\x26\x9f\x20\x96\x01\
+\x90\xd1\x99\xa3\x50\x4a\x2f\x12\xf0\x72\x1e\xc0\xd4\x90\xa3\xd8\
+\x9b\xcc\x2c\x05\x64\xf1\x26\xe4\x2b\x09\x09\x59\x62\x9c\x00\xfc\
+\x62\x7d\x0e\xc2\x51\x04\xbe\x52\x4f\x44\x05\x80\x02\x14\xc1\x1a\
+\x10\x4b\x3c\x09\x4f\x45\x16\xab\x65\x8a\x66\x10\xae\x0c\xdd\xf4\
+\x36\x10\x42\x65\xca\xe2\xf8\x27\x2b\x80\x7a\x52\xb2\x8d\xd0\x22\
+\x65\x5a\x24\x10\x78\x48\x81\x07\x39\x71\xaa\x27\x23\xb2\xc0\x6e\
+\x44\x8a\x31\x98\x3a\xf8\xb0\xaa\x46\xc3\x39\xd8\x04\xa8\x10\xab\
+\x58\xc5\xe0\xb5\x10\xb4\x33\x09\x28\xc3\xa7\x10\xb5\x23\xe0\x10\
+\x31\x61\x33\x86\xaa\x1d\xe8\x8f\x72\xd0\x03\x40\xc8\xd0\x1b\x9b\
+\x41\xa8\x65\xbc\xb6\x00\xcc\xac\x51\x6b\x66\x4a\x29\x82\x07\x44\
+\x66\x99\x22\x19\x22\x35\xc4\xcf\xbe\x00\xcc\x88\x8d\x98\x05\x63\
+\xf3\x79\x6e\x69\x59\x28\xf7\xdc\x34\x79\x8b\xe0\x88\x39\x90\xdd\
+\x07\x93\xe0\x26\x34\xce\xe4\x4b\x2a\xc8\x3e\x63\xfa\xdb\x03\x9a\
+\x27\xd6\x70\x7d\x8a\x81\x39\x50\x31\x52\xa2\x48\xe4\x91\x69\x00\
+\xde\x96\xc1\x91\x0c\xb7\xc8\xa0\x73\x01\x1f\x89\x42\x64\xa2\x23\
+\x99\x29\xf0\x7a\x02\xb3\x11\x60\x71\x69\x48\x4b\x97\x12\x4c\xe2\
+\x19\x64\x40\xcc\xc7\x20\x9b\x4e\xdf\xf2\x05\x19\x20\xa5\x94\x25\
+\x99\xa8\x85\x4c\xc1\x15\xe0\xda\x64\x9c\x01\xb1\xba\xd8\xaa\x28\
+\x2b\xe8\xc1\x3a\x62\x4c\x16\x0e\xac\xe4\x62\xcc\xf7\x2f\xc0\x34\
+\x41\x15\x20\x42\x94\x51\xe9\x74\x7d\x80\x36\x9c\x52\x61\xac\x0d\
+\xbd\x28\x1b\x11\xe1\x15\x54\x36\x5d\x8a\x24\xa3\x21\xbe\x54\xca\
+\x25\x11\x41\x01\x91\x65\x89\x41\x50\xe4\x65\x52\x2a\x24\x12\x44\
+\x0d\xac\xf3\xa4\x2c\xd5\x10\xe1\xc8\x2c\x44\x00\xdb\x60\x73\x1a\
+\x62\x3c\xf4\x07\x72\xe0\x05\x08\xc2\xec\x54\x1c\xb4\x6c\x64\x57\
+\x18\x8e\x6b\x81\x0f\xd2\xb9\xab\xe0\x9f\x26\xf0\x94\xb5\x97\x86\
+\xd9\x81\xa6\x8f\x00\x3a\xd6\xd4\x09\xe4\x3c\x92\xd8\x23\xe7\x3f\
+\xd6\x93\x86\xcc\xc1\xe6\xe3\x07\xd6\xb8\xa4\xf7\x09\x0a\x61\x68\
+\x97\xae\x9c\x80\x23\x50\xa3\x34\x8d\x66\xcd\x2d\x31\xd2\x03\xc1\
+\x48\xea\xb7\x24\x1b\xc2\xca\xe2\x3c\xb4\x3e\xe5\xfa\x2c\x9a\xb8\
+\x64\x5d\x01\xa9\x55\xd2\x1e\x84\x49\xc0\xa7\xe4\xfd\x9c\xe3\x1f\
+\xa6\xb0\x89\xed\x49\xfc\xc9\x25\x0a\x97\x21\xa5\xc3\x88\x32\x59\
+\x2b\x52\x15\x61\x12\x63\x91\x7f\x69\xc7\x29\x20\x51\x97\xb1\x31\
+\x90\xa5\x4a\x7a\xab\x53\xe9\x36\x65\xbf\x8a\x4e\x1e\xe3\xd0\x04\
+\x61\xf1\x2e\x21\x7e\x87\xe4\x18\xe8\xb8\x4d\xcc\xed\xa8\x7d\xf3\
+\x47\x5e\x5e\xf7\x2f\xdf\x7c\xf3\x9a\x77\x74\xdf\x7c\xf3\x7f\x52\
+\xd3\x1a\xc6\
+\x00\x00\x0a\xa4\
+\x00\
+\x00\x2c\x26\x78\x9c\xcd\x5a\xeb\x8f\xdb\x36\x12\xff\x9e\xbf\x42\
+\xe7\xc5\x01\x09\x6e\xf5\xe0\x43\xd4\x63\x1f\x45\xdb\x20\x45\x80\
+\x14\x77\x68\xda\xbb\x8f\x05\x2d\xd1\xb6\x1a\x59\x32\x28\x79\x6d\
+\xef\x5f\xdf\x21\xf5\x7e\xac\xb3\xbb\xd9\x24\x67\x23\x6b\x69\x66\
+\x38\x43\xfe\x38\x43\x0e\x87\xb9\xfe\xe1\xb8\x4d\x8d\x3b\x21\x8b\
+\x24\xcf\x6e\x16\xc8\x72\x16\x86\xc8\xa2\x3c\x4e\xb2\xf5\xcd\xe2\
+\x8f\xdf\xdf\x99\xfe\xc2\x28\x4a\x9e\xc5\x3c\xcd\x33\x71\xb3\xc8\
+\xf2\xc5\x0f\xb7\xaf\xae\xff\x61\x9a\xc6\xcf\x52\xf0\x52\xc4\xc6\
+\x21\x29\x37\xc6\xfb\xec\x53\x11\xf1\x9d\x30\x5e\x6f\xca\x72\x17\
+\xda\xf6\xe1\x70\xb0\x92\x9a\x68\xe5\x72\x6d\xbf\x31\x4c\x13\x5a\
+\x16\x77\xeb\x57\x86\x61\x80\xd9\xac\x08\xe3\xe8\x66\x51\xcb\xef\
+\xf6\x32\xd5\x72\x71\x64\x8b\x54\x6c\x45\x56\x16\x36\xb2\x90\xbd\
+\xe8\xc4\xa3\x4e\x3c\x52\xc6\x93\x3b\x11\xe5\xdb\x6d\x9e\x15\xba\
+\x65\x56\x5c\xf4\x84\x65\xbc\x6a\xa5\x55\x67\x0e\x44\x0b\xa1\x20\
+\x08\x6c\x07\xdb\x18\x9b\x20\x61\x16\xa7\xac\xe4\x47\x73\xd8\x14\
+\xfa\x38\xd7\x14\x3b\x8e\x63\x03\xaf\x93\x7c\x9c\x54\x78\x4c\x01\
+\x89\x07\x3b\xa3\xb9\x7d\xeb\x80\xfe\x0e\xfe\xb5\x0d\x1a\x82\x55\
+\xe4\x7b\x19\x89\x15\xb4\x14\x56\x26\x4a\xfb\xed\xef\x6f\x5b\xa6\
+\xe9\x58\x71\x19\xf7\xd4\x34\xe0\x0f\xec\x0e\x66\x24\xe3\x5b\x51\
+\xec\x78\x24\x0a\xbb\xa1\xeb\xf6\x87\x24\x2e\x37\x37\x0b\xea\xeb\
+\xb7\x8d\x48\xd6\x9b\xb2\x7d\x4d\xe2\x9b\x05\x8c\x0e\x11\x87\xe9\
+\xf7\xc6\x7e\xd8\x3a\x91\x63\x11\x5c\x89\xd6\x4a\xfb\x2c\x3a\x6a\
+\x15\xe7\xd1\x92\x17\xd0\x49\x7b\x93\x6f\x85\xfd\x57\xb2\xdd\xf2\
+\xc8\x2e\x64\x64\x47\x77\x85\x0d\x8e\xb7\xce\xcd\x24\xca\x33\xb3\
+\xdc\x80\x4f\xd8\xa0\x2f\xe5\xcb\x54\xd8\x3c\x2a\x41\x63\x31\x51\
+\xa6\xc6\x74\xb3\x00\x88\xb6\xbc\x34\x4b\x71\x2c\xcd\xa4\xe4\x69\
+\x12\x59\xcd\x8c\x0c\x7c\x7d\xd0\xcb\x7c\x5f\xee\xf6\xe5\x9f\xd0\
+\x46\x64\x95\x08\x80\xd4\x43\x4c\xb3\x95\x9e\x96\xb6\xb8\x05\x05\
+\xd7\xb1\x58\x15\x4a\x51\x85\x8d\x7a\x03\x70\x7c\xcd\x03\x6e\xab\
+\x7e\x07\x86\x77\x22\x52\x4e\x5b\x49\xf7\x3a\x5e\x9e\xd4\x3c\x0d\
+\x45\x49\x35\x99\xc6\x00\xc8\xdd\x9f\x47\x40\xd1\x08\x0d\x4c\xe1\
+\x0f\x9a\x95\x38\x55\x12\x08\xfc\x10\x7e\x9c\x59\x99\x7b\x35\x9f\
+\x67\xd4\xd4\x3d\x30\x73\x99\xac\x13\x40\xa2\x92\x63\x43\x61\x18\
+\x6d\x6f\x50\x30\xb3\x86\x5d\x0f\x5a\xf2\x38\xe1\xe9\x2f\xea\x07\
+\xe2\x78\xa2\x3d\xca\xd3\x14\x1a\xdd\x2c\x78\x7a\xe0\xa7\xa2\xd5\
+\xa8\x23\x21\xdc\x48\x01\x91\x7b\x01\xcf\x82\xcb\x46\x87\xcf\x18\
+\x1e\x58\x1e\x9a\xc0\x34\xa0\x2d\x7b\x5d\x13\xff\xc8\x92\x12\x42\
+\x74\x5f\x08\xf9\x51\xb9\xf9\xbf\xb3\x3f\x0a\x31\x91\xfa\x5d\xf2\
+\xac\x50\x0e\x73\xb3\x00\x9f\x91\xc9\xf1\x35\xba\x74\xd4\xd7\x72\
+\x09\xf3\x30\xb9\x64\x16\x45\x01\xa2\xbe\x30\x91\x7b\x89\x98\xe5\
+\x7b\xe0\xfb\x6f\x5a\x3d\xd1\x51\xc1\x63\xf9\xc4\x43\x98\x75\x54\
+\x98\x05\x02\x2d\x31\x42\xd8\x6b\xa9\xab\x59\xd9\xd5\xac\xac\x04\
+\x17\x75\x2d\x46\xa9\x47\xbc\x0e\xd9\x21\x2a\x8f\x46\x56\x21\x36\
+\x6c\x4a\x10\x6a\x7c\x14\xd4\x16\x65\xbe\x6b\x64\xc1\x2f\xcb\x53\
+\x0a\xfe\xa8\x88\x26\x68\xcc\x65\x78\xe1\xe8\xcf\x95\x26\xe5\x00\
+\x66\x52\x9e\x42\x74\xb5\xe8\xda\xe4\xab\x55\x21\xc0\xb0\xd3\xa3\
+\xe9\xb5\x02\x5a\x10\x84\x9d\x76\x08\xcf\xb5\xe6\xcc\x59\x43\xf3\
+\xd6\x70\x07\x98\x3d\x1c\xf6\x79\x18\x27\x28\x61\x4c\xc9\x43\x28\
+\x35\xf6\x40\xc6\xfd\x0c\x10\x33\x43\xc4\xdc\x25\xbe\x37\x02\xf4\
+\x61\x90\x7a\xc6\xbc\xcf\xe0\x30\x63\x8c\x50\xe6\x72\x3a\x99\xbd\
+\xe7\x81\xf4\x74\x5f\xc3\x98\x3c\x88\xe2\x4c\x6f\x57\xfa\xf3\x4c\
+\x5f\x03\x5b\xee\x93\x7c\x6d\xce\xda\xa3\x7d\x0d\xac\x79\x2f\xe5\
+\x6b\x84\xf9\xf8\x09\x28\xd1\xc0\x5b\x45\xec\xb9\x11\xc9\x7c\xfa\
+\x24\x94\x02\x67\x49\xe2\xe0\x11\xd6\x66\x23\x92\xf9\xec\xc5\x22\
+\xd2\x27\xf4\x9b\xf9\x92\x4f\xd8\x93\x50\x5a\x12\xf5\x1d\xf9\x92\
+\xe5\xd4\xcb\xd9\x1c\x5a\x0d\x73\xde\xba\xff\xcd\x42\x54\xef\xaf\
+\xdf\x68\x3b\x00\x5b\x4f\x73\xbe\x2f\xda\x0e\xc0\xda\x73\x9d\xef\
+\x0b\xf2\x15\xbd\xe4\x9d\xf1\x62\xd2\xdb\xe9\x9f\x9d\xaf\x94\xea\
+\x31\x85\x43\xd8\x6b\xb7\xf2\x23\x76\x89\xba\xc4\xe4\x88\x20\xad\
+\x70\x2c\x84\x09\x0d\x82\x96\x7a\x02\x2a\xf6\xad\x6e\xc7\x3a\x62\
+\x2d\x16\x20\xe6\x38\x5d\x0e\x75\x02\xaa\x6b\x91\x20\xa0\xa8\x37\
+\x59\x5f\x03\x28\x15\xcf\xe7\x80\x22\xce\x4b\x02\xc5\x2a\xa0\xe8\
+\x18\x28\xec\x58\x3e\x65\xca\x31\xfb\x40\x41\x02\x46\x09\x76\x3d\
+\x36\x40\x0b\x43\xd4\x7a\x1e\x65\x64\x80\x16\x43\x56\x80\x99\xf3\
+\x02\xc9\xda\x19\xb4\xf4\x1e\x71\x16\x2d\xf2\x4d\xd0\x0a\x2c\x87\
+\x10\x4c\xd1\x00\x2d\x95\xc3\x52\x17\xa3\x01\x58\x88\x5a\xd0\x29\
+\x2f\x18\x60\x15\x58\xd4\x0d\x98\x4b\xfd\xaf\xea\x59\x2a\x77\x3b\
+\x8b\x95\xfb\x55\xb0\xa2\x23\xac\x30\x84\xa0\x3b\x04\x8a\x5a\x01\
+\xc3\x3e\x1a\x22\x35\x16\x54\x3e\x65\x61\xf7\xfb\x9e\xaa\x82\x2f\
+\x87\x68\xfe\x54\x85\x2c\x17\xfb\x0e\x0d\xe0\x54\x45\xbe\xfb\xa9\
+\xea\xdb\x23\xeb\x3a\x2f\x10\xa8\xf3\xc8\x9a\x58\xad\xdb\xe0\xde\
+\x00\x2d\xfd\xee\xd0\x7e\x85\x35\x50\x9d\x5c\xcf\xa4\xd1\x08\xd3\
+\x61\x00\x7a\x96\xc3\x46\x11\x48\x31\x44\x2b\xe8\x19\x2d\xec\x63\
+\x49\xb5\x35\x7a\x56\xe0\x23\xc7\xc5\x2f\x3f\x5d\xea\xc3\xe0\x11\
+\xf9\x16\xec\x3c\xcc\x7b\x53\xa3\x76\x6d\xab\x22\x92\x7e\x6a\x2b\
+\x44\xaa\xae\x15\xdf\x25\xe2\xf0\xaa\x1d\xb6\xaa\x9b\xd5\xe6\x76\
+\x7c\x2d\x74\xae\x04\x60\x55\x19\x6f\xcd\x58\xe6\x32\x16\xb2\x61\
+\x31\xfd\x19\xb0\xea\x74\x4a\x95\xe6\xb0\xe3\xf9\x94\xa0\x06\xbc\
+\xae\x16\x04\xca\x7b\x62\xce\x1c\xbf\xd8\xf0\x38\x3f\x00\x82\x63\
+\xe6\x7d\x9e\xc3\xc8\x27\x3a\x95\x0f\x22\x64\x11\x8c\x3c\x8f\x4c\
+\x98\x60\xc7\xa4\xb0\x18\x52\xaf\x4b\x0e\x3a\xee\x5e\x4a\xc0\xd5\
+\x4c\xf9\x49\xc0\xa0\xf4\x4f\x63\xb6\xd8\xe4\x87\xb5\x54\xe0\xac\
+\x78\xda\xa2\xd3\x36\x55\x2c\x73\xb9\xcc\x8f\x6a\xdd\xde\x4f\xd8\
+\x71\x1e\xed\x55\xdd\xd9\xdc\x57\x33\xbb\x3b\xf6\xd5\xee\x93\x58\
+\x14\x0f\x29\x56\xcc\x33\x9a\x0f\x49\x06\xf0\x98\x75\x61\x15\x39\
+\xed\xc6\x39\x96\x68\x8a\xad\x7e\xeb\xe2\x63\x09\xb0\x40\x82\x09\
+\x64\x35\x53\xc5\xe5\x64\x7e\xf4\xa8\x77\x79\x92\xa9\x31\xf5\x7a\
+\x57\x94\x32\xff\x04\x99\xf6\x05\x76\x28\xf7\x9b\x38\x5e\x25\x69\
+\xaa\x68\x82\x50\xc2\x7a\xe3\xaf\xdc\x65\x7e\x78\x8a\xdf\xf7\x82\
+\x0a\xa3\x7a\x01\x68\x5d\x58\x83\xd4\x84\x47\x2e\x55\x70\xf0\x52\
+\xd7\x59\xef\x84\x2c\x93\x88\xa7\x6d\xf0\xec\xf2\x22\xa9\x58\x90\
+\x3e\x50\x87\x05\x78\xb8\x98\x6a\x55\x18\x12\xb3\x6e\x9d\x79\x84\
+\x99\x0d\xbc\xdd\xe7\xf0\x3a\x67\x88\xc2\x86\xc4\x5c\xe2\xa2\x59\
+\x43\xc1\x93\x0c\x9d\x19\x4f\x93\x39\xcd\x59\x61\xe8\xa5\xac\xa0\
+\x00\x12\x0c\x0a\x7b\xc0\xac\x19\xf7\xe5\x50\x23\xc8\xf2\x48\x80\
+\x1c\x7f\xd6\xd0\x0b\x4e\x8f\x3a\xb2\x04\xb4\x57\x68\xeb\xdb\x79\
+\xb9\xd9\x81\x55\x87\x10\x3a\x8f\x9b\xf7\xb4\xe9\x39\x3b\x1c\x48\
+\x16\xa9\xeb\x30\x6f\x7e\x82\x7a\xe7\xd5\x41\x14\xf7\x65\x7f\x81\
+\xf7\x77\x32\xdf\xfe\x47\x0a\x87\xb2\x8f\xa2\x2c\x93\x6c\xdd\xed\
+\x9f\xd5\x8d\xc2\xf1\xa4\x9a\x2d\x7a\xfd\x5b\x27\x99\xba\x41\x68\
+\x97\xb6\x86\x78\x1a\x12\xd5\xb5\x10\xe8\x53\xa2\x96\x3b\xa5\x9f\
+\xc6\xf4\x66\x87\x51\x19\x70\xbb\xf9\x18\x86\xd8\xee\x1e\xe0\xf4\
+\xf7\x9d\xbe\x78\x8f\x4e\xfb\xf4\xda\x70\xb7\xc3\x18\xc6\x5d\x52\
+\x24\x4b\x55\x2a\xe8\x2d\x49\x20\x9b\xa9\xfb\xa1\xb8\xa6\x36\x1b\
+\xea\x74\x1f\xd5\xf4\xad\x28\x79\xcc\x4b\xde\x6d\xaa\x0d\x05\x41\
+\x96\xd1\xac\x60\x32\x5e\x85\xbf\xbd\x7d\xd7\xd6\x2b\xa2\x28\xfc\
+\x5f\x2e\x3f\x35\x16\x21\xf3\x01\x01\xbe\xcc\xf7\xb0\x70\xb7\x35\
+\x14\x75\x31\x14\x85\xd5\x45\xd4\x6d\xb2\x85\xd5\x51\x5d\x0a\xfe\
+\xeb\xb8\x4d\x61\x7b\x6f\x19\x03\x61\x35\x67\x9d\xd2\x4a\xad\x14\
+\xd5\xa5\xdf\xec\x3d\x69\x1c\x6d\x13\xd5\xc8\xfe\x58\xc2\xaa\xfd\
+\x5e\x19\xe9\xd5\x55\x6a\xa5\x49\x99\x8a\xdb\xf7\xfa\x12\x4c\x5b\
+\xae\x08\x03\x19\x18\xb0\xb8\xc5\x8e\xc3\x4c\x07\x99\x0e\xd5\x62\
+\x9a\x36\x90\xd2\x57\xae\xb9\xbc\xed\x75\x51\x41\xf1\xe3\xba\xad\
+\xa3\x4c\xed\x7e\xe0\xbb\xdc\xf8\x99\xa7\x7c\xcb\xb3\x58\x8a\x64\
+\xae\x07\x6a\x7e\xa6\x7a\xb4\xe4\xc4\xa4\xd2\x5c\x01\x72\x5b\xe3\
+\x51\x5d\x11\xee\x64\xfe\x17\xa4\x91\x0a\x18\xdd\xb0\x96\x19\xb6\
+\xdb\x2f\x95\xcc\xc0\xb0\x82\xf8\x27\xbe\x1e\x75\x5f\x51\xd3\xe4\
+\x56\x5d\x1f\x5e\xdb\xf5\xcb\xac\x04\x3f\xcf\x4e\x6a\xd4\xcf\xc9\
+\x40\x3a\x53\x24\x77\xe2\xbc\xd0\x41\x26\xe5\x67\x44\x52\x58\x01\
+\x84\x9c\x93\xa9\x68\x83\x51\x56\x18\x8d\xf1\x50\xb3\x09\xfd\x15\
+\x59\xf1\x79\x37\x9c\xbb\x7f\xaf\xdb\x16\xe0\xa3\x4b\x78\x8e\xf3\
+\x2d\x4f\x32\xbb\x5f\xe9\xb3\xeb\xd0\xe9\x87\xd2\x87\xb1\xc5\x5e\
+\x34\x3d\xdd\xd8\x70\x34\x3b\x21\x21\x42\x8a\x67\x8d\x26\x2b\x2e\
+\x7e\x13\xe0\x57\xf1\x5e\x5f\x35\x0f\x03\xeb\xcb\x75\xbf\x4d\x20\
+\xff\x4a\x96\xfb\xaf\xa2\x5b\xc8\xe4\x4e\x33\x14\xd8\xc5\x78\x06\
+\x6a\xc4\x9b\x8a\x68\x6f\x79\xbb\xb6\x9b\xf5\x4f\xbf\xad\x27\x99\
+\x64\xbe\xdf\x6d\xf3\x58\xd4\x69\x77\x93\x07\xc6\xf5\xbb\x3b\x4e\
+\x0c\x53\xbe\x14\x90\x4d\x7e\xd4\x79\x61\x9b\x76\xea\xfa\x6e\x9c\
+\x14\x3b\x68\x14\x26\x99\x3a\xbe\x35\x4b\xed\x8e\x97\x9b\x76\xaf\
+\x19\xde\x8e\x73\x19\x75\xdb\x50\xa5\xa3\x2b\xb1\x23\xf7\x6a\x58\
+\x2b\x56\x69\x6c\x08\x4b\xe5\xeb\x8b\xe9\x45\xf1\x1b\xcd\xed\xd5\
+\xad\xf5\xab\xdc\xa7\x22\x14\x77\x22\xcb\xe3\xf8\xaa\xca\x8d\xc3\
+\x2c\xcf\x44\xfd\x5c\x25\xef\x20\x5c\xbf\xaa\x5e\xc3\x18\x43\x98\
+\xc1\xb2\x4f\xfb\x0b\x12\xed\x10\x26\x4f\xc8\xab\x2d\x97\x9f\x84\
+\xac\x94\x54\xcf\x66\x51\x72\x59\x0e\x28\xdb\x24\x1e\xbc\x8b\x2c\
+\x1e\x98\xd5\xaa\xd2\x04\x7e\x42\xe4\x34\xc4\x98\x43\xaa\x2d\x25\
+\xc0\xd7\x17\x55\xd4\xaa\x12\x1e\xb6\x92\xdd\x20\xf5\x76\x99\xa4\
+\xea\xa5\xde\x39\xaf\x86\x73\x70\x95\x43\x66\xb4\x4a\xf3\x43\xc3\
+\x1f\xe4\x26\x6a\x66\x00\xbc\x6e\xfb\x6d\xa7\x67\xbe\x9e\xd0\xb1\
+\x67\x8b\x05\x2d\x5b\x1e\xfb\x65\x83\x29\x1b\x5a\xfb\x16\x09\x98\
+\x1f\xf4\xca\x75\xd0\x9f\x5f\x0d\x0a\x29\x02\x9c\x93\x18\x31\x5a\
+\xf5\xc6\x8f\x46\xab\xcb\x68\x9b\x19\x8e\x81\xe0\x6b\x04\x16\x82\
+\x94\xd8\xf7\xdd\xcb\x47\x36\x98\xb3\x70\xdf\xa5\x58\xd3\x93\xbd\
+\x45\x3d\x07\x51\xda\xd6\x63\x5c\xea\xd1\x4b\x13\x61\xcb\x63\x14\
+\xb1\x4b\xac\xca\xec\x2e\xe9\x15\x08\xdb\x48\x91\x7f\x46\xc7\x51\
+\x26\xd3\xe7\x9d\x46\xf9\xcc\xfa\x59\xf1\x39\x39\x9d\xd7\xf1\xf9\
+\xe3\xb3\x43\x13\x82\x45\xa8\xf0\x84\x93\x65\xd4\xff\x8c\x23\xb5\
+\x0b\xc7\x69\xc1\xfa\xf1\xe1\x38\xaf\xc0\x7d\xf3\xfc\x10\x9d\x06\
+\x19\x3d\x1f\x63\xdd\x55\xfd\xc0\x17\x09\xbd\xa4\x96\x6b\x7c\x30\
+\xe0\x17\xe9\x07\x04\xf3\x5f\xd7\x83\x6b\x02\xb3\x82\xc0\x71\xc1\
+\x0d\x08\xd1\x04\xf0\x29\xb7\xff\x3c\x90\x56\x3f\xc3\xe7\x4a\xae\
+\xb2\x73\x6f\xfc\x5a\x35\x0f\x3a\x4d\xea\x84\x04\xcf\xea\x72\x02\
+\xbc\xd0\x67\x0d\xa1\x95\xbb\x37\xa6\x01\x0d\x3e\xdd\x9d\x35\x1e\
+\x3d\xc3\x33\x7a\x7a\xb1\xab\x01\x61\x70\x90\xc2\xae\x8f\xa1\xe3\
+\x4e\xdd\x73\xe8\x86\x5b\x8d\xc7\x19\x3e\x36\x12\x9e\x05\xc1\x89\
+\x3d\x72\xa9\xe3\x8e\x05\xc1\x80\x48\xb0\x45\x03\x27\xf0\x6b\x2c\
+\xbd\x80\x78\xbe\x37\xa0\x06\x96\x1f\x04\x34\x70\x69\xa3\x71\xd4\
+\x89\x1e\x00\x8d\x5b\xc2\xf9\xcc\x2c\x92\x7b\x11\xba\xb0\x80\xb1\
+\x80\x04\x98\xee\x8e\x57\x15\x59\x89\xc0\xf0\x21\x4f\x4f\x2b\xca\
+\x1d\x97\x09\xcf\xca\x01\xed\xa0\x0b\x36\xe1\x32\x4f\xe3\xa6\x99\
+\x14\x65\xb4\x69\x84\xf4\x7f\x41\x83\x2c\x70\x9d\x85\x7a\xed\xbf\
+\x52\x0e\x58\x97\x79\x42\x84\xdd\x7f\x5e\xa9\xdc\x0e\x4e\x36\xa6\
+\x8a\xdb\x30\x95\x66\xb9\xac\x1b\x65\x11\x1c\x21\xeb\x56\xdd\x4e\
+\xe7\x55\x5b\x9b\xf6\xc9\x51\xdc\x9c\x8d\x12\xe7\xbb\x44\xc9\x78\
+\x8b\xd1\x10\xad\xf8\x36\x49\x4f\xe1\x4f\x90\xe1\x00\x58\x7c\x6b\
+\xfc\x57\x48\x6e\x7c\x84\xd5\xf4\x01\x5f\x1c\xef\xf6\xc4\xa7\x0c\
+\xd6\x51\xff\x61\x28\x9e\xb6\x84\x60\xef\xff\x60\x09\x41\xbe\x15\
+\x78\xcc\xf7\xfd\x4b\x1c\x58\x14\x21\x86\x70\xe5\xff\xd4\x03\xa7\
+\x56\xc4\x61\x90\x30\xed\xed\x88\xe9\x78\x98\x69\x3b\x1b\xee\x24\
+\x98\x6e\xb1\xa3\x08\xef\xef\x31\xd7\xea\xcc\x7a\xfb\xea\x6f\xef\
+\x35\x8e\x40\
+\x00\x00\x0a\xa1\
+\x00\
+\x00\x2a\xc9\x78\x9c\xcd\x5a\xeb\x8f\xdb\x36\x12\xff\x9e\xbf\x42\
+\xe7\xe0\x80\x04\x67\x3d\xf8\xd0\x73\x1f\x45\xda\x20\x45\x81\xf4\
+\xee\xd0\x24\x77\x1f\x03\x5a\xa2\x6d\x25\xb2\x64\x50\xf2\xda\xde\
+\xbf\xfe\x86\xd4\x8b\xb2\xb4\xce\x7a\xb3\x69\x6f\x17\xcd\x4a\x33\
+\xc3\x19\xce\x8f\xc3\xe1\x70\xd4\xeb\x9f\x0e\x9b\xcc\xb8\xe3\xa2\
+\x4c\x8b\xfc\x66\x86\x2c\x67\x66\xf0\x3c\x2e\x92\x34\x5f\xdd\xcc\
+\x3e\x7d\x7c\x67\x06\x33\xa3\xac\x58\x9e\xb0\xac\xc8\xf9\xcd\x2c\
+\x2f\x66\x3f\xdd\xbe\xb8\xfe\x9b\x69\x1a\xbf\x08\xce\x2a\x9e\x18\
+\xfb\xb4\x5a\x1b\xbf\xe5\x5f\xcb\x98\x6d\xb9\xf1\x6a\x5d\x55\xdb\
+\xc8\xb6\xf7\xfb\xbd\x95\x36\x44\xab\x10\x2b\xfb\xb5\x61\x9a\x30\
+\xb2\xbc\x5b\xbd\x30\x0c\x03\xcc\xe6\x65\x94\xc4\x37\xb3\x46\x7e\
+\xbb\x13\x99\x92\x4b\x62\x9b\x67\x7c\xc3\xf3\xaa\xb4\x91\x85\xec\
+\x59\x2f\x1e\xf7\xe2\xb1\x34\x9e\xde\xf1\xb8\xd8\x6c\x8a\xbc\x54\
+\x23\xf3\xf2\xa5\x26\x2c\x92\x65\x27\x2d\x27\xb3\x27\x4a\x08\x85\
+\x61\x68\x3b\xd8\xc6\xd8\x04\x09\xb3\x3c\xe6\x15\x3b\x98\xc3\xa1\
+\x30\xc7\xa9\xa1\xd8\x71\x1c\x1b\x78\xbd\xe4\xe3\xa4\xa2\x43\x06\
+\x48\x3c\x38\x19\xc5\xd5\xad\x03\xfa\x5b\xf8\xaf\x1b\xd0\x12\xac\
+\xb2\xd8\x89\x98\x2f\x61\x24\xb7\x72\x5e\xd9\x6f\x3f\xbe\xed\x98\
+\xa6\x63\x25\x55\xa2\xa9\x69\xc1\x1f\xd8\x1d\xac\x48\xce\x36\xbc\
+\xdc\xb2\x98\x97\x76\x4b\x57\xe3\xf7\x69\x52\xad\x6f\x66\x34\x50\
+\x6f\x6b\x9e\xae\xd6\x55\xf7\x9a\x26\x37\x33\xf0\x0e\x11\xc7\x53\
+\xef\xad\xfd\xa8\x0b\x22\xc7\x22\xb8\x16\x6d\x94\xea\x2c\x7a\x32\
+\x2a\x29\xe2\x05\x2b\x61\x92\xf6\xba\xd8\x70\xfb\x4b\xba\xd9\xb0\
+\xd8\x2e\x45\x6c\xc7\x77\xa5\x0d\x81\xb7\x2a\xcc\x34\x2e\x72\xb3\
+\x5a\x43\x4c\xd8\xa0\x2f\x63\x8b\x8c\xdb\x2c\xae\x40\x63\x39\x52\
+\x26\x7d\xba\x99\x01\x44\x1b\x56\x99\x15\x3f\x54\xe6\xa2\xc8\x12\
+\xab\x5d\x8f\x41\xa4\x0f\xe6\x58\xec\xaa\xed\xae\xfa\x0c\x23\x78\
+\x5e\x8b\x00\x44\x1a\x5e\x8a\x2d\xf5\x74\xb4\xd9\x2d\x28\xb8\x4e\
+\xf8\xb2\x94\x8a\x6a\x64\xe4\x1b\x40\x13\x28\x1e\x70\x3b\xf5\x5b\
+\x30\xbc\xe5\xb1\x0c\xd9\x5a\x5a\x9b\x76\x75\x94\xab\x34\x14\x25\
+\xf5\x52\x1a\x03\x18\xb7\x9f\x0f\x80\xa1\x11\x19\x98\xc2\x3f\x68\
+\x52\xe2\x58\x4b\x20\x88\x42\xf8\xe3\x4c\xca\xdc\xcb\xd5\x3c\xa3\
+\xa6\x99\x81\x59\x88\x74\x95\x02\x12\xb5\x9c\x37\x14\x06\x6f\x35\
+\xa7\x60\x5d\x0d\xbb\x71\x1a\xe2\x99\x33\xf1\xab\x60\x49\x0a\xbb\
+\x78\xa4\x3d\x2e\xb2\x0c\x06\xdd\xcc\x58\xb6\x67\xc7\x72\xa0\x71\
+\x38\x14\xe3\xa0\x45\x12\xd4\x96\x55\xb1\x6d\x65\x01\xbd\xea\x98\
+\x01\x6a\x92\x68\x82\xc6\x42\x44\x2f\x1d\xf5\x73\xa5\x48\x05\xc4\
+\x75\x5a\x1d\x23\x74\x35\xeb\xc7\x14\xcb\x65\xc9\xc1\xb0\xa3\xd1\
+\x54\x3c\xc3\x08\x8c\x43\xa7\x73\xe1\xa9\xd6\x9c\x29\x6b\x68\xda\
+\x1a\xee\x01\xb3\x87\x6e\x9f\x87\x71\x02\x25\x4a\x1e\x42\xa9\xb7\
+\x47\xdd\x6f\x00\x31\xe1\x22\x66\x2e\x09\xfc\x13\x40\x1f\x06\x49\
+\x33\xe6\x7f\x03\x87\x09\x63\x84\x7a\x2e\xa3\xa3\xd5\x7b\x1a\x48\
+\x4f\x89\x35\xf2\x20\x8a\x13\xb3\x5d\xaa\x9f\x27\xc7\x1a\x71\x2f\
+\x8a\xb5\x29\x6b\x17\xc4\x1a\xf1\x9f\x2b\xd6\x88\x17\xe0\x0b\x50\
+\xa2\xa1\xbf\x8c\xbd\x27\xa2\x04\xb6\xe8\x45\x28\x85\xce\x82\x24\
+\xe1\x23\xac\x4d\xa1\x04\xd6\xbc\x67\xdb\x91\x01\xa1\x7f\x5a\x2c\
+\x05\xc4\xbb\x08\xa5\x05\x91\xbf\x27\xb1\x64\x39\x4d\x3a\x9b\x42\
+\xab\x65\x4e\x5b\x0f\xfe\xb4\x2d\x1a\x78\xde\x25\xc1\xf7\x5d\xc7\
+\x01\xd8\xba\x2c\xf8\xbe\xeb\x38\x00\x6b\x4f\x0d\xbe\x6f\xc1\xa8\
+\xaa\xcb\x68\x2d\x38\x54\xc3\x2f\x27\x36\xf3\x99\x28\xa6\x7e\x7f\
+\x66\xac\x1a\xe2\xa7\x3c\xad\xa0\xec\xdd\x95\x5c\x7c\x90\xa5\xe3\
+\xbf\xf2\x4f\x25\xef\x8d\x21\x28\x16\x42\x0b\x61\xf8\xe9\xfd\x3c\
+\x02\x95\x10\x8b\x92\x20\x08\xc2\x5e\x16\x03\x16\xd4\xc2\xa1\x47\
+\x3c\xd2\xcb\x02\xd5\xb3\xe0\x2c\x20\x61\x48\xbe\xbb\xa4\x38\xe3\
+\xbc\x3a\x35\xcf\x3a\xef\x3f\xc1\x79\x14\x5a\x61\x10\x50\xd8\xfe\
+\x03\xe7\x29\x50\x09\x76\x87\xbe\x8f\x45\x95\xef\x40\x41\xae\xeb\
+\xfe\x50\xdf\x03\xcd\xea\xa4\xef\xe1\x85\xbe\xb7\x52\x1f\x05\xcb\
+\x4b\x59\x7d\xdf\xcc\x2a\xf9\x98\xc1\x0d\xf1\x95\x33\x37\xc9\xeb\
+\x53\x98\x82\x10\xf9\x21\x1e\xc0\x84\x3c\x0b\x21\xea\xe1\x60\x80\
+\x13\x41\x56\xe0\x7a\x3e\xf2\x06\x38\xf9\xd8\xf2\x03\xc7\xa5\xc1\
+\x8f\x8d\x11\x72\x3e\x46\x02\xf4\x9c\x38\x99\x68\x6e\xd2\x21\x50\
+\x5a\xcc\x48\x84\xb0\x6f\x0d\x83\x08\x7b\x96\xe7\x93\xd0\xf3\x07\
+\xe0\xa0\xbe\x92\xbd\x96\x06\x59\xf6\x9c\xa8\xa8\x34\xac\xa3\x32\
+\x34\x81\x69\xe8\x7c\x3f\x2a\x70\x7d\x13\xe9\xe1\x15\x9a\x3b\xf2\
+\xd7\x72\x89\xe7\x63\x32\x27\x96\xef\x3a\x90\x96\xb8\x89\xe8\x1c\
+\xc2\x25\xf0\xe1\x1a\xda\x23\x16\x1f\xe4\x5d\xc5\x0a\x88\x8f\x70\
+\x1f\x2e\x31\x5c\x89\x08\xec\x2b\x8c\x10\xee\x71\x5a\x4e\xca\x2e\
+\x27\x65\x05\x40\xea\x5a\x1e\xa5\xbe\x5e\x49\xfd\x15\xc8\xd2\x1f\
+\x85\x2c\xf8\x8c\x42\x44\x03\x40\xd6\xfd\xcb\x91\xfd\x11\x3b\x39\
+\x08\xce\xed\x64\xac\x21\xab\xf6\xdd\x30\x81\x53\x6c\x9d\x64\x6f\
+\x3c\x4c\xdb\xe0\x99\x07\x59\x5b\x4b\x5d\xdf\xbb\x3e\x8e\x15\xfa\
+\x1e\x0a\x9b\x55\xa2\x8e\x47\x7c\x5f\x2e\x97\x8f\x28\x0e\xe7\x80\
+\x2f\xb0\xa9\xff\xba\x01\xed\xda\x96\x9d\x07\xf5\xd4\xb5\x15\x64\
+\x2b\x24\xb9\x4b\xf9\xfe\x45\xe7\xb5\x6c\xb5\x34\xb6\xb7\x6c\xc5\
+\x55\xe9\x02\x58\xd5\x05\x68\xc3\x58\x14\x22\xe1\xa2\x65\x79\xea\
+\x67\xc0\x6a\xaa\x1b\xd9\xcd\x41\x81\x43\x42\xdc\xa5\xe6\xbe\x81\
+\x00\xca\x35\x31\x67\x8a\x5f\xae\x59\x52\xec\x01\xc9\x53\xe6\x7d\
+\x51\x6c\xfa\x32\xa9\x5f\x75\x08\x2b\x13\xa9\xd0\x74\x9c\xd1\x20\
+\x19\x8a\xd4\x87\xca\x03\xb9\xfe\x68\x3a\xf1\x4e\x08\x00\xd9\xcc\
+\xd8\x91\x83\x53\xea\x4f\xbb\x9c\xe5\xba\xd8\xaf\x84\x04\x67\xc9\
+\xb2\x0e\x9d\x6e\xa8\x64\x99\x8b\x45\x71\x90\x89\x7a\x37\x62\x27\
+\x45\xbc\x93\xad\x4a\x73\x57\x2f\xf3\xf6\xa0\xab\xdd\xa5\x09\x2f\
+\x1f\x52\x2c\x99\x67\x34\xef\xd3\x1c\xe0\x31\x9b\x5e\x1c\x72\x28\
+\x7d\x40\xa2\xed\xcf\x05\x28\x78\x40\x02\x2c\x90\x70\xb4\x06\x0d\
+\x53\x6e\xcb\x11\x4f\x79\xbd\x2d\xd2\x5c\xfa\xa4\xcd\xae\xac\x44\
+\xf1\x15\x0a\xdf\x97\xd8\xa1\x2c\x68\xb7\xf1\x32\xcd\x32\x49\xe3\
+\x84\x12\x4f\xf3\xbf\x0e\x97\x69\xf7\x24\x5f\x8f\x82\x1a\xa3\x66\
+\xff\x77\x21\xac\x40\x6a\xf7\x4a\x21\xe4\x4e\x61\x95\x6a\xce\xdd\
+\x71\x51\xa5\x31\xcb\xba\x9d\xb4\x2d\xca\xb4\x66\x41\x51\x09\xdb\
+\x25\xc4\xc3\x54\xaa\x54\x61\xec\x6a\x69\xe6\x11\x66\xd6\xf0\x76\
+\x5f\xc0\xeb\x94\x21\x8a\x2c\xd7\x73\x89\x8b\x26\x0d\x85\x17\x19\
+\x3a\xe3\x0f\x14\xd4\x0e\x21\x98\x4e\x59\xf1\xd0\x73\x59\x91\xe5\
+\xa8\x47\x43\x4c\x26\xcd\xb8\xcf\x87\x1a\xd4\x73\x50\xb1\x20\x27\
+\x98\x34\xf4\x8c\xcb\x83\x03\xcb\x0d\xa9\xd6\xf7\xd2\xed\x3c\xdf\
+\xea\x50\x0b\x11\x42\xa7\x71\xf3\x2f\x5b\x9e\xb3\xee\x40\x58\xbb\
+\x1e\x42\x93\xc1\xa6\xdf\x1e\x07\x9b\x58\x97\xfd\x15\xde\xdf\x89\
+\x62\xf3\x6f\xc1\x1d\xea\x7d\xe0\x55\x95\xe6\xab\xfe\xf4\xac\xbb\
+\xd0\x87\xa3\x1c\x36\xd3\xa6\xb7\x4a\x73\xd9\x75\xee\x32\x5b\x4b\
+\x3c\x0e\x89\xf2\x43\x02\xe8\x93\xa2\x96\x3b\xa6\x1f\x4f\xe9\xed\
+\x01\x23\x6f\xcd\xdd\xd9\x63\x18\x7c\xb3\x7d\x80\xa3\x9d\x27\x58\
+\x17\xd7\xe8\x54\xa7\x37\x86\xe5\x01\xd3\x9e\x91\xe3\xa3\x51\xd1\
+\x37\xbc\x62\x09\xab\x58\x7f\x4e\xb6\x14\x44\x00\xef\xb6\xdc\x4b\
+\x96\xd1\x1f\x6f\xdf\x75\x1d\x81\x38\x8e\xfe\x5b\x88\xaf\xad\x45\
+\xa8\x65\x40\x80\x2d\x8a\x1d\xe4\xe2\xae\x4b\x21\x3f\x10\xc4\x51\
+\xfd\x39\xe2\x36\xdd\x40\xc2\x93\x9f\x86\xfe\x71\xd8\x64\x70\x62\
+\x77\x8c\x81\xb0\x5c\x87\x5e\x69\xad\x56\xf0\xfa\xd3\xcf\xe4\xd7\
+\xb2\x24\xde\xa4\x72\x90\xfd\xa1\x82\x44\xfc\x9b\x34\xa2\x75\x2e\
+\x1a\xa5\x69\x95\xf1\xdb\x9f\x8b\x2c\x51\x76\xeb\xd7\x81\x04\xb8\
+\xcb\x6f\xb1\xe3\x78\xa6\x83\x4c\x87\x2a\x31\x45\x1b\x48\xa9\xcf\
+\x6e\x85\xb8\xd5\x26\x28\x81\x78\xb3\xea\xfa\x14\x63\xab\xef\xd9\
+\xb6\x30\x7e\x61\x19\xdb\xb0\x3c\x11\x3c\x9d\x9a\x81\x5c\x9d\xb1\
+\x1e\x25\x39\x32\x29\x35\xd7\x70\xdc\x36\x68\xd4\x9f\x89\xb6\xa2\
+\xf8\x02\x65\xa1\x84\x45\x0d\x6c\x64\x86\xe3\x76\x0b\x29\x33\x30\
+\x2c\x01\xfe\x99\xad\x4e\xa6\x2f\xa9\x59\x7a\x2b\x3f\x21\x5d\xdb\
+\xcd\xcb\xa4\x04\x3b\xcf\x5e\x28\xcc\xcf\x49\xec\x45\x5a\xf1\xf3\
+\x22\x19\x6c\x56\x2e\xa6\x64\x6a\xda\x60\xfa\xb5\xf3\xa7\x8e\xca\
+\x65\xca\xd2\x98\xe7\xe5\xb7\xa3\x6b\xea\xe3\x6a\x33\xb6\x84\xd0\
+\x5b\xc0\x73\x52\x6c\x58\x9a\xdb\xa3\x40\x8b\x21\x7d\x89\x74\xb1\
+\xbb\x34\x48\xde\xc8\xd0\x60\xa5\xf1\xcf\x34\x2b\xcb\x22\xbf\x34\
+\x46\xc6\x56\x95\xac\xdc\xa0\xfa\x86\x7d\x7f\x0a\x80\xb6\x67\x2f\
+\xf7\x7d\x08\xee\x96\x0b\xd8\x87\xe5\x93\xc0\xcd\xcb\x97\x7f\x70\
+\x88\xdf\x64\xa7\x3e\x6b\x0e\x51\xfd\x7e\xdd\x6f\xd3\xb2\x86\xe7\
+\x47\xe8\xe6\x22\xbd\x53\x0c\x09\x76\xa9\xf7\x4c\xed\x1e\xf1\xb6\
+\xb3\xa9\x25\xd1\x6b\xbb\xcd\xb2\xea\x6d\x35\x2a\x41\x8b\xdd\x76\
+\x53\x24\xbc\xa9\xd7\xdb\x02\x32\x39\xa9\xdf\xbb\x01\x19\x5b\x70\
+\x28\x43\x3f\xa8\x82\xb2\xab\x57\x55\x9f\x36\x49\xcb\x2d\x0c\x8a\
+\xd2\x5c\x5e\xfb\xda\x84\xbe\x65\xd5\xba\x3b\xa5\x86\xdf\x62\x99\
+\x88\xfb\x03\xac\xd6\xd1\xb7\xca\xf1\xd5\xb0\xe5\x2b\xcb\xdf\x08\
+\xf2\xf1\xab\x97\xe3\xeb\xfa\x6b\xc5\xd5\xda\xcf\xea\x55\xec\x32\
+\x1e\xf1\x3b\x9e\x17\x49\x72\x55\xd7\xd4\x51\x5e\xe4\xbc\x79\xae\
+\x8b\x7e\x10\x6e\x5e\xe5\xa4\xc1\xc5\x08\x16\xb0\xd2\x69\x5f\xa0\
+\x40\x8f\x60\xed\xb8\xb8\xda\x30\xf1\x95\x8b\x5a\x49\xfd\x6c\x96\
+\x15\x13\xd5\x80\xb2\x49\x93\xc1\x3b\xcf\x93\x81\x59\xa5\x2a\x4b\
+\xe1\x4f\x84\x9c\x96\x98\x30\x28\xd1\x85\x00\xf4\x74\x51\x49\xad\
+\x1b\xda\x51\x27\xd9\x3b\x79\x97\x96\xe9\x22\xcd\xe4\x8b\x7a\xcc\
+\xf8\xd5\x70\x09\xae\x0a\xa8\xa8\x96\x59\xb1\x6f\xf9\x83\xa2\x46\
+\x2e\x0c\x80\xd7\x9f\xf2\xdd\xea\x4c\xb7\x21\x7a\xf6\x64\x8f\xa1\
+\x63\x8b\x83\xde\x6d\x18\xb3\x61\x74\x60\x91\xd0\x0b\x42\xd2\x17\
+\x8d\x30\x9f\xdf\x0d\x0a\xb5\x05\xdc\xaf\x3c\x62\x74\xea\x8d\x37\
+\x46\xa7\xcb\xe8\x86\x19\x8e\x81\xe0\xd7\x08\x2d\x04\xa5\x74\x10\
+\xb8\xf3\x47\x0e\x98\xb2\x70\xdf\xd7\x66\xe3\xf6\x8d\x45\x7d\x07\
+\x51\xda\x75\x71\x5c\xea\xd3\xb9\x89\xb0\xe5\x7b\x14\x79\x73\xec\
+\x58\x21\x72\x89\xd6\x4e\xec\x36\x8a\xf8\x1c\x0f\xef\x9c\x43\xde\
+\xb1\xe1\xb5\x45\xd3\xea\x49\xdb\x73\x74\x5b\x6d\xb6\xe7\x9b\xc7\
+\xec\xcc\xd5\xa0\xc4\xc5\xd4\xa3\x53\x48\xe8\x0d\x66\xf0\xb3\x4b\
+\x3b\xfa\xbe\xd6\x02\x0a\xfb\xfa\x47\x69\xb5\xac\x28\x90\xd0\x19\
+\xef\x0d\x32\x27\xbe\x7a\x40\xfd\x93\x6b\x61\x4c\x61\x1d\xe6\x70\
+\x61\x51\x32\x00\x2d\x41\x5e\x48\x3b\x82\xdb\xca\xd2\xee\x89\x38\
+\x8d\x46\xec\xb7\x0f\xa8\x79\x68\x8c\xdd\x1b\xbf\x1b\x98\xce\x43\
+\xc9\x0a\xe1\x82\x42\x7c\x77\x8e\x49\x23\x21\x2f\xae\xb8\x7b\x57\
+\x62\xf7\x86\x36\xeb\x06\xb5\x3e\xe3\x8c\xbf\xd8\x3c\x3e\xe3\x4c\
+\x2b\xf0\x5f\x3f\x3d\x0b\x8d\xf3\x08\x1d\x25\x07\xdd\x9b\xae\x1c\
+\x87\x38\x92\x89\xb7\xbc\x99\xc5\xc3\x1f\xfd\x38\x19\xae\x6b\x0b\
+\x05\x9c\xfc\x66\x99\xde\xf3\xc8\x85\xbc\xe0\x85\x24\xc4\x74\x7b\
+\xb8\xaa\xc9\x52\x04\x94\x43\x8d\x9d\xd5\x94\x3b\x26\x52\x96\x57\
+\x03\xda\x5e\xf5\x4f\x22\x59\xa7\xb5\xc3\x04\xaf\xe2\x75\x2b\xa4\
+\xfe\x27\x22\x96\xa5\xab\x3c\x52\x29\xf5\x4a\x3a\xdd\x74\x5d\x22\
+\x84\xdd\xbf\x5f\xc9\x02\x0e\x6e\x1a\xa6\xdc\x0e\x51\x26\xcc\x6a\
+\xd1\x0c\xca\x63\xb8\xd1\x35\xa3\xfa\xf3\xc3\xaf\x4f\x0c\x95\x4e\
+\x4f\xd6\xea\xec\xca\x84\x3f\x66\x65\xa6\x13\x7c\x3f\xa7\x93\xcc\
+\xad\x20\x5a\xb2\x4d\x9a\x1d\xa3\x9f\xa1\x6e\x00\xb0\xd8\xc6\xf8\
+\x0f\x17\xcc\xf8\xc0\xf2\xf2\x74\x8b\x51\x8b\x7a\x84\xc2\xfd\x58\
+\x26\xc2\x26\xc8\xbd\x30\x80\x9b\xec\xbc\xde\x45\xb0\x09\x08\x75\
+\x5d\x8f\x36\xef\x14\x62\xdf\x83\x55\xf4\xdb\x01\x04\x92\xa6\xef\
+\xf9\x7e\x4f\x00\x89\x39\x69\x36\x15\xd5\x9e\xb1\x85\x3d\x17\x79\
+\x6e\x2b\x78\x62\x7b\xb0\x93\xba\xb4\x40\x1c\xfa\xd8\x90\x3c\x13\
+\x8c\x0f\x0c\x9b\x36\xe8\x8d\xf2\x90\x67\x05\x01\xc2\x01\x96\x7d\
+\x5d\xe5\x22\xb2\x10\x0a\x7c\x48\x19\x0d\x01\x52\x41\x03\xdf\x50\
+\x74\x2a\x3b\x3c\x2a\xd2\x2e\xcb\x0a\x01\xfa\x7f\x88\x3d\xed\x0b\
+\xf9\xaa\x3b\x9b\xae\xe5\x85\xfa\xf6\xc5\xff\x00\xbd\x88\x2d\xe7\
+\
+\x00\x00\x08\xbe\
+\x00\
+\x00\x1e\xe0\x78\x9c\xe5\x58\xeb\x8f\xdb\x36\x12\xff\x9e\xbf\x42\
+\xe7\x05\x0e\x09\xce\x92\xf8\xd0\x83\xd4\xae\xb7\xe8\x35\x68\xd1\
+\x43\xae\x05\x9a\x04\xf7\xb1\xa0\x25\xda\x56\x56\x96\x0c\x4a\x5e\
+\x7b\xf7\xaf\xbf\x21\xf5\xb6\xe5\xac\x37\xd7\x7e\x38\xd4\x41\xd6\
+\xd2\xcc\x8f\x33\x9c\x07\x87\x33\xbe\xfb\xee\xb8\xcd\xac\x47\xa9\
+\xca\xb4\xc8\x17\x33\xec\xa0\x99\x25\xf3\xb8\x48\xd2\x7c\xbd\x98\
+\x7d\xfe\xf4\xa3\xcd\x66\x56\x59\x89\x3c\x11\x59\x91\xcb\xc5\x2c\
+\x2f\x66\xdf\xdd\xbf\xb9\xfb\x9b\x6d\x5b\x3f\x28\x29\x2a\x99\x58\
+\x87\xb4\xda\x58\x3f\xe7\x0f\x65\x2c\x76\xd2\x7a\xbb\xa9\xaa\x5d\
+\xe4\xba\x87\xc3\xc1\x49\x1b\xa2\x53\xa8\xb5\xfb\xce\xb2\x6d\x58\
+\x59\x3e\xae\xdf\x58\x96\x05\x6a\xf3\x32\x4a\xe2\xc5\xac\xc1\xef\
+\xf6\x2a\x33\xb8\x24\x76\x65\x26\xb7\x32\xaf\x4a\x17\x3b\xd8\x9d\
+\xf5\xf0\xb8\x87\xc7\x5a\x79\xfa\x28\xe3\x62\xbb\x2d\xf2\xd2\xac\
+\xcc\xcb\x9b\x01\x58\x25\xab\x0e\xad\x37\x73\xa0\x06\x84\x39\xe7\
+\x2e\x22\x2e\x21\x36\x20\xec\xf2\x29\xaf\xc4\xd1\x1e\x2f\x85\x3d\
+\x4e\x2d\x25\x08\x21\x17\x78\x3d\xf2\x3a\x54\x74\xcc\xc0\x13\x17\
+\x37\x63\xb8\x43\xed\xe0\xfd\x1d\xfc\xef\x16\xb4\x04\xa7\x2c\xf6\
+\x2a\x96\x2b\x58\x29\x9d\x5c\x56\xee\xfb\x4f\xef\x3b\xa6\x8d\x9c\
+\xa4\x4a\x06\x62\x5a\xe7\x8f\xf4\x8e\x22\x92\x8b\xad\x2c\x77\x22\
+\x96\xa5\xdb\xd2\xcd\xfa\x56\x64\x94\x14\xb1\xc6\x2c\x66\xeb\xc2\
+\xce\xe5\xb1\x72\x5a\xb3\x86\x88\xa5\x28\x01\xe1\x6e\x8a\xad\x74\
+\xab\x74\x2d\x55\xe5\xc6\x8f\xa5\xbb\x52\x52\x26\xb2\x7c\xa8\x8a\
+\x9d\x51\x06\x39\x04\x52\xd2\xb8\xc8\xed\x6a\x03\xe1\x75\x41\x5f\
+\x26\x96\x99\x74\x45\x5c\x41\xf2\x95\x46\x70\xbb\x8f\xa8\x4b\x49\
+\xe4\x78\xc1\x58\xe7\x80\x45\x49\xbd\x2a\x59\xcc\x60\x6b\x18\x53\
+\x84\x0c\x61\x23\xd3\xf5\xa6\x5a\xcc\x3c\x66\x5e\x0f\x69\x52\x6d\
+\xba\xb7\x4e\x87\x3c\xee\x0a\x55\xd9\xab\x34\x93\xb5\x99\xb5\x11\
+\x5f\xd2\xed\x56\xc4\xee\xfb\x7a\xf3\xee\x21\x05\x84\xb3\xcb\xd7\
+\x93\x8b\x8f\xc9\x0e\x02\xc5\x91\x83\xcc\x67\x12\xf3\x34\x81\x19\
+\x1d\xb9\xd1\xa2\x62\x5f\xed\xf6\xd5\xef\xe0\x6e\x99\xd7\x10\x70\
+\xdf\x20\x70\x86\xad\x23\xd1\xd1\x66\xf7\x20\xe0\x2e\x91\xab\x52\
+\x0b\xaa\xdd\xa1\xdf\xa8\x61\x00\xab\x93\xbd\x03\xad\x3b\x19\xeb\
+\x83\x53\x43\x07\x6e\xad\x9e\x74\xae\x8c\xa1\xb4\x4e\x28\x6b\x14\
+\x99\xdd\xef\x47\xf0\xbd\x15\x59\xc4\x83\x3f\x78\x12\xf1\x54\x23\
+\x30\x98\x0b\x5f\x68\x12\xf3\xac\x23\xf2\x15\x31\xcd\x0e\xec\x42\
+\xa5\xeb\x14\xdc\x50\xe3\x82\x31\x18\x4c\x1d\x18\x45\xe8\xcc\x72\
+\x1b\xa3\xe1\x54\x49\xa1\x7e\x52\x22\x49\xa1\x96\x0c\x17\x8c\x39\
+\xc4\xe7\xb8\x71\x14\xac\x2a\x21\xe4\x2d\x16\x9c\x53\x3d\x65\xe0\
+\x14\x4d\xb4\xe3\x22\x2b\x54\x74\x13\xd2\x84\xe0\x60\xd6\x63\x8a\
+\xd5\xaa\x94\x90\x6b\x68\x40\x33\x09\x09\x8b\x40\x76\xbf\xa3\x6b\
+\xa4\x7b\x92\x0b\x34\x25\x1d\x37\xc9\x73\x41\x8b\xdf\xdb\xed\x8e\
+\xcd\x7b\xa5\x37\x58\x10\x90\xf3\x50\xc0\xee\x32\xf0\xf0\x62\x26\
+\xb2\x83\x78\x2a\x2f\xb9\xab\xdd\x10\x08\xf1\x5e\xf0\xd0\x84\xed\
+\xb5\x7d\xb7\x86\x54\x40\x59\x4a\xab\xa7\x08\xdf\x5e\x76\xdf\x40\
+\xdb\xa4\xc7\x5e\xaf\x0d\xdd\xfe\x71\x6e\xf4\x27\x92\xfe\xd5\x6e\
+\xf4\xc9\xeb\xdd\xb8\x32\x9f\x6f\x71\xa3\x3f\x15\xb4\x17\xdc\x38\
+\xa5\xed\x65\x37\xea\x37\x91\x9d\xba\x71\xdd\xbc\x7f\xce\xd3\x0a\
+\xae\xd6\x7d\x29\xd5\x47\x7d\x3d\xfd\x9a\x7f\x2e\xe5\xec\x14\xf5\
+\x49\x89\xbc\x84\xbb\x70\xbb\x98\x6d\x45\xa5\xd2\xe3\x5b\xe2\x20\
+\x2f\x08\x09\x9f\xdb\xd4\x09\x3d\xee\x91\x50\xda\x38\x98\x13\x87\
+\xf9\xd4\x43\x9e\x79\xc1\x8e\xef\x87\x01\x46\x73\x1b\x73\xc7\xc7\
+\x21\xe7\x73\xea\x78\x3e\x41\x2c\x78\xd7\xa9\x50\x60\x76\xe8\xe0\
+\x10\x7b\xd8\xef\x88\x2b\xa8\x69\x20\x8a\x07\x9c\xb2\xde\x29\x2b\
+\xa8\x85\x20\x29\x44\x18\xc0\x1d\x35\x9e\xc4\xc6\x93\x58\xed\xff\
+\xb1\x3f\x20\x12\x7d\x42\x9b\xee\x20\xda\x28\x09\xdd\xcc\xcd\xb7\
+\x24\x59\x17\x8a\x3f\xc7\xe9\x6d\x61\x9a\xa3\x89\x07\x9f\x42\x3c\
+\x28\x44\xc0\xc7\x18\x61\x02\x11\xf0\xe7\x38\x70\x58\x48\xd1\x89\
+\xbb\x7d\x27\xf0\xbc\x90\x86\x23\x77\xd3\xc0\xf1\x08\xc6\x24\x1c\
+\xb9\x9b\x78\x0e\xa3\x21\x26\xc1\xc8\xdd\xe7\xd8\x78\x12\x3b\xe5\
+\xee\x80\x5d\xe7\xee\x6b\x4a\xe3\x0b\xee\xbe\xb8\xee\x8a\x0d\x98\
+\x9b\xea\xb2\x1d\xc0\x3e\x31\x9e\x38\x84\xe3\x80\x9e\x38\x8a\x38\
+\x21\x0f\x7d\x4c\xc6\x4e\x3d\xc3\xae\x26\xb1\x3a\x56\x81\xc3\xfd\
+\x81\x2b\x2e\xe7\x06\x72\x98\x47\x11\x21\x70\xea\x58\x88\x19\xf3\
+\xcd\x11\xb4\x41\x15\x54\x36\xc2\x9a\x03\x89\x08\xc2\x01\x9b\x7b\
+\x8e\xc7\x39\xe1\x0c\x28\x70\x68\xe0\xf1\xdd\x99\x86\xe9\x1c\xad\
+\x3d\x7e\xe7\xea\x96\xc7\x3c\x75\x2d\x8d\xee\xea\x92\xc7\x54\x1e\
+\xde\x8c\x7d\x7f\x48\xf3\xa4\x38\xd8\xda\xc0\xf6\x00\x9d\xf2\x8e\
+\x7d\x9d\x3d\x65\xb5\xcd\x25\xc3\xec\x02\xa2\xe9\x37\x31\x61\x67\
+\x32\xca\x4d\x71\xd8\x89\xb5\x2c\x37\x02\x90\x8b\xd9\x4a\x64\xdd\
+\x31\xeb\x40\xd0\x55\xef\xf5\x00\x64\xef\x6b\x83\x77\xc7\x53\xc4\
+\x5a\xa5\x89\xbd\x5c\x16\xb0\xcd\x4a\xed\x5b\x01\x5a\xb8\xe6\x5c\
+\x10\x1b\xef\x95\xd2\x52\x33\xf1\x24\x21\x8e\xe6\x0b\x9f\x81\x74\
+\xe9\x0a\x1d\xca\x19\x0b\x83\x33\xa6\xce\x14\x38\xd6\x50\x2d\x29\
+\x3f\x65\x3e\x17\x05\x84\x1e\x43\xf8\x30\x0d\xd1\x99\x6f\x86\x56\
+\x93\x29\x66\x73\x7d\xe8\xbe\xbe\x75\xdb\xb2\x50\x89\x54\x03\x06\
+\xf1\x3d\x8e\x30\x0f\x46\x7c\x73\x15\xc1\x69\x09\xcc\xa7\x61\x69\
+\x89\x2d\xa3\xbe\xa4\x5a\x9d\xe0\x1e\x3d\xb3\x34\xaf\xd0\xfd\x67\
+\x00\x19\x35\x5e\x65\xa5\x8a\x07\xd9\x53\x9b\x0c\xdb\xca\x4a\x24\
+\xa2\x12\xbd\x9c\x96\xe2\xb5\x9d\x36\x8c\x94\xd1\x6f\xef\x7f\xec\
+\xae\xda\x38\x8e\xfe\x53\xa8\x87\xfe\x0a\xd5\x00\xb1\x84\x26\x7e\
+\x31\xeb\xae\x7f\xdd\xbc\xc7\x91\x3e\x39\xa2\xba\x4f\xb7\xb0\x71\
+\x3d\x3f\xfe\x03\xc6\x38\x48\xea\x8e\x31\x02\xeb\x66\xbd\x17\x5a\
+\x8b\x55\xb2\x9e\x0f\x27\x47\xea\x24\xde\xa6\x7a\x91\xfb\xb1\x02\
+\x83\x7f\xd6\x4a\x06\x2d\x41\x2d\xd4\xcc\xd4\x85\xba\x1f\x08\xd6\
+\x06\x7c\xbf\xee\x2e\xee\xd1\x16\xd2\x2a\x93\xf7\xff\x12\x0f\xfb\
+\xa5\xf5\xb1\x92\x50\xa9\x94\xd9\x6e\x4d\x1f\xca\x70\xcf\x85\x18\
+\xe4\x99\x3e\x2d\xb6\xb6\xe1\xbe\x31\xa1\x9e\xc5\x9c\xed\xbe\x4c\
+\xe3\x8d\xc8\x32\x27\x7e\x36\x4b\x1b\x54\xbf\x12\x54\x64\x69\x0c\
+\x13\xd3\xcb\x6e\x99\xfa\xe9\xa0\x59\x5b\x82\xcf\x96\xf0\x9c\x14\
+\x5b\x91\xe6\xee\x99\x87\x6a\xdb\x7e\x2a\xac\x5f\x60\x3c\x9b\xb2\
+\xd6\x58\xb0\x5f\x7e\x81\xca\x3e\x72\x81\xde\xc8\x3f\xc5\xfa\xc4\
+\x8b\x9a\x9a\xa5\xf7\xeb\xe2\xce\x6d\x1e\x27\xf9\xb9\x51\xf6\x35\
+\x84\xd2\x15\xe9\xeb\x10\xa1\x54\x71\xf8\x3a\x64\x57\xa4\x79\xa5\
+\xa3\xf8\x35\xd0\xdf\xd7\xd5\xed\x14\xa2\xa6\x8d\x6c\xac\x23\x35\
+\xf6\x86\x49\x06\x7d\x24\x86\x47\xe4\xc3\x69\xe4\x06\xa7\xe4\xf5\
+\x41\x1b\x67\x05\x4c\x87\x90\xf9\xe5\x37\x65\x45\x5e\xde\xfc\x26\
+\x77\xaa\x48\xf6\xe6\x27\x8a\x71\x3a\xfc\xef\xb2\xdf\xa7\x50\x68\
+\xd2\xe5\xfe\x4f\x91\x2d\x55\xfa\x68\x18\xda\xd9\xe5\xb0\xfd\x77\
+\x7b\x8f\xb7\x4d\xfa\xa0\x6c\xdd\xb9\x6d\x51\x33\x6f\xeb\xb3\x8b\
+\xa7\xd8\xef\xb6\x45\x22\x9b\xfb\xe3\xb4\x90\x67\x62\x29\xa1\x9e\
+\x7e\xd0\xbc\x6e\x4e\x37\xf3\x51\x7d\xdb\x34\x1a\x77\xa2\xda\xb4\
+\xa6\x55\x13\x3d\x25\x09\x31\x66\xc1\x44\x4f\xd9\xb1\x6c\xe6\x60\
+\xcc\x69\x08\x4f\xd0\x3c\x42\x77\x19\xf2\xbe\x61\x00\x7d\xff\xb6\
+\x3c\xe4\x78\x70\x47\x07\xd4\xea\x7a\x43\xeb\x7b\xab\xeb\x34\x2d\
+\x06\x97\x5c\xc0\x38\xf5\x2d\x64\x61\xf8\x67\x71\x07\x73\x42\xa1\
+\x4d\x99\x5f\xb9\x60\x4a\xc3\x73\xb7\x89\xae\x0d\x51\x70\x75\x75\
+\x6b\x27\xd8\xc7\xa9\xfe\xb7\x63\x4f\x37\xb7\x3d\xfb\x62\x97\xab\
+\x7d\x0c\x3d\x6b\x3f\x22\x34\xe3\x5b\x37\xa6\x41\xc7\xc7\x3d\xdd\
+\x89\xdd\x8e\x67\x62\x7d\x25\x46\x70\x77\xbc\xbd\x39\x6f\x94\xdf\
+\x19\xee\x60\xb0\x34\xaf\x6a\x9f\xc9\x48\x3e\xca\xbc\x48\x92\xdb\
+\xfa\xf6\x8c\xf2\x22\x97\xcd\x73\xdd\x10\x01\xb8\x79\xd5\x6d\x2d\
+\x64\x4b\x04\xa9\x5f\x0d\x69\x5f\xa0\x00\x45\x90\xf5\x52\xdd\x6e\
+\x85\x7a\x90\xaa\x16\x52\x3f\xdb\x65\x25\x54\x35\xa2\x6c\xd3\x64\
+\xf4\x2e\xf3\x64\xa4\xd6\x88\xca\x52\xf8\x8a\x30\x6a\x89\x89\x80\
+\x2e\x44\x29\xf1\x34\x82\x6a\x6a\x3d\xf2\x46\x1d\xb2\x37\xf2\x31\
+\x2d\xd3\x65\x9a\xe9\x17\xf3\x98\xc9\xdb\x24\x2d\x77\x90\xd3\x51\
+\x9a\xeb\x9d\xdf\x16\x8f\x52\xad\xb2\xe2\xd0\xf2\xcf\x03\x55\xff\
+\xbe\x26\x54\xdc\x8f\x08\xc3\x53\xd0\x37\xad\x70\xb8\x34\x16\xfa\
+\xbe\xb8\xf9\x4c\x84\xd5\xa3\xe3\x64\x67\x30\xd7\x7a\x98\x85\x30\
+\x5f\xf9\x7a\xae\xa5\x1e\xb3\x3e\x0c\xa8\xd4\xcc\x60\x61\xa0\xa9\
+\x04\x86\x60\xca\xa6\x48\x1e\x74\xe3\x7e\xc0\x50\x00\x24\x78\xf6\
+\x78\xc8\xa8\x3f\x87\xf4\xc2\x3e\xa2\x81\x5f\x03\x3d\xcc\x31\x9f\
+\xc3\x7c\x4c\x60\x79\xbb\xba\x26\x6a\xdd\x44\x37\xf7\x23\xdd\xfd\
+\x8e\x9e\xad\x4b\xc9\x88\xaf\xcc\x41\x3d\xe4\x5c\x9f\x83\x37\x54\
+\xc0\xa8\xe9\x9d\xa4\x61\x53\x4b\x68\x70\x9a\x8f\x50\xdb\xf2\xe4\
+\x2c\x21\x6b\xea\xff\x7d\x42\xbe\x32\xeb\xa6\x72\xce\x1f\xe7\x1c\
+\x84\x9d\x07\x50\x30\xfd\x39\x73\x88\xc7\x20\x45\x68\x9d\x0c\x0d\
+\x15\x06\x45\xe4\xeb\x1c\x02\x2a\xd4\x56\xcf\x27\xd8\xc7\x17\xa8\
+\xc4\x77\x10\x4c\x95\x1c\x5b\x3f\x58\x24\x70\x18\xd7\xe4\x39\x0c\
+\x22\x0d\x15\xf8\x61\x08\xc9\x04\xb3\x64\x08\xa5\x12\x79\x88\xea\
+\xf2\xeb\x13\x43\xd3\x19\x5a\xd3\x3e\x4c\xee\xea\x72\xde\x99\x61\
+\x06\x11\xec\x5d\x5d\x03\xfd\xe0\x0f\xad\x81\x7f\xc1\x9c\x3b\x8d\
+\x00\xdc\xa1\x84\x51\xca\xa7\x42\x60\xb6\x77\xf5\x71\xef\x7e\x8d\
+\xbc\xea\xb8\xff\x15\xae\x1f\x73\x50\x39\x14\xf7\x30\x44\x44\x9f\
+\x3d\x3f\xc0\x8c\x13\x73\xf6\x1a\x22\x85\xda\xef\x05\x94\x6a\x22\
+\x81\x3b\x81\x50\x14\xf0\x4b\x54\xe6\x70\x0f\x7b\x5c\x1f\x5e\x4f\
+\x37\x65\x18\x31\x5a\x1f\x3f\x9f\xa1\xb0\xc1\xa2\x10\xc8\x73\xee\
+\xc0\x95\xe1\xa1\x20\x18\x51\xcd\x16\x82\x90\xf1\xe1\x16\xfa\x7d\
+\x0d\x4e\x6a\x5f\x78\x7c\x76\x7e\x9d\x4e\x5d\x93\xed\x2f\x41\x30\
+\x83\xdc\xe9\x11\xfa\xfe\xcd\x7f\x01\x8d\x5d\xfa\xad\
+\x00\x00\x0c\x40\
+\x00\
+\x00\x38\xbd\x78\x9c\xcd\x5a\xeb\x6f\xe3\x36\x12\xff\xbe\x7f\x85\
+\xce\x8b\x03\x76\x71\x96\x2c\x3e\x44\x49\xce\xa3\x68\x77\xd1\xa2\
+\x40\x0f\x77\xe8\xb6\x77\x1f\x0b\x59\xa2\x6d\x75\x65\xc9\x95\xe4\
+\xd8\xce\x5f\x7f\x33\xd4\xfb\x11\xc7\x49\x9c\xec\x25\xd8\x8d\x34\
+\x1c\xce\x88\x3f\xce\x0c\x67\x48\x5e\x7f\x77\xd8\x44\xda\x9d\x4c\
+\xb3\x30\x89\x6f\x26\xc4\x30\x27\x9a\x8c\xfd\x24\x08\xe3\xd5\xcd\
+\xe4\xf7\xdf\x7e\xd4\x9d\x89\x96\xe5\x5e\x1c\x78\x51\x12\xcb\x9b\
+\x49\x9c\x4c\xbe\xbb\x7d\x77\xfd\x37\x5d\xd7\x3e\xa5\xd2\xcb\x65\
+\xa0\xed\xc3\x7c\xad\xfd\x1c\x7f\xcd\x7c\x6f\x2b\xb5\x0f\xeb\x3c\
+\xdf\xce\x67\xb3\xfd\x7e\x6f\x84\x25\xd1\x48\xd2\xd5\xec\xa3\xa6\
+\xeb\xd0\x33\xbb\x5b\xbd\xd3\x34\x0d\xd4\xc6\xd9\x3c\xf0\x6f\x26\
+\x25\xff\x76\x97\x46\x8a\x2f\xf0\x67\x32\x92\x1b\x19\xe7\xd9\x8c\
+\x18\x64\x36\x69\xd8\xfd\x86\xdd\x47\xe5\xe1\x9d\xf4\x93\xcd\x26\
+\x89\x33\xd5\x33\xce\xde\xb7\x98\xd3\x60\x59\x73\xe3\xc7\xec\x99\
+\x62\x22\xae\xeb\xce\x4c\x3a\xa3\x54\x07\x0e\x3d\x3b\xc6\xb9\x77\
+\xd0\xbb\x5d\xe1\x1b\xc7\xba\x52\xd3\x34\x67\xd0\xd6\x70\x9e\xc7\
+\x35\x3f\x44\x80\xc4\x83\x1f\xa3\x5a\xdb\xda\x01\xfd\x2d\xfc\xab\
+\x3b\x54\x04\x23\x4b\x76\xa9\x2f\x97\xd0\x53\x1a\xb1\xcc\x67\x9f\
+\x7f\xfb\x5c\x37\xea\xa6\x11\xe4\x41\x4b\x4c\x05\x7e\x47\x6f\x67\
+\x46\x62\x6f\x23\xb3\xad\xe7\xcb\x6c\x56\xd1\x55\xff\x7d\x18\xe4\
+\xeb\x9b\x09\x77\xd4\xdb\x5a\x86\xab\x75\x5e\xbf\x86\xc1\xcd\x04\
+\x46\x47\x98\x29\xd4\x7b\xa5\x7f\x5e\x1b\x91\x69\x30\x5a\xb0\x96\
+\x42\xdb\x4d\xbc\xd7\x2b\x48\xfc\x85\x97\xc1\x47\xce\xd6\xc9\x46\
+\xce\xfe\x0c\x37\x1b\xcf\x9f\x65\xa9\x3f\xf3\xef\xb2\x19\x18\xde\
+\x2a\xd1\x43\x3f\x89\xf5\x7c\x0d\x36\x31\x03\x79\x91\xb7\x88\xe4\
+\xcc\xf3\x73\x90\x98\x0d\x84\xe1\x98\x6e\x26\x00\xd1\xc6\xcb\xf5\
+\x5c\x1e\x72\x3d\xcb\xd3\xf0\xab\xcc\xd7\x69\xb2\x5b\xad\x8d\x6a\
+\x62\x3a\x26\xdf\xf9\xd8\x64\x97\x6f\x77\xf9\x1f\xd0\x55\xc6\x05\
+\x0b\x60\xd5\x02\x4e\x35\xa3\x9c\x9a\x36\xb9\x05\x01\xd7\x81\x5c\
+\x66\x28\xa8\x80\x08\xdf\x00\x23\x47\xb5\x41\x6b\x2d\x7e\x0b\x8a\
+\xb7\xd2\x47\xdb\x2d\xb8\x5b\xdf\x9f\x1f\x71\xba\xba\xac\xac\x98\
+\x53\xad\x83\xe7\xf6\x8f\x03\x80\xa9\xcd\x35\xca\xe1\x3f\x32\xca\
+\x71\x2c\x38\x08\x98\x23\xfc\x31\x47\x79\xee\x71\x5a\x4f\x88\x29\
+\xbf\x40\x4f\xd2\x70\x15\x02\x12\x05\x9f\xe8\x32\xc3\x68\x5b\x83\
+\x12\x74\xa2\xcd\xca\x41\xa7\x5e\x10\x7a\xd1\x4f\xf8\x07\xdc\x79\
+\x20\xdd\x4f\xa2\x08\x3a\xdd\x4c\xbc\x68\xef\x1d\xb3\x5a\xa2\x72\
+\x88\xf9\x3a\x95\xe0\xc0\xef\xe1\x59\x7a\x69\x25\xc3\x11\x82\x76\
+\x34\x77\x55\x50\xee\xf2\xba\x79\x55\x12\x7f\x8f\xc3\x1c\x3c\x75\
+\x97\xc9\xf4\x0b\x5a\xfb\xbf\xe2\xdf\x33\x39\xe0\xfa\x2d\xf5\xe2\
+\x0c\xed\xe6\x66\x02\xa6\x93\x86\x87\x0f\x64\x6a\xe2\xaf\x61\x31\
+\x61\x53\x36\x15\x06\x27\x2e\xe1\x8e\xd4\x89\x35\x25\xc2\x70\x6c\
+\x70\x81\x8f\xb5\x1c\xff\x80\xf0\x18\x0e\xb3\x09\x15\x0d\x15\x66\
+\x81\x41\x4f\x4a\x08\xb5\x6b\xea\x72\x94\x77\x39\xca\x9b\x82\x89\
+\x5a\x86\xe0\xdc\x66\x76\x83\x6c\x17\x95\xb3\x91\x45\xc4\xba\x5d\
+\x19\x61\x56\x69\xa3\x20\x36\xcb\x93\x6d\xc5\x0b\x76\x99\x1f\x23\
+\xb0\x47\x24\xea\x20\x31\x49\xe7\xef\x4d\xf5\x73\xa5\x48\x09\x80\
+\x19\xe6\xc7\x39\xb9\x9a\x34\x7d\x92\xe5\x32\x93\xa0\xd8\x6c\xd1\
+\x54\xc8\x80\x1e\xa0\xab\x19\xc2\x73\xb5\x99\x63\xda\xc8\xb8\x36\
+\xb7\x01\x6c\xd6\x1d\xf6\xa5\x61\xa4\x16\x25\x6f\x05\x23\xe8\x62\
+\x6f\x07\x23\x68\xb3\xde\x0e\x46\x70\xe0\x27\xc0\xb8\x54\x3f\xcf\
+\x85\x91\x5a\xe4\x49\x30\x8e\x69\x3b\x1f\x46\x6a\xb1\x67\xc2\x38\
+\x86\x12\x7b\x08\xa5\x46\x1f\xb7\x1e\x01\x62\x64\x88\xd4\xb3\x98\
+\x63\xf7\x00\x7d\x18\xa4\x96\x32\xfb\x11\x1c\x46\x94\x31\x2e\x2c\
+\x8f\x0f\x66\xef\xed\x6c\x8d\x3d\x88\xe2\xe5\x6d\x8d\x59\x6f\x69\
+\x6b\xed\xa5\xe2\x65\xb6\xc6\x84\x43\x9f\x80\x12\x77\xed\xa5\x2f\
+\x9e\xbb\x3e\x08\x87\x3f\x09\x25\xd7\x5c\xb0\xc0\x3d\x43\xdb\xe8\
+\xfa\x20\x1c\x71\x31\x8f\x74\x18\x7f\x33\x5b\x72\x98\x78\x12\x4a\
+\x0b\x86\xbf\x3d\x5b\x32\xcc\x72\x55\x18\x43\xab\x6a\x1c\xd7\xee\
+\xbc\x99\x8b\xaa\x6c\xef\x8d\x56\x55\xd0\xf5\x34\xe3\x7b\xd1\xaa\
+\x0a\xda\x2e\x66\x7c\x84\x0b\xfb\x09\x28\x8d\xc7\xf8\xf3\x40\x02\
+\x55\xee\x93\x40\x7a\x20\xc6\x9f\x07\x12\xe1\x36\x79\x25\x5b\x3b\
+\x51\x62\xa8\x75\xe1\x04\xda\x82\x36\xdf\xfa\xec\x12\x23\xc7\xc7\
+\xc8\xcb\xe5\x07\x9d\x4c\x49\x53\x45\x1c\x88\xaa\x0c\x5c\x42\x04\
+\x69\x0a\x9d\x23\x52\xa9\x41\x98\x30\x9b\xf2\xe6\x40\x47\x59\x81\
+\x0a\x35\x84\x49\x5d\xc2\xc8\x8b\xeb\x85\x53\x30\x61\xc8\x3b\x09\
+\xd3\x05\x2a\xb1\x06\x26\xb3\x8f\x12\x71\x0d\xc7\x25\xb6\xdb\x45\
+\x09\xea\x32\x02\x46\x4a\x9d\x2e\x4c\xc4\xb0\x4c\x58\x5c\x78\x07\
+\x26\x07\xca\x2a\x57\x38\xa6\xf3\xaa\x30\x61\x46\x7b\x0a\xa6\x96\
+\xb1\x9d\x07\x13\x0e\x9e\xb9\x58\x26\xd2\x96\x35\xe0\xe0\x39\x31\
+\xb8\xe5\x52\xc1\x3a\x83\xd7\xc1\x48\x08\x33\x4d\xe2\x74\x46\x0f\
+\xcc\xd6\xb9\xd0\xeb\xd4\xfc\xf8\x9a\x20\xa9\x24\xe3\x24\x48\xc3\
+\x4f\x7d\x91\x2d\xe9\x94\xf5\x7c\xce\x36\x84\x6d\x75\x30\x42\x40\
+\x2d\x83\xb9\x8e\x2b\xba\x4e\x07\x36\x66\xda\x3d\x5b\x82\xfe\x2e\
+\x6e\xfc\xbd\xae\x2d\x59\x94\x9c\x80\x09\x9a\xed\xae\x8b\x08\xc3\
+\xe1\xc4\x62\xa2\x1b\x48\x06\xa3\xe9\x33\xe1\x78\x2c\xc3\x24\xa6\
+\x65\x9d\x8b\xfb\x2b\x8e\x5a\x2d\x6f\xa7\x46\xdd\x32\x0e\x1c\x35\
+\x7c\x39\xb5\x89\xb0\xba\xbe\x01\x13\x64\x0b\xe2\xf6\xe2\xe7\x08\
+\x2f\x0e\xde\x34\x38\x04\x55\xeb\x5c\xcf\xfc\x86\xfb\x5d\x96\xe5\
+\xbe\xdc\x33\xc6\xf7\xbb\xb8\xc1\x6d\xd3\x12\x42\xea\x84\x7f\xf3\
+\xfd\xae\x6f\x80\xac\xb8\xc0\x32\x3f\x8e\xac\x4e\x0c\x87\x10\x47\
+\x50\x80\x96\x7d\x73\x68\xdf\x3e\x9c\x33\xf1\xba\xa9\x01\x75\x0d\
+\x93\x31\xca\x49\x27\x02\x20\x1e\xbc\x1d\x41\x55\xf4\xe3\x06\x63\
+\xcc\x76\x3b\xfe\xef\xe2\x32\x0a\x41\xe1\xb5\x13\x83\x93\x69\x26\
+\x13\xe2\xb2\x20\xf1\x1e\x48\x90\x4f\x52\xab\x8b\x10\x64\x93\x90\
+\x3a\x91\x2e\x44\x7d\x46\x95\x60\xb6\xf7\x04\x5f\xc1\x80\x48\x2b\
+\xa6\x8f\xed\x59\xb7\xa6\xb6\xcc\x98\x4d\xd1\x1b\x0c\xe4\x37\x2e\
+\xb3\xad\xee\x50\xba\x71\x9e\xd9\xc8\x42\xc9\x2b\x1c\x19\xe0\x8f\
+\x80\x47\xe2\x18\x50\xe9\x09\xbb\x4a\x9f\xae\x67\x78\x30\xa4\x9e\
+\xea\x53\x1f\x3c\xb2\x0a\xee\x42\xb9\x7f\x57\x8f\x17\x8f\xc4\x4a\
+\x75\x5b\x6f\x25\x55\x31\x05\x28\x15\xfb\x06\x65\xc3\x22\x49\x03\
+\x99\x56\x4d\x42\xfd\x74\x9a\xca\x7a\x0b\x4f\xdd\x08\x0c\xd3\xaa\
+\x13\xd1\xe6\x78\x07\x64\xb7\xb8\xcc\xb1\xf6\x6c\xed\x05\xc9\x1e\
+\xb0\xeb\x37\xde\x27\xc9\x06\xd3\x87\x3e\x5d\x45\x2f\x83\x72\x58\
+\x9a\xec\x41\x1b\xc6\x25\x6a\x98\x90\x70\xd8\xc3\xc6\x5d\x9a\x02\
+\xaa\x7a\xe4\x1d\x25\x0c\x49\xfd\xa9\xb4\x66\xeb\x64\xbf\x4a\x11\
+\x9a\xa5\x17\xd5\xd8\xd4\x5d\xb1\x49\x5f\x2c\x92\x03\x9a\xfc\x6e\
+\xd0\x1c\x24\xfe\x0e\x0f\x94\xf5\x5d\x31\xaf\xdb\x43\x5b\xec\x2e\
+\x0c\x64\xf6\x90\x60\x6c\x3c\x21\x79\x1f\xc6\x80\x8e\x5e\x9e\x98\
+\x12\xb3\x36\xcc\x3e\x47\x75\x8a\xea\xd4\x29\x66\x9f\xe3\x80\x69\
+\x3d\x7b\xa0\x11\x71\x1b\x4c\x8f\x1a\xf5\x36\x09\x63\x1c\x53\xeb\
+\xeb\xb2\x3c\x4d\xbe\x42\x21\xfe\x1e\x0a\x04\xcf\xa9\x70\x5e\x86\
+\x51\x84\x34\xc9\x78\x9d\xec\xe1\xf8\x0b\x63\x19\x1f\x1e\xb6\xb7\
+\x8d\xa0\xc0\xa8\xf4\xfb\xda\x80\x15\x48\x95\x73\x24\x29\xba\x86\
+\x97\xab\x93\xd3\x3b\x99\xe6\xa1\xef\x45\xb5\xeb\x6c\x93\x2c\x2c\
+\x9a\x20\xf2\x72\x53\xb8\xb4\xbb\x52\x28\x51\x94\x5a\xad\xf5\xe9\
+\x0c\x35\x6b\x78\xbb\x4f\xe0\x75\x4c\x11\x16\x3a\x02\x92\x44\x32\
+\xaa\xc8\x7d\x92\xa2\x13\xe3\xa9\x16\x9d\x31\x2d\x82\x5c\x4a\x0b\
+\x54\xbd\x50\x8e\xb8\x94\x8d\xaa\xb1\x2e\x87\x1a\x23\x86\xcd\x5c\
+\x62\x3a\xa3\x8a\x2e\x38\x3d\xd4\x31\x2c\x97\x73\x6b\x54\xcf\xe5\
+\x66\x07\x6b\x60\xc6\xc7\x71\xb3\x9f\x36\x3d\x27\x87\x03\xb5\x21\
+\xb7\x4c\x61\x8f\x4f\x50\x6b\xcf\xaf\xe3\xc5\x6d\xde\x9f\xe0\xfd\
+\xc7\x34\xd9\xfc\x3b\x95\x26\x17\x5f\x64\x9e\x87\xf1\xaa\x59\x36\
+\x8b\x3b\x02\x87\x23\x76\x9b\xb4\xbe\x6f\x15\xc6\x78\x27\xa0\x0e\
+\x6d\x15\xf1\xd8\x25\xe2\x7d\x0f\x90\x87\xac\x86\x35\xa4\x1f\xfb\
+\xf4\x6a\x7d\xc1\xbd\xce\x7a\xe9\xd1\x34\xb9\xd9\x3e\xd0\xd2\x5a\
+\x4f\x68\x9b\xbd\x45\xe7\x6d\x7a\xa9\x18\x17\x98\x6a\x89\x1c\xae\
+\x8c\x8a\xbe\x91\xb9\x17\x78\xb9\xd7\x2c\x93\x15\x85\x30\x52\x9d\
+\xbe\x5e\xa7\xc1\x72\xfe\xeb\xe7\x1f\xeb\x2d\x4a\xdf\x9f\xff\x37\
+\x49\xbf\x56\x1a\x21\x0b\x06\x06\x6f\x91\xec\x20\x18\xd7\xbb\xa6\
+\x78\x7d\xc3\x9f\x17\xb7\x46\x6e\xc3\x0d\x44\x3c\xbc\xc1\xf3\x8f\
+\xc3\x26\x82\x05\xbb\x6e\xe8\x30\xe3\x3c\x34\x42\x0b\xb1\xa9\x2c\
+\x6e\xe8\x8c\x5e\x6a\x0a\xfc\x4d\x88\x9d\x66\x5f\x72\x88\xc4\x3f\
+\xa3\x92\xd6\x56\x6a\x29\x34\xcc\x23\x79\xfb\x45\xdd\x58\x81\x2f\
+\x54\xca\x0b\x5a\x87\x0d\xc6\x2c\x6f\xa9\x69\x0a\xdd\x24\xba\xc9\
+\x15\x9b\xa2\x75\xb8\xd4\x15\xa9\x24\xbd\x6d\x7d\x25\xa2\xf1\xfd\
+\xaa\xde\x3d\x1d\xaa\xfe\xc5\xdb\x26\xda\x27\x2f\xf2\x36\x5e\x1c\
+\xa4\x32\x1c\xfb\x02\x9c\xa2\xa1\x1c\xc5\x39\x50\x89\x92\x0b\x4c\
+\x6e\x4b\x48\x8a\x2b\x3d\xdb\x34\xf9\x13\x92\x42\xc4\x46\x75\x2c\
+\x79\xba\xfd\x76\x0b\xe4\xe9\x28\x46\x94\x7f\xf0\x56\xbd\xcf\x47\
+\x6a\x14\xde\xe2\x75\x9f\xeb\x59\xf9\x32\xca\xe1\x9d\x6e\xce\x1a\
+\xe0\x1f\x67\xd3\x1f\xe5\xdb\xa7\x61\x2e\x4f\xb3\x44\xe0\xde\x32\
+\x1d\xe3\x29\x68\x9d\xb1\x16\x48\xf5\x51\xc1\x39\x8d\x42\x5f\xc6\
+\xd9\xe3\xf6\x38\x76\x6b\xae\xec\x9b\x81\xb1\x2e\xe0\x39\x48\x36\
+\x5e\x18\xcf\xda\xbb\xfc\xb3\xd2\x87\xda\x3e\xf5\x4b\x5f\x63\xcb\
+\xad\x9e\xae\xac\x3b\x9a\xad\x4c\xc1\x55\xb2\x67\x8d\x26\xce\xde\
+\xff\x2a\xc1\xba\x82\x9d\xba\x20\xd6\xf5\xb0\x97\xcb\xfe\x1c\xe2\
+\xe4\x2f\x76\xaf\x22\x5b\xa6\xe1\x9d\x6a\x40\xb0\xb3\xfe\x0c\x94\
+\x88\x57\xa7\x21\xad\x38\x77\x3d\xab\x02\xa1\x7a\x5b\x0d\xd2\xc4\
+\x64\xb7\xdd\x24\x81\x2c\x73\xea\x2a\xc9\x0b\xca\x77\xab\x9f\xf5\
+\x45\xde\x42\x42\xaa\xf8\x45\x25\x7d\x75\x4e\xa9\xce\x76\x82\x30\
+\xdb\x42\xa7\x79\x18\x63\x49\x56\xc5\xdc\xad\x97\xaf\xeb\x85\xa4\
+\x7b\x99\xcd\x4b\xfd\x66\x8d\x29\x64\x34\x67\x90\xc4\xba\xea\x1e\
+\xa6\x61\x8e\x3a\x87\x98\xf9\xe1\xfd\xf0\x5e\xd7\x47\xd5\xda\x3a\
+\x45\x52\xaf\xe9\x2e\x92\x73\x79\x27\xe3\x24\x08\xae\x8a\xc4\x77\
+\x1e\x27\xb1\x2c\x9f\x8b\xcc\x1c\x98\xcb\x57\xfc\x6a\x18\xe3\x1c\
+\x66\x30\x6f\xd3\xfe\x84\x2c\x7a\x0e\x93\x27\xd3\xab\x8d\x97\x7e\
+\x95\x69\x21\xa4\x78\xd6\xb3\xdc\x4b\xf3\x0e\x65\x13\x06\x9d\x77\
+\x19\x07\x1d\xb5\x4a\x54\x14\xc2\x9f\x39\x31\x2b\x62\xe0\x41\x1e\
+\x9d\xa6\x00\x5f\x9b\x15\xa9\xc5\x29\xd8\xbc\xe6\x6c\x06\x79\x17\
+\x66\xe1\x22\x8c\xf0\x45\x3d\x46\xf2\xaa\x3b\x07\x57\x09\xa4\x3d\
+\xcb\x28\xd9\x57\xed\x9d\xc4\x03\x67\x06\xc0\x6b\x56\xe2\x7a\x7a\
+\xc6\x37\x99\x9a\xe6\xd1\x1d\xa4\xba\x39\x3d\xb4\xf7\x92\x86\xcd\
+\xd0\xdb\x31\x98\x2b\x1c\xb7\x55\xc9\xc3\xf7\xfc\x53\xe3\xb0\xfe\
+\x43\x11\x24\x98\x56\x8b\xd7\xbe\xd7\x6a\x59\x5a\xdd\x4d\x33\x35\
+\x02\xbf\x9a\x6b\x10\xc8\x77\x1d\xc7\x9a\x9e\xd9\x61\x4c\xc3\x7d\
+\x93\x3f\x0d\x8b\x76\xdc\xe8\x24\x9c\xd7\x9b\x74\x16\xb7\xf9\x54\
+\x27\xd4\xb0\x05\x27\x62\x4a\x4d\xc3\x25\x16\x6b\xed\x9f\xd4\x9e\
+\x92\xfe\xe1\x77\x0b\xc3\x6e\xdb\xb1\x6c\xab\x12\x9b\xd5\xb3\xfc\
+\x73\x50\x79\x97\xfe\xf9\xfd\x93\x5d\xb3\x60\x6c\x9c\x6c\xb8\x2f\
+\x77\xbe\x93\x8d\x0b\x10\x1f\x9f\xef\x78\x43\xd7\xe1\xa7\x3d\x67\
+\x78\x7a\xad\x2c\x8c\x9a\x53\x6e\x58\xda\x2f\x9a\x35\xc5\xda\x0f\
+\x1e\x08\xa9\x9f\xb8\x41\xc1\x90\x98\x7a\x81\x3f\x76\xf3\x62\x57\
+\x3c\x9c\x55\x4f\xd4\x29\x25\x95\x22\xef\x35\x90\xce\xa7\x6e\xd1\
+\x01\x2a\x24\xe2\x80\x00\xac\x60\x50\xb4\x30\xa8\x43\x68\xfd\x5e\
+\x32\xde\x6b\x43\x87\x04\x9b\x6c\x0a\x81\xd1\xe0\x09\x48\x4b\x0c\
+\xa0\x50\xd8\xfb\xd5\xcf\x88\x9c\x96\xef\xa9\xa1\x13\x30\xdf\x29\
+\xd8\x3f\xea\x17\xe0\x20\x82\x0a\x46\x2b\x02\xd8\xb1\x70\xa8\x43\
+\xdd\xa9\x55\xbc\xdb\x06\xb3\x18\xb8\x50\xf9\x0e\x83\x2e\xdb\xcb\
+\x0e\xcc\x36\x1c\x01\xb5\xb3\x53\x13\xb0\x66\x67\x96\x60\x53\x46\
+\x0d\x2e\x5c\x53\x50\x1c\x38\x00\x48\x19\x27\x36\x52\x71\xef\xd7\
+\xa6\xda\xa7\x51\x6a\xf3\x79\xcd\x53\x0b\x9f\xca\x3e\xa1\xb6\xd2\
+\xb3\xf0\x5e\xce\x2d\x88\x4f\xc2\x65\x2e\xe5\xdb\xc3\x55\x41\x46\
+\x16\x40\x07\xf2\xf1\xa8\xa0\xdc\x79\x69\xe8\xc5\x79\x87\xb6\x57\
+\x9b\x2d\xf3\x45\x12\x05\x55\xb7\x54\xe6\xfe\xba\x62\x52\xf7\xc2\
+\xbd\x28\x5c\xc5\x73\x15\xda\xaf\xd0\x12\xcb\x2d\x9a\x39\x4c\xe1\
+\xdf\xaf\x30\x75\x83\xaa\x44\x47\xb7\x9c\x47\xa9\x9e\x2f\xca\x4e\
+\xb1\x0f\xe5\x5f\xd9\xab\x59\xc8\x44\xb1\x72\x29\xe3\xec\x39\xd0\
+\x09\x77\x11\x94\x7f\x13\x77\xe9\xaf\x20\x0a\xa2\xa5\xb7\x09\xa3\
+\xe3\xfc\x07\x48\x60\x00\x2c\x6f\xa3\xfd\x47\xa6\x9e\xf6\x05\x82\
+\xe5\x03\xa6\xda\x5f\xcc\xb9\xb0\x4d\x46\x5d\xfb\x61\x28\x9e\x14\
+\x4b\x04\x25\xff\x07\xb1\x04\xe2\x05\xae\x2d\x7c\x4a\xdd\x2a\x64\
+\x50\xcb\x71\x1c\x56\x11\x70\xeb\x19\x16\x09\x46\xa6\x02\x0f\x75\
+\x4c\xea\xba\x45\x98\x69\x75\x1b\x0d\x01\xcc\x1d\x2e\x9b\x3d\xaf\
+\x3f\x13\x78\x22\xf0\xa0\xce\x71\xae\x1e\x0a\xec\x78\x30\xfc\x56\
+\xd9\xd3\xc5\xac\xb2\x37\x0f\x10\x43\x38\xc3\x60\xab\x22\x8e\x89\
+\x81\x9b\x0a\x0c\x33\xd5\x23\x81\x60\x55\x70\x74\x9f\x81\xdb\x05\
+\xdb\x74\xea\xbe\x2d\x49\x2a\x9e\x43\xb4\x66\x2a\x6c\x63\x2b\xc3\
+\xa4\x54\xd0\xb2\x27\x04\xc0\xfa\x11\xf2\x8d\xa2\x81\xaa\x85\xa1\
+\xe9\x34\x36\xbb\x16\x31\x1f\x9d\xdd\x32\xa8\x37\x47\x9c\x50\xd5\
+\xf5\xe6\xf8\xa1\xe4\x78\x78\x3d\xe2\x45\xeb\x36\x1e\xa1\x3f\xe6\
+\x6b\x90\xa3\xc4\xc1\x60\xce\x0b\xea\xa5\x33\xe6\x47\x2c\xe6\x55\
+\x13\x66\x9c\x05\xca\x58\x13\x06\xca\xad\xfd\x96\xbb\x56\x5b\xf9\
+\xad\x6b\x36\x37\x13\xde\xba\x4d\x73\x54\x57\x08\xac\x33\xdd\xd7\
+\xb9\x54\xc0\x64\xec\xb1\x49\xcc\xfe\xda\x79\xa9\x7c\x5b\xcf\x85\
+\xdc\x62\x4a\xcb\xc4\x8a\x96\xcf\x43\x87\x61\xad\xcb\x16\xe3\x0e\
+\xd3\x4e\xa2\xaf\x71\x77\xee\xf6\xdd\xff\x00\x6e\x1d\x30\x99\
+\x00\x00\x09\xb2\
+\x00\
+\x00\x24\x13\x78\x9c\xdd\x59\xeb\x8f\xdb\xb8\x11\xff\x9e\xbf\x42\
+\x75\xbe\x24\xa8\x45\xf1\x25\x8a\xf4\x3e\x0e\xd7\xa4\x57\x5c\x91\
+\xa2\xc0\x25\x41\x3f\x1e\x64\x89\xb6\x95\x95\x25\x43\x92\xd7\xf6\
+\xfe\xf5\x1d\x52\xb2\x1e\xb6\xf6\xe1\x3c\xee\x8a\x3a\xc8\xae\x39\
+\x1c\xce\x70\x7e\x33\x1c\xce\x70\xaf\x7f\xda\xaf\x53\xe7\x5e\x17\
+\x65\x92\x67\x37\x13\x82\xf0\xc4\xd1\x59\x94\xc7\x49\xb6\xbc\x99\
+\x7c\xfe\xf4\x8b\x2b\x27\x4e\x59\x85\x59\x1c\xa6\x79\xa6\x6f\x26\
+\x59\x3e\xf9\xe9\xf6\xd5\xf5\x5f\x5c\xd7\x79\x57\xe8\xb0\xd2\xb1\
+\xb3\x4b\xaa\x95\xf3\x6b\x76\x57\x46\xe1\x46\x3b\x6f\x56\x55\xb5\
+\x99\x79\xde\x6e\xb7\x43\x49\x43\x44\x79\xb1\xf4\xde\x3a\xae\x0b\
+\x2b\xcb\xfb\xe5\x2b\xc7\x71\x40\x6d\x56\xce\xe2\xe8\x66\xd2\xf0\
+\x6f\xb6\x45\x6a\xf9\xe2\xc8\xd3\xa9\x5e\xeb\xac\x2a\x3d\x82\x88\
+\x37\xe9\xd8\xa3\x8e\x3d\x32\xca\x93\x7b\x1d\xe5\xeb\x75\x9e\x95\
+\x76\x65\x56\xbe\xee\x31\x17\xf1\xa2\xe5\x36\x9b\xd9\x31\xcb\x44\
+\x94\x52\x1e\xa6\x1e\xa5\x2e\x70\xb8\xe5\x21\xab\xc2\xbd\x3b\x5c\
+\x0a\x7b\x1c\x5b\x4a\x31\xc6\x1e\xcc\x75\x9c\x2f\xe3\x9a\xed\x53\
+\x40\xe2\xd1\xcd\xd8\xd9\xbe\x76\x40\x7f\x03\xff\xdb\x05\x47\x02\
+\x2a\xf3\x6d\x11\xe9\x05\xac\xd4\x28\xd3\x95\xf7\xfe\xd3\xfb\x76\
+\xd2\xc5\x28\xae\xe2\x9e\x98\x23\xf8\x03\xbd\x03\x8f\x64\xe1\x5a\
+\x97\x9b\x30\xd2\xa5\x77\xa4\xdb\xf5\xc7\xc1\x4c\xef\x37\x79\x51\
+\xb9\x87\x78\x03\x9b\x51\x18\x61\xfb\x19\xe5\xd9\xbf\x80\x67\x91\
+\xa4\xda\xe8\xbc\x99\x78\xab\x7c\xad\xbd\x2f\xc9\x7a\x1d\x46\xde\
+\x7b\x5d\xde\x55\xf9\xc6\xdb\x25\xc0\x81\x36\x59\x8d\xdc\x2e\x89\
+\xab\xd5\xcd\x84\xcb\xcd\xde\x8e\x57\x3a\x59\xae\xaa\x1e\x21\x89\
+\x6f\x26\x00\x33\x21\xac\x51\x77\x44\x62\xd6\x86\x33\x46\x8c\x0e\
+\x77\xd2\x9b\xe2\x62\xb8\x2a\xce\xa3\x79\x58\xb6\x9b\xab\x92\xa5\
+\x2e\x2a\x2f\xba\x2f\xbd\x45\xa1\x75\x5c\x6f\xd2\xe2\x06\xc7\x61\
+\x99\xbb\x49\x94\x67\x6e\xb5\x82\x48\xf5\x40\x76\x1a\xce\x53\xed\
+\x85\x51\x05\xd2\xcb\x33\xc1\xb5\xd5\x3a\x4e\x2a\x77\x9b\xc5\x39\
+\x3a\x86\x47\xbb\xaf\x7c\x5b\x6d\xb6\xd5\xef\x7a\x5f\xe9\xac\xde\
+\x20\x28\xea\x79\xcb\x4e\x9b\x65\x2d\x6d\x72\x0b\x02\xae\x63\xbd\
+\x28\x8d\xa0\x1a\x0e\x33\x62\x76\x02\xa6\x5a\xd9\x1b\xb0\x79\xa3\
+\x23\x73\x5a\x6a\xd6\xde\xde\xaa\x83\x09\x90\x21\x2b\xab\xa3\xc8\
+\x19\xe0\xb6\xf9\x7d\x0f\xa0\x39\x33\x87\x72\xf8\x41\x46\x39\x0e\
+\x35\x07\x01\xff\xc3\x2f\x3c\xca\xf3\x60\x3c\xf8\x84\x98\x66\x07\
+\x6e\x5e\x24\xcb\x04\x60\xa8\xf9\xc4\x90\x19\x4c\xed\x19\xc5\xc8\
+\xc4\xf1\x1a\xa3\xe1\x28\xe9\xb0\xf8\x47\x11\xc6\x09\x24\x90\x33\
+\xe9\x51\x9e\xa6\xb0\xe8\x66\x12\xa6\xbb\xf0\x50\x0e\x24\x0e\x97\
+\x52\x46\x45\x83\x24\x88\x2d\xc1\xf5\x47\x5e\x40\xaf\x3a\xa4\x80\
+\x9a\x21\xba\x20\x31\x2f\x66\xaf\x17\xf6\x73\x65\x49\x39\x1c\xa9\
+\xa4\x3a\xcc\xc8\xd5\xa4\x5b\x93\x2f\x16\xa5\x06\xc5\xb8\x47\xb3\
+\x11\x0c\x2b\x40\x97\x6c\x4d\xf8\x5a\x6d\x78\x4c\x1b\x19\xd5\xc6\
+\x70\x07\x98\x37\x34\xfb\xfb\xc3\x48\x2e\x81\x31\xe2\x21\x04\xcf\
+\x57\xc3\x48\x2e\x83\x71\x4c\xdb\x05\x30\xd2\x3f\x12\x46\x2c\x2f\
+\x80\x51\xc7\x31\xff\x16\x18\xf1\x45\x30\x8e\x69\xbb\x00\x46\x42\
+\xff\x30\x18\xa5\x10\xf4\x02\x18\xeb\xab\xec\x2b\x61\x04\x5d\xfc\
+\x22\x18\xc7\xb4\xbd\x18\x46\xd0\x26\x9e\x83\xd1\x8c\xc2\xf4\x62\
+\x18\x6d\x79\x32\x5b\x15\x1a\xca\xa9\xd7\x23\x78\xf6\xe1\x1e\xaa\
+\x80\x69\xd9\x4e\x47\x7b\x93\xcc\x91\x64\x01\xa1\xa2\xa3\xc2\x9d\
+\xc1\x04\xe2\x94\x10\x1a\xb4\xd4\xc5\x28\xef\x62\x94\xb7\x00\x40\
+\x7c\x24\x38\x0f\x58\x47\x5c\x36\x3b\xf8\x54\x84\x59\x09\xf5\xd2\
+\xfa\x66\xb2\x0e\xab\x22\xd9\xbf\x21\x4d\x81\x32\xc5\x23\x5f\x7c\
+\x26\x02\xca\xa6\xae\x40\x94\x06\x54\xf8\xda\x25\x7c\x4a\x04\x92\
+\x01\xc3\xe2\xed\x99\xf4\xcf\x59\x52\x41\x09\xb8\x2d\x75\xf1\xd1\
+\x94\x51\xff\xce\x3e\x97\xfa\xd9\xbb\xe8\xfc\x70\x13\x19\x9c\x5f\
+\x84\xa7\xee\x78\x24\x90\xda\x73\x44\xa4\x7a\x26\x32\x5f\x7e\x6d\
+\x3d\x1a\xb6\x9d\x36\x45\x9e\x89\xcc\x97\x5f\x5b\x3f\xe6\xf4\x3f\
+\x11\xb6\x43\xc0\xcf\xfc\x41\x02\x38\xb9\x2f\xf3\xf5\xf3\xf1\xe6\
+\x12\x24\x09\xe3\x01\x81\x58\x12\x53\x18\x91\x80\x28\xda\xff\x36\
+\x60\xe0\x02\xc8\x9c\xe3\xa9\xcf\x11\xc1\x84\x90\x2e\xea\xf6\x04\
+\x00\x0e\x10\x16\x58\xe2\xee\x50\x1c\x0c\x95\x20\xa6\x7c\xdc\x1d\
+\xc5\x3d\x05\x22\x45\x82\x72\xd6\x3b\x14\x87\x9a\xea\xc3\xb1\x12\
+\xea\x9b\x4b\xa6\xa7\xf0\x35\xb7\xd5\x93\x35\x01\x1f\x58\x45\x05\
+\xf2\x07\x06\x31\x8e\xa8\x3f\xb0\x06\x58\x7a\x14\x63\x09\x67\xc8\
+\x0f\x88\x64\xe4\x3b\x1d\xcb\x6f\xb2\x97\x88\x27\xed\xa5\xf4\x4f\
+\xb4\xf7\xfb\xa7\x7d\x5b\x1b\x3f\x9e\xf6\xa1\xc0\xec\xec\x35\x69\
+\x1f\xf2\x33\x56\x1c\xb3\x41\xd6\x27\x0c\x51\x09\x59\xb6\xb3\x67\
+\x31\xc6\xba\x18\x65\x35\x49\x1f\x23\x22\xb8\x10\x2f\x38\x83\x14\
+\x71\x25\x30\x23\xf6\xd0\xf9\x44\x61\xdf\x9e\x35\xb8\x0a\x04\x09\
+\x7c\x61\x07\x14\x41\x1b\x29\xa4\x9a\xba\xd4\x47\x84\x72\x4c\x81\
+\x3b\x40\x92\x0a\x76\x61\xe6\xbf\xf6\x4c\x1b\x66\xbf\xb5\x6d\x96\
+\xe9\xff\xe2\xfb\x44\xef\x6a\x41\x65\x55\xe4\x77\x90\x1c\x9b\x0a\
+\xb4\x11\x0f\xed\x71\x0a\xb4\xba\x9c\x9a\x74\x5d\x9d\xe9\x4a\x9b\
+\xe1\x26\x5c\x6a\x9b\x4c\x81\xaf\xce\xa6\xcd\xc4\x3c\x2f\x62\x5d\
+\x1c\xa7\x84\xfd\x0c\xa6\x9a\x7c\x6b\x1a\x5f\xea\x73\x85\x89\x3a\
+\xce\x77\xad\x17\x08\xef\xb1\xe1\xb1\xf9\x72\x15\xc6\xf9\x0e\xe2\
+\xf3\x74\xf2\x21\xcf\x01\x70\x0a\x80\x49\x4e\x03\x72\x3a\x6d\xc2\
+\xc0\x25\x0a\x49\xdf\x67\x6d\x60\x77\xb3\x07\x33\x0b\xb8\x4b\x26\
+\xd4\x99\xe8\x68\x5b\x14\x80\xb9\x9b\x86\x07\x0d\xd6\xd9\x5f\x47\
+\x05\xe5\x2a\xdf\x2d\x0b\x83\xd2\x22\x4c\x5b\x98\xda\xa5\x66\xca\
+\x9d\xcf\x73\xd0\x5e\x15\xdb\xb3\x69\xe8\xcc\xb7\xe6\xa1\x09\x9a\
+\x72\xeb\xcf\xe6\x65\xa1\xc7\x61\xe4\xf7\xed\x1e\xd5\xb2\x4b\xa0\
+\xa7\xdf\xb9\xcd\x8b\x85\x54\x67\xd6\x37\x0c\xc7\x27\x0c\x49\xe4\
+\x23\x1c\xfb\xee\xc6\x3e\x9d\x32\xc5\xcf\xb1\x2e\xbf\x5e\xeb\x2a\
+\x8c\xc3\x2a\xec\x82\xe4\x48\xe1\xc7\xf6\xbf\x88\x17\xb3\xdf\xde\
+\xff\xd2\x5e\xe4\x51\x34\xfb\x4f\x5e\xdc\x75\x17\xb4\x61\x08\xe7\
+\xf9\x16\x36\xd4\x16\x17\xe6\x45\x21\x9a\x99\xc3\x13\x56\xb7\xc9\
+\x1a\x0c\x37\x2f\x59\x7f\xdd\xaf\x53\x88\xea\x76\x62\xc0\x6c\x5e\
+\x10\x3a\xa1\xb5\xd8\x42\xd7\x2f\x55\xa3\x8f\x7b\x71\xb4\x4e\xcc\
+\x22\xef\x63\x05\x01\xff\xab\x51\xd2\x2b\x38\x6a\xa1\xf6\x75\x2f\
+\x2f\x6e\x7b\x82\x8d\x01\x3f\x2f\xdb\xb2\x60\xb0\x85\xa4\x4a\xf5\
+\xed\x3f\xc3\xbb\xed\xdc\xf9\x58\x69\xc8\x55\x85\xdd\x6e\x4d\xef\
+\xcb\xf0\xce\x85\x58\xce\x33\x7d\x46\x6c\x6d\xc3\x6d\x63\x42\xfd\
+\x58\x85\xd6\xdb\x32\x89\x56\x61\x9a\xa2\xe8\xc1\x2e\x6d\xb8\xba\
+\x95\xa0\x22\x4d\x22\x9d\x95\xcf\xc3\x32\xf6\x88\xd9\xac\x2d\x01\
+\xb3\x39\x7c\x8f\xf3\x75\x98\x64\xde\x19\x42\xb5\x6d\x7f\x8f\x93\
+\xca\xf9\x0c\xf1\x31\x66\xaf\xb5\x61\x3b\xff\x02\xd9\x7d\x00\x82\
+\xd9\xca\xdf\xc2\xe5\x09\x8e\x86\x9a\x26\xb7\xe6\x8d\xea\xda\x6b\
+\x06\xa3\x1c\x5b\xab\xee\x29\x8e\x42\xdf\xeb\x62\x54\x4a\x4d\x1b\
+\x28\xaf\x41\x1c\x6e\xd3\xfa\xc9\x44\x6b\x3f\x7a\x3f\x9c\x82\xda\
+\x0b\xe0\xcb\xf1\x1c\x3a\x6c\xa3\x0b\x08\xca\xf2\xab\x1c\x96\x95\
+\xaf\x7f\xd3\x9b\x22\x8f\xb7\xf6\xf1\x6f\xe8\xa9\x6f\x97\xfd\x3e\
+\x81\xdb\x22\x99\x6f\x7f\x88\x6c\x5d\x24\xf7\x76\xc2\x80\x5d\xf6\
+\xeb\x7e\xaf\x43\xfc\x58\x9d\xf7\x32\xca\xb5\x77\xcc\x37\x76\xb4\
+\xec\xf2\xd0\x20\x3b\xb7\x39\x2c\x0d\xe7\x1a\xee\xb6\x0f\x66\xd2\
+\x39\x9b\x5d\x16\xf9\x76\xb3\xce\x63\xdd\x2c\x3f\xa6\xb0\x4d\x58\
+\xad\x8e\xa6\x55\x63\x95\x35\x97\x2a\x60\x62\xa4\x95\x73\x4d\x9b\
+\x47\xa8\x4f\xa7\x02\x23\x81\x39\x30\x05\x3e\x62\xd0\x4d\xe2\xee\
+\x32\x87\xdd\xfe\xcb\xe1\x18\xa4\x10\x29\x98\xd3\xb6\x96\xce\xcf\
+\x4e\xdb\x51\x3a\x12\x4a\x6b\x28\x0b\x98\xef\x60\x87\xc0\x3f\x47\
+\x21\xa8\xda\x99\x94\xfe\xf4\x85\x0b\xc6\x34\x3c\xb4\x9b\x68\x4b\
+\x84\x02\x12\x7c\xbb\x76\x64\x7a\x3f\xd6\xe7\xb6\xd3\xe3\x7d\x74\
+\x37\x3d\xda\x50\xdb\x77\x54\xc0\x18\xfa\xf4\xae\x4f\x6c\xfa\xb6\
+\xb6\x3f\x43\x84\x13\xd3\x11\x05\x57\xc3\x77\x0a\x53\xad\xcc\x20\
+\xad\xbf\x79\x7d\xde\xf4\xbf\xb5\xb3\xbd\x8e\xd2\x0e\x8b\x6d\xaa\
+\x67\x90\x1a\xb2\x3c\x8e\xaf\xea\x12\x68\x96\xe5\x99\x6e\xbe\xd7\
+\xf7\x27\x30\x37\x43\x53\x73\x42\x78\xcc\x20\xf4\xab\x3e\xed\x4b\
+\x9e\x64\x33\x88\x7a\x5d\x5c\xad\xc3\xe2\x4e\x17\xb5\x90\xfa\xbb\
+\x5b\x56\x61\x51\x0d\x28\xeb\x24\x1e\x8c\x75\x16\x0f\xd4\x5a\x51\
+\x69\x02\xbf\x66\x04\x1f\x89\x71\x08\x37\x7e\x51\x84\x87\x01\xab\
+\xa1\xd6\xbd\xee\xac\xe5\xec\x8c\xbc\x4f\xca\x64\x9e\xa4\x66\x60\
+\xbf\xa6\xfa\x2a\x4e\xca\x0d\x84\xf4\x2c\xc9\xcc\xce\xaf\x72\xc8\
+\x8b\x8b\x34\xdf\x1d\xe7\xcf\x1d\x55\xbf\xc7\x87\x45\xd4\xd5\xef\
+\xfd\x53\x70\xe2\x1c\xf2\xa8\x4f\xce\x3b\xae\x53\x9f\x20\xdc\xf3\
+\x0a\x18\xf9\x00\x35\xe2\xd1\x2b\xa3\x22\x28\x7d\x7b\xe2\xa9\xe6\
+\xb4\x11\xfa\x27\xba\x8c\xff\x20\x8f\xcd\xd3\x3c\xba\x7b\xdc\x61\
+\x36\x77\x28\xe8\xa5\x29\xe7\x64\xca\xa1\x6b\x61\x90\x64\x94\xf3\
+\xce\xe1\x0a\x12\x0e\x90\x95\xe9\xe5\x99\xef\xfb\x58\x39\xdc\x36\
+\x30\x1c\xfb\x53\xe8\xbf\x29\x9c\x6f\xdf\xa1\xd0\x94\x40\x7f\x4e\
+\x88\x21\x71\x15\x08\xdf\xf9\xd0\x23\x32\xe8\x41\x28\x85\x6c\x00\
+\x54\xdf\x3c\x10\x28\xaa\xe4\x14\x1a\x92\x00\x4b\x49\xd4\x90\x97\
+\x81\x23\x04\xe3\x46\xfb\x18\xb5\xa3\x51\x86\x18\x0b\x94\x18\xa7\
+\xbd\x33\x09\xca\xa7\xbe\x4f\x81\x4a\x51\xe0\x9b\xbf\x4e\x9a\xf4\
+\x25\x98\x52\x0c\xec\xe1\x28\x08\x30\x34\x0f\x63\x86\x3f\x38\x67\
+\x69\x85\xf0\x5e\x1f\xd8\xb5\x42\x90\xe7\x4d\x94\x43\xb9\x1d\xd5\
+\x9f\x47\x42\xfd\x89\x05\xa7\x9a\x28\x09\x82\xa1\x6b\x18\x04\x27\
+\x44\xac\x04\x1c\x14\xe4\x7d\x1f\x6c\x31\xbe\x31\x56\xf9\x4c\x1a\
+\x70\x28\xf3\xa5\xa2\x0e\x4c\x53\x8a\x71\xc0\xa6\xd0\x65\x62\x19\
+\xc0\x95\xe2\x50\xb8\x59\xb8\x0c\x30\x31\x34\xb0\x57\xf9\x16\xf0\
+\x96\xea\x23\xee\x63\x29\x02\x69\x00\x1f\xa1\x06\x08\x1a\x38\x25\
+\x68\xed\x30\xc2\x41\xd1\x28\xad\x2f\x93\x01\xcc\xbe\x84\x7e\x74\
+\x20\xb3\xa3\x76\x34\x70\x0d\x93\x58\x05\x6a\x94\x66\x9d\x48\xe1\
+\x7a\xf2\x2d\x15\x40\x08\x20\x00\x99\x6f\x82\x52\x98\xb0\x80\x2e\
+\x8b\x49\x1f\x38\xc7\x20\xea\x79\xf1\xec\x1e\x10\x4a\xc2\x25\x26\
+\x46\x73\x8e\x3d\x72\x8f\xe6\xfc\xe7\xb3\x8b\xb9\x60\x4e\xb2\x0b\
+\x46\xca\x7e\x82\xff\xc7\xfb\xe0\x91\xec\xf2\x92\x9c\x8f\x91\x4f\
+\x08\x03\x47\xf0\x17\x5e\xc8\xe6\x39\xe6\xc9\xe4\xff\x3f\x7d\x25\
+\xff\xa8\xfc\xfe\xdc\x8d\x6c\xb3\x88\x40\x82\x2a\xa8\x98\x88\x39\
+\xb4\x42\xd2\x40\x05\x70\x68\x4d\x0e\x97\x3e\xa4\x63\x48\x9d\x38\
+\x80\x13\x28\xe0\xd4\x11\x89\x7c\x01\x87\x88\x99\x53\x07\x65\xa9\
+\x39\x75\x50\xaf\x05\xcc\x14\x9d\xe6\x6f\x08\x01\xc1\x90\x5b\x1d\
+\x2a\x90\xf2\x25\xe7\xc2\xe4\x16\x41\x84\x62\xac\x4e\xe6\x18\xce\
+\xa7\x52\xe6\x36\x50\x4a\x52\xc2\xeb\xec\xa0\xa8\x79\xb7\xe2\x90\
+\xa2\x41\xb8\xa0\x40\x1c\xdb\xd3\x48\xf2\x85\xfb\x9a\xbf\x20\xf9\
+\xb6\x6f\x56\xd0\x91\x5d\x9b\x5e\xff\xf6\xd5\x7f\x01\x54\x64\x5b\
+\xed\
+\x00\x00\x0b\x1b\
+\x00\
+\x00\x3c\xeb\x78\x9c\xed\x5a\x5b\x73\xdb\xc6\x15\x7e\xcf\xaf\x40\
+\xe9\x17\x6b\x2a\x82\x7b\xc7\x2e\x75\xc9\xa4\x76\xd3\x49\xc7\x6d\
+\x67\x72\x99\x3e\x66\x40\x60\x49\x21\x06\x01\x0e\x00\x4a\x64\x7e\
+\x7d\xcf\x2e\x40\x02\x20\x96\xb4\x28\xcb\xb1\xd2\x11\x39\xb6\xc8\
+\xb3\x67\x6f\xdf\xb9\x1f\xf0\xfa\xdb\xcd\x32\xf5\xee\x75\x51\x26\
+\x79\x76\x33\xc2\x3e\x1a\x79\x3a\x8b\xf2\x38\xc9\x16\x37\xa3\x5f\
+\x7e\xfe\x7e\x2c\x47\x5e\x59\x85\x59\x1c\xa6\x79\xa6\x6f\x46\x59\
+\x3e\xfa\xf6\xf6\x9b\xeb\xbf\x8c\xc7\xde\xbb\x42\x87\x95\x8e\xbd\
+\x87\xa4\xba\xf3\x7e\xc8\x3e\x96\x51\xb8\xd2\xde\xdb\xbb\xaa\x5a\
+\x4d\x27\x93\x87\x87\x07\x3f\x69\x88\x7e\x5e\x2c\x26\x17\xde\x78\
+\x0c\x33\xcb\xfb\xc5\x37\x9e\xe7\xc1\xb6\x59\x39\x8d\xa3\x9b\x51\
+\xc3\xbf\x5a\x17\xa9\xe5\x8b\xa3\x89\x4e\xf5\x52\x67\x55\x39\xc1\
+\x3e\x9e\x8c\x5a\xf6\xa8\x65\x8f\xcc\xe6\xc9\xbd\x8e\xf2\xe5\x32\
+\xcf\x4a\x3b\x33\x2b\xdf\x74\x98\x8b\x78\xbe\xe7\x36\x87\x79\xa0\
+\x96\x09\x2b\xa5\x26\x88\x4c\x08\x19\x03\xc7\xb8\xdc\x66\x55\xb8\
+\x19\xf7\xa7\xc2\x19\x5d\x53\x09\x42\x68\x02\x63\x2d\xe7\xe3\xb8\
+\xa6\x9b\x14\x90\x38\x7a\x18\x3b\xda\xdd\x1d\xd0\x5f\xc1\xbf\xfd\
+\x84\x1d\xc1\x2f\xf3\x75\x11\xe9\x39\xcc\xd4\x7e\xa6\xab\xc9\xfb\
+\x9f\xdf\xef\x07\xc7\xc8\x8f\xab\xb8\xb3\xcc\x0e\xfc\xde\xbe\x3d\
+\x89\x64\xe1\x52\x97\xab\x30\xd2\xe5\x64\x47\xb7\xf3\x1f\x92\xb8\
+\xba\xbb\x19\x31\xb9\xda\xd8\xef\x77\x3a\x59\xdc\x55\x1d\x42\x12\
+\xdf\x8c\xe0\x86\x0c\x2b\x69\xbf\xef\xce\x30\xdd\x2b\x12\xf2\x29\
+\xa9\x59\x9b\x85\xbb\x43\x4c\xf4\x67\xc5\x79\x34\x0b\x4b\x38\xe8\
+\xe4\x2e\x5f\xea\x49\x95\x2c\x74\x51\x4d\xa2\xfb\x72\x32\x2f\xb4\
+\x8e\x75\xf9\xb1\xca\x57\xf6\xc4\xa0\x88\x8b\x7c\x9c\x44\x79\x36\
+\xae\xee\x40\x47\x26\xb0\x76\x1a\xce\x52\x3d\x09\xa3\x0a\x56\x2f\
+\x07\x0b\x9b\x3b\xde\x8c\x74\x9c\x54\xe3\x28\x5f\x6d\xfd\x9d\x60\
+\xf6\xe7\xca\xd7\xd5\x6a\x5d\xfd\xaa\x37\x95\xce\xea\x03\xc2\x46\
+\x1d\x9c\xec\xb0\x99\xb6\xa7\x8d\x6e\x61\x81\xeb\x58\xcf\x4b\xb3\
+\x50\x8d\x86\xf9\xc6\x40\xf2\x76\x0c\x46\xf7\xcb\xaf\xe0\xda\x2b\
+\x1d\x19\x55\xad\xb9\x3b\xc7\xab\xb6\x46\x3a\x7d\x56\x5a\x8b\xd0\
+\xeb\x41\xb7\xfa\x75\x03\xb8\x79\x53\x8f\x30\xf8\x0f\x3b\x39\xb6\
+\x35\x07\x06\xed\x83\x3f\xc8\xc9\xf3\xbb\x91\xe1\x89\x65\x9a\x13\
+\x8c\xf3\x22\x59\x24\x80\x44\xcd\x27\xfa\xcc\x70\xdb\xce\xa5\x18\
+\x1f\x79\x93\xe6\xd2\xa0\xc7\x3a\x2c\xfe\x51\x84\x71\x02\xd6\xdb\
+\x9d\xd0\x1f\xc1\x9c\x60\xd9\x20\x05\xd3\x4a\x90\xee\x8e\x19\xd0\
+\xa9\xb6\x29\xa0\x62\x88\x20\xb1\x34\x2f\xa6\x6f\xe6\x68\x8e\xf4\
+\xfc\xca\x92\x72\xd0\xd7\xa4\xda\x4e\xc1\x53\xd5\xaf\xab\x51\x3b\
+\x37\x9f\xcf\x4b\x5d\x19\x15\x6b\x06\x3b\x63\x56\x67\x61\x05\xd8\
+\x9c\xa0\xfd\x99\x07\xdb\xef\xd8\x08\x11\xca\xb9\x32\x57\x8a\x48\
+\xc1\xc5\xe8\xe4\x91\xb5\x34\xef\x83\x23\x5f\x3d\x6a\xdb\xc0\xb9\
+\xad\x24\x01\x97\x82\xd0\xd3\xdb\xce\xed\xeb\xf1\xdb\x3a\x96\x88\
+\x25\xbc\xe9\x19\x60\xe3\x4f\x80\x4d\x5a\x05\x99\xf4\xf5\xe0\xb4\
+\xda\xec\x94\x12\xce\x95\x82\xae\xdd\x8c\xc2\xf4\x21\xdc\x96\xa3\
+\xe3\x7a\x45\x08\x57\xe7\xa8\x95\x1b\x2c\x07\xfa\x8e\x9b\x81\xa0\
+\xf0\x59\xb8\xba\x76\x73\xe3\xe9\xde\x8d\x3e\x11\x46\x07\x4a\x84\
+\x9d\x81\x52\x10\x99\xf7\x93\x51\x22\xe2\x2c\x94\x66\xd2\xbc\x1f\
+\xb1\x9b\x1b\x25\x22\xbf\x90\xb2\xd9\x18\x3d\xbd\x2b\x34\xe4\x14\
+\x6f\x1c\x78\x9e\x82\x9b\xb6\xc8\x6c\xf0\xcd\x88\x72\x5f\x29\xc1\
+\x25\xd9\x53\xb7\x40\x65\x10\x16\x81\x46\xda\x7b\x6d\x08\xf0\x52\
+\x5f\x08\xa6\x3a\xd4\xad\xa1\x06\x7e\x10\xa0\xa0\x43\x5d\x34\x9b\
+\xfd\x92\x25\x15\x24\x25\xeb\x52\x17\x3f\x99\xc0\xfe\x9f\xec\x97\
+\x52\x0f\xb8\x7e\x2e\xc2\xac\x84\x2c\x62\x79\x33\xaa\xcc\xc7\x14\
+\xd2\xb8\xb7\xc2\xc7\x02\x4b\x2a\x2e\x99\x8f\x28\x65\x18\x5f\x7c\
+\xd2\xb1\x3f\xc9\x42\xf1\x1f\x67\xa1\x9c\xfe\x91\x16\xca\xf9\xd7\
+\xd0\x3d\x8e\x4f\xc3\x1d\xf4\x75\x8f\xfa\x54\x09\x84\x58\x4f\xf7\
+\xa8\xf0\x41\xc5\x28\xa5\x7d\xdd\x63\x3e\x0e\x80\x55\xf6\x75\x4f\
+\xfa\x28\x40\x54\x7e\x19\xdd\x03\x75\xe7\xf2\x59\x74\xef\x04\x68\
+\x75\xfa\x71\x1c\x35\x46\xb8\xfc\xfc\xdb\x2d\xc3\xaa\x48\x36\x6f\
+\x21\x3a\x42\xb2\xa0\xe4\xe5\x2e\x27\xe9\x7e\x50\x32\xe0\x8a\x5f\
+\x8e\xa5\xcf\x99\xa4\x04\x5d\x8e\x99\x2f\x15\x0e\x30\xbd\xe8\x89\
+\x8d\x10\x9f\x22\x49\x29\xee\x89\x0d\x4b\x70\x24\x04\x33\xd4\x17\
+\x1b\xf7\x03\xc9\x89\x62\x7d\xb1\x29\x9f\x29\x49\xa8\xfc\x92\xc0\
+\xda\xf8\x7b\x0a\x57\x81\x9e\x0d\x57\x00\x4f\x49\x8e\x98\x1b\x57\
+\xb8\x2a\x13\x97\x63\xd0\x6b\xd0\x55\x85\x6b\x5c\x89\x42\xf8\x00\
+\x57\x01\xca\x2c\x90\xea\xbb\x62\xa0\x0a\x25\x44\x20\xfa\xb8\x42\
+\x0e\x86\x31\x0e\x48\x0f\x57\x46\x60\xd7\x80\x72\xfc\x15\x71\xc5\
+\x54\xf0\x67\x30\xc7\x0e\xb0\x8a\x11\xec\x00\x76\x97\xe9\x5d\x9a\
+\x08\x86\x29\x56\x9d\x58\xf1\x27\x84\xf5\x53\x7e\xc0\xe0\x4a\x9f\
+\xd5\x11\x04\x04\x7c\x9c\xdb\x11\x28\x12\x98\xd0\x0b\xca\x2a\x24\
+\xb3\xb8\x42\xea\x1c\x7c\x69\x37\x70\x3d\x31\x85\xab\xfd\xb4\xaf\
+\x4a\x4d\xc5\x1c\xdf\x27\xfa\xa1\xad\x6e\x4d\x75\xde\xac\xb3\x0a\
+\x17\xda\xc6\x4b\x80\xb3\x0e\x98\xcd\xc0\x2c\x2f\x62\x5d\xec\x86\
+\x66\xda\xbc\x7b\x43\x4d\x48\x1d\x16\x0c\x6d\xf9\x09\x6b\xef\xb9\
+\x00\x1d\xd7\x78\x79\x17\xc6\xf9\x03\x60\x71\x38\xf8\x7b\x9e\x2f\
+\xcd\xda\x0c\x83\xf2\x52\x71\x38\x1c\x41\x05\x3d\xe6\x81\xaf\x10\
+\x51\x7c\x30\x39\xda\x9a\xca\xd8\x87\x18\xc8\x25\x1f\x0c\xae\x8b\
+\x02\x44\x3a\x4e\xc3\xad\x86\xbb\xd9\x3f\x3b\x11\x94\x77\xf9\xc3\
+\xa2\x30\x18\xcd\xc3\x74\x0f\xd2\x7e\xaa\x19\x1a\xcf\x66\xf9\xc6\
+\x44\xbb\xf5\x60\x38\xce\xa3\xb5\x69\x74\x8d\xd7\xb5\x52\x35\xed\
+\x95\x0e\xc7\x43\x92\xc1\x75\xc7\x4d\x47\x46\x06\xf4\x08\xc3\xae\
+\x45\x23\x94\x3a\xc2\xb1\x31\x16\xc8\x8e\x0c\x1a\xa9\xb0\xc1\x4c\
+\x73\xb9\x2e\xe6\xf5\x15\x1b\xcd\x59\xea\x2a\x8c\xc3\x2a\x6c\xb5\
+\x64\x47\x61\x04\xd1\x5d\x1f\xa4\x88\xe7\xd3\x1f\xdf\x7f\xbf\x4f\
+\xc2\xa2\x68\xfa\xdf\xbc\xf8\xd8\xe6\x4f\x86\x21\x9c\xe5\x6b\x38\
+\xfb\x3e\x31\x34\xdd\x95\x68\x6a\xac\x27\xac\x6e\x93\x25\x9c\xc0\
+\xf4\xd3\xfe\xba\x59\xa6\xa0\xaf\xfb\x81\x1e\xb3\x69\xa5\xb4\x8b\
+\xd6\xcb\x16\xba\xee\x97\x39\x5b\x8c\x71\xb4\x4c\xcc\xa4\xc9\x4f\
+\x55\x92\xa6\x3f\x98\x4d\x3a\xc9\x62\xb3\x68\x52\xa5\xfa\xf6\xef\
+\x71\x52\x79\xef\xf2\xd5\xd6\x6e\x5e\xd3\x7a\x6c\x70\x67\x7d\x4b\
+\x10\xe2\x63\x8c\xc6\x98\x5b\x36\x4b\xeb\x71\xd9\x86\x65\x5e\xdc\
+\x76\x4e\x69\xd0\xf8\x6e\xb1\xcf\x0f\x87\x5b\x7f\x97\xc5\x30\xab\
+\xf4\xfe\x9d\xa4\x65\x99\x67\xae\x03\x18\x1b\x1e\x2e\x63\x39\x07\
+\x3b\x9a\x85\xcb\xf5\xec\x37\xf0\x93\xbd\x05\x0c\x58\x7f\x0b\x17\
+\x07\xa7\x30\xd4\x34\xb9\x35\xad\xb3\xeb\x49\xf3\xc5\xc9\x11\x59\
+\x6c\x86\x1c\x35\xad\xb7\xb0\x3d\xd7\xe0\x08\x06\x87\x34\x89\x74\
+\x56\x7e\x5a\x86\xae\xbe\x6f\x33\xb7\x04\x01\xcf\xe0\x73\x9c\x2f\
+\xc3\x24\x9b\x0c\xc4\x19\xe5\x19\x78\xe2\xd9\xfa\x5c\x29\xfc\x33\
+\xfc\xb8\x9e\x79\x3f\x55\x1a\xa2\x43\x71\xae\x0c\x86\x7b\x5a\x5e\
+\x63\x04\x5d\xa3\xf8\x70\x78\xfd\x8e\x5d\x9c\x7f\xf3\x3e\xb4\x2b\
+\x5d\x80\xae\x97\x4f\x82\x36\x2b\xdf\xfc\xa8\x57\x45\x1e\xaf\x6d\
+\x7f\xb5\x8f\xe9\xe7\xaf\xfd\x3e\x29\x6b\x78\xbe\xc4\xda\xba\x48\
+\xee\xed\x80\x01\xbb\xec\x96\x82\x93\x16\xf1\x5d\xc1\xd6\x71\x54\
+\xd7\x93\x9d\x27\xb3\xdf\x16\xad\x87\xeb\xb9\xfe\xbd\x9b\x4c\xc3\
+\x99\x4e\x6f\x46\x1f\xcc\xa0\x37\x18\x5d\x14\xf9\x7a\xb5\xcc\x63\
+\xdd\x4c\xdf\x79\xc6\x45\x37\xf1\x58\x40\x6e\xdc\xa6\x22\x4d\x6d\
+\xba\xaf\x41\x21\x66\xdb\x57\x5b\xcb\x55\xae\xf4\x02\x61\x8e\x5c\
+\x75\x86\x8d\xb7\x02\x43\x3e\xcc\xe1\x13\x21\x88\xeb\x31\x31\xc9\
+\x31\x85\xe2\x4e\x99\x2f\x17\x6d\x4d\x5e\x80\x65\xb6\x88\x6f\x6d\
+\x19\x68\x73\xbc\x6e\xe7\xd1\xc4\x12\x54\xd7\x6c\xdd\x6e\xe5\x2e\
+\x08\x11\x47\x47\xb0\x89\x60\x98\xfa\xce\x66\xa1\xd9\x16\xf2\x9d\
+\x6e\xcb\x75\x80\x02\x54\xa3\x8c\x33\x4e\xae\x9a\x7a\xbd\x69\x49\
+\xce\xc1\x7f\xf7\xbe\x38\xda\x96\x96\x5c\xac\x53\x3d\xd5\xf7\x3a\
+\xcb\xe3\x18\xaa\xfc\x22\xff\xa8\xa7\x59\x9e\xe9\xe6\x73\x1d\x64\
+\x3b\x93\x1a\xb2\x49\x0a\x41\x92\x53\xd0\xd2\xaa\x4b\xfb\x2d\x4f\
+\xb2\x29\x28\xa8\x2e\xae\x96\x61\xf1\x51\x17\xf5\x62\xf5\xe7\x71\
+\x59\x85\x45\xd5\xa3\x2c\x93\xb8\xf7\x5d\x67\x71\x6f\x7b\xbb\x54\
+\x9a\xc0\x9f\x29\x3b\x3c\x43\x1c\x42\x0c\x2e\x8a\x70\xdb\x9b\x61\
+\xa8\x75\x4f\x62\x8a\x0e\x67\x0c\x31\xb8\x4f\xca\x64\x96\xa4\x86\
+\x68\x3f\xa6\xfa\x2a\x4e\xca\x15\x28\xe5\x34\xc9\xcc\x85\xae\xf2\
+\x7b\x5d\xcc\xd3\xfc\x61\x37\xde\x35\x99\xbe\x5e\x14\x36\x41\xe3\
+\x42\x60\xae\x44\xb7\x1d\x52\x6c\xea\x01\x78\x73\xdc\x1d\xb0\x79\
+\x1f\x17\x44\x51\x74\xa0\x49\xd8\x14\xbf\x8c\x21\xe9\xd0\x24\xd3\
+\x2b\x0b\x84\x90\x72\xa8\x49\x50\x38\x28\x8e\x39\x57\x0e\x4d\x62\
+\x26\xc3\x3d\xaa\x49\x7d\xb5\x98\x42\x52\xf0\xf6\xcd\xb0\x03\x70\
+\x71\xb6\x2e\xbd\x91\x52\x86\x92\xf7\xd5\xc9\x16\xa3\x8a\x2a\xca\
+\xce\xd0\xa7\x3f\x46\x23\x3e\x25\xde\xa1\x11\xd7\xd2\x1d\xd2\xb7\
+\xc6\xe6\xb9\x40\x5c\x71\x7e\xe0\x26\x7c\x4e\x09\xc7\x44\xb9\x84\
+\x4b\xa1\xee\xc1\xa8\xf7\x28\xa5\x11\x2e\x91\xa6\x72\x0f\xd8\x61\
+\xa7\xad\x16\x2e\x43\x8f\x16\xae\x05\xe7\x5c\x41\x3a\x35\x42\xa0\
+\x0b\xb7\x64\x05\xfd\x13\x49\xd6\x98\x21\xaa\x1d\x3a\xeb\x4b\x2a\
+\xf0\x11\x38\x74\xac\xd0\x79\x0e\x9d\xe0\xe3\x0e\x1d\x24\x75\xc2\
+\x0c\x5f\x1d\xfa\x0b\x72\xe8\xaf\xb2\xf9\xea\xb2\x71\xd9\x0f\x77\
+\x59\x1c\x1a\x5a\xdc\x29\x43\x3d\x62\xdb\xb6\xe4\xdf\x79\x82\x93\
+\xfe\x42\xd6\x5c\xfc\x59\xfc\x85\x59\xed\xb8\xbf\xe0\xe4\xd5\x5f\
+\xbc\x24\x9d\x7c\xf5\x17\x2f\x57\x36\x4e\xfb\x61\x8f\x8b\xd0\x4f\
+\xf3\x17\x84\xec\x3c\xc1\x29\x7f\x61\xba\xff\x8e\x82\xf1\xa9\xfe\
+\xe2\x44\xc1\x08\xf7\x75\xfc\x0c\xe7\x55\x27\xbf\xbe\xbf\xb8\x9e\
+\x2c\x9c\x6d\x0e\x4c\xa4\xa0\x6d\xb3\x61\x15\x56\x77\x03\xf9\x1d\
+\x2b\xca\xec\xe3\x98\x67\xaa\xca\x76\xf3\xc8\xf3\xa7\xee\x8f\x4f\
+\xd2\xdb\x9b\x03\x34\xff\xf2\x30\xf7\x51\x40\x14\x13\x97\x90\xa1\
+\x73\x84\x24\x27\xde\x07\x8f\x31\x5f\x41\xd1\x4c\x71\x87\xfa\xce\
+\x63\xdc\x27\x8c\xa3\xa0\x4b\x05\x1a\x53\x8a\xf0\xc0\xd0\x02\x4e\
+\x15\xe3\x5d\x9a\x79\xfe\x24\x29\x61\x66\xcd\x3d\x95\x4a\x9f\x50\
+\x2e\xa4\xa8\xd7\x6c\xa8\x0c\xe6\x63\x82\xa9\xf4\x60\x5c\x60\xc5\
+\x18\xd0\x04\x54\x72\x32\x08\xa8\x47\x05\xcc\xc1\x50\xd5\x75\x68\
+\x1f\x3a\xa7\x6f\xa9\xef\x3c\xc8\x30\x02\x1e\x10\xd4\xa5\x02\x8d\
+\x23\x8a\x88\x21\x11\x09\x9b\xe3\x0e\xc9\xd4\xfb\xd8\xae\xb7\x23\
+\xb5\x07\x7f\xd7\x21\xee\x6f\xd8\xee\xd0\x22\xe1\x42\xf2\x77\xcf\
+\xe1\x40\x30\xe9\xbb\xa9\xf6\x19\x58\x1e\x6b\xf3\x74\xa0\xbc\x19\
+\x45\xbb\xd7\xb3\x96\xcb\x70\x2b\xee\x70\xbc\x70\x72\x6e\x1e\x50\
+\x61\x87\x93\x34\x8d\x38\x86\x02\xe1\x72\xf1\xe6\x11\x60\x40\x99\
+\xab\x17\x82\x39\x61\xec\xb8\x97\xfc\x42\xf5\xb2\x7d\x26\x7d\xe1\
+\x36\x3a\xf9\xa2\xeb\xe5\x03\x9f\x74\x44\x23\x0e\x80\x36\x93\x08\
+\xc1\x03\x9b\x36\xb6\x42\x90\xc2\xb2\xd6\x7f\xf3\xfc\x1b\xd4\xd8\
+\x58\x1d\xc7\x94\x5a\xab\x90\x02\xcc\x8f\x19\xeb\x93\x08\x74\x1f\
+\x5f\xd6\xcf\xbe\x11\x0d\x0c\x8d\x23\x4e\x89\x32\x76\x6a\x7e\xc7\
+\x40\xac\xed\x53\x5f\x31\x50\x78\x6b\xa7\x4c\xc0\xb6\xca\x33\x16\
+\xcb\x84\x44\x60\xd1\xca\x07\xd3\x04\x83\x86\xad\x05\x95\x88\x29\
+\x43\x62\x92\xc9\xc0\xec\x3c\x24\xd2\xa0\x0e\xd7\xf6\x88\xa8\x3e\
+\xa2\xeb\xd8\x3d\x03\x3a\xaa\x44\x8e\x48\xeb\xd0\x0e\xf3\x9b\xb8\
+\xa7\x78\x72\x01\x9e\x9c\x7d\xbe\x27\xff\x7f\x8f\xbe\xc7\x22\x6b\
+\x9b\x19\x81\x48\x29\x96\x38\x70\xc9\xcb\xe1\x02\xce\x32\x7d\xf3\
+\xa3\x33\x47\xab\xcc\xbc\xe4\x57\x95\xd2\xe3\xa5\x33\x90\xca\xe7\
+\xe5\xe7\xb5\x2b\x08\x7c\x01\xa1\x8d\x43\xd8\x64\x3e\x85\xbc\x54\
+\x98\x88\x06\x66\x88\x18\xc6\x94\x5d\x32\xf3\x53\x4f\x2c\x28\x04\
+\x6d\x70\x00\x4a\x09\xc4\x8c\x2b\xc0\x4a\x02\x70\xc6\xe8\x29\x7c\
+\x92\xdc\x18\x3d\xc5\x81\x52\xdc\xb8\x02\x0c\x4e\x83\x48\x85\x0d\
+\x15\xe0\x45\xdc\xb3\xbf\x23\xc5\x38\xb0\x8c\x9c\x04\x4c\x61\xbb\
+\x35\x98\x30\xb7\x6c\x1c\x49\xbb\xf1\x80\x06\x14\xc9\x25\x84\x11\
+\x73\x14\x0e\xa9\xb3\x62\xce\x43\x0f\x22\x69\xed\xfc\x58\xf0\x88\
+\x40\x7a\xba\xd1\xa0\x9c\x8d\x86\x73\xfb\x1d\x8f\x68\x4c\x12\x12\
+\xe0\xd7\xc2\xe1\x85\xba\xae\xd7\x46\xc3\x0b\x93\x8d\xd3\x7e\xa8\
+\xa3\x54\x57\xe6\x87\x68\x84\xd2\xc7\x37\x1a\x5c\xb6\x6d\x5a\x08\
+\xf4\x51\x8d\x86\xe0\x39\xfd\x05\x0e\xcc\xa3\xc6\x00\x11\xf7\x7d\
+\xf9\xab\xbf\x78\x49\x3a\xf9\xea\x2f\x5e\xae\x6c\x9c\xf6\x13\x3c\
+\x2e\x42\x3f\xcd\x5f\x50\x7c\xe8\x2f\x9a\x06\x94\xfd\x73\x6d\x7e\
+\x3d\x78\xfb\xcd\xff\x00\xf1\x32\x97\x84\
+\x00\x00\x14\xbf\
+\x00\
+\x00\x78\x55\x78\x9c\xed\x5d\xdb\x72\xdb\x48\x92\x7d\xf7\x57\x70\
+\xe5\x97\xee\x58\x12\xac\xfb\x45\xb6\x3c\x31\xa1\x8e\xde\xe8\x0d\
+\xef\x4e\xc4\x74\x77\xec\x63\x07\x44\x42\x12\xc7\x14\xc1\x00\x28\
+\x4b\xea\xaf\xdf\x93\xc5\x0b\x0a\x44\x51\x22\x25\xcb\xa3\xb6\x2c\
+\xce\x8c\xc9\x83\x42\x5d\x32\xb3\xb2\x4e\x56\x25\x30\xef\xff\x76\
+\x7b\x35\xed\x7d\x2e\xaa\x7a\x52\xce\x4e\x8e\x78\xc6\x8e\x7a\xc5\
+\x6c\x54\x8e\x27\xb3\x8b\x93\xa3\xdf\x7f\xfb\x79\xe0\x8e\x7a\xf5\
+\x22\x9f\x8d\xf3\x69\x39\x2b\x4e\x8e\x66\xe5\xd1\xdf\x3e\xbc\x79\
+\xff\x1f\x83\x41\xef\xb4\x2a\xf2\x45\x31\xee\xdd\x4c\x16\x97\xbd\
+\x5f\x66\x9f\xea\x51\x3e\x2f\x7a\x3f\x5c\x2e\x16\xf3\xe3\xe1\xf0\
+\xe6\xe6\x26\x9b\xac\xc0\xac\xac\x2e\x86\x3f\xf6\x06\x03\xdc\x59\
+\x7f\xbe\x78\xd3\xeb\xf5\xd0\xec\xac\x3e\x1e\x8f\x4e\x8e\x56\xe5\
+\xe7\xd7\xd5\x34\x94\x1b\x8f\x86\xc5\xb4\xb8\x2a\x66\x8b\x7a\xc8\
+\x33\x3e\x3c\x6a\x8a\x8f\x9a\xe2\x23\x6a\x7c\xf2\xb9\x18\x95\x57\
+\x57\xe5\xac\x0e\x77\xce\xea\xb7\x51\xe1\x6a\x7c\xbe\x29\x4d\x9d\
+\xb9\x91\xa1\x10\xf7\xde\x0f\x99\x18\x0a\x31\x40\x89\x41\x7d\x37\
+\x5b\xe4\xb7\x83\xf6\xad\xe8\x63\xea\x56\xc1\x18\x1b\xe2\x5a\x53\
+\x72\xbf\x52\xc7\xb7\x53\x48\x62\x67\x67\xc2\xd5\xb8\x75\x48\x7f\
+\x8e\xff\x6e\x6e\x58\x03\x59\x5d\x5e\x57\xa3\xe2\x1c\x77\x16\xd9\
+\xac\x58\x0c\x7f\xfa\xed\xa7\xcd\xc5\x01\xcb\xc6\x8b\x71\x54\xcd\
+\x5a\xf8\xad\x76\x5b\x1a\x99\xe5\x57\x45\x3d\xcf\x47\x45\x3d\x5c\
+\xe3\xe1\xfe\x9b\xc9\x78\x71\x79\x72\xa4\x5c\xc6\xc2\xdf\xfc\x36\
+\xc0\x97\xc5\xe4\xe2\x72\xd1\xc5\x27\xe3\x93\x23\x8c\xd7\xdb\xf0\
+\x6b\xdd\x9f\xe3\x8d\x51\xb1\x4c\x8a\x65\xc1\x55\x23\xf1\x25\x65\
+\xda\x77\x8d\xcb\xd1\x59\x5e\xa3\xd3\xc3\xcb\xf2\xaa\x18\xfe\x6b\
+\x72\x75\x95\x8f\x86\x75\x35\x1a\x8e\x3e\xd7\x43\x18\xe2\x45\x39\
+\x98\x8c\xca\xd9\x60\x71\x09\x1b\x19\xa2\xbe\x69\x7e\x36\x2d\x86\
+\xf9\x68\x81\x1a\xeb\x4e\x65\x34\xc6\x93\x23\x7c\xb9\x26\x8b\x1a\
+\x94\xf3\x62\x96\xad\x95\xb3\xe9\x4f\x71\x3b\x2f\xab\xc5\xe0\x7c\
+\x32\x2d\x96\xe5\x5b\x8d\xdf\x4e\xae\x26\xf9\xec\x8f\xbc\x5a\x0c\
+\xa9\xe5\x1a\x72\xbb\x5e\x4c\xa6\xd7\xf5\xb0\x9e\x95\x37\xe3\xeb\
+\x19\xe4\x77\x31\xc3\x0d\x83\xf3\x7a\x30\x9e\x54\xc5\x68\x51\x56\
+\x77\x83\x7c\x34\x2a\xe6\x8b\x6c\x3e\x4b\x37\x76\x3b\x9e\x43\xc3\
+\x9e\xad\x64\x99\x2c\x73\x77\x5f\x99\xf2\x7a\x31\xbf\x5e\xfc\x51\
+\xdc\x2e\x8a\xd9\x52\x9a\xd0\x69\xa4\xe0\x70\x99\xc6\xba\xc1\x8e\
+\x3e\xa0\x82\xf7\xe3\xe2\xbc\xa6\x8a\x96\x8a\xa3\x5f\x32\x5c\xc0\
+\xa5\x4d\xdd\x73\x28\x68\x8e\x71\x60\x82\x2d\x8b\x46\x42\x5d\xdc\
+\x91\x4d\xb5\x8b\xca\xa5\xe1\xf5\x5a\x4a\x9e\xff\x71\x0b\x0d\xf7\
+\x8e\x7b\x42\xe1\x7f\x78\xb2\xc4\xdd\xb2\x04\xc7\xe8\xf0\x0f\x4b\
+\x96\xf9\x93\x4c\xee\x9e\x6a\x56\x3d\x18\x94\xd5\xe4\x62\x02\x31\
+\x2c\xcb\x99\x76\x61\x0c\x35\x1a\x94\x87\x9b\x1b\xae\x06\x5d\xe5\
+\xe3\x49\x3e\xfd\x2f\xfa\x07\x16\xd2\xa9\x7d\x54\x4e\xa7\xb8\xe9\
+\xe4\x28\x9f\xde\xe4\x77\xf5\xa6\xc6\x30\x6b\x8f\x2f\xab\x02\x5e\
+\xe6\x2d\xbe\x17\x79\xb5\xae\x43\x33\xc3\x5a\x2d\xb7\x9b\xd0\x4c\
+\x36\x1d\xbb\x58\x81\xbf\xcf\x26\x0b\xb8\x93\xeb\xba\xa8\x7e\xa5\
+\x29\xf9\x8f\xd9\xef\x75\xd1\x29\xf5\x5b\x95\xcf\x6a\xcc\xff\xab\
+\x93\xa3\xab\x7c\x51\x4d\x6e\x7f\x18\x88\xcc\x5a\x25\x9d\xef\x33\
+\x7c\x78\xe6\x8d\xb7\xcc\xf4\x39\x07\x6e\x84\xec\x0f\x9c\x15\x99\
+\x73\x5a\xfd\xb8\xa9\x6c\x04\xb5\x18\xa6\x33\xcb\x95\xf0\x0d\x7a\
+\x47\x62\x36\x99\x51\xd6\x35\xe8\x79\xb2\xec\x79\xb2\x6c\x85\xf5\
+\x83\xdb\x0c\x25\x9d\x69\xc4\xdb\x16\xcd\xde\xe2\x25\xb1\x25\xa4\
+\xfa\x61\x75\xfd\x7d\xbd\x28\xe7\xeb\xb2\x30\xce\xc5\xdd\x14\x46\
+\x49\xe0\x00\x35\x96\xd5\xf1\xd9\x34\x1f\x7d\x7a\x17\x80\x12\xf2\
+\x9c\x2c\xee\x8e\xf9\xbb\xa3\xe6\x8e\xf2\xfc\xbc\x2e\xd0\x2c\x8b\
+\xb0\xe0\xc8\x70\x07\x5a\x12\x9b\x01\x3c\xae\x2d\x96\x6a\x8b\xa7\
+\xdb\x52\x8d\xb0\x86\xed\x21\xff\xfb\x2c\x34\x52\xf6\x53\x2d\x34\
+\x6d\xa0\x03\xee\x3c\xcf\x8c\x7c\xb9\x16\x9a\x30\x40\xe5\x9e\x64\
+\x80\x49\xa3\x48\x1b\xa0\x66\xbb\x0d\x30\x2a\x65\x52\x15\x66\xfa\
+\xe8\xf0\x99\xf1\xd5\xcc\x5d\x8b\x87\xcc\xfd\x91\x1e\xe3\x5e\x73\
+\x87\xe6\xee\x53\xac\xb0\x5f\xc1\xdc\x45\xc6\xad\x4f\x99\xfb\x2d\
+\x3f\x39\x92\x0c\xa8\xb6\xbc\xd1\xdd\x1d\xa1\x66\xdb\x84\x6f\x45\
+\xb2\xac\xa0\x49\xe0\x33\x32\x1c\x7b\xb8\x65\x0b\xe3\x77\x19\xf6\
+\x5a\x71\xc2\xb2\xa4\xad\xb1\x88\x9a\xec\x32\x98\xb7\xb9\xa4\xcf\
+\x96\xcd\xad\x6f\xbd\xc7\xf6\x9a\xc6\x79\xca\xbe\xf6\x6b\x5c\x8d\
+\xe8\xf3\x60\xe3\x5f\xcd\xf7\x92\xb0\x77\xbb\x5e\x27\xa4\xfa\x62\
+\xb6\xc8\x60\x7e\x4e\x58\xd9\x5f\xeb\xa9\xf9\x02\x09\x28\x63\x9c\
+\xe9\x2b\x95\x49\xa3\x34\xfc\x30\x3c\x23\x63\x96\xdb\xb6\x1f\x76\
+\x99\x13\x4a\x71\xcf\x5a\x7e\x58\x66\x56\x1b\x2e\x9c\x6e\xf9\xe1\
+\x6e\xd9\xf3\x64\x59\xf8\x61\x69\x81\x72\xcb\xe5\x23\xac\x55\x3f\
+\x6c\xad\xe6\x09\xd6\x7a\x9e\xd3\xe7\x70\x6b\x4d\x19\xbe\xa3\xcf\
+\x3e\x34\xa4\xe5\xb4\xd7\xc3\x80\x31\xb8\x3d\x66\x87\x49\xce\x8e\
+\xfb\x07\x39\x1a\xd3\x67\xe7\x32\xf0\xd5\x5c\x33\x29\x73\xb7\xaa\
+\x21\x00\xd3\x72\x93\x42\x67\xce\xb6\x7d\x24\x67\x99\x11\xba\xe5\
+\x20\x51\x4a\xb4\x9d\xa3\x64\xad\xfb\x9e\x3a\xb1\x78\x67\x3e\x45\
+\x13\x0b\x4a\x73\x70\xf9\x1b\x64\x60\xe1\xef\x99\xf6\x98\x58\x5f\
+\x9e\x15\x73\xe9\x94\xd8\x9f\x95\xbc\x5d\x59\xf1\xe3\x88\x31\x35\
+\xa6\x0e\x9a\x00\xa9\xe6\xf6\x26\x0b\xd4\x9c\x79\xa4\x49\x76\x04\
+\xe5\xad\x31\x07\xc8\xc9\x70\xaf\x46\x67\x8f\x94\x13\xda\xba\x67\
+\xde\x26\x5a\xb3\xc2\x9f\x8f\xce\xf7\x68\x2d\x25\x26\x6f\x2d\xfb\
+\x52\x52\xe2\x87\x50\xdc\xb7\xe7\xe1\x6f\x4b\xbb\x19\x97\x8a\x09\
+\x66\x76\xf8\xb9\xae\x0b\xde\xa8\x5b\xf9\x83\x84\x96\x6e\x9d\x69\
+\xae\x95\x91\x3e\x2d\xbe\xfb\x9a\xd7\x5f\x4c\x8a\x52\xea\x27\x4a\
+\x31\x5a\x6f\x0e\x13\xa2\x94\xe6\x4b\x08\x71\x77\xe3\xf7\x89\x50\
+\x4a\xfb\xc5\x0c\x91\x48\xef\x01\x0b\x2d\xa3\xcf\x63\xdd\x9a\xf5\
+\xf7\x84\x5b\x4f\x59\xd6\x93\x5e\xcd\x7a\xfe\xc5\xa4\x04\x81\x3f\
+\x55\xd7\x96\x61\x6d\x72\xd6\x1d\x3c\x5d\xef\xe3\x26\xcf\x6d\x69\
+\x5c\xfa\xaf\xcf\x55\x68\x5a\xdf\xa3\x0b\xfd\x05\xf8\x05\xed\x67\
+\x17\xa0\x17\x4a\x70\x2d\x6d\x9f\xb4\x23\x95\xd9\x8a\x15\xb9\xcf\
+\x38\x37\xf8\x4f\x8b\x07\x09\x97\x79\x65\x98\x6a\x6c\x8e\xa8\x10\
+\xca\x2a\x44\x1c\xa2\x09\x2a\x88\x0e\x69\x04\xa6\x1c\xf0\xc3\xec\
+\xfb\x09\xe2\xe2\xf7\x06\xdd\x3c\xda\xbc\x78\x3a\x1d\xd3\x52\x0b\
+\xef\x13\x74\x0c\xe4\x50\x73\x29\x7d\x5f\x66\x4a\x73\xc5\x5d\x5f\
+\x64\x4a\x39\x5c\xda\x92\xa9\xca\x9c\xf7\xd2\xfa\xb6\x4c\x11\x12\
+\x69\x6f\x94\x6c\xd3\x4b\xc4\xf8\x58\x64\x94\x69\xc9\x54\xf1\xcc\
+\x49\xe3\xbc\x7e\x56\x99\x4a\x7b\xaf\x4c\xdd\x17\x94\xa9\x32\xb0\
+\x90\x88\xc7\x9a\xcc\x33\x78\x4a\x57\x0c\x04\x89\x15\x83\x35\x09\
+\x89\xb7\xc5\x0a\x22\x6e\x34\x1c\x9e\x6a\x89\x95\xbb\xcc\x0a\xed\
+\x4c\x5b\xac\x2e\x13\x5c\x08\xa1\x58\xdb\x54\x05\xd1\x7b\xa7\xf9\
+\x73\xee\xd8\xf3\x78\x8b\xa5\x1b\x94\x73\xfd\xe5\xb6\x43\xe1\xd5\
+\x60\xfa\x52\xc7\x92\xe3\x4c\x72\xa6\xfb\xc1\xe1\x69\x2e\xa2\xd0\
+\xc1\x21\x38\xf7\x4a\x93\xcc\xdb\x61\xb9\x30\xb8\xcb\x58\xdb\x98\
+\x43\x08\xcb\x5d\xc6\xbd\xe6\x91\xb8\xcf\x93\x65\xcf\x93\x65\x29\
+\x2c\x17\x88\x9c\x40\x5f\xfd\x73\x1a\x71\xa0\xe2\xf7\x2d\x6a\xdc\
+\x88\xaf\x13\xaa\x31\x21\x38\x5c\x02\x6c\x8c\x69\xc8\xb9\x3f\xe0\
+\x99\x14\x92\x09\xd3\xb6\x62\x41\x5b\x77\x24\x96\xad\xcd\xb9\x0c\
+\xeb\xa6\xf7\x7e\xdb\x39\x30\xa3\x65\x74\xc4\x13\xe2\x4f\x6a\x81\
+\x29\xff\xac\x72\x5d\xc6\x82\xf7\xc7\x8a\x6e\x7b\x60\x62\x6b\xc7\
+\xd1\x76\xa2\x69\x2c\x21\xb6\x1d\x4d\x93\xb3\xdc\x3b\x9a\x5e\x0e\
+\xf8\xfd\x90\x4e\x1a\xc3\xb7\xcd\x49\x22\x9d\xb5\x8e\x3f\x4f\x8a\
+\x9b\x37\x9b\x0e\xd3\xd9\xef\xaa\xde\x79\x7e\x51\x04\xea\x80\x71\
+\x2e\xb9\xc3\xea\xc2\x59\x59\x8d\x8b\x6a\x7d\xc9\x84\xbf\xd6\xa5\
+\x15\xbb\x58\xa6\x33\xbc\x69\x8b\x95\x6a\xdd\x5c\x67\xe9\xeb\xf5\
+\x65\x3e\x2e\x6f\x20\x9d\xed\x8b\x7f\x96\xe5\x55\x43\xea\x1a\x55\
+\x61\x8e\x0d\xb8\x90\x99\x95\xce\x74\xaf\xde\x05\xa9\x4a\xe7\x24\
+\xeb\x5e\xbc\xae\x2a\x3a\x97\x9e\xe6\x77\x05\x46\x13\xfe\x59\x7b\
+\xc5\xfa\xb2\xbc\xb9\xa8\x48\x2a\xe7\xf9\x74\x23\x96\xcd\xad\x74\
+\x69\x70\x76\x56\xa2\xf1\x45\x75\xdd\xb9\xbc\x39\xf2\xbe\x5e\x6a\
+\x65\x75\x58\x1f\x95\xb8\x99\xcc\x30\xcc\xc1\xea\xb4\x9f\x37\x9b\
+\xe0\xdb\x25\xd6\x07\xff\x8e\xbb\x1d\x25\xd0\x07\xc5\x76\xdd\x4e\
+\xe3\xef\xc8\x99\x06\x17\xcb\x7a\x39\xc4\x95\xad\x5c\x15\x8b\x7c\
+\x9c\x2f\xf2\xc6\x2e\xd6\x88\x5a\x1f\x55\x57\xe3\xf3\xe3\x7f\xfe\
+\xf4\xf3\x86\x7e\x8e\x46\xc7\xff\x57\x56\x9f\x1a\xa6\x48\x05\xf2\
+\xb3\xf2\x1a\xfd\xde\x50\x64\x3a\xfd\x1e\x1d\x93\x7b\xc8\x17\x1f\
+\x26\x57\x68\x9e\x12\x35\xfe\xf3\xf6\x6a\x0a\xf3\xdc\x5c\x68\x15\
+\xa6\xd3\xee\xa6\xd2\x65\xb5\x55\xb1\x4c\xc4\x48\xe6\xae\x8c\x47\
+\x57\x13\xba\x69\xf8\xeb\x62\x32\x9d\xfe\x42\x8d\x44\x34\x79\x55\
+\xe9\x64\x31\x2d\x3e\xfc\x5c\x4e\x61\xac\xbd\x5f\x46\xe5\xac\xf7\
+\xf7\x90\x2c\x10\x7a\xb1\xbc\xd8\x2a\x8f\x91\x17\x1f\x04\xd6\x86\
+\x01\xe3\x03\xc9\x43\xb1\x80\xb5\x4a\x85\x94\x98\xb2\xfa\x10\x75\
+\x97\xc4\xf2\xf7\x8b\x0d\x27\xee\xf6\xe1\xbf\xf3\x4f\xd7\x67\xbd\
+\x5f\x17\x05\x1c\x45\x95\x6a\x9e\x66\x6e\xb7\x92\x50\xb2\xd3\x1e\
+\xb5\x36\x9d\x8c\x8a\x59\xfd\xb0\xc8\x52\xf9\x3b\xab\x7b\x6b\xc8\
+\xf3\x0c\xdf\xc7\xe5\x55\x3e\x99\x0d\x3b\xd2\x5b\xd6\xf4\x61\x55\
+\xd1\x32\x49\x23\xbb\xba\xae\x27\xa3\xcb\x7c\x3a\xcd\x46\x7f\x86\
+\xde\xad\x4a\xb5\xe5\x58\xd4\xa3\x6a\x32\xa7\x4c\x91\x0f\x7f\x0f\
+\x89\x00\x94\xdb\xb4\x28\x7a\x83\xde\xcd\x65\x31\xeb\x51\x02\x48\
+\xdd\xcb\xab\xa2\x77\x06\x81\x5c\xf4\xc6\x55\x7e\x71\x51\x8c\x7b\
+\x8b\x32\x5b\xca\x3c\xba\xbf\x55\x71\xe8\x70\x7d\x59\x1c\x26\xfc\
+\xff\x2d\x3f\x17\xd3\x69\xbf\xf7\xcb\x6c\x94\x1d\x28\xfb\x4e\x83\
+\xa1\x24\xcd\x80\x78\x46\x7c\xdc\x56\x46\x34\x29\x0e\xd7\x43\x5b\
+\xd1\xf3\xa2\x82\xa1\xd7\x8f\x52\xf4\xac\x7e\xfb\xcf\x62\x5e\x95\
+\xe3\xeb\x90\xb5\xd3\xd6\xf0\xd3\xeb\xfe\x69\x52\x63\xe9\x3f\xbb\
+\x7e\x96\xba\x8b\x6a\xf2\x39\x5c\x20\x61\xd7\x71\x04\x3c\x6c\x24\
+\xbe\x0e\x4c\x23\x2f\xf5\x7e\xb8\xf6\x61\xe1\xd7\x45\xe3\xdb\x82\
+\xd3\xef\xac\x0c\xd3\xfc\xac\x98\x9e\x1c\x2d\x9d\x44\xd7\xf7\x97\
+\xd7\xf3\xab\x72\x5c\xac\xee\x5e\x3b\xce\x8b\x74\x25\xff\x98\x17\
+\xb3\xa3\xad\x06\xe5\x83\x75\xae\x06\x31\xcf\x17\x97\x6b\x69\x35\
+\x4b\x37\xca\x91\x97\xc3\xc2\x32\x0a\x7f\x35\xfe\xf0\xcf\x86\x13\
+\xac\x36\x00\xda\xdb\xc0\x98\x5f\xd3\x63\xf8\xca\x1f\xde\x76\xf8\
+\xf5\x8f\xe1\x62\xb4\x9b\x12\x7e\x56\xd7\xd3\x02\x6d\xcd\xfe\xc4\
+\xa2\xfe\x0e\x4a\x2d\x3f\x15\xc7\x6f\x75\x4e\x9f\xd5\xcf\xe5\xf2\
+\x85\xf2\xab\x9f\xc4\x78\x30\x9c\x63\x0c\x66\x36\x8e\xc1\x7f\x95\
+\x93\xd9\x0a\xbd\xca\xab\x4f\x45\x45\xf5\x16\xab\xef\x03\xb8\x81\
+\x6a\xd1\x42\xae\x26\xe3\xd6\xef\x62\xb6\xfa\xbd\xaa\x13\x46\x54\
+\x54\xd3\x09\xfe\x39\x56\x6b\x6c\x9c\x63\x59\x0b\xbb\x17\xc7\x6c\
+\x8d\x35\x23\xfa\x3c\xa9\x27\x67\x93\x29\xfd\x08\x5f\xa7\xc5\xbb\
+\xf1\xa4\x9e\x43\xd8\xc7\x93\x19\x75\xf1\x1d\xfc\x41\x75\x3e\x2d\
+\x6f\xd6\xd7\x5b\x5c\x8e\xf4\x20\x64\x44\xbb\x80\xfd\x4f\x4f\x81\
+\xae\x31\x26\x9c\xee\x83\xcf\x23\xd4\x45\x70\xd1\x3b\x25\xd4\x70\
+\x04\x68\x40\x7d\xc6\x2c\x57\xb6\xa7\x33\xce\xad\x42\x04\x4c\x90\
+\xf2\xdc\x0b\x05\x4c\x4b\xf0\x5f\xe9\x22\xec\x63\x0f\xbc\xd6\x18\
+\x2b\x95\x89\xd0\xd3\x1e\x28\x0c\x73\x9c\xf3\x18\x05\xa6\xb4\x64\
+\xd6\x35\xcd\x10\xc4\xb9\xb0\x51\x77\x50\xa3\xa2\xf4\x0c\xb0\xe2\
+\x3e\xa7\x50\x9d\x5b\xe1\xa8\x46\xf4\x12\xdf\x94\x26\x94\xd3\x4d\
+\x8a\x30\x81\xcb\xc6\xf6\xe9\x58\x07\xc1\xa6\xe8\x49\x99\x39\x26\
+\x95\x77\x0d\xf4\xb1\x27\x40\xed\x10\xc4\x3b\xd1\x80\xa7\x3d\xc1\
+\x32\x85\xf8\x5b\x9a\x06\x04\x77\x75\x96\x81\xa3\x13\x84\xb1\x0a\
+\xe3\x08\x43\x30\x04\xe6\xdf\x07\xb1\x95\x4c\x39\xe5\x51\x23\x62\
+\x52\x6d\x95\xe0\x1e\x71\xae\x12\xca\x30\x47\x82\x04\xaa\x40\xdb\
+\xd1\x1f\x9d\x79\x6e\xa5\x64\x8e\x30\x70\x25\x86\xe0\x57\x23\x0a\
+\x76\x0e\xb4\xba\xc7\x6d\x88\x9b\x20\xb3\x06\x43\x2f\x11\x4d\x08\
+\xc5\x9d\x8b\x50\xd4\x89\x38\xda\x19\xe5\x45\x7c\x3f\xc4\x62\x8c\
+\xb3\xa6\x4f\xb1\x9a\x0f\xdd\x44\x7f\xd0\x35\x4d\x90\x16\x1e\x1d\
+\x46\x8d\x29\x75\xff\xd9\x6b\x82\x8a\xd6\x64\x5d\x4e\xc1\x68\x63\
+\x9e\x4b\x83\x8f\x7c\x97\x98\x95\xeb\x23\x88\xbd\x67\xe1\xe6\x64\
+\x27\x9e\x85\xab\xc8\x4a\x9a\x17\x33\x1d\xf3\xaa\xc2\xfc\x8a\x4b\
+\x3e\xdb\x24\x0d\xf3\x51\x66\x12\x41\x00\x83\x19\xc1\x24\x10\x06\
+\x2a\x67\x97\x13\x40\x39\xa7\x0c\x6f\xd0\xce\xdc\x46\xd8\xcb\x9b\
+\x0d\x91\xb4\xa7\x7d\x69\x8a\x16\xea\xd5\x2a\x5a\x43\xd1\x98\x7d\
+\x02\x33\x31\x56\x34\x60\x3a\x4e\xb0\x0d\x9a\x52\x74\x94\x9e\x70\
+\x90\xa2\xd3\x65\x13\x0d\x48\xbf\xb3\xb7\x3a\xd9\x5b\xbd\xdd\xdb\
+\xef\x46\xf5\x75\x8c\x6a\xa3\xe8\x8b\x2d\xc9\xb7\x6f\x6c\x29\xf9\
+\x42\x33\xd1\x6c\xf4\x2c\x12\x39\x68\x1c\x6b\x83\x16\x61\xa7\x76\
+\x99\x86\xc6\xa4\x53\x9c\x7e\x2b\x81\x05\x5a\xd3\x92\x6f\x32\x2f\
+\xa5\x15\x3f\x36\x27\x48\x94\xba\xde\x10\xe3\x3b\xda\xd5\xd0\xb4\
+\x92\x1a\x17\x67\xa7\x84\xdd\x0e\xad\x3d\x56\x3c\x21\x23\x7c\xf3\
+\x7c\x80\x75\x99\xd4\x96\xbb\xe8\xda\x7a\x93\x41\x82\x28\x98\xf8\
+\x1c\x65\xb5\xdd\x8a\x86\x15\x96\xd7\x6e\xce\x4a\x63\x7f\xcb\x43\
+\x65\xa7\xdf\xc5\x59\x88\x0d\xa3\xec\xa6\xf4\xed\x4f\x29\x63\x05\
+\x1f\xc4\x27\x83\xdd\x7c\x33\x26\xb8\xe5\x6d\x76\xd3\xfd\x2d\xed\
+\xd1\x4d\x9a\xe9\x58\xdf\xc1\xe9\x0c\x04\x51\x2d\x4e\xac\x66\x69\
+\x48\xe0\x71\x44\x80\xd2\x78\x84\x4a\x61\x41\x6e\x98\xe2\x69\x10\
+\x35\x58\x93\x59\xa5\xb4\x57\x80\x41\xdc\x34\x08\x55\x8f\x0b\x9d\
+\x59\x07\x9e\xd9\x17\x81\x09\x32\xab\xd7\x18\xcc\xdd\x81\xc9\x69\
+\x25\x64\x60\x75\x1b\x74\xa0\x24\x68\x16\x6d\xf9\xf6\x06\x20\x9a\
+\x46\x6b\x25\xa3\x5e\x99\x1d\x7d\x05\xe5\x7a\xbc\xa5\x76\x73\xad\
+\xbf\x5b\xea\x93\x2d\xf5\x89\x3a\x90\xfc\xbb\x0e\x0e\x64\x41\xeb\
+\x49\xbe\x59\x0a\xb6\x26\x79\x12\x8f\xd0\x68\x92\xa7\x40\xaa\xc1\
+\x32\xac\x64\x82\xa2\xd8\xcd\x24\x1f\x70\xcf\x10\x04\x11\x93\x69\
+\x66\x79\x04\xc6\xd3\x3c\x82\xe3\x79\x8e\x30\x58\x23\xca\xd4\xb6\
+\x35\xcf\x93\xdd\x6d\xcd\xf3\xc6\xd5\xb5\x96\xb6\x9d\x4e\xb2\xc9\
+\x4f\xb8\x38\x70\x2b\x65\x14\xf6\x52\xba\xc4\x4e\x48\xc7\xda\xbc\
+\x0e\xd1\xa2\xe5\x56\x73\x47\xf1\x20\x22\x4d\x63\x29\x56\x37\x99\
+\xa0\x13\x45\x1b\x50\x50\x33\xc6\x38\x30\x86\xa2\x88\x5b\x09\xf3\
+\x52\x3b\x08\x53\xd3\xda\x2e\xd5\xb2\x9c\x93\x42\x29\x09\x56\x98\
+\x42\x4f\x89\x41\x5a\xad\x29\x63\xb8\xa9\x53\x67\x08\xf9\xad\xf5\
+\xa1\xa4\xa6\xb3\x34\x13\xf6\x19\x0c\x14\x10\x30\x20\xd6\xf9\x10\
+\x09\x43\x79\x0e\x1a\x40\x30\xeb\x82\xe3\x0e\x01\x7b\xc6\x34\xd4\
+\xca\x09\xd5\x52\x21\xec\x67\xc0\x84\x92\x4a\x07\x4c\x2a\x84\xc4\
+\x9c\x03\xd3\x5a\x5a\x44\xc3\x11\xf6\x91\x62\x6e\xc9\xa4\x96\x1c\
+\xa8\x80\xe3\x16\x9a\xac\x06\xa8\x03\x91\xe5\x3a\xa0\x82\xb8\x70\
+\x88\xd8\x95\xf0\x86\xce\xb0\x11\xc1\x5b\xc8\x86\x30\xee\x24\x58\
+\x31\x30\x6b\x85\x91\x96\x2f\xe3\xfd\x0e\x8a\x05\x00\xf1\xb8\x65\
+\xaa\xef\x43\xe2\xbe\xd4\xac\x17\xd2\x2a\x10\x9b\x2b\xda\x57\x50\
+\x96\x59\x25\x96\x3d\x42\xe5\xa0\x4b\x7d\x1b\x7a\x0c\x0f\xb4\xec\
+\x91\x41\xa3\x8e\x50\x86\x5b\x30\xbc\xb0\x5f\x60\x21\x31\x05\x0c\
+\x64\xdd\x4b\x83\xb5\x8a\x0e\xd8\x49\x60\x11\x06\x8e\x8e\x7e\x70\
+\x08\x59\x47\xe8\x29\x50\x04\x93\x0a\x7e\x2b\x42\x25\x55\xa9\x8c\
+\xa7\x92\x24\x25\x8c\x9d\xc2\x51\x86\x6f\x9a\x30\x03\x4e\xa6\x1c\
+\xd5\x09\xc9\x38\x74\xc4\x88\x48\x6f\x1f\x93\xb6\x14\x4d\x80\x07\
+\x76\xf4\x3a\x99\x08\xdb\x0e\x75\x93\xea\x73\x88\x63\x45\x97\xa4\
+\xe2\x5c\x6f\x3b\xd8\xb3\xeb\xc5\x62\x87\x7f\x4d\x78\xc8\x4d\xd3\
+\x09\x9f\xb8\x7d\xad\xdb\xdf\xa7\x39\xec\x7b\x3c\xec\xd9\xb4\xc4\
+\xa2\xb4\x3b\x22\x78\x5c\xe8\xa7\xb6\x76\x08\x05\x4c\x00\x6e\x4d\
+\x92\xa9\x6c\x22\x3f\xca\xf5\x77\x8e\xf6\xb5\x3a\x61\xea\xd7\x0f\
+\xfc\x58\xe6\xc3\x9f\x13\xaf\x32\xf0\x7b\x9c\x9a\x79\x47\xcd\x56\
+\x5b\x49\x6a\x0e\x7b\xac\xeb\x08\x1f\x8e\xc2\x1b\xc1\x55\x83\xbe\
+\x80\x08\x9f\xbf\x4e\x45\x6f\x22\xfc\xf4\x73\xde\x56\x65\x2e\xec\
+\x9e\x1e\xed\x2a\x77\xbb\x67\xb9\xc3\x1f\x64\xbf\xae\x0b\x2f\x13\
+\x4f\xb1\x6f\x1e\x5f\xa7\xbf\xee\x46\x03\x14\x2a\x95\xc2\x2a\xd6\
+\x4a\x66\x52\x5a\x84\xe4\x9a\xe5\xa5\x01\x56\x48\x06\x16\x41\x99\
+\x77\x46\x72\xcf\xa3\x6c\xc6\xb0\x99\x01\xae\xc0\xb7\x8d\x72\x69\
+\x73\xab\x94\xd1\x96\xcd\xb1\x4c\x3b\x22\x37\xce\xed\x6d\x7c\xc9\
+\xa5\xa0\xe5\x84\x8f\x0e\x09\x80\x6b\xfa\x24\x78\x21\xc6\x21\xb6\
+\xd9\xb1\xe2\x08\x34\xb5\x55\x12\xdc\x01\x34\x53\x3a\x43\xbc\x87\
+\x50\x3a\xa7\xf0\x7d\x2c\xbf\x88\x52\x20\x29\xc2\xa0\x55\x2f\x05\
+\x30\x3a\x94\x71\xcc\x10\x26\x0d\xb8\x2c\x0b\x98\x00\x33\x61\xc4\
+\xa5\xc0\xca\x28\xc5\x28\xa0\x82\x39\x84\x3a\xc4\xa5\x50\xd5\x36\
+\x0a\x0c\x4c\xc8\x73\x03\x0c\x1c\x02\xa4\x8e\xef\xba\xdb\x67\xe4\
+\x53\x94\x02\xaa\x8c\x62\xca\x80\x3b\x50\x32\x3d\xda\x47\xec\x9c\
+\x79\xeb\x39\x2e\x13\xe6\x9d\x17\xc2\xd2\x78\xa8\x43\xca\x13\x1b\
+\x49\xa0\xab\x91\x07\xd6\x04\x2a\x2d\xbc\x93\x49\x69\xa4\x42\xe9\
+\x88\x0f\x3c\x8a\x45\xa7\xfc\x65\xb4\x55\xb5\xda\xa8\xe7\x18\x9a\
+\xd7\xf0\x8c\xba\xe5\x2f\x41\xa6\x60\xc0\x0d\xfa\x02\x16\x46\xff\
+\x3a\x77\x44\xbf\x9f\x71\xfc\xdb\xcf\x38\x38\x22\x35\x4b\x67\xbe\
+\xb2\x75\x6a\x80\xb0\x4f\x88\x08\x4d\x4e\xb8\xc8\xa9\x3f\xcb\x19\
+\x07\xdf\x3a\xe3\xc0\xb2\x68\xb0\x36\x50\x84\xca\x5b\x47\x6f\x1e\
+\x01\x3f\x78\x91\x7c\x41\x0c\xe8\x75\x9d\x90\xbe\xb0\x19\xfd\xba\
+\x84\xbf\x9d\x2e\x22\x49\xca\xb6\x8f\x15\x3f\x9e\x23\x8e\x09\xa7\
+\x22\x34\x79\xa8\xa8\x9f\x79\x46\x47\x0f\x37\xac\x7a\xab\x8c\xf0\
+\x5a\xa3\x5f\xed\xc3\x74\x23\x05\x37\xa6\x41\xbf\xcf\xe8\x57\x3a\
+\xa3\x5f\x93\xcc\xb7\xa6\x86\xd0\xda\x58\x7a\x9e\x49\xb7\xf3\x4c\
+\x0c\xb3\x5e\x36\x68\x72\x8b\xe8\x91\x79\x26\xfb\x4f\x64\xb9\xdd\
+\x5b\x86\x30\x86\x7b\xf4\x56\xb6\x7a\x0b\x06\xce\x19\x6f\xd0\x17\
+\x30\x91\x5f\x17\xdf\x7b\x29\x13\xf9\x55\x0a\x7f\x2b\x20\x75\x5a\
+\x38\x7a\x73\x90\x68\xd3\x57\xce\x9d\x12\x0d\x98\xa4\xc2\x76\xef\
+\x09\xfd\x2d\x6f\x42\xad\x77\x9f\x0e\xd8\x7c\xe2\x4e\xcb\xc3\x37\
+\x9f\xfc\xa3\xf6\x9e\x9e\x61\xcf\x09\xdd\xd7\xcf\xb3\xe7\xb4\xd9\
+\x72\x8a\x76\x9c\x92\x1b\x4e\x7b\xee\x37\x7d\x1b\xdb\x4d\xdf\xe9\
+\xe5\xd7\x77\x8c\x22\xf3\x74\xa0\xcc\x65\x9f\xcb\xad\x9d\x3a\x66\
+\x61\xa8\xfc\xde\x5d\x88\xfd\x3d\xe3\x23\xf7\x15\xf5\xb6\x1b\x37\
+\xe1\x39\x73\xdf\xe7\xbe\xdd\x5b\x65\x05\xd7\x0d\xfa\x02\xa8\xce\
+\x2b\x3d\x87\x79\x19\x33\xfa\x15\x53\x1d\x91\x69\xa1\x04\x65\x83\
+\xac\x27\xc3\x2a\x9f\xc3\xd1\xfb\x0b\x65\x83\x26\x83\x97\x47\xce\
+\xe8\x6d\x45\x4b\x2f\xc0\x15\x94\x4e\x29\x3a\x95\xd1\x40\x0f\x4f\
+\x77\x73\x1a\x9e\x94\x26\x96\xcc\x62\xf8\x6b\xe9\x7b\x47\x0e\x43\
+\xdb\x25\x2a\xca\x1d\xea\x73\x50\x59\x11\x52\x5a\xc2\xd3\x41\x36\
+\x64\xa2\x84\x1c\x23\x4b\x29\x2d\x9b\xaf\xa1\xd8\xba\x74\xeb\xc7\
+\x69\xfb\x27\xea\x8d\xbf\x47\x6d\x44\xab\x7c\x63\x39\x4e\x3d\x94\
+\x75\x0f\x92\xb5\x97\xf1\xf0\x3d\x6d\x86\x5e\x5f\xb7\x7f\x5e\x61\
+\x22\x31\x91\xde\x06\xf9\xe3\x63\x8c\xe8\xaf\x95\x6a\xb8\x8f\x11\
+\x29\x19\x14\x2c\x32\xe5\x95\x62\x92\x52\xd2\x00\x39\x1b\x56\x54\
+\x69\x69\x77\x32\x6c\x28\x78\x7a\x8b\x0b\x45\x4b\x4c\x08\x67\x3d\
+\x3d\x90\x06\x52\xa9\xc8\xe6\x38\xdd\x6b\x42\x4e\x56\x0a\x0d\xaf\
+\x16\xec\x4b\x91\x49\x7a\x5b\x9f\xeb\xfc\x46\x83\x61\xf5\x16\xd6\
+\x53\xb6\x31\xed\xc0\x84\x27\xd7\x8c\x81\x1f\xe9\xe1\x1b\xe5\x24\
+\x66\xf4\x60\x97\xa6\xc7\xe8\x3a\x1d\x4e\x18\x25\xf4\xfb\xa0\x4d\
+\xee\xe9\xd0\x92\x36\x19\xb4\xb3\xf7\x6a\x95\x73\xfa\x7c\x37\x37\
+\x32\x37\xae\x33\x45\xea\x33\x08\x96\x84\x82\x51\x91\xdf\xf2\xcd\
+\xcf\x84\x2a\xed\xe3\x16\xa6\xbf\x68\x1c\xbe\xcb\x83\xd6\xc1\x8d\
+\x26\x72\x57\x15\xe3\x6d\x11\xeb\xcc\x22\x3c\x33\x5a\x85\xa7\x47\
+\x8d\xf6\xde\x86\x3c\x53\xe7\x04\x63\x36\xa0\x90\x29\xa6\x26\xe5\
+\xae\x3a\xe7\x10\xbc\x87\x67\x4f\xf1\x0d\x2e\xde\x60\x01\xf7\x82\
+\x83\x2d\x34\x18\xa9\x28\xb3\xcc\x1a\x1b\x81\xa7\x04\xe2\x5e\x4d\
+\xe9\x8e\x1b\x54\xb1\x0c\xfe\x01\xa1\x23\x61\x70\x05\x08\x0d\x01\
+\x29\xae\x9d\x5a\xb6\x2c\x94\x0e\xb9\xb4\x40\xe1\x1e\x84\x5a\x2e\
+\x4f\x52\x32\x19\x82\x4d\x86\x66\x10\x6c\xd2\x53\x98\x14\x25\x07\
+\x4c\x32\x44\x98\xa1\x9c\xd0\x9c\x33\xbb\x74\x51\x56\x1b\xab\xd1\
+\xb4\xa2\x97\x54\x19\x65\x7b\xca\x12\xc9\xa4\x4e\x72\x8a\x74\x95\
+\x40\xa0\x9b\xc2\x4e\x09\xa5\xa7\x61\x99\x27\xd4\x1a\x4a\xef\x24\
+\x8c\x71\x26\xd1\x0e\x3d\xb1\xaa\xb9\xf0\xc0\x4c\x66\xa3\x9f\x1f\
+\xc9\x19\x51\xf8\xad\x5d\x84\x9e\x12\x0a\x69\xe2\xde\x08\xe5\x60\
+\xbc\x02\x63\x92\xd4\x41\xa3\x31\x00\x05\xd1\x7a\x2e\xa5\xf6\x82\
+\x1e\x62\x73\xd2\x49\x6e\x97\x69\xc1\x16\xf7\x48\x1d\xa9\xeb\x63\
+\x52\x89\xdd\xa4\xd1\x43\x17\xce\xf0\x0a\xa0\x03\x1e\x09\x97\xca\
+\xe8\x5c\xb5\x3d\xd7\xee\xac\xc2\x6f\x97\x76\x3d\x25\x96\x85\x03\
+\xf3\x1d\x1f\x08\x8b\x25\x42\xee\x62\x2f\xa8\xe9\x41\x70\x25\x1a\
+\xf0\x20\x6d\x7f\x5f\x92\x9e\xaa\xcf\xb5\xc2\xe4\x76\x4a\x13\x97\
+\xf4\xee\x55\x65\x4d\x5f\xd0\x5b\x58\x9d\x09\x8f\x51\x70\x10\x18\
+\x03\x2f\xe2\xe9\x4c\x08\x73\x5e\x82\xca\xf0\xf0\x7f\xbd\xc0\x89\
+\x9e\x78\x4a\xe6\x70\x2e\x78\x02\xc5\x11\xe3\x84\xb4\x0e\x7a\x68\
+\x82\x2d\x1f\x95\xc2\xfa\xa2\xbc\xe5\x44\x84\xbc\xd2\xe1\x6e\x3a\
+\x76\x55\x86\xc1\x3f\xb0\xd5\xcb\xf4\x7a\x22\x81\x05\x9a\xd5\x41\
+\x15\x11\x27\x17\xda\x06\x79\x02\x5b\x63\xbc\xa7\xd0\x33\xb8\x1e\
+\x2d\xa9\xe7\x0c\x7c\x49\x85\x24\xe5\xc4\x78\xba\xbe\x65\x77\x0a\
+\x7a\x87\x7b\x27\x52\xd0\x8b\xcf\x05\xa6\xc5\x3a\xea\x4e\x05\x6d\
+\xeb\x9b\xe6\xb7\x07\xd8\xdd\xb6\xee\x3b\xaf\xb2\x7c\x99\x64\x6f\
+\xe7\xbe\xd0\xb7\x3b\xc5\xb6\x3d\x1e\x57\x12\xec\x83\x1e\xeb\x80\
+\x77\x5b\x51\x0a\x50\x01\x2c\x82\x6b\x2c\xe1\x39\xdd\x23\x73\x9d\
+\x76\x3e\x52\x91\xd0\xe5\xc3\xc6\x9b\x9c\x04\x7a\x3b\x7e\xdc\x6d\
+\xcf\xf7\x3d\xb5\x96\xd0\xd3\x0b\x7d\xaa\x62\xc7\x0e\xd4\xbb\xe8\
+\x0c\x47\x08\x4b\x9f\xad\x00\x13\xcc\x13\xc4\xd3\x49\x0a\xf2\x0c\
+\x42\x3f\x46\xc9\xb6\xf0\x7f\x88\x0d\xc1\xf1\x22\xf4\x34\x89\x92\
+\x75\x04\x27\x45\x0f\xd3\x83\x1d\x12\x01\xb4\x19\xdc\xad\x94\xf4\
+\x80\x14\xbe\x0a\xc7\x6c\x78\x01\x08\xf8\x2c\xbd\xa8\xd5\x46\x28\
+\xac\x4c\x73\x06\xda\x18\x38\x97\x85\x0b\x14\x01\x03\xdf\x94\x2c\
+\xc2\xc2\x41\x0e\xec\xcd\x3b\x1f\xa1\xf0\xa9\x88\x56\xc8\x4b\xd3\
+\xab\xef\x15\x1d\x78\x25\xc7\x93\x08\x41\x65\xf4\x6a\xd8\x43\x77\
+\x45\xf6\x25\x16\x6e\x7b\xa1\x52\x20\xef\x2e\xb0\x5d\xb1\x99\x66\
+\x2e\x3c\xae\xa5\xfd\x1a\xfb\xda\xac\x62\xe7\xb6\xec\xb7\xeb\xfb\
+\x5e\xc0\x52\xa3\xdc\xeb\x11\xf7\x36\x59\x33\xc2\x33\xe1\x68\xcf\
+\x72\x3d\x07\x10\x79\x59\x7a\x77\xe8\x1a\x4b\xcd\xa5\x67\x4d\xc2\
+\x43\xfd\x5b\x6e\x91\x66\xa3\x60\xc6\x62\x5e\x9a\x4d\x3f\xc3\xae\
+\x97\x53\x6b\xe8\xfb\x54\x7d\xb9\x53\x35\x99\xc7\xf0\xb4\xa7\xdb\
+\xbf\x5d\x29\xb7\x2c\xdf\x84\xfd\x5b\xd8\x7a\x38\x9e\x00\x33\xa4\
+\xcc\x59\xb5\xdc\x03\xe6\xdc\x1b\x4e\x73\x98\xcc\x9f\x56\x2c\x5a\
+\x60\x31\x57\xfa\x62\xfd\xc8\x06\xed\x00\x8b\xb0\x83\x1c\x43\x7c\
+\x09\xd1\xdc\x57\x01\x3a\xed\xf1\xd5\x99\x06\x82\x1d\xaa\xc3\x64\
+\xc6\x3a\x70\x0b\x4d\x9b\x34\xc2\x72\x0a\x85\xe2\x9e\x24\x77\x91\
+\xa3\xb7\x57\x3f\x14\x58\xac\x12\x1b\x3a\xaf\x0a\xec\xbc\xfe\xef\
+\xcd\xa6\x8d\xf0\xbb\xf3\x32\xdc\xd5\xbb\x05\xd1\x01\x68\x6b\xf9\
+\x9e\xc5\xf7\xf4\x3a\xd5\x0f\x6f\xfe\x1f\x7c\xc2\xa7\x96\
+\x00\x00\x17\x72\
+\x00\
+\x00\x74\xc6\x78\x9c\xed\x5d\x59\x73\xdb\x48\x92\x7e\xef\x5f\xc1\
+\x55\xbf\xb4\x63\x45\xb0\xee\x43\xb6\x3c\x31\xab\x8e\x99\x98\x0d\
+\x4f\x6c\xc4\x74\x77\xec\xe3\x04\x44\x42\x12\xdb\x14\xa9\x25\x29\
+\x4b\xf2\xaf\xdf\x2f\x0b\x00\x51\x00\x8a\x87\x2e\xb7\xdb\x61\x32\
+\xba\x45\x24\x0a\x75\xe4\x9d\x59\x59\xf0\xbb\xbf\xdc\x5f\xcf\x06\
+\x9f\x8a\xe5\x6a\xba\x98\x9f\x1e\xf1\x8c\x1d\x0d\x8a\xf9\x78\x31\
+\x99\xce\x2f\x4f\x8f\x7e\xfb\xf5\x6f\x43\x77\x34\x58\xad\xf3\xf9\
+\x24\x9f\x2d\xe6\xc5\xe9\xd1\x7c\x71\xf4\x97\xf7\x3f\xbc\xfb\x8f\
+\xe1\x70\x70\xb6\x2c\xf2\x75\x31\x19\xdc\x4d\xd7\x57\x83\x7f\xcc\
+\x3f\xae\xc6\xf9\x4d\x31\xf8\xe9\x6a\xbd\xbe\x39\x19\x8d\xee\xee\
+\xee\xb2\x69\x05\xcc\x16\xcb\xcb\xd1\x9b\xc1\x70\x88\x27\x57\x9f\
+\x2e\x7f\x18\x0c\x06\x18\x76\xbe\x3a\x99\x8c\x4f\x8f\xaa\xf6\x37\
+\xb7\xcb\x59\x68\x37\x19\x8f\x8a\x59\x71\x5d\xcc\xd7\xab\x11\xcf\
+\xf8\xe8\xa8\x69\x3e\x6e\x9a\x8f\x69\xf0\xe9\xa7\x62\xbc\xb8\xbe\
+\x5e\xcc\x57\xe1\xc9\xf9\xea\xc7\xa8\xf1\x72\x72\xb1\x69\x4d\x93\
+\xb9\x93\xa1\x11\xf7\xde\x8f\x98\x18\x09\x31\x44\x8b\xe1\xea\x61\
+\xbe\xce\xef\x87\xed\x47\x31\xc7\xd4\xa3\x82\x31\x36\xc2\xbd\xa6\
+\xe5\x61\xad\x4e\xee\x67\xc0\xc4\xd6\xc9\x84\xbb\xf1\xe8\xc0\xfe\
+\x0d\xfe\xdb\x3c\x50\x03\xb2\xd5\xe2\x76\x39\x2e\x2e\xf0\x64\x91\
+\xcd\x8b\xf5\xe8\xe7\x5f\x7f\xde\xdc\x1c\xb2\x6c\xb2\x9e\x44\xdd\
+\xd4\xc8\x6f\x8d\xdb\xa2\xc8\x3c\xbf\x2e\x56\x37\xf9\xb8\x58\x8d\
+\x6a\x78\x78\xbe\xee\xf2\x64\xb2\x18\x53\x9b\xd3\x23\xfc\xb8\x25\
+\x8a\x0c\x57\xf9\xa7\x22\xab\x17\x17\xb7\x3b\xcf\x57\x68\x37\xba\
+\x5a\x5c\x17\xa3\xdf\xa7\xd7\xd7\xf9\x78\xb4\x5a\x8e\x47\xe3\x4f\
+\xab\x11\xb8\xe7\x72\x31\x9c\x8e\x17\xf3\xe1\xfa\x0a\x84\x1d\x61\
+\xa4\x59\x7e\x3e\x2b\x46\xf9\x78\x0d\xb6\x5b\x85\xce\xea\x19\x9c\
+\x6c\x98\x91\x65\xca\xb4\xc7\x89\x6e\x49\x51\x3e\x35\x39\x3d\xc2\
+\x74\x84\xe7\x32\x5c\x5f\x15\xd3\xcb\xab\xf5\xe9\x91\x72\x37\xf7\
+\x01\x70\x37\x9d\xac\xaf\xa2\xeb\xcd\x30\x8b\xdb\xf5\xcd\xed\xfa\
+\xdf\xc5\xfd\xba\x98\x97\x9d\x02\x25\x11\x7e\xc2\x6d\x5a\xea\x06\
+\x76\xf4\x1e\x1d\xbc\x9b\x14\x17\x2b\xea\xa8\x1c\x9b\xae\x64\xb8\
+\x81\x5b\x9b\xbe\x6f\x30\xcf\x9b\x62\x4c\xfc\x59\x36\x8d\xd6\xb0\
+\x7e\x20\x92\xb4\x9b\xca\x92\x6e\x83\x16\x1a\x6e\xfe\x7d\x8f\x85\
+\x0e\x4e\x06\x42\xe1\x7f\x3c\xd9\xe2\xa1\x6c\xc1\xc1\x72\xf8\xc3\
+\x92\x6d\x3e\xd3\xea\x77\x74\x53\xcd\x60\xb8\x58\x4e\x2f\xa7\x40\
+\x43\xd9\xce\xb4\x1b\x63\xa9\xd1\xa2\x38\x53\x47\x83\x51\xb5\xea\
+\x65\x3e\x99\xe6\xb3\xbf\xd3\x1f\x70\x48\xaf\xfb\xf1\x62\x36\xc3\
+\x53\xa7\x47\xf9\xec\x2e\x7f\x58\x6d\xba\x0c\x5c\x7f\x72\xb5\x2c\
+\x20\xa5\x3f\xe2\x77\x91\x2f\xeb\x3e\x34\x33\xac\x35\x74\x7b\x08\
+\xcd\x64\x33\xb3\xcb\x0a\xf8\xdb\x7c\xba\x86\x38\xde\xae\x8a\xe5\
+\x2f\xc4\xd2\xff\x33\xff\x6d\x55\xf4\x5a\xfd\xba\xcc\xe7\x2b\xc8\
+\xcf\xf5\xe9\xd1\x75\xbe\x5e\x4e\xef\x7f\x1a\x8a\xcc\x5a\x25\x9d\
+\x3f\x66\xf8\xf2\xcc\x1b\x6f\x99\x39\xe6\x1c\x70\x23\xe4\xf1\xd0\
+\x59\x91\x39\xa7\xd5\x9b\x4d\x67\x63\xd0\xc5\x30\x9d\x59\xae\x84\
+\x6f\xa0\x0f\x84\x67\x93\x19\x65\x5d\x03\xbd\x48\xb6\xbd\x48\xb6\
+\x5d\x42\xff\x72\x9b\xa1\xa5\x33\x0d\x7a\xdb\xa8\x39\x18\xbd\x84\
+\xb6\x04\x56\xdf\x57\xf7\xdf\xad\xd6\x8b\x9b\xba\x2d\xb8\x73\xfd\
+\x30\x03\x57\x12\x70\x88\x1e\x17\xcb\x93\xf3\x59\x3e\xfe\xf8\x36\
+\x00\x16\xc0\xe7\x74\xfd\x70\xc2\xdf\x1e\x35\x4f\x2c\x2e\x2e\x56\
+\x05\x86\x65\x11\x2c\x08\x23\x9e\xc0\x48\x62\xb3\x80\xa7\x8d\xc5\
+\x52\x63\xf1\xf4\x58\x11\x2f\x8e\xda\x4b\xfe\xe3\x38\x34\x22\xf6\
+\x73\x39\x34\xcd\xa0\x43\xee\x3c\xcf\x8c\xfc\x7a\x39\x34\xc1\x80\
+\xca\x3d\x8b\x01\x93\x4c\x91\x66\x40\xcd\xb6\x33\x60\xd4\xca\xa4\
+\x3a\xcc\xf4\xd1\xe3\x25\xe3\x8b\xb1\xbb\x16\xfb\xd8\xfd\x89\x1a\
+\x63\x27\xbb\x83\x72\xbb\x08\x2b\xec\x17\x60\x77\x91\x71\xeb\x53\
+\xec\x7e\xcf\x4f\x8f\x24\x03\x54\x5b\xde\xd0\xee\x81\xa0\xa6\xcb\
+\xc2\xf7\x22\xd9\x56\x90\x10\xf8\x8c\x18\xc7\xbe\x82\xee\x35\x5e\
+\xe8\xc3\x59\xff\x47\xc1\x54\xee\xec\x13\xb5\x2f\xc6\xb2\x8f\x61\
+\xc7\xe4\x68\x07\x33\x24\x46\xf3\xaf\xc4\x90\x29\x34\x32\xfe\x08\
+\x34\x4a\x65\x74\xae\x9e\x8c\x46\x26\x1f\x85\xc6\xd4\x68\x8f\x40\
+\x23\xd3\x5f\x0c\x8d\xca\xfb\xc7\xa0\xf1\x22\x7c\x9e\x88\x46\x8c\
+\xf5\x38\x34\xa6\x46\x3b\x18\x8d\x18\x6d\x2f\x1a\x5f\xde\x1b\x08\
+\xf8\xdc\xee\x0d\xe0\x76\xa3\x1e\xc9\x34\x0b\x99\x29\x65\x99\x8d\
+\xa0\x30\xb7\x26\x53\xda\x1a\xab\x1a\xad\x74\x91\x6c\x7b\x91\x6c\
+\x4b\xa6\xd9\x67\x70\xbc\xf4\x01\x3a\x76\xc8\x33\xc9\xd1\x2d\x87\
+\x5e\xcd\x18\x33\x92\x8b\x62\x28\xc2\x85\x10\xde\x28\xba\x40\x13\
+\x69\x84\xe0\xc7\xca\x64\xf8\xc3\xdc\xf1\x50\x65\x9e\x79\xe7\xec\
+\x9b\x03\x95\xfd\xa3\x3d\x04\xc1\x5d\xb3\xce\xad\x14\xd9\x63\xd6\
+\xd1\x89\xdf\xc3\x9c\x87\x33\xf9\x5e\x27\x42\x70\xcf\xf7\x30\xe7\
+\xe1\x4c\xfe\xc5\x0d\x7b\x1b\xe1\x3d\x7a\x70\x0b\xe7\xfa\xa5\x0c\
+\x3b\xcb\x3c\x57\x9c\x2b\x70\x96\xe2\xc2\x7a\x5e\x0c\x39\x19\xf6\
+\xf8\x6a\xd3\x66\x28\x33\x67\x9c\xf1\xe0\x3a\x38\x04\x0c\xea\x51\
+\x74\xec\xbd\xcc\x98\xf6\x9e\x35\x1e\x1c\xd9\x7b\x61\x33\xe9\xd1\
+\x41\xb3\x28\xb2\xf7\x88\xe5\x8c\x50\x52\x36\xd0\x87\x12\xaa\x9d\
+\xb4\xc6\xbf\x82\xbd\x77\x06\x11\xd0\xe1\x3a\x8f\x85\xcf\x13\x35\
+\x2c\xc6\x52\x8f\xd2\xb0\xa9\xd1\x0e\xd6\xb0\x18\xcd\x7c\x79\x0d\
+\x1b\xf0\xb9\x5d\xc3\xe2\xb6\x6b\x6b\x58\x95\x81\xb4\x5c\x98\x96\
+\x86\x95\x50\x9b\x02\x91\xbd\x6d\x6b\xd8\x5e\xdb\x8b\x64\x5b\xd2\
+\xb0\x1a\xde\xa4\xb2\xb2\xef\xed\xf6\xd9\x9d\x14\x2b\x7d\x8e\x87\
+\x36\x73\xdc\x28\x63\x8b\xa1\x0c\x3a\x96\x4b\xa1\x98\x0f\x57\x88\
+\x35\xa4\xb1\x94\x66\xd0\x99\xf3\xd6\x1b\xe8\x61\x92\x10\x93\x39\
+\x2b\x99\x79\x3d\x45\xab\xf5\x56\x7f\x74\xa3\xd9\xb4\xb6\xaf\xaf\
+\x47\x13\x5d\x14\x86\xbe\x9d\x2e\x2a\x6c\xa6\x43\x40\xf8\xed\xe5\
+\x27\xc1\xb0\x42\x1b\x7e\x80\x1a\xd7\x46\x26\x7b\xb6\xba\xd7\xf3\
+\xa1\xab\x6e\xa6\xfc\xa8\xd5\x73\xfa\x3e\x6a\xf5\x4e\x71\x48\x65\
+\xa4\xaa\x5b\xeb\xd2\x87\xac\x5e\xa7\x4c\xe6\x66\xd8\x17\x59\xfc\
+\xe3\x8c\x5a\xdf\x69\x15\x56\x3d\xd3\x69\x65\x99\xd0\x0a\x21\x84\
+\x77\x69\x3c\x6e\x67\x22\x0c\x6e\x9e\xed\xc5\xee\xa4\x62\x0a\xd7\
+\xd1\xe8\xee\xe5\xd0\x18\xf1\xc9\x53\x5d\x2c\x74\x92\xcc\x9c\xec\
+\xe6\x93\x2d\x56\x6e\x2f\x77\x62\x34\xb7\xc7\x3a\x1d\x6e\xe5\x5e\
+\x0c\x8d\xfa\x25\xd0\x98\x4e\x40\xbd\x8e\xa7\x8a\xd1\x9e\x80\xc6\
+\x17\xf5\x54\x13\x68\x54\x5b\x85\xba\x99\xb7\x4a\xa7\xe9\x0e\x52\
+\x4e\x85\xa2\xef\xe3\x35\x73\x34\x7a\x12\x6b\x87\x8d\x3e\x91\xf4\
+\x7d\x7d\xd5\x28\xcd\x0b\x30\xa3\x4c\x2d\x74\x1f\x7a\xc3\xe7\x29\
+\xcc\xa8\xd8\xe3\x99\x31\x35\xda\x4b\xa2\x51\x6c\xcd\x4f\x47\x58\
+\x4a\xcd\xfb\x40\x66\x3c\x0f\x9f\xe7\x30\xa3\x14\x4f\x67\x46\x7f\
+\x41\xdf\x57\x67\x46\xee\xf6\x8b\x34\x77\xcf\x10\x69\x27\xe9\xfb\
+\x0c\x2c\x72\xf7\x0c\x91\x4e\xd1\x90\x3d\x13\x8b\x89\x28\x62\x4d\
+\x3f\x67\xf9\xba\x40\xdc\x6c\x3d\xdc\x16\x79\x2c\xf1\xc3\x73\xc7\
+\x9a\xa8\x80\xc2\x58\xa9\x33\xe1\xb8\xd0\xcd\xb4\x29\xe4\x45\x50\
+\x63\x1c\xf9\xae\xed\x74\x78\xbf\x2d\xa0\x36\xa4\x8d\xe2\x85\x1f\
+\x16\xea\xa7\x24\x88\x45\x99\xf6\x1d\x09\x33\xe2\x91\xbd\x0a\x6b\
+\x4f\x54\x73\xd8\x24\x09\x45\x8a\x65\x5e\x49\x2f\x75\x0b\x45\x88\
+\xf0\xb8\x43\x90\x65\x5b\x28\x12\x2e\x53\x8e\x73\x6b\x3a\x28\x32\
+\x4c\x19\xc1\xf4\xce\xc5\x4b\x75\xd0\xe2\x49\xcd\xec\x5d\xfc\x81\
+\xac\x51\xc5\x98\x3a\xe3\x81\x82\x6f\x5e\x0e\x69\x12\xec\xa6\x11\
+\x58\xf7\x52\x29\x42\x70\x27\x64\x9b\xaf\x6c\x06\xdc\x00\x6d\x2d\
+\xa4\x51\x5b\x6b\x15\x17\x3b\x91\xa6\xc4\x61\x48\x3b\xc4\xc4\x3d\
+\x1b\x69\xe9\xcc\xc5\x73\x33\x5f\x1c\x52\x67\xb0\x50\x84\xfb\xd6\
+\xf1\x90\xd4\xc2\x2f\xce\xac\xa3\x34\x2b\x00\x5a\x0b\xca\x73\x49\
+\xad\xa4\x72\x68\x05\x9f\x83\xab\x48\xce\x97\xe0\x4b\xf0\xb0\x04\
+\x8a\xdb\x79\x60\x91\x79\xed\x34\xf7\x8d\xe8\x52\x46\x83\xeb\x4c\
+\x5b\xae\xa2\xc4\xe4\x38\xd9\x76\x9c\x6c\x9b\x48\x60\xb7\x34\xc6\
+\x2e\x22\xa9\x2f\x2a\xd6\x90\x4a\xc1\x4c\xc4\x18\xc4\xa1\x4a\x65\
+\xcc\x1b\xde\xd1\x7c\x2a\x53\x52\x72\x69\x58\x97\x43\xa5\x75\x52\
+\xef\xca\x81\x22\xfa\x38\x70\xf1\x87\x44\x04\x5f\x2d\x87\x56\x23\
+\xb2\xc4\x0f\xa3\x39\x93\x81\x41\x9d\xd3\xc0\x77\xc8\xd4\xfa\x4c\
+\x69\x6d\xbc\x6c\x33\xa9\xcc\xb4\x86\xad\x52\x6d\x26\xb5\x81\x22\
+\xba\xb7\xb1\x21\x10\x8a\xab\x0e\x93\xf6\xda\x8e\x93\x6d\x53\x4c\
+\x6a\x0f\xa4\xd3\x21\x01\xf0\x8b\x31\xa9\x30\x10\x6b\x0b\x43\xd3\
+\x36\xcf\x12\xe6\xd9\x41\x01\xb4\x98\x94\xd3\xb6\x8c\x73\xb1\x9d\
+\xe2\xa9\xb6\xc9\xe4\xc8\x81\x6a\xd4\x7e\x09\x26\x7d\x85\x8d\x0a\
+\xad\x77\xd9\x5e\xdc\x96\x2d\xa4\xc1\x7a\x29\x09\x33\xde\x29\x07\
+\xa0\x7a\x02\x65\x6d\xdb\xa6\x09\x9e\x59\x65\x7d\x84\x99\xb0\x3d\
+\x00\xa8\x83\x77\x70\x68\x21\xcf\x2b\x2e\x3e\x6c\x7b\x6f\x5f\x3c\
+\x6e\xdb\xb6\x5a\x53\x30\xdd\xdc\x28\xdf\xe6\x2e\x4d\x5b\x2a\x2a\
+\x8a\x20\x68\xf1\x2e\x73\x5e\x4b\xe1\xda\xb5\x10\xdc\x00\x25\x52\
+\x1d\x5c\x67\xf7\xaa\x8b\x17\xbb\x28\x0f\x15\xd4\xf7\x3a\xda\x54\
+\xe7\x2e\x86\xd0\xa2\xdb\x1b\x41\xa0\x3f\x87\x43\xfa\xc8\xc5\xbe\
+\x1b\x51\xed\x67\xf8\xb5\xa9\xed\xa4\x62\xd9\xc9\xa7\x69\x71\xf7\
+\x43\x7b\xd9\x77\xd3\xf9\x64\x71\x37\xa4\x6d\x85\x5a\x47\x75\xef\
+\xdd\x37\xa1\x76\xf7\x56\x5d\xd3\xea\xb8\xdb\xd2\xa2\x2a\x72\xf5\
+\xde\x77\x1b\x6c\x0a\x77\x6f\xcb\xa5\x54\x55\xb0\x51\x8b\xcb\xe5\
+\x74\x32\x3c\x3f\x5f\xdc\x93\x70\xdf\xd6\xca\x6b\x75\xb5\xb8\xa3\
+\x3b\xa7\x47\x17\xf9\x6c\xa3\xd2\x1a\x3a\xde\x2e\x97\xd4\xeb\x2c\
+\x7f\x28\xa0\xf7\xc3\x1f\xd1\x6b\xf4\x10\xa4\xc8\x79\xae\x4c\x6f\
+\xe6\xa4\xd6\x87\x5c\x92\x6e\xe3\x9a\x77\xef\x7e\x5e\x2c\xae\x9b\
+\x6c\x40\x53\xaa\x9a\x5f\x16\xab\xab\x1c\x4b\x06\xd5\x52\x37\xab\
+\x80\x2c\x84\x92\xd5\xfd\xf3\xc5\x72\x52\x2c\xa3\x1b\x02\x3a\x50\
+\x33\xef\x5a\xf7\x43\x70\x07\xde\x33\xe1\x53\xdd\xa2\x1e\xeb\x1b\
+\x65\x1e\xac\x1e\x13\x78\xa1\x82\xe7\xee\x14\x08\x6b\xf1\x1c\x63\
+\xdc\x5d\x4c\x67\x33\xf4\x53\x56\x89\xd4\x58\x5e\x2f\x17\x1f\x11\
+\x5f\x56\x25\x38\x35\x67\x5d\x17\xeb\x7c\x92\xaf\xf3\x66\xb0\x1a\
+\x52\x47\xd6\xef\x96\x93\x8b\x93\x7f\xfd\xfc\xb7\x4d\xa4\x3b\x1e\
+\x9f\xfc\xef\x62\xf9\xb1\x89\x5c\xa9\x41\x7e\xbe\xb8\x05\xdf\x6c\
+\xa2\x71\xaa\x5e\x1e\x9f\x90\x22\xcf\xd7\xef\xa7\xd7\x98\x28\xd5\
+\xa9\xff\xe7\xfd\xf5\x0c\xcc\xbc\xb9\xd1\x6a\x4c\xd5\xca\x4d\xa7\
+\x65\xb7\xcb\xa2\xac\x43\x4f\x96\xee\x4f\xc6\xd7\x53\x7a\x68\xf4\
+\xcb\x1a\x0b\xfe\x07\x0d\x12\x45\xe4\x55\xa7\xd3\xf5\xac\x78\xff\
+\x4b\xfe\xa9\x08\xe3\x96\x97\xad\x16\xa1\xba\x7f\xb1\x7c\x1f\x0d\
+\x4d\x4b\xfc\xeb\xe5\x26\x92\xee\xf7\xf7\xdf\xf9\xc7\xdb\xf3\xc1\
+\x2f\xeb\x02\xfa\x61\x99\xea\x98\x64\xb6\xdf\x49\x68\xd9\x1b\x8f\
+\xba\x5d\xdd\x9e\xff\x0e\x65\xd5\xea\x80\xd6\xff\x5f\xf9\x65\x67\
+\x0e\x04\x9d\x4d\xdf\x5f\x4d\x26\xef\x46\xd5\xef\x74\x83\x7c\x39\
+\x19\x4c\x96\x53\x5a\xf8\xae\x76\xab\x7c\x5f\x8b\xe9\x62\x4f\x0f\
+\x58\x4d\xb2\x8b\x12\xd6\x5a\x42\xc0\x40\x6f\xb1\x84\xef\xd9\x74\
+\x5c\xcc\x57\xfb\x19\x20\x75\x18\xa3\x7a\x76\x05\xee\x38\xc7\xef\
+\xc9\xe2\x3a\x9f\xce\x47\x3d\x5e\x98\x4e\x40\x8d\xe9\xc5\xb4\x58\
+\x76\xef\x94\x63\xbc\xaf\x86\x28\xcf\x14\x64\xd7\xb7\xab\xe9\xf8\
+\x2a\x9f\xcd\xb2\xf1\xe7\x72\xde\x65\xab\x5a\x0e\x46\x95\x20\xc4\
+\x82\xf1\xa1\xbb\x8a\x48\x36\x1e\xbf\x80\x36\x86\x6e\x8a\x25\xf8\
+\x7d\xf5\x24\x0c\xcd\x57\x3f\xfe\xab\xb8\x59\x2e\x26\xb7\xe1\x18\
+\x44\x1b\x35\xcf\xef\xfb\xe7\x29\xd4\xcb\xf4\xfc\xf6\x55\xfa\x2e\
+\xc0\xc4\xe1\x06\x21\x7b\x15\xe7\xdc\x46\x0d\xc6\xeb\x4c\x58\xa4\
+\xac\xde\x8d\x6a\x55\x16\xae\x2e\x3b\x0a\x74\x96\x9f\x17\xd0\x92\
+\x37\xd3\xfb\x48\xd3\xa6\xad\xcb\xe5\x72\x71\x7b\x73\xbd\x98\x14\
+\x55\x83\x5a\x33\x5e\xd6\x6b\xaa\x72\x77\x93\xe9\xea\x06\x0d\x4e\
+\xa6\x73\x72\x1c\x5a\x9e\xc4\xa5\x66\xa2\xf1\x86\xd6\x89\x52\x54\
+\xaa\x45\x61\x9a\xca\xa1\xaa\x6a\x54\xe1\x05\x0b\xb5\x52\x4a\x67\
+\x8a\x3c\xa7\x63\x05\x3f\x51\x0b\xe1\xde\x34\x49\xcf\x25\x04\xa9\
+\xc1\xec\x03\x19\x3a\x8d\x30\xca\x1b\x17\x57\x16\x07\x03\xa8\xb5\
+\x87\x73\x22\xe2\xbd\xe7\xcd\x11\x16\xeb\xca\xd0\x21\xba\x57\x19\
+\x7a\xd8\x4d\x4f\xb5\xdf\x71\x77\x21\x22\xc2\xc0\x8a\xdb\xb8\xb7\
+\x0a\x0b\x4d\xa6\x52\x31\xc4\xcc\xdc\xe9\xb7\x71\x31\x32\x19\xa7\
+\x13\x68\xf1\x9f\x7a\x85\xbf\xc2\xbe\x09\x77\xa3\xec\x7e\xb8\x5c\
+\xde\xce\x8a\x93\xf9\x62\xfe\x19\xb6\xf5\x6d\x69\xc7\xe8\xb2\xa8\
+\x7e\x97\x2e\xc9\x09\xaf\x2f\xa9\x5b\x90\xed\x04\x44\x9b\x4f\x62\
+\xe0\xef\x8b\xe9\xfc\x04\xac\x58\x2c\xdf\x5e\xe7\xcb\x8f\xc5\xb2\
+\xec\xa5\xfc\x3d\x5c\xad\xf3\xe5\xba\x05\xb9\x9e\x4e\x5a\xd7\xc5\
+\x7c\xd2\x1a\x37\x74\x35\x9b\xe2\xcf\x89\xaa\x61\x93\x1c\x06\x79\
+\xb9\x04\x13\xc4\x2d\x09\x5a\xe6\x7e\x4f\x58\x0d\x6b\x16\xf9\x69\
+\xba\x9a\x9e\x4f\x67\x74\x11\x7e\xce\x8a\xb7\x6d\x4e\x7a\xbb\xf8\
+\x54\x2c\x2f\x66\x8b\xbb\xfa\x7e\x2c\x04\x37\xf9\xfa\x2a\xa2\xc1\
+\xc6\x3f\x04\xbb\x92\x71\x84\x23\x36\xc6\xa7\x43\x3d\x7a\x48\xb3\
+\xd6\x26\x1d\xa0\xff\x1c\x0c\x05\x07\xb5\xb9\xb3\x54\x2d\x45\x8c\
+\xe4\x98\x74\x83\xb3\x2d\xf0\x08\x2a\x11\x4d\x1b\xcd\x14\x4f\x03\
+\xd1\x83\x25\x3f\x5f\x69\xaf\x00\x76\x88\xdd\x99\x33\x03\x44\x73\
+\x94\xa6\x52\xe6\x58\x08\xb0\x0b\x22\x4f\x5d\xc3\xa4\x3b\x76\x0e\
+\x81\xbf\x12\x52\xe3\xf1\x06\x3a\x54\x88\xfc\xad\x90\x4c\x0c\x86\
+\xe4\xd3\x69\xad\x64\x34\x2b\xb3\x65\xae\x9f\x07\xcf\xe0\xd4\xfe\
+\x91\x8b\xef\x9c\xfa\x6c\x4e\x7d\x26\x0d\x24\xff\x4e\x83\x03\x69\
+\xd0\x15\xf2\x8d\x29\xe8\x08\x79\x12\x1e\x41\x23\x21\x4f\x01\xa9\
+\x07\xcb\x44\xc6\x85\xd1\x91\x90\x0f\xb9\x67\x0a\x4d\x84\x8e\xa4\
+\x3c\x02\xc6\x62\x1e\x81\x63\x39\xe7\x08\xa3\x32\xc1\xb5\x6d\xc9\
+\x79\x72\xba\x2d\x39\x6f\x54\x5d\xcb\xb4\x6d\x55\x92\xcd\x8e\x5a\
+\xe5\xb3\xb6\x78\x76\xcb\x63\xab\x71\xfd\x69\x59\x7c\x7a\x52\x71\
+\xdf\x64\x8c\x03\xee\x39\x25\xe8\xb5\xf1\xc7\x5c\x66\x0c\x2a\x4a\
+\x10\xe2\x39\x26\x6f\x58\x0b\xc8\x43\x01\x91\x52\x9c\x60\xd2\x5a\
+\xc7\x02\x8c\x31\xc0\x04\xc1\xbc\x84\x32\xe4\xe5\xc3\x01\xca\x23\
+\x28\x30\x27\x31\x08\x07\x19\x78\xc6\xa4\xf2\x40\x4c\x0a\x76\xb6\
+\xa5\x65\x98\x62\x09\xb3\xcc\x28\x6f\x63\x98\xa0\x1a\x43\xee\xca\
+\xa7\xfb\xd0\x06\xa6\xe0\xd4\x18\xc3\xb5\x49\xc2\xe2\xa7\x89\xd4\
+\x0a\x0b\xf7\x80\x79\x25\x95\xb5\xc7\x21\xb7\xce\xb9\x76\x03\x05\
+\x10\x25\x64\xf5\x06\x66\x06\x1f\x06\xf4\x08\x2d\x3b\x02\x9e\x0d\
+\xf0\x1b\x9e\x92\xf0\x32\x82\x82\x73\x10\x81\x73\x4f\x83\x48\x2b\
+\xbc\x8d\x41\x22\x13\xca\x2a\x16\x3a\xac\x81\x58\x8a\xf6\x74\x2e\
+\x88\x3a\xec\x03\x89\x13\xc1\xed\x70\xc7\x80\x1d\x27\x2c\xe3\x3a\
+\x34\x0b\x93\x91\x44\xde\x80\xc4\x0f\x03\xe9\x6a\x52\xab\x40\x55\
+\x49\xd4\x02\x90\x33\xce\x21\x20\x9c\xd8\x1b\x0c\xae\x07\x12\x02\
+\x84\xd5\xbb\x00\x63\x1e\x9e\x9e\x24\x18\xef\xb0\xc4\x87\x14\xf3\
+\x44\xec\x5e\x29\xd4\xa0\x31\x83\x3a\xd9\xaa\x1d\x8b\x4f\x05\x58\
+\xb8\xd6\x76\x27\x3f\x82\x05\xf0\x6d\x2b\x48\x71\x98\x82\x6c\x41\
+\x0f\x57\x71\x9b\x59\x35\x22\x77\x80\xa4\x6d\x95\xb2\x28\x1d\x1f\
+\xa4\x0c\x9c\x65\xa5\xae\xf8\x92\x0b\xee\xb8\x20\x0a\x83\xc1\x41\
+\x4b\x78\x0b\x20\x93\x12\x1e\x04\x25\x28\x0f\xc7\xb6\x5c\xa0\xa7\
+\x82\xcf\x5d\x42\x75\xc6\x39\xec\x7c\x20\x32\xf3\xd2\xeb\x18\x58\
+\xf2\x8d\x17\xb6\x64\x91\x0a\x48\xfc\x05\x09\x32\xc4\x86\xb0\x4f\
+\xc2\x8a\x8a\x0d\x05\x71\x31\xc8\xcd\x9d\x22\xa6\xdb\xc0\x68\x4a\
+\x9e\x76\xe2\xb8\x8a\xa0\x24\x18\x98\xa4\x37\xc6\x46\xd0\x66\x49\
+\x41\x58\x30\x4f\x1b\xc3\x82\x58\xc1\xb9\x22\xbe\x4b\x2c\x7e\x0b\
+\x9b\x24\xdc\x70\xda\x5a\xde\x61\x58\x3b\xac\x93\x30\xac\x19\xcc\
+\x38\x74\x94\x37\x37\xf7\x5d\x16\x42\x80\xb8\xde\x62\x62\x9f\xc1\
+\x17\x95\xfe\x5d\xf5\xf8\x42\x82\x6e\x5d\xbe\xa0\xa2\x4c\x07\x0d\
+\x1a\xb4\x9d\x57\x4c\x01\xdd\x50\x5d\x50\x39\xde\x05\x84\x81\x70\
+\x41\x0d\x41\x1f\x29\xe3\xc0\x2a\x94\xdd\x17\xc2\x70\xd0\x4a\xbb\
+\xaa\xd9\x06\x76\x96\x84\x12\x85\x08\x68\xf7\xc0\x82\xc2\xb2\x60\
+\x4a\xd2\x1c\x80\x62\x66\x9a\x13\x43\x29\xc9\x98\x0c\xd3\x51\x02\
+\x3f\x4a\x8d\x85\x48\xcc\xb8\x52\xc3\x60\xe2\xb2\xd2\x30\x1e\xeb\
+\x11\x41\xc5\x58\x67\xc3\x72\x48\xc5\x70\xa5\xb5\x0b\x2a\x06\x5c\
+\xe4\x5d\xa9\x62\x30\x6a\xa9\x61\x18\x34\x4b\xd0\x30\xda\x08\x51\
+\x6a\x1d\x7a\x98\x57\x2a\x86\xba\x94\x11\xb4\x34\x50\x50\x93\x2d\
+\x28\x59\x28\xc4\x85\xa5\x36\x92\x8e\x52\x9d\xc1\x16\x61\x9a\xb6\
+\x34\x45\xb4\xde\xca\x40\x75\x80\x29\x3a\xa4\x60\xbb\xd8\xb6\xbf\
+\x6f\xfc\x2c\xb6\x7d\x21\x6e\x8d\xe3\xf1\xb2\xb4\x5f\x50\x21\x4d\
+\xb4\x63\x44\x15\x1e\x4e\x5b\x1f\x79\x06\x75\x18\xae\x41\xae\x68\
+\xfb\xa0\x8e\xc0\x69\xef\xb9\xbd\x2f\x51\x05\xdf\xaa\x8b\x9d\x66\
+\xe9\xed\xca\xd4\xed\xc2\xce\x76\x45\x32\x7b\xb1\x26\x88\x67\x3d\
+\x3e\x8f\xb2\x16\x7f\x76\x77\xfa\x51\xaa\x29\xe5\x13\xaa\xb6\x56\
+\xaa\xf8\x41\x59\x4a\xf0\x38\xc3\x0d\xd9\x80\x04\xb0\x01\x49\xfa\
+\xc9\x38\x8c\x52\x0a\x76\x36\x40\xfc\x0b\x49\x0b\x27\xea\x48\x1f\
+\x7b\x25\x20\xaf\x06\xf2\xae\x14\x14\xd5\xa6\x43\x51\xd5\x7b\x89\
+\x78\xe0\x04\x70\xe7\x5c\x36\xa0\xbe\xb0\x36\xb1\x9d\xe3\x74\x90\
+\x1f\x3e\xc6\x76\x4e\x54\xe2\x6b\x90\xdf\x43\xbd\x90\x3e\x59\x45\
+\xb4\x71\x1a\xc8\x4a\xba\xdd\x03\x33\x50\x68\x74\xb6\x03\xca\xdb\
+\x95\x1a\xdf\x69\x6f\x1c\xa5\x41\xe0\x34\x4a\x63\x04\xc1\xa0\x40\
+\xb9\xf6\x64\x05\xe0\xf4\x69\x11\xfc\x05\xf2\x4c\x55\xb0\x40\x6c\
+\xe3\x8f\x26\xa0\x3a\x93\x5a\x4b\x18\xdc\x0d\xcc\x6e\x60\xb6\xfd\
+\x34\x3a\x37\xb8\x72\x11\x14\x1d\x3a\xab\x3d\xd4\xb3\xa4\xe3\xf0\
+\x42\x79\x1e\x3c\x08\x3a\x28\x47\x20\x01\x6f\xda\x89\xe0\x94\x48\
+\x23\x19\xc6\xa6\x87\xb9\x95\x96\x2b\xea\xd0\x5b\xe6\x4d\x80\xc1\
+\x83\xa5\x25\xb6\x86\xae\x60\x67\xed\x49\x06\xa8\x6d\x2f\xa6\x6a\
+\x99\x82\x05\xa4\x21\x96\x64\xe4\x73\x03\xaa\xb4\xe1\x36\xf8\xe1\
+\xc2\x38\xcd\x83\x99\xd4\x70\x7f\x54\x40\xae\x30\x60\x7b\x60\x1c\
+\x1e\x9d\x2b\x5d\xb9\x04\x1d\xb6\x18\x96\xba\x04\xfd\xeb\xe2\xc3\
+\x86\xc5\x78\x87\xc5\x60\x5a\x3d\xd5\x5e\x1e\xf3\xaa\xda\xb2\x34\
+\xb7\x1e\x88\x29\x81\xca\x21\x68\x0e\xb6\xda\xd2\x6d\x02\x19\xc4\
+\xc9\x30\xc1\x31\x08\x3d\x94\x0f\x56\x10\x03\x2c\x4a\xc3\x34\x79\
+\x03\x08\x99\x10\x60\x93\x0d\xa2\xe3\x68\x30\xf1\xe4\x53\xa2\x0d\
+\x82\x76\x53\x3d\x27\xc0\x19\x1a\xa4\x20\x20\x5c\x59\x13\x92\x78\
+\x19\x9d\x7e\xe1\x96\x60\x90\x7d\xa9\x04\xc1\x68\x52\xb6\x9c\x32\
+\x3d\x18\x5c\x6b\x04\x80\x04\xe4\x1a\x0e\x84\x21\x18\x62\x66\xc3\
+\xc2\xc1\x34\xc4\xf6\xa4\x58\xfa\xab\xfc\x3c\xf8\x67\x70\x69\x44\
+\x6b\xe5\x92\x4e\x64\x1a\x38\xbf\xe5\xb3\xcc\x19\x78\x39\x06\x8b\
+\x12\xde\xb9\x72\x0c\x69\x10\xfe\x49\xac\x18\x42\xd2\x9a\x0b\x55\
+\x68\x72\x0b\xc7\x2a\x4c\x18\x4b\x96\x82\x60\xf0\xf2\xad\x2c\x17\
+\x06\x4f\xc7\x13\x28\xac\xbd\x1a\x4e\x20\x7e\x03\x5f\x11\x76\xbc\
+\x94\x4a\x11\xac\x41\x21\x04\xd9\x34\x90\x1a\xcd\x11\xa0\x22\x05\
+\xad\xc4\x92\x57\x16\x51\xac\xbb\xba\xb0\x62\x5f\x3e\x29\x64\x66\
+\x79\xd5\x99\x07\xba\xe0\x8e\xf9\x63\x61\xa9\x86\x12\x9a\x78\x40\
+\x4e\x2c\x97\xce\x59\xe2\xf7\x72\x7d\x42\x95\xdd\x34\x90\x33\xb2\
+\x07\xcc\xc0\x78\x9b\x0d\x90\xc3\x6e\x10\x8f\x31\xc6\x43\x77\x50\
+\x0b\x90\x29\x57\x71\x05\x8d\x4a\xcf\xe1\x5a\x39\x04\xd9\x8e\x20\
+\x30\x00\x1c\x98\x72\x99\x21\xcf\xe5\x18\xe3\x70\x2a\x79\x6e\x41\
+\x24\xe1\x3a\x3c\x18\x40\x4c\x1e\x0b\xfc\x84\x40\x42\x3a\xc3\x29\
+\x47\x04\x9f\x41\x1b\xd2\x9a\xe0\x58\x36\x93\x2d\x41\xb4\x4c\x91\
+\x79\x6e\x29\x4f\x5c\xc3\xb0\x70\xe8\x2c\xe5\xfd\xa6\x33\x57\xc1\
+\x5a\x63\x46\x20\x2e\xe1\x28\x9b\x80\x44\xb8\xf6\xca\x87\xe9\xc3\
+\x83\x45\xcc\xd4\x43\xec\x2e\x53\x06\x7e\x25\x53\x66\x0f\x76\xb1\
+\xec\xb3\x0c\xdb\x77\xcf\x6a\x9d\x2a\x09\x73\x88\xd9\x1c\xa4\x98\
+\xf6\xc7\x60\x5b\x18\x64\x37\x2a\x62\x0d\xca\x11\x52\x6a\x61\x5e\
+\x21\xb5\x02\x8e\x35\xfc\x21\xad\x06\x7f\x1d\x90\x46\x63\x54\xe0\
+\x87\x5f\x8c\xce\xca\x9a\x01\x1b\x40\x43\x0e\x60\xa2\x1c\x84\x5c\
+\x82\xf7\x0f\x6a\x9e\xea\xfe\xf3\x51\xcf\x77\x58\x3e\x84\x72\xff\
+\xf0\x68\xe2\x2e\x95\xc5\xd6\x43\xf4\x6f\x87\x32\xc5\xba\xf7\xc4\
+\xed\x10\x4c\x20\x42\x34\xba\x53\x2e\x5e\x9a\x0b\xf1\xb8\x00\x21\
+\x69\xfd\x58\x78\xfd\x83\xb0\xcc\x7c\xe7\xda\x3d\xe9\xf5\xce\x7b\
+\xf7\xf2\xe5\x78\x8f\x5f\xd9\xb4\xfb\x4e\xa6\x2f\x47\xa6\x48\x3e\
+\x12\x12\x99\x96\xa9\x43\x25\x72\x8f\x3c\x27\x95\xc1\x1f\xaf\xac\
+\x92\x1a\x16\x9e\xb6\x87\x5b\xa2\x8f\x69\xe7\x45\x4a\x1f\x17\xdd\
+\xb6\xb8\xf9\xa9\x69\xe7\xa4\xb1\x34\xec\x4d\x2f\x9f\x18\x3e\x42\
+\x3d\x86\x57\x9f\x91\x90\xee\x6e\xd7\x18\x25\x34\x2f\xd3\xf5\x8a\
+\x59\x21\x4b\xc7\x15\x81\x90\x13\x32\x82\x52\x8a\x4c\x79\xc4\x4f\
+\x04\x73\x82\x31\x17\xdc\x6e\x05\xbf\x4e\x85\x2d\x00\xa9\x65\x9d\
+\x4b\x0b\x40\xd7\x00\x81\x69\xca\xe8\xa9\x10\xb7\x78\xb8\x2e\xe4\
+\x7c\x26\x60\x67\x5b\x5a\x22\xa8\x91\xa0\x2f\x25\xce\xb4\x07\xa6\
+\x6c\x0c\x13\x70\xbb\x9c\xd6\xc1\x1b\x4a\x40\x1b\x18\x02\x79\xaf\
+\x9c\xd1\x3c\x09\x8b\x9f\xa6\x4c\x37\x03\x4b\x50\x4e\x94\x23\x8c\
+\xe4\x52\x85\xac\xb4\xa5\x0e\x61\x8d\x95\x75\x8a\x47\xa0\xb0\x5b\
+\x83\x59\xc3\xc1\x6f\x80\x21\xaa\x43\x77\x8e\xd2\xe4\x35\x90\x02\
+\x3d\x03\x4f\x38\x80\x04\x25\xb1\x65\x0c\xe3\x19\xbc\x71\x56\x66\
+\xce\x37\x50\x0a\xff\x14\xbd\xcf\xa2\x0a\x14\xbb\x50\xc0\x0c\x9d\
+\x80\x11\xd5\x76\x16\x62\xdb\xb0\x51\x64\xa9\xd2\x9d\x60\x1c\xee\
+\x20\xf3\x94\x4f\xb5\x74\xec\x00\xce\x64\x20\x0d\x16\x21\x55\xe9\
+\xb0\x5b\x66\xbd\x0d\xd4\x0e\xf7\x83\xcb\x2e\x29\xd5\x1f\xa8\xad\
+\x11\xa6\x38\x45\xb1\x01\x30\xc5\x2c\x8f\xb8\xe2\x43\x92\x83\x22\
+\xf7\xb2\x51\x46\x5a\xf4\xf5\xc5\xd6\x8d\xc6\x27\x48\x22\xc5\xbe\
+\x3b\xf6\x80\x36\x87\xaf\x13\xb2\x47\x6f\xb4\xed\x4a\xdf\xea\xff\
+\x6e\xf3\x65\xd1\x13\xbf\x64\x5c\x0b\x8e\x17\x88\x23\x5d\x54\x93\
+\x54\x66\x48\x18\xa2\x29\x0a\xa9\x34\xbd\x55\x82\x88\x4a\x00\x50\
+\x19\xcc\xc0\x3b\x75\xe8\x25\x92\x9c\xd8\x17\x22\xbb\x4e\x72\x4d\
+\xba\x72\x0c\xc3\xe1\xe9\x57\x49\xf3\x30\x86\x91\xb4\xe7\x76\xe0\
+\xee\xd9\xd7\x81\xbc\x6f\x83\xea\x21\x86\x6e\x51\xc4\x24\x29\x12\
+\xd1\xd4\xec\xa5\xba\xeb\x8c\xa1\xba\x63\xa8\xef\x54\xff\x63\xa9\
+\x2e\xba\x14\x11\x7b\xa8\xee\xd9\x3e\xaa\x7b\xd1\x19\x83\x75\xc7\
+\x60\xdf\x16\xd5\xa3\xa5\x77\xd5\x9c\xaf\x96\x0e\xc7\xc4\x90\xc5\
+\x0d\x00\x5a\x7a\xb4\x75\xd4\xcb\x65\x30\x4f\xaf\xe2\x75\xea\xed\
+\xd3\x50\x51\x45\x25\xaf\x82\x8a\x6d\x39\xf9\x3f\xd5\x12\xda\x24\
+\xb2\x15\x89\x8c\x74\x4a\x94\xee\x46\x49\x22\xd7\x3a\x27\x16\x11\
+\x79\xaf\xde\xf3\x5d\xbd\xa7\xbb\x63\xe8\xe4\x18\x7f\x2e\x34\x7e\
+\x73\x9c\x20\xbb\x54\x92\xbb\x39\x41\xb2\x7d\xba\x50\xb2\xae\x2e\
+\xe4\xdd\x31\xf8\xb7\xca\x09\x1b\x24\x68\xdb\x41\x82\xa5\x9c\x3b\
+\x61\x41\x52\x0e\xfd\x43\x75\x4d\x3b\x96\x21\x3f\xfc\x81\x36\x3b\
+\xc3\x4e\x40\x04\x72\x19\xbd\xa9\xb2\x74\x43\x37\x8f\xd4\x5d\xec\
+\x4a\x0c\x2b\xe9\xc3\x67\x47\x96\xe6\x0f\xdf\x4a\x3a\x3c\xf5\xc4\
+\xe8\x35\x0b\xc4\x09\x87\x26\xba\xe9\x5c\xec\x73\x12\xdd\xf4\xd2\
+\x01\x89\x48\xd3\xbb\x03\x59\xe4\xab\xcb\x4a\xd5\xd6\xdb\xfa\x97\
+\x48\x4f\x09\xad\x52\xf9\x27\x3a\xa2\xbe\x25\x2f\xc5\x7d\xbb\x7e\
+\xa4\x9d\x95\x52\xc4\xc8\xe9\x94\x94\x09\x2f\x70\xe9\x39\x14\xb4\
+\x13\x52\xf5\x49\xc9\xa5\xd0\xc1\xa0\x6c\x5b\xe7\x95\x38\x2b\x77\
+\x03\x77\xb7\xea\xf4\x95\x4c\x3c\x35\x6f\x07\x40\xe0\x8d\x68\xb9\
+\xff\x76\x00\xdc\x32\xcc\x2a\xaa\x01\x86\x43\x07\x34\xbb\x63\xca\
+\x2a\xa0\xfd\x26\x35\x55\xd5\xed\xf6\xce\xfa\xf4\x0e\xf0\xfc\xb0\
+\x41\x75\xb8\xee\x9d\xfe\xac\x0e\x07\x4d\x16\x77\xf3\xa3\xdd\x5b\
+\x12\x9b\x79\x73\xc9\xb8\xa7\x59\x72\xcc\xdf\xfa\xf0\xe6\x02\x9b\
+\x79\xee\xb4\x52\xb8\xb0\xe1\x45\x1c\xda\x1b\xc6\xe9\x8d\xb3\x1e\
+\x6a\x16\x88\xd3\x12\x0a\x5a\xc7\x2f\x98\xaf\x03\x63\xe5\xb8\x33\
+\x72\xb0\x79\x37\x28\xe1\xb6\x7e\x25\x28\x74\x94\xf4\xc6\x79\xb9\
+\xc1\x30\x6d\x03\x0a\xe9\x5c\xd0\x54\x87\x3c\x90\x1a\x61\xcb\xee\
+\xc5\xe6\xd9\x2d\x8c\xd5\x7b\x51\x69\x8b\x29\xfb\x2f\x37\x6d\xf3\
+\x72\xef\x8d\xa8\x35\xff\x3b\x13\xbd\x0c\xa3\xa7\x9c\xe8\xd5\xbd\
+\xd6\xa8\xed\xca\xa9\xff\xd6\xd6\x67\x95\x97\x3c\x42\x13\xbf\xb4\
+\x46\xe2\xec\xe9\x2a\xe9\xcb\xec\x67\x3c\xad\xf8\x8c\xde\x25\xd0\
+\xa5\x49\xc6\xb6\x1f\xe2\x48\x76\x41\xa7\x40\xba\x66\x24\x7c\x5c\
+\x6f\x6f\xe3\x0b\x92\xec\xb5\xb6\x36\xce\x67\x8b\xf1\xc7\xed\x04\
+\xab\x6b\x9f\x99\x54\x9a\x85\xad\x01\x27\x35\x6d\x07\x50\x8d\x2b\
+\xb7\x08\x1a\xad\xa5\xd7\xff\x4a\xa7\xa9\x9c\x61\x20\x68\x2f\x9f\
+\x53\xbe\x73\x48\xfb\x47\x9c\x53\xba\x95\xce\x6d\x38\xa1\x78\xa8\
+\x46\xb0\xce\x41\xf4\xcb\x38\x82\x8e\x20\xca\x16\x10\xc2\xab\x21\
+\x85\x5a\xd0\x26\xbc\xb5\xca\xd8\x50\x42\x4a\x2f\xbb\xd6\x4a\xc4\
+\x1d\x9c\x25\xa1\x82\xac\x87\x71\xda\xef\x81\x85\xa2\x34\xed\xa4\
+\xa7\x82\xb6\x8c\x4a\xb8\x05\x95\xcd\x53\x1e\x5d\x48\xca\xb8\x67\
+\xf4\x12\x1e\xa9\x4c\x72\xf1\x89\x6c\x2b\x8f\x5f\x4d\xb1\xa3\xcc\
+\xeb\xd1\x75\x61\x7d\x2b\xce\x23\x5f\xbb\xf2\x49\x8d\x81\x46\x64\
+\xf2\x18\x4a\x9b\x29\xce\xca\x22\x59\x2a\xa5\x34\x32\xbc\xae\x09\
+\x21\x3c\xcc\x9a\x21\x4a\x84\x4a\x14\x73\x2c\x32\xcb\x2d\xec\x08\
+\xa8\x63\x33\x0b\x82\x95\xf5\x31\xda\x7a\xe9\xab\xec\x16\xb3\xce\
+\x5b\x13\x41\xcf\x92\xd0\x40\x32\xc9\x75\xa8\xf0\x08\xe5\x30\x3e\
+\x09\xfb\x40\x96\x9c\xb2\xb2\xae\xd5\x65\x02\x08\xd2\x38\x2b\xa9\
+\xb4\x78\x17\x08\x24\x84\x65\x54\xca\x5b\xda\x50\x42\x28\x00\xb6\
+\xd3\x55\xad\x12\x1d\x17\x42\x98\x0a\xba\x09\xae\x93\xf8\xd9\xe9\
+\x76\x5b\xae\x61\x4d\x93\x5a\x67\xf7\x7e\xd4\x7e\xfd\x42\x26\x66\
+\x8b\x7e\x91\xbd\xfd\xa8\x6f\xc1\x24\x6c\x51\x30\x87\x05\xe0\xca\
+\x2b\xc9\xe1\xfb\x1c\x68\x93\xe9\xdf\xaa\x78\xce\x11\xbe\x9a\x12\
+\xf6\x5b\x24\xc4\x3e\xdb\x5c\x67\xb9\x2d\x74\xae\x0e\xf5\x66\x70\
+\xb2\x0c\xaf\x12\xab\x54\xf2\x66\x3d\x15\xaa\x59\x6d\xa1\x2c\x49\
+\xfc\x6c\x38\xfd\x04\xf7\x99\xdb\x0c\xea\x9d\x89\x20\xf8\x0e\xae\
+\x9d\xf0\xc7\x10\x4e\x45\xaf\xdb\x57\x03\x2a\x93\x83\x5a\x75\xea\
+\x38\x9c\xd5\xf3\x3c\x1c\x9d\xe1\x32\x1c\x78\xf1\x41\xf0\x99\x63\
+\xcc\xda\x3a\x7a\x56\xaa\x54\x07\xdc\xd0\x9b\xe7\x4a\x5d\xad\x9c\
+\x14\x74\xd2\x05\x41\xb3\x51\x54\xce\x06\x1f\x12\xda\x8b\xe1\x79\
+\x05\xaa\x61\x50\x33\xd0\x54\x98\x2c\x8c\x09\xdb\x6a\x46\xd0\x94\
+\x43\x91\x98\xa3\x8a\x43\x16\xfe\xb9\x10\x61\x30\x3a\x37\x34\x77\
+\xf8\x9f\x32\xfc\xa3\x0d\x8e\x19\xb8\x7e\x8e\x94\xa3\x70\x95\x8e\
+\xe1\xe4\x0d\x8a\x52\x0f\xf6\x10\x92\xda\x6c\xf3\xd1\x3f\xdb\xb1\
+\xb3\xca\x37\x0a\x2b\xde\xd1\x0b\x4c\xde\xff\xf0\xff\x87\x1f\x65\
+\x80\
+\x00\x00\x18\x52\
+\x00\
+\x00\x7c\xa9\x78\x9c\xed\x5d\x59\x73\xdb\x48\x92\x7e\xef\x5f\xc1\
+\x95\x5f\xc6\xb1\x22\x58\xf7\x21\x1f\x13\xb3\xee\x98\x89\xd9\xf0\
+\xc4\x46\x4c\x77\xc7\x3e\x4e\x50\x24\x24\x71\x4c\x91\x5a\x92\xb2\
+\x24\xff\xfa\xfd\xb2\x00\x10\x05\xa0\x48\x82\x3a\xdc\x6e\x87\xc9\
+\xe8\x36\x91\x28\xd4\x91\x77\x66\x65\x41\x6f\xff\x7c\x7f\x3d\x1f\
+\x7c\xce\x57\xeb\xd9\x72\xf1\xee\x84\x67\xec\x64\x90\x2f\x26\xcb\
+\xe9\x6c\x71\xf9\xee\xe4\xb7\x5f\xff\x3a\x74\x27\x83\xf5\x66\xbc\
+\x98\x8e\xe7\xcb\x45\xfe\xee\x64\xb1\x3c\xf9\xf3\xfb\x9f\xde\xfe\
+\xc7\x70\x38\xf8\xb0\xca\xc7\x9b\x7c\x3a\xb8\x9b\x6d\xae\x06\x7f\
+\x5f\x7c\x5a\x4f\xc6\x37\xf9\xe0\x4f\x57\x9b\xcd\xcd\xd9\x68\x74\
+\x77\x77\x97\xcd\x4a\x60\xb6\x5c\x5d\x8e\x5e\x0f\x86\x43\x3c\xb9\
+\xfe\x7c\xf9\xd3\x60\x30\xc0\xb0\x8b\xf5\xd9\x74\xf2\xee\xa4\x6c\
+\x7f\x73\xbb\x9a\x87\x76\xd3\xc9\x28\x9f\xe7\xd7\xf9\x62\xb3\x1e\
+\xf1\x8c\x8f\x4e\xea\xe6\x93\xba\xf9\x84\x06\x9f\x7d\xce\x27\xcb\
+\xeb\xeb\xe5\x62\x1d\x9e\x5c\xac\x5f\x45\x8d\x57\xd3\x8b\x6d\x6b\
+\x9a\xcc\x9d\x0c\x8d\xb8\xf7\x7e\xc4\xc4\x48\x88\x21\x5a\x0c\xd7\
+\x0f\x8b\xcd\xf8\x7e\xd8\x7c\x14\x73\x4c\x3d\x2a\x18\x63\x23\xdc\
+\xab\x5b\xf6\x6b\x75\x76\x3f\x07\x26\x76\x4e\x26\xdc\x8d\x47\x07\
+\xf6\x6f\xf0\xdf\xf6\x81\x0a\x90\xad\x97\xb7\xab\x49\x7e\x81\x27\
+\xf3\x6c\x91\x6f\x46\x3f\xff\xfa\xf3\xf6\xe6\x90\x65\xd3\xcd\x34\
+\xea\xa6\x42\x7e\x63\xdc\x06\x45\x16\xe3\xeb\x7c\x7d\x33\x9e\xe4\
+\xeb\x51\x05\x0f\xcf\x57\x5d\x9e\x4d\x97\x13\x6a\xf3\xee\x04\x3f\
+\x6e\x89\x22\xc3\xf5\xf8\x73\x3e\x1c\xaf\xb3\x6a\x7d\x71\xd3\xf3\
+\xf1\x1a\x4d\x47\x57\xcb\xeb\x7c\xf4\xef\xd9\xf5\xf5\x78\x32\x5a\
+\xaf\x26\xa3\xc9\xe7\xf5\x08\x0c\x74\xb9\x1c\xce\x26\xcb\xc5\x70\
+\x73\x05\xda\x8e\x30\xd8\x7c\x7c\x3e\xcf\x47\xe3\xc9\x06\x9c\xb7\
+\x0e\x9d\x55\x93\x38\xdb\xf2\x23\xcb\x94\x69\x8e\x13\xdd\x92\xa2\
+\x78\x6a\xfa\xee\x04\xd3\x11\x9e\xcb\x70\x7d\x95\xcf\x2e\xaf\x36\
+\xef\x4e\x94\xbb\xb9\x0f\x80\xbb\xd9\x74\x73\x15\x5d\x6f\x87\x59\
+\xde\x6e\x6e\x6e\x37\xff\xca\xef\x37\xf9\xa2\xe8\x14\x58\x89\x50\
+\x14\x6e\xd3\x52\xb7\xb0\x93\xf7\xe8\xe0\xed\x34\xbf\x58\x53\x47\
+\xc5\xd8\x74\x25\xc3\x0d\xdc\xda\xf6\x7d\x83\x79\xde\xe4\x13\x62\
+\xd1\xa2\x69\xb4\x86\xcd\x03\x51\xa5\xd9\x54\x16\xa4\x1b\x34\xd0\
+\x70\xf3\xaf\x7b\x2c\x74\x70\x36\x10\x0a\xff\xe3\xc9\x16\x0f\x45\
+\x0b\x0e\xae\xc3\x3f\x2c\xd9\xe6\x0b\xad\x7e\x4f\x37\xe5\x0c\x86\
+\xcb\xd5\xec\x72\x06\x34\x14\xed\x4c\xb3\x31\x96\x1a\x2d\x8a\x73\
+\x7e\x32\x18\x95\xab\x5e\x8d\xa7\xb3\xf1\xfc\x6f\xf4\x0f\x98\xa4\
+\xd3\xfd\x64\x39\x9f\xe3\xa9\x77\x27\xe3\xf9\xdd\xf8\x61\xbd\xed\
+\x32\x30\xfe\xd9\xd5\x2a\x87\xa0\xbe\xc2\xef\x7c\xbc\xaa\xfa\xd0\
+\xcc\xb0\xc6\xd0\xcd\x21\x34\x93\xf5\xcc\x2e\x4b\xe0\x6f\x8b\xd9\
+\x06\x12\x79\xbb\xce\x57\xbf\x10\x57\xff\xcf\xe2\xb7\x75\xde\x69\
+\xf5\xeb\x6a\xbc\x58\x43\x84\xae\xdf\x9d\x5c\x8f\x37\xab\xd9\xfd\
+\x9f\x86\x22\xb3\x56\x49\xe7\x4f\x19\xbe\x3c\xf3\xc6\x5b\x66\x4e\
+\x39\x07\xdc\x08\x79\x3a\x74\x56\x64\xce\x69\xf5\x7a\xdb\xd9\x04\
+\x74\x31\x4c\x67\x96\x2b\xe1\x6b\xe8\x03\xe1\xd9\x64\x46\x59\x57\
+\x43\x2f\x92\x6d\x2f\x92\x6d\x57\x50\xc1\xdc\x66\x68\xe9\x4c\x8d\
+\xde\x26\x6a\x7a\xa3\x97\xd0\x96\xc0\xea\xfb\xf2\xfe\xdb\xf5\x66\
+\x79\x53\xb5\x05\x77\x6e\x1e\xe6\xe0\x4a\x02\x0e\xd1\xe3\x72\x75\
+\x76\x3e\x1f\x4f\x3e\xbd\x09\x80\x25\xf0\x39\xdb\x3c\x9c\xf1\x37\
+\x27\xf5\x13\xcb\x8b\x8b\x75\x8e\x61\x59\x04\x0b\xc2\x88\x27\x30\
+\x92\xd8\x2e\xe0\x71\x63\xb1\xd4\x58\x3c\x3d\x96\xaa\x91\x35\x6a\
+\x2e\xf9\xf7\xe3\xd0\x88\xd8\x4f\xe5\xd0\x34\x83\x0e\xb9\xf3\x3c\
+\x33\xf2\xdb\xe5\xd0\x04\x03\x2a\xf7\x24\x06\x4c\x32\x45\x9a\x01\
+\x35\xdb\xcd\x80\x51\x2b\x93\xea\x30\xd3\x27\xc7\x4b\xc6\x57\x63\
+\x77\x2d\x0e\xb1\xfb\x23\x35\xc6\x5e\x76\x07\xe5\xf6\x11\x56\xd8\
+\xaf\xc0\xee\x22\xe3\xd6\xa7\xd8\xfd\x9e\xbf\x3b\x91\x0c\x50\x6d\
+\x79\x4d\xbb\x07\x82\x9a\x36\x0b\xdf\x8b\x64\x5b\x41\x42\xe0\x33\
+\x62\x1c\x7b\x3c\x67\x1b\x6f\x74\x7f\xce\x7e\x35\x0d\x9f\x47\x2a\
+\x57\x8c\x65\x8f\xe1\xb6\x57\x17\x53\xfa\xf6\x18\x2d\xc5\x6f\x18\
+\xcd\xbf\x10\xbf\xa5\xd0\x28\x8e\x41\xa3\x60\x6a\xec\xec\xa3\xd1\
+\x28\x8e\x43\x63\x6a\xb4\xde\x62\x8b\xd1\xbe\x26\x1a\x19\x3f\x02\
+\x8d\x52\x19\x3d\x56\x8f\x46\x23\x93\x47\xa1\x31\x35\xda\x11\x68\
+\x64\xfa\xab\xa1\x51\x79\x7f\x0c\x1a\x2f\xc2\xe7\x91\x68\xc4\x58\
+\xc7\xa1\x31\x35\x5a\x6f\x34\x62\xb4\x83\x68\x7c\x7e\x9f\x29\xe0\
+\x73\xb7\xcf\x84\xdb\xb5\x11\x21\x07\x46\xc8\x4c\x29\xcb\x6c\x04\
+\x85\x53\x62\x32\xa5\xad\xb1\xaa\xd6\xdd\x17\xc9\xb6\x17\xc9\xb6\
+\xe4\xc0\xf8\x0c\xee\xa9\xee\x61\x89\x86\x3c\x93\x1c\xdd\x72\x58\
+\x9f\x8c\x31\x23\xb9\xc8\x87\x22\x5c\x08\xe1\x8d\xa2\x0b\x34\x91\
+\x46\x08\x7e\xaa\x4c\x86\x7f\x98\x3b\x1d\xaa\xcc\x33\xef\x9c\x7d\
+\xdd\x19\x22\x6d\x12\x8f\xb6\x36\x82\xbb\x7a\x9d\x3b\x29\x72\xc0\
+\xf9\x41\x27\xfe\x00\x73\xf6\x67\xf2\x83\xae\x96\xe0\x9e\x1f\x60\
+\xce\xfe\x4c\xfe\xd5\xdd\x9f\x26\xc2\x3b\xf4\xe0\x16\x21\xc8\x73\
+\xb9\x3f\x2c\xf3\x5c\x71\xae\xc0\x59\x8a\x0b\xeb\x79\x3e\xe4\xe4\
+\xfe\xc4\x57\xdb\x36\x43\x99\x39\xe3\x8c\x07\xd7\xc1\x6d\x62\x50\
+\x8f\xa2\xe5\x15\xc9\x8c\x69\xef\x59\xed\xe7\x92\x57\x24\x6c\x26\
+\x3d\x3a\xa8\x17\x45\x5e\x11\x22\x5e\x23\x94\x94\x35\xf4\xa1\x80\
+\x6a\x27\x6d\xec\x05\x3c\x9b\x86\x75\x06\x71\x62\x7f\x9d\xc7\xc2\
+\xe7\x91\x1a\x16\x63\xa9\xa3\x34\x6c\x6a\xb4\xde\x1a\x16\xa3\x99\
+\xaf\xaf\x61\x03\x3e\x77\x6b\x58\xdc\x76\x4d\x0d\xab\x32\x90\x96\
+\x0b\xd3\xd0\xb0\x12\x6a\x53\x70\x1e\xb9\xf4\x17\xc9\xb6\x17\xc9\
+\xb6\xa4\x61\x35\x7c\x6e\x65\x65\x37\x26\xe8\xb2\x3b\x29\x56\xfa\
+\x9c\x0e\x6d\xe6\xb8\x51\xc6\xe6\x43\x19\x74\x2c\x97\x42\x31\x1f\
+\xae\x10\x91\x49\x63\x29\x19\xa3\x33\xe7\xad\x37\xd0\xc3\x24\x21\
+\x26\x73\x56\x32\xf3\x72\x8a\x56\xeb\x9d\xfe\xe8\x56\xb3\x69\x6d\
+\x5f\x5e\x8f\x26\xba\xc8\x0d\x7d\x5b\x5d\x94\xd8\x4c\x07\xca\x88\
+\x6e\x8a\x4f\x82\x61\x85\x36\xbc\x87\x1a\xd7\x46\x26\x7b\xb6\xba\
+\xd3\x73\xdf\x55\xd7\x53\x3e\x6a\xf5\x9c\xbe\x47\xad\xde\x29\x0e\
+\xa9\x8c\x54\x75\x63\x5d\xba\xcf\xea\x75\xca\x64\x6e\x87\x7d\x96\
+\xc5\x1f\x67\xd4\xba\x4e\xab\xb0\xea\x89\x4e\x2b\xcb\x84\x56\x08\
+\x21\xbc\x4b\xe3\x71\x37\x13\x61\x70\xf3\x64\x2f\x76\x2f\x15\x53\
+\xb8\x8e\x46\x77\xcf\x87\xc6\x88\x4f\x1e\xeb\x62\xa1\x93\x64\x7e\
+\x69\x3f\x9f\xec\xb0\x72\x07\xb9\x13\xa3\xb9\x03\xd6\xa9\xbf\x95\
+\x7b\x36\x34\xea\xe7\x40\x63\x3a\x4d\xf7\x32\x9e\x2a\x46\x7b\x04\
+\x1a\x9f\xd5\x53\x4d\xa0\x51\xed\x14\xea\x7a\xde\x2a\x9d\xcc\xec\
+\xa5\x9c\x72\x45\xdf\xe3\x35\x73\x34\x7a\x12\x6b\xfd\x46\x9f\x4a\
+\xfa\xbe\xbc\x6a\x94\xe6\x19\x98\x51\xa6\x16\x7a\x08\xbd\xe1\xf3\
+\x18\x66\x54\xec\x78\x66\x4c\x8d\xf6\x9c\x68\x14\x3b\xb3\xf8\x11\
+\x96\x52\xf3\xee\xc9\x8c\xe7\xe1\xf3\x14\x66\x94\xe2\xf1\xcc\xe8\
+\x2f\xe8\xfb\xe2\xcc\xc8\xdd\x61\x91\xe6\xee\x09\x22\xed\x24\x7d\
+\x9f\x80\x45\xee\x9e\x20\xd2\x29\x1a\xb2\x27\x62\x31\x11\x45\x6c\
+\xe8\xe7\x7c\xbc\xc9\x11\x37\x5b\x0f\xb7\x45\x9e\x4a\xfc\xf0\xdc\
+\xb1\x3a\x2a\xa0\x30\x56\xea\x4c\x38\x2e\x74\x3d\x6d\x0a\x79\x11\
+\xd4\x18\x47\xbe\x6b\x73\xd3\xa0\xdb\x16\x50\x1b\xd2\x46\xf1\xc2\
+\xfb\x85\xfa\x29\x09\x62\xd1\x7e\xc4\x9e\x84\x19\xf1\xc8\x41\x85\
+\x75\x20\xaa\xe9\x37\x49\x42\x91\x62\x99\x57\xd2\x4b\xdd\x40\x11\
+\x22\x3c\xee\x10\x64\xd9\x06\x8a\x84\xcb\x94\xe3\xdc\x9a\x16\x8a\
+\x0c\x53\x46\x30\xbd\x77\xf1\x52\xf5\x5a\x3c\xa9\x99\x83\x8b\xef\
+\xc9\x1a\x65\x8c\xa9\x33\x1e\x28\xf8\xfa\xf9\x90\x26\xc1\x6e\x1a\
+\x81\x75\x27\x95\x22\x04\x77\x42\x36\xf9\xca\x66\xc0\x0d\xd0\xd6\
+\x40\x1a\xb5\xb5\x56\x71\xb1\x17\x69\x4a\xf4\x43\x5a\x1f\x13\xf7\
+\x64\xa4\xa5\x33\x17\x4f\xcd\x7c\x71\x48\x9d\xc1\x42\x11\xee\x5b\
+\xc7\x43\x52\x0b\xbf\x38\xb3\x8e\xd2\xac\x00\x68\x2d\x28\xcf\x25\
+\xb5\x92\xca\xa1\x15\x7c\x0e\xae\x22\x39\x5f\x81\x2f\xc1\xc3\x12\
+\x28\x6e\xe6\x81\x45\xe6\xb5\xd3\xdc\xd7\xa2\x4b\x19\x0d\xae\x33\
+\x6d\xb9\x8a\x12\x93\x93\x64\xdb\x49\xb2\x6d\x22\x81\xdd\xd0\x18\
+\xfb\x88\xa4\xbe\xaa\x58\x43\x2a\x05\x33\x11\x63\x10\x87\x2a\x95\
+\x31\x6f\x78\x4b\xf3\xa9\x4c\x49\xc9\xa5\x61\x6d\x0e\x95\xd6\x49\
+\xbd\x2f\x07\x8a\xe8\xa3\xe7\xe2\xfb\x44\x04\xdf\x2c\x87\x96\x23\
+\xb2\xc4\x0f\xa3\x39\x93\x81\x41\x9d\xd3\xc0\x77\xc8\xd4\xfa\x4c\
+\x69\x6d\xbc\x6c\x32\xa9\xcc\xb4\x86\xad\x52\x4d\x26\xb5\x81\x22\
+\xba\xb3\xb1\x21\x10\x8a\xab\x16\x93\x76\xda\x4e\x92\x6d\x53\x4c\
+\x6a\x7b\xd2\xa9\x4f\x00\xfc\x6c\x4c\x2a\x0c\xc4\xda\xc2\xd0\x34\
+\xcd\xb3\x84\x79\x76\x50\x00\x0d\x26\xe5\xb4\x2d\xe3\x5c\x6c\xa7\
+\x78\xaa\x6d\x32\x39\xd2\x53\x8d\xda\xaf\xc1\xa4\x2f\xb0\x51\xa1\
+\xf5\x3e\xdb\x8b\xdb\xb2\x81\x34\x58\x2f\x25\x61\xc6\x5b\x45\x13\
+\x54\x75\xa1\xac\x6d\xda\x34\xc1\x33\xab\xac\x8f\x30\x13\xb6\x07\
+\x00\x75\xf0\x0e\xfa\x96\x3b\xbd\xe0\xe2\xc3\xb6\xf7\xee\xc5\xe3\
+\xb6\x6d\xaa\x35\x05\xd3\xcd\x8d\xf2\x4d\xee\xd2\xb4\xa5\xa2\xa2\
+\x08\x82\x16\xef\x32\xe7\xb5\x14\xae\x59\x31\xc2\x0d\x50\x22\x55\
+\xef\x6a\xc4\x17\x5d\xbc\xd8\x47\x79\xa8\xa0\xae\xd7\xd1\xa4\x3a\
+\x77\x31\x84\x16\xdd\xdc\x08\x02\xfd\x39\x1c\xd2\x6f\x63\xb1\x66\
+\xff\x62\x6d\x73\xb1\xf0\x56\x99\xe1\xca\x98\x36\x9b\x63\x35\x52\
+\x35\x6b\x83\x12\x6d\x0b\x2f\x58\x49\xab\xbc\x38\x6a\xf1\x6f\x47\
+\x54\x1e\x1c\x7e\x6d\xcb\x7f\xa9\xa4\x7a\xfa\x79\x96\xdf\xfd\xd4\
+\x44\xc3\xdd\x6c\x31\x5d\xde\x0d\x69\x4f\xa5\x52\xd0\xed\x7b\xf7\
+\x75\x9e\xa1\x7d\xab\x2a\x7b\x76\xdc\xed\x68\x51\xd6\x41\x7b\xef\
+\xdb\x0d\xb6\xe5\xdd\xb7\xc5\x52\xca\x42\xe9\xa8\xc5\xe5\x6a\x36\
+\x1d\x9e\x9f\x2f\xef\x49\xb3\xdd\x56\x9a\x7b\x7d\xb5\xbc\xa3\x3b\
+\xef\x4e\x2e\xc6\xf3\xad\x3e\xaf\xe9\x7a\xbb\x5a\x51\xaf\xf3\xf1\
+\x43\x0e\xa3\x17\xfe\x11\x9d\x46\x0f\x41\xe2\xb8\xf0\xbe\x33\x71\
+\x32\x69\x43\x70\x9d\x80\x7e\x52\xed\x9b\x5f\x96\xcb\x6b\x72\xd6\
+\x9c\x70\xd0\xd6\xbc\x7d\xfb\x66\x7c\x99\xaf\xaf\xc6\x58\x38\x1a\
+\xa5\x6e\x96\x31\x69\x88\xa6\xcb\xfb\xe7\xcb\xd5\x34\x5f\x45\x37\
+\x04\xcc\x80\x66\xdb\x89\x15\xf7\x43\x7c\x0b\x8e\x34\xe1\x53\xde\
+\xa2\x1e\xab\x1b\x45\x2a\xb0\x1a\x13\xd8\xa1\xca\xf8\xf6\x14\x08\
+\x77\xf1\x1c\x63\x0c\x5e\xcc\xe6\x73\xf4\x53\x14\xca\x54\xb8\xde\
+\xac\x96\x9f\x10\x62\x97\x55\x48\x15\x7f\x5d\xe7\x9b\xf1\x74\xbc\
+\x19\xd7\x83\x55\x90\x2a\xb9\xf0\x76\x35\xbd\x38\xfb\xe7\xcf\x7f\
+\xdd\x06\xfb\x93\xc9\xd9\xff\x2e\x57\x9f\x2a\x36\x86\x43\x82\x06\
+\xe3\xf3\xe5\x2d\xb8\x67\x9b\x90\xa0\x32\xf7\xc9\x19\xd9\xb2\xf1\
+\xe6\xfd\xec\x1a\x13\xa5\x33\x0d\xff\x79\x7f\x3d\x07\x4b\x6f\x6f\
+\x34\x1a\x53\x59\x7b\xdd\x69\xd1\xed\x2a\x2f\xce\x2c\x24\x8f\x79\
+\x4c\x27\xd7\x33\x7a\x68\xf4\xcb\x06\x0b\xfe\x3b\x0d\x12\x25\x25\
+\xca\x4e\x67\x9b\x79\xfe\xfe\x97\xf1\xe7\x7c\xf0\x97\x75\x18\xba\
+\x80\x34\x1a\x85\xc3\x20\xcb\xd5\xfb\x68\x74\x5a\xe5\x5f\x2e\xb7\
+\xf9\x84\x6e\x97\xff\x3d\xfe\x74\x7b\x3e\xf8\x65\x93\x43\x71\xac\
+\x52\x1d\x93\xf0\x76\x3b\x09\x2d\x3b\xe3\x51\xb7\xeb\xdb\xf3\x7f\
+\x43\x8b\x35\x3a\x20\x14\xfc\xd7\xf8\xb2\x35\x07\x82\xce\x67\xef\
+\xaf\xa6\xd3\xb7\xa3\xf2\x77\xba\xc1\x78\x35\x1d\x4c\x57\xb3\xcf\
+\xf9\xfe\x76\x74\x28\x63\x30\x5e\xef\x6f\x34\x5b\x1e\xe8\x04\x0b\
+\x4a\x8e\x53\xc0\x1a\xab\x08\x48\xe8\xac\x97\x50\x3e\x9f\x4d\xf2\
+\xc5\xfa\x30\x1b\xa4\x8e\xef\x94\xcf\xae\xc1\x23\xe7\xf8\x3d\x5d\
+\x5e\x8f\x67\x8b\x51\x87\x23\x66\x53\x10\x64\x76\x31\xcb\x57\xed\
+\x3b\xc5\x18\xef\xcb\x21\x8a\x23\x28\xd9\xf5\xed\x7a\x36\xb9\x1a\
+\xcf\xe7\xd9\xe4\x4b\x31\xef\xa2\x55\x25\x0d\xa3\x52\x1c\x62\xf1\
+\xf8\xd8\x5e\x45\x24\x21\xc7\x2f\xa0\x89\xa1\x9b\x7c\x05\xae\x5f\
+\x3f\x0a\x43\x8b\xf5\xab\x7f\xe6\x37\xab\xe5\xf4\x36\x9c\x9a\x69\
+\xa2\xe6\xe9\x7d\xff\x3c\x83\x92\x99\x9d\xdf\xbe\x48\xdf\x39\xf8\
+\x38\xdc\x20\x64\xaf\xe3\xe4\xe3\xa8\xc6\x78\x95\x12\x8c\x54\xd6\
+\xdb\x51\xa5\xd0\xc2\xd5\x65\x4b\x8d\xce\xc7\xe7\x39\x74\xe5\xcd\
+\xec\x3e\xd2\xb7\x69\x4b\x73\xb9\x5a\xde\xde\x5c\x2f\xa7\x79\xd9\
+\xa0\xd2\x8f\x97\xd5\x9a\xca\x24\xe6\x74\xb6\xbe\x41\x83\xb3\xd9\
+\x82\x9c\x8a\x86\x97\x71\xa9\x99\xa8\x1d\x80\x4d\xa2\x72\x99\x8a\
+\x72\x98\xa6\xba\xb0\xb2\x78\x59\x78\xc1\x42\xd1\x98\xd2\x99\x22\
+\x17\xf2\x54\xc1\x61\xd6\x42\xb8\xd7\x75\xf6\x77\x05\x41\xaa\x31\
+\x0b\xd3\x33\xe4\x1a\xf1\xa4\x37\x2e\x2e\x44\xbf\x0f\x70\xed\xe1\
+\xa5\x89\x78\x13\x7e\x7b\xe2\xc9\xba\x22\x86\x8a\xee\x95\x46\x9f\
+\x4b\xe9\xe9\xa8\x40\xdc\x5d\x08\x0d\x31\xb0\xe2\x36\xee\xad\xc4\
+\x42\x9d\xb2\x55\x4c\xc0\x1f\x72\xfa\x4d\x5c\xbb\x4e\x26\xea\x0c\
+\xba\xfc\x4f\x9d\x3a\x71\x61\x5f\x87\xbb\xd1\x36\x47\xb8\x5c\xdd\
+\xce\xf3\xb3\xc5\x72\xf1\x05\x16\xf6\x4d\x61\xcd\xe8\x32\x2f\x7f\
+\x17\xee\xc9\x19\xaf\x2e\xa9\x5b\x90\xed\x0c\x44\x5b\x4c\x63\xe0\
+\xbf\x97\xb3\xc5\x19\x58\x31\x5f\xbd\xb9\x1e\xaf\x3e\xe5\xab\xa2\
+\x97\xe2\xf7\x70\xbd\x19\xaf\x36\x0d\xc8\xf5\x6c\xda\xb8\xce\x17\
+\xd3\xc6\xb8\xa1\xab\xf9\x0c\xff\x9c\xa9\x0a\x36\x1d\xc3\x2c\xaf\
+\x56\x60\x82\xb8\x25\x41\x8b\x24\xf8\x19\xab\x60\xf5\x22\x3f\xcf\
+\xd6\xb3\xf3\xd9\x9c\x2e\xc2\xcf\x79\xfe\xa6\xc9\x49\x6f\x96\x9f\
+\xf3\xd5\xc5\x7c\x79\x57\xdd\x8f\x85\xe0\x66\xbc\xb9\x8a\x68\xb0\
+\xf5\x15\xc1\xae\x64\x22\xe1\x94\x4d\xf0\x69\x51\x8f\x1e\xd2\xac\
+\xb1\x5b\x09\xe8\x3f\x06\xf0\x99\x40\x6d\xee\x2c\x95\x8d\x11\x23\
+\x39\x26\xdd\xe0\xc3\x0e\x78\x04\x95\xc2\x66\x46\x33\xc5\xd3\x40\
+\xf4\x60\x29\xe0\x51\xda\x2b\x80\x5d\xa6\x35\x73\x66\x80\xb0\x96\
+\xf2\x75\xca\x9c\x0a\x01\x76\x41\x08\xae\x2b\x98\x74\xa7\xce\x65\
+\x4a\x2b\x21\x35\x1e\xaf\xa1\x43\x25\x33\x6d\x85\x64\x62\x30\x44\
+\x0c\x6a\xb4\x56\x32\x9a\x95\xd9\x31\xd7\x2f\x83\x27\x70\x6a\x33\
+\x0f\x42\x27\x74\x7e\x70\xea\x93\x39\xf5\x89\x34\x90\xfc\x07\x0d\
+\x7a\xd2\xa0\x2d\xe4\x5b\x53\xd0\x12\xf2\x24\x3c\x82\x46\x42\x9e\
+\x02\x52\x0f\x96\x09\x44\x64\x46\x47\x42\x3e\xe4\x9e\x29\x34\x11\
+\x3a\x92\xf2\x08\x18\x8b\x79\x04\x8e\xe5\x9c\x23\x98\x42\x2c\xa7\
+\x6d\x43\xce\x93\xd3\x6d\xc8\x79\xad\xea\x1a\xa6\x6d\xa7\x92\xac\
+\xb7\x16\x4b\x9f\xb5\xc1\xb3\x3b\x1e\x5b\x4f\xaa\x4f\xc3\xe2\xd3\
+\x93\x8a\xfb\x3a\x17\x10\x70\xcf\x69\xa7\x42\x1b\x7f\xca\x65\xc6\
+\xa0\xa2\x04\x21\x9e\x63\xf2\x86\x35\x80\x3c\x54\x52\x29\xc5\x09\
+\x26\xad\x75\x2c\xc0\x18\x03\x4c\x10\xcc\x4b\x28\x43\x5e\x3c\x1c\
+\xa0\x3c\x82\x02\x73\x12\x83\x70\x90\x81\x67\x4c\x2a\x0f\xc4\xa4\
+\x60\x1f\x76\xb4\x0c\x53\x2c\x60\x96\x19\xe5\x6d\x0c\x13\x54\x6c\
+\xc9\x5d\xf1\x74\x17\x5a\xc3\x14\x9c\x1a\x63\xb8\x36\x49\x58\xfc\
+\x34\x91\x5a\x61\xe1\x1e\x30\xaf\xa4\xb2\xf6\x34\x6c\x32\x70\xae\
+\xdd\x40\x01\x44\x99\x69\xbd\x85\x99\xc1\xc7\x01\x3d\x42\xcb\x8e\
+\x80\x1f\x06\xf8\x0d\x4f\x49\x78\x19\x41\xc1\x39\x88\xc3\xb9\xa7\
+\x41\xa4\x15\xde\xc6\x20\x91\x09\x65\x15\x0b\x1d\x56\x40\x2c\x45\
+\x7b\x3a\x46\x46\x1d\x76\x81\xc4\x89\xe0\x76\xb8\x63\xc0\x8e\x13\
+\x96\x71\x1d\x9a\x85\xc9\x48\x22\x6f\x40\xe2\xc7\x81\x74\x15\xa9\
+\x55\xa0\xaa\x24\x6a\x01\xc8\x19\xe7\x10\x10\x4e\xec\x0d\x06\xd7\
+\x03\x09\x01\xc2\xea\x5d\x80\x31\x0f\x4f\x4f\x12\x8c\xb7\x58\xe2\
+\x63\x8a\x79\x22\x76\x2f\x15\x6a\xd0\x98\x41\x9d\xec\xd4\x8e\xf9\
+\xe7\x1c\x2c\x5c\x69\xbb\xb3\x57\x60\x01\x7c\x9b\x0a\x52\xf4\x53\
+\x90\x0d\x68\x7f\x15\xb7\x9d\x55\x2d\x72\x3d\x24\x6d\xa7\x94\x45\
+\xfb\x12\x41\xca\xc0\x59\x56\xea\x92\x2f\xb9\xe0\x8e\x0b\xa2\x30\
+\x18\x1c\xb4\x84\xb7\x40\xe9\x3b\xe1\x41\x50\x82\xf2\x70\xca\xcf\
+\x05\x7a\x2a\xf8\xdc\x05\x54\x67\x9c\xc3\xce\x07\x22\x33\x2f\xbd\
+\x8e\x81\x05\xdf\x78\x61\x0b\x16\x29\x81\xc4\x5f\x90\x20\x43\x6c\
+\x08\xfb\x24\xac\x28\xd9\x50\x10\x17\x83\xdc\xdc\x29\x62\xba\x2d\
+\x8c\xa6\xe4\x69\x4b\x92\xab\x08\x4a\x82\x81\x49\x7a\x63\x6c\x04\
+\xad\x97\x14\x84\x05\xf3\xb4\x31\x2c\x88\x15\x9c\x2b\xe2\xbb\xc4\
+\xe2\x77\xb0\x49\xc2\x0d\xa7\x3d\xf6\x3d\x86\xb5\xc5\x3a\x09\xc3\
+\x9a\xc1\x8c\x43\x47\x79\x73\x73\xdf\x66\x21\x04\x88\x9b\x1d\x26\
+\xf6\x09\x7c\x51\xea\xdf\x75\x87\x2f\x24\xe8\xd6\xe6\x0b\xaa\x4e\
+\x75\xd0\xa0\x41\xdb\x79\xc5\x14\xd0\x0d\xd5\x05\x95\xe3\x5d\x40\
+\x18\x08\x17\xd4\x10\xf4\x91\x32\x0e\xac\x42\xdb\x1c\x42\x18\x0e\
+\x5a\x69\x57\x36\xdb\xc2\x3e\x24\xa1\x44\x21\x02\xda\x03\xb0\xa0\
+\xb0\x2c\x98\x92\x34\x07\xa0\x98\x99\xe6\xc4\x50\x4a\x32\x26\xc3\
+\x74\x94\xc0\x8f\x42\x63\x21\x12\x33\xae\xd0\x30\x98\xb8\x2c\x35\
+\x8c\xc7\x7a\x44\x50\x31\xd6\xd9\xb0\x1c\x52\x31\x5c\x69\xed\x82\
+\x8a\x01\x17\x79\x57\xa8\x18\x8c\x5a\x68\x18\x06\xcd\x12\x34\x8c\
+\x36\x42\x14\x5a\x87\x1e\xe6\xa5\x8a\xa1\x2e\x65\x04\x2d\x0c\x14\
+\xd4\x64\x03\x4a\x16\x0a\x71\x61\xa1\x8d\xa4\xa3\x84\x67\xb0\x45\
+\x98\xa6\x2d\x4c\x11\xad\xb7\x34\x50\x2d\x60\x8a\x0e\x29\xd8\x3e\
+\xb6\xed\x6e\xa0\x3f\x89\x6d\x9f\x89\x5b\xe3\x78\xbc\x38\xe3\x20\
+\xa8\xa2\x28\xda\x3a\xa3\x52\x17\xa7\xad\x8f\x3c\x83\x2a\x0c\xd7\
+\x20\x57\xb4\x8f\x52\x45\xe0\xb4\x09\xdf\xdc\xb3\x28\x83\x6f\xd5\
+\xc6\x4e\xbd\xf4\x66\x89\xee\x6e\x61\x67\xfb\x22\x99\x83\x58\x13\
+\xc4\xb3\x1e\x9f\xa3\xac\xc5\x1f\xdd\x9d\x3e\x4a\x35\xa5\x7c\x42\
+\xd5\xd4\x4a\x25\x3f\x28\x4b\x09\x1e\x67\xb8\x21\x1b\x90\x00\xd6\
+\x20\x49\x3f\x19\x87\x51\x4a\xc1\x3e\x0c\x10\xff\x42\xd2\xc2\xd1\
+\x42\xd2\xc7\x5e\x09\xc8\xab\x81\xbc\x2b\x05\x45\xb5\xed\x50\x94\
+\x85\x6f\x22\x1e\x38\x01\xdc\x3b\x97\x2d\xa8\x2b\xac\x75\x6c\xe7\
+\x38\xbd\xf7\x01\x3e\xc6\x6e\x4e\x54\xe2\x5b\x90\xdf\xbe\x5e\x48\
+\x97\xac\x22\xda\x41\x0e\x64\x25\xdd\xee\x81\x19\x28\x34\x3a\xe4\
+\x02\xe5\xed\x0a\x8d\xef\xb4\x37\x8e\xd2\x20\x70\x1a\xa5\x31\x82\
+\x60\x50\xa0\x5c\x7b\xb2\x02\x70\xfa\xb4\x08\xfe\x02\x79\xa6\x2a\
+\x58\x20\xb6\xf5\x47\x13\x50\x9d\x49\xad\x25\x0c\xee\x16\x66\xb7\
+\x30\xdb\x7c\x1a\x9d\x1b\x5c\xb9\x08\x8a\x0e\x9d\xd5\x1e\xea\x59\
+\xd2\xdb\x13\x84\xf2\x3c\x78\x10\x74\x62\x90\x40\x02\xde\xb4\x13\
+\xc1\x29\x91\x46\x32\x8c\x4d\x0f\x73\x2b\x2d\x57\xd4\xa1\xb7\xcc\
+\x9b\x00\x83\x07\x4b\x4b\x6c\x0c\x5d\xc2\x3e\x34\x27\x19\xa0\xb6\
+\xb9\x98\xb2\x65\x0a\x16\x90\x86\x58\x92\x91\xcf\x0d\xa8\xd2\x86\
+\xdb\xe0\x87\x0b\xe3\x34\x0f\x66\x52\xc3\xfd\x51\x01\xb9\xc2\x80\
+\xed\x81\x71\x78\x74\xae\x70\xe5\x12\x74\xd8\x61\x58\xaa\x5a\xfc\
+\x6f\x8b\x0f\x6b\x16\xe3\x2d\x16\x83\x69\xf5\x54\x84\x7a\xca\xcb\
+\xb2\xd3\xc2\xdc\x7a\x20\xa6\x00\x2a\x87\xa0\x39\xd8\x6a\x4b\xb7\
+\x09\x64\x10\x27\xc3\x04\xc7\x20\xf4\x50\x3c\x58\x42\x0c\xb0\x28\
+\x0d\xd3\xe4\x0d\x20\x64\x42\x80\x4d\x36\x88\xce\xe5\xc1\xc4\x93\
+\x4f\x89\x36\x08\xda\x4d\xf9\x9c\x00\x67\x68\x90\x82\x80\x70\x65\
+\x4d\x48\xe2\x65\x74\x0c\x88\x5b\x82\x41\xf6\xa5\x12\x04\xa3\x49\
+\xd9\x62\xca\xf4\x60\x70\xad\x11\x00\x12\x90\x6b\x38\x10\x86\x60\
+\x88\x99\x0d\x0b\x27\xf4\x10\xdb\x93\x62\xe9\xae\xf2\xcb\xe0\x1f\
+\xc1\xa5\x11\x8d\x95\x4b\x3a\x9a\x6a\xe0\xfc\x16\xcf\x32\x67\xe0\
+\xe5\x18\x2c\x4a\x78\xe7\x8a\x31\xa4\x41\xf8\x27\xb1\x62\x08\x49\
+\x63\x2e\x54\xaa\xca\x2d\x1c\xab\x30\x61\x2c\x59\x0a\x82\xc1\xcb\
+\xb7\xb2\x58\x18\x3c\x1d\x4f\xa0\xb0\xf6\x72\x38\x81\xf8\x0d\x7c\
+\x45\xd8\xf1\x52\x2a\x45\xb0\x1a\x85\x10\x64\x53\x43\x2a\x34\x47\
+\x80\x92\x14\xb4\x12\x4b\x5e\x59\x44\xb1\xf6\xea\xc2\x8a\x7d\xf1\
+\xa4\x90\x99\xe5\x65\x67\x1e\xe8\x82\x3b\xe6\x4f\x85\xa5\x62\x52\
+\x68\xe2\x01\x39\xb1\x5c\x3a\x67\x89\xdf\x8b\xf5\x09\x55\x74\x53\
+\x43\x3e\x90\x3d\x60\x06\xc6\xdb\x6c\x81\x1c\x76\x83\x78\x8c\x31\
+\x1e\xba\x83\x5a\x80\x4c\xb9\x92\x2b\x68\x54\x7a\x0e\xd7\xca\x21\
+\xc8\x76\x04\x81\x01\xe0\xc0\x94\xcb\x0c\x79\x2e\xa7\x18\x87\x53\
+\xed\x77\x03\x22\x09\xd7\xe1\xc1\x00\x62\xf2\x54\xe0\x27\x04\x12\
+\xd2\x19\x8e\x7b\x22\xf8\x0c\xda\x90\xd6\x04\xc7\xb2\x9e\x6c\x01\
+\xa2\x65\x8a\xcc\x73\x4b\x79\xe2\x0a\x86\x85\x7b\x2a\xaa\xf0\xdb\
+\xce\x5c\x09\x6b\x8c\x19\x81\xb8\x84\xa3\x6c\x02\x12\xe1\xda\x2b\
+\x1f\xa6\x0f\x0f\x16\x31\x53\x07\xb1\xfb\x4c\x19\xf8\x95\x4c\x99\
+\xed\xed\x62\xd9\x27\x19\xb6\x1f\x9e\xd5\x26\x55\x1b\xe7\x10\xb3\
+\x39\x48\x31\xed\x8f\xc1\xb6\x30\xc8\x6e\x54\xcd\x1b\x94\x23\xa4\
+\xd4\xc2\xbc\x42\x6a\x05\x1c\x6b\xf8\x43\x5a\x0d\xfe\x32\x20\x8d\
+\xc6\xa8\xd2\x11\xbf\x18\x1d\x1a\x36\x03\x36\x80\x86\x1c\xc0\x44\
+\x39\x08\xb9\x04\xef\xf7\x6a\x9e\xea\xfe\xcb\x49\xc7\x77\x58\x3d\
+\x84\x73\x0f\xe1\xd1\xc4\x5d\xaa\x0f\xae\x86\xe8\xde\x0e\xf5\x9a\
+\x55\xef\x89\xdb\x21\x98\x40\x84\x68\x74\xab\x6e\xbe\x30\x17\xe2\
+\xb8\x00\x21\x69\xfd\x58\x78\x0f\x86\xb0\xcc\xfc\xe0\xda\x03\xe9\
+\xf5\xd6\x6b\x1a\xc7\xab\xc9\x01\xbf\xb2\x6e\xf7\x83\x4c\x5f\x8f\
+\x4c\x91\x7c\x24\x24\x32\x2d\x53\x7d\x25\xf2\x80\x3c\x27\x95\xc1\
+\xef\xaf\xac\x92\x1a\x16\x9e\xb6\x87\x5b\xa2\x4f\x69\xe7\x45\x4a\
+\x1f\x57\x1f\x37\xb8\xf9\xb1\x69\xe7\xa4\xb1\x34\xec\x75\x27\x9f\
+\x18\x3e\x42\x1d\xc3\xab\x4f\x48\x48\xb7\xb7\x6b\x8c\x12\x9a\x17\
+\xe9\x7a\xc5\xac\x90\x85\xe3\x8a\x40\xc8\x09\x19\x41\x29\x45\xa6\
+\x3c\xe2\x27\x82\x39\xc1\x98\x0b\x6e\xb7\x82\x5f\xa7\xc2\x16\x80\
+\xd4\xb2\xca\xa5\x05\xa0\xab\x81\xc0\x34\x65\xf4\x54\x88\x5b\x3c\
+\x5c\x17\x72\x3e\x13\xb0\x0f\x3b\x5a\x22\xa8\x91\xa0\x2f\x25\xce\
+\xb4\x07\xa6\x6c\x0c\x13\x70\xbb\x9c\xd6\xc1\x1b\x4a\x40\x6b\x18\
+\x02\x79\xaf\x9c\xd1\x3c\x09\x8b\x9f\xa6\x4c\x37\x03\x4b\x50\x4e\
+\x94\x23\x8c\xe4\x52\x85\xac\xb4\xa5\x0e\x61\x8d\x95\x75\x8a\x47\
+\xa0\xb0\x5b\x83\x59\xc3\xc1\xaf\x81\x21\xaa\x43\x77\x8e\xd2\xe4\
+\x15\x90\x02\x3d\x03\x4f\x38\x80\x04\x25\xb1\x65\x0c\xe3\x19\xbc\
+\x71\x56\x64\xce\xb7\x50\x0a\xff\x14\xbd\xd8\xa3\x0c\x14\xdb\x50\
+\xc0\x0c\x1d\x05\x12\xe5\x76\x16\x62\xdb\xb0\x51\x64\xa9\xe4\x9f\
+\x60\x1c\xee\x20\xf3\x94\x4f\xb5\x74\xfe\x02\xce\x64\x20\x0d\x16\
+\x21\x55\xe1\xb0\x5b\x66\xbd\x0d\xd4\x0e\xf7\x83\xcb\x2e\x29\xd5\
+\x1f\xa8\xad\x11\xa6\x38\x45\xb1\x01\x30\xc5\x2c\x8f\xb8\xe2\x63\
+\x92\x83\x22\xf7\xb2\x56\x46\x5a\x74\xf5\xc5\xce\x8d\xc6\x47\x48\
+\x22\xc5\xbe\x7b\xf6\x80\xb6\xa7\xd0\x13\xb2\x47\x2f\x40\x6e\x4b\
+\xdf\xfa\xff\x6e\xc7\xab\xbc\x23\x7e\xc9\xb8\x16\x1c\x2f\x10\x47\
+\xba\xa8\x26\xa9\xc8\x90\x30\x44\x53\x14\x52\x69\x7a\xbd\x06\x11\
+\x95\x00\xa0\x32\x98\x81\xb7\x0a\xf2\x0b\x24\x39\x71\x28\x44\x76\
+\xad\xe4\x9a\x74\xc5\x18\x86\xc3\xd3\x2f\x93\xe6\x61\x0c\x23\x69\
+\xcf\xad\xe7\xee\xd9\xb7\x81\xbc\xef\x83\xea\x21\x86\x6e\x50\xc4\
+\x24\x29\x12\xd1\xd4\x1c\xa4\xba\x6b\x8d\xa1\xda\x63\xa8\x1f\x54\
+\xff\x7d\xa9\x2e\xda\x14\x11\x07\xa8\xee\xd9\x21\xaa\x47\x47\x2a\
+\x8a\x31\x58\x7b\x0c\xf6\x7d\x51\x3d\x5a\x7a\x5b\xcd\xf9\x72\xe9\
+\x70\x4c\x0c\x59\xdc\x00\xa0\xa5\x47\x5b\x47\x9d\x5c\x06\xf3\xf4\
+\xe6\x66\xa7\xde\x3c\x0e\x15\x65\x54\xf2\x22\xa8\xd8\x95\x93\xff\
+\x43\x2d\xa1\x49\x22\x5b\x92\xc8\x48\xa7\x44\xe1\x6e\x14\x24\x72\
+\x8d\x03\x73\x11\x91\x0f\xea\x3d\xdf\xd6\x7b\xba\x3d\x86\x4e\x8e\
+\xf1\xc7\x42\xe3\x77\xc7\x09\xb2\x4d\x25\xb9\x9f\x13\x24\x3b\xa4\
+\x0b\x25\x6b\xeb\x42\xde\x1e\x83\x7f\xaf\x9c\xb0\x45\x82\xb6\x2d\
+\x24\x58\xca\xb9\x13\x16\x24\xe5\xd0\x3f\x96\xd7\xb4\x63\x19\xf2\
+\xc3\x1f\x69\xb3\x33\xec\x04\x44\x20\x97\xd1\x2b\x3b\x0b\x37\x74\
+\xfb\x48\xd5\xc5\xbe\xc4\xb0\x92\x3e\x7c\xf6\x64\x69\x7e\xf7\xad\
+\xa4\xfe\xa9\x27\x46\xef\x9b\x20\x4e\xe8\x9b\xe8\xa6\x03\xc2\x4f\
+\x49\x74\xd3\xdb\x17\x24\x22\x4d\xef\x7a\xb2\xc8\x37\x97\x95\xaa\
+\xac\xb7\xf5\xcf\x91\x9e\x12\x5a\xa5\xf2\x4f\x74\x56\x7f\x47\x5e\
+\x8a\xfb\x66\xfd\x48\x33\x2b\xa5\x88\x91\xd3\x29\x29\x13\xde\x64\
+\xd3\x71\x28\x68\x27\xa4\xec\x93\x92\x4b\xa1\x83\x41\xd1\xb6\xca\
+\x2b\x71\x56\xec\x06\xee\x6f\xd5\xea\x2b\x99\x78\xaa\x5f\x93\x80\
+\xc0\x1b\xd1\x72\xf7\x35\x09\xb8\x65\x98\x55\x54\x03\x0c\x87\x0e\
+\x68\x76\xa7\x94\x55\x40\xfb\x6d\x6a\xaa\xac\xdb\xed\x9c\xf5\xe9\
+\x1c\xe0\xf9\x69\x8b\xea\x70\xdd\x39\x03\x5a\x1e\x0e\x9a\x2e\xef\
+\x16\x27\xfb\xb7\x24\xb6\xf3\xe6\x92\x71\x4f\xb3\xe4\x98\xbf\xf5\
+\xe1\x15\x0e\x36\xf3\xdc\x69\xa5\x70\x61\xc3\x1b\x49\xb4\x37\x8c\
+\xd3\xab\x77\x3d\xd4\x2c\x10\xa7\x25\x14\xb4\x8e\xff\x1e\x41\x15\
+\x18\x2b\xc7\x9d\x91\x83\xed\x4b\x52\x09\xb7\xd5\xbb\x51\xa1\xa3\
+\xa4\x37\xce\xcb\x2d\x86\x69\x1b\x50\x48\xe7\x82\xa6\xea\xf3\x40\
+\x6a\x84\x1d\xbb\x17\xdb\x67\x77\x30\x56\xe7\x8d\xad\x0d\xa6\xec\
+\xbe\xe5\xb5\xc9\xcb\x9d\x57\xc3\x56\xfc\xef\x4c\xf4\x56\x90\x8e\
+\x72\xa2\x77\x18\x5b\xa3\x76\x2b\xa7\xee\xeb\x6b\x9f\x54\x5e\x72\
+\x84\x26\x7e\x6e\x8d\xc4\xd9\xe3\x55\xd2\xd7\xd9\xcf\x78\x5c\xf1\
+\x19\xbd\x54\xa1\x4d\x93\x8c\xed\x3e\xc4\x91\xec\x82\x4e\x81\xb4\
+\xcd\x48\xf8\xb8\xce\xde\xc6\x57\x24\xd9\x4b\x6d\x6d\x9c\xcf\x97\
+\x93\x4f\xbb\x09\x56\xd5\x3e\x33\xa9\x34\x0b\x5b\x03\x4e\x6a\xda\
+\x0e\xa0\x1a\x57\x6e\x11\x34\x5a\x4b\xef\x41\x96\x4e\x53\x39\xc3\
+\x40\xd0\x5e\x3e\xa7\x7c\xe7\x90\xf6\x8f\x38\xa7\x74\x2b\x9d\xdb\
+\x70\x42\xf1\x50\x8d\x60\x9d\x83\xe8\x17\x71\x04\x1d\x41\x94\x0d\
+\x20\x84\x57\x43\x0a\xb5\xa0\x4d\x78\x6b\x95\xb1\xa1\x84\x94\xde\
+\xfa\xad\x95\x88\x3b\xf8\x90\x84\x0a\xb2\x1e\xc6\x69\x7f\x00\x16\
+\x8a\xd2\xb4\x93\x9e\x0a\xda\x32\x2a\xe1\x16\x54\x36\x4f\x79\x74\
+\x21\x29\xe3\x9e\xd1\xdb\x88\xa4\x32\xc9\xc5\x27\xb2\xad\x3c\x7e\
+\x47\xc7\x9e\x32\xaf\xa3\xeb\xc2\xba\x56\x9c\x47\xbe\x76\xe9\x93\
+\x1a\x03\x8d\xc8\xe4\x29\x94\x36\x53\x9c\x15\x45\xb2\x54\x4a\x69\
+\x64\x78\x6f\x15\x42\x78\x98\x35\x43\x94\x08\x95\x28\xe6\x54\x64\
+\x96\x5e\x64\xa0\x40\x1d\x9b\x59\x10\xac\xa8\x8f\xd1\xd6\x4b\x5f\
+\x66\xb7\x98\x75\xde\x9a\x08\xfa\x21\x09\x0d\x24\x93\x5c\x87\x0a\
+\x8f\x50\x0e\xe3\x93\xb0\x8f\x64\xc9\x29\x2b\xeb\x1a\x5d\x26\x80\
+\x20\x8d\xb3\x92\x4a\x8b\xf7\x81\x40\x42\x58\x46\xa5\xbc\xa5\x0d\
+\x25\x84\x02\x60\x3b\x5d\xd6\x2a\xd1\x71\x21\x84\xa9\xa0\x9b\xe0\
+\x3a\x89\x9f\xbd\x6e\xb7\xe5\x1a\xd6\x34\xa9\x75\xf6\xef\x47\x1d\
+\xd6\x2f\x64\x62\x76\xe8\x17\xd9\xd9\x8f\xfa\x1e\x4c\xc2\x0e\x05\
+\xd3\x2f\x00\x57\x5e\x49\x0e\xdf\xa7\xa7\x4d\xa6\x3f\xda\xf1\x94\
+\x23\x7c\x15\x25\xec\xf7\x48\x88\x43\xb6\xb9\xca\x72\x5b\xe8\x5c\
+\x1d\xea\xcd\xe0\x64\x19\x5e\x26\x56\xa9\xe4\xcd\x7a\x2a\x54\xb3\
+\xda\x42\x59\x92\xf8\xd9\x70\xfa\x09\xee\x33\xb7\x19\xd4\x3b\x13\
+\x41\xf0\x1d\x5c\x3b\xe1\x4f\x21\x9c\x8a\xfe\xee\x80\x1a\x50\x99\
+\x1c\xd4\xaa\x53\xa7\xe1\xac\x9e\xe7\xe1\xe8\x0c\x97\xe1\xc0\x8b\
+\x0f\x82\xcf\x1c\x63\xd6\x56\xd1\xb3\x52\x85\x3a\xe0\x86\x5e\xc1\
+\x57\xe8\x6a\xe5\xa4\xa0\x93\x2e\x08\x9a\x8d\xa2\x72\x36\xf8\x90\
+\xd0\x5e\x0c\xcf\x2b\x50\x0d\x83\x9a\x81\xa6\xc2\x64\x61\x4c\xd8\
+\x56\x33\x82\xa6\x1c\x8a\xc4\x1c\x55\x1c\xb2\xf0\x77\x53\x84\xc1\
+\xe8\xdc\xd0\xdc\xe1\x7f\xca\xf0\xd7\x2b\x1c\x33\x70\xfd\x1c\x29\
+\x47\xe1\x4a\x1d\xc3\xc9\x1b\x14\x85\x1e\xec\x20\x24\xb5\xd9\xe6\
+\xa3\xbf\x5f\xb2\xb7\xca\x37\x59\xd7\xff\x68\x7f\xc7\x76\x8e\xac\
+\xee\xf3\x77\x5e\xd9\x29\x7d\x77\x30\xbd\xe9\xb7\x1d\xfe\x5d\xf9\
+\x37\xd5\xd1\x07\xe3\x75\x9d\x51\x2b\x4f\x49\x20\xc6\x24\x0e\x8d\
+\x5e\x8f\x58\x9d\xaa\x08\x2f\xc9\x74\x42\x34\xce\x60\xd0\x3e\xb1\
+\xd4\xf1\x0b\x99\xc3\xdb\x93\x32\xe1\x9d\x74\xb5\x6f\x50\xd4\x73\
+\x18\x01\x5d\x15\x9d\xd7\x28\xca\x38\x2a\x68\x1f\x1e\x81\xfb\xe2\
+\xcd\x4e\x33\x55\x51\xfa\xc7\x71\xe6\x47\x72\x83\x6c\x73\x03\xef\
+\x1e\xae\xb1\x31\xf9\x6d\x83\xec\xb2\x41\x59\xf6\x78\xa9\x8f\x2f\
+\x7e\x10\xf2\x11\x84\xb4\x1d\x42\x76\xe8\xe8\x63\x3a\x46\x15\x8e\
+\x44\x48\x11\xe7\x81\xde\xd2\x7b\xa7\xde\xff\xf4\xff\xa4\x10\xd6\
+\x0e\
+\x00\x00\x1c\xb3\
+\x00\
+\x00\xb3\x38\x78\x9c\xed\x5d\x59\x73\x1b\xc9\x91\x7e\x9f\x5f\x81\
+\xa5\x5e\x46\xb1\x40\xb3\xee\x83\x3a\x1c\x5e\xcd\x8e\xc3\x1b\x72\
+\x6c\x84\xc7\x8e\x7d\x74\x80\x00\x48\xc1\x03\x02\x0c\x00\x94\x48\
+\xfd\xfa\xfd\xb2\xfa\xaa\xea\x2e\x80\xe0\x25\x0d\x67\x48\x78\xac\
+\xee\xec\xea\x3a\xb2\xbe\x3c\x2a\xeb\xe8\xb7\x7f\xba\xbe\x58\x0c\
+\x3e\xcf\xd6\x9b\xf9\x6a\xf9\xee\x88\x17\xec\x68\x30\x5b\x4e\x56\
+\xd3\xf9\xf2\xfc\xdd\xd1\x3f\xff\xf1\xf3\xc8\x1d\x0d\x36\xdb\xf1\
+\x72\x3a\x5e\xac\x96\xb3\x77\x47\xcb\xd5\xd1\x9f\xde\xff\xf0\xf6\
+\x3f\x46\xa3\xc1\x87\xf5\x6c\xbc\x9d\x4d\x07\x5f\xe6\xdb\x4f\x83\
+\xbf\x2e\x7f\xdd\x4c\xc6\x97\xb3\xc1\x8f\x9f\xb6\xdb\xcb\x93\xe3\
+\xe3\x2f\x5f\xbe\x14\xf3\x8a\x58\xac\xd6\xe7\xc7\xaf\x07\xa3\x11\
+\xde\xdc\x7c\x3e\xff\x61\x30\x18\xa0\xd8\xe5\xe6\x64\x3a\x79\x77\
+\x54\xa5\xbf\xbc\x5a\x2f\x42\xba\xe9\xe4\x78\xb6\x98\x5d\xcc\x96\
+\xdb\xcd\x31\x2f\xf8\xf1\x51\x9b\x7c\xd2\x26\x9f\x50\xe1\xf3\xcf\
+\xb3\xc9\xea\xe2\x62\xb5\xdc\x84\x37\x97\x9b\x57\x51\xe2\xf5\xf4\
+\xac\x49\x4d\x95\xf9\x22\x43\x22\xee\xbd\x3f\x66\xe2\x58\x88\x11\
+\x52\x8c\x36\x37\xcb\xed\xf8\x7a\x94\xbe\x8a\x3a\xe6\x5e\x15\x8c\
+\xb1\x63\x3c\x6b\x53\x1e\x96\xea\xe4\x7a\x01\x4e\xec\xac\x4c\x78\
+\x1a\x97\x0e\xee\x5f\xe2\xbf\xe6\x85\x9a\x50\x6c\x56\x57\xeb\xc9\
+\xec\x0c\x6f\xce\x8a\xe5\x6c\x7b\xfc\xd3\x3f\x7e\x6a\x1e\x8e\x58\
+\x31\xdd\x4e\xa3\x6c\x6a\xe6\x27\xe5\x26\x3d\xb2\x1c\x5f\xcc\x36\
+\x97\xe3\xc9\x6c\x73\x5c\xd3\xc3\xfb\xf5\xcd\xc9\xec\xfa\x72\xb5\
+\xde\x8e\x6e\xa6\x97\xa8\x8c\x64\xd9\x87\xd7\xfb\x1e\x9e\xcd\x17\
+\x33\x2a\xe5\xdd\xd1\xf1\xa7\xd5\xc5\xec\xf8\x7c\xbc\x5e\xcf\xb6\
+\xdb\xe3\xd9\x74\x4e\x0f\x97\xd3\xd1\x7a\x76\xb9\x40\x0d\x46\xdc\
+\x14\x97\xcb\x92\x67\x75\x8b\x4e\xa6\xab\x49\xf9\x72\x2f\x79\x51\
+\xf3\x37\x4e\x7b\x3a\xde\x34\x05\xfd\x7b\x7e\x71\x31\x9e\x1c\x6f\
+\xd6\x93\xe3\xc9\xe7\xcd\x31\x00\x7c\xbe\x1a\xcd\x27\xab\xe5\x68\
+\xfb\x09\xd8\x3a\x46\x2d\x17\xe3\xd3\xc5\xec\x78\x3c\xd9\x02\xf9\
+\x9b\xb4\xf6\x8d\x3c\xb0\x42\x99\xb4\x9c\xe8\x91\x14\xe5\x5b\xd3\
+\x77\x47\xa8\x8e\x50\x3e\xdc\x7e\x9a\xcd\xcf\x3f\x6d\xdf\x1d\x29\
+\x57\xb0\xf0\x77\x79\x1d\xe8\x5f\xe6\xd3\xed\xa7\x3e\xb9\x29\x73\
+\x75\xb5\xbd\xbc\xda\xfe\x6b\x76\xbd\x9d\x2d\xcb\x12\xd0\x45\x51\
+\x7f\x85\xc7\xd4\xee\x86\x76\xf4\x1e\x19\xbc\x9d\xce\xce\x36\x94\
+\x51\x59\x11\xba\x93\xe1\x01\x1e\x35\x79\x5f\xa2\xd2\x97\xb3\x09\
+\xc9\x4b\x99\x34\x6a\xd0\xf6\x86\x20\x92\x26\x95\x25\x8e\x06\x09\
+\x4f\x2e\xff\x75\x8d\x56\x0f\x4e\x06\x42\xe1\xff\x78\x36\xc5\x4d\
+\x99\x82\xa3\x7d\xf8\x87\x65\xd3\x7c\x25\x26\xec\xc9\xa6\xaa\xc1\
+\x68\xb5\x9e\x9f\xcf\xc1\x86\x32\x9d\x49\x13\xa3\xa9\x51\xa3\xb8\
+\x52\x47\x83\xe3\xaa\xd5\xeb\xf1\x74\x3e\x5e\xfc\x85\xfe\x81\x0e\
+\xe9\x65\x3f\x59\x2d\x16\x78\xeb\xdd\xd1\x78\xf1\x65\x7c\xb3\x69\
+\xb2\x0c\x52\x78\xf2\x69\x3d\x83\xd6\x78\x85\xeb\xd9\x78\x5d\xe7\
+\xa1\x99\x61\x49\xd1\x69\x11\x9a\xc9\xb6\x66\xe7\x15\xf1\x9f\xcb\
+\xf9\x16\xea\xe1\x6a\x33\x5b\xff\x42\x22\xf6\xbf\xcb\x7f\x6e\x66\
+\xbd\x54\xff\x58\x8f\x97\x1b\xc8\xf3\xc5\xbb\xa3\x8b\xf1\x76\x3d\
+\xbf\xfe\x71\x24\x0a\x6b\x95\x74\x7e\xc8\xf0\xe3\x85\x37\xde\x32\
+\x33\xe4\x1c\x74\x23\xe4\x70\xe4\xac\x28\x9c\xd3\xea\x75\x93\xd9\
+\x04\xfd\x62\x98\x2e\x2c\x57\xc2\xb7\xd4\x1b\xe2\xb3\x29\x8c\xb2\
+\xae\xa5\x9e\x65\xd3\x9e\x65\xd3\xae\x61\x0f\xb8\x2d\x90\xd2\x99\
+\x96\xbd\x29\x6b\x0e\x66\x2f\xb1\x2d\xc3\xd5\xf7\xd5\xf3\xb7\x9b\
+\xed\xea\xb2\x4e\x0b\x74\x6e\x6f\x16\x40\x25\x11\x47\xc8\x71\xb5\
+\x3e\x39\x85\xd8\xff\xfa\x26\x10\x56\xe0\xe7\x7c\x7b\x73\xc2\xdf\
+\x1c\xb5\x6f\xac\xce\xce\x36\x33\x14\xcb\x22\x5a\x90\x4c\xbc\x81\
+\x92\x44\xd3\x80\xfb\x95\xc5\x72\x65\xf1\x7c\x59\x11\x16\x8f\xd3\
+\x26\x7f\x3f\x84\x46\x9d\xfd\x50\x84\xe6\x01\x3a\xe2\xce\xf3\xc2\
+\xc8\xdf\x2e\x42\x33\x00\x54\xee\x41\x00\xcc\x82\x22\x0f\x40\xcd\
+\x76\x03\x30\x4a\x65\x72\x19\x16\xfa\xe8\xee\x92\xf1\xcd\xe0\xae\
+\xc5\x6d\x70\xbf\xa7\xc6\xd8\x0b\x77\xf4\xdc\xbe\x8e\x15\xf6\x1b\
+\xc0\x5d\x14\xdc\xfa\x1c\xdc\xaf\x39\x39\x44\xa0\x6a\xcb\xdb\xbe\
+\xbb\x21\xaa\xe9\x42\xf8\x5a\x64\xd3\x0a\x12\x02\x5f\x10\x70\xec\
+\x13\xe8\x5e\xa5\x95\x38\x1c\xfa\xaf\x4a\x8f\xe5\x9e\xda\x17\x65\
+\xa9\xbb\xc0\x31\x5b\xda\xc1\x80\x44\x69\xe6\x9e\x80\xec\x71\x89\
+\x6b\x63\x76\xb2\xa9\x2e\x90\x12\xa9\xac\xd8\x96\xed\x60\x7b\x85\
+\xf7\xd5\x59\xf8\xeb\xb0\xb6\x7e\x75\x8f\x18\xc7\xc5\xe7\xb4\x06\
+\x3f\xb0\x78\x47\xbf\x5b\x8b\xbf\x9b\x21\x43\xd5\xc6\xf3\xf3\xf5\
+\x54\x26\x06\x40\xb0\x02\x32\xc3\x13\xf5\x6f\x54\xa1\x8d\x4d\x14\
+\xba\x2e\x84\xb6\x89\x35\xe8\xbe\x78\x96\x79\x71\xbf\x94\xef\xe0\
+\x61\x0e\xb5\x19\x1e\xfd\xcc\xe8\x97\xc1\x1a\xd7\xda\xca\xdd\x5d\
+\x74\xc7\xae\xf0\x63\xfa\xed\xec\x8a\x7c\xf1\x3a\xea\xa2\xb4\x37\
+\x0e\xeb\x22\x71\x6b\x17\x71\x4e\xac\x76\xaa\xdb\x47\xe6\xd6\x3e\
+\xea\xbd\xf9\xbd\x3a\xc9\x98\xef\xda\x49\xc6\xdd\xd6\x49\x87\x2a\
+\x24\x61\xfc\x6d\xea\x48\x58\x76\x7f\x65\x34\x96\xf4\xbb\xbf\x32\
+\x12\x96\xdf\x5f\x15\xa9\x09\xfd\xee\xab\x8a\x0e\x66\xa1\xbe\x9d\
+\x85\xe6\x01\x2c\x3c\x1b\xd3\xef\x01\x2c\x34\x0f\x60\xe1\x69\xf8\
+\x7b\x64\x6d\xfe\x00\x3f\x8d\xf0\xba\x7b\x54\x02\xd3\x15\x69\x91\
+\x87\xfa\x69\x0c\xae\x99\x13\x56\x56\x7e\x1a\x93\xc2\x1a\x3b\x94\
+\x85\xd4\x52\x6b\x50\xe1\x77\x19\xa5\x6c\x3a\x28\x71\x85\x13\x4a\
+\x71\xcf\x12\x95\x27\x0b\xab\x0d\x17\x4e\x27\x2a\xae\x9f\xf6\x2c\
+\x9b\x16\xfa\x51\x5a\x50\xb9\xe5\xf2\x29\xa3\x12\x84\xe4\xfd\xcc\
+\x75\x0f\x67\x2e\xc5\xc9\x66\x81\xb7\x4c\x79\x49\x7c\x55\x9c\x4b\
+\x91\x72\x51\x4a\x3c\x37\xb1\x39\x0e\x5c\xc4\x18\x4e\x1a\xcf\x53\
+\x43\xd1\x4f\x7b\x96\x4d\x0b\x2e\x62\xb8\x67\x99\x53\xd1\xd0\xe9\
+\x09\xb8\x58\xfa\x78\x7b\xf9\x68\x1e\x81\x8f\x0f\x03\x29\x57\x32\
+\x58\xb1\x98\xbd\xb6\x10\x06\x03\x09\x63\x3b\x20\xed\xa6\x3d\xcb\
+\xa6\x25\x90\x22\xad\x76\xc6\xeb\xdb\xd8\xdb\x37\xf8\x39\xe3\x9e\
+\xf3\x02\xb2\xfe\x43\xce\xd1\xd8\xc7\x31\x21\x30\xe2\x22\xde\x94\
+\x6a\x2c\xbe\xa8\x1e\xa9\xc2\x70\xa9\x85\x07\x23\xbd\xf5\x8e\xb9\
+\xd7\x77\xec\xb0\x7e\xb7\x0b\xe1\x64\x1e\x3e\x1d\xb7\x69\x27\xf6\
+\x0e\x63\xaa\x4d\x98\xda\xf5\x6a\x77\xf1\xb4\x9b\xee\xb9\xb0\x54\
+\xef\x61\xa9\x7c\x30\x4b\x1f\xa2\x06\xc2\x80\x78\x77\xdd\xf1\xd8\
+\xa5\xdc\x56\x85\x64\xe8\x02\x9d\xf4\x8b\x12\x05\xb3\x60\x57\xda\
+\x81\xbd\xa4\x67\xb9\xa4\x14\xcb\xd2\x30\x31\x5c\xf3\xbe\xc7\xdc\
+\xef\x44\x9e\xe9\xbb\xb6\x13\x9d\x82\x2e\x6d\x29\x12\x57\x00\xc7\
+\xc1\x9d\x78\xe7\x50\x9a\x52\x6a\x67\x2c\xb7\x19\x99\xab\x88\xc5\
+\x07\xfb\xf5\x76\x4a\xbf\x87\x84\xb7\x5e\x9d\x72\xfa\x1d\xe0\xb3\
+\x47\x11\xb7\xbe\xbb\x15\x35\xc3\xdd\xee\xc6\x21\x55\x2e\x28\x70\
+\xa0\x1f\x67\x1c\xfd\x9e\xda\x15\x56\x40\xf5\xed\x9d\xb6\x23\x26\
+\x79\x50\x3b\xac\xf0\x67\x93\x4e\x70\x03\xe8\x64\xd6\x29\xc9\xd5\
+\x01\xde\x30\x8a\x77\xf7\x67\x63\xbe\x78\x63\x0d\x9c\x38\xfd\x98\
+\x7c\x84\x61\xbd\xb5\x21\x91\x2b\x7c\x30\xf8\xb3\xc1\xa1\x83\xd8\
+\xf6\x90\x81\x58\xae\x54\xf4\x9a\x2a\xf9\xf6\x88\x6c\xb3\xf6\x76\
+\x9d\x7f\x7b\x4b\xef\xc1\xd7\x4a\x90\xee\xc1\x57\x97\xe5\xeb\xdd\
+\x4b\x7b\xc4\x01\xad\x84\xb3\x77\xb8\x32\xdc\x01\xa9\xfd\x2c\x6c\
+\x06\xa7\xd2\x1c\xa0\xfb\x84\xb4\xf9\x80\x68\x46\xab\x1e\x0e\x3f\
+\x60\x0f\x08\x14\x77\x53\xfd\xb7\x44\x57\x0f\x13\x91\xa8\x5d\xec\
+\xd1\x7a\xcd\xa9\xbb\xf4\x9a\x1b\xd3\xef\x4e\x26\x6c\x4f\x3b\xdc\
+\x3e\x0b\x96\x8b\xcc\x38\xfa\x3d\x16\x17\x9d\x7e\x44\x2e\x1a\xfd\
+\x60\x15\x82\x4c\xec\xb7\x53\x21\x28\x2d\xa7\xb0\xbe\xaf\x0a\xf1\
+\xbb\x55\x48\x53\x6f\x6f\x72\x96\xf8\x56\x59\x9e\xf2\x69\xd7\xf5\
+\xba\xab\x08\x23\x87\xbe\x03\x98\xd5\x2f\x19\xb8\x49\xc6\xf6\x44\
+\x7f\xdb\xd6\x65\xc3\xa6\xb7\xf4\x8a\x39\xdb\x8b\x81\x07\xf7\x8a\
+\xbd\xd5\x3d\x43\x9a\xac\x7b\xb6\xbf\xde\x13\x4e\xbf\x7b\x60\xd7\
+\xdb\xac\x37\x76\x4b\x50\x79\x42\xbf\xa7\xe3\x52\x14\x5a\xb8\xb7\
+\x0a\xf0\xee\x1e\x6c\x9c\xd9\x99\x38\xed\xaa\xc5\x83\xd8\xe8\xee\
+\xc1\xc6\x5c\x69\x8f\xa9\x02\xfc\x01\x60\xf3\xf7\xe0\xd2\xbd\x15\
+\xa5\xf7\xf7\xe0\xd2\xc4\xd3\xef\xae\x60\x7b\x82\x78\x42\xe2\xdc\
+\xf6\x63\x21\x9a\x1d\x3a\x2d\xd6\x4d\x95\x09\x05\x84\x68\x22\x5c\
+\x24\x69\xa1\xa4\x87\x23\x5e\x68\xcf\xb9\x75\xb3\x11\xd7\x43\xe1\
+\x0a\x2f\x85\x75\x69\x48\x51\xa8\x82\x43\x33\xf2\x28\xa8\x71\x13\
+\xc2\xd6\xde\x58\x2f\xda\x61\xfa\x59\x36\xed\x59\x36\x2d\x05\x30\
+\x4c\xa1\x61\xe0\x84\x78\xd2\xb8\x77\x62\xf4\x33\xac\xd5\xe2\xd1\
+\x59\x2b\x95\x13\x4a\x0e\x47\xa2\x90\xde\x68\x4e\xac\x55\x43\x61\
+\x0a\xa9\xb5\x92\x1d\xd6\xca\x42\x1b\xd1\x89\x0b\xb1\x42\x49\x9b\
+\x4e\x27\x74\xd3\x9d\x65\xd2\x11\x4b\x7d\x99\xec\xa1\x6b\x40\xf6\
+\x31\xd4\x47\xe1\xe2\xdc\x8c\x99\x7e\x04\xac\x6e\xe9\x72\x31\xde\
+\xce\x7e\x1c\xe9\xc2\x18\x2f\xbc\x18\x8e\x64\x21\x39\x69\x1e\x42\
+\x6a\xba\x7c\x46\x01\xb6\x2c\x66\x0f\xad\x9e\xe1\xb6\x90\x18\x84\
+\x46\x0a\x9f\x56\xcf\x68\x56\x40\xa1\x4a\x99\xae\x9e\x11\xa2\x80\
+\x90\x41\x10\x9e\x96\x73\xd1\x48\x27\xcb\xb9\x47\x98\xdf\xba\x2b\
+\xe7\x4c\xca\x33\x5f\x38\x1e\xf1\x91\x38\xa6\x6c\x61\x9c\xed\xf1\
+\x2b\x81\xd9\x13\xc8\x6d\x62\xa9\x73\x72\xfb\x78\xf3\x2c\xa2\xf0\
+\x42\x6a\xa3\x49\x19\x62\xd0\xca\xbd\xa1\x15\xe6\x43\x57\x68\x92\
+\x63\xe2\x9a\x1d\x8a\x82\xa1\xff\x70\x31\x32\xd0\x98\x5a\x4b\xb0\
+\x55\xd8\xc2\x39\xc5\x3b\x13\x30\xc2\x17\x4c\x03\x60\x2a\x11\x6a\
+\xa4\x35\x8a\x59\xcd\x53\xb1\xee\xa5\x3d\xcb\xa6\xa5\x09\x98\x42\
+\x28\xe6\xe2\xd5\x51\x4f\x02\x51\xbf\x1f\xa2\xd1\x64\xf7\xe3\x40\
+\xd4\x91\xc2\x10\x50\x9a\x80\x5d\x0a\x4d\x41\xab\x3a\x13\xe0\xd1\
+\x92\x38\x9a\x53\x4c\xe0\x48\x10\x45\x52\xcd\x95\x8e\x16\xca\xdd\
+\x84\x85\x72\x85\x65\x92\x3f\xb1\x3a\x74\x6a\xaf\x3a\xb4\xf2\x11\
+\x38\x56\xaf\xf6\x2e\x0d\x0c\x1f\x42\xdf\x41\xaf\x31\x0f\x30\x16\
+\x42\x30\x2b\xfa\x82\x0d\x0c\x49\x63\xa4\xe2\x09\xfb\x60\x84\xb4\
+\x03\x90\x4d\xc2\x3e\x30\x15\x18\xf4\xd1\xc2\xb4\x8a\x7d\x5a\x5b\
+\x6b\xc5\x53\xb2\x2f\x4c\x05\xec\x65\xdf\xe3\x99\xe7\x11\x35\x53\
+\x69\x5f\xcf\xa7\x0a\xcf\x49\x3b\x6a\x5d\x70\x6d\x41\x1d\xd9\x42\
+\x19\x66\xb4\xeb\xae\xcd\x2c\x0c\x19\x55\x96\x02\x51\x15\x9d\xa0\
+\x45\xe0\x24\xa4\x94\x30\xcb\x52\x4e\x02\xb4\x94\x01\x7b\x52\x20\
+\xca\xfd\x76\xd9\xca\xc7\xf3\x21\x5b\x20\xc2\xdb\xb3\x4e\x58\xe2\
+\x1d\x53\x90\xc1\xa0\x39\x53\xfe\x71\x07\x4e\x0b\x63\x65\xc2\x3f\
+\x2e\x0b\xc3\x04\x8f\xa6\x20\x89\x7f\xb0\xd9\x60\x93\xf3\x32\xe1\
+\x1f\x69\x02\xe8\x61\xe3\x9f\x74\x4e\x4f\xe9\xbd\x06\xc7\xca\xc7\
+\x5b\x7d\xd2\xf2\x8f\x26\xf3\x45\x39\xb7\x2f\xad\x4d\xc5\x98\x8c\
+\x09\x31\x0f\x82\xde\x59\x07\x2f\x38\xcc\xb4\xf5\x2e\x9d\xcd\xef\
+\xa7\x3d\xcb\xa6\xa5\xc5\x12\x85\x84\x2d\x61\x9a\x3f\x2d\x47\xcd\
+\xde\x51\x8d\x95\x8f\x69\xc2\x35\x1a\x6e\x82\x10\x5b\x20\x65\x36\
+\x12\x6a\x38\x0a\xfb\x02\x94\x92\xe1\x8e\x5c\x3c\xc1\x19\xc8\xc0\
+\x13\x7c\x3d\x1b\xd6\x65\x17\x5e\xf1\x0e\xcb\x75\xa1\x38\x1c\xeb\
+\xce\xc2\x04\x59\xd0\x44\x14\x4b\x67\x6b\xfb\x69\xcf\xb2\x69\xc1\
+\x72\x53\x69\x91\x5a\x09\xbc\x3d\xa6\xdd\x57\xe1\xaa\xd9\x5d\x45\
+\xfb\xd7\xa6\x9f\xe7\xb3\x2f\x3f\xa4\xcc\xff\x32\x5f\x4e\x57\x5f\
+\x46\x94\xb5\xa8\x51\xd8\x7d\x88\xda\x34\x4b\x7c\xba\xcf\xea\x5d\
+\x66\x96\xe9\x1d\x29\xaa\xfd\x66\x9c\x33\xd1\x4d\x31\x5d\x4d\xae\
+\x68\x7f\xe5\xe8\xaa\xec\x9b\x6a\x2b\x5a\x94\xe2\x7c\x3d\x9f\x8e\
+\x4e\x4f\x57\xd7\x64\xdb\xaf\xea\xee\xda\x7c\x5a\x7d\xa1\x27\x09\
+\xb1\xc5\xd3\xd5\x7a\x4d\x99\x2e\xc6\x37\x33\x70\x27\xfc\xd3\x6b\
+\x1a\x31\x1e\x1d\xea\x20\xfd\xb2\xff\xf0\xba\x5c\x95\x22\xa4\x6b\
+\x46\x9b\xcd\xc3\xaf\xab\xd5\x45\x3b\xfc\x6f\x77\x8b\x8d\xcf\x67\
+\x9b\x4f\x63\xb4\x18\x82\x91\x7b\x58\x45\x01\x42\x48\xbc\x7a\x7e\
+\xba\x5a\x4f\x67\xeb\xe8\x01\x2c\x65\x98\x93\x4c\x9e\x87\x88\x02\
+\x44\x00\x7a\x4a\x36\x8f\x28\xc7\xfa\x41\x39\xb9\x50\x97\x09\xae\
+\xd0\x06\xc4\x6e\x15\x88\x67\x71\x1d\xcf\xc6\x8b\x26\x51\x59\x4e\
+\xc5\xaf\xc0\xd2\x0a\x48\x17\xb3\xed\x78\x3a\xde\x8e\xdb\xac\x6b\
+\x4a\x1d\xa4\x79\xbb\x9e\x9e\x9d\xfc\xfd\xa7\x9f\x9b\x20\xca\x64\
+\x72\xf2\x7f\xab\xf5\xaf\x35\x3c\x01\x50\x24\x18\x9f\xae\xae\x00\
+\x92\x26\xb0\x43\xdb\x05\x27\x27\x24\x66\xe3\xed\xfb\xf9\x05\xaa\
+\x45\x1b\x55\xff\xf3\xfa\x62\x01\xec\x36\x0f\x92\xc4\xb4\x3d\xb0\
+\xcd\xb4\xcc\x76\x3d\x2b\x37\xa2\x66\xf7\xee\x4e\x27\x17\x73\x7a\
+\xe9\xf8\x97\xed\x7c\xb1\xf8\x2b\x15\x12\x05\x7b\xaa\x4c\xe7\xdb\
+\xc5\xec\xfd\x7f\x4f\xe7\xdb\xc1\xcf\x40\xeb\xe0\xef\xe5\xae\xce\
+\x50\x89\xf2\x59\x92\x7c\x73\x75\xfa\x6f\x68\xaa\xf7\x51\x3d\x42\
+\xfb\xff\x6b\x7c\x1e\xd3\x2a\xea\x62\xfe\x9e\xf6\x8b\xbe\x3d\xae\
+\x6e\xb2\x29\x68\x33\xe9\xfe\x14\x8b\xd5\x04\x0e\xed\xfe\x34\x1b\
+\xe8\xc6\xc9\xa7\x5c\x9a\x92\x96\x54\x30\xb4\xae\xd7\x14\xea\xb8\
+\xc5\x7c\x32\x5b\x6e\x6e\x67\x73\x6e\xcf\x73\xf5\xee\x06\x7d\x70\
+\x8a\xeb\xe9\xea\x62\x3c\x5f\x1e\xf7\x38\x1e\x5e\x5d\xad\x93\x2a\
+\xa2\xe4\x3f\x9f\x37\x41\xb0\x7e\xff\xfc\xa5\xdc\xac\x3b\xf8\x38\
+\xfb\x05\x9d\x98\xeb\x1c\x6a\x54\x3f\x97\x90\xb2\x57\x60\xe8\xc8\
+\xd0\x9e\x5e\xdd\x56\x4b\x68\xfc\xd3\xab\xbb\xd6\xef\x7f\xc6\xbf\
+\x5e\x9d\x0e\x7e\xd9\xce\x60\xa3\xd6\x43\xba\xf8\x3c\x5b\x0e\xa8\
+\xd6\x00\xe0\x5d\xab\xdb\xaf\x43\x48\x4b\x32\x15\xcb\xd8\xc7\x6e\
+\x57\x45\x62\x76\xf7\x5e\x4a\x61\x70\x39\x5b\x43\x74\x36\xf7\x82\
+\xc1\x72\xf3\x0a\x42\xb4\x5e\x4d\xaf\xc2\x7e\xe6\xb4\xff\x1f\x9e\
+\xf7\x4f\xf3\x4d\xc9\x9e\xa7\xc8\x7b\xb6\x9e\x7f\x0e\x0f\x88\xd9\
+\x9b\x38\x32\x7c\xdc\x72\xbc\x59\x3f\xdf\xea\xbd\xb7\xc7\xb5\x56\
+\x0c\x77\xe7\x3d\x1b\xb6\xba\xba\xbc\x58\x4d\x67\x95\x2d\x8a\x14\
+\x75\xde\x36\x2d\xc6\xa7\xb3\xc5\xbb\xa3\x5f\x82\xa6\xae\xf5\xec\
+\x79\xdd\xac\x2a\xd8\x3c\x9d\x6f\xa0\xab\x6e\x4e\xe6\x4b\x72\x8d\
+\x12\x67\xe8\x5c\xb3\x28\x1c\xba\xcd\x78\x34\xdc\x68\xae\x31\xb4\
+\x13\xd5\x78\x45\x39\x6d\x83\x2f\x43\x6e\x23\x63\xf0\x5f\x94\x28\
+\x8c\xd3\xd2\xbf\x6e\x83\xf1\x6b\xe8\x8b\x96\xb7\x64\x3f\xb9\xc6\
+\x00\xc6\x1b\x17\xcf\x77\x5d\x07\xba\xf6\xe4\x12\xc9\x88\xde\x6c\
+\x47\xb7\xf0\x10\xb5\xe5\x71\x4c\xbd\x76\x11\xa4\xf4\xb4\x73\xb3\
+\x3b\x7d\x46\x05\x2b\x6e\xe3\xdc\x2a\x26\xb4\xd3\xf2\x8a\x09\x66\
+\xb8\xd3\x6f\xe2\xad\x84\x67\x50\xfc\x27\x30\x09\x3f\xf6\xb6\xed\
+\x09\xfb\x3a\x3c\x8d\x62\xf3\xe1\x76\x7d\xb5\x98\x9d\x2c\x57\xcb\
+\xaf\x30\xcb\x6f\x00\xb5\xd5\xaf\xe1\x76\x56\x5d\x97\xce\xcc\x09\
+\xaf\x6f\x29\x5b\x74\xd9\x09\x7a\x78\x39\x8d\x89\xff\x5e\xcd\x97\
+\x27\x00\xe3\x6c\xfd\xe6\x62\xbc\xfe\x75\xb6\x2e\x73\x29\xaf\x47\
+\x9b\xed\x78\xbd\x4d\x28\x17\xf3\x69\x72\x3f\x5b\x4e\x93\x72\x43\
+\x56\x8b\x39\xfe\x39\x51\x35\x6d\x3a\x86\x2d\x5f\xaf\x81\x81\x38\
+\x25\x51\xcb\x39\x8a\x13\x56\xd3\xda\x46\x7e\x9e\x6f\xe6\xa7\xf3\
+\x05\xdd\x84\xcb\xc5\xec\x4d\x0a\xa4\x37\xab\xcf\xb3\xf5\xd9\x62\
+\xf5\xa5\x7e\x1e\x8b\xc1\xe5\x78\xfb\x29\xea\x83\xc6\xb7\x04\xb6\
+\xc9\xd2\xc2\x83\x9b\xe0\xaf\xd3\x7b\xf4\x12\xc6\x03\x71\x7f\x83\
+\xfa\xb7\xc1\x48\x70\xf4\x36\x86\xb4\xe4\x2c\x13\x90\x1c\x93\x6e\
+\xf0\x61\x07\x3d\xa2\x4a\x0a\x62\x69\xa6\x78\x9e\x88\x1c\xac\x81\
+\xa7\x8e\xe1\xb8\x02\xd9\x15\x5a\x33\x67\x06\x9c\x86\x7a\x0e\xc3\
+\xc8\xa1\x10\x80\x8b\x63\x56\xd7\x34\xe9\x86\xce\x15\xb4\xf2\x52\
+\x6a\xbc\xde\x52\x47\x90\x06\x6d\x85\x64\x62\x30\xc2\xf8\xdb\x50\
+\x90\x3d\xaa\x95\xd9\x51\xd7\xaf\x83\x07\x20\x35\x1d\xc9\xd0\x86\
+\xe9\x17\xa4\x3e\x18\xa9\x0f\xec\x03\xc9\x5f\xfa\xe0\xc0\x3e\xe8\
+\x0a\x79\x63\x0a\x3a\x42\x9e\xa5\x47\xd4\x48\xc8\x73\x44\xca\xc1\
+\x32\x18\x32\x61\x74\x24\xe4\x23\x5a\x9c\x85\x24\x42\x47\x52\x1e\
+\x11\x63\x31\x8f\xc8\xb1\x9c\x73\xab\x74\x21\xb8\xb6\x89\x9c\x67\
+\xab\x9b\xc8\x79\xab\xea\x12\xd3\xb6\x53\x49\xb6\x33\xc1\xe7\xa5\
+\x0f\x71\x1e\x3b\x0f\xfb\x8c\xfc\xad\x8e\x45\xc7\x8f\xf8\xaf\x68\
+\x34\x58\xfb\x1c\xbc\x76\x2b\x62\x41\xa9\x0a\x0d\x72\x10\x40\x92\
+\x60\x9e\x15\xb6\x5a\x37\x17\x81\x9f\x3c\xdd\xd5\xb4\x06\x73\x34\
+\xc9\x1e\xe1\x3f\x4c\x8b\x69\x2d\x79\x4f\x10\xe0\xc7\x6d\x77\xc8\
+\x41\x06\xc9\xcd\x42\xaf\x0e\x4e\x31\x9e\xe6\x16\x9a\xd9\x45\x51\
+\xb6\x00\x3e\xce\x69\xdf\x3a\xfa\x75\xa8\x0b\xe5\x95\xb0\xc6\x0c\
+\x3e\x46\x54\xf4\xba\x62\xcc\x75\xf6\x86\x11\x47\xb8\x36\xb6\xf5\
+\xa0\xf2\x7d\xd8\x04\x5b\xce\xef\xe5\xf5\xf5\xc2\x25\x55\x6f\xfd\
+\x6d\x7c\xbe\x9c\x9f\xdd\xcc\x97\xe7\x83\xbf\x2c\xc6\x9b\x3a\x1c\
+\x96\x07\x44\xd7\x37\x0c\xde\x9f\xa0\x1d\x19\x3b\xbc\xb6\x35\x45\
+\x96\x0a\xae\xc0\x0e\x15\xc3\xb4\xa9\xc5\xfa\x5f\x14\x19\x89\xc2\
+\x2a\xdd\xa7\xd7\xbd\xa7\x7d\x07\x93\x96\xdd\x49\xed\x54\xbd\xbb\
+\x88\x71\x4f\x93\xd6\x34\x13\x63\x85\x08\x17\x5a\x6a\x19\x9d\x54\
+\x80\x9a\xdd\x94\x35\x33\x4e\xb0\x78\xd5\x66\xd8\xda\x16\x76\x23\
+\x19\x91\xba\x99\xa6\x30\x28\x45\x0b\x97\xf3\x32\x01\x3a\xe4\xe3\
+\x55\xdf\xcb\x94\xaa\x88\x27\x79\x5a\x17\x13\x75\xf2\x99\x55\x1d\
+\xe9\xf2\x91\x5d\x46\x22\x6c\x73\x3b\xdc\x4a\xec\xc8\xc1\xbc\xee\
+\x89\x8e\xb7\x42\xc1\xeb\x38\xcc\x86\x94\xd4\x27\xb5\x21\xf7\xb2\
+\x16\xa7\x8b\x15\x0c\xec\x3e\x83\x9d\xc2\xf4\x37\x00\x47\x3a\x63\
+\x0a\x70\x74\x9a\xc7\xb3\xff\x25\x4e\xc3\x03\xab\xbd\xee\x00\x55\
+\x15\xda\x49\xdf\x03\x2a\x8c\x96\x31\x4c\xcb\x1c\x50\x25\x85\x89\
+\x8d\x74\x39\xa0\xd2\x89\x1f\xda\x39\x9b\xc5\xaa\x31\x99\xf5\x4e\
+\x19\xac\xf6\x15\xf9\x9d\x61\x69\xdc\x1f\x16\x96\xe7\x29\xeb\xcf\
+\x45\xba\xad\x7d\x9b\x9b\x7a\xae\x37\x4f\xd2\xe2\x08\xeb\x9d\x97\
+\x34\xb0\x7e\xdd\xef\xac\xac\x2e\xef\x96\x9a\xc3\xf3\x61\xfb\xe6\
+\xbc\xb1\xcc\x71\x5c\xa0\xa3\xd0\x5b\x71\x05\x52\x53\x5f\x2f\x4e\
+\x4f\x41\xd2\x58\xdb\x9d\x60\xe9\x18\xfb\x9c\xa9\x4e\xca\x0c\x0c\
+\xe4\xf1\x06\xad\xd0\xd8\xfc\xec\x50\xf9\x77\xd8\xdc\x4d\xf9\x17\
+\x6f\x06\x65\xdd\x67\xcd\xbe\x44\xe6\x7d\xe7\x59\xbd\xab\xb4\x57\
+\xdf\x74\xdb\x68\xef\xd9\x9e\x2c\x33\xbb\x77\x55\x74\xce\x4d\xd5\
+\xf0\x74\xb9\x61\xfb\x66\x38\xad\x21\xdd\xb6\x55\xfe\x1d\x72\xda\
+\x44\xf9\xd7\x2e\x89\x8c\x63\x64\x87\x94\x6a\x0e\x29\x55\x59\xfa\
+\xed\x2c\x95\x77\x4a\xcd\x1f\x36\x51\x3d\x4b\x47\x6a\x75\x6d\x82\
+\x13\x96\xba\x28\xf4\x17\xdc\x3a\x01\xb7\x4d\x38\x42\x3b\x0f\xd3\
+\x61\xb8\x82\x3b\x1f\x53\x75\xc1\x94\x04\x95\x26\x28\x6b\x1a\x9d\
+\x77\x24\x40\xa3\x75\x48\x5a\xa7\x34\x8c\xf9\x69\xbd\x0d\xef\xa4\
+\x34\x85\x70\xa2\xcd\xb1\x4b\x6b\xcb\x8e\xa9\x10\x1c\x6f\x28\x25\
+\xe5\x58\xd2\x98\x87\xfb\x69\xd3\xb2\x1b\xda\x87\xb8\x96\x0d\x35\
+\x6e\x0d\xe5\xd8\xa5\xd5\x65\x27\x43\x90\xa4\xb7\x9a\xc1\x68\xb7\
+\x33\x1e\x53\xde\xaa\xfd\xbf\x4c\xdc\x5d\xde\xec\x0e\x79\xdb\x95\
+\xe5\x5d\xe5\x4d\xb3\xbb\xc9\x9b\xee\x16\xf8\x4d\xe4\x4d\x1f\x24\
+\xe5\xdf\x4a\xde\x74\x57\xfa\x3b\xf2\x66\x2a\xd8\xa5\xf2\x66\x2a\
+\x71\x8b\xe5\x2d\x1c\x2f\x16\x68\x2d\xe6\x5b\x5a\x2c\x6f\x51\xca\
+\x46\x8a\xda\x1c\x23\x5a\x54\x76\x44\xad\xc4\x2d\x96\x37\x5d\x09\
+\x51\x5c\x76\x4b\x8b\xe5\xad\xa5\x46\xad\xa9\xc4\x8d\x65\xdb\x7d\
+\x57\x79\xab\x46\x87\x3b\x78\xdf\x0e\x37\xb5\x4d\x41\x15\x18\xef\
+\xe1\x66\x69\x06\xa5\x30\x14\xb8\xd4\x42\x0a\x83\xea\xb7\x54\x49\
+\x81\x2c\x0c\xac\x19\x68\x46\x58\xe5\x0c\x27\x9a\xb5\x60\x8e\x06\
+\x8d\x5b\xd4\x5f\xc4\xb4\x0f\x03\x57\x58\xc1\x9c\x72\x32\xa2\xba\
+\xea\xd8\x07\x51\xe5\x28\x19\x8f\x68\x71\xd9\x09\x55\x61\x58\xef\
+\x45\xc8\x91\x33\xeb\x18\xd1\xb8\xe4\xda\xdb\xa8\xec\x96\xf6\x21\
+\xaa\x65\x9c\x32\x6a\xa3\xf2\x9e\x0b\x91\x6d\x77\x87\xf1\xb1\xff\
+\x92\x71\x5a\xe9\xd4\x84\xd7\x87\xc5\xe8\xb2\x6e\x4b\xd2\x85\xfb\
+\x7a\xcd\xee\xeb\x35\xee\x0a\x65\x2c\xb7\x69\xaf\xd1\xc2\x10\xc1\
+\xa4\x8b\x7b\x0d\x40\x15\x0e\x4a\x2f\xee\xb5\x96\x16\xf7\x5a\x4b\
+\x6d\xfb\xa2\xcd\x31\xa1\x35\x65\x27\x54\xc6\x25\x0a\x88\x7a\x8d\
+\xdb\xca\x5f\x8d\xcb\x6e\x68\x71\xaf\xc5\x29\xa3\xd6\x20\x47\xf8\
+\x97\xd9\x76\xdf\xb9\xd7\xf4\xe3\xf4\x5a\x24\x76\x07\x4d\x5a\x64\
+\xe2\x78\x14\x02\x8a\x95\x73\x19\x51\x12\xd5\xde\xd1\x21\x34\x94\
+\x60\x9a\x6b\x45\x11\xa5\x86\x4a\xb3\x67\xd2\x89\x24\x24\xf1\x08\
+\x51\xb5\x66\xf7\x68\x1c\x55\xee\x86\xc3\x1e\x3b\xa8\x26\x18\x3a\
+\xd1\x49\xde\x09\xf9\xee\x1f\x1d\xe9\x78\x92\x2e\x37\x72\xf1\x0c\
+\x3f\x9e\x19\xb9\x34\xe7\x48\x88\x42\x1a\x69\x84\x6b\x1e\xbd\x8e\
+\x87\x46\x69\x9c\xa0\x1e\x8e\x33\xa3\xa5\x67\xae\x23\x8e\xd5\x18\
+\x1e\xbd\x64\x94\x97\xc9\x23\xbc\xe5\xb3\x83\x94\x72\xe5\x55\xa0\
+\xa7\x0e\x41\x3d\x60\xcf\x6d\x29\x6d\x86\xec\x42\x94\x4f\x53\xab\
+\x1e\x0d\xda\x9d\xc9\x09\x44\x66\xd8\xfe\xca\x9f\xd2\xaf\x0b\x16\
+\x4d\xf6\xca\x6a\x7f\xa7\xf9\x87\x5d\x48\xd9\x37\x58\x3f\x00\x2a\
+\xf1\xb0\x7b\x4f\x6c\xd6\x71\x67\xb9\x94\xee\x81\xe3\xff\x87\x0c\
+\xe3\x1f\x15\x37\x9c\x77\x97\xe7\x7e\x0b\xdc\xb8\x17\xdc\x3c\x77\
+\xdc\xc8\xef\x80\x1b\xcf\x5e\x70\xf3\xdc\x71\xa3\xbf\x07\x6e\xc4\
+\x0b\x6e\x9e\x3b\x6e\xec\xf7\xc0\x8d\x7a\xc1\xcd\x73\xc7\x8d\xff\
+\x1e\xb8\x79\xf1\x8b\x9f\x3b\x6e\xc4\xf7\xf0\x8b\xfd\x8b\x5f\xfc\
+\xec\x71\xf3\x1d\xfc\x62\xcb\x5e\xfc\xe2\xe7\x82\x1b\x16\x56\x04\
+\x09\xe9\x7b\xc0\xd9\xe9\x18\xab\xc2\xd3\xdf\x3d\x80\xe3\x0b\x4f\
+\x8f\xb4\xdc\x05\x1c\xf9\xe2\x18\x3f\x17\xe0\xec\x54\x38\x3b\x1d\
+\x9c\xfb\xe3\xe6\x56\x85\x23\x5f\x1c\x9c\xe7\x8e\x1b\xb9\xd3\xc1\
+\x79\x4a\xdc\xbc\x38\x38\xcf\x1e\x37\x3b\x1d\x9c\x27\xc4\x8d\x7a\
+\x71\x70\x9e\x3d\x6e\x9e\xc0\xbf\xb9\x1d\x37\x2f\xfe\xcd\xb3\xc1\
+\x0d\x33\xcc\xeb\xce\xba\xa5\xf2\x44\xbc\x47\xc7\x0d\x9d\x46\x81\
+\x47\x7c\x37\x6e\x5e\x02\x7f\xdf\x01\x37\xcd\x3a\x87\xf6\x22\x5e\
+\xee\xb0\x6f\x19\xfd\xbe\x45\xf4\xd9\x89\x7b\x23\x94\xa8\xf7\x0b\
+\x33\xce\xa5\x31\x74\x22\x0a\x97\xcc\x96\x57\x9e\x49\xc1\x7c\xbb\
+\xcc\x38\x2c\x98\x50\x74\xc2\x91\x33\x6a\xd0\x1c\xd3\x38\xf8\xf3\
+\xa0\x39\x9d\x71\x20\x0b\x2f\xa5\x70\x5c\x0d\xd8\x80\xe3\x37\xb0\
+\x85\xa1\xe5\x24\xc8\xf1\xc0\x17\x32\x05\x7c\x6d\xaa\xd0\x2c\xf6\
+\x58\x87\x5d\x24\xd5\xab\x99\xc7\xd7\xf1\x91\x91\xbd\xc7\xf9\x23\
+\x29\xdb\xc7\xd9\xb3\x29\xeb\x75\x24\x4a\x45\x9b\x4d\x7a\x1b\x11\
+\xb9\xe5\x5c\x48\xc6\xdf\x1c\xb6\xcb\x84\x8e\xeb\xdc\xb3\xc9\xa4\
+\xb3\x6e\xe4\x37\xb6\x15\x91\x27\x02\xf6\x0d\xf7\x22\x76\x3e\x31\
+\x3e\x5e\x47\xbb\xef\x3a\x5b\xa7\xd0\x1d\x39\x29\x88\xce\x95\x0b\
+\x4a\x47\xd2\xa6\x41\x56\x38\xcd\x5c\x74\xa4\xd7\x3e\x91\xca\x89\
+\xe2\x8e\x25\x4a\x7d\xe9\x1b\xd1\x96\x02\x29\xac\xad\x4e\x01\xad\
+\x6e\x30\x20\x51\xde\x31\x31\x54\xb4\xa0\xd1\xb2\x64\x03\x4b\x76\
+\xa1\xd3\x66\x33\x99\x4c\xaa\xff\xbe\xe2\x2f\xb3\xee\x49\x38\xd5\
+\x5f\xf6\xe4\x68\x0d\x98\x36\xf4\x15\x9e\xf0\x59\x27\x45\x7b\x38\
+\x39\x6d\xb0\x74\x4a\xc6\x54\x49\x8b\x30\xad\x71\x62\xe8\x0b\xab\
+\x20\x2e\xda\x47\xb4\xb0\x46\xd3\x49\x4d\x8b\xd2\x5a\xaa\x30\x05\
+\x0b\x2b\xcc\xe2\x1c\x05\x1d\x04\xc0\xb5\x8b\xcb\x6e\x68\x1f\x06\
+\xf0\x63\x38\xb3\x5c\xa8\x88\x2a\x34\x9d\x18\xa6\x03\x5f\x84\x72\
+\xd6\xe8\x81\xb0\x85\x65\xe1\x28\x36\x0c\xfa\x21\x67\x9a\xd3\xd6\
+\x51\x50\x95\xd7\x9e\x6b\x5a\xef\x28\xa4\x95\x5e\x10\xcd\x08\x74\
+\x6b\xf9\x36\x54\x8a\xf5\x03\x41\xbb\x45\x2d\x6d\xf9\x06\xcd\x7b\
+\x86\xab\xc1\xc7\x81\xf4\x85\x12\x5c\x83\xeb\xbc\xd0\x28\x50\x51\
+\x6b\x82\x1a\x82\x0f\x17\x0e\x4e\xd0\xce\x73\xab\x07\x74\xc5\x9c\
+\x47\x0b\x71\xa5\xd0\x30\x66\x06\xb4\xd1\xd4\x31\xc9\xe9\x65\x64\
+\x22\x9d\xa7\x97\x69\x1b\x2a\x37\xd2\x0d\x91\xb7\x77\xdc\x5b\x4e\
+\x34\x54\x56\x50\xb3\xe9\x20\x22\x68\x1e\x4b\x2f\xa3\xdb\x9d\x96\
+\xa4\x1c\x99\x36\xda\x7b\xaa\x8f\x28\x24\x97\x16\x29\xd1\x06\x2d\
+\x3c\x77\xc4\x20\xd4\xd8\x40\x5f\xab\xc0\x5e\xaf\xb4\x67\xe8\x08\
+\x20\x56\xa0\x46\x9c\x68\xd6\x4a\xc1\x03\x8d\xc1\xee\xca\x40\x73\
+\x50\xa4\xc6\x94\x6f\x7b\xaf\x04\x51\x55\x21\x31\x98\x50\x50\xb0\
+\x12\x57\xe0\xd6\x50\xd0\x61\x77\x50\xfa\xb2\x25\x25\x1d\x5b\x13\
+\x5b\x04\x50\x71\xc6\x18\x1f\x23\x25\x87\xa9\xaf\x83\x80\x35\xad\
+\xb9\xd7\x0a\xa8\x96\xc6\x63\x00\x1c\xba\xcc\x14\xdc\x73\xc5\x65\
+\x44\x45\x25\x81\x15\x2b\x3c\x4a\xa2\x0f\x88\xa1\xf6\x11\x8d\x16\
+\x2b\x1a\xb8\xd6\xb2\x6c\x4e\x45\xa5\xa3\x72\x61\xb9\x84\x19\x94\
+\xa8\x63\x32\x2c\xa3\xf5\x1a\x96\xc1\x45\x65\xb7\xb4\x0f\xb4\x61\
+\x54\x28\xcf\x98\x8e\xa8\x1a\x18\x81\xb6\x67\x66\x08\xd4\x41\xc3\
+\x73\x6f\x22\x5a\x5c\x76\x4b\xf5\x85\xb1\x60\xa5\xe1\x94\x23\xad\
+\xe6\xe4\xbe\x69\x4d\xb6\xd9\xb9\x73\x04\x72\x1e\xd5\x74\x42\xbf\
+\x83\xcd\x42\xe6\x40\x0c\x3a\x4b\xb2\xb3\xc7\x0b\xbd\xc2\xe0\x79\
+\x4a\xf5\xc7\xb4\x19\xb7\xed\x32\xcc\xe9\xf3\x9d\xe7\x0f\x3c\x92\
+\x46\x7f\x34\x04\xec\x76\xa5\x0f\xdd\xd1\xf7\xbb\xeb\xed\xc6\xce\
+\x31\xe1\x49\xd2\x21\xa0\xb4\xb9\x98\x57\x76\x0e\x3a\xd0\xc4\x54\
+\x58\x2f\x0e\xa5\xc8\x1c\x69\x39\x66\xa5\xf5\x31\x8d\xd4\xa1\x85\
+\xab\xe9\x4b\x3b\x57\x51\x49\xe3\x48\x47\xfa\x30\xca\x11\xd6\xcb\
+\xc0\xef\x94\x71\xd9\x0d\x2d\xd8\x39\xe6\xa5\xc5\xdb\x2d\x35\xd8\
+\x39\x58\x16\x11\x4c\x95\x35\x8a\x9b\xd2\xd0\x69\x6f\x82\x9d\x0b\
+\xb6\xa4\xb6\x73\xde\xf3\xa0\xe2\x84\xe1\xd0\x3e\xa5\x9d\xb3\xc6\
+\x96\x2f\x7b\xa9\x9d\x0e\x76\xce\x28\xad\x2c\x15\xc2\x04\x53\x4e\
+\x55\x76\x8e\xce\x0a\x96\xc1\xd0\x59\x67\x3c\x2f\x0d\x1d\x2c\xaa\
+\xaa\x4e\x08\xd2\x52\xa1\x42\x64\xe8\x48\xdd\xe9\x60\xfc\x60\xb4\
+\xa0\xe2\x60\xab\x8c\x34\x12\x6a\x8f\x2c\x9d\xd5\x22\xd8\x06\x58\
+\x35\x78\x58\xcc\xdb\x21\xf2\x61\x12\xb6\x4c\x04\x4b\x67\xc9\x01\
+\x08\x96\xce\xd2\x19\x2d\xf4\x36\xf9\xea\x96\x93\xa5\xe3\x4c\x32\
+\x21\x2b\x4b\x87\x3f\x3a\xc2\x05\x96\x8e\xbe\x81\xa4\x2b\x4b\x47\
+\x27\xcc\x06\x06\xc3\xac\x1b\xea\x1e\x58\x3a\x58\xa3\xd2\xfa\xa1\
+\xea\x8a\x89\x60\xe9\xa0\xa6\x61\x3d\x29\x1d\x0d\x66\x83\xb5\x42\
+\x8b\x61\x5e\xad\x2e\x2d\x9d\x57\x56\x04\x0b\x06\x3d\x4f\x16\x95\
+\x4c\x1d\x7d\x1b\x33\xa2\x25\x9d\xdb\x50\x5b\x18\x04\x63\x07\xbd\
+\x19\xc3\x25\x07\xac\xda\xd8\xc1\x08\xa1\x45\x06\x1d\x84\xfa\xaa\
+\xd0\xe9\x90\x7e\x8c\x2e\x61\x0b\x6a\x2a\xfa\x88\x66\xa6\x68\xa0\
+\x33\x84\xf1\x90\xe8\x73\x99\xd0\x68\x65\xbe\xae\xde\x6e\xa8\x02\
+\x43\x1e\x61\x24\xca\x6a\x73\xa4\xc9\x0f\x51\x1a\xa1\xa6\xec\x96\
+\x46\x87\xdf\xc0\xd8\x69\x0f\x5f\xa4\xa5\x5a\xda\xee\x2c\xc0\x85\
+\x28\xc7\x96\x16\x97\x5d\x53\x5d\x54\xcb\x36\xc7\xb6\x8d\xb9\x76\
+\x67\x4f\xd3\x50\x4a\xb2\xe7\xa9\x93\xf3\x56\x56\xbc\x8c\xde\xee\
+\xa9\x9b\xa1\x8e\x34\x6d\xc2\x52\xa5\x3a\x82\xbf\x4b\xf2\x47\x18\
+\x75\x92\x76\x2e\xf9\x42\x32\xa5\x99\x24\x0d\x45\xae\xba\x84\x3e\
+\x09\x6e\xa7\x30\x8e\xf4\x09\xf3\x9c\x91\x77\x4f\xfa\xc0\xcb\xa0\
+\x39\x72\xd4\xa0\x63\x58\xe5\x4c\x4b\x0e\x65\x98\x23\x05\x29\x93\
+\x0e\x8e\x7e\xa0\x2a\xab\x00\x11\xd2\xa3\x10\x17\xf8\xdf\x24\x3b\
+\x74\x42\x8c\x18\x84\x93\x69\x64\x79\x40\x15\x6d\x79\x82\x72\x2c\
+\x55\x6b\xb7\x2d\xbb\xd0\x7f\xc8\x59\x32\x93\xa7\x91\x90\xcc\xb0\
+\xf9\x10\xe0\xef\x3f\x70\xe0\x20\x5f\x54\xbd\xee\x7a\x27\x42\x59\
+\x0c\x17\x85\xfe\x83\x4a\x40\x0b\x08\xcd\x72\x80\x08\x87\x0b\xf7\
+\x0e\xb8\xee\x84\xb0\xca\x6d\x62\x42\x66\x13\x84\x10\x18\x9d\x80\
+\x1f\xbe\x03\x90\x4b\x70\x93\x4f\x50\x6e\x11\x75\x14\xc0\x85\x4f\
+\x33\x68\x0a\xa1\xb0\x5d\x9d\x3c\xba\xaa\xc2\x76\x06\x23\x6b\x01\
+\xe7\xc1\x0e\x0f\x7c\x21\x57\x42\x1c\xbe\xc8\xaa\x73\xc7\x60\x80\
+\x5c\xa5\xce\xab\x1b\x98\xec\xe0\xc0\x10\x05\x66\x58\xfb\xd7\x8f\
+\x25\x3d\x69\x04\xbf\x7f\xe6\x18\x45\x29\x20\xf6\xb9\x50\xdf\x9d\
+\x64\x66\xc7\x76\x30\x8c\xa0\xa1\x8f\xa4\xff\x03\x8b\x48\x38\x28\
+\x52\xf9\xf8\xb8\x96\x7a\xfe\xc2\x13\x9e\x54\xb2\x88\xa8\x39\x2b\
+\xa8\x80\x7b\x0e\xfd\x12\xcb\xc5\x75\x38\x42\x48\x5a\x78\x7f\xf1\
+\xd4\x4b\x75\xf6\x0b\x73\x86\x25\x3b\xb7\x49\x7a\xe0\x0a\x52\x58\
+\xc8\x74\x0f\x8b\x11\x85\x27\xa0\x2b\x7d\x1b\x5a\xa9\x7e\xd6\x03\
+\x97\x0a\xe0\xa6\x7f\x68\x37\x66\xb8\x70\x1e\xd2\xb2\xdf\x11\xf9\
+\xfe\x7a\x3f\x17\xae\xb6\xd2\x1c\xee\xf0\xbc\x82\x91\x95\x63\xd9\
+\xc5\x35\xe7\x74\xd8\xce\x6f\x09\xd7\x77\x41\x70\x5e\x89\x8b\x7d\
+\x4a\x9c\x3e\x90\xcd\xf7\x28\x71\x40\x55\xf8\x6c\x0e\x04\xc3\xf6\
+\xfc\xfd\x1d\x4a\x3c\x97\xa0\x54\xe2\xba\x70\x1e\xe3\x2f\x33\x68\
+\x0a\x81\x4e\x6e\x92\x47\x57\x95\x4e\xa6\xad\xc8\xcc\xd2\x10\xe0\
+\xb0\xf4\xb9\x02\x6e\xd7\xe1\xde\x1b\x5f\xbb\xe4\xd5\x8d\xd4\x30\
+\x75\xe1\xe0\x26\xcd\xbc\x13\xe6\x89\x04\x21\x37\x0d\x96\x1b\x21\
+\x58\xb2\x24\x5e\xca\x7d\x23\x84\xd6\x0e\x60\x68\x28\x30\x20\xca\
+\xda\x81\xbc\x0c\xed\x3b\x57\xec\x65\xd0\x70\x4b\x40\x87\x16\x89\
+\x73\x8d\x3e\xa2\x59\x45\x1f\xe2\x22\x18\x91\x7a\xe5\x69\x0e\xa7\
+\xa5\xba\x02\x83\x33\x69\x1c\xa7\x91\xab\xe1\xd2\x04\x00\x37\x34\
+\x83\x9e\xe5\x22\x1c\x3c\x19\x51\x81\x70\xfa\xf0\x83\xa1\x9d\xf3\
+\xd0\xfc\x56\x87\xfd\xf9\x96\x79\x38\x18\xa0\x59\x4b\xf1\x5c\x81\
+\xf1\x88\x85\x0e\x53\x65\x28\x99\x49\x4e\xd3\x11\xd0\xe5\xc0\x8e\
+\xb6\x54\x19\x69\xe8\xd0\x26\xa2\x59\x3a\xfe\x0e\x34\xf8\x28\x16\
+\x23\xdf\x98\xf6\x81\x4e\xb3\x20\x3b\x60\x44\x44\xa5\x81\xbd\x85\
+\x5b\xe3\x43\x15\x9d\xe6\x9e\xa4\x4c\xc0\x71\xe2\xa8\x0b\x39\x3d\
+\x10\x18\x57\x1e\xd7\x41\x0e\x97\xf2\x43\xd4\x9f\x42\x46\x18\x15\
+\xd1\x8a\x7d\x45\x81\xa8\x88\x0f\x39\x8e\xed\x18\x9b\x24\xc7\x9c\
+\xdd\x5f\xec\x9e\x7e\xea\xda\xa0\xb5\x5c\xd6\x1f\x27\xf4\x12\x23\
+\xae\x21\xd8\x4e\x31\xf6\x10\xfc\xe0\xf4\x21\xe2\xee\xc4\xb5\xa4\
+\xcf\x46\x0d\xaa\x0f\xe1\x91\x6f\x5a\x7e\xff\x0e\x9e\x2b\x7d\xc6\
+\xac\x99\x7e\x1e\xde\x9a\x22\xcd\x68\xc7\xe4\xb4\x49\x3f\x8e\x96\
+\xba\xe5\x3e\xfd\x40\x5f\x62\x0f\xba\x5f\xea\x4b\x67\xa5\x3b\x9f\
+\xf6\xab\xfb\x4e\xb2\xe8\x03\x22\x3d\x05\x25\x0e\x9e\x8c\xd6\x8f\
+\x1b\xce\xd8\x73\x72\xc1\xef\xe5\x58\xdc\xc3\xa7\xa2\x69\x4d\xcd\
+\x1e\x54\x93\x22\x91\x34\xa3\x06\x23\x28\x2c\x8c\x22\x39\x8e\xd5\
+\x45\xf3\x0c\x3a\x81\x56\xcf\xd3\xa7\x38\x15\x86\x4f\x4e\xc8\xa7\
+\x9c\xac\x8e\x26\xc9\x21\x54\x16\xe3\x11\x78\x06\xfe\xd6\x39\xe9\
+\x5e\x04\xa3\x9e\x88\xf6\xc9\x09\x87\xa5\x3e\x87\x52\x52\x9c\x87\
+\x68\x8a\x1e\x7c\xa4\xf0\x38\x74\x14\x49\xb1\xa1\x43\x3d\x41\xa1\
+\x98\x8e\xf6\x9e\x85\x38\x2d\x0f\x47\xde\x28\x03\x47\xa4\x24\xe9\
+\x90\x4a\xd1\xd7\x8c\x2c\x7d\xe4\x0c\xba\x19\xb7\x9a\x26\x2c\xc3\
+\xad\x08\xaf\x7c\x24\x1d\x5a\x95\xc3\x43\x39\x69\xb9\x87\xce\xcb\
+\x4d\x4e\x3d\x13\xe2\x70\xff\x57\x4f\x14\x67\x93\x54\x48\x18\x8d\
+\x1e\x14\x54\x96\xfb\x03\x4a\xcb\x53\x79\x73\x07\x20\xf5\x4e\x71\
+\x5d\x64\xf0\xa2\x08\xef\x17\xd5\x75\x14\x5b\xa5\xf9\x2d\x41\x47\
+\x73\x25\xb7\xd2\xd3\x44\x8a\x08\x37\x61\x16\x2c\x58\xd1\xfa\x39\
+\x87\x44\x12\x29\x4c\x49\x79\xce\x04\xe3\x24\xbf\x46\x72\x5a\xe4\
+\x11\x25\x54\xe9\xcd\xc7\x20\xef\x86\x7b\x1d\x32\xa1\x80\x6e\xc8\
+\xa4\x4f\x54\x64\x94\xa5\x0f\x5a\xc2\xd0\x61\x57\x92\x48\x8c\x87\
+\x2a\xd1\x8c\x8e\xb3\xd5\x9b\x18\xaf\x43\x5b\x91\xba\xa5\x95\x00\
+\x42\x96\xf3\x57\xa1\x44\x6e\xeb\xdc\xfa\xa4\x8f\x69\x7b\xb3\x6e\
+\x96\x88\xbf\x9d\xb8\x43\x83\x7e\x9d\xd0\xff\x7e\x0b\x52\x73\x58\
+\xed\xda\xa6\x89\xdf\x04\x1e\x44\x73\x4b\x73\x58\xc9\x2d\x79\x6f\
+\x70\x17\x15\xe5\x0f\x97\x9f\xcb\x72\xb6\x53\xc1\x11\x0f\xd5\xa8\
+\xd1\xc3\x0b\x2f\x14\xd1\x78\xf5\xbd\xe0\xa8\x10\xf8\xe4\xc9\xcd\
+\xbe\x6e\xbf\xab\xde\xb9\x43\x78\xe5\x45\xef\xfc\x06\x85\x63\x97\
+\xeb\xe3\x7a\x92\xc1\x5d\x8d\x7e\xf8\x24\xd6\x55\x7e\x8a\x2c\x44\
+\x25\x12\xb6\x10\xae\x04\x23\xc6\x84\xb5\x9c\xb8\x4a\x4e\xe8\x2b\
+\xb6\x15\x66\x7d\x39\x0e\xa1\x45\x04\x18\x81\x86\xec\xc8\xc1\xe9\
+\xe7\x7e\x17\x5c\xf6\xbf\xa0\xfc\x82\xcb\xdf\x25\x2e\x7d\x0f\x97\
+\x50\x82\x9c\x07\xc3\x29\x29\x60\xae\x4b\x30\x29\x67\x02\x09\x7a\
+\xd1\x94\x8e\x39\x9d\xdd\x5a\xea\xbc\xb0\x60\xc3\x94\x50\xa5\x08\
+\x44\xc0\x25\x2d\xad\x0b\xb8\x2c\xa3\x6a\x2c\x50\x74\x4d\x4a\x4b\
+\x78\x88\xc6\x34\xec\x05\x99\xcf\x1d\x99\x39\x68\xca\xf4\x9c\x80\
+\xfa\xe0\xda\x48\x3b\x06\x10\xaa\x1a\x84\x34\x9f\x48\xb6\x9f\xd1\
+\x57\x95\x99\x0a\x0e\x04\x77\x64\xdf\xc3\xaa\x02\x6b\x65\x18\x56\
+\xb2\x10\xe1\xa3\x85\xa5\xb0\xeb\xd6\x40\xc5\x96\xce\x87\xb1\x48\
+\x49\x66\x9c\x2b\x63\x82\x87\xc8\x38\xec\xbe\xeb\xe9\xe4\xc3\x47\
+\x8b\xb9\x53\xd8\x59\x38\x0b\x11\x3f\xff\x82\xd2\xdf\x09\x4a\xfb\
+\x73\xe7\x91\x25\x0e\x1f\xf3\xae\xe2\x0f\x95\xb2\xac\x7c\xcc\x00\
+\x55\x6d\xe8\x73\xcb\xb4\x0a\x0b\x83\x10\x5f\xba\xba\x1d\x1a\xc5\
+\x03\xcb\xb5\xe4\x82\xbe\x3e\x60\x34\xad\x1b\x47\x1e\x4a\xd3\x3a\
+\x40\x5a\xbf\x25\x45\x5d\x44\xa7\xd8\x43\x81\x1a\xdd\xbc\x00\xf5\
+\x9b\x02\x35\xfe\x56\xd4\x5b\xfa\x62\xee\xfb\x1f\xfe\x1f\x93\xc3\
+\x7b\xaa\
+\x00\x00\x17\x58\
+\x00\
+\x00\x8a\x54\x78\x9c\xed\x3d\x6b\x6f\xe3\x46\x92\xdf\xf3\x2b\x78\
+\x9e\x2f\x19\x9c\x44\xf5\xfb\xe1\x19\xcf\x62\x77\xb2\x09\xf6\x90\
+\xc5\x01\x9b\x04\xf7\x71\x41\x4b\x94\xad\x1d\x59\x32\x28\x79\x6c\
+\xcf\xaf\xbf\xaa\xe6\xab\x9b\x6a\x4a\x94\x2d\x67\x92\x81\x2d\x24\
+\x43\x15\x9b\xfd\xa8\x77\x15\xab\x5b\xef\xff\xf2\x70\xb3\x4c\x3e\
+\xe7\xc5\x66\xb1\x5e\x5d\x9c\xd1\x94\x9c\x25\xf9\x6a\xba\x9e\x2d\
+\x56\x57\x17\x67\xbf\xfd\xfa\xe3\xd8\x9c\x25\x9b\x6d\xb6\x9a\x65\
+\xcb\xf5\x2a\xbf\x38\x5b\xad\xcf\xfe\xf2\xe1\xbb\xf7\xff\x35\x1e\
+\x27\x1f\x8b\x3c\xdb\xe6\xb3\xe4\x7e\xb1\xbd\x4e\xfe\xb1\xfa\xb4\
+\x99\x66\xb7\x79\xf2\xfd\xf5\x76\x7b\x7b\x3e\x99\xdc\xdf\xdf\xa7\
+\x8b\x0a\x98\xae\x8b\xab\xc9\xdb\x64\x3c\x86\x27\x37\x9f\xaf\xbe\
+\x4b\x92\x04\x86\x5d\x6d\xce\x67\xd3\x8b\xb3\xaa\xfd\xed\x5d\xb1\
+\x74\xed\x66\xd3\x49\xbe\xcc\x6f\xf2\xd5\x76\x33\xa1\x29\x9d\x9c\
+\xb5\xcd\xa7\x6d\xf3\x29\x0e\xbe\xf8\x9c\x4f\xd7\x37\x37\xeb\xd5\
+\xc6\x3d\xb9\xda\xbc\xf1\x1a\x17\xb3\x79\xd3\x1a\x27\x73\xcf\x5d\
+\x23\x6a\xad\x9d\x10\x36\x61\x6c\x0c\x2d\xc6\x9b\xc7\xd5\x36\x7b\
+\x18\x87\x8f\xc2\x1c\x63\x8f\x32\x42\xc8\x04\xee\xb5\x2d\x87\xb5\
+\x3a\x7f\x58\x02\x26\x7a\x27\xe3\xee\xfa\xa3\x03\xf6\x6f\xe1\xbf\
+\xe6\x81\x1a\x90\x6e\xd6\x77\xc5\x34\x9f\xc3\x93\x79\xba\xca\xb7\
+\x93\x1f\x7e\xfd\xa1\xb9\x39\x26\xe9\x6c\x3b\xf3\xba\xa9\x91\x1f\
+\x8c\x1b\x50\x64\x95\xdd\xe4\x9b\xdb\x6c\x9a\x6f\x26\x35\xdc\x3d\
+\x5f\x7f\x39\xcf\x1f\x6e\xd7\xc5\x76\xfc\x38\xbb\x85\xc9\x58\x92\
+\x12\xf7\x17\x6d\xf3\x30\xa0\xcd\x7c\xb1\xcc\x71\xcc\x8b\xb3\xc9\
+\xf5\xfa\x26\x9f\x6c\xb6\xf9\xe7\x7c\x35\xc9\x67\x0b\xbc\xb7\x9a\
+\x8d\x85\x49\x6f\x57\x25\xe2\xea\x65\x9d\xcf\xd6\xd3\xf2\x99\xa6\
+\x59\x5a\x23\xd7\x6f\x73\x99\x6d\x9a\x7e\xff\xb3\xb8\xb9\xc9\xa6\
+\x93\x4d\x31\x9d\x4c\x3f\x6f\x26\xc0\xbd\x57\xeb\xf1\x62\xba\x5e\
+\x8d\xb7\xd7\x39\x8e\x3b\xcd\x96\xd9\xe5\x32\x9f\x64\xd3\x2d\xb0\
+\xfd\x26\x9c\x6c\x23\x0c\x24\x15\x2a\x1c\xc7\xbb\xc5\x59\xf9\xd4\
+\xec\xe2\x0c\xa6\xc3\x84\x75\x5f\xaf\xf3\xc5\xd5\xf5\xf6\xe2\x0c\
+\x16\x52\xe2\xe1\xf6\xc1\xc1\xef\x17\xb3\xed\xf5\x2e\xb8\x19\x73\
+\x7d\xb7\xbd\xbd\xdb\xfe\x3b\x7f\xd8\xe6\xab\x72\x04\xa0\x8f\x47\
+\x2c\x77\x1b\xd7\xdd\xc0\xce\x3e\x40\x07\xef\x67\xf9\x7c\x83\x1d\
+\x95\x13\xc1\x6f\xdc\xdd\x80\x5b\x4d\xdf\xb7\x30\xe9\xdb\x7c\x8a\
+\xc2\x52\x36\xf5\x16\xb4\x7d\x44\xfe\x08\x9b\xf2\x92\x89\x92\x00\
+\x27\xb7\xff\x7e\x80\x55\x27\xe7\x09\x13\xf0\x3f\x1a\x6d\xf1\x58\
+\xb6\xa0\xb0\x3e\xf8\x87\x44\xdb\x7c\x41\x24\xec\xe9\xa6\x9a\xc1\
+\x78\x5d\x2c\xae\x16\x80\x86\xb2\x9d\x0a\x1b\xc3\x52\xbd\x45\x51\
+\xca\xcf\x92\x49\xb5\xea\x22\x9b\x2d\xb2\xe5\x4f\xf8\x0f\x28\x90\
+\x9d\xee\xa7\xeb\xe5\x12\x9e\xba\x38\xcb\x96\xf7\xd9\xe3\xa6\xe9\
+\xd2\x89\xe0\xf9\x75\x91\x83\xca\x78\x03\xd7\x79\x56\xd4\x7d\x48\
+\xa2\x48\x30\x74\x38\x84\x24\xbc\x9d\xd9\x55\x05\xfc\x6d\xb5\xd8\
+\x82\x6e\xb8\xdb\xe4\xc5\x2f\x28\x5f\xff\xbb\xfa\x6d\x93\xef\xb4\
+\xfa\xb5\xc8\x56\x1b\x10\xe6\x9b\x8b\xb3\x9b\x6c\x5b\x2c\x1e\xbe\
+\x1f\xb3\x54\x6b\xc1\x8d\x1d\x11\xf8\xd0\xd4\x2a\xab\x89\x1a\x51\
+\x0a\x70\xc5\xf8\x68\x6c\x34\x4b\x8d\x91\xe2\x6d\xd3\xd9\x14\xe8\
+\xa2\x88\x4c\x35\x15\xcc\xb6\xd0\x47\xc4\xb3\x4a\x95\xd0\xa6\x85\
+\xce\xa3\x6d\xe7\xd1\xb6\x05\x18\x03\xaa\x53\x68\x69\x54\x8b\xde\
+\x10\x35\x83\xd1\x8b\x68\x8b\x60\xf5\x43\x75\xff\xfd\x66\xbb\xbe\
+\xad\xdb\x02\x77\x6e\x1f\x97\xc0\x95\x08\x1c\x43\x8f\xeb\xe2\xfc\
+\x72\x99\x4d\x3f\xbd\x73\x80\x35\xe0\x73\xb1\x7d\x3c\xa7\xef\xce\
+\xda\x27\xd6\xf3\xf9\x26\x87\x61\x89\x07\x73\x92\x09\x4f\xc0\x48\
+\xac\x59\xc0\xd3\xc6\x22\xb1\xb1\x68\x7c\x2c\xd1\x22\x6b\x12\x2e\
+\xf9\xeb\x71\xa8\x47\xec\xe7\x72\x68\x9c\x41\xc7\xd4\x58\x9a\x2a\
+\xfe\xc7\xe5\xd0\x08\x03\x0a\xf3\x2c\x06\x8c\x32\x45\x9c\x01\x25\
+\xe9\x67\x40\xaf\x95\x8a\x75\x98\xca\xb3\xe3\x25\xe3\x77\x63\x77\
+\xc9\x0e\xb1\xfb\x13\x35\xc6\x5e\x76\x07\xca\xed\x23\x2c\xd3\xbf\
+\x03\xbb\xb3\x94\x6a\x1b\x63\xf7\x07\x7a\x71\xc6\x09\x40\xa5\xa6\
+\x2d\xed\x1e\x11\xaa\xba\x2c\xfc\xc0\xa2\x6d\x19\x0a\x81\x4d\x91\
+\x71\xf4\x0b\xe8\x5e\x21\x05\x1b\xce\xfa\x6f\x4a\x8f\xe5\x89\xda\
+\x17\xc6\x12\xc7\xb0\x63\x74\xb4\xc1\x0c\x09\xa3\xa9\x27\x32\xe4\
+\x0e\x96\xa8\x54\xaa\x17\x4d\xf5\x80\xd8\x48\x44\xc5\x96\x78\x7e\
+\x70\xef\x62\xe7\xee\xaf\x83\xda\xfa\xd1\x3d\x62\xec\x0f\x1f\xd3\
+\x1a\x74\xe0\xf0\x06\x3f\x07\x87\x3f\xce\x90\xc1\xd4\xb2\xc5\x55\
+\x31\xe3\x81\x01\x60\x24\x05\x99\xa1\x81\xfa\x57\x22\x95\x4a\x07\
+\x0a\x5d\xa6\x4c\xea\xc0\x1a\x74\x1f\x9c\x47\x1e\xdc\x2f\xe5\x3d\
+\x38\x8c\x71\x6d\x04\x47\x3f\x12\xfc\x44\x78\x8d\x4a\xa9\x79\x3f\
+\x89\x8e\x24\x85\xcd\xf0\xd3\x4b\x8a\xf8\xf0\xd2\x23\x51\x48\x8d\
+\x61\x24\x62\x07\x49\x44\x29\xa2\xda\x88\x2e\x8d\xd4\x41\x1a\xed\
+\x3c\xf9\xb5\x88\xa4\xd4\x57\x25\x92\x32\x87\x88\x34\x54\x21\x31\
+\x65\x0f\xa9\x23\xa6\xc9\xd3\x95\x51\xc6\xf1\xf3\x74\x65\xc4\x34\
+\x7d\xba\x2a\x12\x53\xfc\x3c\x55\x15\x0d\x46\xa1\x3c\x8c\x42\xf5\
+\x0c\x14\xce\x33\xfc\x3c\x03\x85\xea\x19\x28\xbc\x74\x7f\x27\xd6\
+\xe6\xcf\xf0\xd3\x90\x5f\xfb\xa3\x12\x30\x5d\x9e\x16\x79\xae\x9f\
+\x46\xc0\x35\x33\x4c\xf3\x51\x4d\xa8\xf6\x02\x50\xc0\x99\x56\x7a\
+\xc4\x53\x2e\xb9\x94\xd8\x46\x09\x25\x84\x0e\x43\x14\x93\x1a\x26\
+\x04\xb5\x24\x50\x80\x3c\xd5\x52\x51\x66\x64\xa0\xf0\x76\xdb\xce\
+\xa3\x6d\x41\x5b\x72\x0d\x50\xaa\x5f\x36\x47\x81\x7c\xbd\x1f\xd5\
+\xe6\xf9\xa8\xc6\xac\x59\xee\x30\x4d\x84\xe5\x88\x57\x41\x29\x67\
+\x21\x16\x39\x87\xfb\xca\x37\xce\x0e\x8b\x10\xd1\x71\x65\x69\x68\
+\x36\x76\xdb\xce\xa3\x6d\x01\x8b\x10\xfc\x69\x62\x84\x17\x48\xbd\
+\x00\x16\x4b\x8f\x6f\x2f\x1e\xd5\x09\xf0\x78\x4a\x96\xa5\x82\x3b\
+\x0b\xe7\x23\x5b\xa7\x4c\x41\x90\xa1\x74\x87\x65\xbb\x6d\xe7\xd1\
+\xb6\xc8\xb2\xd0\x56\x1a\x65\xe5\x21\x64\xef\x3a\x03\x31\xc3\x1f\
+\xf3\x10\xa2\xbe\x45\xcc\x09\xd9\x87\x3f\xc6\x20\x1a\x8b\xe1\xaf\
+\xb9\x25\x52\x45\xb9\x64\x16\x10\x69\xb5\x35\xc4\xbc\x3d\x92\x7c\
+\xbb\x4c\xc0\x98\xe1\x71\x66\xea\xb8\x54\xbd\x9c\x38\x0c\xa9\x3a\
+\x40\x6a\xd7\xe3\xed\xc3\x69\xb7\xdd\x9f\x05\xa5\x72\x0f\x4a\xf9\
+\xb3\x51\xfa\x1c\xa5\xe0\x82\xe5\xfe\xb9\xc3\x6d\x13\x62\x5b\xa4\
+\x9c\x00\x09\x64\x40\x17\xc1\x52\xa2\x01\x5d\x21\x01\x77\x9a\xce\
+\x63\x4d\x31\xcf\x25\xc1\xe0\x50\x49\x77\xbd\xe9\x5d\x22\xd2\x08\
+\xed\x5a\x22\x1a\x01\x9a\xb5\x85\x70\xb8\x02\xe6\x18\x4c\xc4\xa3\
+\xd3\x6c\x42\x88\xde\x3c\x6f\x13\xb5\x0b\x0f\xc5\x83\x7d\x7e\x3d\
+\xc3\xcf\x73\x52\x5f\x6f\x2e\x29\x7e\x06\xf8\xf3\x5e\x36\x6e\xd7\
+\x15\xf3\x96\x61\x0e\xbb\x78\xd0\x2a\x96\x30\x18\xe8\xe3\x29\x83\
+\x9f\x97\x76\x93\x05\x70\xf5\x61\xa2\xf5\xe4\x2b\x07\xad\x43\x33\
+\x3b\x9f\x76\x12\x1f\xc0\x9d\x44\x1b\xc1\xa9\x18\xe0\x29\xc3\xf0\
+\xe6\xe9\x68\x8c\x0f\xaf\xb4\x02\x97\x4e\x9e\x12\x8f\x60\x58\x0f\
+\x2e\xc4\x73\x93\x07\x33\x7f\x34\x71\x34\x08\x6d\xcf\x09\xd2\x62\
+\xa3\x02\xd5\x44\x89\xb7\x13\xa2\x4d\xeb\xc3\x3a\xff\xf0\x4a\x9f\
+\x80\xd7\x4a\x90\x9e\x80\x57\x13\xc5\xeb\xf1\xa3\x9d\x30\xd8\xe5\
+\xe0\xec\x0d\x57\x86\x3d\x2c\xb5\x1f\x85\x4d\xe0\xca\xd5\x00\xdd\
+\xc7\xb8\x8e\x27\x4b\x23\x5a\x75\x38\xfb\x01\xef\x01\x07\xb2\xe3\
+\x54\xff\x81\xcc\xeb\x30\x11\xf1\xd6\x45\x4e\x46\x35\x23\x8e\xa1\
+\x9a\xc9\xf0\x73\x94\x09\xdb\xb3\x0e\xb3\xcf\x82\xc5\xb2\x36\x06\
+\x3f\xa7\xc2\xa2\x91\x07\xb1\xf8\x02\xfe\x5d\xa0\x6c\x22\x31\xdf\
+\x09\xdf\x26\xed\x77\xcd\xb8\x86\x80\x70\x34\xc6\xdc\x02\x25\xca\
+\xe4\x63\x70\xd4\x98\x49\x2d\x84\x82\x26\x8c\xfb\xc0\x71\xa4\x9c\
+\x10\xea\x79\x9e\x8f\x2e\xd3\x00\x81\x9c\x65\xad\x2f\x35\x8f\xb6\
+\x9d\x47\xdb\xa2\x97\xa9\x52\xc9\x8c\x62\xec\xa0\x9b\xf7\x9c\x54\
+\x85\x11\xea\xac\x9f\xfd\x01\xdf\xc7\xbe\xac\xc6\x17\x6e\x4c\xa7\
+\xa0\xed\xb8\x68\x15\x2e\xbe\x70\x63\xb0\x20\x43\x98\x6d\x07\x74\
+\x2f\xdc\x68\xca\xb9\xb4\xde\x7b\x9b\x47\xf7\x1a\x2e\x95\x52\x6b\
+\xfd\xa2\x8b\x77\xde\xf0\xbe\xc5\x9f\xb0\x96\x04\x57\x29\xa4\x8d\
+\xe7\x17\x98\xa5\xcc\xb2\xd1\x58\x41\x10\xc7\x8d\x80\x2b\x9d\x0a\
+\x45\x94\x34\xdd\x17\x99\xa9\x92\x8a\x49\x12\xe0\x95\x8b\xb4\x23\
+\xc5\x0e\xaf\x1c\x74\xb1\xd1\x7e\xdb\x12\xdb\x04\x3b\x20\x2f\xca\
+\x54\x5c\xed\x67\x2a\xce\x9f\xc0\x54\xd4\x00\x9e\x98\xd2\x3c\x58\
+\x3c\xe5\xa9\x22\x8c\x7a\x01\x35\x2e\x9e\x6a\x34\x62\xc6\xf2\x60\
+\xf1\x4c\xa6\x5a\x70\xf4\xf0\x5e\x32\x42\x45\x6f\x7d\x9f\x06\xe3\
+\xc7\x6a\x30\xd4\x31\xb8\x78\x41\x6c\xa7\x62\x83\xd1\xd4\x50\x08\
+\x4e\xc3\xdc\xd2\x6e\xdb\x79\xb4\x2d\x26\xf2\x20\xe4\x05\x3d\x2f\
+\xe9\xcb\x62\x44\xed\xd7\xe9\xfc\x94\x05\x31\x12\x16\xae\x38\x4a\
+\x90\x06\x4a\x13\x92\x8f\x99\x18\x8d\x5d\x0d\x8b\x10\xdc\x7d\x63\
+\x29\x93\xa0\xd4\x01\x0c\x1c\x41\xa4\xd5\x12\x6b\x08\x52\x2b\x28\
+\x21\xa1\x6a\x87\x48\x5f\x50\xc1\x75\x27\x55\xc6\x53\x0c\x8d\x48\
+\x98\x3f\xd8\x6d\x3b\x8f\xb6\x05\xb4\xab\x4a\x8c\x6b\x29\x7c\x3f\
+\xc1\x5a\x41\x77\xd5\xd4\x02\x62\x95\xe5\xec\xf3\x22\xbf\xff\x2e\
+\x24\xc0\xfd\x62\x35\x5b\xdf\x8f\xd1\x6a\xd4\xa2\xdd\xbd\x07\x93\
+\x11\x8d\x85\xe9\xde\xac\x6b\x22\x4d\x6f\x8b\xaa\x3a\x92\x92\x26\
+\xe9\xdb\xb4\x98\xad\xa7\x77\x58\x0a\x3c\xbe\x2b\xe9\x53\x15\x4e\
+\x7a\x2d\xae\x8a\xc5\x6c\x7c\x79\xb9\x86\x39\x6c\x8b\xbb\x9a\x64\
+\x9b\xeb\xf5\x3d\xde\x09\x80\x2d\x4f\xdd\x15\x05\x76\xba\xcc\x1e\
+\x73\xc0\x8e\xfb\x67\x67\x68\x87\x78\x91\x5a\x43\xac\xe0\x3b\x37\
+\x1f\x9c\x74\x5b\x6e\x34\xd9\x59\xd6\x97\xf5\xfa\xa6\x75\xfe\xdb\
+\xda\xc6\xec\x2a\xdf\x5c\x67\xb0\x62\x78\x36\x76\xb3\x72\xa1\x9c\
+\x93\x56\xdd\xbf\x5c\x17\xb3\xbc\xf0\x6e\x30\x29\x2c\xa1\x8d\x49\
+\x2b\xef\x3b\x77\x0c\xc4\x40\xb9\xbf\xea\x16\xf6\x58\xdf\x28\xdd\
+\xdd\x7a\x4c\xc0\x0a\x96\xcb\x76\xa7\x80\x38\xf3\xe7\x38\xcf\x96\
+\x4d\xca\xe7\xfd\x4d\xbe\xcd\x66\xd9\x36\x6b\xbb\xa8\x21\x75\xaa\
+\xe0\x7d\x31\x9b\x9f\xff\xeb\x87\x1f\x1b\xf7\x71\x3a\x3d\xff\xbf\
+\x75\xf1\xa9\xf5\xf4\xb0\x41\x76\xb9\xbe\x03\x66\x68\x5c\x5c\x2c\
+\x62\x9d\x9e\xa3\x48\x65\xdb\x0f\x8b\x1b\x18\x1e\x6b\xa7\xff\xfb\
+\xe1\x66\x09\x3c\xda\xdc\x08\x1a\x63\xd1\x6a\xdb\x69\xd9\x6d\x91\
+\x97\xb5\xd1\xd1\x72\xf2\xd9\xf4\x66\x81\x0f\x4d\x7e\xd9\x2e\x96\
+\xcb\x7f\xe0\x20\x9e\x9b\x5b\x75\xba\xd8\x2e\xf3\x0f\x7f\x9f\x2d\
+\xb6\xc9\x8f\xc0\x95\x6e\xf0\x12\x16\x34\xdb\xdc\x5d\xfe\x07\xb4\
+\xd1\x07\x6f\x7c\xb7\xee\xbf\x65\x57\x3e\xac\x82\x2e\x17\x1f\xb0\
+\x6a\xf9\xfd\xa4\xfa\x12\x6d\x31\x77\xc3\xed\x6b\xb1\x5c\x4f\xb3\
+\x6d\xbe\xbf\xcd\x06\xf4\xdf\xf4\x3a\xd6\xa6\x84\x05\x13\x74\xab\
+\xdb\x59\x0a\x12\x6c\xb9\x98\xe6\xab\xcd\x61\xf4\xc6\xca\xef\xab\
+\x67\x37\x80\xfb\x4b\xb8\x9e\xad\x6f\xb2\xc5\x6a\xb2\x83\x69\xf7\
+\xe8\xba\x08\xa6\x08\x23\xff\xf5\xaa\x71\xf3\x77\xe9\xf2\x8b\xab\
+\x14\x4f\x7e\xca\x8a\x02\x28\x19\x23\x0e\x2e\x6a\xb7\x17\xd7\x72\
+\x67\x40\x47\x48\xb7\x9e\x9d\xb9\xad\x57\xa0\xd5\x2f\xef\x8e\x9d\
+\xdf\xff\x64\x9f\xee\x2e\x13\x98\x25\xd8\xa1\xe2\xd8\xe9\xed\x8e\
+\xe9\xda\xa2\xec\xf8\xb2\xf4\x73\x97\x34\x9e\x38\x1d\x4f\x95\x90\
+\xec\xb7\x79\x01\x22\xb2\x79\x12\xd9\x57\x9b\x37\xff\xca\x6f\x8b\
+\xf5\xec\xce\x55\xd3\x87\xf4\x7e\x7e\xdf\x3f\x2c\x36\x25\x7a\x5e\
+\xa2\xef\xbc\x58\x7c\x76\x37\x10\xd9\x1b\x3f\xf6\x9d\xb4\x18\x6f\
+\xaa\x37\x5a\xfd\xf6\x7e\x52\x6b\x3f\xf7\xed\x6a\xc7\x26\xad\xef\
+\x6e\x6f\xd6\xb3\xbc\xb2\x2d\x9e\xe2\x8d\xdb\x9a\x65\x76\x99\x2f\
+\x2f\xce\x7e\x71\x9a\xb7\xd6\xa7\x57\xf5\xb2\xaa\xc8\x7b\xb6\xd8\
+\xdc\xc2\xe3\xe7\x8b\x15\xba\x3b\x81\x83\x73\x25\x89\x17\xcb\x6d\
+\x23\x5e\x0a\x55\x12\x62\x2b\xf0\x46\xaa\x52\x46\x61\xa4\x76\xde\
+\xc9\x48\x80\xc3\x40\xb4\x1a\x09\x96\x2a\x03\xae\xd1\xdb\x36\xfd\
+\x50\x80\x7e\x68\x71\x0b\xf6\x67\x4c\x25\x44\x04\x10\xa7\xfa\x55\
+\xa9\x0f\x0e\x2e\x2d\x3a\x39\xdc\x83\x37\x9b\x21\x34\x78\x7d\x52\
+\x53\x3f\x61\x5b\x9b\x7c\xce\x2d\xd6\x0d\xfb\xdd\x39\x87\x0d\x06\
+\x16\x54\xfb\xbd\x55\x48\x68\x13\x3f\x82\x30\xa2\xa8\x91\xef\xfc\
+\x42\xd6\x39\x28\xf8\x73\x50\xfd\xdf\xef\x14\x8d\x32\xfd\xd6\xdd\
+\xf5\x92\x5b\xee\x6b\x71\xb7\xcc\xcf\x57\xeb\xd5\x17\x30\xb3\xef\
+\x80\xd5\xd6\x9f\xdc\xd7\xbc\xba\x2e\x9d\x93\x73\x5a\x7f\xc5\x6e\
+\x81\x64\xe7\x40\xe1\xd5\xcc\x07\xfe\x67\xbd\x58\x9d\x03\x33\xe6\
+\xc5\xbb\x9b\xac\xf8\x94\x17\x65\x2f\xe5\xf5\x78\xb3\xcd\x8a\x6d\
+\x00\xb9\x59\xcc\x82\xef\xf9\x6a\x16\x8c\xeb\xba\x5a\x2e\xe0\x9f\
+\x73\x51\xc3\x66\x19\xd8\xe6\xa2\x00\x1e\xf0\x5b\x22\xb4\x4c\xb0\
+\x9c\x93\x1a\xd6\x2e\xf2\xf3\x62\xb3\xb8\x5c\x2c\xf1\x8b\xbb\x5c\
+\xe6\xef\x42\x46\x7a\xb7\xfe\x9c\x17\xf3\xe5\xfa\xbe\xbe\xef\x8b\
+\xc1\x6d\xb6\xbd\xf6\x68\xd0\xf8\x8a\xc0\xdb\x68\x51\xc1\x23\x9b\
+\xc2\x5f\x87\x7a\xf8\x10\xf8\xf8\x3e\xbd\x01\xfa\xcf\x64\xcc\x28\
+\x50\x1b\x62\x44\x2c\xa1\x45\x46\x32\x84\x9b\xe4\x63\x0f\xdc\x83\
+\x72\x88\xef\x95\x24\x82\xc6\x81\xd0\x83\x56\xe0\x7d\x43\xb8\x2b\
+\x00\x6c\x20\x92\x27\x46\x25\x14\xc3\x2f\x43\x85\x1a\x31\x06\xec\
+\x62\x88\x96\x35\x8c\x9b\x91\x31\x29\xbe\xdb\xe3\x12\x1e\x6f\xa1\
+\x63\x90\x06\xa9\x19\x27\x2c\x19\x43\x40\xab\xa4\x14\xdc\x9b\x95\
+\xea\x99\xeb\x97\xe4\x19\x9c\xba\x5b\xae\xff\xca\xa9\xcf\xe6\xd4\
+\x67\xd2\x80\xd3\x57\x1a\x0c\xa4\x41\x57\xc8\x1b\x53\xd0\x11\xf2\
+\x28\xdc\x83\x7a\x42\x1e\x03\x62\x0f\x9a\x80\x21\x63\x4a\x7a\x42\
+\x3e\xc6\xf4\x3f\x34\x61\xd2\x93\x72\x0f\xe8\x8b\xb9\x07\xf6\xe5\
+\x9c\x6a\x21\x53\x46\xa5\x0e\xe4\x3c\x3a\xdd\x40\xce\x5b\x55\x17\
+\x98\xb6\x5e\x25\xd9\xe6\xb6\xaf\x4a\x1f\xe2\xca\x77\x1e\xf6\x19\
+\xf9\x83\x8e\x45\xc7\x8f\xf8\x9b\x17\xdd\xd5\x3e\x07\x6d\xc2\x34\
+\xcf\xa8\x57\x83\x86\xef\xa3\xfa\xa4\xc2\xd5\x91\x75\xc5\xa2\xc9\
+\xf6\xf7\x8a\x47\x4f\x4f\xea\x6d\x47\x66\x9a\x9e\x06\xc9\x4e\x00\
+\xf5\xb9\xbf\xdb\x8d\xcf\xef\xdd\x7b\xbb\xab\x78\x9e\x30\xee\x91\
+\x9e\x4b\x08\xe2\x3e\xf5\x0b\x4f\xed\xf4\x60\x6e\xaa\xcd\xe7\x54\
+\x5e\x12\x17\x29\xe6\x55\xbd\x7c\x6b\xe3\x5a\x91\xd4\x32\x22\x6c\
+\x9b\x00\x7c\x70\xc9\x1e\xc2\xa5\x64\x2d\x53\xba\xe2\x44\x57\x41\
+\xe6\x15\xb8\x15\x98\xdf\x48\xa9\x00\x99\xf0\x37\x50\x0d\x63\x0f\
+\xb7\xdc\xd3\x70\x82\x32\xaf\x9c\x10\xe5\x04\xe5\x95\x22\xd7\x9c\
+\x80\x1b\x92\xa4\xf1\x72\xaa\x35\x27\x70\x4c\x27\x2a\x6e\x02\x4e\
+\x00\xdd\x09\x9d\x48\x1e\x70\x82\x48\xa5\xe1\xb6\xcb\x09\xa4\xe2\
+\x04\xaf\xf0\xac\x78\x08\xc0\x0d\x87\x34\x71\x89\x17\x67\xb8\xcb\
+\x65\xb6\xc5\x02\xd1\xb2\x54\x71\x34\xe6\xa9\xb6\xc6\x72\x0c\x32\
+\xde\x86\xd1\x0a\xc3\x42\xf5\xc6\x72\x5f\x85\x2a\xf5\x8a\xfa\x6f\
+\x49\x1a\x26\x74\x6c\x57\xbf\xb7\x3d\x96\xf3\xde\x84\xd4\x8e\x71\
+\x89\x37\xe2\x6e\xfc\x34\xac\x32\xce\x2a\x4d\x0c\x85\x0b\x26\x84\
+\xd5\xec\xad\x1f\x64\xc7\xb3\xdc\x0d\xc1\x43\xa1\x08\x0b\xa2\xfc\
+\x32\x3e\x62\x6d\x78\xc7\x2b\xa4\x24\xc1\x9d\xba\x38\xb3\xb3\x36\
+\xbf\x76\xb0\xdb\xd9\xbc\xb7\xb3\x61\x9b\x37\xdc\x42\xc3\x97\xc6\
+\xf8\x17\x2b\x1c\xf0\x08\xbb\x77\x23\x47\x8d\x20\xb7\x9b\x42\x04\
+\x7b\xc9\x0e\x8c\x46\x0f\x8f\x26\x34\x7e\xfa\x47\x53\x61\xbe\x21\
+\xba\x7d\xc3\xdd\x09\x7d\x4f\x6f\xac\xc6\x3f\x0c\x06\x71\x7e\x12\
+\xe3\xa9\x60\xc6\xbd\x8e\x73\x29\x7b\xb8\x02\x17\xc5\x87\xca\x94\
+\x08\x0e\x50\x7c\x91\x52\xc3\x70\x07\x21\x03\x18\x04\x21\x46\xca\
+\x10\x06\x71\x8c\x4e\x8d\xa1\x9d\x96\x2a\x65\x86\xb5\x3d\x76\x61\
+\xed\xd8\x3e\x14\x64\xca\x2a\x6c\x89\x3d\x96\x30\x62\x53\xe0\xea\
+\x70\xec\x06\xf6\xd1\x9f\x65\x03\xf5\x57\x83\x3d\x76\x61\xf5\xd8\
+\x81\x5b\xd5\x3a\x56\x34\xac\xa8\x3b\x5a\x8a\x24\x39\x42\x8a\xaa\
+\xd2\x59\xc2\x62\x52\xa4\x8f\x94\xa2\x78\x67\x7f\x10\x29\x92\xec\
+\xf7\x94\x22\x29\x7e\x1f\x29\x52\x15\x33\x85\x52\xa4\x2a\x21\xf2\
+\xa5\xc8\x6d\xc3\x75\xb0\x96\x93\x5b\x98\x2f\x45\x5e\xcb\x46\x36\
+\xda\x1e\x3d\x98\x37\xb6\x07\xad\x84\xc8\x97\x22\x59\x89\x86\x3f\
+\x76\x0b\xf3\xa5\xa8\x85\x7a\xab\xa9\x84\x88\x44\xd7\xdd\x2b\x45\
+\x32\xd8\x02\x37\xb9\xda\x1f\x33\xf7\xb9\xff\x58\xf9\xfe\x76\x58\
+\x14\x7c\xc0\xbe\x3a\xca\xd9\xd4\x5a\x88\x9c\x88\x1d\x31\xb8\x84\
+\x38\x8b\x29\x58\x7f\x0b\xe5\x18\xb3\x4b\xc9\x09\xc0\x14\xd3\xe0\
+\xa3\x52\x84\x69\x0d\xd8\x95\x00\x83\xa8\x0d\xae\x7c\xd8\xc7\xc4\
+\xa4\x9a\x11\x23\x0c\xf7\xa0\xa6\xda\x43\xc1\xaa\x1e\x39\xa1\x1e\
+\xcc\x1f\x3b\x80\x0a\x6b\x40\xb6\x5d\x8f\x94\x68\x43\x10\x46\x39\
+\x95\x56\x7b\x63\xb7\xb0\x8f\xde\x2c\xfd\x96\xde\x1a\x85\xb5\x94\
+\xb1\xe8\xba\xa3\x61\x25\xee\xf0\x24\x07\x33\x1c\x7b\xa8\x25\x5f\
+\x84\x5a\x14\x02\x6a\xa5\xa9\x0e\xa9\x85\x6f\xb3\x19\x44\xc8\x3e\
+\xb5\x80\xc3\x99\x01\x25\xe8\x53\xab\x85\xf9\xd4\x6a\xa1\x2d\x0d\
+\xda\x1e\x03\x58\x33\x76\x00\x25\x94\xc3\x00\x1e\xb5\x40\xe2\x4a\
+\x37\xd4\x1f\xbb\x81\xf9\xd4\xf2\x5b\x7a\xab\x81\x1e\xc1\x85\x8b\
+\xae\xbb\x97\x5a\xba\x1b\xe2\x77\x88\xe6\x93\x6c\x37\x80\x02\x8e\
+\x95\x3b\x7e\x2c\xbe\xf6\x5a\xcf\x66\x3d\x7e\x6c\x19\x2f\x41\x0c\
+\x68\x40\x95\x70\xba\x93\x76\xba\xbc\xdb\x6e\x7b\xb2\x4e\x03\xe2\
+\xa5\x76\x62\x84\x6a\x29\xb8\xf1\xea\x4c\x1c\x53\x80\x4d\x97\x04\
+\xb3\x28\x23\x09\xdc\x2d\x98\x56\x2a\xf9\xd9\x83\x0a\x50\x52\x84\
+\x98\xce\x3e\xc0\x12\x5b\x4a\xb7\xb6\x31\x9e\x31\x69\x91\x79\x62\
+\x1c\x36\xb5\x9f\x43\x62\xce\x53\xa1\x10\xa2\x74\xa5\x8d\x57\xdf\
+\x55\x62\x90\x55\xb5\xaf\x80\x41\xc2\x88\xa4\x52\x20\x06\x1b\x28\
+\xbe\x9b\xe1\x86\x31\x13\xc5\xa0\x18\x86\xc1\x4e\xa2\x69\xf0\x5b\
+\xaa\xfa\xa5\x4c\x37\xbb\xf4\xcf\xec\x6a\xb5\x98\x3f\x2e\x56\x57\
+\xc9\x4f\xcb\x6c\x53\x97\xe4\xc4\x13\x58\x7b\x62\xc6\x76\x23\x1c\
+\x81\x0f\x8d\x6f\x84\x2b\x2f\x58\xca\x15\x57\xcc\x34\xb7\x76\x02\
+\x4a\xc9\xfb\x5e\x5b\xf5\x27\x31\xde\xd8\x4b\xfc\x74\x59\x48\xa2\
+\xdd\xd5\xd2\x1e\x95\xf1\xfd\x8a\x39\x0b\xdc\xc3\x43\x8d\xa6\x9c\
+\x9b\xaf\x96\xb5\x08\xf2\x16\xc6\xdf\x19\x52\x65\x2e\x18\x2b\xa7\
+\xef\x17\x80\xd7\xb9\x8b\x58\x55\x70\x59\xdf\xe4\xa0\xbe\x13\x0d\
+\xbe\xb5\x8d\xb4\xae\x52\x15\x20\x3f\x4a\x58\xff\xad\x61\x99\xda\
+\x20\x4a\x72\x4b\x8c\xa7\xa0\x5f\xb9\xe4\xeb\x73\x49\xe4\x7d\xf0\
+\xe9\xb8\x84\xd6\xcd\x5f\xb9\xe4\x4f\xcd\x25\x96\xbc\x28\x97\xf0\
+\x57\x2e\xf9\x26\xb8\x84\xbd\x28\x97\xc8\x57\x2e\xf9\x26\xb8\x44\
+\xbc\x28\x97\xe8\x57\x2e\xf9\x26\xb8\xe4\x45\xbd\x57\x6a\x5f\xb9\
+\xe4\x9b\xe0\x92\x17\xf5\x5e\xd9\xab\xf7\xfa\x2d\x70\x89\x26\x2f\
+\xea\xbd\xb2\x57\xef\xf5\x9b\xe0\x12\x1e\xf1\x5e\x6d\x6a\x71\xee\
+\x32\x56\x50\xdd\xc7\x25\x22\xb5\xf8\xd7\xe5\x92\x5e\xef\x95\x28\
+\xc3\x88\x60\xdc\xbe\xb2\xc9\x9f\x82\x4d\x4e\xe4\x98\xf4\xb0\xc9\
+\xab\x63\xf2\x6d\x70\xc9\x89\x1c\x93\x38\x97\xf0\x57\xc7\xe4\x9b\
+\xe0\x12\x71\x22\xc7\xa4\x87\x4b\x5e\x1d\x93\x6f\x83\x4b\x4e\x94\
+\x56\xeb\xe1\x92\xd7\xb4\xda\xb7\xc1\x25\x91\xb4\x1a\x9e\x4d\x00\
+\x73\xa7\x27\xe0\x92\xfe\xb4\x1a\x51\xc4\x4a\xc9\x06\x70\x49\x5b\
+\x8f\xd1\xbc\x88\x2e\x4b\x8d\xb5\xde\xb7\x6d\x92\xa4\x0a\xba\xd2\
+\x3a\x5a\xf6\x5b\xdd\x82\x95\x5a\xa3\x84\xc4\x42\x12\x18\x94\x4b\
+\x6f\xff\x64\xcf\xee\xb9\xf2\x57\x97\xb2\xc2\xdf\x37\xb7\xb3\x61\
+\x89\x6a\x4a\x19\xb3\xe6\xdd\xd0\xcd\x19\xbb\x1b\x1c\x23\x75\xd1\
+\x9d\x5a\x88\x67\x73\xf6\xcb\x6c\x61\xa2\x35\x9a\x7d\xb9\xd8\xbf\
+\x95\xe9\x70\x41\xff\xb3\xb6\x36\xd5\x65\x17\x42\xe8\xe0\x07\x59\
+\x6a\x92\xc6\x8f\x65\xf2\x1b\x44\x4f\x5d\xf2\x1a\x20\x4f\xb7\x27\
+\x30\xc5\x1a\xb8\x5d\x1c\x96\x73\x66\x02\xb1\x72\x85\x24\x02\x0f\
+\xea\x01\x36\x24\x49\x33\x48\xf2\xd7\xa4\xe9\x2f\x69\x1e\x4c\x48\
+\x42\xe1\x93\xe8\x54\x61\x89\x93\x52\xa3\x81\x0f\xc4\x46\xf8\xe2\
+\x4d\x63\x57\x7a\x68\x2a\x84\x12\x3c\x5e\xd8\x21\xf1\xa7\xef\xc8\
+\x68\x0c\xa4\xb6\x5a\x48\xdc\x65\xe5\x4e\xca\x56\xe6\xed\x91\xfb\
+\x4f\x37\x9b\xe9\x74\x5a\xfd\xf7\x05\xfe\x22\x54\x63\x46\xec\x60\
+\x8c\x1a\x2c\x01\x93\x0a\x4f\xb2\x75\x47\x23\x0b\xdc\xa5\x46\x71\
+\x0b\x99\x11\xdc\x87\x72\x2c\xde\xd4\x10\x2b\x8f\x6c\xaa\x05\xac\
+\x5b\x5a\x0f\xe6\x6a\x3b\x41\xec\xb1\x26\xad\x85\x32\x95\x12\x57\
+\x60\xe6\xf7\xc8\x70\xab\x33\x95\xc6\x1f\xbb\x81\x7d\x4c\xc0\xb2\
+\x52\xa2\x29\x13\x1e\x14\x82\x77\xaa\x8d\xd4\x64\x04\x9e\x37\x13\
+\x46\x2b\x99\x30\x40\x14\x71\xe7\x37\x41\xcc\xc6\x38\x91\x14\x77\
+\xc7\x01\x54\x58\x69\xa9\xc4\x3a\x47\xc6\x35\xb7\x0c\x61\x8a\x71\
+\x26\xb5\x7b\x1a\xc8\xa7\x6d\xc2\x70\x43\x9c\xc6\x5d\xad\x00\x03\
+\x12\xc0\x55\xf2\x73\xc2\x6d\x2a\x18\xe8\x10\x32\x12\x48\x1b\x6d\
+\x04\xae\xc7\xd1\x1c\xec\xb0\xdb\x1c\x2e\x8d\xa5\x5a\x26\x78\x45\
+\x8c\x85\x35\xc2\x95\x80\xa5\x11\x95\xe0\x66\x3a\x43\x38\x75\x4f\
+\x43\x37\xdc\x58\x7c\x1a\xf7\xda\x51\xc5\xcd\x08\x7a\xb7\x86\x5a\
+\x4d\x11\x06\xd3\x65\xb8\x72\x93\x52\x06\x5c\xa4\xf1\x69\xa6\x61\
+\x91\x1c\x59\x91\x48\x25\xad\xc5\x19\xb1\x94\x53\xae\xa1\x25\xac\
+\x42\x32\x4b\x0d\xe2\x08\xe6\xac\x04\x63\xc2\x61\xd8\x0a\x69\x09\
+\xd0\x82\xa4\x86\xc1\x94\x28\xc2\xb4\xe6\x8c\x3a\x18\x01\xa3\xce\
+\x1d\xcc\x00\xdb\x2a\x55\x3e\x6d\xad\x60\x08\x15\x29\x07\x27\x58\
+\x88\x04\x7c\x55\xae\xf1\x04\xbf\x11\xc3\x23\xb3\xb4\x52\xdc\x83\
+\x05\xd4\x6d\xa0\x2d\x1f\xe0\x88\x4a\x29\xeb\xf3\x4b\x8c\xb3\xbe\
+\x24\x8e\xe3\x24\xb0\xbd\x14\x23\x18\x5c\xe1\xc1\x5b\x8e\x6e\x2a\
+\xa5\x96\x0a\xca\x3d\x28\xcc\x13\x38\x46\x33\x0b\x23\xe1\x51\xdc\
+\xb0\x00\x0f\x86\x15\x8b\x0a\x5c\x24\x5e\xae\xa8\x82\x42\x3f\x9c\
+\x2b\xc5\x54\x52\xf2\x1e\xe1\xae\x86\xd6\x4a\x90\x62\xe3\x8d\xdd\
+\xc2\x3e\x62\xa9\x1e\x13\x96\x10\xe9\x41\x25\x30\x0a\xe8\x30\xa2\
+\x46\xc0\x7b\xa0\xed\xa8\x55\x1e\xcc\x1f\xbb\x85\xda\x54\x69\xc0\
+\xa6\xa2\xd8\x23\x96\x74\x52\xdb\xac\x86\x44\xd7\xbd\x6f\xc3\x74\
+\xab\xb2\x63\x4e\xdc\x6c\x8a\x9f\xa3\x2d\x5d\xe4\x4c\x00\x3c\x6b\
+\xae\xb3\xf5\x0c\xe3\x16\x69\xc0\xa7\x79\xb5\x7e\xc3\x37\x57\xbf\
+\x08\xbd\xfa\x3d\x13\xf1\x4a\x9b\x9d\x4d\xd7\xa8\x72\x08\xb3\x28\
+\xc8\x20\x7f\xb8\xfb\x93\x56\xc6\x0c\xb4\x9c\xf2\xa1\x60\xa2\x28\
+\xa8\x3d\x62\x50\x89\x11\xcd\xb5\xf5\x61\xa8\xee\x34\x58\x7d\x5b\
+\x1a\xb3\x0a\x8a\x0a\x85\x1b\x54\x77\x5e\x8f\x0c\x1d\x60\x66\xb8\
+\x3f\x76\x03\x73\xc6\x8c\x58\xd0\x95\xc6\x83\x3a\x63\x06\xc6\x83\
+\x39\x73\xa4\x95\xa0\xaa\x34\x66\xd2\x2a\x57\x60\xcf\x9c\xb9\xa8\
+\x8d\x99\xb5\xd4\xa9\x30\xa6\xc0\x4d\x17\xa5\x31\xd3\x4a\x97\x4f\
+\x5b\x2e\x8d\x74\xc6\x0c\x7c\x6f\xa1\x71\x14\xc2\x88\x30\xa2\x32\
+\x66\xe0\xa8\x68\xee\x8c\x99\x36\xca\xd2\xd2\x98\x81\xd9\x14\xd5\
+\x49\x27\x92\x0b\x98\x11\x1a\x33\x54\x67\xd2\x19\x38\xb0\x4b\xa0\
+\xc2\xc0\x1c\x29\xae\x38\xa8\x35\x34\x66\x5a\x32\xa7\xfc\xc1\x70\
+\x81\x43\x4e\xac\x1e\x41\x3f\x84\x83\xb9\x62\xce\x98\x69\x34\xf3\
+\xce\x98\x69\x3c\x6b\x02\x9f\x46\xbf\x49\x53\x34\x66\x94\x70\xc2\
+\x78\x65\xcc\xe0\x0f\x8f\xa2\x00\x63\x86\xa7\x05\xcb\xca\x98\xe1\
+\x41\x94\x0e\xc3\x60\xbb\x15\xd2\x07\x8c\x19\x98\x9b\xd2\xc0\x69\
+\xf4\xb7\x98\x33\x66\xa0\x86\xc1\x40\x62\x3b\x0c\xab\x9c\x39\x82\
+\x15\x83\x05\xd5\xb2\x34\x66\x56\x68\xe6\x4c\x14\xe8\x71\x34\x9a\
+\x68\xcc\xf0\x57\x24\x3c\x58\x40\xdd\x06\xda\xf2\x81\x33\x66\x86\
+\x0b\x9f\x5f\x62\x9c\x55\x1b\x33\x30\x32\xb0\x22\x05\x04\x82\xf9\
+\x0a\x47\x75\x91\x1a\x88\x4e\x41\xd5\xd7\x50\xa0\x11\xbe\xca\x40\
+\xcf\x71\x04\xc6\x81\x03\xd1\x79\x00\xc3\xf2\x7b\x59\x3d\xdd\x40\
+\x19\xb8\x9f\x4c\x71\x18\xab\xed\x11\x13\xd4\xac\x34\x32\xcd\xd8\
+\x2d\x0c\x0f\xf1\x00\x63\x26\x2d\xb8\x1b\x2d\x14\x7f\x1e\xd2\x30\
+\xc0\x82\xd7\x63\x0b\xf3\xc7\xae\xa1\xc6\x9b\x65\xdb\x63\xbb\xc6\
+\xd8\xba\xa3\x1b\x02\x84\xe0\x87\x77\x6f\x0c\x52\xa1\x51\xd3\xb5\
+\x7b\x40\xc5\x6b\xb4\x77\x5a\x9d\xca\xf1\x17\x18\x35\xd8\x9b\x52\
+\x8b\x80\x27\x8a\x1b\xb4\x38\xf2\x96\xe1\xb8\x9d\xc8\xa6\x9c\x08\
+\x49\x38\x6a\x16\xf4\xa3\x39\xe8\x01\xe7\x0e\x32\x65\x50\x0f\x10\
+\x4b\x09\xba\xde\x28\xc7\x96\x3b\x89\x8f\x41\x9d\x6e\x20\xd0\xbb\
+\xd3\x0d\x9c\x82\x16\x8b\xc2\x9c\x7c\x70\x03\x6e\xb8\x73\x89\x85\
+\x16\xc2\x1a\xd4\x80\xc0\xe8\xe0\x1c\x23\xd7\xe3\x19\x15\x8c\x24\
+\xee\x70\x0c\x5e\x9e\x91\x83\x5b\x91\x40\xaf\x95\x5a\x71\x67\x3d\
+\x7d\x9c\x3b\xe4\x3c\x8b\xe9\x80\x38\x6d\x40\xa6\x63\x2f\xeb\x0f\
+\x3b\x66\x60\x88\xab\xc7\xf9\xce\x29\x03\x8c\x40\x74\x2a\x5e\x59\
+\xbf\x27\xd1\x11\xec\x9e\x0d\x12\x1d\xbb\x87\xdd\x76\x12\x1d\xe5\
+\xde\x2d\xc6\xa3\x0d\x5c\xa2\x03\x7f\x3d\xca\xc8\x20\x2a\x0f\x12\
+\x1d\xb1\x06\xe5\x86\x4f\x83\x09\x5b\x70\x42\x92\x66\x10\xcc\x5b\
+\xd4\xcd\xbd\xab\x2a\x6f\xa1\x20\xdc\x65\x60\xec\xf5\x68\xe0\x03\
+\xb1\x11\x0e\x25\x3a\x98\x0b\xa9\xe3\x47\x2d\x97\xb7\xc6\xb8\x61\
+\x53\xa2\x07\x30\x56\xe8\x2b\x10\x60\xc8\x83\x49\x6c\xef\xf8\x22\
+\x4c\x07\x48\x62\x4f\x26\x24\x3d\xbb\xa0\xf0\xf4\x29\xc9\xed\xab\
+\x4c\xc4\x72\xdd\xa0\x70\x65\x24\xd5\x6d\x91\x81\x44\x50\x45\xd1\
+\x9c\xcf\x92\x82\x03\x2d\xb4\xe1\x61\xaa\x1b\x0c\x06\xd7\xe0\x9e\
+\xe9\x30\xd5\x8d\x87\x6d\x10\xa3\x88\x14\x9d\x5c\x37\x9e\xac\x0d\
+\x36\x80\xa9\x4e\xaa\x9b\x81\xaf\xa8\xb9\xe5\x64\x2f\x7b\xe2\xa6\
+\x38\x66\x0d\xfe\xec\x8f\xc2\x34\x8d\x1e\x8d\xf1\x90\x0e\x63\x09\
+\x03\x90\x56\x04\x9c\xc2\x5d\xd6\x1d\x92\x86\xdb\xa3\xde\x87\x66\
+\xad\xf9\x13\xb2\xd6\x6f\xc0\x34\x96\x3f\x55\x19\xba\x32\x5a\x48\
+\x65\xe5\x1f\x8e\x77\x9f\xc3\xa5\x71\xcd\x1c\xcd\x0f\xd7\x9a\x19\
+\x7f\xcf\x89\xee\xd1\xcc\xc0\x8e\xcc\xf6\xa6\xa0\xdb\x03\xba\x7b\
+\x34\x73\xac\x41\xa9\x99\x65\x6a\x2c\x04\x41\x2a\x69\x06\x01\x45\
+\xdb\x34\xf7\xae\x2a\x45\x8b\x9b\x7e\x09\xf8\x21\x64\x34\xf0\x81\
+\xd8\x08\x87\x34\x33\x07\xc6\xa7\x22\xaa\x99\xab\x5b\xa0\x8f\x19\
+\x78\xf1\xdc\xfd\xf6\x02\xc8\x89\x95\x7b\x53\xd0\x5d\xcd\x0c\xf1\
+\x12\x3c\x2e\x87\xbf\xa7\xe1\x3b\xc7\xfb\xbd\x7a\xee\x27\xcf\x86\
+\x60\x85\x2e\x44\xf5\x3a\xc5\x57\x1c\xd6\xe5\x14\x20\x9a\xb3\xc2\
+\x72\xe6\x43\x4d\xaa\x39\xfe\x76\x0d\xc5\xa8\x4f\x51\xae\x1c\xdb\
+\x35\x30\x85\xbf\xc5\xc1\xdc\xe1\x73\x1e\x14\xf8\x12\x8f\x73\x57\
+\xb8\xb5\x5c\x32\xa5\xa5\xdb\xc0\xae\x89\x25\x10\xff\xc3\x85\xb6\
+\x52\xe0\x9e\x55\x7c\xb3\x41\xa9\x10\x65\xa2\x95\x70\x0a\xce\x04\
+\xc6\xe5\x02\xc2\x72\xa9\x71\x3e\x5c\xe1\xd9\x41\x08\xd3\x02\x7f\
+\x0c\x32\xa1\xdc\xfd\xe0\x3c\xf1\x61\x1f\xf1\xa8\x08\x0b\x42\xaf\
+\x98\x07\xc5\xb8\x58\x73\x10\x76\x37\x4b\x23\x29\x78\xf3\x0c\x8f\
+\x2a\x11\x98\x4a\x06\xc2\x18\x62\x95\x35\xe5\x61\x18\xe8\x00\x09\
+\x3b\x82\x35\x60\xce\x05\xa2\x13\xac\x2f\x16\x98\xc9\xf1\x70\x11\
+\xc3\x5a\x4f\x7c\xa0\x58\xf7\xcd\xaa\xfb\xe7\x3d\x1e\xdd\xfd\xe1\
+\xbb\xff\x07\xd4\xd4\xea\xb0\
+\x00\x00\x0e\x1b\
+\x00\
+\x00\x43\xfe\x78\x9c\xed\x1c\x6b\x73\xdb\x36\xf2\x7b\x7e\x85\x4e\
+\xf9\xd2\xcc\x99\x24\xde\x00\x95\xd8\x9d\x5e\x32\xed\xf4\xa6\x77\
+\x37\xd3\xb4\x73\x1f\x33\x34\x45\xc9\x6c\x28\x52\x43\x52\x7e\xe4\
+\xd7\xdf\x82\x4f\x80\x82\x64\xc9\x76\xd3\xde\x4c\xa5\x49\x4c\x2e\
+\x16\xbb\xc0\x3e\x80\xdd\x05\xec\x77\xdf\xde\x6f\xb2\xd9\x6d\x52\
+\x56\x69\x91\x5f\xce\xb1\x8f\xe6\xb3\x24\x8f\x8b\x65\x9a\xaf\x2f\
+\xe7\xbf\xfe\xf2\xbd\xa7\xe6\xb3\xaa\x8e\xf2\x65\x94\x15\x79\x72\
+\x39\xcf\x8b\xf9\xb7\x57\xaf\xde\xfd\xcd\xf3\x66\xef\xcb\x24\xaa\
+\x93\xe5\xec\x2e\xad\x6f\x66\x3f\xe6\x9f\xab\x38\xda\x26\xb3\x6f\
+\x6e\xea\x7a\xbb\x08\x82\xbb\xbb\x3b\x3f\xed\x80\x7e\x51\xae\x83\
+\x37\x33\xcf\x83\x9e\xd5\xed\xfa\xd5\x6c\x36\x03\xb6\x79\xb5\x58\
+\xc6\x97\xf3\x0e\x7f\xbb\x2b\xb3\x06\x6f\x19\x07\x49\x96\x6c\x92\
+\xbc\xae\x02\xec\xe3\x60\x3e\xa2\xc7\x23\x7a\xac\x99\xa7\xb7\x49\
+\x5c\x6c\x36\x45\x5e\x35\x3d\xf3\xea\xb5\x81\x5c\x2e\x57\x03\xb6\
+\x1e\xcc\x1d\x6d\x90\x70\x18\x86\x01\x22\x01\x21\x1e\x60\x78\xd5\
+\x43\x5e\x47\xf7\x9e\xdd\x15\xc6\xe8\xea\x4a\x10\x42\x01\xb4\x8d\
+\x98\xa7\x61\x2d\xee\x33\x90\xc4\xc1\xc1\x34\xad\x26\x77\x90\xfe\
+\x16\xfe\x0d\x1d\x7a\x80\x5f\x15\xbb\x32\x4e\x56\xd0\x33\xf1\xf3\
+\xa4\x0e\x3e\xfc\xf2\x61\x68\xf4\x90\xbf\xac\x97\x06\x99\x5e\xf8\
+\x16\x5f\x4b\x23\x79\xb4\x49\xaa\x6d\x14\x27\x55\xd0\xc3\x9b\xfe\
+\x77\xe9\xb2\xbe\xb9\x9c\x33\xe5\xa3\xe6\xb3\xbd\x6f\xc0\x37\x49\
+\xba\xbe\xa9\xf7\xe1\xe9\xf2\x72\x0e\xf3\x25\x2c\x6c\x5e\xfb\x01\
+\x2d\x06\xab\x42\x3e\x25\x2d\x66\xc7\xc5\x6c\x62\xc2\xee\xb5\x2c\
+\xe2\xeb\xa8\x82\x51\x07\x37\xc5\x26\x09\x7e\x4b\x37\x9b\x28\x0e\
+\xaa\x32\x0e\xe2\xdb\x2a\x00\x4b\x5c\x17\x5e\x1a\x17\xb9\x57\xdf\
+\x80\x91\x04\x40\x2f\x8b\xae\xb3\x24\x88\xe2\x1a\x28\x56\x7b\xc4\
+\xf4\x24\x2f\xe7\xf0\xb0\xd3\x26\xe5\xe5\xc9\x9d\xdf\x2b\x67\x18\
+\x4e\x72\xbf\x2d\xca\xda\x5b\xa5\x59\xd2\xa2\x5b\xbc\xd7\xab\xfb\
+\x20\x2f\x6e\x93\x2c\x0b\xb6\x4b\x90\x55\x5d\xee\xf2\xcf\x01\x50\
+\xac\x82\x7f\xfc\xf8\xc3\x26\xdd\x24\x5e\x9d\xdc\xd7\xfe\x36\x77\
+\x93\xbd\x5f\x6e\x41\x97\x84\xa1\x56\x6c\x4e\x9c\x87\x63\x38\xc5\
+\xae\xde\xee\xea\x4f\xc0\x23\xc9\x5b\xb1\x81\xf6\x0c\x55\x36\xcd\
+\x7a\x56\x03\x6c\x7e\x05\x04\xde\x2d\x93\x55\xa5\x09\xb5\x2a\xd2\
+\x6f\xb4\x69\x80\xa6\x81\xf6\x16\x34\xb1\x4d\x62\xed\x4a\x2d\xaa\
+\x21\xbd\xfa\x41\x5b\x8f\x8d\x4a\x5b\x13\x9b\x59\xda\xdc\x7e\xba\
+\x07\x55\xce\x16\x33\xc2\xe0\x3f\xec\xc4\x78\x68\x31\x30\xcc\x0e\
+\x7e\x20\x27\xce\x17\x6d\x5c\x47\xc8\x74\x23\xf0\x8a\x32\x5d\xa7\
+\xb9\x96\x97\xc6\x13\x36\x32\x4c\xd5\x98\x94\x08\xe7\xb3\xa0\x9b\
+\x74\x19\x2d\xd3\x28\xfb\x41\xff\x00\x53\xd8\xa3\x1e\x17\x59\x06\
+\x9d\x2e\xe7\x51\x76\x17\x3d\x54\x03\xc5\xc6\x3f\x17\x37\x65\x02\
+\xeb\xc9\x6b\x78\x4e\xa2\xb2\xa7\xc1\x91\x40\x16\x67\x9b\x05\x47\
+\x74\x1c\xd8\xba\x03\xfe\x9a\xa7\x35\x2c\x1c\xbb\x2a\x29\x3f\x6a\
+\xe7\xfb\x4f\xfe\x6b\x95\xec\x61\xfd\x52\x46\x79\x05\x9e\xbe\xb9\
+\x9c\x6f\xa2\xba\x4c\xef\xbf\xf1\x88\x2f\x25\xa3\x2a\xbc\x40\xf0\
+\xc5\x7e\x28\x42\x89\xc4\x05\xc6\x00\x17\x84\x5e\x78\x4a\x12\x5f\
+\x29\xce\xde\x0c\xc4\x62\x50\x8b\x40\xdc\x97\x98\x91\x70\x84\x3e\
+\x68\x31\x0b\x5f\x30\xa9\x46\xe8\xca\x89\xbb\x72\xe2\x96\xb0\x53\
+\x60\xe9\x03\xa6\x12\xa3\x78\x6d\xd1\x9c\x2c\x5e\x2d\x36\x87\x54\
+\xaf\xba\xf6\x77\x55\x5d\x6c\x7b\x5c\x30\xce\xfa\x21\x03\xa3\xd4\
+\x40\x0f\x28\x16\xe5\xe2\x3a\x8b\xe2\xcf\x6f\x1b\x40\x01\xf2\x4c\
+\xeb\x87\x05\x7e\x3b\x1f\x7b\x14\xab\x55\x95\x00\x5b\x64\xc0\x9a\
+\x25\x0b\x7a\x00\x27\x32\x4c\xe0\x69\xbc\x90\x8b\x17\x76\xf3\x62\
+\xa3\xb0\x02\x7b\xca\x7f\x9c\x85\x1a\xca\x7e\xae\x85\xba\x0d\xd4\
+\xc3\x2a\xc4\xbe\xa0\x7f\x5e\x0b\x75\x18\x20\x53\xcf\x32\x40\xa7\
+\x51\xb8\x0d\x90\xa3\xc3\x06\x68\x60\x09\x17\x41\x9f\xcf\xcf\xf7\
+\x8c\xaf\x66\xee\x9c\x3c\x66\xee\x4f\x5c\x31\x8e\x9a\x3b\x68\xee\
+\x98\x62\x89\xfc\x0a\xe6\x4e\x7c\x2c\x43\x97\xb9\xdf\xe3\xcb\x39\
+\x45\x00\xe5\x12\x8f\xba\x7b\xd0\x50\x31\x35\xe1\x7b\xe2\xc4\x25\
+\xda\x09\x42\x5f\x1b\x8e\xfc\x1d\xd6\x5e\xc6\x19\x39\xdd\xf4\x5f\
+\xb7\x81\xe0\x13\x57\x5f\xe0\xc5\xce\x31\x47\x27\xb7\x93\x0d\x12\
+\xb8\x89\xaf\xbf\xfe\x36\xf2\x3c\xbc\xfe\x42\xb3\xb2\x16\x43\xc2\
+\x7c\x8a\x84\x0c\xb9\xbd\x18\x12\x1f\x49\x19\x2a\x6b\x2d\xdc\x47\
+\x5d\xb9\x50\xf5\x52\xc8\x7d\x45\x30\xc7\xec\x04\xab\xc6\x5d\x70\
+\x7f\x81\x1c\x0f\x44\xb1\x10\x83\x8d\x0b\x9f\x42\x20\xc7\x45\xe2\
+\xc1\x1b\x05\x04\xb0\x79\xf5\xe6\x44\xcf\x3a\x7b\x39\xc6\x5c\x88\
+\x73\x8c\x72\xd5\x7c\x26\x46\xd9\x4d\xc2\xbd\x32\xf7\x8d\x0e\xb3\
+\xd1\xcc\xcf\xb3\xd2\x95\xd2\xdf\x33\xd8\xe3\x47\xd8\x3f\xd1\x6c\
+\x4f\x5b\xdf\xb4\xcd\x08\xe6\x73\x30\x24\xdb\xba\x90\x0f\x4a\xc5\
+\xa6\x19\x71\x9f\x70\x69\xd9\xe5\xb4\x63\xec\xe8\xa8\x67\x12\xa5\
+\xeb\x72\x49\x0f\xa9\x70\x9c\x2b\x97\xf4\xe8\x8e\xf6\xfa\x7b\xa4\
+\xbf\xce\xf5\xe5\xd1\x5d\x54\x93\x3f\xbe\x61\xbe\x0e\x23\xfd\x7d\
+\x92\xea\x46\x15\xd9\xda\x78\x21\x15\x61\xac\x45\xad\xd8\x29\x3a\
+\x12\x96\x8e\xf6\x7a\x1e\x55\xd2\x41\x3f\x33\xa4\x28\xc4\xef\xaa\
+\x24\xa1\xfe\x28\x25\x9d\xba\x20\x11\xc8\x2a\x4f\x5f\x0f\x22\xaa\
+\xbf\x2f\xb4\x1c\x11\x79\x44\x88\x0e\xe6\x2c\xd6\xdf\x17\x5a\x8c\
+\x88\xc4\x4f\x0c\xe9\xf6\x45\xc8\xcf\x11\xe1\x2a\xd2\xdf\x97\x12\
+\xa1\x38\x4f\x84\xd7\xcd\xe7\xa5\x44\x28\x5e\x4c\x84\x98\x70\xfc\
+\xc7\x6d\x8b\xc0\x9c\x9e\xb7\x2d\xae\x56\x9c\x4c\x83\x37\x58\x85\
+\x30\x04\x0f\x48\xb9\xf9\xf3\xe3\x03\x90\xe7\x0e\x80\xee\x45\x8f\
+\x4f\xde\x97\x89\x0e\xa7\xbe\x7a\x38\xd9\xea\xfc\x70\x3c\x49\xe4\
+\xb8\x78\x9e\xb6\xb9\xe8\xdd\x80\x73\x7f\x32\xd1\x66\xe3\x20\xdc\
+\xb7\xa1\x2b\x27\xee\xca\x89\xab\xc3\x4e\x08\x50\x25\xb7\xd6\x5d\
+\xb7\x44\x00\x97\x4a\x5f\x82\x42\x31\xb5\xc8\x52\x00\x0a\x4c\x14\
+\xb7\x86\xa0\x20\x9a\x65\x0c\x87\xf6\x70\xf7\x71\x63\x27\xee\xe1\
+\xd0\x17\x41\x0e\xa7\x88\xa4\x8e\xd0\x17\x4c\x81\x12\x29\xe4\x05\
+\xf5\x29\xa7\x9c\x6b\x1c\xc1\x04\x63\xf2\xd4\xa8\xf7\xb0\xce\x20\
+\xc4\x33\xb6\xec\x23\xca\xd7\xdb\xce\xa3\x46\xf4\xb8\xa8\x95\xf0\
+\x25\x52\x8c\xdb\x1a\xa4\xdc\x97\x54\x40\x74\x6f\x89\x9a\x52\x90\
+\x89\xb0\x42\x3c\x27\x6e\xec\xc4\x75\x88\x5a\xd7\xeb\x93\x46\xd2\
+\x88\x85\x54\xcb\x95\x61\x4c\xc9\xcb\x48\x51\x9d\x24\x45\xfe\x22\
+\x52\xa4\xca\xc7\x5c\x89\x49\xf6\x25\x7d\x22\x20\x89\x17\x72\x62\
+\xb0\x98\x51\x2b\x6e\x8a\x9d\xb8\xb1\x13\xf7\xcf\x68\xb0\xe2\x24\
+\x51\xb7\x89\xdb\x73\x85\x7d\xde\x7a\xd9\x45\xb1\x47\x96\x48\xa2\
+\xe8\x99\x22\x38\xa6\x01\x42\x42\x89\x5c\x1a\x18\x9a\x98\x2f\x30\
+\xe5\x24\x04\x55\x84\x90\x98\x23\x65\x97\x3f\xa7\xa1\xb8\x33\x66\
+\x77\x45\xfb\xce\xb4\x60\x48\x01\x5e\x5e\xa8\xf4\xb8\x50\xf9\x9f\
+\x5d\xa8\xa7\x64\xb9\xae\x6c\x78\xc8\x7c\x5b\x91\xbe\x0b\xf4\x49\
+\x5a\xf3\x34\x9c\x94\xe9\x53\xc3\xe5\x6d\x9a\xdc\xbd\x1a\xe4\xa3\
+\x0f\x31\x3b\x12\xdb\x68\x9d\x34\x31\x08\x48\xb2\x0d\xc2\xba\x86\
+\xeb\xa2\x5c\x26\x65\xdf\x24\x9a\x8f\xd5\xd4\x85\x29\xed\x11\x6a\
+\x08\x2b\xa5\xec\xdb\xc7\x33\x31\x20\x6e\xa0\x21\x57\x7b\x75\x13\
+\x2d\x8b\x3b\x98\xed\xb4\xf1\x4b\x51\x6c\xc6\x6a\xd9\x68\x13\x20\
+\x19\x0f\x53\x10\x36\x23\x7c\xaf\x11\xf8\x78\xc2\x67\x4c\x21\xa6\
+\xe4\x5e\xeb\xae\x2c\xf5\x39\x6b\x16\x3d\x24\x30\xa9\xe6\x47\x3f\
+\xe6\xea\xa6\xb8\x5b\x97\x5a\x38\xab\x28\x1b\xa4\x33\x74\xd5\x4d\
+\xde\xf5\x75\x01\xcc\xeb\x72\xb7\xd7\x3c\x1c\xe1\xee\x5a\xb3\xea\
+\x4e\x9f\x0d\x8c\xbb\x34\x87\x69\x7a\xdd\xf1\xb5\x92\x7b\xd3\xed\
+\x10\xfa\x83\x6c\xa1\xd4\x01\x0c\x18\x02\x16\x7b\xa2\xee\x1a\xb5\
+\xdb\xf1\x3d\x99\xe9\xc9\x99\xb2\x6e\xa7\xd8\x99\xcc\x26\xa9\xa3\
+\x65\x54\x47\xa3\x79\xf4\x10\xd6\x9f\xc8\x96\xcb\xd5\xe2\xe7\x0f\
+\xdf\x0f\xe1\x6c\x1c\x2f\xfe\x5b\x94\x9f\xc7\xc8\x53\x23\x44\xd7\
+\xc5\x0e\x06\x3e\x04\xfd\xfa\x90\x37\x5e\x68\xe7\x89\xea\xab\x74\
+\x03\xec\xf5\xcd\x83\xbf\xdf\x6f\x32\xb0\xd2\xa1\xc1\x42\xd6\x87\
+\xba\x23\xd1\x96\x6c\x99\xb4\x37\x0b\x9c\x97\x31\x96\xf1\x26\xd5\
+\x9d\x82\x8f\x75\x9a\x65\x3f\x6a\x26\x46\xd8\xdd\x11\x4d\xeb\x2c\
+\xb9\xfa\x77\x72\x37\xfb\xd0\x69\xa9\xe1\xdf\x82\x2d\xcc\xe6\xde\
+\x46\x51\x5e\x19\x43\xd0\x53\xfd\x6e\x3d\x44\xcd\xfb\x74\xff\x19\
+\x7d\xde\x5d\xcf\x3e\xd6\x09\x6c\x2e\xa5\x8b\xb0\x76\xca\x7d\x22\
+\x0d\xe6\x1e\x3f\x4d\xb6\x9d\xed\x55\x37\xd9\xf6\x98\xdf\xdf\xec\
+\xaa\x34\xbe\x89\xb2\xcc\x8f\xbf\x34\x5d\x3b\xac\xb1\x27\xb0\xc8\
+\xd2\x38\xc9\xab\xc7\x05\xe8\xba\x9e\xd2\xf5\xad\x40\xba\xd7\xf0\
+\xbc\x2c\x36\x51\x9a\x07\x66\x0a\x13\x74\x4a\x37\x8d\xe0\xa7\x29\
+\x47\xc3\x0e\xce\x67\x66\xcf\x66\x9b\x94\xa0\xdb\xea\x49\xb3\xc9\
+\xab\xd7\x3f\x27\xdb\xb2\x58\xee\x9a\x8b\x17\xb6\x49\x3c\x9f\xf6\
+\x87\xb4\x82\xbd\xe0\x7a\xf7\xbb\xd0\x4e\xca\xf4\xb6\x69\xd0\xc2\
+\xae\xa6\x1a\xe8\x24\x3e\x54\x8a\x46\xc7\x7c\x17\xf4\x6e\xdb\xbc\
+\xad\x27\x4b\x40\x16\x5d\x27\xd9\xe5\xfc\x63\xb3\x02\xcc\x47\x5f\
+\xb7\x16\x41\x63\xb9\x2b\x76\xdb\x4d\xb1\x4c\x3a\x84\x7e\x21\x58\
+\xf7\xd3\xea\x52\xd8\x65\x5a\x6d\x01\x61\x91\xe6\x3a\xb8\xb2\xf6\
+\xe0\x35\x47\x64\x0c\x75\x6a\xc7\x09\x15\x16\x1c\x73\x92\x78\xa4\
+\x3b\xa4\x62\x8a\x4b\x46\xf5\x3b\xa3\xb0\xa7\x4a\x71\xc1\x88\x2f\
+\x14\xa7\xe1\x9b\xb1\x92\x50\x42\x3c\x30\xca\x56\x2f\xf7\x98\x43\
+\xf4\x08\xb1\xa6\x59\x3e\x6d\xf6\x08\xce\x43\xd8\x1a\x89\x59\xb5\
+\x1d\xae\x09\x49\x05\xa1\xa7\xc4\x66\x35\xaf\x5b\x9a\x31\xa5\xa1\
+\x3e\x11\x36\xc9\x35\x31\x05\x30\x66\xd8\x55\x03\x1e\xf3\x75\x86\
+\x08\x12\x58\xf1\xb7\xe6\x11\xe5\x0a\x56\xa6\x05\xac\x59\xdf\xec\
+\x1d\x07\x12\xf9\xa6\x69\x35\x4e\xa7\x9a\xd7\x72\x97\x25\x8b\xbc\
+\xc8\xbf\xc0\x26\xfb\x16\x4c\xad\xf8\xdc\xbc\x26\xdd\x73\xbb\x89\
+\x00\x72\xf7\xaa\xc9\x82\xd6\x16\xa0\xb3\x7c\x69\x02\x7f\x2b\xd2\
+\x7c\x01\xc6\x98\x94\x6f\x37\x51\xf9\x39\x29\x5b\x2a\xed\xb3\x57\
+\xd5\x51\x59\x5b\x90\x4d\xba\xb4\xde\x93\x7c\x69\xf1\x6d\x48\x65\
+\x29\xfc\x58\xb0\x1e\xb6\x8c\x60\x53\x29\x4b\xb0\x01\x13\x53\x43\
+\xdb\x4a\xc5\x02\xf5\xb0\x71\x92\xb7\x69\x95\x5e\xa7\x99\x7e\x69\
+\x1e\xb3\xe4\xad\x6d\x48\x6f\x8b\xdb\xa4\x5c\x65\xc5\x5d\xdf\x6e\
+\xba\xc1\x36\xaa\x6f\x0c\x1d\x0c\x61\x0e\x58\xab\xde\x0a\x60\xf7\
+\x8d\xe1\x33\xd1\x9e\xee\xc4\x11\x37\xf5\x0d\xd0\x7f\xcd\x3c\x82\
+\x41\xdb\x58\x49\x7d\x38\xaa\x0d\x49\x21\xaa\x66\xef\x0f\xc0\x0d\
+\x28\x24\x30\xbe\xe0\x90\x20\xba\x81\x40\x41\x42\x2a\xcb\x18\x0f\
+\x19\x80\x95\xcf\x39\x52\x62\xa6\x4b\x11\x52\x61\x26\x2e\x08\x44\
+\x77\x10\xa5\x48\xde\xc3\xa8\xba\x50\xca\xd7\x47\x72\x94\x43\xf7\
+\x11\xea\x81\x37\x70\x49\x28\x22\x33\x0f\xd2\x58\xc1\x39\xa3\xc6\
+\xa8\xc4\x81\xb1\x7e\x99\x3d\xc3\x52\xf7\x2f\x62\xfc\x65\xa9\xcf\
+\xb6\xd4\x67\xea\x80\xe2\xbf\x74\x70\xa2\x0e\xa6\x4e\x3e\x6c\x05\
+\x13\x27\x77\xc2\x0d\xa8\xe1\xe4\x2e\xa0\xa6\x20\x11\x6c\x64\x44\
+\x70\xc3\xc9\x3d\x1c\x22\x48\x01\x39\xe1\x86\x97\x1b\x40\xd3\xcd\
+\x0d\xb0\xe9\xe7\x58\x32\x48\xeb\x30\x97\x96\x9f\x3b\x87\x6b\xf9\
+\xf9\xb8\xd4\x59\x5b\xdb\xc1\x45\x72\xac\x11\xaf\xdb\x18\x62\x6d\
+\x05\x0f\x7d\x7c\xb0\x97\x50\x74\xd1\xc4\x3f\x22\x57\xa6\x34\x09\
+\x1d\x5e\x99\xd6\x3f\x09\x18\xfa\xfc\xc2\xd8\xd4\x4b\x9d\xc2\xf8\
+\x98\x81\x5c\xd4\x58\x67\x6a\x6a\xa8\x4d\x8d\xc8\x28\xda\xe8\x3b\
+\x57\xbe\x40\x94\x73\x32\xce\x76\xd8\xe2\x91\x1f\x12\xc4\xc2\xb1\
+\xfc\xd0\x6d\xf0\x94\xf9\xaa\xad\xfc\x5a\x25\x03\x18\x02\x86\x50\
+\x63\x4c\xb7\xbb\x11\xdb\xd7\x3b\x0e\xb9\x67\x53\xe1\x9b\xfa\xe7\
+\x50\xbf\x3f\xe8\xa7\x07\x28\x89\x37\x13\xe7\x1d\x28\x9d\xe4\xc4\
+\x16\xd4\x74\xc3\x29\x19\xd3\xf1\xa6\x6d\xfb\xb3\x78\xde\xaa\x70\
+\xc4\x8d\xaf\xb3\x02\x56\xbe\x83\x2b\xa9\x6d\x1e\xfa\x36\x6f\x67\
+\x1e\xc6\x81\x7f\xf9\xe0\x04\xeb\x3b\x27\x3e\x57\x34\x9c\x98\x0d\
+\x78\xb0\x10\x88\xd3\x7d\xb3\xa1\xca\x07\x64\xaa\xf6\xcd\x46\x5f\
+\xa9\xe2\x4a\x49\x87\xd9\x08\xe3\x1e\xe3\x61\xb3\x69\xc4\xf0\x32\
+\x16\x22\xd4\x5f\x16\x62\x5a\xc8\xda\xd4\xc9\x9a\xe8\x83\x68\x47\
+\xe6\xd1\x3c\x66\x51\xad\x6b\xfc\x6d\xbd\xf9\xc2\xa3\xbe\x0c\x55\
+\x48\x75\xda\x61\x64\x19\xeb\x71\xed\xdc\xcf\x5c\x4e\x2b\x01\x86\
+\x42\x22\x85\xe1\x81\x30\x16\x4a\xe3\x10\x61\x30\x91\xc6\x28\xfa\
+\x93\xcf\x73\xed\xe2\xb5\xad\x0b\x97\x0e\x27\xfb\xc2\x1a\x33\x86\
+\xcc\x24\xdb\x5d\x7c\xd5\x9f\xd3\x8a\xa4\xfa\x63\xd6\x79\x91\xdd\
+\x32\x54\x30\x51\x18\x5a\x2d\x7d\x19\x78\x32\x46\xbb\xba\x3c\x69\
+\x39\x48\xcc\x71\x02\xc0\x8c\x5b\x82\xcd\x44\xed\xd3\xd7\xbe\x57\
+\x73\x52\xca\x18\x9b\xdb\x4d\xa7\xdc\x19\xd1\x1f\xd7\xbd\x91\xc7\
+\xb9\x89\xc7\xb9\x31\xa9\xbf\x07\xb8\x61\xbb\xde\xe0\xbc\x2a\xd2\
+\xb4\xd8\xb1\xe7\x18\x19\xc0\x18\x94\x45\xbb\x89\x90\x08\xf5\x19\
+\x51\xcd\xd9\x0c\x86\xdc\x5b\xc2\x13\x04\x27\x26\x94\xfb\x88\x51\
+\x80\x12\xec\xab\x1e\xa6\x6f\x85\x12\x80\x41\xfa\xa1\x38\xb7\x61\
+\x90\xc1\x48\x5f\x29\x3c\xc1\x14\x3e\x51\x64\xa4\x38\x85\x8d\xbc\
+\x4d\x28\xb8\x43\x28\x34\xa6\xa6\xd8\xc2\x50\xe8\x83\x57\xd9\xbc\
+\x07\xd8\x7b\x73\x94\x03\xd4\x9c\x8d\xa6\x38\x85\xf5\xbc\xad\x80\
+\xca\xd0\xd0\x10\x58\xdb\x2a\x78\x29\x2f\xea\x2a\xfb\x88\x9c\xe7\
+\x45\xd2\xe9\x45\x6e\x62\xe7\x79\x11\x47\xa7\x7b\x11\x27\x5f\xd3\
+\x8b\xf8\x09\x3e\xfb\x7b\x7b\x11\x17\xc7\xbc\x48\x74\xc6\x64\x7b\
+\x91\xe8\x9c\xc8\xf4\xa2\xe6\x6a\x75\x03\x1b\x2d\x79\x84\x99\x5e\
+\x64\x60\x0e\xbe\x31\x52\x34\x60\x06\x6f\x03\xda\x39\x91\xe9\x45\
+\xbc\x73\x0d\x93\xf7\x08\x33\xbd\x68\x84\x1a\xb3\xe9\x9c\x08\x39\
+\xe7\x7d\x8e\x17\x75\x69\x87\x43\xe2\x83\xbc\x39\x97\xa6\xe9\x34\
+\xe2\x0e\xfd\x30\x84\x44\x07\x85\x17\x04\x1e\x21\x2d\x22\x02\x06\
+\x3d\x42\xa9\x4e\xb1\x39\xa7\x08\x60\x82\x48\x48\x27\xb0\x86\x49\
+\x09\x22\xe1\x00\x83\x24\x0b\x9e\x4c\xd8\xfb\x99\xf2\x25\x41\x8a\
+\x29\x6a\x40\x55\x77\x4a\x4d\x3a\x8a\x14\x61\x03\x66\xf2\xb6\xa0\
+\x2c\x54\xe0\x69\x0d\x45\x8c\xa4\x42\x1a\x86\x29\xe6\xa1\x34\x78\
+\x8f\xb0\xf7\xc6\x28\x4d\x4c\x63\x8e\x2c\x0c\x31\x21\xce\x79\xbb\
+\xaa\x3d\x87\x72\x15\x7d\xc8\xfc\xe6\xb4\xda\x81\x33\xac\x38\x58\
+\xe1\x30\xb5\x25\x0f\x6b\x0b\x43\xfe\x2b\x24\x96\xb6\xb6\x00\x0a\
+\xeb\x12\x55\xa6\xb6\xc0\x2c\x89\x82\x65\xcc\xd4\xd6\x08\x33\xb5\
+\x35\x42\x47\x1d\x8c\x14\x2d\xd8\xc0\xdb\x82\x22\x4c\x81\x81\xa1\
+\x2d\x70\x93\x36\x46\x34\x79\x0f\x30\x53\x5b\x26\xa6\x31\x1b\xa0\
+\x08\x71\x9f\x73\xde\x67\x6a\x8b\xbf\x84\xb6\x06\x27\xb3\x94\xe6\
+\xae\x0c\x58\x29\x4e\xab\x51\x21\xc7\x25\xbe\xd1\x27\xec\xa1\x1c\
+\xe9\x7a\xc5\x05\x07\xc3\x64\x44\x0a\x31\xfb\xc9\x80\x32\x58\x14\
+\x10\x52\xc6\xb5\x20\x73\xa2\xfb\xb9\x10\xb8\x1b\xdf\x0b\x7a\x93\
+\xdb\x04\x06\xb6\x3c\x10\xf4\xb6\xa9\x0f\xe4\xf9\x0a\x16\x2f\x8a\
+\xf7\x4a\x5c\xd7\xbb\xba\x3e\x50\xe1\x3a\x21\xf5\x31\xae\xe1\x61\
+\xc9\x19\x55\xdc\xb8\x53\xf7\x44\x19\xb2\x89\x0c\x49\x77\x8b\x10\
+\x64\x88\x08\xe2\x98\x33\x2d\xc3\x01\xaa\xcf\x41\xa8\x22\x46\x75\
+\xe3\x05\x64\x38\x5c\xb5\x3c\x25\x7d\x7c\x29\x11\x12\x04\xa6\xaf\
+\x28\x1e\xee\x29\xac\x9d\xa7\x54\x07\x8a\x47\x43\x21\xaa\x97\xdf\
+\xb4\x10\x95\x27\xfd\x99\xd6\xd1\x3a\x93\x53\x6b\xed\x6f\x12\x47\
+\x65\x3c\x15\xf2\x69\x95\x1f\x22\x9f\x50\xf7\x71\xd4\x67\x21\x96\
+\xd3\x7d\xc8\x49\x1a\xf8\xbf\xcc\xdf\xf7\x3d\x82\x70\x6c\xd4\xdb\
+\x7a\x85\xb8\x6f\x7d\x8e\xcd\xce\x2b\x9d\x43\xb3\x2e\x10\x8d\x97\
+\x3b\xf7\x9b\x1f\x5c\xcd\x8d\x37\x8a\xb0\x03\xcf\x06\xf2\xb3\xef\
+\x66\x03\xb2\xf1\x04\xcf\xf0\x9d\x31\x04\x7b\x40\x9b\x7b\x9c\xd6\
+\xc1\xc5\xe1\xcb\x91\x33\x52\xf0\x67\x45\x49\x48\x9c\x95\x86\xae\
+\x49\xff\xbe\x13\x43\x4a\xe9\x5f\x61\x85\x08\x91\x63\x61\x5c\x37\
+\x3a\xf1\xaf\x08\xdc\x83\xf1\x44\xf9\x27\xd0\x74\xa0\xff\x7c\x41\
+\x15\xe4\xd1\xae\x4e\xb3\x5d\x15\x54\x90\xb5\x84\x34\x80\xc8\x3a\
+\xfe\xfc\x09\xbc\xcc\x83\x88\xb2\xff\x5b\x02\x2e\x06\xed\xdf\x13\
+\xa0\x14\xc2\x49\x02\x7b\xef\x41\xbc\x87\x09\x9e\xb1\x2c\xbc\xd3\
+\xd7\x44\xae\x5e\xfd\x0f\x5f\x37\x7f\x93\
+\x00\x00\x09\xd3\
+\x00\
+\x00\x24\x73\x78\x9c\xdd\x59\xeb\x6f\xdb\x38\x12\xff\xde\xbf\x42\
+\xe7\x7e\xe9\xe2\x2c\x8a\x2f\x91\x92\xf3\x58\xec\xb5\xb7\x87\x3d\
+\xf4\x70\x40\x1f\xb8\x8f\x0b\x59\xa2\x6d\x35\xb2\x64\x48\x72\x6c\
+\xe7\xaf\xbf\x21\xf5\x8e\xe4\xc4\xe9\xb6\x5d\x60\x1d\x24\x96\x66\
+\x86\x33\xe4\xcc\xf0\xc7\x19\xe6\xfa\xe7\xe3\x36\xb1\xee\x55\x5e\
+\xc4\x59\x7a\x33\x23\x08\xcf\x2c\x95\x86\x59\x14\xa7\xeb\x9b\xd9\
+\xe7\x4f\xbf\xda\xde\xcc\x2a\xca\x20\x8d\x82\x24\x4b\xd5\xcd\x2c\
+\xcd\x66\x3f\xdf\xbe\xba\xfe\x9b\x6d\x5b\x6f\x73\x15\x94\x2a\xb2\
+\x0e\x71\xb9\xb1\x7e\x4b\xef\x8a\x30\xd8\x29\xeb\xcd\xa6\x2c\x77\
+\x0b\xc7\x39\x1c\x0e\x28\xae\x89\x28\xcb\xd7\xce\x4f\x96\x6d\xc3\
+\xc8\xe2\x7e\xfd\xca\xb2\x2c\x30\x9b\x16\x8b\x28\xbc\x99\xd5\xf2\
+\xbb\x7d\x9e\x18\xb9\x28\x74\x54\xa2\xb6\x2a\x2d\x0b\x87\x20\xe2\
+\xcc\x3a\xf1\xb0\x13\x0f\xb5\xf1\xf8\x5e\x85\xd9\x76\x9b\xa5\x85\
+\x19\x99\x16\xaf\x7b\xc2\x79\xb4\x6a\xa5\xf5\x64\x0e\xcc\x08\x11\
+\xdf\xf7\x1d\x4c\x1d\x4a\x6d\x90\xb0\x8b\x53\x5a\x06\x47\x7b\x38\
+\x14\xe6\x38\x35\x94\x62\x8c\x1d\xe0\x75\x92\x97\x49\x2d\x8e\x09\
+\x78\xe2\xec\x64\x0c\xb7\x6f\x1d\xbc\xbf\x83\xdf\x76\x40\x43\x40\
+\x45\xb6\xcf\x43\xb5\x82\x91\x0a\xa5\xaa\x74\xde\x7d\x7a\xd7\x32\
+\x6d\x8c\xa2\x32\xea\xa9\x69\x9c\x3f\xb0\x3b\x88\x48\x1a\x6c\x55\
+\xb1\x0b\x42\x55\x38\x0d\xdd\x8c\x6f\x5e\x16\xea\xb8\xcb\xf2\xd2\
+\x3e\x45\x3b\x98\x8c\x8f\x11\x36\x9f\x49\x99\xe3\x05\x32\xab\x38\
+\x51\xda\xe6\xcd\xcc\xd9\x64\x5b\xe5\x7c\x89\xb7\xdb\x20\x74\xde\
+\xa9\xe2\xae\xcc\x76\xce\x21\x06\x09\xb4\x4b\x2b\xcf\x1d\xe2\xa8\
+\xdc\xdc\xcc\xb8\xb7\x3b\x9a\xf7\x8d\x8a\xd7\x9b\xb2\x47\x88\xa3\
+\x9b\x19\xb8\x99\x10\x56\x9b\x6b\x3c\xb1\x68\xd3\x19\x23\x46\x87\
+\x33\xe9\xb1\xb8\x18\x8e\x8a\xb2\x70\x19\x14\xed\xe4\xca\x78\xad\
+\xf2\xd2\x09\xef\x0b\x67\x95\x2b\x15\x55\x93\x34\x7e\x83\xed\xb0\
+\xce\xec\x38\xcc\x52\xbb\xdc\x40\xa6\x3a\xa0\x3b\x09\x96\x89\x72\
+\x82\xb0\x04\xed\xc5\x48\x71\xb5\x6a\x15\xc5\xa5\x9d\xab\x28\x43\
+\x4d\x7a\xb4\xf3\xca\xf6\xe5\x6e\x5f\xfe\xae\x8e\xa5\x4a\xab\x09\
+\x82\xa1\x5e\xb4\x0c\x5b\x0f\x6b\x69\xb3\x5b\x50\x70\x1d\xa9\x55\
+\xa1\x15\x55\xee\xd0\x6f\xcc\x30\x80\xd5\xea\xde\xc1\x9a\x77\x2a\
+\xd4\xbb\xa5\x12\xed\xcd\xad\x3c\xe9\x04\x19\x8a\xb2\x2a\x8b\xac\
+\x81\xdf\x76\xbf\x1f\xc1\x69\xd6\xc2\xa2\x1c\xfe\x90\x49\x89\x53\
+\x25\x41\x20\xfe\xf0\x85\x27\x65\x1e\x74\x04\x9f\x50\x53\xcf\xc0\
+\xce\xf2\x78\x1d\x83\x1b\x2a\x39\x31\x14\x86\xa5\xf6\x16\xc5\xc8\
+\xcc\x72\xea\x45\xc3\x56\x52\x41\xfe\xaf\x3c\x88\x62\x00\x90\x91\
+\xf6\x30\x4b\x12\x18\x74\x33\x0b\x92\x43\x70\x2a\x06\x1a\x87\x43\
+\x29\xe5\xb8\xf6\x24\xa8\x2d\x20\xf4\x8d\x2c\x78\xaf\x3c\x25\xe0\
+\x35\x4d\xb4\x41\x63\x96\x2f\x5e\xfb\xfe\x12\xe3\xe5\x95\x21\x65\
+\xb0\xa5\xe2\xf2\xb4\x20\x57\xb3\x6e\x4c\xb6\x5a\x15\x0a\x0c\xe3\
+\x1e\xcd\x64\x30\x8c\x00\x5b\xb4\x5d\xc2\xd7\x5a\xc3\x53\xd6\xc8\
+\xb4\x35\xde\x39\xcc\x19\x2e\xfb\xdb\xbb\x11\x76\xe0\xe5\x0b\x93\
+\x9e\x27\x30\xfe\x6a\x37\x32\xfe\x22\x37\x4e\x59\x7b\x81\x1b\x99\
+\xf8\x61\x6e\xe4\xbe\x4f\x5e\xe0\xc6\x95\xf9\x7c\xa5\x1b\xc1\x16\
+\x7b\x91\x1b\xa7\xac\x5d\xec\x46\xb0\xe6\xfe\x30\x37\x7a\x42\xbc\
+\x24\x1b\xab\xa3\xec\x2b\xdd\x08\xb6\x5e\x96\x8d\x53\xd6\x2e\x76\
+\x23\x58\x7b\x36\x1b\xf5\x5b\x90\xbc\xd8\x8d\xa6\x3c\x59\x6c\x72\
+\x05\xe5\xd4\xeb\x09\x7f\xf6\xdd\x3d\x34\x01\x6c\xaf\x65\x87\x47\
+\x0d\xe6\xc8\x63\x92\x50\xd1\x51\xe1\xcc\x60\x02\x71\x4a\x08\x95\
+\x2d\x75\x35\x29\xbb\x9a\x94\xcd\xc1\x21\x2e\x12\x9c\x4b\xd6\x11\
+\xd7\xf5\x0c\x3e\xe5\x41\x5a\x40\xbd\xb4\xbd\x99\x6d\x83\x32\x8f\
+\x8f\x6f\x48\x5d\xa0\xcc\xf1\xc4\x83\xcb\x84\xa4\x6c\x6e\xbb\xc8\
+\xa3\x2e\xa3\xbe\xb2\x09\x9f\x13\x81\x3c\xc9\xb0\xf8\x69\xa4\xfd\
+\x73\x1a\x97\x50\x02\xee\x0b\x95\x7f\xd4\x65\xd4\x7f\xd3\xcf\x85\
+\x7a\xf6\x2c\x1a\x63\x24\xf1\xe4\xf8\x20\x7c\x1c\x8e\x33\x89\xd4\
+\xc2\x11\xf1\xfc\x67\x32\xf3\x72\xa0\x38\x9b\xb6\x9d\x35\x9f\x3c\
+\x93\x99\x97\x03\xc5\xf7\xd9\xfd\x4f\xa4\xed\xd0\xe1\xa3\x78\x10\
+\x09\x3b\xf7\xb2\x58\x5f\x92\x6f\x1e\x61\x5c\x12\x48\x25\x31\xb7\
+\xa1\x9f\x91\xc4\xa7\x62\xde\x7b\xe8\xf1\x09\x92\x1e\xf5\x30\x99\
+\xbb\x1c\x11\x4c\x08\xe9\x72\xee\x48\xc0\xbd\x12\x61\x81\x3d\xdc\
+\x6d\x89\x93\xa6\x12\xc4\x7c\x17\x77\x1b\xf1\x48\x81\x48\x91\xa0\
+\x9c\xf5\xb6\xc4\xa9\xa2\xba\xb0\xa9\x84\xdf\xf9\xfc\xdb\x83\x82\
+\x39\xab\xce\x83\x02\xb0\xe5\x00\x14\x60\x7f\xb9\x82\x79\xbd\xa9\
+\x6a\x50\x80\x55\x11\x66\xce\xd8\x3e\x28\x8c\x65\x57\x93\xb2\x1a\
+\x14\x7c\x70\x16\x75\x2f\x08\x11\x44\x85\xfa\x18\x30\x45\xd9\x14\
+\x42\x20\x3c\x97\xf8\x52\xc7\x02\x3a\x0b\x4f\x53\x18\x21\x5c\xba\
+\x9a\x0b\xa2\x98\x13\x58\x02\x3c\x61\x44\x88\x2b\xc9\xb7\x82\x85\
+\x3f\x92\xcf\x94\xd1\x27\xf2\x19\xd8\xde\x20\x8f\x18\x1b\x24\x10\
+\x73\x91\x74\x07\xd9\xc3\x08\x72\x07\x89\xc3\x29\x1a\x7b\xf2\x4f\
+\x58\x27\xc7\x4f\xae\x93\x8b\x1f\xbd\xce\x6b\x47\xf7\x5c\xe6\xa9\
+\xed\xa9\x74\xb3\x17\xdd\xc7\xea\x50\x29\x2a\xca\x3c\xbb\x03\x24\
+\xac\xcb\xcd\x5a\x3d\xf4\xc2\x09\xd0\xaa\x4a\x7e\xd6\xb5\x70\xba\
+\x05\xad\x5f\x77\xc1\x5a\x19\xe4\x04\xb9\x0a\x3a\x6b\xc6\x32\xcb\
+\x23\x95\x37\x2c\x61\x3e\x03\x56\x0d\xae\xba\xcb\xa5\x2e\x87\xdc\
+\xf6\x1b\x7e\xd7\x67\x81\xf2\x9e\x18\x9e\xe2\x17\x9b\x20\xca\x0e\
+\x70\x14\x3f\x66\x3e\x64\x19\x6c\x1f\xfe\x98\x6c\x76\x33\x78\x10\
+\x63\x2e\xe5\x88\xa9\x4f\x6f\x06\x67\xad\x87\xc7\xb3\x09\xf7\x79\
+\x0e\x9e\xb6\x93\xe0\xa4\x60\x4d\xe6\xab\x01\x91\x62\x93\x1d\xd6\
+\xb9\xf6\xcd\x2a\x48\x5a\xe7\xb4\x43\x35\xcb\x5e\x2e\x33\xb0\x5d\
+\xe6\xfb\x11\x1b\x9a\xef\xbd\xbe\x4b\xb2\xf7\x55\x14\xeb\xcb\x83\
+\x9e\x84\xd6\xdf\x5f\xed\xa4\x95\x43\x9c\x02\xd3\xae\x2f\x25\x3c\
+\x7f\xe4\x92\x5a\xa0\xb9\xa5\xf0\x88\x77\x46\xe2\xa8\x8b\x98\x73\
+\x4c\xed\x23\xdc\xa4\xd6\x56\x95\x41\x14\x94\x41\x97\x1c\x0d\x85\
+\x37\x3d\x7e\x1e\xad\x16\x1f\xde\xfd\xda\x9e\xd6\x61\xb8\xf8\x5f\
+\x96\xdf\x75\xa7\xb0\x16\x08\x96\xd9\x1e\xa6\xd4\x56\x10\xfa\xda\
+\x20\x5c\x68\x08\x0c\xca\xdb\x78\x0b\x4b\xd7\xd7\x55\x7f\x3f\x6e\
+\x13\xc8\xe6\x96\x31\x10\xd6\xd7\x04\x9d\xd2\x4a\x6d\xae\xaa\xeb\
+\xa8\xc9\x1b\xbc\x28\xdc\xc6\x7a\x90\xf3\xb1\x84\x44\xff\x4d\x1b\
+\xe9\x55\x15\x95\x52\x73\x85\x97\xe5\xb7\x3d\xc5\x7a\x01\xbf\xac\
+\xdb\xb3\x7f\x30\x85\xb8\x4c\xd4\xed\xbf\x83\xbb\xfd\xd2\xfa\x58\
+\x2a\xd8\xf9\xb9\x99\x6e\x45\xef\xeb\x70\xc6\x4a\x8c\xe4\xc8\x9e\
+\x56\x5b\xad\xe1\xb6\x5e\x42\x75\x23\x85\xb6\xfb\x22\x0e\x37\x41\
+\x92\xa0\xf0\xc1\x0c\xad\xa5\xba\x91\x60\x22\x89\x43\x95\x16\xcf\
+\xbb\x65\xea\xa6\xb2\x1e\x5b\x80\xcf\x96\xf0\x1c\x65\xdb\x20\x4e\
+\x9d\x91\x87\xaa\xb5\xfd\x33\x8a\x4b\xeb\x83\x8a\xb2\xa9\xf5\x9a\
+\x35\xec\x97\x5f\x00\x4a\x07\x4e\xd0\x53\xf9\x47\xb0\x7e\xe4\x47\
+\x4d\x4d\xe2\x5b\x7d\x11\x75\xed\xd4\x2f\x93\x12\xb9\x31\xf7\x94\
+\x44\xb0\x86\x29\x3f\xa7\x24\xd8\xed\x92\xd3\x94\x50\x45\x1b\x4c\
+\xb0\x72\xf4\x70\x29\x26\x96\x3a\xa3\xfb\x19\xfe\xfe\xb1\xe3\x7b\
+\x49\xfe\x72\x9f\x0f\x83\xba\x53\x39\x24\x6e\xf1\x55\x41\x4d\x8b\
+\xd7\x1f\xd4\x2e\xcf\xa2\xbd\xb9\x05\x1c\x46\xf3\x8f\xeb\x7e\x17\
+\xc3\x49\x12\x2f\xf7\xdf\x45\xb7\xca\xe3\x7b\xc3\xd0\xce\x2e\xfa\
+\x0d\x80\xd3\x79\xbc\x29\xd3\x7b\xa8\x73\xed\x34\x98\x64\xde\xd6\
+\x1d\x56\x0d\x30\xbc\xc5\xb9\x24\x58\x2a\x38\xf7\xde\x6b\xa6\x35\
+\xe2\xae\xf3\x6c\xbf\xdb\x66\x91\xaa\x87\x37\x30\xb7\x0b\xca\x4d\
+\xb3\xb4\x72\xa2\xc4\xe6\x9e\x2f\x99\x98\x68\xe9\x74\xbd\x06\x95\
+\x9d\xab\x2b\x37\xa8\x88\xa1\xce\x16\x73\xe9\x42\x41\x47\x05\xee\
+\x0a\x37\x98\xed\x7f\x2c\x8e\x41\x0d\xf1\x04\xb3\xda\x1e\xd3\xfa\
+\xc5\x6a\x5b\x4b\xcb\x83\x2a\x5b\x78\x3e\x73\x2d\x6c\x11\xf8\xb1\
+\x7c\x04\x05\x3c\xf3\x3c\x77\x7e\xe1\x80\x29\x0b\x0f\xed\x24\xda\
+\xf2\x21\x87\x43\xa0\x1d\x3b\xc1\x3e\x4e\x35\xbc\x2d\x7b\xba\xa1\
+\xee\xd8\x93\x9d\xb5\xb9\x50\x05\x1f\x43\xc3\xde\x15\x58\x75\x03\
+\xd7\x36\x6a\x88\x70\xa2\x5b\x23\x79\x35\xbc\xb0\xd0\x95\xcc\x02\
+\xa0\xff\xcd\xeb\x71\xf7\xff\x93\xe1\xf6\x5a\x4b\xf3\x9a\xef\x13\
+\xb5\x50\xf7\x2a\xcd\xa2\xe8\xaa\x2a\x8f\x16\x69\x96\xaa\xfa\xb9\
+\x3a\x65\x41\xb8\x7e\xd5\x55\x1e\xa4\xc7\x02\x52\xbf\xec\xd3\xbe\
+\x64\x71\xba\x80\xac\x57\xf9\xd5\x36\xc8\xef\x54\x5e\x29\xa9\x9e\
+\xed\xa2\x0c\xf2\x72\x40\xd9\xc6\xd1\xe0\x5d\xa5\xd1\xc0\xac\x51\
+\x95\xc4\xf0\xb5\x20\xb8\x21\x46\x01\xd4\x05\x79\x1e\x9c\x06\xa2\
+\x9a\x5a\x35\xbd\x8b\x56\xb2\x5b\xe4\x7d\x5c\xc4\xcb\x38\xd1\x2f\
+\xe6\x31\x51\x57\x51\x5c\xec\x20\xa5\x17\x71\xaa\x67\x7e\x95\xdd\
+\xab\x7c\x95\x64\x87\x86\x3f\x0e\x54\x75\x31\x1f\xe4\x61\x57\x50\
+\xf7\x77\xc1\xa3\xe0\x90\xb3\x31\x19\x97\xc8\x8f\x63\x82\x70\x2f\
+\x2a\xb0\xc8\x07\xa8\x1f\x9b\xa8\x4c\xaa\x60\x10\xd6\x61\xa4\xea\
+\xed\x46\xe8\x9f\x18\x32\xfe\x9d\x22\xb6\x4c\xb2\xf0\xee\x7c\xc0\
+\x0c\x76\x30\xd8\xaf\x92\x4b\x31\xe7\x2e\xc2\x8c\x33\xe1\x5b\x6f\
+\x2d\xc0\x1e\xe1\x12\xcc\x3d\x20\x0b\xc4\x5c\xd7\xc5\xbe\xc5\x91\
+\x00\x41\xdf\xe5\x73\xc0\x23\x0a\x1b\xdc\xb5\xa8\x8b\xb8\x0f\x34\
+\x4d\xe1\xbe\x14\xae\xf5\xbe\xa3\x31\x44\x28\x78\xdc\x17\x40\x84\
+\xe6\x84\x70\x46\x25\x99\x13\x89\x24\xf6\x3c\xe2\x0f\x44\x75\x71\
+\x2d\x18\xd7\xb6\x27\x88\x2d\x89\x32\xc4\x98\xf4\xc5\x24\xe9\xad\
+\x05\xcd\x34\x67\x44\x78\x73\x4a\xa1\x5d\xd2\xff\xa0\xb4\x24\x00\
+\xa6\xa4\x82\xf0\x39\xe7\x48\x4a\x0c\x2d\xc5\xd4\x92\x1f\xac\x11\
+\xa0\xe8\xf9\x8e\x73\x1b\xf6\xbd\xd2\xf9\x0d\xe5\x78\x58\x7d\xce\
+\x24\xf9\x13\x03\x1e\x5b\xa2\x44\xca\x61\x50\x88\x40\x3e\xe5\x3e\
+\x9d\x33\x1f\xe6\xef\xc2\x52\x60\x75\x2e\xa2\x98\x78\x14\x73\xed\
+\x19\xca\x5c\xa8\xe4\x01\xa8\xa5\x86\x43\x09\x31\x01\x6f\x79\x12\
+\x4e\x13\x8b\x0a\x68\x63\x00\xda\x81\xe2\xea\x2b\x6a\xe3\xe9\x9a\
+\x06\x5e\x83\x6f\x21\x3d\xed\xe8\x11\x0d\x50\xde\x75\x05\x6c\x12\
+\x13\x25\xc2\xc1\xc4\x24\xad\xd3\xc7\x30\x24\x8a\x27\x88\xec\xe9\
+\xeb\x68\x0d\x05\xc2\xc1\xa0\x75\x92\xfe\x04\xc5\x44\x0d\xe0\x56\
+\x18\x22\x86\x1c\x81\x54\x83\x74\x62\xdc\x73\x21\x07\x5c\x44\x98\
+\xe7\x82\xdc\x84\x4b\x7a\x41\x1b\x01\xbe\xf0\xa1\x63\x65\x62\x12\
+\x5c\xcc\xde\x3a\x0b\xee\xcf\xc3\x88\x3e\x49\x1e\xc1\x08\x46\xbe\
+\xf9\xc8\xbf\x22\xf0\x9f\x81\x91\x4b\xc0\x1d\xeb\x5d\xca\x88\x47\
+\x2e\x3d\x79\xf5\x15\xdb\x13\x27\xef\xa3\xe0\x8c\x4f\xde\xbf\x74\
+\x20\x9e\x3b\x81\x0d\x76\xc0\x16\xc3\x00\x69\x9e\x3f\xe7\xc8\x85\
+\x7d\x85\x7d\x8d\xca\x50\x57\x49\xca\x24\x95\x73\x02\x38\xe8\x7b\
+\x94\x13\xbd\x65\x7d\x24\x3d\x41\x7b\x54\x8b\xd1\x66\x38\x20\xab\
+\x64\x2e\x07\x1a\x80\xad\x4f\x88\xa1\x09\x24\xe0\x5c\x00\x9a\x41\
+\x6f\x5f\x72\xae\xa9\x14\x41\x94\xc1\x92\xde\xcd\x58\xab\xf4\x2b\
+\x2a\xe0\x3c\xd1\xdb\x59\xef\x70\x33\x1e\xa0\x97\x57\x92\x1a\xa2\
+\xa9\x19\x0d\x67\x83\xf0\xeb\xd1\x0c\xc1\xa6\x65\x1c\xe0\x9a\x49\
+\x04\x83\x85\x47\x2c\x81\x28\x28\xf4\xb1\xc1\x38\x56\x69\xec\x66\
+\x44\x2a\x2b\xa4\x02\xa5\xd1\xca\x27\x80\x9d\xfb\xbd\x7f\x37\x3c\
+\x0f\xec\xd7\x0e\x34\x7a\xd7\xfa\x9a\xe1\xf6\xd5\xff\x01\xb6\xc8\
+\x71\xb2\
+\x00\x00\x0c\x07\
+\x00\
+\x00\x38\xf7\x78\x9c\xcd\x5a\x59\x8f\xdb\x38\x12\x7e\xcf\xaf\xd0\
+\x3a\x58\x20\xc1\xb6\x0e\x1e\xa2\x24\xf7\x31\x98\x49\x90\xc1\x00\
+\xb3\xd8\xc5\x24\xd9\x7d\x1c\xd0\x12\x6d\x2b\x91\x25\x2f\x25\xb7\
+\xed\xfe\xf5\x5b\xa4\x6e\x4b\xed\xb6\xfb\xca\x74\x23\x69\xa9\x58\
+\xac\x12\x3f\xd6\xc5\xe3\xea\xa7\xdd\x2a\x31\x6e\x85\xcc\xe3\x2c\
+\xbd\x9e\x20\xcb\x99\x18\x22\x0d\xb3\x28\x4e\x17\xd7\x93\xaf\x5f\
+\x3e\x99\xfe\xc4\xc8\x0b\x9e\x46\x3c\xc9\x52\x71\x3d\x49\xb3\xc9\
+\x4f\x37\x6f\xae\xfe\x66\x9a\xc6\x07\x29\x78\x21\x22\x63\x1b\x17\
+\x4b\xe3\xb7\xf4\x7b\x1e\xf2\xb5\x30\xde\x2d\x8b\x62\x3d\xb5\xed\
+\xed\x76\x6b\xc5\x15\xd1\xca\xe4\xc2\x7e\x6f\x98\x26\xf4\xcc\x6f\
+\x17\x6f\x0c\xc3\x00\xb5\x69\x3e\x8d\xc2\xeb\x49\xc5\xbf\xde\xc8\
+\x44\xf3\x45\xa1\x2d\x12\xb1\x12\x69\x91\xdb\xc8\x42\xf6\xa4\x65\
+\x0f\x5b\xf6\x50\x29\x8f\x6f\x45\x98\xad\x56\x59\x9a\xeb\x9e\x69\
+\xfe\xb6\xc3\x2c\xa3\x79\xc3\xad\x3e\x66\x4b\x34\x13\x0a\x82\xc0\
+\x76\xb0\x8d\xb1\x09\x1c\x66\xbe\x4f\x0b\xbe\x33\xfb\x5d\xe1\x1b\
+\xc7\xba\x62\xc7\x71\x6c\x68\x6b\x39\x4f\xe3\x9a\xee\x12\x40\xe2\
+\xde\x8f\xd1\xad\x5d\xed\x80\xfe\x1a\xfe\x35\x1d\x6a\x82\x95\x67\
+\x1b\x19\x8a\x39\xf4\x14\x56\x2a\x0a\xfb\xe3\x97\x8f\x4d\xa3\xe9\
+\x58\x51\x11\x75\xc4\xd4\xe0\xf7\xf4\xf6\x66\x24\xe5\x2b\x91\xaf\
+\x79\x28\x72\xbb\xa6\xeb\xfe\xdb\x38\x2a\x96\xd7\x13\xea\xeb\xb7\
+\xa5\x88\x17\xcb\xa2\x79\x8d\xa3\xeb\x09\x8c\x0e\x11\x87\xe9\xf7\
+\x5a\xff\xb4\x31\x22\xc7\x22\xb8\x64\xad\x84\x76\x9b\xe8\x41\xaf\
+\x28\x0b\x67\x3c\x87\x8f\xb4\x97\xd9\x4a\xd8\xdf\xe2\xd5\x8a\x87\
+\x76\x2e\x43\x3b\xbc\xcd\x6d\x30\xbc\x45\x66\xc6\x61\x96\x9a\xc5\
+\x12\x6c\xc2\x06\x79\x09\x9f\x25\xc2\xe6\x61\x01\x12\xf3\x81\x30\
+\x35\xa6\xeb\x09\x40\xb4\xe2\x85\x59\x88\x5d\x61\x6e\xd2\x48\x48\
+\x80\x58\x58\xf5\xa4\xf4\xcc\xbd\xf7\xa1\xd9\xa6\x58\x6f\x8a\x3f\
+\xa1\x9b\x48\x4b\x16\xc0\xa9\x03\x9a\x6e\x56\x72\x1a\xda\xe4\x06\
+\x04\x5c\x45\x62\x9e\x2b\x41\x25\x3c\xea\x0d\xf0\xf1\x75\x1b\xb4\
+\x36\xe2\xd7\xa0\x78\x2d\x42\x65\xb7\x25\x77\xe7\xdb\x8b\xbd\x9a\
+\xaa\x3e\x2b\x29\xe7\xd3\xe8\x61\xb9\xfe\x73\x07\x40\x1a\x53\x03\
+\x53\xf8\x0f\x8d\x72\xec\x4b\x0e\x04\xa6\x08\x7f\x9c\x51\x9e\x3b\
+\x35\xa5\x47\xc4\x54\x5f\x60\x66\x32\x5e\xc4\x80\x44\xc9\xc7\xfa\
+\xcc\x30\xda\xce\xa0\x18\x9a\x18\x76\x35\x68\xc9\xa3\x98\x27\xbf\
+\xaa\x3f\xe0\xca\x03\xe9\x61\x96\x24\xd0\xe9\x7a\xc2\x93\x2d\xdf\
+\xe7\x8d\x44\xed\x0c\xd3\xa5\x14\xe0\xbc\x6f\xd5\xac\x71\x59\xcb\
+\xf0\x19\xc3\x3d\xcd\x7d\x15\x98\x06\xb4\x69\x5e\x54\xc4\xaf\x69\
+\x5c\x80\x97\x6e\x72\x21\x3f\x2b\x4b\xff\x57\xfa\x35\x17\x03\xae\
+\x2f\x92\xa7\xb9\xb2\x99\xeb\x09\x98\x8d\x8c\x77\xef\xd0\x85\xa3\
+\x7e\x2d\x97\x30\x0f\x93\x0b\x66\x51\x14\x20\xea\x0b\x13\xb9\x17\
+\x88\x59\xbe\x07\xe6\xff\xbe\x91\x13\xee\x14\x3c\x96\x4f\x3c\x84\
+\x59\x4b\x85\x59\x20\xd0\x13\x23\x84\xbd\x86\x3a\x1f\xe5\x9d\x8f\
+\xf2\x4a\x30\x51\xd7\x62\x94\x7a\xc4\x6b\x91\xed\xa3\x72\x32\xb2\
+\x0a\xb1\x7e\x57\x82\x88\x5b\xd9\x28\x88\xcd\x8b\x6c\x5d\xf3\x82\
+\x5d\x16\xfb\x04\xec\x51\x11\x4d\x90\x98\xc9\xe9\x5b\x47\xff\x5c\
+\x6a\x52\x06\x60\xc6\xc5\x7e\x8a\x2e\x27\x6d\x9f\x6c\x3e\xcf\x05\
+\x28\x76\x3a\x34\x1d\x2e\xa0\x07\xe8\x6a\x87\xf0\x58\x6d\xce\x98\
+\x36\x34\xae\x2d\x68\x01\xb3\xfb\xc3\x7e\x6e\x18\xb1\x8b\xd1\x6b\
+\xc1\x08\xba\xc8\xeb\xc1\x08\xda\xdc\xd7\x83\x11\x1c\xf8\x0c\x18\
+\xe7\xfa\xe7\xb1\x30\x62\x17\x9d\x05\xe3\x98\xb6\xd3\x61\xc4\x2e\
+\x79\x24\x8c\x63\x28\x91\xfb\x50\x6a\xf5\x51\xf7\x01\x20\x46\x86\
+\x88\xb9\x4b\x7c\xef\x00\xd0\xfb\x41\xea\x28\xf3\x1e\xc0\x61\x44\
+\x19\xa1\xcc\xe5\x74\x30\x7b\xaf\x67\x6b\xe4\x5e\x14\x9f\xdf\xd6\
+\x88\xfb\x9a\xb6\xd6\x4d\x15\x4f\xb3\x35\xc2\x7c\x7c\x06\x4a\x34\
+\xf0\xe6\x21\x7b\x6c\x7e\x60\x3e\x3d\x0b\xa5\xc0\x99\x91\x28\x38\
+\x41\xdb\x68\x7e\x60\x3e\x7b\x36\x8f\xf4\x09\x7d\x35\x5b\xf2\x09\
+\x3b\x0b\xa5\x19\x51\xbf\x07\xb6\x64\x39\x55\x56\x18\x43\xab\x6e\
+\x1c\xd7\xee\xbf\x9a\x8b\xea\x6a\xef\x95\xb2\x2a\xe8\x3a\xcf\xf8\
+\x9e\x94\x55\x41\xdb\xb3\x19\x1f\xa2\xcc\x3b\x03\xa5\xf1\x18\x7f\
+\x1a\x48\xa0\x2a\x38\x0b\xa4\x7b\x62\xfc\x69\x20\x21\xea\xa1\x17\
+\xb2\xb5\x23\x4b\x0c\x9d\x17\x8e\xa0\xcd\x70\xfb\xad\x8f\x5e\x62\
+\x14\xea\x31\xe1\x85\x78\x67\xa2\x0b\x13\xb5\xcb\x88\x1d\xd2\x4b\
+\x83\x00\x21\x86\xda\x95\xce\x5e\x51\xb1\x85\x08\x73\xda\xf5\xcd\
+\x0e\x8f\xb2\x02\x15\x16\x11\x0e\x0e\x10\x41\x4f\x5e\x30\x1c\xc3\
+\x49\xc5\xbc\xa3\x38\x9d\xbb\x14\x53\x63\x47\x81\xe5\x07\xc8\x0b\
+\xfa\x63\x87\xe5\x16\x02\xdb\xc3\x7e\x7f\xf0\xc8\x72\x1d\xc8\x19\
+\xb4\x37\x78\x1f\x56\x4b\x01\xf3\x1d\xff\x34\xfc\x1d\x0d\xff\x4b\
+\xe2\xa4\x6a\xda\x63\x38\x75\xcc\xed\x74\x9c\x48\xa0\x16\x8a\xb8\
+\x63\x0e\x0a\x27\x8a\x2c\xea\x06\x98\x91\x1e\x4e\x26\x58\x09\x22\
+\x8e\x83\xfc\x1e\x50\xc0\xec\x9e\x8a\xd1\xcb\x42\xa4\x8b\x8c\xa3\
+\x10\x0d\x3f\xf4\x09\x2e\x07\x53\x8e\x0f\x3c\xce\xb3\x98\xe7\xf6\
+\x00\x52\x68\xba\x16\x09\xfc\x80\xf5\x5d\x0e\x6c\xd1\xf1\x0e\x6c\
+\x0e\xfa\x07\x6a\xcf\xcf\x7f\x51\x43\x72\x31\x3a\x82\x12\x34\x7b\
+\x7d\x57\x62\x96\x4f\x91\x4b\x58\x3f\x8c\x0c\x46\x73\xc8\xa4\xc6\
+\xe3\x5a\x0e\x72\x5c\xf7\x99\x61\xc7\x2f\x6b\x46\x3a\x11\x1e\x03\
+\xa8\x63\x46\x0a\x20\x18\x24\xf6\x10\x73\xfb\x3e\x04\x73\xe9\x31\
+\x14\x1c\x04\xda\x11\x5e\x85\x93\x63\x51\x88\xbe\xee\xb9\x1e\x7c\
+\x0e\x4e\xaf\xbf\x89\xe6\xba\xc1\xd3\xc7\x33\xbe\x89\x46\x2d\xea\
+\x39\x2e\x63\xc2\x44\xf4\x87\x6f\xa2\xfd\x00\x64\xd9\x33\xd4\x0e\
+\xe3\xc8\x9a\xc8\xf2\x11\xf2\x19\x06\x68\xc9\x0f\x87\xf6\xf5\x73\
+\x04\x61\x8f\x29\x37\x70\x60\x39\x84\x60\x8a\x7a\x21\x40\x8d\x92\
+\x76\xa3\xad\x8e\x94\xd4\x22\x84\x78\x41\x2f\x00\x04\x2a\xdf\x42\
+\x54\xf8\x0b\x15\x1b\x47\x8b\x57\xc2\xd8\x63\x50\x82\xd2\x13\xbb\
+\x7d\x88\xa0\xf0\x84\x7a\x0c\xf5\x31\x3a\x64\xd4\xb5\x28\x3e\xb9\
+\xca\xc0\x2f\x5b\x65\xa0\x4e\xfc\x1f\xdb\x09\xef\x58\x41\x55\x86\
+\x3b\xec\x60\xd8\x50\x33\x05\xc4\x73\xfb\x83\xee\xe7\x04\xe2\x29\
+\x16\x8c\x5e\xe0\x20\x42\xfd\x30\x78\x44\xbe\x05\xeb\x47\xe6\xd5\
+\x70\x5d\xd9\xea\xb8\x49\x3f\x35\x67\x49\xea\x10\x2c\xba\x8d\xc5\
+\xf6\x4d\x33\x5e\x75\xc8\x56\xa9\x5b\xf3\x85\xd0\x4b\x34\x40\xa9\
+\xdc\x8d\xa8\x1a\x66\x99\x8c\x84\xac\x9b\x98\xfe\xe9\x35\x55\xab\
+\x38\x75\x8e\x87\x60\x98\x6e\x53\xdc\xb6\x87\x46\x20\xbb\xc3\xe5\
+\x8c\xb5\xe7\x4b\x1e\x65\x5b\xc0\xee\xb0\xf1\x2e\xcb\x60\xe0\xf4\
+\x90\xac\xa2\x97\x09\xc3\xa6\xbe\x43\x1a\x67\x6b\x5b\x41\x11\x86\
+\xb2\x0c\x41\xe9\xeb\x0d\x1a\x37\x52\x02\xac\x66\xc2\xf7\x02\xc6\
+\xa4\xff\xd4\x6a\xf3\x65\xb6\x5d\x48\x85\xcd\x9c\x27\x0d\x38\x4d\
+\x57\xd5\x64\xce\x66\xd9\x4e\x99\xe9\x66\xd0\x1c\x65\xe1\x46\x9d\
+\x51\x9b\x9b\x72\x62\xd7\xbb\xae\xd8\x4d\x1c\x89\xfc\x3e\xc1\xaa\
+\xf1\x88\xe4\x6d\x9c\x02\x3c\x66\x75\x08\x8b\x9c\xc6\x32\x0f\x39\
+\xea\x83\x59\x1f\x0d\x40\xa9\x38\x76\x6a\xad\x40\xee\x69\x54\x11\
+\x7d\x30\x3f\x7a\xd4\xeb\x2c\x4e\xd5\x98\x3a\x5f\x97\x17\x32\xfb\
+\x0e\xeb\xfb\xb7\xb0\xea\xe0\x7e\x8d\xf3\x3c\x4e\x12\x45\x13\x84\
+\x36\x45\xa4\x1a\x7f\x69\x2d\xe3\xc3\x53\xed\x5d\x2b\x28\x31\xaa\
+\x1c\xbf\xb1\x60\x0d\x52\xed\x1d\x99\x54\xbe\xc1\x0b\x7d\x20\x7b\
+\x2b\x64\x11\x87\x3c\x69\x7c\x67\x9d\xe5\x71\xd9\x04\x51\x9a\x3a\
+\x2c\xc0\xfd\x5c\xa1\x45\x61\xec\x76\x32\xd4\x09\x6a\x96\xf0\x76\
+\x97\xc1\xeb\x98\x22\xb5\x7a\x62\x50\x51\xa2\x51\x45\xc1\x59\x8a\
+\x8e\x8c\xa7\x4e\x50\x63\x5a\xba\x47\xad\x4f\x44\x2d\x80\x68\x4e\
+\x03\x4c\x46\xd5\xb8\xcf\x87\x1a\x41\x96\x47\x02\xd4\x59\x9c\x77\
+\x15\x3d\xe3\xf4\x60\xdf\x72\x03\x4a\xdd\x51\x3d\xcf\x37\x3b\x6a\
+\x61\x4d\xe8\x38\x6e\xde\x79\xd3\x73\x74\x38\x10\xdc\xa8\xeb\x30\
+\x6f\x7c\x82\x3a\x5b\x89\x3d\x2f\xee\xf2\xfe\x0a\xef\x9f\x64\xb6\
+\xfa\xb7\x14\x0e\x65\x9f\x45\x51\xc4\xe9\xa2\xcd\x9b\xe5\xd5\x83\
+\xdd\x5e\x75\x9b\x74\xbe\x6f\x11\xa7\xea\xaa\x41\x13\xda\x6a\xe2\
+\xbe\x4f\x54\x57\x48\x40\x9e\x62\xb5\xdc\x21\x7d\x7f\x48\xaf\x13\
+\x8c\xda\x42\x6d\x72\x8f\x61\x88\xd5\xfa\x9e\x96\x4e\x42\xc1\x5d\
+\xf6\x0e\x9d\x76\xe9\x95\x62\x95\x61\xea\x1c\x39\x4c\x8d\x9a\xbe\
+\x12\x05\x8f\x78\xc1\xdb\x3c\x59\x53\x10\x41\xf5\xa1\xee\x95\x8c\
+\xe6\xd3\x3f\x3e\x7e\x6a\x76\x3e\xc3\x70\xfa\xdf\x4c\x7e\xaf\x35\
+\x42\x1d\x0c\x0c\x7c\x96\x6d\x20\x18\x37\x9b\xb1\xea\x56\x48\x38\
+\x2d\x2f\xa2\xdc\xc4\x2b\x88\x78\xea\x52\xd0\x3f\x76\xab\x04\x32\
+\x76\xd3\xd0\x63\x56\xf3\xd0\x0a\x2d\xc5\x4a\x51\x5e\xfa\x19\xbd\
+\x27\x15\x85\xab\x58\x75\xb2\x3f\x17\x10\x89\x7f\x53\x4a\x3a\x3b\
+\xb4\x95\xd0\xb8\x48\xc4\xcd\x27\xad\xce\xf8\x22\x76\x85\x61\x1a\
+\x5f\xeb\x2b\x31\x91\xfe\x96\x92\xa5\xd7\x0b\x20\x10\x87\x92\xf4\
+\x95\xab\x4c\xde\x74\x3e\x51\x41\xf1\xf3\xa2\xd9\x91\x1d\xea\xfd\
+\x9d\xaf\x33\xe3\x03\x4f\xf8\x8a\xa7\x91\x14\xf1\x98\x3e\x35\x3f\
+\x43\x39\x9a\x73\xa0\x52\x49\x2e\x01\xb9\xa9\xf0\x28\xaf\x08\xad\
+\x65\xf6\x0d\x4a\x42\x05\x8c\xee\x58\xf1\xf4\xfb\x6d\x66\x8a\xa7\
+\xa7\x58\x41\xfc\x0b\x5f\x1c\x7c\xbe\xa2\x26\xf1\x8d\xba\x3e\x74\
+\x65\x57\x2f\xa3\x1c\xfc\x78\x33\x64\xcd\xf8\xbb\x00\xbb\x38\x85\
+\xcd\x7c\x90\x6f\x2b\xe3\x42\x1c\x67\x49\xc0\xb7\x85\x3c\x49\x5d\
+\xb1\xcc\x36\x8b\xe5\x18\x6b\x49\xeb\xc1\x52\x82\x7a\x08\xa0\x9a\
+\xfe\x24\x0e\x45\x9a\x3f\x6c\xb7\x63\x17\xf6\xaa\xbe\x39\x18\xf5\
+\x0c\x9e\xa3\x6c\xc5\xe3\xd4\x1e\x98\x70\x08\x91\x51\xc6\xb3\xcd\
+\xb9\xc6\xf7\x8d\x7f\xdf\xcc\x8c\xcf\x85\x00\x4b\x97\xe7\x5a\xde\
+\x50\xa7\xe6\x55\x8e\xdf\x0d\x04\xbf\x1f\x0e\xbf\x13\x0b\xce\x1f\
+\x79\x1f\xda\xb5\x90\xe0\xdf\xf9\xa3\xa0\x4d\xf3\xb7\x7f\x08\xf0\
+\x8a\x68\xa3\x2f\xca\xf5\x31\x7d\xba\xec\x8f\x71\x5e\xc2\xf3\x12\
+\xb2\x85\x8c\x6f\x75\x83\x02\x3b\xef\x9e\x39\xd9\x2d\xe2\xf5\xc9\
+\x50\x27\x38\x5f\xd9\x75\xf4\xd6\x6f\x8b\x41\x6d\x9b\x6d\xd6\xab\
+\x2c\x12\xd5\x42\xa0\xae\x4c\xa3\xea\xdd\x3d\x2c\x55\x13\x3e\x13\
+\x50\xdf\x7e\xd6\x95\x6a\x53\x08\xeb\x73\xae\x28\xce\xd7\xd0\x69\
+\x1a\xa7\x2a\x8c\xd6\x89\x62\xcd\x8b\x65\x93\xfd\xfa\x17\xfb\xb8\
+\x0c\xdb\xc4\x58\xca\x68\xcf\x63\x91\x7b\xd9\x3f\x58\x54\x85\xf5\
+\x14\x02\xfd\xbb\xb7\xc3\x3b\x6e\xef\x75\x6b\xe7\x44\x4d\xbf\xca\
+\x4d\x22\xa6\xe2\x56\xa4\x59\x14\x5d\x96\xd5\xfa\x34\xcd\x52\x51\
+\x3d\x97\xcb\x09\x60\xae\x5e\xd5\x57\xc3\x18\xa7\x30\x83\x45\x97\
+\xf6\x0d\x4a\xff\x29\x4c\x9e\x90\x97\x2b\x2e\xbf\x0b\x59\x0a\x29\
+\x9f\xcd\xbc\xe0\xb2\xe8\x51\x56\x71\xd4\x7b\x17\x69\xd4\x53\xab\
+\x45\x25\x31\xfc\x99\x22\xa7\x26\x46\x1c\x8a\x7f\x29\x01\xbe\x2e\
+\xab\xa2\x96\x27\x82\xd3\x86\xb3\x1d\xe4\x6d\x9c\xc7\xb3\x38\x51\
+\x2f\xfa\x31\x11\x97\xfd\x39\xb8\xcc\xa0\x56\x9b\x27\xd9\xb6\x6e\
+\xef\x55\x4b\x6a\x66\x00\xbc\xb6\x7c\x68\xa6\x67\x7c\x6f\xac\x6d\
+\x1e\xdd\xf8\x6a\x9a\xe5\xae\xbb\x05\x36\x6c\x86\xde\xbe\x45\x02\
+\xe6\x07\x9d\xfd\x07\xf8\x9e\x7f\x1a\x14\x8a\x16\x58\xb9\x31\x62\
+\x34\xe2\x8d\x9f\x8d\x46\x96\xd1\x74\x33\x1c\x03\xc1\xaf\x11\x58\
+\xb0\xc4\x25\xbe\xef\x5e\x9c\xd8\x61\x4c\xc3\x5d\x5b\xf4\x0d\xb7\
+\x1a\xd4\xfe\x2c\xa2\xb4\xd9\x5b\x74\xa9\x47\x2f\x4c\x84\x2d\x8f\
+\x51\xc4\x2e\xb0\x63\x05\xc8\x25\xb4\xdd\x57\x6c\x3c\x45\xfe\x19\
+\xf6\x57\xb3\xfd\xb6\x7d\xd5\x56\x57\x63\x8b\x47\xf9\xe7\x60\xbf\
+\xa0\xf2\xcf\x9f\xcf\x76\xcd\x92\xb1\x75\xb2\xe1\x76\xe2\xe9\x4e\
+\x36\x2e\x80\xbd\x7f\xbc\xe3\x0d\x5d\x87\x1e\xf7\x9c\xe1\x49\xbe\
+\xb6\x30\xec\x5c\x60\xcb\x35\x7e\x37\xc0\x62\x02\xfd\x80\x50\xf3\
+\x44\x2d\x0c\x64\xa4\x5f\x08\xb1\xbc\xf6\xc5\xab\x79\x28\xa9\x9f\
+\xb0\x5f\x49\xaa\x44\xde\x19\x20\x9d\x5e\x78\x65\x07\x58\xd6\x21\
+\x1f\x04\x60\x56\x8a\x66\x16\xf6\x11\x6e\xde\x2b\xc6\x3b\x63\xe8\
+\x90\x18\x8d\xdc\x3b\x3e\xcb\x96\xee\x0b\xba\x30\x43\x42\x05\xde\
+\xfc\x7a\x12\xd6\x3f\x23\xfa\x3b\x3e\xab\x21\x43\x60\xf6\x17\xc4\
+\xd7\xdf\xcd\xc0\xb1\x18\x66\x04\xd7\x04\xb0\x7f\xe6\x63\x1f\x07\
+\x17\xa4\x7c\xf7\x2c\xe2\x12\x4f\x01\x56\xe2\x85\x9a\x76\xbf\x82\
+\xd2\xf2\x99\xcb\x5c\xbf\x21\xa8\x0d\x0a\xe2\x32\x00\x56\xdd\x84\
+\x0f\x1c\x86\x15\x60\xd0\x1d\x13\x8a\x3c\x45\x55\x5b\xdd\x1e\x36\
+\x3e\x8c\x52\xdb\xcf\x6b\x9f\x3a\xb8\xd6\x76\x0d\xa5\x8b\x99\xc7\
+\x77\x62\xea\x42\x5c\x63\x01\x09\x30\x5d\xef\x2e\x4b\xb2\x62\x01\
+\x74\x60\x35\x90\x94\x94\x5b\x2e\x63\x9e\x16\x3d\xda\x56\xef\x2c\
+\x4d\x67\x59\x12\xd5\xdd\xa4\x28\xc2\x65\xcd\xa4\xef\xd5\xf3\x24\
+\x5e\xa4\x53\x9d\x12\x2e\x95\x05\x57\xfb\x51\x53\x98\xfa\xbf\x5f\
+\xaa\x52\x15\x96\x60\xa6\x72\xe7\x69\x22\xcd\x62\x56\x75\x4a\x43\
+\x58\xeb\x56\xbd\xda\x04\xc8\xca\x8c\xa7\x8d\xfa\xc0\xf1\x8e\xb8\
+\x19\xc3\xf4\x87\xb8\xd9\x61\xe6\xd1\x10\xcd\xf9\x2a\x4e\xf6\xd3\
+\x5f\xa0\xf0\x01\xb0\xf8\xca\xf8\x8f\x90\xdc\xf8\xcc\xd3\xfc\x99\
+\x4d\xfc\xb0\x78\xa0\x9e\xef\x60\x14\xf8\xf7\x43\x78\x56\xec\x62\
+\x18\xfd\x05\x62\x97\xda\xca\x23\x01\xa1\x17\xd8\xab\x43\x14\xf1\
+\x21\xf9\x91\x9a\xa0\x36\xe8\x21\x29\x11\x74\x41\xd5\xd9\x97\x83\
+\x83\xa0\x0c\x6b\x9d\x6e\xa3\x21\x87\x04\xc3\x34\xdd\x8b\x16\x4f\
+\x9f\x2e\x09\x8b\xa4\x83\xe9\xba\xaf\xbc\x1b\x5e\x76\x78\x52\xe6\
+\x51\xc7\xdc\x0f\xcd\x1e\x64\xd9\x34\x1a\x4c\x5f\x49\x7d\xee\x9a\
+\xef\x81\xc9\x7f\xd1\x92\x4f\xcd\x02\x26\xa4\x35\xac\x6a\x47\xbd\
+\x63\x00\xf5\x0e\x7a\xe7\xca\xcc\xf5\x84\x76\x6e\xc6\xec\x0f\x6e\
+\xca\xbc\x8c\x07\x3f\x9b\xeb\x12\xf2\xd0\xe4\xe7\xff\xdb\x70\x29\
+\x5e\x3a\x22\xf6\x7d\xd9\x85\x54\x45\xcb\xfa\x41\xfd\xd1\xcf\x43\
+\xc7\x24\x9d\x8b\x14\x2f\xe2\x98\xba\xec\xbc\x52\x9b\x70\x37\x6f\
+\xfe\x0f\x91\xc8\x43\x14\
+\x00\x00\x11\xf1\
+\x00\
+\x00\x5c\xcb\x78\x9c\xed\x5b\x59\x73\xdb\xc8\x11\x7e\xf7\xaf\x60\
+\xe8\x97\x75\x85\x04\xe7\x3e\x68\x4b\xa9\xc4\x9b\xa4\x92\x72\x8e\
+\xca\xee\x56\x1e\x53\x10\x09\x51\x58\x93\x04\x0b\x80\xae\xfd\xf5\
+\xe9\x1e\x5c\x83\x83\x14\x29\xc9\xb2\x76\xcb\xe2\x7a\x45\x34\x7a\
+\xae\xee\xaf\x8f\xe9\x19\x7d\xf8\xc3\xdd\x66\x3d\xba\x89\xd2\x2c\
+\x4e\xb6\x67\x63\x1a\x90\xf1\x28\xda\x2e\x92\x65\xbc\x5d\x9d\x8d\
+\x7f\xfa\xf1\x2f\x53\x33\x1e\x65\x79\xb8\x5d\x86\xeb\x64\x1b\x9d\
+\x8d\xb7\xc9\xf8\x0f\xe7\x6f\x3e\xfc\x6e\x3a\x1d\x7d\x4c\xa3\x30\
+\x8f\x96\xa3\xdb\x38\xbf\x1a\xfd\x6d\xfb\x39\x5b\x84\xbb\x68\xf4\
+\xdd\x55\x9e\xef\xe6\xb3\xd9\xed\xed\x6d\x10\x97\xc4\x20\x49\x57\
+\xb3\x77\xa3\xe9\x14\x5a\x66\x37\xab\x37\xa3\xd1\x08\x86\xdd\x66\
+\xf3\xe5\xe2\x6c\x5c\xf2\xef\xae\xd3\xb5\xe3\x5b\x2e\x66\xd1\x3a\
+\xda\x44\xdb\x3c\x9b\xd1\x80\xce\xc6\x0d\xfb\xa2\x61\x5f\xe0\xe0\
+\xf1\x4d\xb4\x48\x36\x9b\x64\x9b\xb9\x96\xdb\xec\xad\xc7\x9c\x2e\
+\x2f\x6b\x6e\x9c\xcc\x2d\x77\x4c\xd4\x5a\x3b\x23\x6c\xc6\xd8\x14\
+\x38\xa6\xd9\xfd\x36\x0f\xef\xa6\xed\xa6\x30\xc7\xa1\xa6\x8c\x10\
+\x32\x83\x77\x0d\xe7\x71\x5c\xf3\xbb\x35\x48\x62\xef\x64\xdc\x5b\
+\x7f\x74\x90\xfe\x0e\xfe\xd5\x0d\x2a\x42\x90\x25\xd7\xe9\x22\xba\
+\x84\x96\x51\xb0\x8d\xf2\xd9\xf7\x3f\x7e\x5f\xbf\x9c\x92\x60\x99\
+\x2f\xbd\x6e\x2a\xe1\xb7\xc6\x6d\x69\x64\x1b\x6e\xa2\x6c\x17\x2e\
+\xa2\x6c\x56\xd1\x5d\xfb\xdb\x78\x99\x5f\x9d\x8d\x85\xd9\xdd\xb9\
+\xe7\xab\x28\x5e\x5d\xe5\x1e\x21\x5e\x9e\x8d\x61\x85\x94\x71\x45\
+\x1c\xa1\x9a\xc4\xbc\x46\x12\x09\x38\x2b\x78\xcb\x9e\xfd\x57\x42\
+\xb5\x5b\x2d\x93\xc5\x45\x98\xc1\x4c\x67\x57\xc9\x26\x9a\xfd\x1c\
+\x6f\x36\xe1\x62\x96\xa5\x8b\xd9\xe2\x26\x9b\x01\xfa\x56\xc9\x34\
+\x5e\x24\xdb\x69\x7e\x05\xc0\x98\x41\x7f\xeb\xf0\x62\x1d\xcd\xc2\
+\x45\x0e\x3d\x66\xbd\xce\x70\x61\x67\xe3\x68\x19\xe7\xd3\x5d\x98\
+\xe5\x51\x50\xa9\xa3\x9e\x4c\x72\x9d\xef\xae\xf3\xff\x45\x77\x79\
+\xb4\x2d\x66\x05\x02\xf1\xa4\xe3\x5e\x63\xb3\x9a\x36\x3e\x87\x0e\
+\x3e\x2c\xa3\xcb\x0c\x3b\x2a\x64\x80\x4f\x28\x04\xe6\x5e\xc2\xeb\
+\xba\xff\x1d\x2c\x76\x17\x2d\x10\xa1\x05\xbb\x37\xc1\xfc\x1e\x95\
+\xd2\x66\xe5\x85\xe6\x46\x2d\x81\xed\xfe\x77\x07\xd2\x1a\xcd\x47\
+\x4c\xc0\xff\xe8\x20\xc7\x7d\xc1\x41\x01\x74\xf0\x8b\x0c\xf2\xfc\
+\x82\xaa\x3b\xd0\x4d\x39\x83\x69\x92\xc6\xab\x18\x44\x51\xf0\xa9\
+\x36\x33\x2c\xd7\x5b\x94\x01\x3f\x31\x2b\x17\x9d\x86\xcb\x38\x5c\
+\xff\x15\x7f\x81\xd1\xf6\x7a\x5f\x24\xeb\x35\x34\x3a\x1b\x87\xeb\
+\xdb\xf0\x3e\xab\x7b\x74\xb0\x9f\x5f\xa5\x11\x98\xe9\x5b\xf8\x1e\
+\x85\x69\xd5\x87\x24\x8a\xb4\x46\x6e\x0f\x21\x09\x6f\x26\xb6\x2a\
+\x89\x3f\x6d\xe3\x1c\xec\xf1\x3a\x8b\xd2\x1f\x10\xd3\xff\xda\xfe\
+\x94\x45\x3d\xae\x1f\xd3\x70\x9b\x81\x01\x6d\xce\xc6\x9b\x30\x4f\
+\xe3\xbb\xef\xa6\x2c\xd0\x5a\x70\x63\x27\x04\x3e\x34\xb0\xca\x6a\
+\xa2\x26\x94\x02\x5d\x31\x3e\x99\x1a\xcd\x02\x63\xa4\x78\x57\x77\
+\xb6\x00\xb5\x28\x22\x03\x4d\x05\xb3\x0d\xf5\x1e\xc5\xac\x02\x25\
+\xb4\x69\xa8\x97\x83\xbc\x97\x83\xbc\x29\x38\x60\xaa\x03\xe0\x34\
+\xaa\x11\x6f\x5b\x34\x47\x8b\x17\xc5\x36\x20\xd5\xf3\xf2\xfd\x87\
+\x2c\x4f\x76\x15\x2f\x80\x33\xbf\x5f\x03\x28\x91\x38\x85\x1e\x93\
+\x74\x7e\xb1\x0e\x17\x9f\xdf\x3b\x42\x02\xf2\x8c\xf3\xfb\x39\x7d\
+\x3f\x6e\x5a\x24\x97\x97\x59\x04\xc3\x12\x8f\xe6\xfc\x02\xb4\x80\
+\x91\x58\xbd\x80\xc7\x8d\x45\x86\xc6\xa2\xc3\x63\x89\x46\x58\xb3\
+\xf6\x92\xbf\x1e\x42\x3d\x65\x3f\x15\xa1\xc3\x00\x9d\x52\x63\x69\
+\xa0\xf8\xeb\x45\xe8\x00\x00\x85\x79\x12\x00\x07\x41\x31\x0c\x40\
+\x49\xf6\x03\xd0\xe3\x52\x43\x1d\x06\x72\x7c\xba\x65\xbc\x18\xdc\
+\x25\x7b\x08\xee\x8f\xf4\x18\x07\xe1\x0e\x9a\x3b\xa4\x58\xa6\x5f\
+\x00\xee\x2c\xa0\xda\x0e\xc1\xfd\x8e\x9e\x8d\x39\x01\xaa\xd4\xb4\
+\xd1\xdd\x3d\x52\x55\x17\xc2\x77\x6c\x90\x97\xa1\x11\xd8\x00\x81\
+\xa3\xbf\x80\xef\x65\x4c\xda\xe3\xa1\xff\xf6\xd2\xfd\x3c\xd2\xfb\
+\x32\xa6\xe8\x29\x70\x1c\x1c\xed\x68\x40\xc2\x68\xfc\x0b\x01\x72\
+\x50\x8c\xf4\xe5\xc4\x28\xf9\x4b\x8a\x51\xca\x17\x14\x23\x7f\x41\
+\x34\x8a\x17\x45\xa3\x78\x2c\x1a\x07\xa4\xc4\xc4\x09\x52\xd2\x0b\
+\xfc\x3c\x5a\x4a\x4c\x9d\x24\xa5\x0b\x83\x9f\x23\x46\x1b\x96\x12\
+\x33\x2f\x08\x36\xaa\x4e\x10\x23\x71\x3f\x8f\x16\x23\x35\x27\x89\
+\x71\x68\xb4\x13\xc0\xc6\xc8\x73\x81\x8d\x4a\xc6\x4f\x41\x9b\xd5\
+\x56\x9b\xb0\x23\xa6\x80\x94\xeb\x19\xcc\x6a\xca\x97\x03\x0b\xc1\
+\xc1\x0f\xc0\xcf\x63\x13\x6c\x38\x61\xea\xf7\x3d\x30\xe7\x05\x5b\
+\xb0\x0b\xbb\x77\xce\xa7\xe8\x4d\x2f\xf5\x52\x75\x5d\xd2\xa1\xe5\
+\xd3\x07\x96\xff\x58\x7b\x18\x52\x24\x3d\x21\xcb\x7d\x7b\x49\x2e\
+\x49\x74\xca\x4a\x1e\x50\x24\x3b\x22\xf1\x05\x67\x63\x87\xf5\x68\
+\x2d\x64\xf6\xad\xac\x78\x60\xca\x91\xc1\xcf\xf1\x19\xb0\x37\xac\
+\x1e\x1c\xd6\x30\x2d\x0d\x6c\xb6\x0f\x0f\xbb\x27\x0c\x9d\x02\x9b\
+\xa5\x81\x0f\x7f\x3e\xd8\xb0\xc7\xe6\xe2\x7d\xd8\x08\x61\x4e\xb1\
+\xff\x85\x32\x20\xb5\xe7\x82\x0d\x0c\x7e\x5a\xf8\x31\x56\x11\xfa\
+\x6c\xf6\x07\xc3\xbf\x5c\x3c\xa2\x5c\x8b\x53\x02\x92\x12\x4a\xc8\
+\xae\xd7\x3a\x36\x20\xe1\x60\xa7\x45\xa4\xa1\xe1\x8e\x8e\x48\x30\
+\x9c\x7c\x30\x24\x3d\x7f\x35\xa4\x10\xa9\x2f\xf2\xf6\x18\x38\xad\
+\x26\x70\x60\x71\x82\x09\xdc\x96\x69\xe6\x51\xb1\xe0\x20\x03\xa6\
+\x99\x34\x8d\x97\xb8\x1c\xe4\xbd\x1c\xe4\x4d\x81\x15\x60\x46\x29\
+\xd5\x8d\x27\xd9\xbf\xcf\xac\x10\x39\x21\x03\x5f\x28\x25\x52\xeb\
+\x89\x08\xac\xd1\x9c\x93\x68\x4a\xe1\x81\x04\x4c\x29\x61\xde\xf5\
+\x3a\x1f\xde\xea\x3e\x75\x17\x79\x48\xe0\xce\x5b\x1c\xf4\x26\xb6\
+\x81\x23\x6e\x8f\x55\x40\x89\xa6\x5a\x34\xad\x70\x7b\x4c\x49\x20\
+\x24\x65\x3e\x2f\x6e\x8f\xb9\xdb\x1d\x8b\x46\x8a\xb8\x3d\xe6\x3a\
+\x30\xda\x1a\xaf\xee\xf5\xf5\x96\xef\x62\xec\xc1\x18\xcc\x44\x6b\
+\xf9\x8c\x05\x9c\x18\xee\xd5\x8d\xdd\xf2\x4d\x00\x01\x8f\x8a\xce\
+\xf2\x65\xa0\x8d\x64\x56\xb4\x97\x6f\x03\x61\x0d\x26\x0a\xc7\x2d\
+\xff\x28\x00\x42\xa8\xb5\x66\x10\x80\x80\x3b\x69\xe5\x64\x4a\x03\
+\xa9\x84\xe0\x76\xa2\x03\x81\x50\x64\xd1\x94\xbd\xfb\xc2\xb2\xe5\
+\x07\xa1\x05\x49\x60\x1b\x5a\x4c\x06\x82\x08\xa9\x59\x4b\xb6\x80\
+\x21\x6a\x08\xf5\xa4\x88\xb2\x45\x5e\x25\x18\xa5\x2d\xd9\xda\x80\
+\x33\xce\x25\x79\xbe\x9a\x29\xc8\x56\x32\xc5\xd9\x80\x6c\x6b\xbb\
+\x07\xd9\x6a\x63\x85\x16\xf5\xbb\x2f\x2a\x58\xb7\x0f\x3a\xb8\xdb\
+\x64\x2d\xb1\x72\x05\x12\x64\x9d\x72\x96\x0d\xa8\x54\x1e\xf1\xae\
+\x40\x26\xf1\x69\x28\x51\xc1\xda\xb4\xaf\x66\xaa\xcc\xb7\xc4\xc1\
+\x4a\x44\x1b\x4c\x60\x7c\xd6\x2a\x69\xda\x60\x12\xe8\xa7\x0c\x48\
+\xb0\xeb\xa7\xc0\x1f\x5b\x46\xbb\x7e\x4a\x6b\xa2\xd9\xb1\x47\x44\
+\x5f\x74\xf1\xdc\x1e\x5c\xbc\x90\x5d\x4b\x52\x86\x19\xaf\x0c\xef\
+\xbc\x14\xd6\x3d\x19\x91\xb6\x6b\x49\x0a\x96\xee\x25\xf2\xb8\xf8\
+\x29\xc4\x28\x02\xae\x8b\x58\xf5\x1a\x96\x2f\xe9\xc1\xe5\x4b\xdd\
+\xd6\x3d\x0f\x38\xe4\x95\xa4\x1d\xa3\xc0\x0e\x60\x9d\x9c\xf3\xb6\
+\xee\x05\x08\x85\xf8\x65\x69\xa7\x7b\x13\x10\x4d\xb8\x79\x15\xba\
+\x97\x87\x75\xaf\x3a\xba\x57\x30\x75\x45\x6c\x1b\xf8\x40\x55\x56\
+\x29\xad\xda\x8b\x87\x2d\x13\xa6\x39\xac\x67\xf3\x44\x73\xf9\x0a\
+\x16\xff\x50\x10\x61\xcc\xf4\x53\xb4\xc7\xfa\x7a\xd8\xb6\x72\xa3\
+\x05\x1f\x8c\xa3\x92\x42\x14\x52\x13\x48\x74\x0c\x21\x06\x9c\x3e\
+\x90\x0c\x53\x82\xbc\xeb\x5a\xde\x49\x31\xac\xc3\x8b\xa7\x07\x10\
+\x9f\x29\xf1\x2a\xef\x5f\x47\xac\xcf\x77\x0e\x83\x71\x12\x77\xb8\
+\x83\x62\x35\x86\x5b\x66\x50\x9a\x8a\x69\xcb\x50\xf6\x46\xe0\xe6\
+\xe3\x69\x62\x3d\x94\x1a\x14\x72\xfd\x30\xc3\x4b\x17\xee\x5b\x7d\
+\xa1\x02\xaf\x7b\x2c\x6f\xe2\xe8\xf6\x4d\x2d\x17\xbc\x4e\x52\xf6\
+\xb3\x0b\x57\x91\xdb\x5b\x81\x38\x8b\x12\x42\xf9\xe2\x22\x49\x97\
+\x51\x5a\xbd\x52\xee\xa7\xf5\xaa\xdc\x7e\xe1\xde\x99\x62\x3e\x48\
+\xeb\xa4\xb3\xb9\x3a\x01\x9d\x7b\x6c\x64\xe8\x7d\x76\x15\x2e\x93\
+\x5b\x58\x60\xf7\xe5\x2f\x49\xb2\x69\xf6\x71\x0d\x30\x60\xcf\x33\
+\x85\xc8\x1f\x40\x16\x5f\x87\xf0\xe6\x2d\x0c\x44\x45\x40\x84\x32\
+\xbc\xff\xf2\x3a\x4d\x41\x99\xd3\x75\x78\x1f\xc1\xa2\xdc\xaf\xaa\
+\xff\xec\x2a\xb9\x5d\xa5\x28\x9c\xcb\x70\x5d\x4b\xa7\x6e\x8a\xaf\
+\xa6\x17\x17\x09\x0c\x9e\xa7\xd7\xbd\xd7\xcb\x64\x71\x8d\x77\xb2\
+\xa6\xd7\x05\x9c\xca\x9b\x40\x1e\xc7\x6d\xbc\x85\x65\x4e\xcb\xcb\
+\x43\x46\xf7\x96\x5b\x32\x54\xb7\x89\x4c\x5f\x9a\x25\xc7\x1d\x3a\
+\xf2\xde\xda\xca\x97\xf7\xe8\xfe\xba\xef\x70\x6d\xbe\xa8\x8b\x15\
+\x96\x88\xd9\x44\x79\xb8\x0c\xf3\xb0\x41\x47\x45\xc1\xbb\x3b\xb2\
+\xba\xbb\x93\x2e\x2f\xe7\xff\xf9\xfe\x2f\xf5\x4e\x7d\xb1\x98\xff\
+\x37\x49\x3f\x57\x60\x84\xfd\x25\x30\x84\x17\xc9\x35\xcc\xbd\x2e\
+\x1f\xe0\x95\xa0\xc5\x1c\xed\x26\xcc\xcf\xe3\x0d\x4c\x01\xaf\x7e\
+\xfd\xfe\x6e\xb3\x06\xa0\xd6\x2f\x5a\xcc\x78\xfd\xa7\xe9\xb4\xe8\
+\x36\x8d\x8a\xab\x5d\x83\xb7\xe1\x96\x8b\x4d\x8c\x8d\x66\x3f\xe4\
+\xf1\x7a\xfd\x37\x1c\xc4\xab\x28\x94\x9d\xc6\xf9\x3a\x3a\xff\xf3\
+\x32\xce\x47\xff\xc6\x1b\x4f\x6e\xf4\x82\xd8\xe2\x83\x55\x47\xe7\
+\x0c\x0c\x7b\x4a\x09\xfc\xe7\xd8\x1c\xad\xc5\xe5\x2e\xd7\x25\xe9\
+\xb9\x37\x4d\x14\xc7\x1f\x57\x75\x11\xa1\x3f\xf6\x1f\xb7\x4b\x68\
+\x95\x8d\xfe\x19\xaf\xb3\x2c\xd9\x0e\x4d\x00\xad\xb7\xdf\x8d\xe3\
+\xec\x8d\x88\x1d\x67\xd7\x17\x3f\x83\x87\x6c\x75\x80\xd2\xfa\x53\
+\xb8\xea\xcc\x02\xa9\xeb\xf8\x1c\x6f\x7c\x7d\x98\x95\x0f\x83\x1c\
+\xbb\x42\x38\x7d\x96\x82\xd6\xea\xd9\x4d\xac\x37\x07\x14\xc4\x3a\
+\x5e\x44\xdb\xec\x61\x2d\x0e\x5d\x52\x2c\xdb\x66\xa0\xe2\x0b\xf8\
+\xbe\x4c\x36\x61\xbc\x9d\xf5\x14\xba\x48\xb6\xe0\x85\x2f\xae\x4f\
+\x55\xc3\xdf\xc3\xcf\xd7\x17\xa3\x1f\xf2\x08\x02\x43\x7a\xaa\x12\
+\xfa\x63\x3a\x5e\x34\x03\xdf\x2c\x3e\x75\x97\xef\x59\xc6\xe9\x2b\
+\x6f\x8b\x76\x17\xa5\x80\xf6\xec\x51\xa2\xdd\x66\x6f\xff\x13\xed\
+\xd2\x64\x79\xed\xee\x05\xb6\x65\xfa\xf4\xbe\xbf\x8f\xb3\x42\x3c\
+\x5f\xa2\xef\x28\x8d\x6f\xdc\x0b\x14\x76\xe6\x57\x0c\x67\x8d\xc4\
+\xab\xb2\x9e\xe7\xaa\x3e\xcc\x2a\x67\xe6\x9e\x56\x8d\x93\x6b\x39\
+\xff\xda\x53\xae\xc3\x8b\x68\x7d\x36\xfe\x84\x2f\x47\xbd\xb7\xab\
+\x34\xb9\xde\x6d\x92\x65\x54\x36\xaf\x7c\xe3\xaa\x5a\x57\x59\xb0\
+\x5c\xc6\xd9\x0e\x18\xe6\xf1\x16\x13\x90\x56\x46\xb2\x92\xc4\xdb\
+\xc8\xe6\x03\xd7\x3b\x38\x93\xb0\x6f\x89\xa6\xac\xbc\xe1\x21\x8c\
+\x84\xec\x0d\x9f\x85\x80\x2c\x0d\x12\x8a\x89\xe0\xb0\x7d\x25\xdc\
+\xbe\x6b\xea\xb4\x29\x58\x61\x23\xdd\x7b\x0c\x91\x92\x60\x72\x6c\
+\xfc\xdb\x3a\x2e\x74\x4a\x69\x03\x18\xc3\x3f\x4e\xa8\xaf\xb0\x6a\
+\x13\x70\xa9\xbd\xea\x51\x7d\xdd\x15\xb6\x18\x16\xef\x53\xf9\xdd\
+\xb9\x52\x26\x0c\x2c\xfc\x92\x62\x2d\x85\xba\x3c\x0b\x49\x0e\x83\
+\xd4\xcf\xc8\xf7\xfe\x05\x9f\x4b\xf0\xd6\x73\xf0\xe3\xdf\xf5\x2e\
+\xd3\x30\xfd\xce\xbd\xf5\xea\xc9\xee\x31\xbd\x5e\x47\xf3\x6d\xb2\
+\xfd\x05\x72\x8f\xf7\x00\xb6\xe4\xb3\x7b\x8c\xca\xef\x45\x6c\x05\
+\xe6\xf2\x11\xbb\x05\xb5\xcd\x41\x69\xdb\xa5\x4f\xfc\x39\x89\xb7\
+\x73\x80\x63\x94\xbe\xdf\x84\xe9\xe7\x28\x2d\x7a\x29\xbe\x4f\xb3\
+\x3c\x4c\xf3\x16\x65\x13\x2f\x5b\xcf\xd1\x76\xd9\x1a\xd7\x75\xb5\
+\x8e\xe1\xd7\x5c\x54\xb4\x65\x08\xc1\x36\x4d\x01\x04\x3e\x27\x52\
+\x8b\x02\xf5\x9c\x54\xb4\x66\x91\x37\x71\x16\x5f\xc4\x6b\x7c\x70\
+\x5f\xd7\xd1\xfb\x36\x92\xde\x27\x37\x51\x7a\xb9\x4e\x6e\xab\xf7\
+\xbe\x21\xec\xc2\xfc\xca\xd3\x41\x9d\xfd\x01\x5c\x31\x3c\x42\x52\
+\xb2\x80\x9f\x8e\xf6\xb0\x91\x24\xd2\xd7\x37\x50\xff\x31\x9a\x32\
+\x0a\xda\xa6\x46\xe3\xd5\x22\x04\x92\x81\x6d\xe3\xe8\xe3\x1e\xba\
+\x47\xe5\x4c\x07\x4a\x12\x41\x87\x89\xd0\x83\x56\x81\x16\x42\x5a\
+\x01\x64\x13\x48\x49\x8c\x1a\x61\x3a\xa7\x0d\x15\x6a\xc2\x18\xc0\
+\xc5\x10\x2d\x2b\x1a\x37\x13\x63\x02\x21\x05\xe3\x12\x9a\x37\xd4\
+\x29\x58\x01\xa4\xce\x9c\xb0\xd1\x14\x4b\x1d\x52\x0a\xee\xcd\x4a\
+\xed\x99\xeb\x2f\xa3\x27\x20\xb5\x7f\x8d\xf1\x1b\x52\x9f\x8c\xd4\
+\x27\xea\x80\xd3\x6f\x3a\x38\x52\x07\x5d\x23\xaf\x43\x41\xc7\xc8\
+\x07\xe9\x1e\xd5\x33\xf2\x21\x22\xf6\xa0\x09\x0b\x28\x53\xd2\x33\
+\xf2\x29\xb5\x44\x00\x0b\x93\x9e\x95\x7b\x44\xdf\xcc\x3d\xb2\x6f\
+\xe7\x54\xe3\xb9\x16\x95\xba\x65\xe7\x83\xd3\x6d\xd9\x79\xe3\xea\
+\x5a\xa1\x6d\xaf\x93\x6c\x8e\x08\x57\xd5\xf6\xc7\x8b\xaf\x1d\xc4\
+\x36\x07\xbb\xfb\x42\x9a\x3b\x6f\xea\xa2\x34\x20\x1e\x4e\xa3\x9b\
+\x08\xe6\x50\xe1\x6e\xfe\x56\x53\xb1\xa0\xaa\x0d\x55\x12\x58\xf7\
+\xa3\x55\x17\xb3\x90\x74\xe5\x7b\x20\x3b\x00\xba\x7a\xba\x47\x83\
+\xaf\xdb\xa2\x5e\x43\xfb\x50\x13\x44\x84\x5b\xc6\x46\xc2\x65\xea\
+\x80\x15\x78\x2e\x95\x57\xd3\xaa\xf3\x0d\x90\x02\xe8\x9c\x7b\x85\
+\x4e\x20\x62\xa1\x83\xfb\x29\x05\x9e\x67\x56\x97\x68\x9a\xf3\xcc\
+\x3b\x3c\x36\xe7\x46\x5b\xae\x9b\x89\xa4\xf7\x35\xd5\xbf\xf8\x7e\
+\x48\x7d\xfb\xd5\x86\xe7\x64\x07\x9c\x4b\x57\x69\xc6\x98\x10\xdc\
+\x56\xdb\xbf\x94\xb2\x63\xe2\x69\x4a\x7b\x82\xa7\x18\x50\x92\xa0\
+\xbc\xa7\x24\x80\x97\x44\x4b\xea\x29\x09\xcf\x1c\xb4\x52\xc6\xf8\
+\x4a\x02\xa3\xe6\x8c\x43\x84\xf5\x95\xa4\x02\xc9\xb0\x13\xdd\x52\
+\x12\x09\xa4\x02\xc7\x60\xbc\xd4\x31\xbd\x6f\x91\x8f\x52\x53\xdb\
+\xca\xde\xca\x05\x7e\x7a\x36\xe5\xf1\x0c\x2a\x69\x20\x02\x74\xd1\
+\xfd\xd5\xad\xaa\x77\x17\xa4\x56\x1c\xd7\xde\xe5\xa3\x2a\x31\x67\
+\x41\x87\xbd\xb6\xae\x5e\x47\x77\xee\x50\xb7\x43\xbc\x1f\xba\xfd\
+\x52\x28\xce\x1a\xb0\x24\xe9\x9d\x2d\x14\x8a\xab\xc9\x27\xd8\x97\
+\x93\xc2\xb1\xa6\x34\x60\x8c\x78\x22\xf0\x6e\x58\x73\xc2\xbc\x22\
+\xdb\x92\xcc\xbb\x44\x50\xaa\x88\x81\x03\xa4\x82\x0a\xdd\xb7\x2d\
+\x2c\x55\x12\xad\x84\xaf\x22\x1b\x48\x0a\x01\x80\xb6\x1c\xa0\x06\
+\xaf\xa8\xa4\xf1\xf4\xef\x54\xd4\xd6\xcc\x63\x2c\x69\x40\x31\x0f\
+\x9b\x51\x73\xc1\xea\x75\x07\xa8\xfd\xa6\x24\xad\xee\xe9\x89\xeb\
+\x80\x80\x84\xa5\xec\xeb\x09\x34\x68\x99\x35\xad\x40\x25\x03\xc1\
+\x2d\x17\xfe\xd9\x72\x41\x24\x5a\x6b\xd9\x31\x25\xd8\x5a\x6b\x6b\
+\xbc\x03\xb9\xc2\x94\x6a\xf2\xa0\xe6\xda\xd1\x6c\x28\xf2\xe9\x76\
+\x90\x14\x9a\x31\xed\x39\xe5\x3b\x57\x0d\xd7\x96\x0a\xcf\x7d\x57\
+\x8b\xd2\x3d\x57\x62\x02\x2b\x34\xd7\xaa\x27\x2e\x48\xd8\x9a\xf6\
+\xbd\x8c\x9d\x12\x6d\xa5\x90\xb2\x74\xcd\x3e\x78\x8e\x89\x9b\x6d\
+\xdd\xb5\x6d\x9b\xb2\xaf\x67\xdb\xcf\xa1\x12\xde\xcb\x5b\x0a\x95\
+\xb8\xeb\x17\xac\xaf\x92\x1e\x60\x8f\x50\x8d\x57\xe2\x39\x3d\x35\
+\xc5\xfb\x2a\xfd\xd4\xf4\x41\xfb\x2f\xc3\xef\xb0\xce\x5e\x9f\xf9\
+\xef\x55\x25\xfe\x21\x36\x16\x0e\x78\xd7\x5e\x7b\x64\xa7\x77\x30\
+\x03\xa5\xbd\x43\x68\x54\x26\x5e\x3a\xa1\x9c\xf5\xb3\x5b\x5e\x9e\
+\xa5\xf6\xfc\x8c\x0d\x94\x45\x5d\xf2\x21\x65\xd2\xbd\xca\xdc\xab\
+\x44\x3c\x2f\x3e\x3e\x4f\xdd\x9f\x02\xbd\x3a\x63\x3b\x45\x02\x87\
+\x8a\x86\xbf\x0a\x09\x0c\x65\x7b\x3d\xe8\x60\xfa\x66\xb9\xb5\x7d\
+\xd7\xa1\x02\x6a\xbc\xa8\x53\xb8\x19\x2b\x39\x64\x1e\x6d\x87\x04\
+\x2e\x4a\x76\x1c\x17\xac\xbb\xed\xce\xee\x7d\x6a\xad\x1a\xbf\x70\
+\xd3\x2f\xdb\x18\xa3\xc0\x60\xd4\xfb\xf6\xdf\x8e\xec\xd7\x18\x63\
+\xa7\x6c\x89\xf7\xeb\xec\xa4\xad\xd5\x6f\xa5\x84\xe3\x0a\x38\x98\
+\x95\x50\xc3\x89\x9a\x70\x15\x30\x39\xfa\x34\x2a\x2f\xbb\x4d\xca\
+\x0b\x6e\x48\xc1\x7d\x56\x49\x71\xbc\x25\x97\xdf\xce\xab\x95\x54\
+\x95\x12\xc6\x68\x03\xb1\x87\xeb\x24\x07\x90\x41\x8f\x06\x04\x3f\
+\xad\x46\x62\x14\x6c\xb7\xc5\x37\x4c\x74\x30\x01\xd1\x50\x5a\x62\
+\x98\xd3\x38\xc8\x48\x89\xd1\xc7\x11\xa7\x81\xc1\x93\x27\x8e\x54\
+\x88\x6c\x92\x2a\x87\x02\x30\x5a\x62\x27\x78\x27\x90\x6a\xa6\x0d\
+\xd2\x24\x7a\x17\x36\xc1\x92\xba\x35\x46\x62\x35\x0e\xde\x63\x05\
+\xc0\xc1\x85\xc2\x9e\x5f\xb2\x11\x6c\x5c\xa4\x11\x56\xd3\x09\x97\
+\x81\x52\x5a\x08\x85\x43\x0b\xad\x18\xe5\x48\xc3\xc8\x27\x15\x36\
+\x1e\xa0\xe2\x0d\x2d\x4d\x25\x4e\x92\x42\x3f\x6e\x92\x43\x13\x1f\
+\x06\x26\x79\x1e\x60\x42\x8c\xa7\xca\x50\x43\xf5\x73\xed\x50\x45\
+\x77\x87\x5a\xed\x88\xec\x2b\xa8\xfe\x38\x74\x40\xb2\x22\x94\xc1\
+\xd3\x95\xf2\xf7\xc7\x82\x04\x5b\x4b\x81\x34\x4d\x0c\xea\x07\x69\
+\x9a\xc0\x8e\x15\x69\x16\xb7\xfa\xca\x6f\x5a\x37\xd3\xd2\xe0\x23\
+\x61\x5a\x17\x0c\xdc\x50\x40\x16\x36\x82\x0c\x47\xea\x82\x56\xb6\
+\xf9\x54\x3f\x89\x80\xd7\x43\x97\xcf\x86\x0a\xc6\x6c\x39\x19\x41\
+\x81\x24\x08\x01\x00\xd2\x66\x5c\x24\xa1\x4f\x2b\xda\x69\x00\xa2\
+\x72\x34\xd8\xdd\x70\x59\xb0\xe1\xa6\x0e\x69\x10\x87\x60\xb3\xd6\
+\x6a\x8a\xe3\xc0\x0c\xa4\x0b\x7f\x15\xe1\xa3\x23\xd0\xaa\x15\x4e\
+\x14\x30\x6a\x31\xa5\x76\x04\xa9\xa5\xa4\x8e\xd6\x69\x63\xf0\x0a\
+\xa9\x41\x92\x60\x4a\x53\x8e\x34\x3c\xc0\x92\xae\x23\x09\xb6\xa4\
+\x98\xa3\xb9\x66\x95\xa4\xc1\x52\x28\xf8\x5d\x36\x72\xf9\xbf\xb5\
+\x80\x70\xa0\x09\xc3\x38\xc3\xbe\xc0\x8c\x34\x50\x1d\xad\x98\x24\
+\xde\x70\x2e\x1a\x0a\xe4\x47\xb1\x18\xc9\x25\x17\xc6\x63\xb2\x4c\
+\x00\xc1\x6f\x66\xdd\x80\x9f\x6a\x0a\x64\xa8\x75\x3f\xe5\xb3\x80\
+\x19\x12\x59\x50\x70\x95\x48\xd3\x84\x51\xa1\x7d\xae\x7a\xde\xc5\
+\x32\x81\x04\xe6\x27\x39\x73\x32\x29\x96\x89\x34\x43\x89\x43\x8d\
+\x2c\x97\x6a\xc1\xb2\xea\x01\x35\x20\xca\x20\x89\x4b\xc9\x4c\xd1\
+\x12\x8c\xdf\xb5\xe4\x46\x52\x42\x9c\x14\xb0\x55\xad\x5f\x78\x24\
+\x02\x19\x04\x85\xcd\xb4\x7b\x86\xfd\x12\x77\x14\x0e\x1b\xf1\x62\
+\xe6\xd2\x8d\x62\x3d\xb5\xc0\x08\x94\x09\x24\x29\x86\x87\x84\x8e\
+\x06\x72\x36\xd8\x12\x86\x82\x9c\xdb\x0d\xa6\x5c\x3b\xd9\xcc\x52\
+\x01\x00\xa5\x45\x9a\x80\xcd\x6c\x21\x4c\xa5\x39\x76\x25\xc1\x21\
+\xca\x62\x8e\xe5\xe2\x64\x3d\x4b\x90\x18\x9e\x35\x00\x49\x43\xdf\
+\xc5\xe2\xa0\x95\x12\x8e\x66\xd0\xa5\x56\x30\x80\x67\x5b\xcf\xb3\
+\x84\x0a\xec\x03\xf0\x0e\x61\x31\xcf\x12\x52\x78\x64\x69\x0d\xa4\
+\xb3\x15\xec\x6c\x50\x0f\x57\x22\x13\x29\xe8\x71\x6d\x83\xde\x82\
+\xa9\x42\x77\xf1\x04\x71\xbe\xcc\x02\xaa\x2e\xf0\xd9\x10\xa6\x4a\
+\x02\x3c\xc2\x62\xc1\x0f\x7b\x3d\x22\xad\xdd\x02\xe4\x42\x00\xb2\
+\xcd\xbc\x80\xc6\xa8\x91\x4e\x3f\xd5\xfc\x91\xe6\xaf\x11\x9f\x15\
+\x20\x95\x79\x72\x40\x9a\xd5\x56\x31\x4f\x5e\x40\x2b\x95\x28\xeb\
+\x01\x39\x53\xca\x93\x3b\x52\x14\x35\x82\x7a\xda\x41\x9a\xf6\x55\
+\x08\x04\xf0\x17\x9c\x0a\x4f\xcf\x48\xc3\xf2\x8a\xf2\xf0\x80\xb4\
+\x52\x8b\xa2\x9e\x29\xec\xab\xc1\xe7\x78\xd8\x42\x9a\x75\xfa\x29\
+\xf0\x07\xcf\x3e\x3c\xf1\x91\x32\xe3\x80\x56\x21\x18\x69\x60\x1a\
+\x82\x79\x48\x47\x5a\xb9\xba\x66\x9a\xc0\xa2\x5d\xcb\xca\x6a\x90\
+\x26\x35\xf8\x2b\xcf\xba\x90\x56\x28\xae\x34\x41\x47\x10\x10\x60\
+\x3c\x3b\xf5\x98\x4a\x6b\xf6\x28\x95\xfe\xdd\x73\xe5\x11\x3e\xfa\
+\x94\xd2\x6b\x20\x45\x73\x42\xac\xe7\x5b\x1a\x2e\xd3\xcc\x1b\x2c\
+\x56\xb3\xda\x4b\x39\x26\x6e\x0c\x75\x5e\xb0\xf2\x66\x05\x0c\x1a\
+\x8f\xd7\x40\xa5\xf1\x8a\x0d\xa4\x1a\xef\x59\xa2\x4e\x78\x4a\x29\
+\x91\xd9\x78\xe1\x1a\xbc\x25\x57\x05\xee\xda\xb7\xe3\x41\x23\x6f\
+\x75\xe3\x28\xa2\x6a\x53\xc4\x04\xa4\x01\x8a\x8d\xf0\x62\x87\xdf\
+\xb2\xd4\xb1\x23\x71\x69\xfd\x48\x84\xb4\x62\xc4\x2a\x5c\x79\x94\
+\x7a\x0a\xce\x10\x83\xaa\x0f\x40\xae\x11\x5e\x40\x74\xfd\x32\x80\
+\x49\x1d\x36\xeb\xc1\x9b\x46\xcc\x4a\xa3\xbc\xd0\x5b\x4c\x06\xfc\
+\x8a\x17\xa2\xbd\x66\x95\xb4\x8b\xa5\x09\xed\xc6\x83\xd8\xac\xcb\
+\xe5\x12\x0e\xf9\xb0\xa3\xc1\x76\xae\x9c\x43\xdd\xcc\x45\xe5\x6e\
+\x3e\x80\x93\x55\x5e\x8b\x22\xe0\x82\x96\xbd\x9e\x7b\xa9\x44\x27\
+\x59\x2b\xca\x19\x9c\xed\xc9\xc5\x1e\xba\x9f\xd2\xe4\x7b\x5e\xd9\
+\xbc\xc8\x70\x51\x74\x56\x52\x8b\x7f\x72\x08\x23\x93\x12\x31\x46\
+\x63\x85\x16\x89\xe0\x09\x18\x5a\x91\x0a\xc0\x3b\x6b\x03\x99\xa7\
+\xc1\x8c\x92\x60\xd2\xab\xc1\x3c\x01\xb5\xc2\x6d\x7d\x88\x84\x3d\
+\x2e\xb6\x86\x30\x01\x42\x15\x14\xa9\x12\x94\x6b\x15\x66\xb8\x5c\
+\x80\xa9\x72\xa4\x69\x0b\x41\x4c\xe2\xd0\x0a\xff\xf4\xd1\x65\xc2\
+\x16\xec\xde\x96\xc9\x75\x8f\x8a\x34\xc8\x8e\xb9\x9e\x40\x4a\x6d\
+\x29\x23\x66\x68\xde\x9e\xc8\xfa\xc9\x29\xc8\x1e\x92\x53\x33\xb4\
+\x7d\x7a\x7a\xaa\x2a\xf5\x9e\x54\xd5\x9c\x52\x01\xf9\xb5\xef\x9c\
+\x8e\x29\x3a\x11\x74\xb8\xc2\x95\xb7\x07\x34\x71\x6a\xb1\xfb\x88\
+\x1b\x28\xbf\x61\x79\xf7\xfd\x83\x77\x74\x5f\x1d\x96\xd1\x5e\x69\
+\xab\x5d\x6f\x6d\x95\xb3\xe8\x9e\xd3\x63\x7c\x65\xf7\x34\xeb\x77\
+\x5b\x0d\xdd\x3f\x27\x82\x19\xf2\xfd\x36\xfa\x0d\x19\xdf\x2c\xf1\
+\xd7\x29\xef\x01\x9c\xcb\x7e\xad\xf9\x14\x4b\x64\x7b\xae\x03\xe0\
+\x2b\x7d\xb2\x25\xf6\xcb\xe1\x30\x43\xfd\xcd\x12\xbf\x59\xe2\x6f\
+\x4d\xde\x03\x38\xb7\x3d\x4b\xec\x1f\x2e\x1e\xb0\x44\x4e\xeb\xbf\
+\x06\x5c\x9d\xbf\xf9\x80\x7f\x72\x75\xfe\xe6\xff\x72\x18\xf4\xe3\
+\
+\x00\x00\x0f\x62\
+\x00\
+\x00\x5c\x71\x78\x9c\xed\x5c\x5b\x6f\xdb\x48\xb2\x7e\xcf\xaf\xd0\
+\x91\x71\x30\x63\x1c\x8b\xea\x3b\x9b\xf2\x65\xb1\x49\x90\xd9\x59\
+\x64\x70\x16\x93\x0c\xf6\x71\x41\x91\x94\xcd\x09\x25\x0a\x24\xe5\
+\x4b\x7e\xfd\x56\x37\x6f\xdd\x54\xcb\x96\x1c\xc7\x13\x03\x96\x90\
+\x58\xaa\xae\xbe\x55\x7d\x55\x5d\xd5\xdd\xd4\xd9\xdf\x6e\x97\xd9\
+\xe8\x3a\x29\xca\x34\x5f\x9d\x8f\xb1\x87\xc6\xa3\x64\x15\xe5\x71\
+\xba\xba\x3c\x1f\xff\xf1\xf9\xc3\x44\x8e\x47\x65\x15\xae\xe2\x30\
+\xcb\x57\xc9\xf9\x78\x95\x8f\xff\x76\xf1\xe6\xec\x7f\x26\x93\xd1\
+\xbb\x22\x09\xab\x24\x1e\xdd\xa4\xd5\xd5\xe8\xd7\xd5\x97\x32\x0a\
+\xd7\xc9\xe8\xe7\xab\xaa\x5a\xcf\xa6\xd3\x9b\x9b\x1b\x2f\x6d\x88\
+\x5e\x5e\x5c\x4e\x8f\x47\x93\xc9\xc5\x9b\x37\x67\xe5\xf5\xe5\x9b\
+\xd1\x68\x04\xfd\xae\xca\x59\x1c\x9d\x8f\x9b\x0a\xeb\x4d\x91\x69\
+\xc6\x38\x9a\x26\x59\xb2\x4c\x56\x55\x39\xc5\x1e\x9e\x8e\x7b\xf6\
+\xa8\x67\x8f\x54\xef\xe9\x75\x12\xe5\xcb\x65\xbe\x2a\x75\xcd\x55\
+\x79\x64\x30\x17\xf1\xa2\xe3\x56\xa3\xb9\xa1\x9a\x09\x07\x41\x30\
+\x45\x64\x4a\xc8\x04\x38\x26\xe5\xdd\xaa\x0a\x6f\x27\x76\x55\x18\
+\xa3\xab\x2a\x41\x08\x4d\xa1\xac\xe7\xdc\x8f\x6b\x76\x9b\x81\x28\
+\x76\x0e\x46\x97\x9a\xbd\x83\xf8\xd7\xf0\xaf\xab\xd0\x12\xbc\x32\
+\xdf\x14\x51\xb2\x80\x9a\x89\xb7\x4a\xaa\xe9\xfb\xcf\xef\xbb\xc2\
+\x09\xf2\xe2\x2a\x36\x9a\x69\xa5\x6f\xf5\x6b\xa9\x64\x15\x2e\x93\
+\x72\x1d\x46\x49\x39\x6d\xe9\xba\xfe\x4d\x1a\x57\x57\xe7\x63\x26\
+\x3d\xa4\x5f\xeb\x5b\x4d\xbe\x4a\xd2\xcb\xab\x6a\x9b\x9e\xc6\xe7\
+\x63\x98\x2f\x61\x81\xfe\xda\x0e\x68\xd6\xc1\x0a\x79\x94\xd4\x9c\
+\x4d\x2f\x66\x51\x40\x3c\x3a\xfa\x99\x30\xc4\x39\x13\x27\x23\x82\
+\xb0\x9c\x20\x3a\xc1\xf8\xd8\x6e\x2d\xce\x23\x35\xde\xf3\xf1\x3a\
+\x5e\x78\xad\x78\xbb\x06\xf3\x4d\xb5\xde\x54\xff\x49\x6e\xab\x64\
+\x55\xb7\x0c\x13\x34\x66\xab\x8b\x55\x35\xcf\x9a\xa9\x81\x7c\x3c\
+\xbe\x00\xca\x59\x9c\x2c\x4a\x55\x52\x4f\x4b\x7d\xa3\xba\x00\x8a\
+\xba\xce\xd6\x50\x6b\x9d\x44\x0a\x7e\x35\xab\x31\xcc\xea\x4e\x49\
+\xdc\x66\xa5\xb5\x5a\x46\x96\x04\xd6\xff\xb9\x85\xe9\x8f\x66\x23\
+\xc2\xe0\x3f\xec\xe4\xb8\xab\x39\x30\xc8\x1a\xfe\x20\x27\xcf\x57\
+\xa5\x90\x7b\x9a\x69\x46\x30\xc9\x8b\xf4\x32\x85\x99\xd6\x7c\xc2\
+\x66\x86\xa9\x1a\x93\x22\x04\xac\x7e\xda\xcc\x1a\xc0\x99\x84\xc5\
+\x2f\x45\x18\xa7\x60\x92\x66\x0d\xbb\x84\x23\x26\x1b\x49\x41\xad\
+\xb2\xca\xd7\x2d\x2f\x48\xa7\xba\xcb\x40\x2a\x8a\x38\x89\xf2\x2c\
+\x2f\x66\xf3\x2c\x8c\xbe\x9c\x6a\x42\x0e\x08\x4c\xab\xbb\x19\x3a\
+\x1d\xf7\x35\xf2\xc5\xa2\x4c\x00\x6b\xc8\xa0\x69\x9c\x41\x0d\x8e\
+\x38\xea\xc6\xb7\xd5\x97\xc1\x25\x5c\x0d\x7a\x7c\x7c\xe0\xc0\xf0\
+\xe9\xee\xde\x1e\x3f\x33\xec\x9e\x19\xe9\x25\x3f\xb5\x05\x7c\xbf\
+\x3e\x5a\x75\xc3\x20\x32\xd0\xe2\xf9\x38\xcc\x6e\xc2\xbb\x72\xbc\
+\x5b\x61\x8c\x33\xb2\xbf\xc2\x8e\x6a\x93\xdf\x92\xcc\x7e\x2a\x83\
+\xbe\xd8\x21\x42\x74\xf6\xb6\xb7\x18\xa1\x37\xf1\x90\x18\xd5\xb7\
+\x30\x3b\x58\x8c\xda\x57\xcf\xae\x8a\x04\xd6\x96\x23\x87\x3c\x4d\
+\x71\xdb\x5d\x40\xb1\xec\x8a\xa3\x5b\x65\x88\x1e\x45\xc2\x0f\x7a\
+\x3c\x46\x60\xef\x8c\x78\xc8\xf7\x83\x9e\x75\xe1\x64\x5d\xb8\x58\
+\x0b\x10\x07\xf7\x24\xc1\x1c\xb3\x8e\x78\xd9\xf4\xff\xb9\x08\x57\
+\x25\x2c\x1d\xcb\xf3\xf1\x32\xac\x8a\xf4\xf6\x67\xdc\xb8\xf1\x13\
+\xe4\xf8\x40\x24\x0b\xb0\x38\x99\xf8\x9e\x8f\x08\xf6\x71\x32\x81\
+\x6f\x14\x18\x64\x40\xe4\xf1\x56\xeb\x7f\xac\xd2\x0a\x56\xc3\x4d\
+\x99\x14\x9f\xd4\x8a\xf2\xff\xab\x3f\xca\xe4\x70\x27\xc2\x30\x11\
+\xbb\x30\xd9\x69\x17\x13\xe9\x34\xec\x7a\xec\xe8\x5e\xf3\x3e\x5a\
+\xe8\xd7\x00\xc6\x6d\xd5\x7b\x0c\xbd\xef\x9d\x22\x17\x0c\x1f\xdf\
+\x3b\xf2\xb0\x60\x01\x93\x8c\x9f\x3e\xd2\xf6\xb7\xc5\xe8\x83\x87\
+\x7c\x68\x22\x3e\x27\x0f\x58\xef\xbe\xe2\xdb\x47\x6c\x3e\x77\x2b\
+\x8d\xfa\x01\xc5\x88\xb2\x07\xba\x4d\xd4\xfb\x1b\xb4\xe6\x73\xf6\
+\x78\xad\xe1\x58\xbd\x1f\xec\xfd\x1b\x95\x46\x03\xb1\xd3\x1f\xb7\
+\xf3\x00\x1e\xd7\x3c\xf6\xc4\x7e\x4c\x93\xe0\x1b\xb1\xef\xee\x1d\
+\x73\x8e\x7d\xc2\xf0\x77\xee\x9e\x32\xf7\x8a\x0e\x68\xdf\x63\xf6\
+\x0c\xf9\x2c\xfc\x06\x0c\x81\xec\x5d\xdd\xef\x89\x21\x2a\x98\x14\
+\xd1\xf7\xc6\x10\xe6\x62\x37\x88\x0e\xf7\x86\xfb\x21\xad\x15\x90\
+\xea\xfc\xb0\x55\x7e\x21\xd5\xfb\x80\xee\x5d\xc2\x36\xbb\x7f\xe4\
+\xb2\x7f\xff\x2a\x66\xae\xb9\x82\x79\x1c\x16\x62\x7b\x75\x46\x1e\
+\x2c\x8a\xd8\x5c\x86\xb9\x47\xb8\x6f\xad\xeb\xc3\x8a\x91\xa3\xa2\
+\x9a\x49\x98\x5e\x16\x31\x7d\xc8\x0f\x80\xc1\xf9\xf4\x7e\xc0\x7d\
+\x40\xea\xed\xf4\xf0\x0f\x42\x5d\x35\x7f\x7f\x98\x7c\x14\x84\xea\
+\xfd\x28\xd5\xf5\x2a\xb2\xb5\xf1\x44\x2a\xc2\x58\x89\x5a\xb2\x7d\
+\x74\x24\x2c\x1d\x6d\xd5\xbc\x57\x49\x0f\x3a\x6b\x90\xa2\xe5\x31\
+\x9e\x5e\x49\x42\xfe\x55\x4a\xda\xd7\x21\x11\x11\x1c\xe0\x8e\x42\
+\xaa\xde\x4f\xe4\x8e\x88\x7f\x8f\x10\x5d\xeb\x43\xa4\xde\x4f\xe4\
+\x8c\x88\x8f\x9f\xca\xa7\x13\x7e\x88\x08\x17\xa1\x7a\x3f\x95\x08\
+\xc5\x61\x22\x9c\xeb\xd7\x53\x89\x50\x3c\x28\x42\xb7\xab\x00\xdb\
+\xa6\x90\xb6\x40\x48\x82\xa9\xe5\x19\x28\x10\x05\x64\x0f\xdc\x72\
+\x0d\x12\x32\x26\xc6\x70\x80\x2c\x5f\xb0\xcd\x1b\x39\x79\x77\xa7\
+\x57\xc8\x0b\x84\x24\x3e\x75\xa4\x57\x30\x6d\x4a\x7c\xe1\x9f\x50\
+\x8f\x72\xca\xb9\xe2\x11\x4c\x30\xe6\xef\x9b\x59\xed\xce\x33\x61\
+\x19\x34\xdc\xda\x3d\xf9\xaa\x32\xcd\xae\x99\x5d\x79\x6f\xa7\x80\
+\x9d\xa2\x96\x02\x32\x44\x48\x5e\x90\x2d\x6a\xee\xf9\x54\x40\x06\
+\x69\x89\x9a\x52\x90\x89\xb0\x96\x41\x27\x6f\xe4\xe4\x75\x88\x1a\
+\x06\x9d\x25\x5a\xd2\x88\x05\x54\xc9\x95\x61\x4c\xc9\xd3\x48\x51\
+\xee\x25\x45\xfe\x24\x52\xa4\x12\x82\x68\x29\x06\x19\xbe\xef\x11\
+\xe1\xcb\x40\xf8\x03\xc0\x62\x46\xad\xb5\x25\x72\xf2\x46\x4e\xde\
+\x1f\x11\xb0\x62\x2f\x51\xd7\xc1\xed\xb7\x0a\xfb\xb0\x2d\x9e\x66\
+\xa5\xdf\x3d\x7a\x42\x24\x3d\x50\x04\xf7\x69\x80\x90\xc0\x47\x2e\
+\x0d\x74\x45\xcc\x13\x98\x72\x12\x80\x2a\x02\x3f\x90\xc8\xd8\x8c\
+\x71\x85\x2b\xce\xb8\xc6\x15\x11\x39\x43\xa7\x2e\x4c\x7a\x7a\xa1\
+\xd2\xfb\x85\xca\x7f\x74\xa1\xee\x93\x09\xb8\x32\x86\x2e\x3b\xe8\
+\x44\xba\x48\xb3\x2a\x29\xf6\x16\x65\xb3\xee\xea\x25\x77\x92\xae\
+\xa0\xea\x3a\xcf\xc2\x2a\xcd\x57\x93\xba\xa5\x72\x56\xfe\xfe\xcb\
+\x5b\x4b\xbc\x75\x01\x97\xac\x97\x3a\x0c\x77\x82\x3c\x4a\x39\x82\
+\xe5\xac\x77\x1a\xcd\xd9\x0f\xf6\x84\x8f\x10\x95\xfd\x5c\xee\x34\
+\x3f\xb8\x69\x2c\x11\xee\x2d\xa2\x3d\x14\x22\x1e\x95\x84\x0a\x64\
+\x44\xc5\x8b\xe4\x97\x70\x53\x96\x69\xb8\x7a\x9b\x6d\xba\xf9\xed\
+\x31\x43\x35\xc7\xf8\x7d\x72\x9d\xea\x59\xe9\xb5\x18\x81\x6b\xa3\
+\x66\xc6\xa3\x67\x65\x75\x00\xb3\xe3\x46\xc0\x50\x4f\x59\x9f\xe9\
+\x4c\xd5\x31\x8e\xfe\xd4\x1d\xd3\xa8\xa3\xa4\xf8\x3a\x4d\x6e\xde\
+\xd8\x43\x2a\xaf\xf2\x9b\x75\x78\x99\x94\x57\x61\x9c\xdf\x40\x17\
+\x61\xd6\x81\x4c\x75\x39\x0f\xbb\xaf\x8a\x4d\x2b\x01\x10\x5d\xe7\
+\xd1\x4d\xc1\x3c\x2f\xe2\xa4\x68\x8b\x84\x7e\x59\x45\x4d\x68\x54\
+\x9f\xb7\x0e\x06\xa0\x5a\xed\xca\x91\xbb\xbc\x1d\x1c\x19\x16\x7e\
+\xcd\x73\xc0\xbd\x1c\x92\xf5\x72\x1a\x78\x92\xc3\xe2\xc8\xb6\x0a\
+\xf5\xda\x21\x54\x61\x40\xb7\x0a\x37\x45\x01\x46\x35\xc9\xc2\xbb\
+\x04\x26\xa3\xff\xb4\x96\xa9\x44\x75\x59\x68\x3d\x98\x42\x6a\xab\
+\xaa\xa2\xc9\x7c\x9e\x43\xdf\x55\xb1\xd9\x2a\x8e\xf3\x68\xa3\xce\
+\x78\x27\x9b\xda\xac\x9b\xb3\x44\x83\xe3\x26\x5d\xc1\x2c\x27\x2d\
+\x20\x03\xb2\x25\x8b\x86\xa3\x85\x20\x46\x84\xef\x60\xb9\xed\x37\
+\x36\x87\x45\x77\xbb\x8b\x96\xe1\x6d\xba\x4c\xbf\x26\xb1\x3a\x66\
+\xa8\x91\x75\xb6\x4c\xaa\x30\x0e\xab\xb0\x87\x44\x4b\x61\xed\x39\
+\x61\x11\x2f\x66\xbf\xbf\xff\xd0\xd9\x41\x14\xcd\xfe\x9d\x17\x5f\
+\x7a\xec\x2a\x86\x70\x9e\x6f\x60\xcc\x9d\xb5\xa8\xa3\xc7\x68\xa6\
+\x1c\x57\x58\x5d\xa4\x4b\xd0\xb2\x3a\x43\xfe\xbf\xdb\x65\x06\xf0\
+\xed\x0a\x2c\x66\x75\xd4\xd8\x37\x5a\x37\x5b\x24\xf5\x19\xb1\xf3\
+\x58\x3d\x8e\x96\xa9\xaa\x34\xfd\x54\xa5\x59\xf6\xab\xea\xc4\x08\
+\xef\x9b\x46\xd3\x2a\x4b\x2e\x74\x9f\xf5\x47\xab\x54\x9f\xba\xe7\
+\xc5\x85\xd1\xad\x9a\xde\xdf\x2f\xbb\x98\x7c\xbb\xad\x7f\x86\x5f\
+\x36\xf3\xd1\xa7\x2a\x81\xc5\xbc\x70\x35\xac\x2c\x74\xbb\x11\xcd\
+\xb9\xd5\x9f\x6a\xb6\x9e\xe1\x45\x33\xc1\x3f\xd3\xe5\x32\x8c\xbc\
+\xe5\xa6\x4c\xa3\xab\x30\xcb\xbc\xe8\xab\xae\xda\x70\xd9\x35\x37\
+\xf3\x3f\xc1\xe1\x58\x5d\x2b\xa9\xbd\x0d\x2f\x07\xa3\x57\xd4\x2c\
+\xbd\xf8\xc7\xe7\xdf\x3e\x42\x06\x5c\x7f\x71\x72\x5c\x81\x3c\x8b\
+\x2a\xb9\xad\xee\x67\xbb\x49\xe6\x2e\x86\x9a\x66\x75\x5f\x0f\x7e\
+\x38\x50\x25\xe5\x2c\x8d\x92\x55\xf9\xb0\xca\x5d\x57\x23\x9a\xba\
+\x25\xe0\x61\x0e\x9f\xe3\x7c\x19\xa6\xab\xa9\x99\xdc\x4d\x1b\x98\
+\x9a\xb0\xfd\x38\xec\xd1\x40\xee\xe1\x9d\xd9\xb3\x01\xb1\x01\x1a\
+\xcb\x47\xcd\x66\x55\x1e\xfd\x9e\xac\x8b\x3c\xde\x44\x6a\x85\xb0\
+\x41\xfc\xed\x6d\xbf\x4f\x4b\x88\x1c\xe6\x9b\xef\xd2\x76\x52\xa4\
+\xd7\xba\x40\x09\xbb\x1c\x6a\xa0\x91\x78\xb7\xf7\xd2\xbb\x92\xb3\
+\x69\xeb\x68\xf4\xb7\xcb\x81\xcb\xca\xc2\x79\x92\x9d\x8f\x3f\xe9\
+\xa5\xc1\x58\xb0\xb4\xcb\x16\xdb\xce\x39\xdf\xac\x97\x79\x9c\x34\
+\x0c\xad\x77\xbb\x1c\x54\xc4\xc3\x8a\x4d\x37\x6f\x43\x97\xc3\x1f\
+\xb4\xd9\x2c\x13\x75\xb8\x12\xa7\xe5\x1a\xc8\xb3\x74\xa5\x82\xfa\
+\xce\x55\x02\xc8\xbb\xc0\x48\x2f\x88\x98\x05\x88\x49\x61\x86\x1d\
+\xb4\x4e\x35\x8c\xd8\x1f\xdc\xb9\xf0\x04\x82\x44\xc4\x38\x0a\xec\
+\xae\xa7\xa8\x3b\x25\x90\x0e\xb2\x61\x4c\x43\x99\x27\xf5\x51\x81\
+\x1d\x79\xc2\x10\x30\xa7\x41\x1f\xe9\x98\x01\x56\x77\x12\x0d\xe1\
+\x44\x36\x03\x5f\xfa\xf3\x91\x23\x51\x3c\xd6\xc5\x8e\x2d\x0f\x4d\
+\x2e\x36\x59\x32\x5b\xe5\xab\xaf\xb0\xf2\x9f\x02\xb2\xf2\x2f\xc9\
+\xae\x96\xc4\x71\xc3\x50\x2f\x7b\x46\x4b\x0d\x59\x09\x0f\xa4\x3d\
+\x03\x59\xaf\x62\x93\xf8\x67\x9e\xae\x6c\x2a\xa0\x34\x29\x32\x58\
+\xc0\xaa\x19\x1b\x36\x13\x87\xb0\x7a\xeb\x3d\x98\x19\x1a\x96\x6d\
+\xcf\x62\x19\x16\x5f\x92\x42\x4d\x21\x69\x3e\x4f\xca\x2a\x2c\x2a\
+\x8b\xb2\x4c\x63\xeb\x7b\xb2\x6a\xbe\x5f\xa7\x65\x3a\x4f\x33\xd5\
+\xa4\xfe\x98\x25\xa7\x2d\x18\xe6\x59\x1e\x7d\x39\xcd\xaf\x93\x62\
+\x91\xe5\x37\x6d\xb1\x91\x6c\x98\xf0\xb8\xd5\x27\x4d\x1a\x1e\xc6\
+\xde\x7a\x71\xe7\x24\xab\xe3\x71\x8f\x4b\x1a\x0c\x60\x03\x91\x8e\
+\x10\x88\xd3\x6d\xd8\x40\x06\x0e\xcc\x54\x6e\xc3\x86\x78\xbe\xcf\
+\xa5\xf4\x1d\xb0\x81\xb6\xf6\x80\x8d\x16\xc3\xd3\x20\x44\xc8\x57\
+\x84\x98\x08\xb9\x34\x75\x72\x49\xd4\x9e\x6f\x4b\xa9\xfa\x4c\x50\
+\x7f\x84\x1c\x49\x6d\x15\xd5\xdb\x16\x27\x13\x48\x2a\x02\x95\x53\
+\x24\x13\x72\xdc\xe7\x2c\x5d\x7b\x56\xfd\x83\x32\xc9\x00\x32\x27\
+\x89\xe1\x03\x61\x2c\xf0\x8d\xbd\xa8\x0e\x22\x1a\x14\xed\xd9\xdb\
+\xa1\xb8\x38\xb2\x75\xe1\xd2\xe1\x20\x4d\xba\xc4\x8c\x21\x73\xf5\
+\x75\xe7\xf0\xea\xb5\x5f\xae\xad\x5e\xe6\x76\x01\xb2\x4b\xba\x44\
+\x18\x05\x81\x55\xd2\xee\x26\x0c\xc6\x68\x6f\x52\x0c\x4a\x76\x36\
+\xe6\xd8\x48\x62\xc6\x85\x26\x3d\x51\x7b\xc3\xba\xad\xa5\x0f\x4f\
+\x18\x63\x63\xbb\x68\x9f\xe3\x19\xf5\x72\x1d\xd1\x3c\xdc\x9b\x78\
+\xb8\x37\xe6\xab\xf7\x8e\xde\xb0\x1d\x88\x38\x4f\x65\x74\xc9\x3a\
+\xac\xae\x86\x72\x52\x34\x18\x83\xb4\xda\x06\xfa\x6f\x23\x42\x3d\
+\x46\xa4\xde\xe2\xc3\xd4\x43\x90\xf3\xa3\xd1\x3b\x8b\xca\x3d\xc4\
+\x28\x50\x09\xf6\x64\x4b\x83\xc5\x97\x11\xa0\x61\x95\x54\x72\x9b\
+\xf6\x6e\x84\x7d\x4f\x4a\x3c\xe0\x14\x1e\x91\xa4\x6f\x71\x48\xeb\
+\xfb\x36\xa9\x60\x0e\x81\x50\x9c\xaa\xc5\x9a\x86\x02\x0f\xac\xca\
+\xee\xbb\xa3\xbd\x33\x47\xd9\x51\xcd\xd9\xa8\x16\x87\xb4\xb6\xef\
+\xaf\x23\x4b\x3e\x9d\x86\xb4\xd9\x29\x47\x65\xab\xe0\xa9\xac\xa8\
+\xd9\x20\x42\xe4\x30\x2b\xf2\x9d\x56\xe4\x6e\xec\x30\x2b\xe2\x68\
+\x7f\x2b\xe2\xe4\x39\xad\x88\xef\x61\xb3\xdf\xdb\x8a\xb8\xb8\xcf\
+\x8a\x44\x03\x26\xdb\x8a\x44\x63\x44\xa6\x15\x09\x65\x1a\x9a\xd6\
+\x23\xb9\xa7\x99\x56\x64\x70\x76\xb6\xd1\xb7\x68\xd0\x8c\xbe\x0d\
+\x6a\x63\x44\xa6\x15\xf1\xc6\x34\xcc\xbe\x7b\x9a\x69\x45\x3d\xd5\
+\x98\x4d\x63\x44\xc8\x39\xef\x43\xac\xe8\x6c\xda\x25\xbe\x03\x89\
+\x77\xf2\xe6\xdc\x37\xa1\xa3\xc5\x1d\x78\x41\xc0\x11\x18\xf8\x09\
+\x81\x8f\x9c\x50\x22\x60\xd0\x3d\x95\x22\x4f\x5d\x27\xa7\x08\x68\
+\x82\xf8\x90\x4e\x60\x45\xf3\x7d\x10\x09\x07\x1a\xf6\x61\xd4\xc4\
+\xa4\xbd\x1b\x49\xcf\x27\x48\x32\x49\x0d\xaa\x6c\x0e\x3b\x48\xd3\
+\x22\x45\xd8\xa0\x99\x7d\x5b\x54\x16\x48\xb0\x34\xdd\x22\x46\xbe\
+\x44\x8a\x86\x29\xe6\x81\x6f\xf4\xdd\xd3\xde\x19\xa3\x34\x39\x8d\
+\x39\xb2\x20\xc0\x84\x38\xe7\x6d\x89\xdb\x8c\x2f\x1c\xf1\xa3\x3a\
+\xab\x38\xde\x1d\x59\xe8\x58\xec\xbe\xb0\xc2\x50\xdc\x6e\x6d\xf9\
+\xbb\xb5\x85\xa5\xc7\x84\x8f\x7d\x5b\x5b\x40\x05\xbf\x44\xa5\xa9\
+\x2d\x80\x25\x91\xe0\xc6\x4c\x6d\xf5\x34\x53\x5b\x3d\xb5\xd7\x41\
+\xdf\xa2\x45\xeb\xfa\xb6\xa8\x08\x53\xe8\xc0\xd0\x16\x98\x49\x1d\
+\x23\x9a\x7d\x77\x34\x53\x5b\x26\xa7\x31\x1b\x68\x11\xe2\x3e\xe7\
+\xbc\x0f\xd4\x16\x7f\x0a\x6d\x75\x46\x66\x29\xad\xdf\x09\x87\x8c\
+\x5d\x6d\x0a\xc2\x42\x15\x45\x56\x8a\x53\x6b\x54\xf8\xbd\x8b\xd7\
+\xfa\x84\x35\x94\x23\xee\x13\x7a\xc2\x01\x98\x8c\xf8\x42\x8c\x3e\
+\x1a\x54\x06\x4e\x01\x21\x69\x9c\x2e\x9b\x13\xdd\xce\x85\xfa\xfb\
+\x7b\xc6\x64\x93\xeb\x04\x06\x16\xef\x08\x7a\xeb\xd4\x07\xf2\x7c\
+\x09\xce\x8b\x62\x3c\xcc\x7d\xe6\x9b\xaa\xda\x4a\x7d\xb4\x90\xf6\
+\x49\x7d\xfa\x81\x21\xec\x73\x46\x25\xef\x6f\xb5\x3d\x56\x86\x6c\
+\x20\x43\xe2\xd5\x73\x06\x19\x22\x82\x38\xe6\x4c\xc9\xb0\xa3\x82\
+\x0c\x01\xbf\xc4\xd8\xdd\x78\x02\x19\x76\x97\xfd\xf6\x49\x1f\x9f\
+\x4a\x84\x04\x01\xf4\x25\xed\xf6\xcf\x6b\x30\xb6\x79\x96\x7b\x73\
+\xc8\xbd\xe7\xf4\x39\xb9\xad\x86\x1b\x5b\x5b\xfb\xfd\x5b\x9b\x50\
+\x3b\xf2\x44\xde\x9f\x25\xb9\xf2\xbc\x00\xc1\x1b\xbb\x0f\xc2\xeb\
+\x0f\xc4\xa3\x82\x0a\x22\xbb\x22\x23\x89\x34\xb7\x2d\xda\x1d\x0a\
+\x24\x38\x0d\x90\xb4\xdc\x63\xb3\xa5\x01\xda\x17\x2c\x30\x0f\xb7\
+\xa0\x46\xe0\x48\xe6\x6e\xf5\xfd\x7e\x4d\x35\xc3\xae\xee\xfc\xc3\
+\x51\xa5\xd9\xc3\x20\xa4\x2e\x33\xe3\x27\x63\x17\x43\x3a\xae\xa9\
+\x39\xf6\x31\x8e\x82\xb9\x7a\x0f\xa1\xc7\x55\x84\xe0\xf3\x60\x3f\
+\x5f\xf5\xd7\x6f\x5b\xa8\x87\x18\xb0\xf4\x31\xa5\xf2\x2f\xdb\xb8\
+\x78\x22\x94\xe0\x56\x8e\xcf\x82\x12\xc7\x6d\xc3\x57\x94\xbc\x04\
+\x94\xd0\x67\x44\x49\x80\x5e\x51\xf2\x32\x51\xc2\x9f\x13\x25\xe4\
+\x15\x25\x2f\x13\x25\xfe\x73\xa2\xc4\xf1\x58\xd8\x2b\x4a\x5e\x02\
+\x4a\x82\xe7\x44\xc9\x6b\xf4\xfa\x32\x51\x42\x9e\x33\x7a\x0d\x5e\
+\xa3\xd7\x17\x8a\x92\x67\x8c\x5e\x7d\xd7\x63\x9c\xaf\x28\xf9\xa1\
+\x50\x82\x84\x24\x88\x11\x1a\x0c\x60\xb2\x23\x7c\x65\x5e\xa0\x5e\
+\x07\xc2\x24\xf0\x02\x55\xc0\x87\x57\x8e\x1b\x98\xd0\xd7\xf0\xf5\
+\x47\x87\xc9\x0e\x67\xb2\x23\x30\x79\x1c\x4a\x1e\x70\x26\xf4\x35\
+\x30\x79\x99\x28\xa1\x3b\x02\x93\xef\x83\x92\xd7\xc0\xe4\x85\xa2\
+\x64\x47\x60\xf2\x5d\x50\xc2\x5e\x03\x93\x17\x8a\x92\x27\x8d\x4b\
+\x1e\x42\xc9\x6b\x5c\xf2\xc3\xa3\x04\x09\x14\x70\xeb\xde\xd4\x9d\
+\x7e\x60\xfd\x09\x51\x02\xb9\x11\x83\x02\xbc\x0b\x25\xaf\xdb\x6a\
+\xcf\x7d\x4f\xb9\xbb\x83\x61\x1f\x44\x73\x69\x1c\xbd\x6e\x1f\x44\
+\x63\xf5\x50\x78\x20\x02\x79\x82\x4e\xf4\xd9\x33\xe3\xc8\x67\xf8\
+\x64\x22\x3c\x82\x05\xa5\x58\xdf\x63\xe6\xd4\xa7\x3c\x60\xfd\x45\
+\x63\xeb\xce\x55\x7f\x59\x02\x49\x41\x7d\xc4\x77\x9d\x53\xbb\xce\
+\xc1\x7d\x41\x05\x65\x08\xeb\xfe\x91\x47\x02\x3f\x60\x12\x91\x93\
+\xc0\xe3\x90\x82\xf9\x41\x7d\xaf\x06\xd2\x24\xc2\x8e\x6d\x40\xfb\
+\xd8\x13\x84\x0f\xd0\x4c\x3c\xc1\x6d\x6a\x07\x66\xa2\x9e\xcd\x70\
+\xf8\x3b\xe1\x0d\x6a\xb4\x38\x66\x3e\x0d\x26\x0e\x77\x67\xdf\x25\
+\x38\xed\x7f\xa4\xac\xc6\x34\xe1\xea\x3d\xc4\x74\xc0\x49\xc0\x30\
+\x96\x87\x60\x1a\x46\xac\x82\x37\x8e\x85\x0b\xa9\x26\x42\xc3\xa2\
+\x80\x01\x99\x2d\x58\xa3\x82\x4a\xf5\xfd\x9f\xfe\x29\xdd\xe3\xdd\
+\xfe\x45\x27\x31\x5b\x5b\x21\xca\x49\x58\xa7\xf8\x86\x60\xb1\xc4\
+\x81\xf5\x6b\x41\xad\x6c\x19\xa0\x88\x48\xe2\xf2\x12\x4a\xba\xdb\
+\xb2\x1d\x0a\x73\xb1\xe8\xbc\x85\x3d\xa5\x1d\x57\xd7\x63\x61\x1a\
+\x68\xeb\x1a\xa8\x20\xe0\x10\x19\xff\x06\x31\x9a\xe2\x52\x0f\xe3\
+\x39\x51\xdd\xfd\x58\x04\x55\x3f\x24\x50\xff\x5c\x84\x90\x3e\xb8\
+\xe3\xe3\x81\x04\x54\x13\xa0\x86\xc1\x0e\x03\x15\x9e\x90\x52\xd2\
+\x21\xaa\x03\xd5\x0c\xa5\x8e\xdf\x63\x5a\xe4\xab\x6a\xa2\x3f\xc3\
+\xb0\x8b\x65\x98\x9d\x6a\xca\x75\x58\xa4\xe1\xaa\xb2\x68\x37\x5a\
+\x5f\x33\xaa\xc4\x59\xd7\x2a\x92\x2a\xba\xb2\x78\xca\xf4\x6b\x32\
+\xc3\xe0\x81\x7d\x9f\x23\x4c\xd7\xb7\xa7\x0a\xe2\xcd\xf3\xaf\x33\
+\x75\x57\xf4\x7f\x6b\xc6\x45\xb8\x4c\xb3\xbb\xd9\x4f\x7f\xff\x7d\
+\xf4\xaf\x8f\xa3\x3f\x7e\x4b\x57\x97\xa3\xcf\xff\xfe\xe9\x74\xd2\
+\xde\x93\x99\xd4\xed\xad\x93\x28\x5d\xa4\x91\x7e\xcc\x7a\xc8\x3d\
+\xfa\xa8\x5a\xfd\xe9\x34\x4b\xaa\x4a\xb9\x49\x25\xea\xd5\xe5\x0c\
+\x41\xaf\x37\x79\x11\xdb\x84\x22\xad\xe0\xf3\x44\x5d\xbc\x99\x55\
+\xf3\x49\x91\x75\x00\x71\x3c\xe3\xb0\xdb\xa4\x7a\x27\x05\x8d\x1e\
+\x7c\x21\xa9\x47\x83\xa1\x9f\x65\x36\xd3\x3f\x71\x7c\x3e\x5e\x17\
+\x49\x99\x14\xd7\xc9\xf8\xe2\xac\x02\xd2\xaa\x67\xfa\x06\x7d\x89\
+\xfb\xf4\xd5\xa8\xe1\x43\x91\x24\x9f\x00\x85\x0f\x88\xbf\x65\x1b\
+\x7d\x4a\x96\xe9\xe4\x6d\x9e\xc5\x3f\xd9\x82\xcd\x8a\x49\x35\xb7\
+\x05\x6b\x49\x8f\x7b\x58\x04\x3e\x2c\x75\xac\x7b\x98\xfa\x5e\xec\
+\xee\x44\x6f\x63\x04\x4a\x48\x60\x05\xf6\x5d\xea\xee\xce\x5b\x91\
+\x2b\x89\xd5\x0f\xf3\xfd\xeb\xfd\x87\xb3\xa9\xe6\xbf\x80\xbf\x60\
+\x3c\xd6\xaa\xa7\xff\x9c\xa9\xc7\x99\x2f\xde\xfc\x17\x09\x34\x99\
+\xe4\
+"
+
+qt_resource_name = b"\
+\x00\x07\
+\x0a\xc7\x5a\x07\
+\x00\x63\
+\x00\x75\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0f\
+\x0c\x20\x5a\xe7\
+\x00\x74\
+\x00\x65\x00\x78\x00\x74\x00\x2d\x00\x69\x00\x74\x00\x61\x00\x6c\x00\x69\x00\x63\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0d\
+\x03\xb9\xbc\x07\
+\x00\x74\
+\x00\x65\x00\x78\x00\x74\x00\x2d\x00\x62\x00\x6f\x00\x6c\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0b\
+\x0c\x43\x91\x47\
+\x00\x63\
+\x00\x6f\x00\x6e\x00\x76\x00\x65\x00\x72\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x16\
+\x05\x59\x2c\xa7\
+\x00\x74\
+\x00\x65\x00\x78\x00\x74\x00\x2d\x00\x73\x00\x74\x00\x72\x00\x69\x00\x6b\x00\x65\x00\x74\x00\x68\x00\x72\x00\x6f\x00\x75\x00\x67\
+\x00\x68\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x04\xb2\x55\x47\
+\x00\x75\
+\x00\x6e\x00\x64\x00\x6f\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x06\x7c\x57\x87\
+\x00\x63\
+\x00\x6f\x00\x70\x00\x79\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x06\xc1\x54\x07\
+\x00\x6f\
+\x00\x70\x00\x65\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x08\xc8\x55\xe7\
+\x00\x73\
+\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0b\
+\x03\x79\x43\xc7\
+\x00\x73\
+\x00\x61\x00\x76\x00\x65\x00\x2d\x00\x61\x00\x73\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x09\x1e\x95\x87\
+\x00\x66\
+\x00\x69\x00\x6e\x00\x64\x00\x2d\x00\x72\x00\x65\x00\x70\x00\x6c\x00\x61\x00\x63\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x00\x47\x57\x67\
+\x00\x66\
+\x00\x69\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x07\
+\x04\xca\x5a\x27\
+\x00\x6e\
+\x00\x65\x00\x77\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x0b\xb2\x55\xc7\
+\x00\x72\
+\x00\x65\x00\x64\x00\x6f\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x12\
+\x02\x62\x15\x87\
+\x00\x74\
+\x00\x65\x00\x78\x00\x74\x00\x2d\x00\x75\x00\x6e\x00\x64\x00\x65\x00\x72\x00\x6c\x00\x69\x00\x6e\x00\x65\x00\x2e\x00\x73\x00\x76\
+\x00\x67\
+\x00\x09\
+\x0a\xa8\xb7\xc7\
+\x00\x70\
+\x00\x61\x00\x73\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x07\
+\x06\xa9\x5a\x27\
+\x00\x70\
+\x00\x64\x00\x66\x00\x2e\x00\x73\x00\x76\x00\x67\
+"
+
+qt_resource_struct_v1 = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x11\x00\x00\x00\x01\
+\x00\x00\x01\x40\x00\x01\x00\x00\x00\x01\x00\x00\xb8\xc6\
+\x00\x00\x01\x80\x00\x01\x00\x00\x00\x01\x00\x00\xe8\x18\
+\x00\x00\x00\xfe\x00\x01\x00\x00\x00\x01\x00\x00\x83\xb9\
+\x00\x00\x00\x38\x00\x01\x00\x00\x00\x01\x00\x00\x23\x00\
+\x00\x00\x00\xa6\x00\x01\x00\x00\x00\x01\x00\x00\x42\xab\
+\x00\x00\x01\x56\x00\x01\x00\x00\x00\x01\x00\x00\xd0\x22\
+\x00\x00\x00\x74\x00\x01\x00\x00\x00\x01\x00\x00\x36\x67\
+\x00\x00\x00\xbc\x00\x01\x00\x00\x00\x01\x00\x00\x4c\x61\
+\x00\x00\x01\xc2\x00\x01\x00\x00\x00\x01\x00\x01\x06\x18\
+\x00\x00\x00\xd2\x00\x01\x00\x00\x00\x01\x00\x00\x57\x80\
+\x00\x00\x00\xe8\x00\x01\x00\x00\x00\x01\x00\x00\x6c\x43\
+\x00\x00\x01\x1a\x00\x01\x00\x00\x00\x01\x00\x00\x9c\x0f\
+\x00\x00\x01\xaa\x00\x01\x00\x00\x00\x01\x00\x00\xf4\x23\
+\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x01\x6a\x00\x01\x00\x00\x00\x01\x00\x00\xde\x41\
+\x00\x00\x00\x14\x00\x01\x00\x00\x00\x01\x00\x00\x18\x58\
+\x00\x00\x00\x58\x00\x01\x00\x00\x00\x01\x00\x00\x2d\xa5\
+"
+
+qt_resource_struct_v2 = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x11\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x01\x40\x00\x01\x00\x00\x00\x01\x00\x00\xb8\xc6\
+\x00\x00\x01\x1e\xd1\xaf\xe8\x08\
+\x00\x00\x01\x80\x00\x01\x00\x00\x00\x01\x00\x00\xe8\x18\
+\x00\x00\x01\x1e\xb1\x49\xab\xd0\
+\x00\x00\x00\xfe\x00\x01\x00\x00\x00\x01\x00\x00\x83\xb9\
+\x00\x00\x01\x1e\xb1\x45\x9c\xc0\
+\x00\x00\x00\x38\x00\x01\x00\x00\x00\x01\x00\x00\x23\x00\
+\x00\x00\x01\x1e\xb1\x49\x1b\x48\
+\x00\x00\x00\xa6\x00\x01\x00\x00\x00\x01\x00\x00\x42\xab\
+\x00\x00\x01\x1e\xb1\x47\xda\xf8\
+\x00\x00\x01\x56\x00\x01\x00\x00\x00\x01\x00\x00\xd0\x22\
+\x00\x00\x01\x1e\xb1\x44\x29\xa8\
+\x00\x00\x00\x74\x00\x01\x00\x00\x00\x01\x00\x00\x36\x67\
+\x00\x00\x01\x1e\xb1\x49\x80\xd8\
+\x00\x00\x00\xbc\x00\x01\x00\x00\x00\x01\x00\x00\x4c\x61\
+\x00\x00\x01\x1e\xb1\x45\xcf\x88\
+\x00\x00\x01\xc2\x00\x01\x00\x00\x00\x01\x00\x01\x06\x18\
+\x00\x00\x01\x79\xb7\xb7\x55\xe8\
+\x00\x00\x00\xd2\x00\x01\x00\x00\x00\x01\x00\x00\x57\x80\
+\x00\x00\x01\x1e\xb1\x44\x5c\x70\
+\x00\x00\x00\xe8\x00\x01\x00\x00\x00\x01\x00\x00\x6c\x43\
+\x00\x00\x01\x1e\xb1\x45\x71\xc8\
+\x00\x00\x01\x1a\x00\x01\x00\x00\x00\x01\x00\x00\x9c\x0f\
+\x00\x00\x01\x1f\x6a\x27\xf3\x28\
+\x00\x00\x01\xaa\x00\x01\x00\x00\x00\x01\x00\x00\xf4\x23\
+\x00\x00\x01\x1e\xb1\x47\x5a\x10\
+\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x01\x1f\x6a\x27\x81\xe0\
+\x00\x00\x01\x6a\x00\x01\x00\x00\x00\x01\x00\x00\xde\x41\
+\x00\x00\x01\x1e\xb1\x47\x8c\xd8\
+\x00\x00\x00\x14\x00\x01\x00\x00\x00\x01\x00\x00\x18\x58\
+\x00\x00\x01\x1e\xb1\x49\x55\xe0\
+\x00\x00\x00\x58\x00\x01\x00\x00\x00\x01\x00\x00\x2d\xa5\
+\x00\x00\x01\x1e\xb1\x4b\x45\xf8\
+"
+
+qt_version = [int(v) for v in QtCore.qVersion().split('.')]
+if qt_version < [5, 8, 0]:
+ rcc_version = 1
+ qt_resource_struct = qt_resource_struct_v1
+else:
+ rcc_version = 2
+ qt_resource_struct = qt_resource_struct_v2
+
+def qInitResources():
+ QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+ QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/resources/convert.svg b/resources/convert.svg
new file mode 100644
index 0000000..41e5990
--- /dev/null
+++ b/resources/convert.svg
@@ -0,0 +1,192 @@
+
+
+
diff --git a/resources/copy.svg b/resources/copy.svg
new file mode 100644
index 0000000..f4d9e97
--- /dev/null
+++ b/resources/copy.svg
@@ -0,0 +1,328 @@
+
+
+
diff --git a/resources/cut.svg b/resources/cut.svg
new file mode 100644
index 0000000..b9ac930
--- /dev/null
+++ b/resources/cut.svg
@@ -0,0 +1,508 @@
+
+
+
diff --git a/resources/find-replace.svg b/resources/find-replace.svg
new file mode 100644
index 0000000..1f443ff
--- /dev/null
+++ b/resources/find-replace.svg
@@ -0,0 +1,974 @@
+
+
+
diff --git a/resources/find.svg b/resources/find.svg
new file mode 100644
index 0000000..a499b48
--- /dev/null
+++ b/resources/find.svg
@@ -0,0 +1,750 @@
+
+
+
diff --git a/resources/new.svg b/resources/new.svg
new file mode 100644
index 0000000..1bfdb16
--- /dev/null
+++ b/resources/new.svg
@@ -0,0 +1,448 @@
+
+
+
diff --git a/resources/open.svg b/resources/open.svg
new file mode 100644
index 0000000..55e6177
--- /dev/null
+++ b/resources/open.svg
@@ -0,0 +1,535 @@
+
+
+
diff --git a/resources/paste.svg b/resources/paste.svg
new file mode 100644
index 0000000..39150d7
--- /dev/null
+++ b/resources/paste.svg
@@ -0,0 +1,531 @@
+
+
+
diff --git a/resources/pdf.svg b/resources/pdf.svg
new file mode 100644
index 0000000..2af610f
--- /dev/null
+++ b/resources/pdf.svg
@@ -0,0 +1,569 @@
+
+
+
+
diff --git a/resources/redo.svg b/resources/redo.svg
new file mode 100644
index 0000000..bc4d52a
--- /dev/null
+++ b/resources/redo.svg
@@ -0,0 +1,231 @@
+
+
+
diff --git a/resources/save-as.svg b/resources/save-as.svg
new file mode 100644
index 0000000..01e2fb7
--- /dev/null
+++ b/resources/save-as.svg
@@ -0,0 +1,663 @@
+
+
+
diff --git a/resources/save.svg b/resources/save.svg
new file mode 100644
index 0000000..2922c43
--- /dev/null
+++ b/resources/save.svg
@@ -0,0 +1,619 @@
+
+
+
diff --git a/resources/text-bold.svg b/resources/text-bold.svg
new file mode 100644
index 0000000..9268d4e
--- /dev/null
+++ b/resources/text-bold.svg
@@ -0,0 +1,327 @@
+
+
+
diff --git a/resources/text-italic.svg b/resources/text-italic.svg
new file mode 100644
index 0000000..3a4bc36
--- /dev/null
+++ b/resources/text-italic.svg
@@ -0,0 +1,334 @@
+
+
+
diff --git a/resources/text-strikethrough.svg b/resources/text-strikethrough.svg
new file mode 100644
index 0000000..5e87b5e
--- /dev/null
+++ b/resources/text-strikethrough.svg
@@ -0,0 +1,421 @@
+
+
+
diff --git a/resources/text-underline.svg b/resources/text-underline.svg
new file mode 100644
index 0000000..22131f6
--- /dev/null
+++ b/resources/text-underline.svg
@@ -0,0 +1,434 @@
+
+
+
diff --git a/resources/undo.svg b/resources/undo.svg
new file mode 100644
index 0000000..d3cce96
--- /dev/null
+++ b/resources/undo.svg
@@ -0,0 +1,230 @@
+
+
+
diff --git a/thirdparty/pdfjs/LICENSE b/thirdparty/pdfjs/LICENSE
new file mode 100644
index 0000000..f433b1a
--- /dev/null
+++ b/thirdparty/pdfjs/LICENSE
@@ -0,0 +1,177 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
diff --git a/thirdparty/pdfjs/web/cmaps/78-EUC-H.bcmap b/thirdparty/pdfjs/web/cmaps/78-EUC-H.bcmap
new file mode 100644
index 0000000..2655fc7
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/78-EUC-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/78-EUC-V.bcmap b/thirdparty/pdfjs/web/cmaps/78-EUC-V.bcmap
new file mode 100644
index 0000000..f1ed853
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/78-EUC-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/78-H.bcmap b/thirdparty/pdfjs/web/cmaps/78-H.bcmap
new file mode 100644
index 0000000..39e89d3
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/78-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/78-RKSJ-H.bcmap b/thirdparty/pdfjs/web/cmaps/78-RKSJ-H.bcmap
new file mode 100644
index 0000000..e4167cb
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/78-RKSJ-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/78-RKSJ-V.bcmap b/thirdparty/pdfjs/web/cmaps/78-RKSJ-V.bcmap
new file mode 100644
index 0000000..50b1646
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/78-RKSJ-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/78-V.bcmap b/thirdparty/pdfjs/web/cmaps/78-V.bcmap
new file mode 100644
index 0000000..d7af99b
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/78-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/78ms-RKSJ-H.bcmap b/thirdparty/pdfjs/web/cmaps/78ms-RKSJ-H.bcmap
new file mode 100644
index 0000000..37077d0
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/78ms-RKSJ-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/78ms-RKSJ-V.bcmap b/thirdparty/pdfjs/web/cmaps/78ms-RKSJ-V.bcmap
new file mode 100644
index 0000000..acf2323
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/78ms-RKSJ-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/83pv-RKSJ-H.bcmap b/thirdparty/pdfjs/web/cmaps/83pv-RKSJ-H.bcmap
new file mode 100644
index 0000000..2359bc5
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/83pv-RKSJ-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/90ms-RKSJ-H.bcmap b/thirdparty/pdfjs/web/cmaps/90ms-RKSJ-H.bcmap
new file mode 100644
index 0000000..af82938
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/90ms-RKSJ-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/90ms-RKSJ-V.bcmap b/thirdparty/pdfjs/web/cmaps/90ms-RKSJ-V.bcmap
new file mode 100644
index 0000000..780549d
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/90ms-RKSJ-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/90msp-RKSJ-H.bcmap b/thirdparty/pdfjs/web/cmaps/90msp-RKSJ-H.bcmap
new file mode 100644
index 0000000..bfd3119
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/90msp-RKSJ-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/90msp-RKSJ-V.bcmap b/thirdparty/pdfjs/web/cmaps/90msp-RKSJ-V.bcmap
new file mode 100644
index 0000000..25ef14a
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/90msp-RKSJ-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/90pv-RKSJ-H.bcmap b/thirdparty/pdfjs/web/cmaps/90pv-RKSJ-H.bcmap
new file mode 100644
index 0000000..02f713b
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/90pv-RKSJ-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/90pv-RKSJ-V.bcmap b/thirdparty/pdfjs/web/cmaps/90pv-RKSJ-V.bcmap
new file mode 100644
index 0000000..d08e0cc
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/90pv-RKSJ-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Add-H.bcmap b/thirdparty/pdfjs/web/cmaps/Add-H.bcmap
new file mode 100644
index 0000000..59442ac
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Add-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Add-RKSJ-H.bcmap b/thirdparty/pdfjs/web/cmaps/Add-RKSJ-H.bcmap
new file mode 100644
index 0000000..a3065e4
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Add-RKSJ-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Add-RKSJ-V.bcmap b/thirdparty/pdfjs/web/cmaps/Add-RKSJ-V.bcmap
new file mode 100644
index 0000000..040014c
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Add-RKSJ-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Add-V.bcmap b/thirdparty/pdfjs/web/cmaps/Add-V.bcmap
new file mode 100644
index 0000000..2f816d3
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Add-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-0.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-0.bcmap
new file mode 100644
index 0000000..88ec04a
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-0.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-1.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-1.bcmap
new file mode 100644
index 0000000..03a5014
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-1.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-2.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-2.bcmap
new file mode 100644
index 0000000..2aa9514
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-2.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-3.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-3.bcmap
new file mode 100644
index 0000000..86d8b8c
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-3.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-4.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-4.bcmap
new file mode 100644
index 0000000..f50fc6c
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-4.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-5.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-5.bcmap
new file mode 100644
index 0000000..6caf4a8
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-5.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-6.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-6.bcmap
new file mode 100644
index 0000000..b77fb07
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-6.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-UCS2.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-UCS2.bcmap
new file mode 100644
index 0000000..69d79a2
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-CNS1-UCS2.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-GB1-0.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-GB1-0.bcmap
new file mode 100644
index 0000000..3610108
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-GB1-0.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-GB1-1.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-GB1-1.bcmap
new file mode 100644
index 0000000..707bb10
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-GB1-1.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-GB1-2.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-GB1-2.bcmap
new file mode 100644
index 0000000..f7648cc
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-GB1-2.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-GB1-3.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-GB1-3.bcmap
new file mode 100644
index 0000000..8521458
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-GB1-3.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-GB1-4.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-GB1-4.bcmap
new file mode 100644
index 0000000..e40c63a
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-GB1-4.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-GB1-5.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-GB1-5.bcmap
new file mode 100644
index 0000000..d7623b5
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-GB1-5.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-GB1-UCS2.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-GB1-UCS2.bcmap
new file mode 100644
index 0000000..7586525
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-GB1-UCS2.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-0.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-0.bcmap
new file mode 100644
index 0000000..f0e94ec
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-0.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-1.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-1.bcmap
new file mode 100644
index 0000000..dad42c5
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-1.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-2.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-2.bcmap
new file mode 100644
index 0000000..090819a
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-2.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-3.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-3.bcmap
new file mode 100644
index 0000000..087dfc1
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-3.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-4.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-4.bcmap
new file mode 100644
index 0000000..46aa9bf
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-4.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-5.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-5.bcmap
new file mode 100644
index 0000000..5b4b65c
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-5.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-6.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-6.bcmap
new file mode 100644
index 0000000..e77d699
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-6.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-UCS2.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-UCS2.bcmap
new file mode 100644
index 0000000..128a141
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-Japan1-UCS2.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-Korea1-0.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-Korea1-0.bcmap
new file mode 100644
index 0000000..cef1a99
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-Korea1-0.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-Korea1-1.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-Korea1-1.bcmap
new file mode 100644
index 0000000..11ffa36
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-Korea1-1.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-Korea1-2.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-Korea1-2.bcmap
new file mode 100644
index 0000000..3172308
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-Korea1-2.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Adobe-Korea1-UCS2.bcmap b/thirdparty/pdfjs/web/cmaps/Adobe-Korea1-UCS2.bcmap
new file mode 100644
index 0000000..f3371c0
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Adobe-Korea1-UCS2.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/B5-H.bcmap b/thirdparty/pdfjs/web/cmaps/B5-H.bcmap
new file mode 100644
index 0000000..beb4d22
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/B5-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/B5-V.bcmap b/thirdparty/pdfjs/web/cmaps/B5-V.bcmap
new file mode 100644
index 0000000..2d4f87d
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/B5-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/B5pc-H.bcmap b/thirdparty/pdfjs/web/cmaps/B5pc-H.bcmap
new file mode 100644
index 0000000..ce00131
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/B5pc-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/B5pc-V.bcmap b/thirdparty/pdfjs/web/cmaps/B5pc-V.bcmap
new file mode 100644
index 0000000..73b99ff
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/B5pc-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/CNS-EUC-H.bcmap b/thirdparty/pdfjs/web/cmaps/CNS-EUC-H.bcmap
new file mode 100644
index 0000000..61d1d0c
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/CNS-EUC-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/CNS-EUC-V.bcmap b/thirdparty/pdfjs/web/cmaps/CNS-EUC-V.bcmap
new file mode 100644
index 0000000..1a393a5
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/CNS-EUC-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/CNS1-H.bcmap b/thirdparty/pdfjs/web/cmaps/CNS1-H.bcmap
new file mode 100644
index 0000000..f738e21
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/CNS1-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/CNS1-V.bcmap b/thirdparty/pdfjs/web/cmaps/CNS1-V.bcmap
new file mode 100644
index 0000000..9c3169f
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/CNS1-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/CNS2-H.bcmap b/thirdparty/pdfjs/web/cmaps/CNS2-H.bcmap
new file mode 100644
index 0000000..c89b352
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/CNS2-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/CNS2-V.bcmap b/thirdparty/pdfjs/web/cmaps/CNS2-V.bcmap
new file mode 100644
index 0000000..7588cec
--- /dev/null
+++ b/thirdparty/pdfjs/web/cmaps/CNS2-V.bcmap
@@ -0,0 +1,3 @@
+àRCopyright 1990-2009 Adobe Systems Incorporated.
+All rights reserved.
+See ./LICENSEáCNS2-H
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/cmaps/ETHK-B5-H.bcmap b/thirdparty/pdfjs/web/cmaps/ETHK-B5-H.bcmap
new file mode 100644
index 0000000..cb29415
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/ETHK-B5-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/ETHK-B5-V.bcmap b/thirdparty/pdfjs/web/cmaps/ETHK-B5-V.bcmap
new file mode 100644
index 0000000..f09aec6
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/ETHK-B5-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/ETen-B5-H.bcmap b/thirdparty/pdfjs/web/cmaps/ETen-B5-H.bcmap
new file mode 100644
index 0000000..c2d7746
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/ETen-B5-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/ETen-B5-V.bcmap b/thirdparty/pdfjs/web/cmaps/ETen-B5-V.bcmap
new file mode 100644
index 0000000..89bff15
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/ETen-B5-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/ETenms-B5-H.bcmap b/thirdparty/pdfjs/web/cmaps/ETenms-B5-H.bcmap
new file mode 100644
index 0000000..a7d69db
--- /dev/null
+++ b/thirdparty/pdfjs/web/cmaps/ETenms-B5-H.bcmap
@@ -0,0 +1,3 @@
+àRCopyright 1990-2009 Adobe Systems Incorporated.
+All rights reserved.
+See ./LICENSEá ETen-B5-H` ^
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/cmaps/ETenms-B5-V.bcmap b/thirdparty/pdfjs/web/cmaps/ETenms-B5-V.bcmap
new file mode 100644
index 0000000..adc5d61
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/ETenms-B5-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/EUC-H.bcmap b/thirdparty/pdfjs/web/cmaps/EUC-H.bcmap
new file mode 100644
index 0000000..e92ea5b
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/EUC-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/EUC-V.bcmap b/thirdparty/pdfjs/web/cmaps/EUC-V.bcmap
new file mode 100644
index 0000000..7a7c183
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/EUC-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Ext-H.bcmap b/thirdparty/pdfjs/web/cmaps/Ext-H.bcmap
new file mode 100644
index 0000000..3b5cde4
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Ext-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Ext-RKSJ-H.bcmap b/thirdparty/pdfjs/web/cmaps/Ext-RKSJ-H.bcmap
new file mode 100644
index 0000000..ea4d2d9
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Ext-RKSJ-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Ext-RKSJ-V.bcmap b/thirdparty/pdfjs/web/cmaps/Ext-RKSJ-V.bcmap
new file mode 100644
index 0000000..3457c27
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Ext-RKSJ-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Ext-V.bcmap b/thirdparty/pdfjs/web/cmaps/Ext-V.bcmap
new file mode 100644
index 0000000..4999ca4
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Ext-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/GB-EUC-H.bcmap b/thirdparty/pdfjs/web/cmaps/GB-EUC-H.bcmap
new file mode 100644
index 0000000..e39908b
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/GB-EUC-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/GB-EUC-V.bcmap b/thirdparty/pdfjs/web/cmaps/GB-EUC-V.bcmap
new file mode 100644
index 0000000..d5be544
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/GB-EUC-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/GB-H.bcmap b/thirdparty/pdfjs/web/cmaps/GB-H.bcmap
new file mode 100644
index 0000000..39189c5
--- /dev/null
+++ b/thirdparty/pdfjs/web/cmaps/GB-H.bcmap
@@ -0,0 +1,4 @@
+àRCopyright 1990-2009 Adobe Systems Incorporated.
+All rights reserved.
+See ./LICENSE!!º]aX!!]`21> pz$]‚"R‚d-Uƒ7*„
4„%+ „Z „{/…%…<9K…b1]†."‡‰`]‡,"]ˆ
+"]ˆh"]‰F"]Š$"]‹"]‹`"]Œ>"]"]z"]ŽX"]6"]"]r"]‘P"]’."]“"]“j"]”H"]•&"]–"]–b"]—@"]˜"]˜|"]™Z"]š8"]›"]›t"]œR"]0"]ž"]žl"]ŸJ"] ("]¡"]¡d"]¢B"]£ "X£~']¤W"]¥5"]¦"]¦q"]§O"]¨-"]©"]©i"]ªG"]«%"]¬"]¬a"]?"]®"]®{"]¯Y"]°7"]±"]±s"]²Q"]³/"]´
"]´k"]µI"]¶'"]·"]·c"]¸A"]¹"]¹}"]º["]»9
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/cmaps/GB-V.bcmap b/thirdparty/pdfjs/web/cmaps/GB-V.bcmap
new file mode 100644
index 0000000..3108345
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/GB-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/GBK-EUC-H.bcmap b/thirdparty/pdfjs/web/cmaps/GBK-EUC-H.bcmap
new file mode 100644
index 0000000..05fff7e
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/GBK-EUC-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/GBK-EUC-V.bcmap b/thirdparty/pdfjs/web/cmaps/GBK-EUC-V.bcmap
new file mode 100644
index 0000000..0cdf6be
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/GBK-EUC-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/GBK2K-H.bcmap b/thirdparty/pdfjs/web/cmaps/GBK2K-H.bcmap
new file mode 100644
index 0000000..46f6ba5
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/GBK2K-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/GBK2K-V.bcmap b/thirdparty/pdfjs/web/cmaps/GBK2K-V.bcmap
new file mode 100644
index 0000000..d9a9479
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/GBK2K-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/GBKp-EUC-H.bcmap b/thirdparty/pdfjs/web/cmaps/GBKp-EUC-H.bcmap
new file mode 100644
index 0000000..5cb0af6
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/GBKp-EUC-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/GBKp-EUC-V.bcmap b/thirdparty/pdfjs/web/cmaps/GBKp-EUC-V.bcmap
new file mode 100644
index 0000000..bca93b8
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/GBKp-EUC-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/GBT-EUC-H.bcmap b/thirdparty/pdfjs/web/cmaps/GBT-EUC-H.bcmap
new file mode 100644
index 0000000..4b4e2d3
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/GBT-EUC-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/GBT-EUC-V.bcmap b/thirdparty/pdfjs/web/cmaps/GBT-EUC-V.bcmap
new file mode 100644
index 0000000..38f7066
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/GBT-EUC-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/GBT-H.bcmap b/thirdparty/pdfjs/web/cmaps/GBT-H.bcmap
new file mode 100644
index 0000000..8437ac3
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/GBT-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/GBT-V.bcmap b/thirdparty/pdfjs/web/cmaps/GBT-V.bcmap
new file mode 100644
index 0000000..697ab4a
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/GBT-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/GBTpc-EUC-H.bcmap b/thirdparty/pdfjs/web/cmaps/GBTpc-EUC-H.bcmap
new file mode 100644
index 0000000..f6e50e8
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/GBTpc-EUC-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/GBTpc-EUC-V.bcmap b/thirdparty/pdfjs/web/cmaps/GBTpc-EUC-V.bcmap
new file mode 100644
index 0000000..6c0d71a
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/GBTpc-EUC-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/GBpc-EUC-H.bcmap b/thirdparty/pdfjs/web/cmaps/GBpc-EUC-H.bcmap
new file mode 100644
index 0000000..c9edf67
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/GBpc-EUC-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/GBpc-EUC-V.bcmap b/thirdparty/pdfjs/web/cmaps/GBpc-EUC-V.bcmap
new file mode 100644
index 0000000..31450c9
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/GBpc-EUC-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/H.bcmap b/thirdparty/pdfjs/web/cmaps/H.bcmap
new file mode 100644
index 0000000..7b24ea4
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/HKdla-B5-H.bcmap b/thirdparty/pdfjs/web/cmaps/HKdla-B5-H.bcmap
new file mode 100644
index 0000000..7d30c05
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/HKdla-B5-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/HKdla-B5-V.bcmap b/thirdparty/pdfjs/web/cmaps/HKdla-B5-V.bcmap
new file mode 100644
index 0000000..7894694
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/HKdla-B5-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/HKdlb-B5-H.bcmap b/thirdparty/pdfjs/web/cmaps/HKdlb-B5-H.bcmap
new file mode 100644
index 0000000..d829a23
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/HKdlb-B5-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/HKdlb-B5-V.bcmap b/thirdparty/pdfjs/web/cmaps/HKdlb-B5-V.bcmap
new file mode 100644
index 0000000..2b572b5
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/HKdlb-B5-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/HKgccs-B5-H.bcmap b/thirdparty/pdfjs/web/cmaps/HKgccs-B5-H.bcmap
new file mode 100644
index 0000000..971a4f2
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/HKgccs-B5-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/HKgccs-B5-V.bcmap b/thirdparty/pdfjs/web/cmaps/HKgccs-B5-V.bcmap
new file mode 100644
index 0000000..d353ca2
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/HKgccs-B5-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/HKm314-B5-H.bcmap b/thirdparty/pdfjs/web/cmaps/HKm314-B5-H.bcmap
new file mode 100644
index 0000000..576dc01
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/HKm314-B5-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/HKm314-B5-V.bcmap b/thirdparty/pdfjs/web/cmaps/HKm314-B5-V.bcmap
new file mode 100644
index 0000000..0e96d0e
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/HKm314-B5-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/HKm471-B5-H.bcmap b/thirdparty/pdfjs/web/cmaps/HKm471-B5-H.bcmap
new file mode 100644
index 0000000..11d170c
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/HKm471-B5-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/HKm471-B5-V.bcmap b/thirdparty/pdfjs/web/cmaps/HKm471-B5-V.bcmap
new file mode 100644
index 0000000..54959bf
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/HKm471-B5-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/HKscs-B5-H.bcmap b/thirdparty/pdfjs/web/cmaps/HKscs-B5-H.bcmap
new file mode 100644
index 0000000..6ef7857
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/HKscs-B5-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/HKscs-B5-V.bcmap b/thirdparty/pdfjs/web/cmaps/HKscs-B5-V.bcmap
new file mode 100644
index 0000000..1fb2fa2
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/HKscs-B5-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Hankaku.bcmap b/thirdparty/pdfjs/web/cmaps/Hankaku.bcmap
new file mode 100644
index 0000000..4b8ec7f
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Hankaku.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Hiragana.bcmap b/thirdparty/pdfjs/web/cmaps/Hiragana.bcmap
new file mode 100644
index 0000000..17e983e
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Hiragana.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/KSC-EUC-H.bcmap b/thirdparty/pdfjs/web/cmaps/KSC-EUC-H.bcmap
new file mode 100644
index 0000000..a45c65f
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/KSC-EUC-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/KSC-EUC-V.bcmap b/thirdparty/pdfjs/web/cmaps/KSC-EUC-V.bcmap
new file mode 100644
index 0000000..0e7b21f
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/KSC-EUC-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/KSC-H.bcmap b/thirdparty/pdfjs/web/cmaps/KSC-H.bcmap
new file mode 100644
index 0000000..b9b22b6
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/KSC-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/KSC-Johab-H.bcmap b/thirdparty/pdfjs/web/cmaps/KSC-Johab-H.bcmap
new file mode 100644
index 0000000..2531ffc
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/KSC-Johab-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/KSC-Johab-V.bcmap b/thirdparty/pdfjs/web/cmaps/KSC-Johab-V.bcmap
new file mode 100644
index 0000000..367ceb2
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/KSC-Johab-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/KSC-V.bcmap b/thirdparty/pdfjs/web/cmaps/KSC-V.bcmap
new file mode 100644
index 0000000..6ae2f0b
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/KSC-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/KSCms-UHC-H.bcmap b/thirdparty/pdfjs/web/cmaps/KSCms-UHC-H.bcmap
new file mode 100644
index 0000000..a8d4240
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/KSCms-UHC-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/KSCms-UHC-HW-H.bcmap b/thirdparty/pdfjs/web/cmaps/KSCms-UHC-HW-H.bcmap
new file mode 100644
index 0000000..8b4ae18
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/KSCms-UHC-HW-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/KSCms-UHC-HW-V.bcmap b/thirdparty/pdfjs/web/cmaps/KSCms-UHC-HW-V.bcmap
new file mode 100644
index 0000000..b655dbc
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/KSCms-UHC-HW-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/KSCms-UHC-V.bcmap b/thirdparty/pdfjs/web/cmaps/KSCms-UHC-V.bcmap
new file mode 100644
index 0000000..21f97f6
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/KSCms-UHC-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/KSCpc-EUC-H.bcmap b/thirdparty/pdfjs/web/cmaps/KSCpc-EUC-H.bcmap
new file mode 100644
index 0000000..e06f361
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/KSCpc-EUC-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/KSCpc-EUC-V.bcmap b/thirdparty/pdfjs/web/cmaps/KSCpc-EUC-V.bcmap
new file mode 100644
index 0000000..f3c9113
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/KSCpc-EUC-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Katakana.bcmap b/thirdparty/pdfjs/web/cmaps/Katakana.bcmap
new file mode 100644
index 0000000..524303c
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Katakana.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/LICENSE b/thirdparty/pdfjs/web/cmaps/LICENSE
new file mode 100644
index 0000000..b1ad168
--- /dev/null
+++ b/thirdparty/pdfjs/web/cmaps/LICENSE
@@ -0,0 +1,36 @@
+%%Copyright: -----------------------------------------------------------
+%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated.
+%%Copyright: All rights reserved.
+%%Copyright:
+%%Copyright: Redistribution and use in source and binary forms, with or
+%%Copyright: without modification, are permitted provided that the
+%%Copyright: following conditions are met:
+%%Copyright:
+%%Copyright: Redistributions of source code must retain the above
+%%Copyright: copyright notice, this list of conditions and the following
+%%Copyright: disclaimer.
+%%Copyright:
+%%Copyright: Redistributions in binary form must reproduce the above
+%%Copyright: copyright notice, this list of conditions and the following
+%%Copyright: disclaimer in the documentation and/or other materials
+%%Copyright: provided with the distribution.
+%%Copyright:
+%%Copyright: Neither the name of Adobe Systems Incorporated nor the names
+%%Copyright: of its contributors may be used to endorse or promote
+%%Copyright: products derived from this software without specific prior
+%%Copyright: written permission.
+%%Copyright:
+%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+%%Copyright: -----------------------------------------------------------
diff --git a/thirdparty/pdfjs/web/cmaps/NWP-H.bcmap b/thirdparty/pdfjs/web/cmaps/NWP-H.bcmap
new file mode 100644
index 0000000..afc5e4b
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/NWP-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/NWP-V.bcmap b/thirdparty/pdfjs/web/cmaps/NWP-V.bcmap
new file mode 100644
index 0000000..bb5785e
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/NWP-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/RKSJ-H.bcmap b/thirdparty/pdfjs/web/cmaps/RKSJ-H.bcmap
new file mode 100644
index 0000000..fb8d298
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/RKSJ-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/RKSJ-V.bcmap b/thirdparty/pdfjs/web/cmaps/RKSJ-V.bcmap
new file mode 100644
index 0000000..a2555a6
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/RKSJ-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/Roman.bcmap b/thirdparty/pdfjs/web/cmaps/Roman.bcmap
new file mode 100644
index 0000000..f896dcf
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/Roman.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniCNS-UCS2-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniCNS-UCS2-H.bcmap
new file mode 100644
index 0000000..d5db27c
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniCNS-UCS2-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniCNS-UCS2-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniCNS-UCS2-V.bcmap
new file mode 100644
index 0000000..1dc9b7a
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniCNS-UCS2-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniCNS-UTF16-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniCNS-UTF16-H.bcmap
new file mode 100644
index 0000000..961afef
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniCNS-UTF16-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniCNS-UTF16-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniCNS-UTF16-V.bcmap
new file mode 100644
index 0000000..df0cffe
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniCNS-UTF16-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniCNS-UTF32-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniCNS-UTF32-H.bcmap
new file mode 100644
index 0000000..1ab18a1
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniCNS-UTF32-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniCNS-UTF32-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniCNS-UTF32-V.bcmap
new file mode 100644
index 0000000..ad14662
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniCNS-UTF32-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniCNS-UTF8-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniCNS-UTF8-H.bcmap
new file mode 100644
index 0000000..83c6bd7
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniCNS-UTF8-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniCNS-UTF8-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniCNS-UTF8-V.bcmap
new file mode 100644
index 0000000..22a27e4
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniCNS-UTF8-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniGB-UCS2-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniGB-UCS2-H.bcmap
new file mode 100644
index 0000000..5bd6228
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniGB-UCS2-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniGB-UCS2-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniGB-UCS2-V.bcmap
new file mode 100644
index 0000000..53c534b
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniGB-UCS2-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniGB-UTF16-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniGB-UTF16-H.bcmap
new file mode 100644
index 0000000..b95045b
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniGB-UTF16-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniGB-UTF16-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniGB-UTF16-V.bcmap
new file mode 100644
index 0000000..51f023e
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniGB-UTF16-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniGB-UTF32-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniGB-UTF32-H.bcmap
new file mode 100644
index 0000000..f0dbd14
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniGB-UTF32-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniGB-UTF32-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniGB-UTF32-V.bcmap
new file mode 100644
index 0000000..ce9c30a
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniGB-UTF32-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniGB-UTF8-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniGB-UTF8-H.bcmap
new file mode 100644
index 0000000..982ca46
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniGB-UTF8-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniGB-UTF8-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniGB-UTF8-V.bcmap
new file mode 100644
index 0000000..f78020d
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniGB-UTF8-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJIS-UCS2-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniJIS-UCS2-H.bcmap
new file mode 100644
index 0000000..7daf56a
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJIS-UCS2-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJIS-UCS2-HW-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniJIS-UCS2-HW-H.bcmap
new file mode 100644
index 0000000..ac9975c
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJIS-UCS2-HW-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJIS-UCS2-HW-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniJIS-UCS2-HW-V.bcmap
new file mode 100644
index 0000000..3da0a1c
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJIS-UCS2-HW-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJIS-UCS2-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniJIS-UCS2-V.bcmap
new file mode 100644
index 0000000..c50b9dd
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJIS-UCS2-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJIS-UTF16-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniJIS-UTF16-H.bcmap
new file mode 100644
index 0000000..6761344
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJIS-UTF16-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJIS-UTF16-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniJIS-UTF16-V.bcmap
new file mode 100644
index 0000000..70bf90c
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJIS-UTF16-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJIS-UTF32-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniJIS-UTF32-H.bcmap
new file mode 100644
index 0000000..7a83d53
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJIS-UTF32-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJIS-UTF32-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniJIS-UTF32-V.bcmap
new file mode 100644
index 0000000..7a87135
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJIS-UTF32-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJIS-UTF8-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniJIS-UTF8-H.bcmap
new file mode 100644
index 0000000..9f0334c
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJIS-UTF8-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJIS-UTF8-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniJIS-UTF8-V.bcmap
new file mode 100644
index 0000000..808a94f
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJIS-UTF8-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJIS2004-UTF16-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniJIS2004-UTF16-H.bcmap
new file mode 100644
index 0000000..d768bf8
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJIS2004-UTF16-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJIS2004-UTF16-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniJIS2004-UTF16-V.bcmap
new file mode 100644
index 0000000..3d5bf6f
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJIS2004-UTF16-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJIS2004-UTF32-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniJIS2004-UTF32-H.bcmap
new file mode 100644
index 0000000..09eee10
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJIS2004-UTF32-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJIS2004-UTF32-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniJIS2004-UTF32-V.bcmap
new file mode 100644
index 0000000..6c54600
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJIS2004-UTF32-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJIS2004-UTF8-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniJIS2004-UTF8-H.bcmap
new file mode 100644
index 0000000..1b1a64f
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJIS2004-UTF8-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJIS2004-UTF8-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniJIS2004-UTF8-V.bcmap
new file mode 100644
index 0000000..994aa9e
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJIS2004-UTF8-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJISPro-UCS2-HW-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniJISPro-UCS2-HW-V.bcmap
new file mode 100644
index 0000000..643f921
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJISPro-UCS2-HW-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJISPro-UCS2-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniJISPro-UCS2-V.bcmap
new file mode 100644
index 0000000..c148f67
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJISPro-UCS2-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJISPro-UTF8-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniJISPro-UTF8-V.bcmap
new file mode 100644
index 0000000..1849d80
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJISPro-UTF8-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJISX0213-UTF32-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniJISX0213-UTF32-H.bcmap
new file mode 100644
index 0000000..a83a677
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJISX0213-UTF32-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJISX0213-UTF32-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniJISX0213-UTF32-V.bcmap
new file mode 100644
index 0000000..f527248
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJISX0213-UTF32-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJISX02132004-UTF32-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniJISX02132004-UTF32-H.bcmap
new file mode 100644
index 0000000..e1a988d
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJISX02132004-UTF32-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniJISX02132004-UTF32-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniJISX02132004-UTF32-V.bcmap
new file mode 100644
index 0000000..47e054a
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniJISX02132004-UTF32-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniKS-UCS2-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniKS-UCS2-H.bcmap
new file mode 100644
index 0000000..b5b9485
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniKS-UCS2-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniKS-UCS2-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniKS-UCS2-V.bcmap
new file mode 100644
index 0000000..026adca
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniKS-UCS2-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniKS-UTF16-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniKS-UTF16-H.bcmap
new file mode 100644
index 0000000..fd4e66e
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniKS-UTF16-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniKS-UTF16-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniKS-UTF16-V.bcmap
new file mode 100644
index 0000000..075efb7
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniKS-UTF16-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniKS-UTF32-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniKS-UTF32-H.bcmap
new file mode 100644
index 0000000..769d214
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniKS-UTF32-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniKS-UTF32-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniKS-UTF32-V.bcmap
new file mode 100644
index 0000000..bdab208
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniKS-UTF32-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniKS-UTF8-H.bcmap b/thirdparty/pdfjs/web/cmaps/UniKS-UTF8-H.bcmap
new file mode 100644
index 0000000..6ff8674
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniKS-UTF8-H.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/UniKS-UTF8-V.bcmap b/thirdparty/pdfjs/web/cmaps/UniKS-UTF8-V.bcmap
new file mode 100644
index 0000000..8dfa76a
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/UniKS-UTF8-V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/V.bcmap b/thirdparty/pdfjs/web/cmaps/V.bcmap
new file mode 100644
index 0000000..fdec990
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/V.bcmap differ
diff --git a/thirdparty/pdfjs/web/cmaps/WP-Symbol.bcmap b/thirdparty/pdfjs/web/cmaps/WP-Symbol.bcmap
new file mode 100644
index 0000000..46729bb
Binary files /dev/null and b/thirdparty/pdfjs/web/cmaps/WP-Symbol.bcmap differ
diff --git a/thirdparty/pdfjs/web/compressed.tracemonkey-pldi-09.pdf b/thirdparty/pdfjs/web/compressed.tracemonkey-pldi-09.pdf
new file mode 100644
index 0000000..6557018
Binary files /dev/null and b/thirdparty/pdfjs/web/compressed.tracemonkey-pldi-09.pdf differ
diff --git a/thirdparty/pdfjs/web/debugger.js b/thirdparty/pdfjs/web/debugger.js
new file mode 100644
index 0000000..c79aeee
--- /dev/null
+++ b/thirdparty/pdfjs/web/debugger.js
@@ -0,0 +1,623 @@
+/* Copyright 2012 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* eslint-disable no-var */
+
+"use strict";
+
+var FontInspector = (function FontInspectorClosure() {
+ var fonts;
+ var active = false;
+ var fontAttribute = "data-font-name";
+ function removeSelection() {
+ const divs = document.querySelectorAll(`span[${fontAttribute}]`);
+ for (const div of divs) {
+ div.className = "";
+ }
+ }
+ function resetSelection() {
+ const divs = document.querySelectorAll(`span[${fontAttribute}]`);
+ for (const div of divs) {
+ div.className = "debuggerHideText";
+ }
+ }
+ function selectFont(fontName, show) {
+ const divs = document.querySelectorAll(
+ `span[${fontAttribute}=${fontName}]`
+ );
+ for (const div of divs) {
+ div.className = show ? "debuggerShowText" : "debuggerHideText";
+ }
+ }
+ function textLayerClick(e) {
+ if (
+ !e.target.dataset.fontName ||
+ e.target.tagName.toUpperCase() !== "SPAN"
+ ) {
+ return;
+ }
+ var fontName = e.target.dataset.fontName;
+ var selects = document.getElementsByTagName("input");
+ for (var i = 0; i < selects.length; ++i) {
+ var select = selects[i];
+ if (select.dataset.fontName !== fontName) {
+ continue;
+ }
+ select.checked = !select.checked;
+ selectFont(fontName, select.checked);
+ select.scrollIntoView();
+ }
+ }
+ return {
+ // Properties/functions needed by PDFBug.
+ id: "FontInspector",
+ name: "Font Inspector",
+ panel: null,
+ manager: null,
+ init: function init(pdfjsLib) {
+ var panel = this.panel;
+ var tmp = document.createElement("button");
+ tmp.addEventListener("click", resetSelection);
+ tmp.textContent = "Refresh";
+ panel.appendChild(tmp);
+
+ fonts = document.createElement("div");
+ panel.appendChild(fonts);
+ },
+ cleanup: function cleanup() {
+ fonts.textContent = "";
+ },
+ enabled: false,
+ get active() {
+ return active;
+ },
+ set active(value) {
+ active = value;
+ if (active) {
+ document.body.addEventListener("click", textLayerClick, true);
+ resetSelection();
+ } else {
+ document.body.removeEventListener("click", textLayerClick, true);
+ removeSelection();
+ }
+ },
+ // FontInspector specific functions.
+ fontAdded: function fontAdded(fontObj, url) {
+ function properties(obj, list) {
+ var moreInfo = document.createElement("table");
+ for (var i = 0; i < list.length; i++) {
+ var tr = document.createElement("tr");
+ var td1 = document.createElement("td");
+ td1.textContent = list[i];
+ tr.appendChild(td1);
+ var td2 = document.createElement("td");
+ td2.textContent = obj[list[i]].toString();
+ tr.appendChild(td2);
+ moreInfo.appendChild(tr);
+ }
+ return moreInfo;
+ }
+ var moreInfo = properties(fontObj, ["name", "type"]);
+ const fontName = fontObj.loadedName;
+ var font = document.createElement("div");
+ var name = document.createElement("span");
+ name.textContent = fontName;
+ var download = document.createElement("a");
+ if (url) {
+ url = /url\(['"]?([^)"']+)/.exec(url);
+ download.href = url[1];
+ } else if (fontObj.data) {
+ download.href = URL.createObjectURL(
+ new Blob([fontObj.data], { type: fontObj.mimeType })
+ );
+ }
+ download.textContent = "Download";
+ var logIt = document.createElement("a");
+ logIt.href = "";
+ logIt.textContent = "Log";
+ logIt.addEventListener("click", function (event) {
+ event.preventDefault();
+ console.log(fontObj);
+ });
+ const select = document.createElement("input");
+ select.setAttribute("type", "checkbox");
+ select.dataset.fontName = fontName;
+ select.addEventListener("click", function () {
+ selectFont(fontName, select.checked);
+ });
+ font.appendChild(select);
+ font.appendChild(name);
+ font.appendChild(document.createTextNode(" "));
+ font.appendChild(download);
+ font.appendChild(document.createTextNode(" "));
+ font.appendChild(logIt);
+ font.appendChild(moreInfo);
+ fonts.appendChild(font);
+ // Somewhat of a hack, should probably add a hook for when the text layer
+ // is done rendering.
+ setTimeout(() => {
+ if (this.active) {
+ resetSelection();
+ }
+ }, 2000);
+ },
+ };
+})();
+
+var opMap;
+
+// Manages all the page steppers.
+var StepperManager = (function StepperManagerClosure() {
+ var steppers = [];
+ var stepperDiv = null;
+ var stepperControls = null;
+ var stepperChooser = null;
+ var breakPoints = Object.create(null);
+ return {
+ // Properties/functions needed by PDFBug.
+ id: "Stepper",
+ name: "Stepper",
+ panel: null,
+ manager: null,
+ init: function init(pdfjsLib) {
+ var self = this;
+ stepperControls = document.createElement("div");
+ stepperChooser = document.createElement("select");
+ stepperChooser.addEventListener("change", function (event) {
+ self.selectStepper(this.value);
+ });
+ stepperControls.appendChild(stepperChooser);
+ stepperDiv = document.createElement("div");
+ this.panel.appendChild(stepperControls);
+ this.panel.appendChild(stepperDiv);
+ if (sessionStorage.getItem("pdfjsBreakPoints")) {
+ breakPoints = JSON.parse(sessionStorage.getItem("pdfjsBreakPoints"));
+ }
+
+ opMap = Object.create(null);
+ for (var key in pdfjsLib.OPS) {
+ opMap[pdfjsLib.OPS[key]] = key;
+ }
+ },
+ cleanup: function cleanup() {
+ stepperChooser.textContent = "";
+ stepperDiv.textContent = "";
+ steppers = [];
+ },
+ enabled: false,
+ active: false,
+ // Stepper specific functions.
+ create: function create(pageIndex) {
+ var debug = document.createElement("div");
+ debug.id = "stepper" + pageIndex;
+ debug.setAttribute("hidden", true);
+ debug.className = "stepper";
+ stepperDiv.appendChild(debug);
+ var b = document.createElement("option");
+ b.textContent = "Page " + (pageIndex + 1);
+ b.value = pageIndex;
+ stepperChooser.appendChild(b);
+ var initBreakPoints = breakPoints[pageIndex] || [];
+ var stepper = new Stepper(debug, pageIndex, initBreakPoints);
+ steppers.push(stepper);
+ if (steppers.length === 1) {
+ this.selectStepper(pageIndex, false);
+ }
+ return stepper;
+ },
+ selectStepper: function selectStepper(pageIndex, selectPanel) {
+ var i;
+ pageIndex = pageIndex | 0;
+ if (selectPanel) {
+ this.manager.selectPanel(this);
+ }
+ for (i = 0; i < steppers.length; ++i) {
+ var stepper = steppers[i];
+ if (stepper.pageIndex === pageIndex) {
+ stepper.panel.removeAttribute("hidden");
+ } else {
+ stepper.panel.setAttribute("hidden", true);
+ }
+ }
+ var options = stepperChooser.options;
+ for (i = 0; i < options.length; ++i) {
+ var option = options[i];
+ option.selected = (option.value | 0) === pageIndex;
+ }
+ },
+ saveBreakPoints: function saveBreakPoints(pageIndex, bps) {
+ breakPoints[pageIndex] = bps;
+ sessionStorage.setItem("pdfjsBreakPoints", JSON.stringify(breakPoints));
+ },
+ };
+})();
+
+// The stepper for each page's IRQueue.
+var Stepper = (function StepperClosure() {
+ // Shorter way to create element and optionally set textContent.
+ function c(tag, textContent) {
+ var d = document.createElement(tag);
+ if (textContent) {
+ d.textContent = textContent;
+ }
+ return d;
+ }
+
+ function simplifyArgs(args) {
+ if (typeof args === "string") {
+ var MAX_STRING_LENGTH = 75;
+ return args.length <= MAX_STRING_LENGTH
+ ? args
+ : args.substring(0, MAX_STRING_LENGTH) + "...";
+ }
+ if (typeof args !== "object" || args === null) {
+ return args;
+ }
+ if ("length" in args) {
+ // array
+ var simpleArgs = [],
+ i,
+ ii;
+ var MAX_ITEMS = 10;
+ for (i = 0, ii = Math.min(MAX_ITEMS, args.length); i < ii; i++) {
+ simpleArgs.push(simplifyArgs(args[i]));
+ }
+ if (i < args.length) {
+ simpleArgs.push("...");
+ }
+ return simpleArgs;
+ }
+ var simpleObj = {};
+ for (var key in args) {
+ simpleObj[key] = simplifyArgs(args[key]);
+ }
+ return simpleObj;
+ }
+
+ // eslint-disable-next-line no-shadow
+ function Stepper(panel, pageIndex, initialBreakPoints) {
+ this.panel = panel;
+ this.breakPoint = 0;
+ this.nextBreakPoint = null;
+ this.pageIndex = pageIndex;
+ this.breakPoints = initialBreakPoints;
+ this.currentIdx = -1;
+ this.operatorListIdx = 0;
+ }
+ Stepper.prototype = {
+ init: function init(operatorList) {
+ var panel = this.panel;
+ var content = c("div", "c=continue, s=step");
+ var table = c("table");
+ content.appendChild(table);
+ table.cellSpacing = 0;
+ var headerRow = c("tr");
+ table.appendChild(headerRow);
+ headerRow.appendChild(c("th", "Break"));
+ headerRow.appendChild(c("th", "Idx"));
+ headerRow.appendChild(c("th", "fn"));
+ headerRow.appendChild(c("th", "args"));
+ panel.appendChild(content);
+ this.table = table;
+ this.updateOperatorList(operatorList);
+ },
+ updateOperatorList: function updateOperatorList(operatorList) {
+ var self = this;
+
+ function cboxOnClick() {
+ var x = +this.dataset.idx;
+ if (this.checked) {
+ self.breakPoints.push(x);
+ } else {
+ self.breakPoints.splice(self.breakPoints.indexOf(x), 1);
+ }
+ StepperManager.saveBreakPoints(self.pageIndex, self.breakPoints);
+ }
+
+ var MAX_OPERATORS_COUNT = 15000;
+ if (this.operatorListIdx > MAX_OPERATORS_COUNT) {
+ return;
+ }
+
+ var chunk = document.createDocumentFragment();
+ var operatorsToDisplay = Math.min(
+ MAX_OPERATORS_COUNT,
+ operatorList.fnArray.length
+ );
+ for (var i = this.operatorListIdx; i < operatorsToDisplay; i++) {
+ var line = c("tr");
+ line.className = "line";
+ line.dataset.idx = i;
+ chunk.appendChild(line);
+ var checked = this.breakPoints.includes(i);
+ var args = operatorList.argsArray[i] || [];
+
+ var breakCell = c("td");
+ var cbox = c("input");
+ cbox.type = "checkbox";
+ cbox.className = "points";
+ cbox.checked = checked;
+ cbox.dataset.idx = i;
+ cbox.onclick = cboxOnClick;
+
+ breakCell.appendChild(cbox);
+ line.appendChild(breakCell);
+ line.appendChild(c("td", i.toString()));
+ var fn = opMap[operatorList.fnArray[i]];
+ var decArgs = args;
+ if (fn === "showText") {
+ var glyphs = args[0];
+ var newArgs = [];
+ var str = [];
+ for (var j = 0; j < glyphs.length; j++) {
+ var glyph = glyphs[j];
+ if (typeof glyph === "object" && glyph !== null) {
+ str.push(glyph.fontChar);
+ } else {
+ if (str.length > 0) {
+ newArgs.push(str.join(""));
+ str = [];
+ }
+ newArgs.push(glyph); // null or number
+ }
+ }
+ if (str.length > 0) {
+ newArgs.push(str.join(""));
+ }
+ decArgs = [newArgs];
+ }
+ line.appendChild(c("td", fn));
+ line.appendChild(c("td", JSON.stringify(simplifyArgs(decArgs))));
+ }
+ if (operatorsToDisplay < operatorList.fnArray.length) {
+ var lastCell = c("td", "...");
+ lastCell.colspan = 4;
+ chunk.appendChild(lastCell);
+ }
+ this.operatorListIdx = operatorList.fnArray.length;
+ this.table.appendChild(chunk);
+ },
+ getNextBreakPoint: function getNextBreakPoint() {
+ this.breakPoints.sort(function (a, b) {
+ return a - b;
+ });
+ for (var i = 0; i < this.breakPoints.length; i++) {
+ if (this.breakPoints[i] > this.currentIdx) {
+ return this.breakPoints[i];
+ }
+ }
+ return null;
+ },
+ breakIt: function breakIt(idx, callback) {
+ StepperManager.selectStepper(this.pageIndex, true);
+ var self = this;
+ var dom = document;
+ self.currentIdx = idx;
+ var listener = function (e) {
+ switch (e.keyCode) {
+ case 83: // step
+ dom.removeEventListener("keydown", listener);
+ self.nextBreakPoint = self.currentIdx + 1;
+ self.goTo(-1);
+ callback();
+ break;
+ case 67: // continue
+ dom.removeEventListener("keydown", listener);
+ var breakPoint = self.getNextBreakPoint();
+ self.nextBreakPoint = breakPoint;
+ self.goTo(-1);
+ callback();
+ break;
+ }
+ };
+ dom.addEventListener("keydown", listener);
+ self.goTo(idx);
+ },
+ goTo: function goTo(idx) {
+ var allRows = this.panel.getElementsByClassName("line");
+ for (var x = 0, xx = allRows.length; x < xx; ++x) {
+ var row = allRows[x];
+ if ((row.dataset.idx | 0) === idx) {
+ row.style.backgroundColor = "rgb(251,250,207)";
+ row.scrollIntoView();
+ } else {
+ row.style.backgroundColor = null;
+ }
+ }
+ },
+ };
+ return Stepper;
+})();
+
+var Stats = (function Stats() {
+ var stats = [];
+ function clear(node) {
+ while (node.hasChildNodes()) {
+ node.removeChild(node.lastChild);
+ }
+ }
+ function getStatIndex(pageNumber) {
+ for (var i = 0, ii = stats.length; i < ii; ++i) {
+ if (stats[i].pageNumber === pageNumber) {
+ return i;
+ }
+ }
+ return false;
+ }
+ return {
+ // Properties/functions needed by PDFBug.
+ id: "Stats",
+ name: "Stats",
+ panel: null,
+ manager: null,
+ init(pdfjsLib) {},
+ enabled: false,
+ active: false,
+ // Stats specific functions.
+ add(pageNumber, stat) {
+ if (!stat) {
+ return;
+ }
+ var statsIndex = getStatIndex(pageNumber);
+ if (statsIndex !== false) {
+ const b = stats[statsIndex];
+ this.panel.removeChild(b.div);
+ stats.splice(statsIndex, 1);
+ }
+ var wrapper = document.createElement("div");
+ wrapper.className = "stats";
+ var title = document.createElement("div");
+ title.className = "title";
+ title.textContent = "Page: " + pageNumber;
+ var statsDiv = document.createElement("div");
+ statsDiv.textContent = stat.toString();
+ wrapper.appendChild(title);
+ wrapper.appendChild(statsDiv);
+ stats.push({ pageNumber, div: wrapper });
+ stats.sort(function (a, b) {
+ return a.pageNumber - b.pageNumber;
+ });
+ clear(this.panel);
+ for (var i = 0, ii = stats.length; i < ii; ++i) {
+ this.panel.appendChild(stats[i].div);
+ }
+ },
+ cleanup() {
+ stats = [];
+ clear(this.panel);
+ },
+ };
+})();
+
+// Manages all the debugging tools.
+window.PDFBug = (function PDFBugClosure() {
+ var panelWidth = 300;
+ var buttons = [];
+ var activePanel = null;
+
+ return {
+ tools: [FontInspector, StepperManager, Stats],
+ enable(ids) {
+ var all = false,
+ tools = this.tools;
+ if (ids.length === 1 && ids[0] === "all") {
+ all = true;
+ }
+ for (var i = 0; i < tools.length; ++i) {
+ var tool = tools[i];
+ if (all || ids.includes(tool.id)) {
+ tool.enabled = true;
+ }
+ }
+ if (!all) {
+ // Sort the tools by the order they are enabled.
+ tools.sort(function (a, b) {
+ var indexA = ids.indexOf(a.id);
+ indexA = indexA < 0 ? tools.length : indexA;
+ var indexB = ids.indexOf(b.id);
+ indexB = indexB < 0 ? tools.length : indexB;
+ return indexA - indexB;
+ });
+ }
+ },
+ init(pdfjsLib, container) {
+ /*
+ * Basic Layout:
+ * PDFBug
+ * Controls
+ * Panels
+ * Panel
+ * Panel
+ * ...
+ */
+ var ui = document.createElement("div");
+ ui.id = "PDFBug";
+
+ var controls = document.createElement("div");
+ controls.setAttribute("class", "controls");
+ ui.appendChild(controls);
+
+ var panels = document.createElement("div");
+ panels.setAttribute("class", "panels");
+ ui.appendChild(panels);
+
+ container.appendChild(ui);
+ container.style.right = panelWidth + "px";
+
+ // Initialize all the debugging tools.
+ var tools = this.tools;
+ var self = this;
+ for (var i = 0; i < tools.length; ++i) {
+ var tool = tools[i];
+ var panel = document.createElement("div");
+ var panelButton = document.createElement("button");
+ panelButton.textContent = tool.name;
+ panelButton.addEventListener(
+ "click",
+ (function (selected) {
+ return function (event) {
+ event.preventDefault();
+ self.selectPanel(selected);
+ };
+ })(i)
+ );
+ controls.appendChild(panelButton);
+ panels.appendChild(panel);
+ tool.panel = panel;
+ tool.manager = this;
+ if (tool.enabled) {
+ tool.init(pdfjsLib);
+ } else {
+ panel.textContent =
+ tool.name +
+ " is disabled. To enable add " +
+ ' "' +
+ tool.id +
+ '" to the pdfBug parameter ' +
+ "and refresh (separate multiple by commas).";
+ }
+ buttons.push(panelButton);
+ }
+ this.selectPanel(0);
+ },
+ cleanup() {
+ for (var i = 0, ii = this.tools.length; i < ii; i++) {
+ if (this.tools[i].enabled) {
+ this.tools[i].cleanup();
+ }
+ }
+ },
+ selectPanel(index) {
+ if (typeof index !== "number") {
+ index = this.tools.indexOf(index);
+ }
+ if (index === activePanel) {
+ return;
+ }
+ activePanel = index;
+ var tools = this.tools;
+ for (var j = 0; j < tools.length; ++j) {
+ if (j === index) {
+ buttons[j].setAttribute("class", "active");
+ tools[j].active = true;
+ tools[j].panel.removeAttribute("hidden");
+ } else {
+ buttons[j].setAttribute("class", "");
+ tools[j].active = false;
+ tools[j].panel.setAttribute("hidden", "true");
+ }
+ }
+ },
+ };
+})();
diff --git a/thirdparty/pdfjs/web/images/annotation-check.svg b/thirdparty/pdfjs/web/images/annotation-check.svg
new file mode 100644
index 0000000..71cd16d
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/annotation-check.svg
@@ -0,0 +1,11 @@
+
+
diff --git a/thirdparty/pdfjs/web/images/annotation-comment.svg b/thirdparty/pdfjs/web/images/annotation-comment.svg
new file mode 100644
index 0000000..86f1f17
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/annotation-comment.svg
@@ -0,0 +1,16 @@
+
+
diff --git a/thirdparty/pdfjs/web/images/annotation-help.svg b/thirdparty/pdfjs/web/images/annotation-help.svg
new file mode 100644
index 0000000..00938fe
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/annotation-help.svg
@@ -0,0 +1,26 @@
+
+
diff --git a/thirdparty/pdfjs/web/images/annotation-insert.svg b/thirdparty/pdfjs/web/images/annotation-insert.svg
new file mode 100644
index 0000000..519ef68
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/annotation-insert.svg
@@ -0,0 +1,10 @@
+
+
diff --git a/thirdparty/pdfjs/web/images/annotation-key.svg b/thirdparty/pdfjs/web/images/annotation-key.svg
new file mode 100644
index 0000000..8d09d53
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/annotation-key.svg
@@ -0,0 +1,11 @@
+
+
diff --git a/thirdparty/pdfjs/web/images/annotation-newparagraph.svg b/thirdparty/pdfjs/web/images/annotation-newparagraph.svg
new file mode 100644
index 0000000..38d2497
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/annotation-newparagraph.svg
@@ -0,0 +1,11 @@
+
+
diff --git a/thirdparty/pdfjs/web/images/annotation-noicon.svg b/thirdparty/pdfjs/web/images/annotation-noicon.svg
new file mode 100644
index 0000000..c07d108
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/annotation-noicon.svg
@@ -0,0 +1,7 @@
+
+
diff --git a/thirdparty/pdfjs/web/images/annotation-note.svg b/thirdparty/pdfjs/web/images/annotation-note.svg
new file mode 100644
index 0000000..7017365
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/annotation-note.svg
@@ -0,0 +1,42 @@
+
+
diff --git a/thirdparty/pdfjs/web/images/annotation-paragraph.svg b/thirdparty/pdfjs/web/images/annotation-paragraph.svg
new file mode 100644
index 0000000..6ae5212
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/annotation-paragraph.svg
@@ -0,0 +1,16 @@
+
+
diff --git a/thirdparty/pdfjs/web/images/findbarButton-next.svg b/thirdparty/pdfjs/web/images/findbarButton-next.svg
new file mode 100644
index 0000000..a81eb02
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/findbarButton-next.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/findbarButton-previous.svg b/thirdparty/pdfjs/web/images/findbarButton-previous.svg
new file mode 100644
index 0000000..5fd7032
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/findbarButton-previous.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/grab.cur b/thirdparty/pdfjs/web/images/grab.cur
new file mode 100644
index 0000000..db7ad5a
Binary files /dev/null and b/thirdparty/pdfjs/web/images/grab.cur differ
diff --git a/thirdparty/pdfjs/web/images/grabbing.cur b/thirdparty/pdfjs/web/images/grabbing.cur
new file mode 100644
index 0000000..e0dfd04
Binary files /dev/null and b/thirdparty/pdfjs/web/images/grabbing.cur differ
diff --git a/thirdparty/pdfjs/web/images/loading-dark.svg b/thirdparty/pdfjs/web/images/loading-dark.svg
new file mode 100644
index 0000000..fa5269b
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/loading-dark.svg
@@ -0,0 +1,24 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/loading-icon.gif b/thirdparty/pdfjs/web/images/loading-icon.gif
new file mode 100644
index 0000000..1c72ebb
Binary files /dev/null and b/thirdparty/pdfjs/web/images/loading-icon.gif differ
diff --git a/thirdparty/pdfjs/web/images/loading.svg b/thirdparty/pdfjs/web/images/loading.svg
new file mode 100644
index 0000000..0a15ff6
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/loading.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/secondaryToolbarButton-documentProperties.svg b/thirdparty/pdfjs/web/images/secondaryToolbarButton-documentProperties.svg
new file mode 100644
index 0000000..6bd55cd
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/secondaryToolbarButton-documentProperties.svg
@@ -0,0 +1,15 @@
+
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/secondaryToolbarButton-firstPage.svg b/thirdparty/pdfjs/web/images/secondaryToolbarButton-firstPage.svg
new file mode 100644
index 0000000..2fa0fa6
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/secondaryToolbarButton-firstPage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/secondaryToolbarButton-handTool.svg b/thirdparty/pdfjs/web/images/secondaryToolbarButton-handTool.svg
new file mode 100644
index 0000000..3d038fa
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/secondaryToolbarButton-handTool.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/secondaryToolbarButton-lastPage.svg b/thirdparty/pdfjs/web/images/secondaryToolbarButton-lastPage.svg
new file mode 100644
index 0000000..53fa9a6
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/secondaryToolbarButton-lastPage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/secondaryToolbarButton-rotateCcw.svg b/thirdparty/pdfjs/web/images/secondaryToolbarButton-rotateCcw.svg
new file mode 100644
index 0000000..c71ea8e
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/secondaryToolbarButton-rotateCcw.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/secondaryToolbarButton-rotateCw.svg b/thirdparty/pdfjs/web/images/secondaryToolbarButton-rotateCw.svg
new file mode 100644
index 0000000..e1e19e7
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/secondaryToolbarButton-rotateCw.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal.svg b/thirdparty/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal.svg
new file mode 100644
index 0000000..8693eec
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/secondaryToolbarButton-scrollVertical.svg b/thirdparty/pdfjs/web/images/secondaryToolbarButton-scrollVertical.svg
new file mode 100644
index 0000000..ee1cf22
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/secondaryToolbarButton-scrollVertical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/secondaryToolbarButton-scrollWrapped.svg b/thirdparty/pdfjs/web/images/secondaryToolbarButton-scrollWrapped.svg
new file mode 100644
index 0000000..804e746
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/secondaryToolbarButton-scrollWrapped.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/secondaryToolbarButton-selectTool.svg b/thirdparty/pdfjs/web/images/secondaryToolbarButton-selectTool.svg
new file mode 100644
index 0000000..43e9789
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/secondaryToolbarButton-selectTool.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/secondaryToolbarButton-spreadEven.svg b/thirdparty/pdfjs/web/images/secondaryToolbarButton-spreadEven.svg
new file mode 100644
index 0000000..ddec5e6
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/secondaryToolbarButton-spreadEven.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/secondaryToolbarButton-spreadNone.svg b/thirdparty/pdfjs/web/images/secondaryToolbarButton-spreadNone.svg
new file mode 100644
index 0000000..63318c5
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/secondaryToolbarButton-spreadNone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/secondaryToolbarButton-spreadOdd.svg b/thirdparty/pdfjs/web/images/secondaryToolbarButton-spreadOdd.svg
new file mode 100644
index 0000000..29909e9
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/secondaryToolbarButton-spreadOdd.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/shadow.png b/thirdparty/pdfjs/web/images/shadow.png
new file mode 100644
index 0000000..a00061a
Binary files /dev/null and b/thirdparty/pdfjs/web/images/shadow.png differ
diff --git a/thirdparty/pdfjs/web/images/toolbarButton-bookmark.svg b/thirdparty/pdfjs/web/images/toolbarButton-bookmark.svg
new file mode 100644
index 0000000..79d39b0
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/toolbarButton-bookmark.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/toolbarButton-currentOutlineItem.svg b/thirdparty/pdfjs/web/images/toolbarButton-currentOutlineItem.svg
new file mode 100644
index 0000000..c1c72b2
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/toolbarButton-currentOutlineItem.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/toolbarButton-download.svg b/thirdparty/pdfjs/web/images/toolbarButton-download.svg
new file mode 100644
index 0000000..2cdb5db
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/toolbarButton-download.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/toolbarButton-menuArrow.svg b/thirdparty/pdfjs/web/images/toolbarButton-menuArrow.svg
new file mode 100644
index 0000000..46e41e1
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/toolbarButton-menuArrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/toolbarButton-openFile.svg b/thirdparty/pdfjs/web/images/toolbarButton-openFile.svg
new file mode 100644
index 0000000..cb35980
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/toolbarButton-openFile.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/toolbarButton-pageDown.svg b/thirdparty/pdfjs/web/images/toolbarButton-pageDown.svg
new file mode 100644
index 0000000..c5d8b0f
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/toolbarButton-pageDown.svg
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/toolbarButton-pageUp.svg b/thirdparty/pdfjs/web/images/toolbarButton-pageUp.svg
new file mode 100644
index 0000000..aa0160a
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/toolbarButton-pageUp.svg
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/toolbarButton-presentationMode.svg b/thirdparty/pdfjs/web/images/toolbarButton-presentationMode.svg
new file mode 100644
index 0000000..3f1f832
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/toolbarButton-presentationMode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/toolbarButton-print.svg b/thirdparty/pdfjs/web/images/toolbarButton-print.svg
new file mode 100644
index 0000000..d521c9a
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/toolbarButton-print.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/toolbarButton-search.svg b/thirdparty/pdfjs/web/images/toolbarButton-search.svg
new file mode 100644
index 0000000..28b7774
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/toolbarButton-search.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.svg b/thirdparty/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.svg
new file mode 100644
index 0000000..dbef238
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/toolbarButton-sidebarToggle.svg b/thirdparty/pdfjs/web/images/toolbarButton-sidebarToggle.svg
new file mode 100644
index 0000000..691c41c
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/toolbarButton-sidebarToggle.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/toolbarButton-viewAttachments.svg b/thirdparty/pdfjs/web/images/toolbarButton-viewAttachments.svg
new file mode 100644
index 0000000..e914ec0
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/toolbarButton-viewAttachments.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/toolbarButton-viewLayers.svg b/thirdparty/pdfjs/web/images/toolbarButton-viewLayers.svg
new file mode 100644
index 0000000..e8687b7
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/toolbarButton-viewLayers.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/toolbarButton-viewOutline.svg b/thirdparty/pdfjs/web/images/toolbarButton-viewOutline.svg
new file mode 100644
index 0000000..030c28d
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/toolbarButton-viewOutline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/toolbarButton-viewThumbnail.svg b/thirdparty/pdfjs/web/images/toolbarButton-viewThumbnail.svg
new file mode 100644
index 0000000..b997ec4
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/toolbarButton-viewThumbnail.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/toolbarButton-zoomIn.svg b/thirdparty/pdfjs/web/images/toolbarButton-zoomIn.svg
new file mode 100644
index 0000000..480d2ce
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/toolbarButton-zoomIn.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/toolbarButton-zoomOut.svg b/thirdparty/pdfjs/web/images/toolbarButton-zoomOut.svg
new file mode 100644
index 0000000..527f521
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/toolbarButton-zoomOut.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/treeitem-collapsed.svg b/thirdparty/pdfjs/web/images/treeitem-collapsed.svg
new file mode 100644
index 0000000..831cddf
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/treeitem-collapsed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/images/treeitem-expanded.svg b/thirdparty/pdfjs/web/images/treeitem-expanded.svg
new file mode 100644
index 0000000..2d45f0c
--- /dev/null
+++ b/thirdparty/pdfjs/web/images/treeitem-expanded.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/locale/ach/viewer.properties b/thirdparty/pdfjs/web/locale/ach/viewer.properties
new file mode 100644
index 0000000..46e36fb
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/ach/viewer.properties
@@ -0,0 +1,206 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pot buk mukato
+previous_label=Mukato
+next.title=Pot buk malubo
+next_label=Malubo
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pot buk
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=pi {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} me {{pagesCount}})
+
+zoom_out.title=Jwik Matidi
+zoom_out_label=Jwik Matidi
+zoom_in.title=Kwot Madit
+zoom_in_label=Kwot Madit
+zoom.title=Kwoti
+presentation_mode.title=Lokke i kit me tyer
+presentation_mode_label=Kit me tyer
+open_file.title=Yab Pwail
+open_file_label=Yab
+print.title=Go
+print_label=Go
+download.title=Gam
+download_label=Gam
+bookmark.title=Neno ma kombedi (lok onyo yab i dirica manyen)
+bookmark_label=Neno ma kombedi
+
+# Secondary toolbar and context menu
+tools.title=Gintic
+tools_label=Gintic
+first_page.title=Cit i pot buk mukwongo
+first_page.label=Cit i pot buk mukwongo
+first_page_label=Cit i pot buk mukwongo
+last_page.title=Cit i pot buk magiko
+last_page.label=Cit i pot buk magiko
+last_page_label=Cit i pot buk magiko
+page_rotate_cw.title=Wire i tung lacuc
+page_rotate_cw.label=Wire i tung lacuc
+page_rotate_cw_label=Wire i tung lacuc
+page_rotate_ccw.title=Wire i tung lacam
+page_rotate_ccw.label=Wire i tung lacam
+page_rotate_ccw_label=Wire i tung lacam
+
+cursor_text_select_tool.title=Cak gitic me yero coc
+cursor_text_select_tool_label=Gitic me yero coc
+cursor_hand_tool.title=Cak gitic me cing
+cursor_hand_tool_label=Gitic cing
+
+
+
+# Document properties dialog box
+document_properties.title=Jami me gin acoya…
+document_properties_label=Jami me gin acoya…
+document_properties_file_name=Nying pwail:
+document_properties_file_size=Dit pa pwail:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Wiye:
+document_properties_author=Ngat mucoyo:
+document_properties_subject=Subjek:
+document_properties_keywords=Lok mapire tek:
+document_properties_creation_date=Nino dwe me cwec:
+document_properties_modification_date=Nino dwe me yub:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Lacwec:
+document_properties_producer=Layub PDF:
+document_properties_version=Kit PDF:
+document_properties_page_count=Kwan me pot buk:
+document_properties_page_size=Dit pa potbuk:
+document_properties_page_size_unit_inches=i
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=atir
+document_properties_page_size_orientation_landscape=arii
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Waraga
+document_properties_page_size_name_legal=Cik
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=Eyo
+document_properties_linearized_no=Pe
+document_properties_close=Lor
+
+print_progress_message=Yubo coc me agoya…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Juki
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Lok gintic ma inget
+toggle_sidebar_notification.title=Lok lanyut me nget (wiyewiye tye i gin acoya/attachments)
+toggle_sidebar_label=Lok gintic ma inget
+document_outline.title=Nyut Wiyewiye me Gin acoya (dii-kiryo me yaro/kano jami weng)
+document_outline_label=Pek pa gin acoya
+attachments.title=Nyut twec
+attachments_label=Twec
+thumbs.title=Nyut cal
+thumbs_label=Cal
+findbar.title=Nong iye gin acoya
+findbar_label=Nong
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pot buk {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Cal me pot buk {{page}}
+
+# Find panel button title and messages
+find_input.title=Nong
+find_input.placeholder=Nong i dokumen…
+find_previous.title=Nong timme pa lok mukato
+find_previous_label=Mukato
+find_next.title=Nong timme pa lok malubo
+find_next_label=Malubo
+find_highlight=Wer weng
+find_match_case_label=Lok marwate
+find_reached_top=Oo iwi gin acoya, omede ki i tere
+find_reached_bottom=Oo i agiki me gin acoya, omede ki iwiye
+find_not_found=Lok pe ononge
+
+# Error panel labels
+error_more_info=Ngec Mukene
+error_less_info=Ngec Manok
+error_close=Lor
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Kwena: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Can kikore {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Pwail: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rek: {{line}}
+rendering_error=Bal otime i kare me nyuto pot buk.
+
+# Predefined zoom values
+page_scale_width=Lac me iye pot buk
+page_scale_fit=Porre me pot buk
+page_scale_auto=Kwot pire kene
+page_scale_actual=Dite kikome
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Bal
+loading_error=Bal otime kun cano PDF.
+invalid_file_error=Pwail me PDF ma pe atir onyo obale woko.
+missing_file_error=Pwail me PDF tye ka rem.
+unexpected_response_error=Lagam mape kigeno pa lapok tic.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Lok angea manok]
+password_label=Ket mung me donyo me yabo pwail me PDF man.
+password_invalid=Mung me donyo pe atir. Tim ber i tem doki.
+password_ok=OK
+password_cancel=Juki
+
+printing_not_supported=Ciko: Layeny ma pe teno goyo liweng.
+printing_not_ready=Ciko: PDF pe ocane weng me agoya.
+web_fonts_disabled=Kijuko dit pa coc me kakube woko: pe romo tic ki dit pa coc me PDF ma kiketo i kine.
diff --git a/thirdparty/pdfjs/web/locale/af/viewer.properties b/thirdparty/pdfjs/web/locale/af/viewer.properties
new file mode 100644
index 0000000..c7d6c42
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/af/viewer.properties
@@ -0,0 +1,183 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Vorige bladsy
+previous_label=Vorige
+next.title=Volgende bladsy
+next_label=Volgende
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Bladsy
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=van {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} van {{pagesCount}})
+
+zoom_out.title=Zoem uit
+zoom_out_label=Zoem uit
+zoom_in.title=Zoem in
+zoom_in_label=Zoem in
+zoom.title=Zoem
+presentation_mode.title=Wissel na voorleggingsmodus
+presentation_mode_label=Voorleggingsmodus
+open_file.title=Open lêer
+open_file_label=Open
+print.title=Druk
+print_label=Druk
+download.title=Laai af
+download_label=Laai af
+bookmark.title=Huidige aansig (kopieer of open in nuwe venster)
+bookmark_label=Huidige aansig
+
+# Secondary toolbar and context menu
+tools.title=Nutsgoed
+tools_label=Nutsgoed
+first_page.title=Gaan na eerste bladsy
+first_page.label=Gaan na eerste bladsy
+first_page_label=Gaan na eerste bladsy
+last_page.title=Gaan na laaste bladsy
+last_page.label=Gaan na laaste bladsy
+last_page_label=Gaan na laaste bladsy
+page_rotate_cw.title=Roteer kloksgewys
+page_rotate_cw.label=Roteer kloksgewys
+page_rotate_cw_label=Roteer kloksgewys
+page_rotate_ccw.title=Roteer anti-kloksgewys
+page_rotate_ccw.label=Roteer anti-kloksgewys
+page_rotate_ccw_label=Roteer anti-kloksgewys
+
+cursor_text_select_tool.title=Aktiveer gereedskap om teks te merk
+cursor_text_select_tool_label=Teksmerkgereedskap
+cursor_hand_tool.title=Aktiveer handjie
+cursor_hand_tool_label=Handjie
+
+# Document properties dialog box
+document_properties.title=Dokumenteienskappe…
+document_properties_label=Dokumenteienskappe…
+document_properties_file_name=Lêernaam:
+document_properties_file_size=Lêergrootte:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kG ({{size_b}} grepe)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MG ({{size_b}} grepe)
+document_properties_title=Titel:
+document_properties_author=Outeur:
+document_properties_subject=Onderwerp:
+document_properties_keywords=Sleutelwoorde:
+document_properties_creation_date=Skeppingsdatum:
+document_properties_modification_date=Wysigingsdatum:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Skepper:
+document_properties_producer=PDF-vervaardiger:
+document_properties_version=PDF-weergawe:
+document_properties_page_count=Aantal bladsye:
+document_properties_close=Sluit
+
+print_progress_message=Berei tans dokument voor om te druk…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Kanselleer
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Sypaneel aan/af
+toggle_sidebar_notification.title=Sypaneel aan/af (dokument bevat skema/aanhegsels)
+toggle_sidebar_label=Sypaneel aan/af
+document_outline.title=Wys dokumentskema (dubbelklik om alle items oop/toe te vou)
+document_outline_label=Dokumentoorsig
+attachments.title=Wys aanhegsels
+attachments_label=Aanhegsels
+thumbs.title=Wys duimnaels
+thumbs_label=Duimnaels
+findbar.title=Soek in dokument
+findbar_label=Vind
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Bladsy {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Duimnael van bladsy {{page}}
+
+# Find panel button title and messages
+find_input.title=Vind
+find_input.placeholder=Soek in dokument…
+find_previous.title=Vind die vorige voorkoms van die frase
+find_previous_label=Vorige
+find_next.title=Vind die volgende voorkoms van die frase
+find_next_label=Volgende
+find_highlight=Verlig almal
+find_match_case_label=Kassensitief
+find_reached_top=Bokant van dokument is bereik; gaan voort van onder af
+find_reached_bottom=Einde van dokument is bereik; gaan voort van bo af
+find_not_found=Frase nie gevind nie
+
+# Error panel labels
+error_more_info=Meer inligting
+error_less_info=Minder inligting
+error_close=Sluit
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (ID: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Boodskap: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stapel: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Lêer: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Lyn: {{line}}
+rendering_error='n Fout het voorgekom toe die bladsy weergegee is.
+
+# Predefined zoom values
+page_scale_width=Bladsywydte
+page_scale_fit=Pas bladsy
+page_scale_auto=Outomatiese zoem
+page_scale_actual=Werklike grootte
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Fout
+loading_error='n Fout het voorgekom met die laai van die PDF.
+invalid_file_error=Ongeldige of korrupte PDF-lêer.
+missing_file_error=PDF-lêer is weg.
+unexpected_response_error=Onverwagse antwoord van bediener.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}}-annotasie]
+password_label=Gee die wagwoord om dié PDF-lêer mee te open.
+password_invalid=Ongeldige wagwoord. Probeer gerus weer.
+password_ok=OK
+password_cancel=Kanselleer
+
+printing_not_supported=Waarskuwing: Dié blaaier ondersteun nie drukwerk ten volle nie.
+printing_not_ready=Waarskuwing: Die PDF is nog nie volledig gelaai vir drukwerk nie.
+web_fonts_disabled=Webfonte is gedeaktiveer: kan nie PDF-fonte wat ingebed is, gebruik nie.
diff --git a/thirdparty/pdfjs/web/locale/an/viewer.properties b/thirdparty/pdfjs/web/locale/an/viewer.properties
new file mode 100644
index 0000000..e33936c
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/an/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pachina anterior
+previous_label=Anterior
+next.title=Pachina siguient
+next_label=Siguient
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pachina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Achiquir
+zoom_out_label=Achiquir
+zoom_in.title=Agrandir
+zoom_in_label=Agrandir
+zoom.title=Grandaria
+presentation_mode.title=Cambear t'o modo de presentación
+presentation_mode_label=Modo de presentación
+open_file.title=Ubrir o fichero
+open_file_label=Ubrir
+print.title=Imprentar
+print_label=Imprentar
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar u ubrir en una nueva finestra)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Ferramientas
+tools_label=Ferramientas
+first_page.title=Ir ta la primer pachina
+first_page.label=Ir ta la primer pachina
+first_page_label=Ir ta la primer pachina
+last_page.title=Ir ta la zaguer pachina
+last_page.label=Ir ta la zaguera pachina
+last_page_label=Ir ta la zaguer pachina
+page_rotate_cw.title=Chirar enta la dreita
+page_rotate_cw.label=Chirar enta la dreita
+page_rotate_cw_label=Chira enta la dreita
+page_rotate_ccw.title=Chirar enta la zurda
+page_rotate_ccw.label=Chirar en sentiu antihorario
+page_rotate_ccw_label=Chirar enta la zurda
+
+cursor_text_select_tool.title=Activar la ferramienta de selección de texto
+cursor_text_select_tool_label=Ferramienta de selección de texto
+cursor_hand_tool.title=Activar la ferramienta man
+cursor_hand_tool_label=Ferramienta man
+
+scroll_vertical.title=Usar lo desplazamiento vertical
+scroll_vertical_label=Desplazamiento vertical
+scroll_horizontal.title=Usar lo desplazamiento horizontal
+scroll_horizontal_label=Desplazamiento horizontal
+scroll_wrapped.title=Activaar lo desplazamiento contino
+scroll_wrapped_label=Desplazamiento contino
+
+spread_none.title=No unir vistas de pachinas
+spread_none_label=Una pachina nomás
+spread_odd.title=Mostrar vista de pachinas, con as impars a la zurda
+spread_odd_label=Doble pachina, impar a la zurda
+spread_even.title=Amostrar vista de pachinas, con as pars a la zurda
+spread_even_label=Doble pachina, para a la zurda
+
+# Document properties dialog box
+document_properties.title=Propiedatz d'o documento...
+document_properties_label=Propiedatz d'o documento...
+document_properties_file_name=Nombre de fichero:
+document_properties_file_size=Grandaria d'o fichero:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titol:
+document_properties_author=Autor:
+document_properties_subject=Afer:
+document_properties_keywords=Parolas clau:
+document_properties_creation_date=Calendata de creyación:
+document_properties_modification_date=Calendata de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creyador:
+document_properties_producer=Creyador de PDF:
+document_properties_version=Versión de PDF:
+document_properties_page_count=Numero de pachinas:
+document_properties_page_size=Mida de pachina:
+document_properties_page_size_unit_inches=pulgadas
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} x {{height}} {{unit}} {{orientation}}
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} x {{height}} {{unit}} {{name}}, {{orientation}}
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista web rapida:
+document_properties_linearized_yes=SÃ
+document_properties_linearized_no=No
+document_properties_close=Zarrar
+
+print_progress_message=Se ye preparando la documentación pa imprentar…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Amostrar u amagar a barra lateral
+toggle_sidebar_notification.title=Cambiar barra lateral (lo documento contiene esquema/adchuntos)
+toggle_sidebar_notification2.title=Cambiar barra lateral (lo documento contiene esquema/adchuntos/capas)
+toggle_sidebar_label=Amostrar a barra lateral
+document_outline.title=Amostrar esquema d'o documento (fer doble clic pa expandir/compactar totz los items)
+document_outline_label=Esquema d'o documento
+attachments.title=Amostrar os adchuntos
+attachments_label=Adchuntos
+layers.title=Amostrar capas (doble clic para reiniciar totas las capas a lo estau per defecto)
+layers_label=Capas
+thumbs.title=Amostrar as miniaturas
+thumbs_label=Miniaturas
+findbar.title=Trobar en o documento
+findbar_label=Trobar
+
+additional_layers=Capas adicionals
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Pachina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pachina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura d'a pachina {{page}}
+
+# Find panel button title and messages
+find_input.title=Trobar
+find_input.placeholder=Trobar en o documento…
+find_previous.title=Trobar l'anterior coincidencia d'a frase
+find_previous_label=Anterior
+find_next.title=Trobar a siguient coincidencia d'a frase
+find_next_label=Siguient
+find_highlight=Resaltar-lo tot
+find_match_case_label=Coincidencia de mayusclas/minusclas
+find_entire_word_label=Parolas completas
+find_reached_top=S'ha plegau a l'inicio d'o documento, se contina dende baixo
+find_reached_bottom=S'ha plegau a la fin d'o documento, se contina dende alto
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidencia
+find_match_count[two]={{current}} de {{total}} coincidencias
+find_match_count[few]={{current}} de {{total}} coincidencias
+find_match_count[many]={{current}} de {{total}} coincidencias
+find_match_count[other]={{current}} de {{total}} coincidencias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mas de {{limit}} coincidencias
+find_match_count_limit[one]=Mas de {{limit}} coincidencias
+find_match_count_limit[two]=Mas que {{limit}} coincidencias
+find_match_count_limit[few]=Mas que {{limit}} coincidencias
+find_match_count_limit[many]=Mas que {{limit}} coincidencias
+find_match_count_limit[other]=Mas que {{limit}} coincidencias
+find_not_found=No s'ha trobau a frase
+
+# Error panel labels
+error_more_info=Mas información
+error_less_info=Menos información
+error_close=Zarrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensache: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fichero: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linia: {{line}}
+rendering_error=Ha ocurriu una error en renderizar a pachina.
+
+# Predefined zoom values
+page_scale_width=Amplaria d'a pachina
+page_scale_fit=Achuste d'a pachina
+page_scale_auto=Grandaria automatica
+page_scale_actual=Grandaria actual
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=S'ha produciu una error en cargar o PDF.
+invalid_file_error=O PDF no ye valido u ye estorbau.
+missing_file_error=No i ha fichero PDF.
+unexpected_response_error=Respuesta a lo servicio inasperada.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotación {{type}}]
+password_label=Introduzca a clau ta ubrir iste fichero PDF.
+password_invalid=Clau invalida. Torna a intentar-lo.
+password_ok=Acceptar
+password_cancel=Cancelar
+
+printing_not_supported=Pare cuenta: Iste navegador no maneya totalment as impresions.
+printing_not_ready=Aviso: Encara no se ha cargau completament o PDF ta imprentar-lo.
+web_fonts_disabled=As fuents web son desactivadas: no se puet incrustar fichers PDF.
diff --git a/thirdparty/pdfjs/web/locale/ar/viewer.properties b/thirdparty/pdfjs/web/locale/ar/viewer.properties
new file mode 100644
index 0000000..c1ae0bf
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/ar/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Ø§Ù„ØµÙØØ© السابقة
+previous_label=السابقة
+next.title=Ø§Ù„ØµÙØØ© التالية
+next_label=التالية
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ØµÙØØ©
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=من {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} من {{pagesCount}})
+
+zoom_out.title=بعّد
+zoom_out_label=بعّد
+zoom_in.title=قرّب
+zoom_in_label=قرّب
+zoom.title=التقريب
+presentation_mode.title=انتقل لوضع العرض التقديمي
+presentation_mode_label=وضع العرض التقديمي
+open_file.title=Ø§ÙØªØ ملÙًا
+open_file_label=Ø§ÙØªØ
+print.title=اطبع
+print_label=اطبع
+download.title=نزّل
+download_label=نزّل
+bookmark.title=المنظور Ø§Ù„ØØ§Ù„ÙŠ (انسخ أو Ø§ÙØªØ ÙÙŠ Ù†Ø§ÙØ°Ø© جديدة)
+bookmark_label=المنظور Ø§Ù„ØØ§Ù„ÙŠ
+
+# Secondary toolbar and context menu
+tools.title=الأدوات
+tools_label=الأدوات
+first_page.title=انتقل إلى Ø§Ù„ØµÙØØ© الأولى
+first_page.label=انتقل إلى Ø§Ù„ØµÙØØ© الأولى
+first_page_label=انتقل إلى Ø§Ù„ØµÙØØ© الأولى
+last_page.title=انتقل إلى Ø§Ù„ØµÙØØ© الأخيرة
+last_page.label=انتقل إلى Ø§Ù„ØµÙØØ© الأخيرة
+last_page_label=انتقل إلى Ø§Ù„ØµÙØØ© الأخيرة
+page_rotate_cw.title=أدر باتجاه عقارب الساعة
+page_rotate_cw.label=أدر باتجاه عقارب الساعة
+page_rotate_cw_label=أدر باتجاه عقارب الساعة
+page_rotate_ccw.title=أدر بعكس اتجاه عقارب الساعة
+page_rotate_ccw.label=أدر بعكس اتجاه عقارب الساعة
+page_rotate_ccw_label=أدر بعكس اتجاه عقارب الساعة
+
+cursor_text_select_tool.title=ÙØ¹Ù‘Ù„ أداة اختيار النص
+cursor_text_select_tool_label=أداة اختيار النص
+cursor_hand_tool.title=ÙØ¹Ù‘Ù„ أداة اليد
+cursor_hand_tool_label=أداة اليد
+
+scroll_vertical.title=استخدم التمرير الرأسي
+scroll_vertical_label=التمرير الرأسي
+scroll_horizontal.title=استخدم التمرير الأÙقي
+scroll_horizontal_label=التمرير الأÙقي
+scroll_wrapped.title=استخدم التمرير الملتÙ
+scroll_wrapped_label=التمرير الملتÙ
+
+spread_none.title=لا تدمج هوامش Ø§Ù„ØµÙØØ§Øª مع بعضها البعض
+spread_none_label=بلا هوامش
+spread_odd.title=ادمج هوامش Ø§Ù„ØµÙØØ§Øª Ø§Ù„ÙØ±Ø¯ÙŠØ©
+spread_odd_label=هوامش Ø§Ù„ØµÙØØ§Øª Ø§Ù„ÙØ±Ø¯ÙŠØ©
+spread_even.title=ادمج هوامش Ø§Ù„ØµÙØØ§Øª الزوجية
+spread_even_label=هوامش Ø§Ù„ØµÙØØ§Øª الزوجية
+
+# Document properties dialog box
+document_properties.title=خصائص المستند…
+document_properties_label=خصائص المستند…
+document_properties_file_name=اسم الملÙ:
+document_properties_file_size=ØØ¬Ù… الملÙ:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} ك.بايت ({{size_b}} بايت)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} م.بايت ({{size_b}} بايت)
+document_properties_title=العنوان:
+document_properties_author=المؤلÙ:
+document_properties_subject=الموضوع:
+document_properties_keywords=الكلمات الأساسية:
+document_properties_creation_date=تاريخ الإنشاء:
+document_properties_modification_date=تاريخ التعديل:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}، {{time}}
+document_properties_creator=المنشئ:
+document_properties_producer=منتج PDF:
+document_properties_version=إصدارة PDF:
+document_properties_page_count=عدد Ø§Ù„ØµÙØØ§Øª:
+document_properties_page_size=مقاس الورقة:
+document_properties_page_size_unit_inches=بوصة
+document_properties_page_size_unit_millimeters=ملم
+document_properties_page_size_orientation_portrait=طوليّ
+document_properties_page_size_orientation_landscape=عرضيّ
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=خطاب
+document_properties_page_size_name_legal=قانونيّ
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string=â€{{width}} × â€{{height}} â€{{unit}} (â€{{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string=â€{{width}} × â€{{height}} â€{{unit}} (â€{{name}}ØŒ {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=العرض السريع عبر Ø§Ù„ÙˆÙØ¨:
+document_properties_linearized_yes=نعم
+document_properties_linearized_no=لا
+document_properties_close=أغلق
+
+print_progress_message=ÙŠÙØØ¶Ù‘Ø± المستند للطباعة…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}Ùª
+print_progress_close=ألغÙ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=بدّل ظهور الشريط الجانبي
+toggle_sidebar_notification.title=بدّل ظهور الشريط الجانبي (ÙŠØØªÙˆÙŠ Ø§Ù„Ù…Ø³ØªÙ†Ø¯ على مخطط أو مرÙقات)
+toggle_sidebar_notification2.title=بدّل ظهور الشريط الجانبي (ÙŠØØªÙˆÙŠ Ø§Ù„Ù…Ø³ØªÙ†Ø¯ على مخطط أو مرÙقات أو طبقات)
+toggle_sidebar_label=بدّل ظهور الشريط الجانبي
+document_outline.title=اعرض Ùهرس المستند (نقر مزدوج لتمديد أو تقليص كل العناصر)
+document_outline_label=مخطط المستند
+attachments.title=اعرض المرÙقات
+attachments_label=Ø§Ù„Ù…ÙØ±Ùقات
+layers.title=اعرض الطبقات (انقر مرتين لتصÙير كل الطبقات إلى Ø§Ù„ØØ§Ù„Ø© المبدئية)
+layers_label=â€â€Ø§Ù„طبقات
+thumbs.title=اعرض Ù…ÙØµØºØ±Ø§Øª
+thumbs_label=Ù…ÙØµØºÙ‘رات
+findbar.title=Ø§Ø¨ØØ« ÙÙŠ المستند
+findbar_label=Ø§Ø¨ØØ«
+
+additional_layers=الطبقات الإضاÙية
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=ØµÙØØ© {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=ØµÙØØ© {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=مصغّرة ØµÙØØ© {{page}}
+
+# Find panel button title and messages
+find_input.title=Ø§Ø¨ØØ«
+find_input.placeholder=Ø§Ø¨ØØ« ÙÙŠ المستند…
+find_previous.title=Ø§Ø¨ØØ« عن التّواجد السّابق للعبارة
+find_previous_label=السابق
+find_next.title=Ø§Ø¨ØØ« عن التّواجد التّالي للعبارة
+find_next_label=التالي
+find_highlight=Ø£Ø¨Ø±ÙØ² الكل
+find_match_case_label=طابق ØØ§Ù„Ø© Ø§Ù„Ø£ØØ±Ù
+find_entire_word_label=كلمات كاملة
+find_reached_top=تابعت من الأسÙÙ„ بعدما وصلت إلى بداية المستند
+find_reached_bottom=تابعت من الأعلى بعدما وصلت إلى نهاية المستند
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} من أصل مطابقة ÙˆØ§ØØ¯Ø©
+find_match_count[two]={{current}} من أصل مطابقتين
+find_match_count[few]={{current}} من أصل {{total}} مطابقات
+find_match_count[many]={{current}} من أصل {{total}} مطابقة
+find_match_count[other]={{current}} من أصل {{total}} مطابقة
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Ùقط
+find_match_count_limit[one]=أكثر من مطابقة ÙˆØ§ØØ¯Ø©
+find_match_count_limit[two]=أكثر من مطابقتين
+find_match_count_limit[few]=أكثر من {{limit}} مطابقات
+find_match_count_limit[many]=أكثر من {{limit}} مطابقة
+find_match_count_limit[other]=أكثر من {{limit}} مطابقة
+find_not_found=لا وجود للعبارة
+
+# Error panel labels
+error_more_info=معلومات أكثر
+error_less_info=معلومات أقل
+error_close=أغلق
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=â€PDF.js Ù†{{version}} â€(بناء: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=الرسالة: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=الرصّة: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=الملÙ: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=السطر: {{line}}
+rendering_error=ØØ¯Ø« خطأ أثناء عرض Ø§Ù„ØµÙØØ©.
+
+# Predefined zoom values
+page_scale_width=عرض Ø§Ù„ØµÙØØ©
+page_scale_fit=ملائمة Ø§Ù„ØµÙØØ©
+page_scale_auto=تقريب تلقائي
+page_scale_actual=Ø§Ù„ØØ¬Ù… Ø§Ù„ÙØ¹Ù„ÙŠ
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}Ùª
+
+# Loading indicator messages
+loading_error_indicator=عطل
+loading_error=ØØ¯Ø« عطل أثناء تØÙ…يل مل٠PDF.
+invalid_file_error=مل٠PDF تال٠أو غير صØÙŠØ.
+missing_file_error=مل٠PDF غير موجود.
+unexpected_response_error=استجابة خادوم غير متوقعة.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}، {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[تعليق {{type}}]
+password_label=أدخل لكلمة السر Ù„ÙØªØ هذا الملÙ.
+password_invalid=كلمة سر خطأ. من ÙØ¶Ù„Ùƒ أعد Ø§Ù„Ù…ØØ§ÙˆÙ„Ø©.
+password_ok=ØØ³Ù†Ø§
+password_cancel=ألغÙ
+
+printing_not_supported=ØªØØ°ÙŠØ±: لا يدعم هذا Ø§Ù„Ù…ØªØµÙØ الطباعة بشكل كامل.
+printing_not_ready=ØªØØ°ÙŠØ±: مل٠PDF لم ÙŠÙØÙ…Ù‘Ù„ كاملًا للطباعة.
+web_fonts_disabled=خطوط الوب Ù…ÙØ¹Ø·Ù‘لة: تعذّر استخدام خطوط PDF Ø§Ù„Ù…ÙØ¶Ù…ّنة.
diff --git a/thirdparty/pdfjs/web/locale/ast/viewer.properties b/thirdparty/pdfjs/web/locale/ast/viewer.properties
new file mode 100644
index 0000000..5f6d5e7
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/ast/viewer.properties
@@ -0,0 +1,206 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Páxina anterior
+previous_label=Anterior
+next.title=Páxina siguiente
+next_label=Siguiente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Páxina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Reducir
+zoom_out_label=Reducir
+zoom_in.title=Aumentar
+zoom_in_label=Aumentar
+zoom.title=Tamañu
+open_file.title=Abrir ficheru
+open_file_label=Abrir
+print.title=Imprentar
+print_label=Imprentar
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar o abrir nuna nueva ventana)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Ferramientes
+tools_label=Ferramientes
+first_page.title=Dir a la primer páxina
+first_page.label=Dir a la primer páxina
+first_page_label=Dir a la primer páxina
+last_page.title=Dir a la postrer páxina
+last_page.label=Dir a la cabera páxina
+last_page_label=Dir a la postrer páxina
+page_rotate_cw.title=Xirar en sen horariu
+page_rotate_cw_label=Xirar en sen horariu
+page_rotate_ccw.title=Xirar en sen antihorariu
+page_rotate_ccw_label=Xirar en sen antihorariu
+
+
+scroll_vertical_label=Desplazamientu vertical
+scroll_horizontal_label=Desplazamientu horizontal
+
+
+# Document properties dialog box
+document_properties.title=Propiedaes del documentu…
+document_properties_label=Propiedaes del documentu…
+document_properties_file_name=Nome de ficheru:
+document_properties_file_size=Tamañu de ficheru:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=TÃtulu:
+document_properties_author=Autor:
+document_properties_subject=Asuntu:
+document_properties_keywords=Pallabres clave:
+document_properties_creation_date=Data de creación:
+document_properties_modification_date=Data de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creador:
+document_properties_producer=Productor PDF:
+document_properties_version=Versión PDF:
+document_properties_page_count=Númberu de páxines:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=SÃ
+document_properties_linearized_no=Non
+document_properties_close=Zarrar
+
+print_progress_message=Tresnando documentu pa imprentar…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Encaboxar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Camudar barra llateral
+toggle_sidebar_label=Camudar barra llateral
+document_outline.title=Amosar esquema del documentu (duble clic pa espander/contrayer tolos elementos)
+document_outline_label=Esquema del documentu
+attachments.title=Amosar axuntos
+attachments_label=Axuntos
+thumbs.title=Amosar miniatures
+thumbs_label=Miniatures
+findbar.title=Guetar nel documentu
+findbar_label=Guetar
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Páxina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura de la páxina {{page}}
+
+# Find panel button title and messages
+find_input.title=Guetar
+find_input.placeholder=Guetar nel documentu…
+find_previous.title=Alcontrar l'anterior apaición de la fras
+find_previous_label=Anterior
+find_next.title=Alcontrar la siguiente apaición d'esta fras
+find_next_label=Siguiente
+find_highlight=Remarcar toos
+find_match_case_label=Coincidencia de mayús./minús.
+find_entire_word_label=Pallabres enteres
+find_reached_top=Algamóse'l principiu del documentu, siguir dende'l final
+find_reached_bottom=Algamóse'l final del documentu, siguir dende'l principiu
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_not_found=Frase non atopada
+
+# Error panel labels
+error_more_info=Más información
+error_less_info=Menos información
+error_close=Zarrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensaxe: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Ficheru: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Llinia: {{line}}
+rendering_error=Hebo un fallu al renderizar la páxina.
+
+# Predefined zoom values
+page_scale_width=Anchor de la páxina
+page_scale_fit=Axuste de la páxina
+page_scale_auto=Tamañu automáticu
+page_scale_actual=Tamañu actual
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Fallu
+loading_error=Hebo un fallu al cargar el PDF.
+invalid_file_error=Ficheru PDF inválidu o corruptu.
+missing_file_error=Nun hai ficheru PDF.
+unexpected_response_error=Rempuesta inesperada del sirvidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotación {{type}}]
+password_label=Introduz la contraseña p'abrir esti ficheru PDF
+password_invalid=Contraseña non válida. Vuelvi a intentalo.
+password_ok=Aceutar
+password_cancel=Encaboxar
+
+printing_not_supported=Alvertencia: La imprentación entá nun ta sofitada dafechu nesti restolador.
+printing_not_ready=Avisu: Esti PDF nun se cargó completamente pa poder imprentase.
+web_fonts_disabled=Les fontes web tán desactivaes: ye imposible usar les fontes PDF embebÃes.
diff --git a/thirdparty/pdfjs/web/locale/az/viewer.properties b/thirdparty/pdfjs/web/locale/az/viewer.properties
new file mode 100644
index 0000000..99b94a3
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/az/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ÆvvÉ™lki sÉ™hifÉ™
+previous_label=ÆvvÉ™lkini tap
+next.title=Növbəti səhifə
+next_label=İrəli
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Səhifə
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=UzaqlaÅŸ
+zoom_out_label=UzaqlaÅŸ
+zoom_in.title=Yaxınlaş
+zoom_in_label=Yaxınlaş
+zoom.title=Yaxınlaşdırma
+presentation_mode.title=Təqdimat Rejiminə Keç
+presentation_mode_label=Təqdimat Rejimi
+open_file.title=Fayl Aç
+open_file_label=Aç
+print.title=Yazdır
+print_label=Yazdır
+download.title=Endir
+download_label=Endir
+bookmark.title=Hazırkı görünüş (köçür və ya yeni pəncərədə aç)
+bookmark_label=Hazırkı görünüş
+
+# Secondary toolbar and context menu
+tools.title=Alətlər
+tools_label=Alətlər
+first_page.title=İlk Səhifəyə get
+first_page.label=İlk Səhifəyə get
+first_page_label=İlk Səhifəyə get
+last_page.title=Son Səhifəyə get
+last_page.label=Son Səhifəyə get
+last_page_label=Son Səhifəyə get
+page_rotate_cw.title=Saat İstiqamətində Fırlat
+page_rotate_cw.label=Saat İstiqamətində Fırlat
+page_rotate_cw_label=Saat İstiqamətində Fırlat
+page_rotate_ccw.title=Saat İstiqamÉ™tinin ÆksinÉ™ Fırlat
+page_rotate_ccw.label=Saat İstiqamÉ™tinin ÆksinÉ™ Fırlat
+page_rotate_ccw_label=Saat İstiqamÉ™tinin ÆksinÉ™ Fırlat
+
+cursor_text_select_tool.title=Yazı seçmə alətini aktivləşdir
+cursor_text_select_tool_label=Yazı seçmə aləti
+cursor_hand_tool.title=Æl alÉ™tini aktivləşdir
+cursor_hand_tool_label=Æl alÉ™ti
+
+scroll_vertical.title=Şaquli sürüşdürmə işlət
+scroll_vertical_label=Şaquli sürüşdürmə
+scroll_horizontal.title=Üfüqi sürüşdürmə işlət
+scroll_horizontal_label=Üfüqi sürüşdürmə
+scroll_wrapped.title=Bükülü sürüşdürmə işlət
+scroll_wrapped_label=Bükülü sürüşdürmə
+
+spread_none.title=Yan-yana birləşdirilmiş səhifələri işlətmə
+spread_none_label=Birləşdirmə
+spread_odd.title=Yan-yana birləşdirilmiş səhifələri tək nömrəli səhifələrdən başlat
+spread_odd_label=Tək nömrəli
+spread_even.title=Yan-yana birləşdirilmiş səhifələri cüt nömrəli səhifələrdən başlat
+spread_even_label=Cüt nömrəli
+
+# Document properties dialog box
+document_properties.title=Sənəd xüsusiyyətləri…
+document_properties_label=Sənəd xüsusiyyətləri…
+document_properties_file_name=Fayl adı:
+document_properties_file_size=Fayl ölçüsü:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bayt)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bayt)
+document_properties_title=Başlık:
+document_properties_author=Müəllif:
+document_properties_subject=Mövzu:
+document_properties_keywords=Açar sözlər:
+document_properties_creation_date=Yaradılış Tarixi :
+document_properties_modification_date=Dəyişdirilmə Tarixi :
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Yaradan:
+document_properties_producer=PDF yaradıcısı:
+document_properties_version=PDF versiyası:
+document_properties_page_count=Səhifə sayı:
+document_properties_page_size=Səhifə Ölçüsü:
+document_properties_page_size_unit_inches=inç
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portret
+document_properties_page_size_orientation_landscape=albom
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Məktub
+document_properties_page_size_name_legal=Hüquqi
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Bəli
+document_properties_linearized_no=Xeyr
+document_properties_close=Qapat
+
+print_progress_message=Sənəd çap üçün hazırlanır…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Ləğv et
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Yan Paneli Aç/Bağla
+toggle_sidebar_notification.title=Yan paneli çevir (sənəddə icmal/bağlama var)
+toggle_sidebar_notification2.title=Yan paneli çevir (sənəddə icmal/bağlamalar/laylar mövcuddur)
+toggle_sidebar_label=Yan Paneli Aç/Bağla
+document_outline.title=Sənədin eskizini göstər (bütün bəndləri açmaq/yığmaq üçün iki dəfə klikləyin)
+document_outline_label=Sənəd strukturu
+attachments.title=Bağlamaları göstər
+attachments_label=BaÄŸlamalar
+layers.title=Layları göstər (bütün layları ilkin halına sıfırlamaq üçün iki dəfə klikləyin)
+layers_label=Laylar
+thumbs.title=Kiçik şəkilləri göstər
+thumbs_label=Kiçik şəkillər
+findbar.title=Sənəddə Tap
+findbar_label=Tap
+
+additional_layers=ÆlavÉ™ laylar
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Səhifə {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Səhifə{{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} səhifəsinin kiçik vəziyyəti
+
+# Find panel button title and messages
+find_input.title=Tap
+find_input.placeholder=Sənəddə tap…
+find_previous.title=Bir öncəki uyğun gələn sözü tapır
+find_previous_label=Geri
+find_next.title=Bir sonrakı uyğun gələn sözü tapır
+find_next_label=İrəli
+find_highlight=İşarələ
+find_match_case_label=Böyük/kiçik hərfə həssaslıq
+find_entire_word_label=Tam sözlər
+find_reached_top=Sənədin yuxarısına çatdı, aşağıdan davam edir
+find_reached_bottom=Sənədin sonuna çatdı, yuxarıdan davam edir
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} / {{total}} uyÄŸunluq
+find_match_count[two]={{current}} / {{total}} uyÄŸunluq
+find_match_count[few]={{current}} / {{total}} uyÄŸunluq
+find_match_count[many]={{current}} / {{total}} uyÄŸunluq
+find_match_count[other]={{current}} / {{total}} uyÄŸunluq
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}}-dan çox uyğunluq
+find_match_count_limit[one]={{limit}}-dən çox uyğunluq
+find_match_count_limit[two]={{limit}}-dən çox uyğunluq
+find_match_count_limit[few]={{limit}} uyğunluqdan daha çox
+find_match_count_limit[many]={{limit}} uyğunluqdan daha çox
+find_match_count_limit[other]={{limit}} uyğunluqdan daha çox
+find_not_found=Uyğunlaşma tapılmadı
+
+# Error panel labels
+error_more_info=Daha çox məlumati
+error_less_info=Daha az məlumat
+error_close=Qapat
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (yığma: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=İsmarıc: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stek: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fayl: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Sətir: {{line}}
+rendering_error=Səhifə göstərilərkən səhv yarandı.
+
+# Predefined zoom values
+page_scale_width=Səhifə genişliyi
+page_scale_fit=Səhifəni sığdır
+page_scale_auto=Avtomatik yaxınlaşdır
+page_scale_actual=Hazırkı Həcm
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Səhv
+loading_error=PDF yüklenərkən bir səhv yarandı.
+invalid_file_error=Səhv və ya zədələnmiş olmuş PDF fayl.
+missing_file_error=PDF fayl yoxdur.
+unexpected_response_error=Gözlənilməz server cavabı.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotasiyası]
+password_label=Bu PDF faylı açmaq üçün parolu daxil edin.
+password_invalid=Parol səhvdir. Bir daha yoxlayın.
+password_ok=Tamam
+password_cancel=Ləğv et
+
+printing_not_supported=Xəbərdarlıq: Çap bu səyyah tərəfindən tam olaraq dəstəklənmir.
+printing_not_ready=Xəbərdarlıq: PDF çap üçün tam yüklənməyib.
+web_fonts_disabled=Web Şriftlər söndürülüb: yerləşdirilmiş PDF şriftlərini istifadə etmək mümkün deyil.
diff --git a/thirdparty/pdfjs/web/locale/be/viewer.properties b/thirdparty/pdfjs/web/locale/be/viewer.properties
new file mode 100644
index 0000000..d4204c1
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/be/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ПапÑÑ€ÑднÑÑ Ñтаронка
+previous_label=ПапÑÑ€ÑднÑÑ
+next.title=ÐаÑÑ‚ÑƒÐ¿Ð½Ð°Ñ Ñтаронка
+next_label=ÐаÑтупнаÑ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Старонка
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=з {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} з {{pagesCount}})
+
+zoom_out.title=Паменшыць
+zoom_out_label=Паменшыць
+zoom_in.title=ПавÑлічыць
+zoom_in_label=ПавÑлічыць
+zoom.title=ПавÑлічÑнне Ñ‚ÑкÑту
+presentation_mode.title=Пераключыцца Ñž Ñ€Ñжым паказу
+presentation_mode_label=Ð Ñжым паказу
+open_file.title=Ðдкрыць файл
+open_file_label=Ðдкрыць
+print.title=Друкаваць
+print_label=Друкаваць
+download.title=СцÑгнуць
+download_label=СцÑгнуць
+bookmark.title=ЦÑперашнÑÑ Ð¿Ñ€Ð°Ñва (ÑкапіÑваць або адчыніць у новым акне)
+bookmark_label=ЦÑперашнÑÑ Ð¿Ñ€Ð°Ñва
+
+# Secondary toolbar and context menu
+tools.title=Прылады
+tools_label=Прылады
+first_page.title=ПерайÑці на першую Ñтаронку
+first_page.label=ПерайÑці на першую Ñтаронку
+first_page_label=ПерайÑці на першую Ñтаронку
+last_page.title=ПерайÑці на апошнюю Ñтаронку
+last_page.label=ПерайÑці на апошнюю Ñтаронку
+last_page_label=ПерайÑці на апошнюю Ñтаронку
+page_rotate_cw.title=ПавÑрнуць па Ñонцу
+page_rotate_cw.label=ПавÑрнуць па Ñонцу
+page_rotate_cw_label=ПавÑрнуць па Ñонцу
+page_rotate_ccw.title=ПавÑрнуць Ñупраць Ñонца
+page_rotate_ccw.label=ПавÑрнуць Ñупраць Ñонца
+page_rotate_ccw_label=ПавÑрнуць Ñупраць Ñонца
+
+cursor_text_select_tool.title=Уключыць прыладу выбару Ñ‚ÑкÑту
+cursor_text_select_tool_label=Прылада выбару Ñ‚ÑкÑту
+cursor_hand_tool.title=Уключыць ручную прыладу
+cursor_hand_tool_label=Ð ÑƒÑ‡Ð½Ð°Ñ Ð¿Ñ€Ñ‹Ð»Ð°Ð´Ð°
+
+scroll_vertical.title=Ужываць вертыкальную пракрутку
+scroll_vertical_label=Ð’ÐµÑ€Ñ‚Ñ‹ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð°ÐºÑ€ÑƒÑ‚ÐºÐ°
+scroll_horizontal.title=Ужываць гарызантальную пракрутку
+scroll_horizontal_label=Ð“Ð°Ñ€Ñ‹Ð·Ð°Ð½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð°ÐºÑ€ÑƒÑ‚ÐºÐ°
+scroll_wrapped.title=Ужываць маштабавальную пракрутку
+scroll_wrapped_label=ÐœÐ°ÑˆÑ‚Ð°Ð±Ð°Ð²Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð°ÐºÑ€ÑƒÑ‚ÐºÐ°
+
+spread_none.title=Ðе выкарыÑтоўваць Ñ€Ð°Ð·Ð³Ð¾Ñ€Ð½ÑƒÑ‚Ñ‹Ñ Ñтаронкі
+spread_none_label=Без разгорнутых Ñтаронак
+spread_odd.title=Ð Ð°Ð·Ð³Ð¾Ñ€Ð½ÑƒÑ‚Ñ‹Ñ Ñтаронкі пачынаючы з нÑцотных нумароў
+spread_odd_label=ÐÑÑ†Ð¾Ñ‚Ð½Ñ‹Ñ Ñтаронкі злева
+spread_even.title=Ð Ð°Ð·Ð³Ð¾Ñ€Ð½ÑƒÑ‚Ñ‹Ñ Ñтаронкі пачынаючы з цотных нумароў
+spread_even_label=Ð¦Ð¾Ñ‚Ð½Ñ‹Ñ Ñтаронкі злева
+
+# Document properties dialog box
+document_properties.title=УлаÑціваÑці дакумента…
+document_properties_label=УлаÑціваÑці дакумента…
+document_properties_file_name=Ðазва файла:
+document_properties_file_size=Памер файла:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} КБ ({{size_b}} байт)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} МБ ({{size_b}} байт)
+document_properties_title=Загаловак:
+document_properties_author=Ðўтар:
+document_properties_subject=ТÑма:
+document_properties_keywords=ÐšÐ»ÑŽÑ‡Ð°Ð²Ñ‹Ñ Ñловы:
+document_properties_creation_date=Дата ÑтварÑннÑ:
+document_properties_modification_date=Дата змÑненнÑ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Стваральнік:
+document_properties_producer=Вырабнік PDF:
+document_properties_version=ВерÑÑ–Ñ PDF:
+document_properties_page_count=КолькаÑць Ñтаронак:
+document_properties_page_size=Памер Ñтаронкі:
+document_properties_page_size_unit_inches=цалÑÑž
+document_properties_page_size_unit_millimeters=мм
+document_properties_page_size_orientation_portrait=кніжнаÑ
+document_properties_page_size_orientation_landscape=альбомнаÑ
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Хуткі праглÑд у ІнтÑрнÑце:
+document_properties_linearized_yes=Так
+document_properties_linearized_no=Ðе
+document_properties_close=Закрыць
+
+print_progress_message=Падрыхтоўка дакумента да друку…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=СкаÑаваць
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Паказаць/Ñхаваць бакавую панÑль
+toggle_sidebar_notification.title=Паказаць/Ñхаваць бакавую панÑль (дакумент мае змеÑÑ‚/укладанні)
+toggle_sidebar_notification2.title=Паказаць/Ñхаваць бакавую панÑль (дакумент мае змеÑÑ‚/укладанні/плаÑты)
+toggle_sidebar_label=Паказаць/Ñхаваць бакавую панÑль
+document_outline.title=Паказаць Ñтруктуру дакумента (Ð´Ð²Ð°Ð¹Ð½Ð°Ñ Ð¿Ñтрычка, каб разгарнуць /згарнуць уÑе Ñлементы)
+document_outline_label=Структура дакумента
+attachments.title=Паказаць далучÑнні
+attachments_label=ДалучÑнні
+layers.title=Паказаць плаÑты (двойчы пÑтрыкніце, каб Ñкінуць уÑе плаÑты да прадвызначанага Ñтану)
+layers_label=ПлаÑты
+thumbs.title=Паказ мініÑцюр
+thumbs_label=МініÑцюры
+findbar.title=Пошук у дакуменце
+findbar_label=ЗнайÑці
+
+additional_layers=Ð”Ð°Ð´Ð°Ñ‚ÐºÐ¾Ð²Ñ‹Ñ Ð¿Ð»Ð°Ñты
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Старонка {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Старонка {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=МініÑцюра Ñтаронкі {{page}}
+
+# Find panel button title and messages
+find_input.title=Шукаць
+find_input.placeholder=Шукаць у дакуменце…
+find_previous.title=ЗнайÑці папÑÑ€Ñдні выпадак выразу
+find_previous_label=ПапÑÑ€Ñдні
+find_next.title=ЗнайÑці наÑтупны выпадак выразу
+find_next_label=ÐаÑтупны
+find_highlight=Падфарбаваць уÑе
+find_match_case_label=Ðдрозніваць вÑлікіÑ/Ð¼Ð°Ð»Ñ‹Ñ Ð»Ñ–Ñ‚Ð°Ñ€Ñ‹
+find_entire_word_label=Словы цалкам
+find_reached_top=ДаÑÑгнуты пачатак дакумента, працÑг з канца
+find_reached_bottom=ДаÑÑгнуты канец дакумента, працÑг з пачатку
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} з {{total}} ÑупадзеннÑ
+find_match_count[two]={{current}} з {{total}} ÑупадзеннÑÑž
+find_match_count[few]={{current}} з {{total}} ÑупадзеннÑÑž
+find_match_count[many]={{current}} з {{total}} ÑупадзеннÑÑž
+find_match_count[other]={{current}} з {{total}} ÑупадзеннÑÑž
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Больш за {{limit}} ÑупадзеннÑÑž
+find_match_count_limit[one]=Больш за {{limit}} Ñупадзенне
+find_match_count_limit[two]=Больш за {{limit}} ÑупадзеннÑÑž
+find_match_count_limit[few]=Больш за {{limit}} ÑупадзеннÑÑž
+find_match_count_limit[many]=Больш за {{limit}} ÑупадзеннÑÑž
+find_match_count_limit[other]=Больш за {{limit}} ÑупадзеннÑÑž
+find_not_found=Выраз не знойдзены
+
+# Error panel labels
+error_more_info=ПадрабÑзней
+error_less_info=СціÑла
+error_close=Закрыць
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js в{{version}} (зборка: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Паведамленне: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=СтоÑ: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Файл: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Радок: {{line}}
+rendering_error=ЗдарылаÑÑ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ° Ð¿Ð°Ð´Ñ‡Ð°Ñ Ð°Ð´Ð»ÑŽÑÑ‚Ñ€Ð°Ð²Ð°Ð½Ð½Ñ Ñтаронкі.
+
+# Predefined zoom values
+page_scale_width=Ð¨Ñ‹Ñ€Ñ‹Ð½Ñ Ñтаронкі
+page_scale_fit=УціÑненне Ñтаронкі
+page_scale_auto=Ðўтаматычнае павелічÑнне
+page_scale_actual=Сапраўдны памер
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Памылка
+loading_error=ЗдарылаÑÑ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ° Ð¿Ð°Ð´Ñ‡Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÑ– PDF.
+invalid_file_error=ÐÑÑпраўны або пашкоджаны файл PDF.
+missing_file_error=ÐдÑутны файл PDF.
+unexpected_response_error=Ðечаканы адказ Ñервера.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=УвÑдзіце пароль, каб адкрыць гÑты файл PDF.
+password_invalid=ÐÑдзейÑны пароль. ПаÑпрабуйце зноў.
+password_ok=Добра
+password_cancel=СкаÑаваць
+
+printing_not_supported=ПапÑÑ€Ñджанне: друк не падтрымліваецца цалкам гÑтым браўзерам.
+printing_not_ready=Увага: PDF не ÑцÑгнуты цалкам Ð´Ð»Ñ Ð´Ñ€ÑƒÐºÐ°Ð²Ð°Ð½Ð½Ñ.
+web_fonts_disabled=Шрыфты Сеціва забаронены: немагчыма ўжываць ÑƒÐºÐ»Ð°Ð´Ð·ÐµÐ½Ñ‹Ñ ÑˆÑ€Ñ‹Ñ„Ñ‚Ñ‹ PDF.
diff --git a/thirdparty/pdfjs/web/locale/bg/viewer.properties b/thirdparty/pdfjs/web/locale/bg/viewer.properties
new file mode 100644
index 0000000..b93e3d1
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/bg/viewer.properties
@@ -0,0 +1,241 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Предишна Ñтраница
+previous_label=Предишна
+next.title=Следваща Ñтраница
+next_label=Следваща
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Страница
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=от {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} от {{pagesCount}})
+
+zoom_out.title=ÐамалÑване
+zoom_out_label=ÐамалÑване
+zoom_in.title=Увеличаване
+zoom_in_label=Увеличаване
+zoom.title=Мащабиране
+presentation_mode.title=Превключване към режим на предÑтавÑне
+presentation_mode_label=Режим на предÑтавÑне
+open_file.title=ОтварÑне на файл
+open_file_label=ОтварÑне
+print.title=Отпечатване
+print_label=Отпечатване
+download.title=ИзтеглÑне
+download_label=ИзтеглÑне
+bookmark.title=Текущ изглед (копиране или отварÑне в нов прозорец)
+bookmark_label=Текущ изглед
+
+# Secondary toolbar and context menu
+tools.title=ИнÑтрументи
+tools_label=ИнÑтрументи
+first_page.title=Към първата Ñтраница
+first_page.label=Към първата Ñтраница
+first_page_label=Към първата Ñтраница
+last_page.title=Към поÑледната Ñтраница
+last_page.label=Към поÑледната Ñтраница
+last_page_label=Към поÑледната Ñтраница
+page_rotate_cw.title=Завъртане по чаÑ. Ñтрелка
+page_rotate_cw.label=Завъртане по чаÑовниковата Ñтрелка
+page_rotate_cw_label=Завъртане по чаÑовниковата Ñтрелка
+page_rotate_ccw.title=Завъртане обратно на чаÑ. Ñтрелка
+page_rotate_ccw.label=Завъртане обратно на чаÑовниковата Ñтрелка
+page_rotate_ccw_label=Завъртане обратно на чаÑовниковата Ñтрелка
+
+cursor_text_select_tool.title=Включване на инÑтрумента за избор на текÑÑ‚
+cursor_text_select_tool_label=ИнÑтрумент за избор на текÑÑ‚
+cursor_hand_tool.title=Включване на инÑтрумента ръка
+cursor_hand_tool_label=ИнÑтрумент ръка
+
+scroll_vertical.title=Използване на вертикално плъзгане
+scroll_vertical_label=Вертикално плъзгане
+scroll_horizontal.title=Използване на хоризонтално
+scroll_horizontal_label=Хоризонтално плъзгане
+scroll_wrapped.title=Използване на мащабируемо плъзгане
+scroll_wrapped_label=Мащабируемо плъзгане
+
+spread_none.title=Режимът на ÑдвоÑване е изключен
+spread_none_label=Без ÑдвоÑване
+spread_odd.title=СдвоÑване, започвайки от нечетните Ñтраници
+spread_odd_label=Ðечетните отлÑво
+spread_even.title=СдвоÑване, започвайки от четните Ñтраници
+spread_even_label=Четните отлÑво
+
+# Document properties dialog box
+document_properties.title=СвойÑтва на документа…
+document_properties_label=СвойÑтва на документа…
+document_properties_file_name=Име на файл:
+document_properties_file_size=Големина на файл:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} КБ ({{size_b}} байта)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} МБ ({{size_b}} байта)
+document_properties_title=Заглавие:
+document_properties_author=Ðвтор:
+document_properties_subject=Тема:
+document_properties_keywords=Ключови думи:
+document_properties_creation_date=Дата на Ñъздаване:
+document_properties_modification_date=Дата на промÑна:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Създател:
+document_properties_producer=PDF произведен от:
+document_properties_version=Издание на PDF:
+document_properties_page_count=Брой Ñтраници:
+document_properties_page_size=Размер на Ñтраницата:
+document_properties_page_size_unit_inches=инч
+document_properties_page_size_unit_millimeters=мм
+document_properties_page_size_orientation_portrait=портрет
+document_properties_page_size_orientation_landscape=пейзаж
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Правни въпроÑи
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Бърз преглед:
+document_properties_linearized_yes=Да
+document_properties_linearized_no=Ðе
+document_properties_close=ЗатварÑне
+
+print_progress_message=ПодготвÑне на документа за отпечатване…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Отказ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Превключване на Ñтраничната лента
+toggle_sidebar_notification.title=Превключване на Ñтраничната лента (документи ÑÑŠÑ Ñтруктура/прикачени файлове)
+toggle_sidebar_label=Превключване на Ñтраничната лента
+document_outline.title=Показване на Ñтруктурата на документа (двукратно щракване за Ñвиване/разгъване на вÑичко)
+document_outline_label=Структура на документа
+attachments.title=Показване на притурките
+attachments_label=Притурки
+thumbs.title=Показване на миниатюрите
+thumbs_label=Миниатюри
+findbar.title=Ðамиране в документа
+findbar_label=ТърÑене
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Страница {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Миниатюра на Ñтраница {{page}}
+
+# Find panel button title and messages
+find_input.title=ТърÑене
+find_input.placeholder=ТърÑене в документа…
+find_previous.title=Ðамиране на предишно Ñъвпадение на фразата
+find_previous_label=Предишна
+find_next.title=Ðамиране на Ñледващо Ñъвпадение на фразата
+find_next_label=Следваща
+find_highlight=ОткроÑване на вÑички
+find_match_case_label=Съвпадение на региÑтъра
+find_entire_word_label=Цели думи
+find_reached_top=ДоÑтигнато е началото на документа, продължаване от краÑ
+find_reached_bottom=ДоÑтигнат е краÑÑ‚ на документа, продължаване от началото
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} от {{total}} Ñъвпадение
+find_match_count[two]={{current}} от {{total}} ÑъвпадениÑ
+find_match_count[few]={{current}} от {{total}} ÑъвпадениÑ
+find_match_count[many]={{current}} от {{total}} ÑъвпадениÑ
+find_match_count[other]={{current}} от {{total}} ÑъвпадениÑ
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Повече от {{limit}} ÑъвпадениÑ
+find_match_count_limit[one]=Повече от {{limit}} Ñъвпадение
+find_match_count_limit[two]=Повече от {{limit}} ÑъвпадениÑ
+find_match_count_limit[few]=Повече от {{limit}} ÑъвпадениÑ
+find_match_count_limit[many]=Повече от {{limit}} ÑъвпадениÑ
+find_match_count_limit[other]=Повече от {{limit}} ÑъвпадениÑ
+find_not_found=Фразата не е намерена
+
+# Error panel labels
+error_more_info=Повече информациÑ
+error_less_info=По-малко информациÑ
+error_close=ЗатварÑне
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=Издание на PDF.js {{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Съобщение: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Стек: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Файл: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Ред: {{line}}
+rendering_error=Грешка при изчертаване на Ñтраницата.
+
+# Predefined zoom values
+page_scale_width=Ширина на Ñтраницата
+page_scale_fit=ВмеÑтване в Ñтраницата
+page_scale_auto=Ðвтоматично мащабиране
+page_scale_actual=ДейÑтвителен размер
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Грешка
+loading_error=Получи Ñе грешка при зареждане на PDF-а.
+invalid_file_error=Ðевалиден или повреден PDF файл.
+missing_file_error=ЛипÑващ PDF файл.
+unexpected_response_error=Ðеочакван отговор от Ñървъра.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[ÐÐ½Ð¾Ñ‚Ð°Ñ†Ð¸Ñ {{type}}]
+password_label=Въведете парола за отварÑне на този PDF файл.
+password_invalid=Ðевалидна парола. МолÑ, опитайте отново.
+password_ok=Добре
+password_cancel=Отказ
+
+printing_not_supported=Внимание: Този четец нÑма пълна поддръжка на отпечатване.
+printing_not_ready=Внимание: Този PDF файл не е напълно зареден за печат.
+web_fonts_disabled=Уеб-шрифтовете Ñа забранени: разрешаване на използването на вградените PDF шрифтове.
diff --git a/thirdparty/pdfjs/web/locale/bn/viewer.properties b/thirdparty/pdfjs/web/locale/bn/viewer.properties
new file mode 100644
index 0000000..c106df1
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/bn/viewer.properties
@@ -0,0 +1,245 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=পূরà§à¦¬à¦¬à¦°à§à¦¤à§€ পাতা
+previous_label=পূরà§à¦¬à¦¬à¦°à§à¦¤à§€
+next.title=পরবরà§à¦¤à§€ পাতা
+next_label=পরবরà§à¦¤à§€
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=পাতা
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} à¦à¦°
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pagesCount}} à¦à¦° {{pageNumber}})
+
+zoom_out.title=ছোট আকারে পà§à¦°à¦¦à¦°à§à¦¶à¦¨
+zoom_out_label=ছোট আকারে পà§à¦°à¦¦à¦°à§à¦¶à¦¨
+zoom_in.title=বড় আকারে পà§à¦°à¦¦à¦°à§à¦¶à¦¨
+zoom_in_label=বড় আকারে পà§à¦°à¦¦à¦°à§à¦¶à¦¨
+zoom.title=বড় আকারে পà§à¦°à¦¦à¦°à§à¦¶à¦¨
+presentation_mode.title=উপসà§à¦¥à¦¾à¦ªà¦¨à¦¾ মোডে সà§à¦¯à§à¦‡à¦š করà§à¦¨
+presentation_mode_label=উপসà§à¦¥à¦¾à¦ªà¦¨à¦¾ মোড
+open_file.title=ফাইল খà§à¦²à§à¦¨
+open_file_label=খà§à¦²à§à¦¨
+print.title=মà§à¦¦à§à¦°à¦£
+print_label=মà§à¦¦à§à¦°à¦£
+download.title=ডাউনলোড
+download_label=ডাউনলোড
+bookmark.title=বরà§à¦¤à¦®à¦¾à¦¨ অবসà§à¦¥à¦¾ (অনà§à¦²à¦¿à¦ªà¦¿ অথবা নতà§à¦¨ উইনà§à¦¡à§‹ তে খà§à¦²à§à¦¨)
+bookmark_label=বরà§à¦¤à¦®à¦¾à¦¨ অবসà§à¦¥à¦¾
+
+# Secondary toolbar and context menu
+tools.title=টà§à¦²
+tools_label=টà§à¦²
+first_page.title=পà§à¦°à¦¥à¦® পাতায় যাও
+first_page.label=পà§à¦°à¦¥à¦® পাতায় যাও
+first_page_label=পà§à¦°à¦¥à¦® পাতায় যাও
+last_page.title=শেষ পাতায় যাও
+last_page.label=শেষ পাতায় যাও
+last_page_label=শেষ পাতায় যাও
+page_rotate_cw.title=ঘড়ির কাà¦à¦Ÿà¦¾à¦° দিকে ঘোরাও
+page_rotate_cw.label=ঘড়ির কাà¦à¦Ÿà¦¾à¦° দিকে ঘোরাও
+page_rotate_cw_label=ঘড়ির কাà¦à¦Ÿà¦¾à¦° দিকে ঘোরাও
+page_rotate_ccw.title=ঘড়ির কাà¦à¦Ÿà¦¾à¦° বিপরীতে ঘোরাও
+page_rotate_ccw.label=ঘড়ির কাà¦à¦Ÿà¦¾à¦° বিপরীতে ঘোরাও
+page_rotate_ccw_label=ঘড়ির কাà¦à¦Ÿà¦¾à¦° বিপরীতে ঘোরাও
+
+cursor_text_select_tool.title=লেখা নিরà§à¦¬à¦¾à¦šà¦• টà§à¦² সকà§à¦°à¦¿à§Ÿ করà§à¦¨
+cursor_text_select_tool_label=লেখা নিরà§à¦¬à¦¾à¦šà¦• টà§à¦²
+cursor_hand_tool.title=হà§à¦¯à¦¾à¦¨à§à¦¡ টà§à¦² সকà§à¦°à¦¿à¦¯à¦¼ করà§à¦¨
+cursor_hand_tool_label=হà§à¦¯à¦¾à¦¨à§à¦¡ টà§à¦²
+
+scroll_vertical.title=উলমà§à¦¬ সà§à¦•à§à¦°à¦²à¦¿à¦‚ বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨
+scroll_vertical_label=উলমà§à¦¬ সà§à¦•à§à¦°à¦²à¦¿à¦‚
+scroll_horizontal.title=অনà§à¦à§‚মিক সà§à¦•à§à¦°à¦²à¦¿à¦‚ বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨
+scroll_horizontal_label=অনà§à¦à§‚মিক সà§à¦•à§à¦°à¦²à¦¿à¦‚
+scroll_wrapped.title=Wrapped সà§à¦•à§à¦°à§‹à¦²à¦¿à¦‚ বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨
+scroll_wrapped_label=Wrapped সà§à¦•à§à¦°à§‹à¦²à¦¿à¦‚
+
+spread_none.title=পেজ সà§à¦ªà§à¦°à§‡à¦¡à¦—à§à¦²à§‹à¦¤à§‡ যোগদান করবেন না
+spread_none_label=Spreads নেই
+spread_odd_label=বিজোড় Spreads
+spread_even_label=জোড় Spreads
+
+# Document properties dialog box
+document_properties.title=নথি বৈশিষà§à¦Ÿà§à¦¯â€¦
+document_properties_label=নথি বৈশিষà§à¦Ÿà§à¦¯â€¦
+document_properties_file_name=ফাইলের নাম:
+document_properties_file_size=ফাইলের আকার:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} কেবি ({{size_b}} বাইট)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} à¦à¦®à¦¬à¦¿ ({{size_b}} বাইট)
+document_properties_title=শিরোনাম:
+document_properties_author=লেখক:
+document_properties_subject=বিষয়:
+document_properties_keywords=কীওয়ারà§à¦¡:
+document_properties_creation_date=তৈরির তারিখ:
+document_properties_modification_date=পরিবরà§à¦¤à¦¨à§‡à¦° তারিখ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=পà§à¦°à¦¸à§à¦¤à§à¦¤à¦•ারক:
+document_properties_producer=পিডিà¦à¦« পà§à¦°à¦¸à§à¦¤à§à¦¤à¦•ারক:
+document_properties_version=পিডিà¦à¦« সংষà§à¦•রণ:
+document_properties_page_count=মোট পাতা:
+document_properties_page_size=পাতার সাইজ:
+document_properties_page_size_unit_inches=à¦à¦° মধà§à¦¯à§‡
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=উলমà§à¦¬
+document_properties_page_size_orientation_landscape=অনà§à¦à§‚মিক
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=লেটার
+document_properties_page_size_name_legal=লীগাল
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=হà§à¦¯à¦¾à¦
+document_properties_linearized_no=না
+document_properties_close=বনà§à¦§
+
+print_progress_message=মà§à¦¦à§à¦°à¦£à§‡à¦° জনà§à¦¯ নথি পà§à¦°à¦¸à§à¦¤à§à¦¤ করা হচà§à¦›à§‡â€¦
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=বাতিল
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=সাইডবার টগল করà§à¦¨
+toggle_sidebar_notification.title=সাইডবার টগল (নথিতে আউটলাইন/à¦à¦Ÿà¦¾à¦šà¦®à§‡à¦¨à§à¦Ÿ রয়েছে)
+toggle_sidebar_label=সাইডবার টগল করà§à¦¨
+document_outline.title=নথির আউটলাইন দেখাও (সব আইটেম পà§à¦°à¦¸à¦¾à¦°à¦¿à¦¤/সঙà§à¦•à§à¦šà¦¿à¦¤ করতে ডবল কà§à¦²à¦¿à¦• করà§à¦¨)
+document_outline_label=নথির রূপরেখা
+attachments.title=সংযà§à¦•à§à¦¤à¦¿ দেখাও
+attachments_label=সংযà§à¦•à§à¦¤à¦¿
+thumbs.title=থামà§à¦¬à¦¨à§‡à¦‡à¦² সমূহ পà§à¦°à¦¦à¦°à§à¦¶à¦¨ করà§à¦¨
+thumbs_label=থামà§à¦¬à¦¨à§‡à¦‡à¦² সমূহ
+findbar.title=নথির মধà§à¦¯à§‡ খà§à¦à¦œà§à¦¨
+findbar_label=খà§à¦à¦œà§à¦¨
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=পাতা {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=পাতা {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} পাতার থামà§à¦¬à¦¨à§‡à¦‡à¦²
+
+# Find panel button title and messages
+find_input.title=খà§à¦à¦œà§à¦¨
+find_input.placeholder=নথির মধà§à¦¯à§‡ খà§à¦à¦œà§à¦¨â€¦
+find_previous.title=বাকà§à¦¯à¦¾à¦‚শের পূরà§à¦¬à¦¬à¦°à§à¦¤à§€ উপসà§à¦¥à¦¿à¦¤à¦¿ অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨
+find_previous_label=পূরà§à¦¬à¦¬à¦°à§à¦¤à§€
+find_next.title=বাকà§à¦¯à¦¾à¦‚শের পরবরà§à¦¤à§€ উপসà§à¦¥à¦¿à¦¤à¦¿ অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨
+find_next_label=পরবরà§à¦¤à§€
+find_highlight=সব হাইলাইট করা হবে
+find_match_case_label=অকà§à¦·à¦°à§‡à¦° ছাà¦à¦¦ মেলানো
+find_entire_word_label=সমà§à¦ªà§‚রà§à¦£ শবà§à¦¦
+find_reached_top=পাতার শà§à¦°à§à¦¤à§‡ পৌছে গেছে, নীচ থেকে আরমà§à¦ করা হয়েছে
+find_reached_bottom=পাতার শেষে পৌছে গেছে, উপর থেকে আরমà§à¦ করা হয়েছে
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} à¦à¦° {{current}} মিল
+find_match_count[two]={{total}} à¦à¦° {{current}} মিল
+find_match_count[few]={{total}} à¦à¦° {{current}} মিল
+find_match_count[many]={{total}} à¦à¦° {{current}} মিল
+find_match_count[other]={{total}} à¦à¦° {{current}} মিল
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} à¦à¦° বেশি মিল
+find_match_count_limit[one]={{limit}} à¦à¦° বেশি মিল
+find_match_count_limit[two]={{limit}} à¦à¦° বেশি মিল
+find_match_count_limit[few]={{limit}} à¦à¦° বেশি মিল
+find_match_count_limit[many]={{limit}} à¦à¦° বেশি মিল
+find_match_count_limit[other]={{limit}} à¦à¦° বেশি মিল
+find_not_found=বাকà§à¦¯à¦¾à¦‚শ পাওয়া যায়নি
+
+# Error panel labels
+error_more_info=আরও তথà§à¦¯
+error_less_info=কম তথà§à¦¯
+error_close=বনà§à¦§
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=বারà§à¦¤à¦¾: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=নথি: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=লাইন: {{line}}
+rendering_error=পাতা উপসà§à¦¥à¦¾à¦ªà¦¨à¦¾à¦° সময় তà§à¦°à§à¦Ÿà¦¿ দেখা দিয়েছে।
+
+# Predefined zoom values
+page_scale_width=পাতার পà§à¦°à¦¸à§à¦¥
+page_scale_fit=পাতা ফিট করà§à¦¨
+page_scale_auto=সà§à¦¬à§Ÿà¦‚কà§à¦°à¦¿à§Ÿ জà§à¦®
+page_scale_actual=পà§à¦°à¦•ৃত আকার
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=তà§à¦°à§à¦Ÿà¦¿
+loading_error=পিডিà¦à¦« লোড করার সময় তà§à¦°à§à¦Ÿà¦¿ দেখা দিয়েছে।
+invalid_file_error=অকারà§à¦¯à¦•র অথবা কà§à¦·à¦¤à¦¿à¦—à§à¦°à¦¸à§à¦¤ পিডিà¦à¦« ফাইল।
+missing_file_error=নিখোà¦à¦œ PDF ফাইল।
+unexpected_response_error=অপà§à¦°à¦¤à§à¦¯à¦¾à¦¶à§€à¦¤ সারà§à¦à¦¾à¦° পà§à¦°à¦¤à¦¿à¦•à§à¦°à¦¿à§Ÿà¦¾à¥¤
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} টীকা]
+password_label=পিডিà¦à¦« ফাইলটি ওপেন করতে পাসওয়ারà§à¦¡ দিন।
+password_invalid=à¦à§à¦² পাসওয়ারà§à¦¡à¥¤ অনà§à¦—à§à¦°à¦¹ করে আবার চেষà§à¦Ÿà¦¾ করà§à¦¨à¥¤
+password_ok=ঠিক আছে
+password_cancel=বাতিল
+
+printing_not_supported=সতরà§à¦•তা: à¦à¦‡ বà§à¦°à¦¾à¦‰à¦œà¦¾à¦°à§‡ মà§à¦¦à§à¦°à¦£ সমà§à¦ªà§‚রà§à¦£à¦à¦¾à¦¬à§‡ সমরà§à¦¥à¦¿à¦¤ নয়।
+printing_not_ready=সতরà§à¦•ীকরণ: পিডিà¦à¦«à¦Ÿà¦¿ মà§à¦¦à§à¦°à¦£à§‡à¦° জনà§à¦¯ সমà§à¦ªà§‚রà§à¦£ লোড হয়নি।
+web_fonts_disabled=ওয়েব ফনà§à¦Ÿ নিষà§à¦•à§à¦°à¦¿à§Ÿ: সংযà§à¦•à§à¦¤ পিডিà¦à¦« ফনà§à¦Ÿ বà§à¦¯à¦¬à¦¹à¦¾à¦° করা যাচà§à¦›à§‡ না।
diff --git a/thirdparty/pdfjs/web/locale/bo/viewer.properties b/thirdparty/pdfjs/web/locale/bo/viewer.properties
new file mode 100644
index 0000000..3ffa848
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/bo/viewer.properties
@@ -0,0 +1,244 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=དྲ་ངོས་སྔོན་མ
+previous_label=སྔོན་མ
+next.title=དྲ་ངོས་རྗེས་མ
+next_label=རྗེས་མ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ཤོག་ངོས
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=of {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Zoom Out
+zoom_out_label=Zoom Out
+zoom_in.title=Zoom In
+zoom_in_label=Zoom In
+zoom.title=Zoom
+presentation_mode.title=Switch to Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Open File
+open_file_label=Open
+print.title=Print
+print_label=Print
+download.title=Download
+download_label=Download
+bookmark.title=Current view (copy or open in new window)
+bookmark_label=Current View
+
+# Secondary toolbar and context menu
+tools.title=Tools
+tools_label=Tools
+first_page.title=Go to First Page
+first_page.label=Go to First Page
+first_page_label=Go to First Page
+last_page.title=Go to Last Page
+last_page.label=Go to Last Page
+last_page_label=Go to Last Page
+page_rotate_cw.title=Rotate Clockwise
+page_rotate_cw.label=Rotate Clockwise
+page_rotate_cw_label=Rotate Clockwise
+page_rotate_ccw.title=Rotate Counterclockwise
+page_rotate_ccw.label=Rotate Counterclockwise
+page_rotate_ccw_label=Rotate Counterclockwise
+
+cursor_text_select_tool.title=Enable Text Selection Tool
+cursor_text_select_tool_label=Text Selection Tool
+cursor_hand_tool.title=Enable Hand Tool
+cursor_hand_tool_label=Hand Tool
+
+scroll_vertical.title=Use Vertical Scrolling
+scroll_vertical_label=Vertical Scrolling
+scroll_horizontal.title=Use Horizontal Scrolling
+scroll_horizontal_label=Horizontal Scrolling
+scroll_wrapped.title=Use Wrapped Scrolling
+scroll_wrapped_label=Wrapped Scrolling
+
+spread_none.title=Do not join page spreads
+spread_none_label=No Spreads
+spread_odd.title=Join page spreads starting with odd-numbered pages
+spread_odd_label=Odd Spreads
+spread_even.title=Join page spreads starting with even-numbered pages
+spread_even_label=Even Spreads
+
+# Document properties dialog box
+document_properties.title=Document Properties…
+document_properties_label=Document Properties…
+document_properties_file_name=File name:
+document_properties_file_size=File size:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Title:
+document_properties_author=Author:
+document_properties_subject=Subject:
+document_properties_keywords=Keywords:
+document_properties_creation_date=Creation Date:
+document_properties_modification_date=Modification Date:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creator:
+document_properties_producer=PDF Producer:
+document_properties_version=PDF Version:
+document_properties_page_count=Page Count:
+document_properties_page_size=Page Size:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portrait
+document_properties_page_size_orientation_landscape=landscape
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Yes
+document_properties_linearized_no=No
+document_properties_close=Close
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancel
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toggle Sidebar
+toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
+toggle_sidebar_label=Toggle Sidebar
+document_outline.title=Show Document Outline (double-click to expand/collapse all items)
+document_outline_label=Document Outline
+attachments.title=Show Attachments
+attachments_label=Attachments
+thumbs.title=Show Thumbnails
+thumbs_label=Thumbnails
+findbar.title=Find in Document
+findbar_label=Find
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Page {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail of Page {{page}}
+
+# Find panel button title and messages
+find_input.title=Find
+find_input.placeholder=Find in document…
+find_previous.title=Find the previous occurrence of the phrase
+find_previous_label=Previous
+find_next.title=Find the next occurrence of the phrase
+find_next_label=Next
+find_highlight=Highlight all
+find_match_case_label=Match case
+find_entire_word_label=Whole words
+find_reached_top=Reached top of document, continued from bottom
+find_reached_bottom=Reached end of document, continued from top
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} of {{total}} match
+find_match_count[two]={{current}} of {{total}} matches
+find_match_count[few]={{current}} of {{total}} matches
+find_match_count[many]={{current}} of {{total}} matches
+find_match_count[other]={{current}} of {{total}} matches
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=More than {{limit}} matches
+find_match_count_limit[one]=More than {{limit}} match
+find_match_count_limit[two]=More than {{limit}} matches
+find_match_count_limit[few]=More than {{limit}} matches
+find_match_count_limit[many]=More than {{limit}} matches
+find_match_count_limit[other]=More than {{limit}} matches
+find_not_found=Phrase not found
+
+# Error panel labels
+error_more_info=More Information
+error_less_info=Less Information
+error_close=Close
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Line: {{line}}
+rendering_error=An error occurred while rendering the page.
+
+# Predefined zoom values
+page_scale_width=Page Width
+page_scale_fit=Page Fit
+page_scale_auto=Automatic Zoom
+page_scale_actual=Actual Size
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=An error occurred while loading the PDF.
+invalid_file_error=Invalid or corrupted PDF file.
+missing_file_error=Missing PDF file.
+unexpected_response_error=Unexpected server response.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Enter the password to open this PDF file.
+password_invalid=Invalid password. Please try again.
+password_ok=OK
+password_cancel=Cancel
+
+printing_not_supported=Warning: Printing is not fully supported by this browser.
+printing_not_ready=Warning: The PDF is not fully loaded for printing.
+web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
diff --git a/thirdparty/pdfjs/web/locale/br/viewer.properties b/thirdparty/pdfjs/web/locale/br/viewer.properties
new file mode 100644
index 0000000..d46d82f
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/br/viewer.properties
@@ -0,0 +1,249 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pajenn a-raok
+previous_label=A-raok
+next.title=Pajenn war-lerc'h
+next_label=War-lerc'h
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pajenn
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=eus {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} war {{pagesCount}})
+
+zoom_out.title=Zoum bihanaat
+zoom_out_label=Zoum bihanaat
+zoom_in.title=Zoum brasaat
+zoom_in_label=Zoum brasaat
+zoom.title=Zoum
+presentation_mode.title=Trec'haoliñ etrezek ar mod kinnigadenn
+presentation_mode_label=Mod kinnigadenn
+open_file.title=Digeriñ ur restr
+open_file_label=Digeriñ ur restr
+print.title=Moullañ
+print_label=Moullañ
+download.title=Pellgargañ
+download_label=Pellgargañ
+bookmark.title=Gwel bremanel (eilañ pe zigeriñ e-barzh ur prenestr nevez)
+bookmark_label=Gwel bremanel
+
+# Secondary toolbar and context menu
+tools.title=Ostilhoù
+tools_label=Ostilhoù
+first_page.title=Mont d'ar bajenn gentañ
+first_page.label=Mont d'ar bajenn gentañ
+first_page_label=Mont d'ar bajenn gentañ
+last_page.title=Mont d'ar bajenn diwezhañ
+last_page.label=Mont d'ar bajenn diwezhañ
+last_page_label=Mont d'ar bajenn diwezhañ
+page_rotate_cw.title=C'hwelañ gant roud ar bizied
+page_rotate_cw.label=C'hwelañ gant roud ar bizied
+page_rotate_cw_label=C'hwelañ gant roud ar bizied
+page_rotate_ccw.title=C'hwelañ gant roud gin ar bizied
+page_rotate_ccw.label=C'hwelañ gant roud gin ar bizied
+page_rotate_ccw_label=C'hwelañ gant roud gin ar bizied
+
+cursor_text_select_tool.title=Gweredekaat an ostilh diuzañ testenn
+cursor_text_select_tool_label=Ostilh diuzañ testenn
+cursor_hand_tool.title=Gweredekaat an ostilh dorn
+cursor_hand_tool_label=Ostilh dorn
+
+scroll_vertical.title=Arverañ an dibunañ a-blom
+scroll_vertical_label=Dibunañ a-serzh
+scroll_horizontal.title=Arverañ an dibunañ a-blaen
+scroll_horizontal_label=Dibunañ a-blaen
+scroll_wrapped.title=Arverañ an dibunañ paket
+scroll_wrapped_label=Dibunañ paket
+
+spread_none.title=Chom hep stagañ ar skignadurioù
+spread_none_label=Skignadenn ebet
+spread_odd.title=Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù ampar
+spread_odd_label=Pajennoù ampar
+spread_even.title=Lakaat ar pajennadoù en ur gregiñ gant ar pajennoù par
+spread_even_label=Pajennoù par
+
+# Document properties dialog box
+document_properties.title=Perzhioù an teul…
+document_properties_label=Perzhioù an teul…
+document_properties_file_name=Anv restr:
+document_properties_file_size=Ment ar restr:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} Ke ({{size_b}} eizhbit)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} Me ({{size_b}} eizhbit)
+document_properties_title=Titl:
+document_properties_author=Aozer:
+document_properties_subject=Danvez:
+document_properties_keywords=Gerioù-alc'hwez:
+document_properties_creation_date=Deiziad krouiñ:
+document_properties_modification_date=Deiziad kemmañ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Krouer:
+document_properties_producer=Kenderc'her PDF:
+document_properties_version=Handelv PDF:
+document_properties_page_count=Niver a bajennoù:
+document_properties_page_size=Ment ar bajenn:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=poltred
+document_properties_page_size_orientation_landscape=gweledva
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Lizher
+document_properties_page_size_name_legal=Lezennel
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Gwel Web Herrek:
+document_properties_linearized_yes=Ya
+document_properties_linearized_no=Ket
+document_properties_close=Serriñ
+
+print_progress_message=O prientiñ an teul evit moullañ...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Nullañ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Diskouez/kuzhat ar varrenn gostez
+toggle_sidebar_notification.title=Trec'haoliñ ar verrenn-gostez (ur steuñv pe stagadennoù a zo en teul)
+toggle_sidebar_notification2.title=Trec'haoliñ ar varrenn-gostez (ur steuñv pe stagadennoù a zo en teul)
+toggle_sidebar_label=Diskouez/kuzhat ar varrenn gostez
+document_outline.title=Diskouez steuñv an teul (daouglikit evit brasaat/bihanaat an holl elfennoù)
+document_outline_label=Sinedoù an teuliad
+attachments.title=Diskouez ar c'henstagadurioù
+attachments_label=Kenstagadurioù
+layers_label=Gwiskadoù
+thumbs.title=Diskouez ar melvennoù
+thumbs_label=Melvennoù
+findbar.title=Klask e-barzh an teuliad
+findbar_label=Klask
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Pajenn {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pajenn {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Melvenn ar bajenn {{page}}
+
+# Find panel button title and messages
+find_input.title=Klask
+find_input.placeholder=Klask e-barzh an teuliad
+find_previous.title=Kavout an tamm frazenn kent o klotañ ganti
+find_previous_label=Kent
+find_next.title=Kavout an tamm frazenn war-lerc'h o klotañ ganti
+find_next_label=War-lerc'h
+find_highlight=Usskediñ pep tra
+find_match_case_label=Teurel evezh ouzh ar pennlizherennoù
+find_entire_word_label=Gerioù a-bezh
+find_reached_top=Tizhet eo bet derou ar bajenn, kenderc'hel diouzh an diaz
+find_reached_bottom=Tizhet eo bet dibenn ar bajenn, kenderc'hel diouzh ar c'hrec'h
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=Klotadenn {{current}} war {{total}}
+find_match_count[two]=Klotadenn {{current}} war {{total}}
+find_match_count[few]=Klotadenn {{current}} war {{total}}
+find_match_count[many]=Klotadenn {{current}} war {{total}}
+find_match_count[other]=Klotadenn {{current}} war {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Muioc'h eget {{limit}} a glotadennoù
+find_match_count_limit[one]=Muioc'h eget {{limit}} a glotadennoù
+find_match_count_limit[two]=Muioc'h eget {{limit}} a glotadennoù
+find_match_count_limit[few]=Muioc'h eget {{limit}} a glotadennoù
+find_match_count_limit[many]=Muioc'h eget {{limit}} a glotadennoù
+find_match_count_limit[other]=Muioc'h eget {{limit}} a glotadennoù
+find_not_found=N'haller ket kavout ar frazenn
+
+# Error panel labels
+error_more_info=Muioc'h a ditouroù
+error_less_info=Nebeutoc'h a ditouroù
+error_close=Serriñ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js handelv {{version}} (kempunadur: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Kemennadenn: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Torn: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Restr: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linenn: {{line}}
+rendering_error=Degouezhet ez eus bet ur fazi e-pad skrammañ ar bajennad.
+
+# Predefined zoom values
+page_scale_width=Led ar bajenn
+page_scale_fit=Pajenn a-bezh
+page_scale_auto=Zoum emgefreek
+page_scale_actual=Ment wir
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Fazi
+loading_error=Degouezhet ez eus bet ur fazi e-pad kargañ ar PDF.
+invalid_file_error=Restr PDF didalvoudek pe kontronet.
+missing_file_error=Restr PDF o vankout.
+unexpected_response_error=Respont dic'hortoz a-berzh an dafariad
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Notennañ]
+password_label=Enankit ar ger-tremen evit digeriñ ar restr PDF-mañ.
+password_invalid=Ger-tremen didalvoudek. Klaskit en-dro mar plij.
+password_ok=Mat eo
+password_cancel=Nullañ
+
+printing_not_supported=Kemenn: N'eo ket skoret penn-da-benn ar moullañ gant ar merdeer-mañ.
+printing_not_ready=Kemenn: N'hall ket bezañ moullet ar restr PDF rak n'eo ket karget penn-da-benn.
+web_fonts_disabled=Diweredekaet eo an nodrezhoù web: n'haller ket arverañ an nodrezhoù PDF enframmet.
diff --git a/thirdparty/pdfjs/web/locale/brx/viewer.properties b/thirdparty/pdfjs/web/locale/brx/viewer.properties
new file mode 100644
index 0000000..cd36563
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/brx/viewer.properties
@@ -0,0 +1,210 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=आगोलनि बिलाइ
+previous_label=आगोलनि
+next.title=उननि बिलाइ
+next_label=उननि
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=बिलाइ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} नि
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pagesCount}} नि {{pageNumber}})
+
+zoom_out.title=फिसायै जà¥à¤® खालाम
+zoom_out_label=फिसायै जà¥à¤® खालाम
+zoom_in.title=गेदेरै जà¥à¤® खालाम
+zoom_in_label=गेदेरै जà¥à¤® खालाम
+zoom.title=जà¥à¤® खालाम
+presentation_mode.title=दिनà¥à¤¥à¤¿à¤«à¥à¤‚नाय म'डआव थां
+presentation_mode_label=दिनà¥à¤¥à¤¿à¤«à¥à¤‚नाय म'ड
+open_file.title=फाइलखौ खेव
+open_file_label=खेव
+print.title=साफाय
+print_label=साफाय
+download.title=डाउनल'ड खालाम
+download_label=डाउनल'ड खालाम
+bookmark.title=दानि नà¥à¤¥à¤¾à¤¯ (गोदान उइनà¥à¤¡'आव कपि खालाम à¤à¤¬à¤¾ खेव)
+bookmark_label=दानि नà¥à¤¥à¤¾à¤¯
+
+# Secondary toolbar and context menu
+tools.title=टà¥à¤²
+tools_label=टà¥à¤²
+first_page.title=गिबि बिलाइआव थां
+first_page.label=गिबि बिलाइआव थां
+first_page_label=गिबि बिलाइआव थां
+last_page.title=जोबथा बिलाइआव थां
+last_page.label=जोबथा बिलाइआव थां
+last_page_label=जोबथा बिलाइआव थां
+page_rotate_cw.title=घरि गिदिंनाय फारà¥à¤¸à¥‡ फिदिं
+page_rotate_cw.label=घरि गिदिंनाय फारà¥à¤¸à¥‡ फिदिं
+page_rotate_cw_label=घरि गिदिंनाय फारà¥à¤¸à¥‡ फिदिं
+page_rotate_ccw.title=घरि गिदिंनाय उलà¥à¤¥à¤¾ फारà¥à¤¸à¥‡ फिदिं
+page_rotate_ccw.label=घरि गिदिंनाय उलà¥à¤¥à¤¾ फारà¥à¤¸à¥‡ फिदिं
+page_rotate_ccw_label=घरि गिदिंनाय उलà¥à¤¥à¤¾ फारà¥à¤¸à¥‡ फिदिं
+
+
+
+
+# Document properties dialog box
+document_properties.title=फोरमान बिलाइनि आखà¥à¤¥à¤¾à¤¯...
+document_properties_label=फोरमान बिलाइनि आखà¥à¤¥à¤¾à¤¯...
+document_properties_file_name=फाइलनि मà¥à¤‚:
+document_properties_file_size=फाइलनि महर:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} बाइट)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} बाइट)
+document_properties_title=बिमà¥à¤‚:
+document_properties_author=लिरगिरि:
+document_properties_subject=आयदा:
+document_properties_keywords=गाहाय सोदोब:
+document_properties_creation_date=सोरजिनाय अकà¥à¤Ÿ':
+document_properties_modification_date=सà¥à¤¦à¥à¤°à¤¾à¤¯à¤¨à¤¾à¤¯ अकà¥à¤Ÿ':
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=सोरजिगà¥à¤°à¤¾:
+document_properties_producer=PDF दिहà¥à¤¨à¤—à¥à¤°à¤¾:
+document_properties_version=PDF बिसान:
+document_properties_page_count=बिलाइनि हिसाब:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=प'रà¥à¤Ÿà¥à¤°à¥‡à¤Ÿ
+document_properties_page_size_orientation_landscape=लेणà¥à¤¡à¤¸à¥à¤•ेप
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=लायजाम
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=नंगौ
+document_properties_linearized_no=नङा
+document_properties_close=बनà¥à¤¦ खालाम
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=नेवसि
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=टगà¥à¤—ल साइडबार
+toggle_sidebar_label=टगà¥à¤—ल साइडबार
+document_outline_label=फोरमान बिलाइ सिमा हांखो
+attachments.title=नांजाब होनायखौ दिनà¥à¤¥à¤¿
+attachments_label=नांजाब होनाय
+thumbs.title=थामनेइलखौ दिनà¥à¤¥à¤¿
+thumbs_label=थामनेइल
+findbar.title=फोरमान बिलाइआव नागिरना दिहà¥à¤¨
+findbar_label=नायगिरना दिहà¥à¤¨
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=बिलाइ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=बिलाइ {{page}} नि थामनेइल
+
+# Find panel button title and messages
+find_input.title=नायगिरना दिहà¥à¤¨
+find_input.placeholder=फोरमान बिलाइआव नागिरना दिहà¥à¤¨...
+find_previous.title=बाथà¥à¤°à¤¾ खोनà¥à¤¦à¥‹à¤¬à¤¨à¤¿ सिगांनि नà¥à¤œà¤¾à¤¥à¤¿à¤¨à¤¾à¤¯à¤–ौ नागिर
+find_previous_label=आगोलनि
+find_next.title=बाथà¥à¤°à¤¾ खोनà¥à¤¦à¥‹à¤¬à¤¨à¤¿ उननि नà¥à¤œà¤¾à¤¥à¤¿à¤¨à¤¾à¤¯à¤–ौ नागिर
+find_next_label=उननि
+find_highlight=गासैखौबो हाइलाइट खालाम
+find_match_case_label=गोरोबनाय केस
+find_reached_top=थालो निफà¥à¤°à¤¾à¤¯ जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय
+find_reached_bottom=बिजौ निफà¥à¤°à¤¾à¤¯ जागायनानै फोरमान बिलाइनि बिजौआव सौहैबाय
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_not_found=बाथà¥à¤°à¤¾ खोनà¥à¤¦à¥‹à¤¬ मोनाखै
+
+# Error panel labels
+error_more_info=गोबां फोरमायथिहोगà¥à¤°à¤¾
+error_less_info=खम फोरमायथिहोगà¥à¤°à¤¾
+error_close=बनà¥à¤¦ खालाम
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=खौरां: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=सà¥à¤Ÿà¥‡à¤•: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=फाइल: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=सारि: {{line}}
+rendering_error=बिलाइखौ राव सोलायनाय समाव मोनसे गोरोनà¥à¤¥à¤¿ जादों।
+
+# Predefined zoom values
+page_scale_width=बिलाइनि गà¥à¤µà¤¾à¤°
+page_scale_fit=बिलाइ गोरोबनाय
+page_scale_auto=गावनोगाव जà¥à¤®
+page_scale_actual=थार महर
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=गोरोनà¥à¤¥à¤¿
+loading_error=PDF ल'ड खालामनाय समाव मोनसे गोरोनà¥à¤¥à¤¿ जाबाय।
+invalid_file_error=बाहायजायै à¤à¤¬à¤¾ गाजà¥à¤°à¤¿ जानाय PDF फाइल
+missing_file_error=गोमानाय PDF फाइल
+unexpected_response_error=मिजिंथियै सारà¥à¤à¤¾à¤° फिननाय।
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} सोदोब बेखेवनाय]
+password_label=बे PDF फाइलखौ खेवनो पासवारà¥à¤¡ हाबहो।
+password_invalid=बाहायजायै पासवारà¥à¤¡à¥¤ अननानै फिन नाजा।
+password_ok=OK
+password_cancel=नेवसि
+
+printing_not_supported=सांगà¥à¤°à¤¾à¤‚थि: साफायनाया बे बà¥à¤°à¤¾à¤‰à¤œà¤¾à¤°à¤œà¥‹à¤‚ आबà¥à¤™à¥ˆ हेफाजाब होजाया।
+printing_not_ready=सांगà¥à¤°à¤¾à¤‚थि: PDF खौ साफायनायनि थाखाय फà¥à¤°à¤¾à¤¯à¥ˆ ल'ड खालामाखै।
+web_fonts_disabled=वेब फनà¥à¤Ÿà¤–ौ लोरबां खालामबाय: अरजाबहोनाय PDF फनà¥à¤Ÿà¤–ौ बाहायनो हायाखै।
diff --git a/thirdparty/pdfjs/web/locale/bs/viewer.properties b/thirdparty/pdfjs/web/locale/bs/viewer.properties
new file mode 100644
index 0000000..e5346cb
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/bs/viewer.properties
@@ -0,0 +1,200 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Prethodna strana
+previous_label=Prethodna
+next.title=Sljedeća strna
+next_label=Sljedeća
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Strana
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=od {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} od {{pagesCount}})
+
+zoom_out.title=Umanji
+zoom_out_label=Umanji
+zoom_in.title=Uvećaj
+zoom_in_label=Uvećaj
+zoom.title=Uvećanje
+presentation_mode.title=Prebaci se u prezentacijski režim
+presentation_mode_label=Prezentacijski režim
+open_file.title=Otvori fajl
+open_file_label=Otvori
+print.title=Å tampaj
+print_label=Å tampaj
+download.title=Preuzmi
+download_label=Preuzmi
+bookmark.title=Trenutni prikaz (kopiraj ili otvori u novom prozoru)
+bookmark_label=Trenutni prikaz
+
+# Secondary toolbar and context menu
+tools.title=Alati
+tools_label=Alati
+first_page.title=Idi na prvu stranu
+first_page.label=Idi na prvu stranu
+first_page_label=Idi na prvu stranu
+last_page.title=Idi na zadnju stranu
+last_page.label=Idi na zadnju stranu
+last_page_label=Idi na zadnju stranu
+page_rotate_cw.title=Rotiraj u smjeru kazaljke na satu
+page_rotate_cw.label=Rotiraj u smjeru kazaljke na satu
+page_rotate_cw_label=Rotiraj u smjeru kazaljke na satu
+page_rotate_ccw.title=Rotiraj suprotno smjeru kazaljke na satu
+page_rotate_ccw.label=Rotiraj suprotno smjeru kazaljke na satu
+page_rotate_ccw_label=Rotiraj suprotno smjeru kazaljke na satu
+
+cursor_text_select_tool.title=Omogući alat za oznaÄavanje teksta
+cursor_text_select_tool_label=Alat za oznaÄavanje teksta
+cursor_hand_tool.title=Omogući ruÄni alat
+cursor_hand_tool_label=RuÄni alat
+
+# Document properties dialog box
+document_properties.title=Svojstva dokumenta...
+document_properties_label=Svojstva dokumenta...
+document_properties_file_name=Naziv fajla:
+document_properties_file_size=VeliÄina fajla:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajta)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajta)
+document_properties_title=Naslov:
+document_properties_author=Autor:
+document_properties_subject=Predmet:
+document_properties_keywords=KljuÄne rijeÄi:
+document_properties_creation_date=Datum kreiranja:
+document_properties_modification_date=Datum promjene:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Kreator:
+document_properties_producer=PDF stvaratelj:
+document_properties_version=PDF verzija:
+document_properties_page_count=Broj stranica:
+document_properties_page_size=VeliÄina stranice:
+document_properties_page_size_unit_inches=u
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=uspravno
+document_properties_page_size_orientation_landscape=vodoravno
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Pismo
+document_properties_page_size_name_legal=Pravni
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+document_properties_close=Zatvori
+
+print_progress_message=Pripremam dokument za štampu…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Otkaži
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=UkljuÄi/iskljuÄi boÄnu traku
+toggle_sidebar_notification.title=UkljuÄi/iskljuÄi sidebar (dokument sadrži outline/priloge)
+toggle_sidebar_label=UkljuÄi/iskljuÄi boÄnu traku
+document_outline.title=Prikaži outline dokumenta (dvoklik za skupljanje/širenje svih stavki)
+document_outline_label=Konture dokumenta
+attachments.title=Prikaži priloge
+attachments_label=Prilozi
+thumbs.title=Prikaži thumbnailove
+thumbs_label=Thumbnailovi
+findbar.title=Pronađi u dokumentu
+findbar_label=Pronađi
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Strana {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail strane {{page}}
+
+# Find panel button title and messages
+find_input.title=Pronađi
+find_input.placeholder=Pronađi u dokumentu…
+find_previous.title=Pronađi prethodno pojavljivanje fraze
+find_previous_label=Prethodno
+find_next.title=Pronađi sljedeće pojavljivanje fraze
+find_next_label=Sljedeće
+find_highlight=OznaÄi sve
+find_match_case_label=Osjetljivost na karaktere
+find_reached_top=Dostigao sam vrh dokumenta, nastavljam sa dna
+find_reached_bottom=Dostigao sam kraj dokumenta, nastavljam sa vrha
+find_not_found=Fraza nije pronađena
+
+# Error panel labels
+error_more_info=Više informacija
+error_less_info=Manje informacija
+error_close=Zatvori
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Poruka: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fajl: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linija: {{line}}
+rendering_error=Došlo je do greške prilikom renderiranja strane.
+
+# Predefined zoom values
+page_scale_width=Å irina strane
+page_scale_fit=Uklopi stranu
+page_scale_auto=Automatsko uvećanje
+page_scale_actual=Stvarna veliÄina
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Greška
+loading_error=DoÅ¡lo je do greÅ¡ke prilikom uÄitavanja PDF-a.
+invalid_file_error=Neispravan ili oštećen PDF fajl.
+missing_file_error=Nedostaje PDF fajl.
+unexpected_response_error=NeoÄekivani odgovor servera.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} pribilješka]
+password_label=Upišite lozinku da biste otvorili ovaj PDF fajl.
+password_invalid=Pogrešna lozinka. Pokušajte ponovo.
+password_ok=OK
+password_cancel=Otkaži
+
+printing_not_supported=Upozorenje: Štampanje nije u potpunosti podržano u ovom browseru.
+printing_not_ready=Upozorenje: PDF nije u potpunosti uÄitan za Å¡tampanje.
+web_fonts_disabled=Web fontovi su onemogućeni: nemoguće koristiti ubaÄene PDF fontove.
diff --git a/thirdparty/pdfjs/web/locale/ca/viewer.properties b/thirdparty/pdfjs/web/locale/ca/viewer.properties
new file mode 100644
index 0000000..22ae91c
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/ca/viewer.properties
@@ -0,0 +1,247 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=PÃ gina anterior
+previous_label=Anterior
+next.title=Pà gina següent
+next_label=Següent
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=PÃ gina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Redueix
+zoom_out_label=Redueix
+zoom_in.title=Amplia
+zoom_in_label=Amplia
+zoom.title=Escala
+presentation_mode.title=Canvia al mode de presentació
+presentation_mode_label=Mode de presentació
+open_file.title=Obre el fitxer
+open_file_label=Obre
+print.title=Imprimeix
+print_label=Imprimeix
+download.title=Baixa
+download_label=Baixa
+bookmark.title=Vista actual (copia o obre en una finestra nova)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Eines
+tools_label=Eines
+first_page.title=Vés a la primera pà gina
+first_page.label=Vés a la primera pà gina
+first_page_label=Vés a la primera pà gina
+last_page.title=Vés a l'última pà gina
+last_page.label=Vés a l'última pà gina
+last_page_label=Vés a l'última pà gina
+page_rotate_cw.title=Gira cap a la dreta
+page_rotate_cw.label=Gira cap a la dreta
+page_rotate_cw_label=Gira cap a la dreta
+page_rotate_ccw.title=Gira cap a l'esquerra
+page_rotate_ccw.label=Gira cap a l'esquerra
+page_rotate_ccw_label=Gira cap a l'esquerra
+
+cursor_text_select_tool.title=Habilita l'eina de selecció de text
+cursor_text_select_tool_label=Eina de selecció de text
+cursor_hand_tool.title=Habilita l'eina de mÃ
+cursor_hand_tool_label=Eina de mÃ
+
+scroll_vertical.title=Utilitza el desplaçament vertical
+scroll_vertical_label=Desplaçament vertical
+scroll_horizontal.title=Utilitza el desplaçament horitzontal
+scroll_horizontal_label=Desplaçament horitzontal
+scroll_wrapped.title=Activa el desplaçament continu
+scroll_wrapped_label=Desplaçament continu
+
+spread_none.title=No agrupis les pà gines de dues en dues
+spread_none_label=Una sola pà gina
+spread_odd.title=Mostra dues pà gines començant per les pà gines de numeració senar
+spread_odd_label=Doble pà gina (senar)
+spread_even.title=Mostra dues pà gines començant per les pà gines de numeració parell
+spread_even_label=Doble pà gina (parell)
+
+# Document properties dialog box
+document_properties.title=Propietats del document…
+document_properties_label=Propietats del document…
+document_properties_file_name=Nom del fitxer:
+document_properties_file_size=Mida del fitxer:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=TÃtol:
+document_properties_author=Autor:
+document_properties_subject=Assumpte:
+document_properties_keywords=Paraules clau:
+document_properties_creation_date=Data de creació:
+document_properties_modification_date=Data de modificació:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creador:
+document_properties_producer=Generador de PDF:
+document_properties_version=Versió de PDF:
+document_properties_page_count=Nombre de pà gines:
+document_properties_page_size=Mida de la pà gina:
+document_properties_page_size_unit_inches=polzades
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=apaïsat
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista web rà pida:
+document_properties_linearized_yes=SÃ
+document_properties_linearized_no=No
+document_properties_close=Tanca
+
+print_progress_message=S'està preparant la impressió del document…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancel·la
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Mostra/amaga la barra lateral
+toggle_sidebar_notification.title=Mostra/amaga la barra lateral (el document conté un esquema o adjuncions)
+toggle_sidebar_label=Mostra/amaga la barra lateral
+document_outline.title=Mostra l'esquema del document (doble clic per ampliar/reduir tots els elements)
+document_outline_label=Contorn del document
+attachments.title=Mostra les adjuncions
+attachments_label=Adjuncions
+thumbs.title=Mostra les miniatures
+thumbs_label=Miniatures
+findbar.title=Cerca al document
+findbar_label=Cerca
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=PÃ gina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=PÃ gina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura de la pà gina {{page}}
+
+# Find panel button title and messages
+find_input.title=Cerca
+find_input.placeholder=Cerca al document…
+find_previous.title=Cerca l'anterior coincidència de l'expressió
+find_previous_label=Anterior
+find_next.title=Cerca la següent coincidència de l'expressió
+find_next_label=Següent
+find_highlight=Ressalta-ho tot
+find_match_case_label=Distingeix entre majúscules i minúscules
+find_entire_word_label=Paraules senceres
+find_reached_top=S'ha arribat al principi del document, es continua pel final
+find_reached_bottom=S'ha arribat al final del document, es continua pel principi
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidència
+find_match_count[two]={{current}} de {{total}} coincidències
+find_match_count[few]={{current}} de {{total}} coincidències
+find_match_count[many]={{current}} de {{total}} coincidències
+find_match_count[other]={{current}} de {{total}} coincidències
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Més de {{limit}} coincidències
+find_match_count_limit[one]=Més d'{{limit}} coincidència
+find_match_count_limit[two]=Més de {{limit}} coincidències
+find_match_count_limit[few]=Més de {{limit}} coincidències
+find_match_count_limit[many]=Més de {{limit}} coincidències
+find_match_count_limit[other]=Més de {{limit}} coincidències
+find_not_found=No s'ha trobat l'expressió
+
+# Error panel labels
+error_more_info=Més informació
+error_less_info=Menys informació
+error_close=Tanca
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (muntatge: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Missatge: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fitxer: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=LÃnia: {{line}}
+rendering_error=S'ha produït un error mentre es renderitzava la pà gina.
+
+# Predefined zoom values
+page_scale_width=Amplada de la pà gina
+page_scale_fit=Ajusta la pà gina
+page_scale_auto=Zoom automà tic
+page_scale_actual=Mida real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=S'ha produït un error en carregar el PDF.
+invalid_file_error=El fitxer PDF no és và lid o està malmès.
+missing_file_error=Falta el fitxer PDF.
+unexpected_response_error=Resposta inesperada del servidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotació {{type}}]
+password_label=Introduïu la contrasenya per obrir aquest fitxer PDF.
+password_invalid=La contrasenya no és và lida. Torneu-ho a provar.
+password_ok=D'acord
+password_cancel=Cancel·la
+
+printing_not_supported=AvÃs: la impressió no és plenament funcional en aquest navegador.
+printing_not_ready=Atenció: el PDF no s'ha acabat de carregar per imprimir-lo.
+web_fonts_disabled=Els tipus de lletra web estan desactivats: no es poden utilitzar els tipus de lletra incrustats al PDF.
diff --git a/thirdparty/pdfjs/web/locale/cak/viewer.properties b/thirdparty/pdfjs/web/locale/cak/viewer.properties
new file mode 100644
index 0000000..5d9be9a
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/cak/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Jun kan ruxaq
+previous_label=Jun kan
+next.title=Jun chik ruxaq
+next_label=Jun chik
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Ruxaq
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=richin {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} richin {{pagesCount}})
+
+zoom_out.title=Tich'utinirisäx
+zoom_out_label=Tich'utinirisäx
+zoom_in.title=Tinimirisäx
+zoom_in_label=Tinimirisäx
+zoom.title=Sum
+presentation_mode.title=Tijal ri rub'anikil niwachin
+presentation_mode_label=Pa rub'eyal niwachin
+open_file.title=Tijaq Yakb'äl
+open_file_label=Tijaq
+print.title=Titz'ajb'äx
+print_label=Titz'ajb'äx
+download.title=Tiqasäx
+download_label=Tiqasäx
+bookmark.title=Rutz'etik wakami (tiwachib'ëx o tijaq pa jun k'ak'a' tzuwäch)
+bookmark_label=Rutzub'al wakami
+
+# Secondary toolbar and context menu
+tools.title=Samajib'äl
+tools_label=Samajib'äl
+first_page.title=Tib'e pa nab'ey ruxaq
+first_page.label=Tib'e pa nab'ey ruxaq
+first_page_label=Tib'e pa nab'ey ruxaq
+last_page.title=Tib'e pa ruk'isib'äl ruxaq
+last_page.label=Tib'e pa ruk'isib'äl ruxaq
+last_page_label=Tib'e pa ruk'isib'äl ruxaq
+page_rotate_cw.title=Tisutïx pan ajkiq'a'
+page_rotate_cw.label=Tisutïx pan ajkiq'a'
+page_rotate_cw_label=Tisutïx pan ajkiq'a'
+page_rotate_ccw.title=Tisutïx pan ajxokon
+page_rotate_ccw.label=Tisutïx pan ajxokon
+page_rotate_ccw_label=Tisutïx pan ajxokon
+
+cursor_text_select_tool.title=Titzij ri rusamajib'al Rucha'ik Rucholajem Tzij
+cursor_text_select_tool_label=Rusamajib'al Rucha'ik Rucholajem Tzij
+cursor_hand_tool.title=Titzij ri q'ab'aj samajib'äl
+cursor_hand_tool_label=Q'ab'aj Samajib'äl
+
+scroll_vertical.title=Tokisäx Pa'äl Q'axanem
+scroll_vertical_label=Pa'äl Q'axanem
+scroll_horizontal.title=Tokisäx Kotz'öl Q'axanem
+scroll_horizontal_label=Kotz'öl Q'axanem
+scroll_wrapped.title=Tokisäx Tzub'aj Q'axanem
+scroll_wrapped_label=Tzub'aj Q'axanem
+
+spread_none.title=Man ketun taq ruxaq pa rub'eyal wuj
+spread_none_label=Majun Rub'eyal
+spread_odd.title=Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun man k'ulaj ta rajilab'al
+spread_odd_label=Man K'ulaj Ta Rub'eyal
+spread_even.title=Ke'atunu' ri taq ruxaq rik'in natikirisaj rik'in jun k'ulaj rajilab'al
+spread_even_label=K'ulaj Rub'eyal
+
+# Document properties dialog box
+document_properties.title=Taq richinil wuj…
+document_properties_label=Taq richinil wuj…
+document_properties_file_name=Rub'i' yakb'äl:
+document_properties_file_size=Runimilem yakb'äl:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=B'i'aj:
+document_properties_author=B'anel:
+document_properties_subject=Taqikil:
+document_properties_keywords=Kixe'el taq tzij:
+document_properties_creation_date=Ruq'ijul xtz'uk:
+document_properties_modification_date=Ruq'ijul xjalwachïx:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Q'inonel:
+document_properties_producer=PDF b'anöy:
+document_properties_version=PDF ruwäch:
+document_properties_page_count=Jarupe' ruxaq:
+document_properties_page_size=Runimilem ri Ruxaq:
+document_properties_page_size_unit_inches=pa
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=rupalem
+document_properties_page_size_orientation_landscape=rukotz'olem
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Loman wuj
+document_properties_page_size_name_legal=Taqanel tzijol
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Anin Rutz'etik Ajk'amaya'l:
+document_properties_linearized_yes=Ja'
+document_properties_linearized_no=Mani
+document_properties_close=Titz'apïx
+
+print_progress_message=Ruchojmirisaxik wuj richin nitz'ajb'äx…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Tiq'at
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Tijal ri ajxikin kajtz'ik
+toggle_sidebar_notification.title=Tik'ex ri ajxikin yuqkajtz'ik (ri wuj eruk'wan taq ruchi'/taqoj taq yakb'äl)
+toggle_sidebar_notification2.title=Tik'ex ri ajxikin yuqkajtz'ik (ri wuj eruk'wan taq ruchi'/taqo/kuchuj)
+toggle_sidebar_label=Tijal ri ajxikin kajtz'ik
+document_outline.title=Tik'ut pe ruch'akulal wuj (kamul-pitz'oj richin nirik'/nich'utinirisäx ronojel ruch'akulal)
+document_outline_label=Ruch'akulal wuj
+attachments.title=Kek'ut pe ri taq taqoj
+attachments_label=Taq taqoj
+layers.title=Kek'ut taq Kuchuj (ka'i'-pitz' richin yetzolïx ronojel ri taq kuchuj e k'o wi)
+layers_label=Taq kuchuj
+thumbs.title=Kek'ut pe taq ch'utiq
+thumbs_label=Koköj
+findbar.title=Tikanöx chupam ri wuj
+findbar_label=Tikanöx
+
+additional_layers=Tz'aqat ta Kuchuj
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Ruxaq {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Ruxaq {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Ruch'utinirisaxik ruxaq {{page}}
+
+# Find panel button title and messages
+find_input.title=Tikanöx
+find_input.placeholder=Tikanöx pa wuj…
+find_previous.title=Tib'an b'enam pa ri jun kan q'aptzij xilitäj
+find_previous_label=Jun kan
+find_next.title=Tib'e pa ri jun chik pajtzij xilitäj
+find_next_label=Jun chik
+find_highlight=Tiya' retal ronojel
+find_match_case_label=Tuk'äm ri' kik'in taq nimatz'ib' chuqa' taq ch'utitz'ib'
+find_entire_word_label=Tz'aqät taq tzij
+find_reached_top=Xb'eq'i' ri rutikirib'al wuj, xtikanöx k'a pa ruk'isib'äl
+find_reached_bottom=Xb'eq'i' ri ruk'isib'äl wuj, xtikanöx pa rutikirib'al
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} richin {{total}} nuk'äm ri'
+find_match_count[two]={{current}} richin {{total}} nikik'äm ki'
+find_match_count[few]={{current}} richin {{total}} nikik'äm ki'
+find_match_count[many]={{current}} richin {{total}} nikik'äm ki'
+find_match_count[other]={{current}} richin {{total}} nikik'äm ki'
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=K'ïy chi re {{limit}} nikik'äm ki'
+find_match_count_limit[one]=K'ïy chi re {{limit}} nuk'äm ri'
+find_match_count_limit[two]=K'ïy chi re {{limit}} nikik'äm ki'
+find_match_count_limit[few]=K'ïy chi re {{limit}} nikik'äm ki'
+find_match_count_limit[many]=K'ïy chi re {{limit}} nikik'äm ki'
+find_match_count_limit[other]=K'ïy chi re {{limit}} nikik'äm ki'
+find_not_found=Man xilitäj ta ri pajtzij
+
+# Error panel labels
+error_more_info=Ch'aqa' chik rutzijol
+error_less_info=Jub'a' ok rutzijol
+error_close=Titz'apïx
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Uqxa'n: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Tzub'aj: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Yakb'äl: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=B'ey: {{line}}
+rendering_error=Xk'ulwachitäj jun sachoj toq ninuk'wachij ri ruxaq.
+
+# Predefined zoom values
+page_scale_width=Ruwa ruxaq
+page_scale_fit=Tinuk' ruxaq
+page_scale_auto=Yonil chi nimilem
+page_scale_actual=Runimilem Wakami
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Sachoj
+loading_error=\u0020Xk'ulwachitäj jun sach'oj toq xnuk'ux ri PDF .
+invalid_file_error=Man oke ta o yujtajinäq ri PDF yakb'äl.
+missing_file_error=Man xilitäj ta ri PDF yakb'äl.
+unexpected_response_error=Man oyob'en ta tz'olin rutzij ruk'u'x samaj.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Tz'ib'anïk]
+password_label=Tatz'ib'aj ri ewan tzij richin najäq re yakb'äl re' pa PDF.
+password_invalid=Man okel ta ri ewan tzij: Tatojtob'ej chik.
+password_ok=Ütz
+password_cancel=Tiq'at
+
+printing_not_supported=Rutzijol k'ayewal: Ri rutz'ajb'axik man koch'el ta ronojel pa re okik'amaya'l re'.
+printing_not_ready=Rutzijol k'ayewal: Ri PDF man xusamajij ta ronojel richin nitz'ajb'äx.
+web_fonts_disabled=E chupül ri taq ajk'amaya'l tz'ib': man tikirel ta nokisäx ri taq tz'ib' PDF pa ch'ikenïk
diff --git a/thirdparty/pdfjs/web/locale/ckb/viewer.properties b/thirdparty/pdfjs/web/locale/ckb/viewer.properties
new file mode 100644
index 0000000..4cef6cc
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/ckb/viewer.properties
@@ -0,0 +1,235 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=پەڕەی پێشوو
+previous_label=پێشوو
+next.title=پەڕەی دوواتر
+next_label=دوواتر
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=پەرە
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=Ù„Û• {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} Ù„Û• {{pagesCount}})
+
+zoom_out.title=ڕۆچوونی
+zoom_out_label=ڕۆچوونی
+zoom_in.title=هێنانەپێش
+zoom_in_label=هێنانەپێش
+zoom.title=زووم
+open_file.title=پەڕگە بکەرەوە
+open_file_label=کردنەوە
+print.title=چاپکردن
+print_label=چاپکردن
+download.title=داگرتن
+download_label=داگرتن
+
+# Secondary toolbar and context menu
+tools.title=ئامرازەکان
+tools_label=ئامرازەکان
+first_page.title=برۆ بۆ یەکەم پەڕە
+first_page.label=بڕۆ بۆ یەکەم پەڕە
+first_page_label=بڕۆ بۆ یەکەم پەڕە
+last_page.title=بڕۆ بۆ کۆتا پەڕە
+last_page.label=بڕۆ بۆ کۆتا پەڕە
+last_page_label=بڕۆ بۆ کۆتا پەڕە
+page_rotate_cw.title=ئاڕاستەی میلی کاتژمێر
+page_rotate_cw.label=ئاڕاستەی میلی کاتژمێر
+page_rotate_cw_label=ئاڕاستەی میلی کاتژمێر
+page_rotate_ccw.title=پێچەوانەی میلی کاتژمێر
+page_rotate_ccw.label=پێچەوانەی میلی کاتژمێر
+page_rotate_ccw_label=پێچەوانەی میلی کاتژمێر
+
+cursor_text_select_tool.title=توڵامرازی نیشانکەری دەق چالاک بکە
+cursor_text_select_tool_label=توڵامرازی نیشانکەری دەق
+cursor_hand_tool.title=توڵامرازی دەستی چالاک بکە
+cursor_hand_tool_label=توڵامرازی دەستی
+
+scroll_vertical.title=ناردنی ئەستوونی بەکاربێنە
+scroll_vertical_label=ناردنی ئەستوونی
+scroll_horizontal.title=ناردنی ئاسۆیی بەکاربێنە
+scroll_horizontal_label=ناردنی ئاسۆیی
+scroll_wrapped.title=ناردنی لوولکراو بەکاربێنە
+scroll_wrapped_label=ناردنی لوولکراو
+
+
+# Document properties dialog box
+document_properties_file_name=ناوی پەڕگە:
+document_properties_file_size=قەبارەی پەڕگە:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} کب ({{size_b}} بایت)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} مب ({{size_b}} بایت)
+document_properties_title=سەردێڕ:
+document_properties_author=نووسەر
+document_properties_subject=بابەت:
+document_properties_keywords=کلیلەوشە:
+document_properties_creation_date=بەرواری درووستکردن:
+document_properties_modification_date=بەرواری دەستکاریکردن:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=درووستکەر:
+document_properties_producer=بەرهەمهێنەری PDF:
+document_properties_version=وەشانی PDF:
+document_properties_page_count=ژمارەی پەرەکان:
+document_properties_page_size=قەبارەی پەڕە:
+document_properties_page_size_unit_inches=ئینچ
+document_properties_page_size_unit_millimeters=ملم
+document_properties_page_size_orientation_portrait=پۆرترەیت(درێژ)
+document_properties_page_size_orientation_landscape=پانیی
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=نامە
+document_properties_page_size_name_legal=یاسایی
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=پیشاندانی وێبی خێرا:
+document_properties_linearized_yes=بەڵێ
+document_properties_linearized_no=نەخێر
+document_properties_close=داخستن
+
+print_progress_message=بەڵگەنامە ئامادەدەکرێت بۆ چاپکردن...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=پاشگەزبوونەوە
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=لاتەنیشت پیشاندان/شاردنەوە
+toggle_sidebar_label=لاتەنیشت پیشاندان/شاردنەوە
+document_outline_label=سنووری چوارچێوە
+attachments.title=پاشکۆکان پیشان بدە
+attachments_label=پاشکۆکان
+layers_label=چینەکان
+thumbs.title=وێنۆچکە پیشان بدە
+thumbs_label=ÙˆÛŽÙ†Û†Ú†Ú©Û•
+findbar.title=لە بەڵگەنامە بگەرێ
+findbar_label=دۆزینەوە
+
+additional_layers=چینی زیاتر
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=پەڕەی {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=پەڕەی {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=وێنۆچکەی پەڕەی {{page}}
+
+# Find panel button title and messages
+find_input.title=دۆزینەوە
+find_input.placeholder=لە بەڵگەنامە بگەرێ...
+find_previous.title=هەبوونی پێشوو بدۆزرەوە لە ڕستەکەدا
+find_previous_label=پێشوو
+find_next.title=هەبوونی داهاتوو بدۆزەرەوە لە ڕستەکەدا
+find_next_label=دوواتر
+find_highlight=هەمووی نیشانە بکە
+find_match_case_label=دۆخی لەیەکچوون
+find_entire_word_label=هەموو وشەکان
+find_reached_top=گەشتیتە سەرەوەی بەڵگەنامە، لە خوارەوە دەستت پێکرد
+find_reached_bottom=گەشتیتە کۆتایی بەڵگەنامە. لەسەرەوە دەستت پێکرد
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} لە کۆی {{total}} لەیەکچوو
+find_match_count[two]={{current}} لە کۆی {{total}} لەیەکچوو
+find_match_count[few]={{current}} لە کۆی {{total}} لەیەکچوو
+find_match_count[many]={{current}} لە کۆی {{total}} لەیەکچوو
+find_match_count[other]={{current}} لە کۆی {{total}} لەیەکچوو
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=زیاتر لە {{limit}} لەیەکچوو
+find_match_count_limit[one]=زیاتر لە {{limit}} لەیەکچوو
+find_match_count_limit[two]=زیاتر لە {{limit}} لەیەکچوو
+find_match_count_limit[few]=زیاتر لە {{limit}} لەیەکچوو
+find_match_count_limit[many]=زیاتر لە {{limit}} لەیەکچوو
+find_match_count_limit[other]=زیاتر لە {{limit}} لەیەکچوو
+find_not_found=نووسین نەدۆزرایەوە
+
+# Error panel labels
+error_more_info=زانیاری زیاتر
+error_less_info=زانیاری کەمتر
+error_close=داخستن
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=پەیام: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=لەسەریەک: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Ù¾Û•Ú•Ú¯Û•: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Ù‡ÛŽÚµ: {{line}}
+rendering_error=هەڵەیەک ڕوویدا لە کاتی پوختەکردنی (ڕێندەر) پەڕە.
+
+# Predefined zoom values
+page_scale_width=پانی پەڕە
+page_scale_fit=پڕبوونی پەڕە
+page_scale_auto=زوومی خۆکار
+page_scale_actual=قەبارەی ڕاستی
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Ù‡Û•ÚµÛ•
+loading_error=هەڵەیەک ڕوویدا لە کاتی بارکردنی PDF.
+invalid_file_error=پەڕگەی pdf تێکچووە یان نەگونجاوە.
+missing_file_error=پەڕگەی pdf بوونی نیە.
+unexpected_response_error=وەڵامی ڕاژەخوازی نەخوازراو.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} سەرنج]
+password_label=وشەی تێپەڕ بنووسە بۆ کردنەوەی پەڕگەی pdf.
+password_invalid=وشەی تێپەڕ هەڵەیە. تکایە دووبارە هەوڵ بدەرەوە.
+password_ok=باشە
+password_cancel=پاشگەزبوونەوە
+
+printing_not_supported=ئاگاداربە: چاپکردن بە تەواوی پشتگیر ناکرێت لەم وێبگەڕە.
+printing_not_ready=ئاگاداربە: PDF بە تەواوی بارنەبووە بۆ چاپکردن.
+web_fonts_disabled=جۆرەپیتی وێب ناچالاکە: نەتوانی جۆرەپیتی تێخراوی ناو pdfـەکە بەکاربێت.
diff --git a/thirdparty/pdfjs/web/locale/cs/viewer.properties b/thirdparty/pdfjs/web/locale/cs/viewer.properties
new file mode 100644
index 0000000..a5a36c5
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/cs/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Přejde na předchozà stránku
+previous_label=PÅ™edchozÃ
+next.title=PÅ™ejde na následujÃcà stránku
+next_label=DalÅ¡Ã
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Stránka
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=z {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} z {{pagesCount}})
+
+zoom_out.title=Zmenšà velikost
+zoom_out_label=Zmenšit
+zoom_in.title=Zvětšà velikost
+zoom_in_label=Zvětšit
+zoom.title=Nastavà velikost
+presentation_mode.title=Přepne do režimu prezentace
+presentation_mode_label=Režim prezentace
+open_file.title=Otevře soubor
+open_file_label=OtevÅ™Ãt
+print.title=Vytiskne dokument
+print_label=Vytisknout
+download.title=Stáhne dokument
+download_label=Stáhnout
+bookmark.title=SouÄasný pohled (kopÃrovat nebo otevÅ™Ãt v novém oknÄ›)
+bookmark_label=SouÄasný pohled
+
+# Secondary toolbar and context menu
+tools.title=Nástroje
+tools_label=Nástroje
+first_page.title=Přejde na prvnà stránku
+first_page.label=PÅ™ejÃt na prvnà stránku
+first_page_label=PÅ™ejÃt na prvnà stránku
+last_page.title=Přejde na poslednà stránku
+last_page.label=PÅ™ejÃt na poslednà stránku
+last_page_label=PÅ™ejÃt na poslednà stránku
+page_rotate_cw.title=OtoÄà po smÄ›ru hodin
+page_rotate_cw.label=OtoÄit po smÄ›ru hodin
+page_rotate_cw_label=OtoÄit po smÄ›ru hodin
+page_rotate_ccw.title=OtoÄà proti smÄ›ru hodin
+page_rotate_ccw.label=OtoÄit proti smÄ›ru hodin
+page_rotate_ccw_label=OtoÄit proti smÄ›ru hodin
+
+cursor_text_select_tool.title=Povolà výběr textu
+cursor_text_select_tool_label=Výběr textu
+cursor_hand_tool.title=Povolà nástroj ruÄiÄka
+cursor_hand_tool_label=Nástroj ruÄiÄka
+
+scroll_vertical.title=PoužÃt svislé posouvánÃ
+scroll_vertical_label=Svislé posouvánÃ
+scroll_horizontal.title=PoužÃt vodorovné posouvánÃ
+scroll_horizontal_label=Vodorovné posouvánÃ
+scroll_wrapped.title=PoužÃt postupné posouvánÃ
+scroll_wrapped_label=Postupné posouvánÃ
+
+spread_none.title=Nesdružovat stránky
+spread_none_label=Žádné sdruženÃ
+spread_odd.title=Sdružà stránky s umÃstÄ›nÃm lichých vlevo
+spread_odd_label=Sdruženà stránek (liché vlevo)
+spread_even.title=Sdružà stránky s umÃstÄ›nÃm sudých vlevo
+spread_even_label=Sdruženà stránek (sudé vlevo)
+
+# Document properties dialog box
+document_properties.title=Vlastnosti dokumentu…
+document_properties_label=Vlastnosti dokumentu…
+document_properties_file_name=Název souboru:
+document_properties_file_size=Velikost souboru:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajtů)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajtů)
+document_properties_title=Název stránky:
+document_properties_author=Autor:
+document_properties_subject=Předmět:
+document_properties_keywords=KlÃÄová slova:
+document_properties_creation_date=Datum vytvoÅ™enÃ:
+document_properties_modification_date=Datum úpravy:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Vytvořil:
+document_properties_producer=Tvůrce PDF:
+document_properties_version=Verze PDF:
+document_properties_page_count=PoÄet stránek:
+document_properties_page_size=Velikost stránky:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=na výšku
+document_properties_page_size_orientation_landscape=na Å¡ÃÅ™ku
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Dopis
+document_properties_page_size_name_legal=Právnà dokument
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Rychlé zobrazovánà z webu:
+document_properties_linearized_yes=Ano
+document_properties_linearized_no=Ne
+document_properties_close=ZavÅ™Ãt
+
+print_progress_message=PÅ™Ãprava dokumentu pro tisk…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}} %
+print_progress_close=Zrušit
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Postrannà lišta
+toggle_sidebar_notification.title=PÅ™epne postrannà liÅ¡tu (dokument obsahuje osnovu/pÅ™Ãlohy)
+toggle_sidebar_notification2.title=PÅ™epnout postrannà liÅ¡tu (dokument obsahuje osnovu/pÅ™Ãlohy/vrstvy)
+toggle_sidebar_label=Postrannà lišta
+document_outline.title=Zobrazà osnovu dokumentu (dvojité klepnutà rozbalÃ/sbalà vÅ¡echny položky)
+document_outline_label=Osnova dokumentu
+attachments.title=Zobrazà pÅ™Ãlohy
+attachments_label=PÅ™Ãlohy
+layers.title=Zobrazit vrstvy (poklepánÃm obnovÃte vÅ¡echny vrstvy do výchozÃho stavu)
+layers_label=Vrstvy
+thumbs.title=Zobrazà náhledy
+thumbs_label=Náhledy
+findbar.title=Najde v dokumentu
+findbar_label=NajÃt
+
+additional_layers=Dalšà vrstvy
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Strana {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Strana {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Náhled strany {{page}}
+
+# Find panel button title and messages
+find_input.title=NajÃt
+find_input.placeholder=NajÃt v dokumentu…
+find_previous.title=Najde předchozà výskyt hledaného textu
+find_previous_label=PÅ™edchozÃ
+find_next.title=Najde dalšà výskyt hledaného textu
+find_next_label=DalÅ¡Ã
+find_highlight=Zvýraznit
+find_match_case_label=Rozlišovat velikost
+find_entire_word_label=Celá slova
+find_reached_top=Dosažen zaÄátek dokumentu, pokraÄuje se od konce
+find_reached_bottom=Dosažen konec dokumentu, pokraÄuje se od zaÄátku
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}}. z {{total}} výskytu
+find_match_count[two]={{current}}. z {{total}} výskytů
+find_match_count[few]={{current}}. z {{total}} výskytů
+find_match_count[many]={{current}}. z {{total}} výskytů
+find_match_count[other]={{current}}. z {{total}} výskytů
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=VÃce než {{limit}} výskytů
+find_match_count_limit[one]=VÃce než {{limit}} výskyt
+find_match_count_limit[two]=VÃce než {{limit}} výskyty
+find_match_count_limit[few]=VÃce než {{limit}} výskyty
+find_match_count_limit[many]=VÃce než {{limit}} výskytů
+find_match_count_limit[other]=VÃce než {{limit}} výskytů
+find_not_found=Hledaný text nenalezen
+
+# Error panel labels
+error_more_info=VÃce informacÃ
+error_less_info=MénÄ› informacÃ
+error_close=ZavÅ™Ãt
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (sestavenÃ: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Zpráva: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=ZásobnÃk: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Soubor: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Řádek: {{line}}
+rendering_error=Při vykreslovánà stránky nastala chyba.
+
+# Predefined zoom values
+page_scale_width=Podle Å¡ÃÅ™ky
+page_scale_fit=Podle výšky
+page_scale_auto=Automatická velikost
+page_scale_actual=SkuteÄná velikost
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading_error_indicator=Chyba
+loading_error=Při nahrávánà PDF nastala chyba.
+invalid_file_error=Neplatný nebo chybný soubor PDF.
+missing_file_error=Chybà soubor PDF.
+unexpected_response_error=NeoÄekávaná odpovÄ›Ä serveru.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotace typu {{type}}]
+password_label=Pro otevřenà PDF souboru vložte heslo.
+password_invalid=Neplatné heslo. Zkuste to znovu.
+password_ok=OK
+password_cancel=Zrušit
+
+printing_not_supported=UpozornÄ›nÃ: Tisk nenà v tomto prohlÞeÄi plnÄ› podporován.
+printing_not_ready=UpozornÄ›nÃ: Dokument PDF nenà kompletnÄ› naÄten.
+web_fonts_disabled=Webová pÃsma jsou zakázána, proto nenà možné použÃt vložená pÃsma PDF.
diff --git a/thirdparty/pdfjs/web/locale/cy/viewer.properties b/thirdparty/pdfjs/web/locale/cy/viewer.properties
new file mode 100644
index 0000000..3f819c2
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/cy/viewer.properties
@@ -0,0 +1,253 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Tudalen Flaenorol
+previous_label=Blaenorol
+next.title=Tudalen Nesaf
+next_label=Nesaf
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Tudalen
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=o {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} o {{pagesCount}})
+
+zoom_out.title=Chwyddo Allan
+zoom_out_label=Chwyddo Allan
+zoom_in.title=Chwyddo Mewn
+zoom_in_label=Chwyddo Mewn
+zoom.title=Chwyddo
+presentation_mode.title=Newid i'r Modd Cyflwyno
+presentation_mode_label=Modd Cyflwyno
+open_file.title=Agor Ffeil
+open_file_label=Agor
+print.title=Argraffu
+print_label=Argraffu
+download.title=Llwyth
+download_label=Llwytho i Lawr
+bookmark.title=Golwg cyfredol (copïo neu agor ffenestr newydd)
+bookmark_label=Golwg Gyfredol
+
+# Secondary toolbar and context menu
+tools.title=Offer
+tools_label=Offer
+first_page.title=Mynd i'r Dudalen Gyntaf
+first_page.label=Mynd i'r Dudalen Gyntaf
+first_page_label=Mynd i'r Dudalen Gyntaf
+last_page.title=Mynd i'r Dudalen Olaf
+last_page.label=Mynd i'r Dudalen Olaf
+last_page_label=Mynd i'r Dudalen Olaf
+page_rotate_cw.title=Cylchdroi Clocwedd
+page_rotate_cw.label=Cylchdroi Clocwedd
+page_rotate_cw_label=Cylchdroi Clocwedd
+page_rotate_ccw.title=Cylchdroi Gwrthglocwedd
+page_rotate_ccw.label=Cylchdroi Gwrthglocwedd
+page_rotate_ccw_label=Cylchdroi Gwrthglocwedd
+
+cursor_text_select_tool.title=Galluogi Dewis Offeryn Testun
+cursor_text_select_tool_label=Offeryn Dewis Testun
+cursor_hand_tool.title=Galluogi Offeryn Llaw
+cursor_hand_tool_label=Offeryn Llaw
+
+scroll_vertical.title=Defnyddio Sgrolio Fertigol
+scroll_vertical_label=Sgrolio Fertigol
+scroll_horizontal.title=Defnyddio Sgrolio Fertigol
+scroll_horizontal_label=Sgrolio Fertigol
+scroll_wrapped.title=Defnyddio Sgrolio Amlapio
+scroll_wrapped_label=Sgrolio Amlapio
+
+spread_none.title=Peidio uno taeniadau canol
+spread_none_label=Dim Taeniadau
+spread_odd.title=Uno taeniadau tudalen yn cychwyn gyda thudalennau odrif
+spread_odd_label=Taeniadau Odrifau
+spread_even.title=Uno taeniadau tudalen yn cychwyn gyda thudalennau eilrif
+spread_even_label=Taeniadau Eilrif
+
+# Document properties dialog box
+document_properties.title=Priodweddau Dogfen…
+document_properties_label=Priodweddau Dogfen…
+document_properties_file_name=Enw ffeil:
+document_properties_file_size=Maint ffeil:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} beit)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} beit)
+document_properties_title=Teitl:
+document_properties_author=Awdur:
+document_properties_subject=Pwnc:
+document_properties_keywords=Allweddair:
+document_properties_creation_date=Dyddiad Creu:
+document_properties_modification_date=Dyddiad Addasu:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Crewr:
+document_properties_producer=Cynhyrchydd PDF:
+document_properties_version=Fersiwn PDF:
+document_properties_page_count=Cyfrif Tudalen:
+document_properties_page_size=Maint Tudalen:
+document_properties_page_size_unit_inches=o fewn
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portread
+document_properties_page_size_orientation_landscape=tirlun
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Llythyr
+document_properties_page_size_name_legal=Cyfreithiol
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Golwg Gwe Cyflym:
+document_properties_linearized_yes=Iawn
+document_properties_linearized_no=Na
+document_properties_close=Cau
+
+print_progress_message=Paratoi dogfen ar gyfer ei hargraffu…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Diddymu
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toglo'r Bar Ochr
+toggle_sidebar_notification.title=Toglo'r Bar Ochr (mae'r ddogfen yn cynnwys outline/attachments)
+toggle_sidebar_notification2.title=Toglo'r Bar Ochr (mae'r ddogfen yn cynnwys amlinelliadau/atodiadau/haenau)
+toggle_sidebar_label=Toglo'r Bar Ochr
+document_outline.title=Dangos Amlinell Dogfen (clic dwbl i ymestyn/cau pob eitem)
+document_outline_label=Amlinelliad Dogfen
+attachments.title=Dangos Atodiadau
+attachments_label=Atodiadau
+layers.title=Dangos Haenau (cliciwch ddwywaith i ailosod yr holl haenau i'r cyflwr rhagosodedig)
+layers_label=Haenau
+thumbs.title=Dangos Lluniau Bach
+thumbs_label=Lluniau Bach
+current_outline_item.title=Canfod yr Eitem Amlinellol Gyfredol
+current_outline_item_label=Yr Eitem Amlinellol Gyfredol
+findbar.title=Canfod yn y Ddogfen
+findbar_label=Canfod
+
+additional_layers=Haenau Ychwanegol
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Tudalen {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Tudalen {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Llun Bach Tudalen {{page}}
+
+# Find panel button title and messages
+find_input.title=Canfod
+find_input.placeholder=Canfod yn y ddogfen…
+find_previous.title=Canfod enghraifft flaenorol o'r ymadrodd
+find_previous_label=Blaenorol
+find_next.title=Canfod enghraifft nesaf yr ymadrodd
+find_next_label=Nesaf
+find_highlight=Amlygu popeth
+find_match_case_label=Cydweddu maint
+find_entire_word_label=Geiriau cyfan
+find_reached_top=Wedi cyrraedd brig y dudalen, parhau o'r gwaelod
+find_reached_bottom=Wedi cyrraedd diwedd y dudalen, parhau o'r brig
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} o {{total}} cydweddiad
+find_match_count[two]={{current}} o {{total}} cydweddiad
+find_match_count[few]={{current}} o {{total}} cydweddiad
+find_match_count[many]={{current}} o {{total}} cydweddiad
+find_match_count[other]={{current}} o {{total}} cydweddiad
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mwy na {{limit}} cydweddiad
+find_match_count_limit[one]=Mwy na {{limit}} cydweddiad
+find_match_count_limit[two]=Mwy na {{limit}} cydweddiad
+find_match_count_limit[few]=Mwy na {{limit}} cydweddiad
+find_match_count_limit[many]=Mwy na {{limit}} cydweddiad
+find_match_count_limit[other]=Mwy na {{limit}} cydweddiad
+find_not_found=Heb ganfod ymadrodd
+
+# Error panel labels
+error_more_info=Rhagor o Wybodaeth
+error_less_info=Llai o wybodaeth
+error_close=Cau
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Neges: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stac: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Ffeil: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Llinell: {{line}}
+rendering_error=Digwyddodd gwall wrth adeiladu'r dudalen.
+
+# Predefined zoom values
+page_scale_width=Lled Tudalen
+page_scale_fit=Ffit Tudalen
+page_scale_auto=Chwyddo Awtomatig
+page_scale_actual=Maint Gwirioneddol
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Gwall
+loading_error=Digwyddodd gwall wrth lwytho'r PDF.
+invalid_file_error=Ffeil PDF annilys neu llwgr.
+missing_file_error=Ffeil PDF coll.
+unexpected_response_error=Ymateb annisgwyl gan y gweinydd.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anodiad {{type}} ]
+password_label=Rhowch gyfrinair i agor y PDF.
+password_invalid=Cyfrinair annilys. Ceisiwch eto.
+password_ok=Iawn
+password_cancel=Diddymu
+
+printing_not_supported=Rhybudd: Nid yw argraffu yn cael ei gynnal yn llawn gan y porwr.
+printing_not_ready=Rhybudd: Nid yw'r PDF wedi ei lwytho'n llawn ar gyfer argraffu.
+web_fonts_disabled=Ffontiau gwe wedi eu hanalluogi: methu defnyddio ffontiau PDF mewnblanedig.
diff --git a/thirdparty/pdfjs/web/locale/da/viewer.properties b/thirdparty/pdfjs/web/locale/da/viewer.properties
new file mode 100644
index 0000000..8a33f3c
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/da/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Forrige side
+previous_label=Forrige
+next.title=Næste side
+next_label=Næste
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Side
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=af {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} af {{pagesCount}})
+
+zoom_out.title=Zoom ud
+zoom_out_label=Zoom ud
+zoom_in.title=Zoom ind
+zoom_in_label=Zoom ind
+zoom.title=Zoom
+presentation_mode.title=Skift til fuldskærmsvisning
+presentation_mode_label=Fuldskærmsvisning
+open_file.title=Ã…bn fil
+open_file_label=Ã…bn
+print.title=Udskriv
+print_label=Udskriv
+download.title=Hent
+download_label=Hent
+bookmark.title=Aktuel visning (kopier eller åbn i et nyt vindue)
+bookmark_label=Aktuel visning
+
+# Secondary toolbar and context menu
+tools.title=Funktioner
+tools_label=Funktioner
+first_page.title=Gå til første side
+first_page.label=Gå til første side
+first_page_label=Gå til første side
+last_page.title=GÃ¥ til sidste side
+last_page.label=GÃ¥ til sidste side
+last_page_label=GÃ¥ til sidste side
+page_rotate_cw.title=Roter med uret
+page_rotate_cw.label=Roter med uret
+page_rotate_cw_label=Roter med uret
+page_rotate_ccw.title=Roter mod uret
+page_rotate_ccw.label=Roter mod uret
+page_rotate_ccw_label=Roter mod uret
+
+cursor_text_select_tool.title=Aktiver markeringsværktøj
+cursor_text_select_tool_label=Markeringsværktøj
+cursor_hand_tool.title=Aktiver håndværktøj
+cursor_hand_tool_label=Håndværktøj
+
+scroll_vertical.title=Brug vertikal scrolling
+scroll_vertical_label=Vertikal scrolling
+scroll_horizontal.title=Brug horisontal scrolling
+scroll_horizontal_label=Horisontal scrolling
+scroll_wrapped.title=Brug ombrudt scrolling
+scroll_wrapped_label=Ombrudt scrolling
+
+spread_none.title=Vis enkeltsider
+spread_none_label=Enkeltsider
+spread_odd.title=Vis opslag med ulige sidenumre til venstre
+spread_odd_label=Opslag med forside
+spread_even.title=Vis opslag med lige sidenumre til venstre
+spread_even_label=Opslag uden forside
+
+# Document properties dialog box
+document_properties.title=Dokumentegenskaber…
+document_properties_label=Dokumentegenskaber…
+document_properties_file_name=Filnavn:
+document_properties_file_size=Filstørrelse:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titel:
+document_properties_author=Forfatter:
+document_properties_subject=Emne:
+document_properties_keywords=Nøgleord:
+document_properties_creation_date=Oprettet:
+document_properties_modification_date=Redigeret:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Program:
+document_properties_producer=PDF-producent:
+document_properties_version=PDF-version:
+document_properties_page_count=Antal sider:
+document_properties_page_size=Sidestørrelse:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=stående
+document_properties_page_size_orientation_landscape=liggende
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Hurtig web-visning:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nej
+document_properties_close=Luk
+
+print_progress_message=Forbereder dokument til udskrivning…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Annuller
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Slå sidepanel til eller fra
+toggle_sidebar_notification.title=Slå sidepanel til eller fra (dokumentet indeholder disposition/vedhæftede filer)
+toggle_sidebar_notification2.title=Slå sidepanel til eller fra (dokumentet indeholder disposition/vedhæftede filer/lag)
+toggle_sidebar_label=Slå sidepanel til eller fra
+document_outline.title=Vis dokumentets disposition (dobbeltklik for at vise/skjule alle elementer)
+document_outline_label=Dokument-disposition
+attachments.title=Vis vedhæftede filer
+attachments_label=Vedhæftede filer
+layers.title=Vis lag (dobbeltklik for at nulstille alle lag til standard-tilstanden)
+layers_label=Lag
+thumbs.title=Vis miniaturer
+thumbs_label=Miniaturer
+findbar.title=Find i dokument
+findbar_label=Find
+
+additional_layers=Yderligere lag
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Side {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Side {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniature af side {{page}}
+
+# Find panel button title and messages
+find_input.title=Find
+find_input.placeholder=Find i dokument…
+find_previous.title=Find den forrige forekomst
+find_previous_label=Forrige
+find_next.title=Find den næste forekomst
+find_next_label=Næste
+find_highlight=Fremhæv alle
+find_match_case_label=Forskel på store og små bogstaver
+find_entire_word_label=Hele ord
+find_reached_top=Toppen af siden blev nået, fortsatte fra bunden
+find_reached_bottom=Bunden af siden blev nået, fortsatte fra toppen
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} af {{total}} forekomst
+find_match_count[two]={{current}} af {{total}} forekomster
+find_match_count[few]={{current}} af {{total}} forekomster
+find_match_count[many]={{current}} af {{total}} forekomster
+find_match_count[other]={{current}} af {{total}} forekomster
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mere end {{limit}} forekomster
+find_match_count_limit[one]=Mere end {{limit}} forekomst
+find_match_count_limit[two]=Mere end {{limit}} forekomster
+find_match_count_limit[few]=Mere end {{limit}} forekomster
+find_match_count_limit[many]=Mere end {{limit}} forekomster
+find_match_count_limit[other]=Mere end {{limit}} forekomster
+find_not_found=Der blev ikke fundet noget
+
+# Error panel labels
+error_more_info=Mere information
+error_less_info=Mindre information
+error_close=Luk
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Fejlmeddelelse: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fil: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linje: {{line}}
+rendering_error=Der opstod en fejl ved generering af siden.
+
+# Predefined zoom values
+page_scale_width=Sidebredde
+page_scale_fit=Tilpas til side
+page_scale_auto=Automatisk zoom
+page_scale_actual=Faktisk størrelse
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Fejl
+loading_error=Der opstod en fejl ved indlæsning af PDF-filen.
+invalid_file_error=PDF-filen er ugyldig eller ødelagt.
+missing_file_error=Manglende PDF-fil.
+unexpected_response_error=Uventet svar fra serveren.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}}kommentar]
+password_label=Angiv adgangskode til at åbne denne PDF-fil.
+password_invalid=Ugyldig adgangskode. Prøv igen.
+password_ok=OK
+password_cancel=Fortryd
+
+printing_not_supported=Advarsel: Udskrivning er ikke fuldt understøttet af browseren.
+printing_not_ready=Advarsel: PDF-filen er ikke fuldt indlæst til udskrivning.
+web_fonts_disabled=Webskrifttyper er deaktiverede. De indlejrede skrifttyper i PDF-filen kan ikke anvendes.
diff --git a/thirdparty/pdfjs/web/locale/de/viewer.properties b/thirdparty/pdfjs/web/locale/de/viewer.properties
new file mode 100644
index 0000000..ed24316
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/de/viewer.properties
@@ -0,0 +1,253 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Eine Seite zurück
+previous_label=Zurück
+next.title=Eine Seite vor
+next_label=Vor
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Seite
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=von {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} von {{pagesCount}})
+
+zoom_out.title=Verkleinern
+zoom_out_label=Verkleinern
+zoom_in.title=Vergrößern
+zoom_in_label=Vergrößern
+zoom.title=Zoom
+presentation_mode.title=In Präsentationsmodus wechseln
+presentation_mode_label=Präsentationsmodus
+open_file.title=Datei öffnen
+open_file_label=Öffnen
+print.title=Drucken
+print_label=Drucken
+download.title=Dokument speichern
+download_label=Speichern
+bookmark.title=Aktuelle Ansicht (zum Kopieren oder Öffnen in einem neuen Fenster)
+bookmark_label=Aktuelle Ansicht
+
+# Secondary toolbar and context menu
+tools.title=Werkzeuge
+tools_label=Werkzeuge
+first_page.title=Erste Seite anzeigen
+first_page.label=Erste Seite anzeigen
+first_page_label=Erste Seite anzeigen
+last_page.title=Letzte Seite anzeigen
+last_page.label=Letzte Seite anzeigen
+last_page_label=Letzte Seite anzeigen
+page_rotate_cw.title=Im Uhrzeigersinn drehen
+page_rotate_cw.label=Im Uhrzeigersinn drehen
+page_rotate_cw_label=Im Uhrzeigersinn drehen
+page_rotate_ccw.title=Gegen Uhrzeigersinn drehen
+page_rotate_ccw.label=Gegen Uhrzeigersinn drehen
+page_rotate_ccw_label=Gegen Uhrzeigersinn drehen
+
+cursor_text_select_tool.title=Textauswahl-Werkzeug aktivieren
+cursor_text_select_tool_label=Textauswahl-Werkzeug
+cursor_hand_tool.title=Hand-Werkzeug aktivieren
+cursor_hand_tool_label=Hand-Werkzeug
+
+scroll_vertical.title=Seiten übereinander anordnen
+scroll_vertical_label=Vertikale Seitenanordnung
+scroll_horizontal.title=Seiten nebeneinander anordnen
+scroll_horizontal_label=Horizontale Seitenanordnung
+scroll_wrapped.title=Seiten neben- und übereinander anordnen, anhängig vom Platz
+scroll_wrapped_label=Kombinierte Seitenanordnung
+
+spread_none.title=Seiten nicht nebeneinander anzeigen
+spread_none_label=Einzelne Seiten
+spread_odd.title=Jeweils eine ungerade und eine gerade Seite nebeneinander anzeigen
+spread_odd_label=Ungerade + gerade Seite
+spread_even.title=Jeweils eine gerade und eine ungerade Seite nebeneinander anzeigen
+spread_even_label=Gerade + ungerade Seite
+
+# Document properties dialog box
+document_properties.title=Dokumenteigenschaften
+document_properties_label=Dokumenteigenschaften…
+document_properties_file_name=Dateiname:
+document_properties_file_size=Dateigröße:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} Bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} Bytes)
+document_properties_title=Titel:
+document_properties_author=Autor:
+document_properties_subject=Thema:
+document_properties_keywords=Stichwörter:
+document_properties_creation_date=Erstelldatum:
+document_properties_modification_date=Bearbeitungsdatum:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}} {{time}}
+document_properties_creator=Anwendung:
+document_properties_producer=PDF erstellt mit:
+document_properties_version=PDF-Version:
+document_properties_page_count=Seitenzahl:
+document_properties_page_size=Seitengröße:
+document_properties_page_size_unit_inches=Zoll
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=Hochformat
+document_properties_page_size_orientation_landscape=Querformat
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Schnelle Webanzeige:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nein
+document_properties_close=Schließen
+
+print_progress_message=Dokument wird für Drucken vorbereitet…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}} %
+print_progress_close=Abbrechen
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Sidebar umschalten
+toggle_sidebar_notification.title=Sidebar umschalten (Dokument enthält Dokumentstruktur/Anhänge)
+toggle_sidebar_notification2.title=Sidebar umschalten (Dokument enthält Dokumentstruktur/Anhänge/Ebenen)
+toggle_sidebar_label=Sidebar umschalten
+document_outline.title=Dokumentstruktur anzeigen (Doppelklicken, um alle Einträge aus- bzw. einzuklappen)
+document_outline_label=Dokumentstruktur
+attachments.title=Anhänge anzeigen
+attachments_label=Anhänge
+layers.title=Ebenen anzeigen (Doppelklicken, um alle Ebenen auf den Standardzustand zurückzusetzen)
+layers_label=Ebenen
+thumbs.title=Miniaturansichten anzeigen
+thumbs_label=Miniaturansichten
+current_outline_item.title=Aktuelles Struktur-Element suchen
+current_outline_item_label=Aktuelles Struktur-Element
+findbar.title=Dokument durchsuchen
+findbar_label=Suchen
+
+additional_layers=Zusätzliche Ebenen
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Seite {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Seite {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniaturansicht von Seite {{page}}
+
+# Find panel button title and messages
+find_input.title=Suchen
+find_input.placeholder=Im Dokument suchen…
+find_previous.title=Vorheriges Vorkommen des Suchbegriffs finden
+find_previous_label=Zurück
+find_next.title=Nächstes Vorkommen des Suchbegriffs finden
+find_next_label=Weiter
+find_highlight=Alle hervorheben
+find_match_case_label=Groß-/Kleinschreibung beachten
+find_entire_word_label=Ganze Wörter
+find_reached_top=Anfang des Dokuments erreicht, fahre am Ende fort
+find_reached_bottom=Ende des Dokuments erreicht, fahre am Anfang fort
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} von {{total}} Übereinstimmung
+find_match_count[two]={{current}} von {{total}} Übereinstimmungen
+find_match_count[few]={{current}} von {{total}} Übereinstimmungen
+find_match_count[many]={{current}} von {{total}} Übereinstimmungen
+find_match_count[other]={{current}} von {{total}} Übereinstimmungen
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mehr als {{limit}} Übereinstimmungen
+find_match_count_limit[one]=Mehr als {{limit}} Übereinstimmung
+find_match_count_limit[two]=Mehr als {{limit}} Übereinstimmungen
+find_match_count_limit[few]=Mehr als {{limit}} Übereinstimmungen
+find_match_count_limit[many]=Mehr als {{limit}} Übereinstimmungen
+find_match_count_limit[other]=Mehr als {{limit}} Übereinstimmungen
+find_not_found=Suchbegriff nicht gefunden
+
+# Error panel labels
+error_more_info=Mehr Informationen
+error_less_info=Weniger Informationen
+error_close=Schließen
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js Version {{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Nachricht: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Aufrufliste: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Datei: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Zeile: {{line}}
+rendering_error=Beim Darstellen der Seite trat ein Fehler auf.
+
+# Predefined zoom values
+page_scale_width=Seitenbreite
+page_scale_fit=Seitengröße
+page_scale_auto=Automatischer Zoom
+page_scale_actual=Originalgröße
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading_error_indicator=Fehler
+loading_error=Beim Laden der PDF-Datei trat ein Fehler auf.
+invalid_file_error=Ungültige oder beschädigte PDF-Datei
+missing_file_error=Fehlende PDF-Datei
+unexpected_response_error=Unerwartete Antwort des Servers
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anlage: {{type}}]
+password_label=Geben Sie zum Öffnen der PDF-Datei deren Passwort ein.
+password_invalid=Falsches Passwort. Bitte versuchen Sie es erneut.
+password_ok=OK
+password_cancel=Abbrechen
+
+printing_not_supported=Warnung: Die Drucken-Funktion wird durch diesen Browser nicht vollständig unterstützt.
+printing_not_ready=Warnung: Die PDF-Datei ist nicht vollständig geladen, dies ist für das Drucken aber empfohlen.
+web_fonts_disabled=Web-Schriftarten sind deaktiviert: Eingebettete PDF-Schriftarten konnten nicht geladen werden.
diff --git a/thirdparty/pdfjs/web/locale/dsb/viewer.properties b/thirdparty/pdfjs/web/locale/dsb/viewer.properties
new file mode 100644
index 0000000..4902a97
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/dsb/viewer.properties
@@ -0,0 +1,253 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pjerwjejšny bok
+previous_label=Slědk
+next.title=Pśiducy bok
+next_label=Dalej
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Bok
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=z {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} z {{pagesCount}})
+
+zoom_out.title=Pómjeńšyś
+zoom_out_label=Pómjeńšyś
+zoom_in.title=Pówětšyś
+zoom_in_label=Pówětšyś
+zoom.title=Skalěrowanje
+presentation_mode.title=Do prezentaciskego modusa pśejś
+presentation_mode_label=Prezentaciski modus
+open_file.title=Dataju wócyniś
+open_file_label=Wócyniś
+print.title=Śišćaś
+print_label=Śišćaś
+download.title=Ześěgnuś
+download_label=Ześěgnuś
+bookmark.title=Aktualny naglěd (kopěrowaś abo w nowem woknje wócyniś)
+bookmark_label=Aktualny naglěd
+
+# Secondary toolbar and context menu
+tools.title=Rědy
+tools_label=Rědy
+first_page.title=K prědnemu bokoju
+first_page.label=K prědnemu bokoju
+first_page_label=K prědnemu bokoju
+last_page.title=K slědnemu bokoju
+last_page.label=K slědnemu bokoju
+last_page_label=K slědnemu bokoju
+page_rotate_cw.title=Wobwjertnuś ako špěra źo
+page_rotate_cw.label=Wobwjertnuś ako špěra źo
+page_rotate_cw_label=Wobwjertnuś ako špěra źo
+page_rotate_ccw.title=Wobwjertnuś nawopaki ako špěra źo
+page_rotate_ccw.label=Wobwjertnuś nawopaki ako špěra źo
+page_rotate_ccw_label=Wobwjertnuś nawopaki ako špěra źo
+
+cursor_text_select_tool.title=Rěd za wuběranje teksta zmóžniś
+cursor_text_select_tool_label=Rěd za wuběranje teksta
+cursor_hand_tool.title=Rucny rěd zmóžniś
+cursor_hand_tool_label=Rucny rěd
+
+scroll_vertical.title=Wertikalne suwanje wužywaś
+scroll_vertical_label=Wertikalnje suwanje
+scroll_horizontal.title=Horicontalne suwanje wužywaś
+scroll_horizontal_label=Horicontalne suwanje
+scroll_wrapped.title=Pózlažke suwanje wužywaś
+scroll_wrapped_label=Pózlažke suwanje
+
+spread_none.title=Boki njezwězaś
+spread_none_label=Žeden dwójny bok
+spread_odd.title=Boki zachopinajucy z njerownymi bokami zwězaś
+spread_odd_label=Njerowne boki
+spread_even.title=Boki zachopinajucy z rownymi bokami zwězaś
+spread_even_label=Rowne boki
+
+# Document properties dialog box
+document_properties.title=Dokumentowe kakosći…
+document_properties_label=Dokumentowe kakosći…
+document_properties_file_name=MÄ› dataje:
+document_properties_file_size=Wjelikosć dataje:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajtow)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajtow)
+document_properties_title=Titel:
+document_properties_author=Awtor:
+document_properties_subject=Tema:
+document_properties_keywords=Klucowe słowa:
+document_properties_creation_date=Datum napóranja:
+document_properties_modification_date=Datum změny:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Awtor:
+document_properties_producer=PDF-gótowaŕ:
+document_properties_version=PDF-wersija:
+document_properties_page_count=Licba bokow:
+document_properties_page_size=Wjelikosć boka:
+document_properties_page_size_unit_inches=col
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=wusoki format
+document_properties_page_size_orientation_landscape=prěcny format
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Jo
+document_properties_linearized_no=NÄ›
+document_properties_close=ZacyniÅ›
+
+print_progress_message=Dokument pśigótujo se za śišćanje…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Pśetergnuś
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Bócnicu pokazaś/schowaś
+toggle_sidebar_notification.title=Bocnicu pśešaltowaś (dokument wopśimujo pśeglěd/pśipiski)
+toggle_sidebar_notification2.title=Bocnicu pśešaltowaś (dokument rozrědowanje/pśipiski/warstwy wopśimujo)
+toggle_sidebar_label=Bócnicu pokazaś/schowaś
+document_outline.title=Dokumentowe naraźenje pokazaś (dwójne kliknjenje, aby se wšykne zapiski pokazali/schowali)
+document_outline_label=Dokumentowa struktura
+attachments.title=Pśidanki pokazaś
+attachments_label=Pśidanki
+layers.title=Warstwy pokazaś (klikniśo dwójcy, aby wšykne warstwy na standardny staw slědk stajił)
+layers_label=Warstwy
+thumbs.title=Miniatury pokazaÅ›
+thumbs_label=Miniatury
+current_outline_item.title=Aktualny rozrědowański zapisk pytaś
+current_outline_item_label=Aktualny rozrědowański zapisk
+findbar.title=W dokumenśe pytaś
+findbar_label=PytaÅ›
+
+additional_layers=Dalšne warstwy
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Bok {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Bok {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura boka {{page}}
+
+# Find panel button title and messages
+find_input.title=PytaÅ›
+find_input.placeholder=W dokumenśe pytaś…
+find_previous.title=Pjerwjejšne wustupowanje pytańskego wuraza pytaś
+find_previous_label=Slědk
+find_next.title=Pśidujuce wustupowanje pytańskego wuraza pytaś
+find_next_label=Dalej
+find_highlight=Wšykne wuzwignuś
+find_match_case_label=Na wjelikopisanje źiwaś
+find_entire_word_label=Cełe słowa
+find_reached_top=Zachopjeńk dokumenta dostany, pókšacujo se z kóńcom
+find_reached_bottom=Kóńc dokumenta dostany, pókšacujo se ze zachopjeńkom
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} z {{total}} wótpowědnika
+find_match_count[two]={{current}} z {{total}} wótpowědnikowu
+find_match_count[few]={{current}} z {{total}} wótpowědnikow
+find_match_count[many]={{current}} z {{total}} wótpowědnikow
+find_match_count[other]={{current}} z {{total}} wótpowědnikow
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Wěcej ako {{limit}} wótpowědnikow
+find_match_count_limit[one]=Wěcej ako {{limit}} wótpowědnik
+find_match_count_limit[two]=Wěcej ako {{limit}} wótpowědnika
+find_match_count_limit[few]=Wěcej ako {{limit}} wótpowědniki
+find_match_count_limit[many]=Wěcej ako {{limit}} wótpowědnikow
+find_match_count_limit[other]=Wěcej ako {{limit}} wótpowědnikow
+find_not_found=Pytański wuraz njejo se namakał
+
+# Error panel labels
+error_more_info=Wěcej informacijow
+error_less_info=Mjenjej informacijow
+error_close=ZacyniÅ›
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Powěźenka: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Lisćina zawołanjow: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Dataja: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Smužka: {{line}}
+rendering_error=Pśi zwobraznjanju boka jo zmólka nastała.
+
+# Predefined zoom values
+page_scale_width=Šyrokosć boka
+page_scale_fit=Wjelikosć boka
+page_scale_auto=Awtomatiske skalěrowanje
+page_scale_actual=Aktualna wjelikosć
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Zmólka
+loading_error=Pśi zacytowanju PDF jo zmólka nastała.
+invalid_file_error=Njepłaśiwa abo wobškóźona PDF-dataja.
+missing_file_error=Felujuca PDF-dataja.
+unexpected_response_error=Njewócakane serwerowe wótegrono.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Typ pśipiskow: {{type}}]
+password_label=Zapódajśo gronidło, aby PDF-dataju wócynił.
+password_invalid=Njepłaśiwe gronidło. Pšosym wopytajśo hyšći raz.
+password_ok=W pórěźe
+password_cancel=Pśetergnuś
+
+printing_not_supported=Warnowanje: Śišćanje njepódpěra se połnje pśez toś ten wobglědowak.
+printing_not_ready=Warnowanje: PDF njejo se za śišćanje dopołnje zacytał.
+web_fonts_disabled=Webpisma su znjemóžnjone: njejo móžno, zasajźone PDF-pisma wužywaś.
diff --git a/thirdparty/pdfjs/web/locale/el/viewer.properties b/thirdparty/pdfjs/web/locale/el/viewer.properties
new file mode 100644
index 0000000..2de7033
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/el/viewer.properties
@@ -0,0 +1,253 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Î ÏοηγοÏμενη σελίδα
+previous_label=Î ÏοηγοÏμενη
+next.title=Επόμενη σελίδα
+next_label=Επόμενη
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Σελίδα
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=από {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} από {{pagesCount}})
+
+zoom_out.title=ΣμίκÏυνση
+zoom_out_label=ΣμίκÏυνση
+zoom_in.title=ΜεγÎθυνση
+zoom_in_label=ΜεγÎθυνση
+zoom.title=Ζουμ
+presentation_mode.title=Εναλλαγή σε λειτουÏγία παÏουσίασης
+presentation_mode_label=ΛειτουÏγία παÏουσίασης
+open_file.title=Άνοιγμα αÏχείου
+open_file_label=Άνοιγμα
+print.title=ΕκτÏπωση
+print_label=ΕκτÏπωση
+download.title=Λήψη
+download_label=Λήψη
+bookmark.title=ΤÏÎχουσα Ï€Ïοβολή (αντιγÏαφή ή άνοιγμα σε νÎο παÏάθυÏο)
+bookmark_label=ΤÏÎχουσα Ï€Ïοβολή
+
+# Secondary toolbar and context menu
+tools.title=ΕÏγαλεία
+tools_label=ΕÏγαλεία
+first_page.title=Μετάβαση στην Ï€Ïώτη σελίδα
+first_page.label=Μετάβαση στην Ï€Ïώτη σελίδα
+first_page_label=Μετάβαση στην Ï€Ïώτη σελίδα
+last_page.title=Μετάβαση στην τελευταία σελίδα
+last_page.label=Μετάβαση στην τελευταία σελίδα
+last_page_label=Μετάβαση στην τελευταία σελίδα
+page_rotate_cw.title=ΔεξιόστÏοφη πεÏιστÏοφή
+page_rotate_cw.label=ΔεξιόστÏοφη πεÏιστÏοφή
+page_rotate_cw_label=ΔεξιόστÏοφη πεÏιστÏοφή
+page_rotate_ccw.title=ΑÏιστεÏόστÏοφη πεÏιστÏοφή
+page_rotate_ccw.label=ΑÏιστεÏόστÏοφη πεÏιστÏοφή
+page_rotate_ccw_label=ΑÏιστεÏόστÏοφη πεÏιστÏοφή
+
+cursor_text_select_tool.title=ΕνεÏγοποίηση εÏγαλείου επιλογής κειμÎνου
+cursor_text_select_tool_label=ΕÏγαλείο επιλογής κειμÎνου
+cursor_hand_tool.title=ΕνεÏγοποίηση εÏγαλείου χεÏιοÏ
+cursor_hand_tool_label=ΕÏγαλείο χεÏιοÏ
+
+scroll_vertical.title=ΧÏήση κάθετης κÏλισης
+scroll_vertical_label=Κάθετη κÏλιση
+scroll_horizontal.title=ΧÏήση οÏιζόντιας κÏλισης
+scroll_horizontal_label=ΟÏιζόντια κÏλιση
+scroll_wrapped.title=ΧÏήση κυκλικής κÏλισης
+scroll_wrapped_label=Κυκλική κÏλιση
+
+spread_none.title=Îα μην γίνει σÏνδεση επεκτάσεων σελίδων
+spread_none_label=ΧωÏίς επεκτάσεις
+spread_odd.title=ΣÏνδεση επεκτάσεων σελίδων ξεκινώντας από τις μονÎÏ‚ σελίδες
+spread_odd_label=ΜονÎÏ‚ επεκτάσεις
+spread_even.title=ΣÏνδεση επεκτάσεων σελίδων ξεκινώντας από τις ζυγÎÏ‚ σελίδες
+spread_even_label=ΖυγÎÏ‚ επεκτάσεις
+
+# Document properties dialog box
+document_properties.title=Ιδιότητες εγγÏάφου…
+document_properties_label=Ιδιότητες εγγÏάφου…
+document_properties_file_name=Όνομα αÏχείου:
+document_properties_file_size=ΜÎγεθος αÏχείου:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Τίτλος:
+document_properties_author=ΣυγγÏαφÎας:
+document_properties_subject=ΘÎμα:
+document_properties_keywords=ΛÎξεις κλειδιά:
+document_properties_creation_date=ΗμεÏομηνία δημιουÏγίας:
+document_properties_modification_date=ΗμεÏομηνία Ï„Ïοποποίησης:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=ΔημιουÏγός:
+document_properties_producer=ΠαÏαγωγός PDF:
+document_properties_version=Έκδοση PDF:
+document_properties_page_count=ΑÏιθμός σελίδων:
+document_properties_page_size=ΜÎγεθος σελίδας:
+document_properties_page_size_unit_inches=ίντσες
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=κατακόÏυφα
+document_properties_page_size_orientation_landscape=οÏιζόντια
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Επιστολή
+document_properties_page_size_name_legal=ΤÏπου Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Ταχεία Ï€Ïοβολή ιστοÏ:
+document_properties_linearized_yes=Îαι
+document_properties_linearized_no=Όχι
+document_properties_close=Κλείσιμο
+
+print_progress_message=Î Ïοετοιμασία του εγγÏάφου για εκτÏπωση…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ΑκÏÏωση
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=(Απ)ενεÏγοποίηση πλευÏικής στήλης
+toggle_sidebar_notification.title=(Απ)ενεÏγοποίηση πλευÏικής στήλης (το ÎγγÏαφο πεÏιÎχει πεÏίγÏαμμα/συνημμÎνα)
+toggle_sidebar_notification2.title=(Απ)ενεÏγοποίηση πλευÏικής στήλης (το ÎγγÏαφο πεÏιÎχει πεÏίγÏαμμα/συνημμÎνα/επίπεδα)
+toggle_sidebar_label=(Απ)ενεÏγοποίηση πλευÏικής στήλης
+document_outline.title=Εμφάνιση διάÏθÏωσης εγγÏάφου (διπλό κλικ για ανάπτυξη/σÏμπτυξη όλων των στοιχείων)
+document_outline_label=ΔιάÏθÏωση εγγÏάφου
+attachments.title=Î Ïοβολή συνημμÎνων
+attachments_label=ΣυνημμÎνα
+layers.title=Εμφάνιση επιπÎδων (διπλό κλικ για επαναφοÏά όλων των επιπÎδων στην Ï€ÏοεπιλεγμÎνη κατάσταση)
+layers_label=Επίπεδα
+thumbs.title=Î Ïοβολή μικÏογÏαφιών
+thumbs_label=ΜικÏογÏαφίες
+current_outline_item.title=ΕÏÏεση Ï„ÏÎχοντος στοιχείου διάÏθÏωσης
+current_outline_item_label=ΤÏÎχον στοιχείο διάÏθÏωσης
+findbar.title=ΕÏÏεση στο ÎγγÏαφο
+findbar_label=ΕÏÏεση
+
+additional_layers=ΕπιπÏόσθετα επίπεδα
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Σελίδα {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Σελίδα {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=ΜικÏογÏαφία της σελίδας {{page}}
+
+# Find panel button title and messages
+find_input.title=ΕÏÏεση
+find_input.placeholder=ΕÏÏεση στο ÎγγÏαφο…
+find_previous.title=ΕÏÏεση της Ï€ÏοηγοÏμενης εμφάνισης της φÏάσης
+find_previous_label=Î ÏοηγοÏμενο
+find_next.title=ΕÏÏεση της επόμενης εμφάνισης της φÏάσης
+find_next_label=Επόμενο
+find_highlight=Επισήμανση όλων
+find_match_case_label=ΤαίÏιασμα χαÏακτήÏα
+find_entire_word_label=ΟλόκληÏες λÎξεις
+find_reached_top=Έλευση στην αÏχή του εγγÏάφου, συνÎχεια από το Ï„Îλος
+find_reached_bottom=Έλευση στο Ï„Îλος του εγγÏάφου, συνÎχεια από την αÏχή
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} από {{total}} αντιστοιχία
+find_match_count[two]={{current}} από {{total}} αντιστοιχίες
+find_match_count[few]={{current}} από {{total}} αντιστοιχίες
+find_match_count[many]={{current}} από {{total}} αντιστοιχίες
+find_match_count[other]={{current}} από {{total}} αντιστοιχίες
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=ΠεÏισσότεÏες από {{limit}} αντιστοιχίες
+find_match_count_limit[one]=ΠεÏισσότεÏες από {{limit}} αντιστοιχία
+find_match_count_limit[two]=ΠεÏισσότεÏες από {{limit}} αντιστοιχίες
+find_match_count_limit[few]=ΠεÏισσότεÏες από {{limit}} αντιστοιχίες
+find_match_count_limit[many]=ΠεÏισσότεÏες από {{limit}} αντιστοιχίες
+find_match_count_limit[other]=ΠεÏισσότεÏες από {{limit}} αντιστοιχίες
+find_not_found=Η φÏάση δεν βÏÎθηκε
+
+# Error panel labels
+error_more_info=ΠεÏισσότεÏες πληÏοφοÏίες
+error_less_info=ΛιγότεÏες πληÏοφοÏίες
+error_close=Κλείσιμο
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Μήνυμα: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Στοίβα: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ΑÏχείο: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=ΓÏαμμή: {{line}}
+rendering_error=Î ÏοÎκυψε σφάλμα κατά την ανάλυση της σελίδας.
+
+# Predefined zoom values
+page_scale_width=Πλάτος σελίδας
+page_scale_fit=ΜÎγεθος σελίδας
+page_scale_auto=Αυτόματο ζουμ
+page_scale_actual=Î Ïαγματικό μÎγεθος
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Σφάλμα
+loading_error=Î ÏοÎκυψε Îνα σφάλμα κατά τη φόÏτωση του PDF.
+invalid_file_error=Μη ÎγκυÏο ή κατεστÏαμμÎνο αÏχείο PDF.
+missing_file_error=Λείπει αÏχείο PDF.
+unexpected_response_error=Μη αναμενόμενη απόκÏιση από το διακομιστή.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Σχόλιο]
+password_label=Εισαγωγή ÎºÏ‰Î´Î¹ÎºÎ¿Ï Î³Î¹Î± το άνοιγμα του PDF αÏχείου.
+password_invalid=Μη ÎγκυÏος κωδικός. Î Ïοσπαθείστε ξανά.
+password_ok=OK
+password_cancel=ΑκÏÏωση
+
+printing_not_supported=Î Ïοειδοποίηση: Η εκτÏπωση δεν υποστηÏίζεται πλήÏως από αυτόν τον πεÏιηγητή.
+printing_not_ready=Î Ïοειδοποίηση: Το PDF δεν φοÏτώθηκε πλήÏως για εκτÏπωση.
+web_fonts_disabled=Οι γÏαμματοσειÏÎÏ‚ Web απενεÏγοποιημÎνες: αδυναμία χÏήσης των ενσωματωμÎνων γÏαμματοσειÏών PDF.
diff --git a/thirdparty/pdfjs/web/locale/en-CA/viewer.properties b/thirdparty/pdfjs/web/locale/en-CA/viewer.properties
new file mode 100644
index 0000000..3e0906d
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/en-CA/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Previous Page
+previous_label=Previous
+next.title=Next Page
+next_label=Next
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Page
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=of {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Zoom Out
+zoom_out_label=Zoom Out
+zoom_in.title=Zoom In
+zoom_in_label=Zoom In
+zoom.title=Zoom
+presentation_mode.title=Switch to Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Open File
+open_file_label=Open
+print.title=Print
+print_label=Print
+download.title=Download
+download_label=Download
+bookmark.title=Current view (copy or open in new window)
+bookmark_label=Current View
+
+# Secondary toolbar and context menu
+tools.title=Tools
+tools_label=Tools
+first_page.title=Go to First Page
+first_page.label=Go to First Page
+first_page_label=Go to First Page
+last_page.title=Go to Last Page
+last_page.label=Go to Last Page
+last_page_label=Go to Last Page
+page_rotate_cw.title=Rotate Clockwise
+page_rotate_cw.label=Rotate Clockwise
+page_rotate_cw_label=Rotate Clockwise
+page_rotate_ccw.title=Rotate Anti-Clockwise
+page_rotate_ccw.label=Rotate Anti-Clockwise
+page_rotate_ccw_label=Rotate Anti-Clockwise
+
+cursor_text_select_tool.title=Enable Text Selection Tool
+cursor_text_select_tool_label=Text Selection Tool
+cursor_hand_tool.title=Enable Hand Tool
+cursor_hand_tool_label=Hand Tool
+
+scroll_vertical.title=Use Vertical Scrolling
+scroll_vertical_label=Vertical Scrolling
+scroll_horizontal.title=Use Horizontal Scrolling
+scroll_horizontal_label=Horizontal Scrolling
+scroll_wrapped.title=Use Wrapped Scrolling
+scroll_wrapped_label=Wrapped Scrolling
+
+spread_none.title=Do not join page spreads
+spread_none_label=No Spreads
+spread_odd.title=Join page spreads starting with odd-numbered pages
+spread_odd_label=Odd Spreads
+spread_even.title=Join page spreads starting with even-numbered pages
+spread_even_label=Even Spreads
+
+# Document properties dialog box
+document_properties.title=Document Properties…
+document_properties_label=Document Properties…
+document_properties_file_name=File name:
+document_properties_file_size=File size:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Title:
+document_properties_author=Author:
+document_properties_subject=Subject:
+document_properties_keywords=Keywords:
+document_properties_creation_date=Creation Date:
+document_properties_modification_date=Modification Date:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creator:
+document_properties_producer=PDF Producer:
+document_properties_version=PDF Version:
+document_properties_page_count=Page Count:
+document_properties_page_size=Page Size:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portrait
+document_properties_page_size_orientation_landscape=landscape
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Yes
+document_properties_linearized_no=No
+document_properties_close=Close
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancel
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toggle Sidebar
+toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
+toggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers)
+toggle_sidebar_label=Toggle Sidebar
+document_outline.title=Show Document Outline (double-click to expand/collapse all items)
+document_outline_label=Document Outline
+attachments.title=Show Attachments
+attachments_label=Attachments
+layers.title=Show Layers (double-click to reset all layers to the default state)
+layers_label=Layers
+thumbs.title=Show Thumbnails
+thumbs_label=Thumbnails
+findbar.title=Find in Document
+findbar_label=Find
+
+additional_layers=Additional Layers
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Page {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Page {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail of Page {{page}}
+
+# Find panel button title and messages
+find_input.title=Find
+find_input.placeholder=Find in document…
+find_previous.title=Find the previous occurrence of the phrase
+find_previous_label=Previous
+find_next.title=Find the next occurrence of the phrase
+find_next_label=Next
+find_highlight=Highlight all
+find_match_case_label=Match case
+find_entire_word_label=Whole words
+find_reached_top=Reached top of document, continued from bottom
+find_reached_bottom=Reached end of document, continued from top
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} of {{total}} match
+find_match_count[two]={{current}} of {{total}} matches
+find_match_count[few]={{current}} of {{total}} matches
+find_match_count[many]={{current}} of {{total}} matches
+find_match_count[other]={{current}} of {{total}} matches
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=More than {{limit}} matches
+find_match_count_limit[one]=More than {{limit}} match
+find_match_count_limit[two]=More than {{limit}} matches
+find_match_count_limit[few]=More than {{limit}} matches
+find_match_count_limit[many]=More than {{limit}} matches
+find_match_count_limit[other]=More than {{limit}} matches
+find_not_found=Phrase not found
+
+# Error panel labels
+error_more_info=More Information
+error_less_info=Less Information
+error_close=Close
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Line: {{line}}
+rendering_error=An error occurred while rendering the page.
+
+# Predefined zoom values
+page_scale_width=Page Width
+page_scale_fit=Page Fit
+page_scale_auto=Automatic Zoom
+page_scale_actual=Actual Size
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=An error occurred while loading the PDF.
+invalid_file_error=Invalid or corrupted PDF file.
+missing_file_error=Missing PDF file.
+unexpected_response_error=Unexpected server response.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Enter the password to open this PDF file.
+password_invalid=Invalid password. Please try again.
+password_ok=OK
+password_cancel=Cancel
+
+printing_not_supported=Warning: Printing is not fully supported by this browser.
+printing_not_ready=Warning: The PDF is not fully loaded for printing.
+web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
diff --git a/thirdparty/pdfjs/web/locale/en-GB/viewer.properties b/thirdparty/pdfjs/web/locale/en-GB/viewer.properties
new file mode 100644
index 0000000..7b2c7cd
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/en-GB/viewer.properties
@@ -0,0 +1,253 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Previous Page
+previous_label=Previous
+next.title=Next Page
+next_label=Next
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Page
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=of {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Zoom Out
+zoom_out_label=Zoom Out
+zoom_in.title=Zoom In
+zoom_in_label=Zoom In
+zoom.title=Zoom
+presentation_mode.title=Switch to Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Open File
+open_file_label=Open
+print.title=Print
+print_label=Print
+download.title=Download
+download_label=Download
+bookmark.title=Current view (copy or open in new window)
+bookmark_label=Current View
+
+# Secondary toolbar and context menu
+tools.title=Tools
+tools_label=Tools
+first_page.title=Go to First Page
+first_page.label=Go to First Page
+first_page_label=Go to First Page
+last_page.title=Go to Last Page
+last_page.label=Go to Last Page
+last_page_label=Go to Last Page
+page_rotate_cw.title=Rotate Clockwise
+page_rotate_cw.label=Rotate Clockwise
+page_rotate_cw_label=Rotate Clockwise
+page_rotate_ccw.title=Rotate Anti-Clockwise
+page_rotate_ccw.label=Rotate Anti-Clockwise
+page_rotate_ccw_label=Rotate Anti-Clockwise
+
+cursor_text_select_tool.title=Enable Text Selection Tool
+cursor_text_select_tool_label=Text Selection Tool
+cursor_hand_tool.title=Enable Hand Tool
+cursor_hand_tool_label=Hand Tool
+
+scroll_vertical.title=Use Vertical Scrolling
+scroll_vertical_label=Vertical Scrolling
+scroll_horizontal.title=Use Horizontal Scrolling
+scroll_horizontal_label=Horizontal Scrolling
+scroll_wrapped.title=Use Wrapped Scrolling
+scroll_wrapped_label=Wrapped Scrolling
+
+spread_none.title=Do not join page spreads
+spread_none_label=No Spreads
+spread_odd.title=Join page spreads starting with odd-numbered pages
+spread_odd_label=Odd Spreads
+spread_even.title=Join page spreads starting with even-numbered pages
+spread_even_label=Even Spreads
+
+# Document properties dialog box
+document_properties.title=Document Properties…
+document_properties_label=Document Properties…
+document_properties_file_name=File name:
+document_properties_file_size=File size:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Title:
+document_properties_author=Author:
+document_properties_subject=Subject:
+document_properties_keywords=Keywords:
+document_properties_creation_date=Creation Date:
+document_properties_modification_date=Modification Date:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creator:
+document_properties_producer=PDF Producer:
+document_properties_version=PDF Version:
+document_properties_page_count=Page Count:
+document_properties_page_size=Page Size:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portrait
+document_properties_page_size_orientation_landscape=landscape
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Yes
+document_properties_linearized_no=No
+document_properties_close=Close
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancel
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toggle Sidebar
+toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
+toggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers)
+toggle_sidebar_label=Toggle Sidebar
+document_outline.title=Show Document Outline (double-click to expand/collapse all items)
+document_outline_label=Document Outline
+attachments.title=Show Attachments
+attachments_label=Attachments
+layers.title=Show Layers (double-click to reset all layers to the default state)
+layers_label=Layers
+thumbs.title=Show Thumbnails
+thumbs_label=Thumbnails
+current_outline_item.title=Find Current Outline Item
+current_outline_item_label=Current Outline Item
+findbar.title=Find in Document
+findbar_label=Find
+
+additional_layers=Additional Layers
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Page {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Page {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail of Page {{page}}
+
+# Find panel button title and messages
+find_input.title=Find
+find_input.placeholder=Find in document…
+find_previous.title=Find the previous occurrence of the phrase
+find_previous_label=Previous
+find_next.title=Find the next occurrence of the phrase
+find_next_label=Next
+find_highlight=Highlight all
+find_match_case_label=Match case
+find_entire_word_label=Whole words
+find_reached_top=Reached top of document, continued from bottom
+find_reached_bottom=Reached end of document, continued from top
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} of {{total}} match
+find_match_count[two]={{current}} of {{total}} matches
+find_match_count[few]={{current}} of {{total}} matches
+find_match_count[many]={{current}} of {{total}} matches
+find_match_count[other]={{current}} of {{total}} matches
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=More than {{limit}} matches
+find_match_count_limit[one]=More than {{limit}} match
+find_match_count_limit[two]=More than {{limit}} matches
+find_match_count_limit[few]=More than {{limit}} matches
+find_match_count_limit[many]=More than {{limit}} matches
+find_match_count_limit[other]=More than {{limit}} matches
+find_not_found=Phrase not found
+
+# Error panel labels
+error_more_info=More Information
+error_less_info=Less Information
+error_close=Close
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Line: {{line}}
+rendering_error=An error occurred while rendering the page.
+
+# Predefined zoom values
+page_scale_width=Page Width
+page_scale_fit=Page Fit
+page_scale_auto=Automatic Zoom
+page_scale_actual=Actual Size
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=An error occurred while loading the PDF.
+invalid_file_error=Invalid or corrupted PDF file.
+missing_file_error=Missing PDF file.
+unexpected_response_error=Unexpected server response.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Enter the password to open this PDF file.
+password_invalid=Invalid password. Please try again.
+password_ok=OK
+password_cancel=Cancel
+
+printing_not_supported=Warning: Printing is not fully supported by this browser.
+printing_not_ready=Warning: The PDF is not fully loaded for printing.
+web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
diff --git a/thirdparty/pdfjs/web/locale/en-US/viewer.properties b/thirdparty/pdfjs/web/locale/en-US/viewer.properties
new file mode 100644
index 0000000..5d1429f
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/en-US/viewer.properties
@@ -0,0 +1,252 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Previous Page
+previous_label=Previous
+next.title=Next Page
+next_label=Next
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Page
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=of {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Zoom Out
+zoom_out_label=Zoom Out
+zoom_in.title=Zoom In
+zoom_in_label=Zoom In
+zoom.title=Zoom
+presentation_mode.title=Switch to Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Open File
+open_file_label=Open
+print.title=Print
+print_label=Print
+download.title=Download
+download_label=Download
+bookmark.title=Current view (copy or open in new window)
+bookmark_label=Current View
+
+# Secondary toolbar and context menu
+tools.title=Tools
+tools_label=Tools
+first_page.title=Go to First Page
+first_page.label=Go to First Page
+first_page_label=Go to First Page
+last_page.title=Go to Last Page
+last_page.label=Go to Last Page
+last_page_label=Go to Last Page
+page_rotate_cw.title=Rotate Clockwise
+page_rotate_cw.label=Rotate Clockwise
+page_rotate_cw_label=Rotate Clockwise
+page_rotate_ccw.title=Rotate Counterclockwise
+page_rotate_ccw.label=Rotate Counterclockwise
+page_rotate_ccw_label=Rotate Counterclockwise
+
+cursor_text_select_tool.title=Enable Text Selection Tool
+cursor_text_select_tool_label=Text Selection Tool
+cursor_hand_tool.title=Enable Hand Tool
+cursor_hand_tool_label=Hand Tool
+
+scroll_vertical.title=Use Vertical Scrolling
+scroll_vertical_label=Vertical Scrolling
+scroll_horizontal.title=Use Horizontal Scrolling
+scroll_horizontal_label=Horizontal Scrolling
+scroll_wrapped.title=Use Wrapped Scrolling
+scroll_wrapped_label=Wrapped Scrolling
+
+spread_none.title=Do not join page spreads
+spread_none_label=No Spreads
+spread_odd.title=Join page spreads starting with odd-numbered pages
+spread_odd_label=Odd Spreads
+spread_even.title=Join page spreads starting with even-numbered pages
+spread_even_label=Even Spreads
+
+# Document properties dialog box
+document_properties.title=Document Properties…
+document_properties_label=Document Properties…
+document_properties_file_name=File name:
+document_properties_file_size=File size:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Title:
+document_properties_author=Author:
+document_properties_subject=Subject:
+document_properties_keywords=Keywords:
+document_properties_creation_date=Creation Date:
+document_properties_modification_date=Modification Date:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creator:
+document_properties_producer=PDF Producer:
+document_properties_version=PDF Version:
+document_properties_page_count=Page Count:
+document_properties_page_size=Page Size:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portrait
+document_properties_page_size_orientation_landscape=landscape
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Yes
+document_properties_linearized_no=No
+document_properties_close=Close
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancel
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toggle Sidebar
+toggle_sidebar_notification2.title=Toggle Sidebar (document contains outline/attachments/layers)
+toggle_sidebar_label=Toggle Sidebar
+document_outline.title=Show Document Outline (double-click to expand/collapse all items)
+document_outline_label=Document Outline
+attachments.title=Show Attachments
+attachments_label=Attachments
+layers.title=Show Layers (double-click to reset all layers to the default state)
+layers_label=Layers
+thumbs.title=Show Thumbnails
+thumbs_label=Thumbnails
+current_outline_item.title=Find Current Outline Item
+current_outline_item_label=Current Outline Item
+findbar.title=Find in Document
+findbar_label=Find
+
+additional_layers=Additional Layers
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Page {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Page {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail of Page {{page}}
+
+# Find panel button title and messages
+find_input.title=Find
+find_input.placeholder=Find in document…
+find_previous.title=Find the previous occurrence of the phrase
+find_previous_label=Previous
+find_next.title=Find the next occurrence of the phrase
+find_next_label=Next
+find_highlight=Highlight all
+find_match_case_label=Match case
+find_entire_word_label=Whole words
+find_reached_top=Reached top of document, continued from bottom
+find_reached_bottom=Reached end of document, continued from top
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} of {{total}} match
+find_match_count[two]={{current}} of {{total}} matches
+find_match_count[few]={{current}} of {{total}} matches
+find_match_count[many]={{current}} of {{total}} matches
+find_match_count[other]={{current}} of {{total}} matches
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=More than {{limit}} matches
+find_match_count_limit[one]=More than {{limit}} match
+find_match_count_limit[two]=More than {{limit}} matches
+find_match_count_limit[few]=More than {{limit}} matches
+find_match_count_limit[many]=More than {{limit}} matches
+find_match_count_limit[other]=More than {{limit}} matches
+find_not_found=Phrase not found
+
+# Error panel labels
+error_more_info=More Information
+error_less_info=Less Information
+error_close=Close
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Line: {{line}}
+rendering_error=An error occurred while rendering the page.
+
+# Predefined zoom values
+page_scale_width=Page Width
+page_scale_fit=Page Fit
+page_scale_auto=Automatic Zoom
+page_scale_actual=Actual Size
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=An error occurred while loading the PDF.
+invalid_file_error=Invalid or corrupted PDF file.
+missing_file_error=Missing PDF file.
+unexpected_response_error=Unexpected server response.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Enter the password to open this PDF file.
+password_invalid=Invalid password. Please try again.
+password_ok=OK
+password_cancel=Cancel
+
+printing_not_supported=Warning: Printing is not fully supported by this browser.
+printing_not_ready=Warning: The PDF is not fully loaded for printing.
+web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
diff --git a/thirdparty/pdfjs/web/locale/eo/viewer.properties b/thirdparty/pdfjs/web/locale/eo/viewer.properties
new file mode 100644
index 0000000..6300f08
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/eo/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=AntaÅa paÄo
+previous_label=MalantaÅen
+next.title=Venonta paÄo
+next_label=AntaÅen
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=PaÄo
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=el {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} el {{pagesCount}})
+
+zoom_out.title=Malpligrandigi
+zoom_out_label=Malpligrandigi
+zoom_in.title=Pligrandigi
+zoom_in_label=Pligrandigi
+zoom.title=Pligrandigilo
+presentation_mode.title=Iri al prezenta reÄimo
+presentation_mode_label=Prezenta reÄimo
+open_file.title=Malfermi dosieron
+open_file_label=Malfermi
+print.title=Presi
+print_label=Presi
+download.title=ElÅuti
+download_label=ElÅuti
+bookmark.title=Nuna vido (kopii aÅ malfermi en nova fenestro)
+bookmark_label=Nuna vido
+
+# Secondary toolbar and context menu
+tools.title=Iloj
+tools_label=Iloj
+first_page.title=Iri al la unua paÄo
+first_page.label=Iri al la unua paÄo
+first_page_label=Iri al la unua paÄo
+last_page.title=Iri al la lasta paÄo
+last_page.label=Iri al la lasta paÄo
+last_page_label=Iri al la lasta paÄo
+page_rotate_cw.title=Rotaciigi dekstrume
+page_rotate_cw.label=Rotaciigi dekstrume
+page_rotate_cw_label=Rotaciigi dekstrume
+page_rotate_ccw.title=Rotaciigi maldekstrume
+page_rotate_ccw.label=Rotaciigi maldekstrume
+page_rotate_ccw_label=Rotaciigi maldekstrume
+
+cursor_text_select_tool.title=Aktivigi tekstan elektilon
+cursor_text_select_tool_label=Teksta elektilo
+cursor_hand_tool.title=Aktivigi ilon de mano
+cursor_hand_tool_label=Ilo de mano
+
+scroll_vertical.title=Uzi vertikalan Åovadon
+scroll_vertical_label=Vertikala Åovado
+scroll_horizontal.title=Uzi horizontalan Åovadon
+scroll_horizontal_label=Horizontala Åovado
+scroll_wrapped.title=Uzi ambaÅdirektan Åovadon
+scroll_wrapped_label=AmbaÅdirekta Åovado
+
+spread_none.title=Ne montri paÄojn po du
+spread_none_label=UnupaÄa vido
+spread_odd.title=Kunigi paÄojn komencante per nepara paÄo
+spread_odd_label=Po du paÄoj, neparaj maldekstre
+spread_even.title=Kunigi paÄojn komencante per para paÄo
+spread_even_label=Po du paÄoj, paraj maldekstre
+
+# Document properties dialog box
+document_properties.title=Atributoj de dokumento…
+document_properties_label=Atributoj de dokumento…
+document_properties_file_name=Nomo de dosiero:
+document_properties_file_size=Grando de dosiero:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KO ({{size_b}} oktetoj)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MO ({{size_b}} oktetoj)
+document_properties_title=Titolo:
+document_properties_author=AÅtoro:
+document_properties_subject=Temo:
+document_properties_keywords=Åœlosilvorto:
+document_properties_creation_date=Dato de kreado:
+document_properties_modification_date=Dato de modifo:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Kreinto:
+document_properties_producer=Produktinto de PDF:
+document_properties_version=Versio de PDF:
+document_properties_page_count=Nombro de paÄoj:
+document_properties_page_size=Grando de paÄo:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertikala
+document_properties_page_size_orientation_landscape=horizontala
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letera
+document_properties_page_size_name_legal=Jura
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Rapida tekstaĵa vido:
+document_properties_linearized_yes=Jes
+document_properties_linearized_no=Ne
+document_properties_close=Fermi
+
+print_progress_message=Preparo de dokumento por presi Äin …
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Nuligi
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Montri/kaÅi flankan strion
+toggle_sidebar_notification.title=Montri/kaÅi flankan strion (la dokumento enhavas konturon/aneksaĵojn)
+toggle_sidebar_notification2.title=Montri/kaÅi flankan strion (la dokumento enhavas konturon/kunsendaĵojn/tavolojn)
+toggle_sidebar_label=Montri/kaÅi flankan strion
+document_outline.title=Montri la konturon de dokumento (alklaku duoble por faldi/malfaldi ĉiujn elementojn)
+document_outline_label=Konturo de dokumento
+attachments.title=Montri kunsendaĵojn
+attachments_label=Kunsendaĵojn
+layers.title=Montri tavolojn (duoble alklaku por remeti ĉiujn tavolojn en la norman staton)
+layers_label=Tavoloj
+thumbs.title=Montri miniaturojn
+thumbs_label=Miniaturoj
+findbar.title=Serĉi en dokumento
+findbar_label=Serĉi
+
+additional_layers=Aldonaj tavoloj
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=PaÄo {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=PaÄo {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniaturo de paÄo {{page}}
+
+# Find panel button title and messages
+find_input.title=Serĉi
+find_input.placeholder=Serĉi en dokumento…
+find_previous.title=Serĉi la antaÅan aperon de la frazo
+find_previous_label=MalantaÅen
+find_next.title=Serĉi la venontan aperon de la frazo
+find_next_label=AntaÅen
+find_highlight=Elstarigi ĉiujn
+find_match_case_label=Distingi inter majuskloj kaj minuskloj
+find_entire_word_label=Tutaj vortoj
+find_reached_top=Komenco de la dokumento atingita, daÅrigado ekde la fino
+find_reached_bottom=Fino de la dokumento atingita, daÅrigado ekde la komenco
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} el {{total}} kongruo
+find_match_count[two]={{current}} el {{total}} kongruoj
+find_match_count[few]={{current}} el {{total}} kongruoj
+find_match_count[many]={{current}} el {{total}} kongruoj
+find_match_count[other]={{current}} el {{total}} kongruoj
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Pli ol {{limit}} kongruoj
+find_match_count_limit[one]=Pli ol {{limit}} kongruo
+find_match_count_limit[two]=Pli ol {{limit}} kongruoj
+find_match_count_limit[few]=Pli ol {{limit}} kongruoj
+find_match_count_limit[many]=Pli ol {{limit}} kongruoj
+find_match_count_limit[other]=Pli ol {{limit}} kongruoj
+find_not_found=Frazo ne trovita
+
+# Error panel labels
+error_more_info=Pli da informo
+error_less_info=Malpli da informo
+error_close=Fermi
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=MesaÄo: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stako: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Dosiero: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linio: {{line}}
+rendering_error=Okazis eraro dum la montro de la paÄo.
+
+# Predefined zoom values
+page_scale_width=LarÄo de paÄo
+page_scale_fit=Adapti paÄon
+page_scale_auto=AÅtomata skalo
+page_scale_actual=Reala grando
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Eraro
+loading_error=Okazis eraro dum la Åargado de la PDF dosiero.
+invalid_file_error=Nevalida aÅ difektita PDF dosiero.
+missing_file_error=Mankas dosiero PDF.
+unexpected_response_error=Neatendita respondo de servilo.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Prinoto: {{type}}]
+password_label=Tajpu pasvorton por malfermi tiun ĉi dosieron PDF.
+password_invalid=Nevalida pasvorto. Bonvolu provi denove.
+password_ok=Akcepti
+password_cancel=Nuligi
+
+printing_not_supported=Averto: tiu ĉi retumilo ne plene subtenas presadon.
+printing_not_ready=Averto: la PDF dosiero ne estas plene Åargita por presado.
+web_fonts_disabled=Neaktivaj teksaĵaj tiparoj: ne elbas uzi enmetitajn tiparojn de PDF.
diff --git a/thirdparty/pdfjs/web/locale/es-AR/viewer.properties b/thirdparty/pdfjs/web/locale/es-AR/viewer.properties
new file mode 100644
index 0000000..14f5883
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/es-AR/viewer.properties
@@ -0,0 +1,252 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página anterior
+previous_label=Anterior
+next.title=Página siguiente
+next_label=Siguiente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Página
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=( {{pageNumber}} de {{pagesCount}} )
+
+zoom_out.title=Alejar
+zoom_out_label=Alejar
+zoom_in.title=Acercar
+zoom_in_label=Acercar
+zoom.title=Zoom
+presentation_mode.title=Cambiar a modo presentación
+presentation_mode_label=Modo presentación
+open_file.title=Abrir archivo
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar o abrir en nueva ventana)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Herramientas
+tools_label=Herramientas
+first_page.title=Ir a primera página
+first_page.label=Ir a primera página
+first_page_label=Ir a primera página
+last_page.title=Ir a última página
+last_page.label=Ir a última página
+last_page_label=Ir a última página
+page_rotate_cw.title=Rotar horario
+page_rotate_cw.label=Rotar horario
+page_rotate_cw_label=Rotar horario
+page_rotate_ccw.title=Rotar antihorario
+page_rotate_ccw.label=Rotar antihorario
+page_rotate_ccw_label=Rotar antihorario
+
+cursor_text_select_tool.title=Habilitar herramienta de selección de texto
+cursor_text_select_tool_label=Herramienta de selección de texto
+cursor_hand_tool.title=Habilitar herramienta mano
+cursor_hand_tool_label=Herramienta mano
+
+scroll_vertical.title=Usar desplazamiento vertical
+scroll_vertical_label=Desplazamiento vertical
+scroll_horizontal.title=Usar desplazamiento vertical
+scroll_horizontal_label=Desplazamiento horizontal
+scroll_wrapped.title=Usar desplazamiento encapsulado
+scroll_wrapped_label=Desplazamiento encapsulado
+
+spread_none.title=No unir páginas dobles
+spread_none_label=Sin dobles
+spread_odd.title=Unir páginas dobles comenzando con las impares
+spread_odd_label=Dobles impares
+spread_even.title=Unir páginas dobles comenzando con las pares
+spread_even_label=Dobles pares
+
+# Document properties dialog box
+document_properties.title=Propiedades del documento…
+document_properties_label=Propiedades del documento…
+document_properties_file_name=Nombre de archivo:
+document_properties_file_size=Tamaño de archovo:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=TÃtulo:
+document_properties_author=Autor:
+document_properties_subject=Asunto:
+document_properties_keywords=Palabras clave:
+document_properties_creation_date=Fecha de creación:
+document_properties_modification_date=Fecha de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creador:
+document_properties_producer=PDF Productor:
+document_properties_version=Versión de PDF:
+document_properties_page_count=Cantidad de páginas:
+document_properties_page_size=Tamaño de página:
+document_properties_page_size_unit_inches=en
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=normal
+document_properties_page_size_orientation_landscape=apaisado
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista rápida de la Web:
+document_properties_linearized_yes=SÃ
+document_properties_linearized_no=No
+document_properties_close=Cerrar
+
+print_progress_message=Preparando documento para imprimir…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Alternar barra lateral
+toggle_sidebar_notification.title=Intercambiar barra lateral (el documento contiene esquema/adjuntos)
+toggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas)
+toggle_sidebar_label=Alternar barra lateral
+document_outline.title=Mostrar esquema del documento (doble clic para expandir/colapsar todos los Ãtems)
+document_outline_label=Esquema del documento
+attachments.title=Mostrar adjuntos
+attachments_label=Adjuntos
+layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)
+layers_label=Capas
+thumbs.title=Mostrar miniaturas
+thumbs_label=Miniaturas
+current_outline_item.title=Buscar elemento de esquema actual
+findbar.title=Buscar en documento
+findbar_label=Buscar
+
+additional_layers=Capas adicionales
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Página {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Página {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura de página {{page}}
+
+# Find panel button title and messages
+find_input.title=Buscar
+find_input.placeholder=Buscar en documento…
+find_previous.title=Buscar la aparición anterior de la frase
+find_previous_label=Anterior
+find_next.title=Buscar la siguiente aparición de la frase
+find_next_label=Siguiente
+find_highlight=Resaltar todo
+find_match_case_label=Coincidir mayúsculas
+find_entire_word_label=Palabras completas
+find_reached_top=Inicio de documento alcanzado, continuando desde abajo
+find_reached_bottom=Fin de documento alcanzando, continuando desde arriba
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidencias
+find_match_count[two]={{current}} de {{total}} coincidencias
+find_match_count[few]={{current}} de {{total}} coincidencias
+find_match_count[many]={{current}} de {{total}} coincidencias
+find_match_count[other]={{current}} de {{total}} coincidencias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Más de {{limit}} coincidencias
+find_match_count_limit[one]=Más de {{limit}} coinciden
+find_match_count_limit[two]=Más de {{limit}} coincidencias
+find_match_count_limit[few]=Más de {{limit}} coincidencias
+find_match_count_limit[many]=Más de {{limit}} coincidencias
+find_match_count_limit[other]=Más de {{limit}} coincidencias
+find_not_found=Frase no encontrada
+
+# Error panel labels
+error_more_info=Más información
+error_less_info=Menos información
+error_close=Cerrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensaje: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Archivo: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=LÃnea: {{line}}
+rendering_error=Ocurrió un error al dibujar la página.
+
+# Predefined zoom values
+page_scale_width=Ancho de página
+page_scale_fit=Ajustar página
+page_scale_auto=Zoom automático
+page_scale_actual=Tamaño real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=Ocurrió un error al cargar el PDF.
+invalid_file_error=Archivo PDF no válido o cocrrupto.
+missing_file_error=Archivo PDF faltante.
+unexpected_response_error=Respuesta del servidor inesperada.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Anotación]
+password_label=Ingrese la contraseña para abrir este archivo PDF
+password_invalid=Contraseña inválida. Intente nuevamente.
+password_ok=Aceptar
+password_cancel=Cancelar
+
+printing_not_supported=Advertencia: La impresión no está totalmente soportada por este navegador.
+printing_not_ready=Advertencia: El PDF no está completamente cargado para impresión.
+web_fonts_disabled=TipografÃa web deshabilitada: no se pueden usar tipos incrustados en PDF.
diff --git a/thirdparty/pdfjs/web/locale/es-CL/viewer.properties b/thirdparty/pdfjs/web/locale/es-CL/viewer.properties
new file mode 100644
index 0000000..eaba35e
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/es-CL/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página anterior
+previous_label=Anterior
+next.title=Página siguiente
+next_label=Siguiente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Página
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Alejar
+zoom_out_label=Alejar
+zoom_in.title=Acercar
+zoom_in_label=Acercar
+zoom.title=Ampliación
+presentation_mode.title=Cambiar al modo de presentación
+presentation_mode_label=Modo de presentación
+open_file.title=Abrir archivo
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar o abrir en nueva ventana)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Herramientas
+tools_label=Herramientas
+first_page.title=Ir a la primera página
+first_page.label=Ir a la primera página
+first_page_label=Ir a la primera página
+last_page.title=Ir a la última página
+last_page.label=Ir a la última página
+last_page_label=Ir a la última página
+page_rotate_cw.title=Girar a la derecha
+page_rotate_cw.label=Girar a la derecha
+page_rotate_cw_label=Girar a la derecha
+page_rotate_ccw.title=Girar a la izquierda
+page_rotate_ccw.label=Girar a la izquierda
+page_rotate_ccw_label=Girar a la izquierda
+
+cursor_text_select_tool.title=Activar la herramienta de selección de texto
+cursor_text_select_tool_label=Herramienta de selección de texto
+cursor_hand_tool.title=Activar la herramienta de mano
+cursor_hand_tool_label=Herramienta de mano
+
+scroll_vertical.title=Usar desplazamiento vertical
+scroll_vertical_label=Desplazamiento vertical
+scroll_horizontal.title=Usar desplazamiento horizontal
+scroll_horizontal_label=Desplazamiento horizontal
+scroll_wrapped.title=Usar desplazamiento en bloque
+scroll_wrapped_label=Desplazamiento en bloque
+
+spread_none.title=No juntar páginas a modo de libro
+spread_none_label=Vista de una página
+spread_odd.title=Junta las páginas partiendo con una de número impar
+spread_odd_label=Vista de libro impar
+spread_even.title=Junta las páginas partiendo con una de número par
+spread_even_label=Vista de libro par
+
+# Document properties dialog box
+document_properties.title=Propiedades del documento…
+document_properties_label=Propiedades del documento…
+document_properties_file_name=Nombre de archivo:
+document_properties_file_size=Tamaño del archivo:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=TÃtulo:
+document_properties_author=Autor:
+document_properties_subject=Asunto:
+document_properties_keywords=Palabras clave:
+document_properties_creation_date=Fecha de creación:
+document_properties_modification_date=Fecha de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creador:
+document_properties_producer=Productor del PDF:
+document_properties_version=Versión de PDF:
+document_properties_page_count=Cantidad de páginas:
+document_properties_page_size=Tamaño de la página:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Oficio
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista rápida en Web:
+document_properties_linearized_yes=SÃ
+document_properties_linearized_no=No
+document_properties_close=Cerrar
+
+print_progress_message=Preparando documento para impresión…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Barra lateral
+toggle_sidebar_notification.title=Cambiar barra lateral (Ãndice de contenidos del documento/adjuntos)
+toggle_sidebar_notification2.title=Cambiar barra lateral (Ãndice de contenidos del documento/adjuntos/capas)
+toggle_sidebar_label=Mostrar u ocultar la barra lateral
+document_outline.title=Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos)
+document_outline_label=Esquema del documento
+attachments.title=Mostrar adjuntos
+attachments_label=Adjuntos
+layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)
+layers_label=Capas
+thumbs.title=Mostrar miniaturas
+thumbs_label=Miniaturas
+findbar.title=Buscar en el documento
+findbar_label=Buscar
+
+additional_layers=Capas adicionales
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Página {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Página {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura de la página {{page}}
+
+# Find panel button title and messages
+find_input.title=Encontrar
+find_input.placeholder=Encontrar en el documento…
+find_previous.title=Buscar la aparición anterior de la frase
+find_previous_label=Previo
+find_next.title=Buscar la siguiente aparición de la frase
+find_next_label=Siguiente
+find_highlight=Destacar todos
+find_match_case_label=Coincidir mayús./minús.
+find_entire_word_label=Palabras completas
+find_reached_top=Se alcanzó el inicio del documento, continuando desde el final
+find_reached_bottom=Se alcanzó el final del documento, continuando desde el inicio
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidencia
+find_match_count[two]={{current}} de {{total}} coincidencias
+find_match_count[few]={{current}} de {{total}} coincidencias
+find_match_count[many]={{current}} de {{total}} coincidencias
+find_match_count[other]={{current}} de {{total}} coincidencias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Más de {{limit}} coincidencias
+find_match_count_limit[one]=Más de {{limit}} coincidencia
+find_match_count_limit[two]=Más de {{limit}} coincidencias
+find_match_count_limit[few]=Más de {{limit}} coincidencias
+find_match_count_limit[many]=Más de {{limit}} coincidencias
+find_match_count_limit[other]=Más de {{limit}} coincidencias
+find_not_found=Frase no encontrada
+
+# Error panel labels
+error_more_info=Más información
+error_less_info=Menos información
+error_close=Cerrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (compilación: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensaje: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Archivo: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=LÃnea: {{line}}
+rendering_error=Ocurrió un error al renderizar la página.
+
+# Predefined zoom values
+page_scale_width=Ancho de página
+page_scale_fit=Ajuste de página
+page_scale_auto=Aumento automático
+page_scale_actual=Tamaño actual
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=Ocurrió un error al cargar el PDF.
+invalid_file_error=Archivo PDF inválido o corrupto.
+missing_file_error=Falta el archivo PDF.
+unexpected_response_error=Respuesta del servidor inesperada.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Anotación]
+password_label=Ingrese la contraseña para abrir este archivo PDF.
+password_invalid=Contraseña inválida. Por favor, vuelve a intentarlo.
+password_ok=Aceptar
+password_cancel=Cancelar
+
+printing_not_supported=Advertencia: Imprimir no está soportado completamente por este navegador.
+printing_not_ready=Advertencia: El PDF no está completamente cargado para ser impreso.
+web_fonts_disabled=Las tipografÃas web están desactivadas: imposible usar las fuentes PDF embebidas.
diff --git a/thirdparty/pdfjs/web/locale/es-ES/viewer.properties b/thirdparty/pdfjs/web/locale/es-ES/viewer.properties
new file mode 100644
index 0000000..806f4f5
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/es-ES/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página anterior
+previous_label=Anterior
+next.title=Página siguiente
+next_label=Siguiente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Página
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Reducir
+zoom_out_label=Reducir
+zoom_in.title=Aumentar
+zoom_in_label=Aumentar
+zoom.title=Tamaño
+presentation_mode.title=Cambiar al modo presentación
+presentation_mode_label=Modo presentación
+open_file.title=Abrir archivo
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar o abrir en una nueva ventana)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Herramientas
+tools_label=Herramientas
+first_page.title=Ir a la primera página
+first_page.label=Ir a la primera página
+first_page_label=Ir a la primera página
+last_page.title=Ir a la última página
+last_page.label=Ir a la última página
+last_page_label=Ir a la última página
+page_rotate_cw.title=Rotar en sentido horario
+page_rotate_cw.label=Rotar en sentido horario
+page_rotate_cw_label=Rotar en sentido horario
+page_rotate_ccw.title=Rotar en sentido antihorario
+page_rotate_ccw.label=Rotar en sentido antihorario
+page_rotate_ccw_label=Rotar en sentido antihorario
+
+cursor_text_select_tool.title=Activar herramienta de selección de texto
+cursor_text_select_tool_label=Herramienta de selección de texto
+cursor_hand_tool.title=Activar herramienta de mano
+cursor_hand_tool_label=Herramienta de mano
+
+scroll_vertical.title=Usar desplazamiento vertical
+scroll_vertical_label=Desplazamiento vertical
+scroll_horizontal.title=Usar desplazamiento horizontal
+scroll_horizontal_label=Desplazamiento horizontal
+scroll_wrapped.title=Usar desplazamiento en bloque
+scroll_wrapped_label=Desplazamiento en bloque
+
+spread_none.title=No juntar páginas en vista de libro
+spread_none_label=Vista de libro
+spread_odd.title=Juntar las páginas partiendo de una con número impar
+spread_odd_label=Vista de libro impar
+spread_even.title=Juntar las páginas partiendo de una con número par
+spread_even_label=Vista de libro par
+
+# Document properties dialog box
+document_properties.title=Propiedades del documento…
+document_properties_label=Propiedades del documento…
+document_properties_file_name=Nombre de archivo:
+document_properties_file_size=Tamaño de archivo:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=TÃtulo:
+document_properties_author=Autor:
+document_properties_subject=Asunto:
+document_properties_keywords=Palabras clave:
+document_properties_creation_date=Fecha de creación:
+document_properties_modification_date=Fecha de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creador:
+document_properties_producer=Productor PDF:
+document_properties_version=Versión PDF:
+document_properties_page_count=Número de páginas:
+document_properties_page_size=Tamaño de la página:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista rápida de la web:
+document_properties_linearized_yes=SÃ
+document_properties_linearized_no=No
+document_properties_close=Cerrar
+
+print_progress_message=Preparando documento para impresión…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Cambiar barra lateral
+toggle_sidebar_notification.title=Alternar panel lateral (el documento contiene un esquema o adjuntos)
+toggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas)
+toggle_sidebar_label=Cambiar barra lateral
+document_outline.title=Mostrar resumen del documento (doble clic para expandir/contraer todos los elementos)
+document_outline_label=Resumen de documento
+attachments.title=Mostrar adjuntos
+attachments_label=Adjuntos
+layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)
+layers_label=Capas
+thumbs.title=Mostrar miniaturas
+thumbs_label=Miniaturas
+findbar.title=Buscar en el documento
+findbar_label=Buscar
+
+additional_layers=Capas adicionales
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Página {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Página {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura de la página {{page}}
+
+# Find panel button title and messages
+find_input.title=Buscar
+find_input.placeholder=Buscar en el documento…
+find_previous.title=Encontrar la anterior aparición de la frase
+find_previous_label=Anterior
+find_next.title=Encontrar la siguiente aparición de esta frase
+find_next_label=Siguiente
+find_highlight=Resaltar todos
+find_match_case_label=Coincidencia de mayús./minús.
+find_entire_word_label=Palabras completas
+find_reached_top=Se alcanzó el inicio del documento, se continúa desde el final
+find_reached_bottom=Se alcanzó el final del documento, se continúa desde el inicio
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidencia
+find_match_count[two]={{current}} de {{total}} coincidencias
+find_match_count[few]={{current}} de {{total}} coincidencias
+find_match_count[many]={{current}} de {{total}} coincidencias
+find_match_count[other]={{current}} de {{total}} coincidencias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Más de {{limit}} coincidencias
+find_match_count_limit[one]=Más de {{limit}} coincidencia
+find_match_count_limit[two]=Más de {{limit}} coincidencias
+find_match_count_limit[few]=Más de {{limit}} coincidencias
+find_match_count_limit[many]=Más de {{limit}} coincidencias
+find_match_count_limit[other]=Más de {{limit}} coincidencias
+find_not_found=Frase no encontrada
+
+# Error panel labels
+error_more_info=Más información
+error_less_info=Menos información
+error_close=Cerrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensaje: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Archivo: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=LÃnea: {{line}}
+rendering_error=Ocurrió un error al renderizar la página.
+
+# Predefined zoom values
+page_scale_width=Anchura de la página
+page_scale_fit=Ajuste de la página
+page_scale_auto=Tamaño automático
+page_scale_actual=Tamaño real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=Ocurrió un error al cargar el PDF.
+invalid_file_error=Fichero PDF no válido o corrupto.
+missing_file_error=No hay fichero PDF.
+unexpected_response_error=Respuesta inesperada del servidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotación {{type}}]
+password_label=Introduzca la contraseña para abrir este archivo PDF.
+password_invalid=Contraseña no válida. Vuelva a intentarlo.
+password_ok=Aceptar
+password_cancel=Cancelar
+
+printing_not_supported=Advertencia: Imprimir no está totalmente soportado por este navegador.
+printing_not_ready=Advertencia: Este PDF no se ha cargado completamente para poder imprimirse.
+web_fonts_disabled=Las tipografÃas web están desactivadas: es imposible usar las tipografÃas PDF embebidas.
diff --git a/thirdparty/pdfjs/web/locale/es-MX/viewer.properties b/thirdparty/pdfjs/web/locale/es-MX/viewer.properties
new file mode 100644
index 0000000..c39823d
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/es-MX/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página anterior
+previous_label=Anterior
+next.title=Página siguiente
+next_label=Siguiente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Página
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Reducir
+zoom_out_label=Reducir
+zoom_in.title=Aumentar
+zoom_in_label=Aumentar
+zoom.title=Zoom
+presentation_mode.title=Cambiar al modo presentación
+presentation_mode_label=Modo presentación
+open_file.title=Abrir archivo
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar o abrir en una nueva ventana)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Herramientas
+tools_label=Herramientas
+first_page.title=Ir a la primera página
+first_page.label=Ir a la primera página
+first_page_label=Ir a la primera página
+last_page.title=Ir a la última página
+last_page.label=Ir a la última página
+last_page_label=Ir a la última página
+page_rotate_cw.title=Girar a la derecha
+page_rotate_cw.label=Girar a la derecha
+page_rotate_cw_label=Girar a la derecha
+page_rotate_ccw.title=Girar a la izquierda
+page_rotate_ccw.label=Girar a la izquierda
+page_rotate_ccw_label=Girar a la izquierda
+
+cursor_text_select_tool.title=Activar la herramienta de selección de texto
+cursor_text_select_tool_label=Herramienta de selección de texto
+cursor_hand_tool.title=Activar la herramienta de mano
+cursor_hand_tool_label=Herramienta de mano
+
+scroll_vertical.title=Usar desplazamiento vertical
+scroll_vertical_label=Desplazamiento vertical
+scroll_horizontal.title=Usar desplazamiento horizontal
+scroll_horizontal_label=Desplazamiento horizontal
+scroll_wrapped.title=Usar desplazamiento encapsulado
+scroll_wrapped_label=Desplazamiento encapsulado
+
+spread_none.title=No unir páginas separadas
+spread_none_label=Vista de una página
+spread_odd.title=Unir las páginas partiendo con una de número impar
+spread_odd_label=Vista de libro impar
+spread_even.title=Juntar las páginas partiendo con una de número par
+spread_even_label=Vista de libro par
+
+# Document properties dialog box
+document_properties.title=Propiedades del documento…
+document_properties_label=Propiedades del documento…
+document_properties_file_name=Nombre del archivo:
+document_properties_file_size=Tamaño del archivo:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=TÃtulo:
+document_properties_author=Autor:
+document_properties_subject=Asunto:
+document_properties_keywords=Palabras claves:
+document_properties_creation_date=Fecha de creación:
+document_properties_modification_date=Fecha de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creador:
+document_properties_producer=Productor PDF:
+document_properties_version=Versión PDF:
+document_properties_page_count=Número de páginas:
+document_properties_page_size=Tamaño de la página:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Oficio
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista rápida de la web:
+document_properties_linearized_yes=SÃ
+document_properties_linearized_no=No
+document_properties_close=Cerrar
+
+print_progress_message=Preparando documento para impresión…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Cambiar barra lateral
+toggle_sidebar_notification.title=Cambiar barra lateral (Ãndice de contenidos del documento/adjuntos)
+toggle_sidebar_notification2.title=Alternar barra lateral (el documento contiene esquemas/adjuntos/capas)
+toggle_sidebar_label=Cambiar barra lateral
+document_outline.title=Mostrar esquema del documento (doble clic para expandir/contraer todos los elementos)
+document_outline_label=Esquema del documento
+attachments.title=Mostrar adjuntos
+attachments_label=Adjuntos
+layers.title=Mostrar capas (doble clic para restablecer todas las capas al estado predeterminado)
+layers_label=Capas
+thumbs.title=Mostrar miniaturas
+thumbs_label=Miniaturas
+findbar.title=Buscar en el documento
+findbar_label=Buscar
+
+additional_layers=Capas adicionales
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Página {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Página {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura de la página {{page}}
+
+# Find panel button title and messages
+find_input.title=Buscar
+find_input.placeholder=Buscar en el documento…
+find_previous.title=Ir a la anterior frase encontrada
+find_previous_label=Anterior
+find_next.title=Ir a la siguiente frase encontrada
+find_next_label=Siguiente
+find_highlight=Resaltar todo
+find_match_case_label=Coincidir con mayúsculas y minúsculas
+find_entire_word_label=Palabras completas
+find_reached_top=Se alcanzó el inicio del documento, se buscará al final
+find_reached_bottom=Se alcanzó el final del documento, se buscará al inicio
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidencia
+find_match_count[two]={{current}} de {{total}} coincidencias
+find_match_count[few]={{current}} de {{total}} coincidencias
+find_match_count[many]={{current}} de {{total}} coincidencias
+find_match_count[other]={{current}} de {{total}} coincidencias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Más de {{limit}} coincidencias
+find_match_count_limit[one]=Más de {{limit}} coinciden
+find_match_count_limit[two]=Más de {{limit}} coincidencias
+find_match_count_limit[few]=Más de {{limit}} coincidencias
+find_match_count_limit[many]=Más de {{limit}} coincidencias
+find_match_count_limit[other]=Más de {{limit}} coincidencias
+find_not_found=No se encontró la frase
+
+# Error panel labels
+error_more_info=Más información
+error_less_info=Menos información
+error_close=Cerrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensaje: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Archivo: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=LÃnea: {{line}}
+rendering_error=Un error ocurrió al renderizar la página.
+
+# Predefined zoom values
+page_scale_width=Ancho de página
+page_scale_fit=Ajustar página
+page_scale_auto=Zoom automático
+page_scale_actual=Tamaño real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=Un error ocurrió al cargar el PDF.
+invalid_file_error=Archivo PDF invalido o dañado.
+missing_file_error=Archivo PDF no encontrado.
+unexpected_response_error=Respuesta inesperada del servidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} anotación]
+password_label=Ingresa la contraseña para abrir este archivo PDF.
+password_invalid=Contraseña inválida. Por favor intenta de nuevo.
+password_ok=Aceptar
+password_cancel=Cancelar
+
+printing_not_supported=Advertencia: La impresión no esta completamente soportada por este navegador.
+printing_not_ready=Advertencia: El PDF no cargo completamente para impresión.
+web_fonts_disabled=Las fuentes web están desactivadas: es imposible usar las fuentes PDF embebidas.
diff --git a/thirdparty/pdfjs/web/locale/et/viewer.properties b/thirdparty/pdfjs/web/locale/et/viewer.properties
new file mode 100644
index 0000000..97f2c9b
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/et/viewer.properties
@@ -0,0 +1,245 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Eelmine lehekülg
+previous_label=Eelmine
+next.title=Järgmine lehekülg
+next_label=Järgmine
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Leht
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}}/{{pagesCount}})
+
+zoom_out.title=Vähenda
+zoom_out_label=Vähenda
+zoom_in.title=Suurenda
+zoom_in_label=Suurenda
+zoom.title=Suurendamine
+presentation_mode.title=Lülitu esitlusrežiimi
+presentation_mode_label=Esitlusrežiim
+open_file.title=Ava fail
+open_file_label=Ava
+print.title=Prindi
+print_label=Prindi
+download.title=Laadi alla
+download_label=Laadi alla
+bookmark.title=Praegune vaade (kopeeri või ava uues aknas)
+bookmark_label=Praegune vaade
+
+# Secondary toolbar and context menu
+tools.title=Tööriistad
+tools_label=Tööriistad
+first_page.title=Mine esimesele leheküljele
+first_page.label=Mine esimesele leheküljele
+first_page_label=Mine esimesele leheküljele
+last_page.title=Mine viimasele leheküljele
+last_page.label=Mine viimasele leheküljele
+last_page_label=Mine viimasele leheküljele
+page_rotate_cw.title=Pööra päripäeva
+page_rotate_cw.label=Pööra päripäeva
+page_rotate_cw_label=Pööra päripäeva
+page_rotate_ccw.title=Pööra vastupäeva
+page_rotate_ccw.label=Pööra vastupäeva
+page_rotate_ccw_label=Pööra vastupäeva
+
+cursor_text_select_tool.title=Luba teksti valimise tööriist
+cursor_text_select_tool_label=Teksti valimise tööriist
+cursor_hand_tool.title=Luba sirvimistööriist
+cursor_hand_tool_label=Sirvimistööriist
+
+scroll_vertical.title=Kasuta vertikaalset kerimist
+scroll_vertical_label=Vertikaalne kerimine
+scroll_horizontal.title=Kasuta horisontaalset kerimist
+scroll_horizontal_label=Horisontaalne kerimine
+scroll_wrapped.title=Kasuta rohkem mahutavat kerimist
+scroll_wrapped_label=Rohkem mahutav kerimine
+
+spread_none.title=Ära kõrvuta lehekülgi
+spread_none_label=Lehtede kõrvutamine puudub
+spread_odd.title=Kõrvuta leheküljed, alustades paaritute numbritega lehekülgedega
+spread_odd_label=Kõrvutamine paaritute numbritega alustades
+spread_even.title=Kõrvuta leheküljed, alustades paarisnumbritega lehekülgedega
+spread_even_label=Kõrvutamine paarisnumbritega alustades
+
+# Document properties dialog box
+document_properties.title=Dokumendi omadused…
+document_properties_label=Dokumendi omadused…
+document_properties_file_name=Faili nimi:
+document_properties_file_size=Faili suurus:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KiB ({{size_b}} baiti)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MiB ({{size_b}} baiti)
+document_properties_title=Pealkiri:
+document_properties_author=Autor:
+document_properties_subject=Teema:
+document_properties_keywords=Märksõnad:
+document_properties_creation_date=Loodud:
+document_properties_modification_date=Muudetud:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}} {{time}}
+document_properties_creator=Looja:
+document_properties_producer=Generaator:
+document_properties_version=Generaatori versioon:
+document_properties_page_count=Lehekülgi:
+document_properties_page_size=Lehe suurus:
+document_properties_page_size_unit_inches=tolli
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertikaalpaigutus
+document_properties_page_size_orientation_landscape=rõhtpaigutus
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized="Fast Web View" tugi:
+document_properties_linearized_yes=Jah
+document_properties_linearized_no=Ei
+document_properties_close=Sulge
+
+print_progress_message=Dokumendi ettevalmistamine printimiseks…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Loobu
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Näita külgriba
+toggle_sidebar_notification.title=Näita külgriba (dokument sisaldab sisukorda/manuseid)
+toggle_sidebar_label=Näita külgriba
+document_outline.title=Näita sisukorda (kõigi punktide laiendamiseks/ahendamiseks topeltklõpsa)
+document_outline_label=Näita sisukorda
+attachments.title=Näita manuseid
+attachments_label=Manused
+thumbs.title=Näita pisipilte
+thumbs_label=Pisipildid
+findbar.title=Otsi dokumendist
+findbar_label=Otsi
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}}. lehekülg
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}}. lehekülje pisipilt
+
+# Find panel button title and messages
+find_input.title=Otsi
+find_input.placeholder=Otsi dokumendist…
+find_previous.title=Otsi fraasi eelmine esinemiskoht
+find_previous_label=Eelmine
+find_next.title=Otsi fraasi järgmine esinemiskoht
+find_next_label=Järgmine
+find_highlight=Too kõik esile
+find_match_case_label=Tõstutundlik
+find_entire_word_label=Täissõnad
+find_reached_top=Jõuti dokumendi algusesse, jätkati lõpust
+find_reached_bottom=Jõuti dokumendi lõppu, jätkati algusest
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=vaste {{current}}/{{total}}
+find_match_count[two]=vaste {{current}}/{{total}}
+find_match_count[few]=vaste {{current}}/{{total}}
+find_match_count[many]=vaste {{current}}/{{total}}
+find_match_count[other]=vaste {{current}}/{{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Rohkem kui {{limit}} vastet
+find_match_count_limit[one]=Rohkem kui {{limit}} vaste
+find_match_count_limit[two]=Rohkem kui {{limit}} vastet
+find_match_count_limit[few]=Rohkem kui {{limit}} vastet
+find_match_count_limit[many]=Rohkem kui {{limit}} vastet
+find_match_count_limit[other]=Rohkem kui {{limit}} vastet
+find_not_found=Fraasi ei leitud
+
+# Error panel labels
+error_more_info=Rohkem teavet
+error_less_info=Vähem teavet
+error_close=Sulge
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Teade: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fail: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rida: {{line}}
+rendering_error=Lehe renderdamisel esines viga.
+
+# Predefined zoom values
+page_scale_width=Mahuta laiusele
+page_scale_fit=Mahuta leheküljele
+page_scale_auto=Automaatne suurendamine
+page_scale_actual=Tegelik suurus
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Viga
+loading_error=PDFi laadimisel esines viga.
+invalid_file_error=Vigane või rikutud PDF-fail.
+missing_file_error=PDF-fail puudub.
+unexpected_response_error=Ootamatu vastus serverilt.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=PDF-faili avamiseks sisesta parool.
+password_invalid=Vigane parool. Palun proovi uuesti.
+password_ok=Sobib
+password_cancel=Loobu
+
+printing_not_supported=Hoiatus: printimine pole selle brauseri poolt täielikult toetatud.
+printing_not_ready=Hoiatus: PDF pole printimiseks täielikult laaditud.
+web_fonts_disabled=Veebifondid on keelatud: PDFiga kaasatud fonte pole võimalik kasutada.
diff --git a/thirdparty/pdfjs/web/locale/eu/viewer.properties b/thirdparty/pdfjs/web/locale/eu/viewer.properties
new file mode 100644
index 0000000..40956b5
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/eu/viewer.properties
@@ -0,0 +1,249 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Aurreko orria
+previous_label=Aurrekoa
+next.title=Hurrengo orria
+next_label=Hurrengoa
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Orria
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages={{pagesCount}}/{{pageNumber}}
+
+zoom_out.title=Urrundu zooma
+zoom_out_label=Urrundu zooma
+zoom_in.title=Gerturatu zooma
+zoom_in_label=Gerturatu zooma
+zoom.title=Zooma
+presentation_mode.title=Aldatu aurkezpen modura
+presentation_mode_label=Arkezpen modua
+open_file.title=Ireki fitxategia
+open_file_label=Ireki
+print.title=Inprimatu
+print_label=Inprimatu
+download.title=Deskargatu
+download_label=Deskargatu
+bookmark.title=Uneko ikuspegia (kopiatu edo ireki leiho berrian)
+bookmark_label=Uneko ikuspegia
+
+# Secondary toolbar and context menu
+tools.title=Tresnak
+tools_label=Tresnak
+first_page.title=Joan lehen orrira
+first_page.label=Joan lehen orrira
+first_page_label=Joan lehen orrira
+last_page.title=Joan azken orrira
+last_page.label=Joan azken orrira
+last_page_label=Joan azken orrira
+page_rotate_cw.title=Biratu erlojuaren norantzan
+page_rotate_cw.label=Biratu erlojuaren norantzan
+page_rotate_cw_label=Biratu erlojuaren norantzan
+page_rotate_ccw.title=Biratu erlojuaren aurkako norantzan
+page_rotate_ccw.label=Biratu erlojuaren aurkako norantzan
+page_rotate_ccw_label=Biratu erlojuaren aurkako norantzan
+
+cursor_text_select_tool.title=Gaitu testuaren hautapen tresna
+cursor_text_select_tool_label=Testuaren hautapen tresna
+cursor_hand_tool.title=Gaitu eskuaren tresna
+cursor_hand_tool_label=Eskuaren tresna
+
+scroll_vertical.title=Erabili korritze bertikala
+scroll_vertical_label=Korritze bertikala
+scroll_horizontal.title=Erabili korritze horizontala
+scroll_horizontal_label=Korritze horizontala
+scroll_wrapped.title=Erabili korritze egokitua
+scroll_wrapped_label=Korritze egokitua
+
+spread_none.title=Ez elkartu barreiatutako orriak
+spread_none_label=Barreiatzerik ez
+spread_odd.title=Elkartu barreiatutako orriak bakoiti zenbakidunekin hasita
+spread_odd_label=Barreiatze bakoitia
+spread_even.title=Elkartu barreiatutako orriak bikoiti zenbakidunekin hasita
+spread_even_label=Barreiatze bikoitia
+
+# Document properties dialog box
+document_properties.title=Dokumentuaren propietateak…
+document_properties_label=Dokumentuaren propietateak…
+document_properties_file_name=Fitxategi-izena:
+document_properties_file_size=Fitxategiaren tamaina:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} byte)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} byte)
+document_properties_title=Izenburua:
+document_properties_author=Egilea:
+document_properties_subject=Gaia:
+document_properties_keywords=Gako-hitzak:
+document_properties_creation_date=Sortze-data:
+document_properties_modification_date=Aldatze-data:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Sortzailea:
+document_properties_producer=PDFaren ekoizlea:
+document_properties_version=PDF bertsioa:
+document_properties_page_count=Orrialde kopurua:
+document_properties_page_size=Orriaren tamaina:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=bertikala
+document_properties_page_size_orientation_landscape=horizontala
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Gutuna
+document_properties_page_size_name_legal=Legala
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Webeko ikuspegi bizkorra:
+document_properties_linearized_yes=Bai
+document_properties_linearized_no=Ez
+document_properties_close=Itxi
+
+print_progress_message=Dokumentua inprimatzeko prestatzen…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent=%{{progress}}
+print_progress_close=Utzi
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Txandakatu alboko barra
+toggle_sidebar_notification.title=Txandakatu alboko barra (dokumentuak eskema/eranskinak ditu)
+toggle_sidebar_label=Txandakatu alboko barra
+document_outline.title=Erakutsi dokumentuaren eskema (klik bikoitza elementu guztiak zabaltzeko/tolesteko)
+document_outline_label=Dokumentuaren eskema
+attachments.title=Erakutsi eranskinak
+attachments_label=Eranskinak
+layers_label=Geruzak
+thumbs.title=Erakutsi koadro txikiak
+thumbs_label=Koadro txikiak
+findbar.title=Bilatu dokumentuan
+findbar_label=Bilatu
+
+additional_layers=Geruza gehigarriak
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas={{page}}. orria
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}}. orria
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}}. orriaren koadro txikia
+
+# Find panel button title and messages
+find_input.title=Bilatu
+find_input.placeholder=Bilatu dokumentuan…
+find_previous.title=Bilatu esaldiaren aurreko parekatzea
+find_previous_label=Aurrekoa
+find_next.title=Bilatu esaldiaren hurrengo parekatzea
+find_next_label=Hurrengoa
+find_highlight=Nabarmendu guztia
+find_match_case_label=Bat etorri maiuskulekin/minuskulekin
+find_entire_word_label=Hitz osoak
+find_reached_top=Dokumentuaren hasierara heldu da, bukaeratik jarraitzen
+find_reached_bottom=Dokumentuaren bukaerara heldu da, hasieratik jarraitzen
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}}/{{current}}. bat etortzea
+find_match_count[two]={{total}}/{{current}}. bat etortzea
+find_match_count[few]={{total}}/{{current}}. bat etortzea
+find_match_count[many]={{total}}/{{current}}. bat etortzea
+find_match_count[other]={{total}}/{{current}}. bat etortzea
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} bat-etortze baino gehiago
+find_match_count_limit[one]=Bat-etortze {{limit}} baino gehiago
+find_match_count_limit[two]={{limit}} bat-etortze baino gehiago
+find_match_count_limit[few]={{limit}} bat-etortze baino gehiago
+find_match_count_limit[many]={{limit}} bat-etortze baino gehiago
+find_match_count_limit[other]={{limit}} bat-etortze baino gehiago
+find_not_found=Esaldia ez da aurkitu
+
+# Error panel labels
+error_more_info=Informazio gehiago
+error_less_info=Informazio gutxiago
+error_close=Itxi
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (eraikuntza: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mezua: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fitxategia: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Lerroa: {{line}}
+rendering_error=Errorea gertatu da orria errendatzean.
+
+# Predefined zoom values
+page_scale_width=Orriaren zabalera
+page_scale_fit=Doitu orrira
+page_scale_auto=Zoom automatikoa
+page_scale_actual=Benetako tamaina
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent=%{{scale}}
+
+# Loading indicator messages
+loading_error_indicator=Errorea
+loading_error=Errorea gertatu da PDFa kargatzean.
+invalid_file_error=PDF fitxategi baliogabe edo hondatua.
+missing_file_error=PDF fitxategia falta da.
+unexpected_response_error=Espero gabeko zerbitzariaren erantzuna.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} ohartarazpena]
+password_label=Idatzi PDF fitxategi hau irekitzeko pasahitza.
+password_invalid=Pasahitz baliogabea. Saiatu berriro mesedez.
+password_ok=Ados
+password_cancel=Utzi
+
+printing_not_supported=Abisua: inprimatzeko euskarria ez da erabatekoa nabigatzaile honetan.
+printing_not_ready=Abisua: PDFa ez dago erabat kargatuta inprimatzeko.
+web_fonts_disabled=Webeko letra-tipoak desgaituta daude: ezin dira kapsulatutako PDF letra-tipoak erabili.
diff --git a/thirdparty/pdfjs/web/locale/fa/viewer.properties b/thirdparty/pdfjs/web/locale/fa/viewer.properties
new file mode 100644
index 0000000..9886b39
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/fa/viewer.properties
@@ -0,0 +1,222 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ØµÙØÙ‡Ù” قبلی
+previous_label=قبلی
+next.title=ØµÙØÙ‡Ù” بعدی
+next_label=بعدی
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ØµÙØÙ‡
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=از {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}}از {{pagesCount}})
+
+zoom_out.title=کوچک‌نمایی
+zoom_out_label=کوچک‌نمایی
+zoom_in.title=بزرگ‌نمایی
+zoom_in_label=بزرگ‌نمایی
+zoom.title=زوم
+presentation_mode.title=تغییر به ØØ§Ù„ت ارائه
+presentation_mode_label=ØØ§Ù„ت ارائه
+open_file.title=باز کردن پرونده
+open_file_label=باز کردن
+print.title=چاپ
+print_label=چاپ
+download.title=بارگیری
+download_label=بارگیری
+bookmark.title=نمای ÙØ¹Ù„ÛŒ (رونوشت Ùˆ یا نشان دادن در پنجره جدید)
+bookmark_label=نمای ÙØ¹Ù„ÛŒ
+
+# Secondary toolbar and context menu
+tools.title=ابزارها
+tools_label=ابزارها
+first_page.title=برو به اولین ØµÙØÙ‡
+first_page.label=برو یه اولین ØµÙØÙ‡
+first_page_label=برو به اولین ØµÙØÙ‡
+last_page.title=برو به آخرین ØµÙØÙ‡
+last_page.label=برو به آخرین ØµÙØÙ‡
+last_page_label=برو به آخرین ØµÙØÙ‡
+page_rotate_cw.title=چرخش ساعتگرد
+page_rotate_cw.label=چرخش ساعتگرد
+page_rotate_cw_label=چرخش ساعتگرد
+page_rotate_ccw.title=چرخش پاد ساعتگرد
+page_rotate_ccw.label=چرخش پاد ساعتگرد
+page_rotate_ccw_label=چرخش پاد ساعتگرد
+
+cursor_text_select_tool.title=ÙØ¹Ø§Ù„ کردن ابزار٠انتخاب٠متن
+cursor_text_select_tool_label=ابزار٠انتخاب٠متن
+cursor_hand_tool.title=ÙØ¹Ø§Ù„ کردن ابزار٠دست
+cursor_hand_tool_label=ابزار دست
+
+scroll_vertical.title=Ø§Ø³ØªÙØ§Ø¯Ù‡ از پیمایش عمودی
+scroll_vertical_label=پیمایش عمودی
+scroll_horizontal.title=Ø§Ø³ØªÙØ§Ø¯Ù‡ از پیمایش اÙÙ‚ÛŒ
+scroll_horizontal_label=پیمایش اÙÙ‚ÛŒ
+
+
+# Document properties dialog box
+document_properties.title=خصوصیات سند...
+document_properties_label=خصوصیات سند...
+document_properties_file_name=نام ÙØ§ÛŒÙ„:
+document_properties_file_size=ØØ¬Ù… پرونده:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} کیلوبایت ({{size_b}} بایت)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} مگابایت ({{size_b}} بایت)
+document_properties_title=عنوان:
+document_properties_author=نویسنده:
+document_properties_subject=موضوع:
+document_properties_keywords=کلیدواژه‌ها:
+document_properties_creation_date=تاریخ ایجاد:
+document_properties_modification_date=تاریخ ویرایش:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}، {{time}}
+document_properties_creator=ایجاد کننده:
+document_properties_producer=ایجاد کننده PDF:
+document_properties_version=نسخه PDF:
+document_properties_page_count=تعداد ØµÙØØ§Øª:
+document_properties_page_size=اندازه ØµÙØÙ‡:
+document_properties_page_size_unit_inches=اینچ
+document_properties_page_size_unit_millimeters=میلی‌متر
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=نامه
+document_properties_page_size_name_legal=ØÙ‚وقی
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=بله
+document_properties_linearized_no=خیر
+document_properties_close=بستن
+
+print_progress_message=آماده سازی مدارک برای چاپ کردن…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=لغو
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=باز و بسته کردن نوار کناری
+toggle_sidebar_notification.title=تغییر وضعیت نوار کناری (سند ØØ§ÙˆÛŒ طرØ/پیوست است)
+toggle_sidebar_label=ØªØºÛŒÛŒØ±ØØ§Ù„ت نوارکناری
+document_outline.title=نمایش رئوس مطالب مدارک(برای بازشدن/جمع شدن همه موارد دوبار کلیک کنید)
+document_outline_label=Ø·Ø±Ø Ù†ÙˆØ´ØªØ§Ø±
+attachments.title=نمایش پیوست‌ها
+attachments_label=پیوست‌ها
+thumbs.title=نمایش تصاویر بندانگشتی
+thumbs_label=تصاویر بندانگشتی
+findbar.title=جستجو در سند
+findbar_label=پیدا کردن
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=ØµÙØÙ‡ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=تصویر بند‌ انگشتی ØµÙØÙ‡ {{page}}
+
+# Find panel button title and messages
+find_input.title=پیدا کردن
+find_input.placeholder=پیدا کردن در سند…
+find_previous.title=پیدا کردن رخداد قبلی عبارت
+find_previous_label=قبلی
+find_next.title=پیدا کردن رخداد بعدی عبارت
+find_next_label=بعدی
+find_highlight=برجسته و هایلایت کردن همه موارد
+find_match_case_label=تطبیق Ú©ÙˆÚ†Ú©ÛŒ Ùˆ بزرگی ØØ±ÙˆÙ
+find_entire_word_label=تمام کلمه‌ها
+find_reached_top=به بالای ØµÙØÙ‡ رسیدیم، از پایین ادامه می‌دهیم
+find_reached_bottom=به آخر ØµÙØÙ‡ رسیدیم، از بالا ادامه می‌دهیم
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count[one]={{current}} از {{total}} مطابقت دارد
+find_match_count[two]={{current}} از {{total}} مطابقت دارد
+find_match_count[few]={{current}} از {{total}} مطابقت دارد
+find_match_count[many]={{current}} از {{total}} مطابقت دارد
+find_match_count[other]={{current}} از {{total}} مطابقت دارد
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_not_found=عبارت پیدا نشد
+
+# Error panel labels
+error_more_info=اطلاعات بیشتر
+error_less_info=اطلاعات کمتر
+error_close=بستن
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=â€PDF.js ورژن{{version}} â€(ساخت: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=پیام: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=توده: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=پرونده: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=سطر: {{line}}
+rendering_error=هنگام بارگیری ØµÙØÙ‡ خطایی رخ داد.
+
+# Predefined zoom values
+page_scale_width=عرض ØµÙØÙ‡
+page_scale_fit=اندازه کردن ØµÙØÙ‡
+page_scale_auto=بزرگنمایی خودکار
+page_scale_actual=اندازه واقعی‌
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=خطا
+loading_error=هنگام بارگیری پرونده PDF خطایی رخ داد.
+invalid_file_error=پرونده PDF نامعتبر یامعیوب می‌باشد.
+missing_file_error=پرونده PDF ÛŒØ§ÙØª نشد.
+unexpected_response_error=پاسخ پیش بینی نشده سرور
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=جهت باز کردن پرونده PDF گذرواژه را وارد نمائید.
+password_invalid=گذرواژه نامعتبر. Ù„Ø·ÙØ§ مجددا تلاش کنید.
+password_ok=تأیید
+password_cancel=لغو
+
+printing_not_supported=هشدار: قابلیت چاپ به‌طور کامل در این مرورگر پشتیبانی نمی‌شود.
+printing_not_ready=اخطار: پرونده PDF بطور کامل بارگیری نشده و امکان چاپ وجود ندارد.
+web_fonts_disabled=Ùونت های ØªØØª وب غیر ÙØ¹Ø§Ù„ شده اند: امکان Ø§Ø³ØªÙØ§Ø¯Ù‡ از نمایش دهنده داخلی PDF وجود ندارد.
diff --git a/thirdparty/pdfjs/web/locale/ff/viewer.properties b/thirdparty/pdfjs/web/locale/ff/viewer.properties
new file mode 100644
index 0000000..0a08102
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/ff/viewer.properties
@@ -0,0 +1,241 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Hello Æennungo
+previous_label=ÆennuÉ—o
+next.title=Hello faango
+next_label=Yeeso
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Hello
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=e nder {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Lonngo WoÉ—É—a
+zoom_out_label=Lonngo WoÉ—É—a
+zoom_in.title=Lonngo Ara
+zoom_in_label=Lonngo Ara
+zoom.title=Lonngo
+presentation_mode.title=Faytu to Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Uddit Fiilde
+open_file_label=Uddit
+print.title=Winndito
+print_label=Winndito
+download.title=Aawto
+download_label=Aawto
+bookmark.title=Jiytol gonangol (natto walla uddit e henorde)
+bookmark_label=Jiytol Gonangol
+
+# Secondary toolbar and context menu
+tools.title=KuutorÉ—e
+tools_label=KuutorÉ—e
+first_page.title=Yah to hello adanngo
+first_page.label=Yah to hello adanngo
+first_page_label=Yah to hello adanngo
+last_page.title=Yah to hello wattindiingo
+last_page.label=Yah to hello wattindiingo
+last_page_label=Yah to hello wattindiingo
+page_rotate_cw.title=Yiiltu Faya Ñaamo
+page_rotate_cw.label=Yiiltu Faya Ñaamo
+page_rotate_cw_label=Yiiltu Faya Ñaamo
+page_rotate_ccw.title=Yiiltu Faya Nano
+page_rotate_ccw.label=Yiiltu Faya Nano
+page_rotate_ccw_label=Yiiltu Faya Nano
+
+cursor_text_select_tool.title=Gollin kaɓirgel cuɓirgel binndi
+cursor_text_select_tool_label=Kaɓirgel cuɓirgel binndi
+cursor_hand_tool.title=Hurmin kuutorgal junngo
+cursor_hand_tool_label=Kaɓirgel junngo
+
+scroll_vertical.title=Huutoro gorwitol daringol
+scroll_vertical_label=Gorwitol daringol
+scroll_horizontal.title=Huutoro gorwitol lelingol
+scroll_horizontal_label=Gorwitol daringol
+scroll_wrapped.title=Huutoro gorwitol coomingol
+scroll_wrapped_label=Gorwitol coomingol
+
+spread_none.title=Hoto tawtu kelle kelle
+spread_none_label=Alaa Spreads
+spread_odd.title=Tawtu kelle puÉ—É—ortooÉ—e kelle teelÉ—e
+spread_odd_label=Kelle teelÉ—e
+spread_even.title=Tawtu É—ereeji kelle puÉ—É—oriiÉ—i kelle teeltuÉ—e
+spread_even_label=Kelle teeltuÉ—e
+
+# Document properties dialog box
+document_properties.title=Keeroraaɗi Winndannde…
+document_properties_label=Keeroraaɗi Winndannde…
+document_properties_file_name=Innde fiilde:
+document_properties_file_size=Æetol fiilde:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bite)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bite)
+document_properties_title=Tiitoonde:
+document_properties_author=BinnduÉ—o:
+document_properties_subject=Toɓɓere:
+document_properties_keywords=Kelmekele jiytirÉ—e:
+document_properties_creation_date=Ñalnde Sosaa:
+document_properties_modification_date=Ñalnde Waylaa:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=CosÉ—o:
+document_properties_producer=PaggiiÉ—o PDF:
+document_properties_version=Yamre PDF:
+document_properties_page_count=Limoore Kelle:
+document_properties_page_size=Æeto Hello:
+document_properties_page_size_unit_inches=nder
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=dariingo
+document_properties_page_size_orientation_landscape=wertiingo
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Æataake
+document_properties_page_size_name_legal=Laawol
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=ÆŠisngo geese yaawngo:
+document_properties_linearized_yes=Eey
+document_properties_linearized_no=Alaa
+document_properties_close=Uddu
+
+print_progress_message=Nana heboo winnditaade fiilannde…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Haaytu
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toggilo Palal Sawndo
+toggle_sidebar_notification.title=Palal sawndo (dokimaa oo ina waÉ—i taarngo/cinnde)
+toggle_sidebar_label=Toggilo Palal Sawndo
+document_outline.title=Hollu Ƴiyal Fiilannde (dobdobo ngam wertude/taggude teme fof)
+document_outline_label=Toɓɓe Fiilannde
+attachments.title=Hollu ÆŠisanÉ—e
+attachments_label=ÆŠisanÉ—e
+thumbs.title=Hollu Dooɓe
+thumbs_label=Dooɓe
+findbar.title=Yiylo e fiilannde
+findbar_label=Yiytu
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Hello {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Dooɓre Hello {{page}}
+
+# Find panel button title and messages
+find_input.title=Yiytu
+find_input.placeholder=Yiylo nder dokimaa
+find_previous.title=Yiylo cilol ɓennugol konngol ngol
+find_previous_label=ÆennuÉ—o
+find_next.title=Yiylo cilol garowol konngol ngol
+find_next_label=Yeeso
+find_highlight=Jalbin fof
+find_match_case_label=Jaaɓnu darnde
+find_entire_word_label=Kelme timmuÉ—e tan
+find_reached_top=Heɓii fuɗɗorde fiilannde, jokku faya les
+find_reached_bottom=Heɓii hoore fiilannde, jokku faya les
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} wonande laabi {{total}}
+find_match_count[two]={{current}} wonande laabi {{total}}
+find_match_count[few]={{current}} wonande laabi {{total}}
+find_match_count[many]={{current}} wonande laabi {{total}}
+find_match_count[other]={{current}} wonande laabi {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Ko ɓuri laabi {{limit}}
+find_match_count_limit[one]=Ko ɓuri laani {{limit}}
+find_match_count_limit[two]=Ko ɓuri laabi {{limit}}
+find_match_count_limit[few]=Ko ɓuri laabi {{limit}}
+find_match_count_limit[many]=Ko ɓuri laabi {{limit}}
+find_match_count_limit[other]=Ko ɓuri laabi {{limit}}
+find_not_found=Konngi njiyataa
+
+# Error panel labels
+error_more_info=Æeydu Humpito
+error_less_info=Ustu Humpito
+error_close=Uddu
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Æatakuure: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fiilde: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Gorol: {{line}}
+rendering_error=Juumre waɗii tuma nde yoŋkittoo hello.
+
+# Predefined zoom values
+page_scale_width=Njaajeendi Hello
+page_scale_fit=KeÆ´eendi Hello
+page_scale_auto=Loongorde Jaajol
+page_scale_actual=Æetol Jaati
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Juumre
+loading_error=Juumre waÉ—ii tuma nde loowata PDF oo.
+invalid_file_error=Fiilde PDF moÆ´Æ´aani walla jiibii.
+missing_file_error=Fiilde PDF ena ŋakki.
+unexpected_response_error=Jaabtol sarworde tijjinooka.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Siiftannde]
+password_label=Naatu finnde ngam uddite ndee fiilde PDF.
+password_invalid=Finnde moÆ´Æ´aani. TiiÉ—no eto kadi.
+password_ok=OK
+password_cancel=Haaytu
+
+printing_not_supported=Reentino: Winnditagol tammbitaaka no feewi e ndee wanngorde.
+printing_not_ready=Reentino: PDF oo loowaaki haa timmi ngam winnditagol.
+web_fonts_disabled=Ponte geese ko daaÆ´aaÉ—e: horiima huutoraade ponte PDF coomtoraaÉ—e.
diff --git a/thirdparty/pdfjs/web/locale/fi/viewer.properties b/thirdparty/pdfjs/web/locale/fi/viewer.properties
new file mode 100644
index 0000000..f444bc6
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/fi/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Edellinen sivu
+previous_label=Edellinen
+next.title=Seuraava sivu
+next_label=Seuraava
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Sivu
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=Loitonna
+zoom_out_label=Loitonna
+zoom_in.title=Lähennä
+zoom_in_label=Lähennä
+zoom.title=Suurennus
+presentation_mode.title=Siirry esitystilaan
+presentation_mode_label=Esitystila
+open_file.title=Avaa tiedosto
+open_file_label=Avaa
+print.title=Tulosta
+print_label=Tulosta
+download.title=Lataa
+download_label=Lataa
+bookmark.title=Avoin ikkuna (kopioi tai avaa uuteen ikkunaan)
+bookmark_label=Avoin ikkuna
+
+# Secondary toolbar and context menu
+tools.title=Tools
+tools_label=Tools
+first_page.title=Siirry ensimmäiselle sivulle
+first_page.label=Siirry ensimmäiselle sivulle
+first_page_label=Siirry ensimmäiselle sivulle
+last_page.title=Siirry viimeiselle sivulle
+last_page.label=Siirry viimeiselle sivulle
+last_page_label=Siirry viimeiselle sivulle
+page_rotate_cw.title=Kierrä oikealle
+page_rotate_cw.label=Kierrä oikealle
+page_rotate_cw_label=Kierrä oikealle
+page_rotate_ccw.title=Kierrä vasemmalle
+page_rotate_ccw.label=Kierrä vasemmalle
+page_rotate_ccw_label=Kierrä vasemmalle
+
+cursor_text_select_tool.title=Käytä tekstinvalintatyökalua
+cursor_text_select_tool_label=Tekstinvalintatyökalu
+cursor_hand_tool.title=Käytä käsityökalua
+cursor_hand_tool_label=Käsityökalu
+
+scroll_vertical.title=Käytä pystysuuntaista vieritystä
+scroll_vertical_label=Pystysuuntainen vieritys
+scroll_horizontal.title=Käytä vaakasuuntaista vieritystä
+scroll_horizontal_label=Vaakasuuntainen vieritys
+scroll_wrapped.title=Käytä rivittyvää vieritystä
+scroll_wrapped_label=Rivittyvä vieritys
+
+spread_none.title=Älä yhdistä sivuja aukeamiksi
+spread_none_label=Ei aukeamia
+spread_odd.title=Yhdistä sivut aukeamiksi alkaen parittomalta sivulta
+spread_odd_label=Parittomalta alkavat aukeamat
+spread_even.title=Yhdistä sivut aukeamiksi alkaen parilliselta sivulta
+spread_even_label=Parilliselta alkavat aukeamat
+
+# Document properties dialog box
+document_properties.title=Dokumentin ominaisuudet…
+document_properties_label=Dokumentin ominaisuudet…
+document_properties_file_name=Tiedostonimi:
+document_properties_file_size=Tiedoston koko:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kt ({{size_b}} tavua)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} Mt ({{size_b}} tavua)
+document_properties_title=Otsikko:
+document_properties_author=Tekijä:
+document_properties_subject=Aihe:
+document_properties_keywords=Avainsanat:
+document_properties_creation_date=Luomispäivämäärä:
+document_properties_modification_date=Muokkauspäivämäärä:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Luoja:
+document_properties_producer=PDF-tuottaja:
+document_properties_version=PDF-versio:
+document_properties_page_count=Sivujen määrä:
+document_properties_page_size=Sivun koko:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=pysty
+document_properties_page_size_orientation_landscape=vaaka
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Nopea web-katselu:
+document_properties_linearized_yes=Kyllä
+document_properties_linearized_no=Ei
+document_properties_close=Sulje
+
+print_progress_message=Valmistellaan dokumenttia tulostamista varten…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}Â %
+print_progress_close=Peruuta
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Näytä/piilota sivupaneeli
+toggle_sidebar_notification.title=Näytä/piilota sivupaneeli (dokumentissa on sisällys tai liitteitä)
+toggle_sidebar_notification2.title=Näytä/piilota sivupaneeli (dokumentissa on sisällys/liitteitä/tasoja)
+toggle_sidebar_label=Näytä/piilota sivupaneeli
+document_outline.title=Näytä dokumentin sisällys (laajenna tai kutista kohdat kaksoisnapsauttamalla)
+document_outline_label=Dokumentin sisällys
+attachments.title=Näytä liitteet
+attachments_label=Liitteet
+layers.title=Näytä tasot (kaksoisnapsauta palauttaaksesi kaikki tasot oletustilaan)
+layers_label=Tasot
+thumbs.title=Näytä pienoiskuvat
+thumbs_label=Pienoiskuvat
+findbar.title=Etsi dokumentista
+findbar_label=Etsi
+
+additional_layers=Lisätasot
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Sivu {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Sivu {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Pienoiskuva sivusta {{page}}
+
+# Find panel button title and messages
+find_input.title=Etsi
+find_input.placeholder=Etsi dokumentista…
+find_previous.title=Etsi hakusanan edellinen osuma
+find_previous_label=Edellinen
+find_next.title=Etsi hakusanan seuraava osuma
+find_next_label=Seuraava
+find_highlight=Korosta kaikki
+find_match_case_label=Huomioi kirjainkoko
+find_entire_word_label=Kokonaiset sanat
+find_reached_top=Päästiin dokumentin alkuun, jatketaan lopusta
+find_reached_bottom=Päästiin dokumentin loppuun, jatketaan alusta
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} / {{total}} osuma
+find_match_count[two]={{current}} / {{total}} osumaa
+find_match_count[few]={{current}} / {{total}} osumaa
+find_match_count[many]={{current}} / {{total}} osumaa
+find_match_count[other]={{current}} / {{total}} osumaa
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Enemmän kuin {{limit}} osumaa
+find_match_count_limit[one]=Enemmän kuin {{limit}} osuma
+find_match_count_limit[two]=Enemmän kuin {{limit}} osumaa
+find_match_count_limit[few]=Enemmän kuin {{limit}} osumaa
+find_match_count_limit[many]=Enemmän kuin {{limit}} osumaa
+find_match_count_limit[other]=Enemmän kuin {{limit}} osumaa
+find_not_found=Hakusanaa ei löytynyt
+
+# Error panel labels
+error_more_info=Lisätietoja
+error_less_info=Lisätietoja
+error_close=Sulje
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (kooste: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Virheilmoitus: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pino: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Tiedosto: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rivi: {{line}}
+rendering_error=Tapahtui virhe piirrettäessä sivua.
+
+# Predefined zoom values
+page_scale_width=Sivun leveys
+page_scale_fit=Koko sivu
+page_scale_auto=Automaattinen suurennus
+page_scale_actual=Todellinen koko
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading_error_indicator=Virhe
+loading_error=Tapahtui virhe ladattaessa PDF-tiedostoa.
+invalid_file_error=Virheellinen tai vioittunut PDF-tiedosto.
+missing_file_error=Puuttuva PDF-tiedosto.
+unexpected_response_error=Odottamaton vastaus palvelimelta.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Kirjoita PDF-tiedoston salasana.
+password_invalid=Virheellinen salasana. Yritä uudestaan.
+password_ok=OK
+password_cancel=Peruuta
+
+printing_not_supported=Varoitus: Selain ei tue kaikkia tulostustapoja.
+printing_not_ready=Varoitus: PDF-tiedosto ei ole vielä latautunut kokonaan, eikä sitä voi vielä tulostaa.
+web_fonts_disabled=Verkkosivujen omat kirjasinlajit on estetty: ei voida käyttää upotettuja PDF-kirjasinlajeja.
diff --git a/thirdparty/pdfjs/web/locale/fr/viewer.properties b/thirdparty/pdfjs/web/locale/fr/viewer.properties
new file mode 100644
index 0000000..af54b09
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/fr/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Page précédente
+previous_label=Précédent
+next.title=Page suivante
+next_label=Suivant
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Page
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=sur {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} sur {{pagesCount}})
+
+zoom_out.title=Zoom arrière
+zoom_out_label=Zoom arrière
+zoom_in.title=Zoom avant
+zoom_in_label=Zoom avant
+zoom.title=Zoom
+presentation_mode.title=Basculer en mode présentation
+presentation_mode_label=Mode présentation
+open_file.title=Ouvrir le fichier
+open_file_label=Ouvrir le fichier
+print.title=Imprimer
+print_label=Imprimer
+download.title=Télécharger
+download_label=Télécharger
+bookmark.title=Affichage courant (copier ou ouvrir dans une nouvelle fenêtre)
+bookmark_label=Affichage actuel
+
+# Secondary toolbar and context menu
+tools.title=Outils
+tools_label=Outils
+first_page.title=Aller à la première page
+first_page.label=Aller à la première page
+first_page_label=Aller à la première page
+last_page.title=Aller à la dernière page
+last_page.label=Aller à la dernière page
+last_page_label=Aller à la dernière page
+page_rotate_cw.title=Rotation horaire
+page_rotate_cw.label=Rotation horaire
+page_rotate_cw_label=Rotation horaire
+page_rotate_ccw.title=Rotation antihoraire
+page_rotate_ccw.label=Rotation antihoraire
+page_rotate_ccw_label=Rotation antihoraire
+
+cursor_text_select_tool.title=Activer l’outil de sélection de texte
+cursor_text_select_tool_label=Outil de sélection de texte
+cursor_hand_tool.title=Activer l’outil main
+cursor_hand_tool_label=Outil main
+
+scroll_vertical.title=Utiliser le défilement vertical
+scroll_vertical_label=Défilement vertical
+scroll_horizontal.title=Utiliser le défilement horizontal
+scroll_horizontal_label=Défilement horizontal
+scroll_wrapped.title=Utiliser le défilement par bloc
+scroll_wrapped_label=Défilement par bloc
+
+spread_none.title=Ne pas afficher les pages deux à deux
+spread_none_label=Pas de double affichage
+spread_odd.title=Afficher les pages par deux, impaires à gauche
+spread_odd_label=Doubles pages, impaires à gauche
+spread_even.title=Afficher les pages par deux, paires à gauche
+spread_even_label=Doubles pages, paires à gauche
+
+# Document properties dialog box
+document_properties.title=Propriétés du document…
+document_properties_label=Propriétés du document…
+document_properties_file_name=Nom du fichier :
+document_properties_file_size=Taille du fichier :
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}}Â Ko ({{size_b}} octets)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}}Â Mo ({{size_b}} octets)
+document_properties_title=Titre :
+document_properties_author=Auteur :
+document_properties_subject=Sujet :
+document_properties_keywords=Mots-clés :
+document_properties_creation_date=Date de création :
+document_properties_modification_date=Modifié le :
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}} Ã {{time}}
+document_properties_creator=Créé par :
+document_properties_producer=Outil de conversion PDFÂ :
+document_properties_version=Version PDFÂ :
+document_properties_page_count=Nombre de pages :
+document_properties_page_size=Taille de la page :
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portrait
+document_properties_page_size_orientation_landscape=paysage
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=lettre
+document_properties_page_size_name_legal=document juridique
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Affichage rapide des pages web :
+document_properties_linearized_yes=Oui
+document_properties_linearized_no=Non
+document_properties_close=Fermer
+
+print_progress_message=Préparation du document pour l’impression…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}Â %
+print_progress_close=Annuler
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Afficher/Masquer le panneau latéral
+toggle_sidebar_notification.title=Afficher/Masquer le panneau latéral (le document contient des signets/pièces jointes)
+toggle_sidebar_notification2.title=Afficher/Masquer le panneau latéral (le document contient des signets/pièces jointes/calques)
+toggle_sidebar_label=Afficher/Masquer le panneau latéral
+document_outline.title=Afficher les signets du document (double-cliquer pour développer/réduire tous les éléments)
+document_outline_label=Signets du document
+attachments.title=Afficher les pièces jointes
+attachments_label=Pièces jointes
+layers.title=Afficher les calques (double-cliquer pour réinitialiser tous les calques à l’état par défaut)
+layers_label=Calques
+thumbs.title=Afficher les vignettes
+thumbs_label=Vignettes
+findbar.title=Rechercher dans le document
+findbar_label=Rechercher
+
+additional_layers=Calques additionnels
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Page {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Page {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Vignette de la page {{page}}
+
+# Find panel button title and messages
+find_input.title=Rechercher
+find_input.placeholder=Rechercher dans le document…
+find_previous.title=Trouver l’occurrence précédente de l’expression
+find_previous_label=Précédent
+find_next.title=Trouver la prochaine occurrence de l’expression
+find_next_label=Suivant
+find_highlight=Tout surligner
+find_match_case_label=Respecter la casse
+find_entire_word_label=Mots entiers
+find_reached_top=Haut de la page atteint, poursuite depuis la fin
+find_reached_bottom=Bas de la page atteint, poursuite au début
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=Occurrence {{current}} sur {{total}}
+find_match_count[two]=Occurrence {{current}} sur {{total}}
+find_match_count[few]=Occurrence {{current}} sur {{total}}
+find_match_count[many]=Occurrence {{current}} sur {{total}}
+find_match_count[other]=Occurrence {{current}} sur {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Plus de {{limit}} correspondances
+find_match_count_limit[one]=Plus de {{limit}} correspondance
+find_match_count_limit[two]=Plus de {{limit}} correspondances
+find_match_count_limit[few]=Plus de {{limit}} correspondances
+find_match_count_limit[many]=Plus de {{limit}} correspondances
+find_match_count_limit[other]=Plus de {{limit}} correspondances
+find_not_found=Expression non trouvée
+
+# Error panel labels
+error_more_info=Plus d’informations
+error_less_info=Moins d’informations
+error_close=Fermer
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (identifiant de compilation : {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message : {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pile : {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fichier : {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Ligne : {{line}}
+rendering_error=Une erreur s’est produite lors de l’affichage de la page.
+
+# Predefined zoom values
+page_scale_width=Pleine largeur
+page_scale_fit=Page entière
+page_scale_auto=Zoom automatique
+page_scale_actual=Taille réelle
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}Â %
+
+# Loading indicator messages
+loading_error_indicator=Erreur
+loading_error=Une erreur s’est produite lors du chargement du fichier PDF.
+invalid_file_error=Fichier PDF invalide ou corrompu.
+missing_file_error=Fichier PDF manquant.
+unexpected_response_error=Réponse inattendue du serveur.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} Ã {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Annotation {{type}}]
+password_label=Veuillez saisir le mot de passe pour ouvrir ce fichier PDF.
+password_invalid=Mot de passe incorrect. Veuillez réessayer.
+password_ok=OK
+password_cancel=Annuler
+
+printing_not_supported=Attention : l’impression n’est pas totalement prise en charge par ce navigateur.
+printing_not_ready=Attention : le PDF n’est pas entièrement chargé pour pouvoir l’imprimer.
+web_fonts_disabled=Les polices web sont désactivées : impossible d’utiliser les polices intégrées au PDF.
diff --git a/thirdparty/pdfjs/web/locale/fy-NL/viewer.properties b/thirdparty/pdfjs/web/locale/fy-NL/viewer.properties
new file mode 100644
index 0000000..3d69d0d
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/fy-NL/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Foarige side
+previous_label=Foarige
+next.title=Folgjende side
+next_label=Folgjende
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Side
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=fan {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} fan {{pagesCount}})
+
+zoom_out.title=Utzoome
+zoom_out_label=Utzoome
+zoom_in.title=Ynzoome
+zoom_in_label=Ynzoome
+zoom.title=Zoome
+presentation_mode.title=Wikselje nei presintaasjemodus
+presentation_mode_label=Presintaasjemodus
+open_file.title=Bestân iepenje
+open_file_label=Iepenje
+print.title=Ofdrukke
+print_label=Ofdrukke
+download.title=Downloade
+download_label=Downloade
+bookmark.title=Aktuele finster (kopiearje of iepenje yn nij finster)
+bookmark_label=Aktuele finster
+
+# Secondary toolbar and context menu
+tools.title=Ark
+tools_label=Ark
+first_page.title=Gean nei earste side
+first_page.label=Nei earste side gean
+first_page_label=Gean nei earste side
+last_page.title=Gean nei lêste side
+last_page.label=Nei lêste side gean
+last_page_label=Gean nei lêste side
+page_rotate_cw.title=Rjochtsom draaie
+page_rotate_cw.label=Rjochtsom draaie
+page_rotate_cw_label=Rjochtsom draaie
+page_rotate_ccw.title=Loftsom draaie
+page_rotate_ccw.label=Loftsom draaie
+page_rotate_ccw_label=Loftsom draaie
+
+cursor_text_select_tool.title=Tekstseleksjehelpmiddel ynskeakelje
+cursor_text_select_tool_label=Tekstseleksjehelpmiddel
+cursor_hand_tool.title=Hânhelpmiddel ynskeakelje
+cursor_hand_tool_label=Hânhelpmiddel
+
+scroll_vertical.title=Fertikaal skowe brûke
+scroll_vertical_label=Fertikaal skowe
+scroll_horizontal.title=Horizontaal skowe brûke
+scroll_horizontal_label=Horizontaal skowe
+scroll_wrapped.title=Skowe mei oersjoch brûke
+scroll_wrapped_label=Skowe mei oersjoch
+
+spread_none.title=Sidesprieding net gearfetsje
+spread_none_label=Gjin sprieding
+spread_odd.title=Sidesprieding gearfetsje te starten mei ûneven nûmers
+spread_odd_label=Uneven sprieding
+spread_even.title=Sidesprieding gearfetsje te starten mei even nûmers
+spread_even_label=Even sprieding
+
+# Document properties dialog box
+document_properties.title=Dokuminteigenskippen…
+document_properties_label=Dokuminteigenskippen…
+document_properties_file_name=Bestânsnamme:
+document_properties_file_size=Bestânsgrutte:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titel:
+document_properties_author=Auteur:
+document_properties_subject=Underwerp:
+document_properties_keywords=Kaaiwurden:
+document_properties_creation_date=Oanmaakdatum:
+document_properties_modification_date=Bewurkingsdatum:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Makker:
+document_properties_producer=PDF-makker:
+document_properties_version=PDF-ferzje:
+document_properties_page_count=Siden:
+document_properties_page_size=Sideformaat:
+document_properties_page_size_unit_inches=yn
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=steand
+document_properties_page_size_orientation_landscape=lizzend
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Juridysk
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Flugge webwerjefte:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nee
+document_properties_close=Slute
+
+print_progress_message=Dokumint tariede oar ôfdrukken…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Annulearje
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Sidebalke yn-/útskeakelje
+toggle_sidebar_notification.title=Sidebalke yn-/útskeakelje (dokumint befettet outline/bylagen)
+toggle_sidebar_notification2.title=Sidebalke yn-/útskeakelje (dokumint befettet oersjoch/bylagen/lagen)
+toggle_sidebar_label=Sidebalke yn-/útskeakelje
+document_outline.title=Dokumintoersjoch toane (dûbelklik om alle items út/yn te klappen)
+document_outline_label=Dokumintoersjoch
+attachments.title=Bylagen toane
+attachments_label=Bylagen
+layers.title=Lagen toane (dûbelklik om alle lagen nei de standertsteat werom te setten)
+layers_label=Lagen
+thumbs.title=Foarbylden toane
+thumbs_label=Foarbylden
+findbar.title=Sykje yn dokumint
+findbar_label=Sykje
+
+additional_layers=Oanfoljende lagen
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Side {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Side {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Foarbyld fan side {{page}}
+
+# Find panel button title and messages
+find_input.title=Sykje
+find_input.placeholder=Sykje yn dokumint…
+find_previous.title=It foarige foarkommen fan de tekst sykje
+find_previous_label=Foarige
+find_next.title=It folgjende foarkommen fan de tekst sykje
+find_next_label=Folgjende
+find_highlight=Alles markearje
+find_match_case_label=Haadlettergefoelich
+find_entire_word_label=Hiele wurden
+find_reached_top=Boppekant fan dokumint berikt, trochgien fan ûnder ôf
+find_reached_bottom=Ein fan dokumint berikt, trochgien fan boppe ôf
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} fan {{total}} oerienkomst
+find_match_count[two]={{current}} fan {{total}} oerienkomsten
+find_match_count[few]={{current}} fan {{total}} oerienkomsten
+find_match_count[many]={{current}} fan {{total}} oerienkomsten
+find_match_count[other]={{current}} fan {{total}} oerienkomsten
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mear as {{limit}} oerienkomsten
+find_match_count_limit[one]=Mear as {{limit}} oerienkomst
+find_match_count_limit[two]=Mear as {{limit}} oerienkomsten
+find_match_count_limit[few]=Mear as {{limit}} oerienkomsten
+find_match_count_limit[many]=Mear as {{limit}} oerienkomsten
+find_match_count_limit[other]=Mear as {{limit}} oerienkomsten
+find_not_found=Tekst net fûn
+
+# Error panel labels
+error_more_info=Mear ynformaasje
+error_less_info=Minder ynformaasje
+error_close=Slute
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js f{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Berjocht: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Bestân: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rigel: {{line}}
+rendering_error=Der is in flater bard by it renderjen fan de side.
+
+# Predefined zoom values
+page_scale_width=Sidebreedte
+page_scale_fit=Hiele side
+page_scale_auto=Automatysk zoome
+page_scale_actual=Werklike grutte
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Flater
+loading_error=Der is in flater bard by it laden fan de PDF.
+invalid_file_error=Ynfalide of korruptearre PDF-bestân.
+missing_file_error=PDF-bestân ûntbrekt.
+unexpected_response_error=Unferwacht serverantwurd.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}}-annotaasje]
+password_label=Jou it wachtwurd om dit PDF-bestân te iepenjen.
+password_invalid=Ferkeard wachtwurd. Probearje opnij.
+password_ok=OK
+password_cancel=Annulearje
+
+printing_not_supported=Warning: Printen is net folslein stipe troch dizze browser.
+printing_not_ready=Warning: PDF is net folslein laden om ôf te drukken.
+web_fonts_disabled=Weblettertypen binne útskeakele: gebrûk fan ynsluten PDF-lettertypen is net mooglik.
diff --git a/thirdparty/pdfjs/web/locale/ga-IE/viewer.properties b/thirdparty/pdfjs/web/locale/ga-IE/viewer.properties
new file mode 100644
index 0000000..f606e81
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/ga-IE/viewer.properties
@@ -0,0 +1,183 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=An Leathanach Roimhe Seo
+previous_label=Roimhe Seo
+next.title=An Chéad Leathanach Eile
+next_label=Ar Aghaidh
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Leathanach
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=as {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} as {{pagesCount}})
+
+zoom_out.title=Súmáil Amach
+zoom_out_label=Súmáil Amach
+zoom_in.title=Súmáil Isteach
+zoom_in_label=Súmáil Isteach
+zoom.title=Súmáil
+presentation_mode.title=Úsáid an Mód Láithreoireachta
+presentation_mode_label=Mód Láithreoireachta
+open_file.title=Oscail Comhad
+open_file_label=Oscail
+print.title=Priontáil
+print_label=Priontáil
+download.title=Ãoslódáil
+download_label=Ãoslódáil
+bookmark.title=An t-amharc reatha (cóipeáil nó oscail i bhfuinneog nua)
+bookmark_label=An tAmharc Reatha
+
+# Secondary toolbar and context menu
+tools.title=UirlisÃ
+tools_label=UirlisÃ
+first_page.title=Go dtà an chéad leathanach
+first_page.label=Go dtà an chéad leathanach
+first_page_label=Go dtà an chéad leathanach
+last_page.title=Go dtà an leathanach deiridh
+last_page.label=Go dtà an leathanach deiridh
+last_page_label=Go dtà an leathanach deiridh
+page_rotate_cw.title=Rothlaigh ar deiseal
+page_rotate_cw.label=Rothlaigh ar deiseal
+page_rotate_cw_label=Rothlaigh ar deiseal
+page_rotate_ccw.title=Rothlaigh ar tuathal
+page_rotate_ccw.label=Rothlaigh ar tuathal
+page_rotate_ccw_label=Rothlaigh ar tuathal
+
+cursor_text_select_tool.title=Cumasaigh an Uirlis Roghnaithe Téacs
+cursor_text_select_tool_label=Uirlis Roghnaithe Téacs
+cursor_hand_tool.title=Cumasaigh an Uirlis Láimhe
+cursor_hand_tool_label=Uirlis Láimhe
+
+# Document properties dialog box
+document_properties.title=AirÃonna na Cáipéise…
+document_properties_label=AirÃonna na Cáipéise…
+document_properties_file_name=Ainm an chomhaid:
+document_properties_file_size=Méid an chomhaid:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kB ({{size_b}} beart)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} beart)
+document_properties_title=Teideal:
+document_properties_author=Údar:
+document_properties_subject=Ãbhar:
+document_properties_keywords=Eochairfhocail:
+document_properties_creation_date=Dáta Cruthaithe:
+document_properties_modification_date=Dáta Athraithe:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Cruthaitheoir:
+document_properties_producer=Cruthaitheoir an PDF:
+document_properties_version=Leagan PDF:
+document_properties_page_count=LÃon Leathanach:
+document_properties_close=Dún
+
+print_progress_message=Cáipéis á hullmhú le priontáil…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cealaigh
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Scoránaigh an Barra Taoibh
+toggle_sidebar_notification.title=Scoránaigh an Barra Taoibh (achoimre/iatáin sa cháipéis)
+toggle_sidebar_label=Scoránaigh an Barra Taoibh
+document_outline.title=Taispeáin ImlÃne na Cáipéise (déchliceáil chun chuile rud a leathnú nó a laghdú)
+document_outline_label=Creatlach na Cáipéise
+attachments.title=Taispeáin Iatáin
+attachments_label=Iatáin
+thumbs.title=Taispeáin Mionsamhlacha
+thumbs_label=Mionsamhlacha
+findbar.title=Aimsigh sa Cháipéis
+findbar_label=Aimsigh
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Leathanach {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Mionsamhail Leathanaigh {{page}}
+
+# Find panel button title and messages
+find_input.title=Aimsigh
+find_input.placeholder=Aimsigh sa cháipéis…
+find_previous.title=Aimsigh an sampla roimhe seo den nath seo
+find_previous_label=Roimhe seo
+find_next.title=Aimsigh an chéad sampla eile den nath sin
+find_next_label=Ar aghaidh
+find_highlight=Aibhsigh uile
+find_match_case_label=CásÃogair
+find_reached_top=Ag barr na cáipéise, ag leanúint ón mbun
+find_reached_bottom=Ag bun na cáipéise, ag leanúint ón mbarr
+find_not_found=Frása gan aimsiú
+
+# Error panel labels
+error_more_info=Tuilleadh Eolais
+error_less_info=NÃos Lú Eolais
+error_close=Dún
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Teachtaireacht: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Cruach: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Comhad: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=LÃne: {{line}}
+rendering_error=Tharla earráid agus an leathanach á leagan amach.
+
+# Predefined zoom values
+page_scale_width=Leithead Leathanaigh
+page_scale_fit=Laghdaigh go dtà an Leathanach
+page_scale_auto=Súmáil UathoibrÃoch
+page_scale_actual=FÃormhéid
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Earráid
+loading_error=Tharla earráid agus an cháipéis PDF á lódáil.
+invalid_file_error=Comhad neamhbhailà nó truaillithe PDF.
+missing_file_error=Comhad PDF ar iarraidh.
+unexpected_response_error=Freagra ón bhfreastalaà nach rabhthas ag súil leis.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anótáil {{type}}]
+password_label=Cuir an focal faire isteach chun an comhad PDF seo a oscailt.
+password_invalid=Focal faire mÃcheart. Déan iarracht eile.
+password_ok=OK
+password_cancel=Cealaigh
+
+printing_not_supported=Rabhadh: Nà thacaÃonn an brabhsálaà le priontáil go hiomlán.
+printing_not_ready=Rabhadh: Nà féidir an PDF a phriontáil go dtà go mbeidh an cháipéis iomlán lódáilte.
+web_fonts_disabled=Tá clófhoirne Gréasáin dÃchumasaithe: nà féidir clófhoirne leabaithe PDF a úsáid.
diff --git a/thirdparty/pdfjs/web/locale/gd/viewer.properties b/thirdparty/pdfjs/web/locale/gd/viewer.properties
new file mode 100644
index 0000000..bce4dee
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/gd/viewer.properties
@@ -0,0 +1,245 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=An duilleag roimhe
+previous_label=Air ais
+next.title=An ath-dhuilleag
+next_label=Air adhart
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Duilleag
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=Ã {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} Ã {{pagesCount}})
+
+zoom_out.title=Sùm a-mach
+zoom_out_label=Sùm a-mach
+zoom_in.title=Sùm a-steach
+zoom_in_label=Sùm a-steach
+zoom.title=Sùm
+presentation_mode.title=Gearr leum dhan mhodh taisbeanaidh
+presentation_mode_label=Am modh taisbeanaidh
+open_file.title=Fosgail faidhle
+open_file_label=Fosgail
+print.title=Clò-bhuail
+print_label=Clò-bhuail
+download.title=Luchdaich a-nuas
+download_label=Luchdaich a-nuas
+bookmark.title=An sealladh là ithreach (dèan lethbhreac no fosgail e ann an uinneag ùr)
+bookmark_label=An sealladh là ithreach
+
+# Secondary toolbar and context menu
+tools.title=Innealan
+tools_label=Innealan
+first_page.title=Rach gun chiad duilleag
+first_page.label=Rach gun chiad duilleag
+first_page_label=Rach gun chiad duilleag
+last_page.title=Rach gun duilleag mu dheireadh
+last_page.label=Rach gun duilleag mu dheireadh
+last_page_label=Rach gun duilleag mu dheireadh
+page_rotate_cw.title=Cuairtich gu deiseil
+page_rotate_cw.label=Cuairtich gu deiseil
+page_rotate_cw_label=Cuairtich gu deiseil
+page_rotate_ccw.title=Cuairtich gu tuathail
+page_rotate_ccw.label=Cuairtich gu tuathail
+page_rotate_ccw_label=Cuairtich gu tuathail
+
+cursor_text_select_tool.title=Cuir an comas inneal taghadh an teacsa
+cursor_text_select_tool_label=Inneal taghadh an teacsa
+cursor_hand_tool.title=Cuir inneal na là imhe an comas
+cursor_hand_tool_label=Inneal na là imhe
+
+scroll_vertical.title=Cleachd sgroladh inghearach
+scroll_vertical_label=Sgroladh inghearach
+scroll_horizontal.title=Cleachd sgroladh còmhnard
+scroll_horizontal_label=Sgroladh còmhnard
+scroll_wrapped.title=Cleachd sgroladh paisgte
+scroll_wrapped_label=Sgroladh paisgte
+
+spread_none.title=Na cuir còmhla sgoileadh dhuilleagan
+spread_none_label=Gun sgaoileadh dhuilleagan
+spread_odd.title=Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil à ireamh chorr
+spread_odd_label=Sgaoileadh dhuilleagan corra
+spread_even.title=Cuir còmhla duilleagan sgaoilte a thòisicheas le duilleagan aig a bheil à ireamh chothrom
+spread_even_label=Sgaoileadh dhuilleagan cothrom
+
+# Document properties dialog box
+document_properties.title=Roghainnean na sgrìobhainne…
+document_properties_label=Roghainnean na sgrìobhainne…
+document_properties_file_name=Ainm an fhaidhle:
+document_properties_file_size=Meud an fhaidhle:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Tiotal:
+document_properties_author=Ùghdar:
+document_properties_subject=Cuspair:
+document_properties_keywords=Faclan-luirg:
+document_properties_creation_date=Latha a chruthachaidh:
+document_properties_modification_date=Latha atharrachaidh:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Cruthadair:
+document_properties_producer=Saothraiche a' PDF:
+document_properties_version=Tionndadh a' PDF:
+document_properties_page_count=Àireamh de dhuilleagan:
+document_properties_page_size=Meud na duilleige:
+document_properties_page_size_unit_inches=ann an
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portraid
+document_properties_page_size_orientation_landscape=dreach-tìre
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Litir
+document_properties_page_size_name_legal=Laghail
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Grad shealladh-lìn:
+document_properties_linearized_yes=Tha
+document_properties_linearized_no=Chan eil
+document_properties_close=Dùin
+
+print_progress_message=Ag ullachadh na sgrìobhainn airson clò-bhualadh…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Sguir dheth
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Toglaich am bà r-taoibh
+toggle_sidebar_notification.title=Toglaich am bà r-taoibh (tha oir-loidhne/ceanglachain aig an sgrìobhainn)
+toggle_sidebar_label=Toglaich am bà r-taoibh
+document_outline.title=Seall oir-loidhne na sgrìobhainn (dèan briogadh dùbailte airson a h-uile nì a leudachadh/a cho-theannadh)
+document_outline_label=Oir-loidhne na sgrìobhainne
+attachments.title=Seall na ceanglachain
+attachments_label=Ceanglachain
+thumbs.title=Seall na dealbhagan
+thumbs_label=Dealbhagan
+findbar.title=Lorg san sgrìobhainn
+findbar_label=Lorg
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Duilleag a {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Dealbhag duilleag a {{page}}
+
+# Find panel button title and messages
+find_input.title=Lorg
+find_input.placeholder=Lorg san sgrìobhainn...
+find_previous.title=Lorg là thair roimhe na h-abairt seo
+find_previous_label=Air ais
+find_next.title=Lorg ath-là thair na h-abairt seo
+find_next_label=Air adhart
+find_highlight=Soillsich a h-uile
+find_match_case_label=Aire do litrichean mòra is beaga
+find_entire_word_label=Faclan-slà na
+find_reached_top=RÃ inig sinn barr na duilleige, a' leantainn air adhart o bhonn na duilleige
+find_reached_bottom=RÃ inig sinn bonn na duilleige, a' leantainn air adhart o bharr na duilleige
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} Ã {{total}} mhaids
+find_match_count[two]={{current}} Ã {{total}} mhaids
+find_match_count[few]={{current}} Ã {{total}} maidsichean
+find_match_count[many]={{current}} Ã {{total}} maids
+find_match_count[other]={{current}} Ã {{total}} maids
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Barrachd air {{limit}} maids
+find_match_count_limit[one]=Barrachd air {{limit}} mhaids
+find_match_count_limit[two]=Barrachd air {{limit}} mhaids
+find_match_count_limit[few]=Barrachd air {{limit}} maidsichean
+find_match_count_limit[many]=Barrachd air {{limit}} maids
+find_match_count_limit[other]=Barrachd air {{limit}} maids
+find_not_found=Cha deach an abairt a lorg
+
+# Error panel labels
+error_more_info=Barrachd fiosrachaidh
+error_less_info=Nas lugha de dh'fhiosrachadh
+error_close=Dùin
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Teachdaireachd: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stac: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Faidhle: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Loidhne: {{line}}
+rendering_error=Thachair mearachd rè reandaradh na duilleige.
+
+# Predefined zoom values
+page_scale_width=Leud na duilleige
+page_scale_fit=Freagair ri meud na duilleige
+page_scale_auto=Sùm fèin-obrachail
+page_scale_actual=Am fìor-mheud
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Mearachd
+loading_error=Thachair mearachd rè luchdadh a' PDF.
+invalid_file_error=Faidhle PDF a tha mì-dhligheach no coirbte.
+missing_file_error=Faidhle PDF a tha a dhìth.
+unexpected_response_error=Freagairt on fhrithealaiche ris nach robh dùil.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Nòtachadh {{type}}]
+password_label=Cuir a-steach am facal-faire gus am faidhle PDF seo fhosgladh.
+password_invalid=Tha am facal-faire cearr. Nach fheuch thu ris a-rithist?
+password_ok=Ceart ma-thÃ
+password_cancel=Sguir dheth
+
+printing_not_supported=Rabhadh: Chan eil am brabhsair seo a' cur là n-taic ri clò-bhualadh.
+printing_not_ready=Rabhadh: Cha deach am PDF a luchdadh gu tur airson clò-bhualadh.
+web_fonts_disabled=Tha cruthan-clò lìn à comas: Chan urrainn dhuinn cruthan-clò PDF leabaichte a chleachdadh.
diff --git a/thirdparty/pdfjs/web/locale/gl/viewer.properties b/thirdparty/pdfjs/web/locale/gl/viewer.properties
new file mode 100644
index 0000000..fedfb8e
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/gl/viewer.properties
@@ -0,0 +1,253 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Páxina anterior
+previous_label=Anterior
+next.title=Seguinte páxina
+next_label=Seguinte
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Páxina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Reducir
+zoom_out_label=Reducir
+zoom_in.title=Ampliar
+zoom_in_label=Ampliar
+zoom.title=Zoom
+presentation_mode.title=Cambiar ao modo presentación
+presentation_mode_label=Modo presentación
+open_file.title=Abrir ficheiro
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copiar ou abrir nunha nova xanela)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Ferramentas
+tools_label=Ferramentas
+first_page.title=Ir á primeira páxina
+first_page.label=Ir á primeira páxina
+first_page_label=Ir á primeira páxina
+last_page.title=Ir á última páxina
+last_page.label=Ir á última páxina
+last_page_label=Ir á última páxina
+page_rotate_cw.title=Rotar no sentido das agullas do reloxo
+page_rotate_cw.label=Rotar no sentido das agullas do reloxo
+page_rotate_cw_label=Rotar no sentido das agullas do reloxo
+page_rotate_ccw.title=Rotar no sentido contrario ás agullas do reloxo
+page_rotate_ccw.label=Rotar no sentido contrario ás agullas do reloxo
+page_rotate_ccw_label=Rotar no sentido contrario ás agullas do reloxo
+
+cursor_text_select_tool.title=Activar a ferramenta de selección de texto
+cursor_text_select_tool_label=Ferramenta de selección de texto
+cursor_hand_tool.title=Activar a ferramenta man
+cursor_hand_tool_label=Ferramenta man
+
+scroll_vertical.title=Usar o desprazamento vertical
+scroll_vertical_label=Desprazamento vertical
+scroll_horizontal.title=Usar o desprazamento horizontal
+scroll_horizontal_label=Desprazamento horizontal
+scroll_wrapped.title=Usar desprazamento en bloque
+scroll_wrapped_label=Desprazamento en bloque
+
+spread_none.title=Non agrupar páxinas
+spread_none_label=Ningún agrupamento
+spread_odd.title=Crea grupo de páxinas que comezan con números de páxina impares
+spread_odd_label=Agrupamento impar
+spread_even.title=Crea grupo de páxinas que comezan con números de páxina pares
+spread_even_label=Agrupamento par
+
+# Document properties dialog box
+document_properties.title=Propiedades do documento…
+document_properties_label=Propiedades do documento…
+document_properties_file_name=Nome do ficheiro:
+document_properties_file_size=Tamaño do ficheiro:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=TÃtulo:
+document_properties_author=Autor:
+document_properties_subject=Asunto:
+document_properties_keywords=Palabras clave:
+document_properties_creation_date=Data de creación:
+document_properties_modification_date=Data de modificación:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creado por:
+document_properties_producer=Xenerador do PDF:
+document_properties_version=Versión de PDF:
+document_properties_page_count=Número de páxinas:
+document_properties_page_size=Tamaño da páxina:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=Vertical
+document_properties_page_size_orientation_landscape=Horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Visualización rápida das páxinas web:
+document_properties_linearized_yes=Si
+document_properties_linearized_no=Non
+document_properties_close=Pechar
+
+print_progress_message=Preparando documento para imprimir…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Amosar/agochar a barra lateral
+toggle_sidebar_notification.title=Amosar/agochar a barra lateral (o documento contén un esquema ou anexos)
+toggle_sidebar_notification2.title=Alternar barra lateral (o documento contén esquema/anexos/capas)
+toggle_sidebar_label=Amosar/agochar a barra lateral
+document_outline.title=Amosar o esquema do documento (prema dúas veces para expandir/contraer todos os elementos)
+document_outline_label=Esquema do documento
+attachments.title=Amosar anexos
+attachments_label=Anexos
+layers.title=Mostrar capas (prema dúas veces para restaurar todas as capas o estado predeterminado)
+layers_label=Capas
+thumbs.title=Amosar miniaturas
+thumbs_label=Miniaturas
+current_outline_item.title=Atopar o elemento delimitado actualmente
+current_outline_item_label=Elemento delimitado actualmente
+findbar.title=Atopar no documento
+findbar_label=Atopar
+
+additional_layers=Capas adicionais
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Páxina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Páxina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura da páxina {{page}}
+
+# Find panel button title and messages
+find_input.title=Atopar
+find_input.placeholder=Atopar no documento…
+find_previous.title=Atopar a anterior aparición da frase
+find_previous_label=Anterior
+find_next.title=Atopar a seguinte aparición da frase
+find_next_label=Seguinte
+find_highlight=Realzar todo
+find_match_case_label=Diferenciar maiúsculas de minúsculas
+find_entire_word_label=Palabras completas
+find_reached_top=Chegouse ao inicio do documento, continuar desde o final
+find_reached_bottom=Chegouse ao final do documento, continuar desde o inicio
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} coincidencia
+find_match_count[two]={{current}} de {{total}} coincidencias
+find_match_count[few]={{current}} de {{total}} coincidencias
+find_match_count[many]={{current}} de {{total}} coincidencias
+find_match_count[other]={{current}} de {{total}} coincidencias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Máis de {{limit}} coincidencias
+find_match_count_limit[one]=Máis de {{limit}} coincidencia
+find_match_count_limit[two]=Máis de {{limit}} coincidencias
+find_match_count_limit[few]=Máis de {{limit}} coincidencias
+find_match_count_limit[many]=Máis de {{limit}} coincidencias
+find_match_count_limit[other]=Máis de {{limit}} coincidencias
+find_not_found=Non se atopou a frase
+
+# Error panel labels
+error_more_info=Máis información
+error_less_info=Menos información
+error_close=Pechar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (Identificador da compilación: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensaxe: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Ficheiro: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Liña: {{line}}
+rendering_error=Produciuse un erro ao representar a páxina.
+
+# Predefined zoom values
+page_scale_width=Largura da páxina
+page_scale_fit=Axuste de páxina
+page_scale_auto=Zoom automático
+page_scale_actual=Tamaño actual
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Erro
+loading_error=Produciuse un erro ao cargar o PDF.
+invalid_file_error=Ficheiro PDF danado ou non válido.
+missing_file_error=Falta o ficheiro PDF.
+unexpected_response_error=Resposta inesperada do servidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotación {{type}}]
+password_label=Escriba o contrasinal para abrir este ficheiro PDF.
+password_invalid=Contrasinal incorrecto. Tente de novo.
+password_ok=Aceptar
+password_cancel=Cancelar
+
+printing_not_supported=Aviso: A impresión non é compatÃbel de todo con este navegador.
+printing_not_ready=Aviso: O PDF non se cargou completamente para imprimirse.
+web_fonts_disabled=Desactiváronse as fontes web: foi imposÃbel usar as fontes incrustadas no PDF.
diff --git a/thirdparty/pdfjs/web/locale/gn/viewer.properties b/thirdparty/pdfjs/web/locale/gn/viewer.properties
new file mode 100644
index 0000000..7f79a22
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/gn/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Kuatiarogue mboyvegua
+previous_label=Mboyvegua
+next.title=Kuatiarogue upeigua
+next_label=Upeigua
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Kuatiarogue
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} gui
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Momichĩ
+zoom_out_label=Momichĩ
+zoom_in.title=Mbotuicha
+zoom_in_label=Mbotuicha
+zoom.title=Tuichakue
+presentation_mode.title=Jehechauka reko moambue
+presentation_mode_label=Jehechauka reko
+open_file.title=Marandurendápe jeike
+open_file_label=Jeike
+print.title=Monguatia
+print_label=Monguatia
+download.title=Mboguejy
+download_label=Mboguejy
+bookmark.title=Ag̃agua jehecha (mbohasarã térã eike peteĩ ovetã pyahúpe)
+bookmark_label=Ag̃agua jehecha
+
+# Secondary toolbar and context menu
+tools.title=Tembipuru
+tools_label=Tembipuru
+first_page.title=Kuatiarogue ñepyrũme jeho
+first_page.label=Kuatiarogue ñepyrũme jeho
+first_page_label=Kuatiarogue ñepyrũme jeho
+last_page.title=Kuatiarogue pahápe jeho
+last_page.label=Kuatiarogue pahápe jeho
+last_page_label=Kuatiarogue pahápe jeho
+page_rotate_cw.title=Aravóicha mbojere
+page_rotate_cw.label=Aravóicha mbojere
+page_rotate_cw_label=Aravóicha mbojere
+page_rotate_ccw.title=Aravo rapykue gotyo mbojere
+page_rotate_ccw.label=Aravo rapykue gotyo mbojere
+page_rotate_ccw_label=Aravo rapykue gotyo mbojere
+
+cursor_text_select_tool.title=Emyandy moñe’ẽrã jeporavo rembipuru
+cursor_text_select_tool_label=Moñe’ẽrã jeporavo rembipuru
+cursor_hand_tool.title=Tembipuru po pegua myandy
+cursor_hand_tool_label=Tembipuru po pegua
+
+scroll_vertical.title=Eipuru jeku’e ykeguáva
+scroll_vertical_label=Jeku’e ykeguáva
+scroll_horizontal.title=Eipuru jeku’e yvate gotyo
+scroll_horizontal_label=Jeku’e yvate gotyo
+scroll_wrapped.title=Eipuru jeku’e mbohyrupyre
+scroll_wrapped_label=Jeku’e mbohyrupyre
+
+spread_none.title=Ani ejuaju spreads kuatiarogue ndive
+spread_none_label=Spreads ỹre
+spread_odd.title=Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue impar-vagui
+spread_odd_label=Spreads impar
+spread_even.title=Embojuaju kuatiarogue jepysokue eñepyrũvo kuatiarogue par-vagui
+spread_even_label=Ipukuve uvei
+
+# Document properties dialog box
+document_properties.title=Kuatia mba’etee…
+document_properties_label=Kuatia mba’etee…
+document_properties_file_name=Marandurenda réra:
+document_properties_file_size=Marandurenda tuichakue:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Teratee:
+document_properties_author=Apohára:
+document_properties_subject=Mba’egua:
+document_properties_keywords=Jehero:
+document_properties_creation_date=Teñoihague arange:
+document_properties_modification_date=Iñambue hague arange:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Apo’ypyha:
+document_properties_producer=PDF mbosako’iha:
+document_properties_version=PDF mbojuehegua:
+document_properties_page_count=Kuatiarogue papapy:
+document_properties_page_size=Kuatiarogue tuichakue:
+document_properties_page_size_unit_inches=Amo
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=Oĩháicha
+document_properties_page_size_orientation_landscape=apaisado
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Kuatiañe’ẽ
+document_properties_page_size_name_legal=Tee
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Ñanduti jahecha pya’e:
+document_properties_linearized_yes=Añete
+document_properties_linearized_no=Ahániri
+document_properties_close=Mboty
+
+print_progress_message=Embosako’i kuatia emonguatia hag̃ua…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Heja
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Tenda yke moambue
+toggle_sidebar_notification.title=Embojopyru tenda ykegua (kuatia oguereko kora/marandurenda moirũha)
+toggle_sidebar_notification2.title=Embojopyru tenda ykegua (kuatia oguereko kuaakaha/moirũha/ñuãha)
+toggle_sidebar_label=Tenda yke moambue
+document_outline.title=Ehechauka kuatia rape (eikutu mokõi jey embotuicha/emomichĩ hag̃ua opavavete mba’epuru)
+document_outline_label=Kuatia apopyre
+attachments.title=Moirũha jehechauka
+attachments_label=Moirũha
+layers.title=Ehechauka ñuãha (eikutu jo’a emomba’apo hag̃ua opaite ñuãha tekoypýpe)
+layers_label=Ñuãha
+thumbs.title=Mba’emirĩ jehechauka
+thumbs_label=Mba’emirĩ
+findbar.title=Kuatiápe jeheka
+findbar_label=Juhu
+
+additional_layers=Ñuãha moirũguáva
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Kuatiarogue {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Kuatiarogue {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Kuatiarogue mba’emirĩ {{page}}
+
+# Find panel button title and messages
+find_input.title=Juhu
+find_input.placeholder=Kuatiápe jejuhu…
+find_previous.title=Ejuhu ñe’ẽrysýi osẽ’ypy hague
+find_previous_label=Mboyvegua
+find_next.title=Eho ñe’ẽ juhupyre upeiguávape
+find_next_label=Upeigua
+find_highlight=Embojekuaavepa
+find_match_case_label=Ejesareko taiguasu/taimichĩre
+find_entire_word_label=Ñe’ẽ oĩmbáva
+find_reached_top=Ojehupyty kuatia ñepyrũ, oku’ejeýta kuatia paha guive
+find_reached_bottom=Ojehupyty kuatia paha, oku’ejeýta kuatia ñepyrũ guive
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} {{total}} ojojoguáva
+find_match_count[two]={{current}} {{total}} ojojoguáva
+find_match_count[few]={{current}} {{total}} ojojoguáva
+find_match_count[many]={{current}} {{total}} ojojoguáva
+find_match_count[other]={{current}} {{total}} ojojoguáva
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Hetave {{limit}} ojojoguáva
+find_match_count_limit[one]=Hetave {{limit}} ojojogua
+find_match_count_limit[two]=Hetave {{limit}} ojojoguáva
+find_match_count_limit[few]=Hetave {{limit}} ojojoguáva
+find_match_count_limit[many]=Hetave {{limit}} ojojoguáva
+find_match_count_limit[other]=Hetave {{limit}} ojojoguáva
+find_not_found=Ñe’ẽrysýi ojejuhu’ỹva
+
+# Error panel labels
+error_more_info=Maranduve
+error_less_info=Sa’ive marandu
+error_close=Mboty
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Ñe’ẽmondo: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Mbojo’apy: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Marandurenda: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Tairenda: {{line}}
+rendering_error=Oiko jejavy ehechaukasévo kuatiarogue.
+
+# Predefined zoom values
+page_scale_width=Kuatiarogue pekue
+page_scale_fit=Kuatiarogue ñemoĩporã
+page_scale_auto=Tuichakue ijeheguÃva
+page_scale_actual=Tuichakue ag̃agua
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=OÄ©vaÃva
+loading_error=Oiko jejavy PDF oñemyeñyhẽnguévo.
+invalid_file_error=PDF marandurenda ndoikóiva térã ivaipyréva.
+missing_file_error=Ndaipóri PDF marandurenda
+unexpected_response_error=Mohendahavusu mbohovái ñeha’arõ’ỹva.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Jehaipy {{type}}]
+password_label=Emoinge ñe’ẽñemi eipe’a hag̃ua ko marandurenda PDF.
+password_invalid=Ñe’ẽñemi ndoikóiva. Eha’ã jey.
+password_ok=MONEĨ
+password_cancel=Heja
+
+printing_not_supported=Kyhyjerã: Ñembokuatia ndojokupytypái ko kundahára ndive.
+printing_not_ready=Kyhyjerã: Ko PDF nahenyhẽmbái oñembokuatia hag̃uáicha.
+web_fonts_disabled=Ñanduti taity oñemongéma: ndaikatumo’ãi eipuru PDF jehai’Ãva taity.
diff --git a/thirdparty/pdfjs/web/locale/gu-IN/viewer.properties b/thirdparty/pdfjs/web/locale/gu-IN/viewer.properties
new file mode 100644
index 0000000..579c068
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/gu-IN/viewer.properties
@@ -0,0 +1,241 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=પહેલાનૠપાનà«àª‚
+previous_label=પહેલાનà«
+next.title=આગળનૠપાનà«àª‚
+next_label=આગળનà«àª‚
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=પાનà«àª‚
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=નો {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} નો {{pagesCount}})
+
+zoom_out.title=મોટૠકરો
+zoom_out_label=મોટૠકરો
+zoom_in.title=નાનà«àª‚ કરો
+zoom_in_label=નાનà«àª‚ કરો
+zoom.title=નાનà«àª‚ મોટૠકરો
+presentation_mode.title=રજૂઆત સà«àª¥àª¿àª¤àª¿àª®àª¾àª‚ જાવ
+presentation_mode_label=રજૂઆત સà«àª¥àª¿àª¤àª¿
+open_file.title=ફાઇલ ખોલો
+open_file_label=ખોલો
+print.title=છાપો
+print_label=છારો
+download.title=ડાઉનલોડ
+download_label=ડાઉનલોડ
+bookmark.title=વરà«àª¤àª®àª¾àª¨ દૃશà«àª¯ (નવી વિનà«àª¡à«‹àª®àª¾àª‚ નકલ કરો અથવા ખોલો)
+bookmark_label=વરà«àª¤àª®àª¾àª¨ દૃશà«àª¯
+
+# Secondary toolbar and context menu
+tools.title=સાધનો
+tools_label=સાધનો
+first_page.title=પહેલાં પાનામાં જાવ
+first_page.label=પહેલાં પાનામાં જાવ
+first_page_label=પà«àª°àª¥àª® પાનાં પર જાવ
+last_page.title=છેલà«àª²àª¾ પાનાં પર જાવ
+last_page.label=છેલà«àª²àª¾ પાનામાં જાવ
+last_page_label=છેલà«àª²àª¾ પાનાં પર જાવ
+page_rotate_cw.title=ઘડિયાળનાં કાંટા તરફ ફેરવો
+page_rotate_cw.label=ઘડિયાળનાં કાંટાની જેમ ફેરવો
+page_rotate_cw_label=ઘડિયાળનાં કાંટા તરફ ફેરવો
+page_rotate_ccw.title=ઘડિયાળનાં કાંટાની ઉલટી દિશામાં ફેરવો
+page_rotate_ccw.label=ઘડિયાળનાં કાંટાની ઉલટી દિશામાં ફેરવો
+page_rotate_ccw_label=ઘડિયાળનાં કાંટાની વિરà«àª¦à«àª¦ ફેરવો
+
+cursor_text_select_tool.title=ટેકà«àª¸à«àªŸ પસંદગી ટૂલ સકà«àª·àª® કરો
+cursor_text_select_tool_label=ટેકà«àª¸à«àªŸ પસંદગી ટૂલ
+cursor_hand_tool.title=હાથનાં સાધનને સકà«àª°àª¿àª¯ કરો
+cursor_hand_tool_label=હેનà«àª¡ ટૂલ
+
+scroll_vertical.title=ઊàªà«€ સà«àª•à«àª°à«‹àª²àª¿àª‚ગનો ઉપયોગ કરો
+scroll_vertical_label=ઊàªà«€ સà«àª•à«àª°à«‹àª²àª¿àª‚ગ
+scroll_horizontal.title=આડી સà«àª•à«àª°à«‹àª²àª¿àª‚ગનો ઉપયોગ કરો
+scroll_horizontal_label=આડી સà«àª•à«àª°à«‹àª²àª¿àª‚ગ
+scroll_wrapped.title=આવરિત સà«àª•à«àª°à«‹àª²àª¿àª‚ગનો ઉપયોગ કરો
+scroll_wrapped_label=આવરિત સà«àª•à«àª°à«‹àª²àª¿àª‚ગ
+
+spread_none.title=પૃષà«àª સà«àªªà«àª°à«‡àª¡àª®àª¾àª‚ જોડાવશો નહીં
+spread_none_label=કોઈ સà«àªªà«àª°à«‡àª¡ નથી
+spread_odd.title=àªàª•à«€-કà«àª°àª®àª¾àª‚કિત પૃષà«àª à«‹ સાથે પà«àª°àª¾àª°àª‚ઠથતાં પૃષà«àª સà«àªªà«àª°à«‡àª¡àª®àª¾àª‚ જોડાઓ
+spread_odd_label=àªàª•à«€ સà«àªªà«àª°à«‡àª¡à«àª¸
+spread_even.title=નંબર-કà«àª°àª®àª¾àª‚કિત પૃષà«àª ોથી શરૂ થતાં પૃષà«àª સà«àªªà«àª°à«‡àª¡àª®àª¾àª‚ જોડાઓ
+spread_even_label=સરખà«àª‚ ફેલાવવà«àª‚
+
+# Document properties dialog box
+document_properties.title=દસà«àª¤àª¾àªµà«‡àªœ ગà«àª£àª§àª°à«àª®à«‹â€¦
+document_properties_label=દસà«àª¤àª¾àªµà«‡àªœ ગà«àª£àª§àª°à«àª®à«‹â€¦
+document_properties_file_name=ફાઇલ નામ:
+document_properties_file_size=ફાઇલ માપ:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} બાઇટ)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} બાઇટ)
+document_properties_title=શીરà«àª·àª•:
+document_properties_author=લેખક:
+document_properties_subject=વિષય:
+document_properties_keywords=કિવરà«àª¡:
+document_properties_creation_date=નિરà«àª®àª¾àª£ તારીખ:
+document_properties_modification_date=ફેરફાર તારીખ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=નિરà«àª®àª¾àª¤àª¾:
+document_properties_producer=PDF નિરà«àª®àª¾àª¤àª¾:
+document_properties_version=PDF આવૃતà«àª¤àª¿:
+document_properties_page_count=પાનાં ગણતરી:
+document_properties_page_size=પૃષà«àª નà«àª‚ કદ:
+document_properties_page_size_unit_inches=ઇંચ
+document_properties_page_size_unit_millimeters=મીમી
+document_properties_page_size_orientation_portrait=ઉàªà«àª‚
+document_properties_page_size_orientation_landscape=આડà«
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=પતà«àª°
+document_properties_page_size_name_legal=કાયદાકીય
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=àªàª¡àªªà«€ વૅબ દૃશà«àª¯:
+document_properties_linearized_yes=હા
+document_properties_linearized_no=ના
+document_properties_close=બંધ કરો
+
+print_progress_message=છાપકામ માટે દસà«àª¤àª¾àªµà«‡àªœ તૈયાર કરી રહà«àª¯àª¾ છે…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=રદ કરો
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=ટૉગલ બાજà«àªªàªŸà«àªŸà«€
+toggle_sidebar_notification.title=સાઇડબારને ટૉગલ કરો(દસà«àª¤àª¾àªµà«‡àªœàª¨à«€ રૂપરેખા/જોડાણો શામેલ છે)
+toggle_sidebar_label=ટૉગલ બાજà«àªªàªŸà«àªŸà«€
+document_outline.title=દસà«àª¤àª¾àªµà«‡àªœàª¨à«€ રૂપરેખા બતાવો(બધી આઇટમà«àª¸àª¨à«‡ વિસà«àª¤à«ƒàª¤/સંકà«àªšàª¿àª¤ કરવા માટે ડબલ-કà«àª²àª¿àª• કરો)
+document_outline_label=દસà«àª¤àª¾àªµà«‡àªœ રૂપરેખા
+attachments.title=જોડાણોને બતાવો
+attachments_label=જોડાણો
+thumbs.title=થંબનેલà«àª¸ બતાવો
+thumbs_label=થંબનેલà«àª¸
+findbar.title=દસà«àª¤àª¾àªµà«‡àªœàª®àª¾àª‚ શોધો
+findbar_label=શોધો
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=પાનà«àª‚ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=પાનાં {{page}} નà«àª‚ થંબનેલà«àª¸
+
+# Find panel button title and messages
+find_input.title=શોધો
+find_input.placeholder=દસà«àª¤àª¾àªµà«‡àªœàª®àª¾àª‚ શોધો…
+find_previous.title=શબà«àª¦àª¸àª®à«‚હની પાછલી ઘટનાને શોધો
+find_previous_label=પહેલાંનà«
+find_next.title=શબà«àª¦àª¸àª®à«‚હની આગળની ઘટનાને શોધો
+find_next_label=આગળનà«àª‚
+find_highlight=બધૠપà«àª°àª•ાશિત કરો
+find_match_case_label=કેસ બંધબેસાડો
+find_entire_word_label=સંપૂરà«àª£ શબà«àª¦à«‹
+find_reached_top=દસà«àª¤àª¾àªµà«‡àªœàª¨àª¾àª‚ ટોચે પહોંચી ગયા, તળિયેથી ચાલૠકરેલ હતà«
+find_reached_bottom=દસà«àª¤àª¾àªµà«‡àªœàª¨àª¾àª‚ અંતે પહોંચી ગયા, ઉપરથી ચાલૠકરેલ હતà«
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} માંથી {{current}} સરખà«àª‚ મળà«àª¯à«àª‚
+find_match_count[two]={{total}} માંથી {{current}} સરખા મળà«àª¯àª¾àª‚
+find_match_count[few]={{total}} માંથી {{current}} સરખા મળà«àª¯àª¾àª‚
+find_match_count[many]={{total}} માંથી {{current}} સરખા મળà«àª¯àª¾àª‚
+find_match_count[other]={{total}} માંથી {{current}} સરખા મળà«àª¯àª¾àª‚
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} કરતાં વધૠસરખા મળà«àª¯àª¾àª‚
+find_match_count_limit[one]={{limit}} કરતાં વધૠસરખà«àª‚ મળà«àª¯à«àª‚
+find_match_count_limit[two]={{limit}} કરતાં વધૠસરખા મળà«àª¯àª¾àª‚
+find_match_count_limit[few]={{limit}} કરતાં વધૠસરખા મળà«àª¯àª¾àª‚
+find_match_count_limit[many]={{limit}} કરતાં વધૠસરખા મળà«àª¯àª¾àª‚
+find_match_count_limit[other]={{limit}} કરતાં વધૠસરખા મળà«àª¯àª¾àª‚
+find_not_found=શબà«àª¦àª¸àª®à«‚હ મળà«àª¯à« નથી
+
+# Error panel labels
+error_more_info=વધારે જાણકારી
+error_less_info=ઓછી જાણકારી
+error_close=બંધ કરો
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=સંદેશો: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=સà«àªŸà«‡àª•: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ફાઇલ: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=વાકà«àª¯: {{line}}
+rendering_error=àªà«‚લ ઉદà«àªàªµà«€ જà«àª¯àª¾àª°à«‡ પાનાંનૠરેનà«àª¡ કરી રહà«àª¯àª¾ હોય.
+
+# Predefined zoom values
+page_scale_width=પાનાની પહોળાઇ
+page_scale_fit=પાનà«àª‚ બંધબેસતà«
+page_scale_auto=આપમેળે નાનà«àª‚મોટૠકરો
+page_scale_actual=ચોકà«àª•સ માપ
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=àªà«‚લ
+loading_error=àªà«‚લ ઉદà«àªàªµà«€ જà«àª¯àª¾àª°à«‡ PDF ને લાવી રહà«àª¯àª¾ હોય.
+invalid_file_error=અયોગà«àª¯ અથવા àªàª¾àª‚ગેલ PDF ફાઇલ.
+missing_file_error=ગà«àª® થયેલ PDF ફાઇલ.
+unexpected_response_error=અનપેકà«àª·àª¿àª¤ સરà«àªµàª° પà«àª°àª¤àª¿àª¸àª¾àª¦.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=આ PDF ફાઇલને ખોલવા પાસવરà«àª¡àª¨à«‡ દાખલ કરો.
+password_invalid=અયોગà«àª¯ પાસવરà«àª¡. મહેરબાની કરીને ફરી પà«àª°àª¯àª¤à«àª¨ કરો.
+password_ok=બરાબર
+password_cancel=રદ કરો
+
+printing_not_supported=ચેતવણી: છાપવાનà«àª‚ આ બà«àª°àª¾àª‰àªàª° દà«àª¦àª¾àª°àª¾ સંપૂરà«àª£àªªàª£à«‡ આધારàªà«‚ત નથી.
+printing_not_ready=Warning: PDF ઠછાપવા માટે સંપૂરà«àª£àªªàª£à«‡ લાવેલ છે.
+web_fonts_disabled=વેબ ફોનà«àªŸ નિષà«àª•à«àª°àª¿àª¯ થયેલ છે: àªàª®à«àª¬à«‡àª¡ થયેલ PDF ફોનà«àªŸàª¨à«‡ વાપરવાનà«àª‚ અસમરà«àª¥.
diff --git a/thirdparty/pdfjs/web/locale/he/viewer.properties b/thirdparty/pdfjs/web/locale/he/viewer.properties
new file mode 100644
index 0000000..02069df
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/he/viewer.properties
@@ -0,0 +1,253 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=דף קוד×
+previous_label=קוד×
+next.title=דף הב×
+next_label=הב×
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=דף
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=מתוך {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} מתוך {{pagesCount}})
+
+zoom_out.title=התרחקות
+zoom_out_label=התרחקות
+zoom_in.title=התקרבות
+zoom_in_label=התקרבות
+zoom.title=מרחק מתצוגה
+presentation_mode.title=מעבר למצב מצגת
+presentation_mode_label=מצב מצגת
+open_file.title=פתיחת קובץ
+open_file_label=פתיחה
+print.title=הדפסה
+print_label=הדפסה
+download.title=הורדה
+download_label=הורדה
+bookmark.title=תצוגה × ×•×›×—×™×ª (העתקה ×ו פתיחה בחלון חדש)
+bookmark_label=תצוגה × ×•×›×—×™×ª
+
+# Secondary toolbar and context menu
+tools.title=כלי×
+tools_label=כלי×
+first_page.title=מעבר לעמוד הר×שון
+first_page.label=מעבר לעמוד הר×שון
+first_page_label=מעבר לעמוד הר×שון
+last_page.title=מעבר לעמוד ×”×חרון
+last_page.label=מעבר לעמוד ×”×חרון
+last_page_label=מעבר לעמוד ×”×חרון
+page_rotate_cw.title=הטיה ×¢× ×›×™×•×•×Ÿ השעון
+page_rotate_cw.label=הטיה ×¢× ×›×™×•×•×Ÿ השעון
+page_rotate_cw_label=הטיה ×¢× ×›×™×•×•×Ÿ השעון
+page_rotate_ccw.title=הטיה ×›× ×’×“ כיוון השעון
+page_rotate_ccw.label=הטיה ×›× ×’×“ כיוון השעון
+page_rotate_ccw_label=הטיה ×›× ×’×“ כיוון השעון
+
+cursor_text_select_tool.title=הפעלת כלי בחירת טקסט
+cursor_text_select_tool_label=כלי בחירת טקסט
+cursor_hand_tool.title=הפעלת כלי היד
+cursor_hand_tool_label=כלי יד
+
+scroll_vertical.title=שימוש בגלילה ×× ×›×™×ª
+scroll_vertical_label=גלילה ×× ×›×™×ª
+scroll_horizontal.title=שימוש בגלילה ×ופקית
+scroll_horizontal_label=גלילה ×ופקית
+scroll_wrapped.title=שימוש בגלילה רציפה
+scroll_wrapped_label=גלילה רציפה
+
+spread_none.title=×œ× ×œ×¦×¨×£ מפתחי עמודי×
+spread_none_label=×œ×œ× ×ž×¤×ª×—×™×
+spread_odd.title=צירוף מפתחי ×¢×ž×•×“×™× ×©×ž×ª×—×™×œ×™× ×‘×“×¤×™× ×¢× ×ž×¡×¤×¨×™× ×י־זוגיי×
+spread_odd_label=×ž×¤×ª×—×™× ×י־זוגיי×
+spread_even.title=צירוף מפתחי ×¢×ž×•×“×™× ×©×ž×ª×—×™×œ×™× ×‘×“×¤×™× ×¢× ×ž×¡×¤×¨×™× ×–×•×’×™×™×
+spread_even_label=×ž×¤×ª×—×™× ×–×•×’×™×™×
+
+# Document properties dialog box
+document_properties.title=מ××¤×™×™× ×™ מסמך…
+document_properties_label=מ××¤×™×™× ×™ מסמך…
+document_properties_file_name=×©× ×§×•×‘×¥:
+document_properties_file_size=גודל הקובץ:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} ק״ב ({{size_b}} בתי×)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} מ״ב ({{size_b}} בתי×)
+document_properties_title=כותרת:
+document_properties_author=מחבר:
+document_properties_subject=× ×•×©×:
+document_properties_keywords=מילות מפתח:
+document_properties_creation_date=ת×ריך יצירה:
+document_properties_modification_date=ת×ריך ×©×™× ×•×™:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=יוצר:
+document_properties_producer=יצרן PDF:
+document_properties_version=גרסת PDF:
+document_properties_page_count=מספר דפי×:
+document_properties_page_size=גודל העמוד:
+document_properties_page_size_unit_inches=××™× ×³
+document_properties_page_size_unit_millimeters=מ״מ
+document_properties_page_size_orientation_portrait=ל×ורך
+document_properties_page_size_orientation_landscape=לרוחב
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=מכתב
+document_properties_page_size_name_legal=דף משפטי
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=תצוגת דף מהירה:
+document_properties_linearized_yes=כן
+document_properties_linearized_no=ל×
+document_properties_close=סגירה
+
+print_progress_message=מסמך ×‘×”×›× ×” להדפסה…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ביטול
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=הצגה/הסתרה של סרגל הצד
+toggle_sidebar_notification.title=החלפת תצוגת סרגל צד (מסמך שמכיל תוכן ×¢× ×™×™× ×™×/×§×‘×¦×™× ×ž×¦×•×¨×¤×™×)
+toggle_sidebar_notification2.title=החלפת תצוגת סרגל צד (מסמך שמכיל תוכן ×¢× ×™×™× ×™×/×§×‘×¦×™× ×ž×¦×•×¨×¤×™×/שכבות)
+toggle_sidebar_label=הצגה/הסתרה של סרגל הצד
+document_outline.title=הצגת תוכן ×”×¢× ×™×™× ×™× ×©×œ המסמך (לחיצה כפולה כדי להרחיב ×ו ×œ×¦×ž×¦× ×ת כל הפריטי×)
+document_outline_label=תוכן ×”×¢× ×™×™× ×™× ×©×œ המסמך
+attachments.title=הצגת צרופות
+attachments_label=צרופות
+layers.title=הצגת שכבות (יש ללחוץ לחיצה כפולה כדי ל×פס ×ת כל השכבות למצב ברירת המחדל)
+layers_label=שכבות
+thumbs.title=הצגת תצוגה מקדימה
+thumbs_label=תצוגה מקדימה
+current_outline_item.title=מצי×ת פריט תוכן ×”×¢× ×™×™× ×™× ×”× ×•×›×—×™
+current_outline_item_label=פריט תוכן ×”×¢× ×™×™× ×™× ×”× ×•×›×—×™
+findbar.title=חיפוש במסמך
+findbar_label=חיפוש
+
+additional_layers=שכבות × ×•×¡×¤×•×ª
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=עמוד {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=עמוד {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=תצוגה מקדימה של עמוד {{page}}
+
+# Find panel button title and messages
+find_input.title=חיפוש
+find_input.placeholder=חיפוש במסמך…
+find_previous.title=מצי×ת המופע ×”×§×•×“× ×©×œ הביטוי
+find_previous_label=קוד×
+find_next.title=מצי×ת המופע ×”×‘× ×©×œ הביטוי
+find_next_label=הב×
+find_highlight=הדגשת הכול
+find_match_case_label=הת×מת ×ותיות
+find_entire_word_label=×ž×™×œ×™× ×©×œ×ž×•×ª
+find_reached_top=×”×’×™×¢ לר×ש הדף, ממשיך מלמטה
+find_reached_bottom=הגיע לסוף הדף, ממשיך מלמעלה
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=תוצ××” {{current}} מתוך {{total}}
+find_match_count[two]={{current}} מתוך {{total}} תוצ×ות
+find_match_count[few]={{current}} מתוך {{total}} תוצ×ות
+find_match_count[many]={{current}} מתוך {{total}} תוצ×ות
+find_match_count[other]={{current}} מתוך {{total}} תוצ×ות
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=יותר מ־{{limit}} תוצ×ות
+find_match_count_limit[one]=יותר מתוצ××” ×חת
+find_match_count_limit[two]=יותר מ־{{limit}} תוצ×ות
+find_match_count_limit[few]=יותר מ־{{limit}} תוצ×ות
+find_match_count_limit[many]=יותר מ־{{limit}} תוצ×ות
+find_match_count_limit[other]=יותר מ־{{limit}} תוצ×ות
+find_not_found=הביטוי ×œ× × ×ž×¦×
+
+# Error panel labels
+error_more_info=מידע × ×•×¡×£
+error_less_info=פחות מידע
+error_close=סגירה
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js גרסה {{version}} (×‘× ×™×™×”: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=הודעה: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=תוכן ×ž×—×¡× ×™×ª: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=קובץ: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=שורה: {{line}}
+rendering_error=×ירעה שגי××” בעת עיבוד הדף.
+
+# Predefined zoom values
+page_scale_width=רוחב העמוד
+page_scale_fit=הת×מה לעמוד
+page_scale_auto=מרחק מתצוגה ×וטומטי
+page_scale_actual=גודל ×מיתי
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=שגי××”
+loading_error=×ירעה שגי××” בעת ×˜×¢×™× ×ª ×”Ö¾PDF.
+invalid_file_error=קובץ PDF ×¤×’×•× ×ו ×œ× ×ª×§×™×Ÿ.
+missing_file_error=קובץ PDF חסר.
+unexpected_response_error=תגובת שרת ×œ× ×¦×¤×•×™×”.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[הערת {{type}}]
+password_label=× × ×œ×”×›× ×™×¡ ×ת הססמה לפתיחת קובץ PDF ×–×”.
+password_invalid=ססמה שגויה. × × ×œ× ×¡×•×ª ×©× ×™×ª.
+password_ok=×ישור
+password_cancel=ביטול
+
+printing_not_supported=×זהרה: הדפסה ××™× ×” × ×ª×ž×›×ª במלו××” בדפדפן ×–×”.
+printing_not_ready=×זהרה: ×”Ö¾PDF ×œ× × ×™×ª×Ÿ לחלוטין עד מצב שמ×פשר הדפסה.
+web_fonts_disabled=×’×•×¤× ×™ רשת ×ž× ×•×˜×¨×œ×™×: ×œ× × ×™×ª×Ÿ להשתמש ×‘×’×•×¤× ×™ PDF מוטבעי×.
diff --git a/thirdparty/pdfjs/web/locale/hi-IN/viewer.properties b/thirdparty/pdfjs/web/locale/hi-IN/viewer.properties
new file mode 100644
index 0000000..6a49a9a
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/hi-IN/viewer.properties
@@ -0,0 +1,243 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=पिछला पृषà¥à¤
+previous_label=पिछला
+next.title=अगला पृषà¥à¤
+next_label=आगे
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=पृषà¥à¤ :
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} का
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=\u0020छोटा करें
+zoom_out_label=\u0020छोटा करें
+zoom_in.title=बड़ा करें
+zoom_in_label=बड़ा करें
+zoom.title=बड़ा-छोटा करें
+presentation_mode.title=पà¥à¤°à¤¸à¥à¤¤à¥à¤¤à¤¿ अवसà¥à¤¥à¤¾ में जाà¤à¤
+presentation_mode_label=\u0020पà¥à¤°à¤¸à¥à¤¤à¥à¤¤à¤¿ अवसà¥à¤¥à¤¾
+open_file.title=फ़ाइल खोलें
+open_file_label=\u0020खोलें
+print.title=छापें
+print_label=\u0020छापें
+download.title=डाउनलोड
+download_label=डाउनलोड
+bookmark.title=मौजूदा दृशà¥à¤¯ (नठविंडो में नक़ल लें या खोलें)
+bookmark_label=\u0020मौजूदा दृशà¥à¤¯
+
+# Secondary toolbar and context menu
+tools.title=औज़ार
+tools_label=औज़ार
+first_page.title=पà¥à¤°à¤¥à¤® पृषà¥à¤ पर जाà¤à¤
+first_page.label=\u0020पà¥à¤°à¤¥à¤® पृषà¥à¤ पर जाà¤à¤
+first_page_label=पà¥à¤°à¤¥à¤® पृषà¥à¤ पर जाà¤à¤
+last_page.title=अंतिम पृषà¥à¤ पर जाà¤à¤
+last_page.label=\u0020अंतिम पृषà¥à¤ पर जाà¤à¤
+last_page_label=\u0020अंतिम पृषà¥à¤ पर जाà¤à¤
+page_rotate_cw.title=घड़ी की दिशा में घà¥à¤®à¤¾à¤à¤
+page_rotate_cw.label=घड़ी की दिशा में घà¥à¤®à¤¾à¤à¤
+page_rotate_cw_label=घड़ी की दिशा में घà¥à¤®à¤¾à¤à¤
+page_rotate_ccw.title=घड़ी की दिशा से उलà¥à¤Ÿà¤¾ घà¥à¤®à¤¾à¤à¤
+page_rotate_ccw.label=घड़ी की दिशा से उलà¥à¤Ÿà¤¾ घà¥à¤®à¤¾à¤à¤
+page_rotate_ccw_label=\u0020घड़ी की दिशा से उलà¥à¤Ÿà¤¾ घà¥à¤®à¤¾à¤à¤
+
+cursor_text_select_tool.title=पाठचयन उपकरण सकà¥à¤·à¤® करें
+cursor_text_select_tool_label=पाठचयन उपकरण
+cursor_hand_tool.title=हसà¥à¤¤ उपकरण सकà¥à¤·à¤® करें
+cursor_hand_tool_label=हसà¥à¤¤ उपकरण
+
+scroll_vertical.title=लंबवत सà¥à¤•à¥à¤°à¥‰à¤²à¤¿à¤‚ग का उपयोग करें
+scroll_vertical_label=लंबवत सà¥à¤•à¥à¤°à¥‰à¤²à¤¿à¤‚ग
+scroll_horizontal.title=कà¥à¤·à¤¿à¤¤à¤¿à¤œà¤¿à¤¯ सà¥à¤•à¥à¤°à¥‰à¤²à¤¿à¤‚ग का उपयोग करें
+scroll_horizontal_label=कà¥à¤·à¤¿à¤¤à¤¿à¤œà¤¿à¤¯ सà¥à¤•à¥à¤°à¥‰à¤²à¤¿à¤‚ग
+scroll_wrapped.title=वà¥à¤°à¤¾à¤ªà¥à¤ªà¥‡à¤¡ सà¥à¤•à¥à¤°à¥‰à¤²à¤¿à¤‚ग का उपयोग करें
+
+spread_none_label=कोई सà¥à¤ªà¥à¤°à¥‡à¤¡ उपलबà¥à¤§ नहीं
+spread_odd.title=विषम-कà¥à¤°à¤®à¤¾à¤‚कित पृषà¥à¤ ों से पà¥à¤°à¤¾à¤°à¤‚ठहोने वाले पृषà¥à¤ सà¥à¤ªà¥à¤°à¥‡à¤¡ में शामिल हों
+spread_odd_label=विषम फैलाव
+
+# Document properties dialog box
+document_properties.title=दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ विशेषता...
+document_properties_label=दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ विशेषता...
+document_properties_file_name=फ़ाइल नाम:
+document_properties_file_size=फाइल आकारः
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=शीरà¥à¤·à¤•:
+document_properties_author=लेखकः
+document_properties_subject=विषय:
+document_properties_keywords=कà¥à¤‚जी-शबà¥à¤¦:
+document_properties_creation_date=निरà¥à¤®à¤¾à¤£ दिनांक:
+document_properties_modification_date=संशोधन दिनांक:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=निरà¥à¤®à¤¾à¤¤à¤¾:
+document_properties_producer=PDF उतà¥à¤ªà¤¾à¤¦à¤•:
+document_properties_version=PDF संसà¥à¤•रण:
+document_properties_page_count=पृषà¥à¤ गिनती:
+document_properties_page_size=पृषà¥à¤ आकार:
+document_properties_page_size_unit_inches=इंच
+document_properties_page_size_unit_millimeters=मिमी
+document_properties_page_size_orientation_portrait=पोरà¥à¤Ÿà¥à¤°à¥‡à¤Ÿ
+document_properties_page_size_orientation_landscape=लैंडसà¥à¤•ेप
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=पतà¥à¤°
+document_properties_page_size_name_legal=क़ानूनी
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=तीवà¥à¤° वेब वà¥à¤¯à¥‚:
+document_properties_linearized_yes=हाà¤
+document_properties_linearized_no=नहीं
+document_properties_close=बंद करें
+
+print_progress_message=छपाई के लिठदसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ को तैयार किया जा रहा है...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=रदà¥à¤¦ करें
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=\u0020सà¥à¤²à¤¾à¤‡à¤¡à¤° टॉगल करें
+toggle_sidebar_notification.title=साइडबार टॉगल करें (दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ में रूपरेखा शामिल है/attachments)
+toggle_sidebar_label=सà¥à¤²à¤¾à¤‡à¤¡à¤° टॉगल करें
+document_outline.title=दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ की रूपरेखा दिखाइठ(सारी वसà¥à¤¤à¥à¤“ं को फलने अथवा समेटने के लिठदो बार कà¥à¤²à¤¿à¤• करें)
+document_outline_label=दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ आउटलाइन
+attachments.title=संलगà¥à¤¨à¤• दिखायें
+attachments_label=संलगà¥à¤¨à¤•
+thumbs.title=लघà¥à¤›à¤µà¤¿à¤¯à¤¾à¤ दिखाà¤à¤
+thumbs_label=लघॠछवि
+findbar.title=\u0020दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ में ढूà¤à¤¢à¤¼à¥‡à¤‚
+findbar_label=ढूà¤à¤¢à¥‡à¤‚
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=पृषà¥à¤ {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=पृषà¥à¤ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=पृषà¥à¤ {{page}} की लघà¥-छवि
+
+# Find panel button title and messages
+find_input.title=ढूà¤à¤¢à¥‡à¤‚
+find_input.placeholder=दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ में खोजें...
+find_previous.title=वाकà¥à¤¯à¤¾à¤‚श की पिछली उपसà¥à¤¥à¤¿à¤¤à¤¿ ढूà¤à¤¢à¤¼à¥‡à¤‚
+find_previous_label=पिछला
+find_next.title=वाकà¥à¤¯à¤¾à¤‚श की अगली उपसà¥à¤¥à¤¿à¤¤à¤¿ ढूà¤à¤¢à¤¼à¥‡à¤‚
+find_next_label=अगला
+find_highlight=\u0020सà¤à¥€ आलोकित करें
+find_match_case_label=मिलान सà¥à¤¥à¤¿à¤¤à¤¿
+find_entire_word_label=संपूरà¥à¤£ शबà¥à¤¦
+find_reached_top=पृषà¥à¤ के ऊपर पहà¥à¤‚च गया, नीचे से जारी रखें
+find_reached_bottom=पृषà¥à¤ के नीचे में जा पहà¥à¤à¤šà¤¾, ऊपर से जारी
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} में {{current}} मेल
+find_match_count[two]={{total}} में {{current}} मेल
+find_match_count[few]={{total}} में {{current}} मेल
+find_match_count[many]={{total}} में {{current}} मेल
+find_match_count[other]={{total}} में {{current}} मेल
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} से अधिक मेल
+find_match_count_limit[one]={{limit}} से अधिक मेल
+find_match_count_limit[two]={{limit}} से अधिक मेल
+find_match_count_limit[few]={{limit}} से अधिक मेल
+find_match_count_limit[many]={{limit}} से अधिक मेल
+find_match_count_limit[other]={{limit}} से अधिक मेल
+find_not_found=वाकà¥à¤¯à¤¾à¤‚श नहीं मिला
+
+# Error panel labels
+error_more_info=अधिक सूचना
+error_less_info=कम सूचना
+error_close=बंद करें
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=\u0020संदेश: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=सà¥à¤Ÿà¥ˆà¤•: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=फ़ाइल: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=पंकà¥à¤¤à¤¿: {{line}}
+rendering_error=पृषà¥à¤ रेंडरिंग के दौरान तà¥à¤°à¥à¤Ÿà¤¿ आई.
+
+# Predefined zoom values
+page_scale_width=\u0020पृषà¥à¤ चौड़ाई
+page_scale_fit=पृषà¥à¤ फिट
+page_scale_auto=सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ जूम
+page_scale_actual=वासà¥à¤¤à¤µà¤¿à¤• आकार
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=तà¥à¤°à¥à¤Ÿà¤¿
+loading_error=PDF लोड करते समय à¤à¤• तà¥à¤°à¥à¤Ÿà¤¿ हà¥à¤ˆ.
+invalid_file_error=अमानà¥à¤¯ या à¤à¥à¤°à¤·à¥à¤Ÿ PDF फ़ाइल.
+missing_file_error=\u0020अनà¥à¤ªà¤¸à¥à¤¥à¤¿à¤¤ PDF फ़ाइल.
+unexpected_response_error=अपà¥à¤°à¤¤à¥à¤¯à¤¾à¤¶à¤¿à¤¤ सरà¥à¤µà¤° पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=\u0020[{{type}} Annotation]
+password_label=इस PDF फ़ाइल को खोलने के लिठकृपया कूटशबà¥à¤¦ à¤à¤°à¥‡à¤‚.
+password_invalid=अवैध कूटशबà¥à¤¦, कृपया फिर कोशिश करें.
+password_ok=OK
+password_cancel=रदà¥à¤¦ करें
+
+printing_not_supported=चेतावनी: इस बà¥à¤°à¤¾à¤‰à¤œà¤¼à¤° पर छपाई पूरी तरह से समरà¥à¤¥à¤¿à¤¤ नहीं है.
+printing_not_ready=चेतावनी: PDF छपाई के लिठपूरी तरह से लोड नहीं है.
+web_fonts_disabled=वेब फॉनà¥à¤Ÿà¥à¤¸ निषà¥à¤•à¥à¤°à¤¿à¤¯ हैं: अंतःसà¥à¤¥à¤¾à¤ªà¤¿à¤¤ PDF फॉनà¥à¤Ÿà¤¸ के उपयोग में असमरà¥à¤¥.
diff --git a/thirdparty/pdfjs/web/locale/hr/viewer.properties b/thirdparty/pdfjs/web/locale/hr/viewer.properties
new file mode 100644
index 0000000..5cbca45
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/hr/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Prethodna stranica
+previous_label=Prethodna
+next.title=Sljedeća stranica
+next_label=Sljedeća
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Stranica
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=od {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} od {{pagesCount}})
+
+zoom_out.title=Umanji
+zoom_out_label=Umanji
+zoom_in.title=Uvećaj
+zoom_in_label=Uvećaj
+zoom.title=Zumiranje
+presentation_mode.title=Prebaci u prezentacijski naÄin rada
+presentation_mode_label=Prezentacijski naÄin rada
+open_file.title=Otvori datoteku
+open_file_label=Otvori
+print.title=Ispiši
+print_label=Ispiši
+download.title=Preuzmi
+download_label=Preuzmi
+bookmark.title=TrenutaÄni prikaz (kopiraj ili otvori u novom prozoru)
+bookmark_label=TrenutaÄni prikaz
+
+# Secondary toolbar and context menu
+tools.title=Alati
+tools_label=Alati
+first_page.title=Idi na prvu stranicu
+first_page.label=Idi na prvu stranicu
+first_page_label=Idi na prvu stranicu
+last_page.title=Idi na posljednju stranicu
+last_page.label=Idi na posljednju stranicu
+last_page_label=Idi na posljednju stranicu
+page_rotate_cw.title=Rotiraj u smjeru kazaljke na satu
+page_rotate_cw.label=Rotiraj u smjeru kazaljke na satu
+page_rotate_cw_label=Rotiraj u smjeru kazaljke na satu
+page_rotate_ccw.title=Rotiraj obrnutno od smjera kazaljke na satu
+page_rotate_ccw.label=Rotiraj obrnutno od smjera kazaljke na satu
+page_rotate_ccw_label=Rotiraj obrnutno od smjera kazaljke na satu
+
+cursor_text_select_tool.title=Omogući alat za oznaÄavanje teksta
+cursor_text_select_tool_label=Alat za oznaÄavanje teksta
+cursor_hand_tool.title=Omogući ruÄni alat
+cursor_hand_tool_label=RuÄni alat
+
+scroll_vertical.title=Koristi okomito pomicanje
+scroll_vertical_label=Okomito pomicanje
+scroll_horizontal.title=Koristi vodoravno pomicanje
+scroll_horizontal_label=Vodoravno pomicanje
+scroll_wrapped.title=Koristi kontinuirani raspored stranica
+scroll_wrapped_label=Kontinuirani raspored stranica
+
+spread_none.title=Ne izrađuj duplerice
+spread_none_label=PojedinaÄne stranice
+spread_odd.title=Izradi duplerice koje poÄinju s neparnim stranicama
+spread_odd_label=Neparne duplerice
+spread_even.title=Izradi duplerice koje poÄinju s parnim stranicama
+spread_even_label=Parne duplerice
+
+# Document properties dialog box
+document_properties.title=Svojstva dokumenta...
+document_properties_label=Svojstva dokumenta...
+document_properties_file_name=Naziv datoteke:
+document_properties_file_size=VeliÄina datoteke:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajtova)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajtova)
+document_properties_title=Naslov:
+document_properties_author=Autor:
+document_properties_subject=Predmet:
+document_properties_keywords=KljuÄne rijeÄi:
+document_properties_creation_date=Datum stvaranja:
+document_properties_modification_date=Datum promjene:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Stvaratelj:
+document_properties_producer=PDF stvaratelj:
+document_properties_version=PDF verzija:
+document_properties_page_count=Broj stranica:
+document_properties_page_size=Dimenzije stranice:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=uspravno
+document_properties_page_size_orientation_landscape=položeno
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Brzi web pregled:
+document_properties_linearized_yes=Da
+document_properties_linearized_no=Ne
+document_properties_close=Zatvori
+
+print_progress_message=Pripremanje dokumenta za ispis…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Odustani
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Prikaži/sakrij boÄnu traku
+toggle_sidebar_notification.title=Prikazivanje i sklanjanje boÄne trake (dokument sadrži konturu/privitke)
+toggle_sidebar_notification2.title=Prikazivanje i sklanjanje boÄne trake (dokument sadrži konturu/privitke/slojeve)
+toggle_sidebar_label=Prikaži/sakrij boÄnu traku
+document_outline.title=Prikaži strukturu dokumenta (dvostruki klik za rasklapanje/sklapanje svih stavki)
+document_outline_label=Struktura dokumenta
+attachments.title=Prikaži privitke
+attachments_label=Privitci
+layers.title=Prikaži slojeve (dvoklik za vraćanje svih slojeva u zadano stanje)
+layers_label=Slojevi
+thumbs.title=Prikaži minijature
+thumbs_label=Minijature
+findbar.title=Traži u dokumentu
+findbar_label=Traži
+
+additional_layers=Dodatni slojevi
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Stranica br. {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Stranica {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Minijatura stranice {{page}}
+
+# Find panel button title and messages
+find_input.title=Traži
+find_input.placeholder=Traži u dokumentu…
+find_previous.title=Pronađi prethodno pojavljivanje ovog izraza
+find_previous_label=Prethodno
+find_next.title=Pronađi sljedeće pojavljivanje ovog izraza
+find_next_label=Sljedeće
+find_highlight=Istankni sve
+find_match_case_label=Razlikovanje velikih i malih slova
+find_entire_word_label=Cijele rijeÄi
+find_reached_top=Dosegnut poÄetak dokumenta, nastavak s kraja
+find_reached_bottom=Dosegnut kraj dokumenta, nastavak s poÄetka
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} od {{total}} se podudara
+find_match_count[two]={{current}} od {{total}} se podudara
+find_match_count[few]={{current}} od {{total}} se podudara
+find_match_count[many]={{current}} od {{total}} se podudara
+find_match_count[other]={{current}} od {{total}} se podudara
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Više od {{limit}} podudaranja
+find_match_count_limit[one]=Više od {{limit}} podudaranja
+find_match_count_limit[two]=Više od {{limit}} podudaranja
+find_match_count_limit[few]=Više od {{limit}} podudaranja
+find_match_count_limit[many]=Više od {{limit}} podudaranja
+find_match_count_limit[other]=Više od {{limit}} podudaranja
+find_not_found=Izraz nije pronađen
+
+# Error panel labels
+error_more_info=Više informacija
+error_less_info=Manje informacija
+error_close=Zatvori
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Poruka: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stog: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Datoteka: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Redak: {{line}}
+rendering_error=Došlo je do greške prilikom iscrtavanja stranice.
+
+# Predefined zoom values
+page_scale_width=Prilagodi širini prozora
+page_scale_fit=Prilagodi veliÄini prozora
+page_scale_auto=Automatsko zumiranje
+page_scale_actual=Stvarna veliÄina
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading_error_indicator=Greška
+loading_error=DoÅ¡lo je do greÅ¡ke pri uÄitavanju PDF-a.
+invalid_file_error=Neispravna ili oštećena PDF datoteka.
+missing_file_error=Nedostaje PDF datoteka.
+unexpected_response_error=NeoÄekivani odgovor poslužitelja.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Bilješka]
+password_label=Za otvoranje ove PDF datoteku upiši lozinku.
+password_invalid=Neispravna lozinka. Pokušaj ponovo.
+password_ok=U redu
+password_cancel=Odustani
+
+printing_not_supported=Upozorenje: Ovaj preglednik ne podržava u potpunosti ispisivanje.
+printing_not_ready=Upozorenje: PDF nije u potpunosti uÄitan za ispis.
+web_fonts_disabled=Web fontovi su deaktivirani: nije moguće koristiti ugrađene PDF fontove.
diff --git a/thirdparty/pdfjs/web/locale/hsb/viewer.properties b/thirdparty/pdfjs/web/locale/hsb/viewer.properties
new file mode 100644
index 0000000..11dea4a
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/hsb/viewer.properties
@@ -0,0 +1,253 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Předchadna strona
+previous_label=Wróćo
+next.title=Přichodna strona
+next_label=Dale
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Strona
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=z {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} z {{pagesCount}})
+
+zoom_out.title=Pomjeńšić
+zoom_out_label=Pomjeńšić
+zoom_in.title=Powjetšić
+zoom_in_label=Powjetšić
+zoom.title=Skalowanje
+presentation_mode.title=Do prezentaciskeho modusa přeńć
+presentation_mode_label=Prezentaciski modus
+open_file.title=Dataju woÄinić
+open_file_label=WoÄinić
+print.title=Ćišćeć
+print_label=Ćišćeć
+download.title=Sćahnyć
+download_label=Sćahnyć
+bookmark.title=Aktualny napohlad (kopÄ›rować abo w nowym woknje woÄinić)
+bookmark_label=Aktualny napohlad
+
+# Secondary toolbar and context menu
+tools.title=Nastroje
+tools_label=Nastroje
+first_page.title=K prěnjej stronje
+first_page.label=K prěnjej stronje
+first_page_label=K prěnjej stronje
+last_page.title=K poslednjej stronje
+last_page.label=K poslednjej stronje
+last_page_label=K poslednjej stronje
+page_rotate_cw.title=K smÄ›rej Äasnika wjerćeć
+page_rotate_cw.label=K smÄ›rej Äasnika wjerćeć
+page_rotate_cw_label=K smÄ›rej Äasnika wjerćeć
+page_rotate_ccw.title=PÅ™ećiwo smÄ›rej Äasnika wjerćeć
+page_rotate_ccw.label=PÅ™ećiwo smÄ›rej Äasnika wjerćeć
+page_rotate_ccw_label=PÅ™ećiwo smÄ›rej Äasnika wjerćeć
+
+cursor_text_select_tool.title=Nastroj za wuběranje teksta zmóžnić
+cursor_text_select_tool_label=Nastroj za wuběranje teksta
+cursor_hand_tool.title=RuÄny nastroj zmóžnić
+cursor_hand_tool_label=RuÄny nastroj
+
+scroll_vertical.title=Wertikalne suwanje wužiwać
+scroll_vertical_label=Wertikalnje suwanje
+scroll_horizontal.title=Horicontalne suwanje wužiwać
+scroll_horizontal_label=Horicontalne suwanje
+scroll_wrapped.title=Postupne suwanje wužiwać
+scroll_wrapped_label=Postupne suwanje
+
+spread_none.title=Strony njezwjazać
+spread_none_label=Žana dwójna strona
+spread_odd.title=Strony zapoÄinajo z njerunymi stronami zwjazać
+spread_odd_label=Njerune strony
+spread_even.title=Strony zapoÄinajo z runymi stronami zwjazać
+spread_even_label=Rune strony
+
+# Document properties dialog box
+document_properties.title=Dokumentowe kajkosće…
+document_properties_label=Dokumentowe kajkosće…
+document_properties_file_name=Mjeno dataje:
+document_properties_file_size=Wulkosć dataje:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajtow)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajtow)
+document_properties_title=Titul:
+document_properties_author=Awtor:
+document_properties_subject=Předmjet:
+document_properties_keywords=KluÄowe sÅ‚owa:
+document_properties_creation_date=Datum wutworjenja:
+document_properties_modification_date=Datum změny:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Awtor:
+document_properties_producer=PDF-zhotowjer:
+document_properties_version=PDF-wersija:
+document_properties_page_count=LiÄba stronow:
+document_properties_page_size=Wulkosć strony:
+document_properties_page_size_unit_inches=cól
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=wysoki format
+document_properties_page_size_orientation_landscape=prÄ›Äny format
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Haj
+document_properties_linearized_no=NÄ›
+document_properties_close=ZaÄinić
+
+print_progress_message=Dokument so za ćišćenje přihotuje…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Přetorhnyć
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=BóÄnicu pokazać/schować
+toggle_sidebar_notification.title=BóÄnicu pÅ™epinać (dokument wobsahuje wobrys/pÅ™iwěški)
+toggle_sidebar_notification2.title=BóÄnicu pÅ™epinać (dokument rozrjad/pÅ™iwěški/worÅ¡ty wobsahuje)
+toggle_sidebar_label=BóÄnicu pokazać/schować
+document_outline.title=Dokumentowy naćisk pokazać (dwójne kliknjenje, zo bychu so wšě zapiski pokazali/schowali)
+document_outline_label=Dokumentowa struktura
+attachments.title=Přiwěški pokazać
+attachments_label=Přiwěški
+layers.title=Woršty pokazać (klikńće dwójce, zo byšće wšě woršty na standardny staw wróćo stajił)
+layers_label=Woršty
+thumbs.title=Miniatury pokazać
+thumbs_label=Miniatury
+current_outline_item.title=Aktualny rozrjadowy zapisk pytać
+current_outline_item_label=Aktualny rozrjadowy zapisk
+findbar.title=W dokumenće pytać
+findbar_label=Pytać
+
+additional_layers=Dalše woršty
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Strona {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Strona {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura strony {{page}}
+
+# Find panel button title and messages
+find_input.title=Pytać
+find_input.placeholder=W dokumenće pytać…
+find_previous.title=Předchadne wustupowanje pytanskeho wuraza pytać
+find_previous_label=Wróćo
+find_next.title=Přichodne wustupowanje pytanskeho wuraza pytać
+find_next_label=Dale
+find_highlight=Wšě wuzběhnyć
+find_match_case_label=Wulkopisanje wobkedźbować
+find_entire_word_label=Cyłe słowa
+find_reached_top=SpoÄatk dokumenta docpÄ›ty, pokroÄuje so z kóncom
+find_reached_bottom=Kónc dokument docpÄ›ty, pokroÄuje so ze spoÄatkom
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} z {{total}} wotpowědnika
+find_match_count[two]={{current}} z {{total}} wotpowědnikow
+find_match_count[few]={{current}} z {{total}} wotpowědnikow
+find_match_count[many]={{current}} z {{total}} wotpowědnikow
+find_match_count[other]={{current}} z {{total}} wotpowědnikow
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Wjace haÄ {{limit}} wotpowÄ›dnikow
+find_match_count_limit[one]=Wjace haÄ {{limit}} wotpowÄ›dnik
+find_match_count_limit[two]=Wjace haÄ {{limit}} wotpowÄ›dnikaj
+find_match_count_limit[few]=Wjace haÄ {{limit}} wotpowÄ›dniki
+find_match_count_limit[many]=Wjace haÄ {{limit}} wotpowÄ›dnikow
+find_match_count_limit[other]=Wjace haÄ {{limit}} wotpowÄ›dnikow
+find_not_found=Pytanski wuraz njeje so namakał
+
+# Error panel labels
+error_more_info=Wjace informacijow
+error_less_info=Mjenje informacijow
+error_close=ZaÄinić
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Zdźělenka: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Lisćina zawołanjow: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Dataja: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linka: {{line}}
+rendering_error=Při zwobraznjenju strony je zmylk wustupił.
+
+# Predefined zoom values
+page_scale_width=Šěrokosć strony
+page_scale_fit=Wulkosć strony
+page_scale_auto=Awtomatiske skalowanje
+page_scale_actual=Aktualna wulkosć
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Zmylk
+loading_error=PÅ™i zaÄitowanju PDF je zmylk wustupiÅ‚.
+invalid_file_error=Njepłaćiwa abo wobškodźena PDF-dataja.
+missing_file_error=Falowaca PDF-dataja.
+unexpected_response_error=NjewoÄakowana serwerowa wotmoÅ‚wa.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Typ přispomnjenki: {{type}}]
+password_label=Zapodajće hesÅ‚o, zo byšće PDF-dataju woÄiniÅ‚.
+password_invalid=Njepłaćiwe hesło. Prošu spytajće hišće raz.
+password_ok=W porjadku
+password_cancel=Přetorhnyć
+
+printing_not_supported=Warnowanje: Ćišćenje so přez tutón wobhladowak połnje njepodpěruje.
+printing_not_ready=Warnowanje: PDF njeje so za ćišćenje dospoÅ‚nje zaÄitaÅ‚.
+web_fonts_disabled=Webpisma su znjemóžnjene: njeje móžno, zasadźene PDF-pisma wužiwać.
diff --git a/thirdparty/pdfjs/web/locale/hu/viewer.properties b/thirdparty/pdfjs/web/locale/hu/viewer.properties
new file mode 100644
index 0000000..e2d4b49
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/hu/viewer.properties
@@ -0,0 +1,253 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Előző oldal
+previous_label=Előző
+next.title=Következő oldal
+next_label=Tovább
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Oldal
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=összesen: {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=KicsinyÃtés
+zoom_out_label=KicsinyÃtés
+zoom_in.title=NagyÃtás
+zoom_in_label=NagyÃtás
+zoom.title=NagyÃtás
+presentation_mode.title=Váltás bemutató módba
+presentation_mode_label=Bemutató mód
+open_file.title=Fájl megnyitása
+open_file_label=Megnyitás
+print.title=Nyomtatás
+print_label=Nyomtatás
+download.title=Letöltés
+download_label=Letöltés
+bookmark.title=Jelenlegi nézet (másolás vagy megnyitás új ablakban)
+bookmark_label=Aktuális nézet
+
+# Secondary toolbar and context menu
+tools.title=Eszközök
+tools_label=Eszközök
+first_page.title=Ugrás az első oldalra
+first_page.label=Ugrás az első oldalra
+first_page_label=Ugrás az első oldalra
+last_page.title=Ugrás az utolsó oldalra
+last_page.label=Ugrás az utolsó oldalra
+last_page_label=Ugrás az utolsó oldalra
+page_rotate_cw.title=Forgatás az óramutató járásával egyezően
+page_rotate_cw.label=Forgatás az óramutató járásával egyezően
+page_rotate_cw_label=Forgatás az óramutató járásával egyezően
+page_rotate_ccw.title=Forgatás az óramutató járásával ellentétesen
+page_rotate_ccw.label=Forgatás az óramutató járásával ellentétesen
+page_rotate_ccw_label=Forgatás az óramutató járásával ellentétesen
+
+cursor_text_select_tool.title=Szövegkijelölő eszköz bekapcsolása
+cursor_text_select_tool_label=Szövegkijelölő eszköz
+cursor_hand_tool.title=Kéz eszköz bekapcsolása
+cursor_hand_tool_label=Kéz eszköz
+
+scroll_vertical.title=Függőleges görgetés használata
+scroll_vertical_label=Függőleges görgetés
+scroll_horizontal.title=VÃzszintes görgetés használata
+scroll_horizontal_label=VÃzszintes görgetés
+scroll_wrapped.title=Rácsos elrendezés használata
+scroll_wrapped_label=Rácsos elrendezés
+
+spread_none.title=Ne tapassza össze az oldalakat
+spread_none_label=Nincs összetapasztás
+spread_odd.title=Lapok összetapasztása, a páratlan számú oldalakkal kezdve
+spread_odd_label=Összetapasztás: páratlan
+spread_even.title=Lapok összetapasztása, a páros számú oldalakkal kezdve
+spread_even_label=Összetapasztás: páros
+
+# Document properties dialog box
+document_properties.title=Dokumentum tulajdonságai…
+document_properties_label=Dokumentum tulajdonságai…
+document_properties_file_name=Fájlnév:
+document_properties_file_size=Fájlméret:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bájt)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bájt)
+document_properties_title=CÃm:
+document_properties_author=Szerző:
+document_properties_subject=Tárgy:
+document_properties_keywords=Kulcsszavak:
+document_properties_creation_date=Létrehozás dátuma:
+document_properties_modification_date=MódosÃtás dátuma:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Létrehozta:
+document_properties_producer=PDF előállÃtó:
+document_properties_version=PDF verzió:
+document_properties_page_count=Oldalszám:
+document_properties_page_size=Lapméret:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=álló
+document_properties_page_size_orientation_landscape=fekvő
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Jogi információk
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Gyors webes nézet:
+document_properties_linearized_yes=Igen
+document_properties_linearized_no=Nem
+document_properties_close=Bezárás
+
+print_progress_message=Dokumentum elÅ‘készÃtése nyomtatáshoz…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Mégse
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Oldalsáv be/ki
+toggle_sidebar_notification.title=Oldalsáv be/ki (a dokumentum vázlatot/mellékleteket tartalmaz)
+toggle_sidebar_notification2.title=Oldalsáv be/ki (a dokumentum vázlatot/mellékleteket/rétegeket tartalmaz)
+toggle_sidebar_label=Oldalsáv be/ki
+document_outline.title=Dokumentum megjelenÃtése online (dupla kattintás minden elem kinyitásához/összecsukásához)
+document_outline_label=Dokumentumvázlat
+attachments.title=Mellékletek megjelenÃtése
+attachments_label=Van melléklet
+layers.title=Rétegek megjelenÃtése (dupla kattintás az összes réteg alapértelmezett állapotra visszaállÃtásához)
+layers_label=Rétegek
+thumbs.title=Bélyegképek megjelenÃtése
+thumbs_label=Bélyegképek
+current_outline_item.title=Jelenlegi vázlatelem megkeresése
+current_outline_item_label=Jelenlegi vázlatelem
+findbar.title=Keresés a dokumentumban
+findbar_label=Keresés
+
+additional_layers=További rétegek
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas={{page}}. oldal
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}}. oldal
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}}. oldal bélyegképe
+
+# Find panel button title and messages
+find_input.title=Keresés
+find_input.placeholder=Keresés a dokumentumban…
+find_previous.title=A kifejezés előző előfordulásának keresése
+find_previous_label=Előző
+find_next.title=A kifejezés következő előfordulásának keresése
+find_next_label=Tovább
+find_highlight=Összes kiemelése
+find_match_case_label=Kis- és nagybetűk megkülönböztetése
+find_entire_word_label=Teljes szavak
+find_reached_top=A dokumentum eleje elérve, folytatás a végétől
+find_reached_bottom=A dokumentum vége elérve, folytatás az elejétől
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} / {{total}} találat
+find_match_count[two]={{current}} / {{total}} találat
+find_match_count[few]={{current}} / {{total}} találat
+find_match_count[many]={{current}} / {{total}} találat
+find_match_count[other]={{current}} / {{total}} találat
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Több mint {{limit}} találat
+find_match_count_limit[one]=Több mint {{limit}} találat
+find_match_count_limit[two]=Több mint {{limit}} találat
+find_match_count_limit[few]=Több mint {{limit}} találat
+find_match_count_limit[many]=Több mint {{limit}} találat
+find_match_count_limit[other]=Több mint {{limit}} találat
+find_not_found=A kifejezés nem található
+
+# Error panel labels
+error_more_info=További tudnivalók
+error_less_info=Kevesebb információ
+error_close=Bezárás
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Üzenet: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Verem: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fájl: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Sor: {{line}}
+rendering_error=Hiba történt az oldal feldolgozása közben.
+
+# Predefined zoom values
+page_scale_width=Oldalszélesség
+page_scale_fit=Teljes oldal
+page_scale_auto=Automatikus nagyÃtás
+page_scale_actual=Valódi méret
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Hiba
+loading_error=Hiba történt a PDF betöltésekor.
+invalid_file_error=Érvénytelen vagy sérült PDF fájl.
+missing_file_error=Hiányzó PDF fájl.
+unexpected_response_error=Váratlan kiszolgálóválasz.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} megjegyzés]
+password_label=Adja meg a jelszót a PDF fájl megnyitásához.
+password_invalid=Helytelen jelszó. Próbálja újra.
+password_ok=OK
+password_cancel=Mégse
+
+printing_not_supported=Figyelmeztetés: Ez a böngésző nem teljesen támogatja a nyomtatást.
+printing_not_ready=Figyelmeztetés: A PDF nincs teljesen betöltve a nyomtatáshoz.
+web_fonts_disabled=Webes betűkészletek letiltva: nem használhatók a beágyazott PDF betűkészletek.
diff --git a/thirdparty/pdfjs/web/locale/hy-AM/viewer.properties b/thirdparty/pdfjs/web/locale/hy-AM/viewer.properties
new file mode 100644
index 0000000..09394f7
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/hy-AM/viewer.properties
@@ -0,0 +1,247 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Õ†Õ¡ÕÕ¸Ö€Õ¤ Õ§Õ»Õ¨
+previous_label=Õ†Õ¡ÕÕ¸Ö€Õ¤Õ¨
+next.title=Õ€Õ¡Õ»Õ¸Ö€Õ¤ Õ§Õ»Õ¨
+next_label=Õ€Õ¡Õ»Õ¸Ö€Õ¤Õ¨
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Ô·Õ».
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}}-Õ«Ö\u0020
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}}-Õ¨ {{pagesCount}})-Õ«Ö
+
+zoom_out.title=Õ“Õ¸Ö„Ö€Õ¡ÖÕ¶Õ¥Õ¬
+zoom_out_label=Õ“Õ¸Ö„Ö€Õ¡ÖÕ¶Õ¥Õ¬
+zoom_in.title=Ô½Õ¸Õ·Õ¸Ö€Õ¡ÖÕ¶Õ¥Õ¬
+zoom_in_label=Ô½Õ¸Õ·Õ¸Ö€Õ¡ÖÕ¶Õ¥Õ¬
+zoom.title=Õ„Õ¡Õ½Õ·Õ¿Õ¡Õ¢Õ¨\u0020
+presentation_mode.title=Ô±Õ¶ÖÕ¶Õ¥Õ¬ Õ†Õ¥Ö€Õ¯Õ¡ÕµÕ¡ÖÕ´Õ¡Õ¶ Õ¥Õ²Õ¡Õ¶Õ¡Õ¯Õ«Õ¶
+presentation_mode_label=Õ†Õ¥Ö€Õ¯Õ¡ÕµÕ¡ÖÕ´Õ¡Õ¶ Õ¥Õ²Õ¡Õ¶Õ¡Õ¯
+open_file.title=Ô²Õ¡ÖÕ¥Õ¬ Õ¶Õ«Õ·Ö„
+open_file_label=Ô²Õ¡ÖÕ¥Õ¬
+print.title=ÕÕºÕ¥Õ¬
+print_label=ÕÕºÕ¥Õ¬
+download.title=Ô²Õ¥Õ¼Õ¶Õ¥Õ¬
+download_label=Ô²Õ¥Õ¼Õ¶Õ¥Õ¬
+bookmark.title=Ô¸Õ¶Õ©Õ¡ÖÕ«Õ¯ Õ¿Õ¥Õ½Ö„Õ¸Õ¾ (ÕºÕ¡Õ¿Õ³Õ¥Õ¶Õ¥Õ¬ Õ¯Õ¡Õ´ Õ¢Õ¡ÖÕ¥Õ¬ Õ¶Õ¸Ö€ ÕºÕ¡Õ¿Õ¸Ö‚Õ°Õ¡Õ¶Õ¸Ö‚Õ´)
+bookmark_label=Ô¸Õ¶Õ©Õ¡ÖÕ«Õ¯ Õ¿Õ¥Õ½Ö„Õ¨
+
+# Secondary toolbar and context menu
+tools.title=Ô³Õ¸Ö€Õ®Õ«Ö„Õ¶Õ¥Ö€
+tools_label=Ô³Õ¸Ö€Õ®Õ«Ö„Õ¶Õ¥Ö€
+first_page.title=Ô±Õ¶ÖÕ¶Õ¥Õ¬ Õ¡Õ¼Õ¡Õ»Õ«Õ¶ Õ§Õ»Õ«Õ¶
+first_page.label=Ô±Õ¶ÖÕ¶Õ¥Õ¬ Õ¡Õ¼Õ¡Õ»Õ«Õ¶ Õ§Õ»Õ«Õ¶
+first_page_label=Ô±Õ¶ÖÕ¶Õ¥Õ¬ Õ¡Õ¼Õ¡Õ»Õ«Õ¶ Õ§Õ»Õ«Õ¶
+last_page.title=Ô±Õ¶ÖÕ¶Õ¥Õ¬ Õ¾Õ¥Ö€Õ»Õ«Õ¶ Õ§Õ»Õ«Õ¶
+last_page.label=Ô±Õ¶ÖÕ¶Õ¥Õ¬ Õ¾Õ¥Ö€Õ»Õ«Õ¶ Õ§Õ»Õ«Õ¶
+last_page_label=Ô±Õ¶ÖÕ¶Õ¥Õ¬ Õ¾Õ¥Ö€Õ»Õ«Õ¶ Õ§Õ»Õ«Õ¶
+page_rotate_cw.title=ÕŠÕ¿Õ¿Õ¥Õ¬ Õ¨Õ½Õ¿ ÕªÕ¡Õ´Õ¡ÖÕ¸Ö‚ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ«
+page_rotate_cw.label=ÕŠÕ¿Õ¿Õ¥Õ¬ Õ¨Õ½Õ¿ ÕªÕ¡Õ´Õ¡ÖÕ¸Ö‚ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ«
+page_rotate_cw_label=ÕŠÕ¿Õ¿Õ¥Õ¬ Õ¨Õ½Õ¿ ÕªÕ¡Õ´Õ¡ÖÕ¸Ö‚ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ«
+page_rotate_ccw.title=ÕŠÕ¿Õ¿Õ¥Õ¬ Õ°Õ¡Õ¯Õ¡Õ¼Õ¡Õ¯ ÕªÕ¡Õ´Õ¡ÖÕ¸Ö‚ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ«
+page_rotate_ccw.label=ÕŠÕ¿Õ¿Õ¥Õ¬ Õ°Õ¡Õ¯Õ¡Õ¼Õ¡Õ¯ ÕªÕ¡Õ´Õ¡ÖÕ¸Ö‚ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ«
+page_rotate_ccw_label=ÕŠÕ¿Õ¿Õ¥Õ¬ Õ°Õ¡Õ¯Õ¡Õ¼Õ¡Õ¯ ÕªÕ¡Õ´Õ¡ÖÕ¸Ö‚ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ«
+
+cursor_text_select_tool.title=Õ„Õ«Õ¡ÖÕ¶Õ¥Õ¬ Õ£Ö€Õ¸Ö‚ÕµÕ© Õ¨Õ¶Õ¿Ö€Õ¥Õ¬Õ¸Ö‚ Õ£Õ¸Ö€Õ®Õ«Ö„Õ¨
+cursor_text_select_tool_label=Ô³Ö€Õ¸Ö‚ÕµÕ©Õ¨ Õ¨Õ¶Õ¿Ö€Õ¥Õ¬Õ¸Ö‚ Õ£Õ¸Ö€Õ®Õ«Ö„
+cursor_hand_tool.title=Õ„Õ«Õ¡ÖÕ¶Õ¥Õ¬ ÕÕ¥Õ¼Ö„Õ« Õ£Õ¸Ö€Õ®Õ«Ö„Õ¨
+cursor_hand_tool_label=ÕÕ¥Õ¼Ö„Õ« Õ£Õ¸Ö€Õ®Õ«Ö„
+
+scroll_vertical.title=Õ•Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¥Õ¬ Õ¸Ö‚Õ²Õ²Õ¡Õ°Õ¡ÕµÕ¡Ö Õ¸Õ¬Õ¸Ö€Õ¸Ö‚Õ´
+scroll_vertical_label=ÕˆÖ‚Õ²Õ²Õ¡Õ°Õ¡ÕµÕ¡Ö Õ¸Õ¬Õ¸Ö€Õ¸Ö‚Õ´
+scroll_horizontal.title=Õ•Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¥Õ¬ Õ°Õ¸Ö€Õ«Õ¦Õ¸Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¸Õ¬Õ¸Ö€Õ¸Ö‚Õ´
+scroll_horizontal_label=Õ€Õ¸Ö€Õ«Õ¦Õ¸Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¸Õ¬Õ¸Ö€Õ¸Ö‚Õ´
+scroll_wrapped.title=Õ•Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¥Õ¬ ÖƒÕ¡Õ©Õ¡Õ©Õ¾Õ¡Õ® Õ¸Õ¬Õ¸Ö€Õ¸Ö‚Õ´
+scroll_wrapped_label=Õ“Õ¡Õ©Õ¡Õ©Õ¾Õ¡Õ® Õ¸Õ¬Õ¸Ö€Õ¸Ö‚Õ´
+
+spread_none.title=Õ„Õ« Õ´Õ«Õ¡ÖÕ¥Ö„ Õ§Õ»Õ« Õ¾Õ¥Ö€Õ¡Õ®Õ¡Õ®Õ¯Õ¥Ö€Õ«Õ¶
+spread_none_label=Õ‰Õ¯Õ¡ Õ¾Õ¥Ö€Õ¡Õ®Õ¡Õ®Õ¯Õ¥Ö€
+spread_odd.title=Õ„Õ«Õ¡ÖÕ¥Ö„ Õ§Õ»Õ« Õ¾Õ¥Ö€Õ¡Õ®Õ¡Õ®Õ¯Õ¥Ö€Õ«Õ¶ Õ½Õ¯Õ½Õ¥Õ¬Õ¸Õ¾Õ Õ¯Õ¥Õ¶Õ¿ Õ°Õ¡Õ´Õ¡Ö€Õ¡Õ¯Õ¡Õ¬Õ¾Õ¡Õ® Õ§Õ»Õ¥Ö€Õ¸Õ¾
+spread_odd_label=Ô¿Õ¥Õ¶Õ¿ Õ¾Õ¥Ö€Õ¡Õ®Õ¡Õ®Õ¯Õ¥Ö€
+spread_even.title=Õ„Õ«Õ¡ÖÕ¥Ö„ Õ§Õ»Õ« Õ¾Õ¥Ö€Õ¡Õ®Õ¡Õ®Õ¯Õ¥Ö€Õ«Õ¶ Õ½Õ¯Õ½Õ¥Õ¬Õ¸Õ¾Õ Õ¦Õ¸Ö‚ÕµÕ£ Õ°Õ¡Õ´Õ¡Ö€Õ¡Õ¯Õ¡Õ¬Õ¾Õ¡Õ® Õ§Õ»Õ¥Ö€Õ¸Õ¾
+spread_even_label=Ô¶Õ¸Ö‚ÕµÕ£ Õ¾Õ¥Ö€Õ¡Õ®Õ¡Õ®Õ¯Õ¥Ö€
+
+# Document properties dialog box
+document_properties.title=Փաստաթղթի հատկությունները…
+document_properties_label=Փաստաթղթի հատկությունները…
+document_properties_file_name=Õ†Õ«Õ·Ö„Õ« Õ¡Õ¶Õ¸Ö‚Õ¶Õ¨.
+document_properties_file_size=Õ†Õ«Õ·Ö„ Õ¹Õ¡ÖƒÕ¨.
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} Ô¿Ô² ({{size_b}} Õ¢Õ¡ÕµÕ©)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} Õ„Ô² ({{size_b}} Õ¢Õ¡ÕµÕ©)
+document_properties_title=ÕŽÕ¥Ö€Õ¶Õ¡Õ£Õ«Ö€.
+document_properties_author=Հեղինակ․
+document_properties_subject=ÕŽÕ¥Ö€Õ¶Õ¡Õ£Õ«Ö€.
+document_properties_keywords=Õ€Õ«Õ´Õ¶Õ¡Õ¢Õ¡Õ¼.
+document_properties_creation_date=ÕÕ¿Õ¥Õ²Õ®Õ¥Õ¬Õ¸Ö‚ Õ¡Õ´Õ½Õ¡Õ©Õ«Õ¾Õ¨.
+document_properties_modification_date=Õ“Õ¸ÖƒÕ¸ÕÕ¥Õ¬Õ¸Ö‚ Õ¡Õ´Õ½Õ¡Õ©Õ«Õ¾Õ¨.
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=ÕÕ¿Õ¥Õ²Õ®Õ¸Õ².
+document_properties_producer=PDF-Õ« Õ°Õ¥Õ²Õ«Õ¶Õ¡Õ¯Õ¨.
+document_properties_version=PDF-Õ« Õ¿Õ¡Ö€Õ¢Õ¥Ö€Õ¡Õ¯Õ¨.
+document_properties_page_count=Ô·Õ»Õ¥Ö€Õ« Ö„Õ¡Õ¶Õ¡Õ¯Õ¨.
+document_properties_page_size=Ô·Õ»Õ« Õ¹Õ¡ÖƒÕ¨.
+document_properties_page_size_unit_inches=Õ¸Ö‚Õ´
+document_properties_page_size_unit_millimeters=Õ´Õ´
+document_properties_page_size_orientation_portrait=Õ¸Ö‚Õ²Õ²Õ¡Õ±Õ«Õ£
+document_properties_page_size_orientation_landscape=Õ°Õ¸Ö€Õ«Õ¦Õ¸Õ¶Õ¡Õ¯Õ¡Õ¶
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Õ†Õ¡Õ´Õ¡Õ¯
+document_properties_page_size_name_legal=Õ•Ö€Õ«Õ¶Õ¡Õ¯Õ¡Õ¶
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Արագ վեբ դիտում․
+document_properties_linearized_yes=Ô±ÕµÕ¸
+document_properties_linearized_no=ÕˆÕ¹
+document_properties_close=Õ“Õ¡Õ¯Õ¥Õ¬
+
+print_progress_message=Õ†Õ¡ÕÕ¡ÕºÕ¡Õ¿Ö€Õ¡Õ½Õ¿Õ¸Ö‚Õ´ Õ§ ÖƒÕ¡Õ½Õ¿Õ¡Õ©Õ¸Ö‚Õ²Õ©Õ¨ Õ¿ÕºÕ¥Õ¬Õ¸Ö‚Õ¶...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Õ‰Õ¥Õ²Õ¡Ö€Õ¯Õ¥Õ¬
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Ô²Õ¡ÖÕ¥Õ¬/Õ“Õ¡Õ¯Õ¥Õ¬ Ô¿Õ¸Õ²Õ¡ÕµÕ«Õ¶ Õ¾Õ¡Õ°Õ¡Õ¶Õ¡Õ¯Õ¨
+toggle_sidebar_notification.title=Õ“Õ¸ÕÕ¡Ö€Õ¯Õ¥Õ¬ Ô¿Õ¸Õ²Õ¡ÕµÕ«Õ¶ ÖƒÕ¥Õ²Õ¯Õ¨ (ÖƒÕ¡Õ½Õ¿Õ¡Õ©Õ¸Ö‚Õ²Õ©Õ¨ ÕºÕ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¸Ö‚Õ´ Õ§ Õ¸Ö‚Ö€Õ¾Õ¡Õ£Õ«Õ®/Õ¯ÖÕ¸Ö€Õ¤Õ¶Õ¥Ö€)
+toggle_sidebar_label=Ô²Õ¡ÖÕ¥Õ¬/Õ“Õ¡Õ¯Õ¥Õ¬ Ô¿Õ¸Õ²Õ¡ÕµÕ«Õ¶ Õ¾Õ¡Õ°Õ¡Õ¶Õ¡Õ¯Õ¨
+document_outline.title=Õ‘Õ¸Ö‚ÖÕ¡Õ¤Ö€Õ¥Õ¬ ÖƒÕ¡Õ½Õ¿Õ¡Õ©Õ²Õ©Õ« Õ¸Ö‚Ö€Õ¾Õ¡Õ£Õ«Õ®Õ¨ (Õ¯Ö€Õ¯Õ¶Õ¡Õ¯Õ« Õ½Õ¥Õ²Õ´Õ¥Ö„Õ Õ´Õ«Õ¡Õ¾Õ¸Ö€Õ¶Õ¥Ö€Õ¨ Õ¨Õ¶Õ¤Õ¡Ö€Õ±Õ¡Õ¯Õ¥Õ¬Õ¸Ö‚/Õ¯Õ¸Õ®Õ¯Õ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€)
+document_outline_label=Õ“Õ¡Õ½Õ¿Õ¡Õ©Õ²Õ©Õ« Õ¢Õ¸Õ¾Õ¡Õ¶Õ¤Õ¡Õ¯Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨
+attachments.title=Õ‘Õ¸Ö‚ÖÕ¡Õ¤Ö€Õ¥Õ¬ Õ¯ÖÕ¸Ö€Õ¤Õ¶Õ¥Ö€Õ¨
+attachments_label=Ô¿ÖÕ¸Ö€Õ¤Õ¶Õ¥Ö€
+thumbs.title=Õ‘Õ¸Ö‚ÖÕ¡Õ¤Ö€Õ¥Õ¬ Õ„Õ¡Õ¶Ö€Õ¡ÕºÕ¡Õ¿Õ¯Õ¥Ö€Õ¨
+thumbs_label=Õ„Õ¡Õ¶Ö€Õ¡ÕºÕ¡Õ¿Õ¯Õ¥Ö€Õ¨
+findbar.title=Ô³Õ¿Õ¶Õ¥Õ¬ ÖƒÕ¡Õ½Õ¿Õ¡Õ©Õ²Õ©Õ¸Ö‚Õ´
+findbar_label=ÕˆÖ€Õ¸Õ¶Õ¸Ö‚Õ´
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Ô·Õ» {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Ô·Õ»Õ¨ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Ô·Õ»Õ« Õ´Õ¡Õ¶Ö€Õ¡ÕºÕ¡Õ¿Õ¯Õ¥Ö€Õ¨ {{page}}
+
+# Find panel button title and messages
+find_input.title=ÕˆÖ€Õ¸Õ¶Õ¸Ö‚Õ´
+find_input.placeholder=Ô³Õ¿Õ¶Õ¥Õ¬ ÖƒÕ¡Õ½Õ¿Õ¡Õ©Õ²Õ©Õ¸Ö‚Õ´...
+find_previous.title=Ô³Õ¿Õ¶Õ¥Õ¬ Õ¡Õ¶Ö€Õ¡Õ°Õ¡ÕµÕ¿Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¶Õ¡ÕÕ¸Ö€Õ¤ Õ°Õ¡Õ¶Õ¤Õ«ÕºÕ¸Ö‚Õ´Õ¨
+find_previous_label=Õ†Õ¡ÕÕ¸Ö€Õ¤Õ¨
+find_next.title=Ô³Õ¿Õ«Ö€ Õ¡Ö€Õ¿Õ¡Õ°Õ¡ÕµÕ¿Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ°Õ¡Õ»Õ¸Ö€Õ¤ Õ°Õ¡Õ¶Õ¤Õ«ÕºÕ¸Ö‚Õ´Õ¨
+find_next_label=Õ€Õ¡Õ»Õ¸Ö€Õ¤Õ¨
+find_highlight=Ô³Õ¸Ö‚Õ¶Õ¡Õ¶Õ·Õ¥Õ¬ Õ¢Õ¸Õ¬Õ¸Ö€Õ¨
+find_match_case_label=Õ„Õ¥Õ®(ÖƒÕ¸Ö„Ö€)Õ¡Õ¿Õ¡Õ¼ Õ°Õ¡Õ·Õ¾Õ« Õ¡Õ¼Õ¶Õ¥Õ¬
+find_entire_word_label=Ô±Õ´Õ¢Õ¸Õ²Õ» Õ¢Õ¡Õ¼Õ¥Ö€Õ¨
+find_reached_top=Õ€Õ¡Õ½Õ¥Õ¬ Õ¥Ö„ ÖƒÕ¡Õ½Õ¿Õ¡Õ©Õ²Õ©Õ« Õ¾Õ¥Ö€Ö‡Õ«Õ¶, Õ¯Õ·Õ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¾Õ« Õ¶Õ¥Ö€Ö„Ö‡Õ«Ö
+find_reached_bottom=Õ€Õ¡Õ½Õ¥Õ¬ Õ¥Ö„ ÖƒÕ¡Õ½Õ¿Õ¡Õ©Õ²Õ©Õ« Õ¾Õ¥Ö€Õ»Õ«Õ¶, Õ¯Õ·Õ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¾Õ« Õ¾Õ¥Ö€Ö‡Õ«Ö
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ Õ°Õ¸Õ£Õ¶Õ¡Õ¯Õ«(Õ¨Õ¶Õ¤Õ°Õ¡Õ¶Õ¸Ö‚Ö€) ]}
+find_match_count[one]={{current}} {{total}}-Õ« Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ«Ö
+find_match_count[two]={{current}} {{total}}-Õ« Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ«Ö
+find_match_count[few]={{current}} {{total}}-Õ« Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ«Ö
+find_match_count[many]={{current}} {{total}}-Õ« Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ«Ö
+find_match_count[other]={{current}} {{total}}-Õ« Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ«Ö
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ Õ°Õ¸Õ£Õ¶Õ¡Õ¯Õ« (Õ½Õ¡Õ°Õ´Õ¡Õ¶Õ¨) ]}
+find_match_count_limit[zero]=Ô±Õ¾Õ¥Õ¬Õ«Õ¶ Ö„Õ¡Õ¶ {{limit}} Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¨
+find_match_count_limit[one]=Ô±Õ¾Õ¥Õ¬Õ«Õ¶ Ö„Õ¡Õ¶ {{limit}} Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¨
+find_match_count_limit[two]=Ô±Õ¾Õ¥Õ¬Õ«Õ¶ Ö„Õ¡Õ¶ {{limit}} Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¶Õ¥Ö€
+find_match_count_limit[few]=Ô±Õ¾Õ¥Õ¬Õ«Õ¶ Ö„Õ¡Õ¶ {{limit}} Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¶Õ¥Ö€
+find_match_count_limit[many]=Ô±Õ¾Õ¥Õ¬Õ«Õ¶ Ö„Õ¡Õ¶ {{limit}} Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¶Õ¥Ö€
+find_match_count_limit[other]=Ô±Õ¾Õ¥Õ¬Õ«Õ¶ Ö„Õ¡Õ¶ {{limit}} Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¶Õ¥Ö€
+find_not_found=Ô±Ö€Õ¿Õ¡Õ°Õ¡ÕµÕ¿Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Õ¹Õ£Õ¿Õ¶Õ¾Õ¥Ö
+
+# Error panel labels
+error_more_info=Ô±Õ¾Õ¥Õ¬Õ« Õ·Õ¡Õ¿ Õ¿Õ¥Õ²Õ¥Õ¯Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶
+error_less_info=Õ”Õ«Õ¹ Õ¿Õ¥Õ²Õ¥Õ¯Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶
+error_close=Õ“Õ¡Õ¯Õ¥Õ¬
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¸Ö‚Õ´Õ¨. {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Ô³Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨. {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Õ‡Õ¥Õ²Õ». {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Õ–Õ¡ÕµÕ¬. {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=ÕÕ¸Õ²Õ¨. {{line}}
+rendering_error=ÕÕÕ¡Õ¬Õ Õ§Õ»Õ¨ Õ½Õ¿Õ¥Õ²Õ®Õ¥Õ¬Õ«Õ½:
+
+# Predefined zoom values
+page_scale_width=Ô·Õ»Õ« Õ¬Õ¡ÕµÕ¶Ö„Õ¨
+page_scale_fit=ÕÕ£Õ¥Õ¬ Õ§Õ»Õ¨
+page_scale_auto=Ô»Õ¶Ö„Õ¶Õ¡Õ·ÕÕ¡Õ¿
+page_scale_actual=Ô»Ö€Õ¡Õ¯Õ¡Õ¶ Õ¹Õ¡ÖƒÕ¨
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=ÕÕÕ¡Õ¬
+loading_error=ÕÕÕ¡Õ¬Õ PDF Ö†Õ¡ÕµÕ¬Õ¨ Õ¢Õ¡ÖÕ¥Õ¬Õ«Õ½Ö‰
+invalid_file_error=ÕÕÕ¡Õ¬ Õ¯Õ¡Õ´ Õ¾Õ¶Õ¡Õ½Õ¾Õ¡Õ® PDF Ö†Õ¡ÕµÕ¬:
+missing_file_error=PDF Ö†Õ¡ÕµÕ¬Õ¨ Õ¢Õ¡ÖÕ¡Õ¯Õ¡ÕµÕ¸Ö‚Õ´ Õ§:
+unexpected_response_error=ÕÕºÕ¡Õ½Õ¡Ö€Õ¯Õ«Õ¹Õ« Õ¡Õ¶Õ½ÕºÕ¡Õ½Õ¥Õ¬Õ« ÕºÕ¡Õ¿Õ¡Õ½ÕÕ¡Õ¶:
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Ô¾Õ¡Õ¶Õ¸Õ©Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶]
+password_label=Õ„Õ¸Ö‚Õ¿Ö„Õ¡Õ£Ö€Õ¥Ö„ PDF-Õ« Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¨:
+password_invalid=Ô³Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¨ Õ½ÕÕ¡Õ¬ Õ§: Ô¿Ö€Õ¯Õ«Õ¶ ÖƒÕ¸Ö€Õ±Õ¥Ö„:
+password_ok=Ô¼Õ¡Õ¾
+password_cancel=Õ‰Õ¥Õ²Õ¡Ö€Õ¯Õ¥Õ¬
+
+printing_not_supported=Ô¶Õ£Õ¸Ö‚Õ·Õ¡ÖÕ¸Ö‚Õ´. ÕÕºÕ¥Õ¬Õ¨ Õ¡Õ´Õ¢Õ¸Õ²Õ»Õ¸Ö‚Õ©ÕµÕ¡Õ´Õ¢ Õ¹Õ« Õ¡Õ»Õ¡Õ¯ÖÕ¾Õ¸Ö‚Õ´ Õ¤Õ«Õ¿Õ¡Ö€Õ¯Õ«Õ¹Õ« Õ¯Õ¸Õ²Õ´Õ«ÖÖ‰
+printing_not_ready=Ô¶Õ£Õ¸Ö‚Õ·Õ¡ÖÕ¸Ö‚Õ´. PDF-Õ¨ Õ¡Õ´Õ¢Õ¸Õ²Õ»Õ¸Ö‚Õ©ÕµÕ¡Õ´Õ¢ Õ¹Õ« Õ¢Õ¥Õ¼Õ¶Õ¡Õ¾Õ¸Ö€Õ¾Õ¥Õ¬ Õ¿ÕºÕ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€:
+web_fonts_disabled=ÕŽÕ¥Õ¢-Õ¿Õ¡Õ¼Õ¡Õ¿Õ¥Õ½Õ¡Õ¯Õ¶Õ¥Ö€Õ¨ Õ¡Õ¶Õ»Õ¡Õ¿Õ¾Õ¡Õ® Õ¥Õ¶. Õ°Õ¶Õ¡Ö€Õ¡Õ¾Õ¸Ö€ Õ¹Õ§ Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¥Õ¬ Õ¶Õ¥Ö€Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¾Õ¡Õ® PDF Õ¿Õ¡Õ¼Õ¡Õ¿Õ¥Õ½Õ¡Õ¯Õ¶Õ¥Ö€Õ¨:
diff --git a/thirdparty/pdfjs/web/locale/hye/viewer.properties b/thirdparty/pdfjs/web/locale/hye/viewer.properties
new file mode 100644
index 0000000..c87dd07
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/hye/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Õ†Õ¡ÕÕ¸Ö€Õ¤ Õ§Õ»
+previous_label=Õ†Õ¡ÕÕ¸Ö€Õ¤Õ¨
+next.title=Õ…Õ¡Õ»Õ¸Ö€Õ¤ Õ§Õ»
+next_label=Õ…Õ¡Õ»Õ¸Ö€Õ¤Õ¨
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Õ§Õ»
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}}-Õ«Ö\u0020
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}}-Õ¨ {{pagesCount}})-Õ«Ö
+
+zoom_out.title=Õ“Õ¸Ö„Ö€Õ¡ÖÕ¶Õ¥Õ¬
+zoom_out_label=Õ“Õ¸Ö„Ö€Õ¡ÖÕ¶Õ¥Õ¬
+zoom_in.title=Ô½Õ¸Õ·Õ¸Ö€Õ¡ÖÕ¶Õ¥Õ¬
+zoom_in_label=Ô½Õ¸Õ·Õ¸Ö€Õ¡ÖÕ¶Õ¥Õ¬
+zoom.title=Õ‰Õ¡ÖƒÕ¡ÖƒÕ¸ÕÕ¸Ö‚Õ´
+presentation_mode.title=Ô±Õ¶ÖÕ¶Õ¥Õ¬ Õ¶Õ¥Ö€Õ¯Õ¡ÕµÕ¡ÖÕ´Õ¡Õ¶ Õ¥Õ²Õ¡Õ¶Õ¡Õ¯Õ«Õ¶
+presentation_mode_label=Õ†Õ¥Ö€Õ¯Õ¡ÕµÕ¡ÖÕ´Õ¡Õ¶ Õ¥Õ²Õ¡Õ¶Õ¡Õ¯
+open_file.title=Ô²Õ¡ÖÕ¥Õ¬ Õ¶Õ«Õ·Ö„Õ¨
+open_file_label=Ô²Õ¡ÖÕ¥Õ¬
+print.title=ÕÕºÕ¥Õ¬
+print_label=ÕÕºÕ¥Õ¬
+download.title=Ô²Õ¥Õ¼Õ¶Õ¥Õ¬
+download_label=Ô²Õ¥Õ¼Õ¶Õ¥Õ¬
+bookmark.title=Ô¸Õ¶Õ©Õ¡ÖÕ«Õ¯ Õ¿Õ¥Õ½Ö„Õ¸Õ¾ (ÕºÕ¡Õ¿Õ³Õ§Õ¶Õ¥Õ¬ Õ¯Õ¡Õ´ Õ¢Õ¡ÖÕ¥Õ¬ Õ¶Õ¸Ö€ ÕºÕ¡Õ¿Õ¸Ö‚Õ°Õ¡Õ¶Õ¸Ö‚Õ´)
+bookmark_label=Ô¸Õ¶Õ©Õ¡ÖÕ«Õ¯ Õ¿Õ¥Õ½Ö„
+
+# Secondary toolbar and context menu
+tools.title=Ô³Õ¸Ö€Õ®Õ«Ö„Õ¶Õ¥Ö€
+tools_label=Ô³Õ¸Ö€Õ®Õ«Ö„Õ¶Õ¥Ö€
+first_page.title=Ô³Õ¶Õ¡Õ¬ Õ¤Õ§ÕºÕ« Õ¡Õ¼Õ¡Õ»Õ«Õ¶ Õ§Õ»
+first_page.label=Ô³Õ¶Õ¡Õ¬ Õ¤Õ§ÕºÕ« Õ¡Õ¼Õ¡Õ»Õ«Õ¶ Õ§Õ»
+first_page_label=Ô³Õ¶Õ¡Õ¬ Õ¤Õ§ÕºÕ« Õ¡Õ¼Õ¡Õ»Õ«Õ¶ Õ§Õ»
+last_page.title=Ô³Õ¶Õ¡Õ¬ Õ¤Õ§ÕºÕ« Õ¾Õ¥Ö€Õ»Õ«Õ¶ Õ§Õ»
+last_page.label=Ô³Õ¶Õ¡Õ¬ Õ¤Õ§ÕºÕ« Õ¾Õ¥Ö€Õ»Õ«Õ¶ Õ§Õ»
+last_page_label=Ô³Õ¶Õ¡Õ¬ Õ¤Õ§ÕºÕ« Õ¾Õ¥Ö€Õ»Õ«Õ¶ Õ§Õ»
+page_rotate_cw.title=ÕŠÕ¿Õ¿Õ¥Õ¬ ÕªÕ¡Õ´Õ¡ÖÕ¸ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ« Õ¸Ö‚Õ²Õ²Õ¸Ö‚Õ©Õ¥Õ¡Õ´Õ¢
+page_rotate_cw.label=ÕŠÕ¿Õ¿Õ¥Õ¬ ÕªÕ¡Õ´Õ¡ÖÕ¸ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ« Õ¸Ö‚Õ²Õ²Õ¸Ö‚Õ©Õ¥Õ¡Õ´Õ¢
+page_rotate_cw_label=ÕŠÕ¿Õ¿Õ¥Õ¬ ÕªÕ¡Õ´Õ¡ÖÕ¸ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ« Õ¸Ö‚Õ²Õ²Õ¸Ö‚Õ©Õ¥Õ¡Õ´Õ¢
+page_rotate_ccw.title=ÕŠÕ¿Õ¿Õ¥Õ¬ ÕªÕ¡Õ´Õ¡ÖÕ¸ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ« Õ°Õ¡Õ¯Õ¡Õ¼Õ¡Õ¯ Õ¸Ö‚Õ²Õ²Õ¸Ö‚Õ©Õ¥Õ¡Õ´Õ¢
+page_rotate_ccw.label=ÕŠÕ¿Õ¿Õ¥Õ¬ ÕªÕ¡Õ´Õ¡ÖÕ¸ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ« Õ°Õ¡Õ¯Õ¡Õ¼Õ¡Õ¯ Õ¸Ö‚Õ²Õ²Õ¸Ö‚Õ©Õ¥Õ¡Õ´Õ¢
+page_rotate_ccw_label=ÕŠÕ¿Õ¿Õ¥Õ¬ ÕªÕ¡Õ´Õ¡ÖÕ¸ÕµÖÕ« Õ½Õ¬Õ¡Ö„Õ« Õ°Õ¡Õ¯Õ¡Õ¼Õ¡Õ¯ Õ¸Ö‚Õ²Õ²Õ¸Ö‚Õ©Õ¥Õ¡Õ´Õ¢
+
+cursor_text_select_tool.title=Õ„Õ«Õ¡ÖÕ¶Õ¥Õ¬ Õ£Ö€Õ¸ÕµÕ© Õ¨Õ¶Õ¿Ö€Õ¥Õ¬Õ¸Ö‚ Õ£Õ¸Ö€Õ®Õ«Ö„Õ¨
+cursor_text_select_tool_label=Ô³Ö€Õ¸Ö‚Õ¡Õ®Ö„ Õ¨Õ¶Õ¿Ö€Õ¥Õ¬Õ¸Ö‚ Õ£Õ¸Ö€Õ®Õ«Ö„
+cursor_hand_tool.title=Õ„Õ«Õ¡ÖÕ¶Õ¥Õ¬ Õ±Õ¥Õ¼Ö„Õ« Õ£Õ¸Ö€Õ®Õ«Ö„Õ¨
+cursor_hand_tool_label=ÕÕ¥Õ¼Ö„Õ« Õ£Õ¸Ö€Õ®Õ«Ö„
+
+scroll_vertical.title=Ô±Ö‚Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¥Õ¬ Õ¸Ö‚Õ²Õ²Õ¡Õ°Õ¡ÕµÕ¥Õ¡Ö Õ¸Õ¬Õ¸Ö€Õ¸Ö‚Õ´
+scroll_vertical_label=ÕˆÖ‚Õ²Õ²Õ¡Õ°Õ¡ÕµÕ¥Õ¡Ö Õ¸Õ¬Õ¸Ö€Õ¸Ö‚Õ´
+scroll_horizontal.title=Ô±Ö‚Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¥Õ¬ Õ°Õ¸Ö€Õ«Õ¦Õ¸Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¸Õ¬Õ¸Ö€Õ¸Ö‚Õ´
+scroll_horizontal_label=Õ€Õ¸Ö€Õ«Õ¦Õ¸Õ¶Õ¡Õ¯Õ¡Õ¶ Õ¸Õ¬Õ¸Ö€Õ¸Ö‚Õ´
+scroll_wrapped.title=Ô±Ö‚Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¥Õ¬ ÖƒÕ¡Õ©Õ¡Õ©Õ¸Ö‚Õ¡Õ® Õ¸Õ¬Õ¸Ö€Õ¸Ö‚Õ´
+scroll_wrapped_label=Õ“Õ¡Õ©Õ¡Õ©Õ¸Ö‚Õ¡Õ® Õ¸Õ¬Õ¸Ö€Õ¸Ö‚Õ´
+
+spread_none.title=Õ„Õ« Õ´Õ«Õ¡ÖÕ§Ö„ Õ§Õ»Õ« Õ¯Õ¸Õ¶Õ¿Õ¥Ö„Õ½Õ¿Õ¸Ö‚Õ´
+spread_none_label=Õ‰Õ¯Õ¡Õµ Õ¯Õ¸Õ¶Õ¿Õ¥Ö„Õ½Õ¿
+spread_odd.title=Õ„Õ«Õ¡ÖÕ§Ö„ Õ§Õ»Õ« Õ¯Õ¸Õ¶Õ¿Õ¥Ö„Õ½Õ¿Õ«Õ¶ Õ½Õ¯Õ½Õ¥Õ¬Õ¸Õ¾Õ Õ¯Õ¥Õ¶Õ¿ Õ°Õ¡Õ´Õ¡Ö€Õ¡Õ¯Õ¡Õ¬Õ¸Ö‚Õ¡Õ® Õ§Õ»Õ¥Ö€Õ¸Õ¾
+spread_odd_label=ÕÕ¡Ö€Õ¡Ö‚Ö€Õ«Õ¶Õ¡Õ¯ Õ¯Õ¸Õ¶Õ¿Õ¥Ö„Õ½Õ¿
+spread_even.title=Õ„Õ«Õ¡ÖÕ§Ö„ Õ§Õ»Õ« Õ¯Õ¸Õ¶Õ¿Õ¥Ö„Õ½Õ¿Õ«Õ¶ Õ½Õ¯Õ½Õ¥Õ¬Õ¸Õ¾Õ Õ¦Õ¸ÕµÕ£ Õ°Õ¡Õ´Õ¡Ö€Õ¡Õ¯Õ¡Õ¬Õ¸Ö‚Õ¡Õ® Õ§Õ»Õ¥Ö€Õ¸Õ¾
+spread_even_label=Õ€Õ¡Ö‚Õ¡Õ½Õ¡Ö€ Õ¾Õ¥Ö€Õ¡Õ®Õ¡Õ®Õ¯Õ¥Ö€
+
+# Document properties dialog box
+document_properties.title=Փաստաթղթի հատկութիւնները…
+document_properties_label=Փաստաթղթի յատկութիւնները…
+document_properties_file_name=Նիշքի անունը․
+document_properties_file_size=Õ†Õ«Õ·Ö„ Õ¹Õ¡ÖƒÕ¨.
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} Ô¿Ô² ({{size_b}} Õ¢Õ¡ÕµÕ©)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} Õ„Ô² ({{size_b}} Õ¢Õ¡ÕµÕ©)
+document_properties_title=ÕŽÕ¥Ö€Õ¶Õ¡Õ£Õ«Ö€
+document_properties_author=Հեղինակ․
+document_properties_subject=Õ¡Õ¼Õ¡Ö€Õ¯Õ¡Õµ
+document_properties_keywords=Õ€Õ«Õ´Õ¶Õ¡Õ¢Õ¡Õ¼Õ¥Ö€
+document_properties_creation_date=ÕÕ¿Õ¥Õ²Õ®Õ´Õ¡Õ¶ Õ¡Õ´Õ½Õ¡Õ©Õ«Ö‚
+document_properties_modification_date=Õ“Õ¸ÖƒÕ¸ÕÕ¸Ö‚Õ©Õ¥Õ¡Õ¶ Õ¡Õ´Õ½Õ¡Õ©Õ«Ö‚.
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=ÕÕ¿Õ¥Õ²Õ®Õ¸Õ²
+document_properties_producer=PDF-Õ« Ô±Ö€Õ¿Õ¡Õ¤Ö€Õ¸Õ²Õ¨.
+document_properties_version=PDF-Õ« Õ¿Õ¡Ö€Õ¢Õ¥Ö€Õ¡Õ¯Õ¨.
+document_properties_page_count=Ô·Õ»Õ¥Ö€Õ« Ö„Õ¡Õ¶Õ¡Õ¯Õ¨.
+document_properties_page_size=Ô·Õ»Õ« Õ¹Õ¡ÖƒÕ¨.
+document_properties_page_size_unit_inches=Õ¸Ö‚Õ´
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=Õ¸Ö‚Õ²Õ²Õ¡Õ±Õ«Õ£
+document_properties_page_size_orientation_landscape=Õ°Õ¸Ö€Õ«Õ¦Õ¸Õ¶Õ¡Õ¯Õ¡Õ¶
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Õ†Õ¡Õ´Õ¡Õ¯
+document_properties_page_size_name_legal=Ô±Ö‚Ö€Õ«Õ¶Õ¡Õ¯Õ¡Õ¶
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Արագ վեբ դիտում․
+document_properties_linearized_yes=Ô±ÕµÕ¸
+document_properties_linearized_no=ÕˆÕ¹
+document_properties_close=Õ“Õ¡Õ¯Õ¥Õ¬
+
+print_progress_message=Õ†Õ¡ÕÕ¡ÕºÕ¡Õ¿Ö€Õ¡Õ½Õ¿Õ¸Ö‚Õ´ Õ§ ÖƒÕ¡Õ½Õ¿Õ¡Õ©Õ¸Ö‚Õ²Õ©Õ¨ տպելուն…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Õ‰Õ¥Õ²Õ¡Ö€Õ¯Õ¥Õ¬
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Õ“Õ¸ÕÕ¡Ö€Õ¯Õ¥Õ¬ Õ¯Õ¸Õ²Õ¡ÕµÕ«Õ¶ Õ¾Õ¡Õ°Õ¡Õ¶Õ¡Õ¯Õ¨
+toggle_sidebar_notification.title=Õ“Õ¸ÕÕ¡Ö€Õ¯Õ¥Õ¬ Õ¯Õ¸Õ²Õ¡ÕµÕ«Õ¶ Õ¾Õ¡Õ°Õ¡Õ¶Õ¡Õ¯Õ¨ (ÖƒÕ¡Õ½Õ¿Õ¡Õ©Õ¸Ö‚Õ²Õ©Õ¨ ÕºÕ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¸Ö‚Õ´ Õ§ Õ¸Ö‚Ö€Õ¸Ö‚Õ¡Õ£Õ«Õ®/Õ¯ÖÕ¸Ö€Õ¤)
+toggle_sidebar_notification2.title=Õ“Õ¸ÕÕ¡Õ¶Õ»Õ¡Õ¿Õ¥Õ¬ Õ¯Õ¸Õ²Õ´Õ¶Õ¡Õ½Õ«Ö‚Õ¶Õ¨ (ÖƒÕ¡Õ½Õ¿Õ¡Õ©Õ¸Ö‚Õ²Õ©Õ¨ ÕºÕ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¸Ö‚Õ´ Õ§ Õ¸Ö‚Ö€Õ¸Ö‚Õ¡Õ£Õ«Õ®/Õ¯ÖÕ¸Ö€Õ¤Õ¶Õ¥Ö€/Õ·Õ¥Ö€Õ¿Õ¥Ö€)
+toggle_sidebar_label=Õ“Õ¸ÕÕ¡Ö€Õ¯Õ¥Õ¬ Õ¯Õ¸Õ²Õ¡ÕµÕ«Õ¶ Õ¾Õ¡Õ°Õ¡Õ¶Õ¡Õ¯Õ¨
+document_outline.title=Õ‘Õ¸Ö‚ÖÕ¡Õ¤Ö€Õ¥Õ¬ ÖƒÕ¡Õ½Õ¿Õ¡Õ©Õ²Õ©Õ« Õ¸Ö‚Ö€Õ¸Ö‚Õ¡Õ£Õ«Õ®Õ¨ (Õ¯Ö€Õ¯Õ¶Õ¡Õ¯Õ« Õ½Õ¥Õ²Õ´Õ§Ö„Õ Õ´Õ«Õ¡Ö‚Õ¸Ö€Õ¶Õ¥Ö€Õ¨ Õ¨Õ¶Õ¤Õ¡Ö€Õ±Õ¡Õ¯Õ¥Õ¬Õ¸Ö‚/Õ¯Õ¸Õ®Õ¯Õ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€)
+document_outline_label=Õ“Õ¡Õ½Õ¿Õ¡Õ©Õ²Õ©Õ« Õ¸Ö‚Ö€Õ¸Ö‚Õ¡Õ£Õ«Õ®
+attachments.title=Õ‘Õ¸Ö‚ÖÕ¡Õ¤Ö€Õ¥Õ¬ Õ¯ÖÕ¸Ö€Õ¤Õ¶Õ¥Ö€Õ¨
+attachments_label=Ô¿ÖÕ¸Ö€Õ¤Õ¶Õ¥Ö€
+layers.title=Õ‘Õ¸Ö‚ÖÕ¡Õ¤Ö€Õ¥Õ¬ Õ·Õ¥Ö€Õ¿Õ¥Ö€Õ¨ (Õ¯Ö€Õ¯Õ¶Õ¡Õ°ÕºÕ¥Õ¬ Õ¾Õ¥Ö€Õ¡Õ¯Õ¡ÕµÕ¥Õ¬Õ¸Ö‚ Õ¢Õ¸Õ¬Õ¸Ö€ Õ·Õ¥Ö€Õ¿Õ¥Ö€Õ¨ Õ½Õ¯Õ¦Õ¢Õ¶Õ¡Õ¤Õ«Ö€ Õ¾Õ«Õ³Õ¡Õ¯Õ«)
+layers_label=Õ‡Õ¥Ö€Õ¿Õ¥Ö€
+thumbs.title=Õ‘Õ¸Ö‚ÖÕ¡Õ¤Ö€Õ¥Õ¬ Õ´Õ¡Õ¶Ö€Õ¡ÕºÕ¡Õ¿Õ¯Õ¥Ö€Õ¨
+thumbs_label=Õ„Õ¡Õ¶Ö€Õ¡ÕºÕ¡Õ¿Õ¯Õ¥Ö€
+findbar.title=Ô³Õ¿Õ¶Õ¥Õ¬ ÖƒÕ¡Õ½Õ¿Õ¡Õ©Õ²Õ©Õ¸Ö‚Õ´
+findbar_label=ÕˆÖ€Õ¸Õ¶Õ¸Ö‚Õ´
+
+additional_layers=Ô¼Ö€Õ¡ÖÕ¸Ö‚ÖÕ«Õ¹ Õ·Õ¥Ö€Õ¿Õ¥Ö€
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Ô·Õ» {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Ô·Õ»Õ¨ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Ô·Õ»Õ« Õ´Õ¡Õ¶Ö€Õ¡ÕºÕ¡Õ¿Õ¯Õ¥Ö€Õ¨ {{page}}
+
+# Find panel button title and messages
+find_input.title=ÕˆÖ€Õ¸Õ¶Õ¸Ö‚Õ´
+find_input.placeholder=Գտնել փաստաթղթում…
+find_previous.title=Ô³Õ¿Õ¶Õ¥Õ¬ Õ¡Ö€Õ¿Õ¡ÕµÕ¡ÕµÕ¿Õ¸Ö‚Õ©Õ¥Õ¡Õ¶ Õ¶Õ¡ÕÕ¸Ö€Õ¤ Õ¡Ö€Õ¿Õ¡ÕµÕ¡ÕµÕ¿Õ¸Ö‚Õ©Õ«Ö‚Õ¶Õ¨
+find_previous_label=Õ†Õ¡ÕÕ¸Ö€Õ¤Õ¨
+find_next.title=Ô³Õ¿Õ«Ö€ Õ¡Ö€Õ¿Õ¡ÕµÕ¡ÕµÕ¿Õ¸Ö‚Õ©Õ¥Õ¡Õ¶ ÕµÕ¡Õ»Õ¸Ö€Õ¤ Õ¡Ö€Õ¿Õ¡ÕµÕ¡ÕµÕ¿Õ¸Ö‚Õ©Õ«Ö‚Õ¶Õ¨
+find_next_label=Õ€Õ¡Õ»Õ¸Ö€Õ¤Õ¨
+find_highlight=Ô³Õ¸Ö‚Õ¶Õ¡Õ¶Õ·Õ¥Õ¬ Õ¢Õ¸Õ¬Õ¸Ö€Õ¨
+find_match_case_label=Õ€Õ¡Õ·Õ¸Ö‚Õ« Õ¡Õ¼Õ¶Õ¥Õ¬ Õ°Õ¡Õ¶Õ£Õ¡Õ´Õ¡Õ¶Ö„Õ¨
+find_entire_word_label=Ô±Õ´Õ¢Õ¸Õ²Õ» Õ¢Õ¡Õ¼Õ¥Ö€Õ¨
+find_reached_top=Õ€Õ¡Õ½Õ¥Õ¬ Õ¥Ö„ ÖƒÕ¡Õ½Õ¿Õ¡Õ©Õ²Õ©Õ« Õ¾Õ¥Ö€Õ¥Ö‚Õ«Õ¶,Õ·Õ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¥Õ¬ Õ¶Õ¥Ö€Ö„Õ¥Ö‚Õ«Ö
+find_reached_bottom=Õ€Õ¡Õ½Õ¥Õ¬ Õ§Ö„ ÖƒÕ¡Õ½Õ¿Õ¡Õ©Õ²Õ©Õ« Õ¾Õ¥Ö€Õ»Õ«Õ¶, Õ·Õ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¥Õ¬ Õ¾Õ¥Ö€Õ¥Ö‚Õ«Ö
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ Õ°Õ¸Õ£Õ¶Õ¡Õ¯Õ«(Õ¨Õ¶Õ¤Õ°Õ¡Õ¶Õ¸Ö‚Ö€) ]}
+find_match_count[one]={{current}} {{total}}-Õ« Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ«Ö
+find_match_count[two]={{current}} {{total}}-Õ« Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ«Ö
+find_match_count[few]={{current}} {{total}}-Õ« Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ«Ö
+find_match_count[many]={{current}} {{total}}-Õ« Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ«Ö
+find_match_count[other]={{current}} {{total}}-Õ« Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ«Ö
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ Õ°Õ¸Õ£Õ¶Õ¡Õ¯Õ« (Õ½Õ¡Õ°Õ´Õ¡Õ¶Õ¨) ]}
+find_match_count_limit[zero]=Ô±Ö‚Õ¥Õ¬Õ«Õ¶ Ö„Õ¡Õ¶ {{limit}} Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¨
+find_match_count_limit[one]=Ô±Ö‚Õ¥Õ¬Õ«Õ¶ Ö„Õ¡Õ¶ {{limit}} Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¨
+find_match_count_limit[two]=Ô±Ö‚Õ¥Õ¬Õ«Õ¶ Ö„Õ¡Õ¶ {{limit}} Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¨
+find_match_count_limit[few]=Ô±Ö‚Õ¥Õ¬Õ«Õ¶ Ö„Õ¡Õ¶ {{limit}} Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¨
+find_match_count_limit[many]=Ô±Ö‚Õ¥Õ¬Õ«Õ¶ Ö„Õ¡Õ¶ {{limit}} Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¨
+find_match_count_limit[other]=Ô±Ö‚Õ¥Õ¬Õ«Õ¶ Ö„Õ¡Õ¶ {{limit}} Õ°Õ¡Õ´Õ¨Õ¶Õ¯Õ¶Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¨
+find_not_found=Ô±Ö€Õ¿Õ¡ÕµÕ¡ÕµÕ¿Õ¸Ö‚Õ©Õ«Ö‚Õ¶Õ¨ Õ¹Õ£Õ¿Õ¶Õ¸Ö‚Õ¥Ö
+
+# Error panel labels
+error_more_info=Ô±Ö‚Õ¥Õ¬Õ« Õ·Õ¡Õ¿ Õ¿Õ¥Õ²Õ¥Õ¯Õ¸Ö‚Õ©Õ«Ö‚Õ¶
+error_less_info=Õ”Õ«Õ¹ Õ¿Õ¥Õ²Õ¥Õ¯Õ¸Ö‚Õ©Õ«Ö‚Õ¶
+error_close=Õ“Õ¡Õ¯Õ¥Õ¬
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¸Ö‚Õ´Õ¨. {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Ô³Ö€Õ¸Ö‚Õ©Õ«Ö‚Õ¶Õ¨. {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Õ‡Õ¥Õ²Õ». {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=նիշք․ {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=ÕÕ¸Õ²Õ¨. {{line}}
+rendering_error=ÕÕÕ¡Õ¬ Õ§ Õ¿Õ¥Õ²Õ« Õ¸Ö‚Õ¶Õ¥ÖÕ¥Õ¬ Õ§Õ»Õ« Õ´Õ¥Õ¯Õ¶Õ¡Õ¢Õ¡Õ¶Õ´Õ¡Õ¶ ÕªÕ¡Õ´Õ¡Õ¶Õ¡Õ¯
+
+# Predefined zoom values
+page_scale_width=Ô·Õ»Õ« Õ¬Õ¡ÕµÕ¶Õ¸Ö‚Õ©Õ«Ö‚Õ¶
+page_scale_fit=Õ€Õ¡Ö€Õ´Õ¡Ö€Õ¥ÖÕ¶Õ¥Õ¬ Õ§Õ»Õ¨
+page_scale_auto=Ô»Õ¶Ö„Õ¶Õ¡Õ·ÕÕ¡Õ¿ Õ¹Õ¡ÖƒÕ¡ÖƒÕ¸ÕÕ¸Ö‚Õ´
+page_scale_actual=Ô»Ö€Õ¡Õ¯Õ¡Õ¶ Õ¹Õ¡ÖƒÕ¨
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=ÕÕÕ¡Õ¬
+loading_error=PDF Õ¶Õ«Õ·Ö„Õ¨ Õ¢Õ¡ÖÕ¥Õ¬Õ«Õ½ Õ½ÕÕ¡Õ¬ Õ§ Õ¿Õ¥Õ²Õ« Õ¸Ö‚Õ¶Õ¥ÖÕ¥Õ¬Ö‰
+invalid_file_error=ÕÕÕ¡Õ¬ Õ¯Õ¡Õ´ Õ¾Õ¶Õ¡Õ½Õ¸Ö‚Õ¡Õ® PDF Õ¶Õ«Õ·Ö„Ö‰
+missing_file_error=PDF Õ¶Õ«Õ·Ö„Õ¨ Õ¢Õ¡ÖÕ¡Õ¯Õ¡Õ«Ö‚Õ´ Õ§Ö‰
+unexpected_response_error=ÕÕºÕ¡Õ½Õ¡Ö€Õ¯Õ«Õ¹Õ« Õ¡Õ¶Õ½ÕºÕ¡Õ½Õ¥Õ¬Õ« ÕºÕ¡Õ¿Õ¡Õ½ÕÕ¡Õ¶Ö‰
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Ô¾Õ¡Õ¶Õ¸Õ©Õ¸Ö‚Õ©Õ«Ö‚Õ¶]
+password_label=Õ„Õ¸Ö‚Õ¿Ö„Õ¡Õ£Ö€Õ§Ö„ Õ£Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¨ Õ¡ÕµÕ½ PDF Õ¶Õ«Õ·Ö„Õ¨ Õ¢Õ¡ÖÕ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€
+password_invalid=Ô³Õ¡Õ²Õ¿Õ¶Õ¡Õ¢Õ¡Õ¼Õ¨ Õ½ÕÕ¡Õ¬ Õ§: Ô¿Ö€Õ¯Õ«Õ¶ ÖƒÕ¸Ö€Õ±Õ§Ö„:
+password_ok=Ô¼Õ¡Ö‚
+password_cancel=Õ‰Õ¥Õ²Õ¡Ö€Õ¯Õ¥Õ¬
+
+printing_not_supported=Ô¶Õ£Õ¸Ö‚Õ·Õ¡ÖÕ¸Ö‚Õ´. ÕÕºÕ¥Õ¬Õ¨ Õ¡Õ´Õ¢Õ¸Õ²Õ»Õ¸Ö‚Õ©Õ¥Õ¡Õ´Õ¢ Õ¹Õ« Õ¡Õ»Õ¡Õ¯ÖÕ¸Ö‚Õ¸Ö‚Õ´ Õ¦Õ¶Õ¶Õ¡Ö€Õ¯Õ«Õ¹Õ« Õ¯Õ¸Õ²Õ´Õ«ÖÖ‰
+printing_not_ready=Ô¶Õ£Õ¸Ö‚Õ·Õ¡ÖÕ¸Ö‚Õ´. PDFÖŠÕ¨ Õ¡Õ´Õ¢Õ¸Õ²Õ»Õ¸Ö‚Õ©Õ¥Õ¡Õ´Õ¢ Õ¹Õ« Õ¢Õ¥Õ¼Õ¶Õ¡Ö‚Õ¸Ö€Õ¸Ö‚Õ¥Õ¬ Õ¿ÕºÕ¥Õ¬Õ¸Ö‚ Õ°Õ¡Õ´Õ¡Ö€Ö‰
+web_fonts_disabled=ÕŽÕ¥Õ¢-Õ¿Õ¡Õ¼Õ¡Õ¿Õ¥Õ½Õ¡Õ¯Õ¶Õ¥Ö€Õ¨ Õ¡Õ¶Õ»Õ¡Õ¿Õ¸Ö‚Õ¡Õ® Õ¥Õ¶. Õ°Õ¶Õ¡Ö€Õ¡Ö‚Õ¸Ö€ Õ¹Õ§ Õ¡Ö‚Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¥Õ¬ Õ¶Õ¥Ö€Õ¯Õ¡Õ¼Õ¸Ö‚ÖÕ¸Ö‚Õ¡Õ® PDF Õ¿Õ¡Õ¼Õ¡Õ¿Õ¥Õ½Õ¡Õ¯Õ¶Õ¥Ö€Õ¨Ö‰
diff --git a/thirdparty/pdfjs/web/locale/ia/viewer.properties b/thirdparty/pdfjs/web/locale/ia/viewer.properties
new file mode 100644
index 0000000..a1d7f42
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/ia/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pagina previe
+previous_label=Previe
+next.title=Pagina sequente
+next_label=Sequente
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pagina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Distantiar
+zoom_out_label=Distantiar
+zoom_in.title=Approximar
+zoom_in_label=Approximar
+zoom.title=Zoom
+presentation_mode.title=Excambiar a modo presentation
+presentation_mode_label=Modo presentation
+open_file.title=Aperir le file
+open_file_label=Aperir
+print.title=Imprimer
+print_label=Imprimer
+download.title=Discargar
+download_label=Discargar
+bookmark.title=Vista actual (copiar o aperir in un nove fenestra)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+tools.title=Instrumentos
+tools_label=Instrumentos
+first_page.title=Ir al prime pagina
+first_page.label=Ir al prime pagina
+first_page_label=Ir al prime pagina
+last_page.title=Ir al prime pagina
+last_page.label=Ir al prime pagina
+last_page_label=Ir al prime pagina
+page_rotate_cw.title=Rotar in senso horari
+page_rotate_cw.label=Rotar in senso horari
+page_rotate_cw_label=Rotar in senso horari
+page_rotate_ccw.title=Rotar in senso antihorari
+page_rotate_ccw.label=Rotar in senso antihorari
+page_rotate_ccw_label=Rotar in senso antihorari
+
+cursor_text_select_tool.title=Activar le instrumento de selection de texto
+cursor_text_select_tool_label=Instrumento de selection de texto
+cursor_hand_tool.title=Activar le instrumento mano
+cursor_hand_tool_label=Instrumento mano
+
+scroll_vertical.title=Usar rolamento vertical
+scroll_vertical_label=Rolamento vertical
+scroll_horizontal.title=Usar rolamento horizontal
+scroll_horizontal_label=Rolamento horizontal
+scroll_wrapped.title=Usar rolamento incapsulate
+scroll_wrapped_label=Rolamento incapsulate
+
+spread_none.title=Non junger paginas dual
+spread_none_label=Sin paginas dual
+spread_odd.title=Junger paginas dual a partir de paginas con numeros impar
+spread_odd_label=Paginas dual impar
+spread_even.title=Junger paginas dual a partir de paginas con numeros par
+spread_even_label=Paginas dual par
+
+# Document properties dialog box
+document_properties.title=Proprietates del documento…
+document_properties_label=Proprietates del documento…
+document_properties_file_name=Nomine del file:
+document_properties_file_size=Dimension de file:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titulo:
+document_properties_author=Autor:
+document_properties_subject=Subjecto:
+document_properties_keywords=Parolas clave:
+document_properties_creation_date=Data de creation:
+document_properties_modification_date=Data de modification:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Creator:
+document_properties_producer=Productor PDF:
+document_properties_version=Version PDF:
+document_properties_page_count=Numero de paginas:
+document_properties_page_size=Dimension del pagina:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=horizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Littera
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista web rapide:
+document_properties_linearized_yes=Si
+document_properties_linearized_no=No
+document_properties_close=Clauder
+
+print_progress_message=Preparation del documento pro le impression…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancellar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Monstrar/celar le barra lateral
+toggle_sidebar_notification.title=Monstrar/celar le barra lateral (le documento contine structura/attachamentos)
+toggle_sidebar_notification2.title=Monstrar/celar le barra lateral (le documento contine structura/attachamentos/stratos)
+toggle_sidebar_label=Monstrar/celar le barra lateral
+document_outline.title=Monstrar le schema del documento (clic duple pro expander/contraher tote le elementos)
+document_outline_label=Schema del documento
+attachments.title=Monstrar le annexos
+attachments_label=Annexos
+layers.title=Monstrar stratos (clicca duple pro remontar tote le stratos al stato predefinite)
+layers_label=Stratos
+thumbs.title=Monstrar le vignettes
+thumbs_label=Vignettes
+findbar.title=Cercar in le documento
+findbar_label=Cercar
+
+additional_layers=Altere stratos
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Pagina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pagina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Vignette del pagina {{page}}
+
+# Find panel button title and messages
+find_input.title=Cercar
+find_input.placeholder=Cercar in le documento…
+find_previous.title=Trovar le previe occurrentia del phrase
+find_previous_label=Previe
+find_next.title=Trovar le successive occurrentia del phrase
+find_next_label=Sequente
+find_highlight=Evidentiar toto
+find_match_case_label=Distinguer majusculas/minusculas
+find_entire_word_label=Parolas integre
+find_reached_top=Initio del documento attingite, continuation ab fin
+find_reached_bottom=Fin del documento attingite, continuation ab initio
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} concordantia
+find_match_count[two]={{current}} de {{total}} concordantias
+find_match_count[few]={{current}} de {{total}} concordantias
+find_match_count[many]={{current}} de {{total}} concordantias
+find_match_count[other]={{current}} de {{total}} concordantias
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Plus de {{limit}} concordantias
+find_match_count_limit[one]=Plus de {{limit}} concordantia
+find_match_count_limit[two]=Plus de {{limit}} concordantias
+find_match_count_limit[few]=Plus de {{limit}} concordantias
+find_match_count_limit[many]=Plus de {{limit}} correspondentias
+find_match_count_limit[other]=Plus de {{limit}} concordantias
+find_not_found=Phrase non trovate
+
+# Error panel labels
+error_more_info=Plus de informationes
+error_less_info=Minus de informationes
+error_close=Clauder
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linea: {{line}}
+rendering_error=Un error occurreva durante que on processava le pagina.
+
+# Predefined zoom values
+page_scale_width=Plen largor del pagina
+page_scale_fit=Pagina integre
+page_scale_auto=Zoom automatic
+page_scale_actual=Dimension actual
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=Un error occurreva durante que on cargava le file PDF.
+invalid_file_error=File PDF corrumpite o non valide.
+missing_file_error=File PDF mancante.
+unexpected_response_error=Responsa del servitor inexpectate.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Insere le contrasigno pro aperir iste file PDF.
+password_invalid=Contrasigno invalide. Per favor retenta.
+password_ok=OK
+password_cancel=Cancellar
+
+printing_not_supported=Attention : le impression non es totalmente supportate per ce navigator.
+printing_not_ready=Attention: le file PDF non es integremente cargate pro lo poter imprimer.
+web_fonts_disabled=Le typos de litteras web es disactivate: impossibile usar le typos de litteras PDF incorporate.
diff --git a/thirdparty/pdfjs/web/locale/id/viewer.properties b/thirdparty/pdfjs/web/locale/id/viewer.properties
new file mode 100644
index 0000000..3583317
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/id/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Laman Sebelumnya
+previous_label=Sebelumnya
+next.title=Laman Selanjutnya
+next_label=Selanjutnya
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Halaman
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=dari {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} dari {{pagesCount}})
+
+zoom_out.title=Perkecil
+zoom_out_label=Perkecil
+zoom_in.title=Perbesar
+zoom_in_label=Perbesar
+zoom.title=Perbesaran
+presentation_mode.title=Ganti ke Mode Presentasi
+presentation_mode_label=Mode Presentasi
+open_file.title=Buka Berkas
+open_file_label=Buka
+print.title=Cetak
+print_label=Cetak
+download.title=Unduh
+download_label=Unduh
+bookmark.title=Tampilan Sekarang (salin atau buka di jendela baru)
+bookmark_label=Tampilan Sekarang
+
+# Secondary toolbar and context menu
+tools.title=Alat
+tools_label=Alat
+first_page.title=Buka Halaman Pertama
+first_page.label=Ke Halaman Pertama
+first_page_label=Buka Halaman Pertama
+last_page.title=Buka Halaman Terakhir
+last_page.label=Ke Halaman Terakhir
+last_page_label=Buka Halaman Terakhir
+page_rotate_cw.title=Putar Searah Jarum Jam
+page_rotate_cw.label=Putar Searah Jarum Jam
+page_rotate_cw_label=Putar Searah Jarum Jam
+page_rotate_ccw.title=Putar Berlawanan Arah Jarum Jam
+page_rotate_ccw.label=Putar Berlawanan Arah Jarum Jam
+page_rotate_ccw_label=Putar Berlawanan Arah Jarum Jam
+
+cursor_text_select_tool.title=Aktifkan Alat Seleksi Teks
+cursor_text_select_tool_label=Alat Seleksi Teks
+cursor_hand_tool.title=Aktifkan Alat Tangan
+cursor_hand_tool_label=Alat Tangan
+
+scroll_vertical.title=Gunakan Penggeseran Vertikal
+scroll_vertical_label=Penggeseran Vertikal
+scroll_horizontal.title=Gunakan Penggeseran Horizontal
+scroll_horizontal_label=Penggeseran Horizontal
+scroll_wrapped.title=Gunakan Penggeseran Terapit
+scroll_wrapped_label=Penggeseran Terapit
+
+spread_none.title=Jangan gabungkan lembar halaman
+spread_none_label=Tidak Ada Lembaran
+spread_odd.title=Gabungkan lembar lamanan mulai dengan halaman ganjil
+spread_odd_label=Lembaran Ganjil
+spread_even.title=Gabungkan lembar halaman dimulai dengan halaman genap
+spread_even_label=Lembaran Genap
+
+# Document properties dialog box
+document_properties.title=Properti Dokumen…
+document_properties_label=Properti Dokumen…
+document_properties_file_name=Nama berkas:
+document_properties_file_size=Ukuran berkas:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} byte)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} byte)
+document_properties_title=Judul:
+document_properties_author=Penyusun:
+document_properties_subject=Subjek:
+document_properties_keywords=Kata Kunci:
+document_properties_creation_date=Tanggal Dibuat:
+document_properties_modification_date=Tanggal Dimodifikasi:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Pembuat:
+document_properties_producer=Pemroduksi PDF:
+document_properties_version=Versi PDF:
+document_properties_page_count=Jumlah Halaman:
+document_properties_page_size=Ukuran Laman:
+document_properties_page_size_unit_inches=inci
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=tegak
+document_properties_page_size_orientation_landscape=mendatar
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Tampilan Web Kilat:
+document_properties_linearized_yes=Ya
+document_properties_linearized_no=Tidak
+document_properties_close=Tutup
+
+print_progress_message=Menyiapkan dokumen untuk pencetakan…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Batalkan
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Aktif/Nonaktifkan Bilah Samping
+toggle_sidebar_notification.title=Aktif/Nonaktifkan Bilah Samping (dokumen berisi kerangka/lampiran)
+toggle_sidebar_notification2.title=Aktif/Nonaktifkan Bilah Samping (dokumen berisi kerangka/lampiran/lapisan)
+toggle_sidebar_label=Aktif/Nonaktifkan Bilah Samping
+document_outline.title=Tampilkan Kerangka Dokumen (klik ganda untuk membentangkan/menciutkan semua item)
+document_outline_label=Kerangka Dokumen
+attachments.title=Tampilkan Lampiran
+attachments_label=Lampiran
+layers.title=Tampilkan Lapisan (klik ganda untuk mengatur ulang semua lapisan ke keadaan baku)
+layers_label=Lapisan
+thumbs.title=Tampilkan Miniatur
+thumbs_label=Miniatur
+findbar.title=Temukan di Dokumen
+findbar_label=Temukan
+
+additional_layers=Lapisan Tambahan
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Laman {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Laman {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatur Laman {{page}}
+
+# Find panel button title and messages
+find_input.title=Temukan
+find_input.placeholder=Temukan di dokumen…
+find_previous.title=Temukan kata sebelumnya
+find_previous_label=Sebelumnya
+find_next.title=Temukan lebih lanjut
+find_next_label=Selanjutnya
+find_highlight=Sorot semuanya
+find_match_case_label=Cocokkan BESAR/kecil
+find_entire_word_label=Seluruh teks
+find_reached_top=Sampai di awal dokumen, dilanjutkan dari bawah
+find_reached_bottom=Sampai di akhir dokumen, dilanjutkan dari atas
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} dari {{total}} hasil
+find_match_count[two]={{current}} dari {{total}} hasil
+find_match_count[few]={{current}} dari {{total}} hasil
+find_match_count[many]={{current}} dari {{total}} hasil
+find_match_count[other]={{current}} dari {{total}} hasil
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Ditemukan lebih dari {{limit}}
+find_match_count_limit[one]=Ditemukan lebih dari {{limit}}
+find_match_count_limit[two]=Ditemukan lebih dari {{limit}}
+find_match_count_limit[few]=Ditemukan lebih dari {{limit}}
+find_match_count_limit[many]=Ditemukan lebih dari {{limit}}
+find_match_count_limit[other]=Ditemukan lebih dari {{limit}}
+find_not_found=Frasa tidak ditemukan
+
+# Error panel labels
+error_more_info=Lebih Banyak Informasi
+error_less_info=Lebih Sedikit Informasi
+error_close=Tutup
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Pesan: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Berkas: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Baris: {{line}}
+rendering_error=Galat terjadi saat merender laman.
+
+# Predefined zoom values
+page_scale_width=Lebar Laman
+page_scale_fit=Muat Laman
+page_scale_auto=Perbesaran Otomatis
+page_scale_actual=Ukuran Asli
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Galat
+loading_error=Galat terjadi saat memuat PDF.
+invalid_file_error=Berkas PDF tidak valid atau rusak.
+missing_file_error=Berkas PDF tidak ada.
+unexpected_response_error=Balasan server yang tidak diharapkan.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotasi {{type}}]
+password_label=Masukkan sandi untuk membuka berkas PDF ini.
+password_invalid=Sandi tidak valid. Silakan coba lagi.
+password_ok=Oke
+password_cancel=Batal
+
+printing_not_supported=Peringatan: Pencetakan tidak didukung secara lengkap pada peramban ini.
+printing_not_ready=Peringatan: Berkas PDF masih belum dimuat secara lengkap untuk dapat dicetak.
+web_fonts_disabled=Font web dinonaktifkan: tidak dapat menggunakan font PDF yang tersemat.
diff --git a/thirdparty/pdfjs/web/locale/is/viewer.properties b/thirdparty/pdfjs/web/locale/is/viewer.properties
new file mode 100644
index 0000000..72dc8ac
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/is/viewer.properties
@@ -0,0 +1,238 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Fyrri sÃða
+previous_label=Fyrri
+next.title=Næsta sÃða
+next_label=Næsti
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=SÃða
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=af {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} af {{pagesCount}})
+
+zoom_out.title=Minnka
+zoom_out_label=Minnka
+zoom_in.title=Stækka
+zoom_in_label=Stækka
+zoom.title=Aðdráttur
+presentation_mode.title=Skipta yfir á kynningarham
+presentation_mode_label=Kynningarhamur
+open_file.title=Opna skrá
+open_file_label=Opna
+print.title=Prenta
+print_label=Prenta
+download.title=Hala niður
+download_label=Hala niður
+bookmark.title=Núverandi sýn (afritaðu eða opnaðu à nýjum glugga)
+bookmark_label=Núverandi sýn
+
+# Secondary toolbar and context menu
+tools.title=Verkfæri
+tools_label=Verkfæri
+first_page.title=Fara á fyrstu sÃðu
+first_page.label=Fara á fyrstu sÃðu
+first_page_label=Fara á fyrstu sÃðu
+last_page.title=Fara á sÃðustu sÃðu
+last_page.label=Fara á sÃðustu sÃðu
+last_page_label=Fara á sÃðustu sÃðu
+page_rotate_cw.title=Snúa réttsælis
+page_rotate_cw.label=Snúa réttsælis
+page_rotate_cw_label=Snúa réttsælis
+page_rotate_ccw.title=Snúa rangsælis
+page_rotate_ccw.label=Snúa rangsælis
+page_rotate_ccw_label=Snúa rangsælis
+
+cursor_text_select_tool.title=Virkja textavalsáhald
+cursor_text_select_tool_label=Textavalsáhald
+cursor_hand_tool.title=Virkja handarverkfæri
+cursor_hand_tool_label=Handarverkfæri
+
+scroll_vertical.title=Nota lóðrétt skrun
+scroll_vertical_label=Lóðrétt skrun
+scroll_horizontal.title=Nota lárétt skrun
+scroll_horizontal_label=Lárétt skrun
+
+spread_none.title=Ekki taka þátt à dreifingu sÃðna
+spread_none_label=Engin dreifing
+spread_odd.title=Taka þátt à dreifingu sÃðna með oddatölum
+spread_odd_label=Oddatöludreifing
+spread_even.title=Taktu þátt à dreifingu sÃðna með jöfnuntölum
+spread_even_label=Jafnatöludreifing
+
+# Document properties dialog box
+document_properties.title=Eiginleikar skjals…
+document_properties_label=Eiginleikar skjals…
+document_properties_file_name=Skráarnafn:
+document_properties_file_size=Skrárstærð:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titill:
+document_properties_author=Hönnuður:
+document_properties_subject=Efni:
+document_properties_keywords=Stikkorð:
+document_properties_creation_date=Búið til:
+document_properties_modification_date=Dags breytingar:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Höfundur:
+document_properties_producer=PDF framleiðandi:
+document_properties_version=PDF útgáfa:
+document_properties_page_count=BlaðsÃðufjöldi:
+document_properties_page_size=Stærð sÃðu:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=skammsnið
+document_properties_page_size_orientation_landscape=langsnið
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=Já
+document_properties_linearized_no=Nei
+document_properties_close=Loka
+
+print_progress_message=Undirbý skjal fyrir prentun…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Hætta við
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=VÃxla hliðslá
+toggle_sidebar_notification.title=VÃxla hliðarslá (skjal inniheldur yfirlit/viðhengi)
+toggle_sidebar_label=VÃxla hliðslá
+document_outline.title=Sýna yfirlit skjals (tvÃsmelltu til að opna/loka öllum hlutum)
+document_outline_label=Efnisskipan skjals
+attachments.title=Sýna viðhengi
+attachments_label=Viðhengi
+thumbs.title=Sýna smámyndir
+thumbs_label=Smámyndir
+findbar.title=Leita à skjali
+findbar_label=Leita
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=SÃða {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Smámynd af sÃðu {{page}}
+
+# Find panel button title and messages
+find_input.title=Leita
+find_input.placeholder=Leita à skjali…
+find_previous.title=Leita að fyrra tilfelli þessara orða
+find_previous_label=Fyrri
+find_next.title=Leita að næsta tilfelli þessara orða
+find_next_label=Næsti
+find_highlight=Lita allt
+find_match_case_label=Passa við stafstöðu
+find_entire_word_label=Heil orð
+find_reached_top=Náði efst à skjal, held áfram neðst
+find_reached_bottom=Náði enda skjals, held áfram efst
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} af {{total}} niðurstöðu
+find_match_count[two]={{current}} af {{total}} niðurstöðum
+find_match_count[few]={{current}} af {{total}} niðurstöðum
+find_match_count[many]={{current}} af {{total}} niðurstöðum
+find_match_count[other]={{current}} af {{total}} niðurstöðum
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Fleiri en {{limit}} niðurstöður
+find_match_count_limit[one]=Fleiri en {{limit}} niðurstaða
+find_match_count_limit[two]=Fleiri en {{limit}} niðurstöður
+find_match_count_limit[few]=Fleiri en {{limit}} niðurstöður
+find_match_count_limit[many]=Fleiri en {{limit}} niðurstöður
+find_match_count_limit[other]=Fleiri en {{limit}} niðurstöður
+find_not_found=Fann ekki orðið
+
+# Error panel labels
+error_more_info=Meiri upplýsingar
+error_less_info=Minni upplýsingar
+error_close=Loka
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Skilaboð: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stafli: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Skrá: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=LÃna: {{line}}
+rendering_error=Upp kom villa við að birta sÃðuna.
+
+# Predefined zoom values
+page_scale_width=SÃðubreidd
+page_scale_fit=Passa á sÃðu
+page_scale_auto=Sjálfvirkur aðdráttur
+page_scale_actual=Raunstærð
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Villa
+loading_error=Villa kom upp við að hlaða inn PDF.
+invalid_file_error=Ógild eða skemmd PDF skrá.
+missing_file_error=Vantar PDF skrá.
+unexpected_response_error=Óvænt svar frá netþjóni.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Skýring]
+password_label=Sláðu inn lykilorð til að opna þessa PDF skrá.
+password_invalid=Ógilt lykilorð. Reyndu aftur.
+password_ok=Ã lagi
+password_cancel=Hætta við
+
+printing_not_supported=Aðvörun: Prentun er ekki með fyllilegan stuðning á þessum vafra.
+printing_not_ready=Aðvörun: Ekki er búið að hlaða inn allri PDF skránni fyrir prentun.
+web_fonts_disabled=Vef leturgerðir eru óvirkar: get ekki notað innbyggðar PDF leturgerðir.
diff --git a/thirdparty/pdfjs/web/locale/it/viewer.properties b/thirdparty/pdfjs/web/locale/it/viewer.properties
new file mode 100644
index 0000000..95c4003
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/it/viewer.properties
@@ -0,0 +1,195 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+previous.title = Pagina precedente
+previous_label = Precedente
+next.title = Pagina successiva
+next_label = Successiva
+
+page.title = Pagina
+of_pages = di {{pagesCount}}
+page_of_pages = ({{pageNumber}} di {{pagesCount}})
+
+zoom_out.title = Riduci zoom
+zoom_out_label = Riduci zoom
+zoom_in.title = Aumenta zoom
+zoom_in_label = Aumenta zoom
+zoom.title = Zoom
+presentation_mode.title = Passa alla modalità presentazione
+presentation_mode_label = Modalità presentazione
+open_file.title = Apri file
+open_file_label = Apri
+print.title = Stampa
+print_label = Stampa
+download.title = Scarica questo documento
+download_label = Download
+bookmark.title = Visualizzazione corrente (copia o apri in una nuova finestra)
+bookmark_label = Visualizzazione corrente
+
+tools.title = Strumenti
+tools_label = Strumenti
+first_page.title = Vai alla prima pagina
+first_page.label = Vai alla prima pagina
+first_page_label = Vai alla prima pagina
+last_page.title = Vai all’ultima pagina
+last_page.label = Vai all’ultima pagina
+last_page_label = Vai all’ultima pagina
+page_rotate_cw.title = Ruota in senso orario
+page_rotate_cw.label = Ruota in senso orario
+page_rotate_cw_label = Ruota in senso orario
+page_rotate_ccw.title = Ruota in senso antiorario
+page_rotate_ccw.label = Ruota in senso antiorario
+page_rotate_ccw_label = Ruota in senso antiorario
+
+cursor_text_select_tool.title = Attiva strumento di selezione testo
+cursor_text_select_tool_label = Strumento di selezione testo
+cursor_hand_tool.title = Attiva strumento mano
+cursor_hand_tool_label = Strumento mano
+
+scroll_vertical.title = Scorri le pagine in verticale
+scroll_vertical_label = Scorrimento verticale
+scroll_horizontal.title = Scorri le pagine in orizzontale
+scroll_horizontal_label = Scorrimento orizzontale
+scroll_wrapped.title = Scorri le pagine in verticale, disponendole da sinistra a destra e andando a capo automaticamente
+scroll_wrapped_label = Scorrimento con a capo automatico
+
+spread_none.title = Non raggruppare pagine
+spread_none_label = Nessun raggruppamento
+spread_odd.title = Crea gruppi di pagine che iniziano con numeri di pagina dispari
+spread_odd_label = Raggruppamento dispari
+spread_even.title = Crea gruppi di pagine che iniziano con numeri di pagina pari
+spread_even_label = Raggruppamento pari
+
+document_properties.title = Proprietà del documento…
+document_properties_label = Proprietà del documento…
+document_properties_file_name = Nome file:
+document_properties_file_size = Dimensione file:
+document_properties_kb = {{size_kb}} kB ({{size_b}} byte)
+document_properties_mb = {{size_mb}} MB ({{size_b}} byte)
+document_properties_title = Titolo:
+document_properties_author = Autore:
+document_properties_subject = Oggetto:
+document_properties_keywords = Parole chiave:
+document_properties_creation_date = Data creazione:
+document_properties_modification_date = Data modifica:
+document_properties_date_string = {{date}}, {{time}}
+document_properties_creator = Autore originale:
+document_properties_producer = Produttore PDF:
+document_properties_version = Versione PDF:
+document_properties_page_count = Conteggio pagine:
+document_properties_page_size = Dimensioni pagina:
+document_properties_page_size_unit_inches = in
+document_properties_page_size_unit_millimeters = mm
+document_properties_page_size_orientation_portrait = verticale
+document_properties_page_size_orientation_landscape = orizzontale
+document_properties_page_size_name_a3 = A3
+document_properties_page_size_name_a4 = A4
+document_properties_page_size_name_letter = Lettera
+document_properties_page_size_name_legal = Legale
+document_properties_page_size_dimension_string = {{width}} × {{height}} {{unit}} ({{orientation}})
+document_properties_page_size_dimension_name_string = {{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+document_properties_linearized = Visualizzazione web veloce:
+document_properties_linearized_yes = Sì
+document_properties_linearized_no = No
+document_properties_close = Chiudi
+
+print_progress_message = Preparazione documento per la stampa…
+print_progress_percent = {{progress}}%
+print_progress_close = Annulla
+
+toggle_sidebar.title = Attiva/disattiva barra laterale
+toggle_sidebar_notification.title = Attiva/disattiva barra laterale (il documento contiene struttura/allegati)
+toggle_sidebar_notification2.title = Attiva/disattiva barra laterale (il documento contiene struttura/allegati/livelli)
+toggle_sidebar_label = Attiva/disattiva barra laterale
+document_outline.title = Visualizza la struttura del documento (doppio clic per visualizzare/comprimere tutti gli elementi)
+document_outline_label = Struttura documento
+attachments.title = Visualizza allegati
+attachments_label = Allegati
+layers.title = Visualizza livelli (doppio clic per ripristinare tutti i livelli allo stato predefinito)
+layers_label = Livelli
+thumbs.title = Mostra le miniature
+thumbs_label = Miniature
+current_outline_item.title = Trova elemento struttura corrente
+current_outline_item_label = Elemento struttura corrente
+findbar.title = Trova nel documento
+findbar_label = Trova
+
+additional_layers = Livelli aggiuntivi
+page_canvas = Pagina {{page}}
+thumb_page_title = Pagina {{page}}
+thumb_page_canvas = Miniatura della pagina {{page}}
+
+find_input.title = Trova
+find_input.placeholder = Trova nel documento…
+find_previous.title = Trova l’occorrenza precedente del testo da cercare
+find_previous_label = Precedente
+find_next.title = Trova l’occorrenza successiva del testo da cercare
+find_next_label = Successivo
+find_highlight = Evidenzia
+find_match_case_label = Maiuscole/minuscole
+find_entire_word_label = Parole intere
+find_reached_top = Raggiunto l’inizio della pagina, continua dalla fine
+find_reached_bottom = Raggiunta la fine della pagina, continua dall’inizio
+find_match_count = {[ plural(total) ]}
+find_match_count[one] = {{current}} di {{total}} corrispondenza
+find_match_count[two] = {{current}} di {{total}} corrispondenze
+find_match_count[few] = {{current}} di {{total}} corrispondenze
+find_match_count[many] = {{current}} di {{total}} corrispondenze
+find_match_count[other] = {{current}} di {{total}} corrispondenze
+find_match_count_limit = {[ plural(limit) ]}
+find_match_count_limit[zero] = Più di {{limit}} corrispondenze
+find_match_count_limit[one] = Più di {{limit}} corrispondenza
+find_match_count_limit[two] = Più di {{limit}} corrispondenze
+find_match_count_limit[few] = Più di {{limit}} corrispondenze
+find_match_count_limit[many] = Più di {{limit}} corrispondenze
+find_match_count_limit[other] = Più di {{limit}} corrispondenze
+find_not_found = Testo non trovato
+
+error_more_info = Ulteriori informazioni
+error_less_info = Nascondi dettagli
+error_close = Chiudi
+error_version_info = PDF.js v{{version}} (build: {{build}})
+error_message = Messaggio: {{message}}
+error_stack = Stack: {{stack}}
+error_file = File: {{file}}
+error_line = Riga: {{line}}
+rendering_error = Si è verificato un errore durante il rendering della pagina.
+
+page_scale_width = Larghezza pagina
+page_scale_fit = Adatta a una pagina
+page_scale_auto = Zoom automatico
+page_scale_actual = Dimensioni effettive
+page_scale_percent = {{scale}}%
+
+loading_error_indicator = Errore
+loading_error = Si è verificato un errore durante il caricamento del PDF.
+invalid_file_error = File PDF non valido o danneggiato.
+missing_file_error = File PDF non disponibile.
+unexpected_response_error = Risposta imprevista del server
+
+annotation_date_string = {{date}}, {{time}}
+
+text_annotation_type.alt = [Annotazione: {{type}}]
+password_label = Inserire la password per aprire questo file PDF.
+password_invalid = Password non corretta. Riprovare.
+password_ok = OK
+password_cancel = Annulla
+
+printing_not_supported = Attenzione: la stampa non è completamente supportata da questo browser.
+printing_not_ready = Attenzione: il PDF non è ancora stato caricato completamente per la stampa.
+web_fonts_disabled = I web font risultano disattivati: impossibile utilizzare i caratteri incorporati nel PDF.
diff --git a/thirdparty/pdfjs/web/locale/ja/viewer.properties b/thirdparty/pdfjs/web/locale/ja/viewer.properties
new file mode 100644
index 0000000..0ea2acd
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/ja/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=å‰ã®ãƒšãƒ¼ã‚¸ã¸æˆ»ã‚Šã¾ã™
+previous_label=å‰ã¸
+next.title=次ã®ãƒšãƒ¼ã‚¸ã¸é€²ã¿ã¾ã™
+next_label=次ã¸
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ページ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=表示を縮å°ã—ã¾ã™
+zoom_out_label=縮å°
+zoom_in.title=表示を拡大ã—ã¾ã™
+zoom_in_label=拡大
+zoom.title=拡大/縮å°
+presentation_mode.title=プレゼンテーションモードã«åˆ‡ã‚Šæ›¿ãˆã¾ã™
+presentation_mode_label=プレゼンテーションモード
+open_file.title=ファイルを開ãã¾ã™
+open_file_label=é–‹ã
+print.title=å°åˆ·ã—ã¾ã™
+print_label=å°åˆ·
+download.title=ダウンãƒãƒ¼ãƒ‰ã—ã¾ã™
+download_label=ダウンãƒãƒ¼ãƒ‰
+bookmark.title=ç¾åœ¨ã®ãƒ“ュー㮠URL ã§ã™ (コピーã¾ãŸã¯æ–°ã—ã„ウィンドウã«é–‹ã)
+bookmark_label=ç¾åœ¨ã®ãƒ“ュー
+
+# Secondary toolbar and context menu
+tools.title=ツール
+tools_label=ツール
+first_page.title=最åˆã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹•ã—ã¾ã™
+first_page.label=最åˆã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹•
+first_page_label=最åˆã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹•
+last_page.title=最後ã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹•ã—ã¾ã™
+last_page.label=最後ã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹•
+last_page_label=最後ã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹•
+page_rotate_cw.title=ページをå³ã¸å›žè»¢ã—ã¾ã™
+page_rotate_cw.label=å³å›žè»¢
+page_rotate_cw_label=å³å›žè»¢
+page_rotate_ccw.title=ページを左ã¸å›žè»¢ã—ã¾ã™
+page_rotate_ccw.label=左回転
+page_rotate_ccw_label=左回転
+
+cursor_text_select_tool.title=テã‚ã‚¹ãƒˆé¸æŠžãƒ„ãƒ¼ãƒ«ã‚’æœ‰åŠ¹ã«ã™ã‚‹
+cursor_text_select_tool_label=テã‚ã‚¹ãƒˆé¸æŠžãƒ„ãƒ¼ãƒ«
+cursor_hand_tool.title=手ã®ã²ã‚‰ãƒ„ールを有効ã«ã™ã‚‹
+cursor_hand_tool_label=手ã®ã²ã‚‰ãƒ„ール
+
+scroll_vertical.title=縦スクãƒãƒ¼ãƒ«ã«ã™ã‚‹
+scroll_vertical_label=縦スクãƒãƒ¼ãƒ«
+scroll_horizontal.title=横スクãƒãƒ¼ãƒ«ã«ã™ã‚‹
+scroll_horizontal_label=横スクãƒãƒ¼ãƒ«
+scroll_wrapped.title=折り返ã—スクãƒãƒ¼ãƒ«ã«ã™ã‚‹
+scroll_wrapped_label=折り返ã—スクãƒãƒ¼ãƒ«
+
+spread_none.title=見開ãã«ã—ãªã„
+spread_none_label=見開ãã«ã—ãªã„
+spread_odd.title=奇数ページ開始ã§è¦‹é–‹ãã«ã™ã‚‹
+spread_odd_label=奇数ページ見開ã
+spread_even.title=å¶æ•°ãƒšãƒ¼ã‚¸é–‹å§‹ã§è¦‹é–‹ãã«ã™ã‚‹
+spread_even_label=å¶æ•°ãƒšãƒ¼ã‚¸è¦‹é–‹ã
+
+# Document properties dialog box
+document_properties.title=文書ã®ãƒ—ãƒãƒ‘ティ...
+document_properties_label=文書ã®ãƒ—ãƒãƒ‘ティ...
+document_properties_file_name=ファイルå:
+document_properties_file_size=ファイルサイズ:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=タイトル:
+document_properties_author=作æˆè€…:
+document_properties_subject=ä»¶å:
+document_properties_keywords=ã‚ーワード:
+document_properties_creation_date=ä½œæˆæ—¥:
+document_properties_modification_date=æ›´æ–°æ—¥:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=アプリケーション:
+document_properties_producer=PDF 作æˆ:
+document_properties_version=PDF ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³:
+document_properties_page_count=ページ数:
+document_properties_page_size=ページサイズ:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=縦
+document_properties_page_size_orientation_landscape=横
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=レター
+document_properties_page_size_name_legal=リーガル
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=ã‚¦ã‚§ãƒ–è¡¨ç¤ºç”¨ã«æœ€é©åŒ–:
+document_properties_linearized_yes=ã¯ã„
+document_properties_linearized_no=ã„ã„ãˆ
+document_properties_close=é–‰ã˜ã‚‹
+
+print_progress_message=文書ã®å°åˆ·ã‚’準備ã—ã¦ã„ã¾ã™...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ã‚ャンセル
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=サイドãƒãƒ¼è¡¨ç¤ºã‚’切り替ãˆã¾ã™
+toggle_sidebar_notification.title=サイドãƒãƒ¼è¡¨ç¤ºã‚’切り替ãˆã¾ã™ (文書ã«å«ã¾ã‚Œã‚‹ã‚¢ã‚¦ãƒˆãƒ©ã‚¤ãƒ³ / 添付)
+toggle_sidebar_notification2.title=サイドãƒãƒ¼è¡¨ç¤ºã‚’切り替ãˆã¾ã™ (文書ã«å«ã¾ã‚Œã‚‹ã‚¢ã‚¦ãƒˆãƒ©ã‚¤ãƒ³ / 添付 / レイヤー)
+toggle_sidebar_label=サイドãƒãƒ¼ã®åˆ‡ã‚Šæ›¿ãˆ
+document_outline.title=文書ã®ç›®æ¬¡ã‚’表示ã—ã¾ã™ (ダブルクリックã§é …目を開閉ã—ã¾ã™)
+document_outline_label=文書ã®ç›®æ¬¡
+attachments.title=添付ファイルを表示ã—ã¾ã™
+attachments_label=添付ファイル
+layers.title=レイヤーを表示ã—ã¾ã™ (ダブルクリックã§ã™ã¹ã¦ã®ãƒ¬ã‚¤ãƒ¤ãƒ¼ãŒåˆæœŸçŠ¶æ…‹ã«æˆ»ã‚Šã¾ã™)
+layers_label=レイヤー
+thumbs.title=縮å°ç‰ˆã‚’表示ã—ã¾ã™
+thumbs_label=縮å°ç‰ˆ
+findbar.title=文書内を検索ã—ã¾ã™
+findbar_label=検索
+
+additional_layers=è¿½åŠ ãƒ¬ã‚¤ãƒ¤ãƒ¼
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas={{page}} ページ
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} ページ
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} ページã®ç¸®å°ç‰ˆ
+
+# Find panel button title and messages
+find_input.title=検索
+find_input.placeholder=文書内を検索...
+find_previous.title=ç¾åœ¨ã‚ˆã‚Šå‰ã®ä½ç½®ã§æŒ‡å®šæ–‡å—列ãŒç¾ã‚Œã‚‹éƒ¨åˆ†ã‚’検索ã—ã¾ã™
+find_previous_label=å‰ã¸
+find_next.title=ç¾åœ¨ã‚ˆã‚Šå¾Œã®ä½ç½®ã§æŒ‡å®šæ–‡å—列ãŒç¾ã‚Œã‚‹éƒ¨åˆ†ã‚’検索ã—ã¾ã™
+find_next_label=次ã¸
+find_highlight=ã™ã¹ã¦å¼·èª¿è¡¨ç¤º
+find_match_case_label=大文å—/å°æ–‡å—を区別
+find_entire_word_label=å˜èªžä¸€è‡´
+find_reached_top=文書先é ã«åˆ°é”ã—ãŸã®ã§æœ«å°¾ã‹ã‚‰ç¶šã‘ã¦æ¤œç´¢ã—ã¾ã™
+find_reached_bottom=文書末尾ã«åˆ°é”ã—ãŸã®ã§å…ˆé ã‹ã‚‰ç¶šã‘ã¦æ¤œç´¢ã—ã¾ã™
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} ä»¶ä¸ {{current}} ä»¶ç›®
+find_match_count[two]={{total}} ä»¶ä¸ {{current}} ä»¶ç›®
+find_match_count[few]={{total}} ä»¶ä¸ {{current}} ä»¶ç›®
+find_match_count[many]={{total}} ä»¶ä¸ {{current}} ä»¶ç›®
+find_match_count[other]={{total}} ä»¶ä¸ {{current}} ä»¶ç›®
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} 件以上一致
+find_match_count_limit[one]={{limit}} 件以上一致
+find_match_count_limit[two]={{limit}} 件以上一致
+find_match_count_limit[few]={{limit}} 件以上一致
+find_match_count_limit[many]={{limit}} 件以上一致
+find_match_count_limit[other]={{limit}} 件以上一致
+find_not_found=見ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ
+
+# Error panel labels
+error_more_info=è©³ç´°æƒ…å ±
+error_less_info=è©³ç´°æƒ…å ±ã‚’éš ã™
+error_close=é–‰ã˜ã‚‹
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (ビルド: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=メッセージ: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=スタック: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ファイル: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=行: {{line}}
+rendering_error=ページã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚
+
+# Predefined zoom values
+page_scale_width=å¹…ã«åˆã‚ã›ã‚‹
+page_scale_fit=ページã®ã‚µã‚¤ã‚ºã«åˆã‚ã›ã‚‹
+page_scale_auto=自動ズーãƒ
+page_scale_actual=実際ã®ã‚µã‚¤ã‚º
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=エラー
+loading_error=PDF ã®èªã¿è¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚
+invalid_file_error=無効ã¾ãŸã¯ç ´æã—㟠PDF ファイル。
+missing_file_error=PDF ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。
+unexpected_response_error=サーãƒãƒ¼ã‹ã‚‰äºˆæœŸã›ã¬å¿œç”ãŒã‚りã¾ã—ãŸã€‚
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} 注釈]
+password_label=ã“ã® PDF ファイルを開ããŸã‚ã®ãƒ‘スワードを入力ã—ã¦ãã ã•ã„。
+password_invalid=無効ãªãƒ‘スワードã§ã™ã€‚ã‚‚ã†ä¸€åº¦ã‚„り直ã—ã¦ãã ã•ã„。
+password_ok=OK
+password_cancel=ã‚ャンセル
+
+printing_not_supported=è¦å‘Š: ã“ã®ãƒ–ラウザーã§ã¯å°åˆ·ãŒå®Œå…¨ã«ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。
+printing_not_ready=è¦å‘Š: PDF ã‚’å°åˆ·ã™ã‚‹ãŸã‚ã®èªã¿è¾¼ã¿ãŒçµ‚了ã—ã¦ã„ã¾ã›ã‚“。
+web_fonts_disabled=ウェブフォントãŒç„¡åйã«ãªã£ã¦ã„ã¾ã™: 埋ã‚è¾¼ã¾ã‚ŒãŸ PDF ã®ãƒ•ォントを使用ã§ãã¾ã›ã‚“。
diff --git a/thirdparty/pdfjs/web/locale/ka/viewer.properties b/thirdparty/pdfjs/web/locale/ka/viewer.properties
new file mode 100644
index 0000000..0e9e592
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/ka/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=წინრგვერდი
+previous_label=წინáƒ
+next.title=შემდეგი გვერდი
+next_label=შემდეგი
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=გვერდი
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}}-დáƒáƒœ
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} {{pagesCount}}-დáƒáƒœ)
+
+zoom_out.title=ზáƒáƒ›áƒ˜áƒ¡ შემცირებáƒ
+zoom_out_label=დáƒáƒ¨áƒáƒ ებáƒ
+zoom_in.title=ზáƒáƒ›áƒ˜áƒ¡ გáƒáƒ–რდáƒ
+zoom_in_label=მáƒáƒáƒ®áƒšáƒáƒ”ბáƒ
+zoom.title=ზáƒáƒ›áƒ
+presentation_mode.title=ჩვენების რეჟიმზე გáƒáƒ“áƒáƒ თვáƒ
+presentation_mode_label=ჩვენების რეჟიმი
+open_file.title=ფáƒáƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ®áƒ¡áƒœáƒ
+open_file_label=გáƒáƒ®áƒ¡áƒœáƒ
+print.title=áƒáƒ›áƒáƒ‘ეáƒáƒ“ვáƒ
+print_label=áƒáƒ›áƒáƒ‘ეáƒáƒ“ვáƒ
+download.title=ჩáƒáƒ›áƒáƒ¢áƒ•ირთვáƒ
+download_label=ჩáƒáƒ›áƒáƒ¢áƒ•ირთვáƒ
+bookmark.title=მიმდინáƒáƒ ე ხედი (áƒáƒ¡áƒšáƒ˜áƒ¡ áƒáƒ¦áƒ”ბრáƒáƒœ გáƒáƒ®áƒ¡áƒœáƒ áƒáƒ®áƒáƒš ფáƒáƒœáƒ¯áƒáƒ áƒáƒ¨áƒ˜)
+bookmark_label=მიმდინáƒáƒ ე ხედი
+
+# Secondary toolbar and context menu
+tools.title=ხელსáƒáƒ¬áƒ§áƒáƒ”ბი
+tools_label=ხელსáƒáƒ¬áƒ§áƒáƒ”ბი
+first_page.title=პირველ გვერდზე გáƒáƒ“áƒáƒ¡áƒ•ლáƒ
+first_page.label=პირველ გვერდზე გáƒáƒ“áƒáƒ¡áƒ•ლáƒ
+first_page_label=პირველ გვერდზე გáƒáƒ“áƒáƒ¡áƒ•ლáƒ
+last_page.title=ბáƒáƒšáƒ გვერდზე გáƒáƒ“áƒáƒ¡áƒ•ლáƒ
+last_page.label=ბáƒáƒšáƒ გვერდზე გáƒáƒ“áƒáƒ¡áƒ•ლáƒ
+last_page_label=ბáƒáƒšáƒ გვერდზე გáƒáƒ“áƒáƒ¡áƒ•ლáƒ
+page_rotate_cw.title=სáƒáƒáƒ—ის ისრის მიმáƒáƒ თულებით შებრუნებáƒ
+page_rotate_cw.label=მáƒáƒ ჯვნივ გáƒáƒ“áƒáƒ‘რუნებáƒ
+page_rotate_cw_label=მáƒáƒ ჯვნივ გáƒáƒ“áƒáƒ‘რუნებáƒ
+page_rotate_ccw.title=სáƒáƒáƒ—ის ისრის სáƒáƒžáƒ˜áƒ ისპირáƒáƒ“ შებრუნებáƒ
+page_rotate_ccw.label=მáƒáƒ ცხნივ გáƒáƒ“áƒáƒ‘რუნებáƒ
+page_rotate_ccw_label=მáƒáƒ ცხნივ გáƒáƒ“áƒáƒ‘რუნებáƒ
+
+cursor_text_select_tool.title=მáƒáƒ¡áƒáƒœáƒ˜áƒ¨áƒœáƒ˜ მáƒáƒ©áƒ•ენებლის გáƒáƒ›áƒáƒ§áƒ”ნებáƒ
+cursor_text_select_tool_label=მáƒáƒ¡áƒáƒœáƒ˜áƒ¨áƒœáƒ˜ მáƒáƒ©áƒ•ენებელი
+cursor_hand_tool.title=გáƒáƒ“áƒáƒ¡áƒáƒáƒ“გილებელი მáƒáƒ©áƒ•ენებლის გáƒáƒ›áƒáƒ§áƒ”ნებáƒ
+cursor_hand_tool_label=გáƒáƒ“áƒáƒ¡áƒáƒáƒ“გილებელი
+
+scroll_vertical.title=გვერდების შვეულáƒáƒ“ ჩვენებáƒ
+scroll_vertical_label=შვეული გáƒáƒ“áƒáƒáƒ“გილებáƒ
+scroll_horizontal.title=გვერდების თáƒáƒ áƒáƒ–ულáƒáƒ“ ჩვენებáƒ
+scroll_horizontal_label=გáƒáƒœáƒ˜áƒ•ი გáƒáƒ“áƒáƒáƒ“გილებáƒ
+scroll_wrapped.title=გვერდების ცხრილურáƒáƒ“ ჩვენებáƒ
+scroll_wrapped_label=ცხრილური გáƒáƒ“áƒáƒáƒ“გილებáƒ
+
+spread_none.title=áƒáƒ გვერდზე გáƒáƒ¨áƒšáƒ˜áƒ¡ გáƒáƒ ეშე
+spread_none_label=ცáƒáƒšáƒ’ვერდიáƒáƒœáƒ˜ ჩვენებáƒ
+spread_odd.title=áƒáƒ გვერდზე გáƒáƒ¨áƒšáƒ, კენტი გვერდიდáƒáƒœ დáƒáƒ¬áƒ§áƒ”ბული
+spread_odd_label=áƒáƒ გვერდზე კენტიდáƒáƒœ
+spread_even.title=áƒáƒ გვერდზე გáƒáƒ¨áƒšáƒ, ლუწი გვერდიდáƒáƒœ დáƒáƒ¬áƒ§áƒ”ბული
+spread_even_label=áƒáƒ გვერდზე ლუწიდáƒáƒœ
+
+# Document properties dialog box
+document_properties.title=დáƒáƒ™áƒ£áƒ›áƒ”ნტის შესáƒáƒ®áƒ”ბ…
+document_properties_label=დáƒáƒ™áƒ£áƒ›áƒ”ნტის შესáƒáƒ®áƒ”ბ…
+document_properties_file_name=ფáƒáƒ˜áƒšáƒ˜áƒ¡ სáƒáƒ®áƒ”ლი:
+document_properties_file_size=ფáƒáƒ˜áƒšáƒ˜áƒ¡ მáƒáƒªáƒ£áƒšáƒáƒ‘áƒ:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} კბ ({{size_b}} ბáƒáƒ˜áƒ¢áƒ˜)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} მბ ({{size_b}} ბáƒáƒ˜áƒ¢áƒ˜)
+document_properties_title=სáƒáƒ—áƒáƒ£áƒ ი:
+document_properties_author=შემქმნელი:
+document_properties_subject=თემáƒ:
+document_properties_keywords=სáƒáƒ™áƒ•áƒáƒœáƒ«áƒ სიტყვები:
+document_properties_creation_date=შექმნის დრáƒ:
+document_properties_modification_date=ჩáƒáƒ¡áƒ¬áƒáƒ ების დრáƒ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=გáƒáƒ›áƒáƒ›áƒ¨áƒ•ები:
+document_properties_producer=PDF-გáƒáƒ›áƒáƒ›áƒ¨áƒ•ები:
+document_properties_version=PDF-ვერსიáƒ:
+document_properties_page_count=გვერდები:
+document_properties_page_size=გვერდის ზáƒáƒ›áƒ:
+document_properties_page_size_unit_inches=დუიმი
+document_properties_page_size_unit_millimeters=მმ
+document_properties_page_size_orientation_portrait=შვეულáƒáƒ“
+document_properties_page_size_orientation_landscape=თáƒáƒ áƒáƒ–ულáƒáƒ“
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=მსუბუქი ვებჩვენებáƒ:
+document_properties_linearized_yes=დიáƒáƒ®
+document_properties_linearized_no=áƒáƒ áƒ
+document_properties_close=დáƒáƒ®áƒ£áƒ ვáƒ
+
+print_progress_message=დáƒáƒ™áƒ£áƒ›áƒ”ნტი მზáƒáƒ“დებრáƒáƒ›áƒáƒ¡áƒáƒ‘ეáƒáƒ“áƒáƒ“…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=გვერდითრზáƒáƒšáƒ˜áƒ¡ გáƒáƒ›áƒáƒ©áƒ”ნáƒ/დáƒáƒ›áƒáƒšáƒ•áƒ
+toggle_sidebar_notification.title=გვერდითრზáƒáƒšáƒ˜áƒ¡ ჩáƒáƒ თვáƒ/გáƒáƒ›áƒáƒ თვრ(დáƒáƒ™áƒ£áƒ›áƒ”ნტი შეიცáƒáƒ•ს სáƒáƒ ჩევს/დáƒáƒœáƒáƒ თს)
+toggle_sidebar_notification2.title=გვერდითი ზáƒáƒšáƒ˜áƒ¡ გáƒáƒ“áƒáƒ თვრ(áƒáƒ®áƒšáƒáƒ•ს მáƒáƒ®áƒáƒ–ულáƒáƒ‘áƒ/დáƒáƒœáƒáƒ თი/ფენები)
+toggle_sidebar_label=გვერდითრზáƒáƒšáƒ˜áƒ¡ გáƒáƒ›áƒáƒ©áƒ”ნáƒ/დáƒáƒ›áƒáƒšáƒ•áƒ
+document_outline.title=დáƒáƒ™áƒ£áƒ›áƒ”ნტის სáƒáƒ ჩევის ჩვენებრ(áƒáƒ მáƒáƒ’ი წკáƒáƒžáƒ˜áƒ— თითáƒáƒ”ულის ჩáƒáƒ›áƒáƒ¨áƒšáƒ/áƒáƒ™áƒ”ცვáƒ)
+document_outline_label=დáƒáƒ™áƒ£áƒ›áƒ”ნტის სáƒáƒ ჩევი
+attachments.title=დáƒáƒœáƒáƒ თების ჩვენებáƒ
+attachments_label=დáƒáƒœáƒáƒ თები
+layers.title=ფენების გáƒáƒ›áƒáƒ©áƒ”ნრ(áƒáƒ მáƒáƒ’ი წკáƒáƒžáƒ˜áƒ— ყველრფენის ნáƒáƒ’ულისხმევზე დáƒáƒ‘რუნებáƒ)
+layers_label=ფენები
+thumbs.title=შეთვáƒáƒšáƒ˜áƒ”რებáƒ
+thumbs_label=ესკიზები
+findbar.title=პáƒáƒ•ნრდáƒáƒ™áƒ£áƒ›áƒ”ნტში
+findbar_label=ძიებáƒ
+
+additional_layers=დáƒáƒ›áƒáƒ¢áƒ”ბითი ფენები
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=გვერდი {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=გვერდი {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=გვერდის შეთვáƒáƒšáƒ˜áƒ”რებრ{{page}}
+
+# Find panel button title and messages
+find_input.title=ძიებáƒ
+find_input.placeholder=პáƒáƒ•ნრდáƒáƒ™áƒ£áƒ›áƒ”ნტში…
+find_previous.title=ფრáƒáƒ–ის წინრკáƒáƒœáƒ¢áƒ”ქსტის პáƒáƒ•ნáƒ
+find_previous_label=წინáƒ
+find_next.title=ფრáƒáƒ–ის შემდეგი კáƒáƒœáƒ¢áƒ”ქსტის პáƒáƒ•ნáƒ
+find_next_label=შემდეგი
+find_highlight=ყველáƒáƒ¡ მáƒáƒœáƒ˜áƒ¨áƒ•ნáƒ
+find_match_case_label=ემთხვევრმთáƒáƒ•რული
+find_entire_word_label=მთლიáƒáƒœáƒ˜ სიტყვები
+find_reached_top=მიღწეულირდáƒáƒ™áƒ£áƒ›áƒ”ნტის დáƒáƒ¡áƒáƒ¬áƒ§áƒ˜áƒ¡áƒ˜, გრძელდებრბáƒáƒšáƒáƒ“áƒáƒœ
+find_reached_bottom=მიღწეულირდáƒáƒ™áƒ£áƒ›áƒ”ნტის ბáƒáƒšáƒ, გრძელდებრდáƒáƒ¡áƒáƒ¬áƒ§áƒ˜áƒ¡áƒ˜áƒ“áƒáƒœ
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} / {{total}} თáƒáƒœáƒ®áƒ•ედრიდáƒáƒœ
+find_match_count[two]={{current}} / {{total}} თáƒáƒœáƒ®áƒ•ედრიდáƒáƒœ
+find_match_count[few]={{current}} / {{total}} თáƒáƒœáƒ®áƒ•ედრიდáƒáƒœ
+find_match_count[many]={{current}} / {{total}} თáƒáƒœáƒ®áƒ•ედრიდáƒáƒœ
+find_match_count[other]={{current}} / {{total}} თáƒáƒœáƒ®áƒ•ედრიდáƒáƒœ
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}}-ზე მეტი თáƒáƒœáƒ®áƒ•ედრáƒ
+find_match_count_limit[one]={{limit}}-ზე მეტი თáƒáƒœáƒ®áƒ•ედრáƒ
+find_match_count_limit[two]={{limit}}-ზე მეტი თáƒáƒœáƒ®áƒ•ედრáƒ
+find_match_count_limit[few]={{limit}}-ზე მეტი თáƒáƒœáƒ®áƒ•ედრáƒ
+find_match_count_limit[many]={{limit}}-ზე მეტი თáƒáƒœáƒ®áƒ•ედრáƒ
+find_match_count_limit[other]={{limit}}-ზე მეტი თáƒáƒœáƒ®áƒ•ედრáƒ
+find_not_found=ფრáƒáƒ–რვერმáƒáƒ˜áƒ«áƒ”ბნáƒ
+
+# Error panel labels
+error_more_info=ვრცლáƒáƒ“
+error_less_info=შემáƒáƒ™áƒšáƒ”ბულáƒáƒ“
+error_close=დáƒáƒ®áƒ£áƒ ვáƒ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=შეტყáƒáƒ‘ინებáƒ: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=სტეკი: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ფáƒáƒ˜áƒšáƒ˜: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=ხáƒáƒ–ი: {{line}}
+rendering_error=შეცდáƒáƒ›áƒ, გვერდის ჩვენებისáƒáƒ¡.
+
+# Predefined zoom values
+page_scale_width=გვერდის სიგáƒáƒœáƒ”ზე
+page_scale_fit=მთლიáƒáƒœáƒ˜ გვერდი
+page_scale_auto=áƒáƒ•ტáƒáƒ›áƒáƒ¢áƒ£áƒ ი
+page_scale_actual=სáƒáƒ¬áƒ§áƒ˜áƒ¡áƒ˜ ზáƒáƒ›áƒ
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=შეცდáƒáƒ›áƒ
+loading_error=შეცდáƒáƒ›áƒ, PDF-ფáƒáƒ˜áƒšáƒ˜áƒ¡ ჩáƒáƒ¢áƒ•ირთვისáƒáƒ¡.
+invalid_file_error=áƒáƒ áƒáƒ›áƒáƒ თებული áƒáƒœ დáƒáƒ–იáƒáƒœáƒ”ბული PDF-ფáƒáƒ˜áƒšáƒ˜.
+missing_file_error=ნáƒáƒ™áƒšáƒ£áƒšáƒ˜ PDF-ფáƒáƒ˜áƒšáƒ˜.
+unexpected_response_error=სერვერის მáƒáƒ£áƒšáƒáƒ“ნელი პáƒáƒ¡áƒ£áƒ®áƒ˜.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} შენიშვნáƒ]
+password_label=შეიყვáƒáƒœáƒ”თ პáƒáƒ áƒáƒšáƒ˜ PDF-ფáƒáƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ¡áƒáƒ®áƒ¡áƒœáƒ”ლáƒáƒ“.
+password_invalid=áƒáƒ áƒáƒ¡áƒ¬áƒáƒ ი პáƒáƒ áƒáƒšáƒ˜. გთხáƒáƒ•თ, სცáƒáƒ“áƒáƒ— ხელáƒáƒ®áƒšáƒ.
+password_ok=კáƒáƒ გი
+password_cancel=გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ
+
+printing_not_supported=გáƒáƒ¤áƒ თხილებáƒ: áƒáƒ›áƒáƒ‘ეáƒáƒ“ვრáƒáƒ› ბრáƒáƒ£áƒ–ერში áƒáƒ áƒáƒ სრულáƒáƒ“ მხáƒáƒ დáƒáƒáƒ”რილი.
+printing_not_ready=გáƒáƒ¤áƒ თხილებáƒ: PDF სრულáƒáƒ“ ჩáƒáƒ¢áƒ•ირთული áƒáƒ áƒáƒ, áƒáƒ›áƒáƒ‘ეáƒáƒ“ვის დáƒáƒ¡áƒáƒ¬áƒ§áƒ”ბáƒáƒ“.
+web_fonts_disabled=ვებშრიფტები გáƒáƒ›áƒáƒ თულიáƒ: ჩáƒáƒ¨áƒ”ნებული PDF-შრიფტების გáƒáƒ›áƒáƒ§áƒ”ნებრვერხერხდებáƒ.
diff --git a/thirdparty/pdfjs/web/locale/kab/viewer.properties b/thirdparty/pdfjs/web/locale/kab/viewer.properties
new file mode 100644
index 0000000..f397bc9
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/kab/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Asebter azewwar
+previous_label=Azewwar
+next.title=Asebter d-iteddun
+next_label=Ddu ɣer zdat
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Asebter
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=É£ef {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} n {{pagesCount}})
+
+zoom_out.title=Semẓi
+zoom_out_label=Semẓi
+zoom_in.title=Semɣeṛ
+zoom_in_label=Semɣeṛ
+zoom.title=Semɣeṛ/Semẓi
+presentation_mode.title=Uɣal ɣer Uskar Tihawt
+presentation_mode_label=Askar Tihawt
+open_file.title=Ldi Afaylu
+open_file_label=Ldi
+print.title=Siggez
+print_label=Siggez
+download.title=Sader
+download_label=Azdam
+bookmark.title=Timeẓri tamirant (nɣel neɣ ldi ɣef usfaylu amaynut)
+bookmark_label=Askan amiran
+
+# Secondary toolbar and context menu
+tools.title=Ifecka
+tools_label=Ifecka
+first_page.title=Ddu ɣer usebter amezwaru
+first_page.label=Ddu ɣer usebter amezwaru
+first_page_label=Ddu ɣer usebter amezwaru
+last_page.title=Ddu ɣer usebter aneggaru
+last_page.label=Ddu ɣer usebter aneggaru
+last_page_label=Ddu ɣer usebter aneggaru
+page_rotate_cw.title=Tuzzya tusrigt
+page_rotate_cw.label=Tuzzya tusrigt
+page_rotate_cw_label=Tuzzya tusrigt
+page_rotate_ccw.title=Tuzzya amgal-usrig
+page_rotate_ccw.label=Tuzzya amgal-usrig
+page_rotate_ccw_label=Tuzzya amgal-usrig
+
+cursor_text_select_tool.title=Rmed afecku n tefrant n uá¸ris
+cursor_text_select_tool_label=Afecku n tefrant n uá¸ris
+cursor_hand_tool.title=Rmed afecku afus
+cursor_hand_tool_label=Afecku afus
+
+scroll_vertical.title=Seqdec adrurem ubdid
+scroll_vertical_label=Adrurem ubdid
+scroll_horizontal.title=Seqdec adrurem aglawan
+scroll_horizontal_label=Adrurem aglawan
+scroll_wrapped.title=Seqdec adrurem yuẓen
+scroll_wrapped_label=Adrurem yuẓen
+
+spread_none.title=Ur sedday ara isiɣzaf n usebter
+spread_none_label=Ulac isiɣzaf
+spread_odd.title=Seddu isiɣzaf n usebter ibeddun s yisebtar irayuganen
+spread_odd_label=Isiɣzaf irayuganen
+spread_even.title=Seddu isiɣzaf n usebter ibeddun s yisebtar iyuganen
+spread_even_label=Isiɣzaf iyuganen
+
+# Document properties dialog box
+document_properties.title=Taɣaṛa n isemli…
+document_properties_label=Taɣaṛa n isemli…
+document_properties_file_name=Isem n ufaylu:
+document_properties_file_size=Teɣzi n ufaylu:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KAṬ ({{size_b}} ibiten)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MAṬ ({{size_b}} iá¹amá¸anen)
+document_properties_title=Azwel:
+document_properties_author=Ameskar:
+document_properties_subject=Amgay:
+document_properties_keywords=Awalen n tsaruţ
+document_properties_creation_date=Azemz n tmerna:
+document_properties_modification_date=Azemz n usnifel:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Yerna-t:
+document_properties_producer=Afecku n uselket PDF:
+document_properties_version=Lqem PDF:
+document_properties_page_count=Amá¸an n yisebtar:
+document_properties_page_size=Tuγzi n usebter:
+document_properties_page_size_unit_inches=deg
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=s teɣzi
+document_properties_page_size_orientation_landscape=s tehri
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Asekkil
+document_properties_page_size_name_legal=Usá¸if
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Taskant Web taruradt:
+document_properties_linearized_yes=Ih
+document_properties_linearized_no=Ala
+document_properties_close=Mdel
+
+print_progress_message=Aheggi i usiggez n isemli…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Sefsex
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Sken/Fer agalis adisan
+toggle_sidebar_notification.title=Ffer/Sken agalis adisan (isemli yegber aɣawas/imeddayen)
+toggle_sidebar_notification2.title=Ffer/Sekn agalis adisan (isemli yegber aɣawas/ticeqqufin yeddan/tissiwin)
+toggle_sidebar_label=Sken/Fer agalis adisan
+document_outline.title=Sken isemli (Senned snat tikal i wesemɣer/Afneẓ n iferdisen meṛṛa)
+document_outline_label=Isɣalen n isebtar
+attachments.title=Sken ticeqqufin yeddan
+attachments_label=Ticeqqufin yeddan
+layers.title=Skeen tissiwin (sit sin yiberdan i uwennez n meṛṛa tissiwin ɣer waddad amezwer)
+layers_label=Tissiwin
+thumbs.title=Sken tanfult.
+thumbs_label=Tinfulin
+findbar.title=Nadi deg isemli
+findbar_label=Nadi
+
+additional_layers=Tissiwin-nniá¸en
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Asebter {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Asebter {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Tanfult n usebter {{page}}
+
+# Find panel button title and messages
+find_input.title=Nadi
+find_input.placeholder=Nadi deg isemli…
+find_previous.title=Aff-d tamseá¸riwt n twinest n deffir
+find_previous_label=Azewwar
+find_next.title=Aff-d timseá¸riwt n twinest d-iteddun
+find_next_label=Ddu ɣer zdat
+find_highlight=Err izirig imaṛṛa
+find_match_case_label=Qadeá¹› amasal n isekkilen
+find_entire_word_label=Awalen iÄÄuranen
+find_reached_top=YabbeḠs afella n usebter, tuɣalin s wadda
+find_reached_bottom=Tebá¸eḠs adda n usebter, tuÉ£alin s afella
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} seg {{total}} n tmeɣṛuá¸in
+find_match_count[two]={{current}} seg {{total}} n tmeɣṛuá¸in
+find_match_count[few]={{current}} seg {{total}} n tmeɣṛuá¸in
+find_match_count[many]={{current}} seg {{total}} n tmeɣṛuá¸in
+find_match_count[other]={{current}} seg {{total}} n tmeɣṛuá¸in
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Ugar n {{limit}} n tmeɣṛuá¸in
+find_match_count_limit[one]=Ugar n {{limit}} n tmeɣṛuá¸in
+find_match_count_limit[two]=Ugar n {{limit}} n tmeɣṛuá¸in
+find_match_count_limit[few]=Ugar n {{limit}} n tmeɣṛuá¸in
+find_match_count_limit[many]=Ugar n {{limit}} n tmeɣṛuá¸in
+find_match_count_limit[other]=Ugar n {{limit}} n tmeɣṛuá¸in
+find_not_found=Ulac tawinest
+
+# Error panel labels
+error_more_info=Ugar n telɣut
+error_less_info=Drus n isalen
+error_close=Mdel
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Izen: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Tanebdant: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Afaylu: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Izirig: {{line}}
+rendering_error=Teá¸ra-d tuccá¸a deg uskan n usebter.
+
+# Predefined zoom values
+page_scale_width=Tehri n usebter
+page_scale_fit=Asebter imaṛṛa
+page_scale_auto=Asemɣeṛ/Asemẓi awurman
+page_scale_actual=Teɣzi tilawt
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=Teá¸ra-d tuccá¸a deg alluy n PDF:
+invalid_file_error=Afaylu PDF arameɣtu neɣ yexṣeṛ.
+missing_file_error=Ulac afaylu PDF.
+unexpected_response_error=Aqeddac yerra-d yir tiririt ur nettwaṛǧi ara.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Tabzimt {{type}}]
+password_label=Sekcem awal uffir akken ad ldiḠafaylu-yagi PDF
+password_invalid=Awal uffir maÄÄi d ameÉ£tu, ÆreḠtikelt-nniá¸en.
+password_ok=IH
+password_cancel=Sefsex
+
+printing_not_supported=Ɣuṛ-k: Asiggez ur ittusefrak ara yakan imaṛṛa deg iminig-a.
+printing_not_ready=Ɣuṛ-k: Afaylu PDF ur d-yuli ara imeṛṛa akken ad ittusiggez.
+web_fonts_disabled=Tisefsiyin web ttwassensent; D awezɣi useqdec n tsefsiyin yettwarnan ɣer PDF.
diff --git a/thirdparty/pdfjs/web/locale/kk/viewer.properties b/thirdparty/pdfjs/web/locale/kk/viewer.properties
new file mode 100644
index 0000000..a2db99f
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/kk/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Ðлдыңғы парақ
+previous_label=ÐлдыңғыÑÑ‹
+next.title=КелеÑÑ– парақ
+next_label=КелеÑÑ–
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Парақ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} ішінен
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=(парақ {{pageNumber}}, {{pagesCount}} ішінен)
+
+zoom_out.title=Кішірейту
+zoom_out_label=Кішірейту
+zoom_in.title=Үлкейту
+zoom_in_label=Үлкейту
+zoom.title=МаÑштаб
+presentation_mode.title=ÐŸÑ€ÐµÐ·ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ñ–Ð½Ðµ ауыÑу
+presentation_mode_label=ÐŸÑ€ÐµÐ·ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ñ–
+open_file.title=Файлды ашу
+open_file_label=Ðшу
+print.title=БаÑпаға шығару
+print_label=БаÑпаға шығару
+download.title=Жүктеп алу
+download_label=Жүктеп алу
+bookmark.title=Ðғымдағы ÐºÓ©Ñ€Ñ–Ð½Ñ–Ñ (көшіру не жаңа терезеде ашу)
+bookmark_label=Ðғымдағы көрініÑ
+
+# Secondary toolbar and context menu
+tools.title=Құралдар
+tools_label=Құралдар
+first_page.title=Ðлғашқы параққа өту
+first_page.label=Ðлғашқы параққа өту
+first_page_label=Ðлғашқы параққа өту
+last_page.title=Соңғы параққа өту
+last_page.label=Соңғы параққа өту
+last_page_label=Соңғы параққа өту
+page_rotate_cw.title=Сағат тілі бағытымен айналдыру
+page_rotate_cw.label=Сағат тілі бағытымен бұру
+page_rotate_cw_label=Сағат тілі бағытымен бұру
+page_rotate_ccw.title=Сағат тілі бағытына қарÑÑ‹ бұру
+page_rotate_ccw.label=Сағат тілі бағытына қарÑÑ‹ бұру
+page_rotate_ccw_label=Сағат тілі бағытына қарÑÑ‹ бұру
+
+cursor_text_select_tool.title=Мәтінді таңдау құралын Ñ–Ñке қоÑу
+cursor_text_select_tool_label=Мәтінді таңдау құралы
+cursor_hand_tool.title=Қол құралын Ñ–Ñке қоÑу
+cursor_hand_tool_label=Қол құралы
+
+scroll_vertical.title=Вертикалды айналдыруды қолдану
+scroll_vertical_label=Вертикалды айналдыру
+scroll_horizontal.title=Горизонталды айналдыруды қолдану
+scroll_horizontal_label=Горизонталды айналдыру
+scroll_wrapped.title=МаÑштабталатын айналдыруды қолдану
+scroll_wrapped_label=МаÑштабталатын айналдыру
+
+spread_none.title=Жазық беттер режимін қолданбау
+spread_none_label=Жазық беттер режимÑіз
+spread_odd.title=Жазық беттер тақ нөмірлі беттерден баÑталады
+spread_odd_label=Тақ нөмірлі беттер Ñол жақтан
+spread_even.title=Жазық беттер жұп нөмірлі беттерден баÑталады
+spread_even_label=Жұп нөмірлі беттер Ñол жақтан
+
+# Document properties dialog box
+document_properties.title=Құжат қаÑиеттері…
+document_properties_label=Құжат қаÑиеттері…
+document_properties_file_name=Файл аты:
+document_properties_file_size=Файл өлшемі:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} КБ ({{size_b}} байт)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} МБ ({{size_b}} байт)
+document_properties_title=Тақырыбы:
+document_properties_author=Ðвторы:
+document_properties_subject=Тақырыбы:
+document_properties_keywords=Кілт Ñөздер:
+document_properties_creation_date=ЖаÑалған күні:
+document_properties_modification_date=Түзету күні:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=ЖаÑаған:
+document_properties_producer=PDF өндірген:
+document_properties_version=PDF нұÑқаÑÑ‹:
+document_properties_page_count=Беттер Ñаны:
+document_properties_page_size=Бет өлшемі:
+document_properties_page_size_unit_inches=дюйм
+document_properties_page_size_unit_millimeters=мм
+document_properties_page_size_orientation_portrait=тік
+document_properties_page_size_orientation_landscape=жатық
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Жылдам Web көрініÑÑ–:
+document_properties_linearized_yes=Иә
+document_properties_linearized_no=Жоқ
+document_properties_close=Жабу
+
+print_progress_message=Құжатты баÑпаға шығару үшін дайындау…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Ð‘Ð°Ñ Ñ‚Ð°Ñ€Ñ‚Ñƒ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Бүйір панелін көрÑету/жаÑыру
+toggle_sidebar_notification.title=Бүйір панелін көрÑету/жаÑыру (құжатта құрылымы/Ñалынымдар бар)
+toggle_sidebar_notification2.title=Бүйір панелін көрÑету/жаÑыру (құжатта құрылымы/Ñалынымдар/қабаттар бар)
+toggle_sidebar_label=Бүйір панелін көрÑету/жаÑыру
+document_outline.title=Құжат құрылымын көрÑету (барлық нәрÑелерді жазық қылу/жинау үшін Ò›Ð¾Ñ ÑˆÐµÑ€Ñ‚Ñƒ керек)
+document_outline_label=Құжат құрамаÑÑ‹
+attachments.title=Салынымдарды көрÑету
+attachments_label=Салынымдар
+layers.title=Қабаттарды көрÑету (барлық қабаттарды баÑтапқы күйге келтіру үшін екі рет шертіңіз)
+layers_label=Қабаттар
+thumbs.title=Кіші көрініÑтерді көрÑету
+thumbs_label=Кіші көрініÑтер
+findbar.title=Құжаттан табу
+findbar_label=Табу
+
+additional_layers=ҚоÑымша қабаттар
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Бет {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} парағы
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} парағы үшін кіші көрініÑÑ–
+
+# Find panel button title and messages
+find_input.title=Табу
+find_input.placeholder=Құжаттан табу…
+find_previous.title=ОÑÑ‹ Ñөздердің мәтіннен алдыңғы кездеÑуін табу
+find_previous_label=ÐлдыңғыÑÑ‹
+find_next.title=ОÑÑ‹ Ñөздердің мәтіннен келеÑÑ– кездеÑуін табу
+find_next_label=КелеÑÑ–
+find_highlight=Барлығын түÑпен ерекшелеу
+find_match_case_label=РегиÑтрді еÑкеру
+find_entire_word_label=Сөздер толығымен
+find_reached_top=Құжаттың баÑына жеттік, Ñоңынан баÑтап жалғаÑтырамыз
+find_reached_bottom=Құжаттың Ñоңына жеттік, баÑынан баÑтап жалғаÑтырамыз
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} / {{total}} ÑәйкеÑтік
+find_match_count[two]={{current}} / {{total}} ÑәйкеÑтік
+find_match_count[few]={{current}} / {{total}} ÑәйкеÑтік
+find_match_count[many]={{current}} / {{total}} ÑәйкеÑтік
+find_match_count[other]={{current}} / {{total}} ÑәйкеÑтік
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} ÑәйкеÑтіктен көп
+find_match_count_limit[one]={{limit}} ÑәйкеÑтіктен көп
+find_match_count_limit[two]={{limit}} ÑәйкеÑтіктен көп
+find_match_count_limit[few]={{limit}} ÑәйкеÑтіктен көп
+find_match_count_limit[many]={{limit}} ÑәйкеÑтіктен көп
+find_match_count_limit[other]={{limit}} ÑәйкеÑтіктен көп
+find_not_found=Сөз(дер) табылмады
+
+# Error panel labels
+error_more_info=Көбірек ақпарат
+error_less_info=Ðзырақ ақпарат
+error_close=Жабу
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (жинақ: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Хабарлама: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Стек: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Файл: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Жол: {{line}}
+rendering_error=Парақты өңдеу кезінде қате кетті.
+
+# Predefined zoom values
+page_scale_width=Парақ ені
+page_scale_fit=Парақты Ñыйдыру
+page_scale_auto=ÐвтомаÑштабтау
+page_scale_actual=Ðақты өлшемі
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Қате
+loading_error=PDF жүктеу кезінде қате кетті.
+invalid_file_error=Зақымдалған немеÑе қате PDF файл.
+missing_file_error=PDF файлы жоқ.
+unexpected_response_error=Сервердің күтпеген жауабы.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} аңдатпаÑÑ‹]
+password_label=Бұл PDF файлын ашу үшін парольді енгізіңіз.
+password_invalid=Пароль Ð´Ò±Ñ€Ñ‹Ñ ÐµÐ¼ÐµÑ. Қайталап көріңіз.
+password_ok=ОК
+password_cancel=Ð‘Ð°Ñ Ñ‚Ð°Ñ€Ñ‚Ñƒ
+
+printing_not_supported=ЕÑкерту: БаÑпаға шығаруды бұл браузер толығымен қолдамайды.
+printing_not_ready=ЕÑкерту: БаÑпаға шығару үшін, бұл PDF толығымен жүктеліп алынбады.
+web_fonts_disabled=Веб қаріптері Ñөндірілген: құрамына енгізілген PDF қаріптерін қолдану мүмкін емеÑ.
diff --git a/thirdparty/pdfjs/web/locale/km/viewer.properties b/thirdparty/pdfjs/web/locale/km/viewer.properties
new file mode 100644
index 0000000..109de4b
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/km/viewer.properties
@@ -0,0 +1,216 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ទំពáŸážšâ€‹áž˜áž»áž“
+previous_label=មុន
+next.title=ទំពáŸážšâ€‹áž”ន្ទាប់
+next_label=បន្ទាប់
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ទំពáŸážš
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=នៃ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} នៃ {{pagesCount}})
+
+zoom_out.title=​បង្រួម
+zoom_out_label=​បង្រួម
+zoom_in.title=​ពង្រីក
+zoom_in_label=​ពង្រីក
+zoom.title=ពង្រីក
+presentation_mode.title=ប្ដូរ​ទៅ​របៀប​បទ​បង្ហាញ
+presentation_mode_label=របៀប​បទ​បង្ហាញ
+open_file.title=បើក​ឯកសារ
+open_file_label=បើក
+print.title=បោះពុម្ព
+print_label=បោះពុម្ព
+download.title=ទាញ​យក
+download_label=ទាញ​យក
+bookmark.title=ទិដ្ឋភាព​បច្ចុប្បន្ន (ចម្លង ឬ​បើក​នៅ​ក្នុង​បង្អួច​ážáŸ’មី)
+bookmark_label=ទិដ្ឋភាព​បច្ចុប្បន្ន
+
+# Secondary toolbar and context menu
+tools.title=ឧបករណáŸ
+tools_label=ឧបករណáŸ
+first_page.title=ទៅកាន់​ទំពáŸážšâ€‹ážŠáŸ†áž”ូង​
+first_page.label=ទៅកាន់​ទំពáŸážšâ€‹ážŠáŸ†áž”ូង​
+first_page_label=ទៅកាន់​ទំពáŸážšâ€‹ážŠáŸ†áž”ូង​
+last_page.title=ទៅកាន់​ទំពáŸážšâ€‹áž…ុងក្រោយ​
+last_page.label=ទៅកាន់​ទំពáŸážšâ€‹áž…ុងក្រោយ​
+last_page_label=ទៅកាន់​ទំពáŸážšâ€‹áž…ុងក្រោយ
+page_rotate_cw.title=បង្វិល​ស្រប​ទ្រនិច​នាឡិកា
+page_rotate_cw.label=បង្វិល​ស្រប​ទ្រនិច​នាឡិកា
+page_rotate_cw_label=បង្វិល​ស្រប​ទ្រនិច​នាឡិកា
+page_rotate_ccw.title=បង្វិល​ច្រាស​ទ្រនិច​នាឡិកា​​
+page_rotate_ccw.label=បង្វិល​ច្រាស​ទ្រនិច​នាឡិកា​​
+page_rotate_ccw_label=បង្វិល​ច្រាស​ទ្រនិច​នាឡិកា​​
+
+cursor_text_select_tool.title=បើក​ឧបករណáŸâ€‹áž‡áŸ’រើស​អážáŸ’ážáž”áž‘
+cursor_text_select_tool_label=ឧបករណáŸâ€‹áž‡áŸ’រើស​អážáŸ’ážáž”áž‘
+cursor_hand_tool.title=បើក​ឧបករណáŸâ€‹ážŠáŸƒ
+cursor_hand_tool_label=ឧបករណáŸâ€‹ážŠáŸƒ
+
+
+
+# Document properties dialog box
+document_properties.title=លក្ážážŽâ€‹ážŸáž˜áŸ’áž”ážáŸ’ážáž·â€‹áž¯áž€ážŸáž¶ážšâ€¦
+document_properties_label=លក្ážážŽâ€‹ážŸáž˜áŸ’áž”ážáŸ’ážáž·â€‹áž¯áž€ážŸáž¶ážšâ€¦
+document_properties_file_name=ឈ្មោះ​ឯកសារ៖
+document_properties_file_size=ទំហំ​ឯកសារ៖
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} បៃ)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} បៃ)
+document_properties_title=ចំណងជើង៖
+document_properties_author=អ្នក​និពន្ធ៖
+document_properties_subject=ប្រធានបទ៖
+document_properties_keywords=ពាក្យ​គន្លឹះ៖
+document_properties_creation_date=កាលបរិច្ឆáŸáž‘​បង្កើážáŸ–
+document_properties_modification_date=កាលបរិច្ឆáŸáž‘​កែប្រែ៖
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=អ្នក​បង្កើážáŸ–
+document_properties_producer=កម្មវិធី​បង្កើហPDF ៖
+document_properties_version=កំណែ PDF ៖
+document_properties_page_count=ចំនួន​ទំពáŸážšáŸ–
+document_properties_page_size_unit_inches=អ៊ីញ
+document_properties_page_size_unit_millimeters=មម
+document_properties_page_size_orientation_portrait=បញ្ឈរ
+document_properties_page_size_orientation_landscape=ផ្ážáŸáž€
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=សំបុážáŸ’ážš
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=បាទ/ចាស
+document_properties_linearized_no=áž‘áŸ
+document_properties_close=បិទ
+
+print_progress_message=កំពុង​រៀបចំ​ឯកសារ​សម្រាប់​បោះពុម្ព…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=បោះបង់
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=បិទ/បើក​គ្រាប់​រំកិល
+toggle_sidebar_notification.title=បិទ/បើក​របារ​ចំហៀង (ឯកសារ​មាន​មាážáž·áž€áž¶â€‹áž“ៅ​ក្រៅ/attachments)
+toggle_sidebar_label=បិទ/បើក​គ្រាប់​រំកិល
+document_outline.title=បង្ហាញ​គ្រោង​ឯកសារ (ចុច​ទ្វáŸâ€‹ážŠáž„​ដើម្បី​ពង្រីក/បង្រួម​ធាážáž»â€‹áž‘ាំងអស់)
+document_outline_label=គ្រោង​ឯកសារ
+attachments.title=បង្ហាញ​ឯកសារ​ភ្ជាប់
+attachments_label=ឯកសារ​ភ្ជាប់
+thumbs.title=បង្ហាញ​រូបភាព​ážáž¼áž…ៗ
+thumbs_label=រួបភាព​ážáž¼áž…ៗ
+findbar.title=រក​នៅ​ក្នុង​ឯកសារ
+findbar_label=រក
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=ទំពáŸážš {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=រូបភាព​ážáž¼áž…​របស់​ទំពáŸážš {{page}}
+
+# Find panel button title and messages
+find_input.title=រក
+find_input.placeholder=រក​នៅ​ក្នុង​ឯកសារ...
+find_previous.title=រក​ពាក្យ ឬ​ឃ្លា​ដែល​បាន​ជួប​មុន
+find_previous_label=មុន
+find_next.title=រក​ពាក្យ ឬ​ឃ្លា​ដែល​បាន​ជួប​បន្ទាប់
+find_next_label=បន្ទាប់
+find_highlight=បន្លិច​ទាំងអស់
+find_match_case_label=ករណី​ដំណូច
+find_reached_top=បាន​បន្ážâ€‹áž–ី​ážáž¶áž„​ក្រោម ទៅ​ដល់​ážáž¶áž„​​លើ​នៃ​ឯកសារ
+find_reached_bottom=បាន​បន្ážâ€‹áž–ី​ážáž¶áž„លើ ទៅដល់​ចុង​​នៃ​ឯកសារ
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_not_found=រក​មិន​ឃើញ​ពាក្យ ឬ​ឃ្លា
+
+# Error panel labels
+error_more_info=áž–áŸážáŸŒáž˜áž¶áž“​បន្ážáŸ‚ម
+error_less_info=áž–áŸážáŸŒáž˜áž¶áž“​ážáž·áž…ážáž½áž…
+error_close=បិទ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=សារ ៖ {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=ជង់ ៖ {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ឯកសារ ៖ {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=ជួរ ៖ {{line}}
+rendering_error=មាន​កំហុស​បាន​កើážáž¡áž¾áž„​ពáŸáž›â€‹áž”ង្ហាញ​ទំពáŸážšÂ ។
+
+# Predefined zoom values
+page_scale_width=ទទឹង​ទំពáŸážš
+page_scale_fit=សម​ទំពáŸážš
+page_scale_auto=ពង្រីក​ស្វáŸáž™áž”្រវážáŸ’ážáž·
+page_scale_actual=ទំហំ​ជាក់ស្ដែង
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=កំហុស
+loading_error=មាន​កំហុស​បាន​កើážáž¡áž¾áž„​ពáŸáž›â€‹áž€áŸ†áž–ុង​ផ្ទុក PDF ។
+invalid_file_error=ឯកសារ PDF ážáž¼áž… ឬ​មិន​ážáŸ’រឹមážáŸ’រូវ ។
+missing_file_error=បាážáŸ‹â€‹áž¯áž€ážŸáž¶ážš PDF
+unexpected_response_error=ការ​ឆ្លើយ​ážáž˜â€‹áž˜áŸ‰áž¶ážŸáŸŠáž¸áž“​មáŸâ€‹ážŠáŸ‚ល​មិន​បាន​រំពឹង។
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} ចំណារ​ពន្យល់]
+password_label=បញ្ចូល​ពាក្យសម្ងាážáŸ‹â€‹ážŠáž¾áž˜áŸ’បី​បើក​ឯកសារ PDF áž“áŸáŸ‡áŸ”
+password_invalid=ពាក្យសម្ងាážáŸ‹â€‹áž˜áž·áž“​ážáŸ’រឹមážáŸ’រូវ។ សូម​ព្យាយាម​ម្ដងទៀážáŸ”
+password_ok=យល់​ព្រម
+password_cancel=បោះបង់
+
+printing_not_supported=ការ​ព្រមាន ៖ កា​រ​បោះពុម្ព​មិន​ážáŸ’រូវ​បាន​គាំទ្រ​ពáŸáž‰áž›áŸáž‰â€‹ážŠáŸ„យ​កម្មវិធី​រុករក​នáŸáŸ‡â€‹áž‘áŸÂ ។
+printing_not_ready=ព្រមាន៖ PDF មិន​ážáŸ’រូវ​បាន​ផ្ទុក​ទាំងស្រុង​ដើម្បី​បោះពុម្ព​ទáŸáŸ”
+web_fonts_disabled=បាន​បិទ​ពុម្ពអក្សរ​បណ្ដាញ ៖ មិន​អាច​ប្រើ​ពុម្ពអក្សរ PDF ដែល​បាន​បង្កប់​បាន​ទáŸÂ ។
diff --git a/thirdparty/pdfjs/web/locale/kn/viewer.properties b/thirdparty/pdfjs/web/locale/kn/viewer.properties
new file mode 100644
index 0000000..b37a71c
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/kn/viewer.properties
@@ -0,0 +1,192 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ಹಿಂದಿನ ಪà³à²Ÿ
+previous_label=ಹಿಂದಿನ
+next.title=ಮà³à²‚ದಿನ ಪà³à²Ÿ
+next_label=ಮà³à²‚ದಿನ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ಪà³à²Ÿ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} ರಲà³à²²à²¿
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pagesCount}} ರಲà³à²²à²¿ {{pageNumber}})
+
+zoom_out.title=ಕಿರಿದಾಗಿಸà³
+zoom_out_label=ಕಿರಿದಾಗಿಸಿ
+zoom_in.title=ಹಿರಿದಾಗಿಸà³
+zoom_in_label=ಹಿರಿದಾಗಿಸಿ
+zoom.title=ಗಾತà³à²°à²¬à²¦à²²à²¿à²¸à³
+presentation_mode.title=ಪà³à²°à²¸à³à²¤à³à²¤à²¿ (ಪà³à²°à²¸à³†à²‚ಟೇಶನà³) ಕà³à²°à²®à²•à³à²•ೆ ಬದಲಾಯಿಸà³
+presentation_mode_label=ಪà³à²°à²¸à³à²¤à³à²¤à²¿ (ಪà³à²°à²¸à³†à²‚ಟೇಶನà³) ಕà³à²°à²®
+open_file.title=ಕಡತವನà³à²¨à³ ತೆರೆ
+open_file_label=ತೆರೆಯಿರಿ
+print.title=ಮà³à²¦à³à²°à²¿à²¸à³
+print_label=ಮà³à²¦à³à²°à²¿à²¸à²¿
+download.title=ಇಳಿಸà³
+download_label=ಇಳಿಸಿಕೊಳà³à²³à²¿
+bookmark.title=ಪà³à²°à²¸à²•à³à²¤ ನೋಟ (ಪà³à²°à²¤à²¿ ಮಾಡೠಅಥವ ಹೊಸ ಕಿಟಕಿಯಲà³à²²à²¿ ತೆರೆ)
+bookmark_label=ಪà³à²°à²¸à²•à³à²¤ ನೋಟ
+
+# Secondary toolbar and context menu
+tools.title=ಉಪಕರಣಗಳà³
+tools_label=ಉಪಕರಣಗಳà³
+first_page.title=ಮೊದಲ ಪà³à²Ÿà²•à³à²•ೆ ತೆರಳà³
+first_page.label=ಮೊದಲ ಪà³à²Ÿà²•à³à²•ೆ ತೆರಳà³
+first_page_label=ಮೊದಲ ಪà³à²Ÿà²•à³à²•ೆ ತೆರಳà³
+last_page.title=ಕೊನೆಯ ಪà³à²Ÿà²•à³à²•ೆ ತೆರಳà³
+last_page.label=ಕೊನೆಯ ಪà³à²Ÿà²•à³à²•ೆ ತೆರಳà³
+last_page_label=ಕೊನೆಯ ಪà³à²Ÿà²•à³à²•ೆ ತೆರಳà³
+page_rotate_cw.title=ಪà³à²°à²¦à²•à³à²·à²¿à²£à³†à²¯à²²à³à²²à²¿ ತಿರà³à²—ಿಸà³
+page_rotate_cw.label=ಪà³à²°à²¦à²•à³à²·à²¿à²£à³†à²¯à²²à³à²²à²¿ ತಿರà³à²—ಿಸà³
+page_rotate_cw_label=ಪà³à²°à²¦à²•à³à²·à²¿à²£à³†à²¯à²²à³à²²à²¿ ತಿರà³à²—ಿಸà³
+page_rotate_ccw.title=ಅಪà³à²°à²¦à²•à³à²·à²¿à²£à³†à²¯à²²à³à²²à²¿ ತಿರà³à²—ಿಸà³
+page_rotate_ccw.label=ಅಪà³à²°à²¦à²•à³à²·à²¿à²£à³†à²¯à²²à³à²²à²¿ ತಿರà³à²—ಿಸà³
+page_rotate_ccw_label=ಅಪà³à²°à²¦à²•à³à²·à²¿à²£à³†à²¯à²²à³à²²à²¿ ತಿರà³à²—ಿಸà³
+
+cursor_text_select_tool.title=ಪಠà³à²¯ ಆಯà³à²•ೆ ಉಪಕರಣವನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಿ
+cursor_text_select_tool_label=ಪಠà³à²¯ ಆಯà³à²•ೆಯ ಉಪಕರಣ
+cursor_hand_tool.title=ಕೈ ಉಪಕರಣವನà³à²¨à³ ಸಕà³à²°à²¿à²¯à²—ೊಳಿಸಿ
+cursor_hand_tool_label=ಕೈ ಉಪಕರಣ
+
+
+
+# Document properties dialog box
+document_properties.title=ಡಾಕà³à²¯à³à²®à³†à²‚ಟà³â€Œ ಗà³à²£à²—ಳà³...
+document_properties_label=ಡಾಕà³à²¯à³à²®à³†à²‚ಟà³â€Œ ಗà³à²£à²—ಳà³...
+document_properties_file_name=ಕಡತದ ಹೆಸರà³:
+document_properties_file_size=ಕಡತದ ಗಾತà³à²°:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} ಬೈಟà³â€à²—ಳà³)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} ಬೈಟà³â€à²—ಳà³)
+document_properties_title=ಶೀರà³à²·à²¿à²•ೆ:
+document_properties_author=ಕರà³à²¤à³ƒ:
+document_properties_subject=ವಿಷಯ:
+document_properties_keywords=ಮà³à²–à³à²¯à²ªà²¦à²—ಳà³:
+document_properties_creation_date=ರಚಿಸಿದ ದಿನಾಂಕ:
+document_properties_modification_date=ಮಾರà³à²ªà²¡à²¿à²¸à²²à²¾à²¦ ದಿನಾಂಕ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=ರಚಿಸಿದವರà³:
+document_properties_producer=PDF ಉತà³à²ªà²¾à²¦à²•:
+document_properties_version=PDF ಆವೃತà³à²¤à²¿:
+document_properties_page_count=ಪà³à²Ÿà²¦ ಎಣಿಕೆ:
+document_properties_page_size_unit_inches=ಇದರಲà³à²²à²¿
+document_properties_page_size_orientation_portrait=à²à²¾à²µà²šà²¿à²¤à³à²°
+document_properties_page_size_orientation_landscape=ಪà³à²°à²•ೃತಿ ಚಿತà³à²°
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_close=ಮà³à²šà³à²šà³
+
+print_progress_message=ಮà³à²¦à³à²°à²¿à²¸à³à²µà³à²¦à²•à³à²•ಾಗಿ ದಸà³à²¤à²¾à²µà³‡à²œà²¨à³à²¨à³ ಸಿದà³à²§à²—ೊಳಿಸಲಾಗà³à²¤à³à²¤à²¿à²¦à³†â€¦
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ರದà³à²¦à³ ಮಾಡà³
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=ಬದಿಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ಹೊರಳಿಸà³
+toggle_sidebar_label=ಬದಿಪಟà³à²Ÿà²¿à²¯à²¨à³à²¨à³ ಹೊರಳಿಸà³
+document_outline_label=ದಸà³à²¤à²¾à²µà³‡à²œà²¿à²¨ ಹೊರರೇಖೆ
+attachments.title=ಲಗತà³à²¤à³à²—ಳನà³à²¨à³ ತೋರಿಸà³
+attachments_label=ಲಗತà³à²¤à³à²—ಳà³
+thumbs.title=ಚಿಕà³à²•ಚಿತà³à²°à²¦à²‚ತೆ ತೋರಿಸà³
+thumbs_label=ಚಿಕà³à²•ಚಿತà³à²°à²—ಳà³
+findbar.title=ದಸà³à²¤à²¾à²µà³‡à²œà²¿à²¨à²²à³à²²à²¿ ಹà³à²¡à³à²•à³
+findbar_label=ಹà³à²¡à³à²•à³
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=ಪà³à²Ÿ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=ಪà³à²Ÿà²µà²¨à³à²¨à³ ಚಿಕà³à²•ಚಿತà³à²°à²¦à²‚ತೆ ತೋರಿಸೠ{{page}}
+
+# Find panel button title and messages
+find_input.title=ಹà³à²¡à³à²•à³
+find_input.placeholder=ದಸà³à²¤à²¾à²µà³‡à²œà²¿à²¨à²²à³à²²à²¿ ಹà³à²¡à³à²•à³â€¦
+find_previous.title=ವಾಕà³à²¯à²¦ ಹಿಂದಿನ ಇರà³à²µà²¿à²•ೆಯನà³à²¨à³ ಹà³à²¡à³à²•à³
+find_previous_label=ಹಿಂದಿನ
+find_next.title=ವಾಕà³à²¯à²¦ ಮà³à²‚ದಿನ ಇರà³à²µà²¿à²•ೆಯನà³à²¨à³ ಹà³à²¡à³à²•à³
+find_next_label=ಮà³à²‚ದಿನ
+find_highlight=ಎಲà³à²²à²µà²¨à³à²¨à³ ಹೈಲೈಟೠಮಾಡà³
+find_match_case_label=ಕೇಸನà³à²¨à³ ಹೊಂದಿಸà³
+find_reached_top=ದಸà³à²¤à²¾à²µà³‡à²œà²¿à²¨ ಮೇಲà³à²à²¾à²—ವನà³à²¨à³ ತಲà³à²ªà²¿à²¦à³†, ಕೆಳಗಿನಿಂದ ಆರಂà²à²¿à²¸à³
+find_reached_bottom=ದಸà³à²¤à²¾à²µà³‡à²œà²¿à²¨ ಕೊನೆಯನà³à²¨à³ ತಲà³à²ªà²¿à²¦à³†, ಮೇಲಿನಿಂದ ಆರಂà²à²¿à²¸à³
+find_not_found=ವಾಕà³à²¯à²µà³ ಕಂಡೠಬಂದಿಲà³à²²
+
+# Error panel labels
+error_more_info=ಹೆಚà³à²šà²¿à²¨ ಮಾಹಿತಿ
+error_less_info=ಕಡಿಮೆ ಮಾಹಿತಿ
+error_close=ಮà³à²šà³à²šà³
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=ಸಂದೇಶ: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=ರಾಶಿ: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ಕಡತ: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=ಸಾಲà³: {{line}}
+rendering_error=ಪà³à²Ÿà²µà²¨à³à²¨à³ ನಿರೂಪಿಸà³à²µà²¾à²— ಒಂದೠದೋಷ ಎದà³à²°à²¾à²—ಿದೆ.
+
+# Predefined zoom values
+page_scale_width=ಪà³à²Ÿà²¦ ಅಗಲ
+page_scale_fit=ಪà³à²Ÿà²¦ ಸರಿಹೊಂದಿಕೆ
+page_scale_auto=ಸà³à²µà²¯à²‚ಚಾಲಿತ ಗಾತà³à²°à²¬à²¦à²²à²¾à²µà²£à³†
+page_scale_actual=ನಿಜವಾದ ಗಾತà³à²°
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=ದೋಷ
+loading_error=PDF ಅನà³à²¨à³ ಲೋಡೠಮಾಡà³à²µà²¾à²— ಒಂದೠದೋಷ ಎದà³à²°à²¾à²—ಿದೆ.
+invalid_file_error=ಅಮಾನà³à²¯à²µà²¾à²¦ ಅಥವ ಹಾಳಾದ PDF ಕಡತ.
+missing_file_error=PDF ಕಡತ ಇಲà³à²².
+unexpected_response_error=ಅನಿರೀಕà³à²·à²¿à²¤à²µà²¾à²¦ ಪೂರೈಕೆಗಣಕದ ಪà³à²°à²¤à²¿à²•à³à²°à²¿à²¯à³†.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} ಟಿಪà³à²ªà²£à²¿]
+password_label=PDF ಅನà³à²¨à³ ತೆರೆಯಲೠಗà³à²ªà³à²¤à²ªà²¦à²µà²¨à³à²¨à³ ನಮೂದಿಸಿ.
+password_invalid=ಅಮಾನà³à²¯à²µà²¾à²¦ ಗà³à²ªà³à²¤à²ªà²¦, ದಯವಿಟà³à²Ÿà³ ಇನà³à²¨à³Šà²®à³à²®à³† ಪà³à²°à²¯à²¤à³à²¨à²¿à²¸à²¿.
+password_ok=OK
+password_cancel=ರದà³à²¦à³ ಮಾಡà³
+
+printing_not_supported=ಎಚà³à²šà²°à²¿à²•ೆ: ಈ ಜಾಲವೀಕà³à²·à²•ದಲà³à²²à²¿ ಮà³à²¦à³à²°à²£à²•à³à²•ೆ ಸಂಪೂರà³à²£ ಬೆಂಬಲವಿಲà³à²².
+printing_not_ready=ಎಚà³à²šà²°à²¿à²•ೆ: PDF ಕಡತವೠಮà³à²¦à³à²°à²¿à²¸à²²à³ ಸಂಪೂರà³à²£à²µà²¾à²—ಿ ಲೋಡೠಆಗಿಲà³à²².
+web_fonts_disabled=ಜಾಲ ಅಕà³à²·à²°à²¶à³ˆà²²à²¿à²¯à²¨à³à²¨à³ ನಿಷà³à²•à³à²°à²¿à²¯à²—ೊಳಿಸಲಾಗಿದೆ: ಅಡಕಗೊಳಿಸಿದ PDF ಅಕà³à²·à²°à²¶à³ˆà²²à²¿à²—ಳನà³à²¨à³ ಬಳಸಲೠಸಾಧà³à²¯à²µà²¾à²—ಿಲà³à²².
diff --git a/thirdparty/pdfjs/web/locale/ko/viewer.properties b/thirdparty/pdfjs/web/locale/ko/viewer.properties
new file mode 100644
index 0000000..c578f91
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/ko/viewer.properties
@@ -0,0 +1,253 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ì´ì „ 페ì´ì§€
+previous_label=ì´ì „
+next.title=ë‹¤ìŒ íŽ˜ì´ì§€
+next_label=다ìŒ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=페ì´ì§€
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=축소
+zoom_out_label=축소
+zoom_in.title=확대
+zoom_in_label=확대
+zoom.title=확대/축소
+presentation_mode.title=í”„ë ˆì í…Œì´ì…˜ 모드로 ì „í™˜
+presentation_mode_label=í”„ë ˆì í…Œì´ì…˜ 모드
+open_file.title=íŒŒì¼ ì—´ê¸°
+open_file_label=열기
+print.title=ì¸ì‡„
+print_label=ì¸ì‡„
+download.title=다운로드
+download_label=다운로드
+bookmark.title=현재 보기 (복사 ë˜ëŠ” 새 ì°½ì— ì—´ê¸°)
+bookmark_label=현재 보기
+
+# Secondary toolbar and context menu
+tools.title=ë„구
+tools_label=ë„구
+first_page.title=첫 페ì´ì§€ë¡œ ì´ë™
+first_page.label=첫 페ì´ì§€ë¡œ ì´ë™
+first_page_label=첫 페ì´ì§€ë¡œ ì´ë™
+last_page.title=마지막 페ì´ì§€ë¡œ ì´ë™
+last_page.label=마지막 페ì´ì§€ë¡œ ì´ë™
+last_page_label=마지막 페ì´ì§€ë¡œ ì´ë™
+page_rotate_cw.title=시계방향으로 íšŒì „
+page_rotate_cw.label=시계방향으로 íšŒì „
+page_rotate_cw_label=시계방향으로 íšŒì „
+page_rotate_ccw.title=시계 반대방향으로 íšŒì „
+page_rotate_ccw.label=시계 반대방향으로 íšŒì „
+page_rotate_ccw_label=시계 반대방향으로 íšŒì „
+
+cursor_text_select_tool.title=í…스트 ì„ íƒ ë„구 활성화
+cursor_text_select_tool_label=í…스트 ì„ íƒ ë„구
+cursor_hand_tool.title=ì† ë„구 활성화
+cursor_hand_tool_label=ì† ë„구
+
+scroll_vertical.title=세로 스í¬ë¡¤ 사용
+scroll_vertical_label=세로 스í¬ë¡¤
+scroll_horizontal.title=가로 스í¬ë¡¤ 사용
+scroll_horizontal_label=가로 스í¬ë¡¤
+scroll_wrapped.title=래핑(ìžë™ 줄 바꿈) 스í¬ë¡¤ 사용
+scroll_wrapped_label=래핑 스í¬ë¡¤
+
+spread_none.title=한 페ì´ì§€ 보기
+spread_none_label=펼ì³ì§ ì—†ìŒ
+spread_odd.title=홀수 페ì´ì§€ë¡œ 시작하는 ë‘ íŽ˜ì´ì§€ 보기
+spread_odd_label=홀수 펼ì³ì§
+spread_even.title=ì§ìˆ˜ 페ì´ì§€ë¡œ 시작하는 ë‘ íŽ˜ì´ì§€ 보기
+spread_even_label=ì§ìˆ˜ 펼ì³ì§
+
+# Document properties dialog box
+document_properties.title=문서 ì†ì„±â€¦
+document_properties_label=문서 ì†ì„±â€¦
+document_properties_file_name=íŒŒì¼ ì´ë¦„:
+document_properties_file_size=íŒŒì¼ í¬ê¸°:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}}ë°”ì´íЏ)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}}ë°”ì´íЏ)
+document_properties_title=ì œëª©:
+document_properties_author=작성ìž:
+document_properties_subject=ì£¼ì œ:
+document_properties_keywords=키워드:
+document_properties_creation_date=작성 ë‚ ì§œ:
+document_properties_modification_date=ìˆ˜ì • ë‚ ì§œ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=작성 프로그램:
+document_properties_producer=PDF 변환 소프트웨어:
+document_properties_version=PDF ë²„ì „:
+document_properties_page_count=페ì´ì§€ 수:
+document_properties_page_size=페ì´ì§€ í¬ê¸°:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=세로 방향
+document_properties_page_size_orientation_landscape=가로 방향
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=ë ˆí„°
+document_properties_page_size_name_legal=리걸
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=ë¹ ë¥¸ 웹 보기:
+document_properties_linearized_yes=예
+document_properties_linearized_no=아니오
+document_properties_close=닫기
+
+print_progress_message=ì¸ì‡„ 문서 준비 중…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=취소
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=íƒìƒ‰ì°½ 표시/숨기기
+toggle_sidebar_notification.title=íƒìƒ‰ì°½ 표시/숨기기 (ë¬¸ì„œì— ì•„ì›ƒë¼ì¸/ì²¨ë¶€íŒŒì¼ í¬í•¨ë¨)
+toggle_sidebar_notification2.title=íƒìƒ‰ì°½ 표시/숨기기 (ë¬¸ì„œì— ì•„ì›ƒë¼ì¸/첨부파ì¼/ë ˆì´ì–´ í¬í•¨ë¨)
+toggle_sidebar_label=íƒìƒ‰ì°½ 표시/숨기기
+document_outline.title=문서 아웃ë¼ì¸ 보기 (ë”블 í´ë¦í•´ì„œ ëª¨ë“ í•목 펼치기/ì ‘ê¸°)
+document_outline_label=문서 아웃ë¼ì¸
+attachments.title=ì²¨ë¶€íŒŒì¼ ë³´ê¸°
+attachments_label=첨부파ì¼
+layers.title=ë ˆì´ì–´ 보기 (ë”블 í´ë¦í•´ì„œ ëª¨ë“ ë ˆì´ì–´ë¥¼ 기본 ìƒíƒœë¡œ ìž¬ì„¤ì •)
+layers_label=ë ˆì´ì–´
+thumbs.title=미리보기
+thumbs_label=미리보기
+current_outline_item.title=현재 아웃ë¼ì¸ í•목 찾기
+current_outline_item_label=현재 아웃ë¼ì¸ í•목
+findbar.title=검색
+findbar_label=검색
+
+additional_layers=추가 ë ˆì´ì–´
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas={{page}} 페ì´ì§€
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} 페ì´ì§€
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} 페ì´ì§€ 미리보기
+
+# Find panel button title and messages
+find_input.title=찾기
+find_input.placeholder=문서ì—서 찾기…
+find_previous.title=ì§€ì • 문ìžì—´ì— ì¼ì¹˜í•˜ëŠ” 1ê°œ ë¶€ë¶„ì„ ê²€ìƒ‰
+find_previous_label=ì´ì „
+find_next.title=ì§€ì • 문ìžì—´ì— ì¼ì¹˜í•˜ëŠ” ë‹¤ìŒ ë¶€ë¶„ì„ ê²€ìƒ‰
+find_next_label=다ìŒ
+find_highlight=ëª¨ë‘ ê°•ì¡° 표시
+find_match_case_label=대/ì†Œë¬¸ìž êµ¬ë¶„
+find_entire_word_label=단어 단위로
+find_reached_top=문서 처ìŒê¹Œì§€ ê²€ìƒ‰í•˜ê³ ë으로 ëŒì•„와 검색했습니다.
+find_reached_bottom=문서 ë까지 ê²€ìƒ‰í•˜ê³ ì•žìœ¼ë¡œ ëŒì•„와 검색했습니다.
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} 중 {{current}} ì¼ì¹˜
+find_match_count[two]={{total}} 중 {{current}} ì¼ì¹˜
+find_match_count[few]={{total}} 중 {{current}} ì¼ì¹˜
+find_match_count[many]={{total}} 중 {{current}} ì¼ì¹˜
+find_match_count[other]={{total}} 중 {{current}} ì¼ì¹˜
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} ì´ìƒ ì¼ì¹˜
+find_match_count_limit[one]={{limit}} ì´ìƒ ì¼ì¹˜
+find_match_count_limit[two]={{limit}} ì´ìƒ ì¼ì¹˜
+find_match_count_limit[few]={{limit}} ì´ìƒ ì¼ì¹˜
+find_match_count_limit[many]={{limit}} ì´ìƒ ì¼ì¹˜
+find_match_count_limit[other]={{limit}} ì´ìƒ ì¼ì¹˜
+find_not_found=검색 ê²°ê³¼ ì—†ìŒ
+
+# Error panel labels
+error_more_info=ì •ë³´ ë” ë³´ê¸°
+error_less_info=ì •ë³´ 간단히 보기
+error_close=닫기
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (빌드: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=메시지: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=스íƒ: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=파ì¼: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=줄 번호: {{line}}
+rendering_error=페ì´ì§€ë¥¼ ë Œë”ë§í•˜ëŠ” ë™ì•ˆ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.
+
+# Predefined zoom values
+page_scale_width=페ì´ì§€ ë„ˆë¹„ì— ë§žì¶”ê¸°
+page_scale_fit=페ì´ì§€ì— 맞추기
+page_scale_auto=ìžë™
+page_scale_actual=ì‹¤ì œ í¬ê¸°
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=오류
+loading_error=PDF를 로드하는 ë™ì•ˆ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.
+invalid_file_error=잘못ë˜ì—ˆê±°ë‚˜ ì†ìƒëœ PDF 파ì¼.
+missing_file_error=PDF íŒŒì¼ ì—†ìŒ.
+unexpected_response_error=예ìƒì¹˜ 못한 서버 ì‘답입니다.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} 주ì„]
+password_label=ì´ PDF 파ì¼ì„ ì—´ 수 있는 비밀번호를 ìž…ë ¥í•˜ì„¸ìš”.
+password_invalid=ìž˜ëª»ëœ ë¹„ë°€ë²ˆí˜¸ìž…ë‹ˆë‹¤. 다시 시ë„하세요.
+password_ok=확ì¸
+password_cancel=취소
+
+printing_not_supported=ê²½ê³ : ì´ ë¸Œë¼ìš°ì €ëŠ” ì¸ì‡„를 ì™„ì „ížˆ ì§€ì›í•˜ì§€ 않습니다.
+printing_not_ready=ê²½ê³ : ì´ PDF를 ì¸ì‡„를 í• ìˆ˜ ìžˆì„ ì •ë„로 ì½ì–´ë“¤ì´ì§€ 못했습니다.
+web_fonts_disabled=웹 í°íŠ¸ê°€ 비활성화ë¨: ë‚´ìž¥ëœ PDF ê¸€ê¼´ì„ ì‚¬ìš©í• ìˆ˜ 없습니다.
diff --git a/thirdparty/pdfjs/web/locale/lij/viewer.properties b/thirdparty/pdfjs/web/locale/lij/viewer.properties
new file mode 100644
index 0000000..0cfa7d2
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/lij/viewer.properties
@@ -0,0 +1,241 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pagina primma
+previous_label=Precedente
+next.title=Pagina dòppo
+next_label=Pròscima
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pagina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Diminoisci zoom
+zoom_out_label=Diminoisci zoom
+zoom_in.title=Aomenta zoom
+zoom_in_label=Aomenta zoom
+zoom.title=Zoom
+presentation_mode.title=Vanni into mòddo de prezentaçion
+presentation_mode_label=Mòddo de prezentaçion
+open_file.title=Arvi file
+open_file_label=Arvi
+print.title=Stanpa
+print_label=Stanpa
+download.title=Descaregamento
+download_label=Descaregamento
+bookmark.title=Vixon corente (còpia ò arvi inte 'n neuvo barcon)
+bookmark_label=Vixon corente
+
+# Secondary toolbar and context menu
+tools.title=Atressi
+tools_label=Atressi
+first_page.title=Vanni a-a primma pagina
+first_page.label=Vanni a-a primma pagina
+first_page_label=Vanni a-a primma pagina
+last_page.title=Vanni a l'urtima pagina
+last_page.label=Vanni a l'urtima pagina
+last_page_label=Vanni a l'urtima pagina
+page_rotate_cw.title=Gia into verso oraio
+page_rotate_cw.label=Gia in senso do releuio
+page_rotate_cw_label=Gia into verso oraio
+page_rotate_ccw.title=Gia into verso antioraio
+page_rotate_ccw.label=Gia in senso do releuio a-a reversa
+page_rotate_ccw_label=Gia into verso antioraio
+
+cursor_text_select_tool.title=Abilita strumento de seleçion do testo
+cursor_text_select_tool_label=Strumento de seleçion do testo
+cursor_hand_tool.title=Abilita strumento man
+cursor_hand_tool_label=Strumento man
+
+scroll_vertical.title=Deuvia rebelamento verticale
+scroll_vertical_label=Rebelamento verticale
+scroll_horizontal.title=Deuvia rebelamento orizontâ
+scroll_horizontal_label=Rebelamento orizontâ
+scroll_wrapped.title=Deuvia rebelamento incapsolou
+scroll_wrapped_label=Rebelamento incapsolou
+
+spread_none.title=No unite a-a difuxon de pagina
+spread_none_label=No difuxon
+spread_odd.title=Uniscite a-a difuxon de pagina co-o numero dèspa
+spread_odd_label=Difuxon dèspa
+spread_even.title=Uniscite a-a difuxon de pagina co-o numero pari
+spread_even_label=Difuxon pari
+
+# Document properties dialog box
+document_properties.title=Propietæ do documento…
+document_properties_label=Propietæ do documento…
+document_properties_file_name=Nomme schedaio:
+document_properties_file_size=Dimenscion schedaio:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kB ({{size_b}} byte)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} byte)
+document_properties_title=Titolo:
+document_properties_author=Aoto:
+document_properties_subject=Ogetto:
+document_properties_keywords=Paròlle ciave:
+document_properties_creation_date=Dæta creaçion:
+document_properties_modification_date=Dæta cangiamento:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Aotô originale:
+document_properties_producer=Produtô PDF:
+document_properties_version=Verscion PDF:
+document_properties_page_count=Contezzo pagine:
+document_properties_page_size=Dimenscion da pagina:
+document_properties_page_size_unit_inches=dii gròsci
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=drito
+document_properties_page_size_orientation_landscape=desteizo
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letia
+document_properties_page_size_name_legal=Lezze
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista veloce do Web:
+document_properties_linearized_yes=Sci
+document_properties_linearized_no=No
+document_properties_close=Særa
+
+print_progress_message=Praparo o documento pe-a stanpa…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Anulla
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Ativa/dizativa bara de scianco
+toggle_sidebar_notification.title=Cangia bara de löo (o documento o contegne di alegæ)
+toggle_sidebar_label=Ativa/dizativa bara de scianco
+document_outline.title=Fanni vedde o contorno do documento (scicca doggio pe espande/ridue tutti i elementi)
+document_outline_label=Contorno do documento
+attachments.title=Fanni vedde alegæ
+attachments_label=Alegæ
+thumbs.title=Mostra miniatue
+thumbs_label=Miniatue
+findbar.title=Treuva into documento
+findbar_label=Treuva
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pagina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatua da pagina {{page}}
+
+# Find panel button title and messages
+find_input.title=Treuva
+find_input.placeholder=Treuva into documento…
+find_previous.title=Treuva a ripetiçion precedente do testo da çercâ
+find_previous_label=Precedente
+find_next.title=Treuva a ripetiçion dòppo do testo da çercâ
+find_next_label=Segoente
+find_highlight=Evidençia
+find_match_case_label=Maioscole/minoscole
+find_entire_word_label=Poula intrega
+find_reached_top=Razonto a fin da pagina, continoa da l'iniçio
+find_reached_bottom=Razonto l'iniçio da pagina, continoa da-a fin
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} corispondensa
+find_match_count[two]={{current}} de {{total}} corispondense
+find_match_count[few]={{current}} de {{total}} corispondense
+find_match_count[many]={{current}} de {{total}} corispondense
+find_match_count[other]={{current}} de {{total}} corispondense
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Ciù de {{limit}} corispondense
+find_match_count_limit[one]=Ciù de {{limit}} corispondensa
+find_match_count_limit[two]=Ciù de {{limit}} corispondense
+find_match_count_limit[few]=Ciù de {{limit}} corispondense
+find_match_count_limit[many]=Ciù de {{limit}} corispondense
+find_match_count_limit[other]=Ciù de {{limit}} corispondense
+find_not_found=Testo no trovou
+
+# Error panel labels
+error_more_info=Ciù informaçioin
+error_less_info=Meno informaçioin
+error_close=Særa
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mesaggio: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Schedaio: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linia: {{line}}
+rendering_error=Gh'é stæto 'n'erô itno rendering da pagina.
+
+# Predefined zoom values
+page_scale_width=Larghessa pagina
+page_scale_fit=Adatta a una pagina
+page_scale_auto=Zoom aotomatico
+page_scale_actual=Dimenscioin efetive
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Erô
+loading_error=S'é verificou 'n'erô itno caregamento do PDF.
+invalid_file_error=O schedaio PDF o l'é no valido ò aroinou.
+missing_file_error=O schedaio PDF o no gh'é.
+unexpected_response_error=Risposta inprevista do-u server
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotaçion: {{type}}]
+password_label=Dimme a paròlla segreta pe arvî sto schedaio PDF.
+password_invalid=Paròlla segreta sbalia. Preuva torna.
+password_ok=Va ben
+password_cancel=Anulla
+
+printing_not_supported=Atençion: a stanpa a no l'é conpletamente soportâ da sto navegatô.
+printing_not_ready=Atençion: o PDF o no l'é ancon caregou conpletamente pe-a stanpa.
+web_fonts_disabled=I font do web en dizativæ: inposcibile adeuviâ i carateri do PDF.
diff --git a/thirdparty/pdfjs/web/locale/lo/viewer.properties b/thirdparty/pdfjs/web/locale/lo/viewer.properties
new file mode 100644
index 0000000..00d3309
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/lo/viewer.properties
@@ -0,0 +1,152 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ຫນ້າàºà»ˆàºàº™àº«àº™à»‰àº²
+previous_label=àºà»ˆàºàº™àº«àº™à»‰àº²
+next.title=ຫນ້າຖັດໄປ
+next_label=ຖັດໄປ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ຫນ້າ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=ຈາຠ{{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} ຈາຠ{{pagesCount}})
+
+zoom_out.title=ຂະຫàºàº²àºàºàºàº
+zoom_out_label=ຂະຫàºàº²àºàºàºàº
+zoom_in.title=ຂະຫàºàº²àºà»€àº‚ົ້າ
+zoom_in_label=ຂະຫàºàº²àºà»€àº‚ົ້າ
+zoom.title=ຂະຫàºàº²àº
+presentation_mode.title=ສັບປ່ຽນເປັນໂຫມດàºàº²àº™àº™àº³àºªàº°à»€àº«àº™àºµ
+presentation_mode_label=ໂຫມດàºàº²àº™àº™àº³àºªàº°à»€àº«àº™àºµ
+open_file.title=ເປີດໄຟລ໌
+open_file_label=ເປີດ
+print.title=ພິມ
+print_label=ພິມ
+download.title=ດາວໂຫລດ
+download_label=ດາວໂຫລດ
+bookmark.title=ມຸມມàºàº‡àº›àº°àºˆàº¸àºšàº±àº™ (ສຳເນົາ ຫລື ເປີດໃນວິນໂດໃຫມ່)
+bookmark_label=ມຸມມàºàº‡àº›àº°àºˆàº¸àºšàº±àº™
+
+# Secondary toolbar and context menu
+tools.title=ເຄື່àºàº‡àº¡àº·
+tools_label=ເຄື່àºàº‡àº¡àº·
+first_page.title=ໄປທີ່ຫນ້າທຳàºàº´àº”
+first_page.label=ໄປທີ່ຫນ້າທຳàºàº´àº”
+first_page_label=ໄປທີ່ຫນ້າທຳàºàº´àº”
+last_page.title=ໄປທີ່ຫນ້າສຸດທ້າàº
+last_page.label=ໄປທີ່ຫນ້າສຸດທ້າàº
+last_page_label=ໄປທີ່ຫນ້າສຸດທ້າàº
+page_rotate_cw.title=ຫມູນຕາມເຂັມໂມງ
+page_rotate_cw.label=ຫມູນຕາມເຂັມໂມງ
+page_rotate_cw_label=ຫມູນຕາມເຂັມໂມງ
+page_rotate_ccw.title=ຫມູນທວນເຂັມໂມງ
+page_rotate_ccw.label=ຫມູນທວນເຂັມໂມງ
+page_rotate_ccw_label=ຫມູນທວນເຂັມໂມງ
+
+
+
+
+# Document properties dialog box
+document_properties_file_name=ຊື່ໄຟລ໌:
+document_properties_file_size=ຂະຫນາດໄຟລ໌:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=ລວງຕັ້ງ
+document_properties_page_size_orientation_landscape=ລວງນàºàº™
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=ຈົດà»àº²àº
+document_properties_page_size_name_legal=ຂà»à»‰àºàº»àº”ຫມາàº
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_close=ປິດ
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_close=àºàº»àºà»€àº¥àºµàº
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=ເປີດ/ປິດà»àº–ບຂ້າງ
+toggle_sidebar_notification.title=ເປີດ/ປິດà»àº–ບຂ້າງ (ເàºàºàº°àºªàº²àº™àº¡àºµà»€àº„ົ້າຮ່າງ/ໄຟລ໌à»àº™àºš)
+toggle_sidebar_label=ເປີດ/ປິດà»àº–ບຂ້າງ
+document_outline_label=ເຄົ້າຮ່າງເàºàºàº°àºªàº²àº™
+findbar_label=ຄົ້ນຫາ
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+
+# Find panel button title and messages
+find_input.title=ຄົ້ນຫາ
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+
+# Error panel labels
+error_more_info=ຂà»à»‰àº¡àº¹àº™à»€àºžàºµà»ˆàº¡à»€àº•ີມ
+error_less_info=ຂà»à»‰àº¡àº¹àº™àº™à»‰àºàºàº¥àº»àº‡
+error_close=ປິດ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+rendering_error=ມີຂà»à»‰àºœàº´àº”ພາດເàºàºµàº”ຂື້ນຂະນະທີ່àºàº³àº¥àº±àº‡à»€àº£àº±àº™à»€àº”ີຫນ້າ.
+
+# Predefined zoom values
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+
+# Loading indicator messages
+loading_error_indicator=ຂà»à»‰àºœàº´àº”ພາດ
+loading_error=ມີຂà»à»‰àºœàº´àº”ພາດເàºàºµàº”ຂື້ນຂະນະທີ່àºàº³àº¥àº±àº‡à»‚ຫລດ PDF.
+invalid_file_error=ໄຟລ໌ PDF ບà»à»ˆàº–ືàºàº•້àºàº‡àº«àº¥àº·à»€àºªàºàº«àº²àº.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+password_ok=ຕົàºàº¥àº»àº‡
+password_cancel=àºàº»àºà»€àº¥àºµàº
+
diff --git a/thirdparty/pdfjs/web/locale/locale.properties b/thirdparty/pdfjs/web/locale/locale.properties
new file mode 100644
index 0000000..372dd5d
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/locale.properties
@@ -0,0 +1,315 @@
+[ach]
+@import url(ach/viewer.properties)
+
+[af]
+@import url(af/viewer.properties)
+
+[an]
+@import url(an/viewer.properties)
+
+[ar]
+@import url(ar/viewer.properties)
+
+[ast]
+@import url(ast/viewer.properties)
+
+[az]
+@import url(az/viewer.properties)
+
+[be]
+@import url(be/viewer.properties)
+
+[bg]
+@import url(bg/viewer.properties)
+
+[bn]
+@import url(bn/viewer.properties)
+
+[bo]
+@import url(bo/viewer.properties)
+
+[br]
+@import url(br/viewer.properties)
+
+[brx]
+@import url(brx/viewer.properties)
+
+[bs]
+@import url(bs/viewer.properties)
+
+[ca]
+@import url(ca/viewer.properties)
+
+[cak]
+@import url(cak/viewer.properties)
+
+[ckb]
+@import url(ckb/viewer.properties)
+
+[cs]
+@import url(cs/viewer.properties)
+
+[cy]
+@import url(cy/viewer.properties)
+
+[da]
+@import url(da/viewer.properties)
+
+[de]
+@import url(de/viewer.properties)
+
+[dsb]
+@import url(dsb/viewer.properties)
+
+[el]
+@import url(el/viewer.properties)
+
+[en-CA]
+@import url(en-CA/viewer.properties)
+
+[en-GB]
+@import url(en-GB/viewer.properties)
+
+[en-US]
+@import url(en-US/viewer.properties)
+
+[eo]
+@import url(eo/viewer.properties)
+
+[es-AR]
+@import url(es-AR/viewer.properties)
+
+[es-CL]
+@import url(es-CL/viewer.properties)
+
+[es-ES]
+@import url(es-ES/viewer.properties)
+
+[es-MX]
+@import url(es-MX/viewer.properties)
+
+[et]
+@import url(et/viewer.properties)
+
+[eu]
+@import url(eu/viewer.properties)
+
+[fa]
+@import url(fa/viewer.properties)
+
+[ff]
+@import url(ff/viewer.properties)
+
+[fi]
+@import url(fi/viewer.properties)
+
+[fr]
+@import url(fr/viewer.properties)
+
+[fy-NL]
+@import url(fy-NL/viewer.properties)
+
+[ga-IE]
+@import url(ga-IE/viewer.properties)
+
+[gd]
+@import url(gd/viewer.properties)
+
+[gl]
+@import url(gl/viewer.properties)
+
+[gn]
+@import url(gn/viewer.properties)
+
+[gu-IN]
+@import url(gu-IN/viewer.properties)
+
+[he]
+@import url(he/viewer.properties)
+
+[hi-IN]
+@import url(hi-IN/viewer.properties)
+
+[hr]
+@import url(hr/viewer.properties)
+
+[hsb]
+@import url(hsb/viewer.properties)
+
+[hu]
+@import url(hu/viewer.properties)
+
+[hy-AM]
+@import url(hy-AM/viewer.properties)
+
+[hye]
+@import url(hye/viewer.properties)
+
+[ia]
+@import url(ia/viewer.properties)
+
+[id]
+@import url(id/viewer.properties)
+
+[is]
+@import url(is/viewer.properties)
+
+[it]
+@import url(it/viewer.properties)
+
+[ja]
+@import url(ja/viewer.properties)
+
+[ka]
+@import url(ka/viewer.properties)
+
+[kab]
+@import url(kab/viewer.properties)
+
+[kk]
+@import url(kk/viewer.properties)
+
+[km]
+@import url(km/viewer.properties)
+
+[kn]
+@import url(kn/viewer.properties)
+
+[ko]
+@import url(ko/viewer.properties)
+
+[lij]
+@import url(lij/viewer.properties)
+
+[lo]
+@import url(lo/viewer.properties)
+
+[lt]
+@import url(lt/viewer.properties)
+
+[ltg]
+@import url(ltg/viewer.properties)
+
+[lv]
+@import url(lv/viewer.properties)
+
+[meh]
+@import url(meh/viewer.properties)
+
+[mk]
+@import url(mk/viewer.properties)
+
+[mr]
+@import url(mr/viewer.properties)
+
+[ms]
+@import url(ms/viewer.properties)
+
+[my]
+@import url(my/viewer.properties)
+
+[nb-NO]
+@import url(nb-NO/viewer.properties)
+
+[ne-NP]
+@import url(ne-NP/viewer.properties)
+
+[nl]
+@import url(nl/viewer.properties)
+
+[nn-NO]
+@import url(nn-NO/viewer.properties)
+
+[oc]
+@import url(oc/viewer.properties)
+
+[pa-IN]
+@import url(pa-IN/viewer.properties)
+
+[pl]
+@import url(pl/viewer.properties)
+
+[pt-BR]
+@import url(pt-BR/viewer.properties)
+
+[pt-PT]
+@import url(pt-PT/viewer.properties)
+
+[rm]
+@import url(rm/viewer.properties)
+
+[ro]
+@import url(ro/viewer.properties)
+
+[ru]
+@import url(ru/viewer.properties)
+
+[scn]
+@import url(scn/viewer.properties)
+
+[si]
+@import url(si/viewer.properties)
+
+[sk]
+@import url(sk/viewer.properties)
+
+[sl]
+@import url(sl/viewer.properties)
+
+[son]
+@import url(son/viewer.properties)
+
+[sq]
+@import url(sq/viewer.properties)
+
+[sr]
+@import url(sr/viewer.properties)
+
+[sv-SE]
+@import url(sv-SE/viewer.properties)
+
+[szl]
+@import url(szl/viewer.properties)
+
+[ta]
+@import url(ta/viewer.properties)
+
+[te]
+@import url(te/viewer.properties)
+
+[th]
+@import url(th/viewer.properties)
+
+[tl]
+@import url(tl/viewer.properties)
+
+[tr]
+@import url(tr/viewer.properties)
+
+[trs]
+@import url(trs/viewer.properties)
+
+[uk]
+@import url(uk/viewer.properties)
+
+[ur]
+@import url(ur/viewer.properties)
+
+[uz]
+@import url(uz/viewer.properties)
+
+[vi]
+@import url(vi/viewer.properties)
+
+[wo]
+@import url(wo/viewer.properties)
+
+[xh]
+@import url(xh/viewer.properties)
+
+[zh-CN]
+@import url(zh-CN/viewer.properties)
+
+[zh-TW]
+@import url(zh-TW/viewer.properties)
+
diff --git a/thirdparty/pdfjs/web/locale/lt/viewer.properties b/thirdparty/pdfjs/web/locale/lt/viewer.properties
new file mode 100644
index 0000000..017a36b
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/lt/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Ankstesnis puslapis
+previous_label=Ankstesnis
+next.title=Kitas puslapis
+next_label=Kitas
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Puslapis
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=iš {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} iš {{pagesCount}})
+
+zoom_out.title=Sumažinti
+zoom_out_label=Sumažinti
+zoom_in.title=Padidinti
+zoom_in_label=Padidinti
+zoom.title=Mastelis
+presentation_mode.title=Pereiti į pateikties veikseną
+presentation_mode_label=Pateikties veiksena
+open_file.title=Atverti failÄ…
+open_file_label=Atverti
+print.title=Spausdinti
+print_label=Spausdinti
+download.title=Parsiųsti
+download_label=Parsiųsti
+bookmark.title=Esamojo rodinio saitas (kopijavimui ar atvÄ—rimui kitame lange)
+bookmark_label=Esamasis rodinys
+
+# Secondary toolbar and context menu
+tools.title=PriemonÄ—s
+tools_label=PriemonÄ—s
+first_page.title=Eiti į pirmą puslapį
+first_page.label=Eiti į pirmą puslapį
+first_page_label=Eiti į pirmą puslapį
+last_page.title=Eiti į paskutinį puslapį
+last_page.label=Eiti į paskutinį puslapį
+last_page_label=Eiti į paskutinį puslapį
+page_rotate_cw.title=Pasukti pagal laikrodžio rodyklę
+page_rotate_cw.label=Pasukti pagal laikrodžio rodyklę
+page_rotate_cw_label=Pasukti pagal laikrodžio rodyklę
+page_rotate_ccw.title=Pasukti prieš laikrodžio rodyklę
+page_rotate_ccw.label=Pasukti prieš laikrodžio rodyklę
+page_rotate_ccw_label=Pasukti prieš laikrodžio rodyklę
+
+cursor_text_select_tool.title=Įjungti teksto žymėjimo įrankį
+cursor_text_select_tool_label=Teksto žymėjimo įrankis
+cursor_hand_tool.title=Įjungti vilkimo įrankį
+cursor_hand_tool_label=Vilkimo įrankis
+
+scroll_vertical.title=Naudoti vertikalų slinkimą
+scroll_vertical_label=Vertikalus slinkimas
+scroll_horizontal.title=Naudoti horizontalų slinkimą
+scroll_horizontal_label=Horizontalus slinkimas
+scroll_wrapped.title=Naudoti išklotą slinkimą
+scroll_wrapped_label=Išklotas slinkimas
+
+spread_none.title=Nejungti puslapių į dvilapius
+spread_none_label=Be dvilapių
+spread_odd.title=Sujungti į dvilapius pradedant nelyginiais puslapiais
+spread_odd_label=Nelyginiai dvilapiai
+spread_even.title=Sujungti į dvilapius pradedant lyginiais puslapiais
+spread_even_label=Lyginiai dvilapiai
+
+# Document properties dialog box
+document_properties.title=Dokumento savybės…
+document_properties_label=Dokumento savybės…
+document_properties_file_name=Failo vardas:
+document_properties_file_size=Failo dydis:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} B)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} B)
+document_properties_title=Antraštė:
+document_properties_author=Autorius:
+document_properties_subject=Tema:
+document_properties_keywords=Reikšminiai žodžiai:
+document_properties_creation_date=Sukūrimo data:
+document_properties_modification_date=Modifikavimo data:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Kūrėjas:
+document_properties_producer=PDF generatorius:
+document_properties_version=PDF versija:
+document_properties_page_count=Puslapių skaiÄius:
+document_properties_page_size=Puslapio dydis:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=staÄias
+document_properties_page_size_orientation_landscape=gulsÄias
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Laiškas
+document_properties_page_size_name_legal=Dokumentas
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Spartus žiniatinklio rodinys:
+document_properties_linearized_yes=Taip
+document_properties_linearized_no=Ne
+document_properties_close=Užverti
+
+print_progress_message=Dokumentas ruošiamas spausdinimui…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Atsisakyti
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Rodyti / slėpti šoninį polangį
+toggle_sidebar_notification.title=Parankinė (dokumentas turi struktūrą / priedų)
+toggle_sidebar_notification2.title=Parankinė (dokumentas turi struktūrą / priedų / sluoksnių)
+toggle_sidebar_label=Å oninis polangis
+document_outline.title=Rodyti dokumento struktūrą (spustelėkite dukart norėdami išplėsti/suskleisti visus elementus)
+document_outline_label=Dokumento struktūra
+attachments.title=Rodyti priedus
+attachments_label=Priedai
+layers.title=Rodyti sluoksnius (spustelėkite dukart, norėdami atstatyti visus sluoksnius į numatytąją būseną)
+layers_label=Sluoksniai
+thumbs.title=Rodyti puslapių miniatiūras
+thumbs_label=Miniatiūros
+findbar.title=Ieškoti dokumente
+findbar_label=Rasti
+
+additional_layers=Papildomi sluoksniai
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas={{page}} puslapis
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} puslapis
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} puslapio miniatiūra
+
+# Find panel button title and messages
+find_input.title=Rasti
+find_input.placeholder=Rasti dokumente…
+find_previous.title=Ieškoti ankstesnio frazės egzemplioriaus
+find_previous_label=Ankstesnis
+find_next.title=Ieškoti tolesnio frazės egzemplioriaus
+find_next_label=Tolesnis
+find_highlight=Viską paryškinti
+find_match_case_label=Skirti didžiąsias ir mažąsias raides
+find_entire_word_label=Ištisi žodžiai
+find_reached_top=Pasiekus dokumento pradžią, paieška pratęsta nuo pabaigos
+find_reached_bottom=Pasiekus dokumento pabaigą, paieška pratęsta nuo pradžios
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} iš {{total}} atitikmens
+find_match_count[two]={{current}} iš {{total}} atitikmenų
+find_match_count[few]={{current}} iš {{total}} atitikmenų
+find_match_count[many]={{current}} iš {{total}} atitikmenų
+find_match_count[other]={{current}} iš {{total}} atitikmens
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Daugiau nei {{limit}} atitikmenų
+find_match_count_limit[one]=Daugiau nei {{limit}} atitikmuo
+find_match_count_limit[two]=Daugiau nei {{limit}} atitikmenys
+find_match_count_limit[few]=Daugiau nei {{limit}} atitikmenys
+find_match_count_limit[many]=Daugiau nei {{limit}} atitikmenų
+find_match_count_limit[other]=Daugiau nei {{limit}} atitikmuo
+find_not_found=Ieškoma frazė nerasta
+
+# Error panel labels
+error_more_info=Išsamiau
+error_less_info=GlausÄiau
+error_close=Užverti
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v. {{version}} (darinys: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Pranešimas: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=DÄ—klas: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Failas: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=EilutÄ—: {{line}}
+rendering_error=Atvaizduojant puslapį įvyko klaida.
+
+# Predefined zoom values
+page_scale_width=Priderinti prie lapo ploÄio
+page_scale_fit=Pritaikyti prie lapo dydžio
+page_scale_auto=Automatinis mastelis
+page_scale_actual=Tikras dydis
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Klaida
+loading_error=Įkeliant PDF failą įvyko klaida.
+invalid_file_error=Tai nÄ—ra PDF failas arba jis yra sugadintas.
+missing_file_error=PDF failas nerastas.
+unexpected_response_error=NetikÄ—tas serverio atsakas.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[„{{type}}“ tipo anotacija]
+password_label=Įveskite slaptažodį šiam PDF failui atverti.
+password_invalid=Slaptažodis neteisingas. Bandykite dar kartą.
+password_ok=Gerai
+password_cancel=Atsisakyti
+
+printing_not_supported=Dėmesio! Spausdinimas šioje naršyklėje nėra pilnai realizuotas.
+printing_not_ready=Dėmesio! PDF failas dar nėra pilnai įkeltas spausdinimui.
+web_fonts_disabled=Saityno Å¡riftai iÅ¡jungti – PDF faile esanÄių Å¡riftų naudoti negalima.
diff --git a/thirdparty/pdfjs/web/locale/ltg/viewer.properties b/thirdparty/pdfjs/web/locale/ltg/viewer.properties
new file mode 100644
index 0000000..4fffa86
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/ltg/viewer.properties
@@ -0,0 +1,219 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ĪprÄ«kÅ¡ejÄ lopa
+previous_label=ĪprÄ«kÅ¡ejÄ
+next.title=Nuokomuo lopa
+next_label=Nuokomuo
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Lopa
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=nu {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} nu {{pagesCount}})
+
+zoom_out.title=Attuolynuot
+zoom_out_label=Attuolynuot
+zoom_in.title=Pītuvynuot
+zoom_in_label=Pītuvynuot
+zoom.title=Palelynuojums
+presentation_mode.title=Puorslēgtīs iz Prezentacejis režymu
+presentation_mode_label=Prezentacejis režyms
+open_file.title=Attaiseit failu
+open_file_label=Attaiseit
+print.title=Drukuošona
+print_label=DrukÅt
+download.title=Lejupīluode
+download_label=Lejupīluodeit
+bookmark.title=PoÅ¡reizejais skots (kopÄ“t voi attaiseit jaunÄ lÅ«gÄ)
+bookmark_label=Pošreizejais skots
+
+# Secondary toolbar and context menu
+tools.title=Reiki
+tools_label=Reiki
+first_page.title=Īt iz pyrmū lopu
+first_page.label=Īt iz pyrmū lopu
+first_page_label=Īt iz pyrmū lopu
+last_page.title=Īt iz piedejū lopu
+last_page.label=Īt iz piedejū lopu
+last_page_label=Īt iz piedejū lopu
+page_rotate_cw.title=Pagrīzt pa pulksteni
+page_rotate_cw.label=Pagrīzt pa pulksteni
+page_rotate_cw_label=Pagrīzt pa pulksteni
+page_rotate_ccw.title=Pagrīzt pret pulksteni
+page_rotate_ccw.label=Pagrīzt pret pulksteni
+page_rotate_ccw_label=Pagrīzt pret pulksteni
+
+cursor_text_select_tool.title=Aktivizēt teksta izvieles reiku
+cursor_text_select_tool_label=Teksta izvieles reiks
+cursor_hand_tool.title=Aktivēt rūkys reiku
+cursor_hand_tool_label=Rūkys reiks
+
+scroll_vertical.title=IzmontÅt vertikalÅ« ritinÅÅ¡onu
+scroll_vertical_label=VertikalÅ ritinÅÅ¡ona
+scroll_horizontal.title=IzmontÅt horizontalÅ« ritinÅÅ¡onu
+scroll_horizontal_label=HorizontalÅ ritinÅÅ¡ona
+scroll_wrapped.title=IzmontÅt mÄrÅ«gojamÅ« ritinÅÅ¡onu
+scroll_wrapped_label=MÄrÅ«gojamÅ ritinÅÅ¡ona
+
+spread_none.title=NaizmontÅt lopu atvÄruma režimu
+spread_none_label=Bez atvÄrumim
+spread_odd.title=IzmontÅt lopu atvÄrumus sÅkut nu napÅra numeru lopom
+spread_odd_label=NapÅra lopys pa kreisi
+spread_even.title=IzmontÅt lopu atvÄrumus sÅkut nu pÅra numeru lopom
+spread_even_label=PÅra lopys pa kreisi
+
+# Document properties dialog box
+document_properties.title=Dokumenta īstatiejumi…
+document_properties_label=Dokumenta īstatiejumi…
+document_properties_file_name=Faila nūsaukums:
+document_properties_file_size=Faila izmÄrs:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} biti)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} biti)
+document_properties_title=Nūsaukums:
+document_properties_author=Autors:
+document_properties_subject=Tema:
+document_properties_keywords=AtslÄgi vuordi:
+document_properties_creation_date=Izveides datums:
+document_properties_modification_date=lobuošonys datums:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Radeituojs:
+document_properties_producer=PDF producents:
+document_properties_version=PDF verseja:
+document_properties_page_count=Lopu skaits:
+document_properties_page_size=Lopas izmÄrs:
+document_properties_page_size_unit_inches=collas
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portreta orientaceja
+document_properties_page_size_orientation_landscape=ainovys orientaceja
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=JÄ
+document_properties_linearized_no=NÄ
+document_properties_close=Aiztaiseit
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Atceļt
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Puorslēgt suonu jūslu
+toggle_sidebar_notification.title=Toggle Sidebar (document contains outline/attachments)
+toggle_sidebar_label=Puorslēgt suonu jūslu
+document_outline.title=Show Document Outline (double-click to expand/collapse all items)
+document_outline_label=Dokumenta saturs
+attachments.title=Show Attachments
+attachments_label=Attachments
+thumbs.title=Paruodeit seiktÄlus
+thumbs_label=SeiktÄli
+findbar.title=Mekleit dokumentÄ
+findbar_label=Mekleit
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Lopa {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Lopys {{page}} seiktÄls
+
+# Find panel button title and messages
+find_input.title=Mekleit
+find_input.placeholder=Mekleit dokumentÄ…
+find_previous.title=Atrast īprīkšejū
+find_previous_label=ĪprÄ«kÅ¡ejÄ
+find_next.title=Atrast nuokamū
+find_next_label=Nuokomuo
+find_highlight=Īkruosuot vysys
+find_match_case_label=Lelū, mozū burtu jiuteigs
+find_reached_top=Sasnīgts dokumenta suokums, turpynojom nu beigom
+find_reached_bottom=Sasnīgtys dokumenta beigys, turpynojom nu suokuma
+find_not_found=FrÄze nav atrosta
+
+# Error panel labels
+error_more_info=Vairuok informacejis
+error_less_info=mozuok informacejis
+error_close=Close
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Ziņuojums: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Steks: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Ryndeņa: {{line}}
+rendering_error=AttÄlojÅ«t lopu rodÄs klaida
+
+# Predefined zoom values
+page_scale_width=Lopys plotumÄ
+page_scale_fit=Ītylpynūt lopu
+page_scale_auto=Automatiskais izmÄrs
+page_scale_actual=PatÄ«sais izmÄrs
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Klaida
+loading_error=Īluodejūt PDF nūtyka klaida.
+invalid_file_error=Nadereigs voi būjuots PDF fails.
+missing_file_error=PDF fails nav atrosts.
+unexpected_response_error=Unexpected server response.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Īvodit paroli, kab attaiseitu PDF failu.
+password_invalid=Napareiza parole, raugit vēļreiz.
+password_ok=Labi
+password_cancel=Atceļt
+
+printing_not_supported=Uzmaneibu: DrukuoÅ¡ona nu itei puorlÅ«ka dorbojÄs tikai daleji.
+printing_not_ready=Uzmaneibu: PDF nav pilneibÄ Ä«luodeits drukuoÅ¡onai.
+web_fonts_disabled=Å Ä·Ärsteikla fonti nav aktivizÄti: Navar Ä«gult PDF fontus.
diff --git a/thirdparty/pdfjs/web/locale/lv/viewer.properties b/thirdparty/pdfjs/web/locale/lv/viewer.properties
new file mode 100644
index 0000000..b6d6ad3
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/lv/viewer.properties
@@ -0,0 +1,241 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=IepriekšējÄ lapa
+previous_label=IepriekšējÄ
+next.title=NÄkamÄ lapa
+next_label=NÄkamÄ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Lapa
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=no {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} no {{pagesCount}})
+
+zoom_out.title=AttÄlinÄt\u0020
+zoom_out_label=AttÄlinÄt
+zoom_in.title=PietuvinÄt
+zoom_in_label=PietuvinÄt
+zoom.title=PalielinÄjums
+presentation_mode.title=PÄrslÄ“gties uz PrezentÄcijas režīmu
+presentation_mode_label=PrezentÄcijas režīms
+open_file.title=Atvērt failu
+open_file_label=Atvērt
+print.title=DrukÄÅ¡ana
+print_label=DrukÄt
+download.title=LejupielÄde
+download_label=LejupielÄdÄ“t
+bookmark.title=PaÅ¡reizÄ“jais skats (kopÄ“t vai atvÄ“rt jaunÄ logÄ)
+bookmark_label=Pašreizējais skats
+
+# Secondary toolbar and context menu
+tools.title=Rīki
+tools_label=Rīki
+first_page.title=Iet uz pirmo lapu
+first_page.label=Iet uz pirmo lapu
+first_page_label=Iet uz pirmo lapu
+last_page.title=Iet uz pēdējo lapu
+last_page.label=Iet uz pēdējo lapu
+last_page_label=Iet uz pēdējo lapu
+page_rotate_cw.title=Pagriezt pa pulksteni
+page_rotate_cw.label=Pagriezt pa pulksteni
+page_rotate_cw_label=Pagriezt pa pulksteni
+page_rotate_ccw.title=Pagriezt pret pulksteni
+page_rotate_ccw.label=Pagriezt pret pulksteni
+page_rotate_ccw_label=Pagriezt pret pulksteni
+
+cursor_text_select_tool.title=Aktivizēt teksta izvēles rīku
+cursor_text_select_tool_label=Teksta izvēles rīks
+cursor_hand_tool.title=Aktivēt rokas rīku
+cursor_hand_tool_label=Rokas rīks
+
+scroll_vertical.title=Izmantot vertikÄlo ritinÄÅ¡anu
+scroll_vertical_label=VertikÄlÄ ritinÄÅ¡ana
+scroll_horizontal.title=Izmantot horizontÄlo ritinÄÅ¡anu
+scroll_horizontal_label=HorizontÄlÄ ritinÄÅ¡ana
+scroll_wrapped.title=Izmantot apkļauto ritinÄÅ¡anu
+scroll_wrapped_label=ApkļautÄ ritinÄÅ¡ana
+
+spread_none.title=Nepievienoties lapu izpletumiem
+spread_none_label=Neizmantot izpletumus
+spread_odd.title=Izmantot lapu izpletumus sÄkot ar nepÄra numuru lapÄm
+spread_odd_label=NepÄra izpletumi
+spread_even.title=Izmantot lapu izpletumus sÄkot ar pÄra numuru lapÄm
+spread_even_label=PÄra izpletumi
+
+# Document properties dialog box
+document_properties.title=Dokumenta iestatījumi…
+document_properties_label=Dokumenta iestatījumi…
+document_properties_file_name=Faila nosaukums:
+document_properties_file_size=Faila izmērs:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} biti)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} biti)
+document_properties_title=Nosaukums:
+document_properties_author=Autors:
+document_properties_subject=Tēma:
+document_properties_keywords=AtslÄ“gas vÄrdi:
+document_properties_creation_date=Izveides datums:
+document_properties_modification_date=LAbošanas datums:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=RadÄ«tÄjs:
+document_properties_producer=PDF producents:
+document_properties_version=PDF versija:
+document_properties_page_count=Lapu skaits:
+document_properties_page_size=Papīra izmērs:
+document_properties_page_size_unit_inches=collas
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portretorientÄcija
+document_properties_page_size_orientation_landscape=ainavorientÄcija
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Vēstule
+document_properties_page_size_name_legal=Juridiskie teksti
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Ä€trÄ tÄ«mekļa skats:
+document_properties_linearized_yes=JÄ
+document_properties_linearized_no=NÄ“
+document_properties_close=Aizvērt
+
+print_progress_message=Gatavo dokumentu drukÄÅ¡anai...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Atcelt
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=PÄrslÄ“gt sÄnu joslu
+toggle_sidebar_notification.title=PÄrslÄ“gt sÄnu joslu (dokumenta saturu un pielikumus)
+toggle_sidebar_label=PÄrslÄ“gt sÄnu joslu
+document_outline.title=RÄdÄ«t dokumenta struktÅ«ru (veiciet dubultklikšķi lai izvÄ“rstu/sakļautu visus vienumus)
+document_outline_label=Dokumenta saturs
+attachments.title=RÄdÄ«t pielikumus
+attachments_label=Pielikumi
+thumbs.title=ParÄdÄ«t sÄ«ktÄ“lus
+thumbs_label=Sīktēli
+findbar.title=MeklÄ“t dokumentÄ
+findbar_label=Meklēt
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Lapa {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Lapas {{page}} sīktēls
+
+# Find panel button title and messages
+find_input.title=Meklēt
+find_input.placeholder=Meklēt dokumentą
+find_previous.title=Atrast iepriekšējo
+find_previous_label=IepriekšējÄ
+find_next.title=Atrast nÄkamo
+find_next_label=NÄkamÄ
+find_highlight=IekrÄsot visas
+find_match_case_label=Lielo, mazo burtu jutīgs
+find_entire_word_label=Veselus vÄrdus
+find_reached_top=Sasniegts dokumenta sÄkums, turpinÄm no beigÄm
+find_reached_bottom=Sasniegtas dokumenta beigas, turpinÄm no sÄkuma
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} no {{total}} rezultÄta
+find_match_count[two]={{current}} no {{total}} rezultÄtiem
+find_match_count[few]={{current}} no {{total}} rezultÄtiem
+find_match_count[many]={{current}} no {{total}} rezultÄtiem
+find_match_count[other]={{current}} no {{total}} rezultÄtiem
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=VairÄk nekÄ {{limit}} rezultÄti
+find_match_count_limit[one]=VairÄk nekÄ {{limit}} rezultÄti
+find_match_count_limit[two]=VairÄk nekÄ {{limit}} rezultÄti
+find_match_count_limit[few]=VairÄk nekÄ {{limit}} rezultÄti
+find_match_count_limit[many]=VairÄk nekÄ {{limit}} rezultÄti
+find_match_count_limit[other]=VairÄk nekÄ {{limit}} rezultÄti
+find_not_found=FrÄze nav atrasta
+
+# Error panel labels
+error_more_info=VairÄk informÄcijas
+error_less_info=MAzÄk informÄcijas
+error_close=Close
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Ziņojums: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Steks: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rindiņa: {{line}}
+rendering_error=AttÄ“lojot lapu radÄs kļūda
+
+# Predefined zoom values
+page_scale_width=Lapas platumÄ
+page_scale_fit=Ietilpinot lapu
+page_scale_auto=AutomÄtiskais izmÄ“rs
+page_scale_actual=Patiesais izmērs
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Kļūda
+loading_error=IelÄdÄ“jot PDF notika kļūda.
+invalid_file_error=NederÄ«gs vai bojÄts PDF fails.
+missing_file_error=PDF fails nav atrasts.
+unexpected_response_error=Negaidīa servera atbilde.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} anotÄcija]
+password_label=Ievadiet paroli, lai atvērtu PDF failu.
+password_invalid=Nepareiza parole, mēģiniet vēlreiz.
+password_ok=Labi
+password_cancel=Atcelt
+
+printing_not_supported=UzmanÄ«bu: DrukÄÅ¡ana no šī pÄrlÅ«ka darbojas tikai daļēji.
+printing_not_ready=UzmanÄ«bu: PDF nav pilnÄ«bÄ ielÄdÄ“ts drukÄÅ¡anai.
+web_fonts_disabled=Tīmekļa fonti nav aktivizēti: Nevar iegult PDF fontus.
diff --git a/thirdparty/pdfjs/web/locale/meh/viewer.properties b/thirdparty/pdfjs/web/locale/meh/viewer.properties
new file mode 100644
index 0000000..7a1bf04
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/meh/viewer.properties
@@ -0,0 +1,111 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página yata
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom.title=Nasa´a ka´nu/Nasa´a luli
+open_file_label=SÃne
+
+# Secondary toolbar and context menu
+
+
+
+
+# Document properties dialog box
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=Kuvi
+document_properties_close=Nakasɨ
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Nkuvi-ka
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+findbar_label=Nánuku
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+
+# Find panel button title and messages
+find_input.title=Nánuku
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+
+# Error panel labels
+error_close=Nakasɨ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+
+# Predefined zoom values
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+password_cancel=Nkuvi-ka
+
diff --git a/thirdparty/pdfjs/web/locale/mk/viewer.properties b/thirdparty/pdfjs/web/locale/mk/viewer.properties
new file mode 100644
index 0000000..c1b091e
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/mk/viewer.properties
@@ -0,0 +1,144 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Претходна Ñтраница
+previous_label=Претходна
+next.title=Следна Ñтраница
+next_label=Следна
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom_out.title=Ðамалување
+zoom_out_label=Ðамали
+zoom_in.title=Зголемување
+zoom_in_label=Зголеми
+zoom.title=Променување на големина
+presentation_mode.title=Премини во презентациÑки режим
+presentation_mode_label=ПрезентациÑки режим
+open_file.title=Отворање датотека
+open_file_label=Отвори
+print.title=Печатење
+print_label=Печати
+download.title=Преземање
+download_label=Преземи
+bookmark.title=Овој преглед (копирај или отвори во нов прозорец)
+bookmark_label=Овој преглед
+
+# Secondary toolbar and context menu
+tools.title=Ðлатки
+first_page.label=Оди до првата Ñтраница
+last_page.label=Оди до поÑледната Ñтраница
+page_rotate_cw.label=Ротирај по Ñтрелките на чаÑовникот
+page_rotate_ccw.label=Ротирај Ñпротивно од Ñтрелките на чаÑовникот
+
+
+
+
+# Document properties dialog box
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_close=Откажи
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Вклучи Ñтранична лента
+toggle_sidebar_label=Вклучи Ñтранична лента
+thumbs.title=Прикажување на икони
+thumbs_label=Икони
+findbar.title=Ðајди во документот
+findbar_label=Ðајди
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Страница {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Икона од Ñтраница {{page}}
+
+# Find panel button title and messages
+find_previous.title=Ðајди ја предходната појава на фразата
+find_previous_label=Претходно
+find_next.title=Ðајди ја Ñледната појава на фразата
+find_next_label=Следно
+find_highlight=Означи ÑÑ
+find_match_case_label=Токму така
+find_reached_top=Барањето Ñтигна до почетокот на документот и почнува од крајот
+find_reached_bottom=Барањето Ñтигна до крајот на документот и почнува од почеток
+find_not_found=Фразата не е пронајдена
+
+# Error panel labels
+error_more_info=Повеќе информации
+error_less_info=Помалку информации
+error_close=Затвори
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Порака: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Датотека: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Линија: {{line}}
+rendering_error=ÐаÑтана грешка при прикажувањето на Ñтраницата.
+
+# Predefined zoom values
+page_scale_width=Ширина на Ñтраница
+page_scale_fit=Цела Ñтраница
+page_scale_auto=ÐвтоматÑка големина
+page_scale_actual=ВиÑтинÑка големина
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+
+# Loading indicator messages
+loading_error_indicator=Грешка
+loading_error=ÐаÑтана грешка при вчитувањето на PDF-от.
+invalid_file_error=Ðевалидна или корумпирана PDF датотека.
+missing_file_error=ÐедоÑтаÑува PDF документ.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+password_cancel=Откажи
+
+printing_not_supported=Предупредување: Печатењето не е целоÑно поддржано во овој прелиÑтувач.
+printing_not_ready=Предупредување: PDF документот не е целоÑно вчитан за печатење.
+web_fonts_disabled=Интернет фонтовите Ñе оневозможени: не може да Ñе кориÑтат вградените PDF фонтови.
diff --git a/thirdparty/pdfjs/web/locale/mr/viewer.properties b/thirdparty/pdfjs/web/locale/mr/viewer.properties
new file mode 100644
index 0000000..b33646f
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/mr/viewer.properties
@@ -0,0 +1,237 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=मागील पृषà¥à¤
+previous_label=मागील
+next.title=पà¥à¤¢à¥€à¤² पृषà¥à¤
+next_label=पà¥à¤¢à¥€à¤²
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=पृषà¥à¤
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}}पैकी
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pagesCount}} पैकी {{pageNumber}})
+
+zoom_out.title=छोटे करा
+zoom_out_label=छोटे करा
+zoom_in.title=मोठे करा
+zoom_in_label=मोठे करा
+zoom.title=लहान किंवा मोठे करा
+presentation_mode.title=पà¥à¤°à¤¸à¥à¤¤à¥à¤¤à¤¿à¤•रण मोडचा वापर करा
+presentation_mode_label=पà¥à¤°à¤¸à¥à¤¤à¥à¤¤à¤¿à¤•रण मोड
+open_file.title=फाइल उघडा
+open_file_label=उघडा
+print.title=छपाई करा
+print_label=छपाई करा
+download.title=डाउनलोड करा
+download_label=डाउनलोड करा
+bookmark.title=सधà¥à¤¯à¤¾à¤šà¥‡ अवलोकन (नवीन पटलात पà¥à¤°à¤¤ बनवा किंवा उघडा)
+bookmark_label=सधà¥à¤¯à¤¾à¤šà¥‡ अवलोकन
+
+# Secondary toolbar and context menu
+tools.title=साधने
+tools_label=साधने
+first_page.title=पहिलà¥à¤¯à¤¾ पृषà¥à¤ ावर जा
+first_page.label=पहिलà¥à¤¯à¤¾ पृषà¥à¤ ावर जा
+first_page_label=पहिलà¥à¤¯à¤¾ पृषà¥à¤ ावर जा
+last_page.title=शेवटचà¥à¤¯à¤¾ पृषà¥à¤ ावर जा
+last_page.label=शेवटचà¥à¤¯à¤¾ पृषà¥à¤ ावर जा
+last_page_label=शेवटचà¥à¤¯à¤¾ पृषà¥à¤ ावर जा
+page_rotate_cw.title=घडà¥à¤¯à¤¾à¤³à¤¾à¤šà¥à¤¯à¤¾ काटà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ दिशेने फिरवा
+page_rotate_cw.label=घडà¥à¤¯à¤¾à¤³à¤¾à¤šà¥à¤¯à¤¾ काटà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ दिशेने फिरवा
+page_rotate_cw_label=घडà¥à¤¯à¤¾à¤³à¤¾à¤šà¥à¤¯à¤¾ काटà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ दिशेने फिरवा
+page_rotate_ccw.title=घडà¥à¤¯à¤¾à¤³à¤¾à¤šà¥à¤¯à¤¾ काटà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ उलट दिशेने फिरवा
+page_rotate_ccw.label=घडà¥à¤¯à¤¾à¤³à¤¾à¤šà¥à¤¯à¤¾ काटà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ उलट दिशेने फिरवा
+page_rotate_ccw_label=घडà¥à¤¯à¤¾à¤³à¤¾à¤šà¥à¤¯à¤¾ काटà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ उलट दिशेने फिरवा
+
+cursor_text_select_tool.title=मजकूर निवड साधन कारà¥à¤¯à¤¾à¤¨à¥à¤µà¤¯à¥€à¤¤ करा
+cursor_text_select_tool_label=मजकूर निवड साधन
+cursor_hand_tool.title=हात साधन कारà¥à¤¯à¤¾à¤¨à¥à¤µà¤¿à¤¤ करा
+cursor_hand_tool_label=हसà¥à¤¤ साधन
+
+scroll_vertical.title=अनà¥à¤²à¤‚ब सà¥à¤•à¥à¤°à¥‹à¤²à¤¿à¤‚ग वापरा
+scroll_vertical_label=अनà¥à¤²à¤‚ब सà¥à¤•à¥à¤°à¥‹à¤²à¤¿à¤‚ग
+scroll_horizontal.title=कà¥à¤·à¥ˆà¤¤à¤¿à¤œ सà¥à¤•à¥à¤°à¥‹à¤²à¤¿à¤‚ग वापरा
+scroll_horizontal_label=कà¥à¤·à¥ˆà¤¤à¤¿à¤œ सà¥à¤•à¥à¤°à¥‹à¤²à¤¿à¤‚ग
+
+
+# Document properties dialog box
+document_properties.title=दसà¥à¤¤à¤à¤µà¤œ गà¥à¤£à¤§à¤°à¥à¤®â€¦
+document_properties_label=दसà¥à¤¤à¤à¤µà¤œ गà¥à¤£à¤§à¤°à¥à¤®â€¦
+document_properties_file_name=फाइलचे नाव:
+document_properties_file_size=फाइल आकार:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} बाइटà¥à¤¸)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} बाइटà¥à¤¸)
+document_properties_title=शिरà¥à¤·à¤•:
+document_properties_author=लेखक:
+document_properties_subject=विषय:
+document_properties_keywords=मà¥à¤–à¥à¤¯à¤¶à¤¬à¥à¤¦:
+document_properties_creation_date=निरà¥à¤®à¤¾à¤£ दिनांक:
+document_properties_modification_date=दà¥à¤°à¥‚सà¥à¤¤à¥€ दिनांक:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=निरà¥à¤®à¤¾à¤¤à¤¾:
+document_properties_producer=PDF निरà¥à¤®à¤¾à¤¤à¤¾:
+document_properties_version=PDF आवृतà¥à¤¤à¥€:
+document_properties_page_count=पृषà¥à¤ संखà¥à¤¯à¤¾:
+document_properties_page_size=पृषà¥à¤ आकार:
+document_properties_page_size_unit_inches=इंच
+document_properties_page_size_unit_millimeters=मीमी
+document_properties_page_size_orientation_portrait=उà¤à¥€ मांडणी
+document_properties_page_size_orientation_landscape=आडवे
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=जलद वेब दृषà¥à¤¯:
+document_properties_linearized_yes=हो
+document_properties_linearized_no=नाही
+document_properties_close=बंद करा
+
+print_progress_message=छपाई करीता पृषà¥à¤ तयार करीत आहे…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=रदà¥à¤¦ करा
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=बाजूचीपटà¥à¤Ÿà¥€ टॉगल करा
+toggle_sidebar_notification.title=बाजूची पटà¥à¤Ÿà¥€ टॉगल करा (दसà¥à¤¤à¤à¤µà¤œà¤¾à¤®à¤§à¥à¤¯à¥‡ रà¥à¤ªà¤°à¥‡à¤·à¤¾/जोडणà¥à¤¯à¤¾ आहेत)
+toggle_sidebar_label=बाजूचीपटà¥à¤Ÿà¥€ टॉगल करा
+document_outline.title=दसà¥à¤¤à¤à¤µà¤œ बाहà¥à¤¯à¤°à¥‡à¤–ा दरà¥à¤¶à¤µà¤¾ (विसà¥à¤¤à¥ƒà¤¤ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ ी दोनवेळा कà¥à¤²à¤¿à¤• करा /सरà¥à¤µ घटक दाखवा)
+document_outline_label=दसà¥à¤¤à¤à¤µà¤œ रूपरेषा
+attachments.title=जोडपतà¥à¤° दाखवा
+attachments_label=जोडपतà¥à¤°
+thumbs.title=थंबनेलà¥à¤¸à¥ दाखवा
+thumbs_label=थंबनेलà¥à¤¸à¥
+findbar.title=दसà¥à¤¤à¤à¤µà¤œà¤¾à¤¤ शोधा
+findbar_label=शोधा
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=पृषà¥à¤ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=पृषà¥à¤ ाचे थंबनेल {{page}}
+
+# Find panel button title and messages
+find_input.title=शोधा
+find_input.placeholder=दसà¥à¤¤à¤à¤µà¤œà¤¾à¤¤ शोधा…
+find_previous.title=वाकपà¥à¤°à¤¯à¥‹à¤—ची मागील घटना शोधा
+find_previous_label=मागील
+find_next.title=वाकपà¥à¤°à¤¯à¥‹à¤—ची पà¥à¤¢à¥€à¤² घटना शोधा
+find_next_label=पà¥à¤¢à¥€à¤²
+find_highlight=सरà¥à¤µ ठळक करा
+find_match_case_label=आकार जà¥à¤³à¤µà¤¾
+find_entire_word_label=संपूरà¥à¤£ शबà¥à¤¦
+find_reached_top=दसà¥à¤¤à¤à¤µà¤œà¤¾à¤šà¥à¤¯à¤¾ शीरà¥à¤·à¤•ास पोहचले, तळपासून पà¥à¤¢à¥‡
+find_reached_bottom=दसà¥à¤¤à¤à¤µà¤œà¤¾à¤šà¥à¤¯à¤¾ तळाला पोहचले, शीरà¥à¤·à¤•ापासून पà¥à¤¢à¥‡
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} पैकी {{current}} सà¥à¤¸à¤‚गत
+find_match_count[two]={{total}} पैकी {{current}} सà¥à¤¸à¤‚गत
+find_match_count[few]={{total}} पैकी {{current}} सà¥à¤¸à¤‚गत
+find_match_count[many]={{total}} पैकी {{current}} सà¥à¤¸à¤‚गत
+find_match_count[other]={{total}} पैकी {{current}} सà¥à¤¸à¤‚गत
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} पेकà¥à¤·à¤¾ अधिक जà¥à¤³à¤£à¥à¤¯à¤¾
+find_match_count_limit[one]={{limit}} पेकà¥à¤·à¤¾ अधिक जà¥à¤³à¤£à¥à¤¯à¤¾
+find_match_count_limit[two]={{limit}} पेकà¥à¤·à¤¾ अधिक जà¥à¤³à¤£à¥à¤¯à¤¾
+find_match_count_limit[few]={{limit}} पेकà¥à¤·à¤¾ अधिक जà¥à¤³à¤£à¥à¤¯à¤¾
+find_match_count_limit[many]={{limit}} पेकà¥à¤·à¤¾ अधिक जà¥à¤³à¤£à¥à¤¯à¤¾
+find_match_count_limit[other]={{limit}} पेकà¥à¤·à¤¾ अधिक जà¥à¤³à¤£à¥à¤¯à¤¾
+find_not_found=वाकपà¥à¤°à¤¯à¥‹à¤— आढळले नाही
+
+# Error panel labels
+error_more_info=आणखी माहिती
+error_less_info=कमी माहिती
+error_close=बंद करा
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=संदेश: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=सà¥à¤Ÿà¥…क: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=फाइल: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=रेष: {{line}}
+rendering_error=पृषà¥à¤ दाखवतेवेळी तà¥à¤°à¥à¤Ÿà¥€ आढळली.
+
+# Predefined zoom values
+page_scale_width=पृषà¥à¤ ाची रूंदी
+page_scale_fit=पृषà¥à¤ बसवा
+page_scale_auto=सà¥à¤µà¤¯à¤‚ लाहन किंवा मोठे करणे
+page_scale_actual=पà¥à¤°à¤¤à¥à¤¯à¤•à¥à¤· आकार
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=तà¥à¤°à¥à¤Ÿà¥€
+loading_error=PDF लोड करतेवेळी तà¥à¤°à¥à¤Ÿà¥€ आढळली.
+invalid_file_error=अवैध किंवा दोषीत PDF फाइल.
+missing_file_error=न आढळणारी PDF फाइल.
+unexpected_response_error=अनपेकà¥à¤·à¤¿à¤¤ सरà¥à¤µà¥à¤¹à¤° पà¥à¤°à¤¤à¤¿à¤¸à¤¾à¤¦.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} टिपणà¥à¤£à¥€]
+password_label=ही PDF फाइल उघडणà¥à¤¯à¤¾à¤•रिता पासवरà¥à¤¡ दà¥à¤¯à¤¾.
+password_invalid=अवैध पासवरà¥à¤¡. कृपया पà¥à¤¨à¥à¤¹à¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ करा.
+password_ok=ठीक आहे
+password_cancel=रदà¥à¤¦ करा
+
+printing_not_supported=सावधानता: या बà¥à¤°à¤¾à¤‰à¤à¤°à¤¤à¤°à¥à¤«à¥‡ छपाइ पूरà¥à¤£à¤ªà¤£à¥‡ समरà¥à¤¥à¥€à¤¤ नाही.
+printing_not_ready=सावधानता: छपाईकरिता PDF पूरà¥à¤£à¤¤à¤¯à¤¾ लोड à¤à¤¾à¤²à¥‡ नाही.
+web_fonts_disabled=वेब टंक असमरà¥à¤¥à¥€à¤¤ आहेत: à¤à¤®à¥à¤¬à¥‡à¤¡à¥‡à¤¡ PDF टंक वापर अशकà¥à¤¯.
diff --git a/thirdparty/pdfjs/web/locale/ms/viewer.properties b/thirdparty/pdfjs/web/locale/ms/viewer.properties
new file mode 100644
index 0000000..61f1553
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/ms/viewer.properties
@@ -0,0 +1,241 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Halaman Dahulu
+previous_label=Dahulu
+next.title=Halaman Berikut
+next_label=Berikut
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Halaman
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=daripada {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} daripada {{pagesCount}})
+
+zoom_out.title=Zum Keluar
+zoom_out_label=Zum Keluar
+zoom_in.title=Zum Masuk
+zoom_in_label=Zum Masuk
+zoom.title=Zum
+presentation_mode.title=Tukar ke Mod Persembahan
+presentation_mode_label=Mod Persembahan
+open_file.title=Buka Fail
+open_file_label=Buka
+print.title=Cetak
+print_label=Cetak
+download.title=Muat turun
+download_label=Muat turun
+bookmark.title=Paparan semasa (salin atau buka dalam tetingkap baru)
+bookmark_label=Paparan Semasa
+
+# Secondary toolbar and context menu
+tools.title=Alatan
+tools_label=Alatan
+first_page.title=Pergi ke Halaman Pertama
+first_page.label=Pergi ke Halaman Pertama
+first_page_label=Pergi ke Halaman Pertama
+last_page.title=Pergi ke Halaman Terakhir
+last_page.label=Pergi ke Halaman Terakhir
+last_page_label=Pergi ke Halaman Terakhir
+page_rotate_cw.title=Berputar ikut arah Jam
+page_rotate_cw.label=Berputar ikut arah Jam
+page_rotate_cw_label=Berputar ikut arah Jam
+page_rotate_ccw.title=Pusing berlawan arah jam
+page_rotate_ccw.label=Pusing berlawan arah jam
+page_rotate_ccw_label=Pusing berlawan arah jam
+
+cursor_text_select_tool.title=Dayakan Alatan Pilihan Teks
+cursor_text_select_tool_label=Alatan Pilihan Teks
+cursor_hand_tool.title=Dayakan Alatan Tangan
+cursor_hand_tool_label=Alatan Tangan
+
+scroll_vertical.title=Guna Skrol Menegak
+scroll_vertical_label=Skrol Menegak
+scroll_horizontal.title=Guna Skrol Mengufuk
+scroll_horizontal_label=Skrol Mengufuk
+scroll_wrapped.title=Guna Skrol Berbalut
+scroll_wrapped_label=Skrol Berbalut
+
+spread_none.title=Jangan hubungkan hamparan halaman
+spread_none_label=Tanpa Hamparan
+spread_odd.title=Hubungkan hamparan halaman dengan halaman nombor ganjil
+spread_odd_label=Hamparan Ganjil
+spread_even.title=Hubungkan hamparan halaman dengan halaman nombor genap
+spread_even_label=Hamparan Seimbang
+
+# Document properties dialog box
+document_properties.title=Sifat Dokumen…
+document_properties_label=Sifat Dokumen…
+document_properties_file_name=Nama fail:
+document_properties_file_size=Saiz fail:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bait)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bait)
+document_properties_title=Tajuk:
+document_properties_author=Pengarang:
+document_properties_subject=Subjek:
+document_properties_keywords=Kata kunci:
+document_properties_creation_date=Masa Dicipta:
+document_properties_modification_date=Tarikh Ubahsuai:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Pencipta:
+document_properties_producer=Pengeluar PDF:
+document_properties_version=Versi PDF:
+document_properties_page_count=Kiraan Laman:
+document_properties_page_size=Saiz Halaman:
+document_properties_page_size_unit_inches=dalam
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=potret
+document_properties_page_size_orientation_landscape=landskap
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Paparan Web Pantas:
+document_properties_linearized_yes=Ya
+document_properties_linearized_no=Tidak
+document_properties_close=Tutup
+
+print_progress_message=Menyediakan dokumen untuk dicetak…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Batal
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Togol Bar Sisi
+toggle_sidebar_notification.title=Togol Sidebar (dokumen mengandungi rangka/attachments)
+toggle_sidebar_label=Togol Bar Sisi
+document_outline.title=Papar Rangka Dokumen (klik-dua-kali untuk kembangkan/kolaps semua item)
+document_outline_label=Rangka Dokumen
+attachments.title=Papar Lampiran
+attachments_label=Lampiran
+thumbs.title=Papar Thumbnails
+thumbs_label=Imej kecil
+findbar.title=Cari didalam Dokumen
+findbar_label=Cari
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Halaman {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Halaman Imej kecil {{page}}
+
+# Find panel button title and messages
+find_input.title=Cari
+find_input.placeholder=Cari dalam dokumen…
+find_previous.title=Cari teks frasa berkenaan yang terdahulu
+find_previous_label=Dahulu
+find_next.title=Cari teks frasa berkenaan yang berikut
+find_next_label=Berikut
+find_highlight=Serlahkan semua
+find_match_case_label=Huruf sepadan
+find_entire_word_label=Seluruh perkataan
+find_reached_top=Mencapai teratas daripada dokumen, sambungan daripada bawah
+find_reached_bottom=Mencapai terakhir daripada dokumen, sambungan daripada atas
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} daripada {{total}} padanan
+find_match_count[two]={{current}} daripada {{total}} padanan
+find_match_count[few]={{current}} daripada {{total}} padanan
+find_match_count[many]={{current}} daripada {{total}} padanan
+find_match_count[other]={{current}} daripada {{total}} padanan
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Lebih daripada {{limit}} padanan
+find_match_count_limit[one]=Lebih daripada {{limit}} padanan
+find_match_count_limit[two]=Lebih daripada {{limit}} padanan
+find_match_count_limit[few]=Lebih daripada {{limit}} padanan
+find_match_count_limit[many]=Lebih daripada {{limit}} padanan
+find_match_count_limit[other]=Lebih daripada {{limit}} padanan
+find_not_found=Frasa tidak ditemui
+
+# Error panel labels
+error_more_info=Maklumat Lanjut
+error_less_info=Kurang Informasi
+error_close=Tutup
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mesej: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Timbun: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fail: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Garis: {{line}}
+rendering_error=Ralat berlaku ketika memberikan halaman.
+
+# Predefined zoom values
+page_scale_width=Lebar Halaman
+page_scale_fit=Muat Halaman
+page_scale_auto=Zoom Automatik
+page_scale_actual=Saiz Sebenar
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Ralat
+loading_error=Masalah berlaku semasa menuatkan sebuah PDF.
+invalid_file_error=Tidak sah atau fail PDF rosak.
+missing_file_error=Fail PDF Hilang.
+unexpected_response_error=Respon pelayan yang tidak dijangka.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Anotasi]
+password_label=Masukan kata kunci untuk membuka fail PDF ini.
+password_invalid=Kata laluan salah. Cuba lagi.
+password_ok=OK
+password_cancel=Batal
+
+printing_not_supported=Amaran: Cetakan ini tidak sepenuhnya disokong oleh pelayar ini.
+printing_not_ready=Amaran: PDF tidak sepenuhnya dimuatkan untuk dicetak.
+web_fonts_disabled=Fon web dinyahdayakan: tidak dapat menggunakan fon terbenam PDF.
diff --git a/thirdparty/pdfjs/web/locale/my/viewer.properties b/thirdparty/pdfjs/web/locale/my/viewer.properties
new file mode 100644
index 0000000..3e6f2c3
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/my/viewer.properties
@@ -0,0 +1,197 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=အရင် စာမျက်နှာ
+previous_label=အရင်နေရာ
+next.title=ရှေ့ စာမျက်နှာ
+next_label=နောက်á€á€á€¯
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=စာမျက်နှာ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} á
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pagesCount}} á {{pageNumber}})
+
+zoom_out.title=á€á€»á€¯á€¶á€·á€•ါ
+zoom_out_label=á€á€»á€¯á€¶á€·á€•ါ
+zoom_in.title=á€á€»á€²á€·á€•ါ
+zoom_in_label=á€á€»á€²á€·á€•ါ
+zoom.title=á€á€»á€¯á€¶á€·/á€á€»á€²á€·á€•ါ
+presentation_mode.title=ဆွေးနွေးá€á€„်ပြစနစ်သá€á€¯á€· ကူးပြောင်းပါ
+presentation_mode_label=ဆွေးနွေးá€á€„်ပြစနစ်
+open_file.title=ဖá€á€¯á€„်အားဖွင့်ပါá‹
+open_file_label=ဖွင့်ပါ
+print.title=ပုံနှá€á€¯á€•်ပါ
+print_label=ပုံနှá€á€¯á€•်ပါ
+download.title=ကူးဆွဲ
+download_label=ကူးဆွဲ
+bookmark.title=လက်ရှဠမြင်ကွင်း (á€á€„်းဒá€á€¯á€¸á€¡á€žá€…်မှာ ကူးပါ သá€á€¯á€·á€™á€Ÿá€¯á€á€º ဖွင့်ပါ)
+bookmark_label=လက်ရှဠမြင်ကွင်း
+
+# Secondary toolbar and context menu
+tools.title=ကá€á€›á€á€šá€¬á€™á€»á€¬á€¸
+tools_label=ကá€á€›á€á€šá€¬á€™á€»á€¬á€¸
+first_page.title=ပထမ စာမျက်နှာသá€á€¯á€·
+first_page.label=ပထမ စာမျက်နှာသá€á€¯á€·
+first_page_label=ပထမ စာမျက်နှာသá€á€¯á€·
+last_page.title=နောက်ဆုံး စာမျက်နှာသá€á€¯á€·
+last_page.label=နောက်ဆုံး စာမျက်နှာသá€á€¯á€·
+last_page_label=နောက်ဆုံး စာမျက်နှာသá€á€¯á€·
+page_rotate_cw.title=နာရီလက်á€á€¶ အá€á€á€¯á€„်း
+page_rotate_cw.label=နာရီလက်á€á€¶ အá€á€á€¯á€„်း
+page_rotate_cw_label=နာရီလက်á€á€¶ အá€á€á€¯á€„်း
+page_rotate_ccw.title=နာရီလက်á€á€¶ ပြောင်းပြန်
+page_rotate_ccw.label=နာရီလက်á€á€¶ ပြောင်းပြန်
+page_rotate_ccw_label=နာရီလက်á€á€¶ ပြောင်းပြန်
+
+
+
+
+# Document properties dialog box
+document_properties.title=မှá€á€ºá€á€™á€ºá€¸á€™á€¾á€á€ºá€›á€¬ ဂုá€á€ºá€žá€á€¹á€á€á€™á€»á€¬á€¸
+document_properties_label=မှá€á€ºá€á€™á€ºá€¸á€™á€¾á€á€ºá€›á€¬ ဂုá€á€ºá€žá€á€¹á€á€á€™á€»á€¬á€¸
+document_properties_file_name=ဖá€á€¯á€„် :
+document_properties_file_size=ဖá€á€¯á€„်ဆá€á€¯á€’် :
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} ကီလá€á€¯á€˜á€á€¯á€á€º ({{size_b}}ဘá€á€¯á€á€º)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=á€á€±á€«á€„်းစဉ်‌ -
+document_properties_author=ရေးသားသူ:
+document_properties_subject=အကြောင်းအရာ:\u0020
+document_properties_keywords=သော့á€á€»á€€á€º စာလုံး:
+document_properties_creation_date=ထုá€á€ºá€œá€¯á€•်ရက်စွဲ:
+document_properties_modification_date=ပြင်ဆင်ရက်စွဲ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=ဖန်á€á€®á€¸á€žá€°:
+document_properties_producer=PDF ထုá€á€ºá€œá€¯á€•်သူ:
+document_properties_version=PDF ဗားရှင်း:
+document_properties_page_count=စာမျက်နှာအရေအá€á€½á€€á€º:
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_close=ပá€á€á€º
+
+print_progress_message=Preparing document for printing…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ပယ်​ဖျက်ပါ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=ဘေးá€á€”်းဖွင့်ပá€á€á€º
+toggle_sidebar_notification.title=ဘေးဘားá€á€”်းကá€á€¯ အဖွင့်/အပá€á€á€º လုပ်ရန် (စာá€á€™á€ºá€¸á€á€½á€„် outline/attachments ပါá€á€„်နá€á€¯á€„်သည်)
+toggle_sidebar_label=ဖွင့်ပá€á€á€º ဆလá€á€¯á€€á€ºá€’ါ
+document_outline.title=စာá€á€™á€ºá€¸á€¡á€€á€»á€‰á€ºá€¸á€á€»á€¯á€•်ကá€á€¯ ပြပါ (စာရင်းအားလုံးကá€á€¯ á€á€»á€¯á€¶á€·/á€á€»á€²á€·á€›á€”် ကလစ်နှစ်á€á€»á€€á€ºá€”ှá€á€•်ပါ)
+document_outline_label=စာá€á€™á€ºá€¸á€¡á€€á€»á€‰á€ºá€¸á€á€»á€¯á€•်
+attachments.title=á€á€½á€²á€á€»á€€á€ºá€™á€»á€¬á€¸ ပြပါ
+attachments_label=á€á€½á€²á€‘ားá€á€»á€€á€ºá€™á€»á€¬á€¸
+thumbs.title=ပုံရá€á€•်ငယ်များကá€á€¯ ပြပါ
+thumbs_label=ပုံရá€á€•်ငယ်များ
+findbar.title=Find in Document
+findbar_label=ရှာဖွေပါ
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=စာမျက်နှာ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=စာမျက်နှာရဲ့ ပုံရá€á€•်ငယ် {{page}}
+
+# Find panel button title and messages
+find_input.title=ရှာဖွေပါ
+find_input.placeholder=စာá€á€™á€ºá€¸á€‘ဲá€á€½á€„် ရှာဖွေရန်…
+find_previous.title=စကားစုရဲ့ အရင် ​ဖြစ်ပွားမှုကá€á€¯ ရှာဖွေပါ
+find_previous_label=နောက်သá€á€¯á€·
+find_next.title=စကားစုရဲ့ နောက်ထပ် ​ဖြစ်ပွားမှုကá€á€¯ ရှာဖွေပါ
+find_next_label=ရှေ့သá€á€¯á€·
+find_highlight=အားလုံးကá€á€¯ မျဉ်းသားပါ
+find_match_case_label=စာလုံး á€á€á€¯á€€á€ºá€†á€á€¯á€„်ပါ
+find_reached_top=စာမျက်နှာထá€á€•် ရောက်နေပြီአအဆုံးကနေ ပြန်စပါ
+find_reached_bottom=စာမျက်နှာအဆုံး ရောက်နေပြီአထá€á€•်ကနေ ပြန်စပါ
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_not_found=စကားစု မá€á€½á€±á€·á€›á€˜á€°á€¸
+
+# Error panel labels
+error_more_info=နောက်ထပ်အá€á€»á€€á€ºá€¡á€œá€€á€ºá€™á€»á€¬á€¸
+error_less_info=အနည်းငယ်မျှသော သá€á€„်းအá€á€»á€€á€ºá€¡á€œá€€á€º
+error_close=ပá€á€á€º
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=မက်ဆေ့ - {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=အထပ် - {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ဖá€á€¯á€„် {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=လá€á€¯á€„်း - {{line}}
+rendering_error=စာမျက်နှာကá€á€¯ ပုံဖော်နေá€á€»á€á€”်မှာ အမှားá€á€…်á€á€¯á€á€½á€±á€·á€›á€•ါá€á€šá€ºá‹
+
+# Predefined zoom values
+page_scale_width=စာမျက်နှာ အကျယ်
+page_scale_fit=စာမျက်နှာ ကွက်á€á€
+page_scale_auto=အလá€á€¯á€¡á€œá€»á€±á€¬á€€á€º á€á€»á€¯á€¶á€·á€á€»á€²á€·
+page_scale_actual=အမှန်á€á€€á€šá€ºá€›á€¾á€á€á€²á€· အရွယ်
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=အမှား
+loading_error=PDF ဖá€á€¯á€„် ကá€á€¯á€†á€½á€²á€á€„်နေá€á€»á€á€”်မှာ အမှားá€á€…်á€á€¯á€á€½á€±á€·á€›á€•ါá€á€šá€ºá‹
+invalid_file_error=မရသော သá€á€¯á€· ပျက်နေသော PDF ဖá€á€¯á€„်
+missing_file_error=PDF ပျောက်ဆုံး
+unexpected_response_error=မမျှော်လင့်ထားသော ဆာဗာမှ ပြန်ကြားá€á€»á€€á€º
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} အဓá€á€•္ပာယ်ဖွင့်ဆá€á€¯á€á€»á€€á€º]
+password_label=ယá€á€¯ PDF ကá€á€¯ ဖွင့်ရန် စကားá€á€¾á€€á€ºá€€á€á€¯ ရá€á€¯á€€á€ºá€•ါá‹
+password_invalid=စာá€á€¾á€€á€º မှားသည်ዠထပ်ကြá€á€¯á€¸á€…ားကြည့်ပါá‹
+password_ok=OK
+password_cancel=ပယ်​ဖျက်ပါ
+
+printing_not_supported=သá€á€á€•ေးá€á€»á€€á€ºáŠá€•ရင့်ထုá€á€ºá€á€¼á€„်းကá€á€¯á€¤á€˜á€šá€±á€¬á€€á€ºá€†á€¬á€žá€Šá€º ပြည့်á€á€…ွာထောက်ပံ့မထားပါ á‹
+printing_not_ready=သá€á€á€•ေးá€á€»á€€á€º: ယá€á€¯ PDF ဖá€á€¯á€„်သည် ပုံနှá€á€•်ရန် မပြည့်စုံပါ
+web_fonts_disabled=Web fonts are disabled: unable to use embedded PDF fonts.
diff --git a/thirdparty/pdfjs/web/locale/nb-NO/viewer.properties b/thirdparty/pdfjs/web/locale/nb-NO/viewer.properties
new file mode 100644
index 0000000..1d39aaa
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/nb-NO/viewer.properties
@@ -0,0 +1,253 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Forrige side
+previous_label=Forrige
+next.title=Neste side
+next_label=Neste
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Side
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=av {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} av {{pagesCount}})
+
+zoom_out.title=Zoom ut
+zoom_out_label=Zoom ut
+zoom_in.title=Zoom inn
+zoom_in_label=Zoom inn
+zoom.title=Zoom
+presentation_mode.title=Bytt til presentasjonsmodus
+presentation_mode_label=Presentasjonsmodus
+open_file.title=Ã…pne fil
+open_file_label=Ã…pne
+print.title=Skriv ut
+print_label=Skriv ut
+download.title=Last ned
+download_label=Last ned
+bookmark.title=Nåværende visning (kopier eller åpne i et nytt vindu)
+bookmark_label=Nåværende visning
+
+# Secondary toolbar and context menu
+tools.title=Verktøy
+tools_label=Verktøy
+first_page.title=Gå til første side
+first_page.label=Gå til første side
+first_page_label=Gå til første side
+last_page.title=GÃ¥ til siste side
+last_page.label=GÃ¥ til siste side
+last_page_label=GÃ¥ til siste side
+page_rotate_cw.title=Roter med klokken
+page_rotate_cw.label=Roter med klokken
+page_rotate_cw_label=Roter med klokken
+page_rotate_ccw.title=Roter mot klokken
+page_rotate_ccw.label=Roter mot klokken
+page_rotate_ccw_label=Roter mot klokken
+
+cursor_text_select_tool.title=Aktiver tekstmarkeringsverktøy
+cursor_text_select_tool_label=Tekstmarkeringsverktøy
+cursor_hand_tool.title=Aktiver handverktøy
+cursor_hand_tool_label=Handverktøy
+
+scroll_vertical.title=Bruk vertikal rulling
+scroll_vertical_label=Vertikal rulling
+scroll_horizontal.title=Bruk horisontal rulling
+scroll_horizontal_label=Horisontal rulling
+scroll_wrapped.title=Bruk flersiderulling
+scroll_wrapped_label=Flersiderulling
+
+spread_none.title=Vis enkeltsider
+spread_none_label=Enkeltsider
+spread_odd.title=Vis oppslag med ulike sidenumre til venstre
+spread_odd_label=Oppslag med forside
+spread_even.title=Vis oppslag med like sidenumre til venstre
+spread_even_label=Oppslag uten forside
+
+# Document properties dialog box
+document_properties.title=Dokumentegenskaper …
+document_properties_label=Dokumentegenskaper …
+document_properties_file_name=Filnavn:
+document_properties_file_size=Filstørrelse:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Dokumentegenskaper …
+document_properties_author=Forfatter:
+document_properties_subject=Emne:
+document_properties_keywords=Nøkkelord:
+document_properties_creation_date=Opprettet dato:
+document_properties_modification_date=Endret dato:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Opprettet av:
+document_properties_producer=PDF-verktøy:
+document_properties_version=PDF-versjon:
+document_properties_page_count=Sideantall:
+document_properties_page_size=Sidestørrelse:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=stående
+document_properties_page_size_orientation_landscape=liggende
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Hurtig nettvisning:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nei
+document_properties_close=Lukk
+
+print_progress_message=Forbereder dokument for utskrift …
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Avbryt
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Slå av/på sidestolpe
+toggle_sidebar_notification.title=Vis/gjem sidestolpe (dokumentet inneholder oversikt/vedlegg)
+toggle_sidebar_notification2.title=Vis/gjem sidestolpe (dokumentet inneholder oversikt/vedlegg/lag)
+toggle_sidebar_label=Slå av/på sidestolpe
+document_outline.title=Vis dokumentdisposisjonen (dobbeltklikk for å utvide/skjule alle elementer)
+document_outline_label=Dokumentdisposisjon
+attachments.title=Vis vedlegg
+attachments_label=Vedlegg
+layers.title=Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand)
+layers_label=Lag
+thumbs.title=Vis miniatyrbilde
+thumbs_label=Miniatyrbilde
+current_outline_item.title=Finn gjeldende disposisjonselement
+current_outline_item_label=Gjeldende disposisjonselement
+findbar.title=Finn i dokumentet
+findbar_label=Finn
+
+additional_layers=Ytterligere lag
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Side {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Side {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatyrbilde av side {{page}}
+
+# Find panel button title and messages
+find_input.title=Søk
+find_input.placeholder=Søk i dokument…
+find_previous.title=Finn forrige forekomst av frasen
+find_previous_label=Forrige
+find_next.title=Finn neste forekomst av frasen
+find_next_label=Neste
+find_highlight=Uthev alle
+find_match_case_label=Skill store/små bokstaver
+find_entire_word_label=Hele ord
+find_reached_top=NÃ¥dde toppen av dokumentet, fortsetter fra bunnen
+find_reached_bottom=NÃ¥dde bunnen av dokumentet, fortsetter fra toppen
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} av {{total}} treff
+find_match_count[two]={{current}} av {{total}} treff
+find_match_count[few]={{current}} av {{total}} treff
+find_match_count[many]={{current}} av {{total}} treff
+find_match_count[other]={{current}} av {{total}} treff
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mer enn {{limit}} treff
+find_match_count_limit[one]=Mer enn {{limit}} treff
+find_match_count_limit[two]=Mer enn {{limit}} treff
+find_match_count_limit[few]=Mer enn {{limit}} treff
+find_match_count_limit[many]=Mer enn {{limit}} treff
+find_match_count_limit[other]=Mer enn {{limit}} treff
+find_not_found=Fant ikke teksten
+
+# Error panel labels
+error_more_info=Mer info
+error_less_info=Mindre info
+error_close=Lukk
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (bygg: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Melding: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stakk: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fil: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linje: {{line}}
+rendering_error=En feil oppstod ved opptegning av siden.
+
+# Predefined zoom values
+page_scale_width=Sidebredde
+page_scale_fit=Tilpass til siden
+page_scale_auto=Automatisk zoom
+page_scale_actual=Virkelig størrelse
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading_error_indicator=Feil
+loading_error=En feil oppstod ved lasting av PDF.
+invalid_file_error=Ugyldig eller skadet PDF-fil.
+missing_file_error=Manglende PDF-fil.
+unexpected_response_error=Uventet serverrespons.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} annotasjon]
+password_label=Skriv inn passordet for å åpne denne PDF-filen.
+password_invalid=Ugyldig passord. Prøv igjen.
+password_ok=OK
+password_cancel=Avbryt
+
+printing_not_supported=Advarsel: Utskrift er ikke fullstendig støttet av denne nettleseren.
+printing_not_ready=Advarsel: PDF er ikke fullstendig innlastet for utskrift.
+web_fonts_disabled=Web-fonter er avslått: Kan ikke bruke innbundne PDF-fonter.
diff --git a/thirdparty/pdfjs/web/locale/ne-NP/viewer.properties b/thirdparty/pdfjs/web/locale/ne-NP/viewer.properties
new file mode 100644
index 0000000..3bf8ed8
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/ne-NP/viewer.properties
@@ -0,0 +1,183 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=अघिलà¥à¤²à¥‹ पृषà¥à¤
+previous_label=अघिलà¥à¤²à¥‹
+next.title=पछिलà¥à¤²à¥‹ पृषà¥à¤
+next_label=पछिलà¥à¤²à¥‹
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=पृषà¥à¤
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} मधà¥à¤¯à¥‡
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pagesCount}} को {{pageNumber}})
+
+zoom_out.title=जà¥à¤® घटाउनà¥à¤¹à¥‹à¤¸à¥
+zoom_out_label=जà¥à¤® घटाउनà¥à¤¹à¥‹à¤¸à¥
+zoom_in.title=जà¥à¤® बढाउनà¥à¤¹à¥‹à¤¸à¥
+zoom_in_label=जà¥à¤® बढाउनà¥à¤¹à¥‹à¤¸à¥
+zoom.title=जà¥à¤® गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥
+presentation_mode.title=पà¥à¤°à¤¸à¥à¤¤à¥à¤¤à¤¿ मोडमा जानà¥à¤¹à¥‹à¤¸à¥
+presentation_mode_label=पà¥à¤°à¤¸à¥à¤¤à¥à¤¤à¤¿ मोड
+open_file.title=फाइल खोलà¥à¤¨à¥à¤¹à¥‹à¤¸à¥
+open_file_label=खोलà¥à¤¨à¥à¤¹à¥‹à¤¸à¥
+print.title=मà¥à¤¦à¥à¤°à¤£ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥
+print_label=मà¥à¤¦à¥à¤°à¤£ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥
+download.title=डाउनलोडहरू
+download_label=डाउनलोडहरू
+bookmark.title=वरà¥à¤¤à¤®à¤¾à¤¨ दृशà¥à¤¯ (पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ वा नयाठसञà¥à¤à¥à¤¯à¤¾à¤²à¤®à¤¾ खà¥à¤²à¥à¤¨à¥à¤¹à¥‹à¤¸à¥)
+bookmark_label=हालको दृशà¥à¤¯
+
+# Secondary toolbar and context menu
+tools.title=औजारहरू
+tools_label=औजारहरू
+first_page.title=पहिलो पृषà¥à¤ मा जानà¥à¤¹à¥‹à¤¸à¥
+first_page.label=पहिलो पृषà¥à¤ मा जानà¥à¤¹à¥‹à¤¸à¥
+first_page_label=पहिलो पृषà¥à¤ मा जानà¥à¤¹à¥‹à¤¸à¥
+last_page.title=पछिलà¥à¤²à¥‹ पृषà¥à¤ मा जानà¥à¤¹à¥‹à¤¸à¥
+last_page.label=पछिलà¥à¤²à¥‹ पृषà¥à¤ मा जानà¥à¤¹à¥‹à¤¸à¥
+last_page_label=पछिलà¥à¤²à¥‹ पृषà¥à¤ मा जानà¥à¤¹à¥‹à¤¸à¥
+page_rotate_cw.title=घडीको दिशामा घà¥à¤®à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥
+page_rotate_cw.label=घडीको दिशामा घà¥à¤®à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥
+page_rotate_cw_label=घडीको दिशामा घà¥à¤®à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥
+page_rotate_ccw.title=घडीको विपरित दिशामा घà¥à¤®à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥
+page_rotate_ccw.label=घडीको विपरित दिशामा घà¥à¤®à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥
+page_rotate_ccw_label=घडीको विपरित दिशामा घà¥à¤®à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥
+
+cursor_text_select_tool.title=पाठचयन उपकरण सकà¥à¤·à¤® गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥
+cursor_text_select_tool_label=पाठचयन उपकरण
+cursor_hand_tool.title=हाते उपकरण सकà¥à¤·à¤® गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥
+cursor_hand_tool_label=हाते उपकरण
+
+# Document properties dialog box
+document_properties.title=कागजात विशेषताहरू...
+document_properties_label=कागजात विशेषताहरू...
+document_properties_file_name=फाइल नाम:
+document_properties_file_size=फाइल आकार:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=शीरà¥à¤·à¤•:
+document_properties_author=लेखक:
+document_properties_subject=विषयः
+document_properties_keywords=शबà¥à¤¦à¤•à¥à¤žà¥à¤œà¥€à¤ƒ
+document_properties_creation_date=सिरà¥à¤œà¤¨à¤¾ गरिà¤à¤•ो मिति:
+document_properties_modification_date=परिमारà¥à¤œà¤¿à¤¤ मिति:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=सरà¥à¤œà¤•:
+document_properties_producer=PDF निरà¥à¤®à¤¾à¤¤à¤¾:
+document_properties_version=PDF संसà¥à¤•रण
+document_properties_page_count=पृषà¥à¤ गणना:
+document_properties_close=बनà¥à¤¦ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥
+
+print_progress_message=मà¥à¤¦à¥à¤°à¤£à¤•ा लागि कागजात तयारी गरिदै…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=रदà¥à¤¦ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=टगल साइडबार
+toggle_sidebar_notification.title=साइडबार टगल गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ (कागजातमा समावेश à¤à¤à¤•ो कà¥à¤°à¤¾à¤¹à¤°à¥‚ रूपरेखा/attachments)
+toggle_sidebar_label=टगल साइडबार
+document_outline.title=कागजातको रूपरेखा देखाउनà¥à¤¹à¥‹à¤¸à¥ (सबै वसà¥à¤¤à¥à¤¹à¤°à¥‚ विसà¥à¤¤à¤¾à¤°/पतन गरà¥à¤¨ डबल-कà¥à¤²à¤¿à¤• गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥)
+document_outline_label=दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤•ो रूपरेखा
+attachments.title=संलगà¥à¤¨à¤¹à¤°à¥‚ देखाउनà¥à¤¹à¥‹à¤¸à¥
+attachments_label=संलगà¥à¤¨à¤•हरू
+thumbs.title=थमà¥à¤¬à¤¨à¥‡à¤²à¤¹à¤°à¥‚ देखाउनà¥à¤¹à¥‹à¤¸à¥
+thumbs_label=थमà¥à¤¬à¤¨à¥‡à¤²à¤¹à¤°à¥‚
+findbar.title=कागजातमा फेला पारà¥à¤¨à¥à¤¹à¥‹à¤¸à¥
+findbar_label=फेला पारà¥à¤¨à¥à¤¹à¥‹à¤¸à¥
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=पृषà¥à¤ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} पृषà¥à¤ को थमà¥à¤¬à¤¨à¥‡à¤²
+
+# Find panel button title and messages
+find_input.title=फेला पारà¥à¤¨à¥à¤¹à¥‹à¤¸à¥
+find_input.placeholder=कागजातमा फेला पारà¥à¤¨à¥à¤¹à¥‹à¤¸à¥â€¦
+find_previous.title=यस वाकà¥à¤¯à¤¾à¤‚शको अघिलà¥à¤²à¥‹ घटना फेला पारà¥à¤¨à¥à¤¹à¥‹à¤¸à¥
+find_previous_label=अघिलà¥à¤²à¥‹
+find_next.title=यस वाकà¥à¤¯à¤¾à¤‚शको पछिलà¥à¤²à¥‹ घटना फेला पारà¥à¤¨à¥à¤¹à¥‹à¤¸à¥
+find_next_label=अरà¥à¤•ो
+find_highlight=सबै हाइलाइट गरà¥à¤¨à¥‡
+find_match_case_label=केस जोडा मिलाउनà¥à¤¹à¥‹à¤¸à¥
+find_reached_top=पृषà¥à¤ को शिरà¥à¤·à¤®à¤¾ पà¥à¤—ीयो, तलबाट जारी गरिà¤à¤•ो थियो
+find_reached_bottom=पृषà¥à¤ को अनà¥à¤¤à¥à¤¯à¤®à¤¾ पà¥à¤—ीयो, शिरà¥à¤·à¤¬à¤¾à¤Ÿ जारी गरिà¤à¤•ो थियो
+find_not_found=वाकà¥à¤¯à¤¾à¤‚श फेला परेन
+
+# Error panel labels
+error_more_info=थप जानकारी
+error_less_info=कम जानकारी
+error_close=बनà¥à¤¦ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=सनà¥à¤¦à¥‡à¤¶: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=सà¥à¤Ÿà¥à¤¯à¤¾à¤•: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=फाइल: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=लाइन: {{line}}
+rendering_error=पृषà¥à¤ पà¥à¤°à¤¤à¤¿à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¦à¤¾ à¤à¤‰à¤Ÿà¤¾ तà¥à¤°à¥à¤Ÿà¤¿ देखापरà¥â€à¤¯à¥‹à¥¤
+
+# Predefined zoom values
+page_scale_width=पृषà¥à¤ चौडाइ
+page_scale_fit=पृषà¥à¤ ठिकà¥à¤• मिलà¥à¤¨à¥‡
+page_scale_auto=सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ जà¥à¤®
+page_scale_actual=वासà¥à¤¤à¤µà¤¿à¤• आकार
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=तà¥à¤°à¥à¤Ÿà¤¿
+loading_error=यो PDF लोड गरà¥à¤¦à¤¾ à¤à¤‰à¤Ÿà¤¾ तà¥à¤°à¥à¤Ÿà¤¿ देखापरà¥â€à¤¯à¥‹à¥¤
+invalid_file_error=अवैध वा दà¥à¤·à¤¿à¤¤ PDF फाइल।
+missing_file_error=हराईरहेको PDF फाइल।
+unexpected_response_error=अपà¥à¤°à¤¤à¥à¤¯à¤¾à¤¶à¤¿à¤¤ सरà¥à¤à¤° पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾à¥¤
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=यस PDF फाइललाई खोलà¥à¤¨ गोपà¥à¤¯à¤¶à¤¬à¥à¤¦ पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥à¥¤
+password_invalid=अवैध गोपà¥à¤¯à¤¶à¤¬à¥à¤¦à¥¤ पà¥à¤¨à¤ƒ पà¥à¤°à¤¯à¤¾à¤¸ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥à¥¤
+password_ok=ठिक छ
+password_cancel=रदà¥à¤¦ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥
+
+printing_not_supported=चेतावनी: यो बà¥à¤°à¤¾à¤‰à¤œà¤°à¤®à¤¾ मà¥à¤¦à¥à¤°à¤£ पूरà¥à¤£à¤¤à¤¯à¤¾ समरà¥à¤¥à¤¿à¤¤ छैन।
+printing_not_ready=चेतावनी: PDF मà¥à¤¦à¥à¤°à¤£à¤•ा लागि पूरà¥à¤£à¤¤à¤¯à¤¾ लोड à¤à¤à¤•ो छैन।
+web_fonts_disabled=वेब फनà¥à¤Ÿ असकà¥à¤·à¤® छनà¥: à¤à¤®à¥à¤¬à¥‡à¤¡à¥‡à¤¡ PDF फनà¥à¤Ÿ पà¥à¤°à¤¯à¥‹à¤— गरà¥à¤¨ असमरà¥à¤¥à¥¤
diff --git a/thirdparty/pdfjs/web/locale/nl/viewer.properties b/thirdparty/pdfjs/web/locale/nl/viewer.properties
new file mode 100644
index 0000000..0491255
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/nl/viewer.properties
@@ -0,0 +1,253 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Vorige pagina
+previous_label=Vorige
+next.title=Volgende pagina
+next_label=Volgende
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pagina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=van {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} van {{pagesCount}})
+
+zoom_out.title=Uitzoomen
+zoom_out_label=Uitzoomen
+zoom_in.title=Inzoomen
+zoom_in_label=Inzoomen
+zoom.title=Zoomen
+presentation_mode.title=Wisselen naar presentatiemodus
+presentation_mode_label=Presentatiemodus
+open_file.title=Bestand openen
+open_file_label=Openen
+print.title=Afdrukken
+print_label=Afdrukken
+download.title=Downloaden
+download_label=Downloaden
+bookmark.title=Huidige weergave (kopiëren of openen in nieuw venster)
+bookmark_label=Huidige weergave
+
+# Secondary toolbar and context menu
+tools.title=Hulpmiddelen
+tools_label=Hulpmiddelen
+first_page.title=Naar eerste pagina gaan
+first_page.label=Naar eerste pagina gaan
+first_page_label=Naar eerste pagina gaan
+last_page.title=Naar laatste pagina gaan
+last_page.label=Naar laatste pagina gaan
+last_page_label=Naar laatste pagina gaan
+page_rotate_cw.title=Rechtsom draaien
+page_rotate_cw.label=Rechtsom draaien
+page_rotate_cw_label=Rechtsom draaien
+page_rotate_ccw.title=Linksom draaien
+page_rotate_ccw.label=Linksom draaien
+page_rotate_ccw_label=Linksom draaien
+
+cursor_text_select_tool.title=Tekstselectiehulpmiddel inschakelen
+cursor_text_select_tool_label=Tekstselectiehulpmiddel
+cursor_hand_tool.title=Handhulpmiddel inschakelen
+cursor_hand_tool_label=Handhulpmiddel
+
+scroll_vertical.title=Verticaal scrollen gebruiken
+scroll_vertical_label=Verticaal scrollen
+scroll_horizontal.title=Horizontaal scrollen gebruiken
+scroll_horizontal_label=Horizontaal scrollen
+scroll_wrapped.title=Scrollen met terugloop gebruiken
+scroll_wrapped_label=Scrollen met terugloop
+
+spread_none.title=Dubbele pagina’s niet samenvoegen
+spread_none_label=Geen dubbele pagina’s
+spread_odd.title=Dubbele pagina’s samenvoegen vanaf oneven pagina’s
+spread_odd_label=Oneven dubbele pagina’s
+spread_even.title=Dubbele pagina’s samenvoegen vanaf even pagina’s
+spread_even_label=Even dubbele pagina’s
+
+# Document properties dialog box
+document_properties.title=Documenteigenschappen…
+document_properties_label=Documenteigenschappen…
+document_properties_file_name=Bestandsnaam:
+document_properties_file_size=Bestandsgrootte:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titel:
+document_properties_author=Auteur:
+document_properties_subject=Onderwerp:
+document_properties_keywords=Trefwoorden:
+document_properties_creation_date=Aanmaakdatum:
+document_properties_modification_date=Wijzigingsdatum:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Maker:
+document_properties_producer=PDF-producent:
+document_properties_version=PDF-versie:
+document_properties_page_count=Aantal pagina’s:
+document_properties_page_size=Paginagrootte:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=staand
+document_properties_page_size_orientation_landscape=liggend
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Snelle webweergave:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nee
+document_properties_close=Sluiten
+
+print_progress_message=Document voorbereiden voor afdrukken…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Annuleren
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Zijbalk in-/uitschakelen
+toggle_sidebar_notification.title=Zijbalk in-/uitschakelen (document bevat overzicht/bijlagen)
+toggle_sidebar_notification2.title=Zijbalk in-/uitschakelen (document bevat overzicht/bijlagen/lagen)
+toggle_sidebar_label=Zijbalk in-/uitschakelen
+document_outline.title=Documentoverzicht tonen (dubbelklik om alle items uit/samen te vouwen)
+document_outline_label=Documentoverzicht
+attachments.title=Bijlagen tonen
+attachments_label=Bijlagen
+layers.title=Lagen tonen (dubbelklik om alle lagen naar de standaardstatus terug te zetten)
+layers_label=Lagen
+thumbs.title=Miniaturen tonen
+thumbs_label=Miniaturen
+current_outline_item.title=Huidige positie in documentoverzicht selecteren
+current_outline_item_label=Huidige positie in documentoverzicht
+findbar.title=Zoeken in document
+findbar_label=Zoeken
+
+additional_layers=Aanvullende lagen
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Pagina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pagina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatuur van pagina {{page}}
+
+# Find panel button title and messages
+find_input.title=Zoeken
+find_input.placeholder=Zoeken in document…
+find_previous.title=De vorige overeenkomst van de tekst zoeken
+find_previous_label=Vorige
+find_next.title=De volgende overeenkomst van de tekst zoeken
+find_next_label=Volgende
+find_highlight=Alles markeren
+find_match_case_label=Hoofdlettergevoelig
+find_entire_word_label=Hele woorden
+find_reached_top=Bovenkant van document bereikt, doorgegaan vanaf onderkant
+find_reached_bottom=Onderkant van document bereikt, doorgegaan vanaf bovenkant
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} van {{total}} overeenkomst
+find_match_count[two]={{current}} van {{total}} overeenkomsten
+find_match_count[few]={{current}} van {{total}} overeenkomsten
+find_match_count[many]={{current}} van {{total}} overeenkomsten
+find_match_count[other]={{current}} van {{total}} overeenkomsten
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Meer dan {{limit}} overeenkomsten
+find_match_count_limit[one]=Meer dan {{limit}} overeenkomst
+find_match_count_limit[two]=Meer dan {{limit}} overeenkomsten
+find_match_count_limit[few]=Meer dan {{limit}} overeenkomsten
+find_match_count_limit[many]=Meer dan {{limit}} overeenkomsten
+find_match_count_limit[other]=Meer dan {{limit}} overeenkomsten
+find_not_found=Tekst niet gevonden
+
+# Error panel labels
+error_more_info=Meer informatie
+error_less_info=Minder informatie
+error_close=Sluiten
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Bericht: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Bestand: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Regel: {{line}}
+rendering_error=Er is een fout opgetreden bij het weergeven van de pagina.
+
+# Predefined zoom values
+page_scale_width=Paginabreedte
+page_scale_fit=Hele pagina
+page_scale_auto=Automatisch zoomen
+page_scale_actual=Werkelijke grootte
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Fout
+loading_error=Er is een fout opgetreden bij het laden van de PDF.
+invalid_file_error=Ongeldig of beschadigd PDF-bestand.
+missing_file_error=PDF-bestand ontbreekt.
+unexpected_response_error=Onverwacht serverantwoord.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}}-aantekening]
+password_label=Voer het wachtwoord in om dit PDF-bestand te openen.
+password_invalid=Ongeldig wachtwoord. Probeer het opnieuw.
+password_ok=OK
+password_cancel=Annuleren
+
+printing_not_supported=Waarschuwing: afdrukken wordt niet volledig ondersteund door deze browser.
+printing_not_ready=Waarschuwing: de PDF is niet volledig geladen voor afdrukken.
+web_fonts_disabled=Weblettertypen zijn uitgeschakeld: gebruik van ingebedde PDF-lettertypen is niet mogelijk.
diff --git a/thirdparty/pdfjs/web/locale/nn-NO/viewer.properties b/thirdparty/pdfjs/web/locale/nn-NO/viewer.properties
new file mode 100644
index 0000000..43dff5a
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/nn-NO/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Føregåande side
+previous_label=Føregåande
+next.title=Neste side
+next_label=Neste
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Side
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=av {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} av {{pagesCount}})
+
+zoom_out.title=Zoom ut
+zoom_out_label=Zoom ut
+zoom_in.title=Zoom inn
+zoom_in_label=Zoom inn
+zoom.title=Zoom
+presentation_mode.title=Byt til presentasjonsmodus
+presentation_mode_label=Presentasjonsmodus
+open_file.title=Opne fil
+open_file_label=Opne
+print.title=Skriv ut
+print_label=Skriv ut
+download.title=Last ned
+download_label=Last ned
+bookmark.title=Gjeldande vising (kopier eller opne i nytt vindauge)
+bookmark_label=Gjeldande vising
+
+# Secondary toolbar and context menu
+tools.title=Verktøy
+tools_label=Verktøy
+first_page.title=Gå til første side
+first_page.label=Gå til første side
+first_page_label=Gå til første side
+last_page.title=GÃ¥ til siste side
+last_page.label=GÃ¥ til siste side
+last_page_label=GÃ¥ til siste side
+page_rotate_cw.title=Roter med klokka
+page_rotate_cw.label=Roter med klokka
+page_rotate_cw_label=Roter med klokka
+page_rotate_ccw.title=Roter mot klokka
+page_rotate_ccw.label=Roter mot klokka
+page_rotate_ccw_label=Roter mot klokka
+
+cursor_text_select_tool.title=Aktiver tekstmarkeringsverktøy
+cursor_text_select_tool_label=Tekstmarkeringsverktøy
+cursor_hand_tool.title=Aktiver handverktøy
+cursor_hand_tool_label=Handverktøy
+
+scroll_vertical.title=Bruk vertikal rulling
+scroll_vertical_label=Vertikal rulling
+scroll_horizontal.title=Bruk horisontal rulling
+scroll_horizontal_label=Horisontal rulling
+scroll_wrapped.title=Bruk fleirsiderulling
+scroll_wrapped_label=Fleirsiderulling
+
+spread_none.title=Vis enkeltsider
+spread_none_label=Enkeltside
+spread_odd.title=Vis oppslag med ulike sidenummer til venstre
+spread_odd_label=Oppslag med framside
+spread_even.title=Vis oppslag med like sidenummmer til venstre
+spread_even_label=Oppslag utan framside
+
+# Document properties dialog box
+document_properties.title=Dokumenteigenskapar…
+document_properties_label=Dokumenteigenskapar…
+document_properties_file_name=Filnamn:
+document_properties_file_size=Filstorleik:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Tittel:
+document_properties_author=Forfattar:
+document_properties_subject=Emne:
+document_properties_keywords=Stikkord:
+document_properties_creation_date=Dato oppretta:
+document_properties_modification_date=Dato endra:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Oppretta av:
+document_properties_producer=PDF-verktøy:
+document_properties_version=PDF-versjon:
+document_properties_page_count=Sidetal:
+document_properties_page_size=Sidestørrelse:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=ståande
+document_properties_page_size_orientation_landscape=liggande
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Brev
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Rask nettvising:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nei
+document_properties_close=Lat att
+
+print_progress_message=Førebur dokumentet for utskrift…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Avbryt
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Slå av/på sidestolpe
+toggle_sidebar_notification.title=Vis/gøym sidestolpen (dokumentet inneheld oversikt/vedlegg)
+toggle_sidebar_notification2.title=Vis/gøym sidestolpe (dokumentet inneheld oversikt/vedlegg/lag)
+toggle_sidebar_label=Slå av/på sidestolpe
+document_outline.title=Vis dokumentdisposisjonen (dobbelklikk for å utvide/gøyme alle elementa)
+document_outline_label=Dokumentdisposisjon
+attachments.title=Vis vedlegg
+attachments_label=Vedlegg
+layers.title=Vis lag (dobbeltklikk for å tilbakestille alle lag til standardtilstand)
+layers_label=Lag
+thumbs.title=Vis miniatyrbilde
+thumbs_label=Miniatyrbilde
+findbar.title=Finn i dokumentet
+findbar_label=Finn
+
+additional_layers=Ytterlegare lag
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Side {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Side {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatyrbilde av side {{page}}
+
+# Find panel button title and messages
+find_input.title=Søk
+find_input.placeholder=Søk i dokument…
+find_previous.title=Finn førre førekomst av frasen
+find_previous_label=Førre
+find_next.title=Finn neste førekomst av frasen
+find_next_label=Neste
+find_highlight=Uthev alle
+find_match_case_label=Skil store/små bokstavar
+find_entire_word_label=Heile ord
+find_reached_top=Nådde toppen av dokumentet, fortset frå botnen
+find_reached_bottom=Nådde botnen av dokumentet, fortset frå toppen
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} av {{total}} treff
+find_match_count[two]={{current}} av {{total}} treff
+find_match_count[few]={{current}} av {{total}} treff
+find_match_count[many]={{current}} av {{total}} treff
+find_match_count[other]={{current}} av {{total}} treff
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Meir enn {{limit}} treff
+find_match_count_limit[one]=Meir enn {{limit}} treff
+find_match_count_limit[two]=Meir enn {{limit}} treff
+find_match_count_limit[few]=Meir enn {{limit}} treff
+find_match_count_limit[many]=Meir enn {{limit}} treff
+find_match_count_limit[other]=Meir enn {{limit}} treff
+find_not_found=Fann ikkje teksten
+
+# Error panel labels
+error_more_info=Meir info
+error_less_info=Mindre info
+error_close=Lat att
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (bygg: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Melding: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stakk: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fil: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linje: {{line}}
+rendering_error=Ein feil oppstod under vising av sida.
+
+# Predefined zoom values
+page_scale_width=Sidebreidde
+page_scale_fit=Tilpass til sida
+page_scale_auto=Automatisk skalering
+page_scale_actual=Verkeleg storleik
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Feil
+loading_error=Ein feil oppstod ved lasting av PDF.
+invalid_file_error=Ugyldig eller korrupt PDF-fil.
+missing_file_error=Manglande PDF-fil.
+unexpected_response_error=Uventa tenarrespons.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} annotasjon]
+password_label=Skriv inn passordet for å opne denne PDF-fila.
+password_invalid=Ugyldig passord. Prøv igjen.
+password_ok=OK
+password_cancel=Avbryt
+
+printing_not_supported=Åtvaring: Utskrift er ikkje fullstendig støtta av denne nettlesaren.
+printing_not_ready=Ã…tvaring: PDF ikkje fullstendig innlasta for utskrift.
+web_fonts_disabled=Web-skrifter er slått av: Kan ikkje bruke innbundne PDF-skrifter.
diff --git a/thirdparty/pdfjs/web/locale/oc/viewer.properties b/thirdparty/pdfjs/web/locale/oc/viewer.properties
new file mode 100644
index 0000000..c7d4884
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/oc/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pagina precedenta
+previous_label=Precedent
+next.title=Pagina seguenta
+next_label=Seguent
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pagina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=sus {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} sus {{pagesCount}})
+
+zoom_out.title=Zoom arrièr
+zoom_out_label=Zoom arrièr
+zoom_in.title=Zoom avant
+zoom_in_label=Zoom avant
+zoom.title=Zoom
+presentation_mode.title=Bascular en mòde presentacion
+presentation_mode_label=Mòde Presentacion
+open_file.title=Dobrir lo fichièr
+open_file_label=Dobrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Telecargar
+download_label=Telecargar
+bookmark.title=Afichatge corrent (copiar o dobrir dins una fenèstra novèla)
+bookmark_label=Afichatge actual
+
+# Secondary toolbar and context menu
+tools.title=Aisinas
+tools_label=Aisinas
+first_page.title=Anar a la primièra pagina
+first_page.label=Anar a la primièra pagina
+first_page_label=Anar a la primièra pagina
+last_page.title=Anar a la darrièra pagina
+last_page.label=Anar a la darrièra pagina
+last_page_label=Anar a la darrièra pagina
+page_rotate_cw.title=Rotacion orà ria
+page_rotate_cw.label=Rotacion orà ria
+page_rotate_cw_label=Rotacion orà ria
+page_rotate_ccw.title=Rotacion antiorà ria
+page_rotate_ccw.label=Rotacion antiorà ria
+page_rotate_ccw_label=Rotacion antiorà ria
+
+cursor_text_select_tool.title=Activar l'aisina de seleccion de tèxte
+cursor_text_select_tool_label=Aisina de seleccion de tèxte
+cursor_hand_tool.title=Activar l’aisina man
+cursor_hand_tool_label=Aisina man
+
+scroll_vertical.title=Utilizar lo desfilament vertical
+scroll_vertical_label=Desfilament vertical
+scroll_horizontal.title=Utilizar lo desfilament orizontal
+scroll_horizontal_label=Desfilament orizontal
+scroll_wrapped.title=Activar lo desfilament continú
+scroll_wrapped_label=Desfilament continú
+
+spread_none.title=Agropar pas las paginas doas a doas
+spread_none_label=Una sola pagina
+spread_odd.title=Mostrar doas paginas en començant per las paginas imparas a esquèrra
+spread_odd_label=Dobla pagina, impara a drecha
+spread_even.title=Mostrar doas paginas en començant per las paginas paras a esquèrra
+spread_even_label=Dobla pagina, para a drecha
+
+# Document properties dialog box
+document_properties.title=Proprietats del document…
+document_properties_label=Proprietats del document…
+document_properties_file_name=Nom del fichièr :
+document_properties_file_size=Talha del fichièr :
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} Ko ({{size_b}} octets)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} Mo ({{size_b}} octets)
+document_properties_title=TÃtol :
+document_properties_author=Autor :
+document_properties_subject=Subjècte :
+document_properties_keywords=Mots claus :
+document_properties_creation_date=Data de creacion :
+document_properties_modification_date=Data de modificacion :
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, a {{time}}
+document_properties_creator=Creator :
+document_properties_producer=Aisina de conversion PDFÂ :
+document_properties_version=Version PDFÂ :
+document_properties_page_count=Nombre de paginas :
+document_properties_page_size=Talha de la pagina :
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=retrach
+document_properties_page_size_orientation_landscape=païsatge
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letra
+document_properties_page_size_name_legal=Document juridic
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista web rapida :
+document_properties_linearized_yes=Ã’c
+document_properties_linearized_no=Non
+document_properties_close=Tampar
+
+print_progress_message=Preparacion del document per l’impression…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Anullar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Afichar/amagar lo panèl lateral
+toggle_sidebar_notification.title=Afichar/amagar lo panèl lateral (lo document conten esquèmas/pèças juntas)
+toggle_sidebar_notification2.title=Afichar/amagar lo panèl lateral (lo document conten esquèmas/pèças juntas/calques)
+toggle_sidebar_label=Afichar/amagar lo panèl lateral
+document_outline.title=Mostrar los esquèmas del document (dobleclicar per espandre/reduire totes los elements)
+document_outline_label=Marcapaginas del document
+attachments.title=Visualizar las pèças juntas
+attachments_label=Pèças juntas
+layers.title=Afichar los calques (doble-clicar per reïnicializar totes los calques a l’estat per defaut)
+layers_label=Calques
+thumbs.title=Afichar las vinhetas
+thumbs_label=Vinhetas
+findbar.title=Cercar dins lo document
+findbar_label=Recercar
+
+additional_layers=Calques suplementaris
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Pagina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pagina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Vinheta de la pagina {{page}}
+
+# Find panel button title and messages
+find_input.title=Recercar
+find_input.placeholder=Cercar dins lo document…
+find_previous.title=Tròba l'ocurréncia precedenta de la frasa
+find_previous_label=Precedent
+find_next.title=Tròba l'ocurréncia venenta de la frasa
+find_next_label=Seguent
+find_highlight=Suslinhar tot
+find_match_case_label=Respectar la cassa
+find_entire_word_label=Mots entièrs
+find_reached_top=Naut de la pagina atenh, perseguida del bas
+find_reached_bottom=Bas de la pagina atench, perseguida al començament
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=Occuréncia {{current}} sus {{total}}
+find_match_count[two]=Occuréncia {{current}} sus {{total}}
+find_match_count[few]=Occuréncia {{current}} sus {{total}}
+find_match_count[many]=Occuréncia {{current}} sus {{total}}
+find_match_count[other]=Occuréncia {{current}} sus {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mai de {{limit}} occuréncias
+find_match_count_limit[one]=Mai de {{limit}} occuréncia
+find_match_count_limit[two]=Mai de {{limit}} occuréncias
+find_match_count_limit[few]=Mai de {{limit}} occuréncias
+find_match_count_limit[many]=Mai de {{limit}} occuréncias
+find_match_count_limit[other]=Mai de {{limit}} occuréncias
+find_not_found=Frasa pas trobada
+
+# Error panel labels
+error_more_info=Mai de detalhs
+error_less_info=Mens d'informacions
+error_close=Tampar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (identificant de compilacion : {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Messatge : {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pila : {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fichièr : {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linha : {{line}}
+rendering_error=Una error s'es producha pendent l'afichatge de la pagina.
+
+# Predefined zoom values
+page_scale_width=Largor plena
+page_scale_fit=Pagina entièra
+page_scale_auto=Zoom automatic
+page_scale_actual=Talha vertadièra
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=Una error s'es producha pendent lo cargament del fichièr PDF.
+invalid_file_error=Fichièr PDF invalid o corromput.
+missing_file_error=Fichièr PDF mancant.
+unexpected_response_error=Responsa de servidor imprevista.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} a {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotacion {{type}}]
+password_label=Picatz lo senhal per dobrir aqueste fichièr PDF.
+password_invalid=Senhal incorrècte. Tornatz ensajar.
+password_ok=D'acòrdi
+password_cancel=Anullar
+
+printing_not_supported=Atencion : l'impression es pas completament gerida per aqueste navegador.
+printing_not_ready=Atencion : lo PDF es pas entièrament cargat per lo poder imprimir.
+web_fonts_disabled=Las poliças web son desactivadas : impossible d'utilizar las poliças integradas al PDF.
diff --git a/thirdparty/pdfjs/web/locale/pa-IN/viewer.properties b/thirdparty/pdfjs/web/locale/pa-IN/viewer.properties
new file mode 100644
index 0000000..0bfd2a7
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/pa-IN/viewer.properties
@@ -0,0 +1,249 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ਪਿਛਲਾ ਸਫ਼ਾ
+previous_label=ਪਿੱਛੇ
+next.title=ਅਗਲਾ ਸਫ਼ਾ
+next_label=ਅੱਗੇ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ਸਫ਼ਾ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} ਵਿੱਚੋਂ
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages={{pagesCount}}) ਵਿੱਚੋਂ ({{pageNumber}}
+
+zoom_out.title=ਜ਼ੂਮ ਆਉਟ
+zoom_out_label=ਜ਼ੂਮ ਆਉਟ
+zoom_in.title=ਜ਼ੂਮ ਇਨ
+zoom_in_label=ਜ਼ੂਮ ਇਨ
+zoom.title=ਜ਼ੂਨ
+presentation_mode.title=ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ ਵਿੱਚ ਜਾਓ
+presentation_mode_label=ਪਰਿਜੈਂਟੇਸ਼ਨ ਮੋਡ
+open_file.title=ਫਾਈਲ ਨੂੰ ਖੋਲà©à¨¹à©‹
+open_file_label=ਖੋਲà©à¨¹à©‹
+print.title=ਪਰਿੰਟ
+print_label=ਪਰਿੰਟ
+download.title=ਡਾਊਨਲੋਡ
+download_label=ਡਾਊਨਲੋਡ
+bookmark.title=ਮੌਜੂਦਾ à¨à¨²à¨• (ਨਵੀਂ ਵਿੰਡੋ ਵਿੱਚ ਕਾਪੀ ਕਰੋ ਜਾਂ ਖੋਲà©à¨¹à©‹)
+bookmark_label=ਮੌਜੂਦਾ à¨à¨²à¨•
+
+# Secondary toolbar and context menu
+tools.title=ਟੂਲ
+tools_label=ਟੂਲ
+first_page.title=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
+first_page.label=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
+first_page_label=ਪਹਿਲੇ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
+last_page.title=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
+last_page.label=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
+last_page_label=ਆਖਰੀ ਸਫ਼ੇ ਉੱਤੇ ਜਾਓ
+page_rotate_cw.title=ਸੱਜੇ ਦਾਅ ਘà©à©°à¨®à¨¾à¨“
+page_rotate_cw.label=ਸੱਜੇ ਦਾਅ ਘà©à©°à¨®à¨¾à¨‰
+page_rotate_cw_label=ਸੱਜੇ ਦਾਅ ਘà©à©°à¨®à¨¾à¨“
+page_rotate_ccw.title=ਖੱਬੇ ਦਾਅ ਘà©à©°à¨®à¨¾à¨“
+page_rotate_ccw.label=ਖੱਬੇ ਦਾਅ ਘà©à©°à¨®à¨¾à¨‰
+page_rotate_ccw_label=ਖੱਬੇ ਦਾਅ ਘà©à©°à¨®à¨¾à¨“
+
+cursor_text_select_tool.title=ਲਿਖਤ ਚੋਣ ਟੂਲ ਸਮਰੱਥ ਕਰੋ
+cursor_text_select_tool_label=ਲਿਖਤ ਚੋਣ ਟੂਲ
+cursor_hand_tool.title=ਹੱਥ ਟੂਲ ਸਮਰੱਥ ਕਰੋ
+cursor_hand_tool_label=ਹੱਥ ਟੂਲ
+
+scroll_vertical.title=ਖੜà©à¨¹à¨µà©‡à¨‚ ਸਕਰਾਉਣ ਨੂੰ ਵਰਤੋਂ
+scroll_vertical_label=ਖੜà©à¨¹à¨µà¨¾à¨‚ ਸਰਕਾਉਣਾ
+scroll_horizontal.title=ਲੇਟਵੇਂ ਸਰਕਾਉਣ ਨੂੰ ਵਰਤੋਂ
+scroll_horizontal_label=ਲੇਟਵਾਂ ਸਰਕਾਉਣਾ
+scroll_wrapped.title=ਸਮੇਟੇ ਸਰਕਾਉਣ ਨੂੰ ਵਰਤੋਂ
+scroll_wrapped_label=ਸਮੇਟਿਆ ਸਰਕਾਉਣਾ
+
+spread_none.title=ਸਫ਼ਾ ਫੈਲਾਅ ਵਿੱਚ ਸ਼ਾਮਲ ਨਾ ਹੋਵੋ
+spread_none_label=ਕੋਈ ਫੈਲਾਅ ਨਹੀਂ
+spread_odd.title=ਟਾਂਕ ਅੰਕ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼à©à¨°à©‚ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ
+spread_even.title=ਜਿਸਤ ਅੰਕ ਵਾਲੇ ਸਫ਼ਿਆਂ ਨਾਲ ਸ਼à©à¨°à©‚ ਹੋਣ ਵਾਲੇ ਸਫਿਆਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ
+
+# Document properties dialog box
+document_properties.title=…ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ
+document_properties_label=…ਦਸਤਾਵੇਜ਼ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ
+document_properties_file_name=ਫਾਈਲ ਦਾ ਨਾਂ:
+document_properties_file_size=ਫਾਈਲ ਦਾ ਆਕਾਰ:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} ਬਾਈਟ)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} ਬਾਈਟ)
+document_properties_title=ਟਾਈਟਲ:
+document_properties_author=ਲੇਖਕ:
+document_properties_subject=ਵਿਸ਼ਾ:
+document_properties_keywords=ਸ਼ਬਦ:
+document_properties_creation_date=ਬਣਾਉਣ ਦੀ ਮਿਤੀ:
+document_properties_modification_date=ਸੋਧ ਦੀ ਮਿਤੀ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=ਨਿਰਮਾਤਾ:
+document_properties_producer=PDF ਪà©à¨°à©‹à¨¡à¨¿à¨Šà¨¸à¨°:
+document_properties_version=PDF ਵਰਜਨ:
+document_properties_page_count=ਸਫ਼ੇ ਦੀ ਗਿਣਤੀ:
+document_properties_page_size=ਸਫ਼ਾ ਆਕਾਰ:
+document_properties_page_size_unit_inches=ਇੰਚ
+document_properties_page_size_unit_millimeters=ਮਿਮੀ
+document_properties_page_size_orientation_portrait=ਪੋਰਟਰੇਟ
+document_properties_page_size_orientation_landscape=ਲੈਂਡਸਕੇਪ
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=ਲੈਟਰ
+document_properties_page_size_name_legal=ਕਨੂੰਨੀ
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=ਤੇਜ਼ ਵੈੱਬ à¨à¨²à¨•:
+document_properties_linearized_yes=ਹਾਂ
+document_properties_linearized_no=ਨਹੀਂ
+document_properties_close=ਬੰਦ ਕਰੋ
+
+print_progress_message=…ਪਰਿੰਟ ਕਰਨ ਲਈ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਤਿਆਰ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ਰੱਦ ਕਰੋ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=ਬਾਹੀ ਬਦਲੋ
+toggle_sidebar_notification.title=ਬਾਹੀ ਨੂੰ ਬਦਲੋ (ਦਸਤਾਵੇਜ਼ ਖਾਕਾ/ਅਟੈਚਮੈਂਟਾਂ ਰੱਖਦਾ ਹੈ)
+toggle_sidebar_notification2.title=ਬਾਹੀ ਨੂੰ ਬਦਲੋ (ਦਸਤਾਵੇਜ਼ ਖਾਕਾ/ਅਟੈਚਮੈਂਟ/ਪਰਤਾਂ ਰੱਖਦਾ ਹੈ)
+toggle_sidebar_label=ਬਾਹੀ ਬਦਲੋ
+document_outline.title=ਦਸਤਾਵੇਜ਼ ਖਾਕਾ ਦਿਖਾਓ (ਸਾਰੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਫੈਲਾਉਣ/ਸਮੇਟਣ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ)
+document_outline_label=ਦਸਤਾਵੇਜ਼ ਖਾਕਾ
+attachments.title=ਅਟੈਚਮੈਂਟ ਵੇਖਾਓ
+attachments_label=ਅਟੈਚਮੈਂਟਾਂ
+layers.title=ਪਰਤਾਂ ਵੇਖਾਓ (ਸਾਰੀਆਂ ਪਰਤਾਂ ਨੂੰ ਮੂਲ ਹਾਲਤ ਉੱਤੇ ਮà©à©œ-ਸੈੱਟ ਕਰਨ ਲਈ ਦੋ ਵਾਰ ਕਲਿੱਕ ਕਰੋ)
+layers_label=ਪਰਤਾਂ
+thumbs.title=ਥੰਮਨੇਲ ਨੂੰ ਵੇਖਾਓ
+thumbs_label=ਥੰਮਨੇਲ
+findbar.title=ਦਸਤਾਵੇਜ਼ ਵਿੱਚ ਲੱà¨à©‹
+findbar_label=ਲੱà¨à©‹
+
+additional_layers=ਵਾਧੂ ਪਰਤਾਂ
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=ਸਫ਼ਾ {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=ਸਫ਼ਾ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} ਸਫ਼ੇ ਦਾ ਥੰਮਨੇਲ
+
+# Find panel button title and messages
+find_input.title=ਲੱà¨à©‹
+find_input.placeholder=…ਦਸਤਾਵੇਜ਼ 'ਚ ਲੱà¨à©‹
+find_previous.title=ਵਾਕ ਦੀ ਪਿਛਲੀ ਮੌਜੂਦਗੀ ਲੱà¨à©‹
+find_previous_label=ਪਿੱਛੇ
+find_next.title=ਵਾਕ ਦੀ ਅਗਲੀ ਮੌਜੂਦਗੀ ਲੱà¨à©‹
+find_next_label=ਅੱਗੇ
+find_highlight=ਸਠਉà¨à¨¾à¨°à©‹
+find_match_case_label=ਅੱਖਰ ਆਕਾਰ ਨੂੰ ਮਿਲਾਉ
+find_entire_word_label=ਪੂਰੇ ਸ਼ਬਦ
+find_reached_top=ਦਸਤਾਵੇਜ਼ ਦੇ ਉੱਤੇ ਆ ਗਠਹਾਂ, ਥੱਲੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ
+find_reached_bottom=ਦਸਤਾਵੇਜ਼ ਦੇ ਅੰਤ ਉੱਤੇ ਆ ਗਠਹਾਂ, ਉੱਤੇ ਤੋਂ ਜਾਰੀ ਰੱਖਿਆ ਹੈ
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
+find_match_count[two]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
+find_match_count[few]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
+find_match_count[many]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
+find_match_count[other]={{total}} ਵਿੱਚੋਂ {{current}} ਮੇਲ
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
+find_match_count_limit[one]={{limit}} ਮੇਲ ਤੋਂ ਵੱਧ
+find_match_count_limit[two]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
+find_match_count_limit[few]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
+find_match_count_limit[many]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
+find_match_count_limit[other]={{limit}} ਮੇਲਾਂ ਤੋਂ ਵੱਧ
+find_not_found=ਵਾਕ ਨਹੀਂ ਲੱà¨à¨¿à¨†
+
+# Error panel labels
+error_more_info=ਹੋਰ ਜਾਣਕਾਰੀ
+error_less_info=ਘੱਟ ਜਾਣਕਾਰੀ
+error_close=ਬੰਦ ਕਰੋ
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (ਬਿਲਡ: {{build}}
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=ਸà©à¨¨à©‡à¨¹à¨¾: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=ਸਟੈਕ: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ਫਾਈਲ: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=ਲਾਈਨ: {{line}}
+rendering_error=ਸਫ਼ਾ ਰੈਡਰ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ।
+
+# Predefined zoom values
+page_scale_width=ਸਫ਼ੇ ਦੀ ਚੌੜਾਈ
+page_scale_fit=ਸਫ਼ਾ ਫਿੱਟ
+page_scale_auto=ਆਟੋਮੈਟਿਕ ਜ਼ੂਮ ਕਰੋ
+page_scale_actual=ਆਟੋਮੈਟਿਕ ਆਕਾਰ
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=ਗਲਤੀ
+loading_error=PDF ਲੋਡ ਕਰਨ ਦੇ ਦੌਰਾਨ ਗਲਤੀ ਆਈ ਹੈ।
+invalid_file_error=ਗਲਤ ਜਾਂ ਨਿਕਾਰਾ PDF ਫਾਈਲ ਹੈ।
+missing_file_error=ਨਾ-ਮੌਜੂਦ PDF ਫਾਈਲ।
+unexpected_response_error=ਅਣਜਾਣ ਸਰਵਰ ਜਵਾਬ।
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} ਵਿਆਖਿਆ]
+password_label=ਇਹ PDF ਫਾਈਲ ਨੂੰ ਖੋਲà©à¨¹à¨£ ਲਈ ਪਾਸਵਰਡ ਦਿਉ।
+password_invalid=ਗਲਤ ਪਾਸਵਰਡ। ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।
+password_ok=ਠੀਕ ਹੈ
+password_cancel=ਰੱਦ ਕਰੋ
+
+printing_not_supported=ਸਾਵਧਾਨ: ਇਹ ਬਰਾਊਜ਼ਰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰà©à¨¹à¨¾à¨‚ ਸਹਾਇਕ ਨਹੀਂ ਹੈ।
+printing_not_ready=ਸਾਵਧਾਨ: PDF ਨੂੰ ਪਰਿੰਟ ਕਰਨ ਲਈ ਪੂਰੀ ਤਰà©à¨¹à¨¾à¨‚ ਲੋਡ ਨਹੀਂ ਹੈ।
+web_fonts_disabled=ਵੈਬ ਫੋਂਟ ਬੰਦ ਹਨ: ਇੰਬੈਡ PDF ਫੋਂਟ ਨੂੰ ਵਰਤਣ ਲਈ ਅਸਮਰੱਥ ਹੈ।
diff --git a/thirdparty/pdfjs/web/locale/pl/viewer.properties b/thirdparty/pdfjs/web/locale/pl/viewer.properties
new file mode 100644
index 0000000..e436f1f
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/pl/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Poprzednia strona
+previous_label=Poprzednia
+next.title=Następna strona
+next_label=Następna
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Strona
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=z {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} z {{pagesCount}})
+
+zoom_out.title=Pomniejsz
+zoom_out_label=Pomniejsz
+zoom_in.title=Powiększ
+zoom_in_label=Powiększ
+zoom.title=Skala
+presentation_mode.title=Przełącz na tryb prezentacji
+presentation_mode_label=Tryb prezentacji
+open_file.title=Otwórz plik
+open_file_label=Otwórz
+print.title=Drukuj
+print_label=Drukuj
+download.title=Pobierz
+download_label=Pobierz
+bookmark.title=Bieżąca pozycja (skopiuj lub otwórz jako odnośnik w nowym oknie)
+bookmark_label=Bieżąca pozycja
+
+# Secondary toolbar and context menu
+tools.title=Narzędzia
+tools_label=Narzędzia
+first_page.title=Przejdź do pierwszej strony
+first_page.label=Przejdź do pierwszej strony
+first_page_label=Przejdź do pierwszej strony
+last_page.title=Przejdź do ostatniej strony
+last_page.label=Przejdź do ostatniej strony
+last_page_label=Przejdź do ostatniej strony
+page_rotate_cw.title=Obróć zgodnie z ruchem wskazówek zegara
+page_rotate_cw.label=Obróć zgodnie z ruchem wskazówek zegara
+page_rotate_cw_label=Obróć zgodnie z ruchem wskazówek zegara
+page_rotate_ccw.title=Obróć przeciwnie do ruchu wskazówek zegara
+page_rotate_ccw.label=Obróć przeciwnie do ruchu wskazówek zegara
+page_rotate_ccw_label=Obróć przeciwnie do ruchu wskazówek zegara
+
+cursor_text_select_tool.title=Włącz narzędzie zaznaczania tekstu
+cursor_text_select_tool_label=Narzędzie zaznaczania tekstu
+cursor_hand_tool.title=Włącz narzędzie rączka
+cursor_hand_tool_label=Narzędzie rączka
+
+scroll_vertical.title=Przewijaj dokument w pionie
+scroll_vertical_label=Przewijanie pionowe
+scroll_horizontal.title=Przewijaj dokument w poziomie
+scroll_horizontal_label=Przewijanie poziome
+scroll_wrapped.title=Strony dokumentu wyświetlaj i przewijaj w kolumnach
+scroll_wrapped_label=Widok dwóch stron
+
+spread_none.title=Nie ustawiaj stron obok siebie
+spread_none_label=Brak kolumn
+spread_odd.title=Strony nieparzyste ustawiaj na lewo od parzystych
+spread_odd_label=Nieparzyste po lewej
+spread_even.title=Strony parzyste ustawiaj na lewo od nieparzystych
+spread_even_label=Parzyste po lewej
+
+# Document properties dialog box
+document_properties.title=Właściwości dokumentu…
+document_properties_label=Właściwości dokumentu…
+document_properties_file_name=Nazwa pliku:
+document_properties_file_size=Rozmiar pliku:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}}Â KB ({{size_b}}Â B)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}}Â MB ({{size_b}}Â B)
+document_properties_title=Tytuł:
+document_properties_author=Autor:
+document_properties_subject=Temat:
+document_properties_keywords=Słowa kluczowe:
+document_properties_creation_date=Data utworzenia:
+document_properties_modification_date=Data modyfikacji:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Utworzony przez:
+document_properties_producer=PDF wyprodukowany przez:
+document_properties_version=Wersja PDF:
+document_properties_page_count=Liczba stron:
+document_properties_page_size=Wymiary strony:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=pionowa
+document_properties_page_size_orientation_landscape=pozioma
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=US Letter
+document_properties_page_size_name_legal=US Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}}×{{height}} {{unit}} (orientacja {{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}}×{{height}} {{unit}} ({{name}}, orientacja {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Szybki podgląd w Internecie:
+document_properties_linearized_yes=tak
+document_properties_linearized_no=nie
+document_properties_close=Zamknij
+
+print_progress_message=Przygotowywanie dokumentu do druku…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Anuluj
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Przełącz panel boczny
+toggle_sidebar_notification.title=Przełącz panel boczny (dokument zawiera konspekt/załączniki)
+toggle_sidebar_notification2.title=Przełącz panel boczny (dokument zawiera konspekt/załączniki/warstwy)
+toggle_sidebar_label=Przełącz panel boczny
+document_outline.title=Konspekt dokumentu (podwójne kliknięcie rozwija lub zwija wszystkie pozycje)
+document_outline_label=Konspekt dokumentu
+attachments.title=Załączniki
+attachments_label=Załączniki
+layers.title=Warstwy (podwójne kliknięcie przywraca wszystkie warstwy do stanu domyślnego)
+layers_label=Warstwy
+thumbs.title=Miniatury
+thumbs_label=Miniatury
+findbar.title=Znajdź w dokumencie
+findbar_label=Znajdź
+
+additional_layers=Dodatkowe warstwy
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas={{page}}. strona
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}}. strona
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura {{page}}. strony
+
+# Find panel button title and messages
+find_input.title=Znajdź
+find_input.placeholder=Znajdź w dokumencie…
+find_previous.title=Znajdź poprzednie wystąpienie tekstu
+find_previous_label=Poprzednie
+find_next.title=Znajdź następne wystąpienie tekstu
+find_next_label=Następne
+find_highlight=Wyróżnianie wszystkich
+find_match_case_label=Rozróżnianie wielkości liter
+find_entire_word_label=Całe słowa
+find_reached_top=Początek dokumentu. Wyszukiwanie od końca.
+find_reached_bottom=Koniec dokumentu. Wyszukiwanie od poczÄ…tku.
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=Pierwsze z {{total}} trafień
+find_match_count[two]=Drugie z {{total}} trafień
+find_match_count[few]={{current}}. z {{total}} trafień
+find_match_count[many]={{current}}. z {{total}} trafień
+find_match_count[other]={{current}}. z {{total}} trafień
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Brak trafień.
+find_match_count_limit[one]=Więcej niż jedno trafienie.
+find_match_count_limit[two]=Więcej niż dwa trafienia.
+find_match_count_limit[few]=Więcej niż {{limit}} trafienia.
+find_match_count_limit[many]=Więcej niż {{limit}} trafień.
+find_match_count_limit[other]=Więcej niż {{limit}} trafień.
+find_not_found=Nie znaleziono tekstu
+
+# Error panel labels
+error_more_info=Więcej informacji
+error_less_info=Mniej informacji
+error_close=Zamknij
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (kompilacja: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Komunikat: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stos: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Plik: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Wiersz: {{line}}
+rendering_error=Podczas renderowania strony wystąpił błąd.
+
+# Predefined zoom values
+page_scale_width=Szerokość strony
+page_scale_fit=Dopasowanie strony
+page_scale_auto=Skala automatyczna
+page_scale_actual=Rozmiar oryginalny
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Błąd
+loading_error=Podczas wczytywania dokumentu PDF wystąpił błąd.
+invalid_file_error=Nieprawidłowy lub uszkodzony plik PDF.
+missing_file_error=Brak pliku PDF.
+unexpected_response_error=Nieoczekiwana odpowiedź serwera.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Adnotacja: {{type}}]
+password_label=Wprowadź hasło, aby otworzyć ten dokument PDF.
+password_invalid=Nieprawidłowe hasło. Proszę spróbować ponownie.
+password_ok=OK
+password_cancel=Anuluj
+
+printing_not_supported=Ostrzeżenie: drukowanie nie jest w pełni obsługiwane przez tę przeglądarkę.
+printing_not_ready=Ostrzeżenie: dokument PDF nie jest całkowicie wczytany, więc nie można go wydrukować.
+web_fonts_disabled=Czcionki sieciowe są wyłączone: nie można użyć osadzonych czcionek PDF.
diff --git a/thirdparty/pdfjs/web/locale/pt-BR/viewer.properties b/thirdparty/pdfjs/web/locale/pt-BR/viewer.properties
new file mode 100644
index 0000000..a1a5e35
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/pt-BR/viewer.properties
@@ -0,0 +1,253 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página anterior
+previous_label=Anterior
+next.title=Próxima página
+next_label=Próxima
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Página
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Reduzir
+zoom_out_label=Reduzir
+zoom_in.title=Ampliar
+zoom_in_label=Ampliar
+zoom.title=Zoom
+presentation_mode.title=Alternar para o modo de apresentação
+presentation_mode_label=Modo de apresentação
+open_file.title=Abrir arquivo
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Baixar
+download_label=Baixar
+bookmark.title=Visão atual (copiar ou abrir em nova janela)
+bookmark_label=Visualização atual
+
+# Secondary toolbar and context menu
+tools.title=Ferramentas
+tools_label=Ferramentas
+first_page.title=Ir para a primeira página
+first_page.label=Ir para a primeira página
+first_page_label=Ir para a primeira página
+last_page.title=Ir para a última página
+last_page.label=Ir para a última página
+last_page_label=Ir para a última página
+page_rotate_cw.title=Girar no sentido horário
+page_rotate_cw.label=Girar no sentido horário
+page_rotate_cw_label=Girar no sentido horário
+page_rotate_ccw.title=Girar no sentido anti-horário
+page_rotate_ccw.label=Girar no sentido anti-horário
+page_rotate_ccw_label=Girar no sentido anti-horário
+
+cursor_text_select_tool.title=Ativar a ferramenta de seleção de texto
+cursor_text_select_tool_label=Ferramenta de seleção de texto
+cursor_hand_tool.title=Ativar ferramenta de mão
+cursor_hand_tool_label=Ferramenta de mão
+
+scroll_vertical.title=Usar rolagem vertical
+scroll_vertical_label=Rolagem vertical
+scroll_horizontal.title=Usar rolagem horizontal
+scroll_horizontal_label=Rolagem horizontal
+scroll_wrapped.title=Usar rolagem contida
+scroll_wrapped_label=Rolagem contida
+
+spread_none.title=Não reagrupar páginas
+spread_none_label=Não estender
+spread_odd.title=Agrupar páginas começando em páginas com números Ãmpares
+spread_odd_label=Estender Ãmpares
+spread_even.title=Agrupar páginas começando em páginas com números pares
+spread_even_label=Estender pares
+
+# Document properties dialog box
+document_properties.title=Propriedades do documento…
+document_properties_label=Propriedades do documento…
+document_properties_file_name=Nome do arquivo:
+document_properties_file_size=Tamanho do arquivo:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=TÃtulo:
+document_properties_author=Autor:
+document_properties_subject=Assunto:
+document_properties_keywords=Palavras-chave:
+document_properties_creation_date=Data da criação:
+document_properties_modification_date=Data da modificação:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Criação:
+document_properties_producer=Criador do PDF:
+document_properties_version=Versão do PDF:
+document_properties_page_count=Número de páginas:
+document_properties_page_size=Tamanho da página:
+document_properties_page_size_unit_inches=pol.
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=retrato
+document_properties_page_size_orientation_landscape=paisagem
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=JurÃdico
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Exibição rápida da web:
+document_properties_linearized_yes=Sim
+document_properties_linearized_no=Não
+document_properties_close=Fechar
+
+print_progress_message=Preparando documento para impressão…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}} %
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Exibir/ocultar painel
+toggle_sidebar_notification.title=Exibir/ocultar o painel (documento contém estrutura/anexos)
+toggle_sidebar_notification2.title=Exibir/ocultar o painel (documento contém estrutura/anexos/camadas)
+toggle_sidebar_label=Exibir/ocultar painel
+document_outline.title=Mostrar a estrutura do documento (dê um duplo-clique para expandir/recolher todos os itens)
+document_outline_label=Estrutura do documento
+attachments.title=Mostrar anexos
+attachments_label=Anexos
+layers.title=Exibir camadas (duplo-clique para redefinir todas as camadas ao estado predefinido)
+layers_label=Camadas
+thumbs.title=Mostrar miniaturas
+thumbs_label=Miniaturas
+current_outline_item.title=Encontrar item atual da estrutura
+current_outline_item_label=Item atual da estrutura
+findbar.title=Procurar no documento
+findbar_label=Procurar
+
+additional_layers=Camadas adicionais
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Página {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Página {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura da página {{page}}
+
+# Find panel button title and messages
+find_input.title=Procurar
+find_input.placeholder=Procurar no documento…
+find_previous.title=Procurar a ocorrência anterior da frase
+find_previous_label=Anterior
+find_next.title=Procurar a próxima ocorrência da frase
+find_next_label=Próxima
+find_highlight=Destacar tudo
+find_match_case_label=Diferenciar maiúsculas/minúsculas
+find_entire_word_label=Palavras completas
+find_reached_top=InÃcio do documento alcançado, continuando do fim
+find_reached_bottom=Fim do documento alcançado, continuando do inÃcio
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} ocorrência
+find_match_count[two]={{current}} de {{total}} ocorrências
+find_match_count[few]={{current}} de {{total}} ocorrências
+find_match_count[many]={{current}} de {{total}} ocorrências
+find_match_count[other]={{current}} de {{total}} ocorrências
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mais de {{limit}} ocorrências
+find_match_count_limit[one]=Mais de {{limit}} ocorrência
+find_match_count_limit[two]=Mais de {{limit}} ocorrências
+find_match_count_limit[few]=Mais de {{limit}} ocorrências
+find_match_count_limit[many]=Mais de {{limit}} ocorrências
+find_match_count_limit[other]=Mais de {{limit}} ocorrências
+find_not_found=Frase não encontrada
+
+# Error panel labels
+error_more_info=Mais informações
+error_less_info=Menos informações
+error_close=Fechar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (compilação: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensagem: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Pilha: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Arquivo: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linha: {{line}}
+rendering_error=Ocorreu um erro ao renderizar a página.
+
+# Predefined zoom values
+page_scale_width=Largura da página
+page_scale_fit=Ajustar à janela
+page_scale_auto=Zoom automático
+page_scale_actual=Tamanho real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Erro
+loading_error=Ocorreu um erro ao carregar o PDF.
+invalid_file_error=Arquivo PDF corrompido ou inválido.
+missing_file_error=Arquivo PDF ausente.
+unexpected_response_error=Resposta inesperada do servidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotação {{type}}]
+password_label=Forneça a senha para abrir este arquivo PDF.
+password_invalid=Senha inválida. Tente novamente.
+password_ok=OK
+password_cancel=Cancelar
+
+printing_not_supported=Aviso: a impressão não é totalmente suportada neste navegador.
+printing_not_ready=Aviso: o PDF não está totalmente carregado para impressão.
+web_fonts_disabled=As fontes web estão desativadas: não foi possÃvel usar fontes incorporadas do PDF.
diff --git a/thirdparty/pdfjs/web/locale/pt-PT/viewer.properties b/thirdparty/pdfjs/web/locale/pt-PT/viewer.properties
new file mode 100644
index 0000000..de11bb5
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/pt-PT/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Página anterior
+previous_label=Anterior
+next.title=Página seguinte
+next_label=Seguinte
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Página
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=de {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} de {{pagesCount}})
+
+zoom_out.title=Reduzir
+zoom_out_label=Reduzir
+zoom_in.title=Ampliar
+zoom_in_label=Ampliar
+zoom.title=Zoom
+presentation_mode.title=Trocar para o modo de apresentação
+presentation_mode_label=Modo de apresentação
+open_file.title=Abrir ficheiro
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Transferir
+download_label=Transferir
+bookmark.title=Vista atual (copiar ou abrir numa nova janela)
+bookmark_label=Visão atual
+
+# Secondary toolbar and context menu
+tools.title=Ferramentas
+tools_label=Ferramentas
+first_page.title=Ir para a primeira página
+first_page.label=Ir para a primeira página
+first_page_label=Ir para a primeira página
+last_page.title=Ir para a última página
+last_page.label=Ir para a última página
+last_page_label=Ir para a última página
+page_rotate_cw.title=Rodar à direita
+page_rotate_cw.label=Rodar à direita
+page_rotate_cw_label=Rodar à direita
+page_rotate_ccw.title=Rodar à esquerda
+page_rotate_ccw.label=Rodar à esquerda
+page_rotate_ccw_label=Rodar à esquerda
+
+cursor_text_select_tool.title=Ativar ferramenta de seleção de texto
+cursor_text_select_tool_label=Ferramenta de seleção de texto
+cursor_hand_tool.title=Ativar ferramenta de mão
+cursor_hand_tool_label=Ferramenta de mão
+
+scroll_vertical.title=Utilizar deslocação vertical
+scroll_vertical_label=Deslocação vertical
+scroll_horizontal.title=Utilizar deslocação horizontal
+scroll_horizontal_label=Deslocação horizontal
+scroll_wrapped.title=Utilizar deslocação encapsulada
+scroll_wrapped_label=Deslocação encapsulada
+
+spread_none.title=Não juntar páginas dispersas
+spread_none_label=Sem spreads
+spread_odd.title=Juntar páginas dispersas a partir de páginas com números Ãmpares
+spread_odd_label=Spreads Ãmpares
+spread_even.title=Juntar páginas dispersas a partir de páginas com números pares
+spread_even_label=Spreads pares
+
+# Document properties dialog box
+document_properties.title=Propriedades do documento…
+document_properties_label=Propriedades do documento…
+document_properties_file_name=Nome do ficheiro:
+document_properties_file_size=Tamanho do ficheiro:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=TÃtulo:
+document_properties_author=Autor:
+document_properties_subject=Assunto:
+document_properties_keywords=Palavras-chave:
+document_properties_creation_date=Data de criação:
+document_properties_modification_date=Data de modificação:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Criador:
+document_properties_producer=Produtor de PDF:
+document_properties_version=Versão do PDF:
+document_properties_page_count=N.º de páginas:
+document_properties_page_size=Tamanho da página:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=retrato
+document_properties_page_size_orientation_landscape=paisagem
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Carta
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista rápida web:
+document_properties_linearized_yes=Sim
+document_properties_linearized_no=Não
+document_properties_close=Fechar
+
+print_progress_message=A preparar o documento para impressão…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Cancelar
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Alternar barra lateral
+toggle_sidebar_notification.title=Alternar barra lateral (documento contém contorno/anexos)
+toggle_sidebar_notification2.title=Alternar barra lateral (o documento contém contornos/anexos/camadas)
+toggle_sidebar_label=Alternar barra lateral
+document_outline.title=Mostrar esquema do documento (duplo clique para expandir/colapsar todos os itens)
+document_outline_label=Esquema do documento
+attachments.title=Mostrar anexos
+attachments_label=Anexos
+layers.title=Mostrar camadas (clique duas vezes para repor todas as camadas para o estado predefinido)
+layers_label=Camadas
+thumbs.title=Mostrar miniaturas
+thumbs_label=Miniaturas
+findbar.title=Localizar em documento
+findbar_label=Localizar
+
+additional_layers=Camadas adicionais
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Página {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Página {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura da página {{page}}
+
+# Find panel button title and messages
+find_input.title=Localizar
+find_input.placeholder=Localizar em documento…
+find_previous.title=Localizar ocorrência anterior da frase
+find_previous_label=Anterior
+find_next.title=Localizar ocorrência seguinte da frase
+find_next_label=Seguinte
+find_highlight=Destacar tudo
+find_match_case_label=Correspondência
+find_entire_word_label=Palavras completas
+find_reached_top=Topo do documento atingido, a continuar a partir do fundo
+find_reached_bottom=Fim do documento atingido, a continuar a partir do topo
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} de {{total}} correspondência
+find_match_count[two]={{current}} de {{total}} correspondências
+find_match_count[few]={{current}} de {{total}} correspondências
+find_match_count[many]={{current}} de {{total}} correspondências
+find_match_count[other]={{current}} de {{total}} correspondências
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mais de {{limit}} correspondências
+find_match_count_limit[one]=Mais de {{limit}} correspondência
+find_match_count_limit[two]=Mais de {{limit}} correspondências
+find_match_count_limit[few]=Mais de {{limit}} correspondências
+find_match_count_limit[many]=Mais de {{limit}} correspondências
+find_match_count_limit[other]=Mais de {{limit}} correspondências
+find_not_found=Frase não encontrada
+
+# Error panel labels
+error_more_info=Mais informação
+error_less_info=Menos informação
+error_close=Fechar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (compilação: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensagem: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Ficheiro: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linha: {{line}}
+rendering_error=Ocorreu um erro ao processar a página.
+
+# Predefined zoom values
+page_scale_width=Ajustar à largura
+page_scale_fit=Ajustar à página
+page_scale_auto=Zoom automático
+page_scale_actual=Tamanho real
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Erro
+loading_error=Ocorreu um erro ao carregar o PDF.
+invalid_file_error=Ficheiro PDF inválido ou danificado.
+missing_file_error=Ficheiro PDF inexistente.
+unexpected_response_error=Resposta inesperada do servidor.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotação {{type}}]
+password_label=Introduza a palavra-passe para abrir este ficheiro PDF.
+password_invalid=Palavra-passe inválida. Por favor, tente novamente.
+password_ok=OK
+password_cancel=Cancelar
+
+printing_not_supported=Aviso: a impressão não é totalmente suportada por este navegador.
+printing_not_ready=Aviso: o PDF ainda não está totalmente carregado.
+web_fonts_disabled=Os tipos de letra web estão desativados: não é possÃvel utilizar os tipos de letra PDF embutidos.
diff --git a/thirdparty/pdfjs/web/locale/rm/viewer.properties b/thirdparty/pdfjs/web/locale/rm/viewer.properties
new file mode 100644
index 0000000..f63af0f
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/rm/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pagina precedenta
+previous_label=Enavos
+next.title=Proxima pagina
+next_label=Enavant
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pagina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=da {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} da {{pagesCount}})
+
+zoom_out.title=Empitschnir
+zoom_out_label=Empitschnir
+zoom_in.title=Engrondir
+zoom_in_label=Engrondir
+zoom.title=Zoom
+presentation_mode.title=Midar en il modus da preschentaziun
+presentation_mode_label=Modus da preschentaziun
+open_file.title=Avrir datoteca
+open_file_label=Avrir
+print.title=Stampar
+print_label=Stampar
+download.title=Telechargiar
+download_label=Telechargiar
+bookmark.title=Vista actuala (copiar u avrir en ina nova fanestra)
+bookmark_label=Vista actuala
+
+# Secondary toolbar and context menu
+tools.title=Utensils
+tools_label=Utensils
+first_page.title=Siglir a l'emprima pagina
+first_page.label=Siglir a l'emprima pagina
+first_page_label=Siglir a l'emprima pagina
+last_page.title=Siglir a la davosa pagina
+last_page.label=Siglir a la davosa pagina
+last_page_label=Siglir a la davosa pagina
+page_rotate_cw.title=Rotar en direcziun da l'ura
+page_rotate_cw.label=Rotar en direcziun da l'ura
+page_rotate_cw_label=Rotar en direcziun da l'ura
+page_rotate_ccw.title=Rotar en direcziun cuntraria a l'ura
+page_rotate_ccw.label=Rotar en direcziun cuntraria a l'ura
+page_rotate_ccw_label=Rotar en direcziun cuntraria a l'ura
+
+cursor_text_select_tool.title=Activar l'utensil per selecziunar text
+cursor_text_select_tool_label=Utensil per selecziunar text
+cursor_hand_tool.title=Activar l'utensil da maun
+cursor_hand_tool_label=Utensil da maun
+
+scroll_vertical.title=Utilisar il defilar vertical
+scroll_vertical_label=Defilar vertical
+scroll_horizontal.title=Utilisar il defilar orizontal
+scroll_horizontal_label=Defilar orizontal
+scroll_wrapped.title=Utilisar il defilar en colonnas
+scroll_wrapped_label=Defilar en colonnas
+
+spread_none.title=Betg parallelisar las paginas
+spread_none_label=Betg parallel
+spread_odd.title=Parallelisar las paginas cun cumenzar cun paginas spèras
+spread_odd_label=Parallel spèr
+spread_even.title=Parallelisar las paginas cun cumenzar cun paginas pèras
+spread_even_label=Parallel pèr
+
+# Document properties dialog box
+document_properties.title=Caracteristicas dal document…
+document_properties_label=Caracteristicas dal document…
+document_properties_file_name=Num da la datoteca:
+document_properties_file_size=Grondezza da la datoteca:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Titel:
+document_properties_author=Autur:
+document_properties_subject=Tema:
+document_properties_keywords=Chavazzins:
+document_properties_creation_date=Data da creaziun:
+document_properties_modification_date=Data da modificaziun:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}} {{time}}
+document_properties_creator=Creà da:
+document_properties_producer=Creà il PDF cun:
+document_properties_version=Versiun da PDF:
+document_properties_page_count=Dumber da paginas:
+document_properties_page_size=Grondezza da la pagina:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=vertical
+document_properties_page_size_orientation_landscape=orizontal
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Gea
+document_properties_linearized_no=Na
+document_properties_close=Serrar
+
+print_progress_message=Preparar il document per stampar…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Interrumper
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Activar/deactivar la trav laterala
+toggle_sidebar_notification.title=Activar/deactivar la trav laterala (structura dal document/agiuntas)
+toggle_sidebar_notification2.title=Activar/deactivar la trav laterala (il document cuntegna structura dal document/agiuntas/nivels)
+toggle_sidebar_label=Activar/deactivar la trav laterala
+document_outline.title=Mussar la structura dal document (cliccar duas giadas per extender/cumprimer tut ils elements)
+document_outline_label=Structura dal document
+attachments.title=Mussar agiuntas
+attachments_label=Agiuntas
+layers.title=Mussar ils nivels (cliccar dubel per restaurar il stadi da standard da tut ils nivels)
+layers_label=Nivels
+thumbs.title=Mussar las miniaturas
+thumbs_label=Miniaturas
+findbar.title=Tschertgar en il document
+findbar_label=Tschertgar
+
+additional_layers=Nivels supplementars
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Pagina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pagina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura da la pagina {{page}}
+
+# Find panel button title and messages
+find_input.title=Tschertgar
+find_input.placeholder=Tschertgar en il document…
+find_previous.title=Tschertgar la posiziun precedenta da l'expressiun
+find_previous_label=Enavos
+find_next.title=Tschertgar la proxima posiziun da l'expressiun
+find_next_label=Enavant
+find_highlight=Relevar tuts
+find_match_case_label=Resguardar maiusclas/minusclas
+find_entire_word_label=Pleds entirs
+find_reached_top=Il cumenzament dal document è cuntanschì, la tschertga cuntinuescha a la fin dal document
+find_reached_bottom=La fin dal document è cuntanschì, la tschertga cuntinuescha al cumenzament dal document
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} dad {{total}} correspundenza
+find_match_count[two]={{current}} da {{total}} correspundenzas
+find_match_count[few]={{current}} da {{total}} correspundenzas
+find_match_count[many]={{current}} da {{total}} correspundenzas
+find_match_count[other]={{current}} da {{total}} correspundenzas
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Dapli che {{limit}} correspundenzas
+find_match_count_limit[one]=Dapli che {{limit}} correspundenza
+find_match_count_limit[two]=Dapli che {{limit}} correspundenzas
+find_match_count_limit[few]=Dapli che {{limit}} correspundenzas
+find_match_count_limit[many]=Dapli che {{limit}} correspundenzas
+find_match_count_limit[other]=Dapli che {{limit}} correspundenzas
+find_not_found=Impussibel da chattar l'expressiun
+
+# Error panel labels
+error_more_info=Dapli infurmaziuns
+error_less_info=Damain infurmaziuns
+error_close=Serrar
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Messadi: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Datoteca: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Lingia: {{line}}
+rendering_error=Ina errur è cumparida cun visualisar questa pagina.
+
+# Predefined zoom values
+page_scale_width=Ladezza da la pagina
+page_scale_fit=Entira pagina
+page_scale_auto=Zoom automatic
+page_scale_actual=Grondezza actuala
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Errur
+loading_error=Ina errur è cumparida cun chargiar il PDF.
+invalid_file_error=Datoteca PDF nunvalida u donnegiada.
+missing_file_error=Datoteca PDF manconta.
+unexpected_response_error=Resposta nunspetgada dal server.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Annotaziun da {{type}}]
+password_label=Endatescha il pled-clav per avrir questa datoteca da PDF.
+password_invalid=Pled-clav nunvalid. Emprova anc ina giada.
+password_ok=OK
+password_cancel=Interrumper
+
+printing_not_supported=Attenziun: Il stampar na funcziunescha anc betg dal tut en quest navigatur.
+printing_not_ready=Attenziun: Il PDF n'è betg chargià cumplettamain per stampar.
+web_fonts_disabled=Scrittiras dal web èn deactivadas: impussibel dad utilisar las scrittiras integradas en il PDF.
diff --git a/thirdparty/pdfjs/web/locale/ro/viewer.properties b/thirdparty/pdfjs/web/locale/ro/viewer.properties
new file mode 100644
index 0000000..0e4fbf7
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/ro/viewer.properties
@@ -0,0 +1,247 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pagina precedentă
+previous_label=ÃŽnapoi
+next.title=Pagina următoare
+next_label=ÃŽnainte
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pagina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=din {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} din {{pagesCount}})
+
+zoom_out.title=Micșorează
+zoom_out_label=Micșorează
+zoom_in.title=Mărește
+zoom_in_label=Mărește
+zoom.title=Zoom
+presentation_mode.title=Comută la modul de prezentare
+presentation_mode_label=Mod de prezentare
+open_file.title=Deschide un fișier
+open_file_label=Deschide
+print.title=Tipărește
+print_label=Tipărește
+download.title=Descarcă
+download_label=Descarcă
+bookmark.title=Vizualizare actuală (copiază sau deschide într-o fereastră nouă)
+bookmark_label=Vizualizare actuală
+
+# Secondary toolbar and context menu
+tools.title=Instrumente
+tools_label=Instrumente
+first_page.title=Mergi la prima pagină
+first_page.label=Mergi la prima pagină
+first_page_label=Mergi la prima pagină
+last_page.title=Mergi la ultima pagină
+last_page.label=Mergi la ultima pagină
+last_page_label=Mergi la ultima pagină
+page_rotate_cw.title=Rotește în sensul acelor de ceas
+page_rotate_cw.label=Rotește în sensul acelor de ceas
+page_rotate_cw_label=Rotește în sensul acelor de ceas
+page_rotate_ccw.title=Rotește în sens invers al acelor de ceas
+page_rotate_ccw.label=Rotește în sens invers al acelor de ceas
+page_rotate_ccw_label=Rotește în sens invers al acelor de ceas
+
+cursor_text_select_tool.title=Activează instrumentul de selecție a textului
+cursor_text_select_tool_label=Instrumentul de selecție a textului
+cursor_hand_tool.title=Activează instrumentul mână
+cursor_hand_tool_label=Unealta mână
+
+scroll_vertical.title=Folosește derularea verticală
+scroll_vertical_label=Derulare verticală
+scroll_horizontal.title=Folosește derularea orizontală
+scroll_horizontal_label=Derulare orizontală
+scroll_wrapped.title=Folosește derularea încadrată
+scroll_wrapped_label=Derulare încadrată
+
+spread_none.title=Nu uni paginile broșate
+spread_none_label=Fără pagini broșate
+spread_odd.title=Unește paginile broșate începând cu cele impare
+spread_odd_label=Broșare pagini impare
+spread_even.title=Unește paginile broșate începând cu cele pare
+spread_even_label=Broșare pagini pare
+
+# Document properties dialog box
+document_properties.title=Proprietățile documentului…
+document_properties_label=Proprietățile documentului…
+document_properties_file_name=Numele fișierului:
+document_properties_file_size=Mărimea fișierului:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} byți)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} byți)
+document_properties_title=Titlu:
+document_properties_author=Autor:
+document_properties_subject=Subiect:
+document_properties_keywords=Cuvinte cheie:
+document_properties_creation_date=Data creării:
+document_properties_modification_date=Data modificării:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Autor:
+document_properties_producer=Producător PDF:
+document_properties_version=Versiune PDF:
+document_properties_page_count=Număr de pagini:
+document_properties_page_size=Mărimea paginii:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=verticală
+document_properties_page_size_orientation_landscape=orizontală
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Literă
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vizualizare web rapidă:
+document_properties_linearized_yes=Da
+document_properties_linearized_no=Nu
+document_properties_close=ÃŽnchide
+
+print_progress_message=Se pregătește documentul pentru tipărire…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Renunță
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Comută bara laterală
+toggle_sidebar_notification.title=Comută bara laterală (documentul conține schițe/atașamente)
+toggle_sidebar_label=Comută bara laterală
+document_outline.title=Afișează schița documentului (dublu-clic pentru a extinde/restrânge toate elementele)
+document_outline_label=Schița documentului
+attachments.title=Afișează atașamentele
+attachments_label=Atașamente
+thumbs.title=Afișează miniaturi
+thumbs_label=Miniaturi
+findbar.title=Caută în document
+findbar_label=Caută
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Pagina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pagina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura paginii {{page}}
+
+# Find panel button title and messages
+find_input.title=Caută
+find_input.placeholder=Caută în document…
+find_previous.title=Mergi la apariția anterioară a textului
+find_previous_label=ÃŽnapoi
+find_next.title=Mergi la apariția următoare a textului
+find_next_label=ÃŽnainte
+find_highlight=Evidențiază toate aparițiile
+find_match_case_label=Ține cont de majuscule și minuscule
+find_entire_word_label=Cuvinte întregi
+find_reached_top=Am ajuns la începutul documentului, continuă de la sfârșit
+find_reached_bottom=Am ajuns la sfârșitul documentului, continuă de la început
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} din {{total}} rezultat
+find_match_count[two]={{current}} din {{total}} rezultate
+find_match_count[few]={{current}} din {{total}} rezultate
+find_match_count[many]={{current}} din {{total}} de rezultate
+find_match_count[other]={{current}} din {{total}} de rezultate
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Peste {{limit}} rezultate
+find_match_count_limit[one]=Peste {{limit}} rezultat
+find_match_count_limit[two]=Peste {{limit}} rezultate
+find_match_count_limit[few]=Peste {{limit}} rezultate
+find_match_count_limit[many]=Peste {{limit}} de rezultate
+find_match_count_limit[other]=Peste {{limit}} de rezultate
+find_not_found=Nu s-a găsit textul
+
+# Error panel labels
+error_more_info=Mai multe informații
+error_less_info=Mai puține informații
+error_close=ÃŽnchide
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (versiunea compilată: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mesaj: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stivă: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fișier: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rând: {{line}}
+rendering_error=A intervenit o eroare la randarea paginii.
+
+# Predefined zoom values
+page_scale_width=Lățime pagină
+page_scale_fit=Potrivire la pagină
+page_scale_auto=Zoom automat
+page_scale_actual=Mărime reală
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Eroare
+loading_error=A intervenit o eroare la încărcarea PDF-ului.
+invalid_file_error=Fișier PDF nevalid sau corupt.
+missing_file_error=Fișier PDF lipsă.
+unexpected_response_error=Răspuns neașteptat de la server.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Adnotare {{type}}]
+password_label=Introdu parola pentru a deschide acest fișier PDF.
+password_invalid=Parolă nevalidă. Te rugăm să încerci din nou.
+password_ok=Ok
+password_cancel=Renunță
+
+printing_not_supported=Avertisment: Tipărirea nu este suportată în totalitate de acest browser.
+printing_not_ready=Avertisment: PDF-ul nu este încărcat complet pentru tipărire.
+web_fonts_disabled=Fonturile web sunt dezactivate: nu se pot folosi fonturile PDF încorporate.
diff --git a/thirdparty/pdfjs/web/locale/ru/viewer.properties b/thirdparty/pdfjs/web/locale/ru/viewer.properties
new file mode 100644
index 0000000..25e4390
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/ru/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ñтраница
+previous_label=ПредыдущаÑ
+next.title=Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ñтраница
+next_label=СледующаÑ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Страница
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=из {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} из {{pagesCount}})
+
+zoom_out.title=Уменьшить
+zoom_out_label=Уменьшить
+zoom_in.title=Увеличить
+zoom_in_label=Увеличить
+zoom.title=МаÑштаб
+presentation_mode.title=Перейти в режим презентации
+presentation_mode_label=Режим презентации
+open_file.title=Открыть файл
+open_file_label=Открыть
+print.title=Печать
+print_label=Печать
+download.title=Загрузить
+download_label=Загрузить
+bookmark.title=СÑылка на текущий вид (Ñкопировать или открыть в новом окне)
+bookmark_label=Текущий вид
+
+# Secondary toolbar and context menu
+tools.title=ИнÑтрументы
+tools_label=ИнÑтрументы
+first_page.title=Перейти на первую Ñтраницу
+first_page.label=Перейти на первую Ñтраницу
+first_page_label=Перейти на первую Ñтраницу
+last_page.title=Перейти на поÑледнюю Ñтраницу
+last_page.label=Перейти на поÑледнюю Ñтраницу
+last_page_label=Перейти на поÑледнюю Ñтраницу
+page_rotate_cw.title=Повернуть по чаÑовой Ñтрелке
+page_rotate_cw.label=Повернуть по чаÑовой Ñтрелке
+page_rotate_cw_label=Повернуть по чаÑовой Ñтрелке
+page_rotate_ccw.title=Повернуть против чаÑовой Ñтрелки
+page_rotate_ccw.label=Повернуть против чаÑовой Ñтрелки
+page_rotate_ccw_label=Повернуть против чаÑовой Ñтрелки
+
+cursor_text_select_tool.title=Включить ИнÑтрумент «Выделение текÑта»
+cursor_text_select_tool_label=ИнÑтрумент «Выделение текÑта»
+cursor_hand_tool.title=Включить ИнÑтрумент «Рука»
+cursor_hand_tool_label=ИнÑтрумент «Рука»
+
+scroll_vertical.title=ИÑпользовать вертикальную прокрутку
+scroll_vertical_label=Ð’ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ°
+scroll_horizontal.title=ИÑпользовать горизонтальную прокрутку
+scroll_horizontal_label=Ð“Ð¾Ñ€Ð¸Ð·Ð¾Ð½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ°
+scroll_wrapped.title=ИÑпользовать маÑштабируемую прокрутку
+scroll_wrapped_label=МаÑÑˆÑ‚Ð°Ð±Ð¸Ñ€ÑƒÐµÐ¼Ð°Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ°
+
+spread_none.title=Ðе иÑпользовать режим разворотов Ñтраниц
+spread_none_label=Без разворотов Ñтраниц
+spread_odd.title=Развороты начинаютÑÑ Ñ Ð½ÐµÑ‡Ñ‘Ñ‚Ð½Ñ‹Ñ… номеров Ñтраниц
+spread_odd_label=Ðечётные Ñтраницы Ñлева
+spread_even.title=Развороты начинаютÑÑ Ñ Ñ‡Ñ‘Ñ‚Ð½Ñ‹Ñ… номеров Ñтраниц
+spread_even_label=Чётные Ñтраницы Ñлева
+
+# Document properties dialog box
+document_properties.title=СвойÑтва документа…
+document_properties_label=СвойÑтва документа…
+document_properties_file_name=Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°:
+document_properties_file_size=Размер файла:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} КБ ({{size_b}} байт)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} МБ ({{size_b}} байт)
+document_properties_title=Заголовок:
+document_properties_author=Ðвтор:
+document_properties_subject=Тема:
+document_properties_keywords=Ключевые Ñлова:
+document_properties_creation_date=Дата ÑозданиÑ:
+document_properties_modification_date=Дата изменениÑ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Приложение:
+document_properties_producer=Производитель PDF:
+document_properties_version=ВерÑÐ¸Ñ PDF:
+document_properties_page_count=ЧиÑло Ñтраниц:
+document_properties_page_size=Размер Ñтраницы:
+document_properties_page_size_unit_inches=дюймов
+document_properties_page_size_unit_millimeters=мм
+document_properties_page_size_orientation_portrait=книжнаÑ
+document_properties_page_size_orientation_landscape=альбомнаÑ
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=БыÑтрый проÑмотр в Web:
+document_properties_linearized_yes=Да
+document_properties_linearized_no=Ðет
+document_properties_close=Закрыть
+
+print_progress_message=Подготовка документа к печати…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Отмена
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Показать/Ñкрыть боковую панель
+toggle_sidebar_notification.title=Показать/Ñкрыть боковую панель (документ имеет Ñодержание/вложениÑ)
+toggle_sidebar_notification2.title=Показать/Ñкрыть боковую панель (документ имеет Ñодержание/вложениÑ/Ñлои)
+toggle_sidebar_label=Показать/Ñкрыть боковую панель
+document_outline.title=Показать Ñодержание документа (двойной щелчок, чтобы развернуть/Ñвернуть вÑе Ñлементы)
+document_outline_label=Содержание документа
+attachments.title=Показать вложениÑ
+attachments_label=ВложениÑ
+layers.title=Показать Ñлои (дважды щёлкните, чтобы ÑброÑить вÑе Ñлои к ÑоÑтоÑнию по умолчанию)
+layers_label=Слои
+thumbs.title=Показать миниатюры
+thumbs_label=Миниатюры
+findbar.title=Ðайти в документе
+findbar_label=Ðайти
+
+additional_layers=Дополнительные Ñлои
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Страница {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Страница {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Миниатюра Ñтраницы {{page}}
+
+# Find panel button title and messages
+find_input.title=Ðайти
+find_input.placeholder=Ðайти в документе…
+find_previous.title=Ðайти предыдущее вхождение фразы в текÑÑ‚
+find_previous_label=Ðазад
+find_next.title=Ðайти Ñледующее вхождение фразы в текÑÑ‚
+find_next_label=Далее
+find_highlight=ПодÑветить вÑе
+find_match_case_label=С учётом региÑтра
+find_entire_word_label=Слова целиком
+find_reached_top=ДоÑтигнут верх документа, продолжено Ñнизу
+find_reached_bottom=ДоÑтигнут конец документа, продолжено Ñверху
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} из {{total}} ÑовпадениÑ
+find_match_count[two]={{current}} из {{total}} Ñовпадений
+find_match_count[few]={{current}} из {{total}} Ñовпадений
+find_match_count[many]={{current}} из {{total}} Ñовпадений
+find_match_count[other]={{current}} из {{total}} Ñовпадений
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Более {{limit}} Ñовпадений
+find_match_count_limit[one]=Более {{limit}} ÑовпадениÑ
+find_match_count_limit[two]=Более {{limit}} Ñовпадений
+find_match_count_limit[few]=Более {{limit}} Ñовпадений
+find_match_count_limit[many]=Более {{limit}} Ñовпадений
+find_match_count_limit[other]=Более {{limit}} Ñовпадений
+find_not_found=Фраза не найдена
+
+# Error panel labels
+error_more_info=Детали
+error_less_info=Скрыть детали
+error_close=Закрыть
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (Ñборка: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Сообщение: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Стeк: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Файл: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Строка: {{line}}
+rendering_error=При Ñоздании Ñтраницы произошла ошибка.
+
+# Predefined zoom values
+page_scale_width=По ширине Ñтраницы
+page_scale_fit=По размеру Ñтраницы
+page_scale_auto=ÐвтоматичеÑки
+page_scale_actual=Реальный размер
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Ошибка
+loading_error=При загрузке PDF произошла ошибка.
+invalid_file_error=Ðекорректный или повреждённый PDF-файл.
+missing_file_error=PDF-файл отÑутÑтвует.
+unexpected_response_error=Ðеожиданный ответ Ñервера.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[ÐÐ½Ð½Ð¾Ñ‚Ð°Ñ†Ð¸Ñ {{type}}]
+password_label=Введите пароль, чтобы открыть Ñтот PDF-файл.
+password_invalid=Ðеверный пароль. ПожалуйÑта, попробуйте Ñнова.
+password_ok=OK
+password_cancel=Отмена
+
+printing_not_supported=Предупреждение: Ð’ Ñтом браузере не полноÑтью поддерживаетÑÑ Ð¿ÐµÑ‡Ð°Ñ‚ÑŒ.
+printing_not_ready=Предупреждение: PDF не полноÑтью загружен Ð´Ð»Ñ Ð¿ÐµÑ‡Ð°Ñ‚Ð¸.
+web_fonts_disabled=Веб-шрифты отключены: не удалоÑÑŒ задейÑтвовать вÑтроенные PDF-шрифты.
diff --git a/thirdparty/pdfjs/web/locale/scn/viewer.properties b/thirdparty/pdfjs/web/locale/scn/viewer.properties
new file mode 100644
index 0000000..e9a650a
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/scn/viewer.properties
@@ -0,0 +1,101 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom_out.title=Cchiù nicu
+zoom_out_label=Cchiù nicu
+zoom_in.title=Cchiù granni
+zoom_in_label=Cchiù granni
+
+# Secondary toolbar and context menu
+
+
+
+
+# Document properties dialog box
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Vista web lesta:
+document_properties_linearized_yes=Se
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_close=Sfai
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+
+# Find panel button title and messages
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+
+# Error panel labels
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+
+# Predefined zoom values
+page_scale_width=Larghizza dâ pà ggina
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+
+# Loading indicator messages
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+password_cancel=Sfai
+
diff --git a/thirdparty/pdfjs/web/locale/si/viewer.properties b/thirdparty/pdfjs/web/locale/si/viewer.properties
new file mode 100644
index 0000000..9a1d1e8
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/si/viewer.properties
@@ -0,0 +1,207 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=මීට පෙර පිටුව
+previous_label=පෙර
+next.title=මීළඟ පිටුව
+next_label=මීළඟ
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=පිටුව
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom_out.title=කුඩ෠කරන්න
+zoom_out_label=කුඩ෠කරන්න
+zoom_in.title=විà·à·à¶½ කරන්න
+zoom_in_label=විà·à·à¶½ කරන්න
+zoom.title=විà·à·à¶½à¶«à¶º
+presentation_mode.title=ඉදිරිපà¶à·Šà¶šà·’රීම් à¶´à·Šâ€à¶»à¶šà·à¶»à¶º වෙචමà·à¶»à·”වන්න
+presentation_mode_label=ඉදිරිපà¶à·Šà¶šà·’රීම් à¶´à·Šâ€à¶»à¶šà·à¶»à¶º
+open_file.title=ගොනුව විවෘචකරන්න
+open_file_label=විවෘචකරන්න
+print.title=මුද්â€à¶»à¶«à¶º
+print_label=මුද්â€à¶»à¶«à¶º
+download.title=à¶¶à·à¶œà¶±à·Šà¶±
+download_label=à¶¶à·à¶œà¶±à·Šà¶±
+bookmark.title=දà·à¶±à¶§ ඇà¶à·’ දසුන (à¶´à·’à¶§à¶´à¶à·Š කරන්න හ෠නව කවුළුවක විවෘචකරන්න)
+bookmark_label=දà·à¶±à¶§ ඇà¶à·’ දසුන
+
+# Secondary toolbar and context menu
+tools.title=මෙවලම්
+tools_label=මෙවලම්
+first_page.title=මුල් පිටුවට යන්න
+first_page.label=මුල් පිටුවට යන්න
+first_page_label=මුල් පිටුවට යන්න
+last_page.title=අවසන් පිටුවට යන්න
+last_page.label=අවසන් පිටුවට යන්න
+last_page_label=අවසන් පිටුවට යන්න
+page_rotate_cw.title=දක්à·à·’à¶«à·à·€à¶»à·Šà¶à·€ à¶·à·Šâ€à¶»à¶¸à¶«à¶º
+page_rotate_cw.label=දක්à·à·’à¶«à·à·€à¶»à·Šà¶à·€ à¶·à·Šâ€à¶»à¶¸à¶«à¶º
+page_rotate_cw_label=දක්à·à·’à¶«à·à·€à¶»à·Šà¶à·€ à¶·à·Šâ€à¶»à¶¸à¶«à¶º
+page_rotate_ccw.title=à·€à·à¶¸à·à·€à¶»à·Šà¶à·€ à¶·à·Šâ€à¶»à¶¸à¶«à¶º
+page_rotate_ccw.label=à·€à·à¶¸à·à·€à¶»à·Šà¶à·€ à¶·à·Šâ€à¶»à¶¸à¶«à¶º
+page_rotate_ccw_label=à·€à·à¶¸à·à·€à¶»à·Šà¶à·€ à¶·à·Šâ€à¶»à¶¸à¶«à¶º
+
+cursor_hand_tool_label=à¶…à¶à·Š මෙවලම
+
+
+
+# Document properties dialog box
+document_properties.title=ලේඛන à·€à¶à·Šà¶šà¶¸à·Š...
+document_properties_label=ලේඛන à·€à¶à·Šà¶šà¶¸à·Š...
+document_properties_file_name=ගොනු නම:
+document_properties_file_size=ගොනු à¶´à·Šâ€à¶»à¶¸à·à¶«à¶º:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} බයිට)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} බයිට)
+document_properties_title=සිරස්à¶à¶½à¶º:
+document_properties_author=à¶šà¶à·²
+document_properties_subject=මà·à¶à·˜à¶šà·à·€:
+document_properties_keywords=යà¶à·”රු වදන්:
+document_properties_creation_date=නිර්මිචදිනය:
+document_properties_modification_date=වෙනස්කල දිනය:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=නිර්මà·à¶´à¶š:
+document_properties_producer=PDF නිà·à·Šà¶´à·à¶¯à¶š:
+document_properties_version=PDF නිකුà¶à·”à·€:
+document_properties_page_count=පිටු ගණන:
+document_properties_page_size=පිටුවේ විà·à·à¶½à¶à·Šà·€à¶º:
+document_properties_page_size_unit_inches=අඟල්
+document_properties_page_size_unit_millimeters=මිමි
+document_properties_page_size_orientation_portrait=සිරස්
+document_properties_page_size_orientation_landscape=à¶à·’රස්
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}}×{{height}}{{unit}}{{name}}{{orientation}}
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=වේගවà¶à·Š à¶¢à·à¶½ දසුන:
+document_properties_linearized_yes=ඔව්
+document_properties_linearized_no=à¶±à·à·„à·
+document_properties_close=වසන්න
+
+print_progress_message=ලේඛනය මුද්â€à¶»à¶«à¶º සඳහ෠සූදà·à¶±à¶¸à·Š කරමින්…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=අවලංගු කරන්න
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=à¶´à·à¶à·’ à¶à·“රුවට මà·à¶»à·”වන්න
+toggle_sidebar_label=à¶´à·à¶à·’ à¶à·“රුවට මà·à¶»à·”වන්න
+document_outline_label=ලේඛනයේ à¶´à·’à¶§ මà·à¶ºà·’ම
+attachments.title=ඇමිණුම් පෙන්වන්න
+attachments_label=ඇමිණුම්
+thumbs.title=සිඟිà¶à·’ රූ පෙන්වන්න
+thumbs_label=සිඟිà¶à·’ රූ
+findbar.title=ලේඛනය à¶à·”à·… සොයන්න
+findbar_label=සොයන්න
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=පිටුව {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=පිටුවෙ සිඟිචරූව {{page}}
+
+# Find panel button title and messages
+find_input.title=සොයන්න
+find_previous.title=මේ à·€à·à¶šà·Šâ€à¶º ඛණ්ඩය මීට පෙර යෙදුණු ස්ථà·à¶±à¶º සොයන්න
+find_previous_label=පෙර:
+find_next.title=මේ à·€à·à¶šà·Šâ€à¶º ඛණ්ඩය මීළඟට යෙදෙන ස්ථà·à¶±à¶º සොයන්න
+find_next_label=මීළඟ
+find_highlight=සියල්ල උද්දීපනය
+find_match_case_label=අකුරු ගළපන්න
+find_entire_word_label=සම්පූර්ණ වචන
+find_reached_top=පිටුවේ ඉහළ කෙළවරට ලගà·à·€à·’ය, à¶´à·„à·… සිට ඉදිරියට යමින්
+find_reached_bottom=පිටුවේ à¶´à·„à·… කෙළවරට ලගà·à·€à·’ය, ඉහළ සිට ඉදිරියට යමින්
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit[zero]=à¶œà·à¶½à¶´à·”ම් {{limit}} à¶§ වඩà·
+find_not_found=ඔබ සෙව් වචන හමු නොවීය
+
+# Error panel labels
+error_more_info=බොහ෠à¶à·œà¶»à¶à·”රු
+error_less_info=අවම à¶à·œà¶»à¶à·”රු
+error_close=වසන්න
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (නිකුà¶à·”à·€: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=පණිවිඩය: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ගොනුව: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=පේළිය: {{line}}
+rendering_error=පිටුව රෙන්ඩර් විමේදි à¶œà·à¶§à¶½à·”වක් à·„à¶§ à¶œà·à¶±à·”à¶«à·’.
+
+# Predefined zoom values
+page_scale_width=පිටුවේ පළල
+page_scale_fit=පිටුවට සුදුසු ලෙස
+page_scale_auto=ස්වයංක්â€à¶»à·“ය විà·à·à¶½à¶«à¶º
+page_scale_actual=නියමිචප්â€à¶»à¶¸à·à¶«à¶º
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=දà·à·‚ය
+loading_error=PDF පූරණය විමේදි දà·à·‚යක් à·„à¶§ à¶œà·à¶±à·”à¶«à·’.
+invalid_file_error=දූà·à·’à¶ à·„à· à·ƒà·à·€à¶¯à·Šâ€à¶º PDF ගොනුව.
+missing_file_error=à¶±à·à¶à·’වූ PDF ගොනුව.
+unexpected_response_error=à¶¶à¶½à·à¶´à·œà¶»à·œà¶à·Šà¶à·” නොවූ සේවà·à¶¯à·à¶ºà¶š à¶´à·Šâ€à¶»à¶à·’à¶ à·à¶»à¶º.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} විස්à¶à¶»à¶º]
+password_label=මෙම PDF ගොනුව විවෘචකිරීමට මුරපදය ඇà¶à·”à·…à¶à·Š කරන්න.
+password_invalid=à·€à·à¶»à¶¯à·’ මුරපදයක්. කරුණà·à¶šà¶» à¶±à·à·€à¶ à¶‹à¶à·Šà·ƒà·„ කරන්න.
+password_ok=හරි
+password_cancel=à¶‘à¶´à·
+
+printing_not_supported=අවවà·à¶¯à¶ºà¶ºà·’: මෙම ගවේà·à¶šà¶º මුද්â€à¶»à¶«à¶º සඳහ෠සම්පූර්ණයෙන් සහය නොදක්වයි.
+printing_not_ready=අවවà·à¶¯à¶ºà¶ºà·’: මුද්â€à¶»à¶«à¶º සඳහ෠PDF සම්පූර්ණයෙන් පූර්ණය වී නොමà·à¶.
+web_fonts_disabled=à¶¢à·à¶½ අකුරු à¶…à¶šà·Šâ€à¶»à·“යයි: à¶à·’à·…à·à¶½à·’ PDF අකුරු à¶·à·à·€à·’à¶ à¶šà·… නොහà·à¶š.
diff --git a/thirdparty/pdfjs/web/locale/sk/viewer.properties b/thirdparty/pdfjs/web/locale/sk/viewer.properties
new file mode 100644
index 0000000..888303e
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/sk/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Predchádzajúca strana
+previous_label=Predchádzajúca
+next.title=Nasledujúca strana
+next_label=Nasledujúca
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Strana
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=z {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} z {{pagesCount}})
+
+zoom_out.title=Zmenšiť veľkosť
+zoom_out_label=Zmenšiť veľkosť
+zoom_in.title=ZväÄÅ¡iÅ¥ veľkosÅ¥
+zoom_in_label=ZväÄÅ¡iÅ¥ veľkosÅ¥
+zoom.title=Nastavenie veľkosti
+presentation_mode.title=Prepnúť na režim prezentácie
+presentation_mode_label=Režim prezentácie
+open_file.title=Otvoriť súbor
+open_file_label=Otvoriť
+print.title=TlaÄiÅ¥
+print_label=TlaÄiÅ¥
+download.title=Prevziať
+download_label=Prevziať
+bookmark.title=Aktuálne zobrazenie (kopÃrovaÅ¥ alebo otvoriÅ¥ v novom okne)
+bookmark_label=Aktuálne zobrazenie
+
+# Secondary toolbar and context menu
+tools.title=Nástroje
+tools_label=Nástroje
+first_page.title=Prejsť na prvú stranu
+first_page.label=Prejsť na prvú stranu
+first_page_label=Prejsť na prvú stranu
+last_page.title=Prejsť na poslednú stranu
+last_page.label=Prejsť na poslednú stranu
+last_page_label=Prejsť na poslednú stranu
+page_rotate_cw.title=OtoÄiÅ¥ v smere hodinových ruÄiÄiek
+page_rotate_cw.label=OtoÄiÅ¥ v smere hodinových ruÄiÄiek
+page_rotate_cw_label=OtoÄiÅ¥ v smere hodinových ruÄiÄiek
+page_rotate_ccw.title=OtoÄiÅ¥ proti smeru hodinových ruÄiÄiek
+page_rotate_ccw.label=OtoÄiÅ¥ proti smeru hodinových ruÄiÄiek
+page_rotate_ccw_label=OtoÄiÅ¥ proti smeru hodinových ruÄiÄiek
+
+cursor_text_select_tool.title=Povoliť výber textu
+cursor_text_select_tool_label=Výber textu
+cursor_hand_tool.title=Povoliť nástroj ruka
+cursor_hand_tool_label=Nástroj ruka
+
+scroll_vertical.title=PoužÃvaÅ¥ zvislé posúvanie
+scroll_vertical_label=Zvislé posúvanie
+scroll_horizontal.title=PoužÃvaÅ¥ vodorovné posúvanie
+scroll_horizontal_label=Vodorovné posúvanie
+scroll_wrapped.title=Použiť postupné posúvanie
+scroll_wrapped_label=Postupné posúvanie
+
+spread_none.title=Nezdružovať stránky
+spread_none_label=Žiadne združovanie
+spread_odd.title=Združà stránky a umiestni nepárne stránky vľavo
+spread_odd_label=Združiť stránky (nepárne vľavo)
+spread_even.title=Združà stránky a umiestni párne stránky vľavo
+spread_even_label=Združiť stránky (párne vľavo)
+
+# Document properties dialog box
+document_properties.title=Vlastnosti dokumentu…
+document_properties_label=Vlastnosti dokumentu…
+document_properties_file_name=Názov súboru:
+document_properties_file_size=Veľkosť súboru:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kB ({{size_b}} bajtov)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajtov)
+document_properties_title=Názov:
+document_properties_author=Autor:
+document_properties_subject=Predmet:
+document_properties_keywords=KľúÄové slová:
+document_properties_creation_date=Dátum vytvorenia:
+document_properties_modification_date=Dátum úpravy:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Vytvoril:
+document_properties_producer=Tvorca PDF:
+document_properties_version=Verzia PDF:
+document_properties_page_count=PoÄet strán:
+document_properties_page_size=Veľkosť stránky:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=na výšku
+document_properties_page_size_orientation_landscape=na Å¡Ãrku
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=List
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Rýchle Web View:
+document_properties_linearized_yes=Ãno
+document_properties_linearized_no=Nie
+document_properties_close=Zavrieť
+
+print_progress_message=PrÃprava dokumentu na tlaÄ…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Zrušiť
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Prepnúť boÄný panel
+toggle_sidebar_notification.title=Prepnúť boÄný panel (dokument obsahuje osnovu/prÃlohy)
+toggle_sidebar_notification2.title=Prepnúť boÄný panel (dokument obsahuje osnovu/prÃlohy/vrstvy)
+toggle_sidebar_label=Prepnúť boÄný panel
+document_outline.title=ZobraziÅ¥ osnovu dokumentu (dvojitým kliknutÃm rozbalÃte/zbalÃte vÅ¡etky položky)
+document_outline_label=Osnova dokumentu
+attachments.title=ZobraziÅ¥ prÃlohy
+attachments_label=PrÃlohy
+layers.title=ZobraziÅ¥ vrstvy (dvojitým kliknutÃm uvediete vÅ¡etky vrstvy do pôvodného stavu)
+layers_label=Vrstvy
+thumbs.title=Zobraziť miniatúry
+thumbs_label=Miniatúry
+findbar.title=Hľadať v dokumente
+findbar_label=Hľadať
+
+additional_layers=Ďalšie vrstvy
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Strana {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Strana {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatúra strany {{page}}
+
+# Find panel button title and messages
+find_input.title=Hľadať
+find_input.placeholder=Hľadať v dokumente…
+find_previous.title=Vyhľadať predchádzajúci výskyt reťazca
+find_previous_label=Predchádzajúce
+find_next.title=VyhľadaÅ¥ Äalšà výskyt reÅ¥azca
+find_next_label=Ďalšie
+find_highlight=Zvýrazniť všetky
+find_match_case_label=RozliÅ¡ovaÅ¥ veľkosÅ¥ pÃsmen
+find_entire_word_label=Celé slová
+find_reached_top=Bol dosiahnutý zaÄiatok stránky, pokraÄuje sa od konca
+find_reached_bottom=Bol dosiahnutý koniec stránky, pokraÄuje sa od zaÄiatku
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}}. z {{total}} výsledku
+find_match_count[two]={{current}}. z {{total}} výsledkov
+find_match_count[few]={{current}}. z {{total}} výsledkov
+find_match_count[many]={{current}}. z {{total}} výsledkov
+find_match_count[other]={{current}}. z {{total}} výsledkov
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Viac než {{limit}} výsledkov
+find_match_count_limit[one]=Viac než {{limit}} výsledok
+find_match_count_limit[two]=Viac než {{limit}} výsledky
+find_match_count_limit[few]=Viac než {{limit}} výsledky
+find_match_count_limit[many]=Viac než {{limit}} výsledkov
+find_match_count_limit[other]=Viac než {{limit}} výsledkov
+find_not_found=Výraz nebol nájdený
+
+# Error panel labels
+error_more_info=Viac informáciÃ
+error_less_info=Menej informáciÃ
+error_close=Zavrieť
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (zostavenie: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Správa: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=ZásobnÃk: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Súbor: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Riadok: {{line}}
+rendering_error=Pri vykresľovanà stránky sa vyskytla chyba.
+
+# Predefined zoom values
+page_scale_width=Na Å¡Ãrku strany
+page_scale_fit=Na veľkosť strany
+page_scale_auto=Automatická veľkosť
+page_scale_actual=SkutoÄná veľkosÅ¥
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading_error_indicator=Chyba
+loading_error=PoÄas naÄÃtavania dokumentu PDF sa vyskytla chyba.
+invalid_file_error=Neplatný alebo poškodený súbor PDF.
+missing_file_error=Chýbajúci súbor PDF.
+unexpected_response_error=NeoÄakávaná odpoveÄ zo servera.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotácia typu {{type}}]
+password_label=Ak chcete otvoriť tento súbor PDF, zadajte jeho heslo.
+password_invalid=Heslo nie je platné. Skúste to znova.
+password_ok=OK
+password_cancel=Zrušiť
+
+printing_not_supported=Upozornenie: tlaÄ nie je v tomto prehliadaÄi plne podporovaná.
+printing_not_ready=Upozornenie: súbor PDF nie je plne naÄÃtaný pre tlaÄ.
+web_fonts_disabled=Webové pÃsma sú vypnuté: nie je možné použiÅ¥ pÃsma vložené do súboru PDF.
diff --git a/thirdparty/pdfjs/web/locale/sl/viewer.properties b/thirdparty/pdfjs/web/locale/sl/viewer.properties
new file mode 100644
index 0000000..274d962
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/sl/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Prejšnja stran
+previous_label=Nazaj
+next.title=Naslednja stran
+next_label=Naprej
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Stran
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=od {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} od {{pagesCount}})
+
+zoom_out.title=Pomanjšaj
+zoom_out_label=Pomanjšaj
+zoom_in.title=PoveÄaj
+zoom_in_label=PoveÄaj
+zoom.title=PoveÄava
+presentation_mode.title=Preklopi v naÄin predstavitve
+presentation_mode_label=NaÄin predstavitve
+open_file.title=Odpri datoteko
+open_file_label=Odpri
+print.title=Natisni
+print_label=Natisni
+download.title=Prenesi
+download_label=Prenesi
+bookmark.title=Trenutni pogled (kopiraj ali odpri v novem oknu)
+bookmark_label=Trenutni pogled
+
+# Secondary toolbar and context menu
+tools.title=Orodja
+tools_label=Orodja
+first_page.title=Pojdi na prvo stran
+first_page.label=Pojdi na prvo stran
+first_page_label=Pojdi na prvo stran
+last_page.title=Pojdi na zadnjo stran
+last_page.label=Pojdi na zadnjo stran
+last_page_label=Pojdi na zadnjo stran
+page_rotate_cw.title=Zavrti v smeri urnega kazalca
+page_rotate_cw.label=Zavrti v smeri urnega kazalca
+page_rotate_cw_label=Zavrti v smeri urnega kazalca
+page_rotate_ccw.title=Zavrti v nasprotni smeri urnega kazalca
+page_rotate_ccw.label=Zavrti v nasprotni smeri urnega kazalca
+page_rotate_ccw_label=Zavrti v nasprotni smeri urnega kazalca
+
+cursor_text_select_tool.title=OmogoÄi orodje za izbor besedila
+cursor_text_select_tool_label=Orodje za izbor besedila
+cursor_hand_tool.title=OmogoÄi roko
+cursor_hand_tool_label=Roka
+
+scroll_vertical.title=Uporabi navpiÄno drsenje
+scroll_vertical_label=NavpiÄno drsenje
+scroll_horizontal.title=Uporabi vodoravno drsenje
+scroll_horizontal_label=Vodoravno drsenje
+scroll_wrapped.title=Uporabi ovito drsenje
+scroll_wrapped_label=Ovito drsenje
+
+spread_none.title=Ne združuj razponov strani
+spread_none_label=Brez razponov
+spread_odd.title=Združuj razpone strani z zaÄetkom pri lihih straneh
+spread_odd_label=Lihi razponi
+spread_even.title=Združuj razpone strani z zaÄetkom pri sodih straneh
+spread_even_label=Sodi razponi
+
+# Document properties dialog box
+document_properties.title=Lastnosti dokumenta …
+document_properties_label=Lastnosti dokumenta …
+document_properties_file_name=Ime datoteke:
+document_properties_file_size=Velikost datoteke:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajtov)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajtov)
+document_properties_title=Ime:
+document_properties_author=Avtor:
+document_properties_subject=Tema:
+document_properties_keywords=KljuÄne besede:
+document_properties_creation_date=Datum nastanka:
+document_properties_modification_date=Datum spremembe:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Ustvaril:
+document_properties_producer=Izdelovalec PDF:
+document_properties_version=RazliÄica PDF:
+document_properties_page_count=Å tevilo strani:
+document_properties_page_size=Velikost strani:
+document_properties_page_size_unit_inches=palcev
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=pokonÄno
+document_properties_page_size_orientation_landscape=ležeÄe
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Pismo
+document_properties_page_size_name_legal=Pravno
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Hitri spletni ogled:
+document_properties_linearized_yes=Da
+document_properties_linearized_no=Ne
+document_properties_close=Zapri
+
+print_progress_message=Priprava dokumenta na tiskanje …
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}} %
+print_progress_close=PrekliÄi
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Preklopi stransko vrstico
+toggle_sidebar_notification.title=Preklopi stransko vrstico (dokument vsebuje oris/priponke)
+toggle_sidebar_notification2.title=Preklopi stransko vrstico (dokument vsebuje oris/priponke/plasti)
+toggle_sidebar_label=Preklopi stransko vrstico
+document_outline.title=Prikaži oris dokumenta (dvokliknite za razširitev/strnitev vseh predmetov)
+document_outline_label=Oris dokumenta
+attachments.title=Prikaži priponke
+attachments_label=Priponke
+layers.title=Prikaži plasti (dvokliknite za ponastavitev vseh plasti na privzeto stanje)
+layers_label=Plasti
+thumbs.title=Prikaži sliÄice
+thumbs_label=SliÄice
+findbar.title=Iskanje po dokumentu
+findbar_label=Najdi
+
+additional_layers=Dodatne plasti
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Stran {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Stran {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=SliÄica strani {{page}}
+
+# Find panel button title and messages
+find_input.title=Najdi
+find_input.placeholder=Najdi v dokumentu …
+find_previous.title=Najdi prejšnjo ponovitev iskanega
+find_previous_label=Najdi nazaj
+find_next.title=Najdi naslednjo ponovitev iskanega
+find_next_label=Najdi naprej
+find_highlight=OznaÄi vse
+find_match_case_label=Razlikuj velike/male Ärke
+find_entire_word_label=Cele besede
+find_reached_top=Dosežen zaÄetek dokumenta iz smeri konca
+find_reached_bottom=Doseženo konec dokumenta iz smeri zaÄetka
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=Zadetek {{current}} od {{total}}
+find_match_count[two]=Zadetek {{current}} od {{total}}
+find_match_count[few]=Zadetek {{current}} od {{total}}
+find_match_count[many]=Zadetek {{current}} od {{total}}
+find_match_count[other]=Zadetek {{current}} od {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=VeÄ kot {{limit}} zadetkov
+find_match_count_limit[one]=VeÄ kot {{limit}} zadetek
+find_match_count_limit[two]=VeÄ kot {{limit}} zadetka
+find_match_count_limit[few]=VeÄ kot {{limit}} zadetki
+find_match_count_limit[many]=VeÄ kot {{limit}} zadetkov
+find_match_count_limit[other]=VeÄ kot {{limit}} zadetkov
+find_not_found=Iskanega ni mogoÄe najti
+
+# Error panel labels
+error_more_info=VeÄ informacij
+error_less_info=Manj informacij
+error_close=Zapri
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js r{{version}} (graditev: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=SporoÄilo: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Sklad: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Datoteka: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Vrstica: {{line}}
+rendering_error=Med pripravljanjem strani je prišlo do napake!
+
+# Predefined zoom values
+page_scale_width=Å irina strani
+page_scale_fit=Prilagodi stran
+page_scale_auto=Samodejno
+page_scale_actual=Dejanska velikost
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}} %
+
+# Loading indicator messages
+loading_error_indicator=Napaka
+loading_error=Med nalaganjem datoteke PDF je prišlo do napake.
+invalid_file_error=Neveljavna ali pokvarjena datoteka PDF.
+missing_file_error=Ni datoteke PDF.
+unexpected_response_error=NepriÄakovan odgovor strežnika.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Opomba vrste {{type}}]
+password_label=Vnesite geslo za odpiranje te datoteke PDF.
+password_invalid=Neveljavno geslo. Poskusite znova.
+password_ok=V redu
+password_cancel=PrekliÄi
+
+printing_not_supported=Opozorilo: ta brskalnik ne podpira vseh možnosti tiskanja.
+printing_not_ready=Opozorilo: PDF ni v celoti naložen za tiskanje.
+web_fonts_disabled=Spletne pisave so onemogoÄene: vgradnih pisav za PDF ni mogoÄe uporabiti.
diff --git a/thirdparty/pdfjs/web/locale/son/viewer.properties b/thirdparty/pdfjs/web/locale/son/viewer.properties
new file mode 100644
index 0000000..683ed14
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/son/viewer.properties
@@ -0,0 +1,179 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Moo bisante
+previous_label=Bisante
+next.title=Jinehere moo
+next_label=Jine
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Moo
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} ra
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} ka hun {{pagesCount}}) ra
+
+zoom_out.title=Nakasandi
+zoom_out_label=Nakasandi
+zoom_in.title=Bebbeerandi
+zoom_in_label=Bebbeerandi
+zoom.title=Bebbeerandi
+presentation_mode.title=Bere cebeyan alhaali
+presentation_mode_label=Cebeyan alhaali
+open_file.title=Tuku feeri
+open_file_label=Feeri
+print.title=Kar
+print_label=Kar
+download.title=Zumandi
+download_label=Zumandi
+bookmark.title=Sohõ gunarro (bere wala feeri zanfun taaga ra)
+bookmark_label=Sohõ gunaroo
+
+# Secondary toolbar and context menu
+tools.title=Goyjinawey
+tools_label=Goyjinawey
+first_page.title=Koy moo jinaa ga
+first_page.label=Koy moo jinaa ga
+first_page_label=Koy moo jinaa ga
+last_page.title=Koy moo koraa ga
+last_page.label=Koy moo koraa ga
+last_page_label=Koy moo koraa ga
+page_rotate_cw.title=Kuubi kanbe guma here
+page_rotate_cw.label=Kuubi kanbe guma here
+page_rotate_cw_label=Kuubi kanbe guma here
+page_rotate_ccw.title=Kuubi kanbe wowa here
+page_rotate_ccw.label=Kuubi kanbe wowa here
+page_rotate_ccw_label=Kuubi kanbe wowa here
+
+
+# Document properties dialog box
+document_properties.title=Takadda mayrawey…
+document_properties_label=Takadda mayrawey…
+document_properties_file_name=Tuku maa:
+document_properties_file_size=Tuku adadu:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb=KB {{size_kb}} (cebsu-ize {{size_b}})
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb=MB {{size_mb}} (cebsu-ize {{size_b}})
+document_properties_title=Tiiramaa:
+document_properties_author=Hantumkaw:
+document_properties_subject=Dalil:
+document_properties_keywords=Kufalkalimawey:
+document_properties_creation_date=Teeyan han:
+document_properties_modification_date=Barmayan han:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Teekaw:
+document_properties_producer=PDF berandikaw:
+document_properties_version=PDF dumi:
+document_properties_page_count=Moo hinna:
+document_properties_close=Daabu
+
+print_progress_message=Goo ma takaddaa soolu k'a kar se…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Naŋ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Kanjari ceraw zuu
+toggle_sidebar_notification.title=Kanjari ceraw-zuu (takaddaa goo nda filla-boŋ/hangandiyaŋ)
+toggle_sidebar_label=Kanjari ceraw zuu
+document_outline.title=Takaddaa korfur alhaaloo cebe (naagu cee hinka ka haya-izey kul hayandi/kankamandi)
+document_outline_label=Takadda filla-boŋ
+attachments.title=Hangarey cebe
+attachments_label=Hangarey
+thumbs.title=Kabeboy biyey cebe
+thumbs_label=Kabeboy biyey
+findbar.title=Ceeci takaddaa ra
+findbar_label=Ceeci
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} moo
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Kabeboy bii {{page}} moo še
+
+# Find panel button title and messages
+find_input.title=Ceeci
+find_input.placeholder=Ceeci takaddaa ra…
+find_previous.title=Kalimaɲaŋoo bangayri bisantaa ceeci
+find_previous_label=Bisante
+find_next.title=Kalimaɲaŋoo hiino bangayroo ceeci
+find_next_label=Jine
+find_highlight=Ikul šilbay
+find_match_case_label=Harfu-beeriyan hawgay
+find_reached_top=A too moŋoo boŋoo, koy jine ka šinitin nda cewoo
+find_reached_bottom=A too moɲoo cewoo, koy jine šintioo ga
+find_not_found=Kalimaɲaa mana duwandi
+
+# Error panel labels
+error_more_info=Alhabar tontoni
+error_less_info=Alhabar tontoni
+error_close=Daabu
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Alhabar: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Dekeri: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Tuku: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Žeeri: {{line}}
+rendering_error=Firka bangay kaŋ moɲoo goo ma willandi.
+
+# Predefined zoom values
+page_scale_width=Mooo hayyan
+page_scale_fit=Moo sawayan
+page_scale_auto=Boŋše azzaati barmayyan
+page_scale_actual=Adadu cimi
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Firka
+loading_error=Firka bangay kaŋ PDF goo ma zumandi.
+invalid_file_error=PDF tuku laala wala laybante.
+missing_file_error=PDF tuku kumante.
+unexpected_response_error=Manti feršikaw tuuruyan maatante.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt={{type}} maasa-caw]
+password_label=Å ennikufal dam ka PDF tukoo woo feeri.
+password_invalid=Å ennikufal laalo. Ceeci koyne taare.
+password_ok=Ayyo
+password_cancel=Naŋ
+
+printing_not_supported=Yaamar: Karyan ši tee ka timme nda ceecikaa woo.
+printing_not_ready=Yaamar: PDF ši zunbu ka timme karyan še.
+web_fonts_disabled=Interneti šigirawey kay: ši hin ka goy nda PDF šigira hurantey.
diff --git a/thirdparty/pdfjs/web/locale/sq/viewer.properties b/thirdparty/pdfjs/web/locale/sq/viewer.properties
new file mode 100644
index 0000000..516cb96
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/sq/viewer.properties
@@ -0,0 +1,244 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Faqja e Mëparshme
+previous_label=E mëparshmja
+next.title=Faqja Pasuese
+next_label=Pasuesja
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Faqe
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=nga {{pagesCount}} gjithsej
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} nga {{pagesCount}})
+
+zoom_out.title=Zvogëlojeni
+zoom_out_label=Zvogëlojeni
+zoom_in.title=Zmadhojeni
+zoom_in_label=Zmadhojini
+zoom.title=Zoom
+presentation_mode.title=Kalo te Mënyra Paraqitje
+presentation_mode_label=Mënyra Paraqitje
+open_file.title=Hapni Kartelë
+open_file_label=Hape
+print.title=Shtypje
+print_label=Shtype
+download.title=Shkarkim
+download_label=Shkarkoje
+bookmark.title=Pamja e tanishme (kopjojeni ose hapeni në dritare të re)
+bookmark_label=Pamja e Tanishme
+
+# Secondary toolbar and context menu
+tools.title=Mjete
+tools_label=Mjete
+first_page.title=Kaloni te Faqja e Parë
+first_page.label=Kaloni te Faqja e Parë
+first_page_label=Kaloni te Faqja e Parë
+last_page.title=Kaloni te Faqja e Fundit
+last_page.label=Kaloni te Faqja e Fundit
+last_page_label=Kaloni te Faqja e Fundit
+page_rotate_cw.title=Rrotullojeni Në Kahun Orar
+page_rotate_cw.label=Rrotulloje Në Kahun Orar
+page_rotate_cw_label=Rrotulloje Në Kahun Orar
+page_rotate_ccw.title=Rrotullojeni Në Kahun Kundërorar
+page_rotate_ccw.label=Rrotulloje Në Kahun Kundërorar
+page_rotate_ccw_label=Rrotulloje Në Kahun Kundërorar
+
+cursor_text_select_tool.title=Aktivizo Mjet Përzgjedhjeje Teksti
+cursor_text_select_tool_label=Mjet Përzgjedhjeje Teksti
+cursor_hand_tool.title=Aktivizo Mjetin Dorë
+cursor_hand_tool_label=Mjeti Dorë
+
+scroll_vertical.title=Përdor Rrëshqitje Vertikale
+scroll_vertical_label=Rrëshqitje Vertikale
+scroll_horizontal.title=Përdor Rrëshqitje Horizontale
+scroll_horizontal_label=Rrëshqitje Horizontale
+scroll_wrapped.title=Përdor Rrëshqitje Me Mbështjellje
+scroll_wrapped_label=Rrëshqitje Me Mbështjellje
+
+
+# Document properties dialog box
+document_properties.title=Veti Dokumenti…
+document_properties_label=Veti Dokumenti…
+document_properties_file_name=Emër kartele:
+document_properties_file_size=Madhësi kartele:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bajte)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bajte)
+document_properties_title=Titull:
+document_properties_author=Autor:
+document_properties_subject=Subjekt:
+document_properties_keywords=Fjalëkyçe:
+document_properties_creation_date=Datë Krijimi:
+document_properties_modification_date=Datë Ndryshimi:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Krijues:
+document_properties_producer=Prodhues PDF-je:
+document_properties_version=Version PDF-je:
+document_properties_page_count=Numër Faqesh:
+document_properties_page_size=Madhësi Faqeje:
+document_properties_page_size_unit_inches=inç
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=portret
+document_properties_page_size_orientation_landscape=së gjeri
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=Po
+document_properties_linearized_no=Jo
+document_properties_close=Mbylleni
+
+print_progress_message=Po përgatitet dokumenti për shtypje…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Anuloje
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Shfaqni/Fshihni Anështyllën
+toggle_sidebar_notification.title=Shfaqni Anështyllën (dokumenti përmban përvijim/bashkëngjitje)
+toggle_sidebar_notification2.title=Hap/Mbyll Anështylë (dokumenti përmban përvijim/nashkëngjitje/shtresa)
+toggle_sidebar_label=Shfaq/Fshih Anështyllën
+document_outline.title=Shfaqni Përvijim Dokumenti (dyklikoni që të shfaqen/fshihen krejt elementët)
+document_outline_label=Përvijim Dokumenti
+attachments.title=Shfaqni Bashkëngjitje
+attachments_label=Bashkëngjitje
+layers.title=Shfaq Shtresa (dyklikoni që të rikthehen krejt shtresat në gjendjen e tyre parazgjedhje)
+layers_label=Shtresa
+thumbs.title=Shfaqni Miniatura
+thumbs_label=Miniatura
+findbar.title=Gjeni në Dokument
+findbar_label=Gjej
+
+additional_layers=Shtresa Shtesë
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Faqja {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Faqja {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniaturë e Faqes {{page}}
+
+# Find panel button title and messages
+find_input.title=Gjej
+find_input.placeholder=Gjeni në dokument…
+find_previous.title=Gjeni hasjen e mëparshme të togfjalëshit
+find_previous_label=E mëparshmja
+find_next.title=Gjeni hasjen pasuese të togfjalëshit
+find_next_label=Pasuesja
+find_highlight=Theksoji të tëra
+find_match_case_label=Siç është shkruar
+find_entire_word_label=Krejt fjalët
+find_reached_top=U mbërrit në krye të dokumentit, vazhduar prej fundit
+find_reached_bottom=U mbërrit në fund të dokumentit, vazhduar prej kreut
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} nga {{total}} përputhje gjithsej
+find_match_count[two]={{current}} nga {{total}} përputhje gjithsej
+find_match_count[few]={{current}} nga {{total}} përputhje gjithsej
+find_match_count[many]={{current}} nga {{total}} përputhje gjithsej
+find_match_count[other]={{current}} nga {{total}} përputhje gjithsej
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Më shumë se {{limit}} përputhje
+find_match_count_limit[one]=Më shumë se {{limit}} përputhje
+find_match_count_limit[two]=Më shumë se {{limit}} përputhje
+find_match_count_limit[few]=Më shumë se {{limit}} përputhje
+find_match_count_limit[many]=Më shumë se {{limit}} përputhje
+find_match_count_limit[other]=Më shumë se {{limit}} përputhje
+find_not_found=Togfjalësh që s’gjendet
+
+# Error panel labels
+error_more_info=Më Tepër të Dhëna
+error_less_info=Më Pak të Dhëna
+error_close=Mbylleni
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mesazh: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Kartelë: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rresht: {{line}}
+rendering_error=Ndodhi një gabim gjatë riprodhimit të faqes.
+
+# Predefined zoom values
+page_scale_width=Gjerësi Faqeje
+page_scale_fit=Sa Nxë Faqja
+page_scale_auto=Zoom i Vetvetishëm
+page_scale_actual=Madhësia Faktike
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Gabim
+loading_error=Ndodhi një gabim gjatë ngarkimit të PDF-së.
+invalid_file_error=Kartelë PDF e pavlefshme ose e dëmtuar.
+missing_file_error=Kartelë PDF që mungon.
+unexpected_response_error=Përgjigje shërbyesi e papritur.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Nënvizim {{type}}]
+password_label=Jepni fjalëkalimin që të hapet kjo kartelë PDF.
+password_invalid=Fjalëkalim i pavlefshëm. Ju lutemi, riprovoni.
+password_ok=OK
+password_cancel=Anuloje
+
+printing_not_supported=Kujdes: Shtypja s’mbulohet plotësisht nga ky shfletues.
+printing_not_ready=Kujdes: PDF-ja s’është ngarkuar plotësisht që ta shtypni.
+web_fonts_disabled=Shkronjat Web janë të çaktivizuara: s’arrihet të përdoren shkronja të trupëzuara në PDF.
diff --git a/thirdparty/pdfjs/web/locale/sr/viewer.properties b/thirdparty/pdfjs/web/locale/sr/viewer.properties
new file mode 100644
index 0000000..edcf7ba
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/sr/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Претходна Ñтраница
+previous_label=Претходна
+next.title=Следећа Ñтраница
+next_label=Следећа
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Страница
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=од {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} од {{pagesCount}})
+
+zoom_out.title=Умањи
+zoom_out_label=Умањи
+zoom_in.title=Увеличај
+zoom_in_label=Увеличај
+zoom.title=Увеличавање
+presentation_mode.title=Промени на приказ у режиму презентације
+presentation_mode_label=Режим презентације
+open_file.title=Отвори датотеку
+open_file_label=Отвори
+print.title=Штампај
+print_label=Штампај
+download.title=Преузми
+download_label=Преузми
+bookmark.title=Тренутни приказ (копирај или отвори нови прозор)
+bookmark_label=Тренутни приказ
+
+# Secondary toolbar and context menu
+tools.title=Ðлатке
+tools_label=Ðлатке
+first_page.title=Иди на прву Ñтраницу
+first_page.label=Иди на прву Ñтраницу
+first_page_label=Иди на прву Ñтраницу
+last_page.title=Иди на поÑледњу Ñтраницу
+last_page.label=Иди на поÑледњу Ñтраницу
+last_page_label=Иди на поÑледњу Ñтраницу
+page_rotate_cw.title=Ротирај у Ñмеру казаљке на Ñату
+page_rotate_cw.label=Ротирај у Ñмеру казаљке на Ñату
+page_rotate_cw_label=Ротирај у Ñмеру казаљке на Ñату
+page_rotate_ccw.title=Ротирај у Ñмеру Ñупротном од казаљке на Ñату
+page_rotate_ccw.label=Ротирај у Ñмеру Ñупротном од казаљке на Ñату
+page_rotate_ccw_label=Ротирај у Ñмеру Ñупротном од казаљке на Ñату
+
+cursor_text_select_tool.title=Омогући алат за Ñелектовање текÑта
+cursor_text_select_tool_label=Ðлат за Ñелектовање текÑта
+cursor_hand_tool.title=Омогући алат за померање
+cursor_hand_tool_label=Ðлат за померање
+
+scroll_vertical.title=КориÑти вертикално Ñкроловање
+scroll_vertical_label=Вертикално Ñкроловање
+scroll_horizontal.title=КориÑти хоризонтално Ñкроловање
+scroll_horizontal_label=Хоризонтално Ñкроловање
+scroll_wrapped.title=КориÑти Ñкроловање по омоту
+scroll_wrapped_label=Скроловање по омоту
+
+spread_none.title=Ðемој Ñпајати ширења Ñтраница
+spread_none_label=Без раÑпроÑтирања
+spread_odd.title=Споји ширења Ñтраница које почињу непарним бројем
+spread_odd_label=Ðепарна раÑпроÑтирања
+spread_even.title=Споји ширења Ñтраница које почињу парним бројем
+spread_even_label=Парна раÑпроÑтирања
+
+# Document properties dialog box
+document_properties.title=Параметри документа…
+document_properties_label=Параметри документа…
+document_properties_file_name=Име датотеке:
+document_properties_file_size=Величина датотеке:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} B)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} B)
+document_properties_title=ÐаÑлов:
+document_properties_author=Ðутор:
+document_properties_subject=Тема:
+document_properties_keywords=Кључне речи:
+document_properties_creation_date=Датум креирања:
+document_properties_modification_date=Датум модификације:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Стваралац:
+document_properties_producer=PDF произвођач:
+document_properties_version=PDF верзија:
+document_properties_page_count=Број Ñтраница:
+document_properties_page_size=Величина Ñтранице:
+document_properties_page_size_unit_inches=ин
+document_properties_page_size_unit_millimeters=мм
+document_properties_page_size_orientation_portrait=уÑправно
+document_properties_page_size_orientation_landscape=водоравно
+document_properties_page_size_name_a3=Ð3
+document_properties_page_size_name_a4=Ð4
+document_properties_page_size_name_letter=Слово
+document_properties_page_size_name_legal=Права
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Брз веб приказ:
+document_properties_linearized_yes=Да
+document_properties_linearized_no=Ðе
+document_properties_close=Затвори
+
+print_progress_message=Припремам документ за штампање…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Откажи
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Прикажи додатну палету
+toggle_sidebar_notification.title=Прикажи додатну траку (докуменат Ñадржи оквире/прилоге)
+toggle_sidebar_notification2.title=Прикажи/Ñакриј бочну траку (документ Ñадржи контуру/прилоге/Ñлојеве)
+toggle_sidebar_label=Прикажи додатну палету
+document_outline.title=Прикажи контуру документа (дупли клик за проширење/Ñкупљање елемената)
+document_outline_label=Контура документа
+attachments.title=Прикажи прилоге
+attachments_label=Прилози
+layers.title=Прикажи Ñлојеве (дупли клик за враћање Ñвих Ñлојева у подразумевано Ñтање)
+layers_label=Слојеви
+thumbs.title=Прикажи Ñличице
+thumbs_label=Сличице
+findbar.title=Пронађи у документу
+findbar_label=Пронађи
+
+additional_layers=Додатни Ñлојеви
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Страница {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Страница {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Сличица од Ñтранице {{page}}
+
+# Find panel button title and messages
+find_input.title=Пронађи
+find_input.placeholder=Пронађи у документу…
+find_previous.title=Пронађи претходну појаву фразе
+find_previous_label=Претходна
+find_next.title=Пронађи Ñледећу појаву фразе
+find_next_label=Следећа
+find_highlight=ИÑтакнути Ñве
+find_match_case_label=Подударања
+find_entire_word_label=Целе речи
+find_reached_top=ДоÑтигнут врх документа, наÑтавио Ñа дна
+find_reached_bottom=ДоÑтигнуто дно документа, наÑтавио Ñа врха
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} од {{total}} одговара
+find_match_count[two]={{current}} од {{total}} одговара
+find_match_count[few]={{current}} од {{total}} одговара
+find_match_count[many]={{current}} од {{total}} одговара
+find_match_count[other]={{current}} од {{total}} одговара
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Више од {{limit}} одговара
+find_match_count_limit[one]=Више од {{limit}} одговара
+find_match_count_limit[two]=Више од {{limit}} одговара
+find_match_count_limit[few]=Више од {{limit}} одговара
+find_match_count_limit[many]=Више од {{limit}} одговара
+find_match_count_limit[other]=Више од {{limit}} одговара
+find_not_found=Фраза није пронађена
+
+# Error panel labels
+error_more_info=Више информација
+error_less_info=Мање информација
+error_close=Затвори
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Порука: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Стек: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Датотека: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Линија: {{line}}
+rendering_error=Дошло је до грешке приликом рендеровања ове Ñтранице.
+
+# Predefined zoom values
+page_scale_width=Ширина Ñтранице
+page_scale_fit=Прилагоди Ñтраницу
+page_scale_auto=ÐутоматÑко увеличавање
+page_scale_actual=Стварна величина
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Грешка
+loading_error=Дошло је до грешке приликом учитавања PDF-а.
+invalid_file_error=PDF датотека је оштећена или је неиÑправна.
+missing_file_error=PDF датотека није пронађена.
+unexpected_response_error=Ðеочекиван одговор од Ñервера.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} коментар]
+password_label=УнеÑите лозинку да биÑте отворили овај PDF докуменат.
+password_invalid=ÐеиÑправна лозинка. Покушајте поново.
+password_ok=У реду
+password_cancel=Откажи
+
+printing_not_supported=Упозорење: Штампање није у потпуноÑти подржано у овом прегледачу.
+printing_not_ready=Упозорење: PDF није у потпуноÑти учитан за штампу.
+web_fonts_disabled=Веб фонтови Ñу онемогућени: не могу кориÑтити уграђене PDF фонтове.
diff --git a/thirdparty/pdfjs/web/locale/sv-SE/viewer.properties b/thirdparty/pdfjs/web/locale/sv-SE/viewer.properties
new file mode 100644
index 0000000..57f2cc2
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/sv-SE/viewer.properties
@@ -0,0 +1,253 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Föregående sida
+previous_label=Föregående
+next.title=Nästa sida
+next_label=Nästa
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Sida
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=av {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} av {{pagesCount}})
+
+zoom_out.title=Zooma ut
+zoom_out_label=Zooma ut
+zoom_in.title=Zooma in
+zoom_in_label=Zooma in
+zoom.title=Zoom
+presentation_mode.title=Byt till presentationsläge
+presentation_mode_label=Presentationsläge
+open_file.title=Öppna fil
+open_file_label=Öppna
+print.title=Skriv ut
+print_label=Skriv ut
+download.title=Hämta
+download_label=Hämta
+bookmark.title=Aktuell vy (kopiera eller öppna i nytt fönster)
+bookmark_label=Aktuell vy
+
+# Secondary toolbar and context menu
+tools.title=Verktyg
+tools_label=Verktyg
+first_page.title=Gå till första sidan
+first_page.label=Gå till första sidan
+first_page_label=Gå till första sidan
+last_page.title=GÃ¥ till sista sidan
+last_page.label=GÃ¥ till sista sidan
+last_page_label=GÃ¥ till sista sidan
+page_rotate_cw.title=Rotera medurs
+page_rotate_cw.label=Rotera medurs
+page_rotate_cw_label=Rotera medurs
+page_rotate_ccw.title=Rotera moturs
+page_rotate_ccw.label=Rotera moturs
+page_rotate_ccw_label=Rotera moturs
+
+cursor_text_select_tool.title=Aktivera textmarkeringsverktyg
+cursor_text_select_tool_label=Textmarkeringsverktyg
+cursor_hand_tool.title=Aktivera handverktyg
+cursor_hand_tool_label=Handverktyg
+
+scroll_vertical.title=Använd vertikal rullning
+scroll_vertical_label=Vertikal rullning
+scroll_horizontal.title=Använd horisontell rullning
+scroll_horizontal_label=Horisontell rullning
+scroll_wrapped.title=Använd överlappande rullning
+scroll_wrapped_label=Överlappande rullning
+
+spread_none.title=Visa enkelsidor
+spread_none_label=Enkelsidor
+spread_odd.title=Visa uppslag med olika sidnummer till vänster
+spread_odd_label=Uppslag med framsida
+spread_even.title=Visa uppslag med lika sidnummer till vänster
+spread_even_label=Uppslag utan framsida
+
+# Document properties dialog box
+document_properties.title=Dokumentegenskaper…
+document_properties_label=Dokumentegenskaper…
+document_properties_file_name=Filnamn:
+document_properties_file_size=Filstorlek:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} kB ({{size_b}} byte)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} byte)
+document_properties_title=Titel:
+document_properties_author=Författare:
+document_properties_subject=Ämne:
+document_properties_keywords=Nyckelord:
+document_properties_creation_date=Skapades:
+document_properties_modification_date=Ändrades:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Skapare:
+document_properties_producer=PDF-producent:
+document_properties_version=PDF-version:
+document_properties_page_count=Sidantal:
+document_properties_page_size=Pappersstorlek:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=porträtt
+document_properties_page_size_orientation_landscape=landskap
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Snabb webbvisning:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Nej
+document_properties_close=Stäng
+
+print_progress_message=Förbereder sidor för utskrift…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Avbryt
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Visa/dölj sidofält
+toggle_sidebar_notification.title=Visa/dölj sidofält (dokument innehåller översikt/bilagor)
+toggle_sidebar_notification2.title=Växla sidofält (dokumentet innehåller dokumentstruktur/bilagor/lager)
+toggle_sidebar_label=Visa/dölj sidofält
+document_outline.title=Visa dokumentdisposition (dubbelklicka för att expandera/komprimera alla objekt)
+document_outline_label=Dokumentöversikt
+attachments.title=Visa Bilagor
+attachments_label=Bilagor
+layers.title=Visa lager (dubbelklicka för att återställa alla lager till standardläge)
+layers_label=Lager
+thumbs.title=Visa miniatyrer
+thumbs_label=Miniatyrer
+current_outline_item.title=Hitta aktuellt dispositionsobjekt
+current_outline_item_label=Aktuellt dispositionsobjekt
+findbar.title=Sök i dokument
+findbar_label=Sök
+
+additional_layers=Ytterligare lager
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Sida {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Sida {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatyr av sida {{page}}
+
+# Find panel button title and messages
+find_input.title=Sök
+find_input.placeholder=Sök i dokument…
+find_previous.title=Hitta föregående förekomst av frasen
+find_previous_label=Föregående
+find_next.title=Hitta nästa förekomst av frasen
+find_next_label=Nästa
+find_highlight=Markera alla
+find_match_case_label=Matcha versal/gemen
+find_entire_word_label=Hela ord
+find_reached_top=Nådde början av dokumentet, började från slutet
+find_reached_bottom=Nådde slutet på dokumentet, började från början
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} av {{total}} träff
+find_match_count[two]={{current}} av {{total}} träffar
+find_match_count[few]={{current}} av {{total}} träffar
+find_match_count[many]={{current}} av {{total}} träffar
+find_match_count[other]={{current}} av {{total}} träffar
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Mer än {{limit}} träffar
+find_match_count_limit[one]=Mer än {{limit}} träff
+find_match_count_limit[two]=Mer än {{limit}} träffar
+find_match_count_limit[few]=Mer än {{limit}} träffar
+find_match_count_limit[many]=Mer än {{limit}} träffar
+find_match_count_limit[other]=Mer än {{limit}} träffar
+find_not_found=Frasen hittades inte
+
+# Error panel labels
+error_more_info=Mer information
+error_less_info=Mindre information
+error_close=Stäng
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Meddelande: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fil: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rad: {{line}}
+rendering_error=Ett fel uppstod vid visning av sidan.
+
+# Predefined zoom values
+page_scale_width=Sidbredd
+page_scale_fit=Anpassa sida
+page_scale_auto=Automatisk zoom
+page_scale_actual=Verklig storlek
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Fel
+loading_error=Ett fel uppstod vid laddning av PDF-filen.
+invalid_file_error=Ogiltig eller korrupt PDF-fil.
+missing_file_error=Saknad PDF-fil.
+unexpected_response_error=Oväntat svar från servern.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}}-annotering]
+password_label=Skriv in lösenordet för att öppna PDF-filen.
+password_invalid=Ogiltigt lösenord. Försök igen.
+password_ok=OK
+password_cancel=Avbryt
+
+printing_not_supported=Varning: Utskrifter stöds inte helt av den här webbläsaren.
+printing_not_ready=Varning: PDF:en är inte klar för utskrift.
+web_fonts_disabled=Webbtypsnitt är inaktiverade: kan inte använda inbäddade PDF-typsnitt.
diff --git a/thirdparty/pdfjs/web/locale/szl/viewer.properties b/thirdparty/pdfjs/web/locale/szl/viewer.properties
new file mode 100644
index 0000000..80a5e6b
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/szl/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Piyrwyjszo strÅna
+previous_label=Piyrwyjszo
+next.title=Nastympno strÅna
+next_label=Dalij
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=StrÅna
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=ze {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} ze {{pagesCount}})
+
+zoom_out.title=Zmyńsz
+zoom_out_label=Zmyńsz
+zoom_in.title=Zwiynksz
+zoom_in_label=Zwiynksz
+zoom.title=Srogość
+presentation_mode.title=PrzeÅ‚Åncz na tryb prezyntacyje
+presentation_mode_label=Tryb prezyntacyje
+open_file.title=Ôdewrzij zbiÅr
+open_file_label=Ôdewrzij
+print.title=Durkuj
+print_label=Durkuj
+download.title=Pobier
+download_label=Pobier
+bookmark.title=Aktualny widok (kopiuj abo ôdewrzij w nowym ôknie)
+bookmark_label=Aktualny widok
+
+# Secondary toolbar and context menu
+tools.title=Noczynia
+tools_label=Noczynia
+first_page.title=Idź ku piyrszyj strÅnie
+first_page.label=Idź ku piyrszyj strÅnie
+first_page_label=Idź ku piyrszyj strÅnie
+last_page.title=Idź ku ôstatnij strÅnie
+last_page.label=Idź ku ôstatnij strÅnie
+last_page_label=Idź ku ôstatnij strÅnie
+page_rotate_cw.title=Zwyrtnij w prawo
+page_rotate_cw.label=Zwyrtnij w prawo
+page_rotate_cw_label=Zwyrtnij w prawo
+page_rotate_ccw.title=Zwyrtnij w lewo
+page_rotate_ccw.label=Zwyrtnij w lewo
+page_rotate_ccw_label=Zwyrtnij w lewo
+
+cursor_text_select_tool.title=ZaÅ‚Åncz noczynie ôbiyranio tekstu
+cursor_text_select_tool_label=Noczynie ôbiyranio tekstu
+cursor_hand_tool.title=ZaÅ‚Åncz noczynie rÅnczka
+cursor_hand_tool_label=Noczynie rÅnczka
+
+scroll_vertical.title=Używej piÅnowego przewijanio
+scroll_vertical_label=PiÅnowe przewijanie
+scroll_horizontal.title=Używej poziÅmego przewijanio
+scroll_horizontal_label=PoziÅme przewijanie
+scroll_wrapped.title=Używej szichtowego przewijanio
+scroll_wrapped_label=Szichtowe przewijanie
+
+spread_none.title=Niy dowej strÅn w widoku po dwie
+spread_none_label=Po jednyj strÅnie
+spread_odd.title=Dej strÅny po dwie: niyparzysto i parzysto
+spread_odd_label=Niyparzysto i parzysto
+spread_even.title=Dej strÅny po dwie: parzysto i niyparzysto
+spread_even_label=Parzysto i niyparzysto
+
+# Document properties dialog box
+document_properties.title=Włosności dokumyntu…
+document_properties_label=Włosności dokumyntu…
+document_properties_file_name=Miano zbioru:
+document_properties_file_size=Srogość zbioru:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}}Â KB ({{size_b}}Â B)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}}Â MB ({{size_b}}Â B)
+document_properties_title=Tytuł:
+document_properties_author=AutÅr:
+document_properties_subject=Tymat:
+document_properties_keywords=Kluczowe słowa:
+document_properties_creation_date=Data zrychtowanio:
+document_properties_modification_date=Data zmiany:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Zrychtowane ôd:
+document_properties_producer=PDF ôd:
+document_properties_version=Wersyjo PDF:
+document_properties_page_count=Wielość strÅn:
+document_properties_page_size=Srogość strÅny:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=piÅnowo
+document_properties_page_size_orientation_landscape=poziÅmo
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Gibki necowy podglÅnd:
+document_properties_linearized_yes=Ja
+document_properties_linearized_no=Niy
+document_properties_close=Zawrzij
+
+print_progress_message=Rychtowanie dokumyntu do durku…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Pociep
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=PrzeÅ‚Åncz posek na rancie
+toggle_sidebar_notification.title=PrzeÅ‚Åncz posek na rancie (dokumynt mo struktura/przidowki)
+toggle_sidebar_notification2.title=PrzeÅ‚Åncz posek na rancie (dokumynt mo struktura/przidowki/warstwy)
+toggle_sidebar_label=PrzeÅ‚Åncz posek na rancie
+document_outline.title=Pokoż struktura dokumyntu (tuplowane klikniyncie rozszyrzo/swijo wszyskie elymynty)
+document_outline_label=Struktura dokumyntu
+attachments.title=Pokoż przidowki
+attachments_label=Przidowki
+layers.title=Pokoż warstwy (tuplowane klikniyncie resetuje wszyskie warstwy do bazowego stanu)
+layers_label=Warstwy
+thumbs.title=Pokoż miniatury
+thumbs_label=Miniatury
+findbar.title=Znojdź w dokumyncie
+findbar_label=Znojdź
+
+additional_layers=Nadbytnie warstwy
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=StrÅna {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=StrÅna {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatura strÅny {{page}}
+
+# Find panel button title and messages
+find_input.title=Znojdź
+find_input.placeholder=Znojdź w dokumyncie…
+find_previous.title=Znojdź piyrwyjsze pokozanie sie tyj frazy
+find_previous_label=Piyrwyjszo
+find_next.title=Znojdź nastympne pokozanie sie tyj frazy
+find_next_label=Dalij
+find_highlight=Ôbznocz wszysko
+find_match_case_label=Poznowej srogość liter
+find_entire_word_label=Cołke słowa
+find_reached_top=DoszÅ‚o do samego wiyrchu strÅny, dalij ôd spodku
+find_reached_bottom=DoszÅ‚o do samego spodku strÅny, dalij ôd wiyrchu
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} ze {{total}}, co pasujÅm
+find_match_count[two]={{current}} ze {{total}}, co pasujÅm
+find_match_count[few]={{current}} ze {{total}}, co pasujÅm
+find_match_count[many]={{current}} ze {{total}}, co pasujÅm
+find_match_count[other]={{current}} ze {{total}}, co pasujÅm
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(total) ]}
+find_match_count_limit[zero]=Wiyncyj jak {{limit}}, co pasujÅm
+find_match_count_limit[one]=Wiyncyj jak {{limit}}, co pasuje
+find_match_count_limit[two]=Wiyncyj jak {{limit}}, co pasujÅm
+find_match_count_limit[few]=Wiyncyj jak {{limit}}, co pasujÅm
+find_match_count_limit[many]=Wiyncyj jak {{limit}}, co pasujÅm
+find_match_count_limit[other]=Wiyncyj jak {{limit}}, co pasujÅm
+find_not_found=Fraza niy ma znodniynto
+
+# Error panel labels
+error_more_info=Wiyncyj informacyji
+error_less_info=Mynij informacyji
+error_close=Zawrzij
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=WiadÅmość: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Sztapel: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ZbiÅr: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linijo: {{line}}
+rendering_error=Przi renderowaniu strÅny pokozoÅ‚ sie feler.
+
+# Predefined zoom values
+page_scale_width=Szyrzka strÅny
+page_scale_fit=Napasowanie strÅny
+page_scale_auto=AutÅmatyczno srogość
+page_scale_actual=Aktualno srogość
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Feler
+loading_error=Przi ladowaniu PDFa pokozoł sie feler.
+invalid_file_error=ZÅ‚y abo felerny zbiÅr PDF.
+missing_file_error=Chybio zbioru PDF.
+unexpected_response_error=Niyôczekowano ôdpowiydź serwera.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Anotacyjo typu {{type}}]
+password_label=Wkludź hasÅ‚o, coby ôdewrzić tyn zbiÅr PDF.
+password_invalid=HasÅ‚o je zÅ‚e. SprÅbuj jeszcze roz.
+password_ok=OK
+password_cancel=Pociep
+
+printing_not_supported=PozÅr: Ta przeglÅndarka niy coÅ‚kiym ôbsuguje durk.
+printing_not_ready=PozÅr: Tyn PDF niy ma za tela zaladowany do durku.
+web_fonts_disabled=Necowe fÅnty sÅm zastawiÅne: niy idzie użyć wkludzÅnych fÅntÅw PDF.
diff --git a/thirdparty/pdfjs/web/locale/ta/viewer.properties b/thirdparty/pdfjs/web/locale/ta/viewer.properties
new file mode 100644
index 0000000..669ba0c
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/ta/viewer.properties
@@ -0,0 +1,200 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=à®®à¯à®¨à¯à®¤à¯ˆà®¯ பகà¯à®•à®®à¯
+previous_label=à®®à¯à®¨à¯à®¤à¯ˆà®¯à®¤à¯
+next.title=அடà¯à®¤à¯à®¤ பகà¯à®•à®®à¯
+next_label=அடà¯à®¤à¯à®¤à¯
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=பகà¯à®•à®®à¯
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} இலà¯
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages={{pagesCount}}) இல௠({{pageNumber}}
+
+zoom_out.title=சிறிதாகà¯à®•à¯
+zoom_out_label=சிறிதாகà¯à®•à¯
+zoom_in.title=பெரிதாகà¯à®•à¯
+zoom_in_label=பெரிதாகà¯à®•à¯
+zoom.title=பெரிதாகà¯à®•à¯
+presentation_mode.title=விளகà¯à®•காடà¯à®šà®¿ பயனà¯à®®à¯à®±à¯ˆà®•à¯à®•௠மாறà¯
+presentation_mode_label=விளகà¯à®•காடà¯à®šà®¿ பயனà¯à®®à¯à®±à¯ˆ
+open_file.title=கோபà¯à®ªà®¿à®©à¯ˆ திற
+open_file_label=திற
+print.title=அசà¯à®šà®¿à®Ÿà¯
+print_label=அசà¯à®šà®¿à®Ÿà¯
+download.title=பதிவிறகà¯à®•à¯
+download_label=பதிவிறகà¯à®•à¯
+bookmark.title=தறà¯à®ªà¯‹à®¤à¯ˆà®¯ காடà¯à®šà®¿ (பà¯à®¤à®¿à®¯ சாளரதà¯à®¤à®¿à®±à¯à®•௠நகலெட௠அலà¯à®²à®¤à¯ பà¯à®¤à®¿à®¯ சாளரதà¯à®¤à®¿à®²à¯ திற)
+bookmark_label=தறà¯à®ªà¯‹à®¤à¯ˆà®¯ காடà¯à®šà®¿
+
+# Secondary toolbar and context menu
+tools.title=கரà¯à®µà®¿à®•ளà¯
+tools_label=கரà¯à®µà®¿à®•ளà¯
+first_page.title=à®®à¯à®¤à®²à¯ பகà¯à®•தà¯à®¤à®¿à®±à¯à®•௠செலà¯à®²à®µà¯à®®à¯
+first_page.label=à®®à¯à®¤à®²à¯ பகà¯à®•தà¯à®¤à®¿à®±à¯à®•௠செலà¯à®²à®µà¯à®®à¯
+first_page_label=à®®à¯à®¤à®²à¯ பகà¯à®•தà¯à®¤à®¿à®±à¯à®•௠செலà¯à®²à®µà¯à®®à¯
+last_page.title=கடைசி பகà¯à®•தà¯à®¤à®¿à®±à¯à®•௠செலà¯à®²à®µà¯à®®à¯
+last_page.label=கடைசி பகà¯à®•தà¯à®¤à®¿à®±à¯à®•௠செலà¯à®²à®µà¯à®®à¯
+last_page_label=கடைசி பகà¯à®•தà¯à®¤à®¿à®±à¯à®•௠செலà¯à®²à®µà¯à®®à¯
+page_rotate_cw.title=வலஞà¯à®šà¯à®´à®¿à®¯à®¾à®• சà¯à®´à®±à¯à®±à¯
+page_rotate_cw.label=வலஞà¯à®šà¯à®´à®¿à®¯à®¾à®• சà¯à®´à®±à¯à®±à¯
+page_rotate_cw_label=வலஞà¯à®šà¯à®´à®¿à®¯à®¾à®• சà¯à®´à®±à¯à®±à¯
+page_rotate_ccw.title=இடஞà¯à®šà¯à®´à®¿à®¯à®¾à®• சà¯à®´à®±à¯à®±à¯
+page_rotate_ccw.label=இடஞà¯à®šà¯à®´à®¿à®¯à®¾à®• சà¯à®´à®±à¯à®±à¯
+page_rotate_ccw_label=இடஞà¯à®šà¯à®´à®¿à®¯à®¾à®• சà¯à®´à®±à¯à®±à¯
+
+cursor_text_select_tool.title=உரைத௠தெரிவ௠கரà¯à®µà®¿à®¯à¯ˆà®šà¯ செயலà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯
+cursor_text_select_tool_label=உரைத௠தெரிவ௠கரà¯à®µà®¿
+cursor_hand_tool.title=கைக௠கரà¯à®µà®¿à®•à¯à®šà¯ செயறà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯
+cursor_hand_tool_label=கைகà¯à®•à¯à®°à¯à®µà®¿
+
+# Document properties dialog box
+document_properties.title=ஆவண பணà¯à®ªà¯à®•ளà¯...
+document_properties_label=ஆவண பணà¯à®ªà¯à®•ளà¯...
+document_properties_file_name=கோபà¯à®ªà¯ பெயரà¯:
+document_properties_file_size=கோபà¯à®ªà®¿à®©à¯ அளவà¯:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} கிபை ({{size_b}} பைடà¯à®Ÿà¯à®•ளà¯)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} மெபை ({{size_b}} பைடà¯à®Ÿà¯à®•ளà¯)
+document_properties_title=தலைபà¯à®ªà¯:
+document_properties_author=எழà¯à®¤à®¿à®¯à®µà®°à¯
+document_properties_subject=பொரà¯à®³à¯:
+document_properties_keywords=à®®à¯à®•à¯à®•ிய வாரà¯à®¤à¯à®¤à¯ˆà®•ளà¯:
+document_properties_creation_date=படைதà¯à®¤ தேதி :
+document_properties_modification_date=திரà¯à®¤à¯à®¤à®¿à®¯ தேதி:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=உரà¯à®µà®¾à®•à¯à®•à¯à®ªà®µà®°à¯:
+document_properties_producer=பிடிஎஃப௠தயாரிபà¯à®ªà®¾à®³à®°à¯:
+document_properties_version=PDF பதிபà¯à®ªà¯:
+document_properties_page_count=பகà¯à®• எணà¯à®£à®¿à®•à¯à®•ை:
+document_properties_page_size=பகà¯à®• அளவà¯:
+document_properties_page_size_unit_inches=இதிலà¯
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=நிலைபதிபà¯à®ªà¯
+document_properties_page_size_orientation_landscape=நிலைபரபà¯à®ªà¯
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=கடிதமà¯
+document_properties_page_size_name_legal=சடà¯à®Ÿà®ªà¯‚à®°à¯à®µ
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+document_properties_close=மூடà¯à®•
+
+print_progress_message=அசà¯à®šà®¿à®Ÿà¯à®µà®¤à®±à¯à®•ான ஆவணம௠தயாராகிறதà¯...
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ரதà¯à®¤à¯
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=பகà¯à®•ப௠படà¯à®Ÿà®¿à®¯à¯ˆ நிலைமாறà¯à®±à¯
+toggle_sidebar_notification.title=பகà¯à®•பà¯à®ªà®Ÿà¯à®Ÿà¯ˆà®¯à¯ˆ நிலைமாறà¯à®±à¯ (வெளிகà¯à®•ோடà¯/இணைபà¯à®ªà¯à®•ளை ஆவணம௠கொணà¯à®Ÿà¯à®³à¯à®³à®¤à¯)
+toggle_sidebar_label=பகà¯à®•ப௠படà¯à®Ÿà®¿à®¯à¯ˆ நிலைமாறà¯à®±à¯
+document_outline.title=ஆவண அடகà¯à®•தà¯à®¤à¯ˆà®•௠காடà¯à®Ÿà¯ (இரà¯à®®à¯à®±à¯ˆà®šà¯ சொடà¯à®•à¯à®•ி அனைதà¯à®¤à¯ உறà¯à®ªà¯à®ªà®¿à®Ÿà®¿à®•ளையà¯à®®à¯ விரி/சேரà¯)
+document_outline_label=ஆவண வெளிவரை
+attachments.title=இணைபà¯à®ªà¯à®•ளை காணà¯à®ªà®¿
+attachments_label=இணைபà¯à®ªà¯à®•ளà¯
+thumbs.title=சிறà¯à®ªà®Ÿà®™à¯à®•ளைக௠காணà¯à®ªà®¿
+thumbs_label=சிறà¯à®ªà®Ÿà®™à¯à®•ளà¯
+findbar.title=ஆவணதà¯à®¤à®¿à®²à¯ கணà¯à®Ÿà®±à®¿
+findbar_label=தேடà¯
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=பகà¯à®•ம௠{{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=பகà¯à®•தà¯à®¤à®¿à®©à¯ சிறà¯à®ªà®Ÿà®®à¯ {{page}}
+
+# Find panel button title and messages
+find_input.title=கணà¯à®Ÿà¯à®ªà®¿à®Ÿà®¿
+find_input.placeholder=ஆவணதà¯à®¤à®¿à®²à¯ கணà¯à®Ÿà®±à®¿â€¦
+find_previous.title=இநà¯à®¤ சொறà¯à®±à¯Šà®Ÿà®°à®¿à®©à¯ à®®à¯à®¨à¯à®¤à¯ˆà®¯ நிகழà¯à®µà¯ˆ தேடà¯
+find_previous_label=à®®à¯à®¨à¯à®¤à¯ˆà®¯à®¤à¯
+find_next.title=இநà¯à®¤ சொறà¯à®±à¯Šà®Ÿà®°à®¿à®©à¯ அடà¯à®¤à¯à®¤ நிகழà¯à®µà¯ˆ தேடà¯
+find_next_label=அடà¯à®¤à¯à®¤à¯
+find_highlight=அனைதà¯à®¤à¯ˆà®¯à¯à®®à¯ தனிபà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯
+find_match_case_label=பேரெழà¯à®¤à¯à®¤à®¾à®•à¯à®•தà¯à®¤à¯ˆ உணரà¯
+find_reached_top=ஆவணதà¯à®¤à®¿à®©à¯ மேல௠பகà¯à®¤à®¿à®¯à¯ˆ அடைநà¯à®¤à®¤à¯, அடிபà¯à®ªà®•à¯à®•தà¯à®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ தொடரà¯à®¨à¯à®¤à®¤à¯
+find_reached_bottom=ஆவணதà¯à®¤à®¿à®©à¯ à®®à¯à®Ÿà®¿à®µà¯ˆ அடைநà¯à®¤à®¤à¯, மேலிரà¯à®¨à¯à®¤à¯ தொடரà¯à®¨à¯à®¤à®¤à¯
+find_not_found=சொறà¯à®±à¯Šà®Ÿà®°à¯ காணவிலà¯à®²à¯ˆ
+
+# Error panel labels
+error_more_info=கூடà¯à®¤à®²à¯ தகவலà¯
+error_less_info=கà¯à®±à¯ˆà®¨à¯à®¤ தகவலà¯
+error_close=மூடà¯à®•
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=செயà¯à®¤à®¿: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=ஸà¯à®Ÿà¯‡à®•à¯: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=கோபà¯à®ªà¯: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=வரி: {{line}}
+rendering_error=இநà¯à®¤à®ªà¯ பகà¯à®•தà¯à®¤à¯ˆ காடà¯à®šà®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®®à¯ போத௠ஒர௠பிழை à®à®±à¯à®ªà®Ÿà¯à®Ÿà®¤à¯.
+
+# Predefined zoom values
+page_scale_width=பகà¯à®• அகலமà¯
+page_scale_fit=பகà¯à®•ப௠பொரà¯à®¤à¯à®¤à®®à¯
+page_scale_auto=தானியகà¯à®• பெரிதாகà¯à®•லà¯
+page_scale_actual=உணà¯à®®à¯ˆà®¯à®¾à®© அளவà¯
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=பிழை
+loading_error=PDF à® à®à®±à¯à®±à¯à®®à¯ போத௠ஒர௠பிழை à®à®±à¯à®ªà®Ÿà¯à®Ÿà®¤à¯.
+invalid_file_error=செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•ாத அலà¯à®²à®¤à¯ சிதைநà¯à®¤ PDF கோபà¯à®ªà¯.
+missing_file_error=PDF கோபà¯à®ªà¯ காணவிலà¯à®²à¯ˆ.
+unexpected_response_error=சேவகன௠பதில௠எதிரà¯à®ªà®¾à®°à®¤à®¤à¯.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} விளகà¯à®•à®®à¯]
+password_label=இநà¯à®¤ PDF கோபà¯à®ªà¯ˆ திறகà¯à®• கடவà¯à®šà¯à®šà¯†à®¾à®²à¯à®²à¯ˆ உளà¯à®³à®¿à®Ÿà®µà¯à®®à¯.
+password_invalid=செலà¯à®²à¯à®ªà®Ÿà®¿à®¯à®¾à®•ாத கடவà¯à®šà¯à®šà¯Šà®²à¯, தயை செயà¯à®¤à¯ மீணà¯à®Ÿà¯à®®à¯ à®®à¯à®¯à®±à¯à®šà®¿ செயà¯à®•.
+password_ok=சரி
+password_cancel=ரதà¯à®¤à¯
+
+printing_not_supported=எசà¯à®šà®°à®¿à®•à¯à®•ை: இநà¯à®¤ உலாவி அசà¯à®šà®¿à®Ÿà¯à®¤à®²à¯ˆ à®®à¯à®´à¯à®®à¯ˆà®¯à®¾à®• ஆதரிகà¯à®•விலà¯à®²à¯ˆ.
+printing_not_ready=எசà¯à®šà®°à®¿à®•à¯à®•ை: PDF அசà¯à®šà®¿à®Ÿ à®®à¯à®´à¯à®µà®¤à¯à®®à®¾à®• à®à®±à¯à®±à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ.
+web_fonts_disabled=வலை எழà¯à®¤à¯à®¤à¯à®°à¯à®•à¯à®•ள௠மà¯à®Ÿà®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿà¯à®³à¯à®³à®©: உடà¯à®ªà¯Šà®¤à®¿à®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿ PDF எழà¯à®¤à¯à®¤à¯à®°à¯à®•à¯à®•ளைப௠பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤ à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ.
diff --git a/thirdparty/pdfjs/web/locale/te/viewer.properties b/thirdparty/pdfjs/web/locale/te/viewer.properties
new file mode 100644
index 0000000..6839138
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/te/viewer.properties
@@ -0,0 +1,225 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=à°®à±à°¨à±à°ªà°Ÿà°¿ పేజీ
+previous_label=à°•à±à°°à°¿à°¤à°‚
+next.title=తరà±à°µà°¾à°¤ పేజీ
+next_label=తరà±à°µà°¾à°¤
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=పేజీ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=మొతà±à°¤à°‚ {{pagesCount}} లో
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=(మొతà±à°¤à°‚ {{pagesCount}} లో {{pageNumber}}వది)
+
+zoom_out.title=జూమౠతగà±à°—à°¿à°‚à°šà±
+zoom_out_label=జూమౠతగà±à°—à°¿à°‚à°šà±
+zoom_in.title=జూమౠచేయి
+zoom_in_label=జూమౠచేయి
+zoom.title=జూమà±
+presentation_mode.title=à°ªà±à°°à°¦à°°à±à°¶à°¨à°¾ రీతికి మారà±
+presentation_mode_label=à°ªà±à°°à°¦à°°à±à°¶à°¨à°¾ రీతి
+open_file.title=ఫైలౠతెరà±à°µà±
+open_file_label=తెరà±à°µà±
+print.title=à°®à±à°¦à±à°°à°¿à°‚à°šà±
+print_label=à°®à±à°¦à±à°°à°¿à°‚à°šà±
+download.title=దింపà±à°•ోళà±à°³à±
+download_label=దింపà±à°•ోళà±à°³à±
+bookmark.title=à°ªà±à°°à°¸à±à°¤à±à°¤ దరà±à°¶à°¨à°‚ (కాపీ చేయి లేదా కొతà±à°¤ విండోలో తెరà±à°µà±)
+bookmark_label=à°ªà±à°°à°¸à±à°¤à±à°¤ దరà±à°¶à°¨à°‚
+
+# Secondary toolbar and context menu
+tools.title=పనిమà±à°Ÿà±à°²à±
+tools_label=పనిమà±à°Ÿà±à°²à±
+first_page.title=మొదటి పేజీకి వెళà±à°³à±
+first_page.label=మొదటి పేజీకి వెళà±à°³à±
+first_page_label=మొదటి పేజీకి వెళà±à°³à±
+last_page.title=చివరి పేజీకి వెళà±à°³à±
+last_page.label=చివరి పేజీకి వెళà±à°³à±
+last_page_label=చివరి పేజీకి వెళà±à°³à±
+page_rotate_cw.title=సవà±à°¯à°¦à°¿à°¶à°²à±‹ తిపà±à°ªà±
+page_rotate_cw.label=సవà±à°¯à°¦à°¿à°¶à°²à±‹ తిపà±à°ªà±
+page_rotate_cw_label=సవà±à°¯à°¦à°¿à°¶à°²à±‹ తిపà±à°ªà±
+page_rotate_ccw.title=అపసవà±à°¯à°¦à°¿à°¶à°²à±‹ తిపà±à°ªà±
+page_rotate_ccw.label=అపసవà±à°¯à°¦à°¿à°¶à°²à±‹ తిపà±à°ªà±
+page_rotate_ccw_label=అపసవà±à°¯à°¦à°¿à°¶à°²à±‹ తిపà±à°ªà±
+
+cursor_text_select_tool.title=టెకà±à°¸à±à°Ÿà± ఎంపిక సాధనానà±à°¨à°¿ à°ªà±à°°à°¾à°°à°‚à°à°¿à°‚à°šà°‚à°¡à°¿
+cursor_text_select_tool_label=టెకà±à°¸à±à°Ÿà± ఎంపిక సాధనం
+cursor_hand_tool.title=చేతి సాధనం చేతనించà±
+cursor_hand_tool_label=చేతి సాధనం
+
+scroll_vertical_label=నిలà±à°µà± à°¸à±à°•à±à°°à±‹à°²à°¿à°‚à°—à±
+
+
+# Document properties dialog box
+document_properties.title=పతà±à°°à°®à± లకà±à°·à°£à°¾à°²à±...
+document_properties_label=పతà±à°°à°®à± లకà±à°·à°£à°¾à°²à±...
+document_properties_file_name=దసà±à°¤à±à°°à°‚ పేరà±:
+document_properties_file_size=దసà±à°¤à±à°°à°‚ పరిమాణం:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=శీరà±à°·à°¿à°•:
+document_properties_author=మూలకరà±à°¤:
+document_properties_subject=విషయం:
+document_properties_keywords=à°•à±€ పదాలà±:
+document_properties_creation_date=సృషà±à°Ÿà°¿à°‚à°šà°¿à°¨ తేదీ:
+document_properties_modification_date=సవరించిన తేదీ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=సృషà±à°Ÿà°¿à°•à°°à±à°¤:
+document_properties_producer=PDF ఉతà±à°ªà°¾à°¦à°•à°¿:
+document_properties_version=PDF వరà±à°·à°¨à±:
+document_properties_page_count=పేజీల సంఖà±à°¯:
+document_properties_page_size=కాగితం పరిమాణం:
+document_properties_page_size_unit_inches=లో
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=నిలà±à°µà±à°šà°¿à°¤à±à°°à°‚
+document_properties_page_size_orientation_landscape=à°…à°¡à±à°¡à°šà°¿à°¤à±à°°à°‚
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=లేఖ
+document_properties_page_size_name_legal=à°šà°Ÿà±à°Ÿà°ªà°°à°®à±†à±–à°¨
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized_yes=à°…à°µà±à°¨à±
+document_properties_linearized_no=కాదà±
+document_properties_close=మూసివేయి
+
+print_progress_message=à°®à±à°¦à±à°°à°¿à°‚చడానికి పతà±à°°à°®à± సిదà±à°§à°®à°µà±à°¤à±à°¨à±à°¨à°¦à°¿â€¦
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=à°°à°¦à±à°¦à±à°šà±‡à°¯à°¿
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=పకà±à°•పటà±à°Ÿà±€ మారà±à°šà±
+toggle_sidebar_label=పకà±à°•పటà±à°Ÿà±€ మారà±à°šà±
+document_outline.title=పతà±à°°à°®à± రూపమౠచూపించౠ(à°¡à°¬à±à°²à± à°•à±à°²à°¿à°•ౠచేసి à°…à°¨à±à°¨à°¿ అంశాలనౠవిసà±à°¤à°°à°¿à°‚à°šà±/కూలà±à°šà±)
+document_outline_label=పతà±à°°à°®à± à°…à°µà±à°Ÿà±â€Œà°²à±ˆà°¨à±
+attachments.title=à°…à°¨à±à°¬à°‚ధాలౠచూపà±
+attachments_label=à°…à°¨à±à°¬à°‚ధాలà±
+layers_label=పొరలà±
+thumbs.title=థంబà±â€Œà°¨à±ˆà°²à±à°¸à± చూపà±
+thumbs_label=థంబà±â€Œà°¨à±ˆà°²à±à°¸à±
+findbar.title=పతà±à°°à°®à±à°²à±‹ à°•à°¨à±à°—ొనà±à°®à±
+findbar_label=à°•à°¨à±à°—ొనà±
+
+additional_layers=అదనపౠపొరలà±
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=పేజి {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=పేజీ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} పేజీ నఖచితà±à°°à°‚
+
+# Find panel button title and messages
+find_input.title=à°•à°¨à±à°—ొనà±
+find_input.placeholder=పతà±à°°à°®à±à°²à±‹ à°•à°¨à±à°—ొనà±â€¦
+find_previous.title=పదం యొకà±à°• à°®à±à°‚దౠసంà°à°µà°¾à°¨à±à°¨à°¿ à°•à°¨à±à°—ొనà±
+find_previous_label=à°®à±à°¨à±à°ªà°Ÿà°¿
+find_next.title=పదం యొకà±à°• తరà±à°µà°¾à°¤à°¿ సంà°à°µà°¾à°¨à±à°¨à°¿ à°•à°¨à±à°—ొనà±
+find_next_label=తరà±à°µà°¾à°¤
+find_highlight=à°…à°¨à±à°¨à°¿à°Ÿà°¿à°¨à°¿ ఉదà±à°¦à±€à°ªà°¨à°‚ చేయà±à°®à±
+find_match_case_label=à°…à°•à±à°·à°°à°®à±à°² తేడాతో పోలà±à°šà±
+find_entire_word_label=పూరà±à°¤à°¿ పదాలà±
+find_reached_top=పేజీ పైకి చేరà±à°•à±à°¨à±à°¨à°¦à°¿, à°•à±à°°à°¿à°‚ది à°¨à±à°‚à°¡à°¿ కొనసాగించండి
+find_reached_bottom=పేజీ చివరకౠచేరà±à°•à±à°¨à±à°¨à°¦à°¿, పైనà±à°‚à°¡à°¿ కొనసాగించండి
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_not_found=పదబంధం కనబడలేదà±
+
+# Error panel labels
+error_more_info=మరింత సమాచారం
+error_less_info=తకà±à°•à±à°µ సమాచారం
+error_close=మూసివేయి
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=సందేశం: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=à°¸à±à°Ÿà°¾à°•à±: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ఫైలà±: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=వరà±à°¸: {{line}}
+rendering_error=పేజీనౠరెండరౠచేయà±à°Ÿà°²à±‹ à°’à°• దోషం à°Žà°¦à±à°°à±ˆà°‚ది.
+
+# Predefined zoom values
+page_scale_width=పేజీ వెడలà±à°ªà±
+page_scale_fit=పేజీ అమరà±à°ªà±
+page_scale_auto=à°¸à±à°µà°¯à°‚చాలక జూమà±
+page_scale_actual=యథారà±à°§ పరిమాణం
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=దోషం
+loading_error=PDF లోడవà±à°šà±à°¨à±à°¨à°ªà±à°ªà±à°¡à± à°’à°• దోషం à°Žà°¦à±à°°à±ˆà°‚ది.
+invalid_file_error=చెలà±à°²à°¨à°¿ లేదా పాడైన PDF ఫైలà±.
+missing_file_error=దొరకని PDF ఫైలà±.
+unexpected_response_error=à°…à°¨à±à°•ోని సరà±à°µà°°à± à°¸à±à°ªà°‚దన.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} టీకా]
+password_label=à°ˆ PDF ఫైలౠతెరà±à°šà±à°Ÿà°•ౠసంకేతపదం à°ªà±à°°à°µà±‡à°¶à°ªà±†à°Ÿà±à°Ÿà±à°®à±.
+password_invalid=సంకేతపదం చెలà±à°²à°¦à±. దయచేసి మళà±à°³à±€ à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿.
+password_ok=సరే
+password_cancel=à°°à°¦à±à°¦à±à°šà±‡à°¯à°¿
+
+printing_not_supported=హెచà±à°šà°°à°¿à°•: à°ˆ విహారిణి చేత à°®à±à°¦à±à°°à°£ పూరà±à°¤à°¿à°—à°¾ తోడà±à°ªà°¾à°Ÿà± లేదà±.
+printing_not_ready=హెచà±à°šà°°à°¿à°•: à°®à±à°¦à±à°°à°£ కొరకౠఈ PDF పూరà±à°¤à°¿à°—à°¾ లోడవలేదà±.
+web_fonts_disabled=వెబౠఫాంటà±à°²à± అచేతనించబడెనà±: ఎంబెడెడౠPDF ఫాంటà±à°²à± ఉపయోగించలేక పోయింది.
diff --git a/thirdparty/pdfjs/web/locale/th/viewer.properties b/thirdparty/pdfjs/web/locale/th/viewer.properties
new file mode 100644
index 0000000..4964283
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/th/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=หน้าà¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²
+previous_label=à¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²
+next.title=หน้าถัดไป
+next_label=ถัดไป
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=หน้า
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=จาภ{{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} จาภ{{pagesCount}})
+
+zoom_out.title=ซูมà¸à¸à¸
+zoom_out_label=ซูมà¸à¸à¸
+zoom_in.title=ซูมเข้า
+zoom_in_label=ซูมเข้า
+zoom.title=ซูม
+presentation_mode.title=สลับเป็นโหมดà¸à¸²à¸£à¸™à¸³à¹€à¸ªà¸™à¸
+presentation_mode_label=โหมดà¸à¸²à¸£à¸™à¸³à¹€à¸ªà¸™à¸
+open_file.title=เปิดไฟล์
+open_file_label=เปิด
+print.title=พิมพ์
+print_label=พิมพ์
+download.title=ดาวน์โหลด
+download_label=ดาวน์โหลด
+bookmark.title=มุมมà¸à¸‡à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™ (คัดลà¸à¸à¸«à¸£à¸·à¸à¹€à¸›à¸´à¸”ในหน้าต่างใหม่)
+bookmark_label=มุมมà¸à¸‡à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™
+
+# Secondary toolbar and context menu
+tools.title=เครื่à¸à¸‡à¸¡à¸·à¸
+tools_label=เครื่à¸à¸‡à¸¡à¸·à¸
+first_page.title=ไปยังหน้าà¹à¸£à¸
+first_page.label=ไปยังหน้าà¹à¸£à¸
+first_page_label=ไปยังหน้าà¹à¸£à¸
+last_page.title=ไปยังหน้าสุดท้าย
+last_page.label=ไปยังหน้าสุดท้าย
+last_page_label=ไปยังหน้าสุดท้าย
+page_rotate_cw.title=หมุนตามเข็มนาฬิà¸à¸²
+page_rotate_cw.label=หมุนตามเข็มนาฬิà¸à¸²
+page_rotate_cw_label=หมุนตามเข็มนาฬิà¸à¸²
+page_rotate_ccw.title=หมุนทวนเข็มนาฬิà¸à¸²
+page_rotate_ccw.label=หมุนทวนเข็มนาฬิà¸à¸²
+page_rotate_ccw_label=หมุนทวนเข็มนาฬิà¸à¸²
+
+cursor_text_select_tool.title=เปิดใช้งานเครื่à¸à¸‡à¸¡à¸·à¸à¸à¸²à¸£à¹€à¸¥à¸·à¸à¸à¸‚้à¸à¸„วาม
+cursor_text_select_tool_label=เครื่à¸à¸‡à¸¡à¸·à¸à¸à¸²à¸£à¹€à¸¥à¸·à¸à¸à¸‚้à¸à¸„วาม
+cursor_hand_tool.title=เปิดใช้งานเครื่à¸à¸‡à¸¡à¸·à¸à¸¡à¸·à¸
+cursor_hand_tool_label=เครื่à¸à¸‡à¸¡à¸·à¸à¸¡à¸·à¸
+
+scroll_vertical.title=ใช้à¸à¸²à¸£à¹€à¸¥à¸·à¹ˆà¸à¸™à¹à¸™à¸§à¸•ั้ง
+scroll_vertical_label=à¸à¸²à¸£à¹€à¸¥à¸·à¹ˆà¸à¸™à¹à¸™à¸§à¸•ั้ง
+scroll_horizontal.title=ใช้à¸à¸²à¸£à¹€à¸¥à¸·à¹ˆà¸à¸™à¹à¸™à¸§à¸™à¸à¸™
+scroll_horizontal_label=à¸à¸²à¸£à¹€à¸¥à¸·à¹ˆà¸à¸™à¹à¸™à¸§à¸™à¸à¸™
+scroll_wrapped.title=ใช้à¸à¸²à¸£à¹€à¸¥à¸·à¹ˆà¸à¸™à¹à¸šà¸šà¸„ลุม
+scroll_wrapped_label=เลื่à¸à¸™à¹à¸šà¸šà¸„ลุม
+
+spread_none.title=ไม่ต้à¸à¸‡à¸£à¸§à¸¡à¸à¸²à¸£à¸à¸£à¸°à¸ˆà¸²à¸¢à¸«à¸™à¹‰à¸²
+spread_none_label=ไม่à¸à¸£à¸°à¸ˆà¸²à¸¢
+spread_odd.title=รวมà¸à¸²à¸£à¸à¸£à¸°à¸ˆà¸²à¸¢à¸«à¸™à¹‰à¸²à¹€à¸£à¸´à¹ˆà¸¡à¸ˆà¸²à¸à¸«à¸™à¹‰à¸²à¸„ี่
+spread_odd_label=à¸à¸£à¸°à¸ˆà¸²à¸¢à¸à¸¢à¹ˆà¸²à¸‡à¹€à¸«à¸¥à¸·à¸à¹€à¸¨à¸©
+spread_even.title=รวมà¸à¸²à¸£à¸à¸£à¸°à¸ˆà¸²à¸¢à¸«à¸™à¹‰à¸²à¹€à¸£à¸´à¹ˆà¸¡à¸ˆà¸²à¸à¸«à¸™à¹‰à¸²à¸„ู่
+spread_even_label=à¸à¸£à¸°à¸ˆà¸²à¸¢à¸à¸¢à¹ˆà¸²à¸‡à¹€à¸—่าเทียม
+
+# Document properties dialog box
+document_properties.title=คุณสมบัติเà¸à¸à¸ªà¸²à¸£â€¦
+document_properties_label=คุณสมบัติเà¸à¸à¸ªà¸²à¸£â€¦
+document_properties_file_name=ชื่à¸à¹„ฟล์:
+document_properties_file_size=ขนาดไฟล์:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} ไบต์)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} ไบต์)
+document_properties_title=ชื่à¸à¹€à¸£à¸·à¹ˆà¸à¸‡:
+document_properties_author=ผู้สร้าง:
+document_properties_subject=ชื่à¸à¹€à¸£à¸·à¹ˆà¸à¸‡:
+document_properties_keywords=คำสำคัà¸:
+document_properties_creation_date=วันที่สร้าง:
+document_properties_modification_date=วันที่à¹à¸à¹‰à¹„ข:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=ผู้สร้าง:
+document_properties_producer=ผู้ผลิต PDF:
+document_properties_version=รุ่น PDF:
+document_properties_page_count=จำนวนหน้า:
+document_properties_page_size=ขนาดหน้า:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=à¹à¸™à¸§à¸•ั้ง
+document_properties_page_size_orientation_landscape=à¹à¸™à¸§à¸™à¸à¸™
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=จดหมาย
+document_properties_page_size_name_legal=ข้à¸à¸à¸Žà¸«à¸¡à¸²à¸¢
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=มุมมà¸à¸‡à¹€à¸§à¹‡à¸šà¹à¸šà¸šà¸£à¸§à¸”เร็ว:
+document_properties_linearized_yes=ใช่
+document_properties_linearized_no=ไม่
+document_properties_close=ปิด
+
+print_progress_message=à¸à¸³à¸¥à¸±à¸‡à¹€à¸•รียมเà¸à¸à¸ªà¸²à¸£à¸ªà¸³à¸«à¸£à¸±à¸šà¸à¸²à¸£à¸žà¸´à¸¡à¸žà¹Œâ€¦
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=ยà¸à¹€à¸¥à¸´à¸
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=เปิด/ปิดà¹à¸–บข้าง
+toggle_sidebar_notification.title=เปิด/ปิดà¹à¸–บข้าง (เà¸à¸à¸ªà¸²à¸£à¸¡à¸µà¹€à¸„้าร่าง/ไฟล์à¹à¸™à¸š)
+toggle_sidebar_notification2.title=เปิด/ปิดà¹à¸–บข้าง (เà¸à¸à¸ªà¸²à¸£à¸¡à¸µà¹€à¸„้าร่าง/ไฟล์à¹à¸™à¸š/เลเยà¸à¸£à¹Œ)
+toggle_sidebar_label=เปิด/ปิดà¹à¸–บข้าง
+document_outline.title=à¹à¸ªà¸”งเค้าร่างเà¸à¸à¸ªà¸²à¸£ (คลิà¸à¸ªà¸à¸‡à¸„รั้งเพื่à¸à¸‚ยาย/ยุบรายà¸à¸²à¸£à¸—ั้งหมด)
+document_outline_label=เค้าร่างเà¸à¸à¸ªà¸²à¸£
+attachments.title=à¹à¸ªà¸”งไฟล์à¹à¸™à¸š
+attachments_label=ไฟล์à¹à¸™à¸š
+layers.title=à¹à¸ªà¸”งเลเยà¸à¸£à¹Œ (คลิà¸à¸ªà¸à¸‡à¸„รั้งเพื่à¸à¸£à¸µà¹€à¸‹à¹‡à¸•เลเยà¸à¸£à¹Œà¸—ั้งหมดเป็นสถานะเริ่มต้น)
+layers_label=เลเยà¸à¸£à¹Œ
+thumbs.title=à¹à¸ªà¸”งภาพขนาดย่à¸
+thumbs_label=ภาพขนาดย่à¸
+findbar.title=ค้นหาในเà¸à¸à¸ªà¸²à¸£
+findbar_label=ค้นหา
+
+additional_layers=เลเยà¸à¸£à¹Œà¹€à¸žà¸´à¹ˆà¸¡à¹€à¸•ิม
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=หน้า {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=หน้า {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=ภาพขนาดย่à¸à¸‚à¸à¸‡à¸«à¸™à¹‰à¸² {{page}}
+
+# Find panel button title and messages
+find_input.title=ค้นหา
+find_input.placeholder=ค้นหาในเà¸à¸à¸ªà¸²à¸£â€¦
+find_previous.title=หาตำà¹à¸«à¸™à¹ˆà¸‡à¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²à¸‚à¸à¸‡à¸§à¸¥à¸µ
+find_previous_label=à¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²
+find_next.title=หาตำà¹à¸«à¸™à¹ˆà¸‡à¸–ัดไปขà¸à¸‡à¸§à¸¥à¸µ
+find_next_label=ถัดไป
+find_highlight=เน้นสีทั้งหมด
+find_match_case_label=ตัวพิมพ์ใหà¸à¹ˆà¹€à¸¥à¹‡à¸à¸•รงà¸à¸±à¸™
+find_entire_word_label=ทั้งคำ
+find_reached_top=ค้นหาถึงจุดเริ่มต้นขà¸à¸‡à¸«à¸™à¹‰à¸² เริ่มค้นต่à¸à¸ˆà¸²à¸à¸”้านล่าง
+find_reached_bottom=ค้นหาถึงจุดสิ้นสุดหน้า เริ่มค้นต่à¸à¸ˆà¸²à¸à¸”้านบน
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} จาภ{{total}} ที่ตรงà¸à¸±à¸™
+find_match_count[two]={{current}} จาภ{{total}} ที่ตรงà¸à¸±à¸™
+find_match_count[few]={{current}} จาภ{{total}} ที่ตรงà¸à¸±à¸™
+find_match_count[many]={{current}} จาภ{{total}} ที่ตรงà¸à¸±à¸™
+find_match_count[other]={{current}} จาภ{{total}} ที่ตรงà¸à¸±à¸™
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=มาà¸à¸à¸§à¹ˆà¸² {{limit}} ที่ตรงà¸à¸±à¸™
+find_match_count_limit[one]=มาà¸à¸à¸§à¹ˆà¸² {{limit}} ที่ตรงà¸à¸±à¸™
+find_match_count_limit[two]=มาà¸à¸à¸§à¹ˆà¸² {{limit}} ที่ตรงà¸à¸±à¸™
+find_match_count_limit[few]=มาà¸à¸à¸§à¹ˆà¸² {{limit}} ที่ตรงà¸à¸±à¸™
+find_match_count_limit[many]=มาà¸à¸à¸§à¹ˆà¸² {{limit}} ที่ตรงà¸à¸±à¸™
+find_match_count_limit[other]=มาà¸à¸à¸§à¹ˆà¸² {{limit}} ที่ตรงà¸à¸±à¸™
+find_not_found=ไม่พบวลี
+
+# Error panel labels
+error_more_info=ข้à¸à¸¡à¸¹à¸¥à¹€à¸žà¸´à¹ˆà¸¡à¹€à¸•ิม
+error_less_info=ข้à¸à¸¡à¸¹à¸¥à¸™à¹‰à¸à¸¢à¸¥à¸‡
+error_close=ปิด
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=ข้à¸à¸„วาม: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=สà¹à¸•à¸: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=ไฟล์: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=บรรทัด: {{line}}
+rendering_error=เà¸à¸´à¸”ข้à¸à¸œà¸´à¸”พลาดขณะเรนเดà¸à¸£à¹Œà¸«à¸™à¹‰à¸²
+
+# Predefined zoom values
+page_scale_width=ความà¸à¸§à¹‰à¸²à¸‡à¸«à¸™à¹‰à¸²
+page_scale_fit=พà¸à¸”ีหน้า
+page_scale_auto=ซูมà¸à¸±à¸•โนมัติ
+page_scale_actual=ขนาดจริง
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=ข้à¸à¸œà¸´à¸”พลาด
+loading_error=เà¸à¸´à¸”ข้à¸à¸œà¸´à¸”พลาดขณะโหลด PDF
+invalid_file_error=ไฟล์ PDF ไม่ถูà¸à¸•้à¸à¸‡à¸«à¸£à¸·à¸à¹€à¸ªà¸µà¸¢à¸«à¸²à¸¢
+missing_file_error=ไฟล์ PDF หายไป
+unexpected_response_error=à¸à¸²à¸£à¸•à¸à¸šà¸ªà¸™à¸à¸‡à¸‚à¸à¸‡à¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸à¸£à¹Œà¸—ี่ไม่คาดคิด
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[คำà¸à¸˜à¸´à¸šà¸²à¸¢à¸›à¸£à¸°à¸à¸à¸š {{type}}]
+password_label=ป้à¸à¸™à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¹€à¸žà¸·à¹ˆà¸à¹€à¸›à¸´à¸”ไฟล์ PDF นี้
+password_invalid=รหัสผ่านไม่ถูà¸à¸•้à¸à¸‡ โปรดลà¸à¸‡à¸à¸µà¸à¸„รั้ง
+password_ok=ตà¸à¸¥à¸‡
+password_cancel=ยà¸à¹€à¸¥à¸´à¸
+
+printing_not_supported=คำเตืà¸à¸™: เบราว์เซà¸à¸£à¹Œà¸™à¸µà¹‰à¹„ม่ได้สนับสนุนà¸à¸²à¸£à¸žà¸´à¸¡à¸žà¹Œà¸à¸¢à¹ˆà¸²à¸‡à¹€à¸•็มที่
+printing_not_ready=คำเตืà¸à¸™: PDF ไม่ได้รับà¸à¸²à¸£à¹‚หลดà¸à¸¢à¹ˆà¸²à¸‡à¹€à¸•็มที่สำหรับà¸à¸²à¸£à¸žà¸´à¸¡à¸žà¹Œ
+web_fonts_disabled=à¹à¸šà¸šà¸à¸±à¸à¸©à¸£à¹€à¸§à¹‡à¸šà¸–ูà¸à¸›à¸´à¸”ใช้งาน: ไม่สามารถใช้à¹à¸šà¸šà¸à¸±à¸à¸©à¸£ PDF à¸à¸±à¸‡à¸•ัว
diff --git a/thirdparty/pdfjs/web/locale/tl/viewer.properties b/thirdparty/pdfjs/web/locale/tl/viewer.properties
new file mode 100644
index 0000000..d3cce44
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/tl/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Naunang Pahina
+previous_label=Nakaraan
+next.title=Sunod na Pahina
+next_label=Sunod
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Pahina
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=ng {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} ng {{pagesCount}})
+
+zoom_out.title=Paliitin
+zoom_out_label=Paliitin
+zoom_in.title=Palakihin
+zoom_in_label=Palakihin
+zoom.title=Mag-zoom
+presentation_mode.title=Lumipat sa Presentation Mode
+presentation_mode_label=Presentation Mode
+open_file.title=Magbukas ng file
+open_file_label=Buksan
+print.title=i-Print
+print_label=i-Print
+download.title=i-Download
+download_label=i-Download
+bookmark.title=Kasalukuyang tingin (kopyahin o buksan sa bagong window)
+bookmark_label=Kasalukuyang tingin
+
+# Secondary toolbar and context menu
+tools.title=Mga Kagamitan
+tools_label=Mga Kagamitan
+first_page.title=Pumunta sa Unang Pahina
+first_page.label=Pumunta sa Unang Pahina
+first_page_label=Pumunta sa Unang Pahina
+last_page.title=Pumunta sa Huling Pahina
+last_page.label=Pumunta sa Huling Pahina
+last_page_label=Pumunta sa Huling Pahina
+page_rotate_cw.title=Paikutin Pakanan
+page_rotate_cw.label=Paikutin Pakanan
+page_rotate_cw_label=Paikutin Pakanan
+page_rotate_ccw.title=Paikutin Pakaliwa
+page_rotate_ccw.label=Paikutin Pakaliwa
+page_rotate_ccw_label=Paikutin Pakaliwa
+
+cursor_text_select_tool.title=I-enable ang Text Selection Tool
+cursor_text_select_tool_label=Text Selection Tool
+cursor_hand_tool.title=I-enable ang Hand Tool
+cursor_hand_tool_label=Hand Tool
+
+scroll_vertical.title=Gumamit ng Vertical Scrolling
+scroll_vertical_label=Vertical Scrolling
+scroll_horizontal.title=Gumamit ng Horizontal Scrolling
+scroll_horizontal_label=Horizontal Scrolling
+scroll_wrapped.title=Gumamit ng Wrapped Scrolling
+scroll_wrapped_label=Wrapped Scrolling
+
+spread_none.title=Huwag pagsamahin ang mga page spread
+spread_none_label=No Spreads
+spread_odd.title=Join page spreads starting with odd-numbered pages
+spread_odd_label=Mga Odd Spread
+spread_even.title=Pagsamahin ang mga page spread na nagsisimula sa mga even-numbered na pahina
+spread_even_label=Mga Even Spread
+
+# Document properties dialog box
+document_properties.title=Mga Katangian ng Dokumento…
+document_properties_label=Mga Katangian ng Dokumento…
+document_properties_file_name=File name:
+document_properties_file_size=File size:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Pamagat:
+document_properties_author=May-akda:
+document_properties_subject=Paksa:
+document_properties_keywords=Mga keyword:
+document_properties_creation_date=Petsa ng Pagkakagawa:
+document_properties_modification_date=Petsa ng Pagkakabago:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Tagalikha:
+document_properties_producer=PDF Producer:
+document_properties_version=PDF Version:
+document_properties_page_count=Bilang ng Pahina:
+document_properties_page_size=Laki ng Pahina:
+document_properties_page_size_unit_inches=pulgada
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=patayo
+document_properties_page_size_orientation_landscape=pahiga
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Fast Web View:
+document_properties_linearized_yes=Oo
+document_properties_linearized_no=Hindi
+document_properties_close=Isara
+
+print_progress_message=Inihahanda ang dokumento para sa pag-print…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Kanselahin
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Ipakita/Itago ang Sidebar
+toggle_sidebar_notification.title=Ipakita/Itago ang Sidebar (nagtataglay ang dokumento ng balangkas/mga attachment)
+toggle_sidebar_notification2.title=Ipakita/Itago ang Sidebar (nagtataglay ang dokumento ng balangkas/mga attachment/mga layer)
+toggle_sidebar_label=Ipakita/Itago ang Sidebar
+document_outline.title=Ipakita ang Document Outline (mag-double-click para i-expand/collapse ang laman)
+document_outline_label=Balangkas ng Dokumento
+attachments.title=Ipakita ang mga Attachment
+attachments_label=Mga attachment
+layers.title=Ipakita ang mga Layer (mag-double click para mareset ang lahat ng layer sa orihinal na estado)
+layers_label=Mga layer
+thumbs.title=Ipakita ang mga Thumbnail
+thumbs_label=Mga thumbnail
+findbar.title=Hanapin sa Dokumento
+findbar_label=Hanapin
+
+additional_layers=Mga Karagdagang Layer
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Pahina {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Pahina {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Thumbnail ng Pahina {{page}}
+
+# Find panel button title and messages
+find_input.title=Hanapin
+find_input.placeholder=Hanapin sa dokumento…
+find_previous.title=Hanapin ang nakaraang pangyayari ng parirala
+find_previous_label=Nakaraan
+find_next.title=Hanapin ang susunod na pangyayari ng parirala
+find_next_label=Susunod
+find_highlight=I-highlight lahat
+find_match_case_label=Itugma ang case
+find_entire_word_label=Buong salita
+find_reached_top=Naabot na ang tuktok ng dokumento, ipinagpatuloy mula sa ilalim
+find_reached_bottom=Naabot na ang dulo ng dokumento, ipinagpatuloy mula sa tuktok
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} ng {{total}} tugma
+find_match_count[two]={{current}} ng {{total}} tugma
+find_match_count[few]={{current}} ng {{total}} tugma
+find_match_count[many]={{current}} ng {{total}} tugma
+find_match_count[other]={{current}} ng {{total}} tugma
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Higit sa {{limit}} tugma
+find_match_count_limit[one]=Higit sa {{limit}} tugma
+find_match_count_limit[two]=Higit sa {{limit}} tugma
+find_match_count_limit[few]=Higit sa {{limit}} tugma
+find_match_count_limit[many]=Higit sa {{limit}} tugma
+find_match_count_limit[other]=Higit sa {{limit}} tugma
+find_not_found=Hindi natagpuan ang parirala
+
+# Error panel labels
+error_more_info=Karagdagang Impormasyon
+error_less_info=Mas Kaunting Impormasyon
+error_close=Isara
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Mensahe: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=File: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Linya: {{line}}
+rendering_error=Nagkaproblema habang nirerender ang pahina.
+
+# Predefined zoom values
+page_scale_width=Lapad ng Pahina
+page_scale_fit=Pagkasyahin ang Pahina
+page_scale_auto=Automatic Zoom
+page_scale_actual=Totoong sukat
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=Nagkaproblema habang niloload ang PDF.
+invalid_file_error=Di-wasto o sira ang PDF file.
+missing_file_error=Nawawalang PDF file.
+unexpected_response_error=Hindi inaasahang tugon ng server.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=Ipasok ang password upang buksan ang PDF file na ito.
+password_invalid=Maling password. Subukan uli.
+password_ok=OK
+password_cancel=Kanselahin
+
+printing_not_supported=Babala: Hindi pa ganap na suportado ang pag-print sa browser na ito.
+printing_not_ready=Babala: Hindi ganap na nabuksan ang PDF para sa pag-print.
+web_fonts_disabled=Naka-disable ang mga Web font: hindi kayang gamitin ang mga naka-embed na PDF font.
diff --git a/thirdparty/pdfjs/web/locale/tr/viewer.properties b/thirdparty/pdfjs/web/locale/tr/viewer.properties
new file mode 100644
index 0000000..e898dd5
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/tr/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Önceki sayfa
+previous_label=Önceki
+next.title=Sonraki sayfa
+next_label=Sonraki
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Sayfa
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=Uzaklaştır
+zoom_out_label=Uzaklaştır
+zoom_in.title=Yaklaştır
+zoom_in_label=Yaklaştır
+zoom.title=Yakınlaştırma
+presentation_mode.title=Sunum moduna geç
+presentation_mode_label=Sunum Modu
+open_file.title=Dosya aç
+open_file_label=Aç
+print.title=Yazdır
+print_label=Yazdır
+download.title=İndir
+download_label=İndir
+bookmark.title=Geçerli görünüm (kopyala veya yeni pencerede aç)
+bookmark_label=Geçerli görünüm
+
+# Secondary toolbar and context menu
+tools.title=Araçlar
+tools_label=Araçlar
+first_page.title=İlk sayfaya git
+first_page.label=İlk sayfaya git
+first_page_label=İlk sayfaya git
+last_page.title=Son sayfaya git
+last_page.label=Son sayfaya git
+last_page_label=Son sayfaya git
+page_rotate_cw.title=Saat yönünde döndür
+page_rotate_cw.label=Saat yönünde döndür
+page_rotate_cw_label=Saat yönünde döndür
+page_rotate_ccw.title=Saat yönünün tersine döndür
+page_rotate_ccw.label=Saat yönünün tersine döndür
+page_rotate_ccw_label=Saat yönünün tersine döndür
+
+cursor_text_select_tool.title=Metin seçme aracını etkinleştir
+cursor_text_select_tool_label=Metin seçme aracı
+cursor_hand_tool.title=El aracını etkinleştir
+cursor_hand_tool_label=El aracı
+
+scroll_vertical.title=Dikey kaydırma kullan
+scroll_vertical_label=Dikey kaydırma
+scroll_horizontal.title=Yatay kaydırma kullan
+scroll_horizontal_label=Yatay kaydırma
+scroll_wrapped.title=Yan yana kaydırmayı kullan
+scroll_wrapped_label=Yan yana kaydırma
+
+spread_none.title=Yan yana sayfaları birleştirme
+spread_none_label=BirleÅŸtirme
+spread_odd.title=Yan yana sayfaları tek numaralı sayfalardan başlayarak birleştir
+spread_odd_label=Tek numaralı
+spread_even.title=Yan yana sayfaları çift numaralı sayfalardan başlayarak birleştir
+spread_even_label=Çift numaralı
+
+# Document properties dialog box
+document_properties.title=Belge özellikleri…
+document_properties_label=Belge özellikleri…
+document_properties_file_name=Dosya adı:
+document_properties_file_size=Dosya boyutu:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bayt)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bayt)
+document_properties_title=Başlık:
+document_properties_author=Yazar:
+document_properties_subject=Konu:
+document_properties_keywords=Anahtar kelimeler:
+document_properties_creation_date=Oluturma tarihi:
+document_properties_modification_date=DeÄŸiÅŸtirme tarihi:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}} {{time}}
+document_properties_creator=OluÅŸturan:
+document_properties_producer=PDF üreticisi:
+document_properties_version=PDF sürümü:
+document_properties_page_count=Sayfa sayısı:
+document_properties_page_size=Sayfa boyutu:
+document_properties_page_size_unit_inches=inç
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=dikey
+document_properties_page_size_orientation_landscape=yatay
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Hızlı web görünümü:
+document_properties_linearized_yes=Evet
+document_properties_linearized_no=Hayır
+document_properties_close=Kapat
+
+print_progress_message=Belge yazdırılmaya hazırlanıyor…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent=%{{progress}}
+print_progress_close=İptal
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Kenar çubuğunu aç/kapat
+toggle_sidebar_notification.title=Kenar çubuğunu aç/kapat (Belge ana hat/ekler içeriyor)
+toggle_sidebar_notification2.title=Kenar çubuğunu aç/kapat (Belge anahat/ekler/katmanlar içeriyor)
+toggle_sidebar_label=Kenar çubuğunu aç/kapat
+document_outline.title=Belge ana hatlarını göster (Tüm öğeleri genişletmek/daraltmak için çift tıklayın)
+document_outline_label=Belge ana hatları
+attachments.title=Ekleri göster
+attachments_label=Ekler
+layers.title=Katmanları göster (tüm katmanları varsayılan duruma sıfırlamak için çift tıklayın)
+layers_label=Katmanlar
+thumbs.title=Küçük resimleri göster
+thumbs_label=Küçük resimler
+findbar.title=Belgede bul
+findbar_label=Bul
+
+additional_layers=Ek katmanlar
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Sayfa {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Sayfa {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}}. sayfanın küçük hâli
+
+# Find panel button title and messages
+find_input.title=Bul
+find_input.placeholder=Belgede bul…
+find_previous.title=Önceki eşleşmeyi bul
+find_previous_label=Önceki
+find_next.title=Sonraki eÅŸleÅŸmeyi bul
+find_next_label=Sonraki
+find_highlight=Tümünü vurgula
+find_match_case_label=Büyük-küçük harfe duyarlı
+find_entire_word_label=Tam sözcükler
+find_reached_top=Belgenin başına ulaşıldı, sonundan devam edildi
+find_reached_bottom=Belgenin sonuna ulaşıldı, başından devam edildi
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} eÅŸleÅŸmeden {{current}}. eÅŸleÅŸme
+find_match_count[two]={{total}} eÅŸleÅŸmeden {{current}}. eÅŸleÅŸme
+find_match_count[few]={{total}} eÅŸleÅŸmeden {{current}}. eÅŸleÅŸme
+find_match_count[many]={{total}} eÅŸleÅŸmeden {{current}}. eÅŸleÅŸme
+find_match_count[other]={{total}} eÅŸleÅŸmeden {{current}}. eÅŸleÅŸme
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]={{limit}} eÅŸleÅŸmeden fazla
+find_match_count_limit[one]={{limit}} eÅŸleÅŸmeden fazla
+find_match_count_limit[two]={{limit}} eÅŸleÅŸmeden fazla
+find_match_count_limit[few]={{limit}} eÅŸleÅŸmeden fazla
+find_match_count_limit[many]={{limit}} eÅŸleÅŸmeden fazla
+find_match_count_limit[other]={{limit}} eÅŸleÅŸmeden fazla
+find_not_found=Eşleşme bulunamadı
+
+# Error panel labels
+error_more_info=Daha fazla bilgi al
+error_less_info=Daha az bilgi
+error_close=Kapat
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js sürüm {{version}} (yapı: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=İleti: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Yığın: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Dosya: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Satır: {{line}}
+rendering_error=Sayfa yorumlanırken bir hata oluştu.
+
+# Predefined zoom values
+page_scale_width=Sayfa geniÅŸliÄŸi
+page_scale_fit=Sayfayı sığdır
+page_scale_auto=Otomatik yakınlaştır
+page_scale_actual=Gerçek boyut
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent=%{{scale}}
+
+# Loading indicator messages
+loading_error_indicator=Hata
+loading_error=PDF yüklenirken bir hata oluştu.
+invalid_file_error=Geçersiz veya bozulmuş PDF dosyası.
+missing_file_error=PDF dosyası eksik.
+unexpected_response_error=Beklenmeyen sunucu yanıtı.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} iÅŸareti]
+password_label=Bu PDF dosyasını açmak için parolasını yazın.
+password_invalid=Geçersiz parola. Lütfen yeniden deneyin.
+password_ok=Tamam
+password_cancel=İptal
+
+printing_not_supported=Uyarı: Yazdırma bu tarayıcı tarafından tam olarak desteklenmemektedir.
+printing_not_ready=Uyarı: PDF tamamen yüklenmedi ve yazdırmaya hazır değil.
+web_fonts_disabled=Web fontları devre dışı: Gömülü PDF fontları kullanılamıyor.
diff --git a/thirdparty/pdfjs/web/locale/trs/viewer.properties b/thirdparty/pdfjs/web/locale/trs/viewer.properties
new file mode 100644
index 0000000..65252f7
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/trs/viewer.properties
@@ -0,0 +1,213 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Pajinâ gunâj rukùu
+previous_label=Sa gachin
+next.title=Pajinâ 'na' ñaan
+next_label=Ne' ñaan
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Ñanj
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=si'iaj {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} of {{pagesCount}})
+
+zoom_out.title=Nagi'iaj li'
+zoom_out_label=Nagi'iaj li'
+zoom_in.title=Nagi'iaj niko'
+zoom_in_label=Nagi'iaj niko'
+zoom.title=dà j nìko ma'an
+presentation_mode.title=Naduno' daj ga ma
+presentation_mode_label=Daj gà ma
+open_file.title=Na'nïn' chrû ñanj
+open_file_label=Na'nïn
+print.title=Nari' ña du'ua
+print_label=Nari' ñadu'ua
+download.title=Nadunïnj
+download_label=Nadunïnj
+bookmark.title=Daj hua ma (Guxun' nej na'nïn' riña ventana nakà a)
+bookmark_label=Daj hua ma
+
+# Secondary toolbar and context menu
+tools.title=Rasun
+tools_label=Nej rasùun
+first_page.title=gun' riña pajina asiniin
+first_page.label=Gun' riña pajina asiniin
+first_page_label=Gun' riña pajina asiniin
+last_page.title=Gun' riña pajina rukù ni'in
+last_page.label=Gun' riña pajina rukù ni'inj
+last_page_label=Gun' riña pajina rukù ni'inj
+page_rotate_cw.title=Tanikaj ne' huat
+page_rotate_cw.label=Tanikaj ne' huat
+page_rotate_cw_label=Tanikaj ne' huat
+page_rotate_ccw.title=Tanikaj ne' chînt'
+page_rotate_ccw.label=Tanikaj ne' chint
+page_rotate_ccw_label=Tanikaj ne' chint
+
+cursor_text_select_tool.title=Dugi'iaj sun' sa ganahui texto
+cursor_text_select_tool_label=Nej rasun arajsun' da' nahui' texto
+cursor_hand_tool.title=Nachrun' nej rasun
+cursor_hand_tool_label=Sa rajsun ro'o'
+
+scroll_vertical.title=Garasun' dukuán runūu
+scroll_vertical_label=Dukuán runūu
+scroll_horizontal.title=Garasun' dukuán nikin' nahui
+scroll_horizontal_label=Dukuán nikin' nahui
+scroll_wrapped.title=Garasun' sa nachree
+scroll_wrapped_label=Sa nachree
+
+spread_none.title=Si nagi'iaj nugun'un' nej pagina hua ninin
+spread_none_label=Ni'io daj hua pagina
+spread_odd.title=Nagi'iaj nugua'ant nej pajina
+spread_odd_label=Ni'io' daj hua libro gurin
+spread_even.title=NakÄj dugui' ngà nej pajinâ ayi'ì ngà da' hùi hùi
+spread_even_label=Nahuin nìko nej
+
+# Document properties dialog box
+document_properties.title=Nej sa nikÄj ñanj…
+document_properties_label=Nej sa nikÄj ñanj…
+document_properties_file_name=Si yugui archîbo:
+document_properties_file_size=Dà j yachìj archîbo:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Si yugui:
+document_properties_author=Sà girirà :
+document_properties_subject=Dugui':
+document_properties_keywords=Nej nuguan' huìi:
+document_properties_creation_date=Gui gurugui' man:
+document_properties_modification_date=Nuguan' nahuin nakà :
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Guiri ro'
+document_properties_producer=Sa ri PDF:
+document_properties_version=PDF Version:
+document_properties_page_count=Si Guendâ Pâjina:
+document_properties_page_size=Dà j yachìj pâjina:
+document_properties_page_size_unit_inches=riña
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=nadu'ua
+document_properties_page_size_orientation_landscape=dà j huaj
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Da'ngà 'a
+document_properties_page_size_name_legal=Nuguan' a'nï'ïn
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Nanèt chre ni'iajt riña Web:
+document_properties_linearized_yes=Ga'ue
+document_properties_linearized_no=Si ga'ue
+document_properties_close=Narán
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Duyichin'
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=NadunÄ barrâ nù yi'nïn
+toggle_sidebar_label=NadunÄ barrâ nù yi'nïn
+findbar_label=Narì'
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+
+# Find panel button title and messages
+find_input.title=Narì'
+find_previous_label=Sa gachîn
+find_next_label=Ne' ñaan
+find_highlight=Daran' sa ña'an
+find_match_case_label=Match case
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} si'iaj {{total}} guña gè huaj
+find_match_count[two]={{current}} si'iaj {{total}} guña gè huaj
+find_match_count[few]={{current}} si'iaj {{total}} guña gè huaj
+find_match_count[many]={{current}} si'iaj {{total}} guña gè huaj
+find_match_count[other]={{current}} of {{total}} matches
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Doj ngà da' {{limit}} nej sa nari' dugui'i
+find_match_count_limit[one]=Doj ngà da' {{limit}} sa nari' dugui'i
+find_match_count_limit[two]=Doj ngà da' {{limit}} nej sa nari' dugui'i
+find_match_count_limit[few]=Doj ngà da' {{limit}} nej sa nari' dugui'i
+find_match_count_limit[many]=Doj ngà da' {{limit}} nej sa nari' dugui'i
+find_match_count_limit[other]=Doj ngà da' {{limit}} nej sa nari' dugui'i
+find_not_found=Nu narì'ij nugua'anj
+
+# Error panel labels
+error_more_info=Doj nuguan' a'min rayi'î nan
+error_less_info=Dòj nuguan' a'min rayi'î nan
+error_close=Narán
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Message: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Naru'ui': {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Archîbo: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Lînia: {{line}}
+
+# Predefined zoom values
+page_scale_actual=Dà j yà chi akuan' nÃn
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Nitaj si hua hue'ej
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+password_ok=Ga'ue
+password_cancel=Duyichin'
+
diff --git a/thirdparty/pdfjs/web/locale/uk/viewer.properties b/thirdparty/pdfjs/web/locale/uk/viewer.properties
new file mode 100644
index 0000000..eaeb551
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/uk/viewer.properties
@@ -0,0 +1,253 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð½Ñ Ñторінка
+previous_label=ПопереднÑ
+next.title=ÐаÑтупна Ñторінка
+next_label=ÐаÑтупна
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Сторінка
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=із {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} із {{pagesCount}})
+
+zoom_out.title=Зменшити
+zoom_out_label=Зменшити
+zoom_in.title=Збільшити
+zoom_in_label=Збільшити
+zoom.title=МаÑштаб
+presentation_mode.title=Перейти в режим презентації
+presentation_mode_label=Режим презентації
+open_file.title=Відкрити файл
+open_file_label=Відкрити
+print.title=Друк
+print_label=Друк
+download.title=Завантажити
+download_label=Завантажити
+bookmark.title=Поточний виглÑд (копіювати чи відкрити в новому вікні)
+bookmark_label=Поточний виглÑд
+
+# Secondary toolbar and context menu
+tools.title=ІнÑтрументи
+tools_label=ІнÑтрументи
+first_page.title=Ðа першу Ñторінку
+first_page.label=Ðа першу Ñторінку
+first_page_label=Ðа першу Ñторінку
+last_page.title=Ðа оÑтанню Ñторінку
+last_page.label=Ðа оÑтанню Ñторінку
+last_page_label=Ðа оÑтанню Ñторінку
+page_rotate_cw.title=Повернути за годинниковою Ñтрілкою
+page_rotate_cw.label=Повернути за годинниковою Ñтрілкою
+page_rotate_cw_label=Повернути за годинниковою Ñтрілкою
+page_rotate_ccw.title=Повернути проти годинникової Ñтрілки
+page_rotate_ccw.label=Повернути проти годинникової Ñтрілки
+page_rotate_ccw_label=Повернути проти годинникової Ñтрілки
+
+cursor_text_select_tool.title=Увімкнути інÑтрумент вибору текÑту
+cursor_text_select_tool_label=ІнÑтрумент вибору текÑту
+cursor_hand_tool.title=Увімкнути інÑтрумент "Рука"
+cursor_hand_tool_label=ІнÑтрумент "Рука"
+
+scroll_vertical.title=ВикориÑтовувати вертикальне прокручуваннÑ
+scroll_vertical_label=Вертикальне прокручуваннÑ
+scroll_horizontal.title=ВикориÑтовувати горизонтальне прокручуваннÑ
+scroll_horizontal_label=Горизонтальне прокручуваннÑ
+scroll_wrapped.title=ВикориÑтовувати маÑштабоване прокручуваннÑ
+scroll_wrapped_label=МаÑштабоване прокручуваннÑ
+
+spread_none.title=Ðе викориÑтовувати розгорнуті Ñторінки
+spread_none_label=Без розгорнутих Ñторінок
+spread_odd.title=Розгорнуті Ñторінки починаютьÑÑ Ð· непарних номерів
+spread_odd_label=Ðепарні Ñторінки зліва
+spread_even.title=Розгорнуті Ñторінки починаютьÑÑ Ð· парних номерів
+spread_even_label=Парні Ñторінки зліва
+
+# Document properties dialog box
+document_properties.title=ВлаÑтивоÑті документа…
+document_properties_label=ВлаÑтивоÑті документа…
+document_properties_file_name=Ðазва файла:
+document_properties_file_size=Розмір файла:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} КБ ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} МБ ({{size_b}} bytes)
+document_properties_title=Заголовок:
+document_properties_author=Ðвтор:
+document_properties_subject=Тема:
+document_properties_keywords=Ключові Ñлова:
+document_properties_creation_date=Дата ÑтвореннÑ:
+document_properties_modification_date=Дата зміни:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Створено:
+document_properties_producer=Виробник PDF:
+document_properties_version=ВерÑÑ–Ñ PDF:
+document_properties_page_count=КількіÑть Ñторінок:
+document_properties_page_size=Розмір Ñторінки:
+document_properties_page_size_unit_inches=дюймів
+document_properties_page_size_unit_millimeters=мм
+document_properties_page_size_orientation_portrait=книжкова
+document_properties_page_size_orientation_landscape=альбомна
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Швидкий переглÑд в Інтернеті:
+document_properties_linearized_yes=Так
+document_properties_linearized_no=ÐÑ–
+document_properties_close=Закрити
+
+print_progress_message=Підготовка документу до друку…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=СкаÑувати
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Бічна панель
+toggle_sidebar_notification.title=Перемкнути бічну панель (документ має вміÑÑ‚/вкладеннÑ)
+toggle_sidebar_notification2.title=Перемкнути бічну панель (документ міÑтить еÑкіз/вкладеннÑ/шари)
+toggle_sidebar_label=Перемкнути бічну панель
+document_outline.title=Показати Ñхему документу (подвійний клік Ð´Ð»Ñ Ñ€Ð¾Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ/Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ñ–Ð²)
+document_outline_label=Схема документа
+attachments.title=Показати прикріпленнÑ
+attachments_label=ПрикріпленнÑ
+layers.title=Показати шари (двічі клацніть, щоб Ñкинути вÑÑ– шари до типового Ñтану)
+layers_label=Шари
+thumbs.title=Показувати еÑкізи
+thumbs_label=ЕÑкізи
+current_outline_item.title=Знайти поточний елемент зміÑту
+current_outline_item_label=Поточний елемент зміÑту
+findbar.title=Знайти в документі
+findbar_label=Знайти
+
+additional_layers=Додаткові шари
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Сторінка {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Сторінка {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=ЕÑкіз Ñторінки {{page}}
+
+# Find panel button title and messages
+find_input.title=Знайти
+find_input.placeholder=Знайти в документі…
+find_previous.title=Знайти попереднє Ð²Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ñ„Ñ€Ð°Ð·Ð¸
+find_previous_label=Попереднє
+find_next.title=Знайти наÑтупне Ð²Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ñ„Ñ€Ð°Ð·Ð¸
+find_next_label=ÐаÑтупне
+find_highlight=ПідÑвітити вÑе
+find_match_case_label=З урахуваннÑм регіÑтру
+find_entire_word_label=Цілі Ñлова
+find_reached_top=ДоÑÑгнуто початку документу, продовжено з кінцÑ
+find_reached_bottom=ДоÑÑгнуто ÐºÑ–Ð½Ñ†Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ñƒ, продовжено з початку
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} збіг із {{total}}
+find_match_count[two]={{current}} збіги з {{total}}
+find_match_count[few]={{current}} збігів із {{total}}
+find_match_count[many]={{current}} збігів із {{total}}
+find_match_count[other]={{current}} збігів із {{total}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Понад {{limit}} збігів
+find_match_count_limit[one]=Більше, ніж {{limit}} збіг
+find_match_count_limit[two]=Більше, ніж {{limit}} збіги
+find_match_count_limit[few]=Більше, ніж {{limit}} збігів
+find_match_count_limit[many]=Понад {{limit}} збігів
+find_match_count_limit[other]=Понад {{limit}} збігів
+find_not_found=Фразу не знайдено
+
+# Error panel labels
+error_more_info=Більше інформації
+error_less_info=Менше інформації
+error_close=Закрити
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=ПовідомленнÑ: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Стек: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Файл: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Ð Ñдок: {{line}}
+rendering_error=Під Ñ‡Ð°Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñторінки ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°.
+
+# Predefined zoom values
+page_scale_width=За шириною
+page_scale_fit=ВміÑтити
+page_scale_auto=ÐвтомаÑштаб
+page_scale_actual=ДійÑний розмір
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Помилка
+loading_error=Під Ñ‡Ð°Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ PDF ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°.
+invalid_file_error=ÐедійÑний або пошкоджений PDF-файл.
+missing_file_error=ВідÑутній PDF-файл.
+unexpected_response_error=Ðеочікувана відповідь Ñервера.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}}-аннотаціÑ]
+password_label=Введіть пароль Ð´Ð»Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ†ÑŒÐ¾Ð³Ð¾ PDF-файла.
+password_invalid=Ðевірний пароль. Спробуйте ще.
+password_ok=Гаразд
+password_cancel=СкаÑувати
+
+printing_not_supported=ПопередженнÑ: Цей браузер не повніÑтю підтримує друк.
+printing_not_ready=ПопередженнÑ: PDF не повніÑтю завантажений Ð´Ð»Ñ Ð´Ñ€ÑƒÐºÑƒ.
+web_fonts_disabled=Веб-шрифти вимкнено: неможливо викориÑтати вбудовані у PDF шрифти.
diff --git a/thirdparty/pdfjs/web/locale/ur/viewer.properties b/thirdparty/pdfjs/web/locale/ur/viewer.properties
new file mode 100644
index 0000000..162ca14
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/ur/viewer.properties
@@ -0,0 +1,241 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=پچھلا ØµÙØÛ
+previous_label=پچھلا
+next.title=اگلا ØµÙØÛ
+next_label=Ø¢Ú¯Û’
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=ØµÙØÛ
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages={{pagesCount}} کا
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} کا {{pagesCount}})
+
+zoom_out.title=Ø¨Ø§ÛØ± زوم کریں
+zoom_out_label=Ø¨Ø§ÛØ± زوم کریں
+zoom_in.title=اندر زوم کریں
+zoom_in_label=اندر زوم کریں
+zoom.title=زوم
+presentation_mode.title=پیشکش موڈ میں چلے جائیں
+presentation_mode_label=پیشکش موڈ
+open_file.title=مسل کھولیں
+open_file_label=کھولیں
+print.title=چھاپیں
+print_label=چھاپیں
+download.title=ڈاؤن لوڈ
+download_label=ڈاؤن لوڈ
+bookmark.title=ØØ§Ù„ÛŒÛ Ù†Ø¸Ø§Ø±Û (Ù†Û“ Ø¯Ø±ÛŒÚ†Û Ù…ÛŒÚº نقل کریں یا کھولیں)
+bookmark_label=ØØ§Ù„ÛŒÛ Ù†Ø¸Ø§Ø±Û
+
+# Secondary toolbar and context menu
+tools.title=آلات
+tools_label=آلات
+first_page.title=Ù¾ÛÙ„Û’ ØµÙØÛ Ù¾Ø± جائیں
+first_page.label=Ù¾ÛÙ„Û’ ØµÙØÛ Ù¾Ø± جائیں
+first_page_label=Ù¾ÛÙ„Û’ ØµÙØÛ Ù¾Ø± جائیں
+last_page.title=آخری ØµÙØÛ Ù¾Ø± جائیں
+last_page.label=آخری ØµÙØÛ Ù¾Ø± جائیں
+last_page_label=آخری ØµÙØÛ Ù¾Ø± جائیں
+page_rotate_cw.title=گھڑی وار گھمائیں
+page_rotate_cw.label=گھڑی وار گھمائیں
+page_rotate_cw_label=گھڑی وار گھمائیں
+page_rotate_ccw.title=ضد گھڑی وار گھمائیں
+page_rotate_ccw.label=ضد گھڑی وار گھمائیں
+page_rotate_ccw_label=ضد گھڑی وار گھمائیں
+
+cursor_text_select_tool.title=متن Ú©Û’ انتخاب Ú©Û’ ٹول Ú©Ùˆ ÙØ¹Ø§Ù„ بناے
+cursor_text_select_tool_label=متن Ú©Û’ انتخاب کا آلÛ
+cursor_hand_tool.title=Ûینڈ ٹول Ú©Ùˆ ÙØ¹Ø§Ù„ بناییں
+cursor_hand_tool_label=ÛØ§ØªÚ¾ کا آلÛ
+
+scroll_vertical.title=عمودی اسکرولنگ کا استعمال کریں
+scroll_vertical_label=عمودی اسکرولنگ
+scroll_horizontal.title=اÙÙ‚ÛŒ سکرولنگ کا استعمال کریں
+scroll_horizontal_label=اÙÙ‚ÛŒ سکرولنگ
+
+spread_none.title=ØµÙØÛ Ù¾Ú¾ÛŒÙ„Ø§Ù†Û’ میں شامل Ù†Û ÛÙˆÚº
+spread_none_label=کوئی پھیلاؤ Ù†Ûیں
+spread_odd_label=تاک پھیلاؤ
+spread_even_label=Ø¬ÙØª پھیلاؤ
+
+# Document properties dialog box
+document_properties.title=دستاویز خواص…
+document_properties_label=دستاویز خواص…\u0020
+document_properties_file_name=نام مسل:
+document_properties_file_size=مسل سائز:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=عنوان:
+document_properties_author=تخلیق کار:
+document_properties_subject=موضوع:
+document_properties_keywords=کلیدی Ø§Ù„ÙØ§Ø¸:
+document_properties_creation_date=تخلیق کی تاریخ:
+document_properties_modification_date=ترمیم کی تاریخ:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}، {{time}}
+document_properties_creator=تخلیق کار:
+document_properties_producer=PDF پیدا کار:
+document_properties_version=PDF ورژن:
+document_properties_page_count=ØµÙØÛ Ø´Ù…Ø§Ø±:
+document_properties_page_size=صÙÛ Ú©ÛŒ لمبائ:
+document_properties_page_size_unit_inches=میں
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=عمودی انداز
+document_properties_page_size_orientation_landscape=اÙقى انداز
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=خط
+document_properties_page_size_name_legal=قانونی
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} {{name}} {{orientation}}
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=تیز ویب دیکھیں:
+document_properties_linearized_yes=ÛØ§Úº
+document_properties_linearized_no=Ù†Ûیں
+document_properties_close=بند کریں
+
+print_progress_message=چھاپنے کرنے کے لیے دستاویز تیار کیے جا رھے ھیں
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent=*{{progress}}%*
+print_progress_close=منسوخ کریں
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=سلائیڈ ٹوگل کریں
+toggle_sidebar_label=سلائیڈ ٹوگل کریں
+document_outline.title=دستاویز کی سرخیاں دکھایں (تمام اشیاء وسیع / غائب کرنے کے لیے ڈبل کلک کریں)
+document_outline_label=دستاویز آؤٹ لائن
+attachments.title=منسلکات دکھائیں
+attachments_label=منسلکات
+thumbs.title=تھمبنیل دکھائیں
+thumbs_label=مجمل
+findbar.title=دستاویز میں ڈھونڈیں
+findbar_label=ڈھونڈیں
+
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=ØµÙØÛ {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=ØµÙØÛ {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=ØµÙØÛ’ کا مجمل {{page}}
+
+# Find panel button title and messages
+find_input.title=ڈھونڈیں
+find_input.placeholder=دستاویز… میں ڈھونڈیں
+find_previous.title=Ùقرے کا پچھلا وقوع ڈھونڈیں
+find_previous_label=پچھلا
+find_next.title=Ùقرے کا Ø§Ú¯Ù„Û ÙˆÙ‚ÙˆØ¹ ڈھونڈیں
+find_next_label=Ø¢Ú¯Û’
+find_highlight=تمام نمایاں کریں
+find_match_case_label=ØØ±ÙˆÙ Ù…Ø´Ø§Ø¨Û Ú©Ø±ÛŒÚº
+find_entire_word_label=تمام Ø§Ù„ÙØ§Ø¸
+find_reached_top=ØµÙØÛ Ú©Û’ شروع پر Ù¾ÛÙ†Ú† گیا، نیچے سے جاری کیا
+find_reached_bottom=ØµÙØÛ Ú©Û’ اختتام پر Ù¾ÛÙ†Ú† گیا، اوپر سے جاری کیا
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{total}} میچ کا {{current}}
+find_match_count[few]={{total}} میچوں میں سے {{current}}
+find_match_count[many]={{total}} میچوں میں سے {{current}}
+find_match_count[other]={{total}} میچوں میں سے {{current}}
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(total) ]}
+find_match_count_limit[zero]={{limit}} سے Ø²ÛŒØ§Ø¯Û Ù…ÛŒÚ†
+find_match_count_limit[one]={{limit}} سے Ø²ÛŒØ§Ø¯Û Ù…ÛŒÚ†
+find_match_count_limit[two]={{limit}} سے Ø²ÛŒØ§Ø¯Û Ù…ÛŒÚ†
+find_match_count_limit[few]={{limit}} سے Ø²ÛŒØ§Ø¯Û Ù…ÛŒÚ†
+find_match_count_limit[many]={{limit}} سے Ø²ÛŒØ§Ø¯Û Ù…ÛŒÚ†
+find_match_count_limit[other]={{limit}} سے Ø²ÛŒØ§Ø¯Û Ù…ÛŒÚ†
+find_not_found=Ùقرا Ù†Ûیں ملا
+
+# Error panel labels
+error_more_info=مزید معلومات
+error_less_info=کم معلومات
+error_close=بند کریں
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=پیغام: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=سٹیک: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=مسل: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=لائن: {{line}}
+rendering_error=ØµÙØÛ Ø¨Ù†Ø§ØªÛ’ Ûوئے نقص Ø¢ گیا۔
+
+# Predefined zoom values
+page_scale_width=ØµÙØÛ Ú†ÙˆÚ‘Ø§Ø¦ÛŒ
+page_scale_fit=ØµÙØÛ Ùٹنگ
+page_scale_auto=خودکار زوم
+page_scale_actual=اصل سائز
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=نقص
+loading_error=PDF لوڈ کرتے وقت نقص آ گیا۔
+invalid_file_error=ناجائز یا خراب PDF مسل
+missing_file_error=PDF مسل غائب ÛÛ’Û”
+unexpected_response_error=غیرمتوقع پیش کار جواب
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}.{{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} نوٹ]
+password_label=PDF مسل کھولنے کے لیے پاس ورڈ داخل کریں.
+password_invalid=ناجائز پاس ورڈ. براےؑ کرم Ø¯ÙˆØ¨Ø§Ø±Û Ú©ÙˆØ´Ø´ کریں.
+password_ok=ٹھیک ÛÛ’
+password_cancel=منسوخ کریں
+
+printing_not_supported=تنبیÛ:چھاپنا اس براؤزر پر پوری Ø·Ø±Ø Ù…Ø¹Ø§ÙˆÙ†Øª Ø´Ø¯Û Ù†Ûیں ÛÛ’Û”
+printing_not_ready=تنبیÛ: PDF چھپائی Ú©Û’ لیے پوری Ø·Ø±Ø Ù„ÙˆÚˆ Ù†Ûیں Ûوئی۔
+web_fonts_disabled=ویب ÙØ§Ù†Ù¹ نا اÛÙ„ Ûیں: شامل PDF ÙØ§Ù†Ù¹ استعمال کرنے میں ناکام۔
diff --git a/thirdparty/pdfjs/web/locale/uz/viewer.properties b/thirdparty/pdfjs/web/locale/uz/viewer.properties
new file mode 100644
index 0000000..6ad2431
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/uz/viewer.properties
@@ -0,0 +1,168 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Oldingi sahifa
+previous_label=Oldingi
+next.title=Keyingi sahifa
+next_label=Keyingi
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/{{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom_out.title=Kichiklashtirish
+zoom_out_label=Kichiklashtirish
+zoom_in.title=Kattalashtirish
+zoom_in_label=Kattalashtirish
+zoom.title=Masshtab
+presentation_mode.title=Namoyish usuliga oʻtish
+presentation_mode_label=Namoyish usuli
+open_file.title=Faylni ochish
+open_file_label=Ochish
+print.title=Chop qilish
+print_label=Chop qilish
+download.title=Yuklab olish
+download_label=Yuklab olish
+bookmark.title=Joriy koʻrinish (nusxa oling yoki yangi oynada oching)
+bookmark_label=Joriy koʻrinish
+
+# Secondary toolbar and context menu
+tools.title=Vositalar
+tools_label=Vositalar
+first_page.title=Birinchi sahifaga oʻtish
+first_page.label=Birinchi sahifaga oʻtish
+first_page_label=Birinchi sahifaga oʻtish
+last_page.title=Soʻnggi sahifaga oʻtish
+last_page.label=Soʻnggi sahifaga oʻtish
+last_page_label=Soʻnggi sahifaga oʻtish
+page_rotate_cw.title=Soat yoʻnalishi boʻyicha burish
+page_rotate_cw.label=Soat yoʻnalishi boʻyicha burish
+page_rotate_cw_label=Soat yoʻnalishi boʻyicha burish
+page_rotate_ccw.title=Soat yoʻnalishiga qarshi burish
+page_rotate_ccw.label=Soat yoʻnalishiga qarshi burish
+page_rotate_ccw_label=Soat yoʻnalishiga qarshi burish
+
+
+# Document properties dialog box
+document_properties.title=Hujjat xossalari
+document_properties_label=Hujjat xossalari
+document_properties_file_name=Fayl nomi:
+document_properties_file_size=Fayl hajmi:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} bytes)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} bytes)
+document_properties_title=Nomi:
+document_properties_author=Muallifi:
+document_properties_subject=Mavzusi:
+document_properties_keywords=Kalit so‘zlar
+document_properties_creation_date=Yaratilgan sanasi:
+document_properties_modification_date=O‘zgartirilgan sanasi
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Yaratuvchi:
+document_properties_producer=PDF ishlab chiqaruvchi:
+document_properties_version=PDF versiyasi:
+document_properties_page_count=Sahifa soni:
+document_properties_close=Yopish
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Yon panelni yoqib/oʻchirib qoʻyish
+toggle_sidebar_label=Yon panelni yoqib/oʻchirib qoʻyish
+document_outline_label=Hujjat tuzilishi
+attachments.title=Ilovalarni ko‘rsatish
+attachments_label=Ilovalar
+thumbs.title=Nishonchalarni koʻrsatish
+thumbs_label=Nishoncha
+findbar.title=Hujjat ichidan topish
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title={{page}} sahifa
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas={{page}} sahifa nishonchasi
+
+# Find panel button title and messages
+find_previous.title=Soʻzlardagi oldingi hodisani topish
+find_previous_label=Oldingi
+find_next.title=Iboradagi keyingi hodisani topish
+find_next_label=Keyingi
+find_highlight=Barchasini ajratib koʻrsatish
+find_match_case_label=Katta-kichik harflarni farqlash
+find_reached_top=Hujjatning boshigacha yetib keldik, pastdan davom ettiriladi
+find_reached_bottom=Hujjatning oxiriga yetib kelindi, yuqoridan davom ettirladi
+find_not_found=Soʻzlar topilmadi
+
+# Error panel labels
+error_more_info=Koʻproq ma`lumot
+error_less_info=Kamroq ma`lumot
+error_close=Yopish
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Xabar: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Toʻplam: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Fayl: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Satr: {{line}}
+rendering_error=Sahifa renderlanayotganda xato yuz berdi.
+
+# Predefined zoom values
+page_scale_width=Sahifa eni
+page_scale_fit=Sahifani moslashtirish
+page_scale_auto=Avtomatik masshtab
+page_scale_actual=Haqiqiy hajmi
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Xato
+loading_error=PDF yuklanayotganda xato yuz berdi.
+invalid_file_error=Xato yoki buzuq PDF fayli.
+missing_file_error=PDF fayl kerak.
+unexpected_response_error=Kutilmagan server javobi.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Annotation]
+password_label=PDF faylni ochish uchun parolni kiriting.
+password_invalid=Parol - notoʻgʻri. Qaytadan urinib koʻring.
+password_ok=OK
+
+printing_not_supported=Diqqat: chop qilish bruzer tomonidan toʻliq qoʻllab-quvvatlanmaydi.
+printing_not_ready=Diqqat: PDF fayl chop qilish uchun toʻliq yuklanmadi.
+web_fonts_disabled=Veb shriftlar oʻchirilgan: ichki PDF shriftlardan foydalanib boʻlmmaydi.
diff --git a/thirdparty/pdfjs/web/locale/vi/viewer.properties b/thirdparty/pdfjs/web/locale/vi/viewer.properties
new file mode 100644
index 0000000..00ff021
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/vi/viewer.properties
@@ -0,0 +1,251 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Trang trước
+previous_label=Trước
+next.title=Trang Sau
+next_label=Tiếp
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Trang
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=trên {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} trên {{pagesCount}})
+
+zoom_out.title=Thu nhá»
+zoom_out_label=Thu nhá»
+zoom_in.title=Phóng to
+zoom_in_label=Phóng to
+zoom.title=Thu phóng
+presentation_mode.title=Chuyển sang chế độ trình chiếu
+presentation_mode_label=Chế độ trình chiếu
+open_file.title=Mở táºp tin
+open_file_label=Mở táºp tin
+print.title=In
+print_label=In
+download.title=Tải xuống
+download_label=Tải xuống
+bookmark.title=Chế độ xem hiện tại (sao chép hoặc mở trong cá»a sổ má»›i)
+bookmark_label=Chế độ xem hiện tại
+
+# Secondary toolbar and context menu
+tools.title=Công cụ
+tools_label=Công cụ
+first_page.title=VỠtrang đầu
+first_page.label=VỠtrang đầu
+first_page_label=VỠtrang đầu
+last_page.title=Äến trang cuối
+last_page.label=Äến trang cuối
+last_page_label=Äến trang cuối
+page_rotate_cw.title=Xoay theo chiá»u kim đồng hồ
+page_rotate_cw.label=Xoay theo chiá»u kim đồng hồ
+page_rotate_cw_label=Xoay theo chiá»u kim đồng hồ
+page_rotate_ccw.title=Xoay ngược chiá»u kim đồng hồ
+page_rotate_ccw.label=Xoay ngược chiá»u kim đồng hồ
+page_rotate_ccw_label=Xoay ngược chiá»u kim đồng hồ
+
+cursor_text_select_tool.title=KÃch hoạt công cụ chá»n vùng văn bản
+cursor_text_select_tool_label=Công cụ chá»n vùng văn bản
+cursor_hand_tool.title=KÃch hoạt công cụ con trá»
+cursor_hand_tool_label=Công cụ con trá»
+
+scroll_vertical.title=Sá» dụng cuá»™n dá»c
+scroll_vertical_label=Cuá»™n dá»c
+scroll_horizontal.title=SỠdụng cuộn ngang
+scroll_horizontal_label=Cuá»™n ngang
+scroll_wrapped.title=SỠdụng cuộn ngắt dòng
+scroll_wrapped_label=Cuộn ngắt dòng
+
+spread_none.title=Không nối rộng trang
+spread_none_label=Không có phân cách
+spread_odd.title=Nối trang bà i bắt đầu với các trang được đánh số lẻ
+spread_odd_label=Phân cách theo số lẻ
+spread_even.title=Nối trang bà i bắt đầu với các trang được đánh số chẵn
+spread_even_label=Phân cách theo số chẵn
+
+# Document properties dialog box
+document_properties.title=Thuá»™c tÃnh cá»§a tà i liệu…
+document_properties_label=Thuá»™c tÃnh cá»§a tà i liệu…
+document_properties_file_name=Tên táºp tin:
+document_properties_file_size=KÃch thước:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} byte)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} byte)
+document_properties_title=Tiêu Ä‘á»:
+document_properties_author=Tác giả:
+document_properties_subject=Chá»§ Ä‘á»:
+document_properties_keywords=Từ khóa:
+document_properties_creation_date=Ngà y tạo:
+document_properties_modification_date=Ngà y sá»a đổi:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Ngưá»i tạo:
+document_properties_producer=Phần má»m tạo PDF:
+document_properties_version=Phiên bản PDF:
+document_properties_page_count=Tổng số trang:
+document_properties_page_size=KÃch thước trang:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=khổ dá»c
+document_properties_page_size_orientation_landscape=khổ ngang
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Thư
+document_properties_page_size_name_legal=Pháp lý
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}} ({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=Xem nhanh trên web:
+document_properties_linearized_yes=Có
+document_properties_linearized_no=Không
+document_properties_close=Ãóng
+
+print_progress_message=Chuẩn bị trang để in…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Há»§y bá»
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Báºt/Tắt thanh lá»
+toggle_sidebar_notification.title=Báºt tắt thanh lá» (tà i liệu bao gồm bản phác thảo/táºp tin Ä‘Ãnh kèm)
+toggle_sidebar_notification2.title=Báºt tắt thanh lá» (tà i liệu bao gồm bản phác thảo/táºp tin Ä‘Ãnh kèm/lá»›p)
+toggle_sidebar_label=Báºt/Tắt thanh lá»
+document_outline.title=Hiện tà i liệu phác thảo (nhấp đúp và o để mở rá»™ng/thu gá»n tất cả các mục)
+document_outline_label=Bản phác tà i liệu
+attachments.title=Hiện ná»™i dung Ä‘Ãnh kèm
+attachments_label=Ná»™i dung Ä‘Ãnh kèm
+layers.title=Hiển thị các lớp (nhấp đúp để đặt lại tất cả các lớp vỠtrạng thái mặc định)
+layers_label=Lá»›p
+thumbs.title=Hiển thị ảnh thu nhá»
+thumbs_label=Ảnh thu nhá»
+findbar.title=Tìm trong tà i liệu
+findbar_label=Tìm
+
+additional_layers=Các lớp bổ sung
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=Trang {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Trang {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Ảnh thu nhỠcủa trang {{page}}
+
+# Find panel button title and messages
+find_input.title=Tìm
+find_input.placeholder=Tìm trong tà i liệu…
+find_previous.title=Tìm cụm từ ở phần trước
+find_previous_label=Trước
+find_next.title=Tìm cụm từ ở phần sau
+find_next_label=Tiếp
+find_highlight=Tô sáng tất cả
+find_match_case_label=Phân biệt hoa, thưá»ng
+find_entire_word_label=Toà n bộ từ
+find_reached_top=Äã đến phần đầu tà i liệu, quay trở lại từ cuối
+find_reached_bottom=Äã đến phần cuối cá»§a tà i liệu, quay trở lại từ đầu
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]={{current}} của {{total}} đã trùng
+find_match_count[two]={{current}} của {{total}} đã trùng
+find_match_count[few]={{current}} của {{total}} đã trùng
+find_match_count[many]={{current}} của {{total}} đã trùng
+find_match_count[other]={{current}} của {{total}} đã trùng
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=Nhiá»u hÆ¡n {{limit}} đã trùng
+find_match_count_limit[one]=Nhiá»u hÆ¡n {{limit}} đã trùng
+find_match_count_limit[two]=Nhiá»u hÆ¡n {{limit}} đã trùng
+find_match_count_limit[few]=Nhiá»u hÆ¡n {{limit}} đã trùng
+find_match_count_limit[many]=Nhiá»u hÆ¡n {{limit}} đã trùng
+find_match_count_limit[other]=Nhiá»u hÆ¡n {{limit}} đã trùng
+find_not_found=Không tìm thấy cụm từ nà y
+
+# Error panel labels
+error_more_info=Thông tin thêm
+error_less_info=Hiển thị Ãt thông tin hÆ¡n
+error_close=Äóng
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Thông điệp: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Stack: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Táºp tin: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Dòng: {{line}}
+rendering_error=Lỗi khi hiển thị trang.
+
+# Predefined zoom values
+page_scale_width=Vừa chiá»u rá»™ng
+page_scale_fit=Vừa chiá»u cao
+page_scale_auto=Tá»± động chá»n kÃch thước
+page_scale_actual=KÃch thước thá»±c
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Lá»—i
+loading_error=Lỗi khi tải tà i liệu PDF.
+invalid_file_error=Táºp tin PDF há»ng hoặc không hợp lệ.
+missing_file_error=Thiếu táºp tin PDF.
+unexpected_response_error=Máy chủ có phản hồi lạ.
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}}, {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Chú thÃch]
+password_label=Nháºp máºt khẩu để mở táºp tin PDF nà y.
+password_invalid=Máºt khẩu không đúng. Vui lòng thá» lại.
+password_ok=OK
+password_cancel=Há»§y bá»
+
+printing_not_supported=Cảnh báo: In ấn không được hỗ trợ đầy đủ ở trình duyệt nà y.
+printing_not_ready=Cảnh báo: PDF chưa được tải hết để in.
+web_fonts_disabled=Phông chữ Web bị vô hiệu hóa: không thể sỠdụng các phông chữ PDF được nhúng.
diff --git a/thirdparty/pdfjs/web/locale/wo/viewer.properties b/thirdparty/pdfjs/web/locale/wo/viewer.properties
new file mode 100644
index 0000000..38c7bc1
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/wo/viewer.properties
@@ -0,0 +1,124 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Xët wi jiitu
+previous_label=Bi jiitu
+next.title=Xët wi ci topp
+next_label=Bi ci topp
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+
+zoom_out.title=Wà ññi
+zoom_out_label=Wà ññi
+zoom_in.title=Yaatal
+zoom_in_label=Yaatal
+zoom.title=Yambalaŋ
+presentation_mode.title=Wañarñil ci anamu wone
+presentation_mode_label=Anamu Wone
+open_file.title=Ubbi benn dencukaay
+open_file_label=Ubbi
+print.title=Móol
+print_label=Móol
+download.title=Yeb yi
+download_label=Yeb yi
+bookmark.title=Wone bi taxaw (duppi walla ubbi palanteer bu bees)
+bookmark_label=Wone bi feeñ
+
+# Secondary toolbar and context menu
+
+
+# Document properties dialog box
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_title=Bopp:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+thumbs.title=Wone nataal yu ndaw yi
+thumbs_label=Nataal yu ndaw yi
+findbar.title=Gis ci biir jukki bi
+findbar_label=Wut
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Xët {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Wiñet bu xët {{page}}
+
+# Find panel button title and messages
+find_previous.title=Seet beneen kaddu bu ni mel te jiitu
+find_previous_label=Bi jiitu
+find_next.title=Seet beneen kaddu bu ni mel
+find_next_label=Bi ci topp
+find_highlight=Melaxal lépp
+find_match_case_label=Sà mm jëmmalin wi
+find_reached_top=Jot nañu ndorteel xët wi, kontine dale ko ci suuf
+find_reached_bottom=Jot nañu jeexitalu xët wi, kontine ci ndorte
+find_not_found=Gisiñu kaddu gi
+
+# Error panel labels
+error_more_info=Xibaar yu gën bari
+error_less_info=Xibaar yu gën bari
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Bataaxal: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Juug: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Dencukaay: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Rëdd : {{line}}
+rendering_error=Am njumte bu am bi xët bi di wonewu.
+
+# Predefined zoom values
+page_scale_width=Yaatuwaay bu mët
+page_scale_fit=Xët lëmm
+page_scale_auto=Yambalaŋ ci saa si
+page_scale_actual=Dayo bi am
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+
+# Loading indicator messages
+loading_error_indicator=Njumte
+loading_error=Am na njumte ci yebum dencukaay PDF bi.
+invalid_file_error=Dencukaay PDF bi baaxul walla mu sankar.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[Karmat {{type}}]
+password_ok=OK
+password_cancel=Neenal
+
+printing_not_supported=Artu: Joowkat bii nanguwul lool mool.
diff --git a/thirdparty/pdfjs/web/locale/xh/viewer.properties b/thirdparty/pdfjs/web/locale/xh/viewer.properties
new file mode 100644
index 0000000..52cd75e
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/xh/viewer.properties
@@ -0,0 +1,183 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=Iphepha langaphambili
+previous_label=Okwangaphambili
+next.title=Iphepha elilandelayo
+next_label=Okulandelayo
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=Iphepha
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=kwali- {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} kwali {{pagesCount}})
+
+zoom_out.title=Bhekelisela Kudana
+zoom_out_label=Bhekelisela Kudana
+zoom_in.title=Sondeza Kufuphi
+zoom_in_label=Sondeza Kufuphi
+zoom.title=Yandisa / Nciphisa
+presentation_mode.title=Tshintshela kwimo yonikezelo
+presentation_mode_label=Imo yonikezelo
+open_file.title=Vula Ifayile
+open_file_label=Vula
+print.title=Printa
+print_label=Printa
+download.title=Khuphela
+download_label=Khuphela
+bookmark.title=Imbonakalo ekhoyo (kopa okanye vula kwifestile entsha)
+bookmark_label=Imbonakalo ekhoyo
+
+# Secondary toolbar and context menu
+tools.title=Izixhobo zemiyalelo
+tools_label=Izixhobo zemiyalelo
+first_page.title=Yiya kwiphepha lokuqala
+first_page.label=Yiya kwiphepha lokuqala
+first_page_label=Yiya kwiphepha lokuqala
+last_page.title=Yiya kwiphepha lokugqibela
+last_page.label=Yiya kwiphepha lokugqibela
+last_page_label=Yiya kwiphepha lokugqibela
+page_rotate_cw.title=Jikelisa ngasekunene
+page_rotate_cw.label=Jikelisa ngasekunene
+page_rotate_cw_label=Jikelisa ngasekunene
+page_rotate_ccw.title=Jikelisa ngasekhohlo
+page_rotate_ccw.label=Jikelisa ngasekhohlo
+page_rotate_ccw_label=Jikelisa ngasekhohlo
+
+cursor_text_select_tool.title=Vumela iSixhobo sokuKhetha iTeksti
+cursor_text_select_tool_label=ISixhobo sokuKhetha iTeksti
+cursor_hand_tool.title=Yenza iSixhobo seSandla siSebenze
+cursor_hand_tool_label=ISixhobo seSandla
+
+# Document properties dialog box
+document_properties.title=Iipropati zoxwebhu…
+document_properties_label=Iipropati zoxwebhu…
+document_properties_file_name=Igama lefayile:
+document_properties_file_size=Isayizi yefayile:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB (iibhayiti{{size_b}})
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB (iibhayithi{{size_b}})
+document_properties_title=Umxholo:
+document_properties_author=Umbhali:
+document_properties_subject=Umbandela:
+document_properties_keywords=Amagama aphambili:
+document_properties_creation_date=Umhla wokwenziwa kwayo:
+document_properties_modification_date=Umhla wokulungiswa kwayo:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=Umntu oyenzileyo:
+document_properties_producer=Umvelisi we-PDF:
+document_properties_version=Uhlelo lwe-PDF:
+document_properties_page_count=Inani lamaphepha:
+document_properties_close=Vala
+
+print_progress_message=Ilungisa uxwebhu ukuze iprinte…
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=Rhoxisa
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=Togola ngebha eseCaleni
+toggle_sidebar_notification.title=ISidebar yeQhosha (uxwebhu lunolwandlalo/iziqhotyoshelwa)
+toggle_sidebar_label=Togola ngebha eseCaleni
+document_outline.title=Bonisa uLwandlalo loXwebhu (cofa kabini ukuze wandise/diliza zonke izinto)
+document_outline_label=Isishwankathelo soxwebhu
+attachments.title=Bonisa iziqhotyoshelwa
+attachments_label=Iziqhoboshelo
+thumbs.title=Bonisa ukrobiso kumfanekiso
+thumbs_label=Ukrobiso kumfanekiso
+findbar.title=Fumana kuXwebhu
+findbar_label=Fumana
+
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=Iphepha {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Ukrobiso kumfanekiso wephepha {{page}}
+
+# Find panel button title and messages
+find_input.title=Fumana
+find_input.placeholder=Fumana kuXwebhu…
+find_previous.title=Fumanisa isenzeko sangaphambili sebinzana lamagama
+find_previous_label=Okwangaphambili
+find_next.title=Fumanisa isenzeko esilandelayo sebinzana lamagama
+find_next_label=Okulandelayo
+find_highlight=Qaqambisa konke
+find_match_case_label=Tshatisa ngobukhulu bukanobumba
+find_reached_top=Ufike ngaphezulu ephepheni, kusukwa ngezantsi
+find_reached_bottom=Ufike ekupheleni kwephepha, kusukwa ngaphezulu
+find_not_found=Ibinzana alifunyenwanga
+
+# Error panel labels
+error_more_info=Inkcazelo Engakumbi
+error_less_info=Inkcazelo Encinane
+error_close=Vala
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=I-PDF.js v{{version}} (yakha: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Umyalezo: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Imfumba: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Ifayile: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Umgca: {{line}}
+rendering_error=Imposiso yenzekile xa bekunikezelwa iphepha.
+
+# Predefined zoom values
+page_scale_width=Ububanzi bephepha
+page_scale_fit=Ukulinganiswa kwephepha
+page_scale_auto=Ukwandisa/Ukunciphisa Ngokwayo
+page_scale_actual=Ubungakanani bokwenene
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=Imposiso
+loading_error=Imposiso yenzekile xa kulayishwa i-PDF.
+invalid_file_error=Ifayile ye-PDF engeyiyo okanye eyonakalisiweyo.
+missing_file_error=Ifayile ye-PDF edukileyo.
+unexpected_response_error=Impendulo yeseva engalindelekanga.
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} Ubhalo-nqaku]
+password_label=Faka ipasiwedi ukuze uvule le fayile yePDF.
+password_invalid=Ipasiwedi ayisebenzi. Nceda uzame kwakhona.
+password_ok=KULUNGILE
+password_cancel=Rhoxisa
+
+printing_not_supported=Isilumkiso: Ukuprinta akuxhaswa ngokupheleleyo yile bhrawuza.
+printing_not_ready=Isilumkiso: IPDF ayihlohlwanga ngokupheleleyo ukwenzela ukuprinta.
+web_fonts_disabled=Iifonti zewebhu ziqhwalelisiwe: ayikwazi ukusebenzisa iifonti ze-PDF ezincanyathelisiweyo.
diff --git a/thirdparty/pdfjs/web/locale/zh-CN/viewer.properties b/thirdparty/pdfjs/web/locale/zh-CN/viewer.properties
new file mode 100644
index 0000000..becd802
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/zh-CN/viewer.properties
@@ -0,0 +1,253 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=上一页
+previous_label=上一页
+next.title=下一页
+next_label=下一页
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=页é¢
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=/ {{pagesCount}}
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=({{pageNumber}} / {{pagesCount}})
+
+zoom_out.title=缩å°
+zoom_out_label=缩å°
+zoom_in.title=放大
+zoom_in_label=放大
+zoom.title=缩放
+presentation_mode.title=切æ¢åˆ°æ¼”示模å¼
+presentation_mode_label=演示模å¼
+open_file.title=打开文件
+open_file_label=打开
+print.title=打å°
+print_label=打å°
+download.title=下载
+download_label=下载
+bookmark.title=当å‰åœ¨çœ‹çš„内容(å¤åˆ¶æˆ–在新窗å£ä¸æ‰“开)
+bookmark_label=当å‰åœ¨çœ‹
+
+# Secondary toolbar and context menu
+tools.title=工具
+tools_label=工具
+first_page.title=转到第一页
+first_page.label=转到第一页
+first_page_label=转到第一页
+last_page.title=转到最åŽä¸€é¡µ
+last_page.label=转到最åŽä¸€é¡µ
+last_page_label=转到最åŽä¸€é¡µ
+page_rotate_cw.title=顺时针旋转
+page_rotate_cw.label=顺时针旋转
+page_rotate_cw_label=顺时针旋转
+page_rotate_ccw.title=逆时针旋转
+page_rotate_ccw.label=逆时针旋转
+page_rotate_ccw_label=逆时针旋转
+
+cursor_text_select_tool.title=å¯ç”¨æ–‡æœ¬é€‰æ‹©å·¥å…·
+cursor_text_select_tool_label=文本选择工具
+cursor_hand_tool.title=å¯ç”¨æ‰‹å½¢å·¥å…·
+cursor_hand_tool_label=手形工具
+
+scroll_vertical.title=使用垂直滚动
+scroll_vertical_label=垂直滚动
+scroll_horizontal.title=使用水平滚动
+scroll_horizontal_label=水平滚动
+scroll_wrapped.title=使用平铺滚动
+scroll_wrapped_label=平铺滚动
+
+spread_none.title=ä¸åŠ å…¥è¡”æŽ¥é¡µ
+spread_none_label=å•页视图
+spread_odd.title=åŠ å…¥è¡”æŽ¥é¡µä½¿å¥‡æ•°é¡µä½œä¸ºèµ·å§‹é¡µ
+spread_odd_label=åŒé¡µè§†å›¾
+spread_even.title=åŠ å…¥è¡”æŽ¥é¡µä½¿å¶æ•°é¡µä½œä¸ºèµ·å§‹é¡µ
+spread_even_label=书ç±è§†å›¾
+
+# Document properties dialog box
+document_properties.title=文档属性…
+document_properties_label=文档属性…
+document_properties_file_name=文件å:
+document_properties_file_size=文件大å°:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB ({{size_b}} å—节)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB ({{size_b}} å—节)
+document_properties_title=æ ‡é¢˜:
+document_properties_author=作者:
+document_properties_subject=主题:
+document_properties_keywords=关键è¯:
+document_properties_creation_date=创建日期:
+document_properties_modification_date=修改日期:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}}, {{time}}
+document_properties_creator=创建者:
+document_properties_producer=PDF 生æˆå™¨ï¼š
+document_properties_version=PDF 版本:
+document_properties_page_count=页数:
+document_properties_page_size=页é¢å¤§å°ï¼š
+document_properties_page_size_unit_inches=英寸
+document_properties_page_size_unit_millimeters=毫米
+document_properties_page_size_orientation_portrait=纵å‘
+document_properties_page_size_orientation_landscape=横å‘
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=文本
+document_properties_page_size_name_legal=法律
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}}({{name}},{{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=快速 Web 视图:
+document_properties_linearized_yes=是
+document_properties_linearized_no=å¦
+document_properties_close=å…³é—
+
+print_progress_message=æ£åœ¨å‡†å¤‡æ‰“å°æ–‡æ¡£â€¦
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=å–æ¶ˆ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=切æ¢ä¾§æ
+toggle_sidebar_notification.title=切æ¢ä¾§æ (文档所å«çš„大纲/附件)
+toggle_sidebar_notification2.title=切æ¢ä¾§æ (文档所å«çš„大纲/附件/图层)
+toggle_sidebar_label=切æ¢ä¾§æ
+document_outline.title=显示文档大纲(åŒå‡»å±•å¼€/æŠ˜å æ‰€æœ‰é¡¹ï¼‰
+document_outline_label=文档大纲
+attachments.title=显示附件
+attachments_label=附件
+layers.title=显示图层(åŒå‡»å³å¯å°†æ‰€æœ‰å›¾å±‚é‡ç½®ä¸ºé»˜è®¤çжæ€ï¼‰
+layers_label=图层
+thumbs.title=显示缩略图
+thumbs_label=缩略图
+current_outline_item.title=查找当å‰å¤§çº²é¡¹ç›®
+current_outline_item_label=当å‰å¤§çº²é¡¹ç›®
+findbar.title=åœ¨æ–‡æ¡£ä¸æŸ¥æ‰¾
+findbar_label=查找
+
+additional_layers=其他图层
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=页ç {{page}}
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=页ç {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=é¡µé¢ {{page}} 的缩略图
+
+# Find panel button title and messages
+find_input.title=查找
+find_input.placeholder=åœ¨æ–‡æ¡£ä¸æŸ¥æ‰¾â€¦
+find_previous.title=查找è¯è¯ä¸Šä¸€æ¬¡å‡ºçŽ°çš„ä½ç½®
+find_previous_label=上一页
+find_next.title=查找è¯è¯åŽä¸€æ¬¡å‡ºçŽ°çš„ä½ç½®
+find_next_label=下一页
+find_highlight=全部高亮显示
+find_match_case_label=区分大å°å†™
+find_entire_word_label=å—è¯åŒ¹é…
+find_reached_top=到达文档开头,从末尾继ç»
+find_reached_bottom=到达文档末尾,从开头继ç»
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=第 {{current}} é¡¹ï¼Œå…±åŒ¹é… {{total}} 项
+find_match_count[two]=第 {{current}} é¡¹ï¼Œå…±åŒ¹é… {{total}} 项
+find_match_count[few]=第 {{current}} é¡¹ï¼Œå…±åŒ¹é… {{total}} 项
+find_match_count[many]=第 {{current}} é¡¹ï¼Œå…±åŒ¹é… {{total}} 项
+find_match_count[other]=第 {{current}} é¡¹ï¼Œå…±åŒ¹é… {{total}} 项
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=超过 {{limit}} 项匹é…
+find_match_count_limit[one]=超过 {{limit}} 项匹é…
+find_match_count_limit[two]=超过 {{limit}} 项匹é…
+find_match_count_limit[few]=超过 {{limit}} 项匹é…
+find_match_count_limit[many]=超过 {{limit}} 项匹é…
+find_match_count_limit[other]=超过 {{limit}} 项匹é…
+find_not_found=找ä¸åˆ°æŒ‡å®šè¯è¯
+
+# Error panel labels
+error_more_info=更多信æ¯
+error_less_info=æ›´å°‘ä¿¡æ¯
+error_close=å…³é—
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=ä¿¡æ¯ï¼š{{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=å †æ ˆï¼š{{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=文件:{{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=行å·ï¼š{{line}}
+rendering_error=æ¸²æŸ“é¡µé¢æ—¶å‘生错误。
+
+# Predefined zoom values
+page_scale_width=适åˆé¡µå®½
+page_scale_fit=适åˆé¡µé¢
+page_scale_auto=自动缩放
+page_scale_actual=实际大å°
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=错误
+loading_error=载入 PDF æ—¶å‘生错误。
+invalid_file_error=æ— æ•ˆæˆ–æŸåçš„ PDF 文件。
+missing_file_error=缺少 PDF 文件。
+unexpected_response_error=æ„外的æœåС噍å“应。
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}},{{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} 注释]
+password_label=输入密ç ä»¥æ‰“å¼€æ¤ PDF 文件。
+password_invalid=å¯†ç æ— 效。请é‡è¯•。
+password_ok=确定
+password_cancel=å–æ¶ˆ
+
+printing_not_supported=è¦å‘Šï¼šæ¤æµè§ˆå™¨å°šæœªå®Œæ•´æ”¯æŒæ‰“å°åŠŸèƒ½ã€‚
+printing_not_ready=è¦å‘Šï¼šæ¤ PDF 未完æˆè½½å…¥ï¼Œæ— 法打å°ã€‚
+web_fonts_disabled=Web å—体已被ç¦ç”¨ï¼šæ— 法使用嵌入的 PDF å—体。
diff --git a/thirdparty/pdfjs/web/locale/zh-TW/viewer.properties b/thirdparty/pdfjs/web/locale/zh-TW/viewer.properties
new file mode 100644
index 0000000..0f095de
--- /dev/null
+++ b/thirdparty/pdfjs/web/locale/zh-TW/viewer.properties
@@ -0,0 +1,253 @@
+# Copyright 2012 Mozilla Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Main toolbar buttons (tooltips and alt text for images)
+previous.title=上一é
+previous_label=上一é
+next.title=下一é
+next_label=下一é
+
+# LOCALIZATION NOTE (page.title): The tooltip for the pageNumber input.
+page.title=第
+# LOCALIZATION NOTE (of_pages): "{{pagesCount}}" will be replaced by a number
+# representing the total number of pages in the document.
+of_pages=é ,共 {{pagesCount}} é
+# LOCALIZATION NOTE (page_of_pages): "{{pageNumber}}" and "{{pagesCount}}"
+# will be replaced by a number representing the currently visible page,
+# respectively a number representing the total number of pages in the document.
+page_of_pages=(第 {{pageNumber}} é ,共 {{pagesCount}} é )
+
+zoom_out.title=縮å°
+zoom_out_label=縮å°
+zoom_in.title=放大
+zoom_in_label=放大
+zoom.title=縮放
+presentation_mode.title=切æ›è‡³ç°¡å ±æ¨¡å¼
+presentation_mode_label=ç°¡å ±æ¨¡å¼
+open_file.title=開啟檔案
+open_file_label=開啟
+print.title=列å°
+print_label=列å°
+download.title=下載
+download_label=下載
+bookmark.title=ç›®å‰ç•«é¢ï¼ˆè¤‡è£½æˆ–開啟於新視窗)
+bookmark_label=ç›®å‰æª¢è¦–
+
+# Secondary toolbar and context menu
+tools.title=工具
+tools_label=工具
+first_page.title=跳到第一é
+first_page.label=跳到第一é
+first_page_label=跳到第一é
+last_page.title=跳到最後一é
+last_page.label=跳到最後一é
+last_page_label=跳到最後一é
+page_rotate_cw.title=é †æ™‚é‡æ—‹è½‰
+page_rotate_cw.label=é †æ™‚é‡æ—‹è½‰
+page_rotate_cw_label=é †æ™‚é‡æ—‹è½‰
+page_rotate_ccw.title=é€†æ™‚é‡æ—‹è½‰
+page_rotate_ccw.label=é€†æ™‚é‡æ—‹è½‰
+page_rotate_ccw_label=é€†æ™‚é‡æ—‹è½‰
+
+cursor_text_select_tool.title=開啟文å—鏿“‡å·¥å…·
+cursor_text_select_tool_label=æ–‡å—鏿“‡å·¥å…·
+cursor_hand_tool.title=開啟é é¢ç§»å‹•工具
+cursor_hand_tool_label=é é¢ç§»å‹•工具
+
+scroll_vertical.title=使用垂直æ²å‹•版é¢
+scroll_vertical_label=垂直æ²å‹•
+scroll_horizontal.title=使用水平æ²å‹•版é¢
+scroll_horizontal_label=æ°´å¹³æ²å‹•
+scroll_wrapped.title=ä½¿ç”¨å¤šé æ²å‹•版é¢
+scroll_wrapped_label=å¤šé æ²å‹•
+
+spread_none.title=ä¸è¦é€²è¡Œè·¨é 顯示
+spread_none_label=ä¸è·¨é
+spread_odd.title=從奇數é é–‹å§‹è·¨é
+spread_odd_label=奇數跨é
+spread_even.title=å¾žå¶æ•¸é é–‹å§‹è·¨é
+spread_even_label=å¶æ•¸è·¨é
+
+# Document properties dialog box
+document_properties.title=文件內容…
+document_properties_label=文件內容…
+document_properties_file_name=檔案å稱:
+document_properties_file_size=檔案大å°:
+# LOCALIZATION NOTE (document_properties_kb): "{{size_kb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in kilobytes, respectively in bytes.
+document_properties_kb={{size_kb}} KB({{size_b}} ä½å…ƒçµ„)
+# LOCALIZATION NOTE (document_properties_mb): "{{size_mb}}" and "{{size_b}}"
+# will be replaced by the PDF file size in megabytes, respectively in bytes.
+document_properties_mb={{size_mb}} MB({{size_b}} ä½å…ƒçµ„)
+document_properties_title=標題:
+document_properties_author=作者:
+document_properties_subject=主旨:
+document_properties_keywords=é—œéµå—:
+document_properties_creation_date=建立日期:
+document_properties_modification_date=修改日期:
+# LOCALIZATION NOTE (document_properties_date_string): "{{date}}" and "{{time}}"
+# will be replaced by the creation/modification date, and time, of the PDF file.
+document_properties_date_string={{date}} {{time}}
+document_properties_creator=建立者:
+document_properties_producer=PDF 產生器:
+document_properties_version=PDF 版本:
+document_properties_page_count=é æ•¸:
+document_properties_page_size=é é¢å¤§å°:
+document_properties_page_size_unit_inches=in
+document_properties_page_size_unit_millimeters=mm
+document_properties_page_size_orientation_portrait=垂直
+document_properties_page_size_orientation_landscape=æ°´å¹³
+document_properties_page_size_name_a3=A3
+document_properties_page_size_name_a4=A4
+document_properties_page_size_name_letter=Letter
+document_properties_page_size_name_legal=Legal
+# LOCALIZATION NOTE (document_properties_page_size_dimension_string):
+# "{{width}}", "{{height}}", {{unit}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement and orientation, of the (current) page.
+document_properties_page_size_dimension_string={{width}} × {{height}} {{unit}}({{orientation}})
+# LOCALIZATION NOTE (document_properties_page_size_dimension_name_string):
+# "{{width}}", "{{height}}", {{unit}}, {{name}}, and {{orientation}} will be replaced by
+# the size, respectively their unit of measurement, name, and orientation, of the (current) page.
+document_properties_page_size_dimension_name_string={{width}} × {{height}} {{unit}}({{name}},{{orientation}})
+# LOCALIZATION NOTE (document_properties_linearized): The linearization status of
+# the document; usually called "Fast Web View" in English locales of Adobe software.
+document_properties_linearized=快速 Web 檢視:
+document_properties_linearized_yes=是
+document_properties_linearized_no=å¦
+document_properties_close=關閉
+
+print_progress_message=æ£åœ¨æº–å‚™åˆ—å°æ–‡ä»¶â€¦
+# LOCALIZATION NOTE (print_progress_percent): "{{progress}}" will be replaced by
+# a numerical per cent value.
+print_progress_percent={{progress}}%
+print_progress_close=å–æ¶ˆ
+
+# Tooltips and alt text for side panel toolbar buttons
+# (the _label strings are alt text for the buttons, the .title strings are
+# tooltips)
+toggle_sidebar.title=切æ›å´é‚Šæ¬„
+toggle_sidebar_notification.title=切æ›å´é‚Šæ””(文件包å«å¤§ç¶±æˆ–附件)
+toggle_sidebar_notification2.title=切æ›å´é‚Šæ¬„(包å«å¤§ç¶±ã€é™„ä»¶ã€åœ–層的文件)
+toggle_sidebar_label=切æ›å´é‚Šæ¬„
+document_outline.title=顯示文件大綱(雙擊展開/æ‘ºç–Šæ‰€æœ‰é …ç›®ï¼‰
+document_outline_label=文件大綱
+attachments.title=顯示附件
+attachments_label=附件
+layers.title=é¡¯ç¤ºåœ–å±¤ï¼ˆæ»‘é¼ é›™æ“Šå³å¯å°‡æ‰€æœ‰åœ–層é‡è¨ç‚ºé è¨ç‹€æ…‹ï¼‰
+layers_label=圖層
+thumbs.title=顯示縮圖
+thumbs_label=縮圖
+current_outline_item.title=尋找目å‰çš„å¤§ç¶±é …ç›®
+current_outline_item_label=ç›®å‰çš„å¤§ç¶±é …ç›®
+findbar.title=在文件ä¸å°‹æ‰¾
+findbar_label=尋找
+
+additional_layers=其他圖層
+# LOCALIZATION NOTE (page_canvas): "{{page}}" will be replaced by the page number.
+page_canvas=第 {{page}} é
+# Thumbnails panel item (tooltip and alt text for images)
+# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
+# number.
+thumb_page_title=第 {{page}} é
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=é {{page}} 的縮圖
+
+# Find panel button title and messages
+find_input.title=尋找
+find_input.placeholder=åœ¨æ–‡ä»¶ä¸æœå°‹â€¦
+find_previous.title=尋找文å—剿¬¡å‡ºç¾çš„ä½ç½®
+find_previous_label=上一個
+find_next.title=尋找文å—下次出ç¾çš„ä½ç½®
+find_next_label=下一個
+find_highlight=全部強調標示
+find_match_case_label=å€åˆ†å¤§å°å¯«
+find_entire_word_label=ç¬¦åˆæ•´å€‹å—
+find_reached_top=å·²æœå°‹è‡³æ–‡ä»¶é ‚端,自底端繼續æœå°‹
+find_reached_bottom=å·²æœå°‹è‡³æ–‡ä»¶åº•ç«¯ï¼Œè‡ªé ‚ç«¯ç¹¼çºŒæœå°‹
+# LOCALIZATION NOTE (find_match_count): The supported plural forms are
+# [one|two|few|many|other], with [other] as the default value.
+# "{{current}}" and "{{total}}" will be replaced by a number representing the
+# index of the currently active find result, respectively a number representing
+# the total number of matches in the document.
+find_match_count={[ plural(total) ]}
+find_match_count[one]=第 {{current}} ç†ï¼Œå…±æ‰¾åˆ° {{total}} ç†
+find_match_count[two]=第 {{current}} ç†ï¼Œå…±æ‰¾åˆ° {{total}} ç†
+find_match_count[few]=第 {{current}} ç†ï¼Œå…±æ‰¾åˆ° {{total}} ç†
+find_match_count[many]=第 {{current}} ç†ï¼Œå…±æ‰¾åˆ° {{total}} ç†
+find_match_count[other]=第 {{current}} ç†ï¼Œå…±æ‰¾åˆ° {{total}} ç†
+# LOCALIZATION NOTE (find_match_count_limit): The supported plural forms are
+# [zero|one|two|few|many|other], with [other] as the default value.
+# "{{limit}}" will be replaced by a numerical value.
+find_match_count_limit={[ plural(limit) ]}
+find_match_count_limit[zero]=æ‰¾åˆ°è¶…éŽ {{limit}} ç†
+find_match_count_limit[one]=æ‰¾åˆ°è¶…éŽ {{limit}} ç†
+find_match_count_limit[two]=æ‰¾åˆ°è¶…éŽ {{limit}} ç†
+find_match_count_limit[few]=æ‰¾åˆ°è¶…éŽ {{limit}} ç†
+find_match_count_limit[many]=æ‰¾åˆ°è¶…éŽ {{limit}} ç†
+find_match_count_limit[other]=æ‰¾åˆ°è¶…éŽ {{limit}} ç†
+find_not_found=找ä¸åˆ°æŒ‡å®šæ–‡å—
+
+# Error panel labels
+error_more_info=更多資訊
+error_less_info=更少資訊
+error_close=關閉
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=訊æ¯: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=å †ç–Š: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=檔案: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=行: {{line}}
+rendering_error=æç¹ªé 颿™‚發生錯誤。
+
+# Predefined zoom values
+page_scale_width=é é¢å¯¬åº¦
+page_scale_fit=縮放至é é¢å¤§å°
+page_scale_auto=自動縮放
+page_scale_actual=實際大å°
+# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a
+# numerical scale value.
+page_scale_percent={{scale}}%
+
+# Loading indicator messages
+loading_error_indicator=錯誤
+loading_error=載入 PDF 時發生錯誤。
+invalid_file_error=無效或毀æçš„ PDF 檔案。
+missing_file_error=找ä¸åˆ° PDF 檔案。
+unexpected_response_error=伺æœå™¨å›žæ‡‰æœªé 期的內容。
+
+# LOCALIZATION NOTE (annotation_date_string): "{{date}}" and "{{time}}" will be
+# replaced by the modification date, and time, of the annotation.
+annotation_date_string={{date}} {{time}}
+
+# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip.
+# "{{type}}" will be replaced with an annotation type from a list defined in
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
+# Some common types are e.g.: "Check", "Text", "Comment", "Note"
+text_annotation_type.alt=[{{type}} 註解]
+password_label=è«‹è¼¸å…¥ç”¨ä¾†é–‹å•Ÿæ¤ PDF 檔案的密碼。
+password_invalid=å¯†ç¢¼ä¸æ£ç¢ºï¼Œè«‹å†è©¦ä¸€æ¬¡ã€‚
+password_ok=確定
+password_cancel=å–æ¶ˆ
+
+printing_not_supported=è¦å‘Š: æ¤ç€è¦½å™¨æœªå®Œæ•´æ”¯æ´åˆ—å°åŠŸèƒ½ã€‚
+printing_not_ready=è¦å‘Š: æ¤ PDF 未完æˆä¸‹è¼‰ä»¥ä¾›åˆ—å°ã€‚
+web_fonts_disabled=å·²åœç”¨ç¶²è·¯å—åž‹ (Web fonts): 無法使用 PDF 內嵌å—型。
diff --git a/thirdparty/pdfjs/web/viewer.css b/thirdparty/pdfjs/web/viewer.css
new file mode 100644
index 0000000..b7277df
--- /dev/null
+++ b/thirdparty/pdfjs/web/viewer.css
@@ -0,0 +1,3831 @@
+/* Copyright 2014 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.textLayer {
+ position: absolute;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ overflow: hidden;
+ opacity: 0.2;
+ line-height: 1;
+}
+
+.textLayer > span {
+ color: transparent;
+ position: absolute;
+ white-space: pre;
+ cursor: text;
+ transform-origin: 0% 0%;
+}
+
+.textLayer .highlight {
+ margin: -1px;
+ padding: 1px;
+ background-color: rgba(180, 0, 170, 1);
+ border-radius: 4px;
+}
+
+.textLayer .highlight.begin {
+ border-radius: 4px 0 0 4px;
+}
+
+.textLayer .highlight.end {
+ border-radius: 0 4px 4px 0;
+}
+
+.textLayer .highlight.middle {
+ border-radius: 0;
+}
+
+.textLayer .highlight.selected {
+ background-color: rgba(0, 100, 0, 1);
+}
+
+.textLayer ::-moz-selection {
+ background: rgba(0, 0, 255, 1);
+}
+
+.textLayer ::selection {
+ background: rgba(0, 0, 255, 1);
+}
+
+.textLayer .endOfContent {
+ display: block;
+ position: absolute;
+ left: 0;
+ top: 100%;
+ right: 0;
+ bottom: 0;
+ z-index: -1;
+ cursor: default;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.textLayer .endOfContent.active {
+ top: 0;
+}
+
+
+.annotationLayer section {
+ position: absolute;
+ text-align: initial;
+}
+
+.annotationLayer .linkAnnotation > a,
+.annotationLayer .buttonWidgetAnnotation.pushButton > a {
+ position: absolute;
+ font-size: 1em;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.annotationLayer .linkAnnotation > a:hover,
+.annotationLayer .buttonWidgetAnnotation.pushButton > a:hover {
+ opacity: 0.2;
+ background: rgba(255, 255, 0, 1);
+ box-shadow: 0 2px 10px rgba(255, 255, 0, 1);
+}
+
+.annotationLayer .textAnnotation img {
+ position: absolute;
+ cursor: pointer;
+}
+
+.annotationLayer .textWidgetAnnotation input,
+.annotationLayer .textWidgetAnnotation textarea,
+.annotationLayer .choiceWidgetAnnotation select,
+.annotationLayer .buttonWidgetAnnotation.checkBox input,
+.annotationLayer .buttonWidgetAnnotation.radioButton input {
+ background-color: rgba(0, 54, 255, 0.13);
+ border: 1px solid transparent;
+ box-sizing: border-box;
+ font-size: 9px;
+ height: 100%;
+ margin: 0;
+ padding: 0 3px;
+ vertical-align: top;
+ width: 100%;
+}
+
+.annotationLayer .choiceWidgetAnnotation select option {
+ padding: 0;
+}
+
+.annotationLayer .buttonWidgetAnnotation.radioButton input {
+ border-radius: 50%;
+}
+
+.annotationLayer .textWidgetAnnotation textarea {
+ font: message-box;
+ font-size: 9px;
+ resize: none;
+}
+
+.annotationLayer .textWidgetAnnotation input[disabled],
+.annotationLayer .textWidgetAnnotation textarea[disabled],
+.annotationLayer .choiceWidgetAnnotation select[disabled],
+.annotationLayer .buttonWidgetAnnotation.checkBox input[disabled],
+.annotationLayer .buttonWidgetAnnotation.radioButton input[disabled] {
+ background: none;
+ border: 1px solid transparent;
+ cursor: not-allowed;
+}
+
+.annotationLayer .textWidgetAnnotation input:hover,
+.annotationLayer .textWidgetAnnotation textarea:hover,
+.annotationLayer .choiceWidgetAnnotation select:hover,
+.annotationLayer .buttonWidgetAnnotation.checkBox input:hover,
+.annotationLayer .buttonWidgetAnnotation.radioButton input:hover {
+ border: 1px solid rgba(0, 0, 0, 1);
+}
+
+.annotationLayer .textWidgetAnnotation input:focus,
+.annotationLayer .textWidgetAnnotation textarea:focus,
+.annotationLayer .choiceWidgetAnnotation select:focus {
+ background: none;
+ border: 1px solid transparent;
+}
+
+.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,
+.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after,
+.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before {
+ background-color: rgba(0, 0, 0, 1);
+ content: "";
+ display: block;
+ position: absolute;
+}
+
+.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,
+.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after {
+ height: 80%;
+ left: 45%;
+ width: 1px;
+}
+
+.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before {
+ transform: rotate(45deg);
+}
+
+.annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after {
+ transform: rotate(-45deg);
+}
+
+.annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before {
+ border-radius: 50%;
+ height: 50%;
+ left: 30%;
+ top: 20%;
+ width: 50%;
+}
+
+.annotationLayer .textWidgetAnnotation input.comb {
+ font-family: monospace;
+ padding-left: 2px;
+ padding-right: 0;
+}
+
+.annotationLayer .textWidgetAnnotation input.comb:focus {
+ /*
+ * Letter spacing is placed on the right side of each character. Hence, the
+ * letter spacing of the last character may be placed outside the visible
+ * area, causing horizontal scrolling. We avoid this by extending the width
+ * when the element has focus and revert this when it loses focus.
+ */
+ width: 115%;
+}
+
+.annotationLayer .buttonWidgetAnnotation.checkBox input,
+.annotationLayer .buttonWidgetAnnotation.radioButton input {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ padding: 0;
+}
+
+.annotationLayer .popupWrapper {
+ position: absolute;
+ width: 20em;
+}
+
+.annotationLayer .popup {
+ position: absolute;
+ z-index: 200;
+ max-width: 20em;
+ background-color: rgba(255, 255, 153, 1);
+ box-shadow: 0 2px 5px rgba(136, 136, 136, 1);
+ border-radius: 2px;
+ padding: 6px;
+ margin-left: 5px;
+ cursor: pointer;
+ font: message-box;
+ font-size: 9px;
+ white-space: normal;
+ word-wrap: break-word;
+}
+
+.annotationLayer .popup > * {
+ font-size: 9px;
+}
+
+.annotationLayer .popup h1 {
+ display: inline-block;
+}
+
+.annotationLayer .popup span {
+ display: inline-block;
+ margin-left: 5px;
+}
+
+.annotationLayer .popup p {
+ border-top: 1px solid rgba(51, 51, 51, 1);
+ margin-top: 2px;
+ padding-top: 2px;
+}
+
+.annotationLayer .highlightAnnotation,
+.annotationLayer .underlineAnnotation,
+.annotationLayer .squigglyAnnotation,
+.annotationLayer .strikeoutAnnotation,
+.annotationLayer .freeTextAnnotation,
+.annotationLayer .lineAnnotation svg line,
+.annotationLayer .squareAnnotation svg rect,
+.annotationLayer .circleAnnotation svg ellipse,
+.annotationLayer .polylineAnnotation svg polyline,
+.annotationLayer .polygonAnnotation svg polygon,
+.annotationLayer .caretAnnotation,
+.annotationLayer .inkAnnotation svg polyline,
+.annotationLayer .stampAnnotation,
+.annotationLayer .fileAttachmentAnnotation {
+ cursor: pointer;
+}
+
+.pdfViewer .canvasWrapper {
+ overflow: hidden;
+}
+
+.pdfViewer .page {
+ direction: ltr;
+ width: 816px;
+ height: 1056px;
+ margin: 1px auto -8px;
+ position: relative;
+ overflow: visible;
+ border: 9px solid transparent;
+ background-clip: content-box;
+ -o-border-image: url(images/shadow.png) 9 9 repeat;
+ border-image: url(images/shadow.png) 9 9 repeat;
+ background-color: rgba(255, 255, 255, 1);
+}
+
+.pdfViewer.removePageBorders .page {
+ margin: 0 auto 10px;
+ border: none;
+}
+
+.pdfViewer.singlePageView {
+ display: inline-block;
+}
+
+.pdfViewer.singlePageView .page {
+ margin: 0;
+ border: none;
+}
+
+.pdfViewer.scrollHorizontal,
+.pdfViewer.scrollWrapped,
+.spread {
+ margin-left: 3.5px;
+ margin-right: 3.5px;
+ text-align: center;
+}
+
+.pdfViewer.scrollHorizontal,
+.spread {
+ white-space: nowrap;
+}
+
+.pdfViewer.removePageBorders,
+.pdfViewer.scrollHorizontal .spread,
+.pdfViewer.scrollWrapped .spread {
+ margin-left: 0;
+ margin-right: 0;
+}
+
+.spread .page,
+.pdfViewer.scrollHorizontal .page,
+.pdfViewer.scrollWrapped .page,
+.pdfViewer.scrollHorizontal .spread,
+.pdfViewer.scrollWrapped .spread {
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.spread .page,
+.pdfViewer.scrollHorizontal .page,
+.pdfViewer.scrollWrapped .page {
+ margin-left: -3.5px;
+ margin-right: -3.5px;
+}
+
+.pdfViewer.removePageBorders .spread .page,
+.pdfViewer.removePageBorders.scrollHorizontal .page,
+.pdfViewer.removePageBorders.scrollWrapped .page {
+ margin-left: 5px;
+ margin-right: 5px;
+}
+
+.pdfViewer .page canvas {
+ margin: 0;
+ display: block;
+}
+
+.pdfViewer .page canvas[hidden] {
+ display: none;
+}
+
+.pdfViewer .page .loadingIcon {
+ position: absolute;
+ display: block;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ background: url("images/loading-icon.gif") center no-repeat;
+}
+
+.pdfPresentationMode .pdfViewer {
+ margin-left: 0;
+ margin-right: 0;
+}
+
+.pdfPresentationMode .pdfViewer .page,
+.pdfPresentationMode .pdfViewer .spread {
+ display: block;
+}
+
+.pdfPresentationMode .pdfViewer .page,
+.pdfPresentationMode .pdfViewer.removePageBorders .page {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.pdfPresentationMode:-webkit-full-screen .pdfViewer .page {
+ margin-bottom: 100%;
+ border: 0;
+}
+
+.pdfPresentationMode:-moz-full-screen .pdfViewer .page {
+ margin-bottom: 100%;
+ border: 0;
+}
+
+.pdfPresentationMode:-ms-fullscreen .pdfViewer .page {
+ margin-bottom: 100%;
+ border: 0;
+}
+
+.pdfPresentationMode:fullscreen .pdfViewer .page {
+ margin-bottom: 100%;
+ border: 0;
+}
+
+:root {
+ --sidebar-width: 200px;
+ --sidebar-transition-duration: 200ms;
+ --sidebar-transition-timing-function: ease;
+ --loadingBar-end-offset: 0;
+
+ --toolbar-icon-opacity: 0.7;
+ --doorhanger-icon-opacity: 0.9;
+
+ --main-color: rgba(12, 12, 13, 1);
+ --body-bg-color: rgba(237, 237, 240, 1);
+ --errorWrapper-bg-color: rgba(255, 74, 74, 1);
+ --progressBar-color: rgba(10, 132, 255, 1);
+ --progressBar-indeterminate-bg-color: rgba(221, 221, 222, 1);
+ --progressBar-indeterminate-blend-color: rgba(116, 177, 239, 1);
+ --scrollbar-color: auto;
+ --scrollbar-bg-color: auto;
+ --toolbar-icon-bg-color: rgba(0, 0, 0, 1);
+
+ --sidebar-bg-color: rgba(245, 246, 247, 1);
+ --toolbar-bg-color: rgba(249, 249, 250, 1);
+ --toolbar-border-color: rgba(204, 204, 204, 1);
+ --button-hover-color: rgba(221, 222, 223, 1);
+ --toggled-btn-bg-color: rgba(0, 0, 0, 0.3);
+ --toggled-hover-active-btn-color: rgba(0, 0, 0, 0.4);
+ --dropdown-btn-bg-color: rgba(215, 215, 219, 1);
+ --separator-color: rgba(0, 0, 0, 0.3);
+ --field-color: rgba(6, 6, 6, 1);
+ --field-bg-color: rgba(255, 255, 255, 1);
+ --field-border-color: rgba(187, 187, 188, 1);
+ --findbar-nextprevious-btn-bg-color: rgba(227, 228, 230, 1);
+ --treeitem-color: rgba(0, 0, 0, 0.8);
+ --treeitem-hover-color: rgba(0, 0, 0, 0.9);
+ --treeitem-selected-color: rgba(0, 0, 0, 0.9);
+ --treeitem-selected-bg-color: rgba(0, 0, 0, 0.25);
+ --sidebaritem-bg-color: rgba(0, 0, 0, 0.15);
+ --doorhanger-bg-color: rgba(255, 255, 255, 1);
+ --doorhanger-border-color: rgba(12, 12, 13, 0.2);
+ --doorhanger-hover-color: rgba(237, 237, 237, 1);
+ --doorhanger-separator-color: rgba(222, 222, 222, 1);
+ --overlay-button-bg-color: rgba(12, 12, 13, 0.1);
+ --overlay-button-hover-color: rgba(12, 12, 13, 0.3);
+
+ --loading-icon: url(images/loading.svg);
+ --treeitem-expanded-icon: url(images/treeitem-expanded.svg);
+ --treeitem-collapsed-icon: url(images/treeitem-collapsed.svg);
+ --toolbarButton-menuArrow-icon: url(images/toolbarButton-menuArrow.svg);
+ --toolbarButton-sidebarToggle-icon: url(images/toolbarButton-sidebarToggle.svg);
+ --toolbarButton-secondaryToolbarToggle-icon: url(images/toolbarButton-secondaryToolbarToggle.svg);
+ --toolbarButton-pageUp-icon: url(images/toolbarButton-pageUp.svg);
+ --toolbarButton-pageDown-icon: url(images/toolbarButton-pageDown.svg);
+ --toolbarButton-zoomOut-icon: url(images/toolbarButton-zoomOut.svg);
+ --toolbarButton-zoomIn-icon: url(images/toolbarButton-zoomIn.svg);
+ --toolbarButton-presentationMode-icon: url(images/toolbarButton-presentationMode.svg);
+ --toolbarButton-print-icon: url(images/toolbarButton-print.svg);
+ --toolbarButton-openFile-icon: url(images/toolbarButton-openFile.svg);
+ --toolbarButton-download-icon: url(images/toolbarButton-download.svg);
+ --toolbarButton-bookmark-icon: url(images/toolbarButton-bookmark.svg);
+ --toolbarButton-viewThumbnail-icon: url(images/toolbarButton-viewThumbnail.svg);
+ --toolbarButton-viewOutline-icon: url(images/toolbarButton-viewOutline.svg);
+ --toolbarButton-viewAttachments-icon: url(images/toolbarButton-viewAttachments.svg);
+ --toolbarButton-viewLayers-icon: url(images/toolbarButton-viewLayers.svg);
+ --toolbarButton-currentOutlineItem-icon: url(images/toolbarButton-currentOutlineItem.svg);
+ --toolbarButton-search-icon: url(images/toolbarButton-search.svg);
+ --findbarButton-previous-icon: url(images/findbarButton-previous.svg);
+ --findbarButton-next-icon: url(images/findbarButton-next.svg);
+ --secondaryToolbarButton-firstPage-icon: url(images/secondaryToolbarButton-firstPage.svg);
+ --secondaryToolbarButton-lastPage-icon: url(images/secondaryToolbarButton-lastPage.svg);
+ --secondaryToolbarButton-rotateCcw-icon: url(images/secondaryToolbarButton-rotateCcw.svg);
+ --secondaryToolbarButton-rotateCw-icon: url(images/secondaryToolbarButton-rotateCw.svg);
+ --secondaryToolbarButton-selectTool-icon: url(images/secondaryToolbarButton-selectTool.svg);
+ --secondaryToolbarButton-handTool-icon: url(images/secondaryToolbarButton-handTool.svg);
+ --secondaryToolbarButton-scrollVertical-icon: url(images/secondaryToolbarButton-scrollVertical.svg);
+ --secondaryToolbarButton-scrollHorizontal-icon: url(images/secondaryToolbarButton-scrollHorizontal.svg);
+ --secondaryToolbarButton-scrollWrapped-icon: url(images/secondaryToolbarButton-scrollWrapped.svg);
+ --secondaryToolbarButton-spreadNone-icon: url(images/secondaryToolbarButton-spreadNone.svg);
+ --secondaryToolbarButton-spreadOdd-icon: url(images/secondaryToolbarButton-spreadOdd.svg);
+ --secondaryToolbarButton-spreadEven-icon: url(images/secondaryToolbarButton-spreadEven.svg);
+ --secondaryToolbarButton-documentProperties-icon: url(images/secondaryToolbarButton-documentProperties.svg);
+}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --main-color: rgba(249, 249, 250, 1);
+ --body-bg-color: rgba(42, 42, 46, 1);
+ --errorWrapper-bg-color: rgba(199, 17, 17, 1);
+ --progressBar-color: rgba(0, 96, 223, 1);
+ --progressBar-indeterminate-bg-color: rgba(40, 40, 43, 1);
+ --progressBar-indeterminate-blend-color: rgba(20, 68, 133, 1);
+ --scrollbar-color: rgba(121, 121, 123, 1);
+ --scrollbar-bg-color: rgba(35, 35, 39, 1);
+ --toolbar-icon-bg-color: rgba(255, 255, 255, 1);
+
+ --sidebar-bg-color: rgba(50, 50, 52, 1);
+ --toolbar-bg-color: rgba(56, 56, 61, 1);
+ --toolbar-border-color: rgba(12, 12, 13, 1);
+ --button-hover-color: rgba(102, 102, 103, 1);
+ --toggled-btn-bg-color: rgba(0, 0, 0, 0.3);
+ --toggled-hover-active-btn-color: rgba(0, 0, 0, 0.4);
+ --dropdown-btn-bg-color: rgba(74, 74, 79, 1);
+ --separator-color: rgba(0, 0, 0, 0.3);
+ --field-color: rgba(250, 250, 250, 1);
+ --field-bg-color: rgba(64, 64, 68, 1);
+ --field-border-color: rgba(115, 115, 115, 1);
+ --findbar-nextprevious-btn-bg-color: rgba(89, 89, 89, 1);
+ --treeitem-color: rgba(255, 255, 255, 0.8);
+ --treeitem-hover-color: rgba(255, 255, 255, 0.9);
+ --treeitem-selected-color: rgba(255, 255, 255, 0.9);
+ --treeitem-selected-bg-color: rgba(255, 255, 255, 0.25);
+ --sidebaritem-bg-color: rgba(255, 255, 255, 0.15);
+ --doorhanger-bg-color: rgba(74, 74, 79, 1);
+ --doorhanger-border-color: rgba(39, 39, 43, 1);
+ --doorhanger-hover-color: rgba(93, 94, 98, 1);
+ --doorhanger-separator-color: rgba(92, 92, 97, 1);
+ --overlay-button-bg-color: rgba(92, 92, 97, 1);
+ --overlay-button-hover-color: rgba(115, 115, 115, 1);
+
+ /* This image is used in elements, which unfortunately means that
+ * the `mask-image` approach used with all of the other images doesn't work
+ * here; hence why we still have two versions of this particular image. */
+ --loading-icon: url(images/loading-dark.svg);
+ }
+}
+
+* {
+ padding: 0;
+ margin: 0;
+}
+
+html {
+ height: 100%;
+ width: 100%;
+ /* Font size is needed to make the activity bar the correct size. */
+ font-size: 10px;
+}
+
+body {
+ height: 100%;
+ width: 100%;
+ background-color: rgba(237, 237, 240, 1);
+ background-color: var(--body-bg-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ body {
+ background-color: rgba(42, 42, 46, 1);
+ background-color: var(--body-bg-color);
+ }
+}
+
+body {
+ font: message-box;
+ outline: none;
+ scrollbar-color: auto auto;
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ body {
+ scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ body {
+ scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ body {
+ scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ body {
+ scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+ }
+}
+
+input {
+ font: message-box;
+ outline: none;
+ scrollbar-color: auto auto;
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ input {
+ scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ input {
+ scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ input {
+ scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ input {
+ scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+ }
+}
+
+button {
+ font: message-box;
+ outline: none;
+ scrollbar-color: auto auto;
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ button {
+ scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ button {
+ scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ button {
+ scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ button {
+ scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+ }
+}
+
+select {
+ font: message-box;
+ outline: none;
+ scrollbar-color: auto auto;
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ select {
+ scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ select {
+ scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ select {
+ scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ select {
+ scrollbar-color: rgba(121, 121, 123, 1) rgba(35, 35, 39, 1);
+ scrollbar-color: var(--scrollbar-color) var(--scrollbar-bg-color);
+ }
+}
+
+.hidden {
+ display: none !important;
+}
+[hidden] {
+ display: none !important;
+}
+
+.pdfViewer.enablePermissions .textLayer > span {
+ -webkit-user-select: none !important;
+ -moz-user-select: none !important;
+ -ms-user-select: none !important;
+ user-select: none !important;
+ cursor: not-allowed;
+}
+
+#viewerContainer.pdfPresentationMode:-webkit-full-screen {
+ top: 0;
+ border-top: 2px solid rgba(0, 0, 0, 0);
+ background-color: rgba(0, 0, 0, 1);
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ cursor: none;
+ -webkit-user-select: none;
+ user-select: none;
+}
+
+#viewerContainer.pdfPresentationMode:-moz-full-screen {
+ top: 0;
+ border-top: 2px solid rgba(0, 0, 0, 0);
+ background-color: rgba(0, 0, 0, 1);
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ cursor: none;
+ -moz-user-select: none;
+ user-select: none;
+}
+
+#viewerContainer.pdfPresentationMode:-ms-fullscreen {
+ top: 0;
+ border-top: 2px solid rgba(0, 0, 0, 0);
+ background-color: rgba(0, 0, 0, 1);
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ cursor: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+#viewerContainer.pdfPresentationMode:fullscreen {
+ top: 0;
+ border-top: 2px solid rgba(0, 0, 0, 0);
+ background-color: rgba(0, 0, 0, 1);
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ cursor: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.pdfPresentationMode:-webkit-full-screen a:not(.internalLink) {
+ display: none;
+}
+
+.pdfPresentationMode:-moz-full-screen a:not(.internalLink) {
+ display: none;
+}
+
+.pdfPresentationMode:-ms-fullscreen a:not(.internalLink) {
+ display: none;
+}
+
+.pdfPresentationMode:fullscreen a:not(.internalLink) {
+ display: none;
+}
+
+.pdfPresentationMode:-webkit-full-screen .textLayer > span {
+ cursor: none;
+}
+
+.pdfPresentationMode:-moz-full-screen .textLayer > span {
+ cursor: none;
+}
+
+.pdfPresentationMode:-ms-fullscreen .textLayer > span {
+ cursor: none;
+}
+
+.pdfPresentationMode:fullscreen .textLayer > span {
+ cursor: none;
+}
+
+.pdfPresentationMode.pdfPresentationModeControls > *,
+.pdfPresentationMode.pdfPresentationModeControls .textLayer > span {
+ cursor: default;
+}
+
+#outerContainer {
+ width: 100%;
+ height: 100%;
+ position: relative;
+}
+
+#sidebarContainer {
+ position: absolute;
+ top: 32px;
+ bottom: 0;
+ width: 200px;
+ width: var(--sidebar-width);
+ visibility: hidden;
+ z-index: 100;
+ border-top: 1px solid rgba(51, 51, 51, 1);
+ transition-duration: 200ms;
+ transition-duration: var(--sidebar-transition-duration);
+ transition-timing-function: ease;
+ transition-timing-function: var(--sidebar-transition-timing-function);
+}
+html[dir="ltr"] #sidebarContainer {
+ transition-property: left;
+ left: -200px;
+ left: calc(0px - var(--sidebar-width));
+}
+html[dir="rtl"] #sidebarContainer {
+ transition-property: right;
+ right: -200px;
+ right: calc(0px - var(--sidebar-width));
+}
+
+#outerContainer.sidebarResizing #sidebarContainer {
+ /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */
+ transition-duration: 0s;
+ /* Prevent e.g. the thumbnails being selected when the sidebar is resized. */
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+#outerContainer.sidebarMoving #sidebarContainer,
+#outerContainer.sidebarOpen #sidebarContainer {
+ visibility: visible;
+}
+html[dir="ltr"] #outerContainer.sidebarOpen #sidebarContainer {
+ left: 0;
+}
+html[dir="rtl"] #outerContainer.sidebarOpen #sidebarContainer {
+ right: 0;
+}
+
+#mainContainer {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ min-width: 320px;
+}
+
+#sidebarContent {
+ top: 32px;
+ bottom: 0;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ position: absolute;
+ width: 100%;
+ background-color: rgba(0, 0, 0, 0.1);
+}
+html[dir="ltr"] #sidebarContent {
+ left: 0;
+ box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.25);
+}
+html[dir="rtl"] #sidebarContent {
+ right: 0;
+ box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.25);
+}
+
+#viewerContainer {
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ position: absolute;
+ top: 32px;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ outline: none;
+}
+#viewerContainer:not(.pdfPresentationMode) {
+ transition-duration: 200ms;
+ transition-duration: var(--sidebar-transition-duration);
+ transition-timing-function: ease;
+ transition-timing-function: var(--sidebar-transition-timing-function);
+}
+
+#outerContainer.sidebarResizing #viewerContainer {
+ /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */
+ transition-duration: 0s;
+}
+
+html[dir="ltr"]
+ #outerContainer.sidebarOpen
+ #viewerContainer:not(.pdfPresentationMode) {
+ transition-property: left;
+ left: 200px;
+ left: var(--sidebar-width);
+}
+html[dir="rtl"]
+ #outerContainer.sidebarOpen
+ #viewerContainer:not(.pdfPresentationMode) {
+ transition-property: right;
+ right: 200px;
+ right: var(--sidebar-width);
+}
+
+.toolbar {
+ position: relative;
+ left: 0;
+ right: 0;
+ z-index: 9999;
+ cursor: default;
+}
+
+#toolbarContainer {
+ width: 100%;
+}
+
+#toolbarSidebar {
+ width: 100%;
+ height: 32px;
+ background-color: rgba(245, 246, 247, 1);
+ background-color: var(--sidebar-bg-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #toolbarSidebar {
+ background-color: rgba(50, 50, 52, 1);
+ background-color: var(--sidebar-bg-color);
+ }
+}
+html[dir="ltr"] #toolbarSidebar {
+ box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.25), 0 1px 0 rgba(0, 0, 0, 0.15),
+ 0 0 1px rgba(0, 0, 0, 0.1);
+}
+html[dir="rtl"] #toolbarSidebar {
+ box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.25), 0 1px 0 rgba(0, 0, 0, 0.15),
+ 0 0 1px rgba(0, 0, 0, 0.1);
+}
+
+html[dir="ltr"] #toolbarSidebar .toolbarButton {
+ margin-right: 2px !important;
+}
+html[dir="rtl"] #toolbarSidebar .toolbarButton {
+ margin-left: 2px !important;
+}
+
+html[dir="ltr"] #toolbarSidebarRight .toolbarButton {
+ margin-right: 3px !important;
+}
+html[dir="rtl"] #toolbarSidebarRight .toolbarButton {
+ margin-left: 3px !important;
+}
+
+#sidebarResizer {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ width: 6px;
+ z-index: 200;
+ cursor: ew-resize;
+}
+html[dir="ltr"] #sidebarResizer {
+ right: -6px;
+}
+html[dir="rtl"] #sidebarResizer {
+ left: -6px;
+}
+
+#toolbarContainer {
+ position: relative;
+ height: 32px;
+ background-color: rgba(249, 249, 250, 1);
+ background-color: var(--toolbar-bg-color);
+ box-shadow: 0 1px 0 rgba(204, 204, 204, 1);
+ box-shadow: 0 1px 0 var(--toolbar-border-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #toolbarContainer {
+ box-shadow: 0 1px 0 rgba(12, 12, 13, 1);
+ box-shadow: 0 1px 0 var(--toolbar-border-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #toolbarContainer {
+ background-color: rgba(56, 56, 61, 1);
+ background-color: var(--toolbar-bg-color);
+ }
+}
+
+.findbar {
+ position: relative;
+ height: 32px;
+ background-color: rgba(249, 249, 250, 1);
+ background-color: var(--toolbar-bg-color);
+ box-shadow: 0 1px 0 rgba(204, 204, 204, 1);
+ box-shadow: 0 1px 0 var(--toolbar-border-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .findbar {
+ box-shadow: 0 1px 0 rgba(12, 12, 13, 1);
+ box-shadow: 0 1px 0 var(--toolbar-border-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .findbar {
+ background-color: rgba(56, 56, 61, 1);
+ background-color: var(--toolbar-bg-color);
+ }
+}
+
+.secondaryToolbar {
+ position: relative;
+ height: 32px;
+ background-color: rgba(249, 249, 250, 1);
+ background-color: var(--toolbar-bg-color);
+ box-shadow: 0 1px 0 rgba(204, 204, 204, 1);
+ box-shadow: 0 1px 0 var(--toolbar-border-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .secondaryToolbar {
+ box-shadow: 0 1px 0 rgba(12, 12, 13, 1);
+ box-shadow: 0 1px 0 var(--toolbar-border-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .secondaryToolbar {
+ background-color: rgba(56, 56, 61, 1);
+ background-color: var(--toolbar-bg-color);
+ }
+}
+
+#toolbarViewer {
+ height: 32px;
+}
+
+#loadingBar {
+ position: absolute;
+ height: 4px;
+ background-color: rgba(237, 237, 240, 1);
+ background-color: var(--body-bg-color);
+ border-bottom: 1px solid rgba(204, 204, 204, 1);
+ border-bottom: 1px solid var(--toolbar-border-color);
+
+ transition-duration: 200ms;
+
+ transition-duration: var(--sidebar-transition-duration);
+ transition-timing-function: ease;
+ transition-timing-function: var(--sidebar-transition-timing-function);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #loadingBar {
+ border-bottom: 1px solid rgba(12, 12, 13, 1);
+ border-bottom: 1px solid var(--toolbar-border-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #loadingBar {
+ background-color: rgba(42, 42, 46, 1);
+ background-color: var(--body-bg-color);
+ }
+}
+html[dir="ltr"] #loadingBar {
+ transition-property: left;
+ left: 0;
+ right: 0;
+ right: var(--loadingBar-end-offset);
+}
+html[dir="rtl"] #loadingBar {
+ transition-property: right;
+ left: 0;
+ left: var(--loadingBar-end-offset);
+ right: 0;
+}
+
+html[dir="ltr"] #outerContainer.sidebarOpen #loadingBar {
+ left: 200px;
+ left: var(--sidebar-width);
+}
+html[dir="rtl"] #outerContainer.sidebarOpen #loadingBar {
+ right: 200px;
+ right: var(--sidebar-width);
+}
+
+#outerContainer.sidebarResizing #loadingBar {
+ /* Improve responsiveness and avoid visual glitches when the sidebar is resized. */
+ transition-duration: 0s;
+}
+
+#loadingBar .progress {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 0%;
+ height: 100%;
+ background-color: rgba(10, 132, 255, 1);
+ background-color: var(--progressBar-color);
+ overflow: hidden;
+ transition: width 200ms;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #loadingBar .progress {
+ background-color: rgba(0, 96, 223, 1);
+ background-color: var(--progressBar-color);
+ }
+}
+
+@-webkit-keyframes progressIndeterminate {
+ 0% {
+ left: -142px;
+ }
+ 100% {
+ left: 0;
+ }
+}
+
+@keyframes progressIndeterminate {
+ 0% {
+ left: -142px;
+ }
+ 100% {
+ left: 0;
+ }
+}
+
+#loadingBar .progress.indeterminate {
+ background-color: rgba(221, 221, 222, 1);
+ background-color: var(--progressBar-indeterminate-bg-color);
+ transition: none;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #loadingBar .progress.indeterminate {
+ background-color: rgba(40, 40, 43, 1);
+ background-color: var(--progressBar-indeterminate-bg-color);
+ }
+}
+
+#loadingBar .progress.indeterminate .glimmer {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: calc(100% + 150px);
+ background: repeating-linear-gradient(
+ 135deg,
+ rgba(116, 177, 239, 1) 0,
+ rgba(221, 221, 222, 1) 5px,
+ rgba(221, 221, 222, 1) 45px,
+ rgba(10, 132, 255, 1) 55px,
+ rgba(10, 132, 255, 1) 95px,
+ rgba(116, 177, 239, 1) 100px
+ );
+ background: repeating-linear-gradient(
+ 135deg,
+ var(--progressBar-indeterminate-blend-color) 0,
+ var(--progressBar-indeterminate-bg-color) 5px,
+ var(--progressBar-indeterminate-bg-color) 45px,
+ var(--progressBar-color) 55px,
+ var(--progressBar-color) 95px,
+ var(--progressBar-indeterminate-blend-color) 100px
+ );
+ -webkit-animation: progressIndeterminate 1s linear infinite;
+ animation: progressIndeterminate 1s linear infinite;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #loadingBar .progress.indeterminate .glimmer {
+ background: repeating-linear-gradient(
+ 135deg,
+ rgba(20, 68, 133, 1) 0,
+ rgba(40, 40, 43, 1) 5px,
+ rgba(40, 40, 43, 1) 45px,
+ rgba(0, 96, 223, 1) 55px,
+ rgba(0, 96, 223, 1) 95px,
+ rgba(20, 68, 133, 1) 100px
+ );
+ background: repeating-linear-gradient(
+ 135deg,
+ var(--progressBar-indeterminate-blend-color) 0,
+ var(--progressBar-indeterminate-bg-color) 5px,
+ var(--progressBar-indeterminate-bg-color) 45px,
+ var(--progressBar-color) 55px,
+ var(--progressBar-color) 95px,
+ var(--progressBar-indeterminate-blend-color) 100px
+ );
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #loadingBar .progress.indeterminate .glimmer {
+ background: repeating-linear-gradient(
+ 135deg,
+ rgba(20, 68, 133, 1) 0,
+ rgba(40, 40, 43, 1) 5px,
+ rgba(40, 40, 43, 1) 45px,
+ rgba(0, 96, 223, 1) 55px,
+ rgba(0, 96, 223, 1) 95px,
+ rgba(20, 68, 133, 1) 100px
+ );
+ background: repeating-linear-gradient(
+ 135deg,
+ var(--progressBar-indeterminate-blend-color) 0,
+ var(--progressBar-indeterminate-bg-color) 5px,
+ var(--progressBar-indeterminate-bg-color) 45px,
+ var(--progressBar-color) 55px,
+ var(--progressBar-color) 95px,
+ var(--progressBar-indeterminate-blend-color) 100px
+ );
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #loadingBar .progress.indeterminate .glimmer {
+ background: repeating-linear-gradient(
+ 135deg,
+ rgba(20, 68, 133, 1) 0,
+ rgba(40, 40, 43, 1) 5px,
+ rgba(40, 40, 43, 1) 45px,
+ rgba(0, 96, 223, 1) 55px,
+ rgba(0, 96, 223, 1) 95px,
+ rgba(20, 68, 133, 1) 100px
+ );
+ background: repeating-linear-gradient(
+ 135deg,
+ var(--progressBar-indeterminate-blend-color) 0,
+ var(--progressBar-indeterminate-bg-color) 5px,
+ var(--progressBar-indeterminate-bg-color) 45px,
+ var(--progressBar-color) 55px,
+ var(--progressBar-color) 95px,
+ var(--progressBar-indeterminate-blend-color) 100px
+ );
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #loadingBar .progress.indeterminate .glimmer {
+ background: repeating-linear-gradient(
+ 135deg,
+ rgba(20, 68, 133, 1) 0,
+ rgba(40, 40, 43, 1) 5px,
+ rgba(40, 40, 43, 1) 45px,
+ rgba(0, 96, 223, 1) 55px,
+ rgba(0, 96, 223, 1) 95px,
+ rgba(20, 68, 133, 1) 100px
+ );
+ background: repeating-linear-gradient(
+ 135deg,
+ var(--progressBar-indeterminate-blend-color) 0,
+ var(--progressBar-indeterminate-bg-color) 5px,
+ var(--progressBar-indeterminate-bg-color) 45px,
+ var(--progressBar-color) 55px,
+ var(--progressBar-color) 95px,
+ var(--progressBar-indeterminate-blend-color) 100px
+ );
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #loadingBar .progress.indeterminate .glimmer {
+ background: repeating-linear-gradient(
+ 135deg,
+ rgba(20, 68, 133, 1) 0,
+ rgba(40, 40, 43, 1) 5px,
+ rgba(40, 40, 43, 1) 45px,
+ rgba(0, 96, 223, 1) 55px,
+ rgba(0, 96, 223, 1) 95px,
+ rgba(20, 68, 133, 1) 100px
+ );
+ background: repeating-linear-gradient(
+ 135deg,
+ var(--progressBar-indeterminate-blend-color) 0,
+ var(--progressBar-indeterminate-bg-color) 5px,
+ var(--progressBar-indeterminate-bg-color) 45px,
+ var(--progressBar-color) 55px,
+ var(--progressBar-color) 95px,
+ var(--progressBar-indeterminate-blend-color) 100px
+ );
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #loadingBar .progress.indeterminate .glimmer {
+ background: repeating-linear-gradient(
+ 135deg,
+ rgba(20, 68, 133, 1) 0,
+ rgba(40, 40, 43, 1) 5px,
+ rgba(40, 40, 43, 1) 45px,
+ rgba(0, 96, 223, 1) 55px,
+ rgba(0, 96, 223, 1) 95px,
+ rgba(20, 68, 133, 1) 100px
+ );
+ background: repeating-linear-gradient(
+ 135deg,
+ var(--progressBar-indeterminate-blend-color) 0,
+ var(--progressBar-indeterminate-bg-color) 5px,
+ var(--progressBar-indeterminate-bg-color) 45px,
+ var(--progressBar-color) 55px,
+ var(--progressBar-color) 95px,
+ var(--progressBar-indeterminate-blend-color) 100px
+ );
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #loadingBar .progress.indeterminate .glimmer {
+ background: repeating-linear-gradient(
+ 135deg,
+ rgba(20, 68, 133, 1) 0,
+ rgba(40, 40, 43, 1) 5px,
+ rgba(40, 40, 43, 1) 45px,
+ rgba(0, 96, 223, 1) 55px,
+ rgba(0, 96, 223, 1) 95px,
+ rgba(20, 68, 133, 1) 100px
+ );
+ background: repeating-linear-gradient(
+ 135deg,
+ var(--progressBar-indeterminate-blend-color) 0,
+ var(--progressBar-indeterminate-bg-color) 5px,
+ var(--progressBar-indeterminate-bg-color) 45px,
+ var(--progressBar-color) 55px,
+ var(--progressBar-color) 95px,
+ var(--progressBar-indeterminate-blend-color) 100px
+ );
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #loadingBar .progress.indeterminate .glimmer {
+ background: repeating-linear-gradient(
+ 135deg,
+ rgba(20, 68, 133, 1) 0,
+ rgba(40, 40, 43, 1) 5px,
+ rgba(40, 40, 43, 1) 45px,
+ rgba(0, 96, 223, 1) 55px,
+ rgba(0, 96, 223, 1) 95px,
+ rgba(20, 68, 133, 1) 100px
+ );
+ background: repeating-linear-gradient(
+ 135deg,
+ var(--progressBar-indeterminate-blend-color) 0,
+ var(--progressBar-indeterminate-bg-color) 5px,
+ var(--progressBar-indeterminate-bg-color) 45px,
+ var(--progressBar-color) 55px,
+ var(--progressBar-color) 95px,
+ var(--progressBar-indeterminate-blend-color) 100px
+ );
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #loadingBar .progress.indeterminate .glimmer {
+ background: repeating-linear-gradient(
+ 135deg,
+ rgba(20, 68, 133, 1) 0,
+ rgba(40, 40, 43, 1) 5px,
+ rgba(40, 40, 43, 1) 45px,
+ rgba(0, 96, 223, 1) 55px,
+ rgba(0, 96, 223, 1) 95px,
+ rgba(20, 68, 133, 1) 100px
+ );
+ background: repeating-linear-gradient(
+ 135deg,
+ var(--progressBar-indeterminate-blend-color) 0,
+ var(--progressBar-indeterminate-bg-color) 5px,
+ var(--progressBar-indeterminate-bg-color) 45px,
+ var(--progressBar-color) 55px,
+ var(--progressBar-color) 95px,
+ var(--progressBar-indeterminate-blend-color) 100px
+ );
+ }
+}
+
+.findbar,
+.secondaryToolbar {
+ top: 32px;
+ position: absolute;
+ z-index: 10000;
+ height: auto;
+ min-width: 16px;
+ padding: 0 4px;
+ margin: 4px 2px;
+ color: rgba(217, 217, 217, 1);
+ font-size: 12px;
+ line-height: 14px;
+ text-align: left;
+ cursor: default;
+}
+
+.findbar {
+ min-width: 300px;
+ background-color: rgba(249, 249, 250, 1);
+ background-color: var(--toolbar-bg-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .findbar {
+ background-color: rgba(56, 56, 61, 1);
+ background-color: var(--toolbar-bg-color);
+ }
+}
+.findbar > div {
+ height: 32px;
+}
+.findbar.wrapContainers > div {
+ clear: both;
+}
+.findbar.wrapContainers > div#findbarMessageContainer {
+ height: auto;
+}
+html[dir="ltr"] .findbar {
+ left: 64px;
+}
+html[dir="rtl"] .findbar {
+ right: 64px;
+}
+
+.findbar .splitToolbarButton {
+ margin-top: 3px;
+}
+html[dir="ltr"] .findbar .splitToolbarButton {
+ margin-left: 0;
+ margin-right: 5px;
+}
+html[dir="rtl"] .findbar .splitToolbarButton {
+ margin-left: 5px;
+ margin-right: 0;
+}
+
+.findbar .splitToolbarButton > .toolbarButton {
+ background-color: rgba(227, 228, 230, 1);
+ background-color: var(--findbar-nextprevious-btn-bg-color);
+ border-radius: 0;
+ height: 26px;
+ border-top: 1px solid rgba(187, 187, 188, 1);
+ border-top: 1px solid var(--field-border-color);
+ border-bottom: 1px solid rgba(187, 187, 188, 1);
+ border-bottom: 1px solid var(--field-border-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .findbar .splitToolbarButton > .toolbarButton {
+ border-bottom: 1px solid rgba(115, 115, 115, 1);
+ border-bottom: 1px solid var(--field-border-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .findbar .splitToolbarButton > .toolbarButton {
+ border-top: 1px solid rgba(115, 115, 115, 1);
+ border-top: 1px solid var(--field-border-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .findbar .splitToolbarButton > .toolbarButton {
+ background-color: rgba(89, 89, 89, 1);
+ background-color: var(--findbar-nextprevious-btn-bg-color);
+ }
+}
+
+.findbar .splitToolbarButton > .toolbarButton::before {
+ top: 5px;
+}
+
+.findbar .splitToolbarButton > .findNext {
+ width: 29px;
+}
+html[dir="ltr"] .findbar .splitToolbarButton > .findNext {
+ border-bottom-right-radius: 2px;
+ border-top-right-radius: 2px;
+ border-right: 1px solid rgba(187, 187, 188, 1);
+ border-right: 1px solid var(--field-border-color);
+}
+@media (prefers-color-scheme: dark) {
+
+ html[dir="ltr"] .findbar .splitToolbarButton > .findNext {
+ border-right: 1px solid rgba(115, 115, 115, 1);
+ border-right: 1px solid var(--field-border-color);
+ }
+}
+html[dir="rtl"] .findbar .splitToolbarButton > .findNext {
+ border-bottom-left-radius: 2px;
+ border-top-left-radius: 2px;
+ border-left: 1px solid rgba(187, 187, 188, 1);
+ border-left: 1px solid var(--field-border-color);
+}
+@media (prefers-color-scheme: dark) {
+
+ html[dir="rtl"] .findbar .splitToolbarButton > .findNext {
+ border-left: 1px solid rgba(115, 115, 115, 1);
+ border-left: 1px solid var(--field-border-color);
+ }
+}
+
+.findbar input[type="checkbox"] {
+ pointer-events: none;
+}
+
+.findbar label {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.findbar label:hover {
+ background-color: rgba(221, 222, 223, 1);
+ background-color: var(--button-hover-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .findbar label:hover {
+ background-color: rgba(102, 102, 103, 1);
+ background-color: var(--button-hover-color);
+ }
+}
+
+.findbar input:focus + label {
+ background-color: rgba(221, 222, 223, 1);
+ background-color: var(--button-hover-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .findbar input:focus + label {
+ background-color: rgba(102, 102, 103, 1);
+ background-color: var(--button-hover-color);
+ }
+}
+
+html[dir="ltr"] #findInput {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+html[dir="rtl"] #findInput {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.findbar .toolbarField[type="checkbox"]:checked + .toolbarLabel {
+ background-color: rgba(0, 0, 0, 0.3) !important;
+ background-color: var(--toggled-btn-bg-color) !important;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .findbar .toolbarField[type="checkbox"]:checked + .toolbarLabel {
+ background-color: rgba(0, 0, 0, 0.3) !important;
+ background-color: var(--toggled-btn-bg-color) !important;
+ }
+}
+
+#findInput {
+ width: 200px;
+}
+#findInput::-webkit-input-placeholder {
+ color: rgba(191, 191, 191, 1);
+}
+#findInput::-moz-placeholder {
+ font-style: normal;
+}
+#findInput:-ms-input-placeholder {
+ font-style: normal;
+}
+#findInput::placeholder {
+ font-style: normal;
+}
+#findInput[data-status="pending"] {
+ background-image: url(images/loading.svg);
+ background-image: var(--loading-icon);
+ background-repeat: no-repeat;
+ background-position: 98%;
+}
+@media (prefers-color-scheme: dark) {
+
+ #findInput[data-status="pending"] {
+ background-image: url(images/loading-dark.svg);
+ background-image: var(--loading-icon);
+ }
+}
+html[dir="rtl"] #findInput[data-status="pending"] {
+ background-position: 3px;
+}
+#findInput[data-status="notFound"] {
+ background-color: rgba(255, 102, 102, 1);
+}
+
+.secondaryToolbar {
+ padding: 6px 0 10px;
+ height: auto;
+ z-index: 30000;
+ background-color: rgba(255, 255, 255, 1);
+ background-color: var(--doorhanger-bg-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .secondaryToolbar {
+ background-color: rgba(74, 74, 79, 1);
+ background-color: var(--doorhanger-bg-color);
+ }
+}
+html[dir="ltr"] .secondaryToolbar {
+ right: 4px;
+}
+html[dir="rtl"] .secondaryToolbar {
+ left: 4px;
+}
+
+#secondaryToolbarButtonContainer {
+ max-width: 220px;
+ max-height: 400px;
+ overflow-y: auto;
+ -webkit-overflow-scrolling: touch;
+ margin-bottom: -4px;
+}
+
+#secondaryToolbarButtonContainer.hiddenScrollModeButtons > .scrollModeButtons,
+#secondaryToolbarButtonContainer.hiddenSpreadModeButtons > .spreadModeButtons {
+ display: none !important;
+}
+
+.doorHanger {
+ border-radius: 2px;
+ box-shadow: 0 1px 5px rgba(12, 12, 13, 0.2),
+ 0 0 0 1px rgba(12, 12, 13, 0.2);
+ box-shadow: 0 1px 5px var(--doorhanger-border-color),
+ 0 0 0 1px var(--doorhanger-border-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .doorHanger {
+ box-shadow: 0 1px 5px rgba(39, 39, 43, 1),
+ 0 0 0 1px rgba(39, 39, 43, 1);
+ box-shadow: 0 1px 5px var(--doorhanger-border-color),
+ 0 0 0 1px var(--doorhanger-border-color);
+ }
+}
+
+.doorHangerRight {
+ border-radius: 2px;
+ box-shadow: 0 1px 5px rgba(12, 12, 13, 0.2),
+ 0 0 0 1px rgba(12, 12, 13, 0.2);
+ box-shadow: 0 1px 5px var(--doorhanger-border-color),
+ 0 0 0 1px var(--doorhanger-border-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .doorHangerRight {
+ box-shadow: 0 1px 5px rgba(39, 39, 43, 1),
+ 0 0 0 1px rgba(39, 39, 43, 1);
+ box-shadow: 0 1px 5px var(--doorhanger-border-color),
+ 0 0 0 1px var(--doorhanger-border-color);
+ }
+}
+.doorHanger:after,
+.doorHanger:before,
+.doorHangerRight:after,
+.doorHangerRight:before {
+ bottom: 100%;
+ border: solid rgba(0, 0, 0, 0);
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+}
+.doorHanger:after,
+.doorHangerRight:after {
+ border-width: 8px;
+}
+.doorHanger:after {
+ border-bottom-color: rgba(249, 249, 250, 1);
+ border-bottom-color: var(--toolbar-bg-color);
+}
+@media (prefers-color-scheme: dark) {
+
+ .doorHanger:after {
+ border-bottom-color: rgba(56, 56, 61, 1);
+ border-bottom-color: var(--toolbar-bg-color);
+ }
+}
+.doorHangerRight:after {
+ border-bottom-color: rgba(255, 255, 255, 1);
+ border-bottom-color: var(--doorhanger-bg-color);
+}
+@media (prefers-color-scheme: dark) {
+
+ .doorHangerRight:after {
+ border-bottom-color: rgba(74, 74, 79, 1);
+ border-bottom-color: var(--doorhanger-bg-color);
+ }
+}
+.doorHanger:before {
+ border-bottom-color: rgba(12, 12, 13, 0.2);
+ border-bottom-color: var(--doorhanger-border-color);
+ border-width: 9px;
+}
+@media (prefers-color-scheme: dark) {
+
+ .doorHanger:before {
+ border-bottom-color: rgba(39, 39, 43, 1);
+ border-bottom-color: var(--doorhanger-border-color);
+ }
+}
+.doorHangerRight:before {
+ border-bottom-color: rgba(12, 12, 13, 0.2);
+ border-bottom-color: var(--doorhanger-border-color);
+ border-width: 9px;
+}
+@media (prefers-color-scheme: dark) {
+
+ .doorHangerRight:before {
+ border-bottom-color: rgba(39, 39, 43, 1);
+ border-bottom-color: var(--doorhanger-border-color);
+ }
+}
+
+html[dir="ltr"] .doorHanger:after,
+html[dir="rtl"] .doorHangerRight:after {
+ left: 10px;
+ margin-left: -8px;
+}
+
+html[dir="ltr"] .doorHanger:before,
+html[dir="rtl"] .doorHangerRight:before {
+ left: 10px;
+ margin-left: -9px;
+}
+
+html[dir="rtl"] .doorHanger:after,
+html[dir="ltr"] .doorHangerRight:after {
+ right: 10px;
+ margin-right: -8px;
+}
+
+html[dir="rtl"] .doorHanger:before,
+html[dir="ltr"] .doorHangerRight:before {
+ right: 10px;
+ margin-right: -9px;
+}
+
+#findResultsCount {
+ background-color: rgba(217, 217, 217, 1);
+ color: rgba(82, 82, 82, 1);
+ text-align: center;
+ padding: 3px 4px;
+ margin: 5px;
+}
+
+#findMsg {
+ color: rgba(251, 0, 0, 1);
+}
+#findMsg:empty {
+ display: none;
+}
+
+#toolbarViewerMiddle {
+ position: absolute;
+ left: 50%;
+ transform: translateX(-50%);
+}
+
+html[dir="ltr"] #toolbarViewerLeft,
+html[dir="rtl"] #toolbarViewerRight,
+html[dir="ltr"] #toolbarSidebarLeft,
+html[dir="rtl"] #toolbarSidebarRight {
+ float: left;
+}
+html[dir="ltr"] #toolbarViewerRight,
+html[dir="rtl"] #toolbarViewerLeft,
+html[dir="ltr"] #toolbarSidebarRight,
+html[dir="rtl"] #toolbarSidebarLeft {
+ float: right;
+}
+html[dir="ltr"] #toolbarViewerLeft > *,
+html[dir="ltr"] #toolbarViewerMiddle > *,
+html[dir="ltr"] #toolbarViewerRight > *,
+html[dir="ltr"] #toolbarSidebarLeft *,
+html[dir="ltr"] #toolbarSidebarRight *,
+html[dir="ltr"] .findbar * {
+ position: relative;
+ float: left;
+}
+html[dir="rtl"] #toolbarViewerLeft > *,
+html[dir="rtl"] #toolbarViewerMiddle > *,
+html[dir="rtl"] #toolbarViewerRight > *,
+html[dir="rtl"] #toolbarSidebarLeft *,
+html[dir="rtl"] #toolbarSidebarRight *,
+html[dir="rtl"] .findbar * {
+ position: relative;
+ float: right;
+}
+
+.splitToolbarButton {
+ margin: 2px 2px 0;
+ display: inline-block;
+}
+html[dir="ltr"] .splitToolbarButton > .toolbarButton {
+ float: left;
+}
+html[dir="rtl"] .splitToolbarButton > .toolbarButton {
+ float: right;
+}
+
+.toolbarButton,
+.secondaryToolbarButton,
+.overlayButton {
+ border: 0 none;
+ background: none;
+ width: 28px;
+ height: 28px;
+}
+.overlayButton {
+ background-color: rgba(12, 12, 13, 0.1);
+ background-color: var(--overlay-button-bg-color);
+}
+@media (prefers-color-scheme: dark) {
+
+ .overlayButton {
+ background-color: rgba(92, 92, 97, 1);
+ background-color: var(--overlay-button-bg-color);
+ }
+}
+
+.overlayButton:hover {
+ background-color: rgba(12, 12, 13, 0.3);
+ background-color: var(--overlay-button-hover-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .overlayButton:hover {
+ background-color: rgba(115, 115, 115, 1);
+ background-color: var(--overlay-button-hover-color);
+ }
+}
+
+.overlayButton:focus {
+ background-color: rgba(12, 12, 13, 0.3);
+ background-color: var(--overlay-button-hover-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .overlayButton:focus {
+ background-color: rgba(115, 115, 115, 1);
+ background-color: var(--overlay-button-hover-color);
+ }
+}
+
+.toolbarButton > span {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+}
+
+.toolbarButton[disabled],
+.secondaryToolbarButton[disabled],
+.overlayButton[disabled] {
+ opacity: 0.5;
+}
+
+.splitToolbarButton.toggled .toolbarButton {
+ margin: 0;
+}
+
+.splitToolbarButton > .toolbarButton:hover {
+ background-color: rgba(221, 222, 223, 1);
+ background-color: var(--button-hover-color);
+ z-index: 199;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .splitToolbarButton > .toolbarButton:hover {
+ background-color: rgba(102, 102, 103, 1);
+ background-color: var(--button-hover-color);
+ }
+}
+
+.splitToolbarButton > .toolbarButton:focus {
+ background-color: rgba(221, 222, 223, 1);
+ background-color: var(--button-hover-color);
+ z-index: 199;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .splitToolbarButton > .toolbarButton:focus {
+ background-color: rgba(102, 102, 103, 1);
+ background-color: var(--button-hover-color);
+ }
+}
+
+.dropdownToolbarButton:hover {
+ background-color: rgba(221, 222, 223, 1);
+ background-color: var(--button-hover-color);
+ z-index: 199;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .dropdownToolbarButton:hover {
+ background-color: rgba(102, 102, 103, 1);
+ background-color: var(--button-hover-color);
+ }
+}
+
+.toolbarButton.textButton:hover {
+ background-color: rgba(221, 222, 223, 1);
+ background-color: var(--button-hover-color);
+ z-index: 199;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .toolbarButton.textButton:hover {
+ background-color: rgba(102, 102, 103, 1);
+ background-color: var(--button-hover-color);
+ }
+}
+
+.toolbarButton.textButton:focus {
+ background-color: rgba(221, 222, 223, 1);
+ background-color: var(--button-hover-color);
+ z-index: 199;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .toolbarButton.textButton:focus {
+ background-color: rgba(102, 102, 103, 1);
+ background-color: var(--button-hover-color);
+ }
+}
+.splitToolbarButton > .toolbarButton {
+ position: relative;
+}
+html[dir="ltr"] .splitToolbarButton > .toolbarButton:first-child,
+html[dir="rtl"] .splitToolbarButton > .toolbarButton:last-child {
+ margin: 0;
+}
+html[dir="ltr"] .splitToolbarButton > .toolbarButton:last-child,
+html[dir="rtl"] .splitToolbarButton > .toolbarButton:first-child {
+ margin: 0;
+}
+.splitToolbarButtonSeparator {
+ padding: 10px 0;
+ width: 1px;
+ background-color: rgba(0, 0, 0, 0.3);
+ background-color: var(--separator-color);
+ z-index: 99;
+ display: inline-block;
+ margin: 4px 0;
+}
+@media (prefers-color-scheme: dark) {
+
+ .splitToolbarButtonSeparator {
+ background-color: rgba(0, 0, 0, 0.3);
+ background-color: var(--separator-color);
+ }
+}
+
+.findbar .splitToolbarButtonSeparator {
+ background-color: rgba(187, 187, 188, 1);
+ background-color: var(--field-border-color);
+ margin: 0;
+ padding: 13px 0;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .findbar .splitToolbarButtonSeparator {
+ background-color: rgba(115, 115, 115, 1);
+ background-color: var(--field-border-color);
+ }
+}
+
+html[dir="ltr"] .splitToolbarButtonSeparator {
+ float: left;
+}
+html[dir="rtl"] .splitToolbarButtonSeparator {
+ float: right;
+}
+
+.toolbarButton {
+ min-width: 16px;
+ margin: 2px 1px;
+ padding: 2px 6px 0;
+ border: none;
+ border-radius: 2px;
+ color: rgba(12, 12, 13, 1);
+ color: var(--main-color);
+ font-size: 12px;
+ line-height: 14px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ cursor: default;
+ box-sizing: border-box;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .toolbarButton {
+ color: rgba(249, 249, 250, 1);
+ color: var(--main-color);
+ }
+}
+
+.dropdownToolbarButton {
+ min-width: 16px;
+ margin: 2px 1px;
+ padding: 2px 6px 0;
+ border: none;
+ border-radius: 2px;
+ color: rgba(12, 12, 13, 1);
+ color: var(--main-color);
+ font-size: 12px;
+ line-height: 14px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ cursor: default;
+ box-sizing: border-box;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .dropdownToolbarButton {
+ color: rgba(249, 249, 250, 1);
+ color: var(--main-color);
+ }
+}
+
+.secondaryToolbarButton {
+ min-width: 16px;
+ margin: 2px 1px;
+ padding: 2px 6px 0;
+ border: none;
+ border-radius: 2px;
+ color: rgba(12, 12, 13, 1);
+ color: var(--main-color);
+ font-size: 12px;
+ line-height: 14px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ cursor: default;
+ box-sizing: border-box;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .secondaryToolbarButton {
+ color: rgba(249, 249, 250, 1);
+ color: var(--main-color);
+ }
+}
+
+.overlayButton {
+ min-width: 16px;
+ margin: 2px 1px;
+ padding: 2px 6px 0;
+ border: none;
+ border-radius: 2px;
+ color: rgba(12, 12, 13, 1);
+ color: var(--main-color);
+ font-size: 12px;
+ line-height: 14px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ cursor: default;
+ box-sizing: border-box;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .overlayButton {
+ color: rgba(249, 249, 250, 1);
+ color: var(--main-color);
+ }
+}
+
+html[dir="ltr"] #toolbarViewerLeft > .toolbarButton:first-child,
+html[dir="rtl"] #toolbarViewerRight > .toolbarButton:last-child {
+ margin-left: 2px;
+}
+
+html[dir="ltr"] #toolbarViewerRight > .toolbarButton:last-child,
+html[dir="rtl"] #toolbarViewerLeft > .toolbarButton:first-child {
+ margin-right: 2px;
+}
+.toolbarButton:hover {
+ background-color: rgba(221, 222, 223, 1);
+ background-color: var(--button-hover-color);
+}
+@media (prefers-color-scheme: dark) {
+
+ .toolbarButton:hover {
+ background-color: rgba(102, 102, 103, 1);
+ background-color: var(--button-hover-color);
+ }
+}
+.toolbarButton:focus {
+ background-color: rgba(221, 222, 223, 1);
+ background-color: var(--button-hover-color);
+}
+@media (prefers-color-scheme: dark) {
+
+ .toolbarButton:focus {
+ background-color: rgba(102, 102, 103, 1);
+ background-color: var(--button-hover-color);
+ }
+}
+.secondaryToolbarButton:hover {
+ background-color: rgba(237, 237, 237, 1);
+ background-color: var(--doorhanger-hover-color);
+}
+@media (prefers-color-scheme: dark) {
+
+ .secondaryToolbarButton:hover {
+ background-color: rgba(93, 94, 98, 1);
+ background-color: var(--doorhanger-hover-color);
+ }
+}
+.secondaryToolbarButton:focus {
+ background-color: rgba(237, 237, 237, 1);
+ background-color: var(--doorhanger-hover-color);
+}
+@media (prefers-color-scheme: dark) {
+
+ .secondaryToolbarButton:focus {
+ background-color: rgba(93, 94, 98, 1);
+ background-color: var(--doorhanger-hover-color);
+ }
+}
+
+.toolbarButton.toggled {
+ background-color: rgba(0, 0, 0, 0.3);
+ background-color: var(--toggled-btn-bg-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .toolbarButton.toggled {
+ background-color: rgba(0, 0, 0, 0.3);
+ background-color: var(--toggled-btn-bg-color);
+ }
+}
+
+.splitToolbarButton.toggled > .toolbarButton.toggled {
+ background-color: rgba(0, 0, 0, 0.3);
+ background-color: var(--toggled-btn-bg-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .splitToolbarButton.toggled > .toolbarButton.toggled {
+ background-color: rgba(0, 0, 0, 0.3);
+ background-color: var(--toggled-btn-bg-color);
+ }
+}
+
+.secondaryToolbarButton.toggled {
+ background-color: rgba(0, 0, 0, 0.3);
+ background-color: var(--toggled-btn-bg-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .secondaryToolbarButton.toggled {
+ background-color: rgba(0, 0, 0, 0.3);
+ background-color: var(--toggled-btn-bg-color);
+ }
+}
+
+.toolbarButton.toggled:hover:active {
+ background-color: rgba(0, 0, 0, 0.4);
+ background-color: var(--toggled-hover-active-btn-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .toolbarButton.toggled:hover:active {
+ background-color: rgba(0, 0, 0, 0.4);
+ background-color: var(--toggled-hover-active-btn-color);
+ }
+}
+
+.splitToolbarButton.toggled > .toolbarButton.toggled:hover:active {
+ background-color: rgba(0, 0, 0, 0.4);
+ background-color: var(--toggled-hover-active-btn-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .splitToolbarButton.toggled > .toolbarButton.toggled:hover:active {
+ background-color: rgba(0, 0, 0, 0.4);
+ background-color: var(--toggled-hover-active-btn-color);
+ }
+}
+
+.secondaryToolbarButton.toggled:hover:active {
+ background-color: rgba(0, 0, 0, 0.4);
+ background-color: var(--toggled-hover-active-btn-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .secondaryToolbarButton.toggled:hover:active {
+ background-color: rgba(0, 0, 0, 0.4);
+ background-color: var(--toggled-hover-active-btn-color);
+ }
+}
+
+.dropdownToolbarButton {
+ width: 140px;
+ padding: 0;
+ overflow: hidden;
+ background-color: rgba(215, 215, 219, 1);
+ background-color: var(--dropdown-btn-bg-color);
+ margin-top: 2px !important;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .dropdownToolbarButton {
+ background-color: rgba(74, 74, 79, 1);
+ background-color: var(--dropdown-btn-bg-color);
+ }
+}
+.dropdownToolbarButton::after {
+ top: 6px;
+ pointer-events: none;
+
+ -webkit-mask-image: url(images/toolbarButton-menuArrow.svg);
+
+ -webkit-mask-image: var(--toolbarButton-menuArrow-icon);
+ mask-image: url(images/toolbarButton-menuArrow.svg);
+ mask-image: var(--toolbarButton-menuArrow-icon);
+}
+html[dir="ltr"] .dropdownToolbarButton::after {
+ right: 7px;
+}
+html[dir="rtl"] .dropdownToolbarButton::after {
+ left: 7px;
+}
+
+.dropdownToolbarButton > select {
+ width: 162px;
+ height: 28px;
+ font-size: 12px;
+ color: rgba(12, 12, 13, 1);
+ color: var(--main-color);
+ margin: 0;
+ padding: 1px 0 2px;
+ border: none;
+ background-color: rgba(215, 215, 219, 1);
+ background-color: var(--dropdown-btn-bg-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .dropdownToolbarButton > select {
+ background-color: rgba(74, 74, 79, 1);
+ background-color: var(--dropdown-btn-bg-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .dropdownToolbarButton > select {
+ color: rgba(249, 249, 250, 1);
+ color: var(--main-color);
+ }
+}
+html[dir="ltr"] .dropdownToolbarButton > select {
+ padding-left: 4px;
+}
+html[dir="rtl"] .dropdownToolbarButton > select {
+ padding-right: 4px;
+}
+.dropdownToolbarButton > select:hover {
+ background-color: rgba(221, 222, 223, 1);
+ background-color: var(--button-hover-color);
+}
+@media (prefers-color-scheme: dark) {
+
+ .dropdownToolbarButton > select:hover {
+ background-color: rgba(102, 102, 103, 1);
+ background-color: var(--button-hover-color);
+ }
+}
+
+.dropdownToolbarButton > select:focus {
+ background-color: rgba(221, 222, 223, 1);
+ background-color: var(--button-hover-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .dropdownToolbarButton > select:focus {
+ background-color: rgba(102, 102, 103, 1);
+ background-color: var(--button-hover-color);
+ }
+}
+
+.dropdownToolbarButton > select > option {
+ background: rgba(255, 255, 255, 1);
+ background: var(--doorhanger-bg-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .dropdownToolbarButton > select > option {
+ background: rgba(74, 74, 79, 1);
+ background: var(--doorhanger-bg-color);
+ }
+}
+
+#customScaleOption {
+ display: none;
+}
+
+#pageWidthOption {
+ border-bottom: 1px rgba(255, 255, 255, 0.5) solid;
+}
+
+.toolbarButtonSpacer {
+ width: 30px;
+ display: inline-block;
+ height: 1px;
+}
+
+.toolbarButton::before {
+ /* All matching images have a size of 16x16
+ * All relevant containers have a size of 28x28 */
+ position: absolute;
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+
+ content: "";
+ background-color: rgba(0, 0, 0, 1);
+ background-color: var(--toolbar-icon-bg-color);
+ -webkit-mask-size: cover;
+ mask-size: cover;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .toolbarButton::before {
+ background-color: rgba(255, 255, 255, 1);
+ background-color: var(--toolbar-icon-bg-color);
+ }
+}
+
+.secondaryToolbarButton::before {
+ /* All matching images have a size of 16x16
+ * All relevant containers have a size of 28x28 */
+ position: absolute;
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+
+ content: "";
+ background-color: rgba(0, 0, 0, 1);
+ background-color: var(--toolbar-icon-bg-color);
+ -webkit-mask-size: cover;
+ mask-size: cover;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .secondaryToolbarButton::before {
+ background-color: rgba(255, 255, 255, 1);
+ background-color: var(--toolbar-icon-bg-color);
+ }
+}
+
+.dropdownToolbarButton::after {
+ /* All matching images have a size of 16x16
+ * All relevant containers have a size of 28x28 */
+ position: absolute;
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+
+ content: "";
+ background-color: rgba(0, 0, 0, 1);
+ background-color: var(--toolbar-icon-bg-color);
+ -webkit-mask-size: cover;
+ mask-size: cover;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .dropdownToolbarButton::after {
+ background-color: rgba(255, 255, 255, 1);
+ background-color: var(--toolbar-icon-bg-color);
+ }
+}
+
+.treeItemToggler::before {
+ /* All matching images have a size of 16x16
+ * All relevant containers have a size of 28x28 */
+ position: absolute;
+ display: inline-block;
+ width: 16px;
+ height: 16px;
+
+ content: "";
+ background-color: rgba(0, 0, 0, 1);
+ background-color: var(--toolbar-icon-bg-color);
+ -webkit-mask-size: cover;
+ mask-size: cover;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .treeItemToggler::before {
+ background-color: rgba(255, 255, 255, 1);
+ background-color: var(--toolbar-icon-bg-color);
+ }
+}
+
+.toolbarButton::before {
+ opacity: 0.7;
+ opacity: var(--toolbar-icon-opacity);
+ top: 6px;
+ left: 6px;
+}
+
+.secondaryToolbarButton::before {
+ opacity: 0.9;
+ opacity: var(--doorhanger-icon-opacity);
+ top: 5px;
+}
+html[dir="ltr"] .secondaryToolbarButton::before {
+ left: 12px;
+}
+html[dir="rtl"] .secondaryToolbarButton::before {
+ right: 12px;
+}
+
+.toolbarButton#sidebarToggle::before {
+ -webkit-mask-image: url(images/toolbarButton-sidebarToggle.svg);
+ -webkit-mask-image: var(--toolbarButton-sidebarToggle-icon);
+ mask-image: url(images/toolbarButton-sidebarToggle.svg);
+ mask-image: var(--toolbarButton-sidebarToggle-icon);
+}
+html[dir="rtl"] .toolbarButton#sidebarToggle::before {
+ transform: scaleX(-1);
+}
+
+.toolbarButton#secondaryToolbarToggle::before {
+ -webkit-mask-image: url(images/toolbarButton-secondaryToolbarToggle.svg);
+ -webkit-mask-image: var(--toolbarButton-secondaryToolbarToggle-icon);
+ mask-image: url(images/toolbarButton-secondaryToolbarToggle.svg);
+ mask-image: var(--toolbarButton-secondaryToolbarToggle-icon);
+}
+html[dir="rtl"] .toolbarButton#secondaryToolbarToggle::before {
+ transform: scaleX(-1);
+}
+
+.toolbarButton.findPrevious::before {
+ -webkit-mask-image: url(images/findbarButton-previous.svg);
+ -webkit-mask-image: var(--findbarButton-previous-icon);
+ mask-image: url(images/findbarButton-previous.svg);
+ mask-image: var(--findbarButton-previous-icon);
+}
+
+.toolbarButton.findNext::before {
+ -webkit-mask-image: url(images/findbarButton-next.svg);
+ -webkit-mask-image: var(--findbarButton-next-icon);
+ mask-image: url(images/findbarButton-next.svg);
+ mask-image: var(--findbarButton-next-icon);
+}
+
+.toolbarButton.pageUp::before {
+ -webkit-mask-image: url(images/toolbarButton-pageUp.svg);
+ -webkit-mask-image: var(--toolbarButton-pageUp-icon);
+ mask-image: url(images/toolbarButton-pageUp.svg);
+ mask-image: var(--toolbarButton-pageUp-icon);
+}
+
+.toolbarButton.pageDown::before {
+ -webkit-mask-image: url(images/toolbarButton-pageDown.svg);
+ -webkit-mask-image: var(--toolbarButton-pageDown-icon);
+ mask-image: url(images/toolbarButton-pageDown.svg);
+ mask-image: var(--toolbarButton-pageDown-icon);
+}
+
+.toolbarButton.zoomOut::before {
+ -webkit-mask-image: url(images/toolbarButton-zoomOut.svg);
+ -webkit-mask-image: var(--toolbarButton-zoomOut-icon);
+ mask-image: url(images/toolbarButton-zoomOut.svg);
+ mask-image: var(--toolbarButton-zoomOut-icon);
+}
+
+.toolbarButton.zoomIn::before {
+ -webkit-mask-image: url(images/toolbarButton-zoomIn.svg);
+ -webkit-mask-image: var(--toolbarButton-zoomIn-icon);
+ mask-image: url(images/toolbarButton-zoomIn.svg);
+ mask-image: var(--toolbarButton-zoomIn-icon);
+}
+
+.toolbarButton.presentationMode::before {
+ -webkit-mask-image: url(images/toolbarButton-presentationMode.svg);
+ -webkit-mask-image: var(--toolbarButton-presentationMode-icon);
+ mask-image: url(images/toolbarButton-presentationMode.svg);
+ mask-image: var(--toolbarButton-presentationMode-icon);
+}
+
+.secondaryToolbarButton.presentationMode::before {
+ -webkit-mask-image: url(images/toolbarButton-presentationMode.svg);
+ -webkit-mask-image: var(--toolbarButton-presentationMode-icon);
+ mask-image: url(images/toolbarButton-presentationMode.svg);
+ mask-image: var(--toolbarButton-presentationMode-icon);
+}
+
+.toolbarButton.print::before {
+ -webkit-mask-image: url(images/toolbarButton-print.svg);
+ -webkit-mask-image: var(--toolbarButton-print-icon);
+ mask-image: url(images/toolbarButton-print.svg);
+ mask-image: var(--toolbarButton-print-icon);
+}
+
+.secondaryToolbarButton.print::before {
+ -webkit-mask-image: url(images/toolbarButton-print.svg);
+ -webkit-mask-image: var(--toolbarButton-print-icon);
+ mask-image: url(images/toolbarButton-print.svg);
+ mask-image: var(--toolbarButton-print-icon);
+}
+
+.toolbarButton.openFile::before {
+ -webkit-mask-image: url(images/toolbarButton-openFile.svg);
+ -webkit-mask-image: var(--toolbarButton-openFile-icon);
+ mask-image: url(images/toolbarButton-openFile.svg);
+ mask-image: var(--toolbarButton-openFile-icon);
+}
+
+.secondaryToolbarButton.openFile::before {
+ -webkit-mask-image: url(images/toolbarButton-openFile.svg);
+ -webkit-mask-image: var(--toolbarButton-openFile-icon);
+ mask-image: url(images/toolbarButton-openFile.svg);
+ mask-image: var(--toolbarButton-openFile-icon);
+}
+
+.toolbarButton.download::before {
+ -webkit-mask-image: url(images/toolbarButton-download.svg);
+ -webkit-mask-image: var(--toolbarButton-download-icon);
+ mask-image: url(images/toolbarButton-download.svg);
+ mask-image: var(--toolbarButton-download-icon);
+}
+
+.secondaryToolbarButton.download::before {
+ -webkit-mask-image: url(images/toolbarButton-download.svg);
+ -webkit-mask-image: var(--toolbarButton-download-icon);
+ mask-image: url(images/toolbarButton-download.svg);
+ mask-image: var(--toolbarButton-download-icon);
+}
+
+.secondaryToolbarButton.bookmark {
+ padding-top: 6px;
+ text-decoration: none;
+}
+
+.bookmark[href="#"] {
+ opacity: 0.5;
+ pointer-events: none;
+}
+
+.toolbarButton.bookmark::before {
+ -webkit-mask-image: url(images/toolbarButton-bookmark.svg);
+ -webkit-mask-image: var(--toolbarButton-bookmark-icon);
+ mask-image: url(images/toolbarButton-bookmark.svg);
+ mask-image: var(--toolbarButton-bookmark-icon);
+}
+
+.secondaryToolbarButton.bookmark::before {
+ -webkit-mask-image: url(images/toolbarButton-bookmark.svg);
+ -webkit-mask-image: var(--toolbarButton-bookmark-icon);
+ mask-image: url(images/toolbarButton-bookmark.svg);
+ mask-image: var(--toolbarButton-bookmark-icon);
+}
+
+#viewThumbnail.toolbarButton::before {
+ -webkit-mask-image: url(images/toolbarButton-viewThumbnail.svg);
+ -webkit-mask-image: var(--toolbarButton-viewThumbnail-icon);
+ mask-image: url(images/toolbarButton-viewThumbnail.svg);
+ mask-image: var(--toolbarButton-viewThumbnail-icon);
+}
+
+#viewOutline.toolbarButton::before {
+ -webkit-mask-image: url(images/toolbarButton-viewOutline.svg);
+ -webkit-mask-image: var(--toolbarButton-viewOutline-icon);
+ mask-image: url(images/toolbarButton-viewOutline.svg);
+ mask-image: var(--toolbarButton-viewOutline-icon);
+}
+html[dir="rtl"] #viewOutline.toolbarButton::before {
+ transform: scaleX(-1);
+}
+
+#viewAttachments.toolbarButton::before {
+ -webkit-mask-image: url(images/toolbarButton-viewAttachments.svg);
+ -webkit-mask-image: var(--toolbarButton-viewAttachments-icon);
+ mask-image: url(images/toolbarButton-viewAttachments.svg);
+ mask-image: var(--toolbarButton-viewAttachments-icon);
+}
+
+#viewLayers.toolbarButton::before {
+ -webkit-mask-image: url(images/toolbarButton-viewLayers.svg);
+ -webkit-mask-image: var(--toolbarButton-viewLayers-icon);
+ mask-image: url(images/toolbarButton-viewLayers.svg);
+ mask-image: var(--toolbarButton-viewLayers-icon);
+}
+
+#currentOutlineItem.toolbarButton::before {
+ -webkit-mask-image: url(images/toolbarButton-currentOutlineItem.svg);
+ -webkit-mask-image: var(--toolbarButton-currentOutlineItem-icon);
+ mask-image: url(images/toolbarButton-currentOutlineItem.svg);
+ mask-image: var(--toolbarButton-currentOutlineItem-icon);
+}
+html[dir="rtl"] #currentOutlineItem.toolbarButton::before {
+ transform: scaleX(-1);
+}
+
+#viewFind.toolbarButton::before {
+ -webkit-mask-image: url(images/toolbarButton-search.svg);
+ -webkit-mask-image: var(--toolbarButton-search-icon);
+ mask-image: url(images/toolbarButton-search.svg);
+ mask-image: var(--toolbarButton-search-icon);
+}
+
+.toolbarButton.pdfSidebarNotification::after {
+ position: absolute;
+ display: inline-block;
+ top: 1px;
+ /* Create a filled circle, with a diameter of 9 pixels, using only CSS: */
+ content: "";
+ background-color: rgba(112, 219, 85, 1);
+ height: 9px;
+ width: 9px;
+ border-radius: 50%;
+}
+html[dir="ltr"] .toolbarButton.pdfSidebarNotification::after {
+ left: 17px;
+}
+html[dir="rtl"] .toolbarButton.pdfSidebarNotification::after {
+ right: 17px;
+}
+
+.secondaryToolbarButton {
+ position: relative;
+ margin: 0;
+ padding: 0 0 1px;
+ height: auto;
+ min-height: 26px;
+ width: auto;
+ min-width: 100%;
+ white-space: normal;
+ border-radius: 0;
+ box-sizing: border-box;
+}
+html[dir="ltr"] .secondaryToolbarButton {
+ padding-left: 36px;
+ text-align: left;
+}
+html[dir="rtl"] .secondaryToolbarButton {
+ padding-right: 36px;
+ text-align: right;
+}
+
+html[dir="ltr"] .secondaryToolbarButton > span {
+ padding-right: 4px;
+}
+html[dir="rtl"] .secondaryToolbarButton > span {
+ padding-left: 4px;
+}
+
+.secondaryToolbarButton.firstPage::before {
+ -webkit-mask-image: url(images/secondaryToolbarButton-firstPage.svg);
+ -webkit-mask-image: var(--secondaryToolbarButton-firstPage-icon);
+ mask-image: url(images/secondaryToolbarButton-firstPage.svg);
+ mask-image: var(--secondaryToolbarButton-firstPage-icon);
+}
+
+.secondaryToolbarButton.lastPage::before {
+ -webkit-mask-image: url(images/secondaryToolbarButton-lastPage.svg);
+ -webkit-mask-image: var(--secondaryToolbarButton-lastPage-icon);
+ mask-image: url(images/secondaryToolbarButton-lastPage.svg);
+ mask-image: var(--secondaryToolbarButton-lastPage-icon);
+}
+
+.secondaryToolbarButton.rotateCcw::before {
+ -webkit-mask-image: url(images/secondaryToolbarButton-rotateCcw.svg);
+ -webkit-mask-image: var(--secondaryToolbarButton-rotateCcw-icon);
+ mask-image: url(images/secondaryToolbarButton-rotateCcw.svg);
+ mask-image: var(--secondaryToolbarButton-rotateCcw-icon);
+}
+
+.secondaryToolbarButton.rotateCw::before {
+ -webkit-mask-image: url(images/secondaryToolbarButton-rotateCw.svg);
+ -webkit-mask-image: var(--secondaryToolbarButton-rotateCw-icon);
+ mask-image: url(images/secondaryToolbarButton-rotateCw.svg);
+ mask-image: var(--secondaryToolbarButton-rotateCw-icon);
+}
+
+.secondaryToolbarButton.selectTool::before {
+ -webkit-mask-image: url(images/secondaryToolbarButton-selectTool.svg);
+ -webkit-mask-image: var(--secondaryToolbarButton-selectTool-icon);
+ mask-image: url(images/secondaryToolbarButton-selectTool.svg);
+ mask-image: var(--secondaryToolbarButton-selectTool-icon);
+}
+
+.secondaryToolbarButton.handTool::before {
+ -webkit-mask-image: url(images/secondaryToolbarButton-handTool.svg);
+ -webkit-mask-image: var(--secondaryToolbarButton-handTool-icon);
+ mask-image: url(images/secondaryToolbarButton-handTool.svg);
+ mask-image: var(--secondaryToolbarButton-handTool-icon);
+}
+
+.secondaryToolbarButton.scrollVertical::before {
+ -webkit-mask-image: url(images/secondaryToolbarButton-scrollVertical.svg);
+ -webkit-mask-image: var(--secondaryToolbarButton-scrollVertical-icon);
+ mask-image: url(images/secondaryToolbarButton-scrollVertical.svg);
+ mask-image: var(--secondaryToolbarButton-scrollVertical-icon);
+}
+
+.secondaryToolbarButton.scrollHorizontal::before {
+ -webkit-mask-image: url(images/secondaryToolbarButton-scrollHorizontal.svg);
+ -webkit-mask-image: var(--secondaryToolbarButton-scrollHorizontal-icon);
+ mask-image: url(images/secondaryToolbarButton-scrollHorizontal.svg);
+ mask-image: var(--secondaryToolbarButton-scrollHorizontal-icon);
+}
+
+.secondaryToolbarButton.scrollWrapped::before {
+ -webkit-mask-image: url(images/secondaryToolbarButton-scrollWrapped.svg);
+ -webkit-mask-image: var(--secondaryToolbarButton-scrollWrapped-icon);
+ mask-image: url(images/secondaryToolbarButton-scrollWrapped.svg);
+ mask-image: var(--secondaryToolbarButton-scrollWrapped-icon);
+}
+
+.secondaryToolbarButton.spreadNone::before {
+ -webkit-mask-image: url(images/secondaryToolbarButton-spreadNone.svg);
+ -webkit-mask-image: var(--secondaryToolbarButton-spreadNone-icon);
+ mask-image: url(images/secondaryToolbarButton-spreadNone.svg);
+ mask-image: var(--secondaryToolbarButton-spreadNone-icon);
+}
+
+.secondaryToolbarButton.spreadOdd::before {
+ -webkit-mask-image: url(images/secondaryToolbarButton-spreadOdd.svg);
+ -webkit-mask-image: var(--secondaryToolbarButton-spreadOdd-icon);
+ mask-image: url(images/secondaryToolbarButton-spreadOdd.svg);
+ mask-image: var(--secondaryToolbarButton-spreadOdd-icon);
+}
+
+.secondaryToolbarButton.spreadEven::before {
+ -webkit-mask-image: url(images/secondaryToolbarButton-spreadEven.svg);
+ -webkit-mask-image: var(--secondaryToolbarButton-spreadEven-icon);
+ mask-image: url(images/secondaryToolbarButton-spreadEven.svg);
+ mask-image: var(--secondaryToolbarButton-spreadEven-icon);
+}
+
+.secondaryToolbarButton.documentProperties::before {
+ -webkit-mask-image: url(images/secondaryToolbarButton-documentProperties.svg);
+ -webkit-mask-image: var(--secondaryToolbarButton-documentProperties-icon);
+ mask-image: url(images/secondaryToolbarButton-documentProperties.svg);
+ mask-image: var(--secondaryToolbarButton-documentProperties-icon);
+}
+
+.verticalToolbarSeparator {
+ display: block;
+ padding: 11px 0;
+ margin: 5px 2px;
+ width: 1px;
+ background-color: rgba(0, 0, 0, 0.3);
+ background-color: var(--separator-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .verticalToolbarSeparator {
+ background-color: rgba(0, 0, 0, 0.3);
+ background-color: var(--separator-color);
+ }
+}
+html[dir="ltr"] .verticalToolbarSeparator {
+ margin-left: 2px;
+}
+html[dir="rtl"] .verticalToolbarSeparator {
+ margin-right: 2px;
+}
+
+.horizontalToolbarSeparator {
+ display: block;
+ margin: 6px 0 5px;
+ height: 1px;
+ width: 100%;
+ border-top: 1px solid rgba(222, 222, 222, 1);
+ border-top: 1px solid var(--doorhanger-separator-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .horizontalToolbarSeparator {
+ border-top: 1px solid rgba(92, 92, 97, 1);
+ border-top: 1px solid var(--doorhanger-separator-color);
+ }
+}
+
+.toolbarField {
+ padding: 4px 7px;
+ margin: 3px 0;
+ border-radius: 2px;
+ background-color: rgba(255, 255, 255, 1);
+ background-color: var(--field-bg-color);
+ background-clip: padding-box;
+ border-width: 1px;
+ border-style: solid;
+ border-color: rgba(187, 187, 188, 1);
+ border-color: var(--field-border-color);
+ box-shadow: none;
+ color: rgba(6, 6, 6, 1);
+ color: var(--field-color);
+ font-size: 12px;
+ line-height: 16px;
+ outline-style: none;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .toolbarField {
+ color: rgba(250, 250, 250, 1);
+ color: var(--field-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .toolbarField {
+ border-color: rgba(115, 115, 115, 1);
+ border-color: var(--field-border-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .toolbarField {
+ background-color: rgba(64, 64, 68, 1);
+ background-color: var(--field-bg-color);
+ }
+}
+
+.toolbarField[type="checkbox"] {
+ opacity: 0;
+ position: absolute !important;
+ left: 0;
+}
+
+html[dir="ltr"] .toolbarField[type="checkbox"] {
+ margin: 10px 0 3px 7px;
+}
+
+html[dir="rtl"] .toolbarField[type="checkbox"] {
+ margin: 10px 7px 3px 0;
+}
+
+.toolbarField.pageNumber {
+ -moz-appearance: textfield; /* hides the spinner in moz */
+ min-width: 16px;
+ text-align: right;
+ width: 40px;
+}
+
+.toolbarField.pageNumber.visiblePageIsLoading {
+ background-image: url(images/loading.svg);
+ background-image: var(--loading-icon);
+ background-repeat: no-repeat;
+ background-position: 3px;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .toolbarField.pageNumber.visiblePageIsLoading {
+ background-image: url(images/loading-dark.svg);
+ background-image: var(--loading-icon);
+ }
+}
+
+.toolbarField.pageNumber::-webkit-inner-spin-button,
+.toolbarField.pageNumber::-webkit-outer-spin-button {
+ -webkit-appearance: none;
+ margin: 0;
+}
+
+.toolbarField:focus {
+ border-color: #0a84ff;
+}
+
+.toolbarLabel {
+ min-width: 16px;
+ padding: 6px;
+ margin: 2px;
+ border: 1px solid rgba(0, 0, 0, 0);
+ border-radius: 2px;
+ color: rgba(12, 12, 13, 1);
+ color: var(--main-color);
+ font-size: 12px;
+ line-height: 14px;
+ text-align: left;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ cursor: default;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .toolbarLabel {
+ color: rgba(249, 249, 250, 1);
+ color: var(--main-color);
+ }
+}
+
+html[dir="ltr"] #numPages.toolbarLabel {
+ padding-left: 2px;
+}
+html[dir="rtl"] #numPages.toolbarLabel {
+ padding-right: 2px;
+}
+
+#thumbnailView {
+ position: absolute;
+ width: calc(100% - 60px);
+ top: 0;
+ bottom: 0;
+ padding: 10px 30px 0;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+}
+
+#thumbnailView > a:active,
+#thumbnailView > a:focus {
+ outline: 0;
+}
+
+.thumbnail {
+ margin: 0 10px 5px;
+}
+html[dir="ltr"] .thumbnail {
+ float: left;
+}
+html[dir="rtl"] .thumbnail {
+ float: right;
+}
+
+#thumbnailView > a:last-of-type > .thumbnail {
+ margin-bottom: 10px;
+}
+
+#thumbnailView > a:last-of-type > .thumbnail:not([data-loaded]) {
+ margin-bottom: 9px;
+}
+
+.thumbnail:not([data-loaded]) {
+ border: 1px dashed rgba(132, 132, 132, 1);
+ margin: -1px 9px 4px;
+}
+
+.thumbnailImage {
+ border: 1px solid rgba(0, 0, 0, 0);
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5), 0 2px 8px rgba(0, 0, 0, 0.3);
+ opacity: 0.8;
+ z-index: 99;
+ background-color: rgba(255, 255, 255, 1);
+ background-clip: content-box;
+}
+
+.thumbnailSelectionRing {
+ border-radius: 2px;
+ padding: 7px;
+}
+
+a:focus > .thumbnail > .thumbnailSelectionRing > .thumbnailImage,
+.thumbnail:hover > .thumbnailSelectionRing > .thumbnailImage {
+ opacity: 0.9;
+}
+
+a:focus > .thumbnail > .thumbnailSelectionRing {
+ background-color: rgba(0, 0, 0, 0.15);
+ background-color: var(--sidebaritem-bg-color);
+ background-clip: padding-box;
+ color: rgba(255, 255, 255, 0.9);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ a:focus > .thumbnail > .thumbnailSelectionRing {
+ background-color: rgba(255, 255, 255, 0.15);
+ background-color: var(--sidebaritem-bg-color);
+ }
+}
+
+.thumbnail:hover > .thumbnailSelectionRing {
+ background-color: rgba(0, 0, 0, 0.15);
+ background-color: var(--sidebaritem-bg-color);
+ background-clip: padding-box;
+ color: rgba(255, 255, 255, 0.9);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .thumbnail:hover > .thumbnailSelectionRing {
+ background-color: rgba(255, 255, 255, 0.15);
+ background-color: var(--sidebaritem-bg-color);
+ }
+}
+
+.thumbnail.selected > .thumbnailSelectionRing > .thumbnailImage {
+ opacity: 1;
+}
+
+.thumbnail.selected > .thumbnailSelectionRing {
+ background-color: rgba(0, 0, 0, 0.15);
+ background-color: var(--sidebaritem-bg-color);
+ background-clip: padding-box;
+ color: rgba(255, 255, 255, 1);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .thumbnail.selected > .thumbnailSelectionRing {
+ background-color: rgba(255, 255, 255, 0.15);
+ background-color: var(--sidebaritem-bg-color);
+ }
+}
+
+#outlineView,
+#attachmentsView,
+#layersView {
+ position: absolute;
+ width: calc(100% - 8px);
+ top: 0;
+ bottom: 0;
+ padding: 4px 4px 0;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+html[dir="ltr"] .treeWithDeepNesting > .treeItem,
+html[dir="ltr"] .treeItem > .treeItems {
+ margin-left: 20px;
+}
+
+html[dir="rtl"] .treeWithDeepNesting > .treeItem,
+html[dir="rtl"] .treeItem > .treeItems {
+ margin-right: 20px;
+}
+
+.treeItem > a {
+ text-decoration: none;
+ display: inline-block;
+ min-width: 95%;
+ /* Subtract the right padding (left, in RTL mode) of the container: */
+ min-width: calc(100% - 4px);
+ height: auto;
+ margin-bottom: 1px;
+ border-radius: 2px;
+ color: rgba(0, 0, 0, 0.8);
+ color: var(--treeitem-color);
+ font-size: 13px;
+ line-height: 15px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ white-space: normal;
+ cursor: pointer;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .treeItem > a {
+ color: rgba(255, 255, 255, 0.8);
+ color: var(--treeitem-color);
+ }
+}
+html[dir="ltr"] .treeItem > a {
+ padding: 2px 0 5px 4px;
+}
+html[dir="rtl"] .treeItem > a {
+ padding: 2px 4px 5px 0;
+}
+
+#layersView .treeItem > a > * {
+ cursor: pointer;
+}
+html[dir="ltr"] #layersView .treeItem > a > label {
+ padding-left: 4px;
+}
+html[dir="rtl"] #layersView .treesItem > a > label {
+ padding-right: 4px;
+}
+
+.treeItemToggler {
+ position: relative;
+ height: 0;
+ width: 0;
+ color: rgba(255, 255, 255, 0.5);
+}
+.treeItemToggler::before {
+ -webkit-mask-image: url(images/treeitem-expanded.svg);
+ -webkit-mask-image: var(--treeitem-expanded-icon);
+ mask-image: url(images/treeitem-expanded.svg);
+ mask-image: var(--treeitem-expanded-icon);
+}
+.treeItemToggler.treeItemsHidden::before {
+ -webkit-mask-image: url(images/treeitem-collapsed.svg);
+ -webkit-mask-image: var(--treeitem-collapsed-icon);
+ mask-image: url(images/treeitem-collapsed.svg);
+ mask-image: var(--treeitem-collapsed-icon);
+}
+html[dir="rtl"] .treeItemToggler.treeItemsHidden::before {
+ transform: scaleX(-1);
+}
+.treeItemToggler.treeItemsHidden ~ .treeItems {
+ display: none;
+}
+html[dir="ltr"] .treeItemToggler {
+ float: left;
+}
+html[dir="rtl"] .treeItemToggler {
+ float: right;
+}
+html[dir="ltr"] .treeItemToggler::before {
+ right: 4px;
+}
+html[dir="rtl"] .treeItemToggler::before {
+ left: 4px;
+}
+
+.treeItem.selected > a {
+ background-color: rgba(0, 0, 0, 0.25);
+ background-color: var(--treeitem-selected-bg-color);
+ color: rgba(0, 0, 0, 0.9);
+ color: var(--treeitem-selected-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .treeItem.selected > a {
+ color: rgba(255, 255, 255, 0.9);
+ color: var(--treeitem-selected-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .treeItem.selected > a {
+ background-color: rgba(255, 255, 255, 0.25);
+ background-color: var(--treeitem-selected-bg-color);
+ }
+}
+
+.treeItemToggler:hover {
+ background-color: rgba(0, 0, 0, 0.15);
+ background-color: var(--sidebaritem-bg-color);
+ background-clip: padding-box;
+ border-radius: 2px;
+ color: rgba(0, 0, 0, 0.9);
+ color: var(--treeitem-hover-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .treeItemToggler:hover {
+ color: rgba(255, 255, 255, 0.9);
+ color: var(--treeitem-hover-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .treeItemToggler:hover {
+ background-color: rgba(255, 255, 255, 0.15);
+ background-color: var(--sidebaritem-bg-color);
+ }
+}
+
+.treeItemToggler:hover + a {
+ background-color: rgba(0, 0, 0, 0.15);
+ background-color: var(--sidebaritem-bg-color);
+ background-clip: padding-box;
+ border-radius: 2px;
+ color: rgba(0, 0, 0, 0.9);
+ color: var(--treeitem-hover-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .treeItemToggler:hover + a {
+ color: rgba(255, 255, 255, 0.9);
+ color: var(--treeitem-hover-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .treeItemToggler:hover + a {
+ background-color: rgba(255, 255, 255, 0.15);
+ background-color: var(--sidebaritem-bg-color);
+ }
+}
+
+.treeItemToggler:hover ~ .treeItems {
+ background-color: rgba(0, 0, 0, 0.15);
+ background-color: var(--sidebaritem-bg-color);
+ background-clip: padding-box;
+ border-radius: 2px;
+ color: rgba(0, 0, 0, 0.9);
+ color: var(--treeitem-hover-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .treeItemToggler:hover ~ .treeItems {
+ color: rgba(255, 255, 255, 0.9);
+ color: var(--treeitem-hover-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .treeItemToggler:hover ~ .treeItems {
+ background-color: rgba(255, 255, 255, 0.15);
+ background-color: var(--sidebaritem-bg-color);
+ }
+}
+
+.treeItem > a:hover {
+ background-color: rgba(0, 0, 0, 0.15);
+ background-color: var(--sidebaritem-bg-color);
+ background-clip: padding-box;
+ border-radius: 2px;
+ color: rgba(0, 0, 0, 0.9);
+ color: var(--treeitem-hover-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .treeItem > a:hover {
+ color: rgba(255, 255, 255, 0.9);
+ color: var(--treeitem-hover-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .treeItem > a:hover {
+ background-color: rgba(255, 255, 255, 0.15);
+ background-color: var(--sidebaritem-bg-color);
+ }
+}
+
+/* TODO: file FF bug to support ::-moz-selection:window-inactive
+ so we can override the opaque grey background when the window is inactive;
+ see https://bugzilla.mozilla.org/show_bug.cgi?id=706209 */
+::-moz-selection {
+ background: rgba(0, 0, 255, 0.3);
+}
+::selection {
+ background: rgba(0, 0, 255, 0.3);
+}
+
+#errorWrapper {
+ background: none repeat scroll 0 0 rgba(255, 74, 74, 1);
+ background: none repeat scroll 0 0 var(--errorWrapper-bg-color);
+ color: rgba(12, 12, 13, 1);
+ color: var(--main-color);
+ left: 0;
+ position: absolute;
+ right: 0;
+ z-index: 1000;
+ padding: 3px 6px;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #errorWrapper {
+ color: rgba(249, 249, 250, 1);
+ color: var(--main-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #errorWrapper {
+ background: none repeat scroll 0 0 rgba(199, 17, 17, 1);
+ background: none repeat scroll 0 0 var(--errorWrapper-bg-color);
+ }
+}
+
+#errorMessageLeft {
+ float: left;
+}
+
+#errorMessageRight {
+ float: right;
+}
+
+#errorMoreInfo {
+ background-color: rgba(255, 255, 255, 1);
+ background-color: var(--field-bg-color);
+ color: rgba(6, 6, 6, 1);
+ color: var(--field-color);
+ border: 1px solid rgba(187, 187, 188, 1);
+ border: 1px solid var(--field-border-color);
+ padding: 3px;
+ margin: 3px;
+ width: 98%;
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #errorMoreInfo {
+ border: 1px solid rgba(115, 115, 115, 1);
+ border: 1px solid var(--field-border-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #errorMoreInfo {
+ color: rgba(250, 250, 250, 1);
+ color: var(--field-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #errorMoreInfo {
+ background-color: rgba(64, 64, 68, 1);
+ background-color: var(--field-bg-color);
+ }
+}
+
+.overlayButton {
+ width: auto;
+ margin: 3px 4px 2px !important;
+ padding: 2px 11px;
+}
+
+#overlayContainer {
+ display: table;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background-color: rgba(0, 0, 0, 0.2);
+ z-index: 40000;
+}
+#overlayContainer > * {
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+}
+
+#overlayContainer > .container {
+ display: table-cell;
+ vertical-align: middle;
+ text-align: center;
+}
+
+#overlayContainer > .container > .dialog {
+ display: inline-block;
+ padding: 15px;
+ border-spacing: 4px;
+ color: rgba(12, 12, 13, 1);
+ color: var(--main-color);
+ font-size: 12px;
+ line-height: 14px;
+ background-color: rgba(255, 255, 255, 1);
+ background-color: var(--doorhanger-bg-color);
+ border: 1px solid rgba(0, 0, 0, 0.5);
+ border-radius: 4px;
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #overlayContainer > .container > .dialog {
+ background-color: rgba(74, 74, 79, 1);
+ background-color: var(--doorhanger-bg-color);
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+
+ #overlayContainer > .container > .dialog {
+ color: rgba(249, 249, 250, 1);
+ color: var(--main-color);
+ }
+}
+
+.dialog > .row {
+ display: table-row;
+}
+
+.dialog > .row > * {
+ display: table-cell;
+}
+
+.dialog .toolbarField {
+ margin: 5px 0;
+}
+
+.dialog .separator {
+ display: block;
+ margin: 4px 0;
+ height: 1px;
+ width: 100%;
+ background-color: rgba(0, 0, 0, 0.3);
+ background-color: var(--separator-color);
+}
+
+@media (prefers-color-scheme: dark) {
+
+ .dialog .separator {
+ background-color: rgba(0, 0, 0, 0.3);
+ background-color: var(--separator-color);
+ }
+}
+
+.dialog .buttonRow {
+ text-align: center;
+ vertical-align: middle;
+}
+
+.dialog :link {
+ color: rgba(255, 255, 255, 1);
+}
+
+#passwordOverlay > .dialog {
+ text-align: center;
+}
+#passwordOverlay .toolbarField {
+ width: 200px;
+}
+
+#documentPropertiesOverlay > .dialog {
+ text-align: left;
+}
+#documentPropertiesOverlay .row > * {
+ min-width: 100px;
+}
+html[dir="ltr"] #documentPropertiesOverlay .row > * {
+ text-align: left;
+}
+html[dir="rtl"] #documentPropertiesOverlay .row > * {
+ text-align: right;
+}
+#documentPropertiesOverlay .row > span {
+ width: 125px;
+ word-wrap: break-word;
+}
+#documentPropertiesOverlay .row > p {
+ max-width: 225px;
+ word-wrap: break-word;
+}
+#documentPropertiesOverlay .buttonRow {
+ margin-top: 10px;
+}
+
+.clearBoth {
+ clear: both;
+}
+
+.fileInput {
+ background: rgba(255, 255, 255, 1);
+ color: rgba(0, 0, 0, 1);
+ margin-top: 5px;
+ visibility: hidden;
+ position: fixed;
+ right: 0;
+ top: 0;
+}
+
+#PDFBug {
+ background: none repeat scroll 0 0 rgba(255, 255, 255, 1);
+ border: 1px solid rgba(102, 102, 102, 1);
+ position: fixed;
+ top: 32px;
+ right: 0;
+ bottom: 0;
+ font-size: 10px;
+ padding: 0;
+ width: 300px;
+}
+#PDFBug .controls {
+ background: rgba(238, 238, 238, 1);
+ border-bottom: 1px solid rgba(102, 102, 102, 1);
+ padding: 3px;
+}
+#PDFBug .panels {
+ bottom: 0;
+ left: 0;
+ overflow: auto;
+ -webkit-overflow-scrolling: touch;
+ position: absolute;
+ right: 0;
+ top: 27px;
+}
+#PDFBug .panels > div {
+ padding: 5px;
+}
+#PDFBug button.active {
+ font-weight: bold;
+}
+.debuggerShowText {
+ background: none repeat scroll 0 0 rgba(255, 255, 0, 1);
+ color: rgba(0, 0, 255, 1);
+}
+.debuggerHideText:hover {
+ background: none repeat scroll 0 0 rgba(255, 255, 0, 1);
+}
+#PDFBug .stats {
+ font-family: courier;
+ font-size: 10px;
+ white-space: pre;
+}
+#PDFBug .stats .title {
+ font-weight: bold;
+}
+#PDFBug table {
+ font-size: 10px;
+}
+
+#viewer.textLayer-visible .textLayer {
+ opacity: 1;
+}
+
+#viewer.textLayer-visible .canvasWrapper {
+ background-color: rgba(128, 255, 128, 1);
+}
+
+#viewer.textLayer-visible .canvasWrapper canvas {
+ mix-blend-mode: screen;
+}
+
+#viewer.textLayer-visible .textLayer > span {
+ background-color: rgba(255, 255, 0, 0.1);
+ color: rgba(0, 0, 0, 1);
+ border: solid 1px rgba(255, 0, 0, 0.5);
+ box-sizing: border-box;
+}
+
+#viewer.textLayer-hover .textLayer > span:hover {
+ background-color: rgba(255, 255, 255, 1);
+ color: rgba(0, 0, 0, 1);
+}
+
+#viewer.textLayer-shadow .textLayer > span {
+ background-color: rgba(255, 255, 255, 0.6);
+ color: rgba(0, 0, 0, 1);
+}
+
+.grab-to-pan-grab {
+ cursor: url("images/grab.cur"), move !important;
+ cursor: -webkit-grab !important;
+ cursor: grab !important;
+}
+.grab-to-pan-grab
+ *:not(input):not(textarea):not(button):not(select):not(:link) {
+ cursor: inherit !important;
+}
+.grab-to-pan-grab:active,
+.grab-to-pan-grabbing {
+ cursor: url("images/grabbing.cur"), move !important;
+ cursor: -webkit-grabbing !important;
+ cursor: grabbing !important;
+ position: fixed;
+ background: rgba(0, 0, 0, 0);
+ display: block;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ overflow: hidden;
+ z-index: 50000; /* should be higher than anything else in PDF.js! */
+}
+
+@page {
+ margin: 0;
+}
+
+#printContainer {
+ display: none;
+}
+
+@media print {
+ /* General rules for printing. */
+ body {
+ background: rgba(0, 0, 0, 0) none;
+ }
+
+ /* Rules for browsers that don't support mozPrintCallback. */
+ #sidebarContainer,
+ #secondaryToolbar,
+ .toolbar,
+ #loadingBox,
+ #errorWrapper,
+ .textLayer {
+ display: none;
+ }
+ #viewerContainer {
+ overflow: visible;
+ }
+
+ #mainContainer,
+ #viewerContainer,
+ .page,
+ .page canvas {
+ position: static;
+ padding: 0;
+ margin: 0;
+ }
+
+ .page {
+ float: left;
+ display: none;
+ border: none;
+ box-shadow: none;
+ background-clip: content-box;
+ background-color: rgba(255, 255, 255, 1);
+ }
+
+ .page[data-loaded] {
+ display: block;
+ }
+
+ .fileInput {
+ display: none;
+ }
+
+ /* Rules for browsers that support PDF.js printing */
+ body[data-pdfjsprinting] #outerContainer {
+ display: none;
+ }
+ body[data-pdfjsprinting] #printContainer {
+ display: block;
+ }
+ #printContainer {
+ height: 100%;
+ }
+ /* wrapper around (scaled) print canvas elements */
+ #printContainer > div {
+ position: relative;
+ top: 0;
+ left: 0;
+ width: 1px;
+ height: 1px;
+ overflow: visible;
+ page-break-after: always;
+ page-break-inside: avoid;
+ }
+ #printContainer canvas,
+ #printContainer img {
+ direction: ltr;
+ display: block;
+ }
+}
+
+.visibleLargeView,
+.visibleMediumView,
+.visibleSmallView {
+ display: none;
+}
+
+@media all and (max-width: 900px) {
+ #toolbarViewerMiddle {
+ display: table;
+ margin: auto;
+ left: auto;
+ position: inherit;
+ transform: none;
+ }
+}
+
+@media all and (max-width: 840px) {
+ #sidebarContent {
+ background-color: rgba(0, 0, 0, 0.7);
+ }
+
+ html[dir="ltr"] #outerContainer.sidebarOpen #viewerContainer {
+ left: 0 !important;
+ }
+ html[dir="rtl"] #outerContainer.sidebarOpen #viewerContainer {
+ right: 0 !important;
+ }
+
+ #outerContainer .hiddenLargeView,
+ #outerContainer .hiddenMediumView {
+ display: inherit;
+ }
+ #outerContainer .visibleLargeView,
+ #outerContainer .visibleMediumView {
+ display: none;
+ }
+}
+
+@media all and (max-width: 770px) {
+ #outerContainer .hiddenLargeView {
+ display: none;
+ }
+ #outerContainer .visibleLargeView {
+ display: inherit;
+ }
+}
+
+@media all and (max-width: 700px) {
+ #outerContainer .hiddenMediumView {
+ display: none;
+ }
+ #outerContainer .visibleMediumView {
+ display: inherit;
+ }
+}
+
+@media all and (max-width: 640px) {
+ .hiddenSmallView,
+ .hiddenSmallView * {
+ display: none;
+ }
+ .visibleSmallView {
+ display: inherit;
+ }
+ .toolbarButtonSpacer {
+ width: 0;
+ }
+ html[dir="ltr"] .findbar {
+ left: 34px;
+ }
+ html[dir="rtl"] .findbar {
+ right: 34px;
+ }
+}
+
+@media all and (max-width: 535px) {
+ #scaleSelectContainer {
+ display: none;
+ }
+}
diff --git a/thirdparty/pdfjs/web/viewer.html b/thirdparty/pdfjs/web/viewer.html
new file mode 100644
index 0000000..f661cb9
--- /dev/null
+++ b/thirdparty/pdfjs/web/viewer.html
@@ -0,0 +1,411 @@
+
+
+
+
+
+
+
+
+ PDF.js viewer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Enter the password to open this PDF file:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Preparing document for printing…
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/thirdparty/pdfjs/web/viewer.js b/thirdparty/pdfjs/web/viewer.js
new file mode 100644
index 0000000..d093d77
--- /dev/null
+++ b/thirdparty/pdfjs/web/viewer.js
@@ -0,0 +1,14899 @@
+/**
+ * @licstart The following is the entire license notice for the
+ * Javascript code in this page
+ *
+ * Copyright 2020 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @licend The above is the entire license notice for the
+ * Javascript code in this page
+ */
+
+/******/ (() => { // webpackBootstrap
+/******/ "use strict";
+/******/ var __webpack_modules__ = ([
+/* 0 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+Object.defineProperty(exports, "PDFViewerApplicationOptions", ({
+ enumerable: true,
+ get: function () {
+ return _app_options.AppOptions;
+ }
+}));
+Object.defineProperty(exports, "PDFViewerApplication", ({
+ enumerable: true,
+ get: function () {
+ return _app.PDFViewerApplication;
+ }
+}));
+
+var _app_options = __webpack_require__(1);
+
+var _app = __webpack_require__(3);
+
+const pdfjsVersion = '2.7.570';
+const pdfjsBuild = 'f2c7338b0';
+window.PDFViewerApplication = _app.PDFViewerApplication;
+window.PDFViewerApplicationOptions = _app_options.AppOptions;
+;
+;
+{
+ __webpack_require__(35);
+}
+;
+{
+ __webpack_require__(41);
+}
+
+function getViewerConfiguration() {
+ return {
+ appContainer: document.body,
+ mainContainer: document.getElementById("viewerContainer"),
+ viewerContainer: document.getElementById("viewer"),
+ eventBus: null,
+ toolbar: {
+ container: document.getElementById("toolbarViewer"),
+ numPages: document.getElementById("numPages"),
+ pageNumber: document.getElementById("pageNumber"),
+ scaleSelectContainer: document.getElementById("scaleSelectContainer"),
+ scaleSelect: document.getElementById("scaleSelect"),
+ customScaleOption: document.getElementById("customScaleOption"),
+ previous: document.getElementById("previous"),
+ next: document.getElementById("next"),
+ zoomIn: document.getElementById("zoomIn"),
+ zoomOut: document.getElementById("zoomOut"),
+ viewFind: document.getElementById("viewFind"),
+ openFile: document.getElementById("openFile"),
+ print: document.getElementById("print"),
+ presentationModeButton: document.getElementById("presentationMode"),
+ download: document.getElementById("download"),
+ viewBookmark: document.getElementById("viewBookmark")
+ },
+ secondaryToolbar: {
+ toolbar: document.getElementById("secondaryToolbar"),
+ toggleButton: document.getElementById("secondaryToolbarToggle"),
+ toolbarButtonContainer: document.getElementById("secondaryToolbarButtonContainer"),
+ presentationModeButton: document.getElementById("secondaryPresentationMode"),
+ openFileButton: document.getElementById("secondaryOpenFile"),
+ printButton: document.getElementById("secondaryPrint"),
+ downloadButton: document.getElementById("secondaryDownload"),
+ viewBookmarkButton: document.getElementById("secondaryViewBookmark"),
+ firstPageButton: document.getElementById("firstPage"),
+ lastPageButton: document.getElementById("lastPage"),
+ pageRotateCwButton: document.getElementById("pageRotateCw"),
+ pageRotateCcwButton: document.getElementById("pageRotateCcw"),
+ cursorSelectToolButton: document.getElementById("cursorSelectTool"),
+ cursorHandToolButton: document.getElementById("cursorHandTool"),
+ scrollVerticalButton: document.getElementById("scrollVertical"),
+ scrollHorizontalButton: document.getElementById("scrollHorizontal"),
+ scrollWrappedButton: document.getElementById("scrollWrapped"),
+ spreadNoneButton: document.getElementById("spreadNone"),
+ spreadOddButton: document.getElementById("spreadOdd"),
+ spreadEvenButton: document.getElementById("spreadEven"),
+ documentPropertiesButton: document.getElementById("documentProperties")
+ },
+ fullscreen: {
+ contextFirstPage: document.getElementById("contextFirstPage"),
+ contextLastPage: document.getElementById("contextLastPage"),
+ contextPageRotateCw: document.getElementById("contextPageRotateCw"),
+ contextPageRotateCcw: document.getElementById("contextPageRotateCcw")
+ },
+ sidebar: {
+ outerContainer: document.getElementById("outerContainer"),
+ viewerContainer: document.getElementById("viewerContainer"),
+ toggleButton: document.getElementById("sidebarToggle"),
+ thumbnailButton: document.getElementById("viewThumbnail"),
+ outlineButton: document.getElementById("viewOutline"),
+ attachmentsButton: document.getElementById("viewAttachments"),
+ layersButton: document.getElementById("viewLayers"),
+ thumbnailView: document.getElementById("thumbnailView"),
+ outlineView: document.getElementById("outlineView"),
+ attachmentsView: document.getElementById("attachmentsView"),
+ layersView: document.getElementById("layersView"),
+ outlineOptionsContainer: document.getElementById("outlineOptionsContainer"),
+ currentOutlineItemButton: document.getElementById("currentOutlineItem")
+ },
+ sidebarResizer: {
+ outerContainer: document.getElementById("outerContainer"),
+ resizer: document.getElementById("sidebarResizer")
+ },
+ findBar: {
+ bar: document.getElementById("findbar"),
+ toggleButton: document.getElementById("viewFind"),
+ findField: document.getElementById("findInput"),
+ highlightAllCheckbox: document.getElementById("findHighlightAll"),
+ caseSensitiveCheckbox: document.getElementById("findMatchCase"),
+ entireWordCheckbox: document.getElementById("findEntireWord"),
+ findMsg: document.getElementById("findMsg"),
+ findResultsCount: document.getElementById("findResultsCount"),
+ findPreviousButton: document.getElementById("findPrevious"),
+ findNextButton: document.getElementById("findNext")
+ },
+ passwordOverlay: {
+ overlayName: "passwordOverlay",
+ container: document.getElementById("passwordOverlay"),
+ label: document.getElementById("passwordText"),
+ input: document.getElementById("password"),
+ submitButton: document.getElementById("passwordSubmit"),
+ cancelButton: document.getElementById("passwordCancel")
+ },
+ documentProperties: {
+ overlayName: "documentPropertiesOverlay",
+ container: document.getElementById("documentPropertiesOverlay"),
+ closeButton: document.getElementById("documentPropertiesClose"),
+ fields: {
+ fileName: document.getElementById("fileNameField"),
+ fileSize: document.getElementById("fileSizeField"),
+ title: document.getElementById("titleField"),
+ author: document.getElementById("authorField"),
+ subject: document.getElementById("subjectField"),
+ keywords: document.getElementById("keywordsField"),
+ creationDate: document.getElementById("creationDateField"),
+ modificationDate: document.getElementById("modificationDateField"),
+ creator: document.getElementById("creatorField"),
+ producer: document.getElementById("producerField"),
+ version: document.getElementById("versionField"),
+ pageCount: document.getElementById("pageCountField"),
+ pageSize: document.getElementById("pageSizeField"),
+ linearized: document.getElementById("linearizedField")
+ }
+ },
+ errorWrapper: {
+ container: document.getElementById("errorWrapper"),
+ errorMessage: document.getElementById("errorMessage"),
+ closeButton: document.getElementById("errorClose"),
+ errorMoreInfo: document.getElementById("errorMoreInfo"),
+ moreInfoButton: document.getElementById("errorShowMore"),
+ lessInfoButton: document.getElementById("errorShowLess")
+ },
+ printContainer: document.getElementById("printContainer"),
+ openFileInputName: "fileInput",
+ debuggerScriptPath: "./debugger.js"
+ };
+}
+
+function webViewerLoad() {
+ const config = getViewerConfiguration();
+ const event = document.createEvent("CustomEvent");
+ event.initCustomEvent("webviewerloaded", true, true, {
+ source: window
+ });
+
+ try {
+ parent.document.dispatchEvent(event);
+ } catch (ex) {
+ console.error(`webviewerloaded: ${ex}`);
+ document.dispatchEvent(event);
+ }
+
+ _app.PDFViewerApplication.run(config);
+}
+
+if (document.readyState === "interactive" || document.readyState === "complete") {
+ webViewerLoad();
+} else {
+ document.addEventListener("DOMContentLoaded", webViewerLoad, true);
+}
+
+/***/ }),
+/* 1 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.OptionKind = exports.AppOptions = void 0;
+
+var _viewer_compatibility = __webpack_require__(2);
+
+const OptionKind = {
+ VIEWER: 0x02,
+ API: 0x04,
+ WORKER: 0x08,
+ PREFERENCE: 0x80
+};
+exports.OptionKind = OptionKind;
+const defaultOptions = {
+ cursorToolOnLoad: {
+ value: 0,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ defaultUrl: {
+ value: "compressed.tracemonkey-pldi-09.pdf",
+ kind: OptionKind.VIEWER
+ },
+ defaultZoomValue: {
+ value: "",
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ disableHistory: {
+ value: false,
+ kind: OptionKind.VIEWER
+ },
+ disablePageLabels: {
+ value: false,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ enablePermissions: {
+ value: false,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ enablePrintAutoRotate: {
+ value: false,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ enableScripting: {
+ value: false,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ enableWebGL: {
+ value: false,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ externalLinkRel: {
+ value: "noopener noreferrer nofollow",
+ kind: OptionKind.VIEWER
+ },
+ externalLinkTarget: {
+ value: 0,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ historyUpdateUrl: {
+ value: false,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ ignoreDestinationZoom: {
+ value: false,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ imageResourcesPath: {
+ value: "./images/",
+ kind: OptionKind.VIEWER
+ },
+ maxCanvasPixels: {
+ value: 16777216,
+ compatibility: _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels,
+ kind: OptionKind.VIEWER
+ },
+ pdfBugEnabled: {
+ value: false,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ printResolution: {
+ value: 150,
+ kind: OptionKind.VIEWER
+ },
+ renderer: {
+ value: "canvas",
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ renderInteractiveForms: {
+ value: true,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ sidebarViewOnLoad: {
+ value: -1,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ scrollModeOnLoad: {
+ value: -1,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ spreadModeOnLoad: {
+ value: -1,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ textLayerMode: {
+ value: 1,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ useOnlyCssZoom: {
+ value: false,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ viewerCssTheme: {
+ value: 0,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ viewOnLoad: {
+ value: 0,
+ kind: OptionKind.VIEWER + OptionKind.PREFERENCE
+ },
+ cMapPacked: {
+ value: true,
+ kind: OptionKind.API
+ },
+ cMapUrl: {
+ value: "../web/cmaps/",
+ kind: OptionKind.API
+ },
+ disableAutoFetch: {
+ value: false,
+ kind: OptionKind.API + OptionKind.PREFERENCE
+ },
+ disableFontFace: {
+ value: false,
+ kind: OptionKind.API + OptionKind.PREFERENCE
+ },
+ disableRange: {
+ value: false,
+ kind: OptionKind.API + OptionKind.PREFERENCE
+ },
+ disableStream: {
+ value: false,
+ kind: OptionKind.API + OptionKind.PREFERENCE
+ },
+ docBaseUrl: {
+ value: "",
+ kind: OptionKind.API
+ },
+ fontExtraProperties: {
+ value: false,
+ kind: OptionKind.API
+ },
+ isEvalSupported: {
+ value: true,
+ kind: OptionKind.API
+ },
+ maxImageSize: {
+ value: -1,
+ kind: OptionKind.API
+ },
+ pdfBug: {
+ value: false,
+ kind: OptionKind.API
+ },
+ verbosity: {
+ value: 1,
+ kind: OptionKind.API
+ },
+ workerPort: {
+ value: null,
+ kind: OptionKind.WORKER
+ },
+ workerSrc: {
+ value: "../build/pdf.worker.js",
+ kind: OptionKind.WORKER
+ }
+};
+{
+ defaultOptions.disablePreferences = {
+ value: false,
+ kind: OptionKind.VIEWER
+ };
+ defaultOptions.locale = {
+ value: typeof navigator !== "undefined" ? navigator.language : "en-US",
+ kind: OptionKind.VIEWER
+ };
+ defaultOptions.sandboxBundleSrc = {
+ value: "../build/pdf.sandbox.js",
+ kind: OptionKind.VIEWER
+ };
+}
+const userOptions = Object.create(null);
+
+class AppOptions {
+ constructor() {
+ throw new Error("Cannot initialize AppOptions.");
+ }
+
+ static get(name) {
+ const userOption = userOptions[name];
+
+ if (userOption !== undefined) {
+ return userOption;
+ }
+
+ const defaultOption = defaultOptions[name];
+
+ if (defaultOption !== undefined) {
+ return defaultOption.compatibility || defaultOption.value;
+ }
+
+ return undefined;
+ }
+
+ static getAll(kind = null) {
+ const options = Object.create(null);
+
+ for (const name in defaultOptions) {
+ const defaultOption = defaultOptions[name];
+
+ if (kind) {
+ if ((kind & defaultOption.kind) === 0) {
+ continue;
+ }
+
+ if (kind === OptionKind.PREFERENCE) {
+ const value = defaultOption.value,
+ valueType = typeof value;
+
+ if (valueType === "boolean" || valueType === "string" || valueType === "number" && Number.isInteger(value)) {
+ options[name] = value;
+ continue;
+ }
+
+ throw new Error(`Invalid type for preference: ${name}`);
+ }
+ }
+
+ const userOption = userOptions[name];
+ options[name] = userOption !== undefined ? userOption : defaultOption.compatibility || defaultOption.value;
+ }
+
+ return options;
+ }
+
+ static set(name, value) {
+ userOptions[name] = value;
+ }
+
+ static setAll(options) {
+ for (const name in options) {
+ userOptions[name] = options[name];
+ }
+ }
+
+ static remove(name) {
+ delete userOptions[name];
+ }
+
+}
+
+exports.AppOptions = AppOptions;
+
+/***/ }),
+/* 2 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.viewerCompatibilityParams = void 0;
+const compatibilityParams = Object.create(null);
+{
+ const userAgent = typeof navigator !== "undefined" && navigator.userAgent || "";
+ const platform = typeof navigator !== "undefined" && navigator.platform || "";
+ const maxTouchPoints = typeof navigator !== "undefined" && navigator.maxTouchPoints || 1;
+ const isAndroid = /Android/.test(userAgent);
+ const isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === "MacIntel" && maxTouchPoints > 1;
+ const isIOSChrome = /CriOS/.test(userAgent);
+
+ (function checkOnBlobSupport() {
+ if (isIOSChrome) {
+ compatibilityParams.disableCreateObjectURL = true;
+ }
+ })();
+
+ (function checkCanvasSizeLimitation() {
+ if (isIOS || isAndroid) {
+ compatibilityParams.maxCanvasPixels = 5242880;
+ }
+ })();
+}
+const viewerCompatibilityParams = Object.freeze(compatibilityParams);
+exports.viewerCompatibilityParams = viewerCompatibilityParams;
+
+/***/ }),
+/* 3 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFViewerApplication = exports.PDFPrintServiceFactory = exports.DefaultExternalServices = void 0;
+
+var _ui_utils = __webpack_require__(4);
+
+var _app_options = __webpack_require__(1);
+
+var _pdfjsLib = __webpack_require__(5);
+
+var _pdf_cursor_tools = __webpack_require__(6);
+
+var _pdf_rendering_queue = __webpack_require__(8);
+
+var _overlay_manager = __webpack_require__(9);
+
+var _password_prompt = __webpack_require__(10);
+
+var _pdf_attachment_viewer = __webpack_require__(11);
+
+var _pdf_document_properties = __webpack_require__(13);
+
+var _pdf_find_bar = __webpack_require__(14);
+
+var _pdf_find_controller = __webpack_require__(15);
+
+var _pdf_history = __webpack_require__(17);
+
+var _pdf_layer_viewer = __webpack_require__(18);
+
+var _pdf_link_service = __webpack_require__(19);
+
+var _pdf_outline_viewer = __webpack_require__(20);
+
+var _pdf_presentation_mode = __webpack_require__(21);
+
+var _pdf_sidebar = __webpack_require__(22);
+
+var _pdf_sidebar_resizer = __webpack_require__(23);
+
+var _pdf_thumbnail_viewer = __webpack_require__(24);
+
+var _pdf_viewer = __webpack_require__(26);
+
+var _secondary_toolbar = __webpack_require__(31);
+
+var _toolbar = __webpack_require__(33);
+
+var _viewer_compatibility = __webpack_require__(2);
+
+var _view_history = __webpack_require__(34);
+
+const DEFAULT_SCALE_DELTA = 1.1;
+const DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000;
+const FORCE_PAGES_LOADED_TIMEOUT = 10000;
+const WHEEL_ZOOM_DISABLED_TIMEOUT = 1000;
+const ENABLE_PERMISSIONS_CLASS = "enablePermissions";
+const ViewOnLoad = {
+ UNKNOWN: -1,
+ PREVIOUS: 0,
+ INITIAL: 1
+};
+const ViewerCssTheme = {
+ AUTOMATIC: 0,
+ LIGHT: 1,
+ DARK: 2
+};
+const KNOWN_VERSIONS = ["1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "2.0", "2.1", "2.2", "2.3"];
+const KNOWN_GENERATORS = ["acrobat distiller", "acrobat pdfwriter", "adobe livecycle", "adobe pdf library", "adobe photoshop", "ghostscript", "tcpdf", "cairo", "dvipdfm", "dvips", "pdftex", "pdfkit", "itext", "prince", "quarkxpress", "mac os x", "microsoft", "openoffice", "oracle", "luradocument", "pdf-xchange", "antenna house", "aspose.cells", "fpdf"];
+
+class DefaultExternalServices {
+ constructor() {
+ throw new Error("Cannot initialize DefaultExternalServices.");
+ }
+
+ static updateFindControlState(data) {}
+
+ static updateFindMatchesCount(data) {}
+
+ static initPassiveLoading(callbacks) {}
+
+ static async fallback(data) {}
+
+ static reportTelemetry(data) {}
+
+ static createDownloadManager(options) {
+ throw new Error("Not implemented: createDownloadManager");
+ }
+
+ static createPreferences() {
+ throw new Error("Not implemented: createPreferences");
+ }
+
+ static createL10n(options) {
+ throw new Error("Not implemented: createL10n");
+ }
+
+ static createScripting(options) {
+ throw new Error("Not implemented: createScripting");
+ }
+
+ static get supportsIntegratedFind() {
+ return (0, _pdfjsLib.shadow)(this, "supportsIntegratedFind", false);
+ }
+
+ static get supportsDocumentFonts() {
+ return (0, _pdfjsLib.shadow)(this, "supportsDocumentFonts", true);
+ }
+
+ static get supportedMouseWheelZoomModifierKeys() {
+ return (0, _pdfjsLib.shadow)(this, "supportedMouseWheelZoomModifierKeys", {
+ ctrlKey: true,
+ metaKey: true
+ });
+ }
+
+ static get isInAutomation() {
+ return (0, _pdfjsLib.shadow)(this, "isInAutomation", false);
+ }
+
+}
+
+exports.DefaultExternalServices = DefaultExternalServices;
+const PDFViewerApplication = {
+ initialBookmark: document.location.hash.substring(1),
+ _initializedCapability: (0, _pdfjsLib.createPromiseCapability)(),
+ fellback: false,
+ appConfig: null,
+ pdfDocument: null,
+ pdfLoadingTask: null,
+ printService: null,
+ pdfViewer: null,
+ pdfThumbnailViewer: null,
+ pdfRenderingQueue: null,
+ pdfPresentationMode: null,
+ pdfDocumentProperties: null,
+ pdfLinkService: null,
+ pdfHistory: null,
+ pdfSidebar: null,
+ pdfSidebarResizer: null,
+ pdfOutlineViewer: null,
+ pdfAttachmentViewer: null,
+ pdfLayerViewer: null,
+ pdfCursorTools: null,
+ store: null,
+ downloadManager: null,
+ overlayManager: null,
+ preferences: null,
+ toolbar: null,
+ secondaryToolbar: null,
+ eventBus: null,
+ l10n: null,
+ isInitialViewSet: false,
+ downloadComplete: false,
+ isViewerEmbedded: window.parent !== window,
+ url: "",
+ baseUrl: "",
+ externalServices: DefaultExternalServices,
+ _boundEvents: Object.create(null),
+ documentInfo: null,
+ metadata: null,
+ _contentDispositionFilename: null,
+ _contentLength: null,
+ triggerDelayedFallback: null,
+ _saveInProgress: false,
+ _wheelUnusedTicks: 0,
+ _idleCallbacks: new Set(),
+ _scriptingInstance: null,
+ _mouseState: Object.create(null),
+
+ async initialize(appConfig) {
+ this.preferences = this.externalServices.createPreferences();
+ this.appConfig = appConfig;
+ await this._readPreferences();
+ await this._parseHashParameters();
+
+ this._forceCssTheme();
+
+ await this._initializeL10n();
+
+ if (this.isViewerEmbedded && _app_options.AppOptions.get("externalLinkTarget") === _pdfjsLib.LinkTarget.NONE) {
+ _app_options.AppOptions.set("externalLinkTarget", _pdfjsLib.LinkTarget.TOP);
+ }
+
+ await this._initializeViewerComponents();
+ this.bindEvents();
+ this.bindWindowEvents();
+ const appContainer = appConfig.appContainer || document.documentElement;
+ this.l10n.translate(appContainer).then(() => {
+ this.eventBus.dispatch("localized", {
+ source: this
+ });
+ });
+
+ this._initializedCapability.resolve();
+ },
+
+ async _readPreferences() {
+ if (_app_options.AppOptions.get("disablePreferences")) {
+ return;
+ }
+
+ try {
+ _app_options.AppOptions.setAll(await this.preferences.getAll());
+ } catch (reason) {
+ console.error(`_readPreferences: "${reason?.message}".`);
+ }
+ },
+
+ async _parseHashParameters() {
+ if (!_app_options.AppOptions.get("pdfBugEnabled")) {
+ return undefined;
+ }
+
+ const hash = document.location.hash.substring(1);
+
+ if (!hash) {
+ return undefined;
+ }
+
+ const hashParams = (0, _ui_utils.parseQueryString)(hash),
+ waitOn = [];
+
+ if ("disableworker" in hashParams && hashParams.disableworker === "true") {
+ waitOn.push(loadFakeWorker());
+ }
+
+ if ("disablerange" in hashParams) {
+ _app_options.AppOptions.set("disableRange", hashParams.disablerange === "true");
+ }
+
+ if ("disablestream" in hashParams) {
+ _app_options.AppOptions.set("disableStream", hashParams.disablestream === "true");
+ }
+
+ if ("disableautofetch" in hashParams) {
+ _app_options.AppOptions.set("disableAutoFetch", hashParams.disableautofetch === "true");
+ }
+
+ if ("disablefontface" in hashParams) {
+ _app_options.AppOptions.set("disableFontFace", hashParams.disablefontface === "true");
+ }
+
+ if ("disablehistory" in hashParams) {
+ _app_options.AppOptions.set("disableHistory", hashParams.disablehistory === "true");
+ }
+
+ if ("webgl" in hashParams) {
+ _app_options.AppOptions.set("enableWebGL", hashParams.webgl === "true");
+ }
+
+ if ("verbosity" in hashParams) {
+ _app_options.AppOptions.set("verbosity", hashParams.verbosity | 0);
+ }
+
+ if ("textlayer" in hashParams) {
+ switch (hashParams.textlayer) {
+ case "off":
+ _app_options.AppOptions.set("textLayerMode", _ui_utils.TextLayerMode.DISABLE);
+
+ break;
+
+ case "visible":
+ case "shadow":
+ case "hover":
+ const viewer = this.appConfig.viewerContainer;
+ viewer.classList.add("textLayer-" + hashParams.textlayer);
+ break;
+ }
+ }
+
+ if ("pdfbug" in hashParams) {
+ _app_options.AppOptions.set("pdfBug", true);
+
+ _app_options.AppOptions.set("fontExtraProperties", true);
+
+ const enabled = hashParams.pdfbug.split(",");
+ waitOn.push(loadAndEnablePDFBug(enabled));
+ }
+
+ if ("locale" in hashParams) {
+ _app_options.AppOptions.set("locale", hashParams.locale);
+ }
+
+ if (waitOn.length === 0) {
+ return undefined;
+ }
+
+ return Promise.all(waitOn).catch(reason => {
+ console.error(`_parseHashParameters: "${reason.message}".`);
+ });
+ },
+
+ async _initializeL10n() {
+ this.l10n = this.externalServices.createL10n({
+ locale: _app_options.AppOptions.get("locale")
+ });
+ const dir = await this.l10n.getDirection();
+ document.getElementsByTagName("html")[0].dir = dir;
+ },
+
+ _forceCssTheme() {
+ const cssTheme = _app_options.AppOptions.get("viewerCssTheme");
+
+ if (cssTheme === ViewerCssTheme.AUTOMATIC || !Object.values(ViewerCssTheme).includes(cssTheme)) {
+ return;
+ }
+
+ try {
+ const styleSheet = document.styleSheets[0];
+ const cssRules = styleSheet?.cssRules || [];
+
+ for (let i = 0, ii = cssRules.length; i < ii; i++) {
+ const rule = cssRules[i];
+
+ if (rule instanceof CSSMediaRule && rule.media?.[0] === "(prefers-color-scheme: dark)") {
+ if (cssTheme === ViewerCssTheme.LIGHT) {
+ styleSheet.deleteRule(i);
+ return;
+ }
+
+ const darkRules = /^@media \(prefers-color-scheme: dark\) {\n\s*([\w\s-.,:;/\\{}()]+)\n}$/.exec(rule.cssText);
+
+ if (darkRules?.[1]) {
+ styleSheet.deleteRule(i);
+ styleSheet.insertRule(darkRules[1], i);
+ }
+
+ return;
+ }
+ }
+ } catch (reason) {
+ console.error(`_forceCssTheme: "${reason?.message}".`);
+ }
+ },
+
+ async _initializeViewerComponents() {
+ const appConfig = this.appConfig;
+ const eventBus = appConfig.eventBus || new _ui_utils.EventBus({
+ isInAutomation: this.externalServices.isInAutomation
+ });
+ this.eventBus = eventBus;
+ this.overlayManager = new _overlay_manager.OverlayManager();
+ const pdfRenderingQueue = new _pdf_rendering_queue.PDFRenderingQueue();
+ pdfRenderingQueue.onIdle = this.cleanup.bind(this);
+ this.pdfRenderingQueue = pdfRenderingQueue;
+ const pdfLinkService = new _pdf_link_service.PDFLinkService({
+ eventBus,
+ externalLinkTarget: _app_options.AppOptions.get("externalLinkTarget"),
+ externalLinkRel: _app_options.AppOptions.get("externalLinkRel"),
+ ignoreDestinationZoom: _app_options.AppOptions.get("ignoreDestinationZoom")
+ });
+ this.pdfLinkService = pdfLinkService;
+ const downloadManager = this.externalServices.createDownloadManager();
+ this.downloadManager = downloadManager;
+ const findController = new _pdf_find_controller.PDFFindController({
+ linkService: pdfLinkService,
+ eventBus
+ });
+ this.findController = findController;
+ const container = appConfig.mainContainer;
+ const viewer = appConfig.viewerContainer;
+ this.pdfViewer = new _pdf_viewer.PDFViewer({
+ container,
+ viewer,
+ eventBus,
+ renderingQueue: pdfRenderingQueue,
+ linkService: pdfLinkService,
+ downloadManager,
+ findController,
+ renderer: _app_options.AppOptions.get("renderer"),
+ enableWebGL: _app_options.AppOptions.get("enableWebGL"),
+ l10n: this.l10n,
+ textLayerMode: _app_options.AppOptions.get("textLayerMode"),
+ imageResourcesPath: _app_options.AppOptions.get("imageResourcesPath"),
+ renderInteractiveForms: _app_options.AppOptions.get("renderInteractiveForms"),
+ enablePrintAutoRotate: _app_options.AppOptions.get("enablePrintAutoRotate"),
+ useOnlyCssZoom: _app_options.AppOptions.get("useOnlyCssZoom"),
+ maxCanvasPixels: _app_options.AppOptions.get("maxCanvasPixels"),
+ enableScripting: _app_options.AppOptions.get("enableScripting"),
+ mouseState: this._mouseState
+ });
+ pdfRenderingQueue.setViewer(this.pdfViewer);
+ pdfLinkService.setViewer(this.pdfViewer);
+ this.pdfThumbnailViewer = new _pdf_thumbnail_viewer.PDFThumbnailViewer({
+ container: appConfig.sidebar.thumbnailView,
+ eventBus,
+ renderingQueue: pdfRenderingQueue,
+ linkService: pdfLinkService,
+ l10n: this.l10n
+ });
+ pdfRenderingQueue.setThumbnailViewer(this.pdfThumbnailViewer);
+ this.pdfHistory = new _pdf_history.PDFHistory({
+ linkService: pdfLinkService,
+ eventBus
+ });
+ pdfLinkService.setHistory(this.pdfHistory);
+
+ if (!this.supportsIntegratedFind) {
+ this.findBar = new _pdf_find_bar.PDFFindBar(appConfig.findBar, eventBus, this.l10n);
+ }
+
+ this.pdfDocumentProperties = new _pdf_document_properties.PDFDocumentProperties(appConfig.documentProperties, this.overlayManager, eventBus, this.l10n);
+ this.pdfCursorTools = new _pdf_cursor_tools.PDFCursorTools({
+ container,
+ eventBus,
+ cursorToolOnLoad: _app_options.AppOptions.get("cursorToolOnLoad")
+ });
+ this.toolbar = new _toolbar.Toolbar(appConfig.toolbar, eventBus, this.l10n);
+ this.secondaryToolbar = new _secondary_toolbar.SecondaryToolbar(appConfig.secondaryToolbar, container, eventBus);
+
+ if (this.supportsFullscreen) {
+ this.pdfPresentationMode = new _pdf_presentation_mode.PDFPresentationMode({
+ container,
+ pdfViewer: this.pdfViewer,
+ eventBus,
+ contextMenuItems: appConfig.fullscreen
+ });
+ }
+
+ this.passwordPrompt = new _password_prompt.PasswordPrompt(appConfig.passwordOverlay, this.overlayManager, this.l10n);
+ this.pdfOutlineViewer = new _pdf_outline_viewer.PDFOutlineViewer({
+ container: appConfig.sidebar.outlineView,
+ eventBus,
+ linkService: pdfLinkService
+ });
+ this.pdfAttachmentViewer = new _pdf_attachment_viewer.PDFAttachmentViewer({
+ container: appConfig.sidebar.attachmentsView,
+ eventBus,
+ downloadManager
+ });
+ this.pdfLayerViewer = new _pdf_layer_viewer.PDFLayerViewer({
+ container: appConfig.sidebar.layersView,
+ eventBus,
+ l10n: this.l10n
+ });
+ this.pdfSidebar = new _pdf_sidebar.PDFSidebar({
+ elements: appConfig.sidebar,
+ pdfViewer: this.pdfViewer,
+ pdfThumbnailViewer: this.pdfThumbnailViewer,
+ eventBus,
+ l10n: this.l10n
+ });
+ this.pdfSidebar.onToggled = this.forceRendering.bind(this);
+ this.pdfSidebarResizer = new _pdf_sidebar_resizer.PDFSidebarResizer(appConfig.sidebarResizer, eventBus, this.l10n);
+ },
+
+ run(config) {
+ this.initialize(config).then(webViewerInitialized);
+ },
+
+ get initialized() {
+ return this._initializedCapability.settled;
+ },
+
+ get initializedPromise() {
+ return this._initializedCapability.promise;
+ },
+
+ zoomIn(ticks) {
+ if (this.pdfViewer.isInPresentationMode) {
+ return;
+ }
+
+ let newScale = this.pdfViewer.currentScale;
+
+ do {
+ newScale = (newScale * DEFAULT_SCALE_DELTA).toFixed(2);
+ newScale = Math.ceil(newScale * 10) / 10;
+ newScale = Math.min(_ui_utils.MAX_SCALE, newScale);
+ } while (--ticks > 0 && newScale < _ui_utils.MAX_SCALE);
+
+ this.pdfViewer.currentScaleValue = newScale;
+ },
+
+ zoomOut(ticks) {
+ if (this.pdfViewer.isInPresentationMode) {
+ return;
+ }
+
+ let newScale = this.pdfViewer.currentScale;
+
+ do {
+ newScale = (newScale / DEFAULT_SCALE_DELTA).toFixed(2);
+ newScale = Math.floor(newScale * 10) / 10;
+ newScale = Math.max(_ui_utils.MIN_SCALE, newScale);
+ } while (--ticks > 0 && newScale > _ui_utils.MIN_SCALE);
+
+ this.pdfViewer.currentScaleValue = newScale;
+ },
+
+ zoomReset() {
+ if (this.pdfViewer.isInPresentationMode) {
+ return;
+ }
+
+ this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
+ },
+
+ get pagesCount() {
+ return this.pdfDocument ? this.pdfDocument.numPages : 0;
+ },
+
+ get page() {
+ return this.pdfViewer.currentPageNumber;
+ },
+
+ set page(val) {
+ this.pdfViewer.currentPageNumber = val;
+ },
+
+ get supportsPrinting() {
+ return PDFPrintServiceFactory.instance.supportsPrinting;
+ },
+
+ get supportsFullscreen() {
+ let support;
+ const doc = document.documentElement;
+ support = !!(doc.requestFullscreen || doc.mozRequestFullScreen || doc.webkitRequestFullScreen);
+
+ if (document.fullscreenEnabled === false || document.mozFullScreenEnabled === false || document.webkitFullscreenEnabled === false) {
+ support = false;
+ }
+
+ return (0, _pdfjsLib.shadow)(this, "supportsFullscreen", support);
+ },
+
+ get supportsIntegratedFind() {
+ return this.externalServices.supportsIntegratedFind;
+ },
+
+ get supportsDocumentFonts() {
+ return this.externalServices.supportsDocumentFonts;
+ },
+
+ get loadingBar() {
+ const bar = new _ui_utils.ProgressBar("#loadingBar");
+ return (0, _pdfjsLib.shadow)(this, "loadingBar", bar);
+ },
+
+ get supportedMouseWheelZoomModifierKeys() {
+ return this.externalServices.supportedMouseWheelZoomModifierKeys;
+ },
+
+ initPassiveLoading() {
+ throw new Error("Not implemented: initPassiveLoading");
+ },
+
+ setTitleUsingUrl(url = "") {
+ this.url = url;
+ this.baseUrl = url.split("#")[0];
+ let title = (0, _ui_utils.getPDFFileNameFromURL)(url, "");
+
+ if (!title) {
+ try {
+ title = decodeURIComponent((0, _pdfjsLib.getFilenameFromUrl)(url)) || url;
+ } catch (ex) {
+ title = url;
+ }
+ }
+
+ this.setTitle(title);
+ },
+
+ setTitle(title) {
+ if (this.isViewerEmbedded) {
+ return;
+ }
+
+ document.title = title;
+ },
+
+ get _docFilename() {
+ return this._contentDispositionFilename || (0, _ui_utils.getPDFFileNameFromURL)(this.url);
+ },
+
+ _cancelIdleCallbacks() {
+ if (!this._idleCallbacks.size) {
+ return;
+ }
+
+ for (const callback of this._idleCallbacks) {
+ window.cancelIdleCallback(callback);
+ }
+
+ this._idleCallbacks.clear();
+ },
+
+ async _destroyScriptingInstance() {
+ if (!this._scriptingInstance) {
+ return;
+ }
+
+ const {
+ scripting,
+ internalEvents,
+ domEvents
+ } = this._scriptingInstance;
+
+ try {
+ await scripting.destroySandbox();
+ } catch (ex) {}
+
+ for (const [name, listener] of internalEvents) {
+ this.eventBus._off(name, listener);
+ }
+
+ internalEvents.clear();
+
+ for (const [name, listener] of domEvents) {
+ window.removeEventListener(name, listener);
+ }
+
+ domEvents.clear();
+ delete this._mouseState.isDown;
+ this._scriptingInstance = null;
+ },
+
+ async close() {
+ const errorWrapper = this.appConfig.errorWrapper.container;
+ errorWrapper.setAttribute("hidden", "true");
+
+ if (!this.pdfLoadingTask) {
+ return undefined;
+ }
+
+ const promises = [];
+ promises.push(this.pdfLoadingTask.destroy());
+ this.pdfLoadingTask = null;
+
+ if (this.pdfDocument) {
+ this.pdfDocument = null;
+ this.pdfThumbnailViewer.setDocument(null);
+ this.pdfViewer.setDocument(null);
+ this.pdfLinkService.setDocument(null);
+ this.pdfDocumentProperties.setDocument(null);
+ }
+
+ webViewerResetPermissions();
+ this.store = null;
+ this.isInitialViewSet = false;
+ this.downloadComplete = false;
+ this.url = "";
+ this.baseUrl = "";
+ this.documentInfo = null;
+ this.metadata = null;
+ this._contentDispositionFilename = null;
+ this._contentLength = null;
+ this.triggerDelayedFallback = null;
+ this._saveInProgress = false;
+
+ this._cancelIdleCallbacks();
+
+ promises.push(this._destroyScriptingInstance());
+ this.pdfSidebar.reset();
+ this.pdfOutlineViewer.reset();
+ this.pdfAttachmentViewer.reset();
+ this.pdfLayerViewer.reset();
+
+ if (this.pdfHistory) {
+ this.pdfHistory.reset();
+ }
+
+ if (this.findBar) {
+ this.findBar.reset();
+ }
+
+ this.toolbar.reset();
+ this.secondaryToolbar.reset();
+
+ if (typeof PDFBug !== "undefined") {
+ PDFBug.cleanup();
+ }
+
+ await Promise.all(promises);
+ return undefined;
+ },
+
+ async open(file, args) {
+ if (this.pdfLoadingTask) {
+ await this.close();
+ }
+
+ const workerParameters = _app_options.AppOptions.getAll(_app_options.OptionKind.WORKER);
+
+ for (const key in workerParameters) {
+ _pdfjsLib.GlobalWorkerOptions[key] = workerParameters[key];
+ }
+
+ const parameters = Object.create(null);
+
+ if (typeof file === "string") {
+ this.setTitleUsingUrl(file);
+ parameters.url = file;
+ } else if (file && "byteLength" in file) {
+ parameters.data = file;
+ } else if (file.url && file.originalUrl) {
+ this.setTitleUsingUrl(file.originalUrl);
+ parameters.url = file.url;
+ }
+
+ const apiParameters = _app_options.AppOptions.getAll(_app_options.OptionKind.API);
+
+ for (const key in apiParameters) {
+ let value = apiParameters[key];
+
+ if (key === "docBaseUrl" && !value) {}
+
+ parameters[key] = value;
+ }
+
+ if (args) {
+ for (const key in args) {
+ parameters[key] = args[key];
+ }
+ }
+
+ const loadingTask = (0, _pdfjsLib.getDocument)(parameters);
+ this.pdfLoadingTask = loadingTask;
+
+ loadingTask.onPassword = (updateCallback, reason) => {
+ this.pdfLinkService.externalLinkEnabled = false;
+ this.passwordPrompt.setUpdateCallback(updateCallback, reason);
+ this.passwordPrompt.open();
+ };
+
+ loadingTask.onProgress = ({
+ loaded,
+ total
+ }) => {
+ this.progress(loaded / total);
+ };
+
+ loadingTask.onUnsupportedFeature = this.fallback.bind(this);
+ return loadingTask.promise.then(pdfDocument => {
+ this.load(pdfDocument);
+ }, exception => {
+ if (loadingTask !== this.pdfLoadingTask) {
+ return undefined;
+ }
+
+ const message = exception?.message;
+ let loadingErrorMessage;
+
+ if (exception instanceof _pdfjsLib.InvalidPDFException) {
+ loadingErrorMessage = this.l10n.get("invalid_file_error", null, "Invalid or corrupted PDF file.");
+ } else if (exception instanceof _pdfjsLib.MissingPDFException) {
+ loadingErrorMessage = this.l10n.get("missing_file_error", null, "Missing PDF file.");
+ } else if (exception instanceof _pdfjsLib.UnexpectedResponseException) {
+ loadingErrorMessage = this.l10n.get("unexpected_response_error", null, "Unexpected server response.");
+ } else {
+ loadingErrorMessage = this.l10n.get("loading_error", null, "An error occurred while loading the PDF.");
+ }
+
+ return loadingErrorMessage.then(msg => {
+ this.error(msg, {
+ message
+ });
+ throw exception;
+ });
+ });
+ },
+
+ download({
+ sourceEventType = "download"
+ } = {}) {
+ function downloadByUrl() {
+ downloadManager.downloadUrl(url, filename);
+ }
+
+ const downloadManager = this.downloadManager,
+ url = this.baseUrl,
+ filename = this._docFilename;
+
+ if (!this.pdfDocument || !this.downloadComplete) {
+ downloadByUrl();
+ return;
+ }
+
+ this.pdfDocument.getData().then(function (data) {
+ const blob = new Blob([data], {
+ type: "application/pdf"
+ });
+ downloadManager.download(blob, url, filename, sourceEventType);
+ }).catch(downloadByUrl);
+ },
+
+ async save({
+ sourceEventType = "download"
+ } = {}) {
+ if (this._saveInProgress) {
+ return;
+ }
+
+ const downloadManager = this.downloadManager,
+ url = this.baseUrl,
+ filename = this._docFilename;
+
+ if (!this.pdfDocument || !this.downloadComplete) {
+ this.download({
+ sourceEventType
+ });
+ return;
+ }
+
+ this._saveInProgress = true;
+ await this._scriptingInstance?.scripting.dispatchEventInSandbox({
+ id: "doc",
+ name: "WillSave"
+ });
+ this.pdfDocument.saveDocument(this.pdfDocument.annotationStorage).then(data => {
+ const blob = new Blob([data], {
+ type: "application/pdf"
+ });
+ downloadManager.download(blob, url, filename, sourceEventType);
+ }).catch(() => {
+ this.download({
+ sourceEventType
+ });
+ }).finally(async () => {
+ await this._scriptingInstance?.scripting.dispatchEventInSandbox({
+ id: "doc",
+ name: "DidSave"
+ });
+ this._saveInProgress = false;
+ });
+ },
+
+ downloadOrSave(options) {
+ if (this.pdfDocument?.annotationStorage.size > 0) {
+ this.save(options);
+ } else {
+ this.download(options);
+ }
+ },
+
+ _delayedFallback(featureId) {
+ this.externalServices.reportTelemetry({
+ type: "unsupportedFeature",
+ featureId
+ });
+
+ if (!this.triggerDelayedFallback) {
+ this.triggerDelayedFallback = () => {
+ this.fallback(featureId);
+ this.triggerDelayedFallback = null;
+ };
+ }
+ },
+
+ fallback(featureId) {
+ this.externalServices.reportTelemetry({
+ type: "unsupportedFeature",
+ featureId
+ });
+
+ if (this.fellback) {
+ return;
+ }
+
+ this.fellback = true;
+ this.externalServices.fallback({
+ featureId,
+ url: this.baseUrl
+ }).then(download => {
+ if (!download) {
+ return;
+ }
+
+ this.download({
+ sourceEventType: "download"
+ });
+ });
+ },
+
+ error(message, moreInfo) {
+ const moreInfoText = [this.l10n.get("error_version_info", {
+ version: _pdfjsLib.version || "?",
+ build: _pdfjsLib.build || "?"
+ }, "PDF.js v{{version}} (build: {{build}})")];
+
+ if (moreInfo) {
+ moreInfoText.push(this.l10n.get("error_message", {
+ message: moreInfo.message
+ }, "Message: {{message}}"));
+
+ if (moreInfo.stack) {
+ moreInfoText.push(this.l10n.get("error_stack", {
+ stack: moreInfo.stack
+ }, "Stack: {{stack}}"));
+ } else {
+ if (moreInfo.filename) {
+ moreInfoText.push(this.l10n.get("error_file", {
+ file: moreInfo.filename
+ }, "File: {{file}}"));
+ }
+
+ if (moreInfo.lineNumber) {
+ moreInfoText.push(this.l10n.get("error_line", {
+ line: moreInfo.lineNumber
+ }, "Line: {{line}}"));
+ }
+ }
+ }
+
+ const errorWrapperConfig = this.appConfig.errorWrapper;
+ const errorWrapper = errorWrapperConfig.container;
+ errorWrapper.removeAttribute("hidden");
+ const errorMessage = errorWrapperConfig.errorMessage;
+ errorMessage.textContent = message;
+ const closeButton = errorWrapperConfig.closeButton;
+
+ closeButton.onclick = function () {
+ errorWrapper.setAttribute("hidden", "true");
+ };
+
+ const errorMoreInfo = errorWrapperConfig.errorMoreInfo;
+ const moreInfoButton = errorWrapperConfig.moreInfoButton;
+ const lessInfoButton = errorWrapperConfig.lessInfoButton;
+
+ moreInfoButton.onclick = function () {
+ errorMoreInfo.removeAttribute("hidden");
+ moreInfoButton.setAttribute("hidden", "true");
+ lessInfoButton.removeAttribute("hidden");
+ errorMoreInfo.style.height = errorMoreInfo.scrollHeight + "px";
+ };
+
+ lessInfoButton.onclick = function () {
+ errorMoreInfo.setAttribute("hidden", "true");
+ moreInfoButton.removeAttribute("hidden");
+ lessInfoButton.setAttribute("hidden", "true");
+ };
+
+ moreInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler;
+ lessInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler;
+ closeButton.oncontextmenu = _ui_utils.noContextMenuHandler;
+ moreInfoButton.removeAttribute("hidden");
+ lessInfoButton.setAttribute("hidden", "true");
+ Promise.all(moreInfoText).then(parts => {
+ errorMoreInfo.value = parts.join("\n");
+ });
+ },
+
+ progress(level) {
+ if (this.downloadComplete) {
+ return;
+ }
+
+ const percent = Math.round(level * 100);
+
+ if (percent > this.loadingBar.percent || isNaN(percent)) {
+ this.loadingBar.percent = percent;
+ const disableAutoFetch = this.pdfDocument ? this.pdfDocument.loadingParams.disableAutoFetch : _app_options.AppOptions.get("disableAutoFetch");
+
+ if (disableAutoFetch && percent) {
+ if (this.disableAutoFetchLoadingBarTimeout) {
+ clearTimeout(this.disableAutoFetchLoadingBarTimeout);
+ this.disableAutoFetchLoadingBarTimeout = null;
+ }
+
+ this.loadingBar.show();
+ this.disableAutoFetchLoadingBarTimeout = setTimeout(() => {
+ this.loadingBar.hide();
+ this.disableAutoFetchLoadingBarTimeout = null;
+ }, DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT);
+ }
+ }
+ },
+
+ load(pdfDocument) {
+ this.pdfDocument = pdfDocument;
+ pdfDocument.getDownloadInfo().then(({
+ length
+ }) => {
+ this._contentLength = length;
+ this.downloadComplete = true;
+ this.loadingBar.hide();
+ firstPagePromise.then(() => {
+ this.eventBus.dispatch("documentloaded", {
+ source: this
+ });
+ });
+ });
+ const pageLayoutPromise = pdfDocument.getPageLayout().catch(function () {});
+ const pageModePromise = pdfDocument.getPageMode().catch(function () {});
+ const openActionPromise = pdfDocument.getOpenAction().catch(function () {});
+ this.toolbar.setPagesCount(pdfDocument.numPages, false);
+ this.secondaryToolbar.setPagesCount(pdfDocument.numPages);
+ let baseDocumentUrl;
+ baseDocumentUrl = null;
+ this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl);
+ this.pdfDocumentProperties.setDocument(pdfDocument, this.url);
+ const pdfViewer = this.pdfViewer;
+ pdfViewer.setDocument(pdfDocument);
+ const {
+ firstPagePromise,
+ onePageRendered,
+ pagesPromise
+ } = pdfViewer;
+ const pdfThumbnailViewer = this.pdfThumbnailViewer;
+ pdfThumbnailViewer.setDocument(pdfDocument);
+ const storedPromise = (this.store = new _view_history.ViewHistory(pdfDocument.fingerprint)).getMultiple({
+ page: null,
+ zoom: _ui_utils.DEFAULT_SCALE_VALUE,
+ scrollLeft: "0",
+ scrollTop: "0",
+ rotation: null,
+ sidebarView: _ui_utils.SidebarView.UNKNOWN,
+ scrollMode: _ui_utils.ScrollMode.UNKNOWN,
+ spreadMode: _ui_utils.SpreadMode.UNKNOWN
+ }).catch(() => {
+ return Object.create(null);
+ });
+ firstPagePromise.then(pdfPage => {
+ this.loadingBar.setWidth(this.appConfig.viewerContainer);
+
+ this._initializeAnnotationStorageCallbacks(pdfDocument);
+
+ Promise.all([_ui_utils.animationStarted, storedPromise, pageLayoutPromise, pageModePromise, openActionPromise]).then(async ([timeStamp, stored, pageLayout, pageMode, openAction]) => {
+ const viewOnLoad = _app_options.AppOptions.get("viewOnLoad");
+
+ this._initializePdfHistory({
+ fingerprint: pdfDocument.fingerprint,
+ viewOnLoad,
+ initialDest: openAction && openAction.dest
+ });
+
+ const initialBookmark = this.initialBookmark;
+
+ const zoom = _app_options.AppOptions.get("defaultZoomValue");
+
+ let hash = zoom ? `zoom=${zoom}` : null;
+ let rotation = null;
+
+ let sidebarView = _app_options.AppOptions.get("sidebarViewOnLoad");
+
+ let scrollMode = _app_options.AppOptions.get("scrollModeOnLoad");
+
+ let spreadMode = _app_options.AppOptions.get("spreadModeOnLoad");
+
+ if (stored.page && viewOnLoad !== ViewOnLoad.INITIAL) {
+ hash = `page=${stored.page}&zoom=${zoom || stored.zoom},` + `${stored.scrollLeft},${stored.scrollTop}`;
+ rotation = parseInt(stored.rotation, 10);
+
+ if (sidebarView === _ui_utils.SidebarView.UNKNOWN) {
+ sidebarView = stored.sidebarView | 0;
+ }
+
+ if (scrollMode === _ui_utils.ScrollMode.UNKNOWN) {
+ scrollMode = stored.scrollMode | 0;
+ }
+
+ if (spreadMode === _ui_utils.SpreadMode.UNKNOWN) {
+ spreadMode = stored.spreadMode | 0;
+ }
+ }
+
+ if (pageMode && sidebarView === _ui_utils.SidebarView.UNKNOWN) {
+ sidebarView = apiPageModeToSidebarView(pageMode);
+ }
+
+ if (pageLayout && spreadMode === _ui_utils.SpreadMode.UNKNOWN) {
+ spreadMode = apiPageLayoutToSpreadMode(pageLayout);
+ }
+
+ this.setInitialView(hash, {
+ rotation,
+ sidebarView,
+ scrollMode,
+ spreadMode
+ });
+ this.eventBus.dispatch("documentinit", {
+ source: this
+ });
+
+ if (!this.isViewerEmbedded) {
+ pdfViewer.focus();
+ }
+
+ this._initializePermissions(pdfDocument);
+
+ await Promise.race([pagesPromise, new Promise(resolve => {
+ setTimeout(resolve, FORCE_PAGES_LOADED_TIMEOUT);
+ })]);
+
+ if (!initialBookmark && !hash) {
+ return;
+ }
+
+ if (pdfViewer.hasEqualPageSizes) {
+ return;
+ }
+
+ this.initialBookmark = initialBookmark;
+ pdfViewer.currentScaleValue = pdfViewer.currentScaleValue;
+ this.setInitialView(hash);
+ }).catch(() => {
+ this.setInitialView();
+ }).then(function () {
+ pdfViewer.update();
+ });
+ });
+ pagesPromise.then(() => {
+ this._initializeAutoPrint(pdfDocument, openActionPromise);
+ });
+ onePageRendered.then(() => {
+ pdfDocument.getOutline().then(outline => {
+ this.pdfOutlineViewer.render({
+ outline,
+ pdfDocument
+ });
+ });
+ pdfDocument.getAttachments().then(attachments => {
+ this.pdfAttachmentViewer.render({
+ attachments
+ });
+ });
+ pdfViewer.optionalContentConfigPromise.then(optionalContentConfig => {
+ this.pdfLayerViewer.render({
+ optionalContentConfig,
+ pdfDocument
+ });
+ });
+
+ if ("requestIdleCallback" in window) {
+ const callback = window.requestIdleCallback(() => {
+ this._collectTelemetry(pdfDocument);
+
+ this._idleCallbacks.delete(callback);
+ }, {
+ timeout: 1000
+ });
+
+ this._idleCallbacks.add(callback);
+ }
+
+ this._initializeJavaScript(pdfDocument);
+ });
+
+ this._initializePageLabels(pdfDocument);
+
+ this._initializeMetadata(pdfDocument);
+ },
+
+ async _initializeJavaScript(pdfDocument) {
+ if (!_app_options.AppOptions.get("enableScripting")) {
+ return;
+ }
+
+ const [objects, calculationOrder, docActions] = await Promise.all([pdfDocument.getFieldObjects(), pdfDocument.getCalculationOrderIds(), pdfDocument.getJSActions()]);
+
+ if (!objects && !docActions) {
+ return;
+ }
+
+ if (pdfDocument !== this.pdfDocument) {
+ return;
+ }
+
+ const scripting = this.externalServices.createScripting({
+ sandboxBundleSrc: _app_options.AppOptions.get("sandboxBundleSrc")
+ });
+ const internalEvents = new Map(),
+ domEvents = new Map();
+ this._scriptingInstance = {
+ scripting,
+ ready: false,
+ internalEvents,
+ domEvents
+ };
+
+ if (!this.documentInfo) {
+ await new Promise(resolve => {
+ this.eventBus._on("metadataloaded", evt => {
+ resolve();
+ }, {
+ once: true
+ });
+ });
+
+ if (pdfDocument !== this.pdfDocument) {
+ return;
+ }
+ }
+
+ if (!this._contentLength) {
+ await new Promise(resolve => {
+ this.eventBus._on("documentloaded", evt => {
+ resolve();
+ }, {
+ once: true
+ });
+ });
+
+ if (pdfDocument !== this.pdfDocument) {
+ return;
+ }
+ }
+
+ const updateFromSandbox = ({
+ detail
+ }) => {
+ const {
+ id,
+ command,
+ value
+ } = detail;
+
+ if (!id) {
+ switch (command) {
+ case "clear":
+ console.clear();
+ break;
+
+ case "error":
+ console.error(value);
+ break;
+
+ case "layout":
+ this.pdfViewer.spreadMode = apiPageLayoutToSpreadMode(value);
+ break;
+
+ case "page-num":
+ this.pdfViewer.currentPageNumber = value + 1;
+ break;
+
+ case "print":
+ this.pdfViewer.pagesPromise.then(() => {
+ this.triggerPrinting();
+ });
+ break;
+
+ case "println":
+ console.log(value);
+ break;
+
+ case "zoom":
+ this.pdfViewer.currentScaleValue = value;
+ break;
+ }
+
+ return;
+ }
+
+ const element = document.getElementById(id);
+
+ if (element) {
+ element.dispatchEvent(new CustomEvent("updatefromsandbox", {
+ detail
+ }));
+ } else {
+ if (value !== undefined && value !== null) {
+ pdfDocument.annotationStorage.setValue(id, value);
+ }
+ }
+ };
+
+ internalEvents.set("updatefromsandbox", updateFromSandbox);
+ const visitedPages = new Map();
+
+ const pageOpen = ({
+ pageNumber,
+ actionsPromise
+ }) => {
+ visitedPages.set(pageNumber, (async () => {
+ let actions = null;
+
+ if (!visitedPages.has(pageNumber)) {
+ actions = await actionsPromise;
+
+ if (pdfDocument !== this.pdfDocument) {
+ return;
+ }
+ }
+
+ await this._scriptingInstance?.scripting.dispatchEventInSandbox({
+ id: "page",
+ name: "PageOpen",
+ pageNumber,
+ actions
+ });
+ })());
+ };
+
+ const pageClose = async ({
+ pageNumber
+ }) => {
+ const actionsPromise = visitedPages.get(pageNumber);
+
+ if (!actionsPromise) {
+ return;
+ }
+
+ visitedPages.set(pageNumber, null);
+ await actionsPromise;
+
+ if (pdfDocument !== this.pdfDocument) {
+ return;
+ }
+
+ await this._scriptingInstance?.scripting.dispatchEventInSandbox({
+ id: "page",
+ name: "PageClose",
+ pageNumber
+ });
+ };
+
+ internalEvents.set("pageopen", pageOpen);
+ internalEvents.set("pageclose", pageClose);
+
+ const dispatchEventInSandbox = ({
+ detail
+ }) => {
+ scripting.dispatchEventInSandbox(detail);
+ };
+
+ internalEvents.set("dispatcheventinsandbox", dispatchEventInSandbox);
+
+ const mouseDown = event => {
+ this._mouseState.isDown = true;
+ };
+
+ domEvents.set("mousedown", mouseDown);
+
+ const mouseUp = event => {
+ this._mouseState.isDown = false;
+ };
+
+ domEvents.set("mouseup", mouseUp);
+
+ for (const [name, listener] of internalEvents) {
+ this.eventBus._on(name, listener);
+ }
+
+ for (const [name, listener] of domEvents) {
+ window.addEventListener(name, listener);
+ }
+
+ try {
+ await scripting.createSandbox({
+ objects,
+ calculationOrder,
+ appInfo: {
+ platform: navigator.platform,
+ language: navigator.language
+ },
+ docInfo: { ...this.documentInfo,
+ baseURL: this.baseUrl,
+ filesize: this._contentLength,
+ filename: this._docFilename,
+ metadata: this.metadata?.getRaw(),
+ authors: this.metadata?.get("dc:creator"),
+ numPages: pdfDocument.numPages,
+ URL: this.url,
+ actions: docActions
+ }
+ });
+
+ if (this.externalServices.isInAutomation) {
+ this.eventBus.dispatch("sandboxcreated", {
+ source: this
+ });
+ }
+ } catch (error) {
+ console.error(`_initializeJavaScript: "${error?.message}".`);
+
+ this._destroyScriptingInstance();
+
+ return;
+ }
+
+ await scripting.dispatchEventInSandbox({
+ id: "doc",
+ name: "Open"
+ });
+ await this.pdfViewer.initializeScriptingEvents();
+ Promise.resolve().then(() => {
+ if (this._scriptingInstance) {
+ this._scriptingInstance.ready = true;
+ }
+ });
+ },
+
+ async _collectTelemetry(pdfDocument) {
+ const markInfo = await this.pdfDocument.getMarkInfo();
+
+ if (pdfDocument !== this.pdfDocument) {
+ return;
+ }
+
+ const tagged = markInfo?.Marked || false;
+ this.externalServices.reportTelemetry({
+ type: "tagged",
+ tagged
+ });
+ },
+
+ async _initializeAutoPrint(pdfDocument, openActionPromise) {
+ const [openAction, javaScript] = await Promise.all([openActionPromise, !_app_options.AppOptions.get("enableScripting") ? pdfDocument.getJavaScript() : null]);
+
+ if (pdfDocument !== this.pdfDocument) {
+ return;
+ }
+
+ let triggerAutoPrint = false;
+
+ if (openAction?.action === "Print") {
+ triggerAutoPrint = true;
+ }
+
+ if (javaScript) {
+ javaScript.some(js => {
+ if (!js) {
+ return false;
+ }
+
+ console.warn("Warning: JavaScript is not supported");
+
+ this._delayedFallback(_pdfjsLib.UNSUPPORTED_FEATURES.javaScript);
+
+ return true;
+ });
+
+ if (!triggerAutoPrint) {
+ for (const js of javaScript) {
+ if (js && _ui_utils.AutoPrintRegExp.test(js)) {
+ triggerAutoPrint = true;
+ break;
+ }
+ }
+ }
+ }
+
+ if (triggerAutoPrint) {
+ this.triggerPrinting();
+ }
+ },
+
+ async _initializeMetadata(pdfDocument) {
+ const {
+ info,
+ metadata,
+ contentDispositionFilename,
+ contentLength
+ } = await pdfDocument.getMetadata();
+
+ if (pdfDocument !== this.pdfDocument) {
+ return;
+ }
+
+ this.documentInfo = info;
+ this.metadata = metadata;
+ this._contentDispositionFilename = contentDispositionFilename;
+ this._contentLength ?? (this._contentLength = contentLength);
+ console.log(`PDF ${pdfDocument.fingerprint} [${info.PDFFormatVersion} ` + `${(info.Producer || "-").trim()} / ${(info.Creator || "-").trim()}] ` + `(PDF.js: ${_pdfjsLib.version || "-"}` + `${this.pdfViewer.enableWebGL ? " [WebGL]" : ""})`);
+ let pdfTitle;
+ const infoTitle = info && info.Title;
+
+ if (infoTitle) {
+ pdfTitle = infoTitle;
+ }
+
+ const metadataTitle = metadata && metadata.get("dc:title");
+
+ if (metadataTitle) {
+ if (metadataTitle !== "Untitled" && !/[\uFFF0-\uFFFF]/g.test(metadataTitle)) {
+ pdfTitle = metadataTitle;
+ }
+ }
+
+ if (pdfTitle) {
+ this.setTitle(`${pdfTitle} - ${contentDispositionFilename || document.title}`);
+ } else if (contentDispositionFilename) {
+ this.setTitle(contentDispositionFilename);
+ }
+
+ if (info.IsXFAPresent && !info.IsAcroFormPresent) {
+ console.warn("Warning: XFA is not supported");
+
+ this._delayedFallback(_pdfjsLib.UNSUPPORTED_FEATURES.forms);
+ } else if ((info.IsAcroFormPresent || info.IsXFAPresent) && !this.pdfViewer.renderInteractiveForms) {
+ console.warn("Warning: Interactive form support is not enabled");
+
+ this._delayedFallback(_pdfjsLib.UNSUPPORTED_FEATURES.forms);
+ }
+
+ let versionId = "other";
+
+ if (KNOWN_VERSIONS.includes(info.PDFFormatVersion)) {
+ versionId = `v${info.PDFFormatVersion.replace(".", "_")}`;
+ }
+
+ let generatorId = "other";
+
+ if (info.Producer) {
+ const producer = info.Producer.toLowerCase();
+ KNOWN_GENERATORS.some(function (generator) {
+ if (!producer.includes(generator)) {
+ return false;
+ }
+
+ generatorId = generator.replace(/[ .-]/g, "_");
+ return true;
+ });
+ }
+
+ let formType = null;
+
+ if (info.IsXFAPresent) {
+ formType = "xfa";
+ } else if (info.IsAcroFormPresent) {
+ formType = "acroform";
+ }
+
+ this.externalServices.reportTelemetry({
+ type: "documentInfo",
+ version: versionId,
+ generator: generatorId,
+ formType
+ });
+ this.eventBus.dispatch("metadataloaded", {
+ source: this
+ });
+ },
+
+ async _initializePageLabels(pdfDocument) {
+ const labels = await pdfDocument.getPageLabels();
+
+ if (pdfDocument !== this.pdfDocument) {
+ return;
+ }
+
+ if (!labels || _app_options.AppOptions.get("disablePageLabels")) {
+ return;
+ }
+
+ const numLabels = labels.length;
+
+ if (numLabels !== this.pagesCount) {
+ console.error("The number of Page Labels does not match the number of pages in the document.");
+ return;
+ }
+
+ let i = 0;
+
+ while (i < numLabels && labels[i] === (i + 1).toString()) {
+ i++;
+ }
+
+ if (i === numLabels) {
+ return;
+ }
+
+ const {
+ pdfViewer,
+ pdfThumbnailViewer,
+ toolbar
+ } = this;
+ pdfViewer.setPageLabels(labels);
+ pdfThumbnailViewer.setPageLabels(labels);
+ toolbar.setPagesCount(numLabels, true);
+ toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);
+ },
+
+ _initializePdfHistory({
+ fingerprint,
+ viewOnLoad,
+ initialDest = null
+ }) {
+ if (this.isViewerEmbedded || _app_options.AppOptions.get("disableHistory")) {
+ return;
+ }
+
+ this.pdfHistory.initialize({
+ fingerprint,
+ resetHistory: viewOnLoad === ViewOnLoad.INITIAL,
+ updateUrl: _app_options.AppOptions.get("historyUpdateUrl")
+ });
+
+ if (this.pdfHistory.initialBookmark) {
+ this.initialBookmark = this.pdfHistory.initialBookmark;
+ this.initialRotation = this.pdfHistory.initialRotation;
+ }
+
+ if (initialDest && !this.initialBookmark && viewOnLoad === ViewOnLoad.UNKNOWN) {
+ this.initialBookmark = JSON.stringify(initialDest);
+ this.pdfHistory.push({
+ explicitDest: initialDest,
+ pageNumber: null
+ });
+ }
+ },
+
+ async _initializePermissions(pdfDocument) {
+ const permissions = await pdfDocument.getPermissions();
+
+ if (pdfDocument !== this.pdfDocument) {
+ return;
+ }
+
+ if (!permissions || !_app_options.AppOptions.get("enablePermissions")) {
+ return;
+ }
+
+ if (!permissions.includes(_pdfjsLib.PermissionFlag.COPY)) {
+ this.appConfig.viewerContainer.classList.add(ENABLE_PERMISSIONS_CLASS);
+ }
+ },
+
+ _initializeAnnotationStorageCallbacks(pdfDocument) {
+ if (pdfDocument !== this.pdfDocument) {
+ return;
+ }
+
+ const {
+ annotationStorage
+ } = pdfDocument;
+
+ annotationStorage.onSetModified = function () {
+ window.addEventListener("beforeunload", beforeUnload);
+ };
+
+ annotationStorage.onResetModified = function () {
+ window.removeEventListener("beforeunload", beforeUnload);
+ };
+ },
+
+ setInitialView(storedHash, {
+ rotation,
+ sidebarView,
+ scrollMode,
+ spreadMode
+ } = {}) {
+ const setRotation = angle => {
+ if ((0, _ui_utils.isValidRotation)(angle)) {
+ this.pdfViewer.pagesRotation = angle;
+ }
+ };
+
+ const setViewerModes = (scroll, spread) => {
+ if ((0, _ui_utils.isValidScrollMode)(scroll)) {
+ this.pdfViewer.scrollMode = scroll;
+ }
+
+ if ((0, _ui_utils.isValidSpreadMode)(spread)) {
+ this.pdfViewer.spreadMode = spread;
+ }
+ };
+
+ this.isInitialViewSet = true;
+ this.pdfSidebar.setInitialView(sidebarView);
+ setViewerModes(scrollMode, spreadMode);
+
+ if (this.initialBookmark) {
+ setRotation(this.initialRotation);
+ delete this.initialRotation;
+ this.pdfLinkService.setHash(this.initialBookmark);
+ this.initialBookmark = null;
+ } else if (storedHash) {
+ setRotation(rotation);
+ this.pdfLinkService.setHash(storedHash);
+ }
+
+ this.toolbar.setPageNumber(this.pdfViewer.currentPageNumber, this.pdfViewer.currentPageLabel);
+ this.secondaryToolbar.setPageNumber(this.pdfViewer.currentPageNumber);
+
+ if (!this.pdfViewer.currentScaleValue) {
+ this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
+ }
+ },
+
+ cleanup() {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ this.pdfViewer.cleanup();
+ this.pdfThumbnailViewer.cleanup();
+
+ if (this.pdfViewer.renderer !== _ui_utils.RendererType.SVG) {
+ this.pdfDocument.cleanup();
+ }
+ },
+
+ forceRendering() {
+ this.pdfRenderingQueue.printing = !!this.printService;
+ this.pdfRenderingQueue.isThumbnailViewEnabled = this.pdfSidebar.isThumbnailViewVisible;
+ this.pdfRenderingQueue.renderHighestPriority();
+ },
+
+ beforePrint() {
+ this._scriptingInstance?.scripting.dispatchEventInSandbox({
+ id: "doc",
+ name: "WillPrint"
+ });
+
+ if (this.printService) {
+ return;
+ }
+
+ if (!this.supportsPrinting) {
+ this.l10n.get("printing_not_supported", null, "Warning: Printing is not fully supported by this browser.").then(printMessage => {
+ this.error(printMessage);
+ });
+ return;
+ }
+
+ if (!this.pdfViewer.pageViewsReady) {
+ this.l10n.get("printing_not_ready", null, "Warning: The PDF is not fully loaded for printing.").then(notReadyMessage => {
+ window.alert(notReadyMessage);
+ });
+ return;
+ }
+
+ const pagesOverview = this.pdfViewer.getPagesOverview();
+ const printContainer = this.appConfig.printContainer;
+
+ const printResolution = _app_options.AppOptions.get("printResolution");
+
+ const optionalContentConfigPromise = this.pdfViewer.optionalContentConfigPromise;
+ const printService = PDFPrintServiceFactory.instance.createPrintService(this.pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, this.l10n);
+ this.printService = printService;
+ this.forceRendering();
+ printService.layout();
+ this.externalServices.reportTelemetry({
+ type: "print"
+ });
+ },
+
+ afterPrint() {
+ this._scriptingInstance?.scripting.dispatchEventInSandbox({
+ id: "doc",
+ name: "DidPrint"
+ });
+
+ if (this.printService) {
+ this.printService.destroy();
+ this.printService = null;
+
+ if (this.pdfDocument) {
+ this.pdfDocument.annotationStorage.resetModified();
+ }
+ }
+
+ this.forceRendering();
+ },
+
+ rotatePages(delta) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ const newRotation = (this.pdfViewer.pagesRotation + 360 + delta) % 360;
+ this.pdfViewer.pagesRotation = newRotation;
+ },
+
+ requestPresentationMode() {
+ if (!this.pdfPresentationMode) {
+ return;
+ }
+
+ this.pdfPresentationMode.request();
+ },
+
+ triggerPrinting() {
+ if (!this.supportsPrinting) {
+ return;
+ }
+
+ window.print();
+ },
+
+ bindEvents() {
+ const {
+ eventBus,
+ _boundEvents
+ } = this;
+ _boundEvents.beforePrint = this.beforePrint.bind(this);
+ _boundEvents.afterPrint = this.afterPrint.bind(this);
+
+ eventBus._on("resize", webViewerResize);
+
+ eventBus._on("hashchange", webViewerHashchange);
+
+ eventBus._on("beforeprint", _boundEvents.beforePrint);
+
+ eventBus._on("afterprint", _boundEvents.afterPrint);
+
+ eventBus._on("pagerendered", webViewerPageRendered);
+
+ eventBus._on("updateviewarea", webViewerUpdateViewarea);
+
+ eventBus._on("pagechanging", webViewerPageChanging);
+
+ eventBus._on("scalechanging", webViewerScaleChanging);
+
+ eventBus._on("rotationchanging", webViewerRotationChanging);
+
+ eventBus._on("sidebarviewchanged", webViewerSidebarViewChanged);
+
+ eventBus._on("pagemode", webViewerPageMode);
+
+ eventBus._on("namedaction", webViewerNamedAction);
+
+ eventBus._on("presentationmodechanged", webViewerPresentationModeChanged);
+
+ eventBus._on("presentationmode", webViewerPresentationMode);
+
+ eventBus._on("print", webViewerPrint);
+
+ eventBus._on("download", webViewerDownload);
+
+ eventBus._on("save", webViewerSave);
+
+ eventBus._on("firstpage", webViewerFirstPage);
+
+ eventBus._on("lastpage", webViewerLastPage);
+
+ eventBus._on("nextpage", webViewerNextPage);
+
+ eventBus._on("previouspage", webViewerPreviousPage);
+
+ eventBus._on("zoomin", webViewerZoomIn);
+
+ eventBus._on("zoomout", webViewerZoomOut);
+
+ eventBus._on("zoomreset", webViewerZoomReset);
+
+ eventBus._on("pagenumberchanged", webViewerPageNumberChanged);
+
+ eventBus._on("scalechanged", webViewerScaleChanged);
+
+ eventBus._on("rotatecw", webViewerRotateCw);
+
+ eventBus._on("rotateccw", webViewerRotateCcw);
+
+ eventBus._on("optionalcontentconfig", webViewerOptionalContentConfig);
+
+ eventBus._on("switchscrollmode", webViewerSwitchScrollMode);
+
+ eventBus._on("scrollmodechanged", webViewerScrollModeChanged);
+
+ eventBus._on("switchspreadmode", webViewerSwitchSpreadMode);
+
+ eventBus._on("spreadmodechanged", webViewerSpreadModeChanged);
+
+ eventBus._on("documentproperties", webViewerDocumentProperties);
+
+ eventBus._on("find", webViewerFind);
+
+ eventBus._on("findfromurlhash", webViewerFindFromUrlHash);
+
+ eventBus._on("updatefindmatchescount", webViewerUpdateFindMatchesCount);
+
+ eventBus._on("updatefindcontrolstate", webViewerUpdateFindControlState);
+
+ if (_app_options.AppOptions.get("pdfBug")) {
+ _boundEvents.reportPageStatsPDFBug = reportPageStatsPDFBug;
+
+ eventBus._on("pagerendered", _boundEvents.reportPageStatsPDFBug);
+
+ eventBus._on("pagechanging", _boundEvents.reportPageStatsPDFBug);
+ }
+
+ eventBus._on("fileinputchange", webViewerFileInputChange);
+
+ eventBus._on("openfile", webViewerOpenFile);
+ },
+
+ bindWindowEvents() {
+ const {
+ eventBus,
+ _boundEvents
+ } = this;
+
+ _boundEvents.windowResize = () => {
+ eventBus.dispatch("resize", {
+ source: window
+ });
+ };
+
+ _boundEvents.windowHashChange = () => {
+ eventBus.dispatch("hashchange", {
+ source: window,
+ hash: document.location.hash.substring(1)
+ });
+ };
+
+ _boundEvents.windowBeforePrint = () => {
+ eventBus.dispatch("beforeprint", {
+ source: window
+ });
+ };
+
+ _boundEvents.windowAfterPrint = () => {
+ eventBus.dispatch("afterprint", {
+ source: window
+ });
+ };
+
+ _boundEvents.windowUpdateFromSandbox = event => {
+ eventBus.dispatch("updatefromsandbox", {
+ source: window,
+ detail: event.detail
+ });
+ };
+
+ window.addEventListener("visibilitychange", webViewerVisibilityChange);
+ window.addEventListener("wheel", webViewerWheel, {
+ passive: false
+ });
+ window.addEventListener("touchstart", webViewerTouchStart, {
+ passive: false
+ });
+ window.addEventListener("click", webViewerClick);
+ window.addEventListener("keydown", webViewerKeyDown);
+ window.addEventListener("keyup", webViewerKeyUp);
+ window.addEventListener("resize", _boundEvents.windowResize);
+ window.addEventListener("hashchange", _boundEvents.windowHashChange);
+ window.addEventListener("beforeprint", _boundEvents.windowBeforePrint);
+ window.addEventListener("afterprint", _boundEvents.windowAfterPrint);
+ window.addEventListener("updatefromsandbox", _boundEvents.windowUpdateFromSandbox);
+ },
+
+ unbindEvents() {
+ const {
+ eventBus,
+ _boundEvents
+ } = this;
+
+ eventBus._off("resize", webViewerResize);
+
+ eventBus._off("hashchange", webViewerHashchange);
+
+ eventBus._off("beforeprint", _boundEvents.beforePrint);
+
+ eventBus._off("afterprint", _boundEvents.afterPrint);
+
+ eventBus._off("pagerendered", webViewerPageRendered);
+
+ eventBus._off("updateviewarea", webViewerUpdateViewarea);
+
+ eventBus._off("pagechanging", webViewerPageChanging);
+
+ eventBus._off("scalechanging", webViewerScaleChanging);
+
+ eventBus._off("rotationchanging", webViewerRotationChanging);
+
+ eventBus._off("sidebarviewchanged", webViewerSidebarViewChanged);
+
+ eventBus._off("pagemode", webViewerPageMode);
+
+ eventBus._off("namedaction", webViewerNamedAction);
+
+ eventBus._off("presentationmodechanged", webViewerPresentationModeChanged);
+
+ eventBus._off("presentationmode", webViewerPresentationMode);
+
+ eventBus._off("print", webViewerPrint);
+
+ eventBus._off("download", webViewerDownload);
+
+ eventBus._off("save", webViewerSave);
+
+ eventBus._off("firstpage", webViewerFirstPage);
+
+ eventBus._off("lastpage", webViewerLastPage);
+
+ eventBus._off("nextpage", webViewerNextPage);
+
+ eventBus._off("previouspage", webViewerPreviousPage);
+
+ eventBus._off("zoomin", webViewerZoomIn);
+
+ eventBus._off("zoomout", webViewerZoomOut);
+
+ eventBus._off("zoomreset", webViewerZoomReset);
+
+ eventBus._off("pagenumberchanged", webViewerPageNumberChanged);
+
+ eventBus._off("scalechanged", webViewerScaleChanged);
+
+ eventBus._off("rotatecw", webViewerRotateCw);
+
+ eventBus._off("rotateccw", webViewerRotateCcw);
+
+ eventBus._off("optionalcontentconfig", webViewerOptionalContentConfig);
+
+ eventBus._off("switchscrollmode", webViewerSwitchScrollMode);
+
+ eventBus._off("scrollmodechanged", webViewerScrollModeChanged);
+
+ eventBus._off("switchspreadmode", webViewerSwitchSpreadMode);
+
+ eventBus._off("spreadmodechanged", webViewerSpreadModeChanged);
+
+ eventBus._off("documentproperties", webViewerDocumentProperties);
+
+ eventBus._off("find", webViewerFind);
+
+ eventBus._off("findfromurlhash", webViewerFindFromUrlHash);
+
+ eventBus._off("updatefindmatchescount", webViewerUpdateFindMatchesCount);
+
+ eventBus._off("updatefindcontrolstate", webViewerUpdateFindControlState);
+
+ if (_boundEvents.reportPageStatsPDFBug) {
+ eventBus._off("pagerendered", _boundEvents.reportPageStatsPDFBug);
+
+ eventBus._off("pagechanging", _boundEvents.reportPageStatsPDFBug);
+
+ _boundEvents.reportPageStatsPDFBug = null;
+ }
+
+ eventBus._off("fileinputchange", webViewerFileInputChange);
+
+ eventBus._off("openfile", webViewerOpenFile);
+
+ _boundEvents.beforePrint = null;
+ _boundEvents.afterPrint = null;
+ },
+
+ unbindWindowEvents() {
+ const {
+ _boundEvents
+ } = this;
+ window.removeEventListener("visibilitychange", webViewerVisibilityChange);
+ window.removeEventListener("wheel", webViewerWheel, {
+ passive: false
+ });
+ window.removeEventListener("touchstart", webViewerTouchStart, {
+ passive: false
+ });
+ window.removeEventListener("click", webViewerClick);
+ window.removeEventListener("keydown", webViewerKeyDown);
+ window.removeEventListener("keyup", webViewerKeyUp);
+ window.removeEventListener("resize", _boundEvents.windowResize);
+ window.removeEventListener("hashchange", _boundEvents.windowHashChange);
+ window.removeEventListener("beforeprint", _boundEvents.windowBeforePrint);
+ window.removeEventListener("afterprint", _boundEvents.windowAfterPrint);
+ window.removeEventListener("updatefromsandbox", _boundEvents.windowUpdateFromSandbox);
+ _boundEvents.windowResize = null;
+ _boundEvents.windowHashChange = null;
+ _boundEvents.windowBeforePrint = null;
+ _boundEvents.windowAfterPrint = null;
+ _boundEvents.windowUpdateFromSandbox = null;
+ },
+
+ accumulateWheelTicks(ticks) {
+ if (this._wheelUnusedTicks > 0 && ticks < 0 || this._wheelUnusedTicks < 0 && ticks > 0) {
+ this._wheelUnusedTicks = 0;
+ }
+
+ this._wheelUnusedTicks += ticks;
+ const wholeTicks = Math.sign(this._wheelUnusedTicks) * Math.floor(Math.abs(this._wheelUnusedTicks));
+ this._wheelUnusedTicks -= wholeTicks;
+ return wholeTicks;
+ },
+
+ get scriptingReady() {
+ return this._scriptingInstance?.ready || false;
+ }
+
+};
+exports.PDFViewerApplication = PDFViewerApplication;
+let validateFileURL;
+{
+ const HOSTED_VIEWER_ORIGINS = ["null", "http://mozilla.github.io", "https://mozilla.github.io"];
+
+ validateFileURL = function (file) {
+ if (file === undefined) {
+ return;
+ }
+
+ try {
+ const viewerOrigin = new URL(window.location.href).origin || "null";
+
+ if (HOSTED_VIEWER_ORIGINS.includes(viewerOrigin)) {
+ return;
+ }
+
+ const {
+ origin,
+ protocol
+ } = new URL(file, window.location.href);
+
+ if (origin !== viewerOrigin && protocol !== "blob:") {
+ throw new Error("file origin does not match viewer's");
+ }
+ } catch (ex) {
+ const message = ex && ex.message;
+ PDFViewerApplication.l10n.get("loading_error", null, "An error occurred while loading the PDF.").then(loadingErrorMessage => {
+ PDFViewerApplication.error(loadingErrorMessage, {
+ message
+ });
+ });
+ throw ex;
+ }
+ };
+}
+
+async function loadFakeWorker() {
+ if (!_pdfjsLib.GlobalWorkerOptions.workerSrc) {
+ _pdfjsLib.GlobalWorkerOptions.workerSrc = _app_options.AppOptions.get("workerSrc");
+ }
+
+ return (0, _pdfjsLib.loadScript)(_pdfjsLib.PDFWorker.getWorkerSrc());
+}
+
+function loadAndEnablePDFBug(enabledTabs) {
+ const appConfig = PDFViewerApplication.appConfig;
+ return (0, _pdfjsLib.loadScript)(appConfig.debuggerScriptPath).then(function () {
+ PDFBug.enable(enabledTabs);
+ PDFBug.init({
+ OPS: _pdfjsLib.OPS
+ }, appConfig.mainContainer);
+ });
+}
+
+function reportPageStatsPDFBug({
+ pageNumber
+}) {
+ if (typeof Stats === "undefined" || !Stats.enabled) {
+ return;
+ }
+
+ const pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1);
+ const pageStats = pageView && pageView.pdfPage && pageView.pdfPage.stats;
+
+ if (!pageStats) {
+ return;
+ }
+
+ Stats.add(pageNumber, pageStats);
+}
+
+function webViewerInitialized() {
+ const appConfig = PDFViewerApplication.appConfig;
+ let file;
+ const queryString = document.location.search.substring(1);
+ const params = (0, _ui_utils.parseQueryString)(queryString);
+ file = "file" in params ? params.file : _app_options.AppOptions.get("defaultUrl");
+ validateFileURL(file);
+ const fileInput = document.createElement("input");
+ fileInput.id = appConfig.openFileInputName;
+ fileInput.className = "fileInput";
+ fileInput.setAttribute("type", "file");
+ fileInput.oncontextmenu = _ui_utils.noContextMenuHandler;
+ document.body.appendChild(fileInput);
+
+ if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {
+ appConfig.toolbar.openFile.setAttribute("hidden", "true");
+ appConfig.secondaryToolbar.openFileButton.setAttribute("hidden", "true");
+ } else {
+ fileInput.value = null;
+ }
+
+ fileInput.addEventListener("change", function (evt) {
+ const files = evt.target.files;
+
+ if (!files || files.length === 0) {
+ return;
+ }
+
+ PDFViewerApplication.eventBus.dispatch("fileinputchange", {
+ source: this,
+ fileInput: evt.target
+ });
+ });
+ appConfig.mainContainer.addEventListener("dragover", function (evt) {
+ evt.preventDefault();
+ evt.dataTransfer.dropEffect = "move";
+ });
+ appConfig.mainContainer.addEventListener("drop", function (evt) {
+ evt.preventDefault();
+ const files = evt.dataTransfer.files;
+
+ if (!files || files.length === 0) {
+ return;
+ }
+
+ PDFViewerApplication.eventBus.dispatch("fileinputchange", {
+ source: this,
+ fileInput: evt.dataTransfer
+ });
+ });
+
+ if (!PDFViewerApplication.supportsDocumentFonts) {
+ _app_options.AppOptions.set("disableFontFace", true);
+
+ PDFViewerApplication.l10n.get("web_fonts_disabled", null, "Web fonts are disabled: unable to use embedded PDF fonts.").then(msg => {
+ console.warn(msg);
+ });
+ }
+
+ if (!PDFViewerApplication.supportsPrinting) {
+ appConfig.toolbar.print.classList.add("hidden");
+ appConfig.secondaryToolbar.printButton.classList.add("hidden");
+ }
+
+ if (!PDFViewerApplication.supportsFullscreen) {
+ appConfig.toolbar.presentationModeButton.classList.add("hidden");
+ appConfig.secondaryToolbar.presentationModeButton.classList.add("hidden");
+ }
+
+ if (PDFViewerApplication.supportsIntegratedFind) {
+ appConfig.toolbar.viewFind.classList.add("hidden");
+ }
+
+ appConfig.mainContainer.addEventListener("transitionend", function (evt) {
+ if (evt.target === this) {
+ PDFViewerApplication.eventBus.dispatch("resize", {
+ source: this
+ });
+ }
+ }, true);
+
+ try {
+ webViewerOpenFileViaURL(file);
+ } catch (reason) {
+ PDFViewerApplication.l10n.get("loading_error", null, "An error occurred while loading the PDF.").then(msg => {
+ PDFViewerApplication.error(msg, reason);
+ });
+ }
+}
+
+let webViewerOpenFileViaURL;
+{
+ webViewerOpenFileViaURL = function (file) {
+ if (file && file.lastIndexOf("file:", 0) === 0) {
+ PDFViewerApplication.setTitleUsingUrl(file);
+ const xhr = new XMLHttpRequest();
+
+ xhr.onload = function () {
+ PDFViewerApplication.open(new Uint8Array(xhr.response));
+ };
+
+ xhr.open("GET", file);
+ xhr.responseType = "arraybuffer";
+ xhr.send();
+ return;
+ }
+
+ if (file) {
+ PDFViewerApplication.open(file);
+ }
+ };
+}
+
+function webViewerResetPermissions() {
+ const {
+ appConfig
+ } = PDFViewerApplication;
+
+ if (!appConfig) {
+ return;
+ }
+
+ appConfig.viewerContainer.classList.remove(ENABLE_PERMISSIONS_CLASS);
+}
+
+function webViewerPageRendered({
+ pageNumber,
+ timestamp,
+ error
+}) {
+ if (pageNumber === PDFViewerApplication.page) {
+ PDFViewerApplication.toolbar.updateLoadingIndicatorState(false);
+ }
+
+ if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) {
+ const pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1);
+ const thumbnailView = PDFViewerApplication.pdfThumbnailViewer.getThumbnail(pageNumber - 1);
+
+ if (pageView && thumbnailView) {
+ thumbnailView.setImage(pageView);
+ }
+ }
+
+ if (error) {
+ PDFViewerApplication.l10n.get("rendering_error", null, "An error occurred while rendering the page.").then(msg => {
+ PDFViewerApplication.error(msg, error);
+ });
+ }
+
+ PDFViewerApplication.externalServices.reportTelemetry({
+ type: "pageInfo",
+ timestamp
+ });
+ PDFViewerApplication.pdfDocument.getStats().then(function (stats) {
+ PDFViewerApplication.externalServices.reportTelemetry({
+ type: "documentStats",
+ stats
+ });
+ });
+}
+
+function webViewerPageMode({
+ mode
+}) {
+ let view;
+
+ switch (mode) {
+ case "thumbs":
+ view = _ui_utils.SidebarView.THUMBS;
+ break;
+
+ case "bookmarks":
+ case "outline":
+ view = _ui_utils.SidebarView.OUTLINE;
+ break;
+
+ case "attachments":
+ view = _ui_utils.SidebarView.ATTACHMENTS;
+ break;
+
+ case "layers":
+ view = _ui_utils.SidebarView.LAYERS;
+ break;
+
+ case "none":
+ view = _ui_utils.SidebarView.NONE;
+ break;
+
+ default:
+ console.error('Invalid "pagemode" hash parameter: ' + mode);
+ return;
+ }
+
+ PDFViewerApplication.pdfSidebar.switchView(view, true);
+}
+
+function webViewerNamedAction(evt) {
+ switch (evt.action) {
+ case "GoToPage":
+ PDFViewerApplication.appConfig.toolbar.pageNumber.select();
+ break;
+
+ case "Find":
+ if (!PDFViewerApplication.supportsIntegratedFind) {
+ PDFViewerApplication.findBar.toggle();
+ }
+
+ break;
+
+ case "Print":
+ PDFViewerApplication.triggerPrinting();
+ break;
+
+ case "SaveAs":
+ webViewerSave();
+ break;
+ }
+}
+
+function webViewerPresentationModeChanged(evt) {
+ PDFViewerApplication.pdfViewer.presentationModeState = evt.state;
+}
+
+function webViewerSidebarViewChanged(evt) {
+ PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled = PDFViewerApplication.pdfSidebar.isThumbnailViewVisible;
+ const store = PDFViewerApplication.store;
+
+ if (store && PDFViewerApplication.isInitialViewSet) {
+ store.set("sidebarView", evt.view).catch(function () {});
+ }
+}
+
+function webViewerUpdateViewarea(evt) {
+ const location = evt.location,
+ store = PDFViewerApplication.store;
+
+ if (store && PDFViewerApplication.isInitialViewSet) {
+ store.setMultiple({
+ page: location.pageNumber,
+ zoom: location.scale,
+ scrollLeft: location.left,
+ scrollTop: location.top,
+ rotation: location.rotation
+ }).catch(function () {});
+ }
+
+ const href = PDFViewerApplication.pdfLinkService.getAnchorUrl(location.pdfOpenParams);
+ PDFViewerApplication.appConfig.toolbar.viewBookmark.href = href;
+ PDFViewerApplication.appConfig.secondaryToolbar.viewBookmarkButton.href = href;
+ const currentPage = PDFViewerApplication.pdfViewer.getPageView(PDFViewerApplication.page - 1);
+ const loading = (currentPage && currentPage.renderingState) !== _pdf_rendering_queue.RenderingStates.FINISHED;
+ PDFViewerApplication.toolbar.updateLoadingIndicatorState(loading);
+}
+
+function webViewerScrollModeChanged(evt) {
+ const store = PDFViewerApplication.store;
+
+ if (store && PDFViewerApplication.isInitialViewSet) {
+ store.set("scrollMode", evt.mode).catch(function () {});
+ }
+}
+
+function webViewerSpreadModeChanged(evt) {
+ const store = PDFViewerApplication.store;
+
+ if (store && PDFViewerApplication.isInitialViewSet) {
+ store.set("spreadMode", evt.mode).catch(function () {});
+ }
+}
+
+function webViewerResize() {
+ const {
+ pdfDocument,
+ pdfViewer
+ } = PDFViewerApplication;
+
+ if (!pdfDocument) {
+ return;
+ }
+
+ const currentScaleValue = pdfViewer.currentScaleValue;
+
+ if (currentScaleValue === "auto" || currentScaleValue === "page-fit" || currentScaleValue === "page-width") {
+ pdfViewer.currentScaleValue = currentScaleValue;
+ }
+
+ pdfViewer.update();
+}
+
+function webViewerHashchange(evt) {
+ const hash = evt.hash;
+
+ if (!hash) {
+ return;
+ }
+
+ if (!PDFViewerApplication.isInitialViewSet) {
+ PDFViewerApplication.initialBookmark = hash;
+ } else if (!PDFViewerApplication.pdfHistory.popStateInProgress) {
+ PDFViewerApplication.pdfLinkService.setHash(hash);
+ }
+}
+
+let webViewerFileInputChange, webViewerOpenFile;
+{
+ webViewerFileInputChange = function (evt) {
+ if (PDFViewerApplication.pdfViewer && PDFViewerApplication.pdfViewer.isInPresentationMode) {
+ return;
+ }
+
+ const file = evt.fileInput.files[0];
+
+ if (!_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) {
+ let url = URL.createObjectURL(file);
+
+ if (file.name) {
+ url = {
+ url,
+ originalUrl: file.name
+ };
+ }
+
+ PDFViewerApplication.open(url);
+ } else {
+ PDFViewerApplication.setTitleUsingUrl(file.name);
+ const fileReader = new FileReader();
+
+ fileReader.onload = function webViewerChangeFileReaderOnload(event) {
+ const buffer = event.target.result;
+ PDFViewerApplication.open(new Uint8Array(buffer));
+ };
+
+ fileReader.readAsArrayBuffer(file);
+ }
+
+ const appConfig = PDFViewerApplication.appConfig;
+ appConfig.toolbar.viewBookmark.setAttribute("hidden", "true");
+ appConfig.secondaryToolbar.viewBookmarkButton.setAttribute("hidden", "true");
+ appConfig.toolbar.download.setAttribute("hidden", "true");
+ appConfig.secondaryToolbar.downloadButton.setAttribute("hidden", "true");
+ };
+
+ webViewerOpenFile = function (evt) {
+ const openFileInputName = PDFViewerApplication.appConfig.openFileInputName;
+ document.getElementById(openFileInputName).click();
+ };
+}
+
+function webViewerPresentationMode() {
+ PDFViewerApplication.requestPresentationMode();
+}
+
+function webViewerPrint() {
+ PDFViewerApplication.triggerPrinting();
+}
+
+function webViewerDownload() {
+ PDFViewerApplication.downloadOrSave({
+ sourceEventType: "download"
+ });
+}
+
+function webViewerSave() {
+ PDFViewerApplication.downloadOrSave({
+ sourceEventType: "save"
+ });
+}
+
+function webViewerFirstPage() {
+ if (PDFViewerApplication.pdfDocument) {
+ PDFViewerApplication.page = 1;
+ }
+}
+
+function webViewerLastPage() {
+ if (PDFViewerApplication.pdfDocument) {
+ PDFViewerApplication.page = PDFViewerApplication.pagesCount;
+ }
+}
+
+function webViewerNextPage() {
+ PDFViewerApplication.pdfViewer.nextPage();
+}
+
+function webViewerPreviousPage() {
+ PDFViewerApplication.pdfViewer.previousPage();
+}
+
+function webViewerZoomIn() {
+ PDFViewerApplication.zoomIn();
+}
+
+function webViewerZoomOut() {
+ PDFViewerApplication.zoomOut();
+}
+
+function webViewerZoomReset() {
+ PDFViewerApplication.zoomReset();
+}
+
+function webViewerPageNumberChanged(evt) {
+ const pdfViewer = PDFViewerApplication.pdfViewer;
+
+ if (evt.value !== "") {
+ PDFViewerApplication.pdfLinkService.goToPage(evt.value);
+ }
+
+ if (evt.value !== pdfViewer.currentPageNumber.toString() && evt.value !== pdfViewer.currentPageLabel) {
+ PDFViewerApplication.toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);
+ }
+}
+
+function webViewerScaleChanged(evt) {
+ PDFViewerApplication.pdfViewer.currentScaleValue = evt.value;
+}
+
+function webViewerRotateCw() {
+ PDFViewerApplication.rotatePages(90);
+}
+
+function webViewerRotateCcw() {
+ PDFViewerApplication.rotatePages(-90);
+}
+
+function webViewerOptionalContentConfig(evt) {
+ PDFViewerApplication.pdfViewer.optionalContentConfigPromise = evt.promise;
+}
+
+function webViewerSwitchScrollMode(evt) {
+ PDFViewerApplication.pdfViewer.scrollMode = evt.mode;
+}
+
+function webViewerSwitchSpreadMode(evt) {
+ PDFViewerApplication.pdfViewer.spreadMode = evt.mode;
+}
+
+function webViewerDocumentProperties() {
+ PDFViewerApplication.pdfDocumentProperties.open();
+}
+
+function webViewerFind(evt) {
+ PDFViewerApplication.findController.executeCommand("find" + evt.type, {
+ query: evt.query,
+ phraseSearch: evt.phraseSearch,
+ caseSensitive: evt.caseSensitive,
+ entireWord: evt.entireWord,
+ highlightAll: evt.highlightAll,
+ findPrevious: evt.findPrevious
+ });
+}
+
+function webViewerFindFromUrlHash(evt) {
+ PDFViewerApplication.findController.executeCommand("find", {
+ query: evt.query,
+ phraseSearch: evt.phraseSearch,
+ caseSensitive: false,
+ entireWord: false,
+ highlightAll: true,
+ findPrevious: false
+ });
+}
+
+function webViewerUpdateFindMatchesCount({
+ matchesCount
+}) {
+ if (PDFViewerApplication.supportsIntegratedFind) {
+ PDFViewerApplication.externalServices.updateFindMatchesCount(matchesCount);
+ } else {
+ PDFViewerApplication.findBar.updateResultsCount(matchesCount);
+ }
+}
+
+function webViewerUpdateFindControlState({
+ state,
+ previous,
+ matchesCount,
+ rawQuery
+}) {
+ if (PDFViewerApplication.supportsIntegratedFind) {
+ PDFViewerApplication.externalServices.updateFindControlState({
+ result: state,
+ findPrevious: previous,
+ matchesCount,
+ rawQuery
+ });
+ } else {
+ PDFViewerApplication.findBar.updateUIState(state, previous, matchesCount);
+ }
+}
+
+function webViewerScaleChanging(evt) {
+ PDFViewerApplication.toolbar.setPageScale(evt.presetValue, evt.scale);
+ PDFViewerApplication.pdfViewer.update();
+}
+
+function webViewerRotationChanging(evt) {
+ PDFViewerApplication.pdfThumbnailViewer.pagesRotation = evt.pagesRotation;
+ PDFViewerApplication.forceRendering();
+ PDFViewerApplication.pdfViewer.currentPageNumber = evt.pageNumber;
+}
+
+function webViewerPageChanging({
+ pageNumber,
+ pageLabel
+}) {
+ PDFViewerApplication.toolbar.setPageNumber(pageNumber, pageLabel);
+ PDFViewerApplication.secondaryToolbar.setPageNumber(pageNumber);
+
+ if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) {
+ PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(pageNumber);
+ }
+}
+
+function webViewerVisibilityChange(evt) {
+ if (document.visibilityState === "visible") {
+ setZoomDisabledTimeout();
+ }
+}
+
+let zoomDisabledTimeout = null;
+
+function setZoomDisabledTimeout() {
+ if (zoomDisabledTimeout) {
+ clearTimeout(zoomDisabledTimeout);
+ }
+
+ zoomDisabledTimeout = setTimeout(function () {
+ zoomDisabledTimeout = null;
+ }, WHEEL_ZOOM_DISABLED_TIMEOUT);
+}
+
+function webViewerWheel(evt) {
+ const {
+ pdfViewer,
+ supportedMouseWheelZoomModifierKeys
+ } = PDFViewerApplication;
+
+ if (pdfViewer.isInPresentationMode) {
+ return;
+ }
+
+ if (evt.ctrlKey && supportedMouseWheelZoomModifierKeys.ctrlKey || evt.metaKey && supportedMouseWheelZoomModifierKeys.metaKey) {
+ evt.preventDefault();
+
+ if (zoomDisabledTimeout || document.visibilityState === "hidden") {
+ return;
+ }
+
+ const previousScale = pdfViewer.currentScale;
+ const delta = (0, _ui_utils.normalizeWheelEventDirection)(evt);
+ let ticks = 0;
+
+ if (evt.deltaMode === WheelEvent.DOM_DELTA_LINE || evt.deltaMode === WheelEvent.DOM_DELTA_PAGE) {
+ if (Math.abs(delta) >= 1) {
+ ticks = Math.sign(delta);
+ } else {
+ ticks = PDFViewerApplication.accumulateWheelTicks(delta);
+ }
+ } else {
+ const PIXELS_PER_LINE_SCALE = 30;
+ ticks = PDFViewerApplication.accumulateWheelTicks(delta / PIXELS_PER_LINE_SCALE);
+ }
+
+ if (ticks < 0) {
+ PDFViewerApplication.zoomOut(-ticks);
+ } else if (ticks > 0) {
+ PDFViewerApplication.zoomIn(ticks);
+ }
+
+ const currentScale = pdfViewer.currentScale;
+
+ if (previousScale !== currentScale) {
+ const scaleCorrectionFactor = currentScale / previousScale - 1;
+ const rect = pdfViewer.container.getBoundingClientRect();
+ const dx = evt.clientX - rect.left;
+ const dy = evt.clientY - rect.top;
+ pdfViewer.container.scrollLeft += dx * scaleCorrectionFactor;
+ pdfViewer.container.scrollTop += dy * scaleCorrectionFactor;
+ }
+ } else {
+ setZoomDisabledTimeout();
+ }
+}
+
+function webViewerTouchStart(evt) {
+ if (evt.touches.length > 1) {
+ evt.preventDefault();
+ }
+}
+
+function webViewerClick(evt) {
+ if (PDFViewerApplication.triggerDelayedFallback && PDFViewerApplication.pdfViewer.containsElement(evt.target)) {
+ PDFViewerApplication.triggerDelayedFallback();
+ }
+
+ if (!PDFViewerApplication.secondaryToolbar.isOpen) {
+ return;
+ }
+
+ const appConfig = PDFViewerApplication.appConfig;
+
+ if (PDFViewerApplication.pdfViewer.containsElement(evt.target) || appConfig.toolbar.container.contains(evt.target) && evt.target !== appConfig.secondaryToolbar.toggleButton) {
+ PDFViewerApplication.secondaryToolbar.close();
+ }
+}
+
+function webViewerKeyUp(evt) {
+ if (evt.keyCode === 9) {
+ if (PDFViewerApplication.triggerDelayedFallback) {
+ PDFViewerApplication.triggerDelayedFallback();
+ }
+ }
+}
+
+function webViewerKeyDown(evt) {
+ if (PDFViewerApplication.overlayManager.active) {
+ return;
+ }
+
+ let handled = false,
+ ensureViewerFocused = false;
+ const cmd = (evt.ctrlKey ? 1 : 0) | (evt.altKey ? 2 : 0) | (evt.shiftKey ? 4 : 0) | (evt.metaKey ? 8 : 0);
+ const pdfViewer = PDFViewerApplication.pdfViewer;
+ const isViewerInPresentationMode = pdfViewer && pdfViewer.isInPresentationMode;
+
+ if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) {
+ switch (evt.keyCode) {
+ case 70:
+ if (!PDFViewerApplication.supportsIntegratedFind && !evt.shiftKey) {
+ PDFViewerApplication.findBar.open();
+ handled = true;
+ }
+
+ break;
+
+ case 71:
+ if (!PDFViewerApplication.supportsIntegratedFind) {
+ const findState = PDFViewerApplication.findController.state;
+
+ if (findState) {
+ PDFViewerApplication.findController.executeCommand("findagain", {
+ query: findState.query,
+ phraseSearch: findState.phraseSearch,
+ caseSensitive: findState.caseSensitive,
+ entireWord: findState.entireWord,
+ highlightAll: findState.highlightAll,
+ findPrevious: cmd === 5 || cmd === 12
+ });
+ }
+
+ handled = true;
+ }
+
+ break;
+
+ case 61:
+ case 107:
+ case 187:
+ case 171:
+ if (!isViewerInPresentationMode) {
+ PDFViewerApplication.zoomIn();
+ }
+
+ handled = true;
+ break;
+
+ case 173:
+ case 109:
+ case 189:
+ if (!isViewerInPresentationMode) {
+ PDFViewerApplication.zoomOut();
+ }
+
+ handled = true;
+ break;
+
+ case 48:
+ case 96:
+ if (!isViewerInPresentationMode) {
+ setTimeout(function () {
+ PDFViewerApplication.zoomReset();
+ });
+ handled = false;
+ }
+
+ break;
+
+ case 38:
+ if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {
+ PDFViewerApplication.page = 1;
+ handled = true;
+ ensureViewerFocused = true;
+ }
+
+ break;
+
+ case 40:
+ if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) {
+ PDFViewerApplication.page = PDFViewerApplication.pagesCount;
+ handled = true;
+ ensureViewerFocused = true;
+ }
+
+ break;
+ }
+ }
+
+ const {
+ eventBus
+ } = PDFViewerApplication;
+
+ if (cmd === 1 || cmd === 8) {
+ switch (evt.keyCode) {
+ case 83:
+ eventBus.dispatch("download", {
+ source: window
+ });
+ handled = true;
+ break;
+
+ case 79:
+ {
+ eventBus.dispatch("openfile", {
+ source: window
+ });
+ handled = true;
+ }
+ break;
+ }
+ }
+
+ if (cmd === 3 || cmd === 10) {
+ switch (evt.keyCode) {
+ case 80:
+ PDFViewerApplication.requestPresentationMode();
+ handled = true;
+ break;
+
+ case 71:
+ PDFViewerApplication.appConfig.toolbar.pageNumber.select();
+ handled = true;
+ break;
+ }
+ }
+
+ if (handled) {
+ if (ensureViewerFocused && !isViewerInPresentationMode) {
+ pdfViewer.focus();
+ }
+
+ evt.preventDefault();
+ return;
+ }
+
+ const curElement = (0, _ui_utils.getActiveOrFocusedElement)();
+ const curElementTagName = curElement && curElement.tagName.toUpperCase();
+
+ if (curElementTagName === "INPUT" || curElementTagName === "TEXTAREA" || curElementTagName === "SELECT" || curElement && curElement.isContentEditable) {
+ if (evt.keyCode !== 27) {
+ return;
+ }
+ }
+
+ if (cmd === 0) {
+ let turnPage = 0,
+ turnOnlyIfPageFit = false;
+
+ switch (evt.keyCode) {
+ case 38:
+ case 33:
+ if (pdfViewer.isVerticalScrollbarEnabled) {
+ turnOnlyIfPageFit = true;
+ }
+
+ turnPage = -1;
+ break;
+
+ case 8:
+ if (!isViewerInPresentationMode) {
+ turnOnlyIfPageFit = true;
+ }
+
+ turnPage = -1;
+ break;
+
+ case 37:
+ if (pdfViewer.isHorizontalScrollbarEnabled) {
+ turnOnlyIfPageFit = true;
+ }
+
+ case 75:
+ case 80:
+ turnPage = -1;
+ break;
+
+ case 27:
+ if (PDFViewerApplication.secondaryToolbar.isOpen) {
+ PDFViewerApplication.secondaryToolbar.close();
+ handled = true;
+ }
+
+ if (!PDFViewerApplication.supportsIntegratedFind && PDFViewerApplication.findBar.opened) {
+ PDFViewerApplication.findBar.close();
+ handled = true;
+ }
+
+ break;
+
+ case 40:
+ case 34:
+ if (pdfViewer.isVerticalScrollbarEnabled) {
+ turnOnlyIfPageFit = true;
+ }
+
+ turnPage = 1;
+ break;
+
+ case 13:
+ case 32:
+ if (!isViewerInPresentationMode) {
+ turnOnlyIfPageFit = true;
+ }
+
+ turnPage = 1;
+ break;
+
+ case 39:
+ if (pdfViewer.isHorizontalScrollbarEnabled) {
+ turnOnlyIfPageFit = true;
+ }
+
+ case 74:
+ case 78:
+ turnPage = 1;
+ break;
+
+ case 36:
+ if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {
+ PDFViewerApplication.page = 1;
+ handled = true;
+ ensureViewerFocused = true;
+ }
+
+ break;
+
+ case 35:
+ if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) {
+ PDFViewerApplication.page = PDFViewerApplication.pagesCount;
+ handled = true;
+ ensureViewerFocused = true;
+ }
+
+ break;
+
+ case 83:
+ PDFViewerApplication.pdfCursorTools.switchTool(_pdf_cursor_tools.CursorTool.SELECT);
+ break;
+
+ case 72:
+ PDFViewerApplication.pdfCursorTools.switchTool(_pdf_cursor_tools.CursorTool.HAND);
+ break;
+
+ case 82:
+ PDFViewerApplication.rotatePages(90);
+ break;
+
+ case 115:
+ PDFViewerApplication.pdfSidebar.toggle();
+ break;
+ }
+
+ if (turnPage !== 0 && (!turnOnlyIfPageFit || pdfViewer.currentScaleValue === "page-fit")) {
+ if (turnPage > 0) {
+ pdfViewer.nextPage();
+ } else {
+ pdfViewer.previousPage();
+ }
+
+ handled = true;
+ }
+ }
+
+ if (cmd === 4) {
+ switch (evt.keyCode) {
+ case 13:
+ case 32:
+ if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== "page-fit") {
+ break;
+ }
+
+ if (PDFViewerApplication.page > 1) {
+ PDFViewerApplication.page--;
+ }
+
+ handled = true;
+ break;
+
+ case 82:
+ PDFViewerApplication.rotatePages(-90);
+ break;
+ }
+ }
+
+ if (!handled && !isViewerInPresentationMode) {
+ if (evt.keyCode >= 33 && evt.keyCode <= 40 || evt.keyCode === 32 && curElementTagName !== "BUTTON") {
+ ensureViewerFocused = true;
+ }
+ }
+
+ if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) {
+ pdfViewer.focus();
+ }
+
+ if (handled) {
+ evt.preventDefault();
+ }
+}
+
+function beforeUnload(evt) {
+ evt.preventDefault();
+ evt.returnValue = "";
+ return false;
+}
+
+function apiPageLayoutToSpreadMode(layout) {
+ switch (layout) {
+ case "SinglePage":
+ case "OneColumn":
+ return _ui_utils.SpreadMode.NONE;
+
+ case "TwoColumnLeft":
+ case "TwoPageLeft":
+ return _ui_utils.SpreadMode.ODD;
+
+ case "TwoColumnRight":
+ case "TwoPageRight":
+ return _ui_utils.SpreadMode.EVEN;
+ }
+
+ return _ui_utils.SpreadMode.NONE;
+}
+
+function apiPageModeToSidebarView(mode) {
+ switch (mode) {
+ case "UseNone":
+ return _ui_utils.SidebarView.NONE;
+
+ case "UseThumbs":
+ return _ui_utils.SidebarView.THUMBS;
+
+ case "UseOutlines":
+ return _ui_utils.SidebarView.OUTLINE;
+
+ case "UseAttachments":
+ return _ui_utils.SidebarView.ATTACHMENTS;
+
+ case "UseOC":
+ return _ui_utils.SidebarView.LAYERS;
+ }
+
+ return _ui_utils.SidebarView.NONE;
+}
+
+const PDFPrintServiceFactory = {
+ instance: {
+ supportsPrinting: false,
+
+ createPrintService() {
+ throw new Error("Not implemented: createPrintService");
+ }
+
+ }
+};
+exports.PDFPrintServiceFactory = PDFPrintServiceFactory;
+
+/***/ }),
+/* 4 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.approximateFraction = approximateFraction;
+exports.backtrackBeforeAllVisibleElements = backtrackBeforeAllVisibleElements;
+exports.binarySearchFirstItem = binarySearchFirstItem;
+exports.getActiveOrFocusedElement = getActiveOrFocusedElement;
+exports.getOutputScale = getOutputScale;
+exports.getPageSizeInches = getPageSizeInches;
+exports.getPDFFileNameFromURL = getPDFFileNameFromURL;
+exports.getVisibleElements = getVisibleElements;
+exports.isPortraitOrientation = isPortraitOrientation;
+exports.isValidRotation = isValidRotation;
+exports.isValidScrollMode = isValidScrollMode;
+exports.isValidSpreadMode = isValidSpreadMode;
+exports.moveToEndOfArray = moveToEndOfArray;
+exports.noContextMenuHandler = noContextMenuHandler;
+exports.normalizeWheelEventDelta = normalizeWheelEventDelta;
+exports.normalizeWheelEventDirection = normalizeWheelEventDirection;
+exports.parseQueryString = parseQueryString;
+exports.roundToDivide = roundToDivide;
+exports.scrollIntoView = scrollIntoView;
+exports.waitOnEventOrTimeout = waitOnEventOrTimeout;
+exports.watchScroll = watchScroll;
+exports.WaitOnType = exports.VERTICAL_PADDING = exports.UNKNOWN_SCALE = exports.TextLayerMode = exports.SpreadMode = exports.SidebarView = exports.ScrollMode = exports.SCROLLBAR_PADDING = exports.RendererType = exports.ProgressBar = exports.PresentationModeState = exports.NullL10n = exports.MIN_SCALE = exports.MAX_SCALE = exports.MAX_AUTO_SCALE = exports.EventBus = exports.DEFAULT_SCALE_VALUE = exports.DEFAULT_SCALE = exports.CSS_UNITS = exports.AutoPrintRegExp = exports.animationStarted = void 0;
+const CSS_UNITS = 96.0 / 72.0;
+exports.CSS_UNITS = CSS_UNITS;
+const DEFAULT_SCALE_VALUE = "auto";
+exports.DEFAULT_SCALE_VALUE = DEFAULT_SCALE_VALUE;
+const DEFAULT_SCALE = 1.0;
+exports.DEFAULT_SCALE = DEFAULT_SCALE;
+const MIN_SCALE = 0.1;
+exports.MIN_SCALE = MIN_SCALE;
+const MAX_SCALE = 10.0;
+exports.MAX_SCALE = MAX_SCALE;
+const UNKNOWN_SCALE = 0;
+exports.UNKNOWN_SCALE = UNKNOWN_SCALE;
+const MAX_AUTO_SCALE = 1.25;
+exports.MAX_AUTO_SCALE = MAX_AUTO_SCALE;
+const SCROLLBAR_PADDING = 40;
+exports.SCROLLBAR_PADDING = SCROLLBAR_PADDING;
+const VERTICAL_PADDING = 5;
+exports.VERTICAL_PADDING = VERTICAL_PADDING;
+const LOADINGBAR_END_OFFSET_VAR = "--loadingBar-end-offset";
+const PresentationModeState = {
+ UNKNOWN: 0,
+ NORMAL: 1,
+ CHANGING: 2,
+ FULLSCREEN: 3
+};
+exports.PresentationModeState = PresentationModeState;
+const SidebarView = {
+ UNKNOWN: -1,
+ NONE: 0,
+ THUMBS: 1,
+ OUTLINE: 2,
+ ATTACHMENTS: 3,
+ LAYERS: 4
+};
+exports.SidebarView = SidebarView;
+const RendererType = {
+ CANVAS: "canvas",
+ SVG: "svg"
+};
+exports.RendererType = RendererType;
+const TextLayerMode = {
+ DISABLE: 0,
+ ENABLE: 1,
+ ENABLE_ENHANCE: 2
+};
+exports.TextLayerMode = TextLayerMode;
+const ScrollMode = {
+ UNKNOWN: -1,
+ VERTICAL: 0,
+ HORIZONTAL: 1,
+ WRAPPED: 2
+};
+exports.ScrollMode = ScrollMode;
+const SpreadMode = {
+ UNKNOWN: -1,
+ NONE: 0,
+ ODD: 1,
+ EVEN: 2
+};
+exports.SpreadMode = SpreadMode;
+const AutoPrintRegExp = /\bprint\s*\(/;
+exports.AutoPrintRegExp = AutoPrintRegExp;
+
+function formatL10nValue(text, args) {
+ if (!args) {
+ return text;
+ }
+
+ return text.replace(/\{\{\s*(\w+)\s*\}\}/g, (all, name) => {
+ return name in args ? args[name] : "{{" + name + "}}";
+ });
+}
+
+const NullL10n = {
+ async getLanguage() {
+ return "en-us";
+ },
+
+ async getDirection() {
+ return "ltr";
+ },
+
+ async get(property, args, fallback) {
+ return formatL10nValue(fallback, args);
+ },
+
+ async translate(element) {}
+
+};
+exports.NullL10n = NullL10n;
+
+function getOutputScale(ctx) {
+ const devicePixelRatio = window.devicePixelRatio || 1;
+ const backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;
+ const pixelRatio = devicePixelRatio / backingStoreRatio;
+ return {
+ sx: pixelRatio,
+ sy: pixelRatio,
+ scaled: pixelRatio !== 1
+ };
+}
+
+function scrollIntoView(element, spot, skipOverflowHiddenElements = false) {
+ let parent = element.offsetParent;
+
+ if (!parent) {
+ console.error("offsetParent is not set -- cannot scroll");
+ return;
+ }
+
+ let offsetY = element.offsetTop + element.clientTop;
+ let offsetX = element.offsetLeft + element.clientLeft;
+
+ while (parent.clientHeight === parent.scrollHeight && parent.clientWidth === parent.scrollWidth || skipOverflowHiddenElements && getComputedStyle(parent).overflow === "hidden") {
+ if (parent.dataset._scaleY) {
+ offsetY /= parent.dataset._scaleY;
+ offsetX /= parent.dataset._scaleX;
+ }
+
+ offsetY += parent.offsetTop;
+ offsetX += parent.offsetLeft;
+ parent = parent.offsetParent;
+
+ if (!parent) {
+ return;
+ }
+ }
+
+ if (spot) {
+ if (spot.top !== undefined) {
+ offsetY += spot.top;
+ }
+
+ if (spot.left !== undefined) {
+ offsetX += spot.left;
+ parent.scrollLeft = offsetX;
+ }
+ }
+
+ parent.scrollTop = offsetY;
+}
+
+function watchScroll(viewAreaElement, callback) {
+ const debounceScroll = function (evt) {
+ if (rAF) {
+ return;
+ }
+
+ rAF = window.requestAnimationFrame(function viewAreaElementScrolled() {
+ rAF = null;
+ const currentX = viewAreaElement.scrollLeft;
+ const lastX = state.lastX;
+
+ if (currentX !== lastX) {
+ state.right = currentX > lastX;
+ }
+
+ state.lastX = currentX;
+ const currentY = viewAreaElement.scrollTop;
+ const lastY = state.lastY;
+
+ if (currentY !== lastY) {
+ state.down = currentY > lastY;
+ }
+
+ state.lastY = currentY;
+ callback(state);
+ });
+ };
+
+ const state = {
+ right: true,
+ down: true,
+ lastX: viewAreaElement.scrollLeft,
+ lastY: viewAreaElement.scrollTop,
+ _eventHandler: debounceScroll
+ };
+ let rAF = null;
+ viewAreaElement.addEventListener("scroll", debounceScroll, true);
+ return state;
+}
+
+function parseQueryString(query) {
+ const parts = query.split("&");
+ const params = Object.create(null);
+
+ for (let i = 0, ii = parts.length; i < ii; ++i) {
+ const param = parts[i].split("=");
+ const key = param[0].toLowerCase();
+ const value = param.length > 1 ? param[1] : null;
+ params[decodeURIComponent(key)] = decodeURIComponent(value);
+ }
+
+ return params;
+}
+
+function binarySearchFirstItem(items, condition) {
+ let minIndex = 0;
+ let maxIndex = items.length - 1;
+
+ if (maxIndex < 0 || !condition(items[maxIndex])) {
+ return items.length;
+ }
+
+ if (condition(items[minIndex])) {
+ return minIndex;
+ }
+
+ while (minIndex < maxIndex) {
+ const currentIndex = minIndex + maxIndex >> 1;
+ const currentItem = items[currentIndex];
+
+ if (condition(currentItem)) {
+ maxIndex = currentIndex;
+ } else {
+ minIndex = currentIndex + 1;
+ }
+ }
+
+ return minIndex;
+}
+
+function approximateFraction(x) {
+ if (Math.floor(x) === x) {
+ return [x, 1];
+ }
+
+ const xinv = 1 / x;
+ const limit = 8;
+
+ if (xinv > limit) {
+ return [1, limit];
+ } else if (Math.floor(xinv) === xinv) {
+ return [1, xinv];
+ }
+
+ const x_ = x > 1 ? xinv : x;
+ let a = 0,
+ b = 1,
+ c = 1,
+ d = 1;
+
+ while (true) {
+ const p = a + c,
+ q = b + d;
+
+ if (q > limit) {
+ break;
+ }
+
+ if (x_ <= p / q) {
+ c = p;
+ d = q;
+ } else {
+ a = p;
+ b = q;
+ }
+ }
+
+ let result;
+
+ if (x_ - a / b < c / d - x_) {
+ result = x_ === x ? [a, b] : [b, a];
+ } else {
+ result = x_ === x ? [c, d] : [d, c];
+ }
+
+ return result;
+}
+
+function roundToDivide(x, div) {
+ const r = x % div;
+ return r === 0 ? x : Math.round(x - r + div);
+}
+
+function getPageSizeInches({
+ view,
+ userUnit,
+ rotate
+}) {
+ const [x1, y1, x2, y2] = view;
+ const changeOrientation = rotate % 180 !== 0;
+ const width = (x2 - x1) / 72 * userUnit;
+ const height = (y2 - y1) / 72 * userUnit;
+ return {
+ width: changeOrientation ? height : width,
+ height: changeOrientation ? width : height
+ };
+}
+
+function backtrackBeforeAllVisibleElements(index, views, top) {
+ if (index < 2) {
+ return index;
+ }
+
+ let elt = views[index].div;
+ let pageTop = elt.offsetTop + elt.clientTop;
+
+ if (pageTop >= top) {
+ elt = views[index - 1].div;
+ pageTop = elt.offsetTop + elt.clientTop;
+ }
+
+ for (let i = index - 2; i >= 0; --i) {
+ elt = views[i].div;
+
+ if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) {
+ break;
+ }
+
+ index = i;
+ }
+
+ return index;
+}
+
+function getVisibleElements({
+ scrollEl,
+ views,
+ sortByVisibility = false,
+ horizontal = false,
+ rtl = false
+}) {
+ const top = scrollEl.scrollTop,
+ bottom = top + scrollEl.clientHeight;
+ const left = scrollEl.scrollLeft,
+ right = left + scrollEl.clientWidth;
+
+ function isElementBottomAfterViewTop(view) {
+ const element = view.div;
+ const elementBottom = element.offsetTop + element.clientTop + element.clientHeight;
+ return elementBottom > top;
+ }
+
+ function isElementNextAfterViewHorizontally(view) {
+ const element = view.div;
+ const elementLeft = element.offsetLeft + element.clientLeft;
+ const elementRight = elementLeft + element.clientWidth;
+ return rtl ? elementLeft < right : elementRight > left;
+ }
+
+ const visible = [],
+ numViews = views.length;
+ let firstVisibleElementInd = binarySearchFirstItem(views, horizontal ? isElementNextAfterViewHorizontally : isElementBottomAfterViewTop);
+
+ if (firstVisibleElementInd > 0 && firstVisibleElementInd < numViews && !horizontal) {
+ firstVisibleElementInd = backtrackBeforeAllVisibleElements(firstVisibleElementInd, views, top);
+ }
+
+ let lastEdge = horizontal ? right : -1;
+
+ for (let i = firstVisibleElementInd; i < numViews; i++) {
+ const view = views[i],
+ element = view.div;
+ const currentWidth = element.offsetLeft + element.clientLeft;
+ const currentHeight = element.offsetTop + element.clientTop;
+ const viewWidth = element.clientWidth,
+ viewHeight = element.clientHeight;
+ const viewRight = currentWidth + viewWidth;
+ const viewBottom = currentHeight + viewHeight;
+
+ if (lastEdge === -1) {
+ if (viewBottom >= bottom) {
+ lastEdge = viewBottom;
+ }
+ } else if ((horizontal ? currentWidth : currentHeight) > lastEdge) {
+ break;
+ }
+
+ if (viewBottom <= top || currentHeight >= bottom || viewRight <= left || currentWidth >= right) {
+ continue;
+ }
+
+ const hiddenHeight = Math.max(0, top - currentHeight) + Math.max(0, viewBottom - bottom);
+ const hiddenWidth = Math.max(0, left - currentWidth) + Math.max(0, viewRight - right);
+ const fractionHeight = (viewHeight - hiddenHeight) / viewHeight,
+ fractionWidth = (viewWidth - hiddenWidth) / viewWidth;
+ const percent = fractionHeight * fractionWidth * 100 | 0;
+ visible.push({
+ id: view.id,
+ x: currentWidth,
+ y: currentHeight,
+ view,
+ percent,
+ widthPercent: fractionWidth * 100 | 0
+ });
+ }
+
+ const first = visible[0],
+ last = visible[visible.length - 1];
+
+ if (sortByVisibility) {
+ visible.sort(function (a, b) {
+ const pc = a.percent - b.percent;
+
+ if (Math.abs(pc) > 0.001) {
+ return -pc;
+ }
+
+ return a.id - b.id;
+ });
+ }
+
+ return {
+ first,
+ last,
+ views: visible
+ };
+}
+
+function noContextMenuHandler(evt) {
+ evt.preventDefault();
+}
+
+function isDataSchema(url) {
+ let i = 0;
+ const ii = url.length;
+
+ while (i < ii && url[i].trim() === "") {
+ i++;
+ }
+
+ return url.substring(i, i + 5).toLowerCase() === "data:";
+}
+
+function getPDFFileNameFromURL(url, defaultFilename = "document.pdf") {
+ if (typeof url !== "string") {
+ return defaultFilename;
+ }
+
+ if (isDataSchema(url)) {
+ console.warn("getPDFFileNameFromURL: " + 'ignoring "data:" URL for performance reasons.');
+ return defaultFilename;
+ }
+
+ const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/;
+ const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i;
+ const splitURI = reURI.exec(url);
+ let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]);
+
+ if (suggestedFilename) {
+ suggestedFilename = suggestedFilename[0];
+
+ if (suggestedFilename.includes("%")) {
+ try {
+ suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0];
+ } catch (ex) {}
+ }
+ }
+
+ return suggestedFilename || defaultFilename;
+}
+
+function normalizeWheelEventDirection(evt) {
+ let delta = Math.sqrt(evt.deltaX * evt.deltaX + evt.deltaY * evt.deltaY);
+ const angle = Math.atan2(evt.deltaY, evt.deltaX);
+
+ if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) {
+ delta = -delta;
+ }
+
+ return delta;
+}
+
+function normalizeWheelEventDelta(evt) {
+ let delta = normalizeWheelEventDirection(evt);
+ const MOUSE_DOM_DELTA_PIXEL_MODE = 0;
+ const MOUSE_DOM_DELTA_LINE_MODE = 1;
+ const MOUSE_PIXELS_PER_LINE = 30;
+ const MOUSE_LINES_PER_PAGE = 30;
+
+ if (evt.deltaMode === MOUSE_DOM_DELTA_PIXEL_MODE) {
+ delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE;
+ } else if (evt.deltaMode === MOUSE_DOM_DELTA_LINE_MODE) {
+ delta /= MOUSE_LINES_PER_PAGE;
+ }
+
+ return delta;
+}
+
+function isValidRotation(angle) {
+ return Number.isInteger(angle) && angle % 90 === 0;
+}
+
+function isValidScrollMode(mode) {
+ return Number.isInteger(mode) && Object.values(ScrollMode).includes(mode) && mode !== ScrollMode.UNKNOWN;
+}
+
+function isValidSpreadMode(mode) {
+ return Number.isInteger(mode) && Object.values(SpreadMode).includes(mode) && mode !== SpreadMode.UNKNOWN;
+}
+
+function isPortraitOrientation(size) {
+ return size.width <= size.height;
+}
+
+const WaitOnType = {
+ EVENT: "event",
+ TIMEOUT: "timeout"
+};
+exports.WaitOnType = WaitOnType;
+
+function waitOnEventOrTimeout({
+ target,
+ name,
+ delay = 0
+}) {
+ return new Promise(function (resolve, reject) {
+ if (typeof target !== "object" || !(name && typeof name === "string") || !(Number.isInteger(delay) && delay >= 0)) {
+ throw new Error("waitOnEventOrTimeout - invalid parameters.");
+ }
+
+ function handler(type) {
+ if (target instanceof EventBus) {
+ target._off(name, eventHandler);
+ } else {
+ target.removeEventListener(name, eventHandler);
+ }
+
+ if (timeout) {
+ clearTimeout(timeout);
+ }
+
+ resolve(type);
+ }
+
+ const eventHandler = handler.bind(null, WaitOnType.EVENT);
+
+ if (target instanceof EventBus) {
+ target._on(name, eventHandler);
+ } else {
+ target.addEventListener(name, eventHandler);
+ }
+
+ const timeoutHandler = handler.bind(null, WaitOnType.TIMEOUT);
+ const timeout = setTimeout(timeoutHandler, delay);
+ });
+}
+
+const animationStarted = new Promise(function (resolve) {
+ window.requestAnimationFrame(resolve);
+});
+exports.animationStarted = animationStarted;
+
+function dispatchDOMEvent(eventName, args = null) {
+ throw new Error("Not implemented: dispatchDOMEvent");
+}
+
+class EventBus {
+ constructor(options) {
+ this._listeners = Object.create(null);
+ }
+
+ on(eventName, listener, options = null) {
+ this._on(eventName, listener, {
+ external: true,
+ once: options?.once
+ });
+ }
+
+ off(eventName, listener, options = null) {
+ this._off(eventName, listener, {
+ external: true,
+ once: options?.once
+ });
+ }
+
+ dispatch(eventName) {
+ const eventListeners = this._listeners[eventName];
+
+ if (!eventListeners || eventListeners.length === 0) {
+ return;
+ }
+
+ const args = Array.prototype.slice.call(arguments, 1);
+ let externalListeners;
+ eventListeners.slice(0).forEach(({
+ listener,
+ external,
+ once
+ }) => {
+ if (once) {
+ this._off(eventName, listener);
+ }
+
+ if (external) {
+ (externalListeners || (externalListeners = [])).push(listener);
+ return;
+ }
+
+ listener.apply(null, args);
+ });
+
+ if (externalListeners) {
+ externalListeners.forEach(listener => {
+ listener.apply(null, args);
+ });
+ externalListeners = null;
+ }
+ }
+
+ _on(eventName, listener, options = null) {
+ var _this$_listeners;
+
+ const eventListeners = (_this$_listeners = this._listeners)[eventName] || (_this$_listeners[eventName] = []);
+ eventListeners.push({
+ listener,
+ external: options?.external === true,
+ once: options?.once === true
+ });
+ }
+
+ _off(eventName, listener, options = null) {
+ const eventListeners = this._listeners[eventName];
+
+ if (!eventListeners) {
+ return;
+ }
+
+ for (let i = 0, ii = eventListeners.length; i < ii; i++) {
+ if (eventListeners[i].listener === listener) {
+ eventListeners.splice(i, 1);
+ return;
+ }
+ }
+ }
+
+}
+
+exports.EventBus = EventBus;
+
+function clamp(v, min, max) {
+ return Math.min(Math.max(v, min), max);
+}
+
+class ProgressBar {
+ constructor(id, {
+ height,
+ width,
+ units
+ } = {}) {
+ this.visible = true;
+ this.div = document.querySelector(id + " .progress");
+ this.bar = this.div.parentNode;
+ this.height = height || 100;
+ this.width = width || 100;
+ this.units = units || "%";
+ this.div.style.height = this.height + this.units;
+ this.percent = 0;
+ }
+
+ _updateBar() {
+ if (this._indeterminate) {
+ this.div.classList.add("indeterminate");
+ this.div.style.width = this.width + this.units;
+ return;
+ }
+
+ this.div.classList.remove("indeterminate");
+ const progressSize = this.width * this._percent / 100;
+ this.div.style.width = progressSize + this.units;
+ }
+
+ get percent() {
+ return this._percent;
+ }
+
+ set percent(val) {
+ this._indeterminate = isNaN(val);
+ this._percent = clamp(val, 0, 100);
+
+ this._updateBar();
+ }
+
+ setWidth(viewer) {
+ if (!viewer) {
+ return;
+ }
+
+ const container = viewer.parentNode;
+ const scrollbarWidth = container.offsetWidth - viewer.offsetWidth;
+
+ if (scrollbarWidth > 0) {
+ const doc = document.documentElement;
+ doc.style.setProperty(LOADINGBAR_END_OFFSET_VAR, `${scrollbarWidth}px`);
+ }
+ }
+
+ hide() {
+ if (!this.visible) {
+ return;
+ }
+
+ this.visible = false;
+ this.bar.classList.add("hidden");
+ }
+
+ show() {
+ if (this.visible) {
+ return;
+ }
+
+ this.visible = true;
+ this.bar.classList.remove("hidden");
+ }
+
+}
+
+exports.ProgressBar = ProgressBar;
+
+function moveToEndOfArray(arr, condition) {
+ const moved = [],
+ len = arr.length;
+ let write = 0;
+
+ for (let read = 0; read < len; ++read) {
+ if (condition(arr[read])) {
+ moved.push(arr[read]);
+ } else {
+ arr[write] = arr[read];
+ ++write;
+ }
+ }
+
+ for (let read = 0; write < len; ++read, ++write) {
+ arr[write] = moved[read];
+ }
+}
+
+function getActiveOrFocusedElement() {
+ let curRoot = document;
+ let curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(":focus");
+
+ while (curActiveOrFocused && curActiveOrFocused.shadowRoot) {
+ curRoot = curActiveOrFocused.shadowRoot;
+ curActiveOrFocused = curRoot.activeElement || curRoot.querySelector(":focus");
+ }
+
+ return curActiveOrFocused;
+}
+
+/***/ }),
+/* 5 */
+/***/ ((module) => {
+
+
+
+let pdfjsLib;
+
+if (typeof window !== "undefined" && window["pdfjs-dist/build/pdf"]) {
+ pdfjsLib = window["pdfjs-dist/build/pdf"];
+} else {
+ pdfjsLib = require("../build/pdf.js");
+}
+
+module.exports = pdfjsLib;
+
+/***/ }),
+/* 6 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFCursorTools = exports.CursorTool = void 0;
+
+var _grab_to_pan = __webpack_require__(7);
+
+var _ui_utils = __webpack_require__(4);
+
+const CursorTool = {
+ SELECT: 0,
+ HAND: 1,
+ ZOOM: 2
+};
+exports.CursorTool = CursorTool;
+
+class PDFCursorTools {
+ constructor({
+ container,
+ eventBus,
+ cursorToolOnLoad = CursorTool.SELECT
+ }) {
+ this.container = container;
+ this.eventBus = eventBus;
+ this.active = CursorTool.SELECT;
+ this.activeBeforePresentationMode = null;
+ this.handTool = new _grab_to_pan.GrabToPan({
+ element: this.container
+ });
+
+ this._addEventListeners();
+
+ Promise.resolve().then(() => {
+ this.switchTool(cursorToolOnLoad);
+ });
+ }
+
+ get activeTool() {
+ return this.active;
+ }
+
+ switchTool(tool) {
+ if (this.activeBeforePresentationMode !== null) {
+ return;
+ }
+
+ if (tool === this.active) {
+ return;
+ }
+
+ const disableActiveTool = () => {
+ switch (this.active) {
+ case CursorTool.SELECT:
+ break;
+
+ case CursorTool.HAND:
+ this.handTool.deactivate();
+ break;
+
+ case CursorTool.ZOOM:
+ }
+ };
+
+ switch (tool) {
+ case CursorTool.SELECT:
+ disableActiveTool();
+ break;
+
+ case CursorTool.HAND:
+ disableActiveTool();
+ this.handTool.activate();
+ break;
+
+ case CursorTool.ZOOM:
+ default:
+ console.error(`switchTool: "${tool}" is an unsupported value.`);
+ return;
+ }
+
+ this.active = tool;
+
+ this._dispatchEvent();
+ }
+
+ _dispatchEvent() {
+ this.eventBus.dispatch("cursortoolchanged", {
+ source: this,
+ tool: this.active
+ });
+ }
+
+ _addEventListeners() {
+ this.eventBus._on("switchcursortool", evt => {
+ this.switchTool(evt.tool);
+ });
+
+ this.eventBus._on("presentationmodechanged", evt => {
+ switch (evt.state) {
+ case _ui_utils.PresentationModeState.CHANGING:
+ break;
+
+ case _ui_utils.PresentationModeState.FULLSCREEN:
+ {
+ const previouslyActive = this.active;
+ this.switchTool(CursorTool.SELECT);
+ this.activeBeforePresentationMode = previouslyActive;
+ break;
+ }
+
+ case _ui_utils.PresentationModeState.NORMAL:
+ {
+ const previouslyActive = this.activeBeforePresentationMode;
+ this.activeBeforePresentationMode = null;
+ this.switchTool(previouslyActive);
+ break;
+ }
+ }
+ });
+ }
+
+}
+
+exports.PDFCursorTools = PDFCursorTools;
+
+/***/ }),
+/* 7 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.GrabToPan = GrabToPan;
+
+function GrabToPan(options) {
+ this.element = options.element;
+ this.document = options.element.ownerDocument;
+
+ if (typeof options.ignoreTarget === "function") {
+ this.ignoreTarget = options.ignoreTarget;
+ }
+
+ this.onActiveChanged = options.onActiveChanged;
+ this.activate = this.activate.bind(this);
+ this.deactivate = this.deactivate.bind(this);
+ this.toggle = this.toggle.bind(this);
+ this._onmousedown = this._onmousedown.bind(this);
+ this._onmousemove = this._onmousemove.bind(this);
+ this._endPan = this._endPan.bind(this);
+ const overlay = this.overlay = document.createElement("div");
+ overlay.className = "grab-to-pan-grabbing";
+}
+
+GrabToPan.prototype = {
+ CSS_CLASS_GRAB: "grab-to-pan-grab",
+ activate: function GrabToPan_activate() {
+ if (!this.active) {
+ this.active = true;
+ this.element.addEventListener("mousedown", this._onmousedown, true);
+ this.element.classList.add(this.CSS_CLASS_GRAB);
+
+ if (this.onActiveChanged) {
+ this.onActiveChanged(true);
+ }
+ }
+ },
+ deactivate: function GrabToPan_deactivate() {
+ if (this.active) {
+ this.active = false;
+ this.element.removeEventListener("mousedown", this._onmousedown, true);
+
+ this._endPan();
+
+ this.element.classList.remove(this.CSS_CLASS_GRAB);
+
+ if (this.onActiveChanged) {
+ this.onActiveChanged(false);
+ }
+ }
+ },
+ toggle: function GrabToPan_toggle() {
+ if (this.active) {
+ this.deactivate();
+ } else {
+ this.activate();
+ }
+ },
+ ignoreTarget: function GrabToPan_ignoreTarget(node) {
+ return node[matchesSelector]("a[href], a[href] *, input, textarea, button, button *, select, option");
+ },
+ _onmousedown: function GrabToPan__onmousedown(event) {
+ if (event.button !== 0 || this.ignoreTarget(event.target)) {
+ return;
+ }
+
+ if (event.originalTarget) {
+ try {
+ event.originalTarget.tagName;
+ } catch (e) {
+ return;
+ }
+ }
+
+ this.scrollLeftStart = this.element.scrollLeft;
+ this.scrollTopStart = this.element.scrollTop;
+ this.clientXStart = event.clientX;
+ this.clientYStart = event.clientY;
+ this.document.addEventListener("mousemove", this._onmousemove, true);
+ this.document.addEventListener("mouseup", this._endPan, true);
+ this.element.addEventListener("scroll", this._endPan, true);
+ event.preventDefault();
+ event.stopPropagation();
+ const focusedElement = document.activeElement;
+
+ if (focusedElement && !focusedElement.contains(event.target)) {
+ focusedElement.blur();
+ }
+ },
+ _onmousemove: function GrabToPan__onmousemove(event) {
+ this.element.removeEventListener("scroll", this._endPan, true);
+
+ if (isLeftMouseReleased(event)) {
+ this._endPan();
+
+ return;
+ }
+
+ const xDiff = event.clientX - this.clientXStart;
+ const yDiff = event.clientY - this.clientYStart;
+ const scrollTop = this.scrollTopStart - yDiff;
+ const scrollLeft = this.scrollLeftStart - xDiff;
+
+ if (this.element.scrollTo) {
+ this.element.scrollTo({
+ top: scrollTop,
+ left: scrollLeft,
+ behavior: "instant"
+ });
+ } else {
+ this.element.scrollTop = scrollTop;
+ this.element.scrollLeft = scrollLeft;
+ }
+
+ if (!this.overlay.parentNode) {
+ document.body.appendChild(this.overlay);
+ }
+ },
+ _endPan: function GrabToPan__endPan() {
+ this.element.removeEventListener("scroll", this._endPan, true);
+ this.document.removeEventListener("mousemove", this._onmousemove, true);
+ this.document.removeEventListener("mouseup", this._endPan, true);
+ this.overlay.remove();
+ }
+};
+let matchesSelector;
+["webkitM", "mozM", "m"].some(function (prefix) {
+ let name = prefix + "atches";
+
+ if (name in document.documentElement) {
+ matchesSelector = name;
+ }
+
+ name += "Selector";
+
+ if (name in document.documentElement) {
+ matchesSelector = name;
+ }
+
+ return matchesSelector;
+});
+const isNotIEorIsIE10plus = !document.documentMode || document.documentMode > 9;
+const chrome = window.chrome;
+const isChrome15OrOpera15plus = chrome && (chrome.webstore || chrome.app);
+const isSafari6plus = /Apple/.test(navigator.vendor) && /Version\/([6-9]\d*|[1-5]\d+)/.test(navigator.userAgent);
+
+function isLeftMouseReleased(event) {
+ if ("buttons" in event && isNotIEorIsIE10plus) {
+ return !(event.buttons & 1);
+ }
+
+ if (isChrome15OrOpera15plus || isSafari6plus) {
+ return event.which === 0;
+ }
+
+ return false;
+}
+
+/***/ }),
+/* 8 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.RenderingStates = exports.PDFRenderingQueue = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+const CLEANUP_TIMEOUT = 30000;
+const RenderingStates = {
+ INITIAL: 0,
+ RUNNING: 1,
+ PAUSED: 2,
+ FINISHED: 3
+};
+exports.RenderingStates = RenderingStates;
+
+class PDFRenderingQueue {
+ constructor() {
+ this.pdfViewer = null;
+ this.pdfThumbnailViewer = null;
+ this.onIdle = null;
+ this.highestPriorityPage = null;
+ this.idleTimeout = null;
+ this.printing = false;
+ this.isThumbnailViewEnabled = false;
+ }
+
+ setViewer(pdfViewer) {
+ this.pdfViewer = pdfViewer;
+ }
+
+ setThumbnailViewer(pdfThumbnailViewer) {
+ this.pdfThumbnailViewer = pdfThumbnailViewer;
+ }
+
+ isHighestPriority(view) {
+ return this.highestPriorityPage === view.renderingId;
+ }
+
+ renderHighestPriority(currentlyVisiblePages) {
+ if (this.idleTimeout) {
+ clearTimeout(this.idleTimeout);
+ this.idleTimeout = null;
+ }
+
+ if (this.pdfViewer.forceRendering(currentlyVisiblePages)) {
+ return;
+ }
+
+ if (this.pdfThumbnailViewer && this.isThumbnailViewEnabled) {
+ if (this.pdfThumbnailViewer.forceRendering()) {
+ return;
+ }
+ }
+
+ if (this.printing) {
+ return;
+ }
+
+ if (this.onIdle) {
+ this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT);
+ }
+ }
+
+ getHighestPriority(visible, views, scrolledDown) {
+ const visibleViews = visible.views;
+ const numVisible = visibleViews.length;
+
+ if (numVisible === 0) {
+ return null;
+ }
+
+ for (let i = 0; i < numVisible; ++i) {
+ const view = visibleViews[i].view;
+
+ if (!this.isViewFinished(view)) {
+ return view;
+ }
+ }
+
+ if (scrolledDown) {
+ const nextPageIndex = visible.last.id;
+
+ if (views[nextPageIndex] && !this.isViewFinished(views[nextPageIndex])) {
+ return views[nextPageIndex];
+ }
+ } else {
+ const previousPageIndex = visible.first.id - 2;
+
+ if (views[previousPageIndex] && !this.isViewFinished(views[previousPageIndex])) {
+ return views[previousPageIndex];
+ }
+ }
+
+ return null;
+ }
+
+ isViewFinished(view) {
+ return view.renderingState === RenderingStates.FINISHED;
+ }
+
+ renderView(view) {
+ switch (view.renderingState) {
+ case RenderingStates.FINISHED:
+ return false;
+
+ case RenderingStates.PAUSED:
+ this.highestPriorityPage = view.renderingId;
+ view.resume();
+ break;
+
+ case RenderingStates.RUNNING:
+ this.highestPriorityPage = view.renderingId;
+ break;
+
+ case RenderingStates.INITIAL:
+ this.highestPriorityPage = view.renderingId;
+ view.draw().finally(() => {
+ this.renderHighestPriority();
+ }).catch(reason => {
+ if (reason instanceof _pdfjsLib.RenderingCancelledException) {
+ return;
+ }
+
+ console.error(`renderView: "${reason}"`);
+ });
+ break;
+ }
+
+ return true;
+ }
+
+}
+
+exports.PDFRenderingQueue = PDFRenderingQueue;
+
+/***/ }),
+/* 9 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.OverlayManager = void 0;
+
+class OverlayManager {
+ constructor() {
+ this._overlays = {};
+ this._active = null;
+ this._keyDownBound = this._keyDown.bind(this);
+ }
+
+ get active() {
+ return this._active;
+ }
+
+ async register(name, element, callerCloseMethod = null, canForceClose = false) {
+ let container;
+
+ if (!name || !element || !(container = element.parentNode)) {
+ throw new Error("Not enough parameters.");
+ } else if (this._overlays[name]) {
+ throw new Error("The overlay is already registered.");
+ }
+
+ this._overlays[name] = {
+ element,
+ container,
+ callerCloseMethod,
+ canForceClose
+ };
+ }
+
+ async unregister(name) {
+ if (!this._overlays[name]) {
+ throw new Error("The overlay does not exist.");
+ } else if (this._active === name) {
+ throw new Error("The overlay cannot be removed while it is active.");
+ }
+
+ delete this._overlays[name];
+ }
+
+ async open(name) {
+ if (!this._overlays[name]) {
+ throw new Error("The overlay does not exist.");
+ } else if (this._active) {
+ if (this._overlays[name].canForceClose) {
+ this._closeThroughCaller();
+ } else if (this._active === name) {
+ throw new Error("The overlay is already active.");
+ } else {
+ throw new Error("Another overlay is currently active.");
+ }
+ }
+
+ this._active = name;
+
+ this._overlays[this._active].element.classList.remove("hidden");
+
+ this._overlays[this._active].container.classList.remove("hidden");
+
+ window.addEventListener("keydown", this._keyDownBound);
+ }
+
+ async close(name) {
+ if (!this._overlays[name]) {
+ throw new Error("The overlay does not exist.");
+ } else if (!this._active) {
+ throw new Error("The overlay is currently not active.");
+ } else if (this._active !== name) {
+ throw new Error("Another overlay is currently active.");
+ }
+
+ this._overlays[this._active].container.classList.add("hidden");
+
+ this._overlays[this._active].element.classList.add("hidden");
+
+ this._active = null;
+ window.removeEventListener("keydown", this._keyDownBound);
+ }
+
+ _keyDown(evt) {
+ if (this._active && evt.keyCode === 27) {
+ this._closeThroughCaller();
+
+ evt.preventDefault();
+ }
+ }
+
+ _closeThroughCaller() {
+ if (this._overlays[this._active].callerCloseMethod) {
+ this._overlays[this._active].callerCloseMethod();
+ }
+
+ if (this._active) {
+ this.close(this._active);
+ }
+ }
+
+}
+
+exports.OverlayManager = OverlayManager;
+
+/***/ }),
+/* 10 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PasswordPrompt = void 0;
+
+var _ui_utils = __webpack_require__(4);
+
+var _pdfjsLib = __webpack_require__(5);
+
+class PasswordPrompt {
+ constructor(options, overlayManager, l10n = _ui_utils.NullL10n) {
+ this.overlayName = options.overlayName;
+ this.container = options.container;
+ this.label = options.label;
+ this.input = options.input;
+ this.submitButton = options.submitButton;
+ this.cancelButton = options.cancelButton;
+ this.overlayManager = overlayManager;
+ this.l10n = l10n;
+ this.updateCallback = null;
+ this.reason = null;
+ this.submitButton.addEventListener("click", this.verify.bind(this));
+ this.cancelButton.addEventListener("click", this.close.bind(this));
+ this.input.addEventListener("keydown", e => {
+ if (e.keyCode === 13) {
+ this.verify();
+ }
+ });
+ this.overlayManager.register(this.overlayName, this.container, this.close.bind(this), true);
+ }
+
+ open() {
+ this.overlayManager.open(this.overlayName).then(() => {
+ this.input.focus();
+ let promptString;
+
+ if (this.reason === _pdfjsLib.PasswordResponses.INCORRECT_PASSWORD) {
+ promptString = this.l10n.get("password_invalid", null, "Invalid password. Please try again.");
+ } else {
+ promptString = this.l10n.get("password_label", null, "Enter the password to open this PDF file.");
+ }
+
+ promptString.then(msg => {
+ this.label.textContent = msg;
+ });
+ });
+ }
+
+ close() {
+ this.overlayManager.close(this.overlayName).then(() => {
+ this.input.value = "";
+ });
+ }
+
+ verify() {
+ const password = this.input.value;
+
+ if (password && password.length > 0) {
+ this.close();
+ this.updateCallback(password);
+ }
+ }
+
+ setUpdateCallback(updateCallback, reason) {
+ this.updateCallback = updateCallback;
+ this.reason = reason;
+ }
+
+}
+
+exports.PasswordPrompt = PasswordPrompt;
+
+/***/ }),
+/* 11 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFAttachmentViewer = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+var _base_tree_viewer = __webpack_require__(12);
+
+var _viewer_compatibility = __webpack_require__(2);
+
+const PdfFileRegExp = /\.pdf$/i;
+
+class PDFAttachmentViewer extends _base_tree_viewer.BaseTreeViewer {
+ constructor(options) {
+ super(options);
+ this.downloadManager = options.downloadManager;
+
+ this.eventBus._on("fileattachmentannotation", this._appendAttachment.bind(this));
+ }
+
+ reset(keepRenderedCapability = false) {
+ super.reset();
+ this._attachments = null;
+
+ if (!keepRenderedCapability) {
+ this._renderedCapability = (0, _pdfjsLib.createPromiseCapability)();
+ }
+
+ if (this._pendingDispatchEvent) {
+ clearTimeout(this._pendingDispatchEvent);
+ }
+
+ this._pendingDispatchEvent = null;
+ }
+
+ _dispatchEvent(attachmentsCount) {
+ this._renderedCapability.resolve();
+
+ if (this._pendingDispatchEvent) {
+ clearTimeout(this._pendingDispatchEvent);
+ this._pendingDispatchEvent = null;
+ }
+
+ if (attachmentsCount === 0) {
+ this._pendingDispatchEvent = setTimeout(() => {
+ this.eventBus.dispatch("attachmentsloaded", {
+ source: this,
+ attachmentsCount: 0
+ });
+ this._pendingDispatchEvent = null;
+ });
+ return;
+ }
+
+ this.eventBus.dispatch("attachmentsloaded", {
+ source: this,
+ attachmentsCount
+ });
+ }
+
+ _bindPdfLink(element, {
+ content,
+ filename
+ }) {
+ let blobUrl;
+
+ element.onclick = () => {
+ if (!blobUrl) {
+ blobUrl = URL.createObjectURL(new Blob([content], {
+ type: "application/pdf"
+ }));
+ }
+
+ let viewerUrl;
+ viewerUrl = "?file=" + encodeURIComponent(blobUrl + "#" + filename);
+
+ try {
+ window.open(viewerUrl);
+ } catch (ex) {
+ console.error(`_bindPdfLink: ${ex}`);
+ URL.revokeObjectURL(blobUrl);
+ blobUrl = null;
+ this.downloadManager.downloadData(content, filename, "application/pdf");
+ }
+
+ return false;
+ };
+ }
+
+ _bindLink(element, {
+ content,
+ filename
+ }) {
+ element.onclick = () => {
+ const contentType = PdfFileRegExp.test(filename) ? "application/pdf" : "";
+ this.downloadManager.downloadData(content, filename, contentType);
+ return false;
+ };
+ }
+
+ render({
+ attachments,
+ keepRenderedCapability = false
+ }) {
+ if (this._attachments) {
+ this.reset(keepRenderedCapability);
+ }
+
+ this._attachments = attachments || null;
+
+ if (!attachments) {
+ this._dispatchEvent(0);
+
+ return;
+ }
+
+ const names = Object.keys(attachments).sort(function (a, b) {
+ return a.toLowerCase().localeCompare(b.toLowerCase());
+ });
+ const fragment = document.createDocumentFragment();
+ let attachmentsCount = 0;
+
+ for (const name of names) {
+ const item = attachments[name];
+ const filename = (0, _pdfjsLib.getFilenameFromUrl)(item.filename);
+ const div = document.createElement("div");
+ div.className = "treeItem";
+ const element = document.createElement("a");
+
+ if (PdfFileRegExp.test(filename) && !_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) {
+ this._bindPdfLink(element, {
+ content: item.content,
+ filename
+ });
+ } else {
+ this._bindLink(element, {
+ content: item.content,
+ filename
+ });
+ }
+
+ element.textContent = this._normalizeTextContent(filename);
+ div.appendChild(element);
+ fragment.appendChild(div);
+ attachmentsCount++;
+ }
+
+ this._finishRendering(fragment, attachmentsCount);
+ }
+
+ _appendAttachment({
+ id,
+ filename,
+ content
+ }) {
+ const renderedPromise = this._renderedCapability.promise;
+ renderedPromise.then(() => {
+ if (renderedPromise !== this._renderedCapability.promise) {
+ return;
+ }
+
+ let attachments = this._attachments;
+
+ if (!attachments) {
+ attachments = Object.create(null);
+ } else {
+ for (const name in attachments) {
+ if (id === name) {
+ return;
+ }
+ }
+ }
+
+ attachments[id] = {
+ filename,
+ content
+ };
+ this.render({
+ attachments,
+ keepRenderedCapability: true
+ });
+ });
+ }
+
+}
+
+exports.PDFAttachmentViewer = PDFAttachmentViewer;
+
+/***/ }),
+/* 12 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.BaseTreeViewer = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+const TREEITEM_OFFSET_TOP = -100;
+const TREEITEM_SELECTED_CLASS = "selected";
+
+class BaseTreeViewer {
+ constructor(options) {
+ if (this.constructor === BaseTreeViewer) {
+ throw new Error("Cannot initialize BaseTreeViewer.");
+ }
+
+ this.container = options.container;
+ this.eventBus = options.eventBus;
+ this.reset();
+ }
+
+ reset() {
+ this._pdfDocument = null;
+ this._lastToggleIsShow = true;
+ this._currentTreeItem = null;
+ this.container.textContent = "";
+ this.container.classList.remove("treeWithDeepNesting");
+ }
+
+ _dispatchEvent(count) {
+ throw new Error("Not implemented: _dispatchEvent");
+ }
+
+ _bindLink(element, params) {
+ throw new Error("Not implemented: _bindLink");
+ }
+
+ _normalizeTextContent(str) {
+ return (0, _pdfjsLib.removeNullCharacters)(str) || "\u2013";
+ }
+
+ _addToggleButton(div, hidden = false) {
+ const toggler = document.createElement("div");
+ toggler.className = "treeItemToggler";
+
+ if (hidden) {
+ toggler.classList.add("treeItemsHidden");
+ }
+
+ toggler.onclick = evt => {
+ evt.stopPropagation();
+ toggler.classList.toggle("treeItemsHidden");
+
+ if (evt.shiftKey) {
+ const shouldShowAll = !toggler.classList.contains("treeItemsHidden");
+
+ this._toggleTreeItem(div, shouldShowAll);
+ }
+ };
+
+ div.insertBefore(toggler, div.firstChild);
+ }
+
+ _toggleTreeItem(root, show = false) {
+ this._lastToggleIsShow = show;
+
+ for (const toggler of root.querySelectorAll(".treeItemToggler")) {
+ toggler.classList.toggle("treeItemsHidden", !show);
+ }
+ }
+
+ _toggleAllTreeItems() {
+ this._toggleTreeItem(this.container, !this._lastToggleIsShow);
+ }
+
+ _finishRendering(fragment, count, hasAnyNesting = false) {
+ if (hasAnyNesting) {
+ this.container.classList.add("treeWithDeepNesting");
+ this._lastToggleIsShow = !fragment.querySelector(".treeItemsHidden");
+ }
+
+ this.container.appendChild(fragment);
+
+ this._dispatchEvent(count);
+ }
+
+ render(params) {
+ throw new Error("Not implemented: render");
+ }
+
+ _updateCurrentTreeItem(treeItem = null) {
+ if (this._currentTreeItem) {
+ this._currentTreeItem.classList.remove(TREEITEM_SELECTED_CLASS);
+
+ this._currentTreeItem = null;
+ }
+
+ if (treeItem) {
+ treeItem.classList.add(TREEITEM_SELECTED_CLASS);
+ this._currentTreeItem = treeItem;
+ }
+ }
+
+ _scrollToCurrentTreeItem(treeItem) {
+ if (!treeItem) {
+ return;
+ }
+
+ let currentNode = treeItem.parentNode;
+
+ while (currentNode && currentNode !== this.container) {
+ if (currentNode.classList.contains("treeItem")) {
+ const toggler = currentNode.firstElementChild;
+ toggler?.classList.remove("treeItemsHidden");
+ }
+
+ currentNode = currentNode.parentNode;
+ }
+
+ this._updateCurrentTreeItem(treeItem);
+
+ this.container.scrollTo(treeItem.offsetLeft, treeItem.offsetTop + TREEITEM_OFFSET_TOP);
+ }
+
+}
+
+exports.BaseTreeViewer = BaseTreeViewer;
+
+/***/ }),
+/* 13 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFDocumentProperties = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+var _ui_utils = __webpack_require__(4);
+
+const DEFAULT_FIELD_CONTENT = "-";
+const NON_METRIC_LOCALES = ["en-us", "en-lr", "my"];
+const US_PAGE_NAMES = {
+ "8.5x11": "Letter",
+ "8.5x14": "Legal"
+};
+const METRIC_PAGE_NAMES = {
+ "297x420": "A3",
+ "210x297": "A4"
+};
+
+function getPageName(size, isPortrait, pageNames) {
+ const width = isPortrait ? size.width : size.height;
+ const height = isPortrait ? size.height : size.width;
+ return pageNames[`${width}x${height}`];
+}
+
+class PDFDocumentProperties {
+ constructor({
+ overlayName,
+ fields,
+ container,
+ closeButton
+ }, overlayManager, eventBus, l10n = _ui_utils.NullL10n) {
+ this.overlayName = overlayName;
+ this.fields = fields;
+ this.container = container;
+ this.overlayManager = overlayManager;
+ this.l10n = l10n;
+
+ this._reset();
+
+ closeButton.addEventListener("click", this.close.bind(this));
+ this.overlayManager.register(this.overlayName, this.container, this.close.bind(this));
+
+ eventBus._on("pagechanging", evt => {
+ this._currentPageNumber = evt.pageNumber;
+ });
+
+ eventBus._on("rotationchanging", evt => {
+ this._pagesRotation = evt.pagesRotation;
+ });
+
+ this._isNonMetricLocale = true;
+ l10n.getLanguage().then(locale => {
+ this._isNonMetricLocale = NON_METRIC_LOCALES.includes(locale);
+ });
+ }
+
+ async open() {
+ const freezeFieldData = data => {
+ Object.defineProperty(this, "fieldData", {
+ value: Object.freeze(data),
+ writable: false,
+ enumerable: true,
+ configurable: true
+ });
+ };
+
+ await Promise.all([this.overlayManager.open(this.overlayName), this._dataAvailableCapability.promise]);
+ const currentPageNumber = this._currentPageNumber;
+ const pagesRotation = this._pagesRotation;
+
+ if (this.fieldData && currentPageNumber === this.fieldData._currentPageNumber && pagesRotation === this.fieldData._pagesRotation) {
+ this._updateUI();
+
+ return;
+ }
+
+ const {
+ info,
+ contentDispositionFilename,
+ contentLength
+ } = await this.pdfDocument.getMetadata();
+ const [fileName, fileSize, creationDate, modificationDate, pageSize, isLinearized] = await Promise.all([contentDispositionFilename || (0, _ui_utils.getPDFFileNameFromURL)(this.url), this._parseFileSize(contentLength), this._parseDate(info.CreationDate), this._parseDate(info.ModDate), this.pdfDocument.getPage(currentPageNumber).then(pdfPage => {
+ return this._parsePageSize((0, _ui_utils.getPageSizeInches)(pdfPage), pagesRotation);
+ }), this._parseLinearization(info.IsLinearized)]);
+ freezeFieldData({
+ fileName,
+ fileSize,
+ title: info.Title,
+ author: info.Author,
+ subject: info.Subject,
+ keywords: info.Keywords,
+ creationDate,
+ modificationDate,
+ creator: info.Creator,
+ producer: info.Producer,
+ version: info.PDFFormatVersion,
+ pageCount: this.pdfDocument.numPages,
+ pageSize,
+ linearized: isLinearized,
+ _currentPageNumber: currentPageNumber,
+ _pagesRotation: pagesRotation
+ });
+
+ this._updateUI();
+
+ const {
+ length
+ } = await this.pdfDocument.getDownloadInfo();
+
+ if (contentLength === length) {
+ return;
+ }
+
+ const data = Object.assign(Object.create(null), this.fieldData);
+ data.fileSize = await this._parseFileSize(length);
+ freezeFieldData(data);
+
+ this._updateUI();
+ }
+
+ close() {
+ this.overlayManager.close(this.overlayName);
+ }
+
+ setDocument(pdfDocument, url = null) {
+ if (this.pdfDocument) {
+ this._reset();
+
+ this._updateUI(true);
+ }
+
+ if (!pdfDocument) {
+ return;
+ }
+
+ this.pdfDocument = pdfDocument;
+ this.url = url;
+
+ this._dataAvailableCapability.resolve();
+ }
+
+ _reset() {
+ this.pdfDocument = null;
+ this.url = null;
+ delete this.fieldData;
+ this._dataAvailableCapability = (0, _pdfjsLib.createPromiseCapability)();
+ this._currentPageNumber = 1;
+ this._pagesRotation = 0;
+ }
+
+ _updateUI(reset = false) {
+ if (reset || !this.fieldData) {
+ for (const id in this.fields) {
+ this.fields[id].textContent = DEFAULT_FIELD_CONTENT;
+ }
+
+ return;
+ }
+
+ if (this.overlayManager.active !== this.overlayName) {
+ return;
+ }
+
+ for (const id in this.fields) {
+ const content = this.fieldData[id];
+ this.fields[id].textContent = content || content === 0 ? content : DEFAULT_FIELD_CONTENT;
+ }
+ }
+
+ async _parseFileSize(fileSize = 0) {
+ const kb = fileSize / 1024;
+
+ if (!kb) {
+ return undefined;
+ } else if (kb < 1024) {
+ return this.l10n.get("document_properties_kb", {
+ size_kb: (+kb.toPrecision(3)).toLocaleString(),
+ size_b: fileSize.toLocaleString()
+ }, "{{size_kb}} KB ({{size_b}} bytes)");
+ }
+
+ return this.l10n.get("document_properties_mb", {
+ size_mb: (+(kb / 1024).toPrecision(3)).toLocaleString(),
+ size_b: fileSize.toLocaleString()
+ }, "{{size_mb}} MB ({{size_b}} bytes)");
+ }
+
+ async _parsePageSize(pageSizeInches, pagesRotation) {
+ if (!pageSizeInches) {
+ return undefined;
+ }
+
+ if (pagesRotation % 180 !== 0) {
+ pageSizeInches = {
+ width: pageSizeInches.height,
+ height: pageSizeInches.width
+ };
+ }
+
+ const isPortrait = (0, _ui_utils.isPortraitOrientation)(pageSizeInches);
+ let sizeInches = {
+ width: Math.round(pageSizeInches.width * 100) / 100,
+ height: Math.round(pageSizeInches.height * 100) / 100
+ };
+ let sizeMillimeters = {
+ width: Math.round(pageSizeInches.width * 25.4 * 10) / 10,
+ height: Math.round(pageSizeInches.height * 25.4 * 10) / 10
+ };
+ let pageName = null;
+ let rawName = getPageName(sizeInches, isPortrait, US_PAGE_NAMES) || getPageName(sizeMillimeters, isPortrait, METRIC_PAGE_NAMES);
+
+ if (!rawName && !(Number.isInteger(sizeMillimeters.width) && Number.isInteger(sizeMillimeters.height))) {
+ const exactMillimeters = {
+ width: pageSizeInches.width * 25.4,
+ height: pageSizeInches.height * 25.4
+ };
+ const intMillimeters = {
+ width: Math.round(sizeMillimeters.width),
+ height: Math.round(sizeMillimeters.height)
+ };
+
+ if (Math.abs(exactMillimeters.width - intMillimeters.width) < 0.1 && Math.abs(exactMillimeters.height - intMillimeters.height) < 0.1) {
+ rawName = getPageName(intMillimeters, isPortrait, METRIC_PAGE_NAMES);
+
+ if (rawName) {
+ sizeInches = {
+ width: Math.round(intMillimeters.width / 25.4 * 100) / 100,
+ height: Math.round(intMillimeters.height / 25.4 * 100) / 100
+ };
+ sizeMillimeters = intMillimeters;
+ }
+ }
+ }
+
+ if (rawName) {
+ pageName = this.l10n.get("document_properties_page_size_name_" + rawName.toLowerCase(), null, rawName);
+ }
+
+ return Promise.all([this._isNonMetricLocale ? sizeInches : sizeMillimeters, this.l10n.get("document_properties_page_size_unit_" + (this._isNonMetricLocale ? "inches" : "millimeters"), null, this._isNonMetricLocale ? "in" : "mm"), pageName, this.l10n.get("document_properties_page_size_orientation_" + (isPortrait ? "portrait" : "landscape"), null, isPortrait ? "portrait" : "landscape")]).then(([{
+ width,
+ height
+ }, unit, name, orientation]) => {
+ return this.l10n.get("document_properties_page_size_dimension_" + (name ? "name_" : "") + "string", {
+ width: width.toLocaleString(),
+ height: height.toLocaleString(),
+ unit,
+ name,
+ orientation
+ }, "{{width}} × {{height}} {{unit}} (" + (name ? "{{name}}, " : "") + "{{orientation}})");
+ });
+ }
+
+ async _parseDate(inputDate) {
+ const dateObject = _pdfjsLib.PDFDateString.toDateObject(inputDate);
+
+ if (!dateObject) {
+ return undefined;
+ }
+
+ return this.l10n.get("document_properties_date_string", {
+ date: dateObject.toLocaleDateString(),
+ time: dateObject.toLocaleTimeString()
+ }, "{{date}}, {{time}}");
+ }
+
+ _parseLinearization(isLinearized) {
+ return this.l10n.get("document_properties_linearized_" + (isLinearized ? "yes" : "no"), null, isLinearized ? "Yes" : "No");
+ }
+
+}
+
+exports.PDFDocumentProperties = PDFDocumentProperties;
+
+/***/ }),
+/* 14 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFFindBar = void 0;
+
+var _pdf_find_controller = __webpack_require__(15);
+
+var _ui_utils = __webpack_require__(4);
+
+const MATCHES_COUNT_LIMIT = 1000;
+
+class PDFFindBar {
+ constructor(options, eventBus, l10n = _ui_utils.NullL10n) {
+ this.opened = false;
+ this.bar = options.bar || null;
+ this.toggleButton = options.toggleButton || null;
+ this.findField = options.findField || null;
+ this.highlightAll = options.highlightAllCheckbox || null;
+ this.caseSensitive = options.caseSensitiveCheckbox || null;
+ this.entireWord = options.entireWordCheckbox || null;
+ this.findMsg = options.findMsg || null;
+ this.findResultsCount = options.findResultsCount || null;
+ this.findPreviousButton = options.findPreviousButton || null;
+ this.findNextButton = options.findNextButton || null;
+ this.eventBus = eventBus;
+ this.l10n = l10n;
+ this.toggleButton.addEventListener("click", () => {
+ this.toggle();
+ });
+ this.findField.addEventListener("input", () => {
+ this.dispatchEvent("");
+ });
+ this.bar.addEventListener("keydown", e => {
+ switch (e.keyCode) {
+ case 13:
+ if (e.target === this.findField) {
+ this.dispatchEvent("again", e.shiftKey);
+ }
+
+ break;
+
+ case 27:
+ this.close();
+ break;
+ }
+ });
+ this.findPreviousButton.addEventListener("click", () => {
+ this.dispatchEvent("again", true);
+ });
+ this.findNextButton.addEventListener("click", () => {
+ this.dispatchEvent("again", false);
+ });
+ this.highlightAll.addEventListener("click", () => {
+ this.dispatchEvent("highlightallchange");
+ });
+ this.caseSensitive.addEventListener("click", () => {
+ this.dispatchEvent("casesensitivitychange");
+ });
+ this.entireWord.addEventListener("click", () => {
+ this.dispatchEvent("entirewordchange");
+ });
+
+ this.eventBus._on("resize", this._adjustWidth.bind(this));
+ }
+
+ reset() {
+ this.updateUIState();
+ }
+
+ dispatchEvent(type, findPrev) {
+ this.eventBus.dispatch("find", {
+ source: this,
+ type,
+ query: this.findField.value,
+ phraseSearch: true,
+ caseSensitive: this.caseSensitive.checked,
+ entireWord: this.entireWord.checked,
+ highlightAll: this.highlightAll.checked,
+ findPrevious: findPrev
+ });
+ }
+
+ updateUIState(state, previous, matchesCount) {
+ let findMsg = "";
+ let status = "";
+
+ switch (state) {
+ case _pdf_find_controller.FindState.FOUND:
+ break;
+
+ case _pdf_find_controller.FindState.PENDING:
+ status = "pending";
+ break;
+
+ case _pdf_find_controller.FindState.NOT_FOUND:
+ findMsg = this.l10n.get("find_not_found", null, "Phrase not found");
+ status = "notFound";
+ break;
+
+ case _pdf_find_controller.FindState.WRAPPED:
+ if (previous) {
+ findMsg = this.l10n.get("find_reached_top", null, "Reached top of document, continued from bottom");
+ } else {
+ findMsg = this.l10n.get("find_reached_bottom", null, "Reached end of document, continued from top");
+ }
+
+ break;
+ }
+
+ this.findField.setAttribute("data-status", status);
+ Promise.resolve(findMsg).then(msg => {
+ this.findMsg.textContent = msg;
+
+ this._adjustWidth();
+ });
+ this.updateResultsCount(matchesCount);
+ }
+
+ updateResultsCount({
+ current = 0,
+ total = 0
+ } = {}) {
+ if (!this.findResultsCount) {
+ return;
+ }
+
+ const limit = MATCHES_COUNT_LIMIT;
+ let matchesCountMsg = "";
+
+ if (total > 0) {
+ if (total > limit) {
+ matchesCountMsg = this.l10n.get("find_match_count_limit", {
+ limit
+ }, "More than {{limit}} match" + (limit !== 1 ? "es" : ""));
+ } else {
+ matchesCountMsg = this.l10n.get("find_match_count", {
+ current,
+ total
+ }, "{{current}} of {{total}} match" + (total !== 1 ? "es" : ""));
+ }
+ }
+
+ Promise.resolve(matchesCountMsg).then(msg => {
+ this.findResultsCount.textContent = msg;
+ this.findResultsCount.classList.toggle("hidden", !total);
+
+ this._adjustWidth();
+ });
+ }
+
+ open() {
+ if (!this.opened) {
+ this.opened = true;
+ this.toggleButton.classList.add("toggled");
+ this.bar.classList.remove("hidden");
+ }
+
+ this.findField.select();
+ this.findField.focus();
+
+ this._adjustWidth();
+ }
+
+ close() {
+ if (!this.opened) {
+ return;
+ }
+
+ this.opened = false;
+ this.toggleButton.classList.remove("toggled");
+ this.bar.classList.add("hidden");
+ this.eventBus.dispatch("findbarclose", {
+ source: this
+ });
+ }
+
+ toggle() {
+ if (this.opened) {
+ this.close();
+ } else {
+ this.open();
+ }
+ }
+
+ _adjustWidth() {
+ if (!this.opened) {
+ return;
+ }
+
+ this.bar.classList.remove("wrapContainers");
+ const findbarHeight = this.bar.clientHeight;
+ const inputContainerHeight = this.bar.firstElementChild.clientHeight;
+
+ if (findbarHeight > inputContainerHeight) {
+ this.bar.classList.add("wrapContainers");
+ }
+ }
+
+}
+
+exports.PDFFindBar = PDFFindBar;
+
+/***/ }),
+/* 15 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFFindController = exports.FindState = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+var _pdf_find_utils = __webpack_require__(16);
+
+var _ui_utils = __webpack_require__(4);
+
+const FindState = {
+ FOUND: 0,
+ NOT_FOUND: 1,
+ WRAPPED: 2,
+ PENDING: 3
+};
+exports.FindState = FindState;
+const FIND_TIMEOUT = 250;
+const MATCH_SCROLL_OFFSET_TOP = -50;
+const MATCH_SCROLL_OFFSET_LEFT = -400;
+const CHARACTERS_TO_NORMALIZE = {
+ "\u2018": "'",
+ "\u2019": "'",
+ "\u201A": "'",
+ "\u201B": "'",
+ "\u201C": '"',
+ "\u201D": '"',
+ "\u201E": '"',
+ "\u201F": '"',
+ "\u00BC": "1/4",
+ "\u00BD": "1/2",
+ "\u00BE": "3/4"
+};
+let normalizationRegex = null;
+
+function normalize(text) {
+ if (!normalizationRegex) {
+ const replace = Object.keys(CHARACTERS_TO_NORMALIZE).join("");
+ normalizationRegex = new RegExp(`[${replace}]`, "g");
+ }
+
+ let diffs = null;
+ const normalizedText = text.replace(normalizationRegex, function (ch, index) {
+ const normalizedCh = CHARACTERS_TO_NORMALIZE[ch],
+ diff = normalizedCh.length - ch.length;
+
+ if (diff !== 0) {
+ (diffs || (diffs = [])).push([index, diff]);
+ }
+
+ return normalizedCh;
+ });
+ return [normalizedText, diffs];
+}
+
+function getOriginalIndex(matchIndex, diffs = null) {
+ if (!diffs) {
+ return matchIndex;
+ }
+
+ let totalDiff = 0;
+
+ for (const [index, diff] of diffs) {
+ const currentIndex = index + totalDiff;
+
+ if (currentIndex >= matchIndex) {
+ break;
+ }
+
+ if (currentIndex + diff > matchIndex) {
+ totalDiff += matchIndex - currentIndex;
+ break;
+ }
+
+ totalDiff += diff;
+ }
+
+ return matchIndex - totalDiff;
+}
+
+class PDFFindController {
+ constructor({
+ linkService,
+ eventBus
+ }) {
+ this._linkService = linkService;
+ this._eventBus = eventBus;
+
+ this._reset();
+
+ eventBus._on("findbarclose", this._onFindBarClose.bind(this));
+ }
+
+ get highlightMatches() {
+ return this._highlightMatches;
+ }
+
+ get pageMatches() {
+ return this._pageMatches;
+ }
+
+ get pageMatchesLength() {
+ return this._pageMatchesLength;
+ }
+
+ get selected() {
+ return this._selected;
+ }
+
+ get state() {
+ return this._state;
+ }
+
+ setDocument(pdfDocument) {
+ if (this._pdfDocument) {
+ this._reset();
+ }
+
+ if (!pdfDocument) {
+ return;
+ }
+
+ this._pdfDocument = pdfDocument;
+
+ this._firstPageCapability.resolve();
+ }
+
+ executeCommand(cmd, state) {
+ if (!state) {
+ return;
+ }
+
+ const pdfDocument = this._pdfDocument;
+
+ if (this._state === null || this._shouldDirtyMatch(cmd, state)) {
+ this._dirtyMatch = true;
+ }
+
+ this._state = state;
+
+ if (cmd !== "findhighlightallchange") {
+ this._updateUIState(FindState.PENDING);
+ }
+
+ this._firstPageCapability.promise.then(() => {
+ if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) {
+ return;
+ }
+
+ this._extractText();
+
+ const findbarClosed = !this._highlightMatches;
+ const pendingTimeout = !!this._findTimeout;
+
+ if (this._findTimeout) {
+ clearTimeout(this._findTimeout);
+ this._findTimeout = null;
+ }
+
+ if (cmd === "find") {
+ this._findTimeout = setTimeout(() => {
+ this._nextMatch();
+
+ this._findTimeout = null;
+ }, FIND_TIMEOUT);
+ } else if (this._dirtyMatch) {
+ this._nextMatch();
+ } else if (cmd === "findagain") {
+ this._nextMatch();
+
+ if (findbarClosed && this._state.highlightAll) {
+ this._updateAllPages();
+ }
+ } else if (cmd === "findhighlightallchange") {
+ if (pendingTimeout) {
+ this._nextMatch();
+ } else {
+ this._highlightMatches = true;
+ }
+
+ this._updateAllPages();
+ } else {
+ this._nextMatch();
+ }
+ });
+ }
+
+ scrollMatchIntoView({
+ element = null,
+ pageIndex = -1,
+ matchIndex = -1
+ }) {
+ if (!this._scrollMatches || !element) {
+ return;
+ } else if (matchIndex === -1 || matchIndex !== this._selected.matchIdx) {
+ return;
+ } else if (pageIndex === -1 || pageIndex !== this._selected.pageIdx) {
+ return;
+ }
+
+ this._scrollMatches = false;
+ const spot = {
+ top: MATCH_SCROLL_OFFSET_TOP,
+ left: MATCH_SCROLL_OFFSET_LEFT
+ };
+ (0, _ui_utils.scrollIntoView)(element, spot, true);
+ }
+
+ _reset() {
+ this._highlightMatches = false;
+ this._scrollMatches = false;
+ this._pdfDocument = null;
+ this._pageMatches = [];
+ this._pageMatchesLength = [];
+ this._state = null;
+ this._selected = {
+ pageIdx: -1,
+ matchIdx: -1
+ };
+ this._offset = {
+ pageIdx: null,
+ matchIdx: null,
+ wrapped: false
+ };
+ this._extractTextPromises = [];
+ this._pageContents = [];
+ this._pageDiffs = [];
+ this._matchesCountTotal = 0;
+ this._pagesToSearch = null;
+ this._pendingFindMatches = Object.create(null);
+ this._resumePageIdx = null;
+ this._dirtyMatch = false;
+ clearTimeout(this._findTimeout);
+ this._findTimeout = null;
+ this._firstPageCapability = (0, _pdfjsLib.createPromiseCapability)();
+ }
+
+ get _query() {
+ if (this._state.query !== this._rawQuery) {
+ this._rawQuery = this._state.query;
+ [this._normalizedQuery] = normalize(this._state.query);
+ }
+
+ return this._normalizedQuery;
+ }
+
+ _shouldDirtyMatch(cmd, state) {
+ if (state.query !== this._state.query) {
+ return true;
+ }
+
+ switch (cmd) {
+ case "findagain":
+ const pageNumber = this._selected.pageIdx + 1;
+ const linkService = this._linkService;
+
+ if (pageNumber >= 1 && pageNumber <= linkService.pagesCount && pageNumber !== linkService.page && !linkService.isPageVisible(pageNumber)) {
+ return true;
+ }
+
+ return false;
+
+ case "findhighlightallchange":
+ return false;
+ }
+
+ return true;
+ }
+
+ _prepareMatches(matchesWithLength, matches, matchesLength) {
+ function isSubTerm(currentIndex) {
+ const currentElem = matchesWithLength[currentIndex];
+ const nextElem = matchesWithLength[currentIndex + 1];
+
+ if (currentIndex < matchesWithLength.length - 1 && currentElem.match === nextElem.match) {
+ currentElem.skipped = true;
+ return true;
+ }
+
+ for (let i = currentIndex - 1; i >= 0; i--) {
+ const prevElem = matchesWithLength[i];
+
+ if (prevElem.skipped) {
+ continue;
+ }
+
+ if (prevElem.match + prevElem.matchLength < currentElem.match) {
+ break;
+ }
+
+ if (prevElem.match + prevElem.matchLength >= currentElem.match + currentElem.matchLength) {
+ currentElem.skipped = true;
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ matchesWithLength.sort(function (a, b) {
+ return a.match === b.match ? a.matchLength - b.matchLength : a.match - b.match;
+ });
+
+ for (let i = 0, len = matchesWithLength.length; i < len; i++) {
+ if (isSubTerm(i)) {
+ continue;
+ }
+
+ matches.push(matchesWithLength[i].match);
+ matchesLength.push(matchesWithLength[i].matchLength);
+ }
+ }
+
+ _isEntireWord(content, startIdx, length) {
+ if (startIdx > 0) {
+ const first = content.charCodeAt(startIdx);
+ const limit = content.charCodeAt(startIdx - 1);
+
+ if ((0, _pdf_find_utils.getCharacterType)(first) === (0, _pdf_find_utils.getCharacterType)(limit)) {
+ return false;
+ }
+ }
+
+ const endIdx = startIdx + length - 1;
+
+ if (endIdx < content.length - 1) {
+ const last = content.charCodeAt(endIdx);
+ const limit = content.charCodeAt(endIdx + 1);
+
+ if ((0, _pdf_find_utils.getCharacterType)(last) === (0, _pdf_find_utils.getCharacterType)(limit)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ _calculatePhraseMatch(query, pageIndex, pageContent, pageDiffs, entireWord) {
+ const matches = [],
+ matchesLength = [];
+ const queryLen = query.length;
+ let matchIdx = -queryLen;
+
+ while (true) {
+ matchIdx = pageContent.indexOf(query, matchIdx + queryLen);
+
+ if (matchIdx === -1) {
+ break;
+ }
+
+ if (entireWord && !this._isEntireWord(pageContent, matchIdx, queryLen)) {
+ continue;
+ }
+
+ const originalMatchIdx = getOriginalIndex(matchIdx, pageDiffs),
+ matchEnd = matchIdx + queryLen - 1,
+ originalQueryLen = getOriginalIndex(matchEnd, pageDiffs) - originalMatchIdx + 1;
+ matches.push(originalMatchIdx);
+ matchesLength.push(originalQueryLen);
+ }
+
+ this._pageMatches[pageIndex] = matches;
+ this._pageMatchesLength[pageIndex] = matchesLength;
+ }
+
+ _calculateWordMatch(query, pageIndex, pageContent, pageDiffs, entireWord) {
+ const matchesWithLength = [];
+ const queryArray = query.match(/\S+/g);
+
+ for (let i = 0, len = queryArray.length; i < len; i++) {
+ const subquery = queryArray[i];
+ const subqueryLen = subquery.length;
+ let matchIdx = -subqueryLen;
+
+ while (true) {
+ matchIdx = pageContent.indexOf(subquery, matchIdx + subqueryLen);
+
+ if (matchIdx === -1) {
+ break;
+ }
+
+ if (entireWord && !this._isEntireWord(pageContent, matchIdx, subqueryLen)) {
+ continue;
+ }
+
+ const originalMatchIdx = getOriginalIndex(matchIdx, pageDiffs),
+ matchEnd = matchIdx + subqueryLen - 1,
+ originalQueryLen = getOriginalIndex(matchEnd, pageDiffs) - originalMatchIdx + 1;
+ matchesWithLength.push({
+ match: originalMatchIdx,
+ matchLength: originalQueryLen,
+ skipped: false
+ });
+ }
+ }
+
+ this._pageMatchesLength[pageIndex] = [];
+ this._pageMatches[pageIndex] = [];
+
+ this._prepareMatches(matchesWithLength, this._pageMatches[pageIndex], this._pageMatchesLength[pageIndex]);
+ }
+
+ _calculateMatch(pageIndex) {
+ let pageContent = this._pageContents[pageIndex];
+ const pageDiffs = this._pageDiffs[pageIndex];
+ let query = this._query;
+ const {
+ caseSensitive,
+ entireWord,
+ phraseSearch
+ } = this._state;
+
+ if (query.length === 0) {
+ return;
+ }
+
+ if (!caseSensitive) {
+ pageContent = pageContent.toLowerCase();
+ query = query.toLowerCase();
+ }
+
+ if (phraseSearch) {
+ this._calculatePhraseMatch(query, pageIndex, pageContent, pageDiffs, entireWord);
+ } else {
+ this._calculateWordMatch(query, pageIndex, pageContent, pageDiffs, entireWord);
+ }
+
+ if (this._state.highlightAll) {
+ this._updatePage(pageIndex);
+ }
+
+ if (this._resumePageIdx === pageIndex) {
+ this._resumePageIdx = null;
+
+ this._nextPageMatch();
+ }
+
+ const pageMatchesCount = this._pageMatches[pageIndex].length;
+
+ if (pageMatchesCount > 0) {
+ this._matchesCountTotal += pageMatchesCount;
+
+ this._updateUIResultsCount();
+ }
+ }
+
+ _extractText() {
+ if (this._extractTextPromises.length > 0) {
+ return;
+ }
+
+ let promise = Promise.resolve();
+
+ for (let i = 0, ii = this._linkService.pagesCount; i < ii; i++) {
+ const extractTextCapability = (0, _pdfjsLib.createPromiseCapability)();
+ this._extractTextPromises[i] = extractTextCapability.promise;
+ promise = promise.then(() => {
+ return this._pdfDocument.getPage(i + 1).then(pdfPage => {
+ return pdfPage.getTextContent({
+ normalizeWhitespace: true
+ });
+ }).then(textContent => {
+ const textItems = textContent.items;
+ const strBuf = [];
+
+ for (let j = 0, jj = textItems.length; j < jj; j++) {
+ strBuf.push(textItems[j].str);
+ }
+
+ [this._pageContents[i], this._pageDiffs[i]] = normalize(strBuf.join(""));
+ extractTextCapability.resolve(i);
+ }, reason => {
+ console.error(`Unable to get text content for page ${i + 1}`, reason);
+ this._pageContents[i] = "";
+ this._pageDiffs[i] = null;
+ extractTextCapability.resolve(i);
+ });
+ });
+ }
+ }
+
+ _updatePage(index) {
+ if (this._scrollMatches && this._selected.pageIdx === index) {
+ this._linkService.page = index + 1;
+ }
+
+ this._eventBus.dispatch("updatetextlayermatches", {
+ source: this,
+ pageIndex: index
+ });
+ }
+
+ _updateAllPages() {
+ this._eventBus.dispatch("updatetextlayermatches", {
+ source: this,
+ pageIndex: -1
+ });
+ }
+
+ _nextMatch() {
+ const previous = this._state.findPrevious;
+ const currentPageIndex = this._linkService.page - 1;
+ const numPages = this._linkService.pagesCount;
+ this._highlightMatches = true;
+
+ if (this._dirtyMatch) {
+ this._dirtyMatch = false;
+ this._selected.pageIdx = this._selected.matchIdx = -1;
+ this._offset.pageIdx = currentPageIndex;
+ this._offset.matchIdx = null;
+ this._offset.wrapped = false;
+ this._resumePageIdx = null;
+ this._pageMatches.length = 0;
+ this._pageMatchesLength.length = 0;
+ this._matchesCountTotal = 0;
+
+ this._updateAllPages();
+
+ for (let i = 0; i < numPages; i++) {
+ if (this._pendingFindMatches[i] === true) {
+ continue;
+ }
+
+ this._pendingFindMatches[i] = true;
+
+ this._extractTextPromises[i].then(pageIdx => {
+ delete this._pendingFindMatches[pageIdx];
+
+ this._calculateMatch(pageIdx);
+ });
+ }
+ }
+
+ if (this._query === "") {
+ this._updateUIState(FindState.FOUND);
+
+ return;
+ }
+
+ if (this._resumePageIdx) {
+ return;
+ }
+
+ const offset = this._offset;
+ this._pagesToSearch = numPages;
+
+ if (offset.matchIdx !== null) {
+ const numPageMatches = this._pageMatches[offset.pageIdx].length;
+
+ if (!previous && offset.matchIdx + 1 < numPageMatches || previous && offset.matchIdx > 0) {
+ offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1;
+
+ this._updateMatch(true);
+
+ return;
+ }
+
+ this._advanceOffsetPage(previous);
+ }
+
+ this._nextPageMatch();
+ }
+
+ _matchesReady(matches) {
+ const offset = this._offset;
+ const numMatches = matches.length;
+ const previous = this._state.findPrevious;
+
+ if (numMatches) {
+ offset.matchIdx = previous ? numMatches - 1 : 0;
+
+ this._updateMatch(true);
+
+ return true;
+ }
+
+ this._advanceOffsetPage(previous);
+
+ if (offset.wrapped) {
+ offset.matchIdx = null;
+
+ if (this._pagesToSearch < 0) {
+ this._updateMatch(false);
+
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ _nextPageMatch() {
+ if (this._resumePageIdx !== null) {
+ console.error("There can only be one pending page.");
+ }
+
+ let matches = null;
+
+ do {
+ const pageIdx = this._offset.pageIdx;
+ matches = this._pageMatches[pageIdx];
+
+ if (!matches) {
+ this._resumePageIdx = pageIdx;
+ break;
+ }
+ } while (!this._matchesReady(matches));
+ }
+
+ _advanceOffsetPage(previous) {
+ const offset = this._offset;
+ const numPages = this._linkService.pagesCount;
+ offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1;
+ offset.matchIdx = null;
+ this._pagesToSearch--;
+
+ if (offset.pageIdx >= numPages || offset.pageIdx < 0) {
+ offset.pageIdx = previous ? numPages - 1 : 0;
+ offset.wrapped = true;
+ }
+ }
+
+ _updateMatch(found = false) {
+ let state = FindState.NOT_FOUND;
+ const wrapped = this._offset.wrapped;
+ this._offset.wrapped = false;
+
+ if (found) {
+ const previousPage = this._selected.pageIdx;
+ this._selected.pageIdx = this._offset.pageIdx;
+ this._selected.matchIdx = this._offset.matchIdx;
+ state = wrapped ? FindState.WRAPPED : FindState.FOUND;
+
+ if (previousPage !== -1 && previousPage !== this._selected.pageIdx) {
+ this._updatePage(previousPage);
+ }
+ }
+
+ this._updateUIState(state, this._state.findPrevious);
+
+ if (this._selected.pageIdx !== -1) {
+ this._scrollMatches = true;
+
+ this._updatePage(this._selected.pageIdx);
+ }
+ }
+
+ _onFindBarClose(evt) {
+ const pdfDocument = this._pdfDocument;
+
+ this._firstPageCapability.promise.then(() => {
+ if (!this._pdfDocument || pdfDocument && this._pdfDocument !== pdfDocument) {
+ return;
+ }
+
+ if (this._findTimeout) {
+ clearTimeout(this._findTimeout);
+ this._findTimeout = null;
+ }
+
+ if (this._resumePageIdx) {
+ this._resumePageIdx = null;
+ this._dirtyMatch = true;
+ }
+
+ this._updateUIState(FindState.FOUND);
+
+ this._highlightMatches = false;
+
+ this._updateAllPages();
+ });
+ }
+
+ _requestMatchesCount() {
+ const {
+ pageIdx,
+ matchIdx
+ } = this._selected;
+ let current = 0,
+ total = this._matchesCountTotal;
+
+ if (matchIdx !== -1) {
+ for (let i = 0; i < pageIdx; i++) {
+ current += this._pageMatches[i] && this._pageMatches[i].length || 0;
+ }
+
+ current += matchIdx + 1;
+ }
+
+ if (current < 1 || current > total) {
+ current = total = 0;
+ }
+
+ return {
+ current,
+ total
+ };
+ }
+
+ _updateUIResultsCount() {
+ this._eventBus.dispatch("updatefindmatchescount", {
+ source: this,
+ matchesCount: this._requestMatchesCount()
+ });
+ }
+
+ _updateUIState(state, previous) {
+ this._eventBus.dispatch("updatefindcontrolstate", {
+ source: this,
+ state,
+ previous,
+ matchesCount: this._requestMatchesCount(),
+ rawQuery: this._state ? this._state.query : null
+ });
+ }
+
+}
+
+exports.PDFFindController = PDFFindController;
+
+/***/ }),
+/* 16 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.getCharacterType = getCharacterType;
+exports.CharacterType = void 0;
+const CharacterType = {
+ SPACE: 0,
+ ALPHA_LETTER: 1,
+ PUNCT: 2,
+ HAN_LETTER: 3,
+ KATAKANA_LETTER: 4,
+ HIRAGANA_LETTER: 5,
+ HALFWIDTH_KATAKANA_LETTER: 6,
+ THAI_LETTER: 7
+};
+exports.CharacterType = CharacterType;
+
+function isAlphabeticalScript(charCode) {
+ return charCode < 0x2e80;
+}
+
+function isAscii(charCode) {
+ return (charCode & 0xff80) === 0;
+}
+
+function isAsciiAlpha(charCode) {
+ return charCode >= 0x61 && charCode <= 0x7a || charCode >= 0x41 && charCode <= 0x5a;
+}
+
+function isAsciiDigit(charCode) {
+ return charCode >= 0x30 && charCode <= 0x39;
+}
+
+function isAsciiSpace(charCode) {
+ return charCode === 0x20 || charCode === 0x09 || charCode === 0x0d || charCode === 0x0a;
+}
+
+function isHan(charCode) {
+ return charCode >= 0x3400 && charCode <= 0x9fff || charCode >= 0xf900 && charCode <= 0xfaff;
+}
+
+function isKatakana(charCode) {
+ return charCode >= 0x30a0 && charCode <= 0x30ff;
+}
+
+function isHiragana(charCode) {
+ return charCode >= 0x3040 && charCode <= 0x309f;
+}
+
+function isHalfwidthKatakana(charCode) {
+ return charCode >= 0xff60 && charCode <= 0xff9f;
+}
+
+function isThai(charCode) {
+ return (charCode & 0xff80) === 0x0e00;
+}
+
+function getCharacterType(charCode) {
+ if (isAlphabeticalScript(charCode)) {
+ if (isAscii(charCode)) {
+ if (isAsciiSpace(charCode)) {
+ return CharacterType.SPACE;
+ } else if (isAsciiAlpha(charCode) || isAsciiDigit(charCode) || charCode === 0x5f) {
+ return CharacterType.ALPHA_LETTER;
+ }
+
+ return CharacterType.PUNCT;
+ } else if (isThai(charCode)) {
+ return CharacterType.THAI_LETTER;
+ } else if (charCode === 0xa0) {
+ return CharacterType.SPACE;
+ }
+
+ return CharacterType.ALPHA_LETTER;
+ }
+
+ if (isHan(charCode)) {
+ return CharacterType.HAN_LETTER;
+ } else if (isKatakana(charCode)) {
+ return CharacterType.KATAKANA_LETTER;
+ } else if (isHiragana(charCode)) {
+ return CharacterType.HIRAGANA_LETTER;
+ } else if (isHalfwidthKatakana(charCode)) {
+ return CharacterType.HALFWIDTH_KATAKANA_LETTER;
+ }
+
+ return CharacterType.ALPHA_LETTER;
+}
+
+/***/ }),
+/* 17 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.isDestArraysEqual = isDestArraysEqual;
+exports.isDestHashesEqual = isDestHashesEqual;
+exports.PDFHistory = void 0;
+
+var _ui_utils = __webpack_require__(4);
+
+const HASH_CHANGE_TIMEOUT = 1000;
+const POSITION_UPDATED_THRESHOLD = 50;
+const UPDATE_VIEWAREA_TIMEOUT = 1000;
+
+function getCurrentHash() {
+ return document.location.hash;
+}
+
+class PDFHistory {
+ constructor({
+ linkService,
+ eventBus
+ }) {
+ this.linkService = linkService;
+ this.eventBus = eventBus;
+ this._initialized = false;
+ this._fingerprint = "";
+ this.reset();
+ this._boundEvents = null;
+ this._isViewerInPresentationMode = false;
+
+ this.eventBus._on("presentationmodechanged", evt => {
+ this._isViewerInPresentationMode = evt.state !== _ui_utils.PresentationModeState.NORMAL;
+ });
+
+ this.eventBus._on("pagesinit", () => {
+ this._isPagesLoaded = false;
+
+ this.eventBus._on("pagesloaded", evt => {
+ this._isPagesLoaded = !!evt.pagesCount;
+ }, {
+ once: true
+ });
+ });
+ }
+
+ initialize({
+ fingerprint,
+ resetHistory = false,
+ updateUrl = false
+ }) {
+ if (!fingerprint || typeof fingerprint !== "string") {
+ console.error('PDFHistory.initialize: The "fingerprint" must be a non-empty string.');
+ return;
+ }
+
+ if (this._initialized) {
+ this.reset();
+ }
+
+ const reInitialized = this._fingerprint !== "" && this._fingerprint !== fingerprint;
+ this._fingerprint = fingerprint;
+ this._updateUrl = updateUrl === true;
+ this._initialized = true;
+
+ this._bindEvents();
+
+ const state = window.history.state;
+ this._popStateInProgress = false;
+ this._blockHashChange = 0;
+ this._currentHash = getCurrentHash();
+ this._numPositionUpdates = 0;
+ this._uid = this._maxUid = 0;
+ this._destination = null;
+ this._position = null;
+
+ if (!this._isValidState(state, true) || resetHistory) {
+ const {
+ hash,
+ page,
+ rotation
+ } = this._parseCurrentHash(true);
+
+ if (!hash || reInitialized || resetHistory) {
+ this._pushOrReplaceState(null, true);
+
+ return;
+ }
+
+ this._pushOrReplaceState({
+ hash,
+ page,
+ rotation
+ }, true);
+
+ return;
+ }
+
+ const destination = state.destination;
+
+ this._updateInternalState(destination, state.uid, true);
+
+ if (destination.rotation !== undefined) {
+ this._initialRotation = destination.rotation;
+ }
+
+ if (destination.dest) {
+ this._initialBookmark = JSON.stringify(destination.dest);
+ this._destination.page = null;
+ } else if (destination.hash) {
+ this._initialBookmark = destination.hash;
+ } else if (destination.page) {
+ this._initialBookmark = `page=${destination.page}`;
+ }
+ }
+
+ reset() {
+ if (this._initialized) {
+ this._pageHide();
+
+ this._initialized = false;
+
+ this._unbindEvents();
+ }
+
+ if (this._updateViewareaTimeout) {
+ clearTimeout(this._updateViewareaTimeout);
+ this._updateViewareaTimeout = null;
+ }
+
+ this._initialBookmark = null;
+ this._initialRotation = null;
+ }
+
+ push({
+ namedDest = null,
+ explicitDest,
+ pageNumber
+ }) {
+ if (!this._initialized) {
+ return;
+ }
+
+ if (namedDest && typeof namedDest !== "string") {
+ console.error("PDFHistory.push: " + `"${namedDest}" is not a valid namedDest parameter.`);
+ return;
+ } else if (!Array.isArray(explicitDest)) {
+ console.error("PDFHistory.push: " + `"${explicitDest}" is not a valid explicitDest parameter.`);
+ return;
+ } else if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.linkService.pagesCount)) {
+ if (pageNumber !== null || this._destination) {
+ console.error("PDFHistory.push: " + `"${pageNumber}" is not a valid pageNumber parameter.`);
+ return;
+ }
+ }
+
+ const hash = namedDest || JSON.stringify(explicitDest);
+
+ if (!hash) {
+ return;
+ }
+
+ let forceReplace = false;
+
+ if (this._destination && (isDestHashesEqual(this._destination.hash, hash) || isDestArraysEqual(this._destination.dest, explicitDest))) {
+ if (this._destination.page) {
+ return;
+ }
+
+ forceReplace = true;
+ }
+
+ if (this._popStateInProgress && !forceReplace) {
+ return;
+ }
+
+ this._pushOrReplaceState({
+ dest: explicitDest,
+ hash,
+ page: pageNumber,
+ rotation: this.linkService.rotation
+ }, forceReplace);
+
+ if (!this._popStateInProgress) {
+ this._popStateInProgress = true;
+ Promise.resolve().then(() => {
+ this._popStateInProgress = false;
+ });
+ }
+ }
+
+ pushPage(pageNumber) {
+ if (!this._initialized) {
+ return;
+ }
+
+ if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.linkService.pagesCount)) {
+ console.error(`PDFHistory.pushPage: "${pageNumber}" is not a valid page number.`);
+ return;
+ }
+
+ if (this._destination?.page === pageNumber) {
+ return;
+ }
+
+ if (this._popStateInProgress) {
+ return;
+ }
+
+ this._pushOrReplaceState({
+ hash: `page=${pageNumber}`,
+ page: pageNumber,
+ rotation: this.linkService.rotation
+ });
+
+ if (!this._popStateInProgress) {
+ this._popStateInProgress = true;
+ Promise.resolve().then(() => {
+ this._popStateInProgress = false;
+ });
+ }
+ }
+
+ pushCurrentPosition() {
+ if (!this._initialized || this._popStateInProgress) {
+ return;
+ }
+
+ this._tryPushCurrentPosition();
+ }
+
+ back() {
+ if (!this._initialized || this._popStateInProgress) {
+ return;
+ }
+
+ const state = window.history.state;
+
+ if (this._isValidState(state) && state.uid > 0) {
+ window.history.back();
+ }
+ }
+
+ forward() {
+ if (!this._initialized || this._popStateInProgress) {
+ return;
+ }
+
+ const state = window.history.state;
+
+ if (this._isValidState(state) && state.uid < this._maxUid) {
+ window.history.forward();
+ }
+ }
+
+ get popStateInProgress() {
+ return this._initialized && (this._popStateInProgress || this._blockHashChange > 0);
+ }
+
+ get initialBookmark() {
+ return this._initialized ? this._initialBookmark : null;
+ }
+
+ get initialRotation() {
+ return this._initialized ? this._initialRotation : null;
+ }
+
+ _pushOrReplaceState(destination, forceReplace = false) {
+ const shouldReplace = forceReplace || !this._destination;
+ const newState = {
+ fingerprint: this._fingerprint,
+ uid: shouldReplace ? this._uid : this._uid + 1,
+ destination
+ };
+
+ this._updateInternalState(destination, newState.uid);
+
+ let newUrl;
+
+ if (this._updateUrl && destination?.hash) {
+ const baseUrl = document.location.href.split("#")[0];
+
+ if (!baseUrl.startsWith("file://")) {
+ newUrl = `${baseUrl}#${destination.hash}`;
+ }
+ }
+
+ if (shouldReplace) {
+ window.history.replaceState(newState, "", newUrl);
+ } else {
+ window.history.pushState(newState, "", newUrl);
+ }
+ }
+
+ _tryPushCurrentPosition(temporary = false) {
+ if (!this._position) {
+ return;
+ }
+
+ let position = this._position;
+
+ if (temporary) {
+ position = Object.assign(Object.create(null), this._position);
+ position.temporary = true;
+ }
+
+ if (!this._destination) {
+ this._pushOrReplaceState(position);
+
+ return;
+ }
+
+ if (this._destination.temporary) {
+ this._pushOrReplaceState(position, true);
+
+ return;
+ }
+
+ if (this._destination.hash === position.hash) {
+ return;
+ }
+
+ if (!this._destination.page && (POSITION_UPDATED_THRESHOLD <= 0 || this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)) {
+ return;
+ }
+
+ let forceReplace = false;
+
+ if (this._destination.page >= position.first && this._destination.page <= position.page) {
+ if (this._destination.dest || !this._destination.first) {
+ return;
+ }
+
+ forceReplace = true;
+ }
+
+ this._pushOrReplaceState(position, forceReplace);
+ }
+
+ _isValidState(state, checkReload = false) {
+ if (!state) {
+ return false;
+ }
+
+ if (state.fingerprint !== this._fingerprint) {
+ if (checkReload) {
+ if (typeof state.fingerprint !== "string" || state.fingerprint.length !== this._fingerprint.length) {
+ return false;
+ }
+
+ const [perfEntry] = performance.getEntriesByType("navigation");
+
+ if (perfEntry?.type !== "reload") {
+ return false;
+ }
+ } else {
+ return false;
+ }
+ }
+
+ if (!Number.isInteger(state.uid) || state.uid < 0) {
+ return false;
+ }
+
+ if (state.destination === null || typeof state.destination !== "object") {
+ return false;
+ }
+
+ return true;
+ }
+
+ _updateInternalState(destination, uid, removeTemporary = false) {
+ if (this._updateViewareaTimeout) {
+ clearTimeout(this._updateViewareaTimeout);
+ this._updateViewareaTimeout = null;
+ }
+
+ if (removeTemporary && destination?.temporary) {
+ delete destination.temporary;
+ }
+
+ this._destination = destination;
+ this._uid = uid;
+ this._maxUid = Math.max(this._maxUid, uid);
+ this._numPositionUpdates = 0;
+ }
+
+ _parseCurrentHash(checkNameddest = false) {
+ const hash = unescape(getCurrentHash()).substring(1);
+ const params = (0, _ui_utils.parseQueryString)(hash);
+ const nameddest = params.nameddest || "";
+ let page = params.page | 0;
+
+ if (!(Number.isInteger(page) && page > 0 && page <= this.linkService.pagesCount) || checkNameddest && nameddest.length > 0) {
+ page = null;
+ }
+
+ return {
+ hash,
+ page,
+ rotation: this.linkService.rotation
+ };
+ }
+
+ _updateViewarea({
+ location
+ }) {
+ if (this._updateViewareaTimeout) {
+ clearTimeout(this._updateViewareaTimeout);
+ this._updateViewareaTimeout = null;
+ }
+
+ this._position = {
+ hash: this._isViewerInPresentationMode ? `page=${location.pageNumber}` : location.pdfOpenParams.substring(1),
+ page: this.linkService.page,
+ first: location.pageNumber,
+ rotation: location.rotation
+ };
+
+ if (this._popStateInProgress) {
+ return;
+ }
+
+ if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded && this._destination && !this._destination.page) {
+ this._numPositionUpdates++;
+ }
+
+ if (UPDATE_VIEWAREA_TIMEOUT > 0) {
+ this._updateViewareaTimeout = setTimeout(() => {
+ if (!this._popStateInProgress) {
+ this._tryPushCurrentPosition(true);
+ }
+
+ this._updateViewareaTimeout = null;
+ }, UPDATE_VIEWAREA_TIMEOUT);
+ }
+ }
+
+ _popState({
+ state
+ }) {
+ const newHash = getCurrentHash(),
+ hashChanged = this._currentHash !== newHash;
+ this._currentHash = newHash;
+
+ if (!state) {
+ this._uid++;
+
+ const {
+ hash,
+ page,
+ rotation
+ } = this._parseCurrentHash();
+
+ this._pushOrReplaceState({
+ hash,
+ page,
+ rotation
+ }, true);
+
+ return;
+ }
+
+ if (!this._isValidState(state)) {
+ return;
+ }
+
+ this._popStateInProgress = true;
+
+ if (hashChanged) {
+ this._blockHashChange++;
+ (0, _ui_utils.waitOnEventOrTimeout)({
+ target: window,
+ name: "hashchange",
+ delay: HASH_CHANGE_TIMEOUT
+ }).then(() => {
+ this._blockHashChange--;
+ });
+ }
+
+ const destination = state.destination;
+
+ this._updateInternalState(destination, state.uid, true);
+
+ if ((0, _ui_utils.isValidRotation)(destination.rotation)) {
+ this.linkService.rotation = destination.rotation;
+ }
+
+ if (destination.dest) {
+ this.linkService.goToDestination(destination.dest);
+ } else if (destination.hash) {
+ this.linkService.setHash(destination.hash);
+ } else if (destination.page) {
+ this.linkService.page = destination.page;
+ }
+
+ Promise.resolve().then(() => {
+ this._popStateInProgress = false;
+ });
+ }
+
+ _pageHide() {
+ if (!this._destination || this._destination.temporary) {
+ this._tryPushCurrentPosition();
+ }
+ }
+
+ _bindEvents() {
+ if (this._boundEvents) {
+ return;
+ }
+
+ this._boundEvents = {
+ updateViewarea: this._updateViewarea.bind(this),
+ popState: this._popState.bind(this),
+ pageHide: this._pageHide.bind(this)
+ };
+
+ this.eventBus._on("updateviewarea", this._boundEvents.updateViewarea);
+
+ window.addEventListener("popstate", this._boundEvents.popState);
+ window.addEventListener("pagehide", this._boundEvents.pageHide);
+ }
+
+ _unbindEvents() {
+ if (!this._boundEvents) {
+ return;
+ }
+
+ this.eventBus._off("updateviewarea", this._boundEvents.updateViewarea);
+
+ window.removeEventListener("popstate", this._boundEvents.popState);
+ window.removeEventListener("pagehide", this._boundEvents.pageHide);
+ this._boundEvents = null;
+ }
+
+}
+
+exports.PDFHistory = PDFHistory;
+
+function isDestHashesEqual(destHash, pushHash) {
+ if (typeof destHash !== "string" || typeof pushHash !== "string") {
+ return false;
+ }
+
+ if (destHash === pushHash) {
+ return true;
+ }
+
+ const {
+ nameddest
+ } = (0, _ui_utils.parseQueryString)(destHash);
+
+ if (nameddest === pushHash) {
+ return true;
+ }
+
+ return false;
+}
+
+function isDestArraysEqual(firstDest, secondDest) {
+ function isEntryEqual(first, second) {
+ if (typeof first !== typeof second) {
+ return false;
+ }
+
+ if (Array.isArray(first) || Array.isArray(second)) {
+ return false;
+ }
+
+ if (first !== null && typeof first === "object" && second !== null) {
+ if (Object.keys(first).length !== Object.keys(second).length) {
+ return false;
+ }
+
+ for (const key in first) {
+ if (!isEntryEqual(first[key], second[key])) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ return first === second || Number.isNaN(first) && Number.isNaN(second);
+ }
+
+ if (!(Array.isArray(firstDest) && Array.isArray(secondDest))) {
+ return false;
+ }
+
+ if (firstDest.length !== secondDest.length) {
+ return false;
+ }
+
+ for (let i = 0, ii = firstDest.length; i < ii; i++) {
+ if (!isEntryEqual(firstDest[i], secondDest[i])) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+/***/ }),
+/* 18 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFLayerViewer = void 0;
+
+var _base_tree_viewer = __webpack_require__(12);
+
+class PDFLayerViewer extends _base_tree_viewer.BaseTreeViewer {
+ constructor(options) {
+ super(options);
+ this.l10n = options.l10n;
+
+ this.eventBus._on("resetlayers", this._resetLayers.bind(this));
+
+ this.eventBus._on("togglelayerstree", this._toggleAllTreeItems.bind(this));
+ }
+
+ reset() {
+ super.reset();
+ this._optionalContentConfig = null;
+ }
+
+ _dispatchEvent(layersCount) {
+ this.eventBus.dispatch("layersloaded", {
+ source: this,
+ layersCount
+ });
+ }
+
+ _bindLink(element, {
+ groupId,
+ input
+ }) {
+ const setVisibility = () => {
+ this._optionalContentConfig.setVisibility(groupId, input.checked);
+
+ this.eventBus.dispatch("optionalcontentconfig", {
+ source: this,
+ promise: Promise.resolve(this._optionalContentConfig)
+ });
+ };
+
+ element.onclick = evt => {
+ if (evt.target === input) {
+ setVisibility();
+ return true;
+ } else if (evt.target !== element) {
+ return true;
+ }
+
+ input.checked = !input.checked;
+ setVisibility();
+ return false;
+ };
+ }
+
+ async _setNestedName(element, {
+ name = null
+ }) {
+ if (typeof name === "string") {
+ element.textContent = this._normalizeTextContent(name);
+ return;
+ }
+
+ element.textContent = await this.l10n.get("additional_layers", null, "Additional Layers");
+ element.style.fontStyle = "italic";
+ }
+
+ _addToggleButton(div, {
+ name = null
+ }) {
+ super._addToggleButton(div, name === null);
+ }
+
+ _toggleAllTreeItems() {
+ if (!this._optionalContentConfig) {
+ return;
+ }
+
+ super._toggleAllTreeItems();
+ }
+
+ render({
+ optionalContentConfig,
+ pdfDocument
+ }) {
+ if (this._optionalContentConfig) {
+ this.reset();
+ }
+
+ this._optionalContentConfig = optionalContentConfig || null;
+ this._pdfDocument = pdfDocument || null;
+ const groups = optionalContentConfig && optionalContentConfig.getOrder();
+
+ if (!groups) {
+ this._dispatchEvent(0);
+
+ return;
+ }
+
+ const fragment = document.createDocumentFragment(),
+ queue = [{
+ parent: fragment,
+ groups
+ }];
+ let layersCount = 0,
+ hasAnyNesting = false;
+
+ while (queue.length > 0) {
+ const levelData = queue.shift();
+
+ for (const groupId of levelData.groups) {
+ const div = document.createElement("div");
+ div.className = "treeItem";
+ const element = document.createElement("a");
+ div.appendChild(element);
+
+ if (typeof groupId === "object") {
+ hasAnyNesting = true;
+
+ this._addToggleButton(div, groupId);
+
+ this._setNestedName(element, groupId);
+
+ const itemsDiv = document.createElement("div");
+ itemsDiv.className = "treeItems";
+ div.appendChild(itemsDiv);
+ queue.push({
+ parent: itemsDiv,
+ groups: groupId.order
+ });
+ } else {
+ const group = optionalContentConfig.getGroup(groupId);
+ const input = document.createElement("input");
+
+ this._bindLink(element, {
+ groupId,
+ input
+ });
+
+ input.type = "checkbox";
+ input.id = groupId;
+ input.checked = group.visible;
+ const label = document.createElement("label");
+ label.setAttribute("for", groupId);
+ label.textContent = this._normalizeTextContent(group.name);
+ element.appendChild(input);
+ element.appendChild(label);
+ layersCount++;
+ }
+
+ levelData.parent.appendChild(div);
+ }
+ }
+
+ this._finishRendering(fragment, layersCount, hasAnyNesting);
+ }
+
+ async _resetLayers() {
+ if (!this._optionalContentConfig) {
+ return;
+ }
+
+ const optionalContentConfig = await this._pdfDocument.getOptionalContentConfig();
+ this.eventBus.dispatch("optionalcontentconfig", {
+ source: this,
+ promise: Promise.resolve(optionalContentConfig)
+ });
+ this.render({
+ optionalContentConfig,
+ pdfDocument: this._pdfDocument
+ });
+ }
+
+}
+
+exports.PDFLayerViewer = PDFLayerViewer;
+
+/***/ }),
+/* 19 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.SimpleLinkService = exports.PDFLinkService = void 0;
+
+var _ui_utils = __webpack_require__(4);
+
+class PDFLinkService {
+ constructor({
+ eventBus,
+ externalLinkTarget = null,
+ externalLinkRel = null,
+ externalLinkEnabled = true,
+ ignoreDestinationZoom = false
+ } = {}) {
+ this.eventBus = eventBus;
+ this.externalLinkTarget = externalLinkTarget;
+ this.externalLinkRel = externalLinkRel;
+ this.externalLinkEnabled = externalLinkEnabled;
+ this._ignoreDestinationZoom = ignoreDestinationZoom;
+ this.baseUrl = null;
+ this.pdfDocument = null;
+ this.pdfViewer = null;
+ this.pdfHistory = null;
+ this._pagesRefCache = null;
+ }
+
+ setDocument(pdfDocument, baseUrl = null) {
+ this.baseUrl = baseUrl;
+ this.pdfDocument = pdfDocument;
+ this._pagesRefCache = Object.create(null);
+ }
+
+ setViewer(pdfViewer) {
+ this.pdfViewer = pdfViewer;
+ }
+
+ setHistory(pdfHistory) {
+ this.pdfHistory = pdfHistory;
+ }
+
+ get pagesCount() {
+ return this.pdfDocument ? this.pdfDocument.numPages : 0;
+ }
+
+ get page() {
+ return this.pdfViewer.currentPageNumber;
+ }
+
+ set page(value) {
+ this.pdfViewer.currentPageNumber = value;
+ }
+
+ get rotation() {
+ return this.pdfViewer.pagesRotation;
+ }
+
+ set rotation(value) {
+ this.pdfViewer.pagesRotation = value;
+ }
+
+ navigateTo(dest) {
+ console.error("Deprecated method: `navigateTo`, use `goToDestination` instead.");
+ this.goToDestination(dest);
+ }
+
+ _goToDestinationHelper(rawDest, namedDest = null, explicitDest) {
+ const destRef = explicitDest[0];
+ let pageNumber;
+
+ if (destRef instanceof Object) {
+ pageNumber = this._cachedPageNumber(destRef);
+
+ if (pageNumber === null) {
+ this.pdfDocument.getPageIndex(destRef).then(pageIndex => {
+ this.cachePageRef(pageIndex + 1, destRef);
+
+ this._goToDestinationHelper(rawDest, namedDest, explicitDest);
+ }).catch(() => {
+ console.error(`PDFLinkService._goToDestinationHelper: "${destRef}" is not ` + `a valid page reference, for dest="${rawDest}".`);
+ });
+ return;
+ }
+ } else if (Number.isInteger(destRef)) {
+ pageNumber = destRef + 1;
+ } else {
+ console.error(`PDFLinkService._goToDestinationHelper: "${destRef}" is not ` + `a valid destination reference, for dest="${rawDest}".`);
+ return;
+ }
+
+ if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {
+ console.error(`PDFLinkService._goToDestinationHelper: "${pageNumber}" is not ` + `a valid page number, for dest="${rawDest}".`);
+ return;
+ }
+
+ if (this.pdfHistory) {
+ this.pdfHistory.pushCurrentPosition();
+ this.pdfHistory.push({
+ namedDest,
+ explicitDest,
+ pageNumber
+ });
+ }
+
+ this.pdfViewer.scrollPageIntoView({
+ pageNumber,
+ destArray: explicitDest,
+ ignoreDestinationZoom: this._ignoreDestinationZoom
+ });
+ }
+
+ async goToDestination(dest) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ let namedDest, explicitDest;
+
+ if (typeof dest === "string") {
+ namedDest = dest;
+ explicitDest = await this.pdfDocument.getDestination(dest);
+ } else {
+ namedDest = null;
+ explicitDest = await dest;
+ }
+
+ if (!Array.isArray(explicitDest)) {
+ console.error(`PDFLinkService.goToDestination: "${explicitDest}" is not ` + `a valid destination array, for dest="${dest}".`);
+ return;
+ }
+
+ this._goToDestinationHelper(dest, namedDest, explicitDest);
+ }
+
+ goToPage(val) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ const pageNumber = typeof val === "string" && this.pdfViewer.pageLabelToPageNumber(val) || val | 0;
+
+ if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) {
+ console.error(`PDFLinkService.goToPage: "${val}" is not a valid page.`);
+ return;
+ }
+
+ if (this.pdfHistory) {
+ this.pdfHistory.pushCurrentPosition();
+ this.pdfHistory.pushPage(pageNumber);
+ }
+
+ this.pdfViewer.scrollPageIntoView({
+ pageNumber
+ });
+ }
+
+ getDestinationHash(dest) {
+ if (typeof dest === "string") {
+ if (dest.length > 0) {
+ return this.getAnchorUrl("#" + escape(dest));
+ }
+ } else if (Array.isArray(dest)) {
+ const str = JSON.stringify(dest);
+
+ if (str.length > 0) {
+ return this.getAnchorUrl("#" + escape(str));
+ }
+ }
+
+ return this.getAnchorUrl("");
+ }
+
+ getAnchorUrl(anchor) {
+ return (this.baseUrl || "") + anchor;
+ }
+
+ setHash(hash) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ let pageNumber, dest;
+
+ if (hash.includes("=")) {
+ const params = (0, _ui_utils.parseQueryString)(hash);
+
+ if ("search" in params) {
+ this.eventBus.dispatch("findfromurlhash", {
+ source: this,
+ query: params.search.replace(/"/g, ""),
+ phraseSearch: params.phrase === "true"
+ });
+ }
+
+ if ("page" in params) {
+ pageNumber = params.page | 0 || 1;
+ }
+
+ if ("zoom" in params) {
+ const zoomArgs = params.zoom.split(",");
+ const zoomArg = zoomArgs[0];
+ const zoomArgNumber = parseFloat(zoomArg);
+
+ if (!zoomArg.includes("Fit")) {
+ dest = [null, {
+ name: "XYZ"
+ }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null, zoomArgs.length > 2 ? zoomArgs[2] | 0 : null, zoomArgNumber ? zoomArgNumber / 100 : zoomArg];
+ } else {
+ if (zoomArg === "Fit" || zoomArg === "FitB") {
+ dest = [null, {
+ name: zoomArg
+ }];
+ } else if (zoomArg === "FitH" || zoomArg === "FitBH" || zoomArg === "FitV" || zoomArg === "FitBV") {
+ dest = [null, {
+ name: zoomArg
+ }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null];
+ } else if (zoomArg === "FitR") {
+ if (zoomArgs.length !== 5) {
+ console.error('PDFLinkService.setHash: Not enough parameters for "FitR".');
+ } else {
+ dest = [null, {
+ name: zoomArg
+ }, zoomArgs[1] | 0, zoomArgs[2] | 0, zoomArgs[3] | 0, zoomArgs[4] | 0];
+ }
+ } else {
+ console.error(`PDFLinkService.setHash: "${zoomArg}" is not ` + "a valid zoom value.");
+ }
+ }
+ }
+
+ if (dest) {
+ this.pdfViewer.scrollPageIntoView({
+ pageNumber: pageNumber || this.page,
+ destArray: dest,
+ allowNegativeOffset: true
+ });
+ } else if (pageNumber) {
+ this.page = pageNumber;
+ }
+
+ if ("pagemode" in params) {
+ this.eventBus.dispatch("pagemode", {
+ source: this,
+ mode: params.pagemode
+ });
+ }
+
+ if ("nameddest" in params) {
+ this.goToDestination(params.nameddest);
+ }
+ } else {
+ dest = unescape(hash);
+
+ try {
+ dest = JSON.parse(dest);
+
+ if (!Array.isArray(dest)) {
+ dest = dest.toString();
+ }
+ } catch (ex) {}
+
+ if (typeof dest === "string" || isValidExplicitDestination(dest)) {
+ this.goToDestination(dest);
+ return;
+ }
+
+ console.error(`PDFLinkService.setHash: "${unescape(hash)}" is not ` + "a valid destination.");
+ }
+ }
+
+ executeNamedAction(action) {
+ switch (action) {
+ case "GoBack":
+ if (this.pdfHistory) {
+ this.pdfHistory.back();
+ }
+
+ break;
+
+ case "GoForward":
+ if (this.pdfHistory) {
+ this.pdfHistory.forward();
+ }
+
+ break;
+
+ case "NextPage":
+ this.pdfViewer.nextPage();
+ break;
+
+ case "PrevPage":
+ this.pdfViewer.previousPage();
+ break;
+
+ case "LastPage":
+ this.page = this.pagesCount;
+ break;
+
+ case "FirstPage":
+ this.page = 1;
+ break;
+
+ default:
+ break;
+ }
+
+ this.eventBus.dispatch("namedaction", {
+ source: this,
+ action
+ });
+ }
+
+ cachePageRef(pageNum, pageRef) {
+ if (!pageRef) {
+ return;
+ }
+
+ const refStr = pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;
+ this._pagesRefCache[refStr] = pageNum;
+ }
+
+ _cachedPageNumber(pageRef) {
+ const refStr = pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;
+ return this._pagesRefCache && this._pagesRefCache[refStr] || null;
+ }
+
+ isPageVisible(pageNumber) {
+ return this.pdfViewer.isPageVisible(pageNumber);
+ }
+
+ isPageCached(pageNumber) {
+ return this.pdfViewer.isPageCached(pageNumber);
+ }
+
+}
+
+exports.PDFLinkService = PDFLinkService;
+
+function isValidExplicitDestination(dest) {
+ if (!Array.isArray(dest)) {
+ return false;
+ }
+
+ const destLength = dest.length;
+
+ if (destLength < 2) {
+ return false;
+ }
+
+ const page = dest[0];
+
+ if (!(typeof page === "object" && Number.isInteger(page.num) && Number.isInteger(page.gen)) && !(Number.isInteger(page) && page >= 0)) {
+ return false;
+ }
+
+ const zoom = dest[1];
+
+ if (!(typeof zoom === "object" && typeof zoom.name === "string")) {
+ return false;
+ }
+
+ let allowNull = true;
+
+ switch (zoom.name) {
+ case "XYZ":
+ if (destLength !== 5) {
+ return false;
+ }
+
+ break;
+
+ case "Fit":
+ case "FitB":
+ return destLength === 2;
+
+ case "FitH":
+ case "FitBH":
+ case "FitV":
+ case "FitBV":
+ if (destLength !== 3) {
+ return false;
+ }
+
+ break;
+
+ case "FitR":
+ if (destLength !== 6) {
+ return false;
+ }
+
+ allowNull = false;
+ break;
+
+ default:
+ return false;
+ }
+
+ for (let i = 2; i < destLength; i++) {
+ const param = dest[i];
+
+ if (!(typeof param === "number" || allowNull && param === null)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+class SimpleLinkService {
+ constructor() {
+ this.externalLinkTarget = null;
+ this.externalLinkRel = null;
+ this.externalLinkEnabled = true;
+ this._ignoreDestinationZoom = false;
+ }
+
+ get pagesCount() {
+ return 0;
+ }
+
+ get page() {
+ return 0;
+ }
+
+ set page(value) {}
+
+ get rotation() {
+ return 0;
+ }
+
+ set rotation(value) {}
+
+ async goToDestination(dest) {}
+
+ goToPage(val) {}
+
+ getDestinationHash(dest) {
+ return "#";
+ }
+
+ getAnchorUrl(hash) {
+ return "#";
+ }
+
+ setHash(hash) {}
+
+ executeNamedAction(action) {}
+
+ cachePageRef(pageNum, pageRef) {}
+
+ isPageVisible(pageNumber) {
+ return true;
+ }
+
+ isPageCached(pageNumber) {
+ return true;
+ }
+
+}
+
+exports.SimpleLinkService = SimpleLinkService;
+
+/***/ }),
+/* 20 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFOutlineViewer = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+var _base_tree_viewer = __webpack_require__(12);
+
+var _ui_utils = __webpack_require__(4);
+
+class PDFOutlineViewer extends _base_tree_viewer.BaseTreeViewer {
+ constructor(options) {
+ super(options);
+ this.linkService = options.linkService;
+
+ this.eventBus._on("toggleoutlinetree", this._toggleAllTreeItems.bind(this));
+
+ this.eventBus._on("currentoutlineitem", this._currentOutlineItem.bind(this));
+
+ this.eventBus._on("pagechanging", evt => {
+ this._currentPageNumber = evt.pageNumber;
+ });
+
+ this.eventBus._on("pagesloaded", evt => {
+ this._isPagesLoaded = !!evt.pagesCount;
+ });
+
+ this.eventBus._on("sidebarviewchanged", evt => {
+ this._sidebarView = evt.view;
+ });
+ }
+
+ reset() {
+ super.reset();
+ this._outline = null;
+ this._pageNumberToDestHashCapability = null;
+ this._currentPageNumber = 1;
+ this._isPagesLoaded = false;
+ }
+
+ _dispatchEvent(outlineCount) {
+ this.eventBus.dispatch("outlineloaded", {
+ source: this,
+ outlineCount,
+ enableCurrentOutlineItemButton: outlineCount > 0 && !this._pdfDocument?.loadingParams.disableAutoFetch
+ });
+ }
+
+ _bindLink(element, {
+ url,
+ newWindow,
+ dest
+ }) {
+ const {
+ linkService
+ } = this;
+
+ if (url) {
+ (0, _pdfjsLib.addLinkAttributes)(element, {
+ url,
+ target: newWindow ? _pdfjsLib.LinkTarget.BLANK : linkService.externalLinkTarget,
+ rel: linkService.externalLinkRel,
+ enabled: linkService.externalLinkEnabled
+ });
+ return;
+ }
+
+ element.href = linkService.getDestinationHash(dest);
+
+ element.onclick = evt => {
+ this._updateCurrentTreeItem(evt.target.parentNode);
+
+ if (dest) {
+ linkService.goToDestination(dest);
+ }
+
+ return false;
+ };
+ }
+
+ _setStyles(element, {
+ bold,
+ italic
+ }) {
+ if (bold) {
+ element.style.fontWeight = "bold";
+ }
+
+ if (italic) {
+ element.style.fontStyle = "italic";
+ }
+ }
+
+ _addToggleButton(div, {
+ count,
+ items
+ }) {
+ let hidden = false;
+
+ if (count < 0) {
+ let totalCount = items.length;
+
+ if (totalCount > 0) {
+ const queue = [...items];
+
+ while (queue.length > 0) {
+ const {
+ count: nestedCount,
+ items: nestedItems
+ } = queue.shift();
+
+ if (nestedCount > 0 && nestedItems.length > 0) {
+ totalCount += nestedItems.length;
+ queue.push(...nestedItems);
+ }
+ }
+ }
+
+ if (Math.abs(count) === totalCount) {
+ hidden = true;
+ }
+ }
+
+ super._addToggleButton(div, hidden);
+ }
+
+ _toggleAllTreeItems() {
+ if (!this._outline) {
+ return;
+ }
+
+ super._toggleAllTreeItems();
+ }
+
+ render({
+ outline,
+ pdfDocument
+ }) {
+ if (this._outline) {
+ this.reset();
+ }
+
+ this._outline = outline || null;
+ this._pdfDocument = pdfDocument || null;
+
+ if (!outline) {
+ this._dispatchEvent(0);
+
+ return;
+ }
+
+ const fragment = document.createDocumentFragment();
+ const queue = [{
+ parent: fragment,
+ items: outline
+ }];
+ let outlineCount = 0,
+ hasAnyNesting = false;
+
+ while (queue.length > 0) {
+ const levelData = queue.shift();
+
+ for (const item of levelData.items) {
+ const div = document.createElement("div");
+ div.className = "treeItem";
+ const element = document.createElement("a");
+
+ this._bindLink(element, item);
+
+ this._setStyles(element, item);
+
+ element.textContent = this._normalizeTextContent(item.title);
+ div.appendChild(element);
+
+ if (item.items.length > 0) {
+ hasAnyNesting = true;
+
+ this._addToggleButton(div, item);
+
+ const itemsDiv = document.createElement("div");
+ itemsDiv.className = "treeItems";
+ div.appendChild(itemsDiv);
+ queue.push({
+ parent: itemsDiv,
+ items: item.items
+ });
+ }
+
+ levelData.parent.appendChild(div);
+ outlineCount++;
+ }
+ }
+
+ this._finishRendering(fragment, outlineCount, hasAnyNesting);
+ }
+
+ async _currentOutlineItem() {
+ if (!this._isPagesLoaded) {
+ throw new Error("_currentOutlineItem: All pages have not been loaded.");
+ }
+
+ if (!this._outline || !this._pdfDocument) {
+ return;
+ }
+
+ const pageNumberToDestHash = await this._getPageNumberToDestHash(this._pdfDocument);
+
+ if (!pageNumberToDestHash) {
+ return;
+ }
+
+ this._updateCurrentTreeItem(null);
+
+ if (this._sidebarView !== _ui_utils.SidebarView.OUTLINE) {
+ return;
+ }
+
+ for (let i = this._currentPageNumber; i > 0; i--) {
+ const destHash = pageNumberToDestHash.get(i);
+
+ if (!destHash) {
+ continue;
+ }
+
+ const linkElement = this.container.querySelector(`a[href="${destHash}"]`);
+
+ if (!linkElement) {
+ continue;
+ }
+
+ this._scrollToCurrentTreeItem(linkElement.parentNode);
+
+ break;
+ }
+ }
+
+ async _getPageNumberToDestHash(pdfDocument) {
+ if (this._pageNumberToDestHashCapability) {
+ return this._pageNumberToDestHashCapability.promise;
+ }
+
+ this._pageNumberToDestHashCapability = (0, _pdfjsLib.createPromiseCapability)();
+ const pageNumberToDestHash = new Map(),
+ pageNumberNesting = new Map();
+ const queue = [{
+ nesting: 0,
+ items: this._outline
+ }];
+
+ while (queue.length > 0) {
+ const levelData = queue.shift(),
+ currentNesting = levelData.nesting;
+
+ for (const {
+ dest,
+ items
+ } of levelData.items) {
+ let explicitDest, pageNumber;
+
+ if (typeof dest === "string") {
+ explicitDest = await pdfDocument.getDestination(dest);
+
+ if (pdfDocument !== this._pdfDocument) {
+ return null;
+ }
+ } else {
+ explicitDest = dest;
+ }
+
+ if (Array.isArray(explicitDest)) {
+ const [destRef] = explicitDest;
+
+ if (typeof destRef === "object") {
+ pageNumber = this.linkService._cachedPageNumber(destRef);
+
+ if (!pageNumber) {
+ try {
+ pageNumber = (await pdfDocument.getPageIndex(destRef)) + 1;
+
+ if (pdfDocument !== this._pdfDocument) {
+ return null;
+ }
+
+ this.linkService.cachePageRef(pageNumber, destRef);
+ } catch (ex) {}
+ }
+ } else if (Number.isInteger(destRef)) {
+ pageNumber = destRef + 1;
+ }
+
+ if (Number.isInteger(pageNumber) && (!pageNumberToDestHash.has(pageNumber) || currentNesting > pageNumberNesting.get(pageNumber))) {
+ const destHash = this.linkService.getDestinationHash(dest);
+ pageNumberToDestHash.set(pageNumber, destHash);
+ pageNumberNesting.set(pageNumber, currentNesting);
+ }
+ }
+
+ if (items.length > 0) {
+ queue.push({
+ nesting: currentNesting + 1,
+ items
+ });
+ }
+ }
+ }
+
+ this._pageNumberToDestHashCapability.resolve(pageNumberToDestHash.size > 0 ? pageNumberToDestHash : null);
+
+ return this._pageNumberToDestHashCapability.promise;
+ }
+
+}
+
+exports.PDFOutlineViewer = PDFOutlineViewer;
+
+/***/ }),
+/* 21 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFPresentationMode = void 0;
+
+var _ui_utils = __webpack_require__(4);
+
+const DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS = 1500;
+const DELAY_BEFORE_HIDING_CONTROLS = 3000;
+const ACTIVE_SELECTOR = "pdfPresentationMode";
+const CONTROLS_SELECTOR = "pdfPresentationModeControls";
+const MOUSE_SCROLL_COOLDOWN_TIME = 50;
+const PAGE_SWITCH_THRESHOLD = 0.1;
+const SWIPE_MIN_DISTANCE_THRESHOLD = 50;
+const SWIPE_ANGLE_THRESHOLD = Math.PI / 6;
+
+class PDFPresentationMode {
+ constructor({
+ container,
+ pdfViewer,
+ eventBus,
+ contextMenuItems = null
+ }) {
+ this.container = container;
+ this.pdfViewer = pdfViewer;
+ this.eventBus = eventBus;
+ this.active = false;
+ this.args = null;
+ this.contextMenuOpen = false;
+ this.mouseScrollTimeStamp = 0;
+ this.mouseScrollDelta = 0;
+ this.touchSwipeState = null;
+
+ if (contextMenuItems) {
+ contextMenuItems.contextFirstPage.addEventListener("click", () => {
+ this.contextMenuOpen = false;
+ this.eventBus.dispatch("firstpage", {
+ source: this
+ });
+ });
+ contextMenuItems.contextLastPage.addEventListener("click", () => {
+ this.contextMenuOpen = false;
+ this.eventBus.dispatch("lastpage", {
+ source: this
+ });
+ });
+ contextMenuItems.contextPageRotateCw.addEventListener("click", () => {
+ this.contextMenuOpen = false;
+ this.eventBus.dispatch("rotatecw", {
+ source: this
+ });
+ });
+ contextMenuItems.contextPageRotateCcw.addEventListener("click", () => {
+ this.contextMenuOpen = false;
+ this.eventBus.dispatch("rotateccw", {
+ source: this
+ });
+ });
+ }
+ }
+
+ request() {
+ if (this.switchInProgress || this.active || !this.pdfViewer.pagesCount) {
+ return false;
+ }
+
+ this._addFullscreenChangeListeners();
+
+ this._setSwitchInProgress();
+
+ this._notifyStateChange();
+
+ if (this.container.requestFullscreen) {
+ this.container.requestFullscreen();
+ } else if (this.container.mozRequestFullScreen) {
+ this.container.mozRequestFullScreen();
+ } else if (this.container.webkitRequestFullscreen) {
+ this.container.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
+ } else {
+ return false;
+ }
+
+ this.args = {
+ page: this.pdfViewer.currentPageNumber,
+ previousScale: this.pdfViewer.currentScaleValue
+ };
+ return true;
+ }
+
+ _mouseWheel(evt) {
+ if (!this.active) {
+ return;
+ }
+
+ evt.preventDefault();
+ const delta = (0, _ui_utils.normalizeWheelEventDelta)(evt);
+ const currentTime = new Date().getTime();
+ const storedTime = this.mouseScrollTimeStamp;
+
+ if (currentTime > storedTime && currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) {
+ return;
+ }
+
+ if (this.mouseScrollDelta > 0 && delta < 0 || this.mouseScrollDelta < 0 && delta > 0) {
+ this._resetMouseScrollState();
+ }
+
+ this.mouseScrollDelta += delta;
+
+ if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) {
+ const totalDelta = this.mouseScrollDelta;
+
+ this._resetMouseScrollState();
+
+ const success = totalDelta > 0 ? this.pdfViewer.previousPage() : this.pdfViewer.nextPage();
+
+ if (success) {
+ this.mouseScrollTimeStamp = currentTime;
+ }
+ }
+ }
+
+ get isFullscreen() {
+ return !!(document.fullscreenElement || document.mozFullScreen || document.webkitIsFullScreen);
+ }
+
+ _notifyStateChange() {
+ let state = _ui_utils.PresentationModeState.NORMAL;
+
+ if (this.switchInProgress) {
+ state = _ui_utils.PresentationModeState.CHANGING;
+ } else if (this.active) {
+ state = _ui_utils.PresentationModeState.FULLSCREEN;
+ }
+
+ this.eventBus.dispatch("presentationmodechanged", {
+ source: this,
+ state,
+
+ get active() {
+ throw new Error("Deprecated parameter: `active`, please use `state` instead.");
+ },
+
+ get switchInProgress() {
+ throw new Error("Deprecated parameter: `switchInProgress`, please use `state` instead.");
+ }
+
+ });
+ }
+
+ _setSwitchInProgress() {
+ if (this.switchInProgress) {
+ clearTimeout(this.switchInProgress);
+ }
+
+ this.switchInProgress = setTimeout(() => {
+ this._removeFullscreenChangeListeners();
+
+ delete this.switchInProgress;
+
+ this._notifyStateChange();
+ }, DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS);
+ }
+
+ _resetSwitchInProgress() {
+ if (this.switchInProgress) {
+ clearTimeout(this.switchInProgress);
+ delete this.switchInProgress;
+ }
+ }
+
+ _enter() {
+ this.active = true;
+
+ this._resetSwitchInProgress();
+
+ this._notifyStateChange();
+
+ this.container.classList.add(ACTIVE_SELECTOR);
+ setTimeout(() => {
+ this.pdfViewer.currentPageNumber = this.args.page;
+ this.pdfViewer.currentScaleValue = "page-fit";
+ }, 0);
+
+ this._addWindowListeners();
+
+ this._showControls();
+
+ this.contextMenuOpen = false;
+ this.container.setAttribute("contextmenu", "viewerContextMenu");
+ window.getSelection().removeAllRanges();
+ }
+
+ _exit() {
+ const page = this.pdfViewer.currentPageNumber;
+ this.container.classList.remove(ACTIVE_SELECTOR);
+ setTimeout(() => {
+ this.active = false;
+
+ this._removeFullscreenChangeListeners();
+
+ this._notifyStateChange();
+
+ this.pdfViewer.currentScaleValue = this.args.previousScale;
+ this.pdfViewer.currentPageNumber = page;
+ this.args = null;
+ }, 0);
+
+ this._removeWindowListeners();
+
+ this._hideControls();
+
+ this._resetMouseScrollState();
+
+ this.container.removeAttribute("contextmenu");
+ this.contextMenuOpen = false;
+ }
+
+ _mouseDown(evt) {
+ if (this.contextMenuOpen) {
+ this.contextMenuOpen = false;
+ evt.preventDefault();
+ return;
+ }
+
+ if (evt.button === 0) {
+ const isInternalLink = evt.target.href && evt.target.classList.contains("internalLink");
+
+ if (!isInternalLink) {
+ evt.preventDefault();
+
+ if (evt.shiftKey) {
+ this.pdfViewer.previousPage();
+ } else {
+ this.pdfViewer.nextPage();
+ }
+ }
+ }
+ }
+
+ _contextMenu() {
+ this.contextMenuOpen = true;
+ }
+
+ _showControls() {
+ if (this.controlsTimeout) {
+ clearTimeout(this.controlsTimeout);
+ } else {
+ this.container.classList.add(CONTROLS_SELECTOR);
+ }
+
+ this.controlsTimeout = setTimeout(() => {
+ this.container.classList.remove(CONTROLS_SELECTOR);
+ delete this.controlsTimeout;
+ }, DELAY_BEFORE_HIDING_CONTROLS);
+ }
+
+ _hideControls() {
+ if (!this.controlsTimeout) {
+ return;
+ }
+
+ clearTimeout(this.controlsTimeout);
+ this.container.classList.remove(CONTROLS_SELECTOR);
+ delete this.controlsTimeout;
+ }
+
+ _resetMouseScrollState() {
+ this.mouseScrollTimeStamp = 0;
+ this.mouseScrollDelta = 0;
+ }
+
+ _touchSwipe(evt) {
+ if (!this.active) {
+ return;
+ }
+
+ if (evt.touches.length > 1) {
+ this.touchSwipeState = null;
+ return;
+ }
+
+ switch (evt.type) {
+ case "touchstart":
+ this.touchSwipeState = {
+ startX: evt.touches[0].pageX,
+ startY: evt.touches[0].pageY,
+ endX: evt.touches[0].pageX,
+ endY: evt.touches[0].pageY
+ };
+ break;
+
+ case "touchmove":
+ if (this.touchSwipeState === null) {
+ return;
+ }
+
+ this.touchSwipeState.endX = evt.touches[0].pageX;
+ this.touchSwipeState.endY = evt.touches[0].pageY;
+ evt.preventDefault();
+ break;
+
+ case "touchend":
+ if (this.touchSwipeState === null) {
+ return;
+ }
+
+ let delta = 0;
+ const dx = this.touchSwipeState.endX - this.touchSwipeState.startX;
+ const dy = this.touchSwipeState.endY - this.touchSwipeState.startY;
+ const absAngle = Math.abs(Math.atan2(dy, dx));
+
+ if (Math.abs(dx) > SWIPE_MIN_DISTANCE_THRESHOLD && (absAngle <= SWIPE_ANGLE_THRESHOLD || absAngle >= Math.PI - SWIPE_ANGLE_THRESHOLD)) {
+ delta = dx;
+ } else if (Math.abs(dy) > SWIPE_MIN_DISTANCE_THRESHOLD && Math.abs(absAngle - Math.PI / 2) <= SWIPE_ANGLE_THRESHOLD) {
+ delta = dy;
+ }
+
+ if (delta > 0) {
+ this.pdfViewer.previousPage();
+ } else if (delta < 0) {
+ this.pdfViewer.nextPage();
+ }
+
+ break;
+ }
+ }
+
+ _addWindowListeners() {
+ this.showControlsBind = this._showControls.bind(this);
+ this.mouseDownBind = this._mouseDown.bind(this);
+ this.mouseWheelBind = this._mouseWheel.bind(this);
+ this.resetMouseScrollStateBind = this._resetMouseScrollState.bind(this);
+ this.contextMenuBind = this._contextMenu.bind(this);
+ this.touchSwipeBind = this._touchSwipe.bind(this);
+ window.addEventListener("mousemove", this.showControlsBind);
+ window.addEventListener("mousedown", this.mouseDownBind);
+ window.addEventListener("wheel", this.mouseWheelBind, {
+ passive: false
+ });
+ window.addEventListener("keydown", this.resetMouseScrollStateBind);
+ window.addEventListener("contextmenu", this.contextMenuBind);
+ window.addEventListener("touchstart", this.touchSwipeBind);
+ window.addEventListener("touchmove", this.touchSwipeBind);
+ window.addEventListener("touchend", this.touchSwipeBind);
+ }
+
+ _removeWindowListeners() {
+ window.removeEventListener("mousemove", this.showControlsBind);
+ window.removeEventListener("mousedown", this.mouseDownBind);
+ window.removeEventListener("wheel", this.mouseWheelBind, {
+ passive: false
+ });
+ window.removeEventListener("keydown", this.resetMouseScrollStateBind);
+ window.removeEventListener("contextmenu", this.contextMenuBind);
+ window.removeEventListener("touchstart", this.touchSwipeBind);
+ window.removeEventListener("touchmove", this.touchSwipeBind);
+ window.removeEventListener("touchend", this.touchSwipeBind);
+ delete this.showControlsBind;
+ delete this.mouseDownBind;
+ delete this.mouseWheelBind;
+ delete this.resetMouseScrollStateBind;
+ delete this.contextMenuBind;
+ delete this.touchSwipeBind;
+ }
+
+ _fullscreenChange() {
+ if (this.isFullscreen) {
+ this._enter();
+ } else {
+ this._exit();
+ }
+ }
+
+ _addFullscreenChangeListeners() {
+ this.fullscreenChangeBind = this._fullscreenChange.bind(this);
+ window.addEventListener("fullscreenchange", this.fullscreenChangeBind);
+ window.addEventListener("mozfullscreenchange", this.fullscreenChangeBind);
+ window.addEventListener("webkitfullscreenchange", this.fullscreenChangeBind);
+ }
+
+ _removeFullscreenChangeListeners() {
+ window.removeEventListener("fullscreenchange", this.fullscreenChangeBind);
+ window.removeEventListener("mozfullscreenchange", this.fullscreenChangeBind);
+ window.removeEventListener("webkitfullscreenchange", this.fullscreenChangeBind);
+ delete this.fullscreenChangeBind;
+ }
+
+}
+
+exports.PDFPresentationMode = PDFPresentationMode;
+
+/***/ }),
+/* 22 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFSidebar = void 0;
+
+var _ui_utils = __webpack_require__(4);
+
+var _pdf_rendering_queue = __webpack_require__(8);
+
+const UI_NOTIFICATION_CLASS = "pdfSidebarNotification";
+
+class PDFSidebar {
+ constructor({
+ elements,
+ pdfViewer,
+ pdfThumbnailViewer,
+ eventBus,
+ l10n = _ui_utils.NullL10n
+ }) {
+ this.isOpen = false;
+ this.active = _ui_utils.SidebarView.THUMBS;
+ this.isInitialViewSet = false;
+ this.onToggled = null;
+ this.pdfViewer = pdfViewer;
+ this.pdfThumbnailViewer = pdfThumbnailViewer;
+ this.outerContainer = elements.outerContainer;
+ this.viewerContainer = elements.viewerContainer;
+ this.toggleButton = elements.toggleButton;
+ this.thumbnailButton = elements.thumbnailButton;
+ this.outlineButton = elements.outlineButton;
+ this.attachmentsButton = elements.attachmentsButton;
+ this.layersButton = elements.layersButton;
+ this.thumbnailView = elements.thumbnailView;
+ this.outlineView = elements.outlineView;
+ this.attachmentsView = elements.attachmentsView;
+ this.layersView = elements.layersView;
+ this._outlineOptionsContainer = elements.outlineOptionsContainer;
+ this._currentOutlineItemButton = elements.currentOutlineItemButton;
+ this.eventBus = eventBus;
+ this.l10n = l10n;
+
+ this._addEventListeners();
+ }
+
+ reset() {
+ this.isInitialViewSet = false;
+
+ this._hideUINotification(true);
+
+ this.switchView(_ui_utils.SidebarView.THUMBS);
+ this.outlineButton.disabled = false;
+ this.attachmentsButton.disabled = false;
+ this.layersButton.disabled = false;
+ this._currentOutlineItemButton.disabled = true;
+ }
+
+ get visibleView() {
+ return this.isOpen ? this.active : _ui_utils.SidebarView.NONE;
+ }
+
+ get isThumbnailViewVisible() {
+ return this.isOpen && this.active === _ui_utils.SidebarView.THUMBS;
+ }
+
+ get isOutlineViewVisible() {
+ return this.isOpen && this.active === _ui_utils.SidebarView.OUTLINE;
+ }
+
+ get isAttachmentsViewVisible() {
+ return this.isOpen && this.active === _ui_utils.SidebarView.ATTACHMENTS;
+ }
+
+ get isLayersViewVisible() {
+ return this.isOpen && this.active === _ui_utils.SidebarView.LAYERS;
+ }
+
+ setInitialView(view = _ui_utils.SidebarView.NONE) {
+ if (this.isInitialViewSet) {
+ return;
+ }
+
+ this.isInitialViewSet = true;
+
+ if (view === _ui_utils.SidebarView.NONE || view === _ui_utils.SidebarView.UNKNOWN) {
+ this._dispatchEvent();
+
+ return;
+ }
+
+ if (!this._switchView(view, true)) {
+ this._dispatchEvent();
+ }
+ }
+
+ switchView(view, forceOpen = false) {
+ this._switchView(view, forceOpen);
+ }
+
+ _switchView(view, forceOpen = false) {
+ const isViewChanged = view !== this.active;
+ let shouldForceRendering = false;
+
+ switch (view) {
+ case _ui_utils.SidebarView.NONE:
+ if (this.isOpen) {
+ this.close();
+ return true;
+ }
+
+ return false;
+
+ case _ui_utils.SidebarView.THUMBS:
+ if (this.isOpen && isViewChanged) {
+ shouldForceRendering = true;
+ }
+
+ break;
+
+ case _ui_utils.SidebarView.OUTLINE:
+ if (this.outlineButton.disabled) {
+ return false;
+ }
+
+ break;
+
+ case _ui_utils.SidebarView.ATTACHMENTS:
+ if (this.attachmentsButton.disabled) {
+ return false;
+ }
+
+ break;
+
+ case _ui_utils.SidebarView.LAYERS:
+ if (this.layersButton.disabled) {
+ return false;
+ }
+
+ break;
+
+ default:
+ console.error(`PDFSidebar._switchView: "${view}" is not a valid view.`);
+ return false;
+ }
+
+ this.active = view;
+ this.thumbnailButton.classList.toggle("toggled", view === _ui_utils.SidebarView.THUMBS);
+ this.outlineButton.classList.toggle("toggled", view === _ui_utils.SidebarView.OUTLINE);
+ this.attachmentsButton.classList.toggle("toggled", view === _ui_utils.SidebarView.ATTACHMENTS);
+ this.layersButton.classList.toggle("toggled", view === _ui_utils.SidebarView.LAYERS);
+ this.thumbnailView.classList.toggle("hidden", view !== _ui_utils.SidebarView.THUMBS);
+ this.outlineView.classList.toggle("hidden", view !== _ui_utils.SidebarView.OUTLINE);
+ this.attachmentsView.classList.toggle("hidden", view !== _ui_utils.SidebarView.ATTACHMENTS);
+ this.layersView.classList.toggle("hidden", view !== _ui_utils.SidebarView.LAYERS);
+
+ this._outlineOptionsContainer.classList.toggle("hidden", view !== _ui_utils.SidebarView.OUTLINE);
+
+ if (forceOpen && !this.isOpen) {
+ this.open();
+ return true;
+ }
+
+ if (shouldForceRendering) {
+ this._updateThumbnailViewer();
+
+ this._forceRendering();
+ }
+
+ if (isViewChanged) {
+ this._dispatchEvent();
+ }
+
+ return isViewChanged;
+ }
+
+ open() {
+ if (this.isOpen) {
+ return;
+ }
+
+ this.isOpen = true;
+ this.toggleButton.classList.add("toggled");
+ this.outerContainer.classList.add("sidebarMoving", "sidebarOpen");
+
+ if (this.active === _ui_utils.SidebarView.THUMBS) {
+ this._updateThumbnailViewer();
+ }
+
+ this._forceRendering();
+
+ this._dispatchEvent();
+
+ this._hideUINotification();
+ }
+
+ close() {
+ if (!this.isOpen) {
+ return;
+ }
+
+ this.isOpen = false;
+ this.toggleButton.classList.remove("toggled");
+ this.outerContainer.classList.add("sidebarMoving");
+ this.outerContainer.classList.remove("sidebarOpen");
+
+ this._forceRendering();
+
+ this._dispatchEvent();
+ }
+
+ toggle() {
+ if (this.isOpen) {
+ this.close();
+ } else {
+ this.open();
+ }
+ }
+
+ _dispatchEvent() {
+ this.eventBus.dispatch("sidebarviewchanged", {
+ source: this,
+ view: this.visibleView
+ });
+ }
+
+ _forceRendering() {
+ if (this.onToggled) {
+ this.onToggled();
+ } else {
+ this.pdfViewer.forceRendering();
+ this.pdfThumbnailViewer.forceRendering();
+ }
+ }
+
+ _updateThumbnailViewer() {
+ const {
+ pdfViewer,
+ pdfThumbnailViewer
+ } = this;
+ const pagesCount = pdfViewer.pagesCount;
+
+ for (let pageIndex = 0; pageIndex < pagesCount; pageIndex++) {
+ const pageView = pdfViewer.getPageView(pageIndex);
+
+ if (pageView && pageView.renderingState === _pdf_rendering_queue.RenderingStates.FINISHED) {
+ const thumbnailView = pdfThumbnailViewer.getThumbnail(pageIndex);
+ thumbnailView.setImage(pageView);
+ }
+ }
+
+ pdfThumbnailViewer.scrollThumbnailIntoView(pdfViewer.currentPageNumber);
+ }
+
+ _showUINotification() {
+ this.l10n.get("toggle_sidebar_notification2.title", null, "Toggle Sidebar (document contains outline/attachments/layers)").then(msg => {
+ this.toggleButton.title = msg;
+ });
+
+ if (!this.isOpen) {
+ this.toggleButton.classList.add(UI_NOTIFICATION_CLASS);
+ }
+ }
+
+ _hideUINotification(reset = false) {
+ if (this.isOpen || reset) {
+ this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS);
+ }
+
+ if (reset) {
+ this.l10n.get("toggle_sidebar.title", null, "Toggle Sidebar").then(msg => {
+ this.toggleButton.title = msg;
+ });
+ }
+ }
+
+ _addEventListeners() {
+ this.viewerContainer.addEventListener("transitionend", evt => {
+ if (evt.target === this.viewerContainer) {
+ this.outerContainer.classList.remove("sidebarMoving");
+ }
+ });
+ this.toggleButton.addEventListener("click", () => {
+ this.toggle();
+ });
+ this.thumbnailButton.addEventListener("click", () => {
+ this.switchView(_ui_utils.SidebarView.THUMBS);
+ });
+ this.outlineButton.addEventListener("click", () => {
+ this.switchView(_ui_utils.SidebarView.OUTLINE);
+ });
+ this.outlineButton.addEventListener("dblclick", () => {
+ this.eventBus.dispatch("toggleoutlinetree", {
+ source: this
+ });
+ });
+ this.attachmentsButton.addEventListener("click", () => {
+ this.switchView(_ui_utils.SidebarView.ATTACHMENTS);
+ });
+ this.layersButton.addEventListener("click", () => {
+ this.switchView(_ui_utils.SidebarView.LAYERS);
+ });
+ this.layersButton.addEventListener("dblclick", () => {
+ this.eventBus.dispatch("resetlayers", {
+ source: this
+ });
+ });
+
+ this._currentOutlineItemButton.addEventListener("click", () => {
+ this.eventBus.dispatch("currentoutlineitem", {
+ source: this
+ });
+ });
+
+ const onTreeLoaded = (count, button, view) => {
+ button.disabled = !count;
+
+ if (count) {
+ this._showUINotification();
+ } else if (this.active === view) {
+ this.switchView(_ui_utils.SidebarView.THUMBS);
+ }
+ };
+
+ this.eventBus._on("outlineloaded", evt => {
+ onTreeLoaded(evt.outlineCount, this.outlineButton, _ui_utils.SidebarView.OUTLINE);
+
+ if (evt.enableCurrentOutlineItemButton) {
+ this.pdfViewer.pagesPromise.then(() => {
+ this._currentOutlineItemButton.disabled = !this.isInitialViewSet;
+ });
+ }
+ });
+
+ this.eventBus._on("attachmentsloaded", evt => {
+ onTreeLoaded(evt.attachmentsCount, this.attachmentsButton, _ui_utils.SidebarView.ATTACHMENTS);
+ });
+
+ this.eventBus._on("layersloaded", evt => {
+ onTreeLoaded(evt.layersCount, this.layersButton, _ui_utils.SidebarView.LAYERS);
+ });
+
+ this.eventBus._on("presentationmodechanged", evt => {
+ if (evt.state === _ui_utils.PresentationModeState.NORMAL && this.isThumbnailViewVisible) {
+ this._updateThumbnailViewer();
+ }
+ });
+ }
+
+}
+
+exports.PDFSidebar = PDFSidebar;
+
+/***/ }),
+/* 23 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFSidebarResizer = void 0;
+
+var _ui_utils = __webpack_require__(4);
+
+const SIDEBAR_WIDTH_VAR = "--sidebar-width";
+const SIDEBAR_MIN_WIDTH = 200;
+const SIDEBAR_RESIZING_CLASS = "sidebarResizing";
+
+class PDFSidebarResizer {
+ constructor(options, eventBus, l10n = _ui_utils.NullL10n) {
+ this.isRTL = false;
+ this.sidebarOpen = false;
+ this.doc = document.documentElement;
+ this._width = null;
+ this._outerContainerWidth = null;
+ this._boundEvents = Object.create(null);
+ this.outerContainer = options.outerContainer;
+ this.resizer = options.resizer;
+ this.eventBus = eventBus;
+ l10n.getDirection().then(dir => {
+ this.isRTL = dir === "rtl";
+ });
+
+ this._addEventListeners();
+ }
+
+ get outerContainerWidth() {
+ if (!this._outerContainerWidth) {
+ this._outerContainerWidth = this.outerContainer.clientWidth;
+ }
+
+ return this._outerContainerWidth;
+ }
+
+ _updateWidth(width = 0) {
+ const maxWidth = Math.floor(this.outerContainerWidth / 2);
+
+ if (width > maxWidth) {
+ width = maxWidth;
+ }
+
+ if (width < SIDEBAR_MIN_WIDTH) {
+ width = SIDEBAR_MIN_WIDTH;
+ }
+
+ if (width === this._width) {
+ return false;
+ }
+
+ this._width = width;
+ this.doc.style.setProperty(SIDEBAR_WIDTH_VAR, `${width}px`);
+ return true;
+ }
+
+ _mouseMove(evt) {
+ let width = evt.clientX;
+
+ if (this.isRTL) {
+ width = this.outerContainerWidth - width;
+ }
+
+ this._updateWidth(width);
+ }
+
+ _mouseUp(evt) {
+ this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS);
+ this.eventBus.dispatch("resize", {
+ source: this
+ });
+ const _boundEvents = this._boundEvents;
+ window.removeEventListener("mousemove", _boundEvents.mouseMove);
+ window.removeEventListener("mouseup", _boundEvents.mouseUp);
+ }
+
+ _addEventListeners() {
+ const _boundEvents = this._boundEvents;
+ _boundEvents.mouseMove = this._mouseMove.bind(this);
+ _boundEvents.mouseUp = this._mouseUp.bind(this);
+ this.resizer.addEventListener("mousedown", evt => {
+ if (evt.button !== 0) {
+ return;
+ }
+
+ this.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS);
+ window.addEventListener("mousemove", _boundEvents.mouseMove);
+ window.addEventListener("mouseup", _boundEvents.mouseUp);
+ });
+
+ this.eventBus._on("sidebarviewchanged", evt => {
+ this.sidebarOpen = !!(evt && evt.view);
+ });
+
+ this.eventBus._on("resize", evt => {
+ if (!evt || evt.source !== window) {
+ return;
+ }
+
+ this._outerContainerWidth = null;
+
+ if (!this._width) {
+ return;
+ }
+
+ if (!this.sidebarOpen) {
+ this._updateWidth(this._width);
+
+ return;
+ }
+
+ this.outerContainer.classList.add(SIDEBAR_RESIZING_CLASS);
+
+ const updated = this._updateWidth(this._width);
+
+ Promise.resolve().then(() => {
+ this.outerContainer.classList.remove(SIDEBAR_RESIZING_CLASS);
+
+ if (updated) {
+ this.eventBus.dispatch("resize", {
+ source: this
+ });
+ }
+ });
+ });
+ }
+
+}
+
+exports.PDFSidebarResizer = PDFSidebarResizer;
+
+/***/ }),
+/* 24 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFThumbnailViewer = void 0;
+
+var _ui_utils = __webpack_require__(4);
+
+var _pdf_thumbnail_view = __webpack_require__(25);
+
+var _pdf_rendering_queue = __webpack_require__(8);
+
+const THUMBNAIL_SCROLL_MARGIN = -19;
+const THUMBNAIL_SELECTED_CLASS = "selected";
+
+class PDFThumbnailViewer {
+ constructor({
+ container,
+ eventBus,
+ linkService,
+ renderingQueue,
+ l10n = _ui_utils.NullL10n
+ }) {
+ this.container = container;
+ this.linkService = linkService;
+ this.renderingQueue = renderingQueue;
+ this.l10n = l10n;
+ this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdated.bind(this));
+
+ this._resetView();
+
+ eventBus._on("optionalcontentconfigchanged", () => {
+ this._setImageDisabled = true;
+ });
+ }
+
+ _scrollUpdated() {
+ this.renderingQueue.renderHighestPriority();
+ }
+
+ getThumbnail(index) {
+ return this._thumbnails[index];
+ }
+
+ _getVisibleThumbs() {
+ return (0, _ui_utils.getVisibleElements)({
+ scrollEl: this.container,
+ views: this._thumbnails
+ });
+ }
+
+ scrollThumbnailIntoView(pageNumber) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ const thumbnailView = this._thumbnails[pageNumber - 1];
+
+ if (!thumbnailView) {
+ console.error('scrollThumbnailIntoView: Invalid "pageNumber" parameter.');
+ return;
+ }
+
+ if (pageNumber !== this._currentPageNumber) {
+ const prevThumbnailView = this._thumbnails[this._currentPageNumber - 1];
+ prevThumbnailView.div.classList.remove(THUMBNAIL_SELECTED_CLASS);
+ thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS);
+ }
+
+ const visibleThumbs = this._getVisibleThumbs();
+
+ const numVisibleThumbs = visibleThumbs.views.length;
+
+ if (numVisibleThumbs > 0) {
+ const first = visibleThumbs.first.id;
+ const last = numVisibleThumbs > 1 ? visibleThumbs.last.id : first;
+ let shouldScroll = false;
+
+ if (pageNumber <= first || pageNumber >= last) {
+ shouldScroll = true;
+ } else {
+ visibleThumbs.views.some(function (view) {
+ if (view.id !== pageNumber) {
+ return false;
+ }
+
+ shouldScroll = view.percent < 100;
+ return true;
+ });
+ }
+
+ if (shouldScroll) {
+ (0, _ui_utils.scrollIntoView)(thumbnailView.div, {
+ top: THUMBNAIL_SCROLL_MARGIN
+ });
+ }
+ }
+
+ this._currentPageNumber = pageNumber;
+ }
+
+ get pagesRotation() {
+ return this._pagesRotation;
+ }
+
+ set pagesRotation(rotation) {
+ if (!(0, _ui_utils.isValidRotation)(rotation)) {
+ throw new Error("Invalid thumbnails rotation angle.");
+ }
+
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ if (this._pagesRotation === rotation) {
+ return;
+ }
+
+ this._pagesRotation = rotation;
+
+ for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {
+ this._thumbnails[i].update(rotation);
+ }
+ }
+
+ cleanup() {
+ for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {
+ if (this._thumbnails[i] && this._thumbnails[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {
+ this._thumbnails[i].reset();
+ }
+ }
+
+ _pdf_thumbnail_view.TempImageFactory.destroyCanvas();
+ }
+
+ _resetView() {
+ this._thumbnails = [];
+ this._currentPageNumber = 1;
+ this._pageLabels = null;
+ this._pagesRotation = 0;
+ this._optionalContentConfigPromise = null;
+ this._pagesRequests = new WeakMap();
+ this._setImageDisabled = false;
+ this.container.textContent = "";
+ }
+
+ setDocument(pdfDocument) {
+ if (this.pdfDocument) {
+ this._cancelRendering();
+
+ this._resetView();
+ }
+
+ this.pdfDocument = pdfDocument;
+
+ if (!pdfDocument) {
+ return;
+ }
+
+ const firstPagePromise = pdfDocument.getPage(1);
+ const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig();
+ firstPagePromise.then(firstPdfPage => {
+ this._optionalContentConfigPromise = optionalContentConfigPromise;
+ const pagesCount = pdfDocument.numPages;
+ const viewport = firstPdfPage.getViewport({
+ scale: 1
+ });
+
+ const checkSetImageDisabled = () => {
+ return this._setImageDisabled;
+ };
+
+ for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {
+ const thumbnail = new _pdf_thumbnail_view.PDFThumbnailView({
+ container: this.container,
+ id: pageNum,
+ defaultViewport: viewport.clone(),
+ optionalContentConfigPromise,
+ linkService: this.linkService,
+ renderingQueue: this.renderingQueue,
+ checkSetImageDisabled,
+ disableCanvasToImageConversion: false,
+ l10n: this.l10n
+ });
+
+ this._thumbnails.push(thumbnail);
+ }
+
+ const firstThumbnailView = this._thumbnails[0];
+
+ if (firstThumbnailView) {
+ firstThumbnailView.setPdfPage(firstPdfPage);
+ }
+
+ const thumbnailView = this._thumbnails[this._currentPageNumber - 1];
+ thumbnailView.div.classList.add(THUMBNAIL_SELECTED_CLASS);
+ }).catch(reason => {
+ console.error("Unable to initialize thumbnail viewer", reason);
+ });
+ }
+
+ _cancelRendering() {
+ for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {
+ if (this._thumbnails[i]) {
+ this._thumbnails[i].cancelRendering();
+ }
+ }
+ }
+
+ setPageLabels(labels) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ if (!labels) {
+ this._pageLabels = null;
+ } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) {
+ this._pageLabels = null;
+ console.error("PDFThumbnailViewer_setPageLabels: Invalid page labels.");
+ } else {
+ this._pageLabels = labels;
+ }
+
+ for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {
+ const label = this._pageLabels && this._pageLabels[i];
+
+ this._thumbnails[i].setPageLabel(label);
+ }
+ }
+
+ _ensurePdfPageLoaded(thumbView) {
+ if (thumbView.pdfPage) {
+ return Promise.resolve(thumbView.pdfPage);
+ }
+
+ if (this._pagesRequests.has(thumbView)) {
+ return this._pagesRequests.get(thumbView);
+ }
+
+ const promise = this.pdfDocument.getPage(thumbView.id).then(pdfPage => {
+ if (!thumbView.pdfPage) {
+ thumbView.setPdfPage(pdfPage);
+ }
+
+ this._pagesRequests.delete(thumbView);
+
+ return pdfPage;
+ }).catch(reason => {
+ console.error("Unable to get page for thumb view", reason);
+
+ this._pagesRequests.delete(thumbView);
+ });
+
+ this._pagesRequests.set(thumbView, promise);
+
+ return promise;
+ }
+
+ forceRendering() {
+ const visibleThumbs = this._getVisibleThumbs();
+
+ const thumbView = this.renderingQueue.getHighestPriority(visibleThumbs, this._thumbnails, this.scroll.down);
+
+ if (thumbView) {
+ this._ensurePdfPageLoaded(thumbView).then(() => {
+ this.renderingQueue.renderView(thumbView);
+ });
+
+ return true;
+ }
+
+ return false;
+ }
+
+}
+
+exports.PDFThumbnailViewer = PDFThumbnailViewer;
+
+/***/ }),
+/* 25 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.TempImageFactory = exports.PDFThumbnailView = void 0;
+
+var _ui_utils = __webpack_require__(4);
+
+var _pdfjsLib = __webpack_require__(5);
+
+var _pdf_rendering_queue = __webpack_require__(8);
+
+const MAX_NUM_SCALING_STEPS = 3;
+const THUMBNAIL_CANVAS_BORDER_WIDTH = 1;
+const THUMBNAIL_WIDTH = 98;
+
+const TempImageFactory = function TempImageFactoryClosure() {
+ let tempCanvasCache = null;
+ return {
+ getCanvas(width, height) {
+ let tempCanvas = tempCanvasCache;
+
+ if (!tempCanvas) {
+ tempCanvas = document.createElement("canvas");
+ tempCanvasCache = tempCanvas;
+ }
+
+ tempCanvas.width = width;
+ tempCanvas.height = height;
+ tempCanvas.mozOpaque = true;
+ const ctx = tempCanvas.getContext("2d", {
+ alpha: false
+ });
+ ctx.save();
+ ctx.fillStyle = "rgb(255, 255, 255)";
+ ctx.fillRect(0, 0, width, height);
+ ctx.restore();
+ return tempCanvas;
+ },
+
+ destroyCanvas() {
+ const tempCanvas = tempCanvasCache;
+
+ if (tempCanvas) {
+ tempCanvas.width = 0;
+ tempCanvas.height = 0;
+ }
+
+ tempCanvasCache = null;
+ }
+
+ };
+}();
+
+exports.TempImageFactory = TempImageFactory;
+
+class PDFThumbnailView {
+ constructor({
+ container,
+ id,
+ defaultViewport,
+ optionalContentConfigPromise,
+ linkService,
+ renderingQueue,
+ checkSetImageDisabled,
+ disableCanvasToImageConversion = false,
+ l10n = _ui_utils.NullL10n
+ }) {
+ this.id = id;
+ this.renderingId = "thumbnail" + id;
+ this.pageLabel = null;
+ this.pdfPage = null;
+ this.rotation = 0;
+ this.viewport = defaultViewport;
+ this.pdfPageRotate = defaultViewport.rotation;
+ this._optionalContentConfigPromise = optionalContentConfigPromise || null;
+ this.linkService = linkService;
+ this.renderingQueue = renderingQueue;
+ this.renderTask = null;
+ this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL;
+ this.resume = null;
+
+ this._checkSetImageDisabled = checkSetImageDisabled || function () {
+ return false;
+ };
+
+ this.disableCanvasToImageConversion = disableCanvasToImageConversion;
+ this.pageWidth = this.viewport.width;
+ this.pageHeight = this.viewport.height;
+ this.pageRatio = this.pageWidth / this.pageHeight;
+ this.canvasWidth = THUMBNAIL_WIDTH;
+ this.canvasHeight = this.canvasWidth / this.pageRatio | 0;
+ this.scale = this.canvasWidth / this.pageWidth;
+ this.l10n = l10n;
+ const anchor = document.createElement("a");
+ anchor.href = linkService.getAnchorUrl("#page=" + id);
+
+ this._thumbPageTitle.then(msg => {
+ anchor.title = msg;
+ });
+
+ anchor.onclick = function () {
+ linkService.goToPage(id);
+ return false;
+ };
+
+ this.anchor = anchor;
+ const div = document.createElement("div");
+ div.className = "thumbnail";
+ div.setAttribute("data-page-number", this.id);
+ this.div = div;
+ const ring = document.createElement("div");
+ ring.className = "thumbnailSelectionRing";
+ const borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH;
+ ring.style.width = this.canvasWidth + borderAdjustment + "px";
+ ring.style.height = this.canvasHeight + borderAdjustment + "px";
+ this.ring = ring;
+ div.appendChild(ring);
+ anchor.appendChild(div);
+ container.appendChild(anchor);
+ }
+
+ setPdfPage(pdfPage) {
+ this.pdfPage = pdfPage;
+ this.pdfPageRotate = pdfPage.rotate;
+ const totalRotation = (this.rotation + this.pdfPageRotate) % 360;
+ this.viewport = pdfPage.getViewport({
+ scale: 1,
+ rotation: totalRotation
+ });
+ this.reset();
+ }
+
+ reset() {
+ this.cancelRendering();
+ this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL;
+ this.pageWidth = this.viewport.width;
+ this.pageHeight = this.viewport.height;
+ this.pageRatio = this.pageWidth / this.pageHeight;
+ this.canvasHeight = this.canvasWidth / this.pageRatio | 0;
+ this.scale = this.canvasWidth / this.pageWidth;
+ this.div.removeAttribute("data-loaded");
+ const ring = this.ring;
+ const childNodes = ring.childNodes;
+
+ for (let i = childNodes.length - 1; i >= 0; i--) {
+ ring.removeChild(childNodes[i]);
+ }
+
+ const borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH;
+ ring.style.width = this.canvasWidth + borderAdjustment + "px";
+ ring.style.height = this.canvasHeight + borderAdjustment + "px";
+
+ if (this.canvas) {
+ this.canvas.width = 0;
+ this.canvas.height = 0;
+ delete this.canvas;
+ }
+
+ if (this.image) {
+ this.image.removeAttribute("src");
+ delete this.image;
+ }
+ }
+
+ update(rotation) {
+ if (typeof rotation !== "undefined") {
+ this.rotation = rotation;
+ }
+
+ const totalRotation = (this.rotation + this.pdfPageRotate) % 360;
+ this.viewport = this.viewport.clone({
+ scale: 1,
+ rotation: totalRotation
+ });
+ this.reset();
+ }
+
+ cancelRendering() {
+ if (this.renderTask) {
+ this.renderTask.cancel();
+ this.renderTask = null;
+ }
+
+ this.resume = null;
+ }
+
+ _getPageDrawContext() {
+ const canvas = document.createElement("canvas");
+ this.canvas = canvas;
+ canvas.mozOpaque = true;
+ const ctx = canvas.getContext("2d", {
+ alpha: false
+ });
+ const outputScale = (0, _ui_utils.getOutputScale)(ctx);
+ canvas.width = this.canvasWidth * outputScale.sx | 0;
+ canvas.height = this.canvasHeight * outputScale.sy | 0;
+ canvas.style.width = this.canvasWidth + "px";
+ canvas.style.height = this.canvasHeight + "px";
+ const transform = outputScale.scaled ? [outputScale.sx, 0, 0, outputScale.sy, 0, 0] : null;
+ return [ctx, transform];
+ }
+
+ _convertCanvasToImage() {
+ if (!this.canvas) {
+ return;
+ }
+
+ if (this.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {
+ return;
+ }
+
+ const className = "thumbnailImage";
+
+ if (this.disableCanvasToImageConversion) {
+ this.canvas.className = className;
+
+ this._thumbPageCanvas.then(msg => {
+ this.canvas.setAttribute("aria-label", msg);
+ });
+
+ this.div.setAttribute("data-loaded", true);
+ this.ring.appendChild(this.canvas);
+ return;
+ }
+
+ const image = document.createElement("img");
+ image.className = className;
+
+ this._thumbPageCanvas.then(msg => {
+ image.setAttribute("aria-label", msg);
+ });
+
+ image.style.width = this.canvasWidth + "px";
+ image.style.height = this.canvasHeight + "px";
+ image.src = this.canvas.toDataURL();
+ this.image = image;
+ this.div.setAttribute("data-loaded", true);
+ this.ring.appendChild(image);
+ this.canvas.width = 0;
+ this.canvas.height = 0;
+ delete this.canvas;
+ }
+
+ draw() {
+ if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) {
+ console.error("Must be in new state before drawing");
+ return Promise.resolve(undefined);
+ }
+
+ const {
+ pdfPage
+ } = this;
+
+ if (!pdfPage) {
+ this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
+ return Promise.reject(new Error("pdfPage is not loaded"));
+ }
+
+ this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING;
+
+ const finishRenderTask = async (error = null) => {
+ if (renderTask === this.renderTask) {
+ this.renderTask = null;
+ }
+
+ if (error instanceof _pdfjsLib.RenderingCancelledException) {
+ return;
+ }
+
+ this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
+
+ this._convertCanvasToImage();
+
+ if (error) {
+ throw error;
+ }
+ };
+
+ const [ctx, transform] = this._getPageDrawContext();
+
+ const drawViewport = this.viewport.clone({
+ scale: this.scale
+ });
+
+ const renderContinueCallback = cont => {
+ if (!this.renderingQueue.isHighestPriority(this)) {
+ this.renderingState = _pdf_rendering_queue.RenderingStates.PAUSED;
+
+ this.resume = () => {
+ this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING;
+ cont();
+ };
+
+ return;
+ }
+
+ cont();
+ };
+
+ const renderContext = {
+ canvasContext: ctx,
+ transform,
+ viewport: drawViewport,
+ optionalContentConfigPromise: this._optionalContentConfigPromise
+ };
+ const renderTask = this.renderTask = pdfPage.render(renderContext);
+ renderTask.onContinue = renderContinueCallback;
+ const resultPromise = renderTask.promise.then(function () {
+ finishRenderTask(null);
+ }, function (error) {
+ finishRenderTask(error);
+ });
+ resultPromise.finally(() => {
+ const pageCached = this.linkService.isPageCached(this.id);
+
+ if (pageCached) {
+ return;
+ }
+
+ this.pdfPage?.cleanup();
+ });
+ return resultPromise;
+ }
+
+ setImage(pageView) {
+ if (this._checkSetImageDisabled()) {
+ return;
+ }
+
+ if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) {
+ return;
+ }
+
+ const img = pageView.canvas;
+
+ if (!img) {
+ return;
+ }
+
+ if (!this.pdfPage) {
+ this.setPdfPage(pageView.pdfPage);
+ }
+
+ this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
+
+ const [ctx] = this._getPageDrawContext();
+
+ const canvas = ctx.canvas;
+
+ if (img.width <= 2 * canvas.width) {
+ ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height);
+
+ this._convertCanvasToImage();
+
+ return;
+ }
+
+ let reducedWidth = canvas.width << MAX_NUM_SCALING_STEPS;
+ let reducedHeight = canvas.height << MAX_NUM_SCALING_STEPS;
+ const reducedImage = TempImageFactory.getCanvas(reducedWidth, reducedHeight);
+ const reducedImageCtx = reducedImage.getContext("2d");
+
+ while (reducedWidth > img.width || reducedHeight > img.height) {
+ reducedWidth >>= 1;
+ reducedHeight >>= 1;
+ }
+
+ reducedImageCtx.drawImage(img, 0, 0, img.width, img.height, 0, 0, reducedWidth, reducedHeight);
+
+ while (reducedWidth > 2 * canvas.width) {
+ reducedImageCtx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, reducedWidth >> 1, reducedHeight >> 1);
+ reducedWidth >>= 1;
+ reducedHeight >>= 1;
+ }
+
+ ctx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, canvas.width, canvas.height);
+
+ this._convertCanvasToImage();
+ }
+
+ get _thumbPageTitle() {
+ return this.l10n.get("thumb_page_title", {
+ page: this.pageLabel ?? this.id
+ }, "Page {{page}}");
+ }
+
+ get _thumbPageCanvas() {
+ return this.l10n.get("thumb_page_canvas", {
+ page: this.pageLabel ?? this.id
+ }, "Thumbnail of Page {{page}}");
+ }
+
+ setPageLabel(label) {
+ this.pageLabel = typeof label === "string" ? label : null;
+
+ this._thumbPageTitle.then(msg => {
+ this.anchor.title = msg;
+ });
+
+ if (this.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {
+ return;
+ }
+
+ this._thumbPageCanvas.then(msg => {
+ if (this.image) {
+ this.image.setAttribute("aria-label", msg);
+ } else if (this.disableCanvasToImageConversion && this.canvas) {
+ this.canvas.setAttribute("aria-label", msg);
+ }
+ });
+ }
+
+}
+
+exports.PDFThumbnailView = PDFThumbnailView;
+
+/***/ }),
+/* 26 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFViewer = void 0;
+
+var _ui_utils = __webpack_require__(4);
+
+var _base_viewer = __webpack_require__(27);
+
+var _pdfjsLib = __webpack_require__(5);
+
+class PDFViewer extends _base_viewer.BaseViewer {
+ get _viewerElement() {
+ return (0, _pdfjsLib.shadow)(this, "_viewerElement", this.viewer);
+ }
+
+ _scrollIntoView({
+ pageDiv,
+ pageSpot = null,
+ pageNumber = null
+ }) {
+ if (!pageSpot && !this.isInPresentationMode) {
+ const left = pageDiv.offsetLeft + pageDiv.clientLeft;
+ const right = left + pageDiv.clientWidth;
+ const {
+ scrollLeft,
+ clientWidth
+ } = this.container;
+
+ if (this._isScrollModeHorizontal || left < scrollLeft || right > scrollLeft + clientWidth) {
+ pageSpot = {
+ left: 0,
+ top: 0
+ };
+ }
+ }
+
+ super._scrollIntoView({
+ pageDiv,
+ pageSpot,
+ pageNumber
+ });
+ }
+
+ _getVisiblePages() {
+ if (this.isInPresentationMode) {
+ return this._getCurrentVisiblePage();
+ }
+
+ return super._getVisiblePages();
+ }
+
+ _updateHelper(visiblePages) {
+ if (this.isInPresentationMode) {
+ return;
+ }
+
+ let currentId = this._currentPageNumber;
+ let stillFullyVisible = false;
+
+ for (const page of visiblePages) {
+ if (page.percent < 100) {
+ break;
+ }
+
+ if (page.id === currentId && this._scrollMode === _ui_utils.ScrollMode.VERTICAL && this._spreadMode === _ui_utils.SpreadMode.NONE) {
+ stillFullyVisible = true;
+ break;
+ }
+ }
+
+ if (!stillFullyVisible) {
+ currentId = visiblePages[0].id;
+ }
+
+ this._setCurrentPageNumber(currentId);
+ }
+
+}
+
+exports.PDFViewer = PDFViewer;
+
+/***/ }),
+/* 27 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.BaseViewer = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+var _ui_utils = __webpack_require__(4);
+
+var _pdf_rendering_queue = __webpack_require__(8);
+
+var _annotation_layer_builder = __webpack_require__(28);
+
+var _pdf_page_view = __webpack_require__(29);
+
+var _pdf_link_service = __webpack_require__(19);
+
+var _text_layer_builder = __webpack_require__(30);
+
+const DEFAULT_CACHE_SIZE = 10;
+
+function PDFPageViewBuffer(size) {
+ const data = [];
+
+ this.push = function (view) {
+ const i = data.indexOf(view);
+
+ if (i >= 0) {
+ data.splice(i, 1);
+ }
+
+ data.push(view);
+
+ if (data.length > size) {
+ data.shift().destroy();
+ }
+ };
+
+ this.resize = function (newSize, pagesToKeep) {
+ size = newSize;
+
+ if (pagesToKeep) {
+ const pageIdsToKeep = new Set();
+
+ for (let i = 0, iMax = pagesToKeep.length; i < iMax; ++i) {
+ pageIdsToKeep.add(pagesToKeep[i].id);
+ }
+
+ (0, _ui_utils.moveToEndOfArray)(data, function (page) {
+ return pageIdsToKeep.has(page.id);
+ });
+ }
+
+ while (data.length > size) {
+ data.shift().destroy();
+ }
+ };
+
+ this.has = function (view) {
+ return data.includes(view);
+ };
+}
+
+function isSameScale(oldScale, newScale) {
+ if (newScale === oldScale) {
+ return true;
+ }
+
+ if (Math.abs(newScale - oldScale) < 1e-15) {
+ return true;
+ }
+
+ return false;
+}
+
+class BaseViewer {
+ constructor(options) {
+ if (this.constructor === BaseViewer) {
+ throw new Error("Cannot initialize BaseViewer.");
+ }
+
+ const viewerVersion = '2.7.570';
+
+ if (_pdfjsLib.version !== viewerVersion) {
+ throw new Error(`The API version "${_pdfjsLib.version}" does not match the Viewer version "${viewerVersion}".`);
+ }
+
+ this._name = this.constructor.name;
+ this.container = options.container;
+ this.viewer = options.viewer || options.container.firstElementChild;
+
+ if (!(this.container?.tagName.toUpperCase() === "DIV" && this.viewer?.tagName.toUpperCase() === "DIV")) {
+ throw new Error("Invalid `container` and/or `viewer` option.");
+ }
+
+ if (getComputedStyle(this.container).position !== "absolute") {
+ throw new Error("The `container` must be absolutely positioned.");
+ }
+
+ this.eventBus = options.eventBus;
+ this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService();
+ this.downloadManager = options.downloadManager || null;
+ this.findController = options.findController || null;
+ this.removePageBorders = options.removePageBorders || false;
+ this.textLayerMode = Number.isInteger(options.textLayerMode) ? options.textLayerMode : _ui_utils.TextLayerMode.ENABLE;
+ this.imageResourcesPath = options.imageResourcesPath || "";
+ this.renderInteractiveForms = typeof options.renderInteractiveForms === "boolean" ? options.renderInteractiveForms : true;
+ this.enablePrintAutoRotate = options.enablePrintAutoRotate || false;
+ this.renderer = options.renderer || _ui_utils.RendererType.CANVAS;
+ this.enableWebGL = options.enableWebGL || false;
+ this.useOnlyCssZoom = options.useOnlyCssZoom || false;
+ this.maxCanvasPixels = options.maxCanvasPixels;
+ this.l10n = options.l10n || _ui_utils.NullL10n;
+ this.enableScripting = options.enableScripting || false;
+ this._mouseState = options.mouseState || null;
+ this.defaultRenderingQueue = !options.renderingQueue;
+
+ if (this.defaultRenderingQueue) {
+ this.renderingQueue = new _pdf_rendering_queue.PDFRenderingQueue();
+ this.renderingQueue.setViewer(this);
+ } else {
+ this.renderingQueue = options.renderingQueue;
+ }
+
+ this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdate.bind(this));
+ this.presentationModeState = _ui_utils.PresentationModeState.UNKNOWN;
+ this._onBeforeDraw = this._onAfterDraw = null;
+
+ this._resetView();
+
+ if (this.removePageBorders) {
+ this.viewer.classList.add("removePageBorders");
+ }
+
+ Promise.resolve().then(() => {
+ this.eventBus.dispatch("baseviewerinit", {
+ source: this
+ });
+ });
+ }
+
+ get pagesCount() {
+ return this._pages.length;
+ }
+
+ getPageView(index) {
+ return this._pages[index];
+ }
+
+ get pageViewsReady() {
+ if (!this._pagesCapability.settled) {
+ return false;
+ }
+
+ return this._pages.every(function (pageView) {
+ return pageView && pageView.pdfPage;
+ });
+ }
+
+ get currentPageNumber() {
+ return this._currentPageNumber;
+ }
+
+ set currentPageNumber(val) {
+ if (!Number.isInteger(val)) {
+ throw new Error("Invalid page number.");
+ }
+
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ if (!this._setCurrentPageNumber(val, true)) {
+ console.error(`${this._name}.currentPageNumber: "${val}" is not a valid page.`);
+ }
+ }
+
+ _setCurrentPageNumber(val, resetCurrentPageView = false) {
+ if (this._currentPageNumber === val) {
+ if (resetCurrentPageView) {
+ this._resetCurrentPageView();
+ }
+
+ return true;
+ }
+
+ if (!(0 < val && val <= this.pagesCount)) {
+ return false;
+ }
+
+ const previous = this._currentPageNumber;
+ this._currentPageNumber = val;
+ this.eventBus.dispatch("pagechanging", {
+ source: this,
+ pageNumber: val,
+ pageLabel: this._pageLabels && this._pageLabels[val - 1],
+ previous
+ });
+
+ if (resetCurrentPageView) {
+ this._resetCurrentPageView();
+ }
+
+ return true;
+ }
+
+ get currentPageLabel() {
+ return this._pageLabels && this._pageLabels[this._currentPageNumber - 1];
+ }
+
+ set currentPageLabel(val) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ let page = val | 0;
+
+ if (this._pageLabels) {
+ const i = this._pageLabels.indexOf(val);
+
+ if (i >= 0) {
+ page = i + 1;
+ }
+ }
+
+ if (!this._setCurrentPageNumber(page, true)) {
+ console.error(`${this._name}.currentPageLabel: "${val}" is not a valid page.`);
+ }
+ }
+
+ get currentScale() {
+ return this._currentScale !== _ui_utils.UNKNOWN_SCALE ? this._currentScale : _ui_utils.DEFAULT_SCALE;
+ }
+
+ set currentScale(val) {
+ if (isNaN(val)) {
+ throw new Error("Invalid numeric scale.");
+ }
+
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ this._setScale(val, false);
+ }
+
+ get currentScaleValue() {
+ return this._currentScaleValue;
+ }
+
+ set currentScaleValue(val) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ this._setScale(val, false);
+ }
+
+ get pagesRotation() {
+ return this._pagesRotation;
+ }
+
+ set pagesRotation(rotation) {
+ if (!(0, _ui_utils.isValidRotation)(rotation)) {
+ throw new Error("Invalid pages rotation angle.");
+ }
+
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ if (this._pagesRotation === rotation) {
+ return;
+ }
+
+ this._pagesRotation = rotation;
+ const pageNumber = this._currentPageNumber;
+
+ for (let i = 0, ii = this._pages.length; i < ii; i++) {
+ const pageView = this._pages[i];
+ pageView.update(pageView.scale, rotation);
+ }
+
+ if (this._currentScaleValue) {
+ this._setScale(this._currentScaleValue, true);
+ }
+
+ this.eventBus.dispatch("rotationchanging", {
+ source: this,
+ pagesRotation: rotation,
+ pageNumber
+ });
+
+ if (this.defaultRenderingQueue) {
+ this.update();
+ }
+ }
+
+ get firstPagePromise() {
+ return this.pdfDocument ? this._firstPageCapability.promise : null;
+ }
+
+ get onePageRendered() {
+ return this.pdfDocument ? this._onePageRenderedCapability.promise : null;
+ }
+
+ get pagesPromise() {
+ return this.pdfDocument ? this._pagesCapability.promise : null;
+ }
+
+ get _viewerElement() {
+ throw new Error("Not implemented: _viewerElement");
+ }
+
+ _onePageRenderedOrForceFetch() {
+ if (!this.container.offsetParent || this._getVisiblePages().views.length === 0) {
+ return Promise.resolve();
+ }
+
+ return this._onePageRenderedCapability.promise;
+ }
+
+ setDocument(pdfDocument) {
+ if (this.pdfDocument) {
+ this.eventBus.dispatch("pagesdestroy", {
+ source: this
+ });
+
+ this._cancelRendering();
+
+ this._resetView();
+
+ if (this.findController) {
+ this.findController.setDocument(null);
+ }
+ }
+
+ this.pdfDocument = pdfDocument;
+
+ if (!pdfDocument) {
+ return;
+ }
+
+ const pagesCount = pdfDocument.numPages;
+ const firstPagePromise = pdfDocument.getPage(1);
+ const optionalContentConfigPromise = pdfDocument.getOptionalContentConfig();
+
+ this._pagesCapability.promise.then(() => {
+ this.eventBus.dispatch("pagesloaded", {
+ source: this,
+ pagesCount
+ });
+ });
+
+ this._onBeforeDraw = evt => {
+ const pageView = this._pages[evt.pageNumber - 1];
+
+ if (!pageView) {
+ return;
+ }
+
+ this._buffer.push(pageView);
+ };
+
+ this.eventBus._on("pagerender", this._onBeforeDraw);
+
+ this._onAfterDraw = evt => {
+ if (evt.cssTransform || this._onePageRenderedCapability.settled) {
+ return;
+ }
+
+ this._onePageRenderedCapability.resolve();
+
+ this.eventBus._off("pagerendered", this._onAfterDraw);
+
+ this._onAfterDraw = null;
+ };
+
+ this.eventBus._on("pagerendered", this._onAfterDraw);
+
+ firstPagePromise.then(firstPdfPage => {
+ this._firstPageCapability.resolve(firstPdfPage);
+
+ this._optionalContentConfigPromise = optionalContentConfigPromise;
+ const scale = this.currentScale;
+ const viewport = firstPdfPage.getViewport({
+ scale: scale * _ui_utils.CSS_UNITS
+ });
+ const textLayerFactory = this.textLayerMode !== _ui_utils.TextLayerMode.DISABLE ? this : null;
+
+ for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {
+ const pageView = new _pdf_page_view.PDFPageView({
+ container: this._viewerElement,
+ eventBus: this.eventBus,
+ id: pageNum,
+ scale,
+ defaultViewport: viewport.clone(),
+ optionalContentConfigPromise,
+ renderingQueue: this.renderingQueue,
+ textLayerFactory,
+ textLayerMode: this.textLayerMode,
+ annotationLayerFactory: this,
+ imageResourcesPath: this.imageResourcesPath,
+ renderInteractiveForms: this.renderInteractiveForms,
+ renderer: this.renderer,
+ enableWebGL: this.enableWebGL,
+ useOnlyCssZoom: this.useOnlyCssZoom,
+ maxCanvasPixels: this.maxCanvasPixels,
+ l10n: this.l10n,
+ enableScripting: this.enableScripting
+ });
+
+ this._pages.push(pageView);
+ }
+
+ const firstPageView = this._pages[0];
+
+ if (firstPageView) {
+ firstPageView.setPdfPage(firstPdfPage);
+ this.linkService.cachePageRef(1, firstPdfPage.ref);
+ }
+
+ if (this._spreadMode !== _ui_utils.SpreadMode.NONE) {
+ this._updateSpreadMode();
+ }
+
+ this._onePageRenderedOrForceFetch().then(() => {
+ if (this.findController) {
+ this.findController.setDocument(pdfDocument);
+ }
+
+ if (pdfDocument.loadingParams.disableAutoFetch || pagesCount > 7500) {
+ this._pagesCapability.resolve();
+
+ return;
+ }
+
+ let getPagesLeft = pagesCount - 1;
+
+ if (getPagesLeft <= 0) {
+ this._pagesCapability.resolve();
+
+ return;
+ }
+
+ for (let pageNum = 2; pageNum <= pagesCount; ++pageNum) {
+ pdfDocument.getPage(pageNum).then(pdfPage => {
+ const pageView = this._pages[pageNum - 1];
+
+ if (!pageView.pdfPage) {
+ pageView.setPdfPage(pdfPage);
+ }
+
+ this.linkService.cachePageRef(pageNum, pdfPage.ref);
+
+ if (--getPagesLeft === 0) {
+ this._pagesCapability.resolve();
+ }
+ }, reason => {
+ console.error(`Unable to get page ${pageNum} to initialize viewer`, reason);
+
+ if (--getPagesLeft === 0) {
+ this._pagesCapability.resolve();
+ }
+ });
+ }
+ });
+
+ this.eventBus.dispatch("pagesinit", {
+ source: this
+ });
+
+ if (this.defaultRenderingQueue) {
+ this.update();
+ }
+ }).catch(reason => {
+ console.error("Unable to initialize viewer", reason);
+ });
+ }
+
+ setPageLabels(labels) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ if (!labels) {
+ this._pageLabels = null;
+ } else if (!(Array.isArray(labels) && this.pdfDocument.numPages === labels.length)) {
+ this._pageLabels = null;
+ console.error(`${this._name}.setPageLabels: Invalid page labels.`);
+ } else {
+ this._pageLabels = labels;
+ }
+
+ for (let i = 0, ii = this._pages.length; i < ii; i++) {
+ const pageView = this._pages[i];
+ const label = this._pageLabels && this._pageLabels[i];
+ pageView.setPageLabel(label);
+ }
+ }
+
+ _resetView() {
+ this._pages = [];
+ this._currentPageNumber = 1;
+ this._currentScale = _ui_utils.UNKNOWN_SCALE;
+ this._currentScaleValue = null;
+ this._pageLabels = null;
+ this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE);
+ this._location = null;
+ this._pagesRotation = 0;
+ this._optionalContentConfigPromise = null;
+ this._pagesRequests = new WeakMap();
+ this._firstPageCapability = (0, _pdfjsLib.createPromiseCapability)();
+ this._onePageRenderedCapability = (0, _pdfjsLib.createPromiseCapability)();
+ this._pagesCapability = (0, _pdfjsLib.createPromiseCapability)();
+ this._scrollMode = _ui_utils.ScrollMode.VERTICAL;
+ this._spreadMode = _ui_utils.SpreadMode.NONE;
+
+ if (this._onBeforeDraw) {
+ this.eventBus._off("pagerender", this._onBeforeDraw);
+
+ this._onBeforeDraw = null;
+ }
+
+ if (this._onAfterDraw) {
+ this.eventBus._off("pagerendered", this._onAfterDraw);
+
+ this._onAfterDraw = null;
+ }
+
+ this._resetScriptingEvents();
+
+ this.viewer.textContent = "";
+
+ this._updateScrollMode();
+ }
+
+ _scrollUpdate() {
+ if (this.pagesCount === 0) {
+ return;
+ }
+
+ this.update();
+ }
+
+ _scrollIntoView({
+ pageDiv,
+ pageSpot = null,
+ pageNumber = null
+ }) {
+ (0, _ui_utils.scrollIntoView)(pageDiv, pageSpot);
+ }
+
+ _setScaleUpdatePages(newScale, newValue, noScroll = false, preset = false) {
+ this._currentScaleValue = newValue.toString();
+
+ if (isSameScale(this._currentScale, newScale)) {
+ if (preset) {
+ this.eventBus.dispatch("scalechanging", {
+ source: this,
+ scale: newScale,
+ presetValue: newValue
+ });
+ }
+
+ return;
+ }
+
+ for (let i = 0, ii = this._pages.length; i < ii; i++) {
+ this._pages[i].update(newScale);
+ }
+
+ this._currentScale = newScale;
+
+ if (!noScroll) {
+ let page = this._currentPageNumber,
+ dest;
+
+ if (this._location && !(this.isInPresentationMode || this.isChangingPresentationMode)) {
+ page = this._location.pageNumber;
+ dest = [null, {
+ name: "XYZ"
+ }, this._location.left, this._location.top, null];
+ }
+
+ this.scrollPageIntoView({
+ pageNumber: page,
+ destArray: dest,
+ allowNegativeOffset: true
+ });
+ }
+
+ this.eventBus.dispatch("scalechanging", {
+ source: this,
+ scale: newScale,
+ presetValue: preset ? newValue : undefined
+ });
+
+ if (this.defaultRenderingQueue) {
+ this.update();
+ }
+ }
+
+ get _pageWidthScaleFactor() {
+ if (this.spreadMode !== _ui_utils.SpreadMode.NONE && this.scrollMode !== _ui_utils.ScrollMode.HORIZONTAL && !this.isInPresentationMode) {
+ return 2;
+ }
+
+ return 1;
+ }
+
+ _setScale(value, noScroll = false) {
+ let scale = parseFloat(value);
+
+ if (scale > 0) {
+ this._setScaleUpdatePages(scale, value, noScroll, false);
+ } else {
+ const currentPage = this._pages[this._currentPageNumber - 1];
+
+ if (!currentPage) {
+ return;
+ }
+
+ const noPadding = this.isInPresentationMode || this.removePageBorders;
+ let hPadding = noPadding ? 0 : _ui_utils.SCROLLBAR_PADDING;
+ let vPadding = noPadding ? 0 : _ui_utils.VERTICAL_PADDING;
+
+ if (!noPadding && this._isScrollModeHorizontal) {
+ [hPadding, vPadding] = [vPadding, hPadding];
+ }
+
+ const pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale / this._pageWidthScaleFactor;
+ const pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale;
+
+ switch (value) {
+ case "page-actual":
+ scale = 1;
+ break;
+
+ case "page-width":
+ scale = pageWidthScale;
+ break;
+
+ case "page-height":
+ scale = pageHeightScale;
+ break;
+
+ case "page-fit":
+ scale = Math.min(pageWidthScale, pageHeightScale);
+ break;
+
+ case "auto":
+ const horizontalScale = (0, _ui_utils.isPortraitOrientation)(currentPage) ? pageWidthScale : Math.min(pageHeightScale, pageWidthScale);
+ scale = Math.min(_ui_utils.MAX_AUTO_SCALE, horizontalScale);
+ break;
+
+ default:
+ console.error(`${this._name}._setScale: "${value}" is an unknown zoom value.`);
+ return;
+ }
+
+ this._setScaleUpdatePages(scale, value, noScroll, true);
+ }
+ }
+
+ _resetCurrentPageView() {
+ if (this.isInPresentationMode) {
+ this._setScale(this._currentScaleValue, true);
+ }
+
+ const pageView = this._pages[this._currentPageNumber - 1];
+
+ this._scrollIntoView({
+ pageDiv: pageView.div
+ });
+ }
+
+ pageLabelToPageNumber(label) {
+ if (!this._pageLabels) {
+ return null;
+ }
+
+ const i = this._pageLabels.indexOf(label);
+
+ if (i < 0) {
+ return null;
+ }
+
+ return i + 1;
+ }
+
+ scrollPageIntoView({
+ pageNumber,
+ destArray = null,
+ allowNegativeOffset = false,
+ ignoreDestinationZoom = false
+ }) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ const pageView = Number.isInteger(pageNumber) && this._pages[pageNumber - 1];
+
+ if (!pageView) {
+ console.error(`${this._name}.scrollPageIntoView: ` + `"${pageNumber}" is not a valid pageNumber parameter.`);
+ return;
+ }
+
+ if (this.isInPresentationMode || !destArray) {
+ this._setCurrentPageNumber(pageNumber, true);
+
+ return;
+ }
+
+ let x = 0,
+ y = 0;
+ let width = 0,
+ height = 0,
+ widthScale,
+ heightScale;
+ const changeOrientation = pageView.rotation % 180 !== 0;
+ const pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / _ui_utils.CSS_UNITS;
+ const pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / _ui_utils.CSS_UNITS;
+ let scale = 0;
+
+ switch (destArray[1].name) {
+ case "XYZ":
+ x = destArray[2];
+ y = destArray[3];
+ scale = destArray[4];
+ x = x !== null ? x : 0;
+ y = y !== null ? y : pageHeight;
+ break;
+
+ case "Fit":
+ case "FitB":
+ scale = "page-fit";
+ break;
+
+ case "FitH":
+ case "FitBH":
+ y = destArray[2];
+ scale = "page-width";
+
+ if (y === null && this._location) {
+ x = this._location.left;
+ y = this._location.top;
+ } else if (typeof y !== "number") {
+ y = pageHeight;
+ }
+
+ break;
+
+ case "FitV":
+ case "FitBV":
+ x = destArray[2];
+ width = pageWidth;
+ height = pageHeight;
+ scale = "page-height";
+ break;
+
+ case "FitR":
+ x = destArray[2];
+ y = destArray[3];
+ width = destArray[4] - x;
+ height = destArray[5] - y;
+ const hPadding = this.removePageBorders ? 0 : _ui_utils.SCROLLBAR_PADDING;
+ const vPadding = this.removePageBorders ? 0 : _ui_utils.VERTICAL_PADDING;
+ widthScale = (this.container.clientWidth - hPadding) / width / _ui_utils.CSS_UNITS;
+ heightScale = (this.container.clientHeight - vPadding) / height / _ui_utils.CSS_UNITS;
+ scale = Math.min(Math.abs(widthScale), Math.abs(heightScale));
+ break;
+
+ default:
+ console.error(`${this._name}.scrollPageIntoView: ` + `"${destArray[1].name}" is not a valid destination type.`);
+ return;
+ }
+
+ if (!ignoreDestinationZoom) {
+ if (scale && scale !== this._currentScale) {
+ this.currentScaleValue = scale;
+ } else if (this._currentScale === _ui_utils.UNKNOWN_SCALE) {
+ this.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
+ }
+ }
+
+ if (scale === "page-fit" && !destArray[4]) {
+ this._scrollIntoView({
+ pageDiv: pageView.div,
+ pageNumber
+ });
+
+ return;
+ }
+
+ const boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)];
+ let left = Math.min(boundingRect[0][0], boundingRect[1][0]);
+ let top = Math.min(boundingRect[0][1], boundingRect[1][1]);
+
+ if (!allowNegativeOffset) {
+ left = Math.max(left, 0);
+ top = Math.max(top, 0);
+ }
+
+ this._scrollIntoView({
+ pageDiv: pageView.div,
+ pageSpot: {
+ left,
+ top
+ },
+ pageNumber
+ });
+ }
+
+ _updateLocation(firstPage) {
+ const currentScale = this._currentScale;
+ const currentScaleValue = this._currentScaleValue;
+ const normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? Math.round(currentScale * 10000) / 100 : currentScaleValue;
+ const pageNumber = firstPage.id;
+ let pdfOpenParams = "#page=" + pageNumber;
+ pdfOpenParams += "&zoom=" + normalizedScaleValue;
+ const currentPageView = this._pages[pageNumber - 1];
+ const container = this.container;
+ const topLeft = currentPageView.getPagePoint(container.scrollLeft - firstPage.x, container.scrollTop - firstPage.y);
+ const intLeft = Math.round(topLeft[0]);
+ const intTop = Math.round(topLeft[1]);
+ pdfOpenParams += "," + intLeft + "," + intTop;
+ this._location = {
+ pageNumber,
+ scale: normalizedScaleValue,
+ top: intTop,
+ left: intLeft,
+ rotation: this._pagesRotation,
+ pdfOpenParams
+ };
+ }
+
+ _updateHelper(visiblePages) {
+ throw new Error("Not implemented: _updateHelper");
+ }
+
+ update() {
+ const visible = this._getVisiblePages();
+
+ const visiblePages = visible.views,
+ numVisiblePages = visiblePages.length;
+
+ if (numVisiblePages === 0) {
+ return;
+ }
+
+ const newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1);
+
+ this._buffer.resize(newCacheSize, visiblePages);
+
+ this.renderingQueue.renderHighestPriority(visible);
+
+ this._updateHelper(visiblePages);
+
+ this._updateLocation(visible.first);
+
+ this.eventBus.dispatch("updateviewarea", {
+ source: this,
+ location: this._location
+ });
+ }
+
+ containsElement(element) {
+ return this.container.contains(element);
+ }
+
+ focus() {
+ this.container.focus();
+ }
+
+ get _isScrollModeHorizontal() {
+ return this.isInPresentationMode ? false : this._scrollMode === _ui_utils.ScrollMode.HORIZONTAL;
+ }
+
+ get _isContainerRtl() {
+ return getComputedStyle(this.container).direction === "rtl";
+ }
+
+ get isInPresentationMode() {
+ return this.presentationModeState === _ui_utils.PresentationModeState.FULLSCREEN;
+ }
+
+ get isChangingPresentationMode() {
+ return this.presentationModeState === _ui_utils.PresentationModeState.CHANGING;
+ }
+
+ get isHorizontalScrollbarEnabled() {
+ return this.isInPresentationMode ? false : this.container.scrollWidth > this.container.clientWidth;
+ }
+
+ get isVerticalScrollbarEnabled() {
+ return this.isInPresentationMode ? false : this.container.scrollHeight > this.container.clientHeight;
+ }
+
+ _getCurrentVisiblePage() {
+ if (!this.pagesCount) {
+ return {
+ views: []
+ };
+ }
+
+ const pageView = this._pages[this._currentPageNumber - 1];
+ const element = pageView.div;
+ const view = {
+ id: pageView.id,
+ x: element.offsetLeft + element.clientLeft,
+ y: element.offsetTop + element.clientTop,
+ view: pageView
+ };
+ return {
+ first: view,
+ last: view,
+ views: [view]
+ };
+ }
+
+ _getVisiblePages() {
+ return (0, _ui_utils.getVisibleElements)({
+ scrollEl: this.container,
+ views: this._pages,
+ sortByVisibility: true,
+ horizontal: this._isScrollModeHorizontal,
+ rtl: this._isScrollModeHorizontal && this._isContainerRtl
+ });
+ }
+
+ isPageVisible(pageNumber) {
+ if (!this.pdfDocument) {
+ return false;
+ }
+
+ if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) {
+ console.error(`${this._name}.isPageVisible: "${pageNumber}" is not a valid page.`);
+ return false;
+ }
+
+ return this._getVisiblePages().views.some(function (view) {
+ return view.id === pageNumber;
+ });
+ }
+
+ isPageCached(pageNumber) {
+ if (!this.pdfDocument || !this._buffer) {
+ return false;
+ }
+
+ if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) {
+ console.error(`${this._name}.isPageCached: "${pageNumber}" is not a valid page.`);
+ return false;
+ }
+
+ const pageView = this._pages[pageNumber - 1];
+
+ if (!pageView) {
+ return false;
+ }
+
+ return this._buffer.has(pageView);
+ }
+
+ cleanup() {
+ for (let i = 0, ii = this._pages.length; i < ii; i++) {
+ if (this._pages[i] && this._pages[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) {
+ this._pages[i].reset();
+ }
+ }
+ }
+
+ _cancelRendering() {
+ for (let i = 0, ii = this._pages.length; i < ii; i++) {
+ if (this._pages[i]) {
+ this._pages[i].cancelRendering();
+ }
+ }
+ }
+
+ _ensurePdfPageLoaded(pageView) {
+ if (pageView.pdfPage) {
+ return Promise.resolve(pageView.pdfPage);
+ }
+
+ if (this._pagesRequests.has(pageView)) {
+ return this._pagesRequests.get(pageView);
+ }
+
+ const promise = this.pdfDocument.getPage(pageView.id).then(pdfPage => {
+ if (!pageView.pdfPage) {
+ pageView.setPdfPage(pdfPage);
+ }
+
+ this._pagesRequests.delete(pageView);
+
+ return pdfPage;
+ }).catch(reason => {
+ console.error("Unable to get page for page view", reason);
+
+ this._pagesRequests.delete(pageView);
+ });
+
+ this._pagesRequests.set(pageView, promise);
+
+ return promise;
+ }
+
+ forceRendering(currentlyVisiblePages) {
+ const visiblePages = currentlyVisiblePages || this._getVisiblePages();
+
+ const scrollAhead = this._isScrollModeHorizontal ? this.scroll.right : this.scroll.down;
+ const pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, scrollAhead);
+
+ if (pageView) {
+ this._ensurePdfPageLoaded(pageView).then(() => {
+ this.renderingQueue.renderView(pageView);
+ });
+
+ return true;
+ }
+
+ return false;
+ }
+
+ createTextLayerBuilder(textLayerDiv, pageIndex, viewport, enhanceTextSelection = false, eventBus) {
+ return new _text_layer_builder.TextLayerBuilder({
+ textLayerDiv,
+ eventBus,
+ pageIndex,
+ viewport,
+ findController: this.isInPresentationMode ? null : this.findController,
+ enhanceTextSelection: this.isInPresentationMode ? false : enhanceTextSelection
+ });
+ }
+
+ createAnnotationLayerBuilder(pageDiv, pdfPage, annotationStorage = null, imageResourcesPath = "", renderInteractiveForms = false, l10n = _ui_utils.NullL10n, enableScripting = false, hasJSActionsPromise = null, mouseState = null) {
+ return new _annotation_layer_builder.AnnotationLayerBuilder({
+ pageDiv,
+ pdfPage,
+ annotationStorage: annotationStorage || this.pdfDocument?.annotationStorage,
+ imageResourcesPath,
+ renderInteractiveForms,
+ linkService: this.linkService,
+ downloadManager: this.downloadManager,
+ l10n,
+ enableScripting,
+ hasJSActionsPromise: hasJSActionsPromise || this.pdfDocument?.hasJSActions(),
+ mouseState: mouseState || this._mouseState
+ });
+ }
+
+ get hasEqualPageSizes() {
+ const firstPageView = this._pages[0];
+
+ for (let i = 1, ii = this._pages.length; i < ii; ++i) {
+ const pageView = this._pages[i];
+
+ if (pageView.width !== firstPageView.width || pageView.height !== firstPageView.height) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ getPagesOverview() {
+ const pagesOverview = this._pages.map(function (pageView) {
+ const viewport = pageView.pdfPage.getViewport({
+ scale: 1
+ });
+ return {
+ width: viewport.width,
+ height: viewport.height,
+ rotation: viewport.rotation
+ };
+ });
+
+ if (!this.enablePrintAutoRotate) {
+ return pagesOverview;
+ }
+
+ return pagesOverview.map(function (size) {
+ if ((0, _ui_utils.isPortraitOrientation)(size)) {
+ return size;
+ }
+
+ return {
+ width: size.height,
+ height: size.width,
+ rotation: (size.rotation + 90) % 360
+ };
+ });
+ }
+
+ get optionalContentConfigPromise() {
+ if (!this.pdfDocument) {
+ return Promise.resolve(null);
+ }
+
+ if (!this._optionalContentConfigPromise) {
+ return this.pdfDocument.getOptionalContentConfig();
+ }
+
+ return this._optionalContentConfigPromise;
+ }
+
+ set optionalContentConfigPromise(promise) {
+ if (!(promise instanceof Promise)) {
+ throw new Error(`Invalid optionalContentConfigPromise: ${promise}`);
+ }
+
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ if (!this._optionalContentConfigPromise) {
+ return;
+ }
+
+ this._optionalContentConfigPromise = promise;
+
+ for (const pageView of this._pages) {
+ pageView.update(pageView.scale, pageView.rotation, promise);
+ }
+
+ this.update();
+ this.eventBus.dispatch("optionalcontentconfigchanged", {
+ source: this,
+ promise
+ });
+ }
+
+ get scrollMode() {
+ return this._scrollMode;
+ }
+
+ set scrollMode(mode) {
+ if (this._scrollMode === mode) {
+ return;
+ }
+
+ if (!(0, _ui_utils.isValidScrollMode)(mode)) {
+ throw new Error(`Invalid scroll mode: ${mode}`);
+ }
+
+ this._scrollMode = mode;
+ this.eventBus.dispatch("scrollmodechanged", {
+ source: this,
+ mode
+ });
+
+ this._updateScrollMode(this._currentPageNumber);
+ }
+
+ _updateScrollMode(pageNumber = null) {
+ const scrollMode = this._scrollMode,
+ viewer = this.viewer;
+ viewer.classList.toggle("scrollHorizontal", scrollMode === _ui_utils.ScrollMode.HORIZONTAL);
+ viewer.classList.toggle("scrollWrapped", scrollMode === _ui_utils.ScrollMode.WRAPPED);
+
+ if (!this.pdfDocument || !pageNumber) {
+ return;
+ }
+
+ if (this._currentScaleValue && isNaN(this._currentScaleValue)) {
+ this._setScale(this._currentScaleValue, true);
+ }
+
+ this._setCurrentPageNumber(pageNumber, true);
+
+ this.update();
+ }
+
+ get spreadMode() {
+ return this._spreadMode;
+ }
+
+ set spreadMode(mode) {
+ if (this._spreadMode === mode) {
+ return;
+ }
+
+ if (!(0, _ui_utils.isValidSpreadMode)(mode)) {
+ throw new Error(`Invalid spread mode: ${mode}`);
+ }
+
+ this._spreadMode = mode;
+ this.eventBus.dispatch("spreadmodechanged", {
+ source: this,
+ mode
+ });
+
+ this._updateSpreadMode(this._currentPageNumber);
+ }
+
+ _updateSpreadMode(pageNumber = null) {
+ if (!this.pdfDocument) {
+ return;
+ }
+
+ const viewer = this.viewer,
+ pages = this._pages;
+ viewer.textContent = "";
+
+ if (this._spreadMode === _ui_utils.SpreadMode.NONE) {
+ for (let i = 0, iMax = pages.length; i < iMax; ++i) {
+ viewer.appendChild(pages[i].div);
+ }
+ } else {
+ const parity = this._spreadMode - 1;
+ let spread = null;
+
+ for (let i = 0, iMax = pages.length; i < iMax; ++i) {
+ if (spread === null) {
+ spread = document.createElement("div");
+ spread.className = "spread";
+ viewer.appendChild(spread);
+ } else if (i % 2 === parity) {
+ spread = spread.cloneNode(false);
+ viewer.appendChild(spread);
+ }
+
+ spread.appendChild(pages[i].div);
+ }
+ }
+
+ if (!pageNumber) {
+ return;
+ }
+
+ if (this._currentScaleValue && isNaN(this._currentScaleValue)) {
+ this._setScale(this._currentScaleValue, true);
+ }
+
+ this._setCurrentPageNumber(pageNumber, true);
+
+ this.update();
+ }
+
+ _getPageAdvance(currentPageNumber, previous = false) {
+ if (this.isInPresentationMode) {
+ return 1;
+ }
+
+ switch (this._scrollMode) {
+ case _ui_utils.ScrollMode.WRAPPED:
+ {
+ const {
+ views
+ } = this._getVisiblePages(),
+ pageLayout = new Map();
+
+ for (const {
+ id,
+ y,
+ percent,
+ widthPercent
+ } of views) {
+ if (percent === 0 || widthPercent < 100) {
+ continue;
+ }
+
+ let yArray = pageLayout.get(y);
+
+ if (!yArray) {
+ pageLayout.set(y, yArray || (yArray = []));
+ }
+
+ yArray.push(id);
+ }
+
+ for (const yArray of pageLayout.values()) {
+ const currentIndex = yArray.indexOf(currentPageNumber);
+
+ if (currentIndex === -1) {
+ continue;
+ }
+
+ const numPages = yArray.length;
+
+ if (numPages === 1) {
+ break;
+ }
+
+ if (previous) {
+ for (let i = currentIndex - 1, ii = 0; i >= ii; i--) {
+ const currentId = yArray[i],
+ expectedId = yArray[i + 1] - 1;
+
+ if (currentId < expectedId) {
+ return currentPageNumber - expectedId;
+ }
+ }
+ } else {
+ for (let i = currentIndex + 1, ii = numPages; i < ii; i++) {
+ const currentId = yArray[i],
+ expectedId = yArray[i - 1] + 1;
+
+ if (currentId > expectedId) {
+ return expectedId - currentPageNumber;
+ }
+ }
+ }
+
+ if (previous) {
+ const firstId = yArray[0];
+
+ if (firstId < currentPageNumber) {
+ return currentPageNumber - firstId + 1;
+ }
+ } else {
+ const lastId = yArray[numPages - 1];
+
+ if (lastId > currentPageNumber) {
+ return lastId - currentPageNumber + 1;
+ }
+ }
+
+ break;
+ }
+
+ break;
+ }
+
+ case _ui_utils.ScrollMode.HORIZONTAL:
+ {
+ break;
+ }
+
+ case _ui_utils.ScrollMode.VERTICAL:
+ {
+ if (this._spreadMode === _ui_utils.SpreadMode.NONE) {
+ break;
+ }
+
+ const parity = this._spreadMode - 1;
+
+ if (previous && currentPageNumber % 2 !== parity) {
+ break;
+ } else if (!previous && currentPageNumber % 2 === parity) {
+ break;
+ }
+
+ const {
+ views
+ } = this._getVisiblePages(),
+ expectedId = previous ? currentPageNumber - 1 : currentPageNumber + 1;
+
+ for (const {
+ id,
+ percent,
+ widthPercent
+ } of views) {
+ if (id !== expectedId) {
+ continue;
+ }
+
+ if (percent > 0 && widthPercent === 100) {
+ return 2;
+ }
+
+ break;
+ }
+
+ break;
+ }
+ }
+
+ return 1;
+ }
+
+ nextPage() {
+ const currentPageNumber = this._currentPageNumber,
+ pagesCount = this.pagesCount;
+
+ if (currentPageNumber >= pagesCount) {
+ return false;
+ }
+
+ const advance = this._getPageAdvance(currentPageNumber, false) || 1;
+ this.currentPageNumber = Math.min(currentPageNumber + advance, pagesCount);
+ return true;
+ }
+
+ previousPage() {
+ const currentPageNumber = this._currentPageNumber;
+
+ if (currentPageNumber <= 1) {
+ return false;
+ }
+
+ const advance = this._getPageAdvance(currentPageNumber, true) || 1;
+ this.currentPageNumber = Math.max(currentPageNumber - advance, 1);
+ return true;
+ }
+
+ initializeScriptingEvents() {
+ if (!this.enableScripting || this._pageOpenPendingSet) {
+ return;
+ }
+
+ const eventBus = this.eventBus,
+ pageOpenPendingSet = this._pageOpenPendingSet = new Set(),
+ scriptingEvents = this._scriptingEvents || (this._scriptingEvents = Object.create(null));
+
+ const dispatchPageClose = pageNumber => {
+ if (pageOpenPendingSet.has(pageNumber)) {
+ return;
+ }
+
+ eventBus.dispatch("pageclose", {
+ source: this,
+ pageNumber
+ });
+ };
+
+ const dispatchPageOpen = pageNumber => {
+ const pageView = this._pages[pageNumber - 1];
+
+ if (pageView?.renderingState === _pdf_rendering_queue.RenderingStates.FINISHED) {
+ pageOpenPendingSet.delete(pageNumber);
+ eventBus.dispatch("pageopen", {
+ source: this,
+ pageNumber,
+ actionsPromise: pageView.pdfPage?.getJSActions()
+ });
+ } else {
+ pageOpenPendingSet.add(pageNumber);
+ }
+ };
+
+ scriptingEvents.onPageChanging = ({
+ pageNumber,
+ previous
+ }) => {
+ if (pageNumber === previous) {
+ return;
+ }
+
+ dispatchPageClose(previous);
+ dispatchPageOpen(pageNumber);
+ };
+
+ eventBus._on("pagechanging", scriptingEvents.onPageChanging);
+
+ scriptingEvents.onPageRendered = ({
+ pageNumber
+ }) => {
+ if (!pageOpenPendingSet.has(pageNumber)) {
+ return;
+ }
+
+ if (pageNumber !== this._currentPageNumber) {
+ return;
+ }
+
+ dispatchPageOpen(pageNumber);
+ };
+
+ eventBus._on("pagerendered", scriptingEvents.onPageRendered);
+
+ scriptingEvents.onPagesDestroy = () => {
+ dispatchPageClose(this._currentPageNumber);
+ };
+
+ eventBus._on("pagesdestroy", scriptingEvents.onPagesDestroy);
+
+ dispatchPageOpen(this._currentPageNumber);
+ }
+
+ _resetScriptingEvents() {
+ if (!this.enableScripting || !this._pageOpenPendingSet) {
+ return;
+ }
+
+ const eventBus = this.eventBus,
+ scriptingEvents = this._scriptingEvents;
+
+ eventBus._off("pagechanging", scriptingEvents.onPageChanging);
+
+ scriptingEvents.onPageChanging = null;
+
+ eventBus._off("pagerendered", scriptingEvents.onPageRendered);
+
+ scriptingEvents.onPageRendered = null;
+
+ eventBus._off("pagesdestroy", scriptingEvents.onPagesDestroy);
+
+ scriptingEvents.onPagesDestroy = null;
+ this._pageOpenPendingSet = null;
+ }
+
+}
+
+exports.BaseViewer = BaseViewer;
+
+/***/ }),
+/* 28 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.DefaultAnnotationLayerFactory = exports.AnnotationLayerBuilder = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+var _ui_utils = __webpack_require__(4);
+
+var _pdf_link_service = __webpack_require__(19);
+
+class AnnotationLayerBuilder {
+ constructor({
+ pageDiv,
+ pdfPage,
+ linkService,
+ downloadManager,
+ annotationStorage = null,
+ imageResourcesPath = "",
+ renderInteractiveForms = true,
+ l10n = _ui_utils.NullL10n,
+ enableScripting = false,
+ hasJSActionsPromise = null,
+ mouseState = null
+ }) {
+ this.pageDiv = pageDiv;
+ this.pdfPage = pdfPage;
+ this.linkService = linkService;
+ this.downloadManager = downloadManager;
+ this.imageResourcesPath = imageResourcesPath;
+ this.renderInteractiveForms = renderInteractiveForms;
+ this.l10n = l10n;
+ this.annotationStorage = annotationStorage;
+ this.enableScripting = enableScripting;
+ this._hasJSActionsPromise = hasJSActionsPromise;
+ this._mouseState = mouseState;
+ this.div = null;
+ this._cancelled = false;
+ }
+
+ render(viewport, intent = "display") {
+ return Promise.all([this.pdfPage.getAnnotations({
+ intent
+ }), this._hasJSActionsPromise]).then(([annotations, hasJSActions = false]) => {
+ if (this._cancelled) {
+ return;
+ }
+
+ if (annotations.length === 0) {
+ return;
+ }
+
+ const parameters = {
+ viewport: viewport.clone({
+ dontFlip: true
+ }),
+ div: this.div,
+ annotations,
+ page: this.pdfPage,
+ imageResourcesPath: this.imageResourcesPath,
+ renderInteractiveForms: this.renderInteractiveForms,
+ linkService: this.linkService,
+ downloadManager: this.downloadManager,
+ annotationStorage: this.annotationStorage,
+ enableScripting: this.enableScripting,
+ hasJSActions,
+ mouseState: this._mouseState
+ };
+
+ if (this.div) {
+ _pdfjsLib.AnnotationLayer.update(parameters);
+ } else {
+ this.div = document.createElement("div");
+ this.div.className = "annotationLayer";
+ this.pageDiv.appendChild(this.div);
+ parameters.div = this.div;
+
+ _pdfjsLib.AnnotationLayer.render(parameters);
+
+ this.l10n.translate(this.div);
+ }
+ });
+ }
+
+ cancel() {
+ this._cancelled = true;
+ }
+
+ hide() {
+ if (!this.div) {
+ return;
+ }
+
+ this.div.setAttribute("hidden", "true");
+ }
+
+}
+
+exports.AnnotationLayerBuilder = AnnotationLayerBuilder;
+
+class DefaultAnnotationLayerFactory {
+ createAnnotationLayerBuilder(pageDiv, pdfPage, annotationStorage = null, imageResourcesPath = "", renderInteractiveForms = true, l10n = _ui_utils.NullL10n, enableScripting = false, hasJSActionsPromise = null, mouseState = null) {
+ return new AnnotationLayerBuilder({
+ pageDiv,
+ pdfPage,
+ imageResourcesPath,
+ renderInteractiveForms,
+ linkService: new _pdf_link_service.SimpleLinkService(),
+ l10n,
+ annotationStorage,
+ enableScripting,
+ hasJSActionsPromise,
+ mouseState
+ });
+ }
+
+}
+
+exports.DefaultAnnotationLayerFactory = DefaultAnnotationLayerFactory;
+
+/***/ }),
+/* 29 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFPageView = void 0;
+
+var _ui_utils = __webpack_require__(4);
+
+var _pdfjsLib = __webpack_require__(5);
+
+var _pdf_rendering_queue = __webpack_require__(8);
+
+var _viewer_compatibility = __webpack_require__(2);
+
+const MAX_CANVAS_PIXELS = _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels || 16777216;
+
+class PDFPageView {
+ constructor(options) {
+ const container = options.container;
+ const defaultViewport = options.defaultViewport;
+ this.id = options.id;
+ this.renderingId = "page" + this.id;
+ this.pdfPage = null;
+ this.pageLabel = null;
+ this.rotation = 0;
+ this.scale = options.scale || _ui_utils.DEFAULT_SCALE;
+ this.viewport = defaultViewport;
+ this.pdfPageRotate = defaultViewport.rotation;
+ this._optionalContentConfigPromise = options.optionalContentConfigPromise || null;
+ this.hasRestrictedScaling = false;
+ this.textLayerMode = Number.isInteger(options.textLayerMode) ? options.textLayerMode : _ui_utils.TextLayerMode.ENABLE;
+ this.imageResourcesPath = options.imageResourcesPath || "";
+ this.renderInteractiveForms = typeof options.renderInteractiveForms === "boolean" ? options.renderInteractiveForms : true;
+ this.useOnlyCssZoom = options.useOnlyCssZoom || false;
+ this.maxCanvasPixels = options.maxCanvasPixels || MAX_CANVAS_PIXELS;
+ this.eventBus = options.eventBus;
+ this.renderingQueue = options.renderingQueue;
+ this.textLayerFactory = options.textLayerFactory;
+ this.annotationLayerFactory = options.annotationLayerFactory;
+ this.renderer = options.renderer || _ui_utils.RendererType.CANVAS;
+ this.enableWebGL = options.enableWebGL || false;
+ this.l10n = options.l10n || _ui_utils.NullL10n;
+ this.enableScripting = options.enableScripting || false;
+ this.paintTask = null;
+ this.paintedViewportMap = new WeakMap();
+ this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL;
+ this.resume = null;
+ this._renderError = null;
+ this.annotationLayer = null;
+ this.textLayer = null;
+ this.zoomLayer = null;
+ const div = document.createElement("div");
+ div.className = "page";
+ div.style.width = Math.floor(this.viewport.width) + "px";
+ div.style.height = Math.floor(this.viewport.height) + "px";
+ div.setAttribute("data-page-number", this.id);
+ this.div = div;
+ container.appendChild(div);
+ }
+
+ setPdfPage(pdfPage) {
+ this.pdfPage = pdfPage;
+ this.pdfPageRotate = pdfPage.rotate;
+ const totalRotation = (this.rotation + this.pdfPageRotate) % 360;
+ this.viewport = pdfPage.getViewport({
+ scale: this.scale * _ui_utils.CSS_UNITS,
+ rotation: totalRotation
+ });
+ this.reset();
+ }
+
+ destroy() {
+ this.reset();
+
+ if (this.pdfPage) {
+ this.pdfPage.cleanup();
+ }
+ }
+
+ async _renderAnnotationLayer() {
+ let error = null;
+
+ try {
+ await this.annotationLayer.render(this.viewport, "display");
+ } catch (ex) {
+ error = ex;
+ } finally {
+ this.eventBus.dispatch("annotationlayerrendered", {
+ source: this,
+ pageNumber: this.id,
+ error
+ });
+ }
+ }
+
+ _resetZoomLayer(removeFromDOM = false) {
+ if (!this.zoomLayer) {
+ return;
+ }
+
+ const zoomLayerCanvas = this.zoomLayer.firstChild;
+ this.paintedViewportMap.delete(zoomLayerCanvas);
+ zoomLayerCanvas.width = 0;
+ zoomLayerCanvas.height = 0;
+
+ if (removeFromDOM) {
+ this.zoomLayer.remove();
+ }
+
+ this.zoomLayer = null;
+ }
+
+ reset(keepZoomLayer = false, keepAnnotations = false) {
+ this.cancelRendering(keepAnnotations);
+ this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL;
+ const div = this.div;
+ div.style.width = Math.floor(this.viewport.width) + "px";
+ div.style.height = Math.floor(this.viewport.height) + "px";
+ const childNodes = div.childNodes;
+ const currentZoomLayerNode = keepZoomLayer && this.zoomLayer || null;
+ const currentAnnotationNode = keepAnnotations && this.annotationLayer && this.annotationLayer.div || null;
+
+ for (let i = childNodes.length - 1; i >= 0; i--) {
+ const node = childNodes[i];
+
+ if (currentZoomLayerNode === node || currentAnnotationNode === node) {
+ continue;
+ }
+
+ div.removeChild(node);
+ }
+
+ div.removeAttribute("data-loaded");
+
+ if (currentAnnotationNode) {
+ this.annotationLayer.hide();
+ } else if (this.annotationLayer) {
+ this.annotationLayer.cancel();
+ this.annotationLayer = null;
+ }
+
+ if (!currentZoomLayerNode) {
+ if (this.canvas) {
+ this.paintedViewportMap.delete(this.canvas);
+ this.canvas.width = 0;
+ this.canvas.height = 0;
+ delete this.canvas;
+ }
+
+ this._resetZoomLayer();
+ }
+
+ if (this.svg) {
+ this.paintedViewportMap.delete(this.svg);
+ delete this.svg;
+ }
+
+ this.loadingIconDiv = document.createElement("div");
+ this.loadingIconDiv.className = "loadingIcon";
+ div.appendChild(this.loadingIconDiv);
+ }
+
+ update(scale, rotation, optionalContentConfigPromise = null) {
+ this.scale = scale || this.scale;
+
+ if (typeof rotation !== "undefined") {
+ this.rotation = rotation;
+ }
+
+ if (optionalContentConfigPromise instanceof Promise) {
+ this._optionalContentConfigPromise = optionalContentConfigPromise;
+ }
+
+ const totalRotation = (this.rotation + this.pdfPageRotate) % 360;
+ this.viewport = this.viewport.clone({
+ scale: this.scale * _ui_utils.CSS_UNITS,
+ rotation: totalRotation
+ });
+
+ if (this.svg) {
+ this.cssTransform(this.svg, true);
+ this.eventBus.dispatch("pagerendered", {
+ source: this,
+ pageNumber: this.id,
+ cssTransform: true,
+ timestamp: performance.now(),
+ error: this._renderError
+ });
+ return;
+ }
+
+ let isScalingRestricted = false;
+
+ if (this.canvas && this.maxCanvasPixels > 0) {
+ const outputScale = this.outputScale;
+
+ if ((Math.floor(this.viewport.width) * outputScale.sx | 0) * (Math.floor(this.viewport.height) * outputScale.sy | 0) > this.maxCanvasPixels) {
+ isScalingRestricted = true;
+ }
+ }
+
+ if (this.canvas) {
+ if (this.useOnlyCssZoom || this.hasRestrictedScaling && isScalingRestricted) {
+ this.cssTransform(this.canvas, true);
+ this.eventBus.dispatch("pagerendered", {
+ source: this,
+ pageNumber: this.id,
+ cssTransform: true,
+ timestamp: performance.now(),
+ error: this._renderError
+ });
+ return;
+ }
+
+ if (!this.zoomLayer && !this.canvas.hasAttribute("hidden")) {
+ this.zoomLayer = this.canvas.parentNode;
+ this.zoomLayer.style.position = "absolute";
+ }
+ }
+
+ if (this.zoomLayer) {
+ this.cssTransform(this.zoomLayer.firstChild);
+ }
+
+ this.reset(true, true);
+ }
+
+ cancelRendering(keepAnnotations = false) {
+ if (this.paintTask) {
+ this.paintTask.cancel();
+ this.paintTask = null;
+ }
+
+ this.resume = null;
+
+ if (this.textLayer) {
+ this.textLayer.cancel();
+ this.textLayer = null;
+ }
+
+ if (!keepAnnotations && this.annotationLayer) {
+ this.annotationLayer.cancel();
+ this.annotationLayer = null;
+ }
+ }
+
+ cssTransform(target, redrawAnnotations = false) {
+ const width = this.viewport.width;
+ const height = this.viewport.height;
+ const div = this.div;
+ target.style.width = target.parentNode.style.width = div.style.width = Math.floor(width) + "px";
+ target.style.height = target.parentNode.style.height = div.style.height = Math.floor(height) + "px";
+ const relativeRotation = this.viewport.rotation - this.paintedViewportMap.get(target).rotation;
+ const absRotation = Math.abs(relativeRotation);
+ let scaleX = 1,
+ scaleY = 1;
+
+ if (absRotation === 90 || absRotation === 270) {
+ scaleX = height / width;
+ scaleY = width / height;
+ }
+
+ target.style.transform = `rotate(${relativeRotation}deg) scale(${scaleX}, ${scaleY})`;
+
+ if (this.textLayer) {
+ const textLayerViewport = this.textLayer.viewport;
+ const textRelativeRotation = this.viewport.rotation - textLayerViewport.rotation;
+ const textAbsRotation = Math.abs(textRelativeRotation);
+ let scale = width / textLayerViewport.width;
+
+ if (textAbsRotation === 90 || textAbsRotation === 270) {
+ scale = width / textLayerViewport.height;
+ }
+
+ const textLayerDiv = this.textLayer.textLayerDiv;
+ let transX, transY;
+
+ switch (textAbsRotation) {
+ case 0:
+ transX = transY = 0;
+ break;
+
+ case 90:
+ transX = 0;
+ transY = "-" + textLayerDiv.style.height;
+ break;
+
+ case 180:
+ transX = "-" + textLayerDiv.style.width;
+ transY = "-" + textLayerDiv.style.height;
+ break;
+
+ case 270:
+ transX = "-" + textLayerDiv.style.width;
+ transY = 0;
+ break;
+
+ default:
+ console.error("Bad rotation value.");
+ break;
+ }
+
+ textLayerDiv.style.transform = `rotate(${textAbsRotation}deg) ` + `scale(${scale}) ` + `translate(${transX}, ${transY})`;
+ textLayerDiv.style.transformOrigin = "0% 0%";
+ }
+
+ if (redrawAnnotations && this.annotationLayer) {
+ this._renderAnnotationLayer();
+ }
+ }
+
+ get width() {
+ return this.viewport.width;
+ }
+
+ get height() {
+ return this.viewport.height;
+ }
+
+ getPagePoint(x, y) {
+ return this.viewport.convertToPdfPoint(x, y);
+ }
+
+ draw() {
+ if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) {
+ console.error("Must be in new state before drawing");
+ this.reset();
+ }
+
+ const {
+ div,
+ pdfPage
+ } = this;
+
+ if (!pdfPage) {
+ this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
+
+ if (this.loadingIconDiv) {
+ div.removeChild(this.loadingIconDiv);
+ delete this.loadingIconDiv;
+ }
+
+ return Promise.reject(new Error("pdfPage is not loaded"));
+ }
+
+ this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING;
+ const canvasWrapper = document.createElement("div");
+ canvasWrapper.style.width = div.style.width;
+ canvasWrapper.style.height = div.style.height;
+ canvasWrapper.classList.add("canvasWrapper");
+
+ if (this.annotationLayer && this.annotationLayer.div) {
+ div.insertBefore(canvasWrapper, this.annotationLayer.div);
+ } else {
+ div.appendChild(canvasWrapper);
+ }
+
+ let textLayer = null;
+
+ if (this.textLayerMode !== _ui_utils.TextLayerMode.DISABLE && this.textLayerFactory) {
+ const textLayerDiv = document.createElement("div");
+ textLayerDiv.className = "textLayer";
+ textLayerDiv.style.width = canvasWrapper.style.width;
+ textLayerDiv.style.height = canvasWrapper.style.height;
+
+ if (this.annotationLayer && this.annotationLayer.div) {
+ div.insertBefore(textLayerDiv, this.annotationLayer.div);
+ } else {
+ div.appendChild(textLayerDiv);
+ }
+
+ textLayer = this.textLayerFactory.createTextLayerBuilder(textLayerDiv, this.id - 1, this.viewport, this.textLayerMode === _ui_utils.TextLayerMode.ENABLE_ENHANCE, this.eventBus);
+ }
+
+ this.textLayer = textLayer;
+ let renderContinueCallback = null;
+
+ if (this.renderingQueue) {
+ renderContinueCallback = cont => {
+ if (!this.renderingQueue.isHighestPriority(this)) {
+ this.renderingState = _pdf_rendering_queue.RenderingStates.PAUSED;
+
+ this.resume = () => {
+ this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING;
+ cont();
+ };
+
+ return;
+ }
+
+ cont();
+ };
+ }
+
+ const finishPaintTask = async (error = null) => {
+ if (paintTask === this.paintTask) {
+ this.paintTask = null;
+ }
+
+ if (error instanceof _pdfjsLib.RenderingCancelledException) {
+ this._renderError = null;
+ return;
+ }
+
+ this._renderError = error;
+ this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
+
+ if (this.loadingIconDiv) {
+ div.removeChild(this.loadingIconDiv);
+ delete this.loadingIconDiv;
+ }
+
+ this._resetZoomLayer(true);
+
+ this.eventBus.dispatch("pagerendered", {
+ source: this,
+ pageNumber: this.id,
+ cssTransform: false,
+ timestamp: performance.now(),
+ error: this._renderError
+ });
+
+ if (error) {
+ throw error;
+ }
+ };
+
+ const paintTask = this.renderer === _ui_utils.RendererType.SVG ? this.paintOnSvg(canvasWrapper) : this.paintOnCanvas(canvasWrapper);
+ paintTask.onRenderContinue = renderContinueCallback;
+ this.paintTask = paintTask;
+ const resultPromise = paintTask.promise.then(function () {
+ return finishPaintTask(null).then(function () {
+ if (textLayer) {
+ const readableStream = pdfPage.streamTextContent({
+ normalizeWhitespace: true
+ });
+ textLayer.setTextContentStream(readableStream);
+ textLayer.render();
+ }
+ });
+ }, function (reason) {
+ return finishPaintTask(reason);
+ });
+
+ if (this.annotationLayerFactory) {
+ if (!this.annotationLayer) {
+ this.annotationLayer = this.annotationLayerFactory.createAnnotationLayerBuilder(div, pdfPage, null, this.imageResourcesPath, this.renderInteractiveForms, this.l10n, this.enableScripting, null, null);
+ }
+
+ this._renderAnnotationLayer();
+ }
+
+ div.setAttribute("data-loaded", true);
+ this.eventBus.dispatch("pagerender", {
+ source: this,
+ pageNumber: this.id
+ });
+ return resultPromise;
+ }
+
+ paintOnCanvas(canvasWrapper) {
+ const renderCapability = (0, _pdfjsLib.createPromiseCapability)();
+ const result = {
+ promise: renderCapability.promise,
+
+ onRenderContinue(cont) {
+ cont();
+ },
+
+ cancel() {
+ renderTask.cancel();
+ }
+
+ };
+ const viewport = this.viewport;
+ const canvas = document.createElement("canvas");
+ this.l10n.get("page_canvas", {
+ page: this.id
+ }, "Page {{page}}").then(msg => {
+ canvas.setAttribute("aria-label", msg);
+ });
+ canvas.setAttribute("hidden", "hidden");
+ let isCanvasHidden = true;
+
+ const showCanvas = function () {
+ if (isCanvasHidden) {
+ canvas.removeAttribute("hidden");
+ isCanvasHidden = false;
+ }
+ };
+
+ canvasWrapper.appendChild(canvas);
+ this.canvas = canvas;
+ canvas.mozOpaque = true;
+ const ctx = canvas.getContext("2d", {
+ alpha: false
+ });
+ const outputScale = (0, _ui_utils.getOutputScale)(ctx);
+ this.outputScale = outputScale;
+
+ if (this.useOnlyCssZoom) {
+ const actualSizeViewport = viewport.clone({
+ scale: _ui_utils.CSS_UNITS
+ });
+ outputScale.sx *= actualSizeViewport.width / viewport.width;
+ outputScale.sy *= actualSizeViewport.height / viewport.height;
+ outputScale.scaled = true;
+ }
+
+ if (this.maxCanvasPixels > 0) {
+ const pixelsInViewport = viewport.width * viewport.height;
+ const maxScale = Math.sqrt(this.maxCanvasPixels / pixelsInViewport);
+
+ if (outputScale.sx > maxScale || outputScale.sy > maxScale) {
+ outputScale.sx = maxScale;
+ outputScale.sy = maxScale;
+ outputScale.scaled = true;
+ this.hasRestrictedScaling = true;
+ } else {
+ this.hasRestrictedScaling = false;
+ }
+ }
+
+ const sfx = (0, _ui_utils.approximateFraction)(outputScale.sx);
+ const sfy = (0, _ui_utils.approximateFraction)(outputScale.sy);
+ canvas.width = (0, _ui_utils.roundToDivide)(viewport.width * outputScale.sx, sfx[0]);
+ canvas.height = (0, _ui_utils.roundToDivide)(viewport.height * outputScale.sy, sfy[0]);
+ canvas.style.width = (0, _ui_utils.roundToDivide)(viewport.width, sfx[1]) + "px";
+ canvas.style.height = (0, _ui_utils.roundToDivide)(viewport.height, sfy[1]) + "px";
+ this.paintedViewportMap.set(canvas, viewport);
+ const transform = !outputScale.scaled ? null : [outputScale.sx, 0, 0, outputScale.sy, 0, 0];
+ const renderContext = {
+ canvasContext: ctx,
+ transform,
+ viewport: this.viewport,
+ enableWebGL: this.enableWebGL,
+ renderInteractiveForms: this.renderInteractiveForms,
+ optionalContentConfigPromise: this._optionalContentConfigPromise
+ };
+ const renderTask = this.pdfPage.render(renderContext);
+
+ renderTask.onContinue = function (cont) {
+ showCanvas();
+
+ if (result.onRenderContinue) {
+ result.onRenderContinue(cont);
+ } else {
+ cont();
+ }
+ };
+
+ renderTask.promise.then(function () {
+ showCanvas();
+ renderCapability.resolve(undefined);
+ }, function (error) {
+ showCanvas();
+ renderCapability.reject(error);
+ });
+ return result;
+ }
+
+ paintOnSvg(wrapper) {
+ let cancelled = false;
+
+ const ensureNotCancelled = () => {
+ if (cancelled) {
+ throw new _pdfjsLib.RenderingCancelledException(`Rendering cancelled, page ${this.id}`, "svg");
+ }
+ };
+
+ const pdfPage = this.pdfPage;
+ const actualSizeViewport = this.viewport.clone({
+ scale: _ui_utils.CSS_UNITS
+ });
+ const promise = pdfPage.getOperatorList().then(opList => {
+ ensureNotCancelled();
+ const svgGfx = new _pdfjsLib.SVGGraphics(pdfPage.commonObjs, pdfPage.objs);
+ return svgGfx.getSVG(opList, actualSizeViewport).then(svg => {
+ ensureNotCancelled();
+ this.svg = svg;
+ this.paintedViewportMap.set(svg, actualSizeViewport);
+ svg.style.width = wrapper.style.width;
+ svg.style.height = wrapper.style.height;
+ this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED;
+ wrapper.appendChild(svg);
+ });
+ });
+ return {
+ promise,
+
+ onRenderContinue(cont) {
+ cont();
+ },
+
+ cancel() {
+ cancelled = true;
+ }
+
+ };
+ }
+
+ setPageLabel(label) {
+ this.pageLabel = typeof label === "string" ? label : null;
+
+ if (this.pageLabel !== null) {
+ this.div.setAttribute("data-page-label", this.pageLabel);
+ } else {
+ this.div.removeAttribute("data-page-label");
+ }
+ }
+
+}
+
+exports.PDFPageView = PDFPageView;
+
+/***/ }),
+/* 30 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.TextLayerBuilder = exports.DefaultTextLayerFactory = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+const EXPAND_DIVS_TIMEOUT = 300;
+
+class TextLayerBuilder {
+ constructor({
+ textLayerDiv,
+ eventBus,
+ pageIndex,
+ viewport,
+ findController = null,
+ enhanceTextSelection = false
+ }) {
+ this.textLayerDiv = textLayerDiv;
+ this.eventBus = eventBus;
+ this.textContent = null;
+ this.textContentItemsStr = [];
+ this.textContentStream = null;
+ this.renderingDone = false;
+ this.pageIdx = pageIndex;
+ this.pageNumber = this.pageIdx + 1;
+ this.matches = [];
+ this.viewport = viewport;
+ this.textDivs = [];
+ this.findController = findController;
+ this.textLayerRenderTask = null;
+ this.enhanceTextSelection = enhanceTextSelection;
+ this._onUpdateTextLayerMatches = null;
+
+ this._bindMouse();
+ }
+
+ _finishRendering() {
+ this.renderingDone = true;
+
+ if (!this.enhanceTextSelection) {
+ const endOfContent = document.createElement("div");
+ endOfContent.className = "endOfContent";
+ this.textLayerDiv.appendChild(endOfContent);
+ }
+
+ this.eventBus.dispatch("textlayerrendered", {
+ source: this,
+ pageNumber: this.pageNumber,
+ numTextDivs: this.textDivs.length
+ });
+ }
+
+ render(timeout = 0) {
+ if (!(this.textContent || this.textContentStream) || this.renderingDone) {
+ return;
+ }
+
+ this.cancel();
+ this.textDivs = [];
+ const textLayerFrag = document.createDocumentFragment();
+ this.textLayerRenderTask = (0, _pdfjsLib.renderTextLayer)({
+ textContent: this.textContent,
+ textContentStream: this.textContentStream,
+ container: textLayerFrag,
+ viewport: this.viewport,
+ textDivs: this.textDivs,
+ textContentItemsStr: this.textContentItemsStr,
+ timeout,
+ enhanceTextSelection: this.enhanceTextSelection
+ });
+ this.textLayerRenderTask.promise.then(() => {
+ this.textLayerDiv.appendChild(textLayerFrag);
+
+ this._finishRendering();
+
+ this._updateMatches();
+ }, function (reason) {});
+
+ if (!this._onUpdateTextLayerMatches) {
+ this._onUpdateTextLayerMatches = evt => {
+ if (evt.pageIndex === this.pageIdx || evt.pageIndex === -1) {
+ this._updateMatches();
+ }
+ };
+
+ this.eventBus._on("updatetextlayermatches", this._onUpdateTextLayerMatches);
+ }
+ }
+
+ cancel() {
+ if (this.textLayerRenderTask) {
+ this.textLayerRenderTask.cancel();
+ this.textLayerRenderTask = null;
+ }
+
+ if (this._onUpdateTextLayerMatches) {
+ this.eventBus._off("updatetextlayermatches", this._onUpdateTextLayerMatches);
+
+ this._onUpdateTextLayerMatches = null;
+ }
+ }
+
+ setTextContentStream(readableStream) {
+ this.cancel();
+ this.textContentStream = readableStream;
+ }
+
+ setTextContent(textContent) {
+ this.cancel();
+ this.textContent = textContent;
+ }
+
+ _convertMatches(matches, matchesLength) {
+ if (!matches) {
+ return [];
+ }
+
+ const {
+ textContentItemsStr
+ } = this;
+ let i = 0,
+ iIndex = 0;
+ const end = textContentItemsStr.length - 1;
+ const result = [];
+
+ for (let m = 0, mm = matches.length; m < mm; m++) {
+ let matchIdx = matches[m];
+
+ while (i !== end && matchIdx >= iIndex + textContentItemsStr[i].length) {
+ iIndex += textContentItemsStr[i].length;
+ i++;
+ }
+
+ if (i === textContentItemsStr.length) {
+ console.error("Could not find a matching mapping");
+ }
+
+ const match = {
+ begin: {
+ divIdx: i,
+ offset: matchIdx - iIndex
+ }
+ };
+ matchIdx += matchesLength[m];
+
+ while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) {
+ iIndex += textContentItemsStr[i].length;
+ i++;
+ }
+
+ match.end = {
+ divIdx: i,
+ offset: matchIdx - iIndex
+ };
+ result.push(match);
+ }
+
+ return result;
+ }
+
+ _renderMatches(matches) {
+ if (matches.length === 0) {
+ return;
+ }
+
+ const {
+ findController,
+ pageIdx,
+ textContentItemsStr,
+ textDivs
+ } = this;
+ const isSelectedPage = pageIdx === findController.selected.pageIdx;
+ const selectedMatchIdx = findController.selected.matchIdx;
+ const highlightAll = findController.state.highlightAll;
+ let prevEnd = null;
+ const infinity = {
+ divIdx: -1,
+ offset: undefined
+ };
+
+ function beginText(begin, className) {
+ const divIdx = begin.divIdx;
+ textDivs[divIdx].textContent = "";
+ appendTextToDiv(divIdx, 0, begin.offset, className);
+ }
+
+ function appendTextToDiv(divIdx, fromOffset, toOffset, className) {
+ const div = textDivs[divIdx];
+ const content = textContentItemsStr[divIdx].substring(fromOffset, toOffset);
+ const node = document.createTextNode(content);
+
+ if (className) {
+ const span = document.createElement("span");
+ span.className = className;
+ span.appendChild(node);
+ div.appendChild(span);
+ return;
+ }
+
+ div.appendChild(node);
+ }
+
+ let i0 = selectedMatchIdx,
+ i1 = i0 + 1;
+
+ if (highlightAll) {
+ i0 = 0;
+ i1 = matches.length;
+ } else if (!isSelectedPage) {
+ return;
+ }
+
+ for (let i = i0; i < i1; i++) {
+ const match = matches[i];
+ const begin = match.begin;
+ const end = match.end;
+ const isSelected = isSelectedPage && i === selectedMatchIdx;
+ const highlightSuffix = isSelected ? " selected" : "";
+
+ if (isSelected) {
+ findController.scrollMatchIntoView({
+ element: textDivs[begin.divIdx],
+ pageIndex: pageIdx,
+ matchIndex: selectedMatchIdx
+ });
+ }
+
+ if (!prevEnd || begin.divIdx !== prevEnd.divIdx) {
+ if (prevEnd !== null) {
+ appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);
+ }
+
+ beginText(begin);
+ } else {
+ appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset);
+ }
+
+ if (begin.divIdx === end.divIdx) {
+ appendTextToDiv(begin.divIdx, begin.offset, end.offset, "highlight" + highlightSuffix);
+ } else {
+ appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, "highlight begin" + highlightSuffix);
+
+ for (let n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) {
+ textDivs[n0].className = "highlight middle" + highlightSuffix;
+ }
+
+ beginText(end, "highlight end" + highlightSuffix);
+ }
+
+ prevEnd = end;
+ }
+
+ if (prevEnd) {
+ appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);
+ }
+ }
+
+ _updateMatches() {
+ if (!this.renderingDone) {
+ return;
+ }
+
+ const {
+ findController,
+ matches,
+ pageIdx,
+ textContentItemsStr,
+ textDivs
+ } = this;
+ let clearedUntilDivIdx = -1;
+
+ for (let i = 0, ii = matches.length; i < ii; i++) {
+ const match = matches[i];
+ const begin = Math.max(clearedUntilDivIdx, match.begin.divIdx);
+
+ for (let n = begin, end = match.end.divIdx; n <= end; n++) {
+ const div = textDivs[n];
+ div.textContent = textContentItemsStr[n];
+ div.className = "";
+ }
+
+ clearedUntilDivIdx = match.end.divIdx + 1;
+ }
+
+ if (!findController || !findController.highlightMatches) {
+ return;
+ }
+
+ const pageMatches = findController.pageMatches[pageIdx] || null;
+ const pageMatchesLength = findController.pageMatchesLength[pageIdx] || null;
+ this.matches = this._convertMatches(pageMatches, pageMatchesLength);
+
+ this._renderMatches(this.matches);
+ }
+
+ _bindMouse() {
+ const div = this.textLayerDiv;
+ let expandDivsTimer = null;
+ div.addEventListener("mousedown", evt => {
+ if (this.enhanceTextSelection && this.textLayerRenderTask) {
+ this.textLayerRenderTask.expandTextDivs(true);
+
+ if (expandDivsTimer) {
+ clearTimeout(expandDivsTimer);
+ expandDivsTimer = null;
+ }
+
+ return;
+ }
+
+ const end = div.querySelector(".endOfContent");
+
+ if (!end) {
+ return;
+ }
+
+ let adjustTop = evt.target !== div;
+ adjustTop = adjustTop && window.getComputedStyle(end).getPropertyValue("-moz-user-select") !== "none";
+
+ if (adjustTop) {
+ const divBounds = div.getBoundingClientRect();
+ const r = Math.max(0, (evt.pageY - divBounds.top) / divBounds.height);
+ end.style.top = (r * 100).toFixed(2) + "%";
+ }
+
+ end.classList.add("active");
+ });
+ div.addEventListener("mouseup", () => {
+ if (this.enhanceTextSelection && this.textLayerRenderTask) {
+ expandDivsTimer = setTimeout(() => {
+ if (this.textLayerRenderTask) {
+ this.textLayerRenderTask.expandTextDivs(false);
+ }
+
+ expandDivsTimer = null;
+ }, EXPAND_DIVS_TIMEOUT);
+ return;
+ }
+
+ const end = div.querySelector(".endOfContent");
+
+ if (!end) {
+ return;
+ }
+
+ end.style.top = "";
+ end.classList.remove("active");
+ });
+ }
+
+}
+
+exports.TextLayerBuilder = TextLayerBuilder;
+
+class DefaultTextLayerFactory {
+ createTextLayerBuilder(textLayerDiv, pageIndex, viewport, enhanceTextSelection = false, eventBus) {
+ return new TextLayerBuilder({
+ textLayerDiv,
+ pageIndex,
+ viewport,
+ enhanceTextSelection,
+ eventBus
+ });
+ }
+
+}
+
+exports.DefaultTextLayerFactory = DefaultTextLayerFactory;
+
+/***/ }),
+/* 31 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.SecondaryToolbar = void 0;
+
+var _ui_utils = __webpack_require__(4);
+
+var _pdf_cursor_tools = __webpack_require__(6);
+
+var _pdf_single_page_viewer = __webpack_require__(32);
+
+class SecondaryToolbar {
+ constructor(options, mainContainer, eventBus) {
+ this.toolbar = options.toolbar;
+ this.toggleButton = options.toggleButton;
+ this.toolbarButtonContainer = options.toolbarButtonContainer;
+ this.buttons = [{
+ element: options.presentationModeButton,
+ eventName: "presentationmode",
+ close: true
+ }, {
+ element: options.openFileButton,
+ eventName: "openfile",
+ close: true
+ }, {
+ element: options.printButton,
+ eventName: "print",
+ close: true
+ }, {
+ element: options.downloadButton,
+ eventName: "download",
+ close: true
+ }, {
+ element: options.viewBookmarkButton,
+ eventName: null,
+ close: true
+ }, {
+ element: options.firstPageButton,
+ eventName: "firstpage",
+ close: true
+ }, {
+ element: options.lastPageButton,
+ eventName: "lastpage",
+ close: true
+ }, {
+ element: options.pageRotateCwButton,
+ eventName: "rotatecw",
+ close: false
+ }, {
+ element: options.pageRotateCcwButton,
+ eventName: "rotateccw",
+ close: false
+ }, {
+ element: options.cursorSelectToolButton,
+ eventName: "switchcursortool",
+ eventDetails: {
+ tool: _pdf_cursor_tools.CursorTool.SELECT
+ },
+ close: true
+ }, {
+ element: options.cursorHandToolButton,
+ eventName: "switchcursortool",
+ eventDetails: {
+ tool: _pdf_cursor_tools.CursorTool.HAND
+ },
+ close: true
+ }, {
+ element: options.scrollVerticalButton,
+ eventName: "switchscrollmode",
+ eventDetails: {
+ mode: _ui_utils.ScrollMode.VERTICAL
+ },
+ close: true
+ }, {
+ element: options.scrollHorizontalButton,
+ eventName: "switchscrollmode",
+ eventDetails: {
+ mode: _ui_utils.ScrollMode.HORIZONTAL
+ },
+ close: true
+ }, {
+ element: options.scrollWrappedButton,
+ eventName: "switchscrollmode",
+ eventDetails: {
+ mode: _ui_utils.ScrollMode.WRAPPED
+ },
+ close: true
+ }, {
+ element: options.spreadNoneButton,
+ eventName: "switchspreadmode",
+ eventDetails: {
+ mode: _ui_utils.SpreadMode.NONE
+ },
+ close: true
+ }, {
+ element: options.spreadOddButton,
+ eventName: "switchspreadmode",
+ eventDetails: {
+ mode: _ui_utils.SpreadMode.ODD
+ },
+ close: true
+ }, {
+ element: options.spreadEvenButton,
+ eventName: "switchspreadmode",
+ eventDetails: {
+ mode: _ui_utils.SpreadMode.EVEN
+ },
+ close: true
+ }, {
+ element: options.documentPropertiesButton,
+ eventName: "documentproperties",
+ close: true
+ }];
+ this.items = {
+ firstPage: options.firstPageButton,
+ lastPage: options.lastPageButton,
+ pageRotateCw: options.pageRotateCwButton,
+ pageRotateCcw: options.pageRotateCcwButton
+ };
+ this.mainContainer = mainContainer;
+ this.eventBus = eventBus;
+ this.opened = false;
+ this.containerHeight = null;
+ this.previousContainerHeight = null;
+ this.reset();
+
+ this._bindClickListeners();
+
+ this._bindCursorToolsListener(options);
+
+ this._bindScrollModeListener(options);
+
+ this._bindSpreadModeListener(options);
+
+ this.eventBus._on("resize", this._setMaxHeight.bind(this));
+
+ this.eventBus._on("baseviewerinit", evt => {
+ if (evt.source instanceof _pdf_single_page_viewer.PDFSinglePageViewer) {
+ this.toolbarButtonContainer.classList.add("hiddenScrollModeButtons", "hiddenSpreadModeButtons");
+ } else {
+ this.toolbarButtonContainer.classList.remove("hiddenScrollModeButtons", "hiddenSpreadModeButtons");
+ }
+ });
+ }
+
+ get isOpen() {
+ return this.opened;
+ }
+
+ setPageNumber(pageNumber) {
+ this.pageNumber = pageNumber;
+
+ this._updateUIState();
+ }
+
+ setPagesCount(pagesCount) {
+ this.pagesCount = pagesCount;
+
+ this._updateUIState();
+ }
+
+ reset() {
+ this.pageNumber = 0;
+ this.pagesCount = 0;
+
+ this._updateUIState();
+
+ this.eventBus.dispatch("secondarytoolbarreset", {
+ source: this
+ });
+ }
+
+ _updateUIState() {
+ this.items.firstPage.disabled = this.pageNumber <= 1;
+ this.items.lastPage.disabled = this.pageNumber >= this.pagesCount;
+ this.items.pageRotateCw.disabled = this.pagesCount === 0;
+ this.items.pageRotateCcw.disabled = this.pagesCount === 0;
+ }
+
+ _bindClickListeners() {
+ this.toggleButton.addEventListener("click", this.toggle.bind(this));
+
+ for (const {
+ element,
+ eventName,
+ close,
+ eventDetails
+ } of this.buttons) {
+ element.addEventListener("click", evt => {
+ if (eventName !== null) {
+ const details = {
+ source: this
+ };
+
+ for (const property in eventDetails) {
+ details[property] = eventDetails[property];
+ }
+
+ this.eventBus.dispatch(eventName, details);
+ }
+
+ if (close) {
+ this.close();
+ }
+ });
+ }
+ }
+
+ _bindCursorToolsListener(buttons) {
+ this.eventBus._on("cursortoolchanged", function ({
+ tool
+ }) {
+ buttons.cursorSelectToolButton.classList.toggle("toggled", tool === _pdf_cursor_tools.CursorTool.SELECT);
+ buttons.cursorHandToolButton.classList.toggle("toggled", tool === _pdf_cursor_tools.CursorTool.HAND);
+ });
+ }
+
+ _bindScrollModeListener(buttons) {
+ function scrollModeChanged({
+ mode
+ }) {
+ buttons.scrollVerticalButton.classList.toggle("toggled", mode === _ui_utils.ScrollMode.VERTICAL);
+ buttons.scrollHorizontalButton.classList.toggle("toggled", mode === _ui_utils.ScrollMode.HORIZONTAL);
+ buttons.scrollWrappedButton.classList.toggle("toggled", mode === _ui_utils.ScrollMode.WRAPPED);
+ const isScrollModeHorizontal = mode === _ui_utils.ScrollMode.HORIZONTAL;
+ buttons.spreadNoneButton.disabled = isScrollModeHorizontal;
+ buttons.spreadOddButton.disabled = isScrollModeHorizontal;
+ buttons.spreadEvenButton.disabled = isScrollModeHorizontal;
+ }
+
+ this.eventBus._on("scrollmodechanged", scrollModeChanged);
+
+ this.eventBus._on("secondarytoolbarreset", evt => {
+ if (evt.source === this) {
+ scrollModeChanged({
+ mode: _ui_utils.ScrollMode.VERTICAL
+ });
+ }
+ });
+ }
+
+ _bindSpreadModeListener(buttons) {
+ function spreadModeChanged({
+ mode
+ }) {
+ buttons.spreadNoneButton.classList.toggle("toggled", mode === _ui_utils.SpreadMode.NONE);
+ buttons.spreadOddButton.classList.toggle("toggled", mode === _ui_utils.SpreadMode.ODD);
+ buttons.spreadEvenButton.classList.toggle("toggled", mode === _ui_utils.SpreadMode.EVEN);
+ }
+
+ this.eventBus._on("spreadmodechanged", spreadModeChanged);
+
+ this.eventBus._on("secondarytoolbarreset", evt => {
+ if (evt.source === this) {
+ spreadModeChanged({
+ mode: _ui_utils.SpreadMode.NONE
+ });
+ }
+ });
+ }
+
+ open() {
+ if (this.opened) {
+ return;
+ }
+
+ this.opened = true;
+
+ this._setMaxHeight();
+
+ this.toggleButton.classList.add("toggled");
+ this.toolbar.classList.remove("hidden");
+ }
+
+ close() {
+ if (!this.opened) {
+ return;
+ }
+
+ this.opened = false;
+ this.toolbar.classList.add("hidden");
+ this.toggleButton.classList.remove("toggled");
+ }
+
+ toggle() {
+ if (this.opened) {
+ this.close();
+ } else {
+ this.open();
+ }
+ }
+
+ _setMaxHeight() {
+ if (!this.opened) {
+ return;
+ }
+
+ this.containerHeight = this.mainContainer.clientHeight;
+
+ if (this.containerHeight === this.previousContainerHeight) {
+ return;
+ }
+
+ this.toolbarButtonContainer.style.maxHeight = `${this.containerHeight - _ui_utils.SCROLLBAR_PADDING}px`;
+ this.previousContainerHeight = this.containerHeight;
+ }
+
+}
+
+exports.SecondaryToolbar = SecondaryToolbar;
+
+/***/ }),
+/* 32 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFSinglePageViewer = void 0;
+
+var _base_viewer = __webpack_require__(27);
+
+var _pdfjsLib = __webpack_require__(5);
+
+class PDFSinglePageViewer extends _base_viewer.BaseViewer {
+ constructor(options) {
+ super(options);
+
+ this.eventBus._on("pagesinit", evt => {
+ this._ensurePageViewVisible();
+ });
+ }
+
+ get _viewerElement() {
+ return (0, _pdfjsLib.shadow)(this, "_viewerElement", this._shadowViewer);
+ }
+
+ get _pageWidthScaleFactor() {
+ return 1;
+ }
+
+ _resetView() {
+ super._resetView();
+
+ this._previousPageNumber = 1;
+ this._shadowViewer = document.createDocumentFragment();
+ this._updateScrollDown = null;
+ }
+
+ _ensurePageViewVisible() {
+ const pageView = this._pages[this._currentPageNumber - 1];
+ const previousPageView = this._pages[this._previousPageNumber - 1];
+ const viewerNodes = this.viewer.childNodes;
+
+ switch (viewerNodes.length) {
+ case 0:
+ this.viewer.appendChild(pageView.div);
+ break;
+
+ case 1:
+ if (viewerNodes[0] !== previousPageView.div) {
+ throw new Error("_ensurePageViewVisible: Unexpected previously visible page.");
+ }
+
+ if (pageView === previousPageView) {
+ break;
+ }
+
+ this._shadowViewer.appendChild(previousPageView.div);
+
+ this.viewer.appendChild(pageView.div);
+ this.container.scrollTop = 0;
+ break;
+
+ default:
+ throw new Error("_ensurePageViewVisible: Only one page should be visible at a time.");
+ }
+
+ this._previousPageNumber = this._currentPageNumber;
+ }
+
+ _scrollUpdate() {
+ if (this._updateScrollDown) {
+ this._updateScrollDown();
+ }
+
+ super._scrollUpdate();
+ }
+
+ _scrollIntoView({
+ pageDiv,
+ pageSpot = null,
+ pageNumber = null
+ }) {
+ if (pageNumber) {
+ this._setCurrentPageNumber(pageNumber);
+ }
+
+ const scrolledDown = this._currentPageNumber >= this._previousPageNumber;
+
+ this._ensurePageViewVisible();
+
+ this.update();
+
+ super._scrollIntoView({
+ pageDiv,
+ pageSpot,
+ pageNumber
+ });
+
+ this._updateScrollDown = () => {
+ this.scroll.down = scrolledDown;
+ this._updateScrollDown = null;
+ };
+ }
+
+ _getVisiblePages() {
+ return this._getCurrentVisiblePage();
+ }
+
+ _updateHelper(visiblePages) {}
+
+ get _isScrollModeHorizontal() {
+ return (0, _pdfjsLib.shadow)(this, "_isScrollModeHorizontal", false);
+ }
+
+ _updateScrollMode() {}
+
+ _updateSpreadMode() {}
+
+ _getPageAdvance() {
+ return 1;
+ }
+
+}
+
+exports.PDFSinglePageViewer = PDFSinglePageViewer;
+
+/***/ }),
+/* 33 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.Toolbar = void 0;
+
+var _ui_utils = __webpack_require__(4);
+
+const PAGE_NUMBER_LOADING_INDICATOR = "visiblePageIsLoading";
+const SCALE_SELECT_CONTAINER_WIDTH = 140;
+const SCALE_SELECT_WIDTH = 162;
+
+class Toolbar {
+ constructor(options, eventBus, l10n = _ui_utils.NullL10n) {
+ this.toolbar = options.container;
+ this.eventBus = eventBus;
+ this.l10n = l10n;
+ this.buttons = [{
+ element: options.previous,
+ eventName: "previouspage"
+ }, {
+ element: options.next,
+ eventName: "nextpage"
+ }, {
+ element: options.zoomIn,
+ eventName: "zoomin"
+ }, {
+ element: options.zoomOut,
+ eventName: "zoomout"
+ }, {
+ element: options.openFile,
+ eventName: "openfile"
+ }, {
+ element: options.print,
+ eventName: "print"
+ }, {
+ element: options.presentationModeButton,
+ eventName: "presentationmode"
+ }, {
+ element: options.download,
+ eventName: "download"
+ }, {
+ element: options.viewBookmark,
+ eventName: null
+ }];
+ this.items = {
+ numPages: options.numPages,
+ pageNumber: options.pageNumber,
+ scaleSelectContainer: options.scaleSelectContainer,
+ scaleSelect: options.scaleSelect,
+ customScaleOption: options.customScaleOption,
+ previous: options.previous,
+ next: options.next,
+ zoomIn: options.zoomIn,
+ zoomOut: options.zoomOut
+ };
+ this._wasLocalized = false;
+ this.reset();
+
+ this._bindListeners();
+ }
+
+ setPageNumber(pageNumber, pageLabel) {
+ this.pageNumber = pageNumber;
+ this.pageLabel = pageLabel;
+
+ this._updateUIState(false);
+ }
+
+ setPagesCount(pagesCount, hasPageLabels) {
+ this.pagesCount = pagesCount;
+ this.hasPageLabels = hasPageLabels;
+
+ this._updateUIState(true);
+ }
+
+ setPageScale(pageScaleValue, pageScale) {
+ this.pageScaleValue = (pageScaleValue || pageScale).toString();
+ this.pageScale = pageScale;
+
+ this._updateUIState(false);
+ }
+
+ reset() {
+ this.pageNumber = 0;
+ this.pageLabel = null;
+ this.hasPageLabels = false;
+ this.pagesCount = 0;
+ this.pageScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
+ this.pageScale = _ui_utils.DEFAULT_SCALE;
+
+ this._updateUIState(true);
+
+ this.updateLoadingIndicatorState();
+ }
+
+ _bindListeners() {
+ const {
+ pageNumber,
+ scaleSelect
+ } = this.items;
+ const self = this;
+
+ for (const {
+ element,
+ eventName
+ } of this.buttons) {
+ element.addEventListener("click", evt => {
+ if (eventName !== null) {
+ this.eventBus.dispatch(eventName, {
+ source: this
+ });
+ }
+ });
+ }
+
+ pageNumber.addEventListener("click", function () {
+ this.select();
+ });
+ pageNumber.addEventListener("change", function () {
+ self.eventBus.dispatch("pagenumberchanged", {
+ source: self,
+ value: this.value
+ });
+ });
+ scaleSelect.addEventListener("change", function () {
+ if (this.value === "custom") {
+ return;
+ }
+
+ self.eventBus.dispatch("scalechanged", {
+ source: self,
+ value: this.value
+ });
+ });
+ scaleSelect.oncontextmenu = _ui_utils.noContextMenuHandler;
+
+ this.eventBus._on("localized", () => {
+ this._wasLocalized = true;
+
+ this._adjustScaleWidth();
+
+ this._updateUIState(true);
+ });
+ }
+
+ _updateUIState(resetNumPages = false) {
+ if (!this._wasLocalized) {
+ return;
+ }
+
+ const {
+ pageNumber,
+ pagesCount,
+ pageScaleValue,
+ pageScale,
+ items
+ } = this;
+
+ if (resetNumPages) {
+ if (this.hasPageLabels) {
+ items.pageNumber.type = "text";
+ } else {
+ items.pageNumber.type = "number";
+ this.l10n.get("of_pages", {
+ pagesCount
+ }, "of {{pagesCount}}").then(msg => {
+ items.numPages.textContent = msg;
+ });
+ }
+
+ items.pageNumber.max = pagesCount;
+ }
+
+ if (this.hasPageLabels) {
+ items.pageNumber.value = this.pageLabel;
+ this.l10n.get("page_of_pages", {
+ pageNumber,
+ pagesCount
+ }, "({{pageNumber}} of {{pagesCount}})").then(msg => {
+ items.numPages.textContent = msg;
+ });
+ } else {
+ items.pageNumber.value = pageNumber;
+ }
+
+ items.previous.disabled = pageNumber <= 1;
+ items.next.disabled = pageNumber >= pagesCount;
+ items.zoomOut.disabled = pageScale <= _ui_utils.MIN_SCALE;
+ items.zoomIn.disabled = pageScale >= _ui_utils.MAX_SCALE;
+ const customScale = Math.round(pageScale * 10000) / 100;
+ this.l10n.get("page_scale_percent", {
+ scale: customScale
+ }, "{{scale}}%").then(msg => {
+ let predefinedValueFound = false;
+
+ for (const option of items.scaleSelect.options) {
+ if (option.value !== pageScaleValue) {
+ option.selected = false;
+ continue;
+ }
+
+ option.selected = true;
+ predefinedValueFound = true;
+ }
+
+ if (!predefinedValueFound) {
+ items.customScaleOption.textContent = msg;
+ items.customScaleOption.selected = true;
+ }
+ });
+ }
+
+ updateLoadingIndicatorState(loading = false) {
+ const pageNumberInput = this.items.pageNumber;
+ pageNumberInput.classList.toggle(PAGE_NUMBER_LOADING_INDICATOR, loading);
+ }
+
+ async _adjustScaleWidth() {
+ const {
+ items,
+ l10n
+ } = this;
+ const predefinedValuesPromise = Promise.all([l10n.get("page_scale_auto", null, "Automatic Zoom"), l10n.get("page_scale_actual", null, "Actual Size"), l10n.get("page_scale_fit", null, "Page Fit"), l10n.get("page_scale_width", null, "Page Width")]);
+ let canvas = document.createElement("canvas");
+ canvas.mozOpaque = true;
+ let ctx = canvas.getContext("2d", {
+ alpha: false
+ });
+ await _ui_utils.animationStarted;
+ const {
+ fontSize,
+ fontFamily
+ } = getComputedStyle(items.scaleSelect);
+ ctx.font = `${fontSize} ${fontFamily}`;
+ let maxWidth = 0;
+
+ for (const predefinedValue of await predefinedValuesPromise) {
+ const {
+ width
+ } = ctx.measureText(predefinedValue);
+
+ if (width > maxWidth) {
+ maxWidth = width;
+ }
+ }
+
+ const overflow = SCALE_SELECT_WIDTH - SCALE_SELECT_CONTAINER_WIDTH;
+ maxWidth += 2 * overflow;
+
+ if (maxWidth > SCALE_SELECT_CONTAINER_WIDTH) {
+ items.scaleSelect.style.width = `${maxWidth + overflow}px`;
+ items.scaleSelectContainer.style.width = `${maxWidth}px`;
+ }
+
+ canvas.width = 0;
+ canvas.height = 0;
+ canvas = ctx = null;
+ }
+
+}
+
+exports.Toolbar = Toolbar;
+
+/***/ }),
+/* 34 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.ViewHistory = void 0;
+const DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20;
+
+class ViewHistory {
+ constructor(fingerprint, cacheSize = DEFAULT_VIEW_HISTORY_CACHE_SIZE) {
+ this.fingerprint = fingerprint;
+ this.cacheSize = cacheSize;
+ this._initializedPromise = this._readFromStorage().then(databaseStr => {
+ const database = JSON.parse(databaseStr || "{}");
+ let index = -1;
+
+ if (!Array.isArray(database.files)) {
+ database.files = [];
+ } else {
+ while (database.files.length >= this.cacheSize) {
+ database.files.shift();
+ }
+
+ for (let i = 0, ii = database.files.length; i < ii; i++) {
+ const branch = database.files[i];
+
+ if (branch.fingerprint === this.fingerprint) {
+ index = i;
+ break;
+ }
+ }
+ }
+
+ if (index === -1) {
+ index = database.files.push({
+ fingerprint: this.fingerprint
+ }) - 1;
+ }
+
+ this.file = database.files[index];
+ this.database = database;
+ });
+ }
+
+ async _writeToStorage() {
+ const databaseStr = JSON.stringify(this.database);
+ localStorage.setItem("pdfjs.history", databaseStr);
+ }
+
+ async _readFromStorage() {
+ return localStorage.getItem("pdfjs.history");
+ }
+
+ async set(name, val) {
+ await this._initializedPromise;
+ this.file[name] = val;
+ return this._writeToStorage();
+ }
+
+ async setMultiple(properties) {
+ await this._initializedPromise;
+
+ for (const name in properties) {
+ this.file[name] = properties[name];
+ }
+
+ return this._writeToStorage();
+ }
+
+ async get(name, defaultValue) {
+ await this._initializedPromise;
+ const val = this.file[name];
+ return val !== undefined ? val : defaultValue;
+ }
+
+ async getMultiple(properties) {
+ await this._initializedPromise;
+ const values = Object.create(null);
+
+ for (const name in properties) {
+ const val = this.file[name];
+ values[name] = val !== undefined ? val : properties[name];
+ }
+
+ return values;
+ }
+
+}
+
+exports.ViewHistory = ViewHistory;
+
+/***/ }),
+/* 35 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.GenericCom = void 0;
+
+var _app = __webpack_require__(3);
+
+var _preferences = __webpack_require__(36);
+
+var _download_manager = __webpack_require__(37);
+
+var _genericl10n = __webpack_require__(38);
+
+var _generic_scripting = __webpack_require__(40);
+
+;
+const GenericCom = {};
+exports.GenericCom = GenericCom;
+
+class GenericPreferences extends _preferences.BasePreferences {
+ async _writeToStorage(prefObj) {
+ localStorage.setItem("pdfjs.preferences", JSON.stringify(prefObj));
+ }
+
+ async _readFromStorage(prefObj) {
+ return JSON.parse(localStorage.getItem("pdfjs.preferences"));
+ }
+
+}
+
+class GenericExternalServices extends _app.DefaultExternalServices {
+ static createDownloadManager(options) {
+ return new _download_manager.DownloadManager();
+ }
+
+ static createPreferences() {
+ return new GenericPreferences();
+ }
+
+ static createL10n({
+ locale = "en-US"
+ }) {
+ return new _genericl10n.GenericL10n(locale);
+ }
+
+ static createScripting({
+ sandboxBundleSrc
+ }) {
+ return new _generic_scripting.GenericScripting(sandboxBundleSrc);
+ }
+
+}
+
+_app.PDFViewerApplication.externalServices = GenericExternalServices;
+
+/***/ }),
+/* 36 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.BasePreferences = void 0;
+
+var _app_options = __webpack_require__(1);
+
+class BasePreferences {
+ constructor() {
+ if (this.constructor === BasePreferences) {
+ throw new Error("Cannot initialize BasePreferences.");
+ }
+
+ Object.defineProperty(this, "defaults", {
+ value: Object.freeze({
+ "cursorToolOnLoad": 0,
+ "defaultZoomValue": "",
+ "disablePageLabels": false,
+ "enablePermissions": false,
+ "enablePrintAutoRotate": false,
+ "enableScripting": false,
+ "enableWebGL": false,
+ "externalLinkTarget": 0,
+ "historyUpdateUrl": false,
+ "ignoreDestinationZoom": false,
+ "pdfBugEnabled": false,
+ "renderer": "canvas",
+ "renderInteractiveForms": true,
+ "sidebarViewOnLoad": -1,
+ "scrollModeOnLoad": -1,
+ "spreadModeOnLoad": -1,
+ "textLayerMode": 1,
+ "useOnlyCssZoom": false,
+ "viewerCssTheme": 0,
+ "viewOnLoad": 0,
+ "disableAutoFetch": false,
+ "disableFontFace": false,
+ "disableRange": false,
+ "disableStream": false
+ }),
+ writable: false,
+ enumerable: true,
+ configurable: false
+ });
+ this.prefs = Object.assign(Object.create(null), this.defaults);
+ this._initializedPromise = this._readFromStorage(this.defaults).then(prefs => {
+ if (!prefs) {
+ return;
+ }
+
+ for (const name in prefs) {
+ const defaultValue = this.defaults[name],
+ prefValue = prefs[name];
+
+ if (defaultValue === undefined || typeof prefValue !== typeof defaultValue) {
+ continue;
+ }
+
+ this.prefs[name] = prefValue;
+ }
+ });
+ }
+
+ async _writeToStorage(prefObj) {
+ throw new Error("Not implemented: _writeToStorage");
+ }
+
+ async _readFromStorage(prefObj) {
+ throw new Error("Not implemented: _readFromStorage");
+ }
+
+ async reset() {
+ await this._initializedPromise;
+ this.prefs = Object.assign(Object.create(null), this.defaults);
+ return this._writeToStorage(this.defaults);
+ }
+
+ async set(name, value) {
+ await this._initializedPromise;
+ const defaultValue = this.defaults[name];
+
+ if (defaultValue === undefined) {
+ throw new Error(`Set preference: "${name}" is undefined.`);
+ } else if (value === undefined) {
+ throw new Error("Set preference: no value is specified.");
+ }
+
+ const valueType = typeof value;
+ const defaultType = typeof defaultValue;
+
+ if (valueType !== defaultType) {
+ if (valueType === "number" && defaultType === "string") {
+ value = value.toString();
+ } else {
+ throw new Error(`Set preference: "${value}" is a ${valueType}, ` + `expected a ${defaultType}.`);
+ }
+ } else {
+ if (valueType === "number" && !Number.isInteger(value)) {
+ throw new Error(`Set preference: "${value}" must be an integer.`);
+ }
+ }
+
+ this.prefs[name] = value;
+ return this._writeToStorage(this.prefs);
+ }
+
+ async get(name) {
+ await this._initializedPromise;
+ const defaultValue = this.defaults[name];
+
+ if (defaultValue === undefined) {
+ throw new Error(`Get preference: "${name}" is undefined.`);
+ } else {
+ const prefValue = this.prefs[name];
+
+ if (prefValue !== undefined) {
+ return prefValue;
+ }
+ }
+
+ return defaultValue;
+ }
+
+ async getAll() {
+ await this._initializedPromise;
+ return Object.assign(Object.create(null), this.defaults, this.prefs);
+ }
+
+}
+
+exports.BasePreferences = BasePreferences;
+
+/***/ }),
+/* 37 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.DownloadManager = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+var _viewer_compatibility = __webpack_require__(2);
+
+;
+
+function download(blobUrl, filename) {
+ const a = document.createElement("a");
+
+ if (!a.click) {
+ throw new Error('DownloadManager: "a.click()" is not supported.');
+ }
+
+ a.href = blobUrl;
+ a.target = "_parent";
+
+ if ("download" in a) {
+ a.download = filename;
+ }
+
+ (document.body || document.documentElement).appendChild(a);
+ a.click();
+ a.remove();
+}
+
+class DownloadManager {
+ downloadUrl(url, filename) {
+ if (!(0, _pdfjsLib.createValidAbsoluteUrl)(url, "http://example.com")) {
+ return;
+ }
+
+ download(url + "#pdfjs.action=download", filename);
+ }
+
+ downloadData(data, filename, contentType) {
+ const blobUrl = (0, _pdfjsLib.createObjectURL)(data, contentType, _viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL);
+ download(blobUrl, filename);
+ }
+
+ download(blob, url, filename, sourceEventType = "download") {
+ if (_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) {
+ this.downloadUrl(url, filename);
+ return;
+ }
+
+ const blobUrl = URL.createObjectURL(blob);
+ download(blobUrl, filename);
+ }
+
+}
+
+exports.DownloadManager = DownloadManager;
+
+/***/ }),
+/* 38 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.GenericL10n = void 0;
+
+__webpack_require__(39);
+
+const webL10n = document.webL10n;
+
+class GenericL10n {
+ constructor(lang) {
+ this._lang = lang;
+ this._ready = new Promise((resolve, reject) => {
+ webL10n.setLanguage(lang, () => {
+ resolve(webL10n);
+ });
+ });
+ }
+
+ async getLanguage() {
+ const l10n = await this._ready;
+ return l10n.getLanguage();
+ }
+
+ async getDirection() {
+ const l10n = await this._ready;
+ return l10n.getDirection();
+ }
+
+ async get(property, args, fallback) {
+ const l10n = await this._ready;
+ return l10n.get(property, args, fallback);
+ }
+
+ async translate(element) {
+ const l10n = await this._ready;
+ return l10n.translate(element);
+ }
+
+}
+
+exports.GenericL10n = GenericL10n;
+
+/***/ }),
+/* 39 */
+/***/ (() => {
+
+
+
+document.webL10n = function (window, document, undefined) {
+ var gL10nData = {};
+ var gTextData = '';
+ var gTextProp = 'textContent';
+ var gLanguage = '';
+ var gMacros = {};
+ var gReadyState = 'loading';
+ var gAsyncResourceLoading = true;
+
+ function getL10nResourceLinks() {
+ return document.querySelectorAll('link[type="application/l10n"]');
+ }
+
+ function getL10nDictionary() {
+ var script = document.querySelector('script[type="application/l10n"]');
+ return script ? JSON.parse(script.innerHTML) : null;
+ }
+
+ function getTranslatableChildren(element) {
+ return element ? element.querySelectorAll('*[data-l10n-id]') : [];
+ }
+
+ function getL10nAttributes(element) {
+ if (!element) return {};
+ var l10nId = element.getAttribute('data-l10n-id');
+ var l10nArgs = element.getAttribute('data-l10n-args');
+ var args = {};
+
+ if (l10nArgs) {
+ try {
+ args = JSON.parse(l10nArgs);
+ } catch (e) {
+ console.warn('could not parse arguments for #' + l10nId);
+ }
+ }
+
+ return {
+ id: l10nId,
+ args: args
+ };
+ }
+
+ function xhrLoadText(url, onSuccess, onFailure) {
+ onSuccess = onSuccess || function _onSuccess(data) {};
+
+ onFailure = onFailure || function _onFailure() {};
+
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', url, gAsyncResourceLoading);
+
+ if (xhr.overrideMimeType) {
+ xhr.overrideMimeType('text/plain; charset=utf-8');
+ }
+
+ xhr.onreadystatechange = function () {
+ if (xhr.readyState == 4) {
+ if (xhr.status == 200 || xhr.status === 0) {
+ onSuccess(xhr.responseText);
+ } else {
+ onFailure();
+ }
+ }
+ };
+
+ xhr.onerror = onFailure;
+ xhr.ontimeout = onFailure;
+
+ try {
+ xhr.send(null);
+ } catch (e) {
+ onFailure();
+ }
+ }
+
+ function parseResource(href, lang, successCallback, failureCallback) {
+ var baseURL = href.replace(/[^\/]*$/, '') || './';
+
+ function evalString(text) {
+ if (text.lastIndexOf('\\') < 0) return text;
+ return text.replace(/\\\\/g, '\\').replace(/\\n/g, '\n').replace(/\\r/g, '\r').replace(/\\t/g, '\t').replace(/\\b/g, '\b').replace(/\\f/g, '\f').replace(/\\{/g, '{').replace(/\\}/g, '}').replace(/\\"/g, '"').replace(/\\'/g, "'");
+ }
+
+ function parseProperties(text, parsedPropertiesCallback) {
+ var dictionary = {};
+ var reBlank = /^\s*|\s*$/;
+ var reComment = /^\s*#|^\s*$/;
+ var reSection = /^\s*\[(.*)\]\s*$/;
+ var reImport = /^\s*@import\s+url\((.*)\)\s*$/i;
+ var reSplit = /^([^=\s]*)\s*=\s*(.+)$/;
+
+ function parseRawLines(rawText, extendedSyntax, parsedRawLinesCallback) {
+ var entries = rawText.replace(reBlank, '').split(/[\r\n]+/);
+ var currentLang = '*';
+ var genericLang = lang.split('-', 1)[0];
+ var skipLang = false;
+ var match = '';
+
+ function nextEntry() {
+ while (true) {
+ if (!entries.length) {
+ parsedRawLinesCallback();
+ return;
+ }
+
+ var line = entries.shift();
+ if (reComment.test(line)) continue;
+
+ if (extendedSyntax) {
+ match = reSection.exec(line);
+
+ if (match) {
+ currentLang = match[1].toLowerCase();
+ skipLang = currentLang !== '*' && currentLang !== lang && currentLang !== genericLang;
+ continue;
+ } else if (skipLang) {
+ continue;
+ }
+
+ match = reImport.exec(line);
+
+ if (match) {
+ loadImport(baseURL + match[1], nextEntry);
+ return;
+ }
+ }
+
+ var tmp = line.match(reSplit);
+
+ if (tmp && tmp.length == 3) {
+ dictionary[tmp[1]] = evalString(tmp[2]);
+ }
+ }
+ }
+
+ nextEntry();
+ }
+
+ function loadImport(url, callback) {
+ xhrLoadText(url, function (content) {
+ parseRawLines(content, false, callback);
+ }, function () {
+ console.warn(url + ' not found.');
+ callback();
+ });
+ }
+
+ parseRawLines(text, true, function () {
+ parsedPropertiesCallback(dictionary);
+ });
+ }
+
+ xhrLoadText(href, function (response) {
+ gTextData += response;
+ parseProperties(response, function (data) {
+ for (var key in data) {
+ var id,
+ prop,
+ index = key.lastIndexOf('.');
+
+ if (index > 0) {
+ id = key.substring(0, index);
+ prop = key.substring(index + 1);
+ } else {
+ id = key;
+ prop = gTextProp;
+ }
+
+ if (!gL10nData[id]) {
+ gL10nData[id] = {};
+ }
+
+ gL10nData[id][prop] = data[key];
+ }
+
+ if (successCallback) {
+ successCallback();
+ }
+ });
+ }, failureCallback);
+ }
+
+ function loadLocale(lang, callback) {
+ if (lang) {
+ lang = lang.toLowerCase();
+ }
+
+ callback = callback || function _callback() {};
+
+ clear();
+ gLanguage = lang;
+ var langLinks = getL10nResourceLinks();
+ var langCount = langLinks.length;
+
+ if (langCount === 0) {
+ var dict = getL10nDictionary();
+
+ if (dict && dict.locales && dict.default_locale) {
+ console.log('using the embedded JSON directory, early way out');
+ gL10nData = dict.locales[lang];
+
+ if (!gL10nData) {
+ var defaultLocale = dict.default_locale.toLowerCase();
+
+ for (var anyCaseLang in dict.locales) {
+ anyCaseLang = anyCaseLang.toLowerCase();
+
+ if (anyCaseLang === lang) {
+ gL10nData = dict.locales[lang];
+ break;
+ } else if (anyCaseLang === defaultLocale) {
+ gL10nData = dict.locales[defaultLocale];
+ }
+ }
+ }
+
+ callback();
+ } else {
+ console.log('no resource to load, early way out');
+ }
+
+ gReadyState = 'complete';
+ return;
+ }
+
+ var onResourceLoaded = null;
+ var gResourceCount = 0;
+
+ onResourceLoaded = function () {
+ gResourceCount++;
+
+ if (gResourceCount >= langCount) {
+ callback();
+ gReadyState = 'complete';
+ }
+ };
+
+ function L10nResourceLink(link) {
+ var href = link.href;
+
+ this.load = function (lang, callback) {
+ parseResource(href, lang, callback, function () {
+ console.warn(href + ' not found.');
+ console.warn('"' + lang + '" resource not found');
+ gLanguage = '';
+ callback();
+ });
+ };
+ }
+
+ for (var i = 0; i < langCount; i++) {
+ var resource = new L10nResourceLink(langLinks[i]);
+ resource.load(lang, onResourceLoaded);
+ }
+ }
+
+ function clear() {
+ gL10nData = {};
+ gTextData = '';
+ gLanguage = '';
+ }
+
+ function getPluralRules(lang) {
+ var locales2rules = {
+ 'af': 3,
+ 'ak': 4,
+ 'am': 4,
+ 'ar': 1,
+ 'asa': 3,
+ 'az': 0,
+ 'be': 11,
+ 'bem': 3,
+ 'bez': 3,
+ 'bg': 3,
+ 'bh': 4,
+ 'bm': 0,
+ 'bn': 3,
+ 'bo': 0,
+ 'br': 20,
+ 'brx': 3,
+ 'bs': 11,
+ 'ca': 3,
+ 'cgg': 3,
+ 'chr': 3,
+ 'cs': 12,
+ 'cy': 17,
+ 'da': 3,
+ 'de': 3,
+ 'dv': 3,
+ 'dz': 0,
+ 'ee': 3,
+ 'el': 3,
+ 'en': 3,
+ 'eo': 3,
+ 'es': 3,
+ 'et': 3,
+ 'eu': 3,
+ 'fa': 0,
+ 'ff': 5,
+ 'fi': 3,
+ 'fil': 4,
+ 'fo': 3,
+ 'fr': 5,
+ 'fur': 3,
+ 'fy': 3,
+ 'ga': 8,
+ 'gd': 24,
+ 'gl': 3,
+ 'gsw': 3,
+ 'gu': 3,
+ 'guw': 4,
+ 'gv': 23,
+ 'ha': 3,
+ 'haw': 3,
+ 'he': 2,
+ 'hi': 4,
+ 'hr': 11,
+ 'hu': 0,
+ 'id': 0,
+ 'ig': 0,
+ 'ii': 0,
+ 'is': 3,
+ 'it': 3,
+ 'iu': 7,
+ 'ja': 0,
+ 'jmc': 3,
+ 'jv': 0,
+ 'ka': 0,
+ 'kab': 5,
+ 'kaj': 3,
+ 'kcg': 3,
+ 'kde': 0,
+ 'kea': 0,
+ 'kk': 3,
+ 'kl': 3,
+ 'km': 0,
+ 'kn': 0,
+ 'ko': 0,
+ 'ksb': 3,
+ 'ksh': 21,
+ 'ku': 3,
+ 'kw': 7,
+ 'lag': 18,
+ 'lb': 3,
+ 'lg': 3,
+ 'ln': 4,
+ 'lo': 0,
+ 'lt': 10,
+ 'lv': 6,
+ 'mas': 3,
+ 'mg': 4,
+ 'mk': 16,
+ 'ml': 3,
+ 'mn': 3,
+ 'mo': 9,
+ 'mr': 3,
+ 'ms': 0,
+ 'mt': 15,
+ 'my': 0,
+ 'nah': 3,
+ 'naq': 7,
+ 'nb': 3,
+ 'nd': 3,
+ 'ne': 3,
+ 'nl': 3,
+ 'nn': 3,
+ 'no': 3,
+ 'nr': 3,
+ 'nso': 4,
+ 'ny': 3,
+ 'nyn': 3,
+ 'om': 3,
+ 'or': 3,
+ 'pa': 3,
+ 'pap': 3,
+ 'pl': 13,
+ 'ps': 3,
+ 'pt': 3,
+ 'rm': 3,
+ 'ro': 9,
+ 'rof': 3,
+ 'ru': 11,
+ 'rwk': 3,
+ 'sah': 0,
+ 'saq': 3,
+ 'se': 7,
+ 'seh': 3,
+ 'ses': 0,
+ 'sg': 0,
+ 'sh': 11,
+ 'shi': 19,
+ 'sk': 12,
+ 'sl': 14,
+ 'sma': 7,
+ 'smi': 7,
+ 'smj': 7,
+ 'smn': 7,
+ 'sms': 7,
+ 'sn': 3,
+ 'so': 3,
+ 'sq': 3,
+ 'sr': 11,
+ 'ss': 3,
+ 'ssy': 3,
+ 'st': 3,
+ 'sv': 3,
+ 'sw': 3,
+ 'syr': 3,
+ 'ta': 3,
+ 'te': 3,
+ 'teo': 3,
+ 'th': 0,
+ 'ti': 4,
+ 'tig': 3,
+ 'tk': 3,
+ 'tl': 4,
+ 'tn': 3,
+ 'to': 0,
+ 'tr': 0,
+ 'ts': 3,
+ 'tzm': 22,
+ 'uk': 11,
+ 'ur': 3,
+ 've': 3,
+ 'vi': 0,
+ 'vun': 3,
+ 'wa': 4,
+ 'wae': 3,
+ 'wo': 0,
+ 'xh': 3,
+ 'xog': 3,
+ 'yo': 0,
+ 'zh': 0,
+ 'zu': 3
+ };
+
+ function isIn(n, list) {
+ return list.indexOf(n) !== -1;
+ }
+
+ function isBetween(n, start, end) {
+ return start <= n && n <= end;
+ }
+
+ var pluralRules = {
+ '0': function (n) {
+ return 'other';
+ },
+ '1': function (n) {
+ if (isBetween(n % 100, 3, 10)) return 'few';
+ if (n === 0) return 'zero';
+ if (isBetween(n % 100, 11, 99)) return 'many';
+ if (n == 2) return 'two';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '2': function (n) {
+ if (n !== 0 && n % 10 === 0) return 'many';
+ if (n == 2) return 'two';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '3': function (n) {
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '4': function (n) {
+ if (isBetween(n, 0, 1)) return 'one';
+ return 'other';
+ },
+ '5': function (n) {
+ if (isBetween(n, 0, 2) && n != 2) return 'one';
+ return 'other';
+ },
+ '6': function (n) {
+ if (n === 0) return 'zero';
+ if (n % 10 == 1 && n % 100 != 11) return 'one';
+ return 'other';
+ },
+ '7': function (n) {
+ if (n == 2) return 'two';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '8': function (n) {
+ if (isBetween(n, 3, 6)) return 'few';
+ if (isBetween(n, 7, 10)) return 'many';
+ if (n == 2) return 'two';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '9': function (n) {
+ if (n === 0 || n != 1 && isBetween(n % 100, 1, 19)) return 'few';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '10': function (n) {
+ if (isBetween(n % 10, 2, 9) && !isBetween(n % 100, 11, 19)) return 'few';
+ if (n % 10 == 1 && !isBetween(n % 100, 11, 19)) return 'one';
+ return 'other';
+ },
+ '11': function (n) {
+ if (isBetween(n % 10, 2, 4) && !isBetween(n % 100, 12, 14)) return 'few';
+ if (n % 10 === 0 || isBetween(n % 10, 5, 9) || isBetween(n % 100, 11, 14)) return 'many';
+ if (n % 10 == 1 && n % 100 != 11) return 'one';
+ return 'other';
+ },
+ '12': function (n) {
+ if (isBetween(n, 2, 4)) return 'few';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '13': function (n) {
+ if (isBetween(n % 10, 2, 4) && !isBetween(n % 100, 12, 14)) return 'few';
+ if (n != 1 && isBetween(n % 10, 0, 1) || isBetween(n % 10, 5, 9) || isBetween(n % 100, 12, 14)) return 'many';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '14': function (n) {
+ if (isBetween(n % 100, 3, 4)) return 'few';
+ if (n % 100 == 2) return 'two';
+ if (n % 100 == 1) return 'one';
+ return 'other';
+ },
+ '15': function (n) {
+ if (n === 0 || isBetween(n % 100, 2, 10)) return 'few';
+ if (isBetween(n % 100, 11, 19)) return 'many';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '16': function (n) {
+ if (n % 10 == 1 && n != 11) return 'one';
+ return 'other';
+ },
+ '17': function (n) {
+ if (n == 3) return 'few';
+ if (n === 0) return 'zero';
+ if (n == 6) return 'many';
+ if (n == 2) return 'two';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '18': function (n) {
+ if (n === 0) return 'zero';
+ if (isBetween(n, 0, 2) && n !== 0 && n != 2) return 'one';
+ return 'other';
+ },
+ '19': function (n) {
+ if (isBetween(n, 2, 10)) return 'few';
+ if (isBetween(n, 0, 1)) return 'one';
+ return 'other';
+ },
+ '20': function (n) {
+ if ((isBetween(n % 10, 3, 4) || n % 10 == 9) && !(isBetween(n % 100, 10, 19) || isBetween(n % 100, 70, 79) || isBetween(n % 100, 90, 99))) return 'few';
+ if (n % 1000000 === 0 && n !== 0) return 'many';
+ if (n % 10 == 2 && !isIn(n % 100, [12, 72, 92])) return 'two';
+ if (n % 10 == 1 && !isIn(n % 100, [11, 71, 91])) return 'one';
+ return 'other';
+ },
+ '21': function (n) {
+ if (n === 0) return 'zero';
+ if (n == 1) return 'one';
+ return 'other';
+ },
+ '22': function (n) {
+ if (isBetween(n, 0, 1) || isBetween(n, 11, 99)) return 'one';
+ return 'other';
+ },
+ '23': function (n) {
+ if (isBetween(n % 10, 1, 2) || n % 20 === 0) return 'one';
+ return 'other';
+ },
+ '24': function (n) {
+ if (isBetween(n, 3, 10) || isBetween(n, 13, 19)) return 'few';
+ if (isIn(n, [2, 12])) return 'two';
+ if (isIn(n, [1, 11])) return 'one';
+ return 'other';
+ }
+ };
+ var index = locales2rules[lang.replace(/-.*$/, '')];
+
+ if (!(index in pluralRules)) {
+ console.warn('plural form unknown for [' + lang + ']');
+ return function () {
+ return 'other';
+ };
+ }
+
+ return pluralRules[index];
+ }
+
+ gMacros.plural = function (str, param, key, prop) {
+ var n = parseFloat(param);
+ if (isNaN(n)) return str;
+ if (prop != gTextProp) return str;
+
+ if (!gMacros._pluralRules) {
+ gMacros._pluralRules = getPluralRules(gLanguage);
+ }
+
+ var index = '[' + gMacros._pluralRules(n) + ']';
+
+ if (n === 0 && key + '[zero]' in gL10nData) {
+ str = gL10nData[key + '[zero]'][prop];
+ } else if (n == 1 && key + '[one]' in gL10nData) {
+ str = gL10nData[key + '[one]'][prop];
+ } else if (n == 2 && key + '[two]' in gL10nData) {
+ str = gL10nData[key + '[two]'][prop];
+ } else if (key + index in gL10nData) {
+ str = gL10nData[key + index][prop];
+ } else if (key + '[other]' in gL10nData) {
+ str = gL10nData[key + '[other]'][prop];
+ }
+
+ return str;
+ };
+
+ function getL10nData(key, args, fallback) {
+ var data = gL10nData[key];
+
+ if (!data) {
+ console.warn('#' + key + ' is undefined.');
+
+ if (!fallback) {
+ return null;
+ }
+
+ data = fallback;
+ }
+
+ var rv = {};
+
+ for (var prop in data) {
+ var str = data[prop];
+ str = substIndexes(str, args, key, prop);
+ str = substArguments(str, args, key);
+ rv[prop] = str;
+ }
+
+ return rv;
+ }
+
+ function substIndexes(str, args, key, prop) {
+ var reIndex = /\{\[\s*([a-zA-Z]+)\(([a-zA-Z]+)\)\s*\]\}/;
+ var reMatch = reIndex.exec(str);
+ if (!reMatch || !reMatch.length) return str;
+ var macroName = reMatch[1];
+ var paramName = reMatch[2];
+ var param;
+
+ if (args && paramName in args) {
+ param = args[paramName];
+ } else if (paramName in gL10nData) {
+ param = gL10nData[paramName];
+ }
+
+ if (macroName in gMacros) {
+ var macro = gMacros[macroName];
+ str = macro(str, param, key, prop);
+ }
+
+ return str;
+ }
+
+ function substArguments(str, args, key) {
+ var reArgs = /\{\{\s*(.+?)\s*\}\}/g;
+ return str.replace(reArgs, function (matched_text, arg) {
+ if (args && arg in args) {
+ return args[arg];
+ }
+
+ if (arg in gL10nData) {
+ return gL10nData[arg];
+ }
+
+ console.log('argument {{' + arg + '}} for #' + key + ' is undefined.');
+ return matched_text;
+ });
+ }
+
+ function translateElement(element) {
+ var l10n = getL10nAttributes(element);
+ if (!l10n.id) return;
+ var data = getL10nData(l10n.id, l10n.args);
+
+ if (!data) {
+ console.warn('#' + l10n.id + ' is undefined.');
+ return;
+ }
+
+ if (data[gTextProp]) {
+ if (getChildElementCount(element) === 0) {
+ element[gTextProp] = data[gTextProp];
+ } else {
+ var children = element.childNodes;
+ var found = false;
+
+ for (var i = 0, l = children.length; i < l; i++) {
+ if (children[i].nodeType === 3 && /\S/.test(children[i].nodeValue)) {
+ if (found) {
+ children[i].nodeValue = '';
+ } else {
+ children[i].nodeValue = data[gTextProp];
+ found = true;
+ }
+ }
+ }
+
+ if (!found) {
+ var textNode = document.createTextNode(data[gTextProp]);
+ element.insertBefore(textNode, element.firstChild);
+ }
+ }
+
+ delete data[gTextProp];
+ }
+
+ for (var k in data) {
+ element[k] = data[k];
+ }
+ }
+
+ function getChildElementCount(element) {
+ if (element.children) {
+ return element.children.length;
+ }
+
+ if (typeof element.childElementCount !== 'undefined') {
+ return element.childElementCount;
+ }
+
+ var count = 0;
+
+ for (var i = 0; i < element.childNodes.length; i++) {
+ count += element.nodeType === 1 ? 1 : 0;
+ }
+
+ return count;
+ }
+
+ function translateFragment(element) {
+ element = element || document.documentElement;
+ var children = getTranslatableChildren(element);
+ var elementCount = children.length;
+
+ for (var i = 0; i < elementCount; i++) {
+ translateElement(children[i]);
+ }
+
+ translateElement(element);
+ }
+
+ return {
+ get: function (key, args, fallbackString) {
+ var index = key.lastIndexOf('.');
+ var prop = gTextProp;
+
+ if (index > 0) {
+ prop = key.substring(index + 1);
+ key = key.substring(0, index);
+ }
+
+ var fallback;
+
+ if (fallbackString) {
+ fallback = {};
+ fallback[prop] = fallbackString;
+ }
+
+ var data = getL10nData(key, args, fallback);
+
+ if (data && prop in data) {
+ return data[prop];
+ }
+
+ return '{{' + key + '}}';
+ },
+ getData: function () {
+ return gL10nData;
+ },
+ getText: function () {
+ return gTextData;
+ },
+ getLanguage: function () {
+ return gLanguage;
+ },
+ setLanguage: function (lang, callback) {
+ loadLocale(lang, function () {
+ if (callback) callback();
+ });
+ },
+ getDirection: function () {
+ var rtlList = ['ar', 'he', 'fa', 'ps', 'ur'];
+ var shortCode = gLanguage.split('-', 1)[0];
+ return rtlList.indexOf(shortCode) >= 0 ? 'rtl' : 'ltr';
+ },
+ translate: translateFragment,
+ getReadyState: function () {
+ return gReadyState;
+ },
+ ready: function (callback) {
+ if (!callback) {
+ return;
+ } else if (gReadyState == 'complete' || gReadyState == 'interactive') {
+ window.setTimeout(function () {
+ callback();
+ });
+ } else if (document.addEventListener) {
+ document.addEventListener('localized', function once() {
+ document.removeEventListener('localized', once);
+ callback();
+ });
+ }
+ }
+ };
+}(window, document);
+
+/***/ }),
+/* 40 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.GenericScripting = void 0;
+
+var _pdfjsLib = __webpack_require__(5);
+
+class GenericScripting {
+ constructor(sandboxBundleSrc) {
+ this._ready = (0, _pdfjsLib.loadScript)(sandboxBundleSrc, true).then(() => {
+ return window.pdfjsSandbox.QuickJSSandbox();
+ });
+ }
+
+ async createSandbox(data) {
+ const sandbox = await this._ready;
+ sandbox.create(data);
+ }
+
+ async dispatchEventInSandbox(event) {
+ const sandbox = await this._ready;
+ sandbox.dispatchEvent(event);
+ }
+
+ async destroySandbox() {
+ const sandbox = await this._ready;
+ sandbox.nukeSandbox();
+ }
+
+}
+
+exports.GenericScripting = GenericScripting;
+
+/***/ }),
+/* 41 */
+/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFPrintService = PDFPrintService;
+
+var _ui_utils = __webpack_require__(4);
+
+var _app = __webpack_require__(3);
+
+var _viewer_compatibility = __webpack_require__(2);
+
+let activeService = null;
+let overlayManager = null;
+
+function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size, printResolution, optionalContentConfigPromise) {
+ const scratchCanvas = activeService.scratchCanvas;
+ const PRINT_UNITS = printResolution / 72.0;
+ scratchCanvas.width = Math.floor(size.width * PRINT_UNITS);
+ scratchCanvas.height = Math.floor(size.height * PRINT_UNITS);
+ const width = Math.floor(size.width * _ui_utils.CSS_UNITS) + "px";
+ const height = Math.floor(size.height * _ui_utils.CSS_UNITS) + "px";
+ const ctx = scratchCanvas.getContext("2d");
+ ctx.save();
+ ctx.fillStyle = "rgb(255, 255, 255)";
+ ctx.fillRect(0, 0, scratchCanvas.width, scratchCanvas.height);
+ ctx.restore();
+ return pdfDocument.getPage(pageNumber).then(function (pdfPage) {
+ const renderContext = {
+ canvasContext: ctx,
+ transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0],
+ viewport: pdfPage.getViewport({
+ scale: 1,
+ rotation: size.rotation
+ }),
+ intent: "print",
+ annotationStorage: pdfDocument.annotationStorage,
+ optionalContentConfigPromise
+ };
+ return pdfPage.render(renderContext).promise;
+ }).then(function () {
+ return {
+ width,
+ height
+ };
+ });
+}
+
+function PDFPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise = null, l10n) {
+ this.pdfDocument = pdfDocument;
+ this.pagesOverview = pagesOverview;
+ this.printContainer = printContainer;
+ this._printResolution = printResolution || 150;
+ this._optionalContentConfigPromise = optionalContentConfigPromise || pdfDocument.getOptionalContentConfig();
+ this.l10n = l10n || _ui_utils.NullL10n;
+ this.currentPage = -1;
+ this.scratchCanvas = document.createElement("canvas");
+}
+
+PDFPrintService.prototype = {
+ layout() {
+ this.throwIfInactive();
+ const body = document.querySelector("body");
+ body.setAttribute("data-pdfjsprinting", true);
+ const hasEqualPageSizes = this.pagesOverview.every(function (size) {
+ return size.width === this.pagesOverview[0].width && size.height === this.pagesOverview[0].height;
+ }, this);
+
+ if (!hasEqualPageSizes) {
+ console.warn("Not all pages have the same size. The printed " + "result may be incorrect!");
+ }
+
+ this.pageStyleSheet = document.createElement("style");
+ const pageSize = this.pagesOverview[0];
+ this.pageStyleSheet.textContent = "@supports ((size:A4) and (size:1pt 1pt)) {" + "@page { size: " + pageSize.width + "pt " + pageSize.height + "pt;}" + "}";
+ body.appendChild(this.pageStyleSheet);
+ },
+
+ destroy() {
+ if (activeService !== this) {
+ return;
+ }
+
+ this.printContainer.textContent = "";
+ const body = document.querySelector("body");
+ body.removeAttribute("data-pdfjsprinting");
+
+ if (this.pageStyleSheet) {
+ this.pageStyleSheet.remove();
+ this.pageStyleSheet = null;
+ }
+
+ this.scratchCanvas.width = this.scratchCanvas.height = 0;
+ this.scratchCanvas = null;
+ activeService = null;
+ ensureOverlay().then(function () {
+ if (overlayManager.active !== "printServiceOverlay") {
+ return;
+ }
+
+ overlayManager.close("printServiceOverlay");
+ });
+ },
+
+ renderPages() {
+ const pageCount = this.pagesOverview.length;
+
+ const renderNextPage = (resolve, reject) => {
+ this.throwIfInactive();
+
+ if (++this.currentPage >= pageCount) {
+ renderProgress(pageCount, pageCount, this.l10n);
+ resolve();
+ return;
+ }
+
+ const index = this.currentPage;
+ renderProgress(index, pageCount, this.l10n);
+ renderPage(this, this.pdfDocument, index + 1, this.pagesOverview[index], this._printResolution, this._optionalContentConfigPromise).then(this.useRenderedPage.bind(this)).then(function () {
+ renderNextPage(resolve, reject);
+ }, reject);
+ };
+
+ return new Promise(renderNextPage);
+ },
+
+ useRenderedPage(printItem) {
+ this.throwIfInactive();
+ const img = document.createElement("img");
+ img.style.width = printItem.width;
+ img.style.height = printItem.height;
+ const scratchCanvas = this.scratchCanvas;
+
+ if ("toBlob" in scratchCanvas && !_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) {
+ scratchCanvas.toBlob(function (blob) {
+ img.src = URL.createObjectURL(blob);
+ });
+ } else {
+ img.src = scratchCanvas.toDataURL();
+ }
+
+ const wrapper = document.createElement("div");
+ wrapper.appendChild(img);
+ this.printContainer.appendChild(wrapper);
+ return new Promise(function (resolve, reject) {
+ img.onload = resolve;
+ img.onerror = reject;
+ });
+ },
+
+ performPrint() {
+ this.throwIfInactive();
+ return new Promise(resolve => {
+ setTimeout(() => {
+ if (!this.active) {
+ resolve();
+ return;
+ }
+
+ print.call(window);
+ setTimeout(resolve, 20);
+ }, 0);
+ });
+ },
+
+ get active() {
+ return this === activeService;
+ },
+
+ throwIfInactive() {
+ if (!this.active) {
+ throw new Error("This print request was cancelled or completed.");
+ }
+ }
+
+};
+const print = window.print;
+
+window.print = function () {
+ if (activeService) {
+ console.warn("Ignored window.print() because of a pending print job.");
+ return;
+ }
+
+ ensureOverlay().then(function () {
+ if (activeService) {
+ overlayManager.open("printServiceOverlay");
+ }
+ });
+
+ try {
+ dispatchEvent("beforeprint");
+ } finally {
+ if (!activeService) {
+ console.error("Expected print service to be initialized.");
+ ensureOverlay().then(function () {
+ if (overlayManager.active === "printServiceOverlay") {
+ overlayManager.close("printServiceOverlay");
+ }
+ });
+ return;
+ }
+
+ const activeServiceOnEntry = activeService;
+ activeService.renderPages().then(function () {
+ return activeServiceOnEntry.performPrint();
+ }).catch(function () {}).then(function () {
+ if (activeServiceOnEntry.active) {
+ abort();
+ }
+ });
+ }
+};
+
+function dispatchEvent(eventType) {
+ const event = document.createEvent("CustomEvent");
+ event.initCustomEvent(eventType, false, false, "custom");
+ window.dispatchEvent(event);
+}
+
+function abort() {
+ if (activeService) {
+ activeService.destroy();
+ dispatchEvent("afterprint");
+ }
+}
+
+function renderProgress(index, total, l10n) {
+ const progressContainer = document.getElementById("printServiceOverlay");
+ const progress = Math.round(100 * index / total);
+ const progressBar = progressContainer.querySelector("progress");
+ const progressPerc = progressContainer.querySelector(".relative-progress");
+ progressBar.value = progress;
+ l10n.get("print_progress_percent", {
+ progress
+ }, progress + "%").then(msg => {
+ progressPerc.textContent = msg;
+ });
+}
+
+window.addEventListener("keydown", function (event) {
+ if (event.keyCode === 80 && (event.ctrlKey || event.metaKey) && !event.altKey && (!event.shiftKey || window.chrome || window.opera)) {
+ window.print();
+ event.preventDefault();
+
+ if (event.stopImmediatePropagation) {
+ event.stopImmediatePropagation();
+ } else {
+ event.stopPropagation();
+ }
+ }
+}, true);
+
+if ("onbeforeprint" in window) {
+ const stopPropagationIfNeeded = function (event) {
+ if (event.detail !== "custom" && event.stopImmediatePropagation) {
+ event.stopImmediatePropagation();
+ }
+ };
+
+ window.addEventListener("beforeprint", stopPropagationIfNeeded);
+ window.addEventListener("afterprint", stopPropagationIfNeeded);
+}
+
+let overlayPromise;
+
+function ensureOverlay() {
+ if (!overlayPromise) {
+ overlayManager = _app.PDFViewerApplication.overlayManager;
+
+ if (!overlayManager) {
+ throw new Error("The overlay manager has not yet been initialized.");
+ }
+
+ overlayPromise = overlayManager.register("printServiceOverlay", document.getElementById("printServiceOverlay"), abort, true);
+ document.getElementById("printCancel").onclick = abort;
+ }
+
+ return overlayPromise;
+}
+
+_app.PDFPrintServiceFactory.instance = {
+ supportsPrinting: true,
+
+ createPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, l10n) {
+ if (activeService) {
+ throw new Error("The print service is created and active.");
+ }
+
+ activeService = new PDFPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, l10n);
+ return activeService;
+ }
+
+};
+
+/***/ })
+/******/ ]);
+/************************************************************************/
+/******/ // The module cache
+/******/ var __webpack_module_cache__ = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/ // Check if module is in cache
+/******/ if(__webpack_module_cache__[moduleId]) {
+/******/ return __webpack_module_cache__[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = __webpack_module_cache__[moduleId] = {
+/******/ // no module.id needed
+/******/ // no module.loaded needed
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/************************************************************************/
+/******/ // startup
+/******/ // Load entry module
+/******/ __webpack_require__(0);
+/******/ // This entry module used 'exports' so it can't be inlined
+/******/ })()
+;
+//# sourceMappingURL=viewer.js.map
\ No newline at end of file
diff --git a/thirdparty/pdfjs/web/viewer.js.map b/thirdparty/pdfjs/web/viewer.js.map
new file mode 100644
index 0000000..dff5d4d
--- /dev/null
+++ b/thirdparty/pdfjs/web/viewer.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack://pdf.js/web/viewer.js","webpack://pdf.js/web/app_options.js","webpack://pdf.js/web/viewer_compatibility.js","webpack://pdf.js/web/app.js","webpack://pdf.js/web/ui_utils.js","webpack://pdf.js/web/pdfjs.js","webpack://pdf.js/web/pdf_cursor_tools.js","webpack://pdf.js/web/grab_to_pan.js","webpack://pdf.js/web/pdf_rendering_queue.js","webpack://pdf.js/web/overlay_manager.js","webpack://pdf.js/web/password_prompt.js","webpack://pdf.js/web/pdf_attachment_viewer.js","webpack://pdf.js/web/base_tree_viewer.js","webpack://pdf.js/web/pdf_document_properties.js","webpack://pdf.js/web/pdf_find_bar.js","webpack://pdf.js/web/pdf_find_controller.js","webpack://pdf.js/web/pdf_find_utils.js","webpack://pdf.js/web/pdf_history.js","webpack://pdf.js/web/pdf_layer_viewer.js","webpack://pdf.js/web/pdf_link_service.js","webpack://pdf.js/web/pdf_outline_viewer.js","webpack://pdf.js/web/pdf_presentation_mode.js","webpack://pdf.js/web/pdf_sidebar.js","webpack://pdf.js/web/pdf_sidebar_resizer.js","webpack://pdf.js/web/pdf_thumbnail_viewer.js","webpack://pdf.js/web/pdf_thumbnail_view.js","webpack://pdf.js/web/pdf_viewer.js","webpack://pdf.js/web/base_viewer.js","webpack://pdf.js/web/annotation_layer_builder.js","webpack://pdf.js/web/pdf_page_view.js","webpack://pdf.js/web/text_layer_builder.js","webpack://pdf.js/web/secondary_toolbar.js","webpack://pdf.js/web/pdf_single_page_viewer.js","webpack://pdf.js/web/toolbar.js","webpack://pdf.js/web/view_history.js","webpack://pdf.js/web/genericcom.js","webpack://pdf.js/web/preferences.js","webpack://pdf.js/web/download_manager.js","webpack://pdf.js/web/genericl10n.js","webpack://pdf.js/external/webL10n/l10n.js","webpack://pdf.js/web/generic_scripting.js","webpack://pdf.js/web/pdf_print_service.js","webpack://pdf.js/webpack/bootstrap","webpack://pdf.js/webpack/startup"],"names":["pdfjsVersion","pdfjsBuild","window","require","appContainer","document","mainContainer","viewerContainer","eventBus","toolbar","container","numPages","pageNumber","scaleSelectContainer","scaleSelect","customScaleOption","previous","next","zoomIn","zoomOut","viewFind","openFile","print","presentationModeButton","download","viewBookmark","secondaryToolbar","toggleButton","toolbarButtonContainer","openFileButton","printButton","downloadButton","viewBookmarkButton","firstPageButton","lastPageButton","pageRotateCwButton","pageRotateCcwButton","cursorSelectToolButton","cursorHandToolButton","scrollVerticalButton","scrollHorizontalButton","scrollWrappedButton","spreadNoneButton","spreadOddButton","spreadEvenButton","documentPropertiesButton","fullscreen","contextFirstPage","contextLastPage","contextPageRotateCw","contextPageRotateCcw","sidebar","outerContainer","thumbnailButton","outlineButton","attachmentsButton","layersButton","thumbnailView","outlineView","attachmentsView","layersView","outlineOptionsContainer","currentOutlineItemButton","sidebarResizer","resizer","findBar","bar","findField","highlightAllCheckbox","caseSensitiveCheckbox","entireWordCheckbox","findMsg","findResultsCount","findPreviousButton","findNextButton","passwordOverlay","overlayName","label","input","submitButton","cancelButton","documentProperties","closeButton","fields","fileName","fileSize","title","author","subject","keywords","creationDate","modificationDate","creator","producer","version","pageCount","pageSize","linearized","errorWrapper","errorMessage","errorMoreInfo","moreInfoButton","lessInfoButton","printContainer","openFileInputName","debuggerScriptPath","config","getViewerConfiguration","event","source","parent","console","PDFViewerApplication","webViewerLoad","OptionKind","VIEWER","API","WORKER","PREFERENCE","defaultOptions","cursorToolOnLoad","value","kind","defaultUrl","defaultZoomValue","disableHistory","disablePageLabels","enablePermissions","enablePrintAutoRotate","enableScripting","enableWebGL","externalLinkRel","externalLinkTarget","historyUpdateUrl","ignoreDestinationZoom","imageResourcesPath","maxCanvasPixels","compatibility","viewerCompatibilityParams","pdfBugEnabled","printResolution","renderer","renderInteractiveForms","sidebarViewOnLoad","scrollModeOnLoad","spreadModeOnLoad","textLayerMode","useOnlyCssZoom","viewerCssTheme","viewOnLoad","cMapPacked","cMapUrl","disableAutoFetch","disableFontFace","disableRange","disableStream","docBaseUrl","fontExtraProperties","isEvalSupported","maxImageSize","pdfBug","verbosity","workerPort","workerSrc","navigator","userOptions","Object","constructor","userOption","defaultOption","options","valueType","Number","compatibilityParams","userAgent","platform","maxTouchPoints","isAndroid","isIOS","isIOSChrome","DEFAULT_SCALE_DELTA","DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT","FORCE_PAGES_LOADED_TIMEOUT","WHEEL_ZOOM_DISABLED_TIMEOUT","ENABLE_PERMISSIONS_CLASS","ViewOnLoad","UNKNOWN","PREVIOUS","INITIAL","ViewerCssTheme","AUTOMATIC","LIGHT","DARK","KNOWN_VERSIONS","KNOWN_GENERATORS","shadow","ctrlKey","metaKey","initialBookmark","_initializedCapability","fellback","appConfig","pdfDocument","pdfLoadingTask","printService","pdfViewer","pdfThumbnailViewer","pdfRenderingQueue","pdfPresentationMode","pdfDocumentProperties","pdfLinkService","pdfHistory","pdfSidebar","pdfSidebarResizer","pdfOutlineViewer","pdfAttachmentViewer","pdfLayerViewer","pdfCursorTools","store","downloadManager","overlayManager","preferences","l10n","isInitialViewSet","downloadComplete","isViewerEmbedded","url","baseUrl","externalServices","_boundEvents","documentInfo","metadata","_contentDispositionFilename","_contentLength","triggerDelayedFallback","_saveInProgress","_wheelUnusedTicks","_idleCallbacks","_scriptingInstance","_mouseState","AppOptions","LinkTarget","reason","hash","hashParams","parseQueryString","waitOn","loadFakeWorker","TextLayerMode","viewer","enabled","loadAndEnablePDFBug","locale","dir","_forceCssTheme","cssTheme","styleSheet","cssRules","i","ii","rule","darkRules","isInAutomation","findController","linkService","renderingQueue","mouseState","contextMenuItems","elements","run","newScale","Math","zoomReset","PDFPrintServiceFactory","doc","support","initPassiveLoading","setTitleUsingUrl","getPDFFileNameFromURL","decodeURIComponent","getFilenameFromUrl","setTitle","_cancelIdleCallbacks","scripting","internalEvents","domEvents","promises","webViewerResetPermissions","PDFBug","Promise","workerParameters","GlobalWorkerOptions","parameters","file","apiParameters","key","args","loadingTask","getDocument","loaded","exception","message","loadingErrorMessage","msg","sourceEventType","filename","downloadByUrl","blob","type","id","name","data","downloadOrSave","_delayedFallback","fallback","error","moreInfoText","build","moreInfo","stack","line","errorWrapperConfig","parts","progress","percent","level","isNaN","clearTimeout","load","firstPagePromise","pageLayoutPromise","pageModePromise","openActionPromise","baseDocumentUrl","storedPromise","page","zoom","scrollLeft","scrollTop","rotation","sidebarView","SidebarView","scrollMode","ScrollMode","spreadMode","SpreadMode","pdfPage","fingerprint","initialDest","openAction","stored","parseInt","pageMode","apiPageModeToSidebarView","pageLayout","apiPageLayoutToSpreadMode","resolve","setTimeout","pagesPromise","onePageRendered","outline","attachments","optionalContentConfig","callback","timeout","sandboxBundleSrc","ready","evt","once","updateFromSandbox","element","visitedPages","pageOpen","actions","pageClose","actionsPromise","dispatchEventInSandbox","mouseDown","mouseUp","appInfo","language","docInfo","baseURL","filesize","authors","URL","markInfo","tagged","triggerAutoPrint","javaScript","js","UNSUPPORTED_FEATURES","AutoPrintRegExp","info","infoTitle","pdfTitle","metadataTitle","contentDispositionFilename","versionId","generatorId","generator","formType","labels","numLabels","_initializePdfHistory","resetHistory","updateUrl","JSON","explicitDest","permissions","PermissionFlag","_initializeAnnotationStorageCallbacks","annotationStorage","setInitialView","setRotation","angle","isValidRotation","setViewerModes","isValidScrollMode","isValidSpreadMode","cleanup","RendererType","forceRendering","beforePrint","printMessage","notReadyMessage","pagesOverview","optionalContentConfigPromise","afterPrint","rotatePages","newRotation","requestPresentationMode","triggerPrinting","bindEvents","bindWindowEvents","detail","passive","unbindEvents","unbindWindowEvents","accumulateWheelTicks","ticks","wholeTicks","HOSTED_VIEWER_ORIGINS","validateFileURL","viewerOrigin","origin","protocol","ex","loadScript","PDFWorker","OPS","Stats","pageView","pageStats","queryString","params","fileInput","files","webViewerOpenFileViaURL","xhr","view","webViewerSave","location","href","currentPage","loading","RenderingStates","currentScaleValue","webViewerFileInputChange","originalUrl","fileReader","buffer","webViewerOpenFile","query","phraseSearch","caseSensitive","entireWord","highlightAll","findPrevious","result","setZoomDisabledTimeout","zoomDisabledTimeout","supportedMouseWheelZoomModifierKeys","previousScale","delta","normalizeWheelEventDirection","WheelEvent","PIXELS_PER_LINE_SCALE","currentScale","scaleCorrectionFactor","rect","dx","dy","handled","ensureViewerFocused","cmd","isViewerInPresentationMode","findState","curElement","curElementTagName","turnPage","turnOnlyIfPageFit","CursorTool","instance","supportsPrinting","createPrintService","CSS_UNITS","DEFAULT_SCALE_VALUE","DEFAULT_SCALE","MIN_SCALE","MAX_SCALE","UNKNOWN_SCALE","MAX_AUTO_SCALE","SCROLLBAR_PADDING","VERTICAL_PADDING","LOADINGBAR_END_OFFSET_VAR","PresentationModeState","NORMAL","CHANGING","FULLSCREEN","NONE","THUMBS","OUTLINE","ATTACHMENTS","LAYERS","CANVAS","SVG","DISABLE","ENABLE","ENABLE_ENHANCE","VERTICAL","HORIZONTAL","WRAPPED","ODD","EVEN","NullL10n","formatL10nValue","devicePixelRatio","backingStoreRatio","ctx","pixelRatio","sx","sy","scaled","skipOverflowHiddenElements","offsetY","offsetX","getComputedStyle","spot","debounceScroll","rAF","currentX","viewAreaElement","lastX","state","currentY","lastY","right","down","_eventHandler","param","minIndex","maxIndex","items","condition","currentIndex","currentItem","xinv","limit","x_","x","a","b","c","d","p","q","r","changeOrientation","rotate","width","height","index","elt","views","pageTop","sortByVisibility","horizontal","rtl","top","scrollEl","bottom","left","elementBottom","elementLeft","elementRight","visible","numViews","firstVisibleElementInd","binarySearchFirstItem","backtrackBeforeAllVisibleElements","lastEdge","currentWidth","currentHeight","viewWidth","viewHeight","viewRight","viewBottom","hiddenHeight","hiddenWidth","fractionHeight","fractionWidth","y","widthPercent","first","last","pc","defaultFilename","isDataSchema","reURI","reFilename","splitURI","suggestedFilename","MOUSE_DOM_DELTA_PIXEL_MODE","MOUSE_DOM_DELTA_LINE_MODE","MOUSE_PIXELS_PER_LINE","MOUSE_LINES_PER_PAGE","mode","size","WaitOnType","EVENT","TIMEOUT","delay","target","eventHandler","handler","timeoutHandler","animationStarted","on","external","off","dispatch","eventListeners","Array","listener","externalListeners","_on","_off","units","_updateBar","progressSize","clamp","setWidth","scrollbarWidth","hide","show","moved","len","arr","write","read","curRoot","curActiveOrFocused","pdfjsLib","__non_webpack_require__","module","SELECT","HAND","ZOOM","switchTool","tool","disableActiveTool","_dispatchEvent","_addEventListeners","previouslyActive","overlay","GrabToPan","CSS_CLASS_GRAB","activate","deactivate","toggle","ignoreTarget","node","_onmousedown","focusedElement","_onmousemove","isLeftMouseReleased","xDiff","yDiff","behavior","_endPan","prefix","matchesSelector","isNotIEorIsIE10plus","chrome","isChrome15OrOpera15plus","isSafari6plus","CLEANUP_TIMEOUT","RUNNING","PAUSED","FINISHED","setViewer","setThumbnailViewer","isHighestPriority","renderHighestPriority","getHighestPriority","visibleViews","numVisible","nextPageIndex","previousPageIndex","isViewFinished","renderView","callerCloseMethod","canForceClose","_keyDown","_closeThroughCaller","e","open","PasswordResponses","promptString","close","verify","password","setUpdateCallback","PdfFileRegExp","reset","keepRenderedCapability","attachmentsCount","_bindPdfLink","blobUrl","viewerUrl","encodeURIComponent","_bindLink","contentType","render","names","fragment","item","div","content","_appendAttachment","renderedPromise","TREEITEM_OFFSET_TOP","TREEITEM_SELECTED_CLASS","_normalizeTextContent","removeNullCharacters","_addToggleButton","hidden","toggler","shouldShowAll","_toggleTreeItem","root","_toggleAllTreeItems","_finishRendering","hasAnyNesting","_updateCurrentTreeItem","treeItem","_scrollToCurrentTreeItem","currentNode","DEFAULT_FIELD_CONTENT","NON_METRIC_LOCALES","US_PAGE_NAMES","METRIC_PAGE_NAMES","isPortrait","pageNames","freezeFieldData","writable","enumerable","configurable","currentPageNumber","pagesRotation","getPageSizeInches","_currentPageNumber","_pagesRotation","contentLength","setDocument","_reset","_updateUI","kb","size_kb","size_b","size_mb","pageSizeInches","isPortraitOrientation","sizeInches","sizeMillimeters","pageName","rawName","getPageName","exactMillimeters","intMillimeters","dateObject","PDFDateString","date","time","_parseLinearization","isLinearized","MATCHES_COUNT_LIMIT","dispatchEvent","updateUIState","status","FindState","updateResultsCount","current","total","matchesCountMsg","_adjustWidth","findbarHeight","inputContainerHeight","FOUND","NOT_FOUND","PENDING","FIND_TIMEOUT","MATCH_SCROLL_OFFSET_TOP","MATCH_SCROLL_OFFSET_LEFT","CHARACTERS_TO_NORMALIZE","normalizationRegex","replace","diffs","normalizedText","normalizedCh","diff","ch","totalDiff","matchIndex","executeCommand","findbarClosed","pendingTimeout","scrollMatchIntoView","pageIndex","scrollIntoView","pageIdx","matchIdx","wrapped","normalize","_shouldDirtyMatch","_prepareMatches","currentElem","matchesWithLength","nextElem","prevElem","isSubTerm","matches","matchesLength","_isEntireWord","startIdx","getCharacterType","endIdx","_calculatePhraseMatch","queryLen","pageContent","originalMatchIdx","getOriginalIndex","matchEnd","originalQueryLen","_calculateWordMatch","queryArray","subquery","subqueryLen","match","matchLength","skipped","_calculateMatch","pageDiffs","pageMatchesCount","_extractText","promise","extractTextCapability","normalizeWhitespace","textContent","textItems","strBuf","j","jj","_updatePage","_updateAllPages","_nextMatch","currentPageIndex","offset","numPageMatches","_matchesReady","numMatches","_nextPageMatch","_advanceOffsetPage","_updateMatch","found","previousPage","_onFindBarClose","_requestMatchesCount","_updateUIResultsCount","matchesCount","_updateUIState","rawQuery","CharacterType","SPACE","ALPHA_LETTER","PUNCT","HAN_LETTER","KATAKANA_LETTER","HIRAGANA_LETTER","HALFWIDTH_KATAKANA_LETTER","THAI_LETTER","charCode","isAlphabeticalScript","isAscii","isAsciiSpace","isAsciiAlpha","isAsciiDigit","isThai","isHan","isKatakana","isHiragana","isHalfwidthKatakana","HASH_CHANGE_TIMEOUT","POSITION_UPDATED_THRESHOLD","UPDATE_VIEWAREA_TIMEOUT","initialize","reInitialized","getCurrentHash","destination","push","namedDest","forceReplace","isDestArraysEqual","dest","pushPage","pushCurrentPosition","back","forward","_pushOrReplaceState","shouldReplace","newState","uid","newUrl","_tryPushCurrentPosition","temporary","position","_isValidState","checkReload","performance","perfEntry","_updateInternalState","removeTemporary","_parseCurrentHash","checkNameddest","unescape","nameddest","_updateViewarea","_popState","newHash","hashChanged","waitOnEventOrTimeout","_pageHide","_bindEvents","updateViewarea","popState","pageHide","_unbindEvents","destHash","second","isEntryEqual","firstDest","secondDest","setVisibility","groups","queue","layersCount","levelData","itemsDiv","groupId","group","externalLinkEnabled","setHistory","navigateTo","_goToDestinationHelper","destRef","destArray","goToPage","val","getDestinationHash","escape","str","getAnchorUrl","setHash","zoomArgs","zoomArg","zoomArgNumber","parseFloat","allowNegativeOffset","isValidExplicitDestination","executeNamedAction","cachePageRef","refStr","pageRef","_cachedPageNumber","isPageVisible","isPageCached","destLength","allowNull","enableCurrentOutlineItemButton","outlineCount","addLinkAttributes","newWindow","rel","_setStyles","count","totalCount","nestedCount","nestedItems","pageNumberToDestHash","linkElement","pageNumberNesting","nesting","currentNesting","DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS","DELAY_BEFORE_HIDING_CONTROLS","ACTIVE_SELECTOR","CONTROLS_SELECTOR","MOUSE_SCROLL_COOLDOWN_TIME","PAGE_SWITCH_THRESHOLD","SWIPE_MIN_DISTANCE_THRESHOLD","SWIPE_ANGLE_THRESHOLD","request","Element","_mouseWheel","normalizeWheelEventDelta","currentTime","storedTime","totalDelta","success","_notifyStateChange","_setSwitchInProgress","_resetSwitchInProgress","_enter","_exit","_mouseDown","isInternalLink","_contextMenu","_showControls","_hideControls","_resetMouseScrollState","_touchSwipe","startX","startY","endX","endY","absAngle","_addWindowListeners","_removeWindowListeners","_fullscreenChange","_addFullscreenChangeListeners","_removeFullscreenChangeListeners","UI_NOTIFICATION_CLASS","switchView","forceOpen","_switchView","isViewChanged","shouldForceRendering","_forceRendering","_updateThumbnailViewer","pagesCount","_showUINotification","_hideUINotification","onTreeLoaded","button","SIDEBAR_WIDTH_VAR","SIDEBAR_MIN_WIDTH","SIDEBAR_RESIZING_CLASS","_updateWidth","maxWidth","_mouseMove","_mouseUp","updated","THUMBNAIL_SCROLL_MARGIN","THUMBNAIL_SELECTED_CLASS","watchScroll","_scrollUpdated","getThumbnail","_getVisibleThumbs","scrollThumbnailIntoView","prevThumbnailView","visibleThumbs","numVisibleThumbs","shouldScroll","TempImageFactory","_resetView","firstPdfPage","viewport","scale","checkSetImageDisabled","pageNum","thumbnail","defaultViewport","disableCanvasToImageConversion","firstThumbnailView","_cancelRendering","setPageLabels","_ensurePdfPageLoaded","thumbView","MAX_NUM_SCALING_STEPS","THUMBNAIL_CANVAS_BORDER_WIDTH","THUMBNAIL_WIDTH","tempCanvasCache","getCanvas","tempCanvas","alpha","destroyCanvas","anchor","ring","borderAdjustment","setPdfPage","totalRotation","childNodes","update","cancelRendering","_getPageDrawContext","canvas","outputScale","getOutputScale","transform","_convertCanvasToImage","className","image","draw","finishRenderTask","renderTask","drawViewport","renderContinueCallback","cont","renderContext","canvasContext","resultPromise","pageCached","setImage","img","reducedWidth","reducedHeight","reducedImage","reducedImageCtx","setPageLabel","_scrollIntoView","pageSpot","pageDiv","_getVisiblePages","_updateHelper","currentId","stillFullyVisible","visiblePages","DEFAULT_CACHE_SIZE","pageIdsToKeep","iMax","pagesToKeep","moveToEndOfArray","viewerVersion","getPageView","_setCurrentPageNumber","resetCurrentPageView","pageLabel","_onePageRenderedOrForceFetch","textLayerFactory","annotationLayerFactory","firstPageView","getPagesLeft","_scrollUpdate","_setScaleUpdatePages","noScroll","preset","newValue","isSameScale","presetValue","_setScale","noPadding","hPadding","vPadding","pageWidthScale","pageHeightScale","horizontalScale","_resetCurrentPageView","pageLabelToPageNumber","scrollPageIntoView","pageWidth","pageHeight","widthScale","heightScale","boundingRect","_updateLocation","normalizedScaleValue","firstPage","pdfOpenParams","currentPageView","topLeft","intLeft","intTop","numVisiblePages","newCacheSize","containsElement","focus","_getCurrentVisiblePage","currentlyVisiblePages","scrollAhead","createTextLayerBuilder","enhanceTextSelection","createAnnotationLayerBuilder","hasJSActionsPromise","getPagesOverview","_updateScrollMode","_updateSpreadMode","pages","parity","spread","_getPageAdvance","yArray","expectedId","firstId","lastId","nextPage","advance","initializeScriptingEvents","pageOpenPendingSet","scriptingEvents","dispatchPageClose","dispatchPageOpen","_resetScriptingEvents","intent","hasJSActions","annotations","dontFlip","AnnotationLayer","cancel","MAX_CANVAS_PIXELS","destroy","_resetZoomLayer","removeFromDOM","zoomLayerCanvas","keepZoomLayer","keepAnnotations","currentZoomLayerNode","currentAnnotationNode","cssTransform","timestamp","isScalingRestricted","redrawAnnotations","relativeRotation","absRotation","scaleX","scaleY","textLayerViewport","textRelativeRotation","textAbsRotation","textLayerDiv","transX","transY","getPagePoint","canvasWrapper","textLayer","finishPaintTask","paintTask","readableStream","paintOnCanvas","renderCapability","onRenderContinue","isCanvasHidden","showCanvas","actualSizeViewport","pixelsInViewport","maxScale","sfx","approximateFraction","sfy","roundToDivide","paintOnSvg","cancelled","ensureNotCancelled","opList","svgGfx","svg","wrapper","EXPAND_DIVS_TIMEOUT","endOfContent","numTextDivs","textLayerFrag","textContentStream","textDivs","textContentItemsStr","setTextContentStream","setTextContent","_convertMatches","iIndex","end","m","mm","begin","divIdx","_renderMatches","isSelectedPage","selectedMatchIdx","prevEnd","infinity","appendTextToDiv","span","i0","i1","isSelected","highlightSuffix","beginText","n0","n1","_updateMatches","clearedUntilDivIdx","n","pageMatches","pageMatchesLength","_bindMouse","expandDivsTimer","adjustTop","divBounds","eventName","eventDetails","lastPage","pageRotateCw","pageRotateCcw","setPageNumber","setPagesCount","_bindClickListeners","details","_bindCursorToolsListener","buttons","_bindScrollModeListener","isScrollModeHorizontal","scrollModeChanged","_bindSpreadModeListener","spreadModeChanged","_setMaxHeight","_ensurePageViewVisible","previousPageView","viewerNodes","scrolledDown","PAGE_NUMBER_LOADING_INDICATOR","SCALE_SELECT_CONTAINER_WIDTH","SCALE_SELECT_WIDTH","setPageScale","_bindListeners","self","resetNumPages","pageScale","customScale","predefinedValueFound","option","updateLoadingIndicatorState","pageNumberInput","predefinedValuesPromise","overflow","DEFAULT_VIEW_HISTORY_CACHE_SIZE","cacheSize","databaseStr","database","branch","localStorage","properties","values","GenericCom","prefs","defaultValue","prefValue","defaultType","downloadUrl","createValidAbsoluteUrl","downloadData","createObjectURL","webL10n","gL10nData","gTextData","gTextProp","gLanguage","gMacros","gReadyState","gAsyncResourceLoading","script","l10nId","l10nArgs","onSuccess","onFailure","text","dictionary","reBlank","reComment","reSection","reImport","reSplit","entries","rawText","currentLang","genericLang","lang","skipLang","parsedRawLinesCallback","loadImport","tmp","evalString","nextEntry","xhrLoadText","parseRawLines","parsedPropertiesCallback","parseProperties","prop","successCallback","clear","langLinks","getL10nResourceLinks","langCount","dict","getL10nDictionary","defaultLocale","anyCaseLang","onResourceLoaded","gResourceCount","link","parseResource","resource","locales2rules","list","start","pluralRules","isBetween","getPluralRules","rv","substIndexes","substArguments","reIndex","reMatch","macroName","paramName","macro","reArgs","arg","getL10nAttributes","getL10nData","getChildElementCount","children","l","textNode","getTranslatableChildren","elementCount","translateElement","get","getData","getText","getLanguage","setLanguage","loadLocale","getDirection","rtlList","shortCode","translate","getReadyState","sandbox","activeService","scratchCanvas","PRINT_UNITS","PDFPrintService","layout","body","hasEqualPageSizes","ensureOverlay","renderPages","renderNextPage","renderProgress","renderPage","useRenderedPage","printItem","performPrint","throwIfInactive","activeServiceOnEntry","abort","progressContainer","progressBar","progressPerc","stopPropagationIfNeeded","overlayPromise"],"mappings":"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","file":"viewer.js","sourcesContent":["/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AppOptions } from \"./app_options.js\";\nimport { PDFViewerApplication } from \"./app.js\";\n\n/* eslint-disable-next-line no-unused-vars */\nconst pdfjsVersion =\n typeof PDFJSDev !== \"undefined\" ? PDFJSDev.eval(\"BUNDLE_VERSION\") : void 0;\n/* eslint-disable-next-line no-unused-vars */\nconst pdfjsBuild =\n typeof PDFJSDev !== \"undefined\" ? PDFJSDev.eval(\"BUNDLE_BUILD\") : void 0;\n\nwindow.PDFViewerApplication = PDFViewerApplication;\nwindow.PDFViewerApplicationOptions = AppOptions;\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\")) {\n var defaultUrl; // eslint-disable-line no-var\n\n (function rewriteUrlClosure() {\n // Run this code outside DOMContentLoaded to make sure that the URL\n // is rewritten as soon as possible.\n const queryString = document.location.search.slice(1);\n const m = /(^|&)file=([^&]*)/.exec(queryString);\n defaultUrl = m ? decodeURIComponent(m[2]) : \"\";\n\n // Example: chrome-extension://.../http://example.com/file.pdf\n const humanReadableUrl = \"/\" + defaultUrl + location.hash;\n history.replaceState(history.state, \"\", humanReadableUrl);\n if (top === window) {\n // eslint-disable-next-line no-undef\n chrome.runtime.sendMessage(\"showPageAction\");\n }\n })();\n}\n\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"MOZCENTRAL\")) {\n require(\"./firefoxcom.js\");\n require(\"./firefox_print_service.js\");\n}\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\")) {\n require(\"./genericcom.js\");\n}\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\")) {\n require(\"./chromecom.js\");\n}\nif (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME || GENERIC\")) {\n require(\"./pdf_print_service.js\");\n}\n\nfunction getViewerConfiguration() {\n return {\n appContainer: document.body,\n mainContainer: document.getElementById(\"viewerContainer\"),\n viewerContainer: document.getElementById(\"viewer\"),\n eventBus: null,\n toolbar: {\n container: document.getElementById(\"toolbarViewer\"),\n numPages: document.getElementById(\"numPages\"),\n pageNumber: document.getElementById(\"pageNumber\"),\n scaleSelectContainer: document.getElementById(\"scaleSelectContainer\"),\n scaleSelect: document.getElementById(\"scaleSelect\"),\n customScaleOption: document.getElementById(\"customScaleOption\"),\n previous: document.getElementById(\"previous\"),\n next: document.getElementById(\"next\"),\n zoomIn: document.getElementById(\"zoomIn\"),\n zoomOut: document.getElementById(\"zoomOut\"),\n viewFind: document.getElementById(\"viewFind\"),\n openFile: document.getElementById(\"openFile\"),\n print: document.getElementById(\"print\"),\n presentationModeButton: document.getElementById(\"presentationMode\"),\n download: document.getElementById(\"download\"),\n viewBookmark: document.getElementById(\"viewBookmark\"),\n },\n secondaryToolbar: {\n toolbar: document.getElementById(\"secondaryToolbar\"),\n toggleButton: document.getElementById(\"secondaryToolbarToggle\"),\n toolbarButtonContainer: document.getElementById(\n \"secondaryToolbarButtonContainer\"\n ),\n presentationModeButton: document.getElementById(\n \"secondaryPresentationMode\"\n ),\n openFileButton: document.getElementById(\"secondaryOpenFile\"),\n printButton: document.getElementById(\"secondaryPrint\"),\n downloadButton: document.getElementById(\"secondaryDownload\"),\n viewBookmarkButton: document.getElementById(\"secondaryViewBookmark\"),\n firstPageButton: document.getElementById(\"firstPage\"),\n lastPageButton: document.getElementById(\"lastPage\"),\n pageRotateCwButton: document.getElementById(\"pageRotateCw\"),\n pageRotateCcwButton: document.getElementById(\"pageRotateCcw\"),\n cursorSelectToolButton: document.getElementById(\"cursorSelectTool\"),\n cursorHandToolButton: document.getElementById(\"cursorHandTool\"),\n scrollVerticalButton: document.getElementById(\"scrollVertical\"),\n scrollHorizontalButton: document.getElementById(\"scrollHorizontal\"),\n scrollWrappedButton: document.getElementById(\"scrollWrapped\"),\n spreadNoneButton: document.getElementById(\"spreadNone\"),\n spreadOddButton: document.getElementById(\"spreadOdd\"),\n spreadEvenButton: document.getElementById(\"spreadEven\"),\n documentPropertiesButton: document.getElementById(\"documentProperties\"),\n },\n fullscreen: {\n contextFirstPage: document.getElementById(\"contextFirstPage\"),\n contextLastPage: document.getElementById(\"contextLastPage\"),\n contextPageRotateCw: document.getElementById(\"contextPageRotateCw\"),\n contextPageRotateCcw: document.getElementById(\"contextPageRotateCcw\"),\n },\n sidebar: {\n // Divs (and sidebar button)\n outerContainer: document.getElementById(\"outerContainer\"),\n viewerContainer: document.getElementById(\"viewerContainer\"),\n toggleButton: document.getElementById(\"sidebarToggle\"),\n // Buttons\n thumbnailButton: document.getElementById(\"viewThumbnail\"),\n outlineButton: document.getElementById(\"viewOutline\"),\n attachmentsButton: document.getElementById(\"viewAttachments\"),\n layersButton: document.getElementById(\"viewLayers\"),\n // Views\n thumbnailView: document.getElementById(\"thumbnailView\"),\n outlineView: document.getElementById(\"outlineView\"),\n attachmentsView: document.getElementById(\"attachmentsView\"),\n layersView: document.getElementById(\"layersView\"),\n // View-specific options\n outlineOptionsContainer: document.getElementById(\n \"outlineOptionsContainer\"\n ),\n currentOutlineItemButton: document.getElementById(\"currentOutlineItem\"),\n },\n sidebarResizer: {\n outerContainer: document.getElementById(\"outerContainer\"),\n resizer: document.getElementById(\"sidebarResizer\"),\n },\n findBar: {\n bar: document.getElementById(\"findbar\"),\n toggleButton: document.getElementById(\"viewFind\"),\n findField: document.getElementById(\"findInput\"),\n highlightAllCheckbox: document.getElementById(\"findHighlightAll\"),\n caseSensitiveCheckbox: document.getElementById(\"findMatchCase\"),\n entireWordCheckbox: document.getElementById(\"findEntireWord\"),\n findMsg: document.getElementById(\"findMsg\"),\n findResultsCount: document.getElementById(\"findResultsCount\"),\n findPreviousButton: document.getElementById(\"findPrevious\"),\n findNextButton: document.getElementById(\"findNext\"),\n },\n passwordOverlay: {\n overlayName: \"passwordOverlay\",\n container: document.getElementById(\"passwordOverlay\"),\n label: document.getElementById(\"passwordText\"),\n input: document.getElementById(\"password\"),\n submitButton: document.getElementById(\"passwordSubmit\"),\n cancelButton: document.getElementById(\"passwordCancel\"),\n },\n documentProperties: {\n overlayName: \"documentPropertiesOverlay\",\n container: document.getElementById(\"documentPropertiesOverlay\"),\n closeButton: document.getElementById(\"documentPropertiesClose\"),\n fields: {\n fileName: document.getElementById(\"fileNameField\"),\n fileSize: document.getElementById(\"fileSizeField\"),\n title: document.getElementById(\"titleField\"),\n author: document.getElementById(\"authorField\"),\n subject: document.getElementById(\"subjectField\"),\n keywords: document.getElementById(\"keywordsField\"),\n creationDate: document.getElementById(\"creationDateField\"),\n modificationDate: document.getElementById(\"modificationDateField\"),\n creator: document.getElementById(\"creatorField\"),\n producer: document.getElementById(\"producerField\"),\n version: document.getElementById(\"versionField\"),\n pageCount: document.getElementById(\"pageCountField\"),\n pageSize: document.getElementById(\"pageSizeField\"),\n linearized: document.getElementById(\"linearizedField\"),\n },\n },\n errorWrapper: {\n container: document.getElementById(\"errorWrapper\"),\n errorMessage: document.getElementById(\"errorMessage\"),\n closeButton: document.getElementById(\"errorClose\"),\n errorMoreInfo: document.getElementById(\"errorMoreInfo\"),\n moreInfoButton: document.getElementById(\"errorShowMore\"),\n lessInfoButton: document.getElementById(\"errorShowLess\"),\n },\n printContainer: document.getElementById(\"printContainer\"),\n openFileInputName: \"fileInput\",\n debuggerScriptPath: \"./debugger.js\",\n };\n}\n\nfunction webViewerLoad() {\n const config = getViewerConfiguration();\n if (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"PRODUCTION\")) {\n Promise.all([\n import(\"pdfjs-web/genericcom.js\"),\n import(\"pdfjs-web/pdf_print_service.js\"),\n ]).then(function ([genericCom, pdfPrintService]) {\n PDFViewerApplication.run(config);\n });\n } else {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"CHROME\")) {\n AppOptions.set(\"defaultUrl\", defaultUrl);\n }\n\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"GENERIC\")) {\n // Give custom implementations of the default viewer a simpler way to\n // set various `AppOptions`, by dispatching an event once all viewer\n // files are loaded but *before* the viewer initialization has run.\n const event = document.createEvent(\"CustomEvent\");\n event.initCustomEvent(\"webviewerloaded\", true, true, {\n source: window,\n });\n try {\n // Attempt to dispatch the event at the embedding `document`,\n // in order to support cases where the viewer is embedded in\n // a *dynamically* created