plugins/pdfviewer

Thomas Brüderli bruederli at kolabsys.com
Thu Oct 3 14:19:53 CEST 2013


 plugins/pdfviewer/README                                                     |    3 
 plugins/pdfviewer/package.xml                                                |    9 
 plugins/pdfviewer/pdfjs-viewer.diff                                          |  133 
 plugins/pdfviewer/pdfviewer.php                                              |    2 
 plugins/pdfviewer/viewer/compatibility.js                                    |  132 
 plugins/pdfviewer/viewer/debugger.js                                         |   84 
 plugins/pdfviewer/viewer/images/annotation-check.svg                         |    3 
 plugins/pdfviewer/viewer/images/annotation-comment.svg                       |    3 
 plugins/pdfviewer/viewer/images/annotation-help.svg                          |    3 
 plugins/pdfviewer/viewer/images/annotation-insert.svg                        |    3 
 plugins/pdfviewer/viewer/images/annotation-key.svg                           |    3 
 plugins/pdfviewer/viewer/images/annotation-newparagraph.svg                  |    3 
 plugins/pdfviewer/viewer/images/annotation-note.svg                          |    3 
 plugins/pdfviewer/viewer/images/annotation-paragraph.svg                     |    3 
 plugins/pdfviewer/viewer/images/secondaryToolbarButton-firstPage.png         |binary
 plugins/pdfviewer/viewer/images/secondaryToolbarButton-lastPage.png          |binary
 plugins/pdfviewer/viewer/images/secondaryToolbarButton-rotateCcw.png         |binary
 plugins/pdfviewer/viewer/images/secondaryToolbarButton-rotateCw.png          |binary
 plugins/pdfviewer/viewer/images/shadow.png                                   |binary
 plugins/pdfviewer/viewer/images/toolbarButton-presentationMode.png           |binary
 plugins/pdfviewer/viewer/images/toolbarButton-secondaryToolbarToggle-rtl.png |binary
 plugins/pdfviewer/viewer/images/toolbarButton-secondaryToolbarToggle.png     |binary
 plugins/pdfviewer/viewer/images/toolbarButton-sidebarToggle-rtl.png          |binary
 plugins/pdfviewer/viewer/images/toolbarButton-viewOutline-rtl.png            |binary
 plugins/pdfviewer/viewer/l10n.js                                             |  264 
 plugins/pdfviewer/viewer/locale/ar/viewer.properties                         |   23 
 plugins/pdfviewer/viewer/locale/ca/viewer.properties                         |   32 
 plugins/pdfviewer/viewer/locale/cs/viewer.properties                         |   17 
 plugins/pdfviewer/viewer/locale/cy/viewer.properties                         |  134 
 plugins/pdfviewer/viewer/locale/da/viewer.properties                         |   55 
 plugins/pdfviewer/viewer/locale/de/viewer.properties                         |   35 
 plugins/pdfviewer/viewer/locale/el/viewer.properties                         |  124 
 plugins/pdfviewer/viewer/locale/en-US/viewer.properties                      |   45 
 plugins/pdfviewer/viewer/locale/es/viewer.properties                         |  238 
 plugins/pdfviewer/viewer/locale/fa/viewer.properties                         |  134 
 plugins/pdfviewer/viewer/locale/fi/viewer.properties                         |   57 
 plugins/pdfviewer/viewer/locale/fr/viewer.properties                         |   93 
 plugins/pdfviewer/viewer/locale/he/viewer.properties                         |    3 
 plugins/pdfviewer/viewer/locale/it/viewer.properties                         |    9 
 plugins/pdfviewer/viewer/locale/ja/viewer.properties                         |   57 
 plugins/pdfviewer/viewer/locale/ko/viewer.properties                         |  131 
 plugins/pdfviewer/viewer/locale/locale.properties                            |   24 
 plugins/pdfviewer/viewer/locale/lt/viewer.properties                         |  129 
 plugins/pdfviewer/viewer/locale/nl/viewer.properties                         |   63 
 plugins/pdfviewer/viewer/locale/no/viewer.properties                         |  134 
 plugins/pdfviewer/viewer/locale/pl/viewer.properties                         |  127 
 plugins/pdfviewer/viewer/locale/pt-BR/viewer.properties                      |    3 
 plugins/pdfviewer/viewer/locale/ro/viewer.properties                         |    3 
 plugins/pdfviewer/viewer/locale/ru/viewer.properties                         |    3 
 plugins/pdfviewer/viewer/locale/sr/viewer.properties                         |    3 
 plugins/pdfviewer/viewer/locale/sv/viewer.properties                         |   79 
 plugins/pdfviewer/viewer/locale/tr/viewer.properties                         |  129 
 plugins/pdfviewer/viewer/locale/vi/viewer.properties                         |  131 
 plugins/pdfviewer/viewer/locale/zh-CN/viewer.properties                      |   36 
 plugins/pdfviewer/viewer/locale/zh-TW/viewer.properties                      |  247 
 plugins/pdfviewer/viewer/pdf.js                                              | 1832 
 plugins/pdfviewer/viewer/pdf.worker.js                                       |39219 ++++++++++
 plugins/pdfviewer/viewer/viewer.css                                          |  820 
 plugins/pdfviewer/viewer/viewer.html                                         |  143 
 plugins/pdfviewer/viewer/viewer.js                                           |  130 
 60 files changed, 42336 insertions(+), 2757 deletions(-)

New commits:
commit 38340461d526c428c9bd661ea0a239e5c44d7868
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Thu Oct 3 14:19:40 2013 +0200

    Update pdf.js library to lastest git master version

diff --git a/plugins/pdfviewer/README b/plugins/pdfviewer/README
index 57478cd..8949ac8 100644
--- a/plugins/pdfviewer/README
+++ b/plugins/pdfviewer/README
@@ -30,12 +30,13 @@ directory:
 $ cd <roundcubedir>/plugins/pdfviewer
 $ cp -r <pdfjsdir>/build/generic/web viewer
 $ cp <pdfjsdir>/build/generic/build/pdf.js viewer/pdf.js
+$ cp <pdfjsdir>/build/generic/build/pdf.worker.js viewer/pdf.worker.js
 $ rm viewer/*.pdf
 
 Then apply the pdfjs-viewer.diff patch to adjust the viewer for the use
 within Roundcube:
 
-$ patch -p1 < pdfjs-viewer.diff
+$ patch -p0 < pdfjs-viewer.diff
 
 Optionally, compress the scripts using Google's Closure Compiler [1]
 or the YUI Compressor [2].
diff --git a/plugins/pdfviewer/package.xml b/plugins/pdfviewer/package.xml
index 11674fd..39ac980 100644
--- a/plugins/pdfviewer/package.xml
+++ b/plugins/pdfviewer/package.xml
@@ -13,11 +13,11 @@
 		<email>bruederli at kolabsys.com</email>
 		<active>yes</active>
 	</lead>
-	<date>2013-01-24</date>
-	<time>12:20:00</time>
+	<date>2013-10-03</date>
+	<time>14:20:00</time>
 	<version>
-		<release>0.1</release>
-		<api>0.1</api>
+		<release>0.1.2</release>
+		<api>0.1.2</api>
 	</version>
 	<stability>
 		<release>beta</release>
@@ -34,6 +34,7 @@
 			<file name="viewer/viewer.js" role="data"></file>
 			<file name="viewer/viewer.css" role="data"></file>
 			<file name="viewer/pdf.js" role="data"></file>
+			<file name="viewer/pdf.worker.js" role="data"></file>
 			<file name="viewer/compatibility.js" role="data"></file>
 			<file name="viewer/debugger.js" role="data"></file>
 			<file name="viewer/l10n.js" role="data"></file>
diff --git a/plugins/pdfviewer/pdfjs-viewer.diff b/plugins/pdfviewer/pdfjs-viewer.diff
index 100570e..52a65c6 100644
--- a/plugins/pdfviewer/pdfjs-viewer.diff
+++ b/plugins/pdfviewer/pdfjs-viewer.diff
@@ -1,6 +1,6 @@
---- a/viewer/viewer.html	2013-01-24 11:17:55.000000000 +0100
-+++ b/viewer/viewer.html	2013-01-24 13:54:20.000000000 +0100
-@@ -30,7 +30,7 @@
+--- viewer/viewer.html.orig	2013-10-03 14:06:24.000000000 +0200
++++ viewer/viewer.html	2013-10-03 13:53:17.000000000 +0200
+@@ -31,7 +31,7 @@
  <!-- This snippet is used in production, see Makefile -->
  <link rel="resource" type="application/l10n" href="locale/locale.properties"/>
  <script type="text/javascript" src="l10n.js"></script>
@@ -8,30 +8,50 @@
 +<script type="text/javascript" src="pdf.js"></script>
  
  
-     <script type="text/javascript" src="debugger.js"></script>
-@@ -111,19 +111,9 @@
+ 
+@@ -88,18 +88,10 @@
+               <span data-l10n-id="presentation_mode_label">Presentation Mode</span>
+             </button>
+ 
+-            <button id="secondaryOpenFile" class="secondaryToolbarButton openFile visibleLargeView" title="Open File" tabindex="19" data-l10n-id="open_file">
+-              <span data-l10n-id="open_file_label">Open</span>
+-            </button>
+-
+             <button id="secondaryPrint" class="secondaryToolbarButton print visibleMediumView" title="Print" tabindex="20" data-l10n-id="print">
+               <span data-l10n-id="print_label">Print</span>
+             </button>
+ 
+-            <button id="secondaryDownload" class="secondaryToolbarButton download visibleMediumView" title="Download" tabindex="21" data-l10n-id="download">
+-              <span data-l10n-id="download_label">Download</span>
+-            </button>
+-
+             <div class="horizontalToolbarSeparator visibleLargeView"></div>
+ 
+             <button id="firstPage" class="secondaryToolbarButton firstPage" title="Go to First Page" tabindex="22" data-l10n-id="first_page">
+@@ -150,20 +142,10 @@
                    <span data-l10n-id="presentation_mode_label">Presentation Mode</span>
                  </button>
  
--                <button id="openFile" class="toolbarButton openFile" title="Open File" tabindex="12" data-l10n-id="open_file">
--                   <span data-l10n-id="open_file_label">Open</span>
+-                <button id="openFile" class="toolbarButton openFile hiddenLargeView" title="Open File" tabindex="13" data-l10n-id="open_file">
+-                  <span data-l10n-id="open_file_label">Open</span>
 -                </button>
 -
-                 <button id="print" class="toolbarButton print" title="Print" tabindex="13" data-l10n-id="print">
+                 <button id="print" class="toolbarButton print hiddenMediumView" title="Print" tabindex="14" data-l10n-id="print">
                    <span data-l10n-id="print_label">Print</span>
                  </button>
--
--                <button id="download" class="toolbarButton download" title="Download" tabindex="14" data-l10n-id="download">
+ 
+-                <button id="download" class="toolbarButton download hiddenMediumView" title="Download" tabindex="15" data-l10n-id="download">
 -                  <span data-l10n-id="download_label">Download</span>
 -                </button>
 -                <!-- <div class="toolbarButtonSpacer"></div> -->
--                <a href="#" id="viewBookmark" class="toolbarButton bookmark" title="Current view (copy or open in new window)" tabindex="15" data-l10n-id="bookmark"><span data-l10n-id="bookmark_label">Current View</span></a>
-               </div>
-               <div class="outerCenter">
-                 <div class="innerCenter" id="toolbarViewerMiddle">
---- a/viewer/viewer.js	2013-01-24 11:17:55.000000000 +0100
-+++ b/viewer/viewer.js	2013-01-24 13:51:05.000000000 +0100
-@@ -17,7 +17,7 @@
+-                <a href="#" id="viewBookmark" class="toolbarButton bookmark hiddenSmallView" title="Current view (copy or open in new window)" tabindex="16" data-l10n-id="bookmark"><span data-l10n-id="bookmark_label">Current View</span></a>
+-
+                 <div class="verticalToolbarSeparator hiddenSmallView"></div>
+                 
+                 <button id="secondaryToolbarToggle" class="toolbarButton" title="Tools" tabindex="17" data-l10n-id="tools">
+--- viewer/viewer.js.orig	2013-10-03 14:06:30.000000000 +0200
++++ viewer/viewer.js	2013-10-03 14:06:00.000000000 +0200
+@@ -22,7 +22,7 @@
  
  'use strict';
  
@@ -40,63 +60,78 @@
  var DEFAULT_SCALE = 'auto';
  var DEFAULT_SCALE_DELTA = 1.1;
  var UNKNOWN_SCALE = 0;
-@@ -43,7 +43,7 @@
-   FIND_PENDING: 3
+@@ -49,7 +49,7 @@
  };
  
--  PDFJS.workerSrc = '../build/pdf.js';
-+  PDFJS.workerSrc = 'pdf.js';
+ PDFJS.imageResourcesPath = './images/';
+-  PDFJS.workerSrc = '../build/pdf.worker.js';
++  PDFJS.workerSrc = 'pdf.worker.js';
  
  var mozL10n = document.mozL10n || document.webL10n;
  
-@@ -2676,7 +2676,7 @@
-   var file = params.file || DEFAULT_URL;
+@@ -1313,9 +1313,9 @@
+ 
+     this.presentationMode.addEventListener('click',
+       this.presentationModeClick.bind(this));
+-    this.openFile.addEventListener('click', this.openFileClick.bind(this));
++    //this.openFile.addEventListener('click', this.openFileClick.bind(this));
+     this.print.addEventListener('click', this.printClick.bind(this));
+-    this.download.addEventListener('click', this.downloadClick.bind(this));
++    //this.download.addEventListener('click', this.downloadClick.bind(this));
+ 
+     this.firstPage.addEventListener('click', this.firstPageClick.bind(this));
+     this.lastPage.addEventListener('click', this.lastPageClick.bind(this));
+@@ -3991,8 +3991,8 @@
+   document.body.appendChild(fileInput);
  
    if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {
 -    document.getElementById('openFile').setAttribute('hidden', 'true');
-+    // document.getElementById('openFile').setAttribute('hidden', 'true');
+-    document.getElementById('secondaryOpenFile').setAttribute('hidden', 'true');
++    //document.getElementById('openFile').setAttribute('hidden', 'true');
++    //document.getElementById('secondaryOpenFile').setAttribute('hidden', 'true');
    } else {
      document.getElementById('fileInput').value = null;
    }
-@@ -2790,21 +2790,11 @@
-       PDFView.fullscreen();
-     });
+@@ -4147,14 +4147,14 @@
+   document.getElementById('presentationMode').addEventListener('click',
+     SecondaryToolbar.presentationModeClick.bind(SecondaryToolbar));
  
 -  document.getElementById('openFile').addEventListener('click',
--    function() {
--      document.getElementById('fileInput').click();
--    });
--
+-    SecondaryToolbar.openFileClick.bind(SecondaryToolbar));
++//  document.getElementById('openFile').addEventListener('click',
++//    SecondaryToolbar.openFileClick.bind(SecondaryToolbar));
+ 
    document.getElementById('print').addEventListener('click',
-     function() {
-       window.print();
-     });
+     SecondaryToolbar.printClick.bind(SecondaryToolbar));
  
 -  document.getElementById('download').addEventListener('click',
--    function() {
--      PDFView.download();
--    });
--
-   document.getElementById('pageNumber').addEventListener('change',
-     function() {
-       PDFView.page = this.value;
-@@ -2899,7 +2889,7 @@
+-    SecondaryToolbar.downloadClick.bind(SecondaryToolbar));
++//  document.getElementById('download').addEventListener('click',
++//    SecondaryToolbar.downloadClick.bind(SecondaryToolbar));
+ 
+   document.getElementById('contextFirstPage').addEventListener('click',
+     SecondaryToolbar.firstPageClick.bind(SecondaryToolbar));
+@@ -4229,8 +4229,8 @@
+     store.set('scrollLeft', Math.round(topLeft[0]));
      store.set('scrollTop', Math.round(topLeft[1]));
    });
-   var href = PDFView.getAnchorUrl(pdfOpenParams);
+-  var href = PDFView.getAnchorUrl(pdfOpenParams);
 -  document.getElementById('viewBookmark').href = href;
-+  // document.getElementById('viewBookmark').href = href;
- }
++  //var href = PDFView.getAnchorUrl(pdfOpenParams);
++  //document.getElementById('viewBookmark').href = href;
  
- window.addEventListener('resize', function webViewerResize(evt) {
-@@ -2933,8 +2923,8 @@
+   // Update the current bookmark in the browsing history.
+   PDFHistory.updateCurrentBookmark(pdfOpenParams, pageNumber);
+@@ -4273,9 +4273,9 @@
    PDFView.setTitleUsingUrl(file.name);
  
    // URL does not reflect proper document location - hiding some icons.
 -  document.getElementById('viewBookmark').setAttribute('hidden', 'true');
 -  document.getElementById('download').setAttribute('hidden', 'true');
-+  // document.getElementById('viewBookmark').setAttribute('hidden', 'true');
-+  // document.getElementById('download').setAttribute('hidden', 'true');
+-  document.getElementById('secondaryDownload').setAttribute('hidden', 'true');
++  //document.getElementById('viewBookmark').setAttribute('hidden', 'true');
++  //document.getElementById('download').setAttribute('hidden', 'true');
++  //document.getElementById('secondaryDownload').setAttribute('hidden', 'true');
  }, true);
  
  function selectScaleOption(value) {
diff --git a/plugins/pdfviewer/pdfviewer.php b/plugins/pdfviewer/pdfviewer.php
index 93369da..d9924b8 100644
--- a/plugins/pdfviewer/pdfviewer.php
+++ b/plugins/pdfviewer/pdfviewer.php
@@ -6,7 +6,7 @@
  * Render PDF files directly in the preview window
  * by using the JavaScript PDF Reader pdf.js by andreasgal (http://mozilla.github.com/pdf.js)
  *
- * @version 0.1
+ * @version 0.1.2
  * @author Thomas Bruederli <bruederli at kolabsys.com>
  *
  * Copyright (C) 2013, Kolab Systems AG
diff --git a/plugins/pdfviewer/viewer/compatibility.js b/plugins/pdfviewer/viewer/compatibility.js
index 33ca1f4..23ca69e 100644
--- a/plugins/pdfviewer/viewer/compatibility.js
+++ b/plugins/pdfviewer/viewer/compatibility.js
@@ -14,9 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+/* globals VBArray, PDFJS */
 
 'use strict';
 
+// Initializing PDFJS global object here, it case if we need to change/disable
+// some PDF.js features, e.g. range requests
+if (typeof PDFJS === 'undefined') {
+  (typeof window !== 'undefined' ? window : this).PDFJS = {};
+}
+
 // Checking if the typed arrays are supported
 (function checkTypedArrayCompatibility() {
   if (typeof Uint8Array !== 'undefined') {
@@ -54,8 +61,14 @@
       result = [];
       for (var i = 0; i < arg1; ++i)
         result[i] = 0;
-    } else
+    } else if ('slice' in arg1) {
       result = arg1.slice(0);
+    } else {
+      result = [];
+      for (var i = 0, n = arg1.length; i < n; ++i) {
+        result[i] = arg1[i];
+      }
+    }
 
     result.subarray = subarray;
     result.buffer = result;
@@ -79,15 +92,22 @@
   window.Float64Array = TypedArray;
 })();
 
+// URL = URL || webkitURL
+(function normalizeURLObject() {
+  if (!window.URL) {
+    window.URL = window.webkitURL;
+  }
+})();
+
 // Object.create() ?
 (function checkObjectCreateCompatibility() {
   if (typeof Object.create !== 'undefined')
     return;
 
   Object.create = function objectCreate(proto) {
-    var constructor = function objectCreateConstructor() {};
-    constructor.prototype = proto;
-    return new constructor();
+    function Constructor() {}
+    Constructor.prototype = proto;
+    return new Constructor();
   };
 })();
 
@@ -248,6 +268,36 @@
   };
 })();
 
+// window.atob (base64 encode function) ?
+(function checkWindowAtobCompatibility() {
+  if ('atob' in window)
+    return;
+
+  // https://github.com/davidchambers/Base64.js
+  var digits =
+    'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+  window.atob = function (input) {
+    input = input.replace(/=+$/, '');
+    if (input.length % 4 == 1) throw new Error('bad atob input');
+    for (
+      // initialize result and counters
+      var bc = 0, bs, buffer, idx = 0, output = '';
+      // get next character
+      buffer = input.charAt(idx++);
+      // character found in table?
+      // initialize bit storage and add its ascii value
+      ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,
+        // and if not first of each 4 characters,
+        // convert the first 8 bits to one ascii character
+        bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0
+    ) {
+      // try to find character in table (0-63, not found => -1)
+      buffer = digits.indexOf(buffer);
+    }
+    return output;
+  };
+})();
+
 // Function.prototype.bind ?
 (function checkFunctionPrototypeBindCompatibility() {
   if (typeof Function.prototype.bind !== 'undefined')
@@ -263,36 +313,6 @@
   };
 })();
 
-// IE9/10 text/html data URI
-(function checkDataURICompatibility() {
-  if (!('documentMode' in document) ||
-      document.documentMode !== 9 && document.documentMode !== 10)
-    return;
-  // overriding the src property
-  var originalSrcDescriptor = Object.getOwnPropertyDescriptor(
-    HTMLIFrameElement.prototype, 'src');
-  Object.defineProperty(HTMLIFrameElement.prototype, 'src', {
-    get: function htmlIFrameElementPrototypeSrcGet() { return this.$src; },
-    set: function htmlIFrameElementPrototypeSrcSet(src) {
-      this.$src = src;
-      if (src.substr(0, 14) != 'data:text/html') {
-        originalSrcDescriptor.set.call(this, src);
-        return;
-      }
-      // for text/html, using blank document and then
-      // document's open, write, and close operations
-      originalSrcDescriptor.set.call(this, 'about:blank');
-      setTimeout((function htmlIFrameElementPrototypeSrcOpenWriteClose() {
-        var doc = this.contentDocument;
-        doc.open('text/html');
-        doc.write(src.substr(src.indexOf(',') + 1));
-        doc.close();
-      }).bind(this), 0);
-    },
-    enumerable: true
-  });
-})();
-
 // HTMLElement dataset property
 (function checkDatasetProperty() {
   var div = document.createElement('div');
@@ -334,7 +354,7 @@
   function changeList(element, itemName, add, remove) {
     var s = element.className || '';
     var list = s.split(/\s+/g);
-    if (list[0] == '') list.shift();
+    if (list[0] === '') list.shift();
     var index = list.indexOf(itemName);
     if (index < 0 && add)
       list.push(itemName);
@@ -378,21 +398,25 @@
   });
 })();
 
-// Check console compatability
+// Check console compatibility
 (function checkConsoleCompatibility() {
-  if (typeof console == 'undefined') {
-    console = {
+  if (!('console' in window)) {
+    window.console = {
       log: function() {},
-      error: function() {}
+      error: function() {},
+      warn: function() {}
     };
   } else if (!('bind' in console.log)) {
     // native functions in IE9 might not have bind
     console.log = (function(fn) {
-      return function(msg) { return fn(msg); }
+      return function(msg) { return fn(msg); };
     })(console.log);
     console.error = (function(fn) {
-      return function(msg) { return fn(msg); }
+      return function(msg) { return fn(msg); };
     })(console.error);
+    console.warn = (function(fn) {
+      return function(msg) { return fn(msg); };
+    })(console.warn);
   }
 })();
 
@@ -427,3 +451,29 @@
     enumerable: true
   });
 })();
+
+(function checkRangeRequests() {
+  // Safari has issues with cached range requests see:
+  // https://github.com/mozilla/pdf.js/issues/3260
+  // Last tested with version 6.0.4.
+  var isSafari = Object.prototype.toString.call(
+                  window.HTMLElement).indexOf('Constructor') > 0;
+
+  // Older versions of Android (pre 3.0) has issues with range requests, see:
+  // https://github.com/mozilla/pdf.js/issues/3381.
+  // Make sure that we only match webkit-based Android browsers,
+  // since Firefox/Fennec works as expected.
+  var regex = /Android\s[0-2][^\d]/;
+  var isOldAndroid = regex.test(navigator.userAgent);
+
+  if (isSafari || isOldAndroid) {
+    PDFJS.disableRange = true;
+  }
+})();
+
+// Check if the browser supports manipulation of the history.
+(function checkHistoryManipulation() {
+  if (!window.history.pushState) {
+    PDFJS.disableHistory = true;
+  }
+})();
diff --git a/plugins/pdfviewer/viewer/debugger.js b/plugins/pdfviewer/viewer/debugger.js
index 7c2b7f3..da57fc3 100644
--- a/plugins/pdfviewer/viewer/debugger.js
+++ b/plugins/pdfviewer/viewer/debugger.js
@@ -14,6 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+/* globals PDFJS */
 
 'use strict';
 
@@ -45,7 +46,7 @@ var FontInspector = (function FontInspectorClosure() {
     }
   }
   function textLayerClick(e) {
-    if (!e.target.dataset.fontName || e.target.tagName != 'DIV')
+    if (!e.target.dataset.fontName || e.target.tagName.toUpperCase() !== 'DIV')
       return;
     var fontName = e.target.dataset.fontName;
     var selects = document.getElementsByTagName('input');
@@ -219,26 +220,45 @@ var StepperManager = (function StepperManagerClosure() {
 
 // 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 glyphsToString(glyphs) {
+    var out = '';
+    for (var i = 0; i < glyphs.length; i++) {
+      if (glyphs[i] === null) {
+        out += ' ';
+      } else {
+        out += glyphs[i].fontChar;
+      }
+    }
+    return out;
+  }
+
+  var glyphCommands = {
+    'showText': 0,
+    'showSpacedText': 0,
+    'nextLineShowText': 0,
+    'nextLineSetSpacingShowText': 2
+  };
+
   function Stepper(panel, pageIndex, initialBreakPoints) {
     this.panel = panel;
-    this.len = 0;
     this.breakPoint = 0;
     this.nextBreakPoint = null;
     this.pageIndex = pageIndex;
     this.breakPoints = initialBreakPoints;
     this.currentIdx = -1;
+    this.operatorListIdx = 0;
   }
   Stepper.prototype = {
-    init: function init(IRQueue) {
-      // 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;
-      }
+    init: function init() {
       var panel = this.panel;
-      this.len = IRQueue.fnArray.length;
       var content = c('div', 'c=continue, s=step');
       var table = c('table');
       content.appendChild(table);
@@ -249,15 +269,18 @@ var Stepper = (function StepperClosure() {
       headerRow.appendChild(c('th', 'Idx'));
       headerRow.appendChild(c('th', 'fn'));
       headerRow.appendChild(c('th', 'args'));
-
+      panel.appendChild(content);
+      this.table = table;
+    },
+    updateOperatorList: function updateOperatorList(operatorList) {
       var self = this;
-      for (var i = 0; i < IRQueue.fnArray.length; i++) {
+      for (var i = this.operatorListIdx; i < operatorList.fnArray.length; i++) {
         var line = c('tr');
         line.className = 'line';
         line.dataset.idx = i;
-        table.appendChild(line);
+        this.table.appendChild(line);
         var checked = this.breakPoints.indexOf(i) != -1;
-        var args = IRQueue.argsArray[i] ? IRQueue.argsArray[i] : [];
+        var args = operatorList.argsArray[i] ? operatorList.argsArray[i] : [];
 
         var breakCell = c('td');
         var cbox = c('input');
@@ -271,17 +294,36 @@ var Stepper = (function StepperClosure() {
             else
               self.breakPoints.splice(self.breakPoints.indexOf(x), 1);
             StepperManager.saveBreakPoints(self.pageIndex, self.breakPoints);
-          }
+          };
         })(i);
 
         breakCell.appendChild(cbox);
         line.appendChild(breakCell);
         line.appendChild(c('td', i.toString()));
-        line.appendChild(c('td', IRQueue.fnArray[i]));
-        line.appendChild(c('td', args.join(', ')));
+        var fn = operatorList.fnArray[i];
+        var decArgs = args;
+        if (fn in glyphCommands) {
+          var glyphIndex = glyphCommands[fn];
+          var glyphs = args[glyphIndex];
+          var decArgs = args.slice();
+          var newArg;
+          if (fn === 'showSpacedText') {
+            newArg = [];
+            for (var j = 0; j < glyphs.length; j++) {
+              if (typeof glyphs[j] === 'number') {
+                newArg.push(glyphs[j]);
+              } else {
+                newArg.push(glyphsToString(glyphs[j]));
+              }
+            }
+          } else {
+            newArg = glyphsToString(glyphs);
+          }
+          decArgs[glyphIndex] = newArg;
+        }
+        line.appendChild(c('td', fn));
+        line.appendChild(c('td', JSON.stringify(decArgs)));
       }
-      panel.appendChild(content);
-      var self = this;
     },
     getNextBreakPoint: function getNextBreakPoint() {
       this.breakPoints.sort(function(a, b) { return a - b; });
@@ -376,7 +418,7 @@ var Stats = (function Stats() {
       wrapper.appendChild(title);
       wrapper.appendChild(statsDiv);
       stats.push({ pageNumber: pageNumber, div: wrapper });
-      stats.sort(function(a, b) { return a.pageNumber - b.pageNumber});
+      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);
diff --git a/plugins/pdfviewer/viewer/images/annotation-check.svg b/plugins/pdfviewer/viewer/images/annotation-check.svg
index f28f0e8..71cd16d 100644
--- a/plugins/pdfviewer/viewer/images/annotation-check.svg
+++ b/plugins/pdfviewer/viewer/images/annotation-check.svg
@@ -2,7 +2,8 @@
 <svg
    xmlns="http://www.w3.org/2000/svg"
    width="40"
-   height="40">
+   height="40"
+   viewBox="0 0 40 40">
   <path
      d="M 1.5006714,23.536225 6.8925879,18.994244 14.585721,26.037937 34.019683,4.5410479 38.499329,9.2235032 14.585721,35.458952 z"
      id="path4"
diff --git a/plugins/pdfviewer/viewer/images/annotation-comment.svg b/plugins/pdfviewer/viewer/images/annotation-comment.svg
index b2aee63..86f1f17 100644
--- a/plugins/pdfviewer/viewer/images/annotation-comment.svg
+++ b/plugins/pdfviewer/viewer/images/annotation-comment.svg
@@ -2,7 +2,8 @@
 <svg
    xmlns="http://www.w3.org/2000/svg"
    height="40"
-   width="40">
+   width="40"
+   viewBox="0 0 40 40">
   <rect
      style="fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
      width="33.76017"
diff --git a/plugins/pdfviewer/viewer/images/annotation-help.svg b/plugins/pdfviewer/viewer/images/annotation-help.svg
index 349112e..00938fe 100644
--- a/plugins/pdfviewer/viewer/images/annotation-help.svg
+++ b/plugins/pdfviewer/viewer/images/annotation-help.svg
@@ -2,7 +2,8 @@
 <svg
    xmlns="http://www.w3.org/2000/svg"
    width="40"
-   height="40">
+   height="40"
+   viewBox="0 0 40 40">
   <g
      transform="translate(0,-60)"
      id="layer1">
diff --git a/plugins/pdfviewer/viewer/images/annotation-insert.svg b/plugins/pdfviewer/viewer/images/annotation-insert.svg
index 60fbf95..519ef68 100644
--- a/plugins/pdfviewer/viewer/images/annotation-insert.svg
+++ b/plugins/pdfviewer/viewer/images/annotation-insert.svg
@@ -2,7 +2,8 @@
 <svg
    xmlns="http://www.w3.org/2000/svg"
    width="64"
-   height="64">
+   height="64"
+   viewBox="0 0 64 64">
   <path
      d="M 32.003143,1.4044602 57.432701,62.632577 6.5672991,62.627924 z"
      style="fill:#ffff00;fill-opacity:0.94117647;fill-rule:nonzero;stroke:#000000;stroke-width:1.00493038;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
diff --git a/plugins/pdfviewer/viewer/images/annotation-key.svg b/plugins/pdfviewer/viewer/images/annotation-key.svg
index c0bbb09..8d09d53 100644
--- a/plugins/pdfviewer/viewer/images/annotation-key.svg
+++ b/plugins/pdfviewer/viewer/images/annotation-key.svg
@@ -2,7 +2,8 @@
 <svg
    xmlns="http://www.w3.org/2000/svg"
    width="64"
-   height="64">
+   height="64"
+   viewBox="0 0 64 64">
   <path
      d="M 25.470843,9.4933766 C 25.30219,12.141818 30.139101,14.445969 34.704831,13.529144 40.62635,12.541995 41.398833,7.3856498 35.97505,5.777863 31.400921,4.1549155 25.157674,6.5445892 25.470843,9.4933766 z M 4.5246282,17.652051 C 4.068249,11.832873 9.2742983,5.9270407 18.437379,3.0977088 29.751911,-0.87185184 45.495663,1.4008022 53.603953,7.1104009 c 9.275765,6.1889221 7.158128,16.2079421 -3.171076,21.5939521 -1.784316,1.635815 -6.380222,1.21421 -7.068351,3.186186 -1.04003,0.972427 -1.288046,2.050158 -1.232864,3.168203 1.015111,2.000108 -3.831548,1.633216 -3.270553,3.759574 0.589477,5.264544 -0.179276,10.53738 -0.362842,15.806257 -0.492006,2.184998 1.163456,4.574232 -0.734888,6.610642 -2.482919,2.325184 -7.30604,2.189143 -9.193497,-0.274767 -2.733688,-1.740626 -8.254447,-3.615254 -6.104247,-6.339626 3.468112,-1.708686 -2.116197,-3.449897 0.431242,-5.080274 5.058402,-1.39256 -2.393215,-2.304318 -0.146889,-4.334645 3.069198,-0.977415 2.056986,-2.518352 -0.219121,-3.540397 
 1.876567,-1.807151 1.484149,-4.868919 -2.565455,-5.942205 0.150866,-1.805474 2.905737,-4.136876 -1.679967,-5.20493 C 10.260902,27.882167 4.6872697,22.95045 4.5245945,17.652051 z"
      id="path604"
diff --git a/plugins/pdfviewer/viewer/images/annotation-newparagraph.svg b/plugins/pdfviewer/viewer/images/annotation-newparagraph.svg
index 6c179fd..38d2497 100644
--- a/plugins/pdfviewer/viewer/images/annotation-newparagraph.svg
+++ b/plugins/pdfviewer/viewer/images/annotation-newparagraph.svg
@@ -2,7 +2,8 @@
 <svg
    xmlns="http://www.w3.org/2000/svg"
    width="64"
-   height="64">
+   height="64"
+   viewBox="0 0 64 64">
   <path
      d="M 32.003143,10.913072 57.432701,53.086929 6.567299,53.083723 z"
      id="path2985"
diff --git a/plugins/pdfviewer/viewer/images/annotation-note.svg b/plugins/pdfviewer/viewer/images/annotation-note.svg
index ed16943..7017365 100644
--- a/plugins/pdfviewer/viewer/images/annotation-note.svg
+++ b/plugins/pdfviewer/viewer/images/annotation-note.svg
@@ -2,7 +2,8 @@
 <svg
    xmlns="http://www.w3.org/2000/svg"
    width="40"
-   height="40">
+   height="40"
+   viewBox="0 0 40 40">
   <rect
      width="36.075428"
      height="31.096582"
diff --git a/plugins/pdfviewer/viewer/images/annotation-paragraph.svg b/plugins/pdfviewer/viewer/images/annotation-paragraph.svg
index 6fd90c1..6ae5212 100644
--- a/plugins/pdfviewer/viewer/images/annotation-paragraph.svg
+++ b/plugins/pdfviewer/viewer/images/annotation-paragraph.svg
@@ -2,7 +2,8 @@
 <svg
    xmlns="http://www.w3.org/2000/svg"
    width="40"
-   height="40">
+   height="40"
+   viewBox="0 0 40 40">
   <rect
      width="33.76017"
      height="33.76017"
diff --git a/plugins/pdfviewer/viewer/images/secondaryToolbarButton-firstPage.png b/plugins/pdfviewer/viewer/images/secondaryToolbarButton-firstPage.png
new file mode 100644
index 0000000..59b3d34
Binary files /dev/null and b/plugins/pdfviewer/viewer/images/secondaryToolbarButton-firstPage.png differ
diff --git a/plugins/pdfviewer/viewer/images/secondaryToolbarButton-lastPage.png b/plugins/pdfviewer/viewer/images/secondaryToolbarButton-lastPage.png
new file mode 100644
index 0000000..3967cc6
Binary files /dev/null and b/plugins/pdfviewer/viewer/images/secondaryToolbarButton-lastPage.png differ
diff --git a/plugins/pdfviewer/viewer/images/secondaryToolbarButton-rotateCcw.png b/plugins/pdfviewer/viewer/images/secondaryToolbarButton-rotateCcw.png
new file mode 100644
index 0000000..ffe6293
Binary files /dev/null and b/plugins/pdfviewer/viewer/images/secondaryToolbarButton-rotateCcw.png differ
diff --git a/plugins/pdfviewer/viewer/images/secondaryToolbarButton-rotateCw.png b/plugins/pdfviewer/viewer/images/secondaryToolbarButton-rotateCw.png
new file mode 100644
index 0000000..1fe2a8f
Binary files /dev/null and b/plugins/pdfviewer/viewer/images/secondaryToolbarButton-rotateCw.png differ
diff --git a/plugins/pdfviewer/viewer/images/shadow.png b/plugins/pdfviewer/viewer/images/shadow.png
new file mode 100644
index 0000000..dd009dc
Binary files /dev/null and b/plugins/pdfviewer/viewer/images/shadow.png differ
diff --git a/plugins/pdfviewer/viewer/images/toolbarButton-presentationMode.png b/plugins/pdfviewer/viewer/images/toolbarButton-presentationMode.png
new file mode 100644
index 0000000..fa73095
Binary files /dev/null and b/plugins/pdfviewer/viewer/images/toolbarButton-presentationMode.png differ
diff --git a/plugins/pdfviewer/viewer/images/toolbarButton-secondaryToolbarToggle-rtl.png b/plugins/pdfviewer/viewer/images/toolbarButton-secondaryToolbarToggle-rtl.png
new file mode 100644
index 0000000..9793024
Binary files /dev/null and b/plugins/pdfviewer/viewer/images/toolbarButton-secondaryToolbarToggle-rtl.png differ
diff --git a/plugins/pdfviewer/viewer/images/toolbarButton-secondaryToolbarToggle.png b/plugins/pdfviewer/viewer/images/toolbarButton-secondaryToolbarToggle.png
new file mode 100644
index 0000000..ddd8a87
Binary files /dev/null and b/plugins/pdfviewer/viewer/images/toolbarButton-secondaryToolbarToggle.png differ
diff --git a/plugins/pdfviewer/viewer/images/toolbarButton-sidebarToggle-rtl.png b/plugins/pdfviewer/viewer/images/toolbarButton-sidebarToggle-rtl.png
new file mode 100644
index 0000000..d9946fd
Binary files /dev/null and b/plugins/pdfviewer/viewer/images/toolbarButton-sidebarToggle-rtl.png differ
diff --git a/plugins/pdfviewer/viewer/images/toolbarButton-viewOutline-rtl.png b/plugins/pdfviewer/viewer/images/toolbarButton-viewOutline-rtl.png
new file mode 100644
index 0000000..d57a12c
Binary files /dev/null and b/plugins/pdfviewer/viewer/images/toolbarButton-viewOutline-rtl.png differ
diff --git a/plugins/pdfviewer/viewer/l10n.js b/plugins/pdfviewer/viewer/l10n.js
index 5435631..f13c8d6 100644
--- a/plugins/pdfviewer/viewer/l10n.js
+++ b/plugins/pdfviewer/viewer/l10n.js
@@ -1,30 +1,31 @@
-/** Copyright (c) 2011-2012 Fabien Cazenave, Mozilla.
-  *
-  * Permission is hereby granted, free of charge, to any person obtaining a copy
-  * of this software and associated documentation files (the "Software"), to
-  * deal in the Software without restriction, including without limitation the
-  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-  * sell copies of the Software, and to permit persons to whom the Software is
-  * furnished to do so, subject to the following conditions:
-  *
-  * The above copyright notice and this permission notice shall be included in
-  * all copies or substantial portions of the Software.
-  *
-  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-  * IN THE SOFTWARE.
-  */
+/**
+ * Copyright (c) 2011-2013 Fabien Cazenave, Mozilla.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
 /*
   Additional modifications for PDF.js project:
     - Disables language initialization on page loading;
-    - Adds fallback argument to the getL10nData;
-    - Removes consoleLog and simplifies consoleWarn;
+    - Removes consoleWarn and consoleLog and use console.log/warn directly.
     - Removes window._ assignment.
 */
+
 /*jshint browser: true, devel: true, es5: true, globalstrict: true */
 'use strict';
 
@@ -36,13 +37,21 @@ document.webL10n = (function(window, document, undefined) {
   var gMacros = {};
   var gReadyState = 'loading';
 
-  // read-only setting -- we recommend to load l10n resources synchronously
-  var gAsyncResourceLoading = true;
 
-  // debug helpers
-  function consoleWarn(message) {
-    console.log('[l10n] ' + message);
-  };
+  /**
+   * Synchronously loading l10n resources significantly minimizes flickering
+   * from displaying the app with non-localized strings and then updating the
+   * strings. Although this will block all script execution on this page, we
+   * expect that the l10n resources are available locally on flash-storage.
+   *
+   * As synchronous XHR is generally considered as a bad idea, we're still
+   * loading l10n resources asynchronously -- but we keep this in a setting,
+   * just in case... and applications using this library should hide their
+   * content until the `localized' event happens.
+   */
+
+  var gAsyncResourceLoading = true; // read-only
+
 
   /**
    * DOM helpers for the so-called "HTML API".
@@ -55,6 +64,12 @@ document.webL10n = (function(window, document, undefined) {
     return document.querySelectorAll('link[type="application/l10n"]');
   }
 
+  function getL10nDictionary() {
+    var script = document.querySelector('script[type="application/l10n"]');
+    // TODO: support multiple and external JSON dictionaries
+    return script ? JSON.parse(script.innerHTML) : null;
+  }
+
   function getTranslatableChildren(element) {
     return element ? element.querySelectorAll('*[data-l10n-id]') : [];
   }
@@ -70,7 +85,7 @@ document.webL10n = (function(window, document, undefined) {
       try {
         args = JSON.parse(l10nArgs);
       } catch (e) {
-        consoleWarn('could not parse arguments for #' + l10nId);
+        console.warn('could not parse arguments for #' + l10nId);
       }
     }
     return { id: l10nId, args: args };
@@ -78,9 +93,41 @@ document.webL10n = (function(window, document, undefined) {
 
   function fireL10nReadyEvent(lang) {
     var evtObject = document.createEvent('Event');
-    evtObject.initEvent('localized', false, false);
+    evtObject.initEvent('localized', true, false);
     evtObject.language = lang;
-    window.dispatchEvent(evtObject);
+    document.dispatchEvent(evtObject);
+  }
+
+  function xhrLoadText(url, onSuccess, onFailure, asynchronous) {
+    onSuccess = onSuccess || function _onSuccess(data) {};
+    onFailure = onFailure || function _onFailure() {
+      console.warn(url + ' not found.');
+    };
+
+    var xhr = new XMLHttpRequest();
+    xhr.open('GET', url, asynchronous);
+    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;
+
+    // in Firefox OS with the app:// protocol, trying to XHR a non-existing
+    // URL will raise an exception here -- hence this ugly try...catch.
+    try {
+      xhr.send(null);
+    } catch (e) {
+      onFailure();
+    }
   }
 
 
@@ -108,7 +155,7 @@ document.webL10n = (function(window, document, undefined) {
    */
 
   function parseResource(href, lang, successCallback, failureCallback) {
-    var baseURL = href.replace(/\/[^\/]*$/, '/');
+    var baseURL = href.replace(/[^\/]*$/, '') || './';
 
     // handle escaped characters (backslashes) in a string
     function evalString(text) {
@@ -171,16 +218,17 @@ document.webL10n = (function(window, document, undefined) {
 
           // key-value pair
           var tmp = line.match(reSplit);
-          if (tmp && tmp.length == 3)
+          if (tmp && tmp.length == 3) {
             dictionary[tmp[1]] = evalString(tmp[2]);
+          }
         }
       }
 
       // import another *.properties file
       function loadImport(url) {
-        loadResource(url, function(content) {
+        xhrLoadText(url, function(content) {
           parseRawLines(content, false); // don't allow recursive imports
-        }, false, false); // load synchronously
+        }, null, false); // load synchronously
       }
 
       // fill the dictionary
@@ -188,29 +236,8 @@ document.webL10n = (function(window, document, undefined) {
       return dictionary;
     }
 
-    // load the specified resource file
-    function loadResource(url, onSuccess, onFailure, asynchronous) {
-      var xhr = new XMLHttpRequest();
-      xhr.open('GET', url, asynchronous);
-      if (xhr.overrideMimeType) {
-        xhr.overrideMimeType('text/plain; charset=utf-8');
-      }
-      xhr.onreadystatechange = function() {
-        if (xhr.readyState == 4) {
-          if (xhr.status == 200 || xhr.status === 0) {
-            if (onSuccess)
-              onSuccess(xhr.responseText);
-          } else {
-            if (onFailure)
-              onFailure();
-          }
-        }
-      };
-      xhr.send(null);
-    }
-
     // load and parse l10n data (warning: global variables are used here)
-    loadResource(href, function(response) {
+    xhrLoadText(href, function(response) {
       gTextData += response; // mostly for debug
 
       // parse *.properties text data into an l10n dictionary
@@ -233,13 +260,16 @@ document.webL10n = (function(window, document, undefined) {
       }
 
       // trigger callback
-      if (successCallback)
+      if (successCallback) {
         successCallback();
+      }
     }, failureCallback, gAsyncResourceLoading);
-  };
+  }
 
   // load and parse all resources for the specified locale
   function loadLocale(lang, callback) {
+    callback = callback || function _callback() {};
+
     clear();
     gLanguage = lang;
 
@@ -247,8 +277,17 @@ document.webL10n = (function(window, document, undefined) {
     // and load the resource files
     var langLinks = getL10nResourceLinks();
     var langCount = langLinks.length;
-    if (langCount == 0) {
-      consoleWarn('no resource to load, early way out');
+    if (langCount === 0) {
+      // we might have a pre-compiled dictionary instead
+      var dict = getL10nDictionary();
+      if (dict && dict.locales && dict.default_locale) {
+        console.log('using the embedded JSON directory, early way out');
+        gL10nData = dict.locales[lang] || dict.locales[dict.default_locale];
+        callback();
+      } else {
+        console.log('no resource to load, early way out');
+      }
+      // early way out
       fireL10nReadyEvent(lang);
       gReadyState = 'complete';
       return;
@@ -260,21 +299,20 @@ document.webL10n = (function(window, document, undefined) {
     onResourceLoaded = function() {
       gResourceCount++;
       if (gResourceCount >= langCount) {
-        if (callback) // execute the [optional] callback
-          callback();
+        callback();
         fireL10nReadyEvent(lang);
         gReadyState = 'complete';
       }
     };
 
     // load all resource files
-    function l10nResourceLink(link) {
+    function L10nResourceLink(link) {
       var href = link.href;
       var type = link.type;
       this.load = function(lang, callback) {
         var applied = lang;
         parseResource(href, lang, callback, function() {
-          consoleWarn(href + ' not found.');
+          console.warn(href + ' not found.');
           applied = '';
         });
         return applied; // return lang if found, an empty string if not found
@@ -282,10 +320,10 @@ document.webL10n = (function(window, document, undefined) {
     }
 
     for (var i = 0; i < langCount; i++) {
-      var resource = new l10nResourceLink(langLinks[i]);
+      var resource = new L10nResourceLink(langLinks[i]);
       var rv = resource.load(lang, onResourceLoaded);
       if (rv != lang) { // lang not found, used default resource instead
-        consoleWarn('"' + lang + '" resource not found');
+        console.warn('"' + lang + '" resource not found');
         gLanguage = '';
       }
     }
@@ -706,7 +744,7 @@ document.webL10n = (function(window, document, undefined) {
     // return a function that gives the plural form name for a given integer
     var index = locales2rules[lang.replace(/-.*$/, '')];
     if (!(index in pluralRules)) {
-      consoleWarn('plural form unknown for [' + lang + ']');
+      console.warn('plural form unknown for [' + lang + ']');
       return function() { return 'other'; };
     }
     return pluralRules[index];
@@ -723,8 +761,9 @@ document.webL10n = (function(window, document, undefined) {
       return str;
 
     // initialize _pluralRules
-    if (!gMacros._pluralRules)
+    if (!gMacros._pluralRules) {
       gMacros._pluralRules = getPluralRules(gLanguage);
+    }
     var index = '[' + gMacros._pluralRules(n) + ']';
 
     // try to find a [zero|one|two] key if it's defined
@@ -736,6 +775,8 @@ document.webL10n = (function(window, document, undefined) {
       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;
@@ -750,7 +791,7 @@ document.webL10n = (function(window, document, undefined) {
   function getL10nData(key, args, fallback) {
     var data = gL10nData[key];
     if (!data) {
-      consoleWarn('#' + key + ' missing for [' + gLanguage + ']');
+      console.warn('#' + key + ' is undefined.');
       if (!fallback) {
         return null;
       }
@@ -766,7 +807,7 @@ document.webL10n = (function(window, document, undefined) {
     for (var prop in data) {
       var str = data[prop];
       str = substIndexes(str, args, key, prop);
-      str = substArguments(str, args);
+      str = substArguments(str, args, key);
       rv[prop] = str;
     }
     return rv;
@@ -799,8 +840,8 @@ document.webL10n = (function(window, document, undefined) {
   }
 
   // replace {{arguments}} with their values
-  function substArguments(str, args) {
-    var reArgs = /\{\{\s*([a-zA-Z\.]+)\s*\}\}/;
+  function substArguments(str, args, key) {
+    var reArgs = /\{\{\s*(.+?)\s*\}\}/;
     var match = reArgs.exec(str);
     while (match) {
       if (!match || match.length < 2)
@@ -808,12 +849,12 @@ document.webL10n = (function(window, document, undefined) {
 
       var arg = match[1];
       var sub = '';
-      if (arg in args) {
+      if (args && arg in args) {
         sub = args[arg];
       } else if (arg in gL10nData) {
         sub = gL10nData[arg][gTextProp];
       } else {
-        consoleWarn('could not find argument {{' + arg + '}}');
+        console.log('argument {{' + arg + '}} for #' + key + ' is undefined.');
         return str;
       }
 
@@ -833,23 +874,21 @@ document.webL10n = (function(window, document, undefined) {
     // get the related l10n object
     var data = getL10nData(l10n.id, l10n.args);
     if (!data) {
-      consoleWarn('#' + l10n.id + ' missing for [' + gLanguage + ']');
+      console.warn('#' + l10n.id + ' is undefined.');
       return;
     }
 
     // translate element (TODO: security checks?)
-    // for the node content, replace the content of the first child textNode
-    // and clear other child textNodes
     if (data[gTextProp]) { // XXX
-      if (element.children.length === 0) {
+      if (getChildElementCount(element) === 0) {
         element[gTextProp] = data[gTextProp];
       } else {
-        var children = element.childNodes,
-            found = false;
+        // this element has element children: replace the content of the first
+        // (non-empty) child textNode and clear other child textNodes
+        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].textContent)) { // XXX
-            // using nodeValue seems cross-browser
+          if (children[i].nodeType === 3 && /\S/.test(children[i].nodeValue)) {
             if (found) {
               children[i].nodeValue = '';
             } else {
@@ -858,8 +897,11 @@ document.webL10n = (function(window, document, undefined) {
             }
           }
         }
+        // if no (non-empty) textNode is found, insert a textNode before the
+        // first element child.
         if (!found) {
-          consoleWarn('unexpected error, could not translate element content');
+          var textNode = document.createTextNode(data[gTextProp]);
+          element.insertBefore(textNode, element.firstChild);
         }
       }
       delete data[gTextProp];
@@ -870,6 +912,21 @@ document.webL10n = (function(window, document, undefined) {
     }
   }
 
+  // webkit browsers don't currently support 'children' on SVG elements...
+  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;
+  }
+
   // translate an HTML subtree
   function translateFragment(element) {
     element = element || document.documentElement;
@@ -888,10 +945,21 @@ document.webL10n = (function(window, document, undefined) {
   // cross-browser API (sorry, oldIE doesn't support getters & setters)
   return {
     // get a localized string
-    get: function(key, args, fallback) {
-      var data = getL10nData(key, args, {textContent: fallback});
-      if (data) { // XXX double-check this
-        return 'textContent' in data ? data.textContent : '';
+    get: function(key, args, fallbackString) {
+      var index = key.lastIndexOf('.');
+      var prop = gTextProp;
+      if (index > 0) { // An attribute has been specified
+        prop = key.substr(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 + '}}';
     },
@@ -916,7 +984,21 @@ document.webL10n = (function(window, document, undefined) {
     translate: translateFragment,
 
     // this can be used to prevent race conditions
-    getReadyState: function() { return gReadyState; }
+    getReadyState: function() { return gReadyState; },
+    ready: function(callback) {
+      if (!callback) {
+        return;
+      } else if (gReadyState == 'complete' || gReadyState == 'interactive') {
+        window.setTimeout(callback);
+      } else if (document.addEventListener) {
+        document.addEventListener('localized', callback);
+      } else if (document.attachEvent) {
+        document.documentElement.attachEvent('onpropertychange', function(e) {
+          if (e.propertyName === 'localized') {
+            callback();
+          }
+        });
+      }
+    }
   };
-
 }) (window, document);
diff --git a/plugins/pdfviewer/viewer/locale/ar/viewer.properties b/plugins/pdfviewer/viewer/locale/ar/viewer.properties
index 954436e..0c6e943 100644
--- a/plugins/pdfviewer/viewer/locale/ar/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/ar/viewer.properties
@@ -30,17 +30,25 @@ zoom_out_label=تصغير
 zoom_in.title=تكبير
 zoom_in_label=تكبير
 zoom.title=التكبير
-print.title=طباعة
-print_label=طباعة
 fullscreen.title=ملء الشاشة
 fullscreen_label=ملء الشاشة
 open_file.title=فتح الملف
 open_file_label=فتح
+print.title=طباعة
+print_label=طباعة
 download.title=تحميل
 download_label=تحميل
 bookmark.title=المشهد الحالي (نسخ أو فتح في نافذة جديدة)
 bookmark_label=المشهد الحالي
 
+# Secondary toolbar and context menu
+page_rotate_cw.title=تدوير مع عقارب الساعة
+page_rotate_cw.label=تدوير مع عقارب الساعة
+page_rotate_cw_label=تدوير مع عقارب الساعة
+page_rotate_ccw.title=تدوير عكس عقارب الساعة
+page_rotate_ccw.label=تدوير عكس عقارب الساعة
+page_rotate_ccw_label=تدوير عكس عقارب الساعة
+
 # Tooltips and alt text for side panel toolbar buttons
 # (the _label strings are alt text for the buttons, the .title strings are
 # tooltips)
@@ -53,9 +61,6 @@ thumbs_label=الصور المصغرة
 findbar.title=البحث في المستند
 findbar_label=بحث
 
-# Document outline messages
-no_outline=لا يوجد ملخص
-
 # Thumbnails panel item (tooltip and alt text for images)
 # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
 # number.
@@ -64,10 +69,6 @@ thumb_page_title=الصفحة {{page}}
 # number.
 thumb_page_canvas=صورة مصغرة من الصفحة {{page}}
 
-# Context menu
-page_rotate_cw.label=تدوير مع عقارب الساعة
-page_rotate_ccw.label=تدوير عكس عقارب الساعة
-
 # Find panel button title and messages
 find=بحث
 find_terms_not_found=(لا يوجد)
@@ -101,11 +102,11 @@ page_scale_actual=الحجم الحقيقي
 loading_error_indicator=خطأ
 loading_error=حدث خطأ أثناء تحميل وثيقه الـPDF
 
-# LOCALIZATION NOTE (text_annotation_type): This is used as a tooltip.
+# 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=[ملاحظة {{type}}]
+text_annotation_type.alt=[ملاحظة {{type}}]
 request_password=الـPDF محمي بكلمة مرور:
 
 printing_not_supported=تحذير: الطباعة ليست مدعومة كليًا في هذا المتصفح.
diff --git a/plugins/pdfviewer/viewer/locale/ca/viewer.properties b/plugins/pdfviewer/viewer/locale/ca/viewer.properties
index 26e8774..b3f97c3 100644
--- a/plugins/pdfviewer/viewer/locale/ca/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/ca/viewer.properties
@@ -30,19 +30,31 @@ zoom_out_label=Reduir
 zoom_in.title=Ampliar
 zoom_in_label=Ampliar
 zoom.title=Ampliació
-print.title=Imprimir
-print_label=Imprimir
-fullscreen.title=Pantalla completa
-fullscreen_label=Pantalla completa
 presentation_mode.title=Canviar a mode de Presentació
 presentation_mode_label=Mode de Presentació
 open_file.title=Obrir arxiu
 open_file_label=Obrir
+print.title=Imprimir
+print_label=Imprimir
 download.title=Descarregar
 download_label=Descarregar
 bookmark.title=Vista actual (copiï o obri en una finestra nova)
 bookmark_label=Vista actual
 
+# Secondary toolbar and context menu
+first_page.title=Primera pàgina
+first_page.label=Primera pàgina
+first_page_label=Primera pàgina
+last_page.title=Darrera pàgina
+last_page.label=Darrera pàgina
+last_page_label=Darrera pàgina
+page_rotate_cw.title=Rotar sentit horari
+page_rotate_cw.label=Rotar sentit horari
+page_rotate_cw_label=Rotar sentit horari
+page_rotate_ccw.title=Rotar sentit anti-horari
+page_rotate_ccw.label=Rotar sentit anti-horari
+page_rotate_ccw_label=Rotar sentit anti-horari
+
 # Tooltips and alt text for side panel toolbar buttons
 # (the _label strings are alt text for the buttons, the .title strings are
 # tooltips)
@@ -55,9 +67,6 @@ thumbs_label=Miniatures
 findbar.title=Cercar en el document
 findbar_label=Cercar
 
-# Document outline messages
-no_outline=No hi ha cap esquema disponible
-
 # Thumbnails panel item (tooltip and alt text for images)
 # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
 # number.
@@ -69,11 +78,6 @@ thumb_page_canvas=Miniatura de la pàgina {{page}}
 # Find panel button title and messages
 find=Cercar
 find_terms_not_found=(No trobat)
-# Context menu
-first_page.label=Primera pàgina
-last_page.label=Darrera pàgina
-page_rotate_cw.label=Rotar sentit horari
-page_rotate_ccw.label=Rotar sentit anti-horari
 
 # Find panel button title and messages
 find_label=Cerca:
@@ -117,11 +121,11 @@ loading_error_indicator=Error
 loading_error=Ha ocorregut un error mentres es carregava el PDF.
 invalid_file_error=Invàlid o fitxer PDF corrupte.
 
-# LOCALIZATION NOTE (text_annotation_type): This is used as a tooltip.
+# 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=[Anotació {{type}}]
+text_annotation_type.alt=[Anotació {{type}}]
 request_password=El PDF està protegit amb una contrasenya:
 
 printing_not_supported=Avís: La impressió no és compatible totalment en aquest navegador.
diff --git a/plugins/pdfviewer/viewer/locale/cs/viewer.properties b/plugins/pdfviewer/viewer/locale/cs/viewer.properties
index 629480f..69ae650 100644
--- a/plugins/pdfviewer/viewer/locale/cs/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/cs/viewer.properties
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-bookmark.title=Aktuální zobrazení(zkopírovat nebo otevřít v novém okně)
+bookmark.title=Aktuální zobrazení (zkopírovat nebo otevřít v novém okně)
 previous.title=Předchozí stránka
 next.title=Další stránka
 print.title=Tisk
@@ -24,9 +24,9 @@ error_less_info=Méně informací
 error_close=Zavřít
 error_build=PDF.JS Build: {{build}}
 error_message=Zpráva:{{message}}
-error_stack=Stack:{{stack}}
-error_file=Soubor:{{file}}
-error_line=Řádek:{{line}}
+error_stack=Stack: {{stack}}
+error_file=Soubor: {{file}}
+error_line=Řádek: {{line}}
 page_scale_width=Šířka stránky
 page_scale_fit=Stránka
 page_scale_auto=Automatické přibližení
@@ -34,15 +34,14 @@ page_scale_actual=Skutečná velikost
 toggle_slider.title=Přepnout posuvník
 thumbs.title=Zobrazit náhledy
 outline.title=Zobrazit osnovu dokumentu
-loading=Načítám... {{percent}}%
+loading=Načítám... {{percent}} %
 loading_error_indicator=Chyba
 loading_error=Došlo k chybě při načítání PDF.
 rendering_error=Došlo k chybě při vykreslování stránky.
 page_label=Stránka:
-page_of=z{{pageCount}}
-no_outline=Žádné osnovy k dispozici
+page_of=z {{pageCount}}
 open_file.title=Otevřít soubor
-text_annotation_type=[{{type}}Anotace]
+text_annotation_type.alt=[{{type}}Anotace]
 toggle_slider_label=Přepnout posuvník
 thumbs_label=Náhledy
 outline_label=Přehled dokumentu
@@ -54,6 +53,6 @@ download_label=Stáhnout
 zoom_out_label=Zmenšit
 zoom_in_label=Přiblížit
 zoom.title=Zvětšit
-thumb_page_title=Stránka{{page}}
+thumb_page_title=Stránka {{page}}
 thumb_page_canvas=Náhled stránky {{page}}
 request_password=PDF je chráněn heslem:
diff --git a/plugins/pdfviewer/viewer/locale/cy/viewer.properties b/plugins/pdfviewer/viewer/locale/cy/viewer.properties
new file mode 100644
index 0000000..2133dab
--- /dev/null
+++ b/plugins/pdfviewer/viewer/locale/cy/viewer.properties
@@ -0,0 +1,134 @@
+# 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=Nesaf Tudalen
+next_label=Nesaf
+
+# LOCALIZATION NOTE (page_label, page_of):
+# These strings are concatenated to form the "Page: X of Y" string.
+# Do not translate "{{pageCount}}", it will be substituted with a number
+# representing the total number of pages.
+page_label=Tudalen:
+page_of=o {{pageCount}}
+
+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 Cyflwyn
+presentation_mode_label=Modd Cyflwyniad
+open_file.title=Agor Ffeil
+open_file_label=Agor
+print.title=Llwyth
+print_label=Argraffu
+download.title=Lawrlwytho
+download_label=Llwytho i Lawr
+bookmark.title=Golwg cyfredol (copïo neu agor ffenestr newydd)
+bookmark_label=Golwg cyfredol
+
+# 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 yn Glocwedd
+page_rotate_cw.label=Cylchdroi yn Glocwedd
+page_rotate_cw_label=Cylchdroi yn Glocwedd
+page_rotate_ccw.title=Cylchdroi yn Wrthglocwedd
+page_rotate_ccw.label=Cylchdroi yn Wrthglocwedd
+page_rotate_ccw_label=Cylchdroi yn Wrthglocwedd
+
+# 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_label=Toglo'r Bar Ochr
+outline.title=Dangos Amlinell Dogfen
+outline_label=Amlinelliad Dogfen
+thumbs.title=Dangos Lluniau Bach
+thumbs_label=Lluniau Bach
+findbar.title=Canfod yn y Ddogfen
+findbar_label=Canfod
+
+# 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_label=Canfod:
+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_reached_top=Wedi cyrraedd brig y dudalen, parhau o'r gwaelod
+find_reached_bottom=Wedi cyrraedd diwedd y dudalen, parhau o'r brig
+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
+
+# Loading indicator messages
+loading_error_indicator=Gwall
+loading_error=Digwyddodd gwall wrth lwytho'r PDF.
+invalid_file_error=Annilys neu llygredig ffeil PDF.
+missing_file_error=Ar goll ffeil 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"
+text_annotation_type.alt=[Anodiad {{type}} ]
+request_password=PDF yn cael ei diogelu gan gyfrinair:
+invalid_password=Cyfrinair annilys.
+
+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 hanablu: methu defnyddio ffontiau PDF mewnblanedig.
+document_colors_disabled=Nid oes caniatâd i ddogfennau PDF i ddefnyddio eu lliwiau eu hunain: Mae 'Caniatáu i dudalennau ddefnyddio eu lliwiau eu hunain' wedi ei atal yn y porwr.
diff --git a/plugins/pdfviewer/viewer/locale/da/viewer.properties b/plugins/pdfviewer/viewer/locale/da/viewer.properties
index c710189..fe97b4b 100644
--- a/plugins/pdfviewer/viewer/locale/da/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/da/viewer.properties
@@ -30,17 +30,31 @@ zoom_out_label=Zoom ud
 zoom_in.title=Zoom ind
 zoom_in_label=Zoom ind
 zoom.title=Zoom
-print_label=Udskriv
-print.title=Udskriv
 fullscreen.title=Fuldskærm
 fullscreen_label=Fuldskærm
 open_file.title=Ã…bn fil
 open_file_label=Ã…bn
+print_label=Udskriv
+print.title=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
+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=Rotér med uret
+page_rotate_cw.label=Rotér med uret
+page_rotate_cw_label=Rotér med uret
+page_rotate_ccw.title=Roéer mod uret
+page_rotate_ccw.label=Roéer mod uret
+page_rotate_ccw_label=Roéer mod uret
+
 # Tooltips of alternativ billedtekst til sidepanelet
 # (_label strengene er den alternative billedtekst, mens .title
 # strengene er tooltips
@@ -53,9 +67,6 @@ thumbs_label=Thumbnails
 findbar.title=Søg i dokumentet
 findbar_label=Søg
 
-# Dokumentoversigtsbeskeder
-no_outline=Ingen dokumentoversigt tilgængelig
-
 # Thumbnails panelet (tooltips og alt. billedtekst)
 # Oversættelsesnote: "{{page}}" vil blive erstattet af det
 # egentlige sidetal
@@ -64,19 +75,27 @@ thumb_page_title=Side {{page}}
 # egentlige sidetal
 thumb_page_canvas=Thumbnail af side {{page}}
 
-# Søgepanelet
-find=Søg
-find_terms_not_found=(Ikke fundet)
+# Søgepanelet samt knapper og beskeder
+find_label=Find:
+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 forekomster
+find_match_case_label=Forskel på store og små bogstaver
+find_reached_top=Toppen af siden blev nået, fortsatte fra bunden
+find_reached_bottom=Bunden af siden blev nået, fortsatte fra toppen
+find_not_found=Der blev ikke fundet noget
 
 # Fejlpanel
 error_more_info=Mere information
 error_less_info=Mindre information
 error_close=Luk
-# Oversættelsesnote: "{{build}}" vil blive erstattet af PDF.JS build nummer
-#
-error_build=PDF.JS Build: {{build}}
-# Oversættelsesnote: "{{message}}" vil blive erstattet af en (engelsk) fejlbesked
-#
+# Oversættelsesnote: "{{version}}" og "{{build}}" vil blive erstattet af
+# PDF.JS versionen og build ID
+error_version_info=PDF.js v{{version}} (build: {{build}})
+# Oversættelsesnote: "{{message}}" vil blive erstattet af
+# en (engelsk) fejlbesked
 error_message=Besked: {{message}}
 # Oversættelsesnote: "{{stack}}" vil blive erstattet af et stack trace
 #
@@ -96,12 +115,18 @@ page_scale_actual=Faktisk størrelse
 # Indlæsningsindikator (load ikon)
 loading_error_indicator=Fejl
 loading_error=Der skete en fejl under indlæsningen af PDF-filen
+invalid_file_error=Ugyldig eller beskadiget PDF-fil
+missing_file_error=Manglende PDF-fil
 
 # Oversættelsesnote: Dette vil blive brugt som et tooltip
 # "{{type}}" vil blive ersattet af en kommentar type fra en liste
 # defineret i PDF specifikationen (32000-1:2008 Table 169 – Annotation types).
 # Nogle almindelige typer er f.eks.: "Check", "Text", "Comment" og "Note"
-text_annotation_type=[{{type}} Kommentar]
+text_annotation_type.alt=[{{type}} Kommentar]
 request_password=PDF filen er beskyttet med et kodeord:
+invalid_password=Ugyldigt kodeord.
 
-printing_not_supported=Advarsel: Denne browser er ikke fuldt understøttet ved udskrift
+printing_not_supported=Advarsel: Denne browser er ikke fuldt understøttet ved udskrift.
+printing_not_ready=Advarsel: PDF-filen er ikke helt klar til udskrivning.
+web_fonts_disabled=Web skrifttyper er slået fra: kan ikke benytte de indlejrede skrifttyper.
+web_colors_disabled=Web farver are slået fra.
diff --git a/plugins/pdfviewer/viewer/locale/de/viewer.properties b/plugins/pdfviewer/viewer/locale/de/viewer.properties
index 0e37c01..5988c82 100644
--- a/plugins/pdfviewer/viewer/locale/de/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/de/viewer.properties
@@ -30,22 +30,36 @@ zoom_out_label=Verkleinern
 zoom_in.title=Vergrößern
 zoom_in_label=Vergrößern
 zoom.title=Zoom
-print.title=Drucken
-print_label=Drucken
 presentation_mode.title=Zum Präsentationsmodus wechseln
 presentation_mode_label=Bildschirmpräsentation
 open_file.title=Datei öffnen
 open_file_label=Öffnen
+print.title=Drucken
+print_label=Drucken
 download.title=Herunterladen
 download_label=Herunterladen
 bookmark.title=Aktuelle Ansicht (Kopieren oder in einem neuen Fenster öffnen)
 bookmark_label=Aktuelle Ansicht
 
+# Secondary toolbar and context menu
+first_page.title=Erste Seite
+first_page.label=Erste Seite
+first_page_label=Erste Seite
+last_page.title=Letzte Seite
+last_page.label=Letzte Seite
+last_page_label=Letzte Seite
+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=Entgegen dem Uhrzeigersinn drehen
+page_rotate_ccw.label=Entgegen dem Uhrzeigersinn drehen
+page_rotate_ccw_label=Entgegen dem Uhrzeigersinn drehen
+
 # Tooltips and alt text for side panel toolbar buttons
 # (the _label strings are alt text for the buttons, the .title strings are
 # tooltips)
-toggle_slider.title=Seitenleiste anzeigen
-toggle_slider_label=Seitenleiste
+toggle_sidebar.title=Seitenleiste anzeigen
+toggle_sidebar_label=Seitenleiste
 outline.title=Zeige Inhaltsverzeichnis
 outline_label=Inhaltsverzeichnis
 thumbs.title=Zeige Vorschaubilder
@@ -53,9 +67,6 @@ thumbs_label=Vorschaubilder
 findbar.title=Im Dokument suchen
 findbar_label=Suchen
 
-# Document outline messages
-no_outline=Kein Inhaltsverzeichnis verfügbar
-
 # Thumbnails panel item (tooltip and alt text for images)
 # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
 # number.
@@ -64,12 +75,6 @@ thumb_page_title=Seite {{page}}
 # number.
 thumb_page_canvas=Vorschau von Seite {{page}}
 
-# Context menu
-first_page.label=Erste Seite
-last_page.label=Letzte Seite
-page_rotate_cw.label=Im Uhrzeigersinn drehen
-page_rotate_ccw.label=Entgegen dem Uhrzeigersinn drehen
-
 # Find panel button title and messages
 find_label=Suchen:
 find_previous.title=Das vorherige Auftreten des Ausdrucks suchen
@@ -112,11 +117,11 @@ loading_error_indicator=Fehler
 loading_error=Das PDF konnte nicht geladen werden.
 invalid_file_error=Ungültige oder beschädigte PDF-Datei.
 
-# LOCALIZATION NOTE (text_annotation_type): This is used as a tooltip.
+# 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=[{{type}} Annotation]
+text_annotation_type.alt=[{{type}} Annotation]
 request_password=Das PDF ist passwortgeschützt:
 
 printing_not_supported=Warnung: Drucken wird durch diesen Browser nicht vollständig unterstützt.
diff --git a/plugins/pdfviewer/viewer/locale/el/viewer.properties b/plugins/pdfviewer/viewer/locale/el/viewer.properties
new file mode 100644
index 0000000..dfa852f
--- /dev/null
+++ b/plugins/pdfviewer/viewer/locale/el/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=Προηγούμενη σελίδα
+previous_label=Προηγούμενη
+next.title=Επόμενη σελίδα
+next_label=Επόμενη
+
+# LOCALIZATION NOTE (page_label, page_of):
+# These strings are concatenated to form the "Page: X of Y" string.
+# Do not translate "{{pageCount}}", it will be substituted with a number
+# representing the total number of pages.
+page_label=Σελίδα:
+page_of= {{pageCount}}
+
+zoom_out.title=Σμίκρυνση
+zoom_out_label=Σμίκρυνση
+zoom_in.title=Μεγέθυνση
+zoom_in_label=Μεγέθυνση
+zoom.title=Μεγέθυνση
+print.title=Εκτύπωση
+print_label=Εκτύπωση
+presentation_mode.title=Μετάβαση σε λειτουργία παρουσίασης
+presentation_mode_label=Λειτουργία παρουσίασης
+open_file.title=Άνοιγμα αρχείου
+open_file_label=Άνοιγμα
+download.title=Λήψη
+download_label=Λήψη
+bookmark.title=Τρέχουσα προβολή (αντίγραφο ή άνοιγμα σε νέο παράθυρο)
+bookmark_label=Τρέχουσα προβολή
+
+# 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=Εναλλαγή προβολής πλευρικής στήλης
+outline.title=Προβολή διάρθρωσης κειμένου
+outline_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}}
+
+# Context menu
+first_page.label=Μετάβαση στην πρώτη σελίδα
+last_page.label=Μετάβαση στην τελευταία σελίδα
+page_rotate_cw.label=Δεξιόστροφη περιστροφή
+page_rotate_ccw.label=Αριστερόστροφη περιστροφή
+
+# Find panel button title and messages
+find_label=Εύρεση:
+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=Πραγματικό μέγεθος
+
+# Loading indicator messages
+loading_error_indicator=Σφάλμα
+loading_error=Προέκυψε σφάλμα κατά τη φόρτωση του PDF.
+invalid_file_error=Μη έγκυρο ή κατεστραμμένο αρχείο PDF.
+missing_file_error=Λείπει το αρχείο PDF.
+
+# LOCALIZATION NOTE (text_annotation_type): 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=[{{type}} Σημείωση]
+request_password=Το PDF προστατεύεται από κωδικό:
+invalid_password=Μη έγκυρος κωδικός.
+
+printing_not_supported=Προειδοποίηση: Η εκτύπωση δεν υποστηρίζεται πλήρως από αυτόν τον περιηγητή.
+printing_not_ready=Προσοχή: Το PDF δεν είναι πλήρως φορτωμένο για εκτύπωση.
+web_fonts_disabled=Οι γραμματοσειρές Web είναι απενεργοποιημένες: δεν είναι δυνατή η χρήση ενσωματωμένων γραμματοσειρών PDF.
+document_colors_disabled=Στα έγγραφα PDF δεν επιτρέπεται να χρησιμοποιούν τα δικά τους χρώματα: Η ρύθμιση \'Επιτρέπεται στις σελίδες να επιλέξουν τα δικά τους χρώματα \' είναι απενεργοποιημένη στο πρόγραμμα περιήγησης.
diff --git a/plugins/pdfviewer/viewer/locale/en-US/viewer.properties b/plugins/pdfviewer/viewer/locale/en-US/viewer.properties
index 8c86eed..629bfb2 100644
--- a/plugins/pdfviewer/viewer/locale/en-US/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/en-US/viewer.properties
@@ -30,22 +30,38 @@ zoom_out_label=Zoom Out
 zoom_in.title=Zoom In
 zoom_in_label=Zoom In
 zoom.title=Zoom
-print.title=Print
-print_label=Print
 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
+
 # Tooltips and alt text for side panel toolbar buttons
 # (the _label strings are alt text for the buttons, the .title strings are
 # tooltips)
-toggle_slider.title=Toggle Slider
-toggle_slider_label=Toggle Slider
+toggle_sidebar.title=Toggle Sidebar
+toggle_sidebar_label=Toggle Sidebar
 outline.title=Show Document Outline
 outline_label=Document Outline
 thumbs.title=Show Thumbnails
@@ -53,9 +69,6 @@ thumbs_label=Thumbnails
 findbar.title=Find in Document
 findbar_label=Find
 
-# Document outline messages
-no_outline=No Outline Available
-
 # Thumbnails panel item (tooltip and alt text for images)
 # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
 # number.
@@ -64,12 +77,6 @@ thumb_page_title=Page {{page}}
 # number.
 thumb_page_canvas=Thumbnail of Page {{page}}
 
-# Context menu
-first_page.label=Go to First Page
-last_page.label=Go to Last Page
-page_rotate_cw.label=Rotate Clockwise
-page_rotate_ccw.label=Rotate Counterclockwise
-
 # Find panel button title and messages
 find_label=Find:
 find_previous.title=Find the previous occurrence of the phrase
@@ -111,13 +118,19 @@ page_scale_actual=Actual Size
 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.
 
-# LOCALIZATION NOTE (text_annotation_type): This is used as a tooltip.
+# 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=[{{type}} Annotation]
-request_password=PDF is protected by a password:
+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.
+document_colors_disabled=PDF documents are not allowed to use their own colors: \'Allow pages to choose their own colors\' is deactivated in the browser.
diff --git a/plugins/pdfviewer/viewer/locale/es/viewer.properties b/plugins/pdfviewer/viewer/locale/es/viewer.properties
index 7fea36d..188cbed 100644
--- a/plugins/pdfviewer/viewer/locale/es/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/es/viewer.properties
@@ -1,107 +1,131 @@
-# 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_label, page_of):
-# These strings are concatenated to form the "Page: X of Y" string.
-# Do not translate "{{pageCount}}", it will be substituted with a number
-# representing the total number of pages.
-page_label=Página:
-page_of=de {{pageCount}}
-
-zoom_out.title=Reducir
-zoom_out_label=Reducir
-zoom_in.title=Ampliar
-zoom_in_label=Ampliar
-zoom.title=Ampliación
-print.title=Imprimir
-print_label=Imprimir
-fullscreen.title=Pantalla completa
-fullscreen_label=Pantalla completa
-open_file.title=Abrir archivo
-open_file_label=Abrir
-download.title=Descargar
-download_label=Descargar
-bookmark.title=Vista actual (copie o abra en una ventana nueva)
-bookmark_label=Vista actual
-
-# Tooltips and alt text for side panel toolbar buttons
-# (the _label strings are alt text for the buttons, the .title strings are
-# tooltips)
-toggle_slider.title=Alternar deslizador
-toggle_slider_label=Alternar deslizador
-outline.title=Mostrar esquema del documento
-outline_label=Esquema del documento
-thumbs.title=Mostrar miniaturas
-thumbs_label=Miniaturas
-findbar.title=Buscar en el documento
-findbar_label=Buscar
-
-# Document outline messages
-no_outline=No hay un esquema disponible
-
-# 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=Buscar
-find_terms_not_found=(No encontrado)
-
-# Error panel labels
-error_more_info=Más información
-error_less_info=Menos información
-error_close=Cerrar
-# LOCALIZATION NOTE (error_build): "{{build}}" will be replaced by the PDF.JS
-# build ID.
-error_build=Compilación de PDF.JS: {{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 mientras se renderizaba la página.
-
-# Predefined zoom values
-page_scale_width=Anchura de página
-page_scale_fit=Ajustar a la página
-page_scale_auto=Ampliación automática
-page_scale_actual=Tamaño real
-
-# Loading indicator messages
-loading_error_indicator=Error
-loading_error=Ocurrió un error mientras se cargaba el PDF.
-
-# LOCALIZATION NOTE (text_annotation_type): 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=[Anotación {{type}}]
-request_password=El PDF está protegido con una contraseña:
-
-printing_not_supported=Aviso: La impresión no es compatible totalmente con este navegador.
+# 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_label, page_of):
+# These strings are concatenated to form the "Page: X of Y" string.
+# Do not translate "{{pageCount}}", it will be substituted with a number
+# representing the total number of pages.
+page_label=Página:
+page_of=de {{pageCount}}
+
+zoom_out.title=Reducir
+zoom_out_label=Reducir
+zoom_in.title=Aumentar
+zoom_in_label=Aumentar
+zoom.title=Ampliación
+presentation_mode.title=Cambiar al modo de presentación
+presentation_mode_label=Modo de presentación
+open_file.title=Abrir un archivo
+open_file_label=Abrir
+print.title=Imprimir
+print_label=Imprimir
+download.title=Descargar
+download_label=Descargar
+bookmark.title=Vista actual (copie o abra en una ventana nueva)
+bookmark_label=Vista actual
+
+# Secondary toolbar and context menu
+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
+
+# 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=Mostrar u ocultar la barra lateral
+toggle_sidebar_label=Conmutar la barra lateral
+outline.title=Mostrar el esquema del documento
+outline_label=Esquema del documento
+thumbs.title=Mostrar las miniaturas
+thumbs_label=Miniaturas
+findbar.title=Buscar en el documento
+findbar_label=Buscar
+
+# 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_label=Buscar:
+find_previous.title=Ir a la frase encontrada anterior
+find_previous_label=Anterior
+find_next.title=Ir a la frase encontrada siguiente
+find_next_label=Siguiente
+find_highlight=Resaltar todo
+find_match_case_label=Coincidir mayúsculas y minúsculas
+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
+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}} (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=Anchura de la página
+page_scale_fit=Ajustar a la página
+page_scale_auto=Ampliación automática
+page_scale_actual=Tamaño real
+
+# Loading indicator messages
+loading_error_indicator=Error
+loading_error=Ocurrió un error al cargar el PDF.
+invalid_file_error=El archivo PDF no es válido o está dañado.
+missing_file_error=Falta el archivo PDF.
+
+# LOCALIZATION NOTE (text_annotation_type): 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}}]
+request_password=El archivo PDF está protegido por una contraseña:
+
+printing_not_supported=Aviso: Este navegador no es compatible completamente con la impresión.
+printing_not_ready=Aviso: El PDF no se ha cargado completamente para su impresión.
+web_fonts_disabled=Se han desactivado los tipos de letra web: no se pueden usar los tipos de letra incrustados en el PDF.
+web_colors_disabled=Se han desactivado los colores web.
diff --git a/plugins/pdfviewer/viewer/locale/fa/viewer.properties b/plugins/pdfviewer/viewer/locale/fa/viewer.properties
new file mode 100644
index 0000000..8586490
--- /dev/null
+++ b/plugins/pdfviewer/viewer/locale/fa/viewer.properties
@@ -0,0 +1,134 @@
+# Copyright 2013 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_label, page_of):
+# These strings are concatenated to form the "Page: X of Y" string.
+# Do not translate "{{pageCount}}", it will be substituted with a number
+# representing the total number of pages.
+page_label=صفحه:
+page_of=از {{pageCount}}
+
+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=چرخش در خلاف جهت عقربه‌های ساعت
+
+# 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=تغییر وضع نوار کناری
+outline.title=نمایش رئوس مطالب سند
+outline_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_label=پیداکردن:
+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=پی‌دی‌اف.جی‌اس نسخهٔ {{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=اندازهٔ حقیقی
+
+# Loading indicator messages
+loading_error_indicator=خطا
+loading_error=خطایی هنگامی بارگیری پی‌دی‌اف روی داد.
+invalid_file_error=پروندهٔ پی‌دی‌اف نامعتیر یا خراب شده.
+missing_file_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}}]
+request_password=پی‌دی‌اف توسط یک گذرواژه محافظت شده‌است:
+invalid_password=گذرواژهٔ نامعتبر.
+
+printing_not_supported=اخطار: چاپ توسط این مرورگر به‌صورت کامل پشتبانی نشده‌است.
+printing_not_ready=اخطار: پی‌دی‌اف برای چاپ به‌طور کامل بار نشده‌است.
+web_fonts_disabled=قلم‌های وبی غیر فعال هستند: از قلم‌های توکار پی‌دی‌اف نتوانست استفاده شود.
+document_colors_disabled=اسناد پی‌دی‌اف اجازه ندارند که رنگ‌های خودشان را استفاده کنند: «اجازهٔ انتخاب صفحه‌ها برای انتخاب رنگ‌های خود» در مرورگر غیرفعال شده‌است.
diff --git a/plugins/pdfviewer/viewer/locale/fi/viewer.properties b/plugins/pdfviewer/viewer/locale/fi/viewer.properties
index 077b5ea..560c948 100644
--- a/plugins/pdfviewer/viewer/locale/fi/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/fi/viewer.properties
@@ -30,22 +30,36 @@ zoom_out_label=Suurenna
 zoom_in.title=Pienennä
 zoom_in_label=Pienennä
 zoom.title=Sivun suurennus
-print.title=Tulosta
-print_label=Tulosta
-fullscreen.title=Kokoruututila
-fullscreen_label=Kokoruututila
+presentation_mode.title=Esitystila
+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=Nykyinen näkymä (kopioi tai avaa uuteen ikkunaan)
 bookmark_label=Nykyinen näkymä
 
+# Secondary toolbar and context menu
+first_page.title=Ensimmäinen sivu
+first_page.label=Ensimmäinen sivu
+first_page_label=Ensimmäinen sivu
+last_page.title=Viimeinen sivu
+last_page.label=Viimeinen sivu
+last_page_label=Viimeinen sivu
+page_rotate_cw.title=Kierrä myötäpäivään
+page_rotate_cw.label=Kierrä myötäpäivään
+page_rotate_cw_label=Kierrä myötäpäivään
+page_rotate_ccw.title=Kierrä vastapäivään
+page_rotate_ccw.label=Kierrä vastapäivään
+page_rotate_ccw_label=Kierrä vastapäivään
+
 # Tooltips and alt text for side panel toolbar buttons
 # (the _label strings are alt text for the buttons, the .title strings are
 # tooltips)
-toggle_slider.title=Vaihda vieritysnäkymä
-toggle_slider_label=Vaihda vieritysnäkymä
+toggle_sidebar.title=Vaihda sivunäkymä
+toggle_sidebar_label=Vaihda sivunäkymä
 outline.title=Näytä asiakirjan jäsennys
 outline_label=Asiakirjan jäsennys
 thumbs.title=Näytä esikatselukuvat
@@ -53,9 +67,6 @@ thumbs_label=Esikatselukuvat
 findbar.title=Etsi asiakirjasta
 findbar_label=Etsi
 
-# Document outline messages
-no_outline=Jäsennystä ei ole tarjolla
-
 # Thumbnails panel item (tooltip and alt text for images)
 # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
 # number.
@@ -65,16 +76,24 @@ thumb_page_title=Sivu {{page}}
 thumb_page_canvas=Sivun {{page}} esikatselukuva
 
 # Find panel button title and messages
-find=Etsi
-find_terms_not_found=(Ei löytynyt)
+find_label=Etsi
+find_previous.title=Etsi edellinen
+find_previous_label=Edellinen
+find_next.title=Etsi seuraava
+find_next_label=Seuraava
+find_highlight=Korosta kaikki hakutulokset
+find_match_case_label=Hae täysin samanlaisia
+find_reached_top=Asiakirjan alku saavutettiin, jatkettiin lopusta
+find_reached_bottom=Asiakirjan loppu saavutettiin, jatkettiin alusta
+find_not_found=Ei löytynyt
 
 # Error panel labels
 error_more_info=Enemmän tietoa
 error_less_info=Vähemmän tietoa
 error_close=Sulje
-# LOCALIZATION NOTE (error_build): "{{build}}" will be replaced by the PDF.JS
-# build ID.
-error_build=PDF.JS rakennus: {{build}}
+# 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}} (rakennus: {{build}})
 # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
 # english string describing the error.
 error_message=Viesti: {{message}}
@@ -96,13 +115,15 @@ page_scale_actual=Todellinen koko
 # Loading indicator messages
 loading_error_indicator=Virhe
 loading_error=Virhe on tapahtunut PDF:ää ladattaessa.
+invalid_file_error=Virheellinen tai vioittunut PDF tiedosto.
+missing_file_error=PDF tiedostoa ei löytynyt.
 
-# LOCALIZATION NOTE (text_annotation_type): This is used as a tooltip.
+# 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).
+# the PDF spec (32000-1:2008 Table 169 – Annotation types).
 # Some common types are e.g.: "Check", "Text", "Comment", "Note"
-text_annotation_type=[{{type}} Selite]
+text_annotation_type.alt=[{{type}} Selite]
 request_password=PDF on salasanasuojattu:
 
 printing_not_supported=Varoitus: Tämä selain ei täysin tue tulostusta.
-
+web_fonts_disabled=Web fontit ovat poissa käytöstä: upotettuja PDF fontteja ei voida käyttää.
diff --git a/plugins/pdfviewer/viewer/locale/fr/viewer.properties b/plugins/pdfviewer/viewer/locale/fr/viewer.properties
index 1c9abfc..bbfc616 100644
--- a/plugins/pdfviewer/viewer/locale/fr/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/fr/viewer.properties
@@ -1,43 +1,79 @@
-# 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.
 
+# 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_label, page_of):
+# These strings are concatenated to form the "Page: X of Y" string.
+# Do not translate "{{pageCount}}", it will be substituted with a number
+# representing the total number of pages.
 page_label=Page :
 page_of=sur {{pageCount}}
+
 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
-print.title=Imprimer
-print_label=Imprimer
 presentation_mode.title=Basculer en mode présentation
 presentation_mode_label=Mode présentation
-open_file.title=Ouvrir le fichier
+open_file.title=Ouvrir un fichier
 open_file_label=Ouvrir
+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
-toggle_slider.title=Afficher/masquer le panneau latéral
-toggle_slider_label=Afficher/masquer le panneau latéral
+
+# Secondary toolbar and context menu
+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 anti-horaire
+page_rotate_ccw.label=Rotation anti-horaire
+page_rotate_ccw_label=Rotation anti-horaire
+
+# 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_label=Afficher/Masquer le panneau latéral
 outline.title=Afficher les signets
 outline_label=Signets du document
 thumbs.title=Afficher les vignettes
 thumbs_label=Vignettes
 findbar.title=Rechercher dans le document
 findbar_label=Rechercher
-no_outline=Aucun signet disponible
+
+# 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}}
-first_page.label=Aller à la première page
-last_page.label=Aller à la dernière page
-page_rotate_cw.label=Rotation horaire
-page_rotate_ccw.label=Rotation anti-horaire
 
 # Find panel button title and messages
 find_label=Rechercher :
@@ -47,25 +83,48 @@ find_next.title=Trouver la prochaine occurrence de la phrase
 find_next_label=Suivant
 find_highlight=Tout surligner
 find_match_case_label=Respecter la casse
-find_wrapped_to_bottom=Bas de la page atteint, poursuite depuis la fin
-find_wrapped_to_top=Bas de la page atteint, poursuite au début
+find_reached_top=Haut de la page atteint, poursuite depuis la fin
+find_reached_bottom=Bas de la page atteint, poursuite au début
 find_not_found=Phrase introuvable
 
+# Error panel labels
 error_more_info=Plus d'informations
 error_less_info=Moins d'informations
 error_close=Fermer
-error_build=Version de PDF.JS : {{build}}
+# 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
+
+# Loading indicator messages
 loading_error_indicator=Erreur
 loading_error=Une erreur s'est produite lors du chargement du fichier PDF.
-text_annotation_type=[Annotation {{type}}]
+invalid_file_error=Fichier PDF invalide ou corrompu.
+missing_file_error=Fichier PDF manquant.
+
+# LOCALIZATION NOTE (text_annotation_type): 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}}]
 request_password=Le PDF est protégé par un mot de passe :
+
 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/plugins/pdfviewer/viewer/locale/he/viewer.properties b/plugins/pdfviewer/viewer/locale/he/viewer.properties
index 6073521..38f280c 100644
--- a/plugins/pdfviewer/viewer/locale/he/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/he/viewer.properties
@@ -40,9 +40,8 @@ loading_error=אירעה שגיאה בעת טעינת קובץ PDF.
 rendering_error=אירעה שגיאה בעת עיבוד הדף.
 page_label=דף:
 page_of=מתוך {{pageCount}}
-no_outline=אין מתאר זמין
 open_file.title=פתיחת קובץ
-text_annotation_type=[{{type}} Annotation]
+text_annotation_type.alt=[{{type}} Annotation]
 toggle_slider_label=מתג החלקה
 thumbs_label=תמונות ממוזערות
 outline_label=מתאר מסמך
diff --git a/plugins/pdfviewer/viewer/locale/it/viewer.properties b/plugins/pdfviewer/viewer/locale/it/viewer.properties
index ac7ba36..a9311d7 100644
--- a/plugins/pdfviewer/viewer/locale/it/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/it/viewer.properties
@@ -19,7 +19,7 @@ print.title=Stampa
 download.title=Download
 zoom_out.title=Riduci Zoom
 zoom_in.title=Aumenta Zoom
-error_more_info=Più Informazioni
+error_more_info=Più Informazioni
 error_less_info=Meno Informazioni
 error_close=Chiudi
 error_build=PDF.JS Build: {{build}}
@@ -36,10 +36,9 @@ thumbs.title=Mostra Miniature
 outline.title=Mostra Indice Documento
 loading=Caricamento... {{percent}}%
 loading_error_indicator=Errore
-loading_error=È accaduto un errore durante il caricamento del PDF.
-rendering_error=È accaduto un errore durante il rendering della pagina.
+loading_error=È accaduto un errore durante il caricamento del PDF.
+rendering_error=È accaduto un errore durante il rendering della pagina.
 page_label=Pagina:
 page_of=di {{pageCount}}
-no_outline=Nessun Indice Disponibile
 open_file.title=Apri File
-text_annotation_type=[{{type}} Annotazione]
+text_annotation_type.alt=[{{type}} Annotazione]
\ No newline at end of file
diff --git a/plugins/pdfviewer/viewer/locale/ja/viewer.properties b/plugins/pdfviewer/viewer/locale/ja/viewer.properties
index 0d66c15..dd024ca 100644
--- a/plugins/pdfviewer/viewer/locale/ja/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/ja/viewer.properties
@@ -30,22 +30,38 @@ zoom_out_label=縮小
 zoom_in.title=拡大
 zoom_in_label=拡大
 zoom.title=ズーム
-print.title=印刷
-print_label=印刷
 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=左回転
+
 # Tooltips and alt text for side panel toolbar buttons
 # (the _label strings are alt text for the buttons, the .title strings are
 # tooltips)
-toggle_slider.title=サイドバーの切り替え
-toggle_slider_label=サイドバーの切り替え
+toggle_sidebar.title=サイドバーの切り替え
+toggle_sidebar_label=サイドバーの切り替え
 outline.title=文書の目次
 outline_label=文書の目次
 thumbs.title=縮小版
@@ -53,9 +69,6 @@ thumbs_label=縮小版
 findbar.title=検索
 findbar_label=検索
 
-# Document outline messages
-no_outline=利用可能な目次はありません
-
 # Thumbnails panel item (tooltip and alt text for images)
 # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
 # number.
@@ -64,12 +77,6 @@ thumb_page_title={{page}} ページ
 # number.
 thumb_page_canvas=ページの縮小版 {{page}}
 
-# Context menu
-first_page.label=最初のページへ移動
-last_page.label=最後のページへ移動
-page_rotate_cw.label=右回転
-page_rotate_ccw.label=左回転
-
 # Find panel button title and messages
 find_label=検索:
 find_previous.title=指定文字列に一致する 1 つ前の部分を検索します
@@ -78,16 +85,16 @@ find_next.title=指定文字列に一致する次の部分を検索します
 find_next_label=次へ
 find_highlight=すべて強調表示
 find_match_case_label=大文字/小文字を区別
-find_reached_top=文書先頭まで検索したので末尾に戻って検索しました。
-find_reached_bottom=文書末尾まで検索したので先頭に戻って検索しました。
+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.
+# 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.
@@ -109,15 +116,19 @@ page_scale_actual=実際のサイズ
 
 # Loading indicator messages
 loading_error_indicator=エラー
-loading_error=PDFの読み込み中にエラーが発生しました
-invalid_file_error=無効または破損したPDFファイル
+loading_error=PDF の読み込み中にエラーが発生しました
+invalid_file_error=無効または破損した PDF ファイル
+missing_file_error=PDF ファイルが見つかりません。
 
-# LOCALIZATION NOTE (text_annotation_type): This is used as a tooltip.
+# 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=[{{type}} 注釈]
-request_password=PDFはパスワードによって保護されています
+text_annotation_type.alt=[{{type}} 注釈]
+request_password=PDF はパスワードによって保護されています
+invalid_password=無効なパスワードです
 
 printing_not_supported=警告:このブラウザでは印刷が完全にサポートされていません
-web_fonts_disabled=Webフォントが無効になっています: 埋め込まれたPDFのフォントを使用することができません
+printing_not_ready=警告:PDF を印刷するための読み込みが終了していません
+web_fonts_disabled=Web フォントが無効になっています: 埋め込まれた PDF のフォントを使用することができません
+document_colors_disabled=PDF文書は、Web ページが指定した配色を使用することができません: \'Web ページが指定した配色\' はブラウザで無効になっています。
diff --git a/plugins/pdfviewer/viewer/locale/ko/viewer.properties b/plugins/pdfviewer/viewer/locale/ko/viewer.properties
new file mode 100644
index 0000000..4454f82
--- /dev/null
+++ b/plugins/pdfviewer/viewer/locale/ko/viewer.properties
@@ -0,0 +1,131 @@
+# 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_label, page_of):
+# These strings are concatenated to form the "Page: X of Y" string.
+# Do not translate "{{pageCount}}", it will be substituted with a number
+# representing the total number of pages.
+page_label=쪽:
+page_of=/ {{pageCount}}
+
+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
+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=반시계방향 회전
+
+# 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=사이드바 보이기/숨기기
+outline.title=문서 개요 보이기
+outline_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_label=찾기:
+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=실제 크기
+
+# Loading indicator messages
+loading_error_indicator=오류
+loading_error=PDF를 불러오던 중 오류가 발생했습니다.
+invalid_file_error=PDF 파일이 아니거나 깨진 파일입니다.
+missing_file_error=PDF 파일이 없습니다.
+
+# LOCALIZATION NOTE (text_annotation_type): 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=[{{type}} Annotation]
+request_password=암호로 보호되는 PDF파일입니다:
+
+printing_not_supported=경고: 이 브라우져는 출력을 완전히는 지원하지 않습니다.
+printing_not_ready=경고: 이 PDF 파일은 완전히 적재되지 않았습니다.
+web_fonts_disabled=웹 폰트 사용이 비활성되었습니다: 내장 PDF 폰트를 사용할 수 없습니다.
+web_colors_disabled=웹 컬러가 비활성되었습니다.
diff --git a/plugins/pdfviewer/viewer/locale/locale.properties b/plugins/pdfviewer/viewer/locale/locale.properties
index 1e50dab..d706328 100644
--- a/plugins/pdfviewer/viewer/locale/locale.properties
+++ b/plugins/pdfviewer/viewer/locale/locale.properties
@@ -7,18 +7,27 @@
 [cs]
 @import url(cs/viewer.properties)
 
+[cy]
+ at import url(cy/viewer.properties)
+
 [da]
 @import url(da/viewer.properties)
 
 [de]
 @import url(de/viewer.properties)
 
+[el]
+ at import url(el/viewer.properties)
+
 [en-US]
 @import url(en-US/viewer.properties)
 
 [es]
 @import url(es/viewer.properties)
 
+[fa]
+ at import url(fa/viewer.properties)
+
 [fi]
 @import url(fi/viewer.properties)
 
@@ -34,9 +43,18 @@
 [ja]
 @import url(ja/viewer.properties)
 
+[ko]
+ at import url(ko/viewer.properties)
+
+[lt]
+ at import url(lt/viewer.properties)
+
 [nl]
 @import url(nl/viewer.properties)
 
+[no]
+ at import url(no/viewer.properties)
+
 [pl]
 @import url(pl/viewer.properties)
 
@@ -55,6 +73,12 @@
 [sv]
 @import url(sv/viewer.properties)
 
+[tr]
+ at import url(tr/viewer.properties)
+
+[vi]
+ at import url(vi/viewer.properties)
+
 [zh-CN]
 @import url(zh-CN/viewer.properties)
 
diff --git a/plugins/pdfviewer/viewer/locale/lt/viewer.properties b/plugins/pdfviewer/viewer/locale/lt/viewer.properties
new file mode 100644
index 0000000..a1c35d7
--- /dev/null
+++ b/plugins/pdfviewer/viewer/locale/lt/viewer.properties
@@ -0,0 +1,129 @@
+# 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=Sekantis puslapis
+next_label=Sekantis
+
+# LOCALIZATION NOTE (page_label, page_of):
+# These strings are concatenated to form the "Page: X of Y" string.
+# Do not translate "{{pageCount}}", it will be substituted with a number
+# representing the total number of pages.
+page_label=Puslapis:
+page_of=iš {{pageCount}}
+
+zoom_out.title=Mažinti
+zoom_out_label=Mažinti
+zoom_in.title=Didinti
+zoom_in_label=Didinti
+zoom.title=Mastelis
+presentation_mode.title=Įjungti pateikimo būseną
+presentation_mode_label=Pateikimo būsena
+open_file.title=Atverti bylÄ…
+open_file_label=Atverti
+print.title=Spausdinti
+print_label=Spausdinti
+download.title=Atsiųsti
+download_label=Atsiųsti
+bookmark.title=Dabartinis rodymas (kopijuoti arba atidaryti naudojame lange)
+bookmark_label=Dabartinis rodymas
+
+# Secondary toolbar and context menu
+first_page.title=Nukreipimas į pirmą puslapį
+first_page.label=Nukreipimas į pirmą puslapį
+first_page_label=Nukreipimas į pirmą puslapį
+last_page.title=Nukreipimas į paskutinį puslapį
+last_page.label=Nukreipimas į paskutinį puslapį
+last_page_label=Nukreipimas į paskutinį puslapį
+page_rotate_cw.title=Sukimas pagal laikrodžio rodyklę
+page_rotate_cw.label=Sukimas pagal laikrodžio rodyklę
+page_rotate_cw_label=Sukimas pagal laikrodžio rodyklę
+page_rotate_ccw.title=Sukimas prieš laikrodžio rodyklę
+page_rotate_ccw.label=Sukimas prieš laikrodžio rodyklę
+page_rotate_ccw_label=Sukimas prieš laikrodžio rodyklę
+
+# 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=Perjungti Å¡oninÄ™ juostÄ…
+toggle_sidebar_label=Perjungti Å¡oninÄ™ juostÄ…
+outline.title=Rodyti dokumento turinį
+outline_label=Dokumento turinys
+thumbs.title=Rodyti miniatiūras 
+thumbs_label=Miniatiūros
+findbar.title=Paieška dokumente
+findbar_label=Paieška
+
+# 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=Puslapis {{page}}
+# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page
+# number.
+thumb_page_canvas=Miniatūra iš {{page}} puslapio
+
+# Find panel button title and messages
+find_label=Paieška:
+find_previous.title=Ankstesnis paieškos atitikmuo
+find_previous_label=Ankstesnis
+find_next.title=Sekantis paieškos atitikmuo
+find_next_label=Sekantis
+find_highlight=Pažymėti visus
+find_match_case_label=Skirti didžiąsias ir mažąsias raides
+find_reached_top=Pasiektas dokumento viršus, pradėti nuo apačios
+find_reached_bottom=Pasiekta dokumento apačia, pradėti nuo viršaus
+find_not_found=Paieškos rezultatų nėra
+
+# Error panel labels
+error_more_info=Daugiau informacijos
+error_less_info=Mažiau informacijos
+error_close=Uždaryti
+# 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=Žinutė: {{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=Byla: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=EilutÄ—: {{line}}
+rendering_error=Įvyko klaida atvaizduojant puslapį.
+
+# Predefined zoom values
+page_scale_width=Puslapio plotis
+page_scale_fit=Puslapio priderinimas
+page_scale_auto=Automatinis mastelis
+page_scale_actual=Numatytas dydis
+
+# Loading indicator messages
+loading_error_indicator=Klaida
+loading_error=PDF bylos įkelimo metu įvyko klaida.
+invalid_file_error=Neteisinga arba pažeista PDF byla.
+missing_file_error=Trūksta PDF bylos.
+
+# 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}} Pastaba]
+request_password=PDF byla yra apsaugota slaptažodžiu:
+
+printing_not_supported=Dėmesio: Naršyklė pilnai nepalaiko spausdinimo.
+web_fonts_disabled=Yra išjungti žiniatinklio šriftai: naudoti įterpus PDF šriftus nėra galima.
diff --git a/plugins/pdfviewer/viewer/locale/nl/viewer.properties b/plugins/pdfviewer/viewer/locale/nl/viewer.properties
index e0eddc6..9288af8 100644
--- a/plugins/pdfviewer/viewer/locale/nl/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/nl/viewer.properties
@@ -30,22 +30,38 @@ zoom_out_label=Uitzoomen
 zoom_in.title=Inzoomen
 zoom_in_label=Inzoomen
 zoom.title=Zoomen
-print.title=Afdrukken
-print_label=Afdrukken
 presentation_mode.title=Omschakelen 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.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 de eerste pagina gaan
+first_page.label=Naar de eerste pagina gaan
+first_page_label=Naar de eerste pagina gaan
+last_page.title=Naar de laatste pagina gaan
+last_page.label=Naar de laatste pagina gaan
+last_page_label=Naar de laatste pagina gaan
+page_rotate_cw.title=Met de klok mee roteren
+page_rotate_cw.label=Met de klok mee roteren
+page_rotate_cw_label=Met de klok mee roteren
+page_rotate_ccw.title=Tegen de klok in roteren
+page_rotate_ccw.label=Tegen de klok in roteren
+page_rotate_ccw_label=Tegen de klok in roteren
+
 # Tooltips and alt text for side panel toolbar buttons
 # (the _label strings are alt text for the buttons, the .title strings are
 # tooltips)
-toggle_slider.title=Zijbalk tonen/verbergen
-toggle_slider_label=Zijbalk tonen/verbergen
+toggle_sidebar.title=Zijbalk tonen/verbergen
+toggle_sidebar_label=Zijbalk tonen/verbergen
 outline.title=Documentstructuur tonen
 outline_label=Documentstructuur
 thumbs.title=Miniaturen tonen
@@ -53,9 +69,6 @@ thumbs_label=Miniaturen
 findbar.title=Zoeken in document
 findbar_label=Zoeken
 
-# Document outline messages
-no_outline=Geen documentstructuur beschikbaar
-
 # Thumbnails panel item (tooltip and alt text for images)
 # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
 # number.
@@ -64,12 +77,6 @@ thumb_page_title=Pagina {{page}}
 # number.
 thumb_page_canvas=Miniatuur van pagina {{page}}
 
-# Context menu
-first_page.label=Naar de eerste pagina gaan
-last_page.label=Naar de laatste pagina gaan
-page_rotate_cw.label=Met de klok mee roteren
-page_rotate_ccw.label=Tegen de klok in roteren
-
 # Find panel button title and messages
 find_label=Zoeken:
 find_previous.title=Het vorige voorkomen van de tekst zoeken
@@ -78,17 +85,17 @@ find_next.title=Het volgende voorkomen van de tekst zoeken
 find_next_label=Volgende
 find_highlight=Alles markeren
 find_match_case_label=Hoofdlettergevoelig
-find_wrapped_to_bottom=Onderkant van de pagina bereikt, doorgegaan vanaf de onderkant
-find_wrapped_to_top=Onderkant van de pagina bereikt, doorgegaan vanaf de bovenkant
+find_reached_top=Bovenkant van de pagina bereikt, doorgegaan vanaf de onderkant
+find_reached_bottom=Onderkant van de pagina bereikt, doorgegaan vanaf de bovenkant
 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_build): "{{build}}" will be replaced by the PDF.JS
-# build ID.
-error_build=PDF.JS-build: {{build}}
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=PDF.js versie {{version}} (build {{build}})
 # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
 # english string describing the error.
 error_message=Bericht: {{message}}
@@ -109,13 +116,21 @@ page_scale_actual=Werkelijke grootte
 
 # Loading indicator messages
 loading_error_indicator=Fout
-loading_error=Er is een fout opgetreden bij het laden van de PDF.
+loading_error=Er is een fout opgetreden bij het laden van het PDF-bestand.
+invalid_file_error=Ongeldig of corrupt PDF-bestand.
+missing_file_error=Ontbrekend PDF-bestand.
 
-# LOCALIZATION NOTE (text_annotation_type): This is used as a tooltip.
+# 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=[{{type}}-aantekening]
-request_password=Dit PDF-bestand is beveiligd met een wachtwoord:
+text_annotation_type.alt=[{{type}}-aantekening]
+password_label=Voer het wachtwoord in om dit PDF-bestand te openen.
+password_invalid=Onjuist wachtwoord. Probeer het opnieuw.
+password_ok=OK
+password_cancel=Annuleren
 
-printing_not_supported=Waarschuwing: afdrukken wordt niet volledig ondersteund door deze browser.
\ No newline at end of file
+printing_not_supported=Waarschuwing: afdrukken wordt niet volledig ondersteund door deze browser.
+printing_not_ready=Waarschuwing: het PDF-bestand is niet volledig geladen en kan daarom nog niet afgedrukt worden.
+web_fonts_disabled=Weblettertypen zijn uitgeschakeld: kan geen ingebakken PDF-lettertypen gebruiken.
+document_colors_disabled=PDF-documenten mogen hun eigen kleuren niet gebruiken. \"Pagina\'s toestaan om hun eigen kleuren te kiezen\" is uitgeschakeld in de browser.
diff --git a/plugins/pdfviewer/viewer/locale/no/viewer.properties b/plugins/pdfviewer/viewer/locale/no/viewer.properties
new file mode 100644
index 0000000..6c160fc
--- /dev/null
+++ b/plugins/pdfviewer/viewer/locale/no/viewer.properties
@@ -0,0 +1,134 @@
+# 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ørre Side
+previous_label=Førre
+next.title=Neste side
+next_label=Neste
+
+# LOCALIZATION NOTE (page_label, page_of):
+# These strings are concatenated to form the "Page: X of Y" string.
+# Do not translate "{{pageCount}}", it will be substituted with a number
+# representing the total number of pages.
+page_label=Side:
+page_of=av {{pageCount}}
+
+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=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 visning (kopier eller opne i nytt vindauge)
+bookmark_label=Gjeldende 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 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
+
+# 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=Veksle Sidebar
+toggle_sidebar_label=Veksle Sidebar
+outline.title=Vis Document Outline
+outline_label=Document Outline
+thumbs.title=Vis miniatyrbilder
+thumbs_label=Miniatyrbilder
+findbar.title=Finne i Dokument
+findbar_label=Finn
+
+# 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=Thumbnail av siden {{page}}
+
+# Find panel button title and messages
+find_label=Finn:
+find_previous.title=Finn tidlegare førekomst av frasa
+find_previous_label=Førre
+find_next.title=Finn neste førekomst av frasa
+find_next_label=Neste
+find_highlight=Uthev alle
+find_match_case_label=Skil store/små bokstavar
+find_reached_top=Nådde toppen av dokumentet, held fram frå botnen
+find_reached_bottom=Nådde botnen av dokumentet, held fram frå toppen
+find_not_found=Fann ikkje teksten
+
+# Error panel labels
+error_more_info=Meir 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}} (build: {{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 ved oppteikning av sida.
+
+# Predefined zoom values
+page_scale_width=Sidebreidde
+page_scale_fit=Tilpass til sida
+page_scale_auto=Automatisk zoom
+page_scale_actual=Verkeleg størrelse
+
+# 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.
+
+# 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]
+request_password=PDF er beskytta av eit passord:
+invalid_password=Ugyldig passord.
+
+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-fontar er avslått: Kan ikkje bruke innbundne PDF-fontar.
+document_colors_disabled=PDF-dokument har ikkje løyve til å nytte eigne fargar: \'Tillat sider å velje eigne fargar\' er slått av i nettlesaren.
diff --git a/plugins/pdfviewer/viewer/locale/pl/viewer.properties b/plugins/pdfviewer/viewer/locale/pl/viewer.properties
index d167369..61c3847 100644
--- a/plugins/pdfviewer/viewer/locale/pl/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/pl/viewer.properties
@@ -12,46 +12,121 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-bookmark.title=Aktualny widok (kopiuj lub otwórz w nowym oknie)
+# Main toolbar buttons (tooltips and alt text for images)
 previous.title=Poprzednia strona
+previous_label=Wstecz
 next.title=Następna strona
-print.title=Drukuj
-download.title=Pobierz
+next_label=Dalej
+
+# LOCALIZATION NOTE (page_label, page_of):
+# These strings are concatenated to form the "Page: X of Y" string.
+# Do not translate "{{pageCount}}", it will be substituted with a number
+# representing the total number of pages.
+page_label=Strona:
+page_of=z {{pageCount}}
+
 zoom_out.title=Pomniejsz
+zoom_out_label=Pomniejsz
 zoom_in.title=Powiększ
+zoom_in_label=Powiększ
+zoom.title=Powiększenie
+presentation_mode.title=Przełącz do trybu 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=Aktualny widok (kopiuj lub otwórz w nowym oknie)
+bookmark_label=Aktualny widok
+
+# Secondary toolbar and context menu
+first_page.title=Idź do pierwszej strony
+first_page.label=Idź do pierwszej strony
+first_page_label=Idź do pierwszej strony
+last_page.title=Idź do ostatniej strony
+last_page.label=Idź do ostatniej strony
+last_page_label=Idź do ostatniej strony
+page_rotate_cw.title=Obróć w prawo
+page_rotate_cw.label=Obróć w prawo
+page_rotate_cw_label=Obróć w prawo
+page_rotate_ccw.title=Obróć w lewo
+page_rotate_ccw.label=Obróć w lewo
+page_rotate_ccw_label=Obróć w lewo
+
+# 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=Pokaż/Ukryj panel boczny
+toggle_sidebar_label=Pokaż/Ukryj panel
+outline.title=Wyświetl konspekt dokumentu
+outline_label=Konspekt dokumentu
+thumbs.title=Wyświetl miniatury
+thumbs_label=Miniatury
+findbar.title=Szukaj w tekście
+findbar_label=Znajdź
+
+# 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_label=Znajdź:
+find_previous.title=Znajdź poprzednie wystąpienie ostatnio szukanej frazy
+find_previous_label=Poprzednie
+find_next.title=Znajdź następne wystąpienie ostatnio szukanej frazy
+find_next_label=Następne
+find_highlight=Podświetl
+find_match_case_label=Rozróżniaj wielkość liter
+find_reached_top=Początek strony. Wyszukiwanie od końca.
+find_reached_bottom=Koniec strony. Wyszukiwanie od poczÄ…tku.
+find_not_found=Szukany tekst nie został odnaleziony.
+
+# Error panel labels
 error_more_info=Więcej informacji
 error_less_info=Mniej informacji
 error_close=Zamknij
-error_build=Wersja PDF.JS: {{build}}
+# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be
+# replaced by the PDF.JS version and build ID.
+error_version_info=Wersja PDF.js: {{version}} (kompilacja: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
 error_message=Wiadomość: {{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=Linia: {{line}}
+rendering_error=Wystąpił błąd podczas wyświetlania strony.
+
+# Predefined zoom values
 page_scale_width=Szerokość strony
 page_scale_fit=Cała strona
 page_scale_auto=Automatyczne dopasowanie
 page_scale_actual=Rzeczywisty rozmiar
-toggle_slider.title=Włącz/wyłącz suwak
-thumbs.title=Wyświetl miniatury
-outline.title=Wyświetl konspekt dokumentu
-loading=Wczytywanie... {{percent}}%
+
+# Loading indicator messages
 loading_error_indicator=BÅ‚Ä…d
 loading_error=Wystąpił błąd podczas wczytywania pliku PDF.
-invalid_file_error=Błędny lub zepsuty plik PDF.
-rendering_error=Wystąpił błąd podczas wyświetlania strony.
-page_label=Strona:
-page_of=z {{pageCount}}
-no_outline=Konspekt nie jest dostępny
-open_file.title=Otwórz plik
-text_annotation_type=[Komentarz {{type}}]
-toggle_slider_label=Przełącz suwak
-thumbs_label=Miniatury
-outline_label=Konspekt dokumentu
-bookmark_label=Aktualny widok
-previous_label=Wstecz
-next_label=Dalej
-print_label=Drukuj
-download_label=Pobierz
-zoom_out_label=Pomniejsz
-zoom_in_label=Powiększ
-zoom.title=Powiększenie
+invalid_file_error=Błędny lub uszkodzony plik PDF.
+missing_file_error=Nie znaleziono pliku 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"
+text_annotation_type.alt=[Komentarz {{type}}]
+request_password=Plik PDF jest chroniony przez hasło:
+invalid_password=Nieprawidłowe hasło.
+
+printing_not_supported=Ostrzeżenie: Drukowanie nie jest w pełni obsługiwane przez tę przeglądarkę.
+printing_not_ready=Ostrzeżenie: Plik PDF nie jest całkowicie wczytany do drukowania.
+web_fonts_disabled=Web fonty są nieaktywne. Nie można korzystać z osadzonych czcionek w plikach PDF.
+document_colors_disabled=Dokumenty PDF nie mają pozwolenia na korzystanie z ich własnych kolorów: \'Pozwalaj stronom stosować inne kolory niż ustawione tutaj\' nie jest aktywne w przeglądarce.
diff --git a/plugins/pdfviewer/viewer/locale/pt-BR/viewer.properties b/plugins/pdfviewer/viewer/locale/pt-BR/viewer.properties
index 84ab287..edea5f1 100644
--- a/plugins/pdfviewer/viewer/locale/pt-BR/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/pt-BR/viewer.properties
@@ -40,6 +40,5 @@ loading_error=Um erro ocorreu ao carregar o arquivo.
 rendering_error=Um erro ocorreu ao apresentar a página.
 page_label=Página:
 page_of=de {{pageCount}}
-no_outline=Índice não disponível
 open_file.title=Abrir arquivo
-text_annotation_type=[{{type}} Anotações]
+text_annotation_type.alt=[{{type}} Anotações]
diff --git a/plugins/pdfviewer/viewer/locale/ro/viewer.properties b/plugins/pdfviewer/viewer/locale/ro/viewer.properties
index af983ab..ae37ec7 100644
--- a/plugins/pdfviewer/viewer/locale/ro/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/ro/viewer.properties
@@ -40,9 +40,8 @@ loading_error=S-a produs o eroare în timpul încărcării documentului.
 rendering_error=S-a produs o eroare în timpul procesării paginii.
 page_label=Pagina:
 page_of=din {{pageCount}}
-no_outline=Cuprins indisponibil
 open_file.title=Deschide fișier
-text_annotation_type=[Adnotare {{type}}]
+text_annotation_type.alt=[Adnotare {{type}}]
 toggle_slider_label=Vedere de ansamblu
 thumbs_label=Miniaturi
 outline_label=Cuprins
diff --git a/plugins/pdfviewer/viewer/locale/ru/viewer.properties b/plugins/pdfviewer/viewer/locale/ru/viewer.properties
index 7f2019b..f86b601 100644
--- a/plugins/pdfviewer/viewer/locale/ru/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/ru/viewer.properties
@@ -40,9 +40,8 @@ loading_error=Произошла ошибка во время загрузки P
 rendering_error=Произошла ошибка во время создания страницы.
 page_label=Страница:
 page_of=из {{pageCount}}
-no_outline=Содержание не доступно
 open_file.title=Открыть файл
-text_annotation_type=[Аннотация {{type}}]
+text_annotation_type.alt=[Аннотация {{type}}]
 toggle_slider_label=Вспомогательная панель
 thumbs_label=Уменьшенные изображения
 outline_label=Содержание документа
diff --git a/plugins/pdfviewer/viewer/locale/sr/viewer.properties b/plugins/pdfviewer/viewer/locale/sr/viewer.properties
index 04498a9..9fe3666 100644
--- a/plugins/pdfviewer/viewer/locale/sr/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/sr/viewer.properties
@@ -40,9 +40,8 @@ loading_error=Дошло је до грешке током учитавања П
 rendering_error=Дошло је до грешке приликом приказивања стране.
 page_label=Страна:
 page_of=од {{pageCount}}
-no_outline=Нема линија
 open_file.title=Отвори датотеку
-text_annotation_type=[{{type}} Annotation]
+text_annotation_type.alt=[{{type}} Annotation]
 toggle_slider_label=Клизач
 thumbs_label=Сличице
 outline_label=Документи у линијама
diff --git a/plugins/pdfviewer/viewer/locale/sv/viewer.properties b/plugins/pdfviewer/viewer/locale/sv/viewer.properties
index f21d59d..14426e3 100644
--- a/plugins/pdfviewer/viewer/locale/sv/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/sv/viewer.properties
@@ -30,32 +30,45 @@ zoom_out_label=Zooma ut
 zoom_in.title=Zooma in
 zoom_in_label=Zooma in
 zoom.title=Zooma
-print.title=Skriv ut
-print_label=Skriv ut
-presentation_mode.title=Växla till presentationsläge
-presentation_mode_label=Presentatationsläge
+presentation_mode.title=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=Ladda ner
 download_label=Ladda ner
 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
+
 # Tooltips and alt text for side panel toolbar buttons
 # (the _label strings are alt text for the buttons, the .title strings are
 # tooltips)
-toggle_slider.title=Visa/Dölj panel
-toggle_slider_label=Visa/Dölj panel
-outline.title=Visa dokumentdisposition
-outline_label=Dokumentdisposition
-thumbs.title=Visa miniatyrer
-thumbs_label=Miniatyrer
+toggle_sidebar.title=Visa/Dölj sidopanel
+toggle_sidebar_label=Visa/Dölj sidopanel
+outline.title=Visa bokmärken
+outline_label=Bokmärken
+thumbs.title=Visa sidminiatyrer
+thumbs_label=Sidminiatyrer
 findbar.title=Sök i dokumentet
 findbar_label=Sök
 
-# Document outline messages
-no_outline=Ingen dokumentdisposition tillgänglig
-
 # Thumbnails panel item (tooltip and alt text for images)
 # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
 # number.
@@ -64,12 +77,6 @@ thumb_page_title=Sida {{page}}
 # number.
 thumb_page_canvas=Miniatyr av sida {{page}}
 
-# Context menu
-first_page.label=Gå till första sidan
-last_page.label=GÃ¥ till sista sidan
-page_rotate_cw.label=Rotera medurs
-page_rotate_ccw.label=Rotera moturs
-
 # Find panel button title and messages
 find_label=Sök:
 find_previous.title=Hitta föregående förekomst av frasen
@@ -77,18 +84,18 @@ 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 versaler/gemener
-find_wrapped_to_bottom=Nådde toppen av sidan, fortsätter från slutet
-find_wrapped_to_top=Nådde slutet av sidan, fortsätter från toppen
+find_match_case_label=Matcha VERSALER/gemener
+find_reached_top=Kommit till början av dokumentet, börjat om
+find_reached_bottom=Kommit till slutet av dokumentet, börjat om
 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_build): "{{build}}" will be replaced by the PDF.JS
-# build ID.
-error_build=PDF.JS Bygge: {{build}}
+# 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}} (bygge: {{build}})
 # LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
 # english string describing the error.
 error_message=Meddelande: {{message}}
@@ -103,20 +110,28 @@ rendering_error=Ett fel inträffade när sidan renderades.
 
 # Predefined zoom values
 page_scale_width=Sidbredd
-page_scale_fit=Passa sida
-page_scale_auto=Automatisk Zoom
+page_scale_fit=Helsida
+page_scale_auto=Automatisk zoom
 page_scale_actual=Faktisk storlek
 
 # Loading indicator messages
 loading_error_indicator=Fel
-loading_error=Ett fel inträffade när PDFen skulle laddas.
+loading_error=Ett fel inträffade när PDF-filen laddades.
 invalid_file_error=Ogiltig eller korrupt PDF-fil.
+missing_file_error=PDF-filen saknas.
 
-# LOCALIZATION NOTE (text_annotation_type): This is used as a tooltip.
+# 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=[{{type}} Annotering]
-request_password=PDFen är skyddad av lösenord:
+text_annotation_type.alt=[{{type}}-anteckning]
+
+password_label=Ange lösenordet för att öppna PDF-filen.
+password_invalid=Felaktigt lösenord. Försök igen.
+password_ok=OK
+password_cancel=Avbryt
 
-printing_not_supported=Varning: Utskrifter stöds inte fullt ut av denna webbläsare.
\ No newline at end of file
+printing_not_supported=Varning: Utskrifter stöds inte fullt ut av denna webbläsare.
+printing_not_ready=Varning: Hela PDF-filen måste laddas innan utskrift kan ske.
+web_fonts_disabled=Webbtypsnitt är inaktiverade: Typsnitt inbäddade i PDF-filer kan inte användas.
+document_colors_disabled=PDF-dokument kan inte använda egna färger: \'Låt sidor använda egna färger\' är inaktiverat i webbläsaren.
diff --git a/plugins/pdfviewer/viewer/locale/tr/viewer.properties b/plugins/pdfviewer/viewer/locale/tr/viewer.properties
new file mode 100644
index 0000000..c4b172c
--- /dev/null
+++ b/plugins/pdfviewer/viewer/locale/tr/viewer.properties
@@ -0,0 +1,129 @@
+# 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_label, page_of):
+# These strings are concatenated to form the "Page: X of Y" string.
+# Do not translate "{{pageCount}}", it will be substituted with a number
+# representing the total number of pages.
+page_label=Sayfa:
+page_of=- {{pageCount}}
+
+zoom_out.title=UzaklaÅŸ
+zoom_out_label=UzaklaÅŸ
+zoom_in.title=Yakınlaş
+zoom_in_label=Yakınlaş
+zoom.title=Yakınlaştır
+presentation_mode.title=Sunum moduna geçiş yap
+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=Mevcut görünüm (kopyala yada yeni sayfada aç)
+bookmark_label=Mevcut Görünüm
+
+# Secondary toolbar and context menu
+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=Sağa Çevir
+page_rotate_cw.label=Sağa Çevir
+page_rotate_cw_label=Sağa Çevir
+page_rotate_ccw.title=Sola Çevir
+page_rotate_ccw.label=Sola Çevir
+page_rotate_ccw_label=Sola Çevir
+
+# 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 Menü Aç/Kapa
+toggle_sidebar_label=Yan Menü
+outline.title=Sayfa kenarlıklarını döster 
+outline_label=Sayfa Kenarlıkları
+thumbs.title=Önizleme resimlerini göster
+thumbs_label=Önizleme
+findbar.title=Döküman içerisinde bul
+findbar_label=Bul
+
+# 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}} sayfasının ön izlemesi
+
+# Find panel button title and messages
+find_label=Bul:
+find_previous.title=Önceki cümleyi bul
+find_previous_label=Önceki
+find_next.title=Sonraki cümleyi bul
+find_next_label=Sonraki
+find_highlight=Hepsini belirt
+find_match_case_label=harf eÅŸleme
+find_reached_top=Dosyanın en üstüne varıldı. Sonundan devam ediliyor
+find_reached_bottom=Dosyanın sonuna varıldı. Başından devam ediliyor
+find_not_found=Aramanızla eşleşen sonuç yok
+
+# Error panel labels
+error_more_info=Daha falza bilgi
+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 v{{version}} (build: {{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=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 oluÅŸturulurken bir hata meydana geldi.
+
+# Predefined zoom values
+page_scale_width=Sayfa GeniÅŸliÄŸi
+page_scale_fit=Sayfayı Sığdır
+page_scale_auto=Otomatik Yakınlaşma
+page_scale_actual=Gerçek boyut
+
+# Loading indicator messages
+loading_error_indicator=Hata
+loading_error=PDF yüklenirken hata.
+invalid_file_error=Geçersiz yada bozuk dosya.
+missing_file_error=PDF dosyası bulunamadı.
+
+# 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}} Not]
+request_password=PDF Åžifre ile korunmakta:
+
+printing_not_supported=Uyarı: Yazdırma işlemi bu tarayıcı ile tam desteklenmiyor.
+web_fonts_disabled=Web Fontları devre dışı. Web fontlar yüklenemiyor.
diff --git a/plugins/pdfviewer/viewer/locale/vi/viewer.properties b/plugins/pdfviewer/viewer/locale/vi/viewer.properties
new file mode 100644
index 0000000..a92af25
--- /dev/null
+++ b/plugins/pdfviewer/viewer/locale/vi/viewer.properties
@@ -0,0 +1,131 @@
+# 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 Tiếp
+next_label=Tiếp
+
+# LOCALIZATION NOTE (page_label, page_of):
+# These strings are concatenated to form the "Page: X of Y" string.
+# Do not translate "{{pageCount}}", it will be substituted with a number
+# representing the total number of pages.
+page_label=Trang:
+page_of=trên {{pageCount}}
+
+zoom_out.title=Phóng to
+zoom_out_label=Phóng to
+zoom_in.title=Thu nhỏ
+zoom_in_label=Thu nhỏ
+zoom.title=Thu phóng
+presentation_mode.title=Chuyển sang chế độ thuyết trình
+presentation_mode_label=Chế độ Thuyết trình
+open_file.title=Mở Tệp
+open_file_label=Tệp
+print.title=In
+print_label=In
+download.title=Tải xuống
+download_label=Tải xuống
+bookmark.title=Đánh dấu (sao chép hoặc mở cửa sổ mới)
+bookmark_label=Đánh dấu
+
+# Secondary toolbar and context menu
+first_page.title=Đến trang đầu tiên
+first_page.label=Đến trang đầu tiên
+first_page_label=Đến trang đầu tiên
+last_page.title=Đến trang cuối cùng
+last_page.label=Đến trang cuối cùng
+last_page_label=Đến trang cuối cùng
+page_rotate_cw.title=Quay sang phải
+page_rotate_cw.label=Quay sang phải
+page_rotate_cw_label=Quay sang phải
+page_rotate_ccw.title=Quay sang trái
+page_rotate_ccw.label=Quay sang trái
+page_rotate_ccw_label=Quay sang trá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=Đóng bật thanh lề
+toggle_sidebar_label=Bật tắt thanh lề
+outline.title=Hiện thị giản lược tài liệu
+outline_label=Giản lược
+thumbs.title=hiện tài liệu ở dạng ảnh thu nhỏ
+thumbs_label=Ảnh thu nhỏ
+findbar.title=Tìm trong văn bản
+findbar_label=Tìm kiếm
+
+# 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_label=Tìm:
+find_previous.title=Tìm kiếm câu xuất hiện phía trước
+find_previous_label=Về trước
+find_next.title=Tìm kiếm câu xuất hiện phía sau
+find_next_label=Tiếp theo
+find_highlight=Tô sáng toàn bộ
+find_match_case_label=Giống chữ
+find_reached_top=Đến cuối đầu tài liệu, tiếp tục từ cuối
+find_reached_bottom=Đến cuối tài liệu, tiếp tục từ đầu
+find_not_found=Không tìm thấy
+
+# Error panel labels
+error_more_info=Thông tim thêm
+error_less_info=Thông tin giản lược
+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}} (dịch: {{build}})
+# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an
+# english string describing the error.
+error_message=Thông báo: {{message}}
+# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack
+# trace.
+error_stack=Ngăn xếp: {{stack}}
+# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename
+error_file=Tệp: {{file}}
+# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number
+error_line=Dòng: {{line}}
+rendering_error=An error occurred while rendering the page.
+
+# Predefined zoom values
+page_scale_width=Ngang
+page_scale_fit=Xem Toàn Trang
+page_scale_auto=Tự Động
+page_scale_actual=Kích thước thực
+
+# Loading indicator messages
+loading_error_indicator=Lá»—i
+loading_error=Lỗi khi mở tệp PDF.
+invalid_file_error=Tệp PDF bị hỏng hoặc lỗi.
+missing_file_error=Thiếu tệp tin PDF.
+
+# LOCALIZATION NOTE (text_annotation_type): 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=[{{type}} Đánh dấu]
+request_password=PDF được bảo vệ bởi mật mã:
+
+printing_not_supported=Chú ý: Công việc in ẩn không được hỗ trợ bởi trình duyệt.
+printing_not_ready=Chú ý: Tệp PDF không sẵn sàng cho in ấn.
+web_fonts_disabled=Phồng chữ cho Web bị vô tác dụng: không thể dùng phông chữ kèm theo tệp PDF.
+web_colors_disabled=Màu cho Wev bị vô tác dụng.
diff --git a/plugins/pdfviewer/viewer/locale/zh-CN/viewer.properties b/plugins/pdfviewer/viewer/locale/zh-CN/viewer.properties
index 7ab0cd2..28a9971 100644
--- a/plugins/pdfviewer/viewer/locale/zh-CN/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/zh-CN/viewer.properties
@@ -30,22 +30,36 @@ zoom_out_label=缩小
 zoom_in.title=放大
 zoom_in_label=放大
 zoom.title=缩放
-print.title=打印
-print_label=打印
 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
+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=逆时针旋转
+
 # Tooltips and alt text for side panel toolbar buttons
 # (the _label strings are alt text for the buttons, the .title strings are
 # tooltips)
-toggle_slider.title=切换侧栏
-toggle_slider_label=切换侧栏
+toggle_sidebar.title=切换侧栏
+toggle_sidebar_label=切换侧栏
 outline.title=显示文档大纲
 outline_label=文档大纲
 thumbs.title=显示缩略图
@@ -53,9 +67,6 @@ thumbs_label=缩略图
 findbar.title=在该文档内查找
 findbar_label=查找
 
-# Document outline messages
-no_outline=没有可用的大纲
-
 # Thumbnails panel item (tooltip and alt text for images)
 # LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page
 # number.
@@ -64,12 +75,6 @@ thumb_page_title=页码 {{page}}
 # number.
 thumb_page_canvas=页面 {{page}} 的缩略图
 
-# Context menu
-first_page.label=转到第一页
-last_page.label=转到结尾页
-page_rotate_cw.label=顺时针旋转
-page_rotate_ccw.label=逆时针旋转
-
 # Find panel button title and messages
 find_label=查找:
 find_previous.title=查找该短语上一次出现的位置
@@ -111,12 +116,13 @@ page_scale_actual=实际大小
 loading_error_indicator=错误
 loading_error=加载 PDF 文件时出错。
 invalid_file_error=PDF 文件无效或已损坏。
+missing_file_error=缺失 PDF 文件。
 
-# LOCALIZATION NOTE (text_annotation_type): This is used as a tooltip.
+# 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=[{{type}} 注解]
+text_annotation_type.alt=[{{type}} 注解]
 request_password=该 PDF 文档受密码保护:
 
 printing_not_supported=警告:该浏览器不能完全支持打印。
diff --git a/plugins/pdfviewer/viewer/locale/zh-TW/viewer.properties b/plugins/pdfviewer/viewer/locale/zh-TW/viewer.properties
index d937a01..766ff14 100644
--- a/plugins/pdfviewer/viewer/locale/zh-TW/viewer.properties
+++ b/plugins/pdfviewer/viewer/locale/zh-TW/viewer.properties
@@ -1,113 +1,134 @@
-# 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=上一頁
-previous_label=上一頁
-next.title=下一頁
-next_label=下一頁
-
-# 本地化提示 (page_label, page_of):
-# 這些字符串會連接成 "Page: X of Y" 的表示方式。
-# 不要翻譯 "{{pageCount}}" , 因為它用來表示總頁數。
-page_label=第 
-page_of=頁,共 {{pageCount}} 頁
-
-zoom_out.title=縮小
-zoom_out_label=縮小
-zoom_in.title=放大
-zoom_in_label=放大
-zoom.title=縮放
-print.title=列印
-print_label=列印
-presentation_mode.title=切換到簡報模式
-presentation_mode_label=簡報模式
-open_file.title=開啟檔案
-open_file_label=é–‹å•Ÿ
-download.title=下載
-download_label=下載
-bookmark.title=目前檢視(複製或在新視窗中開啟)
-bookmark_label=目前檢視
-
-# 側邊欄工具列按鍵 (工具提示和圖像的替代文字)
-# (_label 字符串是按鍵的替代文字, .title 字符串是工具提示)
-toggle_slider.title=切換側邊欄
-toggle_slider_label=切換側邊欄
-outline.title=顯示文件綱要
-outline_label=文件綱要
-thumbs.title=顯示縮圖
-thumbs_label=縮圖
-findbar.title=在文件中搜尋
-findbar_label=搜索
-
-# 文件綱要相關訊息
-no_outline=無可用的綱要
-
-# 縮圖面板項目 (工具提示和圖像的替代文字)
-# 本地化提示 (thumb_page_title): "{{page}}" 會被頁數取代。
-thumb_page_title=第 {{page}} 頁
-# 本地化提示 (thumb_page_canvas): "{{page}}" 會被頁數取代。
-thumb_page_canvas=第 {{page}} 頁的縮圖
-
-# 右鍵菜單
-page_rotate_cw.label=順時針旋轉
-page_rotate_ccw.label=逆時針旋轉
-
-# 搜尋面板按鍵文字及訊息
-find_label=搜尋:
-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_more_info=更多資訊
-error_less_info=更少資訊
-error_close=關閉
-# 本地化提示 (error_version_info): "{{version}}" and "{{build}}" 會被PDF.JS版本編號及組建編號取代。
-error_version_info=PDF.js v{{version}} (組建: {{build}})
-# 本地化提示 (error_message): "{{message}}" 會被英文的錯誤描述取代。
-error_message=錯誤信息:{{message}}
-# 本地化提示 (error_stack): "{{stack}}" 會被錯誤堆疊取代。
-error_stack=堆疊:{{stack}}
-# 本地化提示 (error_file): "{{file}}" 會被檔案名稱取代。
-error_file=檔案:{{file}}
-# 本地化提示 (error_line): "{{line}}" 會被行數取代。
-error_line=行數:{{line}}
-rendering_error=渲染頁面時發生錯誤。
-
-# 預設的縮放值
-page_scale_width=符合頁寬
-page_scale_fit=符合頁面
-page_scale_auto=自動縮放
-page_scale_actual=實際大小
-
-# 載入指示訊息
-loading_error_indicator=錯誤
-loading_error=載入PDF檔案時發生錯誤。
-invalid_file_error=無效或受損的PDF檔案。
-
-# 其他標籤和訊息
-# "{{type}}" 用來表示PDF格式規範 (32000-1:2008 Table 169 – Annotation types) 入面所定義的註解種類。
-# 一些常見的類型有: "Check"、 "Text"、 "Comment"、 "Note"
-text_annotation_type=[{{type}} 註解]
-request_password=PDF檔案受密碼保護:
-
-printing_not_supported=警告:這個瀏覽器不完全支援列印。
-web_fonts_disabled=禁止使用網路字型:無法使用嵌入PDF檔案的字型。
+# 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_label, page_of):
+# These strings are concatenated to form the "Page: X of Y" string.
+# Do not translate "{{pageCount}}", it will be substituted with a number
+# representing the total number of pages.
+page_label=頁:
+page_of=/ {{pageCount}}
+
+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=逆時針旋轉
+
+# 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=切換側邊欄
+outline.title=顯示文件大綱
+outline_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_label=尋找:
+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=實際大小
+
+# 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"
+text_annotation_type.alt=[{{type}} 註解]
+request_password=PDF 已被密碼保護:
+invalid_password=密碼無效。
+
+printing_not_supported=警告: 此瀏覽器未完整支援列印功能。
+printing_not_ready=警告: 此 PDF 未完成下載以供列印。
+web_fonts_disabled=已停用網路字型 (Web fonts): 無法使用 PDF 內嵌字型。
+document_colors_disabled=瀏覽器的「優先使用網頁指定的色彩」未被勾選,PDF 文件無法使用自己的色彩。
diff --git a/plugins/pdfviewer/viewer/pdf.js b/plugins/pdfviewer/viewer/pdf.js
index 16bdf46..0ff40a1 100644
--- a/plugins/pdfviewer/viewer/pdf.js
+++ b/plugins/pdfviewer/viewer/pdf.js
@@ -1,1666 +1,166 @@
-var PDFJS={version:"0.7.85",build:"693d8a1"};
-(function(){function aa(a){Pd>=Lg&&(ma("Info: "+a),PDFJS.LogManager.notify("info",a))}function R(a){Pd>=Qd&&(ma("Warning: "+a),PDFJS.LogManager.notify("warn",a))}function s(a){if(1<arguments.length){var b=["Error:"];b.push.apply(b,arguments);ma.apply(null,b);a=[].join.call(arguments," ")}else ma("Error: "+a);var b=ma,c;try{throw Error();}catch(d){c=d.stack?d.stack.split("\n").slice(2).join("\n"):""}b(c);PDFJS.LogManager.notify("error",a);throw Error(a);}function ga(a){R("TODO: "+a)}function Mg(a,
-b){if(!b)return a;if(0<=b.indexOf(":"))return b;if("/"==b.charAt(0)){var c=a.indexOf("://"),c=a.indexOf("/",c+3);return a.substring(0,c)+b}var d=a.length,c=a.lastIndexOf("#"),d=0<=c?c:d,c=a.lastIndexOf("?",d),c=a.lastIndexOf("/",0<=c?c:d);return a.substring(0,c+1)+b}function O(a,b,c){Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!1});return c}function rc(a){for(var b="",c=a.length,d=0;d<c;++d)b+=String.fromCharCode(a[d]);return b}function gb(a){for(var b=a.length,c=new Uint8Array(b),
-d=0;d<b;++d)c[d]=a.charCodeAt(d)&255;return c}function $a(a){var b,c=a.length,d="";if("\u00fe"===a[0]&&"\u00ff"===a[1])for(b=2;b<c;b+=2)d+=String.fromCharCode(a.charCodeAt(b)<<8|a.charCodeAt(b+1));else for(b=0;b<c;++b)var e=Ng[a.charCodeAt(b)],d=d+(e?String.fromCharCode(e):a.charAt(b));return d}function Sa(a){return"boolean"==typeof a}function F(a){return"number"==typeof a&&(a|0)==a}function oa(a){return"number"==typeof a}function Y(a){return"string"==typeof a}function E(a){return a instanceof ka}
-function H(a,b){return a instanceof Ka&&(!b||a.cmd==b)}function D(a,b){if(!(a instanceof Aa))return!1;if(!b)return!0;var c=a.get("Type");return E(c)&&c.name==b}function I(a){return a instanceof Array}function G(a){return"object"==typeof a&&null!=a&&"getChar"in a}function Rd(a){return"object"==typeof a&&null!=a&&"byteLength"in a}function pa(a){return a instanceof Vb}function Sd(a){if("object"!=typeof a)return!1;if(!D(a))if(G(a))a=a.dict;else return!1;return a.has("FunctionType")}function qa(a,b){var c=
-document.createElement("canvas");c.width=a;c.height=b;return c}function Td(a){a=gb(a);for(var b=a.length,c=0;c<b;++c)a[c]|=128;return Fb(a,"euc-jp")}function Ud(a){return Fb(gb(a),"euc-jp")}function Gb(a){return Fb(gb(a),"shift_jis")}function Vd(a){return 31>=a||127<=a&&a<Jc||a>=hb&&a<hb+Jc}function Hb(a,b){for(var c=b.charsToGlyphs(a),d="",e=0,f=c.length;e<f;e++){var g=c[e];if(g){g=g.unicode;g in Wd&&(g=Wd[g]);var h=g.length,k;if(!(k=1>=h)){k=g.charCodeAt(0);var j=qb[13];k>=j.begin&&k<j.end?k=!0:
-(j=qb[11],k=k>=j.begin&&k<j.end?!0:!1);k=!k}if(!k){k="";for(h-=1;0<=h;h--)k+=g[h];g=k}d+=g}}return d}function Og(a){return a==J}function Ib(a,b){this.name=a;this.comObj=b;this.callbackIndex=1;var c=this.callbacks={},d=this.actionHandler={};d.console_log=[function(a){ma.apply(null,a)}];d.console_error="console"in P?[function(a){P.console.error.apply(null,a)}]:[function(a){ma.apply(null,a)}];d._warn=[function(a){R(a)}];b.onmessage=function(a){var f=a.data;if(f.isReply)if(a=f.callbackId,f.callbackId in
-c){var g=c[a];delete c[a];g(f.data)}else s("Cannot resolve callback "+a);else f.action in d?(a=d[f.action],f.callbackId?(g=new ib,g.then(function(a){b.postMessage({isReply:!0,callbackId:f.callbackId,data:a})}),a[0].call(a[1],f.data,g)):a[0].call(a[1],f.data)):s("Unkown action from worker: "+f.action)}}var P="undefined"===typeof window?this:window,Xd="undefined"==typeof window,Qd=1,Lg=5,Pd=Qd;P.PDFJS||(P.PDFJS={});P.PDFJS.getPdf=function(a,b){var c=a;"string"===typeof a&&(c={url:a});var d=new XMLHttpRequest;
-d.open("GET",c.url);var e=c.headers;if(e)for(var f in e)"undefined"!==typeof e[f]&&d.setRequestHeader(f,c.headers[f]);d.mozResponseType=d.responseType="arraybuffer";e=c.url.substring(0,c.url.indexOf(":")+1);d.expected="http:"===e||"https:"===e?200:0;"progress"in c&&(d.onprogress=c.progress||void 0);var g=!1;"error"in c&&(d.onerror=function(){g||(g=!0,c.error())});d.onreadystatechange=function(a){4===d.readyState&&(d.status===d.expected?b(d.mozResponseArrayBuffer||d.mozResponse||d.responseArrayBuffer||
-d.response):c.error&&!g&&(g=!0,c.error(a)))};d.send(null)};P.PDFJS.pdfBug=!1;var Yd=function(a,b,c,d){this.pageIndex=b;this.pageDict=c;this.xref=a;this.ref=d;this.displayReadyPromise=null};Yd.prototype={getPageProp:function(a){return this.pageDict.get(a)},inheritPageProp:function(a){for(var b=this.pageDict,c=b.get(a);void 0===c;){b=b.get("Parent");if(!b)break;c=b.get(a)}return c},get content(){return O(this,"content",this.getPageProp("Contents"))},get resources(){return O(this,"resources",this.inheritPageProp("Resources"))},
-get mediaBox(){var a=this.inheritPageProp("MediaBox");if(!I(a)||4!==a.length)a=[0,0,612,792];return O(this,"mediaBox",a)},get view(){var a=this.mediaBox,b=this.inheritPageProp("CropBox");if(!I(b)||4!==b.length)return O(this,"view",a);b=L.intersect(b,a);return!b?O(this,"view",a):O(this,"view",b)},get annotations(){return O(this,"annotations",this.inheritPageProp("Annots"))},get rotate(){var a=this.inheritPageProp("Rotate")||0;0!=a%90?a=0:360<=a?a%=360:0>a&&(a=(a%360+360)%360);return O(this,"rotate",
-a)},getContentStream:function(){var a=this.content;if(I(a)){var b=this.xref,c,d=a.length,e=[];for(c=0;c<d;++c)e.push(b.fetchIfRef(a[c]));a=new Zd(e)}else G(a)?a.reset():a||(a=new Kc);return a},getOperatorList:function(a,b){var c=this.xref,d=this.getContentStream(),e=this.resources,c=this.pe=new Lc(c,a,this.pageIndex,"p"+this.pageIndex+"_"),d=c.getOperatorList(d,e,b);c.optimizeQueue(d);return d},extractTextContent:function(){var a=this.xref,b=this.getContentStream(),c=a.fetchIfRef(this.resources);
-return(new Lc(a,{on:function(){},send:function(){}},this.pageIndex,"p"+this.pageIndex+"_")).getTextContent(b,c)},getLinks:function(){var a=[],b=this.getAnnotations(),c,d=b.length;for(c=0;c<d;++c)"Link"==b[c].type&&a.push(b[c]);return a},getAnnotations:function(){function a(a,b){for(var c=a;c&&!c.has(b);)c=c.get("Parent");return!c?null:c.get(b)}function b(a){if(!a)return!1;var b=a.indexOf(":");if(0>b)return!1;switch(a.substr(0,b)){case "http":case "https":case "ftp":case "mailto":return!0;default:return!1}}
-var c=this.xref,d=this.annotations||[],e,f=d.length,g=[];for(e=0;e<f;++e){var h=d[e],k=c.fetch(h);if(D(k)){var j=k.get("Subtype");if(E(j)){var l=k.get("Rect"),n={};n.type=j.name;n.rect=l;switch(j.name){case "Link":if(j=k.get("A"))switch(j.get("S").name){case "URI":k=j.get("URI");b(k)||(k="");n.url=k;break;case "GoTo":n.dest=j.get("D");break;case "GoToR":k=j.get("F");D(k)&&(k=k.get("F")||"");b(k)||(k="");n.url=k;n.dest=j.get("D");break;default:ga("unrecognized link type: "+j.get("S").name)}else k.has("Dest")&&
-(k=k.get("Dest"),n.dest=E(k)?k.name:k);break;case "Widget":j=a(k,"FT");if(!E(j))break;n.fieldType=j.name;for(var j=[],p=k;p;){var l=p.get("Parent"),m=p.getRaw("Parent");if(p=p.get("T"))j.unshift($a(p));else{var p=l.get("Kids"),r,q;r=0;for(q=p.length;r<q;r++){var A=p[r];if(A.num==h.num&&A.gen==h.gen)break}j.unshift("`"+r)}p=l;h=m}n.fullName=j.join(".");j=$a(k.get("TU")||"");n.alternativeText=j;j=a(k,"DA")||"";if(j=/([\d\.]+)\sTf/.exec(j))n.fontSize=parseFloat(j[1]);n.textAlignment=a(k,"Q");n.flags=
-a(k,"Ff")||0;break;case "Text":j=k.get("Contents");h=k.get("T");n.content=$a(j||"");n.title=$a(h||"");n.name=!k.has("Name")?"Note":k.get("Name").name;break;default:ga("unimplemented annotation type: "+j.name)}g.push(n)}}}return g}};var $d,be=function(a,b){G(a)?ae.call(this,a,b):Rd(a)?ae.call(this,new Jb(a),b):s("PDFDocument: Unknown argument type")},ae=function(a,b){0<a.length||s("stream must have data");this.stream=a;this.setup(b);this.acroForm=this.catalog.catDict.get("AcroForm")},Mc=function(a,
-b,c,d){var e=a.pos,f=a.end,g="";e+c>f&&(c=f-e);for(f=0;f<c;++f)g+=a.getChar();a.pos=e;b=d?g.lastIndexOf(b):g.indexOf(b);if(-1==b)return!1;a.pos+=b;return!0},Pg={get entries(){return O(this,"entries",{Title:Y,Author:Y,Subject:Y,Keywords:Y,Creator:Y,Producer:Y,CreationDate:Y,ModDate:Y,Trapped:E})}};be.prototype={get linearization(){var a=this.stream.length,b=!1;if(a)try{b=new ce(this.stream),b.length!=a&&(b=!1)}catch(c){R("The linearization data is not available or unreadable pdf data is found"),b=
-!1}return O(this,"linearization",b)},get startXRef(){var a=this.stream,b=0;if(this.linearization)a.reset(),Mc(a,"endobj",1024)&&(b=a.pos+6);else{for(var c=!1,d=a.end;!c&&0<d;)d-=1015,0>d&&(d=0),a.pos=d,c=Mc(a,"startxref",1024,!0);if(c){a.skip(9);do b=a.getChar();while(ra.isSpace(b));for(c="";9>=b-0;)c+=b,b=a.getChar();b=parseInt(c,10);isNaN(b)&&(b=0)}}return O(this,"startXRef",b)},get mainXRefEntriesOffset(){var a=0,b=this.linearization;b&&(a=b.mainXRefEntriesOffset);return O(this,"mainXRefEntriesOffset",
-a)},checkHeader:function(){var a=this.stream;a.reset();if(Mc(a,"%PDF-",1024)){a.moveStart();for(var b="",c;" "<(c=a.getChar())&&!(12<=b.length);)b+=c;this.pdfFormatVersion=b.substring(5)}},setup:function(a){this.checkHeader();this.xref=a=new de(this.stream,this.startXRef,this.mainXRefEntriesOffset,a);this.catalog=new ee(a)},get numPages(){var a=this.linearization;return O(this,"numPages",a?a.numPages:this.catalog.numPages)},getDocumentInfo:function(){var a={PDFFormatVersion:this.pdfFormatVersion};
-if(this.xref.trailer.has("Info")){var b=this.xref.trailer.get("Info"),c=Pg.entries,d;for(d in c)if(b.has(d)){var e=b.get(d);c[d](e)?a[d]="string"!==typeof e?e:$a(e):aa('Bad value in document info for "'+d+'"')}}return O(this,"getDocumentInfo",a)},getFingerprint:function(){var a=this.xref,b;if(a.trailer.has("ID"))b="",a.trailer.get("ID")[0].split("").forEach(function(a){b+=Number(a.charCodeAt(0)).toString(16)});else{a=this.stream.bytes.subarray(0,100);a=La(a,0,a.length);b="";for(var c=0,d=a.length;c<
-d;c++)b+=Number(a[c]).toString(16)}return O(this,"getFingerprint",b)},getPage:function(a){return this.catalog.getPage(a)}};$d=be;var ma;ma="console"in P&&"log"in P.console?P.console.log.bind(P.console):function(){};var Nc=[];PDFJS.LogManager={addLogger:function(a){Nc.push(a)},notify:function(a,b){for(var c=0,d=Nc.length;c<d;c++){var e=Nc[c];if(e[a])e[a](b)}}};var Kb,Oc=function(a,b){this.name="PasswordException";this.message=a;this.code=b};Oc.prototype=Error();Kb=Oc.constructor=Oc;var fe,Pc=function(a,
-b){this.name="UnknownErrorException";this.message=a;this.details=b};Pc.prototype=Error();fe=Pc.constructor=Pc;var Qc,Rc=function(a){this.name="InvalidPDFException";this.message=a};Rc.prototype=Error();Qc=Rc.constructor=Rc;var Sc=[1,0,0,1,0,0],Qg=PDFJS,ba=function(){};ba.makeCssRgb=function(a){return"rgb("+a[0]+","+a[1]+","+a[2]+")"};ba.makeCssCmyk=function(a){var b=new Ca;ba.makeCssCmyk=function(a){a=b.getRgb(a,0);return ba.makeCssRgb(a)};return ba.makeCssCmyk(a)};ba.applyTransform=function(a,b){return[a[0]*
-b[0]+a[1]*b[2]+b[4],a[0]*b[1]+a[1]*b[3]+b[5]]};ba.applyInverseTransform=function(a,b){var c=b[0]*b[3]-b[1]*b[2];return[(a[0]*b[3]-a[1]*b[2]+b[2]*b[5]-b[4]*b[3])/c,(-a[0]*b[1]+a[1]*b[0]+b[4]*b[1]-b[5]*b[0])/c]};ba.inverseTransform=function(a){var b=a[0]*a[3]-a[1]*a[2];return[a[3]/b,-a[1]/b,-a[2]/b,a[0]/b,(a[2]*a[5]-a[4]*a[3])/b,(a[4]*a[1]-a[5]*a[0])/b]};ba.apply3dTransform=function(a,b){return[a[0]*b[0]+a[1]*b[1]+a[2]*b[2],a[3]*b[0]+a[4]*b[1]+a[5]*b[2],a[6]*b[0]+a[7]*b[1]+a[8]*b[2]]};ba.normalizeRect=
-function(a){var b=a.slice(0);a[0]>a[2]&&(b[0]=a[2],b[2]=a[0]);a[1]>a[3]&&(b[1]=a[3],b[3]=a[1]);return b};ba.intersect=function(a,b){function c(a,b){return a-b}var d=[a[0],a[2],b[0],b[2]].sort(c),e=[a[1],a[3],b[1],b[3]].sort(c),f=[];a=ba.normalizeRect(a);b=ba.normalizeRect(b);if(d[0]===a[0]&&d[1]===b[0]||d[0]===b[0]&&d[1]===a[0])f[0]=d[1],f[2]=d[2];else return!1;if(e[0]===a[1]&&e[1]===b[1]||e[0]===b[1]&&e[1]===a[1])f[1]=e[1],f[3]=e[2];else return!1;return f};ba.sign=function(a){return 0>a?-1:1};var L=
-Qg.Util=ba,Rg=PDFJS,ge=function(a,b,c,d,e){var f=(a[2]+a[0])/2,g=(a[3]+a[1])/2,h,k,j;switch(c%360){case -180:case 180:c=-1;k=h=0;j=1;break;case -270:case 90:c=0;k=h=1;j=0;break;case -90:case 270:c=0;k=h=-1;j=0;break;default:c=1,k=h=0,j=-1}var l,n,p;0==c?(l=Math.abs(g-a[1])*b+d,n=Math.abs(f-a[0])*b+e,p=Math.abs(a[3]-a[1])*b,a=Math.abs(a[2]-a[0])*b):(l=Math.abs(f-a[0])*b+d,n=Math.abs(g-a[1])*b+e,p=Math.abs(a[2]-a[0])*b,a=Math.abs(a[3]-a[1])*b);this.transform=[c*b,h*b,k*b,j*b,l-c*b*f-k*b*g,n-h*b*f-j*
-b*g];this.offsetX=d;this.offsetY=e;this.width=p;this.height=a;this.fontScale=b};ge.prototype={convertToViewportPoint:function(a,b){return L.applyTransform([a,b],this.transform)},convertToViewportRectangle:function(a){var b=L.applyTransform([a[0],a[1]],this.transform);a=L.applyTransform([a[2],a[3]],this.transform);return[b[0],b[1],a[0],a[1]]},convertToPdfPoint:function(a,b){return L.applyInverseTransform([a,b],this.transform)}};Rg.PageViewport=ge;var Ng=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364],Sg=PDFJS,ic=function(a,b){this.name=a;this.isRejected=!1;this.exception=this.error=null;null!=b?(this.isResolved=!0,this._data=
-b,this.hasData=!0):(this.isResolved=!1,this._data=Yb);this.callbacks=[];this.errbacks=[];this.progressbacks=[]},Yb={};ic.all=function(a){var b=new ic,c=a.length,d=[];if(0===c)return b.resolve(d),b;for(var e=0,f=a.length;e<f;++e)a[e].then(function(a){return function(e){d[a]=e;c--;0===c&&b.resolve(d)}}(e));return b};ic.prototype={hasData:!1,set data(a){if(void 0!==a&&(this._data!==Yb&&s("Promise "+this.name+": Cannot set the data of a promise twice"),this._data=a,this.hasData=!0,this.onDataCallback))this.onDataCallback(a)},
-get data(){this._data===Yb&&s("Promise "+this.name+": Cannot get data that isn't set");return this._data},onData:function(a){this._data!==Yb?a(this._data):this.onDataCallback=a},resolve:function(a){this.isResolved&&s("A Promise can be resolved only once "+this.name);this.isRejected&&s("The Promise was already rejected "+this.name);this.isResolved=!0;this.data="undefined"!==typeof a?a:null;for(var b=this.callbacks,c=0,d=b.length;c<d;c++)b[c].call(null,a)},progress:function(a){for(var b=this.progressbacks,
-c=0,d=b.length;c<d;c++)b[c].call(null,a)},reject:function(a,b){this.isRejected&&s("A Promise can be rejected only once "+this.name);this.isResolved&&s("The Promise was already resolved "+this.name);this.isRejected=!0;this.error=a||null;this.exception=b||null;for(var c=this.errbacks,d=0,e=c.length;d<e;d++)c[d].call(null,a,b)},then:function(a,b,c){a||d("Requiring callback"+this.name);if(this.isResolved)a.call(null,this.data);else if(this.isRejected&&b){var d=this.error;b.call(null,d,this.exception)}else this.callbacks.push(a),
-b&&this.errbacks.push(b);c&&this.progressbacks.push(c)}};var ib=Sg.Promise=ic,he=function(){this.started={};this.times=[];this.enabled=!0};he.prototype={time:function(a){if(this.enabled){if(a in this.started)throw"Timer is already running for "+a;this.started[a]=Date.now()}},timeEnd:function(a){if(this.enabled){if(!(a in this.started))throw"Timer has not been started for "+a;this.times.push({name:a,start:this.started[a],end:Date.now()});delete this.started[a]}},toString:function(){for(var a=this.times,
-b="",c=0,d=0,e=a.length;d<e;++d){var f=a[d].name;f.length>c&&(c=f.length)}d=0;for(e=a.length;d<e;++d){for(var g=a[d],f=g.end-g.start,g=g.name;g.length<c;)g+=" ";b+=g+" "+f+"ms\n"}return b}};PDFJS.createBlob=function(a,b){if("function"===typeof Blob)return new Blob([a],{type:b});var c=new MozBlobBuilder;c.append(a);return c.getBlob(b)};PDFJS.getDocument=function(a){var b,c;"string"===typeof a?a={url:a}:Rd(a)?a={data:a}:"object"!==typeof a&&s("Invalid parameter in getDocument, need either Uint8Array, string or a parameter object");
-!a.url&&!a.data&&s("Invalid parameter array, need either .data or .url");var d={};for(b in a)d[b]="url"===b&&"undefined"!==typeof window?Mg(window.location.href,a[b]):a[b];a=new PDFJS.Promise;b=new PDFJS.Promise;c=new ie(a,b);a.then(function(){c.fetchDocument(d)});return b};var je=function(a,b){this.pdfInfo=a;this.transport=b};je.prototype={get numPages(){return this.pdfInfo.numPages},get fingerprint(){return this.pdfInfo.fingerprint},get embeddedFontsUsed(){return this.transport.embeddedFontsUsed},
-getPage:function(a){return this.transport.getPage(a)},getDestinations:function(){var a=new PDFJS.Promise;a.resolve(this.pdfInfo.destinations);return a},getOutline:function(){var a=new PDFJS.Promise;a.resolve(this.pdfInfo.outline);return a},getMetadata:function(){var a=new PDFJS.Promise,b=this.pdfInfo.metadata;a.resolve({info:this.pdfInfo.info,metadata:b?new PDFJS.Metadata(b):null});return a},isEncrypted:function(){var a=new PDFJS.Promise;a.resolve(this.pdfInfo.encrypted);return a},getData:function(){var a=
-new PDFJS.Promise;this.transport.getData(a);return a},destroy:function(){this.transport.destroy()}};var ke=function(a,b){this.pageInfo=a;this.transport=b;this.stats=new he;this.stats.enabled=!!P.PDFJS.enableStats;this.commonObjs=b.commonObjs;this.objs=new Tc;this.cleanupAfterRender=this.renderInProgress=!1};ke.prototype={get pageNumber(){return this.pageInfo.pageIndex+1},get rotate(){return this.pageInfo.rotate},get ref(){return this.pageInfo.ref},get view(){return this.pageInfo.view},getViewport:function(a,
-b){2>arguments.length&&(b=this.rotate);return new PDFJS.PageViewport(this.view,a,b,0,0)},getAnnotations:function(){if(this.annotationsPromise)return this.annotationsPromise;var a=new PDFJS.Promise;this.annotationsPromise=a;this.transport.getAnnotations(this.pageInfo.pageIndex);return a},render:function(a){function b(a){d.renderInProgress=!1;if(d.destroyed||d.cleanupAfterRender)delete d.displayReadyPromise,delete d.operatorList,d.objs.clear();a?c.reject(a):c.resolve()}this.renderInProgress=!0;var c=
-new ib;this.stats.time("Overall");this.displayReadyPromise||(this.displayReadyPromise=new ib,this.destroyed=!1,this.stats.time("Page Request"),this.transport.messageHandler.send("RenderPageRequest",{pageIndex:this.pageNumber-1}));var d=this,e=a.continueCallback;this.displayReadyPromise.then(function(){if(d.destroyed)b();else{var c=new jc(a.canvasContext,this.commonObjs,this.objs,a.textLayer);try{this.display(c,a.viewport,b,e)}catch(g){b(g)}}}.bind(this),function(a){b(a)});return c},startRenderingFromOperatorList:function(a,
-b){var c=this;this.operatorList=a;this.ensureFonts(b,function(){setTimeout(function(){c.displayReadyPromise.resolve()})})},ensureFonts:function(a,b){this.stats.time("Font Loading");for(var c=[],d=0,e=a.length;d<e;d++){var f=this.commonObjs.getData(a[d]);f.error?R("Error during font loading: "+f.error):(f.coded||(this.transport.embeddedFontsUsed=!0),c.push(f))}Lb.bind(c,function(){this.stats.timeEnd("Font Loading");b.call(this)}.bind(this))},display:function(a,b,c,d){function e(){g=a.executeOperatorList(k,
-g,l,j);g==h&&(a.endDrawing(),f.timeEnd("Rendering"),f.timeEnd("Overall"),c&&c())}var f=this.stats;f.time("Rendering");a.beginDrawing(b);var g=0,h=this.operatorList.fnArray.length,k=this.operatorList,j=null;PDFJS.pdfBug&&("StepperManager"in P&&P.StepperManager.enabled)&&(j=P.StepperManager.create(this.pageNumber-1),j.init(k),j.nextBreakPoint=j.getNextBreakPoint());var l;l=d?function(){d(e)}:e;l()},getTextContent:function(){var a=new PDFJS.Promise;this.transport.messageHandler.send("GetTextContent",
-{pageIndex:this.pageNumber-1},function(b){a.resolve(b)});return a},getOperationList:function(){var a=new PDFJS.Promise;a.resolve({dependencyFontsID:null,operatorList:null});return a},destroy:function(){this.destroyed=!0;this.renderInProgress||(delete this.operatorList,delete this.displayReadyPromise,this.objs.clear())}};var ie,le=function(a,b){this.workerReadyPromise=b;this.commonObjs=new Tc;this.pageCache=[];this.pagePromises=[];this.embeddedFontsUsed=!1;if(!P.PDFJS.disableWorker&&"undefined"!==
-typeof Worker){var c=PDFJS.workerSrc;"undefined"===typeof c&&s("No PDFJS.workerSrc specified");try{var d=new Worker(c),e=new Ib("main",d);this.messageHandler=e;e.on("test",function(b){b?(this.worker=d,this.setupMessageHandler(e)):(P.PDFJS.disableWorker=!0,this.setupFakeWorker());a.resolve()}.bind(this));var f=new Uint8Array(1);e.send("test",f);return}catch(g){aa("The worker has been disabled.")}}P.PDFJS.disableWorker=!0;this.setupFakeWorker();a.resolve()};le.prototype={destroy:function(){this.worker&&
-this.worker.terminate();this.pageCache=[];this.pagePromises=[]},setupFakeWorker:function(){R("Setting up fake worker.");var a={postMessage:function(b){a.onmessage({data:b})},terminate:function(){}},b=new Ib("main",a);this.setupMessageHandler(b);me.setup(b)},setupMessageHandler:function(a){this.messageHandler=a;a.on("GetDoc",function(a){this.pdfDocument=a=new je(a.pdfInfo,this);this.workerReadyPromise.resolve(a)},this);a.on("NeedPassword",function(a){this.workerReadyPromise.reject(a.exception.message,
-a.exception)},this);a.on("IncorrectPassword",function(a){this.workerReadyPromise.reject(a.exception.message,a.exception)},this);a.on("InvalidPDF",function(a){this.workerReadyPromise.reject(a.exception.name,a.exception)},this);a.on("UnknownError",function(a){this.workerReadyPromise.reject(a.exception.message,a.exception)},this);a.on("GetPage",function(a){a=a.pageInfo;var c=new ke(a,this);this.pageCache[a.pageIndex]=c;this.pagePromises[a.pageIndex].resolve(c)},this);a.on("GetAnnotations",function(a){this.pageCache[a.pageIndex].annotationsPromise.resolve(a.annotations)},
-this);a.on("RenderPage",function(a){var c=this.pageCache[a.pageIndex],d=a.depFonts;c.stats.timeEnd("Page Request");c.startRenderingFromOperatorList(a.operatorList,d)},this);a.on("commonobj",function(a){var c=a[0],d=a[1];if(!this.commonObjs.hasData(c))switch(d){case "Font":a=a[2];a="error"in a?new rb(a.error):new sb(a);this.commonObjs.resolve(c,a);break;default:s("Got unknown common object type "+d)}},this);a.on("obj",function(a){var c=a[0],d=a[2],e=this.pageCache[a[1]];if(!e.objs.hasData(c))switch(d){case "JpegStream":a=
-a[3];var f=e.objs,g=new Image;g.onload=function(){f.resolve(c,g)};g.src="data:image/jpeg;base64,"+window.btoa(a);break;case "Image":a=a[3];e.objs.resolve(c,a);"data"in a&&8E6<a.data.length&&(e.cleanupAfterRender=!0);break;default:s("Got unknown object type "+d)}},this);a.on("DocProgress",function(a){this.workerReadyPromise.progress({loaded:a.loaded,total:a.total})},this);a.on("DocError",function(a){this.workerReadyPromise.reject(a)},this);a.on("PageError",function(a){var c=this.pageCache[a.pageNum-
-1];c.displayReadyPromise?c.displayReadyPromise.reject(a.error):s(a.error)},this);a.on("JpegDecode",function(a,c){var d=a[0],e=a[1];3!=e&&1!=e&&s("Only 3 component or 1 component can be returned");var f=new Image;f.onload=function(){var a=f.width,b=f.height,d=a*b,j=4*d,d=new Uint8Array(d*e),l=qa(a,b).getContext("2d");l.drawImage(f,0,0);l=l.getImageData(0,0,a,b).data;if(3==e)for(var n=0,p=0;n<j;n+=4,p+=3)d[p]=l[n],d[p+1]=l[n+1],d[p+2]=l[n+2];else if(1==e)for(p=n=0;n<j;n+=4,p++)d[p]=l[n];c.resolve({data:d,
-width:a,height:b})}.bind(this);d="data:image/jpeg;base64,"+window.btoa(d);f.src=d})},fetchDocument:function(a){this.messageHandler.send("GetDocRequest",{source:a})},getData:function(a){this.messageHandler.send("GetData",null,function(b){a.resolve(b)})},getPage:function(a,b){var c=a-1;if(c in this.pagePromises)return this.pagePromises[c];b=new PDFJS.Promise("Page "+a);this.pagePromises[c]=b;this.messageHandler.send("GetPageRequest",{pageIndex:c});return b},getAnnotations:function(a){this.messageHandler.send("GetAnnotationsRequest",
-{pageIndex:a})}};ie=le;var ne=function(a){this.alphaIsShape=!1;this.fontSize=0;this.fontSizeScale=1;this.textMatrix=Sc;this.fontMatrix=Da;this.wordSpacing=this.charSpacing=this.lineY=this.lineX=this.y=this.x=this.leading=0;this.textHScale=1;this.textRise=this.textRenderingMode=0;this.fillColorSpace=new sa;this.fillColorSpaceObj=null;this.strokeColorSpace=new sa;this.strokeColorObj=this.fillColorObj=this.strokeColorSpaceObj=null;this.strokeColor=this.fillColor="#000000";this.lineWidth=this.strokeAlpha=
-this.fillAlpha=1;this.paintFormXObjectDepth=0;this.old=a};ne.prototype={clone:function(){return Object.create(this)},setCurrentPoint:function(a,b){this.x=a;this.y=b}};var jc,oe=function(a,b,c,d){this.ctx=a;this.current=new ne;this.stateStack=[];this.xobjs=this.res=this.pendingClip=null;this.commonObjs=b;this.objs=c;this.textLayer=d;a&&!a.mozCurrentTransform&&(a._originalSave=a.save,a._originalRestore=a.restore,a._originalRotate=a.rotate,a._originalScale=a.scale,a._originalTranslate=a.translate,a._originalTransform=
-a.transform,a._transformMatrix=[1,0,0,1,0,0],a._transformStack=[],Object.defineProperty(a,"mozCurrentTransform",{get:function(){return this._transformMatrix}}),Object.defineProperty(a,"mozCurrentTransformInverse",{get:function(){var a=this._transformMatrix,b=a[0],c=a[1],d=a[2],k=a[3],j=a[4],a=a[5],l=b*k-c*d,n=c*d-b*k;return[k/l,c/n,d/n,b/l,(k*j-d*a)/n,(c*j-b*a)/l]}}),a.save=function(){var a=this._transformMatrix;this._transformStack.push(a);this._transformMatrix=a.slice(0,6);this._originalSave()},
-a.restore=function(){var a=this._transformStack.pop();a&&(this._transformMatrix=a,this._originalRestore())},a.translate=function(a,b){var c=this._transformMatrix;c[4]=c[0]*a+c[2]*b+c[4];c[5]=c[1]*a+c[3]*b+c[5];this._originalTranslate(a,b)},a.scale=function(a,b){var c=this._transformMatrix;c[0]*=a;c[1]*=a;c[2]*=b;c[3]*=b;this._originalScale(a,b)},a.transform=function(b,c,d,h,k,j){var l=this._transformMatrix;this._transformMatrix=[l[0]*b+l[2]*c,l[1]*b+l[3]*c,l[0]*d+l[2]*h,l[1]*d+l[3]*h,l[0]*k+l[2]*
-j+l[4],l[1]*k+l[3]*j+l[5]];a._originalTransform(b,c,d,h,k,j)},a.rotate=function(a){var b=Math.cos(a),c=Math.sin(a),d=this._transformMatrix;this._transformMatrix=[d[0]*b+d[2]*c,d[1]*b+d[3]*c,d[0]*-c+d[2]*b,d[1]*-c+d[3]*b,d[4],d[5]];this._originalRotate(a)})},pe=function(a,b,c,d,e){var f=0,g,h,k,j,l=3;for(g=0;g<c;g++)for(h=k=0;h<b;h++)k||(j=a[f++],k=128),!(j&k)==d&&(e[l]=0),l+=4,k>>=1},Uc=function(a,b,c,d){c="createImageData"in a?a.createImageData(c,d):a.getImageData(0,0,c,d);d=c.data;if("set"in d)d.set(b);
-else for(var e=0,f=d.length;e<f;e++)d[e]=b[e];a.putImageData(c,0,0)},Tg=["butt","round","square"],Ug=["miter","round","bevel"],Vg={},qe={};oe.prototype={slowCommands:{stroke:!0,closeStroke:!0,fill:!0,eoFill:!0,fillStroke:!0,eoFillStroke:!0,closeFillStroke:!0,closeEOFillStroke:!0,showText:!0,showSpacedText:!0,setStrokeColorSpace:!0,setFillColorSpace:!0,setStrokeColor:!0,setStrokeColorN:!0,setFillColor:!0,setFillColorN:!0,setStrokeGray:!0,setFillGray:!0,setStrokeRGBColor:!0,setFillRGBColor:!0,setStrokeCMYKColor:!0,
-setFillCMYKColor:!0,paintJpegXObject:!0,paintImageXObject:!0,paintInlineImageXObject:!0,paintInlineImageXObjectGroup:!0,paintImageMaskXObject:!0,paintImageMaskXObjectGroup:!0,shadingFill:!0},beginDrawing:function(a){a=a.transform;this.ctx.save();this.ctx.transform.apply(this.ctx,a);this.textLayer&&this.textLayer.beginLayout()},executeOperatorList:function(a,b,c,d){var e=a.argsArray;a=a.fnArray;b=b||0;var f=e.length;if(f==b)return b;for(var g=Date.now()+15,h=this.commonObjs,k=this.objs,j,l=this.slowCommands;;){if(d&&
-b===d.nextBreakPoint)return d.breakIt(b,c),b;j=a[b];if("dependency"!==j)this[j].apply(this,e[b]);else for(var n=e[b],p=0,m=n.length;p<m;p++){var r=n[p],q="g_"==r.substring(0,2);if(!q&&!k.isResolved(r))return k.get(r,c),b;if(q&&!h.isResolved(r))return h.get(r,c),b}b++;if(b==f)return b;if(c&&l[j]&&Date.now()>g)return setTimeout(c,0),b}},endDrawing:function(){this.ctx.restore();this.textLayer&&this.textLayer.endLayout()},setLineWidth:function(a){this.current.lineWidth=a;this.ctx.lineWidth=a},setLineCap:function(a){this.ctx.lineCap=
-Tg[a]},setLineJoin:function(a){this.ctx.lineJoin=Ug[a]},setMiterLimit:function(a){this.ctx.miterLimit=a},setDash:function(a,b){var c=this.ctx;"setLineDash"in c?(c.setLineDash(a),c.lineDashOffset=b):(c.mozDash=a,c.mozDashOffset=b)},setRenderingIntent:function(){},setFlatness:function(){},setGState:function(a){for(var b=0,c=a.length;b<c;b++){var d=a[b],e=d[1];switch(d[0]){case "LW":this.setLineWidth(e);break;case "LC":this.setLineCap(e);break;case "LJ":this.setLineJoin(e);break;case "ML":this.setMiterLimit(e);
-break;case "D":this.setDash(e[0],e[1]);break;case "RI":this.setRenderingIntent(e);break;case "FL":this.setFlatness(e);break;case "Font":this.setFont(d[1],d[2]);break;case "CA":this.current.strokeAlpha=d[1];break;case "ca":this.current.fillAlpha=d[1],this.ctx.globalAlpha=d[1]}}},save:function(){this.ctx.save();var a=this.current;this.stateStack.push(a);this.current=a.clone()},restore:function(){"textClipLayers"in this&&this.completeTextClipping();var a=this.stateStack.pop();a&&(this.current=a,this.ctx.restore())},
-transform:function(a,b,c,d,e,f){this.ctx.transform(a,b,c,d,e,f)},moveTo:function(a,b){this.ctx.moveTo(a,b);this.current.setCurrentPoint(a,b)},lineTo:function(a,b){this.ctx.lineTo(a,b);this.current.setCurrentPoint(a,b)},curveTo:function(a,b,c,d,e,f){this.ctx.bezierCurveTo(a,b,c,d,e,f);this.current.setCurrentPoint(e,f)},curveTo2:function(a,b,c,d){var e=this.current;this.ctx.bezierCurveTo(e.x,e.y,a,b,c,d);e.setCurrentPoint(c,d)},curveTo3:function(a,b,c,d){this.curveTo(a,b,c,d,c,d);this.current.setCurrentPoint(c,
-d)},closePath:function(){this.ctx.closePath()},rectangle:function(a,b,c,d){this.ctx.rect(a,b,c,d)},stroke:function(a){a="undefined"!==typeof a?a:!0;var b=this.ctx,c=this.current.strokeColor;0===this.current.lineWidth&&(b.lineWidth=this.getSinglePixelWidth());b.globalAlpha=this.current.strokeAlpha;c&&c.hasOwnProperty("type")&&"Pattern"===c.type?(b.save(),b.strokeStyle=c.getPattern(b),b.stroke(),b.restore()):b.stroke();a&&this.consumePath();b.globalAlpha=this.current.fillAlpha},closeStroke:function(){this.closePath();
-this.stroke()},fill:function(a){a="undefined"!==typeof a?a:!0;var b=this.ctx,c=this.current.fillColor;c&&c.hasOwnProperty("type")&&"Pattern"===c.type?(b.save(),b.fillStyle=c.getPattern(b),b.fill(),b.restore()):b.fill();a&&this.consumePath()},eoFill:function(){var a=this.setEOFillRule();this.fill();this.restoreFillRule(a)},fillStroke:function(){this.fill(!1);this.stroke(!1);this.consumePath()},eoFillStroke:function(){var a=this.setEOFillRule();this.fillStroke();this.restoreFillRule(a)},closeFillStroke:function(){this.closePath();
-this.fillStroke()},closeEOFillStroke:function(){var a=this.setEOFillRule();this.closePath();this.fillStroke();this.restoreFillRule(a)},endPath:function(){this.consumePath()},clip:function(){this.pendingClip=Vg},eoClip:function(){this.pendingClip=qe},beginText:function(){this.current.textMatrix=Sc;this.current.x=this.current.lineX=0;this.current.y=this.current.lineY=0},endText:function(){"textClipLayers"in this&&this.swapImageForTextClipping()},getCurrentTextClipping:function(){var a=this.ctx,b=a.mozCurrentTransform;
-if("textClipLayers"in this){var c=this.textClipLayers.maskCtx;c.setTransform.apply(c,b);c.font=a.font;return c}var d=qa(a.canvas.width,a.canvas.height),c=d.getContext("2d");c.setTransform.apply(c,b);c.font=a.font;this.textClipLayers={maskCanvas:d,maskCtx:c};return c},swapImageForTextClipping:function(){var a=this.ctx,b=a.canvas.width,c=a.canvas.height;a.save();a.setTransform(1,0,0,1,0,0);var d=a.getImageData(0,0,b,c);this.textClipLayers.imageData=d;a.clearRect(0,0,b,c);a.restore()},completeTextClipping:function(){var a=
-this.ctx,b=this.textClipLayers.maskCtx;b.setTransform(1,0,0,1,0,0);b.globalCompositeOperation="source-in";b.drawImage(a.canvas,0,0);a.save();a.setTransform(1,0,0,1,0,0);a.putImageData(this.textClipLayers.imageData,0,0);a.drawImage(this.textClipLayers.maskCanvas,0,0);a.restore();delete this.textClipLayers},setCharSpacing:function(a){this.current.charSpacing=a},setWordSpacing:function(a){this.current.wordSpacing=a},setHScale:function(a){this.current.textHScale=a/100},setLeading:function(a){this.current.leading=
--a},setFont:function(a,b){var c=this.commonObjs.get(a),d=this.current;c||s("Can't find font for "+a);d.fontMatrix=c.fontMatrix?c.fontMatrix:Da;(0===d.fontMatrix[0]||0===d.fontMatrix[3])&&R("Invalid font matrix for font "+a);0>b?(b=-b,d.fontDirection=-1):d.fontDirection=1;this.current.font=c;this.current.fontSize=b;if(!c.coded){var d=c.black?c.bold?"bolder":"bold":c.bold?"bold":"normal",e=c.italic?"italic":"normal",c='"'+(c.loadedName||"sans-serif")+'", '+c.fallbackName,f=1<=b?b:1;this.current.fontSizeScale=
-1!=f?1:b/1;this.ctx.font=e+" "+d+" "+f+"px "+c}},setTextRenderingMode:function(a){this.current.textRenderingMode=a},setTextRise:function(a){this.current.textRise=a},moveText:function(a,b){this.current.x=this.current.lineX+=a;this.current.y=this.current.lineY+=b},setLeadingMoveText:function(a,b){this.setLeading(-b);this.moveText(a,b)},setTextMatrix:function(a,b,c,d,e,f){this.current.textMatrix=[a,b,c,d,e,f];this.current.x=this.current.lineX=0;this.current.y=this.current.lineY=0},nextLine:function(){this.moveText(0,
-this.current.leading)},applyTextTransforms:function(){var a=this.ctx,b=this.current;a.transform.apply(a,b.textMatrix);a.translate(b.x,b.y+b.textRise);0<b.fontDirection?a.scale(b.textHScale,-1):a.scale(-b.textHScale,1)},createTextGeometry:function(){var a={},b=this.current.font,c=this.ctx.mozCurrentTransform;if(c){var d=L.applyTransform([0,0],c),c=L.applyTransform([1,1],c);a.x=d[0];a.y=d[1];a.hScale=c[0]-d[0];a.vScale=c[1]-d[1]}a.spaceWidth=b.spaceWidth;a.fontName=b.loadedName;a.fontFamily=b.fallbackName;
-a.fontSize=this.current.fontSize;return a},showText:function(a,b){var c=this.ctx,d=this.current,e=d.font,f=e.charsToGlyphs(a),g=d.fontSize,h=d.fontSizeScale,k=d.charSpacing,j=d.wordSpacing,l=d.textHScale*d.fontDirection,n=d.fontMatrix||Da,p=f.length,m,r=this.textLayer&&!b?!0:!1,q=d.textRenderingMode,A=0;if(e.coded){c.save();c.transform.apply(c,d.textMatrix);c.translate(d.x,d.y);c.scale(l,1);r&&(this.save(),c.scale(1,-1),m=this.createTextGeometry(),this.restore());for(e=0;e<p;++e){var t=f[e];null===
-t?(this.ctx.translate(j,0),d.x+=j*l):(this.save(),c.scale(g,g),c.transform.apply(c,n),this.executeOperatorList(t.operatorList),this.restore(),h=(L.applyTransform([t.width,0],n)[0]*g+k)*d.fontDirection,c.translate(h,0),d.x+=h*l,A+=h)}}else{c.save();this.applyTextTransforms();e=d.lineWidth;t=d.textMatrix[0];n=d.textMatrix[1];t=Math.sqrt(t*t+n*n);e=0==t||0==e?this.getSinglePixelWidth():e/t;r&&(m=this.createTextGeometry());1!=h&&(c.scale(h,h),e/=h);c.lineWidth=e;for(e=n=0;e<p;++e)if(t=f[e],null===t)n+=
-d.fontDirection*j;else{var s=t.fontChar,v=t.width*g*d.fontMatrix[0]+k*d.fontDirection;if(!t.disabled){t=n/h;switch(q){default:case 0:case 4:c.fillText(s,t,0);break;case 1:case 5:c.strokeText(s,t,0);break;case 2:case 6:c.fillText(s,t,0),c.strokeText(s,t,0);case 3:case 7:}q&4&&this.getCurrentTextClipping().fillText(s,t,0)}n+=v;A+=v}d.x+=n*l}c.restore();r&&(m.canvasWidth=A,this.textLayer.appendText(m));return A},showSpacedText:function(a){var b=this.ctx,c=this.current,d=c.font,e=c.fontSize,d=c.textHScale*
-(c.fontMatrix&&!d.coded?c.fontMatrix[0]:Da[0])*c.fontDirection,f=a.length,g,h=0,k=this.textLayer?!0:!1;k&&(b.save(),this.applyTextTransforms(),g=this.createTextGeometry(),b.restore());for(b=0;b<f;++b){var j=a[b];oa(j)?(j=-j*e*d,c.x+=j,k&&(h+=j)):Y(j)?(j=this.showText(j,!0),k&&(h+=j)):s("TJ array element "+j+" is not string or num")}k&&(g.canvasWidth=h,this.textLayer.appendText(g))},nextLineShowText:function(a){this.nextLine();this.showText(a)},nextLineSetSpacingShowText:function(a,b,c){this.setWordSpacing(a);
-this.setCharSpacing(b);this.nextLineShowText(c)},setCharWidth:function(){},setCharWidthAndBounds:function(a,b,c,d,e,f){this.rectangle(c,d,e-c,f-d);this.clip();this.endPath()},setStrokeColorSpace:function(a){this.current.strokeColorSpace=Q.fromIR(a)},setFillColorSpace:function(a){this.current.fillColorSpace=Q.fromIR(a)},setStrokeColor:function(){var a=this.current.strokeColorSpace.getRgb(arguments,0),a=L.makeCssRgb(a);this.ctx.strokeStyle=a;this.current.strokeColor=a},getColorN_Pattern:function(a,
-b){if("TilingPattern"==a[0]){var c=a[1],d=b.base,e;d&&(e=d.getRgb(c,0));c=new Vc(a,e,this.ctx,this.objs)}else"RadialAxial"==a[0]||"Dummy"==a[0]?c=tb.shadingFromIR(a):s("Unkown IR type "+a[0]);return c},setStrokeColorN:function(){var a=this.current.strokeColorSpace;"Pattern"==a.name?this.current.strokeColor=this.getColorN_Pattern(arguments,a):this.setStrokeColor.apply(this,arguments)},setFillColor:function(){var a=this.current.fillColorSpace.getRgb(arguments,0),a=L.makeCssRgb(a);this.ctx.fillStyle=
-a;this.current.fillColor=a},setFillColorN:function(){var a=this.current.fillColorSpace;"Pattern"==a.name?this.current.fillColor=this.getColorN_Pattern(arguments,a):this.setFillColor.apply(this,arguments)},setStrokeGray:function(a){this.current.strokeColorSpace instanceof sa||(this.current.strokeColorSpace=new sa);var b=this.current.strokeColorSpace.getRgb(arguments,0),b=L.makeCssRgb(b);this.ctx.strokeStyle=b;this.current.strokeColor=b},setFillGray:function(a){this.current.fillColorSpace instanceof
-sa||(this.current.fillColorSpace=new sa);var b=this.current.fillColorSpace.getRgb(arguments,0),b=L.makeCssRgb(b);this.ctx.fillStyle=b;this.current.fillColor=b},setStrokeRGBColor:function(a,b,c){this.current.strokeColorSpace instanceof Ta||(this.current.strokeColorSpace=new Ta);var d=this.current.strokeColorSpace.getRgb(arguments,0),d=L.makeCssRgb(d);this.ctx.strokeStyle=d;this.current.strokeColor=d},setFillRGBColor:function(a,b,c){this.current.fillColorSpace instanceof Ta||(this.current.fillColorSpace=
-new Ta);var d=this.current.fillColorSpace.getRgb(arguments,0),d=L.makeCssRgb(d);this.ctx.fillStyle=d;this.current.fillColor=d},setStrokeCMYKColor:function(a,b,c,d){this.current.strokeColorSpace instanceof Ca||(this.current.strokeColorSpace=new Ca);var e=L.makeCssCmyk(arguments);this.ctx.strokeStyle=e;this.current.strokeColor=e},setFillCMYKColor:function(a,b,c,d){this.current.fillColorSpace instanceof Ca||(this.current.fillColorSpace=new Ca);var e=L.makeCssCmyk(arguments);this.ctx.fillStyle=e;this.current.fillColor=
-e},shadingFill:function(a){var b=this.ctx;this.save();a=tb.shadingFromIR(a);b.fillStyle=a.getPattern(b);var c=b.mozCurrentTransformInverse;if(c){var b=b.canvas,d=b.width,e=b.height,b=L.applyTransform([0,0],c);a=L.applyTransform([0,e],c);var f=L.applyTransform([d,0],c),g=L.applyTransform([d,e],c),c=Math.min(b[0],a[0],f[0],g[0]),d=Math.min(b[1],a[1],f[1],g[1]),e=Math.max(b[0],a[0],f[0],g[0]),b=Math.max(b[1],a[1],f[1],g[1]);this.ctx.fillRect(c,d,e-c,b-d)}else this.ctx.fillRect(-1E10,-1E10,2E10,2E10);
-this.restore()},beginInlineImage:function(){s("Should not call beginInlineImage")},beginImageData:function(){s("Should not call beginImageData")},paintFormXObjectBegin:function(a,b){this.save();this.current.paintFormXObjectDepth++;a&&(I(a)&&6==a.length)&&this.transform.apply(this,a);b&&(I(b)&&4==b.length)&&(this.rectangle(b[0],b[1],b[2]-b[0],b[3]-b[1]),this.clip(),this.endPath())},paintFormXObjectEnd:function(){var a=this.current.paintFormXObjectDepth;do this.restore();while(this.current.paintFormXObjectDepth>=
-a)},paintJpegXObject:function(a,b,c){(a=this.objs.get(a))||s("Dependent image isn't ready yet");this.save();var d=this.ctx;d.scale(1/b,-1/c);d.drawImage(a,0,0,a.width,a.height,0,-c,b,c);this.restore()},paintImageMaskXObject:function(a,b,c,d){var e=qa(c,d).getContext("2d"),f=this.current.fillColor;e.fillStyle=f&&f.hasOwnProperty("type")&&"Pattern"===f.type?f.getPattern(e):f;e.fillRect(0,0,c,d);e=e.getImageData(0,0,c,d);pe(a,c,d,b,e.data);this.paintInlineImageXObject(e)},paintImageMaskXObjectGroup:function(a){for(var b=
-this.ctx,c=0,d=0,e,f,g=0,h=a.length;g<h;g++){var k=a[g],j=k.width,l=k.height;if(j>c||l>d){c=Math.max(j,c);d=Math.max(l,d);e=qa(c,d);f=e.getContext("2d");var n=this.current.fillColor;f.fillStyle=n&&n.hasOwnProperty("type")&&"Pattern"===n.type?n.getPattern(f):n}f.fillRect(0,0,j,l);n=f.getImageData(0,0,j,l);pe(k.data,j,l,k.inverseDecode,n.data);f.putImageData(n,0,0);b.save();b.transform.apply(b,k.transform);b.scale(1,-1);b.drawImage(e,0,0,j,l,0,-1,1,1);b.restore()}},paintImageXObject:function(a){(a=
-this.objs.get(a))||s("Dependent image isn't ready yet");this.paintInlineImageXObject(a)},paintInlineImageXObject:function(a){var b=a.width,c=a.height,d=this.ctx;this.save();d.scale(1/b,-1/c);var e=d.mozCurrentTransformInverse,f=Math.max(Math.abs(e[0]),1),g=Math.max(Math.abs(e[3]),1),e=qa(b,c),h=e.getContext("2d");if(2<f||2<g){a=a.data;e=b;h=c;for(a=new Uint8Array(a);2<f||2<g;){if(2<g){for(var k=4*e,j=0,l=0,n=0;n<h-1;n+=2){for(var p=0;p<e;p++){var m=a[j+3],r=a[j+3+k];if(m===r)a[l]=a[j]+a[j+k]>>1,a[l+
-1]=a[j+1]+a[j+1+k]>>1,a[l+2]=a[j+2]+a[j+2+k]>>1,a[l+3]=m;else if(m<r){var q=256-r+m;a[l]=a[j]*q+(a[j+k]<<8)>>9;a[l+1]=a[j+1]*q+(a[j+1+k]<<8)>>9;a[l+2]=a[j+2]*q+(a[j+2+k]<<8)>>9;a[l+3]=r}else q=256-m+r,a[l]=(a[j]<<8)+a[j+k]*q>>9,a[l+1]=(a[j+1]<<8)+a[j+1+k]*q>>9,a[l+2]=(a[j+2]<<8)+a[j+2+k]*q>>9,a[l+3]=m;j+=4;l+=4}j+=k}if(h&1)for(n=0;n<k;n++)a[l++]=a[j++];h=h+1>>1;g/=2}if(2<f){for(n=l=j=0;n<h;n++){for(p=0;p<e-1;p+=2)m=a[j+3],r=a[j+7],m===r?(a[l]=a[j]+a[j+4]>>1,a[l+1]=a[j+1]+a[j+5]>>1,a[l+2]=a[j+2]+a[j+
-6]>>1,a[l+3]=m):m<r?(q=256-r+m,a[l]=a[j]*q+(a[j+4]<<8)>>9,a[l+1]=a[j+1]*q+(a[j+5]<<8)>>9,a[l+2]=a[j+2]*q+(a[j+6]<<8)>>9,a[l+3]=r):(q=256-m+r,a[l]=(a[j]<<8)+a[j+4]*q>>9,a[l+1]=(a[j+1]<<8)+a[j+5]*q>>9,a[l+2]=(a[j+2]<<8)+a[j+6]*q>>9,a[l+3]=m),j+=8,l+=4;e&1&&(a[l++]=a[j++],a[l++]=a[j++],a[l++]=a[j++],a[l++]=a[j++])}e=e+1>>1;f/=2}}f=qa(e,h);g=f.getContext("2d");Uc(g,a.subarray(0,4*e*h),e,h);e=f;d.drawImage(e,0,0,e.width,e.height,0,-c,b,c)}else"undefined"!==typeof ImageData&&a instanceof ImageData?h.putImageData(a,
-0,0):Uc(h,a.data,b,c),d.drawImage(e,0,-c);this.restore()},paintInlineImageXObjectGroup:function(a,b){var c=this.ctx,d=a.width,e=a.height,f=qa(d,e),g=f.getContext("2d");Uc(g,a.data,d,e);d=0;for(e=b.length;d<e;d++)g=b[d],c.save(),c.transform.apply(c,g.transform),c.scale(1,-1),c.drawImage(f,g.x,g.y,g.w,g.h,0,-1,1,1),c.restore()},markPoint:function(){},markPointProps:function(){},beginMarkedContent:function(){},beginMarkedContentProps:function(){},endMarkedContent:function(){},beginCompat:function(){ga("ignore undefined operators (should we do that anyway?)")},
-endCompat:function(){ga("stop ignoring undefined operators")},consumePath:function(){if(this.pendingClip){var a=null;this.pendingClip==qe&&(a=this.setEOFillRule());this.ctx.clip();this.pendingClip=null;null!==a&&this.restoreFillRule(a)}this.ctx.beginPath()},setEOFillRule:function(){var a=this.ctx.mozFillRule;this.ctx.mozFillRule="evenodd";return a},restoreFillRule:function(a){this.ctx.mozFillRule=a},getSinglePixelWidth:function(){var a=this.ctx.mozCurrentTransformInverse;return Math.sqrt(Math.max(a[0]*
-a[0]+a[1]*a[1],a[2]*a[2]+a[3]*a[3]))}};jc=oe;var ka,re=function(a){this.name=a};re.prototype={};ka=re;var Ka,Mb=function(a){this.cmd=a};Mb.prototype={};var se={};Mb.get=function(a){var b=se[a];return b?b:se[a]=new Mb(a)};Ka=Mb;var Aa,te=function(a){var b=Object.create(null);this.assignXref=function(b){a=b};this.get=function(c,d,e){var f;if("undefined"!=typeof(f=b[c])||c in b||"undefined"==typeof d||"undefined"!=typeof(f=b[d])||d in b||"undefined"==typeof e)return a?a.fetchIfRef(f):f;f=b[e]||null;
-return a?a.fetchIfRef(f):f};this.getRaw=function(a){return b[a]};this.getAll=function(){var a={},d;for(d in b){var e=this.get(d);a[d]=e instanceof te?e.getAll():e}return a};this.set=function(a,d){b[a]=d};this.has=function(a){return a in b};this.forEach=function(a){for(var d in b)a(d,this.get(d))}};Aa=te;var Vb,ue=function(a,b){this.num=a;this.gen=b};ue.prototype={};Vb=ue;var Wc=function(){this.dict={}};Wc.prototype={has:function(a){return!!this.dict["R"+a.num+"."+a.gen]},put:function(a){this.dict["R"+
-a.num+"."+a.gen]=a}};var ee,ve=function(a){this.xref=a;a=a.getCatalogObj();D(a)||s("catalog object is not a dictionary");this.catDict=a};ve.prototype={get metadata(){var a=this.catDict.getRaw("Metadata");if(!pa(a))return O(this,"metadata",null);var a=this.xref.fetch(a,!(!this.xref.encrypt?0:this.xref.encrypt.encryptMetadata)),b;if(a&&D(a.dict)){var c=a.dict.get("Type"),d=a.dict.get("Subtype");if(E(c)&&E(d)&&"Metadata"===c.name&&"XML"===d.name)try{var e=rc(a.getBytes());b=decodeURIComponent(escape(e))}catch(f){aa("Skipping invalid metadata.")}}return O(this,
-"metadata",b)},get toplevelPagesDict(){var a=this.catDict.get("Pages");D(a)||s("invalid top-level pages dictionary");return O(this,"toplevelPagesDict",a)},get documentOutline(){var a=this.xref,b=this.catDict.get("Outlines"),c={items:[]};if(D(b)){var b=b.getRaw("First"),d=new Wc;if(pa(b)){var e=[{obj:b,parent:c}];for(d.put(b);0<e.length;){var f=e.shift(),g=a.fetchIfRef(f.obj);if(null!==g){g.has("Title")||s("Invalid outline item");(b=g.get("A"))?b=b.get("D"):g.has("Dest")&&(b=g.getRaw("Dest"),E(b)&&
-(b=b.name));var h=g.get("Title"),h={dest:b,title:$a(h),color:g.get("C")||[0,0,0],count:g.get("Count"),bold:!!(g.get("F")&2),italic:!!(g.get("F")&1),items:[]};f.parent.items.push(h);b=g.getRaw("First");pa(b)&&!d.has(b)&&(e.push({obj:b,parent:h}),d.put(b));b=g.getRaw("Next");pa(b)&&!d.has(b)&&(e.push({obj:b,parent:f.parent}),d.put(b))}}}}b=0<c.items.length?c.items:null;return O(this,"documentOutline",b)},get numPages(){var a=this.toplevelPagesDict.get("Count");F(a)||s("page count in top level pages object is not an integer");
-return O(this,"num",a)},traverseKids:function(a){var b=this.pageCache;a=a.get("Kids");I(a)||s("page dictionary kids object is not an array");for(var c=0,d=a.length;c<d;++c){var e=a[c];pa(e)||s("page dictionary kid is not a reference");var f=this.xref.fetch(e);D(f,"Page")||D(f)&&!f.has("Kids")?b.push(new Yd(this.xref,b.length,f,e)):(D(f)||s("page dictionary kid reference points to wrong type of object"),this.traverseKids(f))}},get destinations(){var a=this.xref,b={},c,d,e=this.catDict.get("Names");
-e?c=e.getRaw("Dests"):this.catDict.has("Dests")&&(d=this.catDict.get("Dests"));d&&d.forEach(function(a,c){c&&(b[a]=D(c)?c.get("D"):c)});if(c){d=new Wc;d.put(c);for(c=[c];0<c.length;){var f,e=a.fetch(c.shift());if(e.has("Kids")){var g=e.get("Kids"),e=0;for(f=g.length;e<f;e++){var h=g[e];d.has(h)&&s("invalid destinations");c.push(h);d.put(h)}}else if(g=e.get("Names")){e=0;for(f=g.length;e<f;e+=2){var h=b,k=g[e],j;j=a.fetchIfRef(g[e+1]);j=D(j)?j.get("D"):j;h[k]=j}}}}return O(this,"destinations",b)},
-getPage:function(a){this.pageCache||(this.pageCache=[],this.traverseKids(this.toplevelPagesDict));return this.pageCache[a-1]}};ee=ve;var de,xe=function(a,b,c,d){this.stream=a;this.entries=[];this.xrefstms={};a=this.readXRef(b);a.assignXref(this);this.trailer=a;this.cache=[];if(b=a.get("Encrypt"))c=a.get("ID"),this.encrypt=new we(b,c&&c.length?c[0]:"",d);(this.root=a.get("Root"))||s("Invalid root reference")};xe.prototype={readXRefTable:function(a){for(var b;!H(b=a.getObj(),"trailer");){var c=a.getObj();
-(!F(b)||!F(c))&&s("Invalid XRef table: wrong types in subsection header");for(var d=0;d<c;d++){var e={};e.offset=a.getObj();e.gen=a.getObj();var f=a.getObj();H(f,"f")?e.free=!0:H(f,"n")&&(e.uncompressed=!0);(!F(e.offset)||!F(e.gen)||!e.free&&!e.uncompressed)&&s("Invalid entry in XRef subsection: "+b+", "+c);this.entries[d+b]||(this.entries[d+b]=e)}}this.entries[0]&&!this.entries[0].free&&s("Invalid XRef table: unexpected first object");H(b,"trailer")||s("Invalid XRef table: could not find trailer dictionary");
-a=a.getObj();D(a)||s("Invalid XRef table: could not parse trailer dictionary");return a},readXRefStream:function(a){var b=a.parameters,c=b.get("W"),d=b.get("Index");d||(d=[0,b.get("Size")]);for(var e,f;0<d.length;){var g=d[0],h=d[1];(!F(g)||!F(h))&&s("Invalid XRef range fields: "+g+", "+h);var k=c[0],j=c[1],l=c[2];(!F(k)||!F(j)||!F(l))&&s("Invalid XRef entry fields length: "+g+", "+h);for(e=0;e<h;++e){var n=0,p=0,m=0;for(f=0;f<k;++f)n=n<<8|a.getByte();0==k&&(n=1);for(f=0;f<j;++f)p=p<<8|a.getByte();
-for(f=0;f<l;++f)m=m<<8|a.getByte();f={};f.offset=p;f.gen=m;switch(n){case 0:f.free=!0;break;case 1:f.uncompressed=!0;break;case 2:break;default:s("Invalid XRef entry type: "+n)}this.entries[g+e]||(this.entries[g+e]=f)}d.splice(0,2)}return b},indexObjects:function(){function a(a,b,c){for(var d=c.length,e=a.length,f=0;b<e;){for(var h=0;h<d&&a[b+h]==c[h];)++h;if(h>=d)break;b++;f++}return f}var b=new Uint8Array([116,114,97,105,108,101,114]),c=new Uint8Array([115,116,97,114,116,120,114,101,102]),d=new Uint8Array([101,
-110,100,111,98,106]),e=new Uint8Array([47,88,82,101,102]),f=this.stream;f.pos=0;for(var g=f.getBytes(),h=f.start,k=g.length,j=[],l=[];h<k;){var n=g[h];if(32===n||9===n||13===n||10===n)++h;else if(37===n){do++h,n=g[h];while(13!==n&&10!==n)}else{for(var n=g,p=h,m="",r=n[p];13!==r&&10!==r&&!(++p>=n.length);)m+=String.fromCharCode(r),r=n[p];n=m;"xref"===n?(h+=a(g,h,b),j.push(h),h+=a(g,h,c)):(p=/^(\d+)\s+(\d+)\s+obj\b/.exec(n))?(this.entries[p[1]]={offset:h,gen:p[2]|0,uncompressed:!0},n=a(g,h,d)+7,p=g.subarray(h,
-h+n),m=a(p,0,e),m<n&&64>p[m+5]&&(l.push(h),this.xrefstms[h]=1),h+=n):h+=n.length+1}}b=0;for(c=l.length;b<c;++b)this.readXRef(l[b],!0);for(var q,b=0,c=j.length;b<c;++b)if(f.pos=j[b],l=new jb(new ra(f),!0,null),d=l.getObj(),H(d,"trailer")&&D(q=l.getObj())&&q.has("ID"))return q;if(q)return q;throw new Qc("Invalid PDF structure");},readXRef:function(a,b){var c=this.stream;c.pos=a;try{var d=new jb(new ra(c),!0,null),e=d.getObj(),f;H(e,"xref")?(f=this.readXRefTable(d),e=f.get("XRefStm"),F(e)&&(c=e,c in
-this.xrefstms||(this.xrefstms[c]=1,this.readXRef(c)))):F(e)&&((!F(d.getObj())||!H(d.getObj(),"obj")||!G(e=d.getObj()))&&s("Invalid XRef stream"),(f=this.readXRefStream(e))||s("Failed to read XRef stream"));e=f.get("Prev");F(e)?this.readXRef(e,b):pa(e)&&this.readXRef(e.num,b);return f}catch(g){ma("(while reading XRef): "+g)}if(!b)return R("Indexing all PDF objects"),this.indexObjects()},getEntry:function(a){a=this.entries[a];return null===a?null:a.free||!a.offset?null:a},fetchIfRef:function(a){return!pa(a)?
-a:this.fetch(a)},fetch:function(a,b){pa(a)||s("ref object is not a reference");var c=a.num;if(c in this.cache)return this.cache[c];var d=this.getEntry(c);if(null===d)return this.cache[c]=d;var e=a.gen,f;if(d.uncompressed){d.gen!=e&&s("inconsistent generation in XRef");f=this.stream.makeSubStream(d.offset);f=new jb(new ra(f),!0,this);var g=f.getObj(),h=f.getObj(),k=f.getObj();(!F(g)||g!=c||!F(h)||h!=e||!H(k))&&s("bad XRef entry");if(!H(k,"obj")){if(0==k.cmd.indexOf("obj")&&(c=parseInt(k.cmd.substring(3),
-10),!isNaN(c)))return c;s("bad XRef entry")}if(this.encrypt&&!b)try{d=f.getObj(this.encrypt.createCipherTransform(c,e))}catch(j){return this.fetch(a,!0)}else d=f.getObj();if(!G(d)||d instanceof ub)this.cache[c]=d;return d}e=d.offset;f=this.fetch(new Vb(e,0));G(f)||s("bad ObjStm stream");c=f.parameters.get("First");g=f.parameters.get("N");(!F(c)||!F(g))&&s("invalid first and n parameters for ObjStm stream");f=new jb(new ra(f),!1,this);f.allowStreams=!0;for(var k=[],l=[],h=0;h<g;++h)c=f.getObj(),F(c)||
-s("invalid object number in the ObjStm stream: "+c),l.push(c),c=f.getObj(),F(c)||s("invalid object offset in the ObjStm stream: "+c);for(h=0;h<g;++h){k.push(f.getObj());var c=l[h],n=this.entries[c];n&&(n.offset===e&&n.gen===h)&&(this.cache[c]=k[h])}(d=k[d.gen])||s("bad XRef entry for compressed object");return d},getCatalogObj:function(){return this.root}};de=xe;var Tc,ye=function(){this.objs={}};ye.prototype={ensureObj:function(a,b){return this.objs[a]?this.objs[a]:this.objs[a]=new ib(a,b)},get:function(a,
-b){if(b)return this.ensureObj(a).then(b),null;var c=this.objs[a];(!c||!c.isResolved)&&s("Requesting object that isn't resolved yet "+a);return c.data},resolve:function(a,b){var c=this.objs;c[a]?c[a].resolve(b):this.ensureObj(a,b)},onData:function(a,b){this.ensureObj(a).onData(b)},isResolved:function(a){var b=this.objs;return b[a]?b[a].isResolved:!1},hasData:function(a){var b=this.objs;return b[a]?b[a].hasData:!1},getData:function(a){var b=this.objs;return!b[a]||!b[a].hasData?null:b[a].data},setData:function(a,
-b){this.ensureObj(a).data=b},clear:function(){this.objs={}}};Tc=ye;var Ma;Ma={getSampleArray:function(a,b,c,d){for(var e=1,f=0,g=a.length;f<g;f++)e*=a[f];e*=b;a=[];var g=b=0,h=1/(Math.pow(2,c)-1);d=d.getBytes((e*c+7)/8);for(var k=0,f=0;f<e;f++){for(;b<c;)g<<=8,g|=d[k++],b+=8;b-=c;a.push((g>>b)*h);g&=(1<<b)-1}return a},getIR:function(a,b){var c=b.dict;c||(c=b);var d=[this.constructSampled,null,this.constructInterpolated,this.constructStiched,this.constructPostScript],e=c.get("FunctionType");(d=d[e])||
-s("Unknown type of function");return d.call(this,b,c,a)},fromIR:function(a){switch(a[0]){case 0:return this.constructSampledFromIR(a);case 2:return this.constructInterpolatedFromIR(a);case 3:return this.constructStichedFromIR(a);default:return this.constructPostScriptFromIR(a)}},parse:function(a,b){var c=this.getIR(a,b);return this.fromIR(c)},constructSampled:function(a,b){function c(a){for(var b=a.length,c=[],d=0,e=0;e<b;e+=2)c[d]=[a[e],a[e+1]],++d;return c}var d=b.get("Domain"),e=b.get("Range");
-(!d||!e)&&s("No domain or range");var f=d.length/2,g=e.length/2,d=c(d),e=c(e),h=b.get("Size"),k=b.get("BitsPerSample"),j=b.get("Order")||1;1!==j&&ga("No support for cubic spline interpolation: "+j);j=b.get("Encode");if(!j)for(var j=[],l=0;l<f;++l)j.push(0),j.push(h[l]-1);var j=c(j),l=(l=b.get("Decode"))?c(l):e,n=this.getSampleArray(h,g,k,a);return[0,f,d,j,l,n,h,g,Math.pow(2,k)-1,e]},constructSampledFromIR:function(a){return function(b){var c=a[1],d=a[2],e=a[3],f=a[4],g=a[5],h=a[6],k=a[7],j=a[9];c!=
-b.length&&s("Incorrect number of arguments: "+c+" != "+b.length);for(var l=1<<c,n=new Float64Array(l),p=new Uint32Array(l),m=0;m<l;m++)n[m]=1;for(var r=k,q=1,A=0;A<c;++A){for(var m=d[A][0],t=d[A][1],y=Math.min(Math.max(b[A],m),t),v=e[A][0]+(y-m)*((e[A][1]-e[A][0])/(t-m)),t=h[A],v=Math.min(Math.max(v,0),t-1),m=v<t-1?Math.floor(v):v-1,y=m+1-v,v=v-m,x=m*r,z=x+r,m=0;m<l;m++)m&q?(n[m]*=v,p[m]+=z):(n[m]*=y,p[m]+=x);r*=t;q<<=1}b=new Float64Array(k);for(m=0;m<k;++m){for(A=c=0;A<l;A++)c+=g[p[A]+m]*n[A];c=
-f[m][0]+(c-0)*((f[m][1]-f[m][0])/1);b[m]=Math.min(Math.max(c,j[m][0]),j[m][1])}return b}},constructInterpolated:function(a,b){var c=b.get("C0")||[0],d=b.get("C1")||[1],e=b.get("N");(!I(c)||!I(d))&&s("Illegal dictionary for interpolated function");for(var f=c.length,g=[],h=0;h<f;++h)g.push(d[h]-c[h]);return[2,c,g,e]},constructInterpolatedFromIR:function(a){var b=a[1],c=a[2],d=a[3],e=c.length;return function(a){a=1==d?a[0]:Math.pow(a[0],d);for(var g=[],h=0;h<e;++h)g.push(b[h]+a*c[h]);return g}},constructStiched:function(a,
-b,c){(a=b.get("Domain"))||s("No domain");1!=a.length/2&&s("Bad domain for stiched function");for(var d=b.get("Functions"),e=[],f=0,g=d.length;f<g;++f)e.push(Ma.getIR(c,c.fetchIfRef(d[f])));c=b.get("Bounds");b=b.get("Encode");return[3,a,c,b,e]},constructStichedFromIR:function(a){var b=a[1],c=a[2],d=a[3];a=a[4];for(var e=[],f=0,g=a.length;f<g;f++)e.push(Ma.fromIR(a[f]));return function(a){a=a[0];var f=b[0],g=b[1];a>g?a=g:a<f&&(a=f);f=0;for(g=c.length;f<g&&!(a<c[f]);++f);g=b[0];0<f&&(g=c[f-1]);var l=
-b[1];f<c.length&&(l=c[f]);var n=d[2*f];return e[f]([n+(a-g)*(d[2*f+1]-n)/(l-g)])}},constructPostScript:function(a,b){var c=b.get("Domain"),d=b.get("Range");c||s("No domain.");d||s("No range.");var e=new ze(a),e=(new Ae(e)).parse();return[4,c,d,e]},constructPostScriptFromIR:function(a){var b=a[1],c=a[2],d=c.length/2,e=new Be(a[3]),f=new Ce;return function(a){for(var h=[],k=0,j=b.length/2;k<j;++k)h.push(a[k]);a=h.join("_");if(f.has(a))return f.get(a);h=e.execute(h);j=[];for(k=d-1;0<=k;--k){var l=h.pop(),
-n=2*k;l<c[n]?l=c[n]:l>c[n+1]&&(l=c[n+1]);j[k]=l}f.set(a,j);return j}}};var Ce,De=function(){this.cache={};this.total=0};De.prototype={has:function(a){return a in this.cache},get:function(a){return this.cache[a]},set:function(a,b){1024>this.total&&(this.cache[a]=b,this.total++)}};Ce=De;var Ee=function(a){this.stack=a||[]};Ee.prototype={push:function(a){100<=this.stack.length&&s("PostScript function stack overflow.");this.stack.push(a)},pop:function(){0>=this.stack.length&&s("PostScript function stack underflow.");
-return this.stack.pop()},copy:function(a){100<=this.stack.length+a&&s("PostScript function stack overflow.");var b=this.stack,c=b.length-a;for(a-=1;0<=a;a--,c++)b.push(b[c])},index:function(a){this.push(this.stack[this.stack.length-a-1])},roll:function(a,b){var c=this.stack,d=c.length-a,e=c.length-1,f=d+(b-Math.floor(b/a)*a),g,h,k;g=d;for(h=e;g<h;g++,h--)k=c[g],c[g]=c[h],c[h]=k;g=d;for(h=f-1;g<h;g++,h--)k=c[g],c[g]=c[h],c[h]=k;g=f;for(h=e;g<h;g++,h--)k=c[g],c[g]=c[h],c[h]=k}};var Be,Fe=function(a,
-b){this.operators=a;this.operands=b};Fe.prototype={execute:function(a){a=new Ee(a);for(var b=0,c=this.operators,d=c.length,e,f;b<d;)if(e=c[b++],"number"==typeof e)a.push(e);else switch(e){case "jz":f=a.pop();(e=a.pop())||(b=f);break;case "j":b=e=a.pop();break;case "abs":e=a.pop();a.push(Math.abs(e));break;case "add":f=a.pop();e=a.pop();a.push(e+f);break;case "and":f=a.pop();e=a.pop();Sa(e)&&Sa(f)?a.push(e&&f):a.push(e&f);break;case "atan":e=a.pop();a.push(Math.atan(e));break;case "bitshift":f=a.pop();
-e=a.pop();0<e?a.push(e<<f):a.push(e>>f);break;case "ceiling":e=a.pop();a.push(Math.ceil(e));break;case "copy":e=a.pop();a.copy(e);break;case "cos":e=a.pop();a.push(Math.cos(e));break;case "cvi":e=a.pop()|0;a.push(e);break;case "cvr":break;case "div":f=a.pop();e=a.pop();a.push(e/f);break;case "dup":a.copy(1);break;case "eq":f=a.pop();e=a.pop();a.push(e==f);break;case "exch":a.roll(2,1);break;case "exp":f=a.pop();e=a.pop();a.push(Math.pow(e,f));break;case "false":a.push(!1);break;case "floor":e=a.pop();
-a.push(Math.floor(e));break;case "ge":f=a.pop();e=a.pop();a.push(e>=f);break;case "gt":f=a.pop();e=a.pop();a.push(e>f);break;case "idiv":f=a.pop();e=a.pop();a.push(e/f|0);break;case "index":e=a.pop();a.index(e);break;case "le":f=a.pop();e=a.pop();a.push(e<=f);break;case "ln":e=a.pop();a.push(Math.log(e));break;case "log":e=a.pop();a.push(Math.log(e)/Math.LN10);break;case "lt":f=a.pop();e=a.pop();a.push(e<f);break;case "mod":f=a.pop();e=a.pop();a.push(e%f);break;case "mul":f=a.pop();e=a.pop();a.push(e*
-f);break;case "ne":f=a.pop();e=a.pop();a.push(e!=f);break;case "neg":a.pop();a.push(-f);break;case "not":e=a.pop();Sa(e)&&Sa(f)?a.push(e&&f):a.push(e&f);break;case "or":f=a.pop();e=a.pop();Sa(e)&&Sa(f)?a.push(e||f):a.push(e|f);break;case "pop":a.pop();break;case "roll":f=a.pop();e=a.pop();a.roll(e,f);break;case "round":e=a.pop();a.push(Math.round(e));break;case "sin":e=a.pop();a.push(Math.sin(e));break;case "sqrt":e=a.pop();a.push(Math.sqrt(e));break;case "sub":f=a.pop();e=a.pop();a.push(e-f);break;
-case "true":a.push(!0);break;case "truncate":e=a.pop();e=0>e?Math.ceil(e):Math.floor(e);a.push(e);break;case "xor":f=a.pop();e=a.pop();Sa(e)&&Sa(f)?a.push(e!=f):a.push(e^f);break;default:s("Unknown operator "+e)}return a.stack}};Be=Fe;var Ae,Ge=function(a){this.lexer=a;this.operators=[];this.prev=this.token=null};Ge.prototype={nextToken:function(){this.prev=this.token;this.token=this.lexer.getToken()},accept:function(a){return this.token.type==a?(this.nextToken(),!0):!1},expect:function(a){if(this.accept(a))return!0;
-s("Unexpected symbol: found "+this.token.type+" expected "+a+".")},parse:function(){this.nextToken();this.expect(ha.LBRACE);this.parseBlock();this.expect(ha.RBRACE);return this.operators},parseBlock:function(){for(;;)if(this.accept(ha.NUMBER))this.operators.push(this.prev.value);else if(this.accept(ha.OPERATOR))this.operators.push(this.prev.value);else if(this.accept(ha.LBRACE))this.parseCondition();else break},parseCondition:function(){var a=this.operators.length;this.operators.push(null,null);this.parseBlock();
-this.expect(ha.RBRACE);if(this.accept(ha.IF))this.operators[a]=this.operators.length,this.operators[a+1]="jz";else if(this.accept(ha.LBRACE)){var b=this.operators.length;this.operators.push(null,null);var c=this.operators.length;this.parseBlock();this.expect(ha.RBRACE);this.expect(ha.IFELSE);this.operators[b]=this.operators.length;this.operators[b+1]="j";this.operators[a]=c;this.operators[a+1]="jz"}else s("PS Function: error parsing conditional.")}};Ae=Ge;var ha={LBRACE:0,RBRACE:1,NUMBER:2,OPERATOR:3,
-IF:4,IFELSE:5},W=function(a,b){this.type=a;this.value=b},He={};W.getOperator=function(a){var b=He[a];return b?b:He[a]=new W(ha.OPERATOR,a)};W.LBRACE=new W(ha.LBRACE,"{");W.RBRACE=new W(ha.RBRACE,"}");W.IF=new W(ha.IF,"IF");W.IFELSE=new W(ha.IFELSE,"IFELSE");var ze,Ie=function(a){this.stream=a};Ie.prototype={getToken:function(){for(var a,b=!1,c=this.stream;;){if(!(a=c.getChar()))return J;if(b){if("\n"==a||"\r"==a)b=!1}else if("%"==a)b=!0;else if(!ra.isSpace(a))break}switch(a){case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":case "8":case "9":case "+":case "-":case ".":return new W(ha.NUMBER,
-this.getNumber(a));case "{":return W.LBRACE;case "}":return W.RBRACE}for(b=a.toLowerCase();;){a=c.lookChar();if(null===a)break;a=a.toLowerCase();if("a"<=a&&"z">=a)b+=a;else break;c.skip()}switch(b){case "if":return W.IF;case "ifelse":return W.IFELSE;default:return W.getOperator(b)}},getNumber:function(a){for(var b=a,c=this.stream;;){a=c.lookChar();if("0"<=a&&"9">=a||"-"==a||"."==a)b+=a;else break;c.skip()}a=parseFloat(b);isNaN(a)&&s("Invalid floating point number: "+a);return a}};ze=Ie;var Wg=".notdef space exclam quotedbl numbersign dollar percent ampersand quoteright parenleft parenright asterisk plus comma hyphen period slash zero one two three four five six seven eight nine colon semicolon less equal greater question at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z bracketleft backslash bracketright asciicircum underscore quoteleft a b c d e f g h i j k l m n o p q r s t u v w x y z braceleft bar braceright asciitilde exclamdown cent sterling fraction yen florin se
 ction currency quotesingle quotedblleft guillemotleft guilsinglleft guilsinglright fi fl endash dagger daggerdbl periodcentered paragraph bullet quotesinglbase quotedblbase quotedblright guillemotright ellipsis perthousand questiondown grave acute circumflex tilde macron breve dotaccent dieresis ring cedilla hungarumlaut ogonek caron emdash AE ordfeminine Lslash Oslash OE ordmasculine ae dotlessi lslash oslash oe germandbls onesuperior logicalnot mu trademark Eth onehalf plusminus Thorn onequarter divide brokenbar degree thorn threequarters twosuperior registered minus eth multiply threesuperior copyright Aacute Acircumflex Adieresis Agrave Aring Atilde Ccedilla Eacute Ecircumflex Edieresis Egrave Iacute Icircumflex Idieresis Igrave Ntilde Oacute Ocircumflex Odieresis Ograve Otilde Scaron Uacute Ucircumflex Udieresis Ugrave Yacute Ydieresis Zcaron aacute acircumflex adieresis agrave aring atilde ccedilla eacute ecircumflex edieresis egrave iacute icircumflex idieresis igrave
  ntilde oacute ocircumflex odieresis ograve otilde scaron uacute ucircumflex udieresis ugrave yacute ydieresis zcaron".split(" "),
-Xg=".notdef space exclamsmall Hungarumlautsmall dollaroldstyle dollarsuperior ampersandsmall Acutesmall parenleftsuperior parenrightsuperior twodotenleader onedotenleader comma hyphen period fraction zerooldstyle oneoldstyle twooldstyle threeoldstyle fouroldstyle fiveoldstyle sixoldstyle sevenoldstyle eightoldstyle nineoldstyle colon semicolon commasuperior threequartersemdash periodsuperior questionsmall asuperior bsuperior centsuperior dsuperior esuperior isuperior lsuperior msuperior nsuperior osuperior rsuperior ssuperior tsuperior ff fi fl ffi ffl parenleftinferior parenrightinferior Circumflexsmall hyphensuperior Gravesmall Asmall Bsmall Csmall Dsmall Esmall Fsmall Gsmall Hsmall Ismall Jsmall Ksmall Lsmall Msmall Nsmall Osmall Psmall Qsmall Rsmall Ssmall Tsmall Usmall Vsmall Wsmall Xsmall Ysmall Zsmall colonmonetary onefitted rupiah Tildesmall exclamdownsmall centoldstyle Lslashsmall Scaronsmall Zcaronsmall Dieresissmall Brevesmall Caronsmall Dotaccentsmall Macronsmall
  figuredash hypheninferior Ogoneksmall Ringsmall Cedillasmall onequarter onehalf threequarters questiondownsmall oneeighth threeeighths fiveeighths seveneighths onethird twothirds zerosuperior onesuperior twosuperior threesuperior foursuperior fivesuperior sixsuperior sevensuperior eightsuperior ninesuperior zeroinferior oneinferior twoinferior threeinferior fourinferior fiveinferior sixinferior seveninferior eightinferior nineinferior centinferior dollarinferior periodinferior commainferior Agravesmall Aacutesmall Acircumflexsmall Atildesmall Adieresissmall Aringsmall AEsmall Ccedillasmall Egravesmall Eacutesmall Ecircumflexsmall Edieresissmall Igravesmall Iacutesmall Icircumflexsmall Idieresissmall Ethsmall Ntildesmall Ogravesmall Oacutesmall Ocircumflexsmall Otildesmall Odieresissmall OEsmall Oslashsmall Ugravesmall Uacutesmall Ucircumflexsmall Udieresissmall Yacutesmall Thornsmall Ydieresissmall".split(" "),
-Yg=".notdef space dollaroldstyle dollarsuperior parenleftsuperior parenrightsuperior twodotenleader onedotenleader comma hyphen period fraction zerooldstyle oneoldstyle twooldstyle threeoldstyle fouroldstyle fiveoldstyle sixoldstyle sevenoldstyle eightoldstyle nineoldstyle colon semicolon commasuperior threequartersemdash periodsuperior asuperior bsuperior centsuperior dsuperior esuperior isuperior lsuperior msuperior nsuperior osuperior rsuperior ssuperior tsuperior ff fi fl ffi ffl parenleftinferior parenrightinferior hyphensuperior colonmonetary onefitted rupiah centoldstyle figuredash hypheninferior onequarter onehalf threequarters oneeighth threeeighths fiveeighths seveneighths onethird twothirds zerosuperior onesuperior twosuperior threesuperior foursuperior fivesuperior sixsuperior sevensuperior eightsuperior ninesuperior zeroinferior oneinferior twoinferior threeinferior fourinferior fiveinferior sixinferior seveninferior eightinferior nineinferior centinferior dolla
 rinferior periodinferior commainferior".split(" "),
-Zg={"Adobe-Japan1":[[32,160],{f:12,c:33},[45,8209],{f:46,c:46},165,{f:2,c:93},[95,818],[96,768],{f:27,c:97},166,125,[732,771],[700,8217],92,[699,8216],124,[126,8764],{f:3,c:161},8260,402,0,164,8220,171,{f:2,c:8249},{f:2,c:64257},[8210,8211],0,0,[183,8729],0,8226,8218,8222,8221,187,0,0,191,{f:2,c:769},[175,772],{f:3,c:774},778,[184,807],779,808,780,[822,8212],198,170,321,216,338,186,230,305,322,248,339,223,173,169,172,174,0,0,{f:2,c:178},181,185,{f:3,c:188},{f:6,c:192},{f:16,c:199},0,{f:6,c:217},{f:6,
-c:224},{f:16,c:231},0,{f:7,c:249},352,376,381,[773,8254],353,8482,382,0,8194,{s:91},65512,{s:3},{f:63,c:65377},{s:243},[8195,12288],{f:2,c:12289},65292,65294,12539,{f:2,c:65306},65311,65281,{f:2,c:12443},180,65344,168,65342,65507,65343,{f:2,c:12541},{f:2,c:12445},12291,20189,{f:3,c:12293},12540,8213,8208,65295,65340,[12316,65374],8214,65372,8230,8229,{s:4},{f:2,c:65288},{f:2,c:12308},65339,65341,65371,65373,{f:10,c:12296},65291,[8722,65293],177,215,247,65309,8800,65308,65310,{f:2,c:8806},8734,8756,
-9794,9792,176,{f:2,c:8242},8451,65509,65284,{f:2,c:65504},65285,65283,65286,65290,65312,167,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8251,12306,8594,{f:2,c:8592},8595,12307,8712,8715,{f:2,c:8838},{f:2,c:8834},8746,8745,{f:2,c:8743},65506,8658,8660,8704,8707,8736,8869,8978,8706,8711,8801,8786,{f:2,c:8810},8730,8765,8733,8757,{f:2,c:8747},8491,8240,9839,9837,9834,{f:2,c:8224},182,9711,{f:10,c:65296},{f:26,c:65313},{f:26,c:65345},{f:83,c:12353},{f:86,c:12449},{f:17,c:913},{f:7,
-c:931},{f:17,c:945},{f:7,c:963},{f:6,c:1040},1025,{f:32,c:1046},1105,{f:26,c:1078},20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,[12176,34915],35586,36949,36986,21307,
-20117,20133,22495,32946,37057,30959,[12032,19968],22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,[12155,32701],36802,[12204,38632],21359,40284,31418,19985,30867,[12165,33276],28198,22040,21764,27421,34074,39995,23013,21417,28006,[12128,29916],38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,
-28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,[12009,40644],23713,27798,33659,20740,23627,25014,33222,26742,29281,[12036,20057],20474,21368,24681,28201,31311,[12211,38899],19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,
-23233,23478,23521,31185,26247,26524,26550,27468,27827,[12117,28779],29634,31117,[12146,31166],31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,[12123,29273],30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,[12185,35997],20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,
-33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,[12179,35282],36203,36611,37101,38307,38548,[12208,38761],23398,23731,27005,{f:2,c:38989},25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21E3,33477,[12129,29926],20094,20355,20896,23506,21002,
-21208,21223,24059,21914,22570,23014,23436,23448,23515,[12082,24178],24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,[12130,29976],30435,30475,31487,31649,31777,32233,[12152,32566],32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39E3,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,
-26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32E3,24509,35215,35352,36020,36215,36556,36637,39138,39438,[12004,12225,39740],[12018,20096],20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,[12233,40653],21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,[12088,24339],24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,
-31998,32102,26087,[12124,29275],21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,[12226,39770],20136,{f:2,c:20139},20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,[12127,29577],26704,31873,20677,21220,22343,[12081,24062],37670,[12100,26020],27427,27453,29748,31105,
-31165,31563,32202,33465,33740,34943,35167,35641,36817,[12198,37329],21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,
-31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,[12107,27424],27770,28500,[12147,31348],32080,[12174,34880],35363,[12105,26376],20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,[12125,29356],29486,30740,30831,32121,30476,32937,[12178,35211],35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,
-[12126,29572],29694,32067,33335,[12180,35328],35578,38480,20046,20491,21476,21628,22266,22993,23396,[12080,24049],24235,24359,[12094,25144],25925,26543,28246,29392,31946,34996,32929,32993,33776,[11969,34382],35463,36328,37431,38599,39015,[12238,40723],20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,[12061,21475],21521,21518,21897,22353,22434,22909,23380,23389,23439,
-[12079,24037],24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,[12175,34892],34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,[12217,39321],[12220,39640],40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,[12234,40658],
-29508,28425,33136,29969,24573,24794,[12219,39592],29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,[12169,33390],39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,
-21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,[12139,30399],26194,19977,20632,21442,[12077,23665],24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,[12064,22763],22987,22985,23039,[12070,23376],23629,24066,24107,24535,24605,25351,[12096,
-25903],23388,26031,26045,26088,26525,[12108,27490],27515,[12114,27663],29509,31049,31169,[12151,31992],32025,32043,32930,33026,[12164,33267],35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,[12013,27503],20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,[12144,31034],[12157,32780],[12159,32819],[12163,33258],33940,36766,27728,[12229,40575],24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,
-36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,[12190,36554],36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,[12095,25163],26417,27530,29417,29664,31278,33131,36259,37202,[12216,39318],20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,[12168,33311],33936,34886,35186,
-35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,[12055,21313],24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,[12069,22899],24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,
-21736,21830,21809,22039,22888,22974,23100,23477,23558,[12073,23567],23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,
-33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,[12170,33394],35302,[12215,39135],34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,[12092,24515],24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,[12162,33251],33455,34218,35242,35386,[12189,36523],[12191,36763],36914,37341,38663,[12040,20154],20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,
-[12116,27700],28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,[12072,23544],19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,[12131,29983],30427,31934,32854,22768,35069,[11972,35199],35488,35475,35531,36893,37266,[11992,38738],38745,[12011,25993],31246,33030,38587,24109,24796,25114,26021,26132,26512,[12143,30707],31309,
-31821,32318,33034,36012,[12186,36196],36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,[12166,33292],34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,[12167,33307],33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,
-31062,31199,31895,32032,32068,34311,35380,38459,36961,[12239,40736],20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,[12187,36208],36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,[12188,36275],36895,20439,23646,36042,26063,32154,21330,34966,
-20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,[12068,22823],31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,[12192,36784],22890,33073,24061,31466,
-36799,26842,[12181,35895],29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,[12149,31481],31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,[12173,34411],34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,
-36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,[11985,12199,38263],38914,[12227,40165],21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,[12118,29226],21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,
-23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,[12237,40718],27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,[12133,3E4],38651,20814,21520,22581,22615,22956,23648,24466,[12099,26007],26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,[12063,22303],
-22900,24594,20498,20826,20908,20941,[12049,20992],21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,[12182,35910],36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,
-26932,23626,40182,33515,23493,[12195,37193],28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,[12038,20108],23612,24336,36841,21250,36049,[12161,32905],34425,24319,[12103,26085],20083,[12042,20837],22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,
-33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,[12218,39340],20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,[12137,30333],31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,[12008,40614],20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,[12043,20843],37474,
-28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,[12196,37318],29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26E3,[12112,27604],27852,30130,[12138,30382],30865,31192,32203,32631,32933,34987,35513,36027,36991,[12206,38750],[12214,39131],27147,31800,20633,23614,24494,26503,
-27608,29749,30473,32654,[12240,40763],26570,31255,21305,[12134,30091],39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,[12119,29238],31526,33104,33178,33433,35676,36E3,36070,36212,[12201,
-38428],38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,[12213,39080],33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,[12098,25991],32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,[12150,31859],[12212,38913],20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,[12122,29255],31687,32232,36794,36820,36941,20415,21193,23081,
-24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,[11935,27597],31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,[12101,26041],26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,{f:2,c:24536},25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,
-[12056,21340],22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,[12231,40635],22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,[12060,21448],25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,[11922,24051],31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,[11936,27665],30496,21209,22818,28961,29279,[12141,30683],38695,40289,26891,23167,
-23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,[12207,38754],40634,25720,27169,33538,22916,23391,[12113,27611],29467,30450,32178,32791,33945,20786,[12106,26408],40665,[12140,30446],26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,[12200,38272],21249,20063,20918,22812,29242,32822,37326,24357,[12142,30690],21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,
-24736,24962,25558,26377,26586,28263,28044,{f:2,c:29494},30001,31056,35029,35480,36938,[12194,37009],37109,38596,34701,[12067,22805],20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,[12132,29992],31407,[12154,32650],32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,
-21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,[12197,37324],38626,38520,24459,29575,[12148,31435],33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,[12015,31452],[12243,40845],20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,[12050,21147],32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,
-24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,[12156,32769],32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,24332,19984,19989,20010,20017,[12034,20022],
-20028,[12035,20031],20034,20054,20056,20098,[12037,20101],35947,20106,33298,24333,20110,{f:2,c:20126},[12039,20128],20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,{f:2,c:20452},20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,
-20570,20566,20588,20600,20608,20634,20613,20660,20658,{f:2,c:20681},20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,{f:2,c:20737},20758,20757,20756,20762,20769,20794,20791,20796,20795,[12041,20799],[11918,20800],20818,20812,20820,20834,31480,{f:2,c:20841},20846,20864,[12044,20866],22232,20876,20873,20879,20881,20883,20885,[12045,20886],20900,20902,20898,{f:2,c:20905},[12046,20907],20915,{f:2,c:20913},20912,20917,20925,20933,20937,20955,[12047,20960],34389,20969,20973,20976,[12048,
-20981],20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,{f:2,c:21067},21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,{f:2,c:21164},21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,[12051,21241],21254,21256,30008,21261,21264,21263,[12052,21269],[12053,21274],21283,21295,21297,21299,[12054,21304],21312,21318,21317,19991,21321,21325,20950,21342,[12057,21353],21358,22808,21371,21367,[12058,21378],21398,
-21408,21414,21413,21422,21424,[12059,21430],21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,{f:2,c:21548},21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,{f:2,c:21733},21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,{f:2,c:21846},21816,21811,21853,21913,21888,21679,21898,21919,21883,
-21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,[12062,22231],22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,{f:2,c:22327},22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,
-22419,22432,22451,22436,22442,22448,22467,22470,22484,{f:2,c:22482},22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,{f:3,c:22779},[12065,22786],[12066,22794],22800,22811,26790,22821,{f:2,c:22828},22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,
-23016,23004,22925,{f:2,c:23001},23077,23071,23057,23068,23049,23066,23104,23148,23113,{f:2,c:23093},23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,{f:2,c:23290},23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,{f:2,c:23386},23397,23401,23408,23411,23413,23416,25992,23418,[12071,23424],23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,{f:2,c:23559},23565,23571,23584,[11920,12074,23586],
-23592,[12075,23608],23609,23617,23622,23630,23635,23632,23631,23409,23660,[12076,23662],20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,[12078,24027],24043,24050,24053,24075,24090,24089,24081,24091,{f:2,c:24118},
-24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,{f:2,c:24181},[11923,12083,24186],40636,[12084,24191],24224,{f:2,c:24257},24264,24272,24271,24278,24291,24285,{f:2,c:24282},24290,24289,{f:2,c:24296},24300,24305,24307,24304,[12085,24308],24312,[12086,24318],24323,24329,24413,24412,[12087,24331],24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,[11924,24401],{f:2,c:24406},24409,[12090,24417],24429,[12091,24435],24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,
-24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,{f:2,c:24726},24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,{f:2,c:24822},24832,24820,24826,24835,24865,24827,24817,{f:2,c:24845},24903,24894,24872,24871,24906,24895,24892,24876,
-24884,24893,24898,24900,24947,24951,{f:3,c:24920},24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,[12093,25096],25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,{f:2,c:25138},25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,{f:2,c:25234},25238,25300,25219,25236,25303,25297,25275,25295,
-25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,{f:2,c:25824},25260,25827,25839,25900,25846,25844,
-25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,[12097,25908],[11929,25909],25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,{f:2,c:25986},35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,[12102,26080],[11931,26081],26097,26482,26122,26115,26107,26483,{f:2,c:26165},26164,26140,26191,26180,26185,26177,26206,26205,26212,{f:2,c:26215},26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,
-26326,26330,26336,26175,26342,26345,[12104,26352],26357,26359,26383,26390,26398,{f:2,c:26406},38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,{f:2,c:26467},26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,
-26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27E3,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,
-27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,{f:2,c:27298},27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,[12109,27513],{f:2,c:27519},27524,27523,27533,27544,27541,27550,27556,{f:2,c:27562},27567,27570,27569,[12110,27571],27575,27580,27590,[12111,27595],27603,27615,
-27628,27627,27635,27631,40638,27656,27667,[12115,27668],27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,
-28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,{f:2,c:28372},28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,
-28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,[12120,29243],29244,[12121,29247],29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,
-29351,29369,29362,29379,29382,29380,29390,29394,29410,{f:2,c:29408},29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,{f:2,c:29518},40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,{f:2,c:29936},29944,29943,29956,29955,29957,29964,
-29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,{f:2,c:30086},30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,{f:2,c:30206},30204,30209,30192,30202,{f:2,c:30194},30219,30221,30217,30239,30247,{f:3,c:30240},30244,30260,30256,30267,{f:2,c:30279},30278,30300,30296,{f:2,c:30305},{f:3,c:30312},30311,30316,30320,30322,[12136,30326],
-30328,30332,30336,30339,30344,30347,30350,30358,30355,{f:2,c:30361},30384,30388,{f:3,c:30392},30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,{f:2,c:30501},30491,{f:2,c:30519},30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,{f:2,c:30652},30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,
-30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,{f:2,c:31161},31177,31189,31207,31212,31201,31203,31240,31245,{f:2,c:31256},31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,{f:2,c:31329},31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,
-{f:2,c:31449},31453,{f:2,c:31457},31462,31469,31472,31490,31503,31498,31494,31539,{f:2,c:31512},31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,{f:2,c:31600},31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,
-31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,
-32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,{f:2,c:32345},32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,{f:2,c:32392},32396,32402,32400,{f:2,c:32403},32406,32398,{f:2,c:32411},32568,32570,32581,{f:3,c:32588},32592,[12153,32593],32597,32596,32600,{f:2,c:32607},{f:2,c:32616},32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,{f:2,c:32709},32714,32725,32724,32737,32742,
-32745,32755,32761,39132,32774,32772,32779,[12158,32786],{f:2,c:32792},32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,[12160,32895],32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,{f:2,c:33125},33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,
-33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,{f:2,c:33247},33255,{f:2,c:33274},33278,{f:2,c:33281},33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,{f:2,c:33386},33326,33393,33399,[12171,33400],33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,{f:2,c:33559},33669,
-33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34E3,33985,33990,34006,33953,34081,34047,34036,{f:2,c:34071},34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,
-34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,[12172,34381],20053,34388,34399,34407,34417,34451,34467,{f:2,c:34473},{f:2,c:34443},34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,
-34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,{f:2,c:34806},34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,{f:2,c:35011},35028,{f:2,c:35032},35037,35065,35074,35068,35060,35048,
-35058,35076,35084,35082,35091,35139,35102,35109,{f:2,c:35114},35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,[12177,35198],35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,{f:2,c:35263},35290,{f:2,c:35292},35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,{f:2,c:35493},35482,35491,35524,35533,35522,35546,35563,35571,
-35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,{f:2,c:35730},35734,{f:2,c:35737},35898,35905,35903,35912,35916,35918,35920,[12183,35925],35938,35948,[12184,35960],35962,35970,35977,35973,35978,{f:2,c:35981},35988,35964,35992,25117,36013,36010,36029,{f:2,c:36018},36014,36022,36040,36033,36068,36067,36058,36093,
-{f:2,c:36090},{f:2,c:36100},36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,{f:2,c:36330},36319,36323,36348,{f:2,c:36360},36351,{f:2,c:36381},36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,
-36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,{f:3,c:36706},36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,{f:2,c:36857},36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,{f:4,c:36943},36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,
-25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,{f:2,c:37312},37321,37323,37328,37334,37343,37345,37339,37372,{f:2,c:37365},37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,{f:2,c:37804},37780,37817,
-{f:2,c:37846},37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38E3,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,{f:2,c:38296},38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,{f:2,c:38446},38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,
-38552,38549,38551,38570,38567,{f:2,c:38577},38576,38580,[12202,38582],38584,[12203,38585],38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,{f:2,c:38717},38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,{f:2,c:38799},38812,38824,38822,38819,{f:2,c:38835},38851,38854,38856,[12209,38859],38876,[12210,38893],40783,38898,31455,38902,38901,38927,38924,
-38968,38948,38945,38967,38973,38982,38991,38987,39019,{f:3,c:39023},39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,{f:2,c:39197},39204,39200,39212,39214,{f:2,c:39229},39234,39241,39237,39248,39243,{f:2,c:39249},39244,39253,{f:2,c:39319},39333,{f:2,c:39341},39356,39391,39387,39389,39384,39377,{f:2,c:39405},{f:2,c:39409},39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,
-39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,{f:2,c:39635},39646,[12221,39647],{f:2,c:39650},39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,{f:2,c:39714},[12222,39717],{f:4,c:39719},39726,[12223,39727],[12224,39730],39748,39747,39759,{f:2,c:39757},39761,39768,39796,39827,39811,39825,{f:2,c:39830},{f:2,c:39839},39848,39860,39872,39882,39865,39878,39887,{f:2,c:39889},39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,
-39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,{f:2,c:40285},40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,{f:2,c:40474},40478,[12228,40565],40569,40573,40577,40584,{f:2,c:40587},40594,40597,
-40593,40605,[12230,40613],40617,40632,40618,40621,38753,40652,{f:3,c:40654},40660,40668,40670,40669,40672,40677,40680,40687,40692,{f:2,c:40694},[12235,40697],{f:2,c:40699},[12236,40701],{f:2,c:40711},30391,40725,40737,40748,40766,[12241,40778],[12242,40786],40788,40803,{f:3,c:40799},{f:2,c:40806},40812,40810,40823,40818,40822,40853,[12244,40860],[12245,40864],22575,27079,36953,29796,0,{f:76,c:9472},{f:20,c:9312},{f:10,c:8544},13129,13076,0,13133,0,13095,0,13110,13137,0,13069,13094,0,13099,13130,0,
-{f:3,c:13212},{f:2,c:13198},13252,13217,12317,12319,8470,13261,0,{f:5,c:12964},{f:2,c:12849},12857,13182,13181,13180,8750,8721,{s:3},8735,8895,0,0,21854,{s:7},167133,0,0,28976,0,40407,{s:4},64054,0,0,22169,15694,{s:4},20448,0,0,36544,0,194797,{s:4},153716,32363,33606,167670,{s:3},40572,0,0,26171,0,40628,{s:4},26629,{s:5},23650,0,194780,0,32353,0,0,64070,{s:5},34083,37292,{s:7},34796,{s:8},25620,0,0,39506,{s:4},64074,0,194692,{s:4},31774,{s:6},64016,25681,0,0,63980,22625,39002,0,194679,{s:3},31153,
-0,28678,{s:9},22218,{s:3},21085,0,28497,37297,{s:10},64106,{s:6},38960,0,40629,{s:9},33802,63939,{f:2,c:63890},63897,0,34847,194575,0,194771,194584,{s:7},137754,23643,{s:4},25890,0,0,26618,0,26766,0,148432,194848,{s:21},34110,{s:15},30562,{s:12},65075,0,{f:2,c:65073},{s:4},65072,{f:2,c:65077},{f:2,c:65081},0,0,{f:2,c:65079},{f:2,c:65087},{f:2,c:65085},{f:4,c:65089},{f:2,c:65083},{s:41},{f:3,c:12436},0,0,22099,{s:41},65508,65287,65282,0,9665,9655,8681,8679,8678,8680,9634,9831,9825,9828,9826,13216,
-13218,{f:2,c:13220},13207,8467,13208,13235,13234,13233,13232,{f:3,c:13189},13259,13200,13268,13206,13090,13078,13080,13077,13059,13091,13143,13122,13113,13115,13056,13105,13127,13086,13098,0,13183,8481,9742,12342,12320,{s:3},{f:9,c:9352},{f:20,c:9332},12881,{f:10,c:8560},{f:10,c:12882},{f:26,c:9372},12867,12861,12863,12852,12856,12851,12860,12866,12862,12854,12853,12859,12864,12858,12976,12973,12969,12975,12948,12970,12952,12971,12946,12945,12947,12972,12974,12950,{s:8},{f:3,c:9131},0,{f:3,c:9127},
-0,13260,13061,0,0,13215,13219,13222,0,0,12958,{f:2,c:13192},13256,8749,0,12848,{f:6,c:12842},12855,12865,10145,{s:3},9673,9824,9829,9827,9830,{f:4,c:9728},9758,{f:2,c:9756},9759,12953,9450,{f:2,c:8554},{s:3},{f:8,c:9601},9615,9614,9613,9612,9611,9610,9609,{f:2,c:9620},{f:2,c:9581},9584,9583,9552,9566,9578,9569,{f:2,c:9698},9701,9700,0,0,{f:3,c:9585},{s:20},20956,29081,{f:9,c:10102},{s:3},{f:2,c:8570},{s:3},8575,8458,8457,0,0,12292,8646,{f:2,c:8644},0,{f:4,c:12535},0,0,12957,{s:3},13179,{s:3},13107,
-13134,{s:30},32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,[12033,20008],20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,0,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,0,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,0,23582,23718,23738,23797,
-23847,23891,0,23874,23917,{f:2,c:23992},24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26121,26158,0,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,0,26470,26555,26706,26560,0,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,
-28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,{f:2,c:28998},0,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,0,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,{f:3,c:64024},31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,0,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,{f:2,
-c:64032},34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,0,64037,36967,37086,64038,37141,37159,37338,37335,37342,{f:2,c:37357},{f:2,c:37348},37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,{f:2,c:37495},37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,0,64041,38557,38575,38707,38715,38723,38733,38735,[12205,38737],
-0,38999,39013,{f:2,c:64042},39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,{s:636},8364,8486,0,0,64256,{f:2,c:64259},257,299,363,275,333,256,298,362,274,332,{f:4,c:8539},{f:2,c:8531},8304,{f:6,c:8308},{f:10,c:8320},461,282,0,7868,463,0,296,465,0,467,366,360,462,283,0,7869,464,0,297,466,0,468,367,361,593,8049,8048,509,0,596,0,0,601,0,0,602,0,0,603,8051,8050,0,331,629,652,0,0,658,643,720,{s:682},{f:10,c:12832},{s:108},{f:4,c:12892},{f:15,c:12977},
-{s:50},{f:26,c:9424},{f:26,c:9398},{s:48},{f:47,c:13008},0,{f:10,c:12928},12944,{f:6,c:12938},0,12959,{s:6},{f:2,c:12960},12955,12954,12963,12962,12951,0,12956,12949,{s:6},9676,{s:11},10111,{f:10,c:9451},{s:510},8414,{s:815},13274,{s:3},8448,13250,0,0,8453,0,13169,0,0,13197,13211,{s:3},{f:2,c:13271},{s:3},{f:2,c:13057},13060,13062,0,13064,0,13063,13066,0,13065,0,13067,0,13068,{f:6,c:13070},0,13079,0,13081,0,{f:4,c:13082},{f:3,c:13087},13092,0,13093,0,0,{f:2,c:13096},0,13101,0,0,{f:3,c:13102},13106,
-0,0,{f:2,c:13108},13116,{s:3},13111,0,13112,13114,13117,13121,{f:3,c:13118},{f:4,c:13123},13128,{f:2,c:13131},{f:2,c:13135},0,0,13138,13140,0,0,13139,{f:2,c:13141},{s:132},8501,976,8714,8463,0,981,987,977,0,{f:2,c:9832},9836,{s:5},12347,0,{f:3,c:12339},8252,8265,{s:5},8723,0,8771,{f:2,c:8818},{s:6},{f:2,c:12312},{f:2,c:65375},{s:10},9115,{f:2,c:9117},9120,{s:4},9121,{f:2,c:9123},9126,{s:12},[9116,9119,9122,9125,9130],{s:8},9986,0,0,12349,0,12447,0,0,8709,8864,8854,8856,8853,8855,{s:4},9664,9654,{s:4},
-8656,8596,{f:2,c:8600},{f:2,c:8598},8652,8651,{s:10},12336,8967,{s:8},10048,10047,{s:7},9643,0,9642,0,10010,{s:12},9702,{s:4},10070,{s:379},{f:2,c:65093},{s:679},64103,64098,32227,[12232,40643],28331,64082,64061,64069,64062,27114,28212,64096,64071,64056,64066,64078,34395,64105,64052,64099,25581,25802,30799,64084,63856,64077,64097,64072,64076,{f:2,c:64091},64081,64067,64090,28041,29376,0,194885,64086,64080,64049,64059,24034,64063,64101,21373,64055,64095,24501,64064,0,64083,0,64085,64104,64068,64089,
-26202,64053,64075,64100,64065,64048,0,64057,64051,27493,64058,27599,64050,25150,64079,63773,63964,63798,28122,63952,26310,27511,64087,37706,0,37636,{s:120},133390,{s:120},35999,11991,[11965,158033],{s:5},37555,38321,0,0,194812,{s:13},194965,{s:8},194794,0,26478,11974,0,194594,{s:13},13314,0,0,26083,{s:4},134071,{s:10},171339,0,194611,24378,{s:8},11945,0,20465,{s:7},63753,{s:7},11964,0,0,194732,26435,{s:3},133732,35329,25142,0,0,21555,23067,{s:3},25221,0,0,194819,{s:6},21567,{s:9},27506,{s:4},29986,
-19256,0,0,24063,{s:6},194827,29626,134047,{s:3},194600,0,194849,{s:5},194623,{s:16},194675,{f:2,c:11916},23577,{s:3},131083,23426,194642,{s:5},11997,[11999,39136],[11998,169599],14221,0,[11927,14586],0,194887,0,[11909,20155],131490,{s:7},13599,0,194738,0,0,[11971,35200],{s:4},31237,{s:4},35498,0,32085,0,28568,{s:7},25591,30246,{s:4},[11978,163767],{s:5},146686,{s:5},13351,0,0,33067,0,0,194842,{s:5},11950,{s:5},194714,{s:3},194831,{s:19},22305,135741,194586,0,64003,{s:7},21534,15240,20839,{s:4},63839,
-{s:9},20023,{s:13},[11946,150804],24421,23020,194658,0,24217,{s:46},13416,{s:8},21200,{s:9},26625,0,195024,195039,{s:5},153215,0,0,11959,{s:4},36534,63775,{s:3},63875,{s:5},31867,63906,0,63898,0,[11961,32770],157360,{s:4},[11911,132648],0,0,131210,194604,[11915,13630],{s:4},21589,0,22841,0,0,23414,194669,23572,14306,23782,0,20040,0,0,194742,{s:4},158105,25371,0,0,26211,0,194779,0,0,27126,27014,{s:3},27596,0,28183,0,0,27818,{s:3},[11942,20012],0,0,29935,30069,30188,30286,16305,30570,30633,{s:6},31571,
-0,0,16996,{s:3},194924,0,0,32328,{s:5},11955,{s:4},33089,17491,0,[11966,33401],[11967,64094],[11968,64093],0,20857,33626,{s:3},17701,0,34292,131248,{s:4},34429,0,13358,35014,{s:6},18406,{s:8},36808,{s:19},166279,0,0,167447,0,0,38969,{s:6},39432,{s:4},39903,{s:10},148206,{s:5},21385,0,64017,194785,0,146622,132625,0,{f:2,c:19972},19999,20011,{f:2,c:20015},{f:2,c:20032},20036,[11907,20058],20095,20109,20118,20153,20176,20192,20221,20223,20235,20245,20320,20283,20297,20308,20346,{f:2,c:20349},20375,20414,
-20431,20477,{f:2,c:20480},20496,20507,20519,20526,20567,20582,20586,20539,20623,20630,20636,20684,20710,20713,20719,20744,20747,20752,20763,20766,20831,20897,20924,0,20974,20980,20993,[11913,20994],21011,21065,21089,21094,21139,21192,21232,{f:2,c:21258},21310,21324,21323,21345,21356,21419,21466,21478,21493,21543,21581,21606,21611,21620,21645,21654,21665,21677,21689,21695,21702,21709,21774,21803,21813,21834,21856,0,21896,21902,22024,{f:2,c:22030},22071,22079,22089,22091,22095,22118,22121,22127,{f:2,
-c:22129},22165,22170,{f:2,c:22188},22193,22217,22237,22244,22282,22293,22307,22319,{f:2,c:22323},22348,22384,22412,22428,22456,22502,22509,{f:2,c:22517},22527,22537,22560,22578,22652,22656,22697,22734,22736,22740,22746,22761,22796,22820,22831,22881,22893,22986,22994,23005,{f:2,c:23011},23044,23052,23075,23111,23125,23139,23149,23166,23198,23207,23212,23219,23264,23296,23321,23333,23341,23361,23420,{f:2,c:23422},23434,[11919,23587],23595,23600,23651,23657,23676,23755,23762,23796,23844,23846,23875,
-23878,23882,23954,23956,23961,23968,24024,24032,24056,24064,24082,{f:2,c:24084},24088,24110,24152,{f:2,c:24171},24232,24234,{f:2,c:24254},0,24274,24327,24334,{f:2,c:24348},24354,24360,24374,24379,24384,[12089,24400],24408,24420,24457,24476,24487,24484,24495,24504,[11926,24516],24521,24545,24553,24557,24572,24599,24602,24627,24673,24703,24734,24740,24752,24779,24795,24824,{f:3,c:24850},24860,24956,24973,24991,25E3,25026,25055,25109,25129,25155,25158,[11928,25164],25169,25174,25284,25340,25354,25357,
-25368,25401,{f:2,c:25410},25445,25460,25469,25476,25479,25488,25502,25553,25564,25609,25616,25634,25684,25691,25709,25723,{f:2,c:25790},25829,25847,25851,25860,25878,25881,25927,25959,25985,25989,26050,26096,26098,26156,26188,{f:2,c:26203},26209,26219,0,26276,26312,26348,26373,26387,26419,26440,26444,26486,26491,26544,26546,26617,26583,26585,26608,26668,{f:2,c:26672},26715,26738,26741,26746,26756,26789,26802,26832,26838,26856,26861,{f:2,c:26864},26876,26897,26899,26933,26939,26967,26979,26994,{f:2,
-c:27007},27046,27053,27063,{f:2,c:27094},27137,27151,27157,27176,27188,27198,27205,{f:2,c:27216},27222,27227,27267,27273,27281,{f:3,c:27293},27356,27367,27372,27422,27428,27445,27462,27478,27488,27522,27582,27617,27633,27664,27699,[11937,27701],11938,27737,27766,27771,27781,27797,27804,27856,27860,27862,27872,{f:2,c:27883},27886,27914,27918,27921,27950,27991,27998,28005,28034,28095,28100,28106,28118,28137,28194,28241,28359,28362,28366,28413,28442,28458,28463,28467,28506,28510,28514,28541,28555,28557,
-28562,28564,28570,{f:2,c:28583},28598,28634,28638,0,28729,28732,0,28756,{f:2,c:28765},28772,[11939,28780],28798,28801,28821,28855,{f:2,c:28883},28888,28892,28935,28960,28977,29002,29010,29024,29049,29074,0,29131,29139,29142,29184,29213,29227,29240,29249,29267,{f:2,c:29269},29276,29325,[11944,29357],29364,29383,29435,{f:2,c:29444},29480,29489,29507,29548,29564,29571,{f:2,c:29573},29589,{f:3,c:29598},29606,29611,29621,29623,29628,29647,29657,29673,29684,29693,29700,29706,{f:2,c:29722},29732,29736,29740,
-{f:3,c:29743},29753,29764,29767,29771,29773,29777,29783,29798,29803,29809,29824,{f:3,c:29829},29840,29848,29852,29856,29859,29864,29867,29877,29887,29896,29914,29918,30030,30073,30081,30096,[12135,30098],30099,30132,30180,30201,30208,30218,{f:2,c:30229},30233,30238,30253,30261,30275,30283,30309,30317,30319,30321,30324,{f:2,c:30372},30405,30412,30444,30460,30516,30518,30556,{f:2,c:30559},30578,30589,30613,30634,30694,30704,30708,30726,30754,{f:2,c:30765},30768,30773,30824,30878,30920,30924,30926,30948,
-{f:2,c:30944},30962,30967,30971,31025,0,[11949,31035],31037,31045,{f:2,c:31067},31115,31126,31128,[12145,31160],31163,31178,31194,31235,31241,31249,31262,31277,31289,31301,31308,31325,0,31341,31352,31392,31395,31411,{f:2,c:31419},31430,31495,31508,31527,31537,31559,31566,31584,31593,31597,31602,31633,31663,31703,31705,31755,31759,31776,31782,31793,31798,31825,31833,31847,31854,31856,31932,31935,{f:2,c:31944},31959,31961,31965,31979,{f:3,c:32007},32019,32029,32035,32065,32083,32089,32093,32122,32134,
-{f:2,c:32139},32204,32235,32241,32249,32264,32273,32277,32288,32327,32354,32366,32371,32397,32401,32408,32580,32591,[11947,11954,32594],[11953,32595],32609,32657,32703,32718,32735,32741,32748,{f:2,c:32750},32762,32782,32785,32788,32804,32806,32826,32828,32864,32881,32885,32926,32934,32939,{f:2,c:32983},33046,33048,33082,33098,33100,33153,33156,33204,33231,33273,33283,33313,33330,33332,33350,33355,33359,33422,33454,33463,33470,33478,33534,33603,33617,33621,33670,33677,33682,33688,33705,{f:2,c:33727},
-33770,33807,33809,33866,33910,33960,33967,33984,33986,34032,34045,34060,34100,34142,34191,34231,34254,34221,34322,34345,34386,34403,34412,34415,34426,34445,34449,34456,{f:2,c:34471},34554,34557,34571,34579,34585,34590,34600,34622,34673,34696,34713,{f:2,c:34732},34741,34774,34795,34797,34817,0,34822,34827,34836,34844,34902,34911,[11970,34916],34968,34986,{f:2,c:35005},35018,35026,35035,{f:2,c:35056},35078,{f:3,c:35096},35111,35120,35134,35195,35284,35286,35301,35313,35335,35343,35349,35362,35406,35455,
-35572,35615,35639,{f:2,c:35651},35668,35740,35742,35911,35924,35955,36004,36057,36065,36088,36094,36123,36201,36204,36228,36237,36245,36262,36294,36302,36324,36332,36384,36427,36460,36464,36474,36498,36526,36531,36561,36564,36601,36631,36662,36774,[12193,36789],[11981,36790],0,36832,36836,36854,36866,36908,36932,37E3,37013,37017,37019,37026,37044,37079,37085,37108,37143,37148,37169,37178,37181,37192,37211,37217,37220,37262,37278,37288,{f:2,c:37293},37298,37308,37360,37367,37371,37383,37416,37427,
-37432,37443,37447,37455,37472,37570,{f:2,c:37579},37599,37645,37653,37663,37671,37703,37714,0,37738,37741,37787,37818,37801,37825,37834,37858,37882,37885,37903,37940,37951,37973,37995,38002,[11986,38264],38310,38313,0,38324,38333,38362,[11983,11990,38429],38465,38488,38532,38564,38569,38610,195060,38622,38633,38641,38658,38665,38746,38755,38766,38771,38810,38818,{f:2,c:38837},38873,38878,38900,38922,38926,38942,38947,38955,38974,{f:2,c:38994},39001,39020,39096,39098,39103,39112,39141,{f:2,c:39218},
-39232,39245,39260,39263,39345,{f:2,c:39353},39369,39426,39446,39460,39463,{f:2,c:39469},39478,39480,39498,39510,{f:2,c:39605},39673,39683,39712,{f:2,c:39731},39795,39801,39847,39873,39879,39895,39911,39915,39927,39930,39933,39947,39975,39978,39990,40001,40019,40035,40048,40055,40194,40258,40263,40291,40297,40316,40318,40333,40369,40387,40391,40406,40415,40427,40436,40469,40477,40612,40616,40620,40679,40686,40720,40722,40727,40729,40751,40759,40761,40769,40773,40791,40808,40817,40821,40848,40852,40866,
-0,13317,194564,22048,24267,11925,0,144954,0,28665,28390,29107,[11940,64073],{s:4},[11980,64102],0,23986,0,20435,20697,20720,20931,22134,27220,27905,28112,28226,28377,29668,29729,30060,30801,34805,144382,29608,15091,13531,17420,16010,0,0,19432,0,16090,15138,0,17786,16531,0,18021,16643,17043,18094,13448,140809,{f:3,c:63584},63610,63615,{s:23},{f:2,c:8836},{f:2,c:8842},8713,0,{f:2,c:8965},{s:9},{f:2,c:8741},{s:14},8802,0,8773,8776,{f:2,c:8822},{s:4},8487,{s:209},{f:2,c:8922},8533,8984,{f:2,c:7742},{f:2,
-c:504},470,472,474,476,260,728,317,346,350,356,377,379,261,731,318,347,711,351,357,378,733,380,340,258,313,262,268,280,270,323,327,336,344,368,354,341,259,314,263,269,281,271,273,324,328,337,345,369,355,729,264,284,292,308,348,364,265,285,293,309,349,365,625,651,638,620,622,633,648,598,627,637,642,656,635,621,607,626,669,654,609,624,641,295,661,660,614,664,450,595,599,644,608,403,616,649,600,604,606,592,623,650,612,594,653,613,674,673,597,657,634,615,865,712,716,721,8255,783,{f:5,c:741},0,0,805,812,
-825,796,{f:2,c:799},829,809,815,734,804,816,828,820,{f:2,c:797},{f:2,c:792},810,{f:2,c:826},794,{s:3},{f:2,c:610},618,628,630,632,640,655,665,668,671,688,690,695,704,{f:2,c:736},{s:6},8862,{s:287},12348,12543,0,{f:2,c:12310},9838,9835,{f:2,c:10548},10687,0,12448,0,{f:2,c:10746},{s:13},962,{f:10,c:9461},{f:2,c:9750},9649,{f:10,c:12784},0,{f:6,c:12794},{f:15,c:9150},0,0,10003,0,9251,9166,{f:4,c:9680},{f:2,c:8263},0,8273,8258,{f:16,c:12688},{s:13},{f:2,c:9136},{f:12,c:9842},{f:2,c:12441},8413,{s:450},
-20296,20319,20330,20332,20494,20504,20545,20722,20688,20742,20739,20789,20821,20823,13493,20938,20962,21079,21196,21206,21243,21276,21347,21405,21522,21631,21640,21840,21889,21933,21966,22075,22174,22185,22195,22391,22396,135963,22479,22500,22628,22665,136302,22738,22752,34369,22923,22930,22979,23059,23143,23159,23172,23236,137405,23421,23443,23570,64060,136884,23674,23695,23711,23715,23722,23760,138804,23821,23879,23937,23972,23975,24011,24158,24313,24320,24322,24355,24381,24404,24445,24589,24596,
-24600,24629,24647,24733,24788,24797,24875,25020,25017,25122,25178,25199,25302,25468,25573,25721,25796,25808,25897,26013,26170,26146,26155,26160,26163,26184,143812,{f:2,c:26231},26253,26299,26331,26344,26439,26497,26515,26520,26523,26620,26653,26787,26890,26953,144836,26946,26980,27045,27087,15286,15299,27113,27125,145215,27195,145251,27284,27301,15375,27419,27436,27495,27561,27565,27607,27647,27653,27764,27800,27899,27846,27953,27961,27967,27992,28052,28074,28123,28125,28228,28254,28337,28353,28432,
-28505,28513,28542,28556,28576,28604,28615,28618,28656,28750,28789,28836,28900,28971,28958,28974,29009,29032,29061,29063,29114,29124,29205,15935,29339,149489,29479,29520,29542,29602,29739,29766,29794,29805,29862,29865,29897,29951,29975,16242,30158,30210,30216,30308,30337,30365,30378,30390,30414,30420,30438,30449,30474,30489,{f:2,c:30541},30586,30592,30612,30688,152718,30787,30830,30896,152846,30893,30976,31004,31022,31028,31046,31097,31176,153457,31188,31198,31211,31213,31365,154052,31438,31485,31506,
-31533,31547,31599,31745,31795,155041,31853,31865,31887,31892,31904,31957,32049,32092,32131,32166,32194,32296,32663,32731,32821,32823,32970,32992,33011,33120,{f:2,c:33127},33133,33211,33226,33239,17499,33376,33396,158463,33441,{f:2,c:33443},33449,33471,33493,33533,33536,33570,33581,33594,33607,33661,33703,33743,33745,33761,33793,33798,33887,33904,33907,33925,33950,33978,159296,34098,34078,34095,34148,34170,34188,34210,34251,34285,34303,{f:2,c:34308},34320,159988,34328,34360,34391,34402,17821,34421,
-34488,34556,34695,17898,34826,34832,35022,161412,35122,35129,35136,35220,35318,35399,35421,35425,35445,35536,35654,35673,35689,35741,35913,35944,36271,36305,36311,36387,36413,36475,164471,18500,36602,36638,36653,36692,164813,36840,36846,36872,36909,37015,37043,37054,{f:2,c:37060},37063,37103,37140,37142,{f:2,c:37154},37167,37172,37251,37361,37705,{f:2,c:37732},37795,37855,37892,37939,37962,37987,38001,38286,38303,38316,38326,38347,38352,38355,18864,38366,38565,38639,38734,38805,38830,38842,38849,
-38857,38875,38998,39143,39256,39427,39617,39619,39630,39638,39682,39688,19479,39725,39774,39782,39812,39818,39838,39886,39909,39928,39971,{f:2,c:40015},40037,{f:2,c:40221},40259,40274,40330,40342,40384,40364,40380,172432,40423,40455,40606,40623,40855,131209,19970,19983,19986,20009,20014,20039,131234,20049,13318,131236,20073,20125,13356,20156,20163,20168,20203,20186,20209,20213,20246,20324,20279,20286,20312,131603,{f:2,c:20343},20354,20357,20454,20402,20421,20427,20434,13418,20466,20499,20508,20558,
-20563,20579,20643,20616,{f:2,c:20626},20629,20650,131883,20657,{f:2,c:20666},20676,20679,20723,131969,20686,131953,20692,20705,13458,132089,20759,132170,20832,132361,20851,20867,20875,13500,20888,20899,20909,13511,132566,20979,21010,21014,132943,21077,21084,21100,21111,21124,21122,133127,21144,133178,21156,{f:2,c:21178},21194,21201,133305,21239,21301,21314,133500,133533,21351,21370,21412,21428,133843,21431,21440,133917,{f:2,c:13661},21461,13667,21492,21540,21544,13678,21571,21602,21612,21653,21664,
-21670,21678,21687,21690,21699,134469,21740,21743,21745,21747,{f:2,c:21760},21769,21820,21825,13734,21831,13736,21860,134625,21885,21890,21905,13765,21970,134805,134765,21951,21961,21964,21969,21981,13786,21986,134756,21993,22056,135007,22023,22032,22064,13812,22077,22080,22087,22110,22112,22125,13829,22152,22156,22173,22184,22194,22213,22221,22239,22248,{f:2,c:22262},135681,135765,22313,135803,{f:2,c:22341},22349,135796,22376,22383,{f:3,c:22387},22395,135908,135895,22426,{f:2,c:22429},22440,22487,
-135933,22476,135990,136004,22494,22512,13898,22520,22523,22525,22532,22558,22567,22585,136132,22601,22604,22631,{f:2,c:22666},22669,{f:2,c:22671},22676,22685,22698,22705,136301,22723,22733,22754,{f:2,c:22771},{f:2,c:22789},22797,22804,136663,13969,22845,13977,22854,13974,158761,22879,136775,{f:2,c:22901},22908,22943,22958,22972,22984,22989,23006,23015,23022,136966,137026,14031,23053,23063,23079,23085,23141,23162,23179,23196,{f:2,c:23199},23202,23217,23221,23226,23231,23258,23260,23269,23280,23278,
-23285,23304,23319,23348,23372,23378,23400,23407,23425,23428,137667,23446,23468,{f:2,c:14177},23502,23510,14188,14187,23537,23549,14197,23555,23593,138326,23647,{f:2,c:23655},23664,138541,138565,138616,138594,23688,23690,14273,138657,138652,23712,23714,23719,138642,23725,23733,138679,23753,138720,138803,23814,23824,23851,23837,23840,23857,23865,14312,23905,23914,14324,23920,139038,14333,23944,14336,23959,23984,23988,139126,24017,24023,139258,24036,24041,14383,14390,14400,24095,24126,24137,14428,24150,
-14433,{f:2,c:24173},139643,24229,24236,24249,24262,24281,140062,24317,24328,140205,24350,24391,24419,24434,24446,24463,24482,24519,24523,{f:3,c:24530},24546,{f:2,c:24558},24563,14615,24610,24612,14618,24652,24725,24744,141043,24753,24766,24776,24793,24814,24821,24848,24857,24862,24890,14703,24897,24902,24928,141403,{f:2,c:24978},24983,24997,25005,141483,25045,25053,25077,141711,25123,25170,25185,25188,25211,25197,25203,25241,25301,142008,25341,25347,25360,{f:2,c:142159},25394,25397,{f:2,c:25403},
-25409,25412,25422,142150,25433,142365,142246,25452,25497,142372,25492,25533,{f:2,c:25556},25568,{f:2,c:25579},25586,25630,25637,25641,25647,25690,25693,25715,25725,25735,25745,25759,{f:2,c:25803},25813,25815,142817,25828,25855,14958,25871,25876,14963,25886,25906,25924,25940,25963,25978,25988,25994,26034,26037,26040,26047,26057,26068,15062,26105,26108,26116,26120,26145,26154,26181,26193,26190,15082,143811,143861,143798,26218,{f:2,c:26220},26235,26240,26256,26258,15118,26285,26289,26293,15130,15132,
-15063,26369,26386,144242,26393,144339,144338,26445,26452,26461,144336,144356,144341,26484,144346,26514,144351,33635,26640,26563,26568,26578,26587,26615,144458,144465,144459,26648,26655,26669,144485,26675,26683,26686,26693,26697,26700,26709,26711,15223,26731,26734,26748,26754,26768,26774,15213,{f:3,c:26776},26780,{f:2,c:26794},26804,26811,26875,144612,144730,26819,26821,26828,26841,{f:2,c:26852},26860,26871,26883,26887,15239,144788,15245,26950,26985,26988,27002,27026,15268,27030,27056,27066,27068,
-27072,27089,144953,144967,144952,27107,{f:2,c:27118},27123,15309,27124,27134,27153,27162,27165,145180,{f:2,c:27186},27199,27209,27258,27214,27218,27236,145164,27275,15344,27297,145252,27307,27325,27334,27348,27344,27357,145407,145383,{f:3,c:27377},27389,145444,27403,{f:3,c:27407},145469,27415,15398,27439,27466,27480,27500,27509,[11934,27514],27521,27547,27566,146072,27581,{f:3,c:27591},27610,{f:2,c:27622},27630,27650,27658,27662,27702,146559,27725,27739,27757,27780,27785,15555,27796,27799,27821,27842,
-15570,27868,27881,27885,146688,27904,27940,{f:2,c:27942},27751,27951,27964,27995,28E3,28016,{f:2,c:28032},28042,28045,28049,28056,146752,146938,146937,146899,28075,28078,28084,28098,27956,28104,28110,28127,28150,28214,28190,15633,28210,{f:2,c:28232},{f:2,c:28235},28239,{f:2,c:28243},28247,28259,15646,28307,28327,28340,28355,28469,28395,28409,28411,28426,28428,28440,28453,28470,28476,147326,28498,28503,28512,28520,28560,28566,28606,28575,28581,28591,15716,{f:2,c:28616},28649,147606,28668,28672,28682,
-28707,147715,28730,28739,28743,28747,15770,28773,28777,28782,28790,28806,28823,147910,28831,28849,147966,28908,28874,28881,28931,28934,28936,28940,15808,28975,29008,29011,29022,15828,29078,29056,29083,29088,29090,{f:2,c:29102},148412,29145,29148,29191,15877,29236,29241,29250,29271,29283,149033,{f:2,c:29294},29304,29311,29326,149157,29358,29360,29377,15968,29388,15974,15976,29427,29434,29447,29458,{f:2,c:29464},16003,29497,29484,29491,29501,29522,16020,29547,149654,{f:2,c:29550},29553,29569,29578,
-29588,29592,29596,29605,29625,29631,29637,29643,29665,29671,29689,29715,29690,29697,29779,29760,29763,29778,29789,29825,29832,150093,29842,29847,29849,29857,29861,29866,29881,29883,29882,29910,29912,29931,150358,29946,150383,29984,29988,29994,16215,150550,{f:2,c:30013},30016,30024,30032,30034,30066,30065,30074,{f:2,c:30077},30092,16245,30114,16247,30128,30135,{f:2,c:30143},30150,30159,30163,30173,{f:2,c:30175},30183,30190,30193,30211,30232,30215,30223,16302,151054,30227,{f:2,c:30235},151095,30245,
-30248,30268,30259,151146,16329,30273,151179,30281,30293,16343,30318,30357,30369,30368,{f:2,c:30375},30383,151626,30409,151637,30440,151842,30487,30490,30509,30517,151977,16441,152037,152013,30552,152094,30588,152140,16472,30618,30623,30626,30628,{f:2,c:30686},30692,30698,30700,30715,152622,30725,30729,30733,30745,30764,30791,30826,152793,30858,30868,30884,30877,30879,30907,30933,30950,{f:2,c:30969},30974,152999,30992,31003,31013,31050,31064,16645,31079,31090,31125,31137,31145,31156,31170,31175,{f:2,
-c:31180},31190,16712,153513,153524,16719,31242,31253,31259,16739,31288,31303,31318,31321,31324,31327,31335,31338,31349,31362,31370,31376,31404,154068,16820,31417,31422,16831,31436,31464,31476,154340,154339,154353,31549,31530,{f:2,c:31534},16870,16883,31615,31553,16878,31573,31609,31588,31590,31603,154546,16903,31632,31643,16910,31669,31676,31685,31690,154699,154724,31700,31702,31706,31722,31728,31747,31758,31813,31818,31831,31838,31841,31849,31855,155182,155222,155237,31910,155234,{f:2,c:31926},155352,
-31940,155330,31949,155368,155427,31974,155484,31989,32003,17094,32018,32030,155616,155604,{f:2,c:32061},32064,32071,155660,155643,17110,32090,32106,32112,17117,32127,155671,32136,32151,155744,32157,32167,32170,32182,32192,32215,32217,32230,17154,155885,64088,32272,32279,32285,32295,32300,32325,32373,32382,{f:2,c:32390},17195,32410,17219,32572,32571,32574,32579,13505,156272,156294,{f:2,c:32611},32621,{f:2,c:32637},32656,20859,146702,32662,32668,32685,156674,32707,32719,32739,32754,32778,32776,32790,
-32812,32816,32835,32870,32891,32921,32924,32932,32935,32952,157310,32965,32981,32998,33037,33013,33019,17390,33077,33054,17392,33060,33063,33068,157469,33085,17416,33129,17431,17436,33157,17442,33176,33202,33217,33219,33238,33243,157917,33252,157930,33260,33277,33279,158063,33284,158173,33305,33314,158238,33340,33353,33349,158296,17526,17530,33367,158348,33372,33379,158391,17553,33405,33407,33411,33418,33427,{f:2,c:33447},33458,33460,33466,33468,33506,33512,33527,{f:2,c:33543},33548,33620,33563,33565,
-33584,33596,33604,33623,17598,17620,17587,{f:2,c:33684},33691,33693,33737,33744,33748,33757,33765,33785,33813,158835,33815,33849,33871,{f:2,c:33873},{f:2,c:33881},33884,158941,33893,33912,33916,33921,17677,33943,33958,33982,17672,{f:2,c:33998},34003,159333,34023,34026,34031,34033,34042,34075,{f:2,c:34084},34091,34127,34159,17731,34129,{f:2,c:34145},159636,34171,34173,34175,34177,34182,34195,34205,34207,159736,{f:2,c:159734},34236,34247,34250,{f:2,c:34264},34271,34273,34278,34294,34304,34321,34334,
-34337,34340,34343,160013,34361,34364,160057,34368,34387,34390,34423,34439,34441,{f:2,c:34460},34481,34483,34497,34499,34513,34517,34519,34531,34534,17848,34565,34567,34574,34576,34591,34593,34595,34609,34618,34624,34627,34641,34648,{f:2,c:34660},34674,34684,160731,160730,34727,34697,34699,34707,34720,160766,17893,34750,160784,34753,34766,34783,160841,34787,{f:2,c:34789},34794,34835,34856,34862,34866,34876,17935,34890,34904,161301,161300,34921,161329,34927,34976,35004,35008,161427,35025,35027,17985,
-35073,161550,35127,161571,35138,35141,35145,161618,35170,35209,35216,35231,35248,35255,35288,35307,18081,35315,35325,35327,18095,35345,35348,162181,35361,35381,35390,35397,35405,35416,35502,35472,35511,35543,35580,162436,35594,35589,35597,35612,35629,18188,35665,35678,35702,35713,35723,{f:2,c:35732},35897,162739,35901,162750,162759,35909,35919,35927,35945,35949,163E3,35987,35986,35993,18276,35995,36054,36053,163232,36081,163344,36105,36110,36296,36313,36364,18429,36349,36358,163978,36372,36374,{f:2,
-c:36385},36391,164027,18454,36406,36409,36436,36450,36461,36463,36504,36510,36533,36539,164482,18510,164595,36608,36616,36651,36672,36682,36696,164876,36772,36788,164949,36801,36806,64036,36810,36813,36819,36821,36849,36853,36859,36876,36919,165227,36931,36957,{f:2,c:165320},36997,37004,37008,37025,18613,37040,37046,37059,37064,165591,37084,37087,165626,37110,37106,37120,37099,{f:2,c:37118},37124,37126,37144,37150,37175,37177,{f:2,c:37190},37207,37209,37236,37241,37253,37299,37302,{f:2,c:37315},166217,
-166214,37356,37377,{f:2,c:37398},166251,37442,37450,37462,37473,37477,37480,166280,{f:2,c:37500},37503,37513,37517,37527,37529,37535,37547,{f:2,c:166330},37554,{f:2,c:37567},37574,37582,37605,37649,166430,166441,37623,37673,166513,166467,37713,37722,37739,37745,37747,37793,166553,166605,37768,37771,37775,37790,37877,166628,166621,37873,37831,37852,37863,37897,{f:2,c:37910},37883,37938,37947,166849,166895,37997,37999,38265,38278,{f:2,c:38284},167184,167281,38344,167419,167455,38444,{f:2,c:38451},167478,
-38460,38497,167561,38530,167659,38554,167730,18919,38579,38586,38589,18938,167928,38616,38618,38621,18948,38676,38691,18985,38710,38721,38727,38743,38747,38762,168608,168625,38806,38814,{f:2,c:38833},38846,38860,38865,38868,38872,38881,38897,38916,38925,38932,38934,19132,169104,{f:2,c:38962},38949,38983,39014,39083,39085,39088,169423,39095,{f:2,c:39099},39106,39111,39115,39137,39139,39146,{f:2,c:39152},39155,39176,19259,169712,{f:2,c:39190},169753,{f:3,c:39194},169808,39217,{f:3,c:39226},39233,39238,
-39246,39264,39331,39334,39357,39359,39363,39380,39385,39390,170182,39408,39417,39420,39434,39441,39450,39456,39473,39492,39500,39512,19394,39599,19402,39607,19410,39609,170610,39622,39632,39634,39637,39648,39653,39657,39692,39696,39698,39702,39708,39723,39741,19488,39755,39779,39781,{f:2,c:39787},{f:2,c:39798},39846,39852,171483,39858,39864,39870,39923,39896,39901,39914,39919,39918,171541,171658,171593,39958,{f:3,c:39960},39965,39970,39977,171716,39985,39991,40005,40028,171753,{f:2,c:40009},171739,
-40020,40024,40027,40029,40031,{f:3,c:40041},{f:2,c:40045},40050,40053,40058,40166,40178,40203,[171982,171991],40209,{f:2,c:40215},172079,19652,172058,40242,19665,40266,40287,40290,172281,172162,40307,{f:2,c:40310},40324,40345,40353,40383,40373,40377,40381,40393,40410,40416,40419,19719,40458,40450,40461,40476,40571,139800,40576,40581,40603,172940,40637,173111,40671,40703,40706,19831,40707,40762,40765,40774,40787,40789,40792,173553,40797,173570,40809,40813,40816,173746,11948,13844,14509,15820,16348,
-17854,17936,19326,19512,19681,19980,{f:2,c:20003},20089,20211,20236,20249,20267,20270,20273,20356,20382,20407,20484,20492,20556,20575,20578,20599,20622,20638,20642,20675,20712,20721,20734,20743,{f:3,c:20748},20787,20792,20852,20868,20920,20922,20936,20943,20945,{f:2,c:20947},20952,20959,20997,21030,21032,21035,{f:2,c:21041},21045,21052,21082,21088,21102,{f:2,c:21112},21130,21132,21217,21225,21233,21251,21265,21279,21293,21298,21309,21349,21357,21369,21374,21396,21401,21418,21423,21434,21441,{f:2,
-c:21444},21472,21523,21546,21553,{f:2,c:21556},21580,21671,21674,21681,21691,21710,21738,21756,21765,21768,21781,21799,21802,21814,21841,21862,21903,21906,21908,21924,21938,21955,21958,21971,21979,21996,21998,22001,22006,22008,22021,22029,{f:2,c:22033},22060,22069,22073,22093,22100,22149,22175,22182,22199,22220,22223,22233,22241,22251,22253,22257,22279,22284,{f:2,c:22298},22301,22316,22318,{f:2,c:22333},22367,22379,22381,22394,22403,22423,22446,22485,22503,22541,22566,22605,22607,22623,22637,22655,
-22657,22680,22716,22815,22819,22873,22905,22935,22959,22963,23007,23025,23032,23218,23224,23274,23286,23323,23325,23329,23352,23479,23511,23520,23583,23594,23596,23606,23641,23644,23661,23773,23809,23860,23869,23897,23934,23939,24007,24057,24104,24114,24117,24155,24168,24170,24183,24192,24203,24243,24253,24273,{f:2,c:24276},24397,24492,24554,24583,24649,24660,24679,24763,24772,24829,24842,24854,24874,24886,24926,24932,24955,24957,24959,24989,25016,25052,25058,25061,25064,25092,25095,25137,25145,25149,
-25210,25232,25256,25306,25332,25366,25386,25398,25414,25419,25427,25457,25461,25471,25474,25482,{f:2,c:25518},25578,{f:2,c:25592},25618,25624,25632,25636,25642,25653,25661,25663,25682,25695,25716,25744,{f:2,c:25752},25772,25779,25837,25840,25883,25887,25902,25929,25952,26002,26005,26036,26046,26056,26062,26064,26079,26238,{f:2,c:26251},26291,26304,26319,26405,26421,26453,26496,26511,26513,26532,26545,26549,26558,26664,26758,26859,26869,26903,26931,26936,26971,26981,27048,27051,27055,27109,27121,27210,
-27221,27239,27249,27311,{f:2,c:27336},27395,27451,27455,{f:2,c:27517},27568,27639,27641,27652,27657,27661,27692,27722,27730,27732,27769,27820,27828,27858,28001,28028,28089,28144,28229,28275,28283,28285,28297,28348,{f:2,c:28378},28454,28457,28464,28551,28573,28590,28599,28685,28704,28745,28824,28848,{f:2,c:28885},28997,29106,29172,29207,29215,29251,{f:2,c:29263},29274,29280,29288,29303,29316,29385,29413,29428,29442,29451,29470,29474,{f:2,c:29498},29517,29528,29543,29810,29871,29919,29924,29940,29947,
-29974,29985,30015,30046,30105,30116,30145,30148,30156,30167,30172,30177,30191,30212,30220,30237,30258,30264,30277,30282,30303,30381,30397,30425,30443,30448,30457,30464,30478,30498,30504,30511,30521,30526,30533,30538,30543,30558,30564,30567,30572,30596,{f:2,c:30604},30614,30631,30639,30647,30654,30665,30673,30681,30705,30775,30812,30846,30872,30881,30897,30899,30921,30931,30988,31007,{f:2,c:31015},31039,31042,31060,31083,31100,31147,31172,31210,31234,31244,31280,31290,31300,31360,31366,31380,31413,
-31421,31486,31531,31607,31648,31660,31664,31720,31730,31736,31740,31742,31753,31784,31791,31810,{f:2,c:31826},{f:3,c:31835},31858,31869,31879,31902,31930,31943,31955,31962,32060,32077,32130,32133,32141,32145,32158,32179,32185,32208,32229,{f:2,c:32245},32303,32310,32324,32367,32376,32385,32573,32603,32605,32613,32625,{f:2,c:32639},32651,32674,{f:3,c:32765},32775,32781,32798,32825,32904,32910,32975,32980,33005,33008,33015,33018,33022,33027,33047,33072,33111,33135,33139,33163,33168,33179,33182,33227,
-33237,{f:2,c:33245},33249,33263,33270,33280,33291,{f:2,c:33299},33306,33338,33348,33389,33412,33417,33425,33450,33456,33488,33514,33519,33526,33622,33656,33784,33788,33880,33939,33969,33981,34043,34118,34134,34141,34181,34200,34370,34374,34496,34580,34594,34606,34617,34653,34683,34700,34702,{f:2,c:34711},34718,34723,34734,34751,34761,34778,34840,34843,34861,34874,34885,34891,34894,34901,34906,34926,{f:3,c:34970},35021,35040,35055,{f:2,c:35086},35110,35125,35162,35164,35179,35184,35196,35237,35253,
-35260,35285,35401,35415,35431,35454,35462,35478,35510,35529,35537,35549,35564,35573,35590,35599,35601,35653,35666,35693,35704,35708,35710,35717,35743,35915,35923,35963,36026,36037,36041,36050,36076,36085,36087,36097,36099,36119,36124,36206,36241,36255,36267,36274,36309,36327,{f:2,c:36337},36340,36353,36363,36390,36401,{f:2,c:36416},36429,36431,36444,36449,36457,36465,36469,36471,36489,36496,36501,36506,36519,36521,36525,36584,36592,36615,36632,36645,36647,36652,36661,36666,36675,36679,36689,36693,
-{f:3,c:36768},36773,36868,36891,36911,36940,36955,36976,36980,36985,37003,37016,37024,37042,37053,37065,37104,37125,37157,37210,37223,37242,37258,37265,37269,37296,37307,37309,37314,37317,37376,37385,37411,37494,37518,37551,{f:2,c:37563},37569,37571,37573,37576,37652,37683,37686,37720,37759,37762,37770,37819,37836,37862,37881,37890,{f:2,c:37901},37934,37964,38280,38305,38335,38342,38345,{f:2,c:38353},38368,38372,38374,38436,38449,38456,38461,38484,38516,38523,38527,38529,38531,38537,38550,38574,38659,
-38683,{f:2,c:38689},38696,38705,38759,38774,38781,38783,38809,38815,38828,38841,38861,38880,38895,38919,38950,38958,{f:2,c:39010},39092,39109,39170,39185,39189,39221,39240,39252,39262,39393,39436,39440,39459,39489,39505,{f:2,c:39613},39681,39689,39691,{f:2,c:39693},39705,39733,39752,39765,39784,39808,39814,39824,39837,39856,39871,39880,39935,39938,39964,39989,40004,40022,40033,40040,40240,40253,40298,40315,40421,40425,40435,40570,{f:3,c:40578},40624,40676,40688,40690,40713,40719,40724,40731,40738,
-40742,{f:2,c:40746},40756,40794,40815,40862,40869,131317,151044,151538,163187,194581,194630,194713,194726,194789,195038,13790,{s:4},172722,0,0,131416,{s:4},132529,0,0,132844,{s:6},134488,{s:21},154060,{s:9},14756,14776,142914,0,0,14940,0,0,143339,0,0,162228,0,15044,15051,{s:5},14981,{s:8},15347,27384,{s:5},15665,{s:9},147531,0,15936,14497,{s:34},158878,{s:12},18207,162876,{s:4},18462,{s:71},39709,39724,20482,20958,21255,23532,63784,26142,63785,28746,64021,21857,27706,31328,156492,34819,38315,38741,
-171581,173594],"Adobe-Korea1":[{f:95,c:32},8361,8208,169,0,0,[12288,12644],{f:2,c:12289},12539,8229,[8230,8943],168,12291,{f:2,c:8211},8214,65340,65374,{f:2,c:8216},{f:2,c:8220},{f:2,c:12308},{f:10,c:12296},177,215,247,8800,{f:2,c:8804},8734,8756,176,{f:2,c:8242},8451,8491,{f:2,c:65504},65509,9794,9792,8736,8869,8978,8706,8711,8801,8786,167,8251,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8594,{f:2,c:8592},{f:2,c:8595},12307,171,187,8730,8765,8733,8757,{f:2,c:8747},8712,8715,
-{f:2,c:8838},{f:2,c:8834},8746,8745,{f:2,c:8743},65506,8658,8660,8704,8707,180,732,711,728,733,730,729,184,731,161,191,8758,8750,8721,8719,164,8457,8240,9665,9664,9655,9654,9828,{f:2,c:9824},9829,9831,9827,9673,9672,9635,{f:2,c:9680},9618,{f:2,c:9636},9640,9639,9638,9641,9832,9743,9742,9756,9758,182,{f:2,c:8224},8597,8599,8601,8598,8600,9837,{f:2,c:9833},9836,12927,12828,8470,13255,8482,13250,13272,8481,{f:59,c:65281},65510,{f:33,c:65341},65507,{f:51,c:12593},{f:42,c:12645},{f:10,c:8560},{f:10,c:8544},
-{f:17,c:913},{f:7,c:931},{f:17,c:945},{f:7,c:963},9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,9490,9489,9498,9497,9494,9493,9486,9485,{f:2,c:9502},{f:2,c:9505},{f:2,c:9510},{f:2,c:9513},{f:2,c:9517},{f:2,c:9521},{f:2,c:9525},{f:2,c:9529},{f:2,c:9533},{f:2,c:9536},{f:8,c:9539},{f:3,c:13205},8467,13208,13252,{f:4,c:13219},{f:10,c:13209},13258,{f:3,c:13197},13263,{f:2,c:13192},13256,{f:2,
-c:13223},{f:10,c:13232},{f:5,c:13184},{f:6,c:13242},{f:5,c:13200},8486,{f:2,c:13248},{f:3,c:13194},13270,13253,{f:3,c:13229},13275,{f:4,c:13225},13277,13264,13267,13251,13257,13276,13254,198,208,170,294,306,319,321,216,338,186,222,358,330,{f:28,c:12896},{f:26,c:9424},{f:15,c:9312},189,{f:2,c:8531},188,190,{f:4,c:8539},230,273,240,295,305,307,312,320,322,248,339,223,254,359,331,329,{f:28,c:12800},{f:26,c:9372},{f:15,c:9332},185,{f:2,c:178},8308,8319,{f:4,c:8321},{f:83,c:12353},{f:86,c:12449},{f:6,
-c:1040},1025,{f:32,c:1046},1105,{f:26,c:1078},{f:2,c:44032},44036,{f:4,c:44039},{f:8,c:44048},{f:5,c:44057},44064,44068,{f:2,c:44076},{f:3,c:44079},{f:2,c:44088},44092,44096,44107,44109,44116,44120,44124,{f:2,c:44144},44148,{f:2,c:44151},44154,{f:2,c:44160},{f:4,c:44163},{f:4,c:44169},44176,44180,{f:2,c:44188},{f:3,c:44191},{f:3,c:44200},44204,{f:2,c:44207},{f:2,c:44216},{f:3,c:44219},44225,44228,44232,44236,44245,44247,{f:2,c:44256},44260,{f:2,c:44263},44266,44268,{f:3,c:44271},44275,{f:2,c:44277},
-{f:2,c:44284},44288,44292,44294,{f:2,c:44300},44303,44305,44312,44316,44320,44329,{f:2,c:44332},{f:2,c:44340},44344,44348,{f:2,c:44356},44359,44361,44368,44372,44376,44385,44387,{f:2,c:44396},44400,{f:4,c:44403},{f:3,c:44411},44415,{f:2,c:44417},{f:2,c:44424},44428,44432,{f:2,c:44444},44452,44471,{f:2,c:44480},44484,44488,{f:2,c:44496},44499,44508,44512,44516,{f:2,c:44536},44540,{f:3,c:44543},{f:2,c:44552},44555,44557,44564,{f:2,c:44592},44596,{f:2,c:44599},44602,{f:2,c:44608},44611,{f:2,c:44613},
-44618,{f:3,c:44620},44624,44628,44630,{f:2,c:44636},{f:3,c:44639},44645,{f:2,c:44648},44652,44656,{f:2,c:44664},{f:3,c:44667},{f:2,c:44676},44684,{f:3,c:44732},44736,44740,{f:2,c:44748},{f:3,c:44751},{f:2,c:44760},44764,44776,44779,44781,44788,44792,44796,{f:2,c:44807},44813,44816,{f:2,c:44844},44848,44850,44852,{f:2,c:44860},44863,{f:3,c:44865},{f:2,c:44872},44880,{f:2,c:44892},{f:2,c:44900},44921,44928,44932,44936,{f:2,c:44944},44949,44956,{f:2,c:44984},44988,44992,{f:3,c:44999},45003,{f:2,c:45005},
-45012,45020,{f:2,c:45032},{f:2,c:45040},45044,45048,{f:2,c:45056},45060,45068,45072,45076,{f:2,c:45084},45096,{f:2,c:45124},45128,45130,45132,45134,{f:3,c:45139},45143,45145,45149,{f:2,c:45180},45184,45188,{f:2,c:45196},45199,45201,{f:3,c:45208},45212,{f:4,c:45215},{f:2,c:45224},{f:5,c:45227},45233,{f:3,c:45235},45240,45244,{f:2,c:45252},{f:3,c:45255},{f:2,c:45264},45268,45272,45280,45285,{f:2,c:45320},{f:2,c:45323},45328,{f:2,c:45330},{f:2,c:45336},{f:3,c:45339},{f:3,c:45347},45352,45356,{f:2,c:45364},
-{f:3,c:45367},{f:2,c:45376},45380,45384,{f:2,c:45392},{f:2,c:45396},45400,45404,45408,{f:2,c:45432},45436,45440,45442,{f:2,c:45448},45451,45453,{f:3,c:45458},45464,45468,45480,45516,45520,45524,{f:2,c:45532},45535,{f:2,c:45544},45548,45552,45561,45563,45565,{f:2,c:45572},45576,{f:2,c:45579},{f:2,c:45588},45591,45593,45600,45620,45628,45656,45660,45664,{f:2,c:45672},{f:2,c:45684},45692,{f:2,c:45700},45705,{f:2,c:45712},45716,{f:3,c:45720},{f:2,c:45728},45731,{f:2,c:45733},45738,45740,45744,45748,{f:2,
-c:45768},45772,45776,45778,{f:2,c:45784},45787,45789,45794,{f:3,c:45796},45800,{f:5,c:45803},{f:3,c:45811},{f:5,c:45815},{f:3,c:45823},45828,45832,{f:2,c:45840},{f:3,c:45843},45852,{f:3,c:45908},45912,{f:2,c:45915},{f:2,c:45918},{f:2,c:45924},45927,45929,45931,45934,{f:2,c:45936},45940,45944,{f:2,c:45952},{f:3,c:45955},45964,45968,45972,{f:2,c:45984},45992,45996,{f:2,c:46020},46024,{f:2,c:46027},46030,46032,{f:2,c:46036},46039,46041,46043,46045,46048,46052,46056,46076,46096,46104,46108,46112,{f:2,
-c:46120},46123,46132,{f:2,c:46160},46164,46168,{f:2,c:46176},46179,46181,46188,46208,46216,46237,46244,46248,46252,46261,46263,46265,46272,46276,46280,46288,46293,{f:2,c:46300},46304,{f:2,c:46307},46310,{f:2,c:46316},46319,46321,46328,{f:2,c:46356},46360,{f:2,c:46363},{f:2,c:46372},{f:4,c:46375},{f:2,c:46384},46388,46392,{f:2,c:46400},{f:3,c:46403},{f:3,c:46411},46416,46420,{f:2,c:46428},{f:3,c:46431},{f:2,c:46496},46500,46504,{f:2,c:46506},{f:2,c:46512},{f:3,c:46515},{f:3,c:46523},46528,46532,{f:2,
-c:46540},{f:3,c:46543},46552,46572,{f:2,c:46608},46612,46616,46629,46636,46644,46664,46692,46696,{f:2,c:46748},46752,46756,{f:2,c:46763},46769,46804,46832,46836,46840,{f:2,c:46848},46853,{f:2,c:46888},46892,{f:2,c:46895},{f:2,c:46904},46907,46916,46920,46924,{f:2,c:46932},46944,46948,46952,{f:2,c:46960},46963,46965,{f:2,c:46972},46976,46980,{f:2,c:46988},{f:4,c:46991},{f:4,c:46998},47004,47008,{f:2,c:47016},{f:3,c:47019},{f:2,c:47028},47032,47047,47049,{f:2,c:47084},47088,47092,{f:2,c:47100},{f:3,
-c:47103},{f:3,c:47111},47116,47120,{f:2,c:47128},47131,47133,{f:2,c:47140},47144,47148,{f:2,c:47156},{f:3,c:47159},47168,47172,47185,47187,{f:2,c:47196},47200,47204,{f:2,c:47212},47215,47217,47224,47228,47245,47272,47280,47284,47288,{f:2,c:47296},47299,47301,47308,47312,47316,47325,47327,47329,{f:2,c:47336},47340,47344,{f:2,c:47352},47355,47357,47364,47384,47392,{f:2,c:47420},47424,47428,47436,47439,47441,{f:2,c:47448},47452,47456,{f:2,c:47464},47467,47469,{f:2,c:47476},47480,47484,{f:2,c:47492},
-47495,{f:2,c:47497},{f:2,c:47501},{f:2,c:47532},47536,47540,{f:2,c:47548},47551,47553,{f:2,c:47560},47564,{f:5,c:47566},{f:2,c:47576},47579,{f:2,c:47581},47585,{f:3,c:47587},47592,47596,{f:2,c:47604},{f:4,c:47607},{f:2,c:47616},47624,47637,{f:2,c:47672},47676,47680,47682,{f:2,c:47688},47691,{f:2,c:47693},{f:3,c:47699},47704,47708,{f:2,c:47716},{f:3,c:47719},{f:2,c:47728},47732,47736,{f:3,c:47747},47751,47756,{f:2,c:47784},{f:2,c:47787},47792,47794,{f:2,c:47800},47803,47805,47812,47816,{f:2,c:47832},
-47868,47872,47876,47885,47887,47889,47896,47900,47904,47913,47915,{f:3,c:47924},47928,{f:4,c:47931},{f:2,c:47940},47943,47945,47949,{f:2,c:47951},47956,47960,47969,47971,47980,48008,48012,48016,48036,48040,48044,48052,48055,48064,48068,48072,48080,48083,{f:2,c:48120},48124,{f:2,c:48127},48130,{f:2,c:48136},{f:3,c:48139},48143,48145,{f:5,c:48148},{f:5,c:48155},{f:2,c:48164},48167,48169,48173,{f:2,c:48176},48180,48184,{f:2,c:48192},{f:3,c:48195},48201,{f:2,c:48204},48208,48221,{f:2,c:48260},48264,{f:2,
-c:48267},48270,{f:2,c:48276},48279,{f:2,c:48281},{f:2,c:48288},48292,{f:2,c:48295},{f:2,c:48304},{f:3,c:48307},{f:2,c:48316},48320,48324,48333,{f:3,c:48335},48341,48344,48348,{f:3,c:48372},48376,48380,{f:2,c:48388},48391,48393,48400,48404,48420,48428,48448,{f:2,c:48456},48460,48464,{f:2,c:48472},48484,48488,{f:2,c:48512},48516,{f:4,c:48519},{f:2,c:48528},48531,48533,{f:2,c:48537},48540,48548,48560,48568,{f:2,c:48596},48600,48604,48617,48624,48628,48632,48640,48643,48645,{f:2,c:48652},48656,48660,
-{f:2,c:48668},48671,{f:2,c:48708},48712,48716,48718,{f:2,c:48724},48727,{f:3,c:48729},{f:2,c:48736},48740,48744,48746,{f:2,c:48752},{f:3,c:48755},{f:3,c:48763},48768,48772,{f:2,c:48780},{f:3,c:48783},{f:2,c:48792},48808,{f:2,c:48848},48852,{f:2,c:48855},48864,{f:3,c:48867},48876,48897,{f:2,c:48904},{f:2,c:48920},{f:3,c:48923},{f:2,c:48960},48964,48968,{f:2,c:48976},48981,49044,49072,49093,{f:2,c:49100},49104,49108,49116,49119,49121,49212,49233,49240,49244,49248,{f:2,c:49256},{f:2,c:49296},49300,49304,
-{f:2,c:49312},49315,49317,{f:2,c:49324},{f:2,c:49327},{f:4,c:49331},{f:2,c:49340},{f:3,c:49343},49349,{f:2,c:49352},49356,49360,{f:2,c:49368},{f:3,c:49371},{f:2,c:49380},49384,49388,{f:2,c:49396},49399,49401,49408,49412,49416,49424,49429,{f:5,c:49436},{f:2,c:49443},{f:2,c:49446},{f:2,c:49452},{f:3,c:49455},49462,{f:2,c:49464},49468,49472,{f:2,c:49480},{f:3,c:49483},{f:2,c:49492},49496,49500,{f:2,c:49508},{f:3,c:49511},49520,49524,49528,49541,{f:3,c:49548},49552,49556,49558,{f:2,c:49564},49567,49569,
-49573,{f:2,c:49576},49580,49584,49597,49604,49608,49612,49620,{f:2,c:49623},49632,49636,49640,{f:2,c:49648},49651,{f:2,c:49660},49664,49668,{f:2,c:49676},49679,49681,{f:2,c:49688},49692,{f:2,c:49695},{f:2,c:49704},49707,49709,49711,{f:2,c:49713},49716,49736,{f:2,c:49744},49748,49752,49760,49765,{f:2,c:49772},49776,49780,{f:2,c:49788},49791,49793,{f:2,c:49800},49808,49816,49819,49821,{f:2,c:49828},49832,{f:2,c:49836},{f:2,c:49844},49847,49849,{f:2,c:49884},49888,{f:2,c:49891},{f:3,c:49899},49903,49905,
-49910,{f:2,c:49912},{f:2,c:49915},49920,{f:2,c:49928},{f:2,c:49932},{f:3,c:49939},49944,49948,{f:2,c:49956},{f:2,c:49960},49989,{f:2,c:50024},50028,50032,50034,{f:2,c:50040},{f:2,c:50044},50052,50056,50060,50112,{f:2,c:50136},50140,{f:2,c:50143},50146,{f:2,c:50152},50157,{f:2,c:50164},50168,50184,50192,50212,50220,50224,50228,{f:2,c:50236},50248,{f:2,c:50276},50280,50284,{f:2,c:50292},50297,50304,50324,50332,50360,50364,50409,{f:2,c:50416},50420,50424,50426,{f:3,c:50431},50444,50448,50452,50460,{f:2,
-c:50472},50476,50480,{f:2,c:50488},50491,50493,{f:2,c:50500},{f:3,c:50504},{f:3,c:50508},{f:3,c:50515},{f:3,c:50519},{f:2,c:50525},{f:2,c:50528},50532,50536,{f:2,c:50544},{f:3,c:50547},{f:2,c:50556},50560,50564,50567,{f:2,c:50572},50575,50577,50581,{f:2,c:50583},50588,50592,50601,{f:2,c:50612},{f:2,c:50616},{f:4,c:50619},{f:7,c:50628},50636,50638,{f:2,c:50640},50644,50648,{f:2,c:50656},50659,50661,{f:3,c:50668},50672,50676,{f:2,c:50678},{f:6,c:50684},{f:4,c:50693},50700,50704,{f:2,c:50712},{f:2,c:50715},
-{f:2,c:50724},50728,{f:3,c:50732},50736,{f:3,c:50739},50743,50745,50747,{f:2,c:50752},50756,50760,{f:2,c:50768},{f:3,c:50771},{f:2,c:50780},50784,50796,50799,50801,{f:2,c:50808},50812,50816,{f:2,c:50824},50827,50829,{f:2,c:50836},50840,50844,{f:2,c:50852},50855,50857,{f:2,c:50864},50868,{f:3,c:50872},{f:2,c:50880},50883,50885,{f:2,c:50892},50896,50900,{f:2,c:50908},{f:2,c:50912},{f:2,c:50920},50924,50928,{f:2,c:50936},50941,{f:2,c:50948},50952,50956,{f:2,c:50964},50967,50969,{f:2,c:50976},50980,50984,
-{f:2,c:50992},50995,50997,50999,{f:2,c:51004},51008,51012,51018,{f:2,c:51020},51023,{f:8,c:51025},51036,51040,51048,51051,{f:2,c:51060},51064,{f:3,c:51068},{f:3,c:51075},{f:4,c:51079},51086,{f:2,c:51088},51092,{f:3,c:51094},51098,{f:2,c:51104},{f:4,c:51107},{f:2,c:51116},51120,51124,{f:2,c:51132},{f:3,c:51135},{f:2,c:51144},51148,51150,51152,51160,51165,51172,51176,51180,{f:2,c:51200},51204,51208,51210,{f:2,c:51216},51219,{f:2,c:51221},{f:2,c:51228},51232,51236,{f:2,c:51244},51247,51249,51256,51260,
-51264,{f:2,c:51272},{f:2,c:51276},51284,{f:2,c:51312},51316,51320,51322,{f:2,c:51328},51331,{f:3,c:51333},{f:3,c:51339},51348,51357,51359,51361,51368,{f:2,c:51388},51396,51400,51404,{f:2,c:51412},51415,51417,{f:2,c:51424},51428,51445,{f:2,c:51452},51456,{f:3,c:51460},{f:2,c:51468},51471,51473,51480,51500,51508,{f:2,c:51536},51540,51544,{f:2,c:51552},51555,51564,51568,51572,51580,{f:2,c:51592},51596,51600,{f:2,c:51608},51611,51613,{f:2,c:51648},51652,{f:2,c:51655},51658,{f:2,c:51664},51667,{f:2,c:51669},
-{f:2,c:51673},{f:2,c:51676},51680,51682,51684,51687,{f:2,c:51692},{f:3,c:51695},{f:2,c:51704},51708,51712,{f:2,c:51720},{f:3,c:51723},51732,51736,51753,{f:2,c:51788},51792,51796,{f:2,c:51804},{f:3,c:51807},51816,51837,51844,51864,{f:2,c:51900},51904,51908,{f:2,c:51916},51919,51921,51923,{f:2,c:51928},51936,51948,51956,51976,51984,51988,51992,{f:2,c:52E3},52033,{f:2,c:52040},52044,52048,{f:2,c:52056},52061,52068,{f:2,c:52088},52124,52152,52180,52196,52199,52201,{f:2,c:52236},52240,52244,{f:2,c:52252},
-{f:2,c:52257},{f:3,c:52263},52268,52270,52272,{f:2,c:52280},{f:4,c:52283},{f:2,c:52292},52296,52300,{f:2,c:52308},{f:3,c:52311},52320,52324,52326,52328,52336,52341,{f:2,c:52376},52380,52384,{f:2,c:52392},{f:3,c:52395},{f:2,c:52404},52408,52412,{f:2,c:52420},52423,52425,52432,52436,52452,52460,52464,52481,{f:2,c:52488},52492,52496,{f:2,c:52504},52507,52509,52516,52520,52524,52537,52572,52576,52580,{f:2,c:52588},52591,52593,52600,52616,{f:2,c:52628},52632,52636,{f:2,c:52644},52647,52649,52656,52676,
-52684,52688,52712,52716,52720,{f:2,c:52728},52731,52733,52740,52744,52748,52756,52761,{f:2,c:52768},52772,52776,{f:2,c:52784},52787,52789,{f:2,c:52824},52828,{f:3,c:52831},{f:2,c:52840},52843,52845,{f:2,c:52852},52856,52860,{f:2,c:52868},52871,52873,{f:2,c:52880},52884,52888,{f:2,c:52896},{f:3,c:52899},{f:2,c:52908},52929,{f:2,c:52964},52968,{f:2,c:52971},{f:2,c:52980},{f:3,c:52983},{f:2,c:52992},52996,53E3,{f:2,c:53008},53011,53013,53020,53024,53028,{f:2,c:53036},{f:3,c:53039},53048,{f:2,c:53076},
-53080,53084,{f:2,c:53092},53095,53097,{f:2,c:53104},53108,53112,53120,53125,53132,53153,53160,53168,53188,{f:2,c:53216},53220,53224,{f:2,c:53232},53235,53237,53244,53248,53252,53265,53272,53293,{f:2,c:53300},53304,53308,{f:2,c:53316},53319,53321,53328,53332,53336,53344,{f:2,c:53356},53360,53364,{f:2,c:53372},53377,{f:2,c:53412},53416,53420,{f:2,c:53428},53431,53433,{f:2,c:53440},53444,{f:2,c:53448},{f:2,c:53456},{f:3,c:53459},{f:2,c:53468},53472,53476,{f:2,c:53484},{f:3,c:53487},53496,53517,{f:2,
-c:53552},53556,53560,53562,{f:2,c:53568},{f:3,c:53571},{f:2,c:53580},53584,53588,{f:2,c:53596},53599,53601,53608,53612,53628,53636,53640,{f:2,c:53664},53668,53672,{f:2,c:53680},53683,53685,53690,53692,53696,53720,53748,53752,53767,53769,53776,{f:2,c:53804},53808,53812,{f:2,c:53820},53823,53825,53832,53852,53860,{f:2,c:53888},53892,53896,{f:2,c:53904},53909,53916,53920,53924,53932,53937,{f:2,c:53944},53948,{f:2,c:53951},53954,{f:2,c:53960},53963,53972,53976,53980,{f:2,c:53988},{f:2,c:54E3},54004,54008,
-{f:2,c:54016},54019,54021,{f:3,c:54028},54032,54036,54038,{f:2,c:54044},{f:3,c:54047},54053,{f:2,c:54056},54060,54064,{f:2,c:54072},{f:3,c:54075},{f:2,c:54084},{f:2,c:54140},54144,54148,{f:2,c:54156},{f:3,c:54159},{f:2,c:54168},54172,54176,{f:2,c:54184},54187,54189,54196,54200,54204,{f:2,c:54212},{f:2,c:54216},54224,54232,54241,54243,{f:2,c:54252},54256,54260,{f:2,c:54268},54271,54273,54280,54301,54336,54340,54364,54368,54372,54381,54383,{f:2,c:54392},54396,{f:2,c:54399},54402,{f:2,c:54408},54411,
-54413,54420,54441,54476,54480,54484,54492,54495,54504,54508,54512,54520,54523,54525,54532,54536,54540,{f:2,c:54548},54551,{f:2,c:54588},54592,54596,{f:2,c:54604},54607,54609,{f:2,c:54616},54620,54624,54629,{f:2,c:54632},54635,54637,{f:2,c:54644},54648,54652,{f:2,c:54660},{f:3,c:54663},54672,54693,{f:2,c:54728},54732,54736,54738,{f:2,c:54744},54747,54749,{f:2,c:54756},54760,54764,{f:2,c:54772},54775,54777,{f:2,c:54784},54788,54792,{f:2,c:54800},{f:3,c:54803},54812,54816,54820,54829,{f:2,c:54840},54844,
-54848,54853,{f:2,c:54856},54859,54861,54865,{f:2,c:54868},54872,54876,54887,54889,{f:2,c:54896},54900,54915,54917,{f:2,c:54924},54928,54932,54941,54943,54945,54952,54956,54960,54969,54971,{f:2,c:54980},54984,54988,54993,54996,54999,55001,55008,55012,55016,55024,55029,{f:2,c:55036},55040,55044,55057,{f:2,c:55064},55068,55072,{f:2,c:55080},55083,55085,{f:2,c:55092},55096,55100,55108,55111,55113,{f:2,c:55120},55124,{f:4,c:55126},{f:2,c:55136},55139,55141,55145,55148,55152,55156,{f:2,c:55164},55169,{f:2,
-c:55176},55180,55184,{f:2,c:55192},55195,55197,20285,20339,20551,20729,21152,21487,21621,21733,22025,23233,23478,26247,{f:2,c:26550},26607,27468,29634,30146,31292,33499,33540,34903,34952,35382,[36040,63747],36303,36603,36838,39381,21051,21364,21508,24682,24932,27580,29647,33050,35258,[12179,35282],38307,20355,21002,22718,22904,23014,[12082,24178],24185,25031,25536,26438,26604,26751,28567,30286,30475,30965,31240,31487,31777,32925,[12169,33390],33393,35563,38291,20075,21917,26359,28212,30883,31469,
-33883,35088,34638,38824,21208,22350,22570,23884,24863,25022,25121,25954,26577,27204,28187,[12130,29976],30131,30435,30640,32058,37039,{f:2,c:37969},40853,21283,23724,30002,32987,37440,38296,21083,22536,23004,23713,23831,24247,24378,24394,24951,27743,30074,30086,31968,32115,32177,32652,33108,33313,34193,35137,35611,37628,[38477,64009],40007,20171,20215,20491,20977,22607,24887,24894,24936,25913,27114,28433,30117,30342,30422,31623,33445,33995,37799,38283,21888,23458,22353,31923,32697,37301,20520,21435,
-23621,24040,25298,25454,25818,25831,28192,28844,31067,36317,36382,36989,37445,37624,20094,20214,20581,[12081,24062],24314,24838,26967,33137,34388,36423,37749,39467,20062,20625,26480,26688,20745,21133,21138,27298,30652,37392,40660,21163,24623,36850,20552,25001,25581,25802,26684,27268,28608,33160,35233,38548,22533,29309,[12125,29356],29956,32121,32365,32937,[12178,35211,64010],35700,36963,40273,25225,27770,28500,32080,32570,35363,20860,24906,31645,35609,37463,37772,20140,20435,20510,20670,20742,21185,
-21197,21375,22384,22659,24218,24465,24950,25004,25806,25964,26223,26299,[26356,63745],26775,28039,28805,28913,29855,29861,29898,30169,30828,30956,31455,31478,32069,32147,32789,32831,33051,33686,35686,36629,36885,37857,38915,38968,39514,39912,20418,21843,22586,[22865,63753],23395,23622,24760,25106,26690,26800,26856,28330,30028,30328,30926,31293,31995,32363,32380,35336,35489,35903,38542,40388,21476,21481,21578,21617,22266,22993,23396,23611,24235,25335,25911,25925,25970,26272,26543,27073,27837,30204,
-30352,30590,31295,32660,32771,32929,33167,33510,33533,33776,34241,34865,34996,35493,36764,37678,38599,39015,[12220,39640],[12238,40723],21741,26011,26354,26767,31296,[12181,35895],40288,22256,22372,23825,26118,26801,26829,28414,29736,34974,39908,27752,[12219,39592],20379,20844,20849,21151,23380,[12079,24037],24656,24685,25329,25511,25915,29657,31354,34467,36002,38799,[20018,63749],23521,[12093,25096],26524,[12128,29916],31185,33747,35463,35506,36328,36942,37707,38982,[24275,64011],27112,34303,37101,
-20896,23448,23532,24931,26874,27454,28748,29743,29912,31649,32592,33733,35264,36011,38364,39208,21038,24669,25324,36866,20362,20809,21281,22745,24291,26336,27960,28826,29378,29654,31568,33009,37979,21350,25499,32619,20054,20608,22602,22750,24618,24871,25296,27088,39745,23439,32024,32945,36703,20132,20689,21676,21932,23308,23968,24039,25898,25934,26657,27211,29409,30350,30703,32094,32761,33184,34126,34527,36611,36686,37066,39171,39509,39851,19992,20037,20061,20167,20465,20855,21246,21312,[12061,21475],
-[21477,63750],21646,22036,22389,22434,23495,23943,24272,25084,25304,25937,26552,26601,27083,27472,27590,27628,27714,28317,28792,29399,29590,29699,30655,30697,31350,32127,32777,[12165,33276],33285,33290,33503,34914,35635,36092,36544,36881,37041,37476,37558,39378,39493,40169,40407,[12244,40860,63751,63752],22283,23616,33738,38816,38827,40628,21531,31384,32676,35033,36557,37089,22528,23624,25496,31391,23470,[12088,24339],31353,31406,33422,36524,20518,21048,21240,21367,22280,25331,25458,27402,28099,30519,
-21413,29527,34152,36470,38357,26426,27331,28528,35437,36556,39243,26231,27512,36020,[12225,39740],21483,22317,22862,25542,27131,29674,30789,31418,31429,31998,33909,35215,36211,36917,38312,21243,22343,30023,31584,33740,37406,27224,20811,21067,21127,25119,26840,26997,38553,20677,21156,21220,25027,[12100,26020],26681,27135,29822,31563,33465,33771,35250,35641,36817,39241,20170,22935,25810,26129,27278,29748,31105,31165,33449,{f:2,c:34942},35167,37670,20235,21450,24613,25201,27762,32026,32102,20120,20834,
-30684,32943,20225,20238,20854,20864,21980,22120,22331,22522,22524,22804,22855,22931,23492,23696,23822,[12080,24049],24190,24524,25216,26071,26083,{f:2,c:26398},26462,26827,26820,27231,27450,27683,27773,27778,28103,29592,29734,29738,29826,29859,30072,30079,30849,30959,31041,{f:2,c:31047},31098,31637,32E3,32186,32648,32774,32813,32908,35352,35663,[35912,63744],36215,37665,37668,39138,39249,{f:2,c:39438},39525,40594,32202,20342,21513,25326,26708,[12198,37329,63754],21931,20794,23068,25062,[25295,63835],
-25343,37027,[35582,63837],26262,29014,38627,25423,25466,21335,26511,26976,28275,30007,32013,34930,22218,23064,20035,20839,[22856,63756],26608,32784,[12069,22899,63873],[24180,63886],[25754,63889],[31178,63893],[24565,63907],24684,25288,[25467,63908],[23527,63839,63914],23511,21162,22900,24361,[24594,63840],29785,39377,28611,33215,36786,24817,33126,[23615,63933],23273,35365,[26491,63944],[32016,63951],33021,23612,[27877,63971],[21311,63979],[28346,63980],22810,[33590,63998],[20025,63838],20150,20294,
-21934,22296,22727,24406,26039,26086,27264,27573,28237,30701,31471,31774,32222,34507,34962,37170,37723,25787,28606,29562,30136,36948,21846,22349,25018,25812,26311,28129,28251,28525,28601,30192,32835,33213,34113,35203,35527,35674,37663,27795,30035,31572,36367,36957,21776,22530,22616,24162,25095,25758,26848,30070,[31958,64003],34739,40680,20195,22408,22382,[12068,22823],23565,23729,24118,24453,25140,25825,29619,33274,34955,36024,38538,40667,[23429,64004],24503,24755,20498,[12049,20992],21040,22294,22581,
-22615,23566,23648,23798,23947,[24230,64001],24466,24764,25361,25481,25623,26691,26873,27330,28120,28193,28372,28644,29182,30428,30585,31153,31291,33796,35241,36077,36339,36424,36867,36884,36947,37117,37709,38518,38876,27602,28678,29272,29346,29544,30563,31167,31716,32411,[35712,63834],22697,24775,25958,26109,26302,27788,28958,29129,35930,38931,20077,31361,20189,20908,20941,21205,21516,24999,26481,26704,26847,[27934,64005],28540,30140,30643,31461,33012,33891,37509,20828,[12099,26007],26460,26515,30168,
-31431,33651,[12182,35910],36887,38957,23663,33216,33434,36929,36975,37389,24471,23965,27225,29128,30331,31561,34276,35588,37159,39472,[21895,63755],[25078,63757],[30313,63758],[32645,63759],[34367,63760],[34746,63761],[35064,63762],[37007,63763],[27931,63765],[28889,63766],[29662,63767],32097,[33853,63768],[37226,63769],[39409,63770],[20098,63771],[21365,63772],[27396,63773],27410,28734,[29211,63774],[34349,63775],[40478,63776],21068,36771,[23888,63777],25829,25900,27414,[28651,63778],31811,32412,
-[34253,63779],[35172,63780],35261,[25289,63781],[33240,63782],[34847,63783],[24266,63784],[26391,63785],[28010,63786],[29436,63787],29701,29807,34690,[37086,63788],[20358,63789],23821,24480,33802,[20919,63790],[25504,63861],[30053,63862],[20142,63863],20486,[20841,63864],[20937,63865],[26753,63866],27153,31918,31921,[31975,63867],[33391,63868],[35538,63869],36635,[37327,63870],20406,20791,[21237,63871],[21570,63872],[24300,63874],24942,25150,[26053,63875],27354,[28670,63876],[31018,63877],34268,34851,
-[38317,63878],39522,[39530,63879],[40599,63880],[40654,63881],[12050,21147,63882],[26310,63883],[27511,63884],28701,31019,[36706,63885],38722,[24976,63887],[25088,63888],25891,[28451,63890],[29001,63891],[29833,63892],[32244,63894],[32879,63895],[34030,63897],[36646,63896],[36899,63898],[37706,63899],20925,[21015,63900],[21155,63901],27916,[28872,63903],[35010,63904],[24265,63906],25986,[27566,63909],28610,[31806,63910],[29557,63911],[20196,63912],20278,[22265,63913],23738,[23994,63915],[24604,63916],
-[29618,63917],31533,[32666,63919],32718,[32838,63920],36894,[37428,63921],[38646,63922],[38728,63923],[38936,63924],40801,[20363,63925],28583,[31150,63926],[37300,63927],[38583,63928],[21214,63791],25736,[25796,63792],[27347,63793],28510,28696,[29200,63794],[30439,63795],[12156,32769,63796],[34310,63797],[34396,63798],[36335,63799],36613,[38706,63800],[39791,63801],[40442,63802],[12228,40565],[30860,63803],[31103,63804],[32160,63805],[33737,63806],[37636,63807],[12229,40575,63808],40595,[35542,63809],
-[22751,63810],[24324,63811],26407,28711,29903,[31840,63812],[32894,63813],20769,28712,[29282,63814],[30922,63815],[36034,63816],36058,36084,[38647,63817],[20102,63930],[20698,63931],[23534,63932],24278,[26009,63934],[29134,63936],[30274,63937],30637,32842,[34044,63938],[36988,63939],39719,[12243,40845,63940],[22744,63818],23105,[23650,63819],[27155,63820],[28122,63821],[28431,63822],30267,[32047,63823],[32311,63824],34078,35128,37860,[38475,63825],[21129,63943],26066,[26611,63945],27060,[27969,63946],
-[28316,63947],28687,[29705,63948],29792,[30041,63949],30244,[30827,63950],35628,[39006,63952],[20845,63953],[25134,63954],[38520,63955],20374,[20523,63956],[23833,63957],[28138,63958],32184,[36650,63959],[24459,63960],[24900,63961],[26647,63962],[38534,63964],[21202,63826],[32907,63827],[20956,63828],[20940,63829],26974,[31260,63830],[32190,63831],[33777,63832],[38517,63833],20442,[21033,63965],21400,[21519,63966],21774,[23653,63967],24743,[26446,63969],[26792,63970],28012,29313,29432,[29702,63972],
-29827,[30178,63973],31852,[32633,63974],32696,33673,[35023,63975],[35041,63976],[12197,37324,63977],37328,[38626,63978],39881,[21533,63981],28542,[29136,63982],[29848,63983],[34298,63984],36522,[38563,63985],[40023,63986],[40607,63987],[26519,63988],[28107,63989],29747,[33256,63990],38678,30764,[12148,31435,63991],[31520,63992],[31890,63993],25705,29802,30194,30908,30952,[12218,39340],39764,[12231,40635],23518,24149,28448,33180,33707,37E3,19975,21325,23081,24018,24398,24930,25405,26217,26364,28415,
-28459,28771,30622,33836,34067,34875,36627,39237,39995,21788,25273,26411,27819,33545,35178,38778,20129,22916,{f:2,c:24536},26395,32178,32596,33426,33579,33725,36638,37017,22475,22969,23186,23504,26151,26522,26757,27599,29028,32629,36023,36067,36993,39749,33032,35978,38476,39488,[12230,40613],23391,27667,29467,30450,30431,33804,20906,35219,20813,20885,21193,26825,27796,30468,30496,32191,32236,[12207,38754],40629,28357,34065,20901,21517,21629,26126,26269,26919,28319,[12139,30399],30609,33559,33986,34719,
-37225,37528,40180,34946,20398,20882,21215,22982,24125,24917,{f:2,c:25720},26286,26576,27169,27597,[12113,27611],29279,29281,29761,30520,[12141,30683],32791,33468,33541,35584,35624,35980,[12106,26408],27792,29287,[12140,30446],30566,31302,40361,27519,27794,22818,26406,33945,21359,22675,22937,24287,25551,26164,26483,28218,29483,31447,33495,37672,21209,24043,25006,25035,25098,25287,25771,[12102,26080],26969,27494,[12111,27595],28961,29687,30045,32326,33310,33538,34154,35491,36031,38695,40289,22696,40664,
-20497,21006,21563,21839,[12098,25991],27766,{f:2,c:32010},32862,34442,[12200,38272],38639,21247,27797,29289,21619,23194,23614,23883,24396,24494,26410,26806,26979,28220,28228,30473,[12150,31859],32654,34183,35598,36855,38753,40692,23735,24758,24845,25003,25935,{f:2,c:26107},27665,27887,29599,29641,32225,38292,23494,34588,35600,21085,21338,25293,25615,25778,26420,27192,27850,29632,29854,31636,31893,32283,33162,33334,34180,36843,38649,39361,20276,21322,21453,21467,25292,25644,25856,26001,27075,27886,
-28504,29677,30036,30242,30436,30460,30928,[30971,63844],31020,32070,33324,34784,36820,38930,39151,21187,25300,25765,28196,28497,30332,36299,37297,37474,39662,39747,20515,20621,22346,22952,23592,24135,24439,25151,25918,[12101,26041],26049,26121,26507,27036,28354,30917,32033,32938,33152,33323,33459,33953,34444,35370,35607,37030,38450,40848,20493,20467,22521,24472,25308,25490,26479,28227,28953,30403,32972,32986,{f:2,c:35060},35097,36064,36649,37197,38506,20271,20336,24091,26575,26658,[12137,30333],30334,
-39748,24161,27146,29033,29140,30058,32321,34115,34281,39132,20240,31567,32624,38309,20961,24070,26805,27710,27726,27867,29359,31684,33539,27861,29754,20731,21128,22721,25816,27287,29863,30294,30887,34327,38370,38713,21342,24321,35722,36776,36783,37002,21029,30629,40009,40712,19993,20482,20853,23643,24183,26142,26170,26564,26821,28851,29953,30149,31177,31453,36647,39200,39432,20445,22561,22577,23542,26222,27493,27921,28282,28541,29668,29995,33769,35036,35091,35676,36628,20239,20693,21264,[12056,21340],
-23443,[24489,63846],26381,31119,33145,33583,34068,35079,35206,36665,[36667,64007],39333,39954,26412,20086,20472,22857,23553,{f:2,c:23791},25447,26834,28925,29090,29739,32299,34028,34562,36898,37586,40179,[19981,63847],20184,20463,20613,21078,21103,21542,21648,22496,22827,23142,23386,23413,23500,24220,25206,25975,26023,28014,28325,[12119,29238],31526,31807,[12152,32566],{f:2,c:33104},33178,33344,33433,33705,35331,36E3,36070,36091,36212,36282,37096,37340,[12201,38428],38468,39385,40167,[21271,63843],
-20998,21545,22132,22707,22868,22894,24575,24996,25198,26128,27774,28954,30406,31881,31966,32027,33452,36033,38640,20315,24343,24447,25282,23849,26379,26842,30844,32323,40300,19989,20633,[12052,21269],21290,21329,22915,23138,24199,24754,24970,25161,25209,26E3,26503,27047,[12112,27604],{f:3,c:27606},27832,29749,30202,30738,30865,31189,31192,31875,32203,32737,32933,33086,33218,33778,34586,35048,35513,35692,36027,37145,[12206,38750],[12214,39131],[12240,40763],22188,23338,24428,25996,27315,27567,27996,
-28657,28693,29277,29613,36007,36051,38971,24977,27703,32856,39425,20045,20107,20123,20181,20282,20284,20351,20447,20735,21490,21496,21766,21987,22235,[12064,22763],22882,23057,23531,23546,23556,24051,24107,24473,24605,25448,26012,26031,26614,26619,26797,27515,27801,27863,28195,28681,29509,30722,31038,31040,31072,31169,31721,32023,32114,32902,33293,33678,34001,34503,35039,35408,35422,35613,36060,36198,36781,37034,39164,39391,40605,21066,26388,20632,21034,[12077,23665],25955,27733,29642,29987,30109,
-31639,33948,37240,38704,20087,25746,[27578,63856],29022,34217,19977,26441,26862,28183,33439,34072,34923,25591,28545,37394,39087,19978,20663,20687,20767,21830,21930,22039,23360,23577,23776,24120,24202,24224,24258,24819,26705,27233,28248,29245,29248,[29376,63994],30456,31077,31665,32724,35059,35316,35443,35937,36062,38684,[22622,63852],29885,36093,21959,31329,[32034,63850],[12170,33394],29298,[12131,29983],29989,31513,22661,22779,23996,24207,24246,24464,24661,25234,25471,25933,26257,26329,26360,26646,
-26866,29312,29790,31598,32110,32214,32626,32997,33298,34223,35199,35475,36893,37604,[12233,40653],[12239,40736],[12067,22805],22893,24109,24796,26132,26227,26512,27728,28101,28511,[12143,30707],30889,33990,37323,37675,20185,20682,20808,21892,23307,23459,25159,25982,26059,28210,29053,29697,29764,29831,29887,30316,31146,32218,32341,32680,33146,33203,33337,34330,34796,35445,36323,36984,37521,37925,39245,39854,21352,23633,26964,27844,27945,28203,[12166,33292],34203,35131,35373,[35498,63855,63905],38634,
-40807,21089,26297,27570,32406,34814,36109,38275,38493,25885,28041,29166,22478,22995,23468,24615,24826,25104,26143,26207,29481,29689,30427,[30465,63853],31596,32854,32882,33125,35488,37266,19990,21218,27506,27927,31237,31545,32048,36016,21484,22063,22609,23477,[12073,23567],23569,24034,25152,25475,25620,26157,26803,27836,28040,28335,28703,28836,29138,29990,30095,30094,30233,31505,31712,31787,32032,32057,34092,34157,34311,35380,36877,36961,37045,37559,38902,39479,20439,23660,26463,28049,31903,32396,
-35606,36118,36895,23403,24061,25613,33984,36956,39137,[29575,63841,63963],23435,24730,26494,28126,35359,35494,36865,38924,21047,28753,30862,37782,34928,37335,20462,21463,22013,22234,22402,22781,23234,23432,23723,23744,24101,24833,25101,[12095,25163],25480,25628,25910,[25976,63849],27193,27530,[12116,27700],27929,28465,29159,29417,29560,29703,29874,30246,30561,31168,31319,31466,31929,32143,32172,32353,32670,33065,33585,33936,34010,34282,34966,35504,35728,36664,36930,36995,37228,37526,37561,38539,{f:2,
-c:38567},38614,38656,38920,[12216,39318],39635,39706,21460,22654,22809,23408,23487,28113,28506,29087,29729,29881,32901,33789,24033,24455,24490,24642,26092,26642,26991,27219,27529,27957,28147,29667,30462,30636,31565,32020,33059,33308,33600,34036,34147,35426,35524,37255,37662,38918,39348,25100,34899,36848,37477,23815,23847,23913,29791,33181,34664,28629,[25342,63859],32722,35126,35186,19998,20056,20711,21213,21319,25215,26119,32361,34821,38494,20365,21273,22070,22987,23204,[12075,23608],23630,23629,
-24066,24337,24643,26045,26159,26178,26558,26612,29468,[12142,30690],[12144,31034],32709,33940,33997,35222,35430,35433,35553,[12183,35925],35962,22516,23508,24335,24687,25325,26893,27542,28252,29060,31698,34645,[35672,63996],36606,[12215,39135],39166,20280,20353,20449,21627,23072,23480,24892,26032,26216,29180,30003,31070,32051,33102,[12162,33251],33688,34218,34254,34563,35338,[12189,36523],[12191,36763],36805,22833,23460,23526,24713,23529,23563,[12092,24515],27777,28145,28683,29978,33455,35574,[20160,
-63997],[12055,21313],38617,[12114,27663],20126,20420,20818,21854,23077,23784,25105,[12123,29273],33469,33706,34558,34905,35357,38463,38597,39187,40201,40285,22538,23731,23997,24132,[24801,63929],24853,25569,[27138,63764,63836,63935],28197,37122,37716,38990,39952,40823,23433,23736,25353,26191,26696,30524,38593,38797,38996,39839,26017,35585,36555,38332,21813,23721,24022,24245,26263,30284,33780,38343,22739,25276,29390,40232,20208,22830,24591,26171,27523,31207,40230,21395,21696,22467,23830,24859,26326,
-28079,30861,33406,38552,38724,21380,25212,25494,28082,32266,33099,38989,27387,32588,40367,40474,20063,20539,20918,22812,24825,25590,26928,29242,32822,37326,24369,32004,[33509,63860],33903,33979,34277,36493,20335,22756,23363,24665,25562,25880,25965,26264,26954,27171,27915,28673,29036,30162,30221,31155,31344,[12154,32650],35140,35731,37312,38525,39178,22276,24481,26044,28417,30208,31142,35486,39341,[12226,39770],40812,20740,25014,25233,27277,33222,20547,22576,24422,28937,[12180,35328],35578,23420,34326,
-20474,20796,22196,22852,25513,28153,23978,26989,20870,20104,20313,22914,27487,27741,29877,30998,33287,33349,33593,36671,36701,39192,20134,22495,24441,[26131,63968],30123,32377,35695,36870,39515,22181,22567,23032,23071,23476,24310,25424,25403,26941,27783,27839,28046,28051,28149,28436,28895,28982,29017,29123,29141,30799,30831,31605,32227,32303,34893,36575,37467,40182,24709,28037,29105,38321,21421,26579,28814,28976,29744,33398,33490,38331,39653,40573,26308,29121,[33865,63854],22603,23992,24433,26144,
-26254,27001,27054,27704,27891,28214,28481,28634,28699,28719,29008,29151,29552,29787,29908,30408,31310,32403,33521,35424,36814,37704,38681,20034,20522,21E3,21473,26355,27757,28618,29450,30591,31330,33454,34269,34306,35028,35427,35709,35947,37555,38675,38928,20116,20237,20425,20658,21320,21566,21555,21978,22626,22714,22887,23067,23524,24735,25034,25942,26111,26212,26791,27738,28595,28879,29100,29522,31613,34568,35492,39986,40711,23627,27779,29508,[12127,29577],37434,28331,29797,30239,31337,32277,34314,
-20800,22725,25793,29934,29973,30320,32705,37013,38605,39252,28198,[12129,29926],{f:2,c:31401},33253,34521,34680,35355,23113,23436,23451,26785,26880,28003,29609,29715,29740,30871,32233,32747,33048,33109,33694,35916,[38446,63942],38929,[12104,26352],24448,26106,26505,27754,29579,20525,23043,27498,30702,22806,23916,24013,29477,30031,20709,20985,22575,22829,22934,23002,23525,23970,25303,25622,25747,25854,26332,27208,29183,29796,31368,31407,32327,32350,32768,33136,34799,35201,35616,36953,36992,39250,24958,
-27442,28020,32287,35109,36785,20433,20653,20887,21191,22471,22665,23481,24248,24898,27029,28044,28263,28342,29076,29794,[12132,29992],29996,32883,33592,33993,36362,37780,37854,20110,20305,20598,20778,[12060,21448],21451,21491,23431,23507,23588,24858,24962,26100,[12124,29275],29591,29760,30402,31056,31121,31161,32006,[12155,32701],33419,34261,34398,36802,36935,37109,37354,38533,[12204,38632],38633,21206,24423,26093,26161,26671,29020,31286,37057,38922,20113,27218,27550,28560,29065,32792,33464,34131,
-36939,38549,38642,38907,34074,39729,20112,29066,38596,20803,21407,21729,22291,22290,22435,23195,23236,23491,24616,24895,25588,27781,27961,28274,28304,29232,29503,29783,33489,34945,36677,36960,38498,39E3,40219,[12105,26376],36234,37470,20301,20553,20702,21361,22285,22996,23041,23561,24944,26256,28205,29234,29771,32239,32963,33806,33894,34111,34655,34907,35096,35586,36949,[12209,38859],39759,20083,20369,20754,20842,21807,21929,23418,23461,{f:2,c:24188},24254,24736,24799,{f:2,c:24840},25540,25912,26377,
-26580,26586,{f:2,c:26977},27833,27943,28216,28641,{f:2,c:29494},29788,30001,30290,32173,33278,33848,35029,35480,35547,35565,36400,36418,36938,36926,36986,[12195,37193],37321,37742,22537,27603,[12161,32905],32946,20801,22891,23609,28516,29607,32996,36103,37399,38287,[12160,32895],25102,28700,32104,34701,22432,24681,24903,27575,35518,37504,38577,[12036,20057],21535,28139,34093,38512,[12211,38899],39150,25558,27875,[12194,37009],20957,25033,33210,40441,20381,20506,20736,23452,24847,25087,25836,26885,
-27589,30097,30691,32681,33380,34191,34811,[12176,34915],35516,35696,37291,[12038,20108],20197,20234,22839,23016,24050,24347,24411,24609,29246,29669,[30064,63842],30157,31227,[12157,32780],[12159,32819],32900,33505,33617,36029,36019,36999,39156,39180,28727,30410,32714,32716,32764,35610,[12040,20154],20161,20995,21360,[21693,63902],22240,23035,23493,24341,24525,28270,32106,33589,34451,35469,38765,38775,[12032,19968],20314,20350,22777,[12103,26085],28322,36920,37808,39353,20219,22764,22922,23001,24641,
-31252,33615,36035,[12042,20837],21316,20173,21097,23381,33471,20180,[21050,63999],21672,22985,23039,[12070,23376],23383,23388,24675,24904,28363,[28825,63995],29038,29574,29943,30133,30913,32043,32773,[12163,33258],33576,34071,34249,35566,36039,38604,20316,21242,22204,26027,26152,28796,28856,29237,32189,33421,37196,38592,40306,23409,26855,27544,28538,30430,23697,26283,28507,31668,31786,34870,38620,19976,20183,21280,22580,22715,22767,22892,23559,24115,24196,24373,25484,26290,26454,27167,27299,27404,
-28479,29254,29520,29835,31456,31911,33144,33247,33255,33674,33900,34083,34196,34255,35037,36115,37292,[12199,38263],38556,20877,21705,22312,23472,25165,26448,26685,26771,28221,28371,28797,32289,35009,36001,36617,40779,40782,29229,31631,35533,37658,20295,20302,20786,21632,22992,24213,25269,26485,26990,27159,27822,28186,29401,29482,30141,31672,32053,33511,33785,33879,34295,35419,36015,36487,36889,37048,38606,40799,21219,21514,23265,23490,25688,25973,28404,29380,30340,31309,31515,31821,32318,32735,33659,
-35627,36042,[12186,36196],36321,36447,36842,36857,36969,37841,20291,20346,20659,20840,20856,21069,21098,22625,22652,22880,23560,23637,24283,24731,25136,26643,27583,27656,28593,29006,29728,[12133,3E4],30008,30033,30322,31564,31627,31661,31686,32399,35438,36670,36681,37439,37523,37666,37931,38651,39002,39019,39198,[20999,64E3],25130,25240,27993,30308,31434,31680,32118,21344,23742,24215,28472,28857,31896,38673,39822,40670,25509,25722,34678,19969,20117,20141,20572,20597,21576,22979,23450,24128,24237,
-24311,24449,24773,25402,25919,25972,26060,26230,26232,26622,26984,27273,27491,27712,28096,28136,28191,28254,28702,28833,29582,29693,30010,30555,30855,31118,31243,31357,31934,32142,33351,35330,35562,35998,37165,37194,37336,37478,37580,37664,38662,38742,38748,38914,[12237,40718],21046,21137,21884,22564,24093,24351,24716,25552,26799,28639,31085,31532,33229,34234,35069,35576,36420,37261,38500,38555,38717,38988,[12241,40778],20430,20806,20939,21161,22066,24340,24427,25514,25805,26089,26177,26362,26361,
-26397,26781,26839,27133,28437,28526,29031,29157,[12118,29226],29866,30522,31062,31066,31199,31264,31381,31895,31967,32068,32368,32903,34299,34468,35412,35519,36249,36481,36896,36973,37347,38459,38613,[12227,40165],26063,31751,[12188,36275],37827,23384,23562,21330,25305,29469,20519,23447,24478,24752,24939,26837,28121,29742,31278,32066,32156,32305,33131,36394,36405,37758,37912,20304,22352,24038,24231,25387,32618,20027,20303,20367,20570,23005,32964,21610,21608,22014,22863,23449,24030,24282,26205,26417,
-26609,26666,27880,27954,28234,28557,28855,29664,30087,31820,32002,32044,32162,[12168,33311],34523,35387,35461,[12187,36208],36490,36659,36913,37198,37202,37956,39376,[12149,31481],31909,20426,20737,20934,22472,23535,23803,26201,27197,27994,28310,28652,28940,30063,31459,34850,36897,36981,38603,39423,33537,20013,20210,34886,37325,21373,27355,26987,27713,33914,22686,24974,26366,25327,28893,29969,30151,32338,33976,35657,36104,20043,21482,21675,22320,22336,24535,25345,25351,25711,[12096,25903],26088,26234,
-26525,26547,[12108,27490],27744,27802,28460,30693,30757,31049,31063,32025,32930,33026,[12164,33267],33437,33463,34584,35468,36100,36286,36978,30452,31257,31287,32340,32887,21767,21972,22645,25391,25634,26185,26187,26733,27035,27524,27941,28337,29645,29800,29857,30043,30137,30433,30494,30603,31206,32265,32285,33275,34095,34967,35386,36049,36587,[12192,36784,63857],36914,37805,38499,38515,38663,20356,21489,23018,23241,24089,26702,29894,30142,31209,31378,33187,34541,36074,36300,36845,26015,26389,22519,
-28503,32221,36655,37878,38598,24501,25074,28548,19988,20376,20511,21449,21983,23919,24046,27425,27492,30923,31642,36425,[12190,36554,63746],36974,25417,25662,30528,31364,37679,38015,40810,25776,28591,29158,29864,29914,31428,31762,32386,31922,32408,35738,36106,38013,39184,39244,21049,23519,25830,26413,32046,20717,[21443,63851],22649,{f:2,c:24920},25082,26028,31449,35730,35734,20489,20513,21109,21809,23100,24288,24432,24884,25950,26124,26166,26274,27085,28356,28466,29462,30241,31379,33081,33369,33750,
-33980,20661,22512,23488,23528,24425,25505,30758,32181,33756,34081,37319,37365,20874,26613,31574,36012,20932,22971,24765,34389,20508,21076,23610,24957,25114,[25299,64002],25842,26021,28364,30240,33034,36448,38495,38587,20191,21315,21912,22825,24029,25797,27849,28154,29588,31359,[12167,33307],34214,36068,36368,36983,37351,38369,38433,38854,20984,21746,21894,24505,25764,28552,32180,36639,36685,37941,20681,23574,27838,28155,29979,30651,31805,31844,35449,35522,22558,22974,24086,25463,29266,30090,30571,
-35548,36028,36626,24307,26228,28152,32893,33729,35531,[12205,38737],39894,21059,26367,28053,28399,32224,35558,36910,36958,39636,21021,21119,21736,24980,25220,25307,26786,26898,26970,27189,28818,28966,30813,30977,30990,31186,31245,32918,[12171,33400],33493,33609,34121,35970,36229,37218,37259,37294,20419,22225,29165,30679,34560,35320,[12072,23544],24534,26449,37032,21474,22618,23541,24740,24961,25696,32317,32880,34085,37507,25774,20652,23828,26368,22684,25277,25512,26894,27E3,27166,28267,30394,31179,
-33467,33833,35535,36264,36861,37138,37195,37276,37648,37656,37786,38619,39478,39949,19985,30044,31069,31482,31569,31689,32302,33988,36441,36468,36600,36880,26149,26943,29763,20986,26414,40668,20805,24544,27798,34802,34909,34935,24756,33205,33795,36101,21462,21561,22068,23094,23601,28810,32736,32858,33030,33261,36259,37257,39519,40434,20596,20164,21408,24827,28204,23652,20360,20516,21988,23769,24159,24677,26772,27835,28100,29118,30164,30196,30305,31258,31305,32199,32251,32622,33268,34473,36636,38601,
-39347,[12242,40786],21063,21189,39149,35242,19971,26578,28422,20405,23522,26517,[27784,63858],28024,29723,30759,37341,37756,34756,31204,31281,24555,20182,21668,21822,22702,22949,24816,25171,25302,26422,26965,33333,38464,39345,39389,20524,21331,21828,22396,25176,25826,26219,26589,28609,28655,29730,29752,35351,37944,21585,22022,22374,24392,24986,27470,28760,28845,32187,35477,22890,33067,25506,30472,32829,36010,22612,25645,27067,23445,24081,28271,34153,20812,21488,22826,24608,24907,27526,27760,27888,
-31518,32974,33492,36294,37040,39089,25799,28580,25745,25860,20814,21520,[12063,22303],35342,24927,26742,30171,31570,32113,36890,22534,27084,33151,35114,36864,38969,20600,22871,22956,25237,36879,39722,24925,29305,38358,22369,23110,24052,25226,25773,25850,26487,27874,27966,29228,29750,30772,32631,33453,36315,38935,21028,22338,26495,29256,29923,36009,36774,37393,38442,[12043,20843],21485,25420,20329,21764,24726,25943,27803,28031,29260,29437,31255,35207,[12185,35997],24429,28558,28921,33192,24846,[20415,
-63845],20559,25153,[12122,29255],31687,32232,32745,36941,38829,39449,36022,22378,24179,26544,33805,35413,21536,23318,24163,24290,24330,25987,32954,34109,38281,38491,20296,21253,21261,21263,21638,21754,22275,24067,24598,25243,25265,25429,27873,28006,30129,30770,32990,33071,33502,33889,33970,34957,35090,36875,37610,39165,39825,24133,[26292,64006],26333,28689,29190,20469,21117,24426,24915,26451,27161,28418,29922,31080,34920,35961,39111,39108,39491,21697,31263,26963,35575,35914,[12213,39080],39342,24444,
-25259,30130,[12138,30382],34987,36991,38466,21305,24380,24517,[27852,63848],29644,30050,[12134,30091],31558,33534,39325,20047,36924,19979,20309,21414,22799,24264,26160,27827,29781,33655,34662,36032,36944,38686,39957,22737,23416,34384,35604,40372,23506,24680,24717,26097,27735,28450,28579,28698,32597,32752,{f:2,c:38289},38480,38867,21106,36676,20989,21547,21688,21859,21898,27323,28085,32216,33382,37532,38519,40569,21512,21704,30418,34532,38308,38356,38492,20130,20233,23022,23270,24055,24658,25239,26477,
-26689,27782,28207,32568,32923,33322,38917,20133,20565,21683,22419,22874,23401,23475,25032,26999,28023,28707,34809,35299,35442,35559,36994,39405,39608,21182,26680,20502,24184,26447,33607,[12175,34892,64008],20139,21521,22190,29670,37141,38911,39177,39255,[12217,39321],22099,22687,34395,35377,25010,27382,29563,36562,27463,38570,39511,22869,29184,36203,[12208,38761],20436,23796,24358,25080,26203,27883,28843,[12126,29572],29625,29694,30505,30541,32067,32098,32291,33335,34898,36066,37449,39023,23377,[12147,
-31348],[12174,34880],[12212,38913],23244,20448,21332,22846,23805,25406,28025,29433,33029,33031,33698,37583,38960,20136,20804,21009,22411,24418,27842,28366,28677,28752,28847,29074,29673,[29801,63918],33610,34722,34913,36872,37026,37795,39336,20846,24407,24800,24935,26291,34137,36426,37295,38795,20046,20114,21628,22741,22778,22909,23733,24359,[12094,25142],25160,26122,26215,27627,28009,28111,28246,28408,28564,28640,28649,28765,29392,29733,29786,29920,30355,31068,31946,32286,32993,33446,33899,33983,
-34382,34399,34676,35703,35946,37804,38912,39013,24785,25110,37239,23130,26127,28151,28222,29759,39746,24573,24794,31503,21700,24344,27742,27859,27946,28888,32005,34425,35340,40251,21270,21644,23301,27194,[12117,28779],30069,31117,[12146,31166],33457,33775,35441,35649,36008,38772,25844,25899,{f:2,c:30906},31339,20024,21914,22864,23462,24187,24739,25563,27489,26213,26707,28185,29029,29872,32008,36996,39529,39973,27963,[28369,63748],29502,35905,38346,20976,24140,24488,24653,24822,24880,24908,{f:2,c:26179},
-27045,27841,28255,28361,28514,29004,29852,30343,31681,31783,33618,34647,36945,38541,[12232,40643],21295,22238,24315,24458,24674,24724,25079,26214,26371,27292,28142,28590,28784,29546,32362,33214,33588,34516,35496,36036,21123,29554,23446,27243,37892,21742,22150,23389,25928,25989,26313,26783,28045,28102,[12120,29243],32948,37237,39501,20399,20505,21402,21518,21564,21897,21957,24127,24460,26429,29030,29661,36869,21211,21235,22628,22734,28932,29071,29179,34224,35347,[26248,63941],34216,21927,26244,29002,
-33841,21321,21913,27585,24409,24509,25582,26249,28999,35569,36637,40638,20241,25658,28875,30054,34407,24676,35662,40440,20807,20982,21256,27958,33016,[12234,40657],26133,27427,28824,30165,21507,23673,32007,35350,[12107,27424],27453,27462,21560,24688,27965,32725,33288,20694,20958,21916,22123,22221,23020,23305,24076,24985,24984,25137,26206,26342,29081,{f:2,c:29113},29351,31143,31232,32690,35440,{s:163},{f:4,c:12310},{s:14},8223,8219,{f:2,c:8314},{s:7},8316,0,{f:2,c:8317},{s:23},700,{s:44},8942,8759,
-{s:20},{f:10,c:10122},{s:36},{f:26,c:9398},{s:61},{f:2,c:8826},{f:2,c:8910},{f:2,c:8832},{f:4,c:8816},0,8842,0,8843,{f:2,c:8822},8825,{f:2,c:8922},{s:5},8773,8771,8776,0,8868,{s:78},8244,{s:11},9839,{s:4},8258,{s:4},10045,0,0,8226,{s:4},{f:2,c:8249},{s:16},10010,10006,0,9711,{s:3},10070,0,9676,{s:24},9775,{s:6},12320,0,{f:10,c:10102},{s:17},12306,12342,{s:13},8710,0,8735,0,{f:2,c:8741},0,8787,8785,{f:2,c:8806},8723,{f:3,c:8853},0,8980,0,0,8802,0,9649,0,8738,8784,0,0,8867,0,0,{f:2,c:8814},8837,8836,
-8713,8716,{f:2,c:8891},8794,8966,{s:6},12958,0,8252,{s:11},9702,{s:3},9663,9653,9657,9667,{s:4},9674,12849,12857,13259,{f:5,c:9327},{s:18},8656,8655,8653,{s:37},8657,8659,{s:8},8626,8625,0,8628,8624,8627,{s:14},8636,8640,{s:10},{f:2,c:8644},{s:144},{f:5,c:9347},{s:33},12948,{s:15},12965,{s:93},8672,8674,8673,8675,{s:4},8678,8680,8679,8681,{s:20},9757,9759,{s:76},12944,{f:6,c:12938},{s:15},{f:2,c:12318},8246,0,8245,{s:3},12540,0,0,{f:2,c:44034},{f:2,c:44037},{f:5,c:44043},44056,{f:2,c:44062},{f:3,
-c:44065},{f:7,c:44069},44078,{f:6,c:44082},{f:2,c:44090},{f:3,c:44093},{f:10,c:44097},44108,{f:6,c:44110},{f:3,c:44117},{f:3,c:44121},{f:19,c:44125},{f:2,c:44146},{f:2,c:44149},44153,{f:5,c:44155},44162,{f:2,c:44167},{f:3,c:44173},{f:3,c:44177},{f:7,c:44181},44190,{f:6,c:44194},44203,{f:2,c:44205},{f:7,c:44209},44218,{f:3,c:44222},{f:2,c:44226},{f:3,c:44229},{f:3,c:44233},{f:8,c:44237},44246,{f:8,c:44248},{f:2,c:44258},{f:2,c:44261},44265,44267,{f:2,c:44269},44274,44276,{f:5,c:44279},{f:2,c:44286},
-{f:3,c:44289},44293,{f:5,c:44295},44302,44304,{f:6,c:44306},{f:3,c:44313},{f:3,c:44317},{f:8,c:44321},{f:2,c:44330},{f:6,c:44334},{f:2,c:44342},{f:3,c:44345},{f:7,c:44349},44358,44360,{f:6,c:44362},{f:3,c:44369},{f:3,c:44373},{f:8,c:44377},44386,{f:8,c:44388},{f:2,c:44398},{f:2,c:44401},{f:4,c:44407},44414,44416,{f:5,c:44419},{f:2,c:44426},{f:3,c:44429},{f:11,c:44433},{f:6,c:44446},{f:18,c:44453},{f:8,c:44472},{f:2,c:44482},{f:3,c:44485},{f:7,c:44489},44498,{f:8,c:44500},{f:3,c:44509},{f:3,c:44513},
-{f:19,c:44517},{f:2,c:44538},{f:2,c:44541},{f:6,c:44546},44554,44556,{f:6,c:44558},{f:27,c:44565},{f:2,c:44594},{f:2,c:44597},44601,{f:5,c:44603},44610,44612,{f:3,c:44615},44619,44623,{f:3,c:44625},44629,{f:5,c:44631},44638,{f:3,c:44642},{f:2,c:44646},{f:2,c:44650},{f:3,c:44653},{f:7,c:44657},44666,{f:6,c:44670},{f:6,c:44678},{f:47,c:44685},44735,{f:3,c:44737},{f:7,c:44741},44750,{f:6,c:44754},{f:2,c:44762},{f:11,c:44765},{f:2,c:44777},44780,{f:6,c:44782},{f:3,c:44789},{f:3,c:44793},{f:10,c:44797},
-{f:4,c:44809},{f:2,c:44814},{f:27,c:44817},{f:2,c:44846},44849,44851,{f:7,c:44853},44862,44864,{f:4,c:44868},{f:6,c:44874},{f:11,c:44881},{f:6,c:44894},{f:19,c:44902},{f:6,c:44922},{f:3,c:44929},{f:3,c:44933},{f:7,c:44937},{f:3,c:44946},{f:6,c:44950},{f:27,c:44957},{f:2,c:44986},{f:3,c:44989},{f:6,c:44993},45002,45004,{f:5,c:45007},{f:7,c:45013},{f:11,c:45021},{f:6,c:45034},{f:2,c:45042},{f:3,c:45045},{f:7,c:45049},{f:2,c:45058},{f:7,c:45061},{f:3,c:45069},{f:3,c:45073},{f:7,c:45077},{f:10,c:45086},
-{f:27,c:45097},{f:2,c:45126},45129,45131,45133,{f:4,c:45135},45142,45144,{f:3,c:45146},{f:30,c:45150},{f:2,c:45182},{f:3,c:45185},{f:7,c:45189},45198,45200,{f:6,c:45202},45211,{f:2,c:45213},{f:5,c:45219},45226,45232,45234,{f:2,c:45238},{f:3,c:45241},{f:7,c:45245},45254,{f:6,c:45258},{f:2,c:45266},{f:3,c:45269},{f:7,c:45273},{f:4,c:45281},{f:34,c:45286},45322,{f:3,c:45325},45329,{f:4,c:45332},45338,{f:5,c:45342},{f:2,c:45350},{f:3,c:45353},{f:7,c:45357},45366,{f:6,c:45370},{f:2,c:45378},{f:3,c:45381},
-{f:7,c:45385},{f:2,c:45394},{f:2,c:45398},{f:3,c:45401},{f:3,c:45405},{f:23,c:45409},{f:2,c:45434},{f:3,c:45437},45441,{f:5,c:45443},45450,45452,{f:4,c:45454},{f:3,c:45461},{f:3,c:45465},{f:11,c:45469},{f:35,c:45481},{f:3,c:45517},{f:3,c:45521},{f:7,c:45525},45534,{f:8,c:45536},{f:2,c:45546},{f:3,c:45549},{f:8,c:45553},45562,45564,{f:6,c:45566},{f:2,c:45574},{f:2,c:45577},{f:7,c:45581},45590,45592,{f:6,c:45594},{f:19,c:45601},{f:7,c:45621},{f:27,c:45629},{f:3,c:45657},{f:3,c:45661},{f:7,c:45665},
-{f:10,c:45674},{f:6,c:45686},{f:7,c:45693},{f:3,c:45702},{f:6,c:45706},{f:2,c:45714},{f:3,c:45717},{f:5,c:45723},45730,45732,{f:3,c:45735},45739,{f:3,c:45741},{f:3,c:45745},{f:19,c:45749},{f:2,c:45770},{f:3,c:45773},45777,{f:5,c:45779},45786,45788,{f:4,c:45790},45795,45799,{f:2,c:45801},{f:3,c:45808},45814,{f:3,c:45820},{f:2,c:45826},{f:3,c:45829},{f:7,c:45833},45842,{f:6,c:45846},{f:55,c:45853},45911,{f:2,c:45913},45917,{f:4,c:45920},45926,45928,45930,{f:2,c:45932},45935,{f:2,c:45938},{f:3,c:45941},
-{f:7,c:45945},45954,{f:6,c:45958},{f:3,c:45965},{f:3,c:45969},{f:11,c:45973},{f:6,c:45986},{f:3,c:45993},{f:23,c:45997},{f:2,c:46022},{f:2,c:46025},46029,46031,{f:3,c:46033},46038,46040,46042,46044,{f:2,c:46046},{f:3,c:46049},{f:3,c:46053},{f:19,c:46057},{f:19,c:46077},{f:7,c:46097},{f:3,c:46105},{f:3,c:46109},{f:7,c:46113},46122,{f:8,c:46124},{f:27,c:46133},{f:2,c:46162},{f:3,c:46165},{f:7,c:46169},46178,46180,{f:6,c:46182},{f:19,c:46189},{f:7,c:46209},{f:20,c:46217},{f:6,c:46238},{f:3,c:46245},
-{f:3,c:46249},{f:8,c:46253},46262,46264,{f:6,c:46266},{f:3,c:46273},{f:3,c:46277},{f:7,c:46281},{f:4,c:46289},{f:6,c:46294},{f:2,c:46302},{f:2,c:46305},46309,{f:5,c:46311},46318,46320,{f:6,c:46322},{f:27,c:46329},{f:2,c:46358},{f:2,c:46361},{f:7,c:46365},46374,{f:5,c:46379},{f:2,c:46386},{f:3,c:46389},{f:7,c:46393},46402,{f:5,c:46406},{f:2,c:46414},{f:3,c:46417},{f:7,c:46421},46430,{f:62,c:46434},{f:2,c:46498},{f:3,c:46501},46505,{f:4,c:46508},46514,{f:5,c:46518},{f:2,c:46526},{f:3,c:46529},{f:7,
-c:46533},46542,{f:6,c:46546},{f:19,c:46553},{f:35,c:46573},{f:2,c:46610},{f:3,c:46613},{f:12,c:46617},{f:6,c:46630},{f:7,c:46637},{f:19,c:46645},{f:27,c:46665},{f:3,c:46693},{f:51,c:46697},{f:2,c:46750},{f:3,c:46753},{f:6,c:46757},{f:4,c:46765},{f:34,c:46770},{f:27,c:46805},{f:3,c:46833},{f:3,c:46837},{f:7,c:46841},{f:3,c:46850},{f:34,c:46854},{f:2,c:46890},{f:2,c:46893},{f:7,c:46897},46906,{f:8,c:46908},{f:3,c:46917},{f:3,c:46921},{f:7,c:46925},{f:10,c:46934},{f:3,c:46945},{f:3,c:46949},{f:7,c:46953},
-46962,46964,{f:6,c:46966},{f:2,c:46974},{f:3,c:46977},{f:7,c:46981},46990,{f:3,c:46995},{f:2,c:47002},{f:3,c:47005},{f:7,c:47009},47018,{f:6,c:47022},{f:2,c:47030},{f:14,c:47033},47048,{f:34,c:47050},{f:2,c:47086},{f:3,c:47089},{f:7,c:47093},47102,{f:5,c:47106},{f:2,c:47114},{f:3,c:47117},{f:7,c:47121},47130,47132,{f:6,c:47134},{f:2,c:47142},{f:3,c:47145},{f:7,c:47149},47158,{f:6,c:47162},{f:3,c:47169},{f:12,c:47173},47186,{f:8,c:47188},{f:2,c:47198},{f:3,c:47201},{f:7,c:47205},47214,47216,{f:6,c:47218},
-{f:3,c:47225},{f:16,c:47229},{f:26,c:47246},{f:7,c:47273},{f:3,c:47281},{f:3,c:47285},{f:7,c:47289},47298,47300,{f:6,c:47302},{f:3,c:47309},{f:3,c:47313},{f:8,c:47317},47326,47328,{f:6,c:47330},{f:2,c:47338},{f:3,c:47341},{f:7,c:47345},47354,47356,{f:6,c:47358},{f:19,c:47365},{f:7,c:47385},{f:27,c:47393},{f:2,c:47422},{f:3,c:47425},{f:7,c:47429},{f:2,c:47437},47440,{f:6,c:47442},{f:2,c:47450},{f:3,c:47453},{f:7,c:47457},47466,47468,{f:6,c:47470},{f:2,c:47478},{f:3,c:47481},{f:7,c:47485},47494,47496,
-{f:2,c:47499},{f:29,c:47503},{f:2,c:47534},{f:3,c:47537},{f:7,c:47541},47550,47552,{f:6,c:47554},{f:2,c:47562},47565,{f:5,c:47571},47578,47580,{f:2,c:47583},47586,{f:2,c:47590},{f:3,c:47593},{f:7,c:47597},47606,{f:5,c:47611},{f:6,c:47618},{f:12,c:47625},{f:34,c:47638},{f:2,c:47674},{f:3,c:47677},47681,{f:5,c:47683},47690,47692,{f:4,c:47695},{f:2,c:47702},{f:3,c:47705},{f:7,c:47709},47718,{f:6,c:47722},{f:2,c:47730},{f:3,c:47733},{f:10,c:47737},47750,{f:4,c:47752},{f:27,c:47757},47786,{f:3,c:47789},
-47793,{f:5,c:47795},47802,47804,{f:6,c:47806},{f:3,c:47813},{f:15,c:47817},{f:34,c:47834},{f:3,c:47869},{f:3,c:47873},{f:8,c:47877},47886,47888,{f:6,c:47890},{f:3,c:47897},{f:3,c:47901},{f:8,c:47905},47914,{f:8,c:47916},47927,{f:2,c:47929},{f:5,c:47935},47942,47944,{f:3,c:47946},47950,{f:3,c:47953},{f:3,c:47957},{f:8,c:47961},47970,{f:8,c:47972},{f:27,c:47981},{f:3,c:48009},{f:3,c:48013},{f:19,c:48017},{f:3,c:48037},{f:3,c:48041},{f:7,c:48045},{f:2,c:48053},{f:8,c:48056},{f:3,c:48065},{f:3,c:48069},
-{f:7,c:48073},{f:2,c:48081},{f:36,c:48084},{f:2,c:48122},{f:2,c:48125},48129,{f:5,c:48131},48138,48142,48144,{f:2,c:48146},{f:2,c:48153},{f:4,c:48160},48166,48168,{f:3,c:48170},{f:2,c:48174},{f:2,c:48178},{f:3,c:48181},{f:7,c:48185},48194,{f:3,c:48198},{f:2,c:48202},{f:2,c:48206},{f:12,c:48209},{f:38,c:48222},{f:2,c:48262},{f:2,c:48265},48269,{f:5,c:48271},48278,48280,{f:5,c:48283},{f:2,c:48290},{f:2,c:48293},{f:7,c:48297},48306,{f:6,c:48310},{f:2,c:48318},{f:3,c:48321},{f:8,c:48325},48334,{f:3,c:48338},
-{f:2,c:48342},{f:3,c:48345},{f:23,c:48349},48375,{f:3,c:48377},{f:7,c:48381},48390,48392,{f:6,c:48394},{f:3,c:48401},{f:15,c:48405},{f:7,c:48421},{f:19,c:48429},{f:7,c:48449},{f:2,c:48458},{f:3,c:48461},{f:7,c:48465},{f:10,c:48474},{f:3,c:48485},{f:23,c:48489},{f:2,c:48514},{f:2,c:48517},{f:5,c:48523},48530,48532,{f:3,c:48534},48539,{f:7,c:48541},{f:11,c:48549},{f:7,c:48561},{f:27,c:48569},{f:2,c:48598},{f:3,c:48601},{f:12,c:48605},{f:6,c:48618},{f:3,c:48625},{f:3,c:48629},{f:7,c:48633},{f:2,c:48641},
-48644,{f:6,c:48646},{f:2,c:48654},{f:3,c:48657},{f:7,c:48661},48670,{f:36,c:48672},{f:2,c:48710},{f:3,c:48713},48717,{f:5,c:48719},48726,48728,{f:4,c:48732},{f:2,c:48738},{f:3,c:48741},48745,{f:5,c:48747},48754,{f:5,c:48758},{f:2,c:48766},{f:3,c:48769},{f:7,c:48773},48782,{f:6,c:48786},{f:14,c:48794},{f:39,c:48809},{f:2,c:48850},{f:2,c:48853},{f:7,c:48857},{f:2,c:48865},{f:6,c:48870},{f:20,c:48877},{f:6,c:48898},{f:14,c:48906},48922,{f:34,c:48926},{f:2,c:48962},{f:3,c:48965},{f:7,c:48969},{f:3,c:48978},
-{f:62,c:48982},{f:27,c:49045},{f:20,c:49073},{f:6,c:49094},{f:2,c:49102},{f:3,c:49105},{f:7,c:49109},{f:2,c:49117},49120,{f:90,c:49122},{f:20,c:49213},{f:6,c:49234},{f:3,c:49241},{f:3,c:49245},{f:7,c:49249},{f:38,c:49258},{f:2,c:49298},{f:3,c:49301},{f:7,c:49305},49314,49316,{f:6,c:49318},49326,{f:2,c:49329},{f:5,c:49335},49342,{f:3,c:49346},{f:2,c:49350},{f:2,c:49354},{f:3,c:49357},{f:7,c:49361},49370,{f:6,c:49374},{f:2,c:49382},{f:3,c:49385},{f:7,c:49389},49398,49400,{f:6,c:49402},{f:3,c:49409},
-{f:3,c:49413},{f:7,c:49417},{f:4,c:49425},{f:6,c:49430},{f:2,c:49441},49445,{f:4,c:49448},49454,{f:4,c:49458},49463,{f:2,c:49466},{f:3,c:49469},{f:7,c:49473},49482,{f:6,c:49486},{f:2,c:49494},{f:3,c:49497},{f:7,c:49501},49510,{f:6,c:49514},{f:3,c:49521},{f:3,c:49525},{f:12,c:49529},{f:6,c:49542},49551,{f:3,c:49553},49557,{f:5,c:49559},49566,49568,{f:3,c:49570},{f:2,c:49574},{f:2,c:49578},{f:3,c:49581},{f:12,c:49585},{f:6,c:49598},{f:3,c:49605},{f:3,c:49609},{f:7,c:49613},{f:2,c:49621},{f:7,c:49625},
-{f:3,c:49633},{f:3,c:49637},{f:7,c:49641},49650,{f:8,c:49652},{f:2,c:49662},{f:3,c:49665},{f:7,c:49669},49678,49680,{f:6,c:49682},{f:2,c:49690},{f:2,c:49693},{f:7,c:49697},49706,49708,49710,49712,49715,{f:19,c:49717},{f:7,c:49737},{f:2,c:49746},{f:3,c:49749},{f:7,c:49753},{f:4,c:49761},{f:6,c:49766},{f:2,c:49774},{f:3,c:49777},{f:7,c:49781},49790,49792,{f:6,c:49794},{f:6,c:49802},{f:7,c:49809},{f:2,c:49817},49820,{f:6,c:49822},{f:2,c:49830},{f:3,c:49833},{f:6,c:49838},49846,49848,{f:34,c:49850},{f:2,
-c:49886},{f:2,c:49889},{f:6,c:49893},49902,49904,{f:4,c:49906},49911,49914,{f:3,c:49917},{f:7,c:49921},{f:2,c:49930},{f:5,c:49934},{f:2,c:49942},{f:3,c:49945},{f:7,c:49949},{f:2,c:49958},{f:27,c:49962},{f:34,c:49990},{f:2,c:50026},{f:3,c:50029},50033,{f:5,c:50035},{f:2,c:50042},{f:6,c:50046},{f:3,c:50053},{f:3,c:50057},{f:51,c:50061},{f:23,c:50113},{f:2,c:50138},{f:2,c:50141},50145,{f:5,c:50147},{f:3,c:50154},{f:6,c:50158},{f:2,c:50166},{f:15,c:50169},{f:7,c:50185},{f:19,c:50193},{f:7,c:50213},{f:3,
-c:50221},{f:3,c:50225},{f:7,c:50229},{f:10,c:50238},{f:27,c:50249},{f:2,c:50278},{f:3,c:50281},{f:7,c:50285},{f:3,c:50294},{f:6,c:50298},{f:19,c:50305},{f:7,c:50325},{f:27,c:50333},{f:3,c:50361},{f:44,c:50365},{f:6,c:50410},{f:2,c:50418},{f:3,c:50421},50425,{f:4,c:50427},{f:10,c:50434},{f:3,c:50445},{f:3,c:50449},{f:7,c:50453},{f:11,c:50461},{f:2,c:50474},{f:3,c:50477},{f:7,c:50481},50490,50492,{f:6,c:50494},{f:2,c:50502},50507,{f:4,c:50511},50518,{f:3,c:50522},50527,{f:2,c:50530},{f:3,c:50533},{f:7,
-c:50537},50546,{f:6,c:50550},{f:2,c:50558},{f:3,c:50561},{f:2,c:50565},{f:4,c:50568},50574,50576,{f:3,c:50578},50582,{f:3,c:50585},{f:3,c:50589},{f:8,c:50593},{f:10,c:50602},{f:2,c:50614},50618,{f:5,c:50623},50635,50637,50639,{f:2,c:50642},{f:3,c:50645},{f:7,c:50649},50658,50660,{f:6,c:50662},50671,{f:3,c:50673},50677,{f:4,c:50680},{f:3,c:50690},{f:3,c:50697},{f:3,c:50701},{f:7,c:50705},50714,{f:7,c:50717},{f:2,c:50726},{f:3,c:50729},50735,{f:2,c:50737},50742,50744,50746,{f:4,c:50748},{f:2,c:50754},
-{f:3,c:50757},{f:7,c:50761},50770,{f:6,c:50774},{f:2,c:50782},{f:11,c:50785},{f:2,c:50797},50800,{f:6,c:50802},{f:2,c:50810},{f:3,c:50813},{f:7,c:50817},50826,50828,{f:6,c:50830},{f:2,c:50838},{f:3,c:50841},{f:7,c:50845},50854,50856,{f:6,c:50858},{f:2,c:50866},{f:3,c:50869},{f:5,c:50875},50882,50884,{f:6,c:50886},{f:2,c:50894},{f:3,c:50897},{f:7,c:50901},{f:2,c:50910},{f:6,c:50914},{f:2,c:50922},{f:3,c:50925},{f:7,c:50929},{f:3,c:50938},{f:6,c:50942},{f:2,c:50950},{f:3,c:50953},{f:7,c:50957},50966,
-50968,{f:6,c:50970},{f:2,c:50978},{f:3,c:50981},{f:7,c:50985},50994,50996,50998,{f:4,c:51E3},{f:2,c:51006},{f:3,c:51009},{f:5,c:51013},51019,51022,51024,{f:3,c:51033},{f:3,c:51037},{f:7,c:51041},{f:2,c:51049},{f:8,c:51052},{f:2,c:51062},{f:3,c:51065},{f:4,c:51071},51078,{f:3,c:51083},51087,{f:2,c:51090},51093,51097,{f:5,c:51099},51106,{f:5,c:51111},{f:2,c:51118},{f:3,c:51121},{f:7,c:51125},51134,{f:6,c:51138},{f:2,c:51146},51149,51151,{f:7,c:51153},{f:4,c:51161},{f:6,c:51166},{f:3,c:51173},{f:3,c:51177},
-{f:19,c:51181},{f:2,c:51202},{f:3,c:51205},51209,{f:5,c:51211},51218,51220,{f:5,c:51223},{f:2,c:51230},{f:3,c:51233},{f:7,c:51237},51246,51248,{f:6,c:51250},{f:3,c:51257},{f:3,c:51261},{f:7,c:51265},{f:2,c:51274},{f:6,c:51278},{f:27,c:51285},{f:2,c:51314},{f:3,c:51317},51321,{f:5,c:51323},51330,51332,{f:3,c:51336},{f:6,c:51342},{f:8,c:51349},51358,51360,{f:6,c:51362},{f:19,c:51369},{f:6,c:51390},{f:3,c:51397},{f:3,c:51401},{f:7,c:51405},51414,51416,{f:6,c:51418},{f:2,c:51426},{f:16,c:51429},{f:6,
-c:51446},{f:2,c:51454},{f:3,c:51457},{f:5,c:51463},51470,51472,{f:6,c:51474},{f:19,c:51481},{f:7,c:51501},{f:27,c:51509},{f:2,c:51538},{f:3,c:51541},{f:7,c:51545},51554,{f:8,c:51556},{f:3,c:51565},{f:3,c:51569},{f:7,c:51573},{f:11,c:51581},{f:2,c:51594},{f:3,c:51597},{f:7,c:51601},51610,51612,{f:34,c:51614},{f:2,c:51650},{f:2,c:51653},51657,{f:5,c:51659},51666,51668,{f:2,c:51671},51675,{f:2,c:51678},51681,51683,{f:2,c:51685},{f:4,c:51688},51694,{f:6,c:51698},{f:2,c:51706},{f:3,c:51709},{f:7,c:51713},
-51722,{f:6,c:51726},{f:3,c:51733},{f:16,c:51737},{f:34,c:51754},{f:2,c:51790},{f:3,c:51793},{f:7,c:51797},51806,{f:6,c:51810},{f:20,c:51817},{f:6,c:51838},{f:19,c:51845},{f:35,c:51865},{f:2,c:51902},{f:3,c:51905},{f:7,c:51909},51918,51920,51922,{f:4,c:51924},{f:6,c:51930},{f:11,c:51937},{f:7,c:51949},{f:19,c:51957},{f:7,c:51977},{f:3,c:51985},{f:3,c:51989},{f:7,c:51993},{f:31,c:52002},{f:6,c:52034},{f:2,c:52042},{f:3,c:52045},{f:7,c:52049},{f:3,c:52058},{f:6,c:52062},{f:19,c:52069},{f:34,c:52090},
-{f:27,c:52125},{f:27,c:52153},{f:15,c:52181},{f:2,c:52197},52200,{f:34,c:52202},{f:2,c:52238},{f:3,c:52241},{f:7,c:52245},{f:3,c:52254},{f:4,c:52259},{f:2,c:52266},52269,52271,{f:7,c:52273},52282,{f:5,c:52287},{f:2,c:52294},{f:3,c:52297},{f:7,c:52301},52310,{f:6,c:52314},{f:3,c:52321},52325,52327,{f:7,c:52329},{f:4,c:52337},{f:34,c:52342},{f:2,c:52378},{f:3,c:52381},{f:7,c:52385},52394,{f:6,c:52398},{f:2,c:52406},{f:3,c:52409},{f:7,c:52413},52422,52424,{f:6,c:52426},{f:3,c:52433},{f:15,c:52437},{f:7,
-c:52453},{f:3,c:52461},{f:16,c:52465},{f:6,c:52482},{f:2,c:52490},{f:3,c:52493},{f:7,c:52497},52506,52508,{f:6,c:52510},{f:3,c:52517},{f:3,c:52521},{f:12,c:52525},{f:34,c:52538},{f:3,c:52573},{f:3,c:52577},{f:7,c:52581},52590,52592,{f:6,c:52594},{f:15,c:52601},{f:11,c:52617},{f:2,c:52630},{f:3,c:52633},{f:7,c:52637},52646,52648,{f:6,c:52650},{f:19,c:52657},{f:7,c:52677},{f:3,c:52685},{f:23,c:52689},{f:3,c:52713},{f:3,c:52717},{f:7,c:52721},52730,52732,{f:6,c:52734},{f:3,c:52741},{f:3,c:52745},{f:7,
-c:52749},{f:4,c:52757},{f:6,c:52762},{f:2,c:52770},{f:3,c:52773},{f:7,c:52777},52786,52788,{f:34,c:52790},{f:2,c:52826},{f:2,c:52829},{f:6,c:52834},52842,52844,{f:6,c:52846},{f:2,c:52854},{f:3,c:52857},{f:7,c:52861},52870,52872,{f:6,c:52874},{f:2,c:52882},{f:3,c:52885},{f:7,c:52889},52898,{f:6,c:52902},{f:19,c:52910},{f:34,c:52930},{f:2,c:52966},{f:2,c:52969},{f:7,c:52973},52982,{f:6,c:52986},{f:2,c:52994},{f:3,c:52997},{f:7,c:53001},53010,53012,{f:6,c:53014},{f:3,c:53021},{f:3,c:53025},{f:7,c:53029},
-53038,{f:6,c:53042},{f:27,c:53049},{f:2,c:53078},{f:3,c:53081},{f:7,c:53085},53094,53096,{f:6,c:53098},{f:2,c:53106},{f:3,c:53109},{f:7,c:53113},{f:4,c:53121},{f:6,c:53126},{f:20,c:53133},{f:6,c:53154},{f:7,c:53161},{f:19,c:53169},{f:27,c:53189},{f:2,c:53218},{f:3,c:53221},{f:7,c:53225},53234,53236,{f:6,c:53238},{f:3,c:53245},{f:3,c:53249},{f:12,c:53253},{f:6,c:53266},{f:20,c:53273},{f:6,c:53294},{f:2,c:53302},{f:3,c:53305},{f:7,c:53309},53318,53320,{f:6,c:53322},{f:3,c:53329},{f:3,c:53333},{f:7,
-c:53337},{f:11,c:53345},{f:2,c:53358},{f:3,c:53361},{f:7,c:53365},{f:3,c:53374},{f:34,c:53378},{f:2,c:53414},{f:3,c:53417},{f:7,c:53421},53430,53432,{f:6,c:53434},{f:2,c:53442},{f:3,c:53445},{f:6,c:53450},53458,{f:6,c:53462},{f:2,c:53470},{f:3,c:53473},{f:7,c:53477},53486,{f:6,c:53490},{f:20,c:53497},{f:34,c:53518},{f:2,c:53554},{f:3,c:53557},53561,{f:5,c:53563},53570,{f:6,c:53574},{f:2,c:53582},{f:3,c:53585},{f:7,c:53589},53598,53600,{f:6,c:53602},{f:3,c:53609},{f:15,c:53613},{f:7,c:53629},{f:3,
-c:53637},{f:23,c:53641},{f:2,c:53666},{f:3,c:53669},{f:7,c:53673},53682,53684,{f:4,c:53686},53691,{f:3,c:53693},{f:23,c:53697},{f:27,c:53721},{f:3,c:53749},{f:14,c:53753},53768,{f:6,c:53770},{f:27,c:53777},{f:2,c:53806},{f:3,c:53809},{f:7,c:53813},53822,53824,{f:6,c:53826},{f:19,c:53833},{f:7,c:53853},{f:27,c:53861},{f:2,c:53890},{f:3,c:53893},{f:7,c:53897},{f:3,c:53906},{f:6,c:53910},{f:3,c:53917},{f:3,c:53921},{f:7,c:53925},{f:4,c:53933},{f:6,c:53938},{f:2,c:53946},{f:2,c:53949},53953,{f:5,c:53955},
-53962,{f:8,c:53964},{f:3,c:53973},{f:3,c:53977},{f:7,c:53981},{f:10,c:53990},{f:2,c:54002},{f:3,c:54005},{f:7,c:54009},54018,54020,{f:6,c:54022},54031,{f:3,c:54033},54037,{f:5,c:54039},54046,{f:3,c:54050},{f:2,c:54054},{f:2,c:54058},{f:3,c:54061},{f:7,c:54065},54074,{f:6,c:54078},{f:54,c:54086},{f:2,c:54142},{f:3,c:54145},{f:7,c:54149},54158,{f:6,c:54162},{f:2,c:54170},{f:3,c:54173},{f:7,c:54177},54186,54188,{f:6,c:54190},{f:3,c:54197},{f:3,c:54201},{f:7,c:54205},{f:2,c:54214},{f:6,c:54218},{f:7,
-c:54225},{f:8,c:54233},54242,{f:8,c:54244},{f:2,c:54254},{f:3,c:54257},{f:7,c:54261},54270,54272,{f:6,c:54274},{f:20,c:54281},{f:34,c:54302},{f:3,c:54337},{f:23,c:54341},{f:3,c:54365},{f:3,c:54369},{f:8,c:54373},54382,{f:8,c:54384},{f:2,c:54394},{f:2,c:54397},54401,{f:5,c:54403},54410,54412,{f:6,c:54414},{f:20,c:54421},{f:34,c:54442},{f:3,c:54477},{f:3,c:54481},{f:7,c:54485},{f:2,c:54493},{f:8,c:54496},{f:3,c:54505},{f:3,c:54509},{f:7,c:54513},{f:2,c:54521},54524,{f:6,c:54526},{f:3,c:54533},{f:3,
-c:54537},{f:7,c:54541},54550,{f:36,c:54552},{f:2,c:54590},{f:3,c:54593},{f:7,c:54597},54606,54608,{f:6,c:54610},{f:2,c:54618},{f:3,c:54621},{f:4,c:54625},{f:2,c:54630},54634,54636,{f:6,c:54638},{f:2,c:54646},{f:3,c:54649},{f:7,c:54653},54662,{f:6,c:54666},{f:20,c:54673},{f:34,c:54694},{f:2,c:54730},{f:3,c:54733},54737,{f:5,c:54739},54746,54748,{f:6,c:54750},{f:2,c:54758},{f:3,c:54761},{f:7,c:54765},54774,54776,{f:6,c:54778},{f:2,c:54786},{f:3,c:54789},{f:7,c:54793},54802,{f:6,c:54806},{f:3,c:54813},
-{f:3,c:54817},{f:8,c:54821},{f:10,c:54830},{f:2,c:54842},{f:3,c:54845},{f:4,c:54849},{f:2,c:54854},54858,54860,{f:3,c:54862},{f:2,c:54866},{f:2,c:54870},{f:3,c:54873},{f:10,c:54877},54888,{f:6,c:54890},{f:2,c:54898},{f:14,c:54901},54916,{f:6,c:54918},{f:2,c:54926},{f:3,c:54929},{f:8,c:54933},54942,54944,{f:6,c:54946},{f:3,c:54953},{f:3,c:54957},{f:8,c:54961},54970,{f:8,c:54972},{f:2,c:54982},{f:3,c:54985},{f:4,c:54989},{f:2,c:54994},{f:2,c:54997},55E3,{f:6,c:55002},{f:3,c:55009},{f:3,c:55013},{f:7,
-c:55017},{f:4,c:55025},{f:6,c:55030},{f:2,c:55038},{f:3,c:55041},{f:12,c:55045},{f:6,c:55058},{f:2,c:55066},{f:3,c:55069},{f:7,c:55073},55082,55084,{f:6,c:55086},{f:2,c:55094},{f:3,c:55097},{f:7,c:55101},{f:2,c:55109},55112,{f:6,c:55114},{f:2,c:55122},55125,{f:6,c:55130},55138,55140,{f:3,c:55142},{f:2,c:55146},{f:3,c:55149},{f:3,c:55153},{f:7,c:55157},{f:3,c:55166},{f:6,c:55170},{f:2,c:55178},{f:3,c:55181},{f:7,c:55185},55194,55196,{f:6,c:55198}],"Adobe-CNS1":[{f:95,c:32},{s:3},12288,65292,{f:2,c:12289},
-65294,8226,65307,65306,65311,65281,65072,8230,8229,65104,65380,65106,183,{f:4,c:65108},65372,8211,65073,8212,{s:4},{f:2,c:65288},{f:2,c:65077},65371,65373,{f:2,c:65079},{f:2,c:12308},{f:2,c:65081},{f:2,c:12304},{f:2,c:65083},{f:2,c:12298},{f:2,c:65085},{f:2,c:12296},{f:2,c:65087},{f:2,c:12300},{f:2,c:65089},{f:2,c:12302},{f:2,c:65091},{f:6,c:65113},{f:2,c:8216},{f:2,c:8220},{f:2,c:12317},8245,8242,65283,65286,65290,8251,167,12291,9675,9679,9651,9650,9678,9734,9733,9671,9670,9633,9632,9661,9660,12963,
-8453,8254,0,65343,0,{f:2,c:65097},{f:2,c:65101},{f:2,c:65099},{f:3,c:65119},65291,65293,215,247,177,8730,65308,65310,65309,{f:2,c:8806},8800,8734,8786,8801,{f:5,c:65122},8764,{f:2,c:8745},8869,8736,8735,8895,13266,13265,8747,8750,8757,8756,9792,9794,9793,9737,8593,8595,8594,8592,{f:2,c:8598},8601,8600,8741,8739,0,0,65295,65340,65284,165,12306,{f:2,c:162},65285,65312,8451,8457,{f:3,c:65129},13269,{f:3,c:13212},13262,13217,{f:2,c:13198},13252,176,[20825,58834],[20827,58835],[20830,58837],[20829,58836],
-20833,20835,21991,[29929,58044],[31950,58191],{f:8,c:9601},9615,9614,9613,9612,9611,9610,9609,9532,9524,9516,9508,9500,9620,9472,9474,9621,9484,9488,9492,9496,{f:2,c:9581},9584,9583,9552,9566,9578,9569,{f:2,c:9698},9701,9700,{f:3,c:9585},{f:10,c:65296},{f:10,c:8544},{f:9,c:12321},0,[21316,57443],0,{f:26,c:65313},{f:26,c:65345},{f:17,c:913},{f:7,c:931},{f:17,c:945},{f:7,c:963},{f:37,c:12549},729,714,711,715,[9312,63153],[9313,63154],[9314,63155],[9315,63156],[9316,63157],[9317,63158],[9318,63159],
-[9319,63160],[9320,63161],[9321,63162],[9332,63163],[9333,63164],[9334,63165],[9335,63166],[9336,63167],[9337,63168],[9338,63169],[9339,63170],[9340,63171],[9341,63172],[8560,63173],[8561,63174],[8562,63175],[8563,63176],[8564,63177],[8565,63178],[8566,63179],[8567,63180],[8568,63181],[8569,63182],[12033,20008],[12034,20022,63183],[12035,20031,63184],[12037,20101,63185],[12039,20128,63186],[12044,20866,63187],[12045,20886,63188],[12046,20907,63189],[12051,21241,63190],[12054,21304,63191],[12057,21353,
-63192],[12059,21430,63193],[12065,12066,22786,22794,63194],[12071,23424,63195],[12078,24027,63196],[12083,24186,63197],[12084,24191,63198],[12085,24308],[12089,24400,63200],[12090,24417,63201],[12097,25908,63202],[12102,26080],[12135,30098,63204],[12136,30326],[12193,36789,63206],[12202,38582],{f:32,c:9216},9249,[12032,19968],[12036,20057],19969,19971,20035,20061,20102,[12038,20108],[12040,20154],[12041,20799],[12042,20837],[12043,20843],[12047,20960],[12049,20992],20993,[12050,21147],[12052,21269],
-[12055,21313],[12056,21340],[12060,21448],19977,19979,19976,19978,20011,20024,20961,20037,20040,20063,20062,20110,20129,[20800,64012],20995,21242,21315,21449,[12061,21475],[12063,22303],[12064,22763],[12067,22805],[12068,22823],[12069,22899],[12070,23376],23377,23379,[12072,23544],[12073,23567],[12074,23586],[12075,23608],[12077,23665],24029,[12079,24037],[12080,24049],{f:2,c:24050},[12081,24062],[12082,24178],[12086,24318],[12087,24331],[12088,24339],25165,19985,19984,19981,20013,20016,20025,20043,
-23609,20104,20113,20117,20114,20116,20130,20161,20160,20163,{f:2,c:20166},20173,{f:2,c:20170},20164,20803,20801,20839,{f:2,c:20845},20844,20887,20982,{f:3,c:20998},21243,{f:2,c:21246},21270,21305,21320,21319,21317,21342,21380,21451,21450,21453,22764,22825,22827,22826,22829,23380,23569,23588,23610,23663,24052,24187,24319,{f:2,c:24340},[12092,24515],[12093,25096],[12094,25142],[12095,25163],25166,[12096,25903],[12098,25991],[12099,26007],[12100,26020],[12101,26041],[12103,26085],[12104,26352],[12105,
-26376],[12106,26408],[12107,27424],[12108,27490],[12109,27513],[12111,27595],[12112,27604],[12113,27611],[12114,27663],[12116,27700],[12117,28779],[12118,29226],[12119,29238],[12120,29243],[12122,29255],[12123,29273],[12124,29275],[12125,29356],29579,19993,19990,19989,19988,19992,20027,20045,20047,20046,20197,20184,{f:4,c:20180},{f:2,c:20195},20185,20190,20805,20804,{f:2,c:20873},20908,{f:2,c:20985},20984,21002,21152,21151,[21253,57435],21254,21271,21277,20191,21322,21321,21345,21344,21359,21358,
-21435,21487,21476,21491,21484,21486,21481,21480,21500,21496,21493,21483,21478,21482,21490,21489,21488,21477,21485,21499,22235,22234,22806,22830,22833,22900,22902,23381,23427,23612,24040,24039,24038,{f:2,c:24066},24179,24188,24321,24344,24343,24517,25098,{f:2,c:25171},25170,25169,26021,26086,26414,26412,{f:2,c:26410},26413,27491,27597,27665,27664,27704,27713,27712,27710,29359,[12126,29572],[12127,29577],[12128,29916],[12129,29926],[12130,29976],[12131,29983],[12132,29992],29993,[12133,3E4],{f:3,c:30001},
-[12134,30091],[12137,30333],[12138,30382],[12139,30399],[12140,30446],[12141,30683],[12142,30690],[12143,30707],[12144,31034],[12146,31166],[12147,31348],[12148,31435],{f:2,c:19998},{f:2,c:20050},20073,20121,20132,20134,20133,20223,20233,20249,20234,20245,20237,{f:2,c:20240},20239,20210,20214,20219,20208,20211,20221,20225,20235,20809,20807,20806,20808,20840,20849,20877,20912,21015,{f:2,c:21009},21006,21014,21155,21256,21281,21280,{f:2,c:21360},21513,21519,21516,21514,21520,21505,21515,21508,21521,
-21517,21512,21507,21518,21510,21522,22240,22238,22237,22323,22320,22312,22317,22316,22319,22313,{f:2,c:22809},{f:2,c:22839},22916,22904,22915,22909,22905,22914,22913,{f:2,c:23383},{f:2,c:23431},23429,23433,23546,23574,23673,24030,24070,24182,24180,24335,24347,24537,24534,25102,{f:2,c:25100},25104,25187,25179,25176,25910,26089,26088,{f:2,c:26092},{f:2,c:26354},26377,26429,26420,26417,26421,27425,27492,27515,27670,27741,27735,27737,{f:2,c:27743},27728,27733,27745,27739,{f:2,c:27725},28784,29279,29277,
-30334,[12149,31481],[12150,31859],[12151,31992],[12152,32566],[12154,32650],[12155,32701],[12156,32769],32771,[12157,32780],[12158,32786],[12159,32819],[12160,32895],[12161,32905],{f:2,c:32907},[12162,33251],[12163,33258],[12164,33267],[12165,33276],[12166,33292],[12167,33307],[12168,33311],[12169,33390],[12170,33394],33406,[12173,34411],[12174,34880],[12175,34892],[12176,34915],35199,38433,20018,20136,20301,20303,20295,20311,20318,20276,20315,20309,20272,{f:2,c:20304},20285,20282,20280,20291,20308,
-20284,20294,20323,20316,20320,20271,20302,20278,20313,20317,20296,20314,20812,20811,20813,20853,{f:2,c:20918},21029,21028,{f:2,c:21033},21032,21163,{f:2,c:21161},21164,21283,21363,21365,21533,21549,21534,21566,21542,21582,21543,21574,21571,21555,21576,21570,21531,21545,21578,21561,21563,21560,21550,{f:2,c:21557},21536,21564,21568,21553,21547,21535,21548,22250,22256,22244,22251,22346,22353,22336,22349,22343,22350,22334,22352,22351,22331,22767,22846,22941,22930,22952,22942,22947,22937,22934,22925,22948,
-22931,22922,22949,23389,23388,{f:2,c:23386},23436,23435,23439,23596,{f:2,c:23616},23615,23614,{f:2,c:23696},23700,23692,24043,24076,24207,24199,24202,24311,24324,24351,24420,24418,24439,24441,24536,24524,24535,24525,24561,24555,24568,24554,25106,25105,25220,25239,25238,25216,25206,25225,25197,25226,25212,25214,25209,25203,25234,25199,25240,25198,25237,25235,25233,25222,25913,25915,25912,26097,26356,26463,{f:4,c:26446},26460,26454,[26462,57801],26441,26438,26464,26451,26455,27493,27599,27714,27742,
-27801,27777,{f:2,c:27784},27781,27803,27754,27770,27792,27760,27788,27752,27798,27794,27773,27779,27762,27774,27764,27782,27766,27789,27796,27800,27778,28790,{f:2,c:28796},28792,29282,29281,29280,29380,29378,29590,29996,29995,{f:2,c:30007},30338,30447,30691,31169,31168,31167,31350,31995,32597,32918,32915,32925,32920,32923,32922,32946,33391,33426,33419,33421,[12178,35211],[12179,35282],[12180,35328],[12181,35895],[12182,35910],[12183,35925],[12185,35997],[12186,36196],[12187,36208],[12188,36275],[12189,
-36523],[12190,36554],[12191,36763],[12192,36784],36802,36806,36805,36804,24033,[12194,37009],37026,37034,37030,37027,[12195,37193],[12196,37318],[12197,37324],38450,38446,38449,38442,38444,20006,20054,20083,20107,20123,20126,{f:2,c:20139},20335,20381,20365,20339,20351,20332,20379,20363,20358,20355,20336,20341,20360,20329,20347,20374,20350,20367,20369,20346,20820,20818,20821,20841,20855,20854,20856,20925,20989,21051,21048,21047,21050,21040,21038,21046,21057,21182,21179,21330,21332,21331,21329,21350,
-{f:3,c:21367},21462,21460,21463,21619,21621,21654,21624,21653,21632,21627,21623,21636,21650,21638,21628,21648,21617,21622,21644,21658,21602,21608,21643,21629,21646,22266,22403,22391,22378,22377,22369,22374,22372,22396,22812,22857,{f:2,c:22855},22852,22868,22974,22971,22996,22969,22958,22993,22982,22992,22989,22987,22995,22986,22959,22963,22994,22981,23391,23396,23395,23447,23450,23448,23452,23449,23451,23578,23624,{f:2,c:23621},23735,23713,23736,23721,23723,23729,23731,24088,24090,24086,24085,24091,
-24081,24184,24218,24215,24220,{f:2,c:24213},24310,{f:2,c:24358},24361,{f:2,c:24448},24447,24444,24541,24544,24573,24565,24575,24591,24596,24623,24629,24598,24618,24597,24609,24615,24617,24619,24603,25110,25109,25151,25150,25152,25215,25289,25292,25284,25279,25282,25273,25298,25307,25259,{f:2,c:25299},25291,25288,25256,25277,25276,[25296,60582],25305,25287,25293,25269,25306,25265,25304,{f:2,c:25302},25286,25260,[25294,61010],25918,26023,26044,26106,26132,26131,26124,26118,26114,26126,26112,26127,26133,
-26122,26119,26381,26379,26477,26507,26517,26481,26524,26483,26487,26503,26525,26519,{f:2,c:26479},26495,26505,26494,26512,26485,26522,26515,26492,26474,26482,27427,{f:2,c:27494},27519,27667,27675,27875,27880,27891,27825,27852,27877,27827,{f:2,c:27837},27836,27874,27819,27861,27859,27832,27844,27833,27841,27822,27863,27845,27889,27839,27835,27873,27867,27850,27820,27887,27868,27862,27872,28821,28814,28818,28810,28825,{f:2,c:29228},29240,29256,29287,29289,29376,29390,29401,29399,29392,29609,29608,29599,
-29611,29605,30013,30109,{f:2,c:30105},30340,30402,30450,30452,30693,30717,31038,{f:2,c:31040},31177,31176,31354,31353,31482,31998,32596,32652,32651,[32773,58236],32954,32933,32930,32945,32929,32939,32937,32948,32938,32943,33253,33278,33293,33459,33437,33433,33453,33469,33439,33465,33457,33452,33445,33455,33464,33443,33456,33470,33463,34382,34417,21021,34920,36555,36814,36820,36817,37045,37048,37041,37046,37319,[12198,37329],[12199,38263],[12200,38272],[12201,38428],38464,38463,38459,38468,38466,[12203,
-38585],[12204,38632],38738,[12206,38750],20127,{f:2,c:20141},20449,20405,20399,20415,20448,20433,20431,20445,20419,20406,20440,20447,20426,20439,20398,20432,20420,20418,20442,20430,20446,20407,20823,20882,20881,20896,21070,21059,21066,21069,21068,21067,21063,21191,21193,21187,21185,21261,21335,21371,21402,21467,21676,21696,21672,21710,21705,21688,21670,21683,21703,21698,21693,21674,21697,21700,21704,21679,21675,21681,21691,21673,21671,21695,22271,22402,22411,22432,22435,22434,22478,22446,22419,22869,
-22865,22863,22862,22864,23004,23E3,23039,23011,23016,23043,23013,23018,23002,23014,23041,23035,23401,23459,23462,23460,23458,23461,23553,{f:2,c:23630},23629,23627,23769,23762,24055,24093,24101,24095,24189,24224,24230,24314,24328,24365,24421,24456,24453,{f:2,c:24458},24455,24460,24457,24594,24605,24608,24613,24590,24616,24653,24688,24680,[24674,60712],24646,24643,24684,24683,24682,24676,25153,25308,25366,25353,25340,25325,25345,25326,25341,25351,25329,25335,25327,25324,25342,25332,25361,25346,25919,
-25925,26027,26045,26082,26149,26157,26144,26151,26159,26143,26152,26161,26148,26359,26623,26579,26609,26580,26576,26604,26550,26543,26613,26601,26607,26564,26577,26548,26586,26597,26552,26575,26590,26611,26544,26585,26594,26589,26578,27498,27523,27526,27573,27602,27607,27679,27849,27915,27954,27946,27969,27941,27916,27953,27934,27927,27963,{f:2,c:27965},27958,27931,27893,27961,27943,27960,27945,27950,27957,27918,27947,28843,28858,28851,28844,28847,28845,28856,28846,28836,29232,29298,29295,29300,29417,
-{f:2,c:29408},29623,29642,29627,29618,29645,29632,29619,29978,29997,30031,30028,30030,30027,30123,{f:2,c:30116},{f:2,c:30114},30328,{f:3,c:30342},30408,30406,30403,30405,30465,30457,30456,30473,30475,30462,30460,30471,30684,30722,30740,{f:2,c:30732},31046,31049,31048,31047,{f:2,c:31161},{f:2,c:31185},31179,31359,31361,31487,31485,31869,32002,32005,32E3,32009,32007,32004,32006,32568,32654,32703,32784,32781,32785,32822,32982,32997,32986,{f:2,c:32963},32972,32993,32987,32974,32990,32996,32989,33268,
-33314,33511,33539,33541,33507,33499,33510,33540,33509,33538,33545,33490,33495,33521,33537,33500,33492,33489,33502,33491,33503,33519,33542,34384,34425,34427,34426,34893,34923,35201,35284,35336,{f:2,c:35330},35998,36E3,36212,36211,36276,36557,36556,36848,36838,36834,36842,36837,36845,36843,36836,36840,37066,37070,37057,37059,37195,37194,37325,38274,38480,{f:3,c:38475},[12207,38754],[12208,38761],[12209,38859],[12210,38893],[12211,38899],[12212,38913],[12213,39080],[12214,39131],[12215,39135],[12216,
-39318],[12217,39321],20056,20147,{f:2,c:20492},20515,20463,20518,20517,20472,[20521,57375],20502,20486,20540,20511,20506,20498,20497,20474,20480,20500,20520,20465,20513,20491,20505,20504,20467,20462,20525,20522,20478,20523,20489,20860,{f:2,c:20900},20898,20941,20940,20934,20939,21078,21084,21076,21083,21085,21290,[21375,57459],21407,21405,21471,21736,21776,21761,21815,21756,21733,21746,21766,21754,21780,21737,21741,21729,21769,21742,21738,21734,21799,21767,21757,21775,{f:2,c:22275},22466,22484,22475,
-22467,22537,22799,{f:2,c:22871},22874,23057,23064,23068,23071,23067,23059,23020,23072,23075,23081,23077,23052,23049,23403,23640,23472,23475,23478,23476,23470,23477,23481,23480,23556,23633,23637,23632,23789,23805,23803,23786,23784,23792,23798,23809,23796,24046,24109,24107,24235,24237,24231,24369,24466,24465,24464,24665,24675,24677,24656,24661,24685,24681,24687,24708,24735,24730,24717,24724,24716,24709,24726,25159,25331,25352,25343,25422,25406,25391,25429,25410,25414,25423,25417,25402,25424,25405,{f:2,
-c:25386},25384,25421,25420,{f:2,c:25928},26009,26049,26053,26178,26185,26191,26179,26194,26188,26181,26177,26360,{f:2,c:26388},26391,26657,26680,26696,26694,26707,26681,26690,26708,26665,26803,26647,26700,26705,26685,26612,26704,26688,26684,26691,26666,26693,26643,26648,26689,27530,27529,27575,27683,{f:2,c:27687},27686,27684,27888,28010,28053,28040,28039,28006,28024,28023,27993,28051,28012,28041,28014,27994,28020,28009,28044,28042,28025,28037,28005,28052,28874,28888,28900,28889,28872,28879,29241,
-29305,29436,29433,29437,29432,29431,29574,29677,29705,29678,29664,29674,29662,30036,30045,30044,30042,30041,30142,30149,30151,{f:2,c:30130},30141,30140,30137,30146,30136,30347,30384,30410,{f:2,c:30413},30505,{f:2,c:30495},30504,30697,30768,30759,30776,30749,30772,30775,30757,30765,30752,30751,30770,31061,31056,31072,31071,31062,31070,31069,31063,31066,31204,[31203,60418],31207,31199,31206,31209,31192,31364,31368,31449,31494,31505,31881,32033,32023,32011,32010,32032,32034,32020,32016,32021,32026,32028,
-32013,32025,32027,32570,32607,32660,32709,32705,32774,32772,32792,32789,32793,32791,32829,32831,33009,33026,33008,33029,33005,33012,33030,33016,33011,33032,33021,33034,33020,33007,33261,33260,33280,33296,{f:2,c:33322},33320,33324,33467,33579,33618,33620,33610,33592,33616,33609,33589,33588,33615,33586,33593,33590,33559,33600,33585,33576,33603,34388,34442,34474,34451,34468,34473,34444,34467,34460,34928,34935,{f:2,c:34945},34941,34937,35352,35344,35342,35340,35349,35338,35351,35347,35350,35343,35345,
-35912,35962,35961,{f:2,c:36001},[36215,58442],36524,36562,36564,36559,36785,36865,36870,36855,36864,36858,36852,36867,36861,36869,36856,37013,37089,37085,37090,37202,37197,37196,37336,37341,37335,37340,37337,38275,{f:2,c:38498},38497,38491,38493,38500,38488,38494,38587,39138,[12218,39340],[12219,39592],[12220,39640],[12222,39717],[12224,39730],[12225,39740],20094,20602,[20605,57382],20572,20551,20547,20556,20570,20553,20581,20598,20558,20565,20597,20596,20599,20559,20495,20591,20589,20828,20885,20976,
-21098,21103,21202,21209,21208,21205,21264,21263,21273,{f:2,c:21311},21310,21443,26364,21830,21866,21862,21828,21854,21857,21827,21834,21809,21846,21839,21845,21807,21860,21816,21806,21852,21804,21859,21811,21825,21847,22280,22283,22281,22495,22533,22538,22534,22496,22500,22522,22530,22581,22519,22521,22816,22882,23094,23105,23113,23142,23146,23104,23100,23138,23130,23110,23114,23408,23495,23493,23492,23490,23487,23494,23561,23560,23559,23648,{f:2,c:23644},23815,23814,23822,23835,23830,23842,23825,
-23849,23828,23833,23844,23847,23831,24034,24120,24118,24115,24119,{f:2,c:24247},24246,24245,24254,24373,24375,24407,24428,24425,24427,24471,24473,24478,24472,24481,24480,24476,24703,24739,24713,24736,24744,24779,24756,24806,24765,24773,24763,24757,24796,24764,24792,24789,24774,24799,24760,24794,24775,{f:2,c:25114},25160,25504,25511,25458,25494,25506,25509,25463,25447,25496,25514,25457,25513,25481,25475,25499,25451,25512,25476,25480,25497,25505,25516,25490,25487,25472,25467,25449,25448,25466,25949,
-25942,25937,25945,25943,21855,25935,25944,25941,25940,26012,26011,26028,26063,{f:2,c:26059},26062,26205,26202,26212,26216,26214,26206,26361,21207,26395,26753,26799,26786,26771,26805,26751,26742,26801,26791,26775,26800,26755,26820,26797,26758,26757,26772,26781,26792,26783,26785,26754,27442,27578,{f:2,c:27627},27691,28046,28092,28147,28121,28082,28129,28108,28132,28155,28154,28165,28103,28107,28079,28113,28078,28126,28153,28088,28151,28149,28101,28114,28186,28085,28122,28139,28120,28138,28145,28142,
-28136,28102,28100,28074,28140,28095,28134,28921,{f:2,c:28937},28925,28911,29245,29309,29313,29468,29467,29462,29459,29465,29575,29701,29706,29699,29702,29694,29709,29920,{f:2,c:29942},29980,29986,{f:2,c:30053},30050,30064,30095,{f:2,c:30164},30133,30154,30157,30350,30420,30418,30427,30519,30526,30524,30518,30520,30522,30827,30787,30798,31077,31080,31085,31227,31378,31381,31520,31528,31515,31532,31526,31513,31518,31534,31890,31895,31893,32070,32067,32113,32046,32057,32060,32064,32048,32051,32068,32047,
-32066,32050,32049,32573,32670,32666,32716,32718,32722,32796,32842,32838,33071,33046,33059,33067,33065,33072,33060,33282,33333,33335,33334,33337,33678,33694,33688,33656,33698,33686,33725,33707,33682,33674,33683,33673,33696,33655,{f:2,c:33659},33670,33703,34389,24426,34503,34496,34486,34500,34485,34502,34507,34481,34479,34505,34899,34974,34952,34987,34962,34966,34957,34955,35219,35215,35370,35357,35363,35365,35377,35373,35359,35355,35362,35913,35930,36009,36012,36011,36008,36010,36007,36199,36198,36286,
-36282,36571,36575,36889,36877,36890,36887,36899,36895,36893,36880,36885,36894,36896,36879,36898,36886,36891,36884,37096,37101,[37117,58488],37207,37326,37365,37350,37347,37351,37357,37353,38281,38506,38517,38515,38520,38512,38516,{f:2,c:38518},38508,38592,38634,38633,31456,31455,{f:2,c:38914},[12226,39770],[12227,40165],[12228,40565],[12229,40575],[12230,40613],[12231,40635],20642,20621,20613,20633,20625,20608,20630,20632,20634,26368,20977,21106,{f:2,c:21108},21097,21214,21213,21211,21338,21413,21883,
-21888,21927,21884,21898,21917,21912,21890,21916,21930,21908,21895,21899,21891,21939,21934,21919,21822,21938,21914,21947,21932,21937,21886,21897,21931,21913,22285,22575,22570,22580,22564,{f:2,c:22576},22561,22557,22560,{f:2,c:22777},22880,[23159,57587],23194,23167,23186,23195,23207,23411,23409,23506,23500,23507,23504,{f:2,c:23562},23601,23884,23888,23860,23879,24061,24133,24125,24128,24131,24190,24266,{f:2,c:24257},24260,24380,24429,{f:2,c:24489},24488,24785,24801,24754,24758,24800,24860,24867,24826,
-24853,24816,24827,24820,24936,24817,24846,24822,24841,24832,24850,25119,25161,25507,25484,25551,25536,25577,25545,25542,25549,25554,25571,25552,25569,25558,{f:2,c:25581},25462,25588,25578,25563,25682,25562,25593,25950,25958,{f:2,c:25954},26001,26E3,26031,26222,26224,[26228,57786],26230,26223,26257,26234,26238,26231,{f:2,c:26366},26399,26397,26874,26837,26848,26840,26839,26885,26847,26869,26862,26855,26873,26834,26866,26851,26827,26829,26893,26898,26894,26825,26842,26990,26875,27454,27450,27453,27544,
-27542,27580,27631,{f:2,c:27694},27692,[28207,57904],28216,28244,28193,28210,28263,28234,28192,28197,28195,28187,28251,28248,28196,28246,28270,28205,28198,28271,28212,28237,28218,28204,28227,[28189,57901],28222,28363,28297,28185,28238,28259,28228,28274,28265,28255,{f:2,c:28953},28966,28976,28961,28982,[29038,57958],28956,29260,29316,29312,29494,29477,29492,29481,29754,29738,29747,29730,29733,{f:2,c:29749},29748,29743,29723,29734,29736,{f:2,c:29989},30059,30058,30178,30171,30179,30169,30168,30174,30176,
-{f:2,c:30331},30358,30355,30388,30428,30543,30701,30813,30828,30831,31245,31240,31243,31237,31232,31384,31383,31382,31461,31459,31561,31574,31558,31568,31570,31572,31565,31563,31567,[31569,60510],31903,31909,32094,32080,32104,32085,32043,32110,32114,32097,32102,32098,32112,32115,21892,{f:2,c:32724},32779,32850,32901,33109,33108,33099,33105,33102,33081,33094,33086,33100,33107,33140,33298,33308,33769,33795,33784,33805,33760,33733,33803,[33729,58309],33775,33777,33780,33879,33802,33776,33804,33740,33789,
-33778,33738,33848,33806,33796,33756,33799,33748,33759,34395,34527,34521,34541,34516,34523,34532,34512,34526,34903,{f:2,c:35009},34993,35203,35222,35387,35424,35413,35422,35388,35393,35412,35419,35408,35398,35380,35386,35382,35414,35937,35970,36015,36028,36019,36029,36033,36027,36032,36020,36023,36022,36031,36024,36234,36229,36225,36302,36317,36299,36314,36305,36300,36315,36294,36603,36600,36604,36764,36910,36917,36913,36920,36914,36918,37122,37109,37129,37118,37219,37221,37327,{f:2,c:37396},37411,
-37385,37406,37389,37392,37383,37393,38292,38287,38283,38289,38291,38290,38286,38538,38542,38539,38525,{f:2,c:38533},38541,38514,38532,38593,38597,38596,{f:2,c:38598},38639,38642,38860,{f:2,c:38917},38920,39143,39146,39151,39145,39154,39149,39342,39341,[12232,40643],[12233,40653],[12234,40657],20098,20653,20661,{f:2,c:20658},20677,20670,20652,20663,20667,20655,20679,21119,21111,21117,21215,21222,21220,{f:2,c:21218},21295,21983,21992,21971,21990,21966,21980,21959,21969,{f:2,c:21987},21999,21978,21985,
-{f:2,c:21957},21989,21961,{f:2,c:22290},22622,22609,22616,22615,22618,22612,22635,22604,22637,22602,22626,22610,22603,22887,23233,23241,23244,23230,23229,23228,23219,23234,23218,23913,23919,24140,24185,24265,24264,24338,24409,24492,24494,24858,24847,24904,24863,24819,24859,24825,24833,24840,24910,24908,24900,24909,24894,24884,24871,24845,24838,24887,{f:2,c:25121},25619,25662,25630,25642,25645,25661,25644,25615,25628,25620,25613,25654,{f:2,c:25622},25606,25964,26015,26032,26263,26249,{f:2,c:26247},
-26262,26244,26264,26253,26371,27028,26989,26970,26999,26976,26964,26997,26928,27010,26954,26984,26987,26974,26963,27001,27014,26973,26979,26971,27463,27506,27584,27583,27603,27645,28322,28335,28371,28342,28354,28304,28317,28359,28357,28325,28312,28348,28346,28331,28369,28310,28316,28356,28372,28330,28327,28340,29006,29017,29033,29028,29001,29031,29020,29036,29030,29004,29029,29022,28998,29032,29014,29242,29266,29495,29509,29503,29502,29807,29786,29781,29791,29790,29761,29759,29785,29787,[29788,58019],
-30070,30072,30208,30192,30209,30194,30193,30202,30207,30196,30195,{f:2,c:30430},30555,30571,30566,30558,30563,30585,30570,30572,30556,30565,30568,30562,30702,30862,30896,{f:2,c:30871},30860,30857,30844,30865,30867,30847,31098,31103,31105,33836,31165,31260,31258,31264,31252,31263,31262,{f:2,c:31391},31607,31680,31584,31598,31591,31921,31923,31925,32147,32121,32145,32129,32143,32091,32622,{f:2,c:32617},32626,32681,32680,32676,32854,32856,32902,32900,33137,33136,33144,33125,33134,33139,33131,{f:2,c:33145},
-33126,33285,33351,33922,33911,33853,33841,33909,33894,33899,33865,33900,33883,33852,33845,33889,33891,33897,33901,33862,34398,34396,34399,34553,34579,34568,34567,34560,34558,34555,{f:2,c:34562},34566,34570,34905,35039,35028,35033,35036,35032,35037,35041,35018,35029,35026,35228,35299,35435,{f:2,c:35442},35430,35433,35440,35463,35452,35427,35488,35441,35461,35437,35426,35438,35436,35449,35451,35390,35432,35938,35978,35977,36042,{f:2,c:36039},36036,36018,36035,36034,36037,36321,36319,36328,36335,36339,
-36346,36330,36324,36326,36530,36611,36617,36606,36618,36767,36786,36939,36938,36947,36930,36948,36924,36949,36944,36935,36943,36942,36941,36945,36926,36929,37138,37143,37228,37226,37225,37321,37431,37463,37432,37437,37440,37438,37467,37451,37476,37457,37428,37449,37453,37445,37433,37439,37466,38296,38552,{f:2,c:38548},38605,38603,{f:2,c:38601},38647,38651,38649,38646,38742,38772,38774,{f:2,c:38928},38931,38922,38930,38924,39164,39156,{f:2,c:39165},39347,39345,39348,39649,40169,40578,[12237,40718],
-[12238,40723],[12239,40736],20711,20718,20709,20694,[20717,60903],20698,20693,20687,20689,20721,20686,20713,20834,20979,21123,21122,21297,21421,22014,22016,22043,22039,22013,22036,22022,22025,{f:2,c:22029},22007,22038,22047,22024,22032,22006,22296,22294,22645,22654,22659,22675,22666,22649,22661,22653,22781,22821,22818,22820,22890,22889,23265,23270,23273,23255,23254,23256,23267,23413,23518,23527,23521,{f:2,c:23525},23528,23522,23524,23519,23565,23650,23940,23943,24155,24163,24149,24151,24148,24275,
-24278,24330,24390,24432,24505,24903,24895,24907,24951,{f:2,c:24930},24927,24922,24920,24949,25130,25735,25688,25684,25764,25720,25695,25722,25681,25703,25652,25709,25723,25970,26017,26071,26070,26274,26280,26269,27036,27048,27029,27073,27054,27091,27083,27035,27063,27067,27051,27060,27088,27085,27053,27084,27046,27075,27043,27465,27468,27699,28467,28436,28414,28435,28404,28457,28478,28448,28460,28431,28418,28450,28415,28399,28422,28465,28472,28466,28451,28437,28459,28463,28552,28458,28396,28417,28402,
-28364,28407,29076,29081,29053,29066,29060,29074,29246,29330,29334,29508,29520,29796,29795,29802,29808,29805,29956,30097,30247,30221,30219,30217,30227,30433,30435,30596,30589,30591,30561,30913,30879,30887,30899,30889,30883,{f:2,c:31118},31117,31278,31281,31402,31401,31469,31471,31649,31637,31627,31605,31639,31645,31636,31631,[31672,58170],31623,31620,31929,{f:2,c:31933},32187,32176,32156,{f:2,c:32189},32160,32202,32180,32178,32177,32186,32162,32191,32181,32184,32173,[32210,58202],32199,32172,32624,
-{f:2,c:32736},32735,32862,32858,32903,33104,33152,33167,33160,33162,33151,33154,33255,33274,33287,33300,33310,33355,33993,33983,33990,33988,33945,33950,33970,33948,33995,33976,33984,34003,33936,33980,34001,33994,34623,34588,34619,34594,34597,34612,34584,34645,34615,34601,35059,35074,35060,35065,35064,35069,35048,35098,35055,35494,35468,35486,35491,35469,35489,35475,35492,35498,35493,35496,35480,35473,35482,35495,35946,35981,35980,36051,{f:2,c:36049},36203,36249,36245,36348,36628,36626,36629,36627,
-36771,36960,36952,36956,36963,36953,36958,36962,36957,36955,37145,37144,37150,37237,37240,37239,37236,37496,37548,37504,37509,37528,37526,37499,37523,37532,37544,37500,37521,38305,{f:2,c:38312},38307,38309,38308,38553,38556,38555,38604,38610,38656,38780,38789,38902,{f:2,c:38935},39087,39089,39171,39173,39180,39177,39361,{f:2,c:39599},39654,{f:2,c:39745},40180,40182,40179,40636,[12240,40763],[12241,40778],20740,20736,20731,20725,20729,20738,{f:2,c:20744},20741,20956,{f:3,c:21127},21133,21130,21232,
-21426,22062,22075,22073,22066,22079,22068,22057,22099,22094,22103,22132,22070,{f:2,c:22063},22656,22687,22686,22707,22684,22702,22697,22694,22893,23305,23291,23307,23285,23308,23304,23534,23532,23529,23531,{f:2,c:23652},23965,23956,24162,24159,24161,24290,24282,24287,24285,24291,24288,24392,24433,24503,24501,24950,24935,24942,24925,24917,24962,24956,24944,24939,24958,24999,24976,25003,24974,25004,24986,24996,24980,25006,25134,25705,25711,25721,25758,25778,25736,[25744,57745],25776,25765,25747,25749,
-25769,25746,25774,25773,25771,25754,25772,25753,25762,25779,25973,{f:2,c:25975},26286,26283,26292,26289,27171,27167,27112,27137,27166,27161,27133,27169,27155,27146,27123,27138,27141,27117,27153,27472,27470,27556,{f:2,c:27589},28479,28540,28548,28497,28518,28500,28550,28525,28507,28536,28526,28558,28538,28528,28516,28567,28504,28373,28527,28512,28511,29087,29100,29105,29096,29270,29339,29518,29527,29801,29835,29827,29822,29824,30079,30240,30249,30239,30244,30246,{f:2,c:30241},30362,30394,30436,30606,
-30599,30604,30609,30603,30923,30917,30906,30922,30910,30933,30908,30928,31295,31292,31296,31293,31287,31291,31407,31406,31661,31665,31684,31668,{f:2,c:31686},31681,31648,31692,31946,32224,32244,32239,32251,32216,32236,32221,32232,32227,32218,32222,32233,32158,32217,32242,32249,32629,32631,32687,32745,32806,{f:3,c:33179},33184,33178,33176,34071,34109,34074,34030,{f:2,c:34092},34067,34065,34083,34081,34068,34028,34085,34047,34054,34690,34676,34678,34656,34662,34680,34664,34649,34647,34636,34643,34907,
-34909,35088,35079,{f:2,c:35090},35093,35082,35516,35538,35527,35524,35477,35531,35576,35506,35529,35522,35519,35504,35542,35533,35510,35513,35547,35916,35918,35948,36064,36062,36070,36068,{f:2,c:36076},{f:2,c:36066},36060,36074,36065,36205,36255,36259,36395,36368,36381,36386,36367,36393,36383,36385,36382,36538,36637,36635,36639,36649,36646,36650,36636,36638,36645,36969,36974,36968,36973,36983,37168,37165,37159,37169,37255,37257,37259,37251,37573,37563,37559,37610,37604,37569,37555,37564,37586,37575,
-37616,37554,38317,38321,38660,{f:2,c:38662},38665,38752,38797,38795,38799,38945,38955,38940,39091,39178,39187,39186,39192,39389,39376,39391,39387,39377,39381,39378,39385,39607,{f:2,c:39662},39719,39749,39748,39799,39791,40198,40201,40195,40617,40638,40654,22696,[12242,40786],20754,20760,20756,20752,20757,20864,20906,20957,21137,21139,21235,22105,22123,22137,22121,22116,22136,22122,22120,22117,22129,22127,22124,22114,22134,22721,22718,22727,22725,22894,23325,23348,23416,23536,23566,24394,25010,24977,
-25001,24970,25037,25014,25022,25034,25032,25136,25797,25793,25803,{f:2,c:25787},25818,25796,25799,25794,25805,25791,25810,25812,25790,25972,26310,26313,26297,26308,26311,26296,27197,27192,27194,27225,27243,27224,27193,27204,27234,27233,27211,27207,27189,27231,27208,27481,27511,27653,28610,28593,28577,28611,28580,28609,28583,28595,28608,28601,[28598,60318],28582,28576,28596,29118,29129,29136,29138,29128,29141,29113,29134,29145,29148,{f:2,c:29123},29544,29852,29859,29848,29855,29854,29922,{f:2,c:29964},
-30260,30264,30266,30439,30437,30624,{f:2,c:30622},30629,30952,30938,30956,30951,31142,{f:2,c:31309},31302,31308,31307,31418,31705,31761,31689,31716,31707,31713,31721,31718,{f:2,c:31957},32266,32273,32264,32283,32291,32286,[32285,58211],32265,32272,32633,32690,{f:2,c:32752},32750,[32808,58239],33203,33193,33192,33275,33288,{f:2,c:33368},34122,34137,34120,{f:2,c:34152},34115,34121,34157,34154,34142,34691,34719,34718,34722,34701,34913,35114,35122,35109,35115,35105,35242,[35238,58391],35558,35578,35563,
-35569,35584,35548,35559,35566,35582,{f:2,c:35585},35575,35565,35571,35574,35580,35947,35949,35987,36084,36420,36401,36404,36418,36409,36405,36667,36655,36664,36659,36776,36774,36981,36980,36984,36978,36988,36986,37172,37266,37664,37686,37624,37683,37679,37666,37628,37675,37636,37658,37648,37670,37665,37653,37678,37657,38331,{f:2,c:38567},38570,38613,38670,38673,38678,38669,38675,38671,38747,[38748,58565],38758,38808,38960,38968,38971,38967,38957,38969,38948,39184,39208,39198,39195,39201,39194,39405,
-39394,39409,39608,39612,39675,39661,39720,39825,40213,40227,40230,40232,40210,40219,40664,40660,[12243,40845],[12244,40860],20778,20767,20769,20786,21237,22158,22144,22160,22149,22151,22159,22741,22739,22737,22734,23344,23338,23332,23418,23607,23656,23996,23994,23997,23992,24171,24396,24509,25033,25026,25031,25062,25035,25138,25140,25806,25802,25816,25824,25840,25830,25836,25841,25826,25837,{f:2,c:25986},26329,26326,27264,27284,27268,27298,27292,27355,27299,27262,27287,27280,27296,27484,27566,27610,
-27656,28632,28657,{f:2,c:28639},28635,28644,28651,28655,28544,28652,28641,28649,28629,28654,28656,29159,[29151,60361],29166,29158,29157,29165,29164,29172,29152,29237,29254,29552,29554,29865,29872,29862,29864,30278,30274,30284,30442,30643,30634,30640,30636,30631,30637,30703,30967,30970,30964,30959,30977,31143,31146,31319,31423,31751,31757,31742,31735,31756,31712,31968,31964,31966,31970,31967,31961,31965,32302,32318,32326,32311,32306,32323,32299,32317,32305,32325,32321,32308,32313,32328,32309,32319,
-32303,32580,32755,32764,{f:2,c:32881},32880,32879,32883,33222,33219,33210,33218,33216,33215,33213,33225,33214,33256,33289,33393,34218,34180,34174,34204,34193,34196,34223,34203,34183,34216,34186,34214,34407,34752,34769,34739,34770,34758,34731,34747,34746,34760,34763,35131,35126,35140,35128,35133,35244,35598,35607,35609,35611,35594,35616,35613,35588,35600,35905,35903,35955,36090,36093,36092,36088,36091,36264,36425,36427,36424,36426,36676,36670,36674,36677,36671,36991,36989,36996,{f:2,c:36993},36992,
-37177,37283,37278,37276,37709,37762,37672,37749,37706,37733,37707,37656,37758,37740,37723,37744,37722,37716,{f:3,c:38346},38344,38342,38577,38584,38614,38684,38686,38816,38867,38982,39094,39221,39425,39423,39854,39851,39850,39853,40251,40255,40587,40655,40670,{f:2,c:40668},40667,40766,40779,21474,22165,22190,22745,22744,23352,24413,25059,25139,25844,25842,25854,25862,{f:2,c:25850},25847,26039,26332,26406,27315,27308,27331,27323,27320,27330,{f:2,c:27310},27487,27512,27567,28681,28683,28670,28678,28666,
-28689,28687,{f:2,c:29179},29182,29176,29559,29557,29863,29887,29973,30294,30296,30290,30653,30655,{f:2,c:30651},30990,31150,{f:2,c:31329},31328,{f:2,c:31428},31787,31783,31786,31774,31779,31777,31975,{f:2,c:32340},32350,32346,32353,32338,32345,32584,32761,32763,32887,32886,33229,33231,33290,34255,34217,34253,34256,34249,34224,34234,34233,34799,34796,34802,34784,35206,35250,35316,35624,35641,35628,35627,35920,36101,36441,36451,36454,36452,36447,36437,36544,36681,36685,36999,36995,37E3,{f:2,c:37291},
-37328,37780,37770,37782,37794,37811,37806,37804,37808,37784,37786,37783,38356,38358,38352,38357,38626,38620,38617,38619,38622,38692,38819,38822,38829,38905,38989,38991,38988,38990,38995,39098,{f:2,c:39230},39229,39214,39333,39438,39617,39683,39686,39759,39758,39757,39882,39881,39933,39880,39872,40273,40285,40288,40672,40725,40748,20787,22181,22184,{f:2,c:22750},22754,23541,40848,24300,25074,25079,25078,25077,25856,25871,26336,26333,27365,27357,27354,27347,28699,28703,28712,28698,28701,28693,28696,
-29190,29197,29272,29346,29560,29562,29885,29898,29923,30087,30086,30303,30305,30663,31001,31153,31339,31337,{f:2,c:31806},31800,31805,31799,31808,32363,32365,32377,{f:2,c:32361},32371,32645,32694,32697,32696,33240,34281,34269,34282,34261,{f:2,c:34276},34295,34811,34821,34829,34809,34814,35168,35167,35158,35166,35649,35676,35672,35657,35674,{f:2,c:35662},35654,35673,36104,36106,36476,36466,36487,36470,36460,36474,36468,36692,36686,36781,{f:2,c:37002},37297,37294,37857,37841,37855,37827,37832,{f:2,
-c:37852},37846,37858,37837,37848,37860,37847,37864,38364,38580,38627,38698,38695,38753,38876,38907,39006,39E3,39003,39100,39237,39241,39446,39449,39693,39912,39911,39894,39899,40329,40289,40306,40298,40300,40594,40599,40595,40628,21240,22199,22198,22196,22204,22756,23360,23363,23421,23542,24009,25080,25082,25880,25876,25881,26342,26407,27372,28734,28720,28722,29200,29563,29903,30306,30309,31014,31018,31020,31019,31431,31478,31820,31811,31821,{f:2,c:31983},36782,32381,32380,32386,32588,32768,33242,
-33382,34299,34297,34321,34298,34310,34315,34311,34314,{f:2,c:34836},35172,35258,35320,35696,35692,35686,35695,35679,35691,36111,36109,36489,36481,36485,36482,37300,37323,37912,37891,37885,38369,38704,39108,39250,39249,39336,39467,39472,39479,39477,39955,39949,40569,40629,40680,40751,40799,40803,40801,{f:2,c:20791},22209,22208,22210,22804,23660,24013,25084,25086,25885,25884,26005,26345,27387,27396,27386,27570,28748,29211,29351,29910,29908,30313,30675,31824,32399,32396,32700,34327,34349,34330,34851,
-34850,34849,34847,35178,35180,35261,35700,35703,35709,36115,36490,36493,36491,36703,36783,37306,37934,37939,37941,37946,37944,37938,37931,38370,{f:2,c:38712},38706,[38911,58586],39015,39013,39255,39493,39491,39488,39486,39631,39764,39761,39981,39973,40367,40372,40386,40376,40605,40687,40729,40796,{f:2,c:40806},20796,20795,22216,22218,22217,23423,24020,24018,24398,25087,25892,27402,27489,28753,28760,29568,29924,30090,30318,30316,31155,31840,31839,32894,32893,33247,35186,35183,35324,35712,{f:2,c:36118},
-36497,36499,36705,37192,37956,{f:2,c:37969},{f:2,c:38717},38851,38849,39019,39253,39509,39501,39634,39706,40009,39985,39998,39995,40403,40407,40756,40812,40810,40852,22220,24022,25088,25891,25899,25898,26348,27408,29914,31434,31844,31843,31845,32403,32406,32404,33250,34360,34367,34865,35722,37008,37007,37987,37984,37988,38760,39023,39260,{f:2,c:39514},39511,{f:2,c:39635},39633,40020,40023,40022,40421,40607,40692,22225,22761,25900,28766,{f:2,c:30321},[30679,60226],32592,32648,34870,34873,34914,35731,
-35730,35734,33399,36123,37312,37994,38722,38728,38724,38854,39024,39519,39714,39768,40031,{f:2,c:40441},{f:2,c:40572},40711,40823,40818,24307,27414,28771,31852,31854,34875,35264,36513,37313,38002,38E3,39025,39262,39638,39715,40652,28772,30682,35738,38007,38857,39522,39525,32412,35740,36522,37317,{f:2,c:38013},38012,{f:2,c:40055},40695,35924,38015,40474,29224,39530,39729,40475,40478,31858,20034,20060,[12048,20981],[12053,21274],[12058,21378],19975,19980,20039,20109,[12062,22231],[12076,23662],[12091,
-24435],19983,20871,19982,20014,20115,20162,20169,20168,20888,21244,21356,21433,22304,22787,22828,[23568,60417],24063,26081,[12110,27571],27596,[12115,27668],[12121,29247],20017,20028,20200,20188,20201,20193,20189,20186,21004,21001,21276,21324,{f:2,c:22306},22807,22831,23425,23428,23570,23611,23668,23667,24068,24192,24194,24521,25097,25168,27669,27702,27715,27711,27707,29358,29360,29578,[12145,31160],32906,38430,20238,20248,20268,20213,20244,20209,20224,20215,20232,20253,20226,20229,20258,20243,20228,
-20212,20242,20913,21011,21008,21158,21282,21279,21325,21386,21511,22241,22239,22318,22314,22324,22844,22912,22908,22917,22907,22910,22903,22911,23382,23573,23589,23676,{f:2,c:23674},23678,24031,[24181,57646],24196,24322,24346,24436,24533,24532,24527,25180,25182,25188,25185,25190,25186,25177,25184,25178,25189,25911,26095,26094,26430,26425,26424,26427,26426,26431,26428,26419,27672,27718,27730,27740,27727,[27722,60796],27732,{f:2,c:27723},28785,29278,{f:2,c:29364},29582,29994,30335,31349,[12153,32593],
-[12171,33400],33404,33408,33405,33407,[12172,34381],[12177,35198],37017,[37015,59347],37016,37019,37012,38434,38436,38432,38435,20310,20283,20322,20297,20307,20324,20286,20327,20306,20319,20289,20312,20269,20275,20287,20321,20879,20921,21020,21022,21025,{f:2,c:21165},21257,21347,21362,{f:2,c:21390},21552,21559,21546,21588,21573,21529,21532,21541,21528,21565,21583,21569,21544,21540,21575,22254,22247,22245,22337,22341,22348,22345,22347,22354,22790,22848,22950,22936,22944,22935,22926,22946,22928,22927,
-22951,22945,23438,23442,23592,23594,23693,23695,23688,23691,23689,23698,23690,23686,23699,23701,24032,24074,24078,24203,24201,24204,24200,24205,24325,24349,24440,24438,24530,24529,24528,24557,24552,24558,24563,24545,24548,24547,24570,24559,24567,24571,24576,24564,25146,25219,25228,{f:2,c:25230},25236,25223,25201,25211,25210,25200,25217,25224,25207,25213,25202,25204,26096,26100,26099,26098,26101,26437,26439,26457,26453,26444,26440,26461,26445,26458,26443,27600,{f:2,c:27673},27768,27751,27755,27780,
-27787,27791,27761,27759,27753,27802,27757,27783,27797,[27804,57900],27750,27763,27749,27771,27790,28788,28794,29283,29375,29373,29379,29382,29377,29370,29381,29589,29591,{f:2,c:29587},29586,30010,30009,{f:2,c:30100},30337,31037,32820,32917,32921,32912,32914,32924,33424,33423,33413,33422,33425,33427,33418,{f:2,c:33411},[12184,35960],36809,36799,37023,37025,37029,37022,37031,37024,38448,38440,38447,38445,20019,20376,20348,20357,20349,20352,20359,20342,20340,20361,20356,20343,20300,20375,20330,20378,
-20345,20353,20344,20368,20380,20372,20382,20370,20354,20373,20331,20334,20894,20924,20926,21045,{f:2,c:21042},21062,21041,21180,{f:2,c:21258},21308,21394,21396,21639,21631,21633,21649,21634,21640,21611,21626,21630,21605,21612,21620,21606,21645,21615,21601,21600,21656,21603,21607,21604,22263,22265,22383,22386,22381,22379,22385,22384,22390,22400,22389,22395,{f:2,c:22387},22370,22376,22397,22796,22853,22965,22970,22991,22990,22962,22988,22977,22966,22972,22979,22998,22961,22973,22976,22984,22964,22983,
-23394,23397,23443,23445,23620,23623,23726,23716,23712,23733,23727,23720,23724,23711,23715,23725,23714,23722,23719,23709,23717,23734,23728,23718,24087,24084,24089,24360,{f:3,c:24354},24404,24450,24446,24445,24542,24549,24621,24614,24601,24626,24587,24628,24586,24599,24627,24602,24606,24620,24610,24589,24592,24622,24595,24593,24588,24585,24604,25108,25149,25261,25268,25297,25278,25258,25270,25290,25262,25267,25263,25275,25257,25264,25272,25917,26024,26043,26121,26108,26116,26130,26120,26107,26115,26123,
-26125,26117,26109,26129,26128,26358,26378,26501,26476,26510,26514,26486,26491,26520,26502,26500,26484,26509,26508,26490,26527,26513,26521,26499,26493,26497,{f:2,c:26488},26516,27429,27520,27518,27614,27677,27795,27884,27883,27886,27865,27830,27860,27821,27879,27831,27856,27842,27834,27843,27846,27885,27890,27858,27869,27828,27786,27805,27776,27870,27840,27952,27853,27847,27824,27897,27855,27881,27857,28820,28824,28805,28819,28806,28804,28817,28822,28802,28826,28803,29290,29398,29387,29400,29385,29404,
-29394,29396,29402,29388,29393,29604,29601,29613,29606,29602,29600,29612,29597,29917,29928,{f:2,c:30015},30014,30092,30104,30383,30451,30449,30448,30453,30712,30716,30713,30715,30714,30711,31042,31039,31173,31352,31355,31483,31861,31997,32821,32911,32942,32931,32952,32949,32941,33312,33440,33472,33451,33434,33432,33435,33461,33447,33454,33468,33438,33466,33460,33448,33441,33449,33474,33444,33475,33462,33442,34416,34415,{f:2,c:34413},35926,36818,36811,36819,36813,36822,36821,36823,37042,37044,37039,
-37043,37040,38457,38461,38460,38458,38467,20429,20421,20435,20402,20425,20427,20417,20436,20444,20441,[20411,60346],20403,20443,20423,20438,20410,20416,20409,20460,21060,21065,21184,21186,21309,21372,21399,21398,21401,21400,21690,21665,21677,21669,21711,21699,33549,21687,21678,21718,21686,{f:2,c:21701},21664,21616,21692,21666,21694,21618,21726,21680,22453,{f:2,c:22430},22436,22412,22423,22429,22427,22420,22424,22415,22425,22437,22426,22421,22772,22797,22867,23009,23006,23022,23040,23025,23005,23034,
-23037,23036,23030,23012,23026,23031,23003,23017,23027,23029,23008,23038,23028,23021,23464,23628,23760,23768,23756,23767,23755,23771,23774,23770,23753,23751,23754,23766,{f:2,c:23763},23759,23752,23750,23758,23775,23800,24057,{f:3,c:24097},24096,24100,24240,24228,24226,24219,24227,24229,24327,24366,24406,24454,24631,24633,24660,24690,24670,24645,24659,24647,24649,24667,24652,24640,24642,24671,24612,24644,24664,24678,24686,{f:2,c:25154},25295,25357,25355,25333,25358,25347,25323,25337,25359,25356,25336,
-25334,25344,{f:2,c:25363},25338,25365,25339,25328,25921,25923,26026,26047,26166,26145,26162,26165,26140,26150,26146,26163,26155,26170,26141,26164,26169,26158,{f:2,c:26383},26561,26610,26568,26554,26588,26555,26616,26584,26560,26551,26565,26603,26596,26591,26549,26573,26547,26615,26614,26606,26595,26562,26553,26574,26599,26608,26546,26620,26566,26605,26572,26542,26598,26587,26618,{f:2,c:26569},26563,26602,26571,27432,27522,27524,27574,27606,27608,27616,{f:2,c:27680},27944,27956,27949,27935,27964,27967,
-27922,27914,27866,27955,27908,27929,27962,27930,27921,27904,27933,27970,27905,27928,27959,27907,27919,27968,27911,27936,27948,27912,27938,27913,27920,28855,28831,28862,28849,28848,28833,{f:2,c:28852},28841,29249,{f:2,c:29257},29292,29296,29299,29294,29386,29412,29416,29419,29407,29418,29414,29411,29573,29644,29634,29640,29637,29625,29622,29621,29620,29675,29631,29639,29630,29635,29638,29624,29643,29932,29934,29998,{f:2,c:30023},30119,30122,30329,30404,30472,{f:3,c:30467},30474,30455,30459,30458,{f:2,
-c:30695},30726,{f:2,c:30737},30725,30736,30735,30734,[30729,58095],30723,30739,31050,31052,31051,31045,31044,31189,31181,31183,31190,31182,31360,31358,31441,{f:2,c:31488},31866,{f:2,c:31864},{f:3,c:31871},32003,32008,32001,32600,32657,32653,32702,32775,{f:2,c:32782},32788,32823,32984,32967,32992,32977,32968,32962,32976,32965,32995,32985,32988,32970,32981,32969,32975,32983,32998,32973,33279,33313,33428,33497,33534,33529,33543,33512,33536,33493,33594,33515,33494,33524,33516,33505,33522,33525,33548,
-33531,33526,33520,33514,33508,33504,33530,33523,33517,34423,34420,34428,34419,34881,34894,34919,34922,34921,35283,35332,35335,36210,36835,36833,36846,36832,37105,37053,37055,37077,37061,37054,37063,37067,37064,[37332,60294],37331,38484,38479,38481,38483,38474,38478,20510,20485,20487,20499,20514,20528,20507,20469,20468,20531,20535,20524,{f:2,c:20470},20503,20508,20512,20519,20533,20527,20529,20494,20826,20884,20883,20938,{f:2,c:20932},20936,20942,21089,21082,21074,{f:2,c:21086},21077,21090,21197,21262,
-21406,21798,21730,21783,21778,21735,21747,21732,21786,21759,21764,21768,21739,21777,21765,21745,21770,21755,{f:2,c:21751},21728,21774,21763,21771,{f:2,c:22273},22476,22578,22485,22482,22458,22470,22461,22460,22456,22454,22463,22471,22480,22457,22465,22798,22858,23065,23062,{f:2,c:23085},23061,23055,23063,23050,23070,23091,23404,23463,23469,23468,23555,23638,23636,23788,23807,23790,23793,23799,23808,23801,24105,24104,24232,24238,24234,24236,24371,24368,24423,24669,24666,24679,24641,24738,24712,24704,
-24722,24705,24733,24707,24725,24731,24727,24711,24732,24718,25113,25158,25330,25360,25430,25388,{f:2,c:25412},25398,25411,25572,25401,25419,25418,25404,25385,25409,25396,25432,25428,25433,25389,25415,25395,25434,25425,25400,25431,25408,25416,25930,25926,26054,{f:2,c:26051},26050,26186,26207,26183,26193,{f:2,c:26386},26655,26650,26697,{f:2,c:26674},26683,26699,26703,26646,26673,26652,26677,26667,26669,26671,26702,26692,26676,26653,26642,26644,26662,26664,26670,26701,26682,26661,26656,27436,27439,27437,
-27441,27444,27501,32898,27528,27622,27620,27624,27619,27618,27623,27685,28026,{f:2,c:28003},28022,27917,28001,28050,27992,28002,28013,28015,28049,28045,28143,28031,28038,27998,[28007,59078],28E3,28055,28016,28028,27999,28034,28056,27951,28008,28043,28030,28032,28036,27926,28035,28027,28029,28021,28048,28892,28883,28881,28893,28875,32569,28898,28887,28882,28894,28896,28884,28877,{f:3,c:28869},28890,28878,28897,29250,29304,29303,29302,29440,29434,29428,29438,29430,29427,29435,29441,29651,29657,29669,
-29654,29628,29671,29667,29673,29660,29650,29659,29652,29661,29658,{f:2,c:29655},29672,{f:2,c:29918},{f:2,c:29940},29985,30043,30047,30128,30145,30139,30148,30144,30143,30134,30138,30346,30409,30493,30491,30480,30483,30482,30499,30481,30485,{f:2,c:30489},30498,30503,30755,30764,30754,30773,30767,30760,30766,30763,30753,30761,30771,30762,30769,31060,31067,31055,31068,31059,31058,31057,{f:2,c:31211},31200,31214,31213,31210,31196,31198,31197,31366,31369,31365,{f:2,c:31371},31370,31367,31448,31504,31492,
-31507,31493,31503,31496,31498,31502,31497,31506,31876,31889,31882,31884,31880,31885,31877,32030,32029,32017,32014,32024,32022,32019,32031,32018,32015,32012,32604,32609,32606,32608,32605,32603,32662,32658,32707,32706,32704,32790,32830,32825,33018,33010,33017,33013,33025,33019,33024,33281,33327,33317,33587,33581,33604,33561,33617,33573,33622,33599,33601,33574,33564,33570,33602,33614,33563,33578,33544,33596,33613,33558,33572,33568,33591,33583,33577,33607,33605,33612,33619,33566,33580,33611,33575,33608,
-34387,34386,34466,34472,34454,34445,34449,34462,34439,34455,34438,34443,34458,34437,34469,34457,34465,34471,34453,34456,34446,34461,34448,34452,{f:2,c:34883},34925,{f:2,c:34933},34930,34944,34929,34943,34927,34947,34942,34932,34940,35346,35911,35927,35963,36004,36003,36214,36216,36277,36279,36278,36561,36563,36862,36853,36866,36863,36859,36868,36860,36854,37078,37088,{f:2,c:37081},37091,37087,37093,37080,37083,37079,37084,37092,37200,{f:2,c:37198},37333,37346,37338,38492,38495,38588,39139,[12221,
-39647],[12223,39727],20095,20592,20586,20577,20574,20576,20563,20555,20573,20594,20552,20557,20545,20571,20554,20578,20501,20549,20575,20585,20587,{f:2,c:20579},20550,20544,20590,20595,20567,20561,20944,21099,21101,21100,21102,21206,21203,21293,21404,{f:2,c:21877},21820,21837,21840,21812,21802,21841,21858,21814,21813,21808,21842,21829,21772,21810,21861,21838,21817,21832,21805,21819,21824,21835,22282,22279,22523,22548,22498,22518,22492,22516,22528,22509,22525,22536,22520,22539,22515,22479,22535,22510,
-22499,22514,22501,22508,22497,22542,22524,22544,22503,22529,22540,22513,22505,22512,22541,22532,22876,23136,23128,23125,[23143,60437],23134,23096,23093,23149,23120,23135,23141,23148,23123,23140,23127,23107,23133,23122,23108,23131,23112,23182,23102,23117,23097,23116,23152,23145,23111,23121,23126,23106,23132,23410,23406,23489,23488,23641,23838,23819,23837,23834,23840,23820,23848,23821,23846,23845,23823,23856,23826,23843,23839,23854,24126,24116,24241,24244,24249,{f:2,c:24242},24374,24376,24475,24470,
-24479,24714,24720,24710,24766,24752,24762,{f:2,c:24787},24783,24804,24793,24797,24776,24753,24795,24759,24778,24767,24771,24781,24768,25394,25445,25482,25474,25469,25533,25502,25517,25501,25495,25515,25486,25455,25479,25488,25454,25519,25461,25500,25453,25518,25468,25508,25403,25503,25464,25477,25473,25489,25485,25456,25939,26061,26213,26209,26203,26201,26204,26210,26392,26745,26759,26768,26780,{f:2,c:26733},26798,26795,26966,26735,26787,26796,26793,26741,26740,26802,26767,26743,26770,26748,26731,
-26738,26794,26752,26737,26750,26779,26774,26763,26784,26761,26788,26744,26747,26769,26764,26762,26749,27446,27443,{f:2,c:27447},27537,27535,{f:2,c:27533},27532,27690,28096,28075,28084,28083,28276,28076,28137,28130,28087,28150,28116,28160,28104,28128,28127,28118,28094,28133,{f:2,c:28124},28123,28148,28106,28093,28141,28144,28090,28117,28098,28111,28105,28112,28146,28115,28157,28119,28109,28131,28091,28922,28941,28919,28951,28916,28940,28912,28932,28915,28944,28924,28927,28934,28947,28928,28920,28918,
-28939,28930,28942,29310,{f:2,c:29307},29311,29469,29463,29447,29457,29464,29450,29448,29439,29455,29470,29576,29686,29688,29685,29700,29697,29693,29703,29696,29690,29692,29695,29708,29707,29684,29704,30052,30051,30158,30162,30159,{f:2,c:30155},30161,30160,30351,30345,30419,30521,30511,30509,{f:2,c:30513},30516,30515,30525,30501,30523,30517,30792,30802,30793,30797,30794,30796,30758,30789,30800,31076,31079,{f:2,c:31081},31075,31083,31073,31163,31226,31224,{f:2,c:31222},31375,31380,31376,31541,31547,
-31540,31525,31536,31522,31524,31539,31512,31530,31517,31537,31531,31533,31535,31538,31544,31514,31523,31892,31896,31894,31907,32053,32061,32056,32054,32058,32069,32044,32041,32065,32071,{f:2,c:32062},32074,32059,32040,32611,32661,{f:2,c:32668},32667,{f:2,c:32714},32717,{f:2,c:32720},32711,32719,32713,32799,32798,32795,32839,32835,32840,33048,33061,33049,33051,33069,33055,33068,33054,33057,33045,33063,33053,33058,33297,33336,33331,33338,33332,33330,33396,33680,33699,33704,33677,33658,33651,33700,33652,
-33679,33665,33685,33689,33653,33684,33705,33661,33667,33676,33693,33691,33706,33675,33662,33701,33711,33672,33687,33712,33663,33702,33671,33710,33654,34393,34390,34495,34487,34498,34497,34501,34490,34480,34504,34489,34483,34488,34508,34484,{f:2,c:34491},34499,{f:2,c:34493},34898,34953,34965,34984,34978,34986,34970,34961,34977,34975,34968,34983,34969,34971,34967,34980,34988,34956,34963,34958,35202,35286,35289,35285,35376,35367,35372,35358,35897,35899,{f:2,c:35932},35965,36005,36221,36219,36217,36284,
-36290,36281,36287,36289,36568,36574,36573,36572,36567,{f:2,c:36576},36900,36875,36881,36892,36876,36897,37103,37098,37104,37108,{f:2,c:37106},37076,{f:2,c:37099},37097,37206,37208,37210,37203,37205,37356,37364,37361,37363,37368,37348,37369,{f:2,c:37354},37367,37352,37358,38266,38278,38280,38524,38509,38507,38513,38511,38591,38762,38916,39141,39319,20635,20629,20628,20638,20619,20643,20611,20620,20622,20637,20584,20636,20626,20610,20615,20831,20948,21266,21265,21412,21415,21905,21928,21925,21933,21879,
-22085,21922,21907,21896,21903,21941,21889,21923,21906,21924,21885,21900,21926,21887,21909,21921,21902,22284,22569,22583,22553,22558,22567,22563,22568,22517,22600,22565,22556,22555,22579,22591,22582,22574,22585,22584,22573,22572,22587,22881,23215,23188,23199,23162,23202,23198,23160,23206,23164,23205,23212,23189,23214,23095,23172,23178,23191,23171,23179,23209,23163,23165,23180,23196,23183,23187,23197,23530,23501,23499,23508,23505,23498,23502,23564,23600,23863,23875,23915,23873,23883,23871,23861,23889,
-23886,23893,23859,23866,23890,23869,23857,23897,23874,23865,23881,23864,23868,23858,23862,23872,23877,24132,24129,[24408,57673],24486,24485,24491,24777,24761,24780,24802,24782,24772,24852,24818,24842,24854,24837,24821,24851,24824,24828,24830,24769,24835,24856,24861,24848,24831,24836,24843,25162,25492,25521,25520,25550,25573,25576,25583,25539,25757,25587,25546,25568,25590,25557,25586,25589,25697,25567,25534,25565,25564,25540,25560,25555,25538,25543,25548,25547,25544,25584,25559,25561,25906,25959,25962,
-25956,25948,25960,25957,25996,{f:2,c:26013},26030,26064,26066,26236,26220,26235,26240,26225,26233,26218,26226,26369,26892,26835,26884,26844,26922,26860,26858,26865,26895,26838,26871,26859,26852,26870,26899,26896,26867,26849,26887,26828,26888,26992,26804,26897,26863,26822,26900,26872,26832,26877,26876,26856,26891,26890,26903,26830,26824,{f:2,c:26845},26854,26868,26833,26886,26836,26857,26901,26917,26823,27449,27451,27455,27452,27540,27543,27545,27541,27581,27632,{f:2,c:27634},27696,28156,{f:2,c:28230},
-28191,28233,28296,{f:2,c:28220},28229,28258,28203,28223,28225,28253,28275,28188,28211,28235,28224,28241,28219,28163,28206,28254,28264,28252,28257,28209,28200,28256,28273,28267,28217,28194,28208,28243,28261,28199,28280,28260,28279,28245,28281,28242,28262,{f:2,c:28213},28250,28960,28958,28975,28923,28974,28977,28963,28965,28962,28978,28959,28968,28986,28955,29259,29274,{f:2,c:29320},29318,29317,29323,29458,29451,29488,29474,29489,29491,29479,29490,29485,29478,29475,29493,29452,29742,29740,29744,29739,
-29718,29722,29729,29741,29745,29732,29731,29725,29737,29728,29746,29947,29999,30063,30060,30183,30170,30177,30182,30173,30175,30180,30167,30357,30354,30426,{f:2,c:30534},30532,30541,30533,30538,30542,{f:2,c:30539},30686,30700,30816,{f:2,c:30820},30812,30829,30833,30826,30830,30832,30825,30824,30814,30818,31092,31091,31090,31088,31234,31242,31235,31244,31236,31385,31462,31460,31562,31559,31556,31560,31564,31566,31552,31576,31557,31906,31902,31912,31905,32088,32111,32099,32083,32086,32103,32106,32079,
-32109,32092,32107,32082,32084,32105,32081,32095,32078,{f:2,c:32574},{f:2,c:32613},32674,{f:2,c:32672},32727,32849,{f:2,c:32847},33022,32980,33091,33098,33106,33103,33095,33085,33101,33082,33254,33262,{f:3,c:33271},33284,{f:2,c:33340},33343,33397,33595,[33743,60382],33785,33827,33728,33768,33810,33767,33764,33788,33782,33808,33734,33736,33771,33763,33727,33793,33757,33765,33752,33791,33761,33739,33742,33750,33781,33737,33801,[33807,58332],33758,33809,33798,33730,33779,33749,33786,33735,33745,33770,
-33811,33690,33731,33772,33774,33732,33787,33751,33762,33819,33755,33790,34520,34530,34534,34515,34531,34522,34538,34525,34539,34524,34540,34537,34519,34536,34513,34888,34902,34901,35002,35031,35001,35E3,35008,35006,34998,35004,34999,35005,34994,35073,35017,35221,35224,35223,35293,{f:2,c:35290},35406,35405,35385,35417,35392,{f:2,c:35415},{f:2,c:35396},35410,35400,35409,35402,35404,35407,35935,35969,35968,36026,36030,36016,36025,36021,36228,36224,36233,36312,36307,36301,36295,36310,36316,36303,36309,
-36313,36296,36311,36293,36591,36599,36602,36601,36582,36590,36581,36597,{f:2,c:36583},36598,36587,36593,36588,36596,36585,36909,36916,36911,37126,37164,[37124,60367],37119,37116,37128,37113,37115,37121,37120,37127,37125,37123,37217,37220,37215,37218,37216,37377,37386,37413,37379,37402,37414,37391,37388,37376,37394,37375,37373,37382,37380,37415,37378,37404,37412,37401,37399,37381,37398,38267,38285,38284,38288,38535,38526,{f:2,c:38536},38531,38528,38594,38600,38595,38641,38640,38764,38768,38766,38919,
-39081,39147,40166,[12235,40697],{f:2,c:20099},20150,20669,20671,20678,20654,20676,20682,20660,20680,20674,20656,20673,20666,20657,20683,20681,20662,20664,20951,21114,21112,{f:2,c:21115},21955,21979,21964,21968,21963,21962,21981,[21952,64013],21972,21956,21993,21951,21970,21901,21967,21973,21986,21974,21960,22002,21965,21977,21954,22292,22611,22632,22628,22607,22605,22601,22639,22613,22606,22621,22617,22629,22619,22589,22627,22641,22780,23239,23236,23243,23226,23224,23217,23221,23216,23231,23240,23227,
-23238,23223,23232,23242,23220,23222,23245,23225,23184,23510,{f:2,c:23512},23583,23603,23921,23907,23882,23909,23922,23916,23902,23912,23911,23906,24048,24143,24142,24138,24141,24139,24261,24268,24262,24267,24263,24384,24495,24493,24823,{f:2,c:24905},24875,24901,24886,24882,24878,24902,24879,24911,24873,24896,25120,37224,25123,25125,25124,25541,25585,25579,25616,25618,25609,25632,25636,25651,25667,25631,25621,25624,25657,25655,{f:2,c:25634},25612,25638,25648,25640,25665,25653,25647,25610,25626,25664,
-25637,25639,25611,25575,25627,25646,25633,25614,25967,26002,26067,26246,26252,26261,26256,26251,26250,26265,26260,26232,26400,26982,26975,26936,26958,26978,26993,26943,26949,26986,26937,26946,26967,26969,27002,{f:2,c:26952},26933,26988,26931,26941,26981,26864,27E3,26932,26985,26944,26991,26948,26998,26968,26945,26996,26956,26939,26955,26935,26972,26959,26961,26930,26962,26927,27003,26940,27462,27461,27459,27458,27464,27457,27547,{f:2,c:27643},27641,{f:2,c:27639},28315,28374,28360,28303,28352,28319,
-{f:2,c:28307},28320,28337,28345,28358,28370,28349,28353,28318,28361,28343,28336,28365,28326,28367,28338,28350,28355,28380,28376,28313,28306,28302,28301,28324,28321,28351,28339,28368,28362,28311,28334,28323,28999,29012,29010,29027,29024,28993,29021,[29026,61080],29042,29048,29034,29025,28994,29016,28995,29003,29040,29023,29008,29011,28996,29005,29018,29263,29325,29324,29329,29328,29326,29500,29506,29499,29498,29504,29514,29513,29764,{f:2,c:29770},29778,29777,29783,29760,{f:2,c:29775},29774,29762,29766,
-29773,29780,29921,29951,29950,29949,29981,30073,30071,27011,30191,30223,30211,30199,30206,30204,[30201,60782],30200,30224,30203,30198,30189,30197,30205,30361,30389,30429,30549,{f:2,c:30559},30546,30550,30554,30569,30567,30548,30553,30573,30688,30855,30874,30868,30863,30852,30869,{f:2,c:30853},30881,30851,30841,30873,30848,30870,30843,31100,31106,31101,31097,31249,{f:2,c:31256},31250,31255,31253,31266,31251,31259,31248,31395,31394,31390,31467,31590,31588,31597,31604,31593,31602,31589,31603,31601,31600,
-31585,31608,31606,31587,31922,31924,31919,32136,32134,32128,32141,32127,32133,32122,32142,32123,32131,32124,32140,32148,32132,32125,32146,32621,32619,{f:2,c:32615},32620,32678,32677,32679,{f:2,c:32731},32801,33124,33120,33143,33116,33129,33115,33122,33138,26401,33118,33142,33127,33135,33092,33121,33309,33353,33348,33344,33346,33349,34033,33855,33878,33910,33913,33935,33933,33893,33873,33856,33926,33895,33840,33869,33917,33882,33881,33908,33907,33885,34055,33886,33847,33850,33844,33914,33859,33912,
-33842,33861,33833,33753,33867,33839,33858,33837,33887,33904,33849,33870,33868,33874,33903,33989,33934,33851,33863,33846,33843,33896,33918,33860,33835,33888,33876,33902,33872,34571,34564,34551,34572,34554,34518,34549,34637,34552,34574,34569,34561,34550,34573,34565,35030,35019,{f:2,c:35021},35038,35035,35034,35020,35024,35205,35227,35295,35301,35300,35297,35296,35298,35292,35302,35446,35462,35455,35425,35391,35447,35458,35460,35445,35459,35457,35444,35450,35900,35915,35914,35941,35940,35942,35974,{f:2,
-c:35972},36044,{f:2,c:36200},36241,36236,{f:2,c:36238},36237,{f:2,c:36243},36240,36242,36336,36320,36332,36337,36334,36304,36329,36323,36322,36327,36338,36331,36340,36614,36607,36609,36608,36613,{f:2,c:36615},36610,[36619,60507],36946,36927,36932,36937,36925,37136,37133,37135,37137,37142,37140,37131,37134,{f:2,c:37230},37448,37458,37424,37434,37478,37427,37477,37470,37507,37422,37450,37446,37485,37484,37455,37472,37479,37487,37430,37473,37488,37425,37460,37475,37456,37490,37454,37459,37452,37462,
-37426,38303,38300,38302,38299,{f:2,c:38546},38545,38551,38606,38650,38653,38648,38645,38771,{f:2,c:38775},38770,38927,{f:2,c:38925},39084,39158,39161,39343,39346,39344,39349,39597,39595,39771,40170,40173,40167,40576,[12236,40701],20710,20692,20695,20712,20723,20699,20714,20701,20708,20691,20716,20720,20719,20707,20704,20952,{f:2,c:21120},21225,21227,21296,21420,22055,22037,22028,22034,22012,22031,22044,22017,22035,22018,22010,22045,22020,22015,22009,22665,22652,22672,22680,22662,22657,22655,22644,
-22667,22650,22663,22673,22670,22646,22658,22664,22651,22676,22671,22782,22891,23260,23278,23269,23253,23274,23258,23277,23275,23283,23266,23264,23259,23276,23262,23261,23257,23272,23263,23415,23520,23523,23651,23938,23936,23933,23942,23930,23937,23927,23946,23945,23944,23934,23932,23949,23929,23935,{f:2,c:24152},24147,24280,24273,24279,24270,24284,24277,24281,24274,24276,24388,24387,24431,24502,24876,24872,24897,24926,24945,24947,{f:2,c:24914},24946,24940,24960,24948,24916,24954,24923,24933,24891,
-24938,24929,24918,25129,25127,25131,25643,25677,25691,25693,25716,25718,{f:2,c:25714},25725,25717,25702,25766,25678,25730,25694,25692,25675,25683,25696,25680,25727,25663,25708,25707,25689,25701,25719,25971,26016,26273,26272,26271,26373,26372,26402,27057,27062,27081,27040,27086,27030,27056,27052,27068,27025,27033,27022,27047,27021,27049,27070,27055,27071,27076,27069,27044,27092,27065,27082,27034,27087,27059,27027,27050,27041,27038,27097,27031,27024,27074,27061,27045,27078,27466,27469,27467,{f:3,c:27550},
-{f:2,c:27587},27646,28366,28405,28401,28419,28453,28408,28471,28411,28462,28425,28494,{f:2,c:28441},28455,28440,28475,28434,28397,28426,28470,28531,28409,28398,28461,28480,28464,28476,28469,28395,28423,28430,28483,28421,28413,28406,28473,28444,28412,28474,28447,28429,28446,28424,28449,29063,29072,29065,29056,29061,29058,29071,29051,29062,29057,29079,29252,29267,29335,29333,29331,29507,29517,29521,29516,29794,29811,29809,29813,29810,29799,29806,29952,{f:2,c:29954},30077,30096,30230,30216,30220,30229,
-30225,30218,30228,30392,30593,30588,30597,30594,30574,30592,30575,30590,30595,30898,30890,30900,30893,30888,30846,30891,30878,30885,30880,30892,30882,30884,31128,{f:2,c:31114},31126,31125,31124,31123,31127,31112,31122,31120,31275,31306,31280,31279,31272,31270,31400,{f:2,c:31403},31470,31624,31644,31626,31633,31632,31638,31629,31628,31643,31630,31621,31640,21124,31641,31652,31618,31931,31935,31932,31930,32167,32183,32194,32163,32170,32193,32192,32197,32157,32206,32196,32198,{f:2,c:32203},32175,32185,
-32150,32188,32159,32166,32174,32169,32161,32201,32627,{f:2,c:32738},32741,32734,32804,32861,32860,33161,33158,33155,33159,33165,33164,33163,33301,33943,33956,33953,33951,33978,33998,33986,33964,33966,33963,33977,33972,33985,33997,33962,33946,33969,34E3,33949,33959,33979,33954,33940,33991,33996,33947,33961,33967,[33960,58327],34006,33944,33974,33999,33952,34007,34004,34002,34011,33968,33937,34401,34611,34595,34600,34667,34624,34606,34590,34593,34585,34587,34627,34604,34625,34622,34630,34592,34610,
-34602,34605,34620,34578,34618,34609,34613,34626,{f:2,c:34598},34616,34596,34586,34608,34577,35063,35047,{f:2,c:35057},35066,35070,35054,35068,35062,35067,35056,35052,35051,35229,35233,35231,35230,35305,35307,35304,35499,35481,35467,35474,35471,35478,35901,{f:2,c:35944},36053,36047,36055,36246,36361,36354,36351,36365,36349,36362,36355,36359,36358,36357,36350,36352,36356,{f:2,c:36624},36622,36621,37155,37148,37152,37154,37151,37149,37146,37156,37153,37147,37242,37234,37241,37235,37541,37540,37494,37531,
-37498,37536,37524,37546,37517,37542,37530,37547,37497,37527,37503,37539,37614,37518,37506,37525,37538,37501,37512,37537,37514,37510,37516,37529,37543,37502,37511,37545,37533,37515,37421,38558,38561,38655,38744,38781,38778,38782,38787,38784,38786,38779,38788,38785,38783,38862,38861,38934,{f:2,c:39085},39170,39168,39175,39325,39324,39363,39353,39355,39354,39362,39357,39367,39601,39651,39655,{f:2,c:39742},{f:2,c:39776},39775,{f:2,c:40177},40181,40615,20735,20739,20784,20728,{f:2,c:20742},20726,20734,
-{f:2,c:20747},20733,20746,{f:2,c:21131},21233,21231,22088,22082,22092,22069,22081,22090,22089,22086,22104,22106,22080,22067,22077,22060,22078,22072,22058,22074,22298,22699,22685,22705,22688,22691,22703,22700,22693,22689,22783,23295,23284,23293,23287,23286,23299,23288,23298,23289,23297,23303,23301,23311,23655,23961,23959,23967,23954,23970,23955,23957,23968,23964,23969,23962,23966,24169,24157,24160,24156,32243,24283,24286,24289,24393,24498,24971,24963,24953,25009,25008,24994,24969,24987,24979,25007,
-25005,24991,24978,25002,24993,24973,24934,25011,25133,25710,25712,25750,25760,25733,25751,25756,25743,25739,25738,25740,25763,25759,25704,25777,25752,25974,25978,25977,25979,{f:2,c:26034},26293,26288,26281,26290,26295,26282,26287,27136,27142,27159,27109,27128,27157,27121,27108,27168,27135,27116,27106,27163,27165,27134,27175,27122,27118,27156,27127,27111,27200,27144,27110,27131,27149,27132,27115,27145,27140,27160,27173,27151,27126,27174,27143,27124,27158,27473,27557,27555,27554,27558,27649,27648,27647,
-27650,28481,28454,28542,28551,28614,28562,28557,28553,28556,28514,28495,28549,28506,28566,28534,28524,28546,28501,28530,28498,28496,28503,28564,28563,28509,28416,28513,28523,28541,28519,28560,28499,28555,28521,28543,28565,28515,28535,28522,28539,29106,29103,29083,29104,29088,29082,29097,29109,29085,29093,29086,29092,29089,29098,29084,29095,29107,29336,29338,29528,29522,{f:3,c:29534},29533,29531,29537,29530,29529,29538,29831,{f:2,c:29833},29830,29825,29821,29829,29832,29820,[29817,58868],29960,29959,
-30078,30245,30238,30233,30237,30236,30243,30234,30248,30235,{f:3,c:30364},30363,30605,30607,30601,30600,30925,30907,30927,30924,30929,30926,30932,30920,{f:2,c:30915},30921,31130,31137,31136,31132,31138,[31131,59175],27510,31289,31410,31412,31411,31671,31691,31678,31660,31694,31663,31673,31690,31669,31941,31944,31948,31947,32247,32219,32234,32231,32215,32225,32259,32250,32230,32246,32241,32240,32238,32223,32630,32684,32688,32685,32749,32747,32746,32748,32742,32744,32868,32871,33187,33183,33182,33173,
-33186,33177,33175,33302,33359,33363,33362,33360,33358,33361,34084,34107,34063,34048,34089,34062,34057,34061,34079,34058,34087,34076,34043,34091,34042,34056,34060,34036,34090,34034,34069,34039,34027,34035,34044,34066,34026,34025,34070,34046,34088,34077,34094,34050,34045,34078,34038,34097,34086,{f:2,c:34023},34032,34031,34041,34072,34080,34096,34059,34073,34095,34402,34646,{f:2,c:34659},34679,34785,34675,34648,34644,34651,34642,34657,34650,34641,34654,34669,34666,34640,34638,34655,34653,34671,34668,
-34682,34670,34652,34661,34639,34683,34677,34658,34663,34665,34906,35077,35084,35092,35083,{f:3,c:35095},35078,35094,35089,35086,35081,35234,35236,35235,35309,35312,35308,35535,35526,35512,35539,35537,{f:2,c:35540},35515,35543,35518,35520,35525,35544,35523,35514,35517,35545,35902,35917,35983,36069,36063,36057,36072,36058,36061,36071,36256,36252,36257,36251,36384,36387,36389,36388,36398,36373,36379,36374,36369,36377,{f:2,c:36390},36372,36370,36376,36371,36380,36375,36378,36652,36644,36632,36634,36640,
-36643,{f:2,c:36630},36979,36976,36975,36967,36971,37167,37163,{f:2,c:37161},37170,37158,37166,{f:2,c:37253},37258,{f:2,c:37249},37252,37248,37584,{f:2,c:37571},37568,37593,37558,37583,37617,37599,37592,37609,37591,37597,37580,37615,37570,37608,37578,37576,37582,37606,37581,37589,37577,37600,37598,37607,37585,37587,37557,37601,37669,37574,37556,38268,38316,38315,38318,38320,38564,38562,38611,38661,38664,38658,38746,38794,38798,38792,38864,38863,38942,38941,38950,38953,38952,38944,38939,38951,39090,
-39176,39162,39185,39188,{f:2,c:39190},39189,39388,39373,39375,{f:2,c:39379},39374,39369,[39382,60270],39384,39371,39383,39372,39603,39660,39659,39667,39666,39665,39750,39747,39783,39796,39793,39782,39798,39797,39792,39784,39780,39788,40188,40186,40189,40191,40183,40199,40192,40185,40187,40200,40197,40196,40579,40659,{f:2,c:40719},20764,20755,20759,20762,20753,20958,21300,21473,22128,22112,22126,22131,22118,22115,22125,22130,22110,22135,22300,22299,22728,22717,22729,22719,22714,22722,22716,22726,23319,
-23321,23323,23329,23316,23315,23312,23318,[23336,59539],23322,23328,23326,23535,23980,23985,23977,23975,23989,23984,23982,23978,23976,23986,23981,23983,23988,{f:2,c:24167},24166,24175,24297,24295,24294,24296,24293,24395,24508,24507,24989,25E3,24982,25029,25012,25030,25025,25036,25018,25023,25016,24972,25815,25814,25808,25807,25801,25789,25737,25795,25819,25843,25817,25907,25983,25980,26018,26312,26302,26304,{f:2,c:26314},26319,26301,26299,26298,26316,26403,27188,27238,27209,27239,27186,27240,27198,
-27229,27245,27254,27227,27217,27176,27226,27195,27199,27201,27242,27236,27216,27215,27220,27247,27241,27232,27196,27230,27222,27221,{f:2,c:27213},27206,27477,27476,27478,27559,{f:2,c:27562},27592,27591,27652,27651,27654,28589,28619,28579,28615,28604,28622,28616,28510,28612,28605,28574,28618,28584,28676,28581,28590,28602,28588,28586,28623,28607,28600,28578,28617,28587,28621,28591,28594,28592,29125,29122,29119,29112,29142,{f:2,c:29120},29131,29140,29130,29127,29135,29117,29144,29116,29126,{f:2,c:29146},
-{f:2,c:29341},29545,{f:2,c:29542},29548,29541,29547,29546,29823,29850,29856,29844,29842,29845,29857,29963,30080,30255,30253,30257,30269,30259,30268,30261,30258,30256,30395,30438,30618,30621,30625,30620,30619,{f:2,c:30626},30613,30617,30615,30941,30953,30949,30954,30942,30947,30939,{f:2,c:30945},30957,{f:2,c:30943},31140,31300,31304,31303,31414,31416,31413,31409,31415,31710,31715,31719,31709,31701,31717,31706,31720,31737,31700,31722,31714,31708,31723,31704,31711,31954,31956,31959,{f:2,c:31952},32274,
-32289,32279,32268,{f:2,c:32287},32275,32270,32284,32277,32282,32290,32267,32271,32278,32269,32276,32293,32292,32579,{f:2,c:32635},32634,32689,32751,32810,32809,32876,33201,33190,33198,33209,33205,33195,33200,33196,33204,33202,33207,33191,33266,{f:3,c:33365},34134,34117,34155,34125,34131,34145,34136,34112,34118,34148,34113,34146,34116,34129,34119,34147,34110,34139,34161,34126,34158,34165,34133,34151,34144,34188,34150,34141,34132,34149,34156,34403,34405,34404,34724,34715,34703,34711,34707,34706,34696,
-34689,34710,34712,34681,34695,34723,34693,{f:2,c:34704},34717,34692,34708,34716,34714,34697,35102,35110,35120,{f:2,c:35117},35111,35121,35106,35113,35107,35119,35116,35103,35313,35552,35554,35570,{f:2,c:35572},35549,35604,35556,35551,35568,35528,35550,35553,35560,35583,35567,35579,{f:2,c:35985},35984,36085,36078,36081,36080,36083,36204,36206,36261,36263,36403,36414,36408,36416,36421,36406,{f:2,c:36412},36417,36400,36415,36541,[36662,60329],36654,36661,36658,36665,36663,36660,36982,36985,36987,36998,
-37114,37171,{f:2,c:37173},37267,{f:2,c:37264},37261,37263,37671,37662,37640,37663,37638,37647,37754,37688,37692,37659,37667,37650,37633,37702,37677,37646,37645,37579,37661,37626,37651,37625,37623,37684,37634,37668,37631,37673,37689,37685,37674,37652,37644,37643,37630,37641,37632,37627,37654,38332,38349,38334,{f:2,c:38329},38326,38335,38325,38333,38569,38612,38667,38674,38672,38809,38807,38804,38896,38904,38965,38959,38962,39204,39199,39207,39209,39326,39406,39404,39397,39396,39408,39395,39402,39401,
-39399,39609,39615,39604,39611,39670,39674,39673,39671,39731,39808,39813,39815,39804,39806,39803,39810,39827,39826,39824,39802,39829,39805,39816,40229,40215,40224,40222,40212,40233,40221,40216,40226,40208,40217,40223,40584,{f:2,c:40582},40622,40621,{f:2,c:40661},40698,40722,40765,20774,20773,20770,20772,20768,20777,21236,22163,{f:2,c:22156},22150,22148,22147,22142,22146,22143,22145,22742,22740,22735,22738,23341,23333,23346,23331,23340,23335,23334,23343,23342,23419,{f:2,c:23537},23991,24172,24170,24510,
-25027,25013,25020,25063,25056,25061,25060,25064,25054,25839,25833,25827,25835,25828,25832,25985,25984,26038,26074,26322,27277,27286,27265,27301,27273,27295,27291,27297,27294,27271,27283,27278,27285,27267,27304,27300,27281,27263,27302,27290,27269,27276,27282,27483,27565,27657,28620,28585,28660,28628,28643,28636,28653,28647,28646,28638,28658,28637,28642,28648,29153,29169,29160,29170,29156,29168,29154,29555,{f:2,c:29550},29847,29874,29867,29840,29866,29869,29873,29861,29871,{f:3,c:29968},29967,30084,
-30275,{f:2,c:30280},30279,30372,30441,30645,30635,30642,30647,30646,30644,30641,30632,30704,30963,30973,30978,{f:2,c:30971},30975,30962,30981,30969,30974,30980,31147,31144,31324,31323,31318,31320,31316,31322,31422,{f:2,c:31424},31749,31759,31730,31744,31743,31739,31758,31732,31755,31731,31746,31753,31747,31745,31736,31741,[31750,58176],{f:2,c:31728},31760,31754,31976,32301,32316,32322,32307,38984,32312,32298,32329,32320,32327,32297,32332,32304,32315,32310,32324,32314,32581,32639,32638,32637,32756,
-32754,32812,33211,33220,33228,33226,33221,33223,33212,33257,33371,33370,33372,34179,34176,34191,34215,34197,34208,34187,34211,34171,34212,34202,34206,34167,34172,34185,34209,34170,34168,34135,34190,34198,34182,34189,34201,34205,34177,34210,34178,34184,34181,34169,34166,34200,34192,34207,34408,34750,34730,34733,34757,34736,34732,34745,34741,34748,34734,34761,34755,34754,34764,34743,34735,34756,34762,34740,34742,34751,34744,34749,34782,34738,35125,35123,35132,35134,35137,35154,35127,35138,35245,35247,
-35246,{f:2,c:35314},35614,35608,35606,35601,35589,35595,35618,35599,35602,35605,35591,35597,35592,35590,35612,35603,35610,35919,35952,35954,35953,35951,35989,35988,36089,36207,36430,36429,36435,36432,36428,36423,36675,36672,36997,36990,37176,37274,37282,37275,37273,37279,37281,37277,37280,37793,37763,37807,37732,37718,37703,37756,37720,37724,37750,37705,{f:2,c:37712},37728,37741,37775,37708,37738,37753,37719,37717,37714,37711,37745,37751,37755,37729,37726,37731,37735,37710,37721,38343,38336,38345,
-38339,38341,38327,38574,38576,38572,38688,38687,38680,38685,38681,38810,38817,38812,38814,38813,38869,38868,38897,38977,38980,38986,38985,38981,38979,39205,{f:2,c:39211},39210,39219,39218,39215,39213,39217,39216,39320,39331,39329,39426,39418,39412,39415,39417,39416,39414,39419,{f:2,c:39421},39420,39427,39614,39678,39677,39681,39676,39752,39834,39848,39838,39835,39846,39841,39845,39844,39814,39842,39840,39855,40243,40257,40295,40246,{f:2,c:40238},40241,40248,40240,40261,{f:2,c:40258},40254,40247,40256,
-40253,32757,40237,40586,40585,40589,40624,40648,40666,40699,40703,40740,40739,40738,40788,[12245,40864],20785,{f:2,c:20781},22168,22172,22167,22170,22173,22169,22896,23356,{f:2,c:23657},24E3,{f:2,c:24173},25048,25055,{f:2,c:25069},25073,25066,25072,25067,25046,25065,25855,25860,25853,25848,25857,25859,25852,26004,26075,{f:2,c:26330},26328,27333,27321,27325,27361,27334,27322,{f:2,c:27318},27335,27316,27309,27486,27593,27659,28679,{f:2,c:28684},28673,28677,28692,28686,{f:2,c:28671},28667,28710,28668,
-28663,28682,[29185,60224],29183,29177,29187,29181,29558,29880,29888,29877,29889,29886,29878,29883,29890,29972,29971,30300,30308,30297,30288,30291,30295,30298,30374,30397,30444,30658,30650,30988,{f:2,c:30995},30985,30992,30994,30993,31149,31148,31327,31772,31785,31769,31776,31775,31789,31773,31782,31784,31778,31781,31792,32348,32336,32342,32355,32344,32354,32351,32337,32352,32343,32339,32693,32691,{f:2,c:32759},32885,{f:2,c:33233},33232,33375,33374,34228,34246,34240,34243,34242,34227,34229,34237,34247,
-34244,34239,34251,34254,34248,34245,34225,34230,34258,34340,34232,34231,34238,34409,34791,34790,34786,34779,34795,34794,34789,34783,34803,34788,34772,34780,34771,34797,34776,34787,34775,34777,34817,34804,34792,34781,35155,35147,35151,35148,35142,{f:2,c:35152},35145,35626,35623,35619,35635,35632,35637,35655,35631,35644,35646,35633,35621,35639,35622,35638,35630,35620,35643,35645,35642,35906,35957,35993,35992,35991,36094,36100,36098,36096,36444,36450,36448,36439,36438,36446,36453,36455,36443,36442,36449,
-36445,36457,36436,{f:3,c:36678},36683,37160,{f:2,c:37178},37182,37288,37285,37287,37295,37290,37813,37772,37778,37815,37787,37789,37769,37799,37774,37802,37790,37798,37781,37768,37785,37791,37760,37773,37809,37777,37810,37796,37800,37812,37795,{f:2,c:38354},38353,38579,38615,38618,24002,38623,38616,38621,38691,38690,38693,38828,38830,38824,38827,38820,38826,38818,38821,38871,38873,38870,38872,38906,{f:3,c:38992},39096,39233,39228,39226,39439,39435,39433,39437,39428,39441,39434,39429,39431,39430,39616,
-39644,39688,{f:2,c:39684},39721,39733,39754,39756,39755,39879,39878,39875,39871,39873,39861,39864,39891,39862,39876,39865,39869,40284,40275,40271,40266,40283,40267,40281,40278,40268,40279,40274,40276,40287,40280,40282,40590,40588,40671,40705,40704,[40726,58693],40741,40747,40746,40745,40744,40780,40789,{f:2,c:20788},21142,21239,21428,22187,22189,{f:2,c:22182},22186,22188,22746,22749,22747,22802,{f:3,c:23357},24003,24176,24511,25083,25863,25872,25869,25865,25868,25870,25988,26078,26077,26334,27367,
-27360,27340,27345,27353,27339,27359,27356,27344,27371,27343,27341,27358,27488,27568,27660,28697,28711,28704,28694,28715,{f:3,c:28705},28713,28695,28708,28700,29196,29194,29191,29186,29189,{f:2,c:29349},29348,29347,29345,29899,29893,29879,29891,29974,30304,{f:2,c:30665},30660,30705,31005,31003,31009,31004,30999,31006,31152,{f:2,c:31335},31795,31804,31801,31788,31803,31980,31978,32374,32373,32376,32368,32375,32367,32378,32370,32372,32360,32587,32586,32643,32646,32695,{f:2,c:32765},32888,33239,33237,
-33291,33380,33377,33379,34283,34289,34285,34265,34273,34280,34266,34263,34284,34290,34296,34264,34271,34275,34268,34257,34288,34278,34287,34270,34274,34816,34810,34819,{f:2,c:34806},34825,34828,34827,34822,34812,34824,34815,34826,34818,35170,{f:2,c:35162},35159,35169,35164,35160,35165,35161,35208,35255,35254,35318,35664,35656,35658,35648,35667,35670,35668,35659,35669,35665,35650,35666,35671,35907,35959,35958,35994,{f:2,c:36102},36105,36268,36266,36269,36267,36461,36472,36467,36458,36463,36475,36546,
-36690,36689,{f:2,c:36687},36691,36788,37184,37183,37296,37293,37854,37831,37839,37826,37850,37840,37881,37868,37836,37849,37801,37862,37834,37844,37870,37859,37845,37828,37838,37824,37842,37797,37863,38269,{f:2,c:38362},38625,38697,{f:2,c:38699},38696,38694,38835,38839,38838,{f:3,c:38877},39004,39001,39005,38999,39103,39101,39099,39102,39240,39239,39235,{f:2,c:39334},39450,39445,39461,39453,39460,39451,39458,39456,39463,39459,39454,39452,39444,39618,39691,39690,39694,39692,39735,{f:2,c:39914},39904,
-39902,39908,39910,39906,39920,39892,39895,39916,39900,39897,39909,39893,39905,39898,40311,40321,40330,40324,40328,40305,40320,40312,40326,{f:2,c:40331},40317,40299,{f:2,c:40308},40304,40297,40325,40307,40315,40322,40303,40313,40319,40327,40296,40596,40593,40640,40700,40749,{f:2,c:40768},40781,{f:3,c:40790},21303,22194,22197,22195,22755,23365,{f:2,c:24006},{f:2,c:24302},{f:2,c:24512},25081,25879,25878,25877,25875,26079,26344,{f:2,c:26339},27379,27376,27370,27368,27385,27377,{f:2,c:27374},28732,28725,
-28719,28727,28724,28721,28738,28728,28735,28730,28729,28714,28736,28731,28723,28737,{f:2,c:29203},29352,29565,29564,29882,30379,30378,30398,30445,30668,{f:2,c:30670},30669,30706,31013,31011,{f:2,c:31015},31012,31017,31154,31342,{f:2,c:31340},31479,31817,31816,31818,31815,31813,31982,32379,32382,32385,32384,32698,32767,32889,33243,33241,{f:2,c:33384},34338,34303,34305,34302,34331,34304,34294,34308,34313,34309,34316,34301,34841,{f:2,c:34832},34839,34835,34838,35171,35174,35257,35319,35680,35690,35677,
-35688,35683,35685,35687,35693,36270,36486,36488,36484,36697,{f:2,c:36694},36693,36696,36698,37005,37187,37185,37303,37301,{f:2,c:37298},37899,37907,37883,37920,37903,37908,37886,37909,37904,37928,37913,37901,37877,37888,37879,37895,37902,37910,37906,37882,37897,37880,37948,37898,37887,37884,37900,37878,37905,37894,38366,38368,38367,{f:2,c:38702},38841,38843,{f:2,c:38909},39008,{f:2,c:39010},39007,{f:2,c:39105},39248,39246,39257,39244,39243,39251,39474,39476,39473,39468,39466,39478,39465,39470,39480,
-39469,39623,39626,39622,39696,39698,39697,39947,39944,39927,39941,39954,39928,4E4,39943,39950,39942,39959,39956,39945,40351,40345,40356,40349,40338,40344,40336,40347,40352,40340,40348,40362,40343,40353,40346,40354,40360,40350,40355,40383,40361,40342,{f:2,c:40358},40601,40603,40602,40677,40676,40679,40678,40752,40750,40795,40800,40798,40797,40793,40849,20794,20793,21144,21143,22211,{f:2,c:22205},23368,23367,24011,24015,24305,25085,25883,27394,27388,27395,27384,27392,{f:2,c:28739},28746,{f:2,c:28744},
-{f:2,c:28741},29213,29210,29209,29566,29975,30314,30672,31021,31025,31023,31828,31827,31986,32394,[32391,60229],32392,32395,32390,32397,32589,32699,32816,33245,34328,34346,34342,34335,34339,34332,34329,34343,34350,34337,34336,34345,34334,34341,34857,34845,34843,34848,34852,34844,34859,34890,35181,35177,35182,35179,35322,35705,35704,35653,{f:2,c:35706},36112,36116,36271,36494,36492,36702,36699,36701,37190,{f:2,c:37188},37305,37951,37947,37942,37929,37949,37936,37945,37930,37943,37932,37952,37937,38373,
-38372,38371,38709,38714,38847,38881,39012,39113,39110,39104,39256,39254,39481,39485,39494,39492,39490,39489,39482,39487,39629,39701,{f:2,c:39703},39702,39738,39762,39979,39965,39964,39980,39971,{f:2,c:39976},39972,39969,40375,40374,40380,40385,40391,40394,40399,40382,40389,40387,40379,40373,40398,{f:2,c:40377},40364,40392,40369,40365,40396,40371,40397,40370,40570,40604,40683,40686,40685,40731,40728,40730,40753,40782,40805,40804,40850,20153,22214,22213,22219,22897,{f:2,c:23371},24021,24017,24306,25889,
-25888,25894,25890,27403,{f:2,c:27400},27661,{f:3,c:28757},28754,{f:2,c:29214},29353,29567,29912,29909,29913,29911,30317,30381,31029,31156,{f:2,c:31344},31831,31836,31833,31835,31834,31988,31985,32401,32591,32647,33246,33387,{f:2,c:34356},34355,34348,34354,34358,34860,34856,34854,34858,34853,35185,35263,35262,35323,35710,35716,35714,35718,35717,35711,36117,36501,36500,36506,36498,36496,{f:2,c:36502},36704,36706,37191,37964,37968,{f:2,c:37962},37967,37959,37957,{f:2,c:37960},37958,38719,38883,39018,
-39017,39115,39252,39259,39502,{f:2,c:39507},39500,39503,39496,39498,39497,39506,39504,39632,39705,39723,39739,39766,39765,40006,40008,39999,40004,39993,39987,40001,39996,39991,39988,39986,39997,39990,40411,40402,40414,40410,40395,40400,40412,40401,40415,40425,40409,40408,40406,40437,40405,40413,40630,40688,40757,40755,40754,40770,40811,40853,40866,20797,21145,22760,22759,22898,23373,24024,34863,24399,25089,{f:2,c:25091},25897,25893,26006,26347,{f:2,c:27409},27407,27594,28763,28762,29218,29570,29569,
-29571,30320,30676,31847,31846,32405,33388,34362,34368,34361,34364,34353,34363,34366,34864,34866,34862,34867,35190,35188,35187,35326,35724,35726,35723,35720,35909,36121,36504,36708,36707,37308,37986,37973,37981,37975,37982,{f:2,c:38852},38912,39510,39513,{f:3,c:39710},40018,40024,40016,40010,40013,40011,40021,40025,40012,40014,40443,40439,40431,40419,40427,40440,40420,40438,40417,40430,40422,40434,[40432,60370],40418,40428,40436,40435,40424,40429,40642,40656,{f:2,c:40690},40710,40732,40760,40759,40758,
-40771,40783,40817,40816,{f:2,c:40814},22227,22221,23374,23661,25901,{f:2,c:26349},27411,28767,28769,28765,28768,29219,29915,29925,30677,31032,31159,31158,31850,32407,32649,33389,34371,34872,34871,34869,34891,{f:2,c:35732},{f:3,c:36510},36509,37310,37309,37314,37995,{f:2,c:37992},38629,38726,38723,38727,38855,38885,39518,39637,39769,40035,40039,40038,40034,40030,40032,40450,40446,40455,40451,40454,40453,{f:2,c:40448},40457,40447,40445,40452,40608,40734,40774,{f:3,c:40820},22228,25902,26040,{f:2,c:27416},
-27415,27418,28770,29222,29354,{f:2,c:30680},31033,31849,31851,31990,32410,32408,32411,32409,{f:2,c:33248},{f:3,c:34374},{f:2,c:35193},35196,35195,35327,{f:2,c:35736},36517,36516,36515,37998,37997,37999,38001,38003,38729,39026,39263,40040,40046,40045,40459,40461,40464,40463,40466,40465,40609,40693,40713,40775,40824,40827,40826,40825,22302,28774,31855,34876,36274,36518,37315,38004,38008,38006,38005,39520,[39726,60830],40052,40051,40049,40053,40468,40467,40694,40714,40868,28776,28773,31991,34410,34878,
-34877,34879,35742,35996,36521,36553,38731,{f:2,c:39027},39116,39265,39339,39524,{f:2,c:39526},39716,40469,40471,40776,25095,27422,29223,34380,36520,38018,{f:2,c:38016},39529,39528,40473,34379,35743,38019,40057,40631,30325,39531,40058,40477,{f:2,c:28777},29225,40612,40830,40777,40856,{s:97},65075,0,65076,65103,[168,776,63208],[710,63209,65342],[12541,63210],[12542,63211],[12445,63212],[12446,63213],0,[12293,63216],[12294,63217],[12295,63218],[12540,63219],[63220,65339],[63221,65341],[10045,63222],
-[12353,63223],[12354,63224],[12355,63225],[12356,63226],[12357,63227],[12358,63228],[12359,63229],[12360,63230],[12361,63231],[12362,63232],[12363,63233],[12364,63234],[12365,63235],[12366,63236],[12367,63237],[12368,63238],[12369,63239],[12370,63240],[12371,63241],[12372,63242],[12373,63243],[12374,63244],[12375,63245],[12376,63246],[12377,63247],[12378,63248],[12379,63249],[12380,63250],[12381,63251],[12382,63252],[12383,63253],[12384,63254],[12385,63255],[12386,63256],[12387,63257],[12388,63258],
-[12389,63259],[12390,63260],[12391,63261],[12392,63262],[12393,63263],[12394,63264],[12395,63265],[12396,63266],[12397,63267],[12398,63268],[12399,63269],[12400,63270],[12401,63271],[12402,63272],[12403,63273],[12404,63274],[12405,63275],[12406,63276],[12407,63277],[12408,63278],[12409,63279],[12410,63280],[12411,63281],[12412,63282],[12413,63283],[12414,63284],[12415,63285],[12416,63286],[12417,63287],[12418,63288],[12419,63289],[12420,63290],[12421,63291],[12422,63292],[12423,63293],[12424,63294],
-[12425,63295],[12426,63296],[12427,63297],[12428,63298],[12429,63299],[12430,63300],[12431,63301],[12432,63302],[12433,63303],[12434,63304],[12435,63305],[12449,63306],[12450,63307],[12451,63308],[12452,63309],[12453,63310],[12454,63311],[12455,63312],[12456,63313],[12457,63314],[12458,63315],[12459,63316],[12460,63317],[12461,63318],[12462,63319],[12463,63320],[12464,63321],[12465,63322],[12466,63323],[12467,63324],[12468,63325],[12469,63326],[12470,63327],[12471,63328],[12472,63329],[12473,63330],
-[12474,63331],[12475,63332],[12476,63333],[12477,63334],[12478,63335],[12479,63336],[12480,63337],[12481,63338],[12482,63339],[12483,63340],[12484,63341],[12485,63342],[12486,63343],[12487,63344],[12488,63345],[12489,63346],[12490,63347],[12491,63348],[12492,63349],[12493,63350],[12494,63351],[12495,63352],[12496,63353],[12497,63354],[12498,63355],[12499,63356],[12500,63357],[12501,63358],[12502,63359],[12503,63360],[12504,63361],[12505,63362],[12506,63363],[12507,63364],[12508,63365],[12509,63366],
-[12510,63367],[12511,63368],[12512,63369],[12513,63370],[12514,63371],[12515,63372],[12516,63373],[12517,63374],[12518,63375],[12519,63376],[12520,63377],[12521,63378],[12522,63379],[12523,63380],[12524,63381],[12525,63382],[12526,63383],[12527,63384],[12528,63385],[12529,63386],[12530,63387],[12531,63388],[12532,63389],[12533,63390],[12534,63391],[1040,63392],[1041,63393],[1042,63394],[1043,63395],[1044,63396],[1045,63397],[1025,63398],[1046,63399],[1047,63400],[1048,63401],[1049,63402],[1050,63403],
-[1051,63404],[1052,63405],[1053,63406],[1054,63407],[1055,63408],[1056,63409],[1057,63410],[1058,63411],[1059,63412],[1060,63413],[1061,63414],[1062,63415],[1063,63416],[1064,63417],[1065,63418],[1066,63419],[1067,63420],[1068,63421],[1069,63422],[1070,63423],[1071,63424],[1072,63425],[1073,63426],[1074,63427],[1075,63428],[1076,63429],[1077,63430],[1105,63431],[1078,63432],[1079,63433],[1080,63434],[1081,63435],[1082,63436],[1083,63437],[1084,63438],[1085,63439],[1086,63440],[1087,63441],[1088,63442],
-[1089,63443],[1090,63444],[1091,63445],[1092,63446],[1093,63447],[1094,63448],[1095,63449],[1096,63450],[1097,63451],[1098,63452],[1099,63453],[1100,63454],[1101,63455],[1102,63456],[1103,63457],[8679,63458],[8632,63459],[8633,63460],[20033,63461],[63462,131276],[20058,63463],[63464,131210],[20994,63465],[17553,63466],63467,[20872,63468],[13853,63469],[63470,161287],{s:40},[172,63511,65506],[63512,65508],[63513,65287],[63514,65282],[12849,63515],[8470,63516],[8481,63517],30849,[37561,58501],35023,
-22715,24658,31911,23290,9556,9574,9559,9568,9580,9571,9562,9577,9565,9554,9572,9557,{s:3},9560,9575,9563,9555,9573,9558,9567,9579,9570,9561,9576,9564,9553,{s:5},9619,{s:26},[58129,147159],[22462,58130],[58131,159443],[28990,58132],[58133,153568],[27042,58135],[58136,166889],[23412,58137],[31305,58138],[58139,153825],[58140,169177],[31333,58141],[31357,58142],[58143,154028],[31419,58144],[31408,58145],[31426,58146],[31427,58147],[29137,58148],[58149,156813],[16842,58150],[31450,58151],[31453,58152],
-[31466,58153],[16879,58154],[21682,58155],[58156,154625],[31499,58157],[31573,58158],[31529,58159],[58160,152334],[58161,154878],[31650,58162],[31599,58163],[33692,58164],[58165,154548],[58166,158847],[31696,58167],[33825,58168],[31634,58169],0,[58171,154912],0,[33938,58174],[31738,58175],0,[31797,58177],[58178,154817],[31812,58179],[31875,58180],[58181,149634],[31910,58182],[58184,148856],[31945,58185],[31943,58186],[31974,58187],0,[31987,58189],[31989,58190],[32359,58192],[17693,58193],[58194,159300],
-[32093,58195],[58196,159446],[32137,58198],[32171,58199],[28981,58200],[32179,58201],32214,[58203,147543],[58204,155689],[32228,58205],[15635,58206],[32245,58207],[58208,137209],[32229,58209],[58210,164717],0,[58212,155937],[58213,155994],[32366,58214],0,[17195,58216],[37996,58217],[32295,58218],[32576,58219],[32577,58220],[32583,58221],[31030,58222],[58223,156368],[39393,58224],[32663,58225],[58226,156497],[32675,58227],[58228,136801],[58229,131176],[17756,58230],[58231,145254],[58233,164666],[32762,
-58234],[58235,156809],0,[32776,58237],[32797,58238],0,[32815,58240],[58241,172167],[58242,158915],[32827,58243],[32828,58244],[32865,58245],[58246,141076],[18825,58247],[58248,157222],[58249,146915],[58250,157416],[26405,58251],[32935,58252],[58253,166472],[33031,58254],[33050,58255],[22704,58256],[58257,141046],[27775,58258],[58259,156824],[25831,58261],[58262,136330],[33304,58263],[58264,137310],[27219,58265],[58266,150117],[58267,150165],[17530,58268],[33321,58269],[58271,158290],[58272,146814],
-[20473,58273],[58274,136445],[34018,58275],[33634,58276],0,[58278,149927],[58279,144688],[58280,137075],[58281,146936],[33450,58282],[26907,58283],[58284,194964],[16859,58285],[34123,58286],[33488,58287],[33562,58288],[58289,134678],[58290,137140],[14017,58291],[58292,143741],[58293,144730],[33403,58294],[33506,58295],[33560,58296],[58297,147083],[58298,159139],[58299,158469],[58300,158615],[58301,144846],[15807,58302],[33565,58303],[21996,58304],[33669,58305],[17675,58306],[58307,159141],[33708,
-58308],0,[33747,58310],[58312,159444],[27223,58313],[34138,58314],[13462,58315],[58316,159298],[33880,58318],[58319,154596],[33905,58320],[15827,58321],[17636,58322],[27303,58323],[33866,58324],[31064,58326],0,[58328,158614],[58329,159351],[58330,159299],[34014,58331],0,[33681,58333],[17568,58334],[33939,58335],[34020,58336],[58337,154769],[16960,58338],[58339,154816],[17731,58340],[34100,58341],[23282,58342],0,[17703,58344],[34163,58345],[17686,58346],[26559,58347],[34326,58348],[58349,165413],[58350,
-165435],[34241,58351],[58352,159880],[34306,58353],[58354,136578],[58355,159949],[58356,194994],[17770,58357],[34344,58358],[13896,58359],[58360,137378],[21495,58361],[58362,160666],[34430,58363],0,[58365,172280],[34798,58366],[58367,142375],[34737,58368],[34778,58369],[34831,58370,60990],[22113,58371],[34412,58372],[26710,58373],[17935,58374],[34885,58375],[34886,58376],[58377,161248],[58378,146873],[58379,161252],[34910,58380],[34972,58381],[18011,58382],[34996,58383],[34997,58384],[35013,58386],
-[58388,161551],[35207,58389],{s:3},[35239,58393],[35260,58394],[58395,166437],[35303,58396],[58397,162084],[58398,162493],[35484,58399],[30611,58400],[37374,58401],[35472,58402],[58403,162393],[31465,58404],[58405,162618],[18195,58407],[58408,162616],[29052,58409],[35596,58410],[35615,58411],[58412,152624],[58413,152933],[35647,58414],0,[35661,58416],[35497,58417],[58418,150138],[35728,58419],[35739,58420],[35503,58421],[58422,136927],[17941,58423],[34895,58424],[35995,58425],[58426,163156],[58427,
-163215],[58428,195028],[14117,58429],[58430,163155],[36054,58431],[58432,163224],[58433,163261],[36114,58434],[36099,58435],[58436,137488],[36059,58437],[28764,58438],[36113,58439],[16080,58441],0,[36265,58443],[58444,163842],[58445,135188],[58446,149898],[15228,58447],[58448,164284],[58449,160012],[31463,58450],[36525,58451],[36534,58452],[36547,58453],[37588,58454],[36633,58455],[36653,58456],[58457,164709],[58458,164882],[36773,58459],[37635,58460],[58461,172703],[58462,133712],[36787,58463],0,
-[58465,166366],[58466,165181],[58467,146875],[24312,58468],[58469,143970],[36857,58470],0,[58474,140069],[14720,58475],[58476,159447],[36919,58477],[58478,165180],[58479,162494],[36961,58480],[58481,165228],[58482,165387],[37032,58483],[58484,165651],[37060,58485],[58486,165606],[37038,58487],0,[37223,58489],[37289,58491],[37316,58492],[31916,58493],[58494,166195],[58495,138889],[37390,58496],[27807,58497],[37441,58498],[37474,58499],[58500,153017],[58502,166598],[58503,146587],[58504,166668],[58505,
-153051],[58506,134449],[37676,58507],[37739,58508],[58509,166625],[58510,166891],[23235,58512],[58513,166626],[58514,166629],[18789,58515],[37444,58516],[58517,166892],[58518,166969],[58519,166911],[37747,58520],[37979,58521],[36540,58522],[38277,58523],[38310,58524],[37926,58525],[38304,58526],[28662,58527],[17081,58528],[58530,165592],[58531,135804],[58532,146990],[18911,58533],[27676,58534],[38523,58535],[38550,58536],[16748,58537],[38563,58538],[58539,159445],[25050,58540],58541,[30965,58542],
-[58543,166624],[38589,58544],[21452,58545],[18849,58546],[58547,158904],[58548,131700],[58549,156688],[58550,168111],[58551,168165],[58552,150225],[58553,137493],[58554,144138],[38705,58555],[34370,58556],[38710,58557],[18959,58558],[17725,58559],[17797,58560],[58561,150249],[28789,58562],[23361,58563],[38683,58564],0,[58566,168405],[38743,58567],[23370,58568],[58569,168427],[38751,58570],[37925,58571],[20688,58572],[58573,143543],[58574,143548],[38793,58575],[38815,58576],[38833,58577],[38846,58578],
-[38848,58579],[38866,58580],[38880,58581],[58582,152684],[38894,58583],[29724,58584],[58585,169011],0,[38901,58587],[58588,168989],[58589,162170],[19153,58590],[38964,58591],[38963,58592],[38987,58593],[39014,58594],[15118,58595],[58596,160117],[15697,58597],[58598,132656],[58599,147804],[58600,153350],[39114,58601],[39095,58602],[39112,58603],[39111,58604],[19199,58605],[58606,159015],[58607,136915],[21936,58608],[39137,58609],[39142,58610],[39148,58611],[37752,58612],[39225,58613],[58614,150057],
-[19314,58615],[58616,170071],[58617,170245],[39413,58618],[39436,58619],[39483,58620],[39440,58621],[39512,58622],[58623,153381],[14020,58624],[58625,168113],[58626,170965],[39648,58627],[39650,58628],[58629,170757],[39668,58630],[19470,58631],[39700,58632],[39725,58633],[58634,165376],[20532,58635],[39732,58636],[14531,58638],[58639,143485],[39760,58640],[39744,58641],[58642,171326],[23109,58643],[58644,137315],[39822,58645],[39938,58647],[39935,58648],[39948,58649],[58650,171624],[40404,58651],
-[58652,171959],[58653,172434],[58654,172459],[58655,172257],[58656,172323],[58657,172511],[40318,58658],[40323,58659],[58660,172340],[40462,58661],[40388,58663],[58665,172435],[58666,172576],[58667,137531],[58668,172595],[40249,58669],[58670,172217],[58671,172724],[40592,58672],[40597,58673],[40606,58674],[40610,58675],[19764,58676],[40618,58677],[40623,58678],[58679,148324],[40641,58680],[15200,58681],[14821,58682],[15645,58683],[20274,58684],[14270,58685],[58686,166955],[40706,58687],[40712,58688],
-[19350,58689],[37924,58690],[58691,159138],[40727,58692,60836],0,[40761,58694],[22175,58695],[22154,58696],[40773,58697],[39352,58698],[58699,168075],[38898,58700],[33919,58701],0,[40809,58703],[31452,58704],[40846,58705],[29206,58706],[19390,58707],[58708,149877],[58709,149947],[29047,58710],[58711,150008],[58712,148296],[58713,150097],[29598,58714],[58715,166874],[58716,137466],[31135,58717],[58718,166270],[58719,167478],[37737,58720],[37875,58721],[58722,166468],[37612,58723],[37761,58724],[37835,
-58725],[58726,166252],[58727,148665],[29207,58728],[16107,58729],[30578,58730],[31299,58731],[28880,58732],[58733,148595],[58734,148472],[29054,58735],[58736,137199],[28835,58737],[58738,137406],[58739,144793],[16071,58740],[58741,137349],[58742,152623],[58743,137208],[14114,58744],[58745,136955],[58746,137273],[14049,58747],[58748,137076],[58749,137425],[58750,155467],[14115,58751],[58752,136896],[22363,58753],[58754,150053],[58755,136190],[58756,135848],[58757,136134],[58758,136374],[34051,58759,
-58761],[58760,145062],0,[33877,58762],[58763,149908],[58764,160101],[58765,146993],[58766,152924],[58767,147195],[58768,159826],[17652,58769],[58770,145134],[58771,170397],[58772,159526],[26617,58773],[14131,58774],[15381,58775],[15847,58776],[22636,58777],[58778,137506],[26640,58779],[16471,58780],[58781,145215],[58782,147681],[58783,147595],[58784,147727],[58785,158753],[21707,58786],[22174,58787],[58788,157361],[22162,58789],[58790,135135],[58791,134056],[58792,134669],0,[58794,166675],[37788,
-58795],[20216,58796],[20779,58797],[14361,58798],[58799,148534],[20156,58800],[58801,132197],0,[20299,58803],[20362,58804],[58805,153169],[23144,58806],[58807,131499],[58808,132043],[14745,58809],[58810,131850],[58811,132116],[13365,58812],[20265,58813],[58814,131776],[58815,167603],[58816,131701],[35546,58817],[58818,131596],[20120,58819],[20685,58820],[20749,58821],[20386,58822],[20227,58823],[58824,150030],[58825,147082],[20290,58826],[20526,58827],[20588,58828],[20609,58829],[20428,58830],[20453,
-58831],[20568,58832],[20732,58833],[28278,58838],[58839,144789],[58840,147001],[58841,147135],[28018,58842],[58843,137348],[58844,147081],[20904,58845],[20931,58846],[58847,132576],[17629,58848],[58849,132259],[58850,132242],[58851,132241],[36218,58852],[58853,166556],[58854,132878],[21081,58855],[21156,58856],[58857,133235],[21217,58858],0,[18042,58860],[29068,58861],[58862,148364],[58863,134176],[58864,149932],[58865,135396],[27089,58866],[58867,134685],0,[16094,58869],[29849,58870],[29716,58871],
-[29782,58872],[29592,58873],[19342,58874],[58875,150204],[58876,147597],[21456,58877],[13700,58878],[29199,58879],[58880,147657],[21940,58881],[58882,131909],[21709,58883],[58884,134086],[22301,58885],[37469,58886],[38644,58887],[22493,58889],[22413,58890],[22399,58891],[13886,58892],[22731,58893],[23193,58894],[58895,166470],[58896,136954],[58897,137071],[58898,136976],[23084,58899],[22968,58900],[23166,58902],[23247,58903],[23058,58904],[58905,153926],[58906,137715],[58907,137313],[58908,148117],
-[14069,58909],[27909,58910],[29763,58911],[23073,58912],[58913,155267],[23169,58914],[58915,166871],[58916,132115],[37856,58917],[29836,58918],[58919,135939],[28933,58920],[18802,58921],[37896,58922],[58923,166395],[37821,58924],[14240,58925],[23582,58926],[23710,58927],[24158,58928],[24136,58929],[58930,137622],[58931,137596],[58932,146158],[24269,58933],[23375,58934],[58935,137475],[58936,137476],[14081,58937],[58938,137376],[14045,58939],[58940,136958],[14035,58941],[33066,58942],[58943,166471],
-[58944,138682],[58945,144498],[58946,166312],[24332,58947,60916],[24334,58948],[58949,137511],[58950,137131],[23147,58951],[58952,137019],[23364,58953],[58955,161277],[34912,58956],[24702,58957],[58958,141408],[58959,140843],[24539,58960],[16056,58961],[58962,140719],[58963,140734],[58964,168072],[58965,159603],[25024,58966],[58967,131134],[58968,131142],[58969,140827],[24985,58970],[24984,58971],[24693,58972],[58973,142491],[58974,142599],[58975,149204],[58976,168269],[25713,58977],[58978,149093],
-[58979,142186],[14889,58980],[58981,142114],[58982,144464],[58983,170218],[58984,142968],[25399,58985],[25782,58987],[25393,58988],[25553,58989],[58990,149987],[58991,142695],[25252,58992],[58993,142497],[25659,58994],[25963,58995],[26994,58996],[15348,58997],[58998,143502],[58999,144045],[59E3,149897],[59001,144043],[21773,59002],[59003,144096],[59004,137433],[59005,169023],[26318,59006],[59007,144009],[59008,143795],[15072,59009],[59011,152964],[59012,166690],[59013,152975],[59014,136956],[59015,
-152923],[59016,152613],[30958,59017],[59018,143619],[59019,137258],[59020,143924],[13412,59021],[59022,143887],[59023,143746],[59024,148169],[26254,59025],[59026,159012],[26219,59027],[19347,59028],[26160,59029],[59030,161904],[59031,138731],[26211,59032],[59033,144082],[59034,144097],[26142,59035],[59036,153714],[14545,59037],[59038,145466],[59039,145340],[15257,59040],[59041,145314],[59042,144382],[29904,59043],[15254,59044],[59046,149034],[26806,59047],0,[15300,59049],[27326,59050],[59052,145365],
-[59053,148615],[27187,59054],[27218,59055],[27337,59056],[27397,59057],[59058,137490],[25873,59059],[26776,59060],[27212,59061],[15319,59062],[27258,59063],[27479,59064],[59065,147392],[59066,146586],[37792,59067],[37618,59068],[59069,166890],[59070,166603],[37513,59071],[59072,163870],[59073,166364],[37991,59074],[28069,59075],[28427,59076],0,[59079,147327],[15759,59080],[28164,59081],[59082,147516],[23101,59083],[28170,59084],[22599,59085],[27940,59086],[30786,59087],[28987,59088],[59089,148250],
-[59090,148086],[28913,59091],[29264,59092,61085],[29319,59093],[29332,59094],[59095,149391],[59096,149285],[20857,59097],[59098,150180],[59099,132587],[29818,59100],[59101,147192],[59102,144991],[59103,150090],[59104,149783],[59105,155617],[16134,59106],[16049,59107],[59108,150239],[59109,166947],[59110,147253],[24743,59111],[16115,59112],[29900,59113],[29756,59114],[37767,59115],[29751,59116],[17567,59117],[59118,159210],[17745,59119],[30083,59120],[16227,59121],[59122,150745],[59123,150790],[16216,
-59124],[30037,59125],[30323,59126],[59127,173510],0,[29800,59129,61070],[59130,166604],[59131,149931],[59132,149902],[15099,59133],[15821,59134],[59135,150094],[16127,59136],[59137,149957],[59138,149747],[37370,59139],[22322,59140],[37698,59141],[59142,166627],[59143,137316],[20703,59144],[59145,152097],[59146,152039],[30584,59147],[59148,143922],[30478,59149],[30479,59150],[30587,59151],[59152,149143],[59153,145281],[14942,59154],[59155,149744],[29752,59156],[29851,59157],[16063,59158],[59159,150202],
-[59160,150215],[16584,59161],[59162,150166],[59163,156078],[37639,59164],[59165,152961],[30750,59166],[30861,59167],[30856,59168],[30930,59169],[29648,59170],[31065,59171],[59172,161601],[59173,153315],[16654,59174],0,0,[31141,59177],[27181,59178],[59179,147194],[31290,59180],[31220,59181],[16750,59182],[59183,136934],[16690,59184],[37429,59185],[31217,59186],[59187,134476],[59188,149900],[59189,131737],[59190,146874],[59191,137070],[13719,59192],[21867,59193],[13680,59194],[13994,59195],[59196,131540],
-[59197,134157],[31458,59198],[23129,59199],[59200,141045],[59201,154287],[59202,154268],[23053,59203],[59204,131675],[30960,59205],[23082,59206],[59207,154566],[31486,59208],[16889,59209],[31837,59210],[31853,59211],[16913,59212],[59213,154547],[59214,155324],[59215,155302],[31949,59216],[59217,150009],[59218,137136],[31886,59219],[31868,59220],[31918,59221],[27314,59222],[32220,59223],[32263,59224],[32211,59225],[32590,59226],[59227,156257],[59228,155996],[59229,162632],[32151,59230],[59231,155266],
-[17002,59232],[59233,158581],[59234,133398],[26582,59235],[59236,131150],[59237,144847],[22468,59238],[59239,156690],[59240,156664],[32733,59242],[31527,59243],[59244,133164],[59245,154345],[59246,154947],[31500,59247],[59248,155150],[39398,59249],[34373,59250],[39523,59251],[27164,59252],[59253,144447],[59255,150007],[59256,157101],[39455,59257],[59258,157088],0,[59260,160039],[59261,158929],[17642,59262],[33079,59263],[17410,59264],[32966,59265],[33033,59266],[33090,59267],[59268,157620],[39107,
-59269],[59270,158274],[33378,59271],[33381,59272],[59273,158289],[33875,59274],[59275,159143],[34320,59276],[59277,160283],[23174,59278],[16767,59279],[59280,137280],[23339,59281],[59282,137377],[23268,59283],[59284,137432],[34464,59285],[59286,195004],[59287,146831],[34861,59288],[59289,160802],[23042,59290],[34926,59291],[20293,59292],[34951,59293],[35007,59294],[35046,59295],[35173,59296],[35149,59297],[59298,153219],[35156,59299],[59300,161669],[59301,161668],[59302,166901],[59303,166873],[59304,
-166812],[59305,166393],[16045,59306],[33955,59307],[18165,59308],[18127,59309],[14322,59310],[35389,59311],[35356,59312],[59313,169032],[24397,59314],[37419,59315],[59316,148100],[26068,59317],[28969,59318],[28868,59319],[59320,137285],[40301,59321],[35999,59322],[36073,59323],[59324,163292],[22938,59325],[30659,59326],[23024,59327],[14036,59329],[36394,59330],[36519,59331],[59332,150537],[36656,59333],[36682,59334],[17140,59335],[27736,59336],[28603,59337],[59338,140065],[18587,59339],[28537,59340],
-[28299,59341],[59342,137178],[39913,59343],[14005,59344],[59345,149807],[37051,59346],0,[21873,59348],[18694,59349],[37307,59350],[37892,59351],[59352,166475],[16482,59353],[59354,166652],[37927,59355],[59356,166941],[59357,166971],[34021,59358],[35371,59359],[38297,59360],[38311,59361],[38295,59362],[38294,59363],[59364,167220],[29765,59365],[16066,59366],[59367,149759],[59368,150082],[59369,148458],[16103,59370],[59371,143909],[38543,59372],[59373,167655],[59374,167526],[59375,167525],[16076,59376],
-[59377,149997],[59378,150136],[59379,147438],[29714,59380],[29803,59381],[16124,59382],[38721,59383],[59384,168112],[26695,59385],[18973,59386],[59387,168083],[59388,153567],0,[37736,59390],[59391,166281],[59392,166950],[59393,166703],[59394,156606],[37562,59395],[23313,59396],[35689,59397],[18748,59398],[29689,59399],[59400,147995],[38811,59401],0,[39224,59403],[59404,134950],[24001,59405],[59406,166853],[59407,150194],[38943,59408],[59409,169178],[37622,59410],[59411,169431],[37349,59412],[17600,
-59413],[59414,166736],[59415,150119],[59416,166756],[39132,59417],[59418,166469],[16128,59419],[37418,59420],[18725,59421],[33812,59422],[39227,59423],[39245,59424],[59425,162566],[15869,59426],0,[19311,59428],[39338,59429],[39516,59430],[59431,166757],[59432,153800],[27279,59433],[39457,59434],[23294,59435],[39471,59436],[59437,170225],[19344,59438],[59439,170312],[39356,59440],[19389,59441],[19351,59442],[37757,59443],[22642,59444],[59445,135938],[22562,59446],[59447,149944],[59448,136424],[30788,
-59449],[59450,141087],[59451,146872],[26821,59452],[15741,59453],[37976,59454],[14631,59455],[24912,59456],[59457,141185],[59458,141675],[24839,59459],[40015,59460],[40019,59461],[40059,59462],[39989,59463],[39952,59464],[39807,59465],[39887,59466],[59467,171565],[39839,59468],[59469,172533],[59470,172286],[40225,59471],[19630,59472],[59473,147716],[40472,59474],[19632,59475],[40204,59476],[59477,172468],[59478,172269],[59479,172275],[59480,170287],[40357,59481],[33981,59482],[59483,159250],[59484,
-159711],[59485,158594],[34300,59486],[17715,59487],[59488,159140],[59489,159364],[59490,159216],[33824,59491],[34286,59492],[59493,159232],[59494,145367],[59495,155748],[31202,59496],[59497,144796],[59498,144960],[59500,149982],[15714,59501],[37851,59502],[37566,59503],[37704,59504],[59505,131775],[30905,59506],[37495,59507],[37965,59508],[20452,59509],[13376,59510],[36964,59511],[59512,152925],[30781,59513],[30804,59514],[30902,59515],[30795,59516],[59517,137047],[59518,143817],[59519,149825],[13978,
-59520],[20338,59521],[28634,59522],[28633,59523],0,[28702,59524,59525],[21524,59526],[59527,147893],[22459,59528],[22771,59529],[22410,59530],[40214,59531],[22487,59532],[28980,59533],[13487,59534],[59535,147884],[29163,59536],[59537,158784],[59538,151447],0,[59540,137141],[59541,166473],[24844,59542],[23246,59543],[23051,59544],[17084,59545],[59546,148616],[14124,59547],[19323,59548],[59549,166396],[37819,59550],[37816,59551],[59552,137430],[59553,134941],[33906,59554],[59555,158912],[59556,136211],
-[59557,148218],[59558,142374],[59559,148417],[22932,59560],[59561,146871],[59562,157505],[32168,59563],[59564,155995],[59565,155812],[59566,149945],[59567,149899],[59568,166394],[37605,59569],[29666,59570],[16105,59571],[29876,59572],[59573,166755],[59574,137375],[16097,59575],[59576,150195],[27352,59577],[29683,59578],[29691,59579],[16086,59580],[59581,150078],[59582,150164],[59583,137177],[59584,150118],[59585,132007],[59586,136228],[59587,149989],[29768,59588],[59589,149782],[28837,59590],[59591,
-149878],[37508,59592],[29670,59593],[37727,59594],[59595,132350],[37681,59596],[59597,166606],[59598,166422],[37766,59599],[59600,166887],[59601,153045],[18741,59602],[59603,166530],[29035,59604],[59605,149827],[59606,134399],[22180,59607],[59608,132634],[59609,134123],[59610,134328],[21762,59611],[31172,59612],[59613,137210],[32254,59614],[59615,136898],[59616,150096],[59617,137298],[17710,59618],[37889,59619],[14090,59620],[59621,166592],[59622,149933],[22960,59623],[59624,137407],[59625,137347],
-[59626,160900],[23201,59627],[14050,59628],[59629,146779],[14E3,59630],[37471,59631],[23161,59632],[59633,166529],[59634,137314],[37748,59635],[15565,59636],[59637,133812],[19094,59638],[14730,59639],[20724,59640],[15721,59641],[15692,59642],[59643,136092],[29045,59644],[17147,59645],[59646,164376],[28175,59647],[59648,168164],[17643,59649],[27991,59650],[59651,163407],[28775,59652],[27823,59653],[15574,59654],[59655,147437],[59656,146989],[28162,59657],[28428,59658],[15727,59659],[59660,132085],
-[30033,59661],[14012,59662],[13512,59663],[18048,59664],[16090,59665],[18545,59666],[22980,59667],[37486,59668],[18750,59669],[36673,59670],[59671,166940],[59672,158656],[22546,59673],[22472,59674],[14038,59675],[59676,136274],[28926,59677],[59678,148322],[59679,150129],[59680,143331],[59681,135856],[59682,140221],[26809,59683],[26983,59684],[59685,136088],[59686,144613],[59687,162804],[59688,145119],[59689,166531],[59690,145366],[59691,144378],[59692,150687],[27162,59693],[59694,145069],[59695,158903],
-[33854,59696],[17631,59697],[17614,59698],[59699,159014],[59700,159057],[59701,158850],[59702,159710],0,0,[33597,59705],[59706,137018],[33773,59707],[59708,158848],[59709,159827],[59710,137179],[22921,59711],[23170,59712],[59713,137139],[23137,59714],[23153,59715],[59716,137477],[59717,147964],[14125,59718],[23023,59719],[59720,137020],[14023,59721],[29070,59722],[37776,59723],[26266,59724],[59725,148133],[23150,59726],[23083,59727],[59728,148115],[27179,59729],[59730,147193],[59731,161590],[59732,
-148571],[59733,148170],[28957,59734],[59735,148057],[59736,166369],[20400,59737],[59738,159016],[23746,59739],[59740,148686],[59741,163405],[59742,148413],[27148,59743],[59744,148054],[59745,135940],0,[28979,59747],[59748,148457],[15781,59749],[27871,59750],[59751,194597],[23019,59754],[24412,59757],[59764,144128],[31955,59776],[59783,162548],[59786,153334],[59790,162584],[36972,59791],[33270,59795],[30476,59797],[27810,59799],[22269,59800],[22633,59828],[26465,59832],[23646,59838],[22770,59841],
-[28857,59843],[26627,59853],[36795,59859],[36796,59861],[20001,59871],[31545,59898],[15820,59902],[29482,57990,59909],[30048,59912],[22586,59920],[33446,59932],[27018,59940],[24803,59944],[20206,59984],[39364,60002],[40639,60023],[21249,60025],[26528,60038],[24808,60046],[20916,60053],[31363,60064],[39994,60075],[31432,60093],[26906,60098],[22956,60100],[22592,60102],[21610,60114],[24807,60123],[22138,60125],[26965,60132],[39983,60133],[34725,60134],[23584,60141],[24075,60143],[26398,60147],[33965,
-60157],[35713,60161],[20088,60166],[25283,60176],[26709,60180],0,[33533,60190],[35237,60194],[36768,60196],[38840,60198],[38983,60200],[39613,60201],[24497,60218],[26184,60219],[26303,60220],[60221,162425],0,[60225,149946],0,0,[60230,131910],[26382,60232],[26904,60233],[60235,161367],[60236,155618],[60239,161278],[60240,139418],[18640,60241],[19128,60242],[60244,166554],[60247,147515],[60250,150085],[60251,132554],[20946,60252],[60253,132625],[22943,60254],[60255,138920],[15294,60256],[60257,146687],
-[14747,60262],[60264,165352],[60265,170441],[14178,60266],[60267,139715],[35678,60268],[60269,166734],0,[29193,60274],[60276,134264],[60280,132985],[36570,60281],[21135,60283],[29041,60285],[60288,147274],[60289,150183],[21948,60290],[60293,158546],[13427,60295],[60297,161330],[18200,60299],[60303,149823],[20582,60305],[13563,60306],[60307,144332],0,[18300,60310],[60311,166216],[60315,138640],0,[60320,162834],[36950,60321],[60323,151450],[35682,60324],[23899,60327],[60328,158711],0,[60331,137500],
-[35562,60332],[60333,150006],[60335,147439],[19392,60337],[60340,141083],[37989,60341],[60342,153569],[24981,60343],[23079,60344],[60345,194765],0,[60348,148769],[20074,60350],[60351,149812],[38486,60352],[28047,60353],[60354,158909],[35191,60356],[60359,156689],0,[31554,60363],[60364,168128],[60365,133649],0,[31301,60369],[39462,60372],[13919,60374],[60375,156777],[60376,131105],[31107,60377],[23852,60380],[60381,144665],0,[18128,60384],[30011,60386],[34917,60387],[22710,60389],[14108,60390],[60391,
-140685],[15444,60394],[37505,60397],[60398,139642],[37680,60400],[60402,149968],[27705,60403],[60406,134904],[34855,60407],[35061,60408],[60409,141606],[60410,164979],[60411,137137],[28344,60412],[60413,150058],[60414,137248],[14756,60415],0,0,[17727,60419],[26294,60420],[60421,171181],[60422,170148],[35139,60423],[16607,60427],[60428,136714],[14753,60429],[60430,145199],[60431,164072],[60432,136133],[29101,60433],[33638,60434],[60436,168360],0,[19639,60438],[60439,159919],[60440,166315],[60445,147834],
-[31555,60446],[31102,60447],[28597,60449],[60450,172767],[27139,60451],[60452,164632],[21410,60453],[60454,159239],[37823,60455],[26678,60456],[38749,59389,60457],[60458,164207],[60460,158133],[60461,136173],[60462,143919],[23941,60464],[60465,166960],[22293,60467],[38947,60468],[60469,166217],[23979,60470],[60471,149896],[26046,60472],[27093,60473],[21458,60474],[60475,150181],[60476,147329],[15377,60477],[26422,60478],[60482,139169],[13770,60490],[18682,60493],0,[30728,60496],[37461,60497],[17394,
-60499],[17375,60501],[23032,60505],0,[22155,60518],[60520,169449],[36882,60541],[21953,60546],[17673,60551],[32383,60552],[28502,60553],[27313,60554],[13540,60556],[60558,161949],[14138,60559],0,[60562,163876],[60565,162366],[15851,60567],[60569,146615],[60574,156248],[22207,60575],[36366,60577],[23405,60578],[25566,60581],0,[25904,60585],[22061,60586],[21530,60588],[60591,171416],[19581,60592],[22050,60593],[22046,60594],[32585,60595],[22901,60597],[60598,146752],[34672,60599],[33047,60604],[40286,
-60605],[36120,60606],[30267,60607],[40005,60608],[30286,60609],[30649,60610],[37701,60611],[21554,60612],[33096,60613],[33527,60614],[22053,60615],[33074,60616],[33816,60617],[32957,60618],[21994,60619],[31074,60620],[22083,60621],[21526,60622],[60623,134813],[13774,60624],[22021,57509,60625],[22001,60626],[26353,60627],[60628,164578],[13869,60629],[30004,60630],[22E3,60631],[21946,60632],[21655,60633],[21874,60634],[60635,134209],[60636,134294],[24272,57652,60637],[60639,134774],[60640,142434],[60641,
-134818],[40619,60642],[32090,60643],0,[60645,135285],[25245,60646],[38765,60647],[21652,60648],[36045,60649],[29174,60650],[37238,60651],[25596,60652],[25529,60653],[25598,60654],[21865,60655],[60656,142147],[40050,60657],[60658,143027],[20890,60659],[13535,60660],[60661,134567],[20903,60662],[21581,60663],[21790,60664],[21779,60665],[30310,60666],[36397,60667],[60668,157834],[30129,60669],[32950,60670],[34820,60671],0,[35015,60673],[33206,60674],[33820,60675],[17644,60677],[29444,60678],[33547,60681],
-[22139,60683],[37232,60690],[37384,60692],[60696,134905],[29286,60697],[18254,60699],[60701,163833],[16634,60703],[40029,60704],[25887,60705],[18675,60707],[60708,149472],[60709,171388],0,[60713,161187],60715,[60716,155720],[29091,60718],[32398,60719],[40272,60720],[13687,60723],[27826,60725],[21351,60726],[14812,60728],[60731,149016],[33325,60734],[21579,60735],60739,[14930,60740],[29556,60742],[60743,171692],[19721,60744],[39917,60745],0,[19547,60748],[60751,171998],[33884,60752],[60754,160434],
-[25390,60757],[32037,60758],[14890,60761],[36872,60762],[21196,60763],[15988,60764],[13946,60765],[17897,60766],[60767,132238],[30272,60768],[23280,60769],[60770,134838],[30842,60771],[18358,60772],[22695,60773],[16575,60774],[22140,60775],[39819,60776],[23924,60777],[30292,60778],[60779,173108],[40581,60780],[19681,60781],0,[14331,60783],[24857,60784],[60786,148466],60787,[22109,60788],[60792,171526],[21044,60793],[13741,60795],0,[40316,60797],[31830,60798],[39737,60799],[22494,60800],[23635,60802],
-[25811,60803],[60804,169168],[60805,156469],[34477,60807],[60808,134440],[60811,134513],60812,[20990,60813],[60814,139023],[23950,60815],[38659,60816],[60817,138705],[40577,60818],[36940,60819],[31519,60820],[39682,60821],[23761,60822],[31651,60823],[25192,60824],[25397,60825],[39679,60826],[31695,60827],[39722,60828],[31870,60829],0,[31810,60831],[31878,60832],[39957,60833],[31740,60834],[39689,60835],0,39982,[40794,60839],[21875,60840],[23491,60841],[20477,60842],[40600,60843],[20466,60844],[21088,
-60845],[21201,60847],[22375,60848],[20566,60849],[22967,60850],[24082,60851],[38856,60852],[40363,60853],[36700,60854],[21609,60855],[38836,60856],[39232,60857],[38842,60858],[21292,60859],[24880,60860],[26924,60861],[21466,60862],[39946,60863],[40194,60864],[19515,60865],[38465,60866],[27008,60867],[20646,60868],[30022,60869],[60870,137069],[39386,60871],[21107,60872],60873,[37209,60874],[38529,60875],[37212,60876],60877,[37201,60878],[60879,167575],[25471,60880],[27338,60882],[22033,60883],[37262,
-60884],[30074,60885],[25221,60886],[29519,60888],[31856,60889],[60890,154657],60892,[30422,60894],[39837,60895],[20010,60896],[60897,134356],[33726,60898],[34882,60899],60900,[23626,60901],[27072,60902],0,0,[21023,60905],[24053,60906],[20174,60907],[27697,60908],[60909,131570],[20281,60910],[21660,60911],0,[21146,60913],[36226,60914],[13822,60915],0,[13811,60917],60918,[27474,60919],[37244,60920],[40869,60921],[39831,60922],[38958,60923],[39092,60924],[39610,60925],[40616,60926],[40580,60927],[31508,
-60929],60930,[27642,60931],[34840,60932],[32632,60933],60934,[22048,60935],[60936,173642],[36471,60937],[40787,60938],60939,[36308,60940],[36431,60941],[40476,60942],[36353,60943],[25218,60944],[60945,164733],[36392,60946],[36469,60947],[31443,60948],[31294,60950],[30936,60951],[27882,60952],[35431,60953],[30215,60954],[40742,60956],[27854,60957],[34774,60958],[30147,60959],[60960,172722],[30803,60961],[36108,60963],[29410,60964],[29553,60965],[35629,60966],[29442,60967],[29937,60968],[36075,60969],
-[60970,150203],[34351,60971],[24506,60972],[34976,60973],[17591,60974],60975,[60977,159237],60978,[35454,60979],[60980,140571],60981,[24829,60982],[30311,60983],[39639,60984],[40260,60985],[37742,58859,60986],[39823,60987],[34805,60988],60989,0,[36087,60991],[29484,60992],[38689,60993],[39856,60994],[13782,60995],[29362,60996],[19463,60997],[31825,60998],[39242,60999],[24921,61001],[19460,61002],[40598,61003],[24957,61004],61005,[22367,61006],[24943,61007],[25254,61008],[25145,61009],0,[14940,61011],
-[25058,61012],[21418,61013],[25444,61015],[26626,61016],[13778,61017],[23895,61018],[36826,61020],[61021,167481],61022,[20697,61023],[30982,61025],[21298,61026],[38456,61027],[61028,134971],[16485,61029],61030,[30718,61031],61032,[31938,61033],[61034,155418],[31962,61035],[31277,61036],[32870,61037],[32867,61038],[32077,61039],[29957,61040],[29938,61041],[35220,61042],[33306,61043],[26380,61044],[32866,61045],[61046,160902],[32859,61047],[29936,61048],[33027,61049],[30500,61050],[35209,61051],[61052,
-157644],[30035,61053],[34729,61055],[34766,61056],[33224,61057],[34700,61058],[35401,61059],[36013,61060],[35651,61061],[30507,61062],[29944,61063],[34010,61064],[27058,61066],[36262,61067],61068,[35241,58392,61069],0,[28089,61071],[34753,61072],[61073,147473],[29927,61074],[15835,61075],[29046,61076],[24740,57702,61077],[24988,61078],[15569,61079],0,[24695,61081],61082,[32625,61083],0,[24809,61086],[19326,61087],[57344,132423],[37595,57345],[57346,132575],[57347,147397],[34124,57348],[17077,57349],
-[29679,57350],[20917,57351],[13897,57352],[57353,149826],[57354,166372],[37700,57355],[57356,137691],[33518,57357],[57358,146632],[30780,57359],[26436,57360],[25311,57361],[57362,149811],[57363,166314],[57364,131744],[57365,158643],[57366,135941],[20395,57367],[57368,140525],[20488,57369],[57370,159017],[57371,162436],[57372,144896],[57373,150193],[57374,140563],0,[57376,131966],[24484,57377],[57378,131968],[57379,131911],[28379,57380],[57381,132127],20702,[20737,57383],[13434,57384],[20750,57385],
-[39020,57386],[14147,57387],[33814,57388],[57389,149924],[57390,132231],[20832,57391],[57392,144308],[20842,57393],[57394,134143],[57395,139516],[57396,131813],[57397,140592],[57398,132494],[57399,143923],[57400,137603],[23426,57401],[34685,57402],[57403,132531],[57404,146585],[20914,57405],[20920,57406],[40244,57407],[20937,57408],[20943,57409],[20945,57410],[15580,57411],[20947,57412],[57413,150182],[20915,57414],0,0,[20973,57417],[33741,57418],[26942,57419],[57420,145197],[24443,57421],[21003,
-57422],[21030,57423],[21052,57424],[21173,57425],[21079,57426],[21140,57427],[21177,57428],[21189,57429],[31765,57430],[34114,57431],[21216,57432],[34317,57433],[57434,158483],0,[57436,166622],[21833,57437],[28377,57438],[57439,147328],[57440,133460],[57441,147436],[21299,57442],0,[57444,134114],[27851,57445],[57446,136998],[26651,57447],[29653,57448],[24650,57449],[16042,57450],[14540,57451],[57452,136936],[29149,57453],[17570,57454],[21357,57455],[21364,57456],[57457,165547],[21374,57458],0,[57460,
-136598],[57461,136723],[30694,57462],[21395,57463],[57464,166555],[21408,57465],[21419,57466],[21422,57467],[29607,57468],[57469,153458],[16217,57470],[29596,57471],[21441,57472],[21445,57473],[27721,57474],[20041,57475],[22526,57476],[21465,57477],[15019,57478],[57479,134031],[21472,57480],[57481,147435],[57482,142755],[21494,57483],[57484,134263],[21523,57485],[28793,57486],[21803,57487],[26199,57488],[27995,57489],[21613,57490],[57491,158547],[57492,134516],[21853,57493],[21647,57494],[21668,57495],
-[18342,57496],[57497,136973],[57498,134877],[15796,57499],[57500,134477],[57501,166332],[57502,140952],[21831,57503],[19693,57504],[21551,57505],[29719,57506],[21894,57507],[21929,57508],0,[57510,137431],[57511,147514],[17746,57512],[57513,148533],[26291,57514],[57515,135348],[22071,57516],[26317,57517],[57518,144010],[26276,57519],0,[22093,57521],[22095,57522],[30961,57523],[22257,57524],[38791,57525],[21502,57526],[22272,57527],[22255,57528],[22253,57529],[57530,166758],[13859,57531],[57532,135759],
-[22342,57533],[57534,147877],[27758,57535],[28811,57536],[22338,57537],[14001,57538],[57539,158846],[22502,57540],[57541,136214],[22531,57542],[57543,136276],[57544,148323],[22566,57545],[57546,150517],0,[22698,57548],[13665,57549],[22752,57550],[22748,57551],[57552,135740],[22779,57553],[23551,57554],[22339,57555],[57556,172368],[57557,148088],[37843,57558],[13729,57559],[22815,57560],[26790,57561],[14019,57562],[28249,57563],[57564,136766],[23076,57565],0,[57567,136850],[34053,57568],[22985,57569],
-[57570,134478],[57571,158849],[57572,159018],[57573,137180],[23001,57574],[57575,137211],[57576,137138],[57577,159142],[28017,57578],[57579,137256],[57580,136917],[23033,57581],[57582,159301],[23211,57583],[23139,57584],[14054,57585],[57586,149929],0,[14088,57588],[23190,57589],[29797,57590],[23251,57591],[57592,159649],[57593,140628],[57595,137489],[14130,57596],[57597,136888],[24195,57598],[21200,57599],[23414,57600],[25992,57601],[23420,57602],[57603,162318],[16388,57604],[18525,57605],[57606,
-131588],[23509,57607],[57609,137780],[57610,154060],[57611,132517],[23539,57612],[23453,57613],[19728,57614],[23557,57615],[57616,138052],[23571,57617],[29646,57618],[23572,57619],[57620,138405],[57621,158504],[23625,57622],[18653,57623],[23685,57624],[23785,57625],[23791,57626],[23947,57627],[57628,138745],[57629,138807],[23824,57630],[23832,57631],[23878,57632],[57633,138916],[23738,57634],[24023,57635],[33532,57636],[14381,57637],[57638,149761],[57639,139337],[57640,139635],[33415,57641],[14390,
-57642],[15298,57643],[24110,57644],[27274,57645],0,57647,[57648,148668],[57649,134355],[21414,57650],[20151,57651],0,[21416,57653],[57654,137073],[24073,57655],57656,[57657,164994],[24313,57658],[24315,57659],[14496,57660],[24316,57661],[26686,57662],[37915,57663],[24333,57664],[57665,131521],[57666,194708],[15070,57667],[57669,135994],[24378,57670],[57671,157832],[57672,140240],[57674,140401],[24419,57675],[57677,159342],[24434,57678],[37696,57679],[57680,166454],[24487,57681],[23990,57682],[15711,
-57683],[57684,152144],[57685,139114],[57686,159992],[57687,140904],[37334,57688],[57689,131742],[57690,166441],[24625,57691],[26245,57692],[14691,57694],[15815,57695],[13881,57696],[22416,57697],[57698,141236],[31089,57699],[15936,57700],[24734,57701],0,0,[57704,149890],[57705,149903],[57706,162387],[29860,57707],[20705,57708],[23200,57709],[24932,57710],[24898,57712],[57713,194726],[57714,159442],[24961,57715],[20980,57716],[57717,132694],[24967,57718],[23466,57719],[57720,147383],[57721,141407],
-[25043,57722],[57723,166813],[57724,170333],[25040,57725],[14642,57726],[57727,141696],[57728,141505],[24611,57729],[24924,57730],[25886,57731],[25483,57732],[57733,131352],[25285,57734],[57735,137072],[25301,57736],[57737,142861],[25452,57738],[57739,149983],[14871,57740],[25656,57741],[25592,57742],[57743,136078],[57744,137212],[28554,57746],[57747,142902],0,[57750,153373],[25825,57751],[25829,57752],[38011,57753],[14950,57754],[25658,57755],[14935,57756],[25933,57757],[28438,57758],[57759,150056],
-[57760,150051],[25989,57761],[25965,57762],[25951,57763],0,[26037,57765],[57766,149824],[19255,57767],[26065,57768],[16600,57769],[57770,137257],57771,[26083,57772],[24543,57773],[57774,144384],[26136,57775],[57776,143863],[57777,143864],[26180,57778],[57779,143780],[57780,143781],[26187,57781],[57782,134773],[26215,57783],[57784,152038],[26227,57785],0,[57788,143921],[57789,165364],[57790,143816],[57791,152339],[30661,57792],[57793,141559],[39332,57794],[26370,57795],[57796,148380],[57797,150049],
-[27130,57799],[57800,145346],0,[26471,57802],[26466,57803],[57804,147917],[57805,168173],[26583,57806],[17641,57807],[26658,57808],[28240,57809],[37436,57810],[26625,57811],[57812,144358],[57813,159136],[26717,57814],[57815,144495],[27105,57816],[27147,57817],[57818,166623],[26995,57819],[26819,57820],[57821,144845],[26881,57822],[26880,57823],[14849,57825],[57826,144956],[15232,57827],[26540,57828],[26977,57829],[57830,166474],[17148,57831],[26934,57832],[27032,57833],[15265,57834],[57835,132041],
-[33635,57836],[20624,57837],[27129,57838],[57839,144985],[57840,139562],[27205,57841],[57842,145155],[27293,57843],[15347,57844],[26545,57845],[27336,57846],[57847,168348],[15373,57848],[27421,57849],[57850,133411],[24798,57851,60308],[27445,57852],[27508,57853],[57854,141261],[28341,57855],[57856,146139],0,[57858,137560],[14144,57859],[21537,57860],[57861,146266],[27617,57862],[57863,147196],[27612,57864],[27703,57865],[57866,140427],[57867,149745],[57868,158545],[27738,57869],[33318,57870],[27769,
-57871],[57872,146876],[17605,57873],[57874,146877],[57875,147876],[57876,149772],[57877,149760],[57878,146633],[14053,57879],[15595,57880],[57881,134450],[39811,57882],[57883,143865],[57884,140433],[32655,57885],[26679,57886],[57887,159013],[57888,159137],[57889,159211],[28054,57890],[27996,57891],[28284,57892],[28420,57893],[57894,149887],[57895,147589],[57896,159346],[34099,57897],[57898,159604],[20935,57899],0,0,[33838,57902],[57903,166689],0,[57905,146991],[29779,57906],[57907,147330],[31180,
-57908],[28239,57909],[23185,57910],[57911,143435],[28664,57912],[14093,57913],[28573,57914],[57915,146992],[28410,57916],[57917,136343],[57918,147517],[17749,57919],[37872,57920],[28484,57921],[28508,57922],[15694,57923],[28532,57924],[57925,168304],[15675,57926],[28575,57927],[57928,147780],[28627,57929],[57930,147601],[57931,147797],[57932,147513],[57933,147440],[57934,147380],[57935,147775],[20959,57936],[57937,147798],[57938,147799],[57939,147776],[57940,156125],[28747,57941],[28798,57942],[28839,
-57943],0,[28876,57945],[28885,57946],[28886,57947],[28895,57948],[16644,57949],[15848,57950],[29108,57951],[29078,57952],[57953,148087],[28971,57954],[28997,57955],[23176,57956],[29002,57957],0,[57960,148325],[29007,57961],[37730,57962],[57963,148161],[28972,57964],[57965,148570],[57966,150055],[57967,150050],[29114,57968],[57969,166888],[28861,57970],[29198,57971],[37954,57972],[29205,57973],[22801,57974],[37955,57975],[29220,57976],[37697,57977],[57978,153093],[29230,57979],[29248,57980],[57981,
-149876],[26813,57982],[29269,57983],[29271,57984],[15957,57985],[57986,143428],[26637,57987],[28477,57988],[29314,57989],0,[29483,57991],[57992,149539],[57993,165931],[18669,57994],[57995,165892],[29480,57996],[29486,57997],[29647,57998],[29610,57999],[58E3,134202],[58001,158254],[29641,58002],[29769,58003],[58004,147938],[58005,136935],[58006,150052],[26147,58007],[14021,58008],[58009,149943],[58010,149901],[58011,150011],[29687,58012],[29717,58013],[26883,58014],[58015,150054],[29753,58016],[16087,
-58018],0,[58020,141485],[29792,58021],[58022,167602],[29767,58023],[29668,58024],[29814,58025],[33721,58026],[29804,58027],[29812,58029],[37873,58030],[27180,58031],[29826,58032],[18771,58033],[58034,150156],[58035,147807],[58036,150137],[58037,166799],[23366,58038],[58039,166915],[58040,137374],[29896,58041],[58042,137608],[29966,58043],[29982,58045],[58046,167641],[58047,137803],[23511,58048],[58049,167596],[37765,58050],[30029,58051],[30026,58052],[30055,58053],[30062,58054],[58055,151426],[16132,
-58056],[58057,150803],[30094,58058],[29789,58059],[30110,58060],[30132,58061],[30210,58062],[30252,58063],[30289,58064],[30287,58065],[30319,58066],58067,[58068,156661],[30352,58069],[33263,58070],[14328,58071],[58072,157969],[58073,157966],[30369,58074],[30373,58075],[30391,58076],[30412,58077],[58078,159647],[33890,58079],[58080,151709],[58081,151933],[58082,138780],[30494,58083],[30502,58084],[30528,58085],[25775,58086],[58087,152096],[30552,58088],[58089,144044],[30639,58090],[58091,166244],[58092,
-166248],[58093,136897],[30708,58094],0,[26826,58098],[30895,58099],[30919,58100],[30931,58101],[38565,58102],[31022,58103],[58104,153056],[30935,58105],[31028,58106],[30897,58107],[58108,161292],[36792,58109],[34948,58110],[58113,140828],[31110,58114],[35072,58115],[26882,58116],[31104,58117],[58118,153687],[31133,58119],[58120,162617],[31036,58121],[31145,58122],[28202,58123],[58124,160038],[16040,58125],[31174,58126],[58127,168205],[31188,58128],0,[21797,62526],0,[62528,134210],[62529,134421],[62530,
-151851],[21904,62531],[62532,142534],[14828,62533],[62534,131905],[36422,62535],[62536,150968],[62537,169189],0,[62539,164030],[30586,62540],[62541,142392],[14900,62542],[18389,62543],[62544,164189],[62545,158194],[62546,151018],[25821,62547],[62548,134524],[62549,135092],[62550,134357],0,[25741,62552],[36478,62553],[62554,134806],0,[62556,135012],[62557,142505],[62558,164438],[62559,148691],0,[62561,134470],[62562,170573],[62563,164073],[18420,62564],[62565,151207],[62566,142530],[39602,62567],[14951,
-62568],[62569,169460],[16365,62570],[13574,62571],[62572,152263],[62573,169940],0,[62575,142660],[40302,62576],[38933,62577],0,[17369,62579],0,[25780,62581],[21731,62582],0,[62584,142282],0,[14843,62586],0,[62588,157402],[62589,157462],[62590,162208],[25834,62591],[62592,151634],[62593,134211],[36456,62594],0,[62596,166732],[62597,132913],0,[18443,62599],[62600,131497],[16378,62601],[22643,62602],[62603,142733],0,[62605,148936],[62606,132348],[62607,155799],[62608,134988],0,[21881,62610],0,[17338,
-62612],0,[19124,62614],[62615,141926],[62616,135325],[33194,62617],[39157,62618],[62619,134556],[25465,62620],[14846,62621],[62622,141173],[36288,62623],[22177,62624],[25724,62625],[15939,62626],0,[62628,173569],[62629,134665],[62630,142031],0,0,[62633,135368],[62634,145858],[14738,62635],[14854,62636],[62637,164507],[13688,62638],[62639,155209],[62640,139463],0,0,[62643,142514],[62644,169760],[13500,62645],[27709,62646],[62647,151099],0,0,[62650,161140],[62651,142987],[62652,139784],[62653,173659],
-[62654,167117],[62655,134778],[62656,134196],[62683,161337],[62684,142286],[62687,142417],[14872,62689],[62691,135367],[62693,173618],[62695,167122],[62696,167321],[62697,167114],[38314,62698],0,[62706,161630],[28992,62708],0,[20822,62385],0,[20616,62487],0,[13459,62489],[20870,62491],[24130,63037],[20997,62495],[21031,62436],[21113,62497],0,[13651,62504],[21442,62505],[21343,62715],0,[21823,62520],0,[21976,59986],[13789,62722],[22049,63067],0,[22100,60044],[60148,135291],0,[60153,135379],0,[61095,
-135934],0,0,[14265,60104],[23745,61099],[23829,63066],[23894,63030],[14392,63036],[20097,62477],[24253,63038],[14612,63042],[25017,63050],[25232,63054],[25368,63056],[25690,63063],[25745,62381],[33133,62709],[33156,59922],[33171,59924],[26624,63080],[15292,63093],[29327,60517],[29389,59781],0,[29497,59785],[30018,59811],[30172,59817],[16320,59818],[60278,151205],[16343,59820],0,30336,[30348,59824,151388],[16552,59845],[30777,59846],[16643,59855],[31377,59863],[31771,59876],[31981,59884],[32659,62658],
-[32686,59892],0,[33535,59936],[22623,59981],[34482,59960],0,[34699,59963],[35143,59969],0,[35369,59972],0,[36465,59988],[60484,164233],[36528,59990],0,[37214,62443],[37260,62441],[39182,60051],[39196,60054],0,0,[39809,60066],[40384,60080],[40339,60078],[40620,60085],[19857,60540],0,37818,[40571,60084],[28809,63148],[29512,59788],0,[31129,59858],[36791,59997],0,[39234,60056],{s:193},8364,{s:4},[12443,63518],[12444,63519],[11904,63520],{f:5,c:62211},[62216,131340],62217,[62218,131281],[62219,131277],
-{f:2,c:62220},[62222,131275],[62223,139240],62224,[62225,131274],{f:4,c:62226},[62230,131342],{f:2,c:62231},{f:2,c:62776},[62778,138177],[62779,194680],[12205,38737,62780],[62781,131206],[20059,62782],[20155,62783],[13630,62784],[23587,62785],[24401,62786],[24516,62787],[14586,62788],[25164,62789],[25909,62790],[27514,62791],[27701,62792],[27706,62793],[28780,62794],[29227,62795],[20012,62796],[29357,62797],[62798,149737],[32594,62799],[31035,62800],[31993,62801],[32595,62802],[62803,156266],[13505,
-62804],[62806,156491],[32770,62807],[32896,62808],[62809,157202],[62810,158033],[21341,62811],[34916,62812],[35265,62813],[62814,161970],[35744,62815],[36125,62816],[38021,62817],[38264,62818],[38271,62819],[38376,62820],[62821,167439],[38886,62822],[39029,62823],[39118,62824],[39134,62825],[39267,62826],[62827,17E4],[40060,62828],[40479,62829],[40644,62830],[27503,62831],[62832,63751],[20023,62833],[62834,131207],[38429,62835],[25143,62836],[38050,62837],[11908,63521],[11910,63522],[11911,63523],
-[11912,63524],[11914,63525],[11916,63526],[11917,63527],[11925,63528],[11932,63529],[11941,63531],[11943,63532],[11946,63533],[11948,63534],[11950,63535],[11958,63536],[11964,63537],[11966,63538],[11978,63540],[11980,63541],[11981,63542],[11983,63543],[11990,63544],[11991,63545],[11998,63546],[62368,172969],[62369,135493],[25866,62371],[20029,62374],[28381,62375],[40270,62376],[37343,62377],[62380,161589],[20250,62382],[20264,62383],[20392,62384],[20852,62386],[20892,62387],[20964,62388],[21153,62389],
-[21160,62390],[21307,62391],[21326,62392],[21457,62393],[21464,62394],[22242,62395],[22768,62396],[22788,62397],[22791,62398],[22834,62399],[22836,62400],[23398,62401],[23454,62402],[23455,62403],[23706,62404],[24198,62405],[24635,62406],[25993,62407],[26622,62408],[26628,62409],[26725,62410],[27982,62411],[28860,62412],[30005,62413],[32420,62414],[32428,62415],[32442,62416],[32455,62417],[32463,62418],[32479,62419],[32518,62420],[32567,62421],[33402,62422],[33487,62423],[33647,62424],[35270,62425],
-[35774,62426],[35810,62427],[36710,62428],[36711,62429],[36718,62430],[29713,62431],[31996,62432],[32205,62433],[26950,62434],[31433,62435],[30904,62442],[32956,62444],[36107,62446],[33014,62447],[62448,133607],[32927,62451],[40647,62452],[19661,62453],[40393,62454],[40460,62455],[19518,62456],[62457,171510],[62458,159758],[40458,62459],[62460,172339],[13761,62461],[28314,62463],[33342,62464],[29977,62465],[18705,62467],[39532,62468],[39567,62469],[40857,62470],[31111,62471],[62472,164972],[62473,
-138698],[62474,132560],[62475,142054],[20004,62476],[20096,62478],[20103,62479],[20159,62480],[20203,62481],[20279,62482],[13388,62483],[20413,62484],[15944,62485],[20483,62486],[13437,62488],[13477,62490],[22789,62492],[20955,62493],[20988,62494],[20105,62496],[21136,62498],[21287,62499],[13767,62500],[21417,62501],[13649,62502],[21424,62503],[21539,62506],[13677,62507],[13682,62508],[13953,62509],[21651,62510],[21667,62511],[21684,62512],[21689,62513],[21712,62514],[21743,62515],[21784,62516],[21795,
-62517],[21800,62518],[13720,62519],[13733,62521],[13759,62522],[21975,62523],[13765,62524],[62525,163204],[16467,62538],[62551,135412],[62555,134155],[62574,161992],[62580,155813],[62583,142668],[62585,135287],[62587,135279],[62595,139681],[62609,134550],[16571,62611],[62631,142537],[22098,62641],[62642,134961],[62657,157724],[62659,135375],[62660,141315],[62661,141625],[13819,62662],[62663,152035],[62664,134796],[62665,135053],[62666,134826],[16275,62667],[62668,134960],[62669,134471],[62670,135503],
-[62671,134732],[62673,134827],[62674,134057],[62675,134472],[62676,135360],[62677,135485],[16377,62678],[62679,140950],[25650,62680],[62681,135085],[62682,144372],[62685,134526],[62686,134527],[62688,142421],[62690,134808],[62692,134958],[62694,158544],[21708,62699],[33476,62700],[21945,62701],[62703,171715],[39974,62704],[39606,62705],[62707,142830],[33004,62710],[23580,62711],[62712,157042],[33076,62713],[14231,62714],[62716,164029],[37302,62717],[62718,134906],[62719,134671],[62720,134775],[62721,
-134907],[62723,151019],[13833,62724],[62725,134358],[22191,62726],[62727,141237],[62728,135369],[62729,134672],[62730,134776],[62731,135288],[62732,135496],[62733,164359],[62734,136277],[62735,134777],[62736,151120],[62737,142756],[23124,62738],[62739,135197],[62740,135198],[62741,135413],[62742,135414],[22428,62743],[62744,134673],[62745,161428],[62746,164557],[62747,135093],[62748,134779],[62749,151934],[14083,62750],[62751,135094],[62752,135552],[62753,152280],[62754,172733],[62755,149978],[62756,
-137274],[62757,147831],[62758,164476],[22681,62759],[21096,62760],[13850,62761],[62762,153405],[31666,62763],[23400,62764],[18432,62765],[19244,62766],[40743,62767],[18919,62768],[39967,62769],[39821,62770],[62771,154484],[62772,143677],[22011,62773],[13810,62774],[22153,62775],[23870,63028],[23880,63029],[15868,63031],[14351,63032],[23972,63033],[23993,63034],[14368,63035],[24357,63039],[24451,63040],[14600,63041],[14655,63043],[14669,63044],[24791,63045],[24893,63046],[23781,63047],[14729,63048],
-[25015,63049],[25039,63051],[14776,63052],[25132,63053],[25317,63055],[14840,63057],[22193,63058],[14851,63059],[25570,63060],[25595,63061],[25607,63062],[14923,63064],[25792,63065],[40863,63068],[14999,63069],[25990,63070],[15037,63071],[26111,63072],[26195,63073],[15090,63074],[26258,63075],[15138,63076],[26390,63077],[15170,63078],[26532,63079],[15192,63081],[26698,63082],[26756,63083],[15218,63084],[15217,63085],[15227,63086],[26889,63087],[26947,63088],[29276,63089],[26980,63090],[27039,63091],
-[27013,63092],[27094,63094],[15325,63095],[27237,63096],[27252,63097],[27249,63098],[27266,63099],[15340,63100],[27289,63101],[15346,63102],[27307,63103],[27317,63104],[27348,63105],[27382,63106],[27521,63107],[27585,63108],[27626,63109],[27765,63110],[27818,63111],[15563,63112],[27906,63113],[27910,63114],[27942,63115],[28033,63116],[15599,63117],[28068,63118],[28081,63119],[28181,63120],[28184,63121],[28201,63122],[28294,63123],[63124,166336],[28347,63125],[28386,63126],[28378,63127],[40831,63128],
-[28392,63129],[28393,63130],[28452,63131],[28468,63132],[15686,63133],[63134,147265],[28545,63135],[28606,63136],[15722,63137],[15733,63138],[29111,63139],[23705,63140],[15754,63141],[28716,63142],[15761,63143],[28752,63144],[28756,63145],[28783,63146],[28799,63147],[63149,131877],[17345,63150],[13809,63151],[63152,134872],[13902,58134],[15789,58172],[58173,154725],[26237,58183],[31860,58188],[29837,58197],[32402,58215],[17667,58232],[58260,151480],[58270,133901],[58277,158474],[13438,58311],[58317,
-143087],[58325,146613],[58343,159385],[34673,58364],[25537,58385],[30583,58387],[35210,58390],[58406,147343],[35660,58415],[58440,150729],[18730,58464],[58471,172052],[58472,165564],[58473,165121],[15088,58490],[28815,58511],[58529,140922],[58637,158120],[58646,148043],[26760,58662],[58664,139611],[40802,58702],[37830,58793],[58802,131967],[37734,58888],[37519,58901],[34324,58954],[58986,173147],[16784,59010],[26511,59045],[26654,59048],[14435,59051],[59077,149996],[15129,59128],[33942,59176],[59241,
-149858],[14818,59254],[33920,59259],[17262,59328],[38769,59402],[39323,59427],[18733,59499],[28439,59703],[59704,160009],[28838,59746],[59752,150095],[32357,59753],[23855,59755],[15859,59756],[59758,150109],[59759,137183],[32164,59760],[33830,59761],[21637,59762],[59763,146170],[59765,131604],[22398,59766],[59767,133333],[59768,132633],[16357,59769],[59770,139166],[59771,172726],[28675,59772],[59773,168283],[23920,59774],[29583,59775],[59777,166489],[59778,168992],[20424,59779],[32743,59780],[29456,
-59782],[29496,59784],[29505,59787],[16041,59789],[29173,59792],[59793,149746],[29665,59794],[16074,59796],[16081,59798],[29721,59801],[29726,59802],[29727,59803],[16098,59804],[16112,59805],[16116,59806],[16122,59807],[29907,59808],[16142,59809],[16211,59810],[30061,59812],[30066,59813],[30093,59814],[16252,59815],[30152,59816],[30285,59819],[30324,59821],[16348,59822],[30330,59823],[29064,59825],[22051,59826],[35200,59827],[16413,59829],[30531,59830],[16441,59831],[16453,59833],[13787,59834],[30616,
-59835],[16490,59836],[16495,59837],[30654,59839],[30667,59840],[30744,59842],[30748,59844],[30791,59847],[30801,59848],[30822,59849],[33864,59850],[59851,152885],[31027,59852],[31026,59854],[16649,59856],[31121,59857],[31238,59860],[16743,59862],[16818,59864],[31420,59865],[33401,59866],[16836,59867],[31439,59868],[31451,59869],[16847,59870],[31586,59872],[31596,59873],[31611,59874],[31762,59875],[16992,59877],[17018,59878],[31867,59879],[31900,59880],[17036,59881],[31928,59882],[17044,59883],[36755,
-59885],[28864,59886],[59887,134351],[32207,59888],[32212,59889],[32208,59890],[32253,59891],[32692,59893],[29343,59894],[17303,59895],[32800,59896],[32805,59897],[32814,59899],[32817,59900],[32852,59901],[22452,59903],[28832,59904],[32951,59905],[33001,59906],[17389,59907],[33036,59908],[33038,59910],[33042,59911],[33044,59913],[17409,59914],[15161,59915],[33110,59916],[33113,59917],[33114,59918],[17427,59919],[33148,59921],[17445,59923],[17453,59925],[33189,59926],[22511,59927],[33217,59928],[33252,
-59929],[33364,59930],[17551,59931],[33398,59933],[33482,59934],[33496,59935],[17584,59937],[33623,59938],[38505,59939],[33797,59941],[28917,59942],[33892,59943],[33928,59945],[17668,59946],[33982,59947],[34017,59948],[34040,59949],[34064,59950],[34104,59951],[34130,59952],[17723,59953],[34159,59954],[34160,59955],[34272,59956],[17783,59957],[34418,59958],[34450,59959],[34543,59961],[38469,59962],[17926,59964],[17943,59965],[34990,59966],[35071,59967],[35108,59968],[35217,59970],[59971,162151],[35384,
-59973],[35476,59974],[35508,59975],[35921,59976],[36052,59977],[36082,59978],[36124,59979],[18328,59980],[36291,59982],[18413,59983],[36410,59985],[22356,59987],[22005,59989],[18487,59991],[36558,59992],[36578,59993],[36580,59994],[36589,59995],[36594,59996],[36801,59998],[36810,59999],[36812,6E4],[36915,60001],[18605,60003],[39136,60004],[37395,60005],[18718,60006],[37416,60007],[37464,60008],[37483,60009],[37553,60010],[37550,60011],[37567,60012],[37603,60013],[37611,60014],[37619,60015],[37620,
-60016],[37629,60017],[37699,60018],[37764,60019],[37805,60020],[18757,60021],[18769,60022],[37911,60024],[37917,60026],[37933,60027],[37950,60028],[18794,60029],[37972,60030],[38009,60031],[38189,60032],[38306,60033],[18855,60034],[38388,60035],[38451,60036],[18917,60037],[18980,60039],[38720,60040],[18997,60041],[38834,60042],[38850,60043],[19172,60045],[39097,60047],[19225,60048],[39153,60049],[22596,60050],[39193,60052],[39223,60055],[39261,60057],[39266,60058],[19312,60059],[39365,60060],[19357,
-60061],[39484,60062],[39695,60063],[39785,60065],[39901,60067],[39921,60068],[39924,60069],[19565,60070],[39968,60071],[14191,60072],[60073,138178],[40265,60074],[40702,60076],[22096,60077],[40381,60079],[40444,60081],[38134,60082],[36790,60083],[40625,60086],[40637,60087],[40646,60088],[38108,60089],[40674,60090],[40689,60091],[40696,60092],[40772,60094],[60095,131220],[60096,131767],[60097,132E3],[38083,60099],[60101,132311],[38081,60103],[60105,132565],[60106,132629],[60107,132726],[60108,136890],
-[22359,60109],[29043,60110],[60111,133826],[60112,133837],[60113,134079],[60115,194619],[60116,134091],[21662,60117],[60118,134139],[60119,134203],[60120,134227],[60121,134245],[60122,134268],[60124,134285],[60126,134325],[60127,134365],[60128,134381],[60129,134511],[60130,134578],[60131,134600],[60135,134660],[60136,134670],[60137,134871],[60138,135056],[60139,134957],[60140,134771],[60142,135100],[60144,135260],[60145,135247],[60146,135286],[60149,135304],[60150,135318],[13895,60151],[60152,135359],
-[60154,135471],[60155,135483],[21348,60156],[60158,135907],[60159,136053],[60160,135990],[60162,136567],[60163,136729],[60164,137155],[60165,137159],[28859,60167],[60168,137261],[60169,137578],[60170,137773],[60171,137797],[60172,138282],[60173,138352],[60174,138412],[60175,138952],[60177,138965],[60178,139029],[29080,60179],[60181,139333],[27113,60182],[14024,60183],[60184,139900],[60185,140247],[60186,140282],[60187,141098],[60188,141425],[60189,141647],[60191,141671],[60192,141715],[60193,142037],
-[60195,142056],[60197,142094],[60199,142143],[60202,142412],[60204,142472],[60205,142519],[60206,154600],[60207,142600],[60208,142610],[60209,142775],[60210,142741],[60211,142914],[60212,143220],[60213,143308],[60214,143411],[60215,143462],[60216,144159],[60217,144350],[60222,144743],[60223,144883],[60227,144922],[60228,145174],[22709,60231],[60234,146087],[60237,146961],[60238,147129],[60243,147737],[60245,148206],[60246,148237],[60248,148276],[60249,148374],[60258,148484],[60259,148694],[22408,
-60260],[60261,149108],[60263,149295],[60271,149522],[60272,149755],[60273,150037],[60275,150208],[22885,60277],[60279,151430],[60282,151596],[22335,60284],[60286,152217],[60287,152601],[60291,152646],[60292,152686],[60296,152895],[60298,152926],[60300,152930],[60301,152934],[60302,153543],[60304,153693],[60309,153859],[60312,154286],[60313,154505],[60314,154630],[22433,60316],[29009,60317],[60319,155906],[60322,156082],[60325,156674],[60326,156746],[60330,156804],[60334,156808],[60336,156946],[60338,
-157119],[60339,157365],[22201,60347],[60349,157436],[13848,60355],[60357,157593],[60358,157806],[60360,157790],[60362,157895],[60366,157990],[60368,158009],[60371,158202],[60373,158253],[60378,158260],[60379,158555],[60383,158621],[60385,158884],[60388,159150],[60392,159819],[60393,160205],[60395,160384],[60396,160389],[60399,160395],[60401,160486],[38047,60404],[60405,160848],[14009,60416],[60424,161740],[60425,161880],[22230,60426],[60435,162269],[60441,162301],[60442,162314],[60443,162571],[60444,
-163174],[60448,163849],[60459,163875],[60463,163912],[60466,163971],[60479,163984],[60480,164084],[60481,164142],[60483,164175],[60485,164271],[60486,164378],[60487,164614],[60488,164655],[60489,164746],[60491,164968],[60492,165546],[25574,60494],[60495,166230],[60498,166328],[60500,166375],[60502,166376],[60503,166726],[60504,166868],[60506,166921],[60508,167877],[60509,168172],[60511,168208],[60512,168252],[15863,60513],[60514,168286],[60515,150218],[36816,60516],[60519,169191],[60521,169392],[60522,
-169400],[60523,169778],[60524,170193],[60525,170313],[60526,170346],[60527,170435],[60528,170536],[60529,170766],[60530,171354],[60531,171419],[32415,60532],[60533,171768],[60534,171811],[19620,60535],[38215,60536],[60537,172691],[29090,60538],[60539,172799],[60542,173515],[19868,60543],[60544,134300],[36798,60545],[36794,60547],[60548,140464],[36793,60549],[60550,150163],[20202,60555],[60557,166700],[36480,60560],[60561,137205],[60563,166764],[60564,166809],[60566,157359],[60568,161365],[60570,153141],
-[60571,153942],[20122,60572],[60573,155265],[60576,134765],[60579,147080],[60580,150686],[60583,137206],[60584,137339],[60587,154698],[60589,152337],[15814,60590],[60596,155352],[19996,60600],[60601,135146],[60602,134473],[60603,145082],[60638,151880],[21982,60644],[34694,60672],[60676,135361],[60679,149254],[23440,60680],[60682,157843],[60684,141044],[60685,163119],[60686,147875],[60687,163187],[60688,159440],[60689,160438],[60691,135641],[60693,146684],[60694,173737],[60695,134828],[60698,138402],
-[60700,151490],[60702,135147],[60706,142752],[60710,135148],[60711,134666],[60714,135149],[60717,135559],[19994,60721],[19972,60722],[23309,60724],[13996,60727],[21373,60729],[13989,60730],[22682,60732],[60733,150382],[22442,60736],[60737,154261],[60738,133497],[60741,140389],[60746,146686],[60747,171824],[60749,151465],[60750,169374],[60753,146870],[60755,157619],[60756,145184],[60759,147191],[60760,146988],[60785,143578],[60789,135849],[22439,60790],[60791,149859],[60794,159918],[60801,137068],
-[60806,160100],[60809,159010],[60810,150242],[39963,60837],[60838,149822],[15878,60846],[60881,159011],[60887,132092],[60891,146685],[60893,149785],[22394,60904],[21722,60912],[29050,60928],[60949,150135],[60955,166490],[60962,194624],[60976,137275],[61E3,155993],[61014,144373],[61019,166850],[61024,138566],[61054,159441],[13877,61065],[61084,166701],[21024,61088],[15384,61089],[61090,146631],[61091,155351],[61092,161366],[61093,152881],[61094,137540],[61096,170243],[61097,159196],[61098,159917],
-[61100,156077],[61101,166415],[61102,145015],[61103,131310],[61104,157766],[61105,151310],[17762,61106],[23327,61107],[61108,156492],[40784,61109],[40614,61110],[61111,156267],[20962,57415],[21314,57416],[26285,57520],[22620,57547],[21843,57566],[15749,57594],[24928,57608],[18606,57668],[38845,57676],[57693,137335],[24755,57703],[33828,57711],[38932,57748],[57749,147596],[57764,143486],[57787,138813],[15147,57798],[15666,57824],[57857,132021],[28801,57944],[23708,57959],[58017,132547],[14128,58028],
-[58096,136054],[58097,150034],[58111,166699],[58112,155779],[256,62233],[193,62234],[461,62235],[192,62236],[274,62237],[201,62238],[282,62239],[200,62240],[332,62241],[211,62242],[465,62243],[210,62244],62245,[7870,62246],62247,[7872,62248],[202,62249],[257,62250],[225,62251],[462,62252],[224,62253],[593,62254],[275,62255],[233,62256],[283,62257],[232,62258],[299,62259],[237,62260],[464,62261],[236,62262],[333,62263],[243,62264],[466,62265],[242,62266],[363,62267],[250,62268],[468,62269],[249,62270],
-[470,62271],[472,62272],[474,62273],[476,62274],[252,62275],62276,[7871,62277],62278,[7873,62279],[234,62280],[609,62281],[643,63551],[592,63552],[603,63553],[596,63554],[629,63555],[339,63556],[248,63557],[331,63558],[650,63559],[618,63560],{f:2,c:62282},[11933,63530],[11974,63539],[12003,63547],20539,28158,[62841,171123],62842,[15817,62843],34959,[62845,147790],28791,23797,[19232,62848],[62849,152013],[13657,62850],[62851,154928],24866,[62853,166450],36775,37366,29073,26393,29626,[62859,144001],
-[62860,172295],[15499,62861],[62862,137600],[19216,62863],30948,29698,20910,[62867,165647],[16393,62868],27235,[62870,172730],[16931,62871],34319,31274,[62875,170311],[62876,166634],38741,28749,21284,[62880,139390],37876,30425,[62883,166371],62884,30685,20131,20464,20668,20015,20247,62891,21556,32139,22674,22736,[62896,138678],24210,24217,24514,[62900,141074],25995,[62902,144377],26905,27203,[62905,146531],27903,29184,[62909,148741],29580,[16091,62911],[62912,150035],23317,29881,35715,[62916,154788],
-[62917,153237],31379,31724,31939,32364,33528,34199,62924,34960,62926,36537,62928,36815,34143,39392,37409,62933,[62934,167353],[62935,136255],[16497,62936],[17058,62937],23066,39016,26475,[17014,62944],22333,34262,[62948,149883],33471,[62950,160013],[19585,62951],[62952,159092],23931,[62954,158485],[62955,159678],{f:2,c:62956},23446,62959,32347],"Adobe-GB1":[{f:95,c:32},{f:3,c:12288},[183,12539],713,711,168,12291,12293,8212,65374,8214,[8230,8943],{f:2,c:8216},{f:2,c:8220},{f:2,c:12308},{f:8,c:12296},
-{f:2,c:12310},{f:2,c:12304},177,215,247,8758,{f:2,c:8743},8721,8719,8746,8745,8712,8759,8730,8869,8741,8736,8978,8857,8747,8750,8801,8780,8776,8765,8733,8800,{f:2,c:8814},{f:2,c:8804},8734,8757,8756,9794,9792,176,{f:2,c:8242},8451,65284,164,{f:2,c:65504},8240,167,8470,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,8251,8594,{f:2,c:8592},8595,12307,{f:20,c:9352},{f:20,c:9332},{f:10,c:9312},{f:10,c:12832},{f:12,c:8544},{f:3,c:65281},65509,{f:89,c:65285},65507,{f:83,c:12353},{f:86,c:12449},{f:17,
-c:913},{f:7,c:931},{f:17,c:945},{f:7,c:963},{f:7,c:59277},{f:2,c:65077},{f:2,c:65081},{f:2,c:65087},{f:2,c:65085},{f:4,c:65089},{f:2,c:59284},{f:2,c:65083},{f:2,c:65079},65073,59286,{f:2,c:65075},{f:6,c:1040},1025,{f:32,c:1046},1105,{f:26,c:1078},257,225,462,224,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,234,593,7743,324,328,505,609,{f:37,c:12549},0,{f:76,c:9472},{s:126},21834,38463,22467,25384,21710,21769,21696,30353,30284,34108,30702,33406,30861,29233,38552,
-38797,27688,23433,20474,25353,26263,23736,33018,26696,32942,26114,30414,20985,25942,29100,32753,34948,20658,22885,25034,28595,33453,25420,25170,21485,21543,31494,[12043,20843],30116,24052,25300,36299,38774,25226,32793,22365,38712,32610,29240,[12137,30333],26575,30334,25670,20336,36133,25308,31255,26001,29677,25644,25203,33324,39041,26495,29256,25198,25292,20276,29923,21322,21150,32458,37030,24110,26758,27036,33152,32465,26834,30917,34444,38225,20621,35876,33502,32990,21253,35090,21093,34180,38649,
-20445,22561,39281,23453,25265,25253,26292,35961,40077,29190,26479,30865,24754,21329,21271,36744,32972,36125,38049,20493,29384,22791,24811,28953,34987,22868,33519,26412,31528,23849,32503,29997,27893,36454,36856,36924,[12240,40763],[12112,27604],37145,31508,24444,30887,34006,34109,27605,27609,27606,24065,24199,30201,38381,25949,24330,24517,36767,22721,33218,36991,38491,38829,36793,32534,36140,25153,20415,21464,21342,{f:2,c:36776},36779,36941,26631,24426,33176,34920,40150,24971,21035,30250,24428,25996,
-28626,28392,23486,25672,20853,20912,26564,19993,31177,39292,28851,30149,24182,29627,33760,25773,25320,38069,27874,21338,21187,25615,38082,31636,20271,24091,33334,33046,33162,28196,27850,39539,25429,[12056,21340],21754,34917,22496,19981,24067,27493,31807,37096,24598,25830,29468,35009,26448,25165,36130,30572,36393,37319,24425,33756,34081,39184,21442,34453,27531,24813,24808,28799,33485,33329,20179,27815,34255,25805,31961,27133,26361,33609,21397,31574,20391,20876,27979,23618,36461,25554,21449,33580,33590,
-26597,30900,25661,23519,23700,24046,35815,25286,26612,35962,25600,25530,34633,39307,35863,32544,38130,20135,38416,39076,26124,29462,22330,23581,24120,38271,20607,32928,[12058,21378],25950,30021,21809,20513,36229,25220,38046,26397,22066,28526,24034,21557,28818,36710,25199,25764,25507,24443,28552,37108,[12162,33251],[12192,36784],23576,26216,24561,27785,38472,36225,34924,25745,31216,22478,27225,25104,21576,20056,31243,24809,28548,35802,25215,36894,39563,31204,21507,30196,25345,21273,27744,36831,24347,
-39536,32827,40831,20360,23610,[12186,36196],32709,26021,28861,20805,20914,[12173,34411],23815,23456,25277,37228,30068,36364,31264,24833,31609,20167,32504,30597,19985,33261,21021,20986,27249,21416,36487,38148,38607,28353,38500,26970,30784,20648,30679,25616,35302,22788,25571,24029,31359,26941,20256,33337,21912,20018,30126,31383,24162,24202,38383,21019,21561,28810,25462,38180,22402,26149,26943,37255,21767,28147,32431,34850,25139,32496,30133,33576,30913,38604,36766,24904,29943,35789,27492,21050,36176,
-27425,32874,33905,22257,21254,20174,19995,20945,31895,37259,31751,20419,36479,31713,31388,25703,23828,20652,33030,30209,31929,28140,32736,26449,23384,[12072,23544],30923,25774,25619,25514,25387,38169,25645,36798,31572,30249,25171,[12068,22823],21574,[12109,27513],20643,25140,24102,27526,20195,36151,34955,24453,36910,24608,32829,25285,20025,21333,37112,25528,32966,26086,27694,20294,24814,28129,35806,24377,34507,24403,25377,20826,33633,26723,[12049,20992],25443,36424,20498,23707,31095,23548,21040,31291,
-24764,36947,30423,24503,24471,30340,36460,28783,30331,31561,30634,20979,37011,22564,20302,28404,36842,25932,31515,29380,28068,32735,23265,25269,24213,22320,33922,31532,24093,24351,36882,32532,39072,25474,28359,30872,28857,20856,38747,22443,30005,20291,30008,24215,24806,22880,28096,27583,30857,21500,38613,20939,20993,25481,21514,38035,35843,36300,29241,30879,34678,36845,35853,21472,19969,30447,21486,38025,39030,[12237,40718],38189,23450,35746,20002,19996,20908,33891,25026,21160,26635,20375,24683,20923,
-27934,20828,25238,[12099,26007],38497,[12182,35910],36887,30168,37117,30563,27602,29322,29420,35835,22581,30585,36172,26460,38208,32922,24230,28193,22930,31471,30701,38203,27573,26029,32526,22534,20817,38431,23545,22697,21544,36466,25958,39039,22244,38045,30462,36929,25479,21702,22810,22842,22427,36530,26421,36346,33333,21057,24816,22549,34558,23784,40517,20420,39069,35769,23077,24694,21380,25212,36943,37122,39295,24681,[12157,32780],[12041,20799],[12159,32819],23572,39285,27953,[12038,20108],36144,
-21457,32602,31567,20240,20047,38400,27861,29648,34281,24070,30058,32763,27146,30718,38034,32321,20961,28902,21453,36820,33539,36137,29359,39277,27867,22346,33459,[12101,26041],32938,25151,38450,22952,20223,35775,32442,25918,33778,[12206,38750],21857,39134,32933,21290,35837,21536,32954,24223,27832,36153,33452,37210,21545,27675,20998,32439,22367,28954,27774,31881,22859,20221,24575,24868,31914,20016,23553,26539,34562,23792,38155,39118,30127,28925,36898,20911,32541,35773,22857,20964,20315,21542,22827,
-25975,32932,23413,25206,25282,36752,24133,27679,31526,20239,20440,26381,28014,28074,31119,34993,24343,29995,25242,36741,20463,37340,26023,33071,33105,24220,33104,36212,21103,35206,36171,22797,20613,20184,[12201,38428],[12119,29238],33145,36127,23500,35747,38468,22919,32538,21648,22134,22030,35813,25913,27010,38041,30422,28297,[12082,24178],[12130,29976],26438,26577,31487,32925,36214,24863,31174,25954,36195,20872,21018,38050,32568,32923,32434,23703,28207,26464,31705,30347,[12220,39640],33167,32660,
-31957,25630,38224,31295,21578,21733,27468,25601,[12093,25096],40509,33011,30105,21106,[12208,38761],33883,26684,34532,38401,38548,38124,20010,21508,32473,26681,36319,32789,26356,24218,32697,22466,32831,26775,[12079,24037],25915,21151,24685,40858,20379,36524,20844,23467,[12088,24339],24041,27742,25329,36129,20849,38057,21246,27807,33503,29399,22434,26500,36141,22815,36764,33735,21653,31629,20272,27837,23396,22993,[12238,40723],21476,34506,[12219,39592],[12181,35895],32929,25925,39038,22266,38599,21038,
-[12128,29916],21072,23521,25346,35074,20054,25296,24618,26874,20851,23448,20896,35266,31649,39302,32592,24815,28748,36143,20809,[12084,24191],36891,29808,35268,22317,30789,24402,40863,38394,36712,[12225,39740],35809,30328,26690,26588,36330,36149,21053,36746,28378,26829,38149,37101,22269,26524,35065,36807,21704,39608,23401,28023,27686,20133,23475,39559,37219,25E3,37039,38889,21547,28085,23506,20989,21898,32597,32752,25788,25421,26097,25022,24717,28938,27735,27721,22831,26477,33322,22741,22158,35946,
-27627,37085,22909,32791,21495,28009,21621,21917,33655,33743,26680,[12146,31166],21644,20309,21512,30418,35977,38402,27827,28088,36203,35088,40548,36154,22079,[12234,40657],30165,24456,29408,24680,21756,20136,27178,34913,24658,36720,21700,28888,34425,40511,27946,23439,24344,32418,21897,20399,29492,21564,21402,20505,21518,21628,20046,24573,29786,22774,33899,32993,34676,29392,31946,28246,24359,34382,21804,25252,20114,27818,25143,33457,21719,21326,29502,28369,30011,21010,21270,35805,27088,24458,24576,
-28142,22351,27426,29615,26707,36824,32531,25442,24739,21796,30186,35938,28949,28067,23462,24187,33618,24908,40644,30970,34647,31783,30343,20976,24822,29004,26179,24140,24653,35854,28784,25381,36745,24509,24674,34516,22238,27585,24724,24935,21321,24800,26214,36159,31229,20250,28905,27719,35763,35826,32472,33636,26127,23130,39746,27985,28151,35905,27963,20249,[12117,28779],33719,25110,24785,38669,36135,31096,20987,22334,22522,26426,30072,31293,31215,31637,32908,39269,36857,28608,35749,40481,23020,32489,
-32521,21513,26497,26840,36753,31821,38598,21450,24613,30142,27762,21363,23241,32423,25380,[12047,20960],33034,[12080,24049],34015,25216,20864,23395,20238,31085,21058,24760,27982,23492,23490,35745,35760,26082,24524,38469,22931,32487,32426,22025,26551,22841,20339,23478,21152,33626,39050,36158,30002,38078,20551,31292,20215,26550,39550,23233,27516,30417,22362,23574,31546,38388,29006,20860,32937,33392,22904,32516,33575,26816,26604,30897,30839,25315,25441,31616,20461,21098,20943,33616,27099,37492,36341,
-36145,35265,38190,31661,20214,20581,33328,21073,39279,28176,28293,28071,24314,20725,23004,23558,27974,27743,30086,33931,26728,22870,35762,21280,37233,38477,34121,26898,30977,28966,33014,20132,37066,27975,39556,23047,22204,25605,38128,30699,20389,33050,29409,[12179,35282],39290,32564,32478,21119,25945,37237,36735,36739,21483,31382,25581,25509,30342,31224,34903,38454,25130,21163,33410,26708,26480,25463,30571,31469,27905,32467,35299,22992,25106,34249,33445,30028,20511,20171,30117,35819,23626,[12081,
-24062],31563,[12100,26020],[12198,37329],20170,27941,35167,32039,38182,20165,35880,36827,38771,26187,31105,36817,28908,28024,23613,21170,33606,20834,33550,30555,26230,40120,20140,24778,31934,31923,32463,20117,35686,26223,39048,38745,22659,25964,38236,24452,30153,38742,31455,31454,20928,28847,31384,25578,31350,32416,29590,[12210,38893],20037,28792,20061,37202,21417,25937,26087,[12165,33276],33285,21646,23601,30106,38816,25304,29401,30141,23621,39545,33738,23616,21632,30697,20030,27822,32858,25298,
-25454,24040,20855,36317,36382,38191,20465,21477,24807,28844,21095,25424,40515,23071,20518,30519,21367,32482,25733,25899,25225,25496,20500,29237,35273,20915,35776,32477,22343,33740,38055,20891,21531,23803,20426,31459,27994,37089,39567,21888,21654,21345,21679,24320,25577,26999,20975,24936,21002,22570,21208,22350,30733,30475,24247,24951,31968,25179,25239,20130,28821,32771,25335,28900,38752,22391,33499,26607,26869,30933,39063,31185,22771,21683,21487,28212,20811,21051,23458,35838,32943,21827,22438,24691,
-22353,21549,31354,24656,23380,25511,25248,[12061,21475],25187,23495,26543,21741,31391,33510,37239,24211,35044,22840,22446,25358,36328,33007,22359,31607,20393,24555,23485,27454,21281,31568,29378,26694,30719,30518,26103,20917,20111,30420,23743,31397,33909,22862,39745,20608,39304,24871,28291,22372,26118,25414,22256,25324,25193,24275,38420,22403,25289,21895,34593,33098,36771,21862,33713,26469,36182,34013,23146,26639,25318,31726,38417,20848,28572,35888,25597,35272,25042,32518,28866,28389,29701,27028,29436,
-24266,37070,26391,28010,25438,21171,29282,[12156,32769],20332,23013,37226,28889,28061,21202,20048,38647,38253,34174,30922,32047,20769,22418,25794,32907,31867,27882,26865,26974,20919,21400,26792,29313,40654,31729,29432,31163,28435,29702,26446,[12197,37324],40100,31036,33673,33620,21519,26647,20029,21385,21169,30782,21382,21033,20616,20363,20432,30178,[12148,31435],31890,27813,[12202,38582],[12050,21147],29827,21737,20457,32852,33714,36830,38256,24265,24604,28063,24088,25947,33080,38142,24651,28860,
-32451,31918,20937,26753,31921,33391,20004,36742,37327,26238,20142,35845,25769,32842,20698,30103,29134,23525,36797,28518,20102,25730,38243,24278,26009,21015,35010,28872,21155,29454,29747,26519,30967,38678,20020,37051,40158,28107,20955,36161,21533,25294,29618,33777,38646,40836,38083,20278,32666,20940,28789,38517,23725,39046,21478,20196,28316,29705,27060,30827,39311,30041,21016,30244,27969,26611,20845,40857,32843,21657,31548,31423,38534,22404,25314,38471,27004,23044,25602,31699,28431,38475,33446,21346,
-39045,24208,28809,25523,21348,34383,40065,40595,30860,38706,36335,36162,[12229,40575],28510,31108,24405,38470,25134,39540,21525,38109,20387,26053,23653,23649,32533,34385,27695,24459,29575,28388,32511,23782,25371,23402,28390,21365,20081,25504,30053,25249,36718,20262,20177,27814,32438,35770,33821,34746,32599,36923,38179,31657,39585,35064,33853,27931,39558,32476,22920,[12231,40635],29595,30721,34434,39532,39554,22043,21527,22475,20080,40614,21334,36808,33033,30610,39314,34542,28385,34067,26364,24930,
-28459,35881,33426,33579,30450,27667,24537,33725,29483,33541,38170,[12113,27611],[12141,30683],38086,21359,33538,20882,24125,35980,36152,20040,29611,26522,26757,37238,38665,29028,27809,30473,23186,38209,27599,32654,26151,23504,22969,23194,38376,38391,20204,33804,33945,27308,30431,38192,29467,26790,23391,30511,37274,38753,31964,36855,35868,24357,[12150,31859],31192,35269,27852,34588,23494,24130,26825,30496,32501,20885,20813,21193,23081,32517,[12207,38754],33495,25551,30596,34256,31186,28218,24217,22937,
-34065,28781,27665,25279,[12139,30399],25935,24751,38397,26126,34719,40483,38125,21517,21629,35884,{f:2,c:25720},34321,27169,33180,30952,25705,39764,25273,26411,33707,22696,40664,27819,28448,23518,38476,35851,29279,26576,25287,29281,20137,22982,27597,22675,26286,24149,21215,24917,[12106,26408],[12140,30446],30566,29287,31302,25343,21738,21584,38048,37027,23068,32435,27670,20035,22902,32784,22856,21335,30007,38590,22218,25376,33041,24700,38393,28118,21602,39297,20869,23273,33021,22958,38675,20522,27877,
-23612,25311,20320,21311,33147,36870,28346,34091,25288,24180,30910,25781,25467,24565,23064,37247,40479,23615,25423,32834,23421,21870,38218,38221,28037,24744,26592,29406,20957,23425,25319,27870,[12124,29275],25197,38062,32445,33043,27987,20892,24324,22900,21162,24594,[12069,22899],26262,34384,30111,25386,25062,31983,35834,21734,27431,40485,27572,34261,21589,20598,27812,21866,36276,29228,24085,24597,29750,25293,25490,29260,24472,28227,27966,25856,28504,30424,30928,30460,30036,21028,21467,20051,24222,
-26049,32810,32982,25243,21638,21032,28846,34957,36305,27873,21624,32986,22521,35060,36180,38506,37197,20329,27803,21943,30406,30768,25256,28921,28558,24429,34028,26842,30844,31735,33192,26379,40527,25447,30896,22383,30738,38713,25209,25259,21128,29749,27607,21860,33086,30130,[12138,30382],21305,30174,20731,23617,35692,31687,20559,[12122,29255],39575,39128,28418,29922,31080,25735,30629,25340,39057,36139,21697,32856,20050,22378,33529,33805,24179,20973,29942,35780,23631,22369,27900,39047,23110,30772,
-39748,36843,31893,21078,25169,38138,20166,33670,33889,33769,33970,22484,26420,22275,26222,28006,35889,26333,28689,26399,27450,26646,25114,22971,19971,20932,28422,26578,27791,20854,26827,22855,27495,30054,23822,33040,40784,26071,31048,31041,39569,36215,23682,20062,20225,21551,22865,30732,22120,[12115,27668],36804,24323,27773,27875,35755,25488,24688,27965,29301,25190,38030,38085,21315,36801,31614,20191,35878,20094,40660,38065,38067,21069,28508,36963,27973,35892,22545,23884,[12107,27424],27465,26538,
-21595,33108,32652,22681,34103,24378,25250,27207,38201,25970,24708,26725,30631,20052,20392,24039,38808,25772,32728,23789,20431,31373,20999,33540,19988,24623,31363,38054,20405,20146,31206,29748,21220,33465,25810,31165,23517,27777,38738,36731,27682,20542,21375,28165,25806,26228,27696,24773,39031,35831,24198,29756,31351,31179,19992,37041,29699,27714,22234,37195,27845,36235,21306,34502,26354,36527,23624,39537,28192,21462,23094,40843,36259,21435,22280,39079,26435,37275,27849,20840,30154,25331,[12125,29356],
-21048,21149,32570,28820,30264,21364,40522,27063,30830,38592,35033,32676,28982,29123,20873,26579,29924,22756,25880,22199,35753,39286,25200,32469,24825,28909,22764,20161,[12040,20154],24525,38887,20219,35748,20995,22922,32427,25172,20173,[12103,26085],25102,33592,33993,33635,34701,29076,28342,23481,32466,20887,25545,26580,[12161,32905],33593,34837,20754,23418,22914,36785,20083,27741,[12042,20837],35109,36719,38446,34122,29790,38160,38384,28070,33509,24369,25746,27922,33832,33134,40131,22622,36187,19977,
-21441,20254,25955,26705,21971,20007,25620,39578,25195,23234,29791,[12170,33394],28073,26862,20711,33678,30722,26432,21049,27801,32433,20667,21861,29022,31579,26194,29642,33515,26441,[12077,23665],21024,29053,34923,38378,38485,25797,36193,33203,21892,27733,25159,32558,22674,20260,21830,36175,26188,19978,23578,35059,26786,25422,31245,28903,33421,21242,38902,23569,21736,37045,32461,22882,36170,34503,[12166,33292],33293,36198,25668,23556,24913,28041,31038,35774,30775,30003,21627,20280,[12189,36523],28145,
-23072,32453,31070,27784,23457,23158,29978,32958,24910,28183,22768,[12131,29983],29989,29298,21319,32499,30465,30427,21097,32988,22307,24072,22833,29422,26045,28287,35799,[12075,23608],34417,[12055,21313],[12143,30707],25342,26102,20160,[12215,39135],34432,23454,35782,21490,[12142,30690],20351,23630,39542,22987,24335,[12144,31034],[12064,22763],19990,26623,20107,25325,35475,36893,21183,26159,21980,22124,36866,20181,20365,37322,39280,[12114,27663],24066,24643,23460,35270,35797,25910,[12095,25163],[12216,
-39318],23432,23551,25480,21806,21463,30246,20861,34092,26530,26803,27530,25234,36755,21460,33298,28113,30095,20070,36174,23408,29087,34223,26257,26329,32626,34560,[12233,40653],[12239,40736],23646,26415,36848,26641,26463,25101,31446,22661,24246,25968,28465,24661,21047,32781,25684,34928,29993,24069,26643,25332,38684,21452,29245,35841,[12116,27700],30561,31246,21550,30636,39034,33308,35828,30805,26388,28865,26031,25749,22070,24605,31169,21496,19997,27515,32902,23546,21987,22235,20282,20284,39282,24051,
-26494,32824,24578,39042,36865,23435,35772,35829,25628,33368,25822,22013,33487,37221,20439,32032,36895,31903,20723,22609,28335,23487,35785,32899,37240,33948,31639,34429,38539,38543,32485,39635,30862,23681,31319,36930,38567,31071,23385,25439,31499,34001,26797,21766,32553,29712,32034,38145,25152,22604,20182,23427,22905,22612,29549,25374,36427,36367,32974,33492,25260,21488,27888,37214,22826,24577,27760,22349,25674,36138,30251,28393,22363,27264,30192,28525,35885,35848,22374,27631,34962,30899,25506,21497,
-28845,27748,22616,25642,22530,26848,33179,21776,31958,20504,36538,28108,36255,28907,25487,28059,28372,32486,33796,26691,36867,28120,38518,35752,22871,29305,34276,33150,30140,35466,26799,21076,36386,38161,25552,39064,36420,21884,20307,26367,22159,24789,28053,21059,23625,22825,28155,22635,[12133,3E4],29980,24684,33300,33094,25361,26465,36834,30522,36339,36148,38081,24086,21381,21548,28867,27712,24311,20572,20141,24237,25402,33351,36890,26704,37230,30643,21516,38108,24420,31461,26742,25413,31570,32479,
-30171,20599,25237,22836,36879,20984,31171,31361,22270,24466,36884,28034,23648,[12063,22303],21520,20820,28237,22242,25512,39059,33151,34581,35114,36864,21534,23663,33216,25302,25176,33073,40501,38464,39534,39548,26925,22949,25299,21822,25366,21703,34521,27964,23043,[12129,29926],34972,27498,22806,35916,24367,28286,29609,39037,20024,28919,23436,30871,25405,26202,30358,24779,23451,23113,19975,33109,27754,29579,20129,26505,[12153,32593],24448,26106,26395,24536,22916,23041,24013,24494,21361,38886,36829,
-26693,22260,21807,24799,20026,28493,32500,33479,33806,22996,20255,20266,23614,32428,26410,34074,21619,30031,32963,21890,39759,20301,28205,35859,23561,24944,21355,30239,28201,34442,[12098,25991],38395,32441,21563,31283,32010,38382,21985,32705,29934,25373,34583,28065,31389,25105,26017,21351,25569,27779,24043,21596,38056,20044,27745,35820,23627,[12102,26080],33436,26791,21566,21556,[12111,27595],27494,20116,25410,21320,33310,20237,20398,22366,25098,38654,26212,29289,21247,21153,24735,35823,26132,29081,
-26512,35199,30802,30717,26224,22075,21560,38177,29306,31232,24687,24076,24713,33181,[12067,22805],24796,29060,28911,28330,27728,29312,27268,34989,24109,20064,23219,21916,38115,27927,31995,38553,25103,32454,30606,34430,21283,38686,36758,26247,23777,20384,29421,19979,21414,22799,21523,25472,38184,20808,20185,40092,32420,21688,36132,34900,33335,38386,28046,24358,23244,26174,38505,29616,29486,21439,33146,39301,32673,23466,38519,38480,32447,30456,21410,38262,[12217,39321],31665,35140,28248,20065,32724,
-31077,35814,24819,21709,20139,39033,24055,27233,20687,21521,35937,33831,30813,38660,21066,21742,22179,38144,28040,23477,28102,26195,[12073,23567],23389,26657,32918,21880,31505,25928,26964,20123,27463,34638,38795,21327,25375,25658,37034,26012,32961,35856,20889,26800,21368,34809,25032,27844,27899,35874,23633,34218,33455,38156,27427,[12191,36763],26032,24571,[12092,24515],20449,34885,26143,33125,29481,24826,20852,21009,22411,24418,37026,[12175,34892],37266,24184,26447,24615,22995,20804,20982,33016,21256,
-27769,38596,29066,20241,20462,32670,26429,21957,38152,31168,34966,32483,22687,25100,38656,34394,22040,39035,24464,35768,33988,37207,21465,26093,24207,30044,24676,32110,23167,32490,32493,36713,21927,23459,24748,26059,[12126,29572],36873,30307,30505,32474,38772,34203,23398,[12147,31348],38634,[12174,34880],21195,29071,24490,26092,35810,23547,39535,24033,27529,27739,35757,35759,36874,36805,21387,25276,40486,40493,21568,20011,33469,[12123,29273],34460,23830,34905,28079,38597,21713,20122,35766,28937,21693,
-38409,28895,28153,30416,20005,30740,34578,23721,24310,[12180,35328],39068,38414,28814,27839,22852,25513,30524,34893,28436,33395,22576,29141,21388,30746,38593,21761,24422,28976,23476,35866,39564,27523,22830,40495,31207,26472,25196,20335,30113,[12154,32650],27915,38451,27687,20208,30162,20859,26679,28478,36992,33136,22934,29814,25671,23591,36965,31377,35875,23002,21676,33280,33647,35201,32768,26928,22094,32822,29239,37326,20918,20063,39029,25494,19994,21494,26355,33099,22812,28082,[12032,19968],22777,
-21307,25558,38129,20381,20234,[12176,34915],39056,22839,36951,31227,20202,33008,30097,27778,23452,23016,24413,26885,34433,20506,24050,[12036,20057],30691,20197,33402,25233,26131,[12194,37009],23673,20159,24441,33222,36920,32900,30123,20134,35028,24847,27589,24518,20041,30410,28322,35811,35758,35850,35793,24322,32764,32716,32462,33589,33643,22240,27575,[12211,38899],38452,23035,21535,38134,28139,23493,39278,23609,24341,38544,21360,33521,27185,23156,40560,24212,32552,33721,{f:2,c:33828},33639,34631,
-36814,36194,30408,24433,39062,30828,26144,21727,25317,20323,33219,30152,24248,38605,36362,34553,21647,27891,28044,27704,24703,21191,[12132,29992],24189,20248,24736,24551,23588,30001,37038,38080,29369,27833,28216,[12195,37193],26377,21451,21491,20305,37321,35825,[12060,21448],24188,36802,28132,20110,30402,27014,34398,24858,33286,20313,20446,36926,40060,24841,28189,28180,38533,20104,23089,[12204,38632],19982,23679,31161,23431,35821,[12155,32701],[12127,29577],22495,33419,37057,21505,36935,21947,23786,
-24481,24840,27442,29425,32946,35465,28020,23507,35029,39044,35947,39533,40499,28170,20900,20803,22435,34945,21407,25588,36757,22253,21592,22278,29503,28304,32536,36828,33489,24895,24616,38498,[12104,26352],32422,36234,36291,38053,23731,31908,[12105,26376],24742,38405,32792,20113,37095,21248,38504,20801,36816,34164,37213,26197,38901,23381,21277,30776,26434,26685,21705,28798,23472,36733,20877,22312,21681,25874,26242,36190,36163,33039,33900,36973,31967,20991,34299,26531,26089,28577,34468,36481,22122,
-36896,30338,28790,29157,36131,25321,21017,27901,36156,24590,22686,24974,26366,36192,25166,21939,28195,26413,36711,38113,38392,30504,26629,27048,21643,20045,28856,35784,25688,25995,23429,31364,20538,23528,30651,27617,35449,31896,27838,30415,26025,36759,23853,23637,34360,26632,21344,25112,31449,28251,32509,27167,31456,24432,28467,24352,25484,28072,26454,19976,24080,36134,20183,32960,30260,38556,25307,26157,25214,27836,36213,29031,32617,20806,32903,21484,36974,25240,21746,34544,36761,32773,38167,34071,
-36825,27993,29645,26015,30495,29956,30759,33275,36126,38024,20390,26517,30137,35786,38663,25391,38215,38453,33976,25379,30529,24449,29424,20105,24596,25972,25327,27491,25919,24103,30151,37073,35777,33437,26525,[12096,25903],21553,34584,30693,32930,33026,27713,20043,32455,32844,30452,26893,27542,25191,20540,20356,22336,25351,[12108,27490],36286,21482,26088,32440,24535,25370,25527,[12164,33267],33268,32622,24092,23769,21046,26234,31209,31258,36136,28825,30164,28382,27835,31378,20013,30405,24544,38047,
-34935,32456,31181,32959,37325,20210,20247,[12168,33311],21608,24030,27954,35788,31909,36724,32920,24090,21650,30385,23449,26172,39588,29664,26666,34523,26417,29482,35832,35803,36880,[12149,31481],28891,29038,25284,30633,22065,20027,33879,26609,21161,34496,36142,38136,31569,20303,27880,31069,39547,25235,[12118,29226],25341,19987,30742,36716,25776,36186,31686,26729,24196,35013,22918,25758,22766,29366,26894,38181,36861,36184,22368,32512,35846,20934,25417,25305,21331,26700,29730,33537,37196,21828,30528,
-28796,27978,20857,21672,36164,23039,28363,28100,23388,32043,20180,31869,28371,[12070,23376],[12163,33258],28173,23383,39683,26837,36394,23447,32508,24635,32437,37049,[12187,36208],22863,25549,31199,[12188,36275],21330,26063,31062,35781,38459,32452,38075,32386,22068,37257,26368,32618,23562,36981,26152,24038,20304,26590,20570,20316,22352,24231,20109,19980,20800,19984,24319,21317,19989,20120,19998,[12224,39730],23404,22121,[12033,20008],31162,[12035,20031],[12052,21269],20039,22829,[12120,29243],21358,
-27664,22239,32996,39319,27603,30590,40727,[12034,20022],20127,40720,20060,20073,20115,33416,23387,21868,22031,20164,21389,21405,21411,21413,21422,38757,36189,[12053,21274],21493,21286,21294,21310,36188,21350,21347,20994,21E3,21006,21037,21043,{f:2,c:21055},21068,21086,21089,21084,33967,21117,21122,21121,21136,21139,[12044,20866],32596,20155,20163,20169,20162,20200,20193,20203,20190,20251,20211,20258,20324,20213,20261,20263,20233,20267,20318,20327,25912,20314,20317,20319,20311,20274,20285,20342,20340,
-20369,20361,20355,20367,20350,20347,20394,20348,20396,20372,20454,20456,20458,20421,20442,20451,20444,20433,20447,20472,20521,20556,20467,20524,20495,20526,20525,20478,20508,20492,20517,20520,20606,20547,20565,20552,20558,20588,20603,20645,20647,20649,20666,20694,20742,20717,20716,20710,20718,20743,20747,20189,27709,20312,20325,20430,[12245,40864],27718,31860,20846,24061,40649,39320,20865,22804,[12051,21241],21261,35335,21264,20971,22809,20821,[12039,20128],20822,20147,34926,34980,20149,33044,35026,
-31104,23348,34819,32696,[12046,20907],20913,20925,20924,20935,[12045,20886],20898,20901,35744,{f:2,c:35750},35754,{f:2,c:35764},35767,{f:2,c:35778},35787,35791,35790,{f:3,c:35794},35798,{f:2,c:35800},35804,{f:2,c:35807},35812,{f:2,c:35816},35822,35824,35827,35830,35833,35836,{f:2,c:35839},35842,35844,35847,35852,35855,{f:2,c:35857},{f:3,c:35860},35865,35867,35864,35869,{f:3,c:35871},35877,35879,{f:2,c:35882},{f:2,c:35886},{f:2,c:35890},{f:2,c:35893},[12057,21353],21370,38429,38434,38433,38449,38442,
-38461,38460,38466,38473,38484,38495,38503,38508,38514,38516,38536,38541,38551,38576,37015,37019,37021,37017,37036,37025,37044,37043,37046,37050,37048,37040,37071,37061,37054,37072,37060,37063,37075,37094,37090,37084,37079,37083,37099,37103,37118,37124,37154,37150,37155,37169,37167,37177,37187,37190,21005,22850,21154,{f:2,c:21164},21182,21759,21200,21206,21232,21471,29166,30669,[12085,24308],[12048,20981],20988,[12223,39727],[12059,21430],24321,30042,24047,22348,22441,22433,22654,22716,22725,22737,
-22313,22316,22314,22323,22329,{f:2,c:22318},22364,22331,22338,22377,22405,22379,22406,22396,22395,22376,22381,22390,22387,22445,22436,22412,22450,22479,22439,22452,22419,22432,22485,22488,22490,22489,22482,22456,22516,22511,22520,22500,22493,22539,22541,22525,22509,22528,22558,22553,22596,22560,22629,22636,22657,22665,22682,22656,39336,40729,25087,33401,33405,33407,33423,33418,33448,33412,33422,33425,33431,33433,33451,33464,33470,33456,33480,33482,33507,33432,33463,33454,{f:2,c:33483},33473,33449,
-33460,33441,33450,33439,33476,33486,33444,33505,33545,33527,33508,33551,33543,33500,33524,33490,33496,33548,33531,33491,33553,33562,33542,{f:2,c:33556},33504,33493,33564,33617,{f:2,c:33627},33544,33682,33596,33588,33585,33691,33630,33583,33615,33607,33603,33631,33600,33559,33632,33581,33594,33587,33638,33637,33640,33563,33641,33644,33642,{f:2,c:33645},33712,33656,{f:2,c:33715},33696,33706,33683,33692,33669,33660,33718,33705,33661,33720,33659,33688,33694,33704,33722,33724,33729,33793,33765,33752,22535,
-33816,33803,33757,33789,33750,33820,33848,33809,33798,33748,33759,33807,33795,{f:2,c:33784},33770,33733,33728,33830,33776,33761,33884,33873,33882,33881,33907,{f:2,c:33927},33914,33929,33912,33852,33862,33897,33910,33932,33934,33841,33901,33985,33997,34E3,34022,33981,34003,33994,33983,33978,34016,33953,33977,33972,33943,34021,34019,34060,29965,34104,34032,34105,34079,34106,34134,34107,34047,34044,34137,34120,34152,34148,34142,34170,30626,34115,34162,34171,34212,34216,34183,34191,34169,34222,34204,
-34181,34233,34231,34224,34259,34241,34268,34303,34343,34309,34345,34326,34364,[12086,24318],24328,22844,22849,32823,22869,22874,22872,21263,[12074,23586],23589,23596,23604,25164,25194,25247,25275,25290,25306,25303,25326,25378,25334,25401,25419,25411,25517,25590,25457,25466,25486,25524,25453,25516,25482,25449,25518,25532,25586,25592,25568,25599,25540,25566,25550,25682,25542,25534,25669,25665,25611,25627,25632,25612,25638,25633,25694,25732,25709,25750,25722,{f:2,c:25783},25753,25786,25792,25808,25815,
-25828,25826,25865,25893,25902,[12087,24331],24530,29977,24337,21343,21489,21501,21481,21480,21499,21522,21526,21510,21579,{f:3,c:21586},21590,21571,21537,21591,21593,21539,21554,21634,21652,21623,21617,21604,{f:2,c:21658},21636,21622,21606,21661,21712,21677,21698,21684,21714,21671,21670,{f:2,c:21715},21618,21667,21717,21691,21695,21708,{f:2,c:21721},21724,{f:2,c:21673},21668,21725,21711,21726,21787,21735,21792,21757,21780,21747,{f:2,c:21794},21775,21777,21799,21802,21863,21903,21941,21833,21869,21825,
-21845,21823,21840,21820,21815,21846,{f:3,c:21877},21811,21808,21852,21899,21970,21891,21937,21945,21896,21889,21919,21886,21974,21905,21883,21983,{f:2,c:21949},21908,21913,21994,22007,21961,22047,21969,{f:2,c:21995},21972,21990,21981,21956,21999,21989,{f:2,c:22002},{f:2,c:21964},21992,22005,21988,36756,22046,22024,22028,22017,22052,22051,22014,22016,22055,22061,22104,22073,22103,22060,22093,22114,22105,22108,22092,22100,22150,22116,22129,22123,{f:2,c:22139},22149,22163,22191,22228,[12062,22231],22237,
-22241,22261,22251,22265,22271,22276,22282,22281,22300,24079,24089,24084,24081,24113,{f:2,c:24123},24119,24132,24148,24155,24158,24161,23692,23674,23693,23696,23702,23688,{f:2,c:23704},23697,23706,23708,23733,23714,23741,23724,23723,23729,23715,23745,23735,23748,23762,23780,23755,23781,{f:2,c:23810},23847,23846,23854,23844,23838,23814,23835,23896,23870,23860,23869,23916,23899,23919,23901,23915,23883,23882,23913,23924,23938,23961,23965,35955,23991,24005,[12091,24435],24439,24450,24455,24457,24460,24469,
-24473,24476,24488,24493,24501,24508,34914,[12090,24417],29357,29360,29364,{f:2,c:29367},29379,29377,29390,29389,29394,29416,29423,29417,29426,29428,29431,29441,29427,29443,{f:2,c:29434},29463,29459,29473,29450,29470,29469,29461,29474,29497,29477,29484,29496,29489,29520,29517,29527,29536,29548,29551,29566,[12167,33307],22821,39143,22820,[12065,22786],39267,{f:6,c:39271},39284,39287,39293,39296,39300,39303,39306,39309,{f:2,c:39312},{f:3,c:39315},24192,24209,24203,24214,24229,24224,24249,24245,24254,
-24243,36179,24274,24273,24283,24296,24298,33210,24516,24521,24534,24527,24579,24558,24580,24545,24548,24574,{f:2,c:24581},24554,24557,24568,24601,24629,24614,24603,24591,24589,24617,24619,24586,24639,24609,{f:2,c:24696},24699,24698,24642,24682,24701,24726,24730,24749,24733,24707,24722,24716,24731,24812,24763,24753,24797,24792,24774,24794,24756,24864,24870,24853,24867,24820,24832,24846,24875,24906,24949,25004,24980,24999,25015,25044,25077,24541,38579,38377,38379,38385,38387,{f:2,c:38389},38396,38398,
-{f:2,c:38403},38406,38408,{f:4,c:38410},38415,38418,{f:3,c:38421},{f:2,c:38425},20012,[12121,29247],25109,27701,27732,27740,27722,27811,27781,27792,27796,27788,{f:2,c:27752},27764,27766,27782,27817,27856,27860,27821,{f:2,c:27895},27889,27863,27826,27872,27862,27898,27883,27886,27825,27859,27887,27902,27961,27943,27916,27971,27976,27911,27908,27929,27918,27947,27981,27950,27957,27930,27983,27986,27988,27955,28049,28015,28062,28064,27998,{f:2,c:28051},27996,28E3,28028,28003,28186,28103,28101,28126,
-28174,28095,28128,28177,28134,28125,28121,28182,28075,28172,28078,28203,28270,28238,28267,28338,28255,28294,{f:2,c:28243},28210,28197,28228,28383,28337,28312,28384,28461,28386,28325,28327,28349,28347,28343,28375,28340,28367,28303,28354,28319,28514,{f:2,c:28486},28452,28437,28409,28463,28470,28491,28532,28458,28425,28457,28553,28557,28556,28536,28530,28540,28538,28625,28617,28583,28601,28598,28610,28641,28654,28638,28640,28655,28698,28707,28699,28729,28725,28751,28766,[12071,23424],23428,23445,23443,
-23461,23480,29999,39582,25652,23524,23534,35120,23536,36423,35591,36790,36819,36821,36837,36846,36836,36841,36838,36851,36840,36869,36868,36875,36902,36881,36877,36886,36897,{f:2,c:36917},36909,36911,36932,{f:2,c:36945},36944,36968,36952,36962,36955,26297,36980,36989,36994,37E3,36995,37003,[12089,24400],24407,24406,24408,23611,21675,23632,23641,23409,23651,23654,32700,24362,24361,24365,33396,24380,39739,[12076,23662],22913,22915,22925,{f:2,c:22953},22947,22935,22986,22955,22942,22948,22994,22962,
-22959,22999,22974,{f:2,c:23045},23005,23048,23011,23E3,23033,23052,23049,23090,23092,23057,23075,23059,23104,23143,23114,23125,23100,23138,23157,33004,23210,23195,23159,23162,23230,23275,23218,23250,23252,23224,23264,23267,23281,23254,23270,23256,23260,23305,23319,23318,23346,23351,23360,23573,23580,23386,23397,23411,23377,23379,23394,39541,{f:2,c:39543},39546,39551,39549,{f:2,c:39552},39557,39560,39562,39568,{f:2,c:39570},39574,39576,{f:3,c:39579},{f:2,c:39583},{f:2,c:39586},39589,39591,32415,32417,
-32419,32421,{f:2,c:32424},32429,32432,32446,{f:3,c:32448},32457,{f:2,c:32459},32464,32468,32471,32475,{f:2,c:32480},32488,32491,{f:2,c:32494},{f:2,c:32497},32525,32502,{f:2,c:32506},32510,{f:3,c:32513},{f:2,c:32519},{f:2,c:32523},32527,{f:2,c:32529},32535,32537,32540,32539,32543,{f:7,c:32545},{f:4,c:32554},{f:5,c:32559},32565,[12083,24186],30079,[12078,24027],30014,37013,29582,29585,29614,29602,29599,29647,29634,29649,29623,29619,29632,29641,29640,29669,29657,39036,29706,29673,29671,29662,29626,29682,
-29711,29738,29787,29734,29733,29736,29744,29742,29740,29723,29722,29761,29788,29783,29781,29785,29815,29805,29822,29852,29838,{f:2,c:29824},29831,29835,29854,{f:2,c:29864},29840,29863,29906,29882,{f:3,c:38890},26444,26451,26462,26440,26473,26533,26503,26474,26483,26520,26535,26485,26536,26526,26541,26507,26487,26492,26608,26633,26584,26634,26601,26544,26636,26585,26549,26586,26547,26589,26624,26563,26552,26594,26638,26561,26621,{f:2,c:26674},{f:2,c:26720},26702,26722,26692,26724,26755,26653,26709,
-26726,26689,26727,26688,26686,26698,26697,26665,26805,26767,26740,26743,26771,26731,26818,26990,26876,{f:2,c:26911},26873,26916,26864,26891,26881,26967,26851,26896,26993,26937,26976,26946,26973,27012,26987,27008,27032,27E3,26932,27084,{f:2,c:27015},27086,27017,26982,26979,27001,27035,27047,27067,27051,27053,27092,27057,27073,27082,27103,27029,27104,27021,27135,27183,27117,{f:2,c:27159},27237,27122,27204,27198,27296,27216,27227,27189,27278,27257,27197,27176,27224,27260,27281,27280,27305,27287,27307,
-29495,29522,{f:2,c:27521},27527,27524,{f:2,c:27538},27533,{f:2,c:27546},27553,27562,36715,36717,{f:3,c:36721},{f:2,c:36725},36728,36727,{f:2,c:36729},36732,36734,{f:2,c:36737},36740,36743,36747,{f:3,c:36749},36760,36762,36558,25099,25111,25115,25119,25122,25121,25125,25124,25132,33255,29935,29940,29951,29967,29969,29971,[12097,25908],{f:3,c:26094},26122,26137,26482,26115,26133,26112,28805,26359,26141,26164,26161,26166,26165,32774,26207,26196,26177,26191,26198,26209,26199,26231,26244,26252,26279,26269,
-26302,{f:2,c:26331},26342,26345,{f:2,c:36146},36150,36155,36157,36160,{f:2,c:36165},{f:2,c:36168},36167,36173,36181,36185,35271,{f:3,c:35274},{f:4,c:35278},29294,29343,29277,29286,29295,{f:2,c:29310},29316,29323,29325,29327,29330,25352,25394,25520,25663,25816,32772,27626,27635,27645,27637,27641,27653,27655,27654,27661,27669,{f:3,c:27672},27681,27689,27684,27690,27698,25909,25941,25963,29261,29266,29270,29232,34402,21014,32927,32924,32915,32956,26378,32957,32945,32939,32941,32948,32951,{f:4,c:32999},
-32987,32962,32964,32985,32973,32983,26384,32989,33003,33009,33012,33005,{f:2,c:33037},33010,33020,26389,33042,35930,33078,33054,33068,33048,33074,33096,33100,33107,33140,{f:2,c:33113},33137,33120,33129,{f:2,c:33148},33133,33127,22605,23221,33160,33154,33169,28373,33187,33194,33228,26406,33226,33211,33217,33190,27428,27447,27449,27459,27462,27481,{f:3,c:39121},39125,{f:2,c:39129},[12110,27571],24384,27586,35315,26E3,40785,26003,26044,26054,26052,26051,26060,26062,26066,26070,28800,28828,28822,28829,
-28859,28864,28855,28843,28849,28904,28874,28944,28947,28950,28975,28977,29043,29020,29032,28997,29042,29002,29048,29050,29080,29107,29109,29096,29088,29152,29140,29159,29177,29213,29224,28780,28952,29030,29113,25150,25149,25155,{f:2,c:25160},31035,31040,31046,31049,{f:2,c:31067},31059,31066,31074,31063,31072,31087,31079,31098,31109,31114,31130,31143,31155,24529,24528,24636,24669,24666,24679,24641,24665,24675,24747,24838,24845,24925,25001,24989,25035,25041,25094,32896,[12160,32895],27795,27894,28156,
-30710,30712,30720,30729,{f:2,c:30743},30737,26027,30765,{f:2,c:30748},{f:3,c:30777},30751,30780,30757,30764,30755,30761,30798,30829,{f:2,c:30806},30758,30800,30791,30796,30826,30875,30867,30874,30855,30876,30881,30883,30898,30905,30885,30932,30937,30921,30956,30962,30981,30964,30995,31012,31006,31028,40859,[12235,40697],{f:2,c:40699},30449,30468,30477,30457,{f:2,c:30471},30490,30498,30489,30509,30502,30517,30520,{f:2,c:30544},30535,30531,30554,30568,30562,30565,30591,30605,30589,30592,30604,30609,
-{f:2,c:30623},30640,30645,30653,30010,30016,30030,30027,30024,30043,30066,30073,30083,32600,32609,32607,35400,32616,32628,32625,32633,32641,32638,30413,30437,34866,{f:3,c:38021},38027,38026,{f:2,c:38028},{f:2,c:38031},38036,38039,38037,{f:3,c:38042},{f:2,c:38051},38059,38058,38061,38060,{f:2,c:38063},38066,38068,{f:5,c:38070},{f:2,c:38076},38079,38084,{f:7,c:38088},{f:3,c:38096},{f:3,c:38101},38105,38104,38107,{f:3,c:38110},38114,{f:2,c:38116},{f:2,c:38119},38122,38121,38123,{f:2,c:38126},{f:3,c:38131},
-38135,38137,{f:2,c:38140},38143,38147,38146,{f:2,c:38150},{f:2,c:38153},{f:3,c:38157},{f:5,c:38162},38168,38171,{f:3,c:38173},38178,{f:2,c:38186},38185,38188,{f:2,c:38193},38196,{f:3,c:38198},38204,{f:2,c:38206},38210,38197,{f:3,c:38212},38217,38220,{f:2,c:38222},{f:3,c:38226},{f:4,c:38230},38235,{f:2,c:38238},38237,{f:2,c:38241},{f:9,c:38244},38255,{f:3,c:38257},38202,30695,30700,38601,31189,31213,31203,31211,31238,23879,31235,31234,31262,31252,31289,31287,31313,40655,39333,31344,30344,30350,30355,
-30361,30372,29918,29920,29996,40480,40482,{f:5,c:40488},40498,40497,40502,40504,40503,{f:2,c:40505},40510,{f:2,c:40513},40516,{f:4,c:40518},{f:2,c:40523},40526,40529,40533,40535,{f:3,c:40538},40542,40547,{f:7,c:40550},40561,40557,40563,[12135,30098],30100,30102,30112,30109,30124,30115,{f:2,c:30131},30136,30148,30129,30128,30147,30146,30166,30157,30179,30184,30182,30180,30187,30183,30211,30193,30204,30207,30224,30208,30213,30220,30231,30218,30245,30232,30229,30233,30235,30268,30242,30240,30272,30253,
-30256,30271,30261,30275,30270,30259,30285,30302,30292,30300,30294,30315,30319,32714,31462,{f:2,c:31352},31360,31366,31368,31381,31398,31392,31404,31400,31405,31411,34916,34921,34930,34941,34943,34946,34978,35014,34999,35004,35017,35042,35022,35043,35045,35057,35098,35068,35048,35070,35056,35105,35097,35091,35099,35082,35124,35115,35126,35137,35174,35195,[12134,30091],32997,30386,30388,30684,[12158,32786],32788,32790,32796,32800,32802,{f:3,c:32805},32809,32808,32817,32779,32821,32835,32838,32845,32850,
-32873,32881,35203,39032,39040,39043,39049,{f:2,c:39052},39055,39060,{f:2,c:39066},{f:2,c:39070},{f:2,c:39073},{f:2,c:39077},[12172,34381],34388,34412,34414,34431,34426,34428,34427,34472,34445,34443,34476,34461,34471,34467,34474,34451,34473,34486,34500,34485,34510,34480,34490,34481,34479,34505,34511,34484,34537,{f:2,c:34545},34541,34547,34512,34579,34526,34548,34527,34520,34513,34563,34567,34552,34568,34570,34573,34569,34595,34619,34590,34597,34606,34586,34622,34632,34612,34609,34601,34615,34623,34690,
-34594,{f:2,c:34685},34683,34656,34672,34636,34670,34699,34643,34659,34684,34660,34649,34661,34707,34735,34728,34770,34758,34696,34693,34733,34711,34691,34731,34789,34732,34741,34739,34763,34771,34749,34769,34752,34762,34779,34794,34784,34798,34838,34835,34814,34826,34843,34849,34873,34876,[12152,32566],32578,{f:2,c:32580},33296,31482,31485,31496,{f:2,c:31491},31509,31498,31531,31503,31559,31544,31530,31513,31534,31537,31520,31525,31524,31539,31550,31518,31576,31578,31557,31605,31564,31581,31584,31598,
-31611,31586,31602,31601,31632,{f:2,c:31654},31672,31660,31645,31656,31621,31658,31644,31650,31659,31668,31697,31681,31692,31709,31706,{f:2,c:31717},31722,31756,31742,31740,31759,31766,31755,31775,31786,31782,31800,31809,31808,33278,{f:2,c:33281},33284,33260,34884,{f:3,c:33313},33325,33327,33320,33323,33336,33339,{f:2,c:33331},33342,33348,33353,33355,33359,33370,33375,33384,34942,34949,34952,35032,35039,35166,32669,32671,32679,{f:2,c:32687},32690,31868,25929,31889,31901,31900,31902,31906,31922,{f:2,
-c:31932},31937,31943,{f:2,c:31948},31944,31941,31959,31976,[12169,33390],26280,32703,32718,32725,32741,32737,32742,32745,32750,32755,[12151,31992],32119,32166,32174,32327,32411,40632,40628,36211,36228,36244,36241,36273,36199,36205,35911,35913,37194,37200,{f:2,c:37198},37220,37218,37217,37232,37225,37231,{f:2,c:37245},37234,37236,37241,37260,37253,37264,37261,37265,{f:2,c:37282},37290,{f:3,c:37293},37301,37300,37306,[12183,35925],40574,36280,36331,36357,36441,36457,36277,36287,36284,36282,36292,{f:2,
-c:36310},36314,36318,{f:2,c:36302},36315,36294,36332,{f:2,c:36343},36323,36345,36347,36324,36361,36349,36372,36381,36383,36396,36398,36387,36399,36410,36416,36409,36405,36413,36401,36425,{f:2,c:36417},{f:2,c:36433},36426,36464,36470,36476,36463,36468,36485,36495,36500,36496,36508,36510,[12184,35960],35970,35978,35973,35992,35988,26011,35286,35294,35290,35292,35301,35307,35311,35390,35622,38739,38633,38643,38639,38662,38657,38664,38671,38670,38698,38701,38704,38718,40832,40835,{f:6,c:40837},40844,
-40702,40715,40717,[12203,38585],{f:2,c:38588},38606,38610,30655,38624,37518,37550,37576,37694,37738,37834,37775,37950,37995,40063,40066,{f:4,c:40069},31267,40075,40078,{f:3,c:40080},{f:2,c:40084},{f:2,c:40090},{f:6,c:40094},{f:5,c:40101},40107,{f:2,c:40109},{f:8,c:40112},{f:4,c:40122},{f:4,c:40132},{f:7,c:40138},{f:3,c:40147},{f:3,c:40151},{f:2,c:40156},40159,40162,38780,38789,{f:2,c:38801},38804,38831,38827,38819,38834,38836,39601,39600,39607,40536,39606,39610,39612,39617,39616,39621,39618,{f:2,
-c:39627},39633,39749,39747,39751,39753,39752,39757,39761,39144,39181,39214,39253,39252,[12221,39647],39649,39654,39663,39659,39675,39661,39673,39688,39695,39699,39711,39715,{f:2,c:40637},32315,40578,{f:2,c:40583},40587,40594,37846,40605,40607,{f:3,c:40667},40672,40671,40674,40681,40679,40677,40682,40687,40738,40748,40751,40761,40759,{f:2,c:40765},40772,12295,{s:13},30362,34297,31001,24859,39599,35158,22761,32631,25850,25943,38930,36774,32070,24171,32129,37770,35607,39165,23542,22577,39825,36649,[12185,
-35997],37575,29437,20633,24970,32179,31558,30050,25987,24163,38281,37002,32232,36022,35722,36783,36782,27161,40009,30303,28693,28657,36051,25839,39173,25765,37474,37457,39361,35036,36001,21443,34870,27544,24922,24920,29158,33980,33369,20489,28356,21408,20596,28204,23652,35435,25881,25723,34796,39262,35730,32399,37855,29987,38369,39019,22580,22039,[12199,38263],20767,33144,24288,26274,37396,[12190,36554],24505,22645,38515,35183,31281,25074,35488,39425,36978,39347,[12242,40786],29118,34909,34802,23541,
-30087,36490,31820,32162,37276,37604,38619,30990,20786,35320,34389,20659,30241,38358,21109,37656,32020,32189,36781,35422,36060,32880,24478,21474,36517,31428,37679,36948,24118,36024,25812,21934,37170,25763,33213,24986,35477,24392,30070,25803,40680,34153,27284,25623,23798,31153,23566,29128,37159,25973,28364,36958,32224,39003,40670,22666,38651,28593,37347,35519,35548,37336,38914,37664,35330,26481,21205,26847,20941,[12222,39717],29346,29544,35712,36077,37709,37723,26039,32222,38538,23565,22136,38931,37389,
-22890,22702,40285,38989,35355,24801,39187,20818,29246,39180,36019,30332,32624,38309,31020,37353,29033,31684,36009,39151,35370,32033,[12214,39131],35513,24290,36027,32027,22707,22894,24996,31966,35920,26963,37586,[12213,39080],30219,39342,32299,35575,40179,33178,36667,25771,36628,36070,24489,36E3,35331,23142,32283,35442,37411,33995,24185,36245,36123,23713,21083,37628,32177,23831,37804,25841,40255,38307,37499,20491,32102,40852,38799,36002,37390,28317,27083,36092,34865,39015,21102,38364,35264,39208,
-24931,36011,24291,35215,27512,[12244,40860],38312,36556,35437,27331,36020,21130,36645,37707,22283,36942,39405,38867,28450,34399,38305,40372,36032,36703,40251,32005,22778,35703,28396,22057,33775,30059,21123,35441,25079,22750,27489,29872,36996,32233,35594,25582,36637,36036,31330,26371,29172,21295,35569,35496,32362,33911,28222,29554,36008,31117,25802,27231,31309,39249,35663,40388,32318,32221,26997,36655,32026,25824,24190,34186,21137,28639,35336,35352,38555,32380,32E3,22846,33698,38960,36040,37440,20729,
-39381,27570,30435,22533,31627,38291,33393,32216,32365,27298,40572,25536,25791,31777,20745,34214,27323,37970,36368,36068,[12178,35211],37749,33382,21133,39198,28472,28666,28567,23559,28479,34083,27123,22892,35611,37292,33184,28550,39509,23308,25898,37496,30703,20709,39171,32371,32094,36686,36611,38542,31680,28500,32080,35489,32202,37670,20677,35641,36914,29180,30433,21185,33686,39912,39514,32147,38968,37857,24465,30169,31478,31998,33290,39378,33289,25818,37624,25084,21127,40273,32121,35258,35363,32118,
-37406,36557,39423,38283,20977,38982,27579,35506,22718,25031,25715,24235,35122,35463,22602,20744,23532,31014,26336,34407,24011,31418,39243,28528,25844,38346,34847,33240,33802,20358,36084,34253,27396,25876,31811,38348,34349,28734,35733,25900,35261,25078,32412,29211,28651,25736,21214,28551,27138,37939,22744,39006,31852,38626,28757,35023,39881,31150,40599,21426,21237,31019,27511,28701,38584,20486,32879,34030,36899,37934,24976,28451,31806,25986,33225,37832,25088,29001,32244,31975,20841,36635,35538,30274,
-36988,37904,29557,33256,37168,40023,36035,40801,37428,38728,23994,38936,39230,21129,[12243,40845],32894,22184,31840,22751,25871,38580,27155,23105,25695,31757,34310,30439,39025,24300,29200,25796,28407,34396,39791,36034,37682,38520,39522,37569,23650,32311,24942,28670,32209,24018,25891,23423,28772,20098,25476,36650,20523,20374,28138,32184,35542,34367,32645,37007,38012,31854,39486,39409,32097,23229,29802,30908,34718,[12218,39340],39393,21966,36023,[12230,40613],36067,36993,30622,39237,34875,28415,35646,
-37672,37466,36031,37762,[12200,38272],24758,20497,37683,22818,35598,24396,35219,32191,32236,24287,28357,25003,38313,40180,37528,35628,35584,30045,37385,32013,38627,25747,33126,24817,39719,39186,25836,33193,25862,37312,[12227,40165],32886,22169,38007,37811,27320,29552,23527,25840,28632,37397,32016,33215,28611,36786,30247,35582,27472,40407,27590,22036,28442,30436,40848,36064,22132,40300,39449,39108,38971,36007,34315,24977,35413,28497,38935,25778,37610,20693,27192,35676,33229,[12241,40778],39438,35912,
-21843,27683,35350,29309,37370,37467,36983,31805,35609,37666,37463,28154,35700,22649,27085,21958,22715,34196,25654,37740,27211,21932,20689,32761,31429,31434,27453,35242,23522,36629,27691,20670,38915,35531,24950,29898,31406,36264,21312,36544,39493,40818,39028,27402,21240,40306,30906,35731,39250,25854,32350,29105,38860,35469,32009,27054,32104,36575,37613,38287,28516,28753,34217,39955,36093,20632,21930,39479,25475,28544,27578,32023,31721,26348,38275,38493,36109,32341,20663,36062,29138,32057,36050,25448,
-25885,25086,35373,32051,23529,23352,33102,28402,32882,32361,21213,32854,24107,29509,28629,35433,26178,34645,23526,35672,39387,21218,36969,37323,39166,35222,35430,22781,29560,27166,36664,26360,36118,23660,34899,27193,31466,25976,24101,38617,35504,38918,35500,30889,29197,32114,39164,39686,32883,24939,38924,35359,35494,25851,34311,35380,32901,38614,38568,32143,27506,23403,25613,32302,29795,37782,29562,25787,33274,24907,25892,36010,30321,28760,22727,35674,35527,22022,28271,29145,28644,32295,35342,39472,
-35588,37563,38988,39636,26781,36028,37941,24307,32893,28916,37509,32113,38957,22294,22615,22296,38973,40213,39345,39389,27234,31402,35178,24398,28771,38929,33836,32178,[12209,38859],36949,22285,29234,28656,32173,33894,20553,20702,32239,35586,34907,32862,32011,31337,21839,25790,34680,28198,31401,21978,37794,28879,35491,28961,34154,22626,38695,21209,35492,37675,29351,35186,32722,37521,25138,32048,34662,36676,23805,20448,29433,22151,37697,39854,32406,36066,37532,38289,39023,38570,29694,29563,32291,39201,
-25010,32171,38002,37129,35443,38911,38917,34157,22210,37559,26313,22063,21332,25406,33029,35559,23531,28681,35613,37573,37313,33288,37561,32137,38920,35377,32210,32396,36562,25080,36984,30316,32098,23416,21211,35426,23563,39348,35347,35338,36956,22739,40201,40232,21854,20126,35357,38329,40573,22196,38996,38331,33399,21421,30831,35578,39511,40230,26954,25562,30221,38525,30306,39178,27171,22575,35617,34277,29242,[12212,38913],26989,33865,37291,37541,38948,36986,20736,34811,34269,20740,25014,32681,35427,
-35696,35516,35695,32377,34093,38512,37504,39154,38577,27387,23344,40441,25033,32403,29801,34722,29151,29074,34821,36111,31310,21938,25793,20653,30320,36404,20778,24962,37109,37438,29494,35480,36671,39192,[12226,39770],28417,33287,23996,35486,39729,29508,35709,38928,39341,40219,28149,36677,22290,21729,22291,32227,36960,39E3,32004,36493,38E3,38322,38642,37142,38549,36939,34292,37270,26248,38620,36617,25890,26283,36106,36124,33247,38015,26839,31432,36012,25799,21063,28580,36042,36104,36555,37720,38296,
-35408,40779,20661,27656,30430,26028,36670,23940,26855,25136,32187,24373,28466,24115,36076,33081,36249,34756,36685,37754,36889,35998,37341,20597,35386,37806,38499,24128,30309,37165,35657,32340,32887,22519,34937,32025,25711,25842,24159,36074,28399,37912,32066,31278,33131,34886,35589,36600,30394,26205,39519,35576,35461,29165,30682,22225,36015,37956,31689,39376,23560,30938,36681,36090,27137,33674,35037,22941,22767,29376,37648,36101,22684,32180,35524,28310,28609,36039,28460,32156,32317,32305,37138,35419,
-32068,38013,21959,21401,21428,38760,36107,21293,21297,36094,21060,21132,21108,20660,20480,20630,20757,20738,20756,20796,20791,20712,20674,20795,20752,20794,20681,31988,40652,22213,40172,35131,33248,35329,35344,35340,35349,35635,35406,35365,35393,35382,35398,35412,35416,35410,35462,35460,35455,35440,35452,35445,35436,35438,35533,35554,35425,35482,35493,{f:2,c:35473},35535,35537,35529,35547,35543,35522,35510,35574,35563,35604,35585,35556,35565,35580,35571,35558,35566,35550,35624,35740,35606,35610,35600,
-35627,35629,35670,35673,35662,35742,35691,35734,38488,37178,37140,37172,37087,37174,37126,37192,33467,21233,24048,22538,22745,22754,22752,22746,22497,22607,22550,22610,22557,22628,34188,34131,34294,33703,33799,34031,33511,34338,34086,22603,29026,34136,34045,34126,34184,34234,29334,28366,34113,34254,34130,33984,33874,33892,33940,33845,34207,34133,40367,33939,32264,34118,34146,34078,39488,34362,37795,34167,34334,34298,34308,34282,34330,22889,23607,25451,25718,25759,25681,25692,25779,25860,25878,25847,
-25852,25883,22064,22072,22216,22182,21764,21692,22144,22109,22112,22069,22006,22118,22130,22156,22117,22044,22062,21993,22038,22208,22029,22195,22209,22127,36705,22198,22165,22279,24131,24172,24152,24151,23943,23796,23888,23852,23975,23968,23959,23821,23992,23937,24020,24480,29559,29505,29546,29499,29547,29568,29564,39136,39219,39145,39228,{f:2,c:39146},39149,39156,39177,39185,39195,39223,39231,39235,{f:3,c:39240},39244,39266,24289,36065,25082,25006,24938,24894,24757,24884,25036,24927,25064,24827,
-24887,24818,24947,24860,24978,38274,38278,38344,38286,38292,38284,38373,38317,38315,39726,38316,38334,38326,39721,38335,38333,38332,38339,38347,38356,38352,38357,38366,28739,28505,28711,28696,28668,28039,28025,28254,28590,28687,28408,28527,28150,28543,28678,28576,28683,28775,28740,28677,28535,28704,28703,28722,28712,28765,39467,36999,36885,37008,23656,24371,23285,23255,23296,23149,23304,23372,23207,23291,23307,23329,23338,23321,39380,39391,39385,39478,39515,39377,39384,39501,39498,39394,39530,39439,
-39437,39429,39490,39469,39446,39489,39470,39480,{f:2,c:39491},39503,39525,39524,31993,32006,32002,{f:2,c:32007},32394,32028,32021,32019,32058,32050,32049,32272,32060,32064,32063,32093,32078,32115,32134,32131,32136,32190,32186,32203,32212,32196,32158,32172,32185,32163,32176,32199,32217,32215,32249,32242,32354,32230,32246,32241,32267,32225,32265,32285,32287,32286,32301,32266,32273,32381,32313,32309,32306,32326,32325,32392,32346,32338,32366,32382,32368,32367,32408,29859,29771,29903,38922,29885,29759,
-29833,29862,29908,29914,38873,38878,38876,27050,27370,26776,26838,27141,26783,27355,27379,27368,27359,27273,26895,27208,26984,27071,27194,27292,27410,27422,27357,27111,27407,27414,27372,27354,27384,27315,27367,27299,27347,27358,27556,27550,27566,27563,27567,36564,36571,36594,36603,36708,36601,36604,36587,36580,36706,36602,36606,36618,36615,36613,36626,36646,{f:2,c:36638},36636,36659,36678,36692,25108,25127,29964,26311,26308,26249,26326,36033,36016,36026,36029,36100,36018,36037,36112,36049,36058,36053,
-36075,36071,36091,35224,35244,35233,35263,35238,35247,35250,35255,27647,27660,27692,29272,26407,33110,33242,33051,33214,33121,33231,27487,{f:2,c:39086},39094,39100,39110,39112,36674,40783,26005,29036,29010,29079,29121,29148,29182,31152,31118,31146,25055,24932,25059,25095,28585,30959,30893,30824,30904,31018,31025,30820,30973,30951,30947,40853,30616,30558,30652,32646,32648,{f:3,c:37330},37337,37335,37333,37367,37351,37348,37702,37365,37369,37384,37414,37445,37393,37392,37377,37415,37380,37413,37376,
-37434,37478,37431,37427,37461,37437,37432,37470,{f:2,c:37484},37439,37984,37424,37449,37448,37453,37422,37433,37944,37548,37536,37498,37546,37614,37583,37891,37603,37946,37553,37542,37799,37526,37580,37545,37877,37523,37503,37801,37530,37658,37547,37507,37899,37544,37539,37906,37688,37617,37847,37605,37616,37615,37608,37564,37597,37622,{f:2,c:37926},37571,37599,37606,37650,37638,37737,37659,37696,37633,37653,37678,37699,{f:2,c:37639},37663,37657,37733,37703,37750,37716,37732,37802,37744,37764,37860,
-37848,37928,37767,37836,37784,37816,37823,37798,37808,37813,37964,37858,{f:2,c:37852},37837,37854,37827,37831,37841,37908,37917,37879,37989,37907,37997,37920,38009,37881,37913,37962,37938,37951,37972,37987,37758,31329,40169,40182,40199,40198,40227,40327,40469,40221,40223,40421,40239,40409,40240,40258,40478,40275,40477,40288,40274,40435,40284,40289,40339,40298,40303,40329,40344,40346,40384,40357,40361,40386,40380,40474,40403,40410,40431,40422,40434,40440,40460,40442,40475,30308,30296,30311,30210,{f:2,
-c:30278},30281,30238,30267,{f:2,c:30317},30313,30322,31431,31414,35168,35123,35165,35143,35128,35172,30392,32814,32812,32889,32885,38919,{f:2,c:38926},38945,38940,28481,38950,38967,38990,38995,39027,39010,39001,39013,39020,39024,34787,34822,34566,34851,34806,34554,34799,34692,34832,34760,34833,34747,34766,32588,31716,31591,31849,31731,31744,31691,31836,31774,31787,31779,31850,31839,33380,33387,35018,32677,31986,31990,31965,32310,40617,36274,37317,37315,40570,36489,36428,36498,36474,36437,36506,36491,
-36499,36497,36513,36451,36522,36518,35316,35318,38746,38722,38717,38724,40788,40799,40793,40800,40796,40806,40812,40810,40823,[12236,40701],40703,40713,35726,38014,37864,39799,39796,39809,39811,39822,40056,31308,39826,40031,39824,39853,39834,39850,39838,40045,39851,39837,40024,39873,40058,39985,39993,39971,39991,39872,39882,39879,39933,39894,{f:2,c:39914},39905,39908,39911,39901,39906,39920,39899,39924,39892,40029,39944,39952,39949,39954,39945,39935,39968,39986,39981,39976,39973,39977,39987,39998,
-40008,39995,39989,40005,40022,40020,40018,40039,38851,38845,38857,40379,39631,39638,39637,39768,39758,39255,39260,39714,40695,40690,35180,38342,37686,24390,34068,32404,40803,22137,40725,22081,39662,35079,31296,39091,38308,39693,36852,24409,31339,39138,20642,34193,20760,25458,21067,30543,32397,26310,30637,[12228,40565],22217,40692,28635,25054,30663,28720,40629,34890,38370,38854,31844,32308,38822,40623,22220,39089,27311,32590,31984,20418,32363,40569,22190,39706,33903,31142,31858,39634,38587,32251,35069,
-30787,{f:10,c:8560},{f:2,c:714},729,8211,8213,8229,8245,8453,8457,{f:4,c:8598},8725,8735,8739,8786,{f:2,c:8806},8895,{f:36,c:9552},{f:15,c:9601},{f:3,c:9619},{f:2,c:9660},{f:4,c:9698},9737,8853,12306,{f:2,c:12317},{f:9,c:12321},12963,{f:2,c:13198},{f:3,c:13212},13217,13252,13262,{f:2,c:13265},13269,65072,65506,65508,8481,12849,8208,12540,{f:2,c:12443},{f:2,c:12541},12294,{f:2,c:12445},{f:10,c:65097},{f:4,c:65108},{f:14,c:65113},{f:4,c:65128},12350,{f:12,c:12272},19970,{f:3,c:19972},19983,19986,19991,
-{f:3,c:19999},20003,20006,20009,{f:2,c:20014},20017,20019,20021,20023,20028,{f:3,c:20032},20036,20038,20042,20049,20053,20055,{f:2,c:20058},{f:4,c:20066},{f:2,c:20071},{f:6,c:20074},20082,{f:10,c:20084},{f:3,c:20095},{f:2,c:20099},[12037,20101],20103,20106,20112,{f:2,c:20118},20121,{f:2,c:20124},20131,20138,{f:3,c:20143},20148,{f:4,c:20150},{f:3,c:20156},20168,20172,{f:2,c:20175},20178,{f:3,c:20186},20192,20194,{f:2,c:20198},20201,{f:3,c:20205},20209,20212,{f:3,c:20216},20220,20222,20224,{f:7,c:20226},
-{f:2,c:20235},{f:5,c:20242},{f:2,c:20252},20257,20259,{f:2,c:20264},{f:3,c:20268},20273,20275,20277,20279,20281,20283,{f:5,c:20286},{f:2,c:20292},{f:6,c:20295},20306,20308,20310,{f:2,c:20321},20326,20328,{f:2,c:20330},{f:2,c:20333},{f:2,c:20337},20341,{f:4,c:20343},20349,{f:3,c:20352},20357,20359,20362,20364,20366,20368,{f:2,c:20370},20373,{f:3,c:20376},20380,{f:2,c:20382},{f:2,c:20385},20388,20395,20397,{f:5,c:20400},{f:9,c:20406},{f:2,c:20416},{f:4,c:20422},{f:3,c:20427},{f:5,c:20434},20441,20443,
-20450,{f:2,c:20452},20455,{f:2,c:20459},20464,20466,{f:4,c:20468},20473,{f:3,c:20475},20479,{f:5,c:20481},{f:2,c:20487},20490,20494,20496,20499,{f:3,c:20501},20507,{f:2,c:20509},20512,{f:3,c:20514},20519,{f:11,c:20527},20539,20541,{f:4,c:20543},{f:3,c:20548},{f:2,c:20554},20557,{f:5,c:20560},{f:4,c:20566},20571,{f:8,c:20573},{f:6,c:20582},{f:7,c:20589},{f:3,c:20600},{f:2,c:20604},{f:4,c:20609},{f:2,c:20614},{f:4,c:20617},{f:8,c:20622},20631,{f:8,c:20634},20644,20646,{f:2,c:20650},{f:4,c:20654},20662,
-{f:2,c:20664},{f:2,c:20668},{f:3,c:20671},{f:2,c:20675},{f:3,c:20678},{f:5,c:20682},20688,{f:3,c:20690},{f:3,c:20695},{f:3,c:20699},{f:6,c:20703},{f:3,c:20713},{f:4,c:20719},20724,{f:3,c:20726},20730,{f:4,c:20732},20737,20739,20741,20746,{f:4,c:20748},20753,20755,{f:2,c:20758},{f:6,c:20761},20768,{f:8,c:20770},{f:7,c:20779},{f:4,c:20787},{f:2,c:20792},{f:2,c:20797},20802,20807,20810,20812,{f:3,c:20814},20819,{f:3,c:20823},20827,{f:5,c:20829},{f:2,c:20835},{f:2,c:20838},20842,20847,20850,20858,{f:2,
-c:20862},{f:2,c:20867},{f:2,c:20870},{f:2,c:20874},{f:4,c:20878},{f:2,c:20883},20888,20890,{f:3,c:20893},20897,20899,{f:5,c:20902},{f:2,c:20909},20916,{f:3,c:20920},{f:2,c:20926},{f:3,c:20929},20933,20936,20938,20942,20944,{f:9,c:20946},20956,{f:2,c:20958},{f:2,c:20962},{f:6,c:20965},20972,20974,20978,20980,20983,20990,{f:2,c:20996},21001,{f:2,c:21003},{f:2,c:21007},{f:3,c:21011},21020,{f:2,c:21022},{f:3,c:21025},{f:3,c:21029},21034,21036,21039,{f:2,c:21041},{f:2,c:21044},21052,21054,{f:2,c:21061},
-{f:2,c:21064},{f:2,c:21070},{f:2,c:21074},21077,{f:4,c:21079},21085,{f:2,c:21087},{f:3,c:21090},21094,21096,{f:3,c:21099},{f:2,c:21104},21107,{f:7,c:21110},21118,21120,{f:3,c:21124},21131,{f:2,c:21134},21138,{f:7,c:21140},21148,{f:4,c:21156},{f:3,c:21166},{f:10,c:21172},21184,21186,{f:3,c:21188},21192,21194,{f:4,c:21196},21201,{f:2,c:21203},21207,21210,21212,{f:2,c:21216},21219,{f:11,c:21221},{f:3,c:21234},{f:2,c:21238},{f:3,c:21243},{f:4,c:21249},21255,{f:4,c:21257},21262,{f:4,c:21265},21272,{f:2,
-c:21275},{f:2,c:21278},21282,{f:2,c:21284},{f:3,c:21287},{f:2,c:21291},21296,{f:6,c:21298},[12054,21304],{f:2,c:21308},21314,21316,21318,{f:3,c:21323},21328,{f:2,c:21336},21339,21341,21349,21352,21354,{f:2,c:21356},21362,21366,21369,{f:4,c:21371},{f:2,c:21376},21379,{f:2,c:21383},21386,{f:7,c:21390},{f:2,c:21398},{f:2,c:21403},21406,21409,21412,21415,{f:3,c:21418},{f:3,c:21423},21427,21429,{f:4,c:21431},{f:3,c:21436},21440,{f:4,c:21444},{f:3,c:21454},{f:2,c:21458},21461,21466,{f:3,c:21468},21473,
-21479,21492,21498,{f:3,c:21502},21506,21509,21511,21515,21524,{f:3,c:21528},21532,21538,{f:2,c:21540},21546,21552,21555,{f:2,c:21558},21562,21565,21567,{f:2,c:21569},{f:2,c:21572},21575,21577,{f:4,c:21580},21585,21594,{f:5,c:21597},21603,21605,21607,{f:8,c:21609},21620,{f:2,c:21625},{f:2,c:21630},21633,21635,21637,{f:4,c:21639},21645,21649,21651,{f:2,c:21655},21660,{f:5,c:21662},21669,21678,21680,21682,{f:3,c:21685},{f:2,c:21689},21694,21699,21701,{f:2,c:21706},21718,21720,21723,21728,{f:3,c:21730},
-{f:2,c:21739},{f:3,c:21743},{f:6,c:21748},21755,21758,21760,{f:2,c:21762},21765,21768,{f:5,c:21770},{f:2,c:21778},{f:6,c:21781},{f:4,c:21788},21793,{f:2,c:21797},{f:2,c:21800},21803,21805,21810,{f:3,c:21812},{f:4,c:21816},21821,21824,21826,21829,{f:2,c:21831},{f:4,c:21835},{f:2,c:21841},21844,{f:5,c:21847},21853,{f:2,c:21855},{f:2,c:21858},{f:2,c:21864},21867,{f:6,c:21871},{f:2,c:21881},21885,21887,{f:2,c:21893},{f:3,c:21900},21904,{f:2,c:21906},{f:3,c:21909},{f:2,c:21914},21918,{f:7,c:21920},{f:2,
-c:21928},21931,21933,{f:2,c:21935},21940,21942,21944,21946,21948,{f:5,c:21951},21960,{f:2,c:21962},{f:2,c:21967},21973,{f:3,c:21975},21979,21982,21984,21986,21991,{f:2,c:21997},{f:2,c:22E3},22004,{f:5,c:22008},22015,{f:4,c:22018},22023,{f:2,c:22026},{f:4,c:22032},22037,{f:2,c:22041},22045,{f:3,c:22048},{f:2,c:22053},22056,{f:2,c:22058},22067,22071,22074,{f:3,c:22076},22080,{f:10,c:22082},{f:5,c:22095},{f:2,c:22101},{f:2,c:22106},{f:2,c:22110},22113,22115,22119,{f:2,c:22125},22128,22131,22133,22135,
-22138,{f:3,c:22141},{f:4,c:22145},{f:4,c:22152},22157,{f:3,c:22160},22164,{f:3,c:22166},{f:9,c:22170},{f:2,c:22180},22183,{f:5,c:22185},{f:3,c:22192},22197,{f:4,c:22200},{f:3,c:22205},{f:2,c:22211},{f:2,c:22214},22219,{f:4,c:22221},{f:2,c:22226},{f:2,c:22229},{f:2,c:22232},22236,22243,{f:6,c:22245},22252,{f:2,c:22254},{f:2,c:22258},{f:3,c:22262},{f:2,c:22267},{f:3,c:22272},22277,22284,{f:4,c:22286},{f:2,c:22292},22295,{f:3,c:22297},{f:2,c:22301},{f:3,c:22304},{f:4,c:22308},22315,{f:2,c:22321},{f:5,
-c:22324},{f:2,c:22332},22335,22337,{f:4,c:22339},{f:2,c:22344},22347,{f:5,c:22354},{f:2,c:22360},{f:2,c:22370},22373,22375,22380,22382,{f:3,c:22384},{f:2,c:22388},{f:3,c:22392},{f:5,c:22397},{f:4,c:22407},{f:5,c:22413},{f:7,c:22420},{f:4,c:22428},22437,22440,22442,22444,{f:3,c:22447},22451,{f:3,c:22453},{f:9,c:22457},{f:7,c:22468},{f:2,c:22476},{f:2,c:22480},22483,{f:2,c:22486},{f:2,c:22491},22494,{f:2,c:22498},{f:8,c:22501},22510,{f:4,c:22512},{f:2,c:22517},{f:2,c:22523},{f:2,c:22526},22529,{f:2,
-c:22531},{f:2,c:22536},22540,{f:3,c:22542},{f:3,c:22546},{f:2,c:22551},{f:3,c:22554},22559,{f:2,c:22562},{f:5,c:22565},{f:4,c:22571},{f:2,c:22578},{f:14,c:22582},{f:5,c:22597},22606,22608,22611,{f:2,c:22613},{f:5,c:22617},{f:3,c:22623},22627,{f:5,c:22630},{f:8,c:22637},{f:3,c:22646},{f:4,c:22650},22655,22658,22660,{f:3,c:22662},{f:7,c:22667},{f:5,c:22676},22683,22685,{f:8,c:22688},{f:4,c:22698},{f:4,c:22703},{f:7,c:22708},22717,{f:2,c:22719},{f:3,c:22722},22726,{f:9,c:22728},22738,22740,{f:2,c:22742},
-{f:3,c:22747},22753,22755,{f:4,c:22757},22762,22765,{f:2,c:22769},{f:2,c:22772},{f:2,c:22775},{f:2,c:22779},{f:4,c:22782},22787,{f:2,c:22789},{f:2,c:22792},[12066,22794],{f:2,c:22795},22798,{f:4,c:22800},{f:2,c:22807},22811,{f:2,c:22813},{f:2,c:22816},22819,22822,22824,22828,22832,{f:2,c:22834},{f:2,c:22837},22843,22845,{f:2,c:22847},22851,{f:2,c:22853},22858,{f:2,c:22860},22864,{f:2,c:22866},22873,{f:5,c:22875},22881,{f:2,c:22883},{f:3,c:22886},22891,22893,{f:4,c:22895},22901,22903,{f:3,c:22906},
-{f:3,c:22910},22917,22921,{f:2,c:22923},{f:4,c:22926},{f:2,c:22932},22936,{f:3,c:22938},{f:4,c:22943},{f:2,c:22950},{f:2,c:22956},{f:2,c:22960},{f:6,c:22963},22970,{f:2,c:22972},{f:7,c:22975},{f:3,c:22983},{f:4,c:22988},{f:2,c:22997},23001,23003,{f:5,c:23006},23012,{f:2,c:23014},{f:3,c:23017},{f:12,c:23021},23034,{f:3,c:23036},23040,23042,{f:2,c:23050},{f:4,c:23053},23058,{f:4,c:23060},{f:3,c:23065},{f:2,c:23069},{f:2,c:23073},23076,{f:3,c:23078},{f:7,c:23082},23091,23093,{f:5,c:23095},{f:3,c:23101},
-{f:4,c:23106},{f:2,c:23111},{f:10,c:23115},{f:4,c:23126},{f:7,c:23131},{f:3,c:23139},{f:2,c:23144},{f:2,c:23147},{f:6,c:23150},{f:2,c:23160},{f:4,c:23163},{f:18,c:23168},{f:7,c:23187},{f:11,c:23196},{f:2,c:23208},{f:7,c:23211},23220,{f:2,c:23222},{f:4,c:23225},{f:2,c:23231},{f:6,c:23235},{f:2,c:23242},{f:5,c:23245},23251,23253,{f:3,c:23257},{f:3,c:23261},23266,{f:2,c:23268},{f:2,c:23271},23274,{f:5,c:23276},{f:3,c:23282},{f:5,c:23286},{f:4,c:23292},{f:7,c:23297},23306,{f:9,c:23309},23320,{f:7,c:23322},
-{f:8,c:23330},{f:5,c:23339},23345,23347,{f:2,c:23349},{f:7,c:23353},{f:11,c:23361},{f:3,c:23373},23378,23382,23390,{f:2,c:23392},{f:2,c:23399},{f:3,c:23405},23410,23412,{f:2,c:23414},23417,{f:2,c:23419},23422,23426,23430,23434,{f:2,c:23437},{f:3,c:23440},23444,23446,23455,{f:3,c:23463},{f:4,c:23468},{f:2,c:23473},23479,{f:3,c:23482},{f:2,c:23488},23491,{f:4,c:23496},{f:3,c:23501},23505,{f:9,c:23508},23520,23523,23530,23533,23535,{f:4,c:23537},23543,{f:2,c:23549},23552,{f:2,c:23554},23557,23564,23568,
-{f:2,c:23570},23575,23577,23579,{f:4,c:23582},23587,23590,{f:4,c:23592},{f:4,c:23597},{f:2,c:23602},{f:2,c:23605},{f:2,c:23619},{f:2,c:23622},{f:2,c:23628},{f:3,c:23634},{f:3,c:23638},{f:4,c:23642},23647,23655,{f:3,c:23657},23661,23664,{f:7,c:23666},{f:4,c:23675},23680,{f:5,c:23683},{f:3,c:23689},{f:2,c:23694},{f:2,c:23698},23701,{f:4,c:23709},{f:5,c:23716},23722,{f:3,c:23726},23730,23732,23734,{f:4,c:23737},23742,23744,{f:2,c:23746},{f:6,c:23749},{f:6,c:23756},{f:6,c:23763},{f:7,c:23770},{f:2,c:23778},
-23783,23785,{f:2,c:23787},{f:2,c:23790},{f:3,c:23793},23797,{f:4,c:23799},23804,{f:4,c:23806},{f:2,c:23812},{f:5,c:23816},{f:5,c:23823},23829,{f:3,c:23832},{f:2,c:23836},{f:5,c:23839},23845,23848,{f:2,c:23850},{f:5,c:23855},{f:8,c:23861},{f:8,c:23871},{f:2,c:23880},{f:3,c:23885},{f:7,c:23889},{f:2,c:23897},23900,{f:11,c:23902},23914,{f:2,c:23917},{f:4,c:23920},{f:12,c:23925},23939,{f:2,c:23941},{f:15,c:23944},23960,{f:3,c:23962},{f:2,c:23966},{f:6,c:23969},{f:15,c:23976},23993,23995,{f:8,c:23997},
-{f:5,c:24006},24012,{f:4,c:24014},24019,{f:6,c:24021},24028,{f:2,c:24031},{f:2,c:24035},24042,{f:2,c:24044},{f:2,c:24053},{f:5,c:24056},{f:2,c:24063},24068,24071,{f:3,c:24073},{f:2,c:24077},{f:2,c:24082},24087,{f:7,c:24094},{f:3,c:24104},24108,{f:2,c:24111},24114,{f:2,c:24116},{f:2,c:24121},{f:2,c:24126},24129,{f:6,c:24134},{f:7,c:24141},24150,{f:2,c:24153},{f:2,c:24156},24160,{f:7,c:24164},{f:5,c:24173},24181,24183,{f:3,c:24193},24197,{f:2,c:24200},{f:3,c:24204},24210,24216,24219,24221,{f:4,c:24225},
-{f:3,c:24232},24236,{f:5,c:24238},24244,{f:4,c:24250},{f:10,c:24255},{f:6,c:24267},{f:2,c:24276},{f:4,c:24279},{f:3,c:24284},{f:4,c:24292},24297,24299,{f:6,c:24301},24309,{f:2,c:24312},{f:3,c:24315},{f:3,c:24325},24329,{f:3,c:24332},24336,24338,24340,24342,{f:2,c:24345},{f:3,c:24348},{f:4,c:24353},24360,{f:2,c:24363},24366,24368,24370,24372,{f:3,c:24374},24379,{f:3,c:24381},{f:5,c:24385},24391,{f:3,c:24393},24397,24399,24401,24404,{f:3,c:24410},{f:3,c:24414},24419,24421,{f:2,c:24423},24427,{f:2,c:24430},
-24434,{f:3,c:24436},24440,24442,{f:3,c:24445},24451,24454,{f:3,c:24461},{f:2,c:24467},24470,{f:2,c:24474},24477,24479,{f:6,c:24482},{f:2,c:24491},{f:6,c:24495},24502,24504,{f:2,c:24506},{f:5,c:24510},{f:2,c:24519},{f:2,c:24522},24526,{f:3,c:24531},{f:3,c:24538},{f:2,c:24542},{f:2,c:24546},{f:2,c:24549},{f:2,c:24552},24556,{f:2,c:24559},{f:3,c:24562},{f:2,c:24566},{f:2,c:24569},24572,{f:3,c:24583},{f:2,c:24587},{f:2,c:24592},24595,{f:2,c:24599},24602,{f:2,c:24606},{f:3,c:24610},{f:3,c:24620},{f:5,
-c:24624},{f:5,c:24630},{f:2,c:24637},24640,{f:7,c:24644},24652,{f:2,c:24654},24657,{f:2,c:24659},{f:3,c:24662},{f:2,c:24667},{f:4,c:24670},{f:2,c:24677},24686,{f:2,c:24689},{f:2,c:24692},24695,24702,{f:3,c:24704},{f:4,c:24709},{f:2,c:24714},{f:4,c:24718},24723,24725,{f:3,c:24727},24732,24734,{f:2,c:24737},{f:2,c:24740},24743,{f:2,c:24745},24750,24752,24755,24759,{f:2,c:24761},{f:8,c:24765},{f:3,c:24775},{f:5,c:24780},{f:3,c:24786},{f:2,c:24790},24793,24795,24798,{f:4,c:24802},24810,24821,{f:2,c:24823},
-{f:4,c:24828},{f:4,c:24834},24839,{f:3,c:24842},{f:5,c:24848},{f:4,c:24854},{f:2,c:24861},{f:2,c:24865},24869,{f:3,c:24872},{f:8,c:24876},{f:2,c:24885},{f:6,c:24888},{f:8,c:24896},24905,24909,{f:2,c:24911},{f:3,c:24914},{f:2,c:24918},24921,{f:2,c:24923},24926,{f:2,c:24928},{f:2,c:24933},24937,{f:2,c:24940},24943,{f:2,c:24945},24948,{f:10,c:24952},{f:7,c:24963},{f:2,c:24972},24975,24979,{f:5,c:24981},{f:2,c:24987},{f:6,c:24990},{f:2,c:24997},25002,25005,{f:3,c:25007},{f:3,c:25011},{f:6,c:25016},{f:3,
-c:25023},{f:4,c:25027},{f:4,c:25037},25043,{f:9,c:25045},{f:3,c:25056},{f:2,c:25060},25063,{f:9,c:25065},{f:2,c:25075},25081,25083,25085,{f:5,c:25089},25097,25107,25113,{f:3,c:25116},25120,25123,25126,{f:2,c:25128},25131,25133,25135,25137,25141,[12094,25142],{f:5,c:25144},25154,{f:3,c:25156},25162,{f:2,c:25167},{f:3,c:25173},{f:2,c:25177},{f:7,c:25180},{f:2,c:25188},25192,{f:2,c:25201},{f:2,c:25204},{f:2,c:25207},{f:2,c:25210},25213,{f:3,c:25217},{f:4,c:25221},{f:6,c:25227},25236,25241,{f:3,c:25244},
-25251,{f:2,c:25254},{f:2,c:25257},{f:4,c:25261},{f:3,c:25266},{f:3,c:25270},25274,25278,{f:2,c:25280},25283,25291,25295,25297,25301,{f:2,c:25309},{f:2,c:25312},25316,{f:2,c:25322},25328,25330,25333,{f:4,c:25336},25344,{f:4,c:25347},{f:4,c:25354},{f:2,c:25359},{f:4,c:25362},{f:3,c:25367},25372,{f:2,c:25382},25385,{f:3,c:25388},{f:2,c:25392},{f:6,c:25395},{f:2,c:25403},{f:3,c:25407},25412,{f:2,c:25415},25418,{f:4,c:25425},{f:8,c:25430},25440,{f:3,c:25444},25450,25452,{f:2,c:25455},{f:3,c:25459},{f:2,
-c:25464},{f:4,c:25468},25473,{f:2,c:25477},25483,25485,25489,{f:3,c:25491},25495,{f:7,c:25497},25505,25508,25510,25515,25519,{f:2,c:25521},{f:2,c:25525},25529,25531,25533,25535,{f:3,c:25537},25541,{f:2,c:25543},{f:3,c:25546},25553,{f:3,c:25555},{f:3,c:25559},{f:3,c:25563},25567,25570,{f:5,c:25572},{f:2,c:25579},{f:3,c:25583},25587,25589,25591,{f:4,c:25593},25598,{f:2,c:25603},{f:5,c:25606},25614,{f:2,c:25617},{f:2,c:25621},{f:3,c:25624},25629,25631,{f:4,c:25634},{f:3,c:25639},25643,{f:6,c:25646},
-25653,{f:3,c:25655},{f:2,c:25659},25662,25664,{f:2,c:25666},25673,{f:6,c:25675},25683,{f:3,c:25685},{f:3,c:25689},25693,{f:7,c:25696},25704,{f:3,c:25706},25710,{f:3,c:25712},{f:2,c:25716},25719,{f:6,c:25724},25731,25734,{f:8,c:25737},25748,{f:2,c:25751},{f:4,c:25754},{f:3,c:25760},{f:3,c:25766},25770,25775,25777,25780,25782,25785,25789,25795,25798,{f:2,c:25800},25804,25807,25809,25811,{f:2,c:25813},25817,{f:3,c:25819},25823,25825,25827,25829,{f:5,c:25831},{f:2,c:25837},25843,{f:2,c:25845},{f:2,c:25848},
-25853,25855,{f:3,c:25857},25861,{f:2,c:25863},{f:5,c:25866},{f:2,c:25872},25875,25877,25879,25882,25884,{f:4,c:25886},{f:4,c:25894},25901,{f:4,c:25904},25911,25914,{f:2,c:25916},{f:5,c:25920},{f:2,c:25926},{f:2,c:25930},{f:2,c:25933},25936,{f:3,c:25938},25944,25946,25948,{f:3,c:25951},{f:2,c:25956},{f:4,c:25959},{f:3,c:25965},25969,25971,25974,{f:9,c:25977},{f:3,c:25988},{f:3,c:25992},{f:3,c:25997},26002,26004,26006,26008,26010,{f:2,c:26013},26016,{f:2,c:26018},26022,26024,26026,26030,{f:6,c:26033},
-26040,{f:2,c:26042},{f:3,c:26046},26050,{f:4,c:26055},26061,{f:2,c:26064},{f:3,c:26067},{f:8,c:26072},26081,{f:2,c:26083},{f:2,c:26090},{f:4,c:26098},{f:2,c:26104},{f:5,c:26107},26113,{f:2,c:26116},{f:3,c:26119},26123,26125,{f:3,c:26128},{f:3,c:26134},{f:3,c:26138},26142,{f:4,c:26145},26150,{f:4,c:26153},26158,26160,{f:2,c:26162},{f:5,c:26167},26173,{f:2,c:26175},{f:7,c:26180},{f:2,c:26189},{f:2,c:26192},{f:2,c:26200},{f:2,c:26203},26206,26208,{f:2,c:26210},26213,26215,{f:5,c:26217},{f:3,c:26225},
-26229,{f:2,c:26232},{f:3,c:26235},{f:3,c:26239},26243,{f:2,c:26245},{f:2,c:26250},{f:4,c:26253},{f:4,c:26258},{f:5,c:26264},{f:4,c:26270},{f:4,c:26275},{f:2,c:26281},{f:2,c:26284},{f:5,c:26287},{f:4,c:26293},{f:4,c:26298},{f:5,c:26303},26309,26312,{f:12,c:26314},{f:2,c:26327},26330,{f:2,c:26334},{f:5,c:26337},{f:2,c:26343},{f:2,c:26346},{f:3,c:26349},26353,{f:2,c:26357},{f:2,c:26362},26365,{f:2,c:26369},{f:4,c:26372},26380,{f:2,c:26382},{f:3,c:26385},26390,{f:3,c:26392},26396,26398,{f:6,c:26400},
-26409,26414,26416,{f:2,c:26418},{f:4,c:26422},{f:2,c:26427},{f:2,c:26430},26433,{f:2,c:26436},26439,{f:2,c:26442},26445,26450,{f:2,c:26452},{f:5,c:26455},26461,{f:3,c:26466},{f:2,c:26470},{f:2,c:26475},26478,26484,26486,{f:4,c:26488},26493,26496,{f:2,c:26498},{f:2,c:26501},26504,26506,{f:4,c:26508},{f:4,c:26513},26518,26521,26523,{f:3,c:26527},26532,26534,26537,26540,26542,{f:2,c:26545},26548,{f:8,c:26553},26562,{f:10,c:26565},{f:3,c:26581},26587,26591,26593,{f:2,c:26595},{f:3,c:26598},{f:2,c:26602},
-{f:2,c:26605},26610,{f:8,c:26613},26622,{f:4,c:26625},26630,26637,26640,26642,{f:2,c:26644},{f:5,c:26648},{f:3,c:26654},{f:7,c:26658},{f:7,c:26667},{f:3,c:26676},{f:2,c:26682},26687,26695,26699,26701,26703,26706,{f:10,c:26710},26730,{f:8,c:26732},26741,{f:9,c:26744},26754,26756,{f:8,c:26759},{f:3,c:26768},{f:3,c:26772},{f:4,c:26777},26782,{f:2,c:26784},{f:3,c:26787},{f:4,c:26793},26798,{f:2,c:26801},26804,{f:10,c:26806},26817,{f:6,c:26819},26826,26828,{f:4,c:26830},{f:2,c:26835},26841,{f:4,c:26843},
-{f:2,c:26849},{f:3,c:26852},{f:6,c:26856},26863,{f:3,c:26866},{f:3,c:26870},26875,{f:4,c:26877},{f:3,c:26882},{f:5,c:26886},26892,26897,{f:12,c:26899},{f:3,c:26913},{f:8,c:26917},{f:2,c:26926},{f:3,c:26929},{f:4,c:26933},{f:3,c:26938},26942,{f:2,c:26944},{f:7,c:26947},{f:8,c:26955},{f:2,c:26965},{f:2,c:26968},{f:2,c:26971},26975,{f:2,c:26977},{f:2,c:26980},26983,{f:2,c:26985},26988,{f:2,c:26991},{f:3,c:26994},26998,{f:2,c:27002},{f:3,c:27005},27009,27011,27013,{f:3,c:27018},{f:6,c:27022},{f:2,c:27030},
-{f:2,c:27033},{f:10,c:27037},27049,27052,{f:2,c:27055},{f:2,c:27058},{f:2,c:27061},{f:3,c:27064},{f:3,c:27068},27072,{f:8,c:27074},27087,{f:3,c:27089},{f:6,c:27093},{f:3,c:27100},{f:6,c:27105},{f:5,c:27112},{f:4,c:27118},{f:9,c:27124},27134,27136,{f:2,c:27139},{f:4,c:27142},{f:8,c:27147},{f:3,c:27156},{f:4,c:27162},27168,27170,{f:4,c:27172},27177,{f:4,c:27179},27184,{f:3,c:27186},{f:2,c:27190},{f:2,c:27195},{f:5,c:27199},{f:2,c:27205},{f:2,c:27209},{f:4,c:27212},{f:7,c:27217},27226,{f:3,c:27228},
-27232,{f:2,c:27235},{f:11,c:27238},{f:7,c:27250},{f:2,c:27258},{f:3,c:27261},{f:3,c:27265},{f:4,c:27269},{f:4,c:27274},27279,{f:2,c:27282},{f:2,c:27285},{f:4,c:27288},{f:3,c:27293},27297,{f:5,c:27300},27306,{f:2,c:27309},{f:3,c:27312},{f:4,c:27316},{f:2,c:27321},{f:7,c:27324},{f:15,c:27332},{f:6,c:27348},27356,{f:7,c:27360},27369,27371,{f:6,c:27373},{f:4,c:27380},{f:2,c:27385},{f:8,c:27388},{f:5,c:27397},{f:4,c:27403},{f:2,c:27408},{f:3,c:27411},{f:7,c:27415},27423,{f:2,c:27429},{f:10,c:27432},{f:4,
-c:27443},27448,{f:2,c:27451},{f:4,c:27455},{f:2,c:27460},27464,{f:2,c:27466},{f:3,c:27469},{f:8,c:27473},{f:5,c:27482},27488,{f:2,c:27496},{f:7,c:27499},{f:4,c:27507},27514,{f:4,c:27517},27525,27528,27532,{f:4,c:27534},{f:2,c:27540},27543,27545,{f:2,c:27548},{f:2,c:27551},{f:2,c:27554},{f:5,c:27557},{f:2,c:27564},{f:2,c:27568},27574,{f:2,c:27576},{f:3,c:27580},27584,{f:2,c:27587},{f:4,c:27591},27596,27598,{f:2,c:27600},27608,27610,{f:5,c:27612},{f:8,c:27618},{f:3,c:27628},{f:3,c:27632},27636,{f:3,
-c:27638},{f:3,c:27642},27646,{f:5,c:27648},{f:3,c:27657},27662,27666,27671,{f:3,c:27676},27680,27685,27693,27697,27699,{f:2,c:27702},{f:4,c:27705},{f:2,c:27710},{f:3,c:27715},27720,{f:5,c:27723},{f:3,c:27729},27734,{f:3,c:27736},{f:2,c:27746},{f:3,c:27749},{f:5,c:27755},27761,27763,27765,{f:2,c:27767},{f:3,c:27770},{f:2,c:27775},27780,27783,{f:2,c:27786},{f:2,c:27789},{f:2,c:27793},{f:4,c:27797},27802,{f:3,c:27804},27808,27810,27816,27820,{f:2,c:27823},{f:4,c:27828},27834,{f:4,c:27840},{f:3,c:27846},
-27851,{f:3,c:27853},{f:2,c:27857},{f:3,c:27864},{f:2,c:27868},27871,27876,{f:2,c:27878},27881,{f:2,c:27884},27890,27892,27897,{f:2,c:27903},{f:2,c:27906},{f:2,c:27909},{f:3,c:27912},27917,{f:3,c:27919},{f:4,c:27923},27928,{f:2,c:27932},{f:6,c:27935},27942,{f:2,c:27944},{f:2,c:27948},{f:2,c:27951},27956,{f:3,c:27958},27962,{f:2,c:27967},27970,27972,27977,27980,27984,{f:4,c:27989},27995,27997,27999,{f:2,c:28001},{f:2,c:28004},{f:2,c:28007},{f:3,c:28011},{f:4,c:28016},{f:2,c:28021},{f:2,c:28026},{f:5,
-c:28029},{f:2,c:28035},28038,{f:2,c:28042},28045,{f:2,c:28047},28050,{f:5,c:28054},28060,28066,28069,{f:2,c:28076},{f:2,c:28080},{f:2,c:28083},{f:2,c:28086},{f:6,c:28089},{f:3,c:28097},{f:3,c:28104},{f:4,c:28109},{f:4,c:28114},28119,{f:3,c:28122},28127,{f:2,c:28130},28133,{f:3,c:28135},28141,{f:2,c:28143},28146,28148,28152,{f:8,c:28157},{f:4,c:28166},28171,28175,{f:2,c:28178},28181,{f:2,c:28184},{f:2,c:28187},{f:2,c:28190},28194,{f:2,c:28199},28202,28206,{f:2,c:28208},28211,{f:3,c:28213},28217,{f:3,
-c:28219},{f:4,c:28223},{f:8,c:28229},{f:4,c:28239},28245,28247,{f:2,c:28249},{f:2,c:28252},{f:11,c:28256},{f:2,c:28268},{f:14,c:28272},{f:3,c:28288},28292,{f:2,c:28295},{f:5,c:28298},{f:5,c:28305},28311,{f:3,c:28313},28318,{f:2,c:28320},{f:2,c:28323},28326,{f:2,c:28328},{f:4,c:28331},28336,28339,28341,{f:2,c:28344},28348,{f:3,c:28350},28355,28358,{f:3,c:28360},28365,28368,28370,28374,{f:2,c:28376},{f:3,c:28379},28387,28391,{f:2,c:28394},{f:2,c:28397},{f:2,c:28400},28403,{f:2,c:28405},{f:5,c:28410},
-28416,{f:3,c:28419},{f:2,c:28423},{f:5,c:28426},{f:3,c:28432},{f:4,c:28438},{f:5,c:28443},28449,{f:4,c:28453},28462,28464,{f:2,c:28468},28471,{f:5,c:28473},28480,{f:4,c:28482},{f:3,c:28488},28492,{f:3,c:28494},{f:2,c:28498},{f:3,c:28501},{f:2,c:28506},28509,{f:3,c:28511},28515,28517,{f:6,c:28519},28529,28531,{f:2,c:28533},28537,28539,{f:2,c:28541},{f:3,c:28545},28549,{f:2,c:28554},{f:8,c:28559},{f:4,c:28568},{f:3,c:28573},{f:2,c:28578},{f:2,c:28581},28584,{f:4,c:28586},{f:2,c:28591},28594,{f:2,c:28596},
-{f:2,c:28599},{f:6,c:28602},{f:5,c:28612},{f:7,c:28618},{f:2,c:28627},{f:2,c:28630},{f:2,c:28633},{f:2,c:28636},{f:2,c:28642},{f:6,c:28645},{f:2,c:28652},{f:8,c:28658},28667,28669,{f:6,c:28671},{f:2,c:28679},28682,{f:3,c:28684},28688,{f:3,c:28690},{f:2,c:28694},28697,28700,28702,{f:2,c:28705},{f:3,c:28708},{f:7,c:28713},28721,{f:2,c:28723},{f:3,c:28726},{f:4,c:28730},{f:4,c:28735},{f:7,c:28741},{f:2,c:28749},28752,{f:3,c:28754},{f:2,c:28758},{f:4,c:28761},{f:4,c:28767},{f:2,c:28773},{f:3,c:28776},
-28782,{f:4,c:28785},28791,{f:3,c:28793},28797,{f:4,c:28801},{f:3,c:28806},{f:3,c:28811},{f:3,c:28815},28819,{f:2,c:28823},{f:2,c:28826},{f:13,c:28830},28848,28850,{f:3,c:28852},28858,{f:2,c:28862},{f:4,c:28868},28873,{f:4,c:28875},{f:8,c:28880},28890,{f:3,c:28892},{f:4,c:28896},28901,28906,28910,{f:4,c:28912},{f:2,c:28917},28920,{f:3,c:28922},{f:11,c:28926},{f:5,c:28939},{f:2,c:28945},28948,28951,{f:6,c:28955},{f:4,c:28962},{f:8,c:28967},{f:4,c:28978},{f:14,c:28983},{f:3,c:28998},29003,29005,{f:3,
-c:29007},{f:9,c:29011},29021,{f:3,c:29023},29027,29029,{f:2,c:29034},29037,{f:3,c:29039},{f:4,c:29044},29049,{f:2,c:29051},{f:6,c:29054},{f:5,c:29061},{f:4,c:29067},{f:2,c:29072},29075,{f:2,c:29077},{f:5,c:29082},{f:7,c:29089},{f:3,c:29097},{f:4,c:29101},29106,29108,{f:3,c:29110},{f:4,c:29114},{f:2,c:29119},29122,{f:4,c:29124},{f:5,c:29129},{f:3,c:29135},29139,{f:3,c:29142},{f:2,c:29146},{f:2,c:29149},{f:4,c:29153},{f:5,c:29160},{f:5,c:29167},{f:4,c:29173},{f:2,c:29178},29181,{f:7,c:29183},{f:6,c:29191},
-{f:2,c:29198},{f:10,c:29201},29212,{f:10,c:29214},29225,29227,{f:3,c:29229},{f:2,c:29235},29244,{f:7,c:29248},{f:3,c:29257},{f:4,c:29262},{f:3,c:29267},29271,29274,29276,29278,29280,{f:3,c:29283},29288,{f:4,c:29290},{f:2,c:29296},{f:2,c:29299},{f:3,c:29302},{f:2,c:29307},{f:2,c:29314},{f:5,c:29317},29324,29326,{f:2,c:29328},{f:3,c:29331},{f:8,c:29335},{f:2,c:29344},{f:4,c:29347},{f:4,c:29352},29358,{f:3,c:29361},29365,{f:6,c:29370},{f:3,c:29381},{f:4,c:29385},29391,29393,{f:4,c:29395},29400,{f:4,
-c:29402},29407,{f:6,c:29410},{f:2,c:29418},{f:2,c:29429},{f:3,c:29438},29442,{f:6,c:29444},{f:3,c:29451},{f:4,c:29455},29460,{f:3,c:29464},{f:2,c:29471},{f:2,c:29475},{f:3,c:29478},29485,{f:2,c:29487},{f:2,c:29490},29493,29498,{f:2,c:29500},29504,{f:2,c:29506},{f:7,c:29510},{f:2,c:29518},29521,{f:4,c:29523},{f:8,c:29528},{f:7,c:29537},29545,29550,29553,{f:2,c:29555},29558,29561,29565,29567,{f:3,c:29569},{f:2,c:29573},29576,29578,{f:2,c:29580},{f:2,c:29583},{f:4,c:29586},{f:4,c:29591},{f:3,c:29596},
-{f:2,c:29600},{f:6,c:29603},29610,{f:2,c:29612},29617,{f:3,c:29620},{f:2,c:29624},{f:4,c:29628},29633,{f:5,c:29635},{f:2,c:29643},29646,{f:7,c:29650},{f:4,c:29658},29663,{f:4,c:29665},29670,29672,{f:3,c:29674},{f:4,c:29678},{f:11,c:29683},{f:4,c:29695},29700,{f:2,c:29703},{f:4,c:29707},{f:9,c:29713},{f:6,c:29724},{f:2,c:29731},29735,29737,29739,29741,29743,{f:2,c:29745},{f:5,c:29751},{f:2,c:29757},29760,{f:9,c:29762},{f:9,c:29772},29782,29784,29789,{f:3,c:29792},{f:5,c:29796},{f:2,c:29803},{f:2,c:29806},
-{f:5,c:29809},{f:6,c:29816},29823,29826,{f:3,c:29828},29832,29834,{f:2,c:29836},29839,{f:11,c:29841},29853,{f:4,c:29855},{f:2,c:29860},{f:6,c:29866},{f:9,c:29873},{f:2,c:29883},{f:12,c:29886},{f:4,c:29899},{f:2,c:29904},29907,{f:5,c:29909},29915,29917,29919,29921,29925,{f:7,c:29927},{f:4,c:29936},29941,{f:7,c:29944},{f:4,c:29952},{f:7,c:29957},29966,29968,29970,{f:4,c:29972},29979,{f:2,c:29981},{f:3,c:29984},29988,{f:2,c:29990},29994,29998,30004,30006,30009,{f:2,c:30012},30015,{f:4,c:30017},{f:2,
-c:30022},{f:2,c:30025},30029,{f:4,c:30032},{f:4,c:30037},{f:4,c:30046},{f:2,c:30051},{f:3,c:30055},{f:6,c:30060},30067,30069,30071,{f:5,c:30074},{f:3,c:30080},{f:2,c:30084},{f:3,c:30088},{f:3,c:30092},30096,30099,30101,30104,{f:2,c:30107},30110,30114,{f:5,c:30118},30125,{f:2,c:30134},{f:2,c:30138},{f:3,c:30143},30150,{f:2,c:30155},{f:4,c:30158},30163,30167,30170,{f:2,c:30172},{f:3,c:30175},30181,30185,{f:4,c:30188},{f:2,c:30194},{f:4,c:30197},{f:2,c:30202},{f:2,c:30205},30212,{f:4,c:30214},{f:2,c:30222},
-{f:4,c:30225},30230,30234,{f:2,c:30236},30243,30248,30252,{f:2,c:30254},{f:2,c:30257},{f:2,c:30262},{f:2,c:30265},30269,30273,{f:2,c:30276},30280,{f:2,c:30282},{f:6,c:30286},30293,30295,{f:3,c:30297},30301,{f:2,c:30304},30310,30312,30314,{f:3,c:30323},[12136,30326],30327,{f:2,c:30329},{f:3,c:30335},30339,30341,{f:2,c:30345},{f:2,c:30348},{f:2,c:30351},30354,{f:2,c:30356},{f:2,c:30359},{f:9,c:30363},{f:9,c:30373},{f:2,c:30383},30387,{f:3,c:30389},30393,{f:4,c:30395},{f:2,c:30400},{f:2,c:30403},30407,
-30409,{f:2,c:30411},30419,30421,{f:2,c:30425},{f:2,c:30428},30432,30434,30438,{f:6,c:30440},30448,30451,{f:3,c:30453},{f:2,c:30458},30461,{f:2,c:30463},{f:2,c:30466},{f:2,c:30469},30474,30476,{f:11,c:30478},{f:4,c:30491},30497,{f:3,c:30499},30503,{f:3,c:30506},30510,{f:5,c:30512},30521,30523,{f:3,c:30525},30530,{f:3,c:30532},{f:7,c:30536},{f:8,c:30546},{f:2,c:30556},{f:2,c:30559},30564,30567,{f:2,c:30569},{f:12,c:30573},{f:3,c:30586},{f:3,c:30593},{f:6,c:30598},{f:2,c:30607},{f:5,c:30611},{f:5,c:30617},
-30625,{f:2,c:30627},30630,30632,30635,{f:2,c:30638},{f:2,c:30641},30644,{f:5,c:30646},30654,{f:7,c:30656},{f:5,c:30664},{f:9,c:30670},{f:2,c:30680},{f:5,c:30685},30692,30694,30696,30698,{f:3,c:30704},{f:2,c:30708},30711,{f:4,c:30713},{f:6,c:30723},{f:2,c:30730},{f:3,c:30734},30739,30741,30745,30747,30750,{f:3,c:30752},30756,30760,{f:2,c:30762},{f:2,c:30766},{f:3,c:30769},{f:2,c:30773},30781,30783,{f:2,c:30785},30788,30790,{f:4,c:30792},30797,30799,30801,{f:2,c:30803},{f:5,c:30808},{f:6,c:30814},{f:3,
-c:30821},30825,{f:7,c:30832},{f:4,c:30840},{f:10,c:30845},30856,{f:2,c:30858},{f:2,c:30863},30866,{f:3,c:30868},30873,{f:2,c:30877},30880,30882,30884,30886,30888,{f:3,c:30890},{f:2,c:30894},{f:3,c:30901},30907,30909,{f:2,c:30911},{f:3,c:30914},{f:3,c:30918},{f:4,c:30924},{f:3,c:30929},{f:3,c:30934},{f:8,c:30939},{f:3,c:30948},{f:3,c:30953},{f:2,c:30957},{f:2,c:30960},30963,{f:2,c:30965},{f:2,c:30968},{f:2,c:30971},{f:3,c:30974},{f:3,c:30978},{f:8,c:30982},{f:4,c:30991},{f:5,c:30996},{f:4,c:31002},
-{f:5,c:31007},31013,{f:3,c:31015},{f:4,c:31021},{f:2,c:31026},{f:5,c:31029},31037,31039,{f:4,c:31042},31047,{f:9,c:31050},{f:2,c:31060},{f:2,c:31064},31073,{f:2,c:31075},31078,{f:4,c:31081},31086,{f:7,c:31088},31097,{f:5,c:31099},{f:2,c:31106},{f:4,c:31110},{f:2,c:31115},{f:10,c:31120},{f:11,c:31131},{f:2,c:31144},{f:3,c:31147},31151,31154,{f:4,c:31156},[12145,31160],31164,31167,31170,{f:2,c:31172},{f:2,c:31175},31178,31180,{f:3,c:31182},{f:2,c:31187},{f:2,c:31190},{f:6,c:31193},{f:3,c:31200},31205,
-31208,31210,31212,31214,{f:7,c:31217},{f:2,c:31225},31228,{f:2,c:31230},31233,{f:2,c:31236},{f:4,c:31239},31244,{f:5,c:31247},{f:2,c:31253},{f:2,c:31256},{f:3,c:31259},31263,{f:2,c:31265},{f:10,c:31268},{f:2,c:31279},31282,{f:3,c:31284},31288,31290,31294,{f:5,c:31297},{f:5,c:31303},{f:2,c:31311},{f:5,c:31314},{f:9,c:31320},{f:6,c:31331},31338,{f:4,c:31340},{f:3,c:31345},31349,{f:4,c:31355},31362,31365,31367,{f:4,c:31369},{f:3,c:31374},{f:2,c:31379},{f:3,c:31385},31390,{f:4,c:31393},31399,31403,{f:4,
-c:31407},{f:2,c:31412},{f:3,c:31415},{f:4,c:31419},{f:4,c:31424},31430,31433,{f:10,c:31436},{f:2,c:31447},{f:4,c:31450},{f:2,c:31457},31460,{f:3,c:31463},{f:2,c:31467},31470,{f:6,c:31472},{f:2,c:31479},{f:2,c:31483},31486,{f:3,c:31488},31493,31495,31497,{f:3,c:31500},31504,{f:2,c:31506},{f:3,c:31510},31514,{f:2,c:31516},31519,{f:3,c:31521},31527,31529,31533,{f:2,c:31535},31538,{f:4,c:31540},31545,31547,31549,{f:6,c:31551},31560,31562,{f:2,c:31565},31571,31573,31575,31577,31580,{f:2,c:31582},31585,
-{f:4,c:31587},{f:6,c:31592},{f:2,c:31599},{f:2,c:31603},31606,31608,31610,{f:2,c:31612},31615,{f:4,c:31617},{f:5,c:31622},31628,{f:2,c:31630},{f:3,c:31633},31638,{f:4,c:31640},{f:3,c:31646},{f:3,c:31651},{f:3,c:31662},{f:2,c:31666},{f:3,c:31669},{f:7,c:31673},{f:2,c:31682},31685,31688,31690,{f:4,c:31693},31698,{f:5,c:31700},{f:2,c:31707},{f:3,c:31710},{f:2,c:31714},{f:2,c:31719},{f:3,c:31723},{f:2,c:31727},31730,{f:3,c:31732},{f:4,c:31736},31741,31743,{f:6,c:31745},{f:3,c:31752},31758,{f:6,c:31760},
-{f:7,c:31767},31776,31778,{f:2,c:31780},{f:2,c:31784},{f:12,c:31788},{f:4,c:31801},31810,{f:8,c:31812},{f:14,c:31822},{f:2,c:31837},{f:3,c:31841},{f:4,c:31845},31851,31853,{f:3,c:31855},{f:6,c:31861},{f:11,c:31870},{f:7,c:31882},{f:2,c:31891},31894,{f:3,c:31897},{f:2,c:31904},31907,{f:4,c:31910},{f:3,c:31915},{f:2,c:31919},{f:5,c:31924},{f:2,c:31930},{f:2,c:31935},{f:3,c:31938},31942,31945,31947,{f:7,c:31950},31960,{f:2,c:31962},{f:6,c:31969},{f:6,c:31977},31985,31987,31989,31991,31994,{f:2,c:31996},
-31999,32001,32003,32012,{f:2,c:32014},{f:2,c:32017},32022,32024,{f:3,c:32029},{f:4,c:32035},{f:3,c:32040},{f:3,c:32044},{f:5,c:32052},32059,{f:2,c:32061},32065,32067,32069,{f:7,c:32071},32079,{f:12,c:32081},{f:2,c:32095},{f:3,c:32099},32103,{f:5,c:32105},{f:2,c:32111},{f:2,c:32116},32120,{f:7,c:32122},32130,{f:2,c:32132},32135,{f:5,c:32138},{f:3,c:32144},{f:8,c:32148},32157,{f:3,c:32159},{f:2,c:32164},{f:4,c:32167},32175,{f:3,c:32181},32188,{f:4,c:32192},{f:2,c:32197},{f:2,c:32200},{f:5,c:32204},
-32211,{f:2,c:32213},{f:3,c:32218},32223,32226,{f:2,c:32228},32231,{f:2,c:32234},{f:2,c:32237},32240,32243,32245,{f:2,c:32247},32250,{f:12,c:32252},{f:4,c:32268},{f:9,c:32274},32284,{f:3,c:32288},{f:3,c:32292},{f:3,c:32296},32300,{f:2,c:32303},32307,32312,32314,32316,{f:2,c:32319},{f:3,c:32322},{f:10,c:32328},32339,{f:4,c:32342},{f:3,c:32347},{f:3,c:32351},{f:6,c:32355},32364,{f:2,c:32369},{f:5,c:32372},{f:2,c:32378},{f:3,c:32383},{f:5,c:32387},32393,32395,32398,{f:3,c:32400},32405,32407,{f:2,c:32409},
-{f:2,c:32413},32430,32436,{f:2,c:32443},32470,32484,32492,32505,32522,32528,32542,32567,32569,{f:7,c:32571},32579,{f:6,c:32582},32589,32591,{f:2,c:32594},32598,32601,{f:4,c:32603},32608,{f:5,c:32611},{f:3,c:32619},32623,32627,{f:2,c:32629},32632,{f:4,c:32634},{f:2,c:32639},{f:3,c:32642},32647,32649,32651,32653,{f:5,c:32655},{f:5,c:32661},{f:2,c:32667},32672,{f:2,c:32674},32678,32680,{f:5,c:32682},32689,{f:5,c:32691},{f:2,c:32698},32702,32704,{f:3,c:32706},{f:4,c:32710},32715,32717,{f:3,c:32719},32723,
-{f:2,c:32726},{f:6,c:32729},{f:3,c:32738},{f:2,c:32743},{f:4,c:32746},32751,32754,{f:5,c:32756},32762,{f:3,c:32765},32770,{f:4,c:32775},{f:2,c:32782},32785,32787,{f:2,c:32794},{f:3,c:32797},32801,{f:2,c:32803},32811,32813,{f:2,c:32815},32818,32820,{f:2,c:32825},32828,32830,{f:2,c:32832},{f:2,c:32836},{f:3,c:32839},{f:4,c:32846},32851,32853,32855,32857,{f:3,c:32859},{f:10,c:32863},{f:4,c:32875},32884,32888,{f:3,c:32890},{f:2,c:32897},32904,32906,{f:6,c:32909},{f:2,c:32916},32919,32921,32926,32931,
-{f:3,c:32934},32940,32944,32947,{f:2,c:32949},{f:2,c:32952},32955,32965,{f:5,c:32967},{f:7,c:32975},32984,{f:2,c:32991},{f:2,c:32994},32998,33006,33013,33015,33017,33019,{f:4,c:33022},{f:2,c:33027},{f:2,c:33031},{f:2,c:33035},33045,33047,33049,{f:2,c:33052},{f:13,c:33055},{f:2,c:33069},33072,{f:3,c:33075},33079,{f:4,c:33082},{f:7,c:33087},33095,33097,33101,33103,33106,{f:2,c:33111},{f:5,c:33115},{f:3,c:33122},33128,33130,33132,33135,{f:2,c:33138},{f:3,c:33141},33153,{f:5,c:33155},33161,{f:4,c:33163},
-33168,{f:6,c:33170},33177,{f:2,c:33182},{f:2,c:33185},{f:2,c:33188},33191,{f:8,c:33195},{f:6,c:33204},33212,{f:2,c:33220},{f:2,c:33223},33227,33230,{f:8,c:33232},33241,{f:4,c:33243},{f:2,c:33249},{f:3,c:33252},33257,33259,{f:5,c:33262},{f:5,c:33269},33277,33279,33283,33291,{f:2,c:33294},33297,33299,{f:6,c:33301},33309,33312,{f:4,c:33316},33321,33326,33330,33338,{f:2,c:33340},{f:5,c:33343},{f:2,c:33349},33352,33354,{f:3,c:33356},{f:8,c:33360},{f:4,c:33371},{f:4,c:33376},33381,33383,{f:2,c:33385},{f:2,
-c:33388},{f:2,c:33397},[12171,33400],{f:2,c:33403},{f:2,c:33408},33411,{f:3,c:33413},33417,33420,33424,{f:4,c:33427},{f:2,c:33434},33438,33440,{f:2,c:33442},33447,33458,{f:2,c:33461},33466,33468,{f:2,c:33471},{f:2,c:33474},{f:2,c:33477},33481,33488,33494,{f:2,c:33497},33501,33506,{f:3,c:33512},{f:3,c:33516},33520,{f:2,c:33522},{f:2,c:33525},33528,33530,{f:5,c:33532},{f:2,c:33546},33549,33552,{f:2,c:33554},33558,{f:2,c:33560},{f:10,c:33565},{f:2,c:33577},33582,33584,33586,33591,33595,{f:3,c:33597},
-{f:2,c:33601},{f:2,c:33604},33608,{f:5,c:33610},33619,{f:5,c:33621},33629,33634,{f:7,c:33648},{f:2,c:33657},{f:7,c:33662},{f:2,c:33671},{f:3,c:33675},{f:3,c:33679},{f:2,c:33684},33687,{f:2,c:33689},33693,33695,33697,{f:4,c:33699},{f:4,c:33708},33717,33723,{f:2,c:33726},{f:3,c:33730},33734,{f:2,c:33736},33739,{f:2,c:33741},{f:4,c:33744},33749,33751,{f:3,c:33753},33758,{f:3,c:33762},{f:3,c:33766},{f:4,c:33771},{f:5,c:33779},{f:3,c:33786},{f:3,c:33790},33794,33797,{f:2,c:33800},33808,{f:6,c:33810},{f:3,
-c:33817},{f:6,c:33822},{f:3,c:33833},{f:4,c:33837},{f:3,c:33842},{f:2,c:33846},{f:3,c:33849},{f:8,c:33854},{f:2,c:33863},{f:7,c:33866},{f:4,c:33875},33880,{f:4,c:33885},33890,33893,{f:2,c:33895},33898,33902,33904,33906,33908,33913,{f:7,c:33915},{f:4,c:33923},33930,33933,{f:4,c:33935},{f:2,c:33941},33944,{f:2,c:33946},{f:4,c:33949},{f:13,c:33954},{f:2,c:33968},33971,{f:3,c:33973},33979,33982,{f:2,c:33986},{f:4,c:33989},33996,{f:2,c:33998},34002,{f:2,c:34004},{f:6,c:34007},34014,{f:2,c:34017},34020,
-{f:5,c:34023},34029,{f:11,c:34033},34046,{f:12,c:34048},{f:4,c:34061},34066,{f:2,c:34069},{f:2,c:34072},{f:3,c:34075},34080,34082,{f:2,c:34084},{f:4,c:34087},{f:9,c:34094},{f:3,c:34110},34114,{f:2,c:34116},34119,{f:3,c:34123},{f:3,c:34127},34132,34135,{f:4,c:34138},{f:3,c:34143},34147,{f:3,c:34149},{f:2,c:34155},{f:4,c:34158},34163,{f:2,c:34165},34168,{f:2,c:34172},{f:5,c:34175},34182,34185,34187,{f:2,c:34189},34192,{f:2,c:34194},{f:6,c:34197},{f:2,c:34205},{f:4,c:34208},34213,34215,{f:3,c:34219},
-{f:6,c:34225},34232,{f:6,c:34235},{f:7,c:34242},{f:3,c:34250},{f:2,c:34257},34260,{f:6,c:34262},{f:6,c:34270},{f:3,c:34278},{f:9,c:34283},34293,{f:2,c:34295},{f:3,c:34300},{f:4,c:34304},{f:3,c:34312},{f:5,c:34316},{f:4,c:34322},{f:3,c:34327},{f:3,c:34331},{f:3,c:34335},{f:4,c:34339},34344,{f:3,c:34346},{f:10,c:34350},34361,34363,{f:2,c:34365},{f:13,c:34368},{f:2,c:34386},{f:4,c:34390},34395,34397,{f:2,c:34400},{f:4,c:34403},{f:3,c:34408},34413,{f:2,c:34415},{f:7,c:34418},{f:7,c:34435},{f:5,c:34446},
-34452,{f:6,c:34454},{f:5,c:34462},{f:2,c:34469},34475,{f:2,c:34477},{f:2,c:34482},{f:3,c:34487},{f:5,c:34491},{f:3,c:34497},34501,34504,{f:2,c:34508},{f:2,c:34514},{f:3,c:34517},34522,{f:2,c:34524},{f:4,c:34528},{f:4,c:34533},{f:3,c:34538},34543,{f:3,c:34549},{f:3,c:34555},34559,34561,{f:2,c:34564},{f:2,c:34571},{f:4,c:34574},34580,34582,34585,34587,34589,{f:2,c:34591},34596,{f:3,c:34598},{f:4,c:34602},{f:2,c:34607},{f:2,c:34610},{f:2,c:34613},{f:3,c:34616},{f:2,c:34620},{f:7,c:34624},{f:2,c:34634},
-34637,{f:4,c:34639},34644,34646,34648,{f:6,c:34650},{f:2,c:34657},{f:7,c:34663},34671,{f:3,c:34673},34677,34679,{f:2,c:34681},{f:3,c:34687},{f:2,c:34694},{f:2,c:34697},34700,{f:5,c:34702},{f:3,c:34708},{f:6,c:34712},{f:2,c:34720},{f:5,c:34723},{f:2,c:34729},34734,{f:3,c:34736},34740,{f:4,c:34742},34748,{f:2,c:34750},{f:3,c:34753},34757,34759,34761,{f:2,c:34764},{f:2,c:34767},{f:7,c:34772},{f:4,c:34780},{f:2,c:34785},34788,{f:4,c:34790},34795,34797,{f:2,c:34800},{f:3,c:34803},{f:2,c:34807},34810,{f:2,
-c:34812},{f:4,c:34815},34820,{f:3,c:34823},{f:5,c:34827},34834,34836,{f:4,c:34839},{f:3,c:34844},34848,{f:13,c:34852},{f:3,c:34867},{f:2,c:34871},34874,{f:3,c:34877},{f:3,c:34881},{f:3,c:34887},34891,{f:5,c:34894},{f:2,c:34901},34904,34906,34908,{f:3,c:34910},{f:2,c:34918},34922,34925,34927,34929,{f:4,c:34931},34936,{f:3,c:34938},34944,34947,{f:2,c:34950},{f:2,c:34953},34956,{f:4,c:34958},{f:3,c:34963},{f:5,c:34967},{f:5,c:34973},34979,{f:6,c:34981},34988,{f:3,c:34990},{f:5,c:34994},{f:4,c:35E3},
-{f:4,c:35005},{f:2,c:35011},{f:2,c:35015},{f:3,c:35019},{f:2,c:35024},35027,{f:2,c:35030},{f:2,c:35034},35038,{f:2,c:35040},{f:2,c:35046},{f:7,c:35049},35058,{f:3,c:35061},{f:2,c:35066},{f:3,c:35071},{f:4,c:35075},{f:2,c:35080},{f:5,c:35083},35089,{f:5,c:35092},{f:5,c:35100},{f:3,c:35106},{f:4,c:35110},{f:4,c:35116},35121,35125,35127,{f:2,c:35129},{f:5,c:35132},{f:2,c:35138},{f:2,c:35141},{f:14,c:35144},{f:6,c:35159},{f:3,c:35169},35173,{f:3,c:35175},35179,{f:2,c:35181},{f:2,c:35184},{f:8,c:35187},
-{f:2,c:35196},[12177,35198],35200,35202,{f:2,c:35204},{f:4,c:35207},{f:3,c:35212},{f:3,c:35216},{f:2,c:35220},35223,{f:8,c:35225},{f:4,c:35234},{f:3,c:35239},35243,{f:2,c:35245},{f:2,c:35248},{f:4,c:35251},{f:2,c:35256},{f:2,c:35259},35262,35267,35277,{f:3,c:35283},{f:3,c:35287},35291,35293,{f:4,c:35295},35300,{f:4,c:35303},{f:3,c:35308},{f:3,c:35312},35317,35319,{f:7,c:35321},{f:3,c:35332},35337,35339,35341,35343,{f:2,c:35345},35348,35351,{f:2,c:35353},35356,35358,{f:3,c:35360},35364,{f:4,c:35366},
-{f:2,c:35371},{f:3,c:35374},{f:2,c:35378},35381,{f:3,c:35383},{f:3,c:35387},{f:2,c:35391},{f:4,c:35394},35399,{f:5,c:35401},35407,35409,35411,{f:2,c:35414},{f:2,c:35417},{f:2,c:35420},{f:2,c:35423},{f:2,c:35428},{f:2,c:35431},35434,35439,35444,{f:3,c:35446},{f:2,c:35450},{f:2,c:35453},{f:4,c:35456},35464,{f:2,c:35467},{f:3,c:35470},35476,{f:2,c:35478},35481,{f:3,c:35483},35487,35490,35495,{f:3,c:35497},{f:3,c:35501},35505,{f:3,c:35507},{f:2,c:35511},{f:2,c:35514},{f:2,c:35517},{f:2,c:35520},35523,
-{f:2,c:35525},35528,35530,35532,35534,35536,{f:3,c:35539},{f:3,c:35544},35549,{f:3,c:35551},35555,35557,{f:3,c:35560},35564,{f:2,c:35567},35570,{f:2,c:35572},35577,35579,35581,35583,35587,35590,{f:2,c:35592},{f:3,c:35595},35599,{f:3,c:35601},35605,35608,35612,{f:3,c:35614},{f:4,c:35618},35623,{f:2,c:35625},{f:5,c:35630},{f:5,c:35636},{f:4,c:35642},{f:10,c:35647},{f:4,c:35658},{f:6,c:35664},35671,35675,{f:9,c:35677},{f:4,c:35687},{f:2,c:35693},{f:3,c:35697},{f:2,c:35701},{f:5,c:35704},{f:2,c:35710},
-{f:9,c:35713},{f:3,c:35723},{f:3,c:35727},35732,{f:5,c:35735},35741,35743,35756,35761,35771,35783,35792,35818,35849,35870,{f:9,c:35896},{f:4,c:35906},{f:2,c:35914},{f:3,c:35917},{f:4,c:35921},{f:4,c:35926},{f:6,c:35931},{f:7,c:35939},{f:7,c:35948},{f:4,c:35956},{f:7,c:35963},{f:2,c:35971},{f:3,c:35974},35979,{f:7,c:35981},{f:3,c:35989},{f:4,c:35993},35999,{f:4,c:36003},{f:2,c:36013},36017,36021,36025,36030,36038,36041,{f:6,c:36043},36052,{f:4,c:36054},36059,36061,36063,36069,{f:2,c:36072},{f:6,c:36078},
-{f:5,c:36085},{f:5,c:36095},{f:2,c:36102},36105,36108,36110,{f:5,c:36113},{f:4,c:36119},36128,{f:2,c:36177},36183,36191,36197,{f:3,c:36200},36204,{f:2,c:36206},{f:2,c:36209},{f:9,c:36216},{f:2,c:36226},{f:4,c:36230},{f:5,c:36236},{f:2,c:36242},{f:3,c:36246},{f:5,c:36250},{f:3,c:36256},{f:4,c:36260},{f:8,c:36265},{f:2,c:36278},36281,36283,36285,{f:3,c:36288},36293,{f:4,c:36295},36301,36304,{f:4,c:36306},{f:2,c:36312},36316,{f:3,c:36320},{f:3,c:36325},36329,{f:2,c:36333},{f:3,c:36336},36340,36342,36348,
-{f:7,c:36350},{f:3,c:36358},36363,{f:2,c:36365},{f:3,c:36369},{f:8,c:36373},{f:2,c:36384},{f:5,c:36388},36395,36397,36400,{f:2,c:36402},{f:3,c:36406},{f:2,c:36411},{f:2,c:36414},36419,{f:2,c:36421},{f:4,c:36429},{f:2,c:36435},{f:3,c:36438},{f:9,c:36442},{f:2,c:36452},{f:2,c:36455},{f:2,c:36458},36462,36465,36467,36469,{f:3,c:36471},36475,{f:2,c:36477},36480,{f:3,c:36482},36486,36488,36492,36494,{f:5,c:36501},36507,36509,{f:2,c:36511},{f:3,c:36514},{f:3,c:36519},{f:2,c:36525},{f:2,c:36528},{f:7,c:36531},
-{f:5,c:36539},{f:9,c:36545},{f:3,c:36559},36563,{f:6,c:36565},{f:3,c:36572},{f:4,c:36576},{f:6,c:36581},{f:6,c:36588},{f:5,c:36595},36605,{f:4,c:36607},36612,36614,36616,{f:7,c:36619},36627,{f:5,c:36630},{f:5,c:36640},{f:2,c:36647},{f:4,c:36651},{f:3,c:36656},{f:4,c:36660},{f:2,c:36665},{f:2,c:36668},{f:2,c:36672},36675,{f:2,c:36679},{f:3,c:36682},{f:5,c:36687},{f:10,c:36693},36704,36707,36709,36714,36736,36748,36754,36765,{f:3,c:36768},{f:2,c:36772},36775,36778,36780,{f:2,c:36787},[12193,36789],
-{f:2,c:36791},{f:3,c:36794},{f:2,c:36799},36803,36806,{f:5,c:36809},36815,36818,{f:2,c:36822},36826,{f:2,c:36832},36835,36839,36844,36847,{f:2,c:36849},{f:2,c:36853},{f:3,c:36858},{f:2,c:36862},{f:2,c:36871},36876,36878,36883,36888,36892,{f:2,c:36900},{f:6,c:36903},{f:2,c:36912},{f:2,c:36915},36919,{f:2,c:36921},36925,{f:2,c:36927},36931,{f:2,c:36933},{f:3,c:36936},36940,36950,{f:2,c:36953},36957,36959,36961,36964,{f:2,c:36966},{f:3,c:36970},{f:3,c:36975},36979,36982,36985,36987,36990,{f:2,c:36997},
-37001,{f:3,c:37004},37010,37012,37014,37016,37018,37020,{f:3,c:37022},{f:2,c:37028},{f:3,c:37031},37035,37037,37042,37047,{f:2,c:37052},{f:2,c:37055},{f:2,c:37058},37062,{f:2,c:37064},{f:3,c:37067},37074,{f:3,c:37076},{f:3,c:37080},37086,37088,{f:3,c:37091},{f:2,c:37097},37100,37102,{f:4,c:37104},{f:2,c:37110},{f:4,c:37113},{f:3,c:37119},37123,37125,{f:2,c:37127},{f:8,c:37130},37139,37141,{f:2,c:37143},{f:4,c:37146},{f:3,c:37151},{f:3,c:37156},{f:5,c:37160},37166,37171,37173,{f:2,c:37175},{f:8,c:37179},
-{f:2,c:37188},37191,37201,{f:4,c:37203},{f:2,c:37208},{f:2,c:37211},{f:2,c:37215},{f:3,c:37222},37227,37229,37235,{f:3,c:37242},{f:5,c:37248},37254,37256,37258,{f:2,c:37262},{f:3,c:37267},{f:3,c:37271},{f:5,c:37277},{f:6,c:37284},{f:4,c:37296},{f:4,c:37302},{f:5,c:37307},37314,37316,[12196,37318],37320,37328,37334,{f:2,c:37338},{f:5,c:37342},{f:2,c:37349},37352,{f:11,c:37354},37366,37368,{f:5,c:37371},{f:2,c:37378},{f:3,c:37381},{f:3,c:37386},37391,{f:2,c:37394},{f:8,c:37398},{f:4,c:37407},37412,
-{f:6,c:37416},37423,{f:2,c:37425},{f:2,c:37429},{f:2,c:37435},{f:4,c:37441},{f:2,c:37446},{f:3,c:37450},{f:3,c:37454},{f:3,c:37458},37462,{f:2,c:37464},{f:2,c:37468},{f:3,c:37471},{f:3,c:37475},{f:5,c:37479},{f:6,c:37486},{f:3,c:37493},37497,{f:3,c:37500},{f:2,c:37505},37508,{f:8,c:37510},{f:2,c:37519},37522,{f:2,c:37524},37527,37529,37531,{f:3,c:37533},{f:2,c:37537},37540,37543,37549,{f:2,c:37551},{f:5,c:37554},37560,37562,{f:4,c:37565},37570,37572,37574,{f:3,c:37577},{f:2,c:37581},{f:2,c:37584},
-{f:10,c:37587},37598,{f:3,c:37600},37607,37609,{f:2,c:37611},{f:4,c:37618},37623,{f:3,c:37625},{f:4,c:37629},{f:4,c:37634},{f:7,c:37641},37649,{f:2,c:37651},{f:2,c:37654},{f:3,c:37660},37665,{f:3,c:37667},37671,{f:2,c:37673},{f:2,c:37676},{f:2,c:37680},{f:2,c:37684},37687,{f:5,c:37689},37695,37698,{f:2,c:37700},{f:3,c:37704},37708,{f:6,c:37710},{f:3,c:37717},{f:2,c:37721},{f:8,c:37724},{f:3,c:37734},37739,{f:3,c:37741},{f:4,c:37745},{f:3,c:37751},{f:3,c:37755},{f:3,c:37759},37763,{f:2,c:37765},{f:2,
-c:37768},{f:4,c:37771},{f:6,c:37776},37783,{f:9,c:37785},{f:2,c:37796},37800,37803,37805,37807,{f:2,c:37809},37812,{f:2,c:37814},{f:6,c:37817},{f:3,c:37824},{f:3,c:37828},37833,37835,{f:3,c:37838},{f:4,c:37842},{f:3,c:37849},37856,37859,{f:3,c:37861},{f:12,c:37865},37878,37880,{f:9,c:37882},{f:7,c:37892},{f:4,c:37900},37905,{f:3,c:37909},{f:3,c:37914},{f:2,c:37918},{f:5,c:37921},{f:5,c:37929},{f:3,c:37935},37940,{f:2,c:37942},37945,{f:3,c:37947},{f:4,c:37952},{f:5,c:37957},37963,{f:5,c:37965},37971,
-{f:11,c:37973},{f:2,c:37985},37988,{f:5,c:37990},37996,{f:2,c:37998},38001,{f:4,c:38003},38008,{f:2,c:38010},{f:5,c:38016},38033,38038,38040,38087,38095,{f:2,c:38099},38106,38118,38139,38172,38176,38183,38195,38205,38211,38216,38219,38229,38234,38240,38254,{f:2,c:38260},{f:7,c:38264},38273,{f:2,c:38276},{f:2,c:38279},38282,38285,38288,38290,{f:3,c:38293},{f:8,c:38297},38306,{f:2,c:38310},38314,{f:4,c:38318},{f:3,c:38323},{f:2,c:38327},38330,{f:3,c:38336},{f:2,c:38340},38343,38345,{f:3,c:38349},{f:3,
-c:38353},{f:5,c:38359},38365,{f:2,c:38367},{f:2,c:38371},{f:2,c:38374},38380,38399,38407,38419,38424,38427,38430,38432,{f:7,c:38435},{f:3,c:38443},{f:2,c:38447},{f:4,c:38455},38462,38465,38467,38474,{f:2,c:38478},{f:3,c:38481},{f:2,c:38486},{f:2,c:38489},38492,38494,38496,{f:2,c:38501},38507,{f:3,c:38509},38513,{f:4,c:38521},{f:7,c:38526},38535,38537,38540,{f:3,c:38545},38550,38554,{f:10,c:38557},38569,{f:5,c:38571},38578,38581,38583,38586,38591,{f:2,c:38594},38600,{f:2,c:38602},{f:2,c:38608},{f:2,
-c:38611},{f:2,c:38615},38618,{f:3,c:38621},38625,{f:4,c:38628},{f:4,c:38635},{f:2,c:38640},{f:2,c:38644},38648,38650,{f:2,c:38652},38655,{f:2,c:38658},38661,{f:3,c:38666},{f:3,c:38672},{f:2,c:38676},{f:5,c:38679},38685,{f:8,c:38687},{f:2,c:38696},{f:2,c:38699},{f:2,c:38702},38705,{f:5,c:38707},{f:3,c:38714},{f:3,c:38719},38723,{f:3,c:38725},{f:8,c:38729},[12205,38737],{f:2,c:38740},{f:2,c:38743},{f:2,c:38748},38751,{f:2,c:38755},{f:2,c:38758},{f:9,c:38762},38773,{f:5,c:38775},{f:8,c:38781},{f:5,c:38790},
-38796,38798,38800,38803,{f:3,c:38805},{f:7,c:38809},{f:2,c:38817},{f:2,c:38820},{f:4,c:38823},38828,38830,{f:2,c:38832},38835,{f:8,c:38837},{f:5,c:38846},{f:2,c:38852},{f:2,c:38855},38858,{f:6,c:38861},{f:5,c:38868},{f:2,c:38874},38877,{f:7,c:38879},38888,{f:5,c:38894},38900,{f:8,c:38903},38912,38916,38921,38923,38925,{f:3,c:38932},{f:3,c:38937},{f:4,c:38941},{f:2,c:38946},38949,{f:6,c:38951},{f:2,c:38958},{f:6,c:38961},{f:2,c:38969},38972,{f:8,c:38974},{f:5,c:38983},{f:4,c:38991},{f:3,c:38997},39002,
-{f:2,c:39004},{f:3,c:39007},{f:2,c:39011},39014,{f:3,c:39016},{f:2,c:39021},39026,39051,39054,39058,39061,39065,39075,{f:5,c:39081},39088,39090,{f:2,c:39092},{f:5,c:39095},{f:7,c:39101},39109,39111,{f:5,c:39113},{f:2,c:39119},39124,{f:2,c:39126},{f:2,c:39132},39137,{f:4,c:39139},39148,39150,{f:2,c:39152},39155,{f:7,c:39157},{f:4,c:39167},39172,{f:3,c:39174},39179,{f:2,c:39182},{f:4,c:39188},{f:2,c:39193},{f:2,c:39196},{f:2,c:39199},{f:6,c:39202},{f:5,c:39209},{f:4,c:39215},{f:3,c:39220},{f:4,c:39224},
-39229,{f:3,c:39232},39236,{f:2,c:39238},{f:4,c:39245},39251,39254,{f:4,c:39256},39261,{f:3,c:39263},39268,39270,39283,{f:2,c:39288},39291,39294,{f:2,c:39298},39305,39308,39310,{f:11,c:39322},{f:2,c:39334},{f:3,c:39337},{f:2,c:39343},39346,{f:12,c:39349},{f:14,c:39362},39379,{f:2,c:39382},39386,39388,39390,39392,{f:10,c:39395},{f:3,c:39406},{f:13,c:39410},39424,{f:3,c:39426},{f:7,c:39430},{f:6,c:39440},{f:2,c:39447},{f:17,c:39450},39468,39471,{f:5,c:39473},{f:5,c:39481},39487,{f:4,c:39494},{f:2,c:39499},
-39502,{f:5,c:39504},39510,{f:2,c:39512},{f:3,c:39516},{f:2,c:39520},39523,{f:4,c:39526},39531,39538,39555,39561,{f:2,c:39565},{f:2,c:39572},39577,39590,{f:6,c:39593},{f:4,c:39602},39609,39611,{f:3,c:39613},{f:2,c:39619},{f:5,c:39622},{f:2,c:39629},39632,39639,{f:6,c:39641},39648,{f:4,c:39650},{f:4,c:39655},39660,{f:9,c:39664},39674,{f:7,c:39676},{f:2,c:39684},39687,{f:4,c:39689},39694,{f:3,c:39696},{f:6,c:39700},{f:4,c:39707},{f:2,c:39712},39716,39718,39720,{f:4,c:39722},39728,{f:8,c:39731},{f:4,
-c:39741},39750,{f:3,c:39754},39760,{f:2,c:39762},{f:3,c:39765},39769,{f:20,c:39771},{f:4,c:39792},{f:2,c:39797},{f:9,c:39800},39810,{f:10,c:39812},39823,{f:7,c:39827},{f:2,c:39835},{f:11,c:39839},39852,{f:17,c:39855},{f:5,c:39874},39880,{f:9,c:39883},39893,{f:4,c:39895},39900,{f:3,c:39902},39907,{f:2,c:39909},39913,{f:4,c:39916},{f:3,c:39921},{f:8,c:39925},39934,{f:8,c:39936},{f:3,c:39946},{f:2,c:39950},39953,{f:12,c:39956},{f:2,c:39969},39972,{f:2,c:39974},{f:3,c:39978},{f:3,c:39982},39988,39990,
-39992,39994,{f:2,c:39996},{f:6,c:39999},{f:2,c:40006},{f:8,c:40010},40019,40021,{f:4,c:40025},40030,{f:7,c:40032},{f:5,c:40040},{f:10,c:40046},40057,40059,{f:2,c:40061},40064,{f:2,c:40067},{f:2,c:40073},40076,40079,40083,{f:4,c:40086},40093,40106,40108,40111,40121,{f:5,c:40126},{f:2,c:40136},{f:2,c:40145},{f:2,c:40154},{f:2,c:40160},{f:2,c:40163},{f:3,c:40166},{f:2,c:40170},{f:6,c:40173},40181,{f:15,c:40183},40200,{f:11,c:40202},{f:5,c:40214},40220,40222,{f:3,c:40224},{f:2,c:40228},40231,{f:6,c:40233},
-{f:10,c:40241},{f:3,c:40252},{f:2,c:40256},{f:14,c:40259},{f:8,c:40276},{f:2,c:40286},{f:8,c:40290},40299,{f:2,c:40301},{f:2,c:40304},{f:20,c:40307},40328,{f:9,c:40330},{f:4,c:40340},40345,{f:10,c:40347},{f:3,c:40358},{f:5,c:40362},{f:4,c:40368},{f:6,c:40373},{f:3,c:40381},40385,40387,{f:14,c:40389},{f:3,c:40404},40408,{f:10,c:40411},{f:8,c:40423},{f:2,c:40432},{f:4,c:40436},{f:17,c:40443},{f:8,c:40461},{f:4,c:40470},40476,40484,40487,40494,40496,40500,{f:2,c:40507},40512,40525,40528,{f:3,c:40530},
-40534,40537,40541,{f:4,c:40543},40549,{f:2,c:40558},40562,40564,{f:3,c:40566},40571,{f:2,c:40576},{f:4,c:40579},{f:2,c:40585},{f:6,c:40588},{f:3,c:40596},{f:5,c:40600},40606,{f:5,c:40608},{f:2,c:40615},{f:5,c:40618},{f:4,c:40624},{f:2,c:40630},{f:2,c:40633},40636,{f:4,c:40639},[12232,40643],{f:4,c:40645},{f:2,c:40650},40656,{f:2,c:40658},{f:3,c:40661},{f:2,c:40665},40673,{f:2,c:40675},40678,{f:4,c:40683},{f:2,c:40688},40691,{f:2,c:40693},40696,40698,{f:9,c:40704},40714,40716,40719,{f:2,c:40721},40724,
-40726,40728,{f:6,c:40730},40737,{f:9,c:40739},{f:2,c:40749},{f:7,c:40752},40760,40762,40764,{f:5,c:40767},{f:5,c:40773},{f:3,c:40780},40787,{f:4,c:40789},{f:2,c:40794},{f:2,c:40797},40802,{f:2,c:40804},{f:3,c:40807},40811,{f:5,c:40813},{f:4,c:40819},{f:7,c:40824},{f:2,c:40833},{f:2,c:40846},{f:3,c:40849},{f:3,c:40854},{f:2,c:40861},{f:5,c:40865},63788,{f:3,c:64013},64017,{f:2,c:64019},64024,{f:3,c:64031},{f:2,c:64035},{f:3,c:64039},11905,[59414,131207],[59415,131209],[59416,131276],11908,13427,13383,
-11912,11915,59422,13726,13850,13838,11916,11927,14702,14616,59430,14799,14815,14963,14800,{f:2,c:59435},15182,15470,15584,11943,[59441,136663],59442,11946,16470,16735,11950,17207,11955,{f:2,c:11958},[59451,141711],17329,17324,11963,17373,17622,18017,17996,[59459,132361],18211,18217,18300,18317,11978,18759,18810,18813,{f:2,c:18818},{f:2,c:18821},18847,18843,18871,18870,[59476,133533],[59477,147966],19619,{f:3,c:19615},19575,19618,{f:7,c:19731},19886,59492,{s:226},8364,165,0,0,12351,{s:17},12436,{s:14},
-12535,12537,12536,12538,0,{f:3,c:12339},{f:3,c:12344},{f:3,c:12586},{f:24,c:12704},11904,{f:2,c:11906},{f:3,c:11909},{f:2,c:11913},{f:10,c:11917},{f:2,c:11928},{f:12,c:11931},{f:2,c:11944},{f:3,c:11947},{f:4,c:11951},{f:2,c:11956},{f:3,c:11960},{f:14,c:11964},{f:41,c:11979},{f:71,c:13312},{f:43,c:13384},{f:298,c:13428},{f:111,c:13727},{f:11,c:13839},{f:765,c:13851},{f:85,c:14617},{f:96,c:14703},{f:14,c:14801},{f:147,c:14816},{f:218,c:14964},{f:287,c:15183},{f:113,c:15471},{f:885,c:15585},{f:264,c:16471},
-{f:471,c:16736},{f:116,c:17208},{f:4,c:17325},{f:43,c:17330},{f:248,c:17374},{f:373,c:17623},{f:20,c:17997},{f:193,c:18018},{f:5,c:18212},{f:82,c:18218},{f:16,c:18301},{f:441,c:18318},{f:50,c:18760},{f:2,c:18811},{f:4,c:18814},18820,{f:20,c:18823},{f:3,c:18844},{f:22,c:18848},{f:703,c:18872},{f:39,c:19576},{f:111,c:19620},{f:148,c:19738},{f:7,c:19887}]},Q,V=function(){s("should not call ColorSpace constructor")};V.prototype={getRgb:function(){s("Should not call ColorSpace.getRgb")},getRgbItem:function(){s("Should not call ColorSpace.getRgbItem")},
-getRgbBuffer:function(){s("Should not call ColorSpace.getRgbBuffer")},getOutputLength:function(){s("Should not call ColorSpace.getOutputLength")},isPassthrough:function(){return!1},createRgbBuffer:function(a,b,c,d){if(this.isPassthrough(d))return a.subarray(b);var e=this.getOutputLength(c*this.numComps),e=new Uint8Array(e);this.getRgbBuffer(a,b,c,e,0,d);return e}};V.parse=function(a,b,c){a=V.parseToIR(a,b,c);return a instanceof Xc?a:V.fromIR(a)};V.fromIR=function(a){var b=I(a)?a[0]:a;switch(b){case "DeviceGrayCS":return new sa;
-case "DeviceRgbCS":return new Ta;case "DeviceCmykCS":return new Ca;case "PatternCS":return(a=a[1])&&(a=V.fromIR(a)),new Je(a);case "IndexedCS":var b=a[2],c=a[3];return new Ke(V.fromIR(a[1]),b,c);case "AlternateCS":return b=a[3],new Xc(a[1],V.fromIR(a[2]),Ma.fromIR(b));case "LabCS":return new Le(a[1].WhitePoint,a[1].BlackPoint,a[1].Range);default:s("Unkown name "+b)}return null};V.parseToIR=function(a,b,c){if(E(a)){var d=c.get("ColorSpace");D(d)&&(d=d.get(a.name))&&(a=d)}a=b.fetchIfRef(a);if(E(a))switch(this.mode=
-d=a.name,d){case "DeviceGray":case "G":return"DeviceGrayCS";case "DeviceRGB":case "RGB":return"DeviceRgbCS";case "DeviceCMYK":case "CMYK":return"DeviceCmykCS";case "Pattern":return["PatternCS",null];default:s("unrecognized colorspace "+d)}else if(I(a))switch(this.mode=d=a[0].name,d){case "DeviceGray":case "G":return"DeviceGrayCS";case "DeviceRGB":case "RGB":return"DeviceRgbCS";case "DeviceCMYK":case "CMYK":return"DeviceCmykCS";case "CalGray":return"DeviceGrayCS";case "CalRGB":return"DeviceRgbCS";
-case "ICCBased":d=b.fetchIfRef(a[1]).dict.get("N");if(1==d)return"DeviceGrayCS";if(3==d)return"DeviceRgbCS";if(4==d)return"DeviceCmykCS";break;case "Pattern":return(a=a[1])&&(a=V.parseToIR(a,b,c)),["PatternCS",a];case "Indexed":case "I":return c=V.parseToIR(a[1],b,c),d=a[2]+1,b=b.fetchIfRef(a[3]),G(b)&&(b=b.getBytes()),["IndexedCS",c,d,b];case "Separation":case "DeviceN":var e=a[1],d=1;E(e)?d=1:I(e)&&(d=e.length);c=V.parseToIR(a[2],b,c);b=Ma.getIR(b,b.fetchIfRef(a[3]));return["AlternateCS",d,c,b];
-case "Lab":return["LabCS",a[1].getAll()];default:s('unimplemented color space object "'+d+'"')}else s('unrecognized color space object: "'+a+'"');return null};V.isDefaultDecode=function(a,b){if(!a)return!0;if(2*b!==a.length)return R("The decode map is not the correct length"),!0;for(var c=0,d=a.length;c<d;c+=2)if(0!=a[c]||1!=a[c+1])return!1;return!0};Q=V;var Xc,Me=function(a,b,c){this.name="Alternate";this.numComps=a;this.defaultColor=new Float32Array(a);for(var d=0;d<a;++d)this.defaultColor[d]=1;
-this.base=b;this.tintFn=c};Me.prototype={getRgb:function(a,b){var c=new Uint8Array(3);this.getRgbItem(a,b,c,0);return c},getRgbItem:function(a,b,c,d){a="subarray"in a?a.subarray(b,b+this.numComps):Array.prototype.slice.call(a,b,b+this.numComps);a=this.tintFn(a);this.base.getRgbItem(a,0,c,d)},getRgbBuffer:function(a,b,c,d,e,f){var g=this.tintFn,h=this.base;f=1/((1<<f)-1);var k=h.numComps,j="getRgbBuffer"in h,l=h.isPassthrough(8)||!j,n=l?e:0,p=l?d:new Uint8Array(k*c),m=this.numComps,r=new Float32Array(m),
-q=0;for(;q<c;q++){for(var A=0;A<m;A++)r[A]=a[b++]*f;var t=g(r);if(j)for(A=0;A<k;A++)p[n++]=255*t[A];else h.getRgbItem(t,0,p,n),n+=k}l||h.getRgbBuffer(p,0,c,d,e,8)},getOutputLength:function(a){return this.base.getOutputLength(a*this.base.numComps/this.numComps)},isPassthrough:Q.prototype.isPassthrough,createRgbBuffer:Q.prototype.createRgbBuffer,isDefaultDecode:function(a){return Q.isDefaultDecode(a,this.numComps)}};Xc=Me;var Je,Ne=function(a){this.name="Pattern";this.base=a};Ne.prototype={};Je=Ne;
-var Ke,Oe=function(a,b,c){this.name="Indexed";this.numComps=1;this.defaultColor=new Uint8Array([0]);this.base=a;this.highVal=b;a=a.numComps*b;var d;if(G(c))d=new Uint8Array(a),c=c.getBytes(a),d.set(c);else if(Y(c)){d=new Uint8Array(a);for(b=0;b<a;++b)d[b]=c.charCodeAt(b)}else c instanceof Uint8Array?d=c:s("Unrecognized lookup table: "+c);this.lookup=d};Oe.prototype={getRgb:function(a,b){return this.base.getRgb(this.lookup,a[b]*this.base.numComps)},getRgbItem:function(a,b,c,d){this.base.getRgbItem(this.lookup,
-a[b]*this.base.numComps,c,d)},getRgbBuffer:function(a,b,c,d,e){for(var f=this.base,g=f.numComps,h=f.getOutputLength(g),k=this.lookup,j=0;j<c;++j){var l=a[b++]*g;f.getRgbBuffer(k,l,1,d,e,8);e+=h}},getOutputLength:function(a){return this.base.getOutputLength(a*this.base.numComps)},isPassthrough:Q.prototype.isPassthrough,createRgbBuffer:Q.prototype.createRgbBuffer,isDefaultDecode:function(){return!0}};Ke=Oe;var sa,Pe=function(){this.name="DeviceGray";this.numComps=1;this.defaultColor=new Float32Array([0])};
-Pe.prototype={getRgb:function(a,b){var c=new Uint8Array(3);this.getRgbItem(a,b,c,0);return c},getRgbItem:function(a,b,c,d){a=255*a[b]|0;c[d]=c[d+1]=c[d+2]=0>a?0:255<a?255:a},getRgbBuffer:function(a,b,c,d,e,f){f=255/((1<<f)-1);for(var g=0;g<c;++g){var h=f*a[b++]|0;d[e++]=h;d[e++]=h;d[e++]=h}},getOutputLength:function(a){return 3*a},isPassthrough:Q.prototype.isPassthrough,createRgbBuffer:Q.prototype.createRgbBuffer,isDefaultDecode:function(a){return Q.isDefaultDecode(a,this.numComps)}};sa=Pe;var Ta,
-Qe=function(){this.name="DeviceRGB";this.numComps=3;this.defaultColor=new Float32Array([0,0,0])};Qe.prototype={getRgb:function(a,b){var c=new Uint8Array(3);this.getRgbItem(a,b,c,0);return c},getRgbItem:function(a,b,c,d){var e=255*a[b],f=255*a[b+1];a=255*a[b+2];c[d]=0>e?0:255<e?255:e;c[d+1]=0>f?0:255<f?255:f;c[d+2]=0>a?0:255<a?255:a},getRgbBuffer:function(a,b,c,d,e,f){c*=3;if(8==f)d.set(a.subarray(b,b+c),e);else{a=255/((1<<f)-1);for(f=0;f<c;++f)d[e++]=a*input[b++]|0}},getOutputLength:function(a){return a},
-isPassthrough:function(a){return 8==a},createRgbBuffer:Q.prototype.createRgbBuffer,isDefaultDecode:function(a){return Q.isDefaultDecode(a,this.numComps)}};Ta=Qe;var Ca,Zc=function(a,b,c,d,e){for(var f=new Float32Array(16),g=new Uint32Array(16),h=0;16>h;h++)f[h]=1;for(var k=3,j=1,l=3;0<=l;l--){for(var n=7*a[b+l]*c,h=7>n?Math.floor(n):n-1,p=h+1-n,n=n-h,m=h*k,r=m+k,h=0;16>h;h++)h&j?(f[h]*=n,g[h]+=r):(f[h]*=p,g[h]+=m);k*=8;j<<=1}for(l=c=b=a=0;16>l;l++)a+=Yc[g[l]]*f[l];for(l=0;16>l;l++)b+=Yc[g[l]+1]*f[l];
-for(l=0;16>l;l++)c+=Yc[g[l]+2]*f[l];d[e]=255<a?255:a;d[e+1]=255<b?255:b;d[e+2]=255<c?255:c},Re=function(){this.name="DeviceCMYK";this.numComps=4;this.defaultColor=new Float32Array([0,0,0,1])},Yc=new Uint8Array([255,255,254,221,222,223,191,193,195,161,163,166,133,136,138,105,107,109,75,75,77,35,31,32,255,252,224,226,220,198,195,191,173,164,162,147,136,134,122,107,106,96,75,74,66,33,29,24,255,249,197,229,218,174,198,190,153,166,160,129,138,133,107,108,104,83,76,73,56,33,28,15,255,247,168,232,216,149,
-200,188,130,168,158,110,139,131,90,110,103,70,77,72,45,32,27,4,255,245,140,234,214,124,202,186,108,170,157,91,140,130,74,110,102,56,77,71,33,31,27,0,255,243,107,235,212,95,203,184,83,171,155,69,141,129,55,111,101,40,77,70,19,29,26,0,255,241,64,237,211,59,204,183,52,171,154,42,142,128,31,111,100,16,77,69,0,27,26,0,255,240,0,238,209,0,205,182,3,172,153,0,142,127,0,112,100,0,77,69,0,26,25,0,251,225,236,218,196,207,189,171,181,160,144,154,133,120,128,105,94,101,74,64,70,35,21,25,255,222,208,222,195,184,
-192,169,161,162,143,136,135,118,113,106,92,88,75,63,60,34,20,17,255,220,184,225,193,162,195,168,142,164,142,120,136,117,99,107,91,77,75,62,50,33,20,8,255,218,157,227,191,139,197,166,121,165,140,102,137,116,84,108,90,64,76,61,40,32,19,0,255,216,132,229,189,116,198,165,101,167,139,85,138,115,69,109,89,51,76,61,28,31,18,0,255,214,102,230,188,90,199,163,78,167,138,65,139,114,51,109,89,35,76,60,14,29,18,0,255,213,65,232,186,58,200,162,50,168,136,39,139,113,28,110,88,12,76,60,0,27,18,0,255,212,8,232,185,
-13,201,161,11,169,136,3,139,112,0,110,87,0,76,59,0,26,18,0,248,197,219,216,172,192,187,150,168,158,126,143,132,104,119,104,81,93,74,54,64,35,10,19,251,195,193,219,171,171,190,149,150,161,125,127,133,103,105,106,80,81,75,53,54,34,10,10,254,193,171,221,169,151,192,148,132,162,124,112,134,102,92,106,79,70,75,52,45,34,9,1,255,191,147,223,168,130,193,146,113,163,123,95,135,101,77,107,78,58,75,52,35,32,9,0,255,190,124,225,166,109,195,145,95,164,122,79,136,100,63,107,77,46,76,51,24,31,9,0,255,188,97,226,
-165,85,196,143,74,165,121,60,137,99,47,108,77,31,75,51,10,29,9,0,255,187,64,227,164,56,196,142,48,165,120,37,137,98,25,108,76,9,75,50,0,28,9,0,255,186,23,228,163,21,197,142,15,166,119,5,137,98,0,108,76,0,75,50,0,27,8,0,245,168,201,214,147,177,186,128,155,157,107,131,131,88,109,104,67,85,74,42,57,35,0,12,248,166,178,216,146,157,188,127,138,159,107,116,132,87,96,105,66,74,74,41,48,35,0,3,250,165,158,218,145,139,189,126,122,160,106,103,133,86,84,105,66,64,75,41,39,33,0,0,252,164,136,220,144,120,190,
-125,104,161,105,87,134,86,71,106,65,52,75,41,29,32,0,0,253,162,115,221,142,101,191,124,88,161,104,72,134,85,58,106,64,41,75,40,19,31,0,0,254,161,91,222,141,80,192,123,68,162,103,55,134,84,42,106,64,26,75,40,6,29,0,0,255,160,62,223,140,54,193,122,45,162,102,34,135,83,22,106,63,5,74,40,0,28,0,0,255,159,29,223,140,25,193,121,18,163,101,7,135,83,0,107,63,0,74,40,0,28,0,0,243,142,185,212,123,163,184,107,142,156,89,120,130,72,100,104,53,77,74,29,51,35,0,4,245,140,164,214,123,145,186,106,127,157,89,107,
-131,72,88,104,53,67,74,29,42,34,0,0,247,139,146,215,122,129,187,106,112,158,88,94,132,71,77,104,53,57,74,29,33,33,0,0,248,138,126,217,121,111,188,105,96,159,87,80,132,70,64,105,52,47,74,29,24,31,0,0,249,137,107,218,120,94,189,104,81,159,86,66,132,70,52,105,52,36,74,29,15,30,0,0,250,136,85,218,119,74,189,103,63,160,86,51,133,69,38,105,51,22,74,29,2,29,0,0,251,135,59,219,118,51,190,102,42,160,85,31,133,69,19,105,51,3,74,29,0,29,0,0,252,134,31,219,118,26,190,102,19,160,85,7,133,69,0,105,51,0,73,29,0,
-28,0,0,240,113,169,210,98,149,183,84,130,155,69,110,129,54,90,103,37,70,74,11,44,32,0,1,242,111,150,212,97,132,184,84,116,156,69,97,130,54,79,103,37,60,74,12,36,31,0,0,244,111,134,213,97,118,185,83,102,157,68,86,130,54,69,104,37,51,74,13,28,30,0,0,245,110,116,214,96,102,186,83,88,157,68,73,131,53,58,104,37,41,74,14,19,29,0,0,246,110,98,215,96,86,186,82,74,157,67,60,131,53,46,104,37,30,73,14,10,28,0,0,247,109,79,215,95,69,187,82,58,158,67,46,131,53,33,104,37,18,73,15,1,28,0,0,247,108,56,216,95,48,
-187,82,40,158,67,29,131,53,16,104,37,0,73,15,0,27,0,0,248,108,32,216,94,27,187,81,20,158,67,8,131,53,0,104,37,0,72,16,0,27,0,0,238,78,154,208,66,135,181,55,118,154,43,99,129,30,81,103,12,62,74,0,38,27,0,0,240,77,136,210,66,120,183,56,105,155,43,88,129,30,71,103,13,53,73,0,29,26,0,0,241,77,122,211,66,107,183,56,93,155,44,77,129,31,62,103,14,44,73,0,23,26,0,0,242,77,106,211,66,92,184,56,80,155,44,65,129,31,51,103,15,35,73,0,14,25,0,0,243,77,90,212,66,79,184,56,67,156,44,54,129,32,41,103,16,25,73,0,
-6,25,0,0,243,77,73,213,66,63,184,56,53,156,44,41,130,32,28,103,17,13,72,0,0,25,0,0,244,77,53,213,67,45,185,56,37,156,45,26,130,33,13,103,18,0,72,0,0,25,0,0,244,77,33,213,67,28,185,57,21,156,45,9,130,33,0,103,19,0,72,0,0,24,0,0,237,13,138,207,4,122,180,0,106,153,0,89,128,0,72,102,0,54,73,0,31,21,0,0,238,16,123,208,6,108,181,0,94,154,0,78,128,0,63,102,0,46,72,0,24,21,0,0,239,20,110,209,11,96,181,1,83,154,0,69,128,0,54,102,0,38,72,0,17,22,0,0,239,23,96,209,15,84,182,5,72,154,0,58,128,0,45,102,0,29,72,
-0,9,22,0,0,240,26,82,210,19,71,182,10,60,154,0,48,128,0,35,102,0,20,72,0,3,22,0,0,241,27,67,210,21,58,182,14,48,154,3,37,128,0,24,102,0,8,71,0,0,22,0,0,241,29,50,210,23,42,183,17,34,154,6,23,129,0,10,102,0,0,71,0,0,22,0,0,241,30,34,211,25,28,183,19,21,155,9,10,129,0,0,102,0,0,71,0,0,22,0,0,211,239,252,184,210,221,160,183,194,135,155,164,111,128,137,87,101,109,59,70,76,22,28,32,218,237,223,190,208,196,165,181,172,139,153,146,114,127,121,89,100,95,61,69,66,21,27,25,223,235,196,195,206,174,169,179,152,
-142,151,129,117,126,107,91,99,83,62,68,56,20,26,17,227,232,168,198,204,149,171,177,130,144,150,110,119,124,91,93,98,70,63,68,46,20,25,6,231,230,142,201,202,125,174,176,109,146,148,92,120,123,75,94,97,57,63,67,35,19,25,0,234,229,112,203,200,98,176,174,86,147,147,71,121,122,57,94,96,42,64,66,21,17,24,0,236,227,75,205,199,66,177,173,57,148,146,47,122,121,35,95,95,21,64,65,2,14,24,0,238,226,32,207,198,30,178,172,25,149,145,17,123,120,6,95,94,0,64,65,0,11,24,0,211,211,233,184,186,206,160,162,180,135,137,
-153,112,113,127,88,89,100,61,60,70,23,18,26,217,209,207,190,184,183,165,161,160,139,136,136,115,112,113,90,88,88,62,59,60,23,17,19,221,208,183,193,183,162,167,159,142,141,134,120,116,111,99,91,87,77,62,59,51,22,17,10,224,206,158,196,181,139,170,157,122,143,133,103,118,110,84,92,86,64,63,58,40,22,16,0,227,204,133,198,179,118,172,156,102,144,132,86,119,109,70,93,85,52,64,57,30,20,16,0,230,203,106,200,178,93,173,155,81,145,130,67,120,108,53,94,84,37,64,57,17,17,16,0,232,201,73,202,177,64,175,154,55,
-146,129,44,121,107,33,94,83,18,64,56,0,15,16,0,233,201,38,203,176,32,175,153,27,147,129,18,121,106,6,94,83,0,64,56,0,13,16,0,210,186,216,184,163,191,160,143,167,136,120,142,112,99,118,88,77,93,61,50,64,24,6,21,215,184,192,189,162,170,164,141,149,138,119,126,115,98,104,90,76,81,62,50,54,24,6,12,219,183,171,192,161,151,166,140,132,140,118,112,116,97,92,91,75,71,63,49,46,23,6,3,222,181,148,194,159,130,168,139,114,142,117,95,117,96,78,92,74,59,63,49,36,22,6,0,224,180,125,196,158,110,170,138,96,143,116,
-80,118,95,64,92,74,47,64,48,25,20,6,0,226,178,100,197,157,88,171,136,76,144,115,62,119,94,49,93,73,33,64,48,13,18,6,0,228,177,71,199,156,62,172,135,52,144,114,41,119,94,30,93,72,14,64,47,0,16,6,0,229,177,40,200,155,34,173,135,27,145,113,18,120,93,5,93,72,0,63,47,0,15,6,0,210,159,199,184,140,176,160,122,154,136,102,131,113,84,108,89,64,85,62,39,57,25,0,14,214,158,177,188,139,157,163,121,137,138,102,116,114,83,96,90,63,74,63,38,48,25,0,5,217,157,158,190,138,139,165,120,122,139,101,103,115,82,84,91,
-62,64,63,38,40,23,0,0,219,156,137,192,137,120,167,119,105,140,100,88,116,82,71,91,62,53,63,38,30,22,0,0,221,155,116,193,136,102,168,118,89,141,99,73,117,81,59,92,61,42,63,38,21,20,0,0,223,153,94,195,135,82,169,117,70,142,98,57,117,80,44,92,61,29,63,37,8,18,0,0,224,153,68,196,134,58,170,116,49,143,97,38,118,80,26,92,60,11,63,37,0,17,0,0,225,152,41,197,133,34,170,116,27,143,97,17,118,79,4,92,60,0,63,37,0,16,0,0,209,134,183,183,118,162,160,102,142,136,85,120,113,69,100,89,50,77,62,26,51,23,0,6,213,133,
-163,187,117,144,163,102,126,137,85,107,114,68,88,90,50,67,63,26,43,22,0,1,215,133,146,188,116,129,164,101,112,139,84,94,115,68,77,91,50,58,63,27,34,20,0,0,217,132,127,190,116,111,165,100,97,139,84,81,116,67,65,91,49,48,63,27,25,19,0,0,219,131,108,191,115,95,166,100,82,140,83,68,116,67,53,91,49,37,63,27,17,17,0,0,220,130,88,192,114,76,167,99,65,141,82,53,116,66,40,91,49,24,63,27,5,16,0,0,221,129,64,193,113,55,168,98,46,141,82,35,117,66,23,91,49,7,63,27,0,14,0,0,222,129,41,194,113,34,168,98,26,141,
-81,16,117,66,3,92,48,0,62,27,0,13,0,0,209,108,168,183,94,148,160,81,130,135,66,110,113,51,91,89,35,70,63,8,45,18,0,1,212,107,150,186,94,132,162,81,116,137,66,97,114,52,80,90,35,60,63,9,37,16,0,0,214,107,134,187,93,118,163,80,103,138,66,86,114,51,70,90,35,52,63,10,29,15,0,0,215,106,117,188,93,103,164,80,89,138,66,74,115,51,59,90,35,42,63,11,21,13,0,0,216,106,100,189,92,88,164,79,75,139,65,62,115,51,48,91,35,32,63,12,12,12,0,0,217,105,82,190,92,71,165,79,60,139,65,48,115,51,35,91,35,20,62,13,3,11,0,
-0,218,105,61,191,92,52,166,79,43,140,65,32,116,51,20,91,35,3,62,14,0,10,0,0,219,104,41,192,91,34,166,78,26,140,65,15,116,51,2,91,35,0,62,14,0,10,0,0,208,76,153,183,65,135,159,54,118,135,42,99,113,29,82,89,10,62,62,0,38,10,0,0,211,76,137,185,65,121,161,55,105,136,43,88,114,30,72,90,12,54,63,0,31,9,0,0,212,76,122,186,66,108,162,55,94,137,43,78,114,30,63,90,13,45,62,0,24,9,0,0,213,76,107,187,66,94,162,55,81,137,43,67,114,31,52,90,15,36,62,0,16,8,0,0,214,76,92,188,66,80,163,55,69,138,44,56,114,31,42,
-90,16,27,62,0,8,8,0,0,215,76,76,188,66,65,164,55,55,138,44,43,114,32,31,90,16,16,62,0,1,7,0,0,216,76,57,189,66,49,164,56,40,138,44,29,115,32,16,90,17,1,61,0,0,7,0,0,217,76,40,190,66,33,164,56,25,138,44,14,114,33,1,90,18,0,61,0,0,7,0,0,207,26,139,182,16,122,159,3,106,135,0,89,113,0,73,89,0,55,62,0,32,4,0,0,210,27,124,184,18,109,160,7,95,136,0,79,113,0,64,90,0,47,62,0,25,4,0,0,211,30,111,185,21,98,161,11,84,136,0,70,113,0,55,90,0,39,62,0,18,4,0,0,212,32,98,185,24,85,161,15,73,136,2,60,113,0,46,90,0,
-30,61,0,11,4,0,0,213,34,85,186,26,73,162,17,62,137,5,50,113,0,37,89,0,22,61,0,5,4,0,0,213,35,70,187,27,60,162,19,50,137,8,39,114,0,26,89,0,11,61,0,0,4,0,0,214,35,54,187,29,45,163,21,37,137,11,26,114,0,13,89,0,0,60,0,0,4,0,0,214,35,40,188,29,32,163,22,24,137,12,13,114,0,0,89,0,0,60,0,0,4,0,0,169,226,249,148,199,219,129,173,192,108,147,163,88,122,136,68,96,108,43,66,76,4,25,33,178,224,221,156,197,195,136,172,171,114,145,145,93,121,120,71,95,95,46,65,66,4,24,25,185,222,196,162,195,173,140,170,151,117,
-144,128,96,119,106,74,94,83,47,65,57,4,24,18,190,220,169,166,193,149,144,168,130,120,142,110,99,118,91,76,93,70,49,64,46,3,23,8,195,218,143,170,191,126,147,167,110,123,141,93,100,117,76,77,92,58,50,63,36,3,23,0,199,216,115,173,190,101,149,165,88,125,140,74,102,116,59,78,91,43,51,63,23,0,23,0,202,215,83,176,189,72,152,164,62,126,138,51,103,115,39,79,90,25,51,62,6,0,22,0,204,214,50,178,188,43,153,163,37,127,138,28,104,114,18,80,89,3,51,62,0,0,22,0,172,200,231,152,176,204,132,154,178,111,130,152,91,
-108,126,70,84,100,46,57,70,9,15,27,180,198,205,158,175,182,138,153,159,116,129,135,95,107,112,73,83,88,48,56,60,8,15,20,186,197,182,163,173,161,141,151,141,119,128,119,97,106,99,75,82,77,49,55,51,8,14,11,190,195,158,166,172,139,144,150,122,121,127,103,99,105,84,77,81,65,50,55,41,8,14,2,194,193,135,169,170,119,147,148,103,123,125,87,101,104,70,78,81,53,51,54,31,5,14,0,197,192,109,172,169,96,149,147,83,124,124,69,102,103,55,79,80,39,51,54,19,2,14,0,200,191,80,174,168,69,150,146,59,126,123,48,103,102,
-36,79,79,22,52,53,2,0,14,0,202,190,51,176,167,43,152,145,36,127,123,27,103,101,16,80,79,1,52,53,0,0,14,0,175,176,215,154,156,190,134,136,166,113,115,141,93,94,118,72,73,93,48,47,64,12,2,22,182,175,191,160,154,169,139,135,148,117,114,126,96,94,104,75,72,81,50,47,55,12,3,14,186,174,170,163,153,151,142,134,132,119,113,111,98,93,92,76,71,71,51,46,46,11,3,5,190,172,148,166,152,130,144,132,114,121,112,96,100,92,78,77,71,59,51,46,36,9,4,0,192,171,127,169,151,111,146,131,97,123,111,81,101,91,65,78,70,48,
-52,45,26,6,4,0,195,170,103,171,150,90,148,130,78,124,110,64,102,90,51,79,70,35,52,45,15,3,5,0,198,169,76,173,149,66,149,129,56,125,109,45,103,89,33,79,69,18,52,45,0,1,5,0,199,168,51,174,148,43,150,129,35,126,108,26,103,89,14,80,69,0,52,45,0,0,5,0,177,151,198,156,134,175,136,117,153,115,98,130,95,80,108,74,60,85,50,36,58,11,0,15,183,150,176,161,133,156,140,116,137,118,97,116,97,79,96,76,60,74,51,36,49,11,0,6,186,150,158,163,132,139,142,115,122,120,97,103,99,79,84,77,59,64,52,36,41,9,0,1,189,148,137,
-166,131,121,144,114,105,121,96,88,100,78,72,78,59,54,52,36,31,7,0,0,191,147,118,168,130,103,145,113,90,122,95,75,101,77,60,78,59,43,52,35,22,5,0,0,193,147,97,169,129,84,147,112,72,123,94,59,101,77,46,79,58,31,52,35,11,4,0,0,195,146,73,171,128,62,148,111,53,124,93,41,102,76,30,79,58,15,52,35,0,3,0,0,197,145,50,172,128,42,149,111,34,125,93,24,102,76,12,79,57,0,52,35,0,2,0,0,179,128,183,157,113,162,137,98,142,116,82,120,96,66,100,75,48,78,51,24,52,5,0,8,183,128,163,161,113,144,140,98,126,119,81,107,
-98,65,88,76,48,68,52,24,43,6,0,1,186,127,146,163,112,129,142,97,112,120,81,95,99,65,77,77,47,58,52,24,35,4,0,0,188,126,128,165,111,112,144,96,97,121,80,81,100,65,66,78,47,48,53,24,26,3,0,0,190,126,110,167,110,96,145,96,83,122,80,69,101,64,54,78,47,38,52,25,18,2,0,0,192,125,90,168,110,79,146,95,67,123,79,54,101,64,42,79,47,26,52,25,7,2,0,0,194,124,69,170,109,59,147,95,49,123,79,38,101,63,26,79,47,11,52,25,0,1,0,0,195,124,49,171,109,40,148,94,32,124,78,22,102,63,9,79,46,0,52,25,0,1,0,0,180,104,168,
-158,91,148,138,78,130,117,64,110,97,49,91,76,33,70,52,7,46,2,0,1,184,103,150,162,91,133,141,78,116,119,64,98,99,50,80,77,33,61,52,8,37,2,0,0,186,103,135,163,90,119,142,78,103,120,64,87,99,50,70,78,33,52,52,10,30,1,0,0,188,103,118,165,90,103,143,77,90,121,63,75,100,49,60,78,33,43,52,11,22,1,0,0,189,102,102,166,89,89,144,77,76,121,63,63,100,49,49,78,34,33,52,12,14,0,0,0,191,102,84,167,89,73,145,77,62,122,63,50,101,49,37,78,34,22,52,13,4,0,0,0,192,101,65,168,89,55,146,76,46,123,63,35,101,49,23,78,34,
-7,51,13,0,0,0,0,193,101,48,169,88,39,146,76,31,123,63,20,101,49,8,78,34,0,51,14,0,0,0,0,181,75,154,159,64,136,139,54,118,118,41,100,98,28,82,77,8,63,51,0,39,0,0,0,184,75,137,162,65,121,141,54,106,119,42,89,99,29,72,77,11,54,52,0,32,0,0,0,186,75,123,163,65,109,142,54,94,120,43,79,99,30,63,78,12,46,52,0,25,0,0,0,187,76,108,164,65,95,143,55,82,121,43,68,100,31,54,78,14,37,52,0,17,0,0,0,188,76,94,165,65,82,144,55,70,121,43,57,100,31,44,78,15,28,51,0,9,0,0,0,189,75,78,166,65,68,144,55,57,121,43,45,100,
-31,33,78,16,18,51,0,2,0,0,0,190,75,61,167,65,52,145,55,42,122,44,31,100,32,19,78,16,4,51,0,0,0,0,0,191,75,46,168,65,37,145,55,29,122,44,18,100,32,5,78,17,0,50,0,0,0,0,0,181,35,140,160,24,123,140,12,107,118,0,90,98,0,74,77,0,56,51,0,33,0,0,0,184,34,125,162,26,110,141,15,96,120,1,80,99,0,65,78,0,48,51,0,26,0,0,0,186,36,113,163,27,99,142,18,86,120,5,71,99,0,57,78,0,40,51,0,20,0,0,0,187,38,99,164,30,87,142,21,74,120,8,61,99,0,48,78,0,32,51,0,12,0,0,0,187,39,87,164,31,75,143,22,64,120,11,51,100,0,39,78,
-0,24,51,0,6,0,0,0,188,40,73,165,32,62,143,24,52,121,13,40,100,0,28,78,0,14,51,0,0,0,0,0,189,40,58,166,33,48,144,25,39,121,15,28,100,1,16,78,0,2,50,0,0,0,0,0,190,40,45,166,34,36,144,26,27,121,16,17,100,3,3,77,0,0,49,0,0,0,0,0,120,213,247,106,188,217,92,164,190,76,139,162,60,115,135,43,91,107,21,62,76,0,22,34,134,211,219,118,186,193,102,162,169,84,138,144,67,114,120,49,90,95,26,62,66,0,22,26,143,209,195,125,184,172,108,161,151,90,136,128,72,113,106,53,89,83,29,61,57,0,22,19,150,207,169,131,182,149,
-113,159,130,94,135,110,76,112,91,56,88,71,31,60,47,0,21,9,156,205,145,136,181,127,117,158,111,97,133,94,78,111,77,58,87,59,33,60,37,0,21,0,161,204,118,141,179,104,121,156,90,100,132,75,81,110,61,60,86,45,35,59,25,0,21,0,165,203,89,144,178,77,124,155,67,102,131,55,82,109,43,62,85,29,36,59,10,0,21,0,169,202,62,147,178,53,126,155,45,104,131,36,84,108,25,62,85,11,36,58,0,0,21,0,129,189,229,114,167,202,99,146,177,83,124,151,67,102,126,49,79,99,28,53,70,0,12,28,140,188,204,124,166,180,107,145,158,89,123,
-134,72,101,111,54,79,88,31,53,60,0,12,21,148,186,182,130,164,161,112,144,141,93,121,119,76,100,99,56,78,77,33,52,51,0,12,13,153,184,158,134,163,140,116,142,122,97,120,103,78,99,85,59,77,65,35,52,42,0,12,3,158,183,136,138,161,120,119,141,104,99,119,87,80,98,71,60,77,54,36,51,32,0,12,0,162,182,112,142,160,98,122,140,85,102,118,70,82,97,56,62,76,41,37,51,21,0,11,0,166,181,85,145,159,74,125,139,63,103,117,51,84,97,39,63,75,25,37,51,6,0,11,0,168,180,60,147,158,51,126,138,43,105,116,34,85,96,23,64,75,8,
-38,50,0,0,11,0,136,167,213,120,148,188,105,129,165,88,109,140,71,90,117,54,69,92,32,44,64,0,2,23,145,166,190,128,147,168,111,128,147,93,108,125,75,89,104,57,68,81,34,44,55,0,2,15,151,165,170,133,146,150,115,127,131,96,107,111,78,88,92,59,68,71,36,43,46,0,2,6,155,163,148,136,144,131,118,126,114,99,106,96,80,87,79,61,67,60,37,43,37,0,2,0,159,162,128,140,143,112,121,125,97,101,105,82,82,87,66,62,67,49,38,43,27,0,2,0,163,161,105,142,142,92,123,124,80,103,104,66,83,86,52,63,66,37,39,43,17,0,2,0,166,160,
-81,145,141,70,125,123,59,104,104,48,84,85,36,64,66,21,39,42,2,0,1,0,168,160,59,147,141,50,126,122,41,105,103,32,85,85,20,64,65,6,39,42,0,0,1,0,142,144,197,125,128,174,109,111,153,92,93,130,75,76,108,57,57,85,36,33,58,0,0,16,149,143,176,131,127,156,114,110,136,96,93,116,78,75,96,60,57,74,37,33,49,0,0,7,153,142,157,135,126,139,117,110,122,98,92,103,80,75,84,61,56,65,38,33,41,0,0,1,157,142,138,138,125,121,120,109,106,100,91,89,82,74,72,62,56,54,39,33,32,0,0,0,160,141,119,140,124,105,122,108,91,102,91,
-76,83,74,61,63,56,44,40,33,23,0,0,0,163,140,99,143,123,86,124,107,74,103,90,61,84,73,48,64,55,32,40,33,13,0,0,0,165,139,77,145,122,66,125,107,56,104,89,44,85,73,33,65,55,18,40,33,1,0,0,0,167,139,57,146,122,48,126,106,39,105,89,29,86,72,18,65,55,3,40,33,0,0,0,0,146,123,182,129,108,161,113,94,141,95,78,120,78,62,99,60,45,78,38,21,52,0,0,9,152,122,163,134,108,144,117,94,126,98,78,107,80,62,88,61,45,68,39,22,44,0,0,1,156,122,146,137,107,129,119,93,113,100,77,95,82,62,78,63,45,59,40,22,36,0,0,0,158,121,
-128,139,107,113,121,92,98,101,77,82,83,62,66,64,45,49,40,23,27,0,0,0,161,120,111,141,106,97,122,92,84,103,77,70,84,62,56,64,45,40,40,23,19,0,0,0,163,120,93,143,105,81,124,91,69,104,76,56,85,61,43,65,45,28,40,24,9,0,0,0,165,119,73,145,105,62,125,91,52,105,76,41,85,61,29,65,44,15,40,24,0,0,0,0,166,119,55,146,104,46,126,90,37,105,75,27,86,61,15,65,44,0,40,24,0,0,0,0,150,100,168,132,88,148,115,75,130,97,61,110,80,47,91,62,30,71,39,7,46,0,0,2,154,100,150,136,88,133,119,75,116,100,61,98,82,47,81,63,31,
-62,40,9,38,0,0,0,157,100,135,138,87,119,120,75,104,101,61,87,83,48,71,64,31,53,40,10,31,0,0,0,159,99,119,140,87,104,122,75,91,102,61,75,84,48,61,64,32,44,40,11,23,0,0,0,161,99,104,141,87,90,123,74,78,103,61,64,84,48,50,65,32,35,40,12,15,0,0,0,163,99,87,143,86,75,124,74,64,104,61,52,85,47,39,65,32,24,40,13,6,0,0,0,164,98,69,144,86,58,125,74,49,104,61,38,85,47,26,65,32,11,40,13,0,0,0,0,166,98,53,145,86,44,126,74,35,105,60,25,86,47,13,65,32,0,40,14,0,0,0,0,152,75,154,134,64,136,117,53,119,99,41,101,
-82,27,83,63,7,64,39,0,40,0,0,0,156,74,138,138,64,122,120,53,106,101,41,90,83,28,73,64,10,55,40,0,33,0,0,0,158,74,124,139,64,110,121,54,95,102,42,80,84,29,64,65,12,47,41,0,26,0,0,0,160,75,110,140,64,96,122,54,83,103,42,69,84,30,55,65,13,39,41,0,18,0,0,0,161,75,96,142,64,83,123,54,71,103,43,58,85,30,45,65,14,30,41,0,11,0,0,0,163,75,81,143,64,70,124,54,59,104,43,47,85,31,35,65,15,20,41,0,3,0,0,0,164,74,65,144,64,55,125,54,45,104,43,34,85,31,22,66,16,7,41,0,0,0,0,0,165,74,51,145,64,42,125,54,33,105,43,
-22,86,32,10,65,17,0,40,0,0,0,0,0,154,41,142,136,30,124,119,19,108,101,3,91,83,0,75,64,0,57,39,0,34,0,0,0,158,40,127,139,31,112,121,21,97,102,7,81,84,0,66,65,0,49,40,0,27,0,0,0,159,41,114,140,32,100,122,23,87,103,10,72,85,0,58,65,0,42,40,0,21,0,0,0,160,43,101,141,34,88,123,25,76,103,13,62,85,0,49,65,0,33,41,0,14,0,0,0,161,44,89,142,35,77,123,26,65,103,15,53,85,1,40,65,0,25,41,0,7,0,0,0,162,44,75,143,36,64,124,28,54,104,17,42,85,3,30,65,0,16,40,0,1,0,0,0,164,45,61,144,37,51,124,29,42,104,18,31,85,4,
-19,65,0,4,40,0,0,0,0,0,164,45,49,144,37,40,125,29,31,105,19,20,86,6,7,65,0,0,39,0,0,0,0,0,49,202,244,45,178,215,38,156,188,28,132,160,14,110,134,0,86,107,0,59,76,0,20,34,80,200,217,70,176,192,60,154,168,47,131,143,34,109,119,16,85,94,0,58,66,0,20,27,95,198,194,84,175,171,71,153,150,57,130,127,42,108,106,25,84,83,0,58,57,0,20,19,107,196,169,93,173,149,79,151,130,64,128,110,49,106,91,32,84,71,3,57,47,0,19,10,115,195,145,100,171,128,86,150,112,69,127,94,53,105,78,36,83,59,8,57,37,0,19,1,122,193,120,
-107,170,106,91,149,92,74,126,77,57,104,62,39,82,46,13,56,26,0,18,0,128,192,93,112,169,81,95,148,70,77,125,58,60,104,46,42,81,31,15,56,13,0,17,0,132,191,69,115,168,60,98,147,51,79,124,41,62,103,30,43,81,17,16,56,0,0,17,0,77,180,227,69,159,200,60,139,176,48,118,150,35,97,125,20,75,99,0,50,70,0,9,29,96,178,203,85,158,179,73,138,157,59,117,133,45,96,111,29,75,87,3,50,60,0,9,21,107,177,181,94,156,160,80,137,140,65,116,119,51,96,98,34,74,77,9,49,52,0,8,14,115,175,158,101,155,140,86,135,122,71,114,103,55,
-95,85,38,73,65,14,49,42,0,7,4,121,174,137,106,153,120,91,134,105,74,113,88,58,94,72,41,73,54,17,49,33,0,6,0,127,173,114,111,152,100,95,133,86,78,112,72,61,93,58,43,72,42,19,48,22,0,6,0,132,172,88,115,151,77,98,132,66,80,112,54,63,92,42,45,72,28,20,48,9,0,5,0,135,171,67,118,151,57,100,131,49,82,111,39,65,92,28,46,71,13,21,48,0,0,5,0,93,159,211,83,141,187,72,123,164,59,104,140,46,85,116,31,65,92,8,41,64,0,1,23,106,158,189,94,140,167,81,122,147,67,103,124,52,85,103,36,65,81,14,41,55,0,0,15,114,157,169,
-100,139,150,87,121,131,71,102,111,56,84,92,40,64,71,17,41,47,0,0,7,121,156,148,106,138,131,91,120,114,75,101,96,60,83,79,43,64,60,20,40,37,0,0,1,126,155,129,110,136,113,95,119,98,78,101,82,62,83,67,45,63,50,22,40,28,0,0,0,130,154,107,114,135,94,98,118,81,81,100,67,64,82,54,46,63,38,23,40,18,0,0,0,134,153,84,117,135,73,101,117,62,83,99,51,66,81,39,48,62,24,24,40,5,0,0,0,137,152,65,119,134,55,102,117,46,84,99,36,67,81,25,48,62,11,24,40,0,0,0,0,105,138,196,93,122,173,81,106,152,67,89,129,53,72,107,38,
-54,84,17,30,58,0,0,17,115,137,175,101,121,155,88,106,136,73,89,115,58,72,95,42,54,74,21,31,49,0,0,8,120,136,157,106,120,139,92,105,121,76,88,103,61,71,84,44,53,65,23,31,41,0,0,1,125,135,138,110,119,122,95,104,106,79,87,89,63,71,73,46,53,55,25,31,33,0,0,0,129,134,120,113,119,105,98,103,91,81,87,76,65,71,61,48,53,45,26,31,24,0,0,0,133,134,101,116,118,88,100,103,76,83,86,62,67,70,49,49,53,34,27,31,14,0,0,0,136,133,80,119,117,69,102,102,58,85,86,47,68,70,35,50,52,20,27,31,3,0,0,0,138,133,62,121,117,52,
-104,102,43,86,85,33,69,69,22,50,52,7,27,31,0,0,0,0,114,118,182,100,104,161,87,90,141,73,75,120,59,59,99,43,42,78,22,20,52,0,0,10,121,117,163,106,104,144,92,90,126,77,75,107,62,59,88,46,42,68,24,21,44,0,0,2,125,117,146,110,103,129,95,89,113,79,74,95,64,59,78,47,42,59,26,21,36,0,0,0,129,116,129,113,102,113,98,89,99,82,74,83,66,59,67,49,42,50,27,22,28,0,0,0,132,116,112,116,102,98,100,88,85,83,73,71,67,59,57,50,43,41,28,22,20,0,0,0,134,115,95,118,101,82,102,88,71,85,73,58,68,59,45,51,43,30,29,22,11,0,
-0,0,137,115,76,120,101,65,104,87,55,86,73,44,69,58,32,51,42,18,29,22,1,0,0,0,139,114,60,122,100,50,105,87,41,87,72,31,70,58,19,51,42,4,29,22,0,0,0,0,120,97,168,106,85,149,92,73,130,77,59,110,63,45,91,47,28,71,25,6,47,0,0,3,126,97,151,111,85,133,96,73,117,80,59,98,65,46,81,48,29,62,27,7,39,0,0,0,129,97,136,113,85,120,98,73,104,82,59,88,67,46,72,50,30,54,29,8,32,0,0,0,132,96,120,116,84,105,100,72,91,84,59,76,68,46,61,51,30,45,29,9,24,0,0,0,134,96,105,117,84,92,102,72,79,85,59,65,69,46,52,51,30,36,30,
-10,16,0,0,0,136,96,89,119,84,77,103,72,66,86,59,53,69,46,41,52,31,26,30,11,7,0,0,0,138,95,71,121,83,61,105,72,51,87,59,40,70,46,28,52,31,14,30,11,0,0,0,0,139,95,57,122,83,47,106,71,38,88,59,28,71,46,17,52,31,2,29,12,0,0,0,0,125,74,155,110,63,137,96,52,120,81,40,101,66,27,83,49,7,64,27,0,41,0,0,0,129,73,139,114,63,123,99,53,107,83,41,90,68,28,74,51,10,56,29,0,33,0,0,0,132,74,125,116,63,110,101,53,96,84,41,80,69,29,65,51,12,48,30,0,27,0,0,0,134,74,111,118,64,97,102,53,84,85,42,70,69,29,56,52,13,40,
-30,0,19,0,0,0,136,74,97,119,64,85,103,53,73,86,42,60,70,30,47,52,14,31,30,0,12,0,0,0,137,74,83,121,64,71,104,54,61,87,42,49,71,30,36,53,15,22,30,0,5,0,0,0,139,74,67,122,64,57,105,54,47,88,42,36,71,31,25,53,16,9,30,0,0,0,0,0,140,73,54,123,64,45,106,54,36,88,43,26,71,31,14,53,17,1,29,0,0,0,0,0,129,44,143,114,34,126,99,24,110,84,9,92,68,0,76,51,0,58,28,0,35,0,0,0,132,44,128,117,35,113,102,25,98,85,12,82,69,0,67,52,0,50,29,0,28,0,0,0,134,45,116,118,36,102,103,27,88,86,14,73,70,0,59,52,0,43,29,0,22,0,
-0,0,136,46,103,119,37,90,103,28,77,87,17,64,71,1,50,53,0,35,30,0,15,0,0,0,137,47,90,120,38,78,104,29,67,87,18,54,71,3,42,53,0,27,29,0,8,0,0,0,138,47,77,121,39,66,105,30,56,88,19,44,71,5,32,53,0,18,29,0,2,0,0,0,139,48,63,122,39,53,106,31,44,88,20,33,71,7,21,53,0,6,28,0,0,0,0,0,140,48,52,123,40,42,107,31,33,89,21,23,72,8,10,53,0,0,27,0,0,0,0,0,0,192,242,0,169,213,0,148,187,0,125,159,0,104,133,0,82,106,0,56,76,0,18,34,0,189,216,0,167,190,0,147,167,0,124,142,0,103,119,0,81,94,0,55,66,0,16,27,0,188,193,
-0,166,170,0,145,149,0,123,127,0,102,105,0,80,83,0,55,57,0,15,20,32,186,168,27,164,149,17,144,130,0,122,110,0,101,91,0,79,71,0,55,47,0,14,11,56,184,146,47,163,129,37,142,113,23,121,95,5,100,78,0,79,60,0,54,38,0,14,2,70,183,122,60,161,107,49,141,94,35,120,79,20,100,64,0,78,48,0,54,27,0,13,0,80,182,96,69,160,84,57,140,73,43,119,61,28,99,48,6,78,34,0,53,15,0,13,0,87,181,74,75,160,65,62,140,56,47,119,46,32,98,35,12,77,21,0,53,2,0,13,0,0,171,225,0,151,199,0,132,174,0,112,149,0,92,124,0,71,98,0,47,69,0,
-4,29,0,169,201,0,150,178,0,131,156,0,111,133,0,92,111,0,71,87,0,47,60,0,3,22,41,168,180,36,148,159,28,130,140,15,110,118,0,91,98,0,70,77,0,46,52,0,2,14,61,166,158,53,147,139,43,129,122,31,109,103,17,90,85,0,70,66,0,46,43,0,2,5,73,165,137,64,146,121,53,128,106,40,108,89,26,89,73,6,69,55,0,46,33,0,1,0,83,164,115,72,145,101,60,127,88,46,107,73,32,89,59,14,69,43,0,46,23,0,1,0,90,163,91,78,144,80,65,126,69,51,106,57,37,88,44,19,68,30,0,45,11,0,1,0,95,163,72,82,143,62,69,125,53,54,106,43,39,88,32,22,68,
-18,0,45,0,0,1,0,0,152,210,0,134,186,0,117,163,0,99,139,0,81,116,0,62,92,0,38,64,0,1,24,47,151,188,42,133,167,35,117,146,24,98,124,10,81,103,0,61,81,0,38,55,0,0,16,65,150,169,57,132,149,47,116,131,36,98,111,23,80,92,4,61,71,0,38,47,0,0,7,76,148,148,67,131,131,56,115,114,44,97,96,31,79,79,14,61,61,0,38,38,0,0,1,84,147,129,74,130,114,62,114,99,49,96,83,35,79,68,19,60,50,0,37,29,0,0,0,91,146,109,80,129,95,67,113,83,53,95,69,39,78,55,23,60,39,1,37,20,0,0,0,97,146,87,84,128,76,71,112,65,57,95,53,42,78,
-41,26,60,26,4,37,7,0,0,0,101,145,69,88,128,59,74,112,50,59,94,40,44,77,29,27,59,15,4,37,0,0,0,0,52,132,195,47,117,172,40,102,151,30,85,129,19,69,107,2,51,84,0,28,58,0,0,18,70,131,175,61,116,155,52,101,135,41,85,115,29,68,95,13,51,74,0,28,49,0,0,9,80,130,157,70,115,139,59,100,121,47,84,103,35,68,85,19,51,65,0,28,42,0,0,1,87,130,138,76,114,122,65,100,106,52,84,89,39,68,73,24,50,55,4,28,33,0,0,0,93,129,121,81,114,106,69,99,92,56,83,77,42,67,62,27,50,46,7,29,25,0,0,0,98,128,102,86,113,89,73,98,77,59,
-82,64,45,67,50,29,50,35,9,29,16,0,0,0,102,127,82,89,112,71,76,98,61,61,82,49,47,66,37,31,50,23,11,29,4,0,0,0,105,127,66,92,112,56,78,97,47,63,82,37,48,66,25,32,50,11,10,29,0,0,0,0,72,114,181,63,100,160,54,87,140,44,72,119,32,57,99,18,39,78,0,18,52,0,0,11,83,113,163,73,100,144,62,86,126,50,71,107,38,57,88,24,40,68,3,19,44,0,0,3,89,113,147,78,99,129,67,86,113,55,71,95,42,57,78,27,40,60,8,19,37,0,0,0,95,112,129,83,98,114,71,85,99,58,71,83,45,56,67,30,40,50,11,20,29,0,0,0,99,111,113,86,98,99,74,85,86,
-60,70,72,47,56,57,31,40,41,12,20,21,0,0,0,103,111,96,90,97,84,77,84,72,63,70,59,49,56,46,33,40,31,13,21,12,0,0,0,106,110,78,93,97,67,79,84,57,64,70,46,50,56,34,34,40,19,13,21,2,0,0,0,108,110,63,95,97,53,81,84,44,66,69,34,51,56,22,35,40,7,13,21,0,0,0,0,85,94,168,74,82,149,64,70,130,53,57,110,41,43,91,27,26,71,5,5,47,0,0,4,92,94,151,81,82,134,70,70,117,57,57,99,45,44,81,30,27,62,10,7,39,0,0,0,97,94,136,85,82,120,73,70,105,60,57,88,47,44,72,32,28,54,13,8,32,0,0,0,101,94,121,88,82,106,76,70,92,62,57,
-77,49,44,62,34,28,45,14,9,25,0,0,0,104,93,106,91,81,93,78,70,80,64,57,66,50,44,52,35,29,37,14,10,17,0,0,0,106,93,90,93,81,78,80,69,67,66,57,55,52,44,42,36,29,27,15,11,8,0,0,0,109,92,74,96,81,63,82,69,53,67,57,42,53,44,30,36,29,16,15,11,1,0,0,0,111,92,60,97,80,50,83,69,41,68,57,31,53,44,20,37,30,5,15,11,0,0,0,0,94,73,155,82,63,137,72,52,120,59,40,102,47,26,84,32,8,65,9,0,42,0,0,0,99,73,140,87,63,124,76,52,108,62,40,91,49,27,75,34,11,57,12,0,34,0,0,0,103,73,126,90,63,111,78,53,97,64,41,81,51,28,66,
-35,13,49,13,0,27,0,0,0,105,73,112,92,63,98,80,53,85,66,41,71,52,29,57,36,14,41,15,0,20,0,0,0,107,73,99,94,63,86,81,53,74,67,41,61,53,29,48,37,15,32,16,0,13,0,0,0,110,73,85,96,63,73,83,53,62,68,42,50,54,30,38,38,16,23,16,1,5,0,0,0,112,73,69,98,63,59,84,53,49,69,42,38,55,30,27,38,16,12,17,1,0,0,0,0,113,73,57,99,63,47,85,53,38,70,42,28,55,30,17,38,17,3,16,2,0,0,0,0,101,47,144,88,38,127,77,27,111,64,14,94,51,0,77,35,0,59,9,0,36,0,0,0,105,47,129,92,38,114,80,28,99,66,16,83,53,0,68,37,0,51,13,0,29,0,0,
-0,107,48,117,94,39,103,81,29,89,67,18,74,54,2,60,38,0,44,15,0,23,0,0,0,109,49,104,95,40,91,82,31,79,68,19,65,54,5,51,39,0,36,17,0,16,0,0,0,110,50,92,97,40,80,84,31,68,69,20,56,55,7,43,39,0,28,17,0,9,0,0,0,112,50,79,98,41,68,85,32,57,70,21,46,56,8,34,40,0,20,18,0,3,0,0,0,113,50,65,100,41,55,86,33,46,71,22,35,56,10,23,40,0,8,17,0,0,0,0,0,115,50,54,101,41,44,87,33,36,71,23,25,56,11,14,40,0,1,16,0,0,0,0,0,0,182,240,0,161,212,0,141,185,0,120,158,0,99,132,0,78,106,0,53,75,0,12,35,0,180,214,0,159,189,0,
-140,166,0,119,141,0,99,118,0,77,94,0,53,66,0,11,28,0,179,192,0,158,169,0,138,149,0,118,126,0,98,105,0,77,83,0,52,57,0,10,21,0,177,168,0,156,149,0,137,130,0,116,110,0,97,91,0,76,71,0,52,48,0,9,12,0,175,146,0,155,129,0,136,113,0,115,96,0,96,79,0,75,60,0,51,39,0,9,3,0,174,123,0,154,109,0,135,95,0,115,80,0,95,65,0,75,49,0,51,28,0,8,0,0,173,98,0,153,87,0,134,76,0,114,63,0,95,50,0,74,35,0,51,17,0,8,0,0,172,78,0,152,70,0,134,60,0,114,49,0,94,38,0,74,24,0,51,5,0,8,0,0,163,224,0,144,198,0,126,173,0,107,148,
-0,88,123,0,68,98,0,44,69,0,1,29,0,162,200,0,143,177,0,125,155,0,106,132,0,88,110,0,68,87,0,44,60,0,1,22,0,160,180,0,142,159,0,124,139,0,105,118,0,87,98,0,67,77,0,44,52,0,0,15,0,159,158,0,140,139,0,123,122,0,104,103,0,86,85,0,67,66,0,43,43,0,0,5,0,157,138,0,139,121,0,122,106,0,103,89,0,85,73,0,66,56,0,43,34,0,0,0,0,156,116,0,138,102,0,121,89,0,103,75,0,85,60,0,66,44,0,43,24,0,0,0,6,155,94,2,137,82,0,120,71,0,102,59,0,84,46,0,65,32,0,43,13,0,0,0,30,155,75,23,137,66,11,120,57,0,102,46,0,84,35,0,65,20,
-0,43,2,0,0,0,0,145,209,0,129,185,0,112,162,0,95,138,0,77,115,0,59,91,0,35,64,0,1,24,0,144,188,0,128,166,0,112,145,0,94,124,0,77,103,0,58,81,0,35,55,0,0,16,0,143,168,0,127,149,0,111,130,0,93,111,0,77,92,0,58,71,0,35,47,0,0,8,0,142,148,0,126,131,0,110,114,0,93,97,0,76,79,0,58,61,0,35,38,0,0,1,0,141,130,0,125,114,0,109,100,0,92,84,0,75,68,0,58,51,0,35,30,0,0,0,27,140,110,22,124,97,12,108,84,0,91,70,0,75,56,0,57,40,0,35,21,0,0,0,43,139,89,36,123,78,26,108,67,12,91,55,0,74,43,0,57,28,0,35,9,0,0,0,51,139,
-72,43,123,63,33,107,53,20,90,43,3,74,31,0,57,18,0,35,1,0,0,0,0,127,194,0,112,172,0,98,151,0,81,128,0,66,107,0,48,84,0,26,58,0,0,18,0,126,174,0,111,154,0,97,135,0,81,115,0,65,95,0,48,74,0,26,50,0,0,9,0,125,157,0,111,139,0,96,121,0,81,103,0,65,85,0,48,65,0,27,42,0,0,2,20,125,139,17,110,122,9,96,107,0,80,90,0,65,73,0,48,56,0,27,34,0,0,0,39,124,122,33,109,107,25,95,93,13,80,78,0,65,63,0,48,46,0,27,26,0,0,0,51,123,103,43,108,90,34,94,78,23,79,65,8,64,51,0,48,36,0,27,17,0,0,0,59,122,84,51,108,73,41,94,
-63,29,79,51,15,64,39,0,47,24,0,27,6,0,0,0,64,122,69,55,107,59,45,94,50,32,78,39,19,64,28,0,47,14,0,27,0,0,0,0,0,110,181,0,97,160,0,83,140,0,69,119,0,54,99,0,37,78,0,16,53,0,0,12,7,109,163,8,96,144,3,83,126,0,69,107,0,54,88,0,38,68,0,17,45,0,0,3,34,109,147,30,96,129,23,83,113,13,69,95,0,54,78,0,38,60,0,18,37,0,0,0,48,108,130,41,95,114,33,82,99,23,68,84,10,54,68,0,38,51,0,18,29,0,0,0,56,108,114,49,94,100,40,82,87,29,68,72,16,54,58,0,38,42,0,18,22,0,0,0,63,107,97,55,94,85,45,81,73,34,68,60,21,54,47,
-5,38,32,0,18,13,0,0,0,68,106,80,59,93,69,49,81,59,37,67,47,25,54,35,9,38,21,0,18,4,0,0,0,72,106,66,63,93,56,52,81,47,40,67,36,27,53,25,11,38,11,0,18,0,0,0,0,28,92,168,24,80,149,19,68,130,11,55,111,0,41,92,0,25,71,0,6,47,0,0,5,46,92,151,40,80,134,33,68,117,24,55,99,12,42,81,0,26,63,0,7,40,0,0,0,55,91,137,48,80,121,40,68,105,30,55,89,18,42,72,2,27,55,0,8,32,0,0,0,62,91,121,54,79,107,45,68,93,34,55,77,23,42,62,7,27,46,0,8,25,0,0,0,67,91,107,58,79,93,49,68,81,38,55,67,26,42,53,12,27,37,0,8,18,0,0,0,72,
-90,91,62,79,79,52,67,68,41,55,56,29,42,43,15,28,28,1,9,9,0,0,0,76,90,75,66,78,65,56,67,55,43,55,44,31,42,32,17,28,18,2,9,2,0,0,0,78,90,62,68,78,52,58,67,43,45,55,33,32,42,22,19,28,7,2,9,0,0,0,0,53,72,156,46,62,138,39,51,121,30,39,102,20,25,84,2,9,65,0,0,42,0,0,0,62,72,140,55,62,124,46,52,108,36,40,91,25,27,75,9,11,57,0,0,34,0,0,0,68,72,127,59,62,112,50,52,97,39,40,82,28,27,66,13,12,49,0,0,28,0,0,0,72,73,113,63,62,99,53,52,86,42,40,71,30,28,57,17,13,41,0,0,21,0,0,0,76,72,100,66,62,87,56,52,75,44,41,
-62,32,29,48,19,14,33,3,0,13,0,0,0,79,72,86,69,62,74,58,52,63,46,41,51,34,29,39,21,15,24,4,1,6,0,0,0,81,72,71,71,62,61,60,52,51,48,41,40,35,29,28,22,15,13,5,1,0,0,0,0,83,72,59,73,62,49,62,52,41,49,41,31,36,30,20,22,16,5,4,2,0,0,0,0,67,49,144,59,40,128,50,30,112,40,18,95,29,2,78,13,0,60,0,0,37,0,0,0,73,50,130,64,40,115,55,31,100,44,19,84,32,4,69,18,0,52,0,0,30,0,0,0,76,50,118,67,41,104,57,32,90,46,20,75,34,7,61,20,0,45,0,0,24,0,0,0,79,51,105,69,42,92,59,33,80,47,21,66,35,9,52,22,0,37,1,0,16,0,0,0,81,
-52,93,71,42,81,61,33,70,49,22,57,36,11,44,23,0,29,2,0,9,0,0,0,83,52,80,73,43,69,62,34,59,50,23,47,37,12,35,23,0,21,3,0,3,0,0,0,85,52,67,75,43,57,64,34,47,51,24,36,38,13,25,24,0,10,3,0,0,0,0,0,87,52,56,76,43,46,65,34,37,52,24,27,39,14,16,24,0,2,2,0,0,0,0,0,0,174,238,0,154,210,0,135,184,0,115,157,0,95,132,0,75,105,0,50,75,0,6,35,0,172,213,0,153,188,0,134,165,0,114,141,0,94,118,0,74,93,0,50,66,0,5,28,0,171,191,0,151,169,0,133,148,0,113,126,0,94,105,0,73,83,0,50,57,0,5,21,0,169,168,0,150,148,0,131,130,
-0,112,110,0,93,92,0,73,71,0,49,48,0,5,13,0,167,146,0,148,130,0,130,113,0,111,96,0,92,79,0,72,61,0,49,39,0,4,3,0,166,124,0,147,110,0,129,96,0,110,81,0,92,66,0,72,49,0,49,29,0,4,0,0,165,100,0,146,89,0,129,78,0,110,65,0,91,52,0,72,37,0,49,18,0,4,0,0,164,82,0,146,73,0,128,64,0,109,52,0,91,41,0,72,26,0,49,8,0,4,0,0,157,223,0,138,197,0,121,172,0,102,147,0,84,123,0,65,98,0,41,69,0,1,30,0,155,199,0,137,176,0,120,155,0,102,132,0,84,110,0,65,87,0,41,60,0,1,22,0,154,179,0,136,158,0,119,139,0,101,118,0,83,98,
-0,64,77,0,41,52,0,0,15,0,152,158,0,135,139,0,118,122,0,100,103,0,83,85,0,64,66,0,41,43,0,0,6,0,151,138,0,133,122,0,117,106,0,99,90,0,82,74,0,64,56,0,41,35,0,0,0,0,150,117,0,133,103,0,116,90,0,99,76,0,82,61,0,63,45,0,41,25,0,0,0,0,149,95,0,132,84,0,116,73,0,98,61,0,81,48,0,63,33,0,41,15,0,0,0,0,148,78,0,131,69,0,115,59,0,98,49,0,81,37,0,63,23,0,40,4,0,0,0,0,140,208,0,124,184,0,108,161,0,91,137,0,74,115,0,56,91,0,33,64,0,1,24,0,139,187,0,123,165,0,107,145,0,90,123,0,74,102,0,56,80,0,33,55,0,0,17,0,
-138,168,0,122,149,0,106,130,0,90,110,0,73,91,0,56,71,0,33,47,0,0,8,0,136,148,0,121,131,0,105,115,0,89,97,0,73,80,0,55,61,0,33,39,0,0,1,0,135,130,0,120,115,0,105,100,0,88,84,0,72,69,0,55,52,0,33,30,0,0,0,0,135,111,0,119,98,0,104,85,0,88,71,0,72,57,0,55,41,0,33,22,0,0,0,0,134,91,0,118,80,0,103,69,0,87,57,0,72,44,0,54,30,0,33,11,0,0,0,0,133,75,0,118,65,0,103,56,0,87,45,0,71,34,0,54,20,0,33,2,0,0,0,0,123,194,0,108,171,0,94,150,0,78,128,0,63,106,0,46,84,0,24,58,0,0,19,0,122,174,0,107,154,0,93,135,0,78,
-114,0,63,95,0,46,74,0,25,50,0,0,10,0,121,157,0,107,139,0,93,121,0,78,103,0,63,85,0,46,65,0,25,42,0,0,2,0,120,139,0,106,122,0,92,107,0,77,90,0,62,74,0,46,56,0,25,34,0,0,0,0,119,122,0,105,107,0,91,93,0,77,78,0,62,63,0,45,47,0,25,26,0,0,0,0,119,104,0,104,91,0,91,79,0,76,66,0,62,52,0,45,37,0,25,18,0,0,0,0,118,86,0,104,75,0,90,64,0,76,52,0,61,40,0,45,26,0,25,7,0,0,0,0,118,71,0,104,61,0,90,52,0,75,42,0,61,30,0,45,17,0,24,1,0,0,0,0,107,181,0,94,160,0,81,140,0,66,119,0,52,99,0,35,78,0,15,53,0,0,13,0,106,
-163,0,93,144,0,80,126,0,66,107,0,52,88,0,36,68,0,15,45,0,0,4,0,106,147,0,93,130,0,80,113,0,66,96,0,52,79,0,36,60,0,16,37,0,0,0,0,105,130,0,92,115,0,79,100,0,66,84,0,52,68,0,36,51,0,16,30,0,0,0,0,104,115,0,91,101,0,79,87,0,65,73,0,52,59,0,36,43,0,16,22,0,0,0,0,104,98,0,91,86,0,79,74,0,65,61,0,52,48,0,36,33,0,16,14,0,0,0,0,103,81,0,90,70,0,78,60,0,65,49,0,52,37,0,36,22,0,16,5,0,0,0,0,103,68,0,90,58,0,78,49,0,65,38,0,51,27,0,36,13,0,16,0,0,0,0,0,90,168,0,78,149,0,67,130,0,54,111,0,40,92,0,24,72,0,6,
-47,0,0,6,0,90,152,0,78,134,0,67,117,0,54,99,0,40,82,0,25,63,0,6,40,0,0,0,0,89,137,0,78,121,0,66,106,0,54,89,0,41,73,0,26,55,0,7,33,0,0,0,0,89,122,0,77,107,0,66,93,0,54,78,0,41,63,0,26,46,0,7,25,0,0,0,0,89,108,0,77,94,0,66,81,0,53,68,0,41,54,0,26,38,0,8,18,0,0,0,7,88,92,4,77,80,0,66,69,0,53,57,0,41,44,0,27,29,0,8,10,0,0,0,23,88,77,19,76,66,11,65,56,0,53,45,0,41,33,0,27,19,0,8,3,0,0,0,30,88,64,26,76,54,18,65,45,4,53,35,0,41,24,0,27,9,0,8,0,0,0,0,0,72,156,0,62,138,0,51,121,0,39,103,0,26,85,0,9,66,0,
-0,42,0,0,0,0,72,141,0,62,125,0,51,109,0,39,92,0,27,75,0,11,57,0,0,35,0,0,0,0,72,128,0,62,113,0,51,98,0,40,82,0,27,67,0,12,50,0,1,28,0,0,0,17,72,114,13,62,100,6,51,87,0,40,72,0,28,58,0,13,42,0,1,21,0,0,0,28,72,101,23,61,88,16,51,76,4,40,62,0,28,49,0,14,34,0,1,14,0,0,0,36,72,87,30,61,75,23,51,64,12,40,52,1,28,40,0,14,25,0,1,7,0,0,0,41,71,72,35,61,62,28,51,52,17,40,41,5,28,29,0,14,15,0,0,0,0,0,0,45,71,60,39,61,51,31,51,42,20,40,32,8,29,21,0,15,6,0,0,0,0,0,0,0,51,145,0,42,129,0,33,113,0,20,96,0,5,79,
-0,0,60,0,0,37,0,0,0,24,52,131,21,42,116,15,33,101,5,21,85,0,7,69,0,0,52,0,1,30,0,0,0,34,52,119,29,43,105,22,33,91,12,22,76,0,8,61,0,0,45,0,1,24,0,0,0,40,53,106,34,43,93,27,34,80,17,23,67,5,9,53,0,0,37,0,0,16,0,0,0,45,53,94,38,44,82,31,34,70,20,24,58,10,11,45,0,0,29,0,0,9,0,0,0,48,53,81,42,44,70,34,35,60,24,24,48,13,12,36,0,0,21,0,0,3,0,0,0,51,53,68,45,44,58,37,35,48,26,25,37,15,13,26,2,1,11,0,0,0,0,0,0,54,54,57,47,44,47,39,35,39,28,25,29,17,13,17,4,1,3,0,0,0,0,0,0]);Re.prototype={getRgb:function(a,
-b){var c=new Uint8Array(3);Zc(a,b,1,c,0);return c},getRgbItem:function(a,b,c,d){Zc(a,b,1,c,d)},getRgbBuffer:function(a,b,c,d,e,f){f=1/((1<<f)-1);for(var g=0;g<c;g++)Zc(a,b,f,d,e),b+=4,e+=3},getOutputLength:function(a){return 3*(a>>2)},isPassthrough:Q.prototype.isPassthrough,createRgbBuffer:Q.prototype.createRgbBuffer,isDefaultDecode:function(a){return Q.isDefaultDecode(a,this.numComps)}};Ca=Re;var Le,Se=function(a,b,c){this.name="Lab";this.numComps=3;this.defaultColor=new Float32Array([0,0,0]);a||
-s("WhitePoint missing - required for color space Lab");b=b||[0,0,0];c=c||[-100,100,-100,100];this.XW=a[0];this.YW=a[1];this.ZW=a[2];this.amin=c[0];this.amax=c[1];this.bmin=c[2];this.bmax=c[3];this.XB=b[0];this.YB=b[1];this.ZB=b[2];(0>this.XW||0>this.ZW||1!==this.YW)&&s("Invalid WhitePoint components, no fallback available");if(0>this.XB||0>this.YB||0>this.ZB)aa("Invalid BlackPoint, falling back to default"),this.XB=this.YB=this.ZB=0;if(this.amin>this.amax||this.bmin>this.bmax)aa("Invalid Range, falling back to defaults"),
-this.amin=-100,this.amax=100,this.bmin=-100,this.bmax=100},$c=function(a){return a>=6/29?a*a*a:108/841*(a-4/29)},Te=function(a,b,c,d,e){var f=b[c],g=b[c+1];b=b[c+2];g=g>a.amax?a.amax:g<a.amin?a.amin:g;b=b>a.bmax?a.bmax:b<a.bmin?a.bmin:b;f=(f+16)/116;b=f-b/200;g=a.XW*$c(f+g/500);f=a.YW*$c(f);b=a.ZW*$c(b);1>a.ZW?(a=3.1339*g+-1.617*f+-0.4906*b,c=-0.9785*g+1.916*f+0.0333*b,g=0.072*g+-0.229*f+1.4057*b):(a=3.2406*g+-1.5372*f+-0.4986*b,c=-0.9689*g+1.8758*f+0.0415*b,g=0.0557*g+-0.204*f+1.057*b);d[e]=0>a?
-0:1<a?255:255*a;d[e+1]=0>c?0:1<c?255:255*c;d[e+2]=0>g?0:1<g?255:255*g};Se.prototype={getRgb:function(a,b){var c=new Uint8Array(3);Te(this,a,b,c,0);return c},getRgbItem:function(a,b,c,d){Te(this,a,b,c,d)},getOutputLength:function(a){return a},isPassthrough:Q.prototype.isPassthrough,isDefaultDecode:function(a){return 0===a[0]&&100===a[1]&&a[2]===this.amin&&a[3]===this.amax&&a[4]===this.bmin&&a[5]===this.bmax?!0:!1}};Le=Se;var Ea=function(a){this.b=this.a=0;var b=new Uint8Array(256),c,d=0,e,f=a.length;
-for(c=0;256>c;++c)b[c]=c;for(c=0;256>c;++c)e=b[c],d=d+e+a[c%f]&255,b[c]=b[d],b[d]=e;this.s=b};Ea.prototype={encryptBlock:function(a){var b,c=a.length,d,e,f=this.a,g=this.b,h=this.s,k=new Uint8Array(c);for(b=0;b<c;++b)f=f+1&255,d=h[f],g=g+d&255,e=h[g],h[f]=e,h[g]=d,k[b]=a[b]^h[d+e&255];this.a=f;this.b=g;return k}};Ea.prototype.decryptBlock=Ea.prototype.encryptBlock;var La,$g=new Uint8Array([7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,4,11,16,23,4,11,16,23,4,
-11,16,23,4,11,16,23,6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21]),ah=new Int32Array([-680876936,-389564586,606105819,-1044525330,-176418897,1200080426,-1473231341,-45705983,1770035416,-1958414417,-42063,-1990404162,1804603682,-40341101,-1502002290,1236535329,-165796510,-1069501632,643717713,-373897302,-701558691,38016083,-660478335,-405537848,568446438,-1019803690,-187363961,1163531501,-1444681467,-51403784,1735328473,-1926607734,-378558,-2022574463,1839030562,-35309556,-1530992060,1272893353,-155497632,
--1094730640,681279174,-358537222,-722521979,76029189,-640364487,-421815835,530742520,-995338651,-198630844,1126891415,-1416354905,-57434055,1700485571,-1894986606,-1051523,-2054922799,1873313359,-30611744,-1560198380,1309151649,-145523070,-1120210379,718787259,-343485551]);La=function(a,b,c){var d=1732584193,e=-271733879,f=-1732584194,g=271733878,h=c+72&-64,k=new Uint8Array(h),j;for(j=0;j<c;++j)k[j]=a[b++];k[j++]=128;for(a=h-8;j<a;)k[j++]=0;k[j++]=c<<3&255;k[j++]=c>>5&255;k[j++]=c>>13&255;k[j++]=
-c>>21&255;k[j++]=c>>>29&255;k[j++]=0;k[j++]=0;k[j++]=0;a=new Int32Array(16);for(j=0;j<h;){for(c=0;16>c;++c,j+=4)a[c]=k[j]|k[j+1]<<8|k[j+2]<<16|k[j+3]<<24;var l=d;b=e;var n=f,p=g,m,r;for(c=0;64>c;++c){16>c?(m=b&n|~b&p,r=c):32>c?(m=p&b|~p&n,r=5*c+1&15):48>c?(m=b^n^p,r=3*c+5&15):(m=n^(b|~p),r=7*c&15);var q=p,l=l+m+ah[c]+a[r]|0;m=$g[c];p=n;n=b;b=b+(l<<m|l>>>32-m)|0;l=q}d=d+l|0;e=e+b|0;f=f+n|0;g=g+p|0}return new Uint8Array([d&255,d>>8&255,d>>16&255,d>>>24&255,e&255,e>>8&255,e>>16&255,e>>>24&255,f&255,
-f>>8&255,f>>16&255,f>>>24&255,g&255,g>>8&255,g>>16&255,g>>>24&255])};var Ue=function(){};Ue.prototype={decryptBlock:function(a){return a}};var Ve=function(a){var b=new Uint8Array(176);b.set(a);a=16;for(var c=1;176>a;++c)for(var d=b[a-3],e=b[a-2],f=b[a-1],g=b[a-4],d=vb[d],e=vb[e],f=vb[f],g=vb[g],d=d^bh[c],h=0;4>h;++h)b[a]=d^=b[a-16],a++,b[a]=e^=b[a-16],a++,b[a]=f^=b[a-16],a++,b[a]=g^=b[a-16],a++;this.key=b;this.buffer=new Uint8Array(16);this.bufferPosition=0},ch=function(a){var b,c,d=a.length,e=this.buffer;
-c=this.bufferPosition;var f=[],g=this.iv;for(b=0;b<d;++b)if(e[c]=a[b],++c,!(16>c)){var h,k=e;c=this.key;h=new Uint8Array(16);h.set(k);for(var j=k=void 0,l=void 0,n=j=l=void 0,j=0,l=160;16>j;++j,++l)h[j]^=c[l];for(k=9;1<=k;--k){l=h[13];h[13]=h[9];h[9]=h[5];h[5]=h[1];h[1]=l;l=h[14];j=h[10];h[14]=h[6];h[10]=h[2];h[6]=l;h[2]=j;l=h[15];j=h[11];n=h[7];h[15]=h[3];h[11]=l;h[7]=j;h[3]=n;for(j=0;16>j;++j)h[j]=We[h[j]];j=0;for(l=16*k;16>j;++j,++l)h[j]^=c[l];for(j=0;16>j;j+=4){var l=wb[h[j+1]],n=wb[h[j+2]],p=
-wb[h[j+3]],l=wb[h[j]]^l>>>8^l<<24^n>>>16^n<<16^p>>>24^p<<8;h[j]=l>>>24&255;h[j+1]=l>>16&255;h[j+2]=l>>8&255;h[j+3]=l&255}}l=h[13];h[13]=h[9];h[9]=h[5];h[5]=h[1];h[1]=l;l=h[14];j=h[10];h[14]=h[6];h[10]=h[2];h[6]=l;h[2]=j;l=h[15];j=h[11];n=h[7];h[15]=h[3];h[11]=l;h[7]=j;h[3]=n;for(j=0;16>j;++j)h[j]=We[h[j]],h[j]^=c[j];for(c=0;16>c;++c)h[c]^=g[c];g=e;f.push(h);e=new Uint8Array(16);c=0}this.buffer=e;this.bufferLength=c;this.iv=g;if(0==f.length)return new Uint8Array([]);if(1==f.length)return f[0];d=new Uint8Array(16*
-f.length);c=b=0;for(a=f.length;b<a;++b,c+=16)d.set(f[b],c);return d},bh=new Uint8Array([141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,
-188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141]),vb=new Uint8Array([99,
-124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,
-25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22]),We=new Uint8Array([82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,
-155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,
-71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125]),wb=new Uint32Array([0,235474187,470948374,303765277,941896748,908933415,607530554,708780849,1883793496,2118214995,1817866830,1649639237,1215061108,1181045119,1417561698,
-1517767529,3767586992,4003061179,4236429990,4069246893,3635733660,3602770327,3299278474,3400528769,2430122216,2664543715,2362090238,2193862645,2835123396,2801107407,3035535058,3135740889,3678124923,3576870512,3341394285,3374361702,3810496343,3977675356,4279080257,4043610186,2876494627,2776292904,3076639029,3110650942,2472011535,2640243204,2403728665,2169303058,1001089995,899835584,666464733,699432150,59727847,226906860,530400753,294930682,1273168787,1172967064,1475418501,1509430414,1942435775,2110667444,
-1876241833,1641816226,2910219766,2743034109,2976151520,3211623147,2505202138,2606453969,2302690252,2269728455,3711829422,3543599269,3240894392,3475313331,3843699074,3943906441,4178062228,4144047775,1306967366,1139781709,1374988112,1610459739,1975683434,2076935265,1775276924,1742315127,1034867998,866637845,566021896,800440835,92987698,193195065,429456164,395441711,1984812685,2017778566,1784663195,1683407248,1315562145,1080094634,1383856311,1551037884,101039829,135050206,437757123,337553864,1042385657,
-807962610,573804783,742039012,2531067453,2564033334,2328828971,2227573024,2935566865,2700099354,3001755655,3168937228,3868552805,3902563182,4203181171,4102977912,3736164937,3501741890,3265478751,3433712980,1106041591,1340463100,1576976609,1408749034,2043211483,2009195472,1708848333,1809054150,832877231,1068351396,766945465,599762354,159417987,126454664,361929877,463180190,2709260871,2943682380,3178106961,3009879386,2572697195,2538681184,2236228733,2336434550,3509871135,3745345300,3441850377,3274667266,
-3910161971,3877198648,4110568485,4211818798,2597806476,2497604743,2261089178,2295101073,2733856160,2902087851,3202437046,2968011453,3936291284,3835036895,4136440770,4169408201,3535486456,3702665459,3467192302,3231722213,2051518780,1951317047,1716890410,1750902305,1113818384,1282050075,1584504582,1350078989,168810852,67556463,371049330,404016761,841739592,1008918595,775550814,540080725,3969562369,3801332234,4035489047,4269907996,3569255213,3669462566,3366754619,3332740144,2631065433,2463879762,2160117071,
-2395588676,2767645557,2868897406,3102011747,3069049960,202008497,33778362,270040487,504459436,875451293,975658646,675039627,641025152,2084704233,1917518562,1615861247,1851332852,1147550661,1248802510,1484005843,1451044056,933301370,967311729,733156972,632953703,260388950,25965917,328671808,496906059,1206477858,1239443753,1543208500,1441952575,2144161806,1908694277,1675577880,1842759443,3610369226,3644379585,3408119516,3307916247,4011190502,3776767469,4077384432,4245618683,2809771154,2842737049,3144396420,
-3043140495,2673705150,2438237621,2203032232,2370213795]);Ve.prototype={decryptBlock:function(a){var b,c=a.length,d=this.buffer,e=this.bufferPosition;for(b=0;16>e&&b<c;++b,++e)d[e]=a[b];if(16>e)return this.bufferLength=e,new Uint8Array([]);this.iv=d;this.buffer=new Uint8Array(16);this.bufferLength=0;this.decryptBlock=ch;return this.decryptBlock(a.subarray(16))}};var ad=function(a,b){this.stringCipherConstructor=a;this.streamCipherConstructor=b};ad.prototype={createStream:function(a){var b=new this.streamCipherConstructor;
-return new Xe(a,function(a){return b.decryptBlock(a)})},decryptString:function(a){var b=new this.stringCipherConstructor;a=gb(a);a=b.decryptBlock(a);return rc(a)}};var we,Ye=function(a,b,c,d,e,f,g,h){var k=new Uint8Array(100),j=0,l;if(b)for(l=Math.min(32,b.length);j<l;++j)k[j]=b[j];for(b=0;32>j;)k[j++]=kc[b++];b=0;for(l=c.length;b<l;++b)k[j++]=c[b];k[j++]=e&255;k[j++]=e>>8&255;k[j++]=e>>16&255;k[j++]=e>>>24&255;b=0;for(l=a.length;b<l;++b)k[j++]=a[b];4<=f&&!h&&(k[j++]=255,k[j++]=255,k[j++]=255,k[j++]=
-255);l=La(k,0,j);j=g>>3;if(3<=f)for(b=0;50>b;++b)l=La(l,0,j);g=l.subarray(0,j);if(3<=f){for(j=0;32>j;++j)k[j]=kc[j];b=0;for(l=a.length;b<l;++b)k[j++]=a[b];a=new Ea(g);k=a.encryptBlock(La(k,0,j));l=g.length;f=new Uint8Array(l);for(b=1;19>=b;++b){for(a=0;a<l;++a)f[a]=g[a]^b;a=new Ea(f);k=a.encryptBlock(k)}}else a=new Ea(g),k=a.encryptBlock(kc);b=0;for(l=k.length;b<l;++b)if(d[b]!=k[b])return null;return g},$e=function(a,b,c){var d=a.get("Filter");(!E(d)||"Standard"!=d.name)&&s("unknown encryption method");
-this.dict=a;d=a.get("V");(!F(d)||1!=d&&2!=d&&4!=d)&&s("unsupported encryption algorithm");this.algorithm=d;var e=a.get("Length")||40;(!F(e)||40>e||0!=e%8)&&s("invalid key length");var f=gb(a.get("O")),g=gb(a.get("U")),h=a.get("P"),k=a.get("R"),j=4==d&&!1!==a.get("EncryptMetadata");this.encryptMetadata=j;b=gb(b);var l;c&&(l=gb(c));var n=Ye(b,l,f,g,h,k,e,j);if(!n&&!c)throw new Kb("No password given","needpassword");if(!n&&c){c=l;l=new Uint8Array(32);var n=0,p;for(p=Math.min(32,c.length);n<p;++n)l[n]=
-c[n];for(c=0;32>n;)l[n++]=kc[c++];l=La(l,0,n);n=e>>3;if(3<=k)for(c=0;50>c;++c)l=La(l,0,l.length);var m;if(3<=k){p=f;var r=new Uint8Array(n);for(c=19;0<=c;c--){for(m=0;m<n;++m)r[m]=l[m]^c;m=new Ea(r);p=m.encryptBlock(p)}}else m=new Ea(l.subarray(0,n)),p=m.encryptBlock(f);n=Ye(b,p,f,g,h,k,e,j)}if(!n)throw new Kb("Incorrect Password","incorrectpassword");this.encryptionKey=n;4==d&&(this.cf=a.get("CF"),this.stmf=a.get("StmF")||Ze,this.strf=a.get("StrF")||Ze,this.eff=a.get("EFF")||this.strf)},bd=function(a,
-b,c,d){var e=new Uint8Array(c.length+9),f,g;f=0;for(g=c.length;f<g;++f)e[f]=c[f];e[f++]=a&255;e[f++]=a>>8&255;e[f++]=a>>16&255;e[f++]=b&255;e[f++]=b>>8&255;d&&(e[f++]=115,e[f++]=65,e[f++]=108,e[f++]=84);return La(e,0,f).subarray(0,Math.min(c.length+5,16))},af=function(a,b,c,d,e){a=a.get(b.name);var f;null!=a&&(f=a.get("CFM"));if(!f||"None"==f.name)return function(){return new Ue};if("V2"==f.name)return function(){return new Ea(bd(c,d,e,!1))};if("AESV2"==f.name)return function(){return new Ve(bd(c,
-d,e,!0))};s("Unknown crypto method")},kc=new Uint8Array([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]),Ze=new ka("Identity");$e.prototype={createCipherTransform:function(a,b){if(4==this.algorithm)return new ad(af(this.cf,this.stmf,a,b,this.encryptionKey),af(this.cf,this.strf,a,b,this.encryptionKey));var c=bd(a,b,this.encryptionKey,!1),d=function(){return new Ea(c)};return new ad(d,d)}};we=$e;var Lc,cf=function(a,b,c,d){this.state=new bf;
-this.stateStack=[];this.xref=a;this.handler=b;this.pageIndex=c;this.uniquePrefix=d;this.fontIdCounter=this.objIdCounter=0},df={w:{fnName:"setLineWidth",numArgs:1,variableArgs:!1},J:{fnName:"setLineCap",numArgs:1,variableArgs:!1},j:{fnName:"setLineJoin",numArgs:1,variableArgs:!1},M:{fnName:"setMiterLimit",numArgs:1,variableArgs:!1},d:{fnName:"setDash",numArgs:2,variableArgs:!1},ri:{fnName:"setRenderingIntent",numArgs:1,variableArgs:!1},i:{fnName:"setFlatness",numArgs:1,variableArgs:!1},gs:{fnName:"setGState",
-numArgs:1,variableArgs:!1},q:{fnName:"save",numArgs:0,variableArgs:!1},Q:{fnName:"restore",numArgs:0,variableArgs:!1},cm:{fnName:"transform",numArgs:6,variableArgs:!1},m:{fnName:"moveTo",numArgs:2,variableArgs:!1},l:{fnName:"lineTo",numArgs:2,variableArgs:!1},c:{fnName:"curveTo",numArgs:6,variableArgs:!1},v:{fnName:"curveTo2",numArgs:4,variableArgs:!1},y:{fnName:"curveTo3",numArgs:4,variableArgs:!1},h:{fnName:"closePath",numArgs:0,variableArgs:!1},re:{fnName:"rectangle",numArgs:4,variableArgs:!1},
-S:{fnName:"stroke",numArgs:0,variableArgs:!1},s:{fnName:"closeStroke",numArgs:0,variableArgs:!1},f:{fnName:"fill",numArgs:0,variableArgs:!1},F:{fnName:"fill",numArgs:0,variableArgs:!1},"f*":{fnName:"eoFill",numArgs:0,variableArgs:!1},B:{fnName:"fillStroke",numArgs:0,variableArgs:!1},"B*":{fnName:"eoFillStroke",numArgs:0,variableArgs:!1},b:{fnName:"closeFillStroke",numArgs:0,variableArgs:!1},"b*":{fnName:"closeEOFillStroke",numArgs:0,variableArgs:!1},n:{fnName:"endPath",numArgs:0,variableArgs:!1},
-W:{fnName:"clip",numArgs:0,variableArgs:!1},"W*":{fnName:"eoClip",numArgs:0,variableArgs:!1},BT:{fnName:"beginText",numArgs:0,variableArgs:!1},ET:{fnName:"endText",numArgs:0,variableArgs:!1},Tc:{fnName:"setCharSpacing",numArgs:1,variableArgs:!1},Tw:{fnName:"setWordSpacing",numArgs:1,variableArgs:!1},Tz:{fnName:"setHScale",numArgs:1,variableArgs:!1},TL:{fnName:"setLeading",numArgs:1,variableArgs:!1},Tf:{fnName:"setFont",numArgs:2,variableArgs:!1},Tr:{fnName:"setTextRenderingMode",numArgs:1,variableArgs:!1},
-Ts:{fnName:"setTextRise",numArgs:1,variableArgs:!1},Td:{fnName:"moveText",numArgs:2,variableArgs:!1},TD:{fnName:"setLeadingMoveText",numArgs:2,variableArgs:!1},Tm:{fnName:"setTextMatrix",numArgs:6,variableArgs:!1},"T*":{fnName:"nextLine",numArgs:0,variableArgs:!1},Tj:{fnName:"showText",numArgs:1,variableArgs:!1},TJ:{fnName:"showSpacedText",numArgs:1,variableArgs:!1},"'":{fnName:"nextLineShowText",numArgs:1,variableArgs:!1},'"':{fnName:"nextLineSetSpacingShowText",numArgs:3,variableArgs:!1},d0:{fnName:"setCharWidth",
-numArgs:2,variableArgs:!1},d1:{fnName:"setCharWidthAndBounds",numArgs:6,variableArgs:!1},CS:{fnName:"setStrokeColorSpace",numArgs:1,variableArgs:!1},cs:{fnName:"setFillColorSpace",numArgs:1,variableArgs:!1},SC:{fnName:"setStrokeColor",numArgs:4,variableArgs:!0},SCN:{fnName:"setStrokeColorN",numArgs:33,variableArgs:!0},sc:{fnName:"setFillColor",numArgs:4,variableArgs:!0},scn:{fnName:"setFillColorN",numArgs:33,variableArgs:!0},G:{fnName:"setStrokeGray",numArgs:1,variableArgs:!1},g:{fnName:"setFillGray",
-numArgs:1,variableArgs:!1},RG:{fnName:"setStrokeRGBColor",numArgs:3,variableArgs:!1},rg:{fnName:"setFillRGBColor",numArgs:3,variableArgs:!1},K:{fnName:"setStrokeCMYKColor",numArgs:4,variableArgs:!1},k:{fnName:"setFillCMYKColor",numArgs:4,variableArgs:!1},sh:{fnName:"shadingFill",numArgs:1,variableArgs:!1},BI:{fnName:"beginInlineImage",numArgs:0,variableArgs:!1},ID:{fnName:"beginImageData",numArgs:0,variableArgs:!1},EI:{fnName:"endInlineImage",numArgs:0,variableArgs:!1},Do:{fnName:"paintXObject",numArgs:1,
-variableArgs:!1},MP:{fnName:"markPoint",numArgs:1,variableArgs:!1},DP:{fnName:"markPointProps",numArgs:2,variableArgs:!1},BMC:{fnName:"beginMarkedContent",numArgs:1,variableArgs:!1},BDC:{fnName:"beginMarkedContentProps",numArgs:2,variableArgs:!1},EMC:{fnName:"endMarkedContent",numArgs:0,variableArgs:!1},BX:{fnName:"beginCompat",numArgs:0,variableArgs:!1},EX:{fnName:"endCompat",numArgs:0,variableArgs:!1},BM:null,BD:null,"true":null,fa:null,fal:null,fals:null,"false":null,nu:null,nul:null,"null":null};
-cf.prototype={loadFont:function(a,b,c,d,e){var f=d.get("Font");f||s("fontRes not available");++this.fontIdCounter;b=c.fetchIfRef(b)||f.get(a);if(!D(b))return{translated:new rb("Font "+a+" is not available"),loadedName:"g_font_"+this.uniquePrefix+this.fontIdCounter};a=b.loadedName;if(!a){a="g_font_"+this.uniquePrefix+this.fontIdCounter;b.loadedName=a;var g;try{g=this.translateFont(b,c,d,e)}catch(h){g=new rb(h instanceof Error?h.message:h)}c=b.translated=g;if(c.loadCharProcs){delete c.loadCharProcs;
-g=b.get("CharProcs").getAll();d=b.get("Resources")||d;a={};for(var k in g)a[k]=this.getOperatorList(g[k],d,e);c.charProcOperatorList=a}}return b},getOperatorList:function(a,b,c,d){function e(a){p.push("dependency");m.push(a);for(var b=0,d=a.length;b<d;b++)-1==c.indexOf(a[b])&&c.push(a[b])}function f(a,d){d=h.loadFont(a,d,k,b,c);var f=d.loadedName;if(!d.sent){var g=d.translated.exportData();j.send("commonobj",[f,"Font",g]);d.sent=!0}e([f]);return f}function g(a,c){var d=a.dict,f=d.get("Width","W"),
-g=d.get("Height","H");if(d.get("ImageMask","IM")){var f=d.get("Width","W"),g=d.get("Height","H"),m=a.getBytes((f+7>>3)*g),d=d.get("Decode","D"),d=!!d&&0<d[0];z="paintImageMaskXObject";y=[m,d,f,g]}else if(m=d.get("SMask","SM")||!1,d=d.get("Mask")||!1,c&&!m&&!d&&!(a instanceof ub)&&200>f+g)d=(new cd(k,b,a,c,null,null)).getImageData(),z="paintInlineImageXObject",y=[d];else{var p="img_"+n+ ++h.objIdCounter;e([p]);y=[p,f,g];!m&&!d&&a instanceof ub&&a.isNativelySupported(k,b)?(z="paintJpegXObject",j.send("obj",
-[p,l,"JpegStream",a.getIR()])):(z="paintImageXObject",cd.buildImage(function(a){a=a.getImageData();j.send("obj",[p,l,"Image",a])},j,k,b,a,c))}}var h=this,k=this.xref,j=this.handler,l=this.pageIndex,n=this.uniquePrefix||"";d||(d={});d.argsArray||(d.argsArray=[]);d.fnArray||(d.fnArray=[]);var p=d.fnArray,m=d.argsArray,r=c||[];b=b||new Aa;var q=b.get("XObject")||new Aa,A=b.get("Pattern")||new Aa;a=new jb(new ra(a,df),!1,k);for(var t=b,y=[],v;;){v=a.getObj();if(v==J)break;if(H(v)){v=v.cmd;var x=df[v];
-if(x){var z=x.fnName;if(x.variableArgs)y.length>x.numArgs&&aa("Command "+z+": expected [0,"+x.numArgs+"] args, but received "+y.length+" args");else if(y.length<x.numArgs){aa("Command "+z+": because expected "+x.numArgs+" args, but received "+y.length+" args; skipping");y=[];continue}else y.length>x.numArgs&&aa("Command "+z+": expected "+x.numArgs+" args, but received "+y.length+" args");if(("SCN"==v||"scn"==v)&&!y[y.length-1].code){if(v=y[y.length-1],E(v)){var u=A.get(v.name);u&&(v=G(u)?u.dict:u,
-x=v.get("PatternType"),1==x?(x=r.length,u=this.getOperatorList(u,v.get("Resources")||b,r),e(r.slice(x)),y=Vc.getIR(u,v,y)):2==x?(u=v.get("Shading"),x=v.get("Matrix"),u=tb.parseShading(u,x,k,t),y=u.getIR()):s("Unkown PatternType "+x))}}else if("Do"==v&&!y[0].code){if(v=q.get(y[0].name))G(v)||s("XObject should be a stream"),x=v.dict.get("Subtype"),E(x)||s("XObject should have a Name subtype"),"Form"==x.name?(x=v.dict.get("Matrix"),u=v.dict.get("BBox"),p.push("paintFormXObjectBegin"),m.push([x,u]),x=
-r.length,this.getOperatorList(v,v.dict.get("Resources")||b,r,d),e(r.slice(x)),z="paintFormXObjectEnd",y=[]):"Image"==x.name?g(v,!1):s("Unhandled XObject subtype "+x.name)}else"Tf"==v?y[0]=f(y[0].name):"EI"==v&&g(y[0],!0);switch(z){case "setFillColorSpace":case "setStrokeColorSpace":y=[Q.parseToIR(y[0],k,b)];break;case "shadingFill":(v=t.get("Shading"))||s("No shading resource found");(u=v.get(y[0].name))||s("No shading object found");y=[tb.parseShading(u,null,k,t).getIR()];z="shadingFill";break;case "setGState":v=
-y[0];x=b.get("ExtGState");if(!D(x)||!x.has(v.name))break;var w=[];x.get(v.name).forEach(function(a,b){switch(a){case "Type":break;case "LW":case "LC":case "LJ":case "ML":case "D":case "RI":case "FL":case "CA":case "ca":w.push([a,b]);break;case "Font":w.push(["Font",f(null,b[0]),b[1]]);break;case "BM":(!E(b)||"Normal"!=b.name)&&ga("graphic state operator "+a);break;case "SMask":(!E(b)||"None"!=b.name)&&ga("graphic state operator "+a);break;case "OP":case "op":case "OPM":case "BG":case "BG2":case "UCR":case "UCR2":case "TR":case "TR2":case "HT":case "SM":case "SA":case "AIS":case "TK":aa("graphic state operator "+
-a);break;default:aa("Unknown graphic state operator "+a)}});y=[w]}p.push(z);m.push(y);y=[]}else R('Unknown command "'+v+'"')}else null!=v&&(y.push(v instanceof Aa?v.getAll():v),33>=y.length||s("Too many arguments"))}return d},optimizeQueue:function(a){var b=a.fnArray;a=a.argsArray;for(var c=0,d=b.length;c<d;c++)if("paintInlineImageXObject"===b[c]&&"save"===b[c-2]&&"transform"===b[c-1]&&"restore"===b[c+1]){for(var e=c-2,c=c+2;c<d&&b[c-4]===b[c];c++);var f=Math.min(c-e>>2,200);if(!(10>f)){for(var g=
-0,d=[],h=0,k=1,j=1,c=0;c<f;c++){var l=a[e+(c<<2)+1],n=a[e+(c<<2)+2][0];1E3<k+n.width&&(g=Math.max(g,k),j+=h+2,h=k=0);d.push({transform:l,x:k,y:j,w:n.width,h:n.height});k+=n.width+2;h=Math.max(h,n.height)}l=Math.max(g,k)+1;h=j+h+1;j=new Uint8Array(4*l*h);g=l<<2;for(c=0;c<f;c++){var k=a[e+(c<<2)+2][0].data,n=d[c].w<<2,p=0,m=d[c].x+d[c].y*l<<2;j.set(k.subarray(0,n),m-g);for(var r=0,q=d[c].h;r<q;r++)j.set(k.subarray(p,p+n),m),p+=n,m+=g;for(j.set(k.subarray(p-n,p),m);0<=m;)k[m-4]=k[m],k[m-3]=k[m+1],k[m-
-2]=k[m+2],k[m-1]=k[m+3],k[m+n]=k[m+n-4],k[m+n+1]=k[m+n-3],k[m+n+2]=k[m+n-2],k[m+n+3]=k[m+n-1],m-=g}b.splice(e,4*f,["paintInlineImageXObjectGroup"]);a.splice(e,4*f,[{width:l,height:h,data:j},d]);c=e;d=b.length}}c=0;for(d=b.length;c<d;c++)if("paintImageMaskXObject"===b[c]&&"save"===b[c-2]&&"transform"===b[c-1]&&"restore"===b[c+1]){e=c-2;for(c+=2;c<d&&b[c-4]===b[c];c++);f=Math.min(c-e>>2,100);if(!(10>f)){d=[];for(c=0;c<f;c++)l=a[e+(c<<2)+1],h=a[e+(c<<2)+2],d.push({data:h[0],width:h[2],height:h[3],transform:l,
-inverseDecode:h[1]});b.splice(e,4*f,["paintImageMaskXObjectGroup"]);a.splice(e,4*f,[d]);c=e;d=b.length}}},getTextContent:function(a,b,c){var d;c?d=c.bidiTexts:(d=[],c={bidiTexts:d});var e=this.xref;b=e.fetchIfRef(b)||new Aa;var f=null;a=new jb(new ra(a),!1);for(var g=[],h,k="",j=null;!Og(h=a.getObj());)if(H(h)){switch(h.cmd){case "Tf":j=this.loadFont(g[0].name,void 0,e,b,null).translated;break;case "TJ":g=g[0];h=0;for(var l=g.length;h<l;h++)if("string"===typeof g[h])k+=Hb(g[h],j);else if(0>g[h]&&
-0<j.spaceWidth){var n=-g[h]/j.spaceWidth;if(1.5<n)for(n=Math.round(n);n--;)k+=" ";else 0.35<n&&(k+=" ")}break;case "Tj":k+=Hb(g[0],j);break;case "'":k+=Hb(g[0],j);break;case '"':k+=Hb(g[2],j);break;case "Do":k="";if(g[0].code)break;f||(f=b.get("XObject")||new Aa);g=f.get(g[0].name);if(!g)break;G(g)||s("XObject should be a stream");h=g.dict.get("Subtype");E(h)||s("XObject should have a Name subtype");if("Form"!==h.name)break;c=this.getTextContent(g,g.dict.get("Resources")||b,c);break;case "gs":h=g[0];
-l=b.get("ExtGState");if(!D(l)||!l.has(h.name))break;h=l.get(h.name);for(l=0;l<h.length;l++)"Font"===h[l]&&(j=this.loadFont(g[0].name,void 0,e,b,null).translated)}""!==k&&(d.push(PDFJS.bidi(k,-1)),k="");g=[]}else null!=h&&(33>=g.length||s("Too many arguments"),g.push(h));return c},extractDataStructures:function(a,b,c,d){var e=a.get("ToUnicode")||b.get("ToUnicode");e&&(d.toUnicode=this.readToUnicode(e,c,d));d.composite&&(c=a.get("CIDSystemInfo"),D(c)&&(d.cidSystemInfo={registry:c.get("Registry"),ordering:c.get("Ordering"),
-supplement:c.get("Supplement")}),b=b.get("Encoding"),E(b)&&(d.cidEncoding=b.name),b=a.get("CIDToGIDMap"),G(b)&&(d.cidToGidMap=this.readCidToGidMap(b)));b=[];c=ab.StandardEncoding;d.flags&Fa.Symbolic&&(c=!d.file?ab.symbolsEncoding:ab.MacRomanEncoding);if(e=a.has("Encoding"))if(a=a.get("Encoding"),D(a)){var f=a.get("BaseEncoding");f?c=ab[f.name]:e=!1;if(a.has("Differences")){a=a.get("Differences");for(var g=f=0,h=a.length;g<h;g++){var k=a[g];oa(k)?f=k:b[f++]=k.name}}}else E(a)?c=ab[a.name]:s("Encoding is not a Name nor a Dict");
-d.differences=b;d.baseEncoding=c;d.hasEncoding=e},readToUnicode:function(a,b,c){b=[];if(E(a))"Identity-"!=a.name.substr(0,9)&&s("ToUnicode file cmap translation not implemented");else if(G(a)){var d=[],e="",f={};a=a.getBytes(a.length);for(var g=0,h=a.length;g<h;g++){var k=a[g];if(32==k||13==k||10==k||60==k||91==k||93==k){switch(e){case "usecmap":s("usecmap is not implemented");break;case "beginbfchar":case "beginbfrange":case "begincidchar":case "begincidrange":e="";d=[];break;case "endcidrange":case "endbfrange":for(var j=
-0,l=d.length;j<l;j+=3){var n=d[j],p=d[j+1],m=d[j+2];65535==m&&(m=n);if(I(m))for(var r=0;n<=p;)b[n]=m[r++],++n;else for(;n<=p;)b[n]=m++,++n}break;case "endcidchar":case "endbfchar":j=0;for(l=d.length;j<l;j+=2)n=d[j],m=d[j+1],b[n]=m;break;case "":break;default:"0"<=e[0]&&"9">=e[0]&&(e=parseInt(e,10)),d.push(e),e=""}switch(k){case 91:d.push(f);break;case 93:for(var k=[],q;d.length&&(q=d.pop())!=f;)k.unshift(q);d.push(k)}}else if(62==k){if(e.length){2==e.length&&c.composite&&(c.wideChars=!1);if(4>=e.length)d.push(parseInt(e,
-16));else{k=[];j=0;for(l=e.length;j<l;j+=4){m=parseInt(e.substr(j,4),16);if(16>=m){j+=4;m=m<<16|parseInt(e.substr(j,4),16);m-=65536;k.push(55296|m>>10);k.push(56320|m&1023);break}k.push(m)}d.push(String.fromCharCode.apply(String,k))}e=""}}else e+=String.fromCharCode(k)}}return b},readCidToGidMap:function(a){a=a.getBytes();for(var b=[],c=0,d=a.length;c<d;c++){var e=a[c++]<<8|a[c];0!=e&&(b[c>>1]=e)}return b},extractWidths:function(a,b,c,d){var e=[],f=0;if(d.composite){var f=a.get("DW")||1E3,g=a.get("W");
-if(g){a=c=0;for(var h=g.length;a<h;a++){var k=b.fetchIfRef(g[a]);if(I(k)){for(var j=0,l=k.length;j<l;j++)e[c++]=k[j];c=0}else if(c){l=g[++a];for(j=c;j<=k;j++)e[j]=l;c=0}else c=k}}}else if(b=d.firstChar,g=a.get("Widths")){j=b;a=0;for(h=g.length;a<h;a++)e[j++]=g[a];f=parseFloat(c.get("MissingWidth"))||0}else g=a.get("BaseFont"),E(g)&&(f=this.getBaseFontMetrics(g.name),e=f.widths,f=f.defaultWidth);g=!0;b=f;for(var n in e)if(a=e[n])if(b){if(b!=a){g=!1;break}}else b=a;g&&(d.flags|=Fa.FixedPitch);d.defaultWidth=
-f;d.widths=e},isSerifFont:function(a){a=a.split("-")[0];return a in dh||-1!==a.search(/serif/gi)},getBaseFontMetrics:function(a){var b=0,c=[],d=!1,e=ef[a]||a;e in ff||(e=this.isSerifFont(a)?"Times-Roman":"Helvetica");a=ff[e];oa(a)?(b=a,d=!0):c=a;return{defaultWidth:b,monospace:d,widths:c}},translateFont:function(a,b){var c=a,d=a.get("Subtype");E(d)||s("invalid font Subtype");var e=!1;"Type0"==d.name&&((d=a.get("DescendantFonts"))||s("Descendant fonts are not specified"),a=I(d)?b.fetchIfRef(d[0]):
-d,d=a.get("Subtype"),E(d)||s("invalid font Subtype"),e=!0);var f=e?65535:255,g=a.get("FontDescriptor");if(!g)if("Type3"==d.name)g=new Aa,g.set("FontName",new ka(d.name));else{c=a.get("BaseFont");E(c)||s("Base font is not specified");var c=c.name.replace(/[,_]/g,"-"),g=this.getBaseFontMetrics(c),h=c.split("-")[0],h=(this.isSerifFont(h)?Fa.Serif:0)|(g.monospace?Fa.FixedPitch:0)|(eh[h]?Fa.Symbolic:Fa.Nonsymbolic),f={type:d.name,widths:g.widths,defaultWidth:g.defaultWidth,flags:h,firstChar:0,lastChar:f};
-this.extractDataStructures(a,a,b,f);return new sb(c,null,f)}var k=a.get("FirstChar")||0,j=a.get("LastChar")||f,h=g.get("FontName"),l=c.get("BaseFont");Y(h)&&(h=new ka(h));Y(l)&&(l=new ka(l));var n=h&&h.name,p=l&&l.name;n!==p&&R("The FontDescriptor's FontName is \""+n+'" but should be the same as the Font\'s BaseFont "'+p+'"');h=h||l;E(h)||s("invalid font name");if((l=g.get("FontFile","FontFile2","FontFile3"))&&l.dict){var m=l.dict.get("Subtype");m&&(m=m.name);var r=l.dict.get("Length1"),q=l.dict.get("Length2")}f=
-{type:d.name,subtype:m,file:l,length1:r,length2:q,loadedName:c.loadedName,composite:e,wideChars:e,fixedPitch:!1,fontMatrix:a.get("FontMatrix")||Da,firstChar:k||0,lastChar:j||f,bbox:g.get("FontBBox"),ascent:g.get("Ascent"),descent:g.get("Descent"),xHeight:g.get("XHeight"),capHeight:g.get("CapHeight"),flags:g.get("Flags"),italicAngle:g.get("ItalicAngle"),coded:!1};this.extractWidths(a,b,g,f);this.extractDataStructures(a,c,b,f);"Type3"===d.name&&(f.coded=!0);return new sb(h.name,l,f)}};Lc=cf;var bf,
-gf=function(){this.alphaIsShape=!1;this.fontSize=0;this.textMatrix=Sc;this.wordSpacing=this.charSpacing=this.lineY=this.lineX=this.leading=0;this.textHScale=1;this.strokeColorSpace=this.fillColorSpace=null};gf.prototype={};bf=gf;var hb=57344,Jc=6400,hf=61440,dd=!1,Da=[0.0010,0,0,0.0010,0,0],Fa={FixedPitch:1,Serif:2,Symbolic:4,Script:8,Nonsymbolic:32,Italic:64,AllCap:65536,SmallCap:131072,ForceBold:262144},ab={ExpertEncoding:"                                space exclamsmall Hungarumlautsmall  dollaroldstyle dollarsuperior ampersandsmall Acutesmall parenleftsuperior parenrightsuperior twodotenleader onedotenleader comma hyphen period fraction zerooldstyle oneoldstyle twooldstyle threeoldstyle fouroldstyle fiveoldstyle sixoldstyle sevenoldstyle eightoldstyle nineoldstyle colon semicolon commasuperior threequartersemdash periodsuperior questionsmall  asuperior bsuperior centsuperior dsuperior esuperior   isuperior   lsuperior msuperior nsuperior osuperior   rsuperior ssuperior 
 tsuperior  ff fi fl ffi ffl parenleftinferior  parenrightinferior Circumflexsmall hyphensuperior Gravesmall Asmall Bsmall Csmall Dsmall Esmall Fsmall Gsmall Hsmall Ismall Jsmall Ksmall Lsmall Msmall Nsmall Osmall Psmall Qsmall Rsmall Ssmall Tsmall Usmall Vsmall Wsmall Xsmall Ysmall Zsmall colonmonetary onefitted rupiah Tildesmall                                   exclamdownsmall centoldstyle Lslashsmall   Scaronsmall Zcaronsmall Dieresissmall Brevesmall Caronsmall  Dotaccentsmall   Macronsmall   figuredash hypheninferior   Ogoneksmall Ringsmall Cedillasmall    onequarter onehalf threequarters questiondownsmall oneeighth threeeighths fiveeighths seveneighths onethird twothirds   zerosuperior onesuperior twosuperior threesuperior foursuperior fivesuperior sixsuperior sevensuperior eightsuperior ninesuperior zeroinferior oneinferior twoinferior threeinferior fourinferior fiveinferior sixinferior seveninferior eightinferior nineinferior centinferior dollarinferior periodinferior
  commainferior Agravesmall Aacutesmall Acircumflexsmall Atildesmall Adieresissmall Aringsmall AEsmall Ccedillasmall Egravesmall Eacutesmall Ecircumflexsmall Edieresissmall Igravesmall Iacutesmall Icircumflexsmall Idieresissmall Ethsmall Ntildesmall Ogravesmall Oacutesmall Ocircumflexsmall Otildesmall Odieresissmall OEsmall Oslashsmall Ugravesmall Uacutesmall Ucircumflexsmall Udieresissmall Yacutesmall Thornsmall Ydieresissmall".split(" "),
-MacExpertEncoding:"                                space exclamsmall Hungarumlautsmall centoldstyle dollaroldstyle dollarsuperior ampersandsmall Acutesmall parenleftsuperior parenrightsuperior twodotenleader onedotenleader comma hyphen period fraction zerooldstyle oneoldstyle twooldstyle threeoldstyle fouroldstyle fiveoldstyle sixoldstyle sevenoldstyle eightoldstyle nineoldstyle colon semicolon  threequartersemdash  questionsmall     Ethsmall   onequarter onehalf threequarters oneeighth threeeighths fiveeighths seveneighths onethird twothirds       ff fi fl ffi ffl parenleftinferior  parenrightinferior Circumflexsmall hypheninferior Gravesmall Asmall Bsmall Csmall Dsmall Esmall Fsmall Gsmall Hsmall Ismall Jsmall Ksmall Lsmall Msmall Nsmall Osmall Psmall Qsmall Rsmall Ssmall Tsmall Usmall Vsmall Wsmall Xsmall Ysmall Zsmall colonmonetary onefitted rupiah Tildesmall   asuperior centsuperior     Aacutesmall Agravesmall Acircumflexsmall Adieresissmall Atildesmall Aringsmall Ccedi
 llasmall Eacutesmall Egravesmall Ecircumflexsmall Edieresissmall Iacutesmall Igravesmall Icircumflexsmall Idieresissmall Ntildesmall Oacutesmall Ogravesmall Ocircumflexsmall Odieresissmall Otildesmall Uacutesmall Ugravesmall Ucircumflexsmall Udieresissmall  eightsuperior fourinferior threeinferior sixinferior eightinferior seveninferior Scaronsmall  centinferior twoinferior  Dieresissmall  Caronsmall osuperior fiveinferior  commainferior periodinferior Yacutesmall  dollarinferior  Thornsmall  nineinferior zeroinferior Zcaronsmall AEsmall Oslashsmall questiondownsmall oneinferior Lslashsmall       Cedillasmall      OEsmall figuredash hyphensuperior     exclamdownsmall  Ydieresissmall  onesuperior twosuperior threesuperior foursuperior fivesuperior sixsuperior sevensuperior ninesuperior zerosuperior  esuperior rsuperior tsuperior   isuperior ssuperior dsuperior      lsuperior Ogoneksmall Brevesmall Macronsmall bsuperior nsuperior msuperior commasuperior periodsuperior Dotaccen
 tsmall Ringsmall".split(" "),
-MacRomanEncoding:"                                space exclam quotedbl numbersign dollar percent ampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash zero one two three four five six seven eight nine colon semicolon less equal greater question at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z bracketleft backslash bracketright asciicircum underscore grave a b c d e f g h i j k l m n o p q r s t u v w x y z braceleft bar braceright asciitilde  Adieresis Aring Ccedilla Eacute Ntilde Odieresis Udieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave ecircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve ocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent sterling section bullet paragraph germandbls registered copyright trademark acute dieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu partialdiff summation product pi integral ordfeminine
  ordmasculine Omega ae oslash questiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft guillemotright ellipsis  Agrave Atilde Otilde OE oe endash emdash quotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis fraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered quotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis Egrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute Ucircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla hungarumlaut ogonek caron".split(" "),
-StandardEncoding:"                                space exclam quotedbl numbersign dollar percent ampersand quoteright parenleft parenright asterisk plus comma hyphen period slash zero one two three four five six seven eight nine colon semicolon less equal greater question at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z bracketleft backslash bracketright asciicircum underscore quoteleft a b c d e f g h i j k l m n o p q r s t u v w x y z braceleft bar braceright asciitilde                                   exclamdown cent sterling fraction yen florin section currency quotesingle quotedblleft guillemotleft guilsinglleft guilsinglright fi fl  endash dagger daggerdbl periodcentered  paragraph bullet quotesinglbase quotedblbase quotedblright guillemotright ellipsis perthousand  questiondown  grave acute circumflex tilde macron breve dotaccent dieresis  ring cedilla  hungarumlaut ogonek caron emdash                 AE  ordfeminine     Lslash Oslash OE ordmasculine      ae 
    dotlessi   lslash oslash oe germandbls".split(" "),
-WinAnsiEncoding:"                                space exclam quotedbl numbersign dollar percent ampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash zero one two three four five six seven eight nine colon semicolon less equal greater question at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z bracketleft backslash bracketright asciicircum underscore grave a b c d e f g h i j k l m n o p q r s t u v w x y z braceleft bar braceright asciitilde bullet Euro bullet quotesinglbase florin quotedblbase ellipsis dagger daggerdbl circumflex perthousand Scaron guilsinglleft OE bullet Zcaron bullet bullet quoteleft quoteright quotedblleft quotedblright bullet endash emdash tilde trademark scaron guilsinglright oe bullet zcaron Ydieresis  exclamdown cent sterling currency yen brokenbar section dieresis copyright ordfeminine guillemotleft logicalnot hyphen registered macron degree plusminus twosuperior threesuperior acute mu paragraph periodcentered cedi
 lla onesuperior ordmasculine guillemotright onequarter onehalf threequarters questiondown Agrave Aacute Acircumflex Atilde Adieresis Aring AE Ccedilla Egrave Eacute Ecircumflex Edieresis Igrave Iacute Icircumflex Idieresis Eth Ntilde Ograve Oacute Ocircumflex Otilde Odieresis multiply Oslash Ugrave Uacute Ucircumflex Udieresis Yacute Thorn germandbls agrave aacute acircumflex atilde adieresis aring ae ccedilla egrave eacute ecircumflex edieresis igrave iacute icircumflex idieresis eth ntilde ograve oacute ocircumflex otilde odieresis divide oslash ugrave uacute ucircumflex udieresis yacute thorn ydieresis".split(" "),
-symbolsEncoding:"                                space exclam universal numbersign existential percent ampersand suchthat parenleft parenright asteriskmath plus comma minus period slash zero one two three four five six seven eight nine colon semicolon less equal greater question congruent Alpha Beta Chi Delta Epsilon Phi Gamma Eta Iota theta1 Kappa Lambda Mu Nu Omicron Pi Theta Rho Sigma Tau Upsilon sigma1 Omega Xi Psi Zeta bracketleft therefore bracketright perpendicular underscore radicalex alpha beta chi delta epsilon phi gamma eta iota phi1 kappa lambda mu nu omicron pi theta rho sigma tau upsilon omega1 omega xi psi zeta braceleft bar braceright similar                                  Euro Upsilon1 minute lessequal fraction infinity florin club diamond heart spade arrowboth arrowleft arrowup arrowright arrowdown degree plusminus second greaterequal multiply proportional partialdiff bullet divide notequal equivalence approxequal ellipsis arrowvertex arrowhorizex carriag
 ereturn aleph Ifraktur Rfraktur weierstrass circlemultiply circleplus emptyset intersection union propersuperset reflexsuperset notsubset propersubset reflexsubset element notelement angle gradient registerserif copyrightserif trademarkserif product radical dotmath logicalnot logicaland logicalor arrowdblboth arrowdblleft arrowdblup arrowdblright arrowdbldown lozenge angleleft registersans copyrightsans trademarksans summation parenlefttp parenleftex parenleftbt bracketlefttp bracketleftex bracketleftbt bracelefttp braceleftmid braceleftbt braceex  angleright integral integraltp integralex integralbt parenrighttp parenrightex parenrightbt bracketrighttp bracketrightex bracketrightbt bracerighttp bracerightmid bracerightbt".split(" "),
-zapfDingbatsEncoding:"                                space a1 a2 a202 a3 a4 a5 a119 a118 a117 a11 a12 a13 a14 a15 a16 a105 a17 a18 a19 a20 a21 a22 a23 a24 a25 a26 a27 a28 a6 a7 a8 a9 a10 a29 a30 a31 a32 a33 a34 a35 a36 a37 a38 a39 a40 a41 a42 a43 a44 a45 a46 a47 a48 a49 a50 a51 a52 a53 a54 a55 a56 a57 a58 a59 a60 a61 a62 a63 a64 a65 a66 a67 a68 a69 a70 a71 a72 a73 a74 a203 a75 a204 a76 a77 a78 a79 a81 a82 a83 a84 a97 a98 a99 a100                                   a101 a102 a103 a104 a106 a107 a108 a112 a111 a110 a109 a120 a121 a122 a123 a124 a125 a126 a127 a128 a129 a130 a131 a132 a133 a134 a135 a136 a137 a138 a139 a140 a141 a142 a143 a144 a145 a146 a147 a148 a149 a150 a151 a152 a153 a154 a155 a156 a157 a158 a159 a160 a161 a163 a164 a196 a165 a192 a166 a167 a168 a169 a170 a171 a172 a173 a162 a174 a175 a176 a177 a178 a179 a193 a180 a199 a181 a200 a182  a201 a183 a184 a197 a185 a194 a198 a186 a195 a187 a188 a189 a190 a191".split(" ")},
-ef={ArialNarrow:"Helvetica","ArialNarrow-Bold":"Helvetica-Bold","ArialNarrow-BoldItalic":"Helvetica-BoldOblique","ArialNarrow-Italic":"Helvetica-Oblique",ArialBlack:"Helvetica","ArialBlack-Bold":"Helvetica-Bold","ArialBlack-BoldItalic":"Helvetica-BoldOblique","ArialBlack-Italic":"Helvetica-Oblique",Arial:"Helvetica","Arial-Bold":"Helvetica-Bold","Arial-BoldItalic":"Helvetica-BoldOblique","Arial-Italic":"Helvetica-Oblique","Arial-BoldItalicMT":"Helvetica-BoldOblique","Arial-BoldMT":"Helvetica-Bold",
-"Arial-ItalicMT":"Helvetica-Oblique",ArialMT:"Helvetica","Courier-Bold":"Courier-Bold","Courier-BoldItalic":"Courier-BoldOblique","Courier-Italic":"Courier-Oblique",CourierNew:"Courier","CourierNew-Bold":"Courier-Bold","CourierNew-BoldItalic":"Courier-BoldOblique","CourierNew-Italic":"Courier-Oblique","CourierNewPS-BoldItalicMT":"Courier-BoldOblique","CourierNewPS-BoldMT":"Courier-Bold","CourierNewPS-ItalicMT":"Courier-Oblique",CourierNewPSMT:"Courier","Helvetica-Bold":"Helvetica-Bold","Helvetica-BoldItalic":"Helvetica-BoldOblique",
-"Helvetica-Italic":"Helvetica-Oblique","Symbol-Bold":"Symbol","Symbol-BoldItalic":"Symbol","Symbol-Italic":"Symbol",TimesNewRoman:"Times-Roman","TimesNewRoman-Bold":"Times-Bold","TimesNewRoman-BoldItalic":"Times-BoldItalic","TimesNewRoman-Italic":"Times-Italic",TimesNewRomanPS:"Times-Roman","TimesNewRomanPS-Bold":"Times-Bold","TimesNewRomanPS-BoldItalic":"Times-BoldItalic","TimesNewRomanPS-BoldItalicMT":"Times-BoldItalic","TimesNewRomanPS-BoldMT":"Times-Bold","TimesNewRomanPS-Italic":"Times-Italic",
-"TimesNewRomanPS-ItalicMT":"Times-Italic",TimesNewRomanPSMT:"Times-Roman","TimesNewRomanPSMT-Bold":"Times-Bold","TimesNewRomanPSMT-BoldItalic":"Times-BoldItalic","TimesNewRomanPSMT-Italic":"Times-Italic"},fh={ComicSansMS:"Comic Sans MS","ComicSansMS-Bold":"Comic Sans MS-Bold","ComicSansMS-BoldItalic":"Comic Sans MS-BoldItalic","ComicSansMS-Italic":"Comic Sans MS-Italic",LucidaConsole:"Courier","LucidaConsole-Bold":"Courier-Bold","LucidaConsole-BoldItalic":"Courier-BoldOblique","LucidaConsole-Italic":"Courier-Oblique"},
-dh={"Adobe Jenson":!0,"Adobe Text":!0,Albertus:!0,Aldus:!0,Alexandria:!0,Algerian:!0,"American Typewriter":!0,Antiqua:!0,Apex:!0,Arno:!0,Aster:!0,Aurora:!0,Baskerville:!0,Bell:!0,Bembo:!0,"Bembo Schoolbook":!0,Benguiat:!0,"Berkeley Old Style":!0,"Bernhard Modern":!0,"Berthold City":!0,Bodoni:!0,"Bauer Bodoni":!0,"Book Antiqua":!0,Bookman:!0,"Bordeaux Roman":!0,"Californian FB":!0,Calisto:!0,Calvert:!0,Capitals:!0,Cambria:!0,Cartier:!0,Caslon:!0,Catull:!0,Centaur:!0,"Century Old Style":!0,"Century Schoolbook":!0,
-Chaparral:!0,"Charis SIL":!0,Cheltenham:!0,"Cholla Slab":!0,Clarendon:!0,Clearface:!0,Cochin:!0,Colonna:!0,"Computer Modern":!0,"Concrete Roman":!0,Constantia:!0,"Cooper Black":!0,Corona:!0,Ecotype:!0,Egyptienne:!0,Elephant:!0,Excelsior:!0,Fairfield:!0,"FF Scala":!0,Folkard:!0,Footlight:!0,FreeSerif:!0,"Friz Quadrata":!0,Garamond:!0,Gentium:!0,Georgia:!0,Gloucester:!0,"Goudy Old Style":!0,"Goudy Schoolbook":!0,"Goudy Pro Font":!0,Granjon:!0,"Guardian Egyptian":!0,Heather:!0,Hercules:!0,"High Tower Text":!0,
-Hiroshige:!0,"Hoefler Text":!0,"Humana Serif":!0,Imprint:!0,"Ionic No. 5":!0,Janson:!0,Joanna:!0,Korinna:!0,Lexicon:!0,"Liberation Serif":!0,"Linux Libertine":!0,Literaturnaya:!0,Lucida:!0,"Lucida Bright":!0,Melior:!0,Memphis:!0,Miller:!0,Minion:!0,Modern:!0,"Mona Lisa":!0,"Mrs Eaves":!0,"MS Serif":!0,"Museo Slab":!0,"New York":!0,"Nimbus Roman":!0,"NPS Rawlinson Roadway":!0,Palatino:!0,Perpetua:!0,Plantin:!0,"Plantin Schoolbook":!0,Playbill:!0,"Poor Richard":!0,"Rawlinson Roadway":!0,Renault:!0,
-Requiem:!0,Rockwell:!0,Roman:!0,"Rotis Serif":!0,Sabon:!0,Scala:!0,Seagull:!0,Sistina:!0,Souvenir:!0,STIX:!0,"Stone Informal":!0,"Stone Serif":!0,Sylfaen:!0,Times:!0,Trajan:!0,"Trinit\u00e9":!0,"Trump Mediaeval":!0,Utopia:!0,"Vale Type":!0,"Bitstream Vera":!0,"Vera Serif":!0,Versailles:!0,Wanted:!0,Weiss:!0,"Wide Latin":!0,Windsor:!0,XITS:!0},eh={Dingbats:!0,Symbol:!0,ZapfDingbats:!0},jf={H:Td,V:Td,"EUC-H":Ud,"EUC-V":Ud,"90ms-RKSJ-H":Gb,"90ms-RKSJ-V":Gb,"90msp-RKSJ-H":Gb,"90msp-RKSJ-V":Gb},Fb;"undefined"!==
-typeof TextDecoder?Fb=function(a,b){return(new TextDecoder(b)).decode(a)}:"undefined"!==typeof FileReaderSync?Fb=function(a,b){return(new FileReaderSync).readAsText(new Blob([a]),b)}:jf={};var ed;if(Xd)ed=!1;else{var kf=/Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(window.navigator.userAgent);ed=kf&&14<=kf[1]?!0:!1}var Lb={loadingContext:{requests:[],nextRequestId:0},isSyncFontLoadingSupported:ed,bind:function(a,b){!Xd||s("bind() shall be called from main thread");for(var c=[],d=[],e=0,f=a.length;e<f;e++){var g=
-a[e];if(!(g.attached||!1==g.loading)){g.attached=!0;var h=g.bindDOM();h&&(c.push(h),d.push(g))}}e=Lb.queueLoadingCallback(b);0<c.length&&!this.isSyncFontLoadingSupported?Lb.prepareFontLoadEvent(c,d,e):e.complete()},queueLoadingCallback:function(a){var b=Lb.loadingContext,c={id:"pdfjs-font-loading-"+b.nextRequestId++,complete:function(){!c.end||s("completeRequest() cannot be called twice");for(c.end=Date.now();0<b.requests.length&&b.requests[0].end;){var a=b.requests.shift();setTimeout(a.callback,
-0)}},callback:a,started:Date.now()};b.requests.push(c);return c},prepareFontLoadEvent:function(a,b,c){var d=c.id;if(/^[\w\-]+$/.test(d)){for(var e=[],f=0,g=b.length;f<g;f++)e.push(b[f].loadedName);if(/^\w+$/.test(e.join(""))){var h=document.createElement("div");h.setAttribute("style","visibility: hidden;width: 10px; height: 10px;position: absolute; top: 0px; left: 0px;");for(var k="",f=0,g=e.length;f<g;++f)k+='<span style="font-family:'+e[f]+'">Hi</span>';h.innerHTML=k;document.body.appendChild(h);
-window.addEventListener("message",function n(a){if(a.data===d){a=0;for(var e=b.length;a<e;++a)b[a].loading=!1;c.complete();document.body.removeChild(j);window.removeEventListener("message",n,!1)}},!1);h='<!DOCTYPE HTML><html><head><meta charset="utf-8"><style type="text/css">';f=0;for(g=a.length;f<g;++f)h+=a[f];h+='</style><script type="application/javascript">';h+="  window.onload = function fontLoaderOnload() {\n";h+='    parent.postMessage("'+d+'", "*");\n';h+='    window.location = "about:blank";\n';
-h+="  }";h+="\x3c/script></head><body>";f=0;for(g=e.length;f<g;++f)h+="<p style=\"font-family:'"+e[f]+"'\">Hi</p>";var h=h+"</body></html>",j=document.createElement("iframe");j.src="data:text/html,"+h;j.setAttribute("style","visibility: hidden;width: 10px; height: 10px;position: absolute; top: 0px; left: 0px;");document.body.appendChild(j)}else s("Invalid font name(s): "+e.join())}else s("Invalid request id: "+d)}},qb=[{begin:0,end:127},{begin:128,end:255},{begin:256,end:383},{begin:384,end:591},
-{begin:592,end:687},{begin:688,end:767},{begin:768,end:879},{begin:880,end:1023},{begin:11392,end:11519},{begin:1024,end:1279},{begin:1328,end:1423},{begin:1424,end:1535},{begin:42240,end:42559},{begin:1536,end:1791},{begin:1984,end:2047},{begin:2304,end:2431},{begin:2432,end:2559},{begin:2560,end:2687},{begin:2688,end:2815},{begin:2816,end:2943},{begin:2944,end:3071},{begin:3072,end:3199},{begin:3200,end:3327},{begin:3328,end:3455},{begin:3584,end:3711},{begin:3712,end:3839},{begin:4256,end:4351},
-{begin:6912,end:7039},{begin:4352,end:4607},{begin:7680,end:7935},{begin:7936,end:8191},{begin:8192,end:8303},{begin:8304,end:8351},{begin:8352,end:8399},{begin:8400,end:8447},{begin:8448,end:8527},{begin:8528,end:8591},{begin:8592,end:8703},{begin:8704,end:8959},{begin:8960,end:9215},{begin:9216,end:9279},{begin:9280,end:9311},{begin:9312,end:9471},{begin:9472,end:9599},{begin:9600,end:9631},{begin:9632,end:9727},{begin:9728,end:9983},{begin:9984,end:10175},{begin:12288,end:12351},{begin:12352,end:12447},
-{begin:12448,end:12543},{begin:12544,end:12591},{begin:12592,end:12687},{begin:43072,end:43135},{begin:12800,end:13055},{begin:13056,end:13311},{begin:44032,end:55215},{begin:55296,end:57343},{begin:67840,end:67871},{begin:19968,end:40959},{begin:57344,end:63743},{begin:12736,end:12783},{begin:64256,end:64335},{begin:64336,end:65023},{begin:65056,end:65071},{begin:65040,end:65055},{begin:65104,end:65135},{begin:65136,end:65279},{begin:65280,end:65519},{begin:65520,end:65535},{begin:3840,end:4095},
-{begin:1792,end:1871},{begin:1920,end:1983},{begin:3456,end:3583},{begin:4096,end:4255},{begin:4608,end:4991},{begin:5024,end:5119},{begin:5120,end:5759},{begin:5760,end:5791},{begin:5792,end:5887},{begin:6016,end:6143},{begin:6144,end:6319},{begin:10240,end:10495},{begin:40960,end:42127},{begin:5888,end:5919},{begin:66304,end:66351},{begin:66352,end:66383},{begin:66560,end:66639},{begin:118784,end:119039},{begin:119808,end:120831},{begin:1044480,end:1048573},{begin:65024,end:65039},{begin:917504,
-end:917631},{begin:6400,end:6479},{begin:6480,end:6527},{begin:6528,end:6623},{begin:6656,end:6687},{begin:11264,end:11359},{begin:11568,end:11647},{begin:19904,end:19967},{begin:43008,end:43055},{begin:65536,end:65663},{begin:65856,end:65935},{begin:66432,end:66463},{begin:66464,end:66527},{begin:66640,end:66687},{begin:66688,end:66735},{begin:67584,end:67647},{begin:68096,end:68191},{begin:119552,end:119647},{begin:73728,end:74751},{begin:119648,end:119679},{begin:7040,end:7103},{begin:7168,end:7247},
-{begin:7248,end:7295},{begin:43136,end:43231},{begin:43264,end:43311},{begin:43312,end:43359},{begin:43520,end:43615},{begin:65936,end:65999},{begin:66E3,end:66047},{begin:66208,end:66271},{begin:127024,end:127135}],lf=".notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent ampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash zero one two three four five six seven eight nine colon semicolon less equal greater question at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z bracketleft backslash bracketright asciicircum underscore grave a b c d e f g h i j k l m n o p q r s t u v w x y z braceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis Udieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave ecircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve ocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent sterling sec
 tion bullet paragraph germandbls registered copyright trademark acute dieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu partialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash questiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft guillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash quotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis fraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered quotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis Egrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute Ucircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla hungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth eth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior onehalf onequarter threeq
 uarters franc Gbreve gbreve Idotaccent Scedilla scedilla Cacute cacute Ccaron ccaron dcroat".split(" "),
-Wd={"\u00a8":" \u0308","\u00af":" \u0304","\u00b4":" \u0301","\u00b5":"\u03bc","\u00b8":" \u0327","\u0132":"IJ","\u0133":"ij","\u013f":"L\u00b7","\u0140":"l\u00b7","\u0149":"\u02bcn","\u017f":"s","\u01c4":"D\u017d","\u01c5":"D\u017e","\u01c6":"d\u017e","\u01c7":"LJ","\u01c8":"Lj","\u01c9":"lj","\u01ca":"NJ","\u01cb":"Nj","\u01cc":"nj","\u01f1":"DZ","\u01f2":"Dz","\u01f3":"dz","\u02d8":" \u0306","\u02d9":" \u0307","\u02da":" \u030a","\u02db":" \u0328","\u02dc":" \u0303","\u02dd":" \u030b","\u037a":" \u0345",
-"\u0384":" \u0301","\u03d0":"\u03b2","\u03d1":"\u03b8","\u03d2":"\u03a5","\u03d5":"\u03c6","\u03d6":"\u03c0","\u03f0":"\u03ba","\u03f1":"\u03c1","\u03f2":"\u03c2","\u03f4":"\u0398","\u03f5":"\u03b5","\u03f9":"\u03a3","\u0587":"\u0565\u0582","\u0675":"\u0627\u0674","\u0676":"\u0648\u0674","\u0677":"\u06c7\u0674","\u0678":"\u064a\u0674","\u0e33":"\u0e4d\u0e32","\u0eb3":"\u0ecd\u0eb2","\u0edc":"\u0eab\u0e99","\u0edd":"\u0eab\u0ea1","\u0f77":"\u0fb2\u0f81","\u0f79":"\u0fb3\u0f81","\u1e9a":"a\u02be","\u1fbd":" \u0313",
-"\u1fbf":" \u0313","\u1fc0":" \u0342","\u1ffe":" \u0314","\u2002":" ","\u2003":" ","\u2004":" ","\u2005":" ","\u2006":" ","\u2008":" ","\u2009":" ","\u200a":" ","\u2017":" \u0333","\u2024":".","\u2025":"..","\u2026":"...","\u2033":"\u2032\u2032","\u2034":"\u2032\u2032\u2032","\u2036":"\u2035\u2035","\u2037":"\u2035\u2035\u2035","\u203c":"!!","\u203e":" \u0305","\u2047":"??","\u2048":"?!","\u2049":"!?","\u2057":"\u2032\u2032\u2032\u2032","\u205f":" ","\u20a8":"Rs","\u2100":"a/c","\u2101":"a/s","\u2103":"\u00b0C",
-"\u2105":"c/o","\u2106":"c/u","\u2107":"\u0190","\u2109":"\u00b0F","\u2116":"No","\u2121":"TEL","\u2135":"\u05d0","\u2136":"\u05d1","\u2137":"\u05d2","\u2138":"\u05d3","\u213b":"FAX","\u2160":"I","\u2161":"II","\u2162":"III","\u2163":"IV","\u2164":"V","\u2165":"VI","\u2166":"VII","\u2167":"VIII","\u2168":"IX","\u2169":"X","\u216a":"XI","\u216b":"XII","\u216c":"L","\u216d":"C","\u216e":"D","\u216f":"M","\u2170":"i","\u2171":"ii","\u2172":"iii","\u2173":"iv","\u2174":"v","\u2175":"vi","\u2176":"vii",
-"\u2177":"viii","\u2178":"ix","\u2179":"x","\u217a":"xi","\u217b":"xii","\u217c":"l","\u217d":"c","\u217e":"d","\u217f":"m","\u222c":"\u222b\u222b","\u222d":"\u222b\u222b\u222b","\u222f":"\u222e\u222e","\u2230":"\u222e\u222e\u222e","\u2474":"(1)","\u2475":"(2)","\u2476":"(3)","\u2477":"(4)","\u2478":"(5)","\u2479":"(6)","\u247a":"(7)","\u247b":"(8)","\u247c":"(9)","\u247d":"(10)","\u247e":"(11)","\u247f":"(12)","\u2480":"(13)","\u2481":"(14)","\u2482":"(15)","\u2483":"(16)","\u2484":"(17)","\u2485":"(18)",
-"\u2486":"(19)","\u2487":"(20)","\u2488":"1.","\u2489":"2.","\u248a":"3.","\u248b":"4.","\u248c":"5.","\u248d":"6.","\u248e":"7.","\u248f":"8.","\u2490":"9.","\u2491":"10.","\u2492":"11.","\u2493":"12.","\u2494":"13.","\u2495":"14.","\u2496":"15.","\u2497":"16.","\u2498":"17.","\u2499":"18.","\u249a":"19.","\u249b":"20.","\u249c":"(a)","\u249d":"(b)","\u249e":"(c)","\u249f":"(d)","\u24a0":"(e)","\u24a1":"(f)","\u24a2":"(g)","\u24a3":"(h)","\u24a4":"(i)","\u24a5":"(j)","\u24a6":"(k)","\u24a7":"(l)",
-"\u24a8":"(m)","\u24a9":"(n)","\u24aa":"(o)","\u24ab":"(p)","\u24ac":"(q)","\u24ad":"(r)","\u24ae":"(s)","\u24af":"(t)","\u24b0":"(u)","\u24b1":"(v)","\u24b2":"(w)","\u24b3":"(x)","\u24b4":"(y)","\u24b5":"(z)","\u2a0c":"\u222b\u222b\u222b\u222b","\u2a74":"::=","\u2a75":"==","\u2a76":"===","\u2e9f":"\u6bcd","\u2ef3":"\u9f9f","\u2f00":"\u4e00","\u2f01":"\u4e28","\u2f02":"\u4e36","\u2f03":"\u4e3f","\u2f04":"\u4e59","\u2f05":"\u4e85","\u2f06":"\u4e8c","\u2f07":"\u4ea0","\u2f08":"\u4eba","\u2f09":"\u513f",
-"\u2f0a":"\u5165","\u2f0b":"\u516b","\u2f0c":"\u5182","\u2f0d":"\u5196","\u2f0e":"\u51ab","\u2f0f":"\u51e0","\u2f10":"\u51f5","\u2f11":"\u5200","\u2f12":"\u529b","\u2f13":"\u52f9","\u2f14":"\u5315","\u2f15":"\u531a","\u2f16":"\u5338","\u2f17":"\u5341","\u2f18":"\u535c","\u2f19":"\u5369","\u2f1a":"\u5382","\u2f1b":"\u53b6","\u2f1c":"\u53c8","\u2f1d":"\u53e3","\u2f1e":"\u56d7","\u2f1f":"\u571f","\u2f20":"\u58eb","\u2f21":"\u5902","\u2f22":"\u590a","\u2f23":"\u5915","\u2f24":"\u5927","\u2f25":"\u5973",
-"\u2f26":"\u5b50","\u2f27":"\u5b80","\u2f28":"\u5bf8","\u2f29":"\u5c0f","\u2f2a":"\u5c22","\u2f2b":"\u5c38","\u2f2c":"\u5c6e","\u2f2d":"\u5c71","\u2f2e":"\u5ddb","\u2f2f":"\u5de5","\u2f30":"\u5df1","\u2f31":"\u5dfe","\u2f32":"\u5e72","\u2f33":"\u5e7a","\u2f34":"\u5e7f","\u2f35":"\u5ef4","\u2f36":"\u5efe","\u2f37":"\u5f0b","\u2f38":"\u5f13","\u2f39":"\u5f50","\u2f3a":"\u5f61","\u2f3b":"\u5f73","\u2f3c":"\u5fc3","\u2f3d":"\u6208","\u2f3e":"\u6236","\u2f3f":"\u624b","\u2f40":"\u652f","\u2f41":"\u6534",
-"\u2f42":"\u6587","\u2f43":"\u6597","\u2f44":"\u65a4","\u2f45":"\u65b9","\u2f46":"\u65e0","\u2f47":"\u65e5","\u2f48":"\u66f0","\u2f49":"\u6708","\u2f4a":"\u6728","\u2f4b":"\u6b20","\u2f4c":"\u6b62","\u2f4d":"\u6b79","\u2f4e":"\u6bb3","\u2f4f":"\u6bcb","\u2f50":"\u6bd4","\u2f51":"\u6bdb","\u2f52":"\u6c0f","\u2f53":"\u6c14","\u2f54":"\u6c34","\u2f55":"\u706b","\u2f56":"\u722a","\u2f57":"\u7236","\u2f58":"\u723b","\u2f59":"\u723f","\u2f5a":"\u7247","\u2f5b":"\u7259","\u2f5c":"\u725b","\u2f5d":"\u72ac",
-"\u2f5e":"\u7384","\u2f5f":"\u7389","\u2f60":"\u74dc","\u2f61":"\u74e6","\u2f62":"\u7518","\u2f63":"\u751f","\u2f64":"\u7528","\u2f65":"\u7530","\u2f66":"\u758b","\u2f67":"\u7592","\u2f68":"\u7676","\u2f69":"\u767d","\u2f6a":"\u76ae","\u2f6b":"\u76bf","\u2f6c":"\u76ee","\u2f6d":"\u77db","\u2f6e":"\u77e2","\u2f6f":"\u77f3","\u2f70":"\u793a","\u2f71":"\u79b8","\u2f72":"\u79be","\u2f73":"\u7a74","\u2f74":"\u7acb","\u2f75":"\u7af9","\u2f76":"\u7c73","\u2f77":"\u7cf8","\u2f78":"\u7f36","\u2f79":"\u7f51",
-"\u2f7a":"\u7f8a","\u2f7b":"\u7fbd","\u2f7c":"\u8001","\u2f7d":"\u800c","\u2f7e":"\u8012","\u2f7f":"\u8033","\u2f80":"\u807f","\u2f81":"\u8089","\u2f82":"\u81e3","\u2f83":"\u81ea","\u2f84":"\u81f3","\u2f85":"\u81fc","\u2f86":"\u820c","\u2f87":"\u821b","\u2f88":"\u821f","\u2f89":"\u826e","\u2f8a":"\u8272","\u2f8b":"\u8278","\u2f8c":"\u864d","\u2f8d":"\u866b","\u2f8e":"\u8840","\u2f8f":"\u884c","\u2f90":"\u8863","\u2f91":"\u897e","\u2f92":"\u898b","\u2f93":"\u89d2","\u2f94":"\u8a00","\u2f95":"\u8c37",
-"\u2f96":"\u8c46","\u2f97":"\u8c55","\u2f98":"\u8c78","\u2f99":"\u8c9d","\u2f9a":"\u8d64","\u2f9b":"\u8d70","\u2f9c":"\u8db3","\u2f9d":"\u8eab","\u2f9e":"\u8eca","\u2f9f":"\u8f9b","\u2fa0":"\u8fb0","\u2fa1":"\u8fb5","\u2fa2":"\u9091","\u2fa3":"\u9149","\u2fa4":"\u91c6","\u2fa5":"\u91cc","\u2fa6":"\u91d1","\u2fa7":"\u9577","\u2fa8":"\u9580","\u2fa9":"\u961c","\u2faa":"\u96b6","\u2fab":"\u96b9","\u2fac":"\u96e8","\u2fad":"\u9751","\u2fae":"\u975e","\u2faf":"\u9762","\u2fb0":"\u9769","\u2fb1":"\u97cb",
-"\u2fb2":"\u97ed","\u2fb3":"\u97f3","\u2fb4":"\u9801","\u2fb5":"\u98a8","\u2fb6":"\u98db","\u2fb7":"\u98df","\u2fb8":"\u9996","\u2fb9":"\u9999","\u2fba":"\u99ac","\u2fbb":"\u9aa8","\u2fbc":"\u9ad8","\u2fbd":"\u9adf","\u2fbe":"\u9b25","\u2fbf":"\u9b2f","\u2fc0":"\u9b32","\u2fc1":"\u9b3c","\u2fc2":"\u9b5a","\u2fc3":"\u9ce5","\u2fc4":"\u9e75","\u2fc5":"\u9e7f","\u2fc6":"\u9ea5","\u2fc7":"\u9ebb","\u2fc8":"\u9ec3","\u2fc9":"\u9ecd","\u2fca":"\u9ed1","\u2fcb":"\u9ef9","\u2fcc":"\u9efd","\u2fcd":"\u9f0e",
-"\u2fce":"\u9f13","\u2fcf":"\u9f20","\u2fd0":"\u9f3b","\u2fd1":"\u9f4a","\u2fd2":"\u9f52","\u2fd3":"\u9f8d","\u2fd4":"\u9f9c","\u2fd5":"\u9fa0","\u3036":"\u3012","\u3038":"\u5341","\u3039":"\u5344","\u303a":"\u5345","\u309b":" \u3099","\u309c":" \u309a","\u3131":"\u1100","\u3132":"\u1101","\u3133":"\u11aa","\u3134":"\u1102","\u3135":"\u11ac","\u3136":"\u11ad","\u3137":"\u1103","\u3138":"\u1104","\u3139":"\u1105","\u313a":"\u11b0","\u313b":"\u11b1","\u313c":"\u11b2","\u313d":"\u11b3","\u313e":"\u11b4",
-"\u313f":"\u11b5","\u3140":"\u111a","\u3141":"\u1106","\u3142":"\u1107","\u3143":"\u1108","\u3144":"\u1121","\u3145":"\u1109","\u3146":"\u110a","\u3147":"\u110b","\u3148":"\u110c","\u3149":"\u110d","\u314a":"\u110e","\u314b":"\u110f","\u314c":"\u1110","\u314d":"\u1111","\u314e":"\u1112","\u314f":"\u1161","\u3150":"\u1162","\u3151":"\u1163","\u3152":"\u1164","\u3153":"\u1165","\u3154":"\u1166","\u3155":"\u1167","\u3156":"\u1168","\u3157":"\u1169","\u3158":"\u116a","\u3159":"\u116b","\u315a":"\u116c",
-"\u315b":"\u116d","\u315c":"\u116e","\u315d":"\u116f","\u315e":"\u1170","\u315f":"\u1171","\u3160":"\u1172","\u3161":"\u1173","\u3162":"\u1174","\u3163":"\u1175","\u3164":"\u1160","\u3165":"\u1114","\u3166":"\u1115","\u3167":"\u11c7","\u3168":"\u11c8","\u3169":"\u11cc","\u316a":"\u11ce","\u316b":"\u11d3","\u316c":"\u11d7","\u316d":"\u11d9","\u316e":"\u111c","\u316f":"\u11dd","\u3170":"\u11df","\u3171":"\u111d","\u3172":"\u111e","\u3173":"\u1120","\u3174":"\u1122","\u3175":"\u1123","\u3176":"\u1127",
-"\u3177":"\u1129","\u3178":"\u112b","\u3179":"\u112c","\u317a":"\u112d","\u317b":"\u112e","\u317c":"\u112f","\u317d":"\u1132","\u317e":"\u1136","\u317f":"\u1140","\u3180":"\u1147","\u3181":"\u114c","\u3182":"\u11f1","\u3183":"\u11f2","\u3184":"\u1157","\u3185":"\u1158","\u3186":"\u1159","\u3187":"\u1184","\u3188":"\u1185","\u3189":"\u1188","\u318a":"\u1191","\u318b":"\u1192","\u318c":"\u1194","\u318d":"\u119e","\u318e":"\u11a1","\u3200":"(\u1100)","\u3201":"(\u1102)","\u3202":"(\u1103)","\u3203":"(\u1105)",
-"\u3204":"(\u1106)","\u3205":"(\u1107)","\u3206":"(\u1109)","\u3207":"(\u110b)","\u3208":"(\u110c)","\u3209":"(\u110e)","\u320a":"(\u110f)","\u320b":"(\u1110)","\u320c":"(\u1111)","\u320d":"(\u1112)","\u320e":"(\u1100\u1161)","\u320f":"(\u1102\u1161)","\u3210":"(\u1103\u1161)","\u3211":"(\u1105\u1161)","\u3212":"(\u1106\u1161)","\u3213":"(\u1107\u1161)","\u3214":"(\u1109\u1161)","\u3215":"(\u110b\u1161)","\u3216":"(\u110c\u1161)","\u3217":"(\u110e\u1161)","\u3218":"(\u110f\u1161)","\u3219":"(\u1110\u1161)",
-"\u321a":"(\u1111\u1161)","\u321b":"(\u1112\u1161)","\u321c":"(\u110c\u116e)","\u321d":"(\u110b\u1169\u110c\u1165\u11ab)","\u321e":"(\u110b\u1169\u1112\u116e)","\u3220":"(\u4e00)","\u3221":"(\u4e8c)","\u3222":"(\u4e09)","\u3223":"(\u56db)","\u3224":"(\u4e94)","\u3225":"(\u516d)","\u3226":"(\u4e03)","\u3227":"(\u516b)","\u3228":"(\u4e5d)","\u3229":"(\u5341)","\u322a":"(\u6708)","\u322b":"(\u706b)","\u322c":"(\u6c34)","\u322d":"(\u6728)","\u322e":"(\u91d1)","\u322f":"(\u571f)","\u3230":"(\u65e5)","\u3231":"(\u682a)",
-"\u3232":"(\u6709)","\u3233":"(\u793e)","\u3234":"(\u540d)","\u3235":"(\u7279)","\u3236":"(\u8ca1)","\u3237":"(\u795d)","\u3238":"(\u52b4)","\u3239":"(\u4ee3)","\u323a":"(\u547c)","\u323b":"(\u5b66)","\u323c":"(\u76e3)","\u323d":"(\u4f01)","\u323e":"(\u8cc7)","\u323f":"(\u5354)","\u3240":"(\u796d)","\u3241":"(\u4f11)","\u3242":"(\u81ea)","\u3243":"(\u81f3)","\u32c0":"1\u6708","\u32c1":"2\u6708","\u32c2":"3\u6708","\u32c3":"4\u6708","\u32c4":"5\u6708","\u32c5":"6\u6708","\u32c6":"7\u6708","\u32c7":"8\u6708",
-"\u32c8":"9\u6708","\u32c9":"10\u6708","\u32ca":"11\u6708","\u32cb":"12\u6708","\u3358":"0\u70b9","\u3359":"1\u70b9","\u335a":"2\u70b9","\u335b":"3\u70b9","\u335c":"4\u70b9","\u335d":"5\u70b9","\u335e":"6\u70b9","\u335f":"7\u70b9","\u3360":"8\u70b9","\u3361":"9\u70b9","\u3362":"10\u70b9","\u3363":"11\u70b9","\u3364":"12\u70b9","\u3365":"13\u70b9","\u3366":"14\u70b9","\u3367":"15\u70b9","\u3368":"16\u70b9","\u3369":"17\u70b9","\u336a":"18\u70b9","\u336b":"19\u70b9","\u336c":"20\u70b9","\u336d":"21\u70b9",
-"\u336e":"22\u70b9","\u336f":"23\u70b9","\u3370":"24\u70b9","\u33e0":"1\u65e5","\u33e1":"2\u65e5","\u33e2":"3\u65e5","\u33e3":"4\u65e5","\u33e4":"5\u65e5","\u33e5":"6\u65e5","\u33e6":"7\u65e5","\u33e7":"8\u65e5","\u33e8":"9\u65e5","\u33e9":"10\u65e5","\u33ea":"11\u65e5","\u33eb":"12\u65e5","\u33ec":"13\u65e5","\u33ed":"14\u65e5","\u33ee":"15\u65e5","\u33ef":"16\u65e5","\u33f0":"17\u65e5","\u33f1":"18\u65e5","\u33f2":"19\u65e5","\u33f3":"20\u65e5","\u33f4":"21\u65e5","\u33f5":"22\u65e5","\u33f6":"23\u65e5",
-"\u33f7":"24\u65e5","\u33f8":"25\u65e5","\u33f9":"26\u65e5","\u33fa":"27\u65e5","\u33fb":"28\u65e5","\u33fc":"29\u65e5","\u33fd":"30\u65e5","\u33fe":"31\u65e5","\ufb00":"ff","\ufb01":"fi","\ufb02":"fl","\ufb03":"ffi","\ufb04":"ffl","\ufb05":"\u017ft","\ufb06":"st","\ufb13":"\u0574\u0576","\ufb14":"\u0574\u0565","\ufb15":"\u0574\u056b","\ufb16":"\u057e\u0576","\ufb17":"\u0574\u056d","\ufb4f":"\u05d0\u05dc","\ufb50":"\u0671","\ufb51":"\u0671","\ufb52":"\u067b","\ufb53":"\u067b","\ufb54":"\u067b","\ufb55":"\u067b",
-"\ufb56":"\u067e","\ufb57":"\u067e","\ufb58":"\u067e","\ufb59":"\u067e","\ufb5a":"\u0680","\ufb5b":"\u0680","\ufb5c":"\u0680","\ufb5d":"\u0680","\ufb5e":"\u067a","\ufb5f":"\u067a","\ufb60":"\u067a","\ufb61":"\u067a","\ufb62":"\u067f","\ufb63":"\u067f","\ufb64":"\u067f","\ufb65":"\u067f","\ufb66":"\u0679","\ufb67":"\u0679","\ufb68":"\u0679","\ufb69":"\u0679","\ufb6a":"\u06a4","\ufb6b":"\u06a4","\ufb6c":"\u06a4","\ufb6d":"\u06a4","\ufb6e":"\u06a6","\ufb6f":"\u06a6","\ufb70":"\u06a6","\ufb71":"\u06a6",
-"\ufb72":"\u0684","\ufb73":"\u0684","\ufb74":"\u0684","\ufb75":"\u0684","\ufb76":"\u0683","\ufb77":"\u0683","\ufb78":"\u0683","\ufb79":"\u0683","\ufb7a":"\u0686","\ufb7b":"\u0686","\ufb7c":"\u0686","\ufb7d":"\u0686","\ufb7e":"\u0687","\ufb7f":"\u0687","\ufb80":"\u0687","\ufb81":"\u0687","\ufb82":"\u068d","\ufb83":"\u068d","\ufb84":"\u068c","\ufb85":"\u068c","\ufb86":"\u068e","\ufb87":"\u068e","\ufb88":"\u0688","\ufb89":"\u0688","\ufb8a":"\u0698","\ufb8b":"\u0698","\ufb8c":"\u0691","\ufb8d":"\u0691",
-"\ufb8e":"\u06a9","\ufb8f":"\u06a9","\ufb90":"\u06a9","\ufb91":"\u06a9","\ufb92":"\u06af","\ufb93":"\u06af","\ufb94":"\u06af","\ufb95":"\u06af","\ufb96":"\u06b3","\ufb97":"\u06b3","\ufb98":"\u06b3","\ufb99":"\u06b3","\ufb9a":"\u06b1","\ufb9b":"\u06b1","\ufb9c":"\u06b1","\ufb9d":"\u06b1","\ufb9e":"\u06ba","\ufb9f":"\u06ba","\ufba0":"\u06bb","\ufba1":"\u06bb","\ufba2":"\u06bb","\ufba3":"\u06bb","\ufba4":"\u06c0","\ufba5":"\u06c0","\ufba6":"\u06c1","\ufba7":"\u06c1","\ufba8":"\u06c1","\ufba9":"\u06c1",
-"\ufbaa":"\u06be","\ufbab":"\u06be","\ufbac":"\u06be","\ufbad":"\u06be","\ufbae":"\u06d2","\ufbaf":"\u06d2","\ufbb0":"\u06d3","\ufbb1":"\u06d3","\ufbd3":"\u06ad","\ufbd4":"\u06ad","\ufbd5":"\u06ad","\ufbd6":"\u06ad","\ufbd7":"\u06c7","\ufbd8":"\u06c7","\ufbd9":"\u06c6","\ufbda":"\u06c6","\ufbdb":"\u06c8","\ufbdc":"\u06c8","\ufbdd":"\u0677","\ufbde":"\u06cb","\ufbdf":"\u06cb","\ufbe0":"\u06c5","\ufbe1":"\u06c5","\ufbe2":"\u06c9","\ufbe3":"\u06c9","\ufbe4":"\u06d0","\ufbe5":"\u06d0","\ufbe6":"\u06d0",
-"\ufbe7":"\u06d0","\ufbe8":"\u0649","\ufbe9":"\u0649","\ufbea":"\u0626\u0627","\ufbeb":"\u0626\u0627","\ufbec":"\u0626\u06d5","\ufbed":"\u0626\u06d5","\ufbee":"\u0626\u0648","\ufbef":"\u0626\u0648","\ufbf0":"\u0626\u06c7","\ufbf1":"\u0626\u06c7","\ufbf2":"\u0626\u06c6","\ufbf3":"\u0626\u06c6","\ufbf4":"\u0626\u06c8","\ufbf5":"\u0626\u06c8","\ufbf6":"\u0626\u06d0","\ufbf7":"\u0626\u06d0","\ufbf8":"\u0626\u06d0","\ufbf9":"\u0626\u0649","\ufbfa":"\u0626\u0649","\ufbfb":"\u0626\u0649","\ufbfc":"\u06cc",
-"\ufbfd":"\u06cc","\ufbfe":"\u06cc","\ufbff":"\u06cc","\ufc00":"\u0626\u062c","\ufc01":"\u0626\u062d","\ufc02":"\u0626\u0645","\ufc03":"\u0626\u0649","\ufc04":"\u0626\u064a","\ufc05":"\u0628\u062c","\ufc06":"\u0628\u062d","\ufc07":"\u0628\u062e","\ufc08":"\u0628\u0645","\ufc09":"\u0628\u0649","\ufc0a":"\u0628\u064a","\ufc0b":"\u062a\u062c","\ufc0c":"\u062a\u062d","\ufc0d":"\u062a\u062e","\ufc0e":"\u062a\u0645","\ufc0f":"\u062a\u0649","\ufc10":"\u062a\u064a","\ufc11":"\u062b\u062c","\ufc12":"\u062b\u0645",
-"\ufc13":"\u062b\u0649","\ufc14":"\u062b\u064a","\ufc15":"\u062c\u062d","\ufc16":"\u062c\u0645","\ufc17":"\u062d\u062c","\ufc18":"\u062d\u0645","\ufc19":"\u062e\u062c","\ufc1a":"\u062e\u062d","\ufc1b":"\u062e\u0645","\ufc1c":"\u0633\u062c","\ufc1d":"\u0633\u062d","\ufc1e":"\u0633\u062e","\ufc1f":"\u0633\u0645","\ufc20":"\u0635\u062d","\ufc21":"\u0635\u0645","\ufc22":"\u0636\u062c","\ufc23":"\u0636\u062d","\ufc24":"\u0636\u062e","\ufc25":"\u0636\u0645","\ufc26":"\u0637\u062d","\ufc27":"\u0637\u0645",
-"\ufc28":"\u0638\u0645","\ufc29":"\u0639\u062c","\ufc2a":"\u0639\u0645","\ufc2b":"\u063a\u062c","\ufc2c":"\u063a\u0645","\ufc2d":"\u0641\u062c","\ufc2e":"\u0641\u062d","\ufc2f":"\u0641\u062e","\ufc30":"\u0641\u0645","\ufc31":"\u0641\u0649","\ufc32":"\u0641\u064a","\ufc33":"\u0642\u062d","\ufc34":"\u0642\u0645","\ufc35":"\u0642\u0649","\ufc36":"\u0642\u064a","\ufc37":"\u0643\u0627","\ufc38":"\u0643\u062c","\ufc39":"\u0643\u062d","\ufc3a":"\u0643\u062e","\ufc3b":"\u0643\u0644","\ufc3c":"\u0643\u0645",
-"\ufc3d":"\u0643\u0649","\ufc3e":"\u0643\u064a","\ufc3f":"\u0644\u062c","\ufc40":"\u0644\u062d","\ufc41":"\u0644\u062e","\ufc42":"\u0644\u0645","\ufc43":"\u0644\u0649","\ufc44":"\u0644\u064a","\ufc45":"\u0645\u062c","\ufc46":"\u0645\u062d","\ufc47":"\u0645\u062e","\ufc48":"\u0645\u0645","\ufc49":"\u0645\u0649","\ufc4a":"\u0645\u064a","\ufc4b":"\u0646\u062c","\ufc4c":"\u0646\u062d","\ufc4d":"\u0646\u062e","\ufc4e":"\u0646\u0645","\ufc4f":"\u0646\u0649","\ufc50":"\u0646\u064a","\ufc51":"\u0647\u062c",
-"\ufc52":"\u0647\u0645","\ufc53":"\u0647\u0649","\ufc54":"\u0647\u064a","\ufc55":"\u064a\u062c","\ufc56":"\u064a\u062d","\ufc57":"\u064a\u062e","\ufc58":"\u064a\u0645","\ufc59":"\u064a\u0649","\ufc5a":"\u064a\u064a","\ufc5b":"\u0630\u0670","\ufc5c":"\u0631\u0670","\ufc5d":"\u0649\u0670","\ufc5e":" \u064c\u0651","\ufc5f":" \u064d\u0651","\ufc60":" \u064e\u0651","\ufc61":" \u064f\u0651","\ufc62":" \u0650\u0651","\ufc63":" \u0651\u0670","\ufc64":"\u0626\u0631","\ufc65":"\u0626\u0632","\ufc66":"\u0626\u0645",
-"\ufc67":"\u0626\u0646","\ufc68":"\u0626\u0649","\ufc69":"\u0626\u064a","\ufc6a":"\u0628\u0631","\ufc6b":"\u0628\u0632","\ufc6c":"\u0628\u0645","\ufc6d":"\u0628\u0646","\ufc6e":"\u0628\u0649","\ufc6f":"\u0628\u064a","\ufc70":"\u062a\u0631","\ufc71":"\u062a\u0632","\ufc72":"\u062a\u0645","\ufc73":"\u062a\u0646","\ufc74":"\u062a\u0649","\ufc75":"\u062a\u064a","\ufc76":"\u062b\u0631","\ufc77":"\u062b\u0632","\ufc78":"\u062b\u0645","\ufc79":"\u062b\u0646","\ufc7a":"\u062b\u0649","\ufc7b":"\u062b\u064a",
-"\ufc7c":"\u0641\u0649","\ufc7d":"\u0641\u064a","\ufc7e":"\u0642\u0649","\ufc7f":"\u0642\u064a","\ufc80":"\u0643\u0627","\ufc81":"\u0643\u0644","\ufc82":"\u0643\u0645","\ufc83":"\u0643\u0649","\ufc84":"\u0643\u064a","\ufc85":"\u0644\u0645","\ufc86":"\u0644\u0649","\ufc87":"\u0644\u064a","\ufc88":"\u0645\u0627","\ufc89":"\u0645\u0645","\ufc8a":"\u0646\u0631","\ufc8b":"\u0646\u0632","\ufc8c":"\u0646\u0645","\ufc8d":"\u0646\u0646","\ufc8e":"\u0646\u0649","\ufc8f":"\u0646\u064a","\ufc90":"\u0649\u0670",
-"\ufc91":"\u064a\u0631","\ufc92":"\u064a\u0632","\ufc93":"\u064a\u0645","\ufc94":"\u064a\u0646","\ufc95":"\u064a\u0649","\ufc96":"\u064a\u064a","\ufc97":"\u0626\u062c","\ufc98":"\u0626\u062d","\ufc99":"\u0626\u062e","\ufc9a":"\u0626\u0645","\ufc9b":"\u0626\u0647","\ufc9c":"\u0628\u062c","\ufc9d":"\u0628\u062d","\ufc9e":"\u0628\u062e","\ufc9f":"\u0628\u0645","\ufca0":"\u0628\u0647","\ufca1":"\u062a\u062c","\ufca2":"\u062a\u062d","\ufca3":"\u062a\u062e","\ufca4":"\u062a\u0645","\ufca5":"\u062a\u0647",
-"\ufca6":"\u062b\u0645","\ufca7":"\u062c\u062d","\ufca8":"\u062c\u0645","\ufca9":"\u062d\u062c","\ufcaa":"\u062d\u0645","\ufcab":"\u062e\u062c","\ufcac":"\u062e\u0645","\ufcad":"\u0633\u062c","\ufcae":"\u0633\u062d","\ufcaf":"\u0633\u062e","\ufcb0":"\u0633\u0645","\ufcb1":"\u0635\u062d","\ufcb2":"\u0635\u062e","\ufcb3":"\u0635\u0645","\ufcb4":"\u0636\u062c","\ufcb5":"\u0636\u062d","\ufcb6":"\u0636\u062e","\ufcb7":"\u0636\u0645","\ufcb8":"\u0637\u062d","\ufcb9":"\u0638\u0645","\ufcba":"\u0639\u062c",
-"\ufcbb":"\u0639\u0645","\ufcbc":"\u063a\u062c","\ufcbd":"\u063a\u0645","\ufcbe":"\u0641\u062c","\ufcbf":"\u0641\u062d","\ufcc0":"\u0641\u062e","\ufcc1":"\u0641\u0645","\ufcc2":"\u0642\u062d","\ufcc3":"\u0642\u0645","\ufcc4":"\u0643\u062c","\ufcc5":"\u0643\u062d","\ufcc6":"\u0643\u062e","\ufcc7":"\u0643\u0644","\ufcc8":"\u0643\u0645","\ufcc9":"\u0644\u062c","\ufcca":"\u0644\u062d","\ufccb":"\u0644\u062e","\ufccc":"\u0644\u0645","\ufccd":"\u0644\u0647","\ufcce":"\u0645\u062c","\ufccf":"\u0645\u062d",
-"\ufcd0":"\u0645\u062e","\ufcd1":"\u0645\u0645","\ufcd2":"\u0646\u062c","\ufcd3":"\u0646\u062d","\ufcd4":"\u0646\u062e","\ufcd5":"\u0646\u0645","\ufcd6":"\u0646\u0647","\ufcd7":"\u0647\u062c","\ufcd8":"\u0647\u0645","\ufcd9":"\u0647\u0670","\ufcda":"\u064a\u062c","\ufcdb":"\u064a\u062d","\ufcdc":"\u064a\u062e","\ufcdd":"\u064a\u0645","\ufcde":"\u064a\u0647","\ufcdf":"\u0626\u0645","\ufce0":"\u0626\u0647","\ufce1":"\u0628\u0645","\ufce2":"\u0628\u0647","\ufce3":"\u062a\u0645","\ufce4":"\u062a\u0647",
-"\ufce5":"\u062b\u0645","\ufce6":"\u062b\u0647","\ufce7":"\u0633\u0645","\ufce8":"\u0633\u0647","\ufce9":"\u0634\u0645","\ufcea":"\u0634\u0647","\ufceb":"\u0643\u0644","\ufcec":"\u0643\u0645","\ufced":"\u0644\u0645","\ufcee":"\u0646\u0645","\ufcef":"\u0646\u0647","\ufcf0":"\u064a\u0645","\ufcf1":"\u064a\u0647","\ufcf2":"\u0640\u064e\u0651","\ufcf3":"\u0640\u064f\u0651","\ufcf4":"\u0640\u0650\u0651","\ufcf5":"\u0637\u0649","\ufcf6":"\u0637\u064a","\ufcf7":"\u0639\u0649","\ufcf8":"\u0639\u064a","\ufcf9":"\u063a\u0649",
-"\ufcfa":"\u063a\u064a","\ufcfb":"\u0633\u0649","\ufcfc":"\u0633\u064a","\ufcfd":"\u0634\u0649","\ufcfe":"\u0634\u064a","\ufcff":"\u062d\u0649","\ufd00":"\u062d\u064a","\ufd01":"\u062c\u0649","\ufd02":"\u062c\u064a","\ufd03":"\u062e\u0649","\ufd04":"\u062e\u064a","\ufd05":"\u0635\u0649","\ufd06":"\u0635\u064a","\ufd07":"\u0636\u0649","\ufd08":"\u0636\u064a","\ufd09":"\u0634\u062c","\ufd0a":"\u0634\u062d","\ufd0b":"\u0634\u062e","\ufd0c":"\u0634\u0645","\ufd0d":"\u0634\u0631","\ufd0e":"\u0633\u0631",
-"\ufd0f":"\u0635\u0631","\ufd10":"\u0636\u0631","\ufd11":"\u0637\u0649","\ufd12":"\u0637\u064a","\ufd13":"\u0639\u0649","\ufd14":"\u0639\u064a","\ufd15":"\u063a\u0649","\ufd16":"\u063a\u064a","\ufd17":"\u0633\u0649","\ufd18":"\u0633\u064a","\ufd19":"\u0634\u0649","\ufd1a":"\u0634\u064a","\ufd1b":"\u062d\u0649","\ufd1c":"\u062d\u064a","\ufd1d":"\u062c\u0649","\ufd1e":"\u062c\u064a","\ufd1f":"\u062e\u0649","\ufd20":"\u062e\u064a","\ufd21":"\u0635\u0649","\ufd22":"\u0635\u064a","\ufd23":"\u0636\u0649",
-"\ufd24":"\u0636\u064a","\ufd25":"\u0634\u062c","\ufd26":"\u0634\u062d","\ufd27":"\u0634\u062e","\ufd28":"\u0634\u0645","\ufd29":"\u0634\u0631","\ufd2a":"\u0633\u0631","\ufd2b":"\u0635\u0631","\ufd2c":"\u0636\u0631","\ufd2d":"\u0634\u062c","\ufd2e":"\u0634\u062d","\ufd2f":"\u0634\u062e","\ufd30":"\u0634\u0645","\ufd31":"\u0633\u0647","\ufd32":"\u0634\u0647","\ufd33":"\u0637\u0645","\ufd34":"\u0633\u062c","\ufd35":"\u0633\u062d","\ufd36":"\u0633\u062e","\ufd37":"\u0634\u062c","\ufd38":"\u0634\u062d",
-"\ufd39":"\u0634\u062e","\ufd3a":"\u0637\u0645","\ufd3b":"\u0638\u0645","\ufd3c":"\u0627\u064b","\ufd3d":"\u0627\u064b","\ufd50":"\u062a\u062c\u0645","\ufd51":"\u062a\u062d\u062c","\ufd52":"\u062a\u062d\u062c","\ufd53":"\u062a\u062d\u0645","\ufd54":"\u062a\u062e\u0645","\ufd55":"\u062a\u0645\u062c","\ufd56":"\u062a\u0645\u062d","\ufd57":"\u062a\u0645\u062e","\ufd58":"\u062c\u0645\u062d","\ufd59":"\u062c\u0645\u062d","\ufd5a":"\u062d\u0645\u064a","\ufd5b":"\u062d\u0645\u0649","\ufd5c":"\u0633\u062d\u062c",
-"\ufd5d":"\u0633\u062c\u062d","\ufd5e":"\u0633\u062c\u0649","\ufd5f":"\u0633\u0645\u062d","\ufd60":"\u0633\u0645\u062d","\ufd61":"\u0633\u0645\u062c","\ufd62":"\u0633\u0645\u0645","\ufd63":"\u0633\u0645\u0645","\ufd64":"\u0635\u062d\u062d","\ufd65":"\u0635\u062d\u062d","\ufd66":"\u0635\u0645\u0645","\ufd67":"\u0634\u062d\u0645","\ufd68":"\u0634\u062d\u0645","\ufd69":"\u0634\u062c\u064a","\ufd6a":"\u0634\u0645\u062e","\ufd6b":"\u0634\u0645\u062e","\ufd6c":"\u0634\u0645\u0645","\ufd6d":"\u0634\u0645\u0645",
-"\ufd6e":"\u0636\u062d\u0649","\ufd6f":"\u0636\u062e\u0645","\ufd70":"\u0636\u062e\u0645","\ufd71":"\u0637\u0645\u062d","\ufd72":"\u0637\u0645\u062d","\ufd73":"\u0637\u0645\u0645","\ufd74":"\u0637\u0645\u064a","\ufd75":"\u0639\u062c\u0645","\ufd76":"\u0639\u0645\u0645","\ufd77":"\u0639\u0645\u0645","\ufd78":"\u0639\u0645\u0649","\ufd79":"\u063a\u0645\u0645","\ufd7a":"\u063a\u0645\u064a","\ufd7b":"\u063a\u0645\u0649","\ufd7c":"\u0641\u062e\u0645","\ufd7d":"\u0641\u062e\u0645","\ufd7e":"\u0642\u0645\u062d",
-"\ufd7f":"\u0642\u0645\u0645","\ufd80":"\u0644\u062d\u0645","\ufd81":"\u0644\u062d\u064a","\ufd82":"\u0644\u062d\u0649","\ufd83":"\u0644\u062c\u062c","\ufd84":"\u0644\u062c\u062c","\ufd85":"\u0644\u062e\u0645","\ufd86":"\u0644\u062e\u0645","\ufd87":"\u0644\u0645\u062d","\ufd88":"\u0644\u0645\u062d","\ufd89":"\u0645\u062d\u062c","\ufd8a":"\u0645\u062d\u0645","\ufd8b":"\u0645\u062d\u064a","\ufd8c":"\u0645\u062c\u062d","\ufd8d":"\u0645\u062c\u0645","\ufd8e":"\u0645\u062e\u062c","\ufd8f":"\u0645\u062e\u0645",
-"\ufd92":"\u0645\u062c\u062e","\ufd93":"\u0647\u0645\u062c","\ufd94":"\u0647\u0645\u0645","\ufd95":"\u0646\u062d\u0645","\ufd96":"\u0646\u062d\u0649","\ufd97":"\u0646\u062c\u0645","\ufd98":"\u0646\u062c\u0645","\ufd99":"\u0646\u062c\u0649","\ufd9a":"\u0646\u0645\u064a","\ufd9b":"\u0646\u0645\u0649","\ufd9c":"\u064a\u0645\u0645","\ufd9d":"\u064a\u0645\u0645","\ufd9e":"\u0628\u062e\u064a","\ufd9f":"\u062a\u062c\u064a","\ufda0":"\u062a\u062c\u0649","\ufda1":"\u062a\u062e\u064a","\ufda2":"\u062a\u062e\u0649",
-"\ufda3":"\u062a\u0645\u064a","\ufda4":"\u062a\u0645\u0649","\ufda5":"\u062c\u0645\u064a","\ufda6":"\u062c\u062d\u0649","\ufda7":"\u062c\u0645\u0649","\ufda8":"\u0633\u062e\u0649","\ufda9":"\u0635\u062d\u064a","\ufdaa":"\u0634\u062d\u064a","\ufdab":"\u0636\u062d\u064a","\ufdac":"\u0644\u062c\u064a","\ufdad":"\u0644\u0645\u064a","\ufdae":"\u064a\u062d\u064a","\ufdaf":"\u064a\u062c\u064a","\ufdb0":"\u064a\u0645\u064a","\ufdb1":"\u0645\u0645\u064a","\ufdb2":"\u0642\u0645\u064a","\ufdb3":"\u0646\u062d\u064a",
-"\ufdb4":"\u0642\u0645\u062d","\ufdb5":"\u0644\u062d\u0645","\ufdb6":"\u0639\u0645\u064a","\ufdb7":"\u0643\u0645\u064a","\ufdb8":"\u0646\u062c\u062d","\ufdb9":"\u0645\u062e\u064a","\ufdba":"\u0644\u062c\u0645","\ufdbb":"\u0643\u0645\u0645","\ufdbc":"\u0644\u062c\u0645","\ufdbd":"\u0646\u062c\u062d","\ufdbe":"\u062c\u062d\u064a","\ufdbf":"\u062d\u062c\u064a","\ufdc0":"\u0645\u062c\u064a","\ufdc1":"\u0641\u0645\u064a","\ufdc2":"\u0628\u062d\u064a","\ufdc3":"\u0643\u0645\u0645","\ufdc4":"\u0639\u062c\u0645",
-"\ufdc5":"\u0635\u0645\u0645","\ufdc6":"\u0633\u062e\u064a","\ufdc7":"\u0646\u062c\u064a","\ufe49":"\u203e","\ufe4a":"\u203e","\ufe4b":"\u203e","\ufe4c":"\u203e","\ufe4d":"_","\ufe4e":"_","\ufe4f":"_","\ufe80":"\u0621","\ufe81":"\u0622","\ufe82":"\u0622","\ufe83":"\u0623","\ufe84":"\u0623","\ufe85":"\u0624","\ufe86":"\u0624","\ufe87":"\u0625","\ufe88":"\u0625","\ufe89":"\u0626","\ufe8a":"\u0626","\ufe8b":"\u0626","\ufe8c":"\u0626","\ufe8d":"\u0627","\ufe8e":"\u0627","\ufe8f":"\u0628","\ufe90":"\u0628",
-"\ufe91":"\u0628","\ufe92":"\u0628","\ufe93":"\u0629","\ufe94":"\u0629","\ufe95":"\u062a","\ufe96":"\u062a","\ufe97":"\u062a","\ufe98":"\u062a","\ufe99":"\u062b","\ufe9a":"\u062b","\ufe9b":"\u062b","\ufe9c":"\u062b","\ufe9d":"\u062c","\ufe9e":"\u062c","\ufe9f":"\u062c","\ufea0":"\u062c","\ufea1":"\u062d","\ufea2":"\u062d","\ufea3":"\u062d","\ufea4":"\u062d","\ufea5":"\u062e","\ufea6":"\u062e","\ufea7":"\u062e","\ufea8":"\u062e","\ufea9":"\u062f","\ufeaa":"\u062f","\ufeab":"\u0630","\ufeac":"\u0630",
-"\ufead":"\u0631","\ufeae":"\u0631","\ufeaf":"\u0632","\ufeb0":"\u0632","\ufeb1":"\u0633","\ufeb2":"\u0633","\ufeb3":"\u0633","\ufeb4":"\u0633","\ufeb5":"\u0634","\ufeb6":"\u0634","\ufeb7":"\u0634","\ufeb8":"\u0634","\ufeb9":"\u0635","\ufeba":"\u0635","\ufebb":"\u0635","\ufebc":"\u0635","\ufebd":"\u0636","\ufebe":"\u0636","\ufebf":"\u0636","\ufec0":"\u0636","\ufec1":"\u0637","\ufec2":"\u0637","\ufec3":"\u0637","\ufec4":"\u0637","\ufec5":"\u0638","\ufec6":"\u0638","\ufec7":"\u0638","\ufec8":"\u0638",
-"\ufec9":"\u0639","\ufeca":"\u0639","\ufecb":"\u0639","\ufecc":"\u0639","\ufecd":"\u063a","\ufece":"\u063a","\ufecf":"\u063a","\ufed0":"\u063a","\ufed1":"\u0641","\ufed2":"\u0641","\ufed3":"\u0641","\ufed4":"\u0641","\ufed5":"\u0642","\ufed6":"\u0642","\ufed7":"\u0642","\ufed8":"\u0642","\ufed9":"\u0643","\ufeda":"\u0643","\ufedb":"\u0643","\ufedc":"\u0643","\ufedd":"\u0644","\ufede":"\u0644","\ufedf":"\u0644","\ufee0":"\u0644","\ufee1":"\u0645","\ufee2":"\u0645","\ufee3":"\u0645","\ufee4":"\u0645",
-"\ufee5":"\u0646","\ufee6":"\u0646","\ufee7":"\u0646","\ufee8":"\u0646","\ufee9":"\u0647","\ufeea":"\u0647","\ufeeb":"\u0647","\ufeec":"\u0647","\ufeed":"\u0648","\ufeee":"\u0648","\ufeef":"\u0649","\ufef0":"\u0649","\ufef1":"\u064a","\ufef2":"\u064a","\ufef3":"\u064a","\ufef4":"\u064a","\ufef5":"\u0644\u0622","\ufef6":"\u0644\u0622","\ufef7":"\u0644\u0623","\ufef8":"\u0644\u0623","\ufef9":"\u0644\u0625","\ufefa":"\u0644\u0625","\ufefb":"\u0644\u0627","\ufefc":"\u0644\u0627"},sb,of=function(a,b,c){if(1===
-arguments.length){var d=arguments[0],e;for(e in d)this[e]=d[e]}else if(this.name=a,this.loadedName=c.loadedName,this.loadCharProcs=this.coded=c.coded,this.sizes=[],e=a.split("+"),e=1<e.length?e[1]:e[0],e.split(/[-,_]/g),this.isSerifFont=!!(c.flags&Fa.Serif),this.isSymbolicFont=!!(c.flags&Fa.Symbolic),this.isMonospace=!!(c.flags&Fa.FixedPitch),this.type=e=c.type,this.fallbackName=this.isMonospace?"monospace":this.isSerifFont?"serif":"sans-serif",this.differences=c.differences,this.widths=c.widths,
-this.defaultWidth=c.defaultWidth,this.composite=c.composite,this.wideChars=c.wideChars,this.hasEncoding=c.hasEncoding,this.fontMatrix=c.fontMatrix,"Type3"==c.type)this.encoding=c.baseEncoding;else if(this.loadCidToUnicode(c),this.cidEncoding=c.cidEncoding,c.toUnicode?this.toUnicode=c.toUnicode:this.rebuildToUnicode(c),this.toFontChar=this.buildToFontChar(this.toUnicode),b){var f=c.subtype;"Type1C"==f&&("Type1"!=e&&"MMType1"!=e)&&(e="Type1");"CIDFontType0C"==f&&"CIDFontType0"!=e&&(e="CIDFontType0");
-"OpenType"===f&&(e="OpenType");switch(e){case "Type1":case "CIDFontType0":this.mimetype="font/opentype";d="Type1C"==f||"CIDFontType0C"==f?new mf(b,c):new nf(a,b,c);if(c.fontMatrix[0]!==Da[0]){e=0.0010/c.fontMatrix[0];var f=c.widths,g;for(g in f)f[g]*=e;c.defaultWidth*=e}d=this.convert(a,d,c);break;case "TrueType":case "CIDFontType2":this.mimetype="font/opentype";d=this.checkAndRepair(a,b,c);break;default:R("Font "+e+" is not supported")}this.data=d;this.fontMatrix=c.fontMatrix;this.widths=c.widths;
-this.defaultWidth=c.defaultWidth;this.encoding=c.baseEncoding;this.loading=!0}else g=a.replace(/[,_]/g,"-"),g=ef[g]||fh[g]||g,this.bold=-1!=g.search(/bold/gi),this.italic=-1!=g.search(/oblique/gi)||-1!=g.search(/italic/gi),this.black=-1!=a.search(/Black/g),this.encoding=c.baseEncoding,this.noUnicodeAdaptation=!0,this.loadedName=g.split("-")[0],this.loading=!1},ta=function(a){for(var b=[],c=0,d=a.length;c<d;++c)b[c]=a.charCodeAt(c);return b},fd=function(a){for(var b="",c=0,d=a.length;c<d;++c)b+=String.fromCharCode(a[c]);
-return b},B=function(a){return(a[0]<<8)+(a[1]&255)},lc=function(a){return(a[0]<<24)+(a[1]<<16)+(a[2]<<8)+(a[3]&255)},pf=function(a){for(var b=0;2<=a;)a/=2,b++;a=2;for(var c=1;c<b;c++)a*=2;return a},C=function(a){return String.fromCharCode(a>>8&255)+String.fromCharCode(a&255)},va=function(a){a=32767<a?32767:-32768>a?-32768:a;return String.fromCharCode(a>>8&255)+String.fromCharCode(a&255)},Ga=function(a){return String.fromCharCode(a>>24&255)+String.fromCharCode(a>>16&255)+String.fromCharCode(a>>8&255)+
-String.fromCharCode(a&255)},qf=function(a,b,c){"true"==a&&(a=Ga(65536));a+=C(c);var d=pf(c),e=16*d;a+=C(e);a+=C(Math.log(d)/Math.log(2));a+=C(16*c-e);b.file+=a;b.virtualOffset+=a.length},rf=function(a,b,c){for(var d=a.virtualOffset,e=c.length;c.length&3;)c.push(0);for(;a.virtualOffset&3;)a.virtualOffset++;for(var f=0,g=c.length,h=0;h<g;h+=4)f=f+lc([c[h],c[h+1],c[h+2],c[h+3]])|0;b=b+Ga(f)+Ga(d)+Ga(e);a.file+=b;a.virtualOffset+=c.length},sf=function(a,b){for(var c=[],d=a.length,e=0;e<d;++e)c.push({unicode:a[e].unicode,
-code:e});c.sort(function(a,b){return a.unicode-b.unicode});for(var f=[],e=0;e<d;){var g=c[e].unicode,h=[c[e].code];++e;for(var k=g;e<d&&k+1==c[e].unicode;)h.push(c[e].code),++k,++e;f.push([g,k,h])}var c="\x00\x00"+C(1)+"\x00\u0003\x00\u0001"+Ga(12),d=65535>f[f.length-1][1]?1:0,j=f.length+d,e=2*j,g=2*pf(j),h=Math.log(j)/Math.log(2),k=2*j-g,l="",n="",p="",m="",r="",q=0;if(b)for(var A=0,t=f.length;A<t;A++)for(var s=f[A],v=s[0],x=s[1],z=2*(j-A)+2*q,q=q+(x-v+1),l=l+C(v),n=n+C(x),p=p+C(0),m=m+C(z),v=s[2],
-x=0,s=v.length;x<s;++x)r+=C(b[v[x]]);else{A=0;for(t=f.length;A<t;A++)s=f[A],v=s[0],x=s[1],j=s[2][0],l+=C(v),n+=C(x),p+=C(j-v+1&65535),m+=C(0)}0<d&&(n+="\u00ff\u00ff",l+="\u00ff\u00ff",p+="\x00\u0001",m+="\x00\x00");f="\x00\x00"+C(e)+C(g)+C(h)+C(k)+n+"\x00\x00"+l+p+m+r;return ta(c+"\x00\u0004"+C(f.length+4)+f)},tf=function(a,b,c){c=c||{unitsPerEm:0,yMax:0,yMin:0,ascent:0,descent:0};var d=0,e=0,f=0,g=0,h=null,k=0;if(b)for(var j=0;j<b.length;++j){var l=b[j].unicode;if(h>l||!h)h=l;k<l&&(k=l);a:{for(var n=
-0,p=qb.length;n<p;n++){var m=qb[n];if(l>=m.begin&&l<m.end){l=n;break a}}l=-1}32>l?d|=1<<l:64>l?e|=1<<l-32:96>l?f|=1<<l-64:123>l?g|=1<<l-96:s("Unicode ranges Bits > 123 are reserved for internal usage")}else h=0,k=255;j=a.bbox||[0,0,0,0];b=c.unitsPerEm||1/(a.fontMatrix||Da)[0];l=a.ascentScaled?1:b/1E3;b=c.ascent||Math.round(l*(a.ascent||j[3]));l=c.descent||Math.round(l*(a.descent||j[1]));0<l&&(0<a.descent&&0>j[1])&&(l=-l);j=c.yMax||b;c=-c.yMin||-l;return"\x00\u0003\u0002$\u0001\u00f4\x00\u0005\x00\x00\u0002\u008a\u0002\u00bb\x00\x00\x00\u008c\u0002\u008a\u0002\u00bb\x00\x00\u0001\u00df\x001\u0001\u0002\x00\x00\x00\x00\u0006"+
-String.fromCharCode(a.fixedPitch?9:0)+"\x00\x00\x00\x00\x00\x00"+Ga(d)+Ga(e)+Ga(f)+Ga(g)+"*21*"+C(a.italicAngle?1:0)+C(h||a.firstChar)+C(k||a.lastChar)+C(b)+C(l)+"\x00d"+C(j)+C(c)+"\x00\x00\x00\x00\x00\x00\x00\x00"+C(a.xHeight)+C(a.capHeight)+C(0)+C(h||a.firstChar)+"\x00\u0003"},uf=function(a){var b=Math.floor(a.italicAngle*Math.pow(2,16));return"\x00\u0003\x00\x00"+Ga(b)+"\x00\x00\x00\x00"+Ga(a.fixedPitch)+"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"},gd=function(a,b){b||(b=
-[[],[]]);for(var c=[b[0][0]||"Original licence",b[0][1]||a,b[0][2]||"Unknown",b[0][3]||"uniqueID",b[0][4]||a,b[0][5]||"Version 0.11",b[0][6]||"",b[0][7]||"Unknown",b[0][8]||"Unknown",b[0][9]||"Unknown"],d=[],e=0,f=c.length;e<f;e++){for(var g=b[1][e]||c[e],h="",k=0,j=g.length;k<j;k++)h+=C(g.charCodeAt(k));d.push(h)}for(var h=[c,d],l=["\x00\u0001","\x00\u0003"],n=["\x00\x00","\x00\u0001"],p=["\x00\x00","\u0004\t"],e=c.length*l.length,m="\x00\x00"+C(e)+C(12*e+6),r=0,e=0,f=l.length;e<f;e++)for(var q=
-h[e],k=0,j=q.length;k<j;k++)var g=q[k],A=l[e]+n[e]+p[e]+C(k)+C(g.length)+C(r),m=m+A,r=r+g.length;return m+=c.join("")+d.join("")};of.prototype={name:null,font:null,mimetype:null,encoding:null,exportData:function(){var a={},b;for(b in this)this.hasOwnProperty(b)&&(a[b]=this[b]);return a},checkAndRepair:function(a,b,c){function d(a,b,c,d,e){if(12>=c-b)return 0;a=a.subarray(b,c);var f=a[0]<<8|a[1];if(f&32768)return d.set(a,e),a.length;b=10;for(var h=c=0;h<f;h++)c=(a[b]<<8|a[b+1])+1,b+=2;b+=2+(a[b]<<
-8|a[b+1]);for(h=f=0;h<c;h++){var g=a[b++];if(g&192)return 0;var j=(g&2?1:g&16?0:2)+(g&4?1:g&32?0:2),f=f+j;g&8&&(g=a[b++],h+=g,f+=g*j)}b+=f;if(b>a.length)return 0;if(3<a.length-b)return b=b+3&-4,d.set(a.subarray(0,b),e),b;d.set(a,e);return a.length}function e(a,b){for(var c=a.data,d=0,e,h=0,g=0,j=[],k=b.tooComplexToFollowFunctions,l=c.length;d<l;){var n=c[d++];if(64===n){e=c[d++];for(var m=0;m<e;m++)j.push(c[d++])}else if(65===n){e=c[d++];for(m=0;m<e;m++){var p=c[d++];j.push(p<<8|c[d++])}}else if(176===
-(n&248)){e=n-176+1;for(m=0;m<e;m++)j.push(c[d++])}else if(184===(n&248)){e=n-184+1;for(m=0;m<e;m++)p=c[d++],j.push(p<<8|c[d++])}else 43===n&&!k?(m=j[j.length-1],b.functionsUsed[m]=!0,2<=d&&43===c[d-2]&&(k=!0)):44===n&&!k?(g=d,m=j[j.length-1],b.functionsDefined[m]=!0,2<=d&&45===c[d-2]&&(k=!0)):45===n?h=d:137===n&&(g=d);for(m=142>=n?f[n]:192<=n&&223>=n?-1:224<=n?-2:0;0>m&&0<j.length;)j.pop(),m++;for(;0<m;)j.push(NaN),m--}b.tooComplexToFollowFunctions=k;j=[c];d>c.length&&j.push(new Uint8Array(d-c.length));
-g>h&&j.push(new Uint8Array([34,45]));if(b.defineMissingFunctions&&!k){m=0;for(c=b.functionsUsed.length;m<c;m++)b.functionsUsed[m]&&!b.functionsDefined[m]&&j.push(new Uint8Array([176,m,44,45]))}if(1<j.length){m=d=0;for(c=j.length;m<c;m++)d+=j[m].length;d=d+3&-4;h=new Uint8Array(d);m=g=0;for(c=j.length;m<c;m++)h.set(j[m],g),g+=j[m].length;a.data=h;a.length=d}}var f=[0,0,0,0,0,0,0,0,-2,-2,-2,-2,0,0,-2,-5,-1,-1,-1,-1,-1,-1,-1,-1,0,0,-1,0,-1,-1,-1,-1,1,-1,-999,0,1,0,0,-2,0,-1,-2,-1,-999,-999,-1,-1,0,0,
--999,-999,-1,-1,-1,-1,-2,-999,-2,-2,-2,0,-2,-2,0,0,-2,0,-2,0,0,0,-2,-1,-1,1,1,0,0,-1,-1,-1,-1,-1,-1,-1,0,0,-1,0,-1,-1,0,-999,-1,-1,-1,-1,-1,-1,0,0,0,0,-1,-1,0,0,0,0,0,0,-2,-999,-999,-999,-999,-999,-1,-1,-2,-2,0,0,0,0,-1,-1,-999,-2,-2,0,0,-1,-2,-2,0,-999,0,0,0,-1,-2],g="OS/2 cmap head hhea hmtx maxp name post".split(" "),h=fd(b.getBytes(4)),k=B(b.getBytes(2));B(b.getBytes(2));B(b.getBytes(2));B(b.getBytes(2));for(var j=k,l,n,p,m,r,q,A,t,y,v,x,z=[],u=0;u<j;u++){var w,T=b,ac=T.getBytes(4),ac=String.fromCharCode(ac[0])+
-String.fromCharCode(ac[1])+String.fromCharCode(ac[2])+String.fromCharCode(ac[3]),F=lc(T.getBytes(4)),E=lc(T.getBytes(4)),I=lc(T.getBytes(4)),S=T.pos;T.pos=T.start?T.start:0;T.skip(E);var P=T.getBytes(I);T.pos=S;"head"==ac&&(P[8]=P[9]=P[10]=P[11]=0,P[17]|=32);w={tag:ac,checksum:F,length:I,offset:E,data:P};var L=g.indexOf(w.tag);if(-1!=L)"cmap"==w.tag?l=w:"post"==w.tag?n=w:"maxp"==w.tag?p=w:"hhea"==w.tag?m=w:"hmtx"==w.tag?r=w:"head"==w.tag?q=w:"OS/2"==w.tag&&(A=w),g.splice(L,1);else if("loca"==w.tag)v=
-w;else if("glyf"==w.tag)t=w;else if("fpgm"==w.tag)y=w;else if("prep"==w.tag)x=w;else if("cvt "!=w.tag)continue;z.push(w)}var j=z.length+g.length,D={file:"",virtualOffset:16*j};qf(h,D,j);var O;if(O=A){var Zb=A.data;O=0==(Zb[74]<<8|Zb[75])}O&&(z.splice(z.indexOf(A),1),A=null);b.pos=(b.start||0)+p.offset;B(b.getBytes(4));var na=B(b.getBytes(2)),Nb=m,Q=r;if(Nb){b.pos=(b.start?b.start:0)+Nb.offset;b.pos+=Nb.length-2;var U=B(b.getBytes(2)),vf=na-U-(r.length-4*U>>1);if(0<vf){b.pos=(b.start?b.start:0)+Q.offset;
-for(var H="",J=0,aa=r.length;J<aa;J++)H+=String.fromCharCode(b.getByte());for(J=0;J<vf;J++)H+="\x00\x00";Q.data=ta(H)}}else Q&&(Q.data=null);var wf=y,G={functionsDefined:[],functionsUsed:[],tooComplexToFollowFunctions:!1};x&&e(x,G);wf&&(G.defineMissingFunctions=!0,e(wf,G));var ha=B([q.data[50],q.data[51]]);if(q&&v&&t){var W=v,ja=t,ba,fa,V;ha?(ba=4,fa=function(a,b){return a[b]<<24|a[b+1]<<16|a[b+2]<<8|a[b+3]},V=function(a,b,c){a[b]=c>>>24&255;a[b+1]=c>>16&255;a[b+2]=c>>8&255;a[b+3]=c&255}):(ba=2,fa=
-function(a,b){return a[b]<<9|a[b+1]<<1},V=function(a,b,c){a[b]=c>>9&255;a[b+1]=c>>1&255});var Y=W.data,Aa=ja.data,Z=Aa.length,ra=new Uint8Array(Z),la=fa(Y,0),bc=0;V(Y,0,bc);for(var sc=0,Ha=ba;sc<na;sc++,Ha+=ba){var ma=fa(Y,Ha);if(!(ma>Z))var ga=d(Aa,la,ma,ra,bc),bc=bc+ga;V(Y,Ha,bc);la=ma}if(0==bc){for(var Ua=new Uint8Array([0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,0]),sc=0,Ha=ba;sc<na;sc++,Ha+=ba)V(Y,Ha,Ua.length);ja.data=Ua}else ja.data=ra.subarray(0,bc)}var Na=[];if(t){var yc,Ia;ha?(yc=4,Ia=function(a,b){return a[b]<<
-24|a[b+1]<<16|a[b+2]<<8|a[b+3]}):(yc=2,Ia=function(a,b){return a[b]<<9|a[b+1]<<1});for(var za=v.data,fb=za.length,Ea=Ia(za,0),pa=yc,M=0;pa<fb;pa+=yc,M++){var Oa=Ia(za,pa);Oa==Ea&&(Na[M]=!0);Ea=Oa}}0==m.data[10]&&0==m.data[11]&&(m.data[10]=255,m.data[11]=255);var Fa;if(Fa=n){var pb=n,Za=(b.start?b.start:0)+pb.offset;b.pos=Za;var gb=Za+pb.length,Sa=lc(b.getBytes(4));b.getBytes(28);var ka,tc=!0;switch(Sa){case 65536:ka=lf;break;case 131072:var Ka=B(b.getBytes(2));if(Ka!=na){tc=!1;break}for(var qa=[],
-wa=0;wa<Ka;++wa){var xa=B(b.getBytes(2));if(32768<=xa){tc=!1;break}qa.push(xa)}if(!tc)break;for(var xf=[];b.pos<gb;){for(var ib=b.getByte(),La="",wa=0;wa<ib;++wa)La+=b.getChar();xf.push(La)}ka=[];for(wa=0;wa<Ka;++wa){var Da=qa[wa];258>Da?ka.push(lf[Da]):ka.push(xf[Da-258])}break;case 196608:break;default:R("Unknown/unsupported post table version "+Sa),tc=!1}c.glyphNames=ka;Fa=!tc}Fa&&(z.splice(z.indexOf(n),1),n=null);var K,ua;if("CIDFontType2"==c.type){l||(l={tag:"cmap",data:null},z.push(l));var sa=
-c.cidToGidMap||[],uc=[0];if(0<sa.length){for(var ya=sa.length-1;0<=ya;ya--){var cc=sa[ya];cc&&(uc[cc]=ya)}for(var jb=sa.length,u=1;u<na;u++)uc[u]||(uc[u]=jb++)}K=[];ua=[];for(var Pa=[],bb=[],u=1;u<na;u++){var xb=uc[u]||u,N=this.toFontChar[xb];!N||"number"!==typeof N||Vd(N)||N in Pa?bb.push(u):(Pa[N]=!0,K.push({unicode:N,code:xb}),ua.push(u))}for(var kb=hb,ya=0,vc=bb.length;ya<vc;ya++){u=bb[ya];for(xb=uc[u]||u;kb in Pa;)kb++;if(kb>=hb+Jc)break;N=kb++;this.toFontChar[xb]=N;Pa[N]=!0;K.push({unicode:N,
-code:xb});ua.push(u)}}else{var lb;a:{var yb=l,wc=(b.start?b.start:0)+yb.offset;b.pos=wc;for(var Ya=B(b.getBytes(2)),dc=B(b.getBytes(2)),ia=[],da=0;da<dc;da++)ia.push({platformID:B(b.getBytes(2)),encodingID:B(b.getBytes(2)),offset:lc(b.getBytes(4))});ia.sort(function(a,b){return(a.platformID<<16)+a.encodingID-((b.platformID<<16)+b.encodingID)});for(var oa=[ia[0]],da=1;da<dc;da++){var Ca=ia[da],Ta=ia[da-1];(Ca.platformID<<16)+Ca.encodingID<=(Ta.platformID<<16)+Ta.encodingID||oa.push(Ca)}if(dc-oa.length){for(var dc=
-oa.length,Ma=C(Ya)+C(dc),da=0;da<dc;da++)var va=oa[da],Ma=Ma+(C(va.platformID)+C(va.encodingID)+Ga(va.offset));for(var da=0,Bb=Ma.length;da<Bb;da++)yb.data[da]=Ma.charCodeAt(da)}for(da=0;da<dc;da++){va=oa[da];b.pos=wc+va.offset;var Qa=B(b.getBytes(2));B(b.getBytes(2));B(b.getBytes(2));if(0==Qa){for(var Ob=[],Pb=[],ea=0;256>ea;ea++){var $a=b.getByte();$a&&(Ob.push({unicode:ea,code:ea}),Pb.push($a))}lb={glyphs:Ob,ids:Pb,hasShortCmap:!0};break a}if(4==Qa){var Ba=B(b.getBytes(2))>>1;b.getBytes(6);var ca,
-Wb=[];for(ca=0;ca<Ba;ca++)Wb.push({end:B(b.getBytes(2))});b.getBytes(2);for(ca=0;ca<Ba;ca++)Wb[ca].start=B(b.getBytes(2));for(ca=0;ca<Ba;ca++)Wb[ca].delta=B(b.getBytes(2));var cb=0;for(ca=0;ca<Ba;ca++){var Va=Wb[ca],yf=B(b.getBytes(2));if(yf){var Qb=(yf>>1)-(Ba-ca);Va.offsetIndex=Qb;cb=Math.max(cb,Qb+Va.end-Va.start+1)}else Va.offsetIndex=-1}for(var ub=[],ea=0;ea<cb;ea++)ub.push(B(b.getBytes(2)));Ob=[];Pb=[];for(ca=0;ca<Ba;ca++)for(var Va=Wb[ca],wc=Va.start,mb=Va.end,nb=Va.delta,Qb=Va.offsetIndex,
-ea=wc;ea<=mb;ea++)if(65535!=ea){var Wa=0>Qb?ea:ub[Qb+ea-wc],Wa=Wa+nb&65535;0!=Wa&&(Ob.push({unicode:ea,code:ea}),Pb.push(Wa))}lb={glyphs:Ob,ids:Pb};break a}if(6==Qa){for(var ob=B(b.getBytes(2)),gh=B(b.getBytes(2)),Ob=[],Pb=[],ea=0;ea<gh;ea++){var Wa=B(b.getBytes(2)),Eb=ob+ea;Ob.push({unicode:Eb,code:Eb});Pb.push(Wa)}lb={glyphs:Ob,ids:Pb};break a}}s("Unsupported cmap table format");lb=void 0}K=lb.glyphs;ua=lb.ids;var Fb=!!lb.hasShortCmap,db=this.toFontChar;if(Fb&&ua.length==na)for(var u=0,X=ua.length;u<
-X;u++)ua[u]=u;var kb=hb,tb=c.glyphNames||[],zb=c.baseEncoding,Db=c.differences;if(db&&0<db.length){for(var zf=!0,u=0,X=K.length;u<X;u++)if(K[u].unicode!=u+1){zf=!1;break}if(zf&&!this.isSymbolicFont){Pa=[];bb=[];u=0;for(X=K.length;u<X;u++)N=db[u+1],!N||"number"!==typeof N||N in Pa?bb.push(u):(K[u].unicode=N,Pa[N]=!0);ya=0;for(vc=bb.length;ya<vc;ya++){for(u=bb[ya];kb in Pa;)kb++;xb=u+1;xb in db||(db[xb]=kb);K[u].unicode=kb++}this.useToFontChar=!0}}for(var Af=0,u=ua.length-1;0<=u;u--)ua[u]<na&&(!Na[ua[u]]||
-this.isSymbolicFont)||(ua.splice(u,1),K.splice(u,1),Af++);if(this.isSymbolicFont){for(var hd=65535,id=0,u=0,X=K.length;u<X;u++)N=K[u].unicode,hd=Math.min(hd,N),id=Math.max(id,N);(id&65280)!=(hd&65280)&&(this.isSymbolicFont=!1)}5<Af&&(R("Switching TrueType encoding to MacRomanEncoding for "+this.name+" font"),zb=ab.MacRomanEncoding);if(Fb&&this.hasEncoding&&!this.isSymbolicFont){Pa=[];u=0;for(X=K.length;u<X;u++){var Xa=K[u].unicode,cc=ua[u];K[u].unicode+=hb;db[Xa]=K[u].unicode;var $=tb[cc]||zb[Xa];
-$ in Ja&&(N=Ja[$],N in Pa||(Pa[N]=!0,K.push({unicode:N,code:K[u].code}),ua.push(cc),db[Xa]=N))}this.useToFontChar=!0}else if(!this.isSymbolicFont&&(this.hasEncoding||c.glyphNames||0<Db.length)){for(var Ab=[],u=0,X=K.length;u<X;u++)Ab[K[u].unicode]=u;for(var zc=[],u=0,X=K.length;u<X;u++){var Xa=K[u].unicode,Bf=!1,cc=ua[u],$=tb[cc];$||($=Db[Xa]||zb[Xa],Bf=!0);if($ in Ja&&(N=Ja[$])&&Ab[N]!==u)zc[u]=N,Bf&&(db[Xa]=N),delete Ab[Xa]}for(L in zc)zc.hasOwnProperty(L)&&(N=zc[L],Ab[N]?K[L].unicode=kb++:(K[L].unicode=
-N,Ab[N]=L));this.useToFontChar=!0}if(this.isSymbolicFont){u=0;for(X=K.length;u<X;u++)Xa=K[u].unicode&255,K[u].unicode=db[Xa]=hf|Xa;this.useToFontChar=!0}var ec=K,fc=ua,Cf=c.glyphNames;if(Cf){for(var hh=ec.length,Rb={},Vb=[],$b=0;$b<hh;++$b){var gc=Cf[fc[$b]];gc&&(Rb[gc]=ec[$b].unicode,Vb[ec[$b].code]=gc)}c.glyphNameMap=Rb;c.hasEncoding||(c.baseEncoding=Vb)}else c.glyphNameMap={};this.glyphNameMap=c.glyphNameMap}0===K.length&&(K.push({unicode:61440,code:61440,glyph:".notdef"}),ua.push(0));l.data=sf(K,
-ua);for(var Gb=[],u=0,X=K.length;u<X;u++)Gb[K[u].unicode]=!0;this.unicodeIsEnabled=Gb;var Hb;if(Hb=A){var qb;var xc=new Jb(A.data),Ib=B(xc.getBytes(2));xc.getBytes(60);var Kb=B(xc.getBytes(2));if(4>Ib&&Kb&768)qb=!1;else{var Yb=B(xc.getBytes(2)),ic=B(xc.getBytes(2));qb=Yb>ic?!1:!0}Hb=!qb}Hb&&(z.splice(z.indexOf(A),1),A=null);if(!A){var jc={unitsPerEm:B([q.data[18],q.data[19]]),yMax:B([q.data[42],q.data[43]]),yMin:B([q.data[38],q.data[39]])-65536,ascent:B([m.data[4],m.data[5]]),descent:B([m.data[6],
-m.data[7]])-65536};z.push({tag:"OS/2",data:ta(tf(c,K,jc))})}n||z.push({tag:"post",data:ta(uf(c))});if(-1!=g.indexOf("name"))z.push({tag:"name",data:ta(gd(this.name))});else{u=0;for(X=z.length;u<X;u++)if(w=z[u],"name"===w.tag){var Lb;var rb=w,sb=(b.start?b.start:0)+rb.offset;b.pos=sb;var Mb=[[],[]],vb=rb.length,wb=sb+vb;if(!(0!==B(b.getBytes(2))||6>vb)){for(var kc=B(b.getBytes(2)),oc=B(b.getBytes(2)),eb=[],mc=0;mc<kc&&b.pos+12<=wb;mc++){var hc={platform:B(b.getBytes(2)),encoding:B(b.getBytes(2)),language:B(b.getBytes(2)),
-name:B(b.getBytes(2)),length:B(b.getBytes(2)),offset:B(b.getBytes(2))};(1==hc.platform&&0==hc.encoding&&0==hc.language||3==hc.platform&&1==hc.encoding&&1033==hc.language)&&eb.push(hc)}for(var mc=0,pc=eb.length;mc<pc;mc++){var nc=eb[mc],Sb=sb+oc+nc.offset;if(!(Sb+nc.length>wb)){b.pos=Sb;var Tb=nc.name;if(nc.encoding){for(var Cb="",Ra=0,qc=nc.length;Ra<qc;Ra+=2)Cb+=String.fromCharCode(B(b.getBytes(2)));Mb[1][Tb]=Cb}else Mb[0][Tb]=rc(b.getBytes(nc.length))}}}Lb=Mb;w.data=ta(gd(a,Lb));break}}z.sort(function(a,
-b){return(a.tag>b.tag)-(a.tag<b.tag)});u=0;for(X=z.length;u<X;u++){w=z[u];for(var Ub=[],Xb=w.data,ya=0,vc=Xb.length;ya<vc;ya++)Ub.push(Xb[ya]);rf(D,w.tag,Ub)}u=0;for(X=z.length;u<X;u++){w=z[u];Xb=w.data;for(D.file+=fd(Xb);D.file.length&3;)D.file+=String.fromCharCode(0)}return ta(D.file)},convert:function(a,b,c){var d={file:"",virtualOffset:144};qf("OTTO",d,9);var e=b.charstrings,f;a:{f=0;for(var g=e.length-1;f<g;f++)if(e[f]!=e[f+1]){f=!1;break a}f=!0}c.fixedPitch=f;var h={};for(f=0;f<e.length;++f)g=
-e[f],h[g.glyph]=g.unicode;this.glyphNameMap=h;if(!c.hasEncoding&&("Type1C"==c.subtype||"CIDFontType0C"==c.subtype)){h=[];for(f=0;f<e.length;++f)g=e[f],h[g.code]=g.glyph;c.baseEncoding=h}if("CIDFontType0C"==c.subtype){h=[];for(f=0;f<e.length;++f)g=e[f],h[g.code]=g.unicode;this.toFontChar=h}h=1/(c.fontMatrix||Da)[0];f=b.data;g=ta(tf(c,e));b=sf(e.slice(),"glyphIds"in b?b.glyphIds:null);var h=ta("\x00\u0001\x00\x00\x00\x00\u0010\x00\x00\x00\x00\x00_\u000f<\u00f5\x00\x00"+va(h)+"\x00\x00\x00\x00\u009e\x0B~'\x00\x00\x00\x00\u009e\x0B~'\x00\x00"+
-va(c.descent)+"\u000f\u00ff"+va(c.ascent)+C(c.italicAngle?2:0)+"\x00\u0011\x00\x00\x00\x00\x00\x00"),k=ta("\x00\u0001\x00\x00"+va(c.ascent)+va(c.descent)+"\x00\x00\u00ff\u00ff\x00\x00\x00\x00\x00\x00"+va(c.capHeight)+va(Math.tan(c.italicAngle)*c.xHeight)+"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+C(e.length+1)),j;j="\x00\x00\x00\x00";for(var l=0,n=e.length;l<n;l++){var p=e[l];j+=C("width"in p?p.width:0)+C(0)}j=ta(j);a={"CFF ":f,"OS/2":g,cmap:b,head:h,hhea:k,hmtx:j,maxp:ta("\x00\x00P\x00"+
-C(e.length+1)),name:ta(gd(a)),post:ta(uf(c))};for(var m in a)rf(d,m,a[m]);for(m in a)d.file+=fd(a[m]);return ta(d.file)},buildToFontChar:function(a){for(var b=[],c=hb,d=0,e=a.length;d<e;d++){var f=a[d],g="object"===typeof f?c++:f;"undefined"!==typeof f&&(b[d]=g)}return b},rebuildToUnicode:function(a){var b=a.firstChar,c=a.lastChar,d=[];if(a.composite)for(a=0==this.cidToUnicode.length;b<=c;b++){var e=b;d[b]=a?e:this.cidToUnicode[e]}else for(;b<=c;b++)(e=a.differences[b])||(e=a.baseEncoding[b]),e&&
-e in Ja&&(d[b]=Ja[e]);this.toUnicode=d},loadCidToUnicode:function(a){if(a.cidSystemInfo){var b=[],c=[];this.cidToUnicode=b;this.unicodeToCID=c;var d=a.cidSystemInfo,e;d&&(e=Zg[d.registry+"-"+d.ordering]);if(e){var d=1,f,g,h,k;f=0;for(k=e.length;f<k;++f)if(h=e[f],I(h)){var j=h.length;for(g=0;g<j;g++)b[d]=h[g],c[h[g]]=d;d++}else if("object"===typeof h)if(j=h.f){h=h.c;for(g=0;g<j;++g)b[d]=h,c[h]=d,d++,h++}else d+=h.s;else h&&(b[d]=h,c[h]=d),d++;if((a=a.cidEncoding)&&0!==a.indexOf("Identity-"))this.cidToUnicode=
-[]}}},bindDOM:function(){if(!this.data)return null;var a=rc(this.data),b=this.loadedName,a="url(data:"+this.mimetype+";base64,"+window.btoa(a)+");",b="@font-face { font-family:'"+b+"';src:"+a+"}",c=document.getElementById("PDFJS_FONT_STYLE_TAG");c||(c=document.createElement("style"),c.id="PDFJS_FONT_STYLE_TAG",document.documentElement.getElementsByTagName("head")[0].appendChild(c));c=c.sheet;c.insertRule(b,c.cssRules.length);PDFJS.pdfBug&&("FontInspector"in P&&P.FontInspector.enabled)&&P.FontInspector.fontAdded(this,
-a);return b},get spaceWidth(){if("_shadowWidth"in this)return this._shadowWidth;for(var a=["space","minus","one","i"],b,c=0,d=a.length;c<d;c++){b=a[c];if(b in this.widths){b=this.widths[b];break}b=Ja[b];var e=0;this.composite&&(e=this.unicodeToCID[b]);!e&&"toUnicode"in this&&(e=this.toUnicode.indexOf(b));0<e||(e=b);if(b=this.widths[e])break}return this._shadowWidth=b=b||this.defaultWidth},charToGlyph:function(a){var b,c,d;c=this.widths[a];switch(this.type){case "CIDFontType0":this.noUnicodeAdaptation&&
-(c=this.widths[this.unicodeToCID[a]||a]);b=this.toFontChar[a]||a;break;case "CIDFontType2":this.noUnicodeAdaptation&&(c=this.widths[this.unicodeToCID[a]||a]);b=this.toFontChar[a]||a;break;case "Type1":b=this.differences[a]||this.encoding[a];oa(c)||(c=this.widths[b]);if(this.noUnicodeAdaptation){a:switch(b=Ja[b]||a,b){case 63721:case 63193:b=169;break a}break}b=this.glyphNameMap[b]||Ja[b]||a;break;case "Type3":b=this.differences[a]||this.encoding[a];d=this.charProcOperatorList[b];b=a;break;case "TrueType":if(this.useToFontChar){b=
-this.toFontChar[a]||a;break}(b=this.differences[a]||this.encoding[a])||(b=ab.StandardEncoding[a]);oa(c)||(c=this.widths[b]);if(this.noUnicodeAdaptation){b=Ja[b]||a;break}if(!this.hasEncoding||this.isSymbolicFont){b=this.useToFontChar?this.toFontChar[a]:a;break}b=b in this.glyphNameMap?this.glyphNameMap[b]:Ja[b];break;default:R("Unsupported font type: "+this.type)}var e=!("toUnicode"in this)?a:this.toUnicode[a]||a;"number"===typeof e&&(e=String.fromCharCode(e));c=oa(c)?c:this.defaultWidth;a=this.unicodeIsEnabled?
-!this.unicodeIsEnabled[b]:!1;return{fontChar:String.fromCharCode(b),unicode:e,width:c,disabled:a,operatorList:d}},charsToGlyphs:function(a){var b=this.charsCache,c;if(b&&(c=b[a]))return c;b||(b=this.charsCache=Object.create(null));c=[];var d=a,e,f=this.cidEncoding;f&&((e=jf[f])?a=e(a):0!==f.indexOf("Uni")&&0!==f.indexOf("Identity-")&&R("Unsupported CMap: "+f));if(!e&&this.wideChars){var g=a.length-1;for(e=0;e<g;e++){var f=B([a.charCodeAt(e++),a.charCodeAt(e)]),h=this.charToGlyph(f);c.push(h);32==
-f&&c.push(null)}}else{e=0;for(g=a.length;e<g;++e)f=a.charCodeAt(e),h=this.charToGlyph(f),c.push(h),32==f&&c.push(null)}return b[d]=c}};sb=of;var rb,Df=function(a){this.error=a};Df.prototype={charsToGlyphs:function(){return[]},exportData:function(){return{error:this.error}}};rb=Df;var jd;jd=function(a){this.index=a};var kd=".notdef;space;exclam;quotedbl;numbersign;dollar;percent;ampersand;quoteright;parenleft;parenright;asterisk;plus;comma;hyphen;period;slash;zero;one;two;three;four;five;six;seven;eight;nine;colon;semicolon;less;equal;greater;question;at;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;bracketleft;backslash;bracketright;asciicircum;underscore;quoteleft;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z;braceleft;bar;braceright;asciitilde;exclamdown;cent;sterling;fraction;yen;florin;section;currency;quotesingle;quotedblleft;guillemotleft;guilsinglleft;guilsinglright;fi;fl;endash;dagger;daggerdbl;periodcentered;paragraph;bullet;quotesinglbase;quotedblbase;q
 uotedblright;guillemotright;ellipsis;perthousand;questiondown;grave;acute;circumflex;tilde;macron;breve;dotaccent;dieresis;ring;cedilla;hungarumlaut;ogonek;caron;emdash;AE;ordfeminine;Lslash;Oslash;OE;ordmasculine;ae;dotlessi;lslash;oslash;oe;germandbls;onesuperior;logicalnot;mu;trademark;Eth;onehalf;plusminus;Thorn;onequarter;divide;brokenbar;degree;thorn;threequarters;twosuperior;registered;minus;eth;multiply;threesuperior;copyright;Aacute;Acircumflex;Adieresis;Agrave;Aring;Atilde;Ccedilla;Eacute;Ecircumflex;Edieresis;Egrave;Iacute;Icircumflex;Idieresis;Igrave;Ntilde;Oacute;Ocircumflex;Odieresis;Ograve;Otilde;Scaron;Uacute;Ucircumflex;Udieresis;Ugrave;Yacute;Ydieresis;Zcaron;aacute;acircumflex;adieresis;agrave;aring;atilde;ccedilla;eacute;ecircumflex;edieresis;egrave;iacute;icircumflex;idieresis;igrave;ntilde;oacute;ocircumflex;odieresis;ograve;otilde;scaron;uacute;ucircumflex;udieresis;ugrave;yacute;ydieresis;zcaron;exclamsmall;Hungarumlautsmall;dollaroldstyle;dollarsuper
 ior;ampersandsmall;Acutesmall;parenleftsuperior;parenrightsuperior;266 ff;onedotenleader;zerooldstyle;oneoldstyle;twooldstyle;threeoldstyle;fouroldstyle;fiveoldstyle;sixoldstyle;sevenoldstyle;eightoldstyle;nineoldstyle;commasuperior;threequartersemdash;periodsuperior;questionsmall;asuperior;bsuperior;centsuperior;dsuperior;esuperior;isuperior;lsuperior;msuperior;nsuperior;osuperior;rsuperior;ssuperior;tsuperior;ff;ffi;ffl;parenleftinferior;parenrightinferior;Circumflexsmall;hyphensuperior;Gravesmall;Asmall;Bsmall;Csmall;Dsmall;Esmall;Fsmall;Gsmall;Hsmall;Ismall;Jsmall;Ksmall;Lsmall;Msmall;Nsmall;Osmall;Psmall;Qsmall;Rsmall;Ssmall;Tsmall;Usmall;Vsmall;Wsmall;Xsmall;Ysmall;Zsmall;colonmonetary;onefitted;rupiah;Tildesmall;exclamdownsmall;centoldstyle;Lslashsmall;Scaronsmall;Zcaronsmall;Dieresissmall;Brevesmall;Caronsmall;Dotaccentsmall;Macronsmall;figuredash;hypheninferior;Ogoneksmall;Ringsmall;Cedillasmall;questiondownsmall;oneeighth;threeeighths;fiveeighths;seveneighths;oneth
 ird;twothirds;zerosuperior;foursuperior;fivesuperior;sixsuperior;sevensuperior;eightsuperior;ninesuperior;zeroinferior;oneinferior;twoinferior;threeinferior;fourinferior;fiveinferior;sixinferior;seveninferior;eightinferior;nineinferior;centinferior;dollarinferior;periodinferior;commainferior;Agravesmall;Aacutesmall;Acircumflexsmall;Atildesmall;Adieresissmall;Aringsmall;AEsmall;Ccedillasmall;Egravesmall;Eacutesmall;Ecircumflexsmall;Edieresissmall;Igravesmall;Iacutesmall;Icircumflexsmall;Idieresissmall;Ethsmall;Ntildesmall;Ogravesmall;Oacutesmall;Ocircumflexsmall;Otildesmall;Odieresissmall;OEsmall;Oslashsmall;Ugravesmall;Uacutesmall;Ucircumflexsmall;Udieresissmall;Yacutesmall;Thornsmall;Ydieresissmall;001.000;001.001;001.002;001.003;Black;Bold;Book;Light;Medium;Regular;Roman;Semibold".split(";"),
-Ef=new function(){function a(a,b,c){for(var d=[],e="",f=a.length,g=0;g<f;g++)e=a[g],d[g]=e^b>>8,b=52845*(e+b)+22719&65535;return d.slice(c)}function b(a,b){for(var c=[],d=a.length-1,e=0;e<b;e++)if(0>d)c.unshift({arg:[0],value:0,offset:0}),R("Malformed charstring stack: not enough values on stack.");else{var f=a[d];if("div"===f){var f=a[d-2],g=a[d-1];if(!F(f)||!F(g))R("Malformed charsting stack: expected ints on stack for div."),f=0,g=1;c.unshift({arg:[f,g,"div"],value:f/g,offset:d-2});d-=3}else F(f)?
-(c.unshift({arg:a.slice(d,d+1),value:f,offset:d}),d--):R("Malformed charsting stack: found bad token "+f+".")}return c}function c(a){for(var c=[],d=0,e=0,n=!1,p="",m=a.length,r=0;r<m;r++){p=a[r];if(32>p){var q=null;if(p==g){var A=a[++r];if(16==A){for(var q=c.pop(),p=c.pop(),t=0;t<p;t++)c.push("drop");if(3>q)continue;if(3==q){c.push(3);r++;continue}0==p||s("callothersubr with arguments is not supported");c.push(new jd(q));continue}else if(7==A){t=b(c,4);q=t[0];p=t[1];c=t[2];d=q.value;e=c.value;c=c.arg;
-c=c.concat(q.arg,p.arg);c.push("rmoveto");continue}else if(17==A||33==A)continue;else if(6==A)t=b(c,5),q=t[0],c.splice(q.offset,q.arg.length);else if(!dd&&(1==A||2==A)){c.push("drop","drop","drop","drop","drop","drop");continue}q=f["12"][A]}else{if(13==p){t=b(c,2);q=t[0];p=t[1];d=q.value;e=p.value;c=p.arg;c=c.concat(q.arg);c.push("hmoveto");continue}else if(10==p){if(3>c[c.length-1]){switch(c.pop()){case 1:n=!0;break;case 0:q=b(c,17),c.splice(q[0].offset,c.length-q[0].offset),c=c.concat(q[0].arg,
-q[2].arg,["add"],q[1].arg,q[3].arg,["add"],q[4].arg,q[5].arg,q[6].arg,q[7].arg,q[8].arg,q[9].arg,q[10].arg,q[11].arg,q[12].arg,q[13].arg,q[14].arg,["flex"]),n=!1}continue}}else if(21==p&&n)continue;else if(22==p&&n){c.push(0);continue}else if(4==p&&n){q=b(c,1);c.splice(q[0].offset,0,0);continue}else if(!dd&&(1==p||3==p)){c.push("drop","drop");continue}q=f[p]}if(!q&&r<m)continue;else if(q){if(-1==q&&(R("Support for Type1 command "+p+" ("+A+") is not implemented in charstring: "+c),12==p))switch(A){case 7:c.push("drop",
-"drop","drop","drop");continue;case 8:c.push("drop");continue}}else break;p=q}else p=246>=p?p-139:250>=p?256*(p-247)+a[++r]+108:254>=p?-(256*(p-251))-a[++r]-108:(a[++r]&255)<<24|(a[++r]&255)<<16|(a[++r]&255)<<8|(a[++r]&255)<<0;c.push(p)}return{charstring:c,width:e,lsb:d}}function d(a,b){for(var c=b;"["!=a[b++];)c++;c++;for(var d=0;"]"!=a[b++];)d++;a=a.substr(c,d);a=a.trim();a=a.replace(/\s+/g," ");for(var c=a.split(" "),d=0,e=c.length;d<e;d++)c[d]=parseFloat(c[d]||0);return c}function e(a){return" "==
-a||"\n"==a||"\r"==a}var f={1:"hstem",3:"vstem",4:"vmoveto",5:"rlineto",6:"hlineto",7:"vlineto",8:"rrcurveto",9:null,10:"callsubr",11:"return",12:{"0":null,1:"vstem",2:"hstem",6:"endchar",7:-1,10:"add",11:"sub",12:"div",16:"callothersubr",17:"pop",33:null},13:"hsbw",14:"endchar",21:"rmoveto",22:"hmoveto",30:"vhcurveto",31:"hvcurveto"},g=12;this.extractFontProgram=function(b){b=a(b,55665,4);for(var f="",g=0,l=b.length;g<l;g++)f+=String.fromCharCode(b[g]);for(var l=!1,n={subrs:[],charstrings:[],properties:{privateData:{lenIV:4}}},
-p="",m="",r=0,q="",A=f.length,g=0;g<A;g++){var t=function(){for(;g<A&&e(f[g]);)++g;for(var a="";g<A&&!e(f[g]);)a+=f[g++];return a},q=f[g];if(l&&("RD"==m||"-|"==m)){g++;var s=b.slice(g,g+r),v=n.properties.privateData.lenIV,s=a(s,4330,v),s=c(s);l?n.charstrings.push({glyph:p,data:s.charstring,lsb:s.lsb,width:s.width}):n.subrs.push(s.charstring);g+=r;m=""}else if(e(q))r=parseInt(m,10)|0,m="";else if(m+=q,l){if("/"==q)for(m=p="";" "!=(q=f[++g]);)p+=q}else switch(m){case "/CharString":l=!0;break;case "/Subrs":++g;
-q=parseInt(t(),10);t();for(var x=0;x<q;++x){v=t();if("ND"==v||"|-"==v||"noaccess"==v)break;var z=parseInt(t(),10);z>x&&(x=z);r=parseInt(t(),10);t();s=b.slice(g+1,g+1+r);v=n.properties.privateData.lenIV;s=a(s,4330,v);s=c(s);g=g+1+r;v=t();"noaccess"==v&&t();n.subrs[z]=s.charstring}break;case "/BlueValues":case "/OtherBlues":case "/FamilyBlues":case "/FamilyOtherBlues":t=d(f,g+1);0<t.length&&(0==t.length%2&&dd)&&(n.properties.privateData[m.substring(1)]=t);break;case "/StemSnapH":case "/StemSnapV":n.properties.privateData[m.substring(1)]=
-d(f,g+1);break;case "/StdHW":case "/StdVW":n.properties.privateData[m.substring(1)]=d(f,g+1)[0];break;case "/BlueShift":case "/lenIV":case "/BlueFuzz":case "/BlueScale":case "/LanguageGroup":case "/ExpansionFactor":t=n.properties.privateData;q=m.substring(1);for(x=g+1;" "==f[x];)x++;z=x;for(s=0;" "!=f[x++];)s++;x=parseFloat(f.substr(z,s)||0);t[q]=x;break;case "/ForceBold":t=n.properties.privateData;q=m.substring(1);for(x=g+1;" "==f[x];)x++;z=x;s=0;for(v=f.length;x<v&&" "!=f[x++];)s++;x="true"===f.substr(z,
-s)?1:0;t[q]=x}}return n};this.extractFontHeader=function(a,b){for(var c="",f=0,g=a.length;f<g;f++)c+=String.fromCharCode(a[f]);for(var p="",m=c.length,f=0;f<m;f++){var g=function(){for(var a=c[f];f<m&&(e(a)||"/"==a);)a=c[++f];for(var b="";f<m&&!(e(a)||"/"==a);)b+=a,a=c[++f];return b},r=c[f];if(e(r)){switch(p){case "/FontMatrix":g=d(c,f+1);b.fontMatrix=g;break;case "/Encoding":var q=g();if(/^\d+$/.test(q)){r=[];q=parseInt(q,10);g();for(var s=0;s<q;s++)if(p=g(),"dup"==p){var p=parseInt(g(),10),t=g();
-r[p]=t;g()}}else r=ab[q];!b.hasEncoding&&r&&(b.baseEncoding=r)}p=""}else p+=r}}},nf=function(a,b,c){var d=b.getBytes(c.length1);Ef.extractFontHeader(d,c);b=b.getBytes(c.length2);b=Ef.extractFontProgram(b);for(var e in b.properties)c[e]=b.properties[e];e=this.getOrderedCharStrings(b.charstrings,c);d=this.getType2Charstrings(e);b=this.getType2Subrs(b.subrs);this.charstrings=e;this.data=this.wrap(a,d,this.charstrings,b,c)};nf.prototype={getOrderedCharStrings:function(a){var b=[],c,d,e,f=hb;c=0;for(d=
-a.length;c<d;c++){var g=a[c];e=g.glyph;var h=e in Ja?Ja[e]:f++;b.push({glyph:e,unicode:h,gid:c,charstring:g.data,width:g.width,lsb:g.lsb})}b.sort(function(a,b){return a.unicode-b.unicode});return b},getType2Charstrings:function(a){for(var b=[],c=a.length,d=[],e=0;e<c;e++)d.push(a[e].charstring.slice());for(e=0;e<c;e++)b.push(this.flattenCharstring(d,e));return b},getType2Subrs:function(a){for(var b=0,c=a.length,b=1133>c?107:33769>c?1131:32768,d=[],e=0;e<b;e++)d.push([11]);for(e=0;e<c;e++)d.push(this.flattenCharstring(a,
-e));return d},commandsMap:{hstem:1,vstem:3,vmoveto:4,rlineto:5,hlineto:6,vlineto:7,rrcurveto:8,callsubr:10,"return":11,add:[12,10],sub:[12,11],div:[12,12],exch:[12,28],flex:[12,35],drop:[12,18],endchar:14,rmoveto:21,hmoveto:22,vhcurveto:30,hvcurveto:31},flattenCharstring:function(a,b){var c=a[b];if(!c)return[11];for(var d=this.commandsMap,e=0;e<c.length;e++){var f=c[e];if("string"===typeof f){var g=d[f];g||s("Unknow command: "+f);I(g)?c.splice(e++,1,g[0],g[1]):c[e]=g}else f instanceof jd?((f=a[f.index])?
-(g=f.indexOf("return"),0<=g&&(f=f.slice(0,g)),c.splice.apply(c,[e,1].concat(f))):c.splice(e,1),e--):(32E3<f?(f/=c[e+1],c.splice(e,3,28,f>>8&255,f&255)):c.splice(e,1,28,f>>8&255,f&255),e+=2)}return c},wrap:function(a,b,c,d,e){var f=new ld;f.header=new md(1,0,4,4);f.names=[a];var g=new oc;g.setByName("version",0);g.setByName("Notice",1);g.setByName("FullName",2);g.setByName("FamilyName",3);g.setByName("Weight",4);g.setByName("Encoding",null);g.setByName("FontMatrix",e.fontMatrix);g.setByName("FontBBox",
-e.bbox);g.setByName("charset",null);g.setByName("CharStrings",null);g.setByName("Private",null);f.topDict=g;g=new eb;g.add("Version 0.11");g.add("See original notice");g.add(a);g.add(a);g.add("Medium");f.strings=g;f.globalSubrIndex=new Ya;var g=b.length,h=[0];for(a=0;a<g;a++){var k=kd.indexOf(c[a].glyph);-1==k&&(k=0);h.push(k>>8&255,k&255)}f.charset=new nb(!1,0,[],h);c=new Ya;c.add([139,14]);for(a=0;a<g;a++)c.add(b[a]);f.charStrings=c;b=new nd;b.setByName("Subrs",null);g="BlueValues OtherBlues FamilyBlues FamilyOtherBlues StemSnapH StemSnapV BlueShift BlueFuzz BlueScale LanguageGroup ExpansionFactor ForceBold StdHW StdVW".split(" ");
-a=0;for(c=g.length;a<c;a++)h=g[a],e.privateData.hasOwnProperty(h)&&b.setByName(h,e.privateData[h]);f.topDict.privateDict=b;e=new Ya;a=0;for(c=d.length;a<c;a++)e.add(d[a]);b.subrsIndex=e;return(new od(f)).compile()}};var mf,Gf=function(a,b){this.properties=b;var c=(new Ff(a,b)).parse(!0),d=new od(c);this.readExtra(c);try{this.data=d.compile()}catch(e){R("Failed to compile font "+b.loadedName),this.data=a}};Gf.prototype={readExtra:function(a){a=this.getCharStrings(a.charset.charset,a.encoding?a.encoding.encoding:
-null);for(var b=[],c=0,d=a.length;c<d;c++)b.push(a[c].gid);this.charstrings=a;this.glyphIds=b},getCharStrings:function(a,b){var c=[],d=[],e=[],f=[];if(null!==b)for(var g in b)f[b[g]]=g|0;else f=a;g=".notdef"==a[0]?1:0;for(var h=a.length;g<h;g++){var k=a[g],j=f[g];!j||Vd(j)?e.push(g):(c.push({unicode:j,code:j,gid:g,glyph:k}),d[j]=!0)}h=hb;k=0;for(j=e.length;k<j;++k){for(g=e[k];h in d;)h++;var l=h++;c.push({unicode:l,code:f[g]||0,gid:g,glyph:a[g]})}c.sort(function(a,b){return a.unicode-b.unicode});
-return c}};mf=Gf;var Ff,Hf=function(a,b){this.bytes=a.getBytes();this.properties=b},If=[null,{id:"hstem",min:2,resetStack:!0},null,{id:"vstem",min:2,resetStack:!0},{id:"vmoveto",min:1,resetStack:!0},{id:"rlineto",min:2,resetStack:!0},{id:"hlineto",min:1,resetStack:!0},{id:"vlineto",min:1,resetStack:!0},{id:"rrcurveto",min:6,resetStack:!0},null,{id:"callsubr",min:1,undefStack:!0},{id:"return",min:0,resetStack:!0},null,null,null,null,null,null,{id:"hstemhm",min:2,resetStack:!0},null,null,{id:"rmoveto",
-min:2,resetStack:!0},{id:"hmoveto",min:1,resetStack:!0},{id:"vstemhm",min:2,resetStack:!0},{id:"rcurveline",min:8,resetStack:!0},{id:"rlinecurve",min:8,resetStack:!0},{id:"vvcurveto",min:4,resetStack:!0},{id:"hhcurveto",min:4,resetStack:!0},null,{id:"callgsubr",min:1,undefStack:!0},{id:"vhcurveto",min:4,resetStack:!0},{id:"hvcurveto",min:4,resetStack:!0}],ih=[null,null,null,{id:"and",min:2,stackDelta:-1},{id:"or",min:2,stackDelta:-1},{id:"not",min:2,stackDelta:-1},null,null,null,{id:"abs",min:1,stackDelta:0},
-{id:"add",min:2,stackDelta:-1},{id:"sub",min:2,stackDelta:-1},{id:"div",min:2,stackDelta:-1},null,{id:"neg",min:1,stackDelta:0},{id:"eq",min:2,stackDelta:-1},null,null,{id:"drop",min:1,stackDelta:-1},null,{id:"put",min:2,stackDelta:-2},{id:"get",min:1,stackDelta:0},{id:"ifelse",min:4,stackDelta:-3},{id:"random",min:0,stackDelta:1},{id:"mul",min:2,stackDelta:-1},null,{id:"sqrt",min:1,stackDelta:0},{id:"dup",min:1,stackDelta:1},{id:"exch",min:2,stackDelta:0},{id:"index",min:2,stackDelta:0},{id:"roll",
-min:3,stackDelta:-2},null,null,null,{id:"hflex",min:7,resetStack:!0},{id:"flex",min:13,resetStack:!0},{id:"hflex1",min:9,resetStack:!0},{id:"flex1",min:11,resetStack:!0}];Hf.prototype={parse:function(a){var b=this.properties,c=new ld;this.cff=c;var d=this.parseHeader(),e=this.parseIndex(d.endPos),f=this.parseIndex(e.endPos),g=this.parseIndex(f.endPos),h=this.parseIndex(g.endPos),f=this.parseDict(f.obj.get(0)),f=this.createDict(oc,f,c.strings);c.header=d.obj;c.names=this.parseNameIndex(e.obj);c.strings=
-this.parseStringIndex(g.obj);c.topDict=f;c.globalSubrIndex=h.obj;this.parsePrivateDict(c.topDict);c.isCIDFont=f.hasName("ROS");d=f.getByName("CharStrings");c.charStrings=this.parseCharStrings(d);if(d=f.getByName("FontMatrix"))b.fontMatrix=d;if(d=f.getByName("FontBBox"))b.ascent=d[3],b.descent=d[1],b.ascentScaled=!0;if(c.isCIDFont){b=this.parseIndex(f.getByName("FDArray")).obj;d=0;for(e=b.count;d<e;++d)g=b.get(d),g=this.createDict(oc,this.parseDict(g),c.strings),this.parsePrivateDict(g),c.fdArray.push(g);
-b=null;d=this.parseCharsets(f.getByName("charset"),c.charStrings.count,c.strings,!0);c.fdSelect=this.parseFDSelect(f.getByName("FDSelect"),c.charStrings.count)}else d=this.parseCharsets(f.getByName("charset"),c.charStrings.count,c.strings,!1),b=this.parseEncoding(f.getByName("Encoding"),b,c.strings,d.charset);c.charset=d;c.encoding=b;if(!c.isCIDFont||!a)return c;if(1!==c.fdArray.length)return R("Unable to normalize CID font in CFF data -- using font as is"),c;g=c.fdArray[0];g.setByKey(17,f.getByName("CharStrings"));
-g.removeByName("CIDFontVersion");g.removeByName("CIDFontRevision");g.removeByName("CIDFontType");g.removeByName("CIDCount");g.removeByName("UIDBase");c.topDict=g;c.isCIDFont=!1;delete c.fdArray;delete c.fdSelect;return c},parseHeader:function(){for(var a=this.bytes,b=0;1!=a[b];)++b;0!=b&&(aa("cff data is shifted"),this.bytes=a=a.subarray(b));b=a[2];return{obj:new md(a[0],a[1],b,a[3]),endPos:b}},parseDict:function(a){function b(){var b=a[c++];if(30===b){for(var b="",d=["0","1","2","3","4","5","6",
-"7","8","9",".","E","E-",null,"-"],e=a.length;c<e;){var f=a[c++],g=f>>4,f=f&15;if(15==g)break;b+=d[g];if(15==f)break;b+=d[f]}return parseFloat(b)}if(28===b)return b=a[c++],b=(b<<24|a[c++]<<16)>>16;if(29===b)return b=a[c++],b=b<<8|a[c++],b=b<<8|a[c++],b=b<<8|a[c++];if(32<=b&&246>=b)return b-139;if(247<=b&&250>=b)return 256*(b-247)+a[c++]+108;if(251<=b&&254>=b)return-(256*(b-251))-a[c++]-108;s("255 is not a valid DICT command");return-1}for(var c=0,d=[],e=[],c=0,f=a.length;c<f;){var g=a[c];21>=g?(12===
-g&&(g=g<<8|a[++c]),e.push([g,d]),d=[],++c):d.push(b())}return e},parseIndex:function(a){var b=new Ya,c=this.bytes,d=c[a++]<<8|c[a++],e=[],f=a;if(0!=d){for(var f=c[a++],g=a+(d+1)*f-1,h=0,k=d+1;h<k;++h){for(var j=0,l=0;l<f;++l)j<<=8,j+=c[a++];e.push(g+j)}f=e[d]}h=0;for(k=e.length-1;h<k;++h)b.add(c.subarray(e[h],e[h+1]));return{obj:b,endPos:f}},parseNameIndex:function(a){for(var b=[],c=0,d=a.count;c<d;++c){for(var e=a.get(c),f=Math.min(e.length,127),g=[],h=0;h<f;++h){var k=e[h];g[h]=0===h&&0===k?k:33>
-k||126<k||91===k||93===k||40===k||41===k||123===k||125===k||60===k||62===k||47===k||37===k?95:k}b.push(String.fromCharCode.apply(null,g))}return b},parseStringIndex:function(a){for(var b=new eb,c=0,d=a.count;c<d;++c){var e=a.get(c);b.add(String.fromCharCode.apply(null,e))}return b},createDict:function(a,b,c){a=new a(c);c=0;for(var d=b.length;c<d;++c){var e=b[c];a.setByKey(e[0],e[1])}return a},parseCharStrings:function(a){a=this.parseIndex(a).obj;for(var b=a.count,c=0;c<b;c++){for(var d=0,e=!0,f=0,
-g=!0,h=a.get(c),k=h.length,j=0;j<k;){var l=h[j++],n=null;12==l?(l=h[j++],0==l?(h[j-2]=139,h[j-1]=22,d=0):n=ih[l]):28===l?(j+=2,d++):14==l?4<=d&&(d-=4):32<=l&&246>=l?d++:247<=l&&254>=l?(j++,d++):255==l?(j+=4,d++):18==l||23==l?(f+=d>>1,n=If[l]):19==l||20==l?(f+=d>>1,j+=f+7>>3,d=0):n=If[l];if(n){if("min"in n&&!e&&d<n.min){R("Not enough parameters for "+n.id+"; actual: "+d+", expected: "+n.min);g=!1;break}"stackDelta"in n?d+=n.stackDelta:n.resetStack?(d=0,e=!1):n.undefStack&&(d=0,e=!0)}}g||a.set(c,new Uint8Array([14]))}return a},
-parsePrivateDict:function(a){if(a.hasName("Private")){var b=a.getByName("Private");if(!I(b)||2!==b.length)a.removeByName("Private");else{var c=b[0],b=b[1];0===c||b>=this.bytes.length?a.removeByName("Private"):(c=this.bytes.subarray(b,b+c),c=this.parseDict(c),c=this.createDict(nd,c,a.strings),a.privateDict=c,c.getByName("Subrs")&&(a=c.getByName("Subrs"),b+=a,0===a||b>=this.bytes.length?c.removeByName("Subrs"):(a=this.parseIndex(b),c.subrsIndex=a.obj)))}}},parseCharsets:function(a,b,c,d){if(0==a)return new nb(!0,
-pd.ISO_ADOBE,Wg);if(1==a)return new nb(!0,pd.EXPERT,Xg);if(2==a)return new nb(!0,pd.EXPERT_SUBSET,Yg);var e=this.bytes,f=a,g=e[a++],h=[".notdef"];b-=1;switch(g){case 0:for(var k=0;k<b;k++){var j=e[a++]<<8|e[a++];h.push(d?j:c.get(j))}break;case 1:for(;h.length<=b;)for(var j=e[a++]<<8|e[a++],l=e[a++],k=0;k<=l;k++)h.push(d?j++:c.get(j++));break;case 2:for(;h.length<=b;){j=e[a++]<<8|e[a++];l=e[a++]<<8|e[a++];for(k=0;k<=l;k++)h.push(d?j++:c.get(j++))}break;default:s("Unknown charset format")}a=e.subarray(f,
-a);return new nb(!1,g,h,a)},parseEncoding:function(a,b,c,d){var e={},f=this.bytes,g=!1,h,k=null;if(0==a||1==a){g=!0;a=(h=a)?ab.ExpertEncoding:ab.StandardEncoding;var j=0;for(b=d.length;j<b;j++)c=a.indexOf(d[j]),-1!=c&&(e[c]=j)}else{d=a;h=f[a++];switch(h&127){case 0:k=f[a++];for(j=1;j<=k;j++)e[f[a++]]=j;break;case 1:for(var k=f[a++],l=1,j=0;j<k;j++)for(var n=f[a++],p=f[a++],m=n;m<=n+p;m++)e[m]=l++;break;default:s("Unknow encoding format: "+h+" in CFF")}j=a;if(h&128){f[d]&=127;k=f[a++];for(l=0;l<k;l++)n=
-f[a++],p=(f[a++]<<8)+(f[a++]&255),e[n]=b.differences.indexOf(c.get(p))}k=f.subarray(d,j)}return new Jf(g,h&127,e,k)},parseFDSelect:function(a,b){var c=a,d=this.bytes,e=d[a++],f=[];switch(e){case 0:for(e=0;e<b;++e){var g=d[a++];f.push(g)}break;case 3:g=d[a++]<<8|d[a++];for(e=0;e<g;++e)for(var h=d[a++]<<8|d[a++],k=d[a++],j=d[a]<<8|d[a+1];h<j;++h)f.push(k);a+=2;break;default:s("Unknown fdselect format "+e)}return new Kf(f,d.subarray(c,a))}};Ff=Hf;var ld;ld=function(){this.header=null;this.names=[];this.topDict=
-null;this.strings=new eb;this.charStrings=this.charset=this.encoding=this.globalSubrIndex=null;this.fdArray=[];this.fdSelect=null;this.isCIDFont=!1};var md;md=function(a,b,c,d){this.major=a;this.minor=b;this.hdrSize=c;this.offSize=d};var eb,Lf=function(){this.strings=[]};Lf.prototype={get:function(a){return 0<=a&&390>=a?kd[a]:a-391<=this.strings.length?this.strings[a-391]:kd[0]},add:function(a){this.strings.push(a)},get count(){return this.strings.length}};eb=Lf;var Ya,Mf=function(){this.objects=
-[];this.length=0};Mf.prototype={add:function(a){this.length+=a.length;this.objects.push(a)},set:function(a,b){this.length+=b.length-this.objects[a].length;this.objects[a]=b},get:function(a){return this.objects[a]},get count(){return this.objects.length}};Ya=Mf;var ia=function(a,b){this.keyToNameMap=a.keyToNameMap;this.nameToKeyMap=a.nameToKeyMap;this.defaults=a.defaults;this.types=a.types;this.opcodes=a.opcodes;this.order=a.order;this.strings=b;this.values={}};ia.prototype={setByKey:function(a,b){if(!(a in
-this.keyToNameMap))return!1;if(0===b.length)return!0;var c=this.types[a];if("num"===c||"sid"===c||"offset"===c)b=b[0];this.values[a]=b;return!0},setByName:function(a,b){a in this.nameToKeyMap||s('Invalid dictionary name "'+a+'"');this.values[this.nameToKeyMap[a]]=b},hasName:function(a){return this.nameToKeyMap[a]in this.values},getByName:function(a){a in this.nameToKeyMap||s('Invalid dictionary name "'+a+'"');a=this.nameToKeyMap[a];return!(a in this.values)?this.defaults[a]:this.values[a]},removeByName:function(a){delete this.values[this.nameToKeyMap[a]]}};
-ia.createTables=function(a){for(var b={keyToNameMap:{},nameToKeyMap:{},defaults:{},types:{},opcodes:{},order:[]},c=0,d=a.length;c<d;++c){var e=a[c],f=I(e[0])?(e[0][0]<<8)+e[0][1]:e[0];b.keyToNameMap[f]=e[1];b.nameToKeyMap[e[1]]=f;b.types[f]=e[2];b.defaults[f]=e[3];b.opcodes[f]=I(e[0])?e[0]:[e[0]];b.order.push(f)}return b};var oc,Nf=function(a){null===qd&&(qd=ia.createTables(jh));ia.call(this,qd,a);this.privateDict=null},jh=[[[12,30],"ROS",["sid","sid","num"],null],[[12,20],"SyntheticBase","num",null],
-[0,"version","sid",null],[1,"Notice","sid",null],[[12,0],"Copyright","sid",null],[2,"FullName","sid",null],[3,"FamilyName","sid",null],[4,"Weight","sid",null],[[12,1],"isFixedPitch","num",0],[[12,2],"ItalicAngle","num",0],[[12,3],"UnderlinePosition","num",-100],[[12,4],"UnderlineThickness","num",50],[[12,5],"PaintType","num",0],[[12,6],"CharstringType","num",2],[[12,7],"FontMatrix","num num num num num num".split(" "),[0.0010,0,0,0.0010,0,0]],[13,"UniqueID","num",null],[5,"FontBBox",["num","num",
-"num","num"],[0,0,0,0]],[[12,8],"StrokeWidth","num",0],[14,"XUID","array",null],[15,"charset","offset",0],[16,"Encoding","offset",0],[17,"CharStrings","offset",0],[18,"Private",["offset","offset"],null],[[12,21],"PostScript","sid",null],[[12,22],"BaseFontName","sid",null],[[12,23],"BaseFontBlend","delta",null],[[12,31],"CIDFontVersion","num",0],[[12,32],"CIDFontRevision","num",0],[[12,33],"CIDFontType","num",0],[[12,34],"CIDCount","num",8720],[[12,35],"UIDBase","num",null],[[12,36],"FDArray","offset",
-null],[[12,37],"FDSelect","offset",null],[[12,38],"FontName","sid",null]],qd=null;Nf.prototype=Object.create(ia.prototype);oc=Nf;var nd,Of=function(a){null===rd&&(rd=ia.createTables(kh));ia.call(this,rd,a);this.subrsIndex=null},kh=[[6,"BlueValues","delta",null],[7,"OtherBlues","delta",null],[8,"FamilyBlues","delta",null],[9,"FamilyOtherBlues","delta",null],[[12,9],"BlueScale","num",0.039625],[[12,10],"BlueShift","num",7],[[12,11],"BlueFuzz","num",1],[10,"StdHW","num",null],[11,"StdVW","num",null],
-[[12,12],"StemSnapH","delta",null],[[12,13],"StemSnapV","delta",null],[[12,14],"ForceBold","num",0],[[12,17],"LanguageGroup","num",0],[[12,18],"ExpansionFactor","num",0.06],[[12,19],"initialRandomSeed","num",0],[20,"defaultWidthX","num",0],[21,"nominalWidthX","num",0],[19,"Subrs","offset",null]],rd=null;Of.prototype=Object.create(ia.prototype);nd=Of;var pd={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2},nb;nb=function(a,b,c,d){this.predefined=a;this.format=b;this.charset=c;this.raw=d};var Jf;Jf=function(a,
-b,c,d){this.predefined=a;this.format=b;this.encoding=c;this.raw=d};var Kf;Kf=function(a,b){this.fdSelect=a;this.raw=b};var sd=function(){this.offsets={}};sd.prototype={isTracking:function(a){return a in this.offsets},track:function(a,b){a in this.offsets&&s("Already tracking location of "+a);this.offsets[a]=b},offset:function(a){for(var b in this.offsets)this.offsets[b]+=a},setEntryLocation:function(a,b,c){a in this.offsets||s("Not tracking location of "+a);c=c.data;a=this.offsets[a];for(var d=0,
-e=b.length;d<e;++d){var f=5*d+a,g=f+1,h=f+2,k=f+3,j=f+4;(29!==c[f]||0!==c[g]||0!==c[h]||0!==c[k]||0!==c[j])&&s("writing to an offset that is not empty");var l=b[d];c[f]=29;c[g]=l>>24&255;c[h]=l>>16&255;c[k]=l>>8&255;c[j]=l&255}}};var od,Pf=function(a){for(var b=[],c=0,d=a.length;c<d;++c)b[c]=a.charCodeAt(c);return b},Qf=function(a){this.cff=a};Qf.prototype={compile:function(){var a=this.cff,b={data:[],length:0,add:function(a){this.data=this.data.concat(a);this.length=this.data.length}},c=this.compileHeader(a.header);
-b.add(c);c=this.compileNameIndex(a.names);b.add(c);var d=this.compileTopDicts([a.topDict],b.length);b.add(d.output);c=d.trackers[0];d=this.compileStringIndex(a.strings.strings);b.add(d);d=this.compileIndex(a.globalSubrIndex);b.add(d);a.encoding&&a.topDict.hasName("Encoding")&&(a.encoding.predefined?c.setEntryLocation("Encoding",[a.encoding.format],b):(d=this.compileEncoding(a.encoding),c.setEntryLocation("Encoding",[b.length],b),b.add(d)));a.charset&&a.topDict.hasName("charset")&&(a.charset.predefined?
-c.setEntryLocation("charset",[a.charset.format],b):(d=this.compileCharset(a.charset),c.setEntryLocation("charset",[b.length],b),b.add(d)));d=this.compileCharStrings(a.charStrings);c.setEntryLocation("CharStrings",[b.length],b);b.add(d);a.isCIDFont&&(c.setEntryLocation("FDSelect",[b.length],b),d=this.compileFDSelect(a.fdSelect.raw),b.add(d),d=this.compileTopDicts(a.fdArray,b.length),c.setEntryLocation("FDArray",[b.length],b),b.add(d.output),this.compilePrivateDicts(a.fdArray,d.trackers,b));this.compilePrivateDicts([a.topDict],
-[c],b);return b.data},encodeNumber:function(a){return parseFloat(a)==parseInt(a)&&!isNaN(a)?this.encodeInteger(a):this.encodeFloat(a)},encodeFloat:function(a){var b=a.toString();a="";for(var c=0,d=b.length;c<d;++c){var e=b[c];a="e"===e?a+("-"===b[++c]?"c":"b"):"."===e?a+"a":"-"===e?a+"e":a+e}a+=a.length&1?"f":"ff";b=[30];c=0;for(d=a.length;c<d;c+=2)b.push(parseInt(a.substr(c,2),16));return b},encodeInteger:function(a){-107<=a&&107>=a?a=[a+139]:108<=a&&1131>=a?(a=[a-108],a=[(a>>8)+247,a&255]):-1131<=
-a&&-108>=a?(a=-a-108,a=[(a>>8)+251,a&255]):a=-32768<=a&&32767>=a?[28,a>>8&255,a&255]:[29,a>>24&255,a>>16&255,a>>8&255,a&255];return a},compileHeader:function(a){return[a.major,a.minor,a.hdrSize,a.offSize]},compileNameIndex:function(a){for(var b=new Ya,c=0,d=a.length;c<d;++c)b.add(Pf(a[c]));return this.compileIndex(b)},compileTopDicts:function(a,b){for(var c=[],d=new Ya,e=0,f=a.length;e<f;++e){var g=a[e],h=new sd,g=this.compileDict(g,h);c.push(h);d.add(g);h.offset(b)}d=this.compileIndex(d,c);return{trackers:c,
-output:d}},compilePrivateDicts:function(a,b,c){for(var d=0,e=a.length;d<e;++d){var f=a[d];if(f.privateDict&&f.hasName("Private")){var g=f.privateDict,f=new sd,h=this.compileDict(g,f);f.offset(c.length);b[d].setEntryLocation("Private",[h.length,c.length],c);c.add(h);g.subrsIndex&&g.hasName("Subrs")&&(g=this.compileIndex(g.subrsIndex),f.setEntryLocation("Subrs",[h.length],c),c.add(g))}}},compileDict:function(a,b){for(var c=[],d=a.order,e=0;e<d.length;++e){var f=d[e];if(f in a.values){var g=a.values[f],
-h=a.types[f];I(h)||(h=[h]);I(g)||(g=[g]);if(0!==g.length){for(var k=0,j=h.length;k<j;++k){var l=h[k],n=g[k];switch(l){case "num":case "sid":c=c.concat(this.encodeNumber(n));break;case "offset":l=a.keyToNameMap[f];b.isTracking(l)||b.track(l,c.length);c=c.concat([29,0,0,0,0]);break;case "array":case "delta":c=c.concat(this.encodeNumber(n));l=1;for(n=g.length;l<n;++l)c=c.concat(this.encodeNumber(g[l]));break;default:s("Unknown data type of "+l)}}c=c.concat(a.opcodes[f])}}}return c},compileStringIndex:function(a){for(var b=
-new Ya,c=0,d=a.length;c<d;++c)b.add(Pf(a[c]));return this.compileIndex(b)},compileGlobalSubrIndex:function(){this.out.writeByteArray(this.compileIndex(this.cff.globalSubrIndex))},compileCharStrings:function(a){return this.compileIndex(a)},compileCharset:function(a){return this.compileTypedArray(a.raw)},compileEncoding:function(a){return this.compileTypedArray(a.raw)},compileFDSelect:function(a){return this.compileTypedArray(a)},compileTypedArray:function(a){for(var b=[],c=0,d=a.length;c<d;++c)b[c]=
-a[c];return b},compileIndex:function(a,b){b=b||[];var c=a.objects,d=c.length;if(0==d)return[0,0,0];for(var e=[d>>8&255,d&255],f=1,g=0;g<d;++g)f+=c[g].length;f=256>f?1:65536>f?2:16777216>f?3:4;e.push(f);for(var h=1,g=0;g<d+1;g++)1===f?e.push(h&255):2===f?e.push(h>>8&255,h&255):3===f?e.push(h>>16&255,h>>8&255,h&255):e.push(h>>>24&255,h>>16&255,h>>8&255,h&255),c[g]&&(h+=c[g].length);for(g=0;g<d;g++){b[g]&&b[g].offset(e.length);f=0;for(h=c[g].length;f<h;f++)e.push(c[g][f])}return e}};od=Qf;/Windows.*Chrome/.test(navigator.userAgent)&&
-(hf=61696);var Ja={A:65,AE:198,AEacute:508,AEmacron:482,AEsmall:63462,Aacute:193,Aacutesmall:63457,Abreve:258,Abreveacute:7854,Abrevecyrillic:1232,Abrevedotbelow:7862,Abrevegrave:7856,Abrevehookabove:7858,Abrevetilde:7860,Acaron:461,Acircle:9398,Acircumflex:194,Acircumflexacute:7844,Acircumflexdotbelow:7852,Acircumflexgrave:7846,Acircumflexhookabove:7848,Acircumflexsmall:63458,Acircumflextilde:7850,Acute:63177,Acutesmall:63412,Acyrillic:1040,Adblgrave:512,Adieresis:196,Adieresiscyrillic:1234,Adieresismacron:478,
-Adieresissmall:63460,Adotbelow:7840,Adotmacron:480,Agrave:192,Agravesmall:63456,Ahookabove:7842,Aiecyrillic:1236,Ainvertedbreve:514,Alpha:913,Alphatonos:902,Amacron:256,Amonospace:65313,Aogonek:260,Aring:197,Aringacute:506,Aringbelow:7680,Aringsmall:63461,Asmall:63329,Atilde:195,Atildesmall:63459,Aybarmenian:1329,B:66,Bcircle:9399,Bdotaccent:7682,Bdotbelow:7684,Becyrillic:1041,Benarmenian:1330,Beta:914,Bhook:385,Blinebelow:7686,Bmonospace:65314,Brevesmall:63220,Bsmall:63330,Btopbar:386,C:67,Caarmenian:1342,
-Cacute:262,Caron:63178,Caronsmall:63221,Ccaron:268,Ccedilla:199,Ccedillaacute:7688,Ccedillasmall:63463,Ccircle:9400,Ccircumflex:264,Cdot:266,Cdotaccent:266,Cedillasmall:63416,Chaarmenian:1353,Cheabkhasiancyrillic:1212,Checyrillic:1063,Chedescenderabkhasiancyrillic:1214,Chedescendercyrillic:1206,Chedieresiscyrillic:1268,Cheharmenian:1347,Chekhakassiancyrillic:1227,Cheverticalstrokecyrillic:1208,Chi:935,Chook:391,Circumflexsmall:63222,Cmonospace:65315,Coarmenian:1361,Csmall:63331,D:68,DZ:497,DZcaron:452,
-Daarmenian:1332,Dafrican:393,Dcaron:270,Dcedilla:7696,Dcircle:9401,Dcircumflexbelow:7698,Dcroat:272,Ddotaccent:7690,Ddotbelow:7692,Decyrillic:1044,Deicoptic:1006,Delta:8710,Deltagreek:916,Dhook:394,Dieresis:63179,DieresisAcute:63180,DieresisGrave:63181,Dieresissmall:63400,Digammagreek:988,Djecyrillic:1026,Dlinebelow:7694,Dmonospace:65316,Dotaccentsmall:63223,Dslash:272,Dsmall:63332,Dtopbar:395,Dz:498,Dzcaron:453,Dzeabkhasiancyrillic:1248,Dzecyrillic:1029,Dzhecyrillic:1039,E:69,Eacute:201,Eacutesmall:63465,
-Ebreve:276,Ecaron:282,Ecedillabreve:7708,Echarmenian:1333,Ecircle:9402,Ecircumflex:202,Ecircumflexacute:7870,Ecircumflexbelow:7704,Ecircumflexdotbelow:7878,Ecircumflexgrave:7872,Ecircumflexhookabove:7874,Ecircumflexsmall:63466,Ecircumflextilde:7876,Ecyrillic:1028,Edblgrave:516,Edieresis:203,Edieresissmall:63467,Edot:278,Edotaccent:278,Edotbelow:7864,Efcyrillic:1060,Egrave:200,Egravesmall:63464,Eharmenian:1335,Ehookabove:7866,Eightroman:8551,Einvertedbreve:518,Eiotifiedcyrillic:1124,Elcyrillic:1051,
-Elevenroman:8554,Emacron:274,Emacronacute:7702,Emacrongrave:7700,Emcyrillic:1052,Emonospace:65317,Encyrillic:1053,Endescendercyrillic:1186,Eng:330,Enghecyrillic:1188,Enhookcyrillic:1223,Eogonek:280,Eopen:400,Epsilon:917,Epsilontonos:904,Ercyrillic:1056,Ereversed:398,Ereversedcyrillic:1069,Escyrillic:1057,Esdescendercyrillic:1194,Esh:425,Esmall:63333,Eta:919,Etarmenian:1336,Etatonos:905,Eth:208,Ethsmall:63472,Etilde:7868,Etildebelow:7706,Euro:8364,Ezh:439,Ezhcaron:494,Ezhreversed:440,F:70,Fcircle:9403,
-Fdotaccent:7710,Feharmenian:1366,Feicoptic:996,Fhook:401,Fitacyrillic:1138,Fiveroman:8548,Fmonospace:65318,Fourroman:8547,Fsmall:63334,G:71,GBsquare:13191,Gacute:500,Gamma:915,Gammaafrican:404,Gangiacoptic:1002,Gbreve:286,Gcaron:486,Gcedilla:290,Gcircle:9404,Gcircumflex:284,Gcommaaccent:290,Gdot:288,Gdotaccent:288,Gecyrillic:1043,Ghadarmenian:1346,Ghemiddlehookcyrillic:1172,Ghestrokecyrillic:1170,Gheupturncyrillic:1168,Ghook:403,Gimarmenian:1331,Gjecyrillic:1027,Gmacron:7712,Gmonospace:65319,Grave:63182,
-Gravesmall:63328,Gsmall:63335,Gsmallhook:667,Gstroke:484,H:72,H18533:9679,H18543:9642,H18551:9643,H22073:9633,HPsquare:13259,Haabkhasiancyrillic:1192,Hadescendercyrillic:1202,Hardsigncyrillic:1066,Hbar:294,Hbrevebelow:7722,Hcedilla:7720,Hcircle:9405,Hcircumflex:292,Hdieresis:7718,Hdotaccent:7714,Hdotbelow:7716,Hmonospace:65320,Hoarmenian:1344,Horicoptic:1E3,Hsmall:63336,Hungarumlaut:63183,Hungarumlautsmall:63224,Hzsquare:13200,I:73,IAcyrillic:1071,IJ:306,IUcyrillic:1070,Iacute:205,Iacutesmall:63469,
-Ibreve:300,Icaron:463,Icircle:9406,Icircumflex:206,Icircumflexsmall:63470,Icyrillic:1030,Idblgrave:520,Idieresis:207,Idieresisacute:7726,Idieresiscyrillic:1252,Idieresissmall:63471,Idot:304,Idotaccent:304,Idotbelow:7882,Iebrevecyrillic:1238,Iecyrillic:1045,Ifraktur:8465,Igrave:204,Igravesmall:63468,Ihookabove:7880,Iicyrillic:1048,Iinvertedbreve:522,Iishortcyrillic:1049,Imacron:298,Imacroncyrillic:1250,Imonospace:65321,Iniarmenian:1339,Iocyrillic:1025,Iogonek:302,Iota:921,Iotaafrican:406,Iotadieresis:938,
-Iotatonos:906,Ismall:63337,Istroke:407,Itilde:296,Itildebelow:7724,Izhitsacyrillic:1140,Izhitsadblgravecyrillic:1142,J:74,Jaarmenian:1345,Jcircle:9407,Jcircumflex:308,Jecyrillic:1032,Jheharmenian:1355,Jmonospace:65322,Jsmall:63338,K:75,KBsquare:13189,KKsquare:13261,Kabashkircyrillic:1184,Kacute:7728,Kacyrillic:1050,Kadescendercyrillic:1178,Kahookcyrillic:1219,Kappa:922,Kastrokecyrillic:1182,Kaverticalstrokecyrillic:1180,Kcaron:488,Kcedilla:310,Kcircle:9408,Kcommaaccent:310,Kdotbelow:7730,Keharmenian:1364,
-Kenarmenian:1343,Khacyrillic:1061,Kheicoptic:998,Khook:408,Kjecyrillic:1036,Klinebelow:7732,Kmonospace:65323,Koppacyrillic:1152,Koppagreek:990,Ksicyrillic:1134,Ksmall:63339,L:76,LJ:455,LL:63167,Lacute:313,Lambda:923,Lcaron:317,Lcedilla:315,Lcircle:9409,Lcircumflexbelow:7740,Lcommaaccent:315,Ldot:319,Ldotaccent:319,Ldotbelow:7734,Ldotbelowmacron:7736,Liwnarmenian:1340,Lj:456,Ljecyrillic:1033,Llinebelow:7738,Lmonospace:65324,Lslash:321,Lslashsmall:63225,Lsmall:63340,M:77,MBsquare:13190,Macron:63184,
-Macronsmall:63407,Macute:7742,Mcircle:9410,Mdotaccent:7744,Mdotbelow:7746,Menarmenian:1348,Mmonospace:65325,Msmall:63341,Mturned:412,Mu:924,N:78,NJ:458,Nacute:323,Ncaron:327,Ncedilla:325,Ncircle:9411,Ncircumflexbelow:7754,Ncommaaccent:325,Ndotaccent:7748,Ndotbelow:7750,Nhookleft:413,Nineroman:8552,Nj:459,Njecyrillic:1034,Nlinebelow:7752,Nmonospace:65326,Nowarmenian:1350,Nsmall:63342,Ntilde:209,Ntildesmall:63473,Nu:925,O:79,OE:338,OEsmall:63226,Oacute:211,Oacutesmall:63475,Obarredcyrillic:1256,Obarreddieresiscyrillic:1258,
-Obreve:334,Ocaron:465,Ocenteredtilde:415,Ocircle:9412,Ocircumflex:212,Ocircumflexacute:7888,Ocircumflexdotbelow:7896,Ocircumflexgrave:7890,Ocircumflexhookabove:7892,Ocircumflexsmall:63476,Ocircumflextilde:7894,Ocyrillic:1054,Odblacute:336,Odblgrave:524,Odieresis:214,Odieresiscyrillic:1254,Odieresissmall:63478,Odotbelow:7884,Ogoneksmall:63227,Ograve:210,Ogravesmall:63474,Oharmenian:1365,Ohm:8486,Ohookabove:7886,Ohorn:416,Ohornacute:7898,Ohorndotbelow:7906,Ohorngrave:7900,Ohornhookabove:7902,Ohorntilde:7904,
-Ohungarumlaut:336,Oi:418,Oinvertedbreve:526,Omacron:332,Omacronacute:7762,Omacrongrave:7760,Omega:8486,Omegacyrillic:1120,Omegagreek:937,Omegaroundcyrillic:1146,Omegatitlocyrillic:1148,Omegatonos:911,Omicron:927,Omicrontonos:908,Omonospace:65327,Oneroman:8544,Oogonek:490,Oogonekmacron:492,Oopen:390,Oslash:216,Oslashacute:510,Oslashsmall:63480,Osmall:63343,Ostrokeacute:510,Otcyrillic:1150,Otilde:213,Otildeacute:7756,Otildedieresis:7758,Otildesmall:63477,P:80,Pacute:7764,Pcircle:9413,Pdotaccent:7766,
-Pecyrillic:1055,Peharmenian:1354,Pemiddlehookcyrillic:1190,Phi:934,Phook:420,Pi:928,Piwrarmenian:1363,Pmonospace:65328,Psi:936,Psicyrillic:1136,Psmall:63344,Q:81,Qcircle:9414,Qmonospace:65329,Qsmall:63345,R:82,Raarmenian:1356,Racute:340,Rcaron:344,Rcedilla:342,Rcircle:9415,Rcommaaccent:342,Rdblgrave:528,Rdotaccent:7768,Rdotbelow:7770,Rdotbelowmacron:7772,Reharmenian:1360,Rfraktur:8476,Rho:929,Ringsmall:63228,Rinvertedbreve:530,Rlinebelow:7774,Rmonospace:65330,Rsmall:63346,Rsmallinverted:641,Rsmallinvertedsuperior:694,
-S:83,SF010000:9484,SF020000:9492,SF030000:9488,SF040000:9496,SF050000:9532,SF060000:9516,SF070000:9524,SF080000:9500,SF090000:9508,SF100000:9472,SF110000:9474,SF190000:9569,SF200000:9570,SF210000:9558,SF220000:9557,SF230000:9571,SF240000:9553,SF250000:9559,SF260000:9565,SF270000:9564,SF280000:9563,SF360000:9566,SF370000:9567,SF380000:9562,SF390000:9556,SF400000:9577,SF410000:9574,SF420000:9568,SF430000:9552,SF440000:9580,SF450000:9575,SF460000:9576,SF470000:9572,SF480000:9573,SF490000:9561,SF500000:9560,
-SF510000:9554,SF520000:9555,SF530000:9579,SF540000:9578,Sacute:346,Sacutedotaccent:7780,Sampigreek:992,Scaron:352,Scarondotaccent:7782,Scaronsmall:63229,Scedilla:350,Schwa:399,Schwacyrillic:1240,Schwadieresiscyrillic:1242,Scircle:9416,Scircumflex:348,Scommaaccent:536,Sdotaccent:7776,Sdotbelow:7778,Sdotbelowdotaccent:7784,Seharmenian:1357,Sevenroman:8550,Shaarmenian:1351,Shacyrillic:1064,Shchacyrillic:1065,Sheicoptic:994,Shhacyrillic:1210,Shimacoptic:1004,Sigma:931,Sixroman:8549,Smonospace:65331,Softsigncyrillic:1068,
-Ssmall:63347,Stigmagreek:986,T:84,Tau:932,Tbar:358,Tcaron:356,Tcedilla:354,Tcircle:9417,Tcircumflexbelow:7792,Tcommaaccent:354,Tdotaccent:7786,Tdotbelow:7788,Tecyrillic:1058,Tedescendercyrillic:1196,Tenroman:8553,Tetsecyrillic:1204,Theta:920,Thook:428,Thorn:222,Thornsmall:63486,Threeroman:8546,Tildesmall:63230,Tiwnarmenian:1359,Tlinebelow:7790,Tmonospace:65332,Toarmenian:1337,Tonefive:444,Tonesix:388,Tonetwo:423,Tretroflexhook:430,Tsecyrillic:1062,Tshecyrillic:1035,Tsmall:63348,Twelveroman:8555,Tworoman:8545,
-U:85,Uacute:218,Uacutesmall:63482,Ubreve:364,Ucaron:467,Ucircle:9418,Ucircumflex:219,Ucircumflexbelow:7798,Ucircumflexsmall:63483,Ucyrillic:1059,Udblacute:368,Udblgrave:532,Udieresis:220,Udieresisacute:471,Udieresisbelow:7794,Udieresiscaron:473,Udieresiscyrillic:1264,Udieresisgrave:475,Udieresismacron:469,Udieresissmall:63484,Udotbelow:7908,Ugrave:217,Ugravesmall:63481,Uhookabove:7910,Uhorn:431,Uhornacute:7912,Uhorndotbelow:7920,Uhorngrave:7914,Uhornhookabove:7916,Uhorntilde:7918,Uhungarumlaut:368,
-Uhungarumlautcyrillic:1266,Uinvertedbreve:534,Ukcyrillic:1144,Umacron:362,Umacroncyrillic:1262,Umacrondieresis:7802,Umonospace:65333,Uogonek:370,Upsilon:933,Upsilon1:978,Upsilonacutehooksymbolgreek:979,Upsilonafrican:433,Upsilondieresis:939,Upsilondieresishooksymbolgreek:980,Upsilonhooksymbol:978,Upsilontonos:910,Uring:366,Ushortcyrillic:1038,Usmall:63349,Ustraightcyrillic:1198,Ustraightstrokecyrillic:1200,Utilde:360,Utildeacute:7800,Utildebelow:7796,V:86,Vcircle:9419,Vdotbelow:7806,Vecyrillic:1042,
-Vewarmenian:1358,Vhook:434,Vmonospace:65334,Voarmenian:1352,Vsmall:63350,Vtilde:7804,W:87,Wacute:7810,Wcircle:9420,Wcircumflex:372,Wdieresis:7812,Wdotaccent:7814,Wdotbelow:7816,Wgrave:7808,Wmonospace:65335,Wsmall:63351,X:88,Xcircle:9421,Xdieresis:7820,Xdotaccent:7818,Xeharmenian:1341,Xi:926,Xmonospace:65336,Xsmall:63352,Y:89,Yacute:221,Yacutesmall:63485,Yatcyrillic:1122,Ycircle:9422,Ycircumflex:374,Ydieresis:376,Ydieresissmall:63487,Ydotaccent:7822,Ydotbelow:7924,Yericyrillic:1067,Yerudieresiscyrillic:1272,
-Ygrave:7922,Yhook:435,Yhookabove:7926,Yiarmenian:1349,Yicyrillic:1031,Yiwnarmenian:1362,Ymonospace:65337,Ysmall:63353,Ytilde:7928,Yusbigcyrillic:1130,Yusbigiotifiedcyrillic:1132,Yuslittlecyrillic:1126,Yuslittleiotifiedcyrillic:1128,Z:90,Zaarmenian:1334,Zacute:377,Zcaron:381,Zcaronsmall:63231,Zcircle:9423,Zcircumflex:7824,Zdot:379,Zdotaccent:379,Zdotbelow:7826,Zecyrillic:1047,Zedescendercyrillic:1176,Zedieresiscyrillic:1246,Zeta:918,Zhearmenian:1338,Zhebrevecyrillic:1217,Zhecyrillic:1046,Zhedescendercyrillic:1174,
-Zhedieresiscyrillic:1244,Zlinebelow:7828,Zmonospace:65338,Zsmall:63354,Zstroke:437,a:97,aabengali:2438,aacute:225,aadeva:2310,aagujarati:2694,aagurmukhi:2566,aamatragurmukhi:2622,aarusquare:13059,aavowelsignbengali:2494,aavowelsigndeva:2366,aavowelsigngujarati:2750,abbreviationmarkarmenian:1375,abbreviationsigndeva:2416,abengali:2437,abopomofo:12570,abreve:259,abreveacute:7855,abrevecyrillic:1233,abrevedotbelow:7863,abrevegrave:7857,abrevehookabove:7859,abrevetilde:7861,acaron:462,acircle:9424,acircumflex:226,
-acircumflexacute:7845,acircumflexdotbelow:7853,acircumflexgrave:7847,acircumflexhookabove:7849,acircumflextilde:7851,acute:180,acutebelowcmb:791,acutecmb:769,acutecomb:769,acutedeva:2388,acutelowmod:719,acutetonecmb:833,acyrillic:1072,adblgrave:513,addakgurmukhi:2673,adeva:2309,adieresis:228,adieresiscyrillic:1235,adieresismacron:479,adotbelow:7841,adotmacron:481,ae:230,aeacute:509,aekorean:12624,aemacron:483,afii00208:8213,afii08941:8356,afii10017:1040,afii10018:1041,afii10019:1042,afii10020:1043,
-afii10021:1044,afii10022:1045,afii10023:1025,afii10024:1046,afii10025:1047,afii10026:1048,afii10027:1049,afii10028:1050,afii10029:1051,afii10030:1052,afii10031:1053,afii10032:1054,afii10033:1055,afii10034:1056,afii10035:1057,afii10036:1058,afii10037:1059,afii10038:1060,afii10039:1061,afii10040:1062,afii10041:1063,afii10042:1064,afii10043:1065,afii10044:1066,afii10045:1067,afii10046:1068,afii10047:1069,afii10048:1070,afii10049:1071,afii10050:1168,afii10051:1026,afii10052:1027,afii10053:1028,afii10054:1029,
-afii10055:1030,afii10056:1031,afii10057:1032,afii10058:1033,afii10059:1034,afii10060:1035,afii10061:1036,afii10062:1038,afii10063:63172,afii10064:63173,afii10065:1072,afii10066:1073,afii10067:1074,afii10068:1075,afii10069:1076,afii10070:1077,afii10071:1105,afii10072:1078,afii10073:1079,afii10074:1080,afii10075:1081,afii10076:1082,afii10077:1083,afii10078:1084,afii10079:1085,afii10080:1086,afii10081:1087,afii10082:1088,afii10083:1089,afii10084:1090,afii10085:1091,afii10086:1092,afii10087:1093,afii10088:1094,
-afii10089:1095,afii10090:1096,afii10091:1097,afii10092:1098,afii10093:1099,afii10094:1100,afii10095:1101,afii10096:1102,afii10097:1103,afii10098:1169,afii10099:1106,afii10100:1107,afii10101:1108,afii10102:1109,afii10103:1110,afii10104:1111,afii10105:1112,afii10106:1113,afii10107:1114,afii10108:1115,afii10109:1116,afii10110:1118,afii10145:1039,afii10146:1122,afii10147:1138,afii10148:1140,afii10192:63174,afii10193:1119,afii10194:1123,afii10195:1139,afii10196:1141,afii10831:63175,afii10832:63176,afii10846:1241,
-afii299:8206,afii300:8207,afii301:8205,afii57381:1642,afii57388:1548,afii57392:1632,afii57393:1633,afii57394:1634,afii57395:1635,afii57396:1636,afii57397:1637,afii57398:1638,afii57399:1639,afii57400:1640,afii57401:1641,afii57403:1563,afii57407:1567,afii57409:1569,afii57410:1570,afii57411:1571,afii57412:1572,afii57413:1573,afii57414:1574,afii57415:1575,afii57416:1576,afii57417:1577,afii57418:1578,afii57419:1579,afii57420:1580,afii57421:1581,afii57422:1582,afii57423:1583,afii57424:1584,afii57425:1585,
-afii57426:1586,afii57427:1587,afii57428:1588,afii57429:1589,afii57430:1590,afii57431:1591,afii57432:1592,afii57433:1593,afii57434:1594,afii57440:1600,afii57441:1601,afii57442:1602,afii57443:1603,afii57444:1604,afii57445:1605,afii57446:1606,afii57448:1608,afii57449:1609,afii57450:1610,afii57451:1611,afii57452:1612,afii57453:1613,afii57454:1614,afii57455:1615,afii57456:1616,afii57457:1617,afii57458:1618,afii57470:1607,afii57505:1700,afii57506:1662,afii57507:1670,afii57508:1688,afii57509:1711,afii57511:1657,
-afii57512:1672,afii57513:1681,afii57514:1722,afii57519:1746,afii57534:1749,afii57636:8362,afii57645:1470,afii57658:1475,afii57664:1488,afii57665:1489,afii57666:1490,afii57667:1491,afii57668:1492,afii57669:1493,afii57670:1494,afii57671:1495,afii57672:1496,afii57673:1497,afii57674:1498,afii57675:1499,afii57676:1500,afii57677:1501,afii57678:1502,afii57679:1503,afii57680:1504,afii57681:1505,afii57682:1506,afii57683:1507,afii57684:1508,afii57685:1509,afii57686:1510,afii57687:1511,afii57688:1512,afii57689:1513,
-afii57690:1514,afii57694:64298,afii57695:64299,afii57700:64331,afii57705:64287,afii57716:1520,afii57717:1521,afii57718:1522,afii57723:64309,afii57793:1460,afii57794:1461,afii57795:1462,afii57796:1467,afii57797:1464,afii57798:1463,afii57799:1456,afii57800:1458,afii57801:1457,afii57802:1459,afii57803:1474,afii57804:1473,afii57806:1465,afii57807:1468,afii57839:1469,afii57841:1471,afii57842:1472,afii57929:700,afii61248:8453,afii61289:8467,afii61352:8470,afii61573:8236,afii61574:8237,afii61575:8238,afii61664:8204,
-afii63167:1645,afii64937:701,agrave:224,agujarati:2693,agurmukhi:2565,ahiragana:12354,ahookabove:7843,aibengali:2448,aibopomofo:12574,aideva:2320,aiecyrillic:1237,aigujarati:2704,aigurmukhi:2576,aimatragurmukhi:2632,ainarabic:1593,ainfinalarabic:65226,aininitialarabic:65227,ainmedialarabic:65228,ainvertedbreve:515,aivowelsignbengali:2504,aivowelsigndeva:2376,aivowelsigngujarati:2760,akatakana:12450,akatakanahalfwidth:65393,akorean:12623,alef:1488,alefarabic:1575,alefdageshhebrew:64304,aleffinalarabic:65166,
-alefhamzaabovearabic:1571,alefhamzaabovefinalarabic:65156,alefhamzabelowarabic:1573,alefhamzabelowfinalarabic:65160,alefhebrew:1488,aleflamedhebrew:64335,alefmaddaabovearabic:1570,alefmaddaabovefinalarabic:65154,alefmaksuraarabic:1609,alefmaksurafinalarabic:65264,alefmaksurainitialarabic:65267,alefmaksuramedialarabic:65268,alefpatahhebrew:64302,alefqamatshebrew:64303,aleph:8501,allequal:8780,alpha:945,alphatonos:940,amacron:257,amonospace:65345,ampersand:38,ampersandmonospace:65286,ampersandsmall:63270,
-amsquare:13250,anbopomofo:12578,angbopomofo:12580,angbracketleft:12296,angbracketright:12297,angkhankhuthai:3674,angle:8736,anglebracketleft:12296,anglebracketleftvertical:65087,anglebracketright:12297,anglebracketrightvertical:65088,angleleft:9001,angleright:9002,angstrom:8491,anoteleia:903,anudattadeva:2386,anusvarabengali:2434,anusvaradeva:2306,anusvaragujarati:2690,aogonek:261,apaatosquare:13056,aparen:9372,apostrophearmenian:1370,apostrophemod:700,apple:63743,approaches:8784,approxequal:8776,
-approxequalorimage:8786,approximatelyequal:8773,araeaekorean:12686,araeakorean:12685,arc:8978,arighthalfring:7834,aring:229,aringacute:507,aringbelow:7681,arrowboth:8596,arrowdashdown:8675,arrowdashleft:8672,arrowdashright:8674,arrowdashup:8673,arrowdblboth:8660,arrowdbldown:8659,arrowdblleft:8656,arrowdblright:8658,arrowdblup:8657,arrowdown:8595,arrowdownleft:8601,arrowdownright:8600,arrowdownwhite:8681,arrowheaddownmod:709,arrowheadleftmod:706,arrowheadrightmod:707,arrowheadupmod:708,arrowhorizex:63719,
-arrowleft:8592,arrowleftdbl:8656,arrowleftdblstroke:8653,arrowleftoverright:8646,arrowleftwhite:8678,arrowright:8594,arrowrightdblstroke:8655,arrowrightheavy:10142,arrowrightoverleft:8644,arrowrightwhite:8680,arrowtableft:8676,arrowtabright:8677,arrowup:8593,arrowupdn:8597,arrowupdnbse:8616,arrowupdownbase:8616,arrowupleft:8598,arrowupleftofdown:8645,arrowupright:8599,arrowupwhite:8679,arrowvertex:63718,asciicircum:94,asciicircummonospace:65342,asciitilde:126,asciitildemonospace:65374,ascript:593,
-ascriptturned:594,asmallhiragana:12353,asmallkatakana:12449,asmallkatakanahalfwidth:65383,asterisk:42,asteriskaltonearabic:1645,asteriskarabic:1645,asteriskmath:8727,asteriskmonospace:65290,asterisksmall:65121,asterism:8258,asuperior:63209,asymptoticallyequal:8771,at:64,atilde:227,atmonospace:65312,atsmall:65131,aturned:592,aubengali:2452,aubopomofo:12576,audeva:2324,augujarati:2708,augurmukhi:2580,aulengthmarkbengali:2519,aumatragurmukhi:2636,auvowelsignbengali:2508,auvowelsigndeva:2380,auvowelsigngujarati:2764,
-avagrahadeva:2365,aybarmenian:1377,ayin:1506,ayinaltonehebrew:64288,ayinhebrew:1506,b:98,babengali:2476,backslash:92,backslashmonospace:65340,badeva:2348,bagujarati:2732,bagurmukhi:2604,bahiragana:12400,bahtthai:3647,bakatakana:12496,bar:124,barmonospace:65372,bbopomofo:12549,bcircle:9425,bdotaccent:7683,bdotbelow:7685,beamedsixteenthnotes:9836,because:8757,becyrillic:1073,beharabic:1576,behfinalarabic:65168,behinitialarabic:65169,behiragana:12409,behmedialarabic:65170,behmeeminitialarabic:64671,
-behmeemisolatedarabic:64520,behnoonfinalarabic:64621,bekatakana:12505,benarmenian:1378,bet:1489,beta:946,betasymbolgreek:976,betdagesh:64305,betdageshhebrew:64305,bethebrew:1489,betrafehebrew:64332,bhabengali:2477,bhadeva:2349,bhagujarati:2733,bhagurmukhi:2605,bhook:595,bihiragana:12403,bikatakana:12499,bilabialclick:664,bindigurmukhi:2562,birusquare:13105,blackcircle:9679,blackdiamond:9670,blackdownpointingtriangle:9660,blackleftpointingpointer:9668,blackleftpointingtriangle:9664,blacklenticularbracketleft:12304,
-blacklenticularbracketleftvertical:65083,blacklenticularbracketright:12305,blacklenticularbracketrightvertical:65084,blacklowerlefttriangle:9699,blacklowerrighttriangle:9698,blackrectangle:9644,blackrightpointingpointer:9658,blackrightpointingtriangle:9654,blacksmallsquare:9642,blacksmilingface:9787,blacksquare:9632,blackstar:9733,blackupperlefttriangle:9700,blackupperrighttriangle:9701,blackuppointingsmalltriangle:9652,blackuppointingtriangle:9650,blank:9251,blinebelow:7687,block:9608,bmonospace:65346,
-bobaimaithai:3610,bohiragana:12412,bokatakana:12508,bparen:9373,bqsquare:13251,braceex:63732,braceleft:123,braceleftbt:63731,braceleftmid:63730,braceleftmonospace:65371,braceleftsmall:65115,bracelefttp:63729,braceleftvertical:65079,braceright:125,bracerightbt:63742,bracerightmid:63741,bracerightmonospace:65373,bracerightsmall:65116,bracerighttp:63740,bracerightvertical:65080,bracketleft:91,bracketleftbt:63728,bracketleftex:63727,bracketleftmonospace:65339,bracketlefttp:63726,bracketright:93,bracketrightbt:63739,
-bracketrightex:63738,bracketrightmonospace:65341,bracketrighttp:63737,breve:728,brevebelowcmb:814,brevecmb:774,breveinvertedbelowcmb:815,breveinvertedcmb:785,breveinverteddoublecmb:865,bridgebelowcmb:810,bridgeinvertedbelowcmb:826,brokenbar:166,bstroke:384,bsuperior:63210,btopbar:387,buhiragana:12406,bukatakana:12502,bullet:8226,bulletinverse:9688,bulletoperator:8729,bullseye:9678,c:99,caarmenian:1390,cabengali:2458,cacute:263,cadeva:2330,cagujarati:2714,cagurmukhi:2586,calsquare:13192,candrabindubengali:2433,
-candrabinducmb:784,candrabindudeva:2305,candrabindugujarati:2689,capslock:8682,careof:8453,caron:711,caronbelowcmb:812,caroncmb:780,carriagereturn:8629,cbopomofo:12568,ccaron:269,ccedilla:231,ccedillaacute:7689,ccircle:9426,ccircumflex:265,ccurl:597,cdot:267,cdotaccent:267,cdsquare:13253,cedilla:184,cedillacmb:807,cent:162,centigrade:8451,centinferior:63199,centmonospace:65504,centoldstyle:63394,centsuperior:63200,chaarmenian:1401,chabengali:2459,chadeva:2331,chagujarati:2715,chagurmukhi:2587,chbopomofo:12564,
-cheabkhasiancyrillic:1213,checkmark:10003,checyrillic:1095,chedescenderabkhasiancyrillic:1215,chedescendercyrillic:1207,chedieresiscyrillic:1269,cheharmenian:1395,chekhakassiancyrillic:1228,cheverticalstrokecyrillic:1209,chi:967,chieuchacirclekorean:12919,chieuchaparenkorean:12823,chieuchcirclekorean:12905,chieuchkorean:12618,chieuchparenkorean:12809,chochangthai:3594,chochanthai:3592,chochingthai:3593,chochoethai:3596,chook:392,cieucacirclekorean:12918,cieucaparenkorean:12822,cieuccirclekorean:12904,
-cieuckorean:12616,cieucparenkorean:12808,cieucuparenkorean:12828,circle:9675,circlecopyrt:169,circlemultiply:8855,circleot:8857,circleplus:8853,circlepostalmark:12342,circlewithlefthalfblack:9680,circlewithrighthalfblack:9681,circumflex:710,circumflexbelowcmb:813,circumflexcmb:770,clear:8999,clickalveolar:450,clickdental:448,clicklateral:449,clickretroflex:451,club:9827,clubsuitblack:9827,clubsuitwhite:9831,cmcubedsquare:13220,cmonospace:65347,cmsquaredsquare:13216,coarmenian:1409,colon:58,colonmonetary:8353,
-colonmonospace:65306,colonsign:8353,colonsmall:65109,colontriangularhalfmod:721,colontriangularmod:720,comma:44,commaabovecmb:787,commaaboverightcmb:789,commaaccent:63171,commaarabic:1548,commaarmenian:1373,commainferior:63201,commamonospace:65292,commareversedabovecmb:788,commareversedmod:701,commasmall:65104,commasuperior:63202,commaturnedabovecmb:786,commaturnedmod:699,compass:9788,congruent:8773,contourintegral:8750,control:8963,controlACK:6,controlBEL:7,controlBS:8,controlCAN:24,controlCR:13,
-controlDC1:17,controlDC2:18,controlDC3:19,controlDC4:20,controlDEL:127,controlDLE:16,controlEM:25,controlENQ:5,controlEOT:4,controlESC:27,controlETB:23,controlETX:3,controlFF:12,controlFS:28,controlGS:29,controlHT:9,controlLF:10,controlNAK:21,controlRS:30,controlSI:15,controlSO:14,controlSOT:2,controlSTX:1,controlSUB:26,controlSYN:22,controlUS:31,controlVT:11,copyright:169,copyrightsans:63721,copyrightserif:63193,cornerbracketleft:12300,cornerbracketlefthalfwidth:65378,cornerbracketleftvertical:65089,
-cornerbracketright:12301,cornerbracketrighthalfwidth:65379,cornerbracketrightvertical:65090,corporationsquare:13183,cosquare:13255,coverkgsquare:13254,cparen:9374,cruzeiro:8354,cstretched:663,curlyand:8911,curlyor:8910,currency:164,cyrBreve:63185,cyrFlex:63186,cyrbreve:63188,cyrflex:63189,d:100,daarmenian:1380,dabengali:2470,dadarabic:1590,dadeva:2342,dadfinalarabic:65214,dadinitialarabic:65215,dadmedialarabic:65216,dagesh:1468,dageshhebrew:1468,dagger:8224,daggerdbl:8225,dagujarati:2726,dagurmukhi:2598,
-dahiragana:12384,dakatakana:12480,dalarabic:1583,dalet:1491,daletdagesh:64307,daletdageshhebrew:64307,dalethebrew:1491,dalfinalarabic:65194,dammaarabic:1615,dammalowarabic:1615,dammatanaltonearabic:1612,dammatanarabic:1612,danda:2404,dargahebrew:1447,dargalefthebrew:1447,dasiapneumatacyrilliccmb:1157,dblGrave:63187,dblanglebracketleft:12298,dblanglebracketleftvertical:65085,dblanglebracketright:12299,dblanglebracketrightvertical:65086,dblarchinvertedbelowcmb:811,dblarrowleft:8660,dblarrowright:8658,
-dbldanda:2405,dblgrave:63190,dblgravecmb:783,dblintegral:8748,dbllowline:8215,dbllowlinecmb:819,dbloverlinecmb:831,dblprimemod:698,dblverticalbar:8214,dblverticallineabovecmb:782,dbopomofo:12553,dbsquare:13256,dcaron:271,dcedilla:7697,dcircle:9427,dcircumflexbelow:7699,dcroat:273,ddabengali:2465,ddadeva:2337,ddagujarati:2721,ddagurmukhi:2593,ddalarabic:1672,ddalfinalarabic:64393,dddhadeva:2396,ddhabengali:2466,ddhadeva:2338,ddhagujarati:2722,ddhagurmukhi:2594,ddotaccent:7691,ddotbelow:7693,decimalseparatorarabic:1643,
-decimalseparatorpersian:1643,decyrillic:1076,degree:176,dehihebrew:1453,dehiragana:12391,deicoptic:1007,dekatakana:12487,deleteleft:9003,deleteright:8998,delta:948,deltaturned:397,denominatorminusonenumeratorbengali:2552,dezh:676,dhabengali:2471,dhadeva:2343,dhagujarati:2727,dhagurmukhi:2599,dhook:599,dialytikatonos:901,dialytikatonoscmb:836,diamond:9830,diamondsuitwhite:9826,dieresis:168,dieresisacute:63191,dieresisbelowcmb:804,dieresiscmb:776,dieresisgrave:63192,dieresistonos:901,dihiragana:12386,
-dikatakana:12482,dittomark:12291,divide:247,divides:8739,divisionslash:8725,djecyrillic:1106,dkshade:9619,dlinebelow:7695,dlsquare:13207,dmacron:273,dmonospace:65348,dnblock:9604,dochadathai:3598,dodekthai:3604,dohiragana:12393,dokatakana:12489,dollar:36,dollarinferior:63203,dollarmonospace:65284,dollaroldstyle:63268,dollarsmall:65129,dollarsuperior:63204,dong:8363,dorusquare:13094,dotaccent:729,dotaccentcmb:775,dotbelowcmb:803,dotbelowcomb:803,dotkatakana:12539,dotlessi:305,dotlessj:63166,dotlessjstrokehook:644,
-dotmath:8901,dottedcircle:9676,doubleyodpatah:64287,doubleyodpatahhebrew:64287,downtackbelowcmb:798,downtackmod:725,dparen:9375,dsuperior:63211,dtail:598,dtopbar:396,duhiragana:12389,dukatakana:12485,dz:499,dzaltone:675,dzcaron:454,dzcurl:677,dzeabkhasiancyrillic:1249,dzecyrillic:1109,dzhecyrillic:1119,e:101,eacute:233,earth:9793,ebengali:2447,ebopomofo:12572,ebreve:277,ecandradeva:2317,ecandragujarati:2701,ecandravowelsigndeva:2373,ecandravowelsigngujarati:2757,ecaron:283,ecedillabreve:7709,echarmenian:1381,
-echyiwnarmenian:1415,ecircle:9428,ecircumflex:234,ecircumflexacute:7871,ecircumflexbelow:7705,ecircumflexdotbelow:7879,ecircumflexgrave:7873,ecircumflexhookabove:7875,ecircumflextilde:7877,ecyrillic:1108,edblgrave:517,edeva:2319,edieresis:235,edot:279,edotaccent:279,edotbelow:7865,eegurmukhi:2575,eematragurmukhi:2631,efcyrillic:1092,egrave:232,egujarati:2703,eharmenian:1383,ehbopomofo:12573,ehiragana:12360,ehookabove:7867,eibopomofo:12575,eight:56,eightarabic:1640,eightbengali:2542,eightcircle:9319,
-eightcircleinversesansserif:10129,eightdeva:2414,eighteencircle:9329,eighteenparen:9349,eighteenperiod:9369,eightgujarati:2798,eightgurmukhi:2670,eighthackarabic:1640,eighthangzhou:12328,eighthnotebeamed:9835,eightideographicparen:12839,eightinferior:8328,eightmonospace:65304,eightoldstyle:63288,eightparen:9339,eightperiod:9359,eightpersian:1784,eightroman:8567,eightsuperior:8312,eightthai:3672,einvertedbreve:519,eiotifiedcyrillic:1125,ekatakana:12456,ekatakanahalfwidth:65396,ekonkargurmukhi:2676,
-ekorean:12628,elcyrillic:1083,element:8712,elevencircle:9322,elevenparen:9342,elevenperiod:9362,elevenroman:8570,ellipsis:8230,ellipsisvertical:8942,emacron:275,emacronacute:7703,emacrongrave:7701,emcyrillic:1084,emdash:8212,emdashvertical:65073,emonospace:65349,emphasismarkarmenian:1371,emptyset:8709,enbopomofo:12579,encyrillic:1085,endash:8211,endashvertical:65074,endescendercyrillic:1187,eng:331,engbopomofo:12581,enghecyrillic:1189,enhookcyrillic:1224,enspace:8194,eogonek:281,eokorean:12627,eopen:603,
-eopenclosed:666,eopenreversed:604,eopenreversedclosed:606,eopenreversedhook:605,eparen:9376,epsilon:949,epsilontonos:941,equal:61,equalmonospace:65309,equalsmall:65126,equalsuperior:8316,equivalence:8801,erbopomofo:12582,ercyrillic:1088,ereversed:600,ereversedcyrillic:1101,escyrillic:1089,esdescendercyrillic:1195,esh:643,eshcurl:646,eshortdeva:2318,eshortvowelsigndeva:2374,eshreversedloop:426,eshsquatreversed:645,esmallhiragana:12359,esmallkatakana:12455,esmallkatakanahalfwidth:65386,estimated:8494,
-esuperior:63212,eta:951,etarmenian:1384,etatonos:942,eth:240,etilde:7869,etildebelow:7707,etnahtafoukhhebrew:1425,etnahtafoukhlefthebrew:1425,etnahtahebrew:1425,etnahtalefthebrew:1425,eturned:477,eukorean:12641,euro:8364,evowelsignbengali:2503,evowelsigndeva:2375,evowelsigngujarati:2759,exclam:33,exclamarmenian:1372,exclamdbl:8252,exclamdown:161,exclamdownsmall:63393,exclammonospace:65281,exclamsmall:63265,existential:8707,ezh:658,ezhcaron:495,ezhcurl:659,ezhreversed:441,ezhtail:442,f:102,fadeva:2398,
-fagurmukhi:2654,fahrenheit:8457,fathaarabic:1614,fathalowarabic:1614,fathatanarabic:1611,fbopomofo:12552,fcircle:9429,fdotaccent:7711,feharabic:1601,feharmenian:1414,fehfinalarabic:65234,fehinitialarabic:65235,fehmedialarabic:65236,feicoptic:997,female:9792,ff:64256,ffi:64259,ffl:64260,fi:64257,fifteencircle:9326,fifteenparen:9346,fifteenperiod:9366,figuredash:8210,filledbox:9632,filledrect:9644,finalkaf:1498,finalkafdagesh:64314,finalkafdageshhebrew:64314,finalkafhebrew:1498,finalmem:1501,finalmemhebrew:1501,
-finalnun:1503,finalnunhebrew:1503,finalpe:1507,finalpehebrew:1507,finaltsadi:1509,finaltsadihebrew:1509,firsttonechinese:713,fisheye:9673,fitacyrillic:1139,five:53,fivearabic:1637,fivebengali:2539,fivecircle:9316,fivecircleinversesansserif:10126,fivedeva:2411,fiveeighths:8541,fivegujarati:2795,fivegurmukhi:2667,fivehackarabic:1637,fivehangzhou:12325,fiveideographicparen:12836,fiveinferior:8325,fivemonospace:65301,fiveoldstyle:63285,fiveparen:9336,fiveperiod:9356,fivepersian:1781,fiveroman:8564,fivesuperior:8309,
-fivethai:3669,fl:64258,florin:402,fmonospace:65350,fmsquare:13209,fofanthai:3615,fofathai:3613,fongmanthai:3663,forall:8704,four:52,fourarabic:1636,fourbengali:2538,fourcircle:9315,fourcircleinversesansserif:10125,fourdeva:2410,fourgujarati:2794,fourgurmukhi:2666,fourhackarabic:1636,fourhangzhou:12324,fourideographicparen:12835,fourinferior:8324,fourmonospace:65300,fournumeratorbengali:2551,fouroldstyle:63284,fourparen:9335,fourperiod:9355,fourpersian:1780,fourroman:8563,foursuperior:8308,fourteencircle:9325,
-fourteenparen:9345,fourteenperiod:9365,fourthai:3668,fourthtonechinese:715,fparen:9377,fraction:8260,franc:8355,g:103,gabengali:2455,gacute:501,gadeva:2327,gafarabic:1711,gaffinalarabic:64403,gafinitialarabic:64404,gafmedialarabic:64405,gagujarati:2711,gagurmukhi:2583,gahiragana:12364,gakatakana:12460,gamma:947,gammalatinsmall:611,gammasuperior:736,gangiacoptic:1003,gbopomofo:12557,gbreve:287,gcaron:487,gcedilla:291,gcircle:9430,gcircumflex:285,gcommaaccent:291,gdot:289,gdotaccent:289,gecyrillic:1075,
-gehiragana:12370,gekatakana:12466,geometricallyequal:8785,gereshaccenthebrew:1436,gereshhebrew:1523,gereshmuqdamhebrew:1437,germandbls:223,gershayimaccenthebrew:1438,gershayimhebrew:1524,getamark:12307,ghabengali:2456,ghadarmenian:1394,ghadeva:2328,ghagujarati:2712,ghagurmukhi:2584,ghainarabic:1594,ghainfinalarabic:65230,ghaininitialarabic:65231,ghainmedialarabic:65232,ghemiddlehookcyrillic:1173,ghestrokecyrillic:1171,gheupturncyrillic:1169,ghhadeva:2394,ghhagurmukhi:2650,ghook:608,ghzsquare:13203,
-gihiragana:12366,gikatakana:12462,gimarmenian:1379,gimel:1490,gimeldagesh:64306,gimeldageshhebrew:64306,gimelhebrew:1490,gjecyrillic:1107,glottalinvertedstroke:446,glottalstop:660,glottalstopinverted:662,glottalstopmod:704,glottalstopreversed:661,glottalstopreversedmod:705,glottalstopreversedsuperior:740,glottalstopstroke:673,glottalstopstrokereversed:674,gmacron:7713,gmonospace:65351,gohiragana:12372,gokatakana:12468,gparen:9378,gpasquare:13228,gradient:8711,grave:96,gravebelowcmb:790,gravecmb:768,
-gravecomb:768,gravedeva:2387,gravelowmod:718,gravemonospace:65344,gravetonecmb:832,greater:62,greaterequal:8805,greaterequalorless:8923,greatermonospace:65310,greaterorequivalent:8819,greaterorless:8823,greateroverequal:8807,greatersmall:65125,gscript:609,gstroke:485,guhiragana:12368,guillemotleft:171,guillemotright:187,guilsinglleft:8249,guilsinglright:8250,gukatakana:12464,guramusquare:13080,gysquare:13257,h:104,haabkhasiancyrillic:1193,haaltonearabic:1729,habengali:2489,hadescendercyrillic:1203,
-hadeva:2361,hagujarati:2745,hagurmukhi:2617,haharabic:1581,hahfinalarabic:65186,hahinitialarabic:65187,hahiragana:12399,hahmedialarabic:65188,haitusquare:13098,hakatakana:12495,hakatakanahalfwidth:65418,halantgurmukhi:2637,hamzaarabic:1569,hamzalowarabic:1569,hangulfiller:12644,hardsigncyrillic:1098,harpoonleftbarbup:8636,harpoonrightbarbup:8640,hasquare:13258,hatafpatah:1458,hatafpatah16:1458,hatafpatah23:1458,hatafpatah2f:1458,hatafpatahhebrew:1458,hatafpatahnarrowhebrew:1458,hatafpatahquarterhebrew:1458,
-hatafpatahwidehebrew:1458,hatafqamats:1459,hatafqamats1b:1459,hatafqamats28:1459,hatafqamats34:1459,hatafqamatshebrew:1459,hatafqamatsnarrowhebrew:1459,hatafqamatsquarterhebrew:1459,hatafqamatswidehebrew:1459,hatafsegol:1457,hatafsegol17:1457,hatafsegol24:1457,hatafsegol30:1457,hatafsegolhebrew:1457,hatafsegolnarrowhebrew:1457,hatafsegolquarterhebrew:1457,hatafsegolwidehebrew:1457,hbar:295,hbopomofo:12559,hbrevebelow:7723,hcedilla:7721,hcircle:9431,hcircumflex:293,hdieresis:7719,hdotaccent:7715,hdotbelow:7717,
-he:1492,heart:9829,heartsuitblack:9829,heartsuitwhite:9825,hedagesh:64308,hedageshhebrew:64308,hehaltonearabic:1729,heharabic:1607,hehebrew:1492,hehfinalaltonearabic:64423,hehfinalalttwoarabic:65258,hehfinalarabic:65258,hehhamzaabovefinalarabic:64421,hehhamzaaboveisolatedarabic:64420,hehinitialaltonearabic:64424,hehinitialarabic:65259,hehiragana:12408,hehmedialaltonearabic:64425,hehmedialarabic:65260,heiseierasquare:13179,hekatakana:12504,hekatakanahalfwidth:65421,hekutaarusquare:13110,henghook:615,
-herutusquare:13113,het:1495,hethebrew:1495,hhook:614,hhooksuperior:689,hieuhacirclekorean:12923,hieuhaparenkorean:12827,hieuhcirclekorean:12909,hieuhkorean:12622,hieuhparenkorean:12813,hihiragana:12402,hikatakana:12498,hikatakanahalfwidth:65419,hiriq:1460,hiriq14:1460,hiriq21:1460,hiriq2d:1460,hiriqhebrew:1460,hiriqnarrowhebrew:1460,hiriqquarterhebrew:1460,hiriqwidehebrew:1460,hlinebelow:7830,hmonospace:65352,hoarmenian:1392,hohipthai:3627,hohiragana:12411,hokatakana:12507,hokatakanahalfwidth:65422,
-holam:1465,holam19:1465,holam26:1465,holam32:1465,holamhebrew:1465,holamnarrowhebrew:1465,holamquarterhebrew:1465,holamwidehebrew:1465,honokhukthai:3630,hookabovecomb:777,hookcmb:777,hookpalatalizedbelowcmb:801,hookretroflexbelowcmb:802,hoonsquare:13122,horicoptic:1001,horizontalbar:8213,horncmb:795,hotsprings:9832,house:8962,hparen:9379,hsuperior:688,hturned:613,huhiragana:12405,huiitosquare:13107,hukatakana:12501,hukatakanahalfwidth:65420,hungarumlaut:733,hungarumlautcmb:779,hv:405,hyphen:45,hypheninferior:63205,
-hyphenmonospace:65293,hyphensmall:65123,hyphensuperior:63206,hyphentwo:8208,i:105,iacute:237,iacyrillic:1103,ibengali:2439,ibopomofo:12583,ibreve:301,icaron:464,icircle:9432,icircumflex:238,icyrillic:1110,idblgrave:521,ideographearthcircle:12943,ideographfirecircle:12939,ideographicallianceparen:12863,ideographiccallparen:12858,ideographiccentrecircle:12965,ideographicclose:12294,ideographiccomma:12289,ideographiccommaleft:65380,ideographiccongratulationparen:12855,ideographiccorrectcircle:12963,
-ideographicearthparen:12847,ideographicenterpriseparen:12861,ideographicexcellentcircle:12957,ideographicfestivalparen:12864,ideographicfinancialcircle:12950,ideographicfinancialparen:12854,ideographicfireparen:12843,ideographichaveparen:12850,ideographichighcircle:12964,ideographiciterationmark:12293,ideographiclaborcircle:12952,ideographiclaborparen:12856,ideographicleftcircle:12967,ideographiclowcircle:12966,ideographicmedicinecircle:12969,ideographicmetalparen:12846,ideographicmoonparen:12842,
-ideographicnameparen:12852,ideographicperiod:12290,ideographicprintcircle:12958,ideographicreachparen:12867,ideographicrepresentparen:12857,ideographicresourceparen:12862,ideographicrightcircle:12968,ideographicsecretcircle:12953,ideographicselfparen:12866,ideographicsocietyparen:12851,ideographicspace:12288,ideographicspecialparen:12853,ideographicstockparen:12849,ideographicstudyparen:12859,ideographicsunparen:12848,ideographicsuperviseparen:12860,ideographicwaterparen:12844,ideographicwoodparen:12845,
-ideographiczero:12295,ideographmetalcircle:12942,ideographmooncircle:12938,ideographnamecircle:12948,ideographsuncircle:12944,ideographwatercircle:12940,ideographwoodcircle:12941,ideva:2311,idieresis:239,idieresisacute:7727,idieresiscyrillic:1253,idotbelow:7883,iebrevecyrillic:1239,iecyrillic:1077,ieungacirclekorean:12917,ieungaparenkorean:12821,ieungcirclekorean:12903,ieungkorean:12615,ieungparenkorean:12807,igrave:236,igujarati:2695,igurmukhi:2567,ihiragana:12356,ihookabove:7881,iibengali:2440,
-iicyrillic:1080,iideva:2312,iigujarati:2696,iigurmukhi:2568,iimatragurmukhi:2624,iinvertedbreve:523,iishortcyrillic:1081,iivowelsignbengali:2496,iivowelsigndeva:2368,iivowelsigngujarati:2752,ij:307,ikatakana:12452,ikatakanahalfwidth:65394,ikorean:12643,ilde:732,iluyhebrew:1452,imacron:299,imacroncyrillic:1251,imageorapproximatelyequal:8787,imatragurmukhi:2623,imonospace:65353,increment:8710,infinity:8734,iniarmenian:1387,integral:8747,integralbottom:8993,integralbt:8993,integralex:63733,integraltop:8992,
-integraltp:8992,intersection:8745,intisquare:13061,invbullet:9688,invcircle:9689,invsmileface:9787,iocyrillic:1105,iogonek:303,iota:953,iotadieresis:970,iotadieresistonos:912,iotalatin:617,iotatonos:943,iparen:9380,irigurmukhi:2674,ismallhiragana:12355,ismallkatakana:12451,ismallkatakanahalfwidth:65384,issharbengali:2554,istroke:616,isuperior:63213,iterationhiragana:12445,iterationkatakana:12541,itilde:297,itildebelow:7725,iubopomofo:12585,iucyrillic:1102,ivowelsignbengali:2495,ivowelsigndeva:2367,
-ivowelsigngujarati:2751,izhitsacyrillic:1141,izhitsadblgravecyrillic:1143,j:106,jaarmenian:1393,jabengali:2460,jadeva:2332,jagujarati:2716,jagurmukhi:2588,jbopomofo:12560,jcaron:496,jcircle:9433,jcircumflex:309,jcrossedtail:669,jdotlessstroke:607,jecyrillic:1112,jeemarabic:1580,jeemfinalarabic:65182,jeeminitialarabic:65183,jeemmedialarabic:65184,jeharabic:1688,jehfinalarabic:64395,jhabengali:2461,jhadeva:2333,jhagujarati:2717,jhagurmukhi:2589,jheharmenian:1403,jis:12292,jmonospace:65354,jparen:9381,
-jsuperior:690,k:107,kabashkircyrillic:1185,kabengali:2453,kacute:7729,kacyrillic:1082,kadescendercyrillic:1179,kadeva:2325,kaf:1499,kafarabic:1603,kafdagesh:64315,kafdageshhebrew:64315,kaffinalarabic:65242,kafhebrew:1499,kafinitialarabic:65243,kafmedialarabic:65244,kafrafehebrew:64333,kagujarati:2709,kagurmukhi:2581,kahiragana:12363,kahookcyrillic:1220,kakatakana:12459,kakatakanahalfwidth:65398,kappa:954,kappasymbolgreek:1008,kapyeounmieumkorean:12657,kapyeounphieuphkorean:12676,kapyeounpieupkorean:12664,
-kapyeounssangpieupkorean:12665,karoriisquare:13069,kashidaautoarabic:1600,kashidaautonosidebearingarabic:1600,kasmallkatakana:12533,kasquare:13188,kasraarabic:1616,kasratanarabic:1613,kastrokecyrillic:1183,katahiraprolongmarkhalfwidth:65392,kaverticalstrokecyrillic:1181,kbopomofo:12558,kcalsquare:13193,kcaron:489,kcedilla:311,kcircle:9434,kcommaaccent:311,kdotbelow:7731,keharmenian:1412,kehiragana:12369,kekatakana:12465,kekatakanahalfwidth:65401,kenarmenian:1391,kesmallkatakana:12534,kgreenlandic:312,
-khabengali:2454,khacyrillic:1093,khadeva:2326,khagujarati:2710,khagurmukhi:2582,khaharabic:1582,khahfinalarabic:65190,khahinitialarabic:65191,khahmedialarabic:65192,kheicoptic:999,khhadeva:2393,khhagurmukhi:2649,khieukhacirclekorean:12920,khieukhaparenkorean:12824,khieukhcirclekorean:12906,khieukhkorean:12619,khieukhparenkorean:12810,khokhaithai:3586,khokhonthai:3589,khokhuatthai:3587,khokhwaithai:3588,khomutthai:3675,khook:409,khorakhangthai:3590,khzsquare:13201,kihiragana:12365,kikatakana:12461,
-kikatakanahalfwidth:65399,kiroguramusquare:13077,kiromeetorusquare:13078,kirosquare:13076,kiyeokacirclekorean:12910,kiyeokaparenkorean:12814,kiyeokcirclekorean:12896,kiyeokkorean:12593,kiyeokparenkorean:12800,kiyeoksioskorean:12595,kjecyrillic:1116,klinebelow:7733,klsquare:13208,kmcubedsquare:13222,kmonospace:65355,kmsquaredsquare:13218,kohiragana:12371,kohmsquare:13248,kokaithai:3585,kokatakana:12467,kokatakanahalfwidth:65402,kooposquare:13086,koppacyrillic:1153,koreanstandardsymbol:12927,koroniscmb:835,
-kparen:9382,kpasquare:13226,ksicyrillic:1135,ktsquare:13263,kturned:670,kuhiragana:12367,kukatakana:12463,kukatakanahalfwidth:65400,kvsquare:13240,kwsquare:13246,l:108,labengali:2482,lacute:314,ladeva:2354,lagujarati:2738,lagurmukhi:2610,lakkhangyaothai:3653,lamaleffinalarabic:65276,lamalefhamzaabovefinalarabic:65272,lamalefhamzaaboveisolatedarabic:65271,lamalefhamzabelowfinalarabic:65274,lamalefhamzabelowisolatedarabic:65273,lamalefisolatedarabic:65275,lamalefmaddaabovefinalarabic:65270,lamalefmaddaaboveisolatedarabic:65269,
-lamarabic:1604,lambda:955,lambdastroke:411,lamed:1500,lameddagesh:64316,lameddageshhebrew:64316,lamedhebrew:1500,lamfinalarabic:65246,lamhahinitialarabic:64714,laminitialarabic:65247,lamjeeminitialarabic:64713,lamkhahinitialarabic:64715,lamlamhehisolatedarabic:65010,lammedialarabic:65248,lammeemhahinitialarabic:64904,lammeeminitialarabic:64716,largecircle:9711,lbar:410,lbelt:620,lbopomofo:12556,lcaron:318,lcedilla:316,lcircle:9435,lcircumflexbelow:7741,lcommaaccent:316,ldot:320,ldotaccent:320,ldotbelow:7735,
-ldotbelowmacron:7737,leftangleabovecmb:794,lefttackbelowcmb:792,less:60,lessequal:8804,lessequalorgreater:8922,lessmonospace:65308,lessorequivalent:8818,lessorgreater:8822,lessoverequal:8806,lesssmall:65124,lezh:622,lfblock:9612,lhookretroflex:621,lira:8356,liwnarmenian:1388,lj:457,ljecyrillic:1113,ll:63168,lladeva:2355,llagujarati:2739,llinebelow:7739,llladeva:2356,llvocalicbengali:2529,llvocalicdeva:2401,llvocalicvowelsignbengali:2531,llvocalicvowelsigndeva:2403,lmiddletilde:619,lmonospace:65356,
-lmsquare:13264,lochulathai:3628,logicaland:8743,logicalnot:172,logicalnotreversed:8976,logicalor:8744,lolingthai:3621,longs:383,lowlinecenterline:65102,lowlinecmb:818,lowlinedashed:65101,lozenge:9674,lparen:9383,lslash:322,lsquare:8467,lsuperior:63214,ltshade:9617,luthai:3622,lvocalicbengali:2444,lvocalicdeva:2316,lvocalicvowelsignbengali:2530,lvocalicvowelsigndeva:2402,lxsquare:13267,m:109,mabengali:2478,macron:175,macronbelowcmb:817,macroncmb:772,macronlowmod:717,macronmonospace:65507,macute:7743,
-madeva:2350,magujarati:2734,magurmukhi:2606,mahapakhhebrew:1444,mahapakhlefthebrew:1444,mahiragana:12414,maichattawalowleftthai:63637,maichattawalowrightthai:63636,maichattawathai:3659,maichattawaupperleftthai:63635,maieklowleftthai:63628,maieklowrightthai:63627,maiekthai:3656,maiekupperleftthai:63626,maihanakatleftthai:63620,maihanakatthai:3633,maitaikhuleftthai:63625,maitaikhuthai:3655,maitholowleftthai:63631,maitholowrightthai:63630,maithothai:3657,maithoupperleftthai:63629,maitrilowleftthai:63634,
-maitrilowrightthai:63633,maitrithai:3658,maitriupperleftthai:63632,maiyamokthai:3654,makatakana:12510,makatakanahalfwidth:65423,male:9794,mansyonsquare:13127,maqafhebrew:1470,mars:9794,masoracirclehebrew:1455,masquare:13187,mbopomofo:12551,mbsquare:13268,mcircle:9436,mcubedsquare:13221,mdotaccent:7745,mdotbelow:7747,meemarabic:1605,meemfinalarabic:65250,meeminitialarabic:65251,meemmedialarabic:65252,meemmeeminitialarabic:64721,meemmeemisolatedarabic:64584,meetorusquare:13133,mehiragana:12417,meizierasquare:13182,
-mekatakana:12513,mekatakanahalfwidth:65426,mem:1502,memdagesh:64318,memdageshhebrew:64318,memhebrew:1502,menarmenian:1396,merkhahebrew:1445,merkhakefulahebrew:1446,merkhakefulalefthebrew:1446,merkhalefthebrew:1445,mhook:625,mhzsquare:13202,middledotkatakanahalfwidth:65381,middot:183,mieumacirclekorean:12914,mieumaparenkorean:12818,mieumcirclekorean:12900,mieumkorean:12609,mieumpansioskorean:12656,mieumparenkorean:12804,mieumpieupkorean:12654,mieumsioskorean:12655,mihiragana:12415,mikatakana:12511,
-mikatakanahalfwidth:65424,minus:8722,minusbelowcmb:800,minuscircle:8854,minusmod:727,minusplus:8723,minute:8242,miribaarusquare:13130,mirisquare:13129,mlonglegturned:624,mlsquare:13206,mmcubedsquare:13219,mmonospace:65357,mmsquaredsquare:13215,mohiragana:12418,mohmsquare:13249,mokatakana:12514,mokatakanahalfwidth:65427,molsquare:13270,momathai:3617,moverssquare:13223,moverssquaredsquare:13224,mparen:9384,mpasquare:13227,mssquare:13235,msuperior:63215,mturned:623,mu:181,mu1:181,muasquare:13186,muchgreater:8811,
-muchless:8810,mufsquare:13196,mugreek:956,mugsquare:13197,muhiragana:12416,mukatakana:12512,mukatakanahalfwidth:65425,mulsquare:13205,multiply:215,mumsquare:13211,munahhebrew:1443,munahlefthebrew:1443,musicalnote:9834,musicalnotedbl:9835,musicflatsign:9837,musicsharpsign:9839,mussquare:13234,muvsquare:13238,muwsquare:13244,mvmegasquare:13241,mvsquare:13239,mwmegasquare:13247,mwsquare:13245,n:110,nabengali:2472,nabla:8711,nacute:324,nadeva:2344,nagujarati:2728,nagurmukhi:2600,nahiragana:12394,nakatakana:12490,
-nakatakanahalfwidth:65413,napostrophe:329,nasquare:13185,nbopomofo:12555,nbspace:160,ncaron:328,ncedilla:326,ncircle:9437,ncircumflexbelow:7755,ncommaaccent:326,ndotaccent:7749,ndotbelow:7751,nehiragana:12397,nekatakana:12493,nekatakanahalfwidth:65416,newsheqelsign:8362,nfsquare:13195,ngabengali:2457,ngadeva:2329,ngagujarati:2713,ngagurmukhi:2585,ngonguthai:3591,nhiragana:12435,nhookleft:626,nhookretroflex:627,nieunacirclekorean:12911,nieunaparenkorean:12815,nieuncieuckorean:12597,nieuncirclekorean:12897,
-nieunhieuhkorean:12598,nieunkorean:12596,nieunpansioskorean:12648,nieunparenkorean:12801,nieunsioskorean:12647,nieuntikeutkorean:12646,nihiragana:12395,nikatakana:12491,nikatakanahalfwidth:65414,nikhahitleftthai:63641,nikhahitthai:3661,nine:57,ninearabic:1641,ninebengali:2543,ninecircle:9320,ninecircleinversesansserif:10130,ninedeva:2415,ninegujarati:2799,ninegurmukhi:2671,ninehackarabic:1641,ninehangzhou:12329,nineideographicparen:12840,nineinferior:8329,ninemonospace:65305,nineoldstyle:63289,nineparen:9340,
-nineperiod:9360,ninepersian:1785,nineroman:8568,ninesuperior:8313,nineteencircle:9330,nineteenparen:9350,nineteenperiod:9370,ninethai:3673,nj:460,njecyrillic:1114,nkatakana:12531,nkatakanahalfwidth:65437,nlegrightlong:414,nlinebelow:7753,nmonospace:65358,nmsquare:13210,nnabengali:2467,nnadeva:2339,nnagujarati:2723,nnagurmukhi:2595,nnnadeva:2345,nohiragana:12398,nokatakana:12494,nokatakanahalfwidth:65417,nonbreakingspace:160,nonenthai:3603,nonuthai:3609,noonarabic:1606,noonfinalarabic:65254,noonghunnaarabic:1722,
-noonghunnafinalarabic:64415,nooninitialarabic:65255,noonjeeminitialarabic:64722,noonjeemisolatedarabic:64587,noonmedialarabic:65256,noonmeeminitialarabic:64725,noonmeemisolatedarabic:64590,noonnoonfinalarabic:64653,notcontains:8716,notelement:8713,notelementof:8713,notequal:8800,notgreater:8815,notgreaternorequal:8817,notgreaternorless:8825,notidentical:8802,notless:8814,notlessnorequal:8816,notparallel:8742,notprecedes:8832,notsubset:8836,notsucceeds:8833,notsuperset:8837,nowarmenian:1398,nparen:9385,
-nssquare:13233,nsuperior:8319,ntilde:241,nu:957,nuhiragana:12396,nukatakana:12492,nukatakanahalfwidth:65415,nuktabengali:2492,nuktadeva:2364,nuktagujarati:2748,nuktagurmukhi:2620,numbersign:35,numbersignmonospace:65283,numbersignsmall:65119,numeralsigngreek:884,numeralsignlowergreek:885,numero:8470,nun:1504,nundagesh:64320,nundageshhebrew:64320,nunhebrew:1504,nvsquare:13237,nwsquare:13243,nyabengali:2462,nyadeva:2334,nyagujarati:2718,nyagurmukhi:2590,o:111,oacute:243,oangthai:3629,obarred:629,obarredcyrillic:1257,
-obarreddieresiscyrillic:1259,obengali:2451,obopomofo:12571,obreve:335,ocandradeva:2321,ocandragujarati:2705,ocandravowelsigndeva:2377,ocandravowelsigngujarati:2761,ocaron:466,ocircle:9438,ocircumflex:244,ocircumflexacute:7889,ocircumflexdotbelow:7897,ocircumflexgrave:7891,ocircumflexhookabove:7893,ocircumflextilde:7895,ocyrillic:1086,odblacute:337,odblgrave:525,odeva:2323,odieresis:246,odieresiscyrillic:1255,odotbelow:7885,oe:339,oekorean:12634,ogonek:731,ogonekcmb:808,ograve:242,ogujarati:2707,oharmenian:1413,
-ohiragana:12362,ohookabove:7887,ohorn:417,ohornacute:7899,ohorndotbelow:7907,ohorngrave:7901,ohornhookabove:7903,ohorntilde:7905,ohungarumlaut:337,oi:419,oinvertedbreve:527,okatakana:12458,okatakanahalfwidth:65397,okorean:12631,olehebrew:1451,omacron:333,omacronacute:7763,omacrongrave:7761,omdeva:2384,omega:969,omega1:982,omegacyrillic:1121,omegalatinclosed:631,omegaroundcyrillic:1147,omegatitlocyrillic:1149,omegatonos:974,omgujarati:2768,omicron:959,omicrontonos:972,omonospace:65359,one:49,onearabic:1633,
-onebengali:2535,onecircle:9312,onecircleinversesansserif:10122,onedeva:2407,onedotenleader:8228,oneeighth:8539,onefitted:63196,onegujarati:2791,onegurmukhi:2663,onehackarabic:1633,onehalf:189,onehangzhou:12321,oneideographicparen:12832,oneinferior:8321,onemonospace:65297,onenumeratorbengali:2548,oneoldstyle:63281,oneparen:9332,oneperiod:9352,onepersian:1777,onequarter:188,oneroman:8560,onesuperior:185,onethai:3665,onethird:8531,oogonek:491,oogonekmacron:493,oogurmukhi:2579,oomatragurmukhi:2635,oopen:596,
-oparen:9386,openbullet:9702,option:8997,ordfeminine:170,ordmasculine:186,orthogonal:8735,oshortdeva:2322,oshortvowelsigndeva:2378,oslash:248,oslashacute:511,osmallhiragana:12361,osmallkatakana:12457,osmallkatakanahalfwidth:65387,ostrokeacute:511,osuperior:63216,otcyrillic:1151,otilde:245,otildeacute:7757,otildedieresis:7759,oubopomofo:12577,overline:8254,overlinecenterline:65098,overlinecmb:773,overlinedashed:65097,overlinedblwavy:65100,overlinewavy:65099,overscore:175,ovowelsignbengali:2507,ovowelsigndeva:2379,
-ovowelsigngujarati:2763,p:112,paampssquare:13184,paasentosquare:13099,pabengali:2474,pacute:7765,padeva:2346,pagedown:8671,pageup:8670,pagujarati:2730,pagurmukhi:2602,pahiragana:12401,paiyannoithai:3631,pakatakana:12497,palatalizationcyrilliccmb:1156,palochkacyrillic:1216,pansioskorean:12671,paragraph:182,parallel:8741,parenleft:40,parenleftaltonearabic:64830,parenleftbt:63725,parenleftex:63724,parenleftinferior:8333,parenleftmonospace:65288,parenleftsmall:65113,parenleftsuperior:8317,parenlefttp:63723,
-parenleftvertical:65077,parenright:41,parenrightaltonearabic:64831,parenrightbt:63736,parenrightex:63735,parenrightinferior:8334,parenrightmonospace:65289,parenrightsmall:65114,parenrightsuperior:8318,parenrighttp:63734,parenrightvertical:65078,partialdiff:8706,paseqhebrew:1472,pashtahebrew:1433,pasquare:13225,patah:1463,patah11:1463,patah1d:1463,patah2a:1463,patahhebrew:1463,patahnarrowhebrew:1463,patahquarterhebrew:1463,patahwidehebrew:1463,pazerhebrew:1441,pbopomofo:12550,pcircle:9439,pdotaccent:7767,
-pe:1508,pecyrillic:1087,pedagesh:64324,pedageshhebrew:64324,peezisquare:13115,pefinaldageshhebrew:64323,peharabic:1662,peharmenian:1402,pehebrew:1508,pehfinalarabic:64343,pehinitialarabic:64344,pehiragana:12410,pehmedialarabic:64345,pekatakana:12506,pemiddlehookcyrillic:1191,perafehebrew:64334,percent:37,percentarabic:1642,percentmonospace:65285,percentsmall:65130,period:46,periodarmenian:1417,periodcentered:183,periodhalfwidth:65377,periodinferior:63207,periodmonospace:65294,periodsmall:65106,periodsuperior:63208,
-perispomenigreekcmb:834,perpendicular:8869,perthousand:8240,peseta:8359,pfsquare:13194,phabengali:2475,phadeva:2347,phagujarati:2731,phagurmukhi:2603,phi:966,phi1:981,phieuphacirclekorean:12922,phieuphaparenkorean:12826,phieuphcirclekorean:12908,phieuphkorean:12621,phieuphparenkorean:12812,philatin:632,phinthuthai:3642,phisymbolgreek:981,phook:421,phophanthai:3614,phophungthai:3612,phosamphaothai:3616,pi:960,pieupacirclekorean:12915,pieupaparenkorean:12819,pieupcieuckorean:12662,pieupcirclekorean:12901,
-pieupkiyeokkorean:12658,pieupkorean:12610,pieupparenkorean:12805,pieupsioskiyeokkorean:12660,pieupsioskorean:12612,pieupsiostikeutkorean:12661,pieupthieuthkorean:12663,pieuptikeutkorean:12659,pihiragana:12404,pikatakana:12500,pisymbolgreek:982,piwrarmenian:1411,plus:43,plusbelowcmb:799,pluscircle:8853,plusminus:177,plusmod:726,plusmonospace:65291,plussmall:65122,plussuperior:8314,pmonospace:65360,pmsquare:13272,pohiragana:12413,pointingindexdownwhite:9759,pointingindexleftwhite:9756,pointingindexrightwhite:9758,
-pointingindexupwhite:9757,pokatakana:12509,poplathai:3611,postalmark:12306,postalmarkface:12320,pparen:9387,precedes:8826,prescription:8478,primemod:697,primereversed:8245,product:8719,projective:8965,prolongedkana:12540,propellor:8984,propersubset:8834,propersuperset:8835,proportion:8759,proportional:8733,psi:968,psicyrillic:1137,psilipneumatacyrilliccmb:1158,pssquare:13232,puhiragana:12407,pukatakana:12503,pvsquare:13236,pwsquare:13242,q:113,qadeva:2392,qadmahebrew:1448,qafarabic:1602,qaffinalarabic:65238,
-qafinitialarabic:65239,qafmedialarabic:65240,qamats:1464,qamats10:1464,qamats1a:1464,qamats1c:1464,qamats27:1464,qamats29:1464,qamats33:1464,qamatsde:1464,qamatshebrew:1464,qamatsnarrowhebrew:1464,qamatsqatanhebrew:1464,qamatsqatannarrowhebrew:1464,qamatsqatanquarterhebrew:1464,qamatsqatanwidehebrew:1464,qamatsquarterhebrew:1464,qamatswidehebrew:1464,qarneyparahebrew:1439,qbopomofo:12561,qcircle:9440,qhook:672,qmonospace:65361,qof:1511,qofdagesh:64327,qofdageshhebrew:64327,qofhebrew:1511,qparen:9388,
-quarternote:9833,qubuts:1467,qubuts18:1467,qubuts25:1467,qubuts31:1467,qubutshebrew:1467,qubutsnarrowhebrew:1467,qubutsquarterhebrew:1467,qubutswidehebrew:1467,question:63,questionarabic:1567,questionarmenian:1374,questiondown:191,questiondownsmall:63423,questiongreek:894,questionmonospace:65311,questionsmall:63295,quotedbl:34,quotedblbase:8222,quotedblleft:8220,quotedblmonospace:65282,quotedblprime:12318,quotedblprimereversed:12317,quotedblright:8221,quoteleft:8216,quoteleftreversed:8219,quotereversed:8219,
-quoteright:8217,quoterightn:329,quotesinglbase:8218,quotesingle:39,quotesinglemonospace:65287,r:114,raarmenian:1404,rabengali:2480,racute:341,radeva:2352,radical:8730,radicalex:63717,radoverssquare:13230,radoverssquaredsquare:13231,radsquare:13229,rafe:1471,rafehebrew:1471,ragujarati:2736,ragurmukhi:2608,rahiragana:12425,rakatakana:12521,rakatakanahalfwidth:65431,ralowerdiagonalbengali:2545,ramiddlediagonalbengali:2544,ramshorn:612,ratio:8758,rbopomofo:12566,rcaron:345,rcedilla:343,rcircle:9441,rcommaaccent:343,
-rdblgrave:529,rdotaccent:7769,rdotbelow:7771,rdotbelowmacron:7773,referencemark:8251,reflexsubset:8838,reflexsuperset:8839,registered:174,registersans:63720,registerserif:63194,reharabic:1585,reharmenian:1408,rehfinalarabic:65198,rehiragana:12428,rekatakana:12524,rekatakanahalfwidth:65434,resh:1512,reshdageshhebrew:64328,reshhebrew:1512,reversedtilde:8765,reviahebrew:1431,reviamugrashhebrew:1431,revlogicalnot:8976,rfishhook:638,rfishhookreversed:639,rhabengali:2525,rhadeva:2397,rho:961,rhook:637,
-rhookturned:635,rhookturnedsuperior:693,rhosymbolgreek:1009,rhotichookmod:734,rieulacirclekorean:12913,rieulaparenkorean:12817,rieulcirclekorean:12899,rieulhieuhkorean:12608,rieulkiyeokkorean:12602,rieulkiyeoksioskorean:12649,rieulkorean:12601,rieulmieumkorean:12603,rieulpansioskorean:12652,rieulparenkorean:12803,rieulphieuphkorean:12607,rieulpieupkorean:12604,rieulpieupsioskorean:12651,rieulsioskorean:12605,rieulthieuthkorean:12606,rieultikeutkorean:12650,rieulyeorinhieuhkorean:12653,rightangle:8735,
-righttackbelowcmb:793,righttriangle:8895,rihiragana:12426,rikatakana:12522,rikatakanahalfwidth:65432,ring:730,ringbelowcmb:805,ringcmb:778,ringhalfleft:703,ringhalfleftarmenian:1369,ringhalfleftbelowcmb:796,ringhalfleftcentered:723,ringhalfright:702,ringhalfrightbelowcmb:825,ringhalfrightcentered:722,rinvertedbreve:531,rittorusquare:13137,rlinebelow:7775,rlongleg:636,rlonglegturned:634,rmonospace:65362,rohiragana:12429,rokatakana:12525,rokatakanahalfwidth:65435,roruathai:3619,rparen:9389,rrabengali:2524,
-rradeva:2353,rragurmukhi:2652,rreharabic:1681,rrehfinalarabic:64397,rrvocalicbengali:2528,rrvocalicdeva:2400,rrvocalicgujarati:2784,rrvocalicvowelsignbengali:2500,rrvocalicvowelsigndeva:2372,rrvocalicvowelsigngujarati:2756,rsuperior:63217,rtblock:9616,rturned:633,rturnedsuperior:692,ruhiragana:12427,rukatakana:12523,rukatakanahalfwidth:65433,rupeemarkbengali:2546,rupeesignbengali:2547,rupiah:63197,ruthai:3620,rvocalicbengali:2443,rvocalicdeva:2315,rvocalicgujarati:2699,rvocalicvowelsignbengali:2499,
-rvocalicvowelsigndeva:2371,rvocalicvowelsigngujarati:2755,s:115,sabengali:2488,sacute:347,sacutedotaccent:7781,sadarabic:1589,sadeva:2360,sadfinalarabic:65210,sadinitialarabic:65211,sadmedialarabic:65212,sagujarati:2744,sagurmukhi:2616,sahiragana:12373,sakatakana:12469,sakatakanahalfwidth:65403,sallallahoualayhewasallamarabic:65018,samekh:1505,samekhdagesh:64321,samekhdageshhebrew:64321,samekhhebrew:1505,saraaathai:3634,saraaethai:3649,saraaimaimalaithai:3652,saraaimaimuanthai:3651,saraamthai:3635,
-saraathai:3632,saraethai:3648,saraiileftthai:63622,saraiithai:3637,saraileftthai:63621,saraithai:3636,saraothai:3650,saraueeleftthai:63624,saraueethai:3639,saraueleftthai:63623,sarauethai:3638,sarauthai:3640,sarauuthai:3641,sbopomofo:12569,scaron:353,scarondotaccent:7783,scedilla:351,schwa:601,schwacyrillic:1241,schwadieresiscyrillic:1243,schwahook:602,scircle:9442,scircumflex:349,scommaaccent:537,sdotaccent:7777,sdotbelow:7779,sdotbelowdotaccent:7785,seagullbelowcmb:828,second:8243,secondtonechinese:714,
-section:167,seenarabic:1587,seenfinalarabic:65202,seeninitialarabic:65203,seenmedialarabic:65204,segol:1462,segol13:1462,segol1f:1462,segol2c:1462,segolhebrew:1462,segolnarrowhebrew:1462,segolquarterhebrew:1462,segoltahebrew:1426,segolwidehebrew:1462,seharmenian:1405,sehiragana:12379,sekatakana:12475,sekatakanahalfwidth:65406,semicolon:59,semicolonarabic:1563,semicolonmonospace:65307,semicolonsmall:65108,semivoicedmarkkana:12444,semivoicedmarkkanahalfwidth:65439,sentisquare:13090,sentosquare:13091,
-seven:55,sevenarabic:1639,sevenbengali:2541,sevencircle:9318,sevencircleinversesansserif:10128,sevendeva:2413,seveneighths:8542,sevengujarati:2797,sevengurmukhi:2669,sevenhackarabic:1639,sevenhangzhou:12327,sevenideographicparen:12838,seveninferior:8327,sevenmonospace:65303,sevenoldstyle:63287,sevenparen:9338,sevenperiod:9358,sevenpersian:1783,sevenroman:8566,sevensuperior:8311,seventeencircle:9328,seventeenparen:9348,seventeenperiod:9368,seventhai:3671,sfthyphen:173,shaarmenian:1399,shabengali:2486,
-shacyrillic:1096,shaddaarabic:1617,shaddadammaarabic:64609,shaddadammatanarabic:64606,shaddafathaarabic:64608,shaddakasraarabic:64610,shaddakasratanarabic:64607,shade:9618,shadedark:9619,shadelight:9617,shademedium:9618,shadeva:2358,shagujarati:2742,shagurmukhi:2614,shalshelethebrew:1427,shbopomofo:12565,shchacyrillic:1097,sheenarabic:1588,sheenfinalarabic:65206,sheeninitialarabic:65207,sheenmedialarabic:65208,sheicoptic:995,sheqel:8362,sheqelhebrew:8362,sheva:1456,sheva115:1456,sheva15:1456,sheva22:1456,
-sheva2e:1456,shevahebrew:1456,shevanarrowhebrew:1456,shevaquarterhebrew:1456,shevawidehebrew:1456,shhacyrillic:1211,shimacoptic:1005,shin:1513,shindagesh:64329,shindageshhebrew:64329,shindageshshindot:64300,shindageshshindothebrew:64300,shindageshsindot:64301,shindageshsindothebrew:64301,shindothebrew:1473,shinhebrew:1513,shinshindot:64298,shinshindothebrew:64298,shinsindot:64299,shinsindothebrew:64299,shook:642,sigma:963,sigma1:962,sigmafinal:962,sigmalunatesymbolgreek:1010,sihiragana:12375,sikatakana:12471,
-sikatakanahalfwidth:65404,siluqhebrew:1469,siluqlefthebrew:1469,similar:8764,sindothebrew:1474,siosacirclekorean:12916,siosaparenkorean:12820,sioscieuckorean:12670,sioscirclekorean:12902,sioskiyeokkorean:12666,sioskorean:12613,siosnieunkorean:12667,siosparenkorean:12806,siospieupkorean:12669,siostikeutkorean:12668,six:54,sixarabic:1638,sixbengali:2540,sixcircle:9317,sixcircleinversesansserif:10127,sixdeva:2412,sixgujarati:2796,sixgurmukhi:2668,sixhackarabic:1638,sixhangzhou:12326,sixideographicparen:12837,
-sixinferior:8326,sixmonospace:65302,sixoldstyle:63286,sixparen:9337,sixperiod:9357,sixpersian:1782,sixroman:8565,sixsuperior:8310,sixteencircle:9327,sixteencurrencydenominatorbengali:2553,sixteenparen:9347,sixteenperiod:9367,sixthai:3670,slash:47,slashmonospace:65295,slong:383,slongdotaccent:7835,smileface:9786,smonospace:65363,sofpasuqhebrew:1475,softhyphen:173,softsigncyrillic:1100,sohiragana:12381,sokatakana:12477,sokatakanahalfwidth:65407,soliduslongoverlaycmb:824,solidusshortoverlaycmb:823,sorusithai:3625,
-sosalathai:3624,sosothai:3595,sosuathai:3626,space:32,spacehackarabic:32,spade:9824,spadesuitblack:9824,spadesuitwhite:9828,sparen:9390,squarebelowcmb:827,squarecc:13252,squarecm:13213,squarediagonalcrosshatchfill:9641,squarehorizontalfill:9636,squarekg:13199,squarekm:13214,squarekmcapital:13262,squareln:13265,squarelog:13266,squaremg:13198,squaremil:13269,squaremm:13212,squaremsquared:13217,squareorthogonalcrosshatchfill:9638,squareupperlefttolowerrightfill:9639,squareupperrighttolowerleftfill:9640,
-squareverticalfill:9637,squarewhitewithsmallblack:9635,srsquare:13275,ssabengali:2487,ssadeva:2359,ssagujarati:2743,ssangcieuckorean:12617,ssanghieuhkorean:12677,ssangieungkorean:12672,ssangkiyeokkorean:12594,ssangnieunkorean:12645,ssangpieupkorean:12611,ssangsioskorean:12614,ssangtikeutkorean:12600,ssuperior:63218,sterling:163,sterlingmonospace:65505,strokelongoverlaycmb:822,strokeshortoverlaycmb:821,subset:8834,subsetnotequal:8842,subsetorequal:8838,succeeds:8827,suchthat:8715,suhiragana:12377,
-sukatakana:12473,sukatakanahalfwidth:65405,sukunarabic:1618,summation:8721,sun:9788,superset:8835,supersetnotequal:8843,supersetorequal:8839,svsquare:13276,syouwaerasquare:13180,t:116,tabengali:2468,tackdown:8868,tackleft:8867,tadeva:2340,tagujarati:2724,tagurmukhi:2596,taharabic:1591,tahfinalarabic:65218,tahinitialarabic:65219,tahiragana:12383,tahmedialarabic:65220,taisyouerasquare:13181,takatakana:12479,takatakanahalfwidth:65408,tatweelarabic:1600,tau:964,tav:1514,tavdages:64330,tavdagesh:64330,
-tavdageshhebrew:64330,tavhebrew:1514,tbar:359,tbopomofo:12554,tcaron:357,tccurl:680,tcedilla:355,tcheharabic:1670,tchehfinalarabic:64379,tchehinitialarabic:64380,tchehmedialarabic:64381,tcircle:9443,tcircumflexbelow:7793,tcommaaccent:355,tdieresis:7831,tdotaccent:7787,tdotbelow:7789,tecyrillic:1090,tedescendercyrillic:1197,teharabic:1578,tehfinalarabic:65174,tehhahinitialarabic:64674,tehhahisolatedarabic:64524,tehinitialarabic:65175,tehiragana:12390,tehjeeminitialarabic:64673,tehjeemisolatedarabic:64523,
-tehmarbutaarabic:1577,tehmarbutafinalarabic:65172,tehmedialarabic:65176,tehmeeminitialarabic:64676,tehmeemisolatedarabic:64526,tehnoonfinalarabic:64627,tekatakana:12486,tekatakanahalfwidth:65411,telephone:8481,telephoneblack:9742,telishagedolahebrew:1440,telishaqetanahebrew:1449,tencircle:9321,tenideographicparen:12841,tenparen:9341,tenperiod:9361,tenroman:8569,tesh:679,tet:1496,tetdagesh:64312,tetdageshhebrew:64312,tethebrew:1496,tetsecyrillic:1205,tevirhebrew:1435,tevirlefthebrew:1435,thabengali:2469,
-thadeva:2341,thagujarati:2725,thagurmukhi:2597,thalarabic:1584,thalfinalarabic:65196,thanthakhatlowleftthai:63640,thanthakhatlowrightthai:63639,thanthakhatthai:3660,thanthakhatupperleftthai:63638,theharabic:1579,thehfinalarabic:65178,thehinitialarabic:65179,thehmedialarabic:65180,thereexists:8707,therefore:8756,theta:952,theta1:977,thetasymbolgreek:977,thieuthacirclekorean:12921,thieuthaparenkorean:12825,thieuthcirclekorean:12907,thieuthkorean:12620,thieuthparenkorean:12811,thirteencircle:9324,thirteenparen:9344,
-thirteenperiod:9364,thonangmonthothai:3601,thook:429,thophuthaothai:3602,thorn:254,thothahanthai:3607,thothanthai:3600,thothongthai:3608,thothungthai:3606,thousandcyrillic:1154,thousandsseparatorarabic:1644,thousandsseparatorpersian:1644,three:51,threearabic:1635,threebengali:2537,threecircle:9314,threecircleinversesansserif:10124,threedeva:2409,threeeighths:8540,threegujarati:2793,threegurmukhi:2665,threehackarabic:1635,threehangzhou:12323,threeideographicparen:12834,threeinferior:8323,threemonospace:65299,
-threenumeratorbengali:2550,threeoldstyle:63283,threeparen:9334,threeperiod:9354,threepersian:1779,threequarters:190,threequartersemdash:63198,threeroman:8562,threesuperior:179,threethai:3667,thzsquare:13204,tihiragana:12385,tikatakana:12481,tikatakanahalfwidth:65409,tikeutacirclekorean:12912,tikeutaparenkorean:12816,tikeutcirclekorean:12898,tikeutkorean:12599,tikeutparenkorean:12802,tilde:732,tildebelowcmb:816,tildecmb:771,tildecomb:771,tildedoublecmb:864,tildeoperator:8764,tildeoverlaycmb:820,tildeverticalcmb:830,
-timescircle:8855,tipehahebrew:1430,tipehalefthebrew:1430,tippigurmukhi:2672,titlocyrilliccmb:1155,tiwnarmenian:1407,tlinebelow:7791,tmonospace:65364,toarmenian:1385,tohiragana:12392,tokatakana:12488,tokatakanahalfwidth:65412,tonebarextrahighmod:741,tonebarextralowmod:745,tonebarhighmod:742,tonebarlowmod:744,tonebarmidmod:743,tonefive:445,tonesix:389,tonetwo:424,tonos:900,tonsquare:13095,topatakthai:3599,tortoiseshellbracketleft:12308,tortoiseshellbracketleftsmall:65117,tortoiseshellbracketleftvertical:65081,
-tortoiseshellbracketright:12309,tortoiseshellbracketrightsmall:65118,tortoiseshellbracketrightvertical:65082,totaothai:3605,tpalatalhook:427,tparen:9391,trademark:8482,trademarksans:63722,trademarkserif:63195,tretroflexhook:648,triagdn:9660,triaglf:9668,triagrt:9658,triagup:9650,ts:678,tsadi:1510,tsadidagesh:64326,tsadidageshhebrew:64326,tsadihebrew:1510,tsecyrillic:1094,tsere:1461,tsere12:1461,tsere1e:1461,tsere2b:1461,tserehebrew:1461,tserenarrowhebrew:1461,tserequarterhebrew:1461,tserewidehebrew:1461,
-tshecyrillic:1115,tsuperior:63219,ttabengali:2463,ttadeva:2335,ttagujarati:2719,ttagurmukhi:2591,tteharabic:1657,ttehfinalarabic:64359,ttehinitialarabic:64360,ttehmedialarabic:64361,tthabengali:2464,tthadeva:2336,tthagujarati:2720,tthagurmukhi:2592,tturned:647,tuhiragana:12388,tukatakana:12484,tukatakanahalfwidth:65410,tusmallhiragana:12387,tusmallkatakana:12483,tusmallkatakanahalfwidth:65391,twelvecircle:9323,twelveparen:9343,twelveperiod:9363,twelveroman:8571,twentycircle:9331,twentyhangzhou:21316,
-twentyparen:9351,twentyperiod:9371,two:50,twoarabic:1634,twobengali:2536,twocircle:9313,twocircleinversesansserif:10123,twodeva:2408,twodotenleader:8229,twodotleader:8229,twodotleadervertical:65072,twogujarati:2792,twogurmukhi:2664,twohackarabic:1634,twohangzhou:12322,twoideographicparen:12833,twoinferior:8322,twomonospace:65298,twonumeratorbengali:2549,twooldstyle:63282,twoparen:9333,twoperiod:9353,twopersian:1778,tworoman:8561,twostroke:443,twosuperior:178,twothai:3666,twothirds:8532,u:117,uacute:250,
-ubar:649,ubengali:2441,ubopomofo:12584,ubreve:365,ucaron:468,ucircle:9444,ucircumflex:251,ucircumflexbelow:7799,ucyrillic:1091,udattadeva:2385,udblacute:369,udblgrave:533,udeva:2313,udieresis:252,udieresisacute:472,udieresisbelow:7795,udieresiscaron:474,udieresiscyrillic:1265,udieresisgrave:476,udieresismacron:470,udotbelow:7909,ugrave:249,ugujarati:2697,ugurmukhi:2569,uhiragana:12358,uhookabove:7911,uhorn:432,uhornacute:7913,uhorndotbelow:7921,uhorngrave:7915,uhornhookabove:7917,uhorntilde:7919,
-uhungarumlaut:369,uhungarumlautcyrillic:1267,uinvertedbreve:535,ukatakana:12454,ukatakanahalfwidth:65395,ukcyrillic:1145,ukorean:12636,umacron:363,umacroncyrillic:1263,umacrondieresis:7803,umatragurmukhi:2625,umonospace:65365,underscore:95,underscoredbl:8215,underscoremonospace:65343,underscorevertical:65075,underscorewavy:65103,union:8746,universal:8704,uogonek:371,uparen:9392,upblock:9600,upperdothebrew:1476,upsilon:965,upsilondieresis:971,upsilondieresistonos:944,upsilonlatin:650,upsilontonos:973,
-uptackbelowcmb:797,uptackmod:724,uragurmukhi:2675,uring:367,ushortcyrillic:1118,usmallhiragana:12357,usmallkatakana:12453,usmallkatakanahalfwidth:65385,ustraightcyrillic:1199,ustraightstrokecyrillic:1201,utilde:361,utildeacute:7801,utildebelow:7797,uubengali:2442,uudeva:2314,uugujarati:2698,uugurmukhi:2570,uumatragurmukhi:2626,uuvowelsignbengali:2498,uuvowelsigndeva:2370,uuvowelsigngujarati:2754,uvowelsignbengali:2497,uvowelsigndeva:2369,uvowelsigngujarati:2753,v:118,vadeva:2357,vagujarati:2741,vagurmukhi:2613,
-vakatakana:12535,vav:1493,vavdagesh:64309,vavdagesh65:64309,vavdageshhebrew:64309,vavhebrew:1493,vavholam:64331,vavholamhebrew:64331,vavvavhebrew:1520,vavyodhebrew:1521,vcircle:9445,vdotbelow:7807,vecyrillic:1074,veharabic:1700,vehfinalarabic:64363,vehinitialarabic:64364,vehmedialarabic:64365,vekatakana:12537,venus:9792,verticalbar:124,verticallineabovecmb:781,verticallinebelowcmb:809,verticallinelowmod:716,verticallinemod:712,vewarmenian:1406,vhook:651,vikatakana:12536,viramabengali:2509,viramadeva:2381,
-viramagujarati:2765,visargabengali:2435,visargadeva:2307,visargagujarati:2691,vmonospace:65366,voarmenian:1400,voicediterationhiragana:12446,voicediterationkatakana:12542,voicedmarkkana:12443,voicedmarkkanahalfwidth:65438,vokatakana:12538,vparen:9393,vtilde:7805,vturned:652,vuhiragana:12436,vukatakana:12532,w:119,wacute:7811,waekorean:12633,wahiragana:12431,wakatakana:12527,wakatakanahalfwidth:65436,wakorean:12632,wasmallhiragana:12430,wasmallkatakana:12526,wattosquare:13143,wavedash:12316,wavyunderscorevertical:65076,
-wawarabic:1608,wawfinalarabic:65262,wawhamzaabovearabic:1572,wawhamzaabovefinalarabic:65158,wbsquare:13277,wcircle:9446,wcircumflex:373,wdieresis:7813,wdotaccent:7815,wdotbelow:7817,wehiragana:12433,weierstrass:8472,wekatakana:12529,wekorean:12638,weokorean:12637,wgrave:7809,whitebullet:9702,whitecircle:9675,whitecircleinverse:9689,whitecornerbracketleft:12302,whitecornerbracketleftvertical:65091,whitecornerbracketright:12303,whitecornerbracketrightvertical:65092,whitediamond:9671,whitediamondcontainingblacksmalldiamond:9672,
-whitedownpointingsmalltriangle:9663,whitedownpointingtriangle:9661,whiteleftpointingsmalltriangle:9667,whiteleftpointingtriangle:9665,whitelenticularbracketleft:12310,whitelenticularbracketright:12311,whiterightpointingsmalltriangle:9657,whiterightpointingtriangle:9655,whitesmallsquare:9643,whitesmilingface:9786,whitesquare:9633,whitestar:9734,whitetelephone:9743,whitetortoiseshellbracketleft:12312,whitetortoiseshellbracketright:12313,whiteuppointingsmalltriangle:9653,whiteuppointingtriangle:9651,
-wihiragana:12432,wikatakana:12528,wikorean:12639,wmonospace:65367,wohiragana:12434,wokatakana:12530,wokatakanahalfwidth:65382,won:8361,wonmonospace:65510,wowaenthai:3623,wparen:9394,wring:7832,wsuperior:695,wturned:653,wynn:447,x:120,xabovecmb:829,xbopomofo:12562,xcircle:9447,xdieresis:7821,xdotaccent:7819,xeharmenian:1389,xi:958,xmonospace:65368,xparen:9395,xsuperior:739,y:121,yaadosquare:13134,yabengali:2479,yacute:253,yadeva:2351,yaekorean:12626,yagujarati:2735,yagurmukhi:2607,yahiragana:12420,
-yakatakana:12516,yakatakanahalfwidth:65428,yakorean:12625,yamakkanthai:3662,yasmallhiragana:12419,yasmallkatakana:12515,yasmallkatakanahalfwidth:65388,yatcyrillic:1123,ycircle:9448,ycircumflex:375,ydieresis:255,ydotaccent:7823,ydotbelow:7925,yeharabic:1610,yehbarreearabic:1746,yehbarreefinalarabic:64431,yehfinalarabic:65266,yehhamzaabovearabic:1574,yehhamzaabovefinalarabic:65162,yehhamzaaboveinitialarabic:65163,yehhamzaabovemedialarabic:65164,yehinitialarabic:65267,yehmedialarabic:65268,yehmeeminitialarabic:64733,
-yehmeemisolatedarabic:64600,yehnoonfinalarabic:64660,yehthreedotsbelowarabic:1745,yekorean:12630,yen:165,yenmonospace:65509,yeokorean:12629,yeorinhieuhkorean:12678,yerahbenyomohebrew:1450,yerahbenyomolefthebrew:1450,yericyrillic:1099,yerudieresiscyrillic:1273,yesieungkorean:12673,yesieungpansioskorean:12675,yesieungsioskorean:12674,yetivhebrew:1434,ygrave:7923,yhook:436,yhookabove:7927,yiarmenian:1397,yicyrillic:1111,yikorean:12642,yinyang:9775,yiwnarmenian:1410,ymonospace:65369,yod:1497,yoddagesh:64313,
-yoddageshhebrew:64313,yodhebrew:1497,yodyodhebrew:1522,yodyodpatahhebrew:64287,yohiragana:12424,yoikorean:12681,yokatakana:12520,yokatakanahalfwidth:65430,yokorean:12635,yosmallhiragana:12423,yosmallkatakana:12519,yosmallkatakanahalfwidth:65390,yotgreek:1011,yoyaekorean:12680,yoyakorean:12679,yoyakthai:3618,yoyingthai:3597,yparen:9396,ypogegrammeni:890,ypogegrammenigreekcmb:837,yr:422,yring:7833,ysuperior:696,ytilde:7929,yturned:654,yuhiragana:12422,yuikorean:12684,yukatakana:12518,yukatakanahalfwidth:65429,
-yukorean:12640,yusbigcyrillic:1131,yusbigiotifiedcyrillic:1133,yuslittlecyrillic:1127,yuslittleiotifiedcyrillic:1129,yusmallhiragana:12421,yusmallkatakana:12517,yusmallkatakanahalfwidth:65389,yuyekorean:12683,yuyeokorean:12682,yyabengali:2527,yyadeva:2399,z:122,zaarmenian:1382,zacute:378,zadeva:2395,zagurmukhi:2651,zaharabic:1592,zahfinalarabic:65222,zahinitialarabic:65223,zahiragana:12374,zahmedialarabic:65224,zainarabic:1586,zainfinalarabic:65200,zakatakana:12470,zaqefgadolhebrew:1429,zaqefqatanhebrew:1428,
-zarqahebrew:1432,zayin:1494,zayindagesh:64310,zayindageshhebrew:64310,zayinhebrew:1494,zbopomofo:12567,zcaron:382,zcircle:9449,zcircumflex:7825,zcurl:657,zdot:380,zdotaccent:380,zdotbelow:7827,zecyrillic:1079,zedescendercyrillic:1177,zedieresiscyrillic:1247,zehiragana:12380,zekatakana:12476,zero:48,zeroarabic:1632,zerobengali:2534,zerodeva:2406,zerogujarati:2790,zerogurmukhi:2662,zerohackarabic:1632,zeroinferior:8320,zeromonospace:65296,zerooldstyle:63280,zeropersian:1776,zerosuperior:8304,zerothai:3664,
-zerowidthjoiner:65279,zerowidthnonjoiner:8204,zerowidthspace:8203,zeta:950,zhbopomofo:12563,zhearmenian:1386,zhebrevecyrillic:1218,zhecyrillic:1078,zhedescendercyrillic:1175,zhedieresiscyrillic:1245,zihiragana:12376,zikatakana:12472,zinorhebrew:1454,zlinebelow:7829,zmonospace:65370,zohiragana:12382,zokatakana:12478,zparen:9397,zretroflexhook:656,zstroke:438,zuhiragana:12378,zukatakana:12474,".notdef":0},cd,td=function(a,b,c,d,e){if(d instanceof ub&&d.isNativelyDecodable(b,c)){var f=d.dict.get("ColorSpace",
-"CS"),f=Q.parse(f,b,c);b=f.numComps;a.send("JpegDecode",[d.getIR(),b],function(a){a=a.data;a=new Jb(a,0,a.length,d.dict);e.resolve(a)})}else e.resolve(d)},za=function(a,b,c,d,e,f){this.image=c;c.getParams&&ga("get params from actual stream");d=c.dict;this.width=d.get("Width","W");this.height=d.get("Height","H");(1>this.width||1>this.height)&&s("Invalid image width: "+this.width+" or height: "+this.height);this.interpolate=d.get("Interpolate","I")||!1;this.imageMask=d.get("ImageMask","IM")||!1;c=c.bitsPerComponent;
-c||(c=d.get("BitsPerComponent","BPC"))||(this.imageMask?c=1:s("Bits per component missing in image: "+this.imageMask));this.bpc=c;if(!this.imageMask){var g=d.get("ColorSpace","CS");g||(ga('JPX images (which don"t require color spaces'),g=new ka("DeviceRGB"));this.colorSpace=Q.parse(g,a,b);this.numComps=this.colorSpace.numComps}this.decode=d.get("Decode","D");this.needsDecode=!1;if(this.decode&&this.colorSpace&&!this.colorSpace.isDefaultDecode(this.decode)){this.needsDecode=!0;d=(1<<c)-1;this.decodeCoefficients=
-[];this.decodeAddends=[];for(g=c=0;c<this.decode.length;c+=2,++g){var h=this.decode[c];this.decodeCoefficients[g]=this.decode[c+1]-h;this.decodeAddends[g]=d*h}}e?this.smask=new za(a,b,e,!1):f&&(this.mask=G(f)?new za(a,b,f,!1):f)};za.buildImage=function(a,b,c,d,e,f){var g=new ib,h=new ib,k=new ib;ib.all([g,h,k]).then(function(b){b=new za(c,d,b[0],f,b[1],b[2]);a(b)});td(b,c,d,e,g);g=e.dict.get("SMask");e=e.dict.get("Mask");g?(td(b,c,d,g,h),k.resolve(null)):(h.resolve(null),e?G(e)?td(b,c,d,e,k):I(e)?
-k.resolve(e):(R("Unsupported mask format."),k.resolve(null)):k.resolve(null))};za.resize=function(a,b,c,d,e,f,g){var h=f*g*c;b=8>=b?new Uint8Array(h):16>=b?new Uint16Array(h):new Uint32Array(h);h=d/f;e/=g;for(var k,j,l,n=0;n<g;n++)for(var p=0;p<f;p++)k=Math.floor(p*h),j=Math.floor(n*e),l=n*f+p,k=j*d+k,1===c?b[l]=a[k]:3===c&&(l*=3,k*=3,b[l]=a[k],b[l+1]=a[k+1],b[l+2]=a[k+2]);return b};za.prototype={get drawWidth(){return!this.smask?this.width:Math.max(this.width,this.smask.width)},get drawHeight(){return!this.smask?
-this.height:Math.max(this.height,this.smask.height)},getComponents:function(a){var b=this.bpc,c=this.needsDecode,d=this.decode;if(8==b&&!c)return a;var e=this.width,f=this.numComps,g=e*this.height*f,h=0,k=8>=b?new Uint8Array(g):16>=b?new Uint16Array(g):new Uint32Array(g),e=e*f,j,l;c&&(j=this.decodeAddends,l=this.decodeCoefficients);var n=(1<<b)-1;if(8==b)for(d=0;d<g;++d){var p=d%f,m=a[d],h=m,h=j[p]+h*l[p],m=0>h?0:h>n?n:h;k[d]=m}else if(1==b){f=0;j=1;d&&(f=d[0]?1:0,j=d[1]?1:0);for(var r=l=0,d=0;d<
-g;++d)0==d%e?r=l=0:l>>=1,0>=l&&(r=a[h++],l=128),k[d]=!(r&l)?f:j}else for(d=r=p=0;d<g;++d){0==d%e&&(p=r=0);for(;p<b;)r=r<<8|a[h++],p+=8;var q=p-b,m=r>>q;c&&(p=d%f,m=j[p]+m*l[p],m=0>m?0:m>n?n:m);k[d]=m;r&=(1<<q)-1;p=q}return k},getOpacity:function(a,b,c){var d=this.smask,e=this.mask,f;if(d){c=d.width;var g=d.height;f=new Uint8Array(c*g);d.fillGrayBuffer(f);if(c!=a||g!=b)f=za.resize(f,d.bpc,1,c,g,a,b)}else if(e)if(e instanceof za){c=e.width;g=e.height;f=new Uint8Array(c*g);e.numComps=1;e.fillGrayBuffer(f);
-for(var d=0,h=c*g;d<h;++d)f[d]=255-f[d];if(c!=a||g!=b)f=za.resize(f,e.bpc,1,c,g,a,b)}else if(I(e)){f=new Uint8Array(a*b);g=this.numComps;d=0;for(h=a*b;d<h;++d){a=0;b=d*g;for(var k=0;k<g;++k){var j=c[b+k],l=2*k;if(j<e[l]||j>e[l+1]){a=255;break}}f[d]=a}}else s("Unknown mask format.");else{f=new Uint8Array(a*b);d=0;for(h=a*b;d<h;++d)f[d]=255}return f},applyStencilMask:function(a,b){var c=this.width,d=this.height,e=this.getImageBytes((c+7>>3)*d),f=0,g,h,k,j,l=3;for(g=0;g<d;g++)for(h=k=0;h<c;h++)k||(j=
-e[f++],k=128),!(j&k)==b&&(a[l]=0),l+=4,k>>=1},fillRgbaBuffer:function(a,b,c){var d=this.width,e=this.height,f=this.bpc,g=d*this.numComps*f+7>>3,h=this.getImageBytes(e*g),g=0|h.length/g*c/e,f=this.colorSpace.createRgbBuffer(this.getComponents(h),0,d*e,f);if(d!=b||e!=c)f=za.resize(f,this.bpc,3,d,e,b,c);d=0;c=this.getOpacity(b,c,h);h=0;b=4*b*g;for(g=0;g<b;g+=4)a[g]=f[d++],a[g+1]=f[d++],a[g+2]=f[d++],a[g+3]=c[h++]},fillGrayBuffer:function(a){var b=this.numComps;1!=b&&s("Reading gray scale from a color image: "+
-b);for(var c=this.width,d=this.height,e=this.bpc,b=this.getImageBytes(d*(c*b*e+7>>3)),b=this.getComponents(b),c=c*d,e=255/((1<<e)-1),d=0;d<c;++d)a[d]=e*b[d]|0},getImageData:function(){var a=this.drawWidth,b=this.drawHeight,c={width:a,height:b,data:new Uint8Array(4*a*b)};this.fillRgbaBuffer(c.data,a,b);return c},getImageBytes:function(a){this.image.reset();return this.image.getBytes(a)}};cd=za;var ff={Courier:600,"Courier-Bold":600,"Courier-BoldOblique":600,"Courier-Oblique":600,Helvetica:{space:278,
-exclam:278,quotedbl:355,numbersign:556,dollar:556,percent:889,ampersand:667,quoteright:222,parenleft:333,parenright:333,asterisk:389,plus:584,comma:278,hyphen:333,period:278,slash:278,zero:556,one:556,two:556,three:556,four:556,five:556,six:556,seven:556,eight:556,nine:556,colon:278,semicolon:278,less:584,equal:584,greater:584,question:556,at:1015,A:667,B:667,C:722,D:722,E:667,F:611,G:778,H:722,I:278,J:500,K:667,L:556,M:833,N:722,O:778,P:667,Q:778,R:722,S:667,T:611,U:722,V:667,W:944,X:667,Y:667,Z:611,
-bracketleft:278,backslash:278,bracketright:278,asciicircum:469,underscore:556,quoteleft:222,a:556,b:556,c:500,d:556,e:556,f:278,g:556,h:556,i:222,j:222,k:500,l:222,m:833,n:556,o:556,p:556,q:556,r:333,s:500,t:278,u:556,v:500,w:722,x:500,y:500,z:500,braceleft:334,bar:260,braceright:334,asciitilde:584,exclamdown:333,cent:556,sterling:556,fraction:167,yen:556,florin:556,section:556,currency:556,quotesingle:191,quotedblleft:333,guillemotleft:556,guilsinglleft:333,guilsinglright:333,fi:500,fl:500,endash:556,
-dagger:556,daggerdbl:556,periodcentered:278,paragraph:537,bullet:350,quotesinglbase:222,quotedblbase:333,quotedblright:333,guillemotright:556,ellipsis:1E3,perthousand:1E3,questiondown:611,grave:333,acute:333,circumflex:333,tilde:333,macron:333,breve:333,dotaccent:333,dieresis:333,ring:333,cedilla:333,hungarumlaut:333,ogonek:333,caron:333,emdash:1E3,AE:1E3,ordfeminine:370,Lslash:556,Oslash:778,OE:1E3,ordmasculine:365,ae:889,dotlessi:278,lslash:222,oslash:611,oe:944,germandbls:611,Idieresis:278,eacute:556,
-abreve:556,uhungarumlaut:556,ecaron:556,Ydieresis:667,divide:584,Yacute:667,Acircumflex:667,aacute:556,Ucircumflex:722,yacute:500,scommaaccent:500,ecircumflex:556,Uring:722,Udieresis:722,aogonek:556,Uacute:722,uogonek:556,Edieresis:667,Dcroat:722,commaaccent:250,copyright:737,Emacron:667,ccaron:500,aring:556,Ncommaaccent:722,lacute:222,agrave:556,Tcommaaccent:611,Cacute:722,atilde:556,Edotaccent:667,scaron:500,scedilla:500,iacute:278,lozenge:471,Rcaron:722,Gcommaaccent:778,ucircumflex:556,acircumflex:556,
-Amacron:667,rcaron:333,ccedilla:500,Zdotaccent:611,Thorn:667,Omacron:778,Racute:722,Sacute:667,dcaron:643,Umacron:722,uring:556,threesuperior:333,Ograve:778,Agrave:667,Abreve:667,multiply:584,uacute:556,Tcaron:611,partialdiff:476,ydieresis:500,Nacute:722,icircumflex:278,Ecircumflex:667,adieresis:556,edieresis:556,cacute:500,nacute:556,umacron:556,Ncaron:722,Iacute:278,plusminus:584,brokenbar:260,registered:737,Gbreve:778,Idotaccent:278,summation:600,Egrave:667,racute:333,omacron:556,Zacute:611,Zcaron:611,
-greaterequal:549,Eth:722,Ccedilla:722,lcommaaccent:222,tcaron:317,eogonek:556,Uogonek:722,Aacute:667,Adieresis:667,egrave:556,zacute:500,iogonek:222,Oacute:778,oacute:556,amacron:556,sacute:500,idieresis:278,Ocircumflex:778,Ugrave:722,Delta:612,thorn:556,twosuperior:333,Odieresis:778,mu:556,igrave:278,ohungarumlaut:556,Eogonek:667,dcroat:556,threequarters:834,Scedilla:667,lcaron:299,Kcommaaccent:667,Lacute:556,trademark:1E3,edotaccent:556,Igrave:278,Imacron:278,Lcaron:556,onehalf:834,lessequal:549,
-ocircumflex:556,ntilde:556,Uhungarumlaut:722,Eacute:667,emacron:556,gbreve:556,onequarter:834,Scaron:667,Scommaaccent:667,Ohungarumlaut:778,degree:400,ograve:556,Ccaron:722,ugrave:556,radical:453,Dcaron:722,rcommaaccent:333,Ntilde:722,otilde:556,Rcommaaccent:722,Lcommaaccent:556,Atilde:667,Aogonek:667,Aring:667,Otilde:778,zdotaccent:500,Ecaron:667,Iogonek:278,kcommaaccent:500,minus:584,Icircumflex:278,ncaron:556,tcommaaccent:278,logicalnot:584,odieresis:556,udieresis:556,notequal:549,gcommaaccent:556,
-eth:556,zcaron:500,ncommaaccent:556,onesuperior:333,imacron:278,Euro:556},"Helvetica-Bold":{space:278,exclam:333,quotedbl:474,numbersign:556,dollar:556,percent:889,ampersand:722,quoteright:278,parenleft:333,parenright:333,asterisk:389,plus:584,comma:278,hyphen:333,period:278,slash:278,zero:556,one:556,two:556,three:556,four:556,five:556,six:556,seven:556,eight:556,nine:556,colon:333,semicolon:333,less:584,equal:584,greater:584,question:611,at:975,A:722,B:722,C:722,D:722,E:667,F:611,G:778,H:722,I:278,
-J:556,K:722,L:611,M:833,N:722,O:778,P:667,Q:778,R:722,S:667,T:611,U:722,V:667,W:944,X:667,Y:667,Z:611,bracketleft:333,backslash:278,bracketright:333,asciicircum:584,underscore:556,quoteleft:278,a:556,b:611,c:556,d:611,e:556,f:333,g:611,h:611,i:278,j:278,k:556,l:278,m:889,n:611,o:611,p:611,q:611,r:389,s:556,t:333,u:611,v:556,w:778,x:556,y:556,z:500,braceleft:389,bar:280,braceright:389,asciitilde:584,exclamdown:333,cent:556,sterling:556,fraction:167,yen:556,florin:556,section:556,currency:556,quotesingle:238,
-quotedblleft:500,guillemotleft:556,guilsinglleft:333,guilsinglright:333,fi:611,fl:611,endash:556,dagger:556,daggerdbl:556,periodcentered:278,paragraph:556,bullet:350,quotesinglbase:278,quotedblbase:500,quotedblright:500,guillemotright:556,ellipsis:1E3,perthousand:1E3,questiondown:611,grave:333,acute:333,circumflex:333,tilde:333,macron:333,breve:333,dotaccent:333,dieresis:333,ring:333,cedilla:333,hungarumlaut:333,ogonek:333,caron:333,emdash:1E3,AE:1E3,ordfeminine:370,Lslash:611,Oslash:778,OE:1E3,ordmasculine:365,
-ae:889,dotlessi:278,lslash:278,oslash:611,oe:944,germandbls:611,Idieresis:278,eacute:556,abreve:556,uhungarumlaut:611,ecaron:556,Ydieresis:667,divide:584,Yacute:667,Acircumflex:722,aacute:556,Ucircumflex:722,yacute:556,scommaaccent:556,ecircumflex:556,Uring:722,Udieresis:722,aogonek:556,Uacute:722,uogonek:611,Edieresis:667,Dcroat:722,commaaccent:250,copyright:737,Emacron:667,ccaron:556,aring:556,Ncommaaccent:722,lacute:278,agrave:556,Tcommaaccent:611,Cacute:722,atilde:556,Edotaccent:667,scaron:556,
-scedilla:556,iacute:278,lozenge:494,Rcaron:722,Gcommaaccent:778,ucircumflex:611,acircumflex:556,Amacron:722,rcaron:389,ccedilla:556,Zdotaccent:611,Thorn:667,Omacron:778,Racute:722,Sacute:667,dcaron:743,Umacron:722,uring:611,threesuperior:333,Ograve:778,Agrave:722,Abreve:722,multiply:584,uacute:611,Tcaron:611,partialdiff:494,ydieresis:556,Nacute:722,icircumflex:278,Ecircumflex:667,adieresis:556,edieresis:556,cacute:556,nacute:611,umacron:611,Ncaron:722,Iacute:278,plusminus:584,brokenbar:280,registered:737,
-Gbreve:778,Idotaccent:278,summation:600,Egrave:667,racute:389,omacron:611,Zacute:611,Zcaron:611,greaterequal:549,Eth:722,Ccedilla:722,lcommaaccent:278,tcaron:389,eogonek:556,Uogonek:722,Aacute:722,Adieresis:722,egrave:556,zacute:500,iogonek:278,Oacute:778,oacute:611,amacron:556,sacute:556,idieresis:278,Ocircumflex:778,Ugrave:722,Delta:612,thorn:611,twosuperior:333,Odieresis:778,mu:611,igrave:278,ohungarumlaut:611,Eogonek:667,dcroat:611,threequarters:834,Scedilla:667,lcaron:400,Kcommaaccent:722,Lacute:611,
-trademark:1E3,edotaccent:556,Igrave:278,Imacron:278,Lcaron:611,onehalf:834,lessequal:549,ocircumflex:611,ntilde:611,Uhungarumlaut:722,Eacute:667,emacron:556,gbreve:611,onequarter:834,Scaron:667,Scommaaccent:667,Ohungarumlaut:778,degree:400,ograve:611,Ccaron:722,ugrave:611,radical:549,Dcaron:722,rcommaaccent:389,Ntilde:722,otilde:611,Rcommaaccent:722,Lcommaaccent:611,Atilde:722,Aogonek:722,Aring:722,Otilde:778,zdotaccent:500,Ecaron:667,Iogonek:278,kcommaaccent:556,minus:584,Icircumflex:278,ncaron:611,
-tcommaaccent:333,logicalnot:584,odieresis:611,udieresis:611,notequal:549,gcommaaccent:611,eth:611,zcaron:500,ncommaaccent:611,onesuperior:333,imacron:278,Euro:556},"Helvetica-BoldOblique":{space:278,exclam:333,quotedbl:474,numbersign:556,dollar:556,percent:889,ampersand:722,quoteright:278,parenleft:333,parenright:333,asterisk:389,plus:584,comma:278,hyphen:333,period:278,slash:278,zero:556,one:556,two:556,three:556,four:556,five:556,six:556,seven:556,eight:556,nine:556,colon:333,semicolon:333,less:584,
-equal:584,greater:584,question:611,at:975,A:722,B:722,C:722,D:722,E:667,F:611,G:778,H:722,I:278,J:556,K:722,L:611,M:833,N:722,O:778,P:667,Q:778,R:722,S:667,T:611,U:722,V:667,W:944,X:667,Y:667,Z:611,bracketleft:333,backslash:278,bracketright:333,asciicircum:584,underscore:556,quoteleft:278,a:556,b:611,c:556,d:611,e:556,f:333,g:611,h:611,i:278,j:278,k:556,l:278,m:889,n:611,o:611,p:611,q:611,r:389,s:556,t:333,u:611,v:556,w:778,x:556,y:556,z:500,braceleft:389,bar:280,braceright:389,asciitilde:584,exclamdown:333,
-cent:556,sterling:556,fraction:167,yen:556,florin:556,section:556,currency:556,quotesingle:238,quotedblleft:500,guillemotleft:556,guilsinglleft:333,guilsinglright:333,fi:611,fl:611,endash:556,dagger:556,daggerdbl:556,periodcentered:278,paragraph:556,bullet:350,quotesinglbase:278,quotedblbase:500,quotedblright:500,guillemotright:556,ellipsis:1E3,perthousand:1E3,questiondown:611,grave:333,acute:333,circumflex:333,tilde:333,macron:333,breve:333,dotaccent:333,dieresis:333,ring:333,cedilla:333,hungarumlaut:333,
-ogonek:333,caron:333,emdash:1E3,AE:1E3,ordfeminine:370,Lslash:611,Oslash:778,OE:1E3,ordmasculine:365,ae:889,dotlessi:278,lslash:278,oslash:611,oe:944,germandbls:611,Idieresis:278,eacute:556,abreve:556,uhungarumlaut:611,ecaron:556,Ydieresis:667,divide:584,Yacute:667,Acircumflex:722,aacute:556,Ucircumflex:722,yacute:556,scommaaccent:556,ecircumflex:556,Uring:722,Udieresis:722,aogonek:556,Uacute:722,uogonek:611,Edieresis:667,Dcroat:722,commaaccent:250,copyright:737,Emacron:667,ccaron:556,aring:556,Ncommaaccent:722,
-lacute:278,agrave:556,Tcommaaccent:611,Cacute:722,atilde:556,Edotaccent:667,scaron:556,scedilla:556,iacute:278,lozenge:494,Rcaron:722,Gcommaaccent:778,ucircumflex:611,acircumflex:556,Amacron:722,rcaron:389,ccedilla:556,Zdotaccent:611,Thorn:667,Omacron:778,Racute:722,Sacute:667,dcaron:743,Umacron:722,uring:611,threesuperior:333,Ograve:778,Agrave:722,Abreve:722,multiply:584,uacute:611,Tcaron:611,partialdiff:494,ydieresis:556,Nacute:722,icircumflex:278,Ecircumflex:667,adieresis:556,edieresis:556,cacute:556,
-nacute:611,umacron:611,Ncaron:722,Iacute:278,plusminus:584,brokenbar:280,registered:737,Gbreve:778,Idotaccent:278,summation:600,Egrave:667,racute:389,omacron:611,Zacute:611,Zcaron:611,greaterequal:549,Eth:722,Ccedilla:722,lcommaaccent:278,tcaron:389,eogonek:556,Uogonek:722,Aacute:722,Adieresis:722,egrave:556,zacute:500,iogonek:278,Oacute:778,oacute:611,amacron:556,sacute:556,idieresis:278,Ocircumflex:778,Ugrave:722,Delta:612,thorn:611,twosuperior:333,Odieresis:778,mu:611,igrave:278,ohungarumlaut:611,
-Eogonek:667,dcroat:611,threequarters:834,Scedilla:667,lcaron:400,Kcommaaccent:722,Lacute:611,trademark:1E3,edotaccent:556,Igrave:278,Imacron:278,Lcaron:611,onehalf:834,lessequal:549,ocircumflex:611,ntilde:611,Uhungarumlaut:722,Eacute:667,emacron:556,gbreve:611,onequarter:834,Scaron:667,Scommaaccent:667,Ohungarumlaut:778,degree:400,ograve:611,Ccaron:722,ugrave:611,radical:549,Dcaron:722,rcommaaccent:389,Ntilde:722,otilde:611,Rcommaaccent:722,Lcommaaccent:611,Atilde:722,Aogonek:722,Aring:722,Otilde:778,
-zdotaccent:500,Ecaron:667,Iogonek:278,kcommaaccent:556,minus:584,Icircumflex:278,ncaron:611,tcommaaccent:333,logicalnot:584,odieresis:611,udieresis:611,notequal:549,gcommaaccent:611,eth:611,zcaron:500,ncommaaccent:611,onesuperior:333,imacron:278,Euro:556},"Helvetica-Oblique":{space:278,exclam:278,quotedbl:355,numbersign:556,dollar:556,percent:889,ampersand:667,quoteright:222,parenleft:333,parenright:333,asterisk:389,plus:584,comma:278,hyphen:333,period:278,slash:278,zero:556,one:556,two:556,three:556,
-four:556,five:556,six:556,seven:556,eight:556,nine:556,colon:278,semicolon:278,less:584,equal:584,greater:584,question:556,at:1015,A:667,B:667,C:722,D:722,E:667,F:611,G:778,H:722,I:278,J:500,K:667,L:556,M:833,N:722,O:778,P:667,Q:778,R:722,S:667,T:611,U:722,V:667,W:944,X:667,Y:667,Z:611,bracketleft:278,backslash:278,bracketright:278,asciicircum:469,underscore:556,quoteleft:222,a:556,b:556,c:500,d:556,e:556,f:278,g:556,h:556,i:222,j:222,k:500,l:222,m:833,n:556,o:556,p:556,q:556,r:333,s:500,t:278,u:556,
-v:500,w:722,x:500,y:500,z:500,braceleft:334,bar:260,braceright:334,asciitilde:584,exclamdown:333,cent:556,sterling:556,fraction:167,yen:556,florin:556,section:556,currency:556,quotesingle:191,quotedblleft:333,guillemotleft:556,guilsinglleft:333,guilsinglright:333,fi:500,fl:500,endash:556,dagger:556,daggerdbl:556,periodcentered:278,paragraph:537,bullet:350,quotesinglbase:222,quotedblbase:333,quotedblright:333,guillemotright:556,ellipsis:1E3,perthousand:1E3,questiondown:611,grave:333,acute:333,circumflex:333,
-tilde:333,macron:333,breve:333,dotaccent:333,dieresis:333,ring:333,cedilla:333,hungarumlaut:333,ogonek:333,caron:333,emdash:1E3,AE:1E3,ordfeminine:370,Lslash:556,Oslash:778,OE:1E3,ordmasculine:365,ae:889,dotlessi:278,lslash:222,oslash:611,oe:944,germandbls:611,Idieresis:278,eacute:556,abreve:556,uhungarumlaut:556,ecaron:556,Ydieresis:667,divide:584,Yacute:667,Acircumflex:667,aacute:556,Ucircumflex:722,yacute:500,scommaaccent:500,ecircumflex:556,Uring:722,Udieresis:722,aogonek:556,Uacute:722,uogonek:556,
-Edieresis:667,Dcroat:722,commaaccent:250,copyright:737,Emacron:667,ccaron:500,aring:556,Ncommaaccent:722,lacute:222,agrave:556,Tcommaaccent:611,Cacute:722,atilde:556,Edotaccent:667,scaron:500,scedilla:500,iacute:278,lozenge:471,Rcaron:722,Gcommaaccent:778,ucircumflex:556,acircumflex:556,Amacron:667,rcaron:333,ccedilla:500,Zdotaccent:611,Thorn:667,Omacron:778,Racute:722,Sacute:667,dcaron:643,Umacron:722,uring:556,threesuperior:333,Ograve:778,Agrave:667,Abreve:667,multiply:584,uacute:556,Tcaron:611,
-partialdiff:476,ydieresis:500,Nacute:722,icircumflex:278,Ecircumflex:667,adieresis:556,edieresis:556,cacute:500,nacute:556,umacron:556,Ncaron:722,Iacute:278,plusminus:584,brokenbar:260,registered:737,Gbreve:778,Idotaccent:278,summation:600,Egrave:667,racute:333,omacron:556,Zacute:611,Zcaron:611,greaterequal:549,Eth:722,Ccedilla:722,lcommaaccent:222,tcaron:317,eogonek:556,Uogonek:722,Aacute:667,Adieresis:667,egrave:556,zacute:500,iogonek:222,Oacute:778,oacute:556,amacron:556,sacute:500,idieresis:278,
-Ocircumflex:778,Ugrave:722,Delta:612,thorn:556,twosuperior:333,Odieresis:778,mu:556,igrave:278,ohungarumlaut:556,Eogonek:667,dcroat:556,threequarters:834,Scedilla:667,lcaron:299,Kcommaaccent:667,Lacute:556,trademark:1E3,edotaccent:556,Igrave:278,Imacron:278,Lcaron:556,onehalf:834,lessequal:549,ocircumflex:556,ntilde:556,Uhungarumlaut:722,Eacute:667,emacron:556,gbreve:556,onequarter:834,Scaron:667,Scommaaccent:667,Ohungarumlaut:778,degree:400,ograve:556,Ccaron:722,ugrave:556,radical:453,Dcaron:722,
-rcommaaccent:333,Ntilde:722,otilde:556,Rcommaaccent:722,Lcommaaccent:556,Atilde:667,Aogonek:667,Aring:667,Otilde:778,zdotaccent:500,Ecaron:667,Iogonek:278,kcommaaccent:500,minus:584,Icircumflex:278,ncaron:556,tcommaaccent:278,logicalnot:584,odieresis:556,udieresis:556,notequal:549,gcommaaccent:556,eth:556,zcaron:500,ncommaaccent:556,onesuperior:333,imacron:278,Euro:556},Symbol:{space:250,exclam:333,universal:713,numbersign:500,existential:549,percent:833,ampersand:778,suchthat:439,parenleft:333,parenright:333,
-asteriskmath:500,plus:549,comma:250,minus:549,period:250,slash:278,zero:500,one:500,two:500,three:500,four:500,five:500,six:500,seven:500,eight:500,nine:500,colon:278,semicolon:278,less:549,equal:549,greater:549,question:444,congruent:549,Alpha:722,Beta:667,Chi:722,Delta:612,Epsilon:611,Phi:763,Gamma:603,Eta:722,Iota:333,theta1:631,Kappa:722,Lambda:686,Mu:889,Nu:722,Omicron:722,Pi:768,Theta:741,Rho:556,Sigma:592,Tau:611,Upsilon:690,sigma1:439,Omega:768,Xi:645,Psi:795,Zeta:611,bracketleft:333,therefore:863,
-bracketright:333,perpendicular:658,underscore:500,radicalex:500,alpha:631,beta:549,chi:549,delta:494,epsilon:439,phi:521,gamma:411,eta:603,iota:329,phi1:603,kappa:549,lambda:549,mu:576,nu:521,omicron:549,pi:549,theta:521,rho:549,sigma:603,tau:439,upsilon:576,omega1:713,omega:686,xi:493,psi:686,zeta:494,braceleft:480,bar:200,braceright:480,similar:549,Euro:750,Upsilon1:620,minute:247,lessequal:549,fraction:167,infinity:713,florin:500,club:753,diamond:753,heart:753,spade:753,arrowboth:1042,arrowleft:987,
-arrowup:603,arrowright:987,arrowdown:603,degree:400,plusminus:549,second:411,greaterequal:549,multiply:549,proportional:713,partialdiff:494,bullet:460,divide:549,notequal:549,equivalence:549,approxequal:549,ellipsis:1E3,arrowvertex:603,arrowhorizex:1E3,carriagereturn:658,aleph:823,Ifraktur:686,Rfraktur:795,weierstrass:987,circlemultiply:768,circleplus:768,emptyset:823,intersection:768,union:768,propersuperset:713,reflexsuperset:713,notsubset:713,propersubset:713,reflexsubset:713,element:713,notelement:713,
-angle:768,gradient:713,registerserif:790,copyrightserif:790,trademarkserif:890,product:823,radical:549,dotmath:250,logicalnot:713,logicaland:603,logicalor:603,arrowdblboth:1042,arrowdblleft:987,arrowdblup:603,arrowdblright:987,arrowdbldown:603,lozenge:494,angleleft:329,registersans:790,copyrightsans:790,trademarksans:786,summation:713,parenlefttp:384,parenleftex:384,parenleftbt:384,bracketlefttp:384,bracketleftex:384,bracketleftbt:384,bracelefttp:494,braceleftmid:494,braceleftbt:494,braceex:494,angleright:329,
-integral:274,integraltp:686,integralex:686,integralbt:686,parenrighttp:384,parenrightex:384,parenrightbt:384,bracketrighttp:384,bracketrightex:384,bracketrightbt:384,bracerighttp:494,bracerightmid:494,bracerightbt:494,apple:790},"Times-Roman":{space:250,exclam:333,quotedbl:408,numbersign:500,dollar:500,percent:833,ampersand:778,quoteright:333,parenleft:333,parenright:333,asterisk:500,plus:564,comma:250,hyphen:333,period:250,slash:278,zero:500,one:500,two:500,three:500,four:500,five:500,six:500,seven:500,
-eight:500,nine:500,colon:278,semicolon:278,less:564,equal:564,greater:564,question:444,at:921,A:722,B:667,C:667,D:722,E:611,F:556,G:722,H:722,I:333,J:389,K:722,L:611,M:889,N:722,O:722,P:556,Q:722,R:667,S:556,T:611,U:722,V:722,W:944,X:722,Y:722,Z:611,bracketleft:333,backslash:278,bracketright:333,asciicircum:469,underscore:500,quoteleft:333,a:444,b:500,c:444,d:500,e:444,f:333,g:500,h:500,i:278,j:278,k:500,l:278,m:778,n:500,o:500,p:500,q:500,r:333,s:389,t:278,u:500,v:500,w:722,x:500,y:500,z:444,braceleft:480,
-bar:200,braceright:480,asciitilde:541,exclamdown:333,cent:500,sterling:500,fraction:167,yen:500,florin:500,section:500,currency:500,quotesingle:180,quotedblleft:444,guillemotleft:500,guilsinglleft:333,guilsinglright:333,fi:556,fl:556,endash:500,dagger:500,daggerdbl:500,periodcentered:250,paragraph:453,bullet:350,quotesinglbase:333,quotedblbase:444,quotedblright:444,guillemotright:500,ellipsis:1E3,perthousand:1E3,questiondown:444,grave:333,acute:333,circumflex:333,tilde:333,macron:333,breve:333,dotaccent:333,
-dieresis:333,ring:333,cedilla:333,hungarumlaut:333,ogonek:333,caron:333,emdash:1E3,AE:889,ordfeminine:276,Lslash:611,Oslash:722,OE:889,ordmasculine:310,ae:667,dotlessi:278,lslash:278,oslash:500,oe:722,germandbls:500,Idieresis:333,eacute:444,abreve:444,uhungarumlaut:500,ecaron:444,Ydieresis:722,divide:564,Yacute:722,Acircumflex:722,aacute:444,Ucircumflex:722,yacute:500,scommaaccent:389,ecircumflex:444,Uring:722,Udieresis:722,aogonek:444,Uacute:722,uogonek:500,Edieresis:611,Dcroat:722,commaaccent:250,
-copyright:760,Emacron:611,ccaron:444,aring:444,Ncommaaccent:722,lacute:278,agrave:444,Tcommaaccent:611,Cacute:667,atilde:444,Edotaccent:611,scaron:389,scedilla:389,iacute:278,lozenge:471,Rcaron:667,Gcommaaccent:722,ucircumflex:500,acircumflex:444,Amacron:722,rcaron:333,ccedilla:444,Zdotaccent:611,Thorn:556,Omacron:722,Racute:667,Sacute:556,dcaron:588,Umacron:722,uring:500,threesuperior:300,Ograve:722,Agrave:722,Abreve:722,multiply:564,uacute:500,Tcaron:611,partialdiff:476,ydieresis:500,Nacute:722,
-icircumflex:278,Ecircumflex:611,adieresis:444,edieresis:444,cacute:444,nacute:500,umacron:500,Ncaron:722,Iacute:333,plusminus:564,brokenbar:200,registered:760,Gbreve:722,Idotaccent:333,summation:600,Egrave:611,racute:333,omacron:500,Zacute:611,Zcaron:611,greaterequal:549,Eth:722,Ccedilla:667,lcommaaccent:278,tcaron:326,eogonek:444,Uogonek:722,Aacute:722,Adieresis:722,egrave:444,zacute:444,iogonek:278,Oacute:722,oacute:500,amacron:444,sacute:389,idieresis:278,Ocircumflex:722,Ugrave:722,Delta:612,thorn:500,
-twosuperior:300,Odieresis:722,mu:500,igrave:278,ohungarumlaut:500,Eogonek:611,dcroat:500,threequarters:750,Scedilla:556,lcaron:344,Kcommaaccent:722,Lacute:611,trademark:980,edotaccent:444,Igrave:333,Imacron:333,Lcaron:611,onehalf:750,lessequal:549,ocircumflex:500,ntilde:500,Uhungarumlaut:722,Eacute:611,emacron:444,gbreve:500,onequarter:750,Scaron:556,Scommaaccent:556,Ohungarumlaut:722,degree:400,ograve:500,Ccaron:667,ugrave:500,radical:453,Dcaron:722,rcommaaccent:333,Ntilde:722,otilde:500,Rcommaaccent:667,
-Lcommaaccent:611,Atilde:722,Aogonek:722,Aring:722,Otilde:722,zdotaccent:444,Ecaron:611,Iogonek:333,kcommaaccent:500,minus:564,Icircumflex:333,ncaron:500,tcommaaccent:278,logicalnot:564,odieresis:500,udieresis:500,notequal:549,gcommaaccent:500,eth:500,zcaron:444,ncommaaccent:500,onesuperior:300,imacron:278,Euro:500},"Times-Bold":{space:250,exclam:333,quotedbl:555,numbersign:500,dollar:500,percent:1E3,ampersand:833,quoteright:333,parenleft:333,parenright:333,asterisk:500,plus:570,comma:250,hyphen:333,
-period:250,slash:278,zero:500,one:500,two:500,three:500,four:500,five:500,six:500,seven:500,eight:500,nine:500,colon:333,semicolon:333,less:570,equal:570,greater:570,question:500,at:930,A:722,B:667,C:722,D:722,E:667,F:611,G:778,H:778,I:389,J:500,K:778,L:667,M:944,N:722,O:778,P:611,Q:778,R:722,S:556,T:667,U:722,V:722,W:1E3,X:722,Y:722,Z:667,bracketleft:333,backslash:278,bracketright:333,asciicircum:581,underscore:500,quoteleft:333,a:500,b:556,c:444,d:556,e:444,f:333,g:500,h:556,i:278,j:333,k:556,l:278,
-m:833,n:556,o:500,p:556,q:556,r:444,s:389,t:333,u:556,v:500,w:722,x:500,y:500,z:444,braceleft:394,bar:220,braceright:394,asciitilde:520,exclamdown:333,cent:500,sterling:500,fraction:167,yen:500,florin:500,section:500,currency:500,quotesingle:278,quotedblleft:500,guillemotleft:500,guilsinglleft:333,guilsinglright:333,fi:556,fl:556,endash:500,dagger:500,daggerdbl:500,periodcentered:250,paragraph:540,bullet:350,quotesinglbase:333,quotedblbase:500,quotedblright:500,guillemotright:500,ellipsis:1E3,perthousand:1E3,
-questiondown:500,grave:333,acute:333,circumflex:333,tilde:333,macron:333,breve:333,dotaccent:333,dieresis:333,ring:333,cedilla:333,hungarumlaut:333,ogonek:333,caron:333,emdash:1E3,AE:1E3,ordfeminine:300,Lslash:667,Oslash:778,OE:1E3,ordmasculine:330,ae:722,dotlessi:278,lslash:278,oslash:500,oe:722,germandbls:556,Idieresis:389,eacute:444,abreve:500,uhungarumlaut:556,ecaron:444,Ydieresis:722,divide:570,Yacute:722,Acircumflex:722,aacute:500,Ucircumflex:722,yacute:500,scommaaccent:389,ecircumflex:444,
-Uring:722,Udieresis:722,aogonek:500,Uacute:722,uogonek:556,Edieresis:667,Dcroat:722,commaaccent:250,copyright:747,Emacron:667,ccaron:444,aring:500,Ncommaaccent:722,lacute:278,agrave:500,Tcommaaccent:667,Cacute:722,atilde:500,Edotaccent:667,scaron:389,scedilla:389,iacute:278,lozenge:494,Rcaron:722,Gcommaaccent:778,ucircumflex:556,acircumflex:500,Amacron:722,rcaron:444,ccedilla:444,Zdotaccent:667,Thorn:611,Omacron:778,Racute:722,Sacute:556,dcaron:672,Umacron:722,uring:556,threesuperior:300,Ograve:778,
-Agrave:722,Abreve:722,multiply:570,uacute:556,Tcaron:667,partialdiff:494,ydieresis:500,Nacute:722,icircumflex:278,Ecircumflex:667,adieresis:500,edieresis:444,cacute:444,nacute:556,umacron:556,Ncaron:722,Iacute:389,plusminus:570,brokenbar:220,registered:747,Gbreve:778,Idotaccent:389,summation:600,Egrave:667,racute:444,omacron:500,Zacute:667,Zcaron:667,greaterequal:549,Eth:722,Ccedilla:722,lcommaaccent:278,tcaron:416,eogonek:444,Uogonek:722,Aacute:722,Adieresis:722,egrave:444,zacute:444,iogonek:278,
-Oacute:778,oacute:500,amacron:500,sacute:389,idieresis:278,Ocircumflex:778,Ugrave:722,Delta:612,thorn:556,twosuperior:300,Odieresis:778,mu:556,igrave:278,ohungarumlaut:500,Eogonek:667,dcroat:556,threequarters:750,Scedilla:556,lcaron:394,Kcommaaccent:778,Lacute:667,trademark:1E3,edotaccent:444,Igrave:389,Imacron:389,Lcaron:667,onehalf:750,lessequal:549,ocircumflex:500,ntilde:556,Uhungarumlaut:722,Eacute:667,emacron:444,gbreve:500,onequarter:750,Scaron:556,Scommaaccent:556,Ohungarumlaut:778,degree:400,
-ograve:500,Ccaron:722,ugrave:556,radical:549,Dcaron:722,rcommaaccent:444,Ntilde:722,otilde:500,Rcommaaccent:722,Lcommaaccent:667,Atilde:722,Aogonek:722,Aring:722,Otilde:778,zdotaccent:444,Ecaron:667,Iogonek:389,kcommaaccent:556,minus:570,Icircumflex:389,ncaron:556,tcommaaccent:333,logicalnot:570,odieresis:500,udieresis:556,notequal:549,gcommaaccent:500,eth:500,zcaron:444,ncommaaccent:556,onesuperior:300,imacron:278,Euro:500},"Times-BoldItalic":{space:250,exclam:389,quotedbl:555,numbersign:500,dollar:500,
-percent:833,ampersand:778,quoteright:333,parenleft:333,parenright:333,asterisk:500,plus:570,comma:250,hyphen:333,period:250,slash:278,zero:500,one:500,two:500,three:500,four:500,five:500,six:500,seven:500,eight:500,nine:500,colon:333,semicolon:333,less:570,equal:570,greater:570,question:500,at:832,A:667,B:667,C:667,D:722,E:667,F:667,G:722,H:778,I:389,J:500,K:667,L:611,M:889,N:722,O:722,P:611,Q:722,R:667,S:556,T:611,U:722,V:667,W:889,X:667,Y:611,Z:611,bracketleft:333,backslash:278,bracketright:333,
-asciicircum:570,underscore:500,quoteleft:333,a:500,b:500,c:444,d:500,e:444,f:333,g:500,h:556,i:278,j:278,k:500,l:278,m:778,n:556,o:500,p:500,q:500,r:389,s:389,t:278,u:556,v:444,w:667,x:500,y:444,z:389,braceleft:348,bar:220,braceright:348,asciitilde:570,exclamdown:389,cent:500,sterling:500,fraction:167,yen:500,florin:500,section:500,currency:500,quotesingle:278,quotedblleft:500,guillemotleft:500,guilsinglleft:333,guilsinglright:333,fi:556,fl:556,endash:500,dagger:500,daggerdbl:500,periodcentered:250,
-paragraph:500,bullet:350,quotesinglbase:333,quotedblbase:500,quotedblright:500,guillemotright:500,ellipsis:1E3,perthousand:1E3,questiondown:500,grave:333,acute:333,circumflex:333,tilde:333,macron:333,breve:333,dotaccent:333,dieresis:333,ring:333,cedilla:333,hungarumlaut:333,ogonek:333,caron:333,emdash:1E3,AE:944,ordfeminine:266,Lslash:611,Oslash:722,OE:944,ordmasculine:300,ae:722,dotlessi:278,lslash:278,oslash:500,oe:722,germandbls:500,Idieresis:389,eacute:444,abreve:500,uhungarumlaut:556,ecaron:444,
-Ydieresis:611,divide:570,Yacute:611,Acircumflex:667,aacute:500,Ucircumflex:722,yacute:444,scommaaccent:389,ecircumflex:444,Uring:722,Udieresis:722,aogonek:500,Uacute:722,uogonek:556,Edieresis:667,Dcroat:722,commaaccent:250,copyright:747,Emacron:667,ccaron:444,aring:500,Ncommaaccent:722,lacute:278,agrave:500,Tcommaaccent:611,Cacute:667,atilde:500,Edotaccent:667,scaron:389,scedilla:389,iacute:278,lozenge:494,Rcaron:667,Gcommaaccent:722,ucircumflex:556,acircumflex:500,Amacron:667,rcaron:389,ccedilla:444,
-Zdotaccent:611,Thorn:611,Omacron:722,Racute:667,Sacute:556,dcaron:608,Umacron:722,uring:556,threesuperior:300,Ograve:722,Agrave:667,Abreve:667,multiply:570,uacute:556,Tcaron:611,partialdiff:494,ydieresis:444,Nacute:722,icircumflex:278,Ecircumflex:667,adieresis:500,edieresis:444,cacute:444,nacute:556,umacron:556,Ncaron:722,Iacute:389,plusminus:570,brokenbar:220,registered:747,Gbreve:722,Idotaccent:389,summation:600,Egrave:667,racute:389,omacron:500,Zacute:611,Zcaron:611,greaterequal:549,Eth:722,Ccedilla:667,
-lcommaaccent:278,tcaron:366,eogonek:444,Uogonek:722,Aacute:667,Adieresis:667,egrave:444,zacute:389,iogonek:278,Oacute:722,oacute:500,amacron:500,sacute:389,idieresis:278,Ocircumflex:722,Ugrave:722,Delta:612,thorn:500,twosuperior:300,Odieresis:722,mu:576,igrave:278,ohungarumlaut:500,Eogonek:667,dcroat:500,threequarters:750,Scedilla:556,lcaron:382,Kcommaaccent:667,Lacute:611,trademark:1E3,edotaccent:444,Igrave:389,Imacron:389,Lcaron:611,onehalf:750,lessequal:549,ocircumflex:500,ntilde:556,Uhungarumlaut:722,
-Eacute:667,emacron:444,gbreve:500,onequarter:750,Scaron:556,Scommaaccent:556,Ohungarumlaut:722,degree:400,ograve:500,Ccaron:667,ugrave:556,radical:549,Dcaron:722,rcommaaccent:389,Ntilde:722,otilde:500,Rcommaaccent:667,Lcommaaccent:611,Atilde:667,Aogonek:667,Aring:667,Otilde:722,zdotaccent:389,Ecaron:667,Iogonek:389,kcommaaccent:500,minus:606,Icircumflex:389,ncaron:556,tcommaaccent:278,logicalnot:606,odieresis:500,udieresis:556,notequal:549,gcommaaccent:500,eth:500,zcaron:389,ncommaaccent:556,onesuperior:300,
-imacron:278,Euro:500},"Times-Italic":{space:250,exclam:333,quotedbl:420,numbersign:500,dollar:500,percent:833,ampersand:778,quoteright:333,parenleft:333,parenright:333,asterisk:500,plus:675,comma:250,hyphen:333,period:250,slash:278,zero:500,one:500,two:500,three:500,four:500,five:500,six:500,seven:500,eight:500,nine:500,colon:333,semicolon:333,less:675,equal:675,greater:675,question:500,at:920,A:611,B:611,C:667,D:722,E:611,F:611,G:722,H:722,I:333,J:444,K:667,L:556,M:833,N:667,O:722,P:611,Q:722,R:611,
-S:500,T:556,U:722,V:611,W:833,X:611,Y:556,Z:556,bracketleft:389,backslash:278,bracketright:389,asciicircum:422,underscore:500,quoteleft:333,a:500,b:500,c:444,d:500,e:444,f:278,g:500,h:500,i:278,j:278,k:444,l:278,m:722,n:500,o:500,p:500,q:500,r:389,s:389,t:278,u:500,v:444,w:667,x:444,y:444,z:389,braceleft:400,bar:275,braceright:400,asciitilde:541,exclamdown:389,cent:500,sterling:500,fraction:167,yen:500,florin:500,section:500,currency:500,quotesingle:214,quotedblleft:556,guillemotleft:500,guilsinglleft:333,
-guilsinglright:333,fi:500,fl:500,endash:500,dagger:500,daggerdbl:500,periodcentered:250,paragraph:523,bullet:350,quotesinglbase:333,quotedblbase:556,quotedblright:556,guillemotright:500,ellipsis:889,perthousand:1E3,questiondown:500,grave:333,acute:333,circumflex:333,tilde:333,macron:333,breve:333,dotaccent:333,dieresis:333,ring:333,cedilla:333,hungarumlaut:333,ogonek:333,caron:333,emdash:889,AE:889,ordfeminine:276,Lslash:556,Oslash:722,OE:944,ordmasculine:310,ae:667,dotlessi:278,lslash:278,oslash:500,
-oe:667,germandbls:500,Idieresis:333,eacute:444,abreve:500,uhungarumlaut:500,ecaron:444,Ydieresis:556,divide:675,Yacute:556,Acircumflex:611,aacute:500,Ucircumflex:722,yacute:444,scommaaccent:389,ecircumflex:444,Uring:722,Udieresis:722,aogonek:500,Uacute:722,uogonek:500,Edieresis:611,Dcroat:722,commaaccent:250,copyright:760,Emacron:611,ccaron:444,aring:500,Ncommaaccent:667,lacute:278,agrave:500,Tcommaaccent:556,Cacute:667,atilde:500,Edotaccent:611,scaron:389,scedilla:389,iacute:278,lozenge:471,Rcaron:611,
-Gcommaaccent:722,ucircumflex:500,acircumflex:500,Amacron:611,rcaron:389,ccedilla:444,Zdotaccent:556,Thorn:611,Omacron:722,Racute:611,Sacute:500,dcaron:544,Umacron:722,uring:500,threesuperior:300,Ograve:722,Agrave:611,Abreve:611,multiply:675,uacute:500,Tcaron:556,partialdiff:476,ydieresis:444,Nacute:667,icircumflex:278,Ecircumflex:611,adieresis:500,edieresis:444,cacute:444,nacute:500,umacron:500,Ncaron:667,Iacute:333,plusminus:675,brokenbar:275,registered:760,Gbreve:722,Idotaccent:333,summation:600,
-Egrave:611,racute:389,omacron:500,Zacute:556,Zcaron:556,greaterequal:549,Eth:722,Ccedilla:667,lcommaaccent:278,tcaron:300,eogonek:444,Uogonek:722,Aacute:611,Adieresis:611,egrave:444,zacute:389,iogonek:278,Oacute:722,oacute:500,amacron:500,sacute:389,idieresis:278,Ocircumflex:722,Ugrave:722,Delta:612,thorn:500,twosuperior:300,Odieresis:722,mu:500,igrave:278,ohungarumlaut:500,Eogonek:611,dcroat:500,threequarters:750,Scedilla:500,lcaron:300,Kcommaaccent:667,Lacute:556,trademark:980,edotaccent:444,Igrave:333,
-Imacron:333,Lcaron:611,onehalf:750,lessequal:549,ocircumflex:500,ntilde:500,Uhungarumlaut:722,Eacute:611,emacron:444,gbreve:500,onequarter:750,Scaron:500,Scommaaccent:500,Ohungarumlaut:722,degree:400,ograve:500,Ccaron:667,ugrave:500,radical:453,Dcaron:722,rcommaaccent:389,Ntilde:667,otilde:500,Rcommaaccent:611,Lcommaaccent:556,Atilde:611,Aogonek:611,Aring:611,Otilde:722,zdotaccent:389,Ecaron:611,Iogonek:333,kcommaaccent:444,minus:675,Icircumflex:333,ncaron:500,tcommaaccent:278,logicalnot:675,odieresis:500,
-udieresis:500,notequal:549,gcommaaccent:500,eth:500,zcaron:389,ncommaaccent:500,onesuperior:300,imacron:278,Euro:500},ZapfDingbats:{space:278,a1:974,a2:961,a202:974,a3:980,a4:719,a5:789,a119:790,a118:791,a117:690,a11:960,a12:939,a13:549,a14:855,a15:911,a16:933,a105:911,a17:945,a18:974,a19:755,a20:846,a21:762,a22:761,a23:571,a24:677,a25:763,a26:760,a27:759,a28:754,a6:494,a7:552,a8:537,a9:577,a10:692,a29:786,a30:788,a31:788,a32:790,a33:793,a34:794,a35:816,a36:823,a37:789,a38:841,a39:823,a40:833,a41:816,
-a42:831,a43:923,a44:744,a45:723,a46:749,a47:790,a48:792,a49:695,a50:776,a51:768,a52:792,a53:759,a54:707,a55:708,a56:682,a57:701,a58:826,a59:815,a60:789,a61:789,a62:707,a63:687,a64:696,a65:689,a66:786,a67:787,a68:713,a69:791,a70:785,a71:791,a72:873,a73:761,a74:762,a203:762,a75:759,a204:759,a76:892,a77:892,a78:788,a79:784,a81:438,a82:138,a83:277,a84:415,a97:392,a98:392,a99:668,a100:668,a89:390,a90:390,a93:317,a94:317,a91:276,a92:276,a205:509,a85:509,a206:410,a86:410,a87:234,a88:234,a95:334,a96:334,
-a101:732,a102:544,a103:544,a104:910,a106:667,a107:760,a108:760,a112:776,a111:595,a110:694,a109:626,a120:788,a121:788,a122:788,a123:788,a124:788,a125:788,a126:788,a127:788,a128:788,a129:788,a130:788,a131:788,a132:788,a133:788,a134:788,a135:788,a136:788,a137:788,a138:788,a139:788,a140:788,a141:788,a142:788,a143:788,a144:788,a145:788,a146:788,a147:788,a148:788,a149:788,a150:788,a151:788,a152:788,a153:788,a154:788,a155:788,a156:788,a157:788,a158:788,a159:788,a160:894,a161:838,a163:1016,a164:458,a196:748,
-a165:924,a192:748,a166:918,a167:927,a168:928,a169:928,a170:834,a171:873,a172:828,a173:924,a162:924,a174:917,a175:930,a176:931,a177:463,a178:883,a179:836,a193:836,a180:867,a199:867,a181:696,a200:696,a182:874,a201:874,a183:760,a184:946,a197:771,a185:865,a194:771,a198:888,a186:967,a195:888,a187:831,a188:873,a189:927,a190:970,a191:918}},J={},jb,Rf=function(a,b,c){this.lexer=a;this.allowStreams=b;this.xref=c;this.refill()};Rf.prototype={refill:function(){this.buf1=this.lexer.getObj();this.buf2=this.lexer.getObj()},
-shift:function(){H(this.buf2,"ID")?(this.buf1=this.buf2,this.buf2=null,this.lexer.skip()):(this.buf1=this.buf2,this.buf2=this.lexer.getObj())},getObj:function(a){if(H(this.buf1,"BI"))return this.shift(),this.makeInlineImage(a);if(H(this.buf1,"[")){this.shift();for(a=[];!H(this.buf1,"]")&&this.buf1!=J;)a.push(this.getObj());this.buf1==J&&s("End of file inside array");this.shift();return a}if(H(this.buf1,"<<")){this.shift();for(var b=new Aa(this.xref);!H(this.buf1,">>")&&this.buf1!=J;){E(this.buf1)||
-s("Dictionary key must be a name object");var c=this.buf1.name;this.shift();if(this.buf1==J)break;b.set(c,this.getObj(a))}this.buf1==J&&s("End of file inside dictionary");if(H(this.buf2,"stream"))return this.allowStreams?this.makeStream(b,a):b;this.shift();return b}if(F(this.buf1))return a=this.buf1,this.shift(),F(this.buf1)&&H(this.buf2,"R")&&(a=new Vb(a,this.buf1),this.shift(),this.shift()),a;if(Y(this.buf1))return b=this.buf1,this.shift(),a&&(b=a.decryptString(b)),b;a=this.buf1;this.shift();return a},
-makeInlineImage:function(a){for(var b=this.lexer.stream,c=new Aa;!H(this.buf1,"ID")&&this.buf1!=J;){E(this.buf1)||s("Dictionary key must be a name object");var d=this.buf1.name;this.shift();if(this.buf1==J)break;c.set(d,this.getObj(a))}for(var d=b.pos,e=0,f;4!=e&&null!=(f=b.getByte());)switch(f){case 32:case 13:case 10:e=3===e?4:0;break;case 69:e=2;break;case 73:e=2===e?3:0;break;default:e=0}f=b.pos-4-d;b=b.makeSubStream(d,f,c);a&&(b=a.createStream(b));b=this.filter(b,c,f);b.parameters=c;this.buf2=
-Ka.get("EI");this.shift();return b},fetchIfRef:function(a){return pa(a)?this.xref.fetch(a):a},makeStream:function(a,b){var c=this.lexer,d=c.stream;c.skipToNextLine();var c=d.pos,e=this.fetchIfRef(a.get("Length"));F(e)||s("Bad "+e+" attribute in stream");d.pos=c+e;this.shift();this.shift();H(this.buf1,"endstream")||s("Missing endstream");this.shift();d=d.makeSubStream(c,e,a);b&&(d=b.createStream(d));d=this.filter(d,a,e);d.parameters=a;return d},filter:function(a,b,c){var d=this.fetchIfRef(b.get("Filter",
-"F"));b=this.fetchIfRef(b.get("DecodeParms","DP"));if(E(d))return this.makeFilter(a,d.name,c,b);if(I(d))for(var e=d,f=b,g=0,h=e.length;g<h;++g)d=e[g],E(d)||s("Bad filter name: "+d),b=null,I(f)&&g in f&&(b=f[g]),a=this.makeFilter(a,d.name,c,b),c=null;return a},makeFilter:function(a,b,c,d){if(0===a.dict.get("Length"))return new Kc(a);if("FlateDecode"==b||"Fl"==b)return d?new ud(new vd(a),d):new vd(a);if("LZWDecode"==b||"LZW"==b)return b=1,d?(d.has("EarlyChange")&&(b=d.get("EarlyChange")),new ud(new wd(a,
-b),d)):new wd(a,b);if("DCTDecode"==b||"DCT"==b)return d=a.getBytes(c),new ub(d,a.dict,this.xref);if("JPXDecode"==b||"JPX"==b)return d=a.getBytes(c),new Sf(d,a.dict);if("ASCII85Decode"==b||"A85"==b)return new Tf(a);if("ASCIIHexDecode"==b||"AHx"==b)return new Uf(a);if("CCITTFaxDecode"==b||"CCF"==b)return new Vf(a,d);if("RunLengthDecode"==b||"RL"==b)return new Wf(a);if("JBIG2Decode"==b)return d=a.getBytes(c),new Xf(d,a.dict);R('filter "'+b+'" not supported yet');return a}};jb=Rf;var ra,xd=function(a,
-b){this.stream=a;this.knownCommands=b},pc=function(a){if("0"<=a&&"9">=a)return a.charCodeAt(0)-48;a=a.toUpperCase();return"A"<=a&&"F">=a?a.charCodeAt(0)-55:-1};xd.isSpace=function(a){return" "==a||"\t"==a||"\r"==a||"\n"==a};var Sb=[1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];xd.prototype={getNumber:function(a){for(var b=!1,c=a,d=this.stream;a=d.lookChar();){if("."==a&&!b)c+=a,b=!0;else if("-"==a)R("Badly formated number");else if("0"<=a&&"9">=a)c+=a;else if("e"==a||"E"==a)b=!0;else break;d.skip()}a=parseFloat(c);isNaN(a)&&s("Invalid floating point number: "+
-a);return a},getString:function(){var a=1,b=!1,c="",d=this.stream,e;do switch(e=d.getChar(),e){case void 0:R("Unterminated string");b=!0;break;case "(":++a;c+=e;break;case ")":0==--a?b=!0:c+=e;break;case "\\":e=d.getChar();switch(e){case void 0:R("Unterminated string");b=!0;break;case "n":c+="\n";break;case "r":c+="\r";break;case "t":c+="\t";break;case "b":c+="\b";break;case "f":c+="\f";break;case "\\":case "(":case ")":c+=e;break;case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":var f=
-e-0;e=d.lookChar();"0"<=e&&"7">=e&&(d.skip(),f=(f<<3)+(e-0),e=d.lookChar(),"0"<=e&&"7">=e&&(d.skip(),f=(f<<3)+(e-0)));c+=String.fromCharCode(f);break;case "\r":e=d.lookChar();"\n"==e&&d.skip();break;case "\n":break;default:c+=e}break;default:c+=e}while(!b);return c},getName:function(a){for(var b="",c=this.stream;(a=c.lookChar())&&!Sb[a.charCodeAt(0)];)if(c.skip(),"#"==a){a=c.lookChar();var d=pc(a);if(-1!=d){c.skip();var e=pc(c.getChar());-1==e&&s("Illegal digit in hex char in name: "+e);b+=String.fromCharCode(d<<
-4|e)}else b+="#",b+=a}else b+=a;128<b.length&&s("Warning: name token is longer than allowed by the spec: "+b.length);return new ka(b)},getHexString:function(a){for(var b="",c=this.stream,d=!0,e,f;;)if(a=c.getChar())if(">"===a)break;else{if(1!==Sb[a.charCodeAt(0)]){if(d){if(e=pc(a),-1===e){R("Ignoring invalid character '"+a+"' in hex string");continue}}else{f=pc(a);if(-1===f){R("Ignoring invalid character '"+a+"' in hex string");continue}b+=String.fromCharCode(e<<4|f)}d=!d}}else{R("Unterminated hex string");
-break}return b},getObj:function(){for(var a=!1,b=this.stream,c;;){if(!(c=b.getChar()))return J;if(a){if("\r"==c||"\n"==c)a=!1}else if("%"==c)a=!0;else if(1!=Sb[c.charCodeAt(0)])break}switch(c){case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":case "8":case "9":case "+":case "-":case ".":return this.getNumber(c);case "(":return this.getString();case "/":return this.getName(c);case "[":case "]":return Ka.get(c);case "<":return c=b.lookChar(),"<"==c?(b.skip(),Ka.get("<<")):this.getHexString(c);
-case ">":if(c=b.lookChar(),">"==c)return b.skip(),Ka.get(">>");case "{":case "}":return Ka.get(c);case ")":s("Illegal character: "+c)}var a=c,d=this.knownCommands,e=d&&a in d;for(;(c=b.lookChar())&&!Sb[c.charCodeAt(0)]&&(!e||a+c in d);)b.skip(),128==a.length&&s("Command token too long: "+a.length),a+=c,e=d&&a in d;return"true"==a?!0:"false"==a?!1:"null"==a?null:Ka.get(a)},skipToNextLine:function(){for(var a=this.stream;;){var b=a.getChar();if(!b||"\n"==b)break;if("\r"==b){"\n"==a.lookChar()&&a.skip();
-break}}},skip:function(){this.stream.skip()}};ra=xd;var ce,Yf=function(a){this.parser=new jb(new ra(a),!1,null);a=this.parser.getObj();var b=this.parser.getObj(),c=this.parser.getObj();this.linDict=this.parser.getObj();F(a)&&(F(b)&&H(c,"obj")&&D(this.linDict))&&(a=this.linDict.get("Linearized"),oa(a)&&0<a||(this.linDict=null))};Yf.prototype={getInt:function(a){var b=this.linDict,c;if(D(b)&&F(c=b.get(a))&&0<c)return c;s('"'+a+'" field in linearization table is invalid')},getHint:function(a){var b=
-this.linDict,c,d;if(D(b)&&I(c=b.get("H"))&&2<=c.length&&F(d=c[a])&&0<d)return d;s("Hints table in linearization table is invalid: "+a)},get length(){return!D(this.linDict)?0:this.getInt("L")},get hintsOffset(){return this.getHint(0)},get hintsLength(){return this.getHint(1)},get hintsOffset2(){return this.getHint(2)},get hintsLenth2(){return this.getHint(3)},get objectNumberFirst(){return this.getInt("O")},get endFirst(){return this.getInt("E")},get numPages(){return this.getInt("N")},get mainXRefEntriesOffset(){return this.getInt("T")},
-get pageFirst(){return this.getInt("P")}};ce=Yf;var tb,Tb=function(){s("should not call Pattern constructor")};Tb.prototype={getPattern:function(a){s("Should not call Pattern.getStyle: "+a)}};Tb.shadingFromIR=function(a){return Bb[a[0]].fromIR(a)};Tb.parseShading=function(a,b,c,d){a=G(a)?a.dict:a;var e=a.get("ShadingType");switch(e){case 2:case 3:return new Bb.RadialAxial(a,b,c,d);default:return ga("Unsupported shading type: "+e),new Bb.Dummy}};tb=Tb;var Bb={SMALL_NUMBER:0.01},lh=Bb,yd=function(a,
-b,c,d,e){this.matrix=b;this.coordsArr=a.get("Coords");this.shadingType=a.get("ShadingType");this.type="Pattern";this.ctx=e;b=a.get("ColorSpace","CS");this.cs=b=Q.parse(b,c,d);d=0;var f=1;a.has("Domain")&&(e=a.get("Domain"),d=e[0],f=e[1]);var g=e=!1;a.has("Extend")&&(g=a.get("Extend"),e=g[0],g=g[1]);if(3===this.shadingType&&(!e||!g)){var h=this.coordsArr[0],k=this.coordsArr[1],j=this.coordsArr[2],l=this.coordsArr[3],n=this.coordsArr[4],p=this.coordsArr[5],h=Math.sqrt((h-l)*(h-l)+(k-n)*(k-n));j<=p+
-h&&p<=j+h&&R("Unsupported radial gradient.")}this.extendStart=e;this.extendEnd=g;j=a.get("Function");if(I(j)){for(var m=[],p=0,h=j.length;p<h;p++)k=c.fetchIfRef(j[p]),Sd(k)||s("Invalid function"),m.push(Ma.parse(c,k));j=function(a){for(var b=[],c=0,d=m.length;c<d;c++)b.push(m[c](a)[0]);return b}}else Sd(j)||s("Invalid function"),j=Ma.parse(c,j);p=f-d;h=p/10;c=this.colorStops=[];if(d>=f||0>=h)aa("Bad shading domain.");else{for(k=d;k<=f;k+=h)l=b.getRgb(j([k]),0),l=L.makeCssRgb(l),c.push([(k-d)/p,l]);
-d="transparent";a.has("Background")&&(l=b.getRgb(a.get("Background"),0),d=L.makeCssRgb(l));e||(c.unshift([0,d]),c[1][0]+=Bb.SMALL_NUMBER);g||(c[c.length-1][0]-=Bb.SMALL_NUMBER,c.push([1,d]));this.colorStops=c}};yd.fromIR=function(a){var b=a[1],c=a[2],d=a[3],e=a[4],f=a[5],g=a[6];return{type:"Pattern",getPattern:function(a){var k;2==b?k=a.createLinearGradient(d[0],d[1],e[0],e[1]):3==b&&(k=a.createRadialGradient(d[0],d[1],f,e[0],e[1],g));a=0;for(var j=c.length;a<j;++a){var l=c[a];k.addColorStop(l[0],
-l[1])}return k}}};yd.prototype={getIR:function(){var a=this.coordsArr,b=this.shadingType;if(2==b)var c=[a[0],a[1]],d=[a[2],a[3]],e=null,f=null;else 3==b?(c=[a[0],a[1]],d=[a[3],a[4]],e=a[2],f=a[5]):s("getPattern type unknown: "+b);if(a=this.matrix)c=L.applyTransform(c,a),d=L.applyTransform(d,a);return["RadialAxial",b,this.colorStops,c,d,e,f]}};lh.RadialAxial=yd;var mh=Bb,zd=function(){this.type="Pattern"};zd.fromIR=function(){return{type:"Pattern",getPattern:function(){return"hotpink"}}};zd.prototype=
-{getIR:function(){return["Dummy"]}};mh.Dummy=zd;var Vc,Bd=function(a,b,c,d){var e=a[2];this.matrix=a[3];var f=a[4],g=a[5],h=a[6],k=a[7];ga("TilingType: "+a[8]);this.curMatrix=c.mozCurrentTransform;this.ctx=c;this.type="Pattern";a=f[0];for(var j=f[1],l=f[2],n=f[3],p=[a,j],m=[a+g,j+h],r=m[0]-p[0],q=m[1]-p[1];Math.abs(r)>Ad||Math.abs(q)>Ad;)r=q=Ad;var m=qa(r,q),A=m.getContext("2d");d=new jc(A,null,d);switch(k){case Zf.COLORED:A.fillStyle=c.fillStyle;A.strokeStyle=c.strokeStyle;break;case Zf.UNCOLORED:b=
-(new Ta).getRgb(b,0);b=L.makeCssRgb(b);A.fillStyle=b;A.strokeStyle=b;break;default:s("Unsupported paint type: "+k)}this.scale=g=[r/g,q/h];h=[1,0,0,1,-p[0],-p[1]];d.transform.apply(d,[g[0],0,0,g[1],0,0]);d.transform.apply(d,h);f&&(I(f)&&4==f.length)&&(d.rectangle(a,j,l-a,n-j),d.clip(),d.endPath());d.executeOperatorList(e);this.canvas=m},Zf={COLORED:1,UNCOLORED:2},Ad=512;Bd.getIR=function(a,b,c){var d=b.get("Matrix"),e=b.get("BBox"),f=b.get("XStep"),g=b.get("YStep"),h=b.get("PaintType");b=b.get("TilingType");
-return["TilingPattern",c,a,d,e,f,g,h,b]};Bd.prototype={getPattern:function(){var a=this.matrix,b=this.curMatrix,c=this.ctx;b&&c.setTransform.apply(c,b);a&&c.transform.apply(c,a);a=this.scale;c.scale(1/a[0],1/a[1]);return c.createPattern(this.canvas,"repeat")}};Vc=Bd;var Jb,Cd=function(a,b,c,d){this.bytes=a instanceof Uint8Array?a:new Uint8Array(a);this.pos=this.start=b||0;this.end=b+c||this.bytes.length;this.dict=d};Cd.prototype={get length(){return this.end-this.start},getByte:function(){return this.pos>=
-this.end?null:this.bytes[this.pos++]},getBytes:function(a){var b=this.bytes,c=this.pos,d=this.end;if(!a)return b.subarray(c,d);a=c+a;a>d&&(a=d);this.pos=a;return b.subarray(c,a)},lookChar:function(){return this.pos>=this.end?null:String.fromCharCode(this.bytes[this.pos])},getChar:function(){return this.pos>=this.end?null:String.fromCharCode(this.bytes[this.pos++])},skip:function(a){a||(a=1);this.pos+=a},reset:function(){this.pos=this.start},moveStart:function(){this.start=this.pos},makeSubStream:function(a,
-b,c){return new Cd(this.bytes.buffer,a,b,c)},isStream:!0};Jb=Cd;var S=function(){this.bufferLength=this.pos=0;this.eof=!1;this.buffer=null};S.prototype={ensureBuffer:function(a){var b=this.buffer,c=b?b.byteLength:0;if(a<c)return b;for(var d=512;d<a;)d<<=1;a=new Uint8Array(d);for(d=0;d<c;++d)a[d]=b[d];return this.buffer=a},getByte:function(){for(var a=this.pos;this.bufferLength<=a;){if(this.eof)return null;this.readBlock()}return this.buffer[this.pos++]},getBytes:function(a){var b=this.pos;if(a){this.ensureBuffer(b+
-a);for(a=b+a;!this.eof&&this.bufferLength<a;)this.readBlock();var c=this.bufferLength;a>c&&(a=c)}else{for(;!this.eof;)this.readBlock();a=this.bufferLength;a||(this.buffer=new Uint8Array(0))}this.pos=a;return this.buffer.subarray(b,a)},lookChar:function(){for(var a=this.pos;this.bufferLength<=a;){if(this.eof)return null;this.readBlock()}return String.fromCharCode(this.buffer[this.pos])},getChar:function(){for(var a=this.pos;this.bufferLength<=a;){if(this.eof)return null;this.readBlock()}return String.fromCharCode(this.buffer[this.pos++])},
-makeSubStream:function(a,b,c){for(var d=a+b;this.bufferLength<=d&&!this.eof;)this.readBlock();return new Jb(this.buffer,a,b,c)},skip:function(a){a||(a=1);this.pos+=a},reset:function(){this.pos=0}};Object.create(S.prototype);var Zd,Dd=function(a){this.streams=a;S.call(this)};Dd.prototype=Object.create(S.prototype);Dd.prototype.readBlock=function(){var a=this.streams;if(0==a.length)this.eof=!0;else{var a=a.shift().getBytes(),b=this.bufferLength,c=b+a.length;this.ensureBuffer(c).set(a,b);this.bufferLength=
-c}};Zd=Dd;var vd,ob=function(a){var b=a.getBytes(),c=0;this.dict=a.dict;a=b[c++];var d=b[c++];(-1==a||-1==d)&&s("Invalid header in flate stream: "+a+", "+d);8!=(a&15)&&s("Unknown compression method in flate stream: "+a+", "+d);0!=((a<<8)+d)%31&&s("Bad FCHECK in flate stream: "+a+", "+d);d&32&&s("FDICT bit set in flate stream: "+a+", "+d);this.bytes=b;this.bytesPos=c;this.codeBuf=this.codeSize=0;S.call(this)},$f=new Uint32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),nh=new Uint32Array([3,
-4,5,6,7,8,9,10,65547,65549,65551,65553,131091,131095,131099,131103,196643,196651,196659,196667,262211,262227,262243,262259,327811,327843,327875,327907,258,258,258]),oh=new Uint32Array([1,2,3,4,65541,65543,131081,131085,196625,196633,262177,262193,327745,327777,393345,393409,459009,459137,524801,525057,590849,591361,657409,658433,724993,727041,794625,798721,868353,876545]),ph=[new Uint32Array([459008,524368,524304,524568,459024,524400,524336,590016,459016,524384,524320,589984,524288,524416,524352,
-590048,459012,524376,524312,589968,459028,524408,524344,590032,459020,524392,524328,59E4,524296,524424,524360,590064,459010,524372,524308,524572,459026,524404,524340,590024,459018,524388,524324,589992,524292,524420,524356,590056,459014,524380,524316,589976,459030,524412,524348,590040,459022,524396,524332,590008,524300,524428,524364,590072,459009,524370,524306,524570,459025,524402,524338,590020,459017,524386,524322,589988,524290,524418,524354,590052,459013,524378,524314,589972,459029,524410,524346,
-590036,459021,524394,524330,590004,524298,524426,524362,590068,459011,524374,524310,524574,459027,524406,524342,590028,459019,524390,524326,589996,524294,524422,524358,590060,459015,524382,524318,589980,459031,524414,524350,590044,459023,524398,524334,590012,524302,524430,524366,590076,459008,524369,524305,524569,459024,524401,524337,590018,459016,524385,524321,589986,524289,524417,524353,590050,459012,524377,524313,589970,459028,524409,524345,590034,459020,524393,524329,590002,524297,524425,524361,
-590066,459010,524373,524309,524573,459026,524405,524341,590026,459018,524389,524325,589994,524293,524421,524357,590058,459014,524381,524317,589978,459030,524413,524349,590042,459022,524397,524333,590010,524301,524429,524365,590074,459009,524371,524307,524571,459025,524403,524339,590022,459017,524387,524323,589990,524291,524419,524355,590054,459013,524379,524315,589974,459029,524411,524347,590038,459021,524395,524331,590006,524299,524427,524363,590070,459011,524375,524311,524575,459027,524407,524343,
-590030,459019,524391,524327,589998,524295,524423,524359,590062,459015,524383,524319,589982,459031,524415,524351,590046,459023,524399,524335,590014,524303,524431,524367,590078,459008,524368,524304,524568,459024,524400,524336,590017,459016,524384,524320,589985,524288,524416,524352,590049,459012,524376,524312,589969,459028,524408,524344,590033,459020,524392,524328,590001,524296,524424,524360,590065,459010,524372,524308,524572,459026,524404,524340,590025,459018,524388,524324,589993,524292,524420,524356,
-590057,459014,524380,524316,589977,459030,524412,524348,590041,459022,524396,524332,590009,524300,524428,524364,590073,459009,524370,524306,524570,459025,524402,524338,590021,459017,524386,524322,589989,524290,524418,524354,590053,459013,524378,524314,589973,459029,524410,524346,590037,459021,524394,524330,590005,524298,524426,524362,590069,459011,524374,524310,524574,459027,524406,524342,590029,459019,524390,524326,589997,524294,524422,524358,590061,459015,524382,524318,589981,459031,524414,524350,
-590045,459023,524398,524334,590013,524302,524430,524366,590077,459008,524369,524305,524569,459024,524401,524337,590019,459016,524385,524321,589987,524289,524417,524353,590051,459012,524377,524313,589971,459028,524409,524345,590035,459020,524393,524329,590003,524297,524425,524361,590067,459010,524373,524309,524573,459026,524405,524341,590027,459018,524389,524325,589995,524293,524421,524357,590059,459014,524381,524317,589979,459030,524413,524349,590043,459022,524397,524333,590011,524301,524429,524365,
-590075,459009,524371,524307,524571,459025,524403,524339,590023,459017,524387,524323,589991,524291,524419,524355,590055,459013,524379,524315,589975,459029,524411,524347,590039,459021,524395,524331,590007,524299,524427,524363,590071,459011,524375,524311,524575,459027,524407,524343,590031,459019,524391,524327,589999,524295,524423,524359,590063,459015,524383,524319,589983,459031,524415,524351,590047,459023,524399,524335,590015,524303,524431,524367,590079]),9],qh=[new Uint32Array([327680,327696,327688,
-327704,327684,327700,327692,327708,327682,327698,327690,327706,327686,327702,327694,0,327681,327697,327689,327705,327685,327701,327693,327709,327683,327699,327691,327707,327687,327703,327695,0]),5];ob.prototype=Object.create(S.prototype);ob.prototype.getBits=function(a){for(var b=this.codeSize,c=this.codeBuf,d=this.bytes,e=this.bytesPos,f;b<a;)"undefined"==typeof(f=d[e++])&&s("Bad encoding in flate stream"),c|=f<<b,b+=8;this.codeBuf=c>>a;this.codeSize=b-a;this.bytesPos=e;return c&(1<<a)-1};ob.prototype.getCode=
-function(a){var b=a[0],c=a[1];a=this.codeSize;for(var d=this.codeBuf,e=this.bytes,f=this.bytesPos;a<c;){var g;"undefined"==typeof(g=e[f++])&&s("Bad encoding in flate stream");d|=g<<a;a+=8}c=b[d&(1<<c)-1];b=c>>16;c&=65535;(0==a||a<b||0==b)&&s("Bad encoding in flate stream");this.codeBuf=d>>b;this.codeSize=a-b;this.bytesPos=f;return c};ob.prototype.generateHuffmanTable=function(a){for(var b=a.length,c=0,d=0;d<b;++d)a[d]>c&&(c=a[d]);for(var e=1<<c,f=new Uint32Array(e),g=1,h=0,k=2;g<=c;++g,h<<=1,k<<=
-1)for(var j=0;j<b;++j)if(a[j]==g){for(var l=0,n=h,d=0;d<g;++d)l=l<<1|n&1,n>>=1;for(d=l;d<e;d+=k)f[d]=g<<16|j;++h}return[f,c]};ob.prototype.readBlock=function(){var a=this.getBits(3);a&1&&(this.eof=!0);a>>=1;if(0==a){var a=this.bytes,b=this.bytesPos,c;"undefined"==typeof(c=a[b++])&&s("Bad block header in flate stream");var d=c;"undefined"==typeof(c=a[b++])&&s("Bad block header in flate stream");d|=c<<8;"undefined"==typeof(c=a[b++])&&s("Bad block header in flate stream");var e=c;"undefined"==typeof(c=
-a[b++])&&s("Bad block header in flate stream");(e|c<<8)!=(~d&65535)&&s("Bad uncompressed block length in flate stream");this.codeSize=this.codeBuf=0;c=this.bufferLength;e=this.ensureBuffer(c+d);this.bufferLength=d=c+d;for(var f=c;f<d;++f){if("undefined"==typeof(c=a[b++])){this.eof=!0;break}e[f]=c}this.bytesPos=b}else{if(1==a)b=ph,c=qh;else if(2==a){e=this.getBits(5)+257;d=this.getBits(5)+1;a=this.getBits(4)+4;c=new Uint8Array($f.length);for(b=0;b<a;++b)c[$f[b]]=this.getBits(3);c=this.generateHuffmanTable(c);
-b=a=0;d=e+d;for(f=new Uint8Array(d);b<d;){var g=this.getCode(c);if(16==g)var h=2,k=3,g=a;else if(17==g)k=h=3,g=a=0;else if(18==g)h=7,k=11,g=a=0;else{f[b++]=a=g;continue}for(h=this.getBits(h)+k;0<h--;)f[b++]=g}b=this.generateHuffmanTable(f.subarray(0,e));c=this.generateHuffmanTable(f.subarray(e,d))}else s("Unknown block type in flate stream");d=(e=this.buffer)?e.length:0;for(f=this.bufferLength;;)if(g=this.getCode(b),256>g)f+1>=d&&(e=this.ensureBuffer(f+1),d=e.length),e[f++]=g;else{if(256==g){this.bufferLength=
-f;break}g-=257;g=nh[g];h=g>>16;0<h&&(h=this.getBits(h));a=(g&65535)+h;g=this.getCode(c);g=oh[g];h=g>>16;0<h&&(h=this.getBits(h));g=(g&65535)+h;f+a>=d&&(e=this.ensureBuffer(f+a),d=e.length);for(h=0;h<a;++h,++f)e[f]=e[f-g]}}};vd=ob;var ud,Cb=function(a,b){var c=this.predictor=b.get("Predictor")||1;if(1>=c)return a;2!==c&&(10>c||15<c)&&s("Unsupported predictor: "+c);this.readBlock=2===c?this.readBlockTiff:this.readBlockPng;this.stream=a;this.dict=a.dict;var c=this.colors=b.get("Colors")||1,d=this.bits=
-b.get("BitsPerComponent")||8,e=this.columns=b.get("Columns")||1;this.pixBytes=c*d+7>>3;this.rowBytes=e*c*d+7>>3;S.call(this);return this};Cb.prototype=Object.create(S.prototype);Cb.prototype.readBlockTiff=function(){var a=this.rowBytes,b=this.bufferLength,c=this.ensureBuffer(b+a),d=this.bits,e=this.colors,f=this.stream.getBytes(a),g=0,h=0,k=0,j=0,l=b;if(1===d)for(b=0;b<a;++b)d=f[b],g=g<<8|d,c[l++]=(d^g>>e)&255,g&=65535;else if(8===d){for(b=0;b<e;++b)c[l++]=f[b];for(;b<a;++b)c[l]=c[l-e]+f[b],l++}else{for(var l=
-new Uint8Array(e+1),n=(1<<d)-1,p=0,m=b,r=this.columns,b=0;b<r;++b)for(var q=0;q<e;++q)k<d&&(g=g<<8|f[p++]&255,k+=8),l[q]=l[q]+(g>>k-d)&n,k-=d,h=h<<d|l[q],j+=d,8<=j&&(c[m++]=h>>j-8&255,j-=8);0<j&&(c[m++]=(h<<8-j)+(g&(1<<8-j)-1))}this.bufferLength+=a};Cb.prototype.readBlockPng=function(){var a=this.rowBytes,b=this.pixBytes,c=this.stream.getByte(),d=this.stream.getBytes(a),e=this.bufferLength,f=this.ensureBuffer(e+a),g=f.subarray(e-a,e);0==g.length&&(g=new Uint8Array(a));switch(c){case 0:for(c=0;c<a;++c)f[e++]=
-d[c];break;case 1:for(c=0;c<b;++c)f[e++]=d[c];for(;c<a;++c)f[e]=f[e-b]+d[c]&255,e++;break;case 2:for(c=0;c<a;++c)f[e++]=g[c]+d[c]&255;break;case 3:for(c=0;c<b;++c)f[e++]=(g[c]>>1)+d[c];for(;c<a;++c)f[e]=(g[c]+f[e-b]>>1)+d[c]&255,e++;break;case 4:for(c=0;c<b;++c){var h=g[c],k=d[c];f[e++]=h+k}for(;c<a;++c){var h=g[c],j=g[c-b],l=f[e-b],k=l+h-j,n=k-l;0>n&&(n=-n);var p=k-h;0>p&&(p=-p);var m=k-j;0>m&&(m=-m);k=d[c];n<=p&&n<=m?f[e++]=l+k:p<=m?f[e++]=h+k:f[e++]=j+k}break;default:s("Unsupported predictor: "+
-c)}this.bufferLength+=a};ud=Cb;var ub,Qa=function(a,b){this.dict=b;this.isAdobeImage=!1;this.colorTransform=b.get("ColorTransform")||-1;var c;a:{c=a;for(var d=Math.max(c.length-16,1024),e=0;e<d;++e){if(255==c[e]&&238==c[e+1]&&0==c[e+2]&&14==c[e+3]&&65==c[e+4]&&100==c[e+5]&&111==c[e+6]&&98==c[e+7]&&101==c[e+8]&&0==c[e+9]){c=!0;break a}if(255==c[e]&&192==c[e+1])break}c=!1}c&&(this.isAdobeImage=!0,c=a,d=new Uint8Array([255,236,0,8,69,77,66,69,68,0]),e=new Uint8Array(c.length+d.length),e.set(c,d.length),
-e[0]=c[0],e[1]=c[1],e.set(d,2),a=e);this.bytes=a;S.call(this)};Qa.prototype=Object.create(S.prototype);Qa.prototype.ensureBuffer=function(){if(!this.bufferLength)try{var a=new ag;-1!=this.colorTransform&&(a.colorTransform=this.colorTransform);a.parse(this.bytes);var b=a.getData(a.width,a.height);this.buffer=b;this.bufferLength=b.length}catch(c){s("JPEG error: "+c)}};Qa.prototype.getIR=function(){return rc(this.bytes)};Qa.prototype.getChar=function(){s("internal error: getChar is not valid on JpegStream")};
-Qa.prototype.isNativelySupported=function(a,b){var c=Q.parse(this.dict.get("ColorSpace","CS"),a,b);return"DeviceGray"===c.name||"DeviceRGB"===c.name||"DeviceCMYK"===c.name&&!this.isAdobeImage&&1>this.colorTransform?!0:!1};Qa.prototype.isNativelyDecodable=function(a,b){var c=Q.parse(this.dict.get("ColorSpace","CS"),a,b).numComps;return 1==c||3==c?!0:!1};ub=Qa;var Sf,Ra=function(a,b){this.dict=b;this.bytes=a;S.call(this)};Ra.prototype=Object.create(S.prototype);Ra.prototype.ensureBuffer=function(){if(!this.bufferLength){var a=
-new bg;a.parse(this.bytes);var b=a.width,c=a.height,d=a.componentsCount;1!=d&&(3!=d&&4!=d)&&s("JPX with "+d+" components is not supported");for(var c=new Uint8Array(b*c*d),e=0,f=a.tiles.length;e<f;e++){var g=a.tiles[e],h=g[0].width,k=g[0].height,j=g[0].left,l=g[0].top,n,p,m,r;switch(d){case 1:n=g[0].items;j=b*l+j;r=b-h;for(var q=l=0;q<k;q++){for(var A=0;A<h;A++)c[j++]=n[l++];j+=r}break;case 3:n=g[0].items;p=g[1].items;m=g[2].items;j=3*(b*l+j);r=3*(b-h);for(q=l=0;q<k;q++){for(A=0;A<h;A++)c[j++]=n[l],
-c[j++]=p[l],c[j++]=m[l],l++;j+=r}break;case 4:n=g[0].items;p=g[1].items;m=g[2].items;g=g[3].items;j=4*(b*l+j);r=4*(b-h);for(q=l=0;q<k;q++){for(A=0;A<h;A++)c[j++]=n[l],c[j++]=p[l],c[j++]=m[l],c[j++]=g[l],l++;j+=r}}}this.buffer=c;this.bufferLength=c.length}};Ra.prototype.getChar=function(){s("internal error: getChar is not valid on JpxStream")};Sf=Ra;var Xf,qc=function(a,b){this.dict=b;this.bytes=a;S.call(this)};qc.prototype=Object.create(S.prototype);qc.prototype.ensureBuffer=function(){if(!this.bufferLength){var a=
-new cg,b=[],c=this.dict.get("DecodeParms");c&&c.has("JBIG2Globals")&&(c=c.get("JBIG2Globals").getBytes(),b.push({data:c,start:0,end:c.length}));b.push({data:this.bytes,start:0,end:this.bytes.length});a=a.parseChunks(b);b=a.length;for(c=0;c<b;c++)a[c]^=255;this.buffer=a;this.bufferLength=b}};qc.prototype.getChar=function(){s("internal error: getChar is not valid on Jbig2Stream")};Xf=qc;var Xe,Ed=function(a,b){this.str=a;this.dict=a.dict;this.decrypt=b;S.call(this)};Ed.prototype=Object.create(S.prototype);
-Ed.prototype.readBlock=function(){var a=this.str.getBytes(512);if(!a||0==a.length)this.eof=!0;else{var b=this.decrypt,a=b(a),b=this.bufferLength,c,d=a.length,e=this.ensureBuffer(b+d);for(c=0;c<d;c++)e[b++]=a[c];this.bufferLength=b}};Xe=Ed;var Tf,Fd=function(a){this.str=a;this.dict=a.dict;this.input=new Uint8Array(5);S.call(this)};Fd.prototype=Object.create(S.prototype);Fd.prototype.readBlock=function(){for(var a=this.str,b=a.getByte();ra.isSpace(String.fromCharCode(b));)b=a.getByte();if(!b||126===
-b)this.eof=!0;else{var c=this.bufferLength;if(122==b){for(var a=this.ensureBuffer(c+4),d=0;4>d;++d)a[c+d]=0;this.bufferLength+=4}else{var e=this.input;e[0]=b;for(d=1;5>d;++d){for(b=a.getByte();ra.isSpace(String.fromCharCode(b));)b=a.getByte();e[d]=b;if(!b||126==b)break}a=this.ensureBuffer(c+d-1);this.bufferLength+=d-1;if(5>d){for(;5>d;++d)e[d]=117;this.eof=!0}for(d=b=0;5>d;++d)b=85*b+(e[d]-33);for(d=3;0<=d;--d)a[c+d]=b&255,b>>=8}}};Tf=Fd;var Uf,Gd=function(a){this.str=a;this.dict=a.dict;S.call(this)},
-Hd={9:-1,32:-1,48:0,49:1,50:2,51:3,52:4,53:5,54:6,55:7,56:8,57:9,65:10,66:11,67:12,68:13,69:14,70:15,97:10,98:11,99:12,100:13,101:14,102:15};Gd.prototype=Object.create(S.prototype);Gd.prototype.readBlock=function(){var a=this.str.getBytes(),b,c,d,e,f,g;d=this.ensureBuffer(this.bufferLength+(a.length+1>>1));e=this.bufferLength;f=0;for(g=a.length;f<g;f++){for(b=Hd[a[f]];-1==b&&f+1<g;)b=Hd[a[++f]];f+1<g&&62!==a[f+1]?(c=Hd[a[++f]],d[e++]=16*b+c):62!==a[f]&&(d[e++]=16*b)}this.bufferLength=e;this.eof=!0};
-Uf=Gd;var Wf,Id=function(a){this.str=a;this.dict=a.dict;S.call(this)};Id.prototype=Object.create(S.prototype);Id.prototype.readBlock=function(){var a=this.str.getBytes(2);if(!a||2>a.length||128==a[0])this.eof=!0;else{var b=this.bufferLength,c=a[0];if(128>c){var d=this.ensureBuffer(b+c+1);d[b++]=a[1];0<c&&(a=this.str.getBytes(c),d.set(a,b),b+=c)}else for(var c=257-c,a=a[1],d=this.ensureBuffer(b+c+1),e=0;e<c;e++)d[b++]=a;this.bufferLength=b}};Wf=Id;var Vf,la=function(a,b){this.str=a;this.dict=a.dict;
-b=b||new Aa;this.encoding=b.get("K")||0;this.eoline=b.get("EndOfLine")||!1;this.byteAlign=b.get("EncodedByteAlign")||!1;this.columns=b.get("Columns")||1728;this.rows=b.get("Rows")||0;var c=b.get("EndOfBlock");null==c&&(c=!0);this.eoblock=c;this.black=b.get("BlackIs1")||!1;this.codingLine=new Uint32Array(this.columns+1);this.refLine=new Uint32Array(this.columns+2);this.codingLine[0]=this.columns;this.row=this.codingPos=0;this.nextLine2D=0>this.encoding;this.outputBits=this.inputBuf=this.inputBits=
-0;for(this.buf=J;0==(c=this.lookBits(12));)this.eatBits(1);1==c&&this.eatBits(12);0<this.encoding&&(this.nextLine2D=!this.lookBits(1),this.eatBits(1));S.call(this)},dg=[[-1,-1],[-1,-1],[7,8],[7,7],[6,6],[6,6],[6,5],[6,5],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],
-[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2]],eg=[[-1,-1],[12,-2],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,
--1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[12,1984],[12,2048],[12,2112],[12,2176],[12,2240],[12,2304],[11,1856],[11,1856],[11,1920],[11,1920],[12,2368],[12,2432],[12,2496],[12,2560]],fg=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[8,29],[8,29],[8,30],[8,30],[8,45],[8,45],[8,46],[8,46],[7,22],[7,22],[7,22],[7,22],[7,23],[7,23],[7,23],[7,23],[8,47],[8,47],[8,48],[8,48],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[7,20],[7,20],[7,20],[7,20],[8,33],[8,33],
-[8,34],[8,34],[8,35],[8,35],[8,36],[8,36],[8,37],[8,37],[8,38],[8,38],[7,19],[7,19],[7,19],[7,19],[8,31],[8,31],[8,32],[8,32],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[8,53],[8,53],[8,54],[8,54],[7,26],[7,26],[7,26],[7,26],[8,39],[8,39],[8,40],[8,40],[8,41],[8,41],[8,42],[8,42],[8,43],[8,43],[8,44],[8,44],[7,21],[7,21],[7,21],[7,21],[7,28],[7,28],[7,28],[7,28],[8,61],[8,61],[8,62],[8,62],[8,63],[8,63],[8,0],[8,0],[8,320],[8,320],[8,384],
-[8,384],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[7,27],[7,27],[7,27],[7,27],[8,59],[8,59],[8,60],[8,60],[9,1472],[9,1536],[9,1600],[9,1728],[7,18],[7,18],[7,18],[7,18],[7,24],[7,24],[7,24],[7,24],[8,49],[8,49],[8,50],[8,50],[8,51],[8,51],[8,52],[8,52],[7,25],[7,25],[7,25],[7,25],[8,55],[8,55],[8,56],[8,56],[8,57],[8,
-57],[8,58],[8,58],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[8,448],[8,448],[8,512],[8,512],[9,704],[9,768],[8,640],[8,640],[8,576],[8,576],[9,832],[9,896],[9,960],[9,1024],[9,1088],[9,1152],[9,1216],[9,1280],[9,1344],[9,1408],[7,256],[7,256],[7,256],[7,256],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],
-[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,
-9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,
-5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],
-[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7]],gg=[[-1,-1],[-1,-1],[12,-2],[12,-2],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[11,1792],[11,1792],[12,1984],[12,1984],[12,2048],[12,2048],[12,2112],
-[12,2112],[12,2176],[12,2176],[12,2240],[12,2240],[12,2304],[12,2304],[11,1856],[11,1856],[11,1856],[11,1856],[11,1920],[11,1920],[11,1920],[11,1920],[12,2368],[12,2368],[12,2432],[12,2432],[12,2496],[12,2496],[12,2560],[12,2560],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[12,52],[12,52],[13,640],[13,704],[13,768],[13,832],[12,55],[12,55],[12,56],[12,56],[13,1280],[13,1344],[13,1408],[13,1472],[12,59],[12,59],[12,60],[12,60],[13,1536],[13,1600],[11,24],[11,24],[11,24],[11,24],
-[11,25],[11,25],[11,25],[11,25],[13,1664],[13,1728],[12,320],[12,320],[12,384],[12,384],[12,448],[12,448],[13,512],[13,576],[12,53],[12,53],[12,54],[12,54],[13,896],[13,960],[13,1024],[13,1088],[13,1152],[13,1216],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64]],hg=[[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[11,23],[11,23],[12,50],[12,51],[12,44],[12,45],[12,46],[12,47],[12,57],[12,58],[12,61],[12,256],[10,16],[10,
-16],[10,16],[10,16],[10,17],[10,17],[10,17],[10,17],[12,48],[12,49],[12,62],[12,63],[12,30],[12,31],[12,32],[12,33],[12,40],[12,41],[11,22],[11,22],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,11],[7,11],[7,
-11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[12,128],[12,192],[12,26],[12,27],[12,28],[12,29],[11,19],[11,19],[11,20],[11,20],[12,34],[12,35],[12,36],[12,37],[12,38],[12,39],[11,21],[11,21],[12,42],[12,43],[10,0],[10,0],[10,0],[10,0],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],
-[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12]],ig=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[6,9],[6,8],[5,7],[5,7],[4,6],[4,6],[4,6],[4,6],[4,5],[4,5],[4,5],[4,5],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,2],[2,2],[2,2],[2,2],[2,
-2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2]];la.prototype=Object.create(S.prototype);la.prototype.readBlock=function(){for(;!this.eof;){var a=this.lookChar();this.buf=J;this.ensureBuffer(this.bufferLength+1);this.buffer[this.bufferLength++]=a}};la.prototype.addPixels=function(a,b){var c=this.codingLine,d=this.codingPos;a>c[d]&&(a>this.columns&&(aa("row is wrong length"),this.err=!0,a=this.columns),d&1^b&&++d,c[d]=a);this.codingPos=d};la.prototype.addPixelsNeg=function(a,b){var c=
-this.codingLine,d=this.codingPos;if(a>c[d])a>this.columns&&(aa("row is wrong length"),this.err=!0,a=this.columns),d&1^b&&++d,c[d]=a;else if(a<c[d]){0>a&&(aa("invalid code"),this.err=!0,a=0);for(;0<d&&a<c[d-1];)--d;c[d]=a}this.codingPos=d};la.prototype.lookChar=function(){if(this.buf!=J)return this.buf;var a=this.refLine,b=this.codingLine,c=this.columns,d,e,f;if(0==this.outputBits){if(this.eof)return null;this.err=!1;var g,h;if(this.nextLine2D){for(d=0;b[d]<c;++d)a[d]=b[d];a[d++]=c;a[d]=c;for(e=d=
-this.codingPos=b[0]=0;b[this.codingPos]<c;)switch(f=this.getTwoDimCode(),f){case 0:this.addPixels(a[d+1],e);a[d+1]<c&&(d+=2);break;case 1:f=g=0;if(e){do f+=h=this.getBlackCode();while(64<=h);do g+=h=this.getWhiteCode();while(64<=h)}else{do f+=h=this.getWhiteCode();while(64<=h);do g+=h=this.getBlackCode();while(64<=h)}this.addPixels(b[this.codingPos]+f,e);for(b[this.codingPos]<c&&this.addPixels(b[this.codingPos]+g,e^1);a[d]<=b[this.codingPos]&&a[d]<c;)d+=2;break;case 7:this.addPixels(a[d]+3,e);e^=
-1;if(b[this.codingPos]<c)for(++d;a[d]<=b[this.codingPos]&&a[d]<c;)d+=2;break;case 5:this.addPixels(a[d]+2,e);e^=1;if(b[this.codingPos]<c)for(++d;a[d]<=b[this.codingPos]&&a[d]<c;)d+=2;break;case 3:this.addPixels(a[d]+1,e);e^=1;if(b[this.codingPos]<c)for(++d;a[d]<=b[this.codingPos]&&a[d]<c;)d+=2;break;case 2:this.addPixels(a[d],e);e^=1;if(b[this.codingPos]<c)for(++d;a[d]<=b[this.codingPos]&&a[d]<c;)d+=2;break;case 8:this.addPixelsNeg(a[d]-3,e);e^=1;if(b[this.codingPos]<c)for(0<d?--d:++d;a[d]<=b[this.codingPos]&&
-a[d]<c;)d+=2;break;case 6:this.addPixelsNeg(a[d]-2,e);e^=1;if(b[this.codingPos]<c)for(0<d?--d:++d;a[d]<=b[this.codingPos]&&a[d]<c;)d+=2;break;case 4:this.addPixelsNeg(a[d]-1,e);e^=1;if(b[this.codingPos]<c)for(0<d?--d:++d;a[d]<=b[this.codingPos]&&a[d]<c;)d+=2;break;case J:this.addPixels(c,0);this.eof=!0;break;default:aa("bad 2d code"),this.addPixels(c,0),this.err=!0}}else for(e=this.codingPos=b[0]=0;b[this.codingPos]<c;){f=0;if(e){do f+=h=this.getBlackCode();while(64<=h)}else{do f+=h=this.getWhiteCode();
-while(64<=h)}this.addPixels(b[this.codingPos]+f,e);e^=1}this.byteAlign&&(this.inputBits&=-8);a=!1;if(!this.eoblock&&this.row==this.rows-1)this.eof=!0;else{for(f=this.lookBits(12);0==f;)this.eatBits(1),f=this.lookBits(12);1==f?(this.eatBits(12),a=!0):f==J&&(this.eof=!0)}!this.eof&&0<this.encoding&&(this.nextLine2D=!this.lookBits(1),this.eatBits(1));if(this.eoblock&&a){if(f=this.lookBits(12),1==f){this.eatBits(12);0<this.encoding&&(this.lookBits(1),this.eatBits(1));if(0<=this.encoding)for(d=0;4>d;++d)f=
-this.lookBits(12),1!=f&&aa("bad rtc code: "+f),this.eatBits(12),0<this.encoding&&(this.lookBits(1),this.eatBits(1));this.eof=!0}}else if(this.err&&this.eoline){for(;;){f=this.lookBits(13);if(f==J)return this.eof=!0,null;if(1==f>>1)break;this.eatBits(1)}this.eatBits(12);0<this.encoding&&(this.eatBits(1),this.nextLine2D=!(f&1))}this.outputBits=0<b[0]?b[this.codingPos=0]:b[this.codingPos=1];this.row++}if(8<=this.outputBits)this.buf=this.codingPos&1?0:255,this.outputBits-=8,0==this.outputBits&&b[this.codingPos]<
-c&&(this.codingPos++,this.outputBits=b[this.codingPos]-b[this.codingPos-1]);else{f=8;this.buf=0;do this.outputBits>f?(this.buf<<=f,this.codingPos&1||(this.buf|=255>>8-f),this.outputBits-=f,f=0):(this.buf<<=this.outputBits,this.codingPos&1||(this.buf|=255>>8-this.outputBits),f-=this.outputBits,this.outputBits=0,b[this.codingPos]<c?(this.codingPos++,this.outputBits=b[this.codingPos]-b[this.codingPos-1]):0<f&&(this.buf<<=f,f=0));while(f)}this.black&&(this.buf^=255);return this.buf};la.prototype.findTableCode=
-function(a,b,c,d){for(d=d||0;a<=b;++a){var e=this.lookBits(a);if(e==J)return[!0,1,!1];a<b&&(e<<=b-a);if(!d||e>=d)if(e=c[e-d],e[0]==a)return this.eatBits(a),[!0,e[1],!0]}return[!1,0,!1]};la.prototype.getTwoDimCode=function(){var a=0;if(this.eoblock){if(a=this.lookBits(7),(a=dg[a])&&0<a[0])return this.eatBits(a[0]),a[1]}else if(a=this.findTableCode(1,7,dg),a[0]&&a[2])return a[1];aa("Bad two dim code");return J};la.prototype.getWhiteCode=function(){var a=0;if(this.eoblock){a=this.lookBits(12);if(a==
-J)return 1;a=0==a>>5?eg[a]:fg[a>>3];if(0<a[0])return this.eatBits(a[0]),a[1]}else{a=this.findTableCode(1,9,fg);if(a[0])return a[1];a=this.findTableCode(11,12,eg);if(a[0])return a[1]}aa("bad white code");this.eatBits(1);return 1};la.prototype.getBlackCode=function(){var a;if(this.eoblock){a=this.lookBits(13);if(a==J)return 1;a=0==a>>7?gg[a]:0==a>>9&&0!=a>>7?hg[(a>>1)-64]:ig[a>>7];if(0<a[0])return this.eatBits(a[0]),a[1]}else{a=this.findTableCode(2,6,ig);if(a[0])return a[1];a=this.findTableCode(7,12,
-hg,64);if(a[0])return a[1];a=this.findTableCode(10,13,gg);if(a[0])return a[1]}aa("bad black code");this.eatBits(1);return 1};la.prototype.lookBits=function(a){for(var b;this.inputBits<a;){if(null==(b=this.str.getByte()))return 0==this.inputBits?J:this.inputBuf<<a-this.inputBits&65535>>16-a;this.inputBuf=(this.inputBuf<<8)+b;this.inputBits+=8}return this.inputBuf>>this.inputBits-a&65535>>16-a};la.prototype.eatBits=function(a){if(0>(this.inputBits-=a))this.inputBits=0};Vf=la;var wd,Ub=function(a,b){this.str=
-a;this.dict=a.dict;this.bitsCached=this.cachedData=0;for(var c={earlyChange:b,codeLength:9,nextCode:258,dictionaryValues:new Uint8Array(4096),dictionaryLengths:new Uint16Array(4096),dictionaryPrevCodes:new Uint16Array(4096),currentSequence:new Uint8Array(4096),currentSequenceLength:0},d=0;256>d;++d)c.dictionaryValues[d]=d,c.dictionaryLengths[d]=1;this.lzwState=c;S.call(this)};Ub.prototype=Object.create(S.prototype);Ub.prototype.readBits=function(a){for(var b=this.bitsCached,c=this.cachedData;b<a;){var d=
-this.str.getByte();if(null==d)return this.eof=!0,null;c=c<<8|d;b+=8}this.bitsCached=b-=a;this.cachedData=c;this.lastCode=null;return c>>>b&(1<<a)-1};Ub.prototype.readBlock=function(){var a=1024,b,c,d,e=this.lzwState;if(e){var f=e.earlyChange,g=e.nextCode,h=e.dictionaryValues,k=e.dictionaryLengths,j=e.dictionaryPrevCodes,l=e.codeLength,n=e.prevCode,p=e.currentSequence,m=e.currentSequenceLength,r=0,q=this.bufferLength,s=this.ensureBuffer(this.bufferLength+a);for(b=0;512>b;b++){var t=this.readBits(l),
-y=0<m;if(256>t)p[0]=t,m=1;else if(258<=t)if(t<g){m=k[t];c=m-1;for(d=t;0<=c;c--)p[c]=h[d],d=j[d]}else p[m++]=p[0];else if(256==t){l=9;g=258;m=0;continue}else{this.eof=!0;delete this.lzwState;break}y&&(j[g]=n,k[g]=k[n]+1,h[g]=p[0],g++,l=g+f&g+f-1?l:Math.min(Math.log(g+f)/0.6931471805599453+1,12)|0);n=t;r+=m;if(a<r){do a+=512;while(a<r);s=this.ensureBuffer(this.bufferLength+a)}for(c=0;c<m;c++)s[q++]=p[c]}e.nextCode=g;e.codeLength=l;e.prevCode=n;e.currentSequenceLength=m;this.bufferLength=q}};wd=Ub;var Kc,
-jg=function(){Jb.call(this,new Uint8Array(0))};jg.prototype=Jb.prototype;Kc=jg;Ib.prototype={on:function(a,b,c){var d=this.actionHandler;d[a]&&s('There is already an actionName called "'+a+'"');d[a]=[b,c]},send:function(a,b,c){a={action:a,data:b};c&&(b=this.callbackIndex++,this.callbacks[b]=c,a.callbackId=b);this.comObj.postMessage(a)}};var me={setup:function(a){function b(b,e){var f=e.password;try{c=new $d(new Jb(b),f)}catch(g){g instanceof Kb?"needpassword"===g.code?a.send("NeedPassword",{exception:g}):
-"incorrectpassword"===g.code&&a.send("IncorrectPassword",{exception:g}):g instanceof Qc?a.send("InvalidPDF",{exception:g}):a.send("UnknownError",{exception:new fe(g.message,g.toString())});return}f={numPages:c.numPages,fingerprint:c.getFingerprint(),destinations:c.catalog.destinations,outline:c.catalog.documentOutline,info:c.getDocumentInfo(),metadata:c.catalog.metadata,encrypted:!!c.xref.encrypt};a.send("GetDoc",{pdfInfo:f})}var c=null;a.on("test",function(b){b instanceof Uint8Array?(b=new XMLHttpRequest,
-"response"in b||"mozResponse"in b||"responseArrayBuffer"in b||"mozResponseArrayBuffer"in b?a.send("test",!0):a.send("test",!1)):a.send("test",!1)});a.on("GetDocRequest",function(c){var e=c.source;e.data?b(e.data,e):PDFJS.getPdf({url:e.url,progress:function(b){a.send("DocProgress",{loaded:b.loaded,total:b.lengthComputable?b.total:void 0})},error:function(b){a.send("DocError","Unexpected server response of "+b.target.status+".")},headers:e.httpHeaders},function(a){b(a,e)})});a.on("GetPageRequest",function(b){var e=
-c.getPage(b.pageIndex+1);a.send("GetPage",{pageInfo:{pageIndex:b.pageIndex,rotate:e.rotate,ref:e.ref,view:e.view}})});a.on("GetData",function(a,b){b.resolve(c.stream.bytes)});a.on("GetAnnotationsRequest",function(b){var e=c.getPage(b.pageIndex+1);a.send("GetAnnotations",{pageIndex:b.pageIndex,annotations:e.getAnnotations()})});a.on("RenderPageRequest",function(b){var e=b.pageIndex+1;new jc(null);var f=Date.now(),g=[],h=null;try{h=c.getPage(e).getOperatorList(a,g)}catch(k){k="string"===typeof k?{message:k,
-stack:"worker.js: while trying to getPage() and getOperatorList()"}:"object"===typeof k?{message:k.message||k.toString(),stack:k.stack||"worker.js: while trying to getPage() and getOperatorList()"}:{message:"Unknown exception type: "+typeof k,stack:"worker.js: while trying to getPage() and getOperatorList()"};a.send("PageError",{pageNum:e,error:k});return}ma("page=%d - getOperatorList: time=%dms, len=%d",e,Date.now()-f,h.fnArray.length);for(var e={},f=0,j=g.length;f<j;f++){var l=g[f];0==l.indexOf("g_font_")&&
-(e[l]=!0)}a.send("RenderPage",{pageIndex:b.pageIndex,operatorList:h,depFonts:Object.keys(e)})},this);a.on("GetTextContent",function(a,b){var f=a.pageIndex+1,g=Date.now(),h="";try{h=c.getPage(f).extractTextContent(),b.resolve(h)}catch(k){b.reject(k)}ma("text indexing: page=%d - time=%dms",f,Date.now()-g)})}},kg={},rh={log:function(){var a=Array.prototype.slice.call(arguments);P.postMessage({action:"console_log",data:a})},error:function(){var a=Array.prototype.slice.call(arguments);P.postMessage({action:"console_error",
-data:a});throw"pdf.js execution error";},time:function(a){kg[a]=Date.now()},timeEnd:function(a){var b=kg[a];null==b&&s("Unkown timer name "+a);this.log("Timer:",a,Date.now()-b)}};if("undefined"===typeof window){P.console=rh;PDFJS.LogManager.addLogger({warn:function(a){P.postMessage({action:"_warn",data:a})}});var sh=new Ib("worker_processor",this);me.setup(sh)}var bg,lg=function(){this.failOnCorruptedImage=!1},pb=function(a,b){return a[b]<<24|a[b+1]<<16|a[b+2]<<8|a[b+3]},fb=function(a,b){return a[b]<<
-8|a[b+1]},Jd=function(a){for(var b=1,c=0;a>b;)b<<=1,c++;return c},Xb=function(a,b,c){a=c.xcb_;var d=c.ycb_,e=1<<a,f=1<<d,g=Math.floor(b.tbx0/e),h=Math.floor(b.tby0/f),k=Math.ceil(b.tbx1/e),j=Math.ceil(b.tby1/f),l=b.resolution.precinctParameters,n=[];c=[];for(var p=h;p<j;p++)for(h=g;h<k;h++){var m={cbx:h,cby:p,tbx0:e*h,tby0:f*p,tbx1:e*(h+1),tby1:f*(p+1)},r=Math.floor((m.tby0-l.precinctYOffset)/l.precinctHeight)+Math.floor((m.tbx0-l.precinctXOffset)/l.precinctWidth)*l.numprecinctswide;m.tbx0_=Math.max(b.tbx0,
-m.tbx0);m.tby0_=Math.max(b.tby0,m.tby0);m.tbx1_=Math.min(b.tbx1,m.tbx1);m.tby1_=Math.min(b.tby1,m.tby1);m.precinctNumber=r;m.subbandType=b.type;m.Lblock=3;n.push(m);r in c?(r=c[r],r.cbxMin=Math.min(r.cbxMin,h),r.cbyMin=Math.min(r.cbyMin,p),r.cbxMax=Math.max(r.cbxMax,h),r.cbyMax=Math.max(r.cbyMax,p)):c[r]=r={cbxMin:h,cbyMin:p,cbxMax:h,cbyMax:p};m.precinct=r}b.codeblockParameters={codeblockWidth:a,codeblockHeight:d,numcodeblockwide:k-g+1,numcodeblockhigh:j-j+1};b.codeblocks=n;h=0;for(a=n.length;h<a;h++);
-b.precincts=c},mg=function(a,b,c){var d=[];a=a.subbands;for(var e=0,f=a.length;e<f;e++)for(var g=a[e].codeblocks,h=0,k=g.length;h<k;h++){var j=g[h];j.precinctNumber==b&&d.push(j)}return{layerNumber:c,codeblocks:d}},th=function(a){var b=a.tiles[a.currentTile.index],c=b.codingStyleDefaultParameters.layersCount,d=a.SIZ.Csiz,e=0;for(a=0;a<d;a++)e=Math.max(e,b.components[a].codingStyleParameters.decompositionLevelsCount);var f=0,g=0,h=0,k=0;this.nextPacket=function(){for(;f<c;f++){for(;g<=e;g++){for(;h<
-d;h++){var a=b.components[h];if(!(g>a.codingStyleParameters.decompositionLevelsCount)){for(var a=a.resolutions[g],l=a.precinctParameters.numprecincts;k<l;)return a=mg(a,k,f),k++,a;k=0}}h=0}g=0}throw"Out of packets";}},uh=function(a){var b=a.tiles[a.currentTile.index],c=b.codingStyleDefaultParameters.layersCount,d=a.SIZ.Csiz,e=0;for(a=0;a<d;a++)e=Math.max(e,b.components[a].codingStyleParameters.decompositionLevelsCount);var f=0,g=0,h=0,k=0;this.nextPacket=function(){for(;f<=e;f++){for(;g<c;g++){for(;h<
-d;h++){var a=b.components[h];if(!(f>a.codingStyleParameters.decompositionLevelsCount)){for(var a=a.resolutions[f],l=a.precinctParameters.numprecincts;k<l;)return a=mg(a,k,g),k++,a;k=0}}h=0}g=0}throw"Out of packets";}},vh=function(a,b,c,d){function e(a){for(;k<a;){var d=b[c+g];g++;j?(h=h<<7|d,k+=7,j=!1):(h=h<<8|d,k+=8);255==d&&(j=!0)}k-=a;return h>>>k&(1<<a)-1}function f(){var a=e(1);if(0==a)return 1;a=a<<1|e(1);if(2==a)return 2;a=a<<2|e(2);if(14>=a)return(a&3)+3;a=a<<5|e(5);if(510>=a)return(a&31)+
-6;a=a<<7|e(7);return(a&127)+37}var g=0,h,k=0,j=!1;for(a=a.tiles[a.currentTile.index].packetsIterator;g<d;){var l=a.nextPacket();if(e(1)){for(var n=l.layerNumber,p=[],m=0,r=l.codeblocks.length;m<r;m++){var q=l.codeblocks[m],s=q.precinct,t=q.cbx-s.cbxMin,y=q.cby-s.cbyMin,v=!1,x=!1;if("included"in q)v=!!e(1);else{var s=q.precinct,z,u;if("inclusionTree"in s)z=s.inclusionTree;else{u=s.cbxMax-s.cbxMin+1;var w=s.cbyMax-s.cbyMin+1;z=new ng(u,w,n);u=new og(u,w);s.inclusionTree=z;s.zeroBitPlanesTree=u}if(z.reset(t,
-y,n))for(;;)if(e(1)){if(w=!z.nextLevel()){v=x=q.included=!0;break}}else{z.incrementValue(n);break}}if(v){if(x){u=s.zeroBitPlanesTree;for(u.reset(t,y);;)if(e(1)){if(w=!u.nextLevel())break}else u.incrementValue();q.zeroBitPlanes=u.value}for(s=f();e(1);)q.Lblock++;t=Jd(s);t=e((s<1<<t?t-1:t)+q.Lblock);p.push({codeblock:q,codingpasses:s,dataLength:t})}}k=0;j&&(g++,j=!1);for(;0<p.length;)l=p.shift(),q=l.codeblock,"data"in q||(q.data=[]),q.data.push({data:b,start:c+g,end:c+g+l.dataLength,codingpasses:l.codingpasses}),
-g+=l.dataLength}else k=0,j&&(g++,j=!1)}return g},wh={LL:0,LH:1,HL:1,HH:2};lg.prototype={load:function(a){var b=new XMLHttpRequest;b.open("GET",a,!0);b.responseType="arraybuffer";b.onload=function(){var a=new Uint8Array(b.response||b.mozResponseArrayBuffer);this.parse(a);if(this.onload)this.onload()}.bind(this);b.send(null)},parse:function(a){function b(a,b,c){for(var d=0,e=0;e<c;e++)d=256*d+(a[b+e]&255);return d}for(var c=0,d=a.length;c<d;){var e=8,f=b(a,c,4),g=b(a,c+4,4),c=c+e;1==f&&(f=b(a,c,8),
-c+=8,e+=8);0==f&&(f=d-c+e);f<e&&s("JPX error: Invalid box field size");e=f-e;f=!0;switch(g){case 1785737832:f=!1;break;case 1785737827:this.parseCodestream(a,c,c+e)}f&&(c+=e)}},parseCodestream:function(a,b,c){var d={};try{for(var e=b;e<c;){var f=fb(a,e),e=e+2,g=0,h;switch(f){case 65359:d.mainHeader=!0;break;case 65497:break;case 65361:var g=fb(a,e),k={};k.Xsiz=pb(a,e+4);k.Ysiz=pb(a,e+8);k.XOsiz=pb(a,e+12);k.YOsiz=pb(a,e+16);k.XTsiz=pb(a,e+20);k.YTsiz=pb(a,e+24);k.XTOsiz=pb(a,e+28);k.YTOsiz=pb(a,e+
-32);var j=fb(a,e+36);k.Csiz=j;var l=[];h=e+38;for(var n=0;n<j;n++){var p={precision:(a[h]&127)+1,isSigned:!!(a[h]&128),XRsiz:a[h+1],YRsiz:a[h+1]},m=p,r=k;m.x0=Math.ceil(r.XOsiz/m.XRsiz);m.x1=Math.ceil(r.Xsiz/m.XRsiz);m.y0=Math.ceil(r.YOsiz/m.YRsiz);m.y1=Math.ceil(r.Ysiz/m.YRsiz);m.width=m.x1-m.x0;m.height=m.y1-m.y0;l.push(p)}d.SIZ=k;d.components=l;for(var q=d,A=l,t=q.SIZ,y=[],v=Math.ceil((t.Xsiz-t.XTOsiz)/t.XTsiz),x=Math.ceil((t.Ysiz-t.YTOsiz)/t.YTsiz),z=0;z<x;z++)for(var u=0;u<v;u++){var w={};w.tx0=
-Math.max(t.XTOsiz+u*t.XTsiz,t.XOsiz);w.ty0=Math.max(t.YTOsiz+z*t.YTsiz,t.YOsiz);w.tx1=Math.min(t.XTOsiz+(u+1)*t.XTsiz,t.Xsiz);w.ty1=Math.min(t.YTOsiz+(z+1)*t.YTsiz,t.Ysiz);w.width=w.tx1-w.tx0;w.height=w.ty1-w.ty0;w.components=[];y.push(w)}q.tiles=y;for(var T=0,B=t.Csiz;T<B;T++)for(var C=A[T],F=0,L=y.length;F<L;F++){var D={},w=y[F];D.tcx0=Math.ceil(w.tx0/C.XRsiz);D.tcy0=Math.ceil(w.ty0/C.YRsiz);D.tcx1=Math.ceil(w.tx1/C.XRsiz);D.tcy1=Math.ceil(w.ty1/C.YRsiz);D.width=D.tcx1-D.tcx0;D.height=D.tcy1-D.tcy0;
-w.components[T]=D}d.QCC=[];d.COC=[];break;case 65372:var g=fb(a,e),E={};h=e+2;var I=a[h++],H,J;switch(I&31){case 0:H=8;J=!0;break;case 1:H=16;J=!1;break;case 2:H=16;J=!0;break;default:throw"Invalid SQcd value "+I;}E.noQuantization=8==H;E.scalarExpounded=J;E.guardBits=I>>5;for(var Zb=[];h<g+e;){var na={};8==H?(na.epsilon=a[h++]>>3,na.mu=0):(na.epsilon=a[h]>>3,na.mu=(a[h]&7)<<8|a[h+1],h+=2);Zb.push(na)}E.SPqcds=Zb;d.mainHeader?d.QCD=E:(d.currentTile.QCD=E,d.currentTile.QCC=[]);break;case 65373:var g=
-fb(a,e),Nb={};h=e+2;var Q;257>d.SIZ.Csiz?Q=a[h++]:(Q=fb(a,h),h+=2);I=a[h++];switch(I&31){case 0:H=8;J=!0;break;case 1:H=16;J=!1;break;case 2:H=16;J=!0;break;default:throw"Invalid SQcd value "+I;}Nb.noQuantization=8==H;Nb.scalarExpounded=J;Nb.guardBits=I>>5;for(Zb=[];h<g+e;)na={},8==H?(na.epsilon=a[h++]>>3,na.mu=0):(na.epsilon=a[h]>>3,na.mu=(a[h]&7)<<8|a[h+1],h+=2),Zb.push(na);Nb.SPqcds=Zb;d.mainHeader?d.QCC[Q]=Nb:d.currentTile.QCC[Q]=Nb;break;case 65362:var g=fb(a,e),U={};h=e+2;var S=a[h++];U.entropyCoderWithCustomPrecincts=
-!!(S&1);U.sopMarkerUsed=!!(S&2);U.ephMarkerUsed=!!(S&4);U.progressionOrder=a[h++];U.layersCount=fb(a,h);h+=2;U.multipleComponentTransform=a[h++];U.decompositionLevelsCount=a[h++];U.xcb=(a[h++]&15)+2;U.ycb=(a[h++]&15)+2;var O=a[h++];U.selectiveArithmeticCodingBypass=!!(O&1);U.resetContextProbabilities=!!(O&2);U.terminationOnEachCodingPass=!!(O&4);U.verticalyStripe=!!(O&8);U.predictableTermination=!!(O&16);U.segmentationSymbolUsed=!!(O&32);U.transformation=a[h++];if(U.entropyCoderWithCustomPrecincts){for(var aa=
-{};h<g+e;){var ba=a[h];aa.push({PPx:ba&15,PPy:ba>>4})}U.precinctsSizes=aa}if(U.sopMarkerUsed||U.ephMarkerUsed||U.selectiveArithmeticCodingBypass||U.resetContextProbabilities||U.terminationOnEachCodingPass||U.verticalyStripe||U.predictableTermination)throw"Unsupported COD options: "+P.JSON.stringify(U);d.mainHeader?d.COD=U:(d.currentTile.COD=U,d.currentTile.COC=[]);break;case 65424:var g=fb(a,e),G={};G.index=fb(a,e+2);G.length=pb(a,e+4);G.dataEnd=G.length+e-2;G.partIndex=a[e+8];G.partsCount=a[e+9];
-d.mainHeader=!1;0==G.partIndex&&(G.COD=d.COD,G.COC=d.COC.slice(0),G.QCD=d.QCD,G.QCC=d.QCC.slice(0));d.currentTile=G;break;case 65427:G=d.currentTile;if(0==G.partIndex){for(var V=d,ja=V.SIZ.Csiz,fa=V.tiles[G.index],Y=0;Y<ja;Y++){var ha=fa.components[Y];ha.quantizationParameters=Y in V.currentTile.QCC?V.currentTile.QCC[Y]:V.currentTile.QCD;ha.codingStyleParameters=Y in V.currentTile.COC?V.currentTile.COC[Y]:V.currentTile.COD}fa.codingStyleDefaultParameters=V.currentTile.COD;for(var W=d,ma=W.tiles[W.currentTile.index],
-Aa=W.SIZ.Csiz,ra=0;ra<Aa;ra++){for(var Z=ma.components[ra],ta=Z.codingStyleParameters.decompositionLevelsCount,za=[],la=[],ka=0;ka<=ta;ka++){var Ha,pa=ka,ia=Z.codingStyleParameters,Ua={};ia.entropyCoderWithCustomPrecincts?(Ua.PPx=ia.precinctsSizes[pa].PPx,Ua.PPy=ia.precinctsSizes[pa].PPy):(Ua.PPx=15,Ua.PPy=15);Ua.xcb_=0<pa?Math.min(ia.xcb,Ua.PPx-1):Math.min(ia.xcb,Ua.PPx);Ua.ycb_=0<pa?Math.min(ia.ycb,Ua.PPy-1):Math.min(ia.ycb,Ua.PPy);Ha=Ua;var Na={},ga=1<<ta-ka;Na.trx0=Math.ceil(Z.tcx0/ga);Na.try0=
-Math.ceil(Z.tcy0/ga);Na.trx1=Math.ceil(Z.tcx1/ga);Na.try1=Math.ceil(Z.tcy1/ga);var Ia=Na,oa=1<<Ha.PPx,sa=1<<Ha.PPy,Ea=Ia.trx1>Ia.trx0?Math.ceil(Ia.trx1/oa)-Math.floor(Ia.trx0/oa):0,Fa=Ia.try1>Ia.try0?Math.ceil(Ia.try1/sa)-Math.floor(Ia.try0/sa):0;Ia.precinctParameters={precinctXOffset:Math.floor(Ia.trx0/oa)*oa,precinctYOffset:Math.floor(Ia.try0/sa)*sa,precinctWidth:oa,precinctHeight:sa,numprecinctswide:Ea,numprecinctshigh:Fa,numprecincts:Ea*Fa};za.push(Na);var M;if(0==ka)M={type:"LL"},M.tbx0=Math.ceil(Z.tcx0/
-ga),M.tby0=Math.ceil(Z.tcy0/ga),M.tbx1=Math.ceil(Z.tcx1/ga),M.tby1=Math.ceil(Z.tcy1/ga),M.resolution=Na,Xb(W,M,Ha),la.push(M),Na.subbands=[M];else{var Oa=1<<ta-ka+1,va=[];M={type:"HL"};M.tbx0=Math.ceil(Z.tcx0/Oa-0.5);M.tby0=Math.ceil(Z.tcy0/Oa);M.tbx1=Math.ceil(Z.tcx1/Oa-0.5);M.tby1=Math.ceil(Z.tcy1/Oa);M.resolution=Na;Xb(W,M,Ha);la.push(M);va.push(M);M={type:"LH"};M.tbx0=Math.ceil(Z.tcx0/Oa);M.tby0=Math.ceil(Z.tcy0/Oa-0.5);M.tbx1=Math.ceil(Z.tcx1/Oa);M.tby1=Math.ceil(Z.tcy1/Oa-0.5);M.resolution=
-Na;Xb(W,M,Ha);la.push(M);va.push(M);M={type:"HH"};M.tbx0=Math.ceil(Z.tcx0/Oa-0.5);M.tby0=Math.ceil(Z.tcy0/Oa-0.5);M.tbx1=Math.ceil(Z.tcx1/Oa-0.5);M.tby1=Math.ceil(Z.tcy1/Oa-0.5);M.resolution=Na;Xb(W,M,Ha);la.push(M);va.push(M);Na.subbands=va}}Z.resolutions=za;Z.subbands=la}var Ja=ma.codingStyleDefaultParameters.progressionOrder;switch(Ja){case 0:ma.packetsIterator=new th(W);break;case 1:ma.packetsIterator=new uh(W);break;default:throw"Unsupported progression order "+Ja;}}g=G.dataEnd-e;vh(d,a,e,g);
-break;case 65380:g=fb(a,e);break;default:throw"Unknown codestream code: "+f.toString(16);}e+=g}}catch(Ka){this.failOnCorruptedImage?s("JPX error: "+Ka):R("JPX error: "+Ka+". Trying to recover")}for(var La=d.components,Da=d.SIZ.Csiz,Ma=[],Ga=0,Za=d.tiles.length;Ga<Za;Ga++){for(var Sa=d.tiles[Ga],wa=[],xa=0;xa<Da;xa++){for(var qa=Sa.components[xa],Ca=qa.codingStyleParameters,Qa=qa.quantizationParameters,gb=Ca.decompositionLevelsCount,K=Qa.SPqcds,ua=Qa.scalarExpounded,ib=Qa.guardBits,Ta=Ca.transformation,
-ya=Ca.segmentationSymbolUsed,jb=d.components[xa].precision,ab=[],Pa=0,bb=0;bb<=gb;bb++)for(var xb=qa.resolutions[bb],N=0,kb=xb.subbands.length;N<kb;N++){var Ya,lb;ua?(Ya=K[Pa].mu,lb=K[Pa].epsilon):(Ya=K[0].mu,lb=K[0].epsilon+(0<bb?1-bb:0));for(var yb=xb.subbands[N],$a=yb.tbx1-yb.tbx0,hb=yb.tby1-yb.tby0,ub=Math.pow(2,jb+wh[yb.type]-lb)*(1+Ya/2048),Bb=ib+lb-1,da=new Float32Array($a*hb),Eb=da,Fb=yb.tbx0,Hb=yb.tby0,qb=$a,Jb=ub,sb=Bb,tb=yb.codeblocks,Ob=Ta,Pb=ya,ea=0,Mb=tb.length;ea<Mb;++ea){var Ba=tb[ea],
-ca=Ba.tbx1_-Ba.tbx0_,Wb=Ba.tby1_-Ba.tby0_;if(!(0==ca||0==Wb)&&"data"in Ba){var cb,Va;cb=new pg(ca,Wb,Ba.subbandType,Ba.zeroBitPlanes);Va=2;for(var eb=Ba.data,Qb=0,nb=0,mb=0,ob=eb.length;mb<ob;mb++)var Wa=eb[mb],Qb=Qb+(Wa.end-Wa.start),nb=nb+Wa.codingpasses;for(var Cb=new Uint8Array(Qb),Ra=0,mb=0,ob=eb.length;mb<ob;mb++){var Wa=eb[mb],Db=Wa.data.subarray(Wa.start,Wa.end);Cb.set(Db,Ra);Ra+=Db.length}var Vb=new qg(Cb,0,Qb);cb.setDecoder(Vb);for(mb=0;mb<nb;mb++){switch(Va){case 0:cb.runSignificancePropogationPass();
-break;case 1:cb.runMagnitudeRefinementPass();break;case 2:cb.runCleanupPass(),Pb&&cb.checkSegmentationSymbol()}Va=(Va+1)%3}for(var db=Ba.tbx0_-Fb+(Ba.tby0_-Hb)*qb,X=0,Gb=0;Gb<Wb;Gb++){for(Ra=0;Ra<ca;Ra++){var zb=(cb.coefficentsSign[X]?-1:1)*cb.coefficentsMagnitude[X],Lb=cb.bitsDecoded[X],rb;0==Ob||sb>Lb?(zb+=0>zb?zb-0.5:0<zb?zb+0.5:0,rb=1<<sb-Lb):rb=1;Eb[db++]=zb*rb*Jb;X++}db+=qb-ca}}}ab.push({width:$a,height:hb,items:da});Pa++}var Ta=Ca.transformation,vb=(0==Ta?new rg:new sg).calculate(ab,qa.tcx0,
-qa.tcy0);wa.push({left:qa.tcx0,top:qa.tcy0,width:vb.width,height:vb.height,items:vb.items})}if(Sa.codingStyleDefaultParameters.multipleComponentTransform)for(var wb=wa[0].items,Sb=wa[1].items,Xa=wa[2].items,$=0,Ab=wb.length;$<Ab;$++){var Tb=Sb[$],Ub=Xa[$],ec=wb[$]-(Ub+Tb>>2);Sb[$]=ec;wb[$]=Ub+ec;Xa[$]=Tb+ec}for(xa=0;xa<Da;xa++){var fc=La[xa];if(!fc.isSigned)for(var Ib=1<<fc.precision-1,Kb=wa[xa],Rb=Kb.items,$=0,Ab=Rb.length;$<Ab;$++)Rb[$]+=Ib}for(xa=0;xa<Da;xa++){for(var fc=La[xa],Ib=fc.isSigned?
-128:0,Yb=fc.precision-8,Kb=wa[xa],Rb=Kb.items,$b=new Uint8Array(Rb.length),$=0,Ab=Rb.length;$<Ab;$++){var gc=(Rb[$]>>Yb)+Ib;$b[$]=0>gc?0:255<gc?255:gc}wa[xa].items=$b}Ma.push(wa)}this.tiles=Ma;this.width=d.SIZ.Xsiz-d.SIZ.XOsiz;this.height=d.SIZ.Ysiz-d.SIZ.YOsiz;this.componentsCount=d.SIZ.Csiz}};var og,tg=function(a,b){var c=Jd(Math.max(a,b))+1;this.levels=[];for(var d=0;d<c;d++)this.levels.push({width:a,height:b,items:[]}),a=Math.ceil(a/2),b=Math.ceil(b/2)};tg.prototype={reset:function(a,b){for(var c=
-0,d=0;c<this.levels.length;){var e=this.levels[c],f=a+b*e.width;if(f in e.items){d=e.items[f];break}e.index=f;a>>=1;b>>=1;c++}c--;e=this.levels[c];e.items[e.index]=d;this.currentLevel=c;delete this.value},incrementValue:function(){var a=this.levels[this.currentLevel];a.items[a.index]++},nextLevel:function(){var a=this.currentLevel,b=this.levels[a],c=b.items[b.index];a--;if(0>a)return this.value=c,!1;this.currentLevel=a;b=this.levels[a];b.items[b.index]=c;return!0}};og=tg;var ng,ug=function(a,b,c){var d=
-Jd(Math.max(a,b))+1;this.levels=[];for(var e=0;e<d;e++){for(var f=new Uint8Array(a*b),g=0,h=f.length;g<h;g++)f[g]=c;this.levels.push({width:a,height:b,items:f});a=Math.ceil(a/2);b=Math.ceil(b/2)}};ug.prototype={reset:function(a,b,c){for(var d=0;d<this.levels.length;){var e=this.levels[d],f=a+b*e.width;e.index=f;e=e.items[f];if(255==e)break;if(e>c)return this.currentLevel=d,this.propagateValues(),!1;a>>=1;b>>=1;d++}this.currentLevel=d-1;return!0},incrementValue:function(a){var b=this.levels[this.currentLevel];
-b.items[b.index]=a+1;this.propagateValues()},propagateValues:function(){for(var a=this.currentLevel,b=this.levels[a],c=b.items[b.index];0<=--a;)b=this.levels[a],b.items[b.index]=c},nextLevel:function(){var a=this.currentLevel,b=this.levels[a],c=b.items[b.index];b.items[b.index]=255;a--;if(0>a)return!1;this.currentLevel=a;b=this.levels[a];b.items[b.index]=c;return!0}};ng=ug;var qg,vg=function(a,b,c){this.data=a;this.bp=b;this.dataEnd=c;this.chigh=a[b];this.clow=0;this.byteIn();this.chigh=this.chigh<<
-7&65535|this.clow>>9&127;this.clow=this.clow<<7&65535;this.ct-=7;this.a=32768},Kd=[{qe:22017,nmps:1,nlps:1,switchFlag:1},{qe:13313,nmps:2,nlps:6,switchFlag:0},{qe:6145,nmps:3,nlps:9,switchFlag:0},{qe:2753,nmps:4,nlps:12,switchFlag:0},{qe:1313,nmps:5,nlps:29,switchFlag:0},{qe:545,nmps:38,nlps:33,switchFlag:0},{qe:22017,nmps:7,nlps:6,switchFlag:1},{qe:21505,nmps:8,nlps:14,switchFlag:0},{qe:18433,nmps:9,nlps:14,switchFlag:0},{qe:14337,nmps:10,nlps:14,switchFlag:0},{qe:12289,nmps:11,nlps:17,switchFlag:0},
-{qe:9217,nmps:12,nlps:18,switchFlag:0},{qe:7169,nmps:13,nlps:20,switchFlag:0},{qe:5633,nmps:29,nlps:21,switchFlag:0},{qe:22017,nmps:15,nlps:14,switchFlag:1},{qe:21505,nmps:16,nlps:14,switchFlag:0},{qe:20737,nmps:17,nlps:15,switchFlag:0},{qe:18433,nmps:18,nlps:16,switchFlag:0},{qe:14337,nmps:19,nlps:17,switchFlag:0},{qe:13313,nmps:20,nlps:18,switchFlag:0},{qe:12289,nmps:21,nlps:19,switchFlag:0},{qe:10241,nmps:22,nlps:19,switchFlag:0},{qe:9217,nmps:23,nlps:20,switchFlag:0},{qe:8705,nmps:24,nlps:21,
-switchFlag:0},{qe:7169,nmps:25,nlps:22,switchFlag:0},{qe:6145,nmps:26,nlps:23,switchFlag:0},{qe:5633,nmps:27,nlps:24,switchFlag:0},{qe:5121,nmps:28,nlps:25,switchFlag:0},{qe:4609,nmps:29,nlps:26,switchFlag:0},{qe:4353,nmps:30,nlps:27,switchFlag:0},{qe:2753,nmps:31,nlps:28,switchFlag:0},{qe:2497,nmps:32,nlps:29,switchFlag:0},{qe:2209,nmps:33,nlps:30,switchFlag:0},{qe:1313,nmps:34,nlps:31,switchFlag:0},{qe:1089,nmps:35,nlps:32,switchFlag:0},{qe:673,nmps:36,nlps:33,switchFlag:0},{qe:545,nmps:37,nlps:34,
-switchFlag:0},{qe:321,nmps:38,nlps:35,switchFlag:0},{qe:273,nmps:39,nlps:36,switchFlag:0},{qe:133,nmps:40,nlps:37,switchFlag:0},{qe:73,nmps:41,nlps:38,switchFlag:0},{qe:37,nmps:42,nlps:39,switchFlag:0},{qe:21,nmps:43,nlps:40,switchFlag:0},{qe:9,nmps:44,nlps:41,switchFlag:0},{qe:5,nmps:45,nlps:42,switchFlag:0},{qe:1,nmps:45,nlps:43,switchFlag:0},{qe:22017,nmps:46,nlps:46,switchFlag:0}];vg.prototype={byteIn:function(){var a=this.data,b=this.bp;255==a[b]?143<a[b+1]?(this.clow+=65280,this.ct=8):(b++,
-this.clow+=a[b]<<9,this.ct=7,this.bp=b):(b++,this.clow+=b<this.dataEnd?a[b]<<8:65280,this.ct=8,this.bp=b);65535<this.clow&&(this.chigh+=this.clow>>16,this.clow&=65535)},readBit:function(a){var b=Kd[a.index].qe;this.a-=b;if(this.chigh<b)return a=this.exchangeLps(a),this.renormD(),a;this.chigh-=b;return 0==(this.a&32768)?(a=this.exchangeMps(a),this.renormD(),a):a.mps},renormD:function(){do 0==this.ct&&this.byteIn(),this.a<<=1,this.chigh=this.chigh<<1&65535|this.clow>>15&1,this.clow=this.clow<<1&65535,
-this.ct--;while(0==(this.a&32768))},exchangeMps:function(a){var b,c=Kd[a.index];this.a<c.qe?(b=1-a.mps,1==c.switchFlag&&(a.mps=1-a.mps),a.index=c.nlps):(b=a.mps,a.index=c.nmps);return b},exchangeLps:function(a){var b,c=Kd[a.index];this.a<c.qe?(this.a=c.qe,b=a.mps,a.index=c.nmps):(this.a=c.qe,b=1-a.mps,1==c.switchFlag&&(a.mps=1-a.mps),a.index=c.nlps);return b}};qg=vg;var pg,wg=function(a,b,c,d){this.width=a;this.height=b;this.contextLabelTable="HH"==c?xh:"HL"==c?yh:zh;a*=b;this.neighborsSignificance=
-new Uint8Array(a);this.coefficentsSign=new Uint8Array(a);this.coefficentsMagnitude=new Uint32Array(a);this.processingFlags=new Uint8Array(a);a=new Uint8Array(this.width*this.height);b=0;for(c=a.length;b<c;b++)a[b]=d;this.bitsDecoded=a;this.reset()},zh=new Uint8Array([0,5,8,0,3,7,8,0,4,7,8,0,0,0,0,0,1,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8]),yh=new Uint8Array([0,3,4,0,5,7,7,0,8,8,8,0,0,0,0,0,1,3,4,0,6,7,7,0,8,8,8,0,0,0,0,
-0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8]),xh=new Uint8Array([0,1,2,0,1,2,2,0,2,2,2,0,0,0,0,0,3,4,5,0,4,5,5,0,5,5,5,0,0,0,0,0,6,7,7,0,7,7,7,0,7,7,7,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8]),Ah=[{contextLabel:13,xorBit:0},{contextLabel:12,xorBit:0},{contextLabel:11,xorBit:0},{contextLabel:10,xorBit:0},{contextLabel:9,xorBit:0},{contextLabel:10,xorBit:1},{contextLabel:11,xorBit:1},{contextLabel:12,xorBit:1},{contextLabel:13,xorBit:1}];
-wg.prototype={setDecoder:function(a){this.decoder=a},reset:function(){this.uniformContext={index:46,mps:0};this.runLengthContext={index:3,mps:0};this.contexts=[];this.contexts.push({index:4,mps:0});for(var a=1;16>=a;a++)this.contexts.push({index:0,mps:0})},setNeighborsSignificance:function(a,b){var c=this.neighborsSignificance,d=this.width,e=this.height,f=a*d+b;0<a&&(0<b&&(c[f-d-1]+=16),b+1<d&&(c[f-d+1]+=16),c[f-d]+=4);a+1<e&&(0<b&&(c[f+d-1]+=16),b+1<d&&(c[f+d+1]+=16),c[f+d]+=4);0<b&&(c[f-1]+=1);
-b+1<d&&(c[f+1]+=1);c[f]|=128},runSignificancePropogationPass:function(){for(var a=this.decoder,b=this.width,c=this.height,d=this.coefficentsMagnitude,e=this.coefficentsSign,f=this.neighborsSignificance,g=this.processingFlags,h=this.contexts,k=this.contextLabelTable,j=this.bitsDecoded,l=0,n=b*c;l<n;l++)g[l]&=-2;for(l=0;l<c;l+=4)for(n=0;n<b;n++)for(var p=l*b+n,m=0;4>m;m++,p+=b){var r=l+m;if(r>=c)break;if(!d[p]&&f[p]){if(a.readBit(h[k[f[p]]])){var q=this.decodeSignBit(r,n);e[p]=q;d[p]=1;this.setNeighborsSignificance(r,
-n);g[p]|=2}j[p]++;g[p]|=1}}},decodeSignBit:function(a,b){var c=this.width,d=a*c+b,e=this.coefficentsMagnitude,f=this.coefficentsSign,c=Ah[3*(1-(b+1<c&&e[d+1]?f[d+1]?0<b&&e[d-1]?!f[d-1]?0:-1:-1:0<b&&e[d-1]?!f[d-1]?1:0:1:0<b&&e[d-1]?!f[d-1]?1:-1:0))+(1-(a+1<this.height&&e[d+c]?f[d+c]?0<a&&e[d-c]?!f[d-c]?0:-1:-1:0<a&&e[d-c]?!f[d-c]?1:0:1:0<a&&e[d-c]?!f[d-c]?1:-1:0))];return this.decoder.readBit(this.contexts[c.contextLabel])^c.xorBit},runMagnitudeRefinementPass:function(){for(var a=this.decoder,b=this.width,
-c=this.height,d=this.coefficentsMagnitude,e=this.neighborsSignificance,f=this.contexts,g=this.bitsDecoded,h=this.processingFlags,k=0;k<c;k+=4)for(var j=0;j<b;j++)for(var l=0;4>l;l++){var n=k+l;if(n>=c)break;var p=n*b+j;if(d[p]&&0==(h[p]&1)){var m=16;0!=(h[p]&2)&&(h[n*b+j]^=2,n=e[p],m=1<=(n&3)+(n>>2&3)+(n>>4&7)?15:14);n=a.readBit(f[m]);d[p]=d[p]<<1|n;g[p]++;h[p]|=1}}},runCleanupPass:function(){for(var a=this.decoder,b=this.width,c=this.height,d=this.neighborsSignificance,e=this.coefficentsMagnitude,
-f=this.coefficentsSign,g=this.contexts,h=this.contextLabelTable,k=this.bitsDecoded,j=this.processingFlags,l=2*b,n=3*b,p=0;p<c;p+=4)for(var m=0;m<b;m++){var r=p*b+m,q=0,s=r,t,y;if(p+3<c&&0==j[r]&&0==j[r+b]&&0==j[r+l]&&0==j[r+n]&&0==d[r]&&0==d[r+b]&&0==d[r+l]&&0==d[r+n]){t=this.runLengthContext;if(!a.readBit(t)){k[r]++;k[r+b]++;k[r+l]++;k[r+n]++;continue}t=this.uniformContext;q=a.readBit(t)<<1|a.readBit(t);y=p+q;s+=q*b;t=this.decodeSignBit(y,m);f[s]=t;e[s]=1;this.setNeighborsSignificance(y,m);j[s]|=
-2;s=r;for(r=p;r<=y;r++,s+=b)k[s]++;q++}for(;4>q;q++,s+=b){y=p+q;if(y>=c)break;e[s]||0!=(j[s]&1)||(t=g[h[d[s]]],1==a.readBit(t)&&(t=this.decodeSignBit(y,m),f[s]=t,e[s]=1,this.setNeighborsSignificance(y,m),j[s]|=2),k[s]++)}}},checkSegmentationSymbol:function(){var a=this.decoder,b=this.uniformContext;if(10!=(a.readBit(b)<<3|a.readBit(b)<<2|a.readBit(b)<<1|a.readBit(b)))throw"Invalid segmentation symbol";}};pg=wg;var Ac=function(){};Ac.prototype.calculate=function(a,b,c){for(var d=a[0],e=1,f=a.length,
-g=1;e<f;e+=3,g++)d=this.iterate(d,a[e],a[e+1],a[e+2],b,c);return d};Ac.prototype.iterate=function(a,b,c,d,e,f){var g=a.width,h=a.height;a=a.items;var k=b.width,j=b.height,l=b.items,n=c.width,p=c.height,m=c.items,r=d.width,q=d.height,s=d.items;d=g+k;c=h+p;b=new Float32Array(d*c);for(var t=0,y=h;t<y;t++)for(var h=t*g,v=2*t*d,x=0,z=g;x<z;x++,h++,v+=2)b[v]=a[h];t=0;for(y=j;t<y;t++){h=t*k;v=2*t*d+1;x=0;for(z=k;x<z;x++,h++,v+=2)b[v]=l[h]}t=0;for(y=p;t<y;t++){h=t*n;v=(2*t+1)*d;x=0;for(z=n;x<z;x++,h++,v+=
-2)b[v]=m[h]}t=0;for(y=q;t<y;t++){h=t*r;v=(2*t+1)*d+1;x=0;for(z=r;x<z;x++,h++,v+=2)b[v]=s[h]}a=new Float32Array(Math.max(d,c)+8);g=new Float32Array(a);a=new Float32Array(a);for(k=0;k<c;k++)if(1==d)0!=e%1&&(b[k*d]/=2);else{h=k*d;v=4;for(j=0;j<d;j++,h++,v++)g[v]=b[h];h=3;v=5;l=4+d-2;n=4+d;g[h--]=g[v++];g[n++]=g[l--];g[h--]=g[v++];g[n++]=g[l--];g[h--]=g[v++];g[n++]=g[l--];g[h--]=g[v++];g[n++]=g[l--];this.filter(g,4,d,e,a);h=k*d;v=4;for(j=0;j<d;j++,h++,v++)b[h]=a[v]}for(j=0;j<d;j++)if(1==c)0!=f%1&&(b[j]/=
-2);else{h=j;v=4;for(k=0;k<c;k++,h+=d,v++)g[v]=b[h];h=3;v=5;l=4+c-2;n=4+c;g[h--]=g[v++];g[n++]=g[l--];g[h--]=g[v++];g[n++]=g[l--];g[h--]=g[v++];g[n++]=g[l--];g[h--]=g[v++];g[n++]=g[l--];this.filter(g,4,c,f,a);h=j;v=4;for(k=0;k<c;k++,h+=d,v++)b[h]=a[v]}return{width:d,height:c,items:b}};var rg,Ld=function(){};Ld.prototype=Object.create(Ac.prototype);Ld.prototype.filter=function(a,b,c,d,e){var f=Math.floor(d/2);c=Math.floor((d+c)/2);b-=d%1;d=b-2;for(var g=f-1,h=c+2;g<h;g++,d+=2)e[d]=1.230174104914001*
-a[d];d=b-3;g=f-2;for(h=c+2;g<h;g++,d+=2)e[d]=0.8128930661159609*a[d];d=b-2;g=f-1;for(h=c+2;g<h;g++,d+=2)e[d]-=0.443506852043971*(e[d-1]+e[d+1]);d=b-1;g=f-1;for(h=c+1;g<h;g++,d+=2)e[d]-=0.882911075530934*(e[d-1]+e[d+1]);d=b;g=f;for(h=c+1;g<h;g++,d+=2)e[d]-=-0.052980118572961*(e[d-1]+e[d+1]);d=b+1;g=f;for(h=c;g<h;g++,d+=2)e[d]-=-1.586134342059924*(e[d-1]+e[d+1])};rg=Ld;var sg,Md=function(){};Md.prototype=Object.create(Ac.prototype);Md.prototype.filter=function(a,b,c,d,e){var f=Math.floor(d/2);c=Math.floor((d+
-c)/2);b-=d%1;d=f;for(var g=c+1,h=b;d<g;d++,h+=2)e[h]=a[h]-Math.floor((a[h-1]+a[h+1]+2)/4);d=f;g=c;for(h=b+1;d<g;d++,h+=2)e[h]=a[h]+Math.floor((e[h-1]+e[h+1])/2)};sg=Md;bg=lg;var cg,xg=function(){},Bc=function(a,b,c){this.data=a;this.start=b;this.end=c},ja=function(a,b,c){a=a.getContexts(b);for(var d=b=1,e=0,f,g=32,h=4436;d;){var k=a[b];k||(a[b]=k={index:0,mps:0});k=c.readBit(k);b=256>b?b<<1|k:(b<<1|k)&511|256;switch(d){case 1:f=!!k;break;case 2:if(k)break;d=7;g=2;h=0;break;case 3:if(k)break;d=7;h=
-g=4;break;case 4:if(k)break;d=7;g=6;h=20;break;case 5:if(k)break;d=7;g=8;h=84;break;case 6:if(k)break;d=7;g=12;h=340;break;default:e=2*e+k;0==--g&&(d=0);continue}d++}e+=h;return!f?e:0<e?-e:null},yg=function(a,b,c){a=a.getContexts("IAID");for(var d=1,e=0;e<c;e++){var f=a[d];f||(a[d]=f={index:0,mps:0});f=b.readBit(f);d=2*d+f}return 31>c?d&(1<<c)-1:d-Math.pow(2,c)},zg=function(a){for(var b=1,c=0;a>b;)b<<=1,c++;return c},fa=function(a,b){var c=a[b]<<24|a[b+1]<<16|a[b+2]<<8|a[b+3];return c&2147483648?
-c+4294967296:c},Ag=function(a,b,c,d,e,f,g,h){a&&s("JBIG2 error: MMR encoding is not supported");a=!!f;var k=Bh[d].concat(g);g=k.length;for(var j=new Int32Array(g),l=new Int32Array(g),n=0;n<g;n++)j[n]=k[n].x,l[n]=k[n].y;d=Ch[d];var k=[],p=h.decoder;h=h.contextCache.getContexts("GB");for(var m=0,r=0;r<c;r++)if(e&&((n=h[d])||(h[d]=n={index:0,mps:0}),n=p.readBit(n),m^=n),m)k.push(k[k.length-1]);else{var q=new Uint8Array(b);k.push(q);for(var A=0;A<b;A++)if(a&&f[r][A])q[A]=0;else{for(var t=0,n=0;n<g;n++)var y=
-r+l[n],v=A+j[n],t=0>y||0>v||v>=b?t<<1:t<<1|k[y][v];(n=h[t])||(h[t]=n={index:0,mps:0});n=p.readBit(n);q[A]=n}}return k},Cg=function(a,b,c,d,e,f,g,h,k){var j=Bg[c].coding;0==c&&(j=j.concat([h[0]]));for(var l=j.length,n=new Int32Array(l),p=new Int32Array(l),m=0;m<l;m++)n[m]=j[m].x,p[m]=j[m].y;var r=Bg[c].reference;0==c&&(r=r.concat([h[1]]));h=r.length;for(var j=new Int32Array(h),q=new Int32Array(h),m=0;m<h;m++)j[m]=r[m].x,q[m]=r[m].y;var r=d[0].length,A=d.length;c=Dh[c];var t=[],y=k.decoder;k=k.contextCache.getContexts("GR");
-for(var v=0,x=0;x<b;x++){g&&((m=k[c])||(k[c]=m={index:0,mps:0}),m=y.readBit(m),v^=m);var z=new Uint8Array(a);t.push(z);for(var u=0;u<a;u++){v&&s("JBIG2 error: prediction is not supported");for(var w=0,m=0;m<l;m++)var T=x+p[m],C=u+n[m],w=0>T||0>C||C>=a?w<<1:w<<1|t[T][C];for(m=0;m<h;m++)T=x+q[m]+f,C=u+j[m]+e,w=0>T||T>=A||0>C||C>=r?w<<1:w<<1|d[T][C];(m=k[w])||(k[w]=m={index:0,mps:0});m=y.readBit(m);z[u]=m}}return t},Dg=function(a,b){return{width:fa(a,b),height:fa(a,b+4),x:fa(a,b+8),y:fa(a,b+12),combinationOperator:a[b+
-16]&7}},Eg=function(){},Fg=function(){},Gg=function(a,b,c){this.data=a;this.bp=b;this.dataEnd=c;this.chigh=a[b];this.clow=0;this.byteIn();this.chigh=this.chigh<<7&65535|this.clow>>9&127;this.clow=this.clow<<7&65535;this.ct-=7;this.a=32768},Nd=[{qe:22017,nmps:1,nlps:1,switchFlag:1},{qe:13313,nmps:2,nlps:6,switchFlag:0},{qe:6145,nmps:3,nlps:9,switchFlag:0},{qe:2753,nmps:4,nlps:12,switchFlag:0},{qe:1313,nmps:5,nlps:29,switchFlag:0},{qe:545,nmps:38,nlps:33,switchFlag:0},{qe:22017,nmps:7,nlps:6,switchFlag:1},
-{qe:21505,nmps:8,nlps:14,switchFlag:0},{qe:18433,nmps:9,nlps:14,switchFlag:0},{qe:14337,nmps:10,nlps:14,switchFlag:0},{qe:12289,nmps:11,nlps:17,switchFlag:0},{qe:9217,nmps:12,nlps:18,switchFlag:0},{qe:7169,nmps:13,nlps:20,switchFlag:0},{qe:5633,nmps:29,nlps:21,switchFlag:0},{qe:22017,nmps:15,nlps:14,switchFlag:1},{qe:21505,nmps:16,nlps:14,switchFlag:0},{qe:20737,nmps:17,nlps:15,switchFlag:0},{qe:18433,nmps:18,nlps:16,switchFlag:0},{qe:14337,nmps:19,nlps:17,switchFlag:0},{qe:13313,nmps:20,nlps:18,
-switchFlag:0},{qe:12289,nmps:21,nlps:19,switchFlag:0},{qe:10241,nmps:22,nlps:19,switchFlag:0},{qe:9217,nmps:23,nlps:20,switchFlag:0},{qe:8705,nmps:24,nlps:21,switchFlag:0},{qe:7169,nmps:25,nlps:22,switchFlag:0},{qe:6145,nmps:26,nlps:23,switchFlag:0},{qe:5633,nmps:27,nlps:24,switchFlag:0},{qe:5121,nmps:28,nlps:25,switchFlag:0},{qe:4609,nmps:29,nlps:26,switchFlag:0},{qe:4353,nmps:30,nlps:27,switchFlag:0},{qe:2753,nmps:31,nlps:28,switchFlag:0},{qe:2497,nmps:32,nlps:29,switchFlag:0},{qe:2209,nmps:33,
-nlps:30,switchFlag:0},{qe:1313,nmps:34,nlps:31,switchFlag:0},{qe:1089,nmps:35,nlps:32,switchFlag:0},{qe:673,nmps:36,nlps:33,switchFlag:0},{qe:545,nmps:37,nlps:34,switchFlag:0},{qe:321,nmps:38,nlps:35,switchFlag:0},{qe:273,nmps:39,nlps:36,switchFlag:0},{qe:133,nmps:40,nlps:37,switchFlag:0},{qe:73,nmps:41,nlps:38,switchFlag:0},{qe:37,nmps:42,nlps:39,switchFlag:0},{qe:21,nmps:43,nlps:40,switchFlag:0},{qe:9,nmps:44,nlps:41,switchFlag:0},{qe:5,nmps:45,nlps:42,switchFlag:0},{qe:1,nmps:45,nlps:43,switchFlag:0},
-{qe:22017,nmps:46,nlps:46,switchFlag:0}];Gg.prototype={byteIn:function(){var a=this.data,b=this.bp;255==a[b]?143<a[b+1]?(this.clow+=65280,this.ct=8):(b++,this.clow+=a[b]<<9,this.ct=7,this.bp=b):(b++,this.clow+=b<this.dataEnd?a[b]<<8:65280,this.ct=8,this.bp=b);65535<this.clow&&(this.chigh+=this.clow>>16,this.clow&=65535)},readBit:function(a){var b=Nd[a.index].qe;this.a-=b;if(this.chigh<b)return a=this.exchangeLps(a),this.renormD(),a;this.chigh-=b;return 0==(this.a&32768)?(a=this.exchangeMps(a),this.renormD(),
-a):a.mps},renormD:function(){do 0==this.ct&&this.byteIn(),this.a<<=1,this.chigh=this.chigh<<1&65535|this.clow>>15&1,this.clow=this.clow<<1&65535,this.ct--;while(0==(this.a&32768))},exchangeMps:function(a){var b,c=Nd[a.index];this.a<c.qe?(b=1-a.mps,1==c.switchFlag&&(a.mps=1-a.mps),a.index=c.nlps):(b=a.mps,a.index=c.nmps);return b},exchangeLps:function(a){var b,c=Nd[a.index];this.a<c.qe?(this.a=c.qe,b=a.mps,a.index=c.nmps):(this.a=c.qe,b=1-a.mps,1==c.switchFlag&&(a.mps=1-a.mps),a.index=c.nlps);return b}};
-xg.prototype={getContexts:function(a){return a in this?this[a]:this[a]=[]}};Bc.prototype={get decoder(){var a=new Gg(this.data,this.start,this.end);return O(this,"decoder",a)},get contextCache(){var a=new xg;return O(this,"contextCache",a)}};var Hg=["SymbolDictionary",null,null,null,"IntermediateTextRegion",null,"ImmediateTextRegion","ImmediateLosslessTextRegion",null,null,null,null,null,null,null,null,"patternDictionary",null,null,null,"IntermediateHalftoneRegion",null,"ImmediateHalftoneRegion",
-"ImmediateLosslessHalftoneRegion",null,null,null,null,null,null,null,null,null,null,null,null,"IntermediateGenericRegion",null,"ImmediateGenericRegion","ImmediateLosslessGenericRegion","IntermediateGenericRefinementRegion",null,"ImmediateGenericRefinementRegion","ImmediateLosslessGenericRefinementRegion",null,null,null,null,"PageInformation","EndOfPage","EndOfStripe","EndOfFile","Profiles","Tables",null,null,null,null,null,null,null,null,"Extension"],Bh=[[{x:-1,y:-2},{x:0,y:-2},{x:1,y:-2},{x:-2,y:-1},
-{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:2,y:-1},{x:-4,y:0},{x:-3,y:0},{x:-2,y:0},{x:-1,y:0}],[{x:-1,y:-2},{x:0,y:-2},{x:1,y:-2},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:2,y:-1},{x:-3,y:0},{x:-2,y:0},{x:-1,y:0}],[{x:-1,y:-2},{x:0,y:-2},{x:1,y:-2},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:-2,y:0},{x:-1,y:0}],[{x:-3,y:-1},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:-4,y:0},{x:-3,y:0},{x:-2,y:0},{x:-1,y:0}]],Bg=[{coding:[{x:0,y:-1},{x:1,y:-1},{x:-1,y:0}],reference:[{x:0,y:-1},{x:1,y:-1},
-{x:-1,y:0},{x:0,y:0},{x:1,y:0},{x:-1,y:1},{x:0,y:1},{x:1,y:1}]},{coding:[{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:-1,y:0}],reference:[{x:0,y:-1},{x:-1,y:0},{x:0,y:0},{x:1,y:0},{x:0,y:1},{x:1,y:1}]}],Ch=[7379,1946,227,395],Dh=[32,8];Eg.prototype={onPageInformation:function(a){this.currentPageInfo=a;var b=new Uint8Array((a.width+7>>3)*a.height);a=a.defaultPixelValue?255:0;for(var c=0,d=b.length;c<d;c++)b[c]=a;this.buffer=b},drawBitmap:function(a,b){for(var c=this.currentPageInfo,d=a.width,e=a.height,f=
-c.width+7>>3,c=c.combinationOperatorOverride?a.combinationOperator:c.combinationOperator,g=this.buffer,h=0;h<e;h++){var k=128>>(a.x&7),j=(h+a.y)*f+(a.x>>3);switch(c){case 0:for(var l=0;l<d;l++)g[j]|=b[h][l]?k:0,k>>=1,k||(k=128,j++);break;case 2:for(l=0;l<d;l++)g[j]^=b[h][l]?k:0,k>>=1,k||(k=128,j++);break;default:s("JBIG2 error: operator "+c+" is not supported")}}},onImmediateGenericRegion:function(a,b,c,d){var e=a.info;b=new Bc(b,c,d);a=Ag(a.mmr,e.width,e.height,a.template,a.prediction,null,a.at,
-b);this.drawBitmap(e,a)},onImmediateLosslessGenericRegion:function(){this.onImmediateGenericRegion.apply(this,arguments)},onSymbolDictionary:function(a,b,c,d,e,f){a.huffman&&s("JBIG2 error: huffman is not supported");var g=this.symbols;g||(this.symbols=g={});for(var h=[],k=0,j=c.length;k<j;k++)h=h.concat(g[c[k]]);f=new Bc(d,e,f);k=a.refinement;c=h;var h=a.numberOfNewSymbols,j=a.template,l=a.at,n=a.refinementTemplate,p=a.refinementAt;a.huffman&&s("JBIG2 error: huffman is not supported");a=[];var m=
-0,r=zg(c.length+h);d=f.decoder;for(e=f.contextCache;a.length<h;)for(var q=ja(e,"IADH",d),m=m+q,q=0;;){var A=ja(e,"IADW",d);if(null==A)break;q+=A;if(k){1<ja(e,"IAAI",d)&&s("JBIG2 error: number of instances > 1 is not supported");var A=yg(e,d,r),t=ja(e,"IARDX",d),y=ja(e,"IARDY",d),A=Cg(q,m,n,A<c.length?c[A]:a[A-c.length],t,y,!1,p,f)}else A=Ag(!1,q,m,j,!1,null,l,f);a.push(A)}f=[];k=[];j=!1;for(l=c.length+h;k.length<l;){for(n=ja(e,"IAEX",d);n--;)k.push(j);j=!j}d=0;for(e=c.length;d<e;d++)k[d]&&f.push(c[d]);
-for(c=0;c<h;d++,c++)k[d]&&f.push(a[c]);g[b]=f},onImmediateTextRegion:function(a,b,c,d,e){for(var f=a.info,g=this.symbols,h=[],k=0,j=b.length;k<j;k++)h=h.concat(g[b[k]]);b=zg(h.length);c=new Bc(c,d,e);d=a.refinement;var l=f.width,n=f.height,p=a.defaultPixelValue;e=a.numberOfSymbolInstances;var g=a.stripSize,m=a.transposed,k=a.dsOffset,j=a.referenceCorner,r=a.combinationOperator,q=a.refinementTemplate,A=a.refinementAt;a.huffman&&s("JBIG2 error: huffman is not supported");a=[];for(var t=0;t<n;t++){var y=
-new Uint8Array(l);if(p)for(var v=0;v<l;v++)y[v]=p;a.push(y)}l=c.decoder;n=c.contextCache;m&&s("JBIG2 error: transposed is not supported");m=-ja(n,"IADT",l);for(t=p=0;t<e;){v=ja(n,"IADT",l);m+=v;v=ja(n,"IAFS",l);v=p+=v;do{var x=1==g?0:ja(n,"IAIT",l),y=g*m+x,x=yg(n,l,b),z=d&&ja(n,"IARI",l),x=h[x],u=x[0].length,w=x.length;if(z)var z=ja(n,"IARDW",l),T=ja(n,"IARDH",l),C=ja(n,"IARDX",l),B=ja(n,"IARDY",l),u=u+z,w=w+T,x=Cg(u,w,q,x,(z>>1)+C,(T>>1)+B,!1,A,c);z=y-(j&1?0:w);T=v-(j&2?u:0);for(C=0;C<w;C++)if(y=
-a[z+C])switch(B=x[C],r){case 0:for(var D=0;D<u;D++)y[T+D]|=B[D];break;case 2:for(D=0;D<u;D++)y[T+D]^=B[D];break;default:s("JBIG2 error: operator "+r+" is not supported")}v+=u-1;t++;x=ja(n,"IADS",l);if(null==x)break;v+=x+k}while(1)}this.drawBitmap(f,a)},onImmediateLosslessTextRegion:function(){this.onImmediateTextRegion.apply(this,arguments)}};Fg.prototype={parseChunks:function(a){for(var b=new Eg,c=0,d=a.length;c<d;c++){for(var e=a[c],f={},g=e.data,h=e.end,k=[],j=e.start;j<h;){var e=g,l=j,j={};j.number=
-fa(e,l);var n=e[l+4],p=n&63;Hg[p]||s("JBIG2 error: invalid segment type: "+p);j.type=p;j.typeName=Hg[p];j.deferredNonRetain=!!(n&128);var n=!!(n&64),m=e[l+5],p=m>>5&7,r=[m&31],l=l+6;if(7==m){p=(e[l-1]<<24|e[l-1+1]<<16|e[l-1+2]<<8|e[l-1+3])&536870911;l+=3;m=p+7>>3;for(r[0]=e[l++];0<--m;)r.push(e[l++])}else(5==m||6==m)&&s("JBIG2 error: invalid referred-to flags");j.retainBits=r;for(var r=256>=j.number?1:65536>=j.number?2:4,m=[],q=0;q<p;q++){var A=1==r?e[l]:2==r?e[l]<<8|e[l+1]:fa(e,l);m.push(A);l+=r}j.referredTo=
-m;n?(j.pageAssociation=fa(e,l),l+=4):j.pageAssociation=e[l++];j.length=fa(e,l);4294967295==j.length&&s("JBIG2 error: unknown segment length is not supported");l+=4;j.headerEnd=l;e=j;j=e.headerEnd;n={header:e,data:g};f.randomAccess||(n.start=j,j+=e.length,n.end=j);k.push(n);if(51==e.type)break}if(f.randomAccess){f=0;for(g=k.length;f<g;f++)k[f].start=j,j+=k[f].header.length,k[f].end=j}f=b;g=0;for(h=k.length;g<h;g++){l=k[g];e=f;j=l.header;n=l.data;p=l.start;l=l.end;r=void 0;switch(j.type){case 0:q={};
-r=n[p]<<8|n[p+1];q.huffman=!!(r&1);q.refinement=!!(r&2);q.huffmanDHSelector=r>>2&3;q.huffmanDWSelector=r>>4&3;q.bitmapSizeSelector=r>>6&1;q.aggregationInstancesSelector=r>>7&1;q.bitmapCodingContextUsed=!!(r&256);q.bitmapCodingContextRetained=!!(r&512);q.template=r>>10&3;q.refinementTemplate=r>>12&1;p+=2;if(!q.huffman){A=0==q.template?4:1;r=[];for(m=0;m<A;m++)r.push({x:n[p]<<24>>24,y:n[p+1]<<24>>24}),p+=2;q.at=r}if(q.refinement&&!q.refinementTemplate){r=[];for(m=0;2>m;m++)r.push({x:n[p]<<24>>24,y:n[p+
-1]<<24>>24}),p+=2;q.refinementAt=r}q.numberOfExportedSymbols=fa(n,p);p+=4;q.numberOfNewSymbols=fa(n,p);p+=4;r=[q,j.number,j.referredTo,n,p,l];break;case 6:case 7:q={};q.info=Dg(n,p);p+=17;r=n[p]<<8|n[p+1];p+=2;q.huffman=!!(r&1);q.refinement=!!(r&2);q.stripSize=1<<(r>>2&3);q.referenceCorner=r>>4&3;q.transposed=!!(r&64);q.combinationOperator=r>>7&3;q.defaultPixelValue=r>>9&1;q.dsOffset=r>>10&31;q.refinementTemplate=r>>15&1;q.huffman&&(r=n[p]<<8|n[p+1],p+=2,q.huffmanFS=r&3,q.huffmanDS=r>>2&3,q.huffmanDT=
-r>>4&3,q.huffmanRefinementDW=r>>6&3,q.huffmanRefinementDH=r>>8&3,q.huffmanRefinementDX=r>>10&3,q.huffmanRefinementDY=r>>12&3,q.huffmanRefinementSizeSelector=!!(r&14));if(q.refinement&&!q.refinementTemplate){r=[];for(m=0;2>m;m++)r.push({x:n[p]<<24>>24,y:n[p+1]<<24>>24}),p+=2;q.refinementAt=r}q.numberOfSymbolInstances=fa(n,p);p+=4;q.huffman&&s("JBIG2 error: huffman is not supported");r=[q,j.referredTo,n,p,l];break;case 38:case 39:q={};q.info=Dg(n,p);p+=17;r=n[p++];q.mmr=!!(r&1);q.template=r>>1&3;q.prediction=
-!!(r&8);if(!q.mmr){A=0==q.template?4:1;r=[];for(m=0;m<A;m++)r.push({x:n[p]<<24>>24,y:n[p+1]<<24>>24}),p+=2;q.at=r}r=[q,n,p,l];break;case 48:l={width:fa(n,p),height:fa(n,p+4),resolutionX:fa(n,p+8),resolutionY:fa(n,p+12)};4294967295==l.height&&delete l.height;n=n[p+16];l.lossless=!!(n&1);l.refinement=!!(n&2);l.defaultPixelValue=n>>2&1;l.combinationOperator=n>>3&3;l.requiresBuffer=!!(n&32);l.combinationOperatorOverride=!!(n&64);r=[l];break;case 49:break;case 50:break;case 51:break;default:s("JBIG2 error: segment type "+
-j.typeName+"("+j.type+") is not implemented")}j="on"+j.typeName;j in e&&e[j].apply(e,r)}}return b.buffer}};cg=Fg;var Ig=function(a,b,c){for(c-=1;b<c;++b,--c){var d=a[b];a[b]=a[c];a[c]=d}},Od=function(a,b){this.str=a;this.ltr=b},Eh="BN BN BN BN BN BN BN BN BN S B S WS B BN BN BN BN BN BN BN BN BN BN BN BN BN BN B B B S WS ON ON ET ET ET ON ON ON ON ON ON CS ON CS ON EN EN EN EN EN EN EN EN EN EN ON ON ON ON ON ON ON L L L L L L L L L L L L L L L L L L L L L L L L L L ON ON ON ON ON ON L L L L L L L L L L L L L L L L L L L L L L L L L L ON ON ON ON BN BN BN BN BN BN B BN BN BN BN BN BN BN BN BN BN BN BN BN BN BN BN BN BN BN BN BN BN BN BN BN BN CS ON ET ET ET ET ON ON ON ON L ON ON ON ON ON ET ET EN EN ON L ON ON ON EN L ON ON ON ON ON L L L L L L L L L L L L L L L L L L L L L L L ON L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L ON L L L L L L L L".split(" "),
-Fh="AL AL AL AL AL AL AL AL AL AL AL AL CS AL ON ON NSM NSM NSM NSM NSM NSM AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL NSM NSM NSM NSM NSM NSM NSM NSM NSM NSM NSM NSM NSM NSM AL AL AL AL AL AL AL AN AN AN AN AN AN AN AN AN AN ET AN AN AL AL AL NSM AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL NSM NSM NSM NSM NSM NSM NSM NSM NSM NSM NSM NSM NSM NSM NSM NSM NSM NSM NSM ON NSM NSM NSM NSM AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL".split(" ");
-PDFJS.bidi=function(a,b){var c=!0,d=a.length;if(0==d)return new Od(a,ltr);for(var e=[],f=[],g=0,h=0;h<d;++h){e[h]=a.charAt(h);var k=a.charCodeAt(h),j="L";255>=k?j=Eh[k]:1424<=k&&1524>=k?j="R":1536<=k&&1791>=k?j=Fh[k&255]:1792<=k&&2220>=k&&(j="AL");("R"==j||"AL"==j||"AN"==j)&&g++;f[h]=j}if(0==g)return new Od(a,!0);-1==b&&(0.3>d/g?(c=!0,b=0):(c=!1,b=1));g=[];for(h=0;h<d;++h)g[h]=b;j=k=0!=(b&1)?"R":"L";for(h=0;h<d;++h)"NSM"==f[h]?f[h]=j:j=f[h];j=k;for(h=0;h<d;++h){var l=f[h];if("EN"==l)f[h]="AL"==j?
-"AN":"EN";else if("R"==l||"L"==l||"AL"==l)j=l}for(h=0;h<d;++h)l=f[h],"AL"==l&&(f[h]="R");for(h=1;h<d-1;++h)if("ES"==f[h]&&("EN"==f[h-1]&&"EN"==f[h+1])&&(f[h]="EN"),"CS"==f[h]&&("EN"==f[h-1]||"AN"==f[h-1])&&f[h+1]==f[h-1])f[h]=f[h-1];for(h=0;h<d;++h)if("EN"==f[h]){for(j=h-1;0<=j&&"ET"==f[j];--j)f[j]="EN";for(j=h+1;j<d&&"ET"==f[j];--j)f[j]="EN"}for(h=0;h<d;++h)if(l=f[h],"WS"==l||"ES"==l||"ET"==l||"CS"==l)f[h]="ON";j=k;for(h=0;h<d;++h)if(l=f[h],"EN"==l)f[h]="L"==j?"L":"EN";else if("R"==l||"L"==l)j=l;
-for(h=0;h<d;++h)if("ON"==f[h]){j=void 0;j=h+1;for(l=f.length;j<l&&"ON"==f[j];++j);var n=k;0<h&&(n=f[h-1]);l=k;j+1<d&&(l=f[j+1]);"L"!=n&&(n="R");"L"!=l&&(l="R");if(n==l)for(var l=f,p=j;h<p;++h)l[h]=n;h=j-1}for(h=0;h<d;++h)"ON"==f[h]&&(f[h]=k);for(h=0;h<d;++h)if(l=f[h],0==(g[h]&1))if("R"==l)g[h]+=1;else{if("AN"==l||"EN"==l)g[h]+=2}else if("L"==l||"AN"==l||"EN"==l)g[h]+=1;j=-1;f=99;h=0;for(d=g.length;h<d;++h)k=g[h],j<k&&(j=k),f>k&&0!=(k&1)&&(f=k);for(k=j;k>=f;--k){j=-1;h=0;for(d=g.length;h<d;++h)g[h]<
-k?0<=j&&(Ig(e,j,h),j=-1):0>j&&(j=h);0<=j&&Ig(e,j,g.length)}g="";h=0;for(d=e.length;h<d;++h)f=e[h],"<"!=f&&">"!=f&&(g+=f);return new Od(g,c)};var Gh=PDFJS,Jg=function(a){"string"===typeof a?(a=a.replace(/>\\376\\377([^<]+)/g,function(a,c){for(var d=c.replace(/\\([0-3])([0-7])([0-7])/g,function(a,b,c,d){return String.fromCharCode(64*b+8*c+1*d)}),e="",f=0;f<d.length;f+=2)var g=256*d.charCodeAt(f)+d.charCodeAt(f+1),e=e+("&#x"+(65536+g).toString(16).substring(1)+";");return">"+e}),a=(new DOMParser).parseFromString(a,
-"application/xml")):a instanceof Document||s("Metadata: Invalid metadata object");this.metaDocument=a;this.metadata={};this.parse()};Jg.prototype={parse:function(){var a=this.metaDocument.documentElement;if("rdf:rdf"!==a.nodeName.toLowerCase())for(a=a.firstChild;a&&"rdf:rdf"!==a.nodeName.toLowerCase();)a=a.nextSibling;var b=a?a.nodeName.toLowerCase():null;if(a&&"rdf:rdf"===b&&a.hasChildNodes()){var a=a.childNodes,c,d,e,f,g,h;e=0;for(g=a.length;e<g;e++)if(b=a[e],"rdf:description"===b.nodeName.toLowerCase()){f=
-0;for(h=b.childNodes.length;f<h;f++)"#text"!==b.childNodes[f].nodeName.toLowerCase()&&(c=b.childNodes[f],d=c.nodeName.toLowerCase(),this.metadata[d]=c.textContent.trim())}}},get:function(a){return this.metadata[a]||null},has:function(a){return"undefined"!==typeof this.metadata[a]}};Gh.Metadata=Jg;var ag,Kg=function(){},Hh=function(a,b,c,d,e,f,g,h,k){function j(){if(0<z)return z--,x>>z&1;x=a[b++];if(255==x){var c=a[b++];if(c)throw"unexpected marker: "+(x<<8|c).toString(16);}z=7;return x>>>7}function l(a){for(var b;null!==
-(b=j());){a=a[b];if("number"===typeof a)return a;if("object"!==typeof a)throw"invalid huffman sequence";}return null}function n(a){for(var b=0;0<a;){var c=j();if(null===c)return;b=b<<1|c;a--}return b}function p(a){var b=n(a);return b>=1<<a-1?b:b+(-1<<a)+1}function m(a,b){var c=l(a.huffmanTableDC),c=0===c?0:p(c);b[0]=a.pred+=c;for(c=1;64>c;){var d=l(a.huffmanTableAC),e=d&15,d=d>>4;if(0===e){if(15>d)break;c+=16}else c+=d,b[Db[c]]=p(e),c++}}function r(a,b){var c=l(a.huffmanTableDC),c=0===c?0:p(c)<<k;
-b[0]=a.pred+=c}function q(a,b){b[0]|=j()<<k}function s(a,b){if(0<u)u--;else for(var c=f,d=g;c<=d;){var e=l(a.huffmanTableAC),h=e&15,e=e>>4;if(0===h){if(15>e){u=n(e)+(1<<e)-1;break}c+=16}else c+=e,b[Db[c]]=p(h)*(1<<k),c++}}function t(a,b){for(var c=f,d=g,e=0;c<=d;){var h=Db[c];switch(w){case 0:e=l(a.huffmanTableAC);h=e&15;e>>=4;if(0===h)15>e?(u=n(e)+(1<<e),w=4):(e=16,w=1);else{if(1!==h)throw"invalid ACn encoding";C=p(h);w=e?2:3}continue;case 1:case 2:b[h]?b[h]+=j()<<k:(e--,0===e&&(w=2==w?3:0));break;
-case 3:b[h]?b[h]+=j()<<k:(b[h]=C<<k,w=0);break;case 4:b[h]&&(b[h]+=j()<<k)}c++}4===w&&(u--,0===u&&(w=0))}var y=c.mcusPerLine,v=b,x=0,z=0,u=0,w=0,C,D=d.length,B,E,H,I,F;h=c.progressive?0===f?0===h?r:q:0===h?s:t:m;var G=0;c=1==D?d[0].blocksPerLine*d[0].blocksPerColumn:y*c.mcusPerColumn;e||(e=c);for(var J,L;G<c;){for(E=0;E<D;E++)d[E].pred=0;u=0;if(1==D){B=d[0];for(F=0;F<e;F++)h(B,B.blocks[G/B.blocksPerLine|0][G%B.blocksPerLine]),G++}else for(F=0;F<e;F++){for(E=0;E<D;E++){B=d[E];J=B.h;L=B.v;for(H=0;H<
-L;H++)for(I=0;I<J;I++)h(B,B.blocks[(G/y|0)*B.v+H][G%y*B.h+I])}G++}z=0;B=a[b]<<8|a[b+1];if(65280>=B)throw"marker was not found";if(65488<=B&&65495>=B)b+=2;else break}return b-v},Ih=function(a,b){for(var c=[],d=b.blocksPerLine,e=b.blocksPerColumn,f=d<<3,g=new Int32Array(64),h=new Uint8Array(64),k,j,l=0;l<e;l++){var n=l<<3;for(k=0;8>k;k++)c.push(new Uint8Array(f));for(var p=0;p<d;p++){var m=b.blocks[l][p];k=h;j=g;for(var r=b.quantizationTable,q=void 0,s=void 0,t=void 0,y=void 0,v=void 0,x=void 0,z=void 0,
-u=void 0,w=void 0,B=void 0,B=0;64>B;B++)j[B]=m[B]*r[B];for(B=0;8>B;++B)m=8*B,0==j[1+m]&&0==j[2+m]&&0==j[3+m]&&0==j[4+m]&&0==j[5+m]&&0==j[6+m]&&0==j[7+m]?(w=Eb*j[0+m]+512>>10,j[0+m]=w,j[1+m]=w,j[2+m]=w,j[3+m]=w,j[4+m]=w,j[5+m]=w,j[6+m]=w,j[7+m]=w):(q=Eb*j[0+m]+128>>8,s=Eb*j[4+m]+128>>8,t=j[2+m],y=j[6+m],v=Cc*(j[1+m]-j[7+m])+128>>8,u=Cc*(j[1+m]+j[7+m])+128>>8,x=j[3+m]<<4,z=j[5+m]<<4,w=q-s+1>>1,q=q+s+1>>1,s=w,w=t*Dc+y*Ec+128>>8,t=t*Ec-y*Dc+128>>8,y=w,w=v-z+1>>1,v=v+z+1>>1,z=w,w=u+x+1>>1,x=u-x+1>>1,u=
-w,w=q-y+1>>1,q=q+y+1>>1,y=w,w=s-t+1>>1,s=s+t+1>>1,t=w,w=v*Fc+u*Gc+2048>>12,v=v*Gc-u*Fc+2048>>12,u=w,w=x*Hc+z*Ic+2048>>12,x=x*Ic-z*Hc+2048>>12,z=w,j[0+m]=q+u,j[7+m]=q-u,j[1+m]=s+z,j[6+m]=s-z,j[2+m]=t+x,j[5+m]=t-x,j[3+m]=y+v,j[4+m]=y-v);for(B=0;8>B;++B)m=B,0==j[8+m]&&0==j[16+m]&&0==j[24+m]&&0==j[32+m]&&0==j[40+m]&&0==j[48+m]&&0==j[56+m]?(w=Eb*j[B+0]+8192>>14,j[0+m]=w,j[8+m]=w,j[16+m]=w,j[24+m]=w,j[32+m]=w,j[40+m]=w,j[48+m]=w,j[56+m]=w):(q=Eb*j[0+m]+2048>>12,s=Eb*j[32+m]+2048>>12,t=j[16+m],y=j[48+m],
-v=Cc*(j[8+m]-j[56+m])+2048>>12,u=Cc*(j[8+m]+j[56+m])+2048>>12,x=j[24+m],z=j[40+m],w=q-s+1>>1,q=q+s+1>>1,s=w,w=t*Dc+y*Ec+2048>>12,t=t*Ec-y*Dc+2048>>12,y=w,w=v-z+1>>1,v=v+z+1>>1,z=w,w=u+x+1>>1,x=u-x+1>>1,u=w,w=q-y+1>>1,q=q+y+1>>1,y=w,w=s-t+1>>1,s=s+t+1>>1,t=w,w=v*Fc+u*Gc+2048>>12,v=v*Gc-u*Fc+2048>>12,u=w,w=x*Hc+z*Ic+2048>>12,x=x*Ic-z*Hc+2048>>12,z=w,j[0+m]=q+u,j[56+m]=q-u,j[8+m]=s+z,j[48+m]=s-z,j[16+m]=t+x,j[40+m]=t-x,j[24+m]=y+v,j[32+m]=y-v);for(B=0;64>B;++B)q=128+(j[B]+8>>4),k[B]=0>q?0:255<q?255:
-q;B=0;q=p<<3;for(j=0;8>j;j++){s=c[n+j];for(k=0;8>k;k++)s[q+k]=h[B++]}}}return c},Za=function(a){return 0>a?0:255<a?255:a},Db=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),Ic=4017,Hc=799,Gc=3406,Fc=2276,Ec=1567,Dc=3784,Eb=5793,Cc=2896;Kg.prototype={load:function(a){var b=new XMLHttpRequest;b.open("GET",a,!0);b.responseType="arraybuffer";b.onload=
-function(){var a=new Uint8Array(b.response||b.mozResponseArrayBuffer);this.parse(a);if(this.onload)this.onload()}.bind(this);b.send(null)},parse:function(a){function b(){var b=a[c]<<8|a[c+1];c+=2;return b}var c=0,d=null,e=null,f,g,h=[],k=[],j=[],l=[],n=b();if(65496!=n)throw"SOI not found";for(n=b();65497!=n;){var p;switch(n){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var m;
-m=b();m=a.subarray(c,c+m-2);c+=m.length;65504===n&&74===m[0]&&(70===m[1]&&73===m[2]&&70===m[3]&&0===m[4])&&(d={version:{major:m[5],minor:m[6]},densityUnits:m[7],xDensity:m[8]<<8|m[9],yDensity:m[10]<<8|m[11],thumbWidth:m[12],thumbHeight:m[13],thumbData:m.subarray(14,14+3*m[12]*m[13])});65518===n&&65===m[0]&&(100===m[1]&&111===m[2]&&98===m[3]&&101===m[4]&&0===m[5])&&(e={version:m[6],flags0:m[7]<<8|m[8],flags1:m[9]<<8|m[10],transformCode:m[11]});break;case 65499:for(n=b()+c-2;c<n;){m=a[c++];var r=new Int32Array(64);
-if(0===m>>4)for(p=0;64>p;p++){var q=Db[p];r[q]=a[c++]}else if(1===m>>4)for(p=0;64>p;p++)q=Db[p],r[q]=b();else throw"DQT: invalid table spec";h[m&15]=r}break;case 65472:case 65474:b();f={};f.progressive=65474===n;f.precision=a[c++];f.scanLines=b();f.samplesPerLine=b();f.components={};f.componentsOrder=[];m=a[c++];for(n=0;n<m;n++){p=a[c];var r=a[c+1]>>4,q=a[c+1]&15,s=a[c+2];f.componentsOrder.push(p);f.components[p]={h:r,v:q,quantizationTable:h[s]};c+=3}n=f;p=m=0;q=r=void 0;for(q in n.components)n.components.hasOwnProperty(q)&&
-(r=n.components[q],m<r.h&&(m=r.h),p<r.v&&(p=r.v));var s=Math.ceil(n.samplesPerLine/8/m),t=Math.ceil(n.scanLines/8/p);for(q in n.components)if(n.components.hasOwnProperty(q)){for(var r=n.components[q],y=Math.ceil(Math.ceil(n.samplesPerLine/8)*r.h/m),v=Math.ceil(Math.ceil(n.scanLines/8)*r.v/p),x=s*r.h,z=t*r.v,u=[],w=0;w<z;w++){for(var B=[],C=0;C<x;C++)B.push(new Int32Array(64));u.push(B)}r.blocksPerLine=y;r.blocksPerColumn=v;r.blocks=u}n.maxH=m;n.maxV=p;n.mcusPerLine=s;n.mcusPerColumn=t;k.push(f);break;
-case 65476:m=b();for(n=2;n<m;){r=a[c++];q=new Uint8Array(16);for(p=t=0;16>p;p++,c++)t+=q[p]=a[c];s=new Uint8Array(t);for(p=0;p<t;p++,c++)s[p]=a[c];n+=17+t;p=0===r>>4?l:j;r&=15;t=0;y=[];x=v=void 0;for(z=16;0<z&&!q[z-1];)z--;y.push({children:[],index:0});u=y[0];w=void 0;for(v=0;v<z;v++){for(x=0;x<q[v];x++){u=y.pop();for(u.children[u.index]=s[t];0<u.index;)u=y.pop();u.index++;for(y.push(u);y.length<=v;)y.push(w={children:[],index:0}),u.children[u.index]=w.children,u=w;t++}v+1<z&&(y.push(w={children:[],
-index:0}),u.children[u.index]=w.children,u=w)}p[r]=y[0].children}break;case 65501:b();g=b();break;case 65498:b();p=a[c++];m=[];for(n=0;n<p;n++)r=f.components[a[c++]],q=a[c++],r.huffmanTableDC=l[q>>4],r.huffmanTableAC=j[q&15],m.push(r);n=a[c++];p=a[c++];r=a[c++];n=Hh(a,c,f,m,g,n,p,r>>4,r&15);c+=n;break;default:if(255==a[c-3]&&192<=a[c-2]&&254>=a[c-2]){c-=3;break}throw"unknown JPEG marker "+n.toString(16);}n=b()}if(1!=k.length)throw"only single frame JPEGs supported";this.width=f.samplesPerLine;this.height=
-f.scanLines;this.jfif=d;this.adobe=e;this.components=[];for(n=0;n<f.componentsOrder.length;n++)r=f.components[f.componentsOrder[n]],this.components.push({lines:Ih(f,r),scaleX:r.h/f.maxH,scaleY:r.v/f.maxV})},getData:function(a,b){var c=this.width/a,d=this.height/b,e,f,g,h,k,j,l,n,p,m,r=0,q,s,t,y,v,x,z=new Uint8Array(a*b*this.components.length);switch(this.components.length){case 1:e=this.components[0];for(m=0;m<b;m++){k=e.lines[0|m*e.scaleY*d];for(p=0;p<a;p++)q=k[0|p*e.scaleX*c],z[r++]=q}break;case 3:x=
-!0;this.adobe&&this.adobe.transformCode?x=!0:"undefined"!==typeof this.colorTransform&&(x=!!this.colorTransform);e=this.components[0];f=this.components[1];g=this.components[2];for(m=0;m<b;m++){k=e.lines[0|m*e.scaleY*d];j=f.lines[0|m*f.scaleY*d];l=g.lines[0|m*g.scaleY*d];for(p=0;p<a;p++)x?(q=k[0|p*e.scaleX*c],s=j[0|p*f.scaleX*c],t=l[0|p*g.scaleX*c],h=Za(q+1.402*(t-128)),n=Za(q-0.3441363*(s-128)-0.71413636*(t-128)),q=Za(q+1.772*(s-128))):(h=k[0|p*e.scaleX*c],n=j[0|p*f.scaleX*c],q=l[0|p*g.scaleX*c]),
-z[r++]=h,z[r++]=n,z[r++]=q}break;case 4:if(!this.adobe)throw"Unsupported color mode (4 components)";x=!1;this.adobe&&this.adobe.transformCode?x=!0:"undefined"!==typeof this.colorTransform&&(x=!!this.colorTransform);e=this.components[0];f=this.components[1];g=this.components[2];h=this.components[3];for(m=0;m<b;m++){k=e.lines[0|m*e.scaleY*d];j=f.lines[0|m*f.scaleY*d];l=g.lines[0|m*g.scaleY*d];n=h.lines[0|m*h.scaleY*d];for(p=0;p<a;p++)x?(q=k[0|p*e.scaleX*c],s=j[0|p*f.scaleX*c],t=l[0|p*g.scaleX*c],y=
-n[0|p*h.scaleX*c],v=255-Za(q+1.402*(t-128)),t=255-Za(q-0.3441363*(s-128)-0.71413636*(t-128)),q=255-Za(q+1.772*(s-128))):(v=k[0|p*e.scaleX*c],t=j[0|p*f.scaleX*c],q=l[0|p*g.scaleX*c],y=n[0|p*h.scaleX*c]),z[r++]=v,z[r++]=t,z[r++]=q,z[r++]=y}break;default:throw"Unsupported color mode";}return z},copyToImageData:function(a){var b=a.width,c=a.height;a=a.data;var d=this.getData(b,c),e=0,f=0,g,h,k,j,l,n;switch(this.components.length){case 1:for(h=0;h<c;h++)for(g=0;g<b;g++)k=d[e++],a[f++]=k,a[f++]=k,a[f++]=
-k,a[f++]=255;break;case 3:for(h=0;h<c;h++)for(g=0;g<b;g++)l=d[e++],n=d[e++],k=d[e++],a[f++]=l,a[f++]=n,a[f++]=k,a[f++]=255;break;case 4:for(h=0;h<c;h++)for(g=0;g<b;g++)l=d[e++],n=d[e++],k=d[e++],j=d[e++],l=255-Za(l*(1-j/255)+j),n=255-Za(n*(1-j/255)+j),k=255-Za(k*(1-j/255)+j),a[f++]=l,a[f++]=n,a[f++]=k,a[f++]=255;break;default:throw"Unsupported color mode";}}};ag=Kg}).call("undefined"===typeof window?this:window);
+"undefined"===typeof PDFJS&&(("undefined"!==typeof window?window:this).PDFJS={});PDFJS.version="0.8.573";PDFJS.build="e97e003";
+(function(){var D,V;function S(b){ba>=na&&(J("Info: "+b),PDFJS.LogManager.notify("info",b))}function F(b){ba>=ca&&(J("Warning: "+b),PDFJS.LogManager.notify("warn",b))}function m(b){if(1<arguments.length){var a=["Error:"];a.push.apply(a,arguments);J.apply(null,a);b=[].join.call(arguments," ")}else J("Error: "+b);var a=J,c;try{throw Error();}catch(e){c=e.stack?e.stack.split("\n").slice(2).join("\n"):""}a(c);PDFJS.LogManager.notify("error",b);throw Error(b);}function K(b){F("TODO: "+b)}function oa(b,
+a){if(!a)return b;if(0<=a.indexOf(":"))return a;if("/"==a.charAt(0)){var c=b.indexOf("://"),c=b.indexOf("/",c+3);return b.substring(0,c)+a}var e=b.length,c=b.lastIndexOf("#"),e=0<=c?c:e,c=b.lastIndexOf("?",e),c=b.lastIndexOf("/",0<=c?c:e);return b.substring(0,c+1)+a}function Y(b,a){if(!b)return!1;var c=b.indexOf(":");if(0>c)return a;switch(b.substr(0,c)){case "http":case "https":case "ftp":case "mailto":return!0;default:return!1}}function W(b,a,c){Object.defineProperty(b,a,{value:c,enumerable:!0,
+configurable:!0,writable:!1});return c}function T(b){var a,c=b.length,e="";if("\u00fe"===b[0]&&"\u00ff"===b[1])for(a=2;a<c;a+=2)e+=String.fromCharCode(b.charCodeAt(a)<<8|b.charCodeAt(a+1));else for(a=0;a<c;++a)var d=pa[b.charCodeAt(a)],e=e+(d?String.fromCharCode(d):b.charAt(a));return e}function L(b){return"boolean"==typeof b}function M(b){return b instanceof Name}function O(b,a){if(!(b instanceof Dict))return!1;if(!a)return!0;var c=b.get("Type");return M(c)&&c.name==a}function B(b){return b instanceof
+Array}function X(b){return"object"==typeof b&&null!==b&&void 0!==b&&"getBytes"in b}function da(b){if("object"!=typeof b)return!1;if(!O(b))if(X(b))b=b.dict;else return!1;return b.has("FunctionType")}function Z(b,a){this.name=b;this.comObj=a;this.callbackIndex=1;var c=this.callbacks={},e=this.actionHandler={};e.console_log=[function(a){J.apply(null,a)}];e.console_error="console"in v?[function(a){v.console.error.apply(null,a)}]:[function(a){J.apply(null,a)}];e._warn=[function(a){F(a)}];a.onmessage=function(d){var b=
+d.data;if(b.isReply)if(d=b.callbackId,b.callbackId in c){var f=c[d];delete c[d];f(b.data)}else m("Cannot resolve callback "+d);else b.action in e?(d=e[b.action],b.callbackId?(f=new x,f.then(function(c){a.postMessage({isReply:!0,callbackId:b.callbackId,data:c})}),d[0].call(d[1],b.data,f)):d[0].call(d[1],b.data)):m("Unkown action from worker: "+b.action)}}function qa(b,a,c){var e=new Image;e.onload=function(){c.resolve(b,e)};e.src="data:image/jpeg;base64,"+window.btoa(a)}function ea(b,a){var c=document.createElement("canvas");
+c.width=b;c.height=a;return c}function fa(b){b.mozCurrentTransform||(b._scaleX=b._scaleX||1,b._scaleY=b._scaleY||1,b._originalSave=b.save,b._originalRestore=b.restore,b._originalRotate=b.rotate,b._originalScale=b.scale,b._originalTranslate=b.translate,b._originalTransform=b.transform,b._originalSetTransform=b.setTransform,b._transformMatrix=[b._scaleX,0,0,b._scaleY,0,0],b._transformStack=[],Object.defineProperty(b,"mozCurrentTransform",{get:function(){return this._transformMatrix}}),Object.defineProperty(b,
+"mozCurrentTransformInverse",{get:function(){var a=this._transformMatrix,c=a[0],e=a[1],d=a[2],b=a[3],f=a[4],a=a[5],k=c*b-e*d,h=e*d-c*b;return[b/k,e/h,d/h,c/k,(b*f-d*a)/h,(e*f-c*a)/k]}}),b.save=function(){var a=this._transformMatrix;this._transformStack.push(a);this._transformMatrix=a.slice(0,6);this._originalSave()},b.restore=function(){var a=this._transformStack.pop();a&&(this._transformMatrix=a,this._originalRestore())},b.translate=function(a,c){var e=this._transformMatrix;e[4]=e[0]*a+e[2]*c+e[4];
+e[5]=e[1]*a+e[3]*c+e[5];this._originalTranslate(a,c)},b.scale=function(a,c){var e=this._transformMatrix;e[0]*=a;e[1]*=a;e[2]*=c;e[3]*=c;this._originalScale(a,c)},b.transform=function(a,c,e,d,g,f){var k=this._transformMatrix;this._transformMatrix=[k[0]*a+k[2]*c,k[1]*a+k[3]*c,k[0]*e+k[2]*d,k[1]*e+k[3]*d,k[0]*g+k[2]*f+k[4],k[1]*g+k[3]*f+k[5]];b._originalTransform(a,c,e,d,g,f)},b.setTransform=function(a,c,e,d,g,f){this._transformMatrix=[a,c,e,d,g,f];b._originalSetTransform(a,c,e,d,g,f)},b.rotate=function(a){var c=
+Math.cos(a),e=Math.sin(a),d=this._transformMatrix;this._transformMatrix=[d[0]*c+d[2]*e,d[1]*c+d[3]*e,d[0]*-e+d[2]*c,d[1]*-e+d[3]*c,d[4],d[5]];this._originalRotate(a)})}function ra(b){var a=b.width,c=b.height,e,d,g=a+1,f=new Uint8Array(g*(c+1)),k=new Uint8Array([0,2,4,0,1,0,5,4,8,10,0,8,0,2,1,0]),h=3,l=b.data,n=4*a,t=0;0!==l[3]&&(f[0]=1,++t);for(e=1;e<a;e++)l[h]!==l[h+4]&&(f[e]=l[h]?2:1,++t),h+=4;0!==l[h]&&(f[e]=2,++t);h+=4;for(b=1;b<c;b++){d=b*g;l[h-n]!==l[h]&&(f[d]=l[h]?1:8,++t);var y=(l[h]?4:0)+
+(l[h-n]?8:0);for(e=1;e<a;e++)y=(y>>2)+(l[h+4]?4:0)+(l[h-n+4]?8:0),k[y]&&(f[d+e]=k[y],++t),h+=4;l[h-n]!==l[h]&&(f[d+e]=l[h]?2:4,++t);h+=4;if(1E3<t)return null}h-=n;d=b*g;0!==l[h]&&(f[d]=8,++t);for(e=1;e<a;e++)l[h]!==l[h+4]&&(f[d+e]=l[h]?4:8,++t),h+=4;0!==l[h]&&(f[d+e]=4,++t);if(1E3<t)return null;var k=new Int32Array([0,g,-1,0,-g,0,0,0,1]),q=[];for(b=0;t&&b<=c;b++){h=b*g;for(e=h+a;h<e&&!f[h];)h++;if(h!==e){e=[h%g,b];d=f[h];l=h;do{n=k[d];do h+=n;while(!f[h]);n=f[h];5!==n&&10!==n?(d=n,f[h]=0):(d=n&51*
+d>>4,f[h]&=d>>2|d<<2);e.push(h%g);e.push(h/g|0);--t}while(l!==h);q.push(e);--b}}return function(f){f.save();f.scale(1/a,-1/c);f.translate(0,-c);f.beginPath();for(var d=0,e=q.length;d<e;d++){var b=q[d];f.moveTo(b[0],b[1]);for(var k=2,h=b.length;k<h;k+=2)f.lineTo(b[k],b[k+1])}f.fill();f.beginPath();f.restore()}}var v="undefined"===typeof window?this:window,U="undefined"==typeof window,ca=1,na=5,ba=ca,$=[0.0010,0,0,0.0010,0,0];V=0;v.PDFJS||(v.PDFJS={});v.PDFJS.pdfBug=!1;var J=function(){return"console"in
+v&&"log"in v.console?v.console.log.bind(v.console):function(){}}();PDFJS.isValidUrl=Y;PDFJS.LogManager=function(){var b=[];return{addLogger:function(a){b.push(a)},notify:function(a,c){for(var e=0,d=b.length;e<d;e++){var g=b[e];if(g[a])g[a](c)}}}}();var ga=PDFJS.PasswordResponses={NEED_PASSWORD:1,INCORRECT_PASSWORD:2};(function(){function b(a,c){this.name="PasswordException";this.message=a;this.code=c}b.prototype=Error();return b.constructor=b})();(function(){function b(a,c){this.name="UnknownErrorException";
+this.message=a;this.details=c}b.prototype=Error();return b.constructor=b})();(function(){function b(a){this.name="InvalidPDFException";this.message=a}b.prototype=Error();return b.constructor=b})();(function(){function b(a){this.name="MissingPDFException";this.message=a}b.prototype=Error();return b.constructor=b})();var sa=function(){function b(a){this.message=a}b.prototype=Error();b.prototype.name="NotImplementedException";return b.constructor=b}();(function(){function b(a,c){this.begin=a;this.end=
+c;this.message="Missing data [begin, end)"}b.prototype=Error();b.prototype.name="MissingDataException";return b.constructor=b})();(function(){function b(a){this.message=a}b.prototype=Error();b.prototype.name="XRefParseException";return b.constructor=b})();var ha=[1,0,0,1,0,0],s=PDFJS.Util=function(){function b(){}b.makeCssRgb=function(a){return"rgb("+a[0]+","+a[1]+","+a[2]+")"};b.makeCssCmyk=function(a){a=p.singletons.cmyk.getRgb(a,0);return b.makeCssRgb(a)};b.transform=function(a,c){return[a[0]*
+c[0]+a[2]*c[1],a[1]*c[0]+a[3]*c[1],a[0]*c[2]+a[2]*c[3],a[1]*c[2]+a[3]*c[3],a[0]*c[4]+a[2]*c[5]+a[4],a[1]*c[4]+a[3]*c[5]+a[5]]};b.applyTransform=function(a,c){return[a[0]*c[0]+a[1]*c[2]+c[4],a[0]*c[1]+a[1]*c[3]+c[5]]};b.applyInverseTransform=function(a,c){var e=c[0]*c[3]-c[1]*c[2];return[(a[0]*c[3]-a[1]*c[2]+c[2]*c[5]-c[4]*c[3])/e,(-a[0]*c[1]+a[1]*c[0]+c[4]*c[1]-c[5]*c[0])/e]};b.getAxialAlignedBoundingBox=function(a,c){var e=b.applyTransform(a,c),d=b.applyTransform(a.slice(2,4),c),g=b.applyTransform([a[0],
+a[3]],c),f=b.applyTransform([a[2],a[1]],c);return[Math.min(e[0],d[0],g[0],f[0]),Math.min(e[1],d[1],g[1],f[1]),Math.max(e[0],d[0],g[0],f[0]),Math.max(e[1],d[1],g[1],f[1])]};b.inverseTransform=function(a){var c=a[0]*a[3]-a[1]*a[2];return[a[3]/c,-a[1]/c,-a[2]/c,a[0]/c,(a[2]*a[5]-a[4]*a[3])/c,(a[4]*a[1]-a[5]*a[0])/c]};b.apply3dTransform=function(a,c){return[a[0]*c[0]+a[1]*c[1]+a[2]*c[2],a[3]*c[0]+a[4]*c[1]+a[5]*c[2],a[6]*c[0]+a[7]*c[1]+a[8]*c[2]]};b.singularValueDecompose2dScale=function(a){var c=[a[0],
+a[2],a[1],a[3]],e=a[0]*c[0]+a[1]*c[2],d=a[2]*c[1]+a[3]*c[3],b=(e+d)/2;a=Math.sqrt((e+d)*(e+d)-4*(e*d-(a[2]*c[0]+a[3]*c[2])*(a[0]*c[1]+a[1]*c[3])))/2;c=b-a||1;return[Math.sqrt(b+a||1),Math.sqrt(c)]};b.normalizeRect=function(a){var c=a.slice(0);a[0]>a[2]&&(c[0]=a[2],c[2]=a[0]);a[1]>a[3]&&(c[1]=a[3],c[3]=a[1]);return c};b.intersect=function(a,c){function e(a,c){return a-c}var d=[a[0],a[2],c[0],c[2]].sort(e),g=[a[1],a[3],c[1],c[3]].sort(e),f=[];a=b.normalizeRect(a);c=b.normalizeRect(c);if(d[0]===a[0]&&
+d[1]===c[0]||d[0]===c[0]&&d[1]===a[0])f[0]=d[1],f[2]=d[2];else return!1;if(g[0]===a[1]&&g[1]===c[1]||g[0]===c[1]&&g[1]===a[1])f[1]=g[1],f[3]=g[2];else return!1;return f};b.sign=function(a){return 0>a?-1:1};b.concatenateToArray=function(a,c){Array.prototype.push.apply(a,c)};b.prependToArray=function(a,c){Array.prototype.unshift.apply(a,c)};b.extendObj=function(a,c){for(var e in c)a[e]=c[e]};b.getInheritableProperty=function(a,c){for(;a&&!a.has(c);)a=a.get("Parent");return a?a.get(c):null};b.inherit=
+function(a,c,e){a.prototype=Object.create(c.prototype);a.prototype.constructor=a;for(var d in e)a.prototype[d]=e[d]};b.loadScript=function(a,c){var e=document.createElement("script"),d=!1;e.setAttribute("src",a);c&&(e.onload=function(){d||c();d=!0});document.getElementsByTagName("head")[0].appendChild(e)};return b}();PDFJS.PageViewport=function(){function b(a,c,e,d,b,f){this.viewBox=a;this.scale=c;this.rotation=e;this.offsetX=d;this.offsetY=b;var k=(a[2]+a[0])/2,h=(a[3]+a[1])/2,l,n,t;e%=360;switch(0>
+e?e+360:e){case 180:e=-1;n=l=0;t=1;break;case 90:e=0;n=l=1;t=0;break;case 270:e=0;n=l=-1;t=0;break;default:e=1,n=l=0,t=-1}f&&(n=-n,t=-t);0===e?(d=Math.abs(h-a[1])*c+d,b=Math.abs(k-a[0])*c+b,f=Math.abs(a[3]-a[1])*c,a=Math.abs(a[2]-a[0])*c):(d=Math.abs(k-a[0])*c+d,b=Math.abs(h-a[1])*c+b,f=Math.abs(a[2]-a[0])*c,a=Math.abs(a[3]-a[1])*c);this.transform=[e*c,l*c,n*c,t*c,d-e*c*k-n*c*h,b-l*c*k-t*c*h];this.width=f;this.height=a;this.fontScale=c}b.prototype={clone:function(a){a=a||{};var c="scale"in a?a.scale:
+this.scale,e="rotation"in a?a.rotation:this.rotation;return new b(this.viewBox.slice(),c,e,this.offsetX,this.offsetY,a.dontFlip)},convertToViewportPoint:function(a,c){return s.applyTransform([a,c],this.transform)},convertToViewportRectangle:function(a){var c=s.applyTransform([a[0],a[1]],this.transform);a=s.applyTransform([a[2],a[3]],this.transform);return[c[0],c[1],a[0],a[1]]},convertToPdfPoint:function(a,c){return s.applyInverseTransform([a,c],this.transform)}};return b}();var pa=[0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364],x=PDFJS.Promise=function(){function b(){this._status=a;this._handlers=[]}var a=0,c=2,e={handlers:[],
+running:!1,unhandledRejections:[],pendingRejectionCheck:!1,scheduleHandlers:function(c){c._status!=a&&(this.handlers=this.handlers.concat(c._handlers),c._handlers=[],this.running||(this.running=!0,setTimeout(this.runHandlers.bind(this),0)))},runHandlers:function(){for(;0<this.handlers.length;){var a=this.handlers.shift(),e=a.thisPromise._status,f=a.thisPromise._value;try{1===e?"function"==typeof a.onResolve&&(f=a.onResolve(f)):"function"===typeof a.onReject&&(f=a.onReject(f),e=1,a.thisPromise._unhandledRejection&&
+this.removeUnhandeledRejection(a.thisPromise))}catch(b){e=c,f=b}a.nextPromise._updateStatus(e,f)}this.running=!1},addUnhandledRejection:function(a){this.unhandledRejections.push({promise:a,time:Date.now()});this.scheduleRejectionCheck()},removeUnhandeledRejection:function(a){a._unhandledRejection=!1;for(var c=0;c<this.unhandledRejections.length;c++)this.unhandledRejections[c].promise===a&&(this.unhandledRejections.splice(c),c--)},scheduleRejectionCheck:function(){this.pendingRejectionCheck||(this.pendingRejectionCheck=
+!0,setTimeout(function(){this.pendingRejectionCheck=!1;for(var a=Date.now(),c=0;c<this.unhandledRejections.length;c++)if(500<a-this.unhandledRejections[c].time){var f=this.unhandledRejections[c].promise._value,e="Unhandled rejection: "+f;f.stack&&(e+="\n"+f.stack);F(e);this.unhandledRejections.splice(c);c--}this.unhandledRejections.length&&this.scheduleRejectionCheck()}.bind(this),500))}};b.all=function(a){function e(a){f._status!==c&&(h=[],f.reject(a))}var f=new b,k=a.length,h=[];if(0===k)return f.resolve(h),
+f;for(var l=0,n=a.length;l<n;++l)a[l].then(function(a){return function(e){f._status!==c&&(h[a]=e,k--,0===k&&f.resolve(h))}}(l),e);return f};b.prototype={_status:null,_value:null,_handlers:null,_unhandledRejection:null,_updateStatus:function(a,b){1!==this._status&&this._status!==c&&(1==a&&b&&"function"===typeof b.then?b.then(this._updateStatus.bind(this,1),this._updateStatus.bind(this,c)):(this._status=a,this._value=b,a===c&&0===this._handlers.length&&(this._unhandledRejection=!0,e.addUnhandledRejection(this)),
+e.scheduleHandlers(this)))},get isResolved(){return 1===this._status},get isRejected(){return this._status===c},resolve:function(a){this._updateStatus(1,a)},reject:function(a){this._updateStatus(c,a)},then:function(a,c){var f=new b;this._handlers.push({thisPromise:this,onResolve:a,onReject:c,nextPromise:f});e.scheduleHandlers(this);return f}};return b}(),ta=function(){function b(){this.started={};this.times=[];this.enabled=!0}b.prototype={time:function(a){this.enabled&&(a in this.started&&F("Timer is already running for "+
+a),this.started[a]=Date.now())},timeEnd:function(a){this.enabled&&(a in this.started||F("Timer has not been started for "+a),this.times.push({name:a,start:this.started[a],end:Date.now()}),delete this.started[a])},toString:function(){for(var a=this.times,c="",e=0,d=0,b=a.length;d<b;++d){var f=a[d].name;f.length>e&&(e=f.length)}d=0;for(b=a.length;d<b;++d){for(var k=a[d],f=k.end-k.start,k=k.name;k.length<e;)k+=" ";c+=k+" "+f+"ms\n"}return c}};return b}();PDFJS.createBlob=function(b,a){if("function"===
+typeof Blob)return new Blob([b],{type:a});var c=new MozBlobBuilder;c.append(b);return c.getBlob(a)};Z.prototype={on:function(b,a,c){var e=this.actionHandler;e[b]&&m('There is already an actionName called "'+b+'"');e[b]=[a,c]},send:function(b,a,c){b={action:b,data:a};c&&(a=this.callbackIndex++,this.callbacks[a]=c,b.callbackId=a);this.comObj.postMessage(b)}};var p=function(){function b(){m("should not call ColorSpace constructor")}b.prototype={getRgb:function(a,c){m("Should not call ColorSpace.getRgb")},
+getRgbItem:function(a,c,e,d){m("Should not call ColorSpace.getRgbItem")},getRgbBuffer:function(a,c,e,d,b,f){m("Should not call ColorSpace.getRgbBuffer")},getOutputLength:function(a){m("Should not call ColorSpace.getOutputLength")},isPassthrough:function(a){return!1},createRgbBuffer:function(a,c,e,d){if(this.isPassthrough(d))return a.subarray(c);var b=new Uint8Array(3*e),f=1<<d;if(1===this.numComps&&e>f&&"DeviceGray"!==this.name&&"DeviceRGB"!==this.name){for(var k=8>=d?new Uint8Array(f):new Uint16Array(f),
+h=0;h<f;h++)k[h]=h;var l=new Uint8Array(3*f);this.getRgbBuffer(k,0,f,l,0,d);for(h=d=0;h<e;++h)f=3*a[c++],b[d++]=l[f],b[d++]=l[f+1],b[d++]=l[f+2];return b}this.getRgbBuffer(a,c,e,b,0,d);return b},usesZeroToOneRange:!0};b.parse=function(a,c,e){a=b.parseToIR(a,c,e);return a instanceof ia?a:b.fromIR(a)};b.fromIR=function(a){var c=B(a)?a[0]:a;switch(c){case "DeviceGrayCS":return this.singletons.gray;case "DeviceRgbCS":return this.singletons.rgb;case "DeviceCmykCS":return this.singletons.cmyk;case "PatternCS":return(a=
+a[1])&&(a=b.fromIR(a)),new ua(a);case "IndexedCS":var c=a[2],e=a[3];return new va(b.fromIR(a[1]),c,e);case "AlternateCS":return c=a[3],new ia(a[1],b.fromIR(a[2]),P.fromIR(c));case "LabCS":return new wa(a[1].WhitePoint,a[1].BlackPoint,a[1].Range);default:m("Unkown name "+c)}return null};b.parseToIR=function(a,c,e){if(M(a)){var d=e.get("ColorSpace");O(d)&&(d=d.get(a.name))&&(a=d)}a=c.fetchIfRef(a);if(M(a))switch(this.mode=d=a.name,d){case "DeviceGray":case "G":return"DeviceGrayCS";case "DeviceRGB":case "RGB":return"DeviceRgbCS";
+case "DeviceCMYK":case "CMYK":return"DeviceCmykCS";case "Pattern":return["PatternCS",null];default:m("unrecognized colorspace "+d)}else if(B(a))switch(this.mode=d=a[0].name,d){case "DeviceGray":case "G":return"DeviceGrayCS";case "DeviceRGB":case "RGB":return"DeviceRgbCS";case "DeviceCMYK":case "CMYK":return"DeviceCmykCS";case "CalGray":return"DeviceGrayCS";case "CalRGB":return"DeviceRgbCS";case "ICCBased":d=c.fetchIfRef(a[1]).dict.get("N");if(1==d)return"DeviceGrayCS";if(3==d)return"DeviceRgbCS";
+if(4==d)return"DeviceCmykCS";break;case "Pattern":return(a=a[1])&&(a=b.parseToIR(a,c,e)),["PatternCS",a];case "Indexed":case "I":return e=b.parseToIR(a[1],c,e),d=a[2]+1,c=c.fetchIfRef(a[3]),X(c)&&(c=c.getBytes()),["IndexedCS",e,d,c];case "Separation":case "DeviceN":var g=a[1],d=1;M(g)?d=1:B(g)&&(d=g.length);e=b.parseToIR(a[2],c,e);c=P.getIR(c,c.fetchIfRef(a[3]));return["AlternateCS",d,e,c];case "Lab":return["LabCS",a[1].getAll()];default:m('unimplemented color space object "'+d+'"')}else m('unrecognized color space object: "'+
+a+'"');return null};b.isDefaultDecode=function(a,c){if(!a)return!0;if(2*c!==a.length)return F("The decode map is not the correct length"),!0;for(var e=0,d=a.length;e<d;e+=2)if(0!==a[e]||1!=a[e+1])return!1;return!0};b.singletons={get gray(){return W(this,"gray",new xa)},get rgb(){return W(this,"rgb",new ya)},get cmyk(){return W(this,"cmyk",new za)}};return b}(),ia=function(){function b(a,c,e){this.name="Alternate";this.numComps=a;this.defaultColor=new Float32Array(a);for(var d=0;d<a;++d)this.defaultColor[d]=
+1;this.base=c;this.tintFn=e}b.prototype={getRgb:function(a,c){var e=new Uint8Array(3);this.getRgbItem(a,c,e,0);return e},getRgbItem:function(a,c,e,d){a="subarray"in a?a.subarray(c,c+this.numComps):Array.prototype.slice.call(a,c,c+this.numComps);a=this.tintFn(a);this.base.getRgbItem(a,0,e,d)},getRgbBuffer:function(a,c,e,d,b,f){var k=this.tintFn,h=this.base;f=1/((1<<f)-1);for(var l=h.numComps,n=h.usesZeroToOneRange,t=h.isPassthrough(8)||!n,y=t?b:0,q=t?d:new Uint8Array(l*e),r=this.numComps,m=new Float32Array(r),
+u=0;u<e;u++){for(var w=0;w<r;w++)m[w]=a[c++]*f;var s=k(m);if(n)for(w=0;w<l;w++)q[y++]=255*s[w];else h.getRgbItem(s,0,q,y),y+=l}t||h.getRgbBuffer(q,0,e,d,b,8)},getOutputLength:function(a){return this.base.getOutputLength(a*this.base.numComps/this.numComps)},isPassthrough:p.prototype.isPassthrough,createRgbBuffer:p.prototype.createRgbBuffer,isDefaultDecode:function(a){return p.isDefaultDecode(a,this.numComps)},usesZeroToOneRange:!0};return b}(),ua=function(){function b(a){this.name="Pattern";this.base=
+a}b.prototype={};return b}(),va=function(){function b(a,c,e){this.name="Indexed";this.numComps=1;this.defaultColor=new Uint8Array([0]);this.base=a;this.highVal=c;a=a.numComps*c;var d;if(X(e))d=new Uint8Array(a),e=e.getBytes(a),d.set(e);else if("string"==typeof e)for(d=new Uint8Array(a),c=0;c<a;++c)d[c]=e.charCodeAt(c);else e instanceof Uint8Array||e instanceof Array?d=e:m("Unrecognized lookup table: "+e);this.lookup=d}b.prototype={getRgb:function(a,c){return this.base.getRgb(this.lookup,a[c]*this.base.numComps)},
+getRgbItem:function(a,c,e,d){this.base.getRgbItem(this.lookup,a[c]*this.base.numComps,e,d)},getRgbBuffer:function(a,c,e,d,b){for(var f=this.base,k=f.numComps,h=f.getOutputLength(k),l=this.lookup,n=0;n<e;++n){var t=a[c++]*k;f.getRgbBuffer(l,t,1,d,b,8);b+=h}},getOutputLength:function(a){return this.base.getOutputLength(a*this.base.numComps)},isPassthrough:p.prototype.isPassthrough,createRgbBuffer:p.prototype.createRgbBuffer,isDefaultDecode:function(a){return!0},usesZeroToOneRange:!0};return b}(),xa=
+function(){function b(){this.name="DeviceGray";this.numComps=1;this.defaultColor=new Float32Array([0])}b.prototype={getRgb:function(a,c){var e=new Uint8Array(3);this.getRgbItem(a,c,e,0);return e},getRgbItem:function(a,c,e,d){a=255*a[c]|0;e[d]=e[d+1]=e[d+2]=0>a?0:255<a?255:a},getRgbBuffer:function(a,c,e,d,b,f){f=255/((1<<f)-1);for(var k=0;k<e;++k){var h=f*a[c++]|0;d[b++]=h;d[b++]=h;d[b++]=h}},getOutputLength:function(a){return 3*a},isPassthrough:p.prototype.isPassthrough,createRgbBuffer:p.prototype.createRgbBuffer,
+isDefaultDecode:function(a){return p.isDefaultDecode(a,this.numComps)},usesZeroToOneRange:!0};return b}(),ya=function(){function b(){this.name="DeviceRGB";this.numComps=3;this.defaultColor=new Float32Array([0,0,0])}b.prototype={getRgb:function(a,c){var e=new Uint8Array(3);this.getRgbItem(a,c,e,0);return e},getRgbItem:function(a,c,e,d){var b=255*a[c]|0,f=255*a[c+1]|0;a=255*a[c+2]|0;e[d]=0>b?0:255<b?255:b;e[d+1]=0>f?0:255<f?255:f;e[d+2]=0>a?0:255<a?255:a},getRgbBuffer:function(a,c,e,d,b,f){e*=3;if(8==
+f)d.set(a.subarray(c,c+e),b);else{f=255/((1<<f)-1);for(var k=0;k<e;++k)d[b++]=f*a[c++]|0}},getOutputLength:function(a){return a},isPassthrough:function(a){return 8==a},createRgbBuffer:p.prototype.createRgbBuffer,isDefaultDecode:function(a){return p.isDefaultDecode(a,this.numComps)},usesZeroToOneRange:!0};return b}(),za=function(){function b(a,e,d,b,f){var k=a[e+0]*d,h=a[e+1]*d,l=a[e+2]*d;d*=a[e+3];a=k*(-4.387332384609988*k+54.48615194189176*h+18.82290502165302*l+212.25662451639585*d+-285.2331026137004)+
+h*(1.7149763477362134*h-5.6096736904047315*l+-17.873870861415444*d-5.497006427196366)+l*(-2.5217340131683033*l-21.248923337353073*d+17.5119270841813)+d*(-21.86122147463605*d-189.48180835922747)+255;e=k*(8.841041422036149*k+60.118027045597366*h+6.871425592049007*l+31.159100130055922*d+-79.2970844816548)+h*(-15.310361306967817*h+17.575251261109482*l+131.35250912493976*d-190.9453302588951)+l*(4.444339102852739*l+9.8632861493405*d-24.86741582555878)+d*(-20.737325471181034*d-187.80453709719578)+255;k=
+k*(0.8842522430003296*k+8.078677503112928*h+30.89978309703729*l-0.23883238689178934*d+-14.183576799673286)+h*(10.49593273432072*h+63.02378494754052*l+50.606957656360734*d-112.23884253719248)+l*(0.03296041114873217*l+115.60384449646641*d+-193.58209356861505)+d*(-22.33816807309886*d-180.12613974708367)+255;b[f]=255<a?255:0>a?0:a;b[f+1]=255<e?255:0>e?0:e;b[f+2]=255<k?255:0>k?0:k}function a(){this.name="DeviceCMYK";this.numComps=4;this.defaultColor=new Float32Array([0,0,0,1])}a.prototype={getRgb:function(a,
+e){var d=new Uint8Array(3);b(a,e,1,d,0);return d},getRgbItem:function(a,e,d,g){b(a,e,1,d,g)},getRgbBuffer:function(a,e,d,g,f,k){k=1/((1<<k)-1);for(var h=0;h<d;h++)b(a,e,k,g,f),e+=4,f+=3},getOutputLength:function(a){return 3*(a>>2)},isPassthrough:p.prototype.isPassthrough,createRgbBuffer:p.prototype.createRgbBuffer,isDefaultDecode:function(a){return p.isDefaultDecode(a,this.numComps)},usesZeroToOneRange:!0};return a}(),wa=function(){function b(a,c,b){this.name="Lab";this.numComps=3;this.defaultColor=
+new Float32Array([0,0,0]);a||m("WhitePoint missing - required for color space Lab");c=c||[0,0,0];b=b||[-100,100,-100,100];this.XW=a[0];this.YW=a[1];this.ZW=a[2];this.amin=b[0];this.amax=b[1];this.bmin=b[2];this.bmax=b[3];this.XB=c[0];this.YB=c[1];this.ZB=c[2];(0>this.XW||0>this.ZW||1!==this.YW)&&m("Invalid WhitePoint components, no fallback available");if(0>this.XB||0>this.YB||0>this.ZB)S("Invalid BlackPoint, falling back to default"),this.XB=this.YB=this.ZB=0;if(this.amin>this.amax||this.bmin>this.bmax)S("Invalid Range, falling back to defaults"),
+this.amin=-100,this.amax=100,this.bmin=-100,this.bmax=100}function a(a){return a>=6/29?a*a*a:108/841*(a-4/29)}function c(c,d,b,f,k,h){var l=d[b],n=d[b+1];d=d[b+2];!1!==f&&(l=0+100*l/f,n=c.amin+n*(c.amax-c.amin)/f,d=c.bmin+d*(c.bmax-c.bmin)/f);n=n>c.amax?c.amax:n<c.amin?c.amin:n;d=d>c.bmax?c.bmax:d<c.bmin?c.bmin:d;f=(l+16)/116;l=f-d/200;n=c.XW*a(f+n/500);f=c.YW*a(f);l=c.ZW*a(l);1>c.ZW?(c=3.1339*n+-1.617*f+-0.4906*l,d=-0.9785*n+1.916*f+0.0333*l,n=0.072*n+-0.229*f+1.4057*l):(c=3.2406*n+-1.5372*f+-0.4986*
+l,d=-0.9689*n+1.8758*f+0.0415*l,n=0.0557*n+-0.204*f+1.057*l);k[h]=255*Math.sqrt(0>c?0:1<c?1:c);k[h+1]=255*Math.sqrt(0>d?0:1<d?1:d);k[h+2]=255*Math.sqrt(0>n?0:1<n?1:n)}b.prototype={getRgb:function(a,d){var b=new Uint8Array(3);c(this,a,d,!1,b,0);return b},getRgbItem:function(a,b,g,f){c(this,a,b,!1,g,f)},getRgbBuffer:function(a,b,g,f,k,h){h=(1<<h)-1;for(var l=0;l<g;l++)c(this,a,b,h,f,k),b+=3,k+=3},getOutputLength:function(a){return a},isPassthrough:p.prototype.isPassthrough,isDefaultDecode:function(a){return!0},
+usesZeroToOneRange:!1};return b}();D=3;var ja=function(){function b(){m("should not call Pattern constructor")}b.prototype={getPattern:function(a){m("Should not call Pattern.getStyle: "+a)}};b.shadingFromIR=function(a){return N[a[0]].fromIR(a)};b.parseShading=function(a,c,b,d){a=X(a)?a.dict:a;var g=a.get("ShadingType");switch(g){case 2:case D:return new N.RadialAxial(a,c,b,d);default:return K("Unsupported shading type: "+g),new N.Dummy}};return b}(),N={SMALL_NUMBER:0.01};N.RadialAxial=function(){function b(a,
+c,b,d,g){this.matrix=c;this.coordsArr=a.get("Coords");this.shadingType=a.get("ShadingType");this.type="Pattern";this.ctx=g;c=a.get("ColorSpace","CS");this.cs=c=p.parse(c,b,d);d=0;var f=1;a.has("Domain")&&(g=a.get("Domain"),d=g[0],f=g[1]);var k=g=!1;a.has("Extend")&&(k=a.get("Extend"),g=k[0],k=k[1]);if(!(this.shadingType!==D||g&&k)){var h=this.coordsArr[0],l=this.coordsArr[1],n=this.coordsArr[2],t=this.coordsArr[3],y=this.coordsArr[4],q=this.coordsArr[5],h=Math.sqrt((h-t)*(h-t)+(l-y)*(l-y));n<=q+h&&
+q<=n+h&&F("Unsupported radial gradient.")}this.extendStart=g;this.extendEnd=k;n=a.get("Function");if(B(n)){for(var r=[],q=0,h=n.length;q<h;q++)l=b.fetchIfRef(n[q]),da(l)||m("Invalid function"),r.push(P.parse(b,l));n=function(a){for(var c=[],f=0,b=r.length;f<b;f++)c.push(r[f](a)[0]);return c}}else da(n)||m("Invalid function"),n=P.parse(b,n);q=f-d;h=q/10;b=this.colorStops=[];if(d>=f||0>=h)S("Bad shading domain.");else{for(l=d;l<=f;l+=h)t=c.getRgb(n([l]),0),t=s.makeCssRgb(t),b.push([(l-d)/q,t]);d="transparent";
+a.has("Background")&&(t=c.getRgb(a.get("Background"),0),d=s.makeCssRgb(t));g||(b.unshift([0,d]),b[1][0]+=N.SMALL_NUMBER);k||(b[b.length-1][0]-=N.SMALL_NUMBER,b.push([1,d]));this.colorStops=b}}b.fromIR=function(a){var c=a[1],b=a[2],d=a[3],g=a[4],f=a[5],k=a[6];return{type:"Pattern",getPattern:function(a){var l;2==c?l=a.createLinearGradient(d[0],d[1],g[0],g[1]):c==D&&(l=a.createRadialGradient(d[0],d[1],f,g[0],g[1],k));a=0;for(var n=b.length;a<n;++a){var t=b[a];l.addColorStop(t[0],t[1])}return l}}};b.prototype=
+{getIR:function(){var a=this.coordsArr,c=this.shadingType;if(2==c)var b=[a[0],a[1]],d=[a[2],a[3]],g=null,f=null;else c==D?(b=[a[0],a[1]],d=[a[3],a[4]],g=a[2],f=a[5]):m("getPattern type unknown: "+c);if(a=this.matrix)b=s.applyTransform(b,a),d=s.applyTransform(d,a);return["RadialAxial",c,this.colorStops,b,d,g,f]}};return b}();N.Dummy=function(){function b(){this.type="Pattern"}b.fromIR=function(){return{type:"Pattern",getPattern:function(){return"hotpink"}}};b.prototype={getIR:function(){return["Dummy"]}};
+return b}();var Aa=function(){function b(a,c,b,d,g,f){this.name=a[1][0].name;this.operatorList=a[2];this.matrix=a[3]||[1,0,0,1,0,0];this.bbox=a[4];this.xstep=a[5];this.ystep=a[6];this.paintType=a[7];this.tilingType=a[8];this.color=c;this.objs=d;this.commonObjs=g;this.baseTransform=f;this.type="Pattern";this.ctx=b}b.getIR=function(a,c,b){var d=c.get("Matrix"),g=c.get("BBox"),f=c.get("XStep"),k=c.get("YStep"),h=c.get("PaintType");c=c.get("TilingType");return["TilingPattern",b,a,d,g,f,k,h,c]};b.prototype=
+{createPatternCanvas:function(a){var c=this.operatorList,b=this.bbox,d=this.xstep,g=this.ystep,f=this.paintType,k=this.color,h=this.objs,l=this.commonObjs;K("TilingType: "+this.tilingType);var n=b[0],t=b[1],y=b[2],q=b[3],r=[n,t],m=[n+d,t+g],u=m[0]-r[0],m=m[1]-r[1],w=s.singularValueDecompose2dScale(this.matrix),p=s.singularValueDecompose2dScale(this.baseTransform),w=[w[0]*p[0],w[1]*p[1]],u=Math.min(Math.ceil(Math.abs(u*w[0])),3E3),m=Math.min(Math.ceil(Math.abs(m*w[1])),3E3),w=G.getCanvas("pattern",
+u,m,!0),p=w.context,h=new ka(p,l,h);h.groupLevel=a.groupLevel;this.setFillAndStrokeStyleToContext(p,f,k);this.setScale(u,m,d,g);this.transformToScale(h);h.transform.apply(h,[1,0,0,1,-r[0],-r[1]]);this.clipBbox(h,b,n,t,y,q);h.executeOperatorList(c);return w.canvas},setScale:function(a,c,b,d){this.scale=[a/b,c/d]},transformToScale:function(a){var c=this.scale;a.transform.apply(a,[c[0],0,0,c[1],0,0])},scaleToContext:function(){var a=this.scale;this.ctx.scale(1/a[0],1/a[1])},clipBbox:function(a,c,b,d,
+g,f){c&&B(c)&&4==c.length&&(a.rectangle(b,d,g-b,f-d),a.clip(),a.endPath())},setFillAndStrokeStyleToContext:function(a,c,b){switch(c){case 1:c=this.ctx;a.fillStyle=c.fillStyle;a.strokeStyle=c.strokeStyle;break;case 2:c=p.singletons.rgb.getRgb(b,0);c=s.makeCssRgb(c);a.fillStyle=c;a.strokeStyle=c;break;default:m("Unsupported paint type: "+c)}},getPattern:function(a,c){var b=this.createPatternCanvas(c);a=this.ctx;a.setTransform.apply(a,this.baseTransform);a.transform.apply(a,this.matrix);this.scaleToContext();
+return a.createPattern(b,"repeat")}};return b}(),P=function(){return{getSampleArray:function(b,a,c,e){for(var d=1,g=0,f=b.length;g<f;g++)d*=b[g];d*=a;b=[];var f=a=0,k=1/(Math.pow(2,c)-1);e=e.getBytes((d*c+7)/8);for(var h=0,g=0;g<d;g++){for(;a<c;)f<<=8,f|=e[h++],a+=8;a-=c;b.push((f>>a)*k);f&=(1<<a)-1}return b},getIR:function(b,a){var c=a.dict;c||(c=a);var e=[this.constructSampled,null,this.constructInterpolated,this.constructStiched,this.constructPostScript],d=c.get("FunctionType");(e=e[d])||m("Unknown type of function");
+return e.call(this,a,c,b)},fromIR:function(b){switch(b[0]){case 0:return this.constructSampledFromIR(b);case 2:return this.constructInterpolatedFromIR(b);case 3:return this.constructStichedFromIR(b);default:return this.constructPostScriptFromIR(b)}},parse:function(b,a){var c=this.getIR(b,a);return this.fromIR(c)},constructSampled:function(b,a){function c(a){for(var c=a.length,f=[],b=0,d=0;d<c;d+=2)f[b]=[a[d],a[d+1]],++b;return f}var e=a.get("Domain"),d=a.get("Range");e&&d||m("No domain or range");
+var g=e.length/2,f=d.length/2,e=c(e),d=c(d),k=a.get("Size"),h=a.get("BitsPerSample"),l=a.get("Order")||1;1!==l&&K("No support for cubic spline interpolation: "+l);l=a.get("Encode");if(!l)for(var l=[],n=0;n<g;++n)l.push(0),l.push(k[n]-1);var l=c(l),n=(n=a.get("Decode"))?c(n):d,t=this.getSampleArray(k,f,h,b);return[0,g,e,l,n,t,k,f,Math.pow(2,h)-1,d]},constructSampledFromIR:function(b){return function(a){var c=b[1],e=b[2],d=b[3],g=b[4],f=b[5],k=b[6],h=b[7],l=b[9];c!=a.length&&m("Incorrect number of arguments: "+
+c+" != "+a.length);for(var n=1<<c,t=new Float64Array(n),y=new Uint32Array(n),q=0;q<n;q++)t[q]=1;for(var r=h,s=1,u=0;u<c;++u){for(var q=e[u][0],w=e[u][1],p=Math.min(Math.max(a[u],q),w),E=d[u][0]+(p-q)*((d[u][1]-d[u][0])/(w-q)),w=k[u],E=Math.min(Math.max(E,0),w-1),q=E<w-1?Math.floor(E):E-1,p=q+1-E,E=E-q,z=q*r,v=z+r,q=0;q<n;q++)q&s?(t[q]*=E,y[q]+=v):(t[q]*=p,y[q]+=z);r*=w;s<<=1}a=new Float64Array(h);for(q=0;q<h;++q){for(u=c=0;u<n;u++)c+=f[y[u]+q]*t[u];c=g[q][0]+(c-0)*((g[q][1]-g[q][0])/1);a[q]=Math.min(Math.max(c,
+l[q][0]),l[q][1])}return a}},constructInterpolated:function(b,a){var c=a.get("C0")||[0],e=a.get("C1")||[1],d=a.get("N");B(c)&&B(e)||m("Illegal dictionary for interpolated function");for(var g=c.length,f=[],k=0;k<g;++k)f.push(e[k]-c[k]);return[2,c,f,d]},constructInterpolatedFromIR:function(b){var a=b[1],c=b[2],e=b[3],d=c.length;return function(b){b=1==e?b[0]:Math.pow(b[0],e);for(var f=[],k=0;k<d;++k)f.push(a[k]+b*c[k]);return f}},constructStiched:function(b,a,c){(b=a.get("Domain"))||m("No domain");
+1!=b.length/2&&m("Bad domain for stiched function");for(var e=a.get("Functions"),d=[],g=0,f=e.length;g<f;++g)d.push(P.getIR(c,c.fetchIfRef(e[g])));c=a.get("Bounds");a=a.get("Encode");return[3,b,c,a,d]},constructStichedFromIR:function(b){var a=b[1],c=b[2],e=b[3];b=b[4];for(var d=[],g=0,f=b.length;g<f;g++)d.push(P.fromIR(b[g]));return function(f){f=f[0];var b=a[0],l=a[1];f>l?f=l:f<b&&(f=b);b=0;for(l=c.length;b<l&&!(f<c[b]);++b);l=a[0];0<b&&(l=c[b-1]);var g=a[1];b<c.length&&(g=c[b]);var t=e[2*b];return d[b]([t+
+(f-l)*(e[2*b+1]-t)/(g-l)])}},constructPostScript:function(b,a,c){c=a.get("Domain");a=a.get("Range");c||m("No domain.");a||m("No range.");b=new Ba(b);b=(new Ca(b)).parse();return[4,c,a,b]},constructPostScriptFromIR:function(b){var a=b[1],c=b[2],e=c.length/2,d=new Da(b[3]),g=new Ea;return function(f){for(var b=[],h=0,l=a.length/2;h<l;++h)b.push(f[h]);f=b.join("_");if(g.has(f))return g.get(f);b=d.execute(b);l=[];for(h=e-1;0<=h;--h){var n=b.pop(),t=2*h;n<c[t]?n=c[t]:n>c[t+1]&&(n=c[t+1]);l[h]=n}g.set(f,
+l);return l}}}}(),Ea=function(){function b(){this.cache={};this.total=0}b.prototype={has:function(a){return a in this.cache},get:function(a){return this.cache[a]},set:function(a,c){1024>this.total&&(this.cache[a]=c,this.total++)}};return b}(),Fa=function(){function b(a){this.stack=a||[]}b.prototype={push:function(a){100<=this.stack.length&&m("PostScript function stack overflow.");this.stack.push(a)},pop:function(){0>=this.stack.length&&m("PostScript function stack underflow.");return this.stack.pop()},
+copy:function(a){100<=this.stack.length+a&&m("PostScript function stack overflow.");var c=this.stack,b=c.length-a;for(a-=1;0<=a;a--,b++)c.push(c[b])},index:function(a){this.push(this.stack[this.stack.length-a-1])},roll:function(a,c){var b=this.stack,d=b.length-a,g=b.length-1,f=d+(c-Math.floor(c/a)*a),k,h,l;k=d;for(h=g;k<h;k++,h--)l=b[k],b[k]=b[h],b[h]=l;k=d;for(h=f-1;k<h;k++,h--)l=b[k],b[k]=b[h],b[h]=l;k=f;for(h=g;k<h;k++,h--)l=b[k],b[k]=b[h],b[h]=l}};return b}(),Da=function(){function b(a,c){this.operators=
+a;this.operands=c}b.prototype={execute:function(a){a=new Fa(a);for(var c=0,b=this.operators,d=b.length,g,f;c<d;)if(g=b[c++],"number"==typeof g)a.push(g);else switch(g){case "jz":f=a.pop();(g=a.pop())||(c=f);break;case "j":c=g=a.pop();break;case "abs":g=a.pop();a.push(Math.abs(g));break;case "add":f=a.pop();g=a.pop();a.push(g+f);break;case "and":f=a.pop();g=a.pop();L(g)&&L(f)?a.push(g&&f):a.push(g&f);break;case "atan":g=a.pop();a.push(Math.atan(g));break;case "bitshift":f=a.pop();g=a.pop();0<g?a.push(g<<
+f):a.push(g>>f);break;case "ceiling":g=a.pop();a.push(Math.ceil(g));break;case "copy":g=a.pop();a.copy(g);break;case "cos":g=a.pop();a.push(Math.cos(g));break;case "cvi":g=a.pop()|0;a.push(g);break;case "cvr":break;case "div":f=a.pop();g=a.pop();a.push(g/f);break;case "dup":a.copy(1);break;case "eq":f=a.pop();g=a.pop();a.push(g==f);break;case "exch":a.roll(2,1);break;case "exp":f=a.pop();g=a.pop();a.push(Math.pow(g,f));break;case "false":a.push(!1);break;case "floor":g=a.pop();a.push(Math.floor(g));
+break;case "ge":f=a.pop();g=a.pop();a.push(g>=f);break;case "gt":f=a.pop();g=a.pop();a.push(g>f);break;case "idiv":f=a.pop();g=a.pop();a.push(g/f|0);break;case "index":g=a.pop();a.index(g);break;case "le":f=a.pop();g=a.pop();a.push(g<=f);break;case "ln":g=a.pop();a.push(Math.log(g));break;case "log":g=a.pop();a.push(Math.log(g)/Math.LN10);break;case "lt":f=a.pop();g=a.pop();a.push(g<f);break;case "mod":f=a.pop();g=a.pop();a.push(g%f);break;case "mul":f=a.pop();g=a.pop();a.push(g*f);break;case "ne":f=
+a.pop();g=a.pop();a.push(g!=f);break;case "neg":a.pop();a.push(-f);break;case "not":g=a.pop();L(g)&&L(f)?a.push(g&&f):a.push(g&f);break;case "or":f=a.pop();g=a.pop();L(g)&&L(f)?a.push(g||f):a.push(g|f);break;case "pop":a.pop();break;case "roll":f=a.pop();g=a.pop();a.roll(g,f);break;case "round":g=a.pop();a.push(Math.round(g));break;case "sin":g=a.pop();a.push(Math.sin(g));break;case "sqrt":g=a.pop();a.push(Math.sqrt(g));break;case "sub":f=a.pop();g=a.pop();a.push(g-f);break;case "true":a.push(!0);
+break;case "truncate":g=a.pop();g=0>g?Math.ceil(g):Math.floor(g);a.push(g);break;case "xor":f=a.pop();g=a.pop();L(g)&&L(f)?a.push(g!=f):a.push(g^f);break;default:m("Unknown operator "+g)}return a.stack}};return b}(),Ca=function(){function b(a){this.lexer=a;this.operators=[];this.prev=this.token=null}b.prototype={nextToken:function(){this.prev=this.token;this.token=this.lexer.getToken()},accept:function(a){return this.token.type==a?(this.nextToken(),!0):!1},expect:function(a){if(this.accept(a))return!0;
+m("Unexpected symbol: found "+this.token.type+" expected "+a+".")},parse:function(){this.nextToken();this.expect(A.LBRACE);this.parseBlock();this.expect(A.RBRACE);return this.operators},parseBlock:function(){for(;;)if(this.accept(A.NUMBER))this.operators.push(this.prev.value);else if(this.accept(A.OPERATOR))this.operators.push(this.prev.value);else if(this.accept(A.LBRACE))this.parseCondition();else break},parseCondition:function(){var a=this.operators.length;this.operators.push(null,null);this.parseBlock();
+this.expect(A.RBRACE);if(this.accept(A.IF))this.operators[a]=this.operators.length,this.operators[a+1]="jz";else if(this.accept(A.LBRACE)){var c=this.operators.length;this.operators.push(null,null);var b=this.operators.length;this.parseBlock();this.expect(A.RBRACE);this.expect(A.IFELSE);this.operators[c]=this.operators.length;this.operators[c+1]="j";this.operators[a]=b;this.operators[a+1]="jz"}else m("PS Function: error parsing conditional.")}};return b}(),A={LBRACE:0,RBRACE:1,NUMBER:2,OPERATOR:3,
+IF:4,IFELSE:5},Q=function(){function b(a,b){this.type=a;this.value=b}var a={};b.getOperator=function(c){var e=a[c];return e?e:a[c]=new b(A.OPERATOR,c)};b.LBRACE=new b(A.LBRACE,"{");b.RBRACE=new b(A.RBRACE,"}");b.IF=new b(A.IF,"IF");b.IFELSE=new b(A.IFELSE,"IFELSE");return b}(),Ba=function(){function b(a){this.stream=a;this.nextChar()}b.prototype={nextChar:function(){return this.currentChar=this.stream.getByte()},getToken:function(){for(var a=!1,c=this.currentChar;;){if(0>c)return EOF;if(a){if(10===
+c||13===c)a=!1}else if(37==c)a=!0;else if(!Lexer.isSpace(c))break;c=this.nextChar()}switch(c|0){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return new Q(A.NUMBER,this.getNumber());case 123:return this.nextChar(),Q.LBRACE;case 125:return this.nextChar(),Q.RBRACE}for(a=String.fromCharCode(c);0<=(c=this.nextChar())&&(65<=c&&90>=c||97<=c&&122>=c);)a+=String.fromCharCode(c);switch(a.toLowerCase()){case "if":return Q.IF;case "ifelse":return Q.IFELSE;
+default:return Q.getOperator(a)}},getNumber:function(){for(var a=this.currentChar,c=String.fromCharCode(a);0<=(a=this.nextChar());)if(48<=a&&57>=a||45===a||46===a)c+=String.fromCharCode(a);else break;a=parseFloat(c);isNaN(a)&&m("Invalid floating point number: "+a);return a}};return b}(),H=function(){function b(a,b,d){var g=s.getAxialAlignedBoundingBox(b,d);b=g[0];d=g[1];var f=g[2],g=g[3];if(b===f||d===g)return[1,0,0,1,a[0],a[1]];f=(a[2]-a[0])/(f-b);g=(a[3]-a[1])/(g-d);return[f,0,0,g,a[0]-b*f,a[1]-
+d*g]}function a(a){if(a.data)this.data=a.data;else{var b=a.dict;a=this.data={};a.subtype=b.get("Subtype").name;var d=b.get("Rect");a.rect=s.normalizeRect(d);a.annotationFlags=b.get("F");d=b.get("C");B(d)&&3===d.length?a.color=d:a.color=[0,0,0];b.has("BS")?(d=b.get("BS"),a.borderWidth=d.has("W")?d.get("W"):1):(d=b.get("Border")||[0,0,1],a.borderWidth=d[2]||0);var g;d=b.get("AP");O(d)?(d=d.get("N"),O(d)?(b=b.get("AS"))&&d.has(b.name)&&(g=d.get(b.name)):g=d):g=void 0;this.appearance=g;a.hasAppearance=
+!!this.appearance}}a.prototype={getData:function(){return this.data},hasHtml:function(){return!1},getHtmlElement:function(a){throw new sa("getHtmlElement() should be implemented in subclass");},getEmptyContainer:function(a,b){U&&m("getEmptyContainer() should be called from main thread");b=b||this.data.rect;var d=document.createElement(a);d.style.width=Math.ceil(b[2]-b[0])+"px";d.style.height=Math.ceil(b[3]-b[1])+"px";return d},isViewable:function(){var a=this.data;return!(!a||a.annotationFlags&&a.annotationFlags&
+34||!a.rect)},loadResources:function(a){var b=new x;this.appearance.dict.getAsync("Resources").then(function(d){d?(new ObjectLoader(d.map,a,d.xref)).load().then(function(){b.resolve(d)}):b.resolve()}.bind(this));return b},getOperatorList:function(a){var e=new x;if(!this.appearance)return e.resolve(new OperatorList),e;var d=this.data,g=this.appearance.dict,f=this.loadResources("ExtGState ColorSpace Pattern Shading XObject Font".split(" ")),k=g.get("BBox")||[0,0,1,1],h=g.get("Matrix")||[1,0,0,1,0,0],
+l=b(d.rect,k,h);f.then(function(b){var f=new OperatorList;f.addOp("beginAnnotation",[d.rect,l,h]);a.getOperatorList(this.appearance,b,f);f.addOp("endAnnotation",[]);e.resolve(f)}.bind(this));return e}};a.getConstructor=function(c,b){if(c){if("Link"===c)return Ga;if("Text"===c)return Ha;if("Widget"===c){if(b)return"Tx"===b?Ia:aa}else return a}};a.fromData=function(c){var b=a.getConstructor(c.subtype,c.fieldType);if(b)return new b({data:c})};a.fromRef=function(c,b){var d=c.fetchIfRef(b);if(O(d)){var g=
+d.get("Subtype");if(g=M(g)?g.name:""){var f=s.getInheritableProperty(d,"FT"),f=M(f)?f.name:"";if(f=a.getConstructor(g,f)){d=new f({dict:d,ref:b});if(d.isViewable())return d;K("unimplemented annotation type: "+g)}}}};a.appendToOperatorList=function(a,b,d,g){var f=new x;d=[];for(var k=0,h=a.length;k<h;++k)d.push(a[k].getOperatorList(g));x.all(d).then(function(a){b.addOp("beginAnnotations",[]);for(var c=0,d=a.length;c<d;++c)b.addOpList(a[c]);b.addOp("endAnnotations",[]);f.resolve()},function(a){f.reject(a)});
+return f};return a}();PDFJS.Annotation=H;var aa=function(){function b(a){H.call(this,a);if(!a.data){var b=a.dict,d=this.data;d.fieldValue=T(s.getInheritableProperty(b,"V")||"");d.alternativeText=T(b.get("TU")||"");d.defaultAppearance=s.getInheritableProperty(b,"DA")||"";var g=s.getInheritableProperty(b,"FT");d.fieldType=M(g)?g.name:"";d.fieldFlags=s.getInheritableProperty(b,"Ff")||0;this.fieldResources=s.getInheritableProperty(b,"DR")||new Dict;var g=[],f=b;for(a=a.ref;f;){var b=f.get("Parent"),k=
+f.getRaw("Parent");if(f=f.get("T"))g.unshift(T(f));else{var f=b.get("Kids"),h,l;h=0;for(l=f.length;h<l;h++){var n=f[h];if(n.num==a.num&&n.gen==a.gen)break}g.unshift("`"+h)}f=b;a=k}d.fullName=g.join(".")}}var a=H.prototype;s.inherit(b,H,{isViewable:function(){return"Sig"===this.data.fieldType?(K("unimplemented annotation type: Widget signature"),!1):a.isViewable.call(this)}});return b}(),Ia=function(){function b(a){aa.call(this,a);a.data||(this.data.textAlignment=s.getInheritableProperty(a.dict,"Q"))}
+s.inherit(b,aa,{hasHtml:function(){return!this.data.hasAppearance&&!!this.data.fieldValue},getHtmlElement:function(a){U&&m("getHtmlElement() shall be called from main thread");var c=this.data,b=this.getEmptyContainer("div");b.style.display="table";var d=document.createElement("div");d.textContent=c.fieldValue;d.style.textAlign=["left","center","right"][c.textAlignment];d.style.verticalAlign="middle";d.style.display="table-cell";a=c.fontRefName?a.getData(c.fontRefName):null;var g=d.style;g.fontSize=
+c.fontSize+"px";g.direction=0>c.fontDirection?"rtl":"ltr";a&&(g.fontWeight=a.black?a.bold?"bolder":"bold":a.bold?"bold":"normal",g.fontStyle=a.italic?"italic":"normal",c=a.loadedName,g.fontFamily=(c?'"'+c+'", ':"")+(a.fallbackName||"Helvetica, sans-serif"));b.appendChild(d);return b},getOperatorList:function(a){if(this.appearance)return H.prototype.getOperatorList.call(this,a);var c=new x,b=new OperatorList,d=this.data,g=d.defaultAppearance;if(!g)return c.resolve(b),c;for(var f=Stream,k=g.length,
+h=new Uint8Array(k),l=0;l<k;++l)h[l]=g.charCodeAt(l)&255;g=new f(h);a.getOperatorList(g,this.fieldResources,b);a=b.fnArray;g=b.argsArray;d.rgb=[0,0,0];for(f=0;0>f;++f)k=a[f],h=g[f],"setFont"===k?(d.fontRefName=h[0],k=h[1],0>k?(d.fontDirection=-1,d.fontSize=-k):(d.fontDirection=1,d.fontSize=k)):"setFillRGBColor"===k?d.rgb=h:"setFillGray"===k&&(k=255*h[0],d.rgb=[k,k,k]);c.resolve(b);return c}});return b}(),Ha=function(){function b(a){H.call(this,a);if(!a.data){a=a.dict;var c=this.data,b=a.get("Contents"),
+d=a.get("T");c.content=T(b||"");c.title=T(d||"");c.name=a.has("Name")?a.get("Name").name:"Note"}}s.inherit(b,H,{getOperatorList:function(a){a=new x;a.resolve(new OperatorList);return a},hasHtml:function(){return!0},getHtmlElement:function(a){U&&m("getHtmlElement() shall be called from main thread");var c=this.data,b=c.rect;10>b[3]-b[1]&&(b[3]=b[1]+10);10>b[2]-b[0]&&(b[2]=b[0]+(b[3]-b[1]));var d=this.getEmptyContainer("section",b);d.className="annotText";a=document.createElement("img");a.style.height=
+d.style.height;var g=c.name;a.src=PDFJS.imageResourcesPath+"annotation-"+g.toLowerCase()+".svg";a.alt="[{{type}} Annotation]";a.dataset.l10nId="text_annotation_type";a.dataset.l10nArgs=JSON.stringify({type:g});var f=document.createElement("div");f.setAttribute("hidden",!0);var g=document.createElement("h1"),k=document.createElement("p");f.style.left=Math.floor(b[2]-b[0])+"px";f.style.top="0px";g.textContent=c.title;if(c.content||c.title){for(var b=document.createElement("span"),c=c.content.split(/(?:\r\n?|\n)/),
+h=0,l=c.length;h<l;++h)b.appendChild(document.createTextNode(c[h])),h<l-1&&b.appendChild(document.createElement("br"));k.appendChild(b);b=function(){d.style.zIndex+=1;f.removeAttribute("hidden")};c=function(a){if(a.toElement||a.relatedTarget)d.style.zIndex-=1,f.setAttribute("hidden",!0)};f.addEventListener("mouseover",b,!1);f.addEventListener("mouseout",c,!1);a.addEventListener("mouseover",b,!1);a.addEventListener("mouseout",c,!1)}else f.setAttribute("hidden",!0);f.appendChild(g);f.appendChild(k);
+d.appendChild(a);d.appendChild(f);return d}});return b}(),Ga=function(){function b(a){H.call(this,a);if(!a.data){var b=a.dict;a=this.data;var e=b.get("A");if(e)if(b=e.get("S").name,"URI"===b){var d=e.get("URI");Y(d,!1)||(d="");a.url=d}else"GoTo"===b?a.dest=e.get("D"):"GoToR"===b?(b=e.get("F"),O(b)&&(d=b.get("F")||""),Y(d,!1)||(d=""),a.url=d,a.dest=e.get("D")):"Named"===b?a.action=e.get("N").name:K("unrecognized link type: "+b);else b.has("Dest")&&(d=b.get("Dest"),a.dest=M(d)?d.name:d)}}s.inherit(b,
+H,{hasOperatorList:function(){return!1},hasHtml:function(){return!0},getHtmlElement:function(a){a=this.data.rect;var b=document.createElement("a"),e=this.data.borderWidth;b.style.borderWidth=e+"px";for(var d=this.data.color,g=[],f=0;3>f;++f)g[f]=Math.round(255*d[f]);b.style.borderColor=s.makeCssRgb(g);b.style.borderStyle="solid";d=a[3]-a[1]-2*e;b.style.width=a[2]-a[0]-2*e+"px";b.style.height=d+"px";b.href=this.data.url||"";return b}});return b}();PDFJS.maxImageSize=void 0===PDFJS.maxImageSize?-1:
+PDFJS.maxImageSize;PDFJS.disableFontFace=void 0===PDFJS.disableFontFace?!1:PDFJS.disableFontFace;PDFJS.getDocument=function(b,a,c,e){var d,g;"string"===typeof b?b={url:b}:"object"==typeof b&&null!==b&&void 0!==b&&"byteLength"in b?b={data:b}:"object"!==typeof b&&m("Invalid parameter in getDocument, need either Uint8Array, string or a parameter object");b.url||b.data||m("Invalid parameter array, need either .data or .url");var f={};for(d in b)f[d]="url"===d&&"undefined"!==typeof window?oa(window.location.href,
+b[d]):b[d];b=new PDFJS.Promise;d=new PDFJS.Promise;g=new Ja(b,d,a,e);b.then(function(){g.passwordCallback=c;g.fetchDocument(f)});return d};var Ka=function(){function b(a,b){this.pdfInfo=a;this.transport=b}b.prototype={get numPages(){return this.pdfInfo.numPages},get fingerprint(){return this.pdfInfo.fingerprint},get embeddedFontsUsed(){return this.transport.embeddedFontsUsed},getPage:function(a){return this.transport.getPage(a)},getDestinations:function(){return this.transport.getDestinations()},
+getJavaScript:function(){var a=new PDFJS.Promise;a.resolve(this.pdfInfo.javaScript);return a},getOutline:function(){var a=new PDFJS.Promise;a.resolve(this.pdfInfo.outline);return a},getMetadata:function(){var a=new PDFJS.Promise,b=this.pdfInfo.metadata;a.resolve({info:this.pdfInfo.info,metadata:b?new PDFJS.Metadata(b):null});return a},isEncrypted:function(){var a=new PDFJS.Promise;a.resolve(this.pdfInfo.encrypted);return a},getData:function(){var a=new PDFJS.Promise;this.transport.getData(a);return a},
+dataLoaded:function(){return this.transport.dataLoaded()},destroy:function(){this.transport.destroy()}};return b}(),Na=function(){function b(a,b){this.pageInfo=a;this.transport=b;this.stats=new ta;this.stats.enabled=!!v.PDFJS.enableStats;this.commonObjs=b.commonObjs;this.objs=new la;this.pendingDestroy=this.cleanupAfterRender=this.receivingOperatorList=!1;this.renderTasks=[]}b.prototype={get pageNumber(){return this.pageInfo.pageIndex+1},get rotate(){return this.pageInfo.rotate},get ref(){return this.pageInfo.ref},
+get view(){return this.pageInfo.view},getViewport:function(a,b){2>arguments.length&&(b=this.rotate);return new PDFJS.PageViewport(this.view,a,b,0,0)},getAnnotations:function(){if(this.annotationsPromise)return this.annotationsPromise;var a=new PDFJS.Promise;this.annotationsPromise=a;this.transport.getAnnotations(this.pageInfo.pageIndex);return a},render:function(a){function b(a){var c=f.renderTasks.indexOf(d);0<=c&&f.renderTasks.splice(c,1);f.cleanupAfterRender&&(f.pendingDestroy=!0);f._tryDestroy();
+a?g.reject(a):g.resolve();e.timeEnd("Rendering");e.timeEnd("Overall")}var e=this.stats;e.time("Overall");this.pendingDestroy=!1;this.displayReadyPromise||(this.receivingOperatorList=!0,this.displayReadyPromise=new x,this.operatorList={fnArray:[],argsArray:[],lastChunk:!1},this.stats.time("Page Request"),this.transport.messageHandler.send("RenderPageRequest",{pageIndex:this.pageNumber-1}));var d=new La(b,a,this.objs,this.commonObjs,this.operatorList,this.pageNumber);this.renderTasks.push(d);var g=
+new Ma(d),f=this;this.displayReadyPromise.then(function(a){f.pendingDestroy?b():(e.time("Rendering"),d.initalizeGraphics(a),d.operatorListChanged())},function(a){b(a)});return g},getTextContent:function(){var a=new PDFJS.Promise;this.transport.messageHandler.send("GetTextContent",{pageIndex:this.pageNumber-1},function(b){a.resolve(b)});return a},getOperationList:function(){var a=new PDFJS.Promise;a.resolve({dependencyFontsID:null,operatorList:null});return a},destroy:function(){this.pendingDestroy=
+!0;this._tryDestroy()},_tryDestroy:function(){this.pendingDestroy&&0===this.renderTasks.length&&!this.receivingOperatorList&&(delete this.operatorList,delete this.displayReadyPromise,this.objs.clear(),this.pendingDestroy=!1)},_startRenderPage:function(a){this.displayReadyPromise.resolve(a)},_renderPageChunk:function(a){s.concatenateToArray(this.operatorList.fnArray,a.fnArray);s.concatenateToArray(this.operatorList.argsArray,a.argsArray);this.operatorList.lastChunk=a.lastChunk;for(var b=0;b<this.renderTasks.length;b++)this.renderTasks[b].operatorListChanged();
+a.lastChunk&&(this.receivingOperatorList=!1,this._tryDestroy())}};return b}(),Ja=function(){function b(a,b,e,d){this.pdfDataRangeTransport=e;this.workerReadyPromise=b;this.progressCallback=d;this.commonObjs=new la;this.pageCache=[];this.pagePromises=[];this.embeddedFontsUsed=!1;this.passwordCallback=null;if(!v.PDFJS.disableWorker&&"undefined"!==typeof Worker){b=PDFJS.workerSrc;"undefined"===typeof b&&m("No PDFJS.workerSrc specified");try{var g=new Worker(b),f=new Z("main",g);this.messageHandler=f;
+f.on("test",function(b){b?(this.worker=g,this.setupMessageHandler(f)):(v.PDFJS.disableWorker=!0,this.setupFakeWorker());a.resolve()}.bind(this));var k=new Uint8Array(1);f.send("test",k);return}catch(h){S("The worker has been disabled.")}}v.PDFJS.disableWorker=!0;this.loadFakeWorkerFiles().then(function(){this.setupFakeWorker();a.resolve()}.bind(this))}b.prototype={destroy:function(){this.pageCache=[];this.pagePromises=[];var a=this;this.messageHandler.send("Terminate",null,function(){a.worker&&a.worker.terminate()})},
+loadFakeWorkerFiles:function(){PDFJS.fakeWorkerFilesLoadedPromise||(PDFJS.fakeWorkerFilesLoadedPromise=new x,s.loadScript(PDFJS.workerSrc,function(){PDFJS.fakeWorkerFilesLoadedPromise.resolve()}));return PDFJS.fakeWorkerFilesLoadedPromise},setupFakeWorker:function(){F("Setting up fake worker.");var a={postMessage:function(b){a.onmessage({data:b})},terminate:function(){}},b=new Z("main",a);this.setupMessageHandler(b);PDFJS.WorkerMessageHandler.setup(b)},setupMessageHandler:function(a){function b(c){a.send("UpdatePassword",
+c)}this.messageHandler=a;var e=this.pdfDataRangeTransport;e&&(e.addRangeListener(function(b,c){a.send("OnDataRange",{begin:b,chunk:c})}),e.addProgressListener(function(b){a.send("OnDataProgress",{loaded:b})}),a.on("RequestDataRange",function(a){e.requestDataRange(a.begin,a.end)},this));a.on("GetDoc",function(a){this.pdfDocument=a=new Ka(a.pdfInfo,this);this.workerReadyPromise.resolve(a)},this);a.on("NeedPassword",function(a){if(this.passwordCallback)return this.passwordCallback(b,ga.NEED_PASSWORD);
+this.workerReadyPromise.reject(a.exception.message,a.exception)},this);a.on("IncorrectPassword",function(a){if(this.passwordCallback)return this.passwordCallback(b,ga.INCORRECT_PASSWORD);this.workerReadyPromise.reject(a.exception.message,a.exception)},this);a.on("InvalidPDF",function(a){this.workerReadyPromise.reject(a.exception.name,a.exception)},this);a.on("MissingPDF",function(a){this.workerReadyPromise.reject(a.exception.message,a.exception)},this);a.on("UnknownError",function(a){this.workerReadyPromise.reject(a.exception.message,
+a.exception)},this);a.on("GetPage",function(a){a=a.pageInfo;var b=new Na(a,this);this.pageCache[a.pageIndex]=b;this.pagePromises[a.pageIndex].resolve(b)},this);a.on("GetAnnotations",function(a){this.pageCache[a.pageIndex].annotationsPromise.resolve(a.annotations)},this);a.on("StartRenderPage",function(a){var b=this.pageCache[a.pageIndex];b.stats.timeEnd("Page Request");b._startRenderPage(a.transparency)},this);a.on("RenderPageChunk",function(a){this.pageCache[a.pageIndex]._renderPageChunk(a.operatorList)},
+this);a.on("commonobj",function(a){var b=a[0],c=a[1];if(!this.commonObjs.hasData(b))switch(c){case "Font":a=a[2];var k;if("error"in a){var h=a.error;F("Error during font loading: "+h);this.commonObjs.resolve(b,h);break}else k=new Oa(a);R.bind([k],function(a){this.commonObjs.resolve(b,k)}.bind(this));break;case "FontPath":this.commonObjs.resolve(b,a[2]);break;default:h("Got unknown common object type "+c)}},this);a.on("obj",function(a){var b=a[0],c=a[2],k=this.pageCache[a[1]];if(!k.objs.hasData(b))switch(c){case "JpegStream":a=
+a[3];qa(b,a,k.objs);break;case "Image":a=a[3];k.objs.resolve(b,a);"data"in a&&8E6<a.data.length&&(k.cleanupAfterRender=!0);break;default:m("Got unknown object type "+c)}},this);a.on("DocProgress",function(a){this.progressCallback&&this.progressCallback({loaded:a.loaded,total:a.total})},this);a.on("DocError",function(a){this.workerReadyPromise.reject(a)},this);a.on("PageError",function(a){var b=this.pageCache[a.pageNum-1];b.displayReadyPromise?b.displayReadyPromise.reject(a.error):m(a.error)},this);
+a.on("JpegDecode",function(a,b){var c=a[0],k=a[1];3!=k&&1!=k&&m("Only 3 component or 1 component can be returned");var h=new Image;h.onload=function(){var a=h.width,c=h.height,f=a*c,d=4*f,f=new Uint8Array(f*k),e=ea(a,c).getContext("2d");e.drawImage(h,0,0);e=e.getImageData(0,0,a,c).data;if(3==k)for(var r=0,m=0;r<d;r+=4,m+=3)f[m]=e[r],f[m+1]=e[r+1],f[m+2]=e[r+2];else if(1==k)for(m=r=0;r<d;r+=4,m++)f[m]=e[r];b.resolve({data:f,width:a,height:c})}.bind(this);c="data:image/jpeg;base64,"+window.btoa(c);
+h.src=c})},fetchDocument:function(a){a.disableAutoFetch=PDFJS.disableAutoFetch;a.chunkedViewerLoading=!!this.pdfDataRangeTransport;this.messageHandler.send("GetDocRequest",{source:a,disableRange:PDFJS.disableRange,maxImageSize:PDFJS.maxImageSize,disableFontFace:PDFJS.disableFontFace})},getData:function(a){this.messageHandler.send("GetData",null,function(b){a.resolve(b)})},dataLoaded:function(){var a=new PDFJS.Promise;this.messageHandler.send("DataLoaded",null,function(b){a.resolve(b)});return a},
+getPage:function(a,b){var e=a-1;if(e in this.pagePromises)return this.pagePromises[e];b=new PDFJS.Promise("Page "+a);this.pagePromises[e]=b;this.messageHandler.send("GetPageRequest",{pageIndex:e});return b},getAnnotations:function(a){this.messageHandler.send("GetAnnotationsRequest",{pageIndex:a})},getDestinations:function(){var a=new PDFJS.Promise;this.messageHandler.send("GetDestinations",null,function(b){a.resolve(b)});return a}};return b}(),la=function(){function b(){this.objs={}}b.prototype={ensureObj:function(a){if(this.objs[a])return this.objs[a];
+var b={promise:new x(a),data:null,resolved:!1};return this.objs[a]=b},get:function(a,b){if(b)return this.ensureObj(a).promise.then(b),null;var e=this.objs[a];e&&e.resolved||m("Requesting object that isn't resolved yet "+a);return e.data},resolve:function(a,b){var e=this.ensureObj(a);e.resolved=!0;e.data=b;e.promise.resolve(b)},isResolved:function(a){var b=this.objs;return b[a]?b[a].resolved:!1},hasData:function(a){return this.isResolved(a)},getData:function(a){var b=this.objs;return b[a]&&b[a].resolved?
+b[a].data:null},clear:function(){this.objs={}}};return b}(),Ma=function(){function b(a){this.internalRenderTask=a;x.call(this)}b.prototype=Object.create(x.prototype);b.prototype.cancel=function(){this.internalRenderTask.cancel()};return b}(),La=function(){function b(a,b,e,d,g,f){this.callback=a;this.params=b;this.objs=e;this.commonObjs=d;this.operatorListIdx=null;this.operatorList=g;this.pageNumber=f;this.running=!1;this.graphicsReadyCallback=null;this.cancelled=this.graphicsReady=!1}b.prototype=
+{initalizeGraphics:function(a){if(!this.cancelled){PDFJS.pdfBug&&"StepperManager"in v&&v.StepperManager.enabled&&(this.stepper=v.StepperManager.create(this.pageNumber-1),this.stepper.init(this.operatorList),this.stepper.nextBreakPoint=this.stepper.getNextBreakPoint());var b=this.params;this.gfx=new ka(b.canvasContext,this.commonObjs,this.objs,b.textLayer,b.imageLayer);this.gfx.beginDrawing(b.viewport,a);this.operatorListIdx=0;this.graphicsReady=!0;this.graphicsReadyCallback&&this.graphicsReadyCallback()}},
+cancel:function(){this.running=!1;this.cancelled=!0;this.callback("cancelled")},operatorListChanged:function(){this.graphicsReady?(this.stepper&&this.stepper.updateOperatorList(this.operatorList),this.running||this._continue()):this.graphicsReadyCallback||(this.graphicsReadyCallback=this._continue.bind(this))},_continue:function(){this.running=!0;this.cancelled||(this.params.continueCallback?this.params.continueCallback(this._next.bind(this)):this._next())},_next:function(){this.cancelled||(this.operatorListIdx=
+this.gfx.executeOperatorList(this.operatorList,this.operatorListIdx,this._continue.bind(this),this.stepper),this.operatorListIdx===this.operatorList.fnArray.length&&(this.running=!1,this.operatorList.lastChunk&&(this.gfx.endDrawing(),this.callback())))}};return b}();PDFJS.Metadata=function(){function b(a){return a.replace(/>\\376\\377([^<]+)/g,function(a,b){for(var c=b.replace(/\\([0-3])([0-7])([0-7])/g,function(a,b,c,f){return String.fromCharCode(64*b+8*c+1*f)}),f="",k=0;k<c.length;k+=2)var h=256*
+c.charCodeAt(k)+c.charCodeAt(k+1),f=f+("&#x"+(65536+h).toString(16).substring(1)+";");return">"+f})}function a(a){"string"===typeof a?(a=b(a),a=(new DOMParser).parseFromString(a,"application/xml")):a instanceof Document||m("Metadata: Invalid metadata object");this.metaDocument=a;this.metadata={};this.parse()}a.prototype={parse:function(){var a=this.metaDocument.documentElement;if("rdf:rdf"!==a.nodeName.toLowerCase())for(a=a.firstChild;a&&"rdf:rdf"!==a.nodeName.toLowerCase();)a=a.nextSibling;var b=
+a?a.nodeName.toLowerCase():null;if(a&&"rdf:rdf"===b&&a.hasChildNodes()){var a=a.childNodes,d,g,f,k,h,l;f=0;for(h=a.length;f<h;f++)if(b=a[f],"rdf:description"===b.nodeName.toLowerCase())for(k=0,l=b.childNodes.length;k<l;k++)"#text"!==b.childNodes[k].nodeName.toLowerCase()&&(d=b.childNodes[k],g=d.nodeName.toLowerCase(),this.metadata[g]=d.textContent.trim())}},get:function(a){return this.metadata[a]||null},has:function(a){return"undefined"!==typeof this.metadata[a]}};return a}();var G=function(){var b=
+{};return{getCanvas:function(a,c,e,d){a in b?(a=b[a],a.canvas.width=c,a.canvas.height=e,a.context.setTransform(1,0,0,1,0,0)):(c=ea(c,e),e=c.getContext("2d"),d&&fa(e),b[a]=a={canvas:c,context:e});return a},clear:function(){b={}}}}(),ma=function(){function b(a){this.alphaIsShape=!1;this.fontSize=0;this.fontSizeScale=1;this.textMatrix=ha;this.fontMatrix=$;this.wordSpacing=this.charSpacing=this.lineY=this.lineX=this.y=this.x=this.leading=0;this.textHScale=1;this.textRenderingMode=V;this.textRise=0;this.fillColorSpace=
+p.singletons.gray;this.fillColorSpaceObj=null;this.strokeColorSpace=p.singletons.gray;this.strokeColorObj=this.fillColorObj=this.strokeColorSpaceObj=null;this.strokeColor=this.fillColor="#000000";this.lineWidth=this.strokeAlpha=this.fillAlpha=1;this.paintFormXObjectDepth=0;this.old=a}b.prototype={clone:function(){return Object.create(this)},setCurrentPoint:function(a,b){this.x=a;this.y=b}};return b}(),ka=function(){function b(a,b,c,d,e){this.ctx=a;this.current=new ma;this.stateStack=[];this.pendingClip=
+null;this.pendingEOFill=!1;this.xobjs=this.res=null;this.commonObjs=b;this.objs=c;this.textLayer=d;this.imageLayer=e;this.groupStack=[];this.baseTransform=this.processingType3=null;this.baseTransformStack=[];this.groupLevel=0;a&&fa(a)}function a(a,b){if("undefined"!==typeof ImageData&&b instanceof ImageData)a.putImageData(b,0,0);else{var c=a.createImageData(b.width,b.height),d=b.data,e=c.data;if("set"in e)e.set(d);else for(var g=0,y=e.length;g<y;g++)e[g]=d[g];a.putImageData(c,0,0)}}var c=["butt",
+"round","square"],e=["miter","round","bevel"],d={},g={};b.prototype={slowCommands:{stroke:!0,closeStroke:!0,fill:!0,eoFill:!0,fillStroke:!0,eoFillStroke:!0,closeFillStroke:!0,closeEOFillStroke:!0,showText:!0,showSpacedText:!0,setStrokeColorSpace:!0,setFillColorSpace:!0,setStrokeColor:!0,setStrokeColorN:!0,setFillColor:!0,setFillColorN:!0,setStrokeGray:!0,setFillGray:!0,setStrokeRGBColor:!0,setFillRGBColor:!0,setStrokeCMYKColor:!0,setFillCMYKColor:!0,paintJpegXObject:!0,paintImageXObject:!0,paintInlineImageXObject:!0,
+paintInlineImageXObjectGroup:!0,paintImageMaskXObject:!0,paintImageMaskXObjectGroup:!0,shadingFill:!0},beginDrawing:function(a,b){var c=this.ctx.canvas.width,d=this.ctx.canvas.height;b?this.ctx.clearRect(0,0,c,d):(this.ctx.mozOpaque=!0,this.ctx.save(),this.ctx.fillStyle="rgb(255, 255, 255)",this.ctx.fillRect(0,0,c,d),this.ctx.restore());c=a.transform;this.baseTransform=c.slice();this.ctx.save();this.ctx.transform.apply(this.ctx,c);this.textLayer&&this.textLayer.beginLayout();this.imageLayer&&this.imageLayer.beginLayout()},
+executeOperatorList:function(a,b,c,d){var e=a.argsArray;a=a.fnArray;b=b||0;var g=e.length;if(g==b)return b;for(var y=Date.now()+15,q=this.commonObjs,r=this.objs,m,u=this.slowCommands;;){if(d&&b===d.nextBreakPoint)return d.breakIt(b,c),b;m=a[b];if("dependency"!==m)this[m].apply(this,e[b]);else for(var s=e[b],p=0,E=s.length;p<E;p++){var z=s[p],v="g_"==z.substring(0,2);if(!v&&!r.isResolved(z))return r.get(z,c),b;if(v&&!q.isResolved(z))return q.get(z,c),b}b++;if(b==g)return b;if(c&&u[m]&&Date.now()>y)return setTimeout(c,
+0),b}},endDrawing:function(){this.ctx.restore();G.clear();this.textLayer&&this.textLayer.endLayout();this.imageLayer&&this.imageLayer.endLayout()},setLineWidth:function(a){this.current.lineWidth=a;this.ctx.lineWidth=a},setLineCap:function(a){this.ctx.lineCap=c[a]},setLineJoin:function(a){this.ctx.lineJoin=e[a]},setMiterLimit:function(a){this.ctx.miterLimit=a},setDash:function(a,b){var c=this.ctx;"setLineDash"in c?(c.setLineDash(a),c.lineDashOffset=b):(c.mozDash=a,c.mozDashOffset=b)},setRenderingIntent:function(a){},
+setFlatness:function(a){},setGState:function(a){for(var b=0,c=a.length;b<c;b++){var d=a[b],e=d[1];switch(d[0]){case "LW":this.setLineWidth(e);break;case "LC":this.setLineCap(e);break;case "LJ":this.setLineJoin(e);break;case "ML":this.setMiterLimit(e);break;case "D":this.setDash(e[0],e[1]);break;case "RI":this.setRenderingIntent(e);break;case "FL":this.setFlatness(e);break;case "Font":this.setFont(e[0],e[1]);break;case "CA":this.current.strokeAlpha=d[1];break;case "ca":this.current.fillAlpha=d[1];
+this.ctx.globalAlpha=d[1];break;case "BM":e&&e.name&&"Normal"!==e.name?(d=e.name.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()}).substring(1),this.ctx.globalCompositeOperation=d,this.ctx.globalCompositeOperation!==d&&F('globalCompositeOperation "'+d+'" is not supported')):this.ctx.globalCompositeOperation="source-over"}}},save:function(){this.ctx.save();var a=this.current;this.stateStack.push(a);this.current=a.clone()},restore:function(){var a=this.stateStack.pop();a&&(this.current=a,this.ctx.restore())},
+transform:function(a,b,c,d,e,g){this.ctx.transform(a,b,c,d,e,g)},moveTo:function(a,b){this.ctx.moveTo(a,b);this.current.setCurrentPoint(a,b)},lineTo:function(a,b){this.ctx.lineTo(a,b);this.current.setCurrentPoint(a,b)},curveTo:function(a,b,c,d,e,g){this.ctx.bezierCurveTo(a,b,c,d,e,g);this.current.setCurrentPoint(e,g)},curveTo2:function(a,b,c,d){var e=this.current;this.ctx.bezierCurveTo(e.x,e.y,a,b,c,d);e.setCurrentPoint(c,d)},curveTo3:function(a,b,c,d){this.curveTo(a,b,c,d,c,d);this.current.setCurrentPoint(c,
+d)},closePath:function(){this.ctx.closePath()},rectangle:function(a,b,c,d){this.ctx.rect(a,b,c,d)},stroke:function(a){a="undefined"!==typeof a?a:!0;var b=this.ctx,c=this.current.strokeColor;0===this.current.lineWidth&&(b.lineWidth=this.getSinglePixelWidth());b.globalAlpha=this.current.strokeAlpha;c&&c.hasOwnProperty("type")&&"Pattern"===c.type?(b.save(),b.strokeStyle=c.getPattern(b,this),b.stroke(),b.restore()):b.stroke();a&&this.consumePath();b.globalAlpha=this.current.fillAlpha},closeStroke:function(){this.closePath();
+this.stroke()},fill:function(a){a="undefined"!==typeof a?a:!0;var b=this.ctx,c=this.current.fillColor,d=!1;c&&c.hasOwnProperty("type")&&"Pattern"===c.type&&(b.save(),b.fillStyle=c.getPattern(b,this),d=!0);if(this.pendingEOFill){if("mozFillRule"in this.ctx)this.ctx.mozFillRule="evenodd",this.ctx.fill(),this.ctx.mozFillRule="nonzero";else try{this.ctx.fill("evenodd")}catch(e){this.ctx.fill()}this.pendingEOFill=!1}else this.ctx.fill();d&&b.restore();a&&this.consumePath()},eoFill:function(){this.pendingEOFill=
+!0;this.fill()},fillStroke:function(){this.fill(!1);this.stroke(!1);this.consumePath()},eoFillStroke:function(){this.pendingEOFill=!0;this.fillStroke()},closeFillStroke:function(){this.closePath();this.fillStroke()},closeEOFillStroke:function(){this.pendingEOFill=!0;this.closePath();this.fillStroke()},endPath:function(){this.consumePath()},clip:function(){this.pendingClip=d},eoClip:function(){this.pendingClip=g},beginText:function(){this.current.textMatrix=ha;this.current.x=this.current.lineX=0;this.current.y=
+this.current.lineY=0},endText:function(){if("pendingTextPaths"in this){var a=this.pendingTextPaths,b=this.ctx;b.save();b.beginPath();for(var c=0;c<a.length;c++){var d=a[c];b.setTransform.apply(b,d.transform);b.translate(d.x,d.y);d.addToPath(b,d.fontSize)}b.restore();b.clip();b.beginPath();delete this.pendingTextPaths}else this.ctx.beginPath()},setCharSpacing:function(a){this.current.charSpacing=a},setWordSpacing:function(a){this.current.wordSpacing=a},setHScale:function(a){this.current.textHScale=
+a/100},setLeading:function(a){this.current.leading=-a},setFont:function(a,b){var c=this.commonObjs.get(a),d=this.current;c||m("Can't find font for "+a);d.fontMatrix=c.fontMatrix?c.fontMatrix:$;0!==d.fontMatrix[0]&&0!==d.fontMatrix[3]||F("Invalid font matrix for font "+a);0>b?(b=-b,d.fontDirection=-1):d.fontDirection=1;this.current.font=c;this.current.fontSize=b;if(!c.coded){var d=c.black?c.bold?"bolder":"bold":c.bold?"bold":"normal",e=c.italic?"italic":"normal",c='"'+(c.loadedName||"sans-serif")+
+'", '+c.fallbackName,g=16<=b?b:16;this.current.fontSizeScale=16!=g?1:b/16;this.ctx.font=e+" "+d+" "+g+"px "+c}},setTextRenderingMode:function(a){this.current.textRenderingMode=a},setTextRise:function(a){this.current.textRise=a},moveText:function(a,b){this.current.x=this.current.lineX+=a;this.current.y=this.current.lineY+=b},setLeadingMoveText:function(a,b){this.setLeading(-b);this.moveText(a,b)},setTextMatrix:function(a,b,c,d,e,g){this.current.textMatrix=[a,b,c,d,e,g];this.current.x=this.current.lineX=
+0;this.current.y=this.current.lineY=0},nextLine:function(){this.moveText(0,this.current.leading)},applyTextTransforms:function(){var a=this.ctx,b=this.current;a.transform.apply(a,b.textMatrix);a.translate(b.x,b.y+b.textRise);0<b.fontDirection?a.scale(b.textHScale,-1):a.scale(-b.textHScale,1)},createTextGeometry:function(){var a={},b=this.current.font,c=this.ctx.mozCurrentTransform,d=c[0],e=c[1],g=c[2],m=c[3],q=c[4],c=c[5],r=0<=d?Math.sqrt(d*d+e*e):-Math.sqrt(d*d+e*e),g=0<=m?Math.sqrt(g*g+m*m):-Math.sqrt(g*
+g+m*m),d=Math.atan2(e,d);a.x=q;a.y=c;a.hScale=r;a.vScale=g;a.angle=d;a.spaceWidth=b.spaceWidth;a.fontName=b.loadedName;a.fontFamily=b.fallbackName;a.fontSize=this.current.fontSize;return a},paintChar:function(a,b,c){var d=this.ctx,e=this.current,g=e.font,m=e.fontSize/e.fontSizeScale,q=e.textRenderingMode,e=q&3,q=!!(q&4),r;if(g.disableFontFace||q)r=g.getPathGenerator(this.commonObjs,a);g.disableFontFace?(d.save(),d.translate(b,c),d.beginPath(),r(d,m),e!==V&&2!==e||d.fill(),1!==e&&2!==e||d.stroke(),
+d.restore()):(e!==V&&2!==e||d.fillText(a,b,c),1!==e&&2!==e||d.strokeText(a,b,c));q&&(this.pendingTextPaths||(this.pendingTextPaths=[])).push({transform:d.mozCurrentTransform,x:b,y:c,fontSize:m,addToPath:r})},showText:function(a,b){var c=this.ctx,d=this.current,e=d.font,g=d.fontSize,m=d.fontSizeScale,q=d.charSpacing,r=d.wordSpacing,p=d.textHScale*d.fontDirection,u=d.fontMatrix||$,w=a.length,v,E=this.textLayer&&!b?!0:!1,z=0,A=e.vertical,F=e.defaultVMetrics;if(e.coded){c.save();c.transform.apply(c,d.textMatrix);
+c.translate(d.x,d.y);c.scale(p,1);E&&(this.save(),c.scale(1,-1),v=this.createTextGeometry(),this.restore());for(var I=0;I<w;++I){var C=a[I];if(null===C)this.ctx.translate(r,0),d.x+=r*p;else{this.processingType3=C;this.save();c.scale(g,g);c.transform.apply(c,u);this.executeOperatorList(C.operatorList);this.restore();var x=(s.applyTransform([C.width,0],u)[0]*g+q)*d.fontDirection;c.translate(x,0);d.x+=x*p;z+=x}}c.restore();this.processingType3=null}else{c.save();this.applyTextTransforms();var I=d.lineWidth,
+u=d.textMatrix[0],B=d.textMatrix[1],u=Math.sqrt(u*u+B*B),I=0===u||0===I?this.getSinglePixelWidth():I/u;E&&(v=this.createTextGeometry());1!=m&&(c.scale(m,m),I/=m);c.lineWidth=I;for(I=u=0;I<w;++I)if(C=a[I],null===C)u+=d.fontDirection*r;else{var B=!1,H=C.fontChar,D=C.vmetric||F;if(A)var L=C.vmetric?D[1]:0.5*C.width,L=-L*g*d.fontMatrix[0],M=D[2]*g*d.fontMatrix[0];var x=D?-D[0]:C.width,D=x*g*d.fontMatrix[0]+q*d.fontDirection,G=C.accent,J,K;C.disabled||(A?(C=L/m,J=(u+M)/m):(C=u/m,J=0),e.remeasure&&0<x&&
+(B=1E3*c.measureText(H).width/d.fontSize*d.fontSizeScale,x/=B,B=!0,c.save(),c.scale(x,1),C/=x,G&&(K/=x)),this.paintChar(H,C,J),G&&(K=C+G.offset.x/m,H=J-G.offset.y/m,this.paintChar(G.fontChar,K,H)));u+=D;z+=D;B&&c.restore()}A?d.y-=u*p:d.x+=u*p;c.restore()}E&&(v.canvasWidth=z,A&&(v.angle+=Math.PI/2),this.textLayer.appendText(v));return z},showSpacedText:function(a){var b=this.ctx,c=this.current,d=c.fontSize,e=0.0010*c.textHScale*c.fontDirection,g=a.length,m,q=0,r=this.textLayer?!0:!1,s=c.font.vertical,
+u=0;r&&(b.save(),this.applyTextTransforms(),m=this.createTextGeometry(),b.restore());for(b=0;b<g;++b){var p=a[b];"number"==typeof p?(p=-p*d*e,s?c.y+=p:c.x+=p,r&&(u+=p)):(p=this.showText(p,!0),r&&(q+=u+p,u=0))}r&&(m.canvasWidth=q,s&&(m.angle+=Math.PI/2),this.textLayer.appendText(m))},nextLineShowText:function(a){this.nextLine();this.showText(a)},nextLineSetSpacingShowText:function(a,b,c){this.setWordSpacing(a);this.setCharSpacing(b);this.nextLineShowText(c)},setCharWidth:function(a,b){},setCharWidthAndBounds:function(a,
+b,c,d,e,g){this.rectangle(c,d,e-c,g-d);this.clip();this.endPath()},setStrokeColorSpace:function(a){this.current.strokeColorSpace=p.fromIR(a)},setFillColorSpace:function(a){this.current.fillColorSpace=p.fromIR(a)},setStrokeColor:function(){var a=this.current.strokeColorSpace.getRgb(arguments,0),a=s.makeCssRgb(a);this.ctx.strokeStyle=a;this.current.strokeColor=a},getColorN_Pattern:function(a,b){if("TilingPattern"==a[0]){var c=a[1],d=b.base,e;d&&(e=d.getRgb(c,0));c=new Aa(a,e,this.ctx,this.objs,this.commonObjs,
+this.baseTransform)}else"RadialAxial"==a[0]||"Dummy"==a[0]?c=ja.shadingFromIR(a):m("Unkown IR type "+a[0]);return c},setStrokeColorN:function(){var a=this.current.strokeColorSpace;"Pattern"==a.name?this.current.strokeColor=this.getColorN_Pattern(arguments,a):this.setStrokeColor.apply(this,arguments)},setFillColor:function(){var a=this.current.fillColorSpace.getRgb(arguments,0),a=s.makeCssRgb(a);this.ctx.fillStyle=a;this.current.fillColor=a},setFillColorN:function(){var a=this.current.fillColorSpace;
+"Pattern"==a.name?this.current.fillColor=this.getColorN_Pattern(arguments,a):this.setFillColor.apply(this,arguments)},setStrokeGray:function(a){this.current.strokeColorSpace=p.singletons.gray;var b=this.current.strokeColorSpace.getRgb(arguments,0),b=s.makeCssRgb(b);this.ctx.strokeStyle=b;this.current.strokeColor=b},setFillGray:function(a){this.current.fillColorSpace=p.singletons.gray;var b=this.current.fillColorSpace.getRgb(arguments,0),b=s.makeCssRgb(b);this.ctx.fillStyle=b;this.current.fillColor=
+b},setStrokeRGBColor:function(a,b,c){this.current.strokeColorSpace=p.singletons.rgb;var d=this.current.strokeColorSpace.getRgb(arguments,0),d=s.makeCssRgb(d);this.ctx.strokeStyle=d;this.current.strokeColor=d},setFillRGBColor:function(a,b,c){this.current.fillColorSpace=p.singletons.rgb;var d=this.current.fillColorSpace.getRgb(arguments,0),d=s.makeCssRgb(d);this.ctx.fillStyle=d;this.current.fillColor=d},setStrokeCMYKColor:function(a,b,c,d){this.current.strokeColorSpace=p.singletons.cmyk;var e=s.makeCssCmyk(arguments);
+this.ctx.strokeStyle=e;this.current.strokeColor=e},setFillCMYKColor:function(a,b,c,d){this.current.fillColorSpace=p.singletons.cmyk;var e=s.makeCssCmyk(arguments);this.ctx.fillStyle=e;this.current.fillColor=e},shadingFill:function(a){var b=this.ctx;this.save();a=ja.shadingFromIR(a);b.fillStyle=a.getPattern(b,this);var c=b.mozCurrentTransformInverse;if(c){var b=b.canvas,d=b.width,e=b.height,b=s.applyTransform([0,0],c);a=s.applyTransform([0,e],c);var g=s.applyTransform([d,0],c),m=s.applyTransform([d,
+e],c),c=Math.min(b[0],a[0],g[0],m[0]),d=Math.min(b[1],a[1],g[1],m[1]),e=Math.max(b[0],a[0],g[0],m[0]),b=Math.max(b[1],a[1],g[1],m[1]);this.ctx.fillRect(c,d,e-c,b-d)}else this.ctx.fillRect(-1E10,-1E10,2E10,2E10);this.restore()},beginInlineImage:function(){m("Should not call beginInlineImage")},beginImageData:function(){m("Should not call beginImageData")},paintFormXObjectBegin:function(a,b){this.save();this.current.paintFormXObjectDepth++;this.baseTransformStack.push(this.baseTransform);a&&B(a)&&6==
+a.length&&this.transform.apply(this,a);this.baseTransform=this.ctx.mozCurrentTransform;b&&B(b)&&4==b.length&&(this.rectangle(b[0],b[1],b[2]-b[0],b[3]-b[1]),this.clip(),this.endPath())},paintFormXObjectEnd:function(){var a=this.current.paintFormXObjectDepth;do this.restore();while(this.current.paintFormXObjectDepth>=a);this.baseTransform=this.baseTransformStack.pop()},beginGroup:function(a){this.save();var b=this.ctx;a.isolated||S("TODO: Support non-isolated groups.");a.knockout&&K("Support knockout groups.");
+var c=b.mozCurrentTransform;a.matrix&&b.transform.apply(b,a.matrix);a.bbox||m("Bounding box is required.");var d=s.getAxialAlignedBoundingBox(a.bbox,b.mozCurrentTransform);a=Math.max(Math.ceil(d[2]-d[0]),1);var e=Math.max(Math.ceil(d[3]-d[1]),1);a=G.getCanvas("groupAt"+this.groupLevel,a,e,!0).context;e=d[0];d=d[1];a.translate(-e,-d);a.transform.apply(a,c);b.setTransform(1,0,0,1,0,0);b.translate(e,d);c="strokeStyle fillStyle fillRule globalAlpha lineWidth lineCap lineJoin miterLimit globalCompositeOperation font".split(" ");
+d=0;for(e=c.length;d<e;d++){var g=c[d];g in b&&(a[g]=b[g])}"setLineDash"in b?(a.setLineDash(b.getLineDash()),a.lineDashOffset=b.lineDashOffset):"mozDash"in b&&(a.mozDash=b.mozDash,a.mozDashOffset=b.mozDashOffset);this.ctx=a;this.setGState([["SMask","None"],["BM","Normal"],["ca",1],["CA",1]]);this.groupStack.push(b);this.groupLevel++},endGroup:function(a){this.groupLevel--;a=this.ctx;this.ctx=this.groupStack.pop();"imageSmoothingEnabled"in this.ctx?this.ctx.imageSmoothingEnabled=!1:this.ctx.mozImageSmoothingEnabled=
+!1;this.ctx.drawImage(a.canvas,0,0);this.restore()},beginAnnotations:function(){this.save();this.current=new ma},endAnnotations:function(){this.restore()},beginAnnotation:function(a,b,c){this.save();a&&B(a)&&4==a.length&&(this.rectangle(a[0],a[1],a[2]-a[0],a[3]-a[1]),this.clip(),this.endPath());this.transform.apply(this,b);this.transform.apply(this,c)},endAnnotation:function(){this.restore()},paintJpegXObject:function(a,b,c){var d=this.objs.get(a);d||m("Dependent image isn't ready yet");this.save();
+var e=this.ctx;e.scale(1/b,-1/c);e.drawImage(d,0,0,d.width,d.height,0,-c,b,c);this.imageLayer&&(d=e.mozCurrentTransformInverse,e=this.getCanvasPosition(0,0),this.imageLayer.appendImage({objId:a,left:e[0],top:e[1],width:b/d[0],height:c/d[3]}));this.restore()},paintImageMaskXObject:function(b){var c=this.ctx,d=b.width,e=b.height,g=this.processingType3;!g||"compiled"in g||(g.compiled=1E3>=d&&1E3>=e?ra({data:b.data,width:d,height:e}):null);g&&g.compiled?g.compiled(c):(c=G.getCanvas("maskCanvas",d,e),
+g=c.context,g.save(),a(g,b),g.globalCompositeOperation="source-in",b=this.current.fillColor,g.fillStyle=b&&b.hasOwnProperty("type")&&"Pattern"===b.type?b.getPattern(g,this):b,g.fillRect(0,0,d,e),g.restore(),this.paintInlineImageXObject(c.canvas))},paintImageMaskXObjectGroup:function(b){for(var c=this.ctx,d=0,e=b.length;d<e;d++){var g=b[d],m=g.width,p=g.height,q=G.getCanvas("maskCanvas",m,p),r=q.context;r.save();a(r,g);r.globalCompositeOperation="source-in";var s=this.current.fillColor;r.fillStyle=
+s&&s.hasOwnProperty("type")&&"Pattern"===s.type?s.getPattern(r,this):s;r.fillRect(0,0,m,p);r.restore();c.save();c.transform.apply(c,g.transform);c.scale(1,-1);c.drawImage(q.canvas,0,0,m,p,0,-1,1,1);c.restore()}},paintImageXObject:function(a){(a=this.objs.get(a))||m("Dependent image isn't ready yet");this.paintInlineImageXObject(a)},paintInlineImageXObject:function(b){var c=b.width,d=b.height,e=this.ctx;this.save();e.scale(1/c,-1/d);var g=e.mozCurrentTransformInverse,m=g[0],p=g[1],m=Math.max(Math.sqrt(m*
+m+p*p),1),p=g[2],q=g[3],p=Math.max(Math.sqrt(p*p+q*q),1);if(b instanceof HTMLElement)q=b;else{var r=G.getCanvas("inlineImage",c,d),s=r.context;a(s,b);q=r.canvas}for(var u=c,w=d,v="prescale1";2<m&&1<u||2<p&&1<w;){var x=u,z=w;2<m&&1<u&&(x=Math.ceil(u/2),m/=u/x);2<p&&1<w&&(z=Math.ceil(w/2),p/=w/z);r=G.getCanvas(v,x,z);s=r.context;s.clearRect(0,0,x,z);s.drawImage(q,0,0,u,w,0,0,x,z);q=r.canvas;u=x;w=z;v="prescale1"===v?"prescale2":"prescale1"}e.drawImage(q,0,0,u,w,0,-d,c,d);this.imageLayer&&(e=this.getCanvasPosition(0,
+-d),this.imageLayer.appendImage({imgData:b,left:e[0],top:e[1],width:c/g[0],height:d/g[3]}));this.restore()},paintInlineImageXObjectGroup:function(b,c){var d=this.ctx,e=b.width,g=b.height,m=G.getCanvas("inlineImage",e,g);a(m.context,b);for(var p=0,q=c.length;p<q;p++){var r=c[p];d.save();d.transform.apply(d,r.transform);d.scale(1,-1);d.drawImage(m.canvas,r.x,r.y,r.w,r.h,0,-1,1,1);this.imageLayer&&(r=this.getCanvasPosition(r.x,r.y),this.imageLayer.appendImage({imgData:b,left:r[0],top:r[1],width:e,height:g}));
+d.restore()}},markPoint:function(a){},markPointProps:function(a,b){},beginMarkedContent:function(a){},beginMarkedContentProps:function(a,b){},endMarkedContent:function(){},beginCompat:function(){},endCompat:function(){},consumePath:function(){if(this.pendingClip){if(this.pendingClip==g)if("mozFillRule"in this.ctx)this.ctx.mozFillRule="evenodd",this.ctx.clip(),this.ctx.mozFillRule="nonzero";else try{this.ctx.clip("evenodd")}catch(a){this.ctx.clip()}else this.ctx.clip();this.pendingClip=null}this.ctx.beginPath()},
+getSinglePixelWidth:function(a){a=this.ctx.mozCurrentTransformInverse;return Math.sqrt(Math.max(a[0]*a[0]+a[1]*a[1],a[2]*a[2]+a[3]*a[3]))},getCanvasPosition:function(a,b){var c=this.ctx.mozCurrentTransform;return[c[0]*a+c[2]*b+c[4],c[1]*a+c[3]*b+c[5]]}};return b}();PDFJS.disableFontFace=!1;var R={insertRule:function(b){var a=document.getElementById("PDFJS_FONT_STYLE_TAG");a||(a=document.createElement("style"),a.id="PDFJS_FONT_STYLE_TAG",document.documentElement.getElementsByTagName("head")[0].appendChild(a));
+a=a.sheet;a.insertRule(b,a.cssRules.length)},get loadTestFont(){return W(this,"loadTestFont",atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 AAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA=="))},
+loadTestFontId:0,loadingContext:{requests:[],nextRequestId:0},isSyncFontLoadingSupported:function(){if(U)return!1;var b=/Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(window.navigator.userAgent);return b&&14<=b[1]?!0:!1}(),bind:function(b,a){U&&m("bind() shall be called from main thread");for(var c=[],e=[],d=0,g=b.length;d<g;d++){var f=b[d];if(!f.attached&&!1!==f.loading){f.attached=!0;var k=f.bindDOM();k&&(c.push(k),e.push(f))}}d=R.queueLoadingCallback(a);0<c.length&&!this.isSyncFontLoadingSupported?R.prepareFontLoadEvent(c,
+e,d):d.complete()},queueLoadingCallback:function(b){var a=R.loadingContext,c={id:"pdfjs-font-loading-"+a.nextRequestId++,complete:function(){c.end&&m("completeRequest() cannot be called twice");for(c.end=Date.now();0<a.requests.length&&a.requests[0].end;){var b=a.requests.shift();setTimeout(b.callback,0)}},callback:b,started:Date.now()};a.requests.push(c);return c},prepareFontLoadEvent:function(b,a,c){function e(a,b){return a.charCodeAt(b)<<24|a.charCodeAt(b+1)<<16|a.charCodeAt(b+2)<<8|a.charCodeAt(b+
+3)&255}function d(a,b,c,d){a=m.substr(0,b);b=m.substr(b+c);return a+d+b}function g(a,b){l++;30<l?(F("Load test font never loaded."),b()):(h.font="30px "+a,h.fillText(".",0,20),0<h.getImageData(0,0,1,1).data[3]?b():setTimeout(g.bind(null,a,b)))}var f,k;b=document.createElement("canvas");b.width=1;b.height=1;var h=b.getContext("2d"),l=0;b="lt"+Date.now()+this.loadTestFontId++;var m=this.loadTestFont,m=d(m,976,b.length,b),p=e(m,16);f=0;for(k=b.length-3;f<k;f+=4)p=p-1482184792+e(b,f)|0;f<b.length&&(p=
+p-1482184792+e(b+"XXX",f)|0);m=d(m,16,4,String.fromCharCode(p>>24&255)+String.fromCharCode(p>>16&255)+String.fromCharCode(p>>8&255)+String.fromCharCode(p&255));f="url(data:font/opentype;base64,"+btoa(m)+");";R.insertRule('@font-face { font-family:"'+b+'";src:'+f+"}");p=[];f=0;for(k=a.length;f<k;f++)p.push(a[f].loadedName);p.push(b);var s=document.createElement("div");s.setAttribute("style","visibility: hidden;width: 10px; height: 10px;position: absolute; top: 0px; left: 0px;");f=0;for(k=p.length;f<
+k;++f)a=document.createElement("span"),a.textContent="Hi",a.style.fontFamily=p[f],s.appendChild(a);document.body.appendChild(s);g(b,function(){document.body.removeChild(s);c.complete()})}},Oa=function(){function b(a,b,e){this.compiledGlyphs={};if(1===arguments.length){var d=arguments[0],g;for(g in d)this[g]=d[g]}}b.prototype={bindDOM:function(){if(!this.data)return null;if(PDFJS.disableFontFace)return this.disableFontFace=!0,null;for(var a=this.data,b="",e=a.length,d=0;d<e;++d)b+=String.fromCharCode(a[d]);
+a=this.loadedName;b="url(data:"+this.mimetype+";base64,"+window.btoa(b)+");";a='@font-face { font-family:"'+a+'";src:'+b+"}";R.insertRule(a);PDFJS.pdfBug&&"FontInspector"in v&&v.FontInspector.enabled&&v.FontInspector.fontAdded(this,b);return a},getPathGenerator:function(a,b){if(!(b in this.compiledGlyphs)){var e=a.get(this.loadedName+"_path_"+b);this.compiledGlyphs[b]=new Function("c","size",e)}return this.compiledGlyphs[b]}};return b}()}).call("undefined"===typeof window?this:window);
+PDFJS.workerSrc||"undefined"===typeof document||(PDFJS.workerSrc=function(){var D=(document.body||document.getElementsByTagName("head")[0]).lastChild.src;return D&&D.replace(/\.js$/i,".worker.js")}());
diff --git a/plugins/pdfviewer/viewer/pdf.worker.js b/plugins/pdfviewer/viewer/pdf.worker.js
new file mode 100644
index 0000000..0f954c3
--- /dev/null
+++ b/plugins/pdfviewer/viewer/pdf.worker.js
@@ -0,0 +1,39219 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+/* 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.
+ */
+
+// Initializing PDFJS global object (if still undefined)
+if (typeof PDFJS === 'undefined') {
+  (typeof window !== 'undefined' ? window : this).PDFJS = {};
+}
+
+PDFJS.version = '0.8.573';
+PDFJS.build = 'e97e003';
+
+(function pdfjsWrapper() {
+  // Use strict in our context only - users might not want it
+  'use strict';
+
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+/* 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.
+ */
+/* globals Cmd, ColorSpace, Dict, MozBlobBuilder, Name, PDFJS, Ref */
+
+'use strict';
+
+var globalScope = (typeof window === 'undefined') ? this : window;
+
+var isWorker = (typeof window == 'undefined');
+
+var ERRORS = 0, WARNINGS = 1, INFOS = 5;
+var verbosity = WARNINGS;
+
+var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
+
+var TextRenderingMode = {
+  FILL: 0,
+  STROKE: 1,
+  FILL_STROKE: 2,
+  INVISIBLE: 3,
+  FILL_ADD_TO_PATH: 4,
+  STROKE_ADD_TO_PATH: 5,
+  FILL_STROKE_ADD_TO_PATH: 6,
+  ADD_TO_PATH: 7,
+  FILL_STROKE_MASK: 3,
+  ADD_TO_PATH_FLAG: 4
+};
+
+// The global PDFJS object exposes the API
+// In production, it will be declared outside a global wrapper
+// In development, it will be declared here
+if (!globalScope.PDFJS) {
+  globalScope.PDFJS = {};
+}
+
+globalScope.PDFJS.pdfBug = false;
+
+
+// Use only for debugging purposes. This should not be used in any code that is
+// in mozilla master.
+var log = (function() {
+  if ('console' in globalScope && 'log' in globalScope['console']) {
+    return globalScope['console']['log'].bind(globalScope['console']);
+  } else {
+    return function nop() {
+    };
+  }
+})();
+
+// A notice for devs that will not trigger the fallback UI.  These are good
+// for things that are helpful to devs, such as warning that Workers were
+// disabled, which is important to devs but not end users.
+function info(msg) {
+  if (verbosity >= INFOS) {
+    log('Info: ' + msg);
+    PDFJS.LogManager.notify('info', msg);
+  }
+}
+
+// Non-fatal warnings that should trigger the fallback UI.
+function warn(msg) {
+  if (verbosity >= WARNINGS) {
+    log('Warning: ' + msg);
+    PDFJS.LogManager.notify('warn', msg);
+  }
+}
+
+// Fatal errors that should trigger the fallback UI and halt execution by
+// throwing an exception.
+function error(msg) {
+  // If multiple arguments were passed, pass them all to the log function.
+  if (arguments.length > 1) {
+    var logArguments = ['Error:'];
+    logArguments.push.apply(logArguments, arguments);
+    log.apply(null, logArguments);
+    // Join the arguments into a single string for the lines below.
+    msg = [].join.call(arguments, ' ');
+  } else {
+    log('Error: ' + msg);
+  }
+  log(backtrace());
+  PDFJS.LogManager.notify('error', msg);
+  throw new Error(msg);
+}
+
+// Missing features that should trigger the fallback UI.
+function TODO(what) {
+  warn('TODO: ' + what);
+}
+
+function backtrace() {
+  try {
+    throw new Error();
+  } catch (e) {
+    return e.stack ? e.stack.split('\n').slice(2).join('\n') : '';
+  }
+}
+
+function assert(cond, msg) {
+  if (!cond)
+    error(msg);
+}
+
+// Combines two URLs. The baseUrl shall be absolute URL. If the url is an
+// absolute URL, it will be returned as is.
+function combineUrl(baseUrl, url) {
+  if (!url)
+    return baseUrl;
+  if (url.indexOf(':') >= 0)
+    return url;
+  if (url.charAt(0) == '/') {
+    // absolute path
+    var i = baseUrl.indexOf('://');
+    i = baseUrl.indexOf('/', i + 3);
+    return baseUrl.substring(0, i) + url;
+  } else {
+    // relative path
+    var pathLength = baseUrl.length, i;
+    i = baseUrl.lastIndexOf('#');
+    pathLength = i >= 0 ? i : pathLength;
+    i = baseUrl.lastIndexOf('?', pathLength);
+    pathLength = i >= 0 ? i : pathLength;
+    var prefixLength = baseUrl.lastIndexOf('/', pathLength);
+    return baseUrl.substring(0, prefixLength + 1) + url;
+  }
+}
+
+// Validates if URL is safe and allowed, e.g. to avoid XSS.
+function isValidUrl(url, allowRelative) {
+  if (!url) {
+    return false;
+  }
+  var colon = url.indexOf(':');
+  if (colon < 0) {
+    return allowRelative;
+  }
+  var protocol = url.substr(0, colon);
+  switch (protocol) {
+    case 'http':
+    case 'https':
+    case 'ftp':
+    case 'mailto':
+      return true;
+    default:
+      return false;
+  }
+}
+PDFJS.isValidUrl = isValidUrl;
+
+// In a well-formed PDF, |cond| holds.  If it doesn't, subsequent
+// behavior is undefined.
+function assertWellFormed(cond, msg) {
+  if (!cond)
+    error(msg);
+}
+
+var LogManager = PDFJS.LogManager = (function LogManagerClosure() {
+  var loggers = [];
+  return {
+    addLogger: function logManager_addLogger(logger) {
+      loggers.push(logger);
+    },
+    notify: function(type, message) {
+      for (var i = 0, ii = loggers.length; i < ii; i++) {
+        var logger = loggers[i];
+        if (logger[type])
+          logger[type](message);
+      }
+    }
+  };
+})();
+
+function shadow(obj, prop, value) {
+  Object.defineProperty(obj, prop, { value: value,
+                                     enumerable: true,
+                                     configurable: true,
+                                     writable: false });
+  return value;
+}
+
+var PasswordResponses = PDFJS.PasswordResponses = {
+  NEED_PASSWORD: 1,
+  INCORRECT_PASSWORD: 2
+};
+
+var PasswordException = (function PasswordExceptionClosure() {
+  function PasswordException(msg, code) {
+    this.name = 'PasswordException';
+    this.message = msg;
+    this.code = code;
+  }
+
+  PasswordException.prototype = new Error();
+  PasswordException.constructor = PasswordException;
+
+  return PasswordException;
+})();
+
+var UnknownErrorException = (function UnknownErrorExceptionClosure() {
+  function UnknownErrorException(msg, details) {
+    this.name = 'UnknownErrorException';
+    this.message = msg;
+    this.details = details;
+  }
+
+  UnknownErrorException.prototype = new Error();
+  UnknownErrorException.constructor = UnknownErrorException;
+
+  return UnknownErrorException;
+})();
+
+var InvalidPDFException = (function InvalidPDFExceptionClosure() {
+  function InvalidPDFException(msg) {
+    this.name = 'InvalidPDFException';
+    this.message = msg;
+  }
+
+  InvalidPDFException.prototype = new Error();
+  InvalidPDFException.constructor = InvalidPDFException;
+
+  return InvalidPDFException;
+})();
+
+var MissingPDFException = (function MissingPDFExceptionClosure() {
+  function MissingPDFException(msg) {
+    this.name = 'MissingPDFException';
+    this.message = msg;
+  }
+
+  MissingPDFException.prototype = new Error();
+  MissingPDFException.constructor = MissingPDFException;
+
+  return MissingPDFException;
+})();
+
+var NotImplementedException = (function NotImplementedExceptionClosure() {
+  function NotImplementedException(msg) {
+    this.message = msg;
+  }
+
+  NotImplementedException.prototype = new Error();
+  NotImplementedException.prototype.name = 'NotImplementedException';
+  NotImplementedException.constructor = NotImplementedException;
+
+  return NotImplementedException;
+})();
+
+var MissingDataException = (function MissingDataExceptionClosure() {
+  function MissingDataException(begin, end) {
+    this.begin = begin;
+    this.end = end;
+    this.message = 'Missing data [begin, end)';
+  }
+
+  MissingDataException.prototype = new Error();
+  MissingDataException.prototype.name = 'MissingDataException';
+  MissingDataException.constructor = MissingDataException;
+
+  return MissingDataException;
+})();
+
+var XRefParseException = (function XRefParseExceptionClosure() {
+  function XRefParseException(msg) {
+    this.message = msg;
+  }
+
+  XRefParseException.prototype = new Error();
+  XRefParseException.prototype.name = 'XRefParseException';
+  XRefParseException.constructor = XRefParseException;
+
+  return XRefParseException;
+})();
+
+
+function bytesToString(bytes) {
+  var str = '';
+  var length = bytes.length;
+  for (var n = 0; n < length; ++n)
+    str += String.fromCharCode(bytes[n]);
+  return str;
+}
+
+function stringToBytes(str) {
+  var length = str.length;
+  var bytes = new Uint8Array(length);
+  for (var n = 0; n < length; ++n)
+    bytes[n] = str.charCodeAt(n) & 0xFF;
+  return bytes;
+}
+
+var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
+
+var Util = PDFJS.Util = (function UtilClosure() {
+  function Util() {}
+
+  Util.makeCssRgb = function Util_makeCssRgb(rgb) {
+    return 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')';
+  };
+
+  Util.makeCssCmyk = function Util_makeCssCmyk(cmyk) {
+    var rgb = ColorSpace.singletons.cmyk.getRgb(cmyk, 0);
+    return Util.makeCssRgb(rgb);
+  };
+
+  // Concatenates two transformation matrices together and returns the result.
+  Util.transform = function Util_transform(m1, m2) {
+    return [
+      m1[0] * m2[0] + m1[2] * m2[1],
+      m1[1] * m2[0] + m1[3] * m2[1],
+      m1[0] * m2[2] + m1[2] * m2[3],
+      m1[1] * m2[2] + m1[3] * m2[3],
+      m1[0] * m2[4] + m1[2] * m2[5] + m1[4],
+      m1[1] * m2[4] + m1[3] * m2[5] + m1[5]
+    ];
+  };
+
+  // For 2d affine transforms
+  Util.applyTransform = function Util_applyTransform(p, m) {
+    var xt = p[0] * m[0] + p[1] * m[2] + m[4];
+    var yt = p[0] * m[1] + p[1] * m[3] + m[5];
+    return [xt, yt];
+  };
+
+  Util.applyInverseTransform = function Util_applyInverseTransform(p, m) {
+    var d = m[0] * m[3] - m[1] * m[2];
+    var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
+    var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
+    return [xt, yt];
+  };
+
+  // Applies the transform to the rectangle and finds the minimum axially
+  // aligned bounding box.
+  Util.getAxialAlignedBoundingBox =
+    function Util_getAxialAlignedBoundingBox(r, m) {
+
+    var p1 = Util.applyTransform(r, m);
+    var p2 = Util.applyTransform(r.slice(2, 4), m);
+    var p3 = Util.applyTransform([r[0], r[3]], m);
+    var p4 = Util.applyTransform([r[2], r[1]], m);
+    return [
+      Math.min(p1[0], p2[0], p3[0], p4[0]),
+      Math.min(p1[1], p2[1], p3[1], p4[1]),
+      Math.max(p1[0], p2[0], p3[0], p4[0]),
+      Math.max(p1[1], p2[1], p3[1], p4[1])
+    ];
+  };
+
+  Util.inverseTransform = function Util_inverseTransform(m) {
+    var d = m[0] * m[3] - m[1] * m[2];
+    return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d,
+      (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];
+  };
+
+  // Apply a generic 3d matrix M on a 3-vector v:
+  //   | a b c |   | X |
+  //   | d e f | x | Y |
+  //   | g h i |   | Z |
+  // M is assumed to be serialized as [a,b,c,d,e,f,g,h,i],
+  // with v as [X,Y,Z]
+  Util.apply3dTransform = function Util_apply3dTransform(m, v) {
+    return [
+      m[0] * v[0] + m[1] * v[1] + m[2] * v[2],
+      m[3] * v[0] + m[4] * v[1] + m[5] * v[2],
+      m[6] * v[0] + m[7] * v[1] + m[8] * v[2]
+    ];
+  };
+
+  // This calculation uses Singular Value Decomposition.
+  // The SVD can be represented with formula A = USV. We are interested in the
+  // matrix S here because it represents the scale values.
+  Util.singularValueDecompose2dScale =
+    function Util_singularValueDecompose2dScale(m) {
+
+    var transpose = [m[0], m[2], m[1], m[3]];
+
+    // Multiply matrix m with its transpose.
+    var a = m[0] * transpose[0] + m[1] * transpose[2];
+    var b = m[0] * transpose[1] + m[1] * transpose[3];
+    var c = m[2] * transpose[0] + m[3] * transpose[2];
+    var d = m[2] * transpose[1] + m[3] * transpose[3];
+
+    // Solve the second degree polynomial to get roots.
+    var first = (a + d) / 2;
+    var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;
+    var sx = first + second || 1;
+    var sy = first - second || 1;
+
+    // Scale values are the square roots of the eigenvalues.
+    return [Math.sqrt(sx), Math.sqrt(sy)];
+  };
+
+  // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)
+  // For coordinate systems whose origin lies in the bottom-left, this
+  // means normalization to (BL,TR) ordering. For systems with origin in the
+  // top-left, this means (TL,BR) ordering.
+  Util.normalizeRect = function Util_normalizeRect(rect) {
+    var r = rect.slice(0); // clone rect
+    if (rect[0] > rect[2]) {
+      r[0] = rect[2];
+      r[2] = rect[0];
+    }
+    if (rect[1] > rect[3]) {
+      r[1] = rect[3];
+      r[3] = rect[1];
+    }
+    return r;
+  };
+
+  // Returns a rectangle [x1, y1, x2, y2] corresponding to the
+  // intersection of rect1 and rect2. If no intersection, returns 'false'
+  // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]
+  Util.intersect = function Util_intersect(rect1, rect2) {
+    function compare(a, b) {
+      return a - b;
+    }
+
+    // Order points along the axes
+    var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare),
+        orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare),
+        result = [];
+
+    rect1 = Util.normalizeRect(rect1);
+    rect2 = Util.normalizeRect(rect2);
+
+    // X: first and second points belong to different rectangles?
+    if ((orderedX[0] === rect1[0] && orderedX[1] === rect2[0]) ||
+        (orderedX[0] === rect2[0] && orderedX[1] === rect1[0])) {
+      // Intersection must be between second and third points
+      result[0] = orderedX[1];
+      result[2] = orderedX[2];
+    } else {
+      return false;
+    }
+
+    // Y: first and second points belong to different rectangles?
+    if ((orderedY[0] === rect1[1] && orderedY[1] === rect2[1]) ||
+        (orderedY[0] === rect2[1] && orderedY[1] === rect1[1])) {
+      // Intersection must be between second and third points
+      result[1] = orderedY[1];
+      result[3] = orderedY[2];
+    } else {
+      return false;
+    }
+
+    return result;
+  };
+
+  Util.sign = function Util_sign(num) {
+    return num < 0 ? -1 : 1;
+  };
+
+  // TODO(mack): Rename appendToArray
+  Util.concatenateToArray = function concatenateToArray(arr1, arr2) {
+    Array.prototype.push.apply(arr1, arr2);
+  };
+
+  Util.prependToArray = function concatenateToArray(arr1, arr2) {
+    Array.prototype.unshift.apply(arr1, arr2);
+  };
+
+  Util.extendObj = function extendObj(obj1, obj2) {
+    for (var key in obj2) {
+      obj1[key] = obj2[key];
+    }
+  };
+
+  Util.getInheritableProperty = function Util_getInheritableProperty(dict,
+                                                                     name) {
+    while (dict && !dict.has(name)) {
+      dict = dict.get('Parent');
+    }
+    if (!dict) {
+      return null;
+    }
+    return dict.get(name);
+  };
+
+  Util.inherit = function Util_inherit(sub, base, prototype) {
+    sub.prototype = Object.create(base.prototype);
+    sub.prototype.constructor = sub;
+    for (var prop in prototype) {
+      sub.prototype[prop] = prototype[prop];
+    }
+  };
+
+  Util.loadScript = function Util_loadScript(src, callback) {
+    var script = document.createElement('script');
+    var loaded = false;
+    script.setAttribute('src', src);
+    if (callback) {
+      script.onload = function() {
+        if (!loaded) {
+          callback();
+        }
+        loaded = true;
+      };
+    }
+    document.getElementsByTagName('head')[0].appendChild(script);
+  };
+
+  return Util;
+})();
+
+var PageViewport = PDFJS.PageViewport = (function PageViewportClosure() {
+  function PageViewport(viewBox, scale, rotation, offsetX, offsetY, dontFlip) {
+    this.viewBox = viewBox;
+    this.scale = scale;
+    this.rotation = rotation;
+    this.offsetX = offsetX;
+    this.offsetY = offsetY;
+
+    // creating transform to convert pdf coordinate system to the normal
+    // canvas like coordinates taking in account scale and rotation
+    var centerX = (viewBox[2] + viewBox[0]) / 2;
+    var centerY = (viewBox[3] + viewBox[1]) / 2;
+    var rotateA, rotateB, rotateC, rotateD;
+    rotation = rotation % 360;
+    rotation = rotation < 0 ? rotation + 360 : rotation;
+    switch (rotation) {
+      case 180:
+        rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1;
+        break;
+      case 90:
+        rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0;
+        break;
+      case 270:
+        rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0;
+        break;
+      //case 0:
+      default:
+        rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1;
+        break;
+    }
+
+    if (dontFlip) {
+      rotateC = -rotateC; rotateD = -rotateD;
+    }
+
+    var offsetCanvasX, offsetCanvasY;
+    var width, height;
+    if (rotateA === 0) {
+      offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
+      offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
+      width = Math.abs(viewBox[3] - viewBox[1]) * scale;
+      height = Math.abs(viewBox[2] - viewBox[0]) * scale;
+    } else {
+      offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
+      offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
+      width = Math.abs(viewBox[2] - viewBox[0]) * scale;
+      height = Math.abs(viewBox[3] - viewBox[1]) * scale;
+    }
+    // creating transform for the following operations:
+    // translate(-centerX, -centerY), rotate and flip vertically,
+    // scale, and translate(offsetCanvasX, offsetCanvasY)
+    this.transform = [
+      rotateA * scale,
+      rotateB * scale,
+      rotateC * scale,
+      rotateD * scale,
+      offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,
+      offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY
+    ];
+
+    this.width = width;
+    this.height = height;
+    this.fontScale = scale;
+  }
+  PageViewport.prototype = {
+    clone: function PageViewPort_clone(args) {
+      args = args || {};
+      var scale = 'scale' in args ? args.scale : this.scale;
+      var rotation = 'rotation' in args ? args.rotation : this.rotation;
+      return new PageViewport(this.viewBox.slice(), scale, rotation,
+                              this.offsetX, this.offsetY, args.dontFlip);
+    },
+    convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) {
+      return Util.applyTransform([x, y], this.transform);
+    },
+    convertToViewportRectangle:
+      function PageViewport_convertToViewportRectangle(rect) {
+      var tl = Util.applyTransform([rect[0], rect[1]], this.transform);
+      var br = Util.applyTransform([rect[2], rect[3]], this.transform);
+      return [tl[0], tl[1], br[0], br[1]];
+    },
+    convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) {
+      return Util.applyInverseTransform([x, y], this.transform);
+    }
+  };
+  return PageViewport;
+})();
+
+var PDFStringTranslateTable = [
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014,
+  0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C,
+  0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160,
+  0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC
+];
+
+function stringToPDFString(str) {
+  var i, n = str.length, str2 = '';
+  if (str[0] === '\xFE' && str[1] === '\xFF') {
+    // UTF16BE BOM
+    for (i = 2; i < n; i += 2)
+      str2 += String.fromCharCode(
+        (str.charCodeAt(i) << 8) | str.charCodeAt(i + 1));
+  } else {
+    for (i = 0; i < n; ++i) {
+      var code = PDFStringTranslateTable[str.charCodeAt(i)];
+      str2 += code ? String.fromCharCode(code) : str.charAt(i);
+    }
+  }
+  return str2;
+}
+
+function stringToUTF8String(str) {
+  return decodeURIComponent(escape(str));
+}
+
+function isEmptyObj(obj) {
+  for (var key in obj) {
+    return false;
+  }
+  return true;
+}
+
+function isBool(v) {
+  return typeof v == 'boolean';
+}
+
+function isInt(v) {
+  return typeof v == 'number' && ((v | 0) == v);
+}
+
+function isNum(v) {
+  return typeof v == 'number';
+}
+
+function isString(v) {
+  return typeof v == 'string';
+}
+
+function isNull(v) {
+  return v === null;
+}
+
+function isName(v) {
+  return v instanceof Name;
+}
+
+function isCmd(v, cmd) {
+  return v instanceof Cmd && (!cmd || v.cmd == cmd);
+}
+
+function isDict(v, type) {
+  if (!(v instanceof Dict)) {
+    return false;
+  }
+  if (!type) {
+    return true;
+  }
+  var dictType = v.get('Type');
+  return isName(dictType) && dictType.name == type;
+}
+
+function isArray(v) {
+  return v instanceof Array;
+}
+
+function isStream(v) {
+  return typeof v == 'object' && v !== null && v !== undefined &&
+         ('getBytes' in v);
+}
+
+function isArrayBuffer(v) {
+  return typeof v == 'object' && v !== null && v !== undefined &&
+         ('byteLength' in v);
+}
+
+function isRef(v) {
+  return v instanceof Ref;
+}
+
+function isPDFFunction(v) {
+  var fnDict;
+  if (typeof v != 'object')
+    return false;
+  else if (isDict(v))
+    fnDict = v;
+  else if (isStream(v))
+    fnDict = v.dict;
+  else
+    return false;
+  return fnDict.has('FunctionType');
+}
+
+/**
+ * The following promise implementation tries to generally implment the
+ * Promise/A+ spec. Some notable differences from other promise libaries are:
+ * - There currently isn't a seperate deferred and promise object.
+ * - Unhandled rejections eventually show an error if they aren't handled.
+ *
+ * Based off of the work in:
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=810490
+ */
+var Promise = PDFJS.Promise = (function PromiseClosure() {
+  var STATUS_PENDING = 0;
+  var STATUS_RESOLVED = 1;
+  var STATUS_REJECTED = 2;
+
+  // In an attempt to avoid silent exceptions, unhandled rejections are
+  // tracked and if they aren't handled in a certain amount of time an
+  // error is logged.
+  var REJECTION_TIMEOUT = 500;
+
+  var HandlerManager = {
+    handlers: [],
+    running: false,
+    unhandledRejections: [],
+    pendingRejectionCheck: false,
+
+    scheduleHandlers: function scheduleHandlers(promise) {
+      if (promise._status == STATUS_PENDING) {
+        return;
+      }
+
+      this.handlers = this.handlers.concat(promise._handlers);
+      promise._handlers = [];
+
+      if (this.running) {
+        return;
+      }
+      this.running = true;
+
+      setTimeout(this.runHandlers.bind(this), 0);
+    },
+
+    runHandlers: function runHandlers() {
+      while (this.handlers.length > 0) {
+        var handler = this.handlers.shift();
+
+        var nextStatus = handler.thisPromise._status;
+        var nextValue = handler.thisPromise._value;
+
+        try {
+          if (nextStatus === STATUS_RESOLVED) {
+            if (typeof(handler.onResolve) == 'function') {
+              nextValue = handler.onResolve(nextValue);
+            }
+          } else if (typeof(handler.onReject) === 'function') {
+              nextValue = handler.onReject(nextValue);
+              nextStatus = STATUS_RESOLVED;
+
+              if (handler.thisPromise._unhandledRejection) {
+                this.removeUnhandeledRejection(handler.thisPromise);
+              }
+          }
+        } catch (ex) {
+          nextStatus = STATUS_REJECTED;
+          nextValue = ex;
+        }
+
+        handler.nextPromise._updateStatus(nextStatus, nextValue);
+      }
+
+      this.running = false;
+    },
+
+    addUnhandledRejection: function addUnhandledRejection(promise) {
+      this.unhandledRejections.push({
+        promise: promise,
+        time: Date.now()
+      });
+      this.scheduleRejectionCheck();
+    },
+
+    removeUnhandeledRejection: function removeUnhandeledRejection(promise) {
+      promise._unhandledRejection = false;
+      for (var i = 0; i < this.unhandledRejections.length; i++) {
+        if (this.unhandledRejections[i].promise === promise) {
+          this.unhandledRejections.splice(i);
+          i--;
+        }
+      }
+    },
+
+    scheduleRejectionCheck: function scheduleRejectionCheck() {
+      if (this.pendingRejectionCheck) {
+        return;
+      }
+      this.pendingRejectionCheck = true;
+      setTimeout(function rejectionCheck() {
+        this.pendingRejectionCheck = false;
+        var now = Date.now();
+        for (var i = 0; i < this.unhandledRejections.length; i++) {
+          if (now - this.unhandledRejections[i].time > REJECTION_TIMEOUT) {
+            var unhandled = this.unhandledRejections[i].promise._value;
+            var msg = 'Unhandled rejection: ' + unhandled;
+            if (unhandled.stack) {
+              msg += '\n' + unhandled.stack;
+            }
+            warn(msg);
+            this.unhandledRejections.splice(i);
+            i--;
+          }
+        }
+        if (this.unhandledRejections.length) {
+          this.scheduleRejectionCheck();
+        }
+      }.bind(this), REJECTION_TIMEOUT);
+    }
+  };
+
+  function Promise() {
+    this._status = STATUS_PENDING;
+    this._handlers = [];
+  }
+  /**
+   * Builds a promise that is resolved when all the passed in promises are
+   * resolved.
+   * @param {Promise[]} promises Array of promises to wait for.
+   * @return {Promise} New dependant promise.
+   */
+  Promise.all = function Promise_all(promises) {
+    var deferred = new Promise();
+    var unresolved = promises.length;
+    var results = [];
+    if (unresolved === 0) {
+      deferred.resolve(results);
+      return deferred;
+    }
+    function reject(reason) {
+      if (deferred._status === STATUS_REJECTED) {
+        return;
+      }
+      results = [];
+      deferred.reject(reason);
+    }
+    for (var i = 0, ii = promises.length; i < ii; ++i) {
+      var promise = promises[i];
+      promise.then((function(i) {
+        return function(value) {
+          if (deferred._status === STATUS_REJECTED) {
+            return;
+          }
+          results[i] = value;
+          unresolved--;
+          if (unresolved === 0)
+            deferred.resolve(results);
+        };
+      })(i), reject);
+    }
+    return deferred;
+  };
+
+  Promise.prototype = {
+    _status: null,
+    _value: null,
+    _handlers: null,
+    _unhandledRejection: null,
+
+    _updateStatus: function Promise__updateStatus(status, value) {
+      if (this._status === STATUS_RESOLVED ||
+          this._status === STATUS_REJECTED) {
+        return;
+      }
+
+      if (status == STATUS_RESOLVED &&
+          value && typeof(value.then) === 'function') {
+        value.then(this._updateStatus.bind(this, STATUS_RESOLVED),
+                   this._updateStatus.bind(this, STATUS_REJECTED));
+        return;
+      }
+
+      this._status = status;
+      this._value = value;
+
+      if (status === STATUS_REJECTED && this._handlers.length === 0) {
+        this._unhandledRejection = true;
+        HandlerManager.addUnhandledRejection(this);
+      }
+
+      HandlerManager.scheduleHandlers(this);
+    },
+
+    get isResolved() {
+      return this._status === STATUS_RESOLVED;
+    },
+
+    get isRejected() {
+      return this._status === STATUS_REJECTED;
+    },
+
+    resolve: function Promise_resolve(value) {
+      this._updateStatus(STATUS_RESOLVED, value);
+    },
+
+    reject: function Promise_reject(reason) {
+      this._updateStatus(STATUS_REJECTED, reason);
+    },
+
+    then: function Promise_then(onResolve, onReject) {
+      var nextPromise = new Promise();
+      this._handlers.push({
+        thisPromise: this,
+        onResolve: onResolve,
+        onReject: onReject,
+        nextPromise: nextPromise
+      });
+      HandlerManager.scheduleHandlers(this);
+      return nextPromise;
+    }
+  };
+
+  return Promise;
+})();
+
+var StatTimer = (function StatTimerClosure() {
+  function rpad(str, pad, length) {
+    while (str.length < length)
+      str += pad;
+    return str;
+  }
+  function StatTimer() {
+    this.started = {};
+    this.times = [];
+    this.enabled = true;
+  }
+  StatTimer.prototype = {
+    time: function StatTimer_time(name) {
+      if (!this.enabled)
+        return;
+      if (name in this.started)
+        warn('Timer is already running for ' + name);
+      this.started[name] = Date.now();
+    },
+    timeEnd: function StatTimer_timeEnd(name) {
+      if (!this.enabled)
+        return;
+      if (!(name in this.started))
+        warn('Timer has not been started for ' + name);
+      this.times.push({
+        'name': name,
+        'start': this.started[name],
+        'end': Date.now()
+      });
+      // Remove timer from started so it can be called again.
+      delete this.started[name];
+    },
+    toString: function StatTimer_toString() {
+      var times = this.times;
+      var out = '';
+      // Find the longest name for padding purposes.
+      var longest = 0;
+      for (var i = 0, ii = times.length; i < ii; ++i) {
+        var name = times[i]['name'];
+        if (name.length > longest)
+          longest = name.length;
+      }
+      for (var i = 0, ii = times.length; i < ii; ++i) {
+        var span = times[i];
+        var duration = span.end - span.start;
+        out += rpad(span['name'], ' ', longest) + ' ' + duration + 'ms\n';
+      }
+      return out;
+    }
+  };
+  return StatTimer;
+})();
+
+PDFJS.createBlob = function createBlob(data, contentType) {
+  if (typeof Blob === 'function')
+    return new Blob([data], { type: contentType });
+  // Blob builder is deprecated in FF14 and removed in FF18.
+  var bb = new MozBlobBuilder();
+  bb.append(data);
+  return bb.getBlob(contentType);
+};
+
+function MessageHandler(name, comObj) {
+  this.name = name;
+  this.comObj = comObj;
+  this.callbackIndex = 1;
+  var callbacks = this.callbacks = {};
+  var ah = this.actionHandler = {};
+
+  ah['console_log'] = [function ahConsoleLog(data) {
+    log.apply(null, data);
+  }];
+  // If there's no console available, console_error in the
+  // action handler will do nothing.
+  if ('console' in globalScope) {
+    ah['console_error'] = [function ahConsoleError(data) {
+      globalScope['console'].error.apply(null, data);
+    }];
+  } else {
+    ah['console_error'] = [function ahConsoleError(data) {
+      log.apply(null, data);
+    }];
+  }
+  ah['_warn'] = [function ah_Warn(data) {
+    warn(data);
+  }];
+
+  comObj.onmessage = function messageHandlerComObjOnMessage(event) {
+    var data = event.data;
+    if (data.isReply) {
+      var callbackId = data.callbackId;
+      if (data.callbackId in callbacks) {
+        var callback = callbacks[callbackId];
+        delete callbacks[callbackId];
+        callback(data.data);
+      } else {
+        error('Cannot resolve callback ' + callbackId);
+      }
+    } else if (data.action in ah) {
+      var action = ah[data.action];
+      if (data.callbackId) {
+        var promise = new Promise();
+        promise.then(function(resolvedData) {
+          comObj.postMessage({
+            isReply: true,
+            callbackId: data.callbackId,
+            data: resolvedData
+          });
+        });
+        action[0].call(action[1], data.data, promise);
+      } else {
+        action[0].call(action[1], data.data);
+      }
+    } else {
+      error('Unkown action from worker: ' + data.action);
+    }
+  };
+}
+
+MessageHandler.prototype = {
+  on: function messageHandlerOn(actionName, handler, scope) {
+    var ah = this.actionHandler;
+    if (ah[actionName]) {
+      error('There is already an actionName called "' + actionName + '"');
+    }
+    ah[actionName] = [handler, scope];
+  },
+  /**
+   * Sends a message to the comObj to invoke the action with the supplied data.
+   * @param {String} actionName Action to call.
+   * @param {JSON} data JSON data to send.
+   * @param {function} [callback] Optional callback that will handle a reply.
+   */
+  send: function messageHandlerSend(actionName, data, callback) {
+    var message = {
+      action: actionName,
+      data: data
+    };
+    if (callback) {
+      var callbackId = this.callbackIndex++;
+      this.callbacks[callbackId] = callback;
+      message.callbackId = callbackId;
+    }
+    this.comObj.postMessage(message);
+  }
+};
+
+function loadJpegStream(id, imageData, objs) {
+  var img = new Image();
+  img.onload = (function loadJpegStream_onloadClosure() {
+    objs.resolve(id, img);
+  });
+  img.src = 'data:image/jpeg;base64,' + window.btoa(imageData);
+}
+
+
+var PatternType = {
+  AXIAL: 2,
+  RADIAL: 3
+};
+
+var Pattern = (function PatternClosure() {
+  // Constructor should define this.getPattern
+  function Pattern() {
+    error('should not call Pattern constructor');
+  }
+
+  Pattern.prototype = {
+    // Input: current Canvas context
+    // Output: the appropriate fillStyle or strokeStyle
+    getPattern: function Pattern_getPattern(ctx) {
+      error('Should not call Pattern.getStyle: ' + ctx);
+    }
+  };
+
+  Pattern.shadingFromIR = function Pattern_shadingFromIR(raw) {
+    return Shadings[raw[0]].fromIR(raw);
+  };
+
+  Pattern.parseShading = function Pattern_parseShading(shading, matrix, xref,
+                                                       res) {
+
+    var dict = isStream(shading) ? shading.dict : shading;
+    var type = dict.get('ShadingType');
+
+    switch (type) {
+      case PatternType.AXIAL:
+      case PatternType.RADIAL:
+        // Both radial and axial shadings are handled by RadialAxial shading.
+        return new Shadings.RadialAxial(dict, matrix, xref, res);
+      default:
+        TODO('Unsupported shading type: ' + type);
+        return new Shadings.Dummy();
+    }
+  };
+  return Pattern;
+})();
+
+var Shadings = {};
+
+// A small number to offset the first/last color stops so we can insert ones to
+// support extend.  Number.MIN_VALUE appears to be too small and breaks the
+// extend. 1e-7 works in FF but chrome seems to use an even smaller sized number
+// internally so we have to go bigger.
+Shadings.SMALL_NUMBER = 1e-2;
+
+// Radial and axial shading have very similar implementations
+// If needed, the implementations can be broken into two classes
+Shadings.RadialAxial = (function RadialAxialClosure() {
+  function RadialAxial(dict, matrix, xref, res, ctx) {
+    this.matrix = matrix;
+    this.coordsArr = dict.get('Coords');
+    this.shadingType = dict.get('ShadingType');
+    this.type = 'Pattern';
+    this.ctx = ctx;
+    var cs = dict.get('ColorSpace', 'CS');
+    cs = ColorSpace.parse(cs, xref, res);
+    this.cs = cs;
+
+    var t0 = 0.0, t1 = 1.0;
+    if (dict.has('Domain')) {
+      var domainArr = dict.get('Domain');
+      t0 = domainArr[0];
+      t1 = domainArr[1];
+    }
+
+    var extendStart = false, extendEnd = false;
+    if (dict.has('Extend')) {
+      var extendArr = dict.get('Extend');
+      extendStart = extendArr[0];
+      extendEnd = extendArr[1];
+    }
+
+    if (this.shadingType === PatternType.RADIAL &&
+       (!extendStart || !extendEnd)) {
+      // Radial gradient only currently works if either circle is fully within
+      // the other circle.
+      var x1 = this.coordsArr[0];
+      var y1 = this.coordsArr[1];
+      var r1 = this.coordsArr[2];
+      var x2 = this.coordsArr[3];
+      var y2 = this.coordsArr[4];
+      var r2 = this.coordsArr[5];
+      var distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
+      if (r1 <= r2 + distance &&
+          r2 <= r1 + distance) {
+        warn('Unsupported radial gradient.');
+      }
+    }
+
+    this.extendStart = extendStart;
+    this.extendEnd = extendEnd;
+
+    var fnObj = dict.get('Function');
+    var fn;
+    if (isArray(fnObj)) {
+      var fnArray = [];
+      for (var j = 0, jj = fnObj.length; j < jj; j++) {
+        var obj = xref.fetchIfRef(fnObj[j]);
+        if (!isPDFFunction(obj)) {
+          error('Invalid function');
+        }
+        fnArray.push(PDFFunction.parse(xref, obj));
+      }
+      fn = function radialAxialColorFunction(arg) {
+        var out = [];
+        for (var i = 0, ii = fnArray.length; i < ii; i++) {
+          out.push(fnArray[i](arg)[0]);
+        }
+        return out;
+      };
+    } else {
+      if (!isPDFFunction(fnObj)) {
+        error('Invalid function');
+      }
+      fn = PDFFunction.parse(xref, fnObj);
+    }
+
+    // 10 samples seems good enough for now, but probably won't work
+    // if there are sharp color changes. Ideally, we would implement
+    // the spec faithfully and add lossless optimizations.
+    var diff = t1 - t0;
+    var step = diff / 10;
+
+    var colorStops = this.colorStops = [];
+
+    // Protect against bad domains so we don't end up in an infinte loop below.
+    if (t0 >= t1 || step <= 0) {
+      // Acrobat doesn't seem to handle these cases so we'll ignore for
+      // now.
+      info('Bad shading domain.');
+      return;
+    }
+
+    for (var i = t0; i <= t1; i += step) {
+      var rgbColor = cs.getRgb(fn([i]), 0);
+      var cssColor = Util.makeCssRgb(rgbColor);
+      colorStops.push([(i - t0) / diff, cssColor]);
+    }
+
+    var background = 'transparent';
+    if (dict.has('Background')) {
+      var rgbColor = cs.getRgb(dict.get('Background'), 0);
+      background = Util.makeCssRgb(rgbColor);
+    }
+
+    if (!extendStart) {
+      // Insert a color stop at the front and offset the first real color stop
+      // so it doesn't conflict with the one we insert.
+      colorStops.unshift([0, background]);
+      colorStops[1][0] += Shadings.SMALL_NUMBER;
+    }
+    if (!extendEnd) {
+      // Same idea as above in extendStart but for the end.
+      colorStops[colorStops.length - 1][0] -= Shadings.SMALL_NUMBER;
+      colorStops.push([1, background]);
+    }
+
+    this.colorStops = colorStops;
+  }
+
+  RadialAxial.fromIR = function RadialAxial_fromIR(raw) {
+    var type = raw[1];
+    var colorStops = raw[2];
+    var p0 = raw[3];
+    var p1 = raw[4];
+    var r0 = raw[5];
+    var r1 = raw[6];
+    return {
+      type: 'Pattern',
+      getPattern: function RadialAxial_getPattern(ctx) {
+        var grad;
+        if (type == PatternType.AXIAL)
+          grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);
+        else if (type == PatternType.RADIAL)
+          grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1);
+
+        for (var i = 0, ii = colorStops.length; i < ii; ++i) {
+          var c = colorStops[i];
+          grad.addColorStop(c[0], c[1]);
+        }
+        return grad;
+      }
+    };
+  };
+
+  RadialAxial.prototype = {
+    getIR: function RadialAxial_getIR() {
+      var coordsArr = this.coordsArr;
+      var type = this.shadingType;
+      if (type == PatternType.AXIAL) {
+        var p0 = [coordsArr[0], coordsArr[1]];
+        var p1 = [coordsArr[2], coordsArr[3]];
+        var r0 = null;
+        var r1 = null;
+      } else if (type == PatternType.RADIAL) {
+        var p0 = [coordsArr[0], coordsArr[1]];
+        var p1 = [coordsArr[3], coordsArr[4]];
+        var r0 = coordsArr[2];
+        var r1 = coordsArr[5];
+      } else {
+        error('getPattern type unknown: ' + type);
+      }
+
+      var matrix = this.matrix;
+      if (matrix) {
+        p0 = Util.applyTransform(p0, matrix);
+        p1 = Util.applyTransform(p1, matrix);
+      }
+
+      return ['RadialAxial', type, this.colorStops, p0, p1, r0, r1];
+    }
+  };
+
+  return RadialAxial;
+})();
+
+Shadings.Dummy = (function DummyClosure() {
+  function Dummy() {
+    this.type = 'Pattern';
+  }
+
+  Dummy.fromIR = function Dummy_fromIR() {
+    return {
+      type: 'Pattern',
+      getPattern: function Dummy_fromIR_getPattern() {
+        return 'hotpink';
+      }
+    };
+  };
+
+  Dummy.prototype = {
+    getIR: function Dummy_getIR() {
+      return ['Dummy'];
+    }
+  };
+  return Dummy;
+})();
+
+var TilingPattern = (function TilingPatternClosure() {
+  var PaintType = {
+    COLORED: 1,
+    UNCOLORED: 2
+  };
+
+  var MAX_PATTERN_SIZE = 3000; // 10in @ 300dpi shall be enough
+
+  function TilingPattern(IR, color, ctx, objs, commonObjs, baseTransform) {
+    this.name = IR[1][0].name;
+    this.operatorList = IR[2];
+    this.matrix = IR[3] || [1, 0, 0, 1, 0, 0];
+    this.bbox = IR[4];
+    this.xstep = IR[5];
+    this.ystep = IR[6];
+    this.paintType = IR[7];
+    this.tilingType = IR[8];
+    this.color = color;
+    this.objs = objs;
+    this.commonObjs = commonObjs;
+    this.baseTransform = baseTransform;
+    this.type = 'Pattern';
+    this.ctx = ctx;
+  }
+
+  TilingPattern.getIR = function TilingPattern_getIR(operatorList, dict, args) {
+    var matrix = dict.get('Matrix');
+    var bbox = dict.get('BBox');
+    var xstep = dict.get('XStep');
+    var ystep = dict.get('YStep');
+    var paintType = dict.get('PaintType');
+    var tilingType = dict.get('TilingType');
+
+    return [
+      'TilingPattern', args, operatorList, matrix, bbox, xstep, ystep,
+      paintType, tilingType
+    ];
+  };
+
+  TilingPattern.prototype = {
+    createPatternCanvas: function TilinPattern_createPatternCanvas(owner) {
+      var operatorList = this.operatorList;
+      var bbox = this.bbox;
+      var xstep = this.xstep;
+      var ystep = this.ystep;
+      var paintType = this.paintType;
+      var tilingType = this.tilingType;
+      var color = this.color;
+      var objs = this.objs;
+      var commonObjs = this.commonObjs;
+      var ctx = this.ctx;
+
+      TODO('TilingType: ' + tilingType);
+
+      var x0 = bbox[0], y0 = bbox[1], x1 = bbox[2], y1 = bbox[3];
+
+      var topLeft = [x0, y0];
+      // we want the canvas to be as large as the step size
+      var botRight = [x0 + xstep, y0 + ystep];
+
+      var width = botRight[0] - topLeft[0];
+      var height = botRight[1] - topLeft[1];
+
+      // Obtain scale from matrix and current transformation matrix.
+      var matrixScale = Util.singularValueDecompose2dScale(this.matrix);
+      var curMatrixScale = Util.singularValueDecompose2dScale(
+                             this.baseTransform);
+      var combinedScale = [matrixScale[0] * curMatrixScale[0],
+                           matrixScale[1] * curMatrixScale[1]];
+
+      // MAX_PATTERN_SIZE is used to avoid OOM situation.
+      // Use width and height values that are as close as possible to the end
+      // result when the pattern is used. Too low value makes the pattern look
+      // blurry. Too large value makes it look too crispy.
+      width = Math.min(Math.ceil(Math.abs(width * combinedScale[0])),
+                       MAX_PATTERN_SIZE);
+
+      height = Math.min(Math.ceil(Math.abs(height * combinedScale[1])),
+                        MAX_PATTERN_SIZE);
+
+      var tmpCanvas = CachedCanvases.getCanvas('pattern', width, height, true);
+      var tmpCtx = tmpCanvas.context;
+      var graphics = new CanvasGraphics(tmpCtx, commonObjs, objs);
+      graphics.groupLevel = owner.groupLevel;
+
+      this.setFillAndStrokeStyleToContext(tmpCtx, paintType, color);
+
+      this.setScale(width, height, xstep, ystep);
+      this.transformToScale(graphics);
+
+      // transform coordinates to pattern space
+      var tmpTranslate = [1, 0, 0, 1, -topLeft[0], -topLeft[1]];
+      graphics.transform.apply(graphics, tmpTranslate);
+
+      this.clipBbox(graphics, bbox, x0, y0, x1, y1);
+
+      graphics.executeOperatorList(operatorList);
+      return tmpCanvas.canvas;
+    },
+
+    setScale: function TilingPattern_setScale(width, height, xstep, ystep) {
+      this.scale = [width / xstep, height / ystep];
+    },
+
+    transformToScale: function TilingPattern_transformToScale(graphics) {
+      var scale = this.scale;
+      var tmpScale = [scale[0], 0, 0, scale[1], 0, 0];
+      graphics.transform.apply(graphics, tmpScale);
+    },
+
+    scaleToContext: function TilingPattern_scaleToContext() {
+      var scale = this.scale;
+      this.ctx.scale(1 / scale[0], 1 / scale[1]);
+    },
+
+    clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) {
+      if (bbox && isArray(bbox) && 4 == bbox.length) {
+        var bboxWidth = x1 - x0;
+        var bboxHeight = y1 - y0;
+        graphics.rectangle(x0, y0, bboxWidth, bboxHeight);
+        graphics.clip();
+        graphics.endPath();
+      }
+    },
+
+    setFillAndStrokeStyleToContext:
+      function setFillAndStrokeStyleToContext(context, paintType, color) {
+      switch (paintType) {
+        case PaintType.COLORED:
+          var ctx = this.ctx;
+          context.fillStyle = ctx.fillStyle;
+          context.strokeStyle = ctx.strokeStyle;
+          break;
+        case PaintType.UNCOLORED:
+          var rgbColor = ColorSpace.singletons.rgb.getRgb(color, 0);
+          var cssColor = Util.makeCssRgb(rgbColor);
+          context.fillStyle = cssColor;
+          context.strokeStyle = cssColor;
+          break;
+        default:
+          error('Unsupported paint type: ' + paintType);
+      }
+    },
+
+    getPattern: function TilingPattern_getPattern(ctx, owner) {
+      var temporaryPatternCanvas = this.createPatternCanvas(owner);
+
+      var ctx = this.ctx;
+      ctx.setTransform.apply(ctx, this.baseTransform);
+      ctx.transform.apply(ctx, this.matrix);
+      this.scaleToContext();
+
+      return ctx.createPattern(temporaryPatternCanvas, 'repeat');
+    }
+  };
+
+  return TilingPattern;
+})();
+
+
+
+var PDFFunction = (function PDFFunctionClosure() {
+  var CONSTRUCT_SAMPLED = 0;
+  var CONSTRUCT_INTERPOLATED = 2;
+  var CONSTRUCT_STICHED = 3;
+  var CONSTRUCT_POSTSCRIPT = 4;
+
+  return {
+    getSampleArray: function PDFFunction_getSampleArray(size, outputSize, bps,
+                                                       str) {
+      var length = 1;
+      for (var i = 0, ii = size.length; i < ii; i++)
+        length *= size[i];
+      length *= outputSize;
+
+      var array = [];
+      var codeSize = 0;
+      var codeBuf = 0;
+      // 32 is a valid bps so shifting won't work
+      var sampleMul = 1.0 / (Math.pow(2.0, bps) - 1);
+
+      var strBytes = str.getBytes((length * bps + 7) / 8);
+      var strIdx = 0;
+      for (var i = 0; i < length; i++) {
+        while (codeSize < bps) {
+          codeBuf <<= 8;
+          codeBuf |= strBytes[strIdx++];
+          codeSize += 8;
+        }
+        codeSize -= bps;
+        array.push((codeBuf >> codeSize) * sampleMul);
+        codeBuf &= (1 << codeSize) - 1;
+      }
+      return array;
+    },
+
+    getIR: function PDFFunction_getIR(xref, fn) {
+      var dict = fn.dict;
+      if (!dict)
+        dict = fn;
+
+      var types = [this.constructSampled,
+                   null,
+                   this.constructInterpolated,
+                   this.constructStiched,
+                   this.constructPostScript];
+
+      var typeNum = dict.get('FunctionType');
+      var typeFn = types[typeNum];
+      if (!typeFn)
+        error('Unknown type of function');
+
+      return typeFn.call(this, fn, dict, xref);
+    },
+
+    fromIR: function PDFFunction_fromIR(IR) {
+      var type = IR[0];
+      switch (type) {
+        case CONSTRUCT_SAMPLED:
+          return this.constructSampledFromIR(IR);
+        case CONSTRUCT_INTERPOLATED:
+          return this.constructInterpolatedFromIR(IR);
+        case CONSTRUCT_STICHED:
+          return this.constructStichedFromIR(IR);
+        //case CONSTRUCT_POSTSCRIPT:
+        default:
+          return this.constructPostScriptFromIR(IR);
+      }
+    },
+
+    parse: function PDFFunction_parse(xref, fn) {
+      var IR = this.getIR(xref, fn);
+      return this.fromIR(IR);
+    },
+
+    constructSampled: function PDFFunction_constructSampled(str, dict) {
+      function toMultiArray(arr) {
+        var inputLength = arr.length;
+        var outputLength = arr.length / 2;
+        var out = [];
+        var index = 0;
+        for (var i = 0; i < inputLength; i += 2) {
+          out[index] = [arr[i], arr[i + 1]];
+          ++index;
+        }
+        return out;
+      }
+      var domain = dict.get('Domain');
+      var range = dict.get('Range');
+
+      if (!domain || !range)
+        error('No domain or range');
+
+      var inputSize = domain.length / 2;
+      var outputSize = range.length / 2;
+
+      domain = toMultiArray(domain);
+      range = toMultiArray(range);
+
+      var size = dict.get('Size');
+      var bps = dict.get('BitsPerSample');
+      var order = dict.get('Order') || 1;
+      if (order !== 1) {
+        // No description how cubic spline interpolation works in PDF32000:2008
+        // As in poppler, ignoring order, linear interpolation may work as good
+        TODO('No support for cubic spline interpolation: ' + order);
+      }
+
+      var encode = dict.get('Encode');
+      if (!encode) {
+        encode = [];
+        for (var i = 0; i < inputSize; ++i) {
+          encode.push(0);
+          encode.push(size[i] - 1);
+        }
+      }
+      encode = toMultiArray(encode);
+
+      var decode = dict.get('Decode');
+      if (!decode)
+        decode = range;
+      else
+        decode = toMultiArray(decode);
+
+      var samples = this.getSampleArray(size, outputSize, bps, str);
+
+      return [
+        CONSTRUCT_SAMPLED, inputSize, domain, encode, decode, samples, size,
+        outputSize, Math.pow(2, bps) - 1, range
+      ];
+    },
+
+    constructSampledFromIR: function PDFFunction_constructSampledFromIR(IR) {
+      // See chapter 3, page 109 of the PDF reference
+      function interpolate(x, xmin, xmax, ymin, ymax) {
+        return ymin + ((x - xmin) * ((ymax - ymin) / (xmax - xmin)));
+      }
+
+      return function constructSampledFromIRResult(args) {
+        // See chapter 3, page 110 of the PDF reference.
+        var m = IR[1];
+        var domain = IR[2];
+        var encode = IR[3];
+        var decode = IR[4];
+        var samples = IR[5];
+        var size = IR[6];
+        var n = IR[7];
+        var mask = IR[8];
+        var range = IR[9];
+
+        if (m != args.length)
+          error('Incorrect number of arguments: ' + m + ' != ' +
+                args.length);
+
+        var x = args;
+
+        // Building the cube vertices: its part and sample index
+        // http://rjwagner49.com/Mathematics/Interpolation.pdf
+        var cubeVertices = 1 << m;
+        var cubeN = new Float64Array(cubeVertices);
+        var cubeVertex = new Uint32Array(cubeVertices);
+        for (var j = 0; j < cubeVertices; j++)
+          cubeN[j] = 1;
+
+        var k = n, pos = 1;
+        // Map x_i to y_j for 0 <= i < m using the sampled function.
+        for (var i = 0; i < m; ++i) {
+          // x_i' = min(max(x_i, Domain_2i), Domain_2i+1)
+          var domain_2i = domain[i][0];
+          var domain_2i_1 = domain[i][1];
+          var xi = Math.min(Math.max(x[i], domain_2i), domain_2i_1);
+
+          // e_i = Interpolate(x_i', Domain_2i, Domain_2i+1,
+          //                   Encode_2i, Encode_2i+1)
+          var e = interpolate(xi, domain_2i, domain_2i_1,
+                              encode[i][0], encode[i][1]);
+
+          // e_i' = min(max(e_i, 0), Size_i - 1)
+          var size_i = size[i];
+          e = Math.min(Math.max(e, 0), size_i - 1);
+
+          // Adjusting the cube: N and vertex sample index
+          var e0 = e < size_i - 1 ? Math.floor(e) : e - 1; // e1 = e0 + 1;
+          var n0 = e0 + 1 - e; // (e1 - e) / (e1 - e0);
+          var n1 = e - e0; // (e - e0) / (e1 - e0);
+          var offset0 = e0 * k;
+          var offset1 = offset0 + k; // e1 * k
+          for (var j = 0; j < cubeVertices; j++) {
+            if (j & pos) {
+              cubeN[j] *= n1;
+              cubeVertex[j] += offset1;
+            } else {
+              cubeN[j] *= n0;
+              cubeVertex[j] += offset0;
+            }
+          }
+
+          k *= size_i;
+          pos <<= 1;
+        }
+
+        var y = new Float64Array(n);
+        for (var j = 0; j < n; ++j) {
+          // Sum all cube vertices' samples portions
+          var rj = 0;
+          for (var i = 0; i < cubeVertices; i++)
+            rj += samples[cubeVertex[i] + j] * cubeN[i];
+
+          // r_j' = Interpolate(r_j, 0, 2^BitsPerSample - 1,
+          //                    Decode_2j, Decode_2j+1)
+          rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]);
+
+          // y_j = min(max(r_j, range_2j), range_2j+1)
+          y[j] = Math.min(Math.max(rj, range[j][0]), range[j][1]);
+        }
+
+        return y;
+      };
+    },
+
+    constructInterpolated: function PDFFunction_constructInterpolated(str,
+                                                                      dict) {
+      var c0 = dict.get('C0') || [0];
+      var c1 = dict.get('C1') || [1];
+      var n = dict.get('N');
+
+      if (!isArray(c0) || !isArray(c1))
+        error('Illegal dictionary for interpolated function');
+
+      var length = c0.length;
+      var diff = [];
+      for (var i = 0; i < length; ++i)
+        diff.push(c1[i] - c0[i]);
+
+      return [CONSTRUCT_INTERPOLATED, c0, diff, n];
+    },
+
+    constructInterpolatedFromIR:
+      function PDFFunction_constructInterpolatedFromIR(IR) {
+      var c0 = IR[1];
+      var diff = IR[2];
+      var n = IR[3];
+
+      var length = diff.length;
+
+      return function constructInterpolatedFromIRResult(args) {
+        var x = n == 1 ? args[0] : Math.pow(args[0], n);
+
+        var out = [];
+        for (var j = 0; j < length; ++j)
+          out.push(c0[j] + (x * diff[j]));
+
+        return out;
+
+      };
+    },
+
+    constructStiched: function PDFFunction_constructStiched(fn, dict, xref) {
+      var domain = dict.get('Domain');
+
+      if (!domain)
+        error('No domain');
+
+      var inputSize = domain.length / 2;
+      if (inputSize != 1)
+        error('Bad domain for stiched function');
+
+      var fnRefs = dict.get('Functions');
+      var fns = [];
+      for (var i = 0, ii = fnRefs.length; i < ii; ++i)
+        fns.push(PDFFunction.getIR(xref, xref.fetchIfRef(fnRefs[i])));
+
+      var bounds = dict.get('Bounds');
+      var encode = dict.get('Encode');
+
+      return [CONSTRUCT_STICHED, domain, bounds, encode, fns];
+    },
+
+    constructStichedFromIR: function PDFFunction_constructStichedFromIR(IR) {
+      var domain = IR[1];
+      var bounds = IR[2];
+      var encode = IR[3];
+      var fnsIR = IR[4];
+      var fns = [];
+
+      for (var i = 0, ii = fnsIR.length; i < ii; i++) {
+        fns.push(PDFFunction.fromIR(fnsIR[i]));
+      }
+
+      return function constructStichedFromIRResult(args) {
+        var clip = function constructStichedFromIRClip(v, min, max) {
+          if (v > max)
+            v = max;
+          else if (v < min)
+            v = min;
+          return v;
+        };
+
+        // clip to domain
+        var v = clip(args[0], domain[0], domain[1]);
+        // calulate which bound the value is in
+        for (var i = 0, ii = bounds.length; i < ii; ++i) {
+          if (v < bounds[i])
+            break;
+        }
+
+        // encode value into domain of function
+        var dmin = domain[0];
+        if (i > 0)
+          dmin = bounds[i - 1];
+        var dmax = domain[1];
+        if (i < bounds.length)
+          dmax = bounds[i];
+
+        var rmin = encode[2 * i];
+        var rmax = encode[2 * i + 1];
+
+        var v2 = rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin);
+
+        // call the appropropriate function
+        return fns[i]([v2]);
+      };
+    },
+
+    constructPostScript: function PDFFunction_constructPostScript(fn, dict,
+                                                                  xref) {
+      var domain = dict.get('Domain');
+      var range = dict.get('Range');
+
+      if (!domain)
+        error('No domain.');
+
+      if (!range)
+        error('No range.');
+
+      var lexer = new PostScriptLexer(fn);
+      var parser = new PostScriptParser(lexer);
+      var code = parser.parse();
+
+      return [CONSTRUCT_POSTSCRIPT, domain, range, code];
+    },
+
+    constructPostScriptFromIR: function PDFFunction_constructPostScriptFromIR(
+                                          IR) {
+      var domain = IR[1];
+      var range = IR[2];
+      var code = IR[3];
+      var numOutputs = range.length / 2;
+      var evaluator = new PostScriptEvaluator(code);
+      // Cache the values for a big speed up, the cache size is limited though
+      // since the number of possible values can be huge from a PS function.
+      var cache = new FunctionCache();
+      return function constructPostScriptFromIRResult(args) {
+        var initialStack = [];
+        for (var i = 0, ii = (domain.length / 2); i < ii; ++i) {
+          initialStack.push(args[i]);
+        }
+
+        var key = initialStack.join('_');
+        if (cache.has(key))
+          return cache.get(key);
+
+        var stack = evaluator.execute(initialStack);
+        var transformed = [];
+        for (i = numOutputs - 1; i >= 0; --i) {
+          var out = stack.pop();
+          var rangeIndex = 2 * i;
+          if (out < range[rangeIndex])
+            out = range[rangeIndex];
+          else if (out > range[rangeIndex + 1])
+            out = range[rangeIndex + 1];
+          transformed[i] = out;
+        }
+        cache.set(key, transformed);
+        return transformed;
+      };
+    }
+  };
+})();
+
+var FunctionCache = (function FunctionCacheClosure() {
+  // Of 10 PDF's with type4 functions the maxium number of distinct values seen
+  // was 256. This still may need some tweaking in the future though.
+  var MAX_CACHE_SIZE = 1024;
+  function FunctionCache() {
+    this.cache = {};
+    this.total = 0;
+  }
+  FunctionCache.prototype = {
+    has: function FunctionCache_has(key) {
+      return key in this.cache;
+    },
+    get: function FunctionCache_get(key) {
+      return this.cache[key];
+    },
+    set: function FunctionCache_set(key, value) {
+      if (this.total < MAX_CACHE_SIZE) {
+        this.cache[key] = value;
+        this.total++;
+      }
+    }
+  };
+  return FunctionCache;
+})();
+
+var PostScriptStack = (function PostScriptStackClosure() {
+  var MAX_STACK_SIZE = 100;
+  function PostScriptStack(initialStack) {
+    this.stack = initialStack || [];
+  }
+
+  PostScriptStack.prototype = {
+    push: function PostScriptStack_push(value) {
+      if (this.stack.length >= MAX_STACK_SIZE)
+        error('PostScript function stack overflow.');
+      this.stack.push(value);
+    },
+    pop: function PostScriptStack_pop() {
+      if (this.stack.length <= 0)
+        error('PostScript function stack underflow.');
+      return this.stack.pop();
+    },
+    copy: function PostScriptStack_copy(n) {
+      if (this.stack.length + n >= MAX_STACK_SIZE)
+        error('PostScript function stack overflow.');
+      var stack = this.stack;
+      for (var i = stack.length - n, j = n - 1; j >= 0; j--, i++)
+        stack.push(stack[i]);
+    },
+    index: function PostScriptStack_index(n) {
+      this.push(this.stack[this.stack.length - n - 1]);
+    },
+    // rotate the last n stack elements p times
+    roll: function PostScriptStack_roll(n, p) {
+      var stack = this.stack;
+      var l = stack.length - n;
+      var r = stack.length - 1, c = l + (p - Math.floor(p / n) * n), i, j, t;
+      for (i = l, j = r; i < j; i++, j--) {
+        t = stack[i]; stack[i] = stack[j]; stack[j] = t;
+      }
+      for (i = l, j = c - 1; i < j; i++, j--) {
+        t = stack[i]; stack[i] = stack[j]; stack[j] = t;
+      }
+      for (i = c, j = r; i < j; i++, j--) {
+        t = stack[i]; stack[i] = stack[j]; stack[j] = t;
+      }
+    }
+  };
+  return PostScriptStack;
+})();
+var PostScriptEvaluator = (function PostScriptEvaluatorClosure() {
+  function PostScriptEvaluator(operators, operands) {
+    this.operators = operators;
+    this.operands = operands;
+  }
+  PostScriptEvaluator.prototype = {
+    execute: function PostScriptEvaluator_execute(initialStack) {
+      var stack = new PostScriptStack(initialStack);
+      var counter = 0;
+      var operators = this.operators;
+      var length = operators.length;
+      var operator, a, b;
+      while (counter < length) {
+        operator = operators[counter++];
+        if (typeof operator == 'number') {
+          // Operator is really an operand and should be pushed to the stack.
+          stack.push(operator);
+          continue;
+        }
+        switch (operator) {
+          // non standard ps operators
+          case 'jz': // jump if false
+            b = stack.pop();
+            a = stack.pop();
+            if (!a)
+              counter = b;
+            break;
+          case 'j': // jump
+            a = stack.pop();
+            counter = a;
+            break;
+
+          // all ps operators in alphabetical order (excluding if/ifelse)
+          case 'abs':
+            a = stack.pop();
+            stack.push(Math.abs(a));
+            break;
+          case 'add':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a + b);
+            break;
+          case 'and':
+            b = stack.pop();
+            a = stack.pop();
+            if (isBool(a) && isBool(b))
+              stack.push(a && b);
+            else
+              stack.push(a & b);
+            break;
+          case 'atan':
+            a = stack.pop();
+            stack.push(Math.atan(a));
+            break;
+          case 'bitshift':
+            b = stack.pop();
+            a = stack.pop();
+            if (a > 0)
+              stack.push(a << b);
+            else
+              stack.push(a >> b);
+            break;
+          case 'ceiling':
+            a = stack.pop();
+            stack.push(Math.ceil(a));
+            break;
+          case 'copy':
+            a = stack.pop();
+            stack.copy(a);
+            break;
+          case 'cos':
+            a = stack.pop();
+            stack.push(Math.cos(a));
+            break;
+          case 'cvi':
+            a = stack.pop() | 0;
+            stack.push(a);
+            break;
+          case 'cvr':
+            // noop
+            break;
+          case 'div':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a / b);
+            break;
+          case 'dup':
+            stack.copy(1);
+            break;
+          case 'eq':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a == b);
+            break;
+          case 'exch':
+            stack.roll(2, 1);
+            break;
+          case 'exp':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(Math.pow(a, b));
+            break;
+          case 'false':
+            stack.push(false);
+            break;
+          case 'floor':
+            a = stack.pop();
+            stack.push(Math.floor(a));
+            break;
+          case 'ge':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a >= b);
+            break;
+          case 'gt':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a > b);
+            break;
+          case 'idiv':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push((a / b) | 0);
+            break;
+          case 'index':
+            a = stack.pop();
+            stack.index(a);
+            break;
+          case 'le':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a <= b);
+            break;
+          case 'ln':
+            a = stack.pop();
+            stack.push(Math.log(a));
+            break;
+          case 'log':
+            a = stack.pop();
+            stack.push(Math.log(a) / Math.LN10);
+            break;
+          case 'lt':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a < b);
+            break;
+          case 'mod':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a % b);
+            break;
+          case 'mul':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a * b);
+            break;
+          case 'ne':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a != b);
+            break;
+          case 'neg':
+            a = stack.pop();
+            stack.push(-b);
+            break;
+          case 'not':
+            a = stack.pop();
+            if (isBool(a) && isBool(b))
+              stack.push(a && b);
+            else
+              stack.push(a & b);
+            break;
+          case 'or':
+            b = stack.pop();
+            a = stack.pop();
+            if (isBool(a) && isBool(b))
+              stack.push(a || b);
+            else
+              stack.push(a | b);
+            break;
+          case 'pop':
+            stack.pop();
+            break;
+          case 'roll':
+            b = stack.pop();
+            a = stack.pop();
+            stack.roll(a, b);
+            break;
+          case 'round':
+            a = stack.pop();
+            stack.push(Math.round(a));
+            break;
+          case 'sin':
+            a = stack.pop();
+            stack.push(Math.sin(a));
+            break;
+          case 'sqrt':
+            a = stack.pop();
+            stack.push(Math.sqrt(a));
+            break;
+          case 'sub':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a - b);
+            break;
+          case 'true':
+            stack.push(true);
+            break;
+          case 'truncate':
+            a = stack.pop();
+            a = a < 0 ? Math.ceil(a) : Math.floor(a);
+            stack.push(a);
+            break;
+          case 'xor':
+            b = stack.pop();
+            a = stack.pop();
+            if (isBool(a) && isBool(b))
+              stack.push(a != b);
+            else
+              stack.push(a ^ b);
+            break;
+          default:
+            error('Unknown operator ' + operator);
+            break;
+        }
+      }
+      return stack.stack;
+    }
+  };
+  return PostScriptEvaluator;
+})();
+
+var PostScriptParser = (function PostScriptParserClosure() {
+  function PostScriptParser(lexer) {
+    this.lexer = lexer;
+    this.operators = [];
+    this.token = null;
+    this.prev = null;
+  }
+  PostScriptParser.prototype = {
+    nextToken: function PostScriptParser_nextToken() {
+      this.prev = this.token;
+      this.token = this.lexer.getToken();
+    },
+    accept: function PostScriptParser_accept(type) {
+      if (this.token.type == type) {
+        this.nextToken();
+        return true;
+      }
+      return false;
+    },
+    expect: function PostScriptParser_expect(type) {
+      if (this.accept(type))
+        return true;
+      error('Unexpected symbol: found ' + this.token.type + ' expected ' +
+            type + '.');
+    },
+    parse: function PostScriptParser_parse() {
+      this.nextToken();
+      this.expect(PostScriptTokenTypes.LBRACE);
+      this.parseBlock();
+      this.expect(PostScriptTokenTypes.RBRACE);
+      return this.operators;
+    },
+    parseBlock: function PostScriptParser_parseBlock() {
+      while (true) {
+        if (this.accept(PostScriptTokenTypes.NUMBER)) {
+          this.operators.push(this.prev.value);
+        } else if (this.accept(PostScriptTokenTypes.OPERATOR)) {
+          this.operators.push(this.prev.value);
+        } else if (this.accept(PostScriptTokenTypes.LBRACE)) {
+          this.parseCondition();
+        } else {
+          return;
+        }
+      }
+    },
+    parseCondition: function PostScriptParser_parseCondition() {
+      // Add two place holders that will be updated later
+      var conditionLocation = this.operators.length;
+      this.operators.push(null, null);
+
+      this.parseBlock();
+      this.expect(PostScriptTokenTypes.RBRACE);
+      if (this.accept(PostScriptTokenTypes.IF)) {
+        // The true block is right after the 'if' so it just falls through on
+        // true else it jumps and skips the true block.
+        this.operators[conditionLocation] = this.operators.length;
+        this.operators[conditionLocation + 1] = 'jz';
+      } else if (this.accept(PostScriptTokenTypes.LBRACE)) {
+        var jumpLocation = this.operators.length;
+        this.operators.push(null, null);
+        var endOfTrue = this.operators.length;
+        this.parseBlock();
+        this.expect(PostScriptTokenTypes.RBRACE);
+        this.expect(PostScriptTokenTypes.IFELSE);
+        // The jump is added at the end of the true block to skip the false
+        // block.
+        this.operators[jumpLocation] = this.operators.length;
+        this.operators[jumpLocation + 1] = 'j';
+
+        this.operators[conditionLocation] = endOfTrue;
+        this.operators[conditionLocation + 1] = 'jz';
+      } else {
+        error('PS Function: error parsing conditional.');
+      }
+    }
+  };
+  return PostScriptParser;
+})();
+
+var PostScriptTokenTypes = {
+  LBRACE: 0,
+  RBRACE: 1,
+  NUMBER: 2,
+  OPERATOR: 3,
+  IF: 4,
+  IFELSE: 5
+};
+
+var PostScriptToken = (function PostScriptTokenClosure() {
+  function PostScriptToken(type, value) {
+    this.type = type;
+    this.value = value;
+  }
+
+  var opCache = {};
+
+  PostScriptToken.getOperator = function PostScriptToken_getOperator(op) {
+    var opValue = opCache[op];
+    if (opValue)
+      return opValue;
+
+    return opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op);
+  };
+
+  PostScriptToken.LBRACE = new PostScriptToken(PostScriptTokenTypes.LBRACE,
+                                                '{');
+  PostScriptToken.RBRACE = new PostScriptToken(PostScriptTokenTypes.RBRACE,
+                                                '}');
+  PostScriptToken.IF = new PostScriptToken(PostScriptTokenTypes.IF, 'IF');
+  PostScriptToken.IFELSE = new PostScriptToken(PostScriptTokenTypes.IFELSE,
+                                                'IFELSE');
+  return PostScriptToken;
+})();
+
+var PostScriptLexer = (function PostScriptLexerClosure() {
+  function PostScriptLexer(stream) {
+    this.stream = stream;
+    this.nextChar();
+  }
+  PostScriptLexer.prototype = {
+    nextChar: function PostScriptLexer_nextChar() {
+      return (this.currentChar = this.stream.getByte());
+    },
+    getToken: function PostScriptLexer_getToken() {
+      var s = '';
+      var comment = false;
+      var ch = this.currentChar;
+
+      // skip comments
+      while (true) {
+        if (ch < 0) {
+          return EOF;
+        }
+
+        if (comment) {
+          if (ch === 0x0A || ch === 0x0D) {
+            comment = false;
+          }
+        } else if (ch == 0x25) { // '%'
+          comment = true;
+        } else if (!Lexer.isSpace(ch)) {
+          break;
+        }
+        ch = this.nextChar();
+      }
+      switch (ch | 0) {
+        case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: // '0'-'4'
+        case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: // '5'-'9'
+        case 0x2B: case 0x2D: case 0x2E: // '+', '-', '.'
+          return new PostScriptToken(PostScriptTokenTypes.NUMBER,
+                                      this.getNumber());
+        case 0x7B: // '{'
+          this.nextChar();
+          return PostScriptToken.LBRACE;
+        case 0x7D: // '}'
+          this.nextChar();
+          return PostScriptToken.RBRACE;
+      }
+      // operator
+      var str = String.fromCharCode(ch);
+      while ((ch = this.nextChar()) >= 0 && // and 'A'-'Z', 'a'-'z'
+             ((ch >= 0x41 && ch <= 0x5A) || (ch >= 0x61 && ch <= 0x7A))) {
+        str += String.fromCharCode(ch);
+      }
+      switch (str.toLowerCase()) {
+        case 'if':
+          return PostScriptToken.IF;
+        case 'ifelse':
+          return PostScriptToken.IFELSE;
+        default:
+          return PostScriptToken.getOperator(str);
+      }
+    },
+    getNumber: function PostScriptLexer_getNumber() {
+      var ch = this.currentChar;
+      var str = String.fromCharCode(ch);
+      while ((ch = this.nextChar()) >= 0) {
+        if ((ch >= 0x30 && ch <= 0x39) || // '0'-'9'
+             ch === 0x2D || ch === 0x2E) { // '-', '.'
+          str += String.fromCharCode(ch);
+        } else {
+          break;
+        }
+      }
+      var value = parseFloat(str);
+      if (isNaN(value))
+        error('Invalid floating point number: ' + value);
+      return value;
+    }
+  };
+  return PostScriptLexer;
+})();
+
+
+
+var Annotation = (function AnnotationClosure() {
+  // 12.5.5: Algorithm: Appearance streams
+  function getTransformMatrix(rect, bbox, matrix) {
+    var bounds = Util.getAxialAlignedBoundingBox(bbox, matrix);
+    var minX = bounds[0];
+    var minY = bounds[1];
+    var maxX = bounds[2];
+    var maxY = bounds[3];
+
+    if (minX === maxX || minY === maxY) {
+      // From real-life file, bbox was [0, 0, 0, 0]. In this case,
+      // just apply the transform for rect
+      return [1, 0, 0, 1, rect[0], rect[1]];
+    }
+
+    var xRatio = (rect[2] - rect[0]) / (maxX - minX);
+    var yRatio = (rect[3] - rect[1]) / (maxY - minY);
+    return [
+      xRatio,
+      0,
+      0,
+      yRatio,
+      rect[0] - minX * xRatio,
+      rect[1] - minY * yRatio
+    ];
+  }
+
+  function getDefaultAppearance(dict) {
+    var appearanceState = dict.get('AP');
+    if (!isDict(appearanceState)) {
+      return;
+    }
+
+    var appearance;
+    var appearances = appearanceState.get('N');
+    if (isDict(appearances)) {
+      var as = dict.get('AS');
+      if (as && appearances.has(as.name)) {
+        appearance = appearances.get(as.name);
+      }
+    } else {
+      appearance = appearances;
+    }
+    return appearance;
+  }
+
+  function Annotation(params) {
+    if (params.data) {
+      this.data = params.data;
+      return;
+    }
+
+    var dict = params.dict;
+    var data = this.data = {};
+
+    data.subtype = dict.get('Subtype').name;
+    var rect = dict.get('Rect');
+    data.rect = Util.normalizeRect(rect);
+    data.annotationFlags = dict.get('F');
+
+    var color = dict.get('C');
+    if (isArray(color) && color.length === 3) {
+      // TODO(mack): currently only supporting rgb; need support different
+      // colorspaces
+      data.color = color;
+    } else {
+      data.color = [0, 0, 0];
+    }
+
+    // Some types of annotations have border style dict which has more
+    // info than the border array
+    if (dict.has('BS')) {
+      var borderStyle = dict.get('BS');
+      data.borderWidth = borderStyle.has('W') ? borderStyle.get('W') : 1;
+    } else {
+      var borderArray = dict.get('Border') || [0, 0, 1];
+      data.borderWidth = borderArray[2] || 0;
+    }
+
+    this.appearance = getDefaultAppearance(dict);
+    data.hasAppearance = !!this.appearance;
+  }
+
+  Annotation.prototype = {
+
+    getData: function Annotation_getData() {
+      return this.data;
+    },
+
+    hasHtml: function Annotation_hasHtml() {
+      return false;
+    },
+
+    getHtmlElement: function Annotation_getHtmlElement(commonObjs) {
+      throw new NotImplementedException(
+        'getHtmlElement() should be implemented in subclass');
+    },
+
+    // TODO(mack): Remove this, it's not really that helpful.
+    getEmptyContainer: function Annotation_getEmptyContainer(tagName, rect) {
+      assert(!isWorker,
+        'getEmptyContainer() should be called from main thread');
+
+      rect = rect || this.data.rect;
+      var element = document.createElement(tagName);
+      element.style.width = Math.ceil(rect[2] - rect[0]) + 'px';
+      element.style.height = Math.ceil(rect[3] - rect[1]) + 'px';
+      return element;
+    },
+
+    isViewable: function Annotation_isViewable() {
+      var data = this.data;
+      return !!(
+        data &&
+        (!data.annotationFlags ||
+         !(data.annotationFlags & 0x22)) && // Hidden or NoView
+        data.rect                            // rectangle is nessessary
+      );
+    },
+
+    loadResources: function(keys) {
+      var promise = new Promise();
+      this.appearance.dict.getAsync('Resources').then(function(resources) {
+        if (!resources) {
+          promise.resolve();
+          return;
+        }
+        var objectLoader = new ObjectLoader(resources.map,
+                                            keys,
+                                            resources.xref);
+        objectLoader.load().then(function() {
+          promise.resolve(resources);
+        });
+      }.bind(this));
+
+      return promise;
+    },
+
+    getOperatorList: function Annotation_getToOperatorList(evaluator) {
+
+      var promise = new Promise();
+
+      if (!this.appearance) {
+        promise.resolve(new OperatorList());
+        return promise;
+      }
+
+      var data = this.data;
+
+      var appearanceDict = this.appearance.dict;
+      var resourcesPromise = this.loadResources([
+        'ExtGState',
+        'ColorSpace',
+        'Pattern',
+        'Shading',
+        'XObject',
+        'Font'
+        // ProcSet
+        // Properties
+      ]);
+      var bbox = appearanceDict.get('BBox') || [0, 0, 1, 1];
+      var matrix = appearanceDict.get('Matrix') || [1, 0, 0, 1, 0 ,0];
+      var transform = getTransformMatrix(data.rect, bbox, matrix);
+
+      var border = data.border;
+
+      resourcesPromise.then(function(resources) {
+        var opList = new OperatorList();
+        opList.addOp('beginAnnotation', [data.rect, transform, matrix]);
+        evaluator.getOperatorList(this.appearance, resources, opList);
+        opList.addOp('endAnnotation', []);
+        promise.resolve(opList);
+      }.bind(this));
+
+      return promise;
+    }
+  };
+
+  Annotation.getConstructor =
+      function Annotation_getConstructor(subtype, fieldType) {
+
+    if (!subtype) {
+      return;
+    }
+
+    // TODO(mack): Implement FreeText annotations
+    if (subtype === 'Link') {
+      return LinkAnnotation;
+    } else if (subtype === 'Text') {
+      return TextAnnotation;
+    } else if (subtype === 'Widget') {
+      if (!fieldType) {
+        return;
+      }
+
+      if (fieldType === 'Tx') {
+        return TextWidgetAnnotation;
+      } else {
+        return WidgetAnnotation;
+      }
+    } else {
+      return Annotation;
+    }
+  };
+
+  // TODO(mack): Support loading annotation from data
+  Annotation.fromData = function Annotation_fromData(data) {
+    var subtype = data.subtype;
+    var fieldType = data.fieldType;
+    var Constructor = Annotation.getConstructor(subtype, fieldType);
+    if (Constructor) {
+      return new Constructor({ data: data });
+    }
+  };
+
+  Annotation.fromRef = function Annotation_fromRef(xref, ref) {
+
+    var dict = xref.fetchIfRef(ref);
+    if (!isDict(dict)) {
+      return;
+    }
+
+    var subtype = dict.get('Subtype');
+    subtype = isName(subtype) ? subtype.name : '';
+    if (!subtype) {
+      return;
+    }
+
+    var fieldType = Util.getInheritableProperty(dict, 'FT');
+    fieldType = isName(fieldType) ? fieldType.name : '';
+
+    var Constructor = Annotation.getConstructor(subtype, fieldType);
+    if (!Constructor) {
+      return;
+    }
+
+    var params = {
+      dict: dict,
+      ref: ref,
+    };
+
+    var annotation = new Constructor(params);
+
+    if (annotation.isViewable()) {
+      return annotation;
+    } else {
+      TODO('unimplemented annotation type: ' + subtype);
+    }
+  };
+
+  Annotation.appendToOperatorList = function Annotation_appendToOperatorList(
+      annotations, opList, pdfManager, partialEvaluator) {
+
+    function reject(e) {
+      annotationsReadyPromise.reject(e);
+    }
+
+    var annotationsReadyPromise = new Promise();
+
+    var annotationPromises = [];
+    for (var i = 0, n = annotations.length; i < n; ++i) {
+      annotationPromises.push(annotations[i].getOperatorList(partialEvaluator));
+    }
+    Promise.all(annotationPromises).then(function(datas) {
+      opList.addOp('beginAnnotations', []);
+      for (var i = 0, n = datas.length; i < n; ++i) {
+        var annotOpList = datas[i];
+        opList.addOpList(annotOpList);
+      }
+      opList.addOp('endAnnotations', []);
+      annotationsReadyPromise.resolve();
+    }, reject);
+
+    return annotationsReadyPromise;
+  };
+
+  return Annotation;
+})();
+PDFJS.Annotation = Annotation;
+
+
+var WidgetAnnotation = (function WidgetAnnotationClosure() {
+
+  function WidgetAnnotation(params) {
+    Annotation.call(this, params);
+
+    if (params.data) {
+      return;
+    }
+
+    var dict = params.dict;
+    var data = this.data;
+
+    data.fieldValue = stringToPDFString(
+      Util.getInheritableProperty(dict, 'V') || '');
+    data.alternativeText = stringToPDFString(dict.get('TU') || '');
+    data.defaultAppearance = Util.getInheritableProperty(dict, 'DA') || '';
+    var fieldType = Util.getInheritableProperty(dict, 'FT');
+    data.fieldType = isName(fieldType) ? fieldType.name : '';
+    data.fieldFlags = Util.getInheritableProperty(dict, 'Ff') || 0;
+    this.fieldResources = Util.getInheritableProperty(dict, 'DR') || new Dict();
+
+    // Building the full field name by collecting the field and
+    // its ancestors 'T' data and joining them using '.'.
+    var fieldName = [];
+    var namedItem = dict;
+    var ref = params.ref;
+    while (namedItem) {
+      var parent = namedItem.get('Parent');
+      var parentRef = namedItem.getRaw('Parent');
+      var name = namedItem.get('T');
+      if (name) {
+        fieldName.unshift(stringToPDFString(name));
+      } else {
+        // The field name is absent, that means more than one field
+        // with the same name may exist. Replacing the empty name
+        // with the '`' plus index in the parent's 'Kids' array.
+        // This is not in the PDF spec but necessary to id the
+        // the input controls.
+        var kids = parent.get('Kids');
+        var j, jj;
+        for (j = 0, jj = kids.length; j < jj; j++) {
+          var kidRef = kids[j];
+          if (kidRef.num == ref.num && kidRef.gen == ref.gen)
+            break;
+        }
+        fieldName.unshift('`' + j);
+      }
+      namedItem = parent;
+      ref = parentRef;
+    }
+    data.fullName = fieldName.join('.');
+  }
+
+  var parent = Annotation.prototype;
+  Util.inherit(WidgetAnnotation, Annotation, {
+    isViewable: function WidgetAnnotation_isViewable() {
+      if (this.data.fieldType === 'Sig') {
+        TODO('unimplemented annotation type: Widget signature');
+        return false;
+      }
+
+      return parent.isViewable.call(this);
+    }
+  });
+
+  return WidgetAnnotation;
+})();
+
+var TextWidgetAnnotation = (function TextWidgetAnnotationClosure() {
+  function TextWidgetAnnotation(params) {
+    WidgetAnnotation.call(this, params);
+
+    if (params.data) {
+      return;
+    }
+
+    this.data.textAlignment = Util.getInheritableProperty(params.dict, 'Q');
+  }
+
+  // TODO(mack): This dupes some of the logic in CanvasGraphics.setFont()
+  function setTextStyles(element, item, fontObj) {
+
+    var style = element.style;
+    style.fontSize = item.fontSize + 'px';
+    style.direction = item.fontDirection < 0 ? 'rtl': 'ltr';
+
+    if (!fontObj) {
+      return;
+    }
+
+    style.fontWeight = fontObj.black ?
+                            (fontObj.bold ? 'bolder' : 'bold') :
+                            (fontObj.bold ? 'bold' : 'normal');
+    style.fontStyle = fontObj.italic ? 'italic' : 'normal';
+
+    var fontName = fontObj.loadedName;
+    var fontFamily = fontName ? '"' + fontName + '", ' : '';
+    // Use a reasonable default font if the font doesn't specify a fallback
+    var fallbackName = fontObj.fallbackName || 'Helvetica, sans-serif';
+    style.fontFamily = fontFamily + fallbackName;
+  }
+
+
+  var parent = WidgetAnnotation.prototype;
+  Util.inherit(TextWidgetAnnotation, WidgetAnnotation, {
+    hasHtml: function TextWidgetAnnotation_hasHtml() {
+      return !this.data.hasAppearance && !!this.data.fieldValue;
+    },
+
+    getHtmlElement: function TextWidgetAnnotation_getHtmlElement(commonObjs) {
+      assert(!isWorker, 'getHtmlElement() shall be called from main thread');
+
+      var item = this.data;
+
+      var element = this.getEmptyContainer('div');
+      element.style.display = 'table';
+
+      var content = document.createElement('div');
+      content.textContent = item.fieldValue;
+      var textAlignment = item.textAlignment;
+      content.style.textAlign = ['left', 'center', 'right'][textAlignment];
+      content.style.verticalAlign = 'middle';
+      content.style.display = 'table-cell';
+
+      var fontObj = item.fontRefName ?
+                    commonObjs.getData(item.fontRefName) : null;
+      var cssRules = setTextStyles(content, item, fontObj);
+
+      element.appendChild(content);
+
+      return element;
+    },
+
+    getOperatorList: function TextWidgetAnnotation_getOperatorList(evaluator) {
+      if (this.appearance) {
+        return Annotation.prototype.getOperatorList.call(this, evaluator);
+      }
+
+      var promise = new Promise();
+      var opList = new OperatorList();
+      var data = this.data;
+
+      // Even if there is an appearance stream, ignore it. This is the
+      // behaviour used by Adobe Reader.
+
+      var defaultAppearance = data.defaultAppearance;
+      if (!defaultAppearance) {
+        promise.resolve(opList);
+        return promise;
+      }
+
+      // Include any font resources found in the default appearance
+
+      var stream = new Stream(stringToBytes(defaultAppearance));
+      evaluator.getOperatorList(stream, this.fieldResources, opList);
+      var appearanceFnArray = opList.fnArray;
+      var appearanceArgsArray = opList.argsArray;
+      var fnArray = [];
+      var argsArray = [];
+
+      // TODO(mack): Add support for stroke color
+      data.rgb = [0, 0, 0];
+      // TODO THIS DOESN'T MAKE ANY SENSE SINCE THE fnArray IS EMPTY!
+      for (var i = 0, n = fnArray.length; i < n; ++i) {
+        var fnName = appearanceFnArray[i];
+        var args = appearanceArgsArray[i];
+
+        if (fnName === 'setFont') {
+          data.fontRefName = args[0];
+          var size = args[1];
+          if (size < 0) {
+            data.fontDirection = -1;
+            data.fontSize = -size;
+          } else {
+            data.fontDirection = 1;
+            data.fontSize = size;
+          }
+        } else if (fnName === 'setFillRGBColor') {
+          data.rgb = args;
+        } else if (fnName === 'setFillGray') {
+          var rgbValue = args[0] * 255;
+          data.rgb = [rgbValue, rgbValue, rgbValue];
+        }
+      }
+      promise.resolve(opList);
+      return promise;
+    }
+  });
+
+  return TextWidgetAnnotation;
+})();
+
+var TextAnnotation = (function TextAnnotationClosure() {
+  function TextAnnotation(params) {
+    Annotation.call(this, params);
+
+    if (params.data) {
+      return;
+    }
+
+    var dict = params.dict;
+    var data = this.data;
+
+    var content = dict.get('Contents');
+    var title = dict.get('T');
+    data.content = stringToPDFString(content || '');
+    data.title = stringToPDFString(title || '');
+    data.name = !dict.has('Name') ? 'Note' : dict.get('Name').name;
+  }
+
+  var ANNOT_MIN_SIZE = 10;
+
+  Util.inherit(TextAnnotation, Annotation, {
+
+    getOperatorList: function TextAnnotation_getOperatorList(evaluator) {
+      var promise = new Promise();
+      promise.resolve(new OperatorList());
+      return promise;
+    },
+
+    hasHtml: function TextAnnotation_hasHtml() {
+      return true;
+    },
+
+    getHtmlElement: function TextAnnotation_getHtmlElement(commonObjs) {
+      assert(!isWorker, 'getHtmlElement() shall be called from main thread');
+
+      var item = this.data;
+      var rect = item.rect;
+
+      // sanity check because of OOo-generated PDFs
+      if ((rect[3] - rect[1]) < ANNOT_MIN_SIZE) {
+        rect[3] = rect[1] + ANNOT_MIN_SIZE;
+      }
+      if ((rect[2] - rect[0]) < ANNOT_MIN_SIZE) {
+        rect[2] = rect[0] + (rect[3] - rect[1]); // make it square
+      }
+
+      var container = this.getEmptyContainer('section', rect);
+      container.className = 'annotText';
+
+      var image = document.createElement('img');
+      image.style.height = container.style.height;
+      var iconName = item.name;
+      image.src = PDFJS.imageResourcesPath + 'annotation-' +
+        iconName.toLowerCase() + '.svg';
+      image.alt = '[{{type}} Annotation]';
+      image.dataset.l10nId = 'text_annotation_type';
+      image.dataset.l10nArgs = JSON.stringify({type: iconName});
+      var content = document.createElement('div');
+      content.setAttribute('hidden', true);
+      var title = document.createElement('h1');
+      var text = document.createElement('p');
+      content.style.left = Math.floor(rect[2] - rect[0]) + 'px';
+      content.style.top = '0px';
+      title.textContent = item.title;
+
+      if (!item.content && !item.title) {
+        content.setAttribute('hidden', true);
+      } else {
+        var e = document.createElement('span');
+        var lines = item.content.split(/(?:\r\n?|\n)/);
+        for (var i = 0, ii = lines.length; i < ii; ++i) {
+          var line = lines[i];
+          e.appendChild(document.createTextNode(line));
+          if (i < (ii - 1))
+            e.appendChild(document.createElement('br'));
+        }
+        text.appendChild(e);
+
+        var showAnnotation = function showAnnotation() {
+          container.style.zIndex += 1;
+          content.removeAttribute('hidden');
+        };
+
+        var hideAnnotation = function hideAnnotation(e) {
+          if (e.toElement || e.relatedTarget) { // No context menu is used
+            container.style.zIndex -= 1;
+            content.setAttribute('hidden', true);
+          }
+        };
+
+        content.addEventListener('mouseover', showAnnotation, false);
+        content.addEventListener('mouseout', hideAnnotation, false);
+        image.addEventListener('mouseover', showAnnotation, false);
+        image.addEventListener('mouseout', hideAnnotation, false);
+      }
+
+      content.appendChild(title);
+      content.appendChild(text);
+      container.appendChild(image);
+      container.appendChild(content);
+
+      return container;
+    }
+  });
+
+  return TextAnnotation;
+})();
+
+var LinkAnnotation = (function LinkAnnotationClosure() {
+  function LinkAnnotation(params) {
+    Annotation.call(this, params);
+
+    if (params.data) {
+      return;
+    }
+
+    var dict = params.dict;
+    var data = this.data;
+
+    var action = dict.get('A');
+    if (action) {
+      var linkType = action.get('S').name;
+      if (linkType === 'URI') {
+        var url = action.get('URI');
+        // TODO: pdf spec mentions urls can be relative to a Base
+        // entry in the dictionary.
+        if (!isValidUrl(url, false)) {
+          url = '';
+        }
+        data.url = url;
+      } else if (linkType === 'GoTo') {
+        data.dest = action.get('D');
+      } else if (linkType === 'GoToR') {
+        var urlDict = action.get('F');
+        if (isDict(urlDict)) {
+          // We assume that the 'url' is a Filspec dictionary
+          // and fetch the url without checking any further
+          url = urlDict.get('F') || '';
+        }
+
+        // TODO: pdf reference says that GoToR
+        // can also have 'NewWindow' attribute
+        if (!isValidUrl(url, false)) {
+          url = '';
+        }
+        data.url = url;
+        data.dest = action.get('D');
+      } else if (linkType === 'Named') {
+        data.action = action.get('N').name;
+      } else {
+        TODO('unrecognized link type: ' + linkType);
+      }
+    } else if (dict.has('Dest')) {
+      // simple destination link
+      var dest = dict.get('Dest');
+      data.dest = isName(dest) ? dest.name : dest;
+    }
+  }
+
+  Util.inherit(LinkAnnotation, Annotation, {
+    hasOperatorList: function LinkAnnotation_hasOperatorList() {
+      return false;
+    },
+
+    hasHtml: function LinkAnnotation_hasHtml() {
+      return true;
+    },
+
+    getHtmlElement: function LinkAnnotation_getHtmlElement(commonObjs) {
+      var rect = this.data.rect;
+      var element = document.createElement('a');
+      var borderWidth = this.data.borderWidth;
+
+      element.style.borderWidth = borderWidth + 'px';
+      var color = this.data.color;
+      var rgb = [];
+      for (var i = 0; i < 3; ++i) {
+        rgb[i] = Math.round(color[i] * 255);
+      }
+      element.style.borderColor = Util.makeCssRgb(rgb);
+      element.style.borderStyle = 'solid';
+
+      var width = rect[2] - rect[0] - 2 * borderWidth;
+      var height = rect[3] - rect[1] - 2 * borderWidth;
+      element.style.width = width + 'px';
+      element.style.height = height + 'px';
+
+      element.href = this.data.url || '';
+      return element;
+    }
+  });
+
+  return LinkAnnotation;
+})();
+
+
+
+
+var NetworkManager = (function NetworkManagerClosure() {
+
+  var OK_RESPONSE = 200;
+  var PARTIAL_CONTENT_RESPONSE = 206;
+
+  function NetworkManager(url, args) {
+    this.url = url;
+    args = args || {};
+    this.httpHeaders = args.httpHeaders || {};
+    this.getXhr = args.getXhr ||
+      function NetworkManager_getXhr() {
+        return new XMLHttpRequest();
+      };
+
+    this.currXhrId = 0;
+    this.pendingRequests = {};
+    this.loadedRequests = {};
+  }
+
+  function getArrayBuffer(xhr) {
+    var data = (xhr.mozResponseArrayBuffer || xhr.mozResponse ||
+                xhr.responseArrayBuffer || xhr.response);
+    if (typeof data !== 'string') {
+      return data;
+    }
+    var length = data.length;
+    var buffer = new Uint8Array(length);
+    for (var i = 0; i < length; i++) {
+      buffer[i] = data.charCodeAt(i) & 0xFF;
+    }
+    return buffer;
+  }
+
+  NetworkManager.prototype = {
+    requestRange: function NetworkManager_requestRange(begin, end, listeners) {
+      var args = {
+        begin: begin,
+        end: end
+      };
+      for (var prop in listeners) {
+        args[prop] = listeners[prop];
+      }
+      return this.request(args);
+    },
+
+    requestFull: function NetworkManager_requestRange(listeners) {
+      return this.request(listeners);
+    },
+
+    request: function NetworkManager_requestRange(args) {
+      var xhr = this.getXhr();
+      var xhrId = this.currXhrId++;
+      var pendingRequest = this.pendingRequests[xhrId] = {
+        xhr: xhr
+      };
+
+      xhr.open('GET', this.url);
+      for (var property in this.httpHeaders) {
+        var value = this.httpHeaders[property];
+        if (typeof value === 'undefined') {
+          continue;
+        }
+        xhr.setRequestHeader(property, value);
+      }
+      if ('begin' in args && 'end' in args) {
+        var rangeStr = args.begin + '-' + (args.end - 1);
+        xhr.setRequestHeader('Range', 'bytes=' + rangeStr);
+        pendingRequest.expectedStatus = 206;
+      } else {
+        pendingRequest.expectedStatus = 200;
+      }
+
+      xhr.mozResponseType = xhr.responseType = 'arraybuffer';
+
+      if (args.onProgress) {
+        xhr.onprogress = args.onProgress;
+      }
+      if (args.onError) {
+        xhr.onerror = function(evt) {
+          args.onError(xhr.status);
+        };
+      }
+      xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);
+
+      pendingRequest.onHeadersReceived = args.onHeadersReceived;
+      pendingRequest.onDone = args.onDone;
+      pendingRequest.onError = args.onError;
+
+      xhr.send(null);
+
+      return xhrId;
+    },
+
+    onStateChange: function NetworkManager_onStateChange(xhrId, evt) {
+      var pendingRequest = this.pendingRequests[xhrId];
+      if (!pendingRequest) {
+        // Maybe abortRequest was called...
+        return;
+      }
+
+      var xhr = pendingRequest.xhr;
+      if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {
+        pendingRequest.onHeadersReceived();
+        delete pendingRequest.onHeadersReceived;
+      }
+
+      if (xhr.readyState !== 4) {
+        return;
+      }
+
+      if (!(xhrId in this.pendingRequests)) {
+        // The XHR request might have been aborted in onHeadersReceived()
+        // callback, in which case we should abort request
+        return;
+      }
+
+      delete this.pendingRequests[xhrId];
+
+      // success status == 0 can be on ftp, file and other protocols
+      if (xhr.status === 0 && /^https?:/i.test(this.url)) {
+        if (pendingRequest.onError) {
+          pendingRequest.onError(xhr.status);
+        }
+        return;
+      }
+      var xhrStatus = xhr.status || OK_RESPONSE;
+
+      // From http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.2:
+      // "A server MAY ignore the Range header". This means it's possible to
+      // get a 200 rather than a 206 response from a range request.
+      var ok_response_on_range_request =
+          xhrStatus === OK_RESPONSE &&
+          pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;
+
+      if (!ok_response_on_range_request &&
+          xhrStatus !== pendingRequest.expectedStatus) {
+        if (pendingRequest.onError) {
+          pendingRequest.onError(xhr.status);
+        }
+        return;
+      }
+
+      this.loadedRequests[xhrId] = true;
+
+      var chunk = getArrayBuffer(xhr);
+      if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {
+        var rangeHeader = xhr.getResponseHeader('Content-Range');
+        var matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader);
+        var begin = parseInt(matches[1], 10);
+        pendingRequest.onDone({
+          begin: begin,
+          chunk: chunk
+        });
+      } else {
+        pendingRequest.onDone({
+          begin: 0,
+          chunk: chunk
+        });
+      }
+    },
+
+    hasPendingRequests: function NetworkManager_hasPendingRequests() {
+      for (var xhrId in this.pendingRequests) {
+        return true;
+      }
+      return false;
+    },
+
+    getRequestXhr: function NetworkManager_getXhr(xhrId) {
+      return this.pendingRequests[xhrId].xhr;
+    },
+
+    isPendingRequest: function NetworkManager_isPendingRequest(xhrId) {
+      return xhrId in this.pendingRequests;
+    },
+
+    isLoadedRequest: function NetworkManager_isLoadedRequest(xhrId) {
+      return xhrId in this.loadedRequests;
+    },
+
+    abortAllRequests: function NetworkManager_abortAllRequests() {
+      for (var xhrId in this.pendingRequests) {
+        this.abortRequest(xhrId | 0);
+      }
+    },
+
+    abortRequest: function NetworkManager_abortRequest(xhrId) {
+      var xhr = this.pendingRequests[xhrId].xhr;
+      delete this.pendingRequests[xhrId];
+      xhr.abort();
+    }
+  };
+
+  return NetworkManager;
+})();
+
+
+
+var ChunkedStream = (function ChunkedStreamClosure() {
+  function ChunkedStream(length, chunkSize, manager) {
+    this.bytes = new Uint8Array(length);
+    this.start = 0;
+    this.pos = 0;
+    this.end = length;
+    this.chunkSize = chunkSize;
+    this.loadedChunks = [];
+    this.numChunksLoaded = 0;
+    this.numChunks = Math.ceil(length / chunkSize);
+    this.manager = manager;
+  }
+
+  // required methods for a stream. if a particular stream does not
+  // implement these, an error should be thrown
+  ChunkedStream.prototype = {
+
+    getMissingChunks: function ChunkedStream_getMissingChunks() {
+      var chunks = [];
+      for (var chunk = 0, n = this.numChunks; chunk < n; ++chunk) {
+        if (!(chunk in this.loadedChunks)) {
+          chunks.push(chunk);
+        }
+      }
+      return chunks;
+    },
+
+    getBaseStreams: function ChunkedStream_getBaseStreams() {
+      return [this];
+    },
+
+    allChunksLoaded: function ChunkedStream_allChunksLoaded() {
+      return this.numChunksLoaded === this.numChunks;
+    },
+
+    onReceiveData: function(begin, chunk) {
+      var end = begin + chunk.byteLength;
+
+      assert(begin % this.chunkSize === 0, 'Bad begin offset: ' + begin);
+      // Using this.length is inaccurate here since this.start can be moved
+      // See ChunkedStream.moveStart()
+      var length = this.bytes.length;
+      assert(end % this.chunkSize === 0 || end === length,
+        'Bad end offset: ' + end);
+
+      this.bytes.set(new Uint8Array(chunk), begin);
+      var chunkSize = this.chunkSize;
+      var beginChunk = Math.floor(begin / chunkSize);
+      var endChunk = Math.floor((end - 1) / chunkSize) + 1;
+
+      for (var chunk = beginChunk; chunk < endChunk; ++chunk) {
+        if (!(chunk in this.loadedChunks)) {
+          this.loadedChunks[chunk] = true;
+          ++this.numChunksLoaded;
+        }
+      }
+    },
+
+    ensureRange: function ChunkedStream_ensureRange(begin, end) {
+      if (begin >= end) {
+        return;
+      }
+
+      var chunkSize = this.chunkSize;
+      var beginChunk = Math.floor(begin / chunkSize);
+      var endChunk = Math.floor((end - 1) / chunkSize) + 1;
+      for (var chunk = beginChunk; chunk < endChunk; ++chunk) {
+        if (!(chunk in this.loadedChunks)) {
+          throw new MissingDataException(begin, end);
+        }
+      }
+    },
+
+    nextEmptyChunk: function ChunkedStream_nextEmptyChunk(beginChunk) {
+      for (var chunk = beginChunk, n = this.numChunks; chunk < n; ++chunk) {
+        if (!(chunk in this.loadedChunks)) {
+          return chunk;
+        }
+      }
+      // Wrap around to beginning
+      for (var chunk = 0; chunk < beginChunk; ++chunk) {
+        if (!(chunk in this.loadedChunks)) {
+          return chunk;
+        }
+      }
+      return null;
+    },
+
+    hasChunk: function ChunkedStream_hasChunk(chunk) {
+      return chunk in this.loadedChunks;
+    },
+
+    get length() {
+      return this.end - this.start;
+    },
+
+    getByte: function ChunkedStream_getByte() {
+      var pos = this.pos;
+      if (pos >= this.end) {
+        return -1;
+      }
+      this.ensureRange(pos, pos + 1);
+      return this.bytes[this.pos++];
+    },
+
+    // returns subarray of original buffer
+    // should only be read
+    getBytes: function ChunkedStream_getBytes(length) {
+      var bytes = this.bytes;
+      var pos = this.pos;
+      var strEnd = this.end;
+
+      if (!length) {
+        this.ensureRange(pos, strEnd);
+        return bytes.subarray(pos, strEnd);
+      }
+
+      var end = pos + length;
+      if (end > strEnd)
+        end = strEnd;
+      this.ensureRange(pos, end);
+
+      this.pos = end;
+      return bytes.subarray(pos, end);
+    },
+
+    peekBytes: function ChunkedStream_peekBytes(length) {
+      var bytes = this.getBytes(length);
+      this.pos -= bytes.length;
+      return bytes;
+    },
+
+    getByteRange: function ChunkedStream_getBytes(begin, end) {
+      this.ensureRange(begin, end);
+      return this.bytes.subarray(begin, end);
+    },
+
+    skip: function ChunkedStream_skip(n) {
+      if (!n)
+        n = 1;
+      this.pos += n;
+    },
+
+    reset: function ChunkedStream_reset() {
+      this.pos = this.start;
+    },
+
+    moveStart: function ChunkedStream_moveStart() {
+      this.start = this.pos;
+    },
+
+    makeSubStream: function ChunkedStream_makeSubStream(start, length, dict) {
+      function ChunkedStreamSubstream() {}
+      ChunkedStreamSubstream.prototype = Object.create(this);
+      ChunkedStreamSubstream.prototype.getMissingChunks = function() {
+        var chunkSize = this.chunkSize;
+        var beginChunk = Math.floor(this.start / chunkSize);
+        var endChunk = Math.floor((this.end - 1) / chunkSize) + 1;
+        var missingChunks = [];
+        for (var chunk = beginChunk; chunk < endChunk; ++chunk) {
+          if (!(chunk in this.loadedChunks)) {
+            missingChunks.push(chunk);
+          }
+        }
+        return missingChunks;
+      };
+      var subStream = new ChunkedStreamSubstream();
+      subStream.pos = subStream.start = start;
+      subStream.end = start + length || this.end;
+      subStream.dict = dict;
+      return subStream;
+    },
+
+    isStream: true
+  };
+
+  return ChunkedStream;
+})();
+
+var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
+
+  function ChunkedStreamManager(length, chunkSize, url, args) {
+    var self = this;
+    this.stream = new ChunkedStream(length, chunkSize, this);
+    this.length = length;
+    this.chunkSize = chunkSize;
+    this.url = url;
+    this.disableAutoFetch = args.disableAutoFetch;
+    var msgHandler = this.msgHandler = args.msgHandler;
+
+    if (args.chunkedViewerLoading) {
+      msgHandler.on('OnDataRange', this.onReceiveData.bind(this));
+      msgHandler.on('OnDataProgress', this.onProgress.bind(this));
+      this.sendRequest = function ChunkedStreamManager_sendRequest(begin, end) {
+        msgHandler.send('RequestDataRange', { begin: begin, end: end });
+      };
+    } else {
+
+      var getXhr = function getXhr() {
+        return new XMLHttpRequest();
+      };
+      this.networkManager = new NetworkManager(this.url, {
+        getXhr: getXhr,
+        httpHeaders: args.httpHeaders
+      });
+      this.sendRequest = function ChunkedStreamManager_sendRequest(begin, end) {
+        this.networkManager.requestRange(begin, end, {
+          onDone: this.onReceiveData.bind(this),
+          onProgress: this.onProgress.bind(this)
+        });
+      };
+    }
+
+    this.currRequestId = 0;
+
+    this.chunksNeededByRequest = {};
+    this.requestsByChunk = {};
+    this.callbacksByRequest = {};
+
+    this.loadedStream = new Promise();
+  }
+
+  ChunkedStreamManager.prototype = {
+
+    onLoadedStream: function ChunkedStreamManager_getLoadedStream() {
+      return this.loadedStream;
+    },
+
+    // Get all the chunks that are not yet loaded and groups them into
+    // contiguous ranges to load in as few requests as possible
+    requestAllChunks: function ChunkedStreamManager_requestAllChunks() {
+      var missingChunks = this.stream.getMissingChunks();
+      this.requestChunks(missingChunks);
+      return this.loadedStream;
+    },
+
+    requestChunks: function ChunkedStreamManager_requestChunks(chunks,
+                                                               callback) {
+      var requestId = this.currRequestId++;
+
+      var chunksNeeded;
+      this.chunksNeededByRequest[requestId] = chunksNeeded = {};
+      for (var i = 0, ii = chunks.length; i < ii; i++) {
+        if (!this.stream.hasChunk(chunks[i])) {
+          chunksNeeded[chunks[i]] = true;
+        }
+      }
+
+      if (isEmptyObj(chunksNeeded)) {
+        if (callback) {
+          callback();
+        }
+        return;
+      }
+
+      this.callbacksByRequest[requestId] = callback;
+
+      var chunksToRequest = [];
+      for (var chunk in chunksNeeded) {
+        chunk = chunk | 0;
+        if (!(chunk in this.requestsByChunk)) {
+          this.requestsByChunk[chunk] = [];
+          chunksToRequest.push(chunk);
+        }
+        this.requestsByChunk[chunk].push(requestId);
+      }
+
+      if (!chunksToRequest.length) {
+        return;
+      }
+
+      var groupedChunksToRequest = this.groupChunks(chunksToRequest);
+
+      for (var i = 0; i < groupedChunksToRequest.length; ++i) {
+        var groupedChunk = groupedChunksToRequest[i];
+        var begin = groupedChunk.beginChunk * this.chunkSize;
+        var end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length);
+        this.sendRequest(begin, end);
+      }
+    },
+
+    getStream: function ChunkedStreamManager_getStream() {
+      return this.stream;
+    },
+
+    // Loads any chunks in the requested range that are not yet loaded
+    requestRange: function ChunkedStreamManager_requestRange(
+                      begin, end, callback) {
+
+      end = Math.min(end, this.length);
+
+      var beginChunk = this.getBeginChunk(begin);
+      var endChunk = this.getEndChunk(end);
+
+      var chunks = [];
+      for (var chunk = beginChunk; chunk < endChunk; ++chunk) {
+        chunks.push(chunk);
+      }
+
+      this.requestChunks(chunks, callback);
+    },
+
+    requestRanges: function ChunkedStreamManager_requestRanges(ranges,
+                                                               callback) {
+      ranges = ranges || [];
+      var chunksToRequest = [];
+
+      for (var i = 0; i < ranges.length; i++) {
+        var beginChunk = this.getBeginChunk(ranges[i].begin);
+        var endChunk = this.getEndChunk(ranges[i].end);
+        for (var chunk = beginChunk; chunk < endChunk; ++chunk) {
+          if (chunksToRequest.indexOf(chunk) < 0) {
+            chunksToRequest.push(chunk);
+          }
+        }
+      }
+
+      chunksToRequest.sort(function(a, b) { return a - b; });
+      this.requestChunks(chunksToRequest, callback);
+    },
+
+    // Groups a sorted array of chunks into as few continguous larger
+    // chunks as possible
+    groupChunks: function ChunkedStreamManager_groupChunks(chunks) {
+      var groupedChunks = [];
+      var beginChunk;
+      var prevChunk;
+      for (var i = 0; i < chunks.length; ++i) {
+        var chunk = chunks[i];
+
+        if (!beginChunk) {
+          beginChunk = chunk;
+        }
+
+        if (prevChunk && prevChunk + 1 !== chunk) {
+          groupedChunks.push({
+            beginChunk: beginChunk, endChunk: prevChunk + 1});
+          beginChunk = chunk;
+        }
+        if (i + 1 === chunks.length) {
+          groupedChunks.push({
+            beginChunk: beginChunk, endChunk: chunk + 1});
+        }
+
+        prevChunk = chunk;
+      }
+      return groupedChunks;
+    },
+
+    onProgress: function ChunkedStreamManager_onProgress(args) {
+      var bytesLoaded = this.stream.numChunksLoaded * this.chunkSize +
+                        args.loaded;
+      this.msgHandler.send('DocProgress', {
+        loaded: bytesLoaded,
+        total: this.length
+      });
+    },
+
+    onReceiveData: function ChunkedStreamManager_onReceiveData(args) {
+      var chunk = args.chunk;
+      var begin = args.begin;
+      var end = begin + chunk.byteLength;
+
+      var beginChunk = this.getBeginChunk(begin);
+      var endChunk = this.getEndChunk(end);
+
+      this.stream.onReceiveData(begin, chunk);
+      if (this.stream.allChunksLoaded()) {
+        this.loadedStream.resolve(this.stream);
+      }
+
+      var loadedRequests = [];
+      for (var chunk = beginChunk; chunk < endChunk; ++chunk) {
+
+        // The server might return more chunks than requested
+        var requestIds = this.requestsByChunk[chunk] || [];
+        delete this.requestsByChunk[chunk];
+
+        for (var i = 0; i < requestIds.length; ++i) {
+          var requestId = requestIds[i];
+          var chunksNeeded = this.chunksNeededByRequest[requestId];
+          if (chunk in chunksNeeded) {
+            delete chunksNeeded[chunk];
+          }
+
+          if (!isEmptyObj(chunksNeeded)) {
+            continue;
+          }
+
+          loadedRequests.push(requestId);
+        }
+      }
+
+      // If there are no pending requests, automatically fetch the next
+      // unfetched chunk of the PDF
+      if (!this.disableAutoFetch && isEmptyObj(this.requestsByChunk)) {
+        var nextEmptyChunk;
+        if (this.stream.numChunksLoaded === 1) {
+          // This is a special optimization so that after fetching the first
+          // chunk, rather than fetching the second chunk, we fetch the last
+          // chunk.
+          var lastChunk = this.stream.numChunks - 1;
+          if (!this.stream.hasChunk(lastChunk)) {
+            nextEmptyChunk = lastChunk;
+          }
+        } else {
+          nextEmptyChunk = this.stream.nextEmptyChunk(endChunk);
+        }
+        if (isInt(nextEmptyChunk)) {
+          this.requestChunks([nextEmptyChunk]);
+        }
+      }
+
+      for (var i = 0; i < loadedRequests.length; ++i) {
+        var requestId = loadedRequests[i];
+        var callback = this.callbacksByRequest[requestId];
+        delete this.callbacksByRequest[requestId];
+        if (callback) {
+          callback();
+        }
+      }
+
+      this.msgHandler.send('DocProgress', {
+        loaded: this.stream.numChunksLoaded * this.chunkSize,
+        total: this.length
+      });
+    },
+
+    getBeginChunk: function ChunkedStreamManager_getBeginChunk(begin) {
+      var chunk = Math.floor(begin / this.chunkSize);
+      return chunk;
+    },
+
+    getEndChunk: function ChunkedStreamManager_getEndChunk(end) {
+      if (end % this.chunkSize === 0) {
+        return end / this.chunkSize;
+      }
+
+      // 0 -> 0
+      // 1 -> 1
+      // 99 -> 1
+      // 100 -> 1
+      // 101 -> 2
+      var chunk = Math.floor((end - 1) / this.chunkSize) + 1;
+      return chunk;
+    }
+  };
+
+  return ChunkedStreamManager;
+})();
+
+
+
+// TODO(mack): Make use of PDFJS.Util.inherit() when it becomes available
+var BasePdfManager = (function BasePdfManagerClosure() {
+  function BasePdfManager() {
+    throw new Error('Cannot initialize BaseManagerManager');
+  }
+
+  BasePdfManager.prototype = {
+    onLoadedStream: function BasePdfManager_onLoadedStream() {
+      throw new NotImplementedException();
+    },
+
+    ensureModel: function BasePdfManager_ensureModel(prop, args) {
+      return this.ensure(this.pdfModel, prop, args);
+    },
+
+    ensureXRef: function BasePdfManager_ensureXRef(prop, args) {
+      return this.ensure(this.pdfModel.xref, prop, args);
+    },
+
+    ensureCatalog: function BasePdfManager_ensureCatalog(prop, args) {
+      return this.ensure(this.pdfModel.catalog, prop, args);
+    },
+
+    getPage: function BasePdfManager_pagePage(pageIndex) {
+      return this.pdfModel.getPage(pageIndex);
+    },
+
+    ensure: function BasePdfManager_ensure(obj, prop, args) {
+      return new NotImplementedException();
+    },
+
+    requestRange: function BasePdfManager_ensure(begin, end) {
+      return new NotImplementedException();
+    },
+
+    requestLoadedStream: function BasePdfManager_requestLoadedStream() {
+      return new NotImplementedException();
+    },
+
+    updatePassword: function BasePdfManager_updatePassword(password) {
+      this.pdfModel.xref.password = this.password = password;
+      if (this.passwordChangedPromise) {
+        this.passwordChangedPromise.resolve();
+      }
+    },
+
+    terminate: function BasePdfManager_terminate() {
+      return new NotImplementedException();
+    }
+  };
+
+  return BasePdfManager;
+})();
+
+var LocalPdfManager = (function LocalPdfManagerClosure() {
+  function LocalPdfManager(data, password) {
+    var stream = new Stream(data);
+    this.pdfModel = new PDFDocument(this, stream, password);
+    this.loadedStream = new Promise();
+    this.loadedStream.resolve(stream);
+  }
+
+  LocalPdfManager.prototype = Object.create(BasePdfManager.prototype);
+  LocalPdfManager.prototype.constructor = LocalPdfManager;
+
+  LocalPdfManager.prototype.ensure =
+      function LocalPdfManager_ensure(obj, prop, args) {
+    var promise = new Promise();
+    try {
+      var value = obj[prop];
+      var result;
+      if (typeof(value) === 'function') {
+        result = value.apply(obj, args);
+      } else {
+        result = value;
+      }
+      promise.resolve(result);
+    } catch (e) {
+      console.log(e.stack);
+      promise.reject(e);
+    }
+    return promise;
+  };
+
+  LocalPdfManager.prototype.requestRange =
+      function LocalPdfManager_requestRange(begin, end) {
+    var promise = new Promise();
+    promise.resolve();
+    return promise;
+  };
+
+  LocalPdfManager.prototype.requestLoadedStream =
+      function LocalPdfManager_requestLoadedStream() {
+  };
+
+  LocalPdfManager.prototype.onLoadedStream =
+      function LocalPdfManager_getLoadedStream() {
+    return this.loadedStream;
+  };
+
+  LocalPdfManager.prototype.terminate =
+      function LocalPdfManager_terminate() {
+    return;
+  };
+
+  return LocalPdfManager;
+})();
+
+var NetworkPdfManager = (function NetworkPdfManagerClosure() {
+
+  var CHUNK_SIZE = 65536;
+
+  function NetworkPdfManager(args, msgHandler) {
+
+    this.msgHandler = msgHandler;
+
+    var params = {
+      msgHandler: msgHandler,
+      httpHeaders: args.httpHeaders,
+      chunkedViewerLoading: args.chunkedViewerLoading,
+      disableAutoFetch: args.disableAutoFetch
+    };
+    this.streamManager = new ChunkedStreamManager(args.length, CHUNK_SIZE,
+                                                  args.url, params);
+
+    this.pdfModel = new PDFDocument(this, this.streamManager.getStream(),
+                                    args.password);
+  }
+
+  NetworkPdfManager.prototype = Object.create(BasePdfManager.prototype);
+  NetworkPdfManager.prototype.constructor = NetworkPdfManager;
+
+  NetworkPdfManager.prototype.ensure =
+      function NetworkPdfManager_ensure(obj, prop, args) {
+    var promise = new Promise();
+    this.ensureHelper(promise, obj, prop, args);
+    return promise;
+  };
+
+  NetworkPdfManager.prototype.ensureHelper =
+      function NetworkPdfManager_ensureHelper(promise, obj, prop, args) {
+    try {
+      var result;
+      var value = obj[prop];
+      if (typeof(value) === 'function') {
+        result = value.apply(obj, args);
+      } else {
+        result = value;
+      }
+      promise.resolve(result);
+    } catch(e) {
+      if (!(e instanceof MissingDataException)) {
+        console.log(e.stack);
+        promise.reject(e);
+        return;
+      }
+
+      this.streamManager.requestRange(e.begin, e.end, function() {
+        this.ensureHelper(promise, obj, prop, args);
+      }.bind(this));
+    }
+  };
+
+  NetworkPdfManager.prototype.requestRange =
+      function NetworkPdfManager_requestRange(begin, end) {
+    var promise = new Promise();
+    this.streamManager.requestRange(begin, end, function() {
+      promise.resolve();
+    });
+    return promise;
+  };
+
+  NetworkPdfManager.prototype.requestLoadedStream =
+      function NetworkPdfManager_requestLoadedStream() {
+    this.streamManager.requestAllChunks();
+  };
+
+  NetworkPdfManager.prototype.onLoadedStream =
+      function NetworkPdfManager_getLoadedStream() {
+    return this.streamManager.onLoadedStream();
+  };
+
+  NetworkPdfManager.prototype.terminate =
+      function NetworkPdfManager_terminate() {
+    this.streamManager.networkManager.abortAllRequests();
+  };
+
+  return NetworkPdfManager;
+})();
+
+
+
+var Page = (function PageClosure() {
+
+  function Page(pdfManager, xref, pageIndex, pageDict, ref) {
+    this.pdfManager = pdfManager;
+    this.pageIndex = pageIndex;
+    this.pageDict = pageDict;
+    this.xref = xref;
+    this.ref = ref;
+    this.idCounters = {
+      obj: 0
+    };
+    this.resourcesPromise = null;
+  }
+
+  Page.prototype = {
+    getPageProp: function Page_getPageProp(key) {
+      return this.pageDict.get(key);
+    },
+    inheritPageProp: function Page_inheritPageProp(key) {
+      var dict = this.pageDict;
+      var obj = dict.get(key);
+      while (obj === undefined) {
+        dict = dict.get('Parent');
+        if (!dict)
+          break;
+        obj = dict.get(key);
+      }
+      return obj;
+    },
+    get content() {
+      return this.getPageProp('Contents');
+    },
+    get resources() {
+      return shadow(this, 'resources', this.inheritPageProp('Resources'));
+    },
+    get mediaBox() {
+      var obj = this.inheritPageProp('MediaBox');
+      // Reset invalid media box to letter size.
+      if (!isArray(obj) || obj.length !== 4)
+        obj = [0, 0, 612, 792];
+      return shadow(this, 'mediaBox', obj);
+    },
+    get view() {
+      var mediaBox = this.mediaBox;
+      var cropBox = this.inheritPageProp('CropBox');
+      if (!isArray(cropBox) || cropBox.length !== 4)
+        return shadow(this, 'view', mediaBox);
+
+      // From the spec, 6th ed., p.963:
+      // "The crop, bleed, trim, and art boxes should not ordinarily
+      // extend beyond the boundaries of the media box. If they do, they are
+      // effectively reduced to their intersection with the media box."
+      cropBox = Util.intersect(cropBox, mediaBox);
+      if (!cropBox)
+        return shadow(this, 'view', mediaBox);
+
+      return shadow(this, 'view', cropBox);
+    },
+    get annotationRefs() {
+      return shadow(this, 'annotationRefs', this.inheritPageProp('Annots'));
+    },
+    get rotate() {
+      var rotate = this.inheritPageProp('Rotate') || 0;
+      // Normalize rotation so it's a multiple of 90 and between 0 and 270
+      if (rotate % 90 !== 0) {
+        rotate = 0;
+      } else if (rotate >= 360) {
+        rotate = rotate % 360;
+      } else if (rotate < 0) {
+        // The spec doesn't cover negatives, assume its counterclockwise
+        // rotation. The following is the other implementation of modulo.
+        rotate = ((rotate % 360) + 360) % 360;
+      }
+      return shadow(this, 'rotate', rotate);
+    },
+    getContentStream: function Page_getContentStream() {
+      var content = this.content;
+      var stream;
+      if (isArray(content)) {
+        // fetching items
+        var xref = this.xref;
+        var i, n = content.length;
+        var streams = [];
+        for (i = 0; i < n; ++i)
+          streams.push(xref.fetchIfRef(content[i]));
+        stream = new StreamsSequenceStream(streams);
+      } else if (isStream(content)) {
+        stream = content;
+      } else {
+        // replacing non-existent page content with empty one
+        stream = new NullStream();
+      }
+      return stream;
+    },
+    loadResources: function(keys) {
+      if (!this.resourcesPromise) {
+        // TODO: add async inheritPageProp and remove this.
+        this.resourcesPromise = this.pdfManager.ensure(this, 'resources');
+      }
+      var promise = new Promise();
+      this.resourcesPromise.then(function resourceSuccess() {
+        var objectLoader = new ObjectLoader(this.resources.map,
+                                            keys,
+                                            this.xref);
+        objectLoader.load().then(function objectLoaderSuccess() {
+          promise.resolve();
+        });
+      }.bind(this));
+      return promise;
+    },
+    getOperatorList: function Page_getOperatorList(handler) {
+      var self = this;
+      var promise = new Promise();
+
+      function reject(e) {
+        promise.reject(e);
+      }
+
+      var pageListPromise = new Promise();
+
+      var pdfManager = this.pdfManager;
+      var contentStreamPromise = pdfManager.ensure(this, 'getContentStream',
+                                                   []);
+      var resourcesPromise = this.loadResources([
+        'ExtGState',
+        'ColorSpace',
+        'Pattern',
+        'Shading',
+        'XObject',
+        'Font',
+        // ProcSet
+        // Properties
+      ]);
+
+      var partialEvaluator = new PartialEvaluator(
+            pdfManager, this.xref, handler,
+            this.pageIndex, 'p' + this.pageIndex + '_',
+            this.idCounters);
+
+      var dataPromises = Promise.all(
+          [contentStreamPromise, resourcesPromise], reject);
+      dataPromises.then(function(data) {
+        var contentStream = data[0];
+
+
+        var opList = new OperatorList(handler, self.pageIndex);
+
+        handler.send('StartRenderPage', {
+          transparency: partialEvaluator.hasBlendModes(self.resources),
+          pageIndex: self.pageIndex
+        });
+        partialEvaluator.getOperatorList(contentStream, self.resources, opList);
+        pageListPromise.resolve(opList);
+      });
+
+      var annotationsPromise = pdfManager.ensure(this, 'annotations');
+      Promise.all([pageListPromise, annotationsPromise]).then(function(datas) {
+        var pageOpList = datas[0];
+        var annotations = datas[1];
+
+        if (annotations.length === 0) {
+          PartialEvaluator.optimizeQueue(pageOpList);
+          pageOpList.flush(true);
+          promise.resolve(pageOpList);
+          return;
+        }
+
+        var annotationsReadyPromise = Annotation.appendToOperatorList(
+          annotations, pageOpList, pdfManager, partialEvaluator);
+        annotationsReadyPromise.then(function () {
+          PartialEvaluator.optimizeQueue(pageOpList);
+          pageOpList.flush(true);
+          promise.resolve(pageOpList);
+        }, reject);
+      }, reject);
+
+      return promise;
+    },
+    extractTextContent: function Page_extractTextContent() {
+      var handler = {
+        on: function nullHandlerOn() {},
+        send: function nullHandlerSend() {}
+      };
+
+      var self = this;
+
+      var textContentPromise = new Promise();
+
+      var pdfManager = this.pdfManager;
+      var contentStreamPromise = pdfManager.ensure(this, 'getContentStream',
+                                                   []);
+
+      var resourcesPromise = this.loadResources([
+        'ExtGState',
+        'XObject',
+        'Font'
+      ]);
+
+      var dataPromises = Promise.all([contentStreamPromise,
+                                      resourcesPromise]);
+      dataPromises.then(function(data) {
+        var contentStream = data[0];
+        var partialEvaluator = new PartialEvaluator(
+              pdfManager, self.xref, handler,
+              self.pageIndex, 'p' + self.pageIndex + '_',
+              self.idCounters);
+
+        var bidiTexts = partialEvaluator.getTextContent(contentStream,
+                                                        self.resources);
+        textContentPromise.resolve(bidiTexts);
+      });
+
+      return textContentPromise;
+    },
+
+    getAnnotationsData: function Page_getAnnotationsData() {
+      var annotations = this.annotations;
+      var annotationsData = [];
+      for (var i = 0, n = annotations.length; i < n; ++i) {
+        annotationsData.push(annotations[i].getData());
+      }
+      return annotationsData;
+    },
+
+    get annotations() {
+      var annotations = [];
+      var annotationRefs = this.annotationRefs || [];
+      for (var i = 0, n = annotationRefs.length; i < n; ++i) {
+        var annotationRef = annotationRefs[i];
+        var annotation = Annotation.fromRef(this.xref, annotationRef);
+        if (annotation) {
+          annotations.push(annotation);
+        }
+      }
+      return shadow(this, 'annotations', annotations);
+    }
+  };
+
+  return Page;
+})();
+
+/**
+ * The `PDFDocument` holds all the data of the PDF file. Compared to the
+ * `PDFDoc`, this one doesn't have any job management code.
+ * Right now there exists one PDFDocument on the main thread + one object
+ * for each worker. If there is no worker support enabled, there are two
+ * `PDFDocument` objects on the main thread created.
+ */
+var PDFDocument = (function PDFDocumentClosure() {
+  function PDFDocument(pdfManager, arg, password) {
+    if (isStream(arg))
+      init.call(this, pdfManager, arg, password);
+    else if (isArrayBuffer(arg))
+      init.call(this, pdfManager, new Stream(arg), password);
+    else
+      error('PDFDocument: Unknown argument type');
+  }
+
+  function init(pdfManager, stream, password) {
+    assertWellFormed(stream.length > 0, 'stream must have data');
+    this.pdfManager = pdfManager;
+    this.stream = stream;
+    var xref = new XRef(this.stream, password, pdfManager);
+    this.xref = xref;
+  }
+
+  function find(stream, needle, limit, backwards) {
+    var pos = stream.pos;
+    var end = stream.end;
+    var str = '';
+    if (pos + limit > end)
+      limit = end - pos;
+    for (var n = 0; n < limit; ++n)
+      str += String.fromCharCode(stream.getByte());
+    stream.pos = pos;
+    var index = backwards ? str.lastIndexOf(needle) : str.indexOf(needle);
+    if (index == -1)
+      return false; /* not found */
+    stream.pos += index;
+    return true; /* found */
+  }
+
+  var DocumentInfoValidators = {
+    get entries() {
+      // Lazily build this since all the validation functions below are not
+      // defined until after this file loads.
+      return shadow(this, 'entries', {
+        Title: isString,
+        Author: isString,
+        Subject: isString,
+        Keywords: isString,
+        Creator: isString,
+        Producer: isString,
+        CreationDate: isString,
+        ModDate: isString,
+        Trapped: isName
+      });
+    }
+  };
+
+  PDFDocument.prototype = {
+    parse: function PDFDocument_parse(recoveryMode) {
+      this.setup(recoveryMode);
+      try {
+        // checking if AcroForm is present
+        this.acroForm = this.catalog.catDict.get('AcroForm');
+        if (this.acroForm) {
+          this.xfa = this.acroForm.get('XFA');
+          var fields = this.acroForm.get('Fields');
+          if ((!fields || !isArray(fields) || fields.length === 0) &&
+              !this.xfa) {
+            // no fields and no XFA -- not a form (?)
+            this.acroForm = null;
+          }
+        }
+      } catch (ex) {
+        info('Something wrong with AcroForm entry');
+        this.acroForm = null;
+      }
+    },
+
+    get linearization() {
+      var length = this.stream.length;
+      var linearization = false;
+      if (length) {
+        try {
+          linearization = new Linearization(this.stream);
+          if (linearization.length != length) {
+            linearization = false;
+          }
+        } catch (err) {
+          if (err instanceof MissingDataException) {
+            throw err;
+          }
+
+          info('The linearization data is not available ' +
+               'or unreadable PDF data is found');
+          linearization = false;
+        }
+      }
+      // shadow the prototype getter with a data property
+      return shadow(this, 'linearization', linearization);
+    },
+    get startXRef() {
+      var stream = this.stream;
+      var startXRef = 0;
+      var linearization = this.linearization;
+      if (linearization) {
+        // Find end of first obj.
+        stream.reset();
+        if (find(stream, 'endobj', 1024))
+          startXRef = stream.pos + 6;
+      } else {
+        // Find startxref by jumping backward from the end of the file.
+        var step = 1024;
+        var found = false, pos = stream.end;
+        while (!found && pos > 0) {
+          pos -= step - 'startxref'.length;
+          if (pos < 0)
+            pos = 0;
+          stream.pos = pos;
+          found = find(stream, 'startxref', step, true);
+        }
+        if (found) {
+          stream.skip(9);
+          var ch;
+          do {
+            ch = stream.getByte();
+          } while (Lexer.isSpace(ch));
+          var str = '';
+          while (ch >= 0x20 && ch <= 0x39) { // < '9'
+            str += String.fromCharCode(ch);
+            ch = stream.getByte();
+          }
+          startXRef = parseInt(str, 10);
+          if (isNaN(startXRef))
+            startXRef = 0;
+        }
+      }
+      // shadow the prototype getter with a data property
+      return shadow(this, 'startXRef', startXRef);
+    },
+    get mainXRefEntriesOffset() {
+      var mainXRefEntriesOffset = 0;
+      var linearization = this.linearization;
+      if (linearization)
+        mainXRefEntriesOffset = linearization.mainXRefEntriesOffset;
+      // shadow the prototype getter with a data property
+      return shadow(this, 'mainXRefEntriesOffset', mainXRefEntriesOffset);
+    },
+    // Find the header, remove leading garbage and setup the stream
+    // starting from the header.
+    checkHeader: function PDFDocument_checkHeader() {
+      var stream = this.stream;
+      stream.reset();
+      if (find(stream, '%PDF-', 1024)) {
+        // Found the header, trim off any garbage before it.
+        stream.moveStart();
+        // Reading file format version
+        var MAX_VERSION_LENGTH = 12;
+        var version = '', ch;
+        while ((ch = stream.getByte()) > 0x20) { // SPACE
+          if (version.length >= MAX_VERSION_LENGTH) {
+            break;
+          }
+          version += String.fromCharCode(ch);
+        }
+        // removing "%PDF-"-prefix
+        this.pdfFormatVersion = version.substring(5);
+        return;
+      }
+      // May not be a PDF file, continue anyway.
+    },
+    parseStartXRef: function PDFDocument_parseStartXRef() {
+      var startXRef = this.startXRef;
+      this.xref.setStartXRef(startXRef);
+    },
+    setup: function PDFDocument_setup(recoveryMode) {
+      this.xref.parse(recoveryMode);
+      this.catalog = new Catalog(this.pdfManager, this.xref);
+    },
+    get numPages() {
+      var linearization = this.linearization;
+      var num = linearization ? linearization.numPages : this.catalog.numPages;
+      // shadow the prototype getter
+      return shadow(this, 'numPages', num);
+    },
+    get documentInfo() {
+      var docInfo = {
+        PDFFormatVersion: this.pdfFormatVersion,
+        IsAcroFormPresent: !!this.acroForm,
+        IsXFAPresent: !!this.xfa
+      };
+      var infoDict;
+      try {
+        infoDict = this.xref.trailer.get('Info');
+      } catch (err) {
+        info('The document information dictionary is invalid.');
+      }
+      if (infoDict) {
+        var validEntries = DocumentInfoValidators.entries;
+        // Only fill the document info with valid entries from the spec.
+        for (var key in validEntries) {
+          if (infoDict.has(key)) {
+            var value = infoDict.get(key);
+            // Make sure the value conforms to the spec.
+            if (validEntries[key](value)) {
+              docInfo[key] = typeof value !== 'string' ? value :
+                stringToPDFString(value);
+            } else {
+              info('Bad value in document info for "' + key + '"');
+            }
+          }
+        }
+      }
+      return shadow(this, 'documentInfo', docInfo);
+    },
+    get fingerprint() {
+      var xref = this.xref, fileID;
+      if (xref.trailer.has('ID')) {
+        fileID = '';
+        var id = xref.trailer.get('ID')[0];
+        id.split('').forEach(function(el) {
+          fileID += Number(el.charCodeAt(0)).toString(16);
+        });
+      } else {
+        // If we got no fileID, then we generate one,
+        // from the first 100 bytes of PDF
+        var data = this.stream.bytes.subarray(0, 100);
+        var hash = calculateMD5(data, 0, data.length);
+        fileID = '';
+        for (var i = 0, length = hash.length; i < length; i++) {
+          fileID += Number(hash[i]).toString(16);
+        }
+      }
+
+      return shadow(this, 'fingerprint', fileID);
+    },
+
+    traversePages: function PDFDocument_traversePages() {
+      this.catalog.traversePages();
+    },
+
+    getPage: function PDFDocument_getPage(pageIndex) {
+      return this.catalog.getPage(pageIndex);
+    }
+  };
+
+  return PDFDocument;
+})();
+
+
+
+var Name = (function NameClosure() {
+  function Name(name) {
+    this.name = name;
+  }
+
+  Name.prototype = {};
+
+  return Name;
+})();
+
+var Cmd = (function CmdClosure() {
+  function Cmd(cmd) {
+    this.cmd = cmd;
+  }
+
+  Cmd.prototype = {};
+
+  var cmdCache = {};
+
+  Cmd.get = function Cmd_get(cmd) {
+    var cmdValue = cmdCache[cmd];
+    if (cmdValue)
+      return cmdValue;
+
+    return cmdCache[cmd] = new Cmd(cmd);
+  };
+
+  return Cmd;
+})();
+
+var Dict = (function DictClosure() {
+  var nonSerializable = function nonSerializableClosure() {
+    return nonSerializable; // creating closure on some variable
+  };
+
+  // xref is optional
+  function Dict(xref) {
+    // Map should only be used internally, use functions below to access.
+    this.map = Object.create(null);
+    this.xref = xref;
+    this.__nonSerializable__ = nonSerializable; // disable cloning of the Dict
+  }
+
+  Dict.prototype = {
+    assignXref: function Dict_assignXref(newXref) {
+      this.xref = newXref;
+    },
+
+    // automatically dereferences Ref objects
+    get: function Dict_get(key1, key2, key3) {
+      var value;
+      var xref = this.xref;
+      if (typeof (value = this.map[key1]) != 'undefined' || key1 in this.map ||
+          typeof key2 == 'undefined') {
+        return xref ? xref.fetchIfRef(value) : value;
+      }
+      if (typeof (value = this.map[key2]) != 'undefined' || key2 in this.map ||
+          typeof key3 == 'undefined') {
+        return xref ? xref.fetchIfRef(value) : value;
+      }
+      value = this.map[key3] || null;
+      return xref ? xref.fetchIfRef(value) : value;
+    },
+
+    // Same as get(), but returns a promise and uses fetchIfRefAsync().
+    getAsync: function Dict_getAsync(key1, key2, key3) {
+      var value;
+      var promise;
+      var xref = this.xref;
+      if (typeof (value = this.map[key1]) !== undefined || key1 in this.map ||
+          typeof key2 === undefined) {
+        if (xref) {
+          return xref.fetchIfRefAsync(value);
+        }
+        promise = new Promise();
+        promise.resolve(value);
+        return promise;
+      }
+      if (typeof (value = this.map[key2]) !== undefined || key2 in this.map ||
+          typeof key3 === undefined) {
+        if (xref) {
+          return xref.fetchIfRefAsync(value);
+        }
+        promise = new Promise();
+        promise.resolve(value);
+        return promise;
+      }
+      value = this.map[key3] || null;
+      if (xref) {
+        return xref.fetchIfRefAsync(value);
+      }
+      promise = new Promise();
+      promise.resolve(value);
+      return promise;
+    },
+
+    // no dereferencing
+    getRaw: function Dict_getRaw(key) {
+      return this.map[key];
+    },
+
+    // creates new map and dereferences all Refs
+    getAll: function Dict_getAll() {
+      var all = {};
+      for (var key in this.map) {
+        var obj = this.get(key);
+        all[key] = obj instanceof Dict ? obj.getAll() : obj;
+      }
+      return all;
+    },
+
+    set: function Dict_set(key, value) {
+      this.map[key] = value;
+    },
+
+    has: function Dict_has(key) {
+      return key in this.map;
+    },
+
+    forEach: function Dict_forEach(callback) {
+      for (var key in this.map) {
+        callback(key, this.get(key));
+      }
+    }
+  };
+
+  return Dict;
+})();
+
+var Ref = (function RefClosure() {
+  function Ref(num, gen) {
+    this.num = num;
+    this.gen = gen;
+  }
+
+  Ref.prototype = {};
+
+  return Ref;
+})();
+
+// The reference is identified by number and generation,
+// this structure stores only one instance of the reference.
+var RefSet = (function RefSetClosure() {
+  function RefSet() {
+    this.dict = {};
+  }
+
+  RefSet.prototype = {
+    has: function RefSet_has(ref) {
+      return ('R' + ref.num + '.' + ref.gen) in this.dict;
+    },
+
+    put: function RefSet_put(ref) {
+      this.dict['R' + ref.num + '.' + ref.gen] = true;
+    },
+
+    remove: function RefSet_remove(ref) {
+      delete this.dict['R' + ref.num + '.' + ref.gen];
+    }
+  };
+
+  return RefSet;
+})();
+
+var RefSetCache = (function RefSetCacheClosure() {
+  function RefSetCache() {
+    this.dict = {};
+  }
+
+  RefSetCache.prototype = {
+    get: function RefSetCache_get(ref) {
+      return this.dict['R' + ref.num + '.' + ref.gen];
+    },
+
+    has: function RefSetCache_has(ref) {
+      return ('R' + ref.num + '.' + ref.gen) in this.dict;
+    },
+
+    put: function RefSetCache_put(ref, obj) {
+      this.dict['R' + ref.num + '.' + ref.gen] = obj;
+    }
+  };
+
+  return RefSetCache;
+})();
+
+var Catalog = (function CatalogClosure() {
+  function Catalog(pdfManager, xref) {
+    this.pdfManager = pdfManager;
+    this.xref = xref;
+    this.catDict = xref.getCatalogObj();
+    assertWellFormed(isDict(this.catDict),
+      'catalog object is not a dictionary');
+
+    // Stores state as we traverse the pages catalog so that we can resume
+    // parsing if an exception is thrown
+    this.traversePagesQueue = [{
+      pagesDict: this.toplevelPagesDict,
+      posInKids: 0
+    }];
+    this.pagePromises = [];
+    this.currPageIndex = 0;
+  }
+
+  Catalog.prototype = {
+    get metadata() {
+      var streamRef = this.catDict.getRaw('Metadata');
+      if (!isRef(streamRef))
+        return shadow(this, 'metadata', null);
+
+      var encryptMetadata = !this.xref.encrypt ? false :
+        this.xref.encrypt.encryptMetadata;
+
+      var stream = this.xref.fetch(streamRef, !encryptMetadata);
+      var metadata;
+      if (stream && isDict(stream.dict)) {
+        var type = stream.dict.get('Type');
+        var subtype = stream.dict.get('Subtype');
+
+        if (isName(type) && isName(subtype) &&
+            type.name === 'Metadata' && subtype.name === 'XML') {
+          // XXX: This should examine the charset the XML document defines,
+          // however since there are currently no real means to decode
+          // arbitrary charsets, let's just hope that the author of the PDF
+          // was reasonable enough to stick with the XML default charset,
+          // which is UTF-8.
+          try {
+            metadata = stringToUTF8String(bytesToString(stream.getBytes()));
+          } catch (e) {
+            info('Skipping invalid metadata.');
+          }
+        }
+      }
+
+      return shadow(this, 'metadata', metadata);
+    },
+    get toplevelPagesDict() {
+      var pagesObj = this.catDict.get('Pages');
+      assertWellFormed(isDict(pagesObj), 'invalid top-level pages dictionary');
+      // shadow the prototype getter
+      return shadow(this, 'toplevelPagesDict', pagesObj);
+    },
+    get documentOutline() {
+      var obj = null;
+      try {
+        obj = this.readDocumentOutline();
+      } catch (ex) {
+        if (ex instanceof MissingDataException) {
+          throw ex;
+        }
+        warn('Unable to read document outline');
+      }
+      return shadow(this, 'documentOutline', obj);
+    },
+    readDocumentOutline: function Catalog_readDocumentOutline() {
+      var xref = this.xref;
+      var obj = this.catDict.get('Outlines');
+      var root = { items: [] };
+      if (isDict(obj)) {
+        obj = obj.getRaw('First');
+        var processed = new RefSet();
+        if (isRef(obj)) {
+          var queue = [{obj: obj, parent: root}];
+          // to avoid recursion keeping track of the items
+          // in the processed dictionary
+          processed.put(obj);
+          while (queue.length > 0) {
+            var i = queue.shift();
+            var outlineDict = xref.fetchIfRef(i.obj);
+            if (outlineDict === null)
+              continue;
+            if (!outlineDict.has('Title'))
+              error('Invalid outline item');
+            var dest = outlineDict.get('A');
+            if (dest)
+              dest = dest.get('D');
+            else if (outlineDict.has('Dest')) {
+              dest = outlineDict.getRaw('Dest');
+              if (isName(dest))
+                dest = dest.name;
+            }
+            var title = outlineDict.get('Title');
+            var outlineItem = {
+              dest: dest,
+              title: stringToPDFString(title),
+              color: outlineDict.get('C') || [0, 0, 0],
+              count: outlineDict.get('Count'),
+              bold: !!(outlineDict.get('F') & 2),
+              italic: !!(outlineDict.get('F') & 1),
+              items: []
+            };
+            i.parent.items.push(outlineItem);
+            obj = outlineDict.getRaw('First');
+            if (isRef(obj) && !processed.has(obj)) {
+              queue.push({obj: obj, parent: outlineItem});
+              processed.put(obj);
+            }
+            obj = outlineDict.getRaw('Next');
+            if (isRef(obj) && !processed.has(obj)) {
+              queue.push({obj: obj, parent: i.parent});
+              processed.put(obj);
+            }
+          }
+        }
+      }
+      return root.items.length > 0 ? root.items : null;
+    },
+    get numPages() {
+      var obj = this.toplevelPagesDict.get('Count');
+      assertWellFormed(
+        isInt(obj),
+        'page count in top level pages object is not an integer'
+      );
+      // shadow the prototype getter
+      return shadow(this, 'num', obj);
+    },
+    get destinations() {
+      function fetchDestination(dest) {
+        return isDict(dest) ? dest.get('D') : dest;
+      }
+
+      var xref = this.xref;
+      var dests = {}, nameTreeRef, nameDictionaryRef;
+      var obj = this.catDict.get('Names');
+      if (obj)
+        nameTreeRef = obj.getRaw('Dests');
+      else if (this.catDict.has('Dests'))
+        nameDictionaryRef = this.catDict.get('Dests');
+
+      if (nameDictionaryRef) {
+        // reading simple destination dictionary
+        obj = nameDictionaryRef;
+        obj.forEach(function catalogForEach(key, value) {
+          if (!value) return;
+          dests[key] = fetchDestination(value);
+        });
+      }
+      if (nameTreeRef) {
+        var nameTree = new NameTree(nameTreeRef, xref);
+        var names = nameTree.getAll();
+        for (var name in names) {
+          if (!names.hasOwnProperty(name)) {
+            continue;
+          }
+          dests[name] = fetchDestination(names[name]);
+        }
+      }
+      return shadow(this, 'destinations', dests);
+    },
+    get javaScript() {
+      var xref = this.xref;
+      var obj = this.catDict.get('Names');
+
+      var javaScript = [];
+      if (obj && obj.has('JavaScript')) {
+        var nameTree = new NameTree(obj.getRaw('JavaScript'), xref);
+        var names = nameTree.getAll();
+        for (var name in names) {
+          if (!names.hasOwnProperty(name)) {
+            continue;
+          }
+          // We don't really use the JavaScript right now so this code is
+          // defensive so we don't cause errors on document load.
+          var jsDict = names[name];
+          if (!isDict(jsDict)) {
+            continue;
+          }
+          var type = jsDict.get('S');
+          if (!isName(type) || type.name !== 'JavaScript') {
+            continue;
+          }
+          var js = jsDict.get('JS');
+          if (!isString(js) && !isStream(js)) {
+            continue;
+          }
+          if (isStream(js)) {
+            js = bytesToString(js.getBytes());
+          }
+          javaScript.push(stringToPDFString(js));
+        }
+      }
+      return shadow(this, 'javaScript', javaScript);
+    },
+
+    getPage: function Catalog_getPage(pageIndex) {
+      if (pageIndex < 0 || pageIndex >= this.numPages ||
+          (pageIndex|0) !== pageIndex) {
+        var pagePromise = new Promise();
+        pagePromise.reject(new Error('Invalid page index'));
+        return pagePromise;
+      }
+      if (!(pageIndex in this.pagePromises)) {
+        this.pagePromises[pageIndex] = new Promise();
+      }
+      return this.pagePromises[pageIndex];
+    },
+
+    // Traverses pages in DFS order so that pages are processed in increasing
+    // order
+    traversePages: function Catalog_traversePages() {
+      var queue = this.traversePagesQueue;
+      while (queue.length) {
+        var queueItem = queue[queue.length - 1];
+        var pagesDict = queueItem.pagesDict;
+
+        var kids = pagesDict.get('Kids');
+        assert(isArray(kids), 'page dictionary kids object is not an array');
+        if (queueItem.posInKids >= kids.length) {
+          queue.pop();
+          continue;
+        }
+        var kidRef = kids[queueItem.posInKids];
+        assert(isRef(kidRef), 'page dictionary kid is not a reference');
+
+        var kid = this.xref.fetch(kidRef);
+        if (isDict(kid, 'Page') || (isDict(kid) && !kid.has('Kids'))) {
+          var pageIndex = this.currPageIndex++;
+          var page = new Page(this.pdfManager, this.xref, pageIndex, kid,
+                              kidRef);
+          if (!(pageIndex in this.pagePromises)) {
+            this.pagePromises[pageIndex] = new Promise();
+          }
+          this.pagePromises[pageIndex].resolve(page);
+
+        } else { // must be a child page dictionary
+          assert(
+            isDict(kid),
+            'page dictionary kid reference points to wrong type of object'
+          );
+
+          queue.push({
+            pagesDict: kid,
+            posInKids: 0
+          });
+        }
+        ++queueItem.posInKids;
+      }
+    }
+  };
+
+  return Catalog;
+})();
+
+var XRef = (function XRefClosure() {
+  function XRef(stream, password) {
+
+    this.stream = stream;
+    this.entries = [];
+    this.xrefstms = {};
+    // prepare the XRef cache
+    this.cache = [];
+    this.password = password;
+  }
+
+  XRef.prototype = {
+    setStartXRef: function XRef_setStartXRef(startXRef) {
+      // Store the starting positions of xref tables as we process them
+      // so we can recover from missing data errors
+      this.startXRefQueue = [startXRef];
+    },
+
+    parse: function XRef_parse(recoveryMode) {
+      var trailerDict;
+      if (!recoveryMode) {
+        trailerDict = this.readXRef();
+      } else {
+        warn('Indexing all PDF objects');
+        trailerDict = this.indexObjects();
+      }
+      trailerDict.assignXref(this);
+      this.trailer = trailerDict;
+      var encrypt = trailerDict.get('Encrypt');
+      if (encrypt) {
+        var ids = trailerDict.get('ID');
+        var fileId = (ids && ids.length) ? ids[0] : '';
+        this.encrypt = new CipherTransformFactory(
+            encrypt, fileId, this.password);
+      }
+
+      // get the root dictionary (catalog) object
+      if (!(this.root = trailerDict.get('Root'))) {
+        error('Invalid root reference');
+      }
+    },
+
+    processXRefTable: function XRef_processXRefTable(parser) {
+      if (!('tableState' in this)) {
+        // Stores state of the table as we process it so we can resume
+        // from middle of table in case of missing data error
+        this.tableState = {
+          entryNum: 0,
+          streamPos: parser.lexer.stream.pos,
+          parserBuf1: parser.buf1,
+          parserBuf2: parser.buf2
+        };
+      }
+
+      var obj = this.readXRefTable(parser);
+
+      // Sanity check
+      if (!isCmd(obj, 'trailer'))
+        error('Invalid XRef table: could not find trailer dictionary');
+
+      // Read trailer dictionary, e.g.
+      // trailer
+      //    << /Size 22
+      //      /Root 20R
+      //      /Info 10R
+      //      /ID [ <81b14aafa313db63dbd6f981e49f94f4> ]
+      //    >>
+      // The parser goes through the entire stream << ... >> and provides
+      // a getter interface for the key-value table
+      var dict = parser.getObj();
+      if (!isDict(dict))
+        error('Invalid XRef table: could not parse trailer dictionary');
+
+      delete this.tableState;
+
+      return dict;
+    },
+
+    readXRefTable: function XRef_readXRefTable(parser) {
+      // Example of cross-reference table:
+      // xref
+      // 0 1                    <-- subsection header (first obj #, obj count)
+      // 0000000000 65535 f     <-- actual object (offset, generation #, f/n)
+      // 23 2                   <-- subsection header ... and so on ...
+      // 0000025518 00002 n
+      // 0000025635 00000 n
+      // trailer
+      // ...
+
+      var stream = parser.lexer.stream;
+      var tableState = this.tableState;
+      stream.pos = tableState.streamPos;
+      parser.buf1 = tableState.parserBuf1;
+      parser.buf2 = tableState.parserBuf2;
+
+      // Outer loop is over subsection headers
+      var obj;
+
+      while (true) {
+        if (!('firstEntryNum' in tableState) || !('entryCount' in tableState)) {
+          if (isCmd(obj = parser.getObj(), 'trailer')) {
+            break;
+          }
+          tableState.firstEntryNum = obj;
+          tableState.entryCount = parser.getObj();
+        }
+
+        var first = tableState.firstEntryNum;
+        var count = tableState.entryCount;
+        if (!isInt(first) || !isInt(count))
+          error('Invalid XRef table: wrong types in subsection header');
+
+        // Inner loop is over objects themselves
+        for (var i = tableState.entryNum; i < count; i++) {
+          tableState.streamPos = stream.pos;
+          tableState.entryNum = i;
+          tableState.parserBuf1 = parser.buf1;
+          tableState.parserBuf2 = parser.buf2;
+
+          var entry = {};
+          entry.offset = parser.getObj();
+          entry.gen = parser.getObj();
+          var type = parser.getObj();
+
+          if (isCmd(type, 'f'))
+            entry.free = true;
+          else if (isCmd(type, 'n'))
+            entry.uncompressed = true;
+
+          // Validate entry obj
+          if (!isInt(entry.offset) || !isInt(entry.gen) ||
+              !(entry.free || entry.uncompressed)) {
+            console.log(entry.offset, entry.gen, entry.free,
+                entry.uncompressed);
+            error('Invalid entry in XRef subsection: ' + first + ', ' + count);
+          }
+
+          if (!this.entries[i + first])
+            this.entries[i + first] = entry;
+        }
+
+        tableState.entryNum = 0;
+        tableState.streamPos = stream.pos;
+        tableState.parserBuf1 = parser.buf1;
+        tableState.parserBuf2 = parser.buf2;
+        delete tableState.firstEntryNum;
+        delete tableState.entryCount;
+      }
+
+      // Per issue 3248: hp scanners generate bad XRef
+      if (first === 1 && this.entries[1] && this.entries[1].free) {
+        // shifting the entries
+        this.entries.shift();
+      }
+
+      // Sanity check: as per spec, first object must be free
+      if (this.entries[0] && !this.entries[0].free)
+        error('Invalid XRef table: unexpected first object');
+
+      return obj;
+    },
+
+    processXRefStream: function XRef_processXRefStream(stream) {
+      if (!('streamState' in this)) {
+        // Stores state of the stream as we process it so we can resume
+        // from middle of stream in case of missing data error
+        var streamParameters = stream.dict;
+        var byteWidths = streamParameters.get('W');
+        var range = streamParameters.get('Index');
+        if (!range) {
+          range = [0, streamParameters.get('Size')];
+        }
+
+        this.streamState = {
+          entryRanges: range,
+          byteWidths: byteWidths,
+          entryNum: 0,
+          streamPos: stream.pos
+        };
+      }
+      this.readXRefStream(stream);
+      delete this.streamState;
+
+      return stream.dict;
+    },
+
+    readXRefStream: function XRef_readXRefStream(stream) {
+      var i, j;
+      var streamState = this.streamState;
+      stream.pos = streamState.streamPos;
+
+      var byteWidths = streamState.byteWidths;
+      var typeFieldWidth = byteWidths[0];
+      var offsetFieldWidth = byteWidths[1];
+      var generationFieldWidth = byteWidths[2];
+
+      var entryRanges = streamState.entryRanges;
+      while (entryRanges.length > 0) {
+
+        var first = entryRanges[0];
+        var n = entryRanges[1];
+
+        if (!isInt(first) || !isInt(n))
+          error('Invalid XRef range fields: ' + first + ', ' + n);
+
+        if (!isInt(typeFieldWidth) || !isInt(offsetFieldWidth) ||
+            !isInt(generationFieldWidth)) {
+          error('Invalid XRef entry fields length: ' + first + ', ' + n);
+        }
+        for (i = streamState.entryNum; i < n; ++i) {
+          streamState.entryNum = i;
+          streamState.streamPos = stream.pos;
+
+          var type = 0, offset = 0, generation = 0;
+          for (j = 0; j < typeFieldWidth; ++j)
+            type = (type << 8) | stream.getByte();
+          // if type field is absent, its default value = 1
+          if (typeFieldWidth === 0)
+            type = 1;
+          for (j = 0; j < offsetFieldWidth; ++j)
+            offset = (offset << 8) | stream.getByte();
+          for (j = 0; j < generationFieldWidth; ++j)
+            generation = (generation << 8) | stream.getByte();
+          var entry = {};
+          entry.offset = offset;
+          entry.gen = generation;
+          switch (type) {
+            case 0:
+              entry.free = true;
+              break;
+            case 1:
+              entry.uncompressed = true;
+              break;
+            case 2:
+              break;
+            default:
+              error('Invalid XRef entry type: ' + type);
+          }
+          if (!this.entries[first + i])
+            this.entries[first + i] = entry;
+        }
+
+        streamState.entryNum = 0;
+        streamState.streamPos = stream.pos;
+        entryRanges.splice(0, 2);
+      }
+    },
+    indexObjects: function XRef_indexObjects() {
+      // Simple scan through the PDF content to find objects,
+      // trailers and XRef streams.
+      function readToken(data, offset) {
+        var token = '', ch = data[offset];
+        while (ch !== 13 && ch !== 10) {
+          if (++offset >= data.length)
+            break;
+          token += String.fromCharCode(ch);
+          ch = data[offset];
+        }
+        return token;
+      }
+      function skipUntil(data, offset, what) {
+        var length = what.length, dataLength = data.length;
+        var skipped = 0;
+        // finding byte sequence
+        while (offset < dataLength) {
+          var i = 0;
+          while (i < length && data[offset + i] == what[i])
+            ++i;
+          if (i >= length)
+            break; // sequence found
+
+          offset++;
+          skipped++;
+        }
+        return skipped;
+      }
+      var trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]);
+      var startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114,
+                                          101, 102]);
+      var endobjBytes = new Uint8Array([101, 110, 100, 111, 98, 106]);
+      var xrefBytes = new Uint8Array([47, 88, 82, 101, 102]);
+
+      var stream = this.stream;
+      stream.pos = 0;
+      var buffer = stream.getBytes();
+      var position = stream.start, length = buffer.length;
+      var trailers = [], xrefStms = [];
+      var state = 0;
+      var currentToken;
+      while (position < length) {
+        var ch = buffer[position];
+        if (ch === 32 || ch === 9 || ch === 13 || ch === 10) {
+          ++position;
+          continue;
+        }
+        if (ch === 37) { // %-comment
+          do {
+            ++position;
+            if (position >= length) {
+              break;
+            }
+            ch = buffer[position];
+          } while (ch !== 13 && ch !== 10);
+          continue;
+        }
+        var token = readToken(buffer, position);
+        var m;
+        if (token === 'xref') {
+          position += skipUntil(buffer, position, trailerBytes);
+          trailers.push(position);
+          position += skipUntil(buffer, position, startxrefBytes);
+        } else if ((m = /^(\d+)\s+(\d+)\s+obj\b/.exec(token))) {
+          this.entries[m[1]] = {
+            offset: position,
+            gen: m[2] | 0,
+            uncompressed: true
+          };
+
+          var contentLength = skipUntil(buffer, position, endobjBytes) + 7;
+          var content = buffer.subarray(position, position + contentLength);
+
+          // checking XRef stream suspect
+          // (it shall have '/XRef' and next char is not a letter)
+          var xrefTagOffset = skipUntil(content, 0, xrefBytes);
+          if (xrefTagOffset < contentLength &&
+              content[xrefTagOffset + 5] < 64) {
+            xrefStms.push(position);
+            this.xrefstms[position] = 1; // don't read it recursively
+          }
+
+          position += contentLength;
+        } else
+          position += token.length + 1;
+      }
+      // reading XRef streams
+      for (var i = 0, ii = xrefStms.length; i < ii; ++i) {
+        this.startXRefQueue.push(xrefStms[i]);
+        this.readXRef(/* recoveryMode */ true);
+      }
+      // finding main trailer
+      var dict;
+      for (var i = 0, ii = trailers.length; i < ii; ++i) {
+        stream.pos = trailers[i];
+        var parser = new Parser(new Lexer(stream), true, null);
+        var obj = parser.getObj();
+        if (!isCmd(obj, 'trailer'))
+          continue;
+        // read the trailer dictionary
+        if (!isDict(dict = parser.getObj()))
+          continue;
+        // taking the first one with 'ID'
+        if (dict.has('ID'))
+          return dict;
+      }
+      // no tailer with 'ID', taking last one (if exists)
+      if (dict)
+        return dict;
+      // nothing helps
+      // calling error() would reject worker with an UnknownErrorException.
+      throw new InvalidPDFException('Invalid PDF structure');
+    },
+
+    readXRef: function XRef_readXRef(recoveryMode) {
+      var stream = this.stream;
+
+      try {
+        while (this.startXRefQueue.length) {
+          var startXRef = this.startXRefQueue[0];
+
+          stream.pos = startXRef;
+
+          var parser = new Parser(new Lexer(stream), true, null);
+          var obj = parser.getObj();
+          var dict;
+
+          // Get dictionary
+          if (isCmd(obj, 'xref')) {
+
+            // Parse end-of-file XRef
+            dict = this.processXRefTable(parser);
+            if (!this.topDict) {
+              this.topDict = dict;
+            }
+
+            // Recursively get other XRefs 'XRefStm', if any
+            obj = dict.get('XRefStm');
+            if (isInt(obj)) {
+              var pos = obj;
+              // ignore previously loaded xref streams
+              // (possible infinite recursion)
+              if (!(pos in this.xrefstms)) {
+                this.xrefstms[pos] = 1;
+                this.startXRefQueue.push(pos);
+              }
+            }
+          } else if (isInt(obj)) {
+
+            // Parse in-stream XRef
+            if (!isInt(parser.getObj()) ||
+                !isCmd(parser.getObj(), 'obj') ||
+                !isStream(obj = parser.getObj())) {
+              error('Invalid XRef stream');
+            }
+            dict = this.processXRefStream(obj);
+            if (!this.topDict) {
+              this.topDict = dict;
+            }
+
+            if (!dict)
+              error('Failed to read XRef stream');
+          }
+
+          // Recursively get previous dictionary, if any
+          obj = dict.get('Prev');
+          if (isInt(obj)) {
+            this.startXRefQueue.push(obj);
+          } else if (isRef(obj)) {
+            // The spec says Prev must not be a reference, i.e. "/Prev NNN"
+            // This is a fallback for non-compliant PDFs, i.e. "/Prev NNN 0 R"
+            this.startXRefQueue.push(obj.num);
+          }
+
+          this.startXRefQueue.shift();
+        }
+
+        return this.topDict;
+      } catch (e) {
+        if (e instanceof MissingDataException) {
+          throw e;
+        }
+        log('(while reading XRef): ' + e);
+      }
+
+      if (recoveryMode)
+        return;
+      throw new XRefParseException();
+    },
+
+    getEntry: function XRef_getEntry(i) {
+      var e = this.entries[i];
+      if (e === null)
+        return null;
+      return e.free || !e.offset ? null : e; // returns null if entry is free
+    },
+    fetchIfRef: function XRef_fetchIfRef(obj) {
+      if (!isRef(obj))
+        return obj;
+      return this.fetch(obj);
+    },
+    fetch: function XRef_fetch(ref, suppressEncryption) {
+      assertWellFormed(isRef(ref), 'ref object is not a reference');
+      var num = ref.num;
+      var e;
+      if (num in this.cache) {
+        e = this.cache[num];
+        if (e instanceof Stream) {
+          return e.makeSubStream(e.start, e.length, e.dict);
+        }
+        return e;
+      }
+
+      e = this.getEntry(num);
+
+      // the referenced entry can be free
+      if (e === null)
+        return (this.cache[num] = e);
+
+      var gen = ref.gen;
+      var stream, parser;
+      if (e.uncompressed) {
+        if (e.gen != gen)
+          error('inconsistent generation in XRef');
+        stream = this.stream.makeSubStream(e.offset);
+        parser = new Parser(new Lexer(stream), true, this);
+        var obj1 = parser.getObj();
+        var obj2 = parser.getObj();
+        var obj3 = parser.getObj();
+        if (!isInt(obj1) || obj1 != num ||
+            !isInt(obj2) || obj2 != gen ||
+            !isCmd(obj3)) {
+          error('bad XRef entry');
+        }
+        if (!isCmd(obj3, 'obj')) {
+          // some bad pdfs use "obj1234" and really mean 1234
+          if (obj3.cmd.indexOf('obj') === 0) {
+            num = parseInt(obj3.cmd.substring(3), 10);
+            if (!isNaN(num))
+              return num;
+          }
+          error('bad XRef entry');
+        }
+        if (this.encrypt && !suppressEncryption) {
+          try {
+            e = parser.getObj(this.encrypt.createCipherTransform(num, gen));
+          } catch (ex) {
+            // almost all streams must be encrypted, but sometimes
+            // they are not probably due to some broken generators
+            // re-trying without encryption
+            return this.fetch(ref, true);
+          }
+        } else {
+          e = parser.getObj();
+        }
+        if (!isStream(e)) {
+          this.cache[num] = e;
+        }
+        return e;
+      }
+
+      // compressed entry
+      var tableOffset = e.offset;
+      stream = this.fetch(new Ref(tableOffset, 0));
+      if (!isStream(stream))
+        error('bad ObjStm stream');
+      var first = stream.dict.get('First');
+      var n = stream.dict.get('N');
+      if (!isInt(first) || !isInt(n)) {
+        error('invalid first and n parameters for ObjStm stream');
+      }
+      parser = new Parser(new Lexer(stream), false, this);
+      parser.allowStreams = true;
+      var i, entries = [], nums = [];
+      // read the object numbers to populate cache
+      for (i = 0; i < n; ++i) {
+        num = parser.getObj();
+        if (!isInt(num)) {
+          error('invalid object number in the ObjStm stream: ' + num);
+        }
+        nums.push(num);
+        var offset = parser.getObj();
+        if (!isInt(offset)) {
+          error('invalid object offset in the ObjStm stream: ' + offset);
+        }
+      }
+      // read stream objects for cache
+      for (i = 0; i < n; ++i) {
+        entries.push(parser.getObj());
+        num = nums[i];
+        var entry = this.entries[num];
+        if (entry && entry.offset === tableOffset && entry.gen === i) {
+          this.cache[num] = entries[i];
+        }
+      }
+      e = entries[e.gen];
+      if (e === undefined) {
+        error('bad XRef entry for compressed object');
+      }
+      return e;
+    },
+    fetchIfRefAsync: function XRef_fetchIfRefAsync(obj) {
+      if (!isRef(obj)) {
+        var promise = new Promise();
+        promise.resolve(obj);
+        return promise;
+      }
+      return this.fetchAsync(obj);
+    },
+    fetchAsync: function XRef_fetchAsync(ref, suppressEncryption) {
+      var promise = new Promise();
+      var tryFetch = function (promise) {
+        try {
+          promise.resolve(this.fetch(ref, suppressEncryption));
+        } catch (e) {
+          if (e instanceof MissingDataException) {
+            this.stream.manager.requestRange(e.begin, e.end, tryFetch);
+            return;
+          }
+          promise.reject(e);
+        }
+      }.bind(this, promise);
+      tryFetch();
+      return promise;
+    },
+    getCatalogObj: function XRef_getCatalogObj() {
+      return this.root;
+    }
+  };
+
+  return XRef;
+})();
+
+/**
+ * A NameTree is like a Dict but has some adventagous properties, see the spec
+ * (7.9.6) for more details.
+ * TODO: implement all the Dict functions and make this more efficent.
+ */
+var NameTree = (function NameTreeClosure() {
+  function NameTree(root, xref) {
+    this.root = root;
+    this.xref = xref;
+  }
+
+  NameTree.prototype = {
+    getAll: function NameTree_getAll() {
+      var dict = {};
+      if (!this.root) {
+        return dict;
+      }
+      var xref = this.xref;
+      // reading name tree
+      var processed = new RefSet();
+      processed.put(this.root);
+      var queue = [this.root];
+      while (queue.length > 0) {
+        var i, n;
+        var obj = xref.fetchIfRef(queue.shift());
+        if (!isDict(obj)) {
+          continue;
+        }
+        if (obj.has('Kids')) {
+          var kids = obj.get('Kids');
+          for (i = 0, n = kids.length; i < n; i++) {
+            var kid = kids[i];
+            if (processed.has(kid))
+              error('invalid destinations');
+            queue.push(kid);
+            processed.put(kid);
+          }
+          continue;
+        }
+        var names = obj.get('Names');
+        if (names) {
+          for (i = 0, n = names.length; i < n; i += 2) {
+            dict[names[i]] = xref.fetchIfRef(names[i + 1]);
+          }
+        }
+      }
+      return dict;
+    }
+  };
+  return NameTree;
+})();
+
+/**
+ * A helper for loading missing data in object graphs. It traverses the graph
+ * depth first and queues up any objects that have missing data. Once it has
+ * has traversed as many objects that are available it attempts to bundle the
+ * missing data requests and then resume from the nodes that weren't ready.
+ *
+ * NOTE: It provides protection from circular references by keeping track of
+ * of loaded references. However, you must be careful not to load any graphs
+ * that have references to the catalog or other pages since that will cause the
+ * entire PDF document object graph to be traversed.
+ */
+var ObjectLoader = (function() {
+
+  function mayHaveChildren(value) {
+    return isRef(value) || isDict(value) || isArray(value) || isStream(value);
+  }
+
+  function addChildren(node, nodesToVisit) {
+    if (isDict(node) || isStream(node)) {
+      var map;
+      if (isDict(node)) {
+        map = node.map;
+      } else {
+        map = node.dict.map;
+      }
+      for (var key in map) {
+        var value = map[key];
+        if (mayHaveChildren(value)) {
+          nodesToVisit.push(value);
+        }
+      }
+    } else if (isArray(node)) {
+      for (var i = 0, ii = node.length; i < ii; i++) {
+        var value = node[i];
+        if (mayHaveChildren(value)) {
+          nodesToVisit.push(value);
+        }
+      }
+    }
+  }
+
+  function ObjectLoader(obj, keys, xref) {
+    this.obj = obj;
+    this.keys = keys;
+    this.xref = xref;
+    this.refSet = null;
+  }
+
+  ObjectLoader.prototype = {
+
+    load: function ObjectLoader_load() {
+      var keys = this.keys;
+      this.promise = new Promise();
+      // Don't walk the graph if all the data is already loaded.
+      if (!(this.xref.stream instanceof ChunkedStream) ||
+          this.xref.stream.getMissingChunks().length === 0) {
+        this.promise.resolve();
+        return this.promise;
+      }
+
+      this.refSet = new RefSet();
+      // Setup the initial nodes to visit.
+      var nodesToVisit = [];
+      for (var i = 0; i < keys.length; i++) {
+        nodesToVisit.push(this.obj[keys[i]]);
+      }
+
+      this.walk(nodesToVisit);
+      return this.promise;
+    },
+
+    walk: function ObjectLoader_walk(nodesToVisit) {
+      var nodesToRevisit = [];
+      var pendingRequests = [];
+      // DFS walk of the object graph.
+      while (nodesToVisit.length) {
+        var currentNode = nodesToVisit.pop();
+
+        // Only references or chunked streams can cause missing data exceptions.
+        if (isRef(currentNode)) {
+          // Skip nodes that have already been visited.
+          if (this.refSet.has(currentNode)) {
+            continue;
+          }
+          try {
+            var ref = currentNode;
+            this.refSet.put(ref);
+            currentNode = this.xref.fetch(currentNode);
+          } catch (e) {
+            if (!(e instanceof MissingDataException)) {
+              throw e;
+            }
+            nodesToRevisit.push(currentNode);
+            pendingRequests.push({ begin: e.begin, end: e.end });
+          }
+        }
+        if (currentNode && currentNode.getBaseStreams) {
+          var baseStreams = currentNode.getBaseStreams();
+          var foundMissingData = false;
+          for (var i = 0; i < baseStreams.length; i++) {
+            var stream = baseStreams[i];
+            if (stream.getMissingChunks && stream.getMissingChunks().length) {
+              foundMissingData = true;
+              pendingRequests.push({
+                begin: stream.start,
+                end: stream.end
+              });
+            }
+          }
+          if (foundMissingData) {
+            nodesToRevisit.push(currentNode);
+          }
+        }
+
+        addChildren(currentNode, nodesToVisit);
+      }
+
+      if (pendingRequests.length) {
+        this.xref.stream.manager.requestRanges(pendingRequests,
+            function pendingRequestCallback() {
+          nodesToVisit = nodesToRevisit;
+          for (var i = 0; i < nodesToRevisit.length; i++) {
+            var node = nodesToRevisit[i];
+            // Remove any reference nodes from the currrent refset so they
+            // aren't skipped when we revist them.
+            if (isRef(node)) {
+              this.refSet.remove(node);
+            }
+          }
+          this.walk(nodesToVisit);
+        }.bind(this));
+        return;
+      }
+      // Everything is loaded.
+      this.refSet = null;
+      this.promise.resolve();
+    }
+
+  };
+
+  return ObjectLoader;
+})();
+
+
+
+
+var ISOAdobeCharset = [
+  '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar',
+  'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright',
+  'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero',
+  'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight',
+  'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question',
+  'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+  'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',
+  'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
+  'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+  'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent',
+  'sterling', 'fraction', 'yen', 'florin', 'section', 'currency',
+  'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft',
+  'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl',
+  'periodcentered', 'paragraph', 'bullet', 'quotesinglbase',
+  'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis',
+  'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde',
+  'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla',
+  'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine',
+  'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash',
+  'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu',
+  'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter',
+  'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior',
+  'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright',
+  'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde',
+  'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute',
+  'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex',
+  'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex',
+  'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute',
+  'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla',
+  'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex',
+  'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis',
+  'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis',
+  'ugrave', 'yacute', 'ydieresis', 'zcaron'
+];
+
+var ExpertCharset = [
+  '.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle',
+  'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior',
+  'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma',
+  'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle',
+  'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle',
+  'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle',
+  'colon', 'semicolon', 'commasuperior', 'threequartersemdash',
+  'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior',
+  'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',
+  'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',
+  'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',
+  'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall',
+  'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall',
+  'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall',
+  'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall',
+  'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary',
+  'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle',
+  'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall',
+  'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall',
+  'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall',
+  'Cedillasmall', 'onequarter', 'onehalf', 'threequarters',
+  'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths',
+  'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',
+  'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',
+  'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',
+  'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',
+  'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',
+  'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',
+  'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall',
+  'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall',
+  'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall',
+  'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',
+  'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall',
+  'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall',
+  'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',
+  'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall',
+  'Ydieresissmall'
+];
+
+var ExpertSubsetCharset = [
+  '.notdef', 'space', 'dollaroldstyle', 'dollarsuperior',
+  'parenleftsuperior', 'parenrightsuperior', 'twodotenleader',
+  'onedotenleader', 'comma', 'hyphen', 'period', 'fraction',
+  'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle',
+  'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle',
+  'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior',
+  'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior',
+  'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',
+  'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',
+  'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',
+  'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted',
+  'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter',
+  'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths',
+  'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',
+  'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',
+  'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',
+  'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',
+  'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',
+  'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',
+  'periodinferior', 'commainferior'
+];
+
+
+
+var CIDToUnicodeMaps = {
+  'Adobe-Japan1': [[32, 160], {f: 12, c: 33}, [45, 8209], {f: 46, c: 46}, 165,
+    {f: 2, c: 93}, [95, 818], [96, 768], {f: 27, c: 97}, 166, 125, [732, 771],
+    [700, 8217], 92, [699, 8216], 124, [126, 8764], {f: 3, c: 161}, 8260, 402,
+    0, 164, 8220, 171, {f: 2, c: 8249}, {f: 2, c: 64257}, [8210, 8211], 0, 0,
+    [183, 8729], 0, 8226, 8218, 8222, 8221, 187, 0, 0, 191, {f: 2, c: 769},
+    [175, 772], {f: 3, c: 774}, 778, [184, 807], 779, 808, 780, [822, 8212],
+    198, 170, 321, 216, 338, 186, 230, 305, 322, 248, 339, 223, 173, 169, 172,
+    174, 0, 0, {f: 2, c: 178}, 181, 185, {f: 3, c: 188}, {f: 6, c: 192},
+    {f: 16, c: 199}, 0, {f: 6, c: 217}, {f: 6, c: 224}, {f: 16, c: 231}, 0,
+    {f: 7, c: 249}, 352, 376, 381, [773, 8254], 353, 8482, 382, 0, 8194,
+    {f: 59, c: 33}, 165, {f: 31, c: 93}, 65512, {f: 2, c: 125}, 0,
+    {f: 63, c: 65377}, {s: 243}, [8195, 12288],
+    {f: 2, c: 12289}, 65292, 65294, 12539, {f: 2, c: 65306}, 65311, 65281,
+    {f: 2, c: 12443}, 180, 65344, 168, 65342, 65507, 65343, {f: 2, c: 12541},
+    {f: 2, c: 12445}, 12291, 20189, {f: 3, c: 12293}, 12540, 8213, 8208, 65295,
+    65340, [12316, 65374], 8214, 65372, 8230, 8229, {s: 4}, {f: 2, c: 65288},
+    {f: 2, c: 12308}, 65339, 65341, 65371, 65373, {f: 10, c: 12296}, 65291,
+    [8722, 65293], 177, 215, 247, 65309, 8800, 65308, 65310, {f: 2, c: 8806},
+    8734, 8756, 9794, 9792, 176, {f: 2, c: 8242}, 8451, 65509, 65284,
+    {f: 2, c: 65504}, 65285, 65283, 65286, 65290, 65312, 167, 9734, 9733, 9675,
+    9679, 9678, 9671, 9670, 9633, 9632, 9651, 9650, 9661, 9660, 8251, 12306,
+    8594, {f: 2, c: 8592}, 8595, 12307, 8712, 8715, {f: 2, c: 8838},
+    {f: 2, c: 8834}, 8746, 8745, {f: 2, c: 8743}, 65506, 8658, 8660, 8704,
+    8707, 8736, 8869, 8978, 8706, 8711, 8801, 8786, {f: 2, c: 8810}, 8730,
+    8765, 8733, 8757, {f: 2, c: 8747}, 8491, 8240, 9839, 9837, 9834,
+    {f: 2, c: 8224}, 182, 9711, {f: 10, c: 65296}, {f: 26, c: 65313},
+    {f: 26, c: 65345}, {f: 83, c: 12353}, {f: 86, c: 12449}, {f: 17, c: 913},
+    {f: 7, c: 931}, {f: 17, c: 945}, {f: 7, c: 963}, {f: 6, c: 1040}, 1025,
+    {f: 32, c: 1046}, 1105, {f: 26, c: 1078}, 20124, 21782, 23043, 38463,
+    21696, 24859, 25384, 23030, 36898, 33909, 33564, 31312, 24746, 25569,
+    28197, 26093, 33894, 33446, 39925, 26771, 22311, 26017, 25201, 23451,
+    22992, 34427, 39156, 32098, 32190, 39822, 25110, 31903, 34999, 23433,
+    24245, 25353, 26263, 26696, 38343, 38797, 26447, 20197, 20234, 20301,
+    20381, 20553, 22258, 22839, 22996, 23041, 23561, 24799, 24847, 24944,
+    26131, 26885, 28858, 30031, 30064, 31227, 32173, 32239, 32963, 33806,
+    [12176, 34915], 35586, 36949, 36986, 21307, 20117, 20133, 22495, 32946,
+    37057, 30959, [12032, 19968], 22769, 28322, 36920, 31282, 33576, 33419,
+    39983, 20801, 21360, 21693, 21729, 22240, 23035, 24341, 39154, 28139,
+    32996, 34093, 38498, 38512, 38560, 38907, 21515, 21491, 23431, 28879,
+    [12155, 32701], 36802, [12204, 38632], 21359, 40284, 31418, 19985, 30867,
+    [12165, 33276], 28198, 22040, 21764, 27421, 34074, 39995, 23013, 21417,
+    28006, [12128, 29916], 38287, 22082, 20113, 36939, 38642, 33615, 39180,
+    21473, 21942, 23344, 24433, 26144, 26355, 26628, 27704, 27891, 27945,
+    29787, 30408, 31310, 38964, 33521, 34907, 35424, 37613, 28082, 30123,
+    30410, 39365, 24742, 35585, 36234, 38322, 27022, 21421, 20870, 22290,
+    22576, 22852, 23476, 24310, 24616, 25513, 25588, 27839, 28436, 28814,
+    28948, 29017, 29141, 29503, 32257, 33398, 33489, 34199, 36960, 37467,
+    40219, 22633, 26044, 27738, 29989, 20985, 22830, 22885, 24448, 24540,
+    25276, 26106, 27178, 27431, 27572, 29579, 32705, 35158, 40236, 40206,
+    [12009, 40644], 23713, 27798, 33659, 20740, 23627, 25014, 33222, 26742,
+    29281, [12036, 20057], 20474, 21368, 24681, 28201, 31311, [12211, 38899],
+    19979, 21270, 20206, 20309, 20285, 20385, 20339, 21152, 21487, 22025,
+    22799, 23233, 23478, 23521, 31185, 26247, 26524, 26550, 27468, 27827,
+    [12117, 28779], 29634, 31117, [12146, 31166], 31292, 31623, 33457, 33499,
+    33540, 33655, 33775, 33747, 34662, 35506, 22057, 36008, 36838, 36942,
+    38686, 34442, 20420, 23784, 25105, [12123, 29273], 30011, 33253, 33469,
+    34558, 36032, 38597, 39187, 39381, 20171, 20250, 35299, 22238, 22602,
+    22730, 24315, 24555, 24618, 24724, 24674, 25040, 25106, 25296, 25913,
+    39745, 26214, 26800, 28023, 28784, 30028, 30342, 32117, 33445, 34809,
+    38283, 38542, [12185, 35997], 20977, 21182, 22806, 21683, 23475, 23830,
+    24936, 27010, 28079, 30861, 33995, 34903, 35442, 37799, 39608, 28012,
+    39336, 34521, 22435, 26623, 34510, 37390, 21123, 22151, 21508, 24275,
+    25313, 25785, 26684, 26680, 27579, 29554, 30906, 31339, 35226,
+    [12179, 35282], 36203, 36611, 37101, 38307, 38548, [12208, 38761], 23398,
+    23731, 27005, {f: 2, c: 38989}, 25499, 31520, 27179, 27263, 26806, 39949,
+    28511, 21106, 21917, 24688, 25324, 27963, 28167, 28369, 33883, 35088,
+    36676, 19988, 39993, 21494, 26907, 27194, 38788, 26666, 20828, 31427,
+    33970, 37340, 37772, 22107, 40232, 26658, 33541, 33841, 31909, 21000,
+    33477, [12129, 29926], 20094, 20355, 20896, 23506, 21002, 21208, 21223,
+    24059, 21914, 22570, 23014, 23436, 23448, 23515, [12082, 24178], 24185,
+    24739, 24863, 24931, 25022, 25563, 25954, 26577, 26707, 26874, 27454,
+    27475, 27735, 28450, 28567, 28485, 29872, [12130, 29976], 30435, 30475,
+    31487, 31649, 31777, 32233, [12152, 32566], 32752, 32925, 33382, 33694,
+    35251, 35532, 36011, 36996, 37969, 38291, 38289, 38306, 38501, 38867,
+    39208, 33304, 20024, 21547, 23736, 24012, 29609, 30284, 30524, 23721,
+    32747, 36107, 38593, 38929, 38996, 39000, 20225, 20238, 21361, 21916,
+    22120, 22522, 22855, 23305, 23492, 23696, 24076, 24190, 24524, 25582,
+    26426, 26071, 26082, 26399, 26827, 26820, 27231, 24112, 27589, 27671,
+    27773, 30079, 31048, 23395, 31232, 32000, 24509, 35215, 35352, 36020,
+    36215, 36556, 36637, 39138, 39438, [12004, 12225, 39740], [12018, 20096],
+    20605, 20736, 22931, 23452, 25135, 25216, 25836, 27450, 29344, 30097,
+    31047, 32681, 34811, 35516, 35696, 25516, 33738, 38816, 21513, 21507,
+    21931, 26708, 27224, 35440, 30759, 26485, [12233, 40653], 21364, 23458,
+    33050, 34384, 36870, 19992, 20037, 20167, 20241, 21450, 21560, 23470,
+    [12088, 24339], 24613, 25937, 26429, 27714, 27762, 27875, 28792, 29699,
+    31350, 31406, 31496, 32026, 31998, 32102, 26087, [12124, 29275], 21435,
+    23621, 24040, 25298, 25312, 25369, 28192, 34394, 35377, 36317, 37624,
+    28417, 31142, [12226, 39770], 20136, {f: 2, c: 20139}, 20379, 20384, 20689,
+    20807, 31478, 20849, 20982, 21332, 21281, 21375, 21483, 21932, 22659,
+    23777, 24375, 24394, 24623, 24656, 24685, 25375, 25945, 27211, 27841,
+    29378, 29421, 30703, 33016, 33029, 33288, 34126, 37111, 37857, 38911,
+    39255, 39514, 20208, 20957, 23597, 26241, 26989, 23616, 26354, 26997,
+    [12127, 29577], 26704, 31873, 20677, 21220, 22343, [12081, 24062], 37670,
+    [12100, 26020], 27427, 27453, 29748, 31105, 31165, 31563, 32202, 33465,
+    33740, 34943, 35167, 35641, 36817, [12198, 37329], 21535, 37504, 20061,
+    20534, 21477, 21306, 29399, 29590, 30697, 33510, 36527, 39366, 39368,
+    39378, 20855, 24858, 34398, 21936, 31354, 20598, 23507, 36935, 38533,
+    20018, 27355, 37351, 23633, 23624, 25496, 31391, 27795, 38772, 36705,
+    31402, 29066, 38536, 31874, 26647, 32368, 26705, 37740, 21234, 21531,
+    34219, 35347, 32676, 36557, 37089, 21350, 34952, 31041, 20418, 20670,
+    21009, 20804, 21843, 22317, 29674, 22411, 22865, 24418, 24452, 24693,
+    24950, 24935, 25001, 25522, 25658, 25964, 26223, 26690, 28179, 30054,
+    31293, 31995, 32076, 32153, 32331, 32619, 33550, 33610, 34509, 35336,
+    35427, 35686, 36605, 38938, 40335, 33464, 36814, 39912, 21127, 25119,
+    25731, 28608, 38553, 26689, 20625, [12107, 27424], 27770, 28500,
+    [12147, 31348], 32080, [12174, 34880], 35363, [12105, 26376], 20214, 20537,
+    20518, 20581, 20860, 21048, 21091, 21927, 22287, 22533, 23244, 24314,
+    25010, 25080, 25331, 25458, 26908, 27177, 29309, [12125, 29356], 29486,
+    30740, 30831, 32121, 30476, 32937, [12178, 35211], 35609, 36066, 36562,
+    36963, 37749, 38522, 38997, 39443, 40568, 20803, 21407, 21427, 24187,
+    24358, 28187, 28304, [12126, 29572], 29694, 32067, 33335, [12180, 35328],
+    35578, 38480, 20046, 20491, 21476, 21628, 22266, 22993, 23396,
+    [12080, 24049], 24235, 24359, [12094, 25144], 25925, 26543, 28246, 29392,
+    31946, 34996, 32929, 32993, 33776, [11969, 34382], 35463, 36328, 37431,
+    38599, 39015, [12238, 40723], 20116, 20114, 20237, 21320, 21577, 21566,
+    23087, 24460, 24481, 24735, 26791, 27278, 29786, 30849, 35486, 35492,
+    35703, 37264, 20062, 39881, 20132, 20348, 20399, 20505, 20502, 20809,
+    20844, 21151, 21177, 21246, 21402, [12061, 21475], 21521, 21518, 21897,
+    22353, 22434, 22909, 23380, 23389, 23439, [12079, 24037], 24039, 24055,
+    24184, 24195, 24218, 24247, 24344, 24658, 24908, 25239, 25304, 25511,
+    25915, 26114, 26179, 26356, 26477, 26657, 26775, 27083, 27743, 27946,
+    28009, 28207, 28317, 30002, 30343, 30828, 31295, 31968, 32005, 32024,
+    32094, 32177, 32789, 32771, 32943, 32945, 33108, 33167, 33322, 33618,
+    [12175, 34892], 34913, 35611, 36002, 36092, 37066, 37237, 37489, 30783,
+    37628, 38308, 38477, 38917, [12217, 39321], [12220, 39640], 40251, 21083,
+    21163, 21495, 21512, 22741, 25335, 28640, 35946, 36703, 40633, 20811,
+    21051, 21578, 22269, 31296, 37239, 40288, [12234, 40658], 29508, 28425,
+    33136, 29969, 24573, 24794, [12219, 39592], 29403, 36796, 27492, 38915,
+    20170, 22256, 22372, 22718, 23130, 24680, 25031, 26127, 26118, 26681,
+    26801, 28151, 30165, 32058, [12169, 33390], 39746, 20123, 20304, 21449,
+    21766, 23919, 24038, 24046, 26619, 27801, 29811, 30722, 35408, 37782,
+    35039, 22352, 24231, 25387, 20661, 20652, 20877, 26368, 21705, 22622,
+    22971, 23472, 24425, 25165, 25505, 26685, 27507, 28168, 28797, 37319,
+    29312, 30741, 30758, 31085, 25998, 32048, 33756, 35009, 36617, 38555,
+    21092, 22312, 26448, 32618, 36001, 20916, 22338, 38442, 22586, 27018,
+    32948, 21682, 23822, 22524, 30869, 40442, 20316, 21066, 21643, 25662,
+    26152, 26388, 26613, 31364, 31574, 32034, 37679, 26716, 39853, 31545,
+    21273, 20874, 21047, 23519, 25334, 25774, 25830, 26413, 27578, 34217,
+    38609, 30352, 39894, 25420, 37638, 39851, [12139, 30399], 26194, 19977,
+    20632, 21442, [12077, 23665], 24808, 25746, 25955, 26719, 29158, 29642,
+    29987, 31639, 32386, 34453, 35715, 36059, 37240, 39184, 26028, 26283,
+    27531, 20181, 20180, 20282, 20351, 21050, 21496, 21490, 21987, 22235,
+    [12064, 22763], 22987, 22985, 23039, [12070, 23376], 23629, 24066, 24107,
+    24535, 24605, 25351, [12096, 25903], 23388, 26031, 26045, 26088, 26525,
+    [12108, 27490], 27515, [12114, 27663], 29509, 31049, 31169, [12151, 31992],
+    32025, 32043, 32930, 33026, [12164, 33267], 35222, 35422, 35433, 35430,
+    35468, 35566, 36039, 36060, 38604, 39164, [12013, 27503], 20107, 20284,
+    20365, 20816, 23383, 23546, 24904, 25345, 26178, 27425, 28363, 27835,
+    29246, 29885, 30164, 30913, [12144, 31034], [12157, 32780], [12159, 32819],
+    [12163, 33258], 33940, 36766, 27728, [12229, 40575], 24335, 35672, 40235,
+    31482, 36600, 23437, 38635, 19971, 21489, 22519, 22833, 23241, 23460,
+    24713, 28287, 28422, 30142, 36074, 23455, 34048, 31712, 20594, 26612,
+    33437, 23649, 34122, 32286, 33294, 20889, 23556, 25448, 36198, 26012,
+    29038, 31038, 32023, 32773, 35613, [12190, 36554], 36974, 34503, 37034,
+    20511, 21242, 23610, 26451, 28796, 29237, 37196, 37320, 37675, 33509,
+    23490, 24369, 24825, 20027, 21462, 23432, [12095, 25163], 26417, 27530,
+    29417, 29664, 31278, 33131, 36259, 37202, [12216, 39318], 20754, 21463,
+    21610, 23551, 25480, 27193, 32172, 38656, 22234, 21454, 21608, 23447,
+    23601, 24030, 20462, 24833, 25342, 27954, 31168, 31179, 32066, 32333,
+    32722, 33261, [12168, 33311], 33936, 34886, 35186, 35728, 36468, 36655,
+    36913, 37195, 37228, 38598, 37276, 20160, 20303, 20805, [12055, 21313],
+    24467, 25102, 26580, 27713, 28171, 29539, 32294, 37325, 37507, 21460,
+    22809, 23487, 28113, 31069, 32302, 31899, 22654, 29087, 20986, 34899,
+    36848, 20426, 23803, 26149, 30636, 31459, 33308, 39423, 20934, 24490,
+    26092, 26991, 27529, 28147, 28310, 28516, 30462, 32020, 24033, 36981,
+    37255, 38918, 20966, 21021, 25152, 26257, 26329, 28186, 24246, 32210,
+    32626, 26360, 34223, 34295, 35576, 21161, 21465, [12069, 22899], 24207,
+    24464, 24661, 37604, 38500, 20663, 20767, 21213, 21280, 21319, 21484,
+    21736, 21830, 21809, 22039, 22888, 22974, 23100, 23477, 23558,
+    [12073, 23567], 23569, 23578, 24196, 24202, 24288, 24432, 25215, 25220,
+    25307, 25484, 25463, 26119, 26124, 26157, 26230, 26494, 26786, 27167,
+    27189, 27836, 28040, 28169, 28248, 28988, 28966, 29031, 30151, 30465,
+    30813, 30977, 31077, 31216, 31456, 31505, 31911, 32057, 32918, 33750,
+    33931, 34121, 34909, 35059, 35359, 35388, 35412, 35443, 35937, 36062,
+    37284, 37478, 37758, 37912, 38556, 38808, 19978, 19976, 19998, 20055,
+    20887, 21104, 22478, 22580, 22732, 23330, 24120, 24773, 25854, 26465,
+    26454, 27972, 29366, 30067, 31331, 33976, 35698, 37304, 37664, 22065,
+    22516, 39166, 25325, 26893, 27542, 29165, 32340, 32887, [12170, 33394],
+    35302, [12215, 39135], 34645, 36785, 23611, 20280, 20449, 20405, 21767,
+    23072, 23517, 23529, [12092, 24515], 24910, 25391, 26032, 26187, 26862,
+    27035, 28024, 28145, 30003, 30137, 30495, 31070, 31206, 32051,
+    [12162, 33251], 33455, 34218, 35242, 35386, [12189, 36523], [12191, 36763],
+    36914, 37341, 38663, [12040, 20154], 20161, 20995, 22645, 22764, 23563,
+    29978, 23613, 33102, 35338, 36805, 38499, 38765, 31525, 35535, 38920,
+    37218, 22259, 21416, 36887, 21561, 22402, 24101, 25512, [12116, 27700],
+    28810, 30561, 31883, 32736, 34928, 36930, 37204, 37648, 37656, 38543,
+    29790, 39620, 23815, 23913, 25968, 26530, 36264, 38619, 25454, 26441,
+    26905, 33733, 38935, 38592, 35070, 28548, 25722, [12072, 23544], 19990,
+    28716, 30045, 26159, 20932, 21046, 21218, 22995, 24449, 24615, 25104,
+    25919, 25972, 26143, 26228, 26866, 26646, 27491, 28165, 29298,
+    [12131, 29983], 30427, 31934, 32854, 22768, 35069, [11972, 35199], 35488,
+    35475, 35531, 36893, 37266, [11992, 38738], 38745, [12011, 25993], 31246,
+    33030, 38587, 24109, 24796, 25114, 26021, 26132, 26512, [12143, 30707],
+    31309, 31821, 32318, 33034, 36012, [12186, 36196], 36321, 36447, 30889,
+    20999, 25305, 25509, 25666, 25240, 35373, 31363, 31680, 35500, 38634,
+    32118, [12166, 33292], 34633, 20185, 20808, 21315, 21344, 23459, 23554,
+    23574, 24029, 25126, 25159, 25776, 26643, 26676, 27849, 27973, 27927,
+    26579, 28508, 29006, 29053, 26059, 31359, 31661, 32218, 32330, 32680,
+    33146, [12167, 33307], 33337, 34214, 35438, 36046, 36341, 36984, 36983,
+    37549, 37521, 38275, 39854, 21069, 21892, 28472, 28982, 20840, 31109,
+    32341, 33203, 31950, 22092, 22609, 23720, 25514, 26366, 26365, 26970,
+    29401, 30095, 30094, 30990, 31062, 31199, 31895, 32032, 32068, 34311,
+    35380, 38459, 36961, [12239, 40736], 20711, 21109, 21452, 21474, 20489,
+    21930, 22766, 22863, 29245, 23435, 23652, 21277, 24803, 24819, 25436,
+    25475, 25407, 25531, 25805, 26089, 26361, 24035, 27085, 27133, 28437,
+    29157, 20105, 30185, 30456, 31379, 31967, 32207, 32156, 32865, 33609,
+    33624, 33900, 33980, 34299, 35013, [12187, 36208], 36865, 36973, 37783,
+    38684, 39442, 20687, 22679, 24974, 33235, 34101, 36104, 36896, 20419,
+    20596, 21063, 21363, 24687, 25417, 26463, 28204, [12188, 36275], 36895,
+    20439, 23646, 36042, 26063, 32154, 21330, 34966, 20854, 25539, 23384,
+    23403, 23562, 25613, 26449, 36956, 20182, 22810, 22826, 27760, 35409,
+    21822, 22549, 22949, 24816, 25171, 26561, 33333, 26965, 38464, 39364,
+    39464, 20307, 22534, 23550, 32784, 23729, 24111, 24453, 24608, 24907,
+    25140, 26367, 27888, 28382, 32974, 33151, 33492, 34955, 36024, 36864,
+    36910, 38538, 40667, 39899, 20195, 21488, [12068, 22823], 31532, 37261,
+    38988, 40441, 28381, 28711, 21331, 21828, 23429, 25176, 25246, 25299,
+    27810, 28655, 29730, 35351, 37944, 28609, 35582, 33592, 20967, 34552,
+    21482, 21481, 20294, 36948, [12192, 36784], 22890, 33073, 24061, 31466,
+    36799, 26842, [12181, 35895], 29432, 40008, 27197, 35504, 20025, 21336,
+    22022, 22374, 25285, 25506, 26086, 27470, 28129, 28251, 28845, 30701,
+    31471, 31658, 32187, 32829, 32966, 34507, 35477, 37723, 22243, 22727,
+    24382, 26029, 26262, 27264, 27573, 30007, 35527, 20516, 30693, 22320,
+    24347, 24677, 26234, 27744, 30196, 31258, 32622, 33268, 34584, 36933,
+    39347, 31689, 30044, [12149, 31481], 31569, 33988, 36880, 31209, 31378,
+    33590, 23265, 30528, 20013, 20210, 23449, 24544, 25277, 26172, 26609,
+    27880, [12173, 34411], 34935, 35387, 37198, 37619, 39376, 27159, 28710,
+    29482, 33511, 33879, 36015, 19969, 20806, 20939, 21899, 23541, 24086,
+    24115, 24193, 24340, 24373, 24427, 24500, 25074, 25361, 26274, 26397,
+    28526, 29266, 30010, 30522, 32884, 33081, 33144, 34678, 35519, 35548,
+    36229, 36339, 37530, [11985, 12199, 38263], 38914, [12227, 40165], 21189,
+    25431, 30452, 26389, 27784, 29645, 36035, 37806, 38515, 27941, 22684,
+    26894, 27084, 36861, 37786, 30171, 36890, 22618, 26626, 25524, 27131,
+    20291, 28460, 26584, 36795, 34086, 32180, 37716, 26943, 28528, 22378,
+    22775, 23340, 32044, [12118, 29226], 21514, 37347, 40372, 20141, 20302,
+    20572, 20597, 21059, 35998, 21576, 22564, 23450, 24093, 24213, 24237,
+    24311, 24351, 24716, 25269, 25402, 25552, 26799, 27712, 30855, 31118,
+    31243, 32224, 33351, 35330, 35558, 36420, 36883, 37048, 37165, 37336,
+    [12237, 40718], 27877, 25688, 25826, 25973, 28404, 30340, 31515, 36969,
+    37841, 28346, 21746, 24505, 25764, 36685, 36845, 37444, 20856, 22635,
+    22825, 23637, 24215, 28155, 32399, 29980, 36028, 36578, 39003, 28857,
+    20253, 27583, 28593, [12133, 30000], 38651, 20814, 21520, 22581, 22615,
+    22956, 23648, 24466, [12099, 26007], 26460, 28193, 30331, 33759, 36077,
+    36884, 37117, 37709, 30757, 30778, 21162, 24230, [12063, 22303], 22900,
+    24594, 20498, 20826, 20908, 20941, [12049, 20992], 21776, 22612, 22616,
+    22871, 23445, 23798, 23947, 24764, 25237, 25645, 26481, 26691, 26812,
+    26847, 30423, 28120, 28271, 28059, 28783, 29128, 24403, 30168, 31095,
+    31561, 31572, 31570, 31958, 32113, 21040, 33891, 34153, 34276, 35342,
+    35588, [12182, 35910], 36367, 36867, 36879, 37913, 38518, 38957, 39472,
+    38360, 20685, 21205, 21516, 22530, 23566, 24999, 25758, 27934, 30643,
+    31461, 33012, 33796, 36947, 37509, 23776, 40199, 21311, 24471, 24499,
+    28060, 29305, 30563, 31167, 31716, 27602, 29420, 35501, 26627, 27233,
+    20984, 31361, 26932, 23626, 40182, 33515, 23493, [12195, 37193], 28702,
+    22136, 23663, 24775, 25958, 27788, 35930, 36929, 38931, 21585, 26311,
+    37389, 22856, 37027, 20869, 20045, 20970, 34201, 35598, 28760, 25466,
+    37707, 26978, 39348, 32260, 30071, 21335, 26976, 36575, 38627, 27741,
+    [12038, 20108], 23612, 24336, 36841, 21250, 36049, [12161, 32905], 34425,
+    24319, [12103, 26085], 20083, [12042, 20837], 22914, 23615, 38894, 20219,
+    22922, 24525, 35469, 28641, 31152, 31074, 23527, 33905, 29483, 29105,
+    24180, 24565, 25467, 25754, 29123, 31896, 20035, 24316, 20043, 22492,
+    22178, 24745, 28611, 32013, 33021, 33075, 33215, 36786, 35223, 34468,
+    24052, 25226, 25773, 35207, 26487, 27874, 27966, 29750, 30772, 23110,
+    32629, 33453, [12218, 39340], 20467, 24259, 25309, 25490, 25943, 26479,
+    30403, 29260, 32972, 32954, 36649, 37197, 20493, 22521, 23186, 26757,
+    26995, 29028, 29437, 36023, 22770, 36064, 38506, 36889, 34687, 31204,
+    30695, 33833, 20271, 21093, 21338, 25293, 26575, 27850, [12137, 30333],
+    31636, 31893, 33334, 34180, 36843, 26333, 28448, 29190, 32283, 33707,
+    39361, [12008, 40614], 20989, 31665, 30834, 31672, 32903, 31560, 27368,
+    24161, 32908, 30033, 30048, [12043, 20843], 37474, 28300, 30330, 37271,
+    39658, 20240, 32624, 25244, 31567, 38309, 40169, 22138, 22617, 34532,
+    38588, 20276, 21028, 21322, 21453, 21467, 24070, 25644, 26001, 26495,
+    27710, 27726, 29256, 29359, 29677, 30036, 32321, 33324, 34281, 36009,
+    31684, [12196, 37318], 29033, 38930, 39151, 25405, 26217, 30058, 30436,
+    30928, 34115, 34542, 21290, 21329, 21542, 22915, 24199, 24444, 24754,
+    25161, 25209, 25259, 26000, [12112, 27604], 27852, 30130, [12138, 30382],
+    30865, 31192, 32203, 32631, 32933, 34987, 35513, 36027, 36991,
+    [12206, 38750], [12214, 39131], 27147, 31800, 20633, 23614, 24494, 26503,
+    27608, 29749, 30473, 32654, [12240, 40763], 26570, 31255, 21305,
+    [12134, 30091], 39661, 24422, 33181, 33777, 32920, 24380, 24517, 30050,
+    31558, 36924, 26727, 23019, 23195, 32016, 30334, 35628, 20469, 24426,
+    27161, 27703, 28418, 29922, 31080, 34920, 35413, 35961, 24287, 25551,
+    30149, 31186, 33495, 37672, 37618, 33948, 34541, 39981, 21697, 24428,
+    25996, 27996, 28693, 36007, 36051, 38971, 25935, 29942, 19981, 20184,
+    22496, 22827, 23142, 23500, 20904, 24067, 24220, 24598, 25206, 25975,
+    26023, 26222, 28014, [12119, 29238], 31526, 33104, 33178, 33433, 35676,
+    36000, 36070, 36212, [12201, 38428], 38468, 20398, 25771, 27494, 33310,
+    33889, 34154, 37096, 23553, 26963, [12213, 39080], 33914, 34135, 20239,
+    21103, 24489, 24133, 26381, 31119, 33145, 35079, 35206, 28149, 24343,
+    25173, 27832, 20175, 29289, 39826, 20998, 21563, 22132, 22707, 24996,
+    25198, 28954, 22894, 31881, 31966, 32027, 38640, [12098, 25991], 32862,
+    19993, 20341, 20853, 22592, 24163, 24179, 24330, 26564, 20006, 34109,
+    38281, 38491, [12150, 31859], [12212, 38913], 20731, 22721, 30294, 30887,
+    21029, 30629, 34065, 31622, 20559, 22793, [12122, 29255], 31687, 32232,
+    36794, 36820, 36941, 20415, 21193, 23081, 24321, 38829, 20445, 33303,
+    37610, 22275, 25429, 27497, 29995, 35036, 36628, 31298, 21215, 22675,
+    24917, 25098, 26286, [11935, 27597], 31807, 33769, 20515, 20472, 21253,
+    21574, 22577, 22857, 23453, 23792, 23791, 23849, 24214, 25265, 25447,
+    25918, [12101, 26041], 26379, 27861, 27873, 28921, 30770, 32299, 32990,
+    33459, 33804, 34028, 34562, 35090, 35370, 35914, 37030, 37586, 39165,
+    40179, 40300, 20047, 20129, 20621, 21078, 22346, 22952, 24125,
+    {f: 2, c: 24536}, 25151, 26292, 26395, 26576, 26834, 20882, 32033, 32938,
+    33192, 35584, 35980, 36031, 37502, 38450, 21536, 38956, 21271, 20693,
+    [12056, 21340], 22696, 25778, 26420, 29287, 30566, 31302, 37350, 21187,
+    27809, 27526, 22528, 24140, 22868, 26412, 32763, 20961, 30406, 25705,
+    30952, 39764, [12231, 40635], 22475, 22969, 26151, 26522, 27598, 21737,
+    27097, 24149, 33180, 26517, 39850, 26622, 40018, 26717, 20134, 20451,
+    [12060, 21448], 25273, 26411, 27819, 36804, 20397, 32365, 40639, 19975,
+    24930, 28288, 28459, 34067, 21619, 26410, 39749, [11922, 24051], 31637,
+    23724, 23494, 34588, 28234, 34001, 31252, 33032, 22937, 31885,
+    [11936, 27665], 30496, 21209, 22818, 28961, 29279, [12141, 30683], 38695,
+    40289, 26891, 23167, 23064, 20901, 21517, 21629, 26126, 30431, 36855,
+    37528, 40180, 23018, 29277, 28357, 20813, 26825, 32191, 32236,
+    [12207, 38754], 40634, 25720, 27169, 33538, 22916, 23391, [12113, 27611],
+    29467, 30450, 32178, 32791, 33945, 20786, [12106, 26408], 40665,
+    [12140, 30446], 26466, 21247, 39173, 23588, 25147, 31870, 36016, 21839,
+    24758, 32011, [12200, 38272], 21249, 20063, 20918, 22812, 29242, 32822,
+    37326, 24357, [12142, 30690], 21380, 24441, 32004, 34220, 35379, 36493,
+    38742, 26611, 34222, 37971, 24841, 24840, 27833, 30290, 35565, 36664,
+    21807, 20305, 20778, 21191, 21451, 23461, 24189, 24736, 24962, 25558,
+    26377, 26586, 28263, 28044, {f: 2, c: 29494}, 30001, 31056, 35029, 35480,
+    36938, [12194, 37009], 37109, 38596, 34701, [12067, 22805], 20104, 20313,
+    19982, 35465, 36671, 38928, 20653, 24188, 22934, 23481, 24248, 25562,
+    25594, 25793, 26332, 26954, 27096, 27915, 28342, 29076, [12132, 29992],
+    31407, [12154, 32650], 32768, 33865, 33993, 35201, 35617, 36362, 36965,
+    38525, 39178, 24958, 25233, 27442, 27779, 28020, 32716, 32764, 28096,
+    32645, 34746, 35064, 26469, 33713, 38972, 38647, 27931, 32097, 33853,
+    37226, 20081, 21365, 23888, 27396, 28651, 34253, 34349, 35239, 21033,
+    21519, 23653, 26446, 26792, 29702, 29827, 30178, 35023, 35041,
+    [12197, 37324], 38626, 38520, 24459, 29575, [12148, 31435], 33870, 25504,
+    30053, 21129, 27969, 28316, 29705, 30041, 30827, 31890, 38534,
+    [12015, 31452], [12243, 40845], 20406, 24942, 26053, 34396, 20102, 20142,
+    20698, 20001, 20940, 23534, 26009, 26753, 28092, 29471, 30274, 30637,
+    31260, 31975, 33391, 35538, 36988, 37327, 38517, 38936, [12050, 21147],
+    32209, 20523, 21400, 26519, 28107, 29136, 29747, 33256, 36650, 38563,
+    40023, 40607, 29792, 22593, 28057, 32047, 39006, 20196, 20278, 20363,
+    20919, 21169, 23994, 24604, 29618, 31036, 33491, 37428, 38583, 38646,
+    38666, 40599, 40802, 26278, 27508, 21015, 21155, 28872, 35010, 24265,
+    24651, 24976, 28451, 29001, 31806, 32244, 32879, 34030, 36899, 37676,
+    21570, 39791, 27347, 28809, 36034, 36335, 38706, 21172, 23105, 24266,
+    24324, 26391, 27004, 27028, 28010, 28431, 29282, 29436, 31725,
+    [12156, 32769], 32894, 34635, 37070, 20845, 40595, 31108, 32907, 37682,
+    35542, 20525, 21644, 35441, 27498, 36036, 33031, 24785, 26528, 40434,
+    20121, 20120, 39952, 35435, 34241, 34152, 26880, 28286, 30871, 33109,
+    24332, 19984, 19989, 20010, 20017, [12034, 20022], 20028, [12035, 20031],
+    20034, 20054, 20056, 20098, [12037, 20101], 35947, 20106, 33298, 24333,
+    20110, {f: 2, c: 20126}, [12039, 20128], 20130, 20144, 20147, 20150, 20174,
+    20173, 20164, 20166, 20162, 20183, 20190, 20205, 20191, 20215, 20233,
+    20314, 20272, 20315, 20317, 20311, 20295, 20342, 20360, 20367, 20376,
+    20347, 20329, 20336, 20369, 20335, 20358, 20374, 20760, 20436, 20447,
+    20430, 20440, 20443, 20433, 20442, 20432, {f: 2, c: 20452}, 20506, 20520,
+    20500, 20522, 20517, 20485, 20252, 20470, 20513, 20521, 20524, 20478,
+    20463, 20497, 20486, 20547, 20551, 26371, 20565, 20560, 20552, 20570,
+    20566, 20588, 20600, 20608, 20634, 20613, 20660, 20658, {f: 2, c: 20681},
+    20659, 20674, 20694, 20702, 20709, 20717, 20707, 20718, 20729, 20725,
+    20745, {f: 2, c: 20737}, 20758, 20757, 20756, 20762, 20769, 20794, 20791,
+    20796, 20795, [12041, 20799], [11918, 20800], 20818, 20812, 20820, 20834,
+    31480, {f: 2, c: 20841}, 20846, 20864, [12044, 20866], 22232, 20876, 20873,
+    20879, 20881, 20883, 20885, [12045, 20886], 20900, 20902, 20898,
+    {f: 2, c: 20905}, [12046, 20907], 20915, {f: 2, c: 20913}, 20912, 20917,
+    20925, 20933, 20937, 20955, [12047, 20960], 34389, 20969, 20973, 20976,
+    [12048, 20981], 20990, 20996, 21003, 21012, 21006, 21031, 21034, 21038,
+    21043, 21049, 21071, 21060, {f: 2, c: 21067}, 21086, 21076, 21098, 21108,
+    21097, 21107, 21119, 21117, 21133, 21140, 21138, 21105, 21128, 21137,
+    36776, 36775, {f: 2, c: 21164}, 21180, 21173, 21185, 21197, 21207, 21214,
+    21219, 21222, 39149, 21216, 21235, 21237, 21240, [12051, 21241], 21254,
+    21256, 30008, 21261, 21264, 21263, [12052, 21269], [12053, 21274], 21283,
+    21295, 21297, 21299, [12054, 21304], 21312, 21318, 21317, 19991, 21321,
+    21325, 20950, 21342, [12057, 21353], 21358, 22808, 21371, 21367,
+    [12058, 21378], 21398, 21408, 21414, 21413, 21422, 21424, [12059, 21430],
+    21443, 31762, 38617, 21471, 26364, 29166, 21486, 21480, 21485, 21498,
+    21505, 21565, 21568, {f: 2, c: 21548}, 21564, 21550, 21558, 21545, 21533,
+    21582, 21647, 21621, 21646, 21599, 21617, 21623, 21616, 21650, 21627,
+    21632, 21622, 21636, 21648, 21638, 21703, 21666, 21688, 21669, 21676,
+    21700, 21704, 21672, 21675, 21698, 21668, 21694, 21692, 21720,
+    {f: 2, c: 21733}, 21775, 21780, 21757, 21742, 21741, 21754, 21730, 21817,
+    21824, 21859, 21836, 21806, 21852, 21829, {f: 2, c: 21846}, 21816, 21811,
+    21853, 21913, 21888, 21679, 21898, 21919, 21883, 21886, 21912, 21918,
+    21934, 21884, 21891, 21929, 21895, 21928, 21978, 21957, 21983, 21956,
+    21980, 21988, 21972, 22036, 22007, 22038, 22014, 22013, 22043, 22009,
+    22094, 22096, 29151, 22068, 22070, 22066, 22072, 22123, 22116, 22063,
+    22124, 22122, 22150, 22144, 22154, 22176, 22164, 22159, 22181, 22190,
+    22198, 22196, 22210, 22204, 22209, 22211, 22208, 22216, 22222, 22225,
+    22227, [12062, 22231], 22254, 22265, 22272, 22271, 22276, 22281, 22280,
+    22283, 22285, 22291, 22296, 22294, 21959, 22300, 22310, {f: 2, c: 22327},
+    22350, 22331, 22336, 22351, 22377, 22464, 22408, 22369, 22399, 22409,
+    22419, 22432, 22451, 22436, 22442, 22448, 22467, 22470, 22484,
+    {f: 2, c: 22482}, 22538, 22486, 22499, 22539, 22553, 22557, 22642, 22561,
+    22626, 22603, 22640, 27584, 22610, 22589, 22649, 22661, 22713, 22687,
+    22699, 22714, 22750, 22715, 22712, 22702, 22725, 22739, 22737, 22743,
+    22745, 22744, 22757, 22748, 22756, 22751, 22767, 22778, 22777,
+    {f: 3, c: 22779}, [12065, 22786], [12066, 22794], 22800, 22811, 26790,
+    22821, {f: 2, c: 22828}, 22834, 22840, 22846, 31442, 22869, 22864, 22862,
+    22874, 22872, 22882, 22880, 22887, 22892, 22889, 22904, 22913, 22941,
+    20318, 20395, 22947, 22962, 22982, 23016, 23004, 22925, {f: 2, c: 23001},
+    23077, 23071, 23057, 23068, 23049, 23066, 23104, 23148, 23113,
+    {f: 2, c: 23093}, 23138, 23146, 23194, 23228, 23230, 23243, 23234, 23229,
+    23267, 23255, 23270, 23273, 23254, {f: 2, c: 23290}, 23308, 23307, 23318,
+    23346, 23248, 23338, 23350, 23358, 23363, 23365, 23360, 23377, 23381,
+    {f: 2, c: 23386}, 23397, 23401, 23408, 23411, 23413, 23416, 25992, 23418,
+    [12071, 23424], 23427, 23462, 23480, 23491, 23495, 23497, 23508, 23504,
+    23524, 23526, 23522, 23518, 23525, 23531, 23536, 23542, 23539, 23557,
+    {f: 2, c: 23559}, 23565, 23571, 23584, [11920, 12074, 23586], 23592,
+    [12075, 23608], 23609, 23617, 23622, 23630, 23635, 23632, 23631, 23409,
+    23660, [12076, 23662], 20066, 23670, 23673, 23692, 23697, 23700, 22939,
+    23723, 23739, 23734, 23740, 23735, 23749, 23742, 23751, 23769, 23785,
+    23805, 23802, 23789, 23948, 23786, 23819, 23829, 23831, 23900, 23839,
+    23835, 23825, 23828, 23842, 23834, 23833, 23832, 23884, 23890, 23886,
+    23883, 23916, 23923, 23926, 23943, 23940, 23938, 23970, 23965, 23980,
+    23982, 23997, 23952, 23991, 23996, 24009, 24013, 24019, 24018, 24022,
+    [12078, 24027], 24043, 24050, 24053, 24075, 24090, 24089, 24081, 24091,
+    {f: 2, c: 24118}, 24132, 24131, 24128, 24142, 24151, 24148, 24159, 24162,
+    24164, 24135, {f: 2, c: 24181}, [11923, 12083, 24186], 40636,
+    [12084, 24191], 24224, {f: 2, c: 24257}, 24264, 24272, 24271, 24278, 24291,
+    24285, {f: 2, c: 24282}, 24290, 24289, {f: 2, c: 24296}, 24300, 24305,
+    24307, 24304, [12085, 24308], 24312, [12086, 24318], 24323, 24329, 24413,
+    24412, [12087, 24331], 24337, 24342, 24361, 24365, 24376, 24385, 24392,
+    24396, 24398, 24367, [11924, 24401], {f: 2, c: 24406}, 24409,
+    [12090, 24417], 24429, [12091, 24435], 24439, 24451, 24450, 24447, 24458,
+    24456, 24465, 24455, 24478, 24473, 24472, 24480, 24488, 24493, 24508,
+    24534, 24571, 24548, 24568, 24561, 24541, 24755, 24575, 24609, 24672,
+    24601, 24592, 24617, 24590, 24625, 24603, 24597, 24619, 24614, 24591,
+    24634, 24666, 24641, 24682, 24695, 24671, 24650, 24646, 24653, 24675,
+    24643, 24676, 24642, 24684, 24683, 24665, 24705, 24717, 24807, 24707,
+    24730, 24708, 24731, {f: 2, c: 24726}, 24722, 24743, 24715, 24801, 24760,
+    24800, 24787, 24756, 24560, 24765, 24774, 24757, 24792, 24909, 24853,
+    24838, {f: 2, c: 24822}, 24832, 24820, 24826, 24835, 24865, 24827, 24817,
+    {f: 2, c: 24845}, 24903, 24894, 24872, 24871, 24906, 24895, 24892, 24876,
+    24884, 24893, 24898, 24900, 24947, 24951, {f: 3, c: 24920}, 24939, 24948,
+    24943, 24933, 24945, 24927, 24925, 24915, 24949, 24985, 24982, 24967,
+    25004, 24980, 24986, 24970, 24977, 25003, 25006, 25036, 25034, 25033,
+    25079, 25032, 25027, 25030, 25018, 25035, 32633, 25037, 25062, 25059,
+    25078, 25082, 25076, 25087, 25085, 25084, 25086, 25088, [12093, 25096],
+    25097, 25101, 25100, 25108, 25115, 25118, 25121, 25130, 25134, 25136,
+    {f: 2, c: 25138}, 25153, 25166, 25182, 25187, 25179, 25184, 25192, 25212,
+    25218, 25225, 25214, {f: 2, c: 25234}, 25238, 25300, 25219, 25236, 25303,
+    25297, 25275, 25295, 25343, 25286, 25812, 25288, 25308, 25292, 25290,
+    25282, 25287, 25243, 25289, 25356, 25326, 25329, 25383, 25346, 25352,
+    25327, 25333, 25424, 25406, 25421, 25628, 25423, 25494, 25486, 25472,
+    25515, 25462, 25507, 25487, 25481, 25503, 25525, 25451, 25449, 25534,
+    25577, 25536, 25542, 25571, 25545, 25554, 25590, 25540, 25622, 25652,
+    25606, 25619, 25638, 25654, 25885, 25623, 25640, 25615, 25703, 25711,
+    25718, 25678, 25898, 25749, 25747, 25765, 25769, 25736, 25788, 25818,
+    25810, 25797, 25799, 25787, 25816, 25794, 25841, 25831, 33289,
+    {f: 2, c: 25824}, 25260, 25827, 25839, 25900, 25846, 25844, 25842, 25850,
+    25856, 25853, 25880, 25884, 25861, 25892, 25891, 25899, [12097, 25908],
+    [11929, 25909], 25911, 25910, 25912, 30027, 25928, 25942, 25941, 25933,
+    25944, 25950, 25949, 25970, 25976, {f: 2, c: 25986}, 35722, 26011, 26015,
+    26027, 26039, 26051, 26054, 26049, 26052, 26060, 26066, 26075, 26073,
+    [12102, 26080], [11931, 26081], 26097, 26482, 26122, 26115, 26107, 26483,
+    {f: 2, c: 26165}, 26164, 26140, 26191, 26180, 26185, 26177, 26206, 26205,
+    26212, {f: 2, c: 26215}, 26207, 26210, 26224, 26243, 26248, 26254, 26249,
+    26244, 26264, 26269, 26305, 26297, 26313, 26302, 26300, 26308, 26296,
+    26326, 26330, 26336, 26175, 26342, 26345, [12104, 26352], 26357, 26359,
+    26383, 26390, 26398, {f: 2, c: 26406}, 38712, 26414, 26431, 26422, 26433,
+    26424, 26423, 26438, 26462, 26464, 26457, {f: 2, c: 26467}, 26505, 26480,
+    26537, 26492, 26474, 26508, 26507, 26534, 26529, 26501, 26551, 26607,
+    26548, 26604, 26547, 26601, 26552, 26596, 26590, 26589, 26594, 26606,
+    26553, 26574, 26566, 26599, 27292, 26654, 26694, 26665, 26688, 26701,
+    26674, 26702, 26803, 26667, 26713, 26723, 26743, 26751, 26783, 26767,
+    26797, 26772, 26781, 26779, 26755, 27310, 26809, 26740, 26805, 26784,
+    26810, 26895, 26765, 26750, 26881, 26826, 26888, 26840, 26914, 26918,
+    26849, 26892, 26829, 26836, 26855, 26837, 26934, 26898, 26884, 26839,
+    26851, 26917, 26873, 26848, 26863, 26920, 26922, 26906, 26915, 26913,
+    26822, 27001, 26999, 26972, 27000, 26987, 26964, 27006, 26990, 26937,
+    26996, 26941, 26969, 26928, 26977, 26974, 26973, 27009, 26986, 27058,
+    27054, 27088, 27071, 27073, 27091, 27070, 27086, 23528, 27082, 27101,
+    27067, 27075, 27047, 27182, 27025, 27040, 27036, 27029, 27060, 27102,
+    27112, 27138, 27163, 27135, 27402, 27129, 27122, 27111, 27141, 27057,
+    27166, 27117, 27156, 27115, 27146, 27154, 27329, 27171, 27155, 27204,
+    27148, 27250, 27190, 27256, 27207, 27234, 27225, 27238, 27208, 27192,
+    27170, 27280, 27277, 27296, 27268, {f: 2, c: 27298}, 27287, 34327, 27323,
+    27331, 27330, 27320, 27315, 27308, 27358, 27345, 27359, 27306, 27354,
+    27370, 27387, 27397, 34326, 27386, 27410, 27414, 39729, 27423, 27448,
+    27447, 30428, 27449, 39150, 27463, 27459, 27465, 27472, 27481, 27476,
+    27483, 27487, 27489, 27512, [12109, 27513], {f: 2, c: 27519}, 27524, 27523,
+    27533, 27544, 27541, 27550, 27556, {f: 2, c: 27562}, 27567, 27570, 27569,
+    [12110, 27571], 27575, 27580, 27590, [12111, 27595], 27603, 27615, 27628,
+    27627, 27635, 27631, 40638, 27656, 27667, [12115, 27668], 27675, 27684,
+    27683, 27742, 27733, 27746, 27754, 27778, 27789, 27802, 27777, 27803,
+    27774, 27752, 27763, 27794, 27792, 27844, 27889, 27859, 27837, 27863,
+    27845, 27869, 27822, 27825, 27838, 27834, 27867, 27887, 27865, 27882,
+    27935, 34893, 27958, 27947, 27965, 27960, 27929, 27957, 27955, 27922,
+    27916, 28003, 28051, 28004, 27994, 28025, 27993, 28046, 28053, 28644,
+    28037, 28153, 28181, 28170, 28085, 28103, 28134, 28088, 28102, 28140,
+    28126, 28108, 28136, 28114, 28101, 28154, 28121, 28132, 28117, 28138,
+    28142, 28205, 28270, 28206, 28185, 28274, 28255, 28222, 28195, 28267,
+    28203, 28278, 28237, 28191, 28227, 28218, 28238, 28196, 28415, 28189,
+    28216, 28290, 28330, 28312, 28361, 28343, 28371, 28349, 28335, 28356,
+    28338, {f: 2, c: 28372}, 28303, 28325, 28354, 28319, 28481, 28433, 28748,
+    28396, 28408, 28414, 28479, 28402, 28465, 28399, 28466, 28364, 28478,
+    28435, 28407, 28550, 28538, 28536, 28545, 28544, 28527, 28507, 28659,
+    28525, 28546, 28540, 28504, 28558, 28561, 28610, 28518, 28595, 28579,
+    28577, 28580, 28601, 28614, 28586, 28639, 28629, 28652, 28628, 28632,
+    28657, 28654, 28635, 28681, 28683, 28666, 28689, 28673, 28687, 28670,
+    28699, 28698, 28532, 28701, 28696, 28703, 28720, 28734, 28722, 28753,
+    28771, 28825, 28818, 28847, 28913, 28844, 28856, 28851, 28846, 28895,
+    28875, 28893, 28889, 28937, 28925, 28956, 28953, 29029, 29013, 29064,
+    29030, 29026, 29004, 29014, 29036, 29071, 29179, 29060, 29077, 29096,
+    29100, 29143, 29113, 29118, 29138, 29129, 29140, 29134, 29152, 29164,
+    29159, 29173, 29180, 29177, 29183, 29197, 29200, 29211, 29224, 29229,
+    29228, 29232, 29234, [12120, 29243], 29244, [12121, 29247], 29248, 29254,
+    29259, 29272, 29300, 29310, 29314, 29313, 29319, 29330, 29334, 29346,
+    29351, 29369, 29362, 29379, 29382, 29380, 29390, 29394, 29410,
+    {f: 2, c: 29408}, 29433, 29431, 20495, 29463, 29450, 29468, 29462, 29469,
+    29492, 29487, 29481, 29477, 29502, {f: 2, c: 29518}, 40664, 29527, 29546,
+    29544, 29552, 29560, 29557, 29563, 29562, 29640, 29619, 29646, 29627,
+    29632, 29669, 29678, 29662, 29858, 29701, 29807, 29733, 29688, 29746,
+    29754, 29781, 29759, 29791, 29785, 29761, 29788, 29801, 29808, 29795,
+    29802, 29814, 29822, 29835, 29854, 29863, 29898, 29903, 29908, 29681,
+    29920, 29923, 29927, 29929, 29934, 29938, {f: 2, c: 29936}, 29944, 29943,
+    29956, 29955, 29957, 29964, 29966, 29965, 29973, 29971, 29982, 29990,
+    29996, 30012, 30020, 30029, 30026, 30025, 30043, 30022, 30042, 30057,
+    30052, 30055, 30059, 30061, 30072, 30070, {f: 2, c: 30086}, 30068, 30090,
+    30089, 30082, 30100, 30106, 30109, 30117, 30115, 30146, 30131, 30147,
+    30133, 30141, 30136, 30140, 30129, 30157, 30154, 30162, 30169, 30179,
+    30174, {f: 2, c: 30206}, 30204, 30209, 30192, 30202, {f: 2, c: 30194},
+    30219, 30221, 30217, 30239, 30247, {f: 3, c: 30240}, 30244, 30260, 30256,
+    30267, {f: 2, c: 30279}, 30278, 30300, 30296, {f: 2, c: 30305},
+    {f: 3, c: 30312}, 30311, 30316, 30320, 30322, [12136, 30326], 30328, 30332,
+    30336, 30339, 30344, 30347, 30350, 30358, 30355, {f: 2, c: 30361}, 30384,
+    30388, {f: 3, c: 30392}, 30402, 30413, 30422, 30418, 30430, 30433, 30437,
+    30439, 30442, 34351, 30459, 30472, 30471, 30468, 30505, 30500, 30494,
+    {f: 2, c: 30501}, 30491, {f: 2, c: 30519}, 30535, 30554, 30568, 30571,
+    30555, 30565, 30591, 30590, 30585, 30606, 30603, 30609, 30624, 30622,
+    30640, 30646, 30649, 30655, {f: 2, c: 30652}, 30651, 30663, 30669, 30679,
+    30682, 30684, 30691, 30702, 30716, 30732, 30738, 31014, 30752, 31018,
+    30789, 30862, 30836, 30854, 30844, 30874, 30860, 30883, 30901, 30890,
+    30895, 30929, 30918, 30923, 30932, 30910, 30908, 30917, 30922, 30956,
+    30951, 30938, 30973, 30964, 30983, 30994, 30993, 31001, 31020, 31019,
+    31040, 31072, 31063, 31071, 31066, 31061, 31059, 31098, 31103, 31114,
+    31133, 31143, 40779, 31146, 31150, 31155, {f: 2, c: 31161}, 31177, 31189,
+    31207, 31212, 31201, 31203, 31240, 31245, {f: 2, c: 31256}, 31264, 31263,
+    31104, 31281, 31291, 31294, 31287, 31299, 31319, 31305, {f: 2, c: 31329},
+    31337, 40861, 31344, 31353, 31357, 31368, 31383, 31381, 31384, 31382,
+    31401, 31432, 31408, 31414, 31429, 31428, 31423, 36995, 31431, 31434,
+    31437, 31439, 31445, 31443, {f: 2, c: 31449}, 31453, {f: 2, c: 31457},
+    31462, 31469, 31472, 31490, 31503, 31498, 31494, 31539, {f: 2, c: 31512},
+    31518, 31541, 31528, 31542, 31568, 31610, 31492, 31565, 31499, 31564,
+    31557, 31605, 31589, 31604, 31591, {f: 2, c: 31600}, 31596, 31598, 31645,
+    31640, 31647, 31629, 31644, 31642, 31627, 31634, 31631, 31581, 31641,
+    31691, 31681, 31692, 31695, 31668, 31686, 31709, 31721, 31761, 31764,
+    31718, 31717, 31840, 31744, 31751, 31763, 31731, 31735, 31767, 31757,
+    31734, 31779, 31783, 31786, 31775, 31799, 31787, 31805, 31820, 31811,
+    31828, 31823, 31808, 31824, 31832, 31839, 31844, 31830, 31845, 31852,
+    31861, 31875, 31888, 31908, 31917, 31906, 31915, 31905, 31912, 31923,
+    31922, 31921, 31918, 31929, 31933, 31936, 31941, 31938, 31960, 31954,
+    31964, 31970, 39739, 31983, 31986, 31988, 31990, 31994, 32006, 32002,
+    32028, 32021, 32010, 32069, 32075, 32046, 32050, 32063, 32053, 32070,
+    32115, 32086, 32078, 32114, 32104, 32110, 32079, 32099, 32147, 32137,
+    32091, 32143, 32125, 32155, 32186, 32174, 32163, 32181, 32199, 32189,
+    32171, 32317, 32162, 32175, 32220, 32184, 32159, 32176, 32216, 32221,
+    32228, 32222, 32251, 32242, 32225, 32261, 32266, 32291, 32289, 32274,
+    32305, 32287, 32265, 32267, 32290, 32326, 32358, 32315, 32309, 32313,
+    32323, 32311, 32306, 32314, 32359, 32349, 32342, 32350, {f: 2, c: 32345},
+    32377, 32362, 32361, 32380, 32379, 32387, 32213, 32381, 36782, 32383,
+    {f: 2, c: 32392}, 32396, 32402, 32400, {f: 2, c: 32403}, 32406, 32398,
+    {f: 2, c: 32411}, 32568, 32570, 32581, {f: 3, c: 32588}, 32592,
+    [12153, 32593], 32597, 32596, 32600, {f: 2, c: 32607}, {f: 2, c: 32616},
+    32615, 32632, 32642, 32646, 32643, 32648, 32647, 32652, 32660, 32670,
+    32669, 32666, 32675, 32687, 32690, 32697, 32686, 32694, 32696, 35697,
+    {f: 2, c: 32709}, 32714, 32725, 32724, 32737, 32742, 32745, 32755, 32761,
+    39132, 32774, 32772, 32779, [12158, 32786], {f: 2, c: 32792}, 32796, 32801,
+    32808, 32831, 32827, 32842, 32838, 32850, 32856, 32858, 32863, 32866,
+    32872, 32883, 32882, 32880, 32886, 32889, 32893, [12160, 32895], 32900,
+    32902, 32901, 32923, 32915, 32922, 32941, 20880, 32940, 32987, 32997,
+    32985, 32989, 32964, 32986, 32982, 33033, 33007, 33009, 33051, 33065,
+    33059, 33071, 33099, 38539, 33094, 33086, 33107, 33105, 33020, 33137,
+    33134, {f: 2, c: 33125}, 33140, 33155, 33160, 33162, 33152, 33154, 33184,
+    33173, 33188, 33187, 33119, 33171, 33193, 33200, 33205, 33214, 33208,
+    33213, 33216, 33218, 33210, 33225, 33229, 33233, 33241, 33240, 33224,
+    33242, {f: 2, c: 33247}, 33255, {f: 2, c: 33274}, 33278, {f: 2, c: 33281},
+    33285, 33287, 33290, 33293, 33296, 33302, 33321, 33323, 33336, 33331,
+    33344, 33369, 33368, 33373, 33370, 33375, 33380, 33378, 33384,
+    {f: 2, c: 33386}, 33326, 33393, 33399, [12171, 33400], 33406, 33421, 33426,
+    33451, 33439, 33467, 33452, 33505, 33507, 33503, 33490, 33524, 33523,
+    33530, 33683, 33539, 33531, 33529, 33502, 33542, 33500, 33545, 33497,
+    33589, 33588, 33558, 33586, 33585, 33600, 33593, 33616, 33605, 33583,
+    33579, {f: 2, c: 33559}, 33669, 33690, 33706, 33695, 33698, 33686, 33571,
+    33678, 33671, 33674, 33660, 33717, 33651, 33653, 33696, 33673, 33704,
+    33780, 33811, 33771, 33742, 33789, 33795, 33752, 33803, 33729, 33783,
+    33799, 33760, 33778, 33805, 33826, 33824, 33725, 33848, 34054, 33787,
+    33901, 33834, 33852, 34138, 33924, 33911, 33899, 33965, 33902, 33922,
+    33897, 33862, 33836, 33903, 33913, 33845, 33994, 33890, 33977, 33983,
+    33951, 34009, 33997, 33979, 34010, 34000, 33985, 33990, 34006, 33953,
+    34081, 34047, 34036, {f: 2, c: 34071}, 34092, 34079, 34069, 34068, 34044,
+    34112, 34147, 34136, 34120, 34113, 34306, 34123, 34133, 34176, 34212,
+    34184, 34193, 34186, 34216, 34157, 34196, 34203, 34282, 34183, 34204,
+    34167, 34174, 34192, 34249, 34234, 34255, 34233, 34256, 34261, 34269,
+    34277, 34268, 34297, 34314, 34323, 34315, 34302, 34298, 34310, 34338,
+    34330, 34352, 34367, [12172, 34381], 20053, 34388, 34399, 34407, 34417,
+    34451, 34467, {f: 2, c: 34473}, {f: 2, c: 34443}, 34486, 34479, 34500,
+    34502, 34480, 34505, 34851, 34475, 34516, 34526, 34537, 34540, 34527,
+    34523, 34543, 34578, 34566, 34568, 34560, 34563, 34555, 34577, 34569,
+    34573, 34553, 34570, 34612, 34623, 34615, 34619, 34597, 34601, 34586,
+    34656, 34655, 34680, 34636, 34638, 34676, 34647, 34664, 34670, 34649,
+    34643, 34659, 34666, 34821, 34722, 34719, 34690, 34735, 34763, 34749,
+    34752, 34768, 38614, 34731, 34756, 34739, 34759, 34758, 34747, 34799,
+    34802, 34784, 34831, 34829, 34814, {f: 2, c: 34806}, 34830, 34770, 34833,
+    34838, 34837, 34850, 34849, 34865, 34870, 34873, 34855, 34875, 34884,
+    34882, 34898, 34905, 34910, 34914, 34923, 34945, 34942, 34974, 34933,
+    34941, 34997, 34930, 34946, 34967, 34962, 34990, 34969, 34978, 34957,
+    34980, 34992, 35007, 34993, {f: 2, c: 35011}, 35028, {f: 2, c: 35032},
+    35037, 35065, 35074, 35068, 35060, 35048, 35058, 35076, 35084, 35082,
+    35091, 35139, 35102, 35109, {f: 2, c: 35114}, 35137, 35140, 35131, 35126,
+    35128, 35148, 35101, 35168, 35166, 35174, 35172, 35181, 35178, 35183,
+    35188, 35191, [12177, 35198], 35203, 35208, 35210, 35219, 35224, 35233,
+    35241, 35238, 35244, 35247, 35250, 35258, 35261, {f: 2, c: 35263}, 35290,
+    {f: 2, c: 35292}, 35303, 35316, 35320, 35331, 35350, 35344, 35340, 35355,
+    35357, 35365, 35382, 35393, 35419, 35410, 35398, 35400, 35452, 35437,
+    35436, 35426, 35461, 35458, 35460, 35496, 35489, 35473, {f: 2, c: 35493},
+    35482, 35491, 35524, 35533, 35522, 35546, 35563, 35571, 35559, 35556,
+    35569, 35604, 35552, 35554, 35575, 35550, 35547, 35596, 35591, 35610,
+    35553, 35606, 35600, 35607, 35616, 35635, 38827, 35622, 35627, 35646,
+    35624, 35649, 35660, 35663, 35662, 35657, 35670, 35675, 35674, 35691,
+    35679, 35692, 35695, 35700, 35709, 35712, 35724, 35726, {f: 2, c: 35730},
+    35734, {f: 2, c: 35737}, 35898, 35905, 35903, 35912, 35916, 35918, 35920,
+    [12183, 35925], 35938, 35948, [12184, 35960], 35962, 35970, 35977, 35973,
+    35978, {f: 2, c: 35981}, 35988, 35964, 35992, 25117, 36013, 36010, 36029,
+    {f: 2, c: 36018}, 36014, 36022, 36040, 36033, 36068, 36067, 36058, 36093,
+    {f: 2, c: 36090}, {f: 2, c: 36100}, 36106, 36103, 36111, 36109, 36112,
+    40782, 36115, 36045, 36116, 36118, 36199, 36205, 36209, 36211, 36225,
+    36249, 36290, 36286, 36282, 36303, 36314, 36310, 36300, 36315, 36299,
+    {f: 2, c: 36330}, 36319, 36323, 36348, {f: 2, c: 36360}, 36351,
+    {f: 2, c: 36381}, 36368, 36383, 36418, 36405, 36400, 36404, 36426, 36423,
+    36425, 36428, 36432, 36424, 36441, 36452, 36448, 36394, 36451, 36437,
+    36470, 36466, 36476, 36481, 36487, 36485, 36484, 36491, 36490, 36499,
+    36497, 36500, 36505, 36522, 36513, 36524, 36528, 36550, 36529, 36542,
+    36549, 36552, 36555, 36571, 36579, 36604, 36603, 36587, 36606, 36618,
+    36613, 36629, 36626, 36633, 36627, 36636, 36639, 36635, 36620, 36646,
+    36659, 36667, 36665, 36677, 36674, 36670, 36684, 36681, 36678, 36686,
+    36695, 36700, {f: 3, c: 36706}, 36764, 36767, 36771, 36781, 36783, 36791,
+    36826, 36837, 36834, 36842, 36847, 36999, 36852, 36869, {f: 2, c: 36857},
+    36881, 36885, 36897, 36877, 36894, 36886, 36875, 36903, 36918, 36917,
+    36921, 36856, {f: 4, c: 36943}, 36878, 36937, 36926, 36950, 36952, 36958,
+    36968, 36975, 36982, 38568, 36978, 36994, 36989, 36993, 36992, 37002,
+    37001, 37007, 37032, 37039, 37041, 37045, 37090, 37092, 25160, 37083,
+    37122, 37138, 37145, 37170, 37168, 37194, 37206, 37208, 37219, 37221,
+    37225, 37235, 37234, 37259, 37257, 37250, 37282, 37291, 37295, 37290,
+    37301, 37300, 37306, {f: 2, c: 37312}, 37321, 37323, 37328, 37334, 37343,
+    37345, 37339, 37372, {f: 2, c: 37365}, 37406, 37375, 37396, 37420, 37397,
+    37393, 37470, 37463, 37445, 37449, 37476, 37448, 37525, 37439, 37451,
+    37456, 37532, 37526, 37523, 37531, 37466, 37583, 37561, 37559, 37609,
+    37647, 37626, 37700, 37678, 37657, 37666, 37658, 37667, 37690, 37685,
+    37691, 37724, 37728, 37756, 37742, 37718, 37808, {f: 2, c: 37804}, 37780,
+    37817, {f: 2, c: 37846}, 37864, 37861, 37848, 37827, 37853, 37840, 37832,
+    37860, 37914, 37908, 37907, 37891, 37895, 37904, 37942, 37931, 37941,
+    37921, 37946, 37953, 37970, 37956, 37979, 37984, 37986, 37982, 37994,
+    37417, 38000, 38005, 38007, 38013, 37978, 38012, 38014, 38017, 38015,
+    38274, 38279, 38282, 38292, 38294, {f: 2, c: 38296}, 38304, 38312, 38311,
+    38317, 38332, 38331, 38329, 38334, 38346, 28662, 38339, 38349, 38348,
+    38357, 38356, 38358, 38364, 38369, 38373, 38370, 38433, 38440,
+    {f: 2, c: 38446}, 38466, 38476, 38479, 38475, 38519, 38492, 38494, 38493,
+    38495, 38502, 38514, 38508, 38541, 38552, 38549, 38551, 38570, 38567,
+    {f: 2, c: 38577}, 38576, 38580, [12202, 38582], 38584, [12203, 38585],
+    38606, 38603, 38601, 38605, 35149, 38620, 38669, 38613, 38649, 38660,
+    38662, 38664, 38675, 38670, 38673, 38671, 38678, 38681, 38692, 38698,
+    38704, 38713, {f: 2, c: 38717}, 38724, 38726, 38728, 38722, 38729, 38748,
+    38752, 38756, 38758, 38760, 21202, 38763, 38769, 38777, 38789, 38780,
+    38785, 38778, 38790, 38795, {f: 2, c: 38799}, 38812, 38824, 38822, 38819,
+    {f: 2, c: 38835}, 38851, 38854, 38856, [12209, 38859], 38876,
+    [12210, 38893], 40783, 38898, 31455, 38902, 38901, 38927, 38924, 38968,
+    38948, 38945, 38967, 38973, 38982, 38991, 38987, 39019, {f: 3, c: 39023},
+    39028, 39027, 39082, 39087, 39089, 39094, 39108, 39107, 39110, 39145,
+    39147, 39171, 39177, 39186, 39188, 39192, 39201, {f: 2, c: 39197}, 39204,
+    39200, 39212, 39214, {f: 2, c: 39229}, 39234, 39241, 39237, 39248, 39243,
+    {f: 2, c: 39249}, 39244, 39253, {f: 2, c: 39319}, 39333, {f: 2, c: 39341},
+    39356, 39391, 39387, 39389, 39384, 39377, {f: 2, c: 39405},
+    {f: 2, c: 39409}, 39419, 39416, 39425, 39439, 39429, 39394, 39449, 39467,
+    39479, 39493, 39490, 39488, 39491, 39486, 39509, 39501, 39515, 39511,
+    39519, 39522, 39525, 39524, 39529, 39531, 39530, 39597, 39600, 39612,
+    39616, 39631, 39633, {f: 2, c: 39635}, 39646, [12221, 39647],
+    {f: 2, c: 39650}, 39654, 39663, 39659, 39662, 39668, 39665, 39671, 39675,
+    39686, 39704, 39706, 39711, {f: 2, c: 39714}, [12222, 39717],
+    {f: 4, c: 39719}, 39726, [12223, 39727], [12224, 39730], 39748, 39747,
+    39759, {f: 2, c: 39757}, 39761, 39768, 39796, 39827, 39811, 39825,
+    {f: 2, c: 39830}, {f: 2, c: 39839}, 39848, 39860, 39872, 39882, 39865,
+    39878, 39887, {f: 2, c: 39889}, 39907, 39906, 39908, 39892, 39905, 39994,
+    39922, 39921, 39920, 39957, 39956, 39945, 39955, 39948, 39942, 39944,
+    39954, 39946, 39940, 39982, 39963, 39973, 39972, 39969, 39984, 40007,
+    39986, 40006, 39998, 40026, 40032, 40039, 40054, 40056, 40167, 40172,
+    40176, 40201, 40200, 40171, 40195, 40198, 40234, 40230, 40367, 40227,
+    40223, 40260, 40213, 40210, 40257, 40255, 40254, 40262, 40264,
+    {f: 2, c: 40285}, 40292, 40273, 40272, 40281, 40306, 40329, 40327, 40363,
+    40303, 40314, 40346, 40356, 40361, 40370, 40388, 40385, 40379, 40376,
+    40378, 40390, 40399, 40386, 40409, 40403, 40440, 40422, 40429, 40431,
+    40445, {f: 2, c: 40474}, 40478, [12228, 40565], 40569, 40573, 40577, 40584,
+    {f: 2, c: 40587}, 40594, 40597, 40593, 40605, [12230, 40613], 40617, 40632,
+    40618, 40621, 38753, 40652, {f: 3, c: 40654}, 40660, 40668, 40670, 40669,
+    40672, 40677, 40680, 40687, 40692, {f: 2, c: 40694}, [12235, 40697],
+    {f: 2, c: 40699}, [12236, 40701], {f: 2, c: 40711}, 30391, 40725, 40737,
+    40748, 40766, [12241, 40778], [12242, 40786], 40788, 40803,
+    {f: 3, c: 40799}, {f: 2, c: 40806}, 40812, 40810, 40823, 40818, 40822,
+    40853, [12244, 40860], [12245, 40864], 22575, 27079, 36953, 29796, 0,
+    {f: 76, c: 9472}, {f: 20, c: 9312}, {f: 10, c: 8544}, 13129, 13076, 0,
+    13133, 0, 13095, 0, 13110, 13137, 0, 13069, 13094, 0, 13099, 13130, 0,
+    {f: 3, c: 13212}, {f: 2, c: 13198}, 13252, 13217, 12317, 12319, 8470,
+    13261, 0, {f: 5, c: 12964}, {f: 2, c: 12849}, 12857, 13182, 13181, 13180,
+    8750, 8721, {s: 3}, 8735, 8895, 0, 0, 21854, {s: 7}, 167133, 0, 0, 28976,
+    0, 40407, {s: 4}, 64054, 0, 0, 22169, 15694, {s: 4}, 20448, 0, 0, 36544, 0,
+    194797, {s: 4}, 153716, 32363, 33606, 167670, {s: 3}, 40572, 0, 0, 26171,
+    0, 40628, {s: 4}, 26629, {s: 5}, 23650, 0, 194780, 0, 32353, 0, 0, 64070,
+    {s: 5}, 34083, 37292, {s: 7}, 34796, {s: 8}, 25620, 0, 0, 39506, {s: 4},
+    64074, 0, 194692, {s: 4}, 31774, {s: 6}, 64016, 25681, 0, 0, 63980, 22625,
+    39002, 0, 194679, {s: 3}, 31153, 0, 28678, {s: 9}, 22218, {s: 3}, 21085, 0,
+    28497, 37297, {s: 10}, 64106, {s: 6}, 38960, 0, 40629, {s: 9}, 33802,
+    63939, {f: 2, c: 63890}, 63897, 0, 34847, 194575, 0, 194771, 194584,
+    {s: 7}, 137754, 23643, {s: 4}, 25890, 0, 0, 26618, 0, 26766, 0, 148432,
+    194848, {s: 21}, 34110, {s: 15}, 30562, {s: 12}, 65075, 0,
+    {f: 2, c: 65073}, {s: 4}, 65072, {f: 2, c: 65077}, {f: 2, c: 65081}, 0, 0,
+    {f: 2, c: 65079}, {f: 2, c: 65087}, {f: 2, c: 65085}, {f: 4, c: 65089},
+    {f: 2, c: 65083}, {s: 41}, {f: 3, c: 12436}, 0, 0, 22099, {s: 41}, 65508,
+    65287, 65282, 0, 9665, 9655, 8681, 8679, 8678, 8680, 9634, 9831, 9825,
+    9828, 9826, 13216, 13218, {f: 2, c: 13220}, 13207, 8467, 13208, 13235,
+    13234, 13233, 13232, {f: 3, c: 13189}, 13259, 13200, 13268, 13206, 13090,
+    13078, 13080, 13077, 13059, 13091, 13143, 13122, 13113, 13115, 13056,
+    13105, 13127, 13086, 13098, 0, 13183, 8481, 9742, 12342, 12320, {s: 3},
+    {f: 9, c: 9352}, {f: 20, c: 9332}, 12881, {f: 10, c: 8560},
+    {f: 10, c: 12882}, {f: 26, c: 9372}, 12867, 12861, 12863, 12852, 12856,
+    12851, 12860, 12866, 12862, 12854, 12853, 12859, 12864, 12858, 12976,
+    12973, 12969, 12975, 12948, 12970, 12952, 12971, 12946, 12945, 12947,
+    12972, 12974, 12950, {s: 8}, {f: 3, c: 9131}, 0, {f: 3, c: 9127}, 0, 13260,
+    13061, 0, 0, 13215, 13219, 13222, 0, 0, 12958, {f: 2, c: 13192}, 13256,
+    8749, 0, 12848, {f: 6, c: 12842}, 12855, 12865, 10145, {s: 3}, 9673, 9824,
+    9829, 9827, 9830, {f: 4, c: 9728}, 9758, {f: 2, c: 9756}, 9759, 12953,
+    9450, {f: 2, c: 8554}, {s: 3}, {f: 8, c: 9601}, 9615, 9614, 9613, 9612,
+    9611, 9610, 9609, {f: 2, c: 9620}, {f: 2, c: 9581}, 9584, 9583, 9552, 9566,
+    9578, 9569, {f: 2, c: 9698}, 9701, 9700, 0, 0, {f: 3, c: 9585}, {s: 20},
+    20956, 29081, {f: 9, c: 10102}, {s: 3}, {f: 2, c: 8570}, {s: 3}, 8575,
+    8458, 8457, 0, 0, 12292, 8646, {f: 2, c: 8644}, 0, {f: 4, c: 12535}, 0, 0,
+    12957, {s: 3}, 13179, {s: 3}, 13107, 13134, {s: 30}, 32394, 35100, 37704,
+    37512, 34012, 20425, 28859, 26161, 26824, 37625, 26363, 24389,
+    [12033, 20008], 20193, 20220, 20224, 20227, 20281, 20310, 20370, 20362,
+    20378, 20372, 20429, 20544, 20514, 20479, 20510, 20550, 20592, 20546,
+    20628, 20724, 20696, 20810, 20836, 20893, 20926, 20972, 21013, 21148,
+    21158, 21184, 21211, 21248, 0, 21284, 21362, 21395, 21426, 21469, 64014,
+    21660, 21642, 21673, 21759, 21894, 22361, 22373, 22444, 22472, 22471,
+    64015, 0, 22686, 22706, 22795, 22867, 22875, 22877, 22883, 22948, 22970,
+    23382, 23488, 29999, 23512, 0, 23582, 23718, 23738, 23797, 23847, 23891, 0,
+    23874, 23917, {f: 2, c: 23992}, 24016, 24353, 24372, 24423, 24503, 24542,
+    24669, 24709, 24714, 24798, 24789, 24864, 24818, 24849, 24887, 24880,
+    24984, 25107, 25254, 25589, 25696, 25757, 25806, 25934, 26112, 26133,
+    26121, 26158, 0, 26148, 26213, 26199, 26201, 64018, 26227, 26265, 26272,
+    26290, 26303, 26362, 26382, 0, 26470, 26555, 26706, 26560, 0, 26692, 26831,
+    64019, 26984, 64020, 27032, 27106, 27184, 27243, 27206, 27251, 27262,
+    27362, 27364, 27606, 27711, 27740, 27782, 27759, 27866, 27908, 28039,
+    28015, 28054, 28076, 28111, 28152, 28146, 28156, 28217, 28252, 28199,
+    28220, 28351, 28552, 28597, 28661, 28677, 28679, 28712, 28805, 28843,
+    28943, 28932, 29020, {f: 2, c: 28998}, 0, 29121, 29182, 29361, 29374,
+    29476, 64022, 29559, 29629, 29641, 29654, 29667, 29650, 29703, 29685,
+    29734, 29738, 29737, 29742, 0, 29833, 29855, 29953, 30063, 30338, 30364,
+    30366, 30363, 30374, 64023, 30534, 21167, 30753, 30798, 30820, 30842,
+    31024, {f: 3, c: 64024}, 31124, 64027, 31131, 31441, 31463, 64028, 31467,
+    31646, 64029, 32072, 0, 32183, 32160, 32214, 32338, 32583, 32673, 64030,
+    33537, 33634, 33663, 33735, 33782, 33864, 33972, 34131, 34137, 34155,
+    64031, 34224, {f: 2, c: 64032}, 34823, 35061, 35346, 35383, 35449, 35495,
+    35518, 35551, 64034, 35574, 35667, 35711, 36080, 36084, 36114, 36214,
+    64035, 36559, 0, 64037, 36967, 37086, 64038, 37141, 37159, 37338, 37335,
+    37342, {f: 2, c: 37357}, {f: 2, c: 37348}, 37382, 37392, 37386, 37434,
+    37440, 37436, 37454, 37465, 37457, 37433, 37479, 37543, {f: 2, c: 37495},
+    37607, 37591, 37593, 37584, 64039, 37589, 37600, 37587, 37669, 37665,
+    37627, 64040, 37662, 37631, 37661, 37634, 37744, 37719, 37796, 37830,
+    37854, 37880, 37937, 37957, 37960, 38290, 0, 64041, 38557, 38575, 38707,
+    38715, 38723, 38733, 38735, [12205, 38737], 0, 38999, 39013,
+    {f: 2, c: 64042}, 39207, 64044, 39326, 39502, 39641, 39644, 39797, 39794,
+    39823, 39857, 39867, 39936, 40304, 40299, 64045, 40473, 40657, 0, 92,
+    {s: 634}, 8364, 8486, 0, 0, 64256, {f: 2, c: 64259}, 257, 299, 363, 275,
+    333, 256, 298, 362, 274, 332, {f: 4, c: 8539}, {f: 2, c: 8531}, 8304,
+    {f: 6, c: 8308}, {f: 10, c: 8320}, 461, 282, 0, 7868, 463, 0, 296, 465, 0,
+    467, 366, 360, 462, 283, 0, 7869, 464, 0, 297, 466, 0, 468, 367, 361, 593,
+    8049, 8048, 509, 0, 596, 0, 0, 601, 0, 0, 602, 0, 0, 603, 8051, 8050, 0,
+    331, 629, 652, 0, 0, 658, 643, 720, {s: 682}, {f: 10, c: 12832}, {s: 108},
+    {f: 4, c: 12892}, {f: 15, c: 12977}, {s: 50}, {f: 26, c: 9424},
+    {f: 26, c: 9398}, {s: 48}, {f: 47, c: 13008}, 0, {f: 10, c: 12928}, 12944,
+    {f: 6, c: 12938}, 0, 12959, {s: 6}, {f: 2, c: 12960}, 12955, 12954, 12963,
+    12962, 12951, 0, 12956, 12949, {s: 6}, 9676, {s: 11}, 10111,
+    {f: 10, c: 9451}, {s: 510}, 8414, {s: 815}, 13274, {s: 3}, 8448, 13250, 0,
+    0, 8453, 0, 13169, 0, 0, 13197, 13211, {s: 3}, {f: 2, c: 13271}, {s: 3},
+    {f: 2, c: 13057}, 13060, 13062, 0, 13064, 0, 13063, 13066, 0, 13065, 0,
+    13067, 0, 13068, {f: 6, c: 13070}, 0, 13079, 0, 13081, 0, {f: 4, c: 13082},
+    {f: 3, c: 13087}, 13092, 0, 13093, 0, 0, {f: 2, c: 13096}, 0, 13101, 0, 0,
+    {f: 3, c: 13102}, 13106, 0, 0, {f: 2, c: 13108}, 13116, {s: 3}, 13111, 0,
+    13112, 13114, 13117, 13121, {f: 3, c: 13118}, {f: 4, c: 13123}, 13128,
+    {f: 2, c: 13131}, {f: 2, c: 13135}, 0, 0, 13138, 13140, 0, 0, 13139,
+    {f: 2, c: 13141}, {s: 132}, 8501, 976, 8714, 8463, 0, 981, 987, 977, 0,
+    {f: 2, c: 9832}, 9836, {s: 5}, 12347, 0, {f: 3, c: 12339}, 8252, 8265,
+    {s: 5}, 8723, 0, 8771, {f: 2, c: 8818}, {s: 6}, {f: 2, c: 12312},
+    {f: 2, c: 65375}, {s: 10}, 9115, {f: 2, c: 9117}, 9120, {s: 4}, 9121,
+    {f: 2, c: 9123}, 9126, {s: 12}, [9116, 9119, 9122, 9125, 9130], {s: 8},
+    9986, 0, 0, 12349, 0, 12447, 0, 0, 8709, 8864, 8854, 8856, 8853, 8855,
+    {s: 4}, 9664, 9654, {s: 4}, 8656, 8596, {f: 2, c: 8600}, {f: 2, c: 8598},
+    8652, 8651, {s: 10}, 12336, 8967, {s: 8}, 10048, 10047, {s: 7}, 9643, 0,
+    9642, 0, 10010, {s: 12}, 9702, {s: 4}, 10070, {s: 379}, {f: 2, c: 65093},
+    {s: 679}, 64103, 64098, 32227, [12232, 40643], 28331, 64082, 64061, 64069,
+    64062, 27114, 28212, 64096, 64071, 64056, 64066, 64078, 34395, 64105,
+    64052, 64099, 25581, 25802, 30799, 64084, 63856, 64077, 64097, 64072,
+    64076, {f: 2, c: 64091}, 64081, 64067, 64090, 28041, 29376, 0, 194885,
+    64086, 64080, 64049, 64059, 24034, 64063, 64101, 21373, 64055, 64095,
+    24501, 64064, 0, 64083, 0, 64085, 64104, 64068, 64089, 26202, 64053, 64075,
+    64100, 64065, 64048, 0, 64057, 64051, 27493, 64058, 27599, 64050, 25150,
+    64079, 63773, 63964, 63798, 28122, 63952, 26310, 27511, 64087, 37706, 0,
+    37636, {s: 120}, 133390, {s: 120}, 35999, 11991, [11965, 158033], {s: 5},
+    37555, 38321, 0, 0, 194812, {s: 13}, 194965, {s: 8}, 194794, 0, 26478,
+    11974, 0, 194594, {s: 13}, 13314, 0, 0, 26083, {s: 4}, 134071, {s: 10},
+    171339, 0, 194611, 24378, {s: 8}, 11945, 0, 20465, {s: 7}, 63753, {s: 7},
+    11964, 0, 0, 194732, 26435, {s: 3}, 133732, 35329, 25142, 0, 0, 21555,
+    23067, {s: 3}, 25221, 0, 0, 194819, {s: 6}, 21567, {s: 9}, 27506, {s: 4},
+    29986, 19256, 0, 0, 24063, {s: 6}, 194827, 29626, 134047, {s: 3}, 194600,
+    0, 194849, {s: 5}, 194623, {s: 16}, 194675, {f: 2, c: 11916}, 23577,
+    {s: 3}, 131083, 23426, 194642, {s: 5}, 11997, [11999, 39136],
+    [11998, 169599], 14221, 0, [11927, 14586], 0, 194887, 0, [11909, 20155],
+    131490, {s: 7}, 13599, 0, 194738, 0, 0, [11971, 35200], {s: 4}, 31237,
+    {s: 4}, 35498, 0, 32085, 0, 28568, {s: 7}, 25591, 30246, {s: 4},
+    [11978, 163767], {s: 5}, 146686, {s: 5}, 13351, 0, 0, 33067, 0, 0, 194842,
+    {s: 5}, 11950, {s: 5}, 194714, {s: 3}, 194831, {s: 19}, 22305, 135741,
+    194586, 0, 64003, {s: 7}, 21534, 15240, 20839, {s: 4}, 63839, {s: 9},
+    20023, {s: 13}, [11946, 150804], 24421, 23020, 194658, 0, 24217, {s: 46},
+    13416, {s: 8}, 21200, {s: 9}, 26625, 0, 195024, 195039, {s: 5}, 153215, 0,
+    0, 11959, {s: 4}, 36534, 63775, {s: 3}, 63875, {s: 5}, 31867, 63906, 0,
+    63898, 0, [11961, 32770], 157360, {s: 4}, [11911, 132648], 0, 0, 131210,
+    194604, [11915, 13630], {s: 4}, 21589, 0, 22841, 0, 0, 23414, 194669,
+    23572, 14306, 23782, 0, 20040, 0, 0, 194742, {s: 4}, 158105, 25371, 0, 0,
+    26211, 0, 194779, 0, 0, 27126, 27014, {s: 3}, 27596, 0, 28183, 0, 0, 27818,
+    {s: 3}, [11942, 20012], 0, 0, 29935, 30069, 30188, 30286, 16305, 30570,
+    30633, {s: 6}, 31571, 0, 0, 16996, {s: 3}, 194924, 0, 0, 32328, {s: 5},
+    11955, {s: 4}, 33089, 17491, 0, [11966, 33401], [11967, 64094],
+    [11968, 64093], 0, 20857, 33626, {s: 3}, 17701, 0, 34292, 131248, {s: 4},
+    34429, 0, 13358, 35014, {s: 6}, 18406, {s: 8}, 36808, {s: 19}, 166279, 0,
+    0, 167447, 0, 0, 38969, {s: 6}, 39432, {s: 4}, 39903, {s: 10}, 148206,
+    {s: 5}, 21385, 0, 64017, 194785, 0, 146622, 132625, 0, {f: 2, c: 19972},
+    19999, 20011, {f: 2, c: 20015}, {f: 2, c: 20032}, 20036, [11907, 20058],
+    20095, 20109, 20118, 20153, 20176, 20192, 20221, 20223, 20235, 20245,
+    20320, 20283, 20297, 20308, 20346, {f: 2, c: 20349}, 20375, 20414, 20431,
+    20477, {f: 2, c: 20480}, 20496, 20507, 20519, 20526, 20567, 20582, 20586,
+    20539, 20623, 20630, 20636, 20684, 20710, 20713, 20719, 20744, 20747,
+    20752, 20763, 20766, 20831, 20897, 20924, 0, 20974, 20980, 20993,
+    [11913, 20994], 21011, 21065, 21089, 21094, 21139, 21192, 21232,
+    {f: 2, c: 21258}, 21310, 21324, 21323, 21345, 21356, 21419, 21466, 21478,
+    21493, 21543, 21581, 21606, 21611, 21620, 21645, 21654, 21665, 21677,
+    21689, 21695, 21702, 21709, 21774, 21803, 21813, 21834, 21856, 0, 21896,
+    21902, 22024, {f: 2, c: 22030}, 22071, 22079, 22089, 22091, 22095, 22118,
+    22121, 22127, {f: 2, c: 22129}, 22165, 22170, {f: 2, c: 22188}, 22193,
+    22217, 22237, 22244, 22282, 22293, 22307, 22319, {f: 2, c: 22323}, 22348,
+    22384, 22412, 22428, 22456, 22502, 22509, {f: 2, c: 22517}, 22527, 22537,
+    22560, 22578, 22652, 22656, 22697, 22734, 22736, 22740, 22746, 22761,
+    22796, 22820, 22831, 22881, 22893, 22986, 22994, 23005, {f: 2, c: 23011},
+    23044, 23052, 23075, 23111, 23125, 23139, 23149, 23166, 23198, 23207,
+    23212, 23219, 23264, 23296, 23321, 23333, 23341, 23361, 23420,
+    {f: 2, c: 23422}, 23434, [11919, 23587], 23595, 23600, 23651, 23657, 23676,
+    23755, 23762, 23796, 23844, 23846, 23875, 23878, 23882, 23954, 23956,
+    23961, 23968, 24024, 24032, 24056, 24064, 24082, {f: 2, c: 24084}, 24088,
+    24110, 24152, {f: 2, c: 24171}, 24232, 24234, {f: 2, c: 24254}, 0, 24274,
+    24327, 24334, {f: 2, c: 24348}, 24354, 24360, 24374, 24379, 24384,
+    [12089, 24400], 24408, 24420, 24457, 24476, 24487, 24484, 24495, 24504,
+    [11926, 24516], 24521, 24545, 24553, 24557, 24572, 24599, 24602, 24627,
+    24673, 24703, 24734, 24740, 24752, 24779, 24795, 24824, {f: 3, c: 24850},
+    24860, 24956, 24973, 24991, 25000, 25026, 25055, 25109, 25129, 25155,
+    25158, [11928, 25164], 25169, 25174, 25284, 25340, 25354, 25357, 25368,
+    25401, {f: 2, c: 25410}, 25445, 25460, 25469, 25476, 25479, 25488, 25502,
+    25553, 25564, 25609, 25616, 25634, 25684, 25691, 25709, 25723,
+    {f: 2, c: 25790}, 25829, 25847, 25851, 25860, 25878, 25881, 25927, 25959,
+    25985, 25989, 26050, 26096, 26098, 26156, 26188, {f: 2, c: 26203}, 26209,
+    26219, 0, 26276, 26312, 26348, 26373, 26387, 26419, 26440, 26444, 26486,
+    26491, 26544, 26546, 26617, 26583, 26585, 26608, 26668, {f: 2, c: 26672},
+    26715, 26738, 26741, 26746, 26756, 26789, 26802, 26832, 26838, 26856,
+    26861, {f: 2, c: 26864}, 26876, 26897, 26899, 26933, 26939, 26967, 26979,
+    26994, {f: 2, c: 27007}, 27046, 27053, 27063, {f: 2, c: 27094}, 27137,
+    27151, 27157, 27176, 27188, 27198, 27205, {f: 2, c: 27216}, 27222, 27227,
+    27267, 27273, 27281, {f: 3, c: 27293}, 27356, 27367, 27372, 27422, 27428,
+    27445, 27462, 27478, 27488, 27522, 27582, 27617, 27633, 27664, 27699,
+    [11937, 27701], 11938, 27737, 27766, 27771, 27781, 27797, 27804, 27856,
+    27860, 27862, 27872, {f: 2, c: 27883}, 27886, 27914, 27918, 27921, 27950,
+    27991, 27998, 28005, 28034, 28095, 28100, 28106, 28118, 28137, 28194,
+    28241, 28359, 28362, 28366, 28413, 28442, 28458, 28463, 28467, 28506,
+    28510, 28514, 28541, 28555, 28557, 28562, 28564, 28570, {f: 2, c: 28583},
+    28598, 28634, 28638, 0, 28729, 28732, 0, 28756, {f: 2, c: 28765}, 28772,
+    [11939, 28780], 28798, 28801, 28821, 28855, {f: 2, c: 28883}, 28888, 28892,
+    28935, 28960, 28977, 29002, 29010, 29024, 29049, 29074, 0, 29131, 29139,
+    29142, 29184, 29213, 29227, 29240, 29249, 29267, {f: 2, c: 29269}, 29276,
+    29325, [11944, 29357], 29364, 29383, 29435, {f: 2, c: 29444}, 29480, 29489,
+    29507, 29548, 29564, 29571, {f: 2, c: 29573}, 29589, {f: 3, c: 29598},
+    29606, 29611, 29621, 29623, 29628, 29647, 29657, 29673, 29684, 29693,
+    29700, 29706, {f: 2, c: 29722}, 29732, 29736, 29740, {f: 3, c: 29743},
+    29753, 29764, 29767, 29771, 29773, 29777, 29783, 29798, 29803, 29809,
+    29824, {f: 3, c: 29829}, 29840, 29848, 29852, 29856, 29859, 29864, 29867,
+    29877, 29887, 29896, 29914, 29918, 30030, 30073, 30081, 30096,
+    [12135, 30098], 30099, 30132, 30180, 30201, 30208, 30218, {f: 2, c: 30229},
+    30233, 30238, 30253, 30261, 30275, 30283, 30309, 30317, 30319, 30321,
+    30324, {f: 2, c: 30372}, 30405, 30412, 30444, 30460, 30516, 30518, 30556,
+    {f: 2, c: 30559}, 30578, 30589, 30613, 30634, 30694, 30704, 30708, 30726,
+    30754, {f: 2, c: 30765}, 30768, 30773, 30824, 30878, 30920, 30924, 30926,
+    30948, {f: 2, c: 30944}, 30962, 30967, 30971, 31025, 0, [11949, 31035],
+    31037, 31045, {f: 2, c: 31067}, 31115, 31126, 31128, [12145, 31160], 31163,
+    31178, 31194, 31235, 31241, 31249, 31262, 31277, 31289, 31301, 31308,
+    31325, 0, 31341, 31352, 31392, 31395, 31411, {f: 2, c: 31419}, 31430,
+    31495, 31508, 31527, 31537, 31559, 31566, 31584, 31593, 31597, 31602,
+    31633, 31663, 31703, 31705, 31755, 31759, 31776, 31782, 31793, 31798,
+    31825, 31833, 31847, 31854, 31856, 31932, 31935, {f: 2, c: 31944}, 31959,
+    31961, 31965, 31979, {f: 3, c: 32007}, 32019, 32029, 32035, 32065, 32083,
+    32089, 32093, 32122, 32134, {f: 2, c: 32139}, 32204, 32235, 32241, 32249,
+    32264, 32273, 32277, 32288, 32327, 32354, 32366, 32371, 32397, 32401,
+    32408, 32580, 32591, [11947, 11954, 32594], [11953, 32595], 32609, 32657,
+    32703, 32718, 32735, 32741, 32748, {f: 2, c: 32750}, 32762, 32782, 32785,
+    32788, 32804, 32806, 32826, 32828, 32864, 32881, 32885, 32926, 32934,
+    32939, {f: 2, c: 32983}, 33046, 33048, 33082, 33098, 33100, 33153, 33156,
+    33204, 33231, 33273, 33283, 33313, 33330, 33332, 33350, 33355, 33359,
+    33422, 33454, 33463, 33470, 33478, 33534, 33603, 33617, 33621, 33670,
+    33677, 33682, 33688, 33705, {f: 2, c: 33727}, 33770, 33807, 33809, 33866,
+    33910, 33960, 33967, 33984, 33986, 34032, 34045, 34060, 34100, 34142,
+    34191, 34231, 34254, 34221, 34322, 34345, 34386, 34403, 34412, 34415,
+    34426, 34445, 34449, 34456, {f: 2, c: 34471}, 34554, 34557, 34571, 34579,
+    34585, 34590, 34600, 34622, 34673, 34696, 34713, {f: 2, c: 34732}, 34741,
+    34774, 34795, 34797, 34817, 0, 34822, 34827, 34836, 34844, 34902, 34911,
+    [11970, 34916], 34968, 34986, {f: 2, c: 35005}, 35018, 35026, 35035,
+    {f: 2, c: 35056}, 35078, {f: 3, c: 35096}, 35111, 35120, 35134, 35195,
+    35284, 35286, 35301, 35313, 35335, 35343, 35349, 35362, 35406, 35455,
+    35572, 35615, 35639, {f: 2, c: 35651}, 35668, 35740, 35742, 35911, 35924,
+    35955, 36004, 36057, 36065, 36088, 36094, 36123, 36201, 36204, 36228,
+    36237, 36245, 36262, 36294, 36302, 36324, 36332, 36384, 36427, 36460,
+    36464, 36474, 36498, 36526, 36531, 36561, 36564, 36601, 36631, 36662,
+    36774, [12193, 36789], [11981, 36790], 0, 36832, 36836, 36854, 36866,
+    36908, 36932, 37000, 37013, 37017, 37019, 37026, 37044, 37079, 37085,
+    37108, 37143, 37148, 37169, 37178, 37181, 37192, 37211, 37217, 37220,
+    37262, 37278, 37288, {f: 2, c: 37293}, 37298, 37308, 37360, 37367, 37371,
+    37383, 37416, 37427, 37432, 37443, 37447, 37455, 37472, 37570,
+    {f: 2, c: 37579}, 37599, 37645, 37653, 37663, 37671, 37703, 37714, 0,
+    37738, 37741, 37787, 37818, 37801, 37825, 37834, 37858, 37882, 37885,
+    37903, 37940, 37951, 37973, 37995, 38002, [11986, 38264], 38310, 38313, 0,
+    38324, 38333, 38362, [11983, 11990, 38429], 38465, 38488, 38532, 38564,
+    38569, 38610, 195060, 38622, 38633, 38641, 38658, 38665, 38746, 38755,
+    38766, 38771, 38810, 38818, {f: 2, c: 38837}, 38873, 38878, 38900, 38922,
+    38926, 38942, 38947, 38955, 38974, {f: 2, c: 38994}, 39001, 39020, 39096,
+    39098, 39103, 39112, 39141, {f: 2, c: 39218}, 39232, 39245, 39260, 39263,
+    39345, {f: 2, c: 39353}, 39369, 39426, 39446, 39460, 39463,
+    {f: 2, c: 39469}, 39478, 39480, 39498, 39510, {f: 2, c: 39605}, 39673,
+    39683, 39712, {f: 2, c: 39731}, 39795, 39801, 39847, 39873, 39879, 39895,
+    39911, 39915, 39927, 39930, 39933, 39947, 39975, 39978, 39990, 40001,
+    40019, 40035, 40048, 40055, 40194, 40258, 40263, 40291, 40297, 40316,
+    40318, 40333, 40369, 40387, 40391, 40406, 40415, 40427, 40436, 40469,
+    40477, 40612, 40616, 40620, 40679, 40686, 40720, 40722, 40727, 40729,
+    40751, 40759, 40761, 40769, 40773, 40791, 40808, 40817, 40821, 40848,
+    40852, 40866, 0, 13317, 194564, 22048, 24267, 11925, 0, 144954, 0, 28665,
+    28390, 29107, [11940, 64073], {s: 4}, [11980, 64102], 0, 23986, 0, 20435,
+    20697, 20720, 20931, 22134, 27220, 27905, 28112, 28226, 28377, 29668,
+    29729, 30060, 30801, 34805, 144382, 29608, 15091, 13531, 17420, 16010, 0,
+    0, 19432, 0, 16090, 15138, 0, 17786, 16531, 0, 18021, 16643, 17043, 18094,
+    13448, 140809, {f: 3, c: 63584}, 63610, 63615, {s: 23}, {f: 2, c: 8836},
+    {f: 2, c: 8842}, 8713, 0, {f: 2, c: 8965}, {s: 9}, {f: 2, c: 8741},
+    {s: 14}, 8802, 0, 8773, 8776, {f: 2, c: 8822}, {s: 4}, 8487, {s: 209},
+    {f: 2, c: 8922}, 8533, 8984, {f: 2, c: 7742}, {f: 2, c: 504}, 470, 472,
+    474, 476, 260, 728, 317, 346, 350, 356, 377, 379, 261, 731, 318, 347, 711,
+    351, 357, 378, 733, 380, 340, 258, 313, 262, 268, 280, 270, 323, 327, 336,
+    344, 368, 354, 341, 259, 314, 263, 269, 281, 271, 273, 324, 328, 337, 345,
+    369, 355, 729, 264, 284, 292, 308, 348, 364, 265, 285, 293, 309, 349, 365,
+    625, 651, 638, 620, 622, 633, 648, 598, 627, 637, 642, 656, 635, 621, 607,
+    626, 669, 654, 609, 624, 641, 295, 661, 660, 614, 664, 450, 595, 599, 644,
+    608, 403, 616, 649, 600, 604, 606, 592, 623, 650, 612, 594, 653, 613, 674,
+    673, 597, 657, 634, 615, 865, 712, 716, 721, 8255, 783, {f: 5, c: 741}, 0,
+    0, 805, 812, 825, 796, {f: 2, c: 799}, 829, 809, 815, 734, 804, 816, 828,
+    820, {f: 2, c: 797}, {f: 2, c: 792}, 810, {f: 2, c: 826}, 794, {s: 3},
+    {f: 2, c: 610}, 618, 628, 630, 632, 640, 655, 665, 668, 671, 688, 690, 695,
+    704, {f: 2, c: 736}, {s: 6}, 8862, {s: 287}, 12348, 12543, 0,
+    {f: 2, c: 12310}, 9838, 9835, {f: 2, c: 10548}, 10687, 0, 12448, 0,
+    {f: 2, c: 10746}, {s: 13}, 962, {f: 10, c: 9461}, {f: 2, c: 9750}, 9649,
+    {f: 10, c: 12784}, 0, {f: 6, c: 12794}, {f: 15, c: 9150}, 0, 0, 10003, 0,
+    9251, 9166, {f: 4, c: 9680}, {f: 2, c: 8263}, 0, 8273, 8258,
+    {f: 16, c: 12688}, {s: 13}, {f: 2, c: 9136}, {f: 12, c: 9842},
+    {f: 2, c: 12441}, 8413, {s: 450}, 20296, 20319, 20330, 20332, 20494, 20504,
+    20545, 20722, 20688, 20742, 20739, 20789, 20821, 20823, 13493, 20938,
+    20962, 21079, 21196, 21206, 21243, 21276, 21347, 21405, 21522, 21631,
+    21640, 21840, 21889, 21933, 21966, 22075, 22174, 22185, 22195, 22391,
+    22396, 135963, 22479, 22500, 22628, 22665, 136302, 22738, 22752, 34369,
+    22923, 22930, 22979, 23059, 23143, 23159, 23172, 23236, 137405, 23421,
+    23443, 23570, 64060, 136884, 23674, 23695, 23711, 23715, 23722, 23760,
+    138804, 23821, 23879, 23937, 23972, 23975, 24011, 24158, 24313, 24320,
+    24322, 24355, 24381, 24404, 24445, 24589, 24596, 24600, 24629, 24647,
+    24733, 24788, 24797, 24875, 25020, 25017, 25122, 25178, 25199, 25302,
+    25468, 25573, 25721, 25796, 25808, 25897, 26013, 26170, 26146, 26155,
+    26160, 26163, 26184, 143812, {f: 2, c: 26231}, 26253, 26299, 26331, 26344,
+    26439, 26497, 26515, 26520, 26523, 26620, 26653, 26787, 26890, 26953,
+    144836, 26946, 26980, 27045, 27087, 15286, 15299, 27113, 27125, 145215,
+    27195, 145251, 27284, 27301, 15375, 27419, 27436, 27495, 27561, 27565,
+    27607, 27647, 27653, 27764, 27800, 27899, 27846, 27953, 27961, 27967,
+    27992, 28052, 28074, 28123, 28125, 28228, 28254, 28337, 28353, 28432,
+    28505, 28513, 28542, 28556, 28576, 28604, 28615, 28618, 28656, 28750,
+    28789, 28836, 28900, 28971, 28958, 28974, 29009, 29032, 29061, 29063,
+    29114, 29124, 29205, 15935, 29339, 149489, 29479, 29520, 29542, 29602,
+    29739, 29766, 29794, 29805, 29862, 29865, 29897, 29951, 29975, 16242,
+    30158, 30210, 30216, 30308, 30337, 30365, 30378, 30390, 30414, 30420,
+    30438, 30449, 30474, 30489, {f: 2, c: 30541}, 30586, 30592, 30612, 30688,
+    152718, 30787, 30830, 30896, 152846, 30893, 30976, 31004, 31022, 31028,
+    31046, 31097, 31176, 153457, 31188, 31198, 31211, 31213, 31365, 154052,
+    31438, 31485, 31506, 31533, 31547, 31599, 31745, 31795, 155041, 31853,
+    31865, 31887, 31892, 31904, 31957, 32049, 32092, 32131, 32166, 32194,
+    32296, 32663, 32731, 32821, 32823, 32970, 32992, 33011, 33120,
+    {f: 2, c: 33127}, 33133, 33211, 33226, 33239, 17499, 33376, 33396, 158463,
+    33441, {f: 2, c: 33443}, 33449, 33471, 33493, 33533, 33536, 33570, 33581,
+    33594, 33607, 33661, 33703, 33743, 33745, 33761, 33793, 33798, 33887,
+    33904, 33907, 33925, 33950, 33978, 159296, 34098, 34078, 34095, 34148,
+    34170, 34188, 34210, 34251, 34285, 34303, {f: 2, c: 34308}, 34320, 159988,
+    34328, 34360, 34391, 34402, 17821, 34421, 34488, 34556, 34695, 17898,
+    34826, 34832, 35022, 161412, 35122, 35129, 35136, 35220, 35318, 35399,
+    35421, 35425, 35445, 35536, 35654, 35673, 35689, 35741, 35913, 35944,
+    36271, 36305, 36311, 36387, 36413, 36475, 164471, 18500, 36602, 36638,
+    36653, 36692, 164813, 36840, 36846, 36872, 36909, 37015, 37043, 37054,
+    {f: 2, c: 37060}, 37063, 37103, 37140, 37142, {f: 2, c: 37154}, 37167,
+    37172, 37251, 37361, 37705, {f: 2, c: 37732}, 37795, 37855, 37892, 37939,
+    37962, 37987, 38001, 38286, 38303, 38316, 38326, 38347, 38352, 38355,
+    18864, 38366, 38565, 38639, 38734, 38805, 38830, 38842, 38849, 38857,
+    38875, 38998, 39143, 39256, 39427, 39617, 39619, 39630, 39638, 39682,
+    39688, 19479, 39725, 39774, 39782, 39812, 39818, 39838, 39886, 39909,
+    39928, 39971, {f: 2, c: 40015}, 40037, {f: 2, c: 40221}, 40259, 40274,
+    40330, 40342, 40384, 40364, 40380, 172432, 40423, 40455, 40606, 40623,
+    40855, 131209, 19970, 19983, 19986, 20009, 20014, 20039, 131234, 20049,
+    13318, 131236, 20073, 20125, 13356, 20156, 20163, 20168, 20203, 20186,
+    20209, 20213, 20246, 20324, 20279, 20286, 20312, 131603, {f: 2, c: 20343},
+    20354, 20357, 20454, 20402, 20421, 20427, 20434, 13418, 20466, 20499,
+    20508, 20558, 20563, 20579, 20643, 20616, {f: 2, c: 20626}, 20629, 20650,
+    131883, 20657, {f: 2, c: 20666}, 20676, 20679, 20723, 131969, 20686,
+    131953, 20692, 20705, 13458, 132089, 20759, 132170, 20832, 132361, 20851,
+    20867, 20875, 13500, 20888, 20899, 20909, 13511, 132566, 20979, 21010,
+    21014, 132943, 21077, 21084, 21100, 21111, 21124, 21122, 133127, 21144,
+    133178, 21156, {f: 2, c: 21178}, 21194, 21201, 133305, 21239, 21301, 21314,
+    133500, 133533, 21351, 21370, 21412, 21428, 133843, 21431, 21440, 133917,
+    {f: 2, c: 13661}, 21461, 13667, 21492, 21540, 21544, 13678, 21571, 21602,
+    21612, 21653, 21664, 21670, 21678, 21687, 21690, 21699, 134469, 21740,
+    21743, 21745, 21747, {f: 2, c: 21760}, 21769, 21820, 21825, 13734, 21831,
+    13736, 21860, 134625, 21885, 21890, 21905, 13765, 21970, 134805, 134765,
+    21951, 21961, 21964, 21969, 21981, 13786, 21986, 134756, 21993, 22056,
+    135007, 22023, 22032, 22064, 13812, 22077, 22080, 22087, 22110, 22112,
+    22125, 13829, 22152, 22156, 22173, 22184, 22194, 22213, 22221, 22239,
+    22248, {f: 2, c: 22262}, 135681, 135765, 22313, 135803, {f: 2, c: 22341},
+    22349, 135796, 22376, 22383, {f: 3, c: 22387}, 22395, 135908, 135895,
+    22426, {f: 2, c: 22429}, 22440, 22487, 135933, 22476, 135990, 136004,
+    22494, 22512, 13898, 22520, 22523, 22525, 22532, 22558, 22567, 22585,
+    136132, 22601, 22604, 22631, {f: 2, c: 22666}, 22669, {f: 2, c: 22671},
+    22676, 22685, 22698, 22705, 136301, 22723, 22733, 22754, {f: 2, c: 22771},
+    {f: 2, c: 22789}, 22797, 22804, 136663, 13969, 22845, 13977, 22854, 13974,
+    158761, 22879, 136775, {f: 2, c: 22901}, 22908, 22943, 22958, 22972, 22984,
+    22989, 23006, 23015, 23022, 136966, 137026, 14031, 23053, 23063, 23079,
+    23085, 23141, 23162, 23179, 23196, {f: 2, c: 23199}, 23202, 23217, 23221,
+    23226, 23231, 23258, 23260, 23269, 23280, 23278, 23285, 23304, 23319,
+    23348, 23372, 23378, 23400, 23407, 23425, 23428, 137667, 23446, 23468,
+    {f: 2, c: 14177}, 23502, 23510, 14188, 14187, 23537, 23549, 14197, 23555,
+    23593, 138326, 23647, {f: 2, c: 23655}, 23664, 138541, 138565, 138616,
+    138594, 23688, 23690, 14273, 138657, 138652, 23712, 23714, 23719, 138642,
+    23725, 23733, 138679, 23753, 138720, 138803, 23814, 23824, 23851, 23837,
+    23840, 23857, 23865, 14312, 23905, 23914, 14324, 23920, 139038, 14333,
+    23944, 14336, 23959, 23984, 23988, 139126, 24017, 24023, 139258, 24036,
+    24041, 14383, 14390, 14400, 24095, 24126, 24137, 14428, 24150, 14433,
+    {f: 2, c: 24173}, 139643, 24229, 24236, 24249, 24262, 24281, 140062, 24317,
+    24328, 140205, 24350, 24391, 24419, 24434, 24446, 24463, 24482, 24519,
+    24523, {f: 3, c: 24530}, 24546, {f: 2, c: 24558}, 24563, 14615, 24610,
+    24612, 14618, 24652, 24725, 24744, 141043, 24753, 24766, 24776, 24793,
+    24814, 24821, 24848, 24857, 24862, 24890, 14703, 24897, 24902, 24928,
+    141403, {f: 2, c: 24978}, 24983, 24997, 25005, 141483, 25045, 25053, 25077,
+    141711, 25123, 25170, 25185, 25188, 25211, 25197, 25203, 25241, 25301,
+    142008, 25341, 25347, 25360, {f: 2, c: 142159}, 25394, 25397,
+    {f: 2, c: 25403}, 25409, 25412, 25422, 142150, 25433, 142365, 142246,
+    25452, 25497, 142372, 25492, 25533, {f: 2, c: 25556}, 25568,
+    {f: 2, c: 25579}, 25586, 25630, 25637, 25641, 25647, 25690, 25693, 25715,
+    25725, 25735, 25745, 25759, {f: 2, c: 25803}, 25813, 25815, 142817, 25828,
+    25855, 14958, 25871, 25876, 14963, 25886, 25906, 25924, 25940, 25963,
+    25978, 25988, 25994, 26034, 26037, 26040, 26047, 26057, 26068, 15062,
+    26105, 26108, 26116, 26120, 26145, 26154, 26181, 26193, 26190, 15082,
+    143811, 143861, 143798, 26218, {f: 2, c: 26220}, 26235, 26240, 26256,
+    26258, 15118, 26285, 26289, 26293, 15130, 15132, 15063, 26369, 26386,
+    144242, 26393, 144339, 144338, 26445, 26452, 26461, 144336, 144356, 144341,
+    26484, 144346, 26514, 144351, 33635, 26640, 26563, 26568, 26578, 26587,
+    26615, 144458, 144465, 144459, 26648, 26655, 26669, 144485, 26675, 26683,
+    26686, 26693, 26697, 26700, 26709, 26711, 15223, 26731, 26734, 26748,
+    26754, 26768, 26774, 15213, {f: 3, c: 26776}, 26780, {f: 2, c: 26794},
+    26804, 26811, 26875, 144612, 144730, 26819, 26821, 26828, 26841,
+    {f: 2, c: 26852}, 26860, 26871, 26883, 26887, 15239, 144788, 15245, 26950,
+    26985, 26988, 27002, 27026, 15268, 27030, 27056, 27066, 27068, 27072,
+    27089, 144953, 144967, 144952, 27107, {f: 2, c: 27118}, 27123, 15309,
+    27124, 27134, 27153, 27162, 27165, 145180, {f: 2, c: 27186}, 27199, 27209,
+    27258, 27214, 27218, 27236, 145164, 27275, 15344, 27297, 145252, 27307,
+    27325, 27334, 27348, 27344, 27357, 145407, 145383, {f: 3, c: 27377}, 27389,
+    145444, 27403, {f: 3, c: 27407}, 145469, 27415, 15398, 27439, 27466, 27480,
+    27500, 27509, [11934, 27514], 27521, 27547, 27566, 146072, 27581,
+    {f: 3, c: 27591}, 27610, {f: 2, c: 27622}, 27630, 27650, 27658, 27662,
+    27702, 146559, 27725, 27739, 27757, 27780, 27785, 15555, 27796, 27799,
+    27821, 27842, 15570, 27868, 27881, 27885, 146688, 27904, 27940,
+    {f: 2, c: 27942}, 27751, 27951, 27964, 27995, 28000, 28016,
+    {f: 2, c: 28032}, 28042, 28045, 28049, 28056, 146752, 146938, 146937,
+    146899, 28075, 28078, 28084, 28098, 27956, 28104, 28110, 28127, 28150,
+    28214, 28190, 15633, 28210, {f: 2, c: 28232}, {f: 2, c: 28235}, 28239,
+    {f: 2, c: 28243}, 28247, 28259, 15646, 28307, 28327, 28340, 28355, 28469,
+    28395, 28409, 28411, 28426, 28428, 28440, 28453, 28470, 28476, 147326,
+    28498, 28503, 28512, 28520, 28560, 28566, 28606, 28575, 28581, 28591,
+    15716, {f: 2, c: 28616}, 28649, 147606, 28668, 28672, 28682, 28707, 147715,
+    28730, 28739, 28743, 28747, 15770, 28773, 28777, 28782, 28790, 28806,
+    28823, 147910, 28831, 28849, 147966, 28908, 28874, 28881, 28931, 28934,
+    28936, 28940, 15808, 28975, 29008, 29011, 29022, 15828, 29078, 29056,
+    29083, 29088, 29090, {f: 2, c: 29102}, 148412, 29145, 29148, 29191, 15877,
+    29236, 29241, 29250, 29271, 29283, 149033, {f: 2, c: 29294}, 29304, 29311,
+    29326, 149157, 29358, 29360, 29377, 15968, 29388, 15974, 15976, 29427,
+    29434, 29447, 29458, {f: 2, c: 29464}, 16003, 29497, 29484, 29491, 29501,
+    29522, 16020, 29547, 149654, {f: 2, c: 29550}, 29553, 29569, 29578, 29588,
+    29592, 29596, 29605, 29625, 29631, 29637, 29643, 29665, 29671, 29689,
+    29715, 29690, 29697, 29779, 29760, 29763, 29778, 29789, 29825, 29832,
+    150093, 29842, 29847, 29849, 29857, 29861, 29866, 29881, 29883, 29882,
+    29910, 29912, 29931, 150358, 29946, 150383, 29984, 29988, 29994, 16215,
+    150550, {f: 2, c: 30013}, 30016, 30024, 30032, 30034, 30066, 30065, 30074,
+    {f: 2, c: 30077}, 30092, 16245, 30114, 16247, 30128, 30135,
+    {f: 2, c: 30143}, 30150, 30159, 30163, 30173, {f: 2, c: 30175}, 30183,
+    30190, 30193, 30211, 30232, 30215, 30223, 16302, 151054, 30227,
+    {f: 2, c: 30235}, 151095, 30245, 30248, 30268, 30259, 151146, 16329, 30273,
+    151179, 30281, 30293, 16343, 30318, 30357, 30369, 30368, {f: 2, c: 30375},
+    30383, 151626, 30409, 151637, 30440, 151842, 30487, 30490, 30509, 30517,
+    151977, 16441, 152037, 152013, 30552, 152094, 30588, 152140, 16472, 30618,
+    30623, 30626, 30628, {f: 2, c: 30686}, 30692, 30698, 30700, 30715, 152622,
+    30725, 30729, 30733, 30745, 30764, 30791, 30826, 152793, 30858, 30868,
+    30884, 30877, 30879, 30907, 30933, 30950, {f: 2, c: 30969}, 30974, 152999,
+    30992, 31003, 31013, 31050, 31064, 16645, 31079, 31090, 31125, 31137,
+    31145, 31156, 31170, 31175, {f: 2, c: 31180}, 31190, 16712, 153513, 153524,
+    16719, 31242, 31253, 31259, 16739, 31288, 31303, 31318, 31321, 31324,
+    31327, 31335, 31338, 31349, 31362, 31370, 31376, 31404, 154068, 16820,
+    31417, 31422, 16831, 31436, 31464, 31476, 154340, 154339, 154353, 31549,
+    31530, {f: 2, c: 31534}, 16870, 16883, 31615, 31553, 16878, 31573, 31609,
+    31588, 31590, 31603, 154546, 16903, 31632, 31643, 16910, 31669, 31676,
+    31685, 31690, 154699, 154724, 31700, 31702, 31706, 31722, 31728, 31747,
+    31758, 31813, 31818, 31831, 31838, 31841, 31849, 31855, 155182, 155222,
+    155237, 31910, 155234, {f: 2, c: 31926}, 155352, 31940, 155330, 31949,
+    155368, 155427, 31974, 155484, 31989, 32003, 17094, 32018, 32030, 155616,
+    155604, {f: 2, c: 32061}, 32064, 32071, 155660, 155643, 17110, 32090,
+    32106, 32112, 17117, 32127, 155671, 32136, 32151, 155744, 32157, 32167,
+    32170, 32182, 32192, 32215, 32217, 32230, 17154, 155885, 64088, 32272,
+    32279, 32285, 32295, 32300, 32325, 32373, 32382, {f: 2, c: 32390}, 17195,
+    32410, 17219, 32572, 32571, 32574, 32579, 13505, 156272, 156294,
+    {f: 2, c: 32611}, 32621, {f: 2, c: 32637}, 32656, 20859, 146702, 32662,
+    32668, 32685, 156674, 32707, 32719, 32739, 32754, 32778, 32776, 32790,
+    32812, 32816, 32835, 32870, 32891, 32921, 32924, 32932, 32935, 32952,
+    157310, 32965, 32981, 32998, 33037, 33013, 33019, 17390, 33077, 33054,
+    17392, 33060, 33063, 33068, 157469, 33085, 17416, 33129, 17431, 17436,
+    33157, 17442, 33176, 33202, 33217, 33219, 33238, 33243, 157917, 33252,
+    157930, 33260, 33277, 33279, 158063, 33284, 158173, 33305, 33314, 158238,
+    33340, 33353, 33349, 158296, 17526, 17530, 33367, 158348, 33372, 33379,
+    158391, 17553, 33405, 33407, 33411, 33418, 33427, {f: 2, c: 33447}, 33458,
+    33460, 33466, 33468, 33506, 33512, 33527, {f: 2, c: 33543}, 33548, 33620,
+    33563, 33565, 33584, 33596, 33604, 33623, 17598, 17620, 17587,
+    {f: 2, c: 33684}, 33691, 33693, 33737, 33744, 33748, 33757, 33765, 33785,
+    33813, 158835, 33815, 33849, 33871, {f: 2, c: 33873}, {f: 2, c: 33881},
+    33884, 158941, 33893, 33912, 33916, 33921, 17677, 33943, 33958, 33982,
+    17672, {f: 2, c: 33998}, 34003, 159333, 34023, 34026, 34031, 34033, 34042,
+    34075, {f: 2, c: 34084}, 34091, 34127, 34159, 17731, 34129,
+    {f: 2, c: 34145}, 159636, 34171, 34173, 34175, 34177, 34182, 34195, 34205,
+    34207, 159736, {f: 2, c: 159734}, 34236, 34247, 34250, {f: 2, c: 34264},
+    34271, 34273, 34278, 34294, 34304, 34321, 34334, 34337, 34340, 34343,
+    160013, 34361, 34364, 160057, 34368, 34387, 34390, 34423, 34439, 34441,
+    {f: 2, c: 34460}, 34481, 34483, 34497, 34499, 34513, 34517, 34519, 34531,
+    34534, 17848, 34565, 34567, 34574, 34576, 34591, 34593, 34595, 34609,
+    34618, 34624, 34627, 34641, 34648, {f: 2, c: 34660}, 34674, 34684, 160731,
+    160730, 34727, 34697, 34699, 34707, 34720, 160766, 17893, 34750, 160784,
+    34753, 34766, 34783, 160841, 34787, {f: 2, c: 34789}, 34794, 34835, 34856,
+    34862, 34866, 34876, 17935, 34890, 34904, 161301, 161300, 34921, 161329,
+    34927, 34976, 35004, 35008, 161427, 35025, 35027, 17985, 35073, 161550,
+    35127, 161571, 35138, 35141, 35145, 161618, 35170, 35209, 35216, 35231,
+    35248, 35255, 35288, 35307, 18081, 35315, 35325, 35327, 18095, 35345,
+    35348, 162181, 35361, 35381, 35390, 35397, 35405, 35416, 35502, 35472,
+    35511, 35543, 35580, 162436, 35594, 35589, 35597, 35612, 35629, 18188,
+    35665, 35678, 35702, 35713, 35723, {f: 2, c: 35732}, 35897, 162739, 35901,
+    162750, 162759, 35909, 35919, 35927, 35945, 35949, 163000, 35987, 35986,
+    35993, 18276, 35995, 36054, 36053, 163232, 36081, 163344, 36105, 36110,
+    36296, 36313, 36364, 18429, 36349, 36358, 163978, 36372, 36374,
+    {f: 2, c: 36385}, 36391, 164027, 18454, 36406, 36409, 36436, 36450, 36461,
+    36463, 36504, 36510, 36533, 36539, 164482, 18510, 164595, 36608, 36616,
+    36651, 36672, 36682, 36696, 164876, 36772, 36788, 164949, 36801, 36806,
+    64036, 36810, 36813, 36819, 36821, 36849, 36853, 36859, 36876, 36919,
+    165227, 36931, 36957, {f: 2, c: 165320}, 36997, 37004, 37008, 37025, 18613,
+    37040, 37046, 37059, 37064, 165591, 37084, 37087, 165626, 37110, 37106,
+    37120, 37099, {f: 2, c: 37118}, 37124, 37126, 37144, 37150, 37175, 37177,
+    {f: 2, c: 37190}, 37207, 37209, 37236, 37241, 37253, 37299, 37302,
+    {f: 2, c: 37315}, 166217, 166214, 37356, 37377, {f: 2, c: 37398}, 166251,
+    37442, 37450, 37462, 37473, 37477, 37480, 166280, {f: 2, c: 37500}, 37503,
+    37513, 37517, 37527, 37529, 37535, 37547, {f: 2, c: 166330}, 37554,
+    {f: 2, c: 37567}, 37574, 37582, 37605, 37649, 166430, 166441, 37623, 37673,
+    166513, 166467, 37713, 37722, 37739, 37745, 37747, 37793, 166553, 166605,
+    37768, 37771, 37775, 37790, 37877, 166628, 166621, 37873, 37831, 37852,
+    37863, 37897, {f: 2, c: 37910}, 37883, 37938, 37947, 166849, 166895, 37997,
+    37999, 38265, 38278, {f: 2, c: 38284}, 167184, 167281, 38344, 167419,
+    167455, 38444, {f: 2, c: 38451}, 167478, 38460, 38497, 167561, 38530,
+    167659, 38554, 167730, 18919, 38579, 38586, 38589, 18938, 167928, 38616,
+    38618, 38621, 18948, 38676, 38691, 18985, 38710, 38721, 38727, 38743,
+    38747, 38762, 168608, 168625, 38806, 38814, {f: 2, c: 38833}, 38846, 38860,
+    38865, 38868, 38872, 38881, 38897, 38916, 38925, 38932, 38934, 19132,
+    169104, {f: 2, c: 38962}, 38949, 38983, 39014, 39083, 39085, 39088, 169423,
+    39095, {f: 2, c: 39099}, 39106, 39111, 39115, 39137, 39139, 39146,
+    {f: 2, c: 39152}, 39155, 39176, 19259, 169712, {f: 2, c: 39190}, 169753,
+    {f: 3, c: 39194}, 169808, 39217, {f: 3, c: 39226}, 39233, 39238, 39246,
+    39264, 39331, 39334, 39357, 39359, 39363, 39380, 39385, 39390, 170182,
+    39408, 39417, 39420, 39434, 39441, 39450, 39456, 39473, 39492, 39500,
+    39512, 19394, 39599, 19402, 39607, 19410, 39609, 170610, 39622, 39632,
+    39634, 39637, 39648, 39653, 39657, 39692, 39696, 39698, 39702, 39708,
+    39723, 39741, 19488, 39755, 39779, 39781, {f: 2, c: 39787},
+    {f: 2, c: 39798}, 39846, 39852, 171483, 39858, 39864, 39870, 39923, 39896,
+    39901, 39914, 39919, 39918, 171541, 171658, 171593, 39958,
+    {f: 3, c: 39960}, 39965, 39970, 39977, 171716, 39985, 39991, 40005, 40028,
+    171753, {f: 2, c: 40009}, 171739, 40020, 40024, 40027, 40029, 40031,
+    {f: 3, c: 40041}, {f: 2, c: 40045}, 40050, 40053, 40058, 40166, 40178,
+    40203, [171982, 171991], 40209, {f: 2, c: 40215}, 172079, 19652, 172058,
+    40242, 19665, 40266, 40287, 40290, 172281, 172162, 40307, {f: 2, c: 40310},
+    40324, 40345, 40353, 40383, 40373, 40377, 40381, 40393, 40410, 40416,
+    40419, 19719, 40458, 40450, 40461, 40476, 40571, 139800, 40576, 40581,
+    40603, 172940, 40637, 173111, 40671, 40703, 40706, 19831, 40707, 40762,
+    40765, 40774, 40787, 40789, 40792, 173553, 40797, 173570, 40809, 40813,
+    40816, 173746, 11948, 13844, 14509, 15820, 16348, 17854, 17936, 19326,
+    19512, 19681, 19980, {f: 2, c: 20003}, 20089, 20211, 20236, 20249, 20267,
+    20270, 20273, 20356, 20382, 20407, 20484, 20492, 20556, 20575, 20578,
+    20599, 20622, 20638, 20642, 20675, 20712, 20721, 20734, 20743,
+    {f: 3, c: 20748}, 20787, 20792, 20852, 20868, 20920, 20922, 20936, 20943,
+    20945, {f: 2, c: 20947}, 20952, 20959, 20997, 21030, 21032, 21035,
+    {f: 2, c: 21041}, 21045, 21052, 21082, 21088, 21102, {f: 2, c: 21112},
+    21130, 21132, 21217, 21225, 21233, 21251, 21265, 21279, 21293, 21298,
+    21309, 21349, 21357, 21369, 21374, 21396, 21401, 21418, 21423, 21434,
+    21441, {f: 2, c: 21444}, 21472, 21523, 21546, 21553, {f: 2, c: 21556},
+    21580, 21671, 21674, 21681, 21691, 21710, 21738, 21756, 21765, 21768,
+    21781, 21799, 21802, 21814, 21841, 21862, 21903, 21906, 21908, 21924,
+    21938, 21955, 21958, 21971, 21979, 21996, 21998, 22001, 22006, 22008,
+    22021, 22029, {f: 2, c: 22033}, 22060, 22069, 22073, 22093, 22100, 22149,
+    22175, 22182, 22199, 22220, 22223, 22233, 22241, 22251, 22253, 22257,
+    22279, 22284, {f: 2, c: 22298}, 22301, 22316, 22318, {f: 2, c: 22333},
+    22367, 22379, 22381, 22394, 22403, 22423, 22446, 22485, 22503, 22541,
+    22566, 22605, 22607, 22623, 22637, 22655, 22657, 22680, 22716, 22815,
+    22819, 22873, 22905, 22935, 22959, 22963, 23007, 23025, 23032, 23218,
+    23224, 23274, 23286, 23323, 23325, 23329, 23352, 23479, 23511, 23520,
+    23583, 23594, 23596, 23606, 23641, 23644, 23661, 23773, 23809, 23860,
+    23869, 23897, 23934, 23939, 24007, 24057, 24104, 24114, 24117, 24155,
+    24168, 24170, 24183, 24192, 24203, 24243, 24253, 24273, {f: 2, c: 24276},
+    24397, 24492, 24554, 24583, 24649, 24660, 24679, 24763, 24772, 24829,
+    24842, 24854, 24874, 24886, 24926, 24932, 24955, 24957, 24959, 24989,
+    25016, 25052, 25058, 25061, 25064, 25092, 25095, 25137, 25145, 25149,
+    25210, 25232, 25256, 25306, 25332, 25366, 25386, 25398, 25414, 25419,
+    25427, 25457, 25461, 25471, 25474, 25482, {f: 2, c: 25518}, 25578,
+    {f: 2, c: 25592}, 25618, 25624, 25632, 25636, 25642, 25653, 25661, 25663,
+    25682, 25695, 25716, 25744, {f: 2, c: 25752}, 25772, 25779, 25837, 25840,
+    25883, 25887, 25902, 25929, 25952, 26002, 26005, 26036, 26046, 26056,
+    26062, 26064, 26079, 26238, {f: 2, c: 26251}, 26291, 26304, 26319, 26405,
+    26421, 26453, 26496, 26511, 26513, 26532, 26545, 26549, 26558, 26664,
+    26758, 26859, 26869, 26903, 26931, 26936, 26971, 26981, 27048, 27051,
+    27055, 27109, 27121, 27210, 27221, 27239, 27249, 27311, {f: 2, c: 27336},
+    27395, 27451, 27455, {f: 2, c: 27517}, 27568, 27639, 27641, 27652, 27657,
+    27661, 27692, 27722, 27730, 27732, 27769, 27820, 27828, 27858, 28001,
+    28028, 28089, 28144, 28229, 28275, 28283, 28285, 28297, 28348,
+    {f: 2, c: 28378}, 28454, 28457, 28464, 28551, 28573, 28590, 28599, 28685,
+    28704, 28745, 28824, 28848, {f: 2, c: 28885}, 28997, 29106, 29172, 29207,
+    29215, 29251, {f: 2, c: 29263}, 29274, 29280, 29288, 29303, 29316, 29385,
+    29413, 29428, 29442, 29451, 29470, 29474, {f: 2, c: 29498}, 29517, 29528,
+    29543, 29810, 29871, 29919, 29924, 29940, 29947, 29974, 29985, 30015,
+    30046, 30105, 30116, 30145, 30148, 30156, 30167, 30172, 30177, 30191,
+    30212, 30220, 30237, 30258, 30264, 30277, 30282, 30303, 30381, 30397,
+    30425, 30443, 30448, 30457, 30464, 30478, 30498, 30504, 30511, 30521,
+    30526, 30533, 30538, 30543, 30558, 30564, 30567, 30572, 30596,
+    {f: 2, c: 30604}, 30614, 30631, 30639, 30647, 30654, 30665, 30673, 30681,
+    30705, 30775, 30812, 30846, 30872, 30881, 30897, 30899, 30921, 30931,
+    30988, 31007, {f: 2, c: 31015}, 31039, 31042, 31060, 31083, 31100, 31147,
+    31172, 31210, 31234, 31244, 31280, 31290, 31300, 31360, 31366, 31380,
+    31413, 31421, 31486, 31531, 31607, 31648, 31660, 31664, 31720, 31730,
+    31736, 31740, 31742, 31753, 31784, 31791, 31810, {f: 2, c: 31826},
+    {f: 3, c: 31835}, 31858, 31869, 31879, 31902, 31930, 31943, 31955, 31962,
+    32060, 32077, 32130, 32133, 32141, 32145, 32158, 32179, 32185, 32208,
+    32229, {f: 2, c: 32245}, 32303, 32310, 32324, 32367, 32376, 32385, 32573,
+    32603, 32605, 32613, 32625, {f: 2, c: 32639}, 32651, 32674,
+    {f: 3, c: 32765}, 32775, 32781, 32798, 32825, 32904, 32910, 32975, 32980,
+    33005, 33008, 33015, 33018, 33022, 33027, 33047, 33072, 33111, 33135,
+    33139, 33163, 33168, 33179, 33182, 33227, 33237, {f: 2, c: 33245}, 33249,
+    33263, 33270, 33280, 33291, {f: 2, c: 33299}, 33306, 33338, 33348, 33389,
+    33412, 33417, 33425, 33450, 33456, 33488, 33514, 33519, 33526, 33622,
+    33656, 33784, 33788, 33880, 33939, 33969, 33981, 34043, 34118, 34134,
+    34141, 34181, 34200, 34370, 34374, 34496, 34580, 34594, 34606, 34617,
+    34653, 34683, 34700, 34702, {f: 2, c: 34711}, 34718, 34723, 34734, 34751,
+    34761, 34778, 34840, 34843, 34861, 34874, 34885, 34891, 34894, 34901,
+    34906, 34926, {f: 3, c: 34970}, 35021, 35040, 35055, {f: 2, c: 35086},
+    35110, 35125, 35162, 35164, 35179, 35184, 35196, 35237, 35253, 35260,
+    35285, 35401, 35415, 35431, 35454, 35462, 35478, 35510, 35529, 35537,
+    35549, 35564, 35573, 35590, 35599, 35601, 35653, 35666, 35693, 35704,
+    35708, 35710, 35717, 35743, 35915, 35923, 35963, 36026, 36037, 36041,
+    36050, 36076, 36085, 36087, 36097, 36099, 36119, 36124, 36206, 36241,
+    36255, 36267, 36274, 36309, 36327, {f: 2, c: 36337}, 36340, 36353, 36363,
+    36390, 36401, {f: 2, c: 36416}, 36429, 36431, 36444, 36449, 36457, 36465,
+    36469, 36471, 36489, 36496, 36501, 36506, 36519, 36521, 36525, 36584,
+    36592, 36615, 36632, 36645, 36647, 36652, 36661, 36666, 36675, 36679,
+    36689, 36693, {f: 3, c: 36768}, 36773, 36868, 36891, 36911, 36940, 36955,
+    36976, 36980, 36985, 37003, 37016, 37024, 37042, 37053, 37065, 37104,
+    37125, 37157, 37210, 37223, 37242, 37258, 37265, 37269, 37296, 37307,
+    37309, 37314, 37317, 37376, 37385, 37411, 37494, 37518, 37551,
+    {f: 2, c: 37563}, 37569, 37571, 37573, 37576, 37652, 37683, 37686, 37720,
+    37759, 37762, 37770, 37819, 37836, 37862, 37881, 37890, {f: 2, c: 37901},
+    37934, 37964, 38280, 38305, 38335, 38342, 38345, {f: 2, c: 38353}, 38368,
+    38372, 38374, 38436, 38449, 38456, 38461, 38484, 38516, 38523, 38527,
+    38529, 38531, 38537, 38550, 38574, 38659, 38683, {f: 2, c: 38689}, 38696,
+    38705, 38759, 38774, 38781, 38783, 38809, 38815, 38828, 38841, 38861,
+    38880, 38895, 38919, 38950, 38958, {f: 2, c: 39010}, 39092, 39109, 39170,
+    39185, 39189, 39221, 39240, 39252, 39262, 39393, 39436, 39440, 39459,
+    39489, 39505, {f: 2, c: 39613}, 39681, 39689, 39691, {f: 2, c: 39693},
+    39705, 39733, 39752, 39765, 39784, 39808, 39814, 39824, 39837, 39856,
+    39871, 39880, 39935, 39938, 39964, 39989, 40004, 40022, 40033, 40040,
+    40240, 40253, 40298, 40315, 40421, 40425, 40435, 40570, {f: 3, c: 40578},
+    40624, 40676, 40688, 40690, 40713, 40719, 40724, 40731, 40738, 40742,
+    {f: 2, c: 40746}, 40756, 40794, 40815, 40862, 40869, 131317, 151044,
+    151538, 163187, 194581, 194630, 194713, 194726, 194789, 195038, 13790,
+    {s: 4}, 172722, 0, 0, 131416, {s: 4}, 132529, 0, 0, 132844, {s: 6}, 134488,
+    {s: 21}, 154060, {s: 9}, 14756, 14776, 142914, 0, 0, 14940, 0, 0, 143339,
+    0, 0, 162228, 0, 15044, 15051, {s: 5}, 14981, {s: 8}, 15347, 27384, {s: 5},
+    15665, {s: 9}, 147531, 0, 15936, 14497, {s: 34}, 158878, {s: 12}, 18207,
+    162876, {s: 4}, 18462, {s: 71}, 39709, 39724, 20482, 20958, 21255, 23532,
+    63784, 26142, 63785, 28746, 64021, 21857, 27706, 31328, 156492, 34819,
+    38315, 38741, 171581, 173594],
+  'Adobe-Korea1': [{f: 95, c: 32}, 8361, 8208, 169, 0, 0, [12288, 12644],
+    {f: 2, c: 12289}, 12539, 8229, [8230, 8943], 168, 12291, {f: 2, c: 8211},
+    8214, 65340, 65374, {f: 2, c: 8216}, {f: 2, c: 8220}, {f: 2, c: 12308},
+    {f: 10, c: 12296}, 177, 215, 247, 8800, {f: 2, c: 8804}, 8734, 8756, 176,
+    {f: 2, c: 8242}, 8451, 8491, {f: 2, c: 65504}, 65509, 9794, 9792, 8736,
+    8869, 8978, 8706, 8711, 8801, 8786, 167, 8251, 9734, 9733, 9675, 9679,
+    9678, 9671, 9670, 9633, 9632, 9651, 9650, 9661, 9660, 8594,
+    {f: 2, c: 8592}, {f: 2, c: 8595}, 12307, 171, 187, 8730, 8765, 8733, 8757,
+    {f: 2, c: 8747}, 8712, 8715, {f: 2, c: 8838}, {f: 2, c: 8834}, 8746, 8745,
+    {f: 2, c: 8743}, 65506, 8658, 8660, 8704, 8707, 180, 732, 711, 728, 733,
+    730, 729, 184, 731, 161, 191, 8758, 8750, 8721, 8719, 164, 8457, 8240,
+    9665, 9664, 9655, 9654, 9828, {f: 2, c: 9824}, 9829, 9831, 9827, 9673,
+    9672, 9635, {f: 2, c: 9680}, 9618, {f: 2, c: 9636}, 9640, 9639, 9638, 9641,
+    9832, 9743, 9742, 9756, 9758, 182, {f: 2, c: 8224}, 8597, 8599, 8601, 8598,
+    8600, 9837, {f: 2, c: 9833}, 9836, 12927, 12828, 8470, 13255, 8482, 13250,
+    13272, 8481, {f: 59, c: 65281}, 65510, {f: 33, c: 65341}, 65507,
+    {f: 51, c: 12593}, {f: 42, c: 12645}, {f: 10, c: 8560}, {f: 10, c: 8544},
+    {f: 17, c: 913}, {f: 7, c: 931}, {f: 17, c: 945}, {f: 7, c: 963}, 9472,
+    9474, 9484, 9488, 9496, 9492, 9500, 9516, 9508, 9524, 9532, 9473, 9475,
+    9487, 9491, 9499, 9495, 9507, 9523, 9515, 9531, 9547, 9504, 9519, 9512,
+    9527, 9535, 9501, 9520, 9509, 9528, 9538, 9490, 9489, 9498, 9497, 9494,
+    9493, 9486, 9485, {f: 2, c: 9502}, {f: 2, c: 9505}, {f: 2, c: 9510},
+    {f: 2, c: 9513}, {f: 2, c: 9517}, {f: 2, c: 9521}, {f: 2, c: 9525},
+    {f: 2, c: 9529}, {f: 2, c: 9533}, {f: 2, c: 9536}, {f: 8, c: 9539},
+    {f: 3, c: 13205}, 8467, 13208, 13252, {f: 4, c: 13219}, {f: 10, c: 13209},
+    13258, {f: 3, c: 13197}, 13263, {f: 2, c: 13192}, 13256, {f: 2, c: 13223},
+    {f: 10, c: 13232}, {f: 5, c: 13184}, {f: 6, c: 13242}, {f: 5, c: 13200},
+    8486, {f: 2, c: 13248}, {f: 3, c: 13194}, 13270, 13253, {f: 3, c: 13229},
+    13275, {f: 4, c: 13225}, 13277, 13264, 13267, 13251, 13257, 13276, 13254,
+    198, 208, 170, 294, 306, 319, 321, 216, 338, 186, 222, 358, 330,
+    {f: 28, c: 12896}, {f: 26, c: 9424}, {f: 15, c: 9312}, 189,
+    {f: 2, c: 8531}, 188, 190, {f: 4, c: 8539}, 230, 273, 240, 295, 305, 307,
+    312, 320, 322, 248, 339, 223, 254, 359, 331, 329, {f: 28, c: 12800},
+    {f: 26, c: 9372}, {f: 15, c: 9332}, 185, {f: 2, c: 178}, 8308, 8319,
+    {f: 4, c: 8321}, {f: 83, c: 12353}, {f: 86, c: 12449}, {f: 6, c: 1040},
+    1025, {f: 32, c: 1046}, 1105, {f: 26, c: 1078}, {f: 2, c: 44032}, 44036,
+    {f: 4, c: 44039}, {f: 8, c: 44048}, {f: 5, c: 44057}, 44064, 44068,
+    {f: 2, c: 44076}, {f: 3, c: 44079}, {f: 2, c: 44088}, 44092, 44096, 44107,
+    44109, 44116, 44120, 44124, {f: 2, c: 44144}, 44148, {f: 2, c: 44151},
+    44154, {f: 2, c: 44160}, {f: 4, c: 44163}, {f: 4, c: 44169}, 44176, 44180,
+    {f: 2, c: 44188}, {f: 3, c: 44191}, {f: 3, c: 44200}, 44204,
+    {f: 2, c: 44207}, {f: 2, c: 44216}, {f: 3, c: 44219}, 44225, 44228, 44232,
+    44236, 44245, 44247, {f: 2, c: 44256}, 44260, {f: 2, c: 44263}, 44266,
+    44268, {f: 3, c: 44271}, 44275, {f: 2, c: 44277}, {f: 2, c: 44284}, 44288,
+    44292, 44294, {f: 2, c: 44300}, 44303, 44305, 44312, 44316, 44320, 44329,
+    {f: 2, c: 44332}, {f: 2, c: 44340}, 44344, 44348, {f: 2, c: 44356}, 44359,
+    44361, 44368, 44372, 44376, 44385, 44387, {f: 2, c: 44396}, 44400,
+    {f: 4, c: 44403}, {f: 3, c: 44411}, 44415, {f: 2, c: 44417},
+    {f: 2, c: 44424}, 44428, 44432, {f: 2, c: 44444}, 44452, 44471,
+    {f: 2, c: 44480}, 44484, 44488, {f: 2, c: 44496}, 44499, 44508, 44512,
+    44516, {f: 2, c: 44536}, 44540, {f: 3, c: 44543}, {f: 2, c: 44552}, 44555,
+    44557, 44564, {f: 2, c: 44592}, 44596, {f: 2, c: 44599}, 44602,
+    {f: 2, c: 44608}, 44611, {f: 2, c: 44613}, 44618, {f: 3, c: 44620}, 44624,
+    44628, 44630, {f: 2, c: 44636}, {f: 3, c: 44639}, 44645, {f: 2, c: 44648},
+    44652, 44656, {f: 2, c: 44664}, {f: 3, c: 44667}, {f: 2, c: 44676}, 44684,
+    {f: 3, c: 44732}, 44736, 44740, {f: 2, c: 44748}, {f: 3, c: 44751},
+    {f: 2, c: 44760}, 44764, 44776, 44779, 44781, 44788, 44792, 44796,
+    {f: 2, c: 44807}, 44813, 44816, {f: 2, c: 44844}, 44848, 44850, 44852,
+    {f: 2, c: 44860}, 44863, {f: 3, c: 44865}, {f: 2, c: 44872}, 44880,
+    {f: 2, c: 44892}, {f: 2, c: 44900}, 44921, 44928, 44932, 44936,
+    {f: 2, c: 44944}, 44949, 44956, {f: 2, c: 44984}, 44988, 44992,
+    {f: 3, c: 44999}, 45003, {f: 2, c: 45005}, 45012, 45020, {f: 2, c: 45032},
+    {f: 2, c: 45040}, 45044, 45048, {f: 2, c: 45056}, 45060, 45068, 45072,
+    45076, {f: 2, c: 45084}, 45096, {f: 2, c: 45124}, 45128, 45130, 45132,
+    45134, {f: 3, c: 45139}, 45143, 45145, 45149, {f: 2, c: 45180}, 45184,
+    45188, {f: 2, c: 45196}, 45199, 45201, {f: 3, c: 45208}, 45212,
+    {f: 4, c: 45215}, {f: 2, c: 45224}, {f: 5, c: 45227}, 45233,
+    {f: 3, c: 45235}, 45240, 45244, {f: 2, c: 45252}, {f: 3, c: 45255},
+    {f: 2, c: 45264}, 45268, 45272, 45280, 45285, {f: 2, c: 45320},
+    {f: 2, c: 45323}, 45328, {f: 2, c: 45330}, {f: 2, c: 45336},
+    {f: 3, c: 45339}, {f: 3, c: 45347}, 45352, 45356, {f: 2, c: 45364},
+    {f: 3, c: 45367}, {f: 2, c: 45376}, 45380, 45384, {f: 2, c: 45392},
+    {f: 2, c: 45396}, 45400, 45404, 45408, {f: 2, c: 45432}, 45436, 45440,
+    45442, {f: 2, c: 45448}, 45451, 45453, {f: 3, c: 45458}, 45464, 45468,
+    45480, 45516, 45520, 45524, {f: 2, c: 45532}, 45535, {f: 2, c: 45544},
+    45548, 45552, 45561, 45563, 45565, {f: 2, c: 45572}, 45576,
+    {f: 2, c: 45579}, {f: 2, c: 45588}, 45591, 45593, 45600, 45620, 45628,
+    45656, 45660, 45664, {f: 2, c: 45672}, {f: 2, c: 45684}, 45692,
+    {f: 2, c: 45700}, 45705, {f: 2, c: 45712}, 45716, {f: 3, c: 45720},
+    {f: 2, c: 45728}, 45731, {f: 2, c: 45733}, 45738, 45740, 45744, 45748,
+    {f: 2, c: 45768}, 45772, 45776, 45778, {f: 2, c: 45784}, 45787, 45789,
+    45794, {f: 3, c: 45796}, 45800, {f: 5, c: 45803}, {f: 3, c: 45811},
+    {f: 5, c: 45815}, {f: 3, c: 45823}, 45828, 45832, {f: 2, c: 45840},
+    {f: 3, c: 45843}, 45852, {f: 3, c: 45908}, 45912, {f: 2, c: 45915},
+    {f: 2, c: 45918}, {f: 2, c: 45924}, 45927, 45929, 45931, 45934,
+    {f: 2, c: 45936}, 45940, 45944, {f: 2, c: 45952}, {f: 3, c: 45955}, 45964,
+    45968, 45972, {f: 2, c: 45984}, 45992, 45996, {f: 2, c: 46020}, 46024,
+    {f: 2, c: 46027}, 46030, 46032, {f: 2, c: 46036}, 46039, 46041, 46043,
+    46045, 46048, 46052, 46056, 46076, 46096, 46104, 46108, 46112,
+    {f: 2, c: 46120}, 46123, 46132, {f: 2, c: 46160}, 46164, 46168,
+    {f: 2, c: 46176}, 46179, 46181, 46188, 46208, 46216, 46237, 46244, 46248,
+    46252, 46261, 46263, 46265, 46272, 46276, 46280, 46288, 46293,
+    {f: 2, c: 46300}, 46304, {f: 2, c: 46307}, 46310, {f: 2, c: 46316}, 46319,
+    46321, 46328, {f: 2, c: 46356}, 46360, {f: 2, c: 46363}, {f: 2, c: 46372},
+    {f: 4, c: 46375}, {f: 2, c: 46384}, 46388, 46392, {f: 2, c: 46400},
+    {f: 3, c: 46403}, {f: 3, c: 46411}, 46416, 46420, {f: 2, c: 46428},
+    {f: 3, c: 46431}, {f: 2, c: 46496}, 46500, 46504, {f: 2, c: 46506},
+    {f: 2, c: 46512}, {f: 3, c: 46515}, {f: 3, c: 46523}, 46528, 46532,
+    {f: 2, c: 46540}, {f: 3, c: 46543}, 46552, 46572, {f: 2, c: 46608}, 46612,
+    46616, 46629, 46636, 46644, 46664, 46692, 46696, {f: 2, c: 46748}, 46752,
+    46756, {f: 2, c: 46763}, 46769, 46804, 46832, 46836, 46840,
+    {f: 2, c: 46848}, 46853, {f: 2, c: 46888}, 46892, {f: 2, c: 46895},
+    {f: 2, c: 46904}, 46907, 46916, 46920, 46924, {f: 2, c: 46932}, 46944,
+    46948, 46952, {f: 2, c: 46960}, 46963, 46965, {f: 2, c: 46972}, 46976,
+    46980, {f: 2, c: 46988}, {f: 4, c: 46991}, {f: 4, c: 46998}, 47004, 47008,
+    {f: 2, c: 47016}, {f: 3, c: 47019}, {f: 2, c: 47028}, 47032, 47047, 47049,
+    {f: 2, c: 47084}, 47088, 47092, {f: 2, c: 47100}, {f: 3, c: 47103},
+    {f: 3, c: 47111}, 47116, 47120, {f: 2, c: 47128}, 47131, 47133,
+    {f: 2, c: 47140}, 47144, 47148, {f: 2, c: 47156}, {f: 3, c: 47159}, 47168,
+    47172, 47185, 47187, {f: 2, c: 47196}, 47200, 47204, {f: 2, c: 47212},
+    47215, 47217, 47224, 47228, 47245, 47272, 47280, 47284, 47288,
+    {f: 2, c: 47296}, 47299, 47301, 47308, 47312, 47316, 47325, 47327, 47329,
+    {f: 2, c: 47336}, 47340, 47344, {f: 2, c: 47352}, 47355, 47357, 47364,
+    47384, 47392, {f: 2, c: 47420}, 47424, 47428, 47436, 47439, 47441,
+    {f: 2, c: 47448}, 47452, 47456, {f: 2, c: 47464}, 47467, 47469,
+    {f: 2, c: 47476}, 47480, 47484, {f: 2, c: 47492}, 47495, {f: 2, c: 47497},
+    {f: 2, c: 47501}, {f: 2, c: 47532}, 47536, 47540, {f: 2, c: 47548}, 47551,
+    47553, {f: 2, c: 47560}, 47564, {f: 5, c: 47566}, {f: 2, c: 47576}, 47579,
+    {f: 2, c: 47581}, 47585, {f: 3, c: 47587}, 47592, 47596, {f: 2, c: 47604},
+    {f: 4, c: 47607}, {f: 2, c: 47616}, 47624, 47637, {f: 2, c: 47672}, 47676,
+    47680, 47682, {f: 2, c: 47688}, 47691, {f: 2, c: 47693}, {f: 3, c: 47699},
+    47704, 47708, {f: 2, c: 47716}, {f: 3, c: 47719}, {f: 2, c: 47728}, 47732,
+    47736, {f: 3, c: 47747}, 47751, 47756, {f: 2, c: 47784}, {f: 2, c: 47787},
+    47792, 47794, {f: 2, c: 47800}, 47803, 47805, 47812, 47816,
+    {f: 2, c: 47832}, 47868, 47872, 47876, 47885, 47887, 47889, 47896, 47900,
+    47904, 47913, 47915, {f: 3, c: 47924}, 47928, {f: 4, c: 47931},
+    {f: 2, c: 47940}, 47943, 47945, 47949, {f: 2, c: 47951}, 47956, 47960,
+    47969, 47971, 47980, 48008, 48012, 48016, 48036, 48040, 48044, 48052,
+    48055, 48064, 48068, 48072, 48080, 48083, {f: 2, c: 48120}, 48124,
+    {f: 2, c: 48127}, 48130, {f: 2, c: 48136}, {f: 3, c: 48139}, 48143, 48145,
+    {f: 5, c: 48148}, {f: 5, c: 48155}, {f: 2, c: 48164}, 48167, 48169, 48173,
+    {f: 2, c: 48176}, 48180, 48184, {f: 2, c: 48192}, {f: 3, c: 48195}, 48201,
+    {f: 2, c: 48204}, 48208, 48221, {f: 2, c: 48260}, 48264, {f: 2, c: 48267},
+    48270, {f: 2, c: 48276}, 48279, {f: 2, c: 48281}, {f: 2, c: 48288}, 48292,
+    {f: 2, c: 48295}, {f: 2, c: 48304}, {f: 3, c: 48307}, {f: 2, c: 48316},
+    48320, 48324, 48333, {f: 3, c: 48335}, 48341, 48344, 48348,
+    {f: 3, c: 48372}, 48376, 48380, {f: 2, c: 48388}, 48391, 48393, 48400,
+    48404, 48420, 48428, 48448, {f: 2, c: 48456}, 48460, 48464,
+    {f: 2, c: 48472}, 48484, 48488, {f: 2, c: 48512}, 48516, {f: 4, c: 48519},
+    {f: 2, c: 48528}, 48531, 48533, {f: 2, c: 48537}, 48540, 48548, 48560,
+    48568, {f: 2, c: 48596}, 48600, 48604, 48617, 48624, 48628, 48632, 48640,
+    48643, 48645, {f: 2, c: 48652}, 48656, 48660, {f: 2, c: 48668}, 48671,
+    {f: 2, c: 48708}, 48712, 48716, 48718, {f: 2, c: 48724}, 48727,
+    {f: 3, c: 48729}, {f: 2, c: 48736}, 48740, 48744, 48746, {f: 2, c: 48752},
+    {f: 3, c: 48755}, {f: 3, c: 48763}, 48768, 48772, {f: 2, c: 48780},
+    {f: 3, c: 48783}, {f: 2, c: 48792}, 48808, {f: 2, c: 48848}, 48852,
+    {f: 2, c: 48855}, 48864, {f: 3, c: 48867}, 48876, 48897, {f: 2, c: 48904},
+    {f: 2, c: 48920}, {f: 3, c: 48923}, {f: 2, c: 48960}, 48964, 48968,
+    {f: 2, c: 48976}, 48981, 49044, 49072, 49093, {f: 2, c: 49100}, 49104,
+    49108, 49116, 49119, 49121, 49212, 49233, 49240, 49244, 49248,
+    {f: 2, c: 49256}, {f: 2, c: 49296}, 49300, 49304, {f: 2, c: 49312}, 49315,
+    49317, {f: 2, c: 49324}, {f: 2, c: 49327}, {f: 4, c: 49331},
+    {f: 2, c: 49340}, {f: 3, c: 49343}, 49349, {f: 2, c: 49352}, 49356, 49360,
+    {f: 2, c: 49368}, {f: 3, c: 49371}, {f: 2, c: 49380}, 49384, 49388,
+    {f: 2, c: 49396}, 49399, 49401, 49408, 49412, 49416, 49424, 49429,
+    {f: 5, c: 49436}, {f: 2, c: 49443}, {f: 2, c: 49446}, {f: 2, c: 49452},
+    {f: 3, c: 49455}, 49462, {f: 2, c: 49464}, 49468, 49472, {f: 2, c: 49480},
+    {f: 3, c: 49483}, {f: 2, c: 49492}, 49496, 49500, {f: 2, c: 49508},
+    {f: 3, c: 49511}, 49520, 49524, 49528, 49541, {f: 3, c: 49548}, 49552,
+    49556, 49558, {f: 2, c: 49564}, 49567, 49569, 49573, {f: 2, c: 49576},
+    49580, 49584, 49597, 49604, 49608, 49612, 49620, {f: 2, c: 49623}, 49632,
+    49636, 49640, {f: 2, c: 49648}, 49651, {f: 2, c: 49660}, 49664, 49668,
+    {f: 2, c: 49676}, 49679, 49681, {f: 2, c: 49688}, 49692, {f: 2, c: 49695},
+    {f: 2, c: 49704}, 49707, 49709, 49711, {f: 2, c: 49713}, 49716, 49736,
+    {f: 2, c: 49744}, 49748, 49752, 49760, 49765, {f: 2, c: 49772}, 49776,
+    49780, {f: 2, c: 49788}, 49791, 49793, {f: 2, c: 49800}, 49808, 49816,
+    49819, 49821, {f: 2, c: 49828}, 49832, {f: 2, c: 49836}, {f: 2, c: 49844},
+    49847, 49849, {f: 2, c: 49884}, 49888, {f: 2, c: 49891}, {f: 3, c: 49899},
+    49903, 49905, 49910, {f: 2, c: 49912}, {f: 2, c: 49915}, 49920,
+    {f: 2, c: 49928}, {f: 2, c: 49932}, {f: 3, c: 49939}, 49944, 49948,
+    {f: 2, c: 49956}, {f: 2, c: 49960}, 49989, {f: 2, c: 50024}, 50028, 50032,
+    50034, {f: 2, c: 50040}, {f: 2, c: 50044}, 50052, 50056, 50060, 50112,
+    {f: 2, c: 50136}, 50140, {f: 2, c: 50143}, 50146, {f: 2, c: 50152}, 50157,
+    {f: 2, c: 50164}, 50168, 50184, 50192, 50212, 50220, 50224, 50228,
+    {f: 2, c: 50236}, 50248, {f: 2, c: 50276}, 50280, 50284, {f: 2, c: 50292},
+    50297, 50304, 50324, 50332, 50360, 50364, 50409, {f: 2, c: 50416}, 50420,
+    50424, 50426, {f: 3, c: 50431}, 50444, 50448, 50452, 50460,
+    {f: 2, c: 50472}, 50476, 50480, {f: 2, c: 50488}, 50491, 50493,
+    {f: 2, c: 50500}, {f: 3, c: 50504}, {f: 3, c: 50508}, {f: 3, c: 50515},
+    {f: 3, c: 50519}, {f: 2, c: 50525}, {f: 2, c: 50528}, 50532, 50536,
+    {f: 2, c: 50544}, {f: 3, c: 50547}, {f: 2, c: 50556}, 50560, 50564, 50567,
+    {f: 2, c: 50572}, 50575, 50577, 50581, {f: 2, c: 50583}, 50588, 50592,
+    50601, {f: 2, c: 50612}, {f: 2, c: 50616}, {f: 4, c: 50619},
+    {f: 7, c: 50628}, 50636, 50638, {f: 2, c: 50640}, 50644, 50648,
+    {f: 2, c: 50656}, 50659, 50661, {f: 3, c: 50668}, 50672, 50676,
+    {f: 2, c: 50678}, {f: 6, c: 50684}, {f: 4, c: 50693}, 50700, 50704,
+    {f: 2, c: 50712}, {f: 2, c: 50715}, {f: 2, c: 50724}, 50728,
+    {f: 3, c: 50732}, 50736, {f: 3, c: 50739}, 50743, 50745, 50747,
+    {f: 2, c: 50752}, 50756, 50760, {f: 2, c: 50768}, {f: 3, c: 50771},
+    {f: 2, c: 50780}, 50784, 50796, 50799, 50801, {f: 2, c: 50808}, 50812,
+    50816, {f: 2, c: 50824}, 50827, 50829, {f: 2, c: 50836}, 50840, 50844,
+    {f: 2, c: 50852}, 50855, 50857, {f: 2, c: 50864}, 50868, {f: 3, c: 50872},
+    {f: 2, c: 50880}, 50883, 50885, {f: 2, c: 50892}, 50896, 50900,
+    {f: 2, c: 50908}, {f: 2, c: 50912}, {f: 2, c: 50920}, 50924, 50928,
+    {f: 2, c: 50936}, 50941, {f: 2, c: 50948}, 50952, 50956, {f: 2, c: 50964},
+    50967, 50969, {f: 2, c: 50976}, 50980, 50984, {f: 2, c: 50992}, 50995,
+    50997, 50999, {f: 2, c: 51004}, 51008, 51012, 51018, {f: 2, c: 51020},
+    51023, {f: 8, c: 51025}, 51036, 51040, 51048, 51051, {f: 2, c: 51060},
+    51064, {f: 3, c: 51068}, {f: 3, c: 51075}, {f: 4, c: 51079}, 51086,
+    {f: 2, c: 51088}, 51092, {f: 3, c: 51094}, 51098, {f: 2, c: 51104},
+    {f: 4, c: 51107}, {f: 2, c: 51116}, 51120, 51124, {f: 2, c: 51132},
+    {f: 3, c: 51135}, {f: 2, c: 51144}, 51148, 51150, 51152, 51160, 51165,
+    51172, 51176, 51180, {f: 2, c: 51200}, 51204, 51208, 51210,
+    {f: 2, c: 51216}, 51219, {f: 2, c: 51221}, {f: 2, c: 51228}, 51232, 51236,
+    {f: 2, c: 51244}, 51247, 51249, 51256, 51260, 51264, {f: 2, c: 51272},
+    {f: 2, c: 51276}, 51284, {f: 2, c: 51312}, 51316, 51320, 51322,
+    {f: 2, c: 51328}, 51331, {f: 3, c: 51333}, {f: 3, c: 51339}, 51348, 51357,
+    51359, 51361, 51368, {f: 2, c: 51388}, 51396, 51400, 51404,
+    {f: 2, c: 51412}, 51415, 51417, {f: 2, c: 51424}, 51428, 51445,
+    {f: 2, c: 51452}, 51456, {f: 3, c: 51460}, {f: 2, c: 51468}, 51471, 51473,
+    51480, 51500, 51508, {f: 2, c: 51536}, 51540, 51544, {f: 2, c: 51552},
+    51555, 51564, 51568, 51572, 51580, {f: 2, c: 51592}, 51596, 51600,
+    {f: 2, c: 51608}, 51611, 51613, {f: 2, c: 51648}, 51652, {f: 2, c: 51655},
+    51658, {f: 2, c: 51664}, 51667, {f: 2, c: 51669}, {f: 2, c: 51673},
+    {f: 2, c: 51676}, 51680, 51682, 51684, 51687, {f: 2, c: 51692},
+    {f: 3, c: 51695}, {f: 2, c: 51704}, 51708, 51712, {f: 2, c: 51720},
+    {f: 3, c: 51723}, 51732, 51736, 51753, {f: 2, c: 51788}, 51792, 51796,
+    {f: 2, c: 51804}, {f: 3, c: 51807}, 51816, 51837, 51844, 51864,
+    {f: 2, c: 51900}, 51904, 51908, {f: 2, c: 51916}, 51919, 51921, 51923,
+    {f: 2, c: 51928}, 51936, 51948, 51956, 51976, 51984, 51988, 51992,
+    {f: 2, c: 52000}, 52033, {f: 2, c: 52040}, 52044, 52048, {f: 2, c: 52056},
+    52061, 52068, {f: 2, c: 52088}, 52124, 52152, 52180, 52196, 52199, 52201,
+    {f: 2, c: 52236}, 52240, 52244, {f: 2, c: 52252}, {f: 2, c: 52257},
+    {f: 3, c: 52263}, 52268, 52270, 52272, {f: 2, c: 52280}, {f: 4, c: 52283},
+    {f: 2, c: 52292}, 52296, 52300, {f: 2, c: 52308}, {f: 3, c: 52311}, 52320,
+    52324, 52326, 52328, 52336, 52341, {f: 2, c: 52376}, 52380, 52384,
+    {f: 2, c: 52392}, {f: 3, c: 52395}, {f: 2, c: 52404}, 52408, 52412,
+    {f: 2, c: 52420}, 52423, 52425, 52432, 52436, 52452, 52460, 52464, 52481,
+    {f: 2, c: 52488}, 52492, 52496, {f: 2, c: 52504}, 52507, 52509, 52516,
+    52520, 52524, 52537, 52572, 52576, 52580, {f: 2, c: 52588}, 52591, 52593,
+    52600, 52616, {f: 2, c: 52628}, 52632, 52636, {f: 2, c: 52644}, 52647,
+    52649, 52656, 52676, 52684, 52688, 52712, 52716, 52720, {f: 2, c: 52728},
+    52731, 52733, 52740, 52744, 52748, 52756, 52761, {f: 2, c: 52768}, 52772,
+    52776, {f: 2, c: 52784}, 52787, 52789, {f: 2, c: 52824}, 52828,
+    {f: 3, c: 52831}, {f: 2, c: 52840}, 52843, 52845, {f: 2, c: 52852}, 52856,
+    52860, {f: 2, c: 52868}, 52871, 52873, {f: 2, c: 52880}, 52884, 52888,
+    {f: 2, c: 52896}, {f: 3, c: 52899}, {f: 2, c: 52908}, 52929,
+    {f: 2, c: 52964}, 52968, {f: 2, c: 52971}, {f: 2, c: 52980},
+    {f: 3, c: 52983}, {f: 2, c: 52992}, 52996, 53000, {f: 2, c: 53008}, 53011,
+    53013, 53020, 53024, 53028, {f: 2, c: 53036}, {f: 3, c: 53039}, 53048,
+    {f: 2, c: 53076}, 53080, 53084, {f: 2, c: 53092}, 53095, 53097,
+    {f: 2, c: 53104}, 53108, 53112, 53120, 53125, 53132, 53153, 53160, 53168,
+    53188, {f: 2, c: 53216}, 53220, 53224, {f: 2, c: 53232}, 53235, 53237,
+    53244, 53248, 53252, 53265, 53272, 53293, {f: 2, c: 53300}, 53304, 53308,
+    {f: 2, c: 53316}, 53319, 53321, 53328, 53332, 53336, 53344,
+    {f: 2, c: 53356}, 53360, 53364, {f: 2, c: 53372}, 53377, {f: 2, c: 53412},
+    53416, 53420, {f: 2, c: 53428}, 53431, 53433, {f: 2, c: 53440}, 53444,
+    {f: 2, c: 53448}, {f: 2, c: 53456}, {f: 3, c: 53459}, {f: 2, c: 53468},
+    53472, 53476, {f: 2, c: 53484}, {f: 3, c: 53487}, 53496, 53517,
+    {f: 2, c: 53552}, 53556, 53560, 53562, {f: 2, c: 53568}, {f: 3, c: 53571},
+    {f: 2, c: 53580}, 53584, 53588, {f: 2, c: 53596}, 53599, 53601, 53608,
+    53612, 53628, 53636, 53640, {f: 2, c: 53664}, 53668, 53672,
+    {f: 2, c: 53680}, 53683, 53685, 53690, 53692, 53696, 53720, 53748, 53752,
+    53767, 53769, 53776, {f: 2, c: 53804}, 53808, 53812, {f: 2, c: 53820},
+    53823, 53825, 53832, 53852, 53860, {f: 2, c: 53888}, 53892, 53896,
+    {f: 2, c: 53904}, 53909, 53916, 53920, 53924, 53932, 53937,
+    {f: 2, c: 53944}, 53948, {f: 2, c: 53951}, 53954, {f: 2, c: 53960}, 53963,
+    53972, 53976, 53980, {f: 2, c: 53988}, {f: 2, c: 54000}, 54004, 54008,
+    {f: 2, c: 54016}, 54019, 54021, {f: 3, c: 54028}, 54032, 54036, 54038,
+    {f: 2, c: 54044}, {f: 3, c: 54047}, 54053, {f: 2, c: 54056}, 54060, 54064,
+    {f: 2, c: 54072}, {f: 3, c: 54075}, {f: 2, c: 54084}, {f: 2, c: 54140},
+    54144, 54148, {f: 2, c: 54156}, {f: 3, c: 54159}, {f: 2, c: 54168}, 54172,
+    54176, {f: 2, c: 54184}, 54187, 54189, 54196, 54200, 54204,
+    {f: 2, c: 54212}, {f: 2, c: 54216}, 54224, 54232, 54241, 54243,
+    {f: 2, c: 54252}, 54256, 54260, {f: 2, c: 54268}, 54271, 54273, 54280,
+    54301, 54336, 54340, 54364, 54368, 54372, 54381, 54383, {f: 2, c: 54392},
+    54396, {f: 2, c: 54399}, 54402, {f: 2, c: 54408}, 54411, 54413, 54420,
+    54441, 54476, 54480, 54484, 54492, 54495, 54504, 54508, 54512, 54520,
+    54523, 54525, 54532, 54536, 54540, {f: 2, c: 54548}, 54551,
+    {f: 2, c: 54588}, 54592, 54596, {f: 2, c: 54604}, 54607, 54609,
+    {f: 2, c: 54616}, 54620, 54624, 54629, {f: 2, c: 54632}, 54635, 54637,
+    {f: 2, c: 54644}, 54648, 54652, {f: 2, c: 54660}, {f: 3, c: 54663}, 54672,
+    54693, {f: 2, c: 54728}, 54732, 54736, 54738, {f: 2, c: 54744}, 54747,
+    54749, {f: 2, c: 54756}, 54760, 54764, {f: 2, c: 54772}, 54775, 54777,
+    {f: 2, c: 54784}, 54788, 54792, {f: 2, c: 54800}, {f: 3, c: 54803}, 54812,
+    54816, 54820, 54829, {f: 2, c: 54840}, 54844, 54848, 54853,
+    {f: 2, c: 54856}, 54859, 54861, 54865, {f: 2, c: 54868}, 54872, 54876,
+    54887, 54889, {f: 2, c: 54896}, 54900, 54915, 54917, {f: 2, c: 54924},
+    54928, 54932, 54941, 54943, 54945, 54952, 54956, 54960, 54969, 54971,
+    {f: 2, c: 54980}, 54984, 54988, 54993, 54996, 54999, 55001, 55008, 55012,
+    55016, 55024, 55029, {f: 2, c: 55036}, 55040, 55044, 55057,
+    {f: 2, c: 55064}, 55068, 55072, {f: 2, c: 55080}, 55083, 55085,
+    {f: 2, c: 55092}, 55096, 55100, 55108, 55111, 55113, {f: 2, c: 55120},
+    55124, {f: 4, c: 55126}, {f: 2, c: 55136}, 55139, 55141, 55145, 55148,
+    55152, 55156, {f: 2, c: 55164}, 55169, {f: 2, c: 55176}, 55180, 55184,
+    {f: 2, c: 55192}, 55195, 55197, 20285, 20339, 20551, 20729, 21152, 21487,
+    21621, 21733, 22025, 23233, 23478, 26247, {f: 2, c: 26550}, 26607, 27468,
+    29634, 30146, 31292, 33499, 33540, 34903, 34952, 35382, [36040, 63747],
+    36303, 36603, 36838, 39381, 21051, 21364, 21508, 24682, 24932, 27580,
+    29647, 33050, 35258, [12179, 35282], 38307, 20355, 21002, 22718, 22904,
+    23014, [12082, 24178], 24185, 25031, 25536, 26438, 26604, 26751, 28567,
+    30286, 30475, 30965, 31240, 31487, 31777, 32925, [12169, 33390], 33393,
+    35563, 38291, 20075, 21917, 26359, 28212, 30883, 31469, 33883, 35088,
+    34638, 38824, 21208, 22350, 22570, 23884, 24863, 25022, 25121, 25954,
+    26577, 27204, 28187, [12130, 29976], 30131, 30435, 30640, 32058, 37039,
+    {f: 2, c: 37969}, 40853, 21283, 23724, 30002, 32987, 37440, 38296, 21083,
+    22536, 23004, 23713, 23831, 24247, 24378, 24394, 24951, 27743, 30074,
+    30086, 31968, 32115, 32177, 32652, 33108, 33313, 34193, 35137, 35611,
+    37628, [38477, 64009], 40007, 20171, 20215, 20491, 20977, 22607, 24887,
+    24894, 24936, 25913, 27114, 28433, 30117, 30342, 30422, 31623, 33445,
+    33995, 37799, 38283, 21888, 23458, 22353, 31923, 32697, 37301, 20520,
+    21435, 23621, 24040, 25298, 25454, 25818, 25831, 28192, 28844, 31067,
+    36317, 36382, 36989, 37445, 37624, 20094, 20214, 20581, [12081, 24062],
+    24314, 24838, 26967, 33137, 34388, 36423, 37749, 39467, 20062, 20625,
+    26480, 26688, 20745, 21133, 21138, 27298, 30652, 37392, 40660, 21163,
+    24623, 36850, 20552, 25001, 25581, 25802, 26684, 27268, 28608, 33160,
+    35233, 38548, 22533, 29309, [12125, 29356], 29956, 32121, 32365, 32937,
+    [12178, 35211, 64010], 35700, 36963, 40273, 25225, 27770, 28500, 32080,
+    32570, 35363, 20860, 24906, 31645, 35609, 37463, 37772, 20140, 20435,
+    20510, 20670, 20742, 21185, 21197, 21375, 22384, 22659, 24218, 24465,
+    24950, 25004, 25806, 25964, 26223, 26299, [26356, 63745], 26775, 28039,
+    28805, 28913, 29855, 29861, 29898, 30169, 30828, 30956, 31455, 31478,
+    32069, 32147, 32789, 32831, 33051, 33686, 35686, 36629, 36885, 37857,
+    38915, 38968, 39514, 39912, 20418, 21843, 22586, [22865, 63753], 23395,
+    23622, 24760, 25106, 26690, 26800, 26856, 28330, 30028, 30328, 30926,
+    31293, 31995, 32363, 32380, 35336, 35489, 35903, 38542, 40388, 21476,
+    21481, 21578, 21617, 22266, 22993, 23396, 23611, 24235, 25335, 25911,
+    25925, 25970, 26272, 26543, 27073, 27837, 30204, 30352, 30590, 31295,
+    32660, 32771, 32929, 33167, 33510, 33533, 33776, 34241, 34865, 34996,
+    35493, 36764, 37678, 38599, 39015, [12220, 39640], [12238, 40723], 21741,
+    26011, 26354, 26767, 31296, [12181, 35895], 40288, 22256, 22372, 23825,
+    26118, 26801, 26829, 28414, 29736, 34974, 39908, 27752, [12219, 39592],
+    20379, 20844, 20849, 21151, 23380, [12079, 24037], 24656, 24685, 25329,
+    25511, 25915, 29657, 31354, 34467, 36002, 38799, [20018, 63749], 23521,
+    [12093, 25096], 26524, [12128, 29916], 31185, 33747, 35463, 35506, 36328,
+    36942, 37707, 38982, [24275, 64011], 27112, 34303, 37101, 20896, 23448,
+    23532, 24931, 26874, 27454, 28748, 29743, 29912, 31649, 32592, 33733,
+    35264, 36011, 38364, 39208, 21038, 24669, 25324, 36866, 20362, 20809,
+    21281, 22745, 24291, 26336, 27960, 28826, 29378, 29654, 31568, 33009,
+    37979, 21350, 25499, 32619, 20054, 20608, 22602, 22750, 24618, 24871,
+    25296, 27088, 39745, 23439, 32024, 32945, 36703, 20132, 20689, 21676,
+    21932, 23308, 23968, 24039, 25898, 25934, 26657, 27211, 29409, 30350,
+    30703, 32094, 32761, 33184, 34126, 34527, 36611, 36686, 37066, 39171,
+    39509, 39851, 19992, 20037, 20061, 20167, 20465, 20855, 21246, 21312,
+    [12061, 21475], [21477, 63750], 21646, 22036, 22389, 22434, 23495, 23943,
+    24272, 25084, 25304, 25937, 26552, 26601, 27083, 27472, 27590, 27628,
+    27714, 28317, 28792, 29399, 29590, 29699, 30655, 30697, 31350, 32127,
+    32777, [12165, 33276], 33285, 33290, 33503, 34914, 35635, 36092, 36544,
+    36881, 37041, 37476, 37558, 39378, 39493, 40169, 40407,
+    [12244, 40860, 63751, 63752], 22283, 23616, 33738, 38816, 38827, 40628,
+    21531, 31384, 32676, 35033, 36557, 37089, 22528, 23624, 25496, 31391,
+    23470, [12088, 24339], 31353, 31406, 33422, 36524, 20518, 21048, 21240,
+    21367, 22280, 25331, 25458, 27402, 28099, 30519, 21413, 29527, 34152,
+    36470, 38357, 26426, 27331, 28528, 35437, 36556, 39243, 26231, 27512,
+    36020, [12225, 39740], 21483, 22317, 22862, 25542, 27131, 29674, 30789,
+    31418, 31429, 31998, 33909, 35215, 36211, 36917, 38312, 21243, 22343,
+    30023, 31584, 33740, 37406, 27224, 20811, 21067, 21127, 25119, 26840,
+    26997, 38553, 20677, 21156, 21220, 25027, [12100, 26020], 26681, 27135,
+    29822, 31563, 33465, 33771, 35250, 35641, 36817, 39241, 20170, 22935,
+    25810, 26129, 27278, 29748, 31105, 31165, 33449, {f: 2, c: 34942}, 35167,
+    37670, 20235, 21450, 24613, 25201, 27762, 32026, 32102, 20120, 20834,
+    30684, 32943, 20225, 20238, 20854, 20864, 21980, 22120, 22331, 22522,
+    22524, 22804, 22855, 22931, 23492, 23696, 23822, [12080, 24049], 24190,
+    24524, 25216, 26071, 26083, {f: 2, c: 26398}, 26462, 26827, 26820, 27231,
+    27450, 27683, 27773, 27778, 28103, 29592, 29734, 29738, 29826, 29859,
+    30072, 30079, 30849, 30959, 31041, {f: 2, c: 31047}, 31098, 31637, 32000,
+    32186, 32648, 32774, 32813, 32908, 35352, 35663, [35912, 63744], 36215,
+    37665, 37668, 39138, 39249, {f: 2, c: 39438}, 39525, 40594, 32202, 20342,
+    21513, 25326, 26708, [12198, 37329, 63754], 21931, 20794, 23068, 25062,
+    [25295, 63835], 25343, 37027, [35582, 63837], 26262, 29014, 38627, 25423,
+    25466, 21335, 26511, 26976, 28275, 30007, 32013, 34930, 22218, 23064,
+    20035, 20839, [22856, 63756], 26608, 32784, [12069, 22899, 63873],
+    [24180, 63886], [25754, 63889], [31178, 63893], [24565, 63907], 24684,
+    25288, [25467, 63908], [23527, 63839, 63914], 23511, 21162, 22900, 24361,
+    [24594, 63840], 29785, 39377, 28611, 33215, 36786, 24817, 33126,
+    [23615, 63933], 23273, 35365, [26491, 63944], [32016, 63951], 33021, 23612,
+    [27877, 63971], [21311, 63979], [28346, 63980], 22810, [33590, 63998],
+    [20025, 63838], 20150, 20294, 21934, 22296, 22727, 24406, 26039, 26086,
+    27264, 27573, 28237, 30701, 31471, 31774, 32222, 34507, 34962, 37170,
+    37723, 25787, 28606, 29562, 30136, 36948, 21846, 22349, 25018, 25812,
+    26311, 28129, 28251, 28525, 28601, 30192, 32835, 33213, 34113, 35203,
+    35527, 35674, 37663, 27795, 30035, 31572, 36367, 36957, 21776, 22530,
+    22616, 24162, 25095, 25758, 26848, 30070, [31958, 64003], 34739, 40680,
+    20195, 22408, 22382, [12068, 22823], 23565, 23729, 24118, 24453, 25140,
+    25825, 29619, 33274, 34955, 36024, 38538, 40667, [23429, 64004], 24503,
+    24755, 20498, [12049, 20992], 21040, 22294, 22581, 22615, 23566, 23648,
+    23798, 23947, [24230, 64001], 24466, 24764, 25361, 25481, 25623, 26691,
+    26873, 27330, 28120, 28193, 28372, 28644, 29182, 30428, 30585, 31153,
+    31291, 33796, 35241, 36077, 36339, 36424, 36867, 36884, 36947, 37117,
+    37709, 38518, 38876, 27602, 28678, 29272, 29346, 29544, 30563, 31167,
+    31716, 32411, [35712, 63834], 22697, 24775, 25958, 26109, 26302, 27788,
+    28958, 29129, 35930, 38931, 20077, 31361, 20189, 20908, 20941, 21205,
+    21516, 24999, 26481, 26704, 26847, [27934, 64005], 28540, 30140, 30643,
+    31461, 33012, 33891, 37509, 20828, [12099, 26007], 26460, 26515, 30168,
+    31431, 33651, [12182, 35910], 36887, 38957, 23663, 33216, 33434, 36929,
+    36975, 37389, 24471, 23965, 27225, 29128, 30331, 31561, 34276, 35588,
+    37159, 39472, [21895, 63755], [25078, 63757], [30313, 63758],
+    [32645, 63759], [34367, 63760], [34746, 63761], [35064, 63762],
+    [37007, 63763], [27931, 63765], [28889, 63766], [29662, 63767], 32097,
+    [33853, 63768], [37226, 63769], [39409, 63770], [20098, 63771],
+    [21365, 63772], [27396, 63773], 27410, 28734, [29211, 63774],
+    [34349, 63775], [40478, 63776], 21068, 36771, [23888, 63777], 25829, 25900,
+    27414, [28651, 63778], 31811, 32412, [34253, 63779], [35172, 63780], 35261,
+    [25289, 63781], [33240, 63782], [34847, 63783], [24266, 63784],
+    [26391, 63785], [28010, 63786], [29436, 63787], 29701, 29807, 34690,
+    [37086, 63788], [20358, 63789], 23821, 24480, 33802, [20919, 63790],
+    [25504, 63861], [30053, 63862], [20142, 63863], 20486, [20841, 63864],
+    [20937, 63865], [26753, 63866], 27153, 31918, 31921, [31975, 63867],
+    [33391, 63868], [35538, 63869], 36635, [37327, 63870], 20406, 20791,
+    [21237, 63871], [21570, 63872], [24300, 63874], 24942, 25150,
+    [26053, 63875], 27354, [28670, 63876], [31018, 63877], 34268, 34851,
+    [38317, 63878], 39522, [39530, 63879], [40599, 63880], [40654, 63881],
+    [12050, 21147, 63882], [26310, 63883], [27511, 63884], 28701, 31019,
+    [36706, 63885], 38722, [24976, 63887], [25088, 63888], 25891,
+    [28451, 63890], [29001, 63891], [29833, 63892], [32244, 63894],
+    [32879, 63895], [34030, 63897], [36646, 63896], [36899, 63898],
+    [37706, 63899], 20925, [21015, 63900], [21155, 63901], 27916,
+    [28872, 63903], [35010, 63904], [24265, 63906], 25986, [27566, 63909],
+    28610, [31806, 63910], [29557, 63911], [20196, 63912], 20278,
+    [22265, 63913], 23738, [23994, 63915], [24604, 63916], [29618, 63917],
+    31533, [32666, 63919], 32718, [32838, 63920], 36894, [37428, 63921],
+    [38646, 63922], [38728, 63923], [38936, 63924], 40801, [20363, 63925],
+    28583, [31150, 63926], [37300, 63927], [38583, 63928], [21214, 63791],
+    25736, [25796, 63792], [27347, 63793], 28510, 28696, [29200, 63794],
+    [30439, 63795], [12156, 32769, 63796], [34310, 63797], [34396, 63798],
+    [36335, 63799], 36613, [38706, 63800], [39791, 63801], [40442, 63802],
+    [12228, 40565], [30860, 63803], [31103, 63804], [32160, 63805],
+    [33737, 63806], [37636, 63807], [12229, 40575, 63808], 40595,
+    [35542, 63809], [22751, 63810], [24324, 63811], 26407, 28711, 29903,
+    [31840, 63812], [32894, 63813], 20769, 28712, [29282, 63814],
+    [30922, 63815], [36034, 63816], 36058, 36084, [38647, 63817],
+    [20102, 63930], [20698, 63931], [23534, 63932], 24278, [26009, 63934],
+    [29134, 63936], [30274, 63937], 30637, 32842, [34044, 63938],
+    [36988, 63939], 39719, [12243, 40845, 63940], [22744, 63818], 23105,
+    [23650, 63819], [27155, 63820], [28122, 63821], [28431, 63822], 30267,
+    [32047, 63823], [32311, 63824], 34078, 35128, 37860, [38475, 63825],
+    [21129, 63943], 26066, [26611, 63945], 27060, [27969, 63946],
+    [28316, 63947], 28687, [29705, 63948], 29792, [30041, 63949], 30244,
+    [30827, 63950], 35628, [39006, 63952], [20845, 63953], [25134, 63954],
+    [38520, 63955], 20374, [20523, 63956], [23833, 63957], [28138, 63958],
+    32184, [36650, 63959], [24459, 63960], [24900, 63961], [26647, 63962],
+    [38534, 63964], [21202, 63826], [32907, 63827], [20956, 63828],
+    [20940, 63829], 26974, [31260, 63830], [32190, 63831], [33777, 63832],
+    [38517, 63833], 20442, [21033, 63965], 21400, [21519, 63966], 21774,
+    [23653, 63967], 24743, [26446, 63969], [26792, 63970], 28012, 29313, 29432,
+    [29702, 63972], 29827, [30178, 63973], 31852, [32633, 63974], 32696, 33673,
+    [35023, 63975], [35041, 63976], [12197, 37324, 63977], 37328,
+    [38626, 63978], 39881, [21533, 63981], 28542, [29136, 63982],
+    [29848, 63983], [34298, 63984], 36522, [38563, 63985], [40023, 63986],
+    [40607, 63987], [26519, 63988], [28107, 63989], 29747, [33256, 63990],
+    38678, 30764, [12148, 31435, 63991], [31520, 63992], [31890, 63993], 25705,
+    29802, 30194, 30908, 30952, [12218, 39340], 39764, [12231, 40635], 23518,
+    24149, 28448, 33180, 33707, 37000, 19975, 21325, 23081, 24018, 24398,
+    24930, 25405, 26217, 26364, 28415, 28459, 28771, 30622, 33836, 34067,
+    34875, 36627, 39237, 39995, 21788, 25273, 26411, 27819, 33545, 35178,
+    38778, 20129, 22916, {f: 2, c: 24536}, 26395, 32178, 32596, 33426, 33579,
+    33725, 36638, 37017, 22475, 22969, 23186, 23504, 26151, 26522, 26757,
+    27599, 29028, 32629, 36023, 36067, 36993, 39749, 33032, 35978, 38476,
+    39488, [12230, 40613], 23391, 27667, 29467, 30450, 30431, 33804, 20906,
+    35219, 20813, 20885, 21193, 26825, 27796, 30468, 30496, 32191, 32236,
+    [12207, 38754], 40629, 28357, 34065, 20901, 21517, 21629, 26126, 26269,
+    26919, 28319, [12139, 30399], 30609, 33559, 33986, 34719, 37225, 37528,
+    40180, 34946, 20398, 20882, 21215, 22982, 24125, 24917, {f: 2, c: 25720},
+    26286, 26576, 27169, 27597, [12113, 27611], 29279, 29281, 29761, 30520,
+    [12141, 30683], 32791, 33468, 33541, 35584, 35624, 35980, [12106, 26408],
+    27792, 29287, [12140, 30446], 30566, 31302, 40361, 27519, 27794, 22818,
+    26406, 33945, 21359, 22675, 22937, 24287, 25551, 26164, 26483, 28218,
+    29483, 31447, 33495, 37672, 21209, 24043, 25006, 25035, 25098, 25287,
+    25771, [12102, 26080], 26969, 27494, [12111, 27595], 28961, 29687, 30045,
+    32326, 33310, 33538, 34154, 35491, 36031, 38695, 40289, 22696, 40664,
+    20497, 21006, 21563, 21839, [12098, 25991], 27766, {f: 2, c: 32010}, 32862,
+    34442, [12200, 38272], 38639, 21247, 27797, 29289, 21619, 23194, 23614,
+    23883, 24396, 24494, 26410, 26806, 26979, 28220, 28228, 30473,
+    [12150, 31859], 32654, 34183, 35598, 36855, 38753, 40692, 23735, 24758,
+    24845, 25003, 25935, {f: 2, c: 26107}, 27665, 27887, 29599, 29641, 32225,
+    38292, 23494, 34588, 35600, 21085, 21338, 25293, 25615, 25778, 26420,
+    27192, 27850, 29632, 29854, 31636, 31893, 32283, 33162, 33334, 34180,
+    36843, 38649, 39361, 20276, 21322, 21453, 21467, 25292, 25644, 25856,
+    26001, 27075, 27886, 28504, 29677, 30036, 30242, 30436, 30460, 30928,
+    [30971, 63844], 31020, 32070, 33324, 34784, 36820, 38930, 39151, 21187,
+    25300, 25765, 28196, 28497, 30332, 36299, 37297, 37474, 39662, 39747,
+    20515, 20621, 22346, 22952, 23592, 24135, 24439, 25151, 25918,
+    [12101, 26041], 26049, 26121, 26507, 27036, 28354, 30917, 32033, 32938,
+    33152, 33323, 33459, 33953, 34444, 35370, 35607, 37030, 38450, 40848,
+    20493, 20467, 22521, 24472, 25308, 25490, 26479, 28227, 28953, 30403,
+    32972, 32986, {f: 2, c: 35060}, 35097, 36064, 36649, 37197, 38506, 20271,
+    20336, 24091, 26575, 26658, [12137, 30333], 30334, 39748, 24161, 27146,
+    29033, 29140, 30058, 32321, 34115, 34281, 39132, 20240, 31567, 32624,
+    38309, 20961, 24070, 26805, 27710, 27726, 27867, 29359, 31684, 33539,
+    27861, 29754, 20731, 21128, 22721, 25816, 27287, 29863, 30294, 30887,
+    34327, 38370, 38713, 21342, 24321, 35722, 36776, 36783, 37002, 21029,
+    30629, 40009, 40712, 19993, 20482, 20853, 23643, 24183, 26142, 26170,
+    26564, 26821, 28851, 29953, 30149, 31177, 31453, 36647, 39200, 39432,
+    20445, 22561, 22577, 23542, 26222, 27493, 27921, 28282, 28541, 29668,
+    29995, 33769, 35036, 35091, 35676, 36628, 20239, 20693, 21264,
+    [12056, 21340], 23443, [24489, 63846], 26381, 31119, 33145, 33583, 34068,
+    35079, 35206, 36665, [36667, 64007], 39333, 39954, 26412, 20086, 20472,
+    22857, 23553, {f: 2, c: 23791}, 25447, 26834, 28925, 29090, 29739, 32299,
+    34028, 34562, 36898, 37586, 40179, [19981, 63847], 20184, 20463, 20613,
+    21078, 21103, 21542, 21648, 22496, 22827, 23142, 23386, 23413, 23500,
+    24220, 25206, 25975, 26023, 28014, 28325, [12119, 29238], 31526, 31807,
+    [12152, 32566], {f: 2, c: 33104}, 33178, 33344, 33433, 33705, 35331, 36000,
+    36070, 36091, 36212, 36282, 37096, 37340, [12201, 38428], 38468, 39385,
+    40167, [21271, 63843], 20998, 21545, 22132, 22707, 22868, 22894, 24575,
+    24996, 25198, 26128, 27774, 28954, 30406, 31881, 31966, 32027, 33452,
+    36033, 38640, 20315, 24343, 24447, 25282, 23849, 26379, 26842, 30844,
+    32323, 40300, 19989, 20633, [12052, 21269], 21290, 21329, 22915, 23138,
+    24199, 24754, 24970, 25161, 25209, 26000, 26503, 27047, [12112, 27604],
+    {f: 3, c: 27606}, 27832, 29749, 30202, 30738, 30865, 31189, 31192, 31875,
+    32203, 32737, 32933, 33086, 33218, 33778, 34586, 35048, 35513, 35692,
+    36027, 37145, [12206, 38750], [12214, 39131], [12240, 40763], 22188, 23338,
+    24428, 25996, 27315, 27567, 27996, 28657, 28693, 29277, 29613, 36007,
+    36051, 38971, 24977, 27703, 32856, 39425, 20045, 20107, 20123, 20181,
+    20282, 20284, 20351, 20447, 20735, 21490, 21496, 21766, 21987, 22235,
+    [12064, 22763], 22882, 23057, 23531, 23546, 23556, 24051, 24107, 24473,
+    24605, 25448, 26012, 26031, 26614, 26619, 26797, 27515, 27801, 27863,
+    28195, 28681, 29509, 30722, 31038, 31040, 31072, 31169, 31721, 32023,
+    32114, 32902, 33293, 33678, 34001, 34503, 35039, 35408, 35422, 35613,
+    36060, 36198, 36781, 37034, 39164, 39391, 40605, 21066, 26388, 20632,
+    21034, [12077, 23665], 25955, 27733, 29642, 29987, 30109, 31639, 33948,
+    37240, 38704, 20087, 25746, [27578, 63856], 29022, 34217, 19977, 26441,
+    26862, 28183, 33439, 34072, 34923, 25591, 28545, 37394, 39087, 19978,
+    20663, 20687, 20767, 21830, 21930, 22039, 23360, 23577, 23776, 24120,
+    24202, 24224, 24258, 24819, 26705, 27233, 28248, 29245, 29248,
+    [29376, 63994], 30456, 31077, 31665, 32724, 35059, 35316, 35443, 35937,
+    36062, 38684, [22622, 63852], 29885, 36093, 21959, 31329, [32034, 63850],
+    [12170, 33394], 29298, [12131, 29983], 29989, 31513, 22661, 22779, 23996,
+    24207, 24246, 24464, 24661, 25234, 25471, 25933, 26257, 26329, 26360,
+    26646, 26866, 29312, 29790, 31598, 32110, 32214, 32626, 32997, 33298,
+    34223, 35199, 35475, 36893, 37604, [12233, 40653], [12239, 40736],
+    [12067, 22805], 22893, 24109, 24796, 26132, 26227, 26512, 27728, 28101,
+    28511, [12143, 30707], 30889, 33990, 37323, 37675, 20185, 20682, 20808,
+    21892, 23307, 23459, 25159, 25982, 26059, 28210, 29053, 29697, 29764,
+    29831, 29887, 30316, 31146, 32218, 32341, 32680, 33146, 33203, 33337,
+    34330, 34796, 35445, 36323, 36984, 37521, 37925, 39245, 39854, 21352,
+    23633, 26964, 27844, 27945, 28203, [12166, 33292], 34203, 35131, 35373,
+    [35498, 63855, 63905], 38634, 40807, 21089, 26297, 27570, 32406, 34814,
+    36109, 38275, 38493, 25885, 28041, 29166, 22478, 22995, 23468, 24615,
+    24826, 25104, 26143, 26207, 29481, 29689, 30427, [30465, 63853], 31596,
+    32854, 32882, 33125, 35488, 37266, 19990, 21218, 27506, 27927, 31237,
+    31545, 32048, 36016, 21484, 22063, 22609, 23477, [12073, 23567], 23569,
+    24034, 25152, 25475, 25620, 26157, 26803, 27836, 28040, 28335, 28703,
+    28836, 29138, 29990, 30095, 30094, 30233, 31505, 31712, 31787, 32032,
+    32057, 34092, 34157, 34311, 35380, 36877, 36961, 37045, 37559, 38902,
+    39479, 20439, 23660, 26463, 28049, 31903, 32396, 35606, 36118, 36895,
+    23403, 24061, 25613, 33984, 36956, 39137, [29575, 63841, 63963], 23435,
+    24730, 26494, 28126, 35359, 35494, 36865, 38924, 21047, 28753, 30862,
+    37782, 34928, 37335, 20462, 21463, 22013, 22234, 22402, 22781, 23234,
+    23432, 23723, 23744, 24101, 24833, 25101, [12095, 25163], 25480, 25628,
+    25910, [25976, 63849], 27193, 27530, [12116, 27700], 27929, 28465, 29159,
+    29417, 29560, 29703, 29874, 30246, 30561, 31168, 31319, 31466, 31929,
+    32143, 32172, 32353, 32670, 33065, 33585, 33936, 34010, 34282, 34966,
+    35504, 35728, 36664, 36930, 36995, 37228, 37526, 37561, 38539,
+    {f: 2, c: 38567}, 38614, 38656, 38920, [12216, 39318], 39635, 39706, 21460,
+    22654, 22809, 23408, 23487, 28113, 28506, 29087, 29729, 29881, 32901,
+    33789, 24033, 24455, 24490, 24642, 26092, 26642, 26991, 27219, 27529,
+    27957, 28147, 29667, 30462, 30636, 31565, 32020, 33059, 33308, 33600,
+    34036, 34147, 35426, 35524, 37255, 37662, 38918, 39348, 25100, 34899,
+    36848, 37477, 23815, 23847, 23913, 29791, 33181, 34664, 28629,
+    [25342, 63859], 32722, 35126, 35186, 19998, 20056, 20711, 21213, 21319,
+    25215, 26119, 32361, 34821, 38494, 20365, 21273, 22070, 22987, 23204,
+    [12075, 23608], 23630, 23629, 24066, 24337, 24643, 26045, 26159, 26178,
+    26558, 26612, 29468, [12142, 30690], [12144, 31034], 32709, 33940, 33997,
+    35222, 35430, 35433, 35553, [12183, 35925], 35962, 22516, 23508, 24335,
+    24687, 25325, 26893, 27542, 28252, 29060, 31698, 34645, [35672, 63996],
+    36606, [12215, 39135], 39166, 20280, 20353, 20449, 21627, 23072, 23480,
+    24892, 26032, 26216, 29180, 30003, 31070, 32051, 33102, [12162, 33251],
+    33688, 34218, 34254, 34563, 35338, [12189, 36523], [12191, 36763], 36805,
+    22833, 23460, 23526, 24713, 23529, 23563, [12092, 24515], 27777, 28145,
+    28683, 29978, 33455, 35574, [20160, 63997], [12055, 21313], 38617,
+    [12114, 27663], 20126, 20420, 20818, 21854, 23077, 23784, 25105,
+    [12123, 29273], 33469, 33706, 34558, 34905, 35357, 38463, 38597, 39187,
+    40201, 40285, 22538, 23731, 23997, 24132, [24801, 63929], 24853, 25569,
+    [27138, 63764, 63836, 63935], 28197, 37122, 37716, 38990, 39952, 40823,
+    23433, 23736, 25353, 26191, 26696, 30524, 38593, 38797, 38996, 39839,
+    26017, 35585, 36555, 38332, 21813, 23721, 24022, 24245, 26263, 30284,
+    33780, 38343, 22739, 25276, 29390, 40232, 20208, 22830, 24591, 26171,
+    27523, 31207, 40230, 21395, 21696, 22467, 23830, 24859, 26326, 28079,
+    30861, 33406, 38552, 38724, 21380, 25212, 25494, 28082, 32266, 33099,
+    38989, 27387, 32588, 40367, 40474, 20063, 20539, 20918, 22812, 24825,
+    25590, 26928, 29242, 32822, 37326, 24369, 32004, [33509, 63860], 33903,
+    33979, 34277, 36493, 20335, 22756, 23363, 24665, 25562, 25880, 25965,
+    26264, 26954, 27171, 27915, 28673, 29036, 30162, 30221, 31155, 31344,
+    [12154, 32650], 35140, 35731, 37312, 38525, 39178, 22276, 24481, 26044,
+    28417, 30208, 31142, 35486, 39341, [12226, 39770], 40812, 20740, 25014,
+    25233, 27277, 33222, 20547, 22576, 24422, 28937, [12180, 35328], 35578,
+    23420, 34326, 20474, 20796, 22196, 22852, 25513, 28153, 23978, 26989,
+    20870, 20104, 20313, 22914, 27487, 27741, 29877, 30998, 33287, 33349,
+    33593, 36671, 36701, 39192, 20134, 22495, 24441, [26131, 63968], 30123,
+    32377, 35695, 36870, 39515, 22181, 22567, 23032, 23071, 23476, 24310,
+    25424, 25403, 26941, 27783, 27839, 28046, 28051, 28149, 28436, 28895,
+    28982, 29017, 29123, 29141, 30799, 30831, 31605, 32227, 32303, 34893,
+    36575, 37467, 40182, 24709, 28037, 29105, 38321, 21421, 26579, 28814,
+    28976, 29744, 33398, 33490, 38331, 39653, 40573, 26308, 29121,
+    [33865, 63854], 22603, 23992, 24433, 26144, 26254, 27001, 27054, 27704,
+    27891, 28214, 28481, 28634, 28699, 28719, 29008, 29151, 29552, 29787,
+    29908, 30408, 31310, 32403, 33521, 35424, 36814, 37704, 38681, 20034,
+    20522, 21000, 21473, 26355, 27757, 28618, 29450, 30591, 31330, 33454,
+    34269, 34306, 35028, 35427, 35709, 35947, 37555, 38675, 38928, 20116,
+    20237, 20425, 20658, 21320, 21566, 21555, 21978, 22626, 22714, 22887,
+    23067, 23524, 24735, 25034, 25942, 26111, 26212, 26791, 27738, 28595,
+    28879, 29100, 29522, 31613, 34568, 35492, 39986, 40711, 23627, 27779,
+    29508, [12127, 29577], 37434, 28331, 29797, 30239, 31337, 32277, 34314,
+    20800, 22725, 25793, 29934, 29973, 30320, 32705, 37013, 38605, 39252,
+    28198, [12129, 29926], {f: 2, c: 31401}, 33253, 34521, 34680, 35355, 23113,
+    23436, 23451, 26785, 26880, 28003, 29609, 29715, 29740, 30871, 32233,
+    32747, 33048, 33109, 33694, 35916, [38446, 63942], 38929, [12104, 26352],
+    24448, 26106, 26505, 27754, 29579, 20525, 23043, 27498, 30702, 22806,
+    23916, 24013, 29477, 30031, 20709, 20985, 22575, 22829, 22934, 23002,
+    23525, 23970, 25303, 25622, 25747, 25854, 26332, 27208, 29183, 29796,
+    31368, 31407, 32327, 32350, 32768, 33136, 34799, 35201, 35616, 36953,
+    36992, 39250, 24958, 27442, 28020, 32287, 35109, 36785, 20433, 20653,
+    20887, 21191, 22471, 22665, 23481, 24248, 24898, 27029, 28044, 28263,
+    28342, 29076, 29794, [12132, 29992], 29996, 32883, 33592, 33993, 36362,
+    37780, 37854, 20110, 20305, 20598, 20778, [12060, 21448], 21451, 21491,
+    23431, 23507, 23588, 24858, 24962, 26100, [12124, 29275], 29591, 29760,
+    30402, 31056, 31121, 31161, 32006, [12155, 32701], 33419, 34261, 34398,
+    36802, 36935, 37109, 37354, 38533, [12204, 38632], 38633, 21206, 24423,
+    26093, 26161, 26671, 29020, 31286, 37057, 38922, 20113, 27218, 27550,
+    28560, 29065, 32792, 33464, 34131, 36939, 38549, 38642, 38907, 34074,
+    39729, 20112, 29066, 38596, 20803, 21407, 21729, 22291, 22290, 22435,
+    23195, 23236, 23491, 24616, 24895, 25588, 27781, 27961, 28274, 28304,
+    29232, 29503, 29783, 33489, 34945, 36677, 36960, 38498, 39000, 40219,
+    [12105, 26376], 36234, 37470, 20301, 20553, 20702, 21361, 22285, 22996,
+    23041, 23561, 24944, 26256, 28205, 29234, 29771, 32239, 32963, 33806,
+    33894, 34111, 34655, 34907, 35096, 35586, 36949, [12209, 38859], 39759,
+    20083, 20369, 20754, 20842, 21807, 21929, 23418, 23461, {f: 2, c: 24188},
+    24254, 24736, 24799, {f: 2, c: 24840}, 25540, 25912, 26377, 26580, 26586,
+    {f: 2, c: 26977}, 27833, 27943, 28216, 28641, {f: 2, c: 29494}, 29788,
+    30001, 30290, 32173, 33278, 33848, 35029, 35480, 35547, 35565, 36400,
+    36418, 36938, 36926, 36986, [12195, 37193], 37321, 37742, 22537, 27603,
+    [12161, 32905], 32946, 20801, 22891, 23609, 28516, 29607, 32996, 36103,
+    37399, 38287, [12160, 32895], 25102, 28700, 32104, 34701, 22432, 24681,
+    24903, 27575, 35518, 37504, 38577, [12036, 20057], 21535, 28139, 34093,
+    38512, [12211, 38899], 39150, 25558, 27875, [12194, 37009], 20957, 25033,
+    33210, 40441, 20381, 20506, 20736, 23452, 24847, 25087, 25836, 26885,
+    27589, 30097, 30691, 32681, 33380, 34191, 34811, [12176, 34915], 35516,
+    35696, 37291, [12038, 20108], 20197, 20234, 22839, 23016, 24050, 24347,
+    24411, 24609, 29246, 29669, [30064, 63842], 30157, 31227, [12157, 32780],
+    [12159, 32819], 32900, 33505, 33617, 36029, 36019, 36999, 39156, 39180,
+    28727, 30410, 32714, 32716, 32764, 35610, [12040, 20154], 20161, 20995,
+    21360, [21693, 63902], 22240, 23035, 23493, 24341, 24525, 28270, 32106,
+    33589, 34451, 35469, 38765, 38775, [12032, 19968], 20314, 20350, 22777,
+    [12103, 26085], 28322, 36920, 37808, 39353, 20219, 22764, 22922, 23001,
+    24641, 31252, 33615, 36035, [12042, 20837], 21316, 20173, 21097, 23381,
+    33471, 20180, [21050, 63999], 21672, 22985, 23039, [12070, 23376], 23383,
+    23388, 24675, 24904, 28363, [28825, 63995], 29038, 29574, 29943, 30133,
+    30913, 32043, 32773, [12163, 33258], 33576, 34071, 34249, 35566, 36039,
+    38604, 20316, 21242, 22204, 26027, 26152, 28796, 28856, 29237, 32189,
+    33421, 37196, 38592, 40306, 23409, 26855, 27544, 28538, 30430, 23697,
+    26283, 28507, 31668, 31786, 34870, 38620, 19976, 20183, 21280, 22580,
+    22715, 22767, 22892, 23559, 24115, 24196, 24373, 25484, 26290, 26454,
+    27167, 27299, 27404, 28479, 29254, 29520, 29835, 31456, 31911, 33144,
+    33247, 33255, 33674, 33900, 34083, 34196, 34255, 35037, 36115, 37292,
+    [12199, 38263], 38556, 20877, 21705, 22312, 23472, 25165, 26448, 26685,
+    26771, 28221, 28371, 28797, 32289, 35009, 36001, 36617, 40779, 40782,
+    29229, 31631, 35533, 37658, 20295, 20302, 20786, 21632, 22992, 24213,
+    25269, 26485, 26990, 27159, 27822, 28186, 29401, 29482, 30141, 31672,
+    32053, 33511, 33785, 33879, 34295, 35419, 36015, 36487, 36889, 37048,
+    38606, 40799, 21219, 21514, 23265, 23490, 25688, 25973, 28404, 29380,
+    30340, 31309, 31515, 31821, 32318, 32735, 33659, 35627, 36042,
+    [12186, 36196], 36321, 36447, 36842, 36857, 36969, 37841, 20291, 20346,
+    20659, 20840, 20856, 21069, 21098, 22625, 22652, 22880, 23560, 23637,
+    24283, 24731, 25136, 26643, 27583, 27656, 28593, 29006, 29728,
+    [12133, 30000], 30008, 30033, 30322, 31564, 31627, 31661, 31686, 32399,
+    35438, 36670, 36681, 37439, 37523, 37666, 37931, 38651, 39002, 39019,
+    39198, [20999, 64000], 25130, 25240, 27993, 30308, 31434, 31680, 32118,
+    21344, 23742, 24215, 28472, 28857, 31896, 38673, 39822, 40670, 25509,
+    25722, 34678, 19969, 20117, 20141, 20572, 20597, 21576, 22979, 23450,
+    24128, 24237, 24311, 24449, 24773, 25402, 25919, 25972, 26060, 26230,
+    26232, 26622, 26984, 27273, 27491, 27712, 28096, 28136, 28191, 28254,
+    28702, 28833, 29582, 29693, 30010, 30555, 30855, 31118, 31243, 31357,
+    31934, 32142, 33351, 35330, 35562, 35998, 37165, 37194, 37336, 37478,
+    37580, 37664, 38662, 38742, 38748, 38914, [12237, 40718], 21046, 21137,
+    21884, 22564, 24093, 24351, 24716, 25552, 26799, 28639, 31085, 31532,
+    33229, 34234, 35069, 35576, 36420, 37261, 38500, 38555, 38717, 38988,
+    [12241, 40778], 20430, 20806, 20939, 21161, 22066, 24340, 24427, 25514,
+    25805, 26089, 26177, 26362, 26361, 26397, 26781, 26839, 27133, 28437,
+    28526, 29031, 29157, [12118, 29226], 29866, 30522, 31062, 31066, 31199,
+    31264, 31381, 31895, 31967, 32068, 32368, 32903, 34299, 34468, 35412,
+    35519, 36249, 36481, 36896, 36973, 37347, 38459, 38613, [12227, 40165],
+    26063, 31751, [12188, 36275], 37827, 23384, 23562, 21330, 25305, 29469,
+    20519, 23447, 24478, 24752, 24939, 26837, 28121, 29742, 31278, 32066,
+    32156, 32305, 33131, 36394, 36405, 37758, 37912, 20304, 22352, 24038,
+    24231, 25387, 32618, 20027, 20303, 20367, 20570, 23005, 32964, 21610,
+    21608, 22014, 22863, 23449, 24030, 24282, 26205, 26417, 26609, 26666,
+    27880, 27954, 28234, 28557, 28855, 29664, 30087, 31820, 32002, 32044,
+    32162, [12168, 33311], 34523, 35387, 35461, [12187, 36208], 36490, 36659,
+    36913, 37198, 37202, 37956, 39376, [12149, 31481], 31909, 20426, 20737,
+    20934, 22472, 23535, 23803, 26201, 27197, 27994, 28310, 28652, 28940,
+    30063, 31459, 34850, 36897, 36981, 38603, 39423, 33537, 20013, 20210,
+    34886, 37325, 21373, 27355, 26987, 27713, 33914, 22686, 24974, 26366,
+    25327, 28893, 29969, 30151, 32338, 33976, 35657, 36104, 20043, 21482,
+    21675, 22320, 22336, 24535, 25345, 25351, 25711, [12096, 25903], 26088,
+    26234, 26525, 26547, [12108, 27490], 27744, 27802, 28460, 30693, 30757,
+    31049, 31063, 32025, 32930, 33026, [12164, 33267], 33437, 33463, 34584,
+    35468, 36100, 36286, 36978, 30452, 31257, 31287, 32340, 32887, 21767,
+    21972, 22645, 25391, 25634, 26185, 26187, 26733, 27035, 27524, 27941,
+    28337, 29645, 29800, 29857, 30043, 30137, 30433, 30494, 30603, 31206,
+    32265, 32285, 33275, 34095, 34967, 35386, 36049, 36587,
+    [12192, 36784, 63857], 36914, 37805, 38499, 38515, 38663, 20356, 21489,
+    23018, 23241, 24089, 26702, 29894, 30142, 31209, 31378, 33187, 34541,
+    36074, 36300, 36845, 26015, 26389, 22519, 28503, 32221, 36655, 37878,
+    38598, 24501, 25074, 28548, 19988, 20376, 20511, 21449, 21983, 23919,
+    24046, 27425, 27492, 30923, 31642, 36425, [12190, 36554, 63746], 36974,
+    25417, 25662, 30528, 31364, 37679, 38015, 40810, 25776, 28591, 29158,
+    29864, 29914, 31428, 31762, 32386, 31922, 32408, 35738, 36106, 38013,
+    39184, 39244, 21049, 23519, 25830, 26413, 32046, 20717, [21443, 63851],
+    22649, {f: 2, c: 24920}, 25082, 26028, 31449, 35730, 35734, 20489, 20513,
+    21109, 21809, 23100, 24288, 24432, 24884, 25950, 26124, 26166, 26274,
+    27085, 28356, 28466, 29462, 30241, 31379, 33081, 33369, 33750, 33980,
+    20661, 22512, 23488, 23528, 24425, 25505, 30758, 32181, 33756, 34081,
+    37319, 37365, 20874, 26613, 31574, 36012, 20932, 22971, 24765, 34389,
+    20508, 21076, 23610, 24957, 25114, [25299, 64002], 25842, 26021, 28364,
+    30240, 33034, 36448, 38495, 38587, 20191, 21315, 21912, 22825, 24029,
+    25797, 27849, 28154, 29588, 31359, [12167, 33307], 34214, 36068, 36368,
+    36983, 37351, 38369, 38433, 38854, 20984, 21746, 21894, 24505, 25764,
+    28552, 32180, 36639, 36685, 37941, 20681, 23574, 27838, 28155, 29979,
+    30651, 31805, 31844, 35449, 35522, 22558, 22974, 24086, 25463, 29266,
+    30090, 30571, 35548, 36028, 36626, 24307, 26228, 28152, 32893, 33729,
+    35531, [12205, 38737], 39894, 21059, 26367, 28053, 28399, 32224, 35558,
+    36910, 36958, 39636, 21021, 21119, 21736, 24980, 25220, 25307, 26786,
+    26898, 26970, 27189, 28818, 28966, 30813, 30977, 30990, 31186, 31245,
+    32918, [12171, 33400], 33493, 33609, 34121, 35970, 36229, 37218, 37259,
+    37294, 20419, 22225, 29165, 30679, 34560, 35320, [12072, 23544], 24534,
+    26449, 37032, 21474, 22618, 23541, 24740, 24961, 25696, 32317, 32880,
+    34085, 37507, 25774, 20652, 23828, 26368, 22684, 25277, 25512, 26894,
+    27000, 27166, 28267, 30394, 31179, 33467, 33833, 35535, 36264, 36861,
+    37138, 37195, 37276, 37648, 37656, 37786, 38619, 39478, 39949, 19985,
+    30044, 31069, 31482, 31569, 31689, 32302, 33988, 36441, 36468, 36600,
+    36880, 26149, 26943, 29763, 20986, 26414, 40668, 20805, 24544, 27798,
+    34802, 34909, 34935, 24756, 33205, 33795, 36101, 21462, 21561, 22068,
+    23094, 23601, 28810, 32736, 32858, 33030, 33261, 36259, 37257, 39519,
+    40434, 20596, 20164, 21408, 24827, 28204, 23652, 20360, 20516, 21988,
+    23769, 24159, 24677, 26772, 27835, 28100, 29118, 30164, 30196, 30305,
+    31258, 31305, 32199, 32251, 32622, 33268, 34473, 36636, 38601, 39347,
+    [12242, 40786], 21063, 21189, 39149, 35242, 19971, 26578, 28422, 20405,
+    23522, 26517, [27784, 63858], 28024, 29723, 30759, 37341, 37756, 34756,
+    31204, 31281, 24555, 20182, 21668, 21822, 22702, 22949, 24816, 25171,
+    25302, 26422, 26965, 33333, 38464, 39345, 39389, 20524, 21331, 21828,
+    22396, 25176, 25826, 26219, 26589, 28609, 28655, 29730, 29752, 35351,
+    37944, 21585, 22022, 22374, 24392, 24986, 27470, 28760, 28845, 32187,
+    35477, 22890, 33067, 25506, 30472, 32829, 36010, 22612, 25645, 27067,
+    23445, 24081, 28271, 34153, 20812, 21488, 22826, 24608, 24907, 27526,
+    27760, 27888, 31518, 32974, 33492, 36294, 37040, 39089, 25799, 28580,
+    25745, 25860, 20814, 21520, [12063, 22303], 35342, 24927, 26742, 30171,
+    31570, 32113, 36890, 22534, 27084, 33151, 35114, 36864, 38969, 20600,
+    22871, 22956, 25237, 36879, 39722, 24925, 29305, 38358, 22369, 23110,
+    24052, 25226, 25773, 25850, 26487, 27874, 27966, 29228, 29750, 30772,
+    32631, 33453, 36315, 38935, 21028, 22338, 26495, 29256, 29923, 36009,
+    36774, 37393, 38442, [12043, 20843], 21485, 25420, 20329, 21764, 24726,
+    25943, 27803, 28031, 29260, 29437, 31255, 35207, [12185, 35997], 24429,
+    28558, 28921, 33192, 24846, [20415, 63845], 20559, 25153, [12122, 29255],
+    31687, 32232, 32745, 36941, 38829, 39449, 36022, 22378, 24179, 26544,
+    33805, 35413, 21536, 23318, 24163, 24290, 24330, 25987, 32954, 34109,
+    38281, 38491, 20296, 21253, 21261, 21263, 21638, 21754, 22275, 24067,
+    24598, 25243, 25265, 25429, 27873, 28006, 30129, 30770, 32990, 33071,
+    33502, 33889, 33970, 34957, 35090, 36875, 37610, 39165, 39825, 24133,
+    [26292, 64006], 26333, 28689, 29190, 20469, 21117, 24426, 24915, 26451,
+    27161, 28418, 29922, 31080, 34920, 35961, 39111, 39108, 39491, 21697,
+    31263, 26963, 35575, 35914, [12213, 39080], 39342, 24444, 25259, 30130,
+    [12138, 30382], 34987, 36991, 38466, 21305, 24380, 24517, [27852, 63848],
+    29644, 30050, [12134, 30091], 31558, 33534, 39325, 20047, 36924, 19979,
+    20309, 21414, 22799, 24264, 26160, 27827, 29781, 33655, 34662, 36032,
+    36944, 38686, 39957, 22737, 23416, 34384, 35604, 40372, 23506, 24680,
+    24717, 26097, 27735, 28450, 28579, 28698, 32597, 32752, {f: 2, c: 38289},
+    38480, 38867, 21106, 36676, 20989, 21547, 21688, 21859, 21898, 27323,
+    28085, 32216, 33382, 37532, 38519, 40569, 21512, 21704, 30418, 34532,
+    38308, 38356, 38492, 20130, 20233, 23022, 23270, 24055, 24658, 25239,
+    26477, 26689, 27782, 28207, 32568, 32923, 33322, 38917, 20133, 20565,
+    21683, 22419, 22874, 23401, 23475, 25032, 26999, 28023, 28707, 34809,
+    35299, 35442, 35559, 36994, 39405, 39608, 21182, 26680, 20502, 24184,
+    26447, 33607, [12175, 34892, 64008], 20139, 21521, 22190, 29670, 37141,
+    38911, 39177, 39255, [12217, 39321], 22099, 22687, 34395, 35377, 25010,
+    27382, 29563, 36562, 27463, 38570, 39511, 22869, 29184, 36203,
+    [12208, 38761], 20436, 23796, 24358, 25080, 26203, 27883, 28843,
+    [12126, 29572], 29625, 29694, 30505, 30541, 32067, 32098, 32291, 33335,
+    34898, 36066, 37449, 39023, 23377, [12147, 31348], [12174, 34880],
+    [12212, 38913], 23244, 20448, 21332, 22846, 23805, 25406, 28025, 29433,
+    33029, 33031, 33698, 37583, 38960, 20136, 20804, 21009, 22411, 24418,
+    27842, 28366, 28677, 28752, 28847, 29074, 29673, [29801, 63918], 33610,
+    34722, 34913, 36872, 37026, 37795, 39336, 20846, 24407, 24800, 24935,
+    26291, 34137, 36426, 37295, 38795, 20046, 20114, 21628, 22741, 22778,
+    22909, 23733, 24359, [12094, 25142], 25160, 26122, 26215, 27627, 28009,
+    28111, 28246, 28408, 28564, 28640, 28649, 28765, 29392, 29733, 29786,
+    29920, 30355, 31068, 31946, 32286, 32993, 33446, 33899, 33983, 34382,
+    34399, 34676, 35703, 35946, 37804, 38912, 39013, 24785, 25110, 37239,
+    23130, 26127, 28151, 28222, 29759, 39746, 24573, 24794, 31503, 21700,
+    24344, 27742, 27859, 27946, 28888, 32005, 34425, 35340, 40251, 21270,
+    21644, 23301, 27194, [12117, 28779], 30069, 31117, [12146, 31166], 33457,
+    33775, 35441, 35649, 36008, 38772, 25844, 25899, {f: 2, c: 30906}, 31339,
+    20024, 21914, 22864, 23462, 24187, 24739, 25563, 27489, 26213, 26707,
+    28185, 29029, 29872, 32008, 36996, 39529, 39973, 27963, [28369, 63748],
+    29502, 35905, 38346, 20976, 24140, 24488, 24653, 24822, 24880, 24908,
+    {f: 2, c: 26179}, 27045, 27841, 28255, 28361, 28514, 29004, 29852, 30343,
+    31681, 31783, 33618, 34647, 36945, 38541, [12232, 40643], 21295, 22238,
+    24315, 24458, 24674, 24724, 25079, 26214, 26371, 27292, 28142, 28590,
+    28784, 29546, 32362, 33214, 33588, 34516, 35496, 36036, 21123, 29554,
+    23446, 27243, 37892, 21742, 22150, 23389, 25928, 25989, 26313, 26783,
+    28045, 28102, [12120, 29243], 32948, 37237, 39501, 20399, 20505, 21402,
+    21518, 21564, 21897, 21957, 24127, 24460, 26429, 29030, 29661, 36869,
+    21211, 21235, 22628, 22734, 28932, 29071, 29179, 34224, 35347,
+    [26248, 63941], 34216, 21927, 26244, 29002, 33841, 21321, 21913, 27585,
+    24409, 24509, 25582, 26249, 28999, 35569, 36637, 40638, 20241, 25658,
+    28875, 30054, 34407, 24676, 35662, 40440, 20807, 20982, 21256, 27958,
+    33016, [12234, 40657], 26133, 27427, 28824, 30165, 21507, 23673, 32007,
+    35350, [12107, 27424], 27453, 27462, 21560, 24688, 27965, 32725, 33288,
+    20694, 20958, 21916, 22123, 22221, 23020, 23305, 24076, 24985, 24984,
+    25137, 26206, 26342, 29081, {f: 2, c: 29113}, 29351, 31143, 31232, 32690,
+    35440, {s: 163}, {f: 4, c: 12310}, {s: 14}, 8223, 8219, {f: 2, c: 8314},
+    {s: 7}, 8316, 0, {f: 2, c: 8317}, {s: 23}, 700, {s: 44}, 8942, 8759,
+    {s: 20}, {f: 10, c: 10122}, {s: 36}, {f: 26, c: 9398}, {s: 61},
+    {f: 2, c: 8826}, {f: 2, c: 8910}, {f: 2, c: 8832}, {f: 4, c: 8816}, 0,
+    8842, 0, 8843, {f: 2, c: 8822}, 8825, {f: 2, c: 8922}, {s: 5}, 8773, 8771,
+    8776, 0, 8868, {s: 78}, 8244, {s: 11}, 9839, {s: 4}, 8258, {s: 4}, 10045,
+    0, 0, 8226, {s: 4}, {f: 2, c: 8249}, {s: 16}, 10010, 10006, 0, 9711,
+    {s: 3}, 10070, 0, 9676, {s: 24}, 9775, {s: 6}, 12320, 0, {f: 10, c: 10102},
+    {s: 17}, 12306, 12342, {s: 13}, 8710, 0, 8735, 0, {f: 2, c: 8741}, 0, 8787,
+    8785, {f: 2, c: 8806}, 8723, {f: 3, c: 8853}, 0, 8980, 0, 0, 8802, 0, 9649,
+    0, 8738, 8784, 0, 0, 8867, 0, 0, {f: 2, c: 8814}, 8837, 8836, 8713, 8716,
+    {f: 2, c: 8891}, 8794, 8966, {s: 6}, 12958, 0, 8252, {s: 11}, 9702, {s: 3},
+    9663, 9653, 9657, 9667, {s: 4}, 9674, 12849, 12857, 13259, {f: 5, c: 9327},
+    {s: 18}, 8656, 8655, 8653, {s: 37}, 8657, 8659, {s: 8}, 8626, 8625, 0,
+    8628, 8624, 8627, {s: 14}, 8636, 8640, {s: 10}, {f: 2, c: 8644}, {s: 144},
+    {f: 5, c: 9347}, {s: 33}, 12948, {s: 15}, 12965, {s: 93}, 8672, 8674, 8673,
+    8675, {s: 4}, 8678, 8680, 8679, 8681, {s: 20}, 9757, 9759, {s: 76}, 12944,
+    {f: 6, c: 12938}, {s: 15}, {f: 2, c: 12318}, 8246, 0, 8245, {s: 3}, 12540,
+    0, 0, {f: 2, c: 44034}, {f: 2, c: 44037}, {f: 5, c: 44043}, 44056,
+    {f: 2, c: 44062}, {f: 3, c: 44065}, {f: 7, c: 44069}, 44078,
+    {f: 6, c: 44082}, {f: 2, c: 44090}, {f: 3, c: 44093}, {f: 10, c: 44097},
+    44108, {f: 6, c: 44110}, {f: 3, c: 44117}, {f: 3, c: 44121},
+    {f: 19, c: 44125}, {f: 2, c: 44146}, {f: 2, c: 44149}, 44153,
+    {f: 5, c: 44155}, 44162, {f: 2, c: 44167}, {f: 3, c: 44173},
+    {f: 3, c: 44177}, {f: 7, c: 44181}, 44190, {f: 6, c: 44194}, 44203,
+    {f: 2, c: 44205}, {f: 7, c: 44209}, 44218, {f: 3, c: 44222},
+    {f: 2, c: 44226}, {f: 3, c: 44229}, {f: 3, c: 44233}, {f: 8, c: 44237},
+    44246, {f: 8, c: 44248}, {f: 2, c: 44258}, {f: 2, c: 44261}, 44265, 44267,
+    {f: 2, c: 44269}, 44274, 44276, {f: 5, c: 44279}, {f: 2, c: 44286},
+    {f: 3, c: 44289}, 44293, {f: 5, c: 44295}, 44302, 44304, {f: 6, c: 44306},
+    {f: 3, c: 44313}, {f: 3, c: 44317}, {f: 8, c: 44321}, {f: 2, c: 44330},
+    {f: 6, c: 44334}, {f: 2, c: 44342}, {f: 3, c: 44345}, {f: 7, c: 44349},
+    44358, 44360, {f: 6, c: 44362}, {f: 3, c: 44369}, {f: 3, c: 44373},
+    {f: 8, c: 44377}, 44386, {f: 8, c: 44388}, {f: 2, c: 44398},
+    {f: 2, c: 44401}, {f: 4, c: 44407}, 44414, 44416, {f: 5, c: 44419},
+    {f: 2, c: 44426}, {f: 3, c: 44429}, {f: 11, c: 44433}, {f: 6, c: 44446},
+    {f: 18, c: 44453}, {f: 8, c: 44472}, {f: 2, c: 44482}, {f: 3, c: 44485},
+    {f: 7, c: 44489}, 44498, {f: 8, c: 44500}, {f: 3, c: 44509},
+    {f: 3, c: 44513}, {f: 19, c: 44517}, {f: 2, c: 44538}, {f: 2, c: 44541},
+    {f: 6, c: 44546}, 44554, 44556, {f: 6, c: 44558}, {f: 27, c: 44565},
+    {f: 2, c: 44594}, {f: 2, c: 44597}, 44601, {f: 5, c: 44603}, 44610, 44612,
+    {f: 3, c: 44615}, 44619, 44623, {f: 3, c: 44625}, 44629, {f: 5, c: 44631},
+    44638, {f: 3, c: 44642}, {f: 2, c: 44646}, {f: 2, c: 44650},
+    {f: 3, c: 44653}, {f: 7, c: 44657}, 44666, {f: 6, c: 44670},
+    {f: 6, c: 44678}, {f: 47, c: 44685}, 44735, {f: 3, c: 44737},
+    {f: 7, c: 44741}, 44750, {f: 6, c: 44754}, {f: 2, c: 44762},
+    {f: 11, c: 44765}, {f: 2, c: 44777}, 44780, {f: 6, c: 44782},
+    {f: 3, c: 44789}, {f: 3, c: 44793}, {f: 10, c: 44797}, {f: 4, c: 44809},
+    {f: 2, c: 44814}, {f: 27, c: 44817}, {f: 2, c: 44846}, 44849, 44851,
+    {f: 7, c: 44853}, 44862, 44864, {f: 4, c: 44868}, {f: 6, c: 44874},
+    {f: 11, c: 44881}, {f: 6, c: 44894}, {f: 19, c: 44902}, {f: 6, c: 44922},
+    {f: 3, c: 44929}, {f: 3, c: 44933}, {f: 7, c: 44937}, {f: 3, c: 44946},
+    {f: 6, c: 44950}, {f: 27, c: 44957}, {f: 2, c: 44986}, {f: 3, c: 44989},
+    {f: 6, c: 44993}, 45002, 45004, {f: 5, c: 45007}, {f: 7, c: 45013},
+    {f: 11, c: 45021}, {f: 6, c: 45034}, {f: 2, c: 45042}, {f: 3, c: 45045},
+    {f: 7, c: 45049}, {f: 2, c: 45058}, {f: 7, c: 45061}, {f: 3, c: 45069},
+    {f: 3, c: 45073}, {f: 7, c: 45077}, {f: 10, c: 45086}, {f: 27, c: 45097},
+    {f: 2, c: 45126}, 45129, 45131, 45133, {f: 4, c: 45135}, 45142, 45144,
+    {f: 3, c: 45146}, {f: 30, c: 45150}, {f: 2, c: 45182}, {f: 3, c: 45185},
+    {f: 7, c: 45189}, 45198, 45200, {f: 6, c: 45202}, 45211, {f: 2, c: 45213},
+    {f: 5, c: 45219}, 45226, 45232, 45234, {f: 2, c: 45238}, {f: 3, c: 45241},
+    {f: 7, c: 45245}, 45254, {f: 6, c: 45258}, {f: 2, c: 45266},
+    {f: 3, c: 45269}, {f: 7, c: 45273}, {f: 4, c: 45281}, {f: 34, c: 45286},
+    45322, {f: 3, c: 45325}, 45329, {f: 4, c: 45332}, 45338, {f: 5, c: 45342},
+    {f: 2, c: 45350}, {f: 3, c: 45353}, {f: 7, c: 45357}, 45366,
+    {f: 6, c: 45370}, {f: 2, c: 45378}, {f: 3, c: 45381}, {f: 7, c: 45385},
+    {f: 2, c: 45394}, {f: 2, c: 45398}, {f: 3, c: 45401}, {f: 3, c: 45405},
+    {f: 23, c: 45409}, {f: 2, c: 45434}, {f: 3, c: 45437}, 45441,
+    {f: 5, c: 45443}, 45450, 45452, {f: 4, c: 45454}, {f: 3, c: 45461},
+    {f: 3, c: 45465}, {f: 11, c: 45469}, {f: 35, c: 45481}, {f: 3, c: 45517},
+    {f: 3, c: 45521}, {f: 7, c: 45525}, 45534, {f: 8, c: 45536},
+    {f: 2, c: 45546}, {f: 3, c: 45549}, {f: 8, c: 45553}, 45562, 45564,
+    {f: 6, c: 45566}, {f: 2, c: 45574}, {f: 2, c: 45577}, {f: 7, c: 45581},
+    45590, 45592, {f: 6, c: 45594}, {f: 19, c: 45601}, {f: 7, c: 45621},
+    {f: 27, c: 45629}, {f: 3, c: 45657}, {f: 3, c: 45661}, {f: 7, c: 45665},
+    {f: 10, c: 45674}, {f: 6, c: 45686}, {f: 7, c: 45693}, {f: 3, c: 45702},
+    {f: 6, c: 45706}, {f: 2, c: 45714}, {f: 3, c: 45717}, {f: 5, c: 45723},
+    45730, 45732, {f: 3, c: 45735}, 45739, {f: 3, c: 45741}, {f: 3, c: 45745},
+    {f: 19, c: 45749}, {f: 2, c: 45770}, {f: 3, c: 45773}, 45777,
+    {f: 5, c: 45779}, 45786, 45788, {f: 4, c: 45790}, 45795, 45799,
+    {f: 2, c: 45801}, {f: 3, c: 45808}, 45814, {f: 3, c: 45820},
+    {f: 2, c: 45826}, {f: 3, c: 45829}, {f: 7, c: 45833}, 45842,
+    {f: 6, c: 45846}, {f: 55, c: 45853}, 45911, {f: 2, c: 45913}, 45917,
+    {f: 4, c: 45920}, 45926, 45928, 45930, {f: 2, c: 45932}, 45935,
+    {f: 2, c: 45938}, {f: 3, c: 45941}, {f: 7, c: 45945}, 45954,
+    {f: 6, c: 45958}, {f: 3, c: 45965}, {f: 3, c: 45969}, {f: 11, c: 45973},
+    {f: 6, c: 45986}, {f: 3, c: 45993}, {f: 23, c: 45997}, {f: 2, c: 46022},
+    {f: 2, c: 46025}, 46029, 46031, {f: 3, c: 46033}, 46038, 46040, 46042,
+    46044, {f: 2, c: 46046}, {f: 3, c: 46049}, {f: 3, c: 46053},
+    {f: 19, c: 46057}, {f: 19, c: 46077}, {f: 7, c: 46097}, {f: 3, c: 46105},
+    {f: 3, c: 46109}, {f: 7, c: 46113}, 46122, {f: 8, c: 46124},
+    {f: 27, c: 46133}, {f: 2, c: 46162}, {f: 3, c: 46165}, {f: 7, c: 46169},
+    46178, 46180, {f: 6, c: 46182}, {f: 19, c: 46189}, {f: 7, c: 46209},
+    {f: 20, c: 46217}, {f: 6, c: 46238}, {f: 3, c: 46245}, {f: 3, c: 46249},
+    {f: 8, c: 46253}, 46262, 46264, {f: 6, c: 46266}, {f: 3, c: 46273},
+    {f: 3, c: 46277}, {f: 7, c: 46281}, {f: 4, c: 46289}, {f: 6, c: 46294},
+    {f: 2, c: 46302}, {f: 2, c: 46305}, 46309, {f: 5, c: 46311}, 46318, 46320,
+    {f: 6, c: 46322}, {f: 27, c: 46329}, {f: 2, c: 46358}, {f: 2, c: 46361},
+    {f: 7, c: 46365}, 46374, {f: 5, c: 46379}, {f: 2, c: 46386},
+    {f: 3, c: 46389}, {f: 7, c: 46393}, 46402, {f: 5, c: 46406},
+    {f: 2, c: 46414}, {f: 3, c: 46417}, {f: 7, c: 46421}, 46430,
+    {f: 62, c: 46434}, {f: 2, c: 46498}, {f: 3, c: 46501}, 46505,
+    {f: 4, c: 46508}, 46514, {f: 5, c: 46518}, {f: 2, c: 46526},
+    {f: 3, c: 46529}, {f: 7, c: 46533}, 46542, {f: 6, c: 46546},
+    {f: 19, c: 46553}, {f: 35, c: 46573}, {f: 2, c: 46610}, {f: 3, c: 46613},
+    {f: 12, c: 46617}, {f: 6, c: 46630}, {f: 7, c: 46637}, {f: 19, c: 46645},
+    {f: 27, c: 46665}, {f: 3, c: 46693}, {f: 51, c: 46697}, {f: 2, c: 46750},
+    {f: 3, c: 46753}, {f: 6, c: 46757}, {f: 4, c: 46765}, {f: 34, c: 46770},
+    {f: 27, c: 46805}, {f: 3, c: 46833}, {f: 3, c: 46837}, {f: 7, c: 46841},
+    {f: 3, c: 46850}, {f: 34, c: 46854}, {f: 2, c: 46890}, {f: 2, c: 46893},
+    {f: 7, c: 46897}, 46906, {f: 8, c: 46908}, {f: 3, c: 46917},
+    {f: 3, c: 46921}, {f: 7, c: 46925}, {f: 10, c: 46934}, {f: 3, c: 46945},
+    {f: 3, c: 46949}, {f: 7, c: 46953}, 46962, 46964, {f: 6, c: 46966},
+    {f: 2, c: 46974}, {f: 3, c: 46977}, {f: 7, c: 46981}, 46990,
+    {f: 3, c: 46995}, {f: 2, c: 47002}, {f: 3, c: 47005}, {f: 7, c: 47009},
+    47018, {f: 6, c: 47022}, {f: 2, c: 47030}, {f: 14, c: 47033}, 47048,
+    {f: 34, c: 47050}, {f: 2, c: 47086}, {f: 3, c: 47089}, {f: 7, c: 47093},
+    47102, {f: 5, c: 47106}, {f: 2, c: 47114}, {f: 3, c: 47117},
+    {f: 7, c: 47121}, 47130, 47132, {f: 6, c: 47134}, {f: 2, c: 47142},
+    {f: 3, c: 47145}, {f: 7, c: 47149}, 47158, {f: 6, c: 47162},
+    {f: 3, c: 47169}, {f: 12, c: 47173}, 47186, {f: 8, c: 47188},
+    {f: 2, c: 47198}, {f: 3, c: 47201}, {f: 7, c: 47205}, 47214, 47216,
+    {f: 6, c: 47218}, {f: 3, c: 47225}, {f: 16, c: 47229}, {f: 26, c: 47246},
+    {f: 7, c: 47273}, {f: 3, c: 47281}, {f: 3, c: 47285}, {f: 7, c: 47289},
+    47298, 47300, {f: 6, c: 47302}, {f: 3, c: 47309}, {f: 3, c: 47313},
+    {f: 8, c: 47317}, 47326, 47328, {f: 6, c: 47330}, {f: 2, c: 47338},
+    {f: 3, c: 47341}, {f: 7, c: 47345}, 47354, 47356, {f: 6, c: 47358},
+    {f: 19, c: 47365}, {f: 7, c: 47385}, {f: 27, c: 47393}, {f: 2, c: 47422},
+    {f: 3, c: 47425}, {f: 7, c: 47429}, {f: 2, c: 47437}, 47440,
+    {f: 6, c: 47442}, {f: 2, c: 47450}, {f: 3, c: 47453}, {f: 7, c: 47457},
+    47466, 47468, {f: 6, c: 47470}, {f: 2, c: 47478}, {f: 3, c: 47481},
+    {f: 7, c: 47485}, 47494, 47496, {f: 2, c: 47499}, {f: 29, c: 47503},
+    {f: 2, c: 47534}, {f: 3, c: 47537}, {f: 7, c: 47541}, 47550, 47552,
+    {f: 6, c: 47554}, {f: 2, c: 47562}, 47565, {f: 5, c: 47571}, 47578, 47580,
+    {f: 2, c: 47583}, 47586, {f: 2, c: 47590}, {f: 3, c: 47593},
+    {f: 7, c: 47597}, 47606, {f: 5, c: 47611}, {f: 6, c: 47618},
+    {f: 12, c: 47625}, {f: 34, c: 47638}, {f: 2, c: 47674}, {f: 3, c: 47677},
+    47681, {f: 5, c: 47683}, 47690, 47692, {f: 4, c: 47695}, {f: 2, c: 47702},
+    {f: 3, c: 47705}, {f: 7, c: 47709}, 47718, {f: 6, c: 47722},
+    {f: 2, c: 47730}, {f: 3, c: 47733}, {f: 10, c: 47737}, 47750,
+    {f: 4, c: 47752}, {f: 27, c: 47757}, 47786, {f: 3, c: 47789}, 47793,
+    {f: 5, c: 47795}, 47802, 47804, {f: 6, c: 47806}, {f: 3, c: 47813},
+    {f: 15, c: 47817}, {f: 34, c: 47834}, {f: 3, c: 47869}, {f: 3, c: 47873},
+    {f: 8, c: 47877}, 47886, 47888, {f: 6, c: 47890}, {f: 3, c: 47897},
+    {f: 3, c: 47901}, {f: 8, c: 47905}, 47914, {f: 8, c: 47916}, 47927,
+    {f: 2, c: 47929}, {f: 5, c: 47935}, 47942, 47944, {f: 3, c: 47946}, 47950,
+    {f: 3, c: 47953}, {f: 3, c: 47957}, {f: 8, c: 47961}, 47970,
+    {f: 8, c: 47972}, {f: 27, c: 47981}, {f: 3, c: 48009}, {f: 3, c: 48013},
+    {f: 19, c: 48017}, {f: 3, c: 48037}, {f: 3, c: 48041}, {f: 7, c: 48045},
+    {f: 2, c: 48053}, {f: 8, c: 48056}, {f: 3, c: 48065}, {f: 3, c: 48069},
+    {f: 7, c: 48073}, {f: 2, c: 48081}, {f: 36, c: 48084}, {f: 2, c: 48122},
+    {f: 2, c: 48125}, 48129, {f: 5, c: 48131}, 48138, 48142, 48144,
+    {f: 2, c: 48146}, {f: 2, c: 48153}, {f: 4, c: 48160}, 48166, 48168,
+    {f: 3, c: 48170}, {f: 2, c: 48174}, {f: 2, c: 48178}, {f: 3, c: 48181},
+    {f: 7, c: 48185}, 48194, {f: 3, c: 48198}, {f: 2, c: 48202},
+    {f: 2, c: 48206}, {f: 12, c: 48209}, {f: 38, c: 48222}, {f: 2, c: 48262},
+    {f: 2, c: 48265}, 48269, {f: 5, c: 48271}, 48278, 48280, {f: 5, c: 48283},
+    {f: 2, c: 48290}, {f: 2, c: 48293}, {f: 7, c: 48297}, 48306,
+    {f: 6, c: 48310}, {f: 2, c: 48318}, {f: 3, c: 48321}, {f: 8, c: 48325},
+    48334, {f: 3, c: 48338}, {f: 2, c: 48342}, {f: 3, c: 48345},
+    {f: 23, c: 48349}, 48375, {f: 3, c: 48377}, {f: 7, c: 48381}, 48390, 48392,
+    {f: 6, c: 48394}, {f: 3, c: 48401}, {f: 15, c: 48405}, {f: 7, c: 48421},
+    {f: 19, c: 48429}, {f: 7, c: 48449}, {f: 2, c: 48458}, {f: 3, c: 48461},
+    {f: 7, c: 48465}, {f: 10, c: 48474}, {f: 3, c: 48485}, {f: 23, c: 48489},
+    {f: 2, c: 48514}, {f: 2, c: 48517}, {f: 5, c: 48523}, 48530, 48532,
+    {f: 3, c: 48534}, 48539, {f: 7, c: 48541}, {f: 11, c: 48549},
+    {f: 7, c: 48561}, {f: 27, c: 48569}, {f: 2, c: 48598}, {f: 3, c: 48601},
+    {f: 12, c: 48605}, {f: 6, c: 48618}, {f: 3, c: 48625}, {f: 3, c: 48629},
+    {f: 7, c: 48633}, {f: 2, c: 48641}, 48644, {f: 6, c: 48646},
+    {f: 2, c: 48654}, {f: 3, c: 48657}, {f: 7, c: 48661}, 48670,
+    {f: 36, c: 48672}, {f: 2, c: 48710}, {f: 3, c: 48713}, 48717,
+    {f: 5, c: 48719}, 48726, 48728, {f: 4, c: 48732}, {f: 2, c: 48738},
+    {f: 3, c: 48741}, 48745, {f: 5, c: 48747}, 48754, {f: 5, c: 48758},
+    {f: 2, c: 48766}, {f: 3, c: 48769}, {f: 7, c: 48773}, 48782,
+    {f: 6, c: 48786}, {f: 14, c: 48794}, {f: 39, c: 48809}, {f: 2, c: 48850},
+    {f: 2, c: 48853}, {f: 7, c: 48857}, {f: 2, c: 48865}, {f: 6, c: 48870},
+    {f: 20, c: 48877}, {f: 6, c: 48898}, {f: 14, c: 48906}, 48922,
+    {f: 34, c: 48926}, {f: 2, c: 48962}, {f: 3, c: 48965}, {f: 7, c: 48969},
+    {f: 3, c: 48978}, {f: 62, c: 48982}, {f: 27, c: 49045}, {f: 20, c: 49073},
+    {f: 6, c: 49094}, {f: 2, c: 49102}, {f: 3, c: 49105}, {f: 7, c: 49109},
+    {f: 2, c: 49117}, 49120, {f: 90, c: 49122}, {f: 20, c: 49213},
+    {f: 6, c: 49234}, {f: 3, c: 49241}, {f: 3, c: 49245}, {f: 7, c: 49249},
+    {f: 38, c: 49258}, {f: 2, c: 49298}, {f: 3, c: 49301}, {f: 7, c: 49305},
+    49314, 49316, {f: 6, c: 49318}, 49326, {f: 2, c: 49329}, {f: 5, c: 49335},
+    49342, {f: 3, c: 49346}, {f: 2, c: 49350}, {f: 2, c: 49354},
+    {f: 3, c: 49357}, {f: 7, c: 49361}, 49370, {f: 6, c: 49374},
+    {f: 2, c: 49382}, {f: 3, c: 49385}, {f: 7, c: 49389}, 49398, 49400,
+    {f: 6, c: 49402}, {f: 3, c: 49409}, {f: 3, c: 49413}, {f: 7, c: 49417},
+    {f: 4, c: 49425}, {f: 6, c: 49430}, {f: 2, c: 49441}, 49445,
+    {f: 4, c: 49448}, 49454, {f: 4, c: 49458}, 49463, {f: 2, c: 49466},
+    {f: 3, c: 49469}, {f: 7, c: 49473}, 49482, {f: 6, c: 49486},
+    {f: 2, c: 49494}, {f: 3, c: 49497}, {f: 7, c: 49501}, 49510,
+    {f: 6, c: 49514}, {f: 3, c: 49521}, {f: 3, c: 49525}, {f: 12, c: 49529},
+    {f: 6, c: 49542}, 49551, {f: 3, c: 49553}, 49557, {f: 5, c: 49559}, 49566,
+    49568, {f: 3, c: 49570}, {f: 2, c: 49574}, {f: 2, c: 49578},
+    {f: 3, c: 49581}, {f: 12, c: 49585}, {f: 6, c: 49598}, {f: 3, c: 49605},
+    {f: 3, c: 49609}, {f: 7, c: 49613}, {f: 2, c: 49621}, {f: 7, c: 49625},
+    {f: 3, c: 49633}, {f: 3, c: 49637}, {f: 7, c: 49641}, 49650,
+    {f: 8, c: 49652}, {f: 2, c: 49662}, {f: 3, c: 49665}, {f: 7, c: 49669},
+    49678, 49680, {f: 6, c: 49682}, {f: 2, c: 49690}, {f: 2, c: 49693},
+    {f: 7, c: 49697}, 49706, 49708, 49710, 49712, 49715, {f: 19, c: 49717},
+    {f: 7, c: 49737}, {f: 2, c: 49746}, {f: 3, c: 49749}, {f: 7, c: 49753},
+    {f: 4, c: 49761}, {f: 6, c: 49766}, {f: 2, c: 49774}, {f: 3, c: 49777},
+    {f: 7, c: 49781}, 49790, 49792, {f: 6, c: 49794}, {f: 6, c: 49802},
+    {f: 7, c: 49809}, {f: 2, c: 49817}, 49820, {f: 6, c: 49822},
+    {f: 2, c: 49830}, {f: 3, c: 49833}, {f: 6, c: 49838}, 49846, 49848,
+    {f: 34, c: 49850}, {f: 2, c: 49886}, {f: 2, c: 49889}, {f: 6, c: 49893},
+    49902, 49904, {f: 4, c: 49906}, 49911, 49914, {f: 3, c: 49917},
+    {f: 7, c: 49921}, {f: 2, c: 49930}, {f: 5, c: 49934}, {f: 2, c: 49942},
+    {f: 3, c: 49945}, {f: 7, c: 49949}, {f: 2, c: 49958}, {f: 27, c: 49962},
+    {f: 34, c: 49990}, {f: 2, c: 50026}, {f: 3, c: 50029}, 50033,
+    {f: 5, c: 50035}, {f: 2, c: 50042}, {f: 6, c: 50046}, {f: 3, c: 50053},
+    {f: 3, c: 50057}, {f: 51, c: 50061}, {f: 23, c: 50113}, {f: 2, c: 50138},
+    {f: 2, c: 50141}, 50145, {f: 5, c: 50147}, {f: 3, c: 50154},
+    {f: 6, c: 50158}, {f: 2, c: 50166}, {f: 15, c: 50169}, {f: 7, c: 50185},
+    {f: 19, c: 50193}, {f: 7, c: 50213}, {f: 3, c: 50221}, {f: 3, c: 50225},
+    {f: 7, c: 50229}, {f: 10, c: 50238}, {f: 27, c: 50249}, {f: 2, c: 50278},
+    {f: 3, c: 50281}, {f: 7, c: 50285}, {f: 3, c: 50294}, {f: 6, c: 50298},
+    {f: 19, c: 50305}, {f: 7, c: 50325}, {f: 27, c: 50333}, {f: 3, c: 50361},
+    {f: 44, c: 50365}, {f: 6, c: 50410}, {f: 2, c: 50418}, {f: 3, c: 50421},
+    50425, {f: 4, c: 50427}, {f: 10, c: 50434}, {f: 3, c: 50445},
+    {f: 3, c: 50449}, {f: 7, c: 50453}, {f: 11, c: 50461}, {f: 2, c: 50474},
+    {f: 3, c: 50477}, {f: 7, c: 50481}, 50490, 50492, {f: 6, c: 50494},
+    {f: 2, c: 50502}, 50507, {f: 4, c: 50511}, 50518, {f: 3, c: 50522}, 50527,
+    {f: 2, c: 50530}, {f: 3, c: 50533}, {f: 7, c: 50537}, 50546,
+    {f: 6, c: 50550}, {f: 2, c: 50558}, {f: 3, c: 50561}, {f: 2, c: 50565},
+    {f: 4, c: 50568}, 50574, 50576, {f: 3, c: 50578}, 50582, {f: 3, c: 50585},
+    {f: 3, c: 50589}, {f: 8, c: 50593}, {f: 10, c: 50602}, {f: 2, c: 50614},
+    50618, {f: 5, c: 50623}, 50635, 50637, 50639, {f: 2, c: 50642},
+    {f: 3, c: 50645}, {f: 7, c: 50649}, 50658, 50660, {f: 6, c: 50662}, 50671,
+    {f: 3, c: 50673}, 50677, {f: 4, c: 50680}, {f: 3, c: 50690},
+    {f: 3, c: 50697}, {f: 3, c: 50701}, {f: 7, c: 50705}, 50714,
+    {f: 7, c: 50717}, {f: 2, c: 50726}, {f: 3, c: 50729}, 50735,
+    {f: 2, c: 50737}, 50742, 50744, 50746, {f: 4, c: 50748}, {f: 2, c: 50754},
+    {f: 3, c: 50757}, {f: 7, c: 50761}, 50770, {f: 6, c: 50774},
+    {f: 2, c: 50782}, {f: 11, c: 50785}, {f: 2, c: 50797}, 50800,
+    {f: 6, c: 50802}, {f: 2, c: 50810}, {f: 3, c: 50813}, {f: 7, c: 50817},
+    50826, 50828, {f: 6, c: 50830}, {f: 2, c: 50838}, {f: 3, c: 50841},
+    {f: 7, c: 50845}, 50854, 50856, {f: 6, c: 50858}, {f: 2, c: 50866},
+    {f: 3, c: 50869}, {f: 5, c: 50875}, 50882, 50884, {f: 6, c: 50886},
+    {f: 2, c: 50894}, {f: 3, c: 50897}, {f: 7, c: 50901}, {f: 2, c: 50910},
+    {f: 6, c: 50914}, {f: 2, c: 50922}, {f: 3, c: 50925}, {f: 7, c: 50929},
+    {f: 3, c: 50938}, {f: 6, c: 50942}, {f: 2, c: 50950}, {f: 3, c: 50953},
+    {f: 7, c: 50957}, 50966, 50968, {f: 6, c: 50970}, {f: 2, c: 50978},
+    {f: 3, c: 50981}, {f: 7, c: 50985}, 50994, 50996, 50998, {f: 4, c: 51000},
+    {f: 2, c: 51006}, {f: 3, c: 51009}, {f: 5, c: 51013}, 51019, 51022, 51024,
+    {f: 3, c: 51033}, {f: 3, c: 51037}, {f: 7, c: 51041}, {f: 2, c: 51049},
+    {f: 8, c: 51052}, {f: 2, c: 51062}, {f: 3, c: 51065}, {f: 4, c: 51071},
+    51078, {f: 3, c: 51083}, 51087, {f: 2, c: 51090}, 51093, 51097,
+    {f: 5, c: 51099}, 51106, {f: 5, c: 51111}, {f: 2, c: 51118},
+    {f: 3, c: 51121}, {f: 7, c: 51125}, 51134, {f: 6, c: 51138},
+    {f: 2, c: 51146}, 51149, 51151, {f: 7, c: 51153}, {f: 4, c: 51161},
+    {f: 6, c: 51166}, {f: 3, c: 51173}, {f: 3, c: 51177}, {f: 19, c: 51181},
+    {f: 2, c: 51202}, {f: 3, c: 51205}, 51209, {f: 5, c: 51211}, 51218, 51220,
+    {f: 5, c: 51223}, {f: 2, c: 51230}, {f: 3, c: 51233}, {f: 7, c: 51237},
+    51246, 51248, {f: 6, c: 51250}, {f: 3, c: 51257}, {f: 3, c: 51261},
+    {f: 7, c: 51265}, {f: 2, c: 51274}, {f: 6, c: 51278}, {f: 27, c: 51285},
+    {f: 2, c: 51314}, {f: 3, c: 51317}, 51321, {f: 5, c: 51323}, 51330, 51332,
+    {f: 3, c: 51336}, {f: 6, c: 51342}, {f: 8, c: 51349}, 51358, 51360,
+    {f: 6, c: 51362}, {f: 19, c: 51369}, {f: 6, c: 51390}, {f: 3, c: 51397},
+    {f: 3, c: 51401}, {f: 7, c: 51405}, 51414, 51416, {f: 6, c: 51418},
+    {f: 2, c: 51426}, {f: 16, c: 51429}, {f: 6, c: 51446}, {f: 2, c: 51454},
+    {f: 3, c: 51457}, {f: 5, c: 51463}, 51470, 51472, {f: 6, c: 51474},
+    {f: 19, c: 51481}, {f: 7, c: 51501}, {f: 27, c: 51509}, {f: 2, c: 51538},
+    {f: 3, c: 51541}, {f: 7, c: 51545}, 51554, {f: 8, c: 51556},
+    {f: 3, c: 51565}, {f: 3, c: 51569}, {f: 7, c: 51573}, {f: 11, c: 51581},
+    {f: 2, c: 51594}, {f: 3, c: 51597}, {f: 7, c: 51601}, 51610, 51612,
+    {f: 34, c: 51614}, {f: 2, c: 51650}, {f: 2, c: 51653}, 51657,
+    {f: 5, c: 51659}, 51666, 51668, {f: 2, c: 51671}, 51675, {f: 2, c: 51678},
+    51681, 51683, {f: 2, c: 51685}, {f: 4, c: 51688}, 51694, {f: 6, c: 51698},
+    {f: 2, c: 51706}, {f: 3, c: 51709}, {f: 7, c: 51713}, 51722,
+    {f: 6, c: 51726}, {f: 3, c: 51733}, {f: 16, c: 51737}, {f: 34, c: 51754},
+    {f: 2, c: 51790}, {f: 3, c: 51793}, {f: 7, c: 51797}, 51806,
+    {f: 6, c: 51810}, {f: 20, c: 51817}, {f: 6, c: 51838}, {f: 19, c: 51845},
+    {f: 35, c: 51865}, {f: 2, c: 51902}, {f: 3, c: 51905}, {f: 7, c: 51909},
+    51918, 51920, 51922, {f: 4, c: 51924}, {f: 6, c: 51930}, {f: 11, c: 51937},
+    {f: 7, c: 51949}, {f: 19, c: 51957}, {f: 7, c: 51977}, {f: 3, c: 51985},
+    {f: 3, c: 51989}, {f: 7, c: 51993}, {f: 31, c: 52002}, {f: 6, c: 52034},
+    {f: 2, c: 52042}, {f: 3, c: 52045}, {f: 7, c: 52049}, {f: 3, c: 52058},
+    {f: 6, c: 52062}, {f: 19, c: 52069}, {f: 34, c: 52090}, {f: 27, c: 52125},
+    {f: 27, c: 52153}, {f: 15, c: 52181}, {f: 2, c: 52197}, 52200,
+    {f: 34, c: 52202}, {f: 2, c: 52238}, {f: 3, c: 52241}, {f: 7, c: 52245},
+    {f: 3, c: 52254}, {f: 4, c: 52259}, {f: 2, c: 52266}, 52269, 52271,
+    {f: 7, c: 52273}, 52282, {f: 5, c: 52287}, {f: 2, c: 52294},
+    {f: 3, c: 52297}, {f: 7, c: 52301}, 52310, {f: 6, c: 52314},
+    {f: 3, c: 52321}, 52325, 52327, {f: 7, c: 52329}, {f: 4, c: 52337},
+    {f: 34, c: 52342}, {f: 2, c: 52378}, {f: 3, c: 52381}, {f: 7, c: 52385},
+    52394, {f: 6, c: 52398}, {f: 2, c: 52406}, {f: 3, c: 52409},
+    {f: 7, c: 52413}, 52422, 52424, {f: 6, c: 52426}, {f: 3, c: 52433},
+    {f: 15, c: 52437}, {f: 7, c: 52453}, {f: 3, c: 52461}, {f: 16, c: 52465},
+    {f: 6, c: 52482}, {f: 2, c: 52490}, {f: 3, c: 52493}, {f: 7, c: 52497},
+    52506, 52508, {f: 6, c: 52510}, {f: 3, c: 52517}, {f: 3, c: 52521},
+    {f: 12, c: 52525}, {f: 34, c: 52538}, {f: 3, c: 52573}, {f: 3, c: 52577},
+    {f: 7, c: 52581}, 52590, 52592, {f: 6, c: 52594}, {f: 15, c: 52601},
+    {f: 11, c: 52617}, {f: 2, c: 52630}, {f: 3, c: 52633}, {f: 7, c: 52637},
+    52646, 52648, {f: 6, c: 52650}, {f: 19, c: 52657}, {f: 7, c: 52677},
+    {f: 3, c: 52685}, {f: 23, c: 52689}, {f: 3, c: 52713}, {f: 3, c: 52717},
+    {f: 7, c: 52721}, 52730, 52732, {f: 6, c: 52734}, {f: 3, c: 52741},
+    {f: 3, c: 52745}, {f: 7, c: 52749}, {f: 4, c: 52757}, {f: 6, c: 52762},
+    {f: 2, c: 52770}, {f: 3, c: 52773}, {f: 7, c: 52777}, 52786, 52788,
+    {f: 34, c: 52790}, {f: 2, c: 52826}, {f: 2, c: 52829}, {f: 6, c: 52834},
+    52842, 52844, {f: 6, c: 52846}, {f: 2, c: 52854}, {f: 3, c: 52857},
+    {f: 7, c: 52861}, 52870, 52872, {f: 6, c: 52874}, {f: 2, c: 52882},
+    {f: 3, c: 52885}, {f: 7, c: 52889}, 52898, {f: 6, c: 52902},
+    {f: 19, c: 52910}, {f: 34, c: 52930}, {f: 2, c: 52966}, {f: 2, c: 52969},
+    {f: 7, c: 52973}, 52982, {f: 6, c: 52986}, {f: 2, c: 52994},
+    {f: 3, c: 52997}, {f: 7, c: 53001}, 53010, 53012, {f: 6, c: 53014},
+    {f: 3, c: 53021}, {f: 3, c: 53025}, {f: 7, c: 53029}, 53038,
+    {f: 6, c: 53042}, {f: 27, c: 53049}, {f: 2, c: 53078}, {f: 3, c: 53081},
+    {f: 7, c: 53085}, 53094, 53096, {f: 6, c: 53098}, {f: 2, c: 53106},
+    {f: 3, c: 53109}, {f: 7, c: 53113}, {f: 4, c: 53121}, {f: 6, c: 53126},
+    {f: 20, c: 53133}, {f: 6, c: 53154}, {f: 7, c: 53161}, {f: 19, c: 53169},
+    {f: 27, c: 53189}, {f: 2, c: 53218}, {f: 3, c: 53221}, {f: 7, c: 53225},
+    53234, 53236, {f: 6, c: 53238}, {f: 3, c: 53245}, {f: 3, c: 53249},
+    {f: 12, c: 53253}, {f: 6, c: 53266}, {f: 20, c: 53273}, {f: 6, c: 53294},
+    {f: 2, c: 53302}, {f: 3, c: 53305}, {f: 7, c: 53309}, 53318, 53320,
+    {f: 6, c: 53322}, {f: 3, c: 53329}, {f: 3, c: 53333}, {f: 7, c: 53337},
+    {f: 11, c: 53345}, {f: 2, c: 53358}, {f: 3, c: 53361}, {f: 7, c: 53365},
+    {f: 3, c: 53374}, {f: 34, c: 53378}, {f: 2, c: 53414}, {f: 3, c: 53417},
+    {f: 7, c: 53421}, 53430, 53432, {f: 6, c: 53434}, {f: 2, c: 53442},
+    {f: 3, c: 53445}, {f: 6, c: 53450}, 53458, {f: 6, c: 53462},
+    {f: 2, c: 53470}, {f: 3, c: 53473}, {f: 7, c: 53477}, 53486,
+    {f: 6, c: 53490}, {f: 20, c: 53497}, {f: 34, c: 53518}, {f: 2, c: 53554},
+    {f: 3, c: 53557}, 53561, {f: 5, c: 53563}, 53570, {f: 6, c: 53574},
+    {f: 2, c: 53582}, {f: 3, c: 53585}, {f: 7, c: 53589}, 53598, 53600,
+    {f: 6, c: 53602}, {f: 3, c: 53609}, {f: 15, c: 53613}, {f: 7, c: 53629},
+    {f: 3, c: 53637}, {f: 23, c: 53641}, {f: 2, c: 53666}, {f: 3, c: 53669},
+    {f: 7, c: 53673}, 53682, 53684, {f: 4, c: 53686}, 53691, {f: 3, c: 53693},
+    {f: 23, c: 53697}, {f: 27, c: 53721}, {f: 3, c: 53749}, {f: 14, c: 53753},
+    53768, {f: 6, c: 53770}, {f: 27, c: 53777}, {f: 2, c: 53806},
+    {f: 3, c: 53809}, {f: 7, c: 53813}, 53822, 53824, {f: 6, c: 53826},
+    {f: 19, c: 53833}, {f: 7, c: 53853}, {f: 27, c: 53861}, {f: 2, c: 53890},
+    {f: 3, c: 53893}, {f: 7, c: 53897}, {f: 3, c: 53906}, {f: 6, c: 53910},
+    {f: 3, c: 53917}, {f: 3, c: 53921}, {f: 7, c: 53925}, {f: 4, c: 53933},
+    {f: 6, c: 53938}, {f: 2, c: 53946}, {f: 2, c: 53949}, 53953,
+    {f: 5, c: 53955}, 53962, {f: 8, c: 53964}, {f: 3, c: 53973},
+    {f: 3, c: 53977}, {f: 7, c: 53981}, {f: 10, c: 53990}, {f: 2, c: 54002},
+    {f: 3, c: 54005}, {f: 7, c: 54009}, 54018, 54020, {f: 6, c: 54022}, 54031,
+    {f: 3, c: 54033}, 54037, {f: 5, c: 54039}, 54046, {f: 3, c: 54050},
+    {f: 2, c: 54054}, {f: 2, c: 54058}, {f: 3, c: 54061}, {f: 7, c: 54065},
+    54074, {f: 6, c: 54078}, {f: 54, c: 54086}, {f: 2, c: 54142},
+    {f: 3, c: 54145}, {f: 7, c: 54149}, 54158, {f: 6, c: 54162},
+    {f: 2, c: 54170}, {f: 3, c: 54173}, {f: 7, c: 54177}, 54186, 54188,
+    {f: 6, c: 54190}, {f: 3, c: 54197}, {f: 3, c: 54201}, {f: 7, c: 54205},
+    {f: 2, c: 54214}, {f: 6, c: 54218}, {f: 7, c: 54225}, {f: 8, c: 54233},
+    54242, {f: 8, c: 54244}, {f: 2, c: 54254}, {f: 3, c: 54257},
+    {f: 7, c: 54261}, 54270, 54272, {f: 6, c: 54274}, {f: 20, c: 54281},
+    {f: 34, c: 54302}, {f: 3, c: 54337}, {f: 23, c: 54341}, {f: 3, c: 54365},
+    {f: 3, c: 54369}, {f: 8, c: 54373}, 54382, {f: 8, c: 54384},
+    {f: 2, c: 54394}, {f: 2, c: 54397}, 54401, {f: 5, c: 54403}, 54410, 54412,
+    {f: 6, c: 54414}, {f: 20, c: 54421}, {f: 34, c: 54442}, {f: 3, c: 54477},
+    {f: 3, c: 54481}, {f: 7, c: 54485}, {f: 2, c: 54493}, {f: 8, c: 54496},
+    {f: 3, c: 54505}, {f: 3, c: 54509}, {f: 7, c: 54513}, {f: 2, c: 54521},
+    54524, {f: 6, c: 54526}, {f: 3, c: 54533}, {f: 3, c: 54537},
+    {f: 7, c: 54541}, 54550, {f: 36, c: 54552}, {f: 2, c: 54590},
+    {f: 3, c: 54593}, {f: 7, c: 54597}, 54606, 54608, {f: 6, c: 54610},
+    {f: 2, c: 54618}, {f: 3, c: 54621}, {f: 4, c: 54625}, {f: 2, c: 54630},
+    54634, 54636, {f: 6, c: 54638}, {f: 2, c: 54646}, {f: 3, c: 54649},
+    {f: 7, c: 54653}, 54662, {f: 6, c: 54666}, {f: 20, c: 54673},
+    {f: 34, c: 54694}, {f: 2, c: 54730}, {f: 3, c: 54733}, 54737,
+    {f: 5, c: 54739}, 54746, 54748, {f: 6, c: 54750}, {f: 2, c: 54758},
+    {f: 3, c: 54761}, {f: 7, c: 54765}, 54774, 54776, {f: 6, c: 54778},
+    {f: 2, c: 54786}, {f: 3, c: 54789}, {f: 7, c: 54793}, 54802,
+    {f: 6, c: 54806}, {f: 3, c: 54813}, {f: 3, c: 54817}, {f: 8, c: 54821},
+    {f: 10, c: 54830}, {f: 2, c: 54842}, {f: 3, c: 54845}, {f: 4, c: 54849},
+    {f: 2, c: 54854}, 54858, 54860, {f: 3, c: 54862}, {f: 2, c: 54866},
+    {f: 2, c: 54870}, {f: 3, c: 54873}, {f: 10, c: 54877}, 54888,
+    {f: 6, c: 54890}, {f: 2, c: 54898}, {f: 14, c: 54901}, 54916,
+    {f: 6, c: 54918}, {f: 2, c: 54926}, {f: 3, c: 54929}, {f: 8, c: 54933},
+    54942, 54944, {f: 6, c: 54946}, {f: 3, c: 54953}, {f: 3, c: 54957},
+    {f: 8, c: 54961}, 54970, {f: 8, c: 54972}, {f: 2, c: 54982},
+    {f: 3, c: 54985}, {f: 4, c: 54989}, {f: 2, c: 54994}, {f: 2, c: 54997},
+    55000, {f: 6, c: 55002}, {f: 3, c: 55009}, {f: 3, c: 55013},
+    {f: 7, c: 55017}, {f: 4, c: 55025}, {f: 6, c: 55030}, {f: 2, c: 55038},
+    {f: 3, c: 55041}, {f: 12, c: 55045}, {f: 6, c: 55058}, {f: 2, c: 55066},
+    {f: 3, c: 55069}, {f: 7, c: 55073}, 55082, 55084, {f: 6, c: 55086},
+    {f: 2, c: 55094}, {f: 3, c: 55097}, {f: 7, c: 55101}, {f: 2, c: 55109},
+    55112, {f: 6, c: 55114}, {f: 2, c: 55122}, 55125, {f: 6, c: 55130}, 55138,
+    55140, {f: 3, c: 55142}, {f: 2, c: 55146}, {f: 3, c: 55149},
+    {f: 3, c: 55153}, {f: 7, c: 55157}, {f: 3, c: 55166}, {f: 6, c: 55170},
+    {f: 2, c: 55178}, {f: 3, c: 55181}, {f: 7, c: 55185}, 55194, 55196,
+    {f: 6, c: 55198}],
+  'Adobe-CNS1': [{f: 95, c: 32}, {s: 3}, 12288, 65292, {f: 2, c: 12289}, 65294,
+    8226, 65307, 65306, 65311, 65281, 65072, 8230, 8229, 65104, 65380, 65106,
+    183, {f: 4, c: 65108}, 65372, 8211, 65073, 8212, {s: 4}, {f: 2, c: 65288},
+    {f: 2, c: 65077}, 65371, 65373, {f: 2, c: 65079}, {f: 2, c: 12308},
+    {f: 2, c: 65081}, {f: 2, c: 12304}, {f: 2, c: 65083}, {f: 2, c: 12298},
+    {f: 2, c: 65085}, {f: 2, c: 12296}, {f: 2, c: 65087}, {f: 2, c: 12300},
+    {f: 2, c: 65089}, {f: 2, c: 12302}, {f: 2, c: 65091}, {f: 6, c: 65113},
+    {f: 2, c: 8216}, {f: 2, c: 8220}, {f: 2, c: 12317}, 8245, 8242, 65283,
+    65286, 65290, 8251, 167, 12291, 9675, 9679, 9651, 9650, 9678, 9734, 9733,
+    9671, 9670, 9633, 9632, 9661, 9660, 12963, 8453, 8254, 0, 65343, 0,
+    {f: 2, c: 65097}, {f: 2, c: 65101}, {f: 2, c: 65099}, {f: 3, c: 65119},
+    65291, 65293, 215, 247, 177, 8730, 65308, 65310, 65309, {f: 2, c: 8806},
+    8800, 8734, 8786, 8801, {f: 5, c: 65122}, 8764, {f: 2, c: 8745}, 8869,
+    8736, 8735, 8895, 13266, 13265, 8747, 8750, 8757, 8756, 9792, 9794, 9793,
+    9737, 8593, 8595, 8594, 8592, {f: 2, c: 8598}, 8601, 8600, 8741, 8739, 0,
+    0, 65295, 65340, 65284, 165, 12306, {f: 2, c: 162}, 65285, 65312, 8451,
+    8457, {f: 3, c: 65129}, 13269, {f: 3, c: 13212}, 13262, 13217,
+    {f: 2, c: 13198}, 13252, 176, [20825, 58834], [20827, 58835],
+    [20830, 58837], [20829, 58836], 20833, 20835, 21991, [29929, 58044],
+    [31950, 58191], {f: 8, c: 9601}, 9615, 9614, 9613, 9612, 9611, 9610, 9609,
+    9532, 9524, 9516, 9508, 9500, 9620, 9472, 9474, 9621, 9484, 9488, 9492,
+    9496, {f: 2, c: 9581}, 9584, 9583, 9552, 9566, 9578, 9569, {f: 2, c: 9698},
+    9701, 9700, {f: 3, c: 9585}, {f: 10, c: 65296}, {f: 10, c: 8544},
+    {f: 9, c: 12321}, 0, [21316, 57443], 0, {f: 26, c: 65313},
+    {f: 26, c: 65345}, {f: 17, c: 913}, {f: 7, c: 931}, {f: 17, c: 945},
+    {f: 7, c: 963}, {f: 37, c: 12549}, 729, 714, 711, 715, [9312, 63153],
+    [9313, 63154], [9314, 63155], [9315, 63156], [9316, 63157], [9317, 63158],
+    [9318, 63159], [9319, 63160], [9320, 63161], [9321, 63162], [9332, 63163],
+    [9333, 63164], [9334, 63165], [9335, 63166], [9336, 63167], [9337, 63168],
+    [9338, 63169], [9339, 63170], [9340, 63171], [9341, 63172], [8560, 63173],
+    [8561, 63174], [8562, 63175], [8563, 63176], [8564, 63177], [8565, 63178],
+    [8566, 63179], [8567, 63180], [8568, 63181], [8569, 63182], [12033, 20008],
+    [12034, 20022, 63183], [12035, 20031, 63184], [12037, 20101, 63185],
+    [12039, 20128, 63186], [12044, 20866, 63187], [12045, 20886, 63188],
+    [12046, 20907, 63189], [12051, 21241, 63190], [12054, 21304, 63191],
+    [12057, 21353, 63192], [12059, 21430, 63193],
+    [12065, 12066, 22786, 22794, 63194], [12071, 23424, 63195],
+    [12078, 24027, 63196], [12083, 24186, 63197], [12084, 24191, 63198],
+    [12085, 24308], [12089, 24400, 63200], [12090, 24417, 63201],
+    [12097, 25908, 63202], [12102, 26080], [12135, 30098, 63204],
+    [12136, 30326], [12193, 36789, 63206], [12202, 38582], {f: 32, c: 9216},
+    9249, [12032, 19968], [12036, 20057], 19969, 19971, 20035, 20061, 20102,
+    [12038, 20108], [12040, 20154], [12041, 20799], [12042, 20837],
+    [12043, 20843], [12047, 20960], [12049, 20992], 20993, [12050, 21147],
+    [12052, 21269], [12055, 21313], [12056, 21340], [12060, 21448], 19977,
+    19979, 19976, 19978, 20011, 20024, 20961, 20037, 20040, 20063, 20062,
+    20110, 20129, [20800, 64012], 20995, 21242, 21315, 21449, [12061, 21475],
+    [12063, 22303], [12064, 22763], [12067, 22805], [12068, 22823],
+    [12069, 22899], [12070, 23376], 23377, 23379, [12072, 23544],
+    [12073, 23567], [12074, 23586], [12075, 23608], [12077, 23665], 24029,
+    [12079, 24037], [12080, 24049], {f: 2, c: 24050}, [12081, 24062],
+    [12082, 24178], [12086, 24318], [12087, 24331], [12088, 24339], 25165,
+    19985, 19984, 19981, 20013, 20016, 20025, 20043, 23609, 20104, 20113,
+    20117, 20114, 20116, 20130, 20161, 20160, 20163, {f: 2, c: 20166}, 20173,
+    {f: 2, c: 20170}, 20164, 20803, 20801, 20839, {f: 2, c: 20845}, 20844,
+    20887, 20982, {f: 3, c: 20998}, 21243, {f: 2, c: 21246}, 21270, 21305,
+    21320, 21319, 21317, 21342, 21380, 21451, 21450, 21453, 22764, 22825,
+    22827, 22826, 22829, 23380, 23569, 23588, 23610, 23663, 24052, 24187,
+    24319, {f: 2, c: 24340}, [12092, 24515], [12093, 25096], [12094, 25142],
+    [12095, 25163], 25166, [12096, 25903], [12098, 25991], [12099, 26007],
+    [12100, 26020], [12101, 26041], [12103, 26085], [12104, 26352],
+    [12105, 26376], [12106, 26408], [12107, 27424], [12108, 27490],
+    [12109, 27513], [12111, 27595], [12112, 27604], [12113, 27611],
+    [12114, 27663], [12116, 27700], [12117, 28779], [12118, 29226],
+    [12119, 29238], [12120, 29243], [12122, 29255], [12123, 29273],
+    [12124, 29275], [12125, 29356], 29579, 19993, 19990, 19989, 19988, 19992,
+    20027, 20045, 20047, 20046, 20197, 20184, {f: 4, c: 20180},
+    {f: 2, c: 20195}, 20185, 20190, 20805, 20804, {f: 2, c: 20873}, 20908,
+    {f: 2, c: 20985}, 20984, 21002, 21152, 21151, [21253, 57435], 21254, 21271,
+    21277, 20191, 21322, 21321, 21345, 21344, 21359, 21358, 21435, 21487,
+    21476, 21491, 21484, 21486, 21481, 21480, 21500, 21496, 21493, 21483,
+    21478, 21482, 21490, 21489, 21488, 21477, 21485, 21499, 22235, 22234,
+    22806, 22830, 22833, 22900, 22902, 23381, 23427, 23612, 24040, 24039,
+    24038, {f: 2, c: 24066}, 24179, 24188, 24321, 24344, 24343, 24517, 25098,
+    {f: 2, c: 25171}, 25170, 25169, 26021, 26086, 26414, 26412,
+    {f: 2, c: 26410}, 26413, 27491, 27597, 27665, 27664, 27704, 27713, 27712,
+    27710, 29359, [12126, 29572], [12127, 29577], [12128, 29916],
+    [12129, 29926], [12130, 29976], [12131, 29983], [12132, 29992], 29993,
+    [12133, 30000], {f: 3, c: 30001}, [12134, 30091], [12137, 30333],
+    [12138, 30382], [12139, 30399], [12140, 30446], [12141, 30683],
+    [12142, 30690], [12143, 30707], [12144, 31034], [12146, 31166],
+    [12147, 31348], [12148, 31435], {f: 2, c: 19998}, {f: 2, c: 20050}, 20073,
+    20121, 20132, 20134, 20133, 20223, 20233, 20249, 20234, 20245, 20237,
+    {f: 2, c: 20240}, 20239, 20210, 20214, 20219, 20208, 20211, 20221, 20225,
+    20235, 20809, 20807, 20806, 20808, 20840, 20849, 20877, 20912, 21015,
+    {f: 2, c: 21009}, 21006, 21014, 21155, 21256, 21281, 21280,
+    {f: 2, c: 21360}, 21513, 21519, 21516, 21514, 21520, 21505, 21515, 21508,
+    21521, 21517, 21512, 21507, 21518, 21510, 21522, 22240, 22238, 22237,
+    22323, 22320, 22312, 22317, 22316, 22319, 22313, {f: 2, c: 22809},
+    {f: 2, c: 22839}, 22916, 22904, 22915, 22909, 22905, 22914, 22913,
+    {f: 2, c: 23383}, {f: 2, c: 23431}, 23429, 23433, 23546, 23574, 23673,
+    24030, 24070, 24182, 24180, 24335, 24347, 24537, 24534, 25102,
+    {f: 2, c: 25100}, 25104, 25187, 25179, 25176, 25910, 26089, 26088,
+    {f: 2, c: 26092}, {f: 2, c: 26354}, 26377, 26429, 26420, 26417, 26421,
+    27425, 27492, 27515, 27670, 27741, 27735, 27737, {f: 2, c: 27743}, 27728,
+    27733, 27745, 27739, {f: 2, c: 27725}, 28784, 29279, 29277, 30334,
+    [12149, 31481], [12150, 31859], [12151, 31992], [12152, 32566],
+    [12154, 32650], [12155, 32701], [12156, 32769], 32771, [12157, 32780],
+    [12158, 32786], [12159, 32819], [12160, 32895], [12161, 32905],
+    {f: 2, c: 32907}, [12162, 33251], [12163, 33258], [12164, 33267],
+    [12165, 33276], [12166, 33292], [12167, 33307], [12168, 33311],
+    [12169, 33390], [12170, 33394], 33406, [12173, 34411], [12174, 34880],
+    [12175, 34892], [12176, 34915], 35199, 38433, 20018, 20136, 20301, 20303,
+    20295, 20311, 20318, 20276, 20315, 20309, 20272, {f: 2, c: 20304}, 20285,
+    20282, 20280, 20291, 20308, 20284, 20294, 20323, 20316, 20320, 20271,
+    20302, 20278, 20313, 20317, 20296, 20314, 20812, 20811, 20813, 20853,
+    {f: 2, c: 20918}, 21029, 21028, {f: 2, c: 21033}, 21032, 21163,
+    {f: 2, c: 21161}, 21164, 21283, 21363, 21365, 21533, 21549, 21534, 21566,
+    21542, 21582, 21543, 21574, 21571, 21555, 21576, 21570, 21531, 21545,
+    21578, 21561, 21563, 21560, 21550, {f: 2, c: 21557}, 21536, 21564, 21568,
+    21553, 21547, 21535, 21548, 22250, 22256, 22244, 22251, 22346, 22353,
+    22336, 22349, 22343, 22350, 22334, 22352, 22351, 22331, 22767, 22846,
+    22941, 22930, 22952, 22942, 22947, 22937, 22934, 22925, 22948, 22931,
+    22922, 22949, 23389, 23388, {f: 2, c: 23386}, 23436, 23435, 23439, 23596,
+    {f: 2, c: 23616}, 23615, 23614, {f: 2, c: 23696}, 23700, 23692, 24043,
+    24076, 24207, 24199, 24202, 24311, 24324, 24351, 24420, 24418, 24439,
+    24441, 24536, 24524, 24535, 24525, 24561, 24555, 24568, 24554, 25106,
+    25105, 25220, 25239, 25238, 25216, 25206, 25225, 25197, 25226, 25212,
+    25214, 25209, 25203, 25234, 25199, 25240, 25198, 25237, 25235, 25233,
+    25222, 25913, 25915, 25912, 26097, 26356, 26463, {f: 4, c: 26446}, 26460,
+    26454, [26462, 57801], 26441, 26438, 26464, 26451, 26455, 27493, 27599,
+    27714, 27742, 27801, 27777, {f: 2, c: 27784}, 27781, 27803, 27754, 27770,
+    27792, 27760, 27788, 27752, 27798, 27794, 27773, 27779, 27762, 27774,
+    27764, 27782, 27766, 27789, 27796, 27800, 27778, 28790, {f: 2, c: 28796},
+    28792, 29282, 29281, 29280, 29380, 29378, 29590, 29996, 29995,
+    {f: 2, c: 30007}, 30338, 30447, 30691, 31169, 31168, 31167, 31350, 31995,
+    32597, 32918, 32915, 32925, 32920, 32923, 32922, 32946, 33391, 33426,
+    33419, 33421, [12178, 35211], [12179, 35282], [12180, 35328],
+    [12181, 35895], [12182, 35910], [12183, 35925], [12185, 35997],
+    [12186, 36196], [12187, 36208], [12188, 36275], [12189, 36523],
+    [12190, 36554], [12191, 36763], [12192, 36784], 36802, 36806, 36805, 36804,
+    24033, [12194, 37009], 37026, 37034, 37030, 37027, [12195, 37193],
+    [12196, 37318], [12197, 37324], 38450, 38446, 38449, 38442, 38444, 20006,
+    20054, 20083, 20107, 20123, 20126, {f: 2, c: 20139}, 20335, 20381, 20365,
+    20339, 20351, 20332, 20379, 20363, 20358, 20355, 20336, 20341, 20360,
+    20329, 20347, 20374, 20350, 20367, 20369, 20346, 20820, 20818, 20821,
+    20841, 20855, 20854, 20856, 20925, 20989, 21051, 21048, 21047, 21050,
+    21040, 21038, 21046, 21057, 21182, 21179, 21330, 21332, 21331, 21329,
+    21350, {f: 3, c: 21367}, 21462, 21460, 21463, 21619, 21621, 21654, 21624,
+    21653, 21632, 21627, 21623, 21636, 21650, 21638, 21628, 21648, 21617,
+    21622, 21644, 21658, 21602, 21608, 21643, 21629, 21646, 22266, 22403,
+    22391, 22378, 22377, 22369, 22374, 22372, 22396, 22812, 22857,
+    {f: 2, c: 22855}, 22852, 22868, 22974, 22971, 22996, 22969, 22958, 22993,
+    22982, 22992, 22989, 22987, 22995, 22986, 22959, 22963, 22994, 22981,
+    23391, 23396, 23395, 23447, 23450, 23448, 23452, 23449, 23451, 23578,
+    23624, {f: 2, c: 23621}, 23735, 23713, 23736, 23721, 23723, 23729, 23731,
+    24088, 24090, 24086, 24085, 24091, 24081, 24184, 24218, 24215, 24220,
+    {f: 2, c: 24213}, 24310, {f: 2, c: 24358}, 24361, {f: 2, c: 24448}, 24447,
+    24444, 24541, 24544, 24573, 24565, 24575, 24591, 24596, 24623, 24629,
+    24598, 24618, 24597, 24609, 24615, 24617, 24619, 24603, 25110, 25109,
+    25151, 25150, 25152, 25215, 25289, 25292, 25284, 25279, 25282, 25273,
+    25298, 25307, 25259, {f: 2, c: 25299}, 25291, 25288, 25256, 25277, 25276,
+    [25296, 60582], 25305, 25287, 25293, 25269, 25306, 25265, 25304,
+    {f: 2, c: 25302}, 25286, 25260, [25294, 61010], 25918, 26023, 26044, 26106,
+    26132, 26131, 26124, 26118, 26114, 26126, 26112, 26127, 26133, 26122,
+    26119, 26381, 26379, 26477, 26507, 26517, 26481, 26524, 26483, 26487,
+    26503, 26525, 26519, {f: 2, c: 26479}, 26495, 26505, 26494, 26512, 26485,
+    26522, 26515, 26492, 26474, 26482, 27427, {f: 2, c: 27494}, 27519, 27667,
+    27675, 27875, 27880, 27891, 27825, 27852, 27877, 27827, {f: 2, c: 27837},
+    27836, 27874, 27819, 27861, 27859, 27832, 27844, 27833, 27841, 27822,
+    27863, 27845, 27889, 27839, 27835, 27873, 27867, 27850, 27820, 27887,
+    27868, 27862, 27872, 28821, 28814, 28818, 28810, 28825, {f: 2, c: 29228},
+    29240, 29256, 29287, 29289, 29376, 29390, 29401, 29399, 29392, 29609,
+    29608, 29599, 29611, 29605, 30013, 30109, {f: 2, c: 30105}, 30340, 30402,
+    30450, 30452, 30693, 30717, 31038, {f: 2, c: 31040}, 31177, 31176, 31354,
+    31353, 31482, 31998, 32596, 32652, 32651, [32773, 58236], 32954, 32933,
+    32930, 32945, 32929, 32939, 32937, 32948, 32938, 32943, 33253, 33278,
+    33293, 33459, 33437, 33433, 33453, 33469, 33439, 33465, 33457, 33452,
+    33445, 33455, 33464, 33443, 33456, 33470, 33463, 34382, 34417, 21021,
+    34920, 36555, 36814, 36820, 36817, 37045, 37048, 37041, 37046, 37319,
+    [12198, 37329], [12199, 38263], [12200, 38272], [12201, 38428], 38464,
+    38463, 38459, 38468, 38466, [12203, 38585], [12204, 38632], 38738,
+    [12206, 38750], 20127, {f: 2, c: 20141}, 20449, 20405, 20399, 20415, 20448,
+    20433, 20431, 20445, 20419, 20406, 20440, 20447, 20426, 20439, 20398,
+    20432, 20420, 20418, 20442, 20430, 20446, 20407, 20823, 20882, 20881,
+    20896, 21070, 21059, 21066, 21069, 21068, 21067, 21063, 21191, 21193,
+    21187, 21185, 21261, 21335, 21371, 21402, 21467, 21676, 21696, 21672,
+    21710, 21705, 21688, 21670, 21683, 21703, 21698, 21693, 21674, 21697,
+    21700, 21704, 21679, 21675, 21681, 21691, 21673, 21671, 21695, 22271,
+    22402, 22411, 22432, 22435, 22434, 22478, 22446, 22419, 22869, 22865,
+    22863, 22862, 22864, 23004, 23000, 23039, 23011, 23016, 23043, 23013,
+    23018, 23002, 23014, 23041, 23035, 23401, 23459, 23462, 23460, 23458,
+    23461, 23553, {f: 2, c: 23630}, 23629, 23627, 23769, 23762, 24055, 24093,
+    24101, 24095, 24189, 24224, 24230, 24314, 24328, 24365, 24421, 24456,
+    24453, {f: 2, c: 24458}, 24455, 24460, 24457, 24594, 24605, 24608, 24613,
+    24590, 24616, 24653, 24688, 24680, [24674, 60712], 24646, 24643, 24684,
+    24683, 24682, 24676, 25153, 25308, 25366, 25353, 25340, 25325, 25345,
+    25326, 25341, 25351, 25329, 25335, 25327, 25324, 25342, 25332, 25361,
+    25346, 25919, 25925, 26027, 26045, 26082, 26149, 26157, 26144, 26151,
+    26159, 26143, 26152, 26161, 26148, 26359, 26623, 26579, 26609, 26580,
+    26576, 26604, 26550, 26543, 26613, 26601, 26607, 26564, 26577, 26548,
+    26586, 26597, 26552, 26575, 26590, 26611, 26544, 26585, 26594, 26589,
+    26578, 27498, 27523, 27526, 27573, 27602, 27607, 27679, 27849, 27915,
+    27954, 27946, 27969, 27941, 27916, 27953, 27934, 27927, 27963,
+    {f: 2, c: 27965}, 27958, 27931, 27893, 27961, 27943, 27960, 27945, 27950,
+    27957, 27918, 27947, 28843, 28858, 28851, 28844, 28847, 28845, 28856,
+    28846, 28836, 29232, 29298, 29295, 29300, 29417, {f: 2, c: 29408}, 29623,
+    29642, 29627, 29618, 29645, 29632, 29619, 29978, 29997, 30031, 30028,
+    30030, 30027, 30123, {f: 2, c: 30116}, {f: 2, c: 30114}, 30328,
+    {f: 3, c: 30342}, 30408, 30406, 30403, 30405, 30465, 30457, 30456, 30473,
+    30475, 30462, 30460, 30471, 30684, 30722, 30740, {f: 2, c: 30732}, 31046,
+    31049, 31048, 31047, {f: 2, c: 31161}, {f: 2, c: 31185}, 31179, 31359,
+    31361, 31487, 31485, 31869, 32002, 32005, 32000, 32009, 32007, 32004,
+    32006, 32568, 32654, 32703, 32784, 32781, 32785, 32822, 32982, 32997,
+    32986, {f: 2, c: 32963}, 32972, 32993, 32987, 32974, 32990, 32996, 32989,
+    33268, 33314, 33511, 33539, 33541, 33507, 33499, 33510, 33540, 33509,
+    33538, 33545, 33490, 33495, 33521, 33537, 33500, 33492, 33489, 33502,
+    33491, 33503, 33519, 33542, 34384, 34425, 34427, 34426, 34893, 34923,
+    35201, 35284, 35336, {f: 2, c: 35330}, 35998, 36000, 36212, 36211, 36276,
+    36557, 36556, 36848, 36838, 36834, 36842, 36837, 36845, 36843, 36836,
+    36840, 37066, 37070, 37057, 37059, 37195, 37194, 37325, 38274, 38480,
+    {f: 3, c: 38475}, [12207, 38754], [12208, 38761], [12209, 38859],
+    [12210, 38893], [12211, 38899], [12212, 38913], [12213, 39080],
+    [12214, 39131], [12215, 39135], [12216, 39318], [12217, 39321], 20056,
+    20147, {f: 2, c: 20492}, 20515, 20463, 20518, 20517, 20472, [20521, 57375],
+    20502, 20486, 20540, 20511, 20506, 20498, 20497, 20474, 20480, 20500,
+    20520, 20465, 20513, 20491, 20505, 20504, 20467, 20462, 20525, 20522,
+    20478, 20523, 20489, 20860, {f: 2, c: 20900}, 20898, 20941, 20940, 20934,
+    20939, 21078, 21084, 21076, 21083, 21085, 21290, [21375, 57459], 21407,
+    21405, 21471, 21736, 21776, 21761, 21815, 21756, 21733, 21746, 21766,
+    21754, 21780, 21737, 21741, 21729, 21769, 21742, 21738, 21734, 21799,
+    21767, 21757, 21775, {f: 2, c: 22275}, 22466, 22484, 22475, 22467, 22537,
+    22799, {f: 2, c: 22871}, 22874, 23057, 23064, 23068, 23071, 23067, 23059,
+    23020, 23072, 23075, 23081, 23077, 23052, 23049, 23403, 23640, 23472,
+    23475, 23478, 23476, 23470, 23477, 23481, 23480, 23556, 23633, 23637,
+    23632, 23789, 23805, 23803, 23786, 23784, 23792, 23798, 23809, 23796,
+    24046, 24109, 24107, 24235, 24237, 24231, 24369, 24466, 24465, 24464,
+    24665, 24675, 24677, 24656, 24661, 24685, 24681, 24687, 24708, 24735,
+    24730, 24717, 24724, 24716, 24709, 24726, 25159, 25331, 25352, 25343,
+    25422, 25406, 25391, 25429, 25410, 25414, 25423, 25417, 25402, 25424,
+    25405, {f: 2, c: 25386}, 25384, 25421, 25420, {f: 2, c: 25928}, 26009,
+    26049, 26053, 26178, 26185, 26191, 26179, 26194, 26188, 26181, 26177,
+    26360, {f: 2, c: 26388}, 26391, 26657, 26680, 26696, 26694, 26707, 26681,
+    26690, 26708, 26665, 26803, 26647, 26700, 26705, 26685, 26612, 26704,
+    26688, 26684, 26691, 26666, 26693, 26643, 26648, 26689, 27530, 27529,
+    27575, 27683, {f: 2, c: 27687}, 27686, 27684, 27888, 28010, 28053, 28040,
+    28039, 28006, 28024, 28023, 27993, 28051, 28012, 28041, 28014, 27994,
+    28020, 28009, 28044, 28042, 28025, 28037, 28005, 28052, 28874, 28888,
+    28900, 28889, 28872, 28879, 29241, 29305, 29436, 29433, 29437, 29432,
+    29431, 29574, 29677, 29705, 29678, 29664, 29674, 29662, 30036, 30045,
+    30044, 30042, 30041, 30142, 30149, 30151, {f: 2, c: 30130}, 30141, 30140,
+    30137, 30146, 30136, 30347, 30384, 30410, {f: 2, c: 30413}, 30505,
+    {f: 2, c: 30495}, 30504, 30697, 30768, 30759, 30776, 30749, 30772, 30775,
+    30757, 30765, 30752, 30751, 30770, 31061, 31056, 31072, 31071, 31062,
+    31070, 31069, 31063, 31066, 31204, [31203, 60418], 31207, 31199, 31206,
+    31209, 31192, 31364, 31368, 31449, 31494, 31505, 31881, 32033, 32023,
+    32011, 32010, 32032, 32034, 32020, 32016, 32021, 32026, 32028, 32013,
+    32025, 32027, 32570, 32607, 32660, 32709, 32705, 32774, 32772, 32792,
+    32789, 32793, 32791, 32829, 32831, 33009, 33026, 33008, 33029, 33005,
+    33012, 33030, 33016, 33011, 33032, 33021, 33034, 33020, 33007, 33261,
+    33260, 33280, 33296, {f: 2, c: 33322}, 33320, 33324, 33467, 33579, 33618,
+    33620, 33610, 33592, 33616, 33609, 33589, 33588, 33615, 33586, 33593,
+    33590, 33559, 33600, 33585, 33576, 33603, 34388, 34442, 34474, 34451,
+    34468, 34473, 34444, 34467, 34460, 34928, 34935, {f: 2, c: 34945}, 34941,
+    34937, 35352, 35344, 35342, 35340, 35349, 35338, 35351, 35347, 35350,
+    35343, 35345, 35912, 35962, 35961, {f: 2, c: 36001}, [36215, 58442], 36524,
+    36562, 36564, 36559, 36785, 36865, 36870, 36855, 36864, 36858, 36852,
+    36867, 36861, 36869, 36856, 37013, 37089, 37085, 37090, 37202, 37197,
+    37196, 37336, 37341, 37335, 37340, 37337, 38275, {f: 2, c: 38498}, 38497,
+    38491, 38493, 38500, 38488, 38494, 38587, 39138, [12218, 39340],
+    [12219, 39592], [12220, 39640], [12222, 39717], [12224, 39730],
+    [12225, 39740], 20094, 20602, [20605, 57382], 20572, 20551, 20547, 20556,
+    20570, 20553, 20581, 20598, 20558, 20565, 20597, 20596, 20599, 20559,
+    20495, 20591, 20589, 20828, 20885, 20976, 21098, 21103, 21202, 21209,
+    21208, 21205, 21264, 21263, 21273, {f: 2, c: 21311}, 21310, 21443, 26364,
+    21830, 21866, 21862, 21828, 21854, 21857, 21827, 21834, 21809, 21846,
+    21839, 21845, 21807, 21860, 21816, 21806, 21852, 21804, 21859, 21811,
+    21825, 21847, 22280, 22283, 22281, 22495, 22533, 22538, 22534, 22496,
+    22500, 22522, 22530, 22581, 22519, 22521, 22816, 22882, 23094, 23105,
+    23113, 23142, 23146, 23104, 23100, 23138, 23130, 23110, 23114, 23408,
+    23495, 23493, 23492, 23490, 23487, 23494, 23561, 23560, 23559, 23648,
+    {f: 2, c: 23644}, 23815, 23814, 23822, 23835, 23830, 23842, 23825, 23849,
+    23828, 23833, 23844, 23847, 23831, 24034, 24120, 24118, 24115, 24119,
+    {f: 2, c: 24247}, 24246, 24245, 24254, 24373, 24375, 24407, 24428, 24425,
+    24427, 24471, 24473, 24478, 24472, 24481, 24480, 24476, 24703, 24739,
+    24713, 24736, 24744, 24779, 24756, 24806, 24765, 24773, 24763, 24757,
+    24796, 24764, 24792, 24789, 24774, 24799, 24760, 24794, 24775,
+    {f: 2, c: 25114}, 25160, 25504, 25511, 25458, 25494, 25506, 25509, 25463,
+    25447, 25496, 25514, 25457, 25513, 25481, 25475, 25499, 25451, 25512,
+    25476, 25480, 25497, 25505, 25516, 25490, 25487, 25472, 25467, 25449,
+    25448, 25466, 25949, 25942, 25937, 25945, 25943, 21855, 25935, 25944,
+    25941, 25940, 26012, 26011, 26028, 26063, {f: 2, c: 26059}, 26062, 26205,
+    26202, 26212, 26216, 26214, 26206, 26361, 21207, 26395, 26753, 26799,
+    26786, 26771, 26805, 26751, 26742, 26801, 26791, 26775, 26800, 26755,
+    26820, 26797, 26758, 26757, 26772, 26781, 26792, 26783, 26785, 26754,
+    27442, 27578, {f: 2, c: 27627}, 27691, 28046, 28092, 28147, 28121, 28082,
+    28129, 28108, 28132, 28155, 28154, 28165, 28103, 28107, 28079, 28113,
+    28078, 28126, 28153, 28088, 28151, 28149, 28101, 28114, 28186, 28085,
+    28122, 28139, 28120, 28138, 28145, 28142, 28136, 28102, 28100, 28074,
+    28140, 28095, 28134, 28921, {f: 2, c: 28937}, 28925, 28911, 29245, 29309,
+    29313, 29468, 29467, 29462, 29459, 29465, 29575, 29701, 29706, 29699,
+    29702, 29694, 29709, 29920, {f: 2, c: 29942}, 29980, 29986,
+    {f: 2, c: 30053}, 30050, 30064, 30095, {f: 2, c: 30164}, 30133, 30154,
+    30157, 30350, 30420, 30418, 30427, 30519, 30526, 30524, 30518, 30520,
+    30522, 30827, 30787, 30798, 31077, 31080, 31085, 31227, 31378, 31381,
+    31520, 31528, 31515, 31532, 31526, 31513, 31518, 31534, 31890, 31895,
+    31893, 32070, 32067, 32113, 32046, 32057, 32060, 32064, 32048, 32051,
+    32068, 32047, 32066, 32050, 32049, 32573, 32670, 32666, 32716, 32718,
+    32722, 32796, 32842, 32838, 33071, 33046, 33059, 33067, 33065, 33072,
+    33060, 33282, 33333, 33335, 33334, 33337, 33678, 33694, 33688, 33656,
+    33698, 33686, 33725, 33707, 33682, 33674, 33683, 33673, 33696, 33655,
+    {f: 2, c: 33659}, 33670, 33703, 34389, 24426, 34503, 34496, 34486, 34500,
+    34485, 34502, 34507, 34481, 34479, 34505, 34899, 34974, 34952, 34987,
+    34962, 34966, 34957, 34955, 35219, 35215, 35370, 35357, 35363, 35365,
+    35377, 35373, 35359, 35355, 35362, 35913, 35930, 36009, 36012, 36011,
+    36008, 36010, 36007, 36199, 36198, 36286, 36282, 36571, 36575, 36889,
+    36877, 36890, 36887, 36899, 36895, 36893, 36880, 36885, 36894, 36896,
+    36879, 36898, 36886, 36891, 36884, 37096, 37101, [37117, 58488], 37207,
+    37326, 37365, 37350, 37347, 37351, 37357, 37353, 38281, 38506, 38517,
+    38515, 38520, 38512, 38516, {f: 2, c: 38518}, 38508, 38592, 38634, 38633,
+    31456, 31455, {f: 2, c: 38914}, [12226, 39770], [12227, 40165],
+    [12228, 40565], [12229, 40575], [12230, 40613], [12231, 40635], 20642,
+    20621, 20613, 20633, 20625, 20608, 20630, 20632, 20634, 26368, 20977,
+    21106, {f: 2, c: 21108}, 21097, 21214, 21213, 21211, 21338, 21413, 21883,
+    21888, 21927, 21884, 21898, 21917, 21912, 21890, 21916, 21930, 21908,
+    21895, 21899, 21891, 21939, 21934, 21919, 21822, 21938, 21914, 21947,
+    21932, 21937, 21886, 21897, 21931, 21913, 22285, 22575, 22570, 22580,
+    22564, {f: 2, c: 22576}, 22561, 22557, 22560, {f: 2, c: 22777}, 22880,
+    [23159, 57587], 23194, 23167, 23186, 23195, 23207, 23411, 23409, 23506,
+    23500, 23507, 23504, {f: 2, c: 23562}, 23601, 23884, 23888, 23860, 23879,
+    24061, 24133, 24125, 24128, 24131, 24190, 24266, {f: 2, c: 24257}, 24260,
+    24380, 24429, {f: 2, c: 24489}, 24488, 24785, 24801, 24754, 24758, 24800,
+    24860, 24867, 24826, 24853, 24816, 24827, 24820, 24936, 24817, 24846,
+    24822, 24841, 24832, 24850, 25119, 25161, 25507, 25484, 25551, 25536,
+    25577, 25545, 25542, 25549, 25554, 25571, 25552, 25569, 25558,
+    {f: 2, c: 25581}, 25462, 25588, 25578, 25563, 25682, 25562, 25593, 25950,
+    25958, {f: 2, c: 25954}, 26001, 26000, 26031, 26222, 26224, [26228, 57786],
+    26230, 26223, 26257, 26234, 26238, 26231, {f: 2, c: 26366}, 26399, 26397,
+    26874, 26837, 26848, 26840, 26839, 26885, 26847, 26869, 26862, 26855,
+    26873, 26834, 26866, 26851, 26827, 26829, 26893, 26898, 26894, 26825,
+    26842, 26990, 26875, 27454, 27450, 27453, 27544, 27542, 27580, 27631,
+    {f: 2, c: 27694}, 27692, [28207, 57904], 28216, 28244, 28193, 28210, 28263,
+    28234, 28192, 28197, 28195, 28187, 28251, 28248, 28196, 28246, 28270,
+    28205, 28198, 28271, 28212, 28237, 28218, 28204, 28227, [28189, 57901],
+    28222, 28363, 28297, 28185, 28238, 28259, 28228, 28274, 28265, 28255,
+    {f: 2, c: 28953}, 28966, 28976, 28961, 28982, [29038, 57958], 28956, 29260,
+    29316, 29312, 29494, 29477, 29492, 29481, 29754, 29738, 29747, 29730,
+    29733, {f: 2, c: 29749}, 29748, 29743, 29723, 29734, 29736,
+    {f: 2, c: 29989}, 30059, 30058, 30178, 30171, 30179, 30169, 30168, 30174,
+    30176, {f: 2, c: 30331}, 30358, 30355, 30388, 30428, 30543, 30701, 30813,
+    30828, 30831, 31245, 31240, 31243, 31237, 31232, 31384, 31383, 31382,
+    31461, 31459, 31561, 31574, 31558, 31568, 31570, 31572, 31565, 31563,
+    31567, [31569, 60510], 31903, 31909, 32094, 32080, 32104, 32085, 32043,
+    32110, 32114, 32097, 32102, 32098, 32112, 32115, 21892, {f: 2, c: 32724},
+    32779, 32850, 32901, 33109, 33108, 33099, 33105, 33102, 33081, 33094,
+    33086, 33100, 33107, 33140, 33298, 33308, 33769, 33795, 33784, 33805,
+    33760, 33733, 33803, [33729, 58309], 33775, 33777, 33780, 33879, 33802,
+    33776, 33804, 33740, 33789, 33778, 33738, 33848, 33806, 33796, 33756,
+    33799, 33748, 33759, 34395, 34527, 34521, 34541, 34516, 34523, 34532,
+    34512, 34526, 34903, {f: 2, c: 35009}, 34993, 35203, 35222, 35387, 35424,
+    35413, 35422, 35388, 35393, 35412, 35419, 35408, 35398, 35380, 35386,
+    35382, 35414, 35937, 35970, 36015, 36028, 36019, 36029, 36033, 36027,
+    36032, 36020, 36023, 36022, 36031, 36024, 36234, 36229, 36225, 36302,
+    36317, 36299, 36314, 36305, 36300, 36315, 36294, 36603, 36600, 36604,
+    36764, 36910, 36917, 36913, 36920, 36914, 36918, 37122, 37109, 37129,
+    37118, 37219, 37221, 37327, {f: 2, c: 37396}, 37411, 37385, 37406, 37389,
+    37392, 37383, 37393, 38292, 38287, 38283, 38289, 38291, 38290, 38286,
+    38538, 38542, 38539, 38525, {f: 2, c: 38533}, 38541, 38514, 38532, 38593,
+    38597, 38596, {f: 2, c: 38598}, 38639, 38642, 38860, {f: 2, c: 38917},
+    38920, 39143, 39146, 39151, 39145, 39154, 39149, 39342, 39341,
+    [12232, 40643], [12233, 40653], [12234, 40657], 20098, 20653, 20661,
+    {f: 2, c: 20658}, 20677, 20670, 20652, 20663, 20667, 20655, 20679, 21119,
+    21111, 21117, 21215, 21222, 21220, {f: 2, c: 21218}, 21295, 21983, 21992,
+    21971, 21990, 21966, 21980, 21959, 21969, {f: 2, c: 21987}, 21999, 21978,
+    21985, {f: 2, c: 21957}, 21989, 21961, {f: 2, c: 22290}, 22622, 22609,
+    22616, 22615, 22618, 22612, 22635, 22604, 22637, 22602, 22626, 22610,
+    22603, 22887, 23233, 23241, 23244, 23230, 23229, 23228, 23219, 23234,
+    23218, 23913, 23919, 24140, 24185, 24265, 24264, 24338, 24409, 24492,
+    24494, 24858, 24847, 24904, 24863, 24819, 24859, 24825, 24833, 24840,
+    24910, 24908, 24900, 24909, 24894, 24884, 24871, 24845, 24838, 24887,
+    {f: 2, c: 25121}, 25619, 25662, 25630, 25642, 25645, 25661, 25644, 25615,
+    25628, 25620, 25613, 25654, {f: 2, c: 25622}, 25606, 25964, 26015, 26032,
+    26263, 26249, {f: 2, c: 26247}, 26262, 26244, 26264, 26253, 26371, 27028,
+    26989, 26970, 26999, 26976, 26964, 26997, 26928, 27010, 26954, 26984,
+    26987, 26974, 26963, 27001, 27014, 26973, 26979, 26971, 27463, 27506,
+    27584, 27583, 27603, 27645, 28322, 28335, 28371, 28342, 28354, 28304,
+    28317, 28359, 28357, 28325, 28312, 28348, 28346, 28331, 28369, 28310,
+    28316, 28356, 28372, 28330, 28327, 28340, 29006, 29017, 29033, 29028,
+    29001, 29031, 29020, 29036, 29030, 29004, 29029, 29022, 28998, 29032,
+    29014, 29242, 29266, 29495, 29509, 29503, 29502, 29807, 29786, 29781,
+    29791, 29790, 29761, 29759, 29785, 29787, [29788, 58019], 30070, 30072,
+    30208, 30192, 30209, 30194, 30193, 30202, 30207, 30196, 30195,
+    {f: 2, c: 30430}, 30555, 30571, 30566, 30558, 30563, 30585, 30570, 30572,
+    30556, 30565, 30568, 30562, 30702, 30862, 30896, {f: 2, c: 30871}, 30860,
+    30857, 30844, 30865, 30867, 30847, 31098, 31103, 31105, 33836, 31165,
+    31260, 31258, 31264, 31252, 31263, 31262, {f: 2, c: 31391}, 31607, 31680,
+    31584, 31598, 31591, 31921, 31923, 31925, 32147, 32121, 32145, 32129,
+    32143, 32091, 32622, {f: 2, c: 32617}, 32626, 32681, 32680, 32676, 32854,
+    32856, 32902, 32900, 33137, 33136, 33144, 33125, 33134, 33139, 33131,
+    {f: 2, c: 33145}, 33126, 33285, 33351, 33922, 33911, 33853, 33841, 33909,
+    33894, 33899, 33865, 33900, 33883, 33852, 33845, 33889, 33891, 33897,
+    33901, 33862, 34398, 34396, 34399, 34553, 34579, 34568, 34567, 34560,
+    34558, 34555, {f: 2, c: 34562}, 34566, 34570, 34905, 35039, 35028, 35033,
+    35036, 35032, 35037, 35041, 35018, 35029, 35026, 35228, 35299, 35435,
+    {f: 2, c: 35442}, 35430, 35433, 35440, 35463, 35452, 35427, 35488, 35441,
+    35461, 35437, 35426, 35438, 35436, 35449, 35451, 35390, 35432, 35938,
+    35978, 35977, 36042, {f: 2, c: 36039}, 36036, 36018, 36035, 36034, 36037,
+    36321, 36319, 36328, 36335, 36339, 36346, 36330, 36324, 36326, 36530,
+    36611, 36617, 36606, 36618, 36767, 36786, 36939, 36938, 36947, 36930,
+    36948, 36924, 36949, 36944, 36935, 36943, 36942, 36941, 36945, 36926,
+    36929, 37138, 37143, 37228, 37226, 37225, 37321, 37431, 37463, 37432,
+    37437, 37440, 37438, 37467, 37451, 37476, 37457, 37428, 37449, 37453,
+    37445, 37433, 37439, 37466, 38296, 38552, {f: 2, c: 38548}, 38605, 38603,
+    {f: 2, c: 38601}, 38647, 38651, 38649, 38646, 38742, 38772, 38774,
+    {f: 2, c: 38928}, 38931, 38922, 38930, 38924, 39164, 39156,
+    {f: 2, c: 39165}, 39347, 39345, 39348, 39649, 40169, 40578, [12237, 40718],
+    [12238, 40723], [12239, 40736], 20711, 20718, 20709, 20694, [20717, 60903],
+    20698, 20693, 20687, 20689, 20721, 20686, 20713, 20834, 20979, 21123,
+    21122, 21297, 21421, 22014, 22016, 22043, 22039, 22013, 22036, 22022,
+    22025, {f: 2, c: 22029}, 22007, 22038, 22047, 22024, 22032, 22006, 22296,
+    22294, 22645, 22654, 22659, 22675, 22666, 22649, 22661, 22653, 22781,
+    22821, 22818, 22820, 22890, 22889, 23265, 23270, 23273, 23255, 23254,
+    23256, 23267, 23413, 23518, 23527, 23521, {f: 2, c: 23525}, 23528, 23522,
+    23524, 23519, 23565, 23650, 23940, 23943, 24155, 24163, 24149, 24151,
+    24148, 24275, 24278, 24330, 24390, 24432, 24505, 24903, 24895, 24907,
+    24951, {f: 2, c: 24930}, 24927, 24922, 24920, 24949, 25130, 25735, 25688,
+    25684, 25764, 25720, 25695, 25722, 25681, 25703, 25652, 25709, 25723,
+    25970, 26017, 26071, 26070, 26274, 26280, 26269, 27036, 27048, 27029,
+    27073, 27054, 27091, 27083, 27035, 27063, 27067, 27051, 27060, 27088,
+    27085, 27053, 27084, 27046, 27075, 27043, 27465, 27468, 27699, 28467,
+    28436, 28414, 28435, 28404, 28457, 28478, 28448, 28460, 28431, 28418,
+    28450, 28415, 28399, 28422, 28465, 28472, 28466, 28451, 28437, 28459,
+    28463, 28552, 28458, 28396, 28417, 28402, 28364, 28407, 29076, 29081,
+    29053, 29066, 29060, 29074, 29246, 29330, 29334, 29508, 29520, 29796,
+    29795, 29802, 29808, 29805, 29956, 30097, 30247, 30221, 30219, 30217,
+    30227, 30433, 30435, 30596, 30589, 30591, 30561, 30913, 30879, 30887,
+    30899, 30889, 30883, {f: 2, c: 31118}, 31117, 31278, 31281, 31402, 31401,
+    31469, 31471, 31649, 31637, 31627, 31605, 31639, 31645, 31636, 31631,
+    [31672, 58170], 31623, 31620, 31929, {f: 2, c: 31933}, 32187, 32176, 32156,
+    {f: 2, c: 32189}, 32160, 32202, 32180, 32178, 32177, 32186, 32162, 32191,
+    32181, 32184, 32173, [32210, 58202], 32199, 32172, 32624, {f: 2, c: 32736},
+    32735, 32862, 32858, 32903, 33104, 33152, 33167, 33160, 33162, 33151,
+    33154, 33255, 33274, 33287, 33300, 33310, 33355, 33993, 33983, 33990,
+    33988, 33945, 33950, 33970, 33948, 33995, 33976, 33984, 34003, 33936,
+    33980, 34001, 33994, 34623, 34588, 34619, 34594, 34597, 34612, 34584,
+    34645, 34615, 34601, 35059, 35074, 35060, 35065, 35064, 35069, 35048,
+    35098, 35055, 35494, 35468, 35486, 35491, 35469, 35489, 35475, 35492,
+    35498, 35493, 35496, 35480, 35473, 35482, 35495, 35946, 35981, 35980,
+    36051, {f: 2, c: 36049}, 36203, 36249, 36245, 36348, 36628, 36626, 36629,
+    36627, 36771, 36960, 36952, 36956, 36963, 36953, 36958, 36962, 36957,
+    36955, 37145, 37144, 37150, 37237, 37240, 37239, 37236, 37496, 37548,
+    37504, 37509, 37528, 37526, 37499, 37523, 37532, 37544, 37500, 37521,
+    38305, {f: 2, c: 38312}, 38307, 38309, 38308, 38553, 38556, 38555, 38604,
+    38610, 38656, 38780, 38789, 38902, {f: 2, c: 38935}, 39087, 39089, 39171,
+    39173, 39180, 39177, 39361, {f: 2, c: 39599}, 39654, {f: 2, c: 39745},
+    40180, 40182, 40179, 40636, [12240, 40763], [12241, 40778], 20740, 20736,
+    20731, 20725, 20729, 20738, {f: 2, c: 20744}, 20741, 20956,
+    {f: 3, c: 21127}, 21133, 21130, 21232, 21426, 22062, 22075, 22073, 22066,
+    22079, 22068, 22057, 22099, 22094, 22103, 22132, 22070, {f: 2, c: 22063},
+    22656, 22687, 22686, 22707, 22684, 22702, 22697, 22694, 22893, 23305,
+    23291, 23307, 23285, 23308, 23304, 23534, 23532, 23529, 23531,
+    {f: 2, c: 23652}, 23965, 23956, 24162, 24159, 24161, 24290, 24282, 24287,
+    24285, 24291, 24288, 24392, 24433, 24503, 24501, 24950, 24935, 24942,
+    24925, 24917, 24962, 24956, 24944, 24939, 24958, 24999, 24976, 25003,
+    24974, 25004, 24986, 24996, 24980, 25006, 25134, 25705, 25711, 25721,
+    25758, 25778, 25736, [25744, 57745], 25776, 25765, 25747, 25749, 25769,
+    25746, 25774, 25773, 25771, 25754, 25772, 25753, 25762, 25779, 25973,
+    {f: 2, c: 25975}, 26286, 26283, 26292, 26289, 27171, 27167, 27112, 27137,
+    27166, 27161, 27133, 27169, 27155, 27146, 27123, 27138, 27141, 27117,
+    27153, 27472, 27470, 27556, {f: 2, c: 27589}, 28479, 28540, 28548, 28497,
+    28518, 28500, 28550, 28525, 28507, 28536, 28526, 28558, 28538, 28528,
+    28516, 28567, 28504, 28373, 28527, 28512, 28511, 29087, 29100, 29105,
+    29096, 29270, 29339, 29518, 29527, 29801, 29835, 29827, 29822, 29824,
+    30079, 30240, 30249, 30239, 30244, 30246, {f: 2, c: 30241}, 30362, 30394,
+    30436, 30606, 30599, 30604, 30609, 30603, 30923, 30917, 30906, 30922,
+    30910, 30933, 30908, 30928, 31295, 31292, 31296, 31293, 31287, 31291,
+    31407, 31406, 31661, 31665, 31684, 31668, {f: 2, c: 31686}, 31681, 31648,
+    31692, 31946, 32224, 32244, 32239, 32251, 32216, 32236, 32221, 32232,
+    32227, 32218, 32222, 32233, 32158, 32217, 32242, 32249, 32629, 32631,
+    32687, 32745, 32806, {f: 3, c: 33179}, 33184, 33178, 33176, 34071, 34109,
+    34074, 34030, {f: 2, c: 34092}, 34067, 34065, 34083, 34081, 34068, 34028,
+    34085, 34047, 34054, 34690, 34676, 34678, 34656, 34662, 34680, 34664,
+    34649, 34647, 34636, 34643, 34907, 34909, 35088, 35079, {f: 2, c: 35090},
+    35093, 35082, 35516, 35538, 35527, 35524, 35477, 35531, 35576, 35506,
+    35529, 35522, 35519, 35504, 35542, 35533, 35510, 35513, 35547, 35916,
+    35918, 35948, 36064, 36062, 36070, 36068, {f: 2, c: 36076},
+    {f: 2, c: 36066}, 36060, 36074, 36065, 36205, 36255, 36259, 36395, 36368,
+    36381, 36386, 36367, 36393, 36383, 36385, 36382, 36538, 36637, 36635,
+    36639, 36649, 36646, 36650, 36636, 36638, 36645, 36969, 36974, 36968,
+    36973, 36983, 37168, 37165, 37159, 37169, 37255, 37257, 37259, 37251,
+    37573, 37563, 37559, 37610, 37604, 37569, 37555, 37564, 37586, 37575,
+    37616, 37554, 38317, 38321, 38660, {f: 2, c: 38662}, 38665, 38752, 38797,
+    38795, 38799, 38945, 38955, 38940, 39091, 39178, 39187, 39186, 39192,
+    39389, 39376, 39391, 39387, 39377, 39381, 39378, 39385, 39607,
+    {f: 2, c: 39662}, 39719, 39749, 39748, 39799, 39791, 40198, 40201, 40195,
+    40617, 40638, 40654, 22696, [12242, 40786], 20754, 20760, 20756, 20752,
+    20757, 20864, 20906, 20957, 21137, 21139, 21235, 22105, 22123, 22137,
+    22121, 22116, 22136, 22122, 22120, 22117, 22129, 22127, 22124, 22114,
+    22134, 22721, 22718, 22727, 22725, 22894, 23325, 23348, 23416, 23536,
+    23566, 24394, 25010, 24977, 25001, 24970, 25037, 25014, 25022, 25034,
+    25032, 25136, 25797, 25793, 25803, {f: 2, c: 25787}, 25818, 25796, 25799,
+    25794, 25805, 25791, 25810, 25812, 25790, 25972, 26310, 26313, 26297,
+    26308, 26311, 26296, 27197, 27192, 27194, 27225, 27243, 27224, 27193,
+    27204, 27234, 27233, 27211, 27207, 27189, 27231, 27208, 27481, 27511,
+    27653, 28610, 28593, 28577, 28611, 28580, 28609, 28583, 28595, 28608,
+    28601, [28598, 60318], 28582, 28576, 28596, 29118, 29129, 29136, 29138,
+    29128, 29141, 29113, 29134, 29145, 29148, {f: 2, c: 29123}, 29544, 29852,
+    29859, 29848, 29855, 29854, 29922, {f: 2, c: 29964}, 30260, 30264, 30266,
+    30439, 30437, 30624, {f: 2, c: 30622}, 30629, 30952, 30938, 30956, 30951,
+    31142, {f: 2, c: 31309}, 31302, 31308, 31307, 31418, 31705, 31761, 31689,
+    31716, 31707, 31713, 31721, 31718, {f: 2, c: 31957}, 32266, 32273, 32264,
+    32283, 32291, 32286, [32285, 58211], 32265, 32272, 32633, 32690,
+    {f: 2, c: 32752}, 32750, [32808, 58239], 33203, 33193, 33192, 33275, 33288,
+    {f: 2, c: 33368}, 34122, 34137, 34120, {f: 2, c: 34152}, 34115, 34121,
+    34157, 34154, 34142, 34691, 34719, 34718, 34722, 34701, 34913, 35114,
+    35122, 35109, 35115, 35105, 35242, [35238, 58391], 35558, 35578, 35563,
+    35569, 35584, 35548, 35559, 35566, 35582, {f: 2, c: 35585}, 35575, 35565,
+    35571, 35574, 35580, 35947, 35949, 35987, 36084, 36420, 36401, 36404,
+    36418, 36409, 36405, 36667, 36655, 36664, 36659, 36776, 36774, 36981,
+    36980, 36984, 36978, 36988, 36986, 37172, 37266, 37664, 37686, 37624,
+    37683, 37679, 37666, 37628, 37675, 37636, 37658, 37648, 37670, 37665,
+    37653, 37678, 37657, 38331, {f: 2, c: 38567}, 38570, 38613, 38670, 38673,
+    38678, 38669, 38675, 38671, 38747, [38748, 58565], 38758, 38808, 38960,
+    38968, 38971, 38967, 38957, 38969, 38948, 39184, 39208, 39198, 39195,
+    39201, 39194, 39405, 39394, 39409, 39608, 39612, 39675, 39661, 39720,
+    39825, 40213, 40227, 40230, 40232, 40210, 40219, 40664, 40660,
+    [12243, 40845], [12244, 40860], 20778, 20767, 20769, 20786, 21237, 22158,
+    22144, 22160, 22149, 22151, 22159, 22741, 22739, 22737, 22734, 23344,
+    23338, 23332, 23418, 23607, 23656, 23996, 23994, 23997, 23992, 24171,
+    24396, 24509, 25033, 25026, 25031, 25062, 25035, 25138, 25140, 25806,
+    25802, 25816, 25824, 25840, 25830, 25836, 25841, 25826, 25837,
+    {f: 2, c: 25986}, 26329, 26326, 27264, 27284, 27268, 27298, 27292, 27355,
+    27299, 27262, 27287, 27280, 27296, 27484, 27566, 27610, 27656, 28632,
+    28657, {f: 2, c: 28639}, 28635, 28644, 28651, 28655, 28544, 28652, 28641,
+    28649, 28629, 28654, 28656, 29159, [29151, 60361], 29166, 29158, 29157,
+    29165, 29164, 29172, 29152, 29237, 29254, 29552, 29554, 29865, 29872,
+    29862, 29864, 30278, 30274, 30284, 30442, 30643, 30634, 30640, 30636,
+    30631, 30637, 30703, 30967, 30970, 30964, 30959, 30977, 31143, 31146,
+    31319, 31423, 31751, 31757, 31742, 31735, 31756, 31712, 31968, 31964,
+    31966, 31970, 31967, 31961, 31965, 32302, 32318, 32326, 32311, 32306,
+    32323, 32299, 32317, 32305, 32325, 32321, 32308, 32313, 32328, 32309,
+    32319, 32303, 32580, 32755, 32764, {f: 2, c: 32881}, 32880, 32879, 32883,
+    33222, 33219, 33210, 33218, 33216, 33215, 33213, 33225, 33214, 33256,
+    33289, 33393, 34218, 34180, 34174, 34204, 34193, 34196, 34223, 34203,
+    34183, 34216, 34186, 34214, 34407, 34752, 34769, 34739, 34770, 34758,
+    34731, 34747, 34746, 34760, 34763, 35131, 35126, 35140, 35128, 35133,
+    35244, 35598, 35607, 35609, 35611, 35594, 35616, 35613, 35588, 35600,
+    35905, 35903, 35955, 36090, 36093, 36092, 36088, 36091, 36264, 36425,
+    36427, 36424, 36426, 36676, 36670, 36674, 36677, 36671, 36991, 36989,
+    36996, {f: 2, c: 36993}, 36992, 37177, 37283, 37278, 37276, 37709, 37762,
+    37672, 37749, 37706, 37733, 37707, 37656, 37758, 37740, 37723, 37744,
+    37722, 37716, {f: 3, c: 38346}, 38344, 38342, 38577, 38584, 38614, 38684,
+    38686, 38816, 38867, 38982, 39094, 39221, 39425, 39423, 39854, 39851,
+    39850, 39853, 40251, 40255, 40587, 40655, 40670, {f: 2, c: 40668}, 40667,
+    40766, 40779, 21474, 22165, 22190, 22745, 22744, 23352, 24413, 25059,
+    25139, 25844, 25842, 25854, 25862, {f: 2, c: 25850}, 25847, 26039, 26332,
+    26406, 27315, 27308, 27331, 27323, 27320, 27330, {f: 2, c: 27310}, 27487,
+    27512, 27567, 28681, 28683, 28670, 28678, 28666, 28689, 28687,
+    {f: 2, c: 29179}, 29182, 29176, 29559, 29557, 29863, 29887, 29973, 30294,
+    30296, 30290, 30653, 30655, {f: 2, c: 30651}, 30990, 31150,
+    {f: 2, c: 31329}, 31328, {f: 2, c: 31428}, 31787, 31783, 31786, 31774,
+    31779, 31777, 31975, {f: 2, c: 32340}, 32350, 32346, 32353, 32338, 32345,
+    32584, 32761, 32763, 32887, 32886, 33229, 33231, 33290, 34255, 34217,
+    34253, 34256, 34249, 34224, 34234, 34233, 34799, 34796, 34802, 34784,
+    35206, 35250, 35316, 35624, 35641, 35628, 35627, 35920, 36101, 36441,
+    36451, 36454, 36452, 36447, 36437, 36544, 36681, 36685, 36999, 36995,
+    37000, {f: 2, c: 37291}, 37328, 37780, 37770, 37782, 37794, 37811, 37806,
+    37804, 37808, 37784, 37786, 37783, 38356, 38358, 38352, 38357, 38626,
+    38620, 38617, 38619, 38622, 38692, 38819, 38822, 38829, 38905, 38989,
+    38991, 38988, 38990, 38995, 39098, {f: 2, c: 39230}, 39229, 39214, 39333,
+    39438, 39617, 39683, 39686, 39759, 39758, 39757, 39882, 39881, 39933,
+    39880, 39872, 40273, 40285, 40288, 40672, 40725, 40748, 20787, 22181,
+    22184, {f: 2, c: 22750}, 22754, 23541, 40848, 24300, 25074, 25079, 25078,
+    25077, 25856, 25871, 26336, 26333, 27365, 27357, 27354, 27347, 28699,
+    28703, 28712, 28698, 28701, 28693, 28696, 29190, 29197, 29272, 29346,
+    29560, 29562, 29885, 29898, 29923, 30087, 30086, 30303, 30305, 30663,
+    31001, 31153, 31339, 31337, {f: 2, c: 31806}, 31800, 31805, 31799, 31808,
+    32363, 32365, 32377, {f: 2, c: 32361}, 32371, 32645, 32694, 32697, 32696,
+    33240, 34281, 34269, 34282, 34261, {f: 2, c: 34276}, 34295, 34811, 34821,
+    34829, 34809, 34814, 35168, 35167, 35158, 35166, 35649, 35676, 35672,
+    35657, 35674, {f: 2, c: 35662}, 35654, 35673, 36104, 36106, 36476, 36466,
+    36487, 36470, 36460, 36474, 36468, 36692, 36686, 36781, {f: 2, c: 37002},
+    37297, 37294, 37857, 37841, 37855, 37827, 37832, {f: 2, c: 37852}, 37846,
+    37858, 37837, 37848, 37860, 37847, 37864, 38364, 38580, 38627, 38698,
+    38695, 38753, 38876, 38907, 39006, 39000, 39003, 39100, 39237, 39241,
+    39446, 39449, 39693, 39912, 39911, 39894, 39899, 40329, 40289, 40306,
+    40298, 40300, 40594, 40599, 40595, 40628, 21240, 22199, 22198, 22196,
+    22204, 22756, 23360, 23363, 23421, 23542, 24009, 25080, 25082, 25880,
+    25876, 25881, 26342, 26407, 27372, 28734, 28720, 28722, 29200, 29563,
+    29903, 30306, 30309, 31014, 31018, 31020, 31019, 31431, 31478, 31820,
+    31811, 31821, {f: 2, c: 31983}, 36782, 32381, 32380, 32386, 32588, 32768,
+    33242, 33382, 34299, 34297, 34321, 34298, 34310, 34315, 34311, 34314,
+    {f: 2, c: 34836}, 35172, 35258, 35320, 35696, 35692, 35686, 35695, 35679,
+    35691, 36111, 36109, 36489, 36481, 36485, 36482, 37300, 37323, 37912,
+    37891, 37885, 38369, 38704, 39108, 39250, 39249, 39336, 39467, 39472,
+    39479, 39477, 39955, 39949, 40569, 40629, 40680, 40751, 40799, 40803,
+    40801, {f: 2, c: 20791}, 22209, 22208, 22210, 22804, 23660, 24013, 25084,
+    25086, 25885, 25884, 26005, 26345, 27387, 27396, 27386, 27570, 28748,
+    29211, 29351, 29910, 29908, 30313, 30675, 31824, 32399, 32396, 32700,
+    34327, 34349, 34330, 34851, 34850, 34849, 34847, 35178, 35180, 35261,
+    35700, 35703, 35709, 36115, 36490, 36493, 36491, 36703, 36783, 37306,
+    37934, 37939, 37941, 37946, 37944, 37938, 37931, 38370, {f: 2, c: 38712},
+    38706, [38911, 58586], 39015, 39013, 39255, 39493, 39491, 39488, 39486,
+    39631, 39764, 39761, 39981, 39973, 40367, 40372, 40386, 40376, 40605,
+    40687, 40729, 40796, {f: 2, c: 40806}, 20796, 20795, 22216, 22218, 22217,
+    23423, 24020, 24018, 24398, 25087, 25892, 27402, 27489, 28753, 28760,
+    29568, 29924, 30090, 30318, 30316, 31155, 31840, 31839, 32894, 32893,
+    33247, 35186, 35183, 35324, 35712, {f: 2, c: 36118}, 36497, 36499, 36705,
+    37192, 37956, {f: 2, c: 37969}, {f: 2, c: 38717}, 38851, 38849, 39019,
+    39253, 39509, 39501, 39634, 39706, 40009, 39985, 39998, 39995, 40403,
+    40407, 40756, 40812, 40810, 40852, 22220, 24022, 25088, 25891, 25899,
+    25898, 26348, 27408, 29914, 31434, 31844, 31843, 31845, 32403, 32406,
+    32404, 33250, 34360, 34367, 34865, 35722, 37008, 37007, 37987, 37984,
+    37988, 38760, 39023, 39260, {f: 2, c: 39514}, 39511, {f: 2, c: 39635},
+    39633, 40020, 40023, 40022, 40421, 40607, 40692, 22225, 22761, 25900,
+    28766, {f: 2, c: 30321}, [30679, 60226], 32592, 32648, 34870, 34873, 34914,
+    35731, 35730, 35734, 33399, 36123, 37312, 37994, 38722, 38728, 38724,
+    38854, 39024, 39519, 39714, 39768, 40031, {f: 2, c: 40441},
+    {f: 2, c: 40572}, 40711, 40823, 40818, 24307, 27414, 28771, 31852, 31854,
+    34875, 35264, 36513, 37313, 38002, 38000, 39025, 39262, 39638, 39715,
+    40652, 28772, 30682, 35738, 38007, 38857, 39522, 39525, 32412, 35740,
+    36522, 37317, {f: 2, c: 38013}, 38012, {f: 2, c: 40055}, 40695, 35924,
+    38015, 40474, 29224, 39530, 39729, 40475, 40478, 31858, 20034, 20060,
+    [12048, 20981], [12053, 21274], [12058, 21378], 19975, 19980, 20039, 20109,
+    [12062, 22231], [12076, 23662], [12091, 24435], 19983, 20871, 19982, 20014,
+    20115, 20162, 20169, 20168, 20888, 21244, 21356, 21433, 22304, 22787,
+    22828, [23568, 60417], 24063, 26081, [12110, 27571], 27596, [12115, 27668],
+    [12121, 29247], 20017, 20028, 20200, 20188, 20201, 20193, 20189, 20186,
+    21004, 21001, 21276, 21324, {f: 2, c: 22306}, 22807, 22831, 23425, 23428,
+    23570, 23611, 23668, 23667, 24068, 24192, 24194, 24521, 25097, 25168,
+    27669, 27702, 27715, 27711, 27707, 29358, 29360, 29578, [12145, 31160],
+    32906, 38430, 20238, 20248, 20268, 20213, 20244, 20209, 20224, 20215,
+    20232, 20253, 20226, 20229, 20258, 20243, 20228, 20212, 20242, 20913,
+    21011, 21008, 21158, 21282, 21279, 21325, 21386, 21511, 22241, 22239,
+    22318, 22314, 22324, 22844, 22912, 22908, 22917, 22907, 22910, 22903,
+    22911, 23382, 23573, 23589, 23676, {f: 2, c: 23674}, 23678, 24031,
+    [24181, 57646], 24196, 24322, 24346, 24436, 24533, 24532, 24527, 25180,
+    25182, 25188, 25185, 25190, 25186, 25177, 25184, 25178, 25189, 25911,
+    26095, 26094, 26430, 26425, 26424, 26427, 26426, 26431, 26428, 26419,
+    27672, 27718, 27730, 27740, 27727, [27722, 60796], 27732, {f: 2, c: 27723},
+    28785, 29278, {f: 2, c: 29364}, 29582, 29994, 30335, 31349, [12153, 32593],
+    [12171, 33400], 33404, 33408, 33405, 33407, [12172, 34381], [12177, 35198],
+    37017, [37015, 59347], 37016, 37019, 37012, 38434, 38436, 38432, 38435,
+    20310, 20283, 20322, 20297, 20307, 20324, 20286, 20327, 20306, 20319,
+    20289, 20312, 20269, 20275, 20287, 20321, 20879, 20921, 21020, 21022,
+    21025, {f: 2, c: 21165}, 21257, 21347, 21362, {f: 2, c: 21390}, 21552,
+    21559, 21546, 21588, 21573, 21529, 21532, 21541, 21528, 21565, 21583,
+    21569, 21544, 21540, 21575, 22254, 22247, 22245, 22337, 22341, 22348,
+    22345, 22347, 22354, 22790, 22848, 22950, 22936, 22944, 22935, 22926,
+    22946, 22928, 22927, 22951, 22945, 23438, 23442, 23592, 23594, 23693,
+    23695, 23688, 23691, 23689, 23698, 23690, 23686, 23699, 23701, 24032,
+    24074, 24078, 24203, 24201, 24204, 24200, 24205, 24325, 24349, 24440,
+    24438, 24530, 24529, 24528, 24557, 24552, 24558, 24563, 24545, 24548,
+    24547, 24570, 24559, 24567, 24571, 24576, 24564, 25146, 25219, 25228,
+    {f: 2, c: 25230}, 25236, 25223, 25201, 25211, 25210, 25200, 25217, 25224,
+    25207, 25213, 25202, 25204, 26096, 26100, 26099, 26098, 26101, 26437,
+    26439, 26457, 26453, 26444, 26440, 26461, 26445, 26458, 26443, 27600,
+    {f: 2, c: 27673}, 27768, 27751, 27755, 27780, 27787, 27791, 27761, 27759,
+    27753, 27802, 27757, 27783, 27797, [27804, 57900], 27750, 27763, 27749,
+    27771, 27790, 28788, 28794, 29283, 29375, 29373, 29379, 29382, 29377,
+    29370, 29381, 29589, 29591, {f: 2, c: 29587}, 29586, 30010, 30009,
+    {f: 2, c: 30100}, 30337, 31037, 32820, 32917, 32921, 32912, 32914, 32924,
+    33424, 33423, 33413, 33422, 33425, 33427, 33418, {f: 2, c: 33411},
+    [12184, 35960], 36809, 36799, 37023, 37025, 37029, 37022, 37031, 37024,
+    38448, 38440, 38447, 38445, 20019, 20376, 20348, 20357, 20349, 20352,
+    20359, 20342, 20340, 20361, 20356, 20343, 20300, 20375, 20330, 20378,
+    20345, 20353, 20344, 20368, 20380, 20372, 20382, 20370, 20354, 20373,
+    20331, 20334, 20894, 20924, 20926, 21045, {f: 2, c: 21042}, 21062, 21041,
+    21180, {f: 2, c: 21258}, 21308, 21394, 21396, 21639, 21631, 21633, 21649,
+    21634, 21640, 21611, 21626, 21630, 21605, 21612, 21620, 21606, 21645,
+    21615, 21601, 21600, 21656, 21603, 21607, 21604, 22263, 22265, 22383,
+    22386, 22381, 22379, 22385, 22384, 22390, 22400, 22389, 22395,
+    {f: 2, c: 22387}, 22370, 22376, 22397, 22796, 22853, 22965, 22970, 22991,
+    22990, 22962, 22988, 22977, 22966, 22972, 22979, 22998, 22961, 22973,
+    22976, 22984, 22964, 22983, 23394, 23397, 23443, 23445, 23620, 23623,
+    23726, 23716, 23712, 23733, 23727, 23720, 23724, 23711, 23715, 23725,
+    23714, 23722, 23719, 23709, 23717, 23734, 23728, 23718, 24087, 24084,
+    24089, 24360, {f: 3, c: 24354}, 24404, 24450, 24446, 24445, 24542, 24549,
+    24621, 24614, 24601, 24626, 24587, 24628, 24586, 24599, 24627, 24602,
+    24606, 24620, 24610, 24589, 24592, 24622, 24595, 24593, 24588, 24585,
+    24604, 25108, 25149, 25261, 25268, 25297, 25278, 25258, 25270, 25290,
+    25262, 25267, 25263, 25275, 25257, 25264, 25272, 25917, 26024, 26043,
+    26121, 26108, 26116, 26130, 26120, 26107, 26115, 26123, 26125, 26117,
+    26109, 26129, 26128, 26358, 26378, 26501, 26476, 26510, 26514, 26486,
+    26491, 26520, 26502, 26500, 26484, 26509, 26508, 26490, 26527, 26513,
+    26521, 26499, 26493, 26497, {f: 2, c: 26488}, 26516, 27429, 27520, 27518,
+    27614, 27677, 27795, 27884, 27883, 27886, 27865, 27830, 27860, 27821,
+    27879, 27831, 27856, 27842, 27834, 27843, 27846, 27885, 27890, 27858,
+    27869, 27828, 27786, 27805, 27776, 27870, 27840, 27952, 27853, 27847,
+    27824, 27897, 27855, 27881, 27857, 28820, 28824, 28805, 28819, 28806,
+    28804, 28817, 28822, 28802, 28826, 28803, 29290, 29398, 29387, 29400,
+    29385, 29404, 29394, 29396, 29402, 29388, 29393, 29604, 29601, 29613,
+    29606, 29602, 29600, 29612, 29597, 29917, 29928, {f: 2, c: 30015}, 30014,
+    30092, 30104, 30383, 30451, 30449, 30448, 30453, 30712, 30716, 30713,
+    30715, 30714, 30711, 31042, 31039, 31173, 31352, 31355, 31483, 31861,
+    31997, 32821, 32911, 32942, 32931, 32952, 32949, 32941, 33312, 33440,
+    33472, 33451, 33434, 33432, 33435, 33461, 33447, 33454, 33468, 33438,
+    33466, 33460, 33448, 33441, 33449, 33474, 33444, 33475, 33462, 33442,
+    34416, 34415, {f: 2, c: 34413}, 35926, 36818, 36811, 36819, 36813, 36822,
+    36821, 36823, 37042, 37044, 37039, 37043, 37040, 38457, 38461, 38460,
+    38458, 38467, 20429, 20421, 20435, 20402, 20425, 20427, 20417, 20436,
+    20444, 20441, [20411, 60346], 20403, 20443, 20423, 20438, 20410, 20416,
+    20409, 20460, 21060, 21065, 21184, 21186, 21309, 21372, 21399, 21398,
+    21401, 21400, 21690, 21665, 21677, 21669, 21711, 21699, 33549, 21687,
+    21678, 21718, 21686, {f: 2, c: 21701}, 21664, 21616, 21692, 21666, 21694,
+    21618, 21726, 21680, 22453, {f: 2, c: 22430}, 22436, 22412, 22423, 22429,
+    22427, 22420, 22424, 22415, 22425, 22437, 22426, 22421, 22772, 22797,
+    22867, 23009, 23006, 23022, 23040, 23025, 23005, 23034, 23037, 23036,
+    23030, 23012, 23026, 23031, 23003, 23017, 23027, 23029, 23008, 23038,
+    23028, 23021, 23464, 23628, 23760, 23768, 23756, 23767, 23755, 23771,
+    23774, 23770, 23753, 23751, 23754, 23766, {f: 2, c: 23763}, 23759, 23752,
+    23750, 23758, 23775, 23800, 24057, {f: 3, c: 24097}, 24096, 24100, 24240,
+    24228, 24226, 24219, 24227, 24229, 24327, 24366, 24406, 24454, 24631,
+    24633, 24660, 24690, 24670, 24645, 24659, 24647, 24649, 24667, 24652,
+    24640, 24642, 24671, 24612, 24644, 24664, 24678, 24686, {f: 2, c: 25154},
+    25295, 25357, 25355, 25333, 25358, 25347, 25323, 25337, 25359, 25356,
+    25336, 25334, 25344, {f: 2, c: 25363}, 25338, 25365, 25339, 25328, 25921,
+    25923, 26026, 26047, 26166, 26145, 26162, 26165, 26140, 26150, 26146,
+    26163, 26155, 26170, 26141, 26164, 26169, 26158, {f: 2, c: 26383}, 26561,
+    26610, 26568, 26554, 26588, 26555, 26616, 26584, 26560, 26551, 26565,
+    26603, 26596, 26591, 26549, 26573, 26547, 26615, 26614, 26606, 26595,
+    26562, 26553, 26574, 26599, 26608, 26546, 26620, 26566, 26605, 26572,
+    26542, 26598, 26587, 26618, {f: 2, c: 26569}, 26563, 26602, 26571, 27432,
+    27522, 27524, 27574, 27606, 27608, 27616, {f: 2, c: 27680}, 27944, 27956,
+    27949, 27935, 27964, 27967, 27922, 27914, 27866, 27955, 27908, 27929,
+    27962, 27930, 27921, 27904, 27933, 27970, 27905, 27928, 27959, 27907,
+    27919, 27968, 27911, 27936, 27948, 27912, 27938, 27913, 27920, 28855,
+    28831, 28862, 28849, 28848, 28833, {f: 2, c: 28852}, 28841, 29249,
+    {f: 2, c: 29257}, 29292, 29296, 29299, 29294, 29386, 29412, 29416, 29419,
+    29407, 29418, 29414, 29411, 29573, 29644, 29634, 29640, 29637, 29625,
+    29622, 29621, 29620, 29675, 29631, 29639, 29630, 29635, 29638, 29624,
+    29643, 29932, 29934, 29998, {f: 2, c: 30023}, 30119, 30122, 30329, 30404,
+    30472, {f: 3, c: 30467}, 30474, 30455, 30459, 30458, {f: 2, c: 30695},
+    30726, {f: 2, c: 30737}, 30725, 30736, 30735, 30734, [30729, 58095], 30723,
+    30739, 31050, 31052, 31051, 31045, 31044, 31189, 31181, 31183, 31190,
+    31182, 31360, 31358, 31441, {f: 2, c: 31488}, 31866, {f: 2, c: 31864},
+    {f: 3, c: 31871}, 32003, 32008, 32001, 32600, 32657, 32653, 32702, 32775,
+    {f: 2, c: 32782}, 32788, 32823, 32984, 32967, 32992, 32977, 32968, 32962,
+    32976, 32965, 32995, 32985, 32988, 32970, 32981, 32969, 32975, 32983,
+    32998, 32973, 33279, 33313, 33428, 33497, 33534, 33529, 33543, 33512,
+    33536, 33493, 33594, 33515, 33494, 33524, 33516, 33505, 33522, 33525,
+    33548, 33531, 33526, 33520, 33514, 33508, 33504, 33530, 33523, 33517,
+    34423, 34420, 34428, 34419, 34881, 34894, 34919, 34922, 34921, 35283,
+    35332, 35335, 36210, 36835, 36833, 36846, 36832, 37105, 37053, 37055,
+    37077, 37061, 37054, 37063, 37067, 37064, [37332, 60294], 37331, 38484,
+    38479, 38481, 38483, 38474, 38478, 20510, 20485, 20487, 20499, 20514,
+    20528, 20507, 20469, 20468, 20531, 20535, 20524, {f: 2, c: 20470}, 20503,
+    20508, 20512, 20519, 20533, 20527, 20529, 20494, 20826, 20884, 20883,
+    20938, {f: 2, c: 20932}, 20936, 20942, 21089, 21082, 21074,
+    {f: 2, c: 21086}, 21077, 21090, 21197, 21262, 21406, 21798, 21730, 21783,
+    21778, 21735, 21747, 21732, 21786, 21759, 21764, 21768, 21739, 21777,
+    21765, 21745, 21770, 21755, {f: 2, c: 21751}, 21728, 21774, 21763, 21771,
+    {f: 2, c: 22273}, 22476, 22578, 22485, 22482, 22458, 22470, 22461, 22460,
+    22456, 22454, 22463, 22471, 22480, 22457, 22465, 22798, 22858, 23065,
+    23062, {f: 2, c: 23085}, 23061, 23055, 23063, 23050, 23070, 23091, 23404,
+    23463, 23469, 23468, 23555, 23638, 23636, 23788, 23807, 23790, 23793,
+    23799, 23808, 23801, 24105, 24104, 24232, 24238, 24234, 24236, 24371,
+    24368, 24423, 24669, 24666, 24679, 24641, 24738, 24712, 24704, 24722,
+    24705, 24733, 24707, 24725, 24731, 24727, 24711, 24732, 24718, 25113,
+    25158, 25330, 25360, 25430, 25388, {f: 2, c: 25412}, 25398, 25411, 25572,
+    25401, 25419, 25418, 25404, 25385, 25409, 25396, 25432, 25428, 25433,
+    25389, 25415, 25395, 25434, 25425, 25400, 25431, 25408, 25416, 25930,
+    25926, 26054, {f: 2, c: 26051}, 26050, 26186, 26207, 26183, 26193,
+    {f: 2, c: 26386}, 26655, 26650, 26697, {f: 2, c: 26674}, 26683, 26699,
+    26703, 26646, 26673, 26652, 26677, 26667, 26669, 26671, 26702, 26692,
+    26676, 26653, 26642, 26644, 26662, 26664, 26670, 26701, 26682, 26661,
+    26656, 27436, 27439, 27437, 27441, 27444, 27501, 32898, 27528, 27622,
+    27620, 27624, 27619, 27618, 27623, 27685, 28026, {f: 2, c: 28003}, 28022,
+    27917, 28001, 28050, 27992, 28002, 28013, 28015, 28049, 28045, 28143,
+    28031, 28038, 27998, [28007, 59078], 28000, 28055, 28016, 28028, 27999,
+    28034, 28056, 27951, 28008, 28043, 28030, 28032, 28036, 27926, 28035,
+    28027, 28029, 28021, 28048, 28892, 28883, 28881, 28893, 28875, 32569,
+    28898, 28887, 28882, 28894, 28896, 28884, 28877, {f: 3, c: 28869}, 28890,
+    28878, 28897, 29250, 29304, 29303, 29302, 29440, 29434, 29428, 29438,
+    29430, 29427, 29435, 29441, 29651, 29657, 29669, 29654, 29628, 29671,
+    29667, 29673, 29660, 29650, 29659, 29652, 29661, 29658, {f: 2, c: 29655},
+    29672, {f: 2, c: 29918}, {f: 2, c: 29940}, 29985, 30043, 30047, 30128,
+    30145, 30139, 30148, 30144, 30143, 30134, 30138, 30346, 30409, 30493,
+    30491, 30480, 30483, 30482, 30499, 30481, 30485, {f: 2, c: 30489}, 30498,
+    30503, 30755, 30764, 30754, 30773, 30767, 30760, 30766, 30763, 30753,
+    30761, 30771, 30762, 30769, 31060, 31067, 31055, 31068, 31059, 31058,
+    31057, {f: 2, c: 31211}, 31200, 31214, 31213, 31210, 31196, 31198, 31197,
+    31366, 31369, 31365, {f: 2, c: 31371}, 31370, 31367, 31448, 31504, 31492,
+    31507, 31493, 31503, 31496, 31498, 31502, 31497, 31506, 31876, 31889,
+    31882, 31884, 31880, 31885, 31877, 32030, 32029, 32017, 32014, 32024,
+    32022, 32019, 32031, 32018, 32015, 32012, 32604, 32609, 32606, 32608,
+    32605, 32603, 32662, 32658, 32707, 32706, 32704, 32790, 32830, 32825,
+    33018, 33010, 33017, 33013, 33025, 33019, 33024, 33281, 33327, 33317,
+    33587, 33581, 33604, 33561, 33617, 33573, 33622, 33599, 33601, 33574,
+    33564, 33570, 33602, 33614, 33563, 33578, 33544, 33596, 33613, 33558,
+    33572, 33568, 33591, 33583, 33577, 33607, 33605, 33612, 33619, 33566,
+    33580, 33611, 33575, 33608, 34387, 34386, 34466, 34472, 34454, 34445,
+    34449, 34462, 34439, 34455, 34438, 34443, 34458, 34437, 34469, 34457,
+    34465, 34471, 34453, 34456, 34446, 34461, 34448, 34452, {f: 2, c: 34883},
+    34925, {f: 2, c: 34933}, 34930, 34944, 34929, 34943, 34927, 34947, 34942,
+    34932, 34940, 35346, 35911, 35927, 35963, 36004, 36003, 36214, 36216,
+    36277, 36279, 36278, 36561, 36563, 36862, 36853, 36866, 36863, 36859,
+    36868, 36860, 36854, 37078, 37088, {f: 2, c: 37081}, 37091, 37087, 37093,
+    37080, 37083, 37079, 37084, 37092, 37200, {f: 2, c: 37198}, 37333, 37346,
+    37338, 38492, 38495, 38588, 39139, [12221, 39647], [12223, 39727], 20095,
+    20592, 20586, 20577, 20574, 20576, 20563, 20555, 20573, 20594, 20552,
+    20557, 20545, 20571, 20554, 20578, 20501, 20549, 20575, 20585, 20587,
+    {f: 2, c: 20579}, 20550, 20544, 20590, 20595, 20567, 20561, 20944, 21099,
+    21101, 21100, 21102, 21206, 21203, 21293, 21404, {f: 2, c: 21877}, 21820,
+    21837, 21840, 21812, 21802, 21841, 21858, 21814, 21813, 21808, 21842,
+    21829, 21772, 21810, 21861, 21838, 21817, 21832, 21805, 21819, 21824,
+    21835, 22282, 22279, 22523, 22548, 22498, 22518, 22492, 22516, 22528,
+    22509, 22525, 22536, 22520, 22539, 22515, 22479, 22535, 22510, 22499,
+    22514, 22501, 22508, 22497, 22542, 22524, 22544, 22503, 22529, 22540,
+    22513, 22505, 22512, 22541, 22532, 22876, 23136, 23128, 23125,
+    [23143, 60437], 23134, 23096, 23093, 23149, 23120, 23135, 23141, 23148,
+    23123, 23140, 23127, 23107, 23133, 23122, 23108, 23131, 23112, 23182,
+    23102, 23117, 23097, 23116, 23152, 23145, 23111, 23121, 23126, 23106,
+    23132, 23410, 23406, 23489, 23488, 23641, 23838, 23819, 23837, 23834,
+    23840, 23820, 23848, 23821, 23846, 23845, 23823, 23856, 23826, 23843,
+    23839, 23854, 24126, 24116, 24241, 24244, 24249, {f: 2, c: 24242}, 24374,
+    24376, 24475, 24470, 24479, 24714, 24720, 24710, 24766, 24752, 24762,
+    {f: 2, c: 24787}, 24783, 24804, 24793, 24797, 24776, 24753, 24795, 24759,
+    24778, 24767, 24771, 24781, 24768, 25394, 25445, 25482, 25474, 25469,
+    25533, 25502, 25517, 25501, 25495, 25515, 25486, 25455, 25479, 25488,
+    25454, 25519, 25461, 25500, 25453, 25518, 25468, 25508, 25403, 25503,
+    25464, 25477, 25473, 25489, 25485, 25456, 25939, 26061, 26213, 26209,
+    26203, 26201, 26204, 26210, 26392, 26745, 26759, 26768, 26780,
+    {f: 2, c: 26733}, 26798, 26795, 26966, 26735, 26787, 26796, 26793, 26741,
+    26740, 26802, 26767, 26743, 26770, 26748, 26731, 26738, 26794, 26752,
+    26737, 26750, 26779, 26774, 26763, 26784, 26761, 26788, 26744, 26747,
+    26769, 26764, 26762, 26749, 27446, 27443, {f: 2, c: 27447}, 27537, 27535,
+    {f: 2, c: 27533}, 27532, 27690, 28096, 28075, 28084, 28083, 28276, 28076,
+    28137, 28130, 28087, 28150, 28116, 28160, 28104, 28128, 28127, 28118,
+    28094, 28133, {f: 2, c: 28124}, 28123, 28148, 28106, 28093, 28141, 28144,
+    28090, 28117, 28098, 28111, 28105, 28112, 28146, 28115, 28157, 28119,
+    28109, 28131, 28091, 28922, 28941, 28919, 28951, 28916, 28940, 28912,
+    28932, 28915, 28944, 28924, 28927, 28934, 28947, 28928, 28920, 28918,
+    28939, 28930, 28942, 29310, {f: 2, c: 29307}, 29311, 29469, 29463, 29447,
+    29457, 29464, 29450, 29448, 29439, 29455, 29470, 29576, 29686, 29688,
+    29685, 29700, 29697, 29693, 29703, 29696, 29690, 29692, 29695, 29708,
+    29707, 29684, 29704, 30052, 30051, 30158, 30162, 30159, {f: 2, c: 30155},
+    30161, 30160, 30351, 30345, 30419, 30521, 30511, 30509, {f: 2, c: 30513},
+    30516, 30515, 30525, 30501, 30523, 30517, 30792, 30802, 30793, 30797,
+    30794, 30796, 30758, 30789, 30800, 31076, 31079, {f: 2, c: 31081}, 31075,
+    31083, 31073, 31163, 31226, 31224, {f: 2, c: 31222}, 31375, 31380, 31376,
+    31541, 31547, 31540, 31525, 31536, 31522, 31524, 31539, 31512, 31530,
+    31517, 31537, 31531, 31533, 31535, 31538, 31544, 31514, 31523, 31892,
+    31896, 31894, 31907, 32053, 32061, 32056, 32054, 32058, 32069, 32044,
+    32041, 32065, 32071, {f: 2, c: 32062}, 32074, 32059, 32040, 32611, 32661,
+    {f: 2, c: 32668}, 32667, {f: 2, c: 32714}, 32717, {f: 2, c: 32720}, 32711,
+    32719, 32713, 32799, 32798, 32795, 32839, 32835, 32840, 33048, 33061,
+    33049, 33051, 33069, 33055, 33068, 33054, 33057, 33045, 33063, 33053,
+    33058, 33297, 33336, 33331, 33338, 33332, 33330, 33396, 33680, 33699,
+    33704, 33677, 33658, 33651, 33700, 33652, 33679, 33665, 33685, 33689,
+    33653, 33684, 33705, 33661, 33667, 33676, 33693, 33691, 33706, 33675,
+    33662, 33701, 33711, 33672, 33687, 33712, 33663, 33702, 33671, 33710,
+    33654, 34393, 34390, 34495, 34487, 34498, 34497, 34501, 34490, 34480,
+    34504, 34489, 34483, 34488, 34508, 34484, {f: 2, c: 34491}, 34499,
+    {f: 2, c: 34493}, 34898, 34953, 34965, 34984, 34978, 34986, 34970, 34961,
+    34977, 34975, 34968, 34983, 34969, 34971, 34967, 34980, 34988, 34956,
+    34963, 34958, 35202, 35286, 35289, 35285, 35376, 35367, 35372, 35358,
+    35897, 35899, {f: 2, c: 35932}, 35965, 36005, 36221, 36219, 36217, 36284,
+    36290, 36281, 36287, 36289, 36568, 36574, 36573, 36572, 36567,
+    {f: 2, c: 36576}, 36900, 36875, 36881, 36892, 36876, 36897, 37103, 37098,
+    37104, 37108, {f: 2, c: 37106}, 37076, {f: 2, c: 37099}, 37097, 37206,
+    37208, 37210, 37203, 37205, 37356, 37364, 37361, 37363, 37368, 37348,
+    37369, {f: 2, c: 37354}, 37367, 37352, 37358, 38266, 38278, 38280, 38524,
+    38509, 38507, 38513, 38511, 38591, 38762, 38916, 39141, 39319, 20635,
+    20629, 20628, 20638, 20619, 20643, 20611, 20620, 20622, 20637, 20584,
+    20636, 20626, 20610, 20615, 20831, 20948, 21266, 21265, 21412, 21415,
+    21905, 21928, 21925, 21933, 21879, 22085, 21922, 21907, 21896, 21903,
+    21941, 21889, 21923, 21906, 21924, 21885, 21900, 21926, 21887, 21909,
+    21921, 21902, 22284, 22569, 22583, 22553, 22558, 22567, 22563, 22568,
+    22517, 22600, 22565, 22556, 22555, 22579, 22591, 22582, 22574, 22585,
+    22584, 22573, 22572, 22587, 22881, 23215, 23188, 23199, 23162, 23202,
+    23198, 23160, 23206, 23164, 23205, 23212, 23189, 23214, 23095, 23172,
+    23178, 23191, 23171, 23179, 23209, 23163, 23165, 23180, 23196, 23183,
+    23187, 23197, 23530, 23501, 23499, 23508, 23505, 23498, 23502, 23564,
+    23600, 23863, 23875, 23915, 23873, 23883, 23871, 23861, 23889, 23886,
+    23893, 23859, 23866, 23890, 23869, 23857, 23897, 23874, 23865, 23881,
+    23864, 23868, 23858, 23862, 23872, 23877, 24132, 24129, [24408, 57673],
+    24486, 24485, 24491, 24777, 24761, 24780, 24802, 24782, 24772, 24852,
+    24818, 24842, 24854, 24837, 24821, 24851, 24824, 24828, 24830, 24769,
+    24835, 24856, 24861, 24848, 24831, 24836, 24843, 25162, 25492, 25521,
+    25520, 25550, 25573, 25576, 25583, 25539, 25757, 25587, 25546, 25568,
+    25590, 25557, 25586, 25589, 25697, 25567, 25534, 25565, 25564, 25540,
+    25560, 25555, 25538, 25543, 25548, 25547, 25544, 25584, 25559, 25561,
+    25906, 25959, 25962, 25956, 25948, 25960, 25957, 25996, {f: 2, c: 26013},
+    26030, 26064, 26066, 26236, 26220, 26235, 26240, 26225, 26233, 26218,
+    26226, 26369, 26892, 26835, 26884, 26844, 26922, 26860, 26858, 26865,
+    26895, 26838, 26871, 26859, 26852, 26870, 26899, 26896, 26867, 26849,
+    26887, 26828, 26888, 26992, 26804, 26897, 26863, 26822, 26900, 26872,
+    26832, 26877, 26876, 26856, 26891, 26890, 26903, 26830, 26824,
+    {f: 2, c: 26845}, 26854, 26868, 26833, 26886, 26836, 26857, 26901, 26917,
+    26823, 27449, 27451, 27455, 27452, 27540, 27543, 27545, 27541, 27581,
+    27632, {f: 2, c: 27634}, 27696, 28156, {f: 2, c: 28230}, 28191, 28233,
+    28296, {f: 2, c: 28220}, 28229, 28258, 28203, 28223, 28225, 28253, 28275,
+    28188, 28211, 28235, 28224, 28241, 28219, 28163, 28206, 28254, 28264,
+    28252, 28257, 28209, 28200, 28256, 28273, 28267, 28217, 28194, 28208,
+    28243, 28261, 28199, 28280, 28260, 28279, 28245, 28281, 28242, 28262,
+    {f: 2, c: 28213}, 28250, 28960, 28958, 28975, 28923, 28974, 28977, 28963,
+    28965, 28962, 28978, 28959, 28968, 28986, 28955, 29259, 29274,
+    {f: 2, c: 29320}, 29318, 29317, 29323, 29458, 29451, 29488, 29474, 29489,
+    29491, 29479, 29490, 29485, 29478, 29475, 29493, 29452, 29742, 29740,
+    29744, 29739, 29718, 29722, 29729, 29741, 29745, 29732, 29731, 29725,
+    29737, 29728, 29746, 29947, 29999, 30063, 30060, 30183, 30170, 30177,
+    30182, 30173, 30175, 30180, 30167, 30357, 30354, 30426, {f: 2, c: 30534},
+    30532, 30541, 30533, 30538, 30542, {f: 2, c: 30539}, 30686, 30700, 30816,
+    {f: 2, c: 30820}, 30812, 30829, 30833, 30826, 30830, 30832, 30825, 30824,
+    30814, 30818, 31092, 31091, 31090, 31088, 31234, 31242, 31235, 31244,
+    31236, 31385, 31462, 31460, 31562, 31559, 31556, 31560, 31564, 31566,
+    31552, 31576, 31557, 31906, 31902, 31912, 31905, 32088, 32111, 32099,
+    32083, 32086, 32103, 32106, 32079, 32109, 32092, 32107, 32082, 32084,
+    32105, 32081, 32095, 32078, {f: 2, c: 32574}, {f: 2, c: 32613}, 32674,
+    {f: 2, c: 32672}, 32727, 32849, {f: 2, c: 32847}, 33022, 32980, 33091,
+    33098, 33106, 33103, 33095, 33085, 33101, 33082, 33254, 33262,
+    {f: 3, c: 33271}, 33284, {f: 2, c: 33340}, 33343, 33397, 33595,
+    [33743, 60382], 33785, 33827, 33728, 33768, 33810, 33767, 33764, 33788,
+    33782, 33808, 33734, 33736, 33771, 33763, 33727, 33793, 33757, 33765,
+    33752, 33791, 33761, 33739, 33742, 33750, 33781, 33737, 33801,
+    [33807, 58332], 33758, 33809, 33798, 33730, 33779, 33749, 33786, 33735,
+    33745, 33770, 33811, 33690, 33731, 33772, 33774, 33732, 33787, 33751,
+    33762, 33819, 33755, 33790, 34520, 34530, 34534, 34515, 34531, 34522,
+    34538, 34525, 34539, 34524, 34540, 34537, 34519, 34536, 34513, 34888,
+    34902, 34901, 35002, 35031, 35001, 35000, 35008, 35006, 34998, 35004,
+    34999, 35005, 34994, 35073, 35017, 35221, 35224, 35223, 35293,
+    {f: 2, c: 35290}, 35406, 35405, 35385, 35417, 35392, {f: 2, c: 35415},
+    {f: 2, c: 35396}, 35410, 35400, 35409, 35402, 35404, 35407, 35935, 35969,
+    35968, 36026, 36030, 36016, 36025, 36021, 36228, 36224, 36233, 36312,
+    36307, 36301, 36295, 36310, 36316, 36303, 36309, 36313, 36296, 36311,
+    36293, 36591, 36599, 36602, 36601, 36582, 36590, 36581, 36597,
+    {f: 2, c: 36583}, 36598, 36587, 36593, 36588, 36596, 36585, 36909, 36916,
+    36911, 37126, 37164, [37124, 60367], 37119, 37116, 37128, 37113, 37115,
+    37121, 37120, 37127, 37125, 37123, 37217, 37220, 37215, 37218, 37216,
+    37377, 37386, 37413, 37379, 37402, 37414, 37391, 37388, 37376, 37394,
+    37375, 37373, 37382, 37380, 37415, 37378, 37404, 37412, 37401, 37399,
+    37381, 37398, 38267, 38285, 38284, 38288, 38535, 38526, {f: 2, c: 38536},
+    38531, 38528, 38594, 38600, 38595, 38641, 38640, 38764, 38768, 38766,
+    38919, 39081, 39147, 40166, [12235, 40697], {f: 2, c: 20099}, 20150, 20669,
+    20671, 20678, 20654, 20676, 20682, 20660, 20680, 20674, 20656, 20673,
+    20666, 20657, 20683, 20681, 20662, 20664, 20951, 21114, 21112,
+    {f: 2, c: 21115}, 21955, 21979, 21964, 21968, 21963, 21962, 21981,
+    [21952, 64013], 21972, 21956, 21993, 21951, 21970, 21901, 21967, 21973,
+    21986, 21974, 21960, 22002, 21965, 21977, 21954, 22292, 22611, 22632,
+    22628, 22607, 22605, 22601, 22639, 22613, 22606, 22621, 22617, 22629,
+    22619, 22589, 22627, 22641, 22780, 23239, 23236, 23243, 23226, 23224,
+    23217, 23221, 23216, 23231, 23240, 23227, 23238, 23223, 23232, 23242,
+    23220, 23222, 23245, 23225, 23184, 23510, {f: 2, c: 23512}, 23583, 23603,
+    23921, 23907, 23882, 23909, 23922, 23916, 23902, 23912, 23911, 23906,
+    24048, 24143, 24142, 24138, 24141, 24139, 24261, 24268, 24262, 24267,
+    24263, 24384, 24495, 24493, 24823, {f: 2, c: 24905}, 24875, 24901, 24886,
+    24882, 24878, 24902, 24879, 24911, 24873, 24896, 25120, 37224, 25123,
+    25125, 25124, 25541, 25585, 25579, 25616, 25618, 25609, 25632, 25636,
+    25651, 25667, 25631, 25621, 25624, 25657, 25655, {f: 2, c: 25634}, 25612,
+    25638, 25648, 25640, 25665, 25653, 25647, 25610, 25626, 25664, 25637,
+    25639, 25611, 25575, 25627, 25646, 25633, 25614, 25967, 26002, 26067,
+    26246, 26252, 26261, 26256, 26251, 26250, 26265, 26260, 26232, 26400,
+    26982, 26975, 26936, 26958, 26978, 26993, 26943, 26949, 26986, 26937,
+    26946, 26967, 26969, 27002, {f: 2, c: 26952}, 26933, 26988, 26931, 26941,
+    26981, 26864, 27000, 26932, 26985, 26944, 26991, 26948, 26998, 26968,
+    26945, 26996, 26956, 26939, 26955, 26935, 26972, 26959, 26961, 26930,
+    26962, 26927, 27003, 26940, 27462, 27461, 27459, 27458, 27464, 27457,
+    27547, {f: 2, c: 27643}, 27641, {f: 2, c: 27639}, 28315, 28374, 28360,
+    28303, 28352, 28319, {f: 2, c: 28307}, 28320, 28337, 28345, 28358, 28370,
+    28349, 28353, 28318, 28361, 28343, 28336, 28365, 28326, 28367, 28338,
+    28350, 28355, 28380, 28376, 28313, 28306, 28302, 28301, 28324, 28321,
+    28351, 28339, 28368, 28362, 28311, 28334, 28323, 28999, 29012, 29010,
+    29027, 29024, 28993, 29021, [29026, 61080], 29042, 29048, 29034, 29025,
+    28994, 29016, 28995, 29003, 29040, 29023, 29008, 29011, 28996, 29005,
+    29018, 29263, 29325, 29324, 29329, 29328, 29326, 29500, 29506, 29499,
+    29498, 29504, 29514, 29513, 29764, {f: 2, c: 29770}, 29778, 29777, 29783,
+    29760, {f: 2, c: 29775}, 29774, 29762, 29766, 29773, 29780, 29921, 29951,
+    29950, 29949, 29981, 30073, 30071, 27011, 30191, 30223, 30211, 30199,
+    30206, 30204, [30201, 60782], 30200, 30224, 30203, 30198, 30189, 30197,
+    30205, 30361, 30389, 30429, 30549, {f: 2, c: 30559}, 30546, 30550, 30554,
+    30569, 30567, 30548, 30553, 30573, 30688, 30855, 30874, 30868, 30863,
+    30852, 30869, {f: 2, c: 30853}, 30881, 30851, 30841, 30873, 30848, 30870,
+    30843, 31100, 31106, 31101, 31097, 31249, {f: 2, c: 31256}, 31250, 31255,
+    31253, 31266, 31251, 31259, 31248, 31395, 31394, 31390, 31467, 31590,
+    31588, 31597, 31604, 31593, 31602, 31589, 31603, 31601, 31600, 31585,
+    31608, 31606, 31587, 31922, 31924, 31919, 32136, 32134, 32128, 32141,
+    32127, 32133, 32122, 32142, 32123, 32131, 32124, 32140, 32148, 32132,
+    32125, 32146, 32621, 32619, {f: 2, c: 32615}, 32620, 32678, 32677, 32679,
+    {f: 2, c: 32731}, 32801, 33124, 33120, 33143, 33116, 33129, 33115, 33122,
+    33138, 26401, 33118, 33142, 33127, 33135, 33092, 33121, 33309, 33353,
+    33348, 33344, 33346, 33349, 34033, 33855, 33878, 33910, 33913, 33935,
+    33933, 33893, 33873, 33856, 33926, 33895, 33840, 33869, 33917, 33882,
+    33881, 33908, 33907, 33885, 34055, 33886, 33847, 33850, 33844, 33914,
+    33859, 33912, 33842, 33861, 33833, 33753, 33867, 33839, 33858, 33837,
+    33887, 33904, 33849, 33870, 33868, 33874, 33903, 33989, 33934, 33851,
+    33863, 33846, 33843, 33896, 33918, 33860, 33835, 33888, 33876, 33902,
+    33872, 34571, 34564, 34551, 34572, 34554, 34518, 34549, 34637, 34552,
+    34574, 34569, 34561, 34550, 34573, 34565, 35030, 35019, {f: 2, c: 35021},
+    35038, 35035, 35034, 35020, 35024, 35205, 35227, 35295, 35301, 35300,
+    35297, 35296, 35298, 35292, 35302, 35446, 35462, 35455, 35425, 35391,
+    35447, 35458, 35460, 35445, 35459, 35457, 35444, 35450, 35900, 35915,
+    35914, 35941, 35940, 35942, 35974, {f: 2, c: 35972}, 36044,
+    {f: 2, c: 36200}, 36241, 36236, {f: 2, c: 36238}, 36237, {f: 2, c: 36243},
+    36240, 36242, 36336, 36320, 36332, 36337, 36334, 36304, 36329, 36323,
+    36322, 36327, 36338, 36331, 36340, 36614, 36607, 36609, 36608, 36613,
+    {f: 2, c: 36615}, 36610, [36619, 60507], 36946, 36927, 36932, 36937, 36925,
+    37136, 37133, 37135, 37137, 37142, 37140, 37131, 37134, {f: 2, c: 37230},
+    37448, 37458, 37424, 37434, 37478, 37427, 37477, 37470, 37507, 37422,
+    37450, 37446, 37485, 37484, 37455, 37472, 37479, 37487, 37430, 37473,
+    37488, 37425, 37460, 37475, 37456, 37490, 37454, 37459, 37452, 37462,
+    37426, 38303, 38300, 38302, 38299, {f: 2, c: 38546}, 38545, 38551, 38606,
+    38650, 38653, 38648, 38645, 38771, {f: 2, c: 38775}, 38770, 38927,
+    {f: 2, c: 38925}, 39084, 39158, 39161, 39343, 39346, 39344, 39349, 39597,
+    39595, 39771, 40170, 40173, 40167, 40576, [12236, 40701], 20710, 20692,
+    20695, 20712, 20723, 20699, 20714, 20701, 20708, 20691, 20716, 20720,
+    20719, 20707, 20704, 20952, {f: 2, c: 21120}, 21225, 21227, 21296, 21420,
+    22055, 22037, 22028, 22034, 22012, 22031, 22044, 22017, 22035, 22018,
+    22010, 22045, 22020, 22015, 22009, 22665, 22652, 22672, 22680, 22662,
+    22657, 22655, 22644, 22667, 22650, 22663, 22673, 22670, 22646, 22658,
+    22664, 22651, 22676, 22671, 22782, 22891, 23260, 23278, 23269, 23253,
+    23274, 23258, 23277, 23275, 23283, 23266, 23264, 23259, 23276, 23262,
+    23261, 23257, 23272, 23263, 23415, 23520, 23523, 23651, 23938, 23936,
+    23933, 23942, 23930, 23937, 23927, 23946, 23945, 23944, 23934, 23932,
+    23949, 23929, 23935, {f: 2, c: 24152}, 24147, 24280, 24273, 24279, 24270,
+    24284, 24277, 24281, 24274, 24276, 24388, 24387, 24431, 24502, 24876,
+    24872, 24897, 24926, 24945, 24947, {f: 2, c: 24914}, 24946, 24940, 24960,
+    24948, 24916, 24954, 24923, 24933, 24891, 24938, 24929, 24918, 25129,
+    25127, 25131, 25643, 25677, 25691, 25693, 25716, 25718, {f: 2, c: 25714},
+    25725, 25717, 25702, 25766, 25678, 25730, 25694, 25692, 25675, 25683,
+    25696, 25680, 25727, 25663, 25708, 25707, 25689, 25701, 25719, 25971,
+    26016, 26273, 26272, 26271, 26373, 26372, 26402, 27057, 27062, 27081,
+    27040, 27086, 27030, 27056, 27052, 27068, 27025, 27033, 27022, 27047,
+    27021, 27049, 27070, 27055, 27071, 27076, 27069, 27044, 27092, 27065,
+    27082, 27034, 27087, 27059, 27027, 27050, 27041, 27038, 27097, 27031,
+    27024, 27074, 27061, 27045, 27078, 27466, 27469, 27467, {f: 3, c: 27550},
+    {f: 2, c: 27587}, 27646, 28366, 28405, 28401, 28419, 28453, 28408, 28471,
+    28411, 28462, 28425, 28494, {f: 2, c: 28441}, 28455, 28440, 28475, 28434,
+    28397, 28426, 28470, 28531, 28409, 28398, 28461, 28480, 28464, 28476,
+    28469, 28395, 28423, 28430, 28483, 28421, 28413, 28406, 28473, 28444,
+    28412, 28474, 28447, 28429, 28446, 28424, 28449, 29063, 29072, 29065,
+    29056, 29061, 29058, 29071, 29051, 29062, 29057, 29079, 29252, 29267,
+    29335, 29333, 29331, 29507, 29517, 29521, 29516, 29794, 29811, 29809,
+    29813, 29810, 29799, 29806, 29952, {f: 2, c: 29954}, 30077, 30096, 30230,
+    30216, 30220, 30229, 30225, 30218, 30228, 30392, 30593, 30588, 30597,
+    30594, 30574, 30592, 30575, 30590, 30595, 30898, 30890, 30900, 30893,
+    30888, 30846, 30891, 30878, 30885, 30880, 30892, 30882, 30884, 31128,
+    {f: 2, c: 31114}, 31126, 31125, 31124, 31123, 31127, 31112, 31122, 31120,
+    31275, 31306, 31280, 31279, 31272, 31270, 31400, {f: 2, c: 31403}, 31470,
+    31624, 31644, 31626, 31633, 31632, 31638, 31629, 31628, 31643, 31630,
+    31621, 31640, 21124, 31641, 31652, 31618, 31931, 31935, 31932, 31930,
+    32167, 32183, 32194, 32163, 32170, 32193, 32192, 32197, 32157, 32206,
+    32196, 32198, {f: 2, c: 32203}, 32175, 32185, 32150, 32188, 32159, 32166,
+    32174, 32169, 32161, 32201, 32627, {f: 2, c: 32738}, 32741, 32734, 32804,
+    32861, 32860, 33161, 33158, 33155, 33159, 33165, 33164, 33163, 33301,
+    33943, 33956, 33953, 33951, 33978, 33998, 33986, 33964, 33966, 33963,
+    33977, 33972, 33985, 33997, 33962, 33946, 33969, 34000, 33949, 33959,
+    33979, 33954, 33940, 33991, 33996, 33947, 33961, 33967, [33960, 58327],
+    34006, 33944, 33974, 33999, 33952, 34007, 34004, 34002, 34011, 33968,
+    33937, 34401, 34611, 34595, 34600, 34667, 34624, 34606, 34590, 34593,
+    34585, 34587, 34627, 34604, 34625, 34622, 34630, 34592, 34610, 34602,
+    34605, 34620, 34578, 34618, 34609, 34613, 34626, {f: 2, c: 34598}, 34616,
+    34596, 34586, 34608, 34577, 35063, 35047, {f: 2, c: 35057}, 35066, 35070,
+    35054, 35068, 35062, 35067, 35056, 35052, 35051, 35229, 35233, 35231,
+    35230, 35305, 35307, 35304, 35499, 35481, 35467, 35474, 35471, 35478,
+    35901, {f: 2, c: 35944}, 36053, 36047, 36055, 36246, 36361, 36354, 36351,
+    36365, 36349, 36362, 36355, 36359, 36358, 36357, 36350, 36352, 36356,
+    {f: 2, c: 36624}, 36622, 36621, 37155, 37148, 37152, 37154, 37151, 37149,
+    37146, 37156, 37153, 37147, 37242, 37234, 37241, 37235, 37541, 37540,
+    37494, 37531, 37498, 37536, 37524, 37546, 37517, 37542, 37530, 37547,
+    37497, 37527, 37503, 37539, 37614, 37518, 37506, 37525, 37538, 37501,
+    37512, 37537, 37514, 37510, 37516, 37529, 37543, 37502, 37511, 37545,
+    37533, 37515, 37421, 38558, 38561, 38655, 38744, 38781, 38778, 38782,
+    38787, 38784, 38786, 38779, 38788, 38785, 38783, 38862, 38861, 38934,
+    {f: 2, c: 39085}, 39170, 39168, 39175, 39325, 39324, 39363, 39353, 39355,
+    39354, 39362, 39357, 39367, 39601, 39651, 39655, {f: 2, c: 39742},
+    {f: 2, c: 39776}, 39775, {f: 2, c: 40177}, 40181, 40615, 20735, 20739,
+    20784, 20728, {f: 2, c: 20742}, 20726, 20734, {f: 2, c: 20747}, 20733,
+    20746, {f: 2, c: 21131}, 21233, 21231, 22088, 22082, 22092, 22069, 22081,
+    22090, 22089, 22086, 22104, 22106, 22080, 22067, 22077, 22060, 22078,
+    22072, 22058, 22074, 22298, 22699, 22685, 22705, 22688, 22691, 22703,
+    22700, 22693, 22689, 22783, 23295, 23284, 23293, 23287, 23286, 23299,
+    23288, 23298, 23289, 23297, 23303, 23301, 23311, 23655, 23961, 23959,
+    23967, 23954, 23970, 23955, 23957, 23968, 23964, 23969, 23962, 23966,
+    24169, 24157, 24160, 24156, 32243, 24283, 24286, 24289, 24393, 24498,
+    24971, 24963, 24953, 25009, 25008, 24994, 24969, 24987, 24979, 25007,
+    25005, 24991, 24978, 25002, 24993, 24973, 24934, 25011, 25133, 25710,
+    25712, 25750, 25760, 25733, 25751, 25756, 25743, 25739, 25738, 25740,
+    25763, 25759, 25704, 25777, 25752, 25974, 25978, 25977, 25979,
+    {f: 2, c: 26034}, 26293, 26288, 26281, 26290, 26295, 26282, 26287, 27136,
+    27142, 27159, 27109, 27128, 27157, 27121, 27108, 27168, 27135, 27116,
+    27106, 27163, 27165, 27134, 27175, 27122, 27118, 27156, 27127, 27111,
+    27200, 27144, 27110, 27131, 27149, 27132, 27115, 27145, 27140, 27160,
+    27173, 27151, 27126, 27174, 27143, 27124, 27158, 27473, 27557, 27555,
+    27554, 27558, 27649, 27648, 27647, 27650, 28481, 28454, 28542, 28551,
+    28614, 28562, 28557, 28553, 28556, 28514, 28495, 28549, 28506, 28566,
+    28534, 28524, 28546, 28501, 28530, 28498, 28496, 28503, 28564, 28563,
+    28509, 28416, 28513, 28523, 28541, 28519, 28560, 28499, 28555, 28521,
+    28543, 28565, 28515, 28535, 28522, 28539, 29106, 29103, 29083, 29104,
+    29088, 29082, 29097, 29109, 29085, 29093, 29086, 29092, 29089, 29098,
+    29084, 29095, 29107, 29336, 29338, 29528, 29522, {f: 3, c: 29534}, 29533,
+    29531, 29537, 29530, 29529, 29538, 29831, {f: 2, c: 29833}, 29830, 29825,
+    29821, 29829, 29832, 29820, [29817, 58868], 29960, 29959, 30078, 30245,
+    30238, 30233, 30237, 30236, 30243, 30234, 30248, 30235, {f: 3, c: 30364},
+    30363, 30605, 30607, 30601, 30600, 30925, 30907, 30927, 30924, 30929,
+    30926, 30932, 30920, {f: 2, c: 30915}, 30921, 31130, 31137, 31136, 31132,
+    31138, [31131, 59175], 27510, 31289, 31410, 31412, 31411, 31671, 31691,
+    31678, 31660, 31694, 31663, 31673, 31690, 31669, 31941, 31944, 31948,
+    31947, 32247, 32219, 32234, 32231, 32215, 32225, 32259, 32250, 32230,
+    32246, 32241, 32240, 32238, 32223, 32630, 32684, 32688, 32685, 32749,
+    32747, 32746, 32748, 32742, 32744, 32868, 32871, 33187, 33183, 33182,
+    33173, 33186, 33177, 33175, 33302, 33359, 33363, 33362, 33360, 33358,
+    33361, 34084, 34107, 34063, 34048, 34089, 34062, 34057, 34061, 34079,
+    34058, 34087, 34076, 34043, 34091, 34042, 34056, 34060, 34036, 34090,
+    34034, 34069, 34039, 34027, 34035, 34044, 34066, 34026, 34025, 34070,
+    34046, 34088, 34077, 34094, 34050, 34045, 34078, 34038, 34097, 34086,
+    {f: 2, c: 34023}, 34032, 34031, 34041, 34072, 34080, 34096, 34059, 34073,
+    34095, 34402, 34646, {f: 2, c: 34659}, 34679, 34785, 34675, 34648, 34644,
+    34651, 34642, 34657, 34650, 34641, 34654, 34669, 34666, 34640, 34638,
+    34655, 34653, 34671, 34668, 34682, 34670, 34652, 34661, 34639, 34683,
+    34677, 34658, 34663, 34665, 34906, 35077, 35084, 35092, 35083,
+    {f: 3, c: 35095}, 35078, 35094, 35089, 35086, 35081, 35234, 35236, 35235,
+    35309, 35312, 35308, 35535, 35526, 35512, 35539, 35537, {f: 2, c: 35540},
+    35515, 35543, 35518, 35520, 35525, 35544, 35523, 35514, 35517, 35545,
+    35902, 35917, 35983, 36069, 36063, 36057, 36072, 36058, 36061, 36071,
+    36256, 36252, 36257, 36251, 36384, 36387, 36389, 36388, 36398, 36373,
+    36379, 36374, 36369, 36377, {f: 2, c: 36390}, 36372, 36370, 36376, 36371,
+    36380, 36375, 36378, 36652, 36644, 36632, 36634, 36640, 36643,
+    {f: 2, c: 36630}, 36979, 36976, 36975, 36967, 36971, 37167, 37163,
+    {f: 2, c: 37161}, 37170, 37158, 37166, {f: 2, c: 37253}, 37258,
+    {f: 2, c: 37249}, 37252, 37248, 37584, {f: 2, c: 37571}, 37568, 37593,
+    37558, 37583, 37617, 37599, 37592, 37609, 37591, 37597, 37580, 37615,
+    37570, 37608, 37578, 37576, 37582, 37606, 37581, 37589, 37577, 37600,
+    37598, 37607, 37585, 37587, 37557, 37601, 37669, 37574, 37556, 38268,
+    38316, 38315, 38318, 38320, 38564, 38562, 38611, 38661, 38664, 38658,
+    38746, 38794, 38798, 38792, 38864, 38863, 38942, 38941, 38950, 38953,
+    38952, 38944, 38939, 38951, 39090, 39176, 39162, 39185, 39188,
+    {f: 2, c: 39190}, 39189, 39388, 39373, 39375, {f: 2, c: 39379}, 39374,
+    39369, [39382, 60270], 39384, 39371, 39383, 39372, 39603, 39660, 39659,
+    39667, 39666, 39665, 39750, 39747, 39783, 39796, 39793, 39782, 39798,
+    39797, 39792, 39784, 39780, 39788, 40188, 40186, 40189, 40191, 40183,
+    40199, 40192, 40185, 40187, 40200, 40197, 40196, 40579, 40659,
+    {f: 2, c: 40719}, 20764, 20755, 20759, 20762, 20753, 20958, 21300, 21473,
+    22128, 22112, 22126, 22131, 22118, 22115, 22125, 22130, 22110, 22135,
+    22300, 22299, 22728, 22717, 22729, 22719, 22714, 22722, 22716, 22726,
+    23319, 23321, 23323, 23329, 23316, 23315, 23312, 23318, [23336, 59539],
+    23322, 23328, 23326, 23535, 23980, 23985, 23977, 23975, 23989, 23984,
+    23982, 23978, 23976, 23986, 23981, 23983, 23988, {f: 2, c: 24167}, 24166,
+    24175, 24297, 24295, 24294, 24296, 24293, 24395, 24508, 24507, 24989,
+    25000, 24982, 25029, 25012, 25030, 25025, 25036, 25018, 25023, 25016,
+    24972, 25815, 25814, 25808, 25807, 25801, 25789, 25737, 25795, 25819,
+    25843, 25817, 25907, 25983, 25980, 26018, 26312, 26302, 26304,
+    {f: 2, c: 26314}, 26319, 26301, 26299, 26298, 26316, 26403, 27188, 27238,
+    27209, 27239, 27186, 27240, 27198, 27229, 27245, 27254, 27227, 27217,
+    27176, 27226, 27195, 27199, 27201, 27242, 27236, 27216, 27215, 27220,
+    27247, 27241, 27232, 27196, 27230, 27222, 27221, {f: 2, c: 27213}, 27206,
+    27477, 27476, 27478, 27559, {f: 2, c: 27562}, 27592, 27591, 27652, 27651,
+    27654, 28589, 28619, 28579, 28615, 28604, 28622, 28616, 28510, 28612,
+    28605, 28574, 28618, 28584, 28676, 28581, 28590, 28602, 28588, 28586,
+    28623, 28607, 28600, 28578, 28617, 28587, 28621, 28591, 28594, 28592,
+    29125, 29122, 29119, 29112, 29142, {f: 2, c: 29120}, 29131, 29140, 29130,
+    29127, 29135, 29117, 29144, 29116, 29126, {f: 2, c: 29146},
+    {f: 2, c: 29341}, 29545, {f: 2, c: 29542}, 29548, 29541, 29547, 29546,
+    29823, 29850, 29856, 29844, 29842, 29845, 29857, 29963, 30080, 30255,
+    30253, 30257, 30269, 30259, 30268, 30261, 30258, 30256, 30395, 30438,
+    30618, 30621, 30625, 30620, 30619, {f: 2, c: 30626}, 30613, 30617, 30615,
+    30941, 30953, 30949, 30954, 30942, 30947, 30939, {f: 2, c: 30945}, 30957,
+    {f: 2, c: 30943}, 31140, 31300, 31304, 31303, 31414, 31416, 31413, 31409,
+    31415, 31710, 31715, 31719, 31709, 31701, 31717, 31706, 31720, 31737,
+    31700, 31722, 31714, 31708, 31723, 31704, 31711, 31954, 31956, 31959,
+    {f: 2, c: 31952}, 32274, 32289, 32279, 32268, {f: 2, c: 32287}, 32275,
+    32270, 32284, 32277, 32282, 32290, 32267, 32271, 32278, 32269, 32276,
+    32293, 32292, 32579, {f: 2, c: 32635}, 32634, 32689, 32751, 32810, 32809,
+    32876, 33201, 33190, 33198, 33209, 33205, 33195, 33200, 33196, 33204,
+    33202, 33207, 33191, 33266, {f: 3, c: 33365}, 34134, 34117, 34155, 34125,
+    34131, 34145, 34136, 34112, 34118, 34148, 34113, 34146, 34116, 34129,
+    34119, 34147, 34110, 34139, 34161, 34126, 34158, 34165, 34133, 34151,
+    34144, 34188, 34150, 34141, 34132, 34149, 34156, 34403, 34405, 34404,
+    34724, 34715, 34703, 34711, 34707, 34706, 34696, 34689, 34710, 34712,
+    34681, 34695, 34723, 34693, {f: 2, c: 34704}, 34717, 34692, 34708, 34716,
+    34714, 34697, 35102, 35110, 35120, {f: 2, c: 35117}, 35111, 35121, 35106,
+    35113, 35107, 35119, 35116, 35103, 35313, 35552, 35554, 35570,
+    {f: 2, c: 35572}, 35549, 35604, 35556, 35551, 35568, 35528, 35550, 35553,
+    35560, 35583, 35567, 35579, {f: 2, c: 35985}, 35984, 36085, 36078, 36081,
+    36080, 36083, 36204, 36206, 36261, 36263, 36403, 36414, 36408, 36416,
+    36421, 36406, {f: 2, c: 36412}, 36417, 36400, 36415, 36541, [36662, 60329],
+    36654, 36661, 36658, 36665, 36663, 36660, 36982, 36985, 36987, 36998,
+    37114, 37171, {f: 2, c: 37173}, 37267, {f: 2, c: 37264}, 37261, 37263,
+    37671, 37662, 37640, 37663, 37638, 37647, 37754, 37688, 37692, 37659,
+    37667, 37650, 37633, 37702, 37677, 37646, 37645, 37579, 37661, 37626,
+    37651, 37625, 37623, 37684, 37634, 37668, 37631, 37673, 37689, 37685,
+    37674, 37652, 37644, 37643, 37630, 37641, 37632, 37627, 37654, 38332,
+    38349, 38334, {f: 2, c: 38329}, 38326, 38335, 38325, 38333, 38569, 38612,
+    38667, 38674, 38672, 38809, 38807, 38804, 38896, 38904, 38965, 38959,
+    38962, 39204, 39199, 39207, 39209, 39326, 39406, 39404, 39397, 39396,
+    39408, 39395, 39402, 39401, 39399, 39609, 39615, 39604, 39611, 39670,
+    39674, 39673, 39671, 39731, 39808, 39813, 39815, 39804, 39806, 39803,
+    39810, 39827, 39826, 39824, 39802, 39829, 39805, 39816, 40229, 40215,
+    40224, 40222, 40212, 40233, 40221, 40216, 40226, 40208, 40217, 40223,
+    40584, {f: 2, c: 40582}, 40622, 40621, {f: 2, c: 40661}, 40698, 40722,
+    40765, 20774, 20773, 20770, 20772, 20768, 20777, 21236, 22163,
+    {f: 2, c: 22156}, 22150, 22148, 22147, 22142, 22146, 22143, 22145, 22742,
+    22740, 22735, 22738, 23341, 23333, 23346, 23331, 23340, 23335, 23334,
+    23343, 23342, 23419, {f: 2, c: 23537}, 23991, 24172, 24170, 24510, 25027,
+    25013, 25020, 25063, 25056, 25061, 25060, 25064, 25054, 25839, 25833,
+    25827, 25835, 25828, 25832, 25985, 25984, 26038, 26074, 26322, 27277,
+    27286, 27265, 27301, 27273, 27295, 27291, 27297, 27294, 27271, 27283,
+    27278, 27285, 27267, 27304, 27300, 27281, 27263, 27302, 27290, 27269,
+    27276, 27282, 27483, 27565, 27657, 28620, 28585, 28660, 28628, 28643,
+    28636, 28653, 28647, 28646, 28638, 28658, 28637, 28642, 28648, 29153,
+    29169, 29160, 29170, 29156, 29168, 29154, 29555, {f: 2, c: 29550}, 29847,
+    29874, 29867, 29840, 29866, 29869, 29873, 29861, 29871, {f: 3, c: 29968},
+    29967, 30084, 30275, {f: 2, c: 30280}, 30279, 30372, 30441, 30645, 30635,
+    30642, 30647, 30646, 30644, 30641, 30632, 30704, 30963, 30973, 30978,
+    {f: 2, c: 30971}, 30975, 30962, 30981, 30969, 30974, 30980, 31147, 31144,
+    31324, 31323, 31318, 31320, 31316, 31322, 31422, {f: 2, c: 31424}, 31749,
+    31759, 31730, 31744, 31743, 31739, 31758, 31732, 31755, 31731, 31746,
+    31753, 31747, 31745, 31736, 31741, [31750, 58176], {f: 2, c: 31728}, 31760,
+    31754, 31976, 32301, 32316, 32322, 32307, 38984, 32312, 32298, 32329,
+    32320, 32327, 32297, 32332, 32304, 32315, 32310, 32324, 32314, 32581,
+    32639, 32638, 32637, 32756, 32754, 32812, 33211, 33220, 33228, 33226,
+    33221, 33223, 33212, 33257, 33371, 33370, 33372, 34179, 34176, 34191,
+    34215, 34197, 34208, 34187, 34211, 34171, 34212, 34202, 34206, 34167,
+    34172, 34185, 34209, 34170, 34168, 34135, 34190, 34198, 34182, 34189,
+    34201, 34205, 34177, 34210, 34178, 34184, 34181, 34169, 34166, 34200,
+    34192, 34207, 34408, 34750, 34730, 34733, 34757, 34736, 34732, 34745,
+    34741, 34748, 34734, 34761, 34755, 34754, 34764, 34743, 34735, 34756,
+    34762, 34740, 34742, 34751, 34744, 34749, 34782, 34738, 35125, 35123,
+    35132, 35134, 35137, 35154, 35127, 35138, 35245, 35247, 35246,
+    {f: 2, c: 35314}, 35614, 35608, 35606, 35601, 35589, 35595, 35618, 35599,
+    35602, 35605, 35591, 35597, 35592, 35590, 35612, 35603, 35610, 35919,
+    35952, 35954, 35953, 35951, 35989, 35988, 36089, 36207, 36430, 36429,
+    36435, 36432, 36428, 36423, 36675, 36672, 36997, 36990, 37176, 37274,
+    37282, 37275, 37273, 37279, 37281, 37277, 37280, 37793, 37763, 37807,
+    37732, 37718, 37703, 37756, 37720, 37724, 37750, 37705, {f: 2, c: 37712},
+    37728, 37741, 37775, 37708, 37738, 37753, 37719, 37717, 37714, 37711,
+    37745, 37751, 37755, 37729, 37726, 37731, 37735, 37710, 37721, 38343,
+    38336, 38345, 38339, 38341, 38327, 38574, 38576, 38572, 38688, 38687,
+    38680, 38685, 38681, 38810, 38817, 38812, 38814, 38813, 38869, 38868,
+    38897, 38977, 38980, 38986, 38985, 38981, 38979, 39205, {f: 2, c: 39211},
+    39210, 39219, 39218, 39215, 39213, 39217, 39216, 39320, 39331, 39329,
+    39426, 39418, 39412, 39415, 39417, 39416, 39414, 39419, {f: 2, c: 39421},
+    39420, 39427, 39614, 39678, 39677, 39681, 39676, 39752, 39834, 39848,
+    39838, 39835, 39846, 39841, 39845, 39844, 39814, 39842, 39840, 39855,
+    40243, 40257, 40295, 40246, {f: 2, c: 40238}, 40241, 40248, 40240, 40261,
+    {f: 2, c: 40258}, 40254, 40247, 40256, 40253, 32757, 40237, 40586, 40585,
+    40589, 40624, 40648, 40666, 40699, 40703, 40740, 40739, 40738, 40788,
+    [12245, 40864], 20785, {f: 2, c: 20781}, 22168, 22172, 22167, 22170, 22173,
+    22169, 22896, 23356, {f: 2, c: 23657}, 24000, {f: 2, c: 24173}, 25048,
+    25055, {f: 2, c: 25069}, 25073, 25066, 25072, 25067, 25046, 25065, 25855,
+    25860, 25853, 25848, 25857, 25859, 25852, 26004, 26075, {f: 2, c: 26330},
+    26328, 27333, 27321, 27325, 27361, 27334, 27322, {f: 2, c: 27318}, 27335,
+    27316, 27309, 27486, 27593, 27659, 28679, {f: 2, c: 28684}, 28673, 28677,
+    28692, 28686, {f: 2, c: 28671}, 28667, 28710, 28668, 28663, 28682,
+    [29185, 60224], 29183, 29177, 29187, 29181, 29558, 29880, 29888, 29877,
+    29889, 29886, 29878, 29883, 29890, 29972, 29971, 30300, 30308, 30297,
+    30288, 30291, 30295, 30298, 30374, 30397, 30444, 30658, 30650, 30988,
+    {f: 2, c: 30995}, 30985, 30992, 30994, 30993, 31149, 31148, 31327, 31772,
+    31785, 31769, 31776, 31775, 31789, 31773, 31782, 31784, 31778, 31781,
+    31792, 32348, 32336, 32342, 32355, 32344, 32354, 32351, 32337, 32352,
+    32343, 32339, 32693, 32691, {f: 2, c: 32759}, 32885, {f: 2, c: 33233},
+    33232, 33375, 33374, 34228, 34246, 34240, 34243, 34242, 34227, 34229,
+    34237, 34247, 34244, 34239, 34251, 34254, 34248, 34245, 34225, 34230,
+    34258, 34340, 34232, 34231, 34238, 34409, 34791, 34790, 34786, 34779,
+    34795, 34794, 34789, 34783, 34803, 34788, 34772, 34780, 34771, 34797,
+    34776, 34787, 34775, 34777, 34817, 34804, 34792, 34781, 35155, 35147,
+    35151, 35148, 35142, {f: 2, c: 35152}, 35145, 35626, 35623, 35619, 35635,
+    35632, 35637, 35655, 35631, 35644, 35646, 35633, 35621, 35639, 35622,
+    35638, 35630, 35620, 35643, 35645, 35642, 35906, 35957, 35993, 35992,
+    35991, 36094, 36100, 36098, 36096, 36444, 36450, 36448, 36439, 36438,
+    36446, 36453, 36455, 36443, 36442, 36449, 36445, 36457, 36436,
+    {f: 3, c: 36678}, 36683, 37160, {f: 2, c: 37178}, 37182, 37288, 37285,
+    37287, 37295, 37290, 37813, 37772, 37778, 37815, 37787, 37789, 37769,
+    37799, 37774, 37802, 37790, 37798, 37781, 37768, 37785, 37791, 37760,
+    37773, 37809, 37777, 37810, 37796, 37800, 37812, 37795, {f: 2, c: 38354},
+    38353, 38579, 38615, 38618, 24002, 38623, 38616, 38621, 38691, 38690,
+    38693, 38828, 38830, 38824, 38827, 38820, 38826, 38818, 38821, 38871,
+    38873, 38870, 38872, 38906, {f: 3, c: 38992}, 39096, 39233, 39228, 39226,
+    39439, 39435, 39433, 39437, 39428, 39441, 39434, 39429, 39431, 39430,
+    39616, 39644, 39688, {f: 2, c: 39684}, 39721, 39733, 39754, 39756, 39755,
+    39879, 39878, 39875, 39871, 39873, 39861, 39864, 39891, 39862, 39876,
+    39865, 39869, 40284, 40275, 40271, 40266, 40283, 40267, 40281, 40278,
+    40268, 40279, 40274, 40276, 40287, 40280, 40282, 40590, 40588, 40671,
+    40705, 40704, [40726, 58693], 40741, 40747, 40746, 40745, 40744, 40780,
+    40789, {f: 2, c: 20788}, 21142, 21239, 21428, 22187, 22189,
+    {f: 2, c: 22182}, 22186, 22188, 22746, 22749, 22747, 22802,
+    {f: 3, c: 23357}, 24003, 24176, 24511, 25083, 25863, 25872, 25869, 25865,
+    25868, 25870, 25988, 26078, 26077, 26334, 27367, 27360, 27340, 27345,
+    27353, 27339, 27359, 27356, 27344, 27371, 27343, 27341, 27358, 27488,
+    27568, 27660, 28697, 28711, 28704, 28694, 28715, {f: 3, c: 28705}, 28713,
+    28695, 28708, 28700, 29196, 29194, 29191, 29186, 29189, {f: 2, c: 29349},
+    29348, 29347, 29345, 29899, 29893, 29879, 29891, 29974, 30304,
+    {f: 2, c: 30665}, 30660, 30705, 31005, 31003, 31009, 31004, 30999, 31006,
+    31152, {f: 2, c: 31335}, 31795, 31804, 31801, 31788, 31803, 31980, 31978,
+    32374, 32373, 32376, 32368, 32375, 32367, 32378, 32370, 32372, 32360,
+    32587, 32586, 32643, 32646, 32695, {f: 2, c: 32765}, 32888, 33239, 33237,
+    33291, 33380, 33377, 33379, 34283, 34289, 34285, 34265, 34273, 34280,
+    34266, 34263, 34284, 34290, 34296, 34264, 34271, 34275, 34268, 34257,
+    34288, 34278, 34287, 34270, 34274, 34816, 34810, 34819, {f: 2, c: 34806},
+    34825, 34828, 34827, 34822, 34812, 34824, 34815, 34826, 34818, 35170,
+    {f: 2, c: 35162}, 35159, 35169, 35164, 35160, 35165, 35161, 35208, 35255,
+    35254, 35318, 35664, 35656, 35658, 35648, 35667, 35670, 35668, 35659,
+    35669, 35665, 35650, 35666, 35671, 35907, 35959, 35958, 35994,
+    {f: 2, c: 36102}, 36105, 36268, 36266, 36269, 36267, 36461, 36472, 36467,
+    36458, 36463, 36475, 36546, 36690, 36689, {f: 2, c: 36687}, 36691, 36788,
+    37184, 37183, 37296, 37293, 37854, 37831, 37839, 37826, 37850, 37840,
+    37881, 37868, 37836, 37849, 37801, 37862, 37834, 37844, 37870, 37859,
+    37845, 37828, 37838, 37824, 37842, 37797, 37863, 38269, {f: 2, c: 38362},
+    38625, 38697, {f: 2, c: 38699}, 38696, 38694, 38835, 38839, 38838,
+    {f: 3, c: 38877}, 39004, 39001, 39005, 38999, 39103, 39101, 39099, 39102,
+    39240, 39239, 39235, {f: 2, c: 39334}, 39450, 39445, 39461, 39453, 39460,
+    39451, 39458, 39456, 39463, 39459, 39454, 39452, 39444, 39618, 39691,
+    39690, 39694, 39692, 39735, {f: 2, c: 39914}, 39904, 39902, 39908, 39910,
+    39906, 39920, 39892, 39895, 39916, 39900, 39897, 39909, 39893, 39905,
+    39898, 40311, 40321, 40330, 40324, 40328, 40305, 40320, 40312, 40326,
+    {f: 2, c: 40331}, 40317, 40299, {f: 2, c: 40308}, 40304, 40297, 40325,
+    40307, 40315, 40322, 40303, 40313, 40319, 40327, 40296, 40596, 40593,
+    40640, 40700, 40749, {f: 2, c: 40768}, 40781, {f: 3, c: 40790}, 21303,
+    22194, 22197, 22195, 22755, 23365, {f: 2, c: 24006}, {f: 2, c: 24302},
+    {f: 2, c: 24512}, 25081, 25879, 25878, 25877, 25875, 26079, 26344,
+    {f: 2, c: 26339}, 27379, 27376, 27370, 27368, 27385, 27377,
+    {f: 2, c: 27374}, 28732, 28725, 28719, 28727, 28724, 28721, 28738, 28728,
+    28735, 28730, 28729, 28714, 28736, 28731, 28723, 28737, {f: 2, c: 29203},
+    29352, 29565, 29564, 29882, 30379, 30378, 30398, 30445, 30668,
+    {f: 2, c: 30670}, 30669, 30706, 31013, 31011, {f: 2, c: 31015}, 31012,
+    31017, 31154, 31342, {f: 2, c: 31340}, 31479, 31817, 31816, 31818, 31815,
+    31813, 31982, 32379, 32382, 32385, 32384, 32698, 32767, 32889, 33243,
+    33241, {f: 2, c: 33384}, 34338, 34303, 34305, 34302, 34331, 34304, 34294,
+    34308, 34313, 34309, 34316, 34301, 34841, {f: 2, c: 34832}, 34839, 34835,
+    34838, 35171, 35174, 35257, 35319, 35680, 35690, 35677, 35688, 35683,
+    35685, 35687, 35693, 36270, 36486, 36488, 36484, 36697, {f: 2, c: 36694},
+    36693, 36696, 36698, 37005, 37187, 37185, 37303, 37301, {f: 2, c: 37298},
+    37899, 37907, 37883, 37920, 37903, 37908, 37886, 37909, 37904, 37928,
+    37913, 37901, 37877, 37888, 37879, 37895, 37902, 37910, 37906, 37882,
+    37897, 37880, 37948, 37898, 37887, 37884, 37900, 37878, 37905, 37894,
+    38366, 38368, 38367, {f: 2, c: 38702}, 38841, 38843, {f: 2, c: 38909},
+    39008, {f: 2, c: 39010}, 39007, {f: 2, c: 39105}, 39248, 39246, 39257,
+    39244, 39243, 39251, 39474, 39476, 39473, 39468, 39466, 39478, 39465,
+    39470, 39480, 39469, 39623, 39626, 39622, 39696, 39698, 39697, 39947,
+    39944, 39927, 39941, 39954, 39928, 40000, 39943, 39950, 39942, 39959,
+    39956, 39945, 40351, 40345, 40356, 40349, 40338, 40344, 40336, 40347,
+    40352, 40340, 40348, 40362, 40343, 40353, 40346, 40354, 40360, 40350,
+    40355, 40383, 40361, 40342, {f: 2, c: 40358}, 40601, 40603, 40602, 40677,
+    40676, 40679, 40678, 40752, 40750, 40795, 40800, 40798, 40797, 40793,
+    40849, 20794, 20793, 21144, 21143, 22211, {f: 2, c: 22205}, 23368, 23367,
+    24011, 24015, 24305, 25085, 25883, 27394, 27388, 27395, 27384, 27392,
+    {f: 2, c: 28739}, 28746, {f: 2, c: 28744}, {f: 2, c: 28741}, 29213, 29210,
+    29209, 29566, 29975, 30314, 30672, 31021, 31025, 31023, 31828, 31827,
+    31986, 32394, [32391, 60229], 32392, 32395, 32390, 32397, 32589, 32699,
+    32816, 33245, 34328, 34346, 34342, 34335, 34339, 34332, 34329, 34343,
+    34350, 34337, 34336, 34345, 34334, 34341, 34857, 34845, 34843, 34848,
+    34852, 34844, 34859, 34890, 35181, 35177, 35182, 35179, 35322, 35705,
+    35704, 35653, {f: 2, c: 35706}, 36112, 36116, 36271, 36494, 36492, 36702,
+    36699, 36701, 37190, {f: 2, c: 37188}, 37305, 37951, 37947, 37942, 37929,
+    37949, 37936, 37945, 37930, 37943, 37932, 37952, 37937, 38373, 38372,
+    38371, 38709, 38714, 38847, 38881, 39012, 39113, 39110, 39104, 39256,
+    39254, 39481, 39485, 39494, 39492, 39490, 39489, 39482, 39487, 39629,
+    39701, {f: 2, c: 39703}, 39702, 39738, 39762, 39979, 39965, 39964, 39980,
+    39971, {f: 2, c: 39976}, 39972, 39969, 40375, 40374, 40380, 40385, 40391,
+    40394, 40399, 40382, 40389, 40387, 40379, 40373, 40398, {f: 2, c: 40377},
+    40364, 40392, 40369, 40365, 40396, 40371, 40397, 40370, 40570, 40604,
+    40683, 40686, 40685, 40731, 40728, 40730, 40753, 40782, 40805, 40804,
+    40850, 20153, 22214, 22213, 22219, 22897, {f: 2, c: 23371}, 24021, 24017,
+    24306, 25889, 25888, 25894, 25890, 27403, {f: 2, c: 27400}, 27661,
+    {f: 3, c: 28757}, 28754, {f: 2, c: 29214}, 29353, 29567, 29912, 29909,
+    29913, 29911, 30317, 30381, 31029, 31156, {f: 2, c: 31344}, 31831, 31836,
+    31833, 31835, 31834, 31988, 31985, 32401, 32591, 32647, 33246, 33387,
+    {f: 2, c: 34356}, 34355, 34348, 34354, 34358, 34860, 34856, 34854, 34858,
+    34853, 35185, 35263, 35262, 35323, 35710, 35716, 35714, 35718, 35717,
+    35711, 36117, 36501, 36500, 36506, 36498, 36496, {f: 2, c: 36502}, 36704,
+    36706, 37191, 37964, 37968, {f: 2, c: 37962}, 37967, 37959, 37957,
+    {f: 2, c: 37960}, 37958, 38719, 38883, 39018, 39017, 39115, 39252, 39259,
+    39502, {f: 2, c: 39507}, 39500, 39503, 39496, 39498, 39497, 39506, 39504,
+    39632, 39705, 39723, 39739, 39766, 39765, 40006, 40008, 39999, 40004,
+    39993, 39987, 40001, 39996, 39991, 39988, 39986, 39997, 39990, 40411,
+    40402, 40414, 40410, 40395, 40400, 40412, 40401, 40415, 40425, 40409,
+    40408, 40406, 40437, 40405, 40413, 40630, 40688, 40757, 40755, 40754,
+    40770, 40811, 40853, 40866, 20797, 21145, 22760, 22759, 22898, 23373,
+    24024, 34863, 24399, 25089, {f: 2, c: 25091}, 25897, 25893, 26006, 26347,
+    {f: 2, c: 27409}, 27407, 27594, 28763, 28762, 29218, 29570, 29569, 29571,
+    30320, 30676, 31847, 31846, 32405, 33388, 34362, 34368, 34361, 34364,
+    34353, 34363, 34366, 34864, 34866, 34862, 34867, 35190, 35188, 35187,
+    35326, 35724, 35726, 35723, 35720, 35909, 36121, 36504, 36708, 36707,
+    37308, 37986, 37973, 37981, 37975, 37982, {f: 2, c: 38852}, 38912, 39510,
+    39513, {f: 3, c: 39710}, 40018, 40024, 40016, 40010, 40013, 40011, 40021,
+    40025, 40012, 40014, 40443, 40439, 40431, 40419, 40427, 40440, 40420,
+    40438, 40417, 40430, 40422, 40434, [40432, 60370], 40418, 40428, 40436,
+    40435, 40424, 40429, 40642, 40656, {f: 2, c: 40690}, 40710, 40732, 40760,
+    40759, 40758, 40771, 40783, 40817, 40816, {f: 2, c: 40814}, 22227, 22221,
+    23374, 23661, 25901, {f: 2, c: 26349}, 27411, 28767, 28769, 28765, 28768,
+    29219, 29915, 29925, 30677, 31032, 31159, 31158, 31850, 32407, 32649,
+    33389, 34371, 34872, 34871, 34869, 34891, {f: 2, c: 35732},
+    {f: 3, c: 36510}, 36509, 37310, 37309, 37314, 37995, {f: 2, c: 37992},
+    38629, 38726, 38723, 38727, 38855, 38885, 39518, 39637, 39769, 40035,
+    40039, 40038, 40034, 40030, 40032, 40450, 40446, 40455, 40451, 40454,
+    40453, {f: 2, c: 40448}, 40457, 40447, 40445, 40452, 40608, 40734, 40774,
+    {f: 3, c: 40820}, 22228, 25902, 26040, {f: 2, c: 27416}, 27415, 27418,
+    28770, 29222, 29354, {f: 2, c: 30680}, 31033, 31849, 31851, 31990, 32410,
+    32408, 32411, 32409, {f: 2, c: 33248}, {f: 3, c: 34374}, {f: 2, c: 35193},
+    35196, 35195, 35327, {f: 2, c: 35736}, 36517, 36516, 36515, 37998, 37997,
+    37999, 38001, 38003, 38729, 39026, 39263, 40040, 40046, 40045, 40459,
+    40461, 40464, 40463, 40466, 40465, 40609, 40693, 40713, 40775, 40824,
+    40827, 40826, 40825, 22302, 28774, 31855, 34876, 36274, 36518, 37315,
+    38004, 38008, 38006, 38005, 39520, [39726, 60830], 40052, 40051, 40049,
+    40053, 40468, 40467, 40694, 40714, 40868, 28776, 28773, 31991, 34410,
+    34878, 34877, 34879, 35742, 35996, 36521, 36553, 38731, {f: 2, c: 39027},
+    39116, 39265, 39339, 39524, {f: 2, c: 39526}, 39716, 40469, 40471, 40776,
+    25095, 27422, 29223, 34380, 36520, 38018, {f: 2, c: 38016}, 39529, 39528,
+    40473, 34379, 35743, 38019, 40057, 40631, 30325, 39531, 40058, 40477,
+    {f: 2, c: 28777}, 29225, 40612, 40830, 40777, 40856, {s: 97}, 65075, 0,
+    65076, 65103, [168, 776, 63208], [710, 63209, 65342], [12541, 63210],
+    [12542, 63211], [12445, 63212], [12446, 63213], 0, [12293, 63216],
+    [12294, 63217], [12295, 63218], [12540, 63219], [63220, 65339],
+    [63221, 65341], [10045, 63222], [12353, 63223], [12354, 63224],
+    [12355, 63225], [12356, 63226], [12357, 63227], [12358, 63228],
+    [12359, 63229], [12360, 63230], [12361, 63231], [12362, 63232],
+    [12363, 63233], [12364, 63234], [12365, 63235], [12366, 63236],
+    [12367, 63237], [12368, 63238], [12369, 63239], [12370, 63240],
+    [12371, 63241], [12372, 63242], [12373, 63243], [12374, 63244],
+    [12375, 63245], [12376, 63246], [12377, 63247], [12378, 63248],
+    [12379, 63249], [12380, 63250], [12381, 63251], [12382, 63252],
+    [12383, 63253], [12384, 63254], [12385, 63255], [12386, 63256],
+    [12387, 63257], [12388, 63258], [12389, 63259], [12390, 63260],
+    [12391, 63261], [12392, 63262], [12393, 63263], [12394, 63264],
+    [12395, 63265], [12396, 63266], [12397, 63267], [12398, 63268],
+    [12399, 63269], [12400, 63270], [12401, 63271], [12402, 63272],
+    [12403, 63273], [12404, 63274], [12405, 63275], [12406, 63276],
+    [12407, 63277], [12408, 63278], [12409, 63279], [12410, 63280],
+    [12411, 63281], [12412, 63282], [12413, 63283], [12414, 63284],
+    [12415, 63285], [12416, 63286], [12417, 63287], [12418, 63288],
+    [12419, 63289], [12420, 63290], [12421, 63291], [12422, 63292],
+    [12423, 63293], [12424, 63294], [12425, 63295], [12426, 63296],
+    [12427, 63297], [12428, 63298], [12429, 63299], [12430, 63300],
+    [12431, 63301], [12432, 63302], [12433, 63303], [12434, 63304],
+    [12435, 63305], [12449, 63306], [12450, 63307], [12451, 63308],
+    [12452, 63309], [12453, 63310], [12454, 63311], [12455, 63312],
+    [12456, 63313], [12457, 63314], [12458, 63315], [12459, 63316],
+    [12460, 63317], [12461, 63318], [12462, 63319], [12463, 63320],
+    [12464, 63321], [12465, 63322], [12466, 63323], [12467, 63324],
+    [12468, 63325], [12469, 63326], [12470, 63327], [12471, 63328],
+    [12472, 63329], [12473, 63330], [12474, 63331], [12475, 63332],
+    [12476, 63333], [12477, 63334], [12478, 63335], [12479, 63336],
+    [12480, 63337], [12481, 63338], [12482, 63339], [12483, 63340],
+    [12484, 63341], [12485, 63342], [12486, 63343], [12487, 63344],
+    [12488, 63345], [12489, 63346], [12490, 63347], [12491, 63348],
+    [12492, 63349], [12493, 63350], [12494, 63351], [12495, 63352],
+    [12496, 63353], [12497, 63354], [12498, 63355], [12499, 63356],
+    [12500, 63357], [12501, 63358], [12502, 63359], [12503, 63360],
+    [12504, 63361], [12505, 63362], [12506, 63363], [12507, 63364],
+    [12508, 63365], [12509, 63366], [12510, 63367], [12511, 63368],
+    [12512, 63369], [12513, 63370], [12514, 63371], [12515, 63372],
+    [12516, 63373], [12517, 63374], [12518, 63375], [12519, 63376],
+    [12520, 63377], [12521, 63378], [12522, 63379], [12523, 63380],
+    [12524, 63381], [12525, 63382], [12526, 63383], [12527, 63384],
+    [12528, 63385], [12529, 63386], [12530, 63387], [12531, 63388],
+    [12532, 63389], [12533, 63390], [12534, 63391], [1040, 63392],
+    [1041, 63393], [1042, 63394], [1043, 63395], [1044, 63396], [1045, 63397],
+    [1025, 63398], [1046, 63399], [1047, 63400], [1048, 63401], [1049, 63402],
+    [1050, 63403], [1051, 63404], [1052, 63405], [1053, 63406], [1054, 63407],
+    [1055, 63408], [1056, 63409], [1057, 63410], [1058, 63411], [1059, 63412],
+    [1060, 63413], [1061, 63414], [1062, 63415], [1063, 63416], [1064, 63417],
+    [1065, 63418], [1066, 63419], [1067, 63420], [1068, 63421], [1069, 63422],
+    [1070, 63423], [1071, 63424], [1072, 63425], [1073, 63426], [1074, 63427],
+    [1075, 63428], [1076, 63429], [1077, 63430], [1105, 63431], [1078, 63432],
+    [1079, 63433], [1080, 63434], [1081, 63435], [1082, 63436], [1083, 63437],
+    [1084, 63438], [1085, 63439], [1086, 63440], [1087, 63441], [1088, 63442],
+    [1089, 63443], [1090, 63444], [1091, 63445], [1092, 63446], [1093, 63447],
+    [1094, 63448], [1095, 63449], [1096, 63450], [1097, 63451], [1098, 63452],
+    [1099, 63453], [1100, 63454], [1101, 63455], [1102, 63456], [1103, 63457],
+    [8679, 63458], [8632, 63459], [8633, 63460], [20033, 63461],
+    [63462, 131276], [20058, 63463], [63464, 131210], [20994, 63465],
+    [17553, 63466], 63467, [20872, 63468], [13853, 63469], [63470, 161287],
+    {s: 40}, [172, 63511, 65506], [63512, 65508], [63513, 65287],
+    [63514, 65282], [12849, 63515], [8470, 63516], [8481, 63517], 30849,
+    [37561, 58501], 35023, 22715, 24658, 31911, 23290, 9556, 9574, 9559, 9568,
+    9580, 9571, 9562, 9577, 9565, 9554, 9572, 9557, {s: 3}, 9560, 9575, 9563,
+    9555, 9573, 9558, 9567, 9579, 9570, 9561, 9576, 9564, 9553, {s: 5}, 9619,
+    {s: 26}, [58129, 147159], [22462, 58130], [58131, 159443], [28990, 58132],
+    [58133, 153568], [27042, 58135], [58136, 166889], [23412, 58137],
+    [31305, 58138], [58139, 153825], [58140, 169177], [31333, 58141],
+    [31357, 58142], [58143, 154028], [31419, 58144], [31408, 58145],
+    [31426, 58146], [31427, 58147], [29137, 58148], [58149, 156813],
+    [16842, 58150], [31450, 58151], [31453, 58152], [31466, 58153],
+    [16879, 58154], [21682, 58155], [58156, 154625], [31499, 58157],
+    [31573, 58158], [31529, 58159], [58160, 152334], [58161, 154878],
+    [31650, 58162], [31599, 58163], [33692, 58164], [58165, 154548],
+    [58166, 158847], [31696, 58167], [33825, 58168], [31634, 58169], 0,
+    [58171, 154912], 0, [33938, 58174], [31738, 58175], 0, [31797, 58177],
+    [58178, 154817], [31812, 58179], [31875, 58180], [58181, 149634],
+    [31910, 58182], [58184, 148856], [31945, 58185], [31943, 58186],
+    [31974, 58187], 0, [31987, 58189], [31989, 58190], [32359, 58192],
+    [17693, 58193], [58194, 159300], [32093, 58195], [58196, 159446],
+    [32137, 58198], [32171, 58199], [28981, 58200], [32179, 58201], 32214,
+    [58203, 147543], [58204, 155689], [32228, 58205], [15635, 58206],
+    [32245, 58207], [58208, 137209], [32229, 58209], [58210, 164717], 0,
+    [58212, 155937], [58213, 155994], [32366, 58214], 0, [17195, 58216],
+    [37996, 58217], [32295, 58218], [32576, 58219], [32577, 58220],
+    [32583, 58221], [31030, 58222], [58223, 156368], [39393, 58224],
+    [32663, 58225], [58226, 156497], [32675, 58227], [58228, 136801],
+    [58229, 131176], [17756, 58230], [58231, 145254], [58233, 164666],
+    [32762, 58234], [58235, 156809], 0, [32776, 58237], [32797, 58238], 0,
+    [32815, 58240], [58241, 172167], [58242, 158915], [32827, 58243],
+    [32828, 58244], [32865, 58245], [58246, 141076], [18825, 58247],
+    [58248, 157222], [58249, 146915], [58250, 157416], [26405, 58251],
+    [32935, 58252], [58253, 166472], [33031, 58254], [33050, 58255],
+    [22704, 58256], [58257, 141046], [27775, 58258], [58259, 156824],
+    [25831, 58261], [58262, 136330], [33304, 58263], [58264, 137310],
+    [27219, 58265], [58266, 150117], [58267, 150165], [17530, 58268],
+    [33321, 58269], [58271, 158290], [58272, 146814], [20473, 58273],
+    [58274, 136445], [34018, 58275], [33634, 58276], 0, [58278, 149927],
+    [58279, 144688], [58280, 137075], [58281, 146936], [33450, 58282],
+    [26907, 58283], [58284, 194964], [16859, 58285], [34123, 58286],
+    [33488, 58287], [33562, 58288], [58289, 134678], [58290, 137140],
+    [14017, 58291], [58292, 143741], [58293, 144730], [33403, 58294],
+    [33506, 58295], [33560, 58296], [58297, 147083], [58298, 159139],
+    [58299, 158469], [58300, 158615], [58301, 144846], [15807, 58302],
+    [33565, 58303], [21996, 58304], [33669, 58305], [17675, 58306],
+    [58307, 159141], [33708, 58308], 0, [33747, 58310], [58312, 159444],
+    [27223, 58313], [34138, 58314], [13462, 58315], [58316, 159298],
+    [33880, 58318], [58319, 154596], [33905, 58320], [15827, 58321],
+    [17636, 58322], [27303, 58323], [33866, 58324], [31064, 58326], 0,
+    [58328, 158614], [58329, 159351], [58330, 159299], [34014, 58331], 0,
+    [33681, 58333], [17568, 58334], [33939, 58335], [34020, 58336],
+    [58337, 154769], [16960, 58338], [58339, 154816], [17731, 58340],
+    [34100, 58341], [23282, 58342], 0, [17703, 58344], [34163, 58345],
+    [17686, 58346], [26559, 58347], [34326, 58348], [58349, 165413],
+    [58350, 165435], [34241, 58351], [58352, 159880], [34306, 58353],
+    [58354, 136578], [58355, 159949], [58356, 194994], [17770, 58357],
+    [34344, 58358], [13896, 58359], [58360, 137378], [21495, 58361],
+    [58362, 160666], [34430, 58363], 0, [58365, 172280], [34798, 58366],
+    [58367, 142375], [34737, 58368], [34778, 58369], [34831, 58370, 60990],
+    [22113, 58371], [34412, 58372], [26710, 58373], [17935, 58374],
+    [34885, 58375], [34886, 58376], [58377, 161248], [58378, 146873],
+    [58379, 161252], [34910, 58380], [34972, 58381], [18011, 58382],
+    [34996, 58383], [34997, 58384], [35013, 58386], [58388, 161551],
+    [35207, 58389], {s: 3}, [35239, 58393], [35260, 58394], [58395, 166437],
+    [35303, 58396], [58397, 162084], [58398, 162493], [35484, 58399],
+    [30611, 58400], [37374, 58401], [35472, 58402], [58403, 162393],
+    [31465, 58404], [58405, 162618], [18195, 58407], [58408, 162616],
+    [29052, 58409], [35596, 58410], [35615, 58411], [58412, 152624],
+    [58413, 152933], [35647, 58414], 0, [35661, 58416], [35497, 58417],
+    [58418, 150138], [35728, 58419], [35739, 58420], [35503, 58421],
+    [58422, 136927], [17941, 58423], [34895, 58424], [35995, 58425],
+    [58426, 163156], [58427, 163215], [58428, 195028], [14117, 58429],
+    [58430, 163155], [36054, 58431], [58432, 163224], [58433, 163261],
+    [36114, 58434], [36099, 58435], [58436, 137488], [36059, 58437],
+    [28764, 58438], [36113, 58439], [16080, 58441], 0, [36265, 58443],
+    [58444, 163842], [58445, 135188], [58446, 149898], [15228, 58447],
+    [58448, 164284], [58449, 160012], [31463, 58450], [36525, 58451],
+    [36534, 58452], [36547, 58453], [37588, 58454], [36633, 58455],
+    [36653, 58456], [58457, 164709], [58458, 164882], [36773, 58459],
+    [37635, 58460], [58461, 172703], [58462, 133712], [36787, 58463], 0,
+    [58465, 166366], [58466, 165181], [58467, 146875], [24312, 58468],
+    [58469, 143970], [36857, 58470], 0, [58474, 140069], [14720, 58475],
+    [58476, 159447], [36919, 58477], [58478, 165180], [58479, 162494],
+    [36961, 58480], [58481, 165228], [58482, 165387], [37032, 58483],
+    [58484, 165651], [37060, 58485], [58486, 165606], [37038, 58487], 0,
+    [37223, 58489], [37289, 58491], [37316, 58492], [31916, 58493],
+    [58494, 166195], [58495, 138889], [37390, 58496], [27807, 58497],
+    [37441, 58498], [37474, 58499], [58500, 153017], [58502, 166598],
+    [58503, 146587], [58504, 166668], [58505, 153051], [58506, 134449],
+    [37676, 58507], [37739, 58508], [58509, 166625], [58510, 166891],
+    [23235, 58512], [58513, 166626], [58514, 166629], [18789, 58515],
+    [37444, 58516], [58517, 166892], [58518, 166969], [58519, 166911],
+    [37747, 58520], [37979, 58521], [36540, 58522], [38277, 58523],
+    [38310, 58524], [37926, 58525], [38304, 58526], [28662, 58527],
+    [17081, 58528], [58530, 165592], [58531, 135804], [58532, 146990],
+    [18911, 58533], [27676, 58534], [38523, 58535], [38550, 58536],
+    [16748, 58537], [38563, 58538], [58539, 159445], [25050, 58540], 58541,
+    [30965, 58542], [58543, 166624], [38589, 58544], [21452, 58545],
+    [18849, 58546], [58547, 158904], [58548, 131700], [58549, 156688],
+    [58550, 168111], [58551, 168165], [58552, 150225], [58553, 137493],
+    [58554, 144138], [38705, 58555], [34370, 58556], [38710, 58557],
+    [18959, 58558], [17725, 58559], [17797, 58560], [58561, 150249],
+    [28789, 58562], [23361, 58563], [38683, 58564], 0, [58566, 168405],
+    [38743, 58567], [23370, 58568], [58569, 168427], [38751, 58570],
+    [37925, 58571], [20688, 58572], [58573, 143543], [58574, 143548],
+    [38793, 58575], [38815, 58576], [38833, 58577], [38846, 58578],
+    [38848, 58579], [38866, 58580], [38880, 58581], [58582, 152684],
+    [38894, 58583], [29724, 58584], [58585, 169011], 0, [38901, 58587],
+    [58588, 168989], [58589, 162170], [19153, 58590], [38964, 58591],
+    [38963, 58592], [38987, 58593], [39014, 58594], [15118, 58595],
+    [58596, 160117], [15697, 58597], [58598, 132656], [58599, 147804],
+    [58600, 153350], [39114, 58601], [39095, 58602], [39112, 58603],
+    [39111, 58604], [19199, 58605], [58606, 159015], [58607, 136915],
+    [21936, 58608], [39137, 58609], [39142, 58610], [39148, 58611],
+    [37752, 58612], [39225, 58613], [58614, 150057], [19314, 58615],
+    [58616, 170071], [58617, 170245], [39413, 58618], [39436, 58619],
+    [39483, 58620], [39440, 58621], [39512, 58622], [58623, 153381],
+    [14020, 58624], [58625, 168113], [58626, 170965], [39648, 58627],
+    [39650, 58628], [58629, 170757], [39668, 58630], [19470, 58631],
+    [39700, 58632], [39725, 58633], [58634, 165376], [20532, 58635],
+    [39732, 58636], [14531, 58638], [58639, 143485], [39760, 58640],
+    [39744, 58641], [58642, 171326], [23109, 58643], [58644, 137315],
+    [39822, 58645], [39938, 58647], [39935, 58648], [39948, 58649],
+    [58650, 171624], [40404, 58651], [58652, 171959], [58653, 172434],
+    [58654, 172459], [58655, 172257], [58656, 172323], [58657, 172511],
+    [40318, 58658], [40323, 58659], [58660, 172340], [40462, 58661],
+    [40388, 58663], [58665, 172435], [58666, 172576], [58667, 137531],
+    [58668, 172595], [40249, 58669], [58670, 172217], [58671, 172724],
+    [40592, 58672], [40597, 58673], [40606, 58674], [40610, 58675],
+    [19764, 58676], [40618, 58677], [40623, 58678], [58679, 148324],
+    [40641, 58680], [15200, 58681], [14821, 58682], [15645, 58683],
+    [20274, 58684], [14270, 58685], [58686, 166955], [40706, 58687],
+    [40712, 58688], [19350, 58689], [37924, 58690], [58691, 159138],
+    [40727, 58692, 60836], 0, [40761, 58694], [22175, 58695], [22154, 58696],
+    [40773, 58697], [39352, 58698], [58699, 168075], [38898, 58700],
+    [33919, 58701], 0, [40809, 58703], [31452, 58704], [40846, 58705],
+    [29206, 58706], [19390, 58707], [58708, 149877], [58709, 149947],
+    [29047, 58710], [58711, 150008], [58712, 148296], [58713, 150097],
+    [29598, 58714], [58715, 166874], [58716, 137466], [31135, 58717],
+    [58718, 166270], [58719, 167478], [37737, 58720], [37875, 58721],
+    [58722, 166468], [37612, 58723], [37761, 58724], [37835, 58725],
+    [58726, 166252], [58727, 148665], [29207, 58728], [16107, 58729],
+    [30578, 58730], [31299, 58731], [28880, 58732], [58733, 148595],
+    [58734, 148472], [29054, 58735], [58736, 137199], [28835, 58737],
+    [58738, 137406], [58739, 144793], [16071, 58740], [58741, 137349],
+    [58742, 152623], [58743, 137208], [14114, 58744], [58745, 136955],
+    [58746, 137273], [14049, 58747], [58748, 137076], [58749, 137425],
+    [58750, 155467], [14115, 58751], [58752, 136896], [22363, 58753],
+    [58754, 150053], [58755, 136190], [58756, 135848], [58757, 136134],
+    [58758, 136374], [34051, 58759, 58761], [58760, 145062], 0, [33877, 58762],
+    [58763, 149908], [58764, 160101], [58765, 146993], [58766, 152924],
+    [58767, 147195], [58768, 159826], [17652, 58769], [58770, 145134],
+    [58771, 170397], [58772, 159526], [26617, 58773], [14131, 58774],
+    [15381, 58775], [15847, 58776], [22636, 58777], [58778, 137506],
+    [26640, 58779], [16471, 58780], [58781, 145215], [58782, 147681],
+    [58783, 147595], [58784, 147727], [58785, 158753], [21707, 58786],
+    [22174, 58787], [58788, 157361], [22162, 58789], [58790, 135135],
+    [58791, 134056], [58792, 134669], 0, [58794, 166675], [37788, 58795],
+    [20216, 58796], [20779, 58797], [14361, 58798], [58799, 148534],
+    [20156, 58800], [58801, 132197], 0, [20299, 58803], [20362, 58804],
+    [58805, 153169], [23144, 58806], [58807, 131499], [58808, 132043],
+    [14745, 58809], [58810, 131850], [58811, 132116], [13365, 58812],
+    [20265, 58813], [58814, 131776], [58815, 167603], [58816, 131701],
+    [35546, 58817], [58818, 131596], [20120, 58819], [20685, 58820],
+    [20749, 58821], [20386, 58822], [20227, 58823], [58824, 150030],
+    [58825, 147082], [20290, 58826], [20526, 58827], [20588, 58828],
+    [20609, 58829], [20428, 58830], [20453, 58831], [20568, 58832],
+    [20732, 58833], [28278, 58838], [58839, 144789], [58840, 147001],
+    [58841, 147135], [28018, 58842], [58843, 137348], [58844, 147081],
+    [20904, 58845], [20931, 58846], [58847, 132576], [17629, 58848],
+    [58849, 132259], [58850, 132242], [58851, 132241], [36218, 58852],
+    [58853, 166556], [58854, 132878], [21081, 58855], [21156, 58856],
+    [58857, 133235], [21217, 58858], 0, [18042, 58860], [29068, 58861],
+    [58862, 148364], [58863, 134176], [58864, 149932], [58865, 135396],
+    [27089, 58866], [58867, 134685], 0, [16094, 58869], [29849, 58870],
+    [29716, 58871], [29782, 58872], [29592, 58873], [19342, 58874],
+    [58875, 150204], [58876, 147597], [21456, 58877], [13700, 58878],
+    [29199, 58879], [58880, 147657], [21940, 58881], [58882, 131909],
+    [21709, 58883], [58884, 134086], [22301, 58885], [37469, 58886],
+    [38644, 58887], [22493, 58889], [22413, 58890], [22399, 58891],
+    [13886, 58892], [22731, 58893], [23193, 58894], [58895, 166470],
+    [58896, 136954], [58897, 137071], [58898, 136976], [23084, 58899],
+    [22968, 58900], [23166, 58902], [23247, 58903], [23058, 58904],
+    [58905, 153926], [58906, 137715], [58907, 137313], [58908, 148117],
+    [14069, 58909], [27909, 58910], [29763, 58911], [23073, 58912],
+    [58913, 155267], [23169, 58914], [58915, 166871], [58916, 132115],
+    [37856, 58917], [29836, 58918], [58919, 135939], [28933, 58920],
+    [18802, 58921], [37896, 58922], [58923, 166395], [37821, 58924],
+    [14240, 58925], [23582, 58926], [23710, 58927], [24158, 58928],
+    [24136, 58929], [58930, 137622], [58931, 137596], [58932, 146158],
+    [24269, 58933], [23375, 58934], [58935, 137475], [58936, 137476],
+    [14081, 58937], [58938, 137376], [14045, 58939], [58940, 136958],
+    [14035, 58941], [33066, 58942], [58943, 166471], [58944, 138682],
+    [58945, 144498], [58946, 166312], [24332, 58947, 60916], [24334, 58948],
+    [58949, 137511], [58950, 137131], [23147, 58951], [58952, 137019],
+    [23364, 58953], [58955, 161277], [34912, 58956], [24702, 58957],
+    [58958, 141408], [58959, 140843], [24539, 58960], [16056, 58961],
+    [58962, 140719], [58963, 140734], [58964, 168072], [58965, 159603],
+    [25024, 58966], [58967, 131134], [58968, 131142], [58969, 140827],
+    [24985, 58970], [24984, 58971], [24693, 58972], [58973, 142491],
+    [58974, 142599], [58975, 149204], [58976, 168269], [25713, 58977],
+    [58978, 149093], [58979, 142186], [14889, 58980], [58981, 142114],
+    [58982, 144464], [58983, 170218], [58984, 142968], [25399, 58985],
+    [25782, 58987], [25393, 58988], [25553, 58989], [58990, 149987],
+    [58991, 142695], [25252, 58992], [58993, 142497], [25659, 58994],
+    [25963, 58995], [26994, 58996], [15348, 58997], [58998, 143502],
+    [58999, 144045], [59000, 149897], [59001, 144043], [21773, 59002],
+    [59003, 144096], [59004, 137433], [59005, 169023], [26318, 59006],
+    [59007, 144009], [59008, 143795], [15072, 59009], [59011, 152964],
+    [59012, 166690], [59013, 152975], [59014, 136956], [59015, 152923],
+    [59016, 152613], [30958, 59017], [59018, 143619], [59019, 137258],
+    [59020, 143924], [13412, 59021], [59022, 143887], [59023, 143746],
+    [59024, 148169], [26254, 59025], [59026, 159012], [26219, 59027],
+    [19347, 59028], [26160, 59029], [59030, 161904], [59031, 138731],
+    [26211, 59032], [59033, 144082], [59034, 144097], [26142, 59035],
+    [59036, 153714], [14545, 59037], [59038, 145466], [59039, 145340],
+    [15257, 59040], [59041, 145314], [59042, 144382], [29904, 59043],
+    [15254, 59044], [59046, 149034], [26806, 59047], 0, [15300, 59049],
+    [27326, 59050], [59052, 145365], [59053, 148615], [27187, 59054],
+    [27218, 59055], [27337, 59056], [27397, 59057], [59058, 137490],
+    [25873, 59059], [26776, 59060], [27212, 59061], [15319, 59062],
+    [27258, 59063], [27479, 59064], [59065, 147392], [59066, 146586],
+    [37792, 59067], [37618, 59068], [59069, 166890], [59070, 166603],
+    [37513, 59071], [59072, 163870], [59073, 166364], [37991, 59074],
+    [28069, 59075], [28427, 59076], 0, [59079, 147327], [15759, 59080],
+    [28164, 59081], [59082, 147516], [23101, 59083], [28170, 59084],
+    [22599, 59085], [27940, 59086], [30786, 59087], [28987, 59088],
+    [59089, 148250], [59090, 148086], [28913, 59091], [29264, 59092, 61085],
+    [29319, 59093], [29332, 59094], [59095, 149391], [59096, 149285],
+    [20857, 59097], [59098, 150180], [59099, 132587], [29818, 59100],
+    [59101, 147192], [59102, 144991], [59103, 150090], [59104, 149783],
+    [59105, 155617], [16134, 59106], [16049, 59107], [59108, 150239],
+    [59109, 166947], [59110, 147253], [24743, 59111], [16115, 59112],
+    [29900, 59113], [29756, 59114], [37767, 59115], [29751, 59116],
+    [17567, 59117], [59118, 159210], [17745, 59119], [30083, 59120],
+    [16227, 59121], [59122, 150745], [59123, 150790], [16216, 59124],
+    [30037, 59125], [30323, 59126], [59127, 173510], 0, [29800, 59129, 61070],
+    [59130, 166604], [59131, 149931], [59132, 149902], [15099, 59133],
+    [15821, 59134], [59135, 150094], [16127, 59136], [59137, 149957],
+    [59138, 149747], [37370, 59139], [22322, 59140], [37698, 59141],
+    [59142, 166627], [59143, 137316], [20703, 59144], [59145, 152097],
+    [59146, 152039], [30584, 59147], [59148, 143922], [30478, 59149],
+    [30479, 59150], [30587, 59151], [59152, 149143], [59153, 145281],
+    [14942, 59154], [59155, 149744], [29752, 59156], [29851, 59157],
+    [16063, 59158], [59159, 150202], [59160, 150215], [16584, 59161],
+    [59162, 150166], [59163, 156078], [37639, 59164], [59165, 152961],
+    [30750, 59166], [30861, 59167], [30856, 59168], [30930, 59169],
+    [29648, 59170], [31065, 59171], [59172, 161601], [59173, 153315],
+    [16654, 59174], 0, 0, [31141, 59177], [27181, 59178], [59179, 147194],
+    [31290, 59180], [31220, 59181], [16750, 59182], [59183, 136934],
+    [16690, 59184], [37429, 59185], [31217, 59186], [59187, 134476],
+    [59188, 149900], [59189, 131737], [59190, 146874], [59191, 137070],
+    [13719, 59192], [21867, 59193], [13680, 59194], [13994, 59195],
+    [59196, 131540], [59197, 134157], [31458, 59198], [23129, 59199],
+    [59200, 141045], [59201, 154287], [59202, 154268], [23053, 59203],
+    [59204, 131675], [30960, 59205], [23082, 59206], [59207, 154566],
+    [31486, 59208], [16889, 59209], [31837, 59210], [31853, 59211],
+    [16913, 59212], [59213, 154547], [59214, 155324], [59215, 155302],
+    [31949, 59216], [59217, 150009], [59218, 137136], [31886, 59219],
+    [31868, 59220], [31918, 59221], [27314, 59222], [32220, 59223],
+    [32263, 59224], [32211, 59225], [32590, 59226], [59227, 156257],
+    [59228, 155996], [59229, 162632], [32151, 59230], [59231, 155266],
+    [17002, 59232], [59233, 158581], [59234, 133398], [26582, 59235],
+    [59236, 131150], [59237, 144847], [22468, 59238], [59239, 156690],
+    [59240, 156664], [32733, 59242], [31527, 59243], [59244, 133164],
+    [59245, 154345], [59246, 154947], [31500, 59247], [59248, 155150],
+    [39398, 59249], [34373, 59250], [39523, 59251], [27164, 59252],
+    [59253, 144447], [59255, 150007], [59256, 157101], [39455, 59257],
+    [59258, 157088], 0, [59260, 160039], [59261, 158929], [17642, 59262],
+    [33079, 59263], [17410, 59264], [32966, 59265], [33033, 59266],
+    [33090, 59267], [59268, 157620], [39107, 59269], [59270, 158274],
+    [33378, 59271], [33381, 59272], [59273, 158289], [33875, 59274],
+    [59275, 159143], [34320, 59276], [59277, 160283], [23174, 59278],
+    [16767, 59279], [59280, 137280], [23339, 59281], [59282, 137377],
+    [23268, 59283], [59284, 137432], [34464, 59285], [59286, 195004],
+    [59287, 146831], [34861, 59288], [59289, 160802], [23042, 59290],
+    [34926, 59291], [20293, 59292], [34951, 59293], [35007, 59294],
+    [35046, 59295], [35173, 59296], [35149, 59297], [59298, 153219],
+    [35156, 59299], [59300, 161669], [59301, 161668], [59302, 166901],
+    [59303, 166873], [59304, 166812], [59305, 166393], [16045, 59306],
+    [33955, 59307], [18165, 59308], [18127, 59309], [14322, 59310],
+    [35389, 59311], [35356, 59312], [59313, 169032], [24397, 59314],
+    [37419, 59315], [59316, 148100], [26068, 59317], [28969, 59318],
+    [28868, 59319], [59320, 137285], [40301, 59321], [35999, 59322],
+    [36073, 59323], [59324, 163292], [22938, 59325], [30659, 59326],
+    [23024, 59327], [14036, 59329], [36394, 59330], [36519, 59331],
+    [59332, 150537], [36656, 59333], [36682, 59334], [17140, 59335],
+    [27736, 59336], [28603, 59337], [59338, 140065], [18587, 59339],
+    [28537, 59340], [28299, 59341], [59342, 137178], [39913, 59343],
+    [14005, 59344], [59345, 149807], [37051, 59346], 0, [21873, 59348],
+    [18694, 59349], [37307, 59350], [37892, 59351], [59352, 166475],
+    [16482, 59353], [59354, 166652], [37927, 59355], [59356, 166941],
+    [59357, 166971], [34021, 59358], [35371, 59359], [38297, 59360],
+    [38311, 59361], [38295, 59362], [38294, 59363], [59364, 167220],
+    [29765, 59365], [16066, 59366], [59367, 149759], [59368, 150082],
+    [59369, 148458], [16103, 59370], [59371, 143909], [38543, 59372],
+    [59373, 167655], [59374, 167526], [59375, 167525], [16076, 59376],
+    [59377, 149997], [59378, 150136], [59379, 147438], [29714, 59380],
+    [29803, 59381], [16124, 59382], [38721, 59383], [59384, 168112],
+    [26695, 59385], [18973, 59386], [59387, 168083], [59388, 153567], 0,
+    [37736, 59390], [59391, 166281], [59392, 166950], [59393, 166703],
+    [59394, 156606], [37562, 59395], [23313, 59396], [35689, 59397],
+    [18748, 59398], [29689, 59399], [59400, 147995], [38811, 59401], 0,
+    [39224, 59403], [59404, 134950], [24001, 59405], [59406, 166853],
+    [59407, 150194], [38943, 59408], [59409, 169178], [37622, 59410],
+    [59411, 169431], [37349, 59412], [17600, 59413], [59414, 166736],
+    [59415, 150119], [59416, 166756], [39132, 59417], [59418, 166469],
+    [16128, 59419], [37418, 59420], [18725, 59421], [33812, 59422],
+    [39227, 59423], [39245, 59424], [59425, 162566], [15869, 59426], 0,
+    [19311, 59428], [39338, 59429], [39516, 59430], [59431, 166757],
+    [59432, 153800], [27279, 59433], [39457, 59434], [23294, 59435],
+    [39471, 59436], [59437, 170225], [19344, 59438], [59439, 170312],
+    [39356, 59440], [19389, 59441], [19351, 59442], [37757, 59443],
+    [22642, 59444], [59445, 135938], [22562, 59446], [59447, 149944],
+    [59448, 136424], [30788, 59449], [59450, 141087], [59451, 146872],
+    [26821, 59452], [15741, 59453], [37976, 59454], [14631, 59455],
+    [24912, 59456], [59457, 141185], [59458, 141675], [24839, 59459],
+    [40015, 59460], [40019, 59461], [40059, 59462], [39989, 59463],
+    [39952, 59464], [39807, 59465], [39887, 59466], [59467, 171565],
+    [39839, 59468], [59469, 172533], [59470, 172286], [40225, 59471],
+    [19630, 59472], [59473, 147716], [40472, 59474], [19632, 59475],
+    [40204, 59476], [59477, 172468], [59478, 172269], [59479, 172275],
+    [59480, 170287], [40357, 59481], [33981, 59482], [59483, 159250],
+    [59484, 159711], [59485, 158594], [34300, 59486], [17715, 59487],
+    [59488, 159140], [59489, 159364], [59490, 159216], [33824, 59491],
+    [34286, 59492], [59493, 159232], [59494, 145367], [59495, 155748],
+    [31202, 59496], [59497, 144796], [59498, 144960], [59500, 149982],
+    [15714, 59501], [37851, 59502], [37566, 59503], [37704, 59504],
+    [59505, 131775], [30905, 59506], [37495, 59507], [37965, 59508],
+    [20452, 59509], [13376, 59510], [36964, 59511], [59512, 152925],
+    [30781, 59513], [30804, 59514], [30902, 59515], [30795, 59516],
+    [59517, 137047], [59518, 143817], [59519, 149825], [13978, 59520],
+    [20338, 59521], [28634, 59522], [28633, 59523], 0, [28702, 59524, 59525],
+    [21524, 59526], [59527, 147893], [22459, 59528], [22771, 59529],
+    [22410, 59530], [40214, 59531], [22487, 59532], [28980, 59533],
+    [13487, 59534], [59535, 147884], [29163, 59536], [59537, 158784],
+    [59538, 151447], 0, [59540, 137141], [59541, 166473], [24844, 59542],
+    [23246, 59543], [23051, 59544], [17084, 59545], [59546, 148616],
+    [14124, 59547], [19323, 59548], [59549, 166396], [37819, 59550],
+    [37816, 59551], [59552, 137430], [59553, 134941], [33906, 59554],
+    [59555, 158912], [59556, 136211], [59557, 148218], [59558, 142374],
+    [59559, 148417], [22932, 59560], [59561, 146871], [59562, 157505],
+    [32168, 59563], [59564, 155995], [59565, 155812], [59566, 149945],
+    [59567, 149899], [59568, 166394], [37605, 59569], [29666, 59570],
+    [16105, 59571], [29876, 59572], [59573, 166755], [59574, 137375],
+    [16097, 59575], [59576, 150195], [27352, 59577], [29683, 59578],
+    [29691, 59579], [16086, 59580], [59581, 150078], [59582, 150164],
+    [59583, 137177], [59584, 150118], [59585, 132007], [59586, 136228],
+    [59587, 149989], [29768, 59588], [59589, 149782], [28837, 59590],
+    [59591, 149878], [37508, 59592], [29670, 59593], [37727, 59594],
+    [59595, 132350], [37681, 59596], [59597, 166606], [59598, 166422],
+    [37766, 59599], [59600, 166887], [59601, 153045], [18741, 59602],
+    [59603, 166530], [29035, 59604], [59605, 149827], [59606, 134399],
+    [22180, 59607], [59608, 132634], [59609, 134123], [59610, 134328],
+    [21762, 59611], [31172, 59612], [59613, 137210], [32254, 59614],
+    [59615, 136898], [59616, 150096], [59617, 137298], [17710, 59618],
+    [37889, 59619], [14090, 59620], [59621, 166592], [59622, 149933],
+    [22960, 59623], [59624, 137407], [59625, 137347], [59626, 160900],
+    [23201, 59627], [14050, 59628], [59629, 146779], [14000, 59630],
+    [37471, 59631], [23161, 59632], [59633, 166529], [59634, 137314],
+    [37748, 59635], [15565, 59636], [59637, 133812], [19094, 59638],
+    [14730, 59639], [20724, 59640], [15721, 59641], [15692, 59642],
+    [59643, 136092], [29045, 59644], [17147, 59645], [59646, 164376],
+    [28175, 59647], [59648, 168164], [17643, 59649], [27991, 59650],
+    [59651, 163407], [28775, 59652], [27823, 59653], [15574, 59654],
+    [59655, 147437], [59656, 146989], [28162, 59657], [28428, 59658],
+    [15727, 59659], [59660, 132085], [30033, 59661], [14012, 59662],
+    [13512, 59663], [18048, 59664], [16090, 59665], [18545, 59666],
+    [22980, 59667], [37486, 59668], [18750, 59669], [36673, 59670],
+    [59671, 166940], [59672, 158656], [22546, 59673], [22472, 59674],
+    [14038, 59675], [59676, 136274], [28926, 59677], [59678, 148322],
+    [59679, 150129], [59680, 143331], [59681, 135856], [59682, 140221],
+    [26809, 59683], [26983, 59684], [59685, 136088], [59686, 144613],
+    [59687, 162804], [59688, 145119], [59689, 166531], [59690, 145366],
+    [59691, 144378], [59692, 150687], [27162, 59693], [59694, 145069],
+    [59695, 158903], [33854, 59696], [17631, 59697], [17614, 59698],
+    [59699, 159014], [59700, 159057], [59701, 158850], [59702, 159710], 0, 0,
+    [33597, 59705], [59706, 137018], [33773, 59707], [59708, 158848],
+    [59709, 159827], [59710, 137179], [22921, 59711], [23170, 59712],
+    [59713, 137139], [23137, 59714], [23153, 59715], [59716, 137477],
+    [59717, 147964], [14125, 59718], [23023, 59719], [59720, 137020],
+    [14023, 59721], [29070, 59722], [37776, 59723], [26266, 59724],
+    [59725, 148133], [23150, 59726], [23083, 59727], [59728, 148115],
+    [27179, 59729], [59730, 147193], [59731, 161590], [59732, 148571],
+    [59733, 148170], [28957, 59734], [59735, 148057], [59736, 166369],
+    [20400, 59737], [59738, 159016], [23746, 59739], [59740, 148686],
+    [59741, 163405], [59742, 148413], [27148, 59743], [59744, 148054],
+    [59745, 135940], 0, [28979, 59747], [59748, 148457], [15781, 59749],
+    [27871, 59750], [59751, 194597], [23019, 59754], [24412, 59757],
+    [59764, 144128], [31955, 59776], [59783, 162548], [59786, 153334],
+    [59790, 162584], [36972, 59791], [33270, 59795], [30476, 59797],
+    [27810, 59799], [22269, 59800], [22633, 59828], [26465, 59832],
+    [23646, 59838], [22770, 59841], [28857, 59843], [26627, 59853],
+    [36795, 59859], [36796, 59861], [20001, 59871], [31545, 59898],
+    [15820, 59902], [29482, 57990, 59909], [30048, 59912], [22586, 59920],
+    [33446, 59932], [27018, 59940], [24803, 59944], [20206, 59984],
+    [39364, 60002], [40639, 60023], [21249, 60025], [26528, 60038],
+    [24808, 60046], [20916, 60053], [31363, 60064], [39994, 60075],
+    [31432, 60093], [26906, 60098], [22956, 60100], [22592, 60102],
+    [21610, 60114], [24807, 60123], [22138, 60125], [26965, 60132],
+    [39983, 60133], [34725, 60134], [23584, 60141], [24075, 60143],
+    [26398, 60147], [33965, 60157], [35713, 60161], [20088, 60166],
+    [25283, 60176], [26709, 60180], 0, [33533, 60190], [35237, 60194],
+    [36768, 60196], [38840, 60198], [38983, 60200], [39613, 60201],
+    [24497, 60218], [26184, 60219], [26303, 60220], [60221, 162425], 0,
+    [60225, 149946], 0, 0, [60230, 131910], [26382, 60232], [26904, 60233],
+    [60235, 161367], [60236, 155618], [60239, 161278], [60240, 139418],
+    [18640, 60241], [19128, 60242], [60244, 166554], [60247, 147515],
+    [60250, 150085], [60251, 132554], [20946, 60252], [60253, 132625],
+    [22943, 60254], [60255, 138920], [15294, 60256], [60257, 146687],
+    [14747, 60262], [60264, 165352], [60265, 170441], [14178, 60266],
+    [60267, 139715], [35678, 60268], [60269, 166734], 0, [29193, 60274],
+    [60276, 134264], [60280, 132985], [36570, 60281], [21135, 60283],
+    [29041, 60285], [60288, 147274], [60289, 150183], [21948, 60290],
+    [60293, 158546], [13427, 60295], [60297, 161330], [18200, 60299],
+    [60303, 149823], [20582, 60305], [13563, 60306], [60307, 144332], 0,
+    [18300, 60310], [60311, 166216], [60315, 138640], 0, [60320, 162834],
+    [36950, 60321], [60323, 151450], [35682, 60324], [23899, 60327],
+    [60328, 158711], 0, [60331, 137500], [35562, 60332], [60333, 150006],
+    [60335, 147439], [19392, 60337], [60340, 141083], [37989, 60341],
+    [60342, 153569], [24981, 60343], [23079, 60344], [60345, 194765], 0,
+    [60348, 148769], [20074, 60350], [60351, 149812], [38486, 60352],
+    [28047, 60353], [60354, 158909], [35191, 60356], [60359, 156689], 0,
+    [31554, 60363], [60364, 168128], [60365, 133649], 0, [31301, 60369],
+    [39462, 60372], [13919, 60374], [60375, 156777], [60376, 131105],
+    [31107, 60377], [23852, 60380], [60381, 144665], 0, [18128, 60384],
+    [30011, 60386], [34917, 60387], [22710, 60389], [14108, 60390],
+    [60391, 140685], [15444, 60394], [37505, 60397], [60398, 139642],
+    [37680, 60400], [60402, 149968], [27705, 60403], [60406, 134904],
+    [34855, 60407], [35061, 60408], [60409, 141606], [60410, 164979],
+    [60411, 137137], [28344, 60412], [60413, 150058], [60414, 137248],
+    [14756, 60415], 0, 0, [17727, 60419], [26294, 60420], [60421, 171181],
+    [60422, 170148], [35139, 60423], [16607, 60427], [60428, 136714],
+    [14753, 60429], [60430, 145199], [60431, 164072], [60432, 136133],
+    [29101, 60433], [33638, 60434], [60436, 168360], 0, [19639, 60438],
+    [60439, 159919], [60440, 166315], [60445, 147834], [31555, 60446],
+    [31102, 60447], [28597, 60449], [60450, 172767], [27139, 60451],
+    [60452, 164632], [21410, 60453], [60454, 159239], [37823, 60455],
+    [26678, 60456], [38749, 59389, 60457], [60458, 164207], [60460, 158133],
+    [60461, 136173], [60462, 143919], [23941, 60464], [60465, 166960],
+    [22293, 60467], [38947, 60468], [60469, 166217], [23979, 60470],
+    [60471, 149896], [26046, 60472], [27093, 60473], [21458, 60474],
+    [60475, 150181], [60476, 147329], [15377, 60477], [26422, 60478],
+    [60482, 139169], [13770, 60490], [18682, 60493], 0, [30728, 60496],
+    [37461, 60497], [17394, 60499], [17375, 60501], [23032, 60505], 0,
+    [22155, 60518], [60520, 169449], [36882, 60541], [21953, 60546],
+    [17673, 60551], [32383, 60552], [28502, 60553], [27313, 60554],
+    [13540, 60556], [60558, 161949], [14138, 60559], 0, [60562, 163876],
+    [60565, 162366], [15851, 60567], [60569, 146615], [60574, 156248],
+    [22207, 60575], [36366, 60577], [23405, 60578], [25566, 60581], 0,
+    [25904, 60585], [22061, 60586], [21530, 60588], [60591, 171416],
+    [19581, 60592], [22050, 60593], [22046, 60594], [32585, 60595],
+    [22901, 60597], [60598, 146752], [34672, 60599], [33047, 60604],
+    [40286, 60605], [36120, 60606], [30267, 60607], [40005, 60608],
+    [30286, 60609], [30649, 60610], [37701, 60611], [21554, 60612],
+    [33096, 60613], [33527, 60614], [22053, 60615], [33074, 60616],
+    [33816, 60617], [32957, 60618], [21994, 60619], [31074, 60620],
+    [22083, 60621], [21526, 60622], [60623, 134813], [13774, 60624],
+    [22021, 57509, 60625], [22001, 60626], [26353, 60627], [60628, 164578],
+    [13869, 60629], [30004, 60630], [22000, 60631], [21946, 60632],
+    [21655, 60633], [21874, 60634], [60635, 134209], [60636, 134294],
+    [24272, 57652, 60637], [60639, 134774], [60640, 142434], [60641, 134818],
+    [40619, 60642], [32090, 60643], 0, [60645, 135285], [25245, 60646],
+    [38765, 60647], [21652, 60648], [36045, 60649], [29174, 60650],
+    [37238, 60651], [25596, 60652], [25529, 60653], [25598, 60654],
+    [21865, 60655], [60656, 142147], [40050, 60657], [60658, 143027],
+    [20890, 60659], [13535, 60660], [60661, 134567], [20903, 60662],
+    [21581, 60663], [21790, 60664], [21779, 60665], [30310, 60666],
+    [36397, 60667], [60668, 157834], [30129, 60669], [32950, 60670],
+    [34820, 60671], 0, [35015, 60673], [33206, 60674], [33820, 60675],
+    [17644, 60677], [29444, 60678], [33547, 60681], [22139, 60683],
+    [37232, 60690], [37384, 60692], [60696, 134905], [29286, 60697],
+    [18254, 60699], [60701, 163833], [16634, 60703], [40029, 60704],
+    [25887, 60705], [18675, 60707], [60708, 149472], [60709, 171388], 0,
+    [60713, 161187], 60715, [60716, 155720], [29091, 60718], [32398, 60719],
+    [40272, 60720], [13687, 60723], [27826, 60725], [21351, 60726],
+    [14812, 60728], [60731, 149016], [33325, 60734], [21579, 60735], 60739,
+    [14930, 60740], [29556, 60742], [60743, 171692], [19721, 60744],
+    [39917, 60745], 0, [19547, 60748], [60751, 171998], [33884, 60752],
+    [60754, 160434], [25390, 60757], [32037, 60758], [14890, 60761],
+    [36872, 60762], [21196, 60763], [15988, 60764], [13946, 60765],
+    [17897, 60766], [60767, 132238], [30272, 60768], [23280, 60769],
+    [60770, 134838], [30842, 60771], [18358, 60772], [22695, 60773],
+    [16575, 60774], [22140, 60775], [39819, 60776], [23924, 60777],
+    [30292, 60778], [60779, 173108], [40581, 60780], [19681, 60781], 0,
+    [14331, 60783], [24857, 60784], [60786, 148466], 60787, [22109, 60788],
+    [60792, 171526], [21044, 60793], [13741, 60795], 0, [40316, 60797],
+    [31830, 60798], [39737, 60799], [22494, 60800], [23635, 60802],
+    [25811, 60803], [60804, 169168], [60805, 156469], [34477, 60807],
+    [60808, 134440], [60811, 134513], 60812, [20990, 60813], [60814, 139023],
+    [23950, 60815], [38659, 60816], [60817, 138705], [40577, 60818],
+    [36940, 60819], [31519, 60820], [39682, 60821], [23761, 60822],
+    [31651, 60823], [25192, 60824], [25397, 60825], [39679, 60826],
+    [31695, 60827], [39722, 60828], [31870, 60829], 0, [31810, 60831],
+    [31878, 60832], [39957, 60833], [31740, 60834], [39689, 60835], 0, 39982,
+    [40794, 60839], [21875, 60840], [23491, 60841], [20477, 60842],
+    [40600, 60843], [20466, 60844], [21088, 60845], [21201, 60847],
+    [22375, 60848], [20566, 60849], [22967, 60850], [24082, 60851],
+    [38856, 60852], [40363, 60853], [36700, 60854], [21609, 60855],
+    [38836, 60856], [39232, 60857], [38842, 60858], [21292, 60859],
+    [24880, 60860], [26924, 60861], [21466, 60862], [39946, 60863],
+    [40194, 60864], [19515, 60865], [38465, 60866], [27008, 60867],
+    [20646, 60868], [30022, 60869], [60870, 137069], [39386, 60871],
+    [21107, 60872], 60873, [37209, 60874], [38529, 60875], [37212, 60876],
+    60877, [37201, 60878], [60879, 167575], [25471, 60880], [27338, 60882],
+    [22033, 60883], [37262, 60884], [30074, 60885], [25221, 60886],
+    [29519, 60888], [31856, 60889], [60890, 154657], 60892, [30422, 60894],
+    [39837, 60895], [20010, 60896], [60897, 134356], [33726, 60898],
+    [34882, 60899], 60900, [23626, 60901], [27072, 60902], 0, 0,
+    [21023, 60905], [24053, 60906], [20174, 60907], [27697, 60908],
+    [60909, 131570], [20281, 60910], [21660, 60911], 0, [21146, 60913],
+    [36226, 60914], [13822, 60915], 0, [13811, 60917], 60918, [27474, 60919],
+    [37244, 60920], [40869, 60921], [39831, 60922], [38958, 60923],
+    [39092, 60924], [39610, 60925], [40616, 60926], [40580, 60927],
+    [31508, 60929], 60930, [27642, 60931], [34840, 60932], [32632, 60933],
+    60934, [22048, 60935], [60936, 173642], [36471, 60937], [40787, 60938],
+    60939, [36308, 60940], [36431, 60941], [40476, 60942], [36353, 60943],
+    [25218, 60944], [60945, 164733], [36392, 60946], [36469, 60947],
+    [31443, 60948], [31294, 60950], [30936, 60951], [27882, 60952],
+    [35431, 60953], [30215, 60954], [40742, 60956], [27854, 60957],
+    [34774, 60958], [30147, 60959], [60960, 172722], [30803, 60961],
+    [36108, 60963], [29410, 60964], [29553, 60965], [35629, 60966],
+    [29442, 60967], [29937, 60968], [36075, 60969], [60970, 150203],
+    [34351, 60971], [24506, 60972], [34976, 60973], [17591, 60974], 60975,
+    [60977, 159237], 60978, [35454, 60979], [60980, 140571], 60981,
+    [24829, 60982], [30311, 60983], [39639, 60984], [40260, 60985],
+    [37742, 58859, 60986], [39823, 60987], [34805, 60988], 60989, 0,
+    [36087, 60991], [29484, 60992], [38689, 60993], [39856, 60994],
+    [13782, 60995], [29362, 60996], [19463, 60997], [31825, 60998],
+    [39242, 60999], [24921, 61001], [19460, 61002], [40598, 61003],
+    [24957, 61004], 61005, [22367, 61006], [24943, 61007], [25254, 61008],
+    [25145, 61009], 0, [14940, 61011], [25058, 61012], [21418, 61013],
+    [25444, 61015], [26626, 61016], [13778, 61017], [23895, 61018],
+    [36826, 61020], [61021, 167481], 61022, [20697, 61023], [30982, 61025],
+    [21298, 61026], [38456, 61027], [61028, 134971], [16485, 61029], 61030,
+    [30718, 61031], 61032, [31938, 61033], [61034, 155418], [31962, 61035],
+    [31277, 61036], [32870, 61037], [32867, 61038], [32077, 61039],
+    [29957, 61040], [29938, 61041], [35220, 61042], [33306, 61043],
+    [26380, 61044], [32866, 61045], [61046, 160902], [32859, 61047],
+    [29936, 61048], [33027, 61049], [30500, 61050], [35209, 61051],
+    [61052, 157644], [30035, 61053], [34729, 61055], [34766, 61056],
+    [33224, 61057], [34700, 61058], [35401, 61059], [36013, 61060],
+    [35651, 61061], [30507, 61062], [29944, 61063], [34010, 61064],
+    [27058, 61066], [36262, 61067], 61068, [35241, 58392, 61069], 0,
+    [28089, 61071], [34753, 61072], [61073, 147473], [29927, 61074],
+    [15835, 61075], [29046, 61076], [24740, 57702, 61077], [24988, 61078],
+    [15569, 61079], 0, [24695, 61081], 61082, [32625, 61083], 0,
+    [24809, 61086], [19326, 61087], [57344, 132423], [37595, 57345],
+    [57346, 132575], [57347, 147397], [34124, 57348], [17077, 57349],
+    [29679, 57350], [20917, 57351], [13897, 57352], [57353, 149826],
+    [57354, 166372], [37700, 57355], [57356, 137691], [33518, 57357],
+    [57358, 146632], [30780, 57359], [26436, 57360], [25311, 57361],
+    [57362, 149811], [57363, 166314], [57364, 131744], [57365, 158643],
+    [57366, 135941], [20395, 57367], [57368, 140525], [20488, 57369],
+    [57370, 159017], [57371, 162436], [57372, 144896], [57373, 150193],
+    [57374, 140563], 0, [57376, 131966], [24484, 57377], [57378, 131968],
+    [57379, 131911], [28379, 57380], [57381, 132127], 20702, [20737, 57383],
+    [13434, 57384], [20750, 57385], [39020, 57386], [14147, 57387],
+    [33814, 57388], [57389, 149924], [57390, 132231], [20832, 57391],
+    [57392, 144308], [20842, 57393], [57394, 134143], [57395, 139516],
+    [57396, 131813], [57397, 140592], [57398, 132494], [57399, 143923],
+    [57400, 137603], [23426, 57401], [34685, 57402], [57403, 132531],
+    [57404, 146585], [20914, 57405], [20920, 57406], [40244, 57407],
+    [20937, 57408], [20943, 57409], [20945, 57410], [15580, 57411],
+    [20947, 57412], [57413, 150182], [20915, 57414], 0, 0, [20973, 57417],
+    [33741, 57418], [26942, 57419], [57420, 145197], [24443, 57421],
+    [21003, 57422], [21030, 57423], [21052, 57424], [21173, 57425],
+    [21079, 57426], [21140, 57427], [21177, 57428], [21189, 57429],
+    [31765, 57430], [34114, 57431], [21216, 57432], [34317, 57433],
+    [57434, 158483], 0, [57436, 166622], [21833, 57437], [28377, 57438],
+    [57439, 147328], [57440, 133460], [57441, 147436], [21299, 57442], 0,
+    [57444, 134114], [27851, 57445], [57446, 136998], [26651, 57447],
+    [29653, 57448], [24650, 57449], [16042, 57450], [14540, 57451],
+    [57452, 136936], [29149, 57453], [17570, 57454], [21357, 57455],
+    [21364, 57456], [57457, 165547], [21374, 57458], 0, [57460, 136598],
+    [57461, 136723], [30694, 57462], [21395, 57463], [57464, 166555],
+    [21408, 57465], [21419, 57466], [21422, 57467], [29607, 57468],
+    [57469, 153458], [16217, 57470], [29596, 57471], [21441, 57472],
+    [21445, 57473], [27721, 57474], [20041, 57475], [22526, 57476],
+    [21465, 57477], [15019, 57478], [57479, 134031], [21472, 57480],
+    [57481, 147435], [57482, 142755], [21494, 57483], [57484, 134263],
+    [21523, 57485], [28793, 57486], [21803, 57487], [26199, 57488],
+    [27995, 57489], [21613, 57490], [57491, 158547], [57492, 134516],
+    [21853, 57493], [21647, 57494], [21668, 57495], [18342, 57496],
+    [57497, 136973], [57498, 134877], [15796, 57499], [57500, 134477],
+    [57501, 166332], [57502, 140952], [21831, 57503], [19693, 57504],
+    [21551, 57505], [29719, 57506], [21894, 57507], [21929, 57508], 0,
+    [57510, 137431], [57511, 147514], [17746, 57512], [57513, 148533],
+    [26291, 57514], [57515, 135348], [22071, 57516], [26317, 57517],
+    [57518, 144010], [26276, 57519], 0, [22093, 57521], [22095, 57522],
+    [30961, 57523], [22257, 57524], [38791, 57525], [21502, 57526],
+    [22272, 57527], [22255, 57528], [22253, 57529], [57530, 166758],
+    [13859, 57531], [57532, 135759], [22342, 57533], [57534, 147877],
+    [27758, 57535], [28811, 57536], [22338, 57537], [14001, 57538],
+    [57539, 158846], [22502, 57540], [57541, 136214], [22531, 57542],
+    [57543, 136276], [57544, 148323], [22566, 57545], [57546, 150517], 0,
+    [22698, 57548], [13665, 57549], [22752, 57550], [22748, 57551],
+    [57552, 135740], [22779, 57553], [23551, 57554], [22339, 57555],
+    [57556, 172368], [57557, 148088], [37843, 57558], [13729, 57559],
+    [22815, 57560], [26790, 57561], [14019, 57562], [28249, 57563],
+    [57564, 136766], [23076, 57565], 0, [57567, 136850], [34053, 57568],
+    [22985, 57569], [57570, 134478], [57571, 158849], [57572, 159018],
+    [57573, 137180], [23001, 57574], [57575, 137211], [57576, 137138],
+    [57577, 159142], [28017, 57578], [57579, 137256], [57580, 136917],
+    [23033, 57581], [57582, 159301], [23211, 57583], [23139, 57584],
+    [14054, 57585], [57586, 149929], 0, [14088, 57588], [23190, 57589],
+    [29797, 57590], [23251, 57591], [57592, 159649], [57593, 140628],
+    [57595, 137489], [14130, 57596], [57597, 136888], [24195, 57598],
+    [21200, 57599], [23414, 57600], [25992, 57601], [23420, 57602],
+    [57603, 162318], [16388, 57604], [18525, 57605], [57606, 131588],
+    [23509, 57607], [57609, 137780], [57610, 154060], [57611, 132517],
+    [23539, 57612], [23453, 57613], [19728, 57614], [23557, 57615],
+    [57616, 138052], [23571, 57617], [29646, 57618], [23572, 57619],
+    [57620, 138405], [57621, 158504], [23625, 57622], [18653, 57623],
+    [23685, 57624], [23785, 57625], [23791, 57626], [23947, 57627],
+    [57628, 138745], [57629, 138807], [23824, 57630], [23832, 57631],
+    [23878, 57632], [57633, 138916], [23738, 57634], [24023, 57635],
+    [33532, 57636], [14381, 57637], [57638, 149761], [57639, 139337],
+    [57640, 139635], [33415, 57641], [14390, 57642], [15298, 57643],
+    [24110, 57644], [27274, 57645], 0, 57647, [57648, 148668], [57649, 134355],
+    [21414, 57650], [20151, 57651], 0, [21416, 57653], [57654, 137073],
+    [24073, 57655], 57656, [57657, 164994], [24313, 57658], [24315, 57659],
+    [14496, 57660], [24316, 57661], [26686, 57662], [37915, 57663],
+    [24333, 57664], [57665, 131521], [57666, 194708], [15070, 57667],
+    [57669, 135994], [24378, 57670], [57671, 157832], [57672, 140240],
+    [57674, 140401], [24419, 57675], [57677, 159342], [24434, 57678],
+    [37696, 57679], [57680, 166454], [24487, 57681], [23990, 57682],
+    [15711, 57683], [57684, 152144], [57685, 139114], [57686, 159992],
+    [57687, 140904], [37334, 57688], [57689, 131742], [57690, 166441],
+    [24625, 57691], [26245, 57692], [14691, 57694], [15815, 57695],
+    [13881, 57696], [22416, 57697], [57698, 141236], [31089, 57699],
+    [15936, 57700], [24734, 57701], 0, 0, [57704, 149890], [57705, 149903],
+    [57706, 162387], [29860, 57707], [20705, 57708], [23200, 57709],
+    [24932, 57710], [24898, 57712], [57713, 194726], [57714, 159442],
+    [24961, 57715], [20980, 57716], [57717, 132694], [24967, 57718],
+    [23466, 57719], [57720, 147383], [57721, 141407], [25043, 57722],
+    [57723, 166813], [57724, 170333], [25040, 57725], [14642, 57726],
+    [57727, 141696], [57728, 141505], [24611, 57729], [24924, 57730],
+    [25886, 57731], [25483, 57732], [57733, 131352], [25285, 57734],
+    [57735, 137072], [25301, 57736], [57737, 142861], [25452, 57738],
+    [57739, 149983], [14871, 57740], [25656, 57741], [25592, 57742],
+    [57743, 136078], [57744, 137212], [28554, 57746], [57747, 142902], 0,
+    [57750, 153373], [25825, 57751], [25829, 57752], [38011, 57753],
+    [14950, 57754], [25658, 57755], [14935, 57756], [25933, 57757],
+    [28438, 57758], [57759, 150056], [57760, 150051], [25989, 57761],
+    [25965, 57762], [25951, 57763], 0, [26037, 57765], [57766, 149824],
+    [19255, 57767], [26065, 57768], [16600, 57769], [57770, 137257], 57771,
+    [26083, 57772], [24543, 57773], [57774, 144384], [26136, 57775],
+    [57776, 143863], [57777, 143864], [26180, 57778], [57779, 143780],
+    [57780, 143781], [26187, 57781], [57782, 134773], [26215, 57783],
+    [57784, 152038], [26227, 57785], 0, [57788, 143921], [57789, 165364],
+    [57790, 143816], [57791, 152339], [30661, 57792], [57793, 141559],
+    [39332, 57794], [26370, 57795], [57796, 148380], [57797, 150049],
+    [27130, 57799], [57800, 145346], 0, [26471, 57802], [26466, 57803],
+    [57804, 147917], [57805, 168173], [26583, 57806], [17641, 57807],
+    [26658, 57808], [28240, 57809], [37436, 57810], [26625, 57811],
+    [57812, 144358], [57813, 159136], [26717, 57814], [57815, 144495],
+    [27105, 57816], [27147, 57817], [57818, 166623], [26995, 57819],
+    [26819, 57820], [57821, 144845], [26881, 57822], [26880, 57823],
+    [14849, 57825], [57826, 144956], [15232, 57827], [26540, 57828],
+    [26977, 57829], [57830, 166474], [17148, 57831], [26934, 57832],
+    [27032, 57833], [15265, 57834], [57835, 132041], [33635, 57836],
+    [20624, 57837], [27129, 57838], [57839, 144985], [57840, 139562],
+    [27205, 57841], [57842, 145155], [27293, 57843], [15347, 57844],
+    [26545, 57845], [27336, 57846], [57847, 168348], [15373, 57848],
+    [27421, 57849], [57850, 133411], [24798, 57851, 60308], [27445, 57852],
+    [27508, 57853], [57854, 141261], [28341, 57855], [57856, 146139], 0,
+    [57858, 137560], [14144, 57859], [21537, 57860], [57861, 146266],
+    [27617, 57862], [57863, 147196], [27612, 57864], [27703, 57865],
+    [57866, 140427], [57867, 149745], [57868, 158545], [27738, 57869],
+    [33318, 57870], [27769, 57871], [57872, 146876], [17605, 57873],
+    [57874, 146877], [57875, 147876], [57876, 149772], [57877, 149760],
+    [57878, 146633], [14053, 57879], [15595, 57880], [57881, 134450],
+    [39811, 57882], [57883, 143865], [57884, 140433], [32655, 57885],
+    [26679, 57886], [57887, 159013], [57888, 159137], [57889, 159211],
+    [28054, 57890], [27996, 57891], [28284, 57892], [28420, 57893],
+    [57894, 149887], [57895, 147589], [57896, 159346], [34099, 57897],
+    [57898, 159604], [20935, 57899], 0, 0, [33838, 57902], [57903, 166689], 0,
+    [57905, 146991], [29779, 57906], [57907, 147330], [31180, 57908],
+    [28239, 57909], [23185, 57910], [57911, 143435], [28664, 57912],
+    [14093, 57913], [28573, 57914], [57915, 146992], [28410, 57916],
+    [57917, 136343], [57918, 147517], [17749, 57919], [37872, 57920],
+    [28484, 57921], [28508, 57922], [15694, 57923], [28532, 57924],
+    [57925, 168304], [15675, 57926], [28575, 57927], [57928, 147780],
+    [28627, 57929], [57930, 147601], [57931, 147797], [57932, 147513],
+    [57933, 147440], [57934, 147380], [57935, 147775], [20959, 57936],
+    [57937, 147798], [57938, 147799], [57939, 147776], [57940, 156125],
+    [28747, 57941], [28798, 57942], [28839, 57943], 0, [28876, 57945],
+    [28885, 57946], [28886, 57947], [28895, 57948], [16644, 57949],
+    [15848, 57950], [29108, 57951], [29078, 57952], [57953, 148087],
+    [28971, 57954], [28997, 57955], [23176, 57956], [29002, 57957], 0,
+    [57960, 148325], [29007, 57961], [37730, 57962], [57963, 148161],
+    [28972, 57964], [57965, 148570], [57966, 150055], [57967, 150050],
+    [29114, 57968], [57969, 166888], [28861, 57970], [29198, 57971],
+    [37954, 57972], [29205, 57973], [22801, 57974], [37955, 57975],
+    [29220, 57976], [37697, 57977], [57978, 153093], [29230, 57979],
+    [29248, 57980], [57981, 149876], [26813, 57982], [29269, 57983],
+    [29271, 57984], [15957, 57985], [57986, 143428], [26637, 57987],
+    [28477, 57988], [29314, 57989], 0, [29483, 57991], [57992, 149539],
+    [57993, 165931], [18669, 57994], [57995, 165892], [29480, 57996],
+    [29486, 57997], [29647, 57998], [29610, 57999], [58000, 134202],
+    [58001, 158254], [29641, 58002], [29769, 58003], [58004, 147938],
+    [58005, 136935], [58006, 150052], [26147, 58007], [14021, 58008],
+    [58009, 149943], [58010, 149901], [58011, 150011], [29687, 58012],
+    [29717, 58013], [26883, 58014], [58015, 150054], [29753, 58016],
+    [16087, 58018], 0, [58020, 141485], [29792, 58021], [58022, 167602],
+    [29767, 58023], [29668, 58024], [29814, 58025], [33721, 58026],
+    [29804, 58027], [29812, 58029], [37873, 58030], [27180, 58031],
+    [29826, 58032], [18771, 58033], [58034, 150156], [58035, 147807],
+    [58036, 150137], [58037, 166799], [23366, 58038], [58039, 166915],
+    [58040, 137374], [29896, 58041], [58042, 137608], [29966, 58043],
+    [29982, 58045], [58046, 167641], [58047, 137803], [23511, 58048],
+    [58049, 167596], [37765, 58050], [30029, 58051], [30026, 58052],
+    [30055, 58053], [30062, 58054], [58055, 151426], [16132, 58056],
+    [58057, 150803], [30094, 58058], [29789, 58059], [30110, 58060],
+    [30132, 58061], [30210, 58062], [30252, 58063], [30289, 58064],
+    [30287, 58065], [30319, 58066], 58067, [58068, 156661], [30352, 58069],
+    [33263, 58070], [14328, 58071], [58072, 157969], [58073, 157966],
+    [30369, 58074], [30373, 58075], [30391, 58076], [30412, 58077],
+    [58078, 159647], [33890, 58079], [58080, 151709], [58081, 151933],
+    [58082, 138780], [30494, 58083], [30502, 58084], [30528, 58085],
+    [25775, 58086], [58087, 152096], [30552, 58088], [58089, 144044],
+    [30639, 58090], [58091, 166244], [58092, 166248], [58093, 136897],
+    [30708, 58094], 0, [26826, 58098], [30895, 58099], [30919, 58100],
+    [30931, 58101], [38565, 58102], [31022, 58103], [58104, 153056],
+    [30935, 58105], [31028, 58106], [30897, 58107], [58108, 161292],
+    [36792, 58109], [34948, 58110], [58113, 140828], [31110, 58114],
+    [35072, 58115], [26882, 58116], [31104, 58117], [58118, 153687],
+    [31133, 58119], [58120, 162617], [31036, 58121], [31145, 58122],
+    [28202, 58123], [58124, 160038], [16040, 58125], [31174, 58126],
+    [58127, 168205], [31188, 58128], 0, [21797, 62526], 0, [62528, 134210],
+    [62529, 134421], [62530, 151851], [21904, 62531], [62532, 142534],
+    [14828, 62533], [62534, 131905], [36422, 62535], [62536, 150968],
+    [62537, 169189], 0, [62539, 164030], [30586, 62540], [62541, 142392],
+    [14900, 62542], [18389, 62543], [62544, 164189], [62545, 158194],
+    [62546, 151018], [25821, 62547], [62548, 134524], [62549, 135092],
+    [62550, 134357], 0, [25741, 62552], [36478, 62553], [62554, 134806], 0,
+    [62556, 135012], [62557, 142505], [62558, 164438], [62559, 148691], 0,
+    [62561, 134470], [62562, 170573], [62563, 164073], [18420, 62564],
+    [62565, 151207], [62566, 142530], [39602, 62567], [14951, 62568],
+    [62569, 169460], [16365, 62570], [13574, 62571], [62572, 152263],
+    [62573, 169940], 0, [62575, 142660], [40302, 62576], [38933, 62577], 0,
+    [17369, 62579], 0, [25780, 62581], [21731, 62582], 0, [62584, 142282], 0,
+    [14843, 62586], 0, [62588, 157402], [62589, 157462], [62590, 162208],
+    [25834, 62591], [62592, 151634], [62593, 134211], [36456, 62594], 0,
+    [62596, 166732], [62597, 132913], 0, [18443, 62599], [62600, 131497],
+    [16378, 62601], [22643, 62602], [62603, 142733], 0, [62605, 148936],
+    [62606, 132348], [62607, 155799], [62608, 134988], 0, [21881, 62610], 0,
+    [17338, 62612], 0, [19124, 62614], [62615, 141926], [62616, 135325],
+    [33194, 62617], [39157, 62618], [62619, 134556], [25465, 62620],
+    [14846, 62621], [62622, 141173], [36288, 62623], [22177, 62624],
+    [25724, 62625], [15939, 62626], 0, [62628, 173569], [62629, 134665],
+    [62630, 142031], 0, 0, [62633, 135368], [62634, 145858], [14738, 62635],
+    [14854, 62636], [62637, 164507], [13688, 62638], [62639, 155209],
+    [62640, 139463], 0, 0, [62643, 142514], [62644, 169760], [13500, 62645],
+    [27709, 62646], [62647, 151099], 0, 0, [62650, 161140], [62651, 142987],
+    [62652, 139784], [62653, 173659], [62654, 167117], [62655, 134778],
+    [62656, 134196], [62683, 161337], [62684, 142286], [62687, 142417],
+    [14872, 62689], [62691, 135367], [62693, 173618], [62695, 167122],
+    [62696, 167321], [62697, 167114], [38314, 62698], 0, [62706, 161630],
+    [28992, 62708], 0, [20822, 62385], 0, [20616, 62487], 0, [13459, 62489],
+    [20870, 62491], [24130, 63037], [20997, 62495], [21031, 62436],
+    [21113, 62497], 0, [13651, 62504], [21442, 62505], [21343, 62715], 0,
+    [21823, 62520], 0, [21976, 59986], [13789, 62722], [22049, 63067], 0,
+    [22100, 60044], [60148, 135291], 0, [60153, 135379], 0, [61095, 135934], 0,
+    0, [14265, 60104], [23745, 61099], [23829, 63066], [23894, 63030],
+    [14392, 63036], [20097, 62477], [24253, 63038], [14612, 63042],
+    [25017, 63050], [25232, 63054], [25368, 63056], [25690, 63063],
+    [25745, 62381], [33133, 62709], [33156, 59922], [33171, 59924],
+    [26624, 63080], [15292, 63093], [29327, 60517], [29389, 59781], 0,
+    [29497, 59785], [30018, 59811], [30172, 59817], [16320, 59818],
+    [60278, 151205], [16343, 59820], 0, 30336, [30348, 59824, 151388],
+    [16552, 59845], [30777, 59846], [16643, 59855], [31377, 59863],
+    [31771, 59876], [31981, 59884], [32659, 62658], [32686, 59892], 0,
+    [33535, 59936], [22623, 59981], [34482, 59960], 0, [34699, 59963],
+    [35143, 59969], 0, [35369, 59972], 0, [36465, 59988], [60484, 164233],
+    [36528, 59990], 0, [37214, 62443], [37260, 62441], [39182, 60051],
+    [39196, 60054], 0, 0, [39809, 60066], [40384, 60080], [40339, 60078],
+    [40620, 60085], [19857, 60540], 0, 37818, [40571, 60084], [28809, 63148],
+    [29512, 59788], 0, [31129, 59858], [36791, 59997], 0, [39234, 60056],
+    {s: 193}, 8364, {s: 4}, [12443, 63518], [12444, 63519], [11904, 63520],
+    {f: 5, c: 62211}, [62216, 131340], 62217, [62218, 131281], [62219, 131277],
+    {f: 2, c: 62220}, [62222, 131275], [62223, 139240], 62224, [62225, 131274],
+    {f: 4, c: 62226}, [62230, 131342], {f: 2, c: 62231}, {f: 2, c: 62776},
+    [62778, 138177], [62779, 194680], [12205, 38737, 62780], [62781, 131206],
+    [20059, 62782], [20155, 62783], [13630, 62784], [23587, 62785],
+    [24401, 62786], [24516, 62787], [14586, 62788], [25164, 62789],
+    [25909, 62790], [27514, 62791], [27701, 62792], [27706, 62793],
+    [28780, 62794], [29227, 62795], [20012, 62796], [29357, 62797],
+    [62798, 149737], [32594, 62799], [31035, 62800], [31993, 62801],
+    [32595, 62802], [62803, 156266], [13505, 62804], [62806, 156491],
+    [32770, 62807], [32896, 62808], [62809, 157202], [62810, 158033],
+    [21341, 62811], [34916, 62812], [35265, 62813], [62814, 161970],
+    [35744, 62815], [36125, 62816], [38021, 62817], [38264, 62818],
+    [38271, 62819], [38376, 62820], [62821, 167439], [38886, 62822],
+    [39029, 62823], [39118, 62824], [39134, 62825], [39267, 62826],
+    [62827, 170000], [40060, 62828], [40479, 62829], [40644, 62830],
+    [27503, 62831], [62832, 63751], [20023, 62833], [62834, 131207],
+    [38429, 62835], [25143, 62836], [38050, 62837], [11908, 63521],
+    [11910, 63522], [11911, 63523], [11912, 63524], [11914, 63525],
+    [11916, 63526], [11917, 63527], [11925, 63528], [11932, 63529],
+    [11941, 63531], [11943, 63532], [11946, 63533], [11948, 63534],
+    [11950, 63535], [11958, 63536], [11964, 63537], [11966, 63538],
+    [11978, 63540], [11980, 63541], [11981, 63542], [11983, 63543],
+    [11990, 63544], [11991, 63545], [11998, 63546], [62368, 172969],
+    [62369, 135493], [25866, 62371], [20029, 62374], [28381, 62375],
+    [40270, 62376], [37343, 62377], [62380, 161589], [20250, 62382],
+    [20264, 62383], [20392, 62384], [20852, 62386], [20892, 62387],
+    [20964, 62388], [21153, 62389], [21160, 62390], [21307, 62391],
+    [21326, 62392], [21457, 62393], [21464, 62394], [22242, 62395],
+    [22768, 62396], [22788, 62397], [22791, 62398], [22834, 62399],
+    [22836, 62400], [23398, 62401], [23454, 62402], [23455, 62403],
+    [23706, 62404], [24198, 62405], [24635, 62406], [25993, 62407],
+    [26622, 62408], [26628, 62409], [26725, 62410], [27982, 62411],
+    [28860, 62412], [30005, 62413], [32420, 62414], [32428, 62415],
+    [32442, 62416], [32455, 62417], [32463, 62418], [32479, 62419],
+    [32518, 62420], [32567, 62421], [33402, 62422], [33487, 62423],
+    [33647, 62424], [35270, 62425], [35774, 62426], [35810, 62427],
+    [36710, 62428], [36711, 62429], [36718, 62430], [29713, 62431],
+    [31996, 62432], [32205, 62433], [26950, 62434], [31433, 62435],
+    [30904, 62442], [32956, 62444], [36107, 62446], [33014, 62447],
+    [62448, 133607], [32927, 62451], [40647, 62452], [19661, 62453],
+    [40393, 62454], [40460, 62455], [19518, 62456], [62457, 171510],
+    [62458, 159758], [40458, 62459], [62460, 172339], [13761, 62461],
+    [28314, 62463], [33342, 62464], [29977, 62465], [18705, 62467],
+    [39532, 62468], [39567, 62469], [40857, 62470], [31111, 62471],
+    [62472, 164972], [62473, 138698], [62474, 132560], [62475, 142054],
+    [20004, 62476], [20096, 62478], [20103, 62479], [20159, 62480],
+    [20203, 62481], [20279, 62482], [13388, 62483], [20413, 62484],
+    [15944, 62485], [20483, 62486], [13437, 62488], [13477, 62490],
+    [22789, 62492], [20955, 62493], [20988, 62494], [20105, 62496],
+    [21136, 62498], [21287, 62499], [13767, 62500], [21417, 62501],
+    [13649, 62502], [21424, 62503], [21539, 62506], [13677, 62507],
+    [13682, 62508], [13953, 62509], [21651, 62510], [21667, 62511],
+    [21684, 62512], [21689, 62513], [21712, 62514], [21743, 62515],
+    [21784, 62516], [21795, 62517], [21800, 62518], [13720, 62519],
+    [13733, 62521], [13759, 62522], [21975, 62523], [13765, 62524],
+    [62525, 163204], [16467, 62538], [62551, 135412], [62555, 134155],
+    [62574, 161992], [62580, 155813], [62583, 142668], [62585, 135287],
+    [62587, 135279], [62595, 139681], [62609, 134550], [16571, 62611],
+    [62631, 142537], [22098, 62641], [62642, 134961], [62657, 157724],
+    [62659, 135375], [62660, 141315], [62661, 141625], [13819, 62662],
+    [62663, 152035], [62664, 134796], [62665, 135053], [62666, 134826],
+    [16275, 62667], [62668, 134960], [62669, 134471], [62670, 135503],
+    [62671, 134732], [62673, 134827], [62674, 134057], [62675, 134472],
+    [62676, 135360], [62677, 135485], [16377, 62678], [62679, 140950],
+    [25650, 62680], [62681, 135085], [62682, 144372], [62685, 134526],
+    [62686, 134527], [62688, 142421], [62690, 134808], [62692, 134958],
+    [62694, 158544], [21708, 62699], [33476, 62700], [21945, 62701],
+    [62703, 171715], [39974, 62704], [39606, 62705], [62707, 142830],
+    [33004, 62710], [23580, 62711], [62712, 157042], [33076, 62713],
+    [14231, 62714], [62716, 164029], [37302, 62717], [62718, 134906],
+    [62719, 134671], [62720, 134775], [62721, 134907], [62723, 151019],
+    [13833, 62724], [62725, 134358], [22191, 62726], [62727, 141237],
+    [62728, 135369], [62729, 134672], [62730, 134776], [62731, 135288],
+    [62732, 135496], [62733, 164359], [62734, 136277], [62735, 134777],
+    [62736, 151120], [62737, 142756], [23124, 62738], [62739, 135197],
+    [62740, 135198], [62741, 135413], [62742, 135414], [22428, 62743],
+    [62744, 134673], [62745, 161428], [62746, 164557], [62747, 135093],
+    [62748, 134779], [62749, 151934], [14083, 62750], [62751, 135094],
+    [62752, 135552], [62753, 152280], [62754, 172733], [62755, 149978],
+    [62756, 137274], [62757, 147831], [62758, 164476], [22681, 62759],
+    [21096, 62760], [13850, 62761], [62762, 153405], [31666, 62763],
+    [23400, 62764], [18432, 62765], [19244, 62766], [40743, 62767],
+    [18919, 62768], [39967, 62769], [39821, 62770], [62771, 154484],
+    [62772, 143677], [22011, 62773], [13810, 62774], [22153, 62775],
+    [23870, 63028], [23880, 63029], [15868, 63031], [14351, 63032],
+    [23972, 63033], [23993, 63034], [14368, 63035], [24357, 63039],
+    [24451, 63040], [14600, 63041], [14655, 63043], [14669, 63044],
+    [24791, 63045], [24893, 63046], [23781, 63047], [14729, 63048],
+    [25015, 63049], [25039, 63051], [14776, 63052], [25132, 63053],
+    [25317, 63055], [14840, 63057], [22193, 63058], [14851, 63059],
+    [25570, 63060], [25595, 63061], [25607, 63062], [14923, 63064],
+    [25792, 63065], [40863, 63068], [14999, 63069], [25990, 63070],
+    [15037, 63071], [26111, 63072], [26195, 63073], [15090, 63074],
+    [26258, 63075], [15138, 63076], [26390, 63077], [15170, 63078],
+    [26532, 63079], [15192, 63081], [26698, 63082], [26756, 63083],
+    [15218, 63084], [15217, 63085], [15227, 63086], [26889, 63087],
+    [26947, 63088], [29276, 63089], [26980, 63090], [27039, 63091],
+    [27013, 63092], [27094, 63094], [15325, 63095], [27237, 63096],
+    [27252, 63097], [27249, 63098], [27266, 63099], [15340, 63100],
+    [27289, 63101], [15346, 63102], [27307, 63103], [27317, 63104],
+    [27348, 63105], [27382, 63106], [27521, 63107], [27585, 63108],
+    [27626, 63109], [27765, 63110], [27818, 63111], [15563, 63112],
+    [27906, 63113], [27910, 63114], [27942, 63115], [28033, 63116],
+    [15599, 63117], [28068, 63118], [28081, 63119], [28181, 63120],
+    [28184, 63121], [28201, 63122], [28294, 63123], [63124, 166336],
+    [28347, 63125], [28386, 63126], [28378, 63127], [40831, 63128],
+    [28392, 63129], [28393, 63130], [28452, 63131], [28468, 63132],
+    [15686, 63133], [63134, 147265], [28545, 63135], [28606, 63136],
+    [15722, 63137], [15733, 63138], [29111, 63139], [23705, 63140],
+    [15754, 63141], [28716, 63142], [15761, 63143], [28752, 63144],
+    [28756, 63145], [28783, 63146], [28799, 63147], [63149, 131877],
+    [17345, 63150], [13809, 63151], [63152, 134872], [13902, 58134],
+    [15789, 58172], [58173, 154725], [26237, 58183], [31860, 58188],
+    [29837, 58197], [32402, 58215], [17667, 58232], [58260, 151480],
+    [58270, 133901], [58277, 158474], [13438, 58311], [58317, 143087],
+    [58325, 146613], [58343, 159385], [34673, 58364], [25537, 58385],
+    [30583, 58387], [35210, 58390], [58406, 147343], [35660, 58415],
+    [58440, 150729], [18730, 58464], [58471, 172052], [58472, 165564],
+    [58473, 165121], [15088, 58490], [28815, 58511], [58529, 140922],
+    [58637, 158120], [58646, 148043], [26760, 58662], [58664, 139611],
+    [40802, 58702], [37830, 58793], [58802, 131967], [37734, 58888],
+    [37519, 58901], [34324, 58954], [58986, 173147], [16784, 59010],
+    [26511, 59045], [26654, 59048], [14435, 59051], [59077, 149996],
+    [15129, 59128], [33942, 59176], [59241, 149858], [14818, 59254],
+    [33920, 59259], [17262, 59328], [38769, 59402], [39323, 59427],
+    [18733, 59499], [28439, 59703], [59704, 160009], [28838, 59746],
+    [59752, 150095], [32357, 59753], [23855, 59755], [15859, 59756],
+    [59758, 150109], [59759, 137183], [32164, 59760], [33830, 59761],
+    [21637, 59762], [59763, 146170], [59765, 131604], [22398, 59766],
+    [59767, 133333], [59768, 132633], [16357, 59769], [59770, 139166],
+    [59771, 172726], [28675, 59772], [59773, 168283], [23920, 59774],
+    [29583, 59775], [59777, 166489], [59778, 168992], [20424, 59779],
+    [32743, 59780], [29456, 59782], [29496, 59784], [29505, 59787],
+    [16041, 59789], [29173, 59792], [59793, 149746], [29665, 59794],
+    [16074, 59796], [16081, 59798], [29721, 59801], [29726, 59802],
+    [29727, 59803], [16098, 59804], [16112, 59805], [16116, 59806],
+    [16122, 59807], [29907, 59808], [16142, 59809], [16211, 59810],
+    [30061, 59812], [30066, 59813], [30093, 59814], [16252, 59815],
+    [30152, 59816], [30285, 59819], [30324, 59821], [16348, 59822],
+    [30330, 59823], [29064, 59825], [22051, 59826], [35200, 59827],
+    [16413, 59829], [30531, 59830], [16441, 59831], [16453, 59833],
+    [13787, 59834], [30616, 59835], [16490, 59836], [16495, 59837],
+    [30654, 59839], [30667, 59840], [30744, 59842], [30748, 59844],
+    [30791, 59847], [30801, 59848], [30822, 59849], [33864, 59850],
+    [59851, 152885], [31027, 59852], [31026, 59854], [16649, 59856],
+    [31121, 59857], [31238, 59860], [16743, 59862], [16818, 59864],
+    [31420, 59865], [33401, 59866], [16836, 59867], [31439, 59868],
+    [31451, 59869], [16847, 59870], [31586, 59872], [31596, 59873],
+    [31611, 59874], [31762, 59875], [16992, 59877], [17018, 59878],
+    [31867, 59879], [31900, 59880], [17036, 59881], [31928, 59882],
+    [17044, 59883], [36755, 59885], [28864, 59886], [59887, 134351],
+    [32207, 59888], [32212, 59889], [32208, 59890], [32253, 59891],
+    [32692, 59893], [29343, 59894], [17303, 59895], [32800, 59896],
+    [32805, 59897], [32814, 59899], [32817, 59900], [32852, 59901],
+    [22452, 59903], [28832, 59904], [32951, 59905], [33001, 59906],
+    [17389, 59907], [33036, 59908], [33038, 59910], [33042, 59911],
+    [33044, 59913], [17409, 59914], [15161, 59915], [33110, 59916],
+    [33113, 59917], [33114, 59918], [17427, 59919], [33148, 59921],
+    [17445, 59923], [17453, 59925], [33189, 59926], [22511, 59927],
+    [33217, 59928], [33252, 59929], [33364, 59930], [17551, 59931],
+    [33398, 59933], [33482, 59934], [33496, 59935], [17584, 59937],
+    [33623, 59938], [38505, 59939], [33797, 59941], [28917, 59942],
+    [33892, 59943], [33928, 59945], [17668, 59946], [33982, 59947],
+    [34017, 59948], [34040, 59949], [34064, 59950], [34104, 59951],
+    [34130, 59952], [17723, 59953], [34159, 59954], [34160, 59955],
+    [34272, 59956], [17783, 59957], [34418, 59958], [34450, 59959],
+    [34543, 59961], [38469, 59962], [17926, 59964], [17943, 59965],
+    [34990, 59966], [35071, 59967], [35108, 59968], [35217, 59970],
+    [59971, 162151], [35384, 59973], [35476, 59974], [35508, 59975],
+    [35921, 59976], [36052, 59977], [36082, 59978], [36124, 59979],
+    [18328, 59980], [36291, 59982], [18413, 59983], [36410, 59985],
+    [22356, 59987], [22005, 59989], [18487, 59991], [36558, 59992],
+    [36578, 59993], [36580, 59994], [36589, 59995], [36594, 59996],
+    [36801, 59998], [36810, 59999], [36812, 60000], [36915, 60001],
+    [18605, 60003], [39136, 60004], [37395, 60005], [18718, 60006],
+    [37416, 60007], [37464, 60008], [37483, 60009], [37553, 60010],
+    [37550, 60011], [37567, 60012], [37603, 60013], [37611, 60014],
+    [37619, 60015], [37620, 60016], [37629, 60017], [37699, 60018],
+    [37764, 60019], [37805, 60020], [18757, 60021], [18769, 60022],
+    [37911, 60024], [37917, 60026], [37933, 60027], [37950, 60028],
+    [18794, 60029], [37972, 60030], [38009, 60031], [38189, 60032],
+    [38306, 60033], [18855, 60034], [38388, 60035], [38451, 60036],
+    [18917, 60037], [18980, 60039], [38720, 60040], [18997, 60041],
+    [38834, 60042], [38850, 60043], [19172, 60045], [39097, 60047],
+    [19225, 60048], [39153, 60049], [22596, 60050], [39193, 60052],
+    [39223, 60055], [39261, 60057], [39266, 60058], [19312, 60059],
+    [39365, 60060], [19357, 60061], [39484, 60062], [39695, 60063],
+    [39785, 60065], [39901, 60067], [39921, 60068], [39924, 60069],
+    [19565, 60070], [39968, 60071], [14191, 60072], [60073, 138178],
+    [40265, 60074], [40702, 60076], [22096, 60077], [40381, 60079],
+    [40444, 60081], [38134, 60082], [36790, 60083], [40625, 60086],
+    [40637, 60087], [40646, 60088], [38108, 60089], [40674, 60090],
+    [40689, 60091], [40696, 60092], [40772, 60094], [60095, 131220],
+    [60096, 131767], [60097, 132000], [38083, 60099], [60101, 132311],
+    [38081, 60103], [60105, 132565], [60106, 132629], [60107, 132726],
+    [60108, 136890], [22359, 60109], [29043, 60110], [60111, 133826],
+    [60112, 133837], [60113, 134079], [60115, 194619], [60116, 134091],
+    [21662, 60117], [60118, 134139], [60119, 134203], [60120, 134227],
+    [60121, 134245], [60122, 134268], [60124, 134285], [60126, 134325],
+    [60127, 134365], [60128, 134381], [60129, 134511], [60130, 134578],
+    [60131, 134600], [60135, 134660], [60136, 134670], [60137, 134871],
+    [60138, 135056], [60139, 134957], [60140, 134771], [60142, 135100],
+    [60144, 135260], [60145, 135247], [60146, 135286], [60149, 135304],
+    [60150, 135318], [13895, 60151], [60152, 135359], [60154, 135471],
+    [60155, 135483], [21348, 60156], [60158, 135907], [60159, 136053],
+    [60160, 135990], [60162, 136567], [60163, 136729], [60164, 137155],
+    [60165, 137159], [28859, 60167], [60168, 137261], [60169, 137578],
+    [60170, 137773], [60171, 137797], [60172, 138282], [60173, 138352],
+    [60174, 138412], [60175, 138952], [60177, 138965], [60178, 139029],
+    [29080, 60179], [60181, 139333], [27113, 60182], [14024, 60183],
+    [60184, 139900], [60185, 140247], [60186, 140282], [60187, 141098],
+    [60188, 141425], [60189, 141647], [60191, 141671], [60192, 141715],
+    [60193, 142037], [60195, 142056], [60197, 142094], [60199, 142143],
+    [60202, 142412], [60204, 142472], [60205, 142519], [60206, 154600],
+    [60207, 142600], [60208, 142610], [60209, 142775], [60210, 142741],
+    [60211, 142914], [60212, 143220], [60213, 143308], [60214, 143411],
+    [60215, 143462], [60216, 144159], [60217, 144350], [60222, 144743],
+    [60223, 144883], [60227, 144922], [60228, 145174], [22709, 60231],
+    [60234, 146087], [60237, 146961], [60238, 147129], [60243, 147737],
+    [60245, 148206], [60246, 148237], [60248, 148276], [60249, 148374],
+    [60258, 148484], [60259, 148694], [22408, 60260], [60261, 149108],
+    [60263, 149295], [60271, 149522], [60272, 149755], [60273, 150037],
+    [60275, 150208], [22885, 60277], [60279, 151430], [60282, 151596],
+    [22335, 60284], [60286, 152217], [60287, 152601], [60291, 152646],
+    [60292, 152686], [60296, 152895], [60298, 152926], [60300, 152930],
+    [60301, 152934], [60302, 153543], [60304, 153693], [60309, 153859],
+    [60312, 154286], [60313, 154505], [60314, 154630], [22433, 60316],
+    [29009, 60317], [60319, 155906], [60322, 156082], [60325, 156674],
+    [60326, 156746], [60330, 156804], [60334, 156808], [60336, 156946],
+    [60338, 157119], [60339, 157365], [22201, 60347], [60349, 157436],
+    [13848, 60355], [60357, 157593], [60358, 157806], [60360, 157790],
+    [60362, 157895], [60366, 157990], [60368, 158009], [60371, 158202],
+    [60373, 158253], [60378, 158260], [60379, 158555], [60383, 158621],
+    [60385, 158884], [60388, 159150], [60392, 159819], [60393, 160205],
+    [60395, 160384], [60396, 160389], [60399, 160395], [60401, 160486],
+    [38047, 60404], [60405, 160848], [14009, 60416], [60424, 161740],
+    [60425, 161880], [22230, 60426], [60435, 162269], [60441, 162301],
+    [60442, 162314], [60443, 162571], [60444, 163174], [60448, 163849],
+    [60459, 163875], [60463, 163912], [60466, 163971], [60479, 163984],
+    [60480, 164084], [60481, 164142], [60483, 164175], [60485, 164271],
+    [60486, 164378], [60487, 164614], [60488, 164655], [60489, 164746],
+    [60491, 164968], [60492, 165546], [25574, 60494], [60495, 166230],
+    [60498, 166328], [60500, 166375], [60502, 166376], [60503, 166726],
+    [60504, 166868], [60506, 166921], [60508, 167877], [60509, 168172],
+    [60511, 168208], [60512, 168252], [15863, 60513], [60514, 168286],
+    [60515, 150218], [36816, 60516], [60519, 169191], [60521, 169392],
+    [60522, 169400], [60523, 169778], [60524, 170193], [60525, 170313],
+    [60526, 170346], [60527, 170435], [60528, 170536], [60529, 170766],
+    [60530, 171354], [60531, 171419], [32415, 60532], [60533, 171768],
+    [60534, 171811], [19620, 60535], [38215, 60536], [60537, 172691],
+    [29090, 60538], [60539, 172799], [60542, 173515], [19868, 60543],
+    [60544, 134300], [36798, 60545], [36794, 60547], [60548, 140464],
+    [36793, 60549], [60550, 150163], [20202, 60555], [60557, 166700],
+    [36480, 60560], [60561, 137205], [60563, 166764], [60564, 166809],
+    [60566, 157359], [60568, 161365], [60570, 153141], [60571, 153942],
+    [20122, 60572], [60573, 155265], [60576, 134765], [60579, 147080],
+    [60580, 150686], [60583, 137206], [60584, 137339], [60587, 154698],
+    [60589, 152337], [15814, 60590], [60596, 155352], [19996, 60600],
+    [60601, 135146], [60602, 134473], [60603, 145082], [60638, 151880],
+    [21982, 60644], [34694, 60672], [60676, 135361], [60679, 149254],
+    [23440, 60680], [60682, 157843], [60684, 141044], [60685, 163119],
+    [60686, 147875], [60687, 163187], [60688, 159440], [60689, 160438],
+    [60691, 135641], [60693, 146684], [60694, 173737], [60695, 134828],
+    [60698, 138402], [60700, 151490], [60702, 135147], [60706, 142752],
+    [60710, 135148], [60711, 134666], [60714, 135149], [60717, 135559],
+    [19994, 60721], [19972, 60722], [23309, 60724], [13996, 60727],
+    [21373, 60729], [13989, 60730], [22682, 60732], [60733, 150382],
+    [22442, 60736], [60737, 154261], [60738, 133497], [60741, 140389],
+    [60746, 146686], [60747, 171824], [60749, 151465], [60750, 169374],
+    [60753, 146870], [60755, 157619], [60756, 145184], [60759, 147191],
+    [60760, 146988], [60785, 143578], [60789, 135849], [22439, 60790],
+    [60791, 149859], [60794, 159918], [60801, 137068], [60806, 160100],
+    [60809, 159010], [60810, 150242], [39963, 60837], [60838, 149822],
+    [15878, 60846], [60881, 159011], [60887, 132092], [60891, 146685],
+    [60893, 149785], [22394, 60904], [21722, 60912], [29050, 60928],
+    [60949, 150135], [60955, 166490], [60962, 194624], [60976, 137275],
+    [61000, 155993], [61014, 144373], [61019, 166850], [61024, 138566],
+    [61054, 159441], [13877, 61065], [61084, 166701], [21024, 61088],
+    [15384, 61089], [61090, 146631], [61091, 155351], [61092, 161366],
+    [61093, 152881], [61094, 137540], [61096, 170243], [61097, 159196],
+    [61098, 159917], [61100, 156077], [61101, 166415], [61102, 145015],
+    [61103, 131310], [61104, 157766], [61105, 151310], [17762, 61106],
+    [23327, 61107], [61108, 156492], [40784, 61109], [40614, 61110],
+    [61111, 156267], [20962, 57415], [21314, 57416], [26285, 57520],
+    [22620, 57547], [21843, 57566], [15749, 57594], [24928, 57608],
+    [18606, 57668], [38845, 57676], [57693, 137335], [24755, 57703],
+    [33828, 57711], [38932, 57748], [57749, 147596], [57764, 143486],
+    [57787, 138813], [15147, 57798], [15666, 57824], [57857, 132021],
+    [28801, 57944], [23708, 57959], [58017, 132547], [14128, 58028],
+    [58096, 136054], [58097, 150034], [58111, 166699], [58112, 155779],
+    [256, 62233], [193, 62234], [461, 62235], [192, 62236], [274, 62237],
+    [201, 62238], [282, 62239], [200, 62240], [332, 62241], [211, 62242],
+    [465, 62243], [210, 62244], 62245, [7870, 62246], 62247, [7872, 62248],
+    [202, 62249], [257, 62250], [225, 62251], [462, 62252], [224, 62253],
+    [593, 62254], [275, 62255], [233, 62256], [283, 62257], [232, 62258],
+    [299, 62259], [237, 62260], [464, 62261], [236, 62262], [333, 62263],
+    [243, 62264], [466, 62265], [242, 62266], [363, 62267], [250, 62268],
+    [468, 62269], [249, 62270], [470, 62271], [472, 62272], [474, 62273],
+    [476, 62274], [252, 62275], 62276, [7871, 62277], 62278, [7873, 62279],
+    [234, 62280], [609, 62281], [643, 63551], [592, 63552], [603, 63553],
+    [596, 63554], [629, 63555], [339, 63556], [248, 63557], [331, 63558],
+    [650, 63559], [618, 63560], {f: 2, c: 62282}, [11933, 63530],
+    [11974, 63539], [12003, 63547], 20539, 28158, [62841, 171123], 62842,
+    [15817, 62843], 34959, [62845, 147790], 28791, 23797, [19232, 62848],
+    [62849, 152013], [13657, 62850], [62851, 154928], 24866, [62853, 166450],
+    36775, 37366, 29073, 26393, 29626, [62859, 144001], [62860, 172295],
+    [15499, 62861], [62862, 137600], [19216, 62863], 30948, 29698, 20910,
+    [62867, 165647], [16393, 62868], 27235, [62870, 172730], [16931, 62871],
+    34319, 31274, [62875, 170311], [62876, 166634], 38741, 28749, 21284,
+    [62880, 139390], 37876, 30425, [62883, 166371], 62884, 30685, 20131, 20464,
+    20668, 20015, 20247, 62891, 21556, 32139, 22674, 22736, [62896, 138678],
+    24210, 24217, 24514, [62900, 141074], 25995, [62902, 144377], 26905, 27203,
+    [62905, 146531], 27903, 29184, [62909, 148741], 29580, [16091, 62911],
+    [62912, 150035], 23317, 29881, 35715, [62916, 154788], [62917, 153237],
+    31379, 31724, 31939, 32364, 33528, 34199, 62924, 34960, 62926, 36537,
+    62928, 36815, 34143, 39392, 37409, 62933, [62934, 167353], [62935, 136255],
+    [16497, 62936], [17058, 62937], 23066, 39016, 26475, [17014, 62944], 22333,
+    34262, [62948, 149883], 33471, [62950, 160013], [19585, 62951],
+    [62952, 159092], 23931, [62954, 158485], [62955, 159678], {f: 2, c: 62956},
+    23446, 62959, 32347],
+  'Adobe-GB1': [{f: 95, c: 32}, {f: 3, c: 12288}, [183, 12539], 713, 711, 168,
+    12291, 12293, 8212, 65374, 8214, [8230, 8943], {f: 2, c: 8216},
+    {f: 2, c: 8220}, {f: 2, c: 12308}, {f: 8, c: 12296}, {f: 2, c: 12310},
+    {f: 2, c: 12304}, 177, 215, 247, 8758, {f: 2, c: 8743}, 8721, 8719, 8746,
+    8745, 8712, 8759, 8730, 8869, 8741, 8736, 8978, 8857, 8747, 8750, 8801,
+    8780, 8776, 8765, 8733, 8800, {f: 2, c: 8814}, {f: 2, c: 8804}, 8734, 8757,
+    8756, 9794, 9792, 176, {f: 2, c: 8242}, 8451, 65284, 164, {f: 2, c: 65504},
+    8240, 167, 8470, 9734, 9733, 9675, 9679, 9678, 9671, 9670, 9633, 9632,
+    9651, 9650, 8251, 8594, {f: 2, c: 8592}, 8595, 12307, {f: 20, c: 9352},
+    {f: 20, c: 9332}, {f: 10, c: 9312}, {f: 10, c: 12832}, {f: 12, c: 8544},
+    {f: 3, c: 65281}, 65509, {f: 89, c: 65285}, 65507, {f: 83, c: 12353},
+    {f: 86, c: 12449}, {f: 17, c: 913}, {f: 7, c: 931}, {f: 17, c: 945},
+    {f: 7, c: 963}, {f: 7, c: 59277}, {f: 2, c: 65077}, {f: 2, c: 65081},
+    {f: 2, c: 65087}, {f: 2, c: 65085}, {f: 4, c: 65089}, {f: 2, c: 59284},
+    {f: 2, c: 65083}, {f: 2, c: 65079}, 65073, 59286, {f: 2, c: 65075},
+    {f: 6, c: 1040}, 1025, {f: 32, c: 1046}, 1105, {f: 26, c: 1078}, 257, 225,
+    462, 224, 275, 233, 283, 232, 299, 237, 464, 236, 333, 243, 466, 242, 363,
+    250, 468, 249, 470, 472, 474, 476, 252, 234, 593, 7743, 324, 328, 505, 609,
+    {f: 37, c: 12549}, 0, {f: 76, c: 9472}, {s: 126}, 21834, 38463, 22467,
+    25384, 21710, 21769, 21696, 30353, 30284, 34108, 30702, 33406, 30861,
+    29233, 38552, 38797, 27688, 23433, 20474, 25353, 26263, 23736, 33018,
+    26696, 32942, 26114, 30414, 20985, 25942, 29100, 32753, 34948, 20658,
+    22885, 25034, 28595, 33453, 25420, 25170, 21485, 21543, 31494,
+    [12043, 20843], 30116, 24052, 25300, 36299, 38774, 25226, 32793, 22365,
+    38712, 32610, 29240, [12137, 30333], 26575, 30334, 25670, 20336, 36133,
+    25308, 31255, 26001, 29677, 25644, 25203, 33324, 39041, 26495, 29256,
+    25198, 25292, 20276, 29923, 21322, 21150, 32458, 37030, 24110, 26758,
+    27036, 33152, 32465, 26834, 30917, 34444, 38225, 20621, 35876, 33502,
+    32990, 21253, 35090, 21093, 34180, 38649, 20445, 22561, 39281, 23453,
+    25265, 25253, 26292, 35961, 40077, 29190, 26479, 30865, 24754, 21329,
+    21271, 36744, 32972, 36125, 38049, 20493, 29384, 22791, 24811, 28953,
+    34987, 22868, 33519, 26412, 31528, 23849, 32503, 29997, 27893, 36454,
+    36856, 36924, [12240, 40763], [12112, 27604], 37145, 31508, 24444, 30887,
+    34006, 34109, 27605, 27609, 27606, 24065, 24199, 30201, 38381, 25949,
+    24330, 24517, 36767, 22721, 33218, 36991, 38491, 38829, 36793, 32534,
+    36140, 25153, 20415, 21464, 21342, {f: 2, c: 36776}, 36779, 36941, 26631,
+    24426, 33176, 34920, 40150, 24971, 21035, 30250, 24428, 25996, 28626,
+    28392, 23486, 25672, 20853, 20912, 26564, 19993, 31177, 39292, 28851,
+    30149, 24182, 29627, 33760, 25773, 25320, 38069, 27874, 21338, 21187,
+    25615, 38082, 31636, 20271, 24091, 33334, 33046, 33162, 28196, 27850,
+    39539, 25429, [12056, 21340], 21754, 34917, 22496, 19981, 24067, 27493,
+    31807, 37096, 24598, 25830, 29468, 35009, 26448, 25165, 36130, 30572,
+    36393, 37319, 24425, 33756, 34081, 39184, 21442, 34453, 27531, 24813,
+    24808, 28799, 33485, 33329, 20179, 27815, 34255, 25805, 31961, 27133,
+    26361, 33609, 21397, 31574, 20391, 20876, 27979, 23618, 36461, 25554,
+    21449, 33580, 33590, 26597, 30900, 25661, 23519, 23700, 24046, 35815,
+    25286, 26612, 35962, 25600, 25530, 34633, 39307, 35863, 32544, 38130,
+    20135, 38416, 39076, 26124, 29462, 22330, 23581, 24120, 38271, 20607,
+    32928, [12058, 21378], 25950, 30021, 21809, 20513, 36229, 25220, 38046,
+    26397, 22066, 28526, 24034, 21557, 28818, 36710, 25199, 25764, 25507,
+    24443, 28552, 37108, [12162, 33251], [12192, 36784], 23576, 26216, 24561,
+    27785, 38472, 36225, 34924, 25745, 31216, 22478, 27225, 25104, 21576,
+    20056, 31243, 24809, 28548, 35802, 25215, 36894, 39563, 31204, 21507,
+    30196, 25345, 21273, 27744, 36831, 24347, 39536, 32827, 40831, 20360,
+    23610, [12186, 36196], 32709, 26021, 28861, 20805, 20914, [12173, 34411],
+    23815, 23456, 25277, 37228, 30068, 36364, 31264, 24833, 31609, 20167,
+    32504, 30597, 19985, 33261, 21021, 20986, 27249, 21416, 36487, 38148,
+    38607, 28353, 38500, 26970, 30784, 20648, 30679, 25616, 35302, 22788,
+    25571, 24029, 31359, 26941, 20256, 33337, 21912, 20018, 30126, 31383,
+    24162, 24202, 38383, 21019, 21561, 28810, 25462, 38180, 22402, 26149,
+    26943, 37255, 21767, 28147, 32431, 34850, 25139, 32496, 30133, 33576,
+    30913, 38604, 36766, 24904, 29943, 35789, 27492, 21050, 36176, 27425,
+    32874, 33905, 22257, 21254, 20174, 19995, 20945, 31895, 37259, 31751,
+    20419, 36479, 31713, 31388, 25703, 23828, 20652, 33030, 30209, 31929,
+    28140, 32736, 26449, 23384, [12072, 23544], 30923, 25774, 25619, 25514,
+    25387, 38169, 25645, 36798, 31572, 30249, 25171, [12068, 22823], 21574,
+    [12109, 27513], 20643, 25140, 24102, 27526, 20195, 36151, 34955, 24453,
+    36910, 24608, 32829, 25285, 20025, 21333, 37112, 25528, 32966, 26086,
+    27694, 20294, 24814, 28129, 35806, 24377, 34507, 24403, 25377, 20826,
+    33633, 26723, [12049, 20992], 25443, 36424, 20498, 23707, 31095, 23548,
+    21040, 31291, 24764, 36947, 30423, 24503, 24471, 30340, 36460, 28783,
+    30331, 31561, 30634, 20979, 37011, 22564, 20302, 28404, 36842, 25932,
+    31515, 29380, 28068, 32735, 23265, 25269, 24213, 22320, 33922, 31532,
+    24093, 24351, 36882, 32532, 39072, 25474, 28359, 30872, 28857, 20856,
+    38747, 22443, 30005, 20291, 30008, 24215, 24806, 22880, 28096, 27583,
+    30857, 21500, 38613, 20939, 20993, 25481, 21514, 38035, 35843, 36300,
+    29241, 30879, 34678, 36845, 35853, 21472, 19969, 30447, 21486, 38025,
+    39030, [12237, 40718], 38189, 23450, 35746, 20002, 19996, 20908, 33891,
+    25026, 21160, 26635, 20375, 24683, 20923, 27934, 20828, 25238,
+    [12099, 26007], 38497, [12182, 35910], 36887, 30168, 37117, 30563, 27602,
+    29322, 29420, 35835, 22581, 30585, 36172, 26460, 38208, 32922, 24230,
+    28193, 22930, 31471, 30701, 38203, 27573, 26029, 32526, 22534, 20817,
+    38431, 23545, 22697, 21544, 36466, 25958, 39039, 22244, 38045, 30462,
+    36929, 25479, 21702, 22810, 22842, 22427, 36530, 26421, 36346, 33333,
+    21057, 24816, 22549, 34558, 23784, 40517, 20420, 39069, 35769, 23077,
+    24694, 21380, 25212, 36943, 37122, 39295, 24681, [12157, 32780],
+    [12041, 20799], [12159, 32819], 23572, 39285, 27953, [12038, 20108], 36144,
+    21457, 32602, 31567, 20240, 20047, 38400, 27861, 29648, 34281, 24070,
+    30058, 32763, 27146, 30718, 38034, 32321, 20961, 28902, 21453, 36820,
+    33539, 36137, 29359, 39277, 27867, 22346, 33459, [12101, 26041], 32938,
+    25151, 38450, 22952, 20223, 35775, 32442, 25918, 33778, [12206, 38750],
+    21857, 39134, 32933, 21290, 35837, 21536, 32954, 24223, 27832, 36153,
+    33452, 37210, 21545, 27675, 20998, 32439, 22367, 28954, 27774, 31881,
+    22859, 20221, 24575, 24868, 31914, 20016, 23553, 26539, 34562, 23792,
+    38155, 39118, 30127, 28925, 36898, 20911, 32541, 35773, 22857, 20964,
+    20315, 21542, 22827, 25975, 32932, 23413, 25206, 25282, 36752, 24133,
+    27679, 31526, 20239, 20440, 26381, 28014, 28074, 31119, 34993, 24343,
+    29995, 25242, 36741, 20463, 37340, 26023, 33071, 33105, 24220, 33104,
+    36212, 21103, 35206, 36171, 22797, 20613, 20184, [12201, 38428],
+    [12119, 29238], 33145, 36127, 23500, 35747, 38468, 22919, 32538, 21648,
+    22134, 22030, 35813, 25913, 27010, 38041, 30422, 28297, [12082, 24178],
+    [12130, 29976], 26438, 26577, 31487, 32925, 36214, 24863, 31174, 25954,
+    36195, 20872, 21018, 38050, 32568, 32923, 32434, 23703, 28207, 26464,
+    31705, 30347, [12220, 39640], 33167, 32660, 31957, 25630, 38224, 31295,
+    21578, 21733, 27468, 25601, [12093, 25096], 40509, 33011, 30105, 21106,
+    [12208, 38761], 33883, 26684, 34532, 38401, 38548, 38124, 20010, 21508,
+    32473, 26681, 36319, 32789, 26356, 24218, 32697, 22466, 32831, 26775,
+    [12079, 24037], 25915, 21151, 24685, 40858, 20379, 36524, 20844, 23467,
+    [12088, 24339], 24041, 27742, 25329, 36129, 20849, 38057, 21246, 27807,
+    33503, 29399, 22434, 26500, 36141, 22815, 36764, 33735, 21653, 31629,
+    20272, 27837, 23396, 22993, [12238, 40723], 21476, 34506, [12219, 39592],
+    [12181, 35895], 32929, 25925, 39038, 22266, 38599, 21038, [12128, 29916],
+    21072, 23521, 25346, 35074, 20054, 25296, 24618, 26874, 20851, 23448,
+    20896, 35266, 31649, 39302, 32592, 24815, 28748, 36143, 20809,
+    [12084, 24191], 36891, 29808, 35268, 22317, 30789, 24402, 40863, 38394,
+    36712, [12225, 39740], 35809, 30328, 26690, 26588, 36330, 36149, 21053,
+    36746, 28378, 26829, 38149, 37101, 22269, 26524, 35065, 36807, 21704,
+    39608, 23401, 28023, 27686, 20133, 23475, 39559, 37219, 25000, 37039,
+    38889, 21547, 28085, 23506, 20989, 21898, 32597, 32752, 25788, 25421,
+    26097, 25022, 24717, 28938, 27735, 27721, 22831, 26477, 33322, 22741,
+    22158, 35946, 27627, 37085, 22909, 32791, 21495, 28009, 21621, 21917,
+    33655, 33743, 26680, [12146, 31166], 21644, 20309, 21512, 30418, 35977,
+    38402, 27827, 28088, 36203, 35088, 40548, 36154, 22079, [12234, 40657],
+    30165, 24456, 29408, 24680, 21756, 20136, 27178, 34913, 24658, 36720,
+    21700, 28888, 34425, 40511, 27946, 23439, 24344, 32418, 21897, 20399,
+    29492, 21564, 21402, 20505, 21518, 21628, 20046, 24573, 29786, 22774,
+    33899, 32993, 34676, 29392, 31946, 28246, 24359, 34382, 21804, 25252,
+    20114, 27818, 25143, 33457, 21719, 21326, 29502, 28369, 30011, 21010,
+    21270, 35805, 27088, 24458, 24576, 28142, 22351, 27426, 29615, 26707,
+    36824, 32531, 25442, 24739, 21796, 30186, 35938, 28949, 28067, 23462,
+    24187, 33618, 24908, 40644, 30970, 34647, 31783, 30343, 20976, 24822,
+    29004, 26179, 24140, 24653, 35854, 28784, 25381, 36745, 24509, 24674,
+    34516, 22238, 27585, 24724, 24935, 21321, 24800, 26214, 36159, 31229,
+    20250, 28905, 27719, 35763, 35826, 32472, 33636, 26127, 23130, 39746,
+    27985, 28151, 35905, 27963, 20249, [12117, 28779], 33719, 25110, 24785,
+    38669, 36135, 31096, 20987, 22334, 22522, 26426, 30072, 31293, 31215,
+    31637, 32908, 39269, 36857, 28608, 35749, 40481, 23020, 32489, 32521,
+    21513, 26497, 26840, 36753, 31821, 38598, 21450, 24613, 30142, 27762,
+    21363, 23241, 32423, 25380, [12047, 20960], 33034, [12080, 24049], 34015,
+    25216, 20864, 23395, 20238, 31085, 21058, 24760, 27982, 23492, 23490,
+    35745, 35760, 26082, 24524, 38469, 22931, 32487, 32426, 22025, 26551,
+    22841, 20339, 23478, 21152, 33626, 39050, 36158, 30002, 38078, 20551,
+    31292, 20215, 26550, 39550, 23233, 27516, 30417, 22362, 23574, 31546,
+    38388, 29006, 20860, 32937, 33392, 22904, 32516, 33575, 26816, 26604,
+    30897, 30839, 25315, 25441, 31616, 20461, 21098, 20943, 33616, 27099,
+    37492, 36341, 36145, 35265, 38190, 31661, 20214, 20581, 33328, 21073,
+    39279, 28176, 28293, 28071, 24314, 20725, 23004, 23558, 27974, 27743,
+    30086, 33931, 26728, 22870, 35762, 21280, 37233, 38477, 34121, 26898,
+    30977, 28966, 33014, 20132, 37066, 27975, 39556, 23047, 22204, 25605,
+    38128, 30699, 20389, 33050, 29409, [12179, 35282], 39290, 32564, 32478,
+    21119, 25945, 37237, 36735, 36739, 21483, 31382, 25581, 25509, 30342,
+    31224, 34903, 38454, 25130, 21163, 33410, 26708, 26480, 25463, 30571,
+    31469, 27905, 32467, 35299, 22992, 25106, 34249, 33445, 30028, 20511,
+    20171, 30117, 35819, 23626, [12081, 24062], 31563, [12100, 26020],
+    [12198, 37329], 20170, 27941, 35167, 32039, 38182, 20165, 35880, 36827,
+    38771, 26187, 31105, 36817, 28908, 28024, 23613, 21170, 33606, 20834,
+    33550, 30555, 26230, 40120, 20140, 24778, 31934, 31923, 32463, 20117,
+    35686, 26223, 39048, 38745, 22659, 25964, 38236, 24452, 30153, 38742,
+    31455, 31454, 20928, 28847, 31384, 25578, 31350, 32416, 29590,
+    [12210, 38893], 20037, 28792, 20061, 37202, 21417, 25937, 26087,
+    [12165, 33276], 33285, 21646, 23601, 30106, 38816, 25304, 29401, 30141,
+    23621, 39545, 33738, 23616, 21632, 30697, 20030, 27822, 32858, 25298,
+    25454, 24040, 20855, 36317, 36382, 38191, 20465, 21477, 24807, 28844,
+    21095, 25424, 40515, 23071, 20518, 30519, 21367, 32482, 25733, 25899,
+    25225, 25496, 20500, 29237, 35273, 20915, 35776, 32477, 22343, 33740,
+    38055, 20891, 21531, 23803, 20426, 31459, 27994, 37089, 39567, 21888,
+    21654, 21345, 21679, 24320, 25577, 26999, 20975, 24936, 21002, 22570,
+    21208, 22350, 30733, 30475, 24247, 24951, 31968, 25179, 25239, 20130,
+    28821, 32771, 25335, 28900, 38752, 22391, 33499, 26607, 26869, 30933,
+    39063, 31185, 22771, 21683, 21487, 28212, 20811, 21051, 23458, 35838,
+    32943, 21827, 22438, 24691, 22353, 21549, 31354, 24656, 23380, 25511,
+    25248, [12061, 21475], 25187, 23495, 26543, 21741, 31391, 33510, 37239,
+    24211, 35044, 22840, 22446, 25358, 36328, 33007, 22359, 31607, 20393,
+    24555, 23485, 27454, 21281, 31568, 29378, 26694, 30719, 30518, 26103,
+    20917, 20111, 30420, 23743, 31397, 33909, 22862, 39745, 20608, 39304,
+    24871, 28291, 22372, 26118, 25414, 22256, 25324, 25193, 24275, 38420,
+    22403, 25289, 21895, 34593, 33098, 36771, 21862, 33713, 26469, 36182,
+    34013, 23146, 26639, 25318, 31726, 38417, 20848, 28572, 35888, 25597,
+    35272, 25042, 32518, 28866, 28389, 29701, 27028, 29436, 24266, 37070,
+    26391, 28010, 25438, 21171, 29282, [12156, 32769], 20332, 23013, 37226,
+    28889, 28061, 21202, 20048, 38647, 38253, 34174, 30922, 32047, 20769,
+    22418, 25794, 32907, 31867, 27882, 26865, 26974, 20919, 21400, 26792,
+    29313, 40654, 31729, 29432, 31163, 28435, 29702, 26446, [12197, 37324],
+    40100, 31036, 33673, 33620, 21519, 26647, 20029, 21385, 21169, 30782,
+    21382, 21033, 20616, 20363, 20432, 30178, [12148, 31435], 31890, 27813,
+    [12202, 38582], [12050, 21147], 29827, 21737, 20457, 32852, 33714, 36830,
+    38256, 24265, 24604, 28063, 24088, 25947, 33080, 38142, 24651, 28860,
+    32451, 31918, 20937, 26753, 31921, 33391, 20004, 36742, 37327, 26238,
+    20142, 35845, 25769, 32842, 20698, 30103, 29134, 23525, 36797, 28518,
+    20102, 25730, 38243, 24278, 26009, 21015, 35010, 28872, 21155, 29454,
+    29747, 26519, 30967, 38678, 20020, 37051, 40158, 28107, 20955, 36161,
+    21533, 25294, 29618, 33777, 38646, 40836, 38083, 20278, 32666, 20940,
+    28789, 38517, 23725, 39046, 21478, 20196, 28316, 29705, 27060, 30827,
+    39311, 30041, 21016, 30244, 27969, 26611, 20845, 40857, 32843, 21657,
+    31548, 31423, 38534, 22404, 25314, 38471, 27004, 23044, 25602, 31699,
+    28431, 38475, 33446, 21346, 39045, 24208, 28809, 25523, 21348, 34383,
+    40065, 40595, 30860, 38706, 36335, 36162, [12229, 40575], 28510, 31108,
+    24405, 38470, 25134, 39540, 21525, 38109, 20387, 26053, 23653, 23649,
+    32533, 34385, 27695, 24459, 29575, 28388, 32511, 23782, 25371, 23402,
+    28390, 21365, 20081, 25504, 30053, 25249, 36718, 20262, 20177, 27814,
+    32438, 35770, 33821, 34746, 32599, 36923, 38179, 31657, 39585, 35064,
+    33853, 27931, 39558, 32476, 22920, [12231, 40635], 29595, 30721, 34434,
+    39532, 39554, 22043, 21527, 22475, 20080, 40614, 21334, 36808, 33033,
+    30610, 39314, 34542, 28385, 34067, 26364, 24930, 28459, 35881, 33426,
+    33579, 30450, 27667, 24537, 33725, 29483, 33541, 38170, [12113, 27611],
+    [12141, 30683], 38086, 21359, 33538, 20882, 24125, 35980, 36152, 20040,
+    29611, 26522, 26757, 37238, 38665, 29028, 27809, 30473, 23186, 38209,
+    27599, 32654, 26151, 23504, 22969, 23194, 38376, 38391, 20204, 33804,
+    33945, 27308, 30431, 38192, 29467, 26790, 23391, 30511, 37274, 38753,
+    31964, 36855, 35868, 24357, [12150, 31859], 31192, 35269, 27852, 34588,
+    23494, 24130, 26825, 30496, 32501, 20885, 20813, 21193, 23081, 32517,
+    [12207, 38754], 33495, 25551, 30596, 34256, 31186, 28218, 24217, 22937,
+    34065, 28781, 27665, 25279, [12139, 30399], 25935, 24751, 38397, 26126,
+    34719, 40483, 38125, 21517, 21629, 35884, {f: 2, c: 25720}, 34321, 27169,
+    33180, 30952, 25705, 39764, 25273, 26411, 33707, 22696, 40664, 27819,
+    28448, 23518, 38476, 35851, 29279, 26576, 25287, 29281, 20137, 22982,
+    27597, 22675, 26286, 24149, 21215, 24917, [12106, 26408], [12140, 30446],
+    30566, 29287, 31302, 25343, 21738, 21584, 38048, 37027, 23068, 32435,
+    27670, 20035, 22902, 32784, 22856, 21335, 30007, 38590, 22218, 25376,
+    33041, 24700, 38393, 28118, 21602, 39297, 20869, 23273, 33021, 22958,
+    38675, 20522, 27877, 23612, 25311, 20320, 21311, 33147, 36870, 28346,
+    34091, 25288, 24180, 30910, 25781, 25467, 24565, 23064, 37247, 40479,
+    23615, 25423, 32834, 23421, 21870, 38218, 38221, 28037, 24744, 26592,
+    29406, 20957, 23425, 25319, 27870, [12124, 29275], 25197, 38062, 32445,
+    33043, 27987, 20892, 24324, 22900, 21162, 24594, [12069, 22899], 26262,
+    34384, 30111, 25386, 25062, 31983, 35834, 21734, 27431, 40485, 27572,
+    34261, 21589, 20598, 27812, 21866, 36276, 29228, 24085, 24597, 29750,
+    25293, 25490, 29260, 24472, 28227, 27966, 25856, 28504, 30424, 30928,
+    30460, 30036, 21028, 21467, 20051, 24222, 26049, 32810, 32982, 25243,
+    21638, 21032, 28846, 34957, 36305, 27873, 21624, 32986, 22521, 35060,
+    36180, 38506, 37197, 20329, 27803, 21943, 30406, 30768, 25256, 28921,
+    28558, 24429, 34028, 26842, 30844, 31735, 33192, 26379, 40527, 25447,
+    30896, 22383, 30738, 38713, 25209, 25259, 21128, 29749, 27607, 21860,
+    33086, 30130, [12138, 30382], 21305, 30174, 20731, 23617, 35692, 31687,
+    20559, [12122, 29255], 39575, 39128, 28418, 29922, 31080, 25735, 30629,
+    25340, 39057, 36139, 21697, 32856, 20050, 22378, 33529, 33805, 24179,
+    20973, 29942, 35780, 23631, 22369, 27900, 39047, 23110, 30772, 39748,
+    36843, 31893, 21078, 25169, 38138, 20166, 33670, 33889, 33769, 33970,
+    22484, 26420, 22275, 26222, 28006, 35889, 26333, 28689, 26399, 27450,
+    26646, 25114, 22971, 19971, 20932, 28422, 26578, 27791, 20854, 26827,
+    22855, 27495, 30054, 23822, 33040, 40784, 26071, 31048, 31041, 39569,
+    36215, 23682, 20062, 20225, 21551, 22865, 30732, 22120, [12115, 27668],
+    36804, 24323, 27773, 27875, 35755, 25488, 24688, 27965, 29301, 25190,
+    38030, 38085, 21315, 36801, 31614, 20191, 35878, 20094, 40660, 38065,
+    38067, 21069, 28508, 36963, 27973, 35892, 22545, 23884, [12107, 27424],
+    27465, 26538, 21595, 33108, 32652, 22681, 34103, 24378, 25250, 27207,
+    38201, 25970, 24708, 26725, 30631, 20052, 20392, 24039, 38808, 25772,
+    32728, 23789, 20431, 31373, 20999, 33540, 19988, 24623, 31363, 38054,
+    20405, 20146, 31206, 29748, 21220, 33465, 25810, 31165, 23517, 27777,
+    38738, 36731, 27682, 20542, 21375, 28165, 25806, 26228, 27696, 24773,
+    39031, 35831, 24198, 29756, 31351, 31179, 19992, 37041, 29699, 27714,
+    22234, 37195, 27845, 36235, 21306, 34502, 26354, 36527, 23624, 39537,
+    28192, 21462, 23094, 40843, 36259, 21435, 22280, 39079, 26435, 37275,
+    27849, 20840, 30154, 25331, [12125, 29356], 21048, 21149, 32570, 28820,
+    30264, 21364, 40522, 27063, 30830, 38592, 35033, 32676, 28982, 29123,
+    20873, 26579, 29924, 22756, 25880, 22199, 35753, 39286, 25200, 32469,
+    24825, 28909, 22764, 20161, [12040, 20154], 24525, 38887, 20219, 35748,
+    20995, 22922, 32427, 25172, 20173, [12103, 26085], 25102, 33592, 33993,
+    33635, 34701, 29076, 28342, 23481, 32466, 20887, 25545, 26580,
+    [12161, 32905], 33593, 34837, 20754, 23418, 22914, 36785, 20083, 27741,
+    [12042, 20837], 35109, 36719, 38446, 34122, 29790, 38160, 38384, 28070,
+    33509, 24369, 25746, 27922, 33832, 33134, 40131, 22622, 36187, 19977,
+    21441, 20254, 25955, 26705, 21971, 20007, 25620, 39578, 25195, 23234,
+    29791, [12170, 33394], 28073, 26862, 20711, 33678, 30722, 26432, 21049,
+    27801, 32433, 20667, 21861, 29022, 31579, 26194, 29642, 33515, 26441,
+    [12077, 23665], 21024, 29053, 34923, 38378, 38485, 25797, 36193, 33203,
+    21892, 27733, 25159, 32558, 22674, 20260, 21830, 36175, 26188, 19978,
+    23578, 35059, 26786, 25422, 31245, 28903, 33421, 21242, 38902, 23569,
+    21736, 37045, 32461, 22882, 36170, 34503, [12166, 33292], 33293, 36198,
+    25668, 23556, 24913, 28041, 31038, 35774, 30775, 30003, 21627, 20280,
+    [12189, 36523], 28145, 23072, 32453, 31070, 27784, 23457, 23158, 29978,
+    32958, 24910, 28183, 22768, [12131, 29983], 29989, 29298, 21319, 32499,
+    30465, 30427, 21097, 32988, 22307, 24072, 22833, 29422, 26045, 28287,
+    35799, [12075, 23608], 34417, [12055, 21313], [12143, 30707], 25342, 26102,
+    20160, [12215, 39135], 34432, 23454, 35782, 21490, [12142, 30690], 20351,
+    23630, 39542, 22987, 24335, [12144, 31034], [12064, 22763], 19990, 26623,
+    20107, 25325, 35475, 36893, 21183, 26159, 21980, 22124, 36866, 20181,
+    20365, 37322, 39280, [12114, 27663], 24066, 24643, 23460, 35270, 35797,
+    25910, [12095, 25163], [12216, 39318], 23432, 23551, 25480, 21806, 21463,
+    30246, 20861, 34092, 26530, 26803, 27530, 25234, 36755, 21460, 33298,
+    28113, 30095, 20070, 36174, 23408, 29087, 34223, 26257, 26329, 32626,
+    34560, [12233, 40653], [12239, 40736], 23646, 26415, 36848, 26641, 26463,
+    25101, 31446, 22661, 24246, 25968, 28465, 24661, 21047, 32781, 25684,
+    34928, 29993, 24069, 26643, 25332, 38684, 21452, 29245, 35841,
+    [12116, 27700], 30561, 31246, 21550, 30636, 39034, 33308, 35828, 30805,
+    26388, 28865, 26031, 25749, 22070, 24605, 31169, 21496, 19997, 27515,
+    32902, 23546, 21987, 22235, 20282, 20284, 39282, 24051, 26494, 32824,
+    24578, 39042, 36865, 23435, 35772, 35829, 25628, 33368, 25822, 22013,
+    33487, 37221, 20439, 32032, 36895, 31903, 20723, 22609, 28335, 23487,
+    35785, 32899, 37240, 33948, 31639, 34429, 38539, 38543, 32485, 39635,
+    30862, 23681, 31319, 36930, 38567, 31071, 23385, 25439, 31499, 34001,
+    26797, 21766, 32553, 29712, 32034, 38145, 25152, 22604, 20182, 23427,
+    22905, 22612, 29549, 25374, 36427, 36367, 32974, 33492, 25260, 21488,
+    27888, 37214, 22826, 24577, 27760, 22349, 25674, 36138, 30251, 28393,
+    22363, 27264, 30192, 28525, 35885, 35848, 22374, 27631, 34962, 30899,
+    25506, 21497, 28845, 27748, 22616, 25642, 22530, 26848, 33179, 21776,
+    31958, 20504, 36538, 28108, 36255, 28907, 25487, 28059, 28372, 32486,
+    33796, 26691, 36867, 28120, 38518, 35752, 22871, 29305, 34276, 33150,
+    30140, 35466, 26799, 21076, 36386, 38161, 25552, 39064, 36420, 21884,
+    20307, 26367, 22159, 24789, 28053, 21059, 23625, 22825, 28155, 22635,
+    [12133, 30000], 29980, 24684, 33300, 33094, 25361, 26465, 36834, 30522,
+    36339, 36148, 38081, 24086, 21381, 21548, 28867, 27712, 24311, 20572,
+    20141, 24237, 25402, 33351, 36890, 26704, 37230, 30643, 21516, 38108,
+    24420, 31461, 26742, 25413, 31570, 32479, 30171, 20599, 25237, 22836,
+    36879, 20984, 31171, 31361, 22270, 24466, 36884, 28034, 23648,
+    [12063, 22303], 21520, 20820, 28237, 22242, 25512, 39059, 33151, 34581,
+    35114, 36864, 21534, 23663, 33216, 25302, 25176, 33073, 40501, 38464,
+    39534, 39548, 26925, 22949, 25299, 21822, 25366, 21703, 34521, 27964,
+    23043, [12129, 29926], 34972, 27498, 22806, 35916, 24367, 28286, 29609,
+    39037, 20024, 28919, 23436, 30871, 25405, 26202, 30358, 24779, 23451,
+    23113, 19975, 33109, 27754, 29579, 20129, 26505, [12153, 32593], 24448,
+    26106, 26395, 24536, 22916, 23041, 24013, 24494, 21361, 38886, 36829,
+    26693, 22260, 21807, 24799, 20026, 28493, 32500, 33479, 33806, 22996,
+    20255, 20266, 23614, 32428, 26410, 34074, 21619, 30031, 32963, 21890,
+    39759, 20301, 28205, 35859, 23561, 24944, 21355, 30239, 28201, 34442,
+    [12098, 25991], 38395, 32441, 21563, 31283, 32010, 38382, 21985, 32705,
+    29934, 25373, 34583, 28065, 31389, 25105, 26017, 21351, 25569, 27779,
+    24043, 21596, 38056, 20044, 27745, 35820, 23627, [12102, 26080], 33436,
+    26791, 21566, 21556, [12111, 27595], 27494, 20116, 25410, 21320, 33310,
+    20237, 20398, 22366, 25098, 38654, 26212, 29289, 21247, 21153, 24735,
+    35823, 26132, 29081, 26512, 35199, 30802, 30717, 26224, 22075, 21560,
+    38177, 29306, 31232, 24687, 24076, 24713, 33181, [12067, 22805], 24796,
+    29060, 28911, 28330, 27728, 29312, 27268, 34989, 24109, 20064, 23219,
+    21916, 38115, 27927, 31995, 38553, 25103, 32454, 30606, 34430, 21283,
+    38686, 36758, 26247, 23777, 20384, 29421, 19979, 21414, 22799, 21523,
+    25472, 38184, 20808, 20185, 40092, 32420, 21688, 36132, 34900, 33335,
+    38386, 28046, 24358, 23244, 26174, 38505, 29616, 29486, 21439, 33146,
+    39301, 32673, 23466, 38519, 38480, 32447, 30456, 21410, 38262,
+    [12217, 39321], 31665, 35140, 28248, 20065, 32724, 31077, 35814, 24819,
+    21709, 20139, 39033, 24055, 27233, 20687, 21521, 35937, 33831, 30813,
+    38660, 21066, 21742, 22179, 38144, 28040, 23477, 28102, 26195,
+    [12073, 23567], 23389, 26657, 32918, 21880, 31505, 25928, 26964, 20123,
+    27463, 34638, 38795, 21327, 25375, 25658, 37034, 26012, 32961, 35856,
+    20889, 26800, 21368, 34809, 25032, 27844, 27899, 35874, 23633, 34218,
+    33455, 38156, 27427, [12191, 36763], 26032, 24571, [12092, 24515], 20449,
+    34885, 26143, 33125, 29481, 24826, 20852, 21009, 22411, 24418, 37026,
+    [12175, 34892], 37266, 24184, 26447, 24615, 22995, 20804, 20982, 33016,
+    21256, 27769, 38596, 29066, 20241, 20462, 32670, 26429, 21957, 38152,
+    31168, 34966, 32483, 22687, 25100, 38656, 34394, 22040, 39035, 24464,
+    35768, 33988, 37207, 21465, 26093, 24207, 30044, 24676, 32110, 23167,
+    32490, 32493, 36713, 21927, 23459, 24748, 26059, [12126, 29572], 36873,
+    30307, 30505, 32474, 38772, 34203, 23398, [12147, 31348], 38634,
+    [12174, 34880], 21195, 29071, 24490, 26092, 35810, 23547, 39535, 24033,
+    27529, 27739, 35757, 35759, 36874, 36805, 21387, 25276, 40486, 40493,
+    21568, 20011, 33469, [12123, 29273], 34460, 23830, 34905, 28079, 38597,
+    21713, 20122, 35766, 28937, 21693, 38409, 28895, 28153, 30416, 20005,
+    30740, 34578, 23721, 24310, [12180, 35328], 39068, 38414, 28814, 27839,
+    22852, 25513, 30524, 34893, 28436, 33395, 22576, 29141, 21388, 30746,
+    38593, 21761, 24422, 28976, 23476, 35866, 39564, 27523, 22830, 40495,
+    31207, 26472, 25196, 20335, 30113, [12154, 32650], 27915, 38451, 27687,
+    20208, 30162, 20859, 26679, 28478, 36992, 33136, 22934, 29814, 25671,
+    23591, 36965, 31377, 35875, 23002, 21676, 33280, 33647, 35201, 32768,
+    26928, 22094, 32822, 29239, 37326, 20918, 20063, 39029, 25494, 19994,
+    21494, 26355, 33099, 22812, 28082, [12032, 19968], 22777, 21307, 25558,
+    38129, 20381, 20234, [12176, 34915], 39056, 22839, 36951, 31227, 20202,
+    33008, 30097, 27778, 23452, 23016, 24413, 26885, 34433, 20506, 24050,
+    [12036, 20057], 30691, 20197, 33402, 25233, 26131, [12194, 37009], 23673,
+    20159, 24441, 33222, 36920, 32900, 30123, 20134, 35028, 24847, 27589,
+    24518, 20041, 30410, 28322, 35811, 35758, 35850, 35793, 24322, 32764,
+    32716, 32462, 33589, 33643, 22240, 27575, [12211, 38899], 38452, 23035,
+    21535, 38134, 28139, 23493, 39278, 23609, 24341, 38544, 21360, 33521,
+    27185, 23156, 40560, 24212, 32552, 33721, {f: 2, c: 33828}, 33639, 34631,
+    36814, 36194, 30408, 24433, 39062, 30828, 26144, 21727, 25317, 20323,
+    33219, 30152, 24248, 38605, 36362, 34553, 21647, 27891, 28044, 27704,
+    24703, 21191, [12132, 29992], 24189, 20248, 24736, 24551, 23588, 30001,
+    37038, 38080, 29369, 27833, 28216, [12195, 37193], 26377, 21451, 21491,
+    20305, 37321, 35825, [12060, 21448], 24188, 36802, 28132, 20110, 30402,
+    27014, 34398, 24858, 33286, 20313, 20446, 36926, 40060, 24841, 28189,
+    28180, 38533, 20104, 23089, [12204, 38632], 19982, 23679, 31161, 23431,
+    35821, [12155, 32701], [12127, 29577], 22495, 33419, 37057, 21505, 36935,
+    21947, 23786, 24481, 24840, 27442, 29425, 32946, 35465, 28020, 23507,
+    35029, 39044, 35947, 39533, 40499, 28170, 20900, 20803, 22435, 34945,
+    21407, 25588, 36757, 22253, 21592, 22278, 29503, 28304, 32536, 36828,
+    33489, 24895, 24616, 38498, [12104, 26352], 32422, 36234, 36291, 38053,
+    23731, 31908, [12105, 26376], 24742, 38405, 32792, 20113, 37095, 21248,
+    38504, 20801, 36816, 34164, 37213, 26197, 38901, 23381, 21277, 30776,
+    26434, 26685, 21705, 28798, 23472, 36733, 20877, 22312, 21681, 25874,
+    26242, 36190, 36163, 33039, 33900, 36973, 31967, 20991, 34299, 26531,
+    26089, 28577, 34468, 36481, 22122, 36896, 30338, 28790, 29157, 36131,
+    25321, 21017, 27901, 36156, 24590, 22686, 24974, 26366, 36192, 25166,
+    21939, 28195, 26413, 36711, 38113, 38392, 30504, 26629, 27048, 21643,
+    20045, 28856, 35784, 25688, 25995, 23429, 31364, 20538, 23528, 30651,
+    27617, 35449, 31896, 27838, 30415, 26025, 36759, 23853, 23637, 34360,
+    26632, 21344, 25112, 31449, 28251, 32509, 27167, 31456, 24432, 28467,
+    24352, 25484, 28072, 26454, 19976, 24080, 36134, 20183, 32960, 30260,
+    38556, 25307, 26157, 25214, 27836, 36213, 29031, 32617, 20806, 32903,
+    21484, 36974, 25240, 21746, 34544, 36761, 32773, 38167, 34071, 36825,
+    27993, 29645, 26015, 30495, 29956, 30759, 33275, 36126, 38024, 20390,
+    26517, 30137, 35786, 38663, 25391, 38215, 38453, 33976, 25379, 30529,
+    24449, 29424, 20105, 24596, 25972, 25327, 27491, 25919, 24103, 30151,
+    37073, 35777, 33437, 26525, [12096, 25903], 21553, 34584, 30693, 32930,
+    33026, 27713, 20043, 32455, 32844, 30452, 26893, 27542, 25191, 20540,
+    20356, 22336, 25351, [12108, 27490], 36286, 21482, 26088, 32440, 24535,
+    25370, 25527, [12164, 33267], 33268, 32622, 24092, 23769, 21046, 26234,
+    31209, 31258, 36136, 28825, 30164, 28382, 27835, 31378, 20013, 30405,
+    24544, 38047, 34935, 32456, 31181, 32959, 37325, 20210, 20247,
+    [12168, 33311], 21608, 24030, 27954, 35788, 31909, 36724, 32920, 24090,
+    21650, 30385, 23449, 26172, 39588, 29664, 26666, 34523, 26417, 29482,
+    35832, 35803, 36880, [12149, 31481], 28891, 29038, 25284, 30633, 22065,
+    20027, 33879, 26609, 21161, 34496, 36142, 38136, 31569, 20303, 27880,
+    31069, 39547, 25235, [12118, 29226], 25341, 19987, 30742, 36716, 25776,
+    36186, 31686, 26729, 24196, 35013, 22918, 25758, 22766, 29366, 26894,
+    38181, 36861, 36184, 22368, 32512, 35846, 20934, 25417, 25305, 21331,
+    26700, 29730, 33537, 37196, 21828, 30528, 28796, 27978, 20857, 21672,
+    36164, 23039, 28363, 28100, 23388, 32043, 20180, 31869, 28371,
+    [12070, 23376], [12163, 33258], 28173, 23383, 39683, 26837, 36394, 23447,
+    32508, 24635, 32437, 37049, [12187, 36208], 22863, 25549, 31199,
+    [12188, 36275], 21330, 26063, 31062, 35781, 38459, 32452, 38075, 32386,
+    22068, 37257, 26368, 32618, 23562, 36981, 26152, 24038, 20304, 26590,
+    20570, 20316, 22352, 24231, 20109, 19980, 20800, 19984, 24319, 21317,
+    19989, 20120, 19998, [12224, 39730], 23404, 22121, [12033, 20008], 31162,
+    [12035, 20031], [12052, 21269], 20039, 22829, [12120, 29243], 21358, 27664,
+    22239, 32996, 39319, 27603, 30590, 40727, [12034, 20022], 20127, 40720,
+    20060, 20073, 20115, 33416, 23387, 21868, 22031, 20164, 21389, 21405,
+    21411, 21413, 21422, 38757, 36189, [12053, 21274], 21493, 21286, 21294,
+    21310, 36188, 21350, 21347, 20994, 21000, 21006, 21037, 21043,
+    {f: 2, c: 21055}, 21068, 21086, 21089, 21084, 33967, 21117, 21122, 21121,
+    21136, 21139, [12044, 20866], 32596, 20155, 20163, 20169, 20162, 20200,
+    20193, 20203, 20190, 20251, 20211, 20258, 20324, 20213, 20261, 20263,
+    20233, 20267, 20318, 20327, 25912, 20314, 20317, 20319, 20311, 20274,
+    20285, 20342, 20340, 20369, 20361, 20355, 20367, 20350, 20347, 20394,
+    20348, 20396, 20372, 20454, 20456, 20458, 20421, 20442, 20451, 20444,
+    20433, 20447, 20472, 20521, 20556, 20467, 20524, 20495, 20526, 20525,
+    20478, 20508, 20492, 20517, 20520, 20606, 20547, 20565, 20552, 20558,
+    20588, 20603, 20645, 20647, 20649, 20666, 20694, 20742, 20717, 20716,
+    20710, 20718, 20743, 20747, 20189, 27709, 20312, 20325, 20430,
+    [12245, 40864], 27718, 31860, 20846, 24061, 40649, 39320, 20865, 22804,
+    [12051, 21241], 21261, 35335, 21264, 20971, 22809, 20821, [12039, 20128],
+    20822, 20147, 34926, 34980, 20149, 33044, 35026, 31104, 23348, 34819,
+    32696, [12046, 20907], 20913, 20925, 20924, 20935, [12045, 20886], 20898,
+    20901, 35744, {f: 2, c: 35750}, 35754, {f: 2, c: 35764}, 35767,
+    {f: 2, c: 35778}, 35787, 35791, 35790, {f: 3, c: 35794}, 35798,
+    {f: 2, c: 35800}, 35804, {f: 2, c: 35807}, 35812, {f: 2, c: 35816}, 35822,
+    35824, 35827, 35830, 35833, 35836, {f: 2, c: 35839}, 35842, 35844, 35847,
+    35852, 35855, {f: 2, c: 35857}, {f: 3, c: 35860}, 35865, 35867, 35864,
+    35869, {f: 3, c: 35871}, 35877, 35879, {f: 2, c: 35882}, {f: 2, c: 35886},
+    {f: 2, c: 35890}, {f: 2, c: 35893}, [12057, 21353], 21370, 38429, 38434,
+    38433, 38449, 38442, 38461, 38460, 38466, 38473, 38484, 38495, 38503,
+    38508, 38514, 38516, 38536, 38541, 38551, 38576, 37015, 37019, 37021,
+    37017, 37036, 37025, 37044, 37043, 37046, 37050, 37048, 37040, 37071,
+    37061, 37054, 37072, 37060, 37063, 37075, 37094, 37090, 37084, 37079,
+    37083, 37099, 37103, 37118, 37124, 37154, 37150, 37155, 37169, 37167,
+    37177, 37187, 37190, 21005, 22850, 21154, {f: 2, c: 21164}, 21182, 21759,
+    21200, 21206, 21232, 21471, 29166, 30669, [12085, 24308], [12048, 20981],
+    20988, [12223, 39727], [12059, 21430], 24321, 30042, 24047, 22348, 22441,
+    22433, 22654, 22716, 22725, 22737, 22313, 22316, 22314, 22323, 22329,
+    {f: 2, c: 22318}, 22364, 22331, 22338, 22377, 22405, 22379, 22406, 22396,
+    22395, 22376, 22381, 22390, 22387, 22445, 22436, 22412, 22450, 22479,
+    22439, 22452, 22419, 22432, 22485, 22488, 22490, 22489, 22482, 22456,
+    22516, 22511, 22520, 22500, 22493, 22539, 22541, 22525, 22509, 22528,
+    22558, 22553, 22596, 22560, 22629, 22636, 22657, 22665, 22682, 22656,
+    39336, 40729, 25087, 33401, 33405, 33407, 33423, 33418, 33448, 33412,
+    33422, 33425, 33431, 33433, 33451, 33464, 33470, 33456, 33480, 33482,
+    33507, 33432, 33463, 33454, {f: 2, c: 33483}, 33473, 33449, 33460, 33441,
+    33450, 33439, 33476, 33486, 33444, 33505, 33545, 33527, 33508, 33551,
+    33543, 33500, 33524, 33490, 33496, 33548, 33531, 33491, 33553, 33562,
+    33542, {f: 2, c: 33556}, 33504, 33493, 33564, 33617, {f: 2, c: 33627},
+    33544, 33682, 33596, 33588, 33585, 33691, 33630, 33583, 33615, 33607,
+    33603, 33631, 33600, 33559, 33632, 33581, 33594, 33587, 33638, 33637,
+    33640, 33563, 33641, 33644, 33642, {f: 2, c: 33645}, 33712, 33656,
+    {f: 2, c: 33715}, 33696, 33706, 33683, 33692, 33669, 33660, 33718, 33705,
+    33661, 33720, 33659, 33688, 33694, 33704, 33722, 33724, 33729, 33793,
+    33765, 33752, 22535, 33816, 33803, 33757, 33789, 33750, 33820, 33848,
+    33809, 33798, 33748, 33759, 33807, 33795, {f: 2, c: 33784}, 33770, 33733,
+    33728, 33830, 33776, 33761, 33884, 33873, 33882, 33881, 33907,
+    {f: 2, c: 33927}, 33914, 33929, 33912, 33852, 33862, 33897, 33910, 33932,
+    33934, 33841, 33901, 33985, 33997, 34000, 34022, 33981, 34003, 33994,
+    33983, 33978, 34016, 33953, 33977, 33972, 33943, 34021, 34019, 34060,
+    29965, 34104, 34032, 34105, 34079, 34106, 34134, 34107, 34047, 34044,
+    34137, 34120, 34152, 34148, 34142, 34170, 30626, 34115, 34162, 34171,
+    34212, 34216, 34183, 34191, 34169, 34222, 34204, 34181, 34233, 34231,
+    34224, 34259, 34241, 34268, 34303, 34343, 34309, 34345, 34326, 34364,
+    [12086, 24318], 24328, 22844, 22849, 32823, 22869, 22874, 22872, 21263,
+    [12074, 23586], 23589, 23596, 23604, 25164, 25194, 25247, 25275, 25290,
+    25306, 25303, 25326, 25378, 25334, 25401, 25419, 25411, 25517, 25590,
+    25457, 25466, 25486, 25524, 25453, 25516, 25482, 25449, 25518, 25532,
+    25586, 25592, 25568, 25599, 25540, 25566, 25550, 25682, 25542, 25534,
+    25669, 25665, 25611, 25627, 25632, 25612, 25638, 25633, 25694, 25732,
+    25709, 25750, 25722, {f: 2, c: 25783}, 25753, 25786, 25792, 25808, 25815,
+    25828, 25826, 25865, 25893, 25902, [12087, 24331], 24530, 29977, 24337,
+    21343, 21489, 21501, 21481, 21480, 21499, 21522, 21526, 21510, 21579,
+    {f: 3, c: 21586}, 21590, 21571, 21537, 21591, 21593, 21539, 21554, 21634,
+    21652, 21623, 21617, 21604, {f: 2, c: 21658}, 21636, 21622, 21606, 21661,
+    21712, 21677, 21698, 21684, 21714, 21671, 21670, {f: 2, c: 21715}, 21618,
+    21667, 21717, 21691, 21695, 21708, {f: 2, c: 21721}, 21724,
+    {f: 2, c: 21673}, 21668, 21725, 21711, 21726, 21787, 21735, 21792, 21757,
+    21780, 21747, {f: 2, c: 21794}, 21775, 21777, 21799, 21802, 21863, 21903,
+    21941, 21833, 21869, 21825, 21845, 21823, 21840, 21820, 21815, 21846,
+    {f: 3, c: 21877}, 21811, 21808, 21852, 21899, 21970, 21891, 21937, 21945,
+    21896, 21889, 21919, 21886, 21974, 21905, 21883, 21983, {f: 2, c: 21949},
+    21908, 21913, 21994, 22007, 21961, 22047, 21969, {f: 2, c: 21995}, 21972,
+    21990, 21981, 21956, 21999, 21989, {f: 2, c: 22002}, {f: 2, c: 21964},
+    21992, 22005, 21988, 36756, 22046, 22024, 22028, 22017, 22052, 22051,
+    22014, 22016, 22055, 22061, 22104, 22073, 22103, 22060, 22093, 22114,
+    22105, 22108, 22092, 22100, 22150, 22116, 22129, 22123, {f: 2, c: 22139},
+    22149, 22163, 22191, 22228, [12062, 22231], 22237, 22241, 22261, 22251,
+    22265, 22271, 22276, 22282, 22281, 22300, 24079, 24089, 24084, 24081,
+    24113, {f: 2, c: 24123}, 24119, 24132, 24148, 24155, 24158, 24161, 23692,
+    23674, 23693, 23696, 23702, 23688, {f: 2, c: 23704}, 23697, 23706, 23708,
+    23733, 23714, 23741, 23724, 23723, 23729, 23715, 23745, 23735, 23748,
+    23762, 23780, 23755, 23781, {f: 2, c: 23810}, 23847, 23846, 23854, 23844,
+    23838, 23814, 23835, 23896, 23870, 23860, 23869, 23916, 23899, 23919,
+    23901, 23915, 23883, 23882, 23913, 23924, 23938, 23961, 23965, 35955,
+    23991, 24005, [12091, 24435], 24439, 24450, 24455, 24457, 24460, 24469,
+    24473, 24476, 24488, 24493, 24501, 24508, 34914, [12090, 24417], 29357,
+    29360, 29364, {f: 2, c: 29367}, 29379, 29377, 29390, 29389, 29394, 29416,
+    29423, 29417, 29426, 29428, 29431, 29441, 29427, 29443, {f: 2, c: 29434},
+    29463, 29459, 29473, 29450, 29470, 29469, 29461, 29474, 29497, 29477,
+    29484, 29496, 29489, 29520, 29517, 29527, 29536, 29548, 29551, 29566,
+    [12167, 33307], 22821, 39143, 22820, [12065, 22786], 39267,
+    {f: 6, c: 39271}, 39284, 39287, 39293, 39296, 39300, 39303, 39306, 39309,
+    {f: 2, c: 39312}, {f: 3, c: 39315}, 24192, 24209, 24203, 24214, 24229,
+    24224, 24249, 24245, 24254, 24243, 36179, 24274, 24273, 24283, 24296,
+    24298, 33210, 24516, 24521, 24534, 24527, 24579, 24558, 24580, 24545,
+    24548, 24574, {f: 2, c: 24581}, 24554, 24557, 24568, 24601, 24629, 24614,
+    24603, 24591, 24589, 24617, 24619, 24586, 24639, 24609, {f: 2, c: 24696},
+    24699, 24698, 24642, 24682, 24701, 24726, 24730, 24749, 24733, 24707,
+    24722, 24716, 24731, 24812, 24763, 24753, 24797, 24792, 24774, 24794,
+    24756, 24864, 24870, 24853, 24867, 24820, 24832, 24846, 24875, 24906,
+    24949, 25004, 24980, 24999, 25015, 25044, 25077, 24541, 38579, 38377,
+    38379, 38385, 38387, {f: 2, c: 38389}, 38396, 38398, {f: 2, c: 38403},
+    38406, 38408, {f: 4, c: 38410}, 38415, 38418, {f: 3, c: 38421},
+    {f: 2, c: 38425}, 20012, [12121, 29247], 25109, 27701, 27732, 27740, 27722,
+    27811, 27781, 27792, 27796, 27788, {f: 2, c: 27752}, 27764, 27766, 27782,
+    27817, 27856, 27860, 27821, {f: 2, c: 27895}, 27889, 27863, 27826, 27872,
+    27862, 27898, 27883, 27886, 27825, 27859, 27887, 27902, 27961, 27943,
+    27916, 27971, 27976, 27911, 27908, 27929, 27918, 27947, 27981, 27950,
+    27957, 27930, 27983, 27986, 27988, 27955, 28049, 28015, 28062, 28064,
+    27998, {f: 2, c: 28051}, 27996, 28000, 28028, 28003, 28186, 28103, 28101,
+    28126, 28174, 28095, 28128, 28177, 28134, 28125, 28121, 28182, 28075,
+    28172, 28078, 28203, 28270, 28238, 28267, 28338, 28255, 28294,
+    {f: 2, c: 28243}, 28210, 28197, 28228, 28383, 28337, 28312, 28384, 28461,
+    28386, 28325, 28327, 28349, 28347, 28343, 28375, 28340, 28367, 28303,
+    28354, 28319, 28514, {f: 2, c: 28486}, 28452, 28437, 28409, 28463, 28470,
+    28491, 28532, 28458, 28425, 28457, 28553, 28557, 28556, 28536, 28530,
+    28540, 28538, 28625, 28617, 28583, 28601, 28598, 28610, 28641, 28654,
+    28638, 28640, 28655, 28698, 28707, 28699, 28729, 28725, 28751, 28766,
+    [12071, 23424], 23428, 23445, 23443, 23461, 23480, 29999, 39582, 25652,
+    23524, 23534, 35120, 23536, 36423, 35591, 36790, 36819, 36821, 36837,
+    36846, 36836, 36841, 36838, 36851, 36840, 36869, 36868, 36875, 36902,
+    36881, 36877, 36886, 36897, {f: 2, c: 36917}, 36909, 36911, 36932,
+    {f: 2, c: 36945}, 36944, 36968, 36952, 36962, 36955, 26297, 36980, 36989,
+    36994, 37000, 36995, 37003, [12089, 24400], 24407, 24406, 24408, 23611,
+    21675, 23632, 23641, 23409, 23651, 23654, 32700, 24362, 24361, 24365,
+    33396, 24380, 39739, [12076, 23662], 22913, 22915, 22925, {f: 2, c: 22953},
+    22947, 22935, 22986, 22955, 22942, 22948, 22994, 22962, 22959, 22999,
+    22974, {f: 2, c: 23045}, 23005, 23048, 23011, 23000, 23033, 23052, 23049,
+    23090, 23092, 23057, 23075, 23059, 23104, 23143, 23114, 23125, 23100,
+    23138, 23157, 33004, 23210, 23195, 23159, 23162, 23230, 23275, 23218,
+    23250, 23252, 23224, 23264, 23267, 23281, 23254, 23270, 23256, 23260,
+    23305, 23319, 23318, 23346, 23351, 23360, 23573, 23580, 23386, 23397,
+    23411, 23377, 23379, 23394, 39541, {f: 2, c: 39543}, 39546, 39551, 39549,
+    {f: 2, c: 39552}, 39557, 39560, 39562, 39568, {f: 2, c: 39570}, 39574,
+    39576, {f: 3, c: 39579}, {f: 2, c: 39583}, {f: 2, c: 39586}, 39589, 39591,
+    32415, 32417, 32419, 32421, {f: 2, c: 32424}, 32429, 32432, 32446,
+    {f: 3, c: 32448}, 32457, {f: 2, c: 32459}, 32464, 32468, 32471, 32475,
+    {f: 2, c: 32480}, 32488, 32491, {f: 2, c: 32494}, {f: 2, c: 32497}, 32525,
+    32502, {f: 2, c: 32506}, 32510, {f: 3, c: 32513}, {f: 2, c: 32519},
+    {f: 2, c: 32523}, 32527, {f: 2, c: 32529}, 32535, 32537, 32540, 32539,
+    32543, {f: 7, c: 32545}, {f: 4, c: 32554}, {f: 5, c: 32559}, 32565,
+    [12083, 24186], 30079, [12078, 24027], 30014, 37013, 29582, 29585, 29614,
+    29602, 29599, 29647, 29634, 29649, 29623, 29619, 29632, 29641, 29640,
+    29669, 29657, 39036, 29706, 29673, 29671, 29662, 29626, 29682, 29711,
+    29738, 29787, 29734, 29733, 29736, 29744, 29742, 29740, 29723, 29722,
+    29761, 29788, 29783, 29781, 29785, 29815, 29805, 29822, 29852, 29838,
+    {f: 2, c: 29824}, 29831, 29835, 29854, {f: 2, c: 29864}, 29840, 29863,
+    29906, 29882, {f: 3, c: 38890}, 26444, 26451, 26462, 26440, 26473, 26533,
+    26503, 26474, 26483, 26520, 26535, 26485, 26536, 26526, 26541, 26507,
+    26487, 26492, 26608, 26633, 26584, 26634, 26601, 26544, 26636, 26585,
+    26549, 26586, 26547, 26589, 26624, 26563, 26552, 26594, 26638, 26561,
+    26621, {f: 2, c: 26674}, {f: 2, c: 26720}, 26702, 26722, 26692, 26724,
+    26755, 26653, 26709, 26726, 26689, 26727, 26688, 26686, 26698, 26697,
+    26665, 26805, 26767, 26740, 26743, 26771, 26731, 26818, 26990, 26876,
+    {f: 2, c: 26911}, 26873, 26916, 26864, 26891, 26881, 26967, 26851, 26896,
+    26993, 26937, 26976, 26946, 26973, 27012, 26987, 27008, 27032, 27000,
+    26932, 27084, {f: 2, c: 27015}, 27086, 27017, 26982, 26979, 27001, 27035,
+    27047, 27067, 27051, 27053, 27092, 27057, 27073, 27082, 27103, 27029,
+    27104, 27021, 27135, 27183, 27117, {f: 2, c: 27159}, 27237, 27122, 27204,
+    27198, 27296, 27216, 27227, 27189, 27278, 27257, 27197, 27176, 27224,
+    27260, 27281, 27280, 27305, 27287, 27307, 29495, 29522, {f: 2, c: 27521},
+    27527, 27524, {f: 2, c: 27538}, 27533, {f: 2, c: 27546}, 27553, 27562,
+    36715, 36717, {f: 3, c: 36721}, {f: 2, c: 36725}, 36728, 36727,
+    {f: 2, c: 36729}, 36732, 36734, {f: 2, c: 36737}, 36740, 36743, 36747,
+    {f: 3, c: 36749}, 36760, 36762, 36558, 25099, 25111, 25115, 25119, 25122,
+    25121, 25125, 25124, 25132, 33255, 29935, 29940, 29951, 29967, 29969,
+    29971, [12097, 25908], {f: 3, c: 26094}, 26122, 26137, 26482, 26115, 26133,
+    26112, 28805, 26359, 26141, 26164, 26161, 26166, 26165, 32774, 26207,
+    26196, 26177, 26191, 26198, 26209, 26199, 26231, 26244, 26252, 26279,
+    26269, 26302, {f: 2, c: 26331}, 26342, 26345, {f: 2, c: 36146}, 36150,
+    36155, 36157, 36160, {f: 2, c: 36165}, {f: 2, c: 36168}, 36167, 36173,
+    36181, 36185, 35271, {f: 3, c: 35274}, {f: 4, c: 35278}, 29294, 29343,
+    29277, 29286, 29295, {f: 2, c: 29310}, 29316, 29323, 29325, 29327, 29330,
+    25352, 25394, 25520, 25663, 25816, 32772, 27626, 27635, 27645, 27637,
+    27641, 27653, 27655, 27654, 27661, 27669, {f: 3, c: 27672}, 27681, 27689,
+    27684, 27690, 27698, 25909, 25941, 25963, 29261, 29266, 29270, 29232,
+    34402, 21014, 32927, 32924, 32915, 32956, 26378, 32957, 32945, 32939,
+    32941, 32948, 32951, {f: 4, c: 32999}, 32987, 32962, 32964, 32985, 32973,
+    32983, 26384, 32989, 33003, 33009, 33012, 33005, {f: 2, c: 33037}, 33010,
+    33020, 26389, 33042, 35930, 33078, 33054, 33068, 33048, 33074, 33096,
+    33100, 33107, 33140, {f: 2, c: 33113}, 33137, 33120, 33129,
+    {f: 2, c: 33148}, 33133, 33127, 22605, 23221, 33160, 33154, 33169, 28373,
+    33187, 33194, 33228, 26406, 33226, 33211, 33217, 33190, 27428, 27447,
+    27449, 27459, 27462, 27481, {f: 3, c: 39121}, 39125, {f: 2, c: 39129},
+    [12110, 27571], 24384, 27586, 35315, 26000, 40785, 26003, 26044, 26054,
+    26052, 26051, 26060, 26062, 26066, 26070, 28800, 28828, 28822, 28829,
+    28859, 28864, 28855, 28843, 28849, 28904, 28874, 28944, 28947, 28950,
+    28975, 28977, 29043, 29020, 29032, 28997, 29042, 29002, 29048, 29050,
+    29080, 29107, 29109, 29096, 29088, 29152, 29140, 29159, 29177, 29213,
+    29224, 28780, 28952, 29030, 29113, 25150, 25149, 25155, {f: 2, c: 25160},
+    31035, 31040, 31046, 31049, {f: 2, c: 31067}, 31059, 31066, 31074, 31063,
+    31072, 31087, 31079, 31098, 31109, 31114, 31130, 31143, 31155, 24529,
+    24528, 24636, 24669, 24666, 24679, 24641, 24665, 24675, 24747, 24838,
+    24845, 24925, 25001, 24989, 25035, 25041, 25094, 32896, [12160, 32895],
+    27795, 27894, 28156, 30710, 30712, 30720, 30729, {f: 2, c: 30743}, 30737,
+    26027, 30765, {f: 2, c: 30748}, {f: 3, c: 30777}, 30751, 30780, 30757,
+    30764, 30755, 30761, 30798, 30829, {f: 2, c: 30806}, 30758, 30800, 30791,
+    30796, 30826, 30875, 30867, 30874, 30855, 30876, 30881, 30883, 30898,
+    30905, 30885, 30932, 30937, 30921, 30956, 30962, 30981, 30964, 30995,
+    31012, 31006, 31028, 40859, [12235, 40697], {f: 2, c: 40699}, 30449, 30468,
+    30477, 30457, {f: 2, c: 30471}, 30490, 30498, 30489, 30509, 30502, 30517,
+    30520, {f: 2, c: 30544}, 30535, 30531, 30554, 30568, 30562, 30565, 30591,
+    30605, 30589, 30592, 30604, 30609, {f: 2, c: 30623}, 30640, 30645, 30653,
+    30010, 30016, 30030, 30027, 30024, 30043, 30066, 30073, 30083, 32600,
+    32609, 32607, 35400, 32616, 32628, 32625, 32633, 32641, 32638, 30413,
+    30437, 34866, {f: 3, c: 38021}, 38027, 38026, {f: 2, c: 38028},
+    {f: 2, c: 38031}, 38036, 38039, 38037, {f: 3, c: 38042}, {f: 2, c: 38051},
+    38059, 38058, 38061, 38060, {f: 2, c: 38063}, 38066, 38068,
+    {f: 5, c: 38070}, {f: 2, c: 38076}, 38079, 38084, {f: 7, c: 38088},
+    {f: 3, c: 38096}, {f: 3, c: 38101}, 38105, 38104, 38107, {f: 3, c: 38110},
+    38114, {f: 2, c: 38116}, {f: 2, c: 38119}, 38122, 38121, 38123,
+    {f: 2, c: 38126}, {f: 3, c: 38131}, 38135, 38137, {f: 2, c: 38140}, 38143,
+    38147, 38146, {f: 2, c: 38150}, {f: 2, c: 38153}, {f: 3, c: 38157},
+    {f: 5, c: 38162}, 38168, 38171, {f: 3, c: 38173}, 38178, {f: 2, c: 38186},
+    38185, 38188, {f: 2, c: 38193}, 38196, {f: 3, c: 38198}, 38204,
+    {f: 2, c: 38206}, 38210, 38197, {f: 3, c: 38212}, 38217, 38220,
+    {f: 2, c: 38222}, {f: 3, c: 38226}, {f: 4, c: 38230}, 38235,
+    {f: 2, c: 38238}, 38237, {f: 2, c: 38241}, {f: 9, c: 38244}, 38255,
+    {f: 3, c: 38257}, 38202, 30695, 30700, 38601, 31189, 31213, 31203, 31211,
+    31238, 23879, 31235, 31234, 31262, 31252, 31289, 31287, 31313, 40655,
+    39333, 31344, 30344, 30350, 30355, 30361, 30372, 29918, 29920, 29996,
+    40480, 40482, {f: 5, c: 40488}, 40498, 40497, 40502, 40504, 40503,
+    {f: 2, c: 40505}, 40510, {f: 2, c: 40513}, 40516, {f: 4, c: 40518},
+    {f: 2, c: 40523}, 40526, 40529, 40533, 40535, {f: 3, c: 40538}, 40542,
+    40547, {f: 7, c: 40550}, 40561, 40557, 40563, [12135, 30098], 30100, 30102,
+    30112, 30109, 30124, 30115, {f: 2, c: 30131}, 30136, 30148, 30129, 30128,
+    30147, 30146, 30166, 30157, 30179, 30184, 30182, 30180, 30187, 30183,
+    30211, 30193, 30204, 30207, 30224, 30208, 30213, 30220, 30231, 30218,
+    30245, 30232, 30229, 30233, 30235, 30268, 30242, 30240, 30272, 30253,
+    30256, 30271, 30261, 30275, 30270, 30259, 30285, 30302, 30292, 30300,
+    30294, 30315, 30319, 32714, 31462, {f: 2, c: 31352}, 31360, 31366, 31368,
+    31381, 31398, 31392, 31404, 31400, 31405, 31411, 34916, 34921, 34930,
+    34941, 34943, 34946, 34978, 35014, 34999, 35004, 35017, 35042, 35022,
+    35043, 35045, 35057, 35098, 35068, 35048, 35070, 35056, 35105, 35097,
+    35091, 35099, 35082, 35124, 35115, 35126, 35137, 35174, 35195,
+    [12134, 30091], 32997, 30386, 30388, 30684, [12158, 32786], 32788, 32790,
+    32796, 32800, 32802, {f: 3, c: 32805}, 32809, 32808, 32817, 32779, 32821,
+    32835, 32838, 32845, 32850, 32873, 32881, 35203, 39032, 39040, 39043,
+    39049, {f: 2, c: 39052}, 39055, 39060, {f: 2, c: 39066}, {f: 2, c: 39070},
+    {f: 2, c: 39073}, {f: 2, c: 39077}, [12172, 34381], 34388, 34412, 34414,
+    34431, 34426, 34428, 34427, 34472, 34445, 34443, 34476, 34461, 34471,
+    34467, 34474, 34451, 34473, 34486, 34500, 34485, 34510, 34480, 34490,
+    34481, 34479, 34505, 34511, 34484, 34537, {f: 2, c: 34545}, 34541, 34547,
+    34512, 34579, 34526, 34548, 34527, 34520, 34513, 34563, 34567, 34552,
+    34568, 34570, 34573, 34569, 34595, 34619, 34590, 34597, 34606, 34586,
+    34622, 34632, 34612, 34609, 34601, 34615, 34623, 34690, 34594,
+    {f: 2, c: 34685}, 34683, 34656, 34672, 34636, 34670, 34699, 34643, 34659,
+    34684, 34660, 34649, 34661, 34707, 34735, 34728, 34770, 34758, 34696,
+    34693, 34733, 34711, 34691, 34731, 34789, 34732, 34741, 34739, 34763,
+    34771, 34749, 34769, 34752, 34762, 34779, 34794, 34784, 34798, 34838,
+    34835, 34814, 34826, 34843, 34849, 34873, 34876, [12152, 32566], 32578,
+    {f: 2, c: 32580}, 33296, 31482, 31485, 31496, {f: 2, c: 31491}, 31509,
+    31498, 31531, 31503, 31559, 31544, 31530, 31513, 31534, 31537, 31520,
+    31525, 31524, 31539, 31550, 31518, 31576, 31578, 31557, 31605, 31564,
+    31581, 31584, 31598, 31611, 31586, 31602, 31601, 31632, {f: 2, c: 31654},
+    31672, 31660, 31645, 31656, 31621, 31658, 31644, 31650, 31659, 31668,
+    31697, 31681, 31692, 31709, 31706, {f: 2, c: 31717}, 31722, 31756, 31742,
+    31740, 31759, 31766, 31755, 31775, 31786, 31782, 31800, 31809, 31808,
+    33278, {f: 2, c: 33281}, 33284, 33260, 34884, {f: 3, c: 33313}, 33325,
+    33327, 33320, 33323, 33336, 33339, {f: 2, c: 33331}, 33342, 33348, 33353,
+    33355, 33359, 33370, 33375, 33384, 34942, 34949, 34952, 35032, 35039,
+    35166, 32669, 32671, 32679, {f: 2, c: 32687}, 32690, 31868, 25929, 31889,
+    31901, 31900, 31902, 31906, 31922, {f: 2, c: 31932}, 31937, 31943,
+    {f: 2, c: 31948}, 31944, 31941, 31959, 31976, [12169, 33390], 26280, 32703,
+    32718, 32725, 32741, 32737, 32742, 32745, 32750, 32755, [12151, 31992],
+    32119, 32166, 32174, 32327, 32411, 40632, 40628, 36211, 36228, 36244,
+    36241, 36273, 36199, 36205, 35911, 35913, 37194, 37200, {f: 2, c: 37198},
+    37220, 37218, 37217, 37232, 37225, 37231, {f: 2, c: 37245}, 37234, 37236,
+    37241, 37260, 37253, 37264, 37261, 37265, {f: 2, c: 37282}, 37290,
+    {f: 3, c: 37293}, 37301, 37300, 37306, [12183, 35925], 40574, 36280, 36331,
+    36357, 36441, 36457, 36277, 36287, 36284, 36282, 36292, {f: 2, c: 36310},
+    36314, 36318, {f: 2, c: 36302}, 36315, 36294, 36332, {f: 2, c: 36343},
+    36323, 36345, 36347, 36324, 36361, 36349, 36372, 36381, 36383, 36396,
+    36398, 36387, 36399, 36410, 36416, 36409, 36405, 36413, 36401, 36425,
+    {f: 2, c: 36417}, {f: 2, c: 36433}, 36426, 36464, 36470, 36476, 36463,
+    36468, 36485, 36495, 36500, 36496, 36508, 36510, [12184, 35960], 35970,
+    35978, 35973, 35992, 35988, 26011, 35286, 35294, 35290, 35292, 35301,
+    35307, 35311, 35390, 35622, 38739, 38633, 38643, 38639, 38662, 38657,
+    38664, 38671, 38670, 38698, 38701, 38704, 38718, 40832, 40835,
+    {f: 6, c: 40837}, 40844, 40702, 40715, 40717, [12203, 38585],
+    {f: 2, c: 38588}, 38606, 38610, 30655, 38624, 37518, 37550, 37576, 37694,
+    37738, 37834, 37775, 37950, 37995, 40063, 40066, {f: 4, c: 40069}, 31267,
+    40075, 40078, {f: 3, c: 40080}, {f: 2, c: 40084}, {f: 2, c: 40090},
+    {f: 6, c: 40094}, {f: 5, c: 40101}, 40107, {f: 2, c: 40109},
+    {f: 8, c: 40112}, {f: 4, c: 40122}, {f: 4, c: 40132}, {f: 7, c: 40138},
+    {f: 3, c: 40147}, {f: 3, c: 40151}, {f: 2, c: 40156}, 40159, 40162, 38780,
+    38789, {f: 2, c: 38801}, 38804, 38831, 38827, 38819, 38834, 38836, 39601,
+    39600, 39607, 40536, 39606, 39610, 39612, 39617, 39616, 39621, 39618,
+    {f: 2, c: 39627}, 39633, 39749, 39747, 39751, 39753, 39752, 39757, 39761,
+    39144, 39181, 39214, 39253, 39252, [12221, 39647], 39649, 39654, 39663,
+    39659, 39675, 39661, 39673, 39688, 39695, 39699, 39711, 39715,
+    {f: 2, c: 40637}, 32315, 40578, {f: 2, c: 40583}, 40587, 40594, 37846,
+    40605, 40607, {f: 3, c: 40667}, 40672, 40671, 40674, 40681, 40679, 40677,
+    40682, 40687, 40738, 40748, 40751, 40761, 40759, {f: 2, c: 40765}, 40772,
+    12295, {s: 13}, 30362, 34297, 31001, 24859, 39599, 35158, 22761, 32631,
+    25850, 25943, 38930, 36774, 32070, 24171, 32129, 37770, 35607, 39165,
+    23542, 22577, 39825, 36649, [12185, 35997], 37575, 29437, 20633, 24970,
+    32179, 31558, 30050, 25987, 24163, 38281, 37002, 32232, 36022, 35722,
+    36783, 36782, 27161, 40009, 30303, 28693, 28657, 36051, 25839, 39173,
+    25765, 37474, 37457, 39361, 35036, 36001, 21443, 34870, 27544, 24922,
+    24920, 29158, 33980, 33369, 20489, 28356, 21408, 20596, 28204, 23652,
+    35435, 25881, 25723, 34796, 39262, 35730, 32399, 37855, 29987, 38369,
+    39019, 22580, 22039, [12199, 38263], 20767, 33144, 24288, 26274, 37396,
+    [12190, 36554], 24505, 22645, 38515, 35183, 31281, 25074, 35488, 39425,
+    36978, 39347, [12242, 40786], 29118, 34909, 34802, 23541, 30087, 36490,
+    31820, 32162, 37276, 37604, 38619, 30990, 20786, 35320, 34389, 20659,
+    30241, 38358, 21109, 37656, 32020, 32189, 36781, 35422, 36060, 32880,
+    24478, 21474, 36517, 31428, 37679, 36948, 24118, 36024, 25812, 21934,
+    37170, 25763, 33213, 24986, 35477, 24392, 30070, 25803, 40680, 34153,
+    27284, 25623, 23798, 31153, 23566, 29128, 37159, 25973, 28364, 36958,
+    32224, 39003, 40670, 22666, 38651, 28593, 37347, 35519, 35548, 37336,
+    38914, 37664, 35330, 26481, 21205, 26847, 20941, [12222, 39717], 29346,
+    29544, 35712, 36077, 37709, 37723, 26039, 32222, 38538, 23565, 22136,
+    38931, 37389, 22890, 22702, 40285, 38989, 35355, 24801, 39187, 20818,
+    29246, 39180, 36019, 30332, 32624, 38309, 31020, 37353, 29033, 31684,
+    36009, 39151, 35370, 32033, [12214, 39131], 35513, 24290, 36027, 32027,
+    22707, 22894, 24996, 31966, 35920, 26963, 37586, [12213, 39080], 30219,
+    39342, 32299, 35575, 40179, 33178, 36667, 25771, 36628, 36070, 24489,
+    36000, 35331, 23142, 32283, 35442, 37411, 33995, 24185, 36245, 36123,
+    23713, 21083, 37628, 32177, 23831, 37804, 25841, 40255, 38307, 37499,
+    20491, 32102, 40852, 38799, 36002, 37390, 28317, 27083, 36092, 34865,
+    39015, 21102, 38364, 35264, 39208, 24931, 36011, 24291, 35215, 27512,
+    [12244, 40860], 38312, 36556, 35437, 27331, 36020, 21130, 36645, 37707,
+    22283, 36942, 39405, 38867, 28450, 34399, 38305, 40372, 36032, 36703,
+    40251, 32005, 22778, 35703, 28396, 22057, 33775, 30059, 21123, 35441,
+    25079, 22750, 27489, 29872, 36996, 32233, 35594, 25582, 36637, 36036,
+    31330, 26371, 29172, 21295, 35569, 35496, 32362, 33911, 28222, 29554,
+    36008, 31117, 25802, 27231, 31309, 39249, 35663, 40388, 32318, 32221,
+    26997, 36655, 32026, 25824, 24190, 34186, 21137, 28639, 35336, 35352,
+    38555, 32380, 32000, 22846, 33698, 38960, 36040, 37440, 20729, 39381,
+    27570, 30435, 22533, 31627, 38291, 33393, 32216, 32365, 27298, 40572,
+    25536, 25791, 31777, 20745, 34214, 27323, 37970, 36368, 36068,
+    [12178, 35211], 37749, 33382, 21133, 39198, 28472, 28666, 28567, 23559,
+    28479, 34083, 27123, 22892, 35611, 37292, 33184, 28550, 39509, 23308,
+    25898, 37496, 30703, 20709, 39171, 32371, 32094, 36686, 36611, 38542,
+    31680, 28500, 32080, 35489, 32202, 37670, 20677, 35641, 36914, 29180,
+    30433, 21185, 33686, 39912, 39514, 32147, 38968, 37857, 24465, 30169,
+    31478, 31998, 33290, 39378, 33289, 25818, 37624, 25084, 21127, 40273,
+    32121, 35258, 35363, 32118, 37406, 36557, 39423, 38283, 20977, 38982,
+    27579, 35506, 22718, 25031, 25715, 24235, 35122, 35463, 22602, 20744,
+    23532, 31014, 26336, 34407, 24011, 31418, 39243, 28528, 25844, 38346,
+    34847, 33240, 33802, 20358, 36084, 34253, 27396, 25876, 31811, 38348,
+    34349, 28734, 35733, 25900, 35261, 25078, 32412, 29211, 28651, 25736,
+    21214, 28551, 27138, 37939, 22744, 39006, 31852, 38626, 28757, 35023,
+    39881, 31150, 40599, 21426, 21237, 31019, 27511, 28701, 38584, 20486,
+    32879, 34030, 36899, 37934, 24976, 28451, 31806, 25986, 33225, 37832,
+    25088, 29001, 32244, 31975, 20841, 36635, 35538, 30274, 36988, 37904,
+    29557, 33256, 37168, 40023, 36035, 40801, 37428, 38728, 23994, 38936,
+    39230, 21129, [12243, 40845], 32894, 22184, 31840, 22751, 25871, 38580,
+    27155, 23105, 25695, 31757, 34310, 30439, 39025, 24300, 29200, 25796,
+    28407, 34396, 39791, 36034, 37682, 38520, 39522, 37569, 23650, 32311,
+    24942, 28670, 32209, 24018, 25891, 23423, 28772, 20098, 25476, 36650,
+    20523, 20374, 28138, 32184, 35542, 34367, 32645, 37007, 38012, 31854,
+    39486, 39409, 32097, 23229, 29802, 30908, 34718, [12218, 39340], 39393,
+    21966, 36023, [12230, 40613], 36067, 36993, 30622, 39237, 34875, 28415,
+    35646, 37672, 37466, 36031, 37762, [12200, 38272], 24758, 20497, 37683,
+    22818, 35598, 24396, 35219, 32191, 32236, 24287, 28357, 25003, 38313,
+    40180, 37528, 35628, 35584, 30045, 37385, 32013, 38627, 25747, 33126,
+    24817, 39719, 39186, 25836, 33193, 25862, 37312, [12227, 40165], 32886,
+    22169, 38007, 37811, 27320, 29552, 23527, 25840, 28632, 37397, 32016,
+    33215, 28611, 36786, 30247, 35582, 27472, 40407, 27590, 22036, 28442,
+    30436, 40848, 36064, 22132, 40300, 39449, 39108, 38971, 36007, 34315,
+    24977, 35413, 28497, 38935, 25778, 37610, 20693, 27192, 35676, 33229,
+    [12241, 40778], 39438, 35912, 21843, 27683, 35350, 29309, 37370, 37467,
+    36983, 31805, 35609, 37666, 37463, 28154, 35700, 22649, 27085, 21958,
+    22715, 34196, 25654, 37740, 27211, 21932, 20689, 32761, 31429, 31434,
+    27453, 35242, 23522, 36629, 27691, 20670, 38915, 35531, 24950, 29898,
+    31406, 36264, 21312, 36544, 39493, 40818, 39028, 27402, 21240, 40306,
+    30906, 35731, 39250, 25854, 32350, 29105, 38860, 35469, 32009, 27054,
+    32104, 36575, 37613, 38287, 28516, 28753, 34217, 39955, 36093, 20632,
+    21930, 39479, 25475, 28544, 27578, 32023, 31721, 26348, 38275, 38493,
+    36109, 32341, 20663, 36062, 29138, 32057, 36050, 25448, 25885, 25086,
+    35373, 32051, 23529, 23352, 33102, 28402, 32882, 32361, 21213, 32854,
+    24107, 29509, 28629, 35433, 26178, 34645, 23526, 35672, 39387, 21218,
+    36969, 37323, 39166, 35222, 35430, 22781, 29560, 27166, 36664, 26360,
+    36118, 23660, 34899, 27193, 31466, 25976, 24101, 38617, 35504, 38918,
+    35500, 30889, 29197, 32114, 39164, 39686, 32883, 24939, 38924, 35359,
+    35494, 25851, 34311, 35380, 32901, 38614, 38568, 32143, 27506, 23403,
+    25613, 32302, 29795, 37782, 29562, 25787, 33274, 24907, 25892, 36010,
+    30321, 28760, 22727, 35674, 35527, 22022, 28271, 29145, 28644, 32295,
+    35342, 39472, 35588, 37563, 38988, 39636, 26781, 36028, 37941, 24307,
+    32893, 28916, 37509, 32113, 38957, 22294, 22615, 22296, 38973, 40213,
+    39345, 39389, 27234, 31402, 35178, 24398, 28771, 38929, 33836, 32178,
+    [12209, 38859], 36949, 22285, 29234, 28656, 32173, 33894, 20553, 20702,
+    32239, 35586, 34907, 32862, 32011, 31337, 21839, 25790, 34680, 28198,
+    31401, 21978, 37794, 28879, 35491, 28961, 34154, 22626, 38695, 21209,
+    35492, 37675, 29351, 35186, 32722, 37521, 25138, 32048, 34662, 36676,
+    23805, 20448, 29433, 22151, 37697, 39854, 32406, 36066, 37532, 38289,
+    39023, 38570, 29694, 29563, 32291, 39201, 25010, 32171, 38002, 37129,
+    35443, 38911, 38917, 34157, 22210, 37559, 26313, 22063, 21332, 25406,
+    33029, 35559, 23531, 28681, 35613, 37573, 37313, 33288, 37561, 32137,
+    38920, 35377, 32210, 32396, 36562, 25080, 36984, 30316, 32098, 23416,
+    21211, 35426, 23563, 39348, 35347, 35338, 36956, 22739, 40201, 40232,
+    21854, 20126, 35357, 38329, 40573, 22196, 38996, 38331, 33399, 21421,
+    30831, 35578, 39511, 40230, 26954, 25562, 30221, 38525, 30306, 39178,
+    27171, 22575, 35617, 34277, 29242, [12212, 38913], 26989, 33865, 37291,
+    37541, 38948, 36986, 20736, 34811, 34269, 20740, 25014, 32681, 35427,
+    35696, 35516, 35695, 32377, 34093, 38512, 37504, 39154, 38577, 27387,
+    23344, 40441, 25033, 32403, 29801, 34722, 29151, 29074, 34821, 36111,
+    31310, 21938, 25793, 20653, 30320, 36404, 20778, 24962, 37109, 37438,
+    29494, 35480, 36671, 39192, [12226, 39770], 28417, 33287, 23996, 35486,
+    39729, 29508, 35709, 38928, 39341, 40219, 28149, 36677, 22290, 21729,
+    22291, 32227, 36960, 39000, 32004, 36493, 38000, 38322, 38642, 37142,
+    38549, 36939, 34292, 37270, 26248, 38620, 36617, 25890, 26283, 36106,
+    36124, 33247, 38015, 26839, 31432, 36012, 25799, 21063, 28580, 36042,
+    36104, 36555, 37720, 38296, 35408, 40779, 20661, 27656, 30430, 26028,
+    36670, 23940, 26855, 25136, 32187, 24373, 28466, 24115, 36076, 33081,
+    36249, 34756, 36685, 37754, 36889, 35998, 37341, 20597, 35386, 37806,
+    38499, 24128, 30309, 37165, 35657, 32340, 32887, 22519, 34937, 32025,
+    25711, 25842, 24159, 36074, 28399, 37912, 32066, 31278, 33131, 34886,
+    35589, 36600, 30394, 26205, 39519, 35576, 35461, 29165, 30682, 22225,
+    36015, 37956, 31689, 39376, 23560, 30938, 36681, 36090, 27137, 33674,
+    35037, 22941, 22767, 29376, 37648, 36101, 22684, 32180, 35524, 28310,
+    28609, 36039, 28460, 32156, 32317, 32305, 37138, 35419, 32068, 38013,
+    21959, 21401, 21428, 38760, 36107, 21293, 21297, 36094, 21060, 21132,
+    21108, 20660, 20480, 20630, 20757, 20738, 20756, 20796, 20791, 20712,
+    20674, 20795, 20752, 20794, 20681, 31988, 40652, 22213, 40172, 35131,
+    33248, 35329, 35344, 35340, 35349, 35635, 35406, 35365, 35393, 35382,
+    35398, 35412, 35416, 35410, 35462, 35460, 35455, 35440, 35452, 35445,
+    35436, 35438, 35533, 35554, 35425, 35482, 35493, {f: 2, c: 35473}, 35535,
+    35537, 35529, 35547, 35543, 35522, 35510, 35574, 35563, 35604, 35585,
+    35556, 35565, 35580, 35571, 35558, 35566, 35550, 35624, 35740, 35606,
+    35610, 35600, 35627, 35629, 35670, 35673, 35662, 35742, 35691, 35734,
+    38488, 37178, 37140, 37172, 37087, 37174, 37126, 37192, 33467, 21233,
+    24048, 22538, 22745, 22754, 22752, 22746, 22497, 22607, 22550, 22610,
+    22557, 22628, 34188, 34131, 34294, 33703, 33799, 34031, 33511, 34338,
+    34086, 22603, 29026, 34136, 34045, 34126, 34184, 34234, 29334, 28366,
+    34113, 34254, 34130, 33984, 33874, 33892, 33940, 33845, 34207, 34133,
+    40367, 33939, 32264, 34118, 34146, 34078, 39488, 34362, 37795, 34167,
+    34334, 34298, 34308, 34282, 34330, 22889, 23607, 25451, 25718, 25759,
+    25681, 25692, 25779, 25860, 25878, 25847, 25852, 25883, 22064, 22072,
+    22216, 22182, 21764, 21692, 22144, 22109, 22112, 22069, 22006, 22118,
+    22130, 22156, 22117, 22044, 22062, 21993, 22038, 22208, 22029, 22195,
+    22209, 22127, 36705, 22198, 22165, 22279, 24131, 24172, 24152, 24151,
+    23943, 23796, 23888, 23852, 23975, 23968, 23959, 23821, 23992, 23937,
+    24020, 24480, 29559, 29505, 29546, 29499, 29547, 29568, 29564, 39136,
+    39219, 39145, 39228, {f: 2, c: 39146}, 39149, 39156, 39177, 39185, 39195,
+    39223, 39231, 39235, {f: 3, c: 39240}, 39244, 39266, 24289, 36065, 25082,
+    25006, 24938, 24894, 24757, 24884, 25036, 24927, 25064, 24827, 24887,
+    24818, 24947, 24860, 24978, 38274, 38278, 38344, 38286, 38292, 38284,
+    38373, 38317, 38315, 39726, 38316, 38334, 38326, 39721, 38335, 38333,
+    38332, 38339, 38347, 38356, 38352, 38357, 38366, 28739, 28505, 28711,
+    28696, 28668, 28039, 28025, 28254, 28590, 28687, 28408, 28527, 28150,
+    28543, 28678, 28576, 28683, 28775, 28740, 28677, 28535, 28704, 28703,
+    28722, 28712, 28765, 39467, 36999, 36885, 37008, 23656, 24371, 23285,
+    23255, 23296, 23149, 23304, 23372, 23207, 23291, 23307, 23329, 23338,
+    23321, 39380, 39391, 39385, 39478, 39515, 39377, 39384, 39501, 39498,
+    39394, 39530, 39439, 39437, 39429, 39490, 39469, 39446, 39489, 39470,
+    39480, {f: 2, c: 39491}, 39503, 39525, 39524, 31993, 32006, 32002,
+    {f: 2, c: 32007}, 32394, 32028, 32021, 32019, 32058, 32050, 32049, 32272,
+    32060, 32064, 32063, 32093, 32078, 32115, 32134, 32131, 32136, 32190,
+    32186, 32203, 32212, 32196, 32158, 32172, 32185, 32163, 32176, 32199,
+    32217, 32215, 32249, 32242, 32354, 32230, 32246, 32241, 32267, 32225,
+    32265, 32285, 32287, 32286, 32301, 32266, 32273, 32381, 32313, 32309,
+    32306, 32326, 32325, 32392, 32346, 32338, 32366, 32382, 32368, 32367,
+    32408, 29859, 29771, 29903, 38922, 29885, 29759, 29833, 29862, 29908,
+    29914, 38873, 38878, 38876, 27050, 27370, 26776, 26838, 27141, 26783,
+    27355, 27379, 27368, 27359, 27273, 26895, 27208, 26984, 27071, 27194,
+    27292, 27410, 27422, 27357, 27111, 27407, 27414, 27372, 27354, 27384,
+    27315, 27367, 27299, 27347, 27358, 27556, 27550, 27566, 27563, 27567,
+    36564, 36571, 36594, 36603, 36708, 36601, 36604, 36587, 36580, 36706,
+    36602, 36606, 36618, 36615, 36613, 36626, 36646, {f: 2, c: 36638}, 36636,
+    36659, 36678, 36692, 25108, 25127, 29964, 26311, 26308, 26249, 26326,
+    36033, 36016, 36026, 36029, 36100, 36018, 36037, 36112, 36049, 36058,
+    36053, 36075, 36071, 36091, 35224, 35244, 35233, 35263, 35238, 35247,
+    35250, 35255, 27647, 27660, 27692, 29272, 26407, 33110, 33242, 33051,
+    33214, 33121, 33231, 27487, {f: 2, c: 39086}, 39094, 39100, 39110, 39112,
+    36674, 40783, 26005, 29036, 29010, 29079, 29121, 29148, 29182, 31152,
+    31118, 31146, 25055, 24932, 25059, 25095, 28585, 30959, 30893, 30824,
+    30904, 31018, 31025, 30820, 30973, 30951, 30947, 40853, 30616, 30558,
+    30652, 32646, 32648, {f: 3, c: 37330}, 37337, 37335, 37333, 37367, 37351,
+    37348, 37702, 37365, 37369, 37384, 37414, 37445, 37393, 37392, 37377,
+    37415, 37380, 37413, 37376, 37434, 37478, 37431, 37427, 37461, 37437,
+    37432, 37470, {f: 2, c: 37484}, 37439, 37984, 37424, 37449, 37448, 37453,
+    37422, 37433, 37944, 37548, 37536, 37498, 37546, 37614, 37583, 37891,
+    37603, 37946, 37553, 37542, 37799, 37526, 37580, 37545, 37877, 37523,
+    37503, 37801, 37530, 37658, 37547, 37507, 37899, 37544, 37539, 37906,
+    37688, 37617, 37847, 37605, 37616, 37615, 37608, 37564, 37597, 37622,
+    {f: 2, c: 37926}, 37571, 37599, 37606, 37650, 37638, 37737, 37659, 37696,
+    37633, 37653, 37678, 37699, {f: 2, c: 37639}, 37663, 37657, 37733, 37703,
+    37750, 37716, 37732, 37802, 37744, 37764, 37860, 37848, 37928, 37767,
+    37836, 37784, 37816, 37823, 37798, 37808, 37813, 37964, 37858,
+    {f: 2, c: 37852}, 37837, 37854, 37827, 37831, 37841, 37908, 37917, 37879,
+    37989, 37907, 37997, 37920, 38009, 37881, 37913, 37962, 37938, 37951,
+    37972, 37987, 37758, 31329, 40169, 40182, 40199, 40198, 40227, 40327,
+    40469, 40221, 40223, 40421, 40239, 40409, 40240, 40258, 40478, 40275,
+    40477, 40288, 40274, 40435, 40284, 40289, 40339, 40298, 40303, 40329,
+    40344, 40346, 40384, 40357, 40361, 40386, 40380, 40474, 40403, 40410,
+    40431, 40422, 40434, 40440, 40460, 40442, 40475, 30308, 30296, 30311,
+    30210, {f: 2, c: 30278}, 30281, 30238, 30267, {f: 2, c: 30317}, 30313,
+    30322, 31431, 31414, 35168, 35123, 35165, 35143, 35128, 35172, 30392,
+    32814, 32812, 32889, 32885, 38919, {f: 2, c: 38926}, 38945, 38940, 28481,
+    38950, 38967, 38990, 38995, 39027, 39010, 39001, 39013, 39020, 39024,
+    34787, 34822, 34566, 34851, 34806, 34554, 34799, 34692, 34832, 34760,
+    34833, 34747, 34766, 32588, 31716, 31591, 31849, 31731, 31744, 31691,
+    31836, 31774, 31787, 31779, 31850, 31839, 33380, 33387, 35018, 32677,
+    31986, 31990, 31965, 32310, 40617, 36274, 37317, 37315, 40570, 36489,
+    36428, 36498, 36474, 36437, 36506, 36491, 36499, 36497, 36513, 36451,
+    36522, 36518, 35316, 35318, 38746, 38722, 38717, 38724, 40788, 40799,
+    40793, 40800, 40796, 40806, 40812, 40810, 40823, [12236, 40701], 40703,
+    40713, 35726, 38014, 37864, 39799, 39796, 39809, 39811, 39822, 40056,
+    31308, 39826, 40031, 39824, 39853, 39834, 39850, 39838, 40045, 39851,
+    39837, 40024, 39873, 40058, 39985, 39993, 39971, 39991, 39872, 39882,
+    39879, 39933, 39894, {f: 2, c: 39914}, 39905, 39908, 39911, 39901, 39906,
+    39920, 39899, 39924, 39892, 40029, 39944, 39952, 39949, 39954, 39945,
+    39935, 39968, 39986, 39981, 39976, 39973, 39977, 39987, 39998, 40008,
+    39995, 39989, 40005, 40022, 40020, 40018, 40039, 38851, 38845, 38857,
+    40379, 39631, 39638, 39637, 39768, 39758, 39255, 39260, 39714, 40695,
+    40690, 35180, 38342, 37686, 24390, 34068, 32404, 40803, 22137, 40725,
+    22081, 39662, 35079, 31296, 39091, 38308, 39693, 36852, 24409, 31339,
+    39138, 20642, 34193, 20760, 25458, 21067, 30543, 32397, 26310, 30637,
+    [12228, 40565], 22217, 40692, 28635, 25054, 30663, 28720, 40629, 34890,
+    38370, 38854, 31844, 32308, 38822, 40623, 22220, 39089, 27311, 32590,
+    31984, 20418, 32363, 40569, 22190, 39706, 33903, 31142, 31858, 39634,
+    38587, 32251, 35069, 30787, {f: 10, c: 8560}, {f: 2, c: 714}, 729, 8211,
+    8213, 8229, 8245, 8453, 8457, {f: 4, c: 8598}, 8725, 8735, 8739, 8786,
+    {f: 2, c: 8806}, 8895, {f: 36, c: 9552}, {f: 15, c: 9601}, {f: 3, c: 9619},
+    {f: 2, c: 9660}, {f: 4, c: 9698}, 9737, 8853, 12306, {f: 2, c: 12317},
+    {f: 9, c: 12321}, 12963, {f: 2, c: 13198}, {f: 3, c: 13212}, 13217, 13252,
+    13262, {f: 2, c: 13265}, 13269, 65072, 65506, 65508, 8481, 12849, 8208,
+    12540, {f: 2, c: 12443}, {f: 2, c: 12541}, 12294, {f: 2, c: 12445},
+    {f: 10, c: 65097}, {f: 4, c: 65108}, {f: 14, c: 65113}, {f: 4, c: 65128},
+    12350, {f: 12, c: 12272}, 19970, {f: 3, c: 19972}, 19983, 19986, 19991,
+    {f: 3, c: 19999}, 20003, 20006, 20009, {f: 2, c: 20014}, 20017, 20019,
+    20021, 20023, 20028, {f: 3, c: 20032}, 20036, 20038, 20042, 20049, 20053,
+    20055, {f: 2, c: 20058}, {f: 4, c: 20066}, {f: 2, c: 20071},
+    {f: 6, c: 20074}, 20082, {f: 10, c: 20084}, {f: 3, c: 20095},
+    {f: 2, c: 20099}, [12037, 20101], 20103, 20106, 20112, {f: 2, c: 20118},
+    20121, {f: 2, c: 20124}, 20131, 20138, {f: 3, c: 20143}, 20148,
+    {f: 4, c: 20150}, {f: 3, c: 20156}, 20168, 20172, {f: 2, c: 20175}, 20178,
+    {f: 3, c: 20186}, 20192, 20194, {f: 2, c: 20198}, 20201, {f: 3, c: 20205},
+    20209, 20212, {f: 3, c: 20216}, 20220, 20222, 20224, {f: 7, c: 20226},
+    {f: 2, c: 20235}, {f: 5, c: 20242}, {f: 2, c: 20252}, 20257, 20259,
+    {f: 2, c: 20264}, {f: 3, c: 20268}, 20273, 20275, 20277, 20279, 20281,
+    20283, {f: 5, c: 20286}, {f: 2, c: 20292}, {f: 6, c: 20295}, 20306, 20308,
+    20310, {f: 2, c: 20321}, 20326, 20328, {f: 2, c: 20330}, {f: 2, c: 20333},
+    {f: 2, c: 20337}, 20341, {f: 4, c: 20343}, 20349, {f: 3, c: 20352}, 20357,
+    20359, 20362, 20364, 20366, 20368, {f: 2, c: 20370}, 20373,
+    {f: 3, c: 20376}, 20380, {f: 2, c: 20382}, {f: 2, c: 20385}, 20388, 20395,
+    20397, {f: 5, c: 20400}, {f: 9, c: 20406}, {f: 2, c: 20416},
+    {f: 4, c: 20422}, {f: 3, c: 20427}, {f: 5, c: 20434}, 20441, 20443, 20450,
+    {f: 2, c: 20452}, 20455, {f: 2, c: 20459}, 20464, 20466, {f: 4, c: 20468},
+    20473, {f: 3, c: 20475}, 20479, {f: 5, c: 20481}, {f: 2, c: 20487}, 20490,
+    20494, 20496, 20499, {f: 3, c: 20501}, 20507, {f: 2, c: 20509}, 20512,
+    {f: 3, c: 20514}, 20519, {f: 11, c: 20527}, 20539, 20541, {f: 4, c: 20543},
+    {f: 3, c: 20548}, {f: 2, c: 20554}, 20557, {f: 5, c: 20560},
+    {f: 4, c: 20566}, 20571, {f: 8, c: 20573}, {f: 6, c: 20582},
+    {f: 7, c: 20589}, {f: 3, c: 20600}, {f: 2, c: 20604}, {f: 4, c: 20609},
+    {f: 2, c: 20614}, {f: 4, c: 20617}, {f: 8, c: 20622}, 20631,
+    {f: 8, c: 20634}, 20644, 20646, {f: 2, c: 20650}, {f: 4, c: 20654}, 20662,
+    {f: 2, c: 20664}, {f: 2, c: 20668}, {f: 3, c: 20671}, {f: 2, c: 20675},
+    {f: 3, c: 20678}, {f: 5, c: 20682}, 20688, {f: 3, c: 20690},
+    {f: 3, c: 20695}, {f: 3, c: 20699}, {f: 6, c: 20703}, {f: 3, c: 20713},
+    {f: 4, c: 20719}, 20724, {f: 3, c: 20726}, 20730, {f: 4, c: 20732}, 20737,
+    20739, 20741, 20746, {f: 4, c: 20748}, 20753, 20755, {f: 2, c: 20758},
+    {f: 6, c: 20761}, 20768, {f: 8, c: 20770}, {f: 7, c: 20779},
+    {f: 4, c: 20787}, {f: 2, c: 20792}, {f: 2, c: 20797}, 20802, 20807, 20810,
+    20812, {f: 3, c: 20814}, 20819, {f: 3, c: 20823}, 20827, {f: 5, c: 20829},
+    {f: 2, c: 20835}, {f: 2, c: 20838}, 20842, 20847, 20850, 20858,
+    {f: 2, c: 20862}, {f: 2, c: 20867}, {f: 2, c: 20870}, {f: 2, c: 20874},
+    {f: 4, c: 20878}, {f: 2, c: 20883}, 20888, 20890, {f: 3, c: 20893}, 20897,
+    20899, {f: 5, c: 20902}, {f: 2, c: 20909}, 20916, {f: 3, c: 20920},
+    {f: 2, c: 20926}, {f: 3, c: 20929}, 20933, 20936, 20938, 20942, 20944,
+    {f: 9, c: 20946}, 20956, {f: 2, c: 20958}, {f: 2, c: 20962},
+    {f: 6, c: 20965}, 20972, 20974, 20978, 20980, 20983, 20990,
+    {f: 2, c: 20996}, 21001, {f: 2, c: 21003}, {f: 2, c: 21007},
+    {f: 3, c: 21011}, 21020, {f: 2, c: 21022}, {f: 3, c: 21025},
+    {f: 3, c: 21029}, 21034, 21036, 21039, {f: 2, c: 21041}, {f: 2, c: 21044},
+    21052, 21054, {f: 2, c: 21061}, {f: 2, c: 21064}, {f: 2, c: 21070},
+    {f: 2, c: 21074}, 21077, {f: 4, c: 21079}, 21085, {f: 2, c: 21087},
+    {f: 3, c: 21090}, 21094, 21096, {f: 3, c: 21099}, {f: 2, c: 21104}, 21107,
+    {f: 7, c: 21110}, 21118, 21120, {f: 3, c: 21124}, 21131, {f: 2, c: 21134},
+    21138, {f: 7, c: 21140}, 21148, {f: 4, c: 21156}, {f: 3, c: 21166},
+    {f: 10, c: 21172}, 21184, 21186, {f: 3, c: 21188}, 21192, 21194,
+    {f: 4, c: 21196}, 21201, {f: 2, c: 21203}, 21207, 21210, 21212,
+    {f: 2, c: 21216}, 21219, {f: 11, c: 21221}, {f: 3, c: 21234},
+    {f: 2, c: 21238}, {f: 3, c: 21243}, {f: 4, c: 21249}, 21255,
+    {f: 4, c: 21257}, 21262, {f: 4, c: 21265}, 21272, {f: 2, c: 21275},
+    {f: 2, c: 21278}, 21282, {f: 2, c: 21284}, {f: 3, c: 21287},
+    {f: 2, c: 21291}, 21296, {f: 6, c: 21298}, [12054, 21304],
+    {f: 2, c: 21308}, 21314, 21316, 21318, {f: 3, c: 21323}, 21328,
+    {f: 2, c: 21336}, 21339, 21341, 21349, 21352, 21354, {f: 2, c: 21356},
+    21362, 21366, 21369, {f: 4, c: 21371}, {f: 2, c: 21376}, 21379,
+    {f: 2, c: 21383}, 21386, {f: 7, c: 21390}, {f: 2, c: 21398},
+    {f: 2, c: 21403}, 21406, 21409, 21412, 21415, {f: 3, c: 21418},
+    {f: 3, c: 21423}, 21427, 21429, {f: 4, c: 21431}, {f: 3, c: 21436}, 21440,
+    {f: 4, c: 21444}, {f: 3, c: 21454}, {f: 2, c: 21458}, 21461, 21466,
+    {f: 3, c: 21468}, 21473, 21479, 21492, 21498, {f: 3, c: 21502}, 21506,
+    21509, 21511, 21515, 21524, {f: 3, c: 21528}, 21532, 21538,
+    {f: 2, c: 21540}, 21546, 21552, 21555, {f: 2, c: 21558}, 21562, 21565,
+    21567, {f: 2, c: 21569}, {f: 2, c: 21572}, 21575, 21577, {f: 4, c: 21580},
+    21585, 21594, {f: 5, c: 21597}, 21603, 21605, 21607, {f: 8, c: 21609},
+    21620, {f: 2, c: 21625}, {f: 2, c: 21630}, 21633, 21635, 21637,
+    {f: 4, c: 21639}, 21645, 21649, 21651, {f: 2, c: 21655}, 21660,
+    {f: 5, c: 21662}, 21669, 21678, 21680, 21682, {f: 3, c: 21685},
+    {f: 2, c: 21689}, 21694, 21699, 21701, {f: 2, c: 21706}, 21718, 21720,
+    21723, 21728, {f: 3, c: 21730}, {f: 2, c: 21739}, {f: 3, c: 21743},
+    {f: 6, c: 21748}, 21755, 21758, 21760, {f: 2, c: 21762}, 21765, 21768,
+    {f: 5, c: 21770}, {f: 2, c: 21778}, {f: 6, c: 21781}, {f: 4, c: 21788},
+    21793, {f: 2, c: 21797}, {f: 2, c: 21800}, 21803, 21805, 21810,
+    {f: 3, c: 21812}, {f: 4, c: 21816}, 21821, 21824, 21826, 21829,
+    {f: 2, c: 21831}, {f: 4, c: 21835}, {f: 2, c: 21841}, 21844,
+    {f: 5, c: 21847}, 21853, {f: 2, c: 21855}, {f: 2, c: 21858},
+    {f: 2, c: 21864}, 21867, {f: 6, c: 21871}, {f: 2, c: 21881}, 21885, 21887,
+    {f: 2, c: 21893}, {f: 3, c: 21900}, 21904, {f: 2, c: 21906},
+    {f: 3, c: 21909}, {f: 2, c: 21914}, 21918, {f: 7, c: 21920},
+    {f: 2, c: 21928}, 21931, 21933, {f: 2, c: 21935}, 21940, 21942, 21944,
+    21946, 21948, {f: 5, c: 21951}, 21960, {f: 2, c: 21962}, {f: 2, c: 21967},
+    21973, {f: 3, c: 21975}, 21979, 21982, 21984, 21986, 21991,
+    {f: 2, c: 21997}, {f: 2, c: 22000}, 22004, {f: 5, c: 22008}, 22015,
+    {f: 4, c: 22018}, 22023, {f: 2, c: 22026}, {f: 4, c: 22032}, 22037,
+    {f: 2, c: 22041}, 22045, {f: 3, c: 22048}, {f: 2, c: 22053}, 22056,
+    {f: 2, c: 22058}, 22067, 22071, 22074, {f: 3, c: 22076}, 22080,
+    {f: 10, c: 22082}, {f: 5, c: 22095}, {f: 2, c: 22101}, {f: 2, c: 22106},
+    {f: 2, c: 22110}, 22113, 22115, 22119, {f: 2, c: 22125}, 22128, 22131,
+    22133, 22135, 22138, {f: 3, c: 22141}, {f: 4, c: 22145}, {f: 4, c: 22152},
+    22157, {f: 3, c: 22160}, 22164, {f: 3, c: 22166}, {f: 9, c: 22170},
+    {f: 2, c: 22180}, 22183, {f: 5, c: 22185}, {f: 3, c: 22192}, 22197,
+    {f: 4, c: 22200}, {f: 3, c: 22205}, {f: 2, c: 22211}, {f: 2, c: 22214},
+    22219, {f: 4, c: 22221}, {f: 2, c: 22226}, {f: 2, c: 22229},
+    {f: 2, c: 22232}, 22236, 22243, {f: 6, c: 22245}, 22252, {f: 2, c: 22254},
+    {f: 2, c: 22258}, {f: 3, c: 22262}, {f: 2, c: 22267}, {f: 3, c: 22272},
+    22277, 22284, {f: 4, c: 22286}, {f: 2, c: 22292}, 22295, {f: 3, c: 22297},
+    {f: 2, c: 22301}, {f: 3, c: 22304}, {f: 4, c: 22308}, 22315,
+    {f: 2, c: 22321}, {f: 5, c: 22324}, {f: 2, c: 22332}, 22335, 22337,
+    {f: 4, c: 22339}, {f: 2, c: 22344}, 22347, {f: 5, c: 22354},
+    {f: 2, c: 22360}, {f: 2, c: 22370}, 22373, 22375, 22380, 22382,
+    {f: 3, c: 22384}, {f: 2, c: 22388}, {f: 3, c: 22392}, {f: 5, c: 22397},
+    {f: 4, c: 22407}, {f: 5, c: 22413}, {f: 7, c: 22420}, {f: 4, c: 22428},
+    22437, 22440, 22442, 22444, {f: 3, c: 22447}, 22451, {f: 3, c: 22453},
+    {f: 9, c: 22457}, {f: 7, c: 22468}, {f: 2, c: 22476}, {f: 2, c: 22480},
+    22483, {f: 2, c: 22486}, {f: 2, c: 22491}, 22494, {f: 2, c: 22498},
+    {f: 8, c: 22501}, 22510, {f: 4, c: 22512}, {f: 2, c: 22517},
+    {f: 2, c: 22523}, {f: 2, c: 22526}, 22529, {f: 2, c: 22531},
+    {f: 2, c: 22536}, 22540, {f: 3, c: 22542}, {f: 3, c: 22546},
+    {f: 2, c: 22551}, {f: 3, c: 22554}, 22559, {f: 2, c: 22562},
+    {f: 5, c: 22565}, {f: 4, c: 22571}, {f: 2, c: 22578}, {f: 14, c: 22582},
+    {f: 5, c: 22597}, 22606, 22608, 22611, {f: 2, c: 22613}, {f: 5, c: 22617},
+    {f: 3, c: 22623}, 22627, {f: 5, c: 22630}, {f: 8, c: 22637},
+    {f: 3, c: 22646}, {f: 4, c: 22650}, 22655, 22658, 22660, {f: 3, c: 22662},
+    {f: 7, c: 22667}, {f: 5, c: 22676}, 22683, 22685, {f: 8, c: 22688},
+    {f: 4, c: 22698}, {f: 4, c: 22703}, {f: 7, c: 22708}, 22717,
+    {f: 2, c: 22719}, {f: 3, c: 22722}, 22726, {f: 9, c: 22728}, 22738, 22740,
+    {f: 2, c: 22742}, {f: 3, c: 22747}, 22753, 22755, {f: 4, c: 22757}, 22762,
+    22765, {f: 2, c: 22769}, {f: 2, c: 22772}, {f: 2, c: 22775},
+    {f: 2, c: 22779}, {f: 4, c: 22782}, 22787, {f: 2, c: 22789},
+    {f: 2, c: 22792}, [12066, 22794], {f: 2, c: 22795}, 22798,
+    {f: 4, c: 22800}, {f: 2, c: 22807}, 22811, {f: 2, c: 22813},
+    {f: 2, c: 22816}, 22819, 22822, 22824, 22828, 22832, {f: 2, c: 22834},
+    {f: 2, c: 22837}, 22843, 22845, {f: 2, c: 22847}, 22851, {f: 2, c: 22853},
+    22858, {f: 2, c: 22860}, 22864, {f: 2, c: 22866}, 22873, {f: 5, c: 22875},
+    22881, {f: 2, c: 22883}, {f: 3, c: 22886}, 22891, 22893, {f: 4, c: 22895},
+    22901, 22903, {f: 3, c: 22906}, {f: 3, c: 22910}, 22917, 22921,
+    {f: 2, c: 22923}, {f: 4, c: 22926}, {f: 2, c: 22932}, 22936,
+    {f: 3, c: 22938}, {f: 4, c: 22943}, {f: 2, c: 22950}, {f: 2, c: 22956},
+    {f: 2, c: 22960}, {f: 6, c: 22963}, 22970, {f: 2, c: 22972},
+    {f: 7, c: 22975}, {f: 3, c: 22983}, {f: 4, c: 22988}, {f: 2, c: 22997},
+    23001, 23003, {f: 5, c: 23006}, 23012, {f: 2, c: 23014}, {f: 3, c: 23017},
+    {f: 12, c: 23021}, 23034, {f: 3, c: 23036}, 23040, 23042, {f: 2, c: 23050},
+    {f: 4, c: 23053}, 23058, {f: 4, c: 23060}, {f: 3, c: 23065},
+    {f: 2, c: 23069}, {f: 2, c: 23073}, 23076, {f: 3, c: 23078},
+    {f: 7, c: 23082}, 23091, 23093, {f: 5, c: 23095}, {f: 3, c: 23101},
+    {f: 4, c: 23106}, {f: 2, c: 23111}, {f: 10, c: 23115}, {f: 4, c: 23126},
+    {f: 7, c: 23131}, {f: 3, c: 23139}, {f: 2, c: 23144}, {f: 2, c: 23147},
+    {f: 6, c: 23150}, {f: 2, c: 23160}, {f: 4, c: 23163}, {f: 18, c: 23168},
+    {f: 7, c: 23187}, {f: 11, c: 23196}, {f: 2, c: 23208}, {f: 7, c: 23211},
+    23220, {f: 2, c: 23222}, {f: 4, c: 23225}, {f: 2, c: 23231},
+    {f: 6, c: 23235}, {f: 2, c: 23242}, {f: 5, c: 23245}, 23251, 23253,
+    {f: 3, c: 23257}, {f: 3, c: 23261}, 23266, {f: 2, c: 23268},
+    {f: 2, c: 23271}, 23274, {f: 5, c: 23276}, {f: 3, c: 23282},
+    {f: 5, c: 23286}, {f: 4, c: 23292}, {f: 7, c: 23297}, 23306,
+    {f: 9, c: 23309}, 23320, {f: 7, c: 23322}, {f: 8, c: 23330},
+    {f: 5, c: 23339}, 23345, 23347, {f: 2, c: 23349}, {f: 7, c: 23353},
+    {f: 11, c: 23361}, {f: 3, c: 23373}, 23378, 23382, 23390, {f: 2, c: 23392},
+    {f: 2, c: 23399}, {f: 3, c: 23405}, 23410, 23412, {f: 2, c: 23414}, 23417,
+    {f: 2, c: 23419}, 23422, 23426, 23430, 23434, {f: 2, c: 23437},
+    {f: 3, c: 23440}, 23444, 23446, 23455, {f: 3, c: 23463}, {f: 4, c: 23468},
+    {f: 2, c: 23473}, 23479, {f: 3, c: 23482}, {f: 2, c: 23488}, 23491,
+    {f: 4, c: 23496}, {f: 3, c: 23501}, 23505, {f: 9, c: 23508}, 23520, 23523,
+    23530, 23533, 23535, {f: 4, c: 23537}, 23543, {f: 2, c: 23549}, 23552,
+    {f: 2, c: 23554}, 23557, 23564, 23568, {f: 2, c: 23570}, 23575, 23577,
+    23579, {f: 4, c: 23582}, 23587, 23590, {f: 4, c: 23592}, {f: 4, c: 23597},
+    {f: 2, c: 23602}, {f: 2, c: 23605}, {f: 2, c: 23619}, {f: 2, c: 23622},
+    {f: 2, c: 23628}, {f: 3, c: 23634}, {f: 3, c: 23638}, {f: 4, c: 23642},
+    23647, 23655, {f: 3, c: 23657}, 23661, 23664, {f: 7, c: 23666},
+    {f: 4, c: 23675}, 23680, {f: 5, c: 23683}, {f: 3, c: 23689},
+    {f: 2, c: 23694}, {f: 2, c: 23698}, 23701, {f: 4, c: 23709},
+    {f: 5, c: 23716}, 23722, {f: 3, c: 23726}, 23730, 23732, 23734,
+    {f: 4, c: 23737}, 23742, 23744, {f: 2, c: 23746}, {f: 6, c: 23749},
+    {f: 6, c: 23756}, {f: 6, c: 23763}, {f: 7, c: 23770}, {f: 2, c: 23778},
+    23783, 23785, {f: 2, c: 23787}, {f: 2, c: 23790}, {f: 3, c: 23793}, 23797,
+    {f: 4, c: 23799}, 23804, {f: 4, c: 23806}, {f: 2, c: 23812},
+    {f: 5, c: 23816}, {f: 5, c: 23823}, 23829, {f: 3, c: 23832},
+    {f: 2, c: 23836}, {f: 5, c: 23839}, 23845, 23848, {f: 2, c: 23850},
+    {f: 5, c: 23855}, {f: 8, c: 23861}, {f: 8, c: 23871}, {f: 2, c: 23880},
+    {f: 3, c: 23885}, {f: 7, c: 23889}, {f: 2, c: 23897}, 23900,
+    {f: 11, c: 23902}, 23914, {f: 2, c: 23917}, {f: 4, c: 23920},
+    {f: 12, c: 23925}, 23939, {f: 2, c: 23941}, {f: 15, c: 23944}, 23960,
+    {f: 3, c: 23962}, {f: 2, c: 23966}, {f: 6, c: 23969}, {f: 15, c: 23976},
+    23993, 23995, {f: 8, c: 23997}, {f: 5, c: 24006}, 24012, {f: 4, c: 24014},
+    24019, {f: 6, c: 24021}, 24028, {f: 2, c: 24031}, {f: 2, c: 24035}, 24042,
+    {f: 2, c: 24044}, {f: 2, c: 24053}, {f: 5, c: 24056}, {f: 2, c: 24063},
+    24068, 24071, {f: 3, c: 24073}, {f: 2, c: 24077}, {f: 2, c: 24082}, 24087,
+    {f: 7, c: 24094}, {f: 3, c: 24104}, 24108, {f: 2, c: 24111}, 24114,
+    {f: 2, c: 24116}, {f: 2, c: 24121}, {f: 2, c: 24126}, 24129,
+    {f: 6, c: 24134}, {f: 7, c: 24141}, 24150, {f: 2, c: 24153},
+    {f: 2, c: 24156}, 24160, {f: 7, c: 24164}, {f: 5, c: 24173}, 24181, 24183,
+    {f: 3, c: 24193}, 24197, {f: 2, c: 24200}, {f: 3, c: 24204}, 24210, 24216,
+    24219, 24221, {f: 4, c: 24225}, {f: 3, c: 24232}, 24236, {f: 5, c: 24238},
+    24244, {f: 4, c: 24250}, {f: 10, c: 24255}, {f: 6, c: 24267},
+    {f: 2, c: 24276}, {f: 4, c: 24279}, {f: 3, c: 24284}, {f: 4, c: 24292},
+    24297, 24299, {f: 6, c: 24301}, 24309, {f: 2, c: 24312}, {f: 3, c: 24315},
+    {f: 3, c: 24325}, 24329, {f: 3, c: 24332}, 24336, 24338, 24340, 24342,
+    {f: 2, c: 24345}, {f: 3, c: 24348}, {f: 4, c: 24353}, 24360,
+    {f: 2, c: 24363}, 24366, 24368, 24370, 24372, {f: 3, c: 24374}, 24379,
+    {f: 3, c: 24381}, {f: 5, c: 24385}, 24391, {f: 3, c: 24393}, 24397, 24399,
+    24401, 24404, {f: 3, c: 24410}, {f: 3, c: 24414}, 24419, 24421,
+    {f: 2, c: 24423}, 24427, {f: 2, c: 24430}, 24434, {f: 3, c: 24436}, 24440,
+    24442, {f: 3, c: 24445}, 24451, 24454, {f: 3, c: 24461}, {f: 2, c: 24467},
+    24470, {f: 2, c: 24474}, 24477, 24479, {f: 6, c: 24482}, {f: 2, c: 24491},
+    {f: 6, c: 24495}, 24502, 24504, {f: 2, c: 24506}, {f: 5, c: 24510},
+    {f: 2, c: 24519}, {f: 2, c: 24522}, 24526, {f: 3, c: 24531},
+    {f: 3, c: 24538}, {f: 2, c: 24542}, {f: 2, c: 24546}, {f: 2, c: 24549},
+    {f: 2, c: 24552}, 24556, {f: 2, c: 24559}, {f: 3, c: 24562},
+    {f: 2, c: 24566}, {f: 2, c: 24569}, 24572, {f: 3, c: 24583},
+    {f: 2, c: 24587}, {f: 2, c: 24592}, 24595, {f: 2, c: 24599}, 24602,
+    {f: 2, c: 24606}, {f: 3, c: 24610}, {f: 3, c: 24620}, {f: 5, c: 24624},
+    {f: 5, c: 24630}, {f: 2, c: 24637}, 24640, {f: 7, c: 24644}, 24652,
+    {f: 2, c: 24654}, 24657, {f: 2, c: 24659}, {f: 3, c: 24662},
+    {f: 2, c: 24667}, {f: 4, c: 24670}, {f: 2, c: 24677}, 24686,
+    {f: 2, c: 24689}, {f: 2, c: 24692}, 24695, 24702, {f: 3, c: 24704},
+    {f: 4, c: 24709}, {f: 2, c: 24714}, {f: 4, c: 24718}, 24723, 24725,
+    {f: 3, c: 24727}, 24732, 24734, {f: 2, c: 24737}, {f: 2, c: 24740}, 24743,
+    {f: 2, c: 24745}, 24750, 24752, 24755, 24759, {f: 2, c: 24761},
+    {f: 8, c: 24765}, {f: 3, c: 24775}, {f: 5, c: 24780}, {f: 3, c: 24786},
+    {f: 2, c: 24790}, 24793, 24795, 24798, {f: 4, c: 24802}, 24810, 24821,
+    {f: 2, c: 24823}, {f: 4, c: 24828}, {f: 4, c: 24834}, 24839,
+    {f: 3, c: 24842}, {f: 5, c: 24848}, {f: 4, c: 24854}, {f: 2, c: 24861},
+    {f: 2, c: 24865}, 24869, {f: 3, c: 24872}, {f: 8, c: 24876},
+    {f: 2, c: 24885}, {f: 6, c: 24888}, {f: 8, c: 24896}, 24905, 24909,
+    {f: 2, c: 24911}, {f: 3, c: 24914}, {f: 2, c: 24918}, 24921,
+    {f: 2, c: 24923}, 24926, {f: 2, c: 24928}, {f: 2, c: 24933}, 24937,
+    {f: 2, c: 24940}, 24943, {f: 2, c: 24945}, 24948, {f: 10, c: 24952},
+    {f: 7, c: 24963}, {f: 2, c: 24972}, 24975, 24979, {f: 5, c: 24981},
+    {f: 2, c: 24987}, {f: 6, c: 24990}, {f: 2, c: 24997}, 25002, 25005,
+    {f: 3, c: 25007}, {f: 3, c: 25011}, {f: 6, c: 25016}, {f: 3, c: 25023},
+    {f: 4, c: 25027}, {f: 4, c: 25037}, 25043, {f: 9, c: 25045},
+    {f: 3, c: 25056}, {f: 2, c: 25060}, 25063, {f: 9, c: 25065},
+    {f: 2, c: 25075}, 25081, 25083, 25085, {f: 5, c: 25089}, 25097, 25107,
+    25113, {f: 3, c: 25116}, 25120, 25123, 25126, {f: 2, c: 25128}, 25131,
+    25133, 25135, 25137, 25141, [12094, 25142], {f: 5, c: 25144}, 25154,
+    {f: 3, c: 25156}, 25162, {f: 2, c: 25167}, {f: 3, c: 25173},
+    {f: 2, c: 25177}, {f: 7, c: 25180}, {f: 2, c: 25188}, 25192,
+    {f: 2, c: 25201}, {f: 2, c: 25204}, {f: 2, c: 25207}, {f: 2, c: 25210},
+    25213, {f: 3, c: 25217}, {f: 4, c: 25221}, {f: 6, c: 25227}, 25236, 25241,
+    {f: 3, c: 25244}, 25251, {f: 2, c: 25254}, {f: 2, c: 25257},
+    {f: 4, c: 25261}, {f: 3, c: 25266}, {f: 3, c: 25270}, 25274, 25278,
+    {f: 2, c: 25280}, 25283, 25291, 25295, 25297, 25301, {f: 2, c: 25309},
+    {f: 2, c: 25312}, 25316, {f: 2, c: 25322}, 25328, 25330, 25333,
+    {f: 4, c: 25336}, 25344, {f: 4, c: 25347}, {f: 4, c: 25354},
+    {f: 2, c: 25359}, {f: 4, c: 25362}, {f: 3, c: 25367}, 25372,
+    {f: 2, c: 25382}, 25385, {f: 3, c: 25388}, {f: 2, c: 25392},
+    {f: 6, c: 25395}, {f: 2, c: 25403}, {f: 3, c: 25407}, 25412,
+    {f: 2, c: 25415}, 25418, {f: 4, c: 25425}, {f: 8, c: 25430}, 25440,
+    {f: 3, c: 25444}, 25450, 25452, {f: 2, c: 25455}, {f: 3, c: 25459},
+    {f: 2, c: 25464}, {f: 4, c: 25468}, 25473, {f: 2, c: 25477}, 25483, 25485,
+    25489, {f: 3, c: 25491}, 25495, {f: 7, c: 25497}, 25505, 25508, 25510,
+    25515, 25519, {f: 2, c: 25521}, {f: 2, c: 25525}, 25529, 25531, 25533,
+    25535, {f: 3, c: 25537}, 25541, {f: 2, c: 25543}, {f: 3, c: 25546}, 25553,
+    {f: 3, c: 25555}, {f: 3, c: 25559}, {f: 3, c: 25563}, 25567, 25570,
+    {f: 5, c: 25572}, {f: 2, c: 25579}, {f: 3, c: 25583}, 25587, 25589, 25591,
+    {f: 4, c: 25593}, 25598, {f: 2, c: 25603}, {f: 5, c: 25606}, 25614,
+    {f: 2, c: 25617}, {f: 2, c: 25621}, {f: 3, c: 25624}, 25629, 25631,
+    {f: 4, c: 25634}, {f: 3, c: 25639}, 25643, {f: 6, c: 25646}, 25653,
+    {f: 3, c: 25655}, {f: 2, c: 25659}, 25662, 25664, {f: 2, c: 25666}, 25673,
+    {f: 6, c: 25675}, 25683, {f: 3, c: 25685}, {f: 3, c: 25689}, 25693,
+    {f: 7, c: 25696}, 25704, {f: 3, c: 25706}, 25710, {f: 3, c: 25712},
+    {f: 2, c: 25716}, 25719, {f: 6, c: 25724}, 25731, 25734, {f: 8, c: 25737},
+    25748, {f: 2, c: 25751}, {f: 4, c: 25754}, {f: 3, c: 25760},
+    {f: 3, c: 25766}, 25770, 25775, 25777, 25780, 25782, 25785, 25789, 25795,
+    25798, {f: 2, c: 25800}, 25804, 25807, 25809, 25811, {f: 2, c: 25813},
+    25817, {f: 3, c: 25819}, 25823, 25825, 25827, 25829, {f: 5, c: 25831},
+    {f: 2, c: 25837}, 25843, {f: 2, c: 25845}, {f: 2, c: 25848}, 25853, 25855,
+    {f: 3, c: 25857}, 25861, {f: 2, c: 25863}, {f: 5, c: 25866},
+    {f: 2, c: 25872}, 25875, 25877, 25879, 25882, 25884, {f: 4, c: 25886},
+    {f: 4, c: 25894}, 25901, {f: 4, c: 25904}, 25911, 25914, {f: 2, c: 25916},
+    {f: 5, c: 25920}, {f: 2, c: 25926}, {f: 2, c: 25930}, {f: 2, c: 25933},
+    25936, {f: 3, c: 25938}, 25944, 25946, 25948, {f: 3, c: 25951},
+    {f: 2, c: 25956}, {f: 4, c: 25959}, {f: 3, c: 25965}, 25969, 25971, 25974,
+    {f: 9, c: 25977}, {f: 3, c: 25988}, {f: 3, c: 25992}, {f: 3, c: 25997},
+    26002, 26004, 26006, 26008, 26010, {f: 2, c: 26013}, 26016,
+    {f: 2, c: 26018}, 26022, 26024, 26026, 26030, {f: 6, c: 26033}, 26040,
+    {f: 2, c: 26042}, {f: 3, c: 26046}, 26050, {f: 4, c: 26055}, 26061,
+    {f: 2, c: 26064}, {f: 3, c: 26067}, {f: 8, c: 26072}, 26081,
+    {f: 2, c: 26083}, {f: 2, c: 26090}, {f: 4, c: 26098}, {f: 2, c: 26104},
+    {f: 5, c: 26107}, 26113, {f: 2, c: 26116}, {f: 3, c: 26119}, 26123, 26125,
+    {f: 3, c: 26128}, {f: 3, c: 26134}, {f: 3, c: 26138}, 26142,
+    {f: 4, c: 26145}, 26150, {f: 4, c: 26153}, 26158, 26160, {f: 2, c: 26162},
+    {f: 5, c: 26167}, 26173, {f: 2, c: 26175}, {f: 7, c: 26180},
+    {f: 2, c: 26189}, {f: 2, c: 26192}, {f: 2, c: 26200}, {f: 2, c: 26203},
+    26206, 26208, {f: 2, c: 26210}, 26213, 26215, {f: 5, c: 26217},
+    {f: 3, c: 26225}, 26229, {f: 2, c: 26232}, {f: 3, c: 26235},
+    {f: 3, c: 26239}, 26243, {f: 2, c: 26245}, {f: 2, c: 26250},
+    {f: 4, c: 26253}, {f: 4, c: 26258}, {f: 5, c: 26264}, {f: 4, c: 26270},
+    {f: 4, c: 26275}, {f: 2, c: 26281}, {f: 2, c: 26284}, {f: 5, c: 26287},
+    {f: 4, c: 26293}, {f: 4, c: 26298}, {f: 5, c: 26303}, 26309, 26312,
+    {f: 12, c: 26314}, {f: 2, c: 26327}, 26330, {f: 2, c: 26334},
+    {f: 5, c: 26337}, {f: 2, c: 26343}, {f: 2, c: 26346}, {f: 3, c: 26349},
+    26353, {f: 2, c: 26357}, {f: 2, c: 26362}, 26365, {f: 2, c: 26369},
+    {f: 4, c: 26372}, 26380, {f: 2, c: 26382}, {f: 3, c: 26385}, 26390,
+    {f: 3, c: 26392}, 26396, 26398, {f: 6, c: 26400}, 26409, 26414, 26416,
+    {f: 2, c: 26418}, {f: 4, c: 26422}, {f: 2, c: 26427}, {f: 2, c: 26430},
+    26433, {f: 2, c: 26436}, 26439, {f: 2, c: 26442}, 26445, 26450,
+    {f: 2, c: 26452}, {f: 5, c: 26455}, 26461, {f: 3, c: 26466},
+    {f: 2, c: 26470}, {f: 2, c: 26475}, 26478, 26484, 26486, {f: 4, c: 26488},
+    26493, 26496, {f: 2, c: 26498}, {f: 2, c: 26501}, 26504, 26506,
+    {f: 4, c: 26508}, {f: 4, c: 26513}, 26518, 26521, 26523, {f: 3, c: 26527},
+    26532, 26534, 26537, 26540, 26542, {f: 2, c: 26545}, 26548,
+    {f: 8, c: 26553}, 26562, {f: 10, c: 26565}, {f: 3, c: 26581}, 26587, 26591,
+    26593, {f: 2, c: 26595}, {f: 3, c: 26598}, {f: 2, c: 26602},
+    {f: 2, c: 26605}, 26610, {f: 8, c: 26613}, 26622, {f: 4, c: 26625}, 26630,
+    26637, 26640, 26642, {f: 2, c: 26644}, {f: 5, c: 26648}, {f: 3, c: 26654},
+    {f: 7, c: 26658}, {f: 7, c: 26667}, {f: 3, c: 26676}, {f: 2, c: 26682},
+    26687, 26695, 26699, 26701, 26703, 26706, {f: 10, c: 26710}, 26730,
+    {f: 8, c: 26732}, 26741, {f: 9, c: 26744}, 26754, 26756, {f: 8, c: 26759},
+    {f: 3, c: 26768}, {f: 3, c: 26772}, {f: 4, c: 26777}, 26782,
+    {f: 2, c: 26784}, {f: 3, c: 26787}, {f: 4, c: 26793}, 26798,
+    {f: 2, c: 26801}, 26804, {f: 10, c: 26806}, 26817, {f: 6, c: 26819}, 26826,
+    26828, {f: 4, c: 26830}, {f: 2, c: 26835}, 26841, {f: 4, c: 26843},
+    {f: 2, c: 26849}, {f: 3, c: 26852}, {f: 6, c: 26856}, 26863,
+    {f: 3, c: 26866}, {f: 3, c: 26870}, 26875, {f: 4, c: 26877},
+    {f: 3, c: 26882}, {f: 5, c: 26886}, 26892, 26897, {f: 12, c: 26899},
+    {f: 3, c: 26913}, {f: 8, c: 26917}, {f: 2, c: 26926}, {f: 3, c: 26929},
+    {f: 4, c: 26933}, {f: 3, c: 26938}, 26942, {f: 2, c: 26944},
+    {f: 7, c: 26947}, {f: 8, c: 26955}, {f: 2, c: 26965}, {f: 2, c: 26968},
+    {f: 2, c: 26971}, 26975, {f: 2, c: 26977}, {f: 2, c: 26980}, 26983,
+    {f: 2, c: 26985}, 26988, {f: 2, c: 26991}, {f: 3, c: 26994}, 26998,
+    {f: 2, c: 27002}, {f: 3, c: 27005}, 27009, 27011, 27013, {f: 3, c: 27018},
+    {f: 6, c: 27022}, {f: 2, c: 27030}, {f: 2, c: 27033}, {f: 10, c: 27037},
+    27049, 27052, {f: 2, c: 27055}, {f: 2, c: 27058}, {f: 2, c: 27061},
+    {f: 3, c: 27064}, {f: 3, c: 27068}, 27072, {f: 8, c: 27074}, 27087,
+    {f: 3, c: 27089}, {f: 6, c: 27093}, {f: 3, c: 27100}, {f: 6, c: 27105},
+    {f: 5, c: 27112}, {f: 4, c: 27118}, {f: 9, c: 27124}, 27134, 27136,
+    {f: 2, c: 27139}, {f: 4, c: 27142}, {f: 8, c: 27147}, {f: 3, c: 27156},
+    {f: 4, c: 27162}, 27168, 27170, {f: 4, c: 27172}, 27177, {f: 4, c: 27179},
+    27184, {f: 3, c: 27186}, {f: 2, c: 27190}, {f: 2, c: 27195},
+    {f: 5, c: 27199}, {f: 2, c: 27205}, {f: 2, c: 27209}, {f: 4, c: 27212},
+    {f: 7, c: 27217}, 27226, {f: 3, c: 27228}, 27232, {f: 2, c: 27235},
+    {f: 11, c: 27238}, {f: 7, c: 27250}, {f: 2, c: 27258}, {f: 3, c: 27261},
+    {f: 3, c: 27265}, {f: 4, c: 27269}, {f: 4, c: 27274}, 27279,
+    {f: 2, c: 27282}, {f: 2, c: 27285}, {f: 4, c: 27288}, {f: 3, c: 27293},
+    27297, {f: 5, c: 27300}, 27306, {f: 2, c: 27309}, {f: 3, c: 27312},
+    {f: 4, c: 27316}, {f: 2, c: 27321}, {f: 7, c: 27324}, {f: 15, c: 27332},
+    {f: 6, c: 27348}, 27356, {f: 7, c: 27360}, 27369, 27371, {f: 6, c: 27373},
+    {f: 4, c: 27380}, {f: 2, c: 27385}, {f: 8, c: 27388}, {f: 5, c: 27397},
+    {f: 4, c: 27403}, {f: 2, c: 27408}, {f: 3, c: 27411}, {f: 7, c: 27415},
+    27423, {f: 2, c: 27429}, {f: 10, c: 27432}, {f: 4, c: 27443}, 27448,
+    {f: 2, c: 27451}, {f: 4, c: 27455}, {f: 2, c: 27460}, 27464,
+    {f: 2, c: 27466}, {f: 3, c: 27469}, {f: 8, c: 27473}, {f: 5, c: 27482},
+    27488, {f: 2, c: 27496}, {f: 7, c: 27499}, {f: 4, c: 27507}, 27514,
+    {f: 4, c: 27517}, 27525, 27528, 27532, {f: 4, c: 27534}, {f: 2, c: 27540},
+    27543, 27545, {f: 2, c: 27548}, {f: 2, c: 27551}, {f: 2, c: 27554},
+    {f: 5, c: 27557}, {f: 2, c: 27564}, {f: 2, c: 27568}, 27574,
+    {f: 2, c: 27576}, {f: 3, c: 27580}, 27584, {f: 2, c: 27587},
+    {f: 4, c: 27591}, 27596, 27598, {f: 2, c: 27600}, 27608, 27610,
+    {f: 5, c: 27612}, {f: 8, c: 27618}, {f: 3, c: 27628}, {f: 3, c: 27632},
+    27636, {f: 3, c: 27638}, {f: 3, c: 27642}, 27646, {f: 5, c: 27648},
+    {f: 3, c: 27657}, 27662, 27666, 27671, {f: 3, c: 27676}, 27680, 27685,
+    27693, 27697, 27699, {f: 2, c: 27702}, {f: 4, c: 27705}, {f: 2, c: 27710},
+    {f: 3, c: 27715}, 27720, {f: 5, c: 27723}, {f: 3, c: 27729}, 27734,
+    {f: 3, c: 27736}, {f: 2, c: 27746}, {f: 3, c: 27749}, {f: 5, c: 27755},
+    27761, 27763, 27765, {f: 2, c: 27767}, {f: 3, c: 27770}, {f: 2, c: 27775},
+    27780, 27783, {f: 2, c: 27786}, {f: 2, c: 27789}, {f: 2, c: 27793},
+    {f: 4, c: 27797}, 27802, {f: 3, c: 27804}, 27808, 27810, 27816, 27820,
+    {f: 2, c: 27823}, {f: 4, c: 27828}, 27834, {f: 4, c: 27840},
+    {f: 3, c: 27846}, 27851, {f: 3, c: 27853}, {f: 2, c: 27857},
+    {f: 3, c: 27864}, {f: 2, c: 27868}, 27871, 27876, {f: 2, c: 27878}, 27881,
+    {f: 2, c: 27884}, 27890, 27892, 27897, {f: 2, c: 27903}, {f: 2, c: 27906},
+    {f: 2, c: 27909}, {f: 3, c: 27912}, 27917, {f: 3, c: 27919},
+    {f: 4, c: 27923}, 27928, {f: 2, c: 27932}, {f: 6, c: 27935}, 27942,
+    {f: 2, c: 27944}, {f: 2, c: 27948}, {f: 2, c: 27951}, 27956,
+    {f: 3, c: 27958}, 27962, {f: 2, c: 27967}, 27970, 27972, 27977, 27980,
+    27984, {f: 4, c: 27989}, 27995, 27997, 27999, {f: 2, c: 28001},
+    {f: 2, c: 28004}, {f: 2, c: 28007}, {f: 3, c: 28011}, {f: 4, c: 28016},
+    {f: 2, c: 28021}, {f: 2, c: 28026}, {f: 5, c: 28029}, {f: 2, c: 28035},
+    28038, {f: 2, c: 28042}, 28045, {f: 2, c: 28047}, 28050, {f: 5, c: 28054},
+    28060, 28066, 28069, {f: 2, c: 28076}, {f: 2, c: 28080}, {f: 2, c: 28083},
+    {f: 2, c: 28086}, {f: 6, c: 28089}, {f: 3, c: 28097}, {f: 3, c: 28104},
+    {f: 4, c: 28109}, {f: 4, c: 28114}, 28119, {f: 3, c: 28122}, 28127,
+    {f: 2, c: 28130}, 28133, {f: 3, c: 28135}, 28141, {f: 2, c: 28143}, 28146,
+    28148, 28152, {f: 8, c: 28157}, {f: 4, c: 28166}, 28171, 28175,
+    {f: 2, c: 28178}, 28181, {f: 2, c: 28184}, {f: 2, c: 28187},
+    {f: 2, c: 28190}, 28194, {f: 2, c: 28199}, 28202, 28206, {f: 2, c: 28208},
+    28211, {f: 3, c: 28213}, 28217, {f: 3, c: 28219}, {f: 4, c: 28223},
+    {f: 8, c: 28229}, {f: 4, c: 28239}, 28245, 28247, {f: 2, c: 28249},
+    {f: 2, c: 28252}, {f: 11, c: 28256}, {f: 2, c: 28268}, {f: 14, c: 28272},
+    {f: 3, c: 28288}, 28292, {f: 2, c: 28295}, {f: 5, c: 28298},
+    {f: 5, c: 28305}, 28311, {f: 3, c: 28313}, 28318, {f: 2, c: 28320},
+    {f: 2, c: 28323}, 28326, {f: 2, c: 28328}, {f: 4, c: 28331}, 28336, 28339,
+    28341, {f: 2, c: 28344}, 28348, {f: 3, c: 28350}, 28355, 28358,
+    {f: 3, c: 28360}, 28365, 28368, 28370, 28374, {f: 2, c: 28376},
+    {f: 3, c: 28379}, 28387, 28391, {f: 2, c: 28394}, {f: 2, c: 28397},
+    {f: 2, c: 28400}, 28403, {f: 2, c: 28405}, {f: 5, c: 28410}, 28416,
+    {f: 3, c: 28419}, {f: 2, c: 28423}, {f: 5, c: 28426}, {f: 3, c: 28432},
+    {f: 4, c: 28438}, {f: 5, c: 28443}, 28449, {f: 4, c: 28453}, 28462, 28464,
+    {f: 2, c: 28468}, 28471, {f: 5, c: 28473}, 28480, {f: 4, c: 28482},
+    {f: 3, c: 28488}, 28492, {f: 3, c: 28494}, {f: 2, c: 28498},
+    {f: 3, c: 28501}, {f: 2, c: 28506}, 28509, {f: 3, c: 28511}, 28515, 28517,
+    {f: 6, c: 28519}, 28529, 28531, {f: 2, c: 28533}, 28537, 28539,
+    {f: 2, c: 28541}, {f: 3, c: 28545}, 28549, {f: 2, c: 28554},
+    {f: 8, c: 28559}, {f: 4, c: 28568}, {f: 3, c: 28573}, {f: 2, c: 28578},
+    {f: 2, c: 28581}, 28584, {f: 4, c: 28586}, {f: 2, c: 28591}, 28594,
+    {f: 2, c: 28596}, {f: 2, c: 28599}, {f: 6, c: 28602}, {f: 5, c: 28612},
+    {f: 7, c: 28618}, {f: 2, c: 28627}, {f: 2, c: 28630}, {f: 2, c: 28633},
+    {f: 2, c: 28636}, {f: 2, c: 28642}, {f: 6, c: 28645}, {f: 2, c: 28652},
+    {f: 8, c: 28658}, 28667, 28669, {f: 6, c: 28671}, {f: 2, c: 28679}, 28682,
+    {f: 3, c: 28684}, 28688, {f: 3, c: 28690}, {f: 2, c: 28694}, 28697, 28700,
+    28702, {f: 2, c: 28705}, {f: 3, c: 28708}, {f: 7, c: 28713}, 28721,
+    {f: 2, c: 28723}, {f: 3, c: 28726}, {f: 4, c: 28730}, {f: 4, c: 28735},
+    {f: 7, c: 28741}, {f: 2, c: 28749}, 28752, {f: 3, c: 28754},
+    {f: 2, c: 28758}, {f: 4, c: 28761}, {f: 4, c: 28767}, {f: 2, c: 28773},
+    {f: 3, c: 28776}, 28782, {f: 4, c: 28785}, 28791, {f: 3, c: 28793}, 28797,
+    {f: 4, c: 28801}, {f: 3, c: 28806}, {f: 3, c: 28811}, {f: 3, c: 28815},
+    28819, {f: 2, c: 28823}, {f: 2, c: 28826}, {f: 13, c: 28830}, 28848, 28850,
+    {f: 3, c: 28852}, 28858, {f: 2, c: 28862}, {f: 4, c: 28868}, 28873,
+    {f: 4, c: 28875}, {f: 8, c: 28880}, 28890, {f: 3, c: 28892},
+    {f: 4, c: 28896}, 28901, 28906, 28910, {f: 4, c: 28912}, {f: 2, c: 28917},
+    28920, {f: 3, c: 28922}, {f: 11, c: 28926}, {f: 5, c: 28939},
+    {f: 2, c: 28945}, 28948, 28951, {f: 6, c: 28955}, {f: 4, c: 28962},
+    {f: 8, c: 28967}, {f: 4, c: 28978}, {f: 14, c: 28983}, {f: 3, c: 28998},
+    29003, 29005, {f: 3, c: 29007}, {f: 9, c: 29011}, 29021, {f: 3, c: 29023},
+    29027, 29029, {f: 2, c: 29034}, 29037, {f: 3, c: 29039}, {f: 4, c: 29044},
+    29049, {f: 2, c: 29051}, {f: 6, c: 29054}, {f: 5, c: 29061},
+    {f: 4, c: 29067}, {f: 2, c: 29072}, 29075, {f: 2, c: 29077},
+    {f: 5, c: 29082}, {f: 7, c: 29089}, {f: 3, c: 29097}, {f: 4, c: 29101},
+    29106, 29108, {f: 3, c: 29110}, {f: 4, c: 29114}, {f: 2, c: 29119}, 29122,
+    {f: 4, c: 29124}, {f: 5, c: 29129}, {f: 3, c: 29135}, 29139,
+    {f: 3, c: 29142}, {f: 2, c: 29146}, {f: 2, c: 29149}, {f: 4, c: 29153},
+    {f: 5, c: 29160}, {f: 5, c: 29167}, {f: 4, c: 29173}, {f: 2, c: 29178},
+    29181, {f: 7, c: 29183}, {f: 6, c: 29191}, {f: 2, c: 29198},
+    {f: 10, c: 29201}, 29212, {f: 10, c: 29214}, 29225, 29227,
+    {f: 3, c: 29229}, {f: 2, c: 29235}, 29244, {f: 7, c: 29248},
+    {f: 3, c: 29257}, {f: 4, c: 29262}, {f: 3, c: 29267}, 29271, 29274, 29276,
+    29278, 29280, {f: 3, c: 29283}, 29288, {f: 4, c: 29290}, {f: 2, c: 29296},
+    {f: 2, c: 29299}, {f: 3, c: 29302}, {f: 2, c: 29307}, {f: 2, c: 29314},
+    {f: 5, c: 29317}, 29324, 29326, {f: 2, c: 29328}, {f: 3, c: 29331},
+    {f: 8, c: 29335}, {f: 2, c: 29344}, {f: 4, c: 29347}, {f: 4, c: 29352},
+    29358, {f: 3, c: 29361}, 29365, {f: 6, c: 29370}, {f: 3, c: 29381},
+    {f: 4, c: 29385}, 29391, 29393, {f: 4, c: 29395}, 29400, {f: 4, c: 29402},
+    29407, {f: 6, c: 29410}, {f: 2, c: 29418}, {f: 2, c: 29429},
+    {f: 3, c: 29438}, 29442, {f: 6, c: 29444}, {f: 3, c: 29451},
+    {f: 4, c: 29455}, 29460, {f: 3, c: 29464}, {f: 2, c: 29471},
+    {f: 2, c: 29475}, {f: 3, c: 29478}, 29485, {f: 2, c: 29487},
+    {f: 2, c: 29490}, 29493, 29498, {f: 2, c: 29500}, 29504, {f: 2, c: 29506},
+    {f: 7, c: 29510}, {f: 2, c: 29518}, 29521, {f: 4, c: 29523},
+    {f: 8, c: 29528}, {f: 7, c: 29537}, 29545, 29550, 29553, {f: 2, c: 29555},
+    29558, 29561, 29565, 29567, {f: 3, c: 29569}, {f: 2, c: 29573}, 29576,
+    29578, {f: 2, c: 29580}, {f: 2, c: 29583}, {f: 4, c: 29586},
+    {f: 4, c: 29591}, {f: 3, c: 29596}, {f: 2, c: 29600}, {f: 6, c: 29603},
+    29610, {f: 2, c: 29612}, 29617, {f: 3, c: 29620}, {f: 2, c: 29624},
+    {f: 4, c: 29628}, 29633, {f: 5, c: 29635}, {f: 2, c: 29643}, 29646,
+    {f: 7, c: 29650}, {f: 4, c: 29658}, 29663, {f: 4, c: 29665}, 29670, 29672,
+    {f: 3, c: 29674}, {f: 4, c: 29678}, {f: 11, c: 29683}, {f: 4, c: 29695},
+    29700, {f: 2, c: 29703}, {f: 4, c: 29707}, {f: 9, c: 29713},
+    {f: 6, c: 29724}, {f: 2, c: 29731}, 29735, 29737, 29739, 29741, 29743,
+    {f: 2, c: 29745}, {f: 5, c: 29751}, {f: 2, c: 29757}, 29760,
+    {f: 9, c: 29762}, {f: 9, c: 29772}, 29782, 29784, 29789, {f: 3, c: 29792},
+    {f: 5, c: 29796}, {f: 2, c: 29803}, {f: 2, c: 29806}, {f: 5, c: 29809},
+    {f: 6, c: 29816}, 29823, 29826, {f: 3, c: 29828}, 29832, 29834,
+    {f: 2, c: 29836}, 29839, {f: 11, c: 29841}, 29853, {f: 4, c: 29855},
+    {f: 2, c: 29860}, {f: 6, c: 29866}, {f: 9, c: 29873}, {f: 2, c: 29883},
+    {f: 12, c: 29886}, {f: 4, c: 29899}, {f: 2, c: 29904}, 29907,
+    {f: 5, c: 29909}, 29915, 29917, 29919, 29921, 29925, {f: 7, c: 29927},
+    {f: 4, c: 29936}, 29941, {f: 7, c: 29944}, {f: 4, c: 29952},
+    {f: 7, c: 29957}, 29966, 29968, 29970, {f: 4, c: 29972}, 29979,
+    {f: 2, c: 29981}, {f: 3, c: 29984}, 29988, {f: 2, c: 29990}, 29994, 29998,
+    30004, 30006, 30009, {f: 2, c: 30012}, 30015, {f: 4, c: 30017},
+    {f: 2, c: 30022}, {f: 2, c: 30025}, 30029, {f: 4, c: 30032},
+    {f: 4, c: 30037}, {f: 4, c: 30046}, {f: 2, c: 30051}, {f: 3, c: 30055},
+    {f: 6, c: 30060}, 30067, 30069, 30071, {f: 5, c: 30074}, {f: 3, c: 30080},
+    {f: 2, c: 30084}, {f: 3, c: 30088}, {f: 3, c: 30092}, 30096, 30099, 30101,
+    30104, {f: 2, c: 30107}, 30110, 30114, {f: 5, c: 30118}, 30125,
+    {f: 2, c: 30134}, {f: 2, c: 30138}, {f: 3, c: 30143}, 30150,
+    {f: 2, c: 30155}, {f: 4, c: 30158}, 30163, 30167, 30170, {f: 2, c: 30172},
+    {f: 3, c: 30175}, 30181, 30185, {f: 4, c: 30188}, {f: 2, c: 30194},
+    {f: 4, c: 30197}, {f: 2, c: 30202}, {f: 2, c: 30205}, 30212,
+    {f: 4, c: 30214}, {f: 2, c: 30222}, {f: 4, c: 30225}, 30230, 30234,
+    {f: 2, c: 30236}, 30243, 30248, 30252, {f: 2, c: 30254}, {f: 2, c: 30257},
+    {f: 2, c: 30262}, {f: 2, c: 30265}, 30269, 30273, {f: 2, c: 30276}, 30280,
+    {f: 2, c: 30282}, {f: 6, c: 30286}, 30293, 30295, {f: 3, c: 30297}, 30301,
+    {f: 2, c: 30304}, 30310, 30312, 30314, {f: 3, c: 30323}, [12136, 30326],
+    30327, {f: 2, c: 30329}, {f: 3, c: 30335}, 30339, 30341, {f: 2, c: 30345},
+    {f: 2, c: 30348}, {f: 2, c: 30351}, 30354, {f: 2, c: 30356},
+    {f: 2, c: 30359}, {f: 9, c: 30363}, {f: 9, c: 30373}, {f: 2, c: 30383},
+    30387, {f: 3, c: 30389}, 30393, {f: 4, c: 30395}, {f: 2, c: 30400},
+    {f: 2, c: 30403}, 30407, 30409, {f: 2, c: 30411}, 30419, 30421,
+    {f: 2, c: 30425}, {f: 2, c: 30428}, 30432, 30434, 30438, {f: 6, c: 30440},
+    30448, 30451, {f: 3, c: 30453}, {f: 2, c: 30458}, 30461, {f: 2, c: 30463},
+    {f: 2, c: 30466}, {f: 2, c: 30469}, 30474, 30476, {f: 11, c: 30478},
+    {f: 4, c: 30491}, 30497, {f: 3, c: 30499}, 30503, {f: 3, c: 30506}, 30510,
+    {f: 5, c: 30512}, 30521, 30523, {f: 3, c: 30525}, 30530, {f: 3, c: 30532},
+    {f: 7, c: 30536}, {f: 8, c: 30546}, {f: 2, c: 30556}, {f: 2, c: 30559},
+    30564, 30567, {f: 2, c: 30569}, {f: 12, c: 30573}, {f: 3, c: 30586},
+    {f: 3, c: 30593}, {f: 6, c: 30598}, {f: 2, c: 30607}, {f: 5, c: 30611},
+    {f: 5, c: 30617}, 30625, {f: 2, c: 30627}, 30630, 30632, 30635,
+    {f: 2, c: 30638}, {f: 2, c: 30641}, 30644, {f: 5, c: 30646}, 30654,
+    {f: 7, c: 30656}, {f: 5, c: 30664}, {f: 9, c: 30670}, {f: 2, c: 30680},
+    {f: 5, c: 30685}, 30692, 30694, 30696, 30698, {f: 3, c: 30704},
+    {f: 2, c: 30708}, 30711, {f: 4, c: 30713}, {f: 6, c: 30723},
+    {f: 2, c: 30730}, {f: 3, c: 30734}, 30739, 30741, 30745, 30747, 30750,
+    {f: 3, c: 30752}, 30756, 30760, {f: 2, c: 30762}, {f: 2, c: 30766},
+    {f: 3, c: 30769}, {f: 2, c: 30773}, 30781, 30783, {f: 2, c: 30785}, 30788,
+    30790, {f: 4, c: 30792}, 30797, 30799, 30801, {f: 2, c: 30803},
+    {f: 5, c: 30808}, {f: 6, c: 30814}, {f: 3, c: 30821}, 30825,
+    {f: 7, c: 30832}, {f: 4, c: 30840}, {f: 10, c: 30845}, 30856,
+    {f: 2, c: 30858}, {f: 2, c: 30863}, 30866, {f: 3, c: 30868}, 30873,
+    {f: 2, c: 30877}, 30880, 30882, 30884, 30886, 30888, {f: 3, c: 30890},
+    {f: 2, c: 30894}, {f: 3, c: 30901}, 30907, 30909, {f: 2, c: 30911},
+    {f: 3, c: 30914}, {f: 3, c: 30918}, {f: 4, c: 30924}, {f: 3, c: 30929},
+    {f: 3, c: 30934}, {f: 8, c: 30939}, {f: 3, c: 30948}, {f: 3, c: 30953},
+    {f: 2, c: 30957}, {f: 2, c: 30960}, 30963, {f: 2, c: 30965},
+    {f: 2, c: 30968}, {f: 2, c: 30971}, {f: 3, c: 30974}, {f: 3, c: 30978},
+    {f: 8, c: 30982}, {f: 4, c: 30991}, {f: 5, c: 30996}, {f: 4, c: 31002},
+    {f: 5, c: 31007}, 31013, {f: 3, c: 31015}, {f: 4, c: 31021},
+    {f: 2, c: 31026}, {f: 5, c: 31029}, 31037, 31039, {f: 4, c: 31042}, 31047,
+    {f: 9, c: 31050}, {f: 2, c: 31060}, {f: 2, c: 31064}, 31073,
+    {f: 2, c: 31075}, 31078, {f: 4, c: 31081}, 31086, {f: 7, c: 31088}, 31097,
+    {f: 5, c: 31099}, {f: 2, c: 31106}, {f: 4, c: 31110}, {f: 2, c: 31115},
+    {f: 10, c: 31120}, {f: 11, c: 31131}, {f: 2, c: 31144}, {f: 3, c: 31147},
+    31151, 31154, {f: 4, c: 31156}, [12145, 31160], 31164, 31167, 31170,
+    {f: 2, c: 31172}, {f: 2, c: 31175}, 31178, 31180, {f: 3, c: 31182},
+    {f: 2, c: 31187}, {f: 2, c: 31190}, {f: 6, c: 31193}, {f: 3, c: 31200},
+    31205, 31208, 31210, 31212, 31214, {f: 7, c: 31217}, {f: 2, c: 31225},
+    31228, {f: 2, c: 31230}, 31233, {f: 2, c: 31236}, {f: 4, c: 31239}, 31244,
+    {f: 5, c: 31247}, {f: 2, c: 31253}, {f: 2, c: 31256}, {f: 3, c: 31259},
+    31263, {f: 2, c: 31265}, {f: 10, c: 31268}, {f: 2, c: 31279}, 31282,
+    {f: 3, c: 31284}, 31288, 31290, 31294, {f: 5, c: 31297}, {f: 5, c: 31303},
+    {f: 2, c: 31311}, {f: 5, c: 31314}, {f: 9, c: 31320}, {f: 6, c: 31331},
+    31338, {f: 4, c: 31340}, {f: 3, c: 31345}, 31349, {f: 4, c: 31355}, 31362,
+    31365, 31367, {f: 4, c: 31369}, {f: 3, c: 31374}, {f: 2, c: 31379},
+    {f: 3, c: 31385}, 31390, {f: 4, c: 31393}, 31399, 31403, {f: 4, c: 31407},
+    {f: 2, c: 31412}, {f: 3, c: 31415}, {f: 4, c: 31419}, {f: 4, c: 31424},
+    31430, 31433, {f: 10, c: 31436}, {f: 2, c: 31447}, {f: 4, c: 31450},
+    {f: 2, c: 31457}, 31460, {f: 3, c: 31463}, {f: 2, c: 31467}, 31470,
+    {f: 6, c: 31472}, {f: 2, c: 31479}, {f: 2, c: 31483}, 31486,
+    {f: 3, c: 31488}, 31493, 31495, 31497, {f: 3, c: 31500}, 31504,
+    {f: 2, c: 31506}, {f: 3, c: 31510}, 31514, {f: 2, c: 31516}, 31519,
+    {f: 3, c: 31521}, 31527, 31529, 31533, {f: 2, c: 31535}, 31538,
+    {f: 4, c: 31540}, 31545, 31547, 31549, {f: 6, c: 31551}, 31560, 31562,
+    {f: 2, c: 31565}, 31571, 31573, 31575, 31577, 31580, {f: 2, c: 31582},
+    31585, {f: 4, c: 31587}, {f: 6, c: 31592}, {f: 2, c: 31599},
+    {f: 2, c: 31603}, 31606, 31608, 31610, {f: 2, c: 31612}, 31615,
+    {f: 4, c: 31617}, {f: 5, c: 31622}, 31628, {f: 2, c: 31630},
+    {f: 3, c: 31633}, 31638, {f: 4, c: 31640}, {f: 3, c: 31646},
+    {f: 3, c: 31651}, {f: 3, c: 31662}, {f: 2, c: 31666}, {f: 3, c: 31669},
+    {f: 7, c: 31673}, {f: 2, c: 31682}, 31685, 31688, 31690, {f: 4, c: 31693},
+    31698, {f: 5, c: 31700}, {f: 2, c: 31707}, {f: 3, c: 31710},
+    {f: 2, c: 31714}, {f: 2, c: 31719}, {f: 3, c: 31723}, {f: 2, c: 31727},
+    31730, {f: 3, c: 31732}, {f: 4, c: 31736}, 31741, 31743, {f: 6, c: 31745},
+    {f: 3, c: 31752}, 31758, {f: 6, c: 31760}, {f: 7, c: 31767}, 31776, 31778,
+    {f: 2, c: 31780}, {f: 2, c: 31784}, {f: 12, c: 31788}, {f: 4, c: 31801},
+    31810, {f: 8, c: 31812}, {f: 14, c: 31822}, {f: 2, c: 31837},
+    {f: 3, c: 31841}, {f: 4, c: 31845}, 31851, 31853, {f: 3, c: 31855},
+    {f: 6, c: 31861}, {f: 11, c: 31870}, {f: 7, c: 31882}, {f: 2, c: 31891},
+    31894, {f: 3, c: 31897}, {f: 2, c: 31904}, 31907, {f: 4, c: 31910},
+    {f: 3, c: 31915}, {f: 2, c: 31919}, {f: 5, c: 31924}, {f: 2, c: 31930},
+    {f: 2, c: 31935}, {f: 3, c: 31938}, 31942, 31945, 31947, {f: 7, c: 31950},
+    31960, {f: 2, c: 31962}, {f: 6, c: 31969}, {f: 6, c: 31977}, 31985, 31987,
+    31989, 31991, 31994, {f: 2, c: 31996}, 31999, 32001, 32003, 32012,
+    {f: 2, c: 32014}, {f: 2, c: 32017}, 32022, 32024, {f: 3, c: 32029},
+    {f: 4, c: 32035}, {f: 3, c: 32040}, {f: 3, c: 32044}, {f: 5, c: 32052},
+    32059, {f: 2, c: 32061}, 32065, 32067, 32069, {f: 7, c: 32071}, 32079,
+    {f: 12, c: 32081}, {f: 2, c: 32095}, {f: 3, c: 32099}, 32103,
+    {f: 5, c: 32105}, {f: 2, c: 32111}, {f: 2, c: 32116}, 32120,
+    {f: 7, c: 32122}, 32130, {f: 2, c: 32132}, 32135, {f: 5, c: 32138},
+    {f: 3, c: 32144}, {f: 8, c: 32148}, 32157, {f: 3, c: 32159},
+    {f: 2, c: 32164}, {f: 4, c: 32167}, 32175, {f: 3, c: 32181}, 32188,
+    {f: 4, c: 32192}, {f: 2, c: 32197}, {f: 2, c: 32200}, {f: 5, c: 32204},
+    32211, {f: 2, c: 32213}, {f: 3, c: 32218}, 32223, 32226, {f: 2, c: 32228},
+    32231, {f: 2, c: 32234}, {f: 2, c: 32237}, 32240, 32243, 32245,
+    {f: 2, c: 32247}, 32250, {f: 12, c: 32252}, {f: 4, c: 32268},
+    {f: 9, c: 32274}, 32284, {f: 3, c: 32288}, {f: 3, c: 32292},
+    {f: 3, c: 32296}, 32300, {f: 2, c: 32303}, 32307, 32312, 32314, 32316,
+    {f: 2, c: 32319}, {f: 3, c: 32322}, {f: 10, c: 32328}, 32339,
+    {f: 4, c: 32342}, {f: 3, c: 32347}, {f: 3, c: 32351}, {f: 6, c: 32355},
+    32364, {f: 2, c: 32369}, {f: 5, c: 32372}, {f: 2, c: 32378},
+    {f: 3, c: 32383}, {f: 5, c: 32387}, 32393, 32395, 32398, {f: 3, c: 32400},
+    32405, 32407, {f: 2, c: 32409}, {f: 2, c: 32413}, 32430, 32436,
+    {f: 2, c: 32443}, 32470, 32484, 32492, 32505, 32522, 32528, 32542, 32567,
+    32569, {f: 7, c: 32571}, 32579, {f: 6, c: 32582}, 32589, 32591,
+    {f: 2, c: 32594}, 32598, 32601, {f: 4, c: 32603}, 32608, {f: 5, c: 32611},
+    {f: 3, c: 32619}, 32623, 32627, {f: 2, c: 32629}, 32632, {f: 4, c: 32634},
+    {f: 2, c: 32639}, {f: 3, c: 32642}, 32647, 32649, 32651, 32653,
+    {f: 5, c: 32655}, {f: 5, c: 32661}, {f: 2, c: 32667}, 32672,
+    {f: 2, c: 32674}, 32678, 32680, {f: 5, c: 32682}, 32689, {f: 5, c: 32691},
+    {f: 2, c: 32698}, 32702, 32704, {f: 3, c: 32706}, {f: 4, c: 32710}, 32715,
+    32717, {f: 3, c: 32719}, 32723, {f: 2, c: 32726}, {f: 6, c: 32729},
+    {f: 3, c: 32738}, {f: 2, c: 32743}, {f: 4, c: 32746}, 32751, 32754,
+    {f: 5, c: 32756}, 32762, {f: 3, c: 32765}, 32770, {f: 4, c: 32775},
+    {f: 2, c: 32782}, 32785, 32787, {f: 2, c: 32794}, {f: 3, c: 32797}, 32801,
+    {f: 2, c: 32803}, 32811, 32813, {f: 2, c: 32815}, 32818, 32820,
+    {f: 2, c: 32825}, 32828, 32830, {f: 2, c: 32832}, {f: 2, c: 32836},
+    {f: 3, c: 32839}, {f: 4, c: 32846}, 32851, 32853, 32855, 32857,
+    {f: 3, c: 32859}, {f: 10, c: 32863}, {f: 4, c: 32875}, 32884, 32888,
+    {f: 3, c: 32890}, {f: 2, c: 32897}, 32904, 32906, {f: 6, c: 32909},
+    {f: 2, c: 32916}, 32919, 32921, 32926, 32931, {f: 3, c: 32934}, 32940,
+    32944, 32947, {f: 2, c: 32949}, {f: 2, c: 32952}, 32955, 32965,
+    {f: 5, c: 32967}, {f: 7, c: 32975}, 32984, {f: 2, c: 32991},
+    {f: 2, c: 32994}, 32998, 33006, 33013, 33015, 33017, 33019,
+    {f: 4, c: 33022}, {f: 2, c: 33027}, {f: 2, c: 33031}, {f: 2, c: 33035},
+    33045, 33047, 33049, {f: 2, c: 33052}, {f: 13, c: 33055}, {f: 2, c: 33069},
+    33072, {f: 3, c: 33075}, 33079, {f: 4, c: 33082}, {f: 7, c: 33087}, 33095,
+    33097, 33101, 33103, 33106, {f: 2, c: 33111}, {f: 5, c: 33115},
+    {f: 3, c: 33122}, 33128, 33130, 33132, 33135, {f: 2, c: 33138},
+    {f: 3, c: 33141}, 33153, {f: 5, c: 33155}, 33161, {f: 4, c: 33163}, 33168,
+    {f: 6, c: 33170}, 33177, {f: 2, c: 33182}, {f: 2, c: 33185},
+    {f: 2, c: 33188}, 33191, {f: 8, c: 33195}, {f: 6, c: 33204}, 33212,
+    {f: 2, c: 33220}, {f: 2, c: 33223}, 33227, 33230, {f: 8, c: 33232}, 33241,
+    {f: 4, c: 33243}, {f: 2, c: 33249}, {f: 3, c: 33252}, 33257, 33259,
+    {f: 5, c: 33262}, {f: 5, c: 33269}, 33277, 33279, 33283, 33291,
+    {f: 2, c: 33294}, 33297, 33299, {f: 6, c: 33301}, 33309, 33312,
+    {f: 4, c: 33316}, 33321, 33326, 33330, 33338, {f: 2, c: 33340},
+    {f: 5, c: 33343}, {f: 2, c: 33349}, 33352, 33354, {f: 3, c: 33356},
+    {f: 8, c: 33360}, {f: 4, c: 33371}, {f: 4, c: 33376}, 33381, 33383,
+    {f: 2, c: 33385}, {f: 2, c: 33388}, {f: 2, c: 33397}, [12171, 33400],
+    {f: 2, c: 33403}, {f: 2, c: 33408}, 33411, {f: 3, c: 33413}, 33417, 33420,
+    33424, {f: 4, c: 33427}, {f: 2, c: 33434}, 33438, 33440, {f: 2, c: 33442},
+    33447, 33458, {f: 2, c: 33461}, 33466, 33468, {f: 2, c: 33471},
+    {f: 2, c: 33474}, {f: 2, c: 33477}, 33481, 33488, 33494, {f: 2, c: 33497},
+    33501, 33506, {f: 3, c: 33512}, {f: 3, c: 33516}, 33520, {f: 2, c: 33522},
+    {f: 2, c: 33525}, 33528, 33530, {f: 5, c: 33532}, {f: 2, c: 33546}, 33549,
+    33552, {f: 2, c: 33554}, 33558, {f: 2, c: 33560}, {f: 10, c: 33565},
+    {f: 2, c: 33577}, 33582, 33584, 33586, 33591, 33595, {f: 3, c: 33597},
+    {f: 2, c: 33601}, {f: 2, c: 33604}, 33608, {f: 5, c: 33610}, 33619,
+    {f: 5, c: 33621}, 33629, 33634, {f: 7, c: 33648}, {f: 2, c: 33657},
+    {f: 7, c: 33662}, {f: 2, c: 33671}, {f: 3, c: 33675}, {f: 3, c: 33679},
+    {f: 2, c: 33684}, 33687, {f: 2, c: 33689}, 33693, 33695, 33697,
+    {f: 4, c: 33699}, {f: 4, c: 33708}, 33717, 33723, {f: 2, c: 33726},
+    {f: 3, c: 33730}, 33734, {f: 2, c: 33736}, 33739, {f: 2, c: 33741},
+    {f: 4, c: 33744}, 33749, 33751, {f: 3, c: 33753}, 33758, {f: 3, c: 33762},
+    {f: 3, c: 33766}, {f: 4, c: 33771}, {f: 5, c: 33779}, {f: 3, c: 33786},
+    {f: 3, c: 33790}, 33794, 33797, {f: 2, c: 33800}, 33808, {f: 6, c: 33810},
+    {f: 3, c: 33817}, {f: 6, c: 33822}, {f: 3, c: 33833}, {f: 4, c: 33837},
+    {f: 3, c: 33842}, {f: 2, c: 33846}, {f: 3, c: 33849}, {f: 8, c: 33854},
+    {f: 2, c: 33863}, {f: 7, c: 33866}, {f: 4, c: 33875}, 33880,
+    {f: 4, c: 33885}, 33890, 33893, {f: 2, c: 33895}, 33898, 33902, 33904,
+    33906, 33908, 33913, {f: 7, c: 33915}, {f: 4, c: 33923}, 33930, 33933,
+    {f: 4, c: 33935}, {f: 2, c: 33941}, 33944, {f: 2, c: 33946},
+    {f: 4, c: 33949}, {f: 13, c: 33954}, {f: 2, c: 33968}, 33971,
+    {f: 3, c: 33973}, 33979, 33982, {f: 2, c: 33986}, {f: 4, c: 33989}, 33996,
+    {f: 2, c: 33998}, 34002, {f: 2, c: 34004}, {f: 6, c: 34007}, 34014,
+    {f: 2, c: 34017}, 34020, {f: 5, c: 34023}, 34029, {f: 11, c: 34033}, 34046,
+    {f: 12, c: 34048}, {f: 4, c: 34061}, 34066, {f: 2, c: 34069},
+    {f: 2, c: 34072}, {f: 3, c: 34075}, 34080, 34082, {f: 2, c: 34084},
+    {f: 4, c: 34087}, {f: 9, c: 34094}, {f: 3, c: 34110}, 34114,
+    {f: 2, c: 34116}, 34119, {f: 3, c: 34123}, {f: 3, c: 34127}, 34132, 34135,
+    {f: 4, c: 34138}, {f: 3, c: 34143}, 34147, {f: 3, c: 34149},
+    {f: 2, c: 34155}, {f: 4, c: 34158}, 34163, {f: 2, c: 34165}, 34168,
+    {f: 2, c: 34172}, {f: 5, c: 34175}, 34182, 34185, 34187, {f: 2, c: 34189},
+    34192, {f: 2, c: 34194}, {f: 6, c: 34197}, {f: 2, c: 34205},
+    {f: 4, c: 34208}, 34213, 34215, {f: 3, c: 34219}, {f: 6, c: 34225}, 34232,
+    {f: 6, c: 34235}, {f: 7, c: 34242}, {f: 3, c: 34250}, {f: 2, c: 34257},
+    34260, {f: 6, c: 34262}, {f: 6, c: 34270}, {f: 3, c: 34278},
+    {f: 9, c: 34283}, 34293, {f: 2, c: 34295}, {f: 3, c: 34300},
+    {f: 4, c: 34304}, {f: 3, c: 34312}, {f: 5, c: 34316}, {f: 4, c: 34322},
+    {f: 3, c: 34327}, {f: 3, c: 34331}, {f: 3, c: 34335}, {f: 4, c: 34339},
+    34344, {f: 3, c: 34346}, {f: 10, c: 34350}, 34361, 34363, {f: 2, c: 34365},
+    {f: 13, c: 34368}, {f: 2, c: 34386}, {f: 4, c: 34390}, 34395, 34397,
+    {f: 2, c: 34400}, {f: 4, c: 34403}, {f: 3, c: 34408}, 34413,
+    {f: 2, c: 34415}, {f: 7, c: 34418}, {f: 7, c: 34435}, {f: 5, c: 34446},
+    34452, {f: 6, c: 34454}, {f: 5, c: 34462}, {f: 2, c: 34469}, 34475,
+    {f: 2, c: 34477}, {f: 2, c: 34482}, {f: 3, c: 34487}, {f: 5, c: 34491},
+    {f: 3, c: 34497}, 34501, 34504, {f: 2, c: 34508}, {f: 2, c: 34514},
+    {f: 3, c: 34517}, 34522, {f: 2, c: 34524}, {f: 4, c: 34528},
+    {f: 4, c: 34533}, {f: 3, c: 34538}, 34543, {f: 3, c: 34549},
+    {f: 3, c: 34555}, 34559, 34561, {f: 2, c: 34564}, {f: 2, c: 34571},
+    {f: 4, c: 34574}, 34580, 34582, 34585, 34587, 34589, {f: 2, c: 34591},
+    34596, {f: 3, c: 34598}, {f: 4, c: 34602}, {f: 2, c: 34607},
+    {f: 2, c: 34610}, {f: 2, c: 34613}, {f: 3, c: 34616}, {f: 2, c: 34620},
+    {f: 7, c: 34624}, {f: 2, c: 34634}, 34637, {f: 4, c: 34639}, 34644, 34646,
+    34648, {f: 6, c: 34650}, {f: 2, c: 34657}, {f: 7, c: 34663}, 34671,
+    {f: 3, c: 34673}, 34677, 34679, {f: 2, c: 34681}, {f: 3, c: 34687},
+    {f: 2, c: 34694}, {f: 2, c: 34697}, 34700, {f: 5, c: 34702},
+    {f: 3, c: 34708}, {f: 6, c: 34712}, {f: 2, c: 34720}, {f: 5, c: 34723},
+    {f: 2, c: 34729}, 34734, {f: 3, c: 34736}, 34740, {f: 4, c: 34742}, 34748,
+    {f: 2, c: 34750}, {f: 3, c: 34753}, 34757, 34759, 34761, {f: 2, c: 34764},
+    {f: 2, c: 34767}, {f: 7, c: 34772}, {f: 4, c: 34780}, {f: 2, c: 34785},
+    34788, {f: 4, c: 34790}, 34795, 34797, {f: 2, c: 34800}, {f: 3, c: 34803},
+    {f: 2, c: 34807}, 34810, {f: 2, c: 34812}, {f: 4, c: 34815}, 34820,
+    {f: 3, c: 34823}, {f: 5, c: 34827}, 34834, 34836, {f: 4, c: 34839},
+    {f: 3, c: 34844}, 34848, {f: 13, c: 34852}, {f: 3, c: 34867},
+    {f: 2, c: 34871}, 34874, {f: 3, c: 34877}, {f: 3, c: 34881},
+    {f: 3, c: 34887}, 34891, {f: 5, c: 34894}, {f: 2, c: 34901}, 34904, 34906,
+    34908, {f: 3, c: 34910}, {f: 2, c: 34918}, 34922, 34925, 34927, 34929,
+    {f: 4, c: 34931}, 34936, {f: 3, c: 34938}, 34944, 34947, {f: 2, c: 34950},
+    {f: 2, c: 34953}, 34956, {f: 4, c: 34958}, {f: 3, c: 34963},
+    {f: 5, c: 34967}, {f: 5, c: 34973}, 34979, {f: 6, c: 34981}, 34988,
+    {f: 3, c: 34990}, {f: 5, c: 34994}, {f: 4, c: 35000}, {f: 4, c: 35005},
+    {f: 2, c: 35011}, {f: 2, c: 35015}, {f: 3, c: 35019}, {f: 2, c: 35024},
+    35027, {f: 2, c: 35030}, {f: 2, c: 35034}, 35038, {f: 2, c: 35040},
+    {f: 2, c: 35046}, {f: 7, c: 35049}, 35058, {f: 3, c: 35061},
+    {f: 2, c: 35066}, {f: 3, c: 35071}, {f: 4, c: 35075}, {f: 2, c: 35080},
+    {f: 5, c: 35083}, 35089, {f: 5, c: 35092}, {f: 5, c: 35100},
+    {f: 3, c: 35106}, {f: 4, c: 35110}, {f: 4, c: 35116}, 35121, 35125, 35127,
+    {f: 2, c: 35129}, {f: 5, c: 35132}, {f: 2, c: 35138}, {f: 2, c: 35141},
+    {f: 14, c: 35144}, {f: 6, c: 35159}, {f: 3, c: 35169}, 35173,
+    {f: 3, c: 35175}, 35179, {f: 2, c: 35181}, {f: 2, c: 35184},
+    {f: 8, c: 35187}, {f: 2, c: 35196}, [12177, 35198], 35200, 35202,
+    {f: 2, c: 35204}, {f: 4, c: 35207}, {f: 3, c: 35212}, {f: 3, c: 35216},
+    {f: 2, c: 35220}, 35223, {f: 8, c: 35225}, {f: 4, c: 35234},
+    {f: 3, c: 35239}, 35243, {f: 2, c: 35245}, {f: 2, c: 35248},
+    {f: 4, c: 35251}, {f: 2, c: 35256}, {f: 2, c: 35259}, 35262, 35267, 35277,
+    {f: 3, c: 35283}, {f: 3, c: 35287}, 35291, 35293, {f: 4, c: 35295}, 35300,
+    {f: 4, c: 35303}, {f: 3, c: 35308}, {f: 3, c: 35312}, 35317, 35319,
+    {f: 7, c: 35321}, {f: 3, c: 35332}, 35337, 35339, 35341, 35343,
+    {f: 2, c: 35345}, 35348, 35351, {f: 2, c: 35353}, 35356, 35358,
+    {f: 3, c: 35360}, 35364, {f: 4, c: 35366}, {f: 2, c: 35371},
+    {f: 3, c: 35374}, {f: 2, c: 35378}, 35381, {f: 3, c: 35383},
+    {f: 3, c: 35387}, {f: 2, c: 35391}, {f: 4, c: 35394}, 35399,
+    {f: 5, c: 35401}, 35407, 35409, 35411, {f: 2, c: 35414}, {f: 2, c: 35417},
+    {f: 2, c: 35420}, {f: 2, c: 35423}, {f: 2, c: 35428}, {f: 2, c: 35431},
+    35434, 35439, 35444, {f: 3, c: 35446}, {f: 2, c: 35450}, {f: 2, c: 35453},
+    {f: 4, c: 35456}, 35464, {f: 2, c: 35467}, {f: 3, c: 35470}, 35476,
+    {f: 2, c: 35478}, 35481, {f: 3, c: 35483}, 35487, 35490, 35495,
+    {f: 3, c: 35497}, {f: 3, c: 35501}, 35505, {f: 3, c: 35507},
+    {f: 2, c: 35511}, {f: 2, c: 35514}, {f: 2, c: 35517}, {f: 2, c: 35520},
+    35523, {f: 2, c: 35525}, 35528, 35530, 35532, 35534, 35536,
+    {f: 3, c: 35539}, {f: 3, c: 35544}, 35549, {f: 3, c: 35551}, 35555, 35557,
+    {f: 3, c: 35560}, 35564, {f: 2, c: 35567}, 35570, {f: 2, c: 35572}, 35577,
+    35579, 35581, 35583, 35587, 35590, {f: 2, c: 35592}, {f: 3, c: 35595},
+    35599, {f: 3, c: 35601}, 35605, 35608, 35612, {f: 3, c: 35614},
+    {f: 4, c: 35618}, 35623, {f: 2, c: 35625}, {f: 5, c: 35630},
+    {f: 5, c: 35636}, {f: 4, c: 35642}, {f: 10, c: 35647}, {f: 4, c: 35658},
+    {f: 6, c: 35664}, 35671, 35675, {f: 9, c: 35677}, {f: 4, c: 35687},
+    {f: 2, c: 35693}, {f: 3, c: 35697}, {f: 2, c: 35701}, {f: 5, c: 35704},
+    {f: 2, c: 35710}, {f: 9, c: 35713}, {f: 3, c: 35723}, {f: 3, c: 35727},
+    35732, {f: 5, c: 35735}, 35741, 35743, 35756, 35761, 35771, 35783, 35792,
+    35818, 35849, 35870, {f: 9, c: 35896}, {f: 4, c: 35906}, {f: 2, c: 35914},
+    {f: 3, c: 35917}, {f: 4, c: 35921}, {f: 4, c: 35926}, {f: 6, c: 35931},
+    {f: 7, c: 35939}, {f: 7, c: 35948}, {f: 4, c: 35956}, {f: 7, c: 35963},
+    {f: 2, c: 35971}, {f: 3, c: 35974}, 35979, {f: 7, c: 35981},
+    {f: 3, c: 35989}, {f: 4, c: 35993}, 35999, {f: 4, c: 36003},
+    {f: 2, c: 36013}, 36017, 36021, 36025, 36030, 36038, 36041,
+    {f: 6, c: 36043}, 36052, {f: 4, c: 36054}, 36059, 36061, 36063, 36069,
+    {f: 2, c: 36072}, {f: 6, c: 36078}, {f: 5, c: 36085}, {f: 5, c: 36095},
+    {f: 2, c: 36102}, 36105, 36108, 36110, {f: 5, c: 36113}, {f: 4, c: 36119},
+    36128, {f: 2, c: 36177}, 36183, 36191, 36197, {f: 3, c: 36200}, 36204,
+    {f: 2, c: 36206}, {f: 2, c: 36209}, {f: 9, c: 36216}, {f: 2, c: 36226},
+    {f: 4, c: 36230}, {f: 5, c: 36236}, {f: 2, c: 36242}, {f: 3, c: 36246},
+    {f: 5, c: 36250}, {f: 3, c: 36256}, {f: 4, c: 36260}, {f: 8, c: 36265},
+    {f: 2, c: 36278}, 36281, 36283, 36285, {f: 3, c: 36288}, 36293,
+    {f: 4, c: 36295}, 36301, 36304, {f: 4, c: 36306}, {f: 2, c: 36312}, 36316,
+    {f: 3, c: 36320}, {f: 3, c: 36325}, 36329, {f: 2, c: 36333},
+    {f: 3, c: 36336}, 36340, 36342, 36348, {f: 7, c: 36350}, {f: 3, c: 36358},
+    36363, {f: 2, c: 36365}, {f: 3, c: 36369}, {f: 8, c: 36373},
+    {f: 2, c: 36384}, {f: 5, c: 36388}, 36395, 36397, 36400, {f: 2, c: 36402},
+    {f: 3, c: 36406}, {f: 2, c: 36411}, {f: 2, c: 36414}, 36419,
+    {f: 2, c: 36421}, {f: 4, c: 36429}, {f: 2, c: 36435}, {f: 3, c: 36438},
+    {f: 9, c: 36442}, {f: 2, c: 36452}, {f: 2, c: 36455}, {f: 2, c: 36458},
+    36462, 36465, 36467, 36469, {f: 3, c: 36471}, 36475, {f: 2, c: 36477},
+    36480, {f: 3, c: 36482}, 36486, 36488, 36492, 36494, {f: 5, c: 36501},
+    36507, 36509, {f: 2, c: 36511}, {f: 3, c: 36514}, {f: 3, c: 36519},
+    {f: 2, c: 36525}, {f: 2, c: 36528}, {f: 7, c: 36531}, {f: 5, c: 36539},
+    {f: 9, c: 36545}, {f: 3, c: 36559}, 36563, {f: 6, c: 36565},
+    {f: 3, c: 36572}, {f: 4, c: 36576}, {f: 6, c: 36581}, {f: 6, c: 36588},
+    {f: 5, c: 36595}, 36605, {f: 4, c: 36607}, 36612, 36614, 36616,
+    {f: 7, c: 36619}, 36627, {f: 5, c: 36630}, {f: 5, c: 36640},
+    {f: 2, c: 36647}, {f: 4, c: 36651}, {f: 3, c: 36656}, {f: 4, c: 36660},
+    {f: 2, c: 36665}, {f: 2, c: 36668}, {f: 2, c: 36672}, 36675,
+    {f: 2, c: 36679}, {f: 3, c: 36682}, {f: 5, c: 36687}, {f: 10, c: 36693},
+    36704, 36707, 36709, 36714, 36736, 36748, 36754, 36765, {f: 3, c: 36768},
+    {f: 2, c: 36772}, 36775, 36778, 36780, {f: 2, c: 36787}, [12193, 36789],
+    {f: 2, c: 36791}, {f: 3, c: 36794}, {f: 2, c: 36799}, 36803, 36806,
+    {f: 5, c: 36809}, 36815, 36818, {f: 2, c: 36822}, 36826, {f: 2, c: 36832},
+    36835, 36839, 36844, 36847, {f: 2, c: 36849}, {f: 2, c: 36853},
+    {f: 3, c: 36858}, {f: 2, c: 36862}, {f: 2, c: 36871}, 36876, 36878, 36883,
+    36888, 36892, {f: 2, c: 36900}, {f: 6, c: 36903}, {f: 2, c: 36912},
+    {f: 2, c: 36915}, 36919, {f: 2, c: 36921}, 36925, {f: 2, c: 36927}, 36931,
+    {f: 2, c: 36933}, {f: 3, c: 36936}, 36940, 36950, {f: 2, c: 36953}, 36957,
+    36959, 36961, 36964, {f: 2, c: 36966}, {f: 3, c: 36970}, {f: 3, c: 36975},
+    36979, 36982, 36985, 36987, 36990, {f: 2, c: 36997}, 37001,
+    {f: 3, c: 37004}, 37010, 37012, 37014, 37016, 37018, 37020,
+    {f: 3, c: 37022}, {f: 2, c: 37028}, {f: 3, c: 37031}, 37035, 37037, 37042,
+    37047, {f: 2, c: 37052}, {f: 2, c: 37055}, {f: 2, c: 37058}, 37062,
+    {f: 2, c: 37064}, {f: 3, c: 37067}, 37074, {f: 3, c: 37076},
+    {f: 3, c: 37080}, 37086, 37088, {f: 3, c: 37091}, {f: 2, c: 37097}, 37100,
+    37102, {f: 4, c: 37104}, {f: 2, c: 37110}, {f: 4, c: 37113},
+    {f: 3, c: 37119}, 37123, 37125, {f: 2, c: 37127}, {f: 8, c: 37130}, 37139,
+    37141, {f: 2, c: 37143}, {f: 4, c: 37146}, {f: 3, c: 37151},
+    {f: 3, c: 37156}, {f: 5, c: 37160}, 37166, 37171, 37173, {f: 2, c: 37175},
+    {f: 8, c: 37179}, {f: 2, c: 37188}, 37191, 37201, {f: 4, c: 37203},
+    {f: 2, c: 37208}, {f: 2, c: 37211}, {f: 2, c: 37215}, {f: 3, c: 37222},
+    37227, 37229, 37235, {f: 3, c: 37242}, {f: 5, c: 37248}, 37254, 37256,
+    37258, {f: 2, c: 37262}, {f: 3, c: 37267}, {f: 3, c: 37271},
+    {f: 5, c: 37277}, {f: 6, c: 37284}, {f: 4, c: 37296}, {f: 4, c: 37302},
+    {f: 5, c: 37307}, 37314, 37316, [12196, 37318], 37320, 37328, 37334,
+    {f: 2, c: 37338}, {f: 5, c: 37342}, {f: 2, c: 37349}, 37352,
+    {f: 11, c: 37354}, 37366, 37368, {f: 5, c: 37371}, {f: 2, c: 37378},
+    {f: 3, c: 37381}, {f: 3, c: 37386}, 37391, {f: 2, c: 37394},
+    {f: 8, c: 37398}, {f: 4, c: 37407}, 37412, {f: 6, c: 37416}, 37423,
+    {f: 2, c: 37425}, {f: 2, c: 37429}, {f: 2, c: 37435}, {f: 4, c: 37441},
+    {f: 2, c: 37446}, {f: 3, c: 37450}, {f: 3, c: 37454}, {f: 3, c: 37458},
+    37462, {f: 2, c: 37464}, {f: 2, c: 37468}, {f: 3, c: 37471},
+    {f: 3, c: 37475}, {f: 5, c: 37479}, {f: 6, c: 37486}, {f: 3, c: 37493},
+    37497, {f: 3, c: 37500}, {f: 2, c: 37505}, 37508, {f: 8, c: 37510},
+    {f: 2, c: 37519}, 37522, {f: 2, c: 37524}, 37527, 37529, 37531,
+    {f: 3, c: 37533}, {f: 2, c: 37537}, 37540, 37543, 37549, {f: 2, c: 37551},
+    {f: 5, c: 37554}, 37560, 37562, {f: 4, c: 37565}, 37570, 37572, 37574,
+    {f: 3, c: 37577}, {f: 2, c: 37581}, {f: 2, c: 37584}, {f: 10, c: 37587},
+    37598, {f: 3, c: 37600}, 37607, 37609, {f: 2, c: 37611}, {f: 4, c: 37618},
+    37623, {f: 3, c: 37625}, {f: 4, c: 37629}, {f: 4, c: 37634},
+    {f: 7, c: 37641}, 37649, {f: 2, c: 37651}, {f: 2, c: 37654},
+    {f: 3, c: 37660}, 37665, {f: 3, c: 37667}, 37671, {f: 2, c: 37673},
+    {f: 2, c: 37676}, {f: 2, c: 37680}, {f: 2, c: 37684}, 37687,
+    {f: 5, c: 37689}, 37695, 37698, {f: 2, c: 37700}, {f: 3, c: 37704}, 37708,
+    {f: 6, c: 37710}, {f: 3, c: 37717}, {f: 2, c: 37721}, {f: 8, c: 37724},
+    {f: 3, c: 37734}, 37739, {f: 3, c: 37741}, {f: 4, c: 37745},
+    {f: 3, c: 37751}, {f: 3, c: 37755}, {f: 3, c: 37759}, 37763,
+    {f: 2, c: 37765}, {f: 2, c: 37768}, {f: 4, c: 37771}, {f: 6, c: 37776},
+    37783, {f: 9, c: 37785}, {f: 2, c: 37796}, 37800, 37803, 37805, 37807,
+    {f: 2, c: 37809}, 37812, {f: 2, c: 37814}, {f: 6, c: 37817},
+    {f: 3, c: 37824}, {f: 3, c: 37828}, 37833, 37835, {f: 3, c: 37838},
+    {f: 4, c: 37842}, {f: 3, c: 37849}, 37856, 37859, {f: 3, c: 37861},
+    {f: 12, c: 37865}, 37878, 37880, {f: 9, c: 37882}, {f: 7, c: 37892},
+    {f: 4, c: 37900}, 37905, {f: 3, c: 37909}, {f: 3, c: 37914},
+    {f: 2, c: 37918}, {f: 5, c: 37921}, {f: 5, c: 37929}, {f: 3, c: 37935},
+    37940, {f: 2, c: 37942}, 37945, {f: 3, c: 37947}, {f: 4, c: 37952},
+    {f: 5, c: 37957}, 37963, {f: 5, c: 37965}, 37971, {f: 11, c: 37973},
+    {f: 2, c: 37985}, 37988, {f: 5, c: 37990}, 37996, {f: 2, c: 37998}, 38001,
+    {f: 4, c: 38003}, 38008, {f: 2, c: 38010}, {f: 5, c: 38016}, 38033, 38038,
+    38040, 38087, 38095, {f: 2, c: 38099}, 38106, 38118, 38139, 38172, 38176,
+    38183, 38195, 38205, 38211, 38216, 38219, 38229, 38234, 38240, 38254,
+    {f: 2, c: 38260}, {f: 7, c: 38264}, 38273, {f: 2, c: 38276},
+    {f: 2, c: 38279}, 38282, 38285, 38288, 38290, {f: 3, c: 38293},
+    {f: 8, c: 38297}, 38306, {f: 2, c: 38310}, 38314, {f: 4, c: 38318},
+    {f: 3, c: 38323}, {f: 2, c: 38327}, 38330, {f: 3, c: 38336},
+    {f: 2, c: 38340}, 38343, 38345, {f: 3, c: 38349}, {f: 3, c: 38353},
+    {f: 5, c: 38359}, 38365, {f: 2, c: 38367}, {f: 2, c: 38371},
+    {f: 2, c: 38374}, 38380, 38399, 38407, 38419, 38424, 38427, 38430, 38432,
+    {f: 7, c: 38435}, {f: 3, c: 38443}, {f: 2, c: 38447}, {f: 4, c: 38455},
+    38462, 38465, 38467, 38474, {f: 2, c: 38478}, {f: 3, c: 38481},
+    {f: 2, c: 38486}, {f: 2, c: 38489}, 38492, 38494, 38496, {f: 2, c: 38501},
+    38507, {f: 3, c: 38509}, 38513, {f: 4, c: 38521}, {f: 7, c: 38526}, 38535,
+    38537, 38540, {f: 3, c: 38545}, 38550, 38554, {f: 10, c: 38557}, 38569,
+    {f: 5, c: 38571}, 38578, 38581, 38583, 38586, 38591, {f: 2, c: 38594},
+    38600, {f: 2, c: 38602}, {f: 2, c: 38608}, {f: 2, c: 38611},
+    {f: 2, c: 38615}, 38618, {f: 3, c: 38621}, 38625, {f: 4, c: 38628},
+    {f: 4, c: 38635}, {f: 2, c: 38640}, {f: 2, c: 38644}, 38648, 38650,
+    {f: 2, c: 38652}, 38655, {f: 2, c: 38658}, 38661, {f: 3, c: 38666},
+    {f: 3, c: 38672}, {f: 2, c: 38676}, {f: 5, c: 38679}, 38685,
+    {f: 8, c: 38687}, {f: 2, c: 38696}, {f: 2, c: 38699}, {f: 2, c: 38702},
+    38705, {f: 5, c: 38707}, {f: 3, c: 38714}, {f: 3, c: 38719}, 38723,
+    {f: 3, c: 38725}, {f: 8, c: 38729}, [12205, 38737], {f: 2, c: 38740},
+    {f: 2, c: 38743}, {f: 2, c: 38748}, 38751, {f: 2, c: 38755},
+    {f: 2, c: 38758}, {f: 9, c: 38762}, 38773, {f: 5, c: 38775},
+    {f: 8, c: 38781}, {f: 5, c: 38790}, 38796, 38798, 38800, 38803,
+    {f: 3, c: 38805}, {f: 7, c: 38809}, {f: 2, c: 38817}, {f: 2, c: 38820},
+    {f: 4, c: 38823}, 38828, 38830, {f: 2, c: 38832}, 38835, {f: 8, c: 38837},
+    {f: 5, c: 38846}, {f: 2, c: 38852}, {f: 2, c: 38855}, 38858,
+    {f: 6, c: 38861}, {f: 5, c: 38868}, {f: 2, c: 38874}, 38877,
+    {f: 7, c: 38879}, 38888, {f: 5, c: 38894}, 38900, {f: 8, c: 38903}, 38912,
+    38916, 38921, 38923, 38925, {f: 3, c: 38932}, {f: 3, c: 38937},
+    {f: 4, c: 38941}, {f: 2, c: 38946}, 38949, {f: 6, c: 38951},
+    {f: 2, c: 38958}, {f: 6, c: 38961}, {f: 2, c: 38969}, 38972,
+    {f: 8, c: 38974}, {f: 5, c: 38983}, {f: 4, c: 38991}, {f: 3, c: 38997},
+    39002, {f: 2, c: 39004}, {f: 3, c: 39007}, {f: 2, c: 39011}, 39014,
+    {f: 3, c: 39016}, {f: 2, c: 39021}, 39026, 39051, 39054, 39058, 39061,
+    39065, 39075, {f: 5, c: 39081}, 39088, 39090, {f: 2, c: 39092},
+    {f: 5, c: 39095}, {f: 7, c: 39101}, 39109, 39111, {f: 5, c: 39113},
+    {f: 2, c: 39119}, 39124, {f: 2, c: 39126}, {f: 2, c: 39132}, 39137,
+    {f: 4, c: 39139}, 39148, 39150, {f: 2, c: 39152}, 39155, {f: 7, c: 39157},
+    {f: 4, c: 39167}, 39172, {f: 3, c: 39174}, 39179, {f: 2, c: 39182},
+    {f: 4, c: 39188}, {f: 2, c: 39193}, {f: 2, c: 39196}, {f: 2, c: 39199},
+    {f: 6, c: 39202}, {f: 5, c: 39209}, {f: 4, c: 39215}, {f: 3, c: 39220},
+    {f: 4, c: 39224}, 39229, {f: 3, c: 39232}, 39236, {f: 2, c: 39238},
+    {f: 4, c: 39245}, 39251, 39254, {f: 4, c: 39256}, 39261, {f: 3, c: 39263},
+    39268, 39270, 39283, {f: 2, c: 39288}, 39291, 39294, {f: 2, c: 39298},
+    39305, 39308, 39310, {f: 11, c: 39322}, {f: 2, c: 39334}, {f: 3, c: 39337},
+    {f: 2, c: 39343}, 39346, {f: 12, c: 39349}, {f: 14, c: 39362}, 39379,
+    {f: 2, c: 39382}, 39386, 39388, 39390, 39392, {f: 10, c: 39395},
+    {f: 3, c: 39406}, {f: 13, c: 39410}, 39424, {f: 3, c: 39426},
+    {f: 7, c: 39430}, {f: 6, c: 39440}, {f: 2, c: 39447}, {f: 17, c: 39450},
+    39468, 39471, {f: 5, c: 39473}, {f: 5, c: 39481}, 39487, {f: 4, c: 39494},
+    {f: 2, c: 39499}, 39502, {f: 5, c: 39504}, 39510, {f: 2, c: 39512},
+    {f: 3, c: 39516}, {f: 2, c: 39520}, 39523, {f: 4, c: 39526}, 39531, 39538,
+    39555, 39561, {f: 2, c: 39565}, {f: 2, c: 39572}, 39577, 39590,
+    {f: 6, c: 39593}, {f: 4, c: 39602}, 39609, 39611, {f: 3, c: 39613},
+    {f: 2, c: 39619}, {f: 5, c: 39622}, {f: 2, c: 39629}, 39632, 39639,
+    {f: 6, c: 39641}, 39648, {f: 4, c: 39650}, {f: 4, c: 39655}, 39660,
+    {f: 9, c: 39664}, 39674, {f: 7, c: 39676}, {f: 2, c: 39684}, 39687,
+    {f: 4, c: 39689}, 39694, {f: 3, c: 39696}, {f: 6, c: 39700},
+    {f: 4, c: 39707}, {f: 2, c: 39712}, 39716, 39718, 39720, {f: 4, c: 39722},
+    39728, {f: 8, c: 39731}, {f: 4, c: 39741}, 39750, {f: 3, c: 39754}, 39760,
+    {f: 2, c: 39762}, {f: 3, c: 39765}, 39769, {f: 20, c: 39771},
+    {f: 4, c: 39792}, {f: 2, c: 39797}, {f: 9, c: 39800}, 39810,
+    {f: 10, c: 39812}, 39823, {f: 7, c: 39827}, {f: 2, c: 39835},
+    {f: 11, c: 39839}, 39852, {f: 17, c: 39855}, {f: 5, c: 39874}, 39880,
+    {f: 9, c: 39883}, 39893, {f: 4, c: 39895}, 39900, {f: 3, c: 39902}, 39907,
+    {f: 2, c: 39909}, 39913, {f: 4, c: 39916}, {f: 3, c: 39921},
+    {f: 8, c: 39925}, 39934, {f: 8, c: 39936}, {f: 3, c: 39946},
+    {f: 2, c: 39950}, 39953, {f: 12, c: 39956}, {f: 2, c: 39969}, 39972,
+    {f: 2, c: 39974}, {f: 3, c: 39978}, {f: 3, c: 39982}, 39988, 39990, 39992,
+    39994, {f: 2, c: 39996}, {f: 6, c: 39999}, {f: 2, c: 40006},
+    {f: 8, c: 40010}, 40019, 40021, {f: 4, c: 40025}, 40030, {f: 7, c: 40032},
+    {f: 5, c: 40040}, {f: 10, c: 40046}, 40057, 40059, {f: 2, c: 40061}, 40064,
+    {f: 2, c: 40067}, {f: 2, c: 40073}, 40076, 40079, 40083, {f: 4, c: 40086},
+    40093, 40106, 40108, 40111, 40121, {f: 5, c: 40126}, {f: 2, c: 40136},
+    {f: 2, c: 40145}, {f: 2, c: 40154}, {f: 2, c: 40160}, {f: 2, c: 40163},
+    {f: 3, c: 40166}, {f: 2, c: 40170}, {f: 6, c: 40173}, 40181,
+    {f: 15, c: 40183}, 40200, {f: 11, c: 40202}, {f: 5, c: 40214}, 40220,
+    40222, {f: 3, c: 40224}, {f: 2, c: 40228}, 40231, {f: 6, c: 40233},
+    {f: 10, c: 40241}, {f: 3, c: 40252}, {f: 2, c: 40256}, {f: 14, c: 40259},
+    {f: 8, c: 40276}, {f: 2, c: 40286}, {f: 8, c: 40290}, 40299,
+    {f: 2, c: 40301}, {f: 2, c: 40304}, {f: 20, c: 40307}, 40328,
+    {f: 9, c: 40330}, {f: 4, c: 40340}, 40345, {f: 10, c: 40347},
+    {f: 3, c: 40358}, {f: 5, c: 40362}, {f: 4, c: 40368}, {f: 6, c: 40373},
+    {f: 3, c: 40381}, 40385, 40387, {f: 14, c: 40389}, {f: 3, c: 40404}, 40408,
+    {f: 10, c: 40411}, {f: 8, c: 40423}, {f: 2, c: 40432}, {f: 4, c: 40436},
+    {f: 17, c: 40443}, {f: 8, c: 40461}, {f: 4, c: 40470}, 40476, 40484, 40487,
+    40494, 40496, 40500, {f: 2, c: 40507}, 40512, 40525, 40528,
+    {f: 3, c: 40530}, 40534, 40537, 40541, {f: 4, c: 40543}, 40549,
+    {f: 2, c: 40558}, 40562, 40564, {f: 3, c: 40566}, 40571, {f: 2, c: 40576},
+    {f: 4, c: 40579}, {f: 2, c: 40585}, {f: 6, c: 40588}, {f: 3, c: 40596},
+    {f: 5, c: 40600}, 40606, {f: 5, c: 40608}, {f: 2, c: 40615},
+    {f: 5, c: 40618}, {f: 4, c: 40624}, {f: 2, c: 40630}, {f: 2, c: 40633},
+    40636, {f: 4, c: 40639}, [12232, 40643], {f: 4, c: 40645},
+    {f: 2, c: 40650}, 40656, {f: 2, c: 40658}, {f: 3, c: 40661},
+    {f: 2, c: 40665}, 40673, {f: 2, c: 40675}, 40678, {f: 4, c: 40683},
+    {f: 2, c: 40688}, 40691, {f: 2, c: 40693}, 40696, 40698, {f: 9, c: 40704},
+    40714, 40716, 40719, {f: 2, c: 40721}, 40724, 40726, 40728,
+    {f: 6, c: 40730}, 40737, {f: 9, c: 40739}, {f: 2, c: 40749},
+    {f: 7, c: 40752}, 40760, 40762, 40764, {f: 5, c: 40767}, {f: 5, c: 40773},
+    {f: 3, c: 40780}, 40787, {f: 4, c: 40789}, {f: 2, c: 40794},
+    {f: 2, c: 40797}, 40802, {f: 2, c: 40804}, {f: 3, c: 40807}, 40811,
+    {f: 5, c: 40813}, {f: 4, c: 40819}, {f: 7, c: 40824}, {f: 2, c: 40833},
+    {f: 2, c: 40846}, {f: 3, c: 40849}, {f: 3, c: 40854}, {f: 2, c: 40861},
+    {f: 5, c: 40865}, 63788, {f: 3, c: 64013}, 64017, {f: 2, c: 64019}, 64024,
+    {f: 3, c: 64031}, {f: 2, c: 64035}, {f: 3, c: 64039}, 11905,
+    [59414, 131207], [59415, 131209], [59416, 131276], 11908, 13427, 13383,
+    11912, 11915, 59422, 13726, 13850, 13838, 11916, 11927, 14702, 14616,
+    59430, 14799, 14815, 14963, 14800, {f: 2, c: 59435}, 15182, 15470, 15584,
+    11943, [59441, 136663], 59442, 11946, 16470, 16735, 11950, 17207, 11955,
+    {f: 2, c: 11958}, [59451, 141711], 17329, 17324, 11963, 17373, 17622,
+    18017, 17996, [59459, 132361], 18211, 18217, 18300, 18317, 11978, 18759,
+    18810, 18813, {f: 2, c: 18818}, {f: 2, c: 18821}, 18847, 18843, 18871,
+    18870, [59476, 133533], [59477, 147966], 19619, {f: 3, c: 19615}, 19575,
+    19618, {f: 7, c: 19731}, 19886, 59492, {s: 226}, 8364, 165, 0, 0, 12351,
+    {s: 17}, 12436, {s: 14}, 12535, 12537, 12536, 12538, 0, {f: 3, c: 12339},
+    {f: 3, c: 12344}, {f: 3, c: 12586}, {f: 24, c: 12704}, 11904,
+    {f: 2, c: 11906}, {f: 3, c: 11909}, {f: 2, c: 11913}, {f: 10, c: 11917},
+    {f: 2, c: 11928}, {f: 12, c: 11931}, {f: 2, c: 11944}, {f: 3, c: 11947},
+    {f: 4, c: 11951}, {f: 2, c: 11956}, {f: 3, c: 11960}, {f: 14, c: 11964},
+    {f: 41, c: 11979}, {f: 71, c: 13312}, {f: 43, c: 13384},
+    {f: 298, c: 13428}, {f: 111, c: 13727}, {f: 11, c: 13839},
+    {f: 765, c: 13851}, {f: 85, c: 14617}, {f: 96, c: 14703},
+    {f: 14, c: 14801}, {f: 147, c: 14816}, {f: 218, c: 14964},
+    {f: 287, c: 15183}, {f: 113, c: 15471}, {f: 885, c: 15585},
+    {f: 264, c: 16471}, {f: 471, c: 16736}, {f: 116, c: 17208},
+    {f: 4, c: 17325}, {f: 43, c: 17330}, {f: 248, c: 17374},
+    {f: 373, c: 17623}, {f: 20, c: 17997}, {f: 193, c: 18018},
+    {f: 5, c: 18212}, {f: 82, c: 18218}, {f: 16, c: 18301}, {f: 441, c: 18318},
+    {f: 50, c: 18760}, {f: 2, c: 18811}, {f: 4, c: 18814}, 18820,
+    {f: 20, c: 18823}, {f: 3, c: 18844}, {f: 22, c: 18848}, {f: 703, c: 18872},
+    {f: 39, c: 19576}, {f: 111, c: 19620}, {f: 148, c: 19738},
+    {f: 7, c: 19887}]
+};
+
+
+
+var ColorSpace = (function ColorSpaceClosure() {
+  // Constructor should define this.numComps, this.defaultColor, this.name
+  function ColorSpace() {
+    error('should not call ColorSpace constructor');
+  }
+
+  ColorSpace.prototype = {
+    /**
+     * Converts the color value to the RGB color. The color components are
+     * located in the src array starting from the srcOffset. Returns the array
+     * of the rgb components, each value ranging from [0,255].
+     */
+    getRgb: function ColorSpace_getRgb(src, srcOffset) {
+      error('Should not call ColorSpace.getRgb');
+    },
+    /**
+     * Converts the color value to the RGB color, similar to the getRgb method.
+     * The result placed into the dest array starting from the destOffset.
+     */
+    getRgbItem: function ColorSpace_getRgb(src, srcOffset, dest, destOffset) {
+      error('Should not call ColorSpace.getRgbItem');
+    },
+    /**
+     * Converts the specified number of the color values to the RGB colors.
+     * The colors are located in the src array starting from the srcOffset.
+     * The result is placed into the dest array starting from the destOffset.
+     * The src array items shall be in [0,2^bits) range, the dest array items
+     * will be in [0,255] range.
+     */
+    getRgbBuffer: function ColorSpace_getRgbBuffer(src, srcOffset, count,
+                                                   dest, destOffset, bits) {
+      error('Should not call ColorSpace.getRgbBuffer');
+    },
+    /**
+     * Determines amount of the bytes is required to store the reslut of the
+     * conversion that done by the getRgbBuffer method.
+     */
+    getOutputLength: function ColorSpace_getOutputLength(inputLength) {
+      error('Should not call ColorSpace.getOutputLength');
+    },
+    /**
+     * Returns true if source data will be equal the result/output data.
+     */
+    isPassthrough: function ColorSpace_isPassthrough(bits) {
+      return false;
+    },
+    /**
+     * Creates the output buffer and converts the specified number of the color
+     * values to the RGB colors, similar to the getRgbBuffer.
+     */
+    createRgbBuffer: function ColorSpace_createRgbBuffer(src, srcOffset,
+                                                         count, bits) {
+      if (this.isPassthrough(bits)) {
+        return src.subarray(srcOffset);
+      }
+      var dest = new Uint8Array(count * 3);
+      var numComponentColors = 1 << bits;
+      // Optimization: create a color map when there is just one component and
+      // we are converting more colors than the size of the color map. We
+      // don't build the map if the colorspace is gray or rgb since those
+      // methods are faster than building a map. This mainly offers big speed
+      // ups for indexed and alternate colorspaces.
+      if (this.numComps === 1 && count > numComponentColors &&
+          this.name !== 'DeviceGray' && this.name !== 'DeviceRGB') {
+        // TODO it may be worth while to cache the color map. While running
+        // testing I never hit a cache so I will leave that out for now (perhaps
+        // we are reparsing colorspaces too much?).
+        var allColors = bits <= 8 ? new Uint8Array(numComponentColors) :
+                                    new Uint16Array(numComponentColors);
+        for (var i = 0; i < numComponentColors; i++) {
+          allColors[i] = i;
+        }
+        var colorMap = new Uint8Array(numComponentColors * 3);
+        this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bits);
+
+        var destOffset = 0;
+        for (var i = 0; i < count; ++i) {
+          var key = src[srcOffset++] * 3;
+          dest[destOffset++] = colorMap[key];
+          dest[destOffset++] = colorMap[key + 1];
+          dest[destOffset++] = colorMap[key + 2];
+        }
+        return dest;
+      }
+      this.getRgbBuffer(src, srcOffset, count, dest, 0, bits);
+      return dest;
+    },
+    /**
+     * True if the colorspace has components in the default range of [0, 1].
+     * This should be true for all colorspaces except for lab color spaces
+     * which are [0,100], [-128, 127], [-128, 127].
+     */
+    usesZeroToOneRange: true
+  };
+
+  ColorSpace.parse = function ColorSpace_parse(cs, xref, res) {
+    var IR = ColorSpace.parseToIR(cs, xref, res);
+    if (IR instanceof AlternateCS)
+      return IR;
+
+    return ColorSpace.fromIR(IR);
+  };
+
+  ColorSpace.fromIR = function ColorSpace_fromIR(IR) {
+    var name = isArray(IR) ? IR[0] : IR;
+
+    switch (name) {
+      case 'DeviceGrayCS':
+        return this.singletons.gray;
+      case 'DeviceRgbCS':
+        return this.singletons.rgb;
+      case 'DeviceCmykCS':
+        return this.singletons.cmyk;
+      case 'PatternCS':
+        var basePatternCS = IR[1];
+        if (basePatternCS)
+          basePatternCS = ColorSpace.fromIR(basePatternCS);
+        return new PatternCS(basePatternCS);
+      case 'IndexedCS':
+        var baseIndexedCS = IR[1];
+        var hiVal = IR[2];
+        var lookup = IR[3];
+        return new IndexedCS(ColorSpace.fromIR(baseIndexedCS), hiVal, lookup);
+      case 'AlternateCS':
+        var numComps = IR[1];
+        var alt = IR[2];
+        var tintFnIR = IR[3];
+
+        return new AlternateCS(numComps, ColorSpace.fromIR(alt),
+                                PDFFunction.fromIR(tintFnIR));
+      case 'LabCS':
+        var whitePoint = IR[1].WhitePoint;
+        var blackPoint = IR[1].BlackPoint;
+        var range = IR[1].Range;
+        return new LabCS(whitePoint, blackPoint, range);
+      default:
+        error('Unkown name ' + name);
+    }
+    return null;
+  };
+
+  ColorSpace.parseToIR = function ColorSpace_parseToIR(cs, xref, res) {
+    if (isName(cs)) {
+      var colorSpaces = res.get('ColorSpace');
+      if (isDict(colorSpaces)) {
+        var refcs = colorSpaces.get(cs.name);
+        if (refcs)
+          cs = refcs;
+      }
+    }
+
+    cs = xref.fetchIfRef(cs);
+    var mode;
+
+    if (isName(cs)) {
+      mode = cs.name;
+      this.mode = mode;
+
+      switch (mode) {
+        case 'DeviceGray':
+        case 'G':
+          return 'DeviceGrayCS';
+        case 'DeviceRGB':
+        case 'RGB':
+          return 'DeviceRgbCS';
+        case 'DeviceCMYK':
+        case 'CMYK':
+          return 'DeviceCmykCS';
+        case 'Pattern':
+          return ['PatternCS', null];
+        default:
+          error('unrecognized colorspace ' + mode);
+      }
+    } else if (isArray(cs)) {
+      mode = cs[0].name;
+      this.mode = mode;
+
+      switch (mode) {
+        case 'DeviceGray':
+        case 'G':
+          return 'DeviceGrayCS';
+        case 'DeviceRGB':
+        case 'RGB':
+          return 'DeviceRgbCS';
+        case 'DeviceCMYK':
+        case 'CMYK':
+          return 'DeviceCmykCS';
+        case 'CalGray':
+          return 'DeviceGrayCS';
+        case 'CalRGB':
+          return 'DeviceRgbCS';
+        case 'ICCBased':
+          var stream = xref.fetchIfRef(cs[1]);
+          var dict = stream.dict;
+          var numComps = dict.get('N');
+          if (numComps == 1)
+            return 'DeviceGrayCS';
+          if (numComps == 3)
+            return 'DeviceRgbCS';
+          if (numComps == 4)
+            return 'DeviceCmykCS';
+          break;
+        case 'Pattern':
+          var basePatternCS = cs[1];
+          if (basePatternCS)
+            basePatternCS = ColorSpace.parseToIR(basePatternCS, xref, res);
+          return ['PatternCS', basePatternCS];
+        case 'Indexed':
+        case 'I':
+          var baseIndexedCS = ColorSpace.parseToIR(cs[1], xref, res);
+          var hiVal = cs[2] + 1;
+          var lookup = xref.fetchIfRef(cs[3]);
+          if (isStream(lookup)) {
+            lookup = lookup.getBytes();
+          }
+          return ['IndexedCS', baseIndexedCS, hiVal, lookup];
+        case 'Separation':
+        case 'DeviceN':
+          var name = cs[1];
+          var numComps = 1;
+          if (isName(name))
+            numComps = 1;
+          else if (isArray(name))
+            numComps = name.length;
+          var alt = ColorSpace.parseToIR(cs[2], xref, res);
+          var tintFnIR = PDFFunction.getIR(xref, xref.fetchIfRef(cs[3]));
+          return ['AlternateCS', numComps, alt, tintFnIR];
+        case 'Lab':
+          var params = cs[1].getAll();
+          return ['LabCS', params];
+        default:
+          error('unimplemented color space object "' + mode + '"');
+      }
+    } else {
+      error('unrecognized color space object: "' + cs + '"');
+    }
+    return null;
+  };
+  /**
+   * Checks if a decode map matches the default decode map for a color space.
+   * This handles the general decode maps where there are two values per
+   * component. e.g. [0, 1, 0, 1, 0, 1] for a RGB color.
+   * This does not handle Lab, Indexed, or Pattern decode maps since they are
+   * slightly different.
+   * @param {Array} decode Decode map (usually from an image).
+   * @param {Number} n Number of components the color space has.
+   */
+  ColorSpace.isDefaultDecode = function ColorSpace_isDefaultDecode(decode, n) {
+    if (!decode)
+      return true;
+
+    if (n * 2 !== decode.length) {
+      warn('The decode map is not the correct length');
+      return true;
+    }
+    for (var i = 0, ii = decode.length; i < ii; i += 2) {
+      if (decode[i] !== 0 || decode[i + 1] != 1)
+        return false;
+    }
+    return true;
+  };
+
+  ColorSpace.singletons = {
+    get gray() {
+      return shadow(this, 'gray', new DeviceGrayCS());
+    },
+    get rgb() {
+      return shadow(this, 'rgb', new DeviceRgbCS());
+    },
+    get cmyk() {
+      return shadow(this, 'cmyk', new DeviceCmykCS());
+    }
+  };
+
+  return ColorSpace;
+})();
+
+/**
+ * Alternate color space handles both Separation and DeviceN color spaces.  A
+ * Separation color space is actually just a DeviceN with one color component.
+ * Both color spaces use a tinting function to convert colors to a base color
+ * space.
+ */
+var AlternateCS = (function AlternateCSClosure() {
+  function AlternateCS(numComps, base, tintFn) {
+    this.name = 'Alternate';
+    this.numComps = numComps;
+    this.defaultColor = new Float32Array(numComps);
+    for (var i = 0; i < numComps; ++i) {
+      this.defaultColor[i] = 1;
+    }
+    this.base = base;
+    this.tintFn = tintFn;
+  }
+
+  AlternateCS.prototype = {
+    getRgb: function AlternateCS_getRgb(src, srcOffset) {
+      var rgb = new Uint8Array(3);
+      this.getRgbItem(src, srcOffset, rgb, 0);
+      return rgb;
+    },
+    getRgbItem: function AlternateCS_getRgbItem(src, srcOffset,
+                                                dest, destOffset) {
+      var baseNumComps = this.base.numComps;
+      var input = 'subarray' in src ?
+        src.subarray(srcOffset, srcOffset + this.numComps) :
+        Array.prototype.slice.call(src, srcOffset, srcOffset + this.numComps);
+      var tinted = this.tintFn(input);
+      this.base.getRgbItem(tinted, 0, dest, destOffset);
+    },
+    getRgbBuffer: function AlternateCS_getRgbBuffer(src, srcOffset, count,
+                                                    dest, destOffset, bits) {
+      var tintFn = this.tintFn;
+      var base = this.base;
+      var scale = 1 / ((1 << bits) - 1);
+      var baseNumComps = base.numComps;
+      var usesZeroToOneRange = base.usesZeroToOneRange;
+      var isPassthrough = base.isPassthrough(8) || !usesZeroToOneRange;
+      var pos = isPassthrough ? destOffset : 0;
+      var baseBuf = isPassthrough ? dest : new Uint8Array(baseNumComps * count);
+      var numComps = this.numComps;
+
+      var scaled = new Float32Array(numComps);
+      for (var i = 0; i < count; i++) {
+        for (var j = 0; j < numComps; j++) {
+          scaled[j] = src[srcOffset++] * scale;
+        }
+        var tinted = tintFn(scaled);
+        if (usesZeroToOneRange) {
+          for (var j = 0; j < baseNumComps; j++) {
+            baseBuf[pos++] = tinted[j] * 255;
+          }
+        } else {
+          base.getRgbItem(tinted, 0, baseBuf, pos);
+          pos += baseNumComps;
+        }
+      }
+      if (!isPassthrough) {
+        base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8);
+      }
+    },
+    getOutputLength: function AlternateCS_getOutputLength(inputLength) {
+      return this.base.getOutputLength(inputLength *
+                                       this.base.numComps / this.numComps);
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    createRgbBuffer: ColorSpace.prototype.createRgbBuffer,
+    isDefaultDecode: function AlternateCS_isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+
+  return AlternateCS;
+})();
+
+var PatternCS = (function PatternCSClosure() {
+  function PatternCS(baseCS) {
+    this.name = 'Pattern';
+    this.base = baseCS;
+  }
+  PatternCS.prototype = {};
+
+  return PatternCS;
+})();
+
+var IndexedCS = (function IndexedCSClosure() {
+  function IndexedCS(base, highVal, lookup) {
+    this.name = 'Indexed';
+    this.numComps = 1;
+    this.defaultColor = new Uint8Array([0]);
+    this.base = base;
+    this.highVal = highVal;
+
+    var baseNumComps = base.numComps;
+    var length = baseNumComps * highVal;
+    var lookupArray;
+
+    if (isStream(lookup)) {
+      lookupArray = new Uint8Array(length);
+      var bytes = lookup.getBytes(length);
+      lookupArray.set(bytes);
+    } else if (isString(lookup)) {
+      lookupArray = new Uint8Array(length);
+      for (var i = 0; i < length; ++i)
+        lookupArray[i] = lookup.charCodeAt(i);
+    } else if (lookup instanceof Uint8Array || lookup instanceof Array) {
+      lookupArray = lookup;
+    } else {
+      error('Unrecognized lookup table: ' + lookup);
+    }
+    this.lookup = lookupArray;
+  }
+
+  IndexedCS.prototype = {
+    getRgb: function IndexedCS_getRgb(src, srcOffset) {
+      var numComps = this.base.numComps;
+      var start = src[srcOffset] * numComps;
+      return this.base.getRgb(this.lookup, start);
+    },
+    getRgbItem: function IndexedCS_getRgbItem(src, srcOffset,
+                                              dest, destOffset) {
+      var numComps = this.base.numComps;
+      var start = src[srcOffset] * numComps;
+      this.base.getRgbItem(this.lookup, start, dest, destOffset);
+    },
+    getRgbBuffer: function IndexedCS_getRgbBuffer(src, srcOffset, count,
+                                                  dest, destOffset) {
+      var base = this.base;
+      var numComps = base.numComps;
+      var outputDelta = base.getOutputLength(numComps);
+      var lookup = this.lookup;
+
+      for (var i = 0; i < count; ++i) {
+        var lookupPos = src[srcOffset++] * numComps;
+        base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8);
+        destOffset += outputDelta;
+      }
+    },
+    getOutputLength: function IndexedCS_getOutputLength(inputLength) {
+      return this.base.getOutputLength(inputLength * this.base.numComps);
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    createRgbBuffer: ColorSpace.prototype.createRgbBuffer,
+    isDefaultDecode: function IndexedCS_isDefaultDecode(decodeMap) {
+      // indexed color maps shouldn't be changed
+      return true;
+    },
+    usesZeroToOneRange: true
+  };
+  return IndexedCS;
+})();
+
+var DeviceGrayCS = (function DeviceGrayCSClosure() {
+  function DeviceGrayCS() {
+    this.name = 'DeviceGray';
+    this.numComps = 1;
+    this.defaultColor = new Float32Array([0]);
+  }
+
+  DeviceGrayCS.prototype = {
+    getRgb: function DeviceGrayCS_getRgb(src, srcOffset) {
+      var rgb = new Uint8Array(3);
+      this.getRgbItem(src, srcOffset, rgb, 0);
+      return rgb;
+    },
+    getRgbItem: function DeviceGrayCS_getRgbItem(src, srcOffset,
+                                                 dest, destOffset) {
+      var c = (src[srcOffset] * 255) | 0;
+      c = c < 0 ? 0 : c > 255 ? 255 : c;
+      dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c;
+    },
+    getRgbBuffer: function DeviceGrayCS_getRgbBuffer(src, srcOffset, count,
+                                                     dest, destOffset, bits) {
+      var scale = 255 / ((1 << bits) - 1);
+      var j = srcOffset, q = destOffset;
+      for (var i = 0; i < count; ++i) {
+        var c = (scale * src[j++]) | 0;
+        dest[q++] = c;
+        dest[q++] = c;
+        dest[q++] = c;
+      }
+    },
+    getOutputLength: function DeviceGrayCS_getOutputLength(inputLength) {
+      return inputLength * 3;
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    createRgbBuffer: ColorSpace.prototype.createRgbBuffer,
+    isDefaultDecode: function DeviceGrayCS_isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+  return DeviceGrayCS;
+})();
+
+var DeviceRgbCS = (function DeviceRgbCSClosure() {
+  function DeviceRgbCS() {
+    this.name = 'DeviceRGB';
+    this.numComps = 3;
+    this.defaultColor = new Float32Array([0, 0, 0]);
+  }
+  DeviceRgbCS.prototype = {
+    getRgb: function DeviceRgbCS_getRgb(src, srcOffset) {
+      var rgb = new Uint8Array(3);
+      this.getRgbItem(src, srcOffset, rgb, 0);
+      return rgb;
+    },
+    getRgbItem: function DeviceRgbCS_getRgbItem(src, srcOffset,
+                                                dest, destOffset) {
+      var r = (src[srcOffset] * 255) | 0;
+      var g = (src[srcOffset + 1] * 255) | 0;
+      var b = (src[srcOffset + 2] * 255) | 0;
+      dest[destOffset] = r < 0 ? 0 : r > 255 ? 255 : r;
+      dest[destOffset + 1] = g < 0 ? 0 : g > 255 ? 255 : g;
+      dest[destOffset + 2] = b < 0 ? 0 : b > 255 ? 255 : b;
+    },
+    getRgbBuffer: function DeviceRgbCS_getRgbBuffer(src, srcOffset, count,
+                                                    dest, destOffset, bits) {
+      var length = count * 3;
+      if (bits == 8) {
+        dest.set(src.subarray(srcOffset, srcOffset + length), destOffset);
+        return;
+      }
+      var scale = 255 / ((1 << bits) - 1);
+      var j = srcOffset, q = destOffset;
+      for (var i = 0; i < length; ++i) {
+        dest[q++] = (scale * src[j++]) | 0;
+      }
+    },
+    getOutputLength: function DeviceRgbCS_getOutputLength(inputLength) {
+      return inputLength;
+    },
+    isPassthrough: function DeviceRgbCS_isPassthrough(bits) {
+      return bits == 8;
+    },
+    createRgbBuffer: ColorSpace.prototype.createRgbBuffer,
+    isDefaultDecode: function DeviceRgbCS_isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+  return DeviceRgbCS;
+})();
+
+var DeviceCmykCS = (function DeviceCmykCSClosure() {
+  // The coefficients below was found using numerical analysis: the method of
+  // steepest descent for the sum((f_i - color_value_i)^2) for r/g/b colors,
+  // where color_value is the tabular value from the table of sampled RGB colors
+  // from CMYK US Web Coated (SWOP) colorspace, and f_i is the corresponding
+  // CMYK color conversion using the estimation below:
+  //   f(A, B,.. N) = Acc+Bcm+Ccy+Dck+c+Fmm+Gmy+Hmk+Im+Jyy+Kyk+Ly+Mkk+Nk+255
+  function convertToRgb(src, srcOffset, srcScale, dest, destOffset) {
+    var c = src[srcOffset + 0] * srcScale;
+    var m = src[srcOffset + 1] * srcScale;
+    var y = src[srcOffset + 2] * srcScale;
+    var k = src[srcOffset + 3] * srcScale;
+
+    var r =
+      c * (-4.387332384609988 * c + 54.48615194189176 * m +
+           18.82290502165302 * y + 212.25662451639585 * k +
+           -285.2331026137004) +
+      m * (1.7149763477362134 * m - 5.6096736904047315 * y +
+           -17.873870861415444 * k - 5.497006427196366) +
+      y * (-2.5217340131683033 * y - 21.248923337353073 * k +
+           17.5119270841813) +
+      k * (-21.86122147463605 * k - 189.48180835922747) + 255;
+    var g =
+      c * (8.841041422036149 * c + 60.118027045597366 * m +
+           6.871425592049007 * y + 31.159100130055922 * k +
+           -79.2970844816548) +
+      m * (-15.310361306967817 * m + 17.575251261109482 * y +
+           131.35250912493976 * k - 190.9453302588951) +
+      y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) +
+      k * (-20.737325471181034 * k - 187.80453709719578) + 255;
+    var b =
+      c * (0.8842522430003296 * c + 8.078677503112928 * m +
+           30.89978309703729 * y - 0.23883238689178934 * k +
+           -14.183576799673286) +
+      m * (10.49593273432072 * m + 63.02378494754052 * y +
+           50.606957656360734 * k - 112.23884253719248) +
+      y * (0.03296041114873217 * y + 115.60384449646641 * k +
+           -193.58209356861505) +
+      k * (-22.33816807309886 * k - 180.12613974708367) + 255;
+
+    dest[destOffset] = r > 255 ? 255 : r < 0 ? 0 : r;
+    dest[destOffset + 1] = g > 255 ? 255 : g < 0 ? 0 : g;
+    dest[destOffset + 2] = b > 255 ? 255 : b < 0 ? 0 : b;
+  }
+
+  function DeviceCmykCS() {
+    this.name = 'DeviceCMYK';
+    this.numComps = 4;
+    this.defaultColor = new Float32Array([0, 0, 0, 1]);
+  }
+  DeviceCmykCS.prototype = {
+    getRgb: function DeviceCmykCS_getRgb(src, srcOffset) {
+      var rgb = new Uint8Array(3);
+      convertToRgb(src, srcOffset, 1, rgb, 0);
+      return rgb;
+    },
+    getRgbItem: function DeviceCmykCS_getRgbItem(src, srcOffset,
+                                                 dest, destOffset) {
+      convertToRgb(src, srcOffset, 1, dest, destOffset);
+    },
+    getRgbBuffer: function DeviceCmykCS_getRgbBuffer(src, srcOffset, count,
+                                                     dest, destOffset, bits) {
+      var scale = 1 / ((1 << bits) - 1);
+      for (var i = 0; i < count; i++) {
+        convertToRgb(src, srcOffset, scale, dest, destOffset);
+        srcOffset += 4;
+        destOffset += 3;
+      }
+    },
+    getOutputLength: function DeviceCmykCS_getOutputLength(inputLength) {
+      return (inputLength >> 2) * 3;
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    createRgbBuffer: ColorSpace.prototype.createRgbBuffer,
+    isDefaultDecode: function DeviceCmykCS_isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+
+  return DeviceCmykCS;
+})();
+
+//
+// LabCS: Based on "PDF Reference, Sixth Ed", p.250
+//
+var LabCS = (function LabCSClosure() {
+  function LabCS(whitePoint, blackPoint, range) {
+    this.name = 'Lab';
+    this.numComps = 3;
+    this.defaultColor = new Float32Array([0, 0, 0]);
+
+    if (!whitePoint)
+      error('WhitePoint missing - required for color space Lab');
+    blackPoint = blackPoint || [0, 0, 0];
+    range = range || [-100, 100, -100, 100];
+
+    // Translate args to spec variables
+    this.XW = whitePoint[0];
+    this.YW = whitePoint[1];
+    this.ZW = whitePoint[2];
+    this.amin = range[0];
+    this.amax = range[1];
+    this.bmin = range[2];
+    this.bmax = range[3];
+
+    // These are here just for completeness - the spec doesn't offer any
+    // formulas that use BlackPoint in Lab
+    this.XB = blackPoint[0];
+    this.YB = blackPoint[1];
+    this.ZB = blackPoint[2];
+
+    // Validate vars as per spec
+    if (this.XW < 0 || this.ZW < 0 || this.YW !== 1)
+      error('Invalid WhitePoint components, no fallback available');
+
+    if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {
+      info('Invalid BlackPoint, falling back to default');
+      this.XB = this.YB = this.ZB = 0;
+    }
+
+    if (this.amin > this.amax || this.bmin > this.bmax) {
+      info('Invalid Range, falling back to defaults');
+      this.amin = -100;
+      this.amax = 100;
+      this.bmin = -100;
+      this.bmax = 100;
+    }
+  }
+
+  // Function g(x) from spec
+  function fn_g(x) {
+    if (x >= 6 / 29)
+      return x * x * x;
+    else
+      return (108 / 841) * (x - 4 / 29);
+  }
+
+  function decode(value, high1, low2, high2) {
+    return low2 + (value) * (high2 - low2) / (high1);
+  }
+
+  // If decoding is needed maxVal should be 2^bits per component - 1.
+  function convertToRgb(cs, src, srcOffset, maxVal, dest, destOffset) {
+    // XXX: Lab input is in the range of [0, 100], [amin, amax], [bmin, bmax]
+    // not the usual [0, 1]. If a command like setFillColor is used the src
+    // values will already be within the correct range. However, if we are
+    // converting an image we have to map the values to the correct range given
+    // above.
+    // Ls,as,bs <---> L*,a*,b* in the spec
+    var Ls = src[srcOffset];
+    var as = src[srcOffset + 1];
+    var bs = src[srcOffset + 2];
+    if (maxVal !== false) {
+      Ls = decode(Ls, maxVal, 0, 100);
+      as = decode(as, maxVal, cs.amin, cs.amax);
+      bs = decode(bs, maxVal, cs.bmin, cs.bmax);
+    }
+
+    // Adjust limits of 'as' and 'bs'
+    as = as > cs.amax ? cs.amax : as < cs.amin ? cs.amin : as;
+    bs = bs > cs.bmax ? cs.bmax : bs < cs.bmin ? cs.bmin : bs;
+
+    // Computes intermediate variables X,Y,Z as per spec
+    var M = (Ls + 16) / 116;
+    var L = M + (as / 500);
+    var N = M - (bs / 200);
+
+    var X = cs.XW * fn_g(L);
+    var Y = cs.YW * fn_g(M);
+    var Z = cs.ZW * fn_g(N);
+
+    var r, g, b;
+    // Using different conversions for D50 and D65 white points,
+    // per http://www.color.org/srgb.pdf
+    if (cs.ZW < 1) {
+      // Assuming D50 (X=0.9642, Y=1.00, Z=0.8249)
+      r = X * 3.1339 + Y * -1.6170 + Z * -0.4906;
+      g = X * -0.9785 + Y * 1.9160 + Z * 0.0333;
+      b = X * 0.0720 + Y * -0.2290 + Z * 1.4057;
+    } else {
+      // Assuming D65 (X=0.9505, Y=1.00, Z=1.0888)
+      r = X * 3.2406 + Y * -1.5372 + Z * -0.4986;
+      g = X * -0.9689 + Y * 1.8758 + Z * 0.0415;
+      b = X * 0.0557 + Y * -0.2040 + Z * 1.0570;
+    }
+    // clamp color values to [0,1] range then convert to [0,255] range.
+    dest[destOffset] = Math.sqrt(r < 0 ? 0 : r > 1 ? 1 : r) * 255;
+    dest[destOffset + 1] = Math.sqrt(g < 0 ? 0 : g > 1 ? 1 : g) * 255;
+    dest[destOffset + 2] = Math.sqrt(b < 0 ? 0 : b > 1 ? 1 : b) * 255;
+  }
+
+  LabCS.prototype = {
+    getRgb: function LabCS_getRgb(src, srcOffset) {
+      var rgb = new Uint8Array(3);
+      convertToRgb(this, src, srcOffset, false, rgb, 0);
+      return rgb;
+    },
+    getRgbItem: function LabCS_getRgbItem(src, srcOffset, dest, destOffset) {
+      convertToRgb(this, src, srcOffset, false, dest, destOffset);
+    },
+    getRgbBuffer: function LabCS_getRgbBuffer(src, srcOffset, count,
+                                              dest, destOffset, bits) {
+      var maxVal = (1 << bits) - 1;
+      for (var i = 0; i < count; i++) {
+        convertToRgb(this, src, srcOffset, maxVal, dest, destOffset);
+        srcOffset += 3;
+        destOffset += 3;
+      }
+    },
+    getOutputLength: function LabCS_getOutputLength(inputLength) {
+      return inputLength;
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    isDefaultDecode: function LabCS_isDefaultDecode(decodeMap) {
+      // XXX: Decoding is handled with the lab conversion because of the strange
+      // ranges that are used.
+      return true;
+    },
+    usesZeroToOneRange: false
+  };
+  return LabCS;
+})();
+
+
+var ARCFourCipher = (function ARCFourCipherClosure() {
+  function ARCFourCipher(key) {
+    this.a = 0;
+    this.b = 0;
+    var s = new Uint8Array(256);
+    var i, j = 0, tmp, keyLength = key.length;
+    for (i = 0; i < 256; ++i)
+      s[i] = i;
+    for (i = 0; i < 256; ++i) {
+      tmp = s[i];
+      j = (j + tmp + key[i % keyLength]) & 0xFF;
+      s[i] = s[j];
+      s[j] = tmp;
+    }
+    this.s = s;
+  }
+
+  ARCFourCipher.prototype = {
+    encryptBlock: function ARCFourCipher_encryptBlock(data) {
+      var i, n = data.length, tmp, tmp2;
+      var a = this.a, b = this.b, s = this.s;
+      var output = new Uint8Array(n);
+      for (i = 0; i < n; ++i) {
+        a = (a + 1) & 0xFF;
+        tmp = s[a];
+        b = (b + tmp) & 0xFF;
+        tmp2 = s[b];
+        s[a] = tmp2;
+        s[b] = tmp;
+        output[i] = data[i] ^ s[(tmp + tmp2) & 0xFF];
+      }
+      this.a = a;
+      this.b = b;
+      return output;
+    }
+  };
+  ARCFourCipher.prototype.decryptBlock = ARCFourCipher.prototype.encryptBlock;
+
+  return ARCFourCipher;
+})();
+
+var calculateMD5 = (function calculateMD5Closure() {
+  var r = new Uint8Array([
+    7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,
+    5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,
+    4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,
+    6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]);
+
+  var k = new Int32Array([
+    -680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426,
+    -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162,
+    1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632,
+    643717713, -373897302, -701558691, 38016083, -660478335, -405537848,
+    568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784,
+    1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556,
+    -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222,
+    -722521979, 76029189, -640364487, -421815835, 530742520, -995338651,
+    -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606,
+    -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649,
+    -145523070, -1120210379, 718787259, -343485551]);
+
+  function hash(data, offset, length) {
+    var h0 = 1732584193, h1 = -271733879, h2 = -1732584194, h3 = 271733878;
+    // pre-processing
+    var paddedLength = (length + 72) & ~63; // data + 9 extra bytes
+    var padded = new Uint8Array(paddedLength);
+    var i, j, n;
+    for (i = 0; i < length; ++i)
+      padded[i] = data[offset++];
+    padded[i++] = 0x80;
+    n = paddedLength - 8;
+    while (i < n)
+      padded[i++] = 0;
+    padded[i++] = (length << 3) & 0xFF;
+    padded[i++] = (length >> 5) & 0xFF;
+    padded[i++] = (length >> 13) & 0xFF;
+    padded[i++] = (length >> 21) & 0xFF;
+    padded[i++] = (length >>> 29) & 0xFF;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    // chunking
+    // TODO ArrayBuffer ?
+    var w = new Int32Array(16);
+    for (i = 0; i < paddedLength;) {
+      for (j = 0; j < 16; ++j, i += 4) {
+        w[j] = (padded[i] | (padded[i + 1] << 8) |
+                (padded[i + 2] << 16) | (padded[i + 3] << 24));
+      }
+      var a = h0, b = h1, c = h2, d = h3, f, g;
+      for (j = 0; j < 64; ++j) {
+        if (j < 16) {
+          f = (b & c) | ((~b) & d);
+          g = j;
+        } else if (j < 32) {
+          f = (d & b) | ((~d) & c);
+          g = (5 * j + 1) & 15;
+        } else if (j < 48) {
+          f = b ^ c ^ d;
+          g = (3 * j + 5) & 15;
+        } else {
+          f = c ^ (b | (~d));
+          g = (7 * j) & 15;
+        }
+        var tmp = d, rotateArg = (a + f + k[j] + w[g]) | 0, rotate = r[j];
+        d = c;
+        c = b;
+        b = (b + ((rotateArg << rotate) | (rotateArg >>> (32 - rotate)))) | 0;
+        a = tmp;
+      }
+      h0 = (h0 + a) | 0;
+      h1 = (h1 + b) | 0;
+      h2 = (h2 + c) | 0;
+      h3 = (h3 + d) | 0;
+    }
+    return new Uint8Array([
+        h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >>> 24) & 0xFF,
+        h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >>> 24) & 0xFF,
+        h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >>> 24) & 0xFF,
+        h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >>> 24) & 0xFF
+    ]);
+  }
+  return hash;
+})();
+
+var NullCipher = (function NullCipherClosure() {
+  function NullCipher() {
+  }
+
+  NullCipher.prototype = {
+    decryptBlock: function NullCipher_decryptBlock(data) {
+      return data;
+    }
+  };
+
+  return NullCipher;
+})();
+
+var AES128Cipher = (function AES128CipherClosure() {
+  var rcon = new Uint8Array([
+    0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c,
+    0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a,
+    0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd,
+    0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a,
+    0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+    0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6,
+    0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72,
+    0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc,
+    0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10,
+    0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e,
+    0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5,
+    0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94,
+    0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02,
+    0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d,
+    0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d,
+    0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f,
+    0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb,
+    0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c,
+    0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a,
+    0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd,
+    0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a,
+    0x74, 0xe8, 0xcb, 0x8d]);
+
+  var s = new Uint8Array([
+    0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b,
+    0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
+    0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26,
+    0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
+    0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2,
+    0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
+    0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed,
+    0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
+    0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f,
+    0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
+    0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec,
+    0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
+    0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14,
+    0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
+    0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d,
+    0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
+    0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f,
+    0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
+    0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11,
+    0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
+    0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f,
+    0xb0, 0x54, 0xbb, 0x16]);
+
+  var inv_s = new Uint8Array([
+    0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e,
+    0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
+    0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32,
+    0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
+    0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49,
+    0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
+    0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50,
+    0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
+    0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05,
+    0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
+    0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41,
+    0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
+    0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8,
+    0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
+    0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b,
+    0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
+    0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59,
+    0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
+    0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d,
+    0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
+    0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63,
+    0x55, 0x21, 0x0c, 0x7d]);
+
+  var mix = new Uint32Array([
+    0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927,
+    0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45,
+    0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb,
+    0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381,
+    0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf,
+    0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66,
+    0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28,
+    0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012,
+    0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec,
+    0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e,
+    0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd,
+    0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7,
+    0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89,
+    0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b,
+    0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815,
+    0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f,
+    0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa,
+    0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8,
+    0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36,
+    0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c,
+    0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742,
+    0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea,
+    0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4,
+    0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e,
+    0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360,
+    0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502,
+    0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87,
+    0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd,
+    0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3,
+    0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621,
+    0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f,
+    0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55,
+    0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26,
+    0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844,
+    0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba,
+    0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480,
+    0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce,
+    0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67,
+    0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929,
+    0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713,
+    0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed,
+    0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f,
+    0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]);
+
+  function expandKey128(cipherKey) {
+    var b = 176, result = new Uint8Array(b);
+    result.set(cipherKey);
+    for (var j = 16, i = 1; j < b; ++i) {
+      // RotWord
+      var t1 = result[j - 3], t2 = result[j - 2],
+          t3 = result[j - 1], t4 = result[j - 4];
+      // SubWord
+      t1 = s[t1]; t2 = s[t2]; t3 = s[t3]; t4 = s[t4];
+      // Rcon
+      t1 = t1 ^ rcon[i];
+      for (var n = 0; n < 4; ++n) {
+        result[j] = (t1 ^= result[j - 16]); j++;
+        result[j] = (t2 ^= result[j - 16]); j++;
+        result[j] = (t3 ^= result[j - 16]); j++;
+        result[j] = (t4 ^= result[j - 16]); j++;
+      }
+    }
+    return result;
+  }
+
+  function decrypt128(input, key) {
+    var state = new Uint8Array(16);
+    state.set(input);
+    var i, j, k;
+    var t, u, v;
+    // AddRoundKey
+    for (j = 0, k = 160; j < 16; ++j, ++k)
+      state[j] ^= key[k];
+    for (i = 9; i >= 1; --i) {
+      // InvShiftRows
+      t = state[13]; state[13] = state[9]; state[9] = state[5];
+      state[5] = state[1]; state[1] = t;
+      t = state[14]; u = state[10]; state[14] = state[6];
+      state[10] = state[2]; state[6] = t; state[2] = u;
+      t = state[15]; u = state[11]; v = state[7]; state[15] = state[3];
+      state[11] = t; state[7] = u; state[3] = v;
+      // InvSubBytes
+      for (j = 0; j < 16; ++j)
+        state[j] = inv_s[state[j]];
+      // AddRoundKey
+      for (j = 0, k = i * 16; j < 16; ++j, ++k)
+        state[j] ^= key[k];
+      // InvMixColumns
+      for (j = 0; j < 16; j += 4) {
+        var s0 = mix[state[j]], s1 = mix[state[j + 1]],
+            s2 = mix[state[j + 2]], s3 = mix[state[j + 3]];
+        t = (s0 ^ (s1 >>> 8) ^ (s1 << 24) ^ (s2 >>> 16) ^ (s2 << 16) ^
+            (s3 >>> 24) ^ (s3 << 8));
+        state[j] = (t >>> 24) & 0xFF;
+        state[j + 1] = (t >> 16) & 0xFF;
+        state[j + 2] = (t >> 8) & 0xFF;
+        state[j + 3] = t & 0xFF;
+      }
+    }
+    // InvShiftRows
+    t = state[13]; state[13] = state[9]; state[9] = state[5];
+    state[5] = state[1]; state[1] = t;
+    t = state[14]; u = state[10]; state[14] = state[6];
+    state[10] = state[2]; state[6] = t; state[2] = u;
+    t = state[15]; u = state[11]; v = state[7]; state[15] = state[3];
+    state[11] = t; state[7] = u; state[3] = v;
+    for (j = 0; j < 16; ++j) {
+      // InvSubBytes
+      state[j] = inv_s[state[j]];
+      // AddRoundKey
+      state[j] ^= key[j];
+    }
+    return state;
+  }
+
+  function AES128Cipher(key) {
+    this.key = expandKey128(key);
+    this.buffer = new Uint8Array(16);
+    this.bufferPosition = 0;
+  }
+
+  function decryptBlock2(data, finalize) {
+    var i, j, ii, sourceLength = data.length,
+        buffer = this.buffer, bufferLength = this.bufferPosition,
+        result = [], iv = this.iv;
+    for (i = 0; i < sourceLength; ++i) {
+      buffer[bufferLength] = data[i];
+      ++bufferLength;
+      if (bufferLength < 16)
+        continue;
+      // buffer is full, decrypting
+      var plain = decrypt128(buffer, this.key);
+      // xor-ing the IV vector to get plain text
+      for (j = 0; j < 16; ++j)
+        plain[j] ^= iv[j];
+      iv = buffer;
+      result.push(plain);
+      buffer = new Uint8Array(16);
+      bufferLength = 0;
+    }
+    // saving incomplete buffer
+    this.buffer = buffer;
+    this.bufferLength = bufferLength;
+    this.iv = iv;
+    if (result.length === 0) {
+      return new Uint8Array([]);
+    }
+    // combining plain text blocks into one
+    var outputLength = 16 * result.length;
+    if (finalize) {
+      // undo a padding that is described in RFC 2898
+      var lastBlock = result[result.length - 1];
+      outputLength -= lastBlock[15];
+      result[result.length - 1] = lastBlock.subarray(0, 16 - lastBlock[15]);
+    }
+    var output = new Uint8Array(outputLength);
+    for (i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16)
+      output.set(result[i], j);
+    return output;
+  }
+
+  AES128Cipher.prototype = {
+    decryptBlock: function AES128Cipher_decryptBlock(data, finalize) {
+      var i, sourceLength = data.length;
+      var buffer = this.buffer, bufferLength = this.bufferPosition;
+      // waiting for IV values -- they are at the start of the stream
+      for (i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength)
+        buffer[bufferLength] = data[i];
+      if (bufferLength < 16) {
+        // need more data
+        this.bufferLength = bufferLength;
+        return new Uint8Array([]);
+      }
+      this.iv = buffer;
+      this.buffer = new Uint8Array(16);
+      this.bufferLength = 0;
+      // starting decryption
+      this.decryptBlock = decryptBlock2;
+      return this.decryptBlock(data.subarray(16), finalize);
+    }
+  };
+
+  return AES128Cipher;
+})();
+
+var CipherTransform = (function CipherTransformClosure() {
+  function CipherTransform(stringCipherConstructor, streamCipherConstructor) {
+    this.stringCipherConstructor = stringCipherConstructor;
+    this.streamCipherConstructor = streamCipherConstructor;
+  }
+  CipherTransform.prototype = {
+    createStream: function CipherTransform_createStream(stream) {
+      var cipher = new this.streamCipherConstructor();
+      return new DecryptStream(stream,
+        function cipherTransformDecryptStream(data, finalize) {
+          return cipher.decryptBlock(data, finalize);
+        }
+      );
+    },
+    decryptString: function CipherTransform_decryptString(s) {
+      var cipher = new this.stringCipherConstructor();
+      var data = stringToBytes(s);
+      data = cipher.decryptBlock(data, true);
+      return bytesToString(data);
+    }
+  };
+  return CipherTransform;
+})();
+
+var CipherTransformFactory = (function CipherTransformFactoryClosure() {
+  var defaultPasswordBytes = new Uint8Array([
+    0x28, 0xBF, 0x4E, 0x5E, 0x4E, 0x75, 0x8A, 0x41,
+    0x64, 0x00, 0x4E, 0x56, 0xFF, 0xFA, 0x01, 0x08,
+    0x2E, 0x2E, 0x00, 0xB6, 0xD0, 0x68, 0x3E, 0x80,
+    0x2F, 0x0C, 0xA9, 0xFE, 0x64, 0x53, 0x69, 0x7A]);
+
+  function prepareKeyData(fileId, password, ownerPassword, userPassword,
+                          flags, revision, keyLength, encryptMetadata) {
+    var hashData = new Uint8Array(100), i = 0, j, n;
+    if (password) {
+      n = Math.min(32, password.length);
+      for (; i < n; ++i)
+        hashData[i] = password[i];
+    }
+    j = 0;
+    while (i < 32) {
+      hashData[i++] = defaultPasswordBytes[j++];
+    }
+    // as now the padded password in the hashData[0..i]
+    for (j = 0, n = ownerPassword.length; j < n; ++j)
+      hashData[i++] = ownerPassword[j];
+    hashData[i++] = flags & 0xFF;
+    hashData[i++] = (flags >> 8) & 0xFF;
+    hashData[i++] = (flags >> 16) & 0xFF;
+    hashData[i++] = (flags >>> 24) & 0xFF;
+    for (j = 0, n = fileId.length; j < n; ++j)
+      hashData[i++] = fileId[j];
+    if (revision >= 4 && !encryptMetadata) {
+      hashData[i++] = 0xFF;
+      hashData[i++] = 0xFF;
+      hashData[i++] = 0xFF;
+      hashData[i++] = 0xFF;
+    }
+    var hash = calculateMD5(hashData, 0, i);
+    var keyLengthInBytes = keyLength >> 3;
+    if (revision >= 3) {
+      for (j = 0; j < 50; ++j) {
+         hash = calculateMD5(hash, 0, keyLengthInBytes);
+      }
+    }
+    var encryptionKey = hash.subarray(0, keyLengthInBytes);
+    var cipher, checkData;
+
+    if (revision >= 3) {
+      for (i = 0; i < 32; ++i)
+        hashData[i] = defaultPasswordBytes[i];
+      for (j = 0, n = fileId.length; j < n; ++j)
+        hashData[i++] = fileId[j];
+      cipher = new ARCFourCipher(encryptionKey);
+      var checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i));
+      n = encryptionKey.length;
+      var derivedKey = new Uint8Array(n), k;
+      for (j = 1; j <= 19; ++j) {
+        for (k = 0; k < n; ++k)
+          derivedKey[k] = encryptionKey[k] ^ j;
+        cipher = new ARCFourCipher(derivedKey);
+        checkData = cipher.encryptBlock(checkData);
+      }
+      for (j = 0, n = checkData.length; j < n; ++j) {
+        if (userPassword[j] != checkData[j])
+          return null;
+      }
+    } else {
+      cipher = new ARCFourCipher(encryptionKey);
+      checkData = cipher.encryptBlock(defaultPasswordBytes);
+      for (j = 0, n = checkData.length; j < n; ++j) {
+        if (userPassword[j] != checkData[j])
+          return null;
+      }
+    }
+    return encryptionKey;
+  }
+  function decodeUserPassword(password, ownerPassword, revision, keyLength) {
+    var hashData = new Uint8Array(32), i = 0, j, n;
+    n = Math.min(32, password.length);
+    for (; i < n; ++i)
+      hashData[i] = password[i];
+    j = 0;
+    while (i < 32) {
+      hashData[i++] = defaultPasswordBytes[j++];
+    }
+    var hash = calculateMD5(hashData, 0, i);
+    var keyLengthInBytes = keyLength >> 3;
+    if (revision >= 3) {
+      for (j = 0; j < 50; ++j) {
+         hash = calculateMD5(hash, 0, hash.length);
+      }
+    }
+
+    var cipher, userPassword;
+    if (revision >= 3) {
+      userPassword = ownerPassword;
+      var derivedKey = new Uint8Array(keyLengthInBytes), k;
+      for (j = 19; j >= 0; j--) {
+        for (k = 0; k < keyLengthInBytes; ++k)
+          derivedKey[k] = hash[k] ^ j;
+        cipher = new ARCFourCipher(derivedKey);
+        userPassword = cipher.encryptBlock(userPassword);
+      }
+    } else {
+      cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes));
+      userPassword = cipher.encryptBlock(ownerPassword);
+    }
+    return userPassword;
+  }
+
+  var identityName = new Name('Identity');
+
+  function CipherTransformFactory(dict, fileId, password) {
+    var filter = dict.get('Filter');
+    if (!isName(filter) || filter.name != 'Standard')
+      error('unknown encryption method');
+    this.dict = dict;
+    var algorithm = dict.get('V');
+    if (!isInt(algorithm) ||
+      (algorithm != 1 && algorithm != 2 && algorithm != 4))
+      error('unsupported encryption algorithm');
+    this.algorithm = algorithm;
+    var keyLength = dict.get('Length') || 40;
+    if (!isInt(keyLength) ||
+      keyLength < 40 || (keyLength % 8) !== 0)
+      error('invalid key length');
+    // prepare keys
+    var ownerPassword = stringToBytes(dict.get('O'));
+    var userPassword = stringToBytes(dict.get('U'));
+    var flags = dict.get('P');
+    var revision = dict.get('R');
+    var encryptMetadata = algorithm == 4 &&  // meaningful when V is 4
+      dict.get('EncryptMetadata') !== false; // makes true as default value
+    this.encryptMetadata = encryptMetadata;
+
+    var fileIdBytes = stringToBytes(fileId);
+    var passwordBytes;
+    if (password)
+      passwordBytes = stringToBytes(password);
+
+    var encryptionKey = prepareKeyData(fileIdBytes, passwordBytes,
+                                       ownerPassword, userPassword, flags,
+                                       revision, keyLength, encryptMetadata);
+    if (!encryptionKey && !password) {
+      throw new PasswordException('No password given',
+                                  PasswordResponses.NEED_PASSWORD);
+    } else if (!encryptionKey && password) {
+      // Attempting use the password as an owner password
+      var decodedPassword = decodeUserPassword(passwordBytes, ownerPassword,
+                                               revision, keyLength);
+      encryptionKey = prepareKeyData(fileIdBytes, decodedPassword,
+                                     ownerPassword, userPassword, flags,
+                                     revision, keyLength, encryptMetadata);
+    }
+
+    if (!encryptionKey)
+      throw new PasswordException('Incorrect Password',
+                                  PasswordResponses.INCORRECT_PASSWORD);
+
+    this.encryptionKey = encryptionKey;
+
+    if (algorithm == 4) {
+      this.cf = dict.get('CF');
+      this.stmf = dict.get('StmF') || identityName;
+      this.strf = dict.get('StrF') || identityName;
+      this.eff = dict.get('EFF') || this.strf;
+    }
+  }
+
+  function buildObjectKey(num, gen, encryptionKey, isAes) {
+    var key = new Uint8Array(encryptionKey.length + 9), i, n;
+    for (i = 0, n = encryptionKey.length; i < n; ++i)
+      key[i] = encryptionKey[i];
+    key[i++] = num & 0xFF;
+    key[i++] = (num >> 8) & 0xFF;
+    key[i++] = (num >> 16) & 0xFF;
+    key[i++] = gen & 0xFF;
+    key[i++] = (gen >> 8) & 0xFF;
+    if (isAes) {
+      key[i++] = 0x73;
+      key[i++] = 0x41;
+      key[i++] = 0x6C;
+      key[i++] = 0x54;
+    }
+    var hash = calculateMD5(key, 0, i);
+    return hash.subarray(0, Math.min(encryptionKey.length + 5, 16));
+  }
+
+  function buildCipherConstructor(cf, name, num, gen, key) {
+    var cryptFilter = cf.get(name.name);
+    var cfm;
+    if (cryptFilter !== null && cryptFilter !== undefined)
+      cfm = cryptFilter.get('CFM');
+    if (!cfm || cfm.name == 'None') {
+      return function cipherTransformFactoryBuildCipherConstructorNone() {
+        return new NullCipher();
+      };
+    }
+    if ('V2' == cfm.name) {
+      return function cipherTransformFactoryBuildCipherConstructorV2() {
+        return new ARCFourCipher(
+          buildObjectKey(num, gen, key, false));
+      };
+    }
+    if ('AESV2' == cfm.name) {
+      return function cipherTransformFactoryBuildCipherConstructorAESV2() {
+        return new AES128Cipher(
+          buildObjectKey(num, gen, key, true));
+      };
+    }
+    error('Unknown crypto method');
+  }
+
+  CipherTransformFactory.prototype = {
+    createCipherTransform:
+      function CipherTransformFactory_createCipherTransform(num, gen) {
+      if (this.algorithm == 4) {
+        return new CipherTransform(
+          buildCipherConstructor(this.cf, this.stmf,
+            num, gen, this.encryptionKey),
+          buildCipherConstructor(this.cf, this.strf,
+            num, gen, this.encryptionKey));
+      }
+      // algorithms 1 and 2
+      var key = buildObjectKey(num, gen, this.encryptionKey, false);
+      var cipherConstructor = function buildCipherCipherConstructor() {
+        return new ARCFourCipher(key);
+      };
+      return new CipherTransform(cipherConstructor, cipherConstructor);
+    }
+  };
+
+  return CipherTransformFactory;
+})();
+
+
+
+var PartialEvaluator = (function PartialEvaluatorClosure() {
+  function PartialEvaluator(pdfManager, xref, handler, pageIndex,
+                            uniquePrefix, idCounters) {
+    this.state = new EvalState();
+    this.stateStack = [];
+
+    this.pdfManager = pdfManager;
+    this.xref = xref;
+    this.handler = handler;
+    this.pageIndex = pageIndex;
+    this.uniquePrefix = uniquePrefix;
+    this.idCounters = idCounters;
+    this.fontCache = new RefSetCache();
+  }
+
+  // Specifies properties for each command
+  //
+  // If variableArgs === true: [0, `numArgs`] expected
+  // If variableArgs === false: exactly `numArgs` expected
+  var OP_MAP = {
+    // Graphic state
+    w: { fnName: 'setLineWidth', numArgs: 1, variableArgs: false },
+    J: { fnName: 'setLineCap', numArgs: 1, variableArgs: false },
+    j: { fnName: 'setLineJoin', numArgs: 1, variableArgs: false },
+    M: { fnName: 'setMiterLimit', numArgs: 1, variableArgs: false },
+    d: { fnName: 'setDash', numArgs: 2, variableArgs: false },
+    ri: { fnName: 'setRenderingIntent', numArgs: 1, variableArgs: false },
+    i: { fnName: 'setFlatness', numArgs: 1, variableArgs: false },
+    gs: { fnName: 'setGState', numArgs: 1, variableArgs: false },
+    q: { fnName: 'save', numArgs: 0, variableArgs: false },
+    Q: { fnName: 'restore', numArgs: 0, variableArgs: false },
+    cm: { fnName: 'transform', numArgs: 6, variableArgs: false },
+
+    // Path
+    m: { fnName: 'moveTo', numArgs: 2, variableArgs: false },
+    l: { fnName: 'lineTo', numArgs: 2, variableArgs: false },
+    c: { fnName: 'curveTo', numArgs: 6, variableArgs: false },
+    v: { fnName: 'curveTo2', numArgs: 4, variableArgs: false },
+    y: { fnName: 'curveTo3', numArgs: 4, variableArgs: false },
+    h: { fnName: 'closePath', numArgs: 0, variableArgs: false },
+    re: { fnName: 'rectangle', numArgs: 4, variableArgs: false },
+    S: { fnName: 'stroke', numArgs: 0, variableArgs: false },
+    s: { fnName: 'closeStroke', numArgs: 0, variableArgs: false },
+    f: { fnName: 'fill', numArgs: 0, variableArgs: false },
+    F: { fnName: 'fill', numArgs: 0, variableArgs: false },
+    'f*': { fnName: 'eoFill', numArgs: 0, variableArgs: false },
+    B: { fnName: 'fillStroke', numArgs: 0, variableArgs: false },
+    'B*': { fnName: 'eoFillStroke', numArgs: 0, variableArgs: false },
+    b: { fnName: 'closeFillStroke', numArgs: 0, variableArgs: false },
+    'b*': { fnName: 'closeEOFillStroke', numArgs: 0, variableArgs: false },
+    n: { fnName: 'endPath', numArgs: 0, variableArgs: false },
+
+    // Clipping
+    W: { fnName: 'clip', numArgs: 0, variableArgs: false },
+    'W*': { fnName: 'eoClip', numArgs: 0, variableArgs: false },
+
+    // Text
+    BT: { fnName: 'beginText', numArgs: 0, variableArgs: false },
+    ET: { fnName: 'endText', numArgs: 0, variableArgs: false },
+    Tc: { fnName: 'setCharSpacing', numArgs: 1, variableArgs: false },
+    Tw: { fnName: 'setWordSpacing', numArgs: 1, variableArgs: false },
+    Tz: { fnName: 'setHScale', numArgs: 1, variableArgs: false },
+    TL: { fnName: 'setLeading', numArgs: 1, variableArgs: false },
+    Tf: { fnName: 'setFont', numArgs: 2, variableArgs: false },
+    Tr: { fnName: 'setTextRenderingMode', numArgs: 1, variableArgs: false },
+    Ts: { fnName: 'setTextRise', numArgs: 1, variableArgs: false },
+    Td: { fnName: 'moveText', numArgs: 2, variableArgs: false },
+    TD: { fnName: 'setLeadingMoveText', numArgs: 2, variableArgs: false },
+    Tm: { fnName: 'setTextMatrix', numArgs: 6, variableArgs: false },
+    'T*': { fnName: 'nextLine', numArgs: 0, variableArgs: false },
+    Tj: { fnName: 'showText', numArgs: 1, variableArgs: false },
+    TJ: { fnName: 'showSpacedText', numArgs: 1, variableArgs: false },
+    '\'': { fnName: 'nextLineShowText', numArgs: 1, variableArgs: false },
+    '"': { fnName: 'nextLineSetSpacingShowText', numArgs: 3,
+      variableArgs: false },
+
+    // Type3 fonts
+    d0: { fnName: 'setCharWidth', numArgs: 2, variableArgs: false },
+    d1: { fnName: 'setCharWidthAndBounds', numArgs: 6, variableArgs: false },
+
+    // Color
+    CS: { fnName: 'setStrokeColorSpace', numArgs: 1, variableArgs: false },
+    cs: { fnName: 'setFillColorSpace', numArgs: 1, variableArgs: false },
+    SC: { fnName: 'setStrokeColor', numArgs: 4, variableArgs: true },
+    SCN: { fnName: 'setStrokeColorN', numArgs: 33, variableArgs: true },
+    sc: { fnName: 'setFillColor', numArgs: 4, variableArgs: true },
+    scn: { fnName: 'setFillColorN', numArgs: 33, variableArgs: true },
+    G: { fnName: 'setStrokeGray', numArgs: 1, variableArgs: false },
+    g: { fnName: 'setFillGray', numArgs: 1, variableArgs: false },
+    RG: { fnName: 'setStrokeRGBColor', numArgs: 3, variableArgs: false },
+    rg: { fnName: 'setFillRGBColor', numArgs: 3, variableArgs: false },
+    K: { fnName: 'setStrokeCMYKColor', numArgs: 4, variableArgs: false },
+    k: { fnName: 'setFillCMYKColor', numArgs: 4, variableArgs: false },
+
+    // Shading
+    sh: { fnName: 'shadingFill', numArgs: 1, variableArgs: false },
+
+    // Images
+    BI: { fnName: 'beginInlineImage', numArgs: 0, variableArgs: false },
+    ID: { fnName: 'beginImageData', numArgs: 0, variableArgs: false },
+    EI: { fnName: 'endInlineImage', numArgs: 1, variableArgs: false },
+
+    // XObjects
+    Do: { fnName: 'paintXObject', numArgs: 1, variableArgs: false },
+    MP: { fnName: 'markPoint', numArgs: 1, variableArgs: false },
+    DP: { fnName: 'markPointProps', numArgs: 2, variableArgs: false },
+    BMC: { fnName: 'beginMarkedContent', numArgs: 1, variableArgs: false },
+    BDC: { fnName: 'beginMarkedContentProps', numArgs: 2, variableArgs: false },
+    EMC: { fnName: 'endMarkedContent', numArgs: 0, variableArgs: false },
+
+    // Compatibility
+    BX: { fnName: 'beginCompat', numArgs: 0, variableArgs: false },
+    EX: { fnName: 'endCompat', numArgs: 0, variableArgs: false },
+
+    // (reserved partial commands for the lexer)
+    BM: null,
+    BD: null,
+    'true': null,
+    fa: null,
+    fal: null,
+    fals: null,
+    'false': null,
+    nu: null,
+    nul: null,
+    'null': null
+  };
+
+  var TILING_PATTERN = 1, SHADING_PATTERN = 2;
+
+  PartialEvaluator.prototype = {
+    hasBlendModes: function PartialEvaluator_hasBlendModes(resources) {
+      if (!isDict(resources)) {
+        return false;
+      }
+
+      var nodes = [resources];
+      while (nodes.length) {
+        var node = nodes.shift();
+        // First check the current resources for blend modes.
+        var graphicStates = node.get('ExtGState');
+        if (isDict(graphicStates)) {
+          graphicStates = graphicStates.getAll();
+          for (var key in graphicStates) {
+            var graphicState = graphicStates[key];
+            var bm = graphicState['BM'];
+            if (isName(bm) && bm.name !== 'Normal') {
+              return true;
+            }
+          }
+        }
+        // Descend into the XObjects to look for more resources and blend modes.
+        var xObjects = node.get('XObject');
+        if (!isDict(xObjects)) {
+          continue;
+        }
+        xObjects = xObjects.getAll();
+        for (var key in xObjects) {
+          var xObject = xObjects[key];
+          if (!isStream(xObject)) {
+            continue;
+          }
+          var xResources = xObject.dict.get('Resources');
+          if (isDict(xResources)) {
+            nodes.push(xResources);
+          }
+        }
+      }
+      return false;
+    },
+
+    buildFormXObject: function PartialEvaluator_buildFormXObject(resources,
+                                                                 xobj, smask,
+                                                                 operatorList) {
+      var self = this;
+
+      var matrix = xobj.dict.get('Matrix');
+      var bbox = xobj.dict.get('BBox');
+      var group = xobj.dict.get('Group');
+      if (group) {
+        var groupOptions = {
+          matrix: matrix,
+          bbox: bbox,
+          smask: !!smask,
+          isolated: false,
+          knockout: false
+        };
+
+        var groupSubtype = group.get('S');
+        if (isName(groupSubtype) && groupSubtype.name === 'Transparency') {
+          groupOptions.isolated = group.get('I') || false;
+          groupOptions.knockout = group.get('K') || false;
+          // There is also a group colorspace, but since we put everything in
+          // RGB I'm not sure we need it.
+        }
+        operatorList.addOp('beginGroup', [groupOptions]);
+      }
+
+      operatorList.addOp('paintFormXObjectBegin', [matrix, bbox]);
+
+      this.getOperatorList(xobj, xobj.dict.get('Resources') || resources,
+                           operatorList);
+      operatorList.addOp('paintFormXObjectEnd', []);
+
+      if (group) {
+        operatorList.addOp('endGroup', [groupOptions]);
+      }
+    },
+
+    buildPaintImageXObject: function PartialEvaluator_buildPaintImageXObject(
+                                resources, image, inline, operatorList) {
+      var self = this;
+      var dict = image.dict;
+      var w = dict.get('Width', 'W');
+      var h = dict.get('Height', 'H');
+
+      if (PDFJS.maxImageSize !== -1 && w * h > PDFJS.maxImageSize) {
+        warn('Image exceeded maximum allowed size and was removed.');
+        return;
+      }
+
+      var imageMask = dict.get('ImageMask', 'IM') || false;
+      if (imageMask) {
+        // This depends on a tmpCanvas beeing filled with the
+        // current fillStyle, such that processing the pixel
+        // data can't be done here. Instead of creating a
+        // complete PDFImage, only read the information needed
+        // for later.
+
+        var width = dict.get('Width', 'W');
+        var height = dict.get('Height', 'H');
+        var bitStrideLength = (width + 7) >> 3;
+        var imgArray = image.getBytes(bitStrideLength * height);
+        var decode = dict.get('Decode', 'D');
+        var inverseDecode = !!decode && decode[0] > 0;
+
+        operatorList.addOp('paintImageMaskXObject',
+          [PDFImage.createMask(imgArray, width, height,
+                                            inverseDecode)]
+        );
+        return;
+      }
+
+      var softMask = dict.get('SMask', 'SM') || false;
+      var mask = dict.get('Mask') || false;
+
+      var SMALL_IMAGE_DIMENSIONS = 200;
+      // Inlining small images into the queue as RGB data
+      if (inline && !softMask && !mask &&
+          !(image instanceof JpegStream) &&
+          (w + h) < SMALL_IMAGE_DIMENSIONS) {
+        var imageObj = new PDFImage(this.xref, resources, image,
+                                    inline, null, null);
+        var imgData = imageObj.getImageData();
+        operatorList.addOp('paintInlineImageXObject', [imgData]);
+        return;
+      }
+
+      // If there is no imageMask, create the PDFImage and a lot
+      // of image processing can be done here.
+      var uniquePrefix = this.uniquePrefix || '';
+      var objId = 'img_' + uniquePrefix + (++this.idCounters.obj);
+      operatorList.addDependency(objId);
+      var args = [objId, w, h];
+
+      if (!softMask && !mask && image instanceof JpegStream &&
+          image.isNativelySupported(this.xref, resources)) {
+        // These JPEGs don't need any more processing so we can just send it.
+        operatorList.addOp('paintJpegXObject', args);
+        this.handler.send(
+            'obj', [objId, this.pageIndex, 'JpegStream', image.getIR()]);
+        return;
+      }
+
+
+      PDFImage.buildImage(function(imageObj) {
+          var imgData = imageObj.getImageData();
+          self.handler.send('obj', [objId, self.pageIndex, 'Image', imgData]);
+        }, self.handler, self.xref, resources, image, inline);
+
+      operatorList.addOp('paintImageXObject', args);
+    },
+
+    handleTilingType: function PartialEvaluator_handleTilingType(
+                          fn, args, resources, pattern, patternDict,
+                          operatorList) {
+      // Create an IR of the pattern code.
+      var tilingOpList = this.getOperatorList(pattern,
+                                  patternDict.get('Resources') || resources);
+      // Add the dependencies to the parent operator list so they are resolved
+      // before sub operator list is executed synchronously.
+      operatorList.addDependencies(tilingOpList.dependencies);
+      operatorList.addOp(fn, TilingPattern.getIR({
+                               fnArray: tilingOpList.fnArray,
+                               argsArray: tilingOpList.argsArray
+                              }, patternDict, args));
+    },
+
+    handleSetFont: function PartialEvaluator_handleSetFont(
+                      resources, fontArgs, fontRef, operatorList) {
+
+      // TODO(mack): Not needed?
+      var fontName;
+      if (fontArgs) {
+        fontArgs = fontArgs.slice();
+        fontName = fontArgs[0].name;
+      }
+      var self = this;
+      var font = this.loadFont(fontName, fontRef, this.xref, resources,
+                               operatorList);
+      this.state.font = font;
+      var loadedName = font.loadedName;
+      if (!font.sent) {
+        var fontData = font.translated.exportData();
+
+        self.handler.send('commonobj', [
+          loadedName,
+          'Font',
+          fontData
+        ]);
+        font.sent = true;
+      }
+
+      return loadedName;
+    },
+
+    handleText: function PartialEvaluator_handleText(chars) {
+      var font = this.state.font.translated;
+      var glyphs = font.charsToGlyphs(chars);
+      var isAddToPathSet = !!(this.state.textRenderingMode &
+                              TextRenderingMode.ADD_TO_PATH_FLAG);
+      if (font.data && (isAddToPathSet || PDFJS.disableFontFace)) {
+        for (var i = 0; i < glyphs.length; i++) {
+          if (glyphs[i] === null) {
+            continue;
+          }
+          var fontChar = glyphs[i].fontChar;
+          if (!font.renderer.hasBuiltPath(fontChar)) {
+            var path = font.renderer.getPathJs(fontChar);
+            this.handler.send('commonobj', [
+              font.loadedName + '_path_' + fontChar,
+              'FontPath',
+              path
+            ]);
+          }
+        }
+      }
+
+      return glyphs;
+    },
+
+    setGState: function PartialEvaluator_setGState(resources, gState,
+                                                   operatorList) {
+
+      var self = this;
+      // TODO(mack): This should be rewritten so that this function returns
+      // what should be added to the queue during each iteration
+      function setGStateForKey(gStateObj, key, value) {
+        switch (key) {
+          case 'Type':
+            break;
+          case 'LW':
+          case 'LC':
+          case 'LJ':
+          case 'ML':
+          case 'D':
+          case 'RI':
+          case 'FL':
+          case 'CA':
+          case 'ca':
+            gStateObj.push([key, value]);
+            break;
+          case 'Font':
+            var loadedName = self.handleSetFont(resources, null, value[0],
+                                                operatorList);
+            operatorList.addDependency(loadedName);
+            gStateObj.push([key, [loadedName, value[1]]]);
+            break;
+          case 'BM':
+            gStateObj.push([key, value]);
+            break;
+          case 'SMask':
+            // We support the default so don't trigger the TODO.
+            if (!isName(value) || value.name != 'None')
+              TODO('graphic state operator ' + key);
+            break;
+          // Only generate info log messages for the following since
+          // they are unlikey to have a big impact on the rendering.
+          case 'OP':
+          case 'op':
+          case 'OPM':
+          case 'BG':
+          case 'BG2':
+          case 'UCR':
+          case 'UCR2':
+          case 'TR':
+          case 'TR2':
+          case 'HT':
+          case 'SM':
+          case 'SA':
+          case 'AIS':
+          case 'TK':
+            // TODO implement these operators.
+            info('graphic state operator ' + key);
+            break;
+          default:
+            info('Unknown graphic state operator ' + key);
+            break;
+        }
+      }
+
+      // This array holds the converted/processed state data.
+      var gStateObj = [];
+      var gStateMap = gState.map;
+      for (var key in gStateMap) {
+        var value = gStateMap[key];
+        setGStateForKey(gStateObj, key, value);
+      }
+
+      operatorList.addOp('setGState', [gStateObj]);
+    },
+
+    loadFont: function PartialEvaluator_loadFont(fontName, font, xref,
+                                                 resources,
+                                                 parentOperatorList) {
+
+      function errorFont() {
+        return {
+          translated: new ErrorFont('Font ' + fontName + ' is not available'),
+          loadedName: 'g_font_error'
+        };
+      }
+
+      var fontRef;
+      if (font) { // Loading by ref.
+        assert(isRef(font));
+        fontRef = font;
+      } else { // Loading by name.
+        var fontRes = resources.get('Font');
+        if (fontRes) {
+          fontRef = fontRes.getRaw(fontName);
+        } else {
+          warn('fontRes not available');
+          return errorFont();
+        }
+      }
+      if (this.fontCache.has(fontRef)) {
+        return this.fontCache.get(fontRef);
+      }
+
+
+      font = xref.fetchIfRef(fontRef);
+      if (!isDict(font)) {
+        return errorFont();
+      }
+      this.fontCache.put(fontRef, font);
+
+      // keep track of each font we translated so the caller can
+      // load them asynchronously before calling display on a page
+      font.loadedName = 'g_font_' + fontRef.num + '_' + fontRef.gen;
+
+      if (!font.translated) {
+        var translated;
+        try {
+          translated = this.translateFont(font, xref);
+        } catch (e) {
+          translated = new ErrorFont(e instanceof Error ? e.message : e);
+        }
+        font.translated = translated;
+      }
+
+      if (font.translated.loadCharProcs) {
+        var charProcs = font.get('CharProcs').getAll();
+        var fontResources = font.get('Resources') || resources;
+        var charProcKeys = Object.keys(charProcs);
+        var charProcOperatorList = {};
+        for (var i = 0, n = charProcKeys.length; i < n; ++i) {
+          var key = charProcKeys[i];
+          var glyphStream = charProcs[key];
+          var operatorList = this.getOperatorList(glyphStream, fontResources);
+          charProcOperatorList[key] = operatorList.getIR();
+          if (!parentOperatorList) {
+            continue;
+          }
+          // Add the dependencies to the parent operator list so they are
+          // resolved before sub operator list is executed synchronously.
+          parentOperatorList.addDependencies(charProcOperatorList.dependencies);
+        }
+        font.translated.charProcOperatorList = charProcOperatorList;
+        font.loaded = true;
+      } else {
+        font.loaded = true;
+      }
+      return font;
+    },
+
+    getOperatorList: function PartialEvaluator_getOperatorList(stream,
+                                                               resources,
+                                                               operatorList) {
+
+      var self = this;
+      var xref = this.xref;
+      var handler = this.handler;
+
+      operatorList = operatorList || new OperatorList();
+
+      resources = resources || new Dict();
+      var xobjs = resources.get('XObject') || new Dict();
+      var patterns = resources.get('Pattern') || new Dict();
+      // TODO(mduan): pass array of knownCommands rather than OP_MAP
+      // dictionary
+      var parser = new Parser(new Lexer(stream, OP_MAP), false, xref);
+
+      var promise = new Promise();
+      var args = [];
+      nextOp:
+      while (true) {
+
+        var obj = parser.getObj();
+
+        if (isEOF(obj)) {
+          break;
+        }
+
+        if (isCmd(obj)) {
+          var cmd = obj.cmd;
+
+          // Check that the command is valid
+          var opSpec = OP_MAP[cmd];
+          if (!opSpec) {
+            warn('Unknown command "' + cmd + '"');
+            continue;
+          }
+
+          var fn = opSpec.fnName;
+
+          // Validate the number of arguments for the command
+          if (opSpec.variableArgs) {
+            if (args.length > opSpec.numArgs) {
+              info('Command ' + fn + ': expected [0,' + opSpec.numArgs +
+                  '] args, but received ' + args.length + ' args');
+            }
+          } else {
+            if (args.length < opSpec.numArgs) {
+              // If we receive too few args, it's not possible to possible
+              // to execute the command, so skip the command
+              info('Command ' + fn + ': because expected ' +
+                   opSpec.numArgs + ' args, but received ' + args.length +
+                   ' args; skipping');
+              args = [];
+              continue;
+            } else if (args.length > opSpec.numArgs) {
+              info('Command ' + fn + ': expected ' + opSpec.numArgs +
+                  ' args, but received ' + args.length + ' args');
+            }
+          }
+
+          // TODO figure out how to type-check vararg functions
+
+          if ((cmd == 'SCN' || cmd == 'scn') &&
+               !args[args.length - 1].code) {
+            // compile tiling patterns
+            var patternName = args[args.length - 1];
+            // SCN/scn applies patterns along with normal colors
+            var pattern;
+            if (isName(patternName) &&
+                (pattern = patterns.get(patternName.name))) {
+
+              var dict = isStream(pattern) ? pattern.dict : pattern;
+              var typeNum = dict.get('PatternType');
+
+              if (typeNum == TILING_PATTERN) {
+                self.handleTilingType(fn, args, resources, pattern, dict,
+                                      operatorList);
+                args = [];
+                continue;
+              } else if (typeNum == SHADING_PATTERN) {
+                var shading = dict.get('Shading');
+                var matrix = dict.get('Matrix');
+                var pattern = Pattern.parseShading(shading, matrix, xref,
+                                                    resources);
+                args = pattern.getIR();
+              } else {
+                error('Unkown PatternType ' + typeNum);
+              }
+            }
+          } else if (cmd == 'Do' && !args[0].code) {
+            // eagerly compile XForm objects
+            var name = args[0].name;
+            var xobj = xobjs.get(name);
+            if (xobj) {
+              assertWellFormed(
+                  isStream(xobj), 'XObject should be a stream');
+
+              var type = xobj.dict.get('Subtype');
+              assertWellFormed(
+                isName(type),
+                'XObject should have a Name subtype'
+              );
+
+              if ('Form' == type.name) {
+                self.buildFormXObject(resources, xobj, null, operatorList);
+                args = [];
+                continue;
+              } else if ('Image' == type.name) {
+                self.buildPaintImageXObject(resources, xobj, false,
+                                            operatorList);
+                args = [];
+                continue;
+              } else {
+                error('Unhandled XObject subtype ' + type.name);
+              }
+            }
+          } else if (cmd == 'Tf') { // eagerly collect all fonts
+            var loadedName = self.handleSetFont(resources, args, null,
+                                                operatorList);
+            operatorList.addDependency(loadedName);
+            fn = 'setFont';
+            args[0] = loadedName;
+          } else if (cmd == 'EI') {
+            self.buildPaintImageXObject(resources, args[0], true, operatorList);
+            args = [];
+            continue;
+          } else if (cmd === 'q') { // save
+            var old = this.state;
+            this.stateStack.push(this.state);
+            this.state = old.clone();
+          } else if (cmd === 'Q') { // restore
+            var prev = this.stateStack.pop();
+            if (prev) {
+              this.state = prev;
+            }
+          } else if (cmd === 'Tj') { // showText
+            args[0] = this.handleText(args[0]);
+          } else if (cmd === 'TJ') { // showSpacedText
+            var arr = args[0];
+            var arrLength = arr.length;
+            for (var i = 0; i < arrLength; ++i) {
+              if (isString(arr[i])) {
+                arr[i] = this.handleText(arr[i]);
+              }
+            }
+          } else if (cmd === '\'') { // nextLineShowText
+            args[0] = this.handleText(args[0]);
+          } else if (cmd === '"') { // nextLineSetSpacingShowText
+            args[2] = this.handleText(args[2]);
+          } else if (cmd === 'Tr') { // setTextRenderingMode
+            this.state.textRenderingMode = args[0];
+          }
+
+          switch (fn) {
+            // Parse the ColorSpace data to a raw format.
+            case 'setFillColorSpace':
+            case 'setStrokeColorSpace':
+              args = [ColorSpace.parseToIR(args[0], xref, resources)];
+              break;
+            case 'shadingFill':
+              var shadingRes = resources.get('Shading');
+              if (!shadingRes)
+                error('No shading resource found');
+
+              var shading = shadingRes.get(args[0].name);
+              if (!shading)
+                error('No shading object found');
+
+              var shadingFill = Pattern.parseShading(
+                  shading, null, xref, resources);
+              var patternIR = shadingFill.getIR();
+              args = [patternIR];
+              fn = 'shadingFill';
+              break;
+            case 'setGState':
+              var dictName = args[0];
+              var extGState = resources.get('ExtGState');
+
+              if (!isDict(extGState) || !extGState.has(dictName.name))
+                break;
+
+              var gState = extGState.get(dictName.name);
+              self.setGState(resources, gState, operatorList);
+              args = [];
+              continue nextOp;
+          } // switch
+
+          operatorList.addOp(fn, args);
+          args = [];
+          parser.saveState();
+        } else if (obj !== null && obj !== undefined) {
+          args.push(obj instanceof Dict ? obj.getAll() : obj);
+          assertWellFormed(args.length <= 33, 'Too many arguments');
+        }
+      }
+
+      return operatorList;
+    },
+
+    getTextContent: function PartialEvaluator_getTextContent(
+                                                    stream, resources, state) {
+
+      var bidiTexts;
+      var SPACE_FACTOR = 0.35;
+      var MULTI_SPACE_FACTOR = 1.5;
+      var textState;
+
+      if (!state) {
+        textState = new TextState();
+        bidiTexts = [];
+        state = {
+          textState: textState,
+          bidiTexts: bidiTexts
+        };
+      } else {
+        bidiTexts = state.bidiTexts;
+        textState = state.textState;
+      }
+
+      var self = this;
+      var xref = this.xref;
+
+      function handleSetFont(fontName, fontRef) {
+        return self.loadFont(fontName, fontRef, xref, resources, null);
+      }
+
+      resources = xref.fetchIfRef(resources) || new Dict();
+      // The xobj is parsed iff it's needed, e.g. if there is a `DO` cmd.
+      var xobjs = null;
+
+      var parser = new Parser(new Lexer(stream), false);
+      var res = resources;
+      var args = [], obj;
+
+      var chunk = '';
+      var font = null;
+      var charSpace = 0, wordSpace = 0;
+      while (!isEOF(obj = parser.getObj())) {
+        if (isCmd(obj)) {
+          var cmd = obj.cmd;
+          switch (cmd) {
+            // TODO: Add support for SAVE/RESTORE and XFORM here.
+            case 'Tf':
+              font = handleSetFont(args[0].name).translated;
+              textState.fontSize = args[1];
+              break;
+            case 'Ts':
+              textState.textRise = args[0];
+              break;
+            case 'Tz':
+              textState.textHScale = args[0] / 100;
+              break;
+            case 'TL':
+              textState.leading = args[0];
+              break;
+            case 'Td':
+              textState.translateTextMatrix(args[0], args[1]);
+              break;
+            case 'TD':
+              textState.leading = -args[1];
+              textState.translateTextMatrix(args[0], args[1]);
+              break;
+            case 'T*':
+              textState.translateTextMatrix(0, -textState.leading);
+              break;
+            case 'Tm':
+              textState.setTextMatrix(args[0], args[1],
+                                       args[2], args[3], args[4], args[5]);
+              break;
+            case 'Tc':
+              charSpace = args[0];
+              break;
+            case 'Tw':
+              wordSpace = args[0];
+              break;
+            case 'q':
+              textState.push();
+              break;
+            case 'Q':
+              textState.pop();
+              break;
+            case 'BT':
+              textState.initialiseTextObj();
+              break;
+            case 'cm':
+              textState.transformCTM(args[0], args[1], args[2],
+                                args[3], args[4], args[5]);
+              break;
+            case 'TJ':
+              var items = args[0];
+              for (var j = 0, jj = items.length; j < jj; j++) {
+                if (typeof items[j] === 'string') {
+                  chunk += fontCharsToUnicode(items[j], font);
+                } else if (items[j] < 0 && font.spaceWidth > 0) {
+                  var fakeSpaces = -items[j] / font.spaceWidth;
+                  if (fakeSpaces > MULTI_SPACE_FACTOR) {
+                    fakeSpaces = Math.round(fakeSpaces);
+                    while (fakeSpaces--) {
+                      chunk += ' ';
+                    }
+                  } else if (fakeSpaces > SPACE_FACTOR) {
+                    chunk += ' ';
+                  }
+                }
+              }
+              break;
+            case 'Tj':
+              chunk += fontCharsToUnicode(args[0], font);
+              break;
+            case '\'':
+              // For search, adding a extra white space for line breaks would be
+              // better here, but that causes too much spaces in the
+              // text-selection divs.
+              chunk += fontCharsToUnicode(args[0], font);
+              break;
+            case '"':
+              // Note comment in "'"
+              chunk += fontCharsToUnicode(args[2], font);
+              break;
+            case 'Do':
+              // Set the chunk such that the following if won't add something
+              // to the state.
+              chunk = '';
+
+              if (args[0].code) {
+                break;
+              }
+
+              if (!xobjs) {
+                xobjs = resources.get('XObject') || new Dict();
+              }
+
+              var name = args[0].name;
+              var xobj = xobjs.get(name);
+              if (!xobj)
+                break;
+              assertWellFormed(isStream(xobj), 'XObject should be a stream');
+
+              var type = xobj.dict.get('Subtype');
+              assertWellFormed(
+                isName(type),
+                'XObject should have a Name subtype'
+              );
+
+              if ('Form' !== type.name)
+                break;
+
+              state = this.getTextContent(
+                xobj,
+                xobj.dict.get('Resources') || resources,
+                state
+              );
+              break;
+            case 'gs':
+              var dictName = args[0];
+              var extGState = resources.get('ExtGState');
+
+              if (!isDict(extGState) || !extGState.has(dictName.name))
+                break;
+
+              var gsState = extGState.get(dictName.name);
+
+              for (var i = 0; i < gsState.length; i++) {
+                if (gsState[i] === 'Font') {
+                  font = handleSetFont(args[0].name).translated;
+                }
+              }
+              break;
+          } // switch
+
+          if (chunk !== '') {
+            var bidiText = PDFJS.bidi(chunk, -1, font.vertical);
+            var renderParams = textState.calcRenderParams();
+            bidiText.x = renderParams.renderMatrix[4] - (textState.fontSize *
+                           renderParams.vScale * Math.sin(renderParams.angle));
+            bidiText.y = renderParams.renderMatrix[5] + (textState.fontSize *
+                           renderParams.vScale * Math.cos(renderParams.angle));
+            if (bidiText.dir == 'ttb') {
+              bidiText.x += renderParams.vScale / 2;
+              bidiText.y -= renderParams.vScale;
+            }
+            bidiTexts.push(bidiText);
+
+            chunk = '';
+          }
+
+          args = [];
+        } else if (obj !== null && obj !== undefined) {
+          assertWellFormed(args.length <= 33, 'Too many arguments');
+          args.push(obj);
+        }
+      } // while
+
+      return state;
+    },
+
+    extractDataStructures: function
+      partialEvaluatorExtractDataStructures(dict, baseDict,
+                                            xref, properties) {
+      // 9.10.2
+      var toUnicode = dict.get('ToUnicode') ||
+        baseDict.get('ToUnicode');
+      if (toUnicode)
+        properties.toUnicode = this.readToUnicode(toUnicode, xref, properties);
+
+      if (properties.composite) {
+        // CIDSystemInfo helps to match CID to glyphs
+        var cidSystemInfo = dict.get('CIDSystemInfo');
+        if (isDict(cidSystemInfo)) {
+          properties.cidSystemInfo = {
+            registry: cidSystemInfo.get('Registry'),
+            ordering: cidSystemInfo.get('Ordering'),
+            supplement: cidSystemInfo.get('Supplement')
+          };
+        }
+
+        var cidToGidMap = dict.get('CIDToGIDMap');
+        if (isStream(cidToGidMap))
+          properties.cidToGidMap = this.readCidToGidMap(cidToGidMap);
+      }
+
+      // Based on 9.6.6 of the spec the encoding can come from multiple places
+      // but should be prioritized in the following order:
+      // 1. Encoding dictionary
+      // 2. Encoding within font file (Type1 or Type1C)
+      // 3. Default (depends on font type)
+      // Differences applied to the above.
+      // Note: we don't fill in the encoding from the font file(2) here but use
+      // the flag overridableEncoding to signal that the font can override the
+      // encoding if it has one built in.
+      var overridableEncoding = true;
+      var hasEncoding = false;
+      var flags = properties.flags;
+      var differences = [];
+      var baseEncoding = properties.type === 'TrueType' ?
+                          Encodings.WinAnsiEncoding :
+                          Encodings.StandardEncoding;
+      // The Symbolic attribute can be misused for regular fonts
+      // Heuristic: we have to check if the font is a standard one also
+      if (!!(flags & FontFlags.Symbolic)) {
+        baseEncoding = !properties.file ? Encodings.symbolsEncoding :
+                                          Encodings.MacRomanEncoding;
+      }
+      if (dict.has('Encoding')) {
+        var encoding = dict.get('Encoding');
+        if (isDict(encoding)) {
+          var baseName = encoding.get('BaseEncoding');
+          if (baseName) {
+            overridableEncoding = false;
+            hasEncoding = true;
+            baseEncoding = Encodings[baseName.name];
+          }
+
+          // Load the differences between the base and original
+          if (encoding.has('Differences')) {
+            hasEncoding = true;
+            var diffEncoding = encoding.get('Differences');
+            var index = 0;
+            for (var j = 0, jj = diffEncoding.length; j < jj; j++) {
+              var data = diffEncoding[j];
+              if (isNum(data))
+                index = data;
+              else
+                differences[index++] = data.name;
+            }
+          }
+        } else if (isName(encoding)) {
+          overridableEncoding = false;
+          hasEncoding = true;
+          baseEncoding = Encodings[encoding.name];
+        } else {
+          error('Encoding is not a Name nor a Dict');
+        }
+      }
+
+      properties.differences = differences;
+      properties.baseEncoding = baseEncoding;
+      properties.hasEncoding = hasEncoding;
+      properties.overridableEncoding = overridableEncoding;
+    },
+
+    readToUnicode: function PartialEvaluator_readToUnicode(toUnicode, xref,
+                                                           properties) {
+      var cmapObj = toUnicode;
+      var charToUnicode = [];
+      if (isName(cmapObj)) {
+        var isIdentityMap = cmapObj.name.substr(0, 9) == 'Identity-';
+        if (!isIdentityMap)
+          error('ToUnicode file cmap translation not implemented');
+      } else if (isStream(cmapObj)) {
+        var cmap = CMapFactory.create(cmapObj).map;
+        // Convert UTF-16BE
+        for (var i in cmap) {
+          var token = cmap[i];
+          var str = [];
+          for (var k = 0; k < token.length; k += 2) {
+            var w1 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1);
+            if ((w1 & 0xF800) !== 0xD800) { // w1 < 0xD800 || w1 > 0xDFFF
+              str.push(w1);
+              continue;
+            }
+            k += 2;
+            var w2 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1);
+            str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000);
+          }
+          cmap[i] = String.fromCharCode.apply(String, str);
+        }
+        return cmap;
+      }
+      return charToUnicode;
+    },
+    readCidToGidMap: function PartialEvaluator_readCidToGidMap(cidToGidStream) {
+      // Extract the encoding from the CIDToGIDMap
+      var glyphsData = cidToGidStream.getBytes();
+
+      // Set encoding 0 to later verify the font has an encoding
+      var result = [];
+      for (var j = 0, jj = glyphsData.length; j < jj; j++) {
+        var glyphID = (glyphsData[j++] << 8) | glyphsData[j];
+        if (glyphID === 0)
+          continue;
+
+        var code = j >> 1;
+        result[code] = glyphID;
+      }
+      return result;
+    },
+
+    extractWidths: function PartialEvaluator_extractWidths(dict,
+                                                   xref,
+                                                   descriptor,
+                                                   properties) {
+      var glyphsWidths = [];
+      var defaultWidth = 0;
+      var glyphsVMetrics = [];
+      var defaultVMetrics;
+      if (properties.composite) {
+        defaultWidth = dict.get('DW') || 1000;
+
+        var widths = dict.get('W');
+        if (widths) {
+          for (var i = 0, ii = widths.length; i < ii; i++) {
+            var start = widths[i++];
+            var code = xref.fetchIfRef(widths[i]);
+            if (isArray(code)) {
+              for (var j = 0, jj = code.length; j < jj; j++)
+                glyphsWidths[start++] = code[j];
+            } else {
+              var width = widths[++i];
+              for (var j = start; j <= code; j++)
+                glyphsWidths[j] = width;
+            }
+          }
+        }
+
+        if (properties.vertical) {
+          var vmetrics = dict.get('DW2') || [880, -1000];
+          defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]];
+          vmetrics = dict.get('W2');
+          if (vmetrics) {
+            for (var i = 0, ii = vmetrics.length; i < ii; i++) {
+              var start = vmetrics[i++];
+              var code = xref.fetchIfRef(vmetrics[i]);
+              if (isArray(code)) {
+                for (var j = 0, jj = code.length; j < jj; j++)
+                  glyphsVMetrics[start++] = [code[j++], code[j++], code[j]];
+              } else {
+                var vmetric = [vmetrics[++i], vmetrics[++i], vmetrics[++i]];
+                for (var j = start; j <= code; j++)
+                  glyphsVMetrics[j] = vmetric;
+              }
+            }
+          }
+        }
+      } else {
+        var firstChar = properties.firstChar;
+        var widths = dict.get('Widths');
+        if (widths) {
+          var j = firstChar;
+          for (var i = 0, ii = widths.length; i < ii; i++)
+            glyphsWidths[j++] = widths[i];
+          defaultWidth = parseFloat(descriptor.get('MissingWidth')) || 0;
+        } else {
+          // Trying get the BaseFont metrics (see comment above).
+          var baseFontName = dict.get('BaseFont');
+          if (isName(baseFontName)) {
+            var metrics = this.getBaseFontMetrics(baseFontName.name);
+
+            glyphsWidths = metrics.widths;
+            defaultWidth = metrics.defaultWidth;
+          }
+        }
+      }
+
+      // Heuristic: detection of monospace font by checking all non-zero widths
+      var isMonospace = true, firstWidth = defaultWidth;
+      for (var glyph in glyphsWidths) {
+        var glyphWidth = glyphsWidths[glyph];
+        if (!glyphWidth)
+          continue;
+        if (!firstWidth) {
+          firstWidth = glyphWidth;
+          continue;
+        }
+        if (firstWidth != glyphWidth) {
+          isMonospace = false;
+          break;
+        }
+      }
+      if (isMonospace)
+        properties.flags |= FontFlags.FixedPitch;
+
+      properties.defaultWidth = defaultWidth;
+      properties.widths = glyphsWidths;
+      properties.defaultVMetrics = defaultVMetrics;
+      properties.vmetrics = glyphsVMetrics;
+    },
+
+    isSerifFont: function PartialEvaluator_isSerifFont(baseFontName) {
+
+      // Simulating descriptor flags attribute
+      var fontNameWoStyle = baseFontName.split('-')[0];
+      return (fontNameWoStyle in serifFonts) ||
+          (fontNameWoStyle.search(/serif/gi) !== -1);
+    },
+
+    getBaseFontMetrics: function PartialEvaluator_getBaseFontMetrics(name) {
+      var defaultWidth = 0, widths = [], monospace = false;
+
+      var lookupName = stdFontMap[name] || name;
+
+      if (!(lookupName in Metrics)) {
+        // Use default fonts for looking up font metrics if the passed
+        // font is not a base font
+        if (this.isSerifFont(name)) {
+          lookupName = 'Times-Roman';
+        } else {
+          lookupName = 'Helvetica';
+        }
+      }
+      var glyphWidths = Metrics[lookupName];
+
+      if (isNum(glyphWidths)) {
+        defaultWidth = glyphWidths;
+        monospace = true;
+      } else {
+        widths = glyphWidths;
+      }
+
+      return {
+        defaultWidth: defaultWidth,
+        monospace: monospace,
+        widths: widths
+      };
+    },
+
+    translateFont: function PartialEvaluator_translateFont(dict,
+                                                           xref) {
+      var baseDict = dict;
+      var type = dict.get('Subtype');
+      assertWellFormed(isName(type), 'invalid font Subtype');
+
+      var composite = false;
+      if (type.name == 'Type0') {
+        // If font is a composite
+        //  - get the descendant font
+        //  - set the type according to the descendant font
+        //  - get the FontDescriptor from the descendant font
+        var df = dict.get('DescendantFonts');
+        if (!df)
+          error('Descendant fonts are not specified');
+
+        dict = isArray(df) ? xref.fetchIfRef(df[0]) : df;
+
+        type = dict.get('Subtype');
+        assertWellFormed(isName(type), 'invalid font Subtype');
+        composite = true;
+      }
+      var maxCharIndex = composite ? 0xFFFF : 0xFF;
+
+      var descriptor = dict.get('FontDescriptor');
+      if (!descriptor) {
+        if (type.name == 'Type3') {
+          // FontDescriptor is only required for Type3 fonts when the document
+          // is a tagged pdf. Create a barbebones one to get by.
+          descriptor = new Dict();
+          descriptor.set('FontName', new Name(type.name));
+        } else {
+          // Before PDF 1.5 if the font was one of the base 14 fonts, having a
+          // FontDescriptor was not required.
+          // This case is here for compatibility.
+          var baseFontName = dict.get('BaseFont');
+          if (!isName(baseFontName))
+            error('Base font is not specified');
+
+          // Using base font name as a font name.
+          baseFontName = baseFontName.name.replace(/[,_]/g, '-');
+          var metrics = this.getBaseFontMetrics(baseFontName);
+
+          // Simulating descriptor flags attribute
+          var fontNameWoStyle = baseFontName.split('-')[0];
+          var flags = (
+            this.isSerifFont(fontNameWoStyle) ? FontFlags.Serif : 0) |
+            (metrics.monospace ? FontFlags.FixedPitch : 0) |
+            (symbolsFonts[fontNameWoStyle] ? FontFlags.Symbolic :
+            FontFlags.Nonsymbolic);
+
+          var properties = {
+            type: type.name,
+            widths: metrics.widths,
+            defaultWidth: metrics.defaultWidth,
+            flags: flags,
+            firstChar: 0,
+            lastChar: maxCharIndex
+          };
+          this.extractDataStructures(dict, dict, xref, properties);
+
+          return new Font(baseFontName, null, properties);
+        }
+      }
+
+      // According to the spec if 'FontDescriptor' is declared, 'FirstChar',
+      // 'LastChar' and 'Widths' should exist too, but some PDF encoders seem
+      // to ignore this rule when a variant of a standart font is used.
+      // TODO Fill the width array depending on which of the base font this is
+      // a variant.
+      var firstChar = dict.get('FirstChar') || 0;
+      var lastChar = dict.get('LastChar') || maxCharIndex;
+
+      var fontName = descriptor.get('FontName');
+      var baseFont = dict.get('BaseFont');
+      // Some bad pdf's have a string as the font name.
+      if (isString(fontName)) {
+        fontName = new Name(fontName);
+      }
+      if (isString(baseFont)) {
+        baseFont = new Name(baseFont);
+      }
+
+      if (type.name !== 'Type3') {
+        var fontNameStr = fontName && fontName.name;
+        var baseFontStr = baseFont && baseFont.name;
+        if (fontNameStr !== baseFontStr) {
+          info('The FontDescriptor\'s FontName is "' + fontNameStr +
+               '" but should be the same as the Font\'s BaseFont "' +
+               baseFontStr + '"');
+        }
+      }
+      fontName = fontName || baseFont;
+
+      assertWellFormed(isName(fontName), 'invalid font name');
+
+      var fontFile = descriptor.get('FontFile', 'FontFile2', 'FontFile3');
+      if (fontFile) {
+        if (fontFile.dict) {
+          var subtype = fontFile.dict.get('Subtype');
+          if (subtype)
+            subtype = subtype.name;
+
+          var length1 = fontFile.dict.get('Length1');
+
+          var length2 = fontFile.dict.get('Length2');
+        }
+      }
+
+      var properties = {
+        type: type.name,
+        subtype: subtype,
+        file: fontFile,
+        length1: length1,
+        length2: length2,
+        loadedName: baseDict.loadedName,
+        composite: composite,
+        wideChars: composite,
+        fixedPitch: false,
+        fontMatrix: dict.get('FontMatrix') || FONT_IDENTITY_MATRIX,
+        firstChar: firstChar || 0,
+        lastChar: lastChar || maxCharIndex,
+        bbox: descriptor.get('FontBBox'),
+        ascent: descriptor.get('Ascent'),
+        descent: descriptor.get('Descent'),
+        xHeight: descriptor.get('XHeight'),
+        capHeight: descriptor.get('CapHeight'),
+        flags: descriptor.get('Flags'),
+        italicAngle: descriptor.get('ItalicAngle'),
+        coded: false
+      };
+
+      if (composite) {
+        var cidEncoding = baseDict.get('Encoding');
+        if (isName(cidEncoding)) {
+          properties.cidEncoding = cidEncoding.name;
+          properties.vertical = /-V$/.test(cidEncoding.name);
+        }
+        properties.cmap = CMapFactory.create(cidEncoding);
+      }
+      this.extractWidths(dict, xref, descriptor, properties);
+      this.extractDataStructures(dict, baseDict, xref, properties);
+
+      if (type.name === 'Type3') {
+        properties.coded = true;
+      }
+
+      return new Font(fontName.name, fontFile, properties);
+    }
+  };
+
+  PartialEvaluator.optimizeQueue =
+      function PartialEvaluator_optimizeQueue(queue) {
+
+    var fnArray = queue.fnArray, argsArray = queue.argsArray;
+    // grouping paintInlineImageXObject's into paintInlineImageXObjectGroup
+    // searching for (save, transform, paintInlineImageXObject, restore)+
+    var MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10;
+    var MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200;
+    var MAX_WIDTH = 1000;
+    var IMAGE_PADDING = 1;
+    for (var i = 0, ii = fnArray.length; i < ii; i++) {
+      if (fnArray[i] === 'paintInlineImageXObject' &&
+          fnArray[i - 2] === 'save' && fnArray[i - 1] === 'transform' &&
+          fnArray[i + 1] === 'restore') {
+        var j = i - 2;
+        for (i += 2; i < ii && fnArray[i - 4] === fnArray[i]; i++) {
+        }
+        var count = Math.min((i - j) >> 2,
+                             MAX_IMAGES_IN_INLINE_IMAGES_BLOCK);
+        if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) {
+          continue;
+        }
+        // assuming that heights of those image is too small (~1 pixel)
+        // packing as much as possible by lines
+        var maxX = 0;
+        var map = [], maxLineHeight = 0;
+        var currentX = IMAGE_PADDING, currentY = IMAGE_PADDING;
+        for (var q = 0; q < count; q++) {
+          var transform = argsArray[j + (q << 2) + 1];
+          var img = argsArray[j + (q << 2) + 2][0];
+          if (currentX + img.width > MAX_WIDTH) {
+            // starting new line
+            maxX = Math.max(maxX, currentX);
+            currentY += maxLineHeight + 2 * IMAGE_PADDING;
+            currentX = 0;
+            maxLineHeight = 0;
+          }
+          map.push({
+            transform: transform,
+            x: currentX, y: currentY,
+            w: img.width, h: img.height
+          });
+          currentX += img.width + 2 * IMAGE_PADDING;
+          maxLineHeight = Math.max(maxLineHeight, img.height);
+        }
+        var imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING;
+        var imgHeight = currentY + maxLineHeight + IMAGE_PADDING;
+        var imgData = new Uint8Array(imgWidth * imgHeight * 4);
+        var imgRowSize = imgWidth << 2;
+        for (var q = 0; q < count; q++) {
+          var data = argsArray[j + (q << 2) + 2][0].data;
+          // copy image by lines and extends pixels into padding
+          var rowSize = map[q].w << 2;
+          var dataOffset = 0;
+          var offset = (map[q].x + map[q].y * imgWidth) << 2;
+          imgData.set(
+            data.subarray(0, rowSize), offset - imgRowSize);
+          for (var k = 0, kk = map[q].h; k < kk; k++) {
+            imgData.set(
+              data.subarray(dataOffset, dataOffset + rowSize), offset);
+            dataOffset += rowSize;
+            offset += imgRowSize;
+          }
+          imgData.set(
+            data.subarray(dataOffset - rowSize, dataOffset), offset);
+          while (offset >= 0) {
+            data[offset - 4] = data[offset];
+            data[offset - 3] = data[offset + 1];
+            data[offset - 2] = data[offset + 2];
+            data[offset - 1] = data[offset + 3];
+            data[offset + rowSize] = data[offset + rowSize - 4];
+            data[offset + rowSize + 1] = data[offset + rowSize - 3];
+            data[offset + rowSize + 2] = data[offset + rowSize - 2];
+            data[offset + rowSize + 3] = data[offset + rowSize - 1];
+            offset -= imgRowSize;
+          }
+        }
+        // replacing queue items
+        fnArray.splice(j, count * 4, ['paintInlineImageXObjectGroup']);
+        argsArray.splice(j, count * 4,
+          [{width: imgWidth, height: imgHeight, data: imgData}, map]);
+        i = j;
+        ii = fnArray.length;
+      }
+    }
+    // grouping paintImageMaskXObject's into paintImageMaskXObjectGroup
+    // searching for (save, transform, paintImageMaskXObject, restore)+
+    var MIN_IMAGES_IN_MASKS_BLOCK = 10;
+    var MAX_IMAGES_IN_MASKS_BLOCK = 100;
+    for (var i = 0, ii = fnArray.length; i < ii; i++) {
+      if (fnArray[i] === 'paintImageMaskXObject' &&
+          fnArray[i - 2] === 'save' && fnArray[i - 1] === 'transform' &&
+          fnArray[i + 1] === 'restore') {
+        var j = i - 2;
+        for (i += 2; i < ii && fnArray[i - 4] === fnArray[i]; i++) {
+        }
+        var count = Math.min((i - j) >> 2,
+                             MAX_IMAGES_IN_MASKS_BLOCK);
+        if (count < MIN_IMAGES_IN_MASKS_BLOCK) {
+          continue;
+        }
+        var images = [];
+        for (var q = 0; q < count; q++) {
+          var transform = argsArray[j + (q << 2) + 1];
+          var maskParams = argsArray[j + (q << 2) + 2][0];
+          images.push({data: maskParams.data, width: maskParams.width,
+            height: maskParams.height, transform: transform});
+        }
+        // replacing queue items
+        fnArray.splice(j, count * 4, ['paintImageMaskXObjectGroup']);
+        argsArray.splice(j, count * 4, [images]);
+        i = j;
+        ii = fnArray.length;
+      }
+    }
+  };
+
+
+  return PartialEvaluator;
+})();
+
+
+var OperatorList = (function OperatorListClosure() {
+  var CHUNK_SIZE = 100;
+
+  function OperatorList(messageHandler, pageIndex) {
+    this.messageHandler = messageHandler;
+    this.fnArray = [];
+    this.argsArray = [];
+    this.dependencies = {},
+    this.pageIndex = pageIndex;
+  }
+
+  OperatorList.prototype = {
+
+    addOp: function(fn, args) {
+      this.fnArray.push(fn);
+      this.argsArray.push(args);
+      if (this.messageHandler && this.fnArray.length >= CHUNK_SIZE) {
+        this.flush();
+      }
+    },
+
+    addDependency: function(dependency) {
+      if (dependency in this.dependencies) {
+        return;
+      }
+      this.dependencies[dependency] = true;
+      this.addOp('dependency', [dependency]);
+    },
+
+    addDependencies: function(dependencies) {
+      for (var key in dependencies) {
+        this.addDependency(key);
+      }
+    },
+
+    addOpList: function(opList) {
+      Util.concatenateToArray(this.fnArray, opList.fnArray);
+      Util.concatenateToArray(this.argsArray, opList.argsArray);
+      Util.extendObj(this.dependencies, opList.dependencies);
+    },
+
+    getIR: function() {
+      return {
+        fnArray: this.fnArray,
+        argsArray: this.argsArray
+      };
+    },
+
+    flush: function(lastChunk) {
+      PartialEvaluator.optimizeQueue(this);
+      this.messageHandler.send('RenderPageChunk', {
+        operatorList: {
+          fnArray: this.fnArray,
+          argsArray: this.argsArray,
+          lastChunk: lastChunk
+        },
+        pageIndex: this.pageIndex
+      });
+      this.dependencies = [];
+      this.fnArray = [];
+      this.argsArray = [];
+    }
+  };
+
+  return OperatorList;
+})();
+var TextState = (function TextStateClosure() {
+  function TextState() {
+    this.fontSize = 0;
+    this.ctm = [1, 0, 0, 1, 0, 0];
+    this.textMatrix = [1, 0, 0, 1, 0, 0];
+    this.stateStack = [];
+    //textState variables
+    this.leading = 0;
+    this.textHScale = 1;
+    this.textRise = 0;
+  }
+  TextState.prototype = {
+    push: function TextState_push() {
+      this.stateStack.push(this.ctm.slice());
+    },
+    pop: function TextStae_pop() {
+      this.ctm = this.stateStack.pop();
+    },
+    initialiseTextObj: function TextState_initialiseTextObj() {
+      var m = this.textMatrix;
+      m[0] = 1, m[1] = 0, m[2] = 0, m[3] = 1, m[4] = 0, m[5] = 0;
+    },
+    setTextMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) {
+      var m = this.textMatrix;
+      m[0] = a, m[1] = b, m[2] = c, m[3] = d, m[4] = e, m[5] = f;
+    },
+    transformCTM: function TextState_transformCTM(a, b, c, d, e, f) {
+      var m = this.ctm;
+      var m0 = m[0], m1 = m[1], m2 = m[2], m3 = m[3], m4 = m[4], m5 = m[5];
+      m[0] = m0 * a + m2 * b;
+      m[1] = m1 * a + m3 * b;
+      m[2] = m0 * c + m2 * d;
+      m[3] = m1 * c + m3 * d;
+      m[4] = m0 * e + m2 * f + m4;
+      m[5] = m1 * e + m3 * f + m5;
+    },
+    translateTextMatrix: function TextState_translateTextMatrix(x, y) {
+      var m = this.textMatrix;
+      m[4] = m[0] * x + m[2] * y + m[4];
+      m[5] = m[1] * x + m[3] * y + m[5];
+    },
+    calcRenderParams: function TextState_calcRenderingParams() {
+      var tm = this.textMatrix;
+      var cm = this.ctm;
+      var a = this.fontSize;
+      var b = a * this.textHScale;
+      var c = this.textRise;
+      var vScale = Math.sqrt((tm[2] * tm[2]) + (tm[3] * tm[3]));
+      var angle = Math.atan2(tm[1], tm[0]);
+      var m0 = tm[0] * cm[0] + tm[1] * cm[2];
+      var m1 = tm[0] * cm[1] + tm[1] * cm[3];
+      var m2 = tm[2] * cm[0] + tm[3] * cm[2];
+      var m3 = tm[2] * cm[1] + tm[3] * cm[3];
+      var m4 = tm[4] * cm[0] + tm[5] * cm[2] + cm[4];
+      var m5 = tm[4] * cm[1] + tm[5] * cm[3] + cm[5];
+      var renderMatrix = [
+        b * m0,
+        b * m1,
+        a * m2,
+        a * m3,
+        c * m2 + m4,
+        c * m3 + m5
+      ];
+      return {
+        renderMatrix: renderMatrix,
+        vScale: vScale,
+        angle: angle
+      };
+    },
+  };
+  return TextState;
+})();
+
+var EvalState = (function EvalStateClosure() {
+  function EvalState() {
+    this.font = null;
+    this.textRenderingMode = TextRenderingMode.FILL;
+  }
+  EvalState.prototype = {
+    clone: function CanvasExtraState_clone() {
+      return Object.create(this);
+    },
+  };
+  return EvalState;
+})();
+
+
+
+// Unicode Private Use Area
+var CMAP_GLYPH_OFFSET = 0xE000;
+var GLYPH_AREA_SIZE = 0x1900;
+var SYMBOLIC_FONT_GLYPH_OFFSET = 0xF000;
+
+// PDF Glyph Space Units are one Thousandth of a TextSpace Unit
+// except for Type 3 fonts
+var PDF_GLYPH_SPACE_UNITS = 1000;
+
+// Hinting is currently disabled due to unknown problems on windows
+// in tracemonkey and various other pdfs with type1 fonts.
+var HINTING_ENABLED = false;
+
+// Accented charactars are not displayed properly on windows, using this flag
+// to control analysis of seac charstrings.
+var SEAC_ANALYSIS_ENABLED = false;
+
+var FontFlags = {
+  FixedPitch: 1,
+  Serif: 2,
+  Symbolic: 4,
+  Script: 8,
+  Nonsymbolic: 32,
+  Italic: 64,
+  AllCap: 65536,
+  SmallCap: 131072,
+  ForceBold: 262144
+};
+
+var Encodings = {
+  ExpertEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle',
+    'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior',
+    'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma',
+    'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle',
+    'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle',
+    'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon',
+    'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior',
+    'questionsmall', '', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior',
+    'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior',
+    'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior',
+    '', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '',
+    'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall',
+    'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall',
+    'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall',
+    'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall',
+    'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary',
+    'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall',
+    '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall',
+    'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '',
+    'figuredash', 'hypheninferior', '', '', 'Ogoneksmall', 'Ringsmall',
+    'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters',
+    'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths',
+    'seveneighths', 'onethird', 'twothirds', '', '', 'zerosuperior',
+    'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior',
+    'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior',
+    'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior',
+    'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior',
+    'seveninferior', 'eightinferior', 'nineinferior', 'centinferior',
+    'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall',
+    'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall',
+    'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall',
+    'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',
+    'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall',
+    'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall',
+    'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',
+    'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall',
+    'Ydieresissmall'],
+  MacExpertEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'exclamsmall', 'Hungarumlautsmall', 'centoldstyle',
+    'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall',
+    'parenleftsuperior', 'parenrightsuperior', 'twodotenleader',
+    'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle',
+    'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle',
+    'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle',
+    'nineoldstyle', 'colon', 'semicolon', '', 'threequartersemdash', '',
+    'questionsmall', '', '', '', '', 'Ethsmall', '', '', 'onequarter',
+    'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths',
+    'seveneighths', 'onethird', 'twothirds', '', '', '', '', '', '', 'ff',
+    'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '', 'parenrightinferior',
+    'Circumflexsmall', 'hypheninferior', 'Gravesmall', 'Asmall', 'Bsmall',
+    'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall',
+    'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall',
+    'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall',
+    'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah',
+    'Tildesmall', '', '', 'asuperior', 'centsuperior', '', '', '', '',
+    'Aacutesmall', 'Agravesmall', 'Acircumflexsmall', 'Adieresissmall',
+    'Atildesmall', 'Aringsmall', 'Ccedillasmall', 'Eacutesmall', 'Egravesmall',
+    'Ecircumflexsmall', 'Edieresissmall', 'Iacutesmall', 'Igravesmall',
+    'Icircumflexsmall', 'Idieresissmall', 'Ntildesmall', 'Oacutesmall',
+    'Ogravesmall', 'Ocircumflexsmall', 'Odieresissmall', 'Otildesmall',
+    'Uacutesmall', 'Ugravesmall', 'Ucircumflexsmall', 'Udieresissmall', '',
+    'eightsuperior', 'fourinferior', 'threeinferior', 'sixinferior',
+    'eightinferior', 'seveninferior', 'Scaronsmall', '', 'centinferior',
+    'twoinferior', '', 'Dieresissmall', '', 'Caronsmall', 'osuperior',
+    'fiveinferior', '', 'commainferior', 'periodinferior', 'Yacutesmall', '',
+    'dollarinferior', '', 'Thornsmall', '', 'nineinferior', 'zeroinferior',
+    'Zcaronsmall', 'AEsmall', 'Oslashsmall', 'questiondownsmall',
+    'oneinferior', 'Lslashsmall', '', '', '', '', '', '', 'Cedillasmall', '',
+    '', '', '', '', 'OEsmall', 'figuredash', 'hyphensuperior', '', '', '', '',
+    'exclamdownsmall', '', 'Ydieresissmall', '', 'onesuperior', 'twosuperior',
+    'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior',
+    'sevensuperior', 'ninesuperior', 'zerosuperior', '', 'esuperior',
+    'rsuperior', 'tsuperior', '', '', 'isuperior', 'ssuperior', 'dsuperior',
+    '', '', '', '', '', 'lsuperior', 'Ogoneksmall', 'Brevesmall',
+    'Macronsmall', 'bsuperior', 'nsuperior', 'msuperior', 'commasuperior',
+    'periodsuperior', 'Dotaccentsmall', 'Ringsmall'],
+  MacRomanEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',
+    'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus',
+    'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three',
+    'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon',
+    'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F',
+    'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
+    'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright',
+    'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
+    'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
+    'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '',
+    'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis',
+    'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis', 'atilde',
+    'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis',
+    'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute',
+    'ograve', 'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave',
+    'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling',
+    'section', 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright',
+    'trademark', 'acute', 'dieresis', 'notequal', 'AE', 'Oslash', 'infinity',
+    'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff',
+    'summation', 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine',
+    'Omega', 'ae', 'oslash', 'questiondown', 'exclamdown', 'logicalnot',
+    'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft',
+    'guillemotright', 'ellipsis', '', 'Agrave', 'Atilde', 'Otilde', 'OE',
+    'oe', 'endash', 'emdash', 'quotedblleft', 'quotedblright', 'quoteleft',
+    'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction',
+    'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl',
+    'periodcentered', 'quotesinglbase', 'quotedblbase', 'perthousand',
+    'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute',
+    'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple',
+    'Ograve', 'Uacute', 'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex',
+    'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut',
+    'ogonek', 'caron'],
+  StandardEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',
+    'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus',
+    'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three',
+    'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon',
+    'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F',
+    'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
+    'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright',
+    'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f',
+    'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
+    'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdown',
+    'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency',
+    'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft',
+    'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger', 'daggerdbl',
+    'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase',
+    'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis',
+    'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex',
+    'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla',
+    '', 'hungarumlaut', 'ogonek', 'caron', 'emdash', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '',
+    '', '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae',
+    '', '', '', 'dotlessi', '', '', 'lslash', 'oslash', 'oe', 'germandbls'],
+  WinAnsiEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',
+    'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus',
+    'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three',
+    'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon',
+    'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F',
+    'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
+    'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright',
+    'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
+    'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
+    'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde',
+    'bullet', 'Euro', 'bullet', 'quotesinglbase', 'florin', 'quotedblbase',
+    'ellipsis', 'dagger', 'daggerdbl', 'circumflex', 'perthousand', 'Scaron',
+    'guilsinglleft', 'OE', 'bullet', 'Zcaron', 'bullet', 'bullet', 'quoteleft',
+    'quoteright', 'quotedblleft', 'quotedblright', 'bullet', 'endash',
+    'emdash', 'tilde', 'trademark', 'scaron', 'guilsinglright', 'oe', 'bullet',
+    'zcaron', 'Ydieresis', '', 'exclamdown', 'cent', 'sterling',
+    'currency', 'yen', 'brokenbar', 'section', 'dieresis', 'copyright',
+    'ordfeminine', 'guillemotleft', 'logicalnot', 'hyphen', 'registered',
+    'macron', 'degree', 'plusminus', 'twosuperior', 'threesuperior', 'acute',
+    'mu', 'paragraph', 'periodcentered', 'cedilla', 'onesuperior',
+    'ordmasculine', 'guillemotright', 'onequarter', 'onehalf', 'threequarters',
+    'questiondown', 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', 'Adieresis',
+    'Aring', 'AE', 'Ccedilla', 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis',
+    'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Eth', 'Ntilde', 'Ograve',
+    'Oacute', 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', 'Oslash',
+    'Ugrave', 'Uacute', 'Ucircumflex', 'Udieresis', 'Yacute', 'Thorn',
+    'germandbls', 'agrave', 'aacute', 'acircumflex', 'atilde', 'adieresis',
+    'aring', 'ae', 'ccedilla', 'egrave', 'eacute', 'ecircumflex', 'edieresis',
+    'igrave', 'iacute', 'icircumflex', 'idieresis', 'eth', 'ntilde', 'ograve',
+    'oacute', 'ocircumflex', 'otilde', 'odieresis', 'divide', 'oslash',
+    'ugrave', 'uacute', 'ucircumflex', 'udieresis', 'yacute', 'thorn',
+    'ydieresis'],
+  symbolsEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'exclam', 'universal', 'numbersign', 'existential', 'percent',
+    'ampersand', 'suchthat', 'parenleft', 'parenright', 'asteriskmath', 'plus',
+    'comma', 'minus', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four',
+    'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less',
+    'equal', 'greater', 'question', 'congruent', 'Alpha', 'Beta', 'Chi',
+    'Delta', 'Epsilon', 'Phi', 'Gamma', 'Eta', 'Iota', 'theta1', 'Kappa',
+    'Lambda', 'Mu', 'Nu', 'Omicron', 'Pi', 'Theta', 'Rho', 'Sigma', 'Tau',
+    'Upsilon', 'sigma1', 'Omega', 'Xi', 'Psi', 'Zeta', 'bracketleft',
+    'therefore', 'bracketright', 'perpendicular', 'underscore', 'radicalex',
+    'alpha', 'beta', 'chi', 'delta', 'epsilon', 'phi', 'gamma', 'eta', 'iota',
+    'phi1', 'kappa', 'lambda', 'mu', 'nu', 'omicron', 'pi', 'theta', 'rho',
+    'sigma', 'tau', 'upsilon', 'omega1', 'omega', 'xi', 'psi', 'zeta',
+    'braceleft', 'bar', 'braceright', 'similar', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', 'Euro', 'Upsilon1', 'minute', 'lessequal',
+    'fraction', 'infinity', 'florin', 'club', 'diamond', 'heart', 'spade',
+    'arrowboth', 'arrowleft', 'arrowup', 'arrowright', 'arrowdown', 'degree',
+    'plusminus', 'second', 'greaterequal', 'multiply', 'proportional',
+    'partialdiff', 'bullet', 'divide', 'notequal', 'equivalence',
+    'approxequal', 'ellipsis', 'arrowvertex', 'arrowhorizex', 'carriagereturn',
+    'aleph', 'Ifraktur', 'Rfraktur', 'weierstrass', 'circlemultiply',
+    'circleplus', 'emptyset', 'intersection', 'union', 'propersuperset',
+    'reflexsuperset', 'notsubset', 'propersubset', 'reflexsubset', 'element',
+    'notelement', 'angle', 'gradient', 'registerserif', 'copyrightserif',
+    'trademarkserif', 'product', 'radical', 'dotmath', 'logicalnot',
+    'logicaland', 'logicalor', 'arrowdblboth', 'arrowdblleft', 'arrowdblup',
+    'arrowdblright', 'arrowdbldown', 'lozenge', 'angleleft', 'registersans',
+    'copyrightsans', 'trademarksans', 'summation', 'parenlefttp',
+    'parenleftex', 'parenleftbt', 'bracketlefttp', 'bracketleftex',
+    'bracketleftbt', 'bracelefttp', 'braceleftmid', 'braceleftbt', 'braceex',
+    '', 'angleright', 'integral', 'integraltp', 'integralex', 'integralbt',
+    'parenrighttp', 'parenrightex', 'parenrightbt', 'bracketrighttp',
+    'bracketrightex', 'bracketrightbt', 'bracerighttp', 'bracerightmid',
+    'bracerightbt'],
+  zapfDingbatsEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'a1', 'a2', 'a202', 'a3', 'a4', 'a5', 'a119', 'a118', 'a117',
+    'a11', 'a12', 'a13', 'a14', 'a15', 'a16', 'a105', 'a17', 'a18', 'a19',
+    'a20', 'a21', 'a22', 'a23', 'a24', 'a25', 'a26', 'a27', 'a28', 'a6', 'a7',
+    'a8', 'a9', 'a10', 'a29', 'a30', 'a31', 'a32', 'a33', 'a34', 'a35', 'a36',
+    'a37', 'a38', 'a39', 'a40', 'a41', 'a42', 'a43', 'a44', 'a45', 'a46',
+    'a47', 'a48', 'a49', 'a50', 'a51', 'a52', 'a53', 'a54', 'a55', 'a56',
+    'a57', 'a58', 'a59', 'a60', 'a61', 'a62', 'a63', 'a64', 'a65', 'a66',
+    'a67', 'a68', 'a69', 'a70', 'a71', 'a72', 'a73', 'a74', 'a203', 'a75',
+    'a204', 'a76', 'a77', 'a78', 'a79', 'a81', 'a82', 'a83', 'a84', 'a97',
+    'a98', 'a99', 'a100', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', 'a101', 'a102', 'a103', 'a104', 'a106', 'a107', 'a108', 'a112',
+    'a111', 'a110', 'a109', 'a120', 'a121', 'a122', 'a123', 'a124', 'a125',
+    'a126', 'a127', 'a128', 'a129', 'a130', 'a131', 'a132', 'a133', 'a134',
+    'a135', 'a136', 'a137', 'a138', 'a139', 'a140', 'a141', 'a142', 'a143',
+    'a144', 'a145', 'a146', 'a147', 'a148', 'a149', 'a150', 'a151', 'a152',
+    'a153', 'a154', 'a155', 'a156', 'a157', 'a158', 'a159', 'a160', 'a161',
+    'a163', 'a164', 'a196', 'a165', 'a192', 'a166', 'a167', 'a168', 'a169',
+    'a170', 'a171', 'a172', 'a173', 'a162', 'a174', 'a175', 'a176', 'a177',
+    'a178', 'a179', 'a193', 'a180', 'a199', 'a181', 'a200', 'a182', '', 'a201',
+    'a183', 'a184', 'a197', 'a185', 'a194', 'a198', 'a186', 'a195', 'a187',
+    'a188', 'a189', 'a190', 'a191']
+};
+
+/**
+ * Hold a map of decoded fonts and of the standard fourteen Type1
+ * fonts and their acronyms.
+ */
+var stdFontMap = {
+  'ArialNarrow': 'Helvetica',
+  'ArialNarrow-Bold': 'Helvetica-Bold',
+  'ArialNarrow-BoldItalic': 'Helvetica-BoldOblique',
+  'ArialNarrow-Italic': 'Helvetica-Oblique',
+  'ArialBlack': 'Helvetica',
+  'ArialBlack-Bold': 'Helvetica-Bold',
+  'ArialBlack-BoldItalic': 'Helvetica-BoldOblique',
+  'ArialBlack-Italic': 'Helvetica-Oblique',
+  'Arial': 'Helvetica',
+  'Arial-Bold': 'Helvetica-Bold',
+  'Arial-BoldItalic': 'Helvetica-BoldOblique',
+  'Arial-Italic': 'Helvetica-Oblique',
+  'Arial-BoldItalicMT': 'Helvetica-BoldOblique',
+  'Arial-BoldMT': 'Helvetica-Bold',
+  'Arial-ItalicMT': 'Helvetica-Oblique',
+  'ArialMT': 'Helvetica',
+  'Courier-Bold': 'Courier-Bold',
+  'Courier-BoldItalic': 'Courier-BoldOblique',
+  'Courier-Italic': 'Courier-Oblique',
+  'CourierNew': 'Courier',
+  'CourierNew-Bold': 'Courier-Bold',
+  'CourierNew-BoldItalic': 'Courier-BoldOblique',
+  'CourierNew-Italic': 'Courier-Oblique',
+  'CourierNewPS-BoldItalicMT': 'Courier-BoldOblique',
+  'CourierNewPS-BoldMT': 'Courier-Bold',
+  'CourierNewPS-ItalicMT': 'Courier-Oblique',
+  'CourierNewPSMT': 'Courier',
+  'Helvetica-Bold': 'Helvetica-Bold',
+  'Helvetica-BoldItalic': 'Helvetica-BoldOblique',
+  'Helvetica-Italic': 'Helvetica-Oblique',
+  'Symbol-Bold': 'Symbol',
+  'Symbol-BoldItalic': 'Symbol',
+  'Symbol-Italic': 'Symbol',
+  'TimesNewRoman': 'Times-Roman',
+  'TimesNewRoman-Bold': 'Times-Bold',
+  'TimesNewRoman-BoldItalic': 'Times-BoldItalic',
+  'TimesNewRoman-Italic': 'Times-Italic',
+  'TimesNewRomanPS': 'Times-Roman',
+  'TimesNewRomanPS-Bold': 'Times-Bold',
+  'TimesNewRomanPS-BoldItalic': 'Times-BoldItalic',
+  'TimesNewRomanPS-BoldItalicMT': 'Times-BoldItalic',
+  'TimesNewRomanPS-BoldMT': 'Times-Bold',
+  'TimesNewRomanPS-Italic': 'Times-Italic',
+  'TimesNewRomanPS-ItalicMT': 'Times-Italic',
+  'TimesNewRomanPSMT': 'Times-Roman',
+  'TimesNewRomanPSMT-Bold': 'Times-Bold',
+  'TimesNewRomanPSMT-BoldItalic': 'Times-BoldItalic',
+  'TimesNewRomanPSMT-Italic': 'Times-Italic'
+};
+
+/**
+ * Holds the map of the non-standard fonts that might be included as a standard
+ * fonts without glyph data.
+ */
+var nonStdFontMap = {
+  'ComicSansMS': 'Comic Sans MS',
+  'ComicSansMS-Bold': 'Comic Sans MS-Bold',
+  'ComicSansMS-BoldItalic': 'Comic Sans MS-BoldItalic',
+  'ComicSansMS-Italic': 'Comic Sans MS-Italic',
+  'LucidaConsole': 'Courier',
+  'LucidaConsole-Bold': 'Courier-Bold',
+  'LucidaConsole-BoldItalic': 'Courier-BoldOblique',
+  'LucidaConsole-Italic': 'Courier-Oblique',
+  'MS-Gothic': 'MS Gothic',
+  'MS-Gothic-Bold': 'MS Gothic-Bold',
+  'MS-Gothic-BoldItalic': 'MS Gothic-BoldItalic',
+  'MS-Gothic-Italic': 'MS Gothic-Italic',
+  'MS-Mincho': 'MS Mincho',
+  'MS-Mincho-Bold': 'MS Mincho-Bold',
+  'MS-Mincho-BoldItalic': 'MS Mincho-BoldItalic',
+  'MS-Mincho-Italic': 'MS Mincho-Italic',
+  'MS-PGothic': 'MS PGothic',
+  'MS-PGothic-Bold': 'MS PGothic-Bold',
+  'MS-PGothic-BoldItalic': 'MS PGothic-BoldItalic',
+  'MS-PGothic-Italic': 'MS PGothic-Italic',
+  'MS-PMincho': 'MS PMincho',
+  'MS-PMincho-Bold': 'MS PMincho-Bold',
+  'MS-PMincho-BoldItalic': 'MS PMincho-BoldItalic',
+  'MS-PMincho-Italic': 'MS PMincho-Italic',
+};
+
+var serifFonts = {
+  'Adobe Jenson': true, 'Adobe Text': true, 'Albertus': true,
+  'Aldus': true, 'Alexandria': true, 'Algerian': true,
+  'American Typewriter': true, 'Antiqua': true, 'Apex': true,
+  'Arno': true, 'Aster': true, 'Aurora': true,
+  'Baskerville': true, 'Bell': true, 'Bembo': true,
+  'Bembo Schoolbook': true, 'Benguiat': true, 'Berkeley Old Style': true,
+  'Bernhard Modern': true, 'Berthold City': true, 'Bodoni': true,
+  'Bauer Bodoni': true, 'Book Antiqua': true, 'Bookman': true,
+  'Bordeaux Roman': true, 'Californian FB': true, 'Calisto': true,
+  'Calvert': true, 'Capitals': true, 'Cambria': true,
+  'Cartier': true, 'Caslon': true, 'Catull': true,
+  'Centaur': true, 'Century Old Style': true, 'Century Schoolbook': true,
+  'Chaparral': true, 'Charis SIL': true, 'Cheltenham': true,
+  'Cholla Slab': true, 'Clarendon': true, 'Clearface': true,
+  'Cochin': true, 'Colonna': true, 'Computer Modern': true,
+  'Concrete Roman': true, 'Constantia': true, 'Cooper Black': true,
+  'Corona': true, 'Ecotype': true, 'Egyptienne': true,
+  'Elephant': true, 'Excelsior': true, 'Fairfield': true,
+  'FF Scala': true, 'Folkard': true, 'Footlight': true,
+  'FreeSerif': true, 'Friz Quadrata': true, 'Garamond': true,
+  'Gentium': true, 'Georgia': true, 'Gloucester': true,
+  'Goudy Old Style': true, 'Goudy Schoolbook': true, 'Goudy Pro Font': true,
+  'Granjon': true, 'Guardian Egyptian': true, 'Heather': true,
+  'Hercules': true, 'High Tower Text': true, 'Hiroshige': true,
+  'Hoefler Text': true, 'Humana Serif': true, 'Imprint': true,
+  'Ionic No. 5': true, 'Janson': true, 'Joanna': true,
+  'Korinna': true, 'Lexicon': true, 'Liberation Serif': true,
+  'Linux Libertine': true, 'Literaturnaya': true, 'Lucida': true,
+  'Lucida Bright': true, 'Melior': true, 'Memphis': true,
+  'Miller': true, 'Minion': true, 'Modern': true,
+  'Mona Lisa': true, 'Mrs Eaves': true, 'MS Serif': true,
+  'Museo Slab': true, 'New York': true, 'Nimbus Roman': true,
+  'NPS Rawlinson Roadway': true, 'Palatino': true, 'Perpetua': true,
+  'Plantin': true, 'Plantin Schoolbook': true, 'Playbill': true,
+  'Poor Richard': true, 'Rawlinson Roadway': true, 'Renault': true,
+  'Requiem': true, 'Rockwell': true, 'Roman': true,
+  'Rotis Serif': true, 'Sabon': true, 'Scala': true,
+  'Seagull': true, 'Sistina': true, 'Souvenir': true,
+  'STIX': true, 'Stone Informal': true, 'Stone Serif': true,
+  'Sylfaen': true, 'Times': true, 'Trajan': true,
+  'Trinité': true, 'Trump Mediaeval': true, 'Utopia': true,
+  'Vale Type': true, 'Bitstream Vera': true, 'Vera Serif': true,
+  'Versailles': true, 'Wanted': true, 'Weiss': true,
+  'Wide Latin': true, 'Windsor': true, 'XITS': true
+};
+
+var symbolsFonts = {
+  'Dingbats': true, 'Symbol': true, 'ZapfDingbats': true
+};
+
+var CMapConverterList = {
+  'H': jis7ToUnicode,
+  'V': jis7ToUnicode,
+  'EUC-H': eucjpToUnicode,
+  'EUC-V': eucjpToUnicode,
+  '83pv-RKSJ-H': sjis83pvToUnicode,
+  '90pv-RKSJ-H': sjis90pvToUnicode,
+  '90ms-RKSJ-H': sjisToUnicode,
+  '90ms-RKSJ-V': sjisToUnicode,
+  '90msp-RKSJ-H': sjisToUnicode,
+  '90msp-RKSJ-V': sjisToUnicode,
+  'GBK-EUC-H': gbkToUnicode,
+  'GBKp-EUC-H': gbkToUnicode,
+  'B5pc-H': big5ToUnicode,
+  'ETenms-B5-H': big5ToUnicode,
+  'ETenms-B5-V': big5ToUnicode,
+};
+
+// CMaps using Hankaku (Halfwidth) Latin glyphs instead of proportional one.
+// We need to distinguish them to get correct widths from CIDFont dicts.
+var HalfwidthCMaps = {
+  'H': true,
+  'V': true,
+  'EUC-H': true,
+  'EUC-V': true,
+  '90ms-RKSJ-H': true,
+  '90ms-RKSJ-V': true,
+  'UniJIS-UCS2-HW-H': true,
+  'UniJIS-UCS2-HW-V': true
+};
+
+var decodeBytes;
+if (typeof TextDecoder !== 'undefined') {
+  // The encodings supported by TextDecoder can be found at:
+  // http://encoding.spec.whatwg.org/#concept-encoding-get
+  decodeBytes = function(bytes, encoding, fatal) {
+    return new TextDecoder(encoding, {fatal: !!fatal}).decode(bytes);
+  };
+} else if (typeof FileReaderSync !== 'undefined') {
+  decodeBytes = function(bytes, encoding) {
+    return new FileReaderSync().readAsText(new Blob([bytes]), encoding);
+  };
+} else {
+  // Clear the list so that decodeBytes will never be called.
+  CMapConverterList = {};
+}
+
+function jis7ToUnicode(str) {
+  var bytes = stringToBytes(str);
+  var length = bytes.length;
+  for (var i = 0; i < length; ++i) {
+    bytes[i] |= 0x80;
+  }
+  return decodeBytes(bytes, 'euc-jp');
+}
+
+function eucjpToUnicode(str) {
+  return decodeBytes(stringToBytes(str), 'euc-jp');
+}
+
+function sjisToUnicode(str) {
+  return decodeBytes(stringToBytes(str), 'shift_jis');
+}
+
+function sjis83pvToUnicode(str) {
+  var bytes = stringToBytes(str);
+  try {
+    // TODO: 83pv has incompatible mappings in ed40..ee9c range.
+    return decodeBytes(bytes, 'shift_jis', true);
+  } catch (e) {
+    TODO('Unsupported 83pv character found');
+    // Just retry without checking errors for now.
+    return decodeBytes(bytes, 'shift_jis');
+  }
+}
+
+function sjis90pvToUnicode(str) {
+  var bytes = stringToBytes(str);
+  try {
+    // TODO: 90pv has incompatible mappings in 8740..879c and eb41..ee9c.
+    return decodeBytes(bytes, 'shift_jis', true);
+  } catch (e) {
+    TODO('Unsupported 90pv character found');
+    // Just retry without checking errors for now.
+    return decodeBytes(bytes, 'shift_jis');
+  }
+}
+
+function gbkToUnicode(str) {
+  return decodeBytes(stringToBytes(str), 'gbk');
+}
+
+function big5ToUnicode(str) {
+  return decodeBytes(stringToBytes(str), 'big5');
+}
+
+// Some characters, e.g. copyrightserif, mapped to the private use area and
+// might not be displayed using standard fonts. Mapping/hacking well-known chars
+// to the similar equivalents in the normal characters range.
+function mapPrivateUseChars(code) {
+  switch (code) {
+    case 0xF8E9: // copyrightsans
+    case 0xF6D9: // copyrightserif
+      return 0x00A9; // copyright
+    default:
+      return code;
+  }
+}
+
+var UnicodeRanges = [
+  { 'begin': 0x0000, 'end': 0x007F }, // Basic Latin
+  { 'begin': 0x0080, 'end': 0x00FF }, // Latin-1 Supplement
+  { 'begin': 0x0100, 'end': 0x017F }, // Latin Extended-A
+  { 'begin': 0x0180, 'end': 0x024F }, // Latin Extended-B
+  { 'begin': 0x0250, 'end': 0x02AF }, // IPA Extensions
+  { 'begin': 0x02B0, 'end': 0x02FF }, // Spacing Modifier Letters
+  { 'begin': 0x0300, 'end': 0x036F }, // Combining Diacritical Marks
+  { 'begin': 0x0370, 'end': 0x03FF }, // Greek and Coptic
+  { 'begin': 0x2C80, 'end': 0x2CFF }, // Coptic
+  { 'begin': 0x0400, 'end': 0x04FF }, // Cyrillic
+  { 'begin': 0x0530, 'end': 0x058F }, // Armenian
+  { 'begin': 0x0590, 'end': 0x05FF }, // Hebrew
+  { 'begin': 0xA500, 'end': 0xA63F }, // Vai
+  { 'begin': 0x0600, 'end': 0x06FF }, // Arabic
+  { 'begin': 0x07C0, 'end': 0x07FF }, // NKo
+  { 'begin': 0x0900, 'end': 0x097F }, // Devanagari
+  { 'begin': 0x0980, 'end': 0x09FF }, // Bengali
+  { 'begin': 0x0A00, 'end': 0x0A7F }, // Gurmukhi
+  { 'begin': 0x0A80, 'end': 0x0AFF }, // Gujarati
+  { 'begin': 0x0B00, 'end': 0x0B7F }, // Oriya
+  { 'begin': 0x0B80, 'end': 0x0BFF }, // Tamil
+  { 'begin': 0x0C00, 'end': 0x0C7F }, // Telugu
+  { 'begin': 0x0C80, 'end': 0x0CFF }, // Kannada
+  { 'begin': 0x0D00, 'end': 0x0D7F }, // Malayalam
+  { 'begin': 0x0E00, 'end': 0x0E7F }, // Thai
+  { 'begin': 0x0E80, 'end': 0x0EFF }, // Lao
+  { 'begin': 0x10A0, 'end': 0x10FF }, // Georgian
+  { 'begin': 0x1B00, 'end': 0x1B7F }, // Balinese
+  { 'begin': 0x1100, 'end': 0x11FF }, // Hangul Jamo
+  { 'begin': 0x1E00, 'end': 0x1EFF }, // Latin Extended Additional
+  { 'begin': 0x1F00, 'end': 0x1FFF }, // Greek Extended
+  { 'begin': 0x2000, 'end': 0x206F }, // General Punctuation
+  { 'begin': 0x2070, 'end': 0x209F }, // Superscripts And Subscripts
+  { 'begin': 0x20A0, 'end': 0x20CF }, // Currency Symbol
+  { 'begin': 0x20D0, 'end': 0x20FF }, // Combining Diacritical Marks For Symbols
+  { 'begin': 0x2100, 'end': 0x214F }, // Letterlike Symbols
+  { 'begin': 0x2150, 'end': 0x218F }, // Number Forms
+  { 'begin': 0x2190, 'end': 0x21FF }, // Arrows
+  { 'begin': 0x2200, 'end': 0x22FF }, // Mathematical Operators
+  { 'begin': 0x2300, 'end': 0x23FF }, // Miscellaneous Technical
+  { 'begin': 0x2400, 'end': 0x243F }, // Control Pictures
+  { 'begin': 0x2440, 'end': 0x245F }, // Optical Character Recognition
+  { 'begin': 0x2460, 'end': 0x24FF }, // Enclosed Alphanumerics
+  { 'begin': 0x2500, 'end': 0x257F }, // Box Drawing
+  { 'begin': 0x2580, 'end': 0x259F }, // Block Elements
+  { 'begin': 0x25A0, 'end': 0x25FF }, // Geometric Shapes
+  { 'begin': 0x2600, 'end': 0x26FF }, // Miscellaneous Symbols
+  { 'begin': 0x2700, 'end': 0x27BF }, // Dingbats
+  { 'begin': 0x3000, 'end': 0x303F }, // CJK Symbols And Punctuation
+  { 'begin': 0x3040, 'end': 0x309F }, // Hiragana
+  { 'begin': 0x30A0, 'end': 0x30FF }, // Katakana
+  { 'begin': 0x3100, 'end': 0x312F }, // Bopomofo
+  { 'begin': 0x3130, 'end': 0x318F }, // Hangul Compatibility Jamo
+  { 'begin': 0xA840, 'end': 0xA87F }, // Phags-pa
+  { 'begin': 0x3200, 'end': 0x32FF }, // Enclosed CJK Letters And Months
+  { 'begin': 0x3300, 'end': 0x33FF }, // CJK Compatibility
+  { 'begin': 0xAC00, 'end': 0xD7AF }, // Hangul Syllables
+  { 'begin': 0xD800, 'end': 0xDFFF }, // Non-Plane 0 *
+  { 'begin': 0x10900, 'end': 0x1091F }, // Phoenicia
+  { 'begin': 0x4E00, 'end': 0x9FFF }, // CJK Unified Ideographs
+  { 'begin': 0xE000, 'end': 0xF8FF }, // Private Use Area (plane 0)
+  { 'begin': 0x31C0, 'end': 0x31EF }, // CJK Strokes
+  { 'begin': 0xFB00, 'end': 0xFB4F }, // Alphabetic Presentation Forms
+  { 'begin': 0xFB50, 'end': 0xFDFF }, // Arabic Presentation Forms-A
+  { 'begin': 0xFE20, 'end': 0xFE2F }, // Combining Half Marks
+  { 'begin': 0xFE10, 'end': 0xFE1F }, // Vertical Forms
+  { 'begin': 0xFE50, 'end': 0xFE6F }, // Small Form Variants
+  { 'begin': 0xFE70, 'end': 0xFEFF }, // Arabic Presentation Forms-B
+  { 'begin': 0xFF00, 'end': 0xFFEF }, // Halfwidth And Fullwidth Forms
+  { 'begin': 0xFFF0, 'end': 0xFFFF }, // Specials
+  { 'begin': 0x0F00, 'end': 0x0FFF }, // Tibetan
+  { 'begin': 0x0700, 'end': 0x074F }, // Syriac
+  { 'begin': 0x0780, 'end': 0x07BF }, // Thaana
+  { 'begin': 0x0D80, 'end': 0x0DFF }, // Sinhala
+  { 'begin': 0x1000, 'end': 0x109F }, // Myanmar
+  { 'begin': 0x1200, 'end': 0x137F }, // Ethiopic
+  { 'begin': 0x13A0, 'end': 0x13FF }, // Cherokee
+  { 'begin': 0x1400, 'end': 0x167F }, // Unified Canadian Aboriginal Syllabics
+  { 'begin': 0x1680, 'end': 0x169F }, // Ogham
+  { 'begin': 0x16A0, 'end': 0x16FF }, // Runic
+  { 'begin': 0x1780, 'end': 0x17FF }, // Khmer
+  { 'begin': 0x1800, 'end': 0x18AF }, // Mongolian
+  { 'begin': 0x2800, 'end': 0x28FF }, // Braille Patterns
+  { 'begin': 0xA000, 'end': 0xA48F }, // Yi Syllables
+  { 'begin': 0x1700, 'end': 0x171F }, // Tagalog
+  { 'begin': 0x10300, 'end': 0x1032F }, // Old Italic
+  { 'begin': 0x10330, 'end': 0x1034F }, // Gothic
+  { 'begin': 0x10400, 'end': 0x1044F }, // Deseret
+  { 'begin': 0x1D000, 'end': 0x1D0FF }, // Byzantine Musical Symbols
+  { 'begin': 0x1D400, 'end': 0x1D7FF }, // Mathematical Alphanumeric Symbols
+  { 'begin': 0xFF000, 'end': 0xFFFFD }, // Private Use (plane 15)
+  { 'begin': 0xFE00, 'end': 0xFE0F }, // Variation Selectors
+  { 'begin': 0xE0000, 'end': 0xE007F }, // Tags
+  { 'begin': 0x1900, 'end': 0x194F }, // Limbu
+  { 'begin': 0x1950, 'end': 0x197F }, // Tai Le
+  { 'begin': 0x1980, 'end': 0x19DF }, // New Tai Lue
+  { 'begin': 0x1A00, 'end': 0x1A1F }, // Buginese
+  { 'begin': 0x2C00, 'end': 0x2C5F }, // Glagolitic
+  { 'begin': 0x2D30, 'end': 0x2D7F }, // Tifinagh
+  { 'begin': 0x4DC0, 'end': 0x4DFF }, // Yijing Hexagram Symbols
+  { 'begin': 0xA800, 'end': 0xA82F }, // Syloti Nagri
+  { 'begin': 0x10000, 'end': 0x1007F }, // Linear B Syllabary
+  { 'begin': 0x10140, 'end': 0x1018F }, // Ancient Greek Numbers
+  { 'begin': 0x10380, 'end': 0x1039F }, // Ugaritic
+  { 'begin': 0x103A0, 'end': 0x103DF }, // Old Persian
+  { 'begin': 0x10450, 'end': 0x1047F }, // Shavian
+  { 'begin': 0x10480, 'end': 0x104AF }, // Osmanya
+  { 'begin': 0x10800, 'end': 0x1083F }, // Cypriot Syllabary
+  { 'begin': 0x10A00, 'end': 0x10A5F }, // Kharoshthi
+  { 'begin': 0x1D300, 'end': 0x1D35F }, // Tai Xuan Jing Symbols
+  { 'begin': 0x12000, 'end': 0x123FF }, // Cuneiform
+  { 'begin': 0x1D360, 'end': 0x1D37F }, // Counting Rod Numerals
+  { 'begin': 0x1B80, 'end': 0x1BBF }, // Sundanese
+  { 'begin': 0x1C00, 'end': 0x1C4F }, // Lepcha
+  { 'begin': 0x1C50, 'end': 0x1C7F }, // Ol Chiki
+  { 'begin': 0xA880, 'end': 0xA8DF }, // Saurashtra
+  { 'begin': 0xA900, 'end': 0xA92F }, // Kayah Li
+  { 'begin': 0xA930, 'end': 0xA95F }, // Rejang
+  { 'begin': 0xAA00, 'end': 0xAA5F }, // Cham
+  { 'begin': 0x10190, 'end': 0x101CF }, // Ancient Symbols
+  { 'begin': 0x101D0, 'end': 0x101FF }, // Phaistos Disc
+  { 'begin': 0x102A0, 'end': 0x102DF }, // Carian
+  { 'begin': 0x1F030, 'end': 0x1F09F }  // Domino Tiles
+];
+
+var MacStandardGlyphOrdering = [
+  '.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl',
+  'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft',
+  'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash',
+  'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight',
+  'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at',
+  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
+  'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft',
+  'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b',
+  'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',
+  'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright',
+  'asciitilde', 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde',
+  'Odieresis', 'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis',
+  'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis',
+  'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve',
+  'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave', 'ucircumflex',
+  'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section', 'bullet',
+  'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute',
+  'dieresis', 'notequal', 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal',
+  'greaterequal', 'yen', 'mu', 'partialdiff', 'summation', 'product', 'pi',
+  'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash',
+  'questiondown', 'exclamdown', 'logicalnot', 'radical', 'florin',
+  'approxequal', 'Delta', 'guillemotleft', 'guillemotright', 'ellipsis',
+  'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash',
+  'emdash', 'quotedblleft', 'quotedblright', 'quoteleft', 'quoteright',
+  'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction', 'currency',
+  'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered',
+  'quotesinglbase', 'quotedblbase', 'perthousand', 'Acircumflex',
+  'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex',
+  'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute',
+  'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron',
+  'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron',
+  'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar',
+  'Eth', 'eth', 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply',
+  'onesuperior', 'twosuperior', 'threesuperior', 'onehalf', 'onequarter',
+  'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla',
+  'scedilla', 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat'];
+
+function getUnicodeRangeFor(value) {
+  for (var i = 0, ii = UnicodeRanges.length; i < ii; i++) {
+    var range = UnicodeRanges[i];
+    if (value >= range.begin && value < range.end)
+      return i;
+  }
+  return -1;
+}
+
+function isRTLRangeFor(value) {
+  var range = UnicodeRanges[13];
+  if (value >= range.begin && value < range.end)
+    return true;
+  range = UnicodeRanges[11];
+  if (value >= range.begin && value < range.end)
+    return true;
+  return false;
+}
+
+function isSpecialUnicode(unicode) {
+  return (unicode <= 0x1F || (unicode >= 127 && unicode < GLYPH_AREA_SIZE)) ||
+    (unicode >= CMAP_GLYPH_OFFSET &&
+    unicode < CMAP_GLYPH_OFFSET + GLYPH_AREA_SIZE);
+}
+
+// The normalization table is obtained by filtering the Unicode characters
+// database with <compat> entries.
+var NormalizedUnicodes = {
+  '\u00A8': '\u0020\u0308',
+  '\u00AF': '\u0020\u0304',
+  '\u00B4': '\u0020\u0301',
+  '\u00B5': '\u03BC',
+  '\u00B8': '\u0020\u0327',
+  '\u0132': '\u0049\u004A',
+  '\u0133': '\u0069\u006A',
+  '\u013F': '\u004C\u00B7',
+  '\u0140': '\u006C\u00B7',
+  '\u0149': '\u02BC\u006E',
+  '\u017F': '\u0073',
+  '\u01C4': '\u0044\u017D',
+  '\u01C5': '\u0044\u017E',
+  '\u01C6': '\u0064\u017E',
+  '\u01C7': '\u004C\u004A',
+  '\u01C8': '\u004C\u006A',
+  '\u01C9': '\u006C\u006A',
+  '\u01CA': '\u004E\u004A',
+  '\u01CB': '\u004E\u006A',
+  '\u01CC': '\u006E\u006A',
+  '\u01F1': '\u0044\u005A',
+  '\u01F2': '\u0044\u007A',
+  '\u01F3': '\u0064\u007A',
+  '\u02D8': '\u0020\u0306',
+  '\u02D9': '\u0020\u0307',
+  '\u02DA': '\u0020\u030A',
+  '\u02DB': '\u0020\u0328',
+  '\u02DC': '\u0020\u0303',
+  '\u02DD': '\u0020\u030B',
+  '\u037A': '\u0020\u0345',
+  '\u0384': '\u0020\u0301',
+  '\u03D0': '\u03B2',
+  '\u03D1': '\u03B8',
+  '\u03D2': '\u03A5',
+  '\u03D5': '\u03C6',
+  '\u03D6': '\u03C0',
+  '\u03F0': '\u03BA',
+  '\u03F1': '\u03C1',
+  '\u03F2': '\u03C2',
+  '\u03F4': '\u0398',
+  '\u03F5': '\u03B5',
+  '\u03F9': '\u03A3',
+  '\u0587': '\u0565\u0582',
+  '\u0675': '\u0627\u0674',
+  '\u0676': '\u0648\u0674',
+  '\u0677': '\u06C7\u0674',
+  '\u0678': '\u064A\u0674',
+  '\u0E33': '\u0E4D\u0E32',
+  '\u0EB3': '\u0ECD\u0EB2',
+  '\u0EDC': '\u0EAB\u0E99',
+  '\u0EDD': '\u0EAB\u0EA1',
+  '\u0F77': '\u0FB2\u0F81',
+  '\u0F79': '\u0FB3\u0F81',
+  '\u1E9A': '\u0061\u02BE',
+  '\u1FBD': '\u0020\u0313',
+  '\u1FBF': '\u0020\u0313',
+  '\u1FC0': '\u0020\u0342',
+  '\u1FFE': '\u0020\u0314',
+  '\u2002': '\u0020',
+  '\u2003': '\u0020',
+  '\u2004': '\u0020',
+  '\u2005': '\u0020',
+  '\u2006': '\u0020',
+  '\u2008': '\u0020',
+  '\u2009': '\u0020',
+  '\u200A': '\u0020',
+  '\u2017': '\u0020\u0333',
+  '\u2024': '\u002E',
+  '\u2025': '\u002E\u002E',
+  '\u2026': '\u002E\u002E\u002E',
+  '\u2033': '\u2032\u2032',
+  '\u2034': '\u2032\u2032\u2032',
+  '\u2036': '\u2035\u2035',
+  '\u2037': '\u2035\u2035\u2035',
+  '\u203C': '\u0021\u0021',
+  '\u203E': '\u0020\u0305',
+  '\u2047': '\u003F\u003F',
+  '\u2048': '\u003F\u0021',
+  '\u2049': '\u0021\u003F',
+  '\u2057': '\u2032\u2032\u2032\u2032',
+  '\u205F': '\u0020',
+  '\u20A8': '\u0052\u0073',
+  '\u2100': '\u0061\u002F\u0063',
+  '\u2101': '\u0061\u002F\u0073',
+  '\u2103': '\u00B0\u0043',
+  '\u2105': '\u0063\u002F\u006F',
+  '\u2106': '\u0063\u002F\u0075',
+  '\u2107': '\u0190',
+  '\u2109': '\u00B0\u0046',
+  '\u2116': '\u004E\u006F',
+  '\u2121': '\u0054\u0045\u004C',
+  '\u2135': '\u05D0',
+  '\u2136': '\u05D1',
+  '\u2137': '\u05D2',
+  '\u2138': '\u05D3',
+  '\u213B': '\u0046\u0041\u0058',
+  '\u2160': '\u0049',
+  '\u2161': '\u0049\u0049',
+  '\u2162': '\u0049\u0049\u0049',
+  '\u2163': '\u0049\u0056',
+  '\u2164': '\u0056',
+  '\u2165': '\u0056\u0049',
+  '\u2166': '\u0056\u0049\u0049',
+  '\u2167': '\u0056\u0049\u0049\u0049',
+  '\u2168': '\u0049\u0058',
+  '\u2169': '\u0058',
+  '\u216A': '\u0058\u0049',
+  '\u216B': '\u0058\u0049\u0049',
+  '\u216C': '\u004C',
+  '\u216D': '\u0043',
+  '\u216E': '\u0044',
+  '\u216F': '\u004D',
+  '\u2170': '\u0069',
+  '\u2171': '\u0069\u0069',
+  '\u2172': '\u0069\u0069\u0069',
+  '\u2173': '\u0069\u0076',
+  '\u2174': '\u0076',
+  '\u2175': '\u0076\u0069',
+  '\u2176': '\u0076\u0069\u0069',
+  '\u2177': '\u0076\u0069\u0069\u0069',
+  '\u2178': '\u0069\u0078',
+  '\u2179': '\u0078',
+  '\u217A': '\u0078\u0069',
+  '\u217B': '\u0078\u0069\u0069',
+  '\u217C': '\u006C',
+  '\u217D': '\u0063',
+  '\u217E': '\u0064',
+  '\u217F': '\u006D',
+  '\u222C': '\u222B\u222B',
+  '\u222D': '\u222B\u222B\u222B',
+  '\u222F': '\u222E\u222E',
+  '\u2230': '\u222E\u222E\u222E',
+  '\u2474': '\u0028\u0031\u0029',
+  '\u2475': '\u0028\u0032\u0029',
+  '\u2476': '\u0028\u0033\u0029',
+  '\u2477': '\u0028\u0034\u0029',
+  '\u2478': '\u0028\u0035\u0029',
+  '\u2479': '\u0028\u0036\u0029',
+  '\u247A': '\u0028\u0037\u0029',
+  '\u247B': '\u0028\u0038\u0029',
+  '\u247C': '\u0028\u0039\u0029',
+  '\u247D': '\u0028\u0031\u0030\u0029',
+  '\u247E': '\u0028\u0031\u0031\u0029',
+  '\u247F': '\u0028\u0031\u0032\u0029',
+  '\u2480': '\u0028\u0031\u0033\u0029',
+  '\u2481': '\u0028\u0031\u0034\u0029',
+  '\u2482': '\u0028\u0031\u0035\u0029',
+  '\u2483': '\u0028\u0031\u0036\u0029',
+  '\u2484': '\u0028\u0031\u0037\u0029',
+  '\u2485': '\u0028\u0031\u0038\u0029',
+  '\u2486': '\u0028\u0031\u0039\u0029',
+  '\u2487': '\u0028\u0032\u0030\u0029',
+  '\u2488': '\u0031\u002E',
+  '\u2489': '\u0032\u002E',
+  '\u248A': '\u0033\u002E',
+  '\u248B': '\u0034\u002E',
+  '\u248C': '\u0035\u002E',
+  '\u248D': '\u0036\u002E',
+  '\u248E': '\u0037\u002E',
+  '\u248F': '\u0038\u002E',
+  '\u2490': '\u0039\u002E',
+  '\u2491': '\u0031\u0030\u002E',
+  '\u2492': '\u0031\u0031\u002E',
+  '\u2493': '\u0031\u0032\u002E',
+  '\u2494': '\u0031\u0033\u002E',
+  '\u2495': '\u0031\u0034\u002E',
+  '\u2496': '\u0031\u0035\u002E',
+  '\u2497': '\u0031\u0036\u002E',
+  '\u2498': '\u0031\u0037\u002E',
+  '\u2499': '\u0031\u0038\u002E',
+  '\u249A': '\u0031\u0039\u002E',
+  '\u249B': '\u0032\u0030\u002E',
+  '\u249C': '\u0028\u0061\u0029',
+  '\u249D': '\u0028\u0062\u0029',
+  '\u249E': '\u0028\u0063\u0029',
+  '\u249F': '\u0028\u0064\u0029',
+  '\u24A0': '\u0028\u0065\u0029',
+  '\u24A1': '\u0028\u0066\u0029',
+  '\u24A2': '\u0028\u0067\u0029',
+  '\u24A3': '\u0028\u0068\u0029',
+  '\u24A4': '\u0028\u0069\u0029',
+  '\u24A5': '\u0028\u006A\u0029',
+  '\u24A6': '\u0028\u006B\u0029',
+  '\u24A7': '\u0028\u006C\u0029',
+  '\u24A8': '\u0028\u006D\u0029',
+  '\u24A9': '\u0028\u006E\u0029',
+  '\u24AA': '\u0028\u006F\u0029',
+  '\u24AB': '\u0028\u0070\u0029',
+  '\u24AC': '\u0028\u0071\u0029',
+  '\u24AD': '\u0028\u0072\u0029',
+  '\u24AE': '\u0028\u0073\u0029',
+  '\u24AF': '\u0028\u0074\u0029',
+  '\u24B0': '\u0028\u0075\u0029',
+  '\u24B1': '\u0028\u0076\u0029',
+  '\u24B2': '\u0028\u0077\u0029',
+  '\u24B3': '\u0028\u0078\u0029',
+  '\u24B4': '\u0028\u0079\u0029',
+  '\u24B5': '\u0028\u007A\u0029',
+  '\u2A0C': '\u222B\u222B\u222B\u222B',
+  '\u2A74': '\u003A\u003A\u003D',
+  '\u2A75': '\u003D\u003D',
+  '\u2A76': '\u003D\u003D\u003D',
+  '\u2E9F': '\u6BCD',
+  '\u2EF3': '\u9F9F',
+  '\u2F00': '\u4E00',
+  '\u2F01': '\u4E28',
+  '\u2F02': '\u4E36',
+  '\u2F03': '\u4E3F',
+  '\u2F04': '\u4E59',
+  '\u2F05': '\u4E85',
+  '\u2F06': '\u4E8C',
+  '\u2F07': '\u4EA0',
+  '\u2F08': '\u4EBA',
+  '\u2F09': '\u513F',
+  '\u2F0A': '\u5165',
+  '\u2F0B': '\u516B',
+  '\u2F0C': '\u5182',
+  '\u2F0D': '\u5196',
+  '\u2F0E': '\u51AB',
+  '\u2F0F': '\u51E0',
+  '\u2F10': '\u51F5',
+  '\u2F11': '\u5200',
+  '\u2F12': '\u529B',
+  '\u2F13': '\u52F9',
+  '\u2F14': '\u5315',
+  '\u2F15': '\u531A',
+  '\u2F16': '\u5338',
+  '\u2F17': '\u5341',
+  '\u2F18': '\u535C',
+  '\u2F19': '\u5369',
+  '\u2F1A': '\u5382',
+  '\u2F1B': '\u53B6',
+  '\u2F1C': '\u53C8',
+  '\u2F1D': '\u53E3',
+  '\u2F1E': '\u56D7',
+  '\u2F1F': '\u571F',
+  '\u2F20': '\u58EB',
+  '\u2F21': '\u5902',
+  '\u2F22': '\u590A',
+  '\u2F23': '\u5915',
+  '\u2F24': '\u5927',
+  '\u2F25': '\u5973',
+  '\u2F26': '\u5B50',
+  '\u2F27': '\u5B80',
+  '\u2F28': '\u5BF8',
+  '\u2F29': '\u5C0F',
+  '\u2F2A': '\u5C22',
+  '\u2F2B': '\u5C38',
+  '\u2F2C': '\u5C6E',
+  '\u2F2D': '\u5C71',
+  '\u2F2E': '\u5DDB',
+  '\u2F2F': '\u5DE5',
+  '\u2F30': '\u5DF1',
+  '\u2F31': '\u5DFE',
+  '\u2F32': '\u5E72',
+  '\u2F33': '\u5E7A',
+  '\u2F34': '\u5E7F',
+  '\u2F35': '\u5EF4',
+  '\u2F36': '\u5EFE',
+  '\u2F37': '\u5F0B',
+  '\u2F38': '\u5F13',
+  '\u2F39': '\u5F50',
+  '\u2F3A': '\u5F61',
+  '\u2F3B': '\u5F73',
+  '\u2F3C': '\u5FC3',
+  '\u2F3D': '\u6208',
+  '\u2F3E': '\u6236',
+  '\u2F3F': '\u624B',
+  '\u2F40': '\u652F',
+  '\u2F41': '\u6534',
+  '\u2F42': '\u6587',
+  '\u2F43': '\u6597',
+  '\u2F44': '\u65A4',
+  '\u2F45': '\u65B9',
+  '\u2F46': '\u65E0',
+  '\u2F47': '\u65E5',
+  '\u2F48': '\u66F0',
+  '\u2F49': '\u6708',
+  '\u2F4A': '\u6728',
+  '\u2F4B': '\u6B20',
+  '\u2F4C': '\u6B62',
+  '\u2F4D': '\u6B79',
+  '\u2F4E': '\u6BB3',
+  '\u2F4F': '\u6BCB',
+  '\u2F50': '\u6BD4',
+  '\u2F51': '\u6BDB',
+  '\u2F52': '\u6C0F',
+  '\u2F53': '\u6C14',
+  '\u2F54': '\u6C34',
+  '\u2F55': '\u706B',
+  '\u2F56': '\u722A',
+  '\u2F57': '\u7236',
+  '\u2F58': '\u723B',
+  '\u2F59': '\u723F',
+  '\u2F5A': '\u7247',
+  '\u2F5B': '\u7259',
+  '\u2F5C': '\u725B',
+  '\u2F5D': '\u72AC',
+  '\u2F5E': '\u7384',
+  '\u2F5F': '\u7389',
+  '\u2F60': '\u74DC',
+  '\u2F61': '\u74E6',
+  '\u2F62': '\u7518',
+  '\u2F63': '\u751F',
+  '\u2F64': '\u7528',
+  '\u2F65': '\u7530',
+  '\u2F66': '\u758B',
+  '\u2F67': '\u7592',
+  '\u2F68': '\u7676',
+  '\u2F69': '\u767D',
+  '\u2F6A': '\u76AE',
+  '\u2F6B': '\u76BF',
+  '\u2F6C': '\u76EE',
+  '\u2F6D': '\u77DB',
+  '\u2F6E': '\u77E2',
+  '\u2F6F': '\u77F3',
+  '\u2F70': '\u793A',
+  '\u2F71': '\u79B8',
+  '\u2F72': '\u79BE',
+  '\u2F73': '\u7A74',
+  '\u2F74': '\u7ACB',
+  '\u2F75': '\u7AF9',
+  '\u2F76': '\u7C73',
+  '\u2F77': '\u7CF8',
+  '\u2F78': '\u7F36',
+  '\u2F79': '\u7F51',
+  '\u2F7A': '\u7F8A',
+  '\u2F7B': '\u7FBD',
+  '\u2F7C': '\u8001',
+  '\u2F7D': '\u800C',
+  '\u2F7E': '\u8012',
+  '\u2F7F': '\u8033',
+  '\u2F80': '\u807F',
+  '\u2F81': '\u8089',
+  '\u2F82': '\u81E3',
+  '\u2F83': '\u81EA',
+  '\u2F84': '\u81F3',
+  '\u2F85': '\u81FC',
+  '\u2F86': '\u820C',
+  '\u2F87': '\u821B',
+  '\u2F88': '\u821F',
+  '\u2F89': '\u826E',
+  '\u2F8A': '\u8272',
+  '\u2F8B': '\u8278',
+  '\u2F8C': '\u864D',
+  '\u2F8D': '\u866B',
+  '\u2F8E': '\u8840',
+  '\u2F8F': '\u884C',
+  '\u2F90': '\u8863',
+  '\u2F91': '\u897E',
+  '\u2F92': '\u898B',
+  '\u2F93': '\u89D2',
+  '\u2F94': '\u8A00',
+  '\u2F95': '\u8C37',
+  '\u2F96': '\u8C46',
+  '\u2F97': '\u8C55',
+  '\u2F98': '\u8C78',
+  '\u2F99': '\u8C9D',
+  '\u2F9A': '\u8D64',
+  '\u2F9B': '\u8D70',
+  '\u2F9C': '\u8DB3',
+  '\u2F9D': '\u8EAB',
+  '\u2F9E': '\u8ECA',
+  '\u2F9F': '\u8F9B',
+  '\u2FA0': '\u8FB0',
+  '\u2FA1': '\u8FB5',
+  '\u2FA2': '\u9091',
+  '\u2FA3': '\u9149',
+  '\u2FA4': '\u91C6',
+  '\u2FA5': '\u91CC',
+  '\u2FA6': '\u91D1',
+  '\u2FA7': '\u9577',
+  '\u2FA8': '\u9580',
+  '\u2FA9': '\u961C',
+  '\u2FAA': '\u96B6',
+  '\u2FAB': '\u96B9',
+  '\u2FAC': '\u96E8',
+  '\u2FAD': '\u9751',
+  '\u2FAE': '\u975E',
+  '\u2FAF': '\u9762',
+  '\u2FB0': '\u9769',
+  '\u2FB1': '\u97CB',
+  '\u2FB2': '\u97ED',
+  '\u2FB3': '\u97F3',
+  '\u2FB4': '\u9801',
+  '\u2FB5': '\u98A8',
+  '\u2FB6': '\u98DB',
+  '\u2FB7': '\u98DF',
+  '\u2FB8': '\u9996',
+  '\u2FB9': '\u9999',
+  '\u2FBA': '\u99AC',
+  '\u2FBB': '\u9AA8',
+  '\u2FBC': '\u9AD8',
+  '\u2FBD': '\u9ADF',
+  '\u2FBE': '\u9B25',
+  '\u2FBF': '\u9B2F',
+  '\u2FC0': '\u9B32',
+  '\u2FC1': '\u9B3C',
+  '\u2FC2': '\u9B5A',
+  '\u2FC3': '\u9CE5',
+  '\u2FC4': '\u9E75',
+  '\u2FC5': '\u9E7F',
+  '\u2FC6': '\u9EA5',
+  '\u2FC7': '\u9EBB',
+  '\u2FC8': '\u9EC3',
+  '\u2FC9': '\u9ECD',
+  '\u2FCA': '\u9ED1',
+  '\u2FCB': '\u9EF9',
+  '\u2FCC': '\u9EFD',
+  '\u2FCD': '\u9F0E',
+  '\u2FCE': '\u9F13',
+  '\u2FCF': '\u9F20',
+  '\u2FD0': '\u9F3B',
+  '\u2FD1': '\u9F4A',
+  '\u2FD2': '\u9F52',
+  '\u2FD3': '\u9F8D',
+  '\u2FD4': '\u9F9C',
+  '\u2FD5': '\u9FA0',
+  '\u3036': '\u3012',
+  '\u3038': '\u5341',
+  '\u3039': '\u5344',
+  '\u303A': '\u5345',
+  '\u309B': '\u0020\u3099',
+  '\u309C': '\u0020\u309A',
+  '\u3131': '\u1100',
+  '\u3132': '\u1101',
+  '\u3133': '\u11AA',
+  '\u3134': '\u1102',
+  '\u3135': '\u11AC',
+  '\u3136': '\u11AD',
+  '\u3137': '\u1103',
+  '\u3138': '\u1104',
+  '\u3139': '\u1105',
+  '\u313A': '\u11B0',
+  '\u313B': '\u11B1',
+  '\u313C': '\u11B2',
+  '\u313D': '\u11B3',
+  '\u313E': '\u11B4',
+  '\u313F': '\u11B5',
+  '\u3140': '\u111A',
+  '\u3141': '\u1106',
+  '\u3142': '\u1107',
+  '\u3143': '\u1108',
+  '\u3144': '\u1121',
+  '\u3145': '\u1109',
+  '\u3146': '\u110A',
+  '\u3147': '\u110B',
+  '\u3148': '\u110C',
+  '\u3149': '\u110D',
+  '\u314A': '\u110E',
+  '\u314B': '\u110F',
+  '\u314C': '\u1110',
+  '\u314D': '\u1111',
+  '\u314E': '\u1112',
+  '\u314F': '\u1161',
+  '\u3150': '\u1162',
+  '\u3151': '\u1163',
+  '\u3152': '\u1164',
+  '\u3153': '\u1165',
+  '\u3154': '\u1166',
+  '\u3155': '\u1167',
+  '\u3156': '\u1168',
+  '\u3157': '\u1169',
+  '\u3158': '\u116A',
+  '\u3159': '\u116B',
+  '\u315A': '\u116C',
+  '\u315B': '\u116D',
+  '\u315C': '\u116E',
+  '\u315D': '\u116F',
+  '\u315E': '\u1170',
+  '\u315F': '\u1171',
+  '\u3160': '\u1172',
+  '\u3161': '\u1173',
+  '\u3162': '\u1174',
+  '\u3163': '\u1175',
+  '\u3164': '\u1160',
+  '\u3165': '\u1114',
+  '\u3166': '\u1115',
+  '\u3167': '\u11C7',
+  '\u3168': '\u11C8',
+  '\u3169': '\u11CC',
+  '\u316A': '\u11CE',
+  '\u316B': '\u11D3',
+  '\u316C': '\u11D7',
+  '\u316D': '\u11D9',
+  '\u316E': '\u111C',
+  '\u316F': '\u11DD',
+  '\u3170': '\u11DF',
+  '\u3171': '\u111D',
+  '\u3172': '\u111E',
+  '\u3173': '\u1120',
+  '\u3174': '\u1122',
+  '\u3175': '\u1123',
+  '\u3176': '\u1127',
+  '\u3177': '\u1129',
+  '\u3178': '\u112B',
+  '\u3179': '\u112C',
+  '\u317A': '\u112D',
+  '\u317B': '\u112E',
+  '\u317C': '\u112F',
+  '\u317D': '\u1132',
+  '\u317E': '\u1136',
+  '\u317F': '\u1140',
+  '\u3180': '\u1147',
+  '\u3181': '\u114C',
+  '\u3182': '\u11F1',
+  '\u3183': '\u11F2',
+  '\u3184': '\u1157',
+  '\u3185': '\u1158',
+  '\u3186': '\u1159',
+  '\u3187': '\u1184',
+  '\u3188': '\u1185',
+  '\u3189': '\u1188',
+  '\u318A': '\u1191',
+  '\u318B': '\u1192',
+  '\u318C': '\u1194',
+  '\u318D': '\u119E',
+  '\u318E': '\u11A1',
+  '\u3200': '\u0028\u1100\u0029',
+  '\u3201': '\u0028\u1102\u0029',
+  '\u3202': '\u0028\u1103\u0029',
+  '\u3203': '\u0028\u1105\u0029',
+  '\u3204': '\u0028\u1106\u0029',
+  '\u3205': '\u0028\u1107\u0029',
+  '\u3206': '\u0028\u1109\u0029',
+  '\u3207': '\u0028\u110B\u0029',
+  '\u3208': '\u0028\u110C\u0029',
+  '\u3209': '\u0028\u110E\u0029',
+  '\u320A': '\u0028\u110F\u0029',
+  '\u320B': '\u0028\u1110\u0029',
+  '\u320C': '\u0028\u1111\u0029',
+  '\u320D': '\u0028\u1112\u0029',
+  '\u320E': '\u0028\u1100\u1161\u0029',
+  '\u320F': '\u0028\u1102\u1161\u0029',
+  '\u3210': '\u0028\u1103\u1161\u0029',
+  '\u3211': '\u0028\u1105\u1161\u0029',
+  '\u3212': '\u0028\u1106\u1161\u0029',
+  '\u3213': '\u0028\u1107\u1161\u0029',
+  '\u3214': '\u0028\u1109\u1161\u0029',
+  '\u3215': '\u0028\u110B\u1161\u0029',
+  '\u3216': '\u0028\u110C\u1161\u0029',
+  '\u3217': '\u0028\u110E\u1161\u0029',
+  '\u3218': '\u0028\u110F\u1161\u0029',
+  '\u3219': '\u0028\u1110\u1161\u0029',
+  '\u321A': '\u0028\u1111\u1161\u0029',
+  '\u321B': '\u0028\u1112\u1161\u0029',
+  '\u321C': '\u0028\u110C\u116E\u0029',
+  '\u321D': '\u0028\u110B\u1169\u110C\u1165\u11AB\u0029',
+  '\u321E': '\u0028\u110B\u1169\u1112\u116E\u0029',
+  '\u3220': '\u0028\u4E00\u0029',
+  '\u3221': '\u0028\u4E8C\u0029',
+  '\u3222': '\u0028\u4E09\u0029',
+  '\u3223': '\u0028\u56DB\u0029',
+  '\u3224': '\u0028\u4E94\u0029',
+  '\u3225': '\u0028\u516D\u0029',
+  '\u3226': '\u0028\u4E03\u0029',
+  '\u3227': '\u0028\u516B\u0029',
+  '\u3228': '\u0028\u4E5D\u0029',
+  '\u3229': '\u0028\u5341\u0029',
+  '\u322A': '\u0028\u6708\u0029',
+  '\u322B': '\u0028\u706B\u0029',
+  '\u322C': '\u0028\u6C34\u0029',
+  '\u322D': '\u0028\u6728\u0029',
+  '\u322E': '\u0028\u91D1\u0029',
+  '\u322F': '\u0028\u571F\u0029',
+  '\u3230': '\u0028\u65E5\u0029',
+  '\u3231': '\u0028\u682A\u0029',
+  '\u3232': '\u0028\u6709\u0029',
+  '\u3233': '\u0028\u793E\u0029',
+  '\u3234': '\u0028\u540D\u0029',
+  '\u3235': '\u0028\u7279\u0029',
+  '\u3236': '\u0028\u8CA1\u0029',
+  '\u3237': '\u0028\u795D\u0029',
+  '\u3238': '\u0028\u52B4\u0029',
+  '\u3239': '\u0028\u4EE3\u0029',
+  '\u323A': '\u0028\u547C\u0029',
+  '\u323B': '\u0028\u5B66\u0029',
+  '\u323C': '\u0028\u76E3\u0029',
+  '\u323D': '\u0028\u4F01\u0029',
+  '\u323E': '\u0028\u8CC7\u0029',
+  '\u323F': '\u0028\u5354\u0029',
+  '\u3240': '\u0028\u796D\u0029',
+  '\u3241': '\u0028\u4F11\u0029',
+  '\u3242': '\u0028\u81EA\u0029',
+  '\u3243': '\u0028\u81F3\u0029',
+  '\u32C0': '\u0031\u6708',
+  '\u32C1': '\u0032\u6708',
+  '\u32C2': '\u0033\u6708',
+  '\u32C3': '\u0034\u6708',
+  '\u32C4': '\u0035\u6708',
+  '\u32C5': '\u0036\u6708',
+  '\u32C6': '\u0037\u6708',
+  '\u32C7': '\u0038\u6708',
+  '\u32C8': '\u0039\u6708',
+  '\u32C9': '\u0031\u0030\u6708',
+  '\u32CA': '\u0031\u0031\u6708',
+  '\u32CB': '\u0031\u0032\u6708',
+  '\u3358': '\u0030\u70B9',
+  '\u3359': '\u0031\u70B9',
+  '\u335A': '\u0032\u70B9',
+  '\u335B': '\u0033\u70B9',
+  '\u335C': '\u0034\u70B9',
+  '\u335D': '\u0035\u70B9',
+  '\u335E': '\u0036\u70B9',
+  '\u335F': '\u0037\u70B9',
+  '\u3360': '\u0038\u70B9',
+  '\u3361': '\u0039\u70B9',
+  '\u3362': '\u0031\u0030\u70B9',
+  '\u3363': '\u0031\u0031\u70B9',
+  '\u3364': '\u0031\u0032\u70B9',
+  '\u3365': '\u0031\u0033\u70B9',
+  '\u3366': '\u0031\u0034\u70B9',
+  '\u3367': '\u0031\u0035\u70B9',
+  '\u3368': '\u0031\u0036\u70B9',
+  '\u3369': '\u0031\u0037\u70B9',
+  '\u336A': '\u0031\u0038\u70B9',
+  '\u336B': '\u0031\u0039\u70B9',
+  '\u336C': '\u0032\u0030\u70B9',
+  '\u336D': '\u0032\u0031\u70B9',
+  '\u336E': '\u0032\u0032\u70B9',
+  '\u336F': '\u0032\u0033\u70B9',
+  '\u3370': '\u0032\u0034\u70B9',
+  '\u33E0': '\u0031\u65E5',
+  '\u33E1': '\u0032\u65E5',
+  '\u33E2': '\u0033\u65E5',
+  '\u33E3': '\u0034\u65E5',
+  '\u33E4': '\u0035\u65E5',
+  '\u33E5': '\u0036\u65E5',
+  '\u33E6': '\u0037\u65E5',
+  '\u33E7': '\u0038\u65E5',
+  '\u33E8': '\u0039\u65E5',
+  '\u33E9': '\u0031\u0030\u65E5',
+  '\u33EA': '\u0031\u0031\u65E5',
+  '\u33EB': '\u0031\u0032\u65E5',
+  '\u33EC': '\u0031\u0033\u65E5',
+  '\u33ED': '\u0031\u0034\u65E5',
+  '\u33EE': '\u0031\u0035\u65E5',
+  '\u33EF': '\u0031\u0036\u65E5',
+  '\u33F0': '\u0031\u0037\u65E5',
+  '\u33F1': '\u0031\u0038\u65E5',
+  '\u33F2': '\u0031\u0039\u65E5',
+  '\u33F3': '\u0032\u0030\u65E5',
+  '\u33F4': '\u0032\u0031\u65E5',
+  '\u33F5': '\u0032\u0032\u65E5',
+  '\u33F6': '\u0032\u0033\u65E5',
+  '\u33F7': '\u0032\u0034\u65E5',
+  '\u33F8': '\u0032\u0035\u65E5',
+  '\u33F9': '\u0032\u0036\u65E5',
+  '\u33FA': '\u0032\u0037\u65E5',
+  '\u33FB': '\u0032\u0038\u65E5',
+  '\u33FC': '\u0032\u0039\u65E5',
+  '\u33FD': '\u0033\u0030\u65E5',
+  '\u33FE': '\u0033\u0031\u65E5',
+  '\uFB00': '\u0066\u0066',
+  '\uFB01': '\u0066\u0069',
+  '\uFB02': '\u0066\u006C',
+  '\uFB03': '\u0066\u0066\u0069',
+  '\uFB04': '\u0066\u0066\u006C',
+  '\uFB05': '\u017F\u0074',
+  '\uFB06': '\u0073\u0074',
+  '\uFB13': '\u0574\u0576',
+  '\uFB14': '\u0574\u0565',
+  '\uFB15': '\u0574\u056B',
+  '\uFB16': '\u057E\u0576',
+  '\uFB17': '\u0574\u056D',
+  '\uFB4F': '\u05D0\u05DC',
+  '\uFB50': '\u0671',
+  '\uFB51': '\u0671',
+  '\uFB52': '\u067B',
+  '\uFB53': '\u067B',
+  '\uFB54': '\u067B',
+  '\uFB55': '\u067B',
+  '\uFB56': '\u067E',
+  '\uFB57': '\u067E',
+  '\uFB58': '\u067E',
+  '\uFB59': '\u067E',
+  '\uFB5A': '\u0680',
+  '\uFB5B': '\u0680',
+  '\uFB5C': '\u0680',
+  '\uFB5D': '\u0680',
+  '\uFB5E': '\u067A',
+  '\uFB5F': '\u067A',
+  '\uFB60': '\u067A',
+  '\uFB61': '\u067A',
+  '\uFB62': '\u067F',
+  '\uFB63': '\u067F',
+  '\uFB64': '\u067F',
+  '\uFB65': '\u067F',
+  '\uFB66': '\u0679',
+  '\uFB67': '\u0679',
+  '\uFB68': '\u0679',
+  '\uFB69': '\u0679',
+  '\uFB6A': '\u06A4',
+  '\uFB6B': '\u06A4',
+  '\uFB6C': '\u06A4',
+  '\uFB6D': '\u06A4',
+  '\uFB6E': '\u06A6',
+  '\uFB6F': '\u06A6',
+  '\uFB70': '\u06A6',
+  '\uFB71': '\u06A6',
+  '\uFB72': '\u0684',
+  '\uFB73': '\u0684',
+  '\uFB74': '\u0684',
+  '\uFB75': '\u0684',
+  '\uFB76': '\u0683',
+  '\uFB77': '\u0683',
+  '\uFB78': '\u0683',
+  '\uFB79': '\u0683',
+  '\uFB7A': '\u0686',
+  '\uFB7B': '\u0686',
+  '\uFB7C': '\u0686',
+  '\uFB7D': '\u0686',
+  '\uFB7E': '\u0687',
+  '\uFB7F': '\u0687',
+  '\uFB80': '\u0687',
+  '\uFB81': '\u0687',
+  '\uFB82': '\u068D',
+  '\uFB83': '\u068D',
+  '\uFB84': '\u068C',
+  '\uFB85': '\u068C',
+  '\uFB86': '\u068E',
+  '\uFB87': '\u068E',
+  '\uFB88': '\u0688',
+  '\uFB89': '\u0688',
+  '\uFB8A': '\u0698',
+  '\uFB8B': '\u0698',
+  '\uFB8C': '\u0691',
+  '\uFB8D': '\u0691',
+  '\uFB8E': '\u06A9',
+  '\uFB8F': '\u06A9',
+  '\uFB90': '\u06A9',
+  '\uFB91': '\u06A9',
+  '\uFB92': '\u06AF',
+  '\uFB93': '\u06AF',
+  '\uFB94': '\u06AF',
+  '\uFB95': '\u06AF',
+  '\uFB96': '\u06B3',
+  '\uFB97': '\u06B3',
+  '\uFB98': '\u06B3',
+  '\uFB99': '\u06B3',
+  '\uFB9A': '\u06B1',
+  '\uFB9B': '\u06B1',
+  '\uFB9C': '\u06B1',
+  '\uFB9D': '\u06B1',
+  '\uFB9E': '\u06BA',
+  '\uFB9F': '\u06BA',
+  '\uFBA0': '\u06BB',
+  '\uFBA1': '\u06BB',
+  '\uFBA2': '\u06BB',
+  '\uFBA3': '\u06BB',
+  '\uFBA4': '\u06C0',
+  '\uFBA5': '\u06C0',
+  '\uFBA6': '\u06C1',
+  '\uFBA7': '\u06C1',
+  '\uFBA8': '\u06C1',
+  '\uFBA9': '\u06C1',
+  '\uFBAA': '\u06BE',
+  '\uFBAB': '\u06BE',
+  '\uFBAC': '\u06BE',
+  '\uFBAD': '\u06BE',
+  '\uFBAE': '\u06D2',
+  '\uFBAF': '\u06D2',
+  '\uFBB0': '\u06D3',
+  '\uFBB1': '\u06D3',
+  '\uFBD3': '\u06AD',
+  '\uFBD4': '\u06AD',
+  '\uFBD5': '\u06AD',
+  '\uFBD6': '\u06AD',
+  '\uFBD7': '\u06C7',
+  '\uFBD8': '\u06C7',
+  '\uFBD9': '\u06C6',
+  '\uFBDA': '\u06C6',
+  '\uFBDB': '\u06C8',
+  '\uFBDC': '\u06C8',
+  '\uFBDD': '\u0677',
+  '\uFBDE': '\u06CB',
+  '\uFBDF': '\u06CB',
+  '\uFBE0': '\u06C5',
+  '\uFBE1': '\u06C5',
+  '\uFBE2': '\u06C9',
+  '\uFBE3': '\u06C9',
+  '\uFBE4': '\u06D0',
+  '\uFBE5': '\u06D0',
+  '\uFBE6': '\u06D0',
+  '\uFBE7': '\u06D0',
+  '\uFBE8': '\u0649',
+  '\uFBE9': '\u0649',
+  '\uFBEA': '\u0626\u0627',
+  '\uFBEB': '\u0626\u0627',
+  '\uFBEC': '\u0626\u06D5',
+  '\uFBED': '\u0626\u06D5',
+  '\uFBEE': '\u0626\u0648',
+  '\uFBEF': '\u0626\u0648',
+  '\uFBF0': '\u0626\u06C7',
+  '\uFBF1': '\u0626\u06C7',
+  '\uFBF2': '\u0626\u06C6',
+  '\uFBF3': '\u0626\u06C6',
+  '\uFBF4': '\u0626\u06C8',
+  '\uFBF5': '\u0626\u06C8',
+  '\uFBF6': '\u0626\u06D0',
+  '\uFBF7': '\u0626\u06D0',
+  '\uFBF8': '\u0626\u06D0',
+  '\uFBF9': '\u0626\u0649',
+  '\uFBFA': '\u0626\u0649',
+  '\uFBFB': '\u0626\u0649',
+  '\uFBFC': '\u06CC',
+  '\uFBFD': '\u06CC',
+  '\uFBFE': '\u06CC',
+  '\uFBFF': '\u06CC',
+  '\uFC00': '\u0626\u062C',
+  '\uFC01': '\u0626\u062D',
+  '\uFC02': '\u0626\u0645',
+  '\uFC03': '\u0626\u0649',
+  '\uFC04': '\u0626\u064A',
+  '\uFC05': '\u0628\u062C',
+  '\uFC06': '\u0628\u062D',
+  '\uFC07': '\u0628\u062E',
+  '\uFC08': '\u0628\u0645',
+  '\uFC09': '\u0628\u0649',
+  '\uFC0A': '\u0628\u064A',
+  '\uFC0B': '\u062A\u062C',
+  '\uFC0C': '\u062A\u062D',
+  '\uFC0D': '\u062A\u062E',
+  '\uFC0E': '\u062A\u0645',
+  '\uFC0F': '\u062A\u0649',
+  '\uFC10': '\u062A\u064A',
+  '\uFC11': '\u062B\u062C',
+  '\uFC12': '\u062B\u0645',
+  '\uFC13': '\u062B\u0649',
+  '\uFC14': '\u062B\u064A',
+  '\uFC15': '\u062C\u062D',
+  '\uFC16': '\u062C\u0645',
+  '\uFC17': '\u062D\u062C',
+  '\uFC18': '\u062D\u0645',
+  '\uFC19': '\u062E\u062C',
+  '\uFC1A': '\u062E\u062D',
+  '\uFC1B': '\u062E\u0645',
+  '\uFC1C': '\u0633\u062C',
+  '\uFC1D': '\u0633\u062D',
+  '\uFC1E': '\u0633\u062E',
+  '\uFC1F': '\u0633\u0645',
+  '\uFC20': '\u0635\u062D',
+  '\uFC21': '\u0635\u0645',
+  '\uFC22': '\u0636\u062C',
+  '\uFC23': '\u0636\u062D',
+  '\uFC24': '\u0636\u062E',
+  '\uFC25': '\u0636\u0645',
+  '\uFC26': '\u0637\u062D',
+  '\uFC27': '\u0637\u0645',
+  '\uFC28': '\u0638\u0645',
+  '\uFC29': '\u0639\u062C',
+  '\uFC2A': '\u0639\u0645',
+  '\uFC2B': '\u063A\u062C',
+  '\uFC2C': '\u063A\u0645',
+  '\uFC2D': '\u0641\u062C',
+  '\uFC2E': '\u0641\u062D',
+  '\uFC2F': '\u0641\u062E',
+  '\uFC30': '\u0641\u0645',
+  '\uFC31': '\u0641\u0649',
+  '\uFC32': '\u0641\u064A',
+  '\uFC33': '\u0642\u062D',
+  '\uFC34': '\u0642\u0645',
+  '\uFC35': '\u0642\u0649',
+  '\uFC36': '\u0642\u064A',
+  '\uFC37': '\u0643\u0627',
+  '\uFC38': '\u0643\u062C',
+  '\uFC39': '\u0643\u062D',
+  '\uFC3A': '\u0643\u062E',
+  '\uFC3B': '\u0643\u0644',
+  '\uFC3C': '\u0643\u0645',
+  '\uFC3D': '\u0643\u0649',
+  '\uFC3E': '\u0643\u064A',
+  '\uFC3F': '\u0644\u062C',
+  '\uFC40': '\u0644\u062D',
+  '\uFC41': '\u0644\u062E',
+  '\uFC42': '\u0644\u0645',
+  '\uFC43': '\u0644\u0649',
+  '\uFC44': '\u0644\u064A',
+  '\uFC45': '\u0645\u062C',
+  '\uFC46': '\u0645\u062D',
+  '\uFC47': '\u0645\u062E',
+  '\uFC48': '\u0645\u0645',
+  '\uFC49': '\u0645\u0649',
+  '\uFC4A': '\u0645\u064A',
+  '\uFC4B': '\u0646\u062C',
+  '\uFC4C': '\u0646\u062D',
+  '\uFC4D': '\u0646\u062E',
+  '\uFC4E': '\u0646\u0645',
+  '\uFC4F': '\u0646\u0649',
+  '\uFC50': '\u0646\u064A',
+  '\uFC51': '\u0647\u062C',
+  '\uFC52': '\u0647\u0645',
+  '\uFC53': '\u0647\u0649',
+  '\uFC54': '\u0647\u064A',
+  '\uFC55': '\u064A\u062C',
+  '\uFC56': '\u064A\u062D',
+  '\uFC57': '\u064A\u062E',
+  '\uFC58': '\u064A\u0645',
+  '\uFC59': '\u064A\u0649',
+  '\uFC5A': '\u064A\u064A',
+  '\uFC5B': '\u0630\u0670',
+  '\uFC5C': '\u0631\u0670',
+  '\uFC5D': '\u0649\u0670',
+  '\uFC5E': '\u0020\u064C\u0651',
+  '\uFC5F': '\u0020\u064D\u0651',
+  '\uFC60': '\u0020\u064E\u0651',
+  '\uFC61': '\u0020\u064F\u0651',
+  '\uFC62': '\u0020\u0650\u0651',
+  '\uFC63': '\u0020\u0651\u0670',
+  '\uFC64': '\u0626\u0631',
+  '\uFC65': '\u0626\u0632',
+  '\uFC66': '\u0626\u0645',
+  '\uFC67': '\u0626\u0646',
+  '\uFC68': '\u0626\u0649',
+  '\uFC69': '\u0626\u064A',
+  '\uFC6A': '\u0628\u0631',
+  '\uFC6B': '\u0628\u0632',
+  '\uFC6C': '\u0628\u0645',
+  '\uFC6D': '\u0628\u0646',
+  '\uFC6E': '\u0628\u0649',
+  '\uFC6F': '\u0628\u064A',
+  '\uFC70': '\u062A\u0631',
+  '\uFC71': '\u062A\u0632',
+  '\uFC72': '\u062A\u0645',
+  '\uFC73': '\u062A\u0646',
+  '\uFC74': '\u062A\u0649',
+  '\uFC75': '\u062A\u064A',
+  '\uFC76': '\u062B\u0631',
+  '\uFC77': '\u062B\u0632',
+  '\uFC78': '\u062B\u0645',
+  '\uFC79': '\u062B\u0646',
+  '\uFC7A': '\u062B\u0649',
+  '\uFC7B': '\u062B\u064A',
+  '\uFC7C': '\u0641\u0649',
+  '\uFC7D': '\u0641\u064A',
+  '\uFC7E': '\u0642\u0649',
+  '\uFC7F': '\u0642\u064A',
+  '\uFC80': '\u0643\u0627',
+  '\uFC81': '\u0643\u0644',
+  '\uFC82': '\u0643\u0645',
+  '\uFC83': '\u0643\u0649',
+  '\uFC84': '\u0643\u064A',
+  '\uFC85': '\u0644\u0645',
+  '\uFC86': '\u0644\u0649',
+  '\uFC87': '\u0644\u064A',
+  '\uFC88': '\u0645\u0627',
+  '\uFC89': '\u0645\u0645',
+  '\uFC8A': '\u0646\u0631',
+  '\uFC8B': '\u0646\u0632',
+  '\uFC8C': '\u0646\u0645',
+  '\uFC8D': '\u0646\u0646',
+  '\uFC8E': '\u0646\u0649',
+  '\uFC8F': '\u0646\u064A',
+  '\uFC90': '\u0649\u0670',
+  '\uFC91': '\u064A\u0631',
+  '\uFC92': '\u064A\u0632',
+  '\uFC93': '\u064A\u0645',
+  '\uFC94': '\u064A\u0646',
+  '\uFC95': '\u064A\u0649',
+  '\uFC96': '\u064A\u064A',
+  '\uFC97': '\u0626\u062C',
+  '\uFC98': '\u0626\u062D',
+  '\uFC99': '\u0626\u062E',
+  '\uFC9A': '\u0626\u0645',
+  '\uFC9B': '\u0626\u0647',
+  '\uFC9C': '\u0628\u062C',
+  '\uFC9D': '\u0628\u062D',
+  '\uFC9E': '\u0628\u062E',
+  '\uFC9F': '\u0628\u0645',
+  '\uFCA0': '\u0628\u0647',
+  '\uFCA1': '\u062A\u062C',
+  '\uFCA2': '\u062A\u062D',
+  '\uFCA3': '\u062A\u062E',
+  '\uFCA4': '\u062A\u0645',
+  '\uFCA5': '\u062A\u0647',
+  '\uFCA6': '\u062B\u0645',
+  '\uFCA7': '\u062C\u062D',
+  '\uFCA8': '\u062C\u0645',
+  '\uFCA9': '\u062D\u062C',
+  '\uFCAA': '\u062D\u0645',
+  '\uFCAB': '\u062E\u062C',
+  '\uFCAC': '\u062E\u0645',
+  '\uFCAD': '\u0633\u062C',
+  '\uFCAE': '\u0633\u062D',
+  '\uFCAF': '\u0633\u062E',
+  '\uFCB0': '\u0633\u0645',
+  '\uFCB1': '\u0635\u062D',
+  '\uFCB2': '\u0635\u062E',
+  '\uFCB3': '\u0635\u0645',
+  '\uFCB4': '\u0636\u062C',
+  '\uFCB5': '\u0636\u062D',
+  '\uFCB6': '\u0636\u062E',
+  '\uFCB7': '\u0636\u0645',
+  '\uFCB8': '\u0637\u062D',
+  '\uFCB9': '\u0638\u0645',
+  '\uFCBA': '\u0639\u062C',
+  '\uFCBB': '\u0639\u0645',
+  '\uFCBC': '\u063A\u062C',
+  '\uFCBD': '\u063A\u0645',
+  '\uFCBE': '\u0641\u062C',
+  '\uFCBF': '\u0641\u062D',
+  '\uFCC0': '\u0641\u062E',
+  '\uFCC1': '\u0641\u0645',
+  '\uFCC2': '\u0642\u062D',
+  '\uFCC3': '\u0642\u0645',
+  '\uFCC4': '\u0643\u062C',
+  '\uFCC5': '\u0643\u062D',
+  '\uFCC6': '\u0643\u062E',
+  '\uFCC7': '\u0643\u0644',
+  '\uFCC8': '\u0643\u0645',
+  '\uFCC9': '\u0644\u062C',
+  '\uFCCA': '\u0644\u062D',
+  '\uFCCB': '\u0644\u062E',
+  '\uFCCC': '\u0644\u0645',
+  '\uFCCD': '\u0644\u0647',
+  '\uFCCE': '\u0645\u062C',
+  '\uFCCF': '\u0645\u062D',
+  '\uFCD0': '\u0645\u062E',
+  '\uFCD1': '\u0645\u0645',
+  '\uFCD2': '\u0646\u062C',
+  '\uFCD3': '\u0646\u062D',
+  '\uFCD4': '\u0646\u062E',
+  '\uFCD5': '\u0646\u0645',
+  '\uFCD6': '\u0646\u0647',
+  '\uFCD7': '\u0647\u062C',
+  '\uFCD8': '\u0647\u0645',
+  '\uFCD9': '\u0647\u0670',
+  '\uFCDA': '\u064A\u062C',
+  '\uFCDB': '\u064A\u062D',
+  '\uFCDC': '\u064A\u062E',
+  '\uFCDD': '\u064A\u0645',
+  '\uFCDE': '\u064A\u0647',
+  '\uFCDF': '\u0626\u0645',
+  '\uFCE0': '\u0626\u0647',
+  '\uFCE1': '\u0628\u0645',
+  '\uFCE2': '\u0628\u0647',
+  '\uFCE3': '\u062A\u0645',
+  '\uFCE4': '\u062A\u0647',
+  '\uFCE5': '\u062B\u0645',
+  '\uFCE6': '\u062B\u0647',
+  '\uFCE7': '\u0633\u0645',
+  '\uFCE8': '\u0633\u0647',
+  '\uFCE9': '\u0634\u0645',
+  '\uFCEA': '\u0634\u0647',
+  '\uFCEB': '\u0643\u0644',
+  '\uFCEC': '\u0643\u0645',
+  '\uFCED': '\u0644\u0645',
+  '\uFCEE': '\u0646\u0645',
+  '\uFCEF': '\u0646\u0647',
+  '\uFCF0': '\u064A\u0645',
+  '\uFCF1': '\u064A\u0647',
+  '\uFCF2': '\u0640\u064E\u0651',
+  '\uFCF3': '\u0640\u064F\u0651',
+  '\uFCF4': '\u0640\u0650\u0651',
+  '\uFCF5': '\u0637\u0649',
+  '\uFCF6': '\u0637\u064A',
+  '\uFCF7': '\u0639\u0649',
+  '\uFCF8': '\u0639\u064A',
+  '\uFCF9': '\u063A\u0649',
+  '\uFCFA': '\u063A\u064A',
+  '\uFCFB': '\u0633\u0649',
+  '\uFCFC': '\u0633\u064A',
+  '\uFCFD': '\u0634\u0649',
+  '\uFCFE': '\u0634\u064A',
+  '\uFCFF': '\u062D\u0649',
+  '\uFD00': '\u062D\u064A',
+  '\uFD01': '\u062C\u0649',
+  '\uFD02': '\u062C\u064A',
+  '\uFD03': '\u062E\u0649',
+  '\uFD04': '\u062E\u064A',
+  '\uFD05': '\u0635\u0649',
+  '\uFD06': '\u0635\u064A',
+  '\uFD07': '\u0636\u0649',
+  '\uFD08': '\u0636\u064A',
+  '\uFD09': '\u0634\u062C',
+  '\uFD0A': '\u0634\u062D',
+  '\uFD0B': '\u0634\u062E',
+  '\uFD0C': '\u0634\u0645',
+  '\uFD0D': '\u0634\u0631',
+  '\uFD0E': '\u0633\u0631',
+  '\uFD0F': '\u0635\u0631',
+  '\uFD10': '\u0636\u0631',
+  '\uFD11': '\u0637\u0649',
+  '\uFD12': '\u0637\u064A',
+  '\uFD13': '\u0639\u0649',
+  '\uFD14': '\u0639\u064A',
+  '\uFD15': '\u063A\u0649',
+  '\uFD16': '\u063A\u064A',
+  '\uFD17': '\u0633\u0649',
+  '\uFD18': '\u0633\u064A',
+  '\uFD19': '\u0634\u0649',
+  '\uFD1A': '\u0634\u064A',
+  '\uFD1B': '\u062D\u0649',
+  '\uFD1C': '\u062D\u064A',
+  '\uFD1D': '\u062C\u0649',
+  '\uFD1E': '\u062C\u064A',
+  '\uFD1F': '\u062E\u0649',
+  '\uFD20': '\u062E\u064A',
+  '\uFD21': '\u0635\u0649',
+  '\uFD22': '\u0635\u064A',
+  '\uFD23': '\u0636\u0649',
+  '\uFD24': '\u0636\u064A',
+  '\uFD25': '\u0634\u062C',
+  '\uFD26': '\u0634\u062D',
+  '\uFD27': '\u0634\u062E',
+  '\uFD28': '\u0634\u0645',
+  '\uFD29': '\u0634\u0631',
+  '\uFD2A': '\u0633\u0631',
+  '\uFD2B': '\u0635\u0631',
+  '\uFD2C': '\u0636\u0631',
+  '\uFD2D': '\u0634\u062C',
+  '\uFD2E': '\u0634\u062D',
+  '\uFD2F': '\u0634\u062E',
+  '\uFD30': '\u0634\u0645',
+  '\uFD31': '\u0633\u0647',
+  '\uFD32': '\u0634\u0647',
+  '\uFD33': '\u0637\u0645',
+  '\uFD34': '\u0633\u062C',
+  '\uFD35': '\u0633\u062D',
+  '\uFD36': '\u0633\u062E',
+  '\uFD37': '\u0634\u062C',
+  '\uFD38': '\u0634\u062D',
+  '\uFD39': '\u0634\u062E',
+  '\uFD3A': '\u0637\u0645',
+  '\uFD3B': '\u0638\u0645',
+  '\uFD3C': '\u0627\u064B',
+  '\uFD3D': '\u0627\u064B',
+  '\uFD50': '\u062A\u062C\u0645',
+  '\uFD51': '\u062A\u062D\u062C',
+  '\uFD52': '\u062A\u062D\u062C',
+  '\uFD53': '\u062A\u062D\u0645',
+  '\uFD54': '\u062A\u062E\u0645',
+  '\uFD55': '\u062A\u0645\u062C',
+  '\uFD56': '\u062A\u0645\u062D',
+  '\uFD57': '\u062A\u0645\u062E',
+  '\uFD58': '\u062C\u0645\u062D',
+  '\uFD59': '\u062C\u0645\u062D',
+  '\uFD5A': '\u062D\u0645\u064A',
+  '\uFD5B': '\u062D\u0645\u0649',
+  '\uFD5C': '\u0633\u062D\u062C',
+  '\uFD5D': '\u0633\u062C\u062D',
+  '\uFD5E': '\u0633\u062C\u0649',
+  '\uFD5F': '\u0633\u0645\u062D',
+  '\uFD60': '\u0633\u0645\u062D',
+  '\uFD61': '\u0633\u0645\u062C',
+  '\uFD62': '\u0633\u0645\u0645',
+  '\uFD63': '\u0633\u0645\u0645',
+  '\uFD64': '\u0635\u062D\u062D',
+  '\uFD65': '\u0635\u062D\u062D',
+  '\uFD66': '\u0635\u0645\u0645',
+  '\uFD67': '\u0634\u062D\u0645',
+  '\uFD68': '\u0634\u062D\u0645',
+  '\uFD69': '\u0634\u062C\u064A',
+  '\uFD6A': '\u0634\u0645\u062E',
+  '\uFD6B': '\u0634\u0645\u062E',
+  '\uFD6C': '\u0634\u0645\u0645',
+  '\uFD6D': '\u0634\u0645\u0645',
+  '\uFD6E': '\u0636\u062D\u0649',
+  '\uFD6F': '\u0636\u062E\u0645',
+  '\uFD70': '\u0636\u062E\u0645',
+  '\uFD71': '\u0637\u0645\u062D',
+  '\uFD72': '\u0637\u0645\u062D',
+  '\uFD73': '\u0637\u0645\u0645',
+  '\uFD74': '\u0637\u0645\u064A',
+  '\uFD75': '\u0639\u062C\u0645',
+  '\uFD76': '\u0639\u0645\u0645',
+  '\uFD77': '\u0639\u0645\u0645',
+  '\uFD78': '\u0639\u0645\u0649',
+  '\uFD79': '\u063A\u0645\u0645',
+  '\uFD7A': '\u063A\u0645\u064A',
+  '\uFD7B': '\u063A\u0645\u0649',
+  '\uFD7C': '\u0641\u062E\u0645',
+  '\uFD7D': '\u0641\u062E\u0645',
+  '\uFD7E': '\u0642\u0645\u062D',
+  '\uFD7F': '\u0642\u0645\u0645',
+  '\uFD80': '\u0644\u062D\u0645',
+  '\uFD81': '\u0644\u062D\u064A',
+  '\uFD82': '\u0644\u062D\u0649',
+  '\uFD83': '\u0644\u062C\u062C',
+  '\uFD84': '\u0644\u062C\u062C',
+  '\uFD85': '\u0644\u062E\u0645',
+  '\uFD86': '\u0644\u062E\u0645',
+  '\uFD87': '\u0644\u0645\u062D',
+  '\uFD88': '\u0644\u0645\u062D',
+  '\uFD89': '\u0645\u062D\u062C',
+  '\uFD8A': '\u0645\u062D\u0645',
+  '\uFD8B': '\u0645\u062D\u064A',
+  '\uFD8C': '\u0645\u062C\u062D',
+  '\uFD8D': '\u0645\u062C\u0645',
+  '\uFD8E': '\u0645\u062E\u062C',
+  '\uFD8F': '\u0645\u062E\u0645',
+  '\uFD92': '\u0645\u062C\u062E',
+  '\uFD93': '\u0647\u0645\u062C',
+  '\uFD94': '\u0647\u0645\u0645',
+  '\uFD95': '\u0646\u062D\u0645',
+  '\uFD96': '\u0646\u062D\u0649',
+  '\uFD97': '\u0646\u062C\u0645',
+  '\uFD98': '\u0646\u062C\u0645',
+  '\uFD99': '\u0646\u062C\u0649',
+  '\uFD9A': '\u0646\u0645\u064A',
+  '\uFD9B': '\u0646\u0645\u0649',
+  '\uFD9C': '\u064A\u0645\u0645',
+  '\uFD9D': '\u064A\u0645\u0645',
+  '\uFD9E': '\u0628\u062E\u064A',
+  '\uFD9F': '\u062A\u062C\u064A',
+  '\uFDA0': '\u062A\u062C\u0649',
+  '\uFDA1': '\u062A\u062E\u064A',
+  '\uFDA2': '\u062A\u062E\u0649',
+  '\uFDA3': '\u062A\u0645\u064A',
+  '\uFDA4': '\u062A\u0645\u0649',
+  '\uFDA5': '\u062C\u0645\u064A',
+  '\uFDA6': '\u062C\u062D\u0649',
+  '\uFDA7': '\u062C\u0645\u0649',
+  '\uFDA8': '\u0633\u062E\u0649',
+  '\uFDA9': '\u0635\u062D\u064A',
+  '\uFDAA': '\u0634\u062D\u064A',
+  '\uFDAB': '\u0636\u062D\u064A',
+  '\uFDAC': '\u0644\u062C\u064A',
+  '\uFDAD': '\u0644\u0645\u064A',
+  '\uFDAE': '\u064A\u062D\u064A',
+  '\uFDAF': '\u064A\u062C\u064A',
+  '\uFDB0': '\u064A\u0645\u064A',
+  '\uFDB1': '\u0645\u0645\u064A',
+  '\uFDB2': '\u0642\u0645\u064A',
+  '\uFDB3': '\u0646\u062D\u064A',
+  '\uFDB4': '\u0642\u0645\u062D',
+  '\uFDB5': '\u0644\u062D\u0645',
+  '\uFDB6': '\u0639\u0645\u064A',
+  '\uFDB7': '\u0643\u0645\u064A',
+  '\uFDB8': '\u0646\u062C\u062D',
+  '\uFDB9': '\u0645\u062E\u064A',
+  '\uFDBA': '\u0644\u062C\u0645',
+  '\uFDBB': '\u0643\u0645\u0645',
+  '\uFDBC': '\u0644\u062C\u0645',
+  '\uFDBD': '\u0646\u062C\u062D',
+  '\uFDBE': '\u062C\u062D\u064A',
+  '\uFDBF': '\u062D\u062C\u064A',
+  '\uFDC0': '\u0645\u062C\u064A',
+  '\uFDC1': '\u0641\u0645\u064A',
+  '\uFDC2': '\u0628\u062D\u064A',
+  '\uFDC3': '\u0643\u0645\u0645',
+  '\uFDC4': '\u0639\u062C\u0645',
+  '\uFDC5': '\u0635\u0645\u0645',
+  '\uFDC6': '\u0633\u062E\u064A',
+  '\uFDC7': '\u0646\u062C\u064A',
+  '\uFE49': '\u203E',
+  '\uFE4A': '\u203E',
+  '\uFE4B': '\u203E',
+  '\uFE4C': '\u203E',
+  '\uFE4D': '\u005F',
+  '\uFE4E': '\u005F',
+  '\uFE4F': '\u005F',
+  '\uFE80': '\u0621',
+  '\uFE81': '\u0622',
+  '\uFE82': '\u0622',
+  '\uFE83': '\u0623',
+  '\uFE84': '\u0623',
+  '\uFE85': '\u0624',
+  '\uFE86': '\u0624',
+  '\uFE87': '\u0625',
+  '\uFE88': '\u0625',
+  '\uFE89': '\u0626',
+  '\uFE8A': '\u0626',
+  '\uFE8B': '\u0626',
+  '\uFE8C': '\u0626',
+  '\uFE8D': '\u0627',
+  '\uFE8E': '\u0627',
+  '\uFE8F': '\u0628',
+  '\uFE90': '\u0628',
+  '\uFE91': '\u0628',
+  '\uFE92': '\u0628',
+  '\uFE93': '\u0629',
+  '\uFE94': '\u0629',
+  '\uFE95': '\u062A',
+  '\uFE96': '\u062A',
+  '\uFE97': '\u062A',
+  '\uFE98': '\u062A',
+  '\uFE99': '\u062B',
+  '\uFE9A': '\u062B',
+  '\uFE9B': '\u062B',
+  '\uFE9C': '\u062B',
+  '\uFE9D': '\u062C',
+  '\uFE9E': '\u062C',
+  '\uFE9F': '\u062C',
+  '\uFEA0': '\u062C',
+  '\uFEA1': '\u062D',
+  '\uFEA2': '\u062D',
+  '\uFEA3': '\u062D',
+  '\uFEA4': '\u062D',
+  '\uFEA5': '\u062E',
+  '\uFEA6': '\u062E',
+  '\uFEA7': '\u062E',
+  '\uFEA8': '\u062E',
+  '\uFEA9': '\u062F',
+  '\uFEAA': '\u062F',
+  '\uFEAB': '\u0630',
+  '\uFEAC': '\u0630',
+  '\uFEAD': '\u0631',
+  '\uFEAE': '\u0631',
+  '\uFEAF': '\u0632',
+  '\uFEB0': '\u0632',
+  '\uFEB1': '\u0633',
+  '\uFEB2': '\u0633',
+  '\uFEB3': '\u0633',
+  '\uFEB4': '\u0633',
+  '\uFEB5': '\u0634',
+  '\uFEB6': '\u0634',
+  '\uFEB7': '\u0634',
+  '\uFEB8': '\u0634',
+  '\uFEB9': '\u0635',
+  '\uFEBA': '\u0635',
+  '\uFEBB': '\u0635',
+  '\uFEBC': '\u0635',
+  '\uFEBD': '\u0636',
+  '\uFEBE': '\u0636',
+  '\uFEBF': '\u0636',
+  '\uFEC0': '\u0636',
+  '\uFEC1': '\u0637',
+  '\uFEC2': '\u0637',
+  '\uFEC3': '\u0637',
+  '\uFEC4': '\u0637',
+  '\uFEC5': '\u0638',
+  '\uFEC6': '\u0638',
+  '\uFEC7': '\u0638',
+  '\uFEC8': '\u0638',
+  '\uFEC9': '\u0639',
+  '\uFECA': '\u0639',
+  '\uFECB': '\u0639',
+  '\uFECC': '\u0639',
+  '\uFECD': '\u063A',
+  '\uFECE': '\u063A',
+  '\uFECF': '\u063A',
+  '\uFED0': '\u063A',
+  '\uFED1': '\u0641',
+  '\uFED2': '\u0641',
+  '\uFED3': '\u0641',
+  '\uFED4': '\u0641',
+  '\uFED5': '\u0642',
+  '\uFED6': '\u0642',
+  '\uFED7': '\u0642',
+  '\uFED8': '\u0642',
+  '\uFED9': '\u0643',
+  '\uFEDA': '\u0643',
+  '\uFEDB': '\u0643',
+  '\uFEDC': '\u0643',
+  '\uFEDD': '\u0644',
+  '\uFEDE': '\u0644',
+  '\uFEDF': '\u0644',
+  '\uFEE0': '\u0644',
+  '\uFEE1': '\u0645',
+  '\uFEE2': '\u0645',
+  '\uFEE3': '\u0645',
+  '\uFEE4': '\u0645',
+  '\uFEE5': '\u0646',
+  '\uFEE6': '\u0646',
+  '\uFEE7': '\u0646',
+  '\uFEE8': '\u0646',
+  '\uFEE9': '\u0647',
+  '\uFEEA': '\u0647',
+  '\uFEEB': '\u0647',
+  '\uFEEC': '\u0647',
+  '\uFEED': '\u0648',
+  '\uFEEE': '\u0648',
+  '\uFEEF': '\u0649',
+  '\uFEF0': '\u0649',
+  '\uFEF1': '\u064A',
+  '\uFEF2': '\u064A',
+  '\uFEF3': '\u064A',
+  '\uFEF4': '\u064A',
+  '\uFEF5': '\u0644\u0622',
+  '\uFEF6': '\u0644\u0622',
+  '\uFEF7': '\u0644\u0623',
+  '\uFEF8': '\u0644\u0623',
+  '\uFEF9': '\u0644\u0625',
+  '\uFEFA': '\u0644\u0625',
+  '\uFEFB': '\u0644\u0627',
+  '\uFEFC': '\u0644\u0627'
+};
+
+function reverseIfRtl(chars) {
+  var charsLength = chars.length;
+  //reverse an arabic ligature
+  if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0)))
+    return chars;
+
+  var s = '';
+  for (var ii = charsLength - 1; ii >= 0; ii--)
+    s += chars[ii];
+  return s;
+}
+
+function fontCharsToUnicode(charCodes, font) {
+  var glyphs = font.charsToGlyphs(charCodes);
+  var result = '';
+  for (var i = 0, ii = glyphs.length; i < ii; i++) {
+    var glyph = glyphs[i];
+    if (!glyph)
+      continue;
+
+    var glyphUnicode = glyph.unicode;
+    if (glyphUnicode in NormalizedUnicodes)
+      glyphUnicode = NormalizedUnicodes[glyphUnicode];
+    result += reverseIfRtl(glyphUnicode);
+  }
+  return result;
+}
+
+function adjustWidths(properties) {
+  if (properties.fontMatrix[0] === FONT_IDENTITY_MATRIX[0]) {
+    return;
+  }
+  // adjusting width to fontMatrix scale
+  var scale = 0.001 / properties.fontMatrix[0];
+  var glyphsWidths = properties.widths;
+  for (var glyph in glyphsWidths) {
+    glyphsWidths[glyph] *= scale;
+  }
+  properties.defaultWidth *= scale;
+}
+
+/**
+ * 'Font' is the class the outside world should use, it encapsulate all the font
+ * decoding logics whatever type it is (assuming the font type is supported).
+ *
+ * For example to read a Type1 font and to attach it to the document:
+ *   var type1Font = new Font("MyFontName", binaryFile, propertiesObject);
+ *   type1Font.bind();
+ */
+var Font = (function FontClosure() {
+  function Font(name, file, properties) {
+
+    this.name = name;
+    this.loadedName = properties.loadedName;
+    this.coded = properties.coded;
+    this.loadCharProcs = properties.coded;
+    this.sizes = [];
+
+    var names = name.split('+');
+    names = names.length > 1 ? names[1] : names[0];
+    names = names.split(/[-,_]/g)[0];
+    this.isSerifFont = !!(properties.flags & FontFlags.Serif);
+    this.isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);
+    this.isMonospace = !!(properties.flags & FontFlags.FixedPitch);
+
+    var type = properties.type;
+    this.type = type;
+
+    this.fallbackName = this.isMonospace ? 'monospace' :
+                        this.isSerifFont ? 'serif' : 'sans-serif';
+
+    this.differences = properties.differences;
+    this.widths = properties.widths;
+    this.defaultWidth = properties.defaultWidth;
+    this.composite = properties.composite;
+    this.wideChars = properties.wideChars;
+    this.hasEncoding = properties.hasEncoding;
+    this.cmap = properties.cmap;
+
+    this.fontMatrix = properties.fontMatrix;
+    if (properties.type == 'Type3') {
+      this.encoding = properties.baseEncoding;
+      return;
+    }
+
+    // Trying to fix encoding using glyph CIDSystemInfo.
+    this.loadCidToUnicode(properties);
+    this.cidEncoding = properties.cidEncoding;
+    this.vertical = properties.vertical;
+    if (this.vertical) {
+      this.vmetrics = properties.vmetrics;
+      this.defaultVMetrics = properties.defaultVMetrics;
+    }
+
+    if (properties.toUnicode && properties.toUnicode.length > 0)
+      this.toUnicode = properties.toUnicode;
+    else
+      this.rebuildToUnicode(properties);
+
+    this.toFontChar = this.buildToFontChar(this.toUnicode);
+
+    if (!file) {
+      // The file data is not specified. Trying to fix the font name
+      // to be used with the canvas.font.
+      var fontName = name.replace(/[,_]/g, '-');
+      fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName;
+
+      this.bold = (fontName.search(/bold/gi) != -1);
+      this.italic = (fontName.search(/oblique/gi) != -1) ||
+                    (fontName.search(/italic/gi) != -1);
+
+      // Use 'name' instead of 'fontName' here because the original
+      // name ArialBlack for example will be replaced by Helvetica.
+      this.black = (name.search(/Black/g) != -1);
+
+      // if at least one width is present, remeasure all chars when exists
+      this.remeasure = Object.keys(this.widths).length > 0;
+
+      this.encoding = properties.baseEncoding;
+      this.noUnicodeAdaptation = true;
+      this.loadedName = fontName.split('-')[0];
+      this.loading = false;
+      return;
+    }
+
+    // Some fonts might use wrong font types for Type1C or CIDFontType0C
+    var subtype = properties.subtype;
+    if (subtype == 'Type1C' && (type != 'Type1' && type != 'MMType1'))
+      type = 'Type1';
+    if (subtype == 'CIDFontType0C' && type != 'CIDFontType0')
+      type = 'CIDFontType0';
+    // XXX: Temporarily change the type for open type so we trigger a warning.
+    // This should be removed when we add support for open type.
+    if (subtype === 'OpenType') {
+      type = 'OpenType';
+    }
+
+    var data;
+    switch (type) {
+      case 'Type1':
+      case 'CIDFontType0':
+        this.mimetype = 'font/opentype';
+
+        var cff = (subtype == 'Type1C' || subtype == 'CIDFontType0C') ?
+          new CFFFont(file, properties) : new Type1Font(name, file, properties);
+
+        adjustWidths(properties);
+
+        // Wrap the CFF data inside an OTF font file
+        data = this.convert(name, cff, properties);
+        break;
+
+      case 'OpenType':
+      case 'TrueType':
+      case 'CIDFontType2':
+        this.mimetype = 'font/opentype';
+
+        // Repair the TrueType file. It is can be damaged in the point of
+        // view of the sanitizer
+        data = this.checkAndRepair(name, file, properties);
+        break;
+
+      default:
+        error('Font ' + type + ' is not supported');
+        break;
+    }
+
+    this.data = data;
+
+    // Transfer some properties again that could change during font conversion
+    this.fontMatrix = properties.fontMatrix;
+    this.widths = properties.widths;
+    this.defaultWidth = properties.defaultWidth;
+    this.encoding = properties.baseEncoding;
+    this.seacMap = properties.seacMap;
+
+    this.loading = true;
+  }
+
+  var numFonts = 0;
+  function getUniqueName() {
+    return 'pdfFont' + numFonts++;
+  }
+
+  function stringToArray(str) {
+    var array = [];
+    for (var i = 0, ii = str.length; i < ii; ++i)
+      array[i] = str.charCodeAt(i);
+
+    return array;
+  }
+
+  function arrayToString(arr) {
+    var str = '';
+    for (var i = 0, ii = arr.length; i < ii; ++i)
+      str += String.fromCharCode(arr[i]);
+
+    return str;
+  }
+
+  function int16(bytes) {
+    return (bytes[0] << 8) + (bytes[1] & 0xff);
+  }
+
+  function int32(bytes) {
+    return (bytes[0] << 24) + (bytes[1] << 16) +
+           (bytes[2] << 8) + (bytes[3] & 0xff);
+  }
+
+  function getMaxPower2(number) {
+    var maxPower = 0;
+    var value = number;
+    while (value >= 2) {
+      value /= 2;
+      maxPower++;
+    }
+
+    value = 2;
+    for (var i = 1; i < maxPower; i++)
+      value *= 2;
+    return value;
+  }
+
+  function string16(value) {
+    return String.fromCharCode((value >> 8) & 0xff) +
+           String.fromCharCode(value & 0xff);
+  }
+
+  function safeString16(value) {
+    // clamp value to the 16-bit int range
+    value = value > 0x7FFF ? 0x7FFF : value < -0x8000 ? -0x8000 : value;
+    return String.fromCharCode((value >> 8) & 0xff) +
+           String.fromCharCode(value & 0xff);
+  }
+
+  function string32(value) {
+    return String.fromCharCode((value >> 24) & 0xff) +
+           String.fromCharCode((value >> 16) & 0xff) +
+           String.fromCharCode((value >> 8) & 0xff) +
+           String.fromCharCode(value & 0xff);
+  }
+
+  function createOpenTypeHeader(sfnt, file, numTables) {
+    // Windows hates the Mac TrueType sfnt version number
+    if (sfnt == 'true')
+      sfnt = string32(0x00010000);
+
+    // sfnt version (4 bytes)
+    var header = sfnt;
+
+    // numTables (2 bytes)
+    header += string16(numTables);
+
+    // searchRange (2 bytes)
+    var tablesMaxPower2 = getMaxPower2(numTables);
+    var searchRange = tablesMaxPower2 * 16;
+    header += string16(searchRange);
+
+    // entrySelector (2 bytes)
+    header += string16(Math.log(tablesMaxPower2) / Math.log(2));
+
+    // rangeShift (2 bytes)
+    header += string16(numTables * 16 - searchRange);
+
+    file.file += header;
+    file.virtualOffset += header.length;
+  }
+
+  function createTableEntry(file, tag, data) {
+    // offset
+    var offset = file.virtualOffset;
+
+    // length
+    var length = data.length;
+
+    // Per spec tables must be 4-bytes align so add padding as needed
+    while (data.length & 3)
+      data.push(0x00);
+
+    while (file.virtualOffset & 3)
+      file.virtualOffset++;
+
+    // checksum
+    var checksum = 0, n = data.length;
+    for (var i = 0; i < n; i += 4)
+      checksum = (checksum + int32([data[i], data[i + 1], data[i + 2],
+                                    data[i + 3]])) | 0;
+
+    var tableEntry = (tag + string32(checksum) +
+                      string32(offset) + string32(length));
+    file.file += tableEntry;
+    file.virtualOffset += data.length;
+  }
+
+  function getRanges(glyphs, deltas) {
+    // Array.sort() sorts by characters, not numerically, so convert to an
+    // array of characters.
+    var codes = [];
+    var length = glyphs.length;
+    for (var n = 0; n < length; ++n)
+      codes.push({ unicode: glyphs[n].unicode, code: n });
+    codes.sort(function fontGetRangesSort(a, b) {
+      return a.unicode - b.unicode;
+    });
+
+    // Split the sorted codes into ranges.
+    var ranges = [];
+    for (var n = 0; n < length; ) {
+      var start = codes[n].unicode;
+      var codeIndices = [deltas ? deltas[codes[n].code] : codes[n].code + 1];
+      ++n;
+      var end = start;
+      while (n < length && end + 1 == codes[n].unicode) {
+        codeIndices.push(deltas ? deltas[codes[n].code] : codes[n].code + 1);
+        ++end;
+        ++n;
+        if (end === 0xFFFF) { break; }
+      }
+      ranges.push([start, end, codeIndices]);
+    }
+
+    return ranges;
+  }
+
+  function createCmapTable(glyphs, deltas) {
+    var ranges = getRanges(glyphs, deltas);
+
+    var numTables = ranges[ranges.length - 1][1] > 0xFFFF ? 2 : 1;
+    var cmap = '\x00\x00' + // version
+               string16(numTables) +  // numTables
+               '\x00\x03' + // platformID
+               '\x00\x01' + // encodingID
+               string32(4 + numTables * 8); // start of the table record
+
+    for (var i = ranges.length - 1; i >= 0; --i) {
+      if (ranges[i][0] <= 0xFFFF) { break; }
+    }
+    var bmpLength = i + 1;
+
+    if (ranges[i][0] < 0xFFFF && ranges[i][1] === 0xFFFF) {
+      ranges[i][1] = 0xFFFE;
+    }
+    var trailingRangesCount = ranges[i][1] < 0xFFFF ? 1 : 0;
+    var segCount = bmpLength + trailingRangesCount;
+    var segCount2 = segCount * 2;
+    var searchRange = getMaxPower2(segCount) * 2;
+    var searchEntry = Math.log(segCount) / Math.log(2);
+    var rangeShift = 2 * segCount - searchRange;
+
+    // Fill up the 4 parallel arrays describing the segments.
+    var startCount = '';
+    var endCount = '';
+    var idDeltas = '';
+    var idRangeOffsets = '';
+    var glyphsIds = '';
+    var bias = 0;
+
+    for (var i = 0, ii = bmpLength; i < ii; i++) {
+      var range = ranges[i];
+      var start = range[0];
+      var end = range[1];
+      startCount += string16(start);
+      endCount += string16(end);
+      var codes = range[2];
+      var contiguous = true;
+      for (var j = 1, jj = codes.length; j < jj; ++j) {
+        if (codes[j] !== codes[j - 1] + 1) {
+          contiguous = false;
+          break;
+        }
+      }
+      if (!contiguous) {
+        var offset = (segCount - i) * 2 + bias * 2;
+        bias += (end - start + 1);
+
+        idDeltas += string16(0);
+        idRangeOffsets += string16(offset);
+
+        for (var j = 0, jj = codes.length; j < jj; ++j) {
+          glyphsIds += string16(codes[j]);
+        }
+      } else {
+        var startCode = codes[0];
+
+        idDeltas += string16((startCode - start) & 0xFFFF);
+        idRangeOffsets += string16(0);
+      }
+    }
+
+    if (trailingRangesCount > 0) {
+      endCount += '\xFF\xFF';
+      startCount += '\xFF\xFF';
+      idDeltas += '\x00\x01';
+      idRangeOffsets += '\x00\x00';
+    }
+
+    var format314 = '\x00\x00' + // language
+                    string16(segCount2) +
+                    string16(searchRange) +
+                    string16(searchEntry) +
+                    string16(rangeShift) +
+                    endCount + '\x00\x00' + startCount +
+                    idDeltas + idRangeOffsets + glyphsIds;
+
+    var format31012 = '';
+    var header31012 = '';
+    if (numTables > 1) {
+      cmap += '\x00\x03' + // platformID
+              '\x00\x0A' + // encodingID
+              string32(4 + numTables * 8 +
+                       4 + format314.length); // start of the table record
+      format31012 = '';
+      for (var i = 0, ii = ranges.length; i < ii; i++) {
+        var range = ranges[i];
+        var start = range[0];
+        var codes = range[2];
+        var code = codes[0];
+        for (var j = 1, jj = codes.length; j < jj; ++j) {
+          if (codes[j] !== codes[j - 1] + 1) {
+            var end = range[0] + j - 1;
+            format31012 += string32(start) + // startCharCode
+                           string32(end) + // endCharCode
+                           string32(code); // startGlyphID
+            start = end + 1;
+            code = codes[j];
+          }
+        }
+        format31012 += string32(start) + // startCharCode
+                       string32(range[1]) + // endCharCode
+                       string32(code); // startGlyphID
+      }
+      header31012 = '\x00\x0C' + // format
+                    '\x00\x00' + // reserved
+                    string32(format31012.length + 16) + // length
+                    '\x00\x00\x00\x00' + // language
+                    string32(format31012.length / 12); // nGroups
+    }
+
+    return stringToArray(cmap +
+                         '\x00\x04' + // format
+                         string16(format314.length + 4) + // length
+                         format314 + header31012 + format31012);
+  }
+
+  function validateOS2Table(os2) {
+    var stream = new Stream(os2.data);
+    var version = int16(stream.getBytes(2));
+    // TODO verify all OS/2 tables fields, but currently we validate only those
+    // that give us issues
+    stream.getBytes(60); // skipping type, misc sizes, panose, unicode ranges
+    var selection = int16(stream.getBytes(2));
+    if (version < 4 && (selection & 0x0300)) {
+      return false;
+    }
+    var firstChar = int16(stream.getBytes(2));
+    var lastChar = int16(stream.getBytes(2));
+    if (firstChar > lastChar) {
+      return false;
+    }
+    stream.getBytes(6); // skipping sTypoAscender/Descender/LineGap
+    var usWinAscent = int16(stream.getBytes(2));
+    if (usWinAscent === 0) { // makes font unreadable by windows
+      return false;
+    }
+
+    // OS/2 appears to be valid, resetting some fields
+    os2.data[8] = os2.data[9] = 0; // IE rejects fonts if fsType != 0
+    return true;
+  }
+
+  function createOS2Table(properties, charstrings, override) {
+    override = override || {
+      unitsPerEm: 0,
+      yMax: 0,
+      yMin: 0,
+      ascent: 0,
+      descent: 0
+    };
+
+    var ulUnicodeRange1 = 0;
+    var ulUnicodeRange2 = 0;
+    var ulUnicodeRange3 = 0;
+    var ulUnicodeRange4 = 0;
+
+    var firstCharIndex = null;
+    var lastCharIndex = 0;
+
+    if (charstrings) {
+      for (var i = 0; i < charstrings.length; ++i) {
+        var code = charstrings[i].unicode;
+        if (firstCharIndex > code || !firstCharIndex)
+          firstCharIndex = code;
+        if (lastCharIndex < code)
+          lastCharIndex = code;
+
+        var position = getUnicodeRangeFor(code);
+        if (position < 32) {
+          ulUnicodeRange1 |= 1 << position;
+        } else if (position < 64) {
+          ulUnicodeRange2 |= 1 << position - 32;
+        } else if (position < 96) {
+          ulUnicodeRange3 |= 1 << position - 64;
+        } else if (position < 123) {
+          ulUnicodeRange4 |= 1 << position - 96;
+        } else {
+          error('Unicode ranges Bits > 123 are reserved for internal usage');
+        }
+      }
+    } else {
+      // TODO
+      firstCharIndex = 0;
+      lastCharIndex = 255;
+    }
+
+    var bbox = properties.bbox || [0, 0, 0, 0];
+    var unitsPerEm = override.unitsPerEm ||
+      1 / (properties.fontMatrix || FONT_IDENTITY_MATRIX)[0];
+
+    // if the font units differ to the PDF glyph space units
+    // then scale up the values
+    var scale = properties.ascentScaled ? 1.0 :
+      unitsPerEm / PDF_GLYPH_SPACE_UNITS;
+
+    var typoAscent = override.ascent || Math.round(scale *
+      (properties.ascent || bbox[3]));
+    var typoDescent = override.descent || Math.round(scale *
+      (properties.descent || bbox[1]));
+    if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) {
+      typoDescent = -typoDescent; // fixing incorrect descent
+    }
+    var winAscent = override.yMax || typoAscent;
+    var winDescent = -override.yMin || -typoDescent;
+
+    return '\x00\x03' + // version
+           '\x02\x24' + // xAvgCharWidth
+           '\x01\xF4' + // usWeightClass
+           '\x00\x05' + // usWidthClass
+           '\x00\x00' + // fstype (0 to let the font loads via font-face on IE)
+           '\x02\x8A' + // ySubscriptXSize
+           '\x02\xBB' + // ySubscriptYSize
+           '\x00\x00' + // ySubscriptXOffset
+           '\x00\x8C' + // ySubscriptYOffset
+           '\x02\x8A' + // ySuperScriptXSize
+           '\x02\xBB' + // ySuperScriptYSize
+           '\x00\x00' + // ySuperScriptXOffset
+           '\x01\xDF' + // ySuperScriptYOffset
+           '\x00\x31' + // yStrikeOutSize
+           '\x01\x02' + // yStrikeOutPosition
+           '\x00\x00' + // sFamilyClass
+           '\x00\x00\x06' +
+           String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) +
+           '\x00\x00\x00\x00\x00\x00' + // Panose
+           string32(ulUnicodeRange1) + // ulUnicodeRange1 (Bits 0-31)
+           string32(ulUnicodeRange2) + // ulUnicodeRange2 (Bits 32-63)
+           string32(ulUnicodeRange3) + // ulUnicodeRange3 (Bits 64-95)
+           string32(ulUnicodeRange4) + // ulUnicodeRange4 (Bits 96-127)
+           '\x2A\x32\x31\x2A' + // achVendID
+           string16(properties.italicAngle ? 1 : 0) + // fsSelection
+           string16(firstCharIndex ||
+                    properties.firstChar) + // usFirstCharIndex
+           string16(lastCharIndex || properties.lastChar) +  // usLastCharIndex
+           string16(typoAscent) + // sTypoAscender
+           string16(typoDescent) + // sTypoDescender
+           '\x00\x64' + // sTypoLineGap (7%-10% of the unitsPerEM value)
+           string16(winAscent) + // usWinAscent
+           string16(winDescent) + // usWinDescent
+           '\x00\x00\x00\x00' + // ulCodePageRange1 (Bits 0-31)
+           '\x00\x00\x00\x00' + // ulCodePageRange2 (Bits 32-63)
+           string16(properties.xHeight) + // sxHeight
+           string16(properties.capHeight) + // sCapHeight
+           string16(0) + // usDefaultChar
+           string16(firstCharIndex || properties.firstChar) + // usBreakChar
+           '\x00\x03';  // usMaxContext
+  }
+
+  function createPostTable(properties) {
+    var angle = Math.floor(properties.italicAngle * (Math.pow(2, 16)));
+    return '\x00\x03\x00\x00' + // Version number
+           string32(angle) + // italicAngle
+           '\x00\x00' + // underlinePosition
+           '\x00\x00' + // underlineThickness
+           string32(properties.fixedPitch) + // isFixedPitch
+           '\x00\x00\x00\x00' + // minMemType42
+           '\x00\x00\x00\x00' + // maxMemType42
+           '\x00\x00\x00\x00' + // minMemType1
+           '\x00\x00\x00\x00';  // maxMemType1
+  }
+
+  function createNameTable(name, proto) {
+    if (!proto) {
+      proto = [[], []]; // no strings and unicode strings
+    }
+
+    var strings = [
+      proto[0][0] || 'Original licence',  // 0.Copyright
+      proto[0][1] || name,                // 1.Font family
+      proto[0][2] || 'Unknown',           // 2.Font subfamily (font weight)
+      proto[0][3] || 'uniqueID',          // 3.Unique ID
+      proto[0][4] || name,                // 4.Full font name
+      proto[0][5] || 'Version 0.11',      // 5.Version
+      proto[0][6] || '',                  // 6.Postscript name
+      proto[0][7] || 'Unknown',           // 7.Trademark
+      proto[0][8] || 'Unknown',           // 8.Manufacturer
+      proto[0][9] || 'Unknown'            // 9.Designer
+    ];
+
+    // Mac want 1-byte per character strings while Windows want
+    // 2-bytes per character, so duplicate the names table
+    var stringsUnicode = [];
+    for (var i = 0, ii = strings.length; i < ii; i++) {
+      var str = proto[1][i] || strings[i];
+
+      var strUnicode = '';
+      for (var j = 0, jj = str.length; j < jj; j++)
+        strUnicode += string16(str.charCodeAt(j));
+      stringsUnicode.push(strUnicode);
+    }
+
+    var names = [strings, stringsUnicode];
+    var platforms = ['\x00\x01', '\x00\x03'];
+    var encodings = ['\x00\x00', '\x00\x01'];
+    var languages = ['\x00\x00', '\x04\x09'];
+
+    var namesRecordCount = strings.length * platforms.length;
+    var nameTable =
+      '\x00\x00' +                           // format
+      string16(namesRecordCount) +           // Number of names Record
+      string16(namesRecordCount * 12 + 6);   // Storage
+
+    // Build the name records field
+    var strOffset = 0;
+    for (var i = 0, ii = platforms.length; i < ii; i++) {
+      var strs = names[i];
+      for (var j = 0, jj = strs.length; j < jj; j++) {
+        var str = strs[j];
+        var nameRecord =
+          platforms[i] + // platform ID
+          encodings[i] + // encoding ID
+          languages[i] + // language ID
+          string16(j) + // name ID
+          string16(str.length) +
+          string16(strOffset);
+        nameTable += nameRecord;
+        strOffset += str.length;
+      }
+    }
+
+    nameTable += strings.join('') + stringsUnicode.join('');
+    return nameTable;
+  }
+
+  // Normalize the charcodes in the cmap table into unicode values
+  // that will work with the (3, 1) cmap table we will write out.
+  function cmapCharcodeToUnicode(charcode, symbolic, platformId, encodingId) {
+    var unicode;
+    if (symbolic) {
+      // These codes will be shifted into the range
+      // SYMBOLIC_FONT_GLYPH_OFFSET to (SYMBOLIC_FONT_GLYPH_OFFSET + 0xFF)
+      // so that they are not in the control character range that could
+      // be displayed as spaces by browsers.
+      if (platformId === 3 && encodingId === 0 ||
+          platformId === 1 && encodingId === 0) {
+        unicode = SYMBOLIC_FONT_GLYPH_OFFSET | (charcode & 0xFF);
+      }
+    } else {
+      if (platformId === 3 && encodingId === 1) {
+        // A (3, 1) table is alredy unicode (Microsoft Unicode format)
+        unicode = charcode;
+      } else if (platformId === 1 && encodingId === 0) {
+        // TODO(mack): Should apply the changes to convert the
+        // MacRomanEncoding to Mac OS Roman encoding in 9.6.6.4
+        // table 115 of the pdf spec
+        var glyphName = Encodings.MacRomanEncoding[charcode];
+        if (glyphName) {
+          unicode = GlyphsUnicode[glyphName];
+        }
+      }
+    }
+    return unicode;
+  }
+
+
+  Font.prototype = {
+    name: null,
+    font: null,
+    mimetype: null,
+    encoding: null,
+    get renderer() {
+      var renderer = FontRendererFactory.create(this);
+      return shadow(this, 'renderer', renderer);
+    },
+
+    exportData: function Font_exportData() {
+      var data = {};
+      for (var i in this) {
+        if (this.hasOwnProperty(i))
+          data[i] = this[i];
+      }
+      return data;
+    },
+
+    checkAndRepair: function Font_checkAndRepair(name, font, properties) {
+      function readTableEntry(file) {
+        var tag = file.getBytes(4);
+        tag = String.fromCharCode(tag[0]) +
+              String.fromCharCode(tag[1]) +
+              String.fromCharCode(tag[2]) +
+              String.fromCharCode(tag[3]);
+
+        var checksum = int32(file.getBytes(4));
+        var offset = int32(file.getBytes(4));
+        var length = int32(file.getBytes(4));
+
+        // Read the table associated data
+        var previousPosition = file.pos;
+        file.pos = file.start ? file.start : 0;
+        file.skip(offset);
+        var data = file.getBytes(length);
+        file.pos = previousPosition;
+
+        if (tag == 'head') {
+          // clearing checksum adjustment
+          data[8] = data[9] = data[10] = data[11] = 0;
+          data[17] |= 0x20; //Set font optimized for cleartype flag
+        }
+
+        return {
+          tag: tag,
+          checksum: checksum,
+          length: length,
+          offset: offset,
+          data: data
+        };
+      }
+
+      function readOpenTypeHeader(ttf) {
+        return {
+          version: arrayToString(ttf.getBytes(4)),
+          numTables: int16(ttf.getBytes(2)),
+          searchRange: int16(ttf.getBytes(2)),
+          entrySelector: int16(ttf.getBytes(2)),
+          rangeShift: int16(ttf.getBytes(2))
+        };
+      }
+
+      function createGlyphNameMap(glyphs, ids, properties) {
+        var glyphNames = properties.glyphNames;
+        if (!glyphNames) {
+          properties.glyphNameMap = {};
+          return;
+        }
+        var glyphsLength = glyphs.length;
+        var glyphNameMap = {};
+        var encoding = [];
+        for (var i = 0; i < glyphsLength; ++i) {
+          var glyphName = glyphNames[ids[i]];
+          if (!glyphName)
+            continue;
+          var unicode = glyphs[i].unicode;
+          glyphNameMap[glyphName] = unicode;
+          var code = glyphs[i].code;
+          encoding[code] = glyphName;
+        }
+        properties.glyphNameMap = glyphNameMap;
+        if (properties.overridableEncoding)
+          properties.baseEncoding = encoding;
+      }
+
+      /**
+       * Read the appropriate subtable from the cmap according to 9.6.6.4 from
+       * PDF spec
+       */
+      function readCmapTable(cmap, font, hasEncoding, isSymbolicFont) {
+        var start = (font.start ? font.start : 0) + cmap.offset;
+        font.pos = start;
+
+        var version = int16(font.getBytes(2));
+        var numTables = int16(font.getBytes(2));
+
+        var potentialTable;
+        var foundPreferredTable;
+        // There's an order of preference in terms of which cmap subtable we
+        // want to use. So scan through them to find our preferred table.
+        for (var i = 0; i < numTables; i++) {
+          var platformId = int16(font.getBytes(2));
+          var encodingId = int16(font.getBytes(2));
+          var offset = int32(font.getBytes(4));
+          var useTable = false;
+          var canBreak = false;
+
+          // The following block implements the following from the spec:
+          //
+          //   When the font has no Encoding entry, or the font descriptor’s
+          //   Symbolic flag is set (in which case the Encoding entry
+          //   is ignored), this shall occur:
+          //      - If the font contains a (3, 0) subtable, the range of
+          //      - Otherwise, the (1, 0) subtable will be used.
+          //   Otherwise, if the font does have an encoding:
+          //      - Use the (3, 1) cmap subtable
+          //      - Otherwise, use the (1, 0) subtable if present
+          //
+          // The following diverges slightly from the above spec in order
+          // to handle the case that hasEncoding and isSymbolicFont are both
+          // true. In this, based on the ordering of the rules in the spec,
+          // my interpretation is that we should be acting as if the font is
+          // symbolic.
+          //
+          // However, in this case, the test pdf 'preistabelle.pdf'
+          // is interpreting this case as a non-symbolic font. In this case
+          // though, 'presitabelle.pdf' does contain a (3, 1) table and does
+          // not contain a (3, 0) table which indicates it is non-symbolic.
+          //
+          // Thus, I am using this heurisitic of looking at which table is
+          // found to truly determine whether or not the font is symbolic.
+          // That is, if the specific symbolic/non-symbolic font specific
+          // tables (3, 0) or (3, 1) is found, that information is used for
+          // deciding if the font is symbolic or not.
+          //
+          // TODO(mack): This section needs some more thought on whether the
+          // heuristic is good enough. For now, it passes all the regression
+          // tests.
+          if (isSymbolicFont && platformId === 3 && encodingId === 0) {
+            useTable = true;
+            canBreak = true;
+            foundPreferredTable = true;
+          } else if (hasEncoding && platformId === 3 && encodingId === 1) {
+            useTable = true;
+            canBreak = true;
+            foundPreferredTable = true;
+            // Update the isSymbolicFont based on this heuristic
+            isSymbolicFont = false;
+          } else if (platformId === 1 && encodingId === 0 &&
+              !foundPreferredTable) {
+            useTable = true;
+            foundPreferredTable = true;
+          } else if (!potentialTable) {
+            // We will use an arbitrary table if we cannot find a preferred
+            // table
+            useTable = true;
+          }
+
+          if (useTable) {
+            potentialTable = {
+              platformId: platformId,
+              encodingId: encodingId,
+              offset: offset,
+              isSymbolicFont: isSymbolicFont
+            };
+          }
+          if (canBreak) {
+            break;
+          }
+        }
+
+        if (!potentialTable) {
+          error('Could not find a cmap table');
+          return;
+        }
+
+        if (!foundPreferredTable) {
+          warn('Did not find a cmap of suitable format. Interpreting (' +
+               potentialTable.platformId + ', ' + potentialTable.encodingId +
+               ') as (3, 1) table');
+          potentialTable.platformId = 3;
+          potentialTable.encodingId = 1;
+        }
+
+        font.pos = start + potentialTable.offset;
+        var format = int16(font.getBytes(2));
+        var length = int16(font.getBytes(2));
+        var language = int16(font.getBytes(2));
+
+        var hasShortCmap = false;
+        var mappings = [];
+
+        // TODO(mack): refactor this cmap subtable reading logic out
+        if (format === 0) {
+          for (var j = 0; j < 256; j++) {
+            var index = font.getByte();
+            if (!index) {
+              continue;
+            }
+            mappings.push({
+              charcode: j,
+              glyphId: index
+            });
+          }
+          hasShortCmap = true;
+        } else if (format === 4) {
+          // re-creating the table in format 4 since the encoding
+          // might be changed
+          var segCount = (int16(font.getBytes(2)) >> 1);
+          font.getBytes(6); // skipping range fields
+          var segIndex, segments = [];
+          for (segIndex = 0; segIndex < segCount; segIndex++) {
+            segments.push({ end: int16(font.getBytes(2)) });
+          }
+          font.getBytes(2);
+          for (segIndex = 0; segIndex < segCount; segIndex++) {
+            segments[segIndex].start = int16(font.getBytes(2));
+          }
+
+          for (segIndex = 0; segIndex < segCount; segIndex++) {
+            segments[segIndex].delta = int16(font.getBytes(2));
+          }
+
+          var offsetsCount = 0;
+          for (segIndex = 0; segIndex < segCount; segIndex++) {
+            var segment = segments[segIndex];
+            var rangeOffset = int16(font.getBytes(2));
+            if (!rangeOffset) {
+              segment.offsetIndex = -1;
+              continue;
+            }
+
+            var offsetIndex = (rangeOffset >> 1) - (segCount - segIndex);
+            segment.offsetIndex = offsetIndex;
+            offsetsCount = Math.max(offsetsCount, offsetIndex +
+              segment.end - segment.start + 1);
+          }
+
+          var offsets = [];
+          for (var j = 0; j < offsetsCount; j++) {
+            offsets.push(int16(font.getBytes(2)));
+          }
+
+          for (segIndex = 0; segIndex < segCount; segIndex++) {
+            var segment = segments[segIndex];
+            var start = segment.start, end = segment.end;
+            var delta = segment.delta, offsetIndex = segment.offsetIndex;
+
+            for (var j = start; j <= end; j++) {
+              if (j == 0xFFFF) {
+                continue;
+              }
+
+              var glyphId = offsetIndex < 0 ? j :
+                offsets[offsetIndex + j - start];
+              glyphId = (glyphId + delta) & 0xFFFF;
+              if (glyphId === 0) {
+                continue;
+              }
+              mappings.push({
+                charcode: j,
+                glyphId: glyphId
+              });
+            }
+          }
+        } else if (format == 6) {
+          // Format 6 is a 2-bytes dense mapping, which means the font data
+          // lives glue together even if they are pretty far in the unicode
+          // table. (This looks weird, so I can have missed something), this
+          // works on Linux but seems to fails on Mac so let's rewrite the
+          // cmap table to a 3-1-4 style
+          var firstCode = int16(font.getBytes(2));
+          var entryCount = int16(font.getBytes(2));
+
+          var glyphs = [];
+          var ids = [];
+          for (var j = 0; j < entryCount; j++) {
+            var glyphId = int16(font.getBytes(2));
+            var charcode = firstCode + j;
+
+            mappings.push({
+              charcode: charcode,
+              glyphId: glyphId
+            });
+          }
+        } else {
+          error('cmap table has unsupported format: ' + format);
+        }
+
+        return {
+          platformId: potentialTable.platformId,
+          encodingId: potentialTable.encodingId,
+          isSymbolicFont: potentialTable.isSymbolicFont,
+          mappings: mappings,
+          hasShortCmap: hasShortCmap
+        };
+      }
+
+      function sanitizeMetrics(font, header, metrics, numGlyphs) {
+        if (!header) {
+          if (metrics) {
+            metrics.data = null;
+          }
+          return;
+        }
+
+        font.pos = (font.start ? font.start : 0) + header.offset;
+        font.pos += header.length - 2;
+        var numOfMetrics = int16(font.getBytes(2));
+
+        if (numOfMetrics > numGlyphs) {
+          info('The numOfMetrics (' + numOfMetrics + ') should not be ' +
+               'greater than the numGlyphs (' + numGlyphs + ')');
+          // Reduce numOfMetrics if it is greater than numGlyphs
+          numOfMetrics = numGlyphs;
+          header.data[34] = (numOfMetrics & 0xff00) >> 8;
+          header.data[35] = numOfMetrics & 0x00ff;
+        }
+
+        var numOfSidebearings = numGlyphs - numOfMetrics;
+        var numMissing = numOfSidebearings -
+          ((metrics.length - numOfMetrics * 4) >> 1);
+
+        if (numMissing > 0) {
+          font.pos = (font.start ? font.start : 0) + metrics.offset;
+          var entries = '';
+          for (var i = 0, ii = metrics.length; i < ii; i++)
+            entries += String.fromCharCode(font.getByte());
+          for (var i = 0; i < numMissing; i++)
+            entries += '\x00\x00';
+          metrics.data = stringToArray(entries);
+        }
+      }
+
+      function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart,
+                             hintsValid) {
+        if (sourceEnd - sourceStart <= 12) {
+          // glyph with data less than 12 is invalid one
+          return 0;
+        }
+        var glyf = source.subarray(sourceStart, sourceEnd);
+        var contoursCount = (glyf[0] << 8) | glyf[1];
+        if (contoursCount & 0x8000) {
+          // complex glyph, writing as is
+          dest.set(glyf, destStart);
+          return glyf.length;
+        }
+
+        var j = 10, flagsCount = 0;
+        for (var i = 0; i < contoursCount; i++) {
+          var endPoint = (glyf[j] << 8) | glyf[j + 1];
+          flagsCount = endPoint + 1;
+          j += 2;
+        }
+        // skipping instructions
+        var instructionsStart = j;
+        var instructionsLength = (glyf[j] << 8) | glyf[j + 1];
+        j += 2 + instructionsLength;
+        var instructionsEnd = j;
+        // validating flags
+        var coordinatesLength = 0;
+        for (var i = 0; i < flagsCount; i++) {
+          var flag = glyf[j++];
+          if (flag & 0xC0) {
+            // reserved flags must be zero, rejecting
+            return 0;
+          }
+          var xyLength = ((flag & 2) ? 1 : (flag & 16) ? 0 : 2) +
+                         ((flag & 4) ? 1 : (flag & 32) ? 0 : 2);
+          coordinatesLength += xyLength;
+          if (flag & 8) {
+            var repeat = glyf[j++];
+            i += repeat;
+            coordinatesLength += repeat * xyLength;
+          }
+        }
+        var glyphDataLength = j + coordinatesLength;
+        if (glyphDataLength > glyf.length) {
+          // not enough data for coordinates
+          return 0;
+        }
+        if (!hintsValid && instructionsLength > 0) {
+          dest.set(glyf.subarray(0, instructionsStart), destStart);
+          dest.set([0, 0], destStart + instructionsStart);
+          dest.set(glyf.subarray(instructionsEnd, glyphDataLength),
+                   destStart + instructionsStart + 2);
+          glyphDataLength -= instructionsLength;
+          if (glyf.length - glyphDataLength > 3) {
+            glyphDataLength = (glyphDataLength + 3) & ~3;
+          }
+          return glyphDataLength;
+        }
+        if (glyf.length - glyphDataLength > 3) {
+          // truncating and aligning to 4 bytes the long glyph data
+          glyphDataLength = (glyphDataLength + 3) & ~3;
+          dest.set(glyf.subarray(0, glyphDataLength), destStart);
+          return glyphDataLength;
+        }
+        // glyph data is fine
+        dest.set(glyf, destStart);
+        return glyf.length;
+      }
+
+      function sanitizeHead(head, numGlyphs, locaLength) {
+        var data = head.data;
+
+        // Validate version:
+        // Should always be 0x00010000
+        var version = int32([data[0], data[1], data[2], data[3]]);
+        if (version >> 16 !== 1) {
+          info('Attempting to fix invalid version in head table: ' + version);
+          data[0] = 0;
+          data[1] = 1;
+          data[2] = 0;
+          data[3] = 0;
+        }
+
+        var indexToLocFormat = int16([data[50], data[51]]);
+        if (indexToLocFormat < 0 || indexToLocFormat > 1) {
+          info('Attempting to fix invalid indexToLocFormat in head table: ' +
+               indexToLocFormat);
+
+          // The value of indexToLocFormat should be 0 if the loca table
+          // consists of short offsets, and should be 1 if the loca table
+          // consists of long offsets.
+          //
+          // The number of entries in the loca table should be numGlyphs + 1.
+          //
+          // Using this information, we can work backwards to deduce if the
+          // size of each offset in the loca table, and thus figure out the
+          // appropriate value for indexToLocFormat.
+
+          var numGlyphsPlusOne = numGlyphs + 1;
+          if (locaLength === numGlyphsPlusOne << 1) {
+            // 0x0000 indicates the loca table consists of short offsets
+            data[50] = 0;
+            data[51] = 0;
+          } else if (locaLength === numGlyphsPlusOne << 2) {
+            // 0x0001 indicates the loca table consists of long offsets
+            data[50] = 0;
+            data[51] = 1;
+          } else {
+            warn('Could not fix indexToLocFormat: ' + indexToLocFormat);
+          }
+        }
+      }
+
+      function sanitizeGlyphLocations(loca, glyf, numGlyphs,
+                                      isGlyphLocationsLong, hintsValid,
+                                      dupFirstEntry) {
+        var itemSize, itemDecode, itemEncode;
+        if (isGlyphLocationsLong) {
+          itemSize = 4;
+          itemDecode = function fontItemDecodeLong(data, offset) {
+            return (data[offset] << 24) | (data[offset + 1] << 16) |
+                   (data[offset + 2] << 8) | data[offset + 3];
+          };
+          itemEncode = function fontItemEncodeLong(data, offset, value) {
+            data[offset] = (value >>> 24) & 0xFF;
+            data[offset + 1] = (value >> 16) & 0xFF;
+            data[offset + 2] = (value >> 8) & 0xFF;
+            data[offset + 3] = value & 0xFF;
+          };
+        } else {
+          itemSize = 2;
+          itemDecode = function fontItemDecode(data, offset) {
+            return (data[offset] << 9) | (data[offset + 1] << 1);
+          };
+          itemEncode = function fontItemEncode(data, offset, value) {
+            data[offset] = (value >> 9) & 0xFF;
+            data[offset + 1] = (value >> 1) & 0xFF;
+          };
+        }
+        var locaData = loca.data;
+        // removing the invalid glyphs
+        var oldGlyfData = glyf.data;
+        var oldGlyfDataLength = oldGlyfData.length;
+        var newGlyfData = new Uint8Array(oldGlyfDataLength);
+        var startOffset = itemDecode(locaData, 0);
+        var writeOffset = 0;
+        itemEncode(locaData, 0, writeOffset);
+        for (var i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) {
+          var endOffset = itemDecode(locaData, j);
+          if (endOffset > oldGlyfDataLength) {
+            // glyph end offset points outside glyf data, rejecting the glyph
+            itemEncode(locaData, j, writeOffset);
+            startOffset = endOffset;
+            continue;
+          }
+
+          var newLength = sanitizeGlyph(oldGlyfData, startOffset, endOffset,
+                                        newGlyfData, writeOffset, hintsValid);
+          writeOffset += newLength;
+          itemEncode(locaData, j, writeOffset);
+          startOffset = endOffset;
+        }
+
+        if (writeOffset === 0) {
+          // glyf table cannot be empty -- redoing the glyf and loca tables
+          // to have single glyph with one point
+          var simpleGlyph = new Uint8Array(
+            [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]);
+          for (var i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize)
+            itemEncode(locaData, j, simpleGlyph.length);
+          glyf.data = simpleGlyph;
+          return;
+        }
+
+        if (dupFirstEntry) {
+          var firstEntryLength = itemDecode(locaData, itemSize);
+          if (newGlyfData.length > firstEntryLength + writeOffset) {
+            glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset);
+          } else {
+            glyf.data = new Uint8Array(firstEntryLength + writeOffset);
+            glyf.data.set(newGlyfData.subarray(0, writeOffset));
+          }
+          glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset);
+          loca.data = new Uint8Array(locaData.length + itemSize);
+          loca.data.set(locaData);
+          itemEncode(loca.data, locaData.length,
+                     writeOffset + firstEntryLength);
+        } else {
+          glyf.data = newGlyfData.subarray(0, writeOffset);
+        }
+      }
+
+      function readPostScriptTable(post, properties, maxpNumGlyphs) {
+        var start = (font.start ? font.start : 0) + post.offset;
+        font.pos = start;
+
+        var length = post.length, end = start + length;
+        var version = int32(font.getBytes(4));
+        // skip rest to the tables
+        font.getBytes(28);
+
+        var glyphNames;
+        var valid = true;
+        switch (version) {
+          case 0x00010000:
+            glyphNames = MacStandardGlyphOrdering;
+            break;
+          case 0x00020000:
+            var numGlyphs = int16(font.getBytes(2));
+            if (numGlyphs != maxpNumGlyphs) {
+              valid = false;
+              break;
+            }
+            var glyphNameIndexes = [];
+            for (var i = 0; i < numGlyphs; ++i) {
+              var index = int16(font.getBytes(2));
+              if (index >= 32768) {
+                valid = false;
+                break;
+              }
+              glyphNameIndexes.push(index);
+            }
+            if (!valid) {
+              break;
+            }
+            var customNames = [];
+            while (font.pos < end) {
+              var stringLength = font.getByte();
+              var string = '';
+              for (var i = 0; i < stringLength; ++i) {
+                string += String.fromCharCode(font.getByte());
+              }
+              customNames.push(string);
+            }
+            glyphNames = [];
+            for (var i = 0; i < numGlyphs; ++i) {
+              var j = glyphNameIndexes[i];
+              if (j < 258) {
+                glyphNames.push(MacStandardGlyphOrdering[j]);
+                continue;
+              }
+              glyphNames.push(customNames[j - 258]);
+            }
+            break;
+          case 0x00030000:
+            break;
+          default:
+            warn('Unknown/unsupported post table version ' + version);
+            valid = false;
+            break;
+        }
+        properties.glyphNames = glyphNames;
+        return valid;
+      }
+
+      function readNameTable(nameTable) {
+        var start = (font.start ? font.start : 0) + nameTable.offset;
+        font.pos = start;
+
+        var names = [[], []];
+        var length = nameTable.length, end = start + length;
+        var format = int16(font.getBytes(2));
+        var FORMAT_0_HEADER_LENGTH = 6;
+        if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) {
+          // unsupported name table format or table "too" small
+          return names;
+        }
+        var numRecords = int16(font.getBytes(2));
+        var stringsStart = int16(font.getBytes(2));
+        var records = [];
+        var NAME_RECORD_LENGTH = 12;
+        for (var i = 0; i < numRecords &&
+                        font.pos + NAME_RECORD_LENGTH <= end; i++) {
+          var r = {
+            platform: int16(font.getBytes(2)),
+            encoding: int16(font.getBytes(2)),
+            language: int16(font.getBytes(2)),
+            name: int16(font.getBytes(2)),
+            length: int16(font.getBytes(2)),
+            offset: int16(font.getBytes(2))
+          };
+          // using only Macintosh and Windows platform/encoding names
+          if ((r.platform == 1 && r.encoding === 0 && r.language === 0) ||
+              (r.platform == 3 && r.encoding == 1 && r.language == 0x409)) {
+            records.push(r);
+          }
+        }
+        for (var i = 0, ii = records.length; i < ii; i++) {
+          var record = records[i];
+          var pos = start + stringsStart + record.offset;
+          if (pos + record.length > end) {
+            continue; // outside of name table, ignoring
+          }
+          font.pos = pos;
+          var nameIndex = record.name;
+          var encoding = record.encoding ? 1 : 0;
+          if (record.encoding) {
+            // unicode
+            var str = '';
+            for (var j = 0, jj = record.length; j < jj; j += 2) {
+              str += String.fromCharCode(int16(font.getBytes(2)));
+            }
+            names[1][nameIndex] = str;
+          } else {
+            names[0][nameIndex] = bytesToString(font.getBytes(record.length));
+          }
+        }
+        return names;
+      }
+
+      var TTOpsStackDeltas = [
+        0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5,
+        -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1,
+        1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1,
+        0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2,
+        0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1,
+        -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1,
+        -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1,
+        -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2];
+        // 0xC0-DF == -1 and 0xE0-FF == -2
+
+      function sanitizeTTProgram(table, ttContext) {
+        var data = table.data;
+        var i = 0, n, lastEndf = 0, lastDeff = 0;
+        var stack = [];
+        var callstack = [];
+        var functionsCalled = [];
+        var tooComplexToFollowFunctions =
+          ttContext.tooComplexToFollowFunctions;
+        var inFDEF = false, ifLevel = 0, inELSE = 0;
+        for (var ii = data.length; i < ii;) {
+          var op = data[i++];
+          // The TrueType instruction set docs can be found at
+          // https://developer.apple.com/fonts/TTRefMan/RM05/Chap5.html
+          if (op === 0x40) { // NPUSHB - pushes n bytes
+            n = data[i++];
+            if (inFDEF || inELSE) {
+              i += n;
+            } else {
+              for (var j = 0; j < n; j++) {
+                stack.push(data[i++]);
+              }
+            }
+          } else if (op === 0x41) { // NPUSHW - pushes n words
+            n = data[i++];
+            if (inFDEF || inELSE) {
+              i += n * 2;
+            } else {
+              for (var j = 0; j < n; j++) {
+                var b = data[i++];
+                stack.push((b << 8) | data[i++]);
+              }
+            }
+          } else if ((op & 0xF8) === 0xB0) { // PUSHB - pushes bytes
+            n = op - 0xB0 + 1;
+            if (inFDEF || inELSE) {
+              i += n;
+            } else {
+              for (var j = 0; j < n; j++) {
+                stack.push(data[i++]);
+              }
+            }
+          } else if ((op & 0xF8) === 0xB8) { // PUSHW - pushes words
+            n = op - 0xB8 + 1;
+            if (inFDEF || inELSE) {
+              i += n * 2;
+            } else {
+              for (var j = 0; j < n; j++) {
+                var b = data[i++];
+                stack.push((b << 8) | data[i++]);
+              }
+            }
+          } else if (op === 0x2B && !tooComplexToFollowFunctions) { // CALL
+            if (!inFDEF && !inELSE) {
+              // collecting inforamtion about which functions are used
+              var funcId = stack[stack.length - 1];
+              ttContext.functionsUsed[funcId] = true;
+              if (funcId in ttContext.functionsStackDeltas) {
+                stack.length += ttContext.functionsStackDeltas[funcId];
+              } else if (funcId in ttContext.functionsDefined &&
+                         functionsCalled.indexOf(funcId) < 0) {
+                callstack.push({data: data, i: i, stackTop: stack.length - 1});
+                functionsCalled.push(funcId);
+                var pc = ttContext.functionsDefined[funcId];
+                data = pc.data;
+                i = pc.i;
+              }
+            }
+          } else if (op === 0x2C && !tooComplexToFollowFunctions) { // FDEF
+            if (inFDEF || inELSE) {
+              warn('TT: nested FDEFs not allowed');
+              tooComplexToFollowFunctions = true;
+            }
+            inFDEF = true;
+            // collecting inforamtion about which functions are defined
+            lastDeff = i;
+            var funcId = stack.pop();
+            ttContext.functionsDefined[funcId] = {data: data, i: i};
+          } else if (op === 0x2D) { // ENDF - end of function
+            if (inFDEF) {
+              inFDEF = false;
+              lastEndf = i;
+            } else {
+              var pc = callstack.pop();
+              var funcId = functionsCalled.pop();
+              data = pc.data;
+              i = pc.i;
+              ttContext.functionsStackDeltas[funcId] =
+                stack.length - pc.stackTop;
+            }
+          } else if (op === 0x89) { // IDEF - instruction definition
+            if (inFDEF || inELSE) {
+              warn('TT: nested IDEFs not allowed');
+              tooComplexToFollowFunctions = true;
+            }
+            inFDEF = true;
+            // recording it as a function to track ENDF
+            lastDeff = i;
+          } else if (op === 0x58) { // IF
+            ++ifLevel;
+          } else if (op === 0x1B) { // ELSE
+            inELSE = ifLevel;
+          } else if (op === 0x59) { // EIF
+            if (inELSE === ifLevel) {
+              inELSE = 0;
+            }
+            --ifLevel;
+          } else if (op === 0x1C) { // JMPR
+            var offset = stack[stack.length - 1];
+            // only jumping forward to prevent infinite loop
+            if (offset > 0) { i += offset - 1; }
+          }
+          // Adjusting stack not extactly, but just enough to get function id
+          if (!inFDEF && !inELSE) {
+            var stackDelta = op <= 0x8E ? TTOpsStackDeltas[op] :
+              op >= 0xC0 && op <= 0xDF ? -1 : op >= 0xE0 ? -2 : 0;
+            if (op >= 0x71 && op <= 0x75) {
+              n = stack.pop();
+              if (n === n) {
+                stackDelta = -n * 2;
+              }
+            }
+            while (stackDelta < 0 && stack.length > 0) {
+              stack.pop();
+              stackDelta++;
+            }
+            while (stackDelta > 0) {
+              stack.push(NaN); // pushing any number into stack
+              stackDelta--;
+            }
+          }
+        }
+        ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions;
+        var content = [data];
+        if (i > data.length) {
+          content.push(new Uint8Array(i - data.length));
+        }
+        if (lastDeff > lastEndf) {
+          warn('TT: complementing a missing function tail');
+          // new function definition started, but not finished
+          // complete function by [CLEAR, ENDF]
+          content.push(new Uint8Array([0x22, 0x2D]));
+        }
+        foldTTTable(table, content);
+      }
+
+      function checkInvalidFunctions(ttContext, maxFunctionDefs) {
+        if (ttContext.tooComplexToFollowFunctions) {
+          return;
+        }
+        for (var j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) {
+          if (j > maxFunctionDefs) {
+            warn('TT: invalid function id: ' + j);
+            ttContext.hintsValid = false;
+            return;
+          }
+          if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) {
+            warn('TT: undefined function: ' + j);
+            ttContext.hintsValid = false;
+            return;
+          }
+        }
+      }
+
+      function foldTTTable(table, content) {
+        if (content.length > 1) {
+          // concatenating the content items
+          var newLength = 0;
+          for (var j = 0, jj = content.length; j < jj; j++) {
+            newLength += content[j].length;
+          }
+          newLength = (newLength + 3) & ~3;
+          var result = new Uint8Array(newLength);
+          var pos = 0;
+          for (var j = 0, jj = content.length; j < jj; j++) {
+            result.set(content[j], pos);
+            pos += content[j].length;
+          }
+          table.data = result;
+          table.length = newLength;
+        }
+      }
+
+      function sanitizeTTPrograms(fpgm, prep) {
+        var ttContext = {
+          functionsDefined: [],
+          functionsUsed: [],
+          functionsStackDeltas: [],
+          tooComplexToFollowFunctions: false,
+          hintsValid: true
+        };
+        if (fpgm) {
+          sanitizeTTProgram(fpgm, ttContext);
+        }
+        if (prep) {
+          sanitizeTTProgram(prep, ttContext);
+        }
+        if (fpgm) {
+          checkInvalidFunctions(ttContext, maxFunctionDefs);
+        }
+        return ttContext.hintsValid;
+      }
+
+      // The following steps modify the original font data, making copy
+      font = new Stream(new Uint8Array(font.getBytes()));
+
+      var VALID_TABLES = ['OS/2', 'cmap', 'head', 'hhea', 'hmtx', 'maxp',
+        'name', 'post', 'loca', 'glyf', 'fpgm', 'prep', 'cvt ', 'CFF '];
+
+      var header = readOpenTypeHeader(font);
+      var numTables = header.numTables;
+
+      var tables = { 'OS/2': null, cmap: null, head: null, hhea: null,
+                     hmtx: null, maxp: null, name: null, post: null};
+      for (var i = 0; i < numTables; i++) {
+        var table = readTableEntry(font);
+        if (VALID_TABLES.indexOf(table.tag) < 0) {
+          continue; // skipping table if it's not a required or optional table
+        }
+        tables[table.tag] = table;
+      }
+
+      var isTrueType = !tables['CFF '];
+      if (!isTrueType) {
+        // OpenType font
+        if (!tables.head || !tables.hhea || !tables.maxp || !tables.post) {
+          // no major tables: throwing everything at CFFFont
+          var cffFile = new Stream(tables['CFF '].data);
+          var cff = new CFFFont(cffFile, properties);
+
+          return this.convert(name, cff, properties);
+        }
+
+        delete tables.glyf;
+        delete tables.loca;
+        delete tables.fpgm;
+        delete tables.prep;
+        delete tables['cvt '];
+      } else {
+        if (!tables.glyf || !tables.loca) {
+          error('Required "glyf" or "loca" tables are not found');
+        }
+      }
+
+      if (!tables.maxp) {
+        error('Required "maxp" table is not found');
+      }
+
+      font.pos = (font.start || 0) + tables.maxp.offset;
+      var version = int32(font.getBytes(4));
+      var numGlyphs = int16(font.getBytes(2));
+      var maxFunctionDefs = 0;
+      if (version >= 0x00010000 && tables.maxp.length >= 22) {
+        font.pos += 14;
+        maxFunctionDefs = int16(font.getBytes(2));
+      }
+
+      var dupFirstEntry = false;
+      if (properties.type == 'CIDFontType2' && properties.toUnicode &&
+          properties.toUnicode[0] > '\u0000') {
+        // oracle's defect (see 3427), duplicating first entry
+        dupFirstEntry = true;
+        numGlyphs++;
+        tables.maxp.data[4] = numGlyphs >> 8;
+        tables.maxp.data[5] = numGlyphs & 255;
+      }
+
+      var hintsValid = sanitizeTTPrograms(tables.fpgm, tables.prep,
+                                          maxFunctionDefs);
+      if (!hintsValid) {
+        delete tables.fpgm;
+        delete tables.prep;
+      }
+
+      // Tables needs to be written by ascendant alphabetic order
+      var tablesNames = Object.keys(tables);
+      tablesNames.sort();
+
+      numTables = tablesNames.length;
+
+      // header and new offsets. Table entry information is appended to the
+      // end of file. The virtualOffset represents where to put the actual
+      // data of a particular table;
+      var ttf = {
+        file: '',
+        virtualOffset: numTables * (4 * 4)
+      };
+
+      // The new numbers of tables will be the last one plus the num
+      // of missing tables
+      createOpenTypeHeader(header.version, ttf, numTables);
+
+      // Ensure the hmtx table contains the advance width and
+      // sidebearings information for numGlyphs in the maxp table
+      sanitizeMetrics(font, tables.hhea, tables.hmtx, numGlyphs);
+
+      if (!tables.head) {
+        error('Required "head" table is not found');
+      }
+
+      sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0);
+
+      if (isTrueType) {
+        var isGlyphLocationsLong = int16([tables.head.data[50],
+                                          tables.head.data[51]]);
+
+        sanitizeGlyphLocations(tables.loca, tables.glyf, numGlyphs,
+                               isGlyphLocationsLong, hintsValid, dupFirstEntry);
+      }
+
+      if (!tables.hhea) {
+        error('Required "hhea" table is not found');
+      }
+
+      // Sanitizer reduces the glyph advanceWidth to the maxAdvanceWidth
+      // Sometimes it's 0. That needs to be fixed
+      if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) {
+        tables.hhea.data[10] = 0xFF;
+        tables.hhea.data[11] = 0xFF;
+      }
+
+      // The 'post' table has glyphs names.
+      if (tables.post) {
+        var valid = readPostScriptTable(tables.post, properties, numGlyphs);
+        if (!valid) {
+          tables.post = null;
+        }
+      }
+
+      var glyphs, ids;
+      if (properties.type == 'CIDFontType2') {
+        // Replace the old CMAP table with a shiny new one
+        // Type2 composite fonts map characters directly to glyphs so the cmap
+        // table must be replaced.
+        // canvas fillText will reencode some characters even if the font has a
+        // glyph at that position - e.g. newline is converted to a space and
+        // U+00AD (soft hyphen) is not drawn.
+        // So, offset all the glyphs by 0xFF to avoid these cases and use
+        // the encoding to map incoming characters to the new glyph positions
+        if (!tables.cmap) {
+          tables.cmap = {
+            tag: 'cmap',
+            data: null
+          };
+        }
+
+        var cidToGidMap = properties.cidToGidMap || [];
+        var gidToCidMap = [0];
+        if (cidToGidMap.length > 0) {
+          for (var j = cidToGidMap.length - 1; j >= 0; j--) {
+            var gid = cidToGidMap[j];
+            if (gid)
+              gidToCidMap[gid] = j;
+          }
+          // filling the gaps using CID above the CIDs currently used in font
+          var nextCid = cidToGidMap.length;
+          for (var i = 1; i < numGlyphs; i++) {
+            if (!gidToCidMap[i])
+              gidToCidMap[i] = nextCid++;
+          }
+        } else {
+          for (var i = 1; i < numGlyphs; i++) {
+            gidToCidMap[i] = i;
+          }
+          if (dupFirstEntry) {
+            gidToCidMap[numGlyphs - 1] = 0;
+          }
+        }
+
+        glyphs = [];
+        ids = [];
+
+        var usedUnicodes = [];
+        var unassignedUnicodeItems = [];
+        var toFontChar = this.cidToFontChar || this.toFontChar;
+        for (var i = 1; i < numGlyphs; i++) {
+          var cid = gidToCidMap[i];
+          var unicode = toFontChar[cid];
+          if (!unicode || typeof unicode !== 'number' ||
+              isSpecialUnicode(unicode) || unicode in usedUnicodes) {
+            unassignedUnicodeItems.push(i);
+            continue;
+          }
+          usedUnicodes[unicode] = true;
+          glyphs.push({ unicode: unicode, code: cid });
+          ids.push(i);
+        }
+
+        // unassigned codepoints will never be used for non-Identity CMap
+        // because the input will be Unicode
+        if (!this.cidToFontChar) {
+          // trying to fit as many unassigned symbols as we can
+          // in the range allocated for the user defined symbols
+          var unusedUnicode = CMAP_GLYPH_OFFSET;
+          for (var j = 0, jj = unassignedUnicodeItems.length; j < jj; j++) {
+            var i = unassignedUnicodeItems[j];
+            var cid = gidToCidMap[i];
+            while (unusedUnicode in usedUnicodes)
+              unusedUnicode++;
+            if (unusedUnicode >= CMAP_GLYPH_OFFSET + GLYPH_AREA_SIZE)
+              break;
+            var unicode = unusedUnicode++;
+            this.toFontChar[cid] = unicode;
+            usedUnicodes[unicode] = true;
+            glyphs.push({ unicode: unicode, code: cid });
+            ids.push(i);
+          }
+        }
+      } else {
+        this.useToFontChar = true;
+        // Most of the following logic in this code branch is based on the
+        // 9.6.6.4 of the PDF spec.
+
+        // TODO(mack):
+        // We are using this.hasEncoding to mean that the encoding is either
+        // MacRomanEncoding or WinAnsiEncoding (following spec in 9.6.6.4),
+        // but this.hasEncoding is currently true for any encodings on the
+        // Encodings object (e.g. MacExpertEncoding). So should consider using
+        // better check for this.
+        var cmapTable = readCmapTable(tables.cmap, font, this.hasEncoding,
+            this.isSymbolicFont);
+
+        // TODO(mack): If the (3, 0) cmap table used, then the font is
+        // symbolic. The range of charcodes in the cmap table should be
+        // one of the following:
+        //   -> 0x0000 - 0x00FF
+        //   -> 0xF000 - 0xF0FF
+        //   -> 0xF100 - 0xF1FF
+        //   -> 0xF200 - 0xF2FF
+        // If it is not, we should change not consider this a symbolic font
+        this.isSymbolicFont = cmapTable.isSymbolicFont;
+
+        var cmapPlatformId = cmapTable.platformId;
+        var cmapEncodingId = cmapTable.encodingId;
+        var cmapMappings = cmapTable.mappings;
+        var cmapMappingsLength = cmapMappings.length;
+        var glyphs = [];
+        var ids = [];
+        for (var i = 0; i < cmapMappingsLength; ++i) {
+          var cmapMapping = cmapMappings[i];
+          var charcode = cmapMapping.charcode;
+          var unicode = cmapCharcodeToUnicode(charcode, this.isSymbolicFont,
+              cmapPlatformId, cmapEncodingId);
+
+          if (!unicode) {
+            // TODO(mack): gotta check if skipping mappings where we cannot find
+            // a unicode is the correct behaviour
+            continue;
+          }
+          glyphs.push({
+            code: charcode,
+            unicode: unicode
+          });
+          ids.push(cmapMapping.glyphId);
+        }
+
+        var hasShortCmap = cmapTable.hasShortCmap;
+        var toFontChar = this.toFontChar;
+
+        if (hasShortCmap && ids.length == numGlyphs) {
+          // Fixes the short cmap tables -- some generators use incorrect
+          // glyph id.
+          for (var i = 0, ii = ids.length; i < ii; i++) {
+            ids[i] = i;
+          }
+        }
+
+        // Rewrite the whole toFontChar dictionary with a new one using the
+        // information from the mappings in the cmap table.
+        var newToFontChar = [];
+        if (this.isSymbolicFont) {
+          for (var i = 0, ii = glyphs.length; i < ii; i++) {
+            var glyph = glyphs[i];
+            // For (3, 0) cmap tables:
+            // The charcode key being stored in toFontChar is the lower byte
+            // of the two-byte charcodes of the cmap table since according to
+            // the spec: 'each byte from the string shall be prepended with the
+            // high byte of the range [of charcodes in the cmap table], to form
+            // a two-byte character, which shall be used to select the
+            // associated glyph description from the subtable'.
+            //
+            // For (1, 0) cmap tables:
+            // 'single bytes from the string shall be used to look up the
+            // associated glyph descriptions from the subtable'. This means
+            // charcodes in the cmap will be single bytes, so no-op since
+            // glyph.code & 0xFF === glyph.code
+            newToFontChar[glyph.code & 0xFF] = glyph.unicode;
+          }
+        } else {
+
+          var encoding = properties.baseEncoding;
+          var differences = properties.differences;
+
+          // TODO(mack): check if it is necessary to shift control characters
+          // for non-symbolic fonts so that browsers dont't render them using
+          // space characters
+
+          var glyphCodeMapping = cmapTable.glyphCodeMapping;
+          for (var charcode = 0; charcode < encoding.length; ++charcode) {
+            if (!encoding.hasOwnProperty(charcode)) {
+              continue;
+            }
+
+            // Since the cmap table that we will be writing out is a (3, 1)
+            // unicode table, in this section we will rewrites the charcodes
+            // in the pdf into unicodes
+
+            var glyphName = encoding[charcode];
+            // A nonsymbolic font should not have a Differences array, but
+            // if it does have one, we should still use it
+            if (charcode in differences) {
+              glyphName = differences[charcode];
+            }
+
+            // Finally, any undefined entries in the table shall be filled
+            // using StandardEncoding
+            if (!glyphName) {
+              glyphName = Encodings.StandardEncoding[charcode];
+            }
+
+            // TODO(mack): Handle the case that the glyph name cannot be
+            // mapped as specified, in which case the glyph name shall be
+            // looked up in the font program's 'post' table (if one is
+            // present) and the associated glyph id shall be used.
+            //
+            // For now, we're just using the '.notdef' glyph name in this
+            // case.
+            glyphName = glyphName || '.notdef';
+
+            var unicode = GlyphsUnicode[glyphName];
+            newToFontChar[charcode] = unicode;
+          }
+        }
+        this.toFontChar = toFontChar = newToFontChar;
+
+        createGlyphNameMap(glyphs, ids, properties);
+        this.glyphNameMap = properties.glyphNameMap;
+      }
+
+      if (glyphs.length === 0) {
+        // defines at least one glyph
+        glyphs.push({ unicode: 0xF000, code: 0xF000, glyph: '.notdef' });
+        ids.push(0);
+      }
+
+      // Converting glyphs and ids into font's cmap table
+      tables.cmap.data = createCmapTable(glyphs, ids);
+      var unicodeIsEnabled = [];
+      for (var i = 0, ii = glyphs.length; i < ii; i++) {
+        unicodeIsEnabled[glyphs[i].unicode] = true;
+      }
+      this.unicodeIsEnabled = unicodeIsEnabled;
+
+      if (!tables['OS/2'] || !validateOS2Table(tables['OS/2'])) {
+        // extract some more font properties from the OpenType head and
+        // hhea tables; yMin and descent value are always negative
+        var override = {
+          unitsPerEm: int16([tables.head.data[18], tables.head.data[19]]),
+          yMax: int16([tables.head.data[42], tables.head.data[43]]),
+          yMin: int16([tables.head.data[38], tables.head.data[39]]) - 0x10000,
+          ascent: int16([tables.hhea.data[4], tables.hhea.data[5]]),
+          descent: int16([tables.hhea.data[6], tables.hhea.data[7]]) - 0x10000
+        };
+
+        tables['OS/2'] = {
+          tag: 'OS/2',
+          data: stringToArray(createOS2Table(properties, glyphs, override))
+        };
+      }
+
+      // Rewrite the 'post' table if needed
+      if (!tables.post) {
+        tables.post = {
+          tag: 'post',
+          data: stringToArray(createPostTable(properties))
+        };
+      }
+
+      if (!isTrueType) {
+        try {
+          // Trying to repair CFF file
+          var cffFile = new Stream(tables['CFF '].data);
+          var parser = new CFFParser(cffFile, properties);
+          var cff = parser.parse();
+          var compiler = new CFFCompiler(cff);
+          tables['CFF '].data = compiler.compile();
+        } catch (e) {
+          warn('Failed to compile font ' + properties.loadedName);
+        }
+      }
+
+      // Re-creating 'name' table
+      if (!tables.name) {
+        tables.name = {
+          tag: 'name',
+          data: stringToArray(createNameTable(this.name))
+        };
+      } else {
+        // ... using existing 'name' table as prototype
+        var namePrototype = readNameTable(tables.name);
+        tables.name.data = stringToArray(createNameTable(name, namePrototype));
+      }
+
+      // rewrite the tables but tweak offsets
+      for (var i = 0; i < numTables; i++) {
+        var table = tables[tablesNames[i]];
+        var data = [];
+
+        var tableData = table.data;
+        for (var j = 0, jj = tableData.length; j < jj; j++)
+          data.push(tableData[j]);
+        createTableEntry(ttf, table.tag, data);
+      }
+
+      // Add the table datas
+      for (var i = 0; i < numTables; i++) {
+        var table = tables[tablesNames[i]];
+        var tableData = table.data;
+        ttf.file += arrayToString(tableData);
+
+        // 4-byte aligned data
+        while (ttf.file.length & 3)
+          ttf.file += String.fromCharCode(0);
+      }
+
+      return stringToArray(ttf.file);
+    },
+
+    convert: function Font_convert(fontName, font, properties) {
+      function isFixedPitch(glyphs) {
+        for (var i = 0, ii = glyphs.length - 1; i < ii; i++) {
+          if (glyphs[i] != glyphs[i + 1])
+            return false;
+        }
+        return true;
+      }
+
+      // The offsets object holds at the same time a representation of where
+      // to write the table entry information about a table and another offset
+      // representing the offset where to draw the actual data of a particular
+      // table
+      var REQ_TABLES_CNT = 9;
+
+      var otf = {
+        file: '',
+        virtualOffset: 9 * (4 * 4)
+      };
+
+      createOpenTypeHeader('\x4F\x54\x54\x4F', otf, 9);
+
+      var charstrings = font.charstrings;
+      properties.fixedPitch = isFixedPitch(charstrings);
+
+      var glyphNameMap = {};
+      for (var i = 0; i < charstrings.length; ++i) {
+        var charstring = charstrings[i];
+        glyphNameMap[charstring.glyph] = charstring.unicode;
+      }
+      this.glyphNameMap = glyphNameMap;
+
+      var seacs = font.seacs;
+      if (SEAC_ANALYSIS_ENABLED && seacs) {
+        var seacMap = [];
+        var matrix = properties.fontMatrix || FONT_IDENTITY_MATRIX;
+        for (var i = 0; i < charstrings.length; ++i) {
+          var charstring = charstrings[i];
+          var seac = seacs[charstring.gid];
+          if (!seac) {
+            continue;
+          }
+          var baseGlyphName = Encodings.StandardEncoding[seac[2]];
+          var baseUnicode = glyphNameMap[baseGlyphName];
+          var accentGlyphName = Encodings.StandardEncoding[seac[3]];
+          var accentUnicode = glyphNameMap[accentGlyphName];
+          if (!baseUnicode || !accentUnicode) {
+            continue;
+          }
+          var accentOffset = {
+            x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4],
+            y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5]
+          };
+          seacMap[charstring.unicode] = {
+            baseUnicode: baseUnicode,
+            accentUnicode: accentUnicode,
+            accentOffset: accentOffset
+          };
+        }
+        properties.seacMap = seacMap;
+      }
+
+      if (properties.overridableEncoding && (properties.subtype == 'Type1C' ||
+          properties.subtype == 'CIDFontType0C')) {
+        var encoding = [];
+        for (var i = 0; i < charstrings.length; ++i) {
+          var charstring = charstrings[i];
+          encoding[charstring.code] = charstring.glyph;
+        }
+        properties.baseEncoding = encoding;
+      }
+      if (properties.subtype == 'CIDFontType0C') {
+        var toFontChar = [];
+        for (var i = 0; i < charstrings.length; ++i) {
+          var charstring = charstrings[i];
+          toFontChar[charstring.code] = charstring.unicode;
+        }
+        this.toFontChar = toFontChar;
+      }
+      var unitsPerEm = 1 / (properties.fontMatrix || FONT_IDENTITY_MATRIX)[0];
+
+      var fields = {
+        // PostScript Font Program
+        'CFF ': font.data,
+
+        // OS/2 and Windows Specific metrics
+        'OS/2': stringToArray(createOS2Table(properties, charstrings)),
+
+        // Character to glyphs mapping
+        'cmap': createCmapTable(charstrings.slice(),
+                                ('glyphIds' in font) ? font.glyphIds : null),
+
+        // Font header
+        'head': (function fontFieldsHead() {
+          return stringToArray(
+              '\x00\x01\x00\x00' + // Version number
+              '\x00\x00\x10\x00' + // fontRevision
+              '\x00\x00\x00\x00' + // checksumAdjustement
+              '\x5F\x0F\x3C\xF5' + // magicNumber
+              '\x00\x00' + // Flags
+              safeString16(unitsPerEm) + // unitsPerEM
+              '\x00\x00\x00\x00\x9e\x0b\x7e\x27' + // creation date
+              '\x00\x00\x00\x00\x9e\x0b\x7e\x27' + // modifification date
+              '\x00\x00' + // xMin
+              safeString16(properties.descent) + // yMin
+              '\x0F\xFF' + // xMax
+              safeString16(properties.ascent) + // yMax
+              string16(properties.italicAngle ? 2 : 0) + // macStyle
+              '\x00\x11' + // lowestRecPPEM
+              '\x00\x00' + // fontDirectionHint
+              '\x00\x00' + // indexToLocFormat
+              '\x00\x00');  // glyphDataFormat
+        })(),
+
+        // Horizontal header
+        'hhea': (function fontFieldsHhea() {
+          return stringToArray(
+              '\x00\x01\x00\x00' + // Version number
+              safeString16(properties.ascent) + // Typographic Ascent
+              safeString16(properties.descent) + // Typographic Descent
+              '\x00\x00' + // Line Gap
+              '\xFF\xFF' + // advanceWidthMax
+              '\x00\x00' + // minLeftSidebearing
+              '\x00\x00' + // minRightSidebearing
+              '\x00\x00' + // xMaxExtent
+              safeString16(properties.capHeight) + // caretSlopeRise
+              safeString16(Math.tan(properties.italicAngle) *
+                       properties.xHeight) + // caretSlopeRun
+              '\x00\x00' + // caretOffset
+              '\x00\x00' + // -reserved-
+              '\x00\x00' + // -reserved-
+              '\x00\x00' + // -reserved-
+              '\x00\x00' + // -reserved-
+              '\x00\x00' + // metricDataFormat
+              string16(charstrings.length + 1)); // Number of HMetrics
+        })(),
+
+        // Horizontal metrics
+        'hmtx': (function fontFieldsHmtx() {
+          var hmtx = '\x00\x00\x00\x00'; // Fake .notdef
+          for (var i = 0, ii = charstrings.length; i < ii; i++) {
+            var charstring = charstrings[i];
+            var width = 'width' in charstring ? charstring.width : 0;
+            hmtx += string16(width) + string16(0);
+          }
+          return stringToArray(hmtx);
+        })(),
+
+        // Maximum profile
+        'maxp': (function fontFieldsMaxp() {
+          return stringToArray(
+              '\x00\x00\x50\x00' + // Version number
+             string16(charstrings.length + 1)); // Num of glyphs
+        })(),
+
+        // Naming tables
+        'name': stringToArray(createNameTable(fontName)),
+
+        // PostScript informations
+        'post': stringToArray(createPostTable(properties))
+      };
+
+      for (var field in fields)
+        createTableEntry(otf, field, fields[field]);
+
+      for (var field in fields) {
+        var table = fields[field];
+        otf.file += arrayToString(table);
+      }
+
+      return stringToArray(otf.file);
+    },
+
+    buildToFontChar: function Font_buildToFontChar(toUnicode) {
+      var result = [];
+      var unusedUnicode = CMAP_GLYPH_OFFSET;
+      for (var i = 0, ii = toUnicode.length; i < ii; i++) {
+        var unicode = toUnicode[i];
+        var fontCharCode = typeof unicode === 'object' ? unusedUnicode++ :
+          unicode;
+        if (typeof unicode !== 'undefined') {
+          if (isString(fontCharCode) && fontCharCode.length === 1) {
+            fontCharCode = fontCharCode.charCodeAt(0);
+          }
+          result[i] = fontCharCode;
+        }
+      }
+      return result;
+    },
+
+    rebuildToUnicode: function Font_rebuildToUnicode(properties) {
+      var firstChar = properties.firstChar, lastChar = properties.lastChar;
+      var map = [];
+      var toUnicode = this.toUnicode || this.cidToUnicode;
+      if (toUnicode) {
+        var isIdentityMap = toUnicode.length === 0;
+        for (var i = firstChar, ii = lastChar; i <= ii; i++) {
+          // TODO missing map the character according font's CMap
+          map[i] = isIdentityMap ? String.fromCharCode(i) : toUnicode[i];
+        }
+      } else {
+        for (var i = firstChar, ii = lastChar; i <= ii; i++) {
+          var glyph = properties.differences[i];
+          if (!glyph)
+            glyph = properties.baseEncoding[i];
+          if (!!glyph && (glyph in GlyphsUnicode))
+            map[i] = String.fromCharCode(GlyphsUnicode[glyph]);
+        }
+      }
+      this.toUnicode = map;
+    },
+
+    loadCidToUnicode: function Font_loadCidToUnicode(properties) {
+      if (!properties.cidSystemInfo)
+        return;
+
+      var cidToUnicodeMap = [], unicodeToCIDMap = [];
+      this.cidToUnicode = cidToUnicodeMap;
+      this.unicodeToCID = unicodeToCIDMap;
+
+      var cidEncoding = properties.cidEncoding;
+      if (properties.toUnicode) {
+        if (cidEncoding && cidEncoding.indexOf('Identity-') !== 0) {
+          TODO('Need to create a reverse mapping from \'ToUnicode\' CMap');
+        }
+        return; // 'ToUnicode' CMap will be used
+      }
+
+      var cidSystemInfo = properties.cidSystemInfo;
+      var cidToUnicode;
+      if (cidSystemInfo) {
+        cidToUnicode = CIDToUnicodeMaps[
+          cidSystemInfo.registry + '-' + cidSystemInfo.ordering];
+      }
+
+      if (!cidToUnicode)
+        return; // identity encoding
+
+      var overwrite = HalfwidthCMaps[cidEncoding];
+      var cid = 1, i, j, k, ii;
+      for (i = 0, ii = cidToUnicode.length; i < ii; ++i) {
+        var unicode = cidToUnicode[i];
+        if (isArray(unicode)) {
+          var length = unicode.length;
+          for (j = 0; j < length; j++) {
+            cidToUnicodeMap[cid] = k = unicode[j];
+            if (!unicodeToCIDMap[k] || overwrite) {
+              unicodeToCIDMap[k] = cid;
+            }
+          }
+          cid++;
+        } else if (typeof unicode === 'object') {
+          var fillLength = unicode.f;
+          if (fillLength) {
+            k = unicode.c;
+            for (j = 0; j < fillLength; ++j) {
+              cidToUnicodeMap[cid] = k;
+              if (!unicodeToCIDMap[k] || overwrite) {
+                unicodeToCIDMap[k] = cid;
+              }
+              cid++;
+              k++;
+            }
+          } else
+            cid += unicode.s;
+        } else if (unicode) {
+          cidToUnicodeMap[cid] = unicode;
+          if (!unicodeToCIDMap[unicode] || overwrite) {
+            unicodeToCIDMap[unicode] = cid;
+          }
+          cid++;
+        } else
+          cid++;
+      }
+
+      if (!cidEncoding) {
+        return;
+      }
+      if (cidEncoding.indexOf('Identity-') !== 0) {
+        // input is already Unicode for non-Identity CMap encodings.
+        this.cidToUnicode = [];
+        // For CIDFontType2, however, we need cid-to-Unicode conversion
+        // to rebuild cmap.
+        if (properties.type == 'CIDFontType2') {
+          this.cidToFontChar = cidToUnicodeMap;
+        }
+      } else {
+        // We don't have to do reverse conversions if the string is
+        // already CID.
+        this.unicodeToCID = [];
+      }
+    },
+
+    get spaceWidth() {
+      if ('_shadowWidth' in this) {
+        return this._shadowWidth;
+      }
+
+      // trying to estimate space character width
+      var possibleSpaceReplacements = ['space', 'minus', 'one', 'i'];
+      var width;
+      for (var i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) {
+        var glyphName = possibleSpaceReplacements[i];
+        // if possible, getting width by glyph name
+        if (glyphName in this.widths) {
+          width = this.widths[glyphName];
+          break;
+        }
+        var glyphUnicode = GlyphsUnicode[glyphName];
+        // finding the charcode via unicodeToCID map
+        var charcode = 0;
+        if (this.composite)
+          charcode = this.unicodeToCID[glyphUnicode];
+        // ... via toUnicode map
+        if (!charcode && 'toUnicode' in this)
+          charcode = this.toUnicode.indexOf(glyphUnicode);
+        // setting it to unicode if negative or undefined
+        if (charcode <= 0)
+          charcode = glyphUnicode;
+        // trying to get width via charcode
+        width = this.widths[charcode];
+        if (width)
+          break; // the non-zero width found
+      }
+      width = width || this.defaultWidth;
+      // Do not shadow the property here. See discussion:
+      // https://github.com/mozilla/pdf.js/pull/2127#discussion_r1662280
+      this._shadowWidth = width;
+      return width;
+    },
+
+    charToGlyph: function Font_charToGlyph(charcode) {
+      var fontCharCode, width, operatorList, disabled;
+
+      var width = this.widths[charcode];
+      var vmetric = this.vmetrics && this.vmetrics[charcode];
+
+      switch (this.type) {
+        case 'CIDFontType0':
+          var cid = this.unicodeToCID[charcode] || charcode;
+          if (this.unicodeToCID.length > 0) {
+            width = this.widths[cid];
+            vmetric = this.vmetrics && this.vmetrics[cid];
+          }
+          if (this.noUnicodeAdaptation) {
+            fontCharCode = this.toFontChar[charcode] || charcode;
+            break;
+          }
+          // CIDFontType0 is not encoded in Unicode.
+          fontCharCode = this.toFontChar[cid] || cid;
+          break;
+        case 'CIDFontType2':
+          if (this.unicodeToCID.length > 0) {
+            var cid = this.unicodeToCID[charcode] || charcode;
+            width = this.widths[cid];
+            vmetric = this.vmetrics && this.vmetrics[cid];
+            fontCharCode = charcode;
+            break;
+          }
+          fontCharCode = this.toFontChar[charcode] || charcode;
+          break;
+        case 'MMType1': // XXX at the moment only "standard" fonts are supported
+        case 'Type1':
+          var glyphName = this.differences[charcode] || this.encoding[charcode];
+          if (!isNum(width))
+            width = this.widths[glyphName];
+          if (this.noUnicodeAdaptation) {
+            fontCharCode = mapPrivateUseChars(GlyphsUnicode[glyphName] ||
+              charcode);
+            break;
+          }
+          fontCharCode = this.glyphNameMap[glyphName] ||
+            GlyphsUnicode[glyphName] || charcode;
+          break;
+        case 'Type3':
+          var glyphName = this.differences[charcode] || this.encoding[charcode];
+          operatorList = this.charProcOperatorList[glyphName];
+          fontCharCode = charcode;
+          break;
+        case 'TrueType':
+          if (this.useToFontChar) {
+            fontCharCode = this.toFontChar[charcode] || charcode;
+            break;
+          }
+          var glyphName = this.differences[charcode] || this.encoding[charcode];
+          if (!glyphName)
+            glyphName = Encodings.StandardEncoding[charcode];
+          if (!isNum(width))
+            width = this.widths[glyphName];
+          if (this.noUnicodeAdaptation) {
+            fontCharCode = GlyphsUnicode[glyphName] || charcode;
+            break;
+          }
+          if (!this.hasEncoding || this.isSymbolicFont) {
+            fontCharCode = this.useToFontChar ? this.toFontChar[charcode] :
+              charcode;
+            break;
+          }
+
+          // MacRoman encoding address by re-encoding the cmap table
+
+          fontCharCode = glyphName in this.glyphNameMap ?
+            this.glyphNameMap[glyphName] : GlyphsUnicode[glyphName];
+          break;
+        default:
+          warn('Unsupported font type: ' + this.type);
+          break;
+      }
+
+      var unicodeChars = !('toUnicode' in this) ? charcode :
+        this.toUnicode[charcode] || charcode;
+      if (typeof unicodeChars === 'number') {
+        unicodeChars = String.fromCharCode(unicodeChars);
+      }
+
+      width = isNum(width) ? width : this.defaultWidth;
+      disabled = this.unicodeIsEnabled ?
+        !this.unicodeIsEnabled[fontCharCode] : false;
+
+      var accent = null;
+      if (this.seacMap && this.seacMap[fontCharCode]) {
+        var seac = this.seacMap[fontCharCode];
+        fontCharCode = seac.baseUnicode;
+        accent = {
+          fontChar: String.fromCharCode(seac.accentUnicode),
+          offset: seac.accentOffset
+        };
+      }
+
+      return {
+        fontChar: String.fromCharCode(fontCharCode),
+        unicode: unicodeChars,
+        accent: accent,
+        width: width,
+        vmetric: vmetric,
+        disabled: disabled,
+        operatorList: operatorList
+      };
+    },
+
+    charsToGlyphs: function Font_charsToGlyphs(chars) {
+      var charsCache = this.charsCache;
+      var glyphs;
+
+      // if we translated this string before, just grab it from the cache
+      if (charsCache) {
+        glyphs = charsCache[chars];
+        if (glyphs)
+          return glyphs;
+      }
+
+      // lazily create the translation cache
+      if (!charsCache)
+        charsCache = this.charsCache = Object.create(null);
+
+      glyphs = [];
+      var charsCacheKey = chars;
+
+      var converter;
+      var cidEncoding = this.cidEncoding;
+      if (cidEncoding) {
+        converter = CMapConverterList[cidEncoding];
+        if (converter) {
+          chars = converter(chars);
+        } else if (cidEncoding.indexOf('Uni') !== 0 &&
+                   cidEncoding.indexOf('Identity-') !== 0) {
+          warn('Unsupported CMap: ' + cidEncoding);
+        }
+      }
+      if (!converter && this.cmap) {
+        var i = 0;
+        // composite fonts have multi-byte strings convert the string from
+        // single-byte to multi-byte
+        while (i < chars.length) {
+          var c = this.cmap.readCharCode(chars, i);
+          var charcode = c[0];
+          var length = c[1];
+          i += length;
+          var glyph = this.charToGlyph(charcode);
+          glyphs.push(glyph);
+          // placing null after each word break charcode (ASCII SPACE)
+          if (charcode == 0x20)
+            glyphs.push(null);
+        }
+      }
+      else {
+        for (var i = 0, ii = chars.length; i < ii; ++i) {
+          var charcode = chars.charCodeAt(i);
+          var glyph = this.charToGlyph(charcode);
+          glyphs.push(glyph);
+          if (charcode == 0x20)
+            glyphs.push(null);
+        }
+      }
+
+      // Enter the translated string into the cache
+      return (charsCache[charsCacheKey] = glyphs);
+    }
+  };
+
+  return Font;
+})();
+
+var ErrorFont = (function ErrorFontClosure() {
+  function ErrorFont(error) {
+    this.error = error;
+  }
+
+  ErrorFont.prototype = {
+    charsToGlyphs: function ErrorFont_charsToGlyphs() {
+      return [];
+    },
+    exportData: function ErrorFont_exportData() {
+      return {error: this.error};
+    }
+  };
+
+  return ErrorFont;
+})();
+
+/*
+ * CharStrings are encoded following the the CharString Encoding sequence
+ * describe in Chapter 6 of the "Adobe Type1 Font Format" specification.
+ * The value in a byte indicates a command, a number, or subsequent bytes
+ * that are to be interpreted in a special way.
+ *
+ * CharString Number Encoding:
+ *  A CharString byte containing the values from 32 through 255 inclusive
+ *  indicate an integer. These values are decoded in four ranges.
+ *
+ * 1. A CharString byte containing a value, v, between 32 and 246 inclusive,
+ * indicate the integer v - 139. Thus, the integer values from -107 through
+ * 107 inclusive may be encoded in single byte.
+ *
+ * 2. A CharString byte containing a value, v, between 247 and 250 inclusive,
+ * indicates an integer involving the next byte, w, according to the formula:
+ * [(v - 247) x 256] + w + 108
+ *
+ * 3. A CharString byte containing a value, v, between 251 and 254 inclusive,
+ * indicates an integer involving the next byte, w, according to the formula:
+ * -[(v - 251) * 256] - w - 108
+ *
+ * 4. A CharString containing the value 255 indicates that the next 4 bytes
+ * are a two complement signed integer. The first of these bytes contains the
+ * highest order bits, the second byte contains the next higher order bits
+ * and the fourth byte contain the lowest order bits.
+ *
+ *
+ * CharString Command Encoding:
+ *  CharStrings commands are encoded in 1 or 2 bytes.
+ *
+ *  Single byte commands are encoded in 1 byte that contains a value between
+ *  0 and 31 inclusive.
+ *  If a command byte contains the value 12, then the value in the next byte
+ *  indicates a command. This "escape" mechanism allows many extra commands
+ * to be encoded and this encoding technique helps to minimize the length of
+ * the charStrings.
+ */
+var Type1CharString = (function Type1CharStringClosure() {
+  var COMMAND_MAP = {
+    'hstem': [1],
+    'vstem': [3],
+    'vmoveto': [4],
+    'rlineto': [5],
+    'hlineto': [6],
+    'vlineto': [7],
+    'rrcurveto': [8],
+    'callsubr': [10],
+    'flex': [12, 35],
+    'drop' : [12, 18],
+    'endchar': [14],
+    'rmoveto': [21],
+    'hmoveto': [22],
+    'vhcurveto': [30],
+    'hvcurveto': [31]
+  };
+
+  function Type1CharString() {
+    this.width = 0;
+    this.lsb = 0;
+    this.flexing = false;
+    this.output = [];
+    this.stack = [];
+  }
+
+  Type1CharString.prototype = {
+    convert: function Type1CharString_convert(encoded, subrs) {
+      var count = encoded.length;
+      var error = false;
+      for (var i = 0; i < count; i++) {
+        var value = encoded[i];
+        if (value < 32) {
+          if (value === 12) {
+            value = (value << 8) + encoded[++i];
+          }
+          switch (value) {
+            case 1: // hstem
+              if (!HINTING_ENABLED) {
+                this.stack = [];
+                break;
+              }
+              error = this.executeCommand(2, COMMAND_MAP.hstem);
+              break;
+            case 3: // vstem
+              if (!HINTING_ENABLED) {
+                this.stack = [];
+                break;
+              }
+              error = this.executeCommand(2, COMMAND_MAP.vstem);
+              break;
+            case 4: // vmoveto
+              if (this.flexing) {
+                if (this.stack.length < 1) {
+                  error = true;
+                  break;
+                }
+                // Add the dx for flex and but also swap the values so they are
+                // the right order.
+                var dy = this.stack.pop();
+                this.stack.push(0, dy);
+                break;
+              }
+              error = this.executeCommand(1, COMMAND_MAP.vmoveto);
+              break;
+            case 5: // rlineto
+              error = this.executeCommand(2, COMMAND_MAP.rlineto);
+              break;
+            case 6: // hlineto
+              error = this.executeCommand(1, COMMAND_MAP.hlineto);
+              break;
+            case 7: // vlineto
+              error = this.executeCommand(1, COMMAND_MAP.vlineto);
+              break;
+            case 8: // rrcurveto
+              error = this.executeCommand(6, COMMAND_MAP.rrcurveto);
+              break;
+            case 9: // closepath
+              // closepath is a Type1 command that does not take argument and is
+              // useless in Type2 and it can simply be ignored.
+              this.stack = [];
+              break;
+            case 10: // callsubr
+              if (this.stack.length < 1) {
+                error = true;
+                break;
+              }
+              var subrNumber = this.stack.pop();
+              error = this.convert(subrs[subrNumber], subrs);
+              break;
+            case 11: // return
+              return error;
+            case 13: // hsbw
+              if (this.stack.length < 2) {
+                error = true;
+                break;
+              }
+              // To convert to type2 we have to move the width value to the
+              // first part of the charstring and then use hmoveto with lsb.
+              var wx = this.stack.pop();
+              var sbx = this.stack.pop();
+              this.lsb = sbx;
+              this.width = wx;
+              this.stack.push(sbx);
+              error = this.executeCommand(1, COMMAND_MAP.hmoveto);
+              break;
+            case 14: // endchar
+              this.output.push(COMMAND_MAP.endchar[0]);
+              break;
+            case 21: // rmoveto
+              if (this.flexing) {
+                break;
+              }
+              error = this.executeCommand(2, COMMAND_MAP.rmoveto);
+              break;
+            case 22: // hmoveto
+              if (this.flexing) {
+                // Add the dy for flex.
+                this.stack.push(0);
+                break;
+              }
+              error = this.executeCommand(1, COMMAND_MAP.hmoveto);
+              break;
+            case 30: // vhcurveto
+              error = this.executeCommand(4, COMMAND_MAP.vhcurveto);
+              break;
+            case 31: // hvcurveto
+              error = this.executeCommand(4, COMMAND_MAP.hvcurveto);
+              break;
+            case (12 << 8) + 0: // dotsection
+              // dotsection is a Type1 command to specify some hinting feature
+              // for dots that do not take a parameter and it can safely be
+              // ignored for Type2.
+              this.stack = [];
+              break;
+            case (12 << 8) + 1: // vstem3
+              if (!HINTING_ENABLED) {
+                this.stack = [];
+                break;
+              }
+              // [vh]stem3 are Type1 only and Type2 supports [vh]stem with
+              // multiple parameters, so instead of returning [vh]stem3 take a
+              // shortcut and return [vhstem] instead.
+              error = this.executeCommand(2, COMMAND_MAP.vstem);
+              break;
+            case (12 << 8) + 2: // hstem3
+              if (!HINTING_ENABLED) {
+                 this.stack = [];
+                break;
+              }
+              // See vstem3.
+              error = this.executeCommand(2, COMMAND_MAP.hstem);
+              break;
+            case (12 << 8) + 6: // seac
+              // seac is like type 2's special endchar but it doesn't use the
+              // first argument asb, so remove it.
+              if (SEAC_ANALYSIS_ENABLED) {
+                this.seac = this.stack.splice(-4, 4);
+                error = this.executeCommand(0, COMMAND_MAP.endchar);
+              } else {
+                error = this.executeCommand(4, COMMAND_MAP.endchar);
+              }
+              break;
+            case (12 << 8) + 7: // sbw
+              if (this.stack.length < 4) {
+                error = true;
+                break;
+              }
+              // To convert to type2 we have to move the width value to the
+              // first part of the charstring and then use rmoveto with
+              // (dx, dy). The height argument will not be used for vmtx and
+              // vhea tables reconstruction -- ignoring it.
+              var wy = this.stack.pop();
+              var wx = this.stack.pop();
+              var sby = this.stack.pop();
+              var sbx = this.stack.pop();
+              this.lsb = sbx;
+              this.width = wx;
+              this.stack.push(sbx, sby);
+              error = this.executeCommand(2, COMMAND_MAP.rmoveto);
+              break;
+            case (12 << 8) + 12: // div
+              if (this.stack.length < 2) {
+                error = true;
+                break;
+              }
+              var num2 = this.stack.pop();
+              var num1 = this.stack.pop();
+              this.stack.push(num1 / num2);
+              break;
+            case (12 << 8) + 16: // callothersubr
+              if (this.stack.length < 2) {
+                error = true;
+                break;
+              }
+              var subrNumber = this.stack.pop();
+              var numArgs = this.stack.pop();
+              if (subrNumber === 0 && numArgs === 3) {
+                var flexArgs = this.stack.splice(this.stack.length - 17, 17);
+                this.stack.push(
+                  flexArgs[2] + flexArgs[0], // bcp1x + rpx
+                  flexArgs[3] + flexArgs[1], // bcp1y + rpy
+                  flexArgs[4], // bcp2x
+                  flexArgs[5], // bcp2y
+                  flexArgs[6], // p2x
+                  flexArgs[7], // p2y
+                  flexArgs[8], // bcp3x
+                  flexArgs[9], // bcp3y
+                  flexArgs[10], // bcp4x
+                  flexArgs[11], // bcp4y
+                  flexArgs[12], // p3x
+                  flexArgs[13], // p3y
+                  flexArgs[14] // flexDepth
+                  // 15 = finalx unused by flex
+                  // 16 = finaly unused by flex
+                );
+                error = this.executeCommand(13, COMMAND_MAP.flex, true);
+                this.flexing = false;
+                this.stack.push(flexArgs[15], flexArgs[16]);
+              } else if (subrNumber === 1 && numArgs === 0) {
+                this.flexing = true;
+              }
+              break;
+            case (12 << 8) + 17: // pop
+              // Ignore this since it is only used with othersubr.
+              break;
+            case (12 << 8) + 33: // setcurrentpoint
+              // Ignore for now.
+              this.stack = [];
+              break;
+            default:
+              warn('Unknown type 1 charstring command of "' + value + '"');
+              break;
+          }
+          if (error) {
+            break;
+          }
+          continue;
+        } else if (value <= 246) {
+          value = value - 139;
+        } else if (value <= 250) {
+          value = ((value - 247) * 256) + encoded[++i] + 108;
+        } else if (value <= 254) {
+          value = -((value - 251) * 256) - encoded[++i] - 108;
+        } else {
+          value = (encoded[++i] & 0xff) << 24 | (encoded[++i] & 0xff) << 16 |
+                  (encoded[++i] & 0xff) << 8 | (encoded[++i] & 0xff) << 0;
+        }
+        this.stack.push(value);
+      }
+      return error;
+    },
+
+    executeCommand: function(howManyArgs, command, keepStack) {
+      var stackLength = this.stack.length;
+      if (howManyArgs > stackLength) {
+        return true;
+      }
+      var start = stackLength - howManyArgs;
+      for (var i = start; i < stackLength; i++) {
+        var value = this.stack[i];
+        if (value === (value | 0)) { // int
+          this.output.push(28, (value >> 8) & 0xff, value & 0xff);
+        } else { // fixed point
+          value = (65536 * value) | 0;
+          this.output.push(255,
+                           (value >> 24) & 0xFF,
+                           (value >> 16) & 0xFF,
+                           (value >> 8) & 0xFF,
+                           value & 0xFF);
+        }
+      }
+      this.output.push.apply(this.output, command);
+      if (keepStack) {
+        this.stack.splice(start, howManyArgs);
+      } else {
+        this.stack = [];
+      }
+      return false;
+    }
+  };
+
+  return Type1CharString;
+})();
+
+/*
+ * Type1Parser encapsulate the needed code for parsing a Type1 font
+ * program. Some of its logic depends on the Type2 charstrings
+ * structure.
+ * Note: this doesn't really parse the font since that would require evaluation
+ * of PostScript, but it is possible in most cases to extract what we need
+ * without a full parse.
+ */
+var Type1Parser = (function Type1ParserClosure() {
+  /*
+   * Decrypt a Sequence of Ciphertext Bytes to Produce the Original Sequence
+   * of Plaintext Bytes. The function took a key as a parameter which can be
+   * for decrypting the eexec block of for decoding charStrings.
+   */
+  var EEXEC_ENCRYPT_KEY = 55665;
+  var CHAR_STRS_ENCRYPT_KEY = 4330;
+
+  function decrypt(stream, key, discardNumber) {
+    var r = key, c1 = 52845, c2 = 22719;
+    var decryptedString = [];
+
+    var value = '';
+    var count = stream.length;
+    for (var i = 0; i < count; i++) {
+      value = stream[i];
+      decryptedString[i] = value ^ (r >> 8);
+      r = ((value + r) * c1 + c2) & ((1 << 16) - 1);
+    }
+    return decryptedString.slice(discardNumber);
+  }
+
+  function isSpecial(c) {
+    return c === 0x2F || // '/'
+           c === 0x5B || c === 0x5D || // '[', ']'
+           c === 0x7B || c === 0x7D || // '{', '}'
+           c === 0x28 || c === 0x29; // '(', ')'
+  }
+
+  function Type1Parser(stream, encrypted) {
+    if (encrypted) {
+      stream = new Stream(decrypt(stream.getBytes(), EEXEC_ENCRYPT_KEY, 4));
+    }
+    this.stream = stream;
+    this.nextChar();
+  }
+
+  Type1Parser.prototype = {
+    readNumberArray: function Type1Parser_readNumberArray() {
+      this.getToken(); // read '[' or '{' (arrays can start with either)
+      var array = [];
+      while (true) {
+        var token = this.getToken();
+        if (token === null || token === ']' || token === '}') {
+          break;
+        }
+        array.push(parseFloat(token || 0));
+      }
+      return array;
+    },
+
+    readNumber: function Type1Parser_readNumber() {
+      var token = this.getToken();
+      return parseFloat(token || 0);
+    },
+
+    readInt: function Type1Parser_readInt() {
+      // Use '| 0' to prevent setting a double into length such as the double
+      // does not flow into the loop variable.
+      var token = this.getToken();
+      return parseInt(token || 0, 10) | 0;
+    },
+
+    readBoolean: function Type1Parser_readBoolean() {
+      var token = this.getToken();
+
+      // Use 1 and 0 since that's what type2 charstrings use.
+      return token === 'true' ? 1 : 0;
+    },
+
+    nextChar : function Type1_nextChar() {
+      return (this.currentChar = this.stream.getByte());
+    },
+
+    getToken: function Type1Parser_getToken() {
+      // Eat whitespace and comments.
+      var comment = false;
+      var ch = this.currentChar;
+      while (true) {
+        if (ch === -1) {
+          return null;
+        }
+
+        if (comment) {
+          if (ch === 0x0A || ch === 0x0D) {
+            comment = false;
+          }
+        } else if (ch === 0x25) { // '%'
+          comment = true;
+        } else if (!Lexer.isSpace(ch)) {
+          break;
+        }
+        ch = this.nextChar();
+      }
+      if (isSpecial(ch)) {
+        this.nextChar();
+        return String.fromCharCode(ch);
+      }
+      var token = '';
+      do {
+        token += String.fromCharCode(ch);
+        ch = this.nextChar();
+      } while (ch >= 0 && !Lexer.isSpace(ch) && !isSpecial(ch));
+      return token;
+    },
+
+    /*
+     * Returns an object containing a Subrs array and a CharStrings
+     * array extracted from and eexec encrypted block of data
+     */
+    extractFontProgram: function Type1Parser_extractFontProgram() {
+      var stream = this.stream;
+
+      var subrs = [], charstrings = [];
+      var program = {
+        subrs: [],
+        charstrings: [],
+        properties: {
+          'privateData': {
+            'lenIV': 4
+          }
+        }
+      };
+      var token;
+      while ((token = this.getToken()) !== null) {
+        if (token !== '/') {
+          continue;
+        }
+        token = this.getToken();
+        switch (token) {
+          case 'CharStrings':
+            // The number immediately following CharStrings must be greater or
+            // equal to the number of CharStrings.
+            this.getToken();
+            this.getToken(); // read in 'dict'
+            this.getToken(); // read in 'dup'
+            this.getToken(); // read in 'begin'
+            while(true) {
+              token = this.getToken();
+              if (token === null || token === 'end') {
+                break;
+              }
+
+              if (token !== '/') {
+                continue;
+              }
+              var glyph = this.getToken();
+              var length = this.readInt();
+              this.getToken(); // read in 'RD' or '-|'
+              var data = stream.makeSubStream(stream.pos, length);
+              var lenIV = program.properties.privateData['lenIV'];
+              var encoded = decrypt(data.getBytes(), CHAR_STRS_ENCRYPT_KEY,
+                                    lenIV);
+              // Skip past the required space and binary data.
+              stream.skip(length);
+              this.nextChar();
+              token = this.getToken(); // read in 'ND' or '|-'
+              if (token === 'noaccess') {
+                this.getToken(); // read in 'def'
+              }
+              charstrings.push({
+                glyph: glyph,
+                encoded: encoded
+              });
+            }
+            break;
+          case 'Subrs':
+            var num = this.readInt();
+            this.getToken(); // read in 'array'
+            while ((token = this.getToken()) === 'dup') {
+              var index = this.readInt();
+              var length = this.readInt();
+              this.getToken(); // read in 'RD' or '-|'
+              var data = stream.makeSubStream(stream.pos, length);
+              var lenIV = program.properties.privateData['lenIV'];
+              var encoded = decrypt(data.getBytes(), CHAR_STRS_ENCRYPT_KEY,
+                                    lenIV);
+              // Skip past the required space and binary data.
+              stream.skip(length);
+              this.nextChar();
+              token = this.getToken(); // read in 'NP' or '|'
+              if (token === 'noaccess') {
+                this.getToken(); // read in 'put'
+              }
+              subrs[index] = encoded;
+            }
+            break;
+          case 'BlueValues':
+          case 'OtherBlues':
+          case 'FamilyBlues':
+          case 'FamilyOtherBlues':
+            var blueArray = this.readNumberArray();
+            // *Blue* values may contain invalid data: disables reading of
+            // those values when hinting is disabled.
+            if (blueArray.length > 0 && (blueArray.length % 2) === 0 &&
+                HINTING_ENABLED) {
+              program.properties.privateData[token] = blueArray;
+            }
+            break;
+          case 'StemSnapH':
+          case 'StemSnapV':
+            program.properties.privateData[token] = this.readNumberArray();
+            break;
+          case 'StdHW':
+          case 'StdVW':
+            program.properties.privateData[token] =
+              this.readNumberArray()[0];
+            break;
+          case 'BlueShift':
+          case 'lenIV':
+          case 'BlueFuzz':
+          case 'BlueScale':
+          case 'LanguageGroup':
+          case 'ExpansionFactor':
+            program.properties.privateData[token] = this.readNumber();
+            break;
+          case 'ForceBold':
+            program.properties.privateData[token] = this.readBoolean();
+            break;
+        }
+      }
+
+      for (var i = 0; i < charstrings.length; i++) {
+        var glyph = charstrings[i].glyph;
+        var encoded = charstrings[i].encoded;
+        var charString = new Type1CharString();
+        var error = charString.convert(encoded, subrs);
+        var output = charString.output;
+        if (error) {
+          // It seems when FreeType encounters an error while evaluating a glyph
+          // that it completely ignores the glyph so we'll mimic that behaviour
+          // here and put an endchar to make the validator happy.
+          output = [14];
+        }
+        program.charstrings.push({
+          glyph: glyph,
+          data: output,
+          seac: charString.seac,
+          lsb: charString.lsb,
+          width: charString.width
+        });
+      }
+
+      return program;
+    },
+
+    extractFontHeader: function Type1Parser_extractFontHeader(properties) {
+      var token;
+      while ((token = this.getToken()) !== null) {
+        if (token !== '/') {
+          continue;
+        }
+        token = this.getToken();
+        switch (token) {
+          case 'FontMatrix':
+            var matrix = this.readNumberArray();
+            properties.fontMatrix = matrix;
+            break;
+          case 'Encoding':
+            var encodingArg = this.getToken();
+            var encoding;
+            if (!/^\d+$/.test(encodingArg)) {
+              // encoding name is specified
+              encoding = Encodings[encodingArg];
+            } else {
+              encoding = [];
+              var size = parseInt(encodingArg, 10) | 0;
+              this.getToken(); // read in 'array'
+
+              for (var j = 0; j < size; j++) {
+                var token = this.getToken();
+                if (token === 'dup') {
+                  var index = this.readInt();
+                  this.getToken(); // read in '/'
+                  var glyph = this.getToken();
+                  encoding[index] = glyph;
+                  this.getToken(); // read the in 'put'
+                }
+              }
+            }
+            if (properties.overridableEncoding && encoding) {
+              properties.baseEncoding = encoding;
+              break;
+            }
+            break;
+        }
+      }
+    }
+  };
+
+  return Type1Parser;
+})();
+
+/**
+ * The CFF class takes a Type1 file and wrap it into a
+ * 'Compact Font Format' which itself embed Type2 charstrings.
+ */
+var CFFStandardStrings = [
+  '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',
+  'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus',
+  'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four',
+  'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less',
+  'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
+  'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
+  'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum',
+  'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
+  'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
+  'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent',
+  'sterling', 'fraction', 'yen', 'florin', 'section', 'currency',
+  'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft',
+  'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl',
+  'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase',
+  'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', 'questiondown',
+  'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent',
+  'dieresis', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'emdash',
+  'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae',
+  'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'onesuperior',
+  'logicalnot', 'mu', 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn',
+  'onequarter', 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters',
+  'twosuperior', 'registered', 'minus', 'eth', 'multiply', 'threesuperior',
+  'copyright', 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring',
+  'Atilde', 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave',
+  'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute',
+  'Ocircumflex', 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute',
+  'Ucircumflex', 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron',
+  'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde',
+  'ccedilla', 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute',
+  'icircumflex', 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex',
+  'odieresis', 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex',
+  'udieresis', 'ugrave', 'yacute', 'ydieresis', 'zcaron', 'exclamsmall',
+  'Hungarumlautsmall', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall',
+  'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', '266 ff',
+  'onedotenleader', 'zerooldstyle', 'oneoldstyle', 'twooldstyle',
+  'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle',
+  'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'commasuperior',
+  'threequartersemdash', 'periodsuperior', 'questionsmall', 'asuperior',
+  'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior',
+  'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',
+  'tsuperior', 'ff', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior',
+  'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall',
+  'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall',
+  'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall',
+  'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall',
+  'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah',
+  'Tildesmall', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall',
+  'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall',
+  'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior',
+  'Ogoneksmall', 'Ringsmall', 'Cedillasmall', 'questiondownsmall', 'oneeighth',
+  'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds',
+  'zerosuperior', 'foursuperior', 'fivesuperior', 'sixsuperior',
+  'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior',
+  'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior',
+  'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior',
+  'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior',
+  'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall',
+  'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall',
+  'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall',
+  'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall',
+  'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall',
+  'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall',
+  'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall',
+  'Thornsmall', 'Ydieresissmall', '001.000', '001.001', '001.002', '001.003',
+  'Black', 'Bold', 'Book', 'Light', 'Medium', 'Regular', 'Roman', 'Semibold'
+];
+
+// Type1Font is also a CIDFontType0.
+var Type1Font = function Type1Font(name, file, properties) {
+  // Get the data block containing glyphs and subrs informations
+  var headerBlock = new Stream(file.getBytes(properties.length1));
+  var headerBlockParser = new Type1Parser(headerBlock);
+  headerBlockParser.extractFontHeader(properties);
+
+  // Decrypt the data blocks and retrieve it's content
+  var eexecBlock = new Stream(file.getBytes(properties.length2));
+  var eexecBlockParser = new Type1Parser(eexecBlock, true);
+  var data = eexecBlockParser.extractFontProgram();
+  for (var info in data.properties)
+    properties[info] = data.properties[info];
+
+  var charstrings = this.getOrderedCharStrings(data.charstrings, properties);
+  var type2Charstrings = this.getType2Charstrings(charstrings);
+  var subrs = this.getType2Subrs(data.subrs);
+
+  this.charstrings = charstrings;
+  this.data = this.wrap(name, type2Charstrings, this.charstrings,
+                        subrs, properties);
+  this.seacs = this.getSeacs(data.charstrings);
+};
+
+Type1Font.prototype = {
+  getOrderedCharStrings: function Type1Font_getOrderedCharStrings(glyphs,
+                                                            properties) {
+    var charstrings = [];
+    var usedUnicodes = [];
+    var i, length, glyphName;
+    var unusedUnicode = CMAP_GLYPH_OFFSET;
+    for (i = 0, length = glyphs.length; i < length; i++) {
+      var item = glyphs[i];
+      var glyphName = item.glyph;
+      var unicode = glyphName in GlyphsUnicode ?
+        GlyphsUnicode[glyphName] : unusedUnicode++;
+      while (usedUnicodes[unicode]) {
+        unicode = unusedUnicode++;
+      }
+      usedUnicodes[unicode] = true;
+      charstrings.push({
+        glyph: glyphName,
+        unicode: unicode,
+        gid: i,
+        charstring: item.data,
+        width: item.width,
+        lsb: item.lsb
+      });
+    }
+
+    charstrings.sort(function charstrings_sort(a, b) {
+      return a.unicode - b.unicode;
+    });
+    return charstrings;
+  },
+
+  getSeacs: function Type1Font_getSeacs(charstrings) {
+    var i, ii;
+    var seacMap = [];
+    for (i = 0, ii = charstrings.length; i < ii; i++) {
+      var charstring = charstrings[i];
+      if (charstring.seac) {
+        seacMap[i] = charstring.seac;
+      }
+    }
+    return seacMap;
+  },
+
+  getType2Charstrings: function Type1Font_getType2Charstrings(
+                                  type1Charstrings) {
+    var type2Charstrings = [];
+    for (var i = 0, ii = type1Charstrings.length; i < ii; i++) {
+      type2Charstrings.push(type1Charstrings[i].charstring);
+    }
+    return type2Charstrings;
+  },
+
+  getType2Subrs: function Type1Font_getType2Subrs(type1Subrs) {
+    var bias = 0;
+    var count = type1Subrs.length;
+    if (count < 1133)
+      bias = 107;
+    else if (count < 33769)
+      bias = 1131;
+    else
+      bias = 32768;
+
+    // Add a bunch of empty subrs to deal with the Type2 bias
+    var type2Subrs = [];
+    for (var i = 0; i < bias; i++)
+      type2Subrs.push([0x0B]);
+
+    for (var i = 0; i < count; i++) {
+      type2Subrs.push(type1Subrs[i]);
+    }
+
+    return type2Subrs;
+  },
+
+  wrap: function Type1Font_wrap(name, glyphs, charstrings, subrs, properties) {
+    var cff = new CFF();
+    cff.header = new CFFHeader(1, 0, 4, 4);
+
+    cff.names = [name];
+
+    var topDict = new CFFTopDict();
+    // CFF strings IDs 0...390 are predefined names, so refering
+    // to entries in our own String INDEX starts at SID 391.
+    topDict.setByName('version', 391);
+    topDict.setByName('Notice', 392);
+    topDict.setByName('FullName', 393);
+    topDict.setByName('FamilyName', 394);
+    topDict.setByName('Weight', 395);
+    topDict.setByName('Encoding', null); // placeholder
+    topDict.setByName('FontMatrix', properties.fontMatrix);
+    topDict.setByName('FontBBox', properties.bbox);
+    topDict.setByName('charset', null); // placeholder
+    topDict.setByName('CharStrings', null); // placeholder
+    topDict.setByName('Private', null); // placeholder
+    cff.topDict = topDict;
+
+    var strings = new CFFStrings();
+    strings.add('Version 0.11'); // Version
+    strings.add('See original notice'); // Notice
+    strings.add(name); // FullName
+    strings.add(name); // FamilyName
+    strings.add('Medium'); // Weight
+    cff.strings = strings;
+
+    cff.globalSubrIndex = new CFFIndex();
+
+    var count = glyphs.length;
+    var charsetArray = [0];
+    for (var i = 0; i < count; i++) {
+      var index = CFFStandardStrings.indexOf(charstrings[i].glyph);
+      // Some characters like asterikmath && circlecopyrt are
+      // missing from the original strings, for the moment let's
+      // map them to .notdef and see later if it cause any
+      // problems
+      if (index == -1)
+        index = 0;
+
+      charsetArray.push((index >> 8) & 0xff, index & 0xff);
+    }
+    cff.charset = new CFFCharset(false, 0, [], charsetArray);
+
+    var charStringsIndex = new CFFIndex();
+    charStringsIndex.add([0x8B, 0x0E]); // .notdef
+    for (var i = 0; i < count; i++) {
+      charStringsIndex.add(glyphs[i]);
+    }
+    cff.charStrings = charStringsIndex;
+
+    var privateDict = new CFFPrivateDict();
+    privateDict.setByName('Subrs', null); // placeholder
+    var fields = [
+      'BlueValues',
+      'OtherBlues',
+      'FamilyBlues',
+      'FamilyOtherBlues',
+      'StemSnapH',
+      'StemSnapV',
+      'BlueShift',
+      'BlueFuzz',
+      'BlueScale',
+      'LanguageGroup',
+      'ExpansionFactor',
+      'ForceBold',
+      'StdHW',
+      'StdVW'
+    ];
+    for (var i = 0, ii = fields.length; i < ii; i++) {
+      var field = fields[i];
+      if (!properties.privateData.hasOwnProperty(field))
+        continue;
+      var value = properties.privateData[field];
+      if (isArray(value)) {
+        // All of the private dictionary array data in CFF must be stored as
+        // "delta-encoded" numbers.
+        for (var j = value.length - 1; j > 0; j--) {
+          value[j] -= value[j - 1]; // ... difference from previous value
+        }
+      }
+      privateDict.setByName(field, value);
+    }
+    cff.topDict.privateDict = privateDict;
+
+    var subrIndex = new CFFIndex();
+    for (var i = 0, ii = subrs.length; i < ii; i++) {
+      subrIndex.add(subrs[i]);
+    }
+    privateDict.subrsIndex = subrIndex;
+
+    var compiler = new CFFCompiler(cff);
+    return compiler.compile();
+  }
+};
+
+var CFFFont = (function CFFFontClosure() {
+  function CFFFont(file, properties) {
+    this.properties = properties;
+
+    var parser = new CFFParser(file, properties);
+    this.cff = parser.parse();
+    var compiler = new CFFCompiler(this.cff);
+    this.readExtra();
+    try {
+      this.data = compiler.compile();
+    } catch (e) {
+      warn('Failed to compile font ' + properties.loadedName);
+      // There may have just been an issue with the compiler, set the data
+      // anyway and hope the font loaded.
+      this.data = file;
+    }
+  }
+
+  CFFFont.prototype = {
+    readExtra: function CFFFont_readExtra() {
+      // charstrings contains info about glyphs (one element per glyph
+      // containing mappings for {unicode, width})
+      var charstrings = this.getCharStrings();
+
+      // create the mapping between charstring and glyph id
+      var glyphIds = [];
+      for (var i = 0, ii = charstrings.length; i < ii; i++)
+        glyphIds.push(charstrings[i].gid);
+
+      this.charstrings = charstrings;
+      this.glyphIds = glyphIds;
+      this.seacs = this.cff.seacs;
+    },
+    getCharStrings: function CFFFont_getCharStrings() {
+      var cff = this.cff;
+      var charsets = cff.charset.charset;
+      var encoding = cff.encoding ? cff.encoding.encoding : null;
+      var charstrings = [];
+      var unicodeUsed = [];
+      var unassignedUnicodeItems = [];
+      var inverseEncoding = [];
+      var gidStart = 0;
+      // According to section 9.7.4.2 CIDFontType0C glyph selection should be
+      // handled differently.
+      if (this.properties.subtype === 'CIDFontType0C') {
+        if (this.cff.isCIDFont) {
+          // If the font is actually a CID font then we should use the charset
+          // to map CIDs to GIDs.
+          inverseEncoding = charsets;
+        } else {
+          // If it is NOT actually a CID font then CIDs should be mapped
+          // directly to GIDs.
+          inverseEncoding = [];
+          for (var i = 0, ii = cff.charStrings.count; i < ii; i++) {
+            inverseEncoding.push(i);
+          }
+          // Use the identity map for charsets as well.
+          charsets = inverseEncoding;
+        }
+      } else {
+        for (var charcode in encoding) {
+          var gid = encoding[charcode];
+          if (gid in inverseEncoding) {
+            // Glyphs can be multiply-encoded if there was an encoding
+            // supplement. Convert to an array and append the charcode.
+            var previousCharcode = inverseEncoding[gid];
+            if (!isArray(previousCharcode)) {
+              inverseEncoding[gid] = [previousCharcode];
+            }
+            inverseEncoding[gid].push(charcode | 0);
+          } else {
+            inverseEncoding[gid] = charcode | 0;
+          }
+        }
+        if (charsets[0] === '.notdef') {
+          gidStart = 1;
+        }
+      }
+
+      for (var i = gidStart, ii = charsets.length; i < ii; i++) {
+        var glyph = charsets[i];
+
+        var codes = inverseEncoding[i];
+        if (!isArray(codes)) {
+          codes = [codes];
+        }
+
+        for (var j = 0; j < codes.length; j++) {
+          var code = codes[j];
+
+          if (!code || isSpecialUnicode(code)) {
+            unassignedUnicodeItems.push(i, code);
+            continue;
+          }
+          charstrings.push({
+            unicode: code,
+            code: code,
+            gid: i,
+            glyph: glyph
+          });
+          unicodeUsed[code] = true;
+        }
+      }
+
+      var nextUnusedUnicode = CMAP_GLYPH_OFFSET;
+      for (var j = 0, jj = unassignedUnicodeItems.length; j < jj; j += 2) {
+        var i = unassignedUnicodeItems[j];
+        // giving unicode value anyway
+        while (nextUnusedUnicode in unicodeUsed)
+          nextUnusedUnicode++;
+        var unicode = nextUnusedUnicode++;
+        charstrings.push({
+          unicode: unicode,
+          code: unassignedUnicodeItems[j + 1] || 0,
+          gid: i,
+          glyph: charsets[i]
+        });
+      }
+
+      // sort the array by the unicode value (again)
+      charstrings.sort(function getCharStringsSort(a, b) {
+        return a.unicode - b.unicode;
+      });
+      return charstrings;
+    }
+  };
+
+  return CFFFont;
+})();
+
+var CFFParser = (function CFFParserClosure() {
+  var CharstringValidationData = [
+    null,
+    { id: 'hstem', min: 2, resetStack: true, stem: true },
+    null,
+    { id: 'vstem', min: 2, resetStack: true, stem: true },
+    { id: 'vmoveto', min: 1, resetStack: true },
+    { id: 'rlineto', min: 2, resetStack: true },
+    { id: 'hlineto', min: 1, resetStack: true },
+    { id: 'vlineto', min: 1, resetStack: true },
+    { id: 'rrcurveto', min: 6, resetStack: true },
+    null,
+    { id: 'callsubr', min: 1, undefStack: true },
+    { id: 'return', min: 0, undefStack: true },
+    null, // 12
+    null,
+    null, // endchar
+    null,
+    null,
+    null,
+    { id: 'hstemhm', min: 2, resetStack: true, stem: true },
+    null, // hintmask
+    null, // cntrmask
+    { id: 'rmoveto', min: 2, resetStack: true },
+    { id: 'hmoveto', min: 1, resetStack: true },
+    { id: 'vstemhm', min: 2, resetStack: true, stem: true },
+    { id: 'rcurveline', min: 8, resetStack: true },
+    { id: 'rlinecurve', min: 8, resetStack: true },
+    { id: 'vvcurveto', min: 4, resetStack: true },
+    { id: 'hhcurveto', min: 4, resetStack: true },
+    null, // shortint
+    { id: 'callgsubr', min: 1, undefStack: true },
+    { id: 'vhcurveto', min: 4, resetStack: true },
+    { id: 'hvcurveto', min: 4, resetStack: true }
+  ];
+  var CharstringValidationData12 = [
+    null,
+    null,
+    null,
+    { id: 'and', min: 2, stackDelta: -1 },
+    { id: 'or', min: 2, stackDelta: -1 },
+    { id: 'not', min: 1, stackDelta: 0 },
+    null,
+    null,
+    null,
+    { id: 'abs', min: 1, stackDelta: 0 },
+    { id: 'add', min: 2, stackDelta: -1,
+      stackFn: function stack_div(stack, index) {
+        stack[index - 2] = stack[index - 2] + stack[index - 1];
+      }
+    },
+    { id: 'sub', min: 2, stackDelta: -1,
+      stackFn: function stack_div(stack, index) {
+        stack[index - 2] = stack[index - 2] - stack[index - 1];
+      }
+    },
+    { id: 'div', min: 2, stackDelta: -1,
+      stackFn: function stack_div(stack, index) {
+        stack[index - 2] = stack[index - 2] / stack[index - 1];
+      }
+    },
+    null,
+    { id: 'neg', min: 1, stackDelta: 0,
+      stackFn: function stack_div(stack, index) {
+        stack[index - 1] = -stack[index - 1];
+      }
+    },
+    { id: 'eq', min: 2, stackDelta: -1 },
+    null,
+    null,
+    { id: 'drop', min: 1, stackDelta: -1 },
+    null,
+    { id: 'put', min: 2, stackDelta: -2 },
+    { id: 'get', min: 1, stackDelta: 0 },
+    { id: 'ifelse', min: 4, stackDelta: -3 },
+    { id: 'random', min: 0, stackDelta: 1 },
+    { id: 'mul', min: 2, stackDelta: -1,
+      stackFn: function stack_div(stack, index) {
+        stack[index - 2] = stack[index - 2] * stack[index - 1];
+      }
+    },
+    null,
+    { id: 'sqrt', min: 1, stackDelta: 0 },
+    { id: 'dup', min: 1, stackDelta: 1 },
+    { id: 'exch', min: 2, stackDelta: 0 },
+    { id: 'index', min: 2, stackDelta: 0 },
+    { id: 'roll', min: 3, stackDelta: -2 },
+    null,
+    null,
+    null,
+    { id: 'hflex', min: 7, resetStack: true },
+    { id: 'flex', min: 13, resetStack: true },
+    { id: 'hflex1', min: 9, resetStack: true },
+    { id: 'flex1', min: 11, resetStack: true }
+  ];
+
+  function CFFParser(file, properties) {
+    this.bytes = file.getBytes();
+    this.properties = properties;
+  }
+  CFFParser.prototype = {
+    parse: function CFFParser_parse() {
+      var properties = this.properties;
+      var cff = new CFF();
+      this.cff = cff;
+
+      // The first five sections must be in order, all the others are reached
+      // via offsets contained in one of the below.
+      var header = this.parseHeader();
+      var nameIndex = this.parseIndex(header.endPos);
+      var topDictIndex = this.parseIndex(nameIndex.endPos);
+      var stringIndex = this.parseIndex(topDictIndex.endPos);
+      var globalSubrIndex = this.parseIndex(stringIndex.endPos);
+
+      var topDictParsed = this.parseDict(topDictIndex.obj.get(0));
+      var topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings);
+
+      cff.header = header.obj;
+      cff.names = this.parseNameIndex(nameIndex.obj);
+      cff.strings = this.parseStringIndex(stringIndex.obj);
+      cff.topDict = topDict;
+      cff.globalSubrIndex = globalSubrIndex.obj;
+
+      this.parsePrivateDict(cff.topDict);
+
+      cff.isCIDFont = topDict.hasName('ROS');
+
+      var charStringOffset = topDict.getByName('CharStrings');
+      var charStringsAndSeacs = this.parseCharStrings(charStringOffset);
+      cff.charStrings = charStringsAndSeacs.charStrings;
+      cff.seacs = charStringsAndSeacs.seacs;
+
+      var fontMatrix = topDict.getByName('FontMatrix');
+      if (fontMatrix) {
+        properties.fontMatrix = fontMatrix;
+      }
+
+      var fontBBox = topDict.getByName('FontBBox');
+      if (fontBBox) {
+        // adjusting ascent/descent
+        properties.ascent = fontBBox[3];
+        properties.descent = fontBBox[1];
+        properties.ascentScaled = true;
+      }
+
+      var charset, encoding;
+      if (cff.isCIDFont) {
+        var fdArrayIndex = this.parseIndex(topDict.getByName('FDArray')).obj;
+        for (var i = 0, ii = fdArrayIndex.count; i < ii; ++i) {
+          var dictRaw = fdArrayIndex.get(i);
+          var fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw),
+                                         cff.strings);
+          this.parsePrivateDict(fontDict);
+          cff.fdArray.push(fontDict);
+        }
+        // cid fonts don't have an encoding
+        encoding = null;
+        charset = this.parseCharsets(topDict.getByName('charset'),
+                                     cff.charStrings.count, cff.strings, true);
+        cff.fdSelect = this.parseFDSelect(topDict.getByName('FDSelect'),
+                                             cff.charStrings.count);
+      } else {
+        charset = this.parseCharsets(topDict.getByName('charset'),
+                                     cff.charStrings.count, cff.strings, false);
+        encoding = this.parseEncoding(topDict.getByName('Encoding'),
+                                      properties,
+                                      cff.strings, charset.charset);
+      }
+      cff.charset = charset;
+      cff.encoding = encoding;
+
+      return cff;
+    },
+    parseHeader: function CFFParser_parseHeader() {
+      var bytes = this.bytes;
+      var offset = 0;
+
+      while (bytes[offset] != 1)
+        ++offset;
+
+      if (offset !== 0) {
+        info('cff data is shifted');
+        bytes = bytes.subarray(offset);
+        this.bytes = bytes;
+      }
+      var major = bytes[0];
+      var minor = bytes[1];
+      var hdrSize = bytes[2];
+      var offSize = bytes[3];
+      var header = new CFFHeader(major, minor, hdrSize, offSize);
+      return {obj: header, endPos: hdrSize};
+    },
+    parseDict: function CFFParser_parseDict(dict) {
+      var pos = 0;
+
+      function parseOperand() {
+        var value = dict[pos++];
+        if (value === 30) {
+          return parseFloatOperand(pos);
+        } else if (value === 28) {
+          value = dict[pos++];
+          value = ((value << 24) | (dict[pos++] << 16)) >> 16;
+          return value;
+        } else if (value === 29) {
+          value = dict[pos++];
+          value = (value << 8) | dict[pos++];
+          value = (value << 8) | dict[pos++];
+          value = (value << 8) | dict[pos++];
+          return value;
+        } else if (value >= 32 && value <= 246) {
+          return value - 139;
+        } else if (value >= 247 && value <= 250) {
+          return ((value - 247) * 256) + dict[pos++] + 108;
+        } else if (value >= 251 && value <= 254) {
+          return -((value - 251) * 256) - dict[pos++] - 108;
+        } else {
+          error('255 is not a valid DICT command');
+        }
+        return -1;
+      }
+
+      function parseFloatOperand() {
+        var str = '';
+        var eof = 15;
+        var lookup = ['0', '1', '2', '3', '4', '5', '6', '7', '8',
+            '9', '.', 'E', 'E-', null, '-'];
+        var length = dict.length;
+        while (pos < length) {
+          var b = dict[pos++];
+          var b1 = b >> 4;
+          var b2 = b & 15;
+
+          if (b1 == eof)
+            break;
+          str += lookup[b1];
+
+          if (b2 == eof)
+            break;
+          str += lookup[b2];
+        }
+        return parseFloat(str);
+      }
+
+      var operands = [];
+      var entries = [];
+
+      var pos = 0;
+      var end = dict.length;
+      while (pos < end) {
+        var b = dict[pos];
+        if (b <= 21) {
+          if (b === 12)
+            b = (b << 8) | dict[++pos];
+          entries.push([b, operands]);
+          operands = [];
+          ++pos;
+        } else {
+          operands.push(parseOperand());
+        }
+      }
+      return entries;
+    },
+    parseIndex: function CFFParser_parseIndex(pos) {
+      var cffIndex = new CFFIndex();
+      var bytes = this.bytes;
+      var count = (bytes[pos++] << 8) | bytes[pos++];
+      var offsets = [];
+      var start = pos;
+      var end = pos;
+
+      if (count !== 0) {
+        var offsetSize = bytes[pos++];
+        // add 1 for offset to determine size of last object
+        var startPos = pos + ((count + 1) * offsetSize) - 1;
+
+        for (var i = 0, ii = count + 1; i < ii; ++i) {
+          var offset = 0;
+          for (var j = 0; j < offsetSize; ++j) {
+            offset <<= 8;
+            offset += bytes[pos++];
+          }
+          offsets.push(startPos + offset);
+        }
+        end = offsets[count];
+      }
+      for (var i = 0, ii = offsets.length - 1; i < ii; ++i) {
+        var offsetStart = offsets[i];
+        var offsetEnd = offsets[i + 1];
+        cffIndex.add(bytes.subarray(offsetStart, offsetEnd));
+      }
+      return {obj: cffIndex, endPos: end};
+    },
+    parseNameIndex: function CFFParser_parseNameIndex(index) {
+      var names = [];
+      for (var i = 0, ii = index.count; i < ii; ++i) {
+        var name = index.get(i);
+        // OTS doesn't allow names to be over 127 characters.
+        var length = Math.min(name.length, 127);
+        var data = [];
+        // OTS also only permits certain characters in the name.
+        for (var j = 0; j < length; ++j) {
+          var c = name[j];
+          if (j === 0 && c === 0) {
+            data[j] = c;
+            continue;
+          }
+          if ((c < 33 || c > 126) || c === 91 /* [ */ || c === 93 /* ] */ ||
+              c === 40 /* ( */ || c === 41 /* ) */ || c === 123 /* { */ ||
+              c === 125 /* } */ || c === 60 /* < */ || c === 62 /* > */ ||
+              c === 47 /* / */ || c === 37 /* % */) {
+            data[j] = 95;
+            continue;
+          }
+          data[j] = c;
+        }
+        names.push(String.fromCharCode.apply(null, data));
+      }
+      return names;
+    },
+    parseStringIndex: function CFFParser_parseStringIndex(index) {
+      var strings = new CFFStrings();
+      for (var i = 0, ii = index.count; i < ii; ++i) {
+        var data = index.get(i);
+        strings.add(String.fromCharCode.apply(null, data));
+      }
+      return strings;
+    },
+    createDict: function CFFParser_createDict(Type, dict, strings) {
+      var cffDict = new Type(strings);
+      var types = cffDict.types;
+
+      for (var i = 0, ii = dict.length; i < ii; ++i) {
+        var pair = dict[i];
+        var key = pair[0];
+        var value = pair[1];
+        cffDict.setByKey(key, value);
+      }
+      return cffDict;
+    },
+    parseCharStrings: function CFFParser_parseCharStrings(charStringOffset) {
+      var charStrings = this.parseIndex(charStringOffset).obj;
+      var seacs = [];
+      var count = charStrings.count;
+      for (var i = 0; i < count; i++) {
+        var charstring = charStrings.get(i);
+
+        var stackSize = 0;
+        var stack = [];
+        var undefStack = true;
+        var hints = 0;
+        var valid = true;
+        var data = charstring;
+        var length = data.length;
+        for (var j = 0; j < length;) {
+          var value = data[j++];
+          var validationCommand = null;
+          if (value == 12) {
+            var q = data[j++];
+            if (q === 0) {
+              // The CFF specification state that the 'dotsection' command
+              // (12, 0) is deprecated and treated as a no-op, but all Type2
+              // charstrings processors should support them. Unfortunately
+              // the font sanitizer don't. As a workaround the sequence (12, 0)
+              // is replaced by a useless (0, hmoveto).
+              data[j - 2] = 139;
+              data[j - 1] = 22;
+              stackSize = 0;
+            } else {
+              validationCommand = CharstringValidationData12[q];
+            }
+          } else if (value === 28) { // number (16 bit)
+            stack[stackSize] = ((data[j] << 24) | (data[j + 1] << 16)) >> 16;
+            j += 2;
+            stackSize++;
+          } else if (value == 14) {
+            if (stackSize >= 4) {
+              stackSize -= 4;
+              if (SEAC_ANALYSIS_ENABLED) {
+                seacs[i] = stack.slice(stackSize, stackSize + 4);
+                valid = false;
+              }
+            }
+          } else if (value >= 32 && value <= 246) {  // number
+            stack[stackSize] = value - 139;
+            stackSize++;
+          } else if (value >= 247 && value <= 254) {  // number (+1 bytes)
+            stack[stackSize] = value < 251 ?
+              ((value - 247) << 8) + data[j] + 108 :
+              -((value - 251) << 8) - data[j] - 108;
+            j++;
+            stackSize++;
+          } else if (value == 255) {  // number (32 bit)
+            stack[stackSize] = ((data[j] << 24) | (data[j + 1] << 16) |
+              (data[j + 2] << 8) | data[j + 3]) / 65536;
+            j += 4;
+            stackSize++;
+          } else if (value == 19 || value == 20) {
+            hints += stackSize >> 1;
+            j += (hints + 7) >> 3; // skipping right amount of hints flag data
+            stackSize = 0;
+          } else {
+            validationCommand = CharstringValidationData[value];
+          }
+          if (validationCommand) {
+            if (validationCommand.stem) {
+              hints += stackSize >> 1;
+            }
+            if ('min' in validationCommand) {
+              if (!undefStack && stackSize < validationCommand.min) {
+                warn('Not enough parameters for ' + validationCommand.id +
+                     '; actual: ' + stackSize +
+                     ', expected: ' + validationCommand.min);
+                valid = false;
+                break;
+              }
+            }
+            if ('stackDelta' in validationCommand) {
+              if ('stackFn' in validationCommand) {
+                validationCommand.stackFn(stack, stackSize);
+              }
+              stackSize += validationCommand.stackDelta;
+            } else if (validationCommand.resetStack) {
+              stackSize = 0;
+              undefStack = false;
+            } else if (validationCommand.undefStack) {
+              stackSize = 0;
+              undefStack = true;
+            }
+          }
+        }
+        if (!valid) {
+          // resetting invalid charstring to single 'endchar'
+          charStrings.set(i, new Uint8Array([14]));
+        }
+      }
+      return { charStrings: charStrings, seacs: seacs };
+    },
+    emptyPrivateDictionary:
+      function CFFParser_emptyPrivateDictionary(parentDict) {
+      var privateDict = this.createDict(CFFPrivateDict, [],
+                                        parentDict.strings);
+      parentDict.setByKey(18, [0, 0]);
+      parentDict.privateDict = privateDict;
+    },
+    parsePrivateDict: function CFFParser_parsePrivateDict(parentDict) {
+      // no private dict, do nothing
+      if (!parentDict.hasName('Private')) {
+        this.emptyPrivateDictionary(parentDict);
+        return;
+      }
+      var privateOffset = parentDict.getByName('Private');
+      // make sure the params are formatted correctly
+      if (!isArray(privateOffset) || privateOffset.length !== 2) {
+        parentDict.removeByName('Private');
+        return;
+      }
+      var size = privateOffset[0];
+      var offset = privateOffset[1];
+      // remove empty dicts or ones that refer to invalid location
+      if (size === 0 || offset >= this.bytes.length) {
+        this.emptyPrivateDictionary(parentDict);
+        return;
+      }
+
+      var privateDictEnd = offset + size;
+      var dictData = this.bytes.subarray(offset, privateDictEnd);
+      var dict = this.parseDict(dictData);
+      var privateDict = this.createDict(CFFPrivateDict, dict,
+                                        parentDict.strings);
+      parentDict.privateDict = privateDict;
+
+      // Parse the Subrs index also since it's relative to the private dict.
+      if (!privateDict.getByName('Subrs'))
+        return;
+      var subrsOffset = privateDict.getByName('Subrs');
+      var relativeOffset = offset + subrsOffset;
+      // Validate the offset.
+      if (subrsOffset === 0 || relativeOffset >= this.bytes.length) {
+        this.emptyPrivateDictionary(parentDict);
+        return;
+      }
+      var subrsIndex = this.parseIndex(relativeOffset);
+      privateDict.subrsIndex = subrsIndex.obj;
+    },
+    parseCharsets: function CFFParser_parseCharsets(pos, length, strings, cid) {
+      if (pos === 0) {
+        return new CFFCharset(true, CFFCharsetPredefinedTypes.ISO_ADOBE,
+                              ISOAdobeCharset);
+      } else if (pos == 1) {
+        return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT,
+                              ExpertCharset);
+      } else if (pos == 2) {
+        return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET,
+                              ExpertSubsetCharset);
+      }
+
+      var bytes = this.bytes;
+      var start = pos;
+      var format = bytes[pos++];
+      var charset = ['.notdef'];
+
+      // subtract 1 for the .notdef glyph
+      length -= 1;
+
+      switch (format) {
+        case 0:
+          for (var i = 0; i < length; i++) {
+            var id = (bytes[pos++] << 8) | bytes[pos++];
+            charset.push(cid ? id : strings.get(id));
+          }
+          break;
+        case 1:
+          while (charset.length <= length) {
+            var id = (bytes[pos++] << 8) | bytes[pos++];
+            var count = bytes[pos++];
+            for (var i = 0; i <= count; i++)
+              charset.push(cid ? id++ : strings.get(id++));
+          }
+          break;
+        case 2:
+          while (charset.length <= length) {
+            var id = (bytes[pos++] << 8) | bytes[pos++];
+            var count = (bytes[pos++] << 8) | bytes[pos++];
+            for (var i = 0; i <= count; i++)
+              charset.push(cid ? id++ : strings.get(id++));
+          }
+          break;
+        default:
+          error('Unknown charset format');
+      }
+      // Raw won't be needed if we actually compile the charset.
+      var end = pos;
+      var raw = bytes.subarray(start, end);
+
+      return new CFFCharset(false, format, charset, raw);
+    },
+    parseEncoding: function CFFParser_parseEncoding(pos,
+                                                    properties,
+                                                    strings,
+                                                    charset) {
+      var encoding = {};
+      var bytes = this.bytes;
+      var predefined = false;
+      var hasSupplement = false;
+      var format;
+      var raw = null;
+
+      function readSupplement() {
+        var supplementsCount = bytes[pos++];
+        for (var i = 0; i < supplementsCount; i++) {
+          var code = bytes[pos++];
+          var sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff);
+          encoding[code] = charset.indexOf(strings.get(sid));
+        }
+      }
+
+      if (pos === 0 || pos == 1) {
+        predefined = true;
+        format = pos;
+        var baseEncoding = pos ? Encodings.ExpertEncoding :
+                                 Encodings.StandardEncoding;
+        for (var i = 0, ii = charset.length; i < ii; i++) {
+          var index = baseEncoding.indexOf(charset[i]);
+          if (index != -1) {
+            encoding[index] = i;
+          }
+        }
+      } else {
+        var dataStart = pos;
+        var format = bytes[pos++];
+        switch (format & 0x7f) {
+          case 0:
+            var glyphsCount = bytes[pos++];
+            for (var i = 1; i <= glyphsCount; i++)
+              encoding[bytes[pos++]] = i;
+            break;
+
+          case 1:
+            var rangesCount = bytes[pos++];
+            var gid = 1;
+            for (var i = 0; i < rangesCount; i++) {
+              var start = bytes[pos++];
+              var left = bytes[pos++];
+              for (var j = start; j <= start + left; j++)
+                encoding[j] = gid++;
+            }
+            break;
+
+          default:
+            error('Unknow encoding format: ' + format + ' in CFF');
+            break;
+        }
+        var dataEnd = pos;
+        if (format & 0x80) {
+          // The font sanitizer does not support CFF encoding with a
+          // supplement, since the encoding is not really used to map
+          // between gid to glyph, let's overwrite what is declared in
+          // the top dictionary to let the sanitizer think the font use
+          // StandardEncoding, that's a lie but that's ok.
+          bytes[dataStart] &= 0x7f;
+          readSupplement();
+          hasSupplement = true;
+        }
+        raw = bytes.subarray(dataStart, dataEnd);
+      }
+      format = format & 0x7f;
+      return new CFFEncoding(predefined, format, encoding, raw);
+    },
+    parseFDSelect: function CFFParser_parseFDSelect(pos, length) {
+      var start = pos;
+      var bytes = this.bytes;
+      var format = bytes[pos++];
+      var fdSelect = [];
+      switch (format) {
+        case 0:
+          for (var i = 0; i < length; ++i) {
+            var id = bytes[pos++];
+            fdSelect.push(id);
+          }
+          break;
+        case 3:
+          var rangesCount = (bytes[pos++] << 8) | bytes[pos++];
+          for (var i = 0; i < rangesCount; ++i) {
+            var first = (bytes[pos++] << 8) | bytes[pos++];
+            var fdIndex = bytes[pos++];
+            var next = (bytes[pos] << 8) | bytes[pos + 1];
+            for (var j = first; j < next; ++j)
+              fdSelect.push(fdIndex);
+          }
+          // Advance past the sentinel(next).
+          pos += 2;
+          break;
+        default:
+          error('Unknown fdselect format ' + format);
+          break;
+      }
+      var end = pos;
+      return new CFFFDSelect(fdSelect, bytes.subarray(start, end));
+    }
+  };
+  return CFFParser;
+})();
+
+// Compact Font Format
+var CFF = (function CFFClosure() {
+  function CFF() {
+    this.header = null;
+    this.names = [];
+    this.topDict = null;
+    this.strings = new CFFStrings();
+    this.globalSubrIndex = null;
+
+    // The following could really be per font, but since we only have one font
+    // store them here.
+    this.encoding = null;
+    this.charset = null;
+    this.charStrings = null;
+    this.fdArray = [];
+    this.fdSelect = null;
+
+    this.isCIDFont = false;
+  }
+  return CFF;
+})();
+
+var CFFHeader = (function CFFHeaderClosure() {
+  function CFFHeader(major, minor, hdrSize, offSize) {
+    this.major = major;
+    this.minor = minor;
+    this.hdrSize = hdrSize;
+    this.offSize = offSize;
+  }
+  return CFFHeader;
+})();
+
+var CFFStrings = (function CFFStringsClosure() {
+  function CFFStrings() {
+    this.strings = [];
+  }
+  CFFStrings.prototype = {
+    get: function CFFStrings_get(index) {
+      if (index >= 0 && index <= 390)
+        return CFFStandardStrings[index];
+      if (index - 391 <= this.strings.length)
+        return this.strings[index - 391];
+      return CFFStandardStrings[0];
+    },
+    add: function CFFStrings_add(value) {
+      this.strings.push(value);
+    },
+    get count() {
+      return this.strings.length;
+    }
+  };
+  return CFFStrings;
+})();
+
+var CFFIndex = (function CFFIndexClosure() {
+  function CFFIndex() {
+    this.objects = [];
+    this.length = 0;
+  }
+  CFFIndex.prototype = {
+    add: function CFFIndex_add(data) {
+      this.length += data.length;
+      this.objects.push(data);
+    },
+    set: function CFFIndex_set(index, data) {
+      this.length += data.length - this.objects[index].length;
+      this.objects[index] = data;
+    },
+    get: function CFFIndex_get(index) {
+      return this.objects[index];
+    },
+    get count() {
+      return this.objects.length;
+    }
+  };
+  return CFFIndex;
+})();
+
+var CFFDict = (function CFFDictClosure() {
+  function CFFDict(tables, strings) {
+    this.keyToNameMap = tables.keyToNameMap;
+    this.nameToKeyMap = tables.nameToKeyMap;
+    this.defaults = tables.defaults;
+    this.types = tables.types;
+    this.opcodes = tables.opcodes;
+    this.order = tables.order;
+    this.strings = strings;
+    this.values = {};
+  }
+  CFFDict.prototype = {
+    // value should always be an array
+    setByKey: function CFFDict_setByKey(key, value) {
+      if (!(key in this.keyToNameMap))
+        return false;
+      // ignore empty values
+      if (value.length === 0)
+        return true;
+      var type = this.types[key];
+      // remove the array wrapping these types of values
+      if (type === 'num' || type === 'sid' || type === 'offset')
+        value = value[0];
+      this.values[key] = value;
+      return true;
+    },
+    setByName: function CFFDict_setByName(name, value) {
+      if (!(name in this.nameToKeyMap)) {
+        error('Invalid dictionary name "' + name + '"');
+      }
+      this.values[this.nameToKeyMap[name]] = value;
+    },
+    hasName: function CFFDict_hasName(name) {
+      return this.nameToKeyMap[name] in this.values;
+    },
+    getByName: function CFFDict_getByName(name) {
+      if (!(name in this.nameToKeyMap))
+        error('Invalid dictionary name "' + name + '"');
+      var key = this.nameToKeyMap[name];
+      if (!(key in this.values))
+        return this.defaults[key];
+      return this.values[key];
+    },
+    removeByName: function CFFDict_removeByName(name) {
+      delete this.values[this.nameToKeyMap[name]];
+    }
+  };
+  CFFDict.createTables = function CFFDict_createTables(layout) {
+    var tables = {
+      keyToNameMap: {},
+      nameToKeyMap: {},
+      defaults: {},
+      types: {},
+      opcodes: {},
+      order: []
+    };
+    for (var i = 0, ii = layout.length; i < ii; ++i) {
+      var entry = layout[i];
+      var key = isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0];
+      tables.keyToNameMap[key] = entry[1];
+      tables.nameToKeyMap[entry[1]] = key;
+      tables.types[key] = entry[2];
+      tables.defaults[key] = entry[3];
+      tables.opcodes[key] = isArray(entry[0]) ? entry[0] : [entry[0]];
+      tables.order.push(key);
+    }
+    return tables;
+  };
+  return CFFDict;
+})();
+
+var CFFTopDict = (function CFFTopDictClosure() {
+  var layout = [
+    [[12, 30], 'ROS', ['sid', 'sid', 'num'], null],
+    [[12, 20], 'SyntheticBase', 'num', null],
+    [0, 'version', 'sid', null],
+    [1, 'Notice', 'sid', null],
+    [[12, 0], 'Copyright', 'sid', null],
+    [2, 'FullName', 'sid', null],
+    [3, 'FamilyName', 'sid', null],
+    [4, 'Weight', 'sid', null],
+    [[12, 1], 'isFixedPitch', 'num', 0],
+    [[12, 2], 'ItalicAngle', 'num', 0],
+    [[12, 3], 'UnderlinePosition', 'num', -100],
+    [[12, 4], 'UnderlineThickness', 'num', 50],
+    [[12, 5], 'PaintType', 'num', 0],
+    [[12, 6], 'CharstringType', 'num', 2],
+    [[12, 7], 'FontMatrix', ['num', 'num', 'num', 'num', 'num', 'num'],
+                            [0.001, 0, 0, 0.001, 0, 0]],
+    [13, 'UniqueID', 'num', null],
+    [5, 'FontBBox', ['num', 'num', 'num', 'num'], [0, 0, 0, 0]],
+    [[12, 8], 'StrokeWidth', 'num', 0],
+    [14, 'XUID', 'array', null],
+    [15, 'charset', 'offset', 0],
+    [16, 'Encoding', 'offset', 0],
+    [17, 'CharStrings', 'offset', 0],
+    [18, 'Private', ['offset', 'offset'], null],
+    [[12, 21], 'PostScript', 'sid', null],
+    [[12, 22], 'BaseFontName', 'sid', null],
+    [[12, 23], 'BaseFontBlend', 'delta', null],
+    [[12, 31], 'CIDFontVersion', 'num', 0],
+    [[12, 32], 'CIDFontRevision', 'num', 0],
+    [[12, 33], 'CIDFontType', 'num', 0],
+    [[12, 34], 'CIDCount', 'num', 8720],
+    [[12, 35], 'UIDBase', 'num', null],
+    // XXX: CID Fonts on DirectWrite 6.1 only seem to work if FDSelect comes
+    // before FDArray.
+    [[12, 37], 'FDSelect', 'offset', null],
+    [[12, 36], 'FDArray', 'offset', null],
+    [[12, 38], 'FontName', 'sid', null]
+  ];
+  var tables = null;
+  function CFFTopDict(strings) {
+    if (tables === null)
+      tables = CFFDict.createTables(layout);
+    CFFDict.call(this, tables, strings);
+    this.privateDict = null;
+  }
+  CFFTopDict.prototype = Object.create(CFFDict.prototype);
+  return CFFTopDict;
+})();
+
+var CFFPrivateDict = (function CFFPrivateDictClosure() {
+  var layout = [
+    [6, 'BlueValues', 'delta', null],
+    [7, 'OtherBlues', 'delta', null],
+    [8, 'FamilyBlues', 'delta', null],
+    [9, 'FamilyOtherBlues', 'delta', null],
+    [[12, 9], 'BlueScale', 'num', 0.039625],
+    [[12, 10], 'BlueShift', 'num', 7],
+    [[12, 11], 'BlueFuzz', 'num', 1],
+    [10, 'StdHW', 'num', null],
+    [11, 'StdVW', 'num', null],
+    [[12, 12], 'StemSnapH', 'delta', null],
+    [[12, 13], 'StemSnapV', 'delta', null],
+    [[12, 14], 'ForceBold', 'num', 0],
+    [[12, 17], 'LanguageGroup', 'num', 0],
+    [[12, 18], 'ExpansionFactor', 'num', 0.06],
+    [[12, 19], 'initialRandomSeed', 'num', 0],
+    [20, 'defaultWidthX', 'num', 0],
+    [21, 'nominalWidthX', 'num', 0],
+    [19, 'Subrs', 'offset', null]
+  ];
+  var tables = null;
+  function CFFPrivateDict(strings) {
+    if (tables === null)
+      tables = CFFDict.createTables(layout);
+    CFFDict.call(this, tables, strings);
+    this.subrsIndex = null;
+  }
+  CFFPrivateDict.prototype = Object.create(CFFDict.prototype);
+  return CFFPrivateDict;
+})();
+
+var CFFCharsetPredefinedTypes = {
+  ISO_ADOBE: 0,
+  EXPERT: 1,
+  EXPERT_SUBSET: 2
+};
+var CFFCharsetEmbeddedTypes = {
+  FORMAT0: 0,
+  FORMAT1: 1,
+  FORMAT2: 2
+};
+var CFFCharset = (function CFFCharsetClosure() {
+  function CFFCharset(predefined, format, charset, raw) {
+    this.predefined = predefined;
+    this.format = format;
+    this.charset = charset;
+    this.raw = raw;
+  }
+  return CFFCharset;
+})();
+
+var CFFEncodingPredefinedTypes = {
+  STANDARD: 0,
+  EXPERT: 1
+};
+var CFFCharsetEmbeddedTypes = {
+  FORMAT0: 0,
+  FORMAT1: 1
+};
+var CFFEncoding = (function CFFEncodingClosure() {
+  function CFFEncoding(predefined, format, encoding, raw) {
+    this.predefined = predefined;
+    this.format = format;
+    this.encoding = encoding;
+    this.raw = raw;
+  }
+  return CFFEncoding;
+})();
+
+var CFFFDSelect = (function CFFFDSelectClosure() {
+  function CFFFDSelect(fdSelect, raw) {
+    this.fdSelect = fdSelect;
+    this.raw = raw;
+  }
+  return CFFFDSelect;
+})();
+
+// Helper class to keep track of where an offset is within the data and helps
+// filling in that offset once it's known.
+var CFFOffsetTracker = (function CFFOffsetTrackerClosure() {
+  function CFFOffsetTracker() {
+    this.offsets = {};
+  }
+  CFFOffsetTracker.prototype = {
+    isTracking: function CFFOffsetTracker_isTracking(key) {
+      return key in this.offsets;
+    },
+    track: function CFFOffsetTracker_track(key, location) {
+      if (key in this.offsets)
+        error('Already tracking location of ' + key);
+      this.offsets[key] = location;
+    },
+    offset: function CFFOffsetTracker_offset(value) {
+      for (var key in this.offsets) {
+        this.offsets[key] += value;
+      }
+    },
+    setEntryLocation: function CFFOffsetTracker_setEntryLocation(key,
+                                                                 values,
+                                                                 output) {
+      if (!(key in this.offsets))
+        error('Not tracking location of ' + key);
+      var data = output.data;
+      var dataOffset = this.offsets[key];
+      var size = 5;
+      for (var i = 0, ii = values.length; i < ii; ++i) {
+        var offset0 = i * size + dataOffset;
+        var offset1 = offset0 + 1;
+        var offset2 = offset0 + 2;
+        var offset3 = offset0 + 3;
+        var offset4 = offset0 + 4;
+        // It's easy to screw up offsets so perform this sanity check.
+        if (data[offset0] !== 0x1d || data[offset1] !== 0 ||
+            data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0)
+          error('writing to an offset that is not empty');
+        var value = values[i];
+        data[offset0] = 0x1d;
+        data[offset1] = (value >> 24) & 0xFF;
+        data[offset2] = (value >> 16) & 0xFF;
+        data[offset3] = (value >> 8) & 0xFF;
+        data[offset4] = value & 0xFF;
+      }
+    }
+  };
+  return CFFOffsetTracker;
+})();
+
+// Takes a CFF and converts it to the binary representation.
+var CFFCompiler = (function CFFCompilerClosure() {
+  function stringToArray(str) {
+    var array = [];
+    for (var i = 0, ii = str.length; i < ii; ++i)
+      array[i] = str.charCodeAt(i);
+
+    return array;
+  }
+  function CFFCompiler(cff) {
+    this.cff = cff;
+  }
+  CFFCompiler.prototype = {
+    compile: function CFFCompiler_compile() {
+      var cff = this.cff;
+      var output = {
+        data: [],
+        length: 0,
+        add: function CFFCompiler_add(data) {
+          this.data = this.data.concat(data);
+          this.length = this.data.length;
+        }
+      };
+
+      // Compile the five entries that must be in order.
+      var header = this.compileHeader(cff.header);
+      output.add(header);
+
+      var nameIndex = this.compileNameIndex(cff.names);
+      output.add(nameIndex);
+
+      if (cff.isCIDFont) {
+        // The spec is unclear on how font matrices should relate to each other
+        // when there is one in the main top dict and the sub top dicts.
+        // Windows handles this differently than linux and osx so we have to
+        // normalize to work on all.
+        // Rules based off of some mailing list discussions:
+        // - If main font has a matrix and subfont doesn't, use the main matrix.
+        // - If no main font matrix and there is a subfont matrix, use the
+        //   subfont matrix.
+        // - If both have matrices, concat together.
+        // - If neither have matrices, use default.
+        // To make this work on all platforms we move the top matrix into each
+        // sub top dict and concat if necessary.
+        if (cff.topDict.hasName('FontMatrix')) {
+          var base = cff.topDict.getByName('FontMatrix');
+          cff.topDict.removeByName('FontMatrix');
+          for (var i = 0, ii = cff.fdArray.length; i < ii; i++) {
+            var subDict = cff.fdArray[i];
+            var matrix = base.slice(0);
+            if (subDict.hasName('FontMatrix')) {
+              matrix = Util.transform(matrix, subDict.getByName('FontMatrix'));
+            }
+            subDict.setByName('FontMatrix', matrix);
+          }
+        }
+      }
+
+      var compiled = this.compileTopDicts([cff.topDict],
+                                          output.length,
+                                          cff.isCIDFont);
+      output.add(compiled.output);
+      var topDictTracker = compiled.trackers[0];
+
+      var stringIndex = this.compileStringIndex(cff.strings.strings);
+      output.add(stringIndex);
+
+      var globalSubrIndex = this.compileIndex(cff.globalSubrIndex);
+      output.add(globalSubrIndex);
+
+      // Now start on the other entries that have no specfic order.
+      if (cff.encoding && cff.topDict.hasName('Encoding')) {
+        if (cff.encoding.predefined) {
+          topDictTracker.setEntryLocation('Encoding', [cff.encoding.format],
+                                          output);
+        } else {
+          var encoding = this.compileEncoding(cff.encoding);
+          topDictTracker.setEntryLocation('Encoding', [output.length], output);
+          output.add(encoding);
+        }
+      }
+
+      if (cff.charset && cff.topDict.hasName('charset')) {
+        if (cff.charset.predefined) {
+          topDictTracker.setEntryLocation('charset', [cff.charset.format],
+                                          output);
+        } else {
+          var charset = this.compileCharset(cff.charset);
+          topDictTracker.setEntryLocation('charset', [output.length], output);
+          output.add(charset);
+        }
+      }
+
+      var charStrings = this.compileCharStrings(cff.charStrings);
+      topDictTracker.setEntryLocation('CharStrings', [output.length], output);
+      output.add(charStrings);
+
+      if (cff.isCIDFont) {
+        // For some reason FDSelect must be in front of FDArray on windows. OSX
+        // and linux don't seem to care.
+        topDictTracker.setEntryLocation('FDSelect', [output.length], output);
+        var fdSelect = this.compileFDSelect(cff.fdSelect.raw);
+        output.add(fdSelect);
+        // It is unclear if the sub font dictionary can have CID related
+        // dictionary keys, but the sanitizer doesn't like them so remove them.
+        var compiled = this.compileTopDicts(cff.fdArray, output.length, true);
+        topDictTracker.setEntryLocation('FDArray', [output.length], output);
+        output.add(compiled.output);
+        var fontDictTrackers = compiled.trackers;
+
+        this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output);
+      }
+
+      this.compilePrivateDicts([cff.topDict], [topDictTracker], output);
+
+      // If the font data ends with INDEX whose object data is zero-length,
+      // the sanitizer will bail out. Add a dummy byte to avoid that.
+      output.add([0]);
+
+      return output.data;
+    },
+    encodeNumber: function CFFCompiler_encodeNumber(value) {
+      if (parseFloat(value) == parseInt(value, 10) && !isNaN(value)) // isInt
+        return this.encodeInteger(value);
+      else
+        return this.encodeFloat(value);
+    },
+    encodeFloat: function CFFCompiler_encodeFloat(num) {
+      var value = num.toString();
+
+      // rounding inaccurate doubles
+      var m = /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(value);
+      if (m) {
+        var epsilon = parseFloat('1e' + ((m[2] ? +m[2] : 0) + m[1].length));
+        value = (Math.round(num * epsilon) / epsilon).toString();
+      }
+
+      var nibbles = '';
+      for (var i = 0, ii = value.length; i < ii; ++i) {
+        var a = value[i];
+        if (a === 'e') {
+          nibbles += value[++i] === '-' ? 'c' : 'b';
+        } else if (a === '.') {
+          nibbles += 'a';
+        } else if (a === '-') {
+          nibbles += 'e';
+        } else {
+          nibbles += a;
+        }
+      }
+      nibbles += (nibbles.length & 1) ? 'f' : 'ff';
+      var out = [30];
+      for (var i = 0, ii = nibbles.length; i < ii; i += 2) {
+        out.push(parseInt(nibbles.substr(i, 2), 16));
+      }
+      return out;
+    },
+    encodeInteger: function CFFCompiler_encodeInteger(value) {
+      var code;
+      if (value >= -107 && value <= 107) {
+        code = [value + 139];
+      } else if (value >= 108 && value <= 1131) {
+        value = [value - 108];
+        code = [(value >> 8) + 247, value & 0xFF];
+      } else if (value >= -1131 && value <= -108) {
+        value = -value - 108;
+        code = [(value >> 8) + 251, value & 0xFF];
+      } else if (value >= -32768 && value <= 32767) {
+        code = [0x1c, (value >> 8) & 0xFF, value & 0xFF];
+      } else {
+        code = [0x1d,
+                (value >> 24) & 0xFF,
+                (value >> 16) & 0xFF,
+                (value >> 8) & 0xFF,
+                 value & 0xFF];
+      }
+      return code;
+    },
+    compileHeader: function CFFCompiler_compileHeader(header) {
+      return [
+        header.major,
+        header.minor,
+        header.hdrSize,
+        header.offSize
+      ];
+    },
+    compileNameIndex: function CFFCompiler_compileNameIndex(names) {
+      var nameIndex = new CFFIndex();
+      for (var i = 0, ii = names.length; i < ii; ++i)
+        nameIndex.add(stringToArray(names[i]));
+      return this.compileIndex(nameIndex);
+    },
+    compileTopDicts: function CFFCompiler_compileTopDicts(dicts,
+                                                          length,
+                                                          removeCidKeys) {
+      var fontDictTrackers = [];
+      var fdArrayIndex = new CFFIndex();
+      for (var i = 0, ii = dicts.length; i < ii; ++i) {
+        var fontDict = dicts[i];
+        if (removeCidKeys) {
+          fontDict.removeByName('CIDFontVersion');
+          fontDict.removeByName('CIDFontRevision');
+          fontDict.removeByName('CIDFontType');
+          fontDict.removeByName('CIDCount');
+          fontDict.removeByName('UIDBase');
+        }
+        var fontDictTracker = new CFFOffsetTracker();
+        var fontDictData = this.compileDict(fontDict, fontDictTracker);
+        fontDictTrackers.push(fontDictTracker);
+        fdArrayIndex.add(fontDictData);
+        fontDictTracker.offset(length);
+      }
+      fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers);
+      return {
+        trackers: fontDictTrackers,
+        output: fdArrayIndex
+      };
+    },
+    compilePrivateDicts: function CFFCompiler_compilePrivateDicts(dicts,
+                                                                  trackers,
+                                                                  output) {
+      for (var i = 0, ii = dicts.length; i < ii; ++i) {
+        var fontDict = dicts[i];
+        assert(fontDict.privateDict && fontDict.hasName('Private'),
+               'There must be an private dictionary.');
+        var privateDict = fontDict.privateDict;
+        var privateDictTracker = new CFFOffsetTracker();
+        var privateDictData = this.compileDict(privateDict, privateDictTracker);
+
+        var outputLength = output.length;
+        privateDictTracker.offset(outputLength);
+        if (!privateDictData.length) {
+          // The private dictionary was empty, set the output length to zero to
+          // ensure the offset length isn't out of bounds in the eyes of the
+          // sanitizer.
+          outputLength = 0;
+        }
+
+        trackers[i].setEntryLocation('Private',
+                                     [privateDictData.length, outputLength],
+                                     output);
+        output.add(privateDictData);
+
+        if (privateDict.subrsIndex && privateDict.hasName('Subrs')) {
+          var subrs = this.compileIndex(privateDict.subrsIndex);
+          privateDictTracker.setEntryLocation('Subrs', [privateDictData.length],
+                                              output);
+          output.add(subrs);
+        }
+      }
+    },
+    compileDict: function CFFCompiler_compileDict(dict, offsetTracker) {
+      var out = [];
+      // The dictionary keys must be in a certain order.
+      var order = dict.order;
+      for (var i = 0; i < order.length; ++i) {
+        var key = order[i];
+        if (!(key in dict.values))
+          continue;
+        var values = dict.values[key];
+        var types = dict.types[key];
+        if (!isArray(types)) types = [types];
+        if (!isArray(values)) values = [values];
+
+        // Remove any empty dict values.
+        if (values.length === 0)
+          continue;
+
+        for (var j = 0, jj = types.length; j < jj; ++j) {
+          var type = types[j];
+          var value = values[j];
+          switch (type) {
+            case 'num':
+            case 'sid':
+              out = out.concat(this.encodeNumber(value));
+              break;
+            case 'offset':
+              // For offsets we just insert a 32bit integer so we don't have to
+              // deal with figuring out the length of the offset when it gets
+              // replaced later on by the compiler.
+              var name = dict.keyToNameMap[key];
+              // Some offsets have the offset and the length, so just record the
+              // position of the first one.
+              if (!offsetTracker.isTracking(name))
+                offsetTracker.track(name, out.length);
+              out = out.concat([0x1d, 0, 0, 0, 0]);
+              break;
+            case 'array':
+            case 'delta':
+              out = out.concat(this.encodeNumber(value));
+              for (var k = 1, kk = values.length; k < kk; ++k)
+                out = out.concat(this.encodeNumber(values[k]));
+              break;
+            default:
+              error('Unknown data type of ' + type);
+              break;
+          }
+        }
+        out = out.concat(dict.opcodes[key]);
+      }
+      return out;
+    },
+    compileStringIndex: function CFFCompiler_compileStringIndex(strings) {
+      var stringIndex = new CFFIndex();
+      for (var i = 0, ii = strings.length; i < ii; ++i)
+        stringIndex.add(stringToArray(strings[i]));
+      return this.compileIndex(stringIndex);
+    },
+    compileGlobalSubrIndex: function CFFCompiler_compileGlobalSubrIndex() {
+      var globalSubrIndex = this.cff.globalSubrIndex;
+      this.out.writeByteArray(this.compileIndex(globalSubrIndex));
+    },
+    compileCharStrings: function CFFCompiler_compileCharStrings(charStrings) {
+      return this.compileIndex(charStrings);
+    },
+    compileCharset: function CFFCompiler_compileCharset(charset) {
+      return this.compileTypedArray(charset.raw);
+    },
+    compileEncoding: function CFFCompiler_compileEncoding(encoding) {
+      return this.compileTypedArray(encoding.raw);
+    },
+    compileFDSelect: function CFFCompiler_compileFDSelect(fdSelect) {
+      return this.compileTypedArray(fdSelect);
+    },
+    compileTypedArray: function CFFCompiler_compileTypedArray(data) {
+      var out = [];
+      for (var i = 0, ii = data.length; i < ii; ++i)
+        out[i] = data[i];
+      return out;
+    },
+    compileIndex: function CFFCompiler_compileIndex(index, trackers) {
+      trackers = trackers || [];
+      var objects = index.objects;
+      // First 2 bytes contains the number of objects contained into this index
+      var count = objects.length;
+
+      // If there is no object, just create an index. This technically
+      // should just be [0, 0] but OTS has an issue with that.
+      if (count === 0)
+        return [0, 0, 0];
+
+      var data = [(count >> 8) & 0xFF, count & 0xff];
+
+      var lastOffset = 1;
+      for (var i = 0; i < count; ++i)
+        lastOffset += objects[i].length;
+
+      var offsetSize;
+      if (lastOffset < 0x100)
+        offsetSize = 1;
+      else if (lastOffset < 0x10000)
+        offsetSize = 2;
+      else if (lastOffset < 0x1000000)
+        offsetSize = 3;
+      else
+        offsetSize = 4;
+
+      // Next byte contains the offset size use to reference object in the file
+      data.push(offsetSize);
+
+      // Add another offset after this one because we need a new offset
+      var relativeOffset = 1;
+      for (var i = 0; i < count + 1; i++) {
+        if (offsetSize === 1) {
+          data.push(relativeOffset & 0xFF);
+        } else if (offsetSize === 2) {
+          data.push((relativeOffset >> 8) & 0xFF,
+                     relativeOffset & 0xFF);
+        } else if (offsetSize === 3) {
+          data.push((relativeOffset >> 16) & 0xFF,
+                    (relativeOffset >> 8) & 0xFF,
+                     relativeOffset & 0xFF);
+        } else {
+          data.push((relativeOffset >>> 24) & 0xFF,
+                    (relativeOffset >> 16) & 0xFF,
+                    (relativeOffset >> 8) & 0xFF,
+                     relativeOffset & 0xFF);
+        }
+
+        if (objects[i])
+          relativeOffset += objects[i].length;
+      }
+      var offset = data.length;
+
+      for (var i = 0; i < count; i++) {
+        // Notify the tracker where the object will be offset in the data.
+        if (trackers[i])
+          trackers[i].offset(data.length);
+        for (var j = 0, jj = objects[i].length; j < jj; j++)
+          data.push(objects[i][j]);
+      }
+      return data;
+    }
+  };
+  return CFFCompiler;
+})();
+
+// Workaround for seac on Windows.
+(function checkSeacSupport() {
+  if (/Windows/.test(navigator.userAgent)) {
+    SEAC_ANALYSIS_ENABLED = true;
+  }
+})();
+
+// Workaround for Private Use Area characters in Chrome on Windows
+// http://code.google.com/p/chromium/issues/detail?id=122465
+// https://github.com/mozilla/pdf.js/issues/1689
+(function checkChromeWindows() {
+  if (/Windows.*Chrome/.test(navigator.userAgent)) {
+    SYMBOLIC_FONT_GLYPH_OFFSET = 0xF100;
+  }
+})();
+
+
+var FontRendererFactory = (function FontRendererFactoryClosure() {
+  function getLong(data, offset) {
+    return (data[offset] << 24) | (data[offset + 1] << 16) |
+           (data[offset + 2] << 8) | data[offset + 3];
+  }
+
+  function getUshort(data, offset) {
+    return (data[offset] << 8) | data[offset + 1];
+  }
+
+  function parseCmap(data, start, end) {
+    var offset = getUshort(data, start + 2) === 1 ? getLong(data, start + 8) :
+                                                    getLong(data, start + 16);
+    var format = getUshort(data, start + offset);
+    if (format === 4) {
+      var length = getUshort(data, start + offset + 2);
+      var segCount = getUshort(data, start + offset + 6) >> 1;
+      var p = start + offset + 14;
+      var ranges = [];
+      for (var i = 0; i < segCount; i++, p += 2) {
+        ranges[i] = {end: getUshort(data, p)};
+      }
+      p += 2;
+      for (var i = 0; i < segCount; i++, p += 2) {
+        ranges[i].start = getUshort(data, p);
+      }
+      for (var i = 0; i < segCount; i++, p += 2) {
+        ranges[i].idDelta = getUshort(data, p);
+      }
+      for (var i = 0; i < segCount; i++, p += 2) {
+        var idOffset = getUshort(data, p);
+        if (idOffset === 0) {
+          continue;
+        }
+        ranges[i].ids = [];
+        for (var j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) {
+          ranges[i].ids[j] = getUshort(data, p + idOffset);
+          idOffset += 2;
+        }
+      }
+      return ranges;
+    } else if (format === 12) {
+      var length = getLong(data, start + offset + 4);
+      var groups = getLong(data, start + offset + 12);
+      var p = start + offset + 16;
+      var ranges = [];
+      for (var i = 0; i < groups; i++) {
+        ranges.push({
+          start: getLong(data, p),
+          end: getLong(data, p + 4),
+          idDelta: getLong(data, p + 8) - getLong(data, p)
+        });
+        p += 12;
+      }
+      return ranges;
+    }
+    error('not supported cmap: ' + format);
+  }
+
+  function parseCff(data, start, end) {
+    var properties = {};
+    var parser = new CFFParser(
+      new Stream(data, start, end - start), properties);
+    var cff = parser.parse();
+    return {
+      glyphs: cff.charStrings.objects,
+      subrs: cff.topDict.privateDict && cff.topDict.privateDict.subrsIndex &&
+             cff.topDict.privateDict.subrsIndex.objects,
+      gsubrs: cff.globalSubrIndex && cff.globalSubrIndex.objects
+    };
+  }
+
+  function parseGlyfTable(glyf, loca, isGlyphLocationsLong) {
+    var itemSize, itemDecode;
+    if (isGlyphLocationsLong) {
+      itemSize = 4;
+      itemDecode = function fontItemDecodeLong(data, offset) {
+        return (data[offset] << 24) | (data[offset + 1] << 16) |
+               (data[offset + 2] << 8) | data[offset + 3];
+      };
+    } else {
+      itemSize = 2;
+      itemDecode = function fontItemDecode(data, offset) {
+        return (data[offset] << 9) | (data[offset + 1] << 1);
+      };
+    }
+    var glyphs = [];
+    var startOffset = itemDecode(loca, 0);
+    for (var j = itemSize; j < loca.length; j += itemSize) {
+      var endOffset = itemDecode(loca, j);
+      glyphs.push(glyf.subarray(startOffset, endOffset));
+      startOffset = endOffset;
+    }
+    return glyphs;
+  }
+
+  function lookupCmap(ranges, unicode) {
+    var code = unicode.charCodeAt(0);
+    var l = 0, r = ranges.length - 1;
+    while (l < r) {
+      var c = (l + r + 1) >> 1;
+      if (code < ranges[c].start) {
+        r = c - 1;
+      } else {
+        l = c;
+      }
+    }
+    if (ranges[l].start <= code && code <= ranges[l].end) {
+      return (ranges[l].idDelta + (ranges[l].ids ?
+        ranges[l].ids[code - ranges[l].start] : code)) & 0xFFFF;
+    }
+    return 0;
+  }
+
+  function compileGlyf(code, js, font) {
+    function moveTo(x, y) {
+      js.push('c.moveTo(' + x + ',' + y + ');');
+    }
+    function lineTo(x, y) {
+      js.push('c.lineTo(' + x + ',' + y + ');');
+    }
+    function quadraticCurveTo(xa, ya, x, y) {
+      js.push('c.quadraticCurveTo(' + xa + ',' + ya + ',' +
+                                   x + ',' + y + ');');
+    }
+
+    var i = 0;
+    var numberOfContours = ((code[i] << 24) | (code[i + 1] << 16)) >> 16;
+    var xMin = ((code[i + 2] << 24) | (code[i + 3] << 16)) >> 16;
+    var yMin = ((code[i + 4] << 24) | (code[i + 5] << 16)) >> 16;
+    var xMax = ((code[i + 6] << 24) | (code[i + 7] << 16)) >> 16;
+    var yMax = ((code[i + 8] << 24) | (code[i + 9] << 16)) >> 16;
+    i += 10;
+    if (numberOfContours < 0) {
+      // composite glyph
+      var x = 0, y = 0;
+      do {
+        var flags = (code[i] << 8) | code[i + 1];
+        var glyphIndex = (code[i + 2] << 8) | code[i + 3];
+        i += 4;
+        var arg1, arg2;
+        if ((flags & 0x01)) {
+          arg1 = ((code[i] << 24) | (code[i + 1] << 16)) >> 16;
+          arg2 = ((code[i + 2] << 24) | (code[i + 3] << 16)) >> 16;
+          i += 4;
+        } else {
+          arg1 = code[i++]; arg2 = code[i++];
+        }
+        if ((flags & 0x02)) {
+           x = arg1;
+           y = arg2;
+        } else {
+           x = 0; y = 0; // TODO "they are points" ?
+        }
+        var scaleX = 1, scaleY = 1, scale01 = 0, scale10 = 0;
+        if ((flags & 0x08)) {
+          scaleX =
+          scaleY = ((code[i] << 24) | (code[i + 1] << 16)) / 1073741824;
+          i += 2;
+        } else if ((flags & 0x40)) {
+          scaleX = ((code[i] << 24) | (code[i + 1] << 16)) / 1073741824;
+          scaleY = ((code[i + 2] << 24) | (code[i + 3] << 16)) / 1073741824;
+          i += 4;
+        } else if ((flags & 0x80)) {
+          scaleX = ((code[i] << 24) | (code[i + 1] << 16)) / 1073741824;
+          scale01 = ((code[i + 2] << 24) | (code[i + 3] << 16)) / 1073741824;
+          scale10 = ((code[i + 4] << 24) | (code[i + 5] << 16)) / 1073741824;
+          scaleY = ((code[i + 6] << 24) | (code[i + 7] << 16)) / 1073741824;
+          i += 8;
+        }
+        var subglyph = font.glyphs[glyphIndex];
+        if (subglyph) {
+          js.push('c.save();');
+          js.push('c.transform(' + scaleX + ',' + scale01 + ',' +
+                  scale10 + ',' + scaleY + ',' + x + ',' + y + ');');
+          compileGlyf(subglyph, js, font);
+          js.push('c.restore();');
+        }
+      } while ((flags & 0x20));
+    } else {
+      // simple glyph
+      var endPtsOfContours = [];
+      for (var j = 0; j < numberOfContours; j++) {
+        endPtsOfContours.push((code[i] << 8) | code[i + 1]);
+        i += 2;
+      }
+      var instructionLength = (code[i] << 8) | code[i + 1];
+      i += 2 + instructionLength; // skipping the instructions
+      var numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1;
+      var points = [];
+      while (points.length < numberOfPoints) {
+        var flags = code[i++], repeat = 1;
+        if ((flags & 0x08)) {
+          repeat += code[i++];
+        }
+        while (repeat-- > 0) {
+          points.push({flags: flags});
+        }
+      }
+      var x = 0, y = 0;
+      for (var j = 0; j < numberOfPoints; j++) {
+        switch (points[j].flags & 0x12) {
+          case 0x00:
+            x += ((code[i] << 24) | (code[i + 1] << 16)) >> 16;
+            i += 2;
+            break;
+          case 0x02:
+            x -= code[i++];
+            break;
+          case 0x12:
+            x += code[i++];
+            break;
+        }
+        points[j].x = x;
+      }
+      for (var j = 0; j < numberOfPoints; j++) {
+        switch (points[j].flags & 0x24) {
+          case 0x00:
+            y += ((code[i] << 24) | (code[i + 1] << 16)) >> 16;
+            i += 2;
+            break;
+          case 0x04:
+            y -= code[i++];
+            break;
+          case 0x24:
+            y += code[i++];
+            break;
+        }
+        points[j].y = y;
+      }
+
+      var startPoint = 0;
+      for (var i = 0; i < numberOfContours; i++) {
+        var endPoint = endPtsOfContours[i];
+        // contours might have implicit points, which is located in the middle
+        // between two neighboring off-curve points
+        var contour = points.slice(startPoint, endPoint + 1);
+        if ((contour[0].flags & 1)) {
+          contour.push(contour[0]); // using start point at the contour end
+        } else if ((contour[contour.length - 1].flags & 1)) {
+          // first is off-curve point, trying to use one from the end
+          contour.unshift(contour[contour.length - 1]);
+        } else {
+          // start and end are off-curve points, creating implicit one
+          var p = {
+            flags: 1,
+            x: (contour[0].x + contour[contour.length - 1].x) / 2,
+            y: (contour[0].y + contour[contour.length - 1].y) / 2
+          };
+          contour.unshift(p);
+          contour.push(p);
+        }
+        moveTo(contour[0].x, contour[0].y);
+        for (var j = 1, jj = contour.length; j < jj; j++) {
+          if ((contour[j].flags & 1)) {
+            lineTo(contour[j].x, contour[j].y);
+          } else if ((contour[j + 1].flags & 1)){
+            quadraticCurveTo(contour[j].x, contour[j].y,
+                             contour[j + 1].x, contour[j + 1].y);
+            j++;
+          } else {
+            quadraticCurveTo(contour[j].x, contour[j].y,
+              (contour[j].x + contour[j + 1].x) / 2,
+              (contour[j].y + contour[j + 1].y) / 2);
+          }
+        }
+        startPoint = endPoint + 1;
+      }
+    }
+  }
+
+  function compileCharString(code, js, font) {
+    var stack = [];
+    var x = 0, y = 0;
+    var stems = 0;
+
+    function moveTo(x, y) {
+      js.push('c.moveTo(' + x + ',' + y + ');');
+    }
+    function lineTo(x, y) {
+      js.push('c.lineTo(' + x + ',' + y + ');');
+    }
+    function bezierCurveTo(x1, y1, x2, y2, x, y) {
+      js.push('c.bezierCurveTo(' + x1 + ',' + y1 + ',' + x2 + ',' + y2 + ',' +
+                                   x + ',' + y + ');');
+    }
+
+    function parse(code) {
+      var i = 0;
+      while (i < code.length) {
+        var stackClean = false;
+        var v = code[i++];
+        switch (v) {
+          case 1: // hstem
+            stems += stack.length >> 1;
+            stackClean = true;
+            break;
+          case 3: // vstem
+            stems += stack.length >> 1;
+            stackClean = true;
+            break;
+          case 4: // vmoveto
+            y += stack.pop();
+            moveTo(x, y);
+            stackClean = true;
+            break;
+          case 5: // rlineto
+            while (stack.length > 0) {
+              x += stack.shift();
+              y += stack.shift();
+              lineTo(x, y);
+            }
+            break;
+          case 6: // hlineto
+            while (stack.length > 0) {
+              x += stack.shift();
+              lineTo(x, y);
+              if (stack.length === 0) {
+                break;
+              }
+              y += stack.shift();
+              lineTo(x, y);
+            }
+            break;
+          case 7: // vlineto
+            while (stack.length > 0) {
+              y += stack.shift();
+              lineTo(x, y);
+              if (stack.length === 0) {
+                break;
+              }
+              x += stack.shift();
+              lineTo(x, y);
+            }
+            break;
+          case 8: // rrcurveto
+            while (stack.length > 0) {
+              var xa = x + stack.shift(), ya = y + stack.shift();
+              var xb = xa + stack.shift(), yb = ya + stack.shift();
+              x = xb + stack.shift(); y = yb + stack.shift();
+              bezierCurveTo(xa, ya, xb, yb, x, y);
+            }
+            break;
+          case 10: // callsubr
+            var n = stack.pop() + font.subrsBias;
+            var subrCode = font.subrs[n];
+            if (subrCode) {
+              parse(subrCode);
+            }
+            break;
+          case 11: // return
+            return;
+          case 12:
+            v = code[i++];
+            switch (v) {
+              case 34: // flex
+                var xa = x + stack.shift();
+                var xb = xa + stack.shift(), y1 = y + stack.shift();
+                x = xb + stack.shift();
+                bezierCurveTo(xa, y, xb, y1, x, y1);
+                var xa = x + stack.shift();
+                var xb = xa + stack.shift();
+                x = xb + stack.shift();
+                bezierCurveTo(xa, y1, xb, y, x, y);
+                break;
+              case 35: // flex
+                var xa = x + stack.shift(), ya = y + stack.shift();
+                var xb = xa + stack.shift(), yb = ya + stack.shift();
+                x = xb + stack.shift(); y = yb + stack.shift();
+                bezierCurveTo(xa, ya, xb, yb, x, y);
+                var xa = x + stack.shift(), ya = y + stack.shift();
+                var xb = xa + stack.shift(), yb = ya + stack.shift();
+                x = xb + stack.shift(); y = yb + stack.shift();
+                bezierCurveTo(xa, ya, xb, yb, x, y);
+                stack.pop(); // fd
+                break;
+              case 36: // hflex1
+                var xa = x + stack.shift(), y1 = y + stack.shift();
+                var xb = xa + stack.shift(), y2 = y1 + stack.shift();
+                x = xb + stack.shift();
+                bezierCurveTo(xa, y1, xb, y2, x, y2);
+                var xa = x + stack.shift();
+                var xb = xa + stack.shift(), y3 = y2 + stack.shift();
+                x = xb + stack.shift();
+                bezierCurveTo(xa, y2, xb, y3, x, y);
+                break;
+              case 37: // flex1
+                var x0 = x, y0 = y;
+                var xa = x + stack.shift(), ya = y + stack.shift();
+                var xb = xa + stack.shift(), yb = ya + stack.shift();
+                x = xb + stack.shift(); y = yb + stack.shift();
+                bezierCurveTo(xa, ya, xb, yb, x, y);
+                var xa = x + stack.shift(), ya = y + stack.shift();
+                var xb = xa + stack.shift(), yb = ya + stack.shift();
+                x = xb; y = yb;
+                if (Math.abs(x - x0) > Math.abs(y - y0))
+                  x += stack.shift();
+                else
+                  y += stack.shift();
+                bezierCurveTo(xa, ya, xb, yb, x, y);
+                break;
+              default:
+                error('unknown operator: 12 ' + v);
+            }
+            break;
+          case 14: // endchar
+            if (stack.length >= 4) {
+              var achar = stack.pop();
+              var bchar = stack.pop();
+              y = stack.pop();
+              x = stack.pop();
+              js.push('c.save();');
+              js.push('c.translate('+ x + ',' + y + ');');
+              var gid = lookupCmap(font.cmap, String.fromCharCode(
+                font.glyphNameMap[Encodings.StandardEncoding[achar]]));
+              compileCharString(font.glyphs[gid], js, font);
+              js.push('c.restore();');
+
+              gid = lookupCmap(font.cmap, String.fromCharCode(
+                font.glyphNameMap[Encodings.StandardEncoding[bchar]]));
+              compileCharString(font.glyphs[gid], js, font);
+            }
+            return;
+          case 18: // hstemhm
+            stems += stack.length >> 1;
+            stackClean = true;
+            break;
+          case 19: // hintmask
+            stems += stack.length >> 1;
+            i += (stems + 7) >> 3;
+            stackClean = true;
+            break;
+          case 20: // cntrmask
+            stems += stack.length >> 1;
+            i += (stems + 7) >> 3;
+            stackClean = true;
+            break;
+          case 21: // rmoveto
+            y += stack.pop();
+            x += stack.pop();
+            moveTo(x, y);
+            stackClean = true;
+            break;
+          case 22: // hmoveto
+            x += stack.pop();
+            moveTo(x, y);
+            stackClean = true;
+            break;
+          case 23: // vstemhm
+            stems += stack.length >> 1;
+            stackClean = true;
+            break;
+          case 24: // rcurveline
+            while (stack.length > 2) {
+              var xa = x + stack.shift(), ya = y + stack.shift();
+              var xb = xa + stack.shift(), yb = ya + stack.shift();
+              x = xb + stack.shift(); y = yb + stack.shift();
+              bezierCurveTo(xa, ya, xb, yb, x, y);
+            }
+            x += stack.shift();
+            y += stack.shift();
+            lineTo(x, y);
+            break;
+          case 25: // rlinecurve
+            while (stack.length > 6) {
+              x += stack.shift();
+              y += stack.shift();
+              lineTo(x, y);
+            }
+            var xa = x + stack.shift(), ya = y + stack.shift();
+            var xb = xa + stack.shift(), yb = ya + stack.shift();
+            x = xb + stack.shift(); y = yb + stack.shift();
+            bezierCurveTo(xa, ya, xb, yb, x, y);
+            break;
+          case 26: // vvcurveto
+            if (stack.length % 2) {
+              x += stack.shift();
+            }
+            while (stack.length > 0) {
+              var xa = x, ya = y + stack.shift();
+              var xb = xa + stack.shift(), yb = ya + stack.shift();
+              x = xb; y = yb + stack.shift();
+              bezierCurveTo(xa, ya, xb, yb, x, y);
+            }
+            break;
+          case 27: // hhcurveto
+            if (stack.length % 2) {
+              y += stack.shift();
+            }
+            while (stack.length > 0) {
+              var xa = x + stack.shift(), ya = y;
+              var xb = xa + stack.shift(), yb = ya + stack.shift();
+              x = xb + stack.shift(); y = yb;
+              bezierCurveTo(xa, ya, xb, yb, x, y);
+            }
+            break;
+          case 28:
+            stack.push(((code[i] << 24) | (code[i + 1] << 16)) >> 16);
+            i += 2;
+            break;
+          case 29: // callgsubr
+            var n = stack.pop() + font.gsubrsBias;
+            var subrCode = font.gsubrs[n];
+            if (subrCode) {
+              parse(subrCode);
+            }
+            break;
+          case 30: // vhcurveto
+            while (stack.length > 0) {
+              var xa = x, ya = y + stack.shift();
+              var xb = xa + stack.shift(), yb = ya + stack.shift();
+              x = xb + stack.shift();
+              y = yb + (stack.length === 1 ? stack.shift() : 0);
+              bezierCurveTo(xa, ya, xb, yb, x, y);
+              if (stack.length === 0) {
+                break;
+              }
+
+              var xa = x + stack.shift(), ya = y;
+              var xb = xa + stack.shift(), yb = ya + stack.shift();
+              y = yb + stack.shift();
+              x = xb + (stack.length === 1 ? stack.shift() : 0);
+              bezierCurveTo(xa, ya, xb, yb, x, y);
+            }
+            break;
+          case 31: // hvcurveto
+            while (stack.length > 0) {
+              var xa = x + stack.shift(), ya = y;
+              var xb = xa + stack.shift(), yb = ya + stack.shift();
+              y = yb + stack.shift();
+              x = xb + (stack.length === 1 ? stack.shift() : 0);
+              bezierCurveTo(xa, ya, xb, yb, x, y);
+              if (stack.length === 0) {
+                break;
+              }
+
+              var xa = x, ya = y + stack.shift();
+              var xb = xa + stack.shift(), yb = ya + stack.shift();
+              x = xb + stack.shift();
+              y = yb + (stack.length === 1 ? stack.shift() : 0);
+              bezierCurveTo(xa, ya, xb, yb, x, y);
+            }
+            break;
+          default:
+            if (v < 32)
+              error('unknown operator: ' + v);
+            if (v < 247)
+              stack.push(v - 139);
+            else if (v < 251)
+              stack.push((v - 247) * 256 + code[i++] + 108);
+            else if (v < 255)
+              stack.push(-(v - 251) * 256 - code[i++] - 108);
+            else {
+              stack.push(((code[i] << 24) | (code[i + 1] << 16) |
+                         (code[i + 2] << 8) | code[i + 3]) / 65536);
+              i += 4;
+            }
+            break;
+        }
+        if (stackClean) {
+          stack.length = 0;
+        }
+      }
+    }
+    parse(code);
+  }
+
+  var noop = '';
+
+  function CompiledFont(fontMatrix) {
+    this.compiledGlyphs = {};
+    this.fontMatrix = fontMatrix;
+  }
+  CompiledFont.prototype = {
+    getPathJs: function (unicode) {
+      var gid = lookupCmap(this.cmap, unicode);
+      var fn = this.compiledGlyphs[gid];
+      if (!fn) {
+        this.compiledGlyphs[gid] = fn = this.compileGlyph(this.glyphs[gid]);
+      }
+      return fn;
+    },
+
+    compileGlyph: function (code) {
+      if (!code || code.length === 0 || code[0] === 14) {
+        return noop;
+      }
+
+      var js = [];
+      js.push('c.save();');
+      js.push('c.transform(' + this.fontMatrix.join(',') + ');');
+      js.push('c.scale(size, -size);');
+
+      this.compileGlyphImpl(code, js);
+
+      js.push('c.restore();');
+
+      return js.join('\n');
+    },
+
+    compileGlyphImpl: function () {
+      error('Children classes should implement this.');
+    },
+
+    hasBuiltPath: function (unicode) {
+      var gid = lookupCmap(this.cmap, unicode);
+      return gid in this.compiledGlyphs;
+    }
+  };
+
+  function TrueTypeCompiled(glyphs, cmap, fontMatrix) {
+    fontMatrix = fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0];
+    CompiledFont.call(this, fontMatrix);
+
+    this.glyphs = glyphs;
+    this.cmap = cmap;
+
+    this.compiledGlyphs = [];
+  }
+
+  Util.inherit(TrueTypeCompiled, CompiledFont, {
+    compileGlyphImpl: function (code, js) {
+      compileGlyf(code, js, this);
+    }
+  });
+
+  function Type2Compiled(cffInfo, cmap, fontMatrix, glyphNameMap) {
+    fontMatrix = fontMatrix || [0.001, 0, 0, 0.001, 0, 0];
+    CompiledFont.call(this, fontMatrix);
+    this.glyphs = cffInfo.glyphs;
+    this.gsubrs = cffInfo.gsubrs || [];
+    this.subrs = cffInfo.subrs || [];
+    this.cmap = cmap;
+    this.glyphNameMap = glyphNameMap || GlyphsUnicode;
+
+    this.compiledGlyphs = [];
+    this.gsubrsBias = this.gsubrs.length < 1240 ? 107 :
+                      this.gsubrs.length < 33900 ? 1131 : 32768;
+    this.subrsBias = this.subrs.length < 1240 ? 107 :
+                     this.subrs.length < 33900 ? 1131 : 32768;
+  }
+
+  Util.inherit(Type2Compiled, CompiledFont, {
+    compileGlyphImpl: function (code, js) {
+      compileCharString(code, js, this);
+    }
+  });
+
+
+  return {
+    create: function FontRendererFactory_create(font) {
+      var data = new Uint8Array(font.data);
+      var cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm;
+      var numTables = getUshort(data, 4);
+      for (var i = 0, p = 12; i < numTables; i++, p += 16) {
+        var tag = String.fromCharCode.apply(null, data.subarray(p, p + 4));
+        var offset = getLong(data, p + 8);
+        var length = getLong(data, p + 12);
+        switch (tag) {
+          case 'cmap':
+            cmap = parseCmap(data, offset, offset + length);
+            break;
+          case 'glyf':
+            glyf = data.subarray(offset, offset + length);
+            break;
+          case 'loca':
+            loca = data.subarray(offset, offset + length);
+            break;
+          case 'head':
+            unitsPerEm = getUshort(data, offset + 18);
+            indexToLocFormat = getUshort(data, offset + 50);
+            break;
+          case 'CFF ':
+            cff = parseCff(data, offset, offset + length);
+            break;
+        }
+      }
+
+      if (glyf) {
+        var fontMatrix = !unitsPerEm ? font.fontMatrix :
+          [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0];
+        return new TrueTypeCompiled(
+          parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix);
+      } else {
+        return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap);
+      }
+    }
+  };
+})();
+
+
+
+var GlyphsUnicode = {
+  A: 0x0041,
+  AE: 0x00C6,
+  AEacute: 0x01FC,
+  AEmacron: 0x01E2,
+  AEsmall: 0xF7E6,
+  Aacute: 0x00C1,
+  Aacutesmall: 0xF7E1,
+  Abreve: 0x0102,
+  Abreveacute: 0x1EAE,
+  Abrevecyrillic: 0x04D0,
+  Abrevedotbelow: 0x1EB6,
+  Abrevegrave: 0x1EB0,
+  Abrevehookabove: 0x1EB2,
+  Abrevetilde: 0x1EB4,
+  Acaron: 0x01CD,
+  Acircle: 0x24B6,
+  Acircumflex: 0x00C2,
+  Acircumflexacute: 0x1EA4,
+  Acircumflexdotbelow: 0x1EAC,
+  Acircumflexgrave: 0x1EA6,
+  Acircumflexhookabove: 0x1EA8,
+  Acircumflexsmall: 0xF7E2,
+  Acircumflextilde: 0x1EAA,
+  Acute: 0xF6C9,
+  Acutesmall: 0xF7B4,
+  Acyrillic: 0x0410,
+  Adblgrave: 0x0200,
+  Adieresis: 0x00C4,
+  Adieresiscyrillic: 0x04D2,
+  Adieresismacron: 0x01DE,
+  Adieresissmall: 0xF7E4,
+  Adotbelow: 0x1EA0,
+  Adotmacron: 0x01E0,
+  Agrave: 0x00C0,
+  Agravesmall: 0xF7E0,
+  Ahookabove: 0x1EA2,
+  Aiecyrillic: 0x04D4,
+  Ainvertedbreve: 0x0202,
+  Alpha: 0x0391,
+  Alphatonos: 0x0386,
+  Amacron: 0x0100,
+  Amonospace: 0xFF21,
+  Aogonek: 0x0104,
+  Aring: 0x00C5,
+  Aringacute: 0x01FA,
+  Aringbelow: 0x1E00,
+  Aringsmall: 0xF7E5,
+  Asmall: 0xF761,
+  Atilde: 0x00C3,
+  Atildesmall: 0xF7E3,
+  Aybarmenian: 0x0531,
+  B: 0x0042,
+  Bcircle: 0x24B7,
+  Bdotaccent: 0x1E02,
+  Bdotbelow: 0x1E04,
+  Becyrillic: 0x0411,
+  Benarmenian: 0x0532,
+  Beta: 0x0392,
+  Bhook: 0x0181,
+  Blinebelow: 0x1E06,
+  Bmonospace: 0xFF22,
+  Brevesmall: 0xF6F4,
+  Bsmall: 0xF762,
+  Btopbar: 0x0182,
+  C: 0x0043,
+  Caarmenian: 0x053E,
+  Cacute: 0x0106,
+  Caron: 0xF6CA,
+  Caronsmall: 0xF6F5,
+  Ccaron: 0x010C,
+  Ccedilla: 0x00C7,
+  Ccedillaacute: 0x1E08,
+  Ccedillasmall: 0xF7E7,
+  Ccircle: 0x24B8,
+  Ccircumflex: 0x0108,
+  Cdot: 0x010A,
+  Cdotaccent: 0x010A,
+  Cedillasmall: 0xF7B8,
+  Chaarmenian: 0x0549,
+  Cheabkhasiancyrillic: 0x04BC,
+  Checyrillic: 0x0427,
+  Chedescenderabkhasiancyrillic: 0x04BE,
+  Chedescendercyrillic: 0x04B6,
+  Chedieresiscyrillic: 0x04F4,
+  Cheharmenian: 0x0543,
+  Chekhakassiancyrillic: 0x04CB,
+  Cheverticalstrokecyrillic: 0x04B8,
+  Chi: 0x03A7,
+  Chook: 0x0187,
+  Circumflexsmall: 0xF6F6,
+  Cmonospace: 0xFF23,
+  Coarmenian: 0x0551,
+  Csmall: 0xF763,
+  D: 0x0044,
+  DZ: 0x01F1,
+  DZcaron: 0x01C4,
+  Daarmenian: 0x0534,
+  Dafrican: 0x0189,
+  Dcaron: 0x010E,
+  Dcedilla: 0x1E10,
+  Dcircle: 0x24B9,
+  Dcircumflexbelow: 0x1E12,
+  Dcroat: 0x0110,
+  Ddotaccent: 0x1E0A,
+  Ddotbelow: 0x1E0C,
+  Decyrillic: 0x0414,
+  Deicoptic: 0x03EE,
+  Delta: 0x2206,
+  Deltagreek: 0x0394,
+  Dhook: 0x018A,
+  Dieresis: 0xF6CB,
+  DieresisAcute: 0xF6CC,
+  DieresisGrave: 0xF6CD,
+  Dieresissmall: 0xF7A8,
+  Digammagreek: 0x03DC,
+  Djecyrillic: 0x0402,
+  Dlinebelow: 0x1E0E,
+  Dmonospace: 0xFF24,
+  Dotaccentsmall: 0xF6F7,
+  Dslash: 0x0110,
+  Dsmall: 0xF764,
+  Dtopbar: 0x018B,
+  Dz: 0x01F2,
+  Dzcaron: 0x01C5,
+  Dzeabkhasiancyrillic: 0x04E0,
+  Dzecyrillic: 0x0405,
+  Dzhecyrillic: 0x040F,
+  E: 0x0045,
+  Eacute: 0x00C9,
+  Eacutesmall: 0xF7E9,
+  Ebreve: 0x0114,
+  Ecaron: 0x011A,
+  Ecedillabreve: 0x1E1C,
+  Echarmenian: 0x0535,
+  Ecircle: 0x24BA,
+  Ecircumflex: 0x00CA,
+  Ecircumflexacute: 0x1EBE,
+  Ecircumflexbelow: 0x1E18,
+  Ecircumflexdotbelow: 0x1EC6,
+  Ecircumflexgrave: 0x1EC0,
+  Ecircumflexhookabove: 0x1EC2,
+  Ecircumflexsmall: 0xF7EA,
+  Ecircumflextilde: 0x1EC4,
+  Ecyrillic: 0x0404,
+  Edblgrave: 0x0204,
+  Edieresis: 0x00CB,
+  Edieresissmall: 0xF7EB,
+  Edot: 0x0116,
+  Edotaccent: 0x0116,
+  Edotbelow: 0x1EB8,
+  Efcyrillic: 0x0424,
+  Egrave: 0x00C8,
+  Egravesmall: 0xF7E8,
+  Eharmenian: 0x0537,
+  Ehookabove: 0x1EBA,
+  Eightroman: 0x2167,
+  Einvertedbreve: 0x0206,
+  Eiotifiedcyrillic: 0x0464,
+  Elcyrillic: 0x041B,
+  Elevenroman: 0x216A,
+  Emacron: 0x0112,
+  Emacronacute: 0x1E16,
+  Emacrongrave: 0x1E14,
+  Emcyrillic: 0x041C,
+  Emonospace: 0xFF25,
+  Encyrillic: 0x041D,
+  Endescendercyrillic: 0x04A2,
+  Eng: 0x014A,
+  Enghecyrillic: 0x04A4,
+  Enhookcyrillic: 0x04C7,
+  Eogonek: 0x0118,
+  Eopen: 0x0190,
+  Epsilon: 0x0395,
+  Epsilontonos: 0x0388,
+  Ercyrillic: 0x0420,
+  Ereversed: 0x018E,
+  Ereversedcyrillic: 0x042D,
+  Escyrillic: 0x0421,
+  Esdescendercyrillic: 0x04AA,
+  Esh: 0x01A9,
+  Esmall: 0xF765,
+  Eta: 0x0397,
+  Etarmenian: 0x0538,
+  Etatonos: 0x0389,
+  Eth: 0x00D0,
+  Ethsmall: 0xF7F0,
+  Etilde: 0x1EBC,
+  Etildebelow: 0x1E1A,
+  Euro: 0x20AC,
+  Ezh: 0x01B7,
+  Ezhcaron: 0x01EE,
+  Ezhreversed: 0x01B8,
+  F: 0x0046,
+  Fcircle: 0x24BB,
+  Fdotaccent: 0x1E1E,
+  Feharmenian: 0x0556,
+  Feicoptic: 0x03E4,
+  Fhook: 0x0191,
+  Fitacyrillic: 0x0472,
+  Fiveroman: 0x2164,
+  Fmonospace: 0xFF26,
+  Fourroman: 0x2163,
+  Fsmall: 0xF766,
+  G: 0x0047,
+  GBsquare: 0x3387,
+  Gacute: 0x01F4,
+  Gamma: 0x0393,
+  Gammaafrican: 0x0194,
+  Gangiacoptic: 0x03EA,
+  Gbreve: 0x011E,
+  Gcaron: 0x01E6,
+  Gcedilla: 0x0122,
+  Gcircle: 0x24BC,
+  Gcircumflex: 0x011C,
+  Gcommaaccent: 0x0122,
+  Gdot: 0x0120,
+  Gdotaccent: 0x0120,
+  Gecyrillic: 0x0413,
+  Ghadarmenian: 0x0542,
+  Ghemiddlehookcyrillic: 0x0494,
+  Ghestrokecyrillic: 0x0492,
+  Gheupturncyrillic: 0x0490,
+  Ghook: 0x0193,
+  Gimarmenian: 0x0533,
+  Gjecyrillic: 0x0403,
+  Gmacron: 0x1E20,
+  Gmonospace: 0xFF27,
+  Grave: 0xF6CE,
+  Gravesmall: 0xF760,
+  Gsmall: 0xF767,
+  Gsmallhook: 0x029B,
+  Gstroke: 0x01E4,
+  H: 0x0048,
+  H18533: 0x25CF,
+  H18543: 0x25AA,
+  H18551: 0x25AB,
+  H22073: 0x25A1,
+  HPsquare: 0x33CB,
+  Haabkhasiancyrillic: 0x04A8,
+  Hadescendercyrillic: 0x04B2,
+  Hardsigncyrillic: 0x042A,
+  Hbar: 0x0126,
+  Hbrevebelow: 0x1E2A,
+  Hcedilla: 0x1E28,
+  Hcircle: 0x24BD,
+  Hcircumflex: 0x0124,
+  Hdieresis: 0x1E26,
+  Hdotaccent: 0x1E22,
+  Hdotbelow: 0x1E24,
+  Hmonospace: 0xFF28,
+  Hoarmenian: 0x0540,
+  Horicoptic: 0x03E8,
+  Hsmall: 0xF768,
+  Hungarumlaut: 0xF6CF,
+  Hungarumlautsmall: 0xF6F8,
+  Hzsquare: 0x3390,
+  I: 0x0049,
+  IAcyrillic: 0x042F,
+  IJ: 0x0132,
+  IUcyrillic: 0x042E,
+  Iacute: 0x00CD,
+  Iacutesmall: 0xF7ED,
+  Ibreve: 0x012C,
+  Icaron: 0x01CF,
+  Icircle: 0x24BE,
+  Icircumflex: 0x00CE,
+  Icircumflexsmall: 0xF7EE,
+  Icyrillic: 0x0406,
+  Idblgrave: 0x0208,
+  Idieresis: 0x00CF,
+  Idieresisacute: 0x1E2E,
+  Idieresiscyrillic: 0x04E4,
+  Idieresissmall: 0xF7EF,
+  Idot: 0x0130,
+  Idotaccent: 0x0130,
+  Idotbelow: 0x1ECA,
+  Iebrevecyrillic: 0x04D6,
+  Iecyrillic: 0x0415,
+  Ifraktur: 0x2111,
+  Igrave: 0x00CC,
+  Igravesmall: 0xF7EC,
+  Ihookabove: 0x1EC8,
+  Iicyrillic: 0x0418,
+  Iinvertedbreve: 0x020A,
+  Iishortcyrillic: 0x0419,
+  Imacron: 0x012A,
+  Imacroncyrillic: 0x04E2,
+  Imonospace: 0xFF29,
+  Iniarmenian: 0x053B,
+  Iocyrillic: 0x0401,
+  Iogonek: 0x012E,
+  Iota: 0x0399,
+  Iotaafrican: 0x0196,
+  Iotadieresis: 0x03AA,
+  Iotatonos: 0x038A,
+  Ismall: 0xF769,
+  Istroke: 0x0197,
+  Itilde: 0x0128,
+  Itildebelow: 0x1E2C,
+  Izhitsacyrillic: 0x0474,
+  Izhitsadblgravecyrillic: 0x0476,
+  J: 0x004A,
+  Jaarmenian: 0x0541,
+  Jcircle: 0x24BF,
+  Jcircumflex: 0x0134,
+  Jecyrillic: 0x0408,
+  Jheharmenian: 0x054B,
+  Jmonospace: 0xFF2A,
+  Jsmall: 0xF76A,
+  K: 0x004B,
+  KBsquare: 0x3385,
+  KKsquare: 0x33CD,
+  Kabashkircyrillic: 0x04A0,
+  Kacute: 0x1E30,
+  Kacyrillic: 0x041A,
+  Kadescendercyrillic: 0x049A,
+  Kahookcyrillic: 0x04C3,
+  Kappa: 0x039A,
+  Kastrokecyrillic: 0x049E,
+  Kaverticalstrokecyrillic: 0x049C,
+  Kcaron: 0x01E8,
+  Kcedilla: 0x0136,
+  Kcircle: 0x24C0,
+  Kcommaaccent: 0x0136,
+  Kdotbelow: 0x1E32,
+  Keharmenian: 0x0554,
+  Kenarmenian: 0x053F,
+  Khacyrillic: 0x0425,
+  Kheicoptic: 0x03E6,
+  Khook: 0x0198,
+  Kjecyrillic: 0x040C,
+  Klinebelow: 0x1E34,
+  Kmonospace: 0xFF2B,
+  Koppacyrillic: 0x0480,
+  Koppagreek: 0x03DE,
+  Ksicyrillic: 0x046E,
+  Ksmall: 0xF76B,
+  L: 0x004C,
+  LJ: 0x01C7,
+  LL: 0xF6BF,
+  Lacute: 0x0139,
+  Lambda: 0x039B,
+  Lcaron: 0x013D,
+  Lcedilla: 0x013B,
+  Lcircle: 0x24C1,
+  Lcircumflexbelow: 0x1E3C,
+  Lcommaaccent: 0x013B,
+  Ldot: 0x013F,
+  Ldotaccent: 0x013F,
+  Ldotbelow: 0x1E36,
+  Ldotbelowmacron: 0x1E38,
+  Liwnarmenian: 0x053C,
+  Lj: 0x01C8,
+  Ljecyrillic: 0x0409,
+  Llinebelow: 0x1E3A,
+  Lmonospace: 0xFF2C,
+  Lslash: 0x0141,
+  Lslashsmall: 0xF6F9,
+  Lsmall: 0xF76C,
+  M: 0x004D,
+  MBsquare: 0x3386,
+  Macron: 0xF6D0,
+  Macronsmall: 0xF7AF,
+  Macute: 0x1E3E,
+  Mcircle: 0x24C2,
+  Mdotaccent: 0x1E40,
+  Mdotbelow: 0x1E42,
+  Menarmenian: 0x0544,
+  Mmonospace: 0xFF2D,
+  Msmall: 0xF76D,
+  Mturned: 0x019C,
+  Mu: 0x039C,
+  N: 0x004E,
+  NJ: 0x01CA,
+  Nacute: 0x0143,
+  Ncaron: 0x0147,
+  Ncedilla: 0x0145,
+  Ncircle: 0x24C3,
+  Ncircumflexbelow: 0x1E4A,
+  Ncommaaccent: 0x0145,
+  Ndotaccent: 0x1E44,
+  Ndotbelow: 0x1E46,
+  Nhookleft: 0x019D,
+  Nineroman: 0x2168,
+  Nj: 0x01CB,
+  Njecyrillic: 0x040A,
+  Nlinebelow: 0x1E48,
+  Nmonospace: 0xFF2E,
+  Nowarmenian: 0x0546,
+  Nsmall: 0xF76E,
+  Ntilde: 0x00D1,
+  Ntildesmall: 0xF7F1,
+  Nu: 0x039D,
+  O: 0x004F,
+  OE: 0x0152,
+  OEsmall: 0xF6FA,
+  Oacute: 0x00D3,
+  Oacutesmall: 0xF7F3,
+  Obarredcyrillic: 0x04E8,
+  Obarreddieresiscyrillic: 0x04EA,
+  Obreve: 0x014E,
+  Ocaron: 0x01D1,
+  Ocenteredtilde: 0x019F,
+  Ocircle: 0x24C4,
+  Ocircumflex: 0x00D4,
+  Ocircumflexacute: 0x1ED0,
+  Ocircumflexdotbelow: 0x1ED8,
+  Ocircumflexgrave: 0x1ED2,
+  Ocircumflexhookabove: 0x1ED4,
+  Ocircumflexsmall: 0xF7F4,
+  Ocircumflextilde: 0x1ED6,
+  Ocyrillic: 0x041E,
+  Odblacute: 0x0150,
+  Odblgrave: 0x020C,
+  Odieresis: 0x00D6,
+  Odieresiscyrillic: 0x04E6,
+  Odieresissmall: 0xF7F6,
+  Odotbelow: 0x1ECC,
+  Ogoneksmall: 0xF6FB,
+  Ograve: 0x00D2,
+  Ogravesmall: 0xF7F2,
+  Oharmenian: 0x0555,
+  Ohm: 0x2126,
+  Ohookabove: 0x1ECE,
+  Ohorn: 0x01A0,
+  Ohornacute: 0x1EDA,
+  Ohorndotbelow: 0x1EE2,
+  Ohorngrave: 0x1EDC,
+  Ohornhookabove: 0x1EDE,
+  Ohorntilde: 0x1EE0,
+  Ohungarumlaut: 0x0150,
+  Oi: 0x01A2,
+  Oinvertedbreve: 0x020E,
+  Omacron: 0x014C,
+  Omacronacute: 0x1E52,
+  Omacrongrave: 0x1E50,
+  Omega: 0x2126,
+  Omegacyrillic: 0x0460,
+  Omegagreek: 0x03A9,
+  Omegaroundcyrillic: 0x047A,
+  Omegatitlocyrillic: 0x047C,
+  Omegatonos: 0x038F,
+  Omicron: 0x039F,
+  Omicrontonos: 0x038C,
+  Omonospace: 0xFF2F,
+  Oneroman: 0x2160,
+  Oogonek: 0x01EA,
+  Oogonekmacron: 0x01EC,
+  Oopen: 0x0186,
+  Oslash: 0x00D8,
+  Oslashacute: 0x01FE,
+  Oslashsmall: 0xF7F8,
+  Osmall: 0xF76F,
+  Ostrokeacute: 0x01FE,
+  Otcyrillic: 0x047E,
+  Otilde: 0x00D5,
+  Otildeacute: 0x1E4C,
+  Otildedieresis: 0x1E4E,
+  Otildesmall: 0xF7F5,
+  P: 0x0050,
+  Pacute: 0x1E54,
+  Pcircle: 0x24C5,
+  Pdotaccent: 0x1E56,
+  Pecyrillic: 0x041F,
+  Peharmenian: 0x054A,
+  Pemiddlehookcyrillic: 0x04A6,
+  Phi: 0x03A6,
+  Phook: 0x01A4,
+  Pi: 0x03A0,
+  Piwrarmenian: 0x0553,
+  Pmonospace: 0xFF30,
+  Psi: 0x03A8,
+  Psicyrillic: 0x0470,
+  Psmall: 0xF770,
+  Q: 0x0051,
+  Qcircle: 0x24C6,
+  Qmonospace: 0xFF31,
+  Qsmall: 0xF771,
+  R: 0x0052,
+  Raarmenian: 0x054C,
+  Racute: 0x0154,
+  Rcaron: 0x0158,
+  Rcedilla: 0x0156,
+  Rcircle: 0x24C7,
+  Rcommaaccent: 0x0156,
+  Rdblgrave: 0x0210,
+  Rdotaccent: 0x1E58,
+  Rdotbelow: 0x1E5A,
+  Rdotbelowmacron: 0x1E5C,
+  Reharmenian: 0x0550,
+  Rfraktur: 0x211C,
+  Rho: 0x03A1,
+  Ringsmall: 0xF6FC,
+  Rinvertedbreve: 0x0212,
+  Rlinebelow: 0x1E5E,
+  Rmonospace: 0xFF32,
+  Rsmall: 0xF772,
+  Rsmallinverted: 0x0281,
+  Rsmallinvertedsuperior: 0x02B6,
+  S: 0x0053,
+  SF010000: 0x250C,
+  SF020000: 0x2514,
+  SF030000: 0x2510,
+  SF040000: 0x2518,
+  SF050000: 0x253C,
+  SF060000: 0x252C,
+  SF070000: 0x2534,
+  SF080000: 0x251C,
+  SF090000: 0x2524,
+  SF100000: 0x2500,
+  SF110000: 0x2502,
+  SF190000: 0x2561,
+  SF200000: 0x2562,
+  SF210000: 0x2556,
+  SF220000: 0x2555,
+  SF230000: 0x2563,
+  SF240000: 0x2551,
+  SF250000: 0x2557,
+  SF260000: 0x255D,
+  SF270000: 0x255C,
+  SF280000: 0x255B,
+  SF360000: 0x255E,
+  SF370000: 0x255F,
+  SF380000: 0x255A,
+  SF390000: 0x2554,
+  SF400000: 0x2569,
+  SF410000: 0x2566,
+  SF420000: 0x2560,
+  SF430000: 0x2550,
+  SF440000: 0x256C,
+  SF450000: 0x2567,
+  SF460000: 0x2568,
+  SF470000: 0x2564,
+  SF480000: 0x2565,
+  SF490000: 0x2559,
+  SF500000: 0x2558,
+  SF510000: 0x2552,
+  SF520000: 0x2553,
+  SF530000: 0x256B,
+  SF540000: 0x256A,
+  Sacute: 0x015A,
+  Sacutedotaccent: 0x1E64,
+  Sampigreek: 0x03E0,
+  Scaron: 0x0160,
+  Scarondotaccent: 0x1E66,
+  Scaronsmall: 0xF6FD,
+  Scedilla: 0x015E,
+  Schwa: 0x018F,
+  Schwacyrillic: 0x04D8,
+  Schwadieresiscyrillic: 0x04DA,
+  Scircle: 0x24C8,
+  Scircumflex: 0x015C,
+  Scommaaccent: 0x0218,
+  Sdotaccent: 0x1E60,
+  Sdotbelow: 0x1E62,
+  Sdotbelowdotaccent: 0x1E68,
+  Seharmenian: 0x054D,
+  Sevenroman: 0x2166,
+  Shaarmenian: 0x0547,
+  Shacyrillic: 0x0428,
+  Shchacyrillic: 0x0429,
+  Sheicoptic: 0x03E2,
+  Shhacyrillic: 0x04BA,
+  Shimacoptic: 0x03EC,
+  Sigma: 0x03A3,
+  Sixroman: 0x2165,
+  Smonospace: 0xFF33,
+  Softsigncyrillic: 0x042C,
+  Ssmall: 0xF773,
+  Stigmagreek: 0x03DA,
+  T: 0x0054,
+  Tau: 0x03A4,
+  Tbar: 0x0166,
+  Tcaron: 0x0164,
+  Tcedilla: 0x0162,
+  Tcircle: 0x24C9,
+  Tcircumflexbelow: 0x1E70,
+  Tcommaaccent: 0x0162,
+  Tdotaccent: 0x1E6A,
+  Tdotbelow: 0x1E6C,
+  Tecyrillic: 0x0422,
+  Tedescendercyrillic: 0x04AC,
+  Tenroman: 0x2169,
+  Tetsecyrillic: 0x04B4,
+  Theta: 0x0398,
+  Thook: 0x01AC,
+  Thorn: 0x00DE,
+  Thornsmall: 0xF7FE,
+  Threeroman: 0x2162,
+  Tildesmall: 0xF6FE,
+  Tiwnarmenian: 0x054F,
+  Tlinebelow: 0x1E6E,
+  Tmonospace: 0xFF34,
+  Toarmenian: 0x0539,
+  Tonefive: 0x01BC,
+  Tonesix: 0x0184,
+  Tonetwo: 0x01A7,
+  Tretroflexhook: 0x01AE,
+  Tsecyrillic: 0x0426,
+  Tshecyrillic: 0x040B,
+  Tsmall: 0xF774,
+  Twelveroman: 0x216B,
+  Tworoman: 0x2161,
+  U: 0x0055,
+  Uacute: 0x00DA,
+  Uacutesmall: 0xF7FA,
+  Ubreve: 0x016C,
+  Ucaron: 0x01D3,
+  Ucircle: 0x24CA,
+  Ucircumflex: 0x00DB,
+  Ucircumflexbelow: 0x1E76,
+  Ucircumflexsmall: 0xF7FB,
+  Ucyrillic: 0x0423,
+  Udblacute: 0x0170,
+  Udblgrave: 0x0214,
+  Udieresis: 0x00DC,
+  Udieresisacute: 0x01D7,
+  Udieresisbelow: 0x1E72,
+  Udieresiscaron: 0x01D9,
+  Udieresiscyrillic: 0x04F0,
+  Udieresisgrave: 0x01DB,
+  Udieresismacron: 0x01D5,
+  Udieresissmall: 0xF7FC,
+  Udotbelow: 0x1EE4,
+  Ugrave: 0x00D9,
+  Ugravesmall: 0xF7F9,
+  Uhookabove: 0x1EE6,
+  Uhorn: 0x01AF,
+  Uhornacute: 0x1EE8,
+  Uhorndotbelow: 0x1EF0,
+  Uhorngrave: 0x1EEA,
+  Uhornhookabove: 0x1EEC,
+  Uhorntilde: 0x1EEE,
+  Uhungarumlaut: 0x0170,
+  Uhungarumlautcyrillic: 0x04F2,
+  Uinvertedbreve: 0x0216,
+  Ukcyrillic: 0x0478,
+  Umacron: 0x016A,
+  Umacroncyrillic: 0x04EE,
+  Umacrondieresis: 0x1E7A,
+  Umonospace: 0xFF35,
+  Uogonek: 0x0172,
+  Upsilon: 0x03A5,
+  Upsilon1: 0x03D2,
+  Upsilonacutehooksymbolgreek: 0x03D3,
+  Upsilonafrican: 0x01B1,
+  Upsilondieresis: 0x03AB,
+  Upsilondieresishooksymbolgreek: 0x03D4,
+  Upsilonhooksymbol: 0x03D2,
+  Upsilontonos: 0x038E,
+  Uring: 0x016E,
+  Ushortcyrillic: 0x040E,
+  Usmall: 0xF775,
+  Ustraightcyrillic: 0x04AE,
+  Ustraightstrokecyrillic: 0x04B0,
+  Utilde: 0x0168,
+  Utildeacute: 0x1E78,
+  Utildebelow: 0x1E74,
+  V: 0x0056,
+  Vcircle: 0x24CB,
+  Vdotbelow: 0x1E7E,
+  Vecyrillic: 0x0412,
+  Vewarmenian: 0x054E,
+  Vhook: 0x01B2,
+  Vmonospace: 0xFF36,
+  Voarmenian: 0x0548,
+  Vsmall: 0xF776,
+  Vtilde: 0x1E7C,
+  W: 0x0057,
+  Wacute: 0x1E82,
+  Wcircle: 0x24CC,
+  Wcircumflex: 0x0174,
+  Wdieresis: 0x1E84,
+  Wdotaccent: 0x1E86,
+  Wdotbelow: 0x1E88,
+  Wgrave: 0x1E80,
+  Wmonospace: 0xFF37,
+  Wsmall: 0xF777,
+  X: 0x0058,
+  Xcircle: 0x24CD,
+  Xdieresis: 0x1E8C,
+  Xdotaccent: 0x1E8A,
+  Xeharmenian: 0x053D,
+  Xi: 0x039E,
+  Xmonospace: 0xFF38,
+  Xsmall: 0xF778,
+  Y: 0x0059,
+  Yacute: 0x00DD,
+  Yacutesmall: 0xF7FD,
+  Yatcyrillic: 0x0462,
+  Ycircle: 0x24CE,
+  Ycircumflex: 0x0176,
+  Ydieresis: 0x0178,
+  Ydieresissmall: 0xF7FF,
+  Ydotaccent: 0x1E8E,
+  Ydotbelow: 0x1EF4,
+  Yericyrillic: 0x042B,
+  Yerudieresiscyrillic: 0x04F8,
+  Ygrave: 0x1EF2,
+  Yhook: 0x01B3,
+  Yhookabove: 0x1EF6,
+  Yiarmenian: 0x0545,
+  Yicyrillic: 0x0407,
+  Yiwnarmenian: 0x0552,
+  Ymonospace: 0xFF39,
+  Ysmall: 0xF779,
+  Ytilde: 0x1EF8,
+  Yusbigcyrillic: 0x046A,
+  Yusbigiotifiedcyrillic: 0x046C,
+  Yuslittlecyrillic: 0x0466,
+  Yuslittleiotifiedcyrillic: 0x0468,
+  Z: 0x005A,
+  Zaarmenian: 0x0536,
+  Zacute: 0x0179,
+  Zcaron: 0x017D,
+  Zcaronsmall: 0xF6FF,
+  Zcircle: 0x24CF,
+  Zcircumflex: 0x1E90,
+  Zdot: 0x017B,
+  Zdotaccent: 0x017B,
+  Zdotbelow: 0x1E92,
+  Zecyrillic: 0x0417,
+  Zedescendercyrillic: 0x0498,
+  Zedieresiscyrillic: 0x04DE,
+  Zeta: 0x0396,
+  Zhearmenian: 0x053A,
+  Zhebrevecyrillic: 0x04C1,
+  Zhecyrillic: 0x0416,
+  Zhedescendercyrillic: 0x0496,
+  Zhedieresiscyrillic: 0x04DC,
+  Zlinebelow: 0x1E94,
+  Zmonospace: 0xFF3A,
+  Zsmall: 0xF77A,
+  Zstroke: 0x01B5,
+  a: 0x0061,
+  aabengali: 0x0986,
+  aacute: 0x00E1,
+  aadeva: 0x0906,
+  aagujarati: 0x0A86,
+  aagurmukhi: 0x0A06,
+  aamatragurmukhi: 0x0A3E,
+  aarusquare: 0x3303,
+  aavowelsignbengali: 0x09BE,
+  aavowelsigndeva: 0x093E,
+  aavowelsigngujarati: 0x0ABE,
+  abbreviationmarkarmenian: 0x055F,
+  abbreviationsigndeva: 0x0970,
+  abengali: 0x0985,
+  abopomofo: 0x311A,
+  abreve: 0x0103,
+  abreveacute: 0x1EAF,
+  abrevecyrillic: 0x04D1,
+  abrevedotbelow: 0x1EB7,
+  abrevegrave: 0x1EB1,
+  abrevehookabove: 0x1EB3,
+  abrevetilde: 0x1EB5,
+  acaron: 0x01CE,
+  acircle: 0x24D0,
+  acircumflex: 0x00E2,
+  acircumflexacute: 0x1EA5,
+  acircumflexdotbelow: 0x1EAD,
+  acircumflexgrave: 0x1EA7,
+  acircumflexhookabove: 0x1EA9,
+  acircumflextilde: 0x1EAB,
+  acute: 0x00B4,
+  acutebelowcmb: 0x0317,
+  acutecmb: 0x0301,
+  acutecomb: 0x0301,
+  acutedeva: 0x0954,
+  acutelowmod: 0x02CF,
+  acutetonecmb: 0x0341,
+  acyrillic: 0x0430,
+  adblgrave: 0x0201,
+  addakgurmukhi: 0x0A71,
+  adeva: 0x0905,
+  adieresis: 0x00E4,
+  adieresiscyrillic: 0x04D3,
+  adieresismacron: 0x01DF,
+  adotbelow: 0x1EA1,
+  adotmacron: 0x01E1,
+  ae: 0x00E6,
+  aeacute: 0x01FD,
+  aekorean: 0x3150,
+  aemacron: 0x01E3,
+  afii00208: 0x2015,
+  afii08941: 0x20A4,
+  afii10017: 0x0410,
+  afii10018: 0x0411,
+  afii10019: 0x0412,
+  afii10020: 0x0413,
+  afii10021: 0x0414,
+  afii10022: 0x0415,
+  afii10023: 0x0401,
+  afii10024: 0x0416,
+  afii10025: 0x0417,
+  afii10026: 0x0418,
+  afii10027: 0x0419,
+  afii10028: 0x041A,
+  afii10029: 0x041B,
+  afii10030: 0x041C,
+  afii10031: 0x041D,
+  afii10032: 0x041E,
+  afii10033: 0x041F,
+  afii10034: 0x0420,
+  afii10035: 0x0421,
+  afii10036: 0x0422,
+  afii10037: 0x0423,
+  afii10038: 0x0424,
+  afii10039: 0x0425,
+  afii10040: 0x0426,
+  afii10041: 0x0427,
+  afii10042: 0x0428,
+  afii10043: 0x0429,
+  afii10044: 0x042A,
+  afii10045: 0x042B,
+  afii10046: 0x042C,
+  afii10047: 0x042D,
+  afii10048: 0x042E,
+  afii10049: 0x042F,
+  afii10050: 0x0490,
+  afii10051: 0x0402,
+  afii10052: 0x0403,
+  afii10053: 0x0404,
+  afii10054: 0x0405,
+  afii10055: 0x0406,
+  afii10056: 0x0407,
+  afii10057: 0x0408,
+  afii10058: 0x0409,
+  afii10059: 0x040A,
+  afii10060: 0x040B,
+  afii10061: 0x040C,
+  afii10062: 0x040E,
+  afii10063: 0xF6C4,
+  afii10064: 0xF6C5,
+  afii10065: 0x0430,
+  afii10066: 0x0431,
+  afii10067: 0x0432,
+  afii10068: 0x0433,
+  afii10069: 0x0434,
+  afii10070: 0x0435,
+  afii10071: 0x0451,
+  afii10072: 0x0436,
+  afii10073: 0x0437,
+  afii10074: 0x0438,
+  afii10075: 0x0439,
+  afii10076: 0x043A,
+  afii10077: 0x043B,
+  afii10078: 0x043C,
+  afii10079: 0x043D,
+  afii10080: 0x043E,
+  afii10081: 0x043F,
+  afii10082: 0x0440,
+  afii10083: 0x0441,
+  afii10084: 0x0442,
+  afii10085: 0x0443,
+  afii10086: 0x0444,
+  afii10087: 0x0445,
+  afii10088: 0x0446,
+  afii10089: 0x0447,
+  afii10090: 0x0448,
+  afii10091: 0x0449,
+  afii10092: 0x044A,
+  afii10093: 0x044B,
+  afii10094: 0x044C,
+  afii10095: 0x044D,
+  afii10096: 0x044E,
+  afii10097: 0x044F,
+  afii10098: 0x0491,
+  afii10099: 0x0452,
+  afii10100: 0x0453,
+  afii10101: 0x0454,
+  afii10102: 0x0455,
+  afii10103: 0x0456,
+  afii10104: 0x0457,
+  afii10105: 0x0458,
+  afii10106: 0x0459,
+  afii10107: 0x045A,
+  afii10108: 0x045B,
+  afii10109: 0x045C,
+  afii10110: 0x045E,
+  afii10145: 0x040F,
+  afii10146: 0x0462,
+  afii10147: 0x0472,
+  afii10148: 0x0474,
+  afii10192: 0xF6C6,
+  afii10193: 0x045F,
+  afii10194: 0x0463,
+  afii10195: 0x0473,
+  afii10196: 0x0475,
+  afii10831: 0xF6C7,
+  afii10832: 0xF6C8,
+  afii10846: 0x04D9,
+  afii299: 0x200E,
+  afii300: 0x200F,
+  afii301: 0x200D,
+  afii57381: 0x066A,
+  afii57388: 0x060C,
+  afii57392: 0x0660,
+  afii57393: 0x0661,
+  afii57394: 0x0662,
+  afii57395: 0x0663,
+  afii57396: 0x0664,
+  afii57397: 0x0665,
+  afii57398: 0x0666,
+  afii57399: 0x0667,
+  afii57400: 0x0668,
+  afii57401: 0x0669,
+  afii57403: 0x061B,
+  afii57407: 0x061F,
+  afii57409: 0x0621,
+  afii57410: 0x0622,
+  afii57411: 0x0623,
+  afii57412: 0x0624,
+  afii57413: 0x0625,
+  afii57414: 0x0626,
+  afii57415: 0x0627,
+  afii57416: 0x0628,
+  afii57417: 0x0629,
+  afii57418: 0x062A,
+  afii57419: 0x062B,
+  afii57420: 0x062C,
+  afii57421: 0x062D,
+  afii57422: 0x062E,
+  afii57423: 0x062F,
+  afii57424: 0x0630,
+  afii57425: 0x0631,
+  afii57426: 0x0632,
+  afii57427: 0x0633,
+  afii57428: 0x0634,
+  afii57429: 0x0635,
+  afii57430: 0x0636,
+  afii57431: 0x0637,
+  afii57432: 0x0638,
+  afii57433: 0x0639,
+  afii57434: 0x063A,
+  afii57440: 0x0640,
+  afii57441: 0x0641,
+  afii57442: 0x0642,
+  afii57443: 0x0643,
+  afii57444: 0x0644,
+  afii57445: 0x0645,
+  afii57446: 0x0646,
+  afii57448: 0x0648,
+  afii57449: 0x0649,
+  afii57450: 0x064A,
+  afii57451: 0x064B,
+  afii57452: 0x064C,
+  afii57453: 0x064D,
+  afii57454: 0x064E,
+  afii57455: 0x064F,
+  afii57456: 0x0650,
+  afii57457: 0x0651,
+  afii57458: 0x0652,
+  afii57470: 0x0647,
+  afii57505: 0x06A4,
+  afii57506: 0x067E,
+  afii57507: 0x0686,
+  afii57508: 0x0698,
+  afii57509: 0x06AF,
+  afii57511: 0x0679,
+  afii57512: 0x0688,
+  afii57513: 0x0691,
+  afii57514: 0x06BA,
+  afii57519: 0x06D2,
+  afii57534: 0x06D5,
+  afii57636: 0x20AA,
+  afii57645: 0x05BE,
+  afii57658: 0x05C3,
+  afii57664: 0x05D0,
+  afii57665: 0x05D1,
+  afii57666: 0x05D2,
+  afii57667: 0x05D3,
+  afii57668: 0x05D4,
+  afii57669: 0x05D5,
+  afii57670: 0x05D6,
+  afii57671: 0x05D7,
+  afii57672: 0x05D8,
+  afii57673: 0x05D9,
+  afii57674: 0x05DA,
+  afii57675: 0x05DB,
+  afii57676: 0x05DC,
+  afii57677: 0x05DD,
+  afii57678: 0x05DE,
+  afii57679: 0x05DF,
+  afii57680: 0x05E0,
+  afii57681: 0x05E1,
+  afii57682: 0x05E2,
+  afii57683: 0x05E3,
+  afii57684: 0x05E4,
+  afii57685: 0x05E5,
+  afii57686: 0x05E6,
+  afii57687: 0x05E7,
+  afii57688: 0x05E8,
+  afii57689: 0x05E9,
+  afii57690: 0x05EA,
+  afii57694: 0xFB2A,
+  afii57695: 0xFB2B,
+  afii57700: 0xFB4B,
+  afii57705: 0xFB1F,
+  afii57716: 0x05F0,
+  afii57717: 0x05F1,
+  afii57718: 0x05F2,
+  afii57723: 0xFB35,
+  afii57793: 0x05B4,
+  afii57794: 0x05B5,
+  afii57795: 0x05B6,
+  afii57796: 0x05BB,
+  afii57797: 0x05B8,
+  afii57798: 0x05B7,
+  afii57799: 0x05B0,
+  afii57800: 0x05B2,
+  afii57801: 0x05B1,
+  afii57802: 0x05B3,
+  afii57803: 0x05C2,
+  afii57804: 0x05C1,
+  afii57806: 0x05B9,
+  afii57807: 0x05BC,
+  afii57839: 0x05BD,
+  afii57841: 0x05BF,
+  afii57842: 0x05C0,
+  afii57929: 0x02BC,
+  afii61248: 0x2105,
+  afii61289: 0x2113,
+  afii61352: 0x2116,
+  afii61573: 0x202C,
+  afii61574: 0x202D,
+  afii61575: 0x202E,
+  afii61664: 0x200C,
+  afii63167: 0x066D,
+  afii64937: 0x02BD,
+  agrave: 0x00E0,
+  agujarati: 0x0A85,
+  agurmukhi: 0x0A05,
+  ahiragana: 0x3042,
+  ahookabove: 0x1EA3,
+  aibengali: 0x0990,
+  aibopomofo: 0x311E,
+  aideva: 0x0910,
+  aiecyrillic: 0x04D5,
+  aigujarati: 0x0A90,
+  aigurmukhi: 0x0A10,
+  aimatragurmukhi: 0x0A48,
+  ainarabic: 0x0639,
+  ainfinalarabic: 0xFECA,
+  aininitialarabic: 0xFECB,
+  ainmedialarabic: 0xFECC,
+  ainvertedbreve: 0x0203,
+  aivowelsignbengali: 0x09C8,
+  aivowelsigndeva: 0x0948,
+  aivowelsigngujarati: 0x0AC8,
+  akatakana: 0x30A2,
+  akatakanahalfwidth: 0xFF71,
+  akorean: 0x314F,
+  alef: 0x05D0,
+  alefarabic: 0x0627,
+  alefdageshhebrew: 0xFB30,
+  aleffinalarabic: 0xFE8E,
+  alefhamzaabovearabic: 0x0623,
+  alefhamzaabovefinalarabic: 0xFE84,
+  alefhamzabelowarabic: 0x0625,
+  alefhamzabelowfinalarabic: 0xFE88,
+  alefhebrew: 0x05D0,
+  aleflamedhebrew: 0xFB4F,
+  alefmaddaabovearabic: 0x0622,
+  alefmaddaabovefinalarabic: 0xFE82,
+  alefmaksuraarabic: 0x0649,
+  alefmaksurafinalarabic: 0xFEF0,
+  alefmaksurainitialarabic: 0xFEF3,
+  alefmaksuramedialarabic: 0xFEF4,
+  alefpatahhebrew: 0xFB2E,
+  alefqamatshebrew: 0xFB2F,
+  aleph: 0x2135,
+  allequal: 0x224C,
+  alpha: 0x03B1,
+  alphatonos: 0x03AC,
+  amacron: 0x0101,
+  amonospace: 0xFF41,
+  ampersand: 0x0026,
+  ampersandmonospace: 0xFF06,
+  ampersandsmall: 0xF726,
+  amsquare: 0x33C2,
+  anbopomofo: 0x3122,
+  angbopomofo: 0x3124,
+  angbracketleft: 0x3008, // This glyph is missing from Adobe's original list.
+  angbracketright: 0x3009, // This glyph is missing from Adobe's original list.
+  angkhankhuthai: 0x0E5A,
+  angle: 0x2220,
+  anglebracketleft: 0x3008,
+  anglebracketleftvertical: 0xFE3F,
+  anglebracketright: 0x3009,
+  anglebracketrightvertical: 0xFE40,
+  angleleft: 0x2329,
+  angleright: 0x232A,
+  angstrom: 0x212B,
+  anoteleia: 0x0387,
+  anudattadeva: 0x0952,
+  anusvarabengali: 0x0982,
+  anusvaradeva: 0x0902,
+  anusvaragujarati: 0x0A82,
+  aogonek: 0x0105,
+  apaatosquare: 0x3300,
+  aparen: 0x249C,
+  apostrophearmenian: 0x055A,
+  apostrophemod: 0x02BC,
+  apple: 0xF8FF,
+  approaches: 0x2250,
+  approxequal: 0x2248,
+  approxequalorimage: 0x2252,
+  approximatelyequal: 0x2245,
+  araeaekorean: 0x318E,
+  araeakorean: 0x318D,
+  arc: 0x2312,
+  arighthalfring: 0x1E9A,
+  aring: 0x00E5,
+  aringacute: 0x01FB,
+  aringbelow: 0x1E01,
+  arrowboth: 0x2194,
+  arrowdashdown: 0x21E3,
+  arrowdashleft: 0x21E0,
+  arrowdashright: 0x21E2,
+  arrowdashup: 0x21E1,
+  arrowdblboth: 0x21D4,
+  arrowdbldown: 0x21D3,
+  arrowdblleft: 0x21D0,
+  arrowdblright: 0x21D2,
+  arrowdblup: 0x21D1,
+  arrowdown: 0x2193,
+  arrowdownleft: 0x2199,
+  arrowdownright: 0x2198,
+  arrowdownwhite: 0x21E9,
+  arrowheaddownmod: 0x02C5,
+  arrowheadleftmod: 0x02C2,
+  arrowheadrightmod: 0x02C3,
+  arrowheadupmod: 0x02C4,
+  arrowhorizex: 0xF8E7,
+  arrowleft: 0x2190,
+  arrowleftdbl: 0x21D0,
+  arrowleftdblstroke: 0x21CD,
+  arrowleftoverright: 0x21C6,
+  arrowleftwhite: 0x21E6,
+  arrowright: 0x2192,
+  arrowrightdblstroke: 0x21CF,
+  arrowrightheavy: 0x279E,
+  arrowrightoverleft: 0x21C4,
+  arrowrightwhite: 0x21E8,
+  arrowtableft: 0x21E4,
+  arrowtabright: 0x21E5,
+  arrowup: 0x2191,
+  arrowupdn: 0x2195,
+  arrowupdnbse: 0x21A8,
+  arrowupdownbase: 0x21A8,
+  arrowupleft: 0x2196,
+  arrowupleftofdown: 0x21C5,
+  arrowupright: 0x2197,
+  arrowupwhite: 0x21E7,
+  arrowvertex: 0xF8E6,
+  asciicircum: 0x005E,
+  asciicircummonospace: 0xFF3E,
+  asciitilde: 0x007E,
+  asciitildemonospace: 0xFF5E,
+  ascript: 0x0251,
+  ascriptturned: 0x0252,
+  asmallhiragana: 0x3041,
+  asmallkatakana: 0x30A1,
+  asmallkatakanahalfwidth: 0xFF67,
+  asterisk: 0x002A,
+  asteriskaltonearabic: 0x066D,
+  asteriskarabic: 0x066D,
+  asteriskmath: 0x2217,
+  asteriskmonospace: 0xFF0A,
+  asterisksmall: 0xFE61,
+  asterism: 0x2042,
+  asuperior: 0xF6E9,
+  asymptoticallyequal: 0x2243,
+  at: 0x0040,
+  atilde: 0x00E3,
+  atmonospace: 0xFF20,
+  atsmall: 0xFE6B,
+  aturned: 0x0250,
+  aubengali: 0x0994,
+  aubopomofo: 0x3120,
+  audeva: 0x0914,
+  augujarati: 0x0A94,
+  augurmukhi: 0x0A14,
+  aulengthmarkbengali: 0x09D7,
+  aumatragurmukhi: 0x0A4C,
+  auvowelsignbengali: 0x09CC,
+  auvowelsigndeva: 0x094C,
+  auvowelsigngujarati: 0x0ACC,
+  avagrahadeva: 0x093D,
+  aybarmenian: 0x0561,
+  ayin: 0x05E2,
+  ayinaltonehebrew: 0xFB20,
+  ayinhebrew: 0x05E2,
+  b: 0x0062,
+  babengali: 0x09AC,
+  backslash: 0x005C,
+  backslashmonospace: 0xFF3C,
+  badeva: 0x092C,
+  bagujarati: 0x0AAC,
+  bagurmukhi: 0x0A2C,
+  bahiragana: 0x3070,
+  bahtthai: 0x0E3F,
+  bakatakana: 0x30D0,
+  bar: 0x007C,
+  barmonospace: 0xFF5C,
+  bbopomofo: 0x3105,
+  bcircle: 0x24D1,
+  bdotaccent: 0x1E03,
+  bdotbelow: 0x1E05,
+  beamedsixteenthnotes: 0x266C,
+  because: 0x2235,
+  becyrillic: 0x0431,
+  beharabic: 0x0628,
+  behfinalarabic: 0xFE90,
+  behinitialarabic: 0xFE91,
+  behiragana: 0x3079,
+  behmedialarabic: 0xFE92,
+  behmeeminitialarabic: 0xFC9F,
+  behmeemisolatedarabic: 0xFC08,
+  behnoonfinalarabic: 0xFC6D,
+  bekatakana: 0x30D9,
+  benarmenian: 0x0562,
+  bet: 0x05D1,
+  beta: 0x03B2,
+  betasymbolgreek: 0x03D0,
+  betdagesh: 0xFB31,
+  betdageshhebrew: 0xFB31,
+  bethebrew: 0x05D1,
+  betrafehebrew: 0xFB4C,
+  bhabengali: 0x09AD,
+  bhadeva: 0x092D,
+  bhagujarati: 0x0AAD,
+  bhagurmukhi: 0x0A2D,
+  bhook: 0x0253,
+  bihiragana: 0x3073,
+  bikatakana: 0x30D3,
+  bilabialclick: 0x0298,
+  bindigurmukhi: 0x0A02,
+  birusquare: 0x3331,
+  blackcircle: 0x25CF,
+  blackdiamond: 0x25C6,
+  blackdownpointingtriangle: 0x25BC,
+  blackleftpointingpointer: 0x25C4,
+  blackleftpointingtriangle: 0x25C0,
+  blacklenticularbracketleft: 0x3010,
+  blacklenticularbracketleftvertical: 0xFE3B,
+  blacklenticularbracketright: 0x3011,
+  blacklenticularbracketrightvertical: 0xFE3C,
+  blacklowerlefttriangle: 0x25E3,
+  blacklowerrighttriangle: 0x25E2,
+  blackrectangle: 0x25AC,
+  blackrightpointingpointer: 0x25BA,
+  blackrightpointingtriangle: 0x25B6,
+  blacksmallsquare: 0x25AA,
+  blacksmilingface: 0x263B,
+  blacksquare: 0x25A0,
+  blackstar: 0x2605,
+  blackupperlefttriangle: 0x25E4,
+  blackupperrighttriangle: 0x25E5,
+  blackuppointingsmalltriangle: 0x25B4,
+  blackuppointingtriangle: 0x25B2,
+  blank: 0x2423,
+  blinebelow: 0x1E07,
+  block: 0x2588,
+  bmonospace: 0xFF42,
+  bobaimaithai: 0x0E1A,
+  bohiragana: 0x307C,
+  bokatakana: 0x30DC,
+  bparen: 0x249D,
+  bqsquare: 0x33C3,
+  braceex: 0xF8F4,
+  braceleft: 0x007B,
+  braceleftbt: 0xF8F3,
+  braceleftmid: 0xF8F2,
+  braceleftmonospace: 0xFF5B,
+  braceleftsmall: 0xFE5B,
+  bracelefttp: 0xF8F1,
+  braceleftvertical: 0xFE37,
+  braceright: 0x007D,
+  bracerightbt: 0xF8FE,
+  bracerightmid: 0xF8FD,
+  bracerightmonospace: 0xFF5D,
+  bracerightsmall: 0xFE5C,
+  bracerighttp: 0xF8FC,
+  bracerightvertical: 0xFE38,
+  bracketleft: 0x005B,
+  bracketleftbt: 0xF8F0,
+  bracketleftex: 0xF8EF,
+  bracketleftmonospace: 0xFF3B,
+  bracketlefttp: 0xF8EE,
+  bracketright: 0x005D,
+  bracketrightbt: 0xF8FB,
+  bracketrightex: 0xF8FA,
+  bracketrightmonospace: 0xFF3D,
+  bracketrighttp: 0xF8F9,
+  breve: 0x02D8,
+  brevebelowcmb: 0x032E,
+  brevecmb: 0x0306,
+  breveinvertedbelowcmb: 0x032F,
+  breveinvertedcmb: 0x0311,
+  breveinverteddoublecmb: 0x0361,
+  bridgebelowcmb: 0x032A,
+  bridgeinvertedbelowcmb: 0x033A,
+  brokenbar: 0x00A6,
+  bstroke: 0x0180,
+  bsuperior: 0xF6EA,
+  btopbar: 0x0183,
+  buhiragana: 0x3076,
+  bukatakana: 0x30D6,
+  bullet: 0x2022,
+  bulletinverse: 0x25D8,
+  bulletoperator: 0x2219,
+  bullseye: 0x25CE,
+  c: 0x0063,
+  caarmenian: 0x056E,
+  cabengali: 0x099A,
+  cacute: 0x0107,
+  cadeva: 0x091A,
+  cagujarati: 0x0A9A,
+  cagurmukhi: 0x0A1A,
+  calsquare: 0x3388,
+  candrabindubengali: 0x0981,
+  candrabinducmb: 0x0310,
+  candrabindudeva: 0x0901,
+  candrabindugujarati: 0x0A81,
+  capslock: 0x21EA,
+  careof: 0x2105,
+  caron: 0x02C7,
+  caronbelowcmb: 0x032C,
+  caroncmb: 0x030C,
+  carriagereturn: 0x21B5,
+  cbopomofo: 0x3118,
+  ccaron: 0x010D,
+  ccedilla: 0x00E7,
+  ccedillaacute: 0x1E09,
+  ccircle: 0x24D2,
+  ccircumflex: 0x0109,
+  ccurl: 0x0255,
+  cdot: 0x010B,
+  cdotaccent: 0x010B,
+  cdsquare: 0x33C5,
+  cedilla: 0x00B8,
+  cedillacmb: 0x0327,
+  cent: 0x00A2,
+  centigrade: 0x2103,
+  centinferior: 0xF6DF,
+  centmonospace: 0xFFE0,
+  centoldstyle: 0xF7A2,
+  centsuperior: 0xF6E0,
+  chaarmenian: 0x0579,
+  chabengali: 0x099B,
+  chadeva: 0x091B,
+  chagujarati: 0x0A9B,
+  chagurmukhi: 0x0A1B,
+  chbopomofo: 0x3114,
+  cheabkhasiancyrillic: 0x04BD,
+  checkmark: 0x2713,
+  checyrillic: 0x0447,
+  chedescenderabkhasiancyrillic: 0x04BF,
+  chedescendercyrillic: 0x04B7,
+  chedieresiscyrillic: 0x04F5,
+  cheharmenian: 0x0573,
+  chekhakassiancyrillic: 0x04CC,
+  cheverticalstrokecyrillic: 0x04B9,
+  chi: 0x03C7,
+  chieuchacirclekorean: 0x3277,
+  chieuchaparenkorean: 0x3217,
+  chieuchcirclekorean: 0x3269,
+  chieuchkorean: 0x314A,
+  chieuchparenkorean: 0x3209,
+  chochangthai: 0x0E0A,
+  chochanthai: 0x0E08,
+  chochingthai: 0x0E09,
+  chochoethai: 0x0E0C,
+  chook: 0x0188,
+  cieucacirclekorean: 0x3276,
+  cieucaparenkorean: 0x3216,
+  cieuccirclekorean: 0x3268,
+  cieuckorean: 0x3148,
+  cieucparenkorean: 0x3208,
+  cieucuparenkorean: 0x321C,
+  circle: 0x25CB,
+  circlecopyrt: 0x00A9, // This glyph is missing from Adobe's original list.
+  circlemultiply: 0x2297,
+  circleot: 0x2299,
+  circleplus: 0x2295,
+  circlepostalmark: 0x3036,
+  circlewithlefthalfblack: 0x25D0,
+  circlewithrighthalfblack: 0x25D1,
+  circumflex: 0x02C6,
+  circumflexbelowcmb: 0x032D,
+  circumflexcmb: 0x0302,
+  clear: 0x2327,
+  clickalveolar: 0x01C2,
+  clickdental: 0x01C0,
+  clicklateral: 0x01C1,
+  clickretroflex: 0x01C3,
+  club: 0x2663,
+  clubsuitblack: 0x2663,
+  clubsuitwhite: 0x2667,
+  cmcubedsquare: 0x33A4,
+  cmonospace: 0xFF43,
+  cmsquaredsquare: 0x33A0,
+  coarmenian: 0x0581,
+  colon: 0x003A,
+  colonmonetary: 0x20A1,
+  colonmonospace: 0xFF1A,
+  colonsign: 0x20A1,
+  colonsmall: 0xFE55,
+  colontriangularhalfmod: 0x02D1,
+  colontriangularmod: 0x02D0,
+  comma: 0x002C,
+  commaabovecmb: 0x0313,
+  commaaboverightcmb: 0x0315,
+  commaaccent: 0xF6C3,
+  commaarabic: 0x060C,
+  commaarmenian: 0x055D,
+  commainferior: 0xF6E1,
+  commamonospace: 0xFF0C,
+  commareversedabovecmb: 0x0314,
+  commareversedmod: 0x02BD,
+  commasmall: 0xFE50,
+  commasuperior: 0xF6E2,
+  commaturnedabovecmb: 0x0312,
+  commaturnedmod: 0x02BB,
+  compass: 0x263C,
+  congruent: 0x2245,
+  contourintegral: 0x222E,
+  control: 0x2303,
+  controlACK: 0x0006,
+  controlBEL: 0x0007,
+  controlBS: 0x0008,
+  controlCAN: 0x0018,
+  controlCR: 0x000D,
+  controlDC1: 0x0011,
+  controlDC2: 0x0012,
+  controlDC3: 0x0013,
+  controlDC4: 0x0014,
+  controlDEL: 0x007F,
+  controlDLE: 0x0010,
+  controlEM: 0x0019,
+  controlENQ: 0x0005,
+  controlEOT: 0x0004,
+  controlESC: 0x001B,
+  controlETB: 0x0017,
+  controlETX: 0x0003,
+  controlFF: 0x000C,
+  controlFS: 0x001C,
+  controlGS: 0x001D,
+  controlHT: 0x0009,
+  controlLF: 0x000A,
+  controlNAK: 0x0015,
+  controlRS: 0x001E,
+  controlSI: 0x000F,
+  controlSO: 0x000E,
+  controlSOT: 0x0002,
+  controlSTX: 0x0001,
+  controlSUB: 0x001A,
+  controlSYN: 0x0016,
+  controlUS: 0x001F,
+  controlVT: 0x000B,
+  copyright: 0x00A9,
+  copyrightsans: 0xF8E9,
+  copyrightserif: 0xF6D9,
+  cornerbracketleft: 0x300C,
+  cornerbracketlefthalfwidth: 0xFF62,
+  cornerbracketleftvertical: 0xFE41,
+  cornerbracketright: 0x300D,
+  cornerbracketrighthalfwidth: 0xFF63,
+  cornerbracketrightvertical: 0xFE42,
+  corporationsquare: 0x337F,
+  cosquare: 0x33C7,
+  coverkgsquare: 0x33C6,
+  cparen: 0x249E,
+  cruzeiro: 0x20A2,
+  cstretched: 0x0297,
+  curlyand: 0x22CF,
+  curlyor: 0x22CE,
+  currency: 0x00A4,
+  cyrBreve: 0xF6D1,
+  cyrFlex: 0xF6D2,
+  cyrbreve: 0xF6D4,
+  cyrflex: 0xF6D5,
+  d: 0x0064,
+  daarmenian: 0x0564,
+  dabengali: 0x09A6,
+  dadarabic: 0x0636,
+  dadeva: 0x0926,
+  dadfinalarabic: 0xFEBE,
+  dadinitialarabic: 0xFEBF,
+  dadmedialarabic: 0xFEC0,
+  dagesh: 0x05BC,
+  dageshhebrew: 0x05BC,
+  dagger: 0x2020,
+  daggerdbl: 0x2021,
+  dagujarati: 0x0AA6,
+  dagurmukhi: 0x0A26,
+  dahiragana: 0x3060,
+  dakatakana: 0x30C0,
+  dalarabic: 0x062F,
+  dalet: 0x05D3,
+  daletdagesh: 0xFB33,
+  daletdageshhebrew: 0xFB33,
+  dalethebrew: 0x05D3,
+  dalfinalarabic: 0xFEAA,
+  dammaarabic: 0x064F,
+  dammalowarabic: 0x064F,
+  dammatanaltonearabic: 0x064C,
+  dammatanarabic: 0x064C,
+  danda: 0x0964,
+  dargahebrew: 0x05A7,
+  dargalefthebrew: 0x05A7,
+  dasiapneumatacyrilliccmb: 0x0485,
+  dblGrave: 0xF6D3,
+  dblanglebracketleft: 0x300A,
+  dblanglebracketleftvertical: 0xFE3D,
+  dblanglebracketright: 0x300B,
+  dblanglebracketrightvertical: 0xFE3E,
+  dblarchinvertedbelowcmb: 0x032B,
+  dblarrowleft: 0x21D4,
+  dblarrowright: 0x21D2,
+  dbldanda: 0x0965,
+  dblgrave: 0xF6D6,
+  dblgravecmb: 0x030F,
+  dblintegral: 0x222C,
+  dbllowline: 0x2017,
+  dbllowlinecmb: 0x0333,
+  dbloverlinecmb: 0x033F,
+  dblprimemod: 0x02BA,
+  dblverticalbar: 0x2016,
+  dblverticallineabovecmb: 0x030E,
+  dbopomofo: 0x3109,
+  dbsquare: 0x33C8,
+  dcaron: 0x010F,
+  dcedilla: 0x1E11,
+  dcircle: 0x24D3,
+  dcircumflexbelow: 0x1E13,
+  dcroat: 0x0111,
+  ddabengali: 0x09A1,
+  ddadeva: 0x0921,
+  ddagujarati: 0x0AA1,
+  ddagurmukhi: 0x0A21,
+  ddalarabic: 0x0688,
+  ddalfinalarabic: 0xFB89,
+  dddhadeva: 0x095C,
+  ddhabengali: 0x09A2,
+  ddhadeva: 0x0922,
+  ddhagujarati: 0x0AA2,
+  ddhagurmukhi: 0x0A22,
+  ddotaccent: 0x1E0B,
+  ddotbelow: 0x1E0D,
+  decimalseparatorarabic: 0x066B,
+  decimalseparatorpersian: 0x066B,
+  decyrillic: 0x0434,
+  degree: 0x00B0,
+  dehihebrew: 0x05AD,
+  dehiragana: 0x3067,
+  deicoptic: 0x03EF,
+  dekatakana: 0x30C7,
+  deleteleft: 0x232B,
+  deleteright: 0x2326,
+  delta: 0x03B4,
+  deltaturned: 0x018D,
+  denominatorminusonenumeratorbengali: 0x09F8,
+  dezh: 0x02A4,
+  dhabengali: 0x09A7,
+  dhadeva: 0x0927,
+  dhagujarati: 0x0AA7,
+  dhagurmukhi: 0x0A27,
+  dhook: 0x0257,
+  dialytikatonos: 0x0385,
+  dialytikatonoscmb: 0x0344,
+  diamond: 0x2666,
+  diamondsuitwhite: 0x2662,
+  dieresis: 0x00A8,
+  dieresisacute: 0xF6D7,
+  dieresisbelowcmb: 0x0324,
+  dieresiscmb: 0x0308,
+  dieresisgrave: 0xF6D8,
+  dieresistonos: 0x0385,
+  dihiragana: 0x3062,
+  dikatakana: 0x30C2,
+  dittomark: 0x3003,
+  divide: 0x00F7,
+  divides: 0x2223,
+  divisionslash: 0x2215,
+  djecyrillic: 0x0452,
+  dkshade: 0x2593,
+  dlinebelow: 0x1E0F,
+  dlsquare: 0x3397,
+  dmacron: 0x0111,
+  dmonospace: 0xFF44,
+  dnblock: 0x2584,
+  dochadathai: 0x0E0E,
+  dodekthai: 0x0E14,
+  dohiragana: 0x3069,
+  dokatakana: 0x30C9,
+  dollar: 0x0024,
+  dollarinferior: 0xF6E3,
+  dollarmonospace: 0xFF04,
+  dollaroldstyle: 0xF724,
+  dollarsmall: 0xFE69,
+  dollarsuperior: 0xF6E4,
+  dong: 0x20AB,
+  dorusquare: 0x3326,
+  dotaccent: 0x02D9,
+  dotaccentcmb: 0x0307,
+  dotbelowcmb: 0x0323,
+  dotbelowcomb: 0x0323,
+  dotkatakana: 0x30FB,
+  dotlessi: 0x0131,
+  dotlessj: 0xF6BE,
+  dotlessjstrokehook: 0x0284,
+  dotmath: 0x22C5,
+  dottedcircle: 0x25CC,
+  doubleyodpatah: 0xFB1F,
+  doubleyodpatahhebrew: 0xFB1F,
+  downtackbelowcmb: 0x031E,
+  downtackmod: 0x02D5,
+  dparen: 0x249F,
+  dsuperior: 0xF6EB,
+  dtail: 0x0256,
+  dtopbar: 0x018C,
+  duhiragana: 0x3065,
+  dukatakana: 0x30C5,
+  dz: 0x01F3,
+  dzaltone: 0x02A3,
+  dzcaron: 0x01C6,
+  dzcurl: 0x02A5,
+  dzeabkhasiancyrillic: 0x04E1,
+  dzecyrillic: 0x0455,
+  dzhecyrillic: 0x045F,
+  e: 0x0065,
+  eacute: 0x00E9,
+  earth: 0x2641,
+  ebengali: 0x098F,
+  ebopomofo: 0x311C,
+  ebreve: 0x0115,
+  ecandradeva: 0x090D,
+  ecandragujarati: 0x0A8D,
+  ecandravowelsigndeva: 0x0945,
+  ecandravowelsigngujarati: 0x0AC5,
+  ecaron: 0x011B,
+  ecedillabreve: 0x1E1D,
+  echarmenian: 0x0565,
+  echyiwnarmenian: 0x0587,
+  ecircle: 0x24D4,
+  ecircumflex: 0x00EA,
+  ecircumflexacute: 0x1EBF,
+  ecircumflexbelow: 0x1E19,
+  ecircumflexdotbelow: 0x1EC7,
+  ecircumflexgrave: 0x1EC1,
+  ecircumflexhookabove: 0x1EC3,
+  ecircumflextilde: 0x1EC5,
+  ecyrillic: 0x0454,
+  edblgrave: 0x0205,
+  edeva: 0x090F,
+  edieresis: 0x00EB,
+  edot: 0x0117,
+  edotaccent: 0x0117,
+  edotbelow: 0x1EB9,
+  eegurmukhi: 0x0A0F,
+  eematragurmukhi: 0x0A47,
+  efcyrillic: 0x0444,
+  egrave: 0x00E8,
+  egujarati: 0x0A8F,
+  eharmenian: 0x0567,
+  ehbopomofo: 0x311D,
+  ehiragana: 0x3048,
+  ehookabove: 0x1EBB,
+  eibopomofo: 0x311F,
+  eight: 0x0038,
+  eightarabic: 0x0668,
+  eightbengali: 0x09EE,
+  eightcircle: 0x2467,
+  eightcircleinversesansserif: 0x2791,
+  eightdeva: 0x096E,
+  eighteencircle: 0x2471,
+  eighteenparen: 0x2485,
+  eighteenperiod: 0x2499,
+  eightgujarati: 0x0AEE,
+  eightgurmukhi: 0x0A6E,
+  eighthackarabic: 0x0668,
+  eighthangzhou: 0x3028,
+  eighthnotebeamed: 0x266B,
+  eightideographicparen: 0x3227,
+  eightinferior: 0x2088,
+  eightmonospace: 0xFF18,
+  eightoldstyle: 0xF738,
+  eightparen: 0x247B,
+  eightperiod: 0x248F,
+  eightpersian: 0x06F8,
+  eightroman: 0x2177,
+  eightsuperior: 0x2078,
+  eightthai: 0x0E58,
+  einvertedbreve: 0x0207,
+  eiotifiedcyrillic: 0x0465,
+  ekatakana: 0x30A8,
+  ekatakanahalfwidth: 0xFF74,
+  ekonkargurmukhi: 0x0A74,
+  ekorean: 0x3154,
+  elcyrillic: 0x043B,
+  element: 0x2208,
+  elevencircle: 0x246A,
+  elevenparen: 0x247E,
+  elevenperiod: 0x2492,
+  elevenroman: 0x217A,
+  ellipsis: 0x2026,
+  ellipsisvertical: 0x22EE,
+  emacron: 0x0113,
+  emacronacute: 0x1E17,
+  emacrongrave: 0x1E15,
+  emcyrillic: 0x043C,
+  emdash: 0x2014,
+  emdashvertical: 0xFE31,
+  emonospace: 0xFF45,
+  emphasismarkarmenian: 0x055B,
+  emptyset: 0x2205,
+  enbopomofo: 0x3123,
+  encyrillic: 0x043D,
+  endash: 0x2013,
+  endashvertical: 0xFE32,
+  endescendercyrillic: 0x04A3,
+  eng: 0x014B,
+  engbopomofo: 0x3125,
+  enghecyrillic: 0x04A5,
+  enhookcyrillic: 0x04C8,
+  enspace: 0x2002,
+  eogonek: 0x0119,
+  eokorean: 0x3153,
+  eopen: 0x025B,
+  eopenclosed: 0x029A,
+  eopenreversed: 0x025C,
+  eopenreversedclosed: 0x025E,
+  eopenreversedhook: 0x025D,
+  eparen: 0x24A0,
+  epsilon: 0x03B5,
+  epsilontonos: 0x03AD,
+  equal: 0x003D,
+  equalmonospace: 0xFF1D,
+  equalsmall: 0xFE66,
+  equalsuperior: 0x207C,
+  equivalence: 0x2261,
+  erbopomofo: 0x3126,
+  ercyrillic: 0x0440,
+  ereversed: 0x0258,
+  ereversedcyrillic: 0x044D,
+  escyrillic: 0x0441,
+  esdescendercyrillic: 0x04AB,
+  esh: 0x0283,
+  eshcurl: 0x0286,
+  eshortdeva: 0x090E,
+  eshortvowelsigndeva: 0x0946,
+  eshreversedloop: 0x01AA,
+  eshsquatreversed: 0x0285,
+  esmallhiragana: 0x3047,
+  esmallkatakana: 0x30A7,
+  esmallkatakanahalfwidth: 0xFF6A,
+  estimated: 0x212E,
+  esuperior: 0xF6EC,
+  eta: 0x03B7,
+  etarmenian: 0x0568,
+  etatonos: 0x03AE,
+  eth: 0x00F0,
+  etilde: 0x1EBD,
+  etildebelow: 0x1E1B,
+  etnahtafoukhhebrew: 0x0591,
+  etnahtafoukhlefthebrew: 0x0591,
+  etnahtahebrew: 0x0591,
+  etnahtalefthebrew: 0x0591,
+  eturned: 0x01DD,
+  eukorean: 0x3161,
+  euro: 0x20AC,
+  evowelsignbengali: 0x09C7,
+  evowelsigndeva: 0x0947,
+  evowelsigngujarati: 0x0AC7,
+  exclam: 0x0021,
+  exclamarmenian: 0x055C,
+  exclamdbl: 0x203C,
+  exclamdown: 0x00A1,
+  exclamdownsmall: 0xF7A1,
+  exclammonospace: 0xFF01,
+  exclamsmall: 0xF721,
+  existential: 0x2203,
+  ezh: 0x0292,
+  ezhcaron: 0x01EF,
+  ezhcurl: 0x0293,
+  ezhreversed: 0x01B9,
+  ezhtail: 0x01BA,
+  f: 0x0066,
+  fadeva: 0x095E,
+  fagurmukhi: 0x0A5E,
+  fahrenheit: 0x2109,
+  fathaarabic: 0x064E,
+  fathalowarabic: 0x064E,
+  fathatanarabic: 0x064B,
+  fbopomofo: 0x3108,
+  fcircle: 0x24D5,
+  fdotaccent: 0x1E1F,
+  feharabic: 0x0641,
+  feharmenian: 0x0586,
+  fehfinalarabic: 0xFED2,
+  fehinitialarabic: 0xFED3,
+  fehmedialarabic: 0xFED4,
+  feicoptic: 0x03E5,
+  female: 0x2640,
+  ff: 0xFB00,
+  ffi: 0xFB03,
+  ffl: 0xFB04,
+  fi: 0xFB01,
+  fifteencircle: 0x246E,
+  fifteenparen: 0x2482,
+  fifteenperiod: 0x2496,
+  figuredash: 0x2012,
+  filledbox: 0x25A0,
+  filledrect: 0x25AC,
+  finalkaf: 0x05DA,
+  finalkafdagesh: 0xFB3A,
+  finalkafdageshhebrew: 0xFB3A,
+  finalkafhebrew: 0x05DA,
+  finalmem: 0x05DD,
+  finalmemhebrew: 0x05DD,
+  finalnun: 0x05DF,
+  finalnunhebrew: 0x05DF,
+  finalpe: 0x05E3,
+  finalpehebrew: 0x05E3,
+  finaltsadi: 0x05E5,
+  finaltsadihebrew: 0x05E5,
+  firsttonechinese: 0x02C9,
+  fisheye: 0x25C9,
+  fitacyrillic: 0x0473,
+  five: 0x0035,
+  fivearabic: 0x0665,
+  fivebengali: 0x09EB,
+  fivecircle: 0x2464,
+  fivecircleinversesansserif: 0x278E,
+  fivedeva: 0x096B,
+  fiveeighths: 0x215D,
+  fivegujarati: 0x0AEB,
+  fivegurmukhi: 0x0A6B,
+  fivehackarabic: 0x0665,
+  fivehangzhou: 0x3025,
+  fiveideographicparen: 0x3224,
+  fiveinferior: 0x2085,
+  fivemonospace: 0xFF15,
+  fiveoldstyle: 0xF735,
+  fiveparen: 0x2478,
+  fiveperiod: 0x248C,
+  fivepersian: 0x06F5,
+  fiveroman: 0x2174,
+  fivesuperior: 0x2075,
+  fivethai: 0x0E55,
+  fl: 0xFB02,
+  florin: 0x0192,
+  fmonospace: 0xFF46,
+  fmsquare: 0x3399,
+  fofanthai: 0x0E1F,
+  fofathai: 0x0E1D,
+  fongmanthai: 0x0E4F,
+  forall: 0x2200,
+  four: 0x0034,
+  fourarabic: 0x0664,
+  fourbengali: 0x09EA,
+  fourcircle: 0x2463,
+  fourcircleinversesansserif: 0x278D,
+  fourdeva: 0x096A,
+  fourgujarati: 0x0AEA,
+  fourgurmukhi: 0x0A6A,
+  fourhackarabic: 0x0664,
+  fourhangzhou: 0x3024,
+  fourideographicparen: 0x3223,
+  fourinferior: 0x2084,
+  fourmonospace: 0xFF14,
+  fournumeratorbengali: 0x09F7,
+  fouroldstyle: 0xF734,
+  fourparen: 0x2477,
+  fourperiod: 0x248B,
+  fourpersian: 0x06F4,
+  fourroman: 0x2173,
+  foursuperior: 0x2074,
+  fourteencircle: 0x246D,
+  fourteenparen: 0x2481,
+  fourteenperiod: 0x2495,
+  fourthai: 0x0E54,
+  fourthtonechinese: 0x02CB,
+  fparen: 0x24A1,
+  fraction: 0x2044,
+  franc: 0x20A3,
+  g: 0x0067,
+  gabengali: 0x0997,
+  gacute: 0x01F5,
+  gadeva: 0x0917,
+  gafarabic: 0x06AF,
+  gaffinalarabic: 0xFB93,
+  gafinitialarabic: 0xFB94,
+  gafmedialarabic: 0xFB95,
+  gagujarati: 0x0A97,
+  gagurmukhi: 0x0A17,
+  gahiragana: 0x304C,
+  gakatakana: 0x30AC,
+  gamma: 0x03B3,
+  gammalatinsmall: 0x0263,
+  gammasuperior: 0x02E0,
+  gangiacoptic: 0x03EB,
+  gbopomofo: 0x310D,
+  gbreve: 0x011F,
+  gcaron: 0x01E7,
+  gcedilla: 0x0123,
+  gcircle: 0x24D6,
+  gcircumflex: 0x011D,
+  gcommaaccent: 0x0123,
+  gdot: 0x0121,
+  gdotaccent: 0x0121,
+  gecyrillic: 0x0433,
+  gehiragana: 0x3052,
+  gekatakana: 0x30B2,
+  geometricallyequal: 0x2251,
+  gereshaccenthebrew: 0x059C,
+  gereshhebrew: 0x05F3,
+  gereshmuqdamhebrew: 0x059D,
+  germandbls: 0x00DF,
+  gershayimaccenthebrew: 0x059E,
+  gershayimhebrew: 0x05F4,
+  getamark: 0x3013,
+  ghabengali: 0x0998,
+  ghadarmenian: 0x0572,
+  ghadeva: 0x0918,
+  ghagujarati: 0x0A98,
+  ghagurmukhi: 0x0A18,
+  ghainarabic: 0x063A,
+  ghainfinalarabic: 0xFECE,
+  ghaininitialarabic: 0xFECF,
+  ghainmedialarabic: 0xFED0,
+  ghemiddlehookcyrillic: 0x0495,
+  ghestrokecyrillic: 0x0493,
+  gheupturncyrillic: 0x0491,
+  ghhadeva: 0x095A,
+  ghhagurmukhi: 0x0A5A,
+  ghook: 0x0260,
+  ghzsquare: 0x3393,
+  gihiragana: 0x304E,
+  gikatakana: 0x30AE,
+  gimarmenian: 0x0563,
+  gimel: 0x05D2,
+  gimeldagesh: 0xFB32,
+  gimeldageshhebrew: 0xFB32,
+  gimelhebrew: 0x05D2,
+  gjecyrillic: 0x0453,
+  glottalinvertedstroke: 0x01BE,
+  glottalstop: 0x0294,
+  glottalstopinverted: 0x0296,
+  glottalstopmod: 0x02C0,
+  glottalstopreversed: 0x0295,
+  glottalstopreversedmod: 0x02C1,
+  glottalstopreversedsuperior: 0x02E4,
+  glottalstopstroke: 0x02A1,
+  glottalstopstrokereversed: 0x02A2,
+  gmacron: 0x1E21,
+  gmonospace: 0xFF47,
+  gohiragana: 0x3054,
+  gokatakana: 0x30B4,
+  gparen: 0x24A2,
+  gpasquare: 0x33AC,
+  gradient: 0x2207,
+  grave: 0x0060,
+  gravebelowcmb: 0x0316,
+  gravecmb: 0x0300,
+  gravecomb: 0x0300,
+  gravedeva: 0x0953,
+  gravelowmod: 0x02CE,
+  gravemonospace: 0xFF40,
+  gravetonecmb: 0x0340,
+  greater: 0x003E,
+  greaterequal: 0x2265,
+  greaterequalorless: 0x22DB,
+  greatermonospace: 0xFF1E,
+  greaterorequivalent: 0x2273,
+  greaterorless: 0x2277,
+  greateroverequal: 0x2267,
+  greatersmall: 0xFE65,
+  gscript: 0x0261,
+  gstroke: 0x01E5,
+  guhiragana: 0x3050,
+  guillemotleft: 0x00AB,
+  guillemotright: 0x00BB,
+  guilsinglleft: 0x2039,
+  guilsinglright: 0x203A,
+  gukatakana: 0x30B0,
+  guramusquare: 0x3318,
+  gysquare: 0x33C9,
+  h: 0x0068,
+  haabkhasiancyrillic: 0x04A9,
+  haaltonearabic: 0x06C1,
+  habengali: 0x09B9,
+  hadescendercyrillic: 0x04B3,
+  hadeva: 0x0939,
+  hagujarati: 0x0AB9,
+  hagurmukhi: 0x0A39,
+  haharabic: 0x062D,
+  hahfinalarabic: 0xFEA2,
+  hahinitialarabic: 0xFEA3,
+  hahiragana: 0x306F,
+  hahmedialarabic: 0xFEA4,
+  haitusquare: 0x332A,
+  hakatakana: 0x30CF,
+  hakatakanahalfwidth: 0xFF8A,
+  halantgurmukhi: 0x0A4D,
+  hamzaarabic: 0x0621,
+  hamzalowarabic: 0x0621,
+  hangulfiller: 0x3164,
+  hardsigncyrillic: 0x044A,
+  harpoonleftbarbup: 0x21BC,
+  harpoonrightbarbup: 0x21C0,
+  hasquare: 0x33CA,
+  hatafpatah: 0x05B2,
+  hatafpatah16: 0x05B2,
+  hatafpatah23: 0x05B2,
+  hatafpatah2f: 0x05B2,
+  hatafpatahhebrew: 0x05B2,
+  hatafpatahnarrowhebrew: 0x05B2,
+  hatafpatahquarterhebrew: 0x05B2,
+  hatafpatahwidehebrew: 0x05B2,
+  hatafqamats: 0x05B3,
+  hatafqamats1b: 0x05B3,
+  hatafqamats28: 0x05B3,
+  hatafqamats34: 0x05B3,
+  hatafqamatshebrew: 0x05B3,
+  hatafqamatsnarrowhebrew: 0x05B3,
+  hatafqamatsquarterhebrew: 0x05B3,
+  hatafqamatswidehebrew: 0x05B3,
+  hatafsegol: 0x05B1,
+  hatafsegol17: 0x05B1,
+  hatafsegol24: 0x05B1,
+  hatafsegol30: 0x05B1,
+  hatafsegolhebrew: 0x05B1,
+  hatafsegolnarrowhebrew: 0x05B1,
+  hatafsegolquarterhebrew: 0x05B1,
+  hatafsegolwidehebrew: 0x05B1,
+  hbar: 0x0127,
+  hbopomofo: 0x310F,
+  hbrevebelow: 0x1E2B,
+  hcedilla: 0x1E29,
+  hcircle: 0x24D7,
+  hcircumflex: 0x0125,
+  hdieresis: 0x1E27,
+  hdotaccent: 0x1E23,
+  hdotbelow: 0x1E25,
+  he: 0x05D4,
+  heart: 0x2665,
+  heartsuitblack: 0x2665,
+  heartsuitwhite: 0x2661,
+  hedagesh: 0xFB34,
+  hedageshhebrew: 0xFB34,
+  hehaltonearabic: 0x06C1,
+  heharabic: 0x0647,
+  hehebrew: 0x05D4,
+  hehfinalaltonearabic: 0xFBA7,
+  hehfinalalttwoarabic: 0xFEEA,
+  hehfinalarabic: 0xFEEA,
+  hehhamzaabovefinalarabic: 0xFBA5,
+  hehhamzaaboveisolatedarabic: 0xFBA4,
+  hehinitialaltonearabic: 0xFBA8,
+  hehinitialarabic: 0xFEEB,
+  hehiragana: 0x3078,
+  hehmedialaltonearabic: 0xFBA9,
+  hehmedialarabic: 0xFEEC,
+  heiseierasquare: 0x337B,
+  hekatakana: 0x30D8,
+  hekatakanahalfwidth: 0xFF8D,
+  hekutaarusquare: 0x3336,
+  henghook: 0x0267,
+  herutusquare: 0x3339,
+  het: 0x05D7,
+  hethebrew: 0x05D7,
+  hhook: 0x0266,
+  hhooksuperior: 0x02B1,
+  hieuhacirclekorean: 0x327B,
+  hieuhaparenkorean: 0x321B,
+  hieuhcirclekorean: 0x326D,
+  hieuhkorean: 0x314E,
+  hieuhparenkorean: 0x320D,
+  hihiragana: 0x3072,
+  hikatakana: 0x30D2,
+  hikatakanahalfwidth: 0xFF8B,
+  hiriq: 0x05B4,
+  hiriq14: 0x05B4,
+  hiriq21: 0x05B4,
+  hiriq2d: 0x05B4,
+  hiriqhebrew: 0x05B4,
+  hiriqnarrowhebrew: 0x05B4,
+  hiriqquarterhebrew: 0x05B4,
+  hiriqwidehebrew: 0x05B4,
+  hlinebelow: 0x1E96,
+  hmonospace: 0xFF48,
+  hoarmenian: 0x0570,
+  hohipthai: 0x0E2B,
+  hohiragana: 0x307B,
+  hokatakana: 0x30DB,
+  hokatakanahalfwidth: 0xFF8E,
+  holam: 0x05B9,
+  holam19: 0x05B9,
+  holam26: 0x05B9,
+  holam32: 0x05B9,
+  holamhebrew: 0x05B9,
+  holamnarrowhebrew: 0x05B9,
+  holamquarterhebrew: 0x05B9,
+  holamwidehebrew: 0x05B9,
+  honokhukthai: 0x0E2E,
+  hookabovecomb: 0x0309,
+  hookcmb: 0x0309,
+  hookpalatalizedbelowcmb: 0x0321,
+  hookretroflexbelowcmb: 0x0322,
+  hoonsquare: 0x3342,
+  horicoptic: 0x03E9,
+  horizontalbar: 0x2015,
+  horncmb: 0x031B,
+  hotsprings: 0x2668,
+  house: 0x2302,
+  hparen: 0x24A3,
+  hsuperior: 0x02B0,
+  hturned: 0x0265,
+  huhiragana: 0x3075,
+  huiitosquare: 0x3333,
+  hukatakana: 0x30D5,
+  hukatakanahalfwidth: 0xFF8C,
+  hungarumlaut: 0x02DD,
+  hungarumlautcmb: 0x030B,
+  hv: 0x0195,
+  hyphen: 0x002D,
+  hypheninferior: 0xF6E5,
+  hyphenmonospace: 0xFF0D,
+  hyphensmall: 0xFE63,
+  hyphensuperior: 0xF6E6,
+  hyphentwo: 0x2010,
+  i: 0x0069,
+  iacute: 0x00ED,
+  iacyrillic: 0x044F,
+  ibengali: 0x0987,
+  ibopomofo: 0x3127,
+  ibreve: 0x012D,
+  icaron: 0x01D0,
+  icircle: 0x24D8,
+  icircumflex: 0x00EE,
+  icyrillic: 0x0456,
+  idblgrave: 0x0209,
+  ideographearthcircle: 0x328F,
+  ideographfirecircle: 0x328B,
+  ideographicallianceparen: 0x323F,
+  ideographiccallparen: 0x323A,
+  ideographiccentrecircle: 0x32A5,
+  ideographicclose: 0x3006,
+  ideographiccomma: 0x3001,
+  ideographiccommaleft: 0xFF64,
+  ideographiccongratulationparen: 0x3237,
+  ideographiccorrectcircle: 0x32A3,
+  ideographicearthparen: 0x322F,
+  ideographicenterpriseparen: 0x323D,
+  ideographicexcellentcircle: 0x329D,
+  ideographicfestivalparen: 0x3240,
+  ideographicfinancialcircle: 0x3296,
+  ideographicfinancialparen: 0x3236,
+  ideographicfireparen: 0x322B,
+  ideographichaveparen: 0x3232,
+  ideographichighcircle: 0x32A4,
+  ideographiciterationmark: 0x3005,
+  ideographiclaborcircle: 0x3298,
+  ideographiclaborparen: 0x3238,
+  ideographicleftcircle: 0x32A7,
+  ideographiclowcircle: 0x32A6,
+  ideographicmedicinecircle: 0x32A9,
+  ideographicmetalparen: 0x322E,
+  ideographicmoonparen: 0x322A,
+  ideographicnameparen: 0x3234,
+  ideographicperiod: 0x3002,
+  ideographicprintcircle: 0x329E,
+  ideographicreachparen: 0x3243,
+  ideographicrepresentparen: 0x3239,
+  ideographicresourceparen: 0x323E,
+  ideographicrightcircle: 0x32A8,
+  ideographicsecretcircle: 0x3299,
+  ideographicselfparen: 0x3242,
+  ideographicsocietyparen: 0x3233,
+  ideographicspace: 0x3000,
+  ideographicspecialparen: 0x3235,
+  ideographicstockparen: 0x3231,
+  ideographicstudyparen: 0x323B,
+  ideographicsunparen: 0x3230,
+  ideographicsuperviseparen: 0x323C,
+  ideographicwaterparen: 0x322C,
+  ideographicwoodparen: 0x322D,
+  ideographiczero: 0x3007,
+  ideographmetalcircle: 0x328E,
+  ideographmooncircle: 0x328A,
+  ideographnamecircle: 0x3294,
+  ideographsuncircle: 0x3290,
+  ideographwatercircle: 0x328C,
+  ideographwoodcircle: 0x328D,
+  ideva: 0x0907,
+  idieresis: 0x00EF,
+  idieresisacute: 0x1E2F,
+  idieresiscyrillic: 0x04E5,
+  idotbelow: 0x1ECB,
+  iebrevecyrillic: 0x04D7,
+  iecyrillic: 0x0435,
+  ieungacirclekorean: 0x3275,
+  ieungaparenkorean: 0x3215,
+  ieungcirclekorean: 0x3267,
+  ieungkorean: 0x3147,
+  ieungparenkorean: 0x3207,
+  igrave: 0x00EC,
+  igujarati: 0x0A87,
+  igurmukhi: 0x0A07,
+  ihiragana: 0x3044,
+  ihookabove: 0x1EC9,
+  iibengali: 0x0988,
+  iicyrillic: 0x0438,
+  iideva: 0x0908,
+  iigujarati: 0x0A88,
+  iigurmukhi: 0x0A08,
+  iimatragurmukhi: 0x0A40,
+  iinvertedbreve: 0x020B,
+  iishortcyrillic: 0x0439,
+  iivowelsignbengali: 0x09C0,
+  iivowelsigndeva: 0x0940,
+  iivowelsigngujarati: 0x0AC0,
+  ij: 0x0133,
+  ikatakana: 0x30A4,
+  ikatakanahalfwidth: 0xFF72,
+  ikorean: 0x3163,
+  ilde: 0x02DC,
+  iluyhebrew: 0x05AC,
+  imacron: 0x012B,
+  imacroncyrillic: 0x04E3,
+  imageorapproximatelyequal: 0x2253,
+  imatragurmukhi: 0x0A3F,
+  imonospace: 0xFF49,
+  increment: 0x2206,
+  infinity: 0x221E,
+  iniarmenian: 0x056B,
+  integral: 0x222B,
+  integralbottom: 0x2321,
+  integralbt: 0x2321,
+  integralex: 0xF8F5,
+  integraltop: 0x2320,
+  integraltp: 0x2320,
+  intersection: 0x2229,
+  intisquare: 0x3305,
+  invbullet: 0x25D8,
+  invcircle: 0x25D9,
+  invsmileface: 0x263B,
+  iocyrillic: 0x0451,
+  iogonek: 0x012F,
+  iota: 0x03B9,
+  iotadieresis: 0x03CA,
+  iotadieresistonos: 0x0390,
+  iotalatin: 0x0269,
+  iotatonos: 0x03AF,
+  iparen: 0x24A4,
+  irigurmukhi: 0x0A72,
+  ismallhiragana: 0x3043,
+  ismallkatakana: 0x30A3,
+  ismallkatakanahalfwidth: 0xFF68,
+  issharbengali: 0x09FA,
+  istroke: 0x0268,
+  isuperior: 0xF6ED,
+  iterationhiragana: 0x309D,
+  iterationkatakana: 0x30FD,
+  itilde: 0x0129,
+  itildebelow: 0x1E2D,
+  iubopomofo: 0x3129,
+  iucyrillic: 0x044E,
+  ivowelsignbengali: 0x09BF,
+  ivowelsigndeva: 0x093F,
+  ivowelsigngujarati: 0x0ABF,
+  izhitsacyrillic: 0x0475,
+  izhitsadblgravecyrillic: 0x0477,
+  j: 0x006A,
+  jaarmenian: 0x0571,
+  jabengali: 0x099C,
+  jadeva: 0x091C,
+  jagujarati: 0x0A9C,
+  jagurmukhi: 0x0A1C,
+  jbopomofo: 0x3110,
+  jcaron: 0x01F0,
+  jcircle: 0x24D9,
+  jcircumflex: 0x0135,
+  jcrossedtail: 0x029D,
+  jdotlessstroke: 0x025F,
+  jecyrillic: 0x0458,
+  jeemarabic: 0x062C,
+  jeemfinalarabic: 0xFE9E,
+  jeeminitialarabic: 0xFE9F,
+  jeemmedialarabic: 0xFEA0,
+  jeharabic: 0x0698,
+  jehfinalarabic: 0xFB8B,
+  jhabengali: 0x099D,
+  jhadeva: 0x091D,
+  jhagujarati: 0x0A9D,
+  jhagurmukhi: 0x0A1D,
+  jheharmenian: 0x057B,
+  jis: 0x3004,
+  jmonospace: 0xFF4A,
+  jparen: 0x24A5,
+  jsuperior: 0x02B2,
+  k: 0x006B,
+  kabashkircyrillic: 0x04A1,
+  kabengali: 0x0995,
+  kacute: 0x1E31,
+  kacyrillic: 0x043A,
+  kadescendercyrillic: 0x049B,
+  kadeva: 0x0915,
+  kaf: 0x05DB,
+  kafarabic: 0x0643,
+  kafdagesh: 0xFB3B,
+  kafdageshhebrew: 0xFB3B,
+  kaffinalarabic: 0xFEDA,
+  kafhebrew: 0x05DB,
+  kafinitialarabic: 0xFEDB,
+  kafmedialarabic: 0xFEDC,
+  kafrafehebrew: 0xFB4D,
+  kagujarati: 0x0A95,
+  kagurmukhi: 0x0A15,
+  kahiragana: 0x304B,
+  kahookcyrillic: 0x04C4,
+  kakatakana: 0x30AB,
+  kakatakanahalfwidth: 0xFF76,
+  kappa: 0x03BA,
+  kappasymbolgreek: 0x03F0,
+  kapyeounmieumkorean: 0x3171,
+  kapyeounphieuphkorean: 0x3184,
+  kapyeounpieupkorean: 0x3178,
+  kapyeounssangpieupkorean: 0x3179,
+  karoriisquare: 0x330D,
+  kashidaautoarabic: 0x0640,
+  kashidaautonosidebearingarabic: 0x0640,
+  kasmallkatakana: 0x30F5,
+  kasquare: 0x3384,
+  kasraarabic: 0x0650,
+  kasratanarabic: 0x064D,
+  kastrokecyrillic: 0x049F,
+  katahiraprolongmarkhalfwidth: 0xFF70,
+  kaverticalstrokecyrillic: 0x049D,
+  kbopomofo: 0x310E,
+  kcalsquare: 0x3389,
+  kcaron: 0x01E9,
+  kcedilla: 0x0137,
+  kcircle: 0x24DA,
+  kcommaaccent: 0x0137,
+  kdotbelow: 0x1E33,
+  keharmenian: 0x0584,
+  kehiragana: 0x3051,
+  kekatakana: 0x30B1,
+  kekatakanahalfwidth: 0xFF79,
+  kenarmenian: 0x056F,
+  kesmallkatakana: 0x30F6,
+  kgreenlandic: 0x0138,
+  khabengali: 0x0996,
+  khacyrillic: 0x0445,
+  khadeva: 0x0916,
+  khagujarati: 0x0A96,
+  khagurmukhi: 0x0A16,
+  khaharabic: 0x062E,
+  khahfinalarabic: 0xFEA6,
+  khahinitialarabic: 0xFEA7,
+  khahmedialarabic: 0xFEA8,
+  kheicoptic: 0x03E7,
+  khhadeva: 0x0959,
+  khhagurmukhi: 0x0A59,
+  khieukhacirclekorean: 0x3278,
+  khieukhaparenkorean: 0x3218,
+  khieukhcirclekorean: 0x326A,
+  khieukhkorean: 0x314B,
+  khieukhparenkorean: 0x320A,
+  khokhaithai: 0x0E02,
+  khokhonthai: 0x0E05,
+  khokhuatthai: 0x0E03,
+  khokhwaithai: 0x0E04,
+  khomutthai: 0x0E5B,
+  khook: 0x0199,
+  khorakhangthai: 0x0E06,
+  khzsquare: 0x3391,
+  kihiragana: 0x304D,
+  kikatakana: 0x30AD,
+  kikatakanahalfwidth: 0xFF77,
+  kiroguramusquare: 0x3315,
+  kiromeetorusquare: 0x3316,
+  kirosquare: 0x3314,
+  kiyeokacirclekorean: 0x326E,
+  kiyeokaparenkorean: 0x320E,
+  kiyeokcirclekorean: 0x3260,
+  kiyeokkorean: 0x3131,
+  kiyeokparenkorean: 0x3200,
+  kiyeoksioskorean: 0x3133,
+  kjecyrillic: 0x045C,
+  klinebelow: 0x1E35,
+  klsquare: 0x3398,
+  kmcubedsquare: 0x33A6,
+  kmonospace: 0xFF4B,
+  kmsquaredsquare: 0x33A2,
+  kohiragana: 0x3053,
+  kohmsquare: 0x33C0,
+  kokaithai: 0x0E01,
+  kokatakana: 0x30B3,
+  kokatakanahalfwidth: 0xFF7A,
+  kooposquare: 0x331E,
+  koppacyrillic: 0x0481,
+  koreanstandardsymbol: 0x327F,
+  koroniscmb: 0x0343,
+  kparen: 0x24A6,
+  kpasquare: 0x33AA,
+  ksicyrillic: 0x046F,
+  ktsquare: 0x33CF,
+  kturned: 0x029E,
+  kuhiragana: 0x304F,
+  kukatakana: 0x30AF,
+  kukatakanahalfwidth: 0xFF78,
+  kvsquare: 0x33B8,
+  kwsquare: 0x33BE,
+  l: 0x006C,
+  labengali: 0x09B2,
+  lacute: 0x013A,
+  ladeva: 0x0932,
+  lagujarati: 0x0AB2,
+  lagurmukhi: 0x0A32,
+  lakkhangyaothai: 0x0E45,
+  lamaleffinalarabic: 0xFEFC,
+  lamalefhamzaabovefinalarabic: 0xFEF8,
+  lamalefhamzaaboveisolatedarabic: 0xFEF7,
+  lamalefhamzabelowfinalarabic: 0xFEFA,
+  lamalefhamzabelowisolatedarabic: 0xFEF9,
+  lamalefisolatedarabic: 0xFEFB,
+  lamalefmaddaabovefinalarabic: 0xFEF6,
+  lamalefmaddaaboveisolatedarabic: 0xFEF5,
+  lamarabic: 0x0644,
+  lambda: 0x03BB,
+  lambdastroke: 0x019B,
+  lamed: 0x05DC,
+  lameddagesh: 0xFB3C,
+  lameddageshhebrew: 0xFB3C,
+  lamedhebrew: 0x05DC,
+  lamfinalarabic: 0xFEDE,
+  lamhahinitialarabic: 0xFCCA,
+  laminitialarabic: 0xFEDF,
+  lamjeeminitialarabic: 0xFCC9,
+  lamkhahinitialarabic: 0xFCCB,
+  lamlamhehisolatedarabic: 0xFDF2,
+  lammedialarabic: 0xFEE0,
+  lammeemhahinitialarabic: 0xFD88,
+  lammeeminitialarabic: 0xFCCC,
+  largecircle: 0x25EF,
+  lbar: 0x019A,
+  lbelt: 0x026C,
+  lbopomofo: 0x310C,
+  lcaron: 0x013E,
+  lcedilla: 0x013C,
+  lcircle: 0x24DB,
+  lcircumflexbelow: 0x1E3D,
+  lcommaaccent: 0x013C,
+  ldot: 0x0140,
+  ldotaccent: 0x0140,
+  ldotbelow: 0x1E37,
+  ldotbelowmacron: 0x1E39,
+  leftangleabovecmb: 0x031A,
+  lefttackbelowcmb: 0x0318,
+  less: 0x003C,
+  lessequal: 0x2264,
+  lessequalorgreater: 0x22DA,
+  lessmonospace: 0xFF1C,
+  lessorequivalent: 0x2272,
+  lessorgreater: 0x2276,
+  lessoverequal: 0x2266,
+  lesssmall: 0xFE64,
+  lezh: 0x026E,
+  lfblock: 0x258C,
+  lhookretroflex: 0x026D,
+  lira: 0x20A4,
+  liwnarmenian: 0x056C,
+  lj: 0x01C9,
+  ljecyrillic: 0x0459,
+  ll: 0xF6C0,
+  lladeva: 0x0933,
+  llagujarati: 0x0AB3,
+  llinebelow: 0x1E3B,
+  llladeva: 0x0934,
+  llvocalicbengali: 0x09E1,
+  llvocalicdeva: 0x0961,
+  llvocalicvowelsignbengali: 0x09E3,
+  llvocalicvowelsigndeva: 0x0963,
+  lmiddletilde: 0x026B,
+  lmonospace: 0xFF4C,
+  lmsquare: 0x33D0,
+  lochulathai: 0x0E2C,
+  logicaland: 0x2227,
+  logicalnot: 0x00AC,
+  logicalnotreversed: 0x2310,
+  logicalor: 0x2228,
+  lolingthai: 0x0E25,
+  longs: 0x017F,
+  lowlinecenterline: 0xFE4E,
+  lowlinecmb: 0x0332,
+  lowlinedashed: 0xFE4D,
+  lozenge: 0x25CA,
+  lparen: 0x24A7,
+  lslash: 0x0142,
+  lsquare: 0x2113,
+  lsuperior: 0xF6EE,
+  ltshade: 0x2591,
+  luthai: 0x0E26,
+  lvocalicbengali: 0x098C,
+  lvocalicdeva: 0x090C,
+  lvocalicvowelsignbengali: 0x09E2,
+  lvocalicvowelsigndeva: 0x0962,
+  lxsquare: 0x33D3,
+  m: 0x006D,
+  mabengali: 0x09AE,
+  macron: 0x00AF,
+  macronbelowcmb: 0x0331,
+  macroncmb: 0x0304,
+  macronlowmod: 0x02CD,
+  macronmonospace: 0xFFE3,
+  macute: 0x1E3F,
+  madeva: 0x092E,
+  magujarati: 0x0AAE,
+  magurmukhi: 0x0A2E,
+  mahapakhhebrew: 0x05A4,
+  mahapakhlefthebrew: 0x05A4,
+  mahiragana: 0x307E,
+  maichattawalowleftthai: 0xF895,
+  maichattawalowrightthai: 0xF894,
+  maichattawathai: 0x0E4B,
+  maichattawaupperleftthai: 0xF893,
+  maieklowleftthai: 0xF88C,
+  maieklowrightthai: 0xF88B,
+  maiekthai: 0x0E48,
+  maiekupperleftthai: 0xF88A,
+  maihanakatleftthai: 0xF884,
+  maihanakatthai: 0x0E31,
+  maitaikhuleftthai: 0xF889,
+  maitaikhuthai: 0x0E47,
+  maitholowleftthai: 0xF88F,
+  maitholowrightthai: 0xF88E,
+  maithothai: 0x0E49,
+  maithoupperleftthai: 0xF88D,
+  maitrilowleftthai: 0xF892,
+  maitrilowrightthai: 0xF891,
+  maitrithai: 0x0E4A,
+  maitriupperleftthai: 0xF890,
+  maiyamokthai: 0x0E46,
+  makatakana: 0x30DE,
+  makatakanahalfwidth: 0xFF8F,
+  male: 0x2642,
+  mansyonsquare: 0x3347,
+  maqafhebrew: 0x05BE,
+  mars: 0x2642,
+  masoracirclehebrew: 0x05AF,
+  masquare: 0x3383,
+  mbopomofo: 0x3107,
+  mbsquare: 0x33D4,
+  mcircle: 0x24DC,
+  mcubedsquare: 0x33A5,
+  mdotaccent: 0x1E41,
+  mdotbelow: 0x1E43,
+  meemarabic: 0x0645,
+  meemfinalarabic: 0xFEE2,
+  meeminitialarabic: 0xFEE3,
+  meemmedialarabic: 0xFEE4,
+  meemmeeminitialarabic: 0xFCD1,
+  meemmeemisolatedarabic: 0xFC48,
+  meetorusquare: 0x334D,
+  mehiragana: 0x3081,
+  meizierasquare: 0x337E,
+  mekatakana: 0x30E1,
+  mekatakanahalfwidth: 0xFF92,
+  mem: 0x05DE,
+  memdagesh: 0xFB3E,
+  memdageshhebrew: 0xFB3E,
+  memhebrew: 0x05DE,
+  menarmenian: 0x0574,
+  merkhahebrew: 0x05A5,
+  merkhakefulahebrew: 0x05A6,
+  merkhakefulalefthebrew: 0x05A6,
+  merkhalefthebrew: 0x05A5,
+  mhook: 0x0271,
+  mhzsquare: 0x3392,
+  middledotkatakanahalfwidth: 0xFF65,
+  middot: 0x00B7,
+  mieumacirclekorean: 0x3272,
+  mieumaparenkorean: 0x3212,
+  mieumcirclekorean: 0x3264,
+  mieumkorean: 0x3141,
+  mieumpansioskorean: 0x3170,
+  mieumparenkorean: 0x3204,
+  mieumpieupkorean: 0x316E,
+  mieumsioskorean: 0x316F,
+  mihiragana: 0x307F,
+  mikatakana: 0x30DF,
+  mikatakanahalfwidth: 0xFF90,
+  minus: 0x2212,
+  minusbelowcmb: 0x0320,
+  minuscircle: 0x2296,
+  minusmod: 0x02D7,
+  minusplus: 0x2213,
+  minute: 0x2032,
+  miribaarusquare: 0x334A,
+  mirisquare: 0x3349,
+  mlonglegturned: 0x0270,
+  mlsquare: 0x3396,
+  mmcubedsquare: 0x33A3,
+  mmonospace: 0xFF4D,
+  mmsquaredsquare: 0x339F,
+  mohiragana: 0x3082,
+  mohmsquare: 0x33C1,
+  mokatakana: 0x30E2,
+  mokatakanahalfwidth: 0xFF93,
+  molsquare: 0x33D6,
+  momathai: 0x0E21,
+  moverssquare: 0x33A7,
+  moverssquaredsquare: 0x33A8,
+  mparen: 0x24A8,
+  mpasquare: 0x33AB,
+  mssquare: 0x33B3,
+  msuperior: 0xF6EF,
+  mturned: 0x026F,
+  mu: 0x00B5,
+  mu1: 0x00B5,
+  muasquare: 0x3382,
+  muchgreater: 0x226B,
+  muchless: 0x226A,
+  mufsquare: 0x338C,
+  mugreek: 0x03BC,
+  mugsquare: 0x338D,
+  muhiragana: 0x3080,
+  mukatakana: 0x30E0,
+  mukatakanahalfwidth: 0xFF91,
+  mulsquare: 0x3395,
+  multiply: 0x00D7,
+  mumsquare: 0x339B,
+  munahhebrew: 0x05A3,
+  munahlefthebrew: 0x05A3,
+  musicalnote: 0x266A,
+  musicalnotedbl: 0x266B,
+  musicflatsign: 0x266D,
+  musicsharpsign: 0x266F,
+  mussquare: 0x33B2,
+  muvsquare: 0x33B6,
+  muwsquare: 0x33BC,
+  mvmegasquare: 0x33B9,
+  mvsquare: 0x33B7,
+  mwmegasquare: 0x33BF,
+  mwsquare: 0x33BD,
+  n: 0x006E,
+  nabengali: 0x09A8,
+  nabla: 0x2207,
+  nacute: 0x0144,
+  nadeva: 0x0928,
+  nagujarati: 0x0AA8,
+  nagurmukhi: 0x0A28,
+  nahiragana: 0x306A,
+  nakatakana: 0x30CA,
+  nakatakanahalfwidth: 0xFF85,
+  napostrophe: 0x0149,
+  nasquare: 0x3381,
+  nbopomofo: 0x310B,
+  nbspace: 0x00A0,
+  ncaron: 0x0148,
+  ncedilla: 0x0146,
+  ncircle: 0x24DD,
+  ncircumflexbelow: 0x1E4B,
+  ncommaaccent: 0x0146,
+  ndotaccent: 0x1E45,
+  ndotbelow: 0x1E47,
+  nehiragana: 0x306D,
+  nekatakana: 0x30CD,
+  nekatakanahalfwidth: 0xFF88,
+  newsheqelsign: 0x20AA,
+  nfsquare: 0x338B,
+  ngabengali: 0x0999,
+  ngadeva: 0x0919,
+  ngagujarati: 0x0A99,
+  ngagurmukhi: 0x0A19,
+  ngonguthai: 0x0E07,
+  nhiragana: 0x3093,
+  nhookleft: 0x0272,
+  nhookretroflex: 0x0273,
+  nieunacirclekorean: 0x326F,
+  nieunaparenkorean: 0x320F,
+  nieuncieuckorean: 0x3135,
+  nieuncirclekorean: 0x3261,
+  nieunhieuhkorean: 0x3136,
+  nieunkorean: 0x3134,
+  nieunpansioskorean: 0x3168,
+  nieunparenkorean: 0x3201,
+  nieunsioskorean: 0x3167,
+  nieuntikeutkorean: 0x3166,
+  nihiragana: 0x306B,
+  nikatakana: 0x30CB,
+  nikatakanahalfwidth: 0xFF86,
+  nikhahitleftthai: 0xF899,
+  nikhahitthai: 0x0E4D,
+  nine: 0x0039,
+  ninearabic: 0x0669,
+  ninebengali: 0x09EF,
+  ninecircle: 0x2468,
+  ninecircleinversesansserif: 0x2792,
+  ninedeva: 0x096F,
+  ninegujarati: 0x0AEF,
+  ninegurmukhi: 0x0A6F,
+  ninehackarabic: 0x0669,
+  ninehangzhou: 0x3029,
+  nineideographicparen: 0x3228,
+  nineinferior: 0x2089,
+  ninemonospace: 0xFF19,
+  nineoldstyle: 0xF739,
+  nineparen: 0x247C,
+  nineperiod: 0x2490,
+  ninepersian: 0x06F9,
+  nineroman: 0x2178,
+  ninesuperior: 0x2079,
+  nineteencircle: 0x2472,
+  nineteenparen: 0x2486,
+  nineteenperiod: 0x249A,
+  ninethai: 0x0E59,
+  nj: 0x01CC,
+  njecyrillic: 0x045A,
+  nkatakana: 0x30F3,
+  nkatakanahalfwidth: 0xFF9D,
+  nlegrightlong: 0x019E,
+  nlinebelow: 0x1E49,
+  nmonospace: 0xFF4E,
+  nmsquare: 0x339A,
+  nnabengali: 0x09A3,
+  nnadeva: 0x0923,
+  nnagujarati: 0x0AA3,
+  nnagurmukhi: 0x0A23,
+  nnnadeva: 0x0929,
+  nohiragana: 0x306E,
+  nokatakana: 0x30CE,
+  nokatakanahalfwidth: 0xFF89,
+  nonbreakingspace: 0x00A0,
+  nonenthai: 0x0E13,
+  nonuthai: 0x0E19,
+  noonarabic: 0x0646,
+  noonfinalarabic: 0xFEE6,
+  noonghunnaarabic: 0x06BA,
+  noonghunnafinalarabic: 0xFB9F,
+  nooninitialarabic: 0xFEE7,
+  noonjeeminitialarabic: 0xFCD2,
+  noonjeemisolatedarabic: 0xFC4B,
+  noonmedialarabic: 0xFEE8,
+  noonmeeminitialarabic: 0xFCD5,
+  noonmeemisolatedarabic: 0xFC4E,
+  noonnoonfinalarabic: 0xFC8D,
+  notcontains: 0x220C,
+  notelement: 0x2209,
+  notelementof: 0x2209,
+  notequal: 0x2260,
+  notgreater: 0x226F,
+  notgreaternorequal: 0x2271,
+  notgreaternorless: 0x2279,
+  notidentical: 0x2262,
+  notless: 0x226E,
+  notlessnorequal: 0x2270,
+  notparallel: 0x2226,
+  notprecedes: 0x2280,
+  notsubset: 0x2284,
+  notsucceeds: 0x2281,
+  notsuperset: 0x2285,
+  nowarmenian: 0x0576,
+  nparen: 0x24A9,
+  nssquare: 0x33B1,
+  nsuperior: 0x207F,
+  ntilde: 0x00F1,
+  nu: 0x03BD,
+  nuhiragana: 0x306C,
+  nukatakana: 0x30CC,
+  nukatakanahalfwidth: 0xFF87,
+  nuktabengali: 0x09BC,
+  nuktadeva: 0x093C,
+  nuktagujarati: 0x0ABC,
+  nuktagurmukhi: 0x0A3C,
+  numbersign: 0x0023,
+  numbersignmonospace: 0xFF03,
+  numbersignsmall: 0xFE5F,
+  numeralsigngreek: 0x0374,
+  numeralsignlowergreek: 0x0375,
+  numero: 0x2116,
+  nun: 0x05E0,
+  nundagesh: 0xFB40,
+  nundageshhebrew: 0xFB40,
+  nunhebrew: 0x05E0,
+  nvsquare: 0x33B5,
+  nwsquare: 0x33BB,
+  nyabengali: 0x099E,
+  nyadeva: 0x091E,
+  nyagujarati: 0x0A9E,
+  nyagurmukhi: 0x0A1E,
+  o: 0x006F,
+  oacute: 0x00F3,
+  oangthai: 0x0E2D,
+  obarred: 0x0275,
+  obarredcyrillic: 0x04E9,
+  obarreddieresiscyrillic: 0x04EB,
+  obengali: 0x0993,
+  obopomofo: 0x311B,
+  obreve: 0x014F,
+  ocandradeva: 0x0911,
+  ocandragujarati: 0x0A91,
+  ocandravowelsigndeva: 0x0949,
+  ocandravowelsigngujarati: 0x0AC9,
+  ocaron: 0x01D2,
+  ocircle: 0x24DE,
+  ocircumflex: 0x00F4,
+  ocircumflexacute: 0x1ED1,
+  ocircumflexdotbelow: 0x1ED9,
+  ocircumflexgrave: 0x1ED3,
+  ocircumflexhookabove: 0x1ED5,
+  ocircumflextilde: 0x1ED7,
+  ocyrillic: 0x043E,
+  odblacute: 0x0151,
+  odblgrave: 0x020D,
+  odeva: 0x0913,
+  odieresis: 0x00F6,
+  odieresiscyrillic: 0x04E7,
+  odotbelow: 0x1ECD,
+  oe: 0x0153,
+  oekorean: 0x315A,
+  ogonek: 0x02DB,
+  ogonekcmb: 0x0328,
+  ograve: 0x00F2,
+  ogujarati: 0x0A93,
+  oharmenian: 0x0585,
+  ohiragana: 0x304A,
+  ohookabove: 0x1ECF,
+  ohorn: 0x01A1,
+  ohornacute: 0x1EDB,
+  ohorndotbelow: 0x1EE3,
+  ohorngrave: 0x1EDD,
+  ohornhookabove: 0x1EDF,
+  ohorntilde: 0x1EE1,
+  ohungarumlaut: 0x0151,
+  oi: 0x01A3,
+  oinvertedbreve: 0x020F,
+  okatakana: 0x30AA,
+  okatakanahalfwidth: 0xFF75,
+  okorean: 0x3157,
+  olehebrew: 0x05AB,
+  omacron: 0x014D,
+  omacronacute: 0x1E53,
+  omacrongrave: 0x1E51,
+  omdeva: 0x0950,
+  omega: 0x03C9,
+  omega1: 0x03D6,
+  omegacyrillic: 0x0461,
+  omegalatinclosed: 0x0277,
+  omegaroundcyrillic: 0x047B,
+  omegatitlocyrillic: 0x047D,
+  omegatonos: 0x03CE,
+  omgujarati: 0x0AD0,
+  omicron: 0x03BF,
+  omicrontonos: 0x03CC,
+  omonospace: 0xFF4F,
+  one: 0x0031,
+  onearabic: 0x0661,
+  onebengali: 0x09E7,
+  onecircle: 0x2460,
+  onecircleinversesansserif: 0x278A,
+  onedeva: 0x0967,
+  onedotenleader: 0x2024,
+  oneeighth: 0x215B,
+  onefitted: 0xF6DC,
+  onegujarati: 0x0AE7,
+  onegurmukhi: 0x0A67,
+  onehackarabic: 0x0661,
+  onehalf: 0x00BD,
+  onehangzhou: 0x3021,
+  oneideographicparen: 0x3220,
+  oneinferior: 0x2081,
+  onemonospace: 0xFF11,
+  onenumeratorbengali: 0x09F4,
+  oneoldstyle: 0xF731,
+  oneparen: 0x2474,
+  oneperiod: 0x2488,
+  onepersian: 0x06F1,
+  onequarter: 0x00BC,
+  oneroman: 0x2170,
+  onesuperior: 0x00B9,
+  onethai: 0x0E51,
+  onethird: 0x2153,
+  oogonek: 0x01EB,
+  oogonekmacron: 0x01ED,
+  oogurmukhi: 0x0A13,
+  oomatragurmukhi: 0x0A4B,
+  oopen: 0x0254,
+  oparen: 0x24AA,
+  openbullet: 0x25E6,
+  option: 0x2325,
+  ordfeminine: 0x00AA,
+  ordmasculine: 0x00BA,
+  orthogonal: 0x221F,
+  oshortdeva: 0x0912,
+  oshortvowelsigndeva: 0x094A,
+  oslash: 0x00F8,
+  oslashacute: 0x01FF,
+  osmallhiragana: 0x3049,
+  osmallkatakana: 0x30A9,
+  osmallkatakanahalfwidth: 0xFF6B,
+  ostrokeacute: 0x01FF,
+  osuperior: 0xF6F0,
+  otcyrillic: 0x047F,
+  otilde: 0x00F5,
+  otildeacute: 0x1E4D,
+  otildedieresis: 0x1E4F,
+  oubopomofo: 0x3121,
+  overline: 0x203E,
+  overlinecenterline: 0xFE4A,
+  overlinecmb: 0x0305,
+  overlinedashed: 0xFE49,
+  overlinedblwavy: 0xFE4C,
+  overlinewavy: 0xFE4B,
+  overscore: 0x00AF,
+  ovowelsignbengali: 0x09CB,
+  ovowelsigndeva: 0x094B,
+  ovowelsigngujarati: 0x0ACB,
+  p: 0x0070,
+  paampssquare: 0x3380,
+  paasentosquare: 0x332B,
+  pabengali: 0x09AA,
+  pacute: 0x1E55,
+  padeva: 0x092A,
+  pagedown: 0x21DF,
+  pageup: 0x21DE,
+  pagujarati: 0x0AAA,
+  pagurmukhi: 0x0A2A,
+  pahiragana: 0x3071,
+  paiyannoithai: 0x0E2F,
+  pakatakana: 0x30D1,
+  palatalizationcyrilliccmb: 0x0484,
+  palochkacyrillic: 0x04C0,
+  pansioskorean: 0x317F,
+  paragraph: 0x00B6,
+  parallel: 0x2225,
+  parenleft: 0x0028,
+  parenleftaltonearabic: 0xFD3E,
+  parenleftbt: 0xF8ED,
+  parenleftex: 0xF8EC,
+  parenleftinferior: 0x208D,
+  parenleftmonospace: 0xFF08,
+  parenleftsmall: 0xFE59,
+  parenleftsuperior: 0x207D,
+  parenlefttp: 0xF8EB,
+  parenleftvertical: 0xFE35,
+  parenright: 0x0029,
+  parenrightaltonearabic: 0xFD3F,
+  parenrightbt: 0xF8F8,
+  parenrightex: 0xF8F7,
+  parenrightinferior: 0x208E,
+  parenrightmonospace: 0xFF09,
+  parenrightsmall: 0xFE5A,
+  parenrightsuperior: 0x207E,
+  parenrighttp: 0xF8F6,
+  parenrightvertical: 0xFE36,
+  partialdiff: 0x2202,
+  paseqhebrew: 0x05C0,
+  pashtahebrew: 0x0599,
+  pasquare: 0x33A9,
+  patah: 0x05B7,
+  patah11: 0x05B7,
+  patah1d: 0x05B7,
+  patah2a: 0x05B7,
+  patahhebrew: 0x05B7,
+  patahnarrowhebrew: 0x05B7,
+  patahquarterhebrew: 0x05B7,
+  patahwidehebrew: 0x05B7,
+  pazerhebrew: 0x05A1,
+  pbopomofo: 0x3106,
+  pcircle: 0x24DF,
+  pdotaccent: 0x1E57,
+  pe: 0x05E4,
+  pecyrillic: 0x043F,
+  pedagesh: 0xFB44,
+  pedageshhebrew: 0xFB44,
+  peezisquare: 0x333B,
+  pefinaldageshhebrew: 0xFB43,
+  peharabic: 0x067E,
+  peharmenian: 0x057A,
+  pehebrew: 0x05E4,
+  pehfinalarabic: 0xFB57,
+  pehinitialarabic: 0xFB58,
+  pehiragana: 0x307A,
+  pehmedialarabic: 0xFB59,
+  pekatakana: 0x30DA,
+  pemiddlehookcyrillic: 0x04A7,
+  perafehebrew: 0xFB4E,
+  percent: 0x0025,
+  percentarabic: 0x066A,
+  percentmonospace: 0xFF05,
+  percentsmall: 0xFE6A,
+  period: 0x002E,
+  periodarmenian: 0x0589,
+  periodcentered: 0x00B7,
+  periodhalfwidth: 0xFF61,
+  periodinferior: 0xF6E7,
+  periodmonospace: 0xFF0E,
+  periodsmall: 0xFE52,
+  periodsuperior: 0xF6E8,
+  perispomenigreekcmb: 0x0342,
+  perpendicular: 0x22A5,
+  perthousand: 0x2030,
+  peseta: 0x20A7,
+  pfsquare: 0x338A,
+  phabengali: 0x09AB,
+  phadeva: 0x092B,
+  phagujarati: 0x0AAB,
+  phagurmukhi: 0x0A2B,
+  phi: 0x03C6,
+  phi1: 0x03D5,
+  phieuphacirclekorean: 0x327A,
+  phieuphaparenkorean: 0x321A,
+  phieuphcirclekorean: 0x326C,
+  phieuphkorean: 0x314D,
+  phieuphparenkorean: 0x320C,
+  philatin: 0x0278,
+  phinthuthai: 0x0E3A,
+  phisymbolgreek: 0x03D5,
+  phook: 0x01A5,
+  phophanthai: 0x0E1E,
+  phophungthai: 0x0E1C,
+  phosamphaothai: 0x0E20,
+  pi: 0x03C0,
+  pieupacirclekorean: 0x3273,
+  pieupaparenkorean: 0x3213,
+  pieupcieuckorean: 0x3176,
+  pieupcirclekorean: 0x3265,
+  pieupkiyeokkorean: 0x3172,
+  pieupkorean: 0x3142,
+  pieupparenkorean: 0x3205,
+  pieupsioskiyeokkorean: 0x3174,
+  pieupsioskorean: 0x3144,
+  pieupsiostikeutkorean: 0x3175,
+  pieupthieuthkorean: 0x3177,
+  pieuptikeutkorean: 0x3173,
+  pihiragana: 0x3074,
+  pikatakana: 0x30D4,
+  pisymbolgreek: 0x03D6,
+  piwrarmenian: 0x0583,
+  plus: 0x002B,
+  plusbelowcmb: 0x031F,
+  pluscircle: 0x2295,
+  plusminus: 0x00B1,
+  plusmod: 0x02D6,
+  plusmonospace: 0xFF0B,
+  plussmall: 0xFE62,
+  plussuperior: 0x207A,
+  pmonospace: 0xFF50,
+  pmsquare: 0x33D8,
+  pohiragana: 0x307D,
+  pointingindexdownwhite: 0x261F,
+  pointingindexleftwhite: 0x261C,
+  pointingindexrightwhite: 0x261E,
+  pointingindexupwhite: 0x261D,
+  pokatakana: 0x30DD,
+  poplathai: 0x0E1B,
+  postalmark: 0x3012,
+  postalmarkface: 0x3020,
+  pparen: 0x24AB,
+  precedes: 0x227A,
+  prescription: 0x211E,
+  primemod: 0x02B9,
+  primereversed: 0x2035,
+  product: 0x220F,
+  projective: 0x2305,
+  prolongedkana: 0x30FC,
+  propellor: 0x2318,
+  propersubset: 0x2282,
+  propersuperset: 0x2283,
+  proportion: 0x2237,
+  proportional: 0x221D,
+  psi: 0x03C8,
+  psicyrillic: 0x0471,
+  psilipneumatacyrilliccmb: 0x0486,
+  pssquare: 0x33B0,
+  puhiragana: 0x3077,
+  pukatakana: 0x30D7,
+  pvsquare: 0x33B4,
+  pwsquare: 0x33BA,
+  q: 0x0071,
+  qadeva: 0x0958,
+  qadmahebrew: 0x05A8,
+  qafarabic: 0x0642,
+  qaffinalarabic: 0xFED6,
+  qafinitialarabic: 0xFED7,
+  qafmedialarabic: 0xFED8,
+  qamats: 0x05B8,
+  qamats10: 0x05B8,
+  qamats1a: 0x05B8,
+  qamats1c: 0x05B8,
+  qamats27: 0x05B8,
+  qamats29: 0x05B8,
+  qamats33: 0x05B8,
+  qamatsde: 0x05B8,
+  qamatshebrew: 0x05B8,
+  qamatsnarrowhebrew: 0x05B8,
+  qamatsqatanhebrew: 0x05B8,
+  qamatsqatannarrowhebrew: 0x05B8,
+  qamatsqatanquarterhebrew: 0x05B8,
+  qamatsqatanwidehebrew: 0x05B8,
+  qamatsquarterhebrew: 0x05B8,
+  qamatswidehebrew: 0x05B8,
+  qarneyparahebrew: 0x059F,
+  qbopomofo: 0x3111,
+  qcircle: 0x24E0,
+  qhook: 0x02A0,
+  qmonospace: 0xFF51,
+  qof: 0x05E7,
+  qofdagesh: 0xFB47,
+  qofdageshhebrew: 0xFB47,
+  qofhebrew: 0x05E7,
+  qparen: 0x24AC,
+  quarternote: 0x2669,
+  qubuts: 0x05BB,
+  qubuts18: 0x05BB,
+  qubuts25: 0x05BB,
+  qubuts31: 0x05BB,
+  qubutshebrew: 0x05BB,
+  qubutsnarrowhebrew: 0x05BB,
+  qubutsquarterhebrew: 0x05BB,
+  qubutswidehebrew: 0x05BB,
+  question: 0x003F,
+  questionarabic: 0x061F,
+  questionarmenian: 0x055E,
+  questiondown: 0x00BF,
+  questiondownsmall: 0xF7BF,
+  questiongreek: 0x037E,
+  questionmonospace: 0xFF1F,
+  questionsmall: 0xF73F,
+  quotedbl: 0x0022,
+  quotedblbase: 0x201E,
+  quotedblleft: 0x201C,
+  quotedblmonospace: 0xFF02,
+  quotedblprime: 0x301E,
+  quotedblprimereversed: 0x301D,
+  quotedblright: 0x201D,
+  quoteleft: 0x2018,
+  quoteleftreversed: 0x201B,
+  quotereversed: 0x201B,
+  quoteright: 0x2019,
+  quoterightn: 0x0149,
+  quotesinglbase: 0x201A,
+  quotesingle: 0x0027,
+  quotesinglemonospace: 0xFF07,
+  r: 0x0072,
+  raarmenian: 0x057C,
+  rabengali: 0x09B0,
+  racute: 0x0155,
+  radeva: 0x0930,
+  radical: 0x221A,
+  radicalex: 0xF8E5,
+  radoverssquare: 0x33AE,
+  radoverssquaredsquare: 0x33AF,
+  radsquare: 0x33AD,
+  rafe: 0x05BF,
+  rafehebrew: 0x05BF,
+  ragujarati: 0x0AB0,
+  ragurmukhi: 0x0A30,
+  rahiragana: 0x3089,
+  rakatakana: 0x30E9,
+  rakatakanahalfwidth: 0xFF97,
+  ralowerdiagonalbengali: 0x09F1,
+  ramiddlediagonalbengali: 0x09F0,
+  ramshorn: 0x0264,
+  ratio: 0x2236,
+  rbopomofo: 0x3116,
+  rcaron: 0x0159,
+  rcedilla: 0x0157,
+  rcircle: 0x24E1,
+  rcommaaccent: 0x0157,
+  rdblgrave: 0x0211,
+  rdotaccent: 0x1E59,
+  rdotbelow: 0x1E5B,
+  rdotbelowmacron: 0x1E5D,
+  referencemark: 0x203B,
+  reflexsubset: 0x2286,
+  reflexsuperset: 0x2287,
+  registered: 0x00AE,
+  registersans: 0xF8E8,
+  registerserif: 0xF6DA,
+  reharabic: 0x0631,
+  reharmenian: 0x0580,
+  rehfinalarabic: 0xFEAE,
+  rehiragana: 0x308C,
+  rekatakana: 0x30EC,
+  rekatakanahalfwidth: 0xFF9A,
+  resh: 0x05E8,
+  reshdageshhebrew: 0xFB48,
+  reshhebrew: 0x05E8,
+  reversedtilde: 0x223D,
+  reviahebrew: 0x0597,
+  reviamugrashhebrew: 0x0597,
+  revlogicalnot: 0x2310,
+  rfishhook: 0x027E,
+  rfishhookreversed: 0x027F,
+  rhabengali: 0x09DD,
+  rhadeva: 0x095D,
+  rho: 0x03C1,
+  rhook: 0x027D,
+  rhookturned: 0x027B,
+  rhookturnedsuperior: 0x02B5,
+  rhosymbolgreek: 0x03F1,
+  rhotichookmod: 0x02DE,
+  rieulacirclekorean: 0x3271,
+  rieulaparenkorean: 0x3211,
+  rieulcirclekorean: 0x3263,
+  rieulhieuhkorean: 0x3140,
+  rieulkiyeokkorean: 0x313A,
+  rieulkiyeoksioskorean: 0x3169,
+  rieulkorean: 0x3139,
+  rieulmieumkorean: 0x313B,
+  rieulpansioskorean: 0x316C,
+  rieulparenkorean: 0x3203,
+  rieulphieuphkorean: 0x313F,
+  rieulpieupkorean: 0x313C,
+  rieulpieupsioskorean: 0x316B,
+  rieulsioskorean: 0x313D,
+  rieulthieuthkorean: 0x313E,
+  rieultikeutkorean: 0x316A,
+  rieulyeorinhieuhkorean: 0x316D,
+  rightangle: 0x221F,
+  righttackbelowcmb: 0x0319,
+  righttriangle: 0x22BF,
+  rihiragana: 0x308A,
+  rikatakana: 0x30EA,
+  rikatakanahalfwidth: 0xFF98,
+  ring: 0x02DA,
+  ringbelowcmb: 0x0325,
+  ringcmb: 0x030A,
+  ringhalfleft: 0x02BF,
+  ringhalfleftarmenian: 0x0559,
+  ringhalfleftbelowcmb: 0x031C,
+  ringhalfleftcentered: 0x02D3,
+  ringhalfright: 0x02BE,
+  ringhalfrightbelowcmb: 0x0339,
+  ringhalfrightcentered: 0x02D2,
+  rinvertedbreve: 0x0213,
+  rittorusquare: 0x3351,
+  rlinebelow: 0x1E5F,
+  rlongleg: 0x027C,
+  rlonglegturned: 0x027A,
+  rmonospace: 0xFF52,
+  rohiragana: 0x308D,
+  rokatakana: 0x30ED,
+  rokatakanahalfwidth: 0xFF9B,
+  roruathai: 0x0E23,
+  rparen: 0x24AD,
+  rrabengali: 0x09DC,
+  rradeva: 0x0931,
+  rragurmukhi: 0x0A5C,
+  rreharabic: 0x0691,
+  rrehfinalarabic: 0xFB8D,
+  rrvocalicbengali: 0x09E0,
+  rrvocalicdeva: 0x0960,
+  rrvocalicgujarati: 0x0AE0,
+  rrvocalicvowelsignbengali: 0x09C4,
+  rrvocalicvowelsigndeva: 0x0944,
+  rrvocalicvowelsigngujarati: 0x0AC4,
+  rsuperior: 0xF6F1,
+  rtblock: 0x2590,
+  rturned: 0x0279,
+  rturnedsuperior: 0x02B4,
+  ruhiragana: 0x308B,
+  rukatakana: 0x30EB,
+  rukatakanahalfwidth: 0xFF99,
+  rupeemarkbengali: 0x09F2,
+  rupeesignbengali: 0x09F3,
+  rupiah: 0xF6DD,
+  ruthai: 0x0E24,
+  rvocalicbengali: 0x098B,
+  rvocalicdeva: 0x090B,
+  rvocalicgujarati: 0x0A8B,
+  rvocalicvowelsignbengali: 0x09C3,
+  rvocalicvowelsigndeva: 0x0943,
+  rvocalicvowelsigngujarati: 0x0AC3,
+  s: 0x0073,
+  sabengali: 0x09B8,
+  sacute: 0x015B,
+  sacutedotaccent: 0x1E65,
+  sadarabic: 0x0635,
+  sadeva: 0x0938,
+  sadfinalarabic: 0xFEBA,
+  sadinitialarabic: 0xFEBB,
+  sadmedialarabic: 0xFEBC,
+  sagujarati: 0x0AB8,
+  sagurmukhi: 0x0A38,
+  sahiragana: 0x3055,
+  sakatakana: 0x30B5,
+  sakatakanahalfwidth: 0xFF7B,
+  sallallahoualayhewasallamarabic: 0xFDFA,
+  samekh: 0x05E1,
+  samekhdagesh: 0xFB41,
+  samekhdageshhebrew: 0xFB41,
+  samekhhebrew: 0x05E1,
+  saraaathai: 0x0E32,
+  saraaethai: 0x0E41,
+  saraaimaimalaithai: 0x0E44,
+  saraaimaimuanthai: 0x0E43,
+  saraamthai: 0x0E33,
+  saraathai: 0x0E30,
+  saraethai: 0x0E40,
+  saraiileftthai: 0xF886,
+  saraiithai: 0x0E35,
+  saraileftthai: 0xF885,
+  saraithai: 0x0E34,
+  saraothai: 0x0E42,
+  saraueeleftthai: 0xF888,
+  saraueethai: 0x0E37,
+  saraueleftthai: 0xF887,
+  sarauethai: 0x0E36,
+  sarauthai: 0x0E38,
+  sarauuthai: 0x0E39,
+  sbopomofo: 0x3119,
+  scaron: 0x0161,
+  scarondotaccent: 0x1E67,
+  scedilla: 0x015F,
+  schwa: 0x0259,
+  schwacyrillic: 0x04D9,
+  schwadieresiscyrillic: 0x04DB,
+  schwahook: 0x025A,
+  scircle: 0x24E2,
+  scircumflex: 0x015D,
+  scommaaccent: 0x0219,
+  sdotaccent: 0x1E61,
+  sdotbelow: 0x1E63,
+  sdotbelowdotaccent: 0x1E69,
+  seagullbelowcmb: 0x033C,
+  second: 0x2033,
+  secondtonechinese: 0x02CA,
+  section: 0x00A7,
+  seenarabic: 0x0633,
+  seenfinalarabic: 0xFEB2,
+  seeninitialarabic: 0xFEB3,
+  seenmedialarabic: 0xFEB4,
+  segol: 0x05B6,
+  segol13: 0x05B6,
+  segol1f: 0x05B6,
+  segol2c: 0x05B6,
+  segolhebrew: 0x05B6,
+  segolnarrowhebrew: 0x05B6,
+  segolquarterhebrew: 0x05B6,
+  segoltahebrew: 0x0592,
+  segolwidehebrew: 0x05B6,
+  seharmenian: 0x057D,
+  sehiragana: 0x305B,
+  sekatakana: 0x30BB,
+  sekatakanahalfwidth: 0xFF7E,
+  semicolon: 0x003B,
+  semicolonarabic: 0x061B,
+  semicolonmonospace: 0xFF1B,
+  semicolonsmall: 0xFE54,
+  semivoicedmarkkana: 0x309C,
+  semivoicedmarkkanahalfwidth: 0xFF9F,
+  sentisquare: 0x3322,
+  sentosquare: 0x3323,
+  seven: 0x0037,
+  sevenarabic: 0x0667,
+  sevenbengali: 0x09ED,
+  sevencircle: 0x2466,
+  sevencircleinversesansserif: 0x2790,
+  sevendeva: 0x096D,
+  seveneighths: 0x215E,
+  sevengujarati: 0x0AED,
+  sevengurmukhi: 0x0A6D,
+  sevenhackarabic: 0x0667,
+  sevenhangzhou: 0x3027,
+  sevenideographicparen: 0x3226,
+  seveninferior: 0x2087,
+  sevenmonospace: 0xFF17,
+  sevenoldstyle: 0xF737,
+  sevenparen: 0x247A,
+  sevenperiod: 0x248E,
+  sevenpersian: 0x06F7,
+  sevenroman: 0x2176,
+  sevensuperior: 0x2077,
+  seventeencircle: 0x2470,
+  seventeenparen: 0x2484,
+  seventeenperiod: 0x2498,
+  seventhai: 0x0E57,
+  sfthyphen: 0x00AD,
+  shaarmenian: 0x0577,
+  shabengali: 0x09B6,
+  shacyrillic: 0x0448,
+  shaddaarabic: 0x0651,
+  shaddadammaarabic: 0xFC61,
+  shaddadammatanarabic: 0xFC5E,
+  shaddafathaarabic: 0xFC60,
+  shaddakasraarabic: 0xFC62,
+  shaddakasratanarabic: 0xFC5F,
+  shade: 0x2592,
+  shadedark: 0x2593,
+  shadelight: 0x2591,
+  shademedium: 0x2592,
+  shadeva: 0x0936,
+  shagujarati: 0x0AB6,
+  shagurmukhi: 0x0A36,
+  shalshelethebrew: 0x0593,
+  shbopomofo: 0x3115,
+  shchacyrillic: 0x0449,
+  sheenarabic: 0x0634,
+  sheenfinalarabic: 0xFEB6,
+  sheeninitialarabic: 0xFEB7,
+  sheenmedialarabic: 0xFEB8,
+  sheicoptic: 0x03E3,
+  sheqel: 0x20AA,
+  sheqelhebrew: 0x20AA,
+  sheva: 0x05B0,
+  sheva115: 0x05B0,
+  sheva15: 0x05B0,
+  sheva22: 0x05B0,
+  sheva2e: 0x05B0,
+  shevahebrew: 0x05B0,
+  shevanarrowhebrew: 0x05B0,
+  shevaquarterhebrew: 0x05B0,
+  shevawidehebrew: 0x05B0,
+  shhacyrillic: 0x04BB,
+  shimacoptic: 0x03ED,
+  shin: 0x05E9,
+  shindagesh: 0xFB49,
+  shindageshhebrew: 0xFB49,
+  shindageshshindot: 0xFB2C,
+  shindageshshindothebrew: 0xFB2C,
+  shindageshsindot: 0xFB2D,
+  shindageshsindothebrew: 0xFB2D,
+  shindothebrew: 0x05C1,
+  shinhebrew: 0x05E9,
+  shinshindot: 0xFB2A,
+  shinshindothebrew: 0xFB2A,
+  shinsindot: 0xFB2B,
+  shinsindothebrew: 0xFB2B,
+  shook: 0x0282,
+  sigma: 0x03C3,
+  sigma1: 0x03C2,
+  sigmafinal: 0x03C2,
+  sigmalunatesymbolgreek: 0x03F2,
+  sihiragana: 0x3057,
+  sikatakana: 0x30B7,
+  sikatakanahalfwidth: 0xFF7C,
+  siluqhebrew: 0x05BD,
+  siluqlefthebrew: 0x05BD,
+  similar: 0x223C,
+  sindothebrew: 0x05C2,
+  siosacirclekorean: 0x3274,
+  siosaparenkorean: 0x3214,
+  sioscieuckorean: 0x317E,
+  sioscirclekorean: 0x3266,
+  sioskiyeokkorean: 0x317A,
+  sioskorean: 0x3145,
+  siosnieunkorean: 0x317B,
+  siosparenkorean: 0x3206,
+  siospieupkorean: 0x317D,
+  siostikeutkorean: 0x317C,
+  six: 0x0036,
+  sixarabic: 0x0666,
+  sixbengali: 0x09EC,
+  sixcircle: 0x2465,
+  sixcircleinversesansserif: 0x278F,
+  sixdeva: 0x096C,
+  sixgujarati: 0x0AEC,
+  sixgurmukhi: 0x0A6C,
+  sixhackarabic: 0x0666,
+  sixhangzhou: 0x3026,
+  sixideographicparen: 0x3225,
+  sixinferior: 0x2086,
+  sixmonospace: 0xFF16,
+  sixoldstyle: 0xF736,
+  sixparen: 0x2479,
+  sixperiod: 0x248D,
+  sixpersian: 0x06F6,
+  sixroman: 0x2175,
+  sixsuperior: 0x2076,
+  sixteencircle: 0x246F,
+  sixteencurrencydenominatorbengali: 0x09F9,
+  sixteenparen: 0x2483,
+  sixteenperiod: 0x2497,
+  sixthai: 0x0E56,
+  slash: 0x002F,
+  slashmonospace: 0xFF0F,
+  slong: 0x017F,
+  slongdotaccent: 0x1E9B,
+  smileface: 0x263A,
+  smonospace: 0xFF53,
+  sofpasuqhebrew: 0x05C3,
+  softhyphen: 0x00AD,
+  softsigncyrillic: 0x044C,
+  sohiragana: 0x305D,
+  sokatakana: 0x30BD,
+  sokatakanahalfwidth: 0xFF7F,
+  soliduslongoverlaycmb: 0x0338,
+  solidusshortoverlaycmb: 0x0337,
+  sorusithai: 0x0E29,
+  sosalathai: 0x0E28,
+  sosothai: 0x0E0B,
+  sosuathai: 0x0E2A,
+  space: 0x0020,
+  spacehackarabic: 0x0020,
+  spade: 0x2660,
+  spadesuitblack: 0x2660,
+  spadesuitwhite: 0x2664,
+  sparen: 0x24AE,
+  squarebelowcmb: 0x033B,
+  squarecc: 0x33C4,
+  squarecm: 0x339D,
+  squarediagonalcrosshatchfill: 0x25A9,
+  squarehorizontalfill: 0x25A4,
+  squarekg: 0x338F,
+  squarekm: 0x339E,
+  squarekmcapital: 0x33CE,
+  squareln: 0x33D1,
+  squarelog: 0x33D2,
+  squaremg: 0x338E,
+  squaremil: 0x33D5,
+  squaremm: 0x339C,
+  squaremsquared: 0x33A1,
+  squareorthogonalcrosshatchfill: 0x25A6,
+  squareupperlefttolowerrightfill: 0x25A7,
+  squareupperrighttolowerleftfill: 0x25A8,
+  squareverticalfill: 0x25A5,
+  squarewhitewithsmallblack: 0x25A3,
+  srsquare: 0x33DB,
+  ssabengali: 0x09B7,
+  ssadeva: 0x0937,
+  ssagujarati: 0x0AB7,
+  ssangcieuckorean: 0x3149,
+  ssanghieuhkorean: 0x3185,
+  ssangieungkorean: 0x3180,
+  ssangkiyeokkorean: 0x3132,
+  ssangnieunkorean: 0x3165,
+  ssangpieupkorean: 0x3143,
+  ssangsioskorean: 0x3146,
+  ssangtikeutkorean: 0x3138,
+  ssuperior: 0xF6F2,
+  sterling: 0x00A3,
+  sterlingmonospace: 0xFFE1,
+  strokelongoverlaycmb: 0x0336,
+  strokeshortoverlaycmb: 0x0335,
+  subset: 0x2282,
+  subsetnotequal: 0x228A,
+  subsetorequal: 0x2286,
+  succeeds: 0x227B,
+  suchthat: 0x220B,
+  suhiragana: 0x3059,
+  sukatakana: 0x30B9,
+  sukatakanahalfwidth: 0xFF7D,
+  sukunarabic: 0x0652,
+  summation: 0x2211,
+  sun: 0x263C,
+  superset: 0x2283,
+  supersetnotequal: 0x228B,
+  supersetorequal: 0x2287,
+  svsquare: 0x33DC,
+  syouwaerasquare: 0x337C,
+  t: 0x0074,
+  tabengali: 0x09A4,
+  tackdown: 0x22A4,
+  tackleft: 0x22A3,
+  tadeva: 0x0924,
+  tagujarati: 0x0AA4,
+  tagurmukhi: 0x0A24,
+  taharabic: 0x0637,
+  tahfinalarabic: 0xFEC2,
+  tahinitialarabic: 0xFEC3,
+  tahiragana: 0x305F,
+  tahmedialarabic: 0xFEC4,
+  taisyouerasquare: 0x337D,
+  takatakana: 0x30BF,
+  takatakanahalfwidth: 0xFF80,
+  tatweelarabic: 0x0640,
+  tau: 0x03C4,
+  tav: 0x05EA,
+  tavdages: 0xFB4A,
+  tavdagesh: 0xFB4A,
+  tavdageshhebrew: 0xFB4A,
+  tavhebrew: 0x05EA,
+  tbar: 0x0167,
+  tbopomofo: 0x310A,
+  tcaron: 0x0165,
+  tccurl: 0x02A8,
+  tcedilla: 0x0163,
+  tcheharabic: 0x0686,
+  tchehfinalarabic: 0xFB7B,
+  tchehinitialarabic: 0xFB7C,
+  tchehmedialarabic: 0xFB7D,
+  tcircle: 0x24E3,
+  tcircumflexbelow: 0x1E71,
+  tcommaaccent: 0x0163,
+  tdieresis: 0x1E97,
+  tdotaccent: 0x1E6B,
+  tdotbelow: 0x1E6D,
+  tecyrillic: 0x0442,
+  tedescendercyrillic: 0x04AD,
+  teharabic: 0x062A,
+  tehfinalarabic: 0xFE96,
+  tehhahinitialarabic: 0xFCA2,
+  tehhahisolatedarabic: 0xFC0C,
+  tehinitialarabic: 0xFE97,
+  tehiragana: 0x3066,
+  tehjeeminitialarabic: 0xFCA1,
+  tehjeemisolatedarabic: 0xFC0B,
+  tehmarbutaarabic: 0x0629,
+  tehmarbutafinalarabic: 0xFE94,
+  tehmedialarabic: 0xFE98,
+  tehmeeminitialarabic: 0xFCA4,
+  tehmeemisolatedarabic: 0xFC0E,
+  tehnoonfinalarabic: 0xFC73,
+  tekatakana: 0x30C6,
+  tekatakanahalfwidth: 0xFF83,
+  telephone: 0x2121,
+  telephoneblack: 0x260E,
+  telishagedolahebrew: 0x05A0,
+  telishaqetanahebrew: 0x05A9,
+  tencircle: 0x2469,
+  tenideographicparen: 0x3229,
+  tenparen: 0x247D,
+  tenperiod: 0x2491,
+  tenroman: 0x2179,
+  tesh: 0x02A7,
+  tet: 0x05D8,
+  tetdagesh: 0xFB38,
+  tetdageshhebrew: 0xFB38,
+  tethebrew: 0x05D8,
+  tetsecyrillic: 0x04B5,
+  tevirhebrew: 0x059B,
+  tevirlefthebrew: 0x059B,
+  thabengali: 0x09A5,
+  thadeva: 0x0925,
+  thagujarati: 0x0AA5,
+  thagurmukhi: 0x0A25,
+  thalarabic: 0x0630,
+  thalfinalarabic: 0xFEAC,
+  thanthakhatlowleftthai: 0xF898,
+  thanthakhatlowrightthai: 0xF897,
+  thanthakhatthai: 0x0E4C,
+  thanthakhatupperleftthai: 0xF896,
+  theharabic: 0x062B,
+  thehfinalarabic: 0xFE9A,
+  thehinitialarabic: 0xFE9B,
+  thehmedialarabic: 0xFE9C,
+  thereexists: 0x2203,
+  therefore: 0x2234,
+  theta: 0x03B8,
+  theta1: 0x03D1,
+  thetasymbolgreek: 0x03D1,
+  thieuthacirclekorean: 0x3279,
+  thieuthaparenkorean: 0x3219,
+  thieuthcirclekorean: 0x326B,
+  thieuthkorean: 0x314C,
+  thieuthparenkorean: 0x320B,
+  thirteencircle: 0x246C,
+  thirteenparen: 0x2480,
+  thirteenperiod: 0x2494,
+  thonangmonthothai: 0x0E11,
+  thook: 0x01AD,
+  thophuthaothai: 0x0E12,
+  thorn: 0x00FE,
+  thothahanthai: 0x0E17,
+  thothanthai: 0x0E10,
+  thothongthai: 0x0E18,
+  thothungthai: 0x0E16,
+  thousandcyrillic: 0x0482,
+  thousandsseparatorarabic: 0x066C,
+  thousandsseparatorpersian: 0x066C,
+  three: 0x0033,
+  threearabic: 0x0663,
+  threebengali: 0x09E9,
+  threecircle: 0x2462,
+  threecircleinversesansserif: 0x278C,
+  threedeva: 0x0969,
+  threeeighths: 0x215C,
+  threegujarati: 0x0AE9,
+  threegurmukhi: 0x0A69,
+  threehackarabic: 0x0663,
+  threehangzhou: 0x3023,
+  threeideographicparen: 0x3222,
+  threeinferior: 0x2083,
+  threemonospace: 0xFF13,
+  threenumeratorbengali: 0x09F6,
+  threeoldstyle: 0xF733,
+  threeparen: 0x2476,
+  threeperiod: 0x248A,
+  threepersian: 0x06F3,
+  threequarters: 0x00BE,
+  threequartersemdash: 0xF6DE,
+  threeroman: 0x2172,
+  threesuperior: 0x00B3,
+  threethai: 0x0E53,
+  thzsquare: 0x3394,
+  tihiragana: 0x3061,
+  tikatakana: 0x30C1,
+  tikatakanahalfwidth: 0xFF81,
+  tikeutacirclekorean: 0x3270,
+  tikeutaparenkorean: 0x3210,
+  tikeutcirclekorean: 0x3262,
+  tikeutkorean: 0x3137,
+  tikeutparenkorean: 0x3202,
+  tilde: 0x02DC,
+  tildebelowcmb: 0x0330,
+  tildecmb: 0x0303,
+  tildecomb: 0x0303,
+  tildedoublecmb: 0x0360,
+  tildeoperator: 0x223C,
+  tildeoverlaycmb: 0x0334,
+  tildeverticalcmb: 0x033E,
+  timescircle: 0x2297,
+  tipehahebrew: 0x0596,
+  tipehalefthebrew: 0x0596,
+  tippigurmukhi: 0x0A70,
+  titlocyrilliccmb: 0x0483,
+  tiwnarmenian: 0x057F,
+  tlinebelow: 0x1E6F,
+  tmonospace: 0xFF54,
+  toarmenian: 0x0569,
+  tohiragana: 0x3068,
+  tokatakana: 0x30C8,
+  tokatakanahalfwidth: 0xFF84,
+  tonebarextrahighmod: 0x02E5,
+  tonebarextralowmod: 0x02E9,
+  tonebarhighmod: 0x02E6,
+  tonebarlowmod: 0x02E8,
+  tonebarmidmod: 0x02E7,
+  tonefive: 0x01BD,
+  tonesix: 0x0185,
+  tonetwo: 0x01A8,
+  tonos: 0x0384,
+  tonsquare: 0x3327,
+  topatakthai: 0x0E0F,
+  tortoiseshellbracketleft: 0x3014,
+  tortoiseshellbracketleftsmall: 0xFE5D,
+  tortoiseshellbracketleftvertical: 0xFE39,
+  tortoiseshellbracketright: 0x3015,
+  tortoiseshellbracketrightsmall: 0xFE5E,
+  tortoiseshellbracketrightvertical: 0xFE3A,
+  totaothai: 0x0E15,
+  tpalatalhook: 0x01AB,
+  tparen: 0x24AF,
+  trademark: 0x2122,
+  trademarksans: 0xF8EA,
+  trademarkserif: 0xF6DB,
+  tretroflexhook: 0x0288,
+  triagdn: 0x25BC,
+  triaglf: 0x25C4,
+  triagrt: 0x25BA,
+  triagup: 0x25B2,
+  ts: 0x02A6,
+  tsadi: 0x05E6,
+  tsadidagesh: 0xFB46,
+  tsadidageshhebrew: 0xFB46,
+  tsadihebrew: 0x05E6,
+  tsecyrillic: 0x0446,
+  tsere: 0x05B5,
+  tsere12: 0x05B5,
+  tsere1e: 0x05B5,
+  tsere2b: 0x05B5,
+  tserehebrew: 0x05B5,
+  tserenarrowhebrew: 0x05B5,
+  tserequarterhebrew: 0x05B5,
+  tserewidehebrew: 0x05B5,
+  tshecyrillic: 0x045B,
+  tsuperior: 0xF6F3,
+  ttabengali: 0x099F,
+  ttadeva: 0x091F,
+  ttagujarati: 0x0A9F,
+  ttagurmukhi: 0x0A1F,
+  tteharabic: 0x0679,
+  ttehfinalarabic: 0xFB67,
+  ttehinitialarabic: 0xFB68,
+  ttehmedialarabic: 0xFB69,
+  tthabengali: 0x09A0,
+  tthadeva: 0x0920,
+  tthagujarati: 0x0AA0,
+  tthagurmukhi: 0x0A20,
+  tturned: 0x0287,
+  tuhiragana: 0x3064,
+  tukatakana: 0x30C4,
+  tukatakanahalfwidth: 0xFF82,
+  tusmallhiragana: 0x3063,
+  tusmallkatakana: 0x30C3,
+  tusmallkatakanahalfwidth: 0xFF6F,
+  twelvecircle: 0x246B,
+  twelveparen: 0x247F,
+  twelveperiod: 0x2493,
+  twelveroman: 0x217B,
+  twentycircle: 0x2473,
+  twentyhangzhou: 0x5344,
+  twentyparen: 0x2487,
+  twentyperiod: 0x249B,
+  two: 0x0032,
+  twoarabic: 0x0662,
+  twobengali: 0x09E8,
+  twocircle: 0x2461,
+  twocircleinversesansserif: 0x278B,
+  twodeva: 0x0968,
+  twodotenleader: 0x2025,
+  twodotleader: 0x2025,
+  twodotleadervertical: 0xFE30,
+  twogujarati: 0x0AE8,
+  twogurmukhi: 0x0A68,
+  twohackarabic: 0x0662,
+  twohangzhou: 0x3022,
+  twoideographicparen: 0x3221,
+  twoinferior: 0x2082,
+  twomonospace: 0xFF12,
+  twonumeratorbengali: 0x09F5,
+  twooldstyle: 0xF732,
+  twoparen: 0x2475,
+  twoperiod: 0x2489,
+  twopersian: 0x06F2,
+  tworoman: 0x2171,
+  twostroke: 0x01BB,
+  twosuperior: 0x00B2,
+  twothai: 0x0E52,
+  twothirds: 0x2154,
+  u: 0x0075,
+  uacute: 0x00FA,
+  ubar: 0x0289,
+  ubengali: 0x0989,
+  ubopomofo: 0x3128,
+  ubreve: 0x016D,
+  ucaron: 0x01D4,
+  ucircle: 0x24E4,
+  ucircumflex: 0x00FB,
+  ucircumflexbelow: 0x1E77,
+  ucyrillic: 0x0443,
+  udattadeva: 0x0951,
+  udblacute: 0x0171,
+  udblgrave: 0x0215,
+  udeva: 0x0909,
+  udieresis: 0x00FC,
+  udieresisacute: 0x01D8,
+  udieresisbelow: 0x1E73,
+  udieresiscaron: 0x01DA,
+  udieresiscyrillic: 0x04F1,
+  udieresisgrave: 0x01DC,
+  udieresismacron: 0x01D6,
+  udotbelow: 0x1EE5,
+  ugrave: 0x00F9,
+  ugujarati: 0x0A89,
+  ugurmukhi: 0x0A09,
+  uhiragana: 0x3046,
+  uhookabove: 0x1EE7,
+  uhorn: 0x01B0,
+  uhornacute: 0x1EE9,
+  uhorndotbelow: 0x1EF1,
+  uhorngrave: 0x1EEB,
+  uhornhookabove: 0x1EED,
+  uhorntilde: 0x1EEF,
+  uhungarumlaut: 0x0171,
+  uhungarumlautcyrillic: 0x04F3,
+  uinvertedbreve: 0x0217,
+  ukatakana: 0x30A6,
+  ukatakanahalfwidth: 0xFF73,
+  ukcyrillic: 0x0479,
+  ukorean: 0x315C,
+  umacron: 0x016B,
+  umacroncyrillic: 0x04EF,
+  umacrondieresis: 0x1E7B,
+  umatragurmukhi: 0x0A41,
+  umonospace: 0xFF55,
+  underscore: 0x005F,
+  underscoredbl: 0x2017,
+  underscoremonospace: 0xFF3F,
+  underscorevertical: 0xFE33,
+  underscorewavy: 0xFE4F,
+  union: 0x222A,
+  universal: 0x2200,
+  uogonek: 0x0173,
+  uparen: 0x24B0,
+  upblock: 0x2580,
+  upperdothebrew: 0x05C4,
+  upsilon: 0x03C5,
+  upsilondieresis: 0x03CB,
+  upsilondieresistonos: 0x03B0,
+  upsilonlatin: 0x028A,
+  upsilontonos: 0x03CD,
+  uptackbelowcmb: 0x031D,
+  uptackmod: 0x02D4,
+  uragurmukhi: 0x0A73,
+  uring: 0x016F,
+  ushortcyrillic: 0x045E,
+  usmallhiragana: 0x3045,
+  usmallkatakana: 0x30A5,
+  usmallkatakanahalfwidth: 0xFF69,
+  ustraightcyrillic: 0x04AF,
+  ustraightstrokecyrillic: 0x04B1,
+  utilde: 0x0169,
+  utildeacute: 0x1E79,
+  utildebelow: 0x1E75,
+  uubengali: 0x098A,
+  uudeva: 0x090A,
+  uugujarati: 0x0A8A,
+  uugurmukhi: 0x0A0A,
+  uumatragurmukhi: 0x0A42,
+  uuvowelsignbengali: 0x09C2,
+  uuvowelsigndeva: 0x0942,
+  uuvowelsigngujarati: 0x0AC2,
+  uvowelsignbengali: 0x09C1,
+  uvowelsigndeva: 0x0941,
+  uvowelsigngujarati: 0x0AC1,
+  v: 0x0076,
+  vadeva: 0x0935,
+  vagujarati: 0x0AB5,
+  vagurmukhi: 0x0A35,
+  vakatakana: 0x30F7,
+  vav: 0x05D5,
+  vavdagesh: 0xFB35,
+  vavdagesh65: 0xFB35,
+  vavdageshhebrew: 0xFB35,
+  vavhebrew: 0x05D5,
+  vavholam: 0xFB4B,
+  vavholamhebrew: 0xFB4B,
+  vavvavhebrew: 0x05F0,
+  vavyodhebrew: 0x05F1,
+  vcircle: 0x24E5,
+  vdotbelow: 0x1E7F,
+  vecyrillic: 0x0432,
+  veharabic: 0x06A4,
+  vehfinalarabic: 0xFB6B,
+  vehinitialarabic: 0xFB6C,
+  vehmedialarabic: 0xFB6D,
+  vekatakana: 0x30F9,
+  venus: 0x2640,
+  verticalbar: 0x007C,
+  verticallineabovecmb: 0x030D,
+  verticallinebelowcmb: 0x0329,
+  verticallinelowmod: 0x02CC,
+  verticallinemod: 0x02C8,
+  vewarmenian: 0x057E,
+  vhook: 0x028B,
+  vikatakana: 0x30F8,
+  viramabengali: 0x09CD,
+  viramadeva: 0x094D,
+  viramagujarati: 0x0ACD,
+  visargabengali: 0x0983,
+  visargadeva: 0x0903,
+  visargagujarati: 0x0A83,
+  vmonospace: 0xFF56,
+  voarmenian: 0x0578,
+  voicediterationhiragana: 0x309E,
+  voicediterationkatakana: 0x30FE,
+  voicedmarkkana: 0x309B,
+  voicedmarkkanahalfwidth: 0xFF9E,
+  vokatakana: 0x30FA,
+  vparen: 0x24B1,
+  vtilde: 0x1E7D,
+  vturned: 0x028C,
+  vuhiragana: 0x3094,
+  vukatakana: 0x30F4,
+  w: 0x0077,
+  wacute: 0x1E83,
+  waekorean: 0x3159,
+  wahiragana: 0x308F,
+  wakatakana: 0x30EF,
+  wakatakanahalfwidth: 0xFF9C,
+  wakorean: 0x3158,
+  wasmallhiragana: 0x308E,
+  wasmallkatakana: 0x30EE,
+  wattosquare: 0x3357,
+  wavedash: 0x301C,
+  wavyunderscorevertical: 0xFE34,
+  wawarabic: 0x0648,
+  wawfinalarabic: 0xFEEE,
+  wawhamzaabovearabic: 0x0624,
+  wawhamzaabovefinalarabic: 0xFE86,
+  wbsquare: 0x33DD,
+  wcircle: 0x24E6,
+  wcircumflex: 0x0175,
+  wdieresis: 0x1E85,
+  wdotaccent: 0x1E87,
+  wdotbelow: 0x1E89,
+  wehiragana: 0x3091,
+  weierstrass: 0x2118,
+  wekatakana: 0x30F1,
+  wekorean: 0x315E,
+  weokorean: 0x315D,
+  wgrave: 0x1E81,
+  whitebullet: 0x25E6,
+  whitecircle: 0x25CB,
+  whitecircleinverse: 0x25D9,
+  whitecornerbracketleft: 0x300E,
+  whitecornerbracketleftvertical: 0xFE43,
+  whitecornerbracketright: 0x300F,
+  whitecornerbracketrightvertical: 0xFE44,
+  whitediamond: 0x25C7,
+  whitediamondcontainingblacksmalldiamond: 0x25C8,
+  whitedownpointingsmalltriangle: 0x25BF,
+  whitedownpointingtriangle: 0x25BD,
+  whiteleftpointingsmalltriangle: 0x25C3,
+  whiteleftpointingtriangle: 0x25C1,
+  whitelenticularbracketleft: 0x3016,
+  whitelenticularbracketright: 0x3017,
+  whiterightpointingsmalltriangle: 0x25B9,
+  whiterightpointingtriangle: 0x25B7,
+  whitesmallsquare: 0x25AB,
+  whitesmilingface: 0x263A,
+  whitesquare: 0x25A1,
+  whitestar: 0x2606,
+  whitetelephone: 0x260F,
+  whitetortoiseshellbracketleft: 0x3018,
+  whitetortoiseshellbracketright: 0x3019,
+  whiteuppointingsmalltriangle: 0x25B5,
+  whiteuppointingtriangle: 0x25B3,
+  wihiragana: 0x3090,
+  wikatakana: 0x30F0,
+  wikorean: 0x315F,
+  wmonospace: 0xFF57,
+  wohiragana: 0x3092,
+  wokatakana: 0x30F2,
+  wokatakanahalfwidth: 0xFF66,
+  won: 0x20A9,
+  wonmonospace: 0xFFE6,
+  wowaenthai: 0x0E27,
+  wparen: 0x24B2,
+  wring: 0x1E98,
+  wsuperior: 0x02B7,
+  wturned: 0x028D,
+  wynn: 0x01BF,
+  x: 0x0078,
+  xabovecmb: 0x033D,
+  xbopomofo: 0x3112,
+  xcircle: 0x24E7,
+  xdieresis: 0x1E8D,
+  xdotaccent: 0x1E8B,
+  xeharmenian: 0x056D,
+  xi: 0x03BE,
+  xmonospace: 0xFF58,
+  xparen: 0x24B3,
+  xsuperior: 0x02E3,
+  y: 0x0079,
+  yaadosquare: 0x334E,
+  yabengali: 0x09AF,
+  yacute: 0x00FD,
+  yadeva: 0x092F,
+  yaekorean: 0x3152,
+  yagujarati: 0x0AAF,
+  yagurmukhi: 0x0A2F,
+  yahiragana: 0x3084,
+  yakatakana: 0x30E4,
+  yakatakanahalfwidth: 0xFF94,
+  yakorean: 0x3151,
+  yamakkanthai: 0x0E4E,
+  yasmallhiragana: 0x3083,
+  yasmallkatakana: 0x30E3,
+  yasmallkatakanahalfwidth: 0xFF6C,
+  yatcyrillic: 0x0463,
+  ycircle: 0x24E8,
+  ycircumflex: 0x0177,
+  ydieresis: 0x00FF,
+  ydotaccent: 0x1E8F,
+  ydotbelow: 0x1EF5,
+  yeharabic: 0x064A,
+  yehbarreearabic: 0x06D2,
+  yehbarreefinalarabic: 0xFBAF,
+  yehfinalarabic: 0xFEF2,
+  yehhamzaabovearabic: 0x0626,
+  yehhamzaabovefinalarabic: 0xFE8A,
+  yehhamzaaboveinitialarabic: 0xFE8B,
+  yehhamzaabovemedialarabic: 0xFE8C,
+  yehinitialarabic: 0xFEF3,
+  yehmedialarabic: 0xFEF4,
+  yehmeeminitialarabic: 0xFCDD,
+  yehmeemisolatedarabic: 0xFC58,
+  yehnoonfinalarabic: 0xFC94,
+  yehthreedotsbelowarabic: 0x06D1,
+  yekorean: 0x3156,
+  yen: 0x00A5,
+  yenmonospace: 0xFFE5,
+  yeokorean: 0x3155,
+  yeorinhieuhkorean: 0x3186,
+  yerahbenyomohebrew: 0x05AA,
+  yerahbenyomolefthebrew: 0x05AA,
+  yericyrillic: 0x044B,
+  yerudieresiscyrillic: 0x04F9,
+  yesieungkorean: 0x3181,
+  yesieungpansioskorean: 0x3183,
+  yesieungsioskorean: 0x3182,
+  yetivhebrew: 0x059A,
+  ygrave: 0x1EF3,
+  yhook: 0x01B4,
+  yhookabove: 0x1EF7,
+  yiarmenian: 0x0575,
+  yicyrillic: 0x0457,
+  yikorean: 0x3162,
+  yinyang: 0x262F,
+  yiwnarmenian: 0x0582,
+  ymonospace: 0xFF59,
+  yod: 0x05D9,
+  yoddagesh: 0xFB39,
+  yoddageshhebrew: 0xFB39,
+  yodhebrew: 0x05D9,
+  yodyodhebrew: 0x05F2,
+  yodyodpatahhebrew: 0xFB1F,
+  yohiragana: 0x3088,
+  yoikorean: 0x3189,
+  yokatakana: 0x30E8,
+  yokatakanahalfwidth: 0xFF96,
+  yokorean: 0x315B,
+  yosmallhiragana: 0x3087,
+  yosmallkatakana: 0x30E7,
+  yosmallkatakanahalfwidth: 0xFF6E,
+  yotgreek: 0x03F3,
+  yoyaekorean: 0x3188,
+  yoyakorean: 0x3187,
+  yoyakthai: 0x0E22,
+  yoyingthai: 0x0E0D,
+  yparen: 0x24B4,
+  ypogegrammeni: 0x037A,
+  ypogegrammenigreekcmb: 0x0345,
+  yr: 0x01A6,
+  yring: 0x1E99,
+  ysuperior: 0x02B8,
+  ytilde: 0x1EF9,
+  yturned: 0x028E,
+  yuhiragana: 0x3086,
+  yuikorean: 0x318C,
+  yukatakana: 0x30E6,
+  yukatakanahalfwidth: 0xFF95,
+  yukorean: 0x3160,
+  yusbigcyrillic: 0x046B,
+  yusbigiotifiedcyrillic: 0x046D,
+  yuslittlecyrillic: 0x0467,
+  yuslittleiotifiedcyrillic: 0x0469,
+  yusmallhiragana: 0x3085,
+  yusmallkatakana: 0x30E5,
+  yusmallkatakanahalfwidth: 0xFF6D,
+  yuyekorean: 0x318B,
+  yuyeokorean: 0x318A,
+  yyabengali: 0x09DF,
+  yyadeva: 0x095F,
+  z: 0x007A,
+  zaarmenian: 0x0566,
+  zacute: 0x017A,
+  zadeva: 0x095B,
+  zagurmukhi: 0x0A5B,
+  zaharabic: 0x0638,
+  zahfinalarabic: 0xFEC6,
+  zahinitialarabic: 0xFEC7,
+  zahiragana: 0x3056,
+  zahmedialarabic: 0xFEC8,
+  zainarabic: 0x0632,
+  zainfinalarabic: 0xFEB0,
+  zakatakana: 0x30B6,
+  zaqefgadolhebrew: 0x0595,
+  zaqefqatanhebrew: 0x0594,
+  zarqahebrew: 0x0598,
+  zayin: 0x05D6,
+  zayindagesh: 0xFB36,
+  zayindageshhebrew: 0xFB36,
+  zayinhebrew: 0x05D6,
+  zbopomofo: 0x3117,
+  zcaron: 0x017E,
+  zcircle: 0x24E9,
+  zcircumflex: 0x1E91,
+  zcurl: 0x0291,
+  zdot: 0x017C,
+  zdotaccent: 0x017C,
+  zdotbelow: 0x1E93,
+  zecyrillic: 0x0437,
+  zedescendercyrillic: 0x0499,
+  zedieresiscyrillic: 0x04DF,
+  zehiragana: 0x305C,
+  zekatakana: 0x30BC,
+  zero: 0x0030,
+  zeroarabic: 0x0660,
+  zerobengali: 0x09E6,
+  zerodeva: 0x0966,
+  zerogujarati: 0x0AE6,
+  zerogurmukhi: 0x0A66,
+  zerohackarabic: 0x0660,
+  zeroinferior: 0x2080,
+  zeromonospace: 0xFF10,
+  zerooldstyle: 0xF730,
+  zeropersian: 0x06F0,
+  zerosuperior: 0x2070,
+  zerothai: 0x0E50,
+  zerowidthjoiner: 0xFEFF,
+  zerowidthnonjoiner: 0x200C,
+  zerowidthspace: 0x200B,
+  zeta: 0x03B6,
+  zhbopomofo: 0x3113,
+  zhearmenian: 0x056A,
+  zhebrevecyrillic: 0x04C2,
+  zhecyrillic: 0x0436,
+  zhedescendercyrillic: 0x0497,
+  zhedieresiscyrillic: 0x04DD,
+  zihiragana: 0x3058,
+  zikatakana: 0x30B8,
+  zinorhebrew: 0x05AE,
+  zlinebelow: 0x1E95,
+  zmonospace: 0xFF5A,
+  zohiragana: 0x305E,
+  zokatakana: 0x30BE,
+  zparen: 0x24B5,
+  zretroflexhook: 0x0290,
+  zstroke: 0x01B6,
+  zuhiragana: 0x305A,
+  zukatakana: 0x30BA,
+  '.notdef': 0x0000
+};
+
+
+
+var PDFImage = (function PDFImageClosure() {
+  /**
+   * Decode the image in the main thread if it supported. Resovles the promise
+   * when the image data is ready.
+   */
+  function handleImageData(handler, xref, res, image, promise) {
+    if (image instanceof JpegStream && image.isNativelyDecodable(xref, res)) {
+      // For natively supported jpegs send them to the main thread for decoding.
+      var dict = image.dict;
+      var colorSpace = dict.get('ColorSpace', 'CS');
+      colorSpace = ColorSpace.parse(colorSpace, xref, res);
+      var numComps = colorSpace.numComps;
+      handler.send('JpegDecode', [image.getIR(), numComps], function(message) {
+        var data = message.data;
+        var stream = new Stream(data, 0, data.length, image.dict);
+        promise.resolve(stream);
+      });
+    } else {
+      promise.resolve(image);
+    }
+  }
+  /**
+   * Decode and clamp a value. The formula is different from the spec because we
+   * don't decode to float range [0,1], we decode it in the [0,max] range.
+   */
+  function decodeAndClamp(value, addend, coefficient, max) {
+    value = addend + value * coefficient;
+    // Clamp the value to the range
+    return value < 0 ? 0 : value > max ? max : value;
+  }
+  function PDFImage(xref, res, image, inline, smask, mask, isMask) {
+    this.image = image;
+    if (image.getParams) {
+      // JPX/JPEG2000 streams directly contain bits per component
+      // and color space mode information.
+      TODO('get params from actual stream');
+      // var bits = ...
+      // var colorspace = ...
+    }
+    // TODO cache rendered images?
+
+    var dict = image.dict;
+    this.width = dict.get('Width', 'W');
+    this.height = dict.get('Height', 'H');
+
+    if (this.width < 1 || this.height < 1)
+      error('Invalid image width: ' + this.width + ' or height: ' +
+            this.height);
+
+    this.interpolate = dict.get('Interpolate', 'I') || false;
+    this.imageMask = dict.get('ImageMask', 'IM') || false;
+    this.matte = dict.get('Matte') || false;
+
+    var bitsPerComponent = image.bitsPerComponent;
+    if (!bitsPerComponent) {
+      bitsPerComponent = dict.get('BitsPerComponent', 'BPC');
+      if (!bitsPerComponent) {
+        if (this.imageMask)
+          bitsPerComponent = 1;
+        else
+          error('Bits per component missing in image: ' + this.imageMask);
+      }
+    }
+    this.bpc = bitsPerComponent;
+
+    if (!this.imageMask) {
+      var colorSpace = dict.get('ColorSpace', 'CS');
+      if (!colorSpace) {
+        TODO('JPX images (which don"t require color spaces');
+        colorSpace = new Name('DeviceRGB');
+      }
+      this.colorSpace = ColorSpace.parse(colorSpace, xref, res);
+      this.numComps = this.colorSpace.numComps;
+    }
+
+    this.decode = dict.get('Decode', 'D');
+    this.needsDecode = false;
+    if (this.decode &&
+        ((this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode)) ||
+         (isMask && !ColorSpace.isDefaultDecode(this.decode, 1)))) {
+      this.needsDecode = true;
+      // Do some preprocessing to avoid more math.
+      var max = (1 << bitsPerComponent) - 1;
+      this.decodeCoefficients = [];
+      this.decodeAddends = [];
+      for (var i = 0, j = 0; i < this.decode.length; i += 2, ++j) {
+        var dmin = this.decode[i];
+        var dmax = this.decode[i + 1];
+        this.decodeCoefficients[j] = dmax - dmin;
+        this.decodeAddends[j] = max * dmin;
+      }
+    }
+
+    if (smask) {
+      this.smask = new PDFImage(xref, res, smask, false);
+    } else if (mask) {
+      if (isStream(mask)) {
+        this.mask = new PDFImage(xref, res, mask, false, null, null, true);
+      } else {
+        // Color key mask (just an array).
+        this.mask = mask;
+      }
+    }
+  }
+  /**
+   * Handles processing of image data and calls the callback with an argument
+   * of a PDFImage when the image is ready to be used.
+   */
+  PDFImage.buildImage = function PDFImage_buildImage(callback, handler, xref,
+                                                     res, image, inline) {
+    var imageDataPromise = new Promise();
+    var smaskPromise = new Promise();
+    var maskPromise = new Promise();
+    // The image data and smask data may not be ready yet, wait till both are
+    // resolved.
+    Promise.all([imageDataPromise, smaskPromise, maskPromise]).then(
+        function(results) {
+      var imageData = results[0], smaskData = results[1], maskData = results[2];
+      var image = new PDFImage(xref, res, imageData, inline, smaskData,
+                               maskData);
+      callback(image);
+    });
+
+    handleImageData(handler, xref, res, image, imageDataPromise);
+
+    var smask = image.dict.get('SMask');
+    var mask = image.dict.get('Mask');
+
+    if (smask) {
+      handleImageData(handler, xref, res, smask, smaskPromise);
+      maskPromise.resolve(null);
+    } else {
+      smaskPromise.resolve(null);
+      if (mask) {
+        if (isStream(mask)) {
+          handleImageData(handler, xref, res, mask, maskPromise);
+        } else if (isArray(mask)) {
+          maskPromise.resolve(mask);
+        } else {
+          warn('Unsupported mask format.');
+          maskPromise.resolve(null);
+        }
+      } else {
+        maskPromise.resolve(null);
+      }
+    }
+  };
+
+  /**
+   * Resize an image using the nearest neighbor algorithm.  Currently only
+   * supports one and three component images.
+   * @param {TypedArray} pixels The original image with one component.
+   * @param {Number} bpc Number of bits per component.
+   * @param {Number} components Number of color components, 1 or 3 is supported.
+   * @param {Number} w1 Original width.
+   * @param {Number} h1 Original height.
+   * @param {Number} w2 New width.
+   * @param {Number} h2 New height.
+   * @return {TypedArray} Resized image data.
+   */
+  PDFImage.resize = function PDFImage_resize(pixels, bpc, components,
+                                             w1, h1, w2, h2) {
+    var length = w2 * h2 * components;
+    var temp = bpc <= 8 ? new Uint8Array(length) :
+        bpc <= 16 ? new Uint16Array(length) : new Uint32Array(length);
+    var xRatio = w1 / w2;
+    var yRatio = h1 / h2;
+    var px, py, newIndex, oldIndex;
+    for (var i = 0; i < h2; i++) {
+      for (var j = 0; j < w2; j++) {
+        px = Math.floor(j * xRatio);
+        py = Math.floor(i * yRatio);
+        newIndex = (i * w2) + j;
+        oldIndex = ((py * w1) + px);
+        if (components === 1) {
+          temp[newIndex] = pixels[oldIndex];
+        } else if (components === 3) {
+          newIndex *= 3;
+          oldIndex *= 3;
+          temp[newIndex] = pixels[oldIndex];
+          temp[newIndex + 1] = pixels[oldIndex + 1];
+          temp[newIndex + 2] = pixels[oldIndex + 2];
+        }
+      }
+    }
+    return temp;
+  };
+
+  PDFImage.createMask = function PDFImage_createMask(imgArray, width, height,
+                                                     inverseDecode) {
+    var buffer = new Uint8Array(width * height * 4);
+    var imgArrayPos = 0;
+    var i, j, mask, buf;
+    // removing making non-masked pixels transparent
+    var bufferPos = 3; // alpha component offset
+    for (i = 0; i < height; i++) {
+      mask = 0;
+      for (j = 0; j < width; j++) {
+        if (!mask) {
+          buf = imgArray[imgArrayPos++];
+          mask = 128;
+        }
+        if (!(buf & mask) !== inverseDecode) {
+          buffer[bufferPos] = 255;
+        }
+        bufferPos += 4;
+        mask >>= 1;
+      }
+    }
+    return {data: buffer, width: width, height: height};
+  };
+
+  PDFImage.prototype = {
+    get drawWidth() {
+      if (!this.smask)
+        return this.width;
+      return Math.max(this.width, this.smask.width);
+    },
+    get drawHeight() {
+      if (!this.smask)
+        return this.height;
+      return Math.max(this.height, this.smask.height);
+    },
+    decodeBuffer: function PDFImage_decodeBuffer(buffer) {
+      var bpc = this.bpc;
+      var decodeMap = this.decode;
+      var numComps = this.numComps;
+
+      var decodeAddends, decodeCoefficients;
+      var decodeAddends = this.decodeAddends;
+      var decodeCoefficients = this.decodeCoefficients;
+      var max = (1 << bpc) - 1;
+
+      if (bpc === 1) {
+        // If the buffer needed decode that means it just needs to be inverted.
+        for (var i = 0, ii = buffer.length; i < ii; i++) {
+          buffer[i] = +!(buffer[i]);
+        }
+        return;
+      }
+      var index = 0;
+      for (var i = 0, ii = this.width * this.height; i < ii; i++) {
+        for (var j = 0; j < numComps; j++) {
+          buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j],
+                                            decodeCoefficients[j], max);
+          index++;
+        }
+      }
+    },
+    getComponents: function PDFImage_getComponents(buffer) {
+      var bpc = this.bpc;
+
+      // This image doesn't require any extra work.
+      if (bpc === 8)
+        return buffer;
+
+      var bufferLength = buffer.length;
+      var width = this.width;
+      var height = this.height;
+      var numComps = this.numComps;
+
+      var length = width * height * numComps;
+      var bufferPos = 0;
+      var output = bpc <= 8 ? new Uint8Array(length) :
+        bpc <= 16 ? new Uint16Array(length) : new Uint32Array(length);
+      var rowComps = width * numComps;
+
+      var max = (1 << bpc) - 1;
+
+      if (bpc === 1) {
+        // Optimization for reading 1 bpc images.
+        var mask = 0;
+        var buf = 0;
+
+        for (var i = 0, ii = length; i < ii; ++i) {
+          if (i % rowComps === 0) {
+            mask = 0;
+            buf = 0;
+          } else {
+            mask >>= 1;
+          }
+
+          if (mask <= 0) {
+            buf = buffer[bufferPos++];
+            mask = 128;
+          }
+
+          output[i] = +!!(buf & mask);
+        }
+      } else {
+        // The general case that handles all other bpc values.
+        var bits = 0, buf = 0;
+        for (var i = 0, ii = length; i < ii; ++i) {
+          if (i % rowComps === 0) {
+            buf = 0;
+            bits = 0;
+          }
+
+          while (bits < bpc) {
+            buf = (buf << 8) | buffer[bufferPos++];
+            bits += 8;
+          }
+
+          var remainingBits = bits - bpc;
+          var value = buf >> remainingBits;
+          output[i] = value < 0 ? 0 : value > max ? max : value;
+          buf = buf & ((1 << remainingBits) - 1);
+          bits = remainingBits;
+        }
+      }
+      return output;
+    },
+    getOpacity: function PDFImage_getOpacity(width, height, image) {
+      var smask = this.smask;
+      var mask = this.mask;
+      var originalWidth = this.width;
+      var originalHeight = this.height;
+      var buf;
+
+      if (smask) {
+        var sw = smask.width;
+        var sh = smask.height;
+        buf = new Uint8Array(sw * sh);
+        smask.fillGrayBuffer(buf);
+        if (sw != width || sh != height)
+          buf = PDFImage.resize(buf, smask.bpc, 1, sw, sh, width, height);
+      } else if (mask) {
+        if (mask instanceof PDFImage) {
+          var sw = mask.width;
+          var sh = mask.height;
+          buf = new Uint8Array(sw * sh);
+          mask.numComps = 1;
+          mask.fillGrayBuffer(buf);
+
+          // Need to invert values in buffer
+          for (var i = 0, ii = sw * sh; i < ii; ++i)
+            buf[i] = 255 - buf[i];
+
+          if (sw != width || sh != height)
+            buf = PDFImage.resize(buf, mask.bpc, 1, sw, sh, width, height);
+        } else if (isArray(mask)) {
+          // Color key mask: if any of the compontents are outside the range
+          // then they should be painted.
+          buf = new Uint8Array(width * height);
+          var numComps = this.numComps;
+          for (var i = 0, ii = width * height; i < ii; ++i) {
+            var opacity = 0;
+            var imageOffset = i * numComps;
+            for (var j = 0; j < numComps; ++j) {
+              var color = image[imageOffset + j];
+              var maskOffset = j * 2;
+              if (color < mask[maskOffset] || color > mask[maskOffset + 1]) {
+                opacity = 255;
+                break;
+              }
+            }
+            buf[i] = opacity;
+          }
+        } else {
+          error('Unknown mask format.');
+        }
+      } else {
+        buf = new Uint8Array(width * height);
+        for (var i = 0, ii = width * height; i < ii; ++i)
+          buf[i] = 255;
+      }
+      return buf;
+    },
+    undoPreblend: function PDFImage_undoPreblend(buffer, width, height) {
+      var matte = this.smask && this.smask.matte;
+      if (!matte) {
+        return;
+      }
+
+      function clamp(value) {
+        return (value < 0 ? 0 : value > 255 ? 255 : value) | 0;
+      }
+
+      var matteRgb = this.colorSpace.getRgb(matte, 0);
+      var length = width * height * 4;
+      for (var i = 0; i < length; i += 4) {
+        var alpha = buffer[i + 3];
+        if (alpha === 0) {
+          // according formula we have to get Infinity in all components
+          // making it as white (tipical paper color) should be okay
+          buffer[i] = 255;
+          buffer[i + 1] = 255;
+          buffer[i + 2] = 255;
+          continue;
+        }
+        var k = 255 / alpha;
+        buffer[i] = clamp((buffer[i] - matteRgb[0]) * k + matteRgb[0]);
+        buffer[i + 1] = clamp((buffer[i + 1] - matteRgb[1]) * k + matteRgb[1]);
+        buffer[i + 2] = clamp((buffer[i + 2] - matteRgb[2]) * k + matteRgb[2]);
+      }
+    },
+    fillRgbaBuffer: function PDFImage_fillRgbaBuffer(buffer, width, height) {
+      var numComps = this.numComps;
+      var originalWidth = this.width;
+      var originalHeight = this.height;
+      var bpc = this.bpc;
+
+      // rows start at byte boundary;
+      var rowBytes = (originalWidth * numComps * bpc + 7) >> 3;
+      var imgArray = this.getImageBytes(originalHeight * rowBytes);
+
+      // imgArray can be incomplete (e.g. after CCITT fax encoding)
+      var actualHeight = 0 | (imgArray.length / rowBytes *
+                         height / originalHeight);
+      var comps = this.getComponents(imgArray);
+      // Build opacity here since color key masking needs to be perormed on
+      // undecoded values.
+      var opacity = this.getOpacity(width, height, comps);
+
+      if (this.needsDecode) {
+        this.decodeBuffer(comps);
+      }
+      var rgbBuf = this.colorSpace.createRgbBuffer(comps, 0,
+                                    originalWidth * originalHeight, bpc);
+      if (originalWidth != width || originalHeight != height)
+        rgbBuf = PDFImage.resize(rgbBuf, this.bpc, 3, originalWidth,
+                                originalHeight, width, height);
+      var compsPos = 0;
+      var opacityPos = 0;
+      var length = width * actualHeight * 4;
+
+      for (var i = 0; i < length; i += 4) {
+        buffer[i] = rgbBuf[compsPos++];
+        buffer[i + 1] = rgbBuf[compsPos++];
+        buffer[i + 2] = rgbBuf[compsPos++];
+        buffer[i + 3] = opacity[opacityPos++];
+      }
+
+      this.undoPreblend(buffer, width, actualHeight);
+    },
+    fillGrayBuffer: function PDFImage_fillGrayBuffer(buffer) {
+      var numComps = this.numComps;
+      if (numComps != 1)
+        error('Reading gray scale from a color image: ' + numComps);
+
+      var width = this.width;
+      var height = this.height;
+      var bpc = this.bpc;
+
+      // rows start at byte boundary;
+      var rowBytes = (width * numComps * bpc + 7) >> 3;
+      var imgArray = this.getImageBytes(height * rowBytes);
+
+      var comps = this.getComponents(imgArray);
+      if (this.needsDecode) {
+        this.decodeBuffer(comps);
+      }
+      var length = width * height;
+      // we aren't using a colorspace so we need to scale the value
+      var scale = 255 / ((1 << bpc) - 1);
+      for (var i = 0; i < length; ++i)
+        buffer[i] = (scale * comps[i]) | 0;
+    },
+    getImageData: function PDFImage_getImageData() {
+      var drawWidth = this.drawWidth;
+      var drawHeight = this.drawHeight;
+      var imgData = {
+        width: drawWidth,
+        height: drawHeight,
+        data: new Uint8Array(drawWidth * drawHeight * 4)
+      };
+      var pixels = imgData.data;
+      this.fillRgbaBuffer(pixels, drawWidth, drawHeight);
+      return imgData;
+    },
+    getImageBytes: function PDFImage_getImageBytes(length) {
+      this.image.reset();
+      return this.image.getBytes(length);
+    }
+  };
+  return PDFImage;
+})();
+
+
+// The Metrics object contains glyph widths (in glyph space units).
+// As per PDF spec, for most fonts (Type 3 being an exception) a glyph
+// space unit corresponds to 1/1000th of text space unit.
+var Metrics = {
+  'Courier': 600,
+  'Courier-Bold': 600,
+  'Courier-BoldOblique': 600,
+  'Courier-Oblique': 600,
+  'Helvetica' : {
+    'space': 278,
+    'exclam': 278,
+    'quotedbl': 355,
+    'numbersign': 556,
+    'dollar': 556,
+    'percent': 889,
+    'ampersand': 667,
+    'quoteright': 222,
+    'parenleft': 333,
+    'parenright': 333,
+    'asterisk': 389,
+    'plus': 584,
+    'comma': 278,
+    'hyphen': 333,
+    'period': 278,
+    'slash': 278,
+    'zero': 556,
+    'one': 556,
+    'two': 556,
+    'three': 556,
+    'four': 556,
+    'five': 556,
+    'six': 556,
+    'seven': 556,
+    'eight': 556,
+    'nine': 556,
+    'colon': 278,
+    'semicolon': 278,
+    'less': 584,
+    'equal': 584,
+    'greater': 584,
+    'question': 556,
+    'at': 1015,
+    'A': 667,
+    'B': 667,
+    'C': 722,
+    'D': 722,
+    'E': 667,
+    'F': 611,
+    'G': 778,
+    'H': 722,
+    'I': 278,
+    'J': 500,
+    'K': 667,
+    'L': 556,
+    'M': 833,
+    'N': 722,
+    'O': 778,
+    'P': 667,
+    'Q': 778,
+    'R': 722,
+    'S': 667,
+    'T': 611,
+    'U': 722,
+    'V': 667,
+    'W': 944,
+    'X': 667,
+    'Y': 667,
+    'Z': 611,
+    'bracketleft': 278,
+    'backslash': 278,
+    'bracketright': 278,
+    'asciicircum': 469,
+    'underscore': 556,
+    'quoteleft': 222,
+    'a': 556,
+    'b': 556,
+    'c': 500,
+    'd': 556,
+    'e': 556,
+    'f': 278,
+    'g': 556,
+    'h': 556,
+    'i': 222,
+    'j': 222,
+    'k': 500,
+    'l': 222,
+    'm': 833,
+    'n': 556,
+    'o': 556,
+    'p': 556,
+    'q': 556,
+    'r': 333,
+    's': 500,
+    't': 278,
+    'u': 556,
+    'v': 500,
+    'w': 722,
+    'x': 500,
+    'y': 500,
+    'z': 500,
+    'braceleft': 334,
+    'bar': 260,
+    'braceright': 334,
+    'asciitilde': 584,
+    'exclamdown': 333,
+    'cent': 556,
+    'sterling': 556,
+    'fraction': 167,
+    'yen': 556,
+    'florin': 556,
+    'section': 556,
+    'currency': 556,
+    'quotesingle': 191,
+    'quotedblleft': 333,
+    'guillemotleft': 556,
+    'guilsinglleft': 333,
+    'guilsinglright': 333,
+    'fi': 500,
+    'fl': 500,
+    'endash': 556,
+    'dagger': 556,
+    'daggerdbl': 556,
+    'periodcentered': 278,
+    'paragraph': 537,
+    'bullet': 350,
+    'quotesinglbase': 222,
+    'quotedblbase': 333,
+    'quotedblright': 333,
+    'guillemotright': 556,
+    'ellipsis': 1000,
+    'perthousand': 1000,
+    'questiondown': 611,
+    'grave': 333,
+    'acute': 333,
+    'circumflex': 333,
+    'tilde': 333,
+    'macron': 333,
+    'breve': 333,
+    'dotaccent': 333,
+    'dieresis': 333,
+    'ring': 333,
+    'cedilla': 333,
+    'hungarumlaut': 333,
+    'ogonek': 333,
+    'caron': 333,
+    'emdash': 1000,
+    'AE': 1000,
+    'ordfeminine': 370,
+    'Lslash': 556,
+    'Oslash': 778,
+    'OE': 1000,
+    'ordmasculine': 365,
+    'ae': 889,
+    'dotlessi': 278,
+    'lslash': 222,
+    'oslash': 611,
+    'oe': 944,
+    'germandbls': 611,
+    'Idieresis': 278,
+    'eacute': 556,
+    'abreve': 556,
+    'uhungarumlaut': 556,
+    'ecaron': 556,
+    'Ydieresis': 667,
+    'divide': 584,
+    'Yacute': 667,
+    'Acircumflex': 667,
+    'aacute': 556,
+    'Ucircumflex': 722,
+    'yacute': 500,
+    'scommaaccent': 500,
+    'ecircumflex': 556,
+    'Uring': 722,
+    'Udieresis': 722,
+    'aogonek': 556,
+    'Uacute': 722,
+    'uogonek': 556,
+    'Edieresis': 667,
+    'Dcroat': 722,
+    'commaaccent': 250,
+    'copyright': 737,
+    'Emacron': 667,
+    'ccaron': 500,
+    'aring': 556,
+    'Ncommaaccent': 722,
+    'lacute': 222,
+    'agrave': 556,
+    'Tcommaaccent': 611,
+    'Cacute': 722,
+    'atilde': 556,
+    'Edotaccent': 667,
+    'scaron': 500,
+    'scedilla': 500,
+    'iacute': 278,
+    'lozenge': 471,
+    'Rcaron': 722,
+    'Gcommaaccent': 778,
+    'ucircumflex': 556,
+    'acircumflex': 556,
+    'Amacron': 667,
+    'rcaron': 333,
+    'ccedilla': 500,
+    'Zdotaccent': 611,
+    'Thorn': 667,
+    'Omacron': 778,
+    'Racute': 722,
+    'Sacute': 667,
+    'dcaron': 643,
+    'Umacron': 722,
+    'uring': 556,
+    'threesuperior': 333,
+    'Ograve': 778,
+    'Agrave': 667,
+    'Abreve': 667,
+    'multiply': 584,
+    'uacute': 556,
+    'Tcaron': 611,
+    'partialdiff': 476,
+    'ydieresis': 500,
+    'Nacute': 722,
+    'icircumflex': 278,
+    'Ecircumflex': 667,
+    'adieresis': 556,
+    'edieresis': 556,
+    'cacute': 500,
+    'nacute': 556,
+    'umacron': 556,
+    'Ncaron': 722,
+    'Iacute': 278,
+    'plusminus': 584,
+    'brokenbar': 260,
+    'registered': 737,
+    'Gbreve': 778,
+    'Idotaccent': 278,
+    'summation': 600,
+    'Egrave': 667,
+    'racute': 333,
+    'omacron': 556,
+    'Zacute': 611,
+    'Zcaron': 611,
+    'greaterequal': 549,
+    'Eth': 722,
+    'Ccedilla': 722,
+    'lcommaaccent': 222,
+    'tcaron': 317,
+    'eogonek': 556,
+    'Uogonek': 722,
+    'Aacute': 667,
+    'Adieresis': 667,
+    'egrave': 556,
+    'zacute': 500,
+    'iogonek': 222,
+    'Oacute': 778,
+    'oacute': 556,
+    'amacron': 556,
+    'sacute': 500,
+    'idieresis': 278,
+    'Ocircumflex': 778,
+    'Ugrave': 722,
+    'Delta': 612,
+    'thorn': 556,
+    'twosuperior': 333,
+    'Odieresis': 778,
+    'mu': 556,
+    'igrave': 278,
+    'ohungarumlaut': 556,
+    'Eogonek': 667,
+    'dcroat': 556,
+    'threequarters': 834,
+    'Scedilla': 667,
+    'lcaron': 299,
+    'Kcommaaccent': 667,
+    'Lacute': 556,
+    'trademark': 1000,
+    'edotaccent': 556,
+    'Igrave': 278,
+    'Imacron': 278,
+    'Lcaron': 556,
+    'onehalf': 834,
+    'lessequal': 549,
+    'ocircumflex': 556,
+    'ntilde': 556,
+    'Uhungarumlaut': 722,
+    'Eacute': 667,
+    'emacron': 556,
+    'gbreve': 556,
+    'onequarter': 834,
+    'Scaron': 667,
+    'Scommaaccent': 667,
+    'Ohungarumlaut': 778,
+    'degree': 400,
+    'ograve': 556,
+    'Ccaron': 722,
+    'ugrave': 556,
+    'radical': 453,
+    'Dcaron': 722,
+    'rcommaaccent': 333,
+    'Ntilde': 722,
+    'otilde': 556,
+    'Rcommaaccent': 722,
+    'Lcommaaccent': 556,
+    'Atilde': 667,
+    'Aogonek': 667,
+    'Aring': 667,
+    'Otilde': 778,
+    'zdotaccent': 500,
+    'Ecaron': 667,
+    'Iogonek': 278,
+    'kcommaaccent': 500,
+    'minus': 584,
+    'Icircumflex': 278,
+    'ncaron': 556,
+    'tcommaaccent': 278,
+    'logicalnot': 584,
+    'odieresis': 556,
+    'udieresis': 556,
+    'notequal': 549,
+    'gcommaaccent': 556,
+    'eth': 556,
+    'zcaron': 500,
+    'ncommaaccent': 556,
+    'onesuperior': 333,
+    'imacron': 278,
+    'Euro': 556
+  },
+  'Helvetica-Bold': {
+    'space': 278,
+    'exclam': 333,
+    'quotedbl': 474,
+    'numbersign': 556,
+    'dollar': 556,
+    'percent': 889,
+    'ampersand': 722,
+    'quoteright': 278,
+    'parenleft': 333,
+    'parenright': 333,
+    'asterisk': 389,
+    'plus': 584,
+    'comma': 278,
+    'hyphen': 333,
+    'period': 278,
+    'slash': 278,
+    'zero': 556,
+    'one': 556,
+    'two': 556,
+    'three': 556,
+    'four': 556,
+    'five': 556,
+    'six': 556,
+    'seven': 556,
+    'eight': 556,
+    'nine': 556,
+    'colon': 333,
+    'semicolon': 333,
+    'less': 584,
+    'equal': 584,
+    'greater': 584,
+    'question': 611,
+    'at': 975,
+    'A': 722,
+    'B': 722,
+    'C': 722,
+    'D': 722,
+    'E': 667,
+    'F': 611,
+    'G': 778,
+    'H': 722,
+    'I': 278,
+    'J': 556,
+    'K': 722,
+    'L': 611,
+    'M': 833,
+    'N': 722,
+    'O': 778,
+    'P': 667,
+    'Q': 778,
+    'R': 722,
+    'S': 667,
+    'T': 611,
+    'U': 722,
+    'V': 667,
+    'W': 944,
+    'X': 667,
+    'Y': 667,
+    'Z': 611,
+    'bracketleft': 333,
+    'backslash': 278,
+    'bracketright': 333,
+    'asciicircum': 584,
+    'underscore': 556,
+    'quoteleft': 278,
+    'a': 556,
+    'b': 611,
+    'c': 556,
+    'd': 611,
+    'e': 556,
+    'f': 333,
+    'g': 611,
+    'h': 611,
+    'i': 278,
+    'j': 278,
+    'k': 556,
+    'l': 278,
+    'm': 889,
+    'n': 611,
+    'o': 611,
+    'p': 611,
+    'q': 611,
+    'r': 389,
+    's': 556,
+    't': 333,
+    'u': 611,
+    'v': 556,
+    'w': 778,
+    'x': 556,
+    'y': 556,
+    'z': 500,
+    'braceleft': 389,
+    'bar': 280,
+    'braceright': 389,
+    'asciitilde': 584,
+    'exclamdown': 333,
+    'cent': 556,
+    'sterling': 556,
+    'fraction': 167,
+    'yen': 556,
+    'florin': 556,
+    'section': 556,
+    'currency': 556,
+    'quotesingle': 238,
+    'quotedblleft': 500,
+    'guillemotleft': 556,
+    'guilsinglleft': 333,
+    'guilsinglright': 333,
+    'fi': 611,
+    'fl': 611,
+    'endash': 556,
+    'dagger': 556,
+    'daggerdbl': 556,
+    'periodcentered': 278,
+    'paragraph': 556,
+    'bullet': 350,
+    'quotesinglbase': 278,
+    'quotedblbase': 500,
+    'quotedblright': 500,
+    'guillemotright': 556,
+    'ellipsis': 1000,
+    'perthousand': 1000,
+    'questiondown': 611,
+    'grave': 333,
+    'acute': 333,
+    'circumflex': 333,
+    'tilde': 333,
+    'macron': 333,
+    'breve': 333,
+    'dotaccent': 333,
+    'dieresis': 333,
+    'ring': 333,
+    'cedilla': 333,
+    'hungarumlaut': 333,
+    'ogonek': 333,
+    'caron': 333,
+    'emdash': 1000,
+    'AE': 1000,
+    'ordfeminine': 370,
+    'Lslash': 611,
+    'Oslash': 778,
+    'OE': 1000,
+    'ordmasculine': 365,
+    'ae': 889,
+    'dotlessi': 278,
+    'lslash': 278,
+    'oslash': 611,
+    'oe': 944,
+    'germandbls': 611,
+    'Idieresis': 278,
+    'eacute': 556,
+    'abreve': 556,
+    'uhungarumlaut': 611,
+    'ecaron': 556,
+    'Ydieresis': 667,
+    'divide': 584,
+    'Yacute': 667,
+    'Acircumflex': 722,
+    'aacute': 556,
+    'Ucircumflex': 722,
+    'yacute': 556,
+    'scommaaccent': 556,
+    'ecircumflex': 556,
+    'Uring': 722,
+    'Udieresis': 722,
+    'aogonek': 556,
+    'Uacute': 722,
+    'uogonek': 611,
+    'Edieresis': 667,
+    'Dcroat': 722,
+    'commaaccent': 250,
+    'copyright': 737,
+    'Emacron': 667,
+    'ccaron': 556,
+    'aring': 556,
+    'Ncommaaccent': 722,
+    'lacute': 278,
+    'agrave': 556,
+    'Tcommaaccent': 611,
+    'Cacute': 722,
+    'atilde': 556,
+    'Edotaccent': 667,
+    'scaron': 556,
+    'scedilla': 556,
+    'iacute': 278,
+    'lozenge': 494,
+    'Rcaron': 722,
+    'Gcommaaccent': 778,
+    'ucircumflex': 611,
+    'acircumflex': 556,
+    'Amacron': 722,
+    'rcaron': 389,
+    'ccedilla': 556,
+    'Zdotaccent': 611,
+    'Thorn': 667,
+    'Omacron': 778,
+    'Racute': 722,
+    'Sacute': 667,
+    'dcaron': 743,
+    'Umacron': 722,
+    'uring': 611,
+    'threesuperior': 333,
+    'Ograve': 778,
+    'Agrave': 722,
+    'Abreve': 722,
+    'multiply': 584,
+    'uacute': 611,
+    'Tcaron': 611,
+    'partialdiff': 494,
+    'ydieresis': 556,
+    'Nacute': 722,
+    'icircumflex': 278,
+    'Ecircumflex': 667,
+    'adieresis': 556,
+    'edieresis': 556,
+    'cacute': 556,
+    'nacute': 611,
+    'umacron': 611,
+    'Ncaron': 722,
+    'Iacute': 278,
+    'plusminus': 584,
+    'brokenbar': 280,
+    'registered': 737,
+    'Gbreve': 778,
+    'Idotaccent': 278,
+    'summation': 600,
+    'Egrave': 667,
+    'racute': 389,
+    'omacron': 611,
+    'Zacute': 611,
+    'Zcaron': 611,
+    'greaterequal': 549,
+    'Eth': 722,
+    'Ccedilla': 722,
+    'lcommaaccent': 278,
+    'tcaron': 389,
+    'eogonek': 556,
+    'Uogonek': 722,
+    'Aacute': 722,
+    'Adieresis': 722,
+    'egrave': 556,
+    'zacute': 500,
+    'iogonek': 278,
+    'Oacute': 778,
+    'oacute': 611,
+    'amacron': 556,
+    'sacute': 556,
+    'idieresis': 278,
+    'Ocircumflex': 778,
+    'Ugrave': 722,
+    'Delta': 612,
+    'thorn': 611,
+    'twosuperior': 333,
+    'Odieresis': 778,
+    'mu': 611,
+    'igrave': 278,
+    'ohungarumlaut': 611,
+    'Eogonek': 667,
+    'dcroat': 611,
+    'threequarters': 834,
+    'Scedilla': 667,
+    'lcaron': 400,
+    'Kcommaaccent': 722,
+    'Lacute': 611,
+    'trademark': 1000,
+    'edotaccent': 556,
+    'Igrave': 278,
+    'Imacron': 278,
+    'Lcaron': 611,
+    'onehalf': 834,
+    'lessequal': 549,
+    'ocircumflex': 611,
+    'ntilde': 611,
+    'Uhungarumlaut': 722,
+    'Eacute': 667,
+    'emacron': 556,
+    'gbreve': 611,
+    'onequarter': 834,
+    'Scaron': 667,
+    'Scommaaccent': 667,
+    'Ohungarumlaut': 778,
+    'degree': 400,
+    'ograve': 611,
+    'Ccaron': 722,
+    'ugrave': 611,
+    'radical': 549,
+    'Dcaron': 722,
+    'rcommaaccent': 389,
+    'Ntilde': 722,
+    'otilde': 611,
+    'Rcommaaccent': 722,
+    'Lcommaaccent': 611,
+    'Atilde': 722,
+    'Aogonek': 722,
+    'Aring': 722,
+    'Otilde': 778,
+    'zdotaccent': 500,
+    'Ecaron': 667,
+    'Iogonek': 278,
+    'kcommaaccent': 556,
+    'minus': 584,
+    'Icircumflex': 278,
+    'ncaron': 611,
+    'tcommaaccent': 333,
+    'logicalnot': 584,
+    'odieresis': 611,
+    'udieresis': 611,
+    'notequal': 549,
+    'gcommaaccent': 611,
+    'eth': 611,
+    'zcaron': 500,
+    'ncommaaccent': 611,
+    'onesuperior': 333,
+    'imacron': 278,
+    'Euro': 556
+  },
+  'Helvetica-BoldOblique': {
+    'space': 278,
+    'exclam': 333,
+    'quotedbl': 474,
+    'numbersign': 556,
+    'dollar': 556,
+    'percent': 889,
+    'ampersand': 722,
+    'quoteright': 278,
+    'parenleft': 333,
+    'parenright': 333,
+    'asterisk': 389,
+    'plus': 584,
+    'comma': 278,
+    'hyphen': 333,
+    'period': 278,
+    'slash': 278,
+    'zero': 556,
+    'one': 556,
+    'two': 556,
+    'three': 556,
+    'four': 556,
+    'five': 556,
+    'six': 556,
+    'seven': 556,
+    'eight': 556,
+    'nine': 556,
+    'colon': 333,
+    'semicolon': 333,
+    'less': 584,
+    'equal': 584,
+    'greater': 584,
+    'question': 611,
+    'at': 975,
+    'A': 722,
+    'B': 722,
+    'C': 722,
+    'D': 722,
+    'E': 667,
+    'F': 611,
+    'G': 778,
+    'H': 722,
+    'I': 278,
+    'J': 556,
+    'K': 722,
+    'L': 611,
+    'M': 833,
+    'N': 722,
+    'O': 778,
+    'P': 667,
+    'Q': 778,
+    'R': 722,
+    'S': 667,
+    'T': 611,
+    'U': 722,
+    'V': 667,
+    'W': 944,
+    'X': 667,
+    'Y': 667,
+    'Z': 611,
+    'bracketleft': 333,
+    'backslash': 278,
+    'bracketright': 333,
+    'asciicircum': 584,
+    'underscore': 556,
+    'quoteleft': 278,
+    'a': 556,
+    'b': 611,
+    'c': 556,
+    'd': 611,
+    'e': 556,
+    'f': 333,
+    'g': 611,
+    'h': 611,
+    'i': 278,
+    'j': 278,
+    'k': 556,
+    'l': 278,
+    'm': 889,
+    'n': 611,
+    'o': 611,
+    'p': 611,
+    'q': 611,
+    'r': 389,
+    's': 556,
+    't': 333,
+    'u': 611,
+    'v': 556,
+    'w': 778,
+    'x': 556,
+    'y': 556,
+    'z': 500,
+    'braceleft': 389,
+    'bar': 280,
+    'braceright': 389,
+    'asciitilde': 584,
+    'exclamdown': 333,
+    'cent': 556,
+    'sterling': 556,
+    'fraction': 167,
+    'yen': 556,
+    'florin': 556,
+    'section': 556,
+    'currency': 556,
+    'quotesingle': 238,
+    'quotedblleft': 500,
+    'guillemotleft': 556,
+    'guilsinglleft': 333,
+    'guilsinglright': 333,
+    'fi': 611,
+    'fl': 611,
+    'endash': 556,
+    'dagger': 556,
+    'daggerdbl': 556,
+    'periodcentered': 278,
+    'paragraph': 556,
+    'bullet': 350,
+    'quotesinglbase': 278,
+    'quotedblbase': 500,
+    'quotedblright': 500,
+    'guillemotright': 556,
+    'ellipsis': 1000,
+    'perthousand': 1000,
+    'questiondown': 611,
+    'grave': 333,
+    'acute': 333,
+    'circumflex': 333,
+    'tilde': 333,
+    'macron': 333,
+    'breve': 333,
+    'dotaccent': 333,
+    'dieresis': 333,
+    'ring': 333,
+    'cedilla': 333,
+    'hungarumlaut': 333,
+    'ogonek': 333,
+    'caron': 333,
+    'emdash': 1000,
+    'AE': 1000,
+    'ordfeminine': 370,
+    'Lslash': 611,
+    'Oslash': 778,
+    'OE': 1000,
+    'ordmasculine': 365,
+    'ae': 889,
+    'dotlessi': 278,
+    'lslash': 278,
+    'oslash': 611,
+    'oe': 944,
+    'germandbls': 611,
+    'Idieresis': 278,
+    'eacute': 556,
+    'abreve': 556,
+    'uhungarumlaut': 611,
+    'ecaron': 556,
+    'Ydieresis': 667,
+    'divide': 584,
+    'Yacute': 667,
+    'Acircumflex': 722,
+    'aacute': 556,
+    'Ucircumflex': 722,
+    'yacute': 556,
+    'scommaaccent': 556,
+    'ecircumflex': 556,
+    'Uring': 722,
+    'Udieresis': 722,
+    'aogonek': 556,
+    'Uacute': 722,
+    'uogonek': 611,
+    'Edieresis': 667,
+    'Dcroat': 722,
+    'commaaccent': 250,
+    'copyright': 737,
+    'Emacron': 667,
+    'ccaron': 556,
+    'aring': 556,
+    'Ncommaaccent': 722,
+    'lacute': 278,
+    'agrave': 556,
+    'Tcommaaccent': 611,
+    'Cacute': 722,
+    'atilde': 556,
+    'Edotaccent': 667,
+    'scaron': 556,
+    'scedilla': 556,
+    'iacute': 278,
+    'lozenge': 494,
+    'Rcaron': 722,
+    'Gcommaaccent': 778,
+    'ucircumflex': 611,
+    'acircumflex': 556,
+    'Amacron': 722,
+    'rcaron': 389,
+    'ccedilla': 556,
+    'Zdotaccent': 611,
+    'Thorn': 667,
+    'Omacron': 778,
+    'Racute': 722,
+    'Sacute': 667,
+    'dcaron': 743,
+    'Umacron': 722,
+    'uring': 611,
+    'threesuperior': 333,
+    'Ograve': 778,
+    'Agrave': 722,
+    'Abreve': 722,
+    'multiply': 584,
+    'uacute': 611,
+    'Tcaron': 611,
+    'partialdiff': 494,
+    'ydieresis': 556,
+    'Nacute': 722,
+    'icircumflex': 278,
+    'Ecircumflex': 667,
+    'adieresis': 556,
+    'edieresis': 556,
+    'cacute': 556,
+    'nacute': 611,
+    'umacron': 611,
+    'Ncaron': 722,
+    'Iacute': 278,
+    'plusminus': 584,
+    'brokenbar': 280,
+    'registered': 737,
+    'Gbreve': 778,
+    'Idotaccent': 278,
+    'summation': 600,
+    'Egrave': 667,
+    'racute': 389,
+    'omacron': 611,
+    'Zacute': 611,
+    'Zcaron': 611,
+    'greaterequal': 549,
+    'Eth': 722,
+    'Ccedilla': 722,
+    'lcommaaccent': 278,
+    'tcaron': 389,
+    'eogonek': 556,
+    'Uogonek': 722,
+    'Aacute': 722,
+    'Adieresis': 722,
+    'egrave': 556,
+    'zacute': 500,
+    'iogonek': 278,
+    'Oacute': 778,
+    'oacute': 611,
+    'amacron': 556,
+    'sacute': 556,
+    'idieresis': 278,
+    'Ocircumflex': 778,
+    'Ugrave': 722,
+    'Delta': 612,
+    'thorn': 611,
+    'twosuperior': 333,
+    'Odieresis': 778,
+    'mu': 611,
+    'igrave': 278,
+    'ohungarumlaut': 611,
+    'Eogonek': 667,
+    'dcroat': 611,
+    'threequarters': 834,
+    'Scedilla': 667,
+    'lcaron': 400,
+    'Kcommaaccent': 722,
+    'Lacute': 611,
+    'trademark': 1000,
+    'edotaccent': 556,
+    'Igrave': 278,
+    'Imacron': 278,
+    'Lcaron': 611,
+    'onehalf': 834,
+    'lessequal': 549,
+    'ocircumflex': 611,
+    'ntilde': 611,
+    'Uhungarumlaut': 722,
+    'Eacute': 667,
+    'emacron': 556,
+    'gbreve': 611,
+    'onequarter': 834,
+    'Scaron': 667,
+    'Scommaaccent': 667,
+    'Ohungarumlaut': 778,
+    'degree': 400,
+    'ograve': 611,
+    'Ccaron': 722,
+    'ugrave': 611,
+    'radical': 549,
+    'Dcaron': 722,
+    'rcommaaccent': 389,
+    'Ntilde': 722,
+    'otilde': 611,
+    'Rcommaaccent': 722,
+    'Lcommaaccent': 611,
+    'Atilde': 722,
+    'Aogonek': 722,
+    'Aring': 722,
+    'Otilde': 778,
+    'zdotaccent': 500,
+    'Ecaron': 667,
+    'Iogonek': 278,
+    'kcommaaccent': 556,
+    'minus': 584,
+    'Icircumflex': 278,
+    'ncaron': 611,
+    'tcommaaccent': 333,
+    'logicalnot': 584,
+    'odieresis': 611,
+    'udieresis': 611,
+    'notequal': 549,
+    'gcommaaccent': 611,
+    'eth': 611,
+    'zcaron': 500,
+    'ncommaaccent': 611,
+    'onesuperior': 333,
+    'imacron': 278,
+    'Euro': 556
+  },
+  'Helvetica-Oblique' : {
+    'space': 278,
+    'exclam': 278,
+    'quotedbl': 355,
+    'numbersign': 556,
+    'dollar': 556,
+    'percent': 889,
+    'ampersand': 667,
+    'quoteright': 222,
+    'parenleft': 333,
+    'parenright': 333,
+    'asterisk': 389,
+    'plus': 584,
+    'comma': 278,
+    'hyphen': 333,
+    'period': 278,
+    'slash': 278,
+    'zero': 556,
+    'one': 556,
+    'two': 556,
+    'three': 556,
+    'four': 556,
+    'five': 556,
+    'six': 556,
+    'seven': 556,
+    'eight': 556,
+    'nine': 556,
+    'colon': 278,
+    'semicolon': 278,
+    'less': 584,
+    'equal': 584,
+    'greater': 584,
+    'question': 556,
+    'at': 1015,
+    'A': 667,
+    'B': 667,
+    'C': 722,
+    'D': 722,
+    'E': 667,
+    'F': 611,
+    'G': 778,
+    'H': 722,
+    'I': 278,
+    'J': 500,
+    'K': 667,
+    'L': 556,
+    'M': 833,
+    'N': 722,
+    'O': 778,
+    'P': 667,
+    'Q': 778,
+    'R': 722,
+    'S': 667,
+    'T': 611,
+    'U': 722,
+    'V': 667,
+    'W': 944,
+    'X': 667,
+    'Y': 667,
+    'Z': 611,
+    'bracketleft': 278,
+    'backslash': 278,
+    'bracketright': 278,
+    'asciicircum': 469,
+    'underscore': 556,
+    'quoteleft': 222,
+    'a': 556,
+    'b': 556,
+    'c': 500,
+    'd': 556,
+    'e': 556,
+    'f': 278,
+    'g': 556,
+    'h': 556,
+    'i': 222,
+    'j': 222,
+    'k': 500,
+    'l': 222,
+    'm': 833,
+    'n': 556,
+    'o': 556,
+    'p': 556,
+    'q': 556,
+    'r': 333,
+    's': 500,
+    't': 278,
+    'u': 556,
+    'v': 500,
+    'w': 722,
+    'x': 500,
+    'y': 500,
+    'z': 500,
+    'braceleft': 334,
+    'bar': 260,
+    'braceright': 334,
+    'asciitilde': 584,
+    'exclamdown': 333,
+    'cent': 556,
+    'sterling': 556,
+    'fraction': 167,
+    'yen': 556,
+    'florin': 556,
+    'section': 556,
+    'currency': 556,
+    'quotesingle': 191,
+    'quotedblleft': 333,
+    'guillemotleft': 556,
+    'guilsinglleft': 333,
+    'guilsinglright': 333,
+    'fi': 500,
+    'fl': 500,
+    'endash': 556,
+    'dagger': 556,
+    'daggerdbl': 556,
+    'periodcentered': 278,
+    'paragraph': 537,
+    'bullet': 350,
+    'quotesinglbase': 222,
+    'quotedblbase': 333,
+    'quotedblright': 333,
+    'guillemotright': 556,
+    'ellipsis': 1000,
+    'perthousand': 1000,
+    'questiondown': 611,
+    'grave': 333,
+    'acute': 333,
+    'circumflex': 333,
+    'tilde': 333,
+    'macron': 333,
+    'breve': 333,
+    'dotaccent': 333,
+    'dieresis': 333,
+    'ring': 333,
+    'cedilla': 333,
+    'hungarumlaut': 333,
+    'ogonek': 333,
+    'caron': 333,
+    'emdash': 1000,
+    'AE': 1000,
+    'ordfeminine': 370,
+    'Lslash': 556,
+    'Oslash': 778,
+    'OE': 1000,
+    'ordmasculine': 365,
+    'ae': 889,
+    'dotlessi': 278,
+    'lslash': 222,
+    'oslash': 611,
+    'oe': 944,
+    'germandbls': 611,
+    'Idieresis': 278,
+    'eacute': 556,
+    'abreve': 556,
+    'uhungarumlaut': 556,
+    'ecaron': 556,
+    'Ydieresis': 667,
+    'divide': 584,
+    'Yacute': 667,
+    'Acircumflex': 667,
+    'aacute': 556,
+    'Ucircumflex': 722,
+    'yacute': 500,
+    'scommaaccent': 500,
+    'ecircumflex': 556,
+    'Uring': 722,
+    'Udieresis': 722,
+    'aogonek': 556,
+    'Uacute': 722,
+    'uogonek': 556,
+    'Edieresis': 667,
+    'Dcroat': 722,
+    'commaaccent': 250,
+    'copyright': 737,
+    'Emacron': 667,
+    'ccaron': 500,
+    'aring': 556,
+    'Ncommaaccent': 722,
+    'lacute': 222,
+    'agrave': 556,
+    'Tcommaaccent': 611,
+    'Cacute': 722,
+    'atilde': 556,
+    'Edotaccent': 667,
+    'scaron': 500,
+    'scedilla': 500,
+    'iacute': 278,
+    'lozenge': 471,
+    'Rcaron': 722,
+    'Gcommaaccent': 778,
+    'ucircumflex': 556,
+    'acircumflex': 556,
+    'Amacron': 667,
+    'rcaron': 333,
+    'ccedilla': 500,
+    'Zdotaccent': 611,
+    'Thorn': 667,
+    'Omacron': 778,
+    'Racute': 722,
+    'Sacute': 667,
+    'dcaron': 643,
+    'Umacron': 722,
+    'uring': 556,
+    'threesuperior': 333,
+    'Ograve': 778,
+    'Agrave': 667,
+    'Abreve': 667,
+    'multiply': 584,
+    'uacute': 556,
+    'Tcaron': 611,
+    'partialdiff': 476,
+    'ydieresis': 500,
+    'Nacute': 722,
+    'icircumflex': 278,
+    'Ecircumflex': 667,
+    'adieresis': 556,
+    'edieresis': 556,
+    'cacute': 500,
+    'nacute': 556,
+    'umacron': 556,
+    'Ncaron': 722,
+    'Iacute': 278,
+    'plusminus': 584,
+    'brokenbar': 260,
+    'registered': 737,
+    'Gbreve': 778,
+    'Idotaccent': 278,
+    'summation': 600,
+    'Egrave': 667,
+    'racute': 333,
+    'omacron': 556,
+    'Zacute': 611,
+    'Zcaron': 611,
+    'greaterequal': 549,
+    'Eth': 722,
+    'Ccedilla': 722,
+    'lcommaaccent': 222,
+    'tcaron': 317,
+    'eogonek': 556,
+    'Uogonek': 722,
+    'Aacute': 667,
+    'Adieresis': 667,
+    'egrave': 556,
+    'zacute': 500,
+    'iogonek': 222,
+    'Oacute': 778,
+    'oacute': 556,
+    'amacron': 556,
+    'sacute': 500,
+    'idieresis': 278,
+    'Ocircumflex': 778,
+    'Ugrave': 722,
+    'Delta': 612,
+    'thorn': 556,
+    'twosuperior': 333,
+    'Odieresis': 778,
+    'mu': 556,
+    'igrave': 278,
+    'ohungarumlaut': 556,
+    'Eogonek': 667,
+    'dcroat': 556,
+    'threequarters': 834,
+    'Scedilla': 667,
+    'lcaron': 299,
+    'Kcommaaccent': 667,
+    'Lacute': 556,
+    'trademark': 1000,
+    'edotaccent': 556,
+    'Igrave': 278,
+    'Imacron': 278,
+    'Lcaron': 556,
+    'onehalf': 834,
+    'lessequal': 549,
+    'ocircumflex': 556,
+    'ntilde': 556,
+    'Uhungarumlaut': 722,
+    'Eacute': 667,
+    'emacron': 556,
+    'gbreve': 556,
+    'onequarter': 834,
+    'Scaron': 667,
+    'Scommaaccent': 667,
+    'Ohungarumlaut': 778,
+    'degree': 400,
+    'ograve': 556,
+    'Ccaron': 722,
+    'ugrave': 556,
+    'radical': 453,
+    'Dcaron': 722,
+    'rcommaaccent': 333,
+    'Ntilde': 722,
+    'otilde': 556,
+    'Rcommaaccent': 722,
+    'Lcommaaccent': 556,
+    'Atilde': 667,
+    'Aogonek': 667,
+    'Aring': 667,
+    'Otilde': 778,
+    'zdotaccent': 500,
+    'Ecaron': 667,
+    'Iogonek': 278,
+    'kcommaaccent': 500,
+    'minus': 584,
+    'Icircumflex': 278,
+    'ncaron': 556,
+    'tcommaaccent': 278,
+    'logicalnot': 584,
+    'odieresis': 556,
+    'udieresis': 556,
+    'notequal': 549,
+    'gcommaaccent': 556,
+    'eth': 556,
+    'zcaron': 500,
+    'ncommaaccent': 556,
+    'onesuperior': 333,
+    'imacron': 278,
+    'Euro': 556
+  },
+  'Symbol': {
+    'space': 250,
+    'exclam': 333,
+    'universal': 713,
+    'numbersign': 500,
+    'existential': 549,
+    'percent': 833,
+    'ampersand': 778,
+    'suchthat': 439,
+    'parenleft': 333,
+    'parenright': 333,
+    'asteriskmath': 500,
+    'plus': 549,
+    'comma': 250,
+    'minus': 549,
+    'period': 250,
+    'slash': 278,
+    'zero': 500,
+    'one': 500,
+    'two': 500,
+    'three': 500,
+    'four': 500,
+    'five': 500,
+    'six': 500,
+    'seven': 500,
+    'eight': 500,
+    'nine': 500,
+    'colon': 278,
+    'semicolon': 278,
+    'less': 549,
+    'equal': 549,
+    'greater': 549,
+    'question': 444,
+    'congruent': 549,
+    'Alpha': 722,
+    'Beta': 667,
+    'Chi': 722,
+    'Delta': 612,
+    'Epsilon': 611,
+    'Phi': 763,
+    'Gamma': 603,
+    'Eta': 722,
+    'Iota': 333,
+    'theta1': 631,
+    'Kappa': 722,
+    'Lambda': 686,
+    'Mu': 889,
+    'Nu': 722,
+    'Omicron': 722,
+    'Pi': 768,
+    'Theta': 741,
+    'Rho': 556,
+    'Sigma': 592,
+    'Tau': 611,
+    'Upsilon': 690,
+    'sigma1': 439,
+    'Omega': 768,
+    'Xi': 645,
+    'Psi': 795,
+    'Zeta': 611,
+    'bracketleft': 333,
+    'therefore': 863,
+    'bracketright': 333,
+    'perpendicular': 658,
+    'underscore': 500,
+    'radicalex': 500,
+    'alpha': 631,
+    'beta': 549,
+    'chi': 549,
+    'delta': 494,
+    'epsilon': 439,
+    'phi': 521,
+    'gamma': 411,
+    'eta': 603,
+    'iota': 329,
+    'phi1': 603,
+    'kappa': 549,
+    'lambda': 549,
+    'mu': 576,
+    'nu': 521,
+    'omicron': 549,
+    'pi': 549,
+    'theta': 521,
+    'rho': 549,
+    'sigma': 603,
+    'tau': 439,
+    'upsilon': 576,
+    'omega1': 713,
+    'omega': 686,
+    'xi': 493,
+    'psi': 686,
+    'zeta': 494,
+    'braceleft': 480,
+    'bar': 200,
+    'braceright': 480,
+    'similar': 549,
+    'Euro': 750,
+    'Upsilon1': 620,
+    'minute': 247,
+    'lessequal': 549,
+    'fraction': 167,
+    'infinity': 713,
+    'florin': 500,
+    'club': 753,
+    'diamond': 753,
+    'heart': 753,
+    'spade': 753,
+    'arrowboth': 1042,
+    'arrowleft': 987,
+    'arrowup': 603,
+    'arrowright': 987,
+    'arrowdown': 603,
+    'degree': 400,
+    'plusminus': 549,
+    'second': 411,
+    'greaterequal': 549,
+    'multiply': 549,
+    'proportional': 713,
+    'partialdiff': 494,
+    'bullet': 460,
+    'divide': 549,
+    'notequal': 549,
+    'equivalence': 549,
+    'approxequal': 549,
+    'ellipsis': 1000,
+    'arrowvertex': 603,
+    'arrowhorizex': 1000,
+    'carriagereturn': 658,
+    'aleph': 823,
+    'Ifraktur': 686,
+    'Rfraktur': 795,
+    'weierstrass': 987,
+    'circlemultiply': 768,
+    'circleplus': 768,
+    'emptyset': 823,
+    'intersection': 768,
+    'union': 768,
+    'propersuperset': 713,
+    'reflexsuperset': 713,
+    'notsubset': 713,
+    'propersubset': 713,
+    'reflexsubset': 713,
+    'element': 713,
+    'notelement': 713,
+    'angle': 768,
+    'gradient': 713,
+    'registerserif': 790,
+    'copyrightserif': 790,
+    'trademarkserif': 890,
+    'product': 823,
+    'radical': 549,
+    'dotmath': 250,
+    'logicalnot': 713,
+    'logicaland': 603,
+    'logicalor': 603,
+    'arrowdblboth': 1042,
+    'arrowdblleft': 987,
+    'arrowdblup': 603,
+    'arrowdblright': 987,
+    'arrowdbldown': 603,
+    'lozenge': 494,
+    'angleleft': 329,
+    'registersans': 790,
+    'copyrightsans': 790,
+    'trademarksans': 786,
+    'summation': 713,
+    'parenlefttp': 384,
+    'parenleftex': 384,
+    'parenleftbt': 384,
+    'bracketlefttp': 384,
+    'bracketleftex': 384,
+    'bracketleftbt': 384,
+    'bracelefttp': 494,
+    'braceleftmid': 494,
+    'braceleftbt': 494,
+    'braceex': 494,
+    'angleright': 329,
+    'integral': 274,
+    'integraltp': 686,
+    'integralex': 686,
+    'integralbt': 686,
+    'parenrighttp': 384,
+    'parenrightex': 384,
+    'parenrightbt': 384,
+    'bracketrighttp': 384,
+    'bracketrightex': 384,
+    'bracketrightbt': 384,
+    'bracerighttp': 494,
+    'bracerightmid': 494,
+    'bracerightbt': 494,
+    'apple': 790
+  },
+  'Times-Roman': {
+    'space': 250,
+    'exclam': 333,
+    'quotedbl': 408,
+    'numbersign': 500,
+    'dollar': 500,
+    'percent': 833,
+    'ampersand': 778,
+    'quoteright': 333,
+    'parenleft': 333,
+    'parenright': 333,
+    'asterisk': 500,
+    'plus': 564,
+    'comma': 250,
+    'hyphen': 333,
+    'period': 250,
+    'slash': 278,
+    'zero': 500,
+    'one': 500,
+    'two': 500,
+    'three': 500,
+    'four': 500,
+    'five': 500,
+    'six': 500,
+    'seven': 500,
+    'eight': 500,
+    'nine': 500,
+    'colon': 278,
+    'semicolon': 278,
+    'less': 564,
+    'equal': 564,
+    'greater': 564,
+    'question': 444,
+    'at': 921,
+    'A': 722,
+    'B': 667,
+    'C': 667,
+    'D': 722,
+    'E': 611,
+    'F': 556,
+    'G': 722,
+    'H': 722,
+    'I': 333,
+    'J': 389,
+    'K': 722,
+    'L': 611,
+    'M': 889,
+    'N': 722,
+    'O': 722,
+    'P': 556,
+    'Q': 722,
+    'R': 667,
+    'S': 556,
+    'T': 611,
+    'U': 722,
+    'V': 722,
+    'W': 944,
+    'X': 722,
+    'Y': 722,
+    'Z': 611,
+    'bracketleft': 333,
+    'backslash': 278,
+    'bracketright': 333,
+    'asciicircum': 469,
+    'underscore': 500,
+    'quoteleft': 333,
+    'a': 444,
+    'b': 500,
+    'c': 444,
+    'd': 500,
+    'e': 444,
+    'f': 333,
+    'g': 500,
+    'h': 500,
+    'i': 278,
+    'j': 278,
+    'k': 500,
+    'l': 278,
+    'm': 778,
+    'n': 500,
+    'o': 500,
+    'p': 500,
+    'q': 500,
+    'r': 333,
+    's': 389,
+    't': 278,
+    'u': 500,
+    'v': 500,
+    'w': 722,
+    'x': 500,
+    'y': 500,
+    'z': 444,
+    'braceleft': 480,
+    'bar': 200,
+    'braceright': 480,
+    'asciitilde': 541,
+    'exclamdown': 333,
+    'cent': 500,
+    'sterling': 500,
+    'fraction': 167,
+    'yen': 500,
+    'florin': 500,
+    'section': 500,
+    'currency': 500,
+    'quotesingle': 180,
+    'quotedblleft': 444,
+    'guillemotleft': 500,
+    'guilsinglleft': 333,
+    'guilsinglright': 333,
+    'fi': 556,
+    'fl': 556,
+    'endash': 500,
+    'dagger': 500,
+    'daggerdbl': 500,
+    'periodcentered': 250,
+    'paragraph': 453,
+    'bullet': 350,
+    'quotesinglbase': 333,
+    'quotedblbase': 444,
+    'quotedblright': 444,
+    'guillemotright': 500,
+    'ellipsis': 1000,
+    'perthousand': 1000,
+    'questiondown': 444,
+    'grave': 333,
+    'acute': 333,
+    'circumflex': 333,
+    'tilde': 333,
+    'macron': 333,
+    'breve': 333,
+    'dotaccent': 333,
+    'dieresis': 333,
+    'ring': 333,
+    'cedilla': 333,
+    'hungarumlaut': 333,
+    'ogonek': 333,
+    'caron': 333,
+    'emdash': 1000,
+    'AE': 889,
+    'ordfeminine': 276,
+    'Lslash': 611,
+    'Oslash': 722,
+    'OE': 889,
+    'ordmasculine': 310,
+    'ae': 667,
+    'dotlessi': 278,
+    'lslash': 278,
+    'oslash': 500,
+    'oe': 722,
+    'germandbls': 500,
+    'Idieresis': 333,
+    'eacute': 444,
+    'abreve': 444,
+    'uhungarumlaut': 500,
+    'ecaron': 444,
+    'Ydieresis': 722,
+    'divide': 564,
+    'Yacute': 722,
+    'Acircumflex': 722,
+    'aacute': 444,
+    'Ucircumflex': 722,
+    'yacute': 500,
+    'scommaaccent': 389,
+    'ecircumflex': 444,
+    'Uring': 722,
+    'Udieresis': 722,
+    'aogonek': 444,
+    'Uacute': 722,
+    'uogonek': 500,
+    'Edieresis': 611,
+    'Dcroat': 722,
+    'commaaccent': 250,
+    'copyright': 760,
+    'Emacron': 611,
+    'ccaron': 444,
+    'aring': 444,
+    'Ncommaaccent': 722,
+    'lacute': 278,
+    'agrave': 444,
+    'Tcommaaccent': 611,
+    'Cacute': 667,
+    'atilde': 444,
+    'Edotaccent': 611,
+    'scaron': 389,
+    'scedilla': 389,
+    'iacute': 278,
+    'lozenge': 471,
+    'Rcaron': 667,
+    'Gcommaaccent': 722,
+    'ucircumflex': 500,
+    'acircumflex': 444,
+    'Amacron': 722,
+    'rcaron': 333,
+    'ccedilla': 444,
+    'Zdotaccent': 611,
+    'Thorn': 556,
+    'Omacron': 722,
+    'Racute': 667,
+    'Sacute': 556,
+    'dcaron': 588,
+    'Umacron': 722,
+    'uring': 500,
+    'threesuperior': 300,
+    'Ograve': 722,
+    'Agrave': 722,
+    'Abreve': 722,
+    'multiply': 564,
+    'uacute': 500,
+    'Tcaron': 611,
+    'partialdiff': 476,
+    'ydieresis': 500,
+    'Nacute': 722,
+    'icircumflex': 278,
+    'Ecircumflex': 611,
+    'adieresis': 444,
+    'edieresis': 444,
+    'cacute': 444,
+    'nacute': 500,
+    'umacron': 500,
+    'Ncaron': 722,
+    'Iacute': 333,
+    'plusminus': 564,
+    'brokenbar': 200,
+    'registered': 760,
+    'Gbreve': 722,
+    'Idotaccent': 333,
+    'summation': 600,
+    'Egrave': 611,
+    'racute': 333,
+    'omacron': 500,
+    'Zacute': 611,
+    'Zcaron': 611,
+    'greaterequal': 549,
+    'Eth': 722,
+    'Ccedilla': 667,
+    'lcommaaccent': 278,
+    'tcaron': 326,
+    'eogonek': 444,
+    'Uogonek': 722,
+    'Aacute': 722,
+    'Adieresis': 722,
+    'egrave': 444,
+    'zacute': 444,
+    'iogonek': 278,
+    'Oacute': 722,
+    'oacute': 500,
+    'amacron': 444,
+    'sacute': 389,
+    'idieresis': 278,
+    'Ocircumflex': 722,
+    'Ugrave': 722,
+    'Delta': 612,
+    'thorn': 500,
+    'twosuperior': 300,
+    'Odieresis': 722,
+    'mu': 500,
+    'igrave': 278,
+    'ohungarumlaut': 500,
+    'Eogonek': 611,
+    'dcroat': 500,
+    'threequarters': 750,
+    'Scedilla': 556,
+    'lcaron': 344,
+    'Kcommaaccent': 722,
+    'Lacute': 611,
+    'trademark': 980,
+    'edotaccent': 444,
+    'Igrave': 333,
+    'Imacron': 333,
+    'Lcaron': 611,
+    'onehalf': 750,
+    'lessequal': 549,
+    'ocircumflex': 500,
+    'ntilde': 500,
+    'Uhungarumlaut': 722,
+    'Eacute': 611,
+    'emacron': 444,
+    'gbreve': 500,
+    'onequarter': 750,
+    'Scaron': 556,
+    'Scommaaccent': 556,
+    'Ohungarumlaut': 722,
+    'degree': 400,
+    'ograve': 500,
+    'Ccaron': 667,
+    'ugrave': 500,
+    'radical': 453,
+    'Dcaron': 722,
+    'rcommaaccent': 333,
+    'Ntilde': 722,
+    'otilde': 500,
+    'Rcommaaccent': 667,
+    'Lcommaaccent': 611,
+    'Atilde': 722,
+    'Aogonek': 722,
+    'Aring': 722,
+    'Otilde': 722,
+    'zdotaccent': 444,
+    'Ecaron': 611,
+    'Iogonek': 333,
+    'kcommaaccent': 500,
+    'minus': 564,
+    'Icircumflex': 333,
+    'ncaron': 500,
+    'tcommaaccent': 278,
+    'logicalnot': 564,
+    'odieresis': 500,
+    'udieresis': 500,
+    'notequal': 549,
+    'gcommaaccent': 500,
+    'eth': 500,
+    'zcaron': 444,
+    'ncommaaccent': 500,
+    'onesuperior': 300,
+    'imacron': 278,
+    'Euro': 500
+  },
+  'Times-Bold': {
+    'space': 250,
+    'exclam': 333,
+    'quotedbl': 555,
+    'numbersign': 500,
+    'dollar': 500,
+    'percent': 1000,
+    'ampersand': 833,
+    'quoteright': 333,
+    'parenleft': 333,
+    'parenright': 333,
+    'asterisk': 500,
+    'plus': 570,
+    'comma': 250,
+    'hyphen': 333,
+    'period': 250,
+    'slash': 278,
+    'zero': 500,
+    'one': 500,
+    'two': 500,
+    'three': 500,
+    'four': 500,
+    'five': 500,
+    'six': 500,
+    'seven': 500,
+    'eight': 500,
+    'nine': 500,
+    'colon': 333,
+    'semicolon': 333,
+    'less': 570,
+    'equal': 570,
+    'greater': 570,
+    'question': 500,
+    'at': 930,
+    'A': 722,
+    'B': 667,
+    'C': 722,
+    'D': 722,
+    'E': 667,
+    'F': 611,
+    'G': 778,
+    'H': 778,
+    'I': 389,
+    'J': 500,
+    'K': 778,
+    'L': 667,
+    'M': 944,
+    'N': 722,
+    'O': 778,
+    'P': 611,
+    'Q': 778,
+    'R': 722,
+    'S': 556,
+    'T': 667,
+    'U': 722,
+    'V': 722,
+    'W': 1000,
+    'X': 722,
+    'Y': 722,
+    'Z': 667,
+    'bracketleft': 333,
+    'backslash': 278,
+    'bracketright': 333,
+    'asciicircum': 581,
+    'underscore': 500,
+    'quoteleft': 333,
+    'a': 500,
+    'b': 556,
+    'c': 444,
+    'd': 556,
+    'e': 444,
+    'f': 333,
+    'g': 500,
+    'h': 556,
+    'i': 278,
+    'j': 333,
+    'k': 556,
+    'l': 278,
+    'm': 833,
+    'n': 556,
+    'o': 500,
+    'p': 556,
+    'q': 556,
+    'r': 444,
+    's': 389,
+    't': 333,
+    'u': 556,
+    'v': 500,
+    'w': 722,
+    'x': 500,
+    'y': 500,
+    'z': 444,
+    'braceleft': 394,
+    'bar': 220,
+    'braceright': 394,
+    'asciitilde': 520,
+    'exclamdown': 333,
+    'cent': 500,
+    'sterling': 500,
+    'fraction': 167,
+    'yen': 500,
+    'florin': 500,
+    'section': 500,
+    'currency': 500,
+    'quotesingle': 278,
+    'quotedblleft': 500,
+    'guillemotleft': 500,
+    'guilsinglleft': 333,
+    'guilsinglright': 333,
+    'fi': 556,
+    'fl': 556,
+    'endash': 500,
+    'dagger': 500,
+    'daggerdbl': 500,
+    'periodcentered': 250,
+    'paragraph': 540,
+    'bullet': 350,
+    'quotesinglbase': 333,
+    'quotedblbase': 500,
+    'quotedblright': 500,
+    'guillemotright': 500,
+    'ellipsis': 1000,
+    'perthousand': 1000,
+    'questiondown': 500,
+    'grave': 333,
+    'acute': 333,
+    'circumflex': 333,
+    'tilde': 333,
+    'macron': 333,
+    'breve': 333,
+    'dotaccent': 333,
+    'dieresis': 333,
+    'ring': 333,
+    'cedilla': 333,
+    'hungarumlaut': 333,
+    'ogonek': 333,
+    'caron': 333,
+    'emdash': 1000,
+    'AE': 1000,
+    'ordfeminine': 300,
+    'Lslash': 667,
+    'Oslash': 778,
+    'OE': 1000,
+    'ordmasculine': 330,
+    'ae': 722,
+    'dotlessi': 278,
+    'lslash': 278,
+    'oslash': 500,
+    'oe': 722,
+    'germandbls': 556,
+    'Idieresis': 389,
+    'eacute': 444,
+    'abreve': 500,
+    'uhungarumlaut': 556,
+    'ecaron': 444,
+    'Ydieresis': 722,
+    'divide': 570,
+    'Yacute': 722,
+    'Acircumflex': 722,
+    'aacute': 500,
+    'Ucircumflex': 722,
+    'yacute': 500,
+    'scommaaccent': 389,
+    'ecircumflex': 444,
+    'Uring': 722,
+    'Udieresis': 722,
+    'aogonek': 500,
+    'Uacute': 722,
+    'uogonek': 556,
+    'Edieresis': 667,
+    'Dcroat': 722,
+    'commaaccent': 250,
+    'copyright': 747,
+    'Emacron': 667,
+    'ccaron': 444,
+    'aring': 500,
+    'Ncommaaccent': 722,
+    'lacute': 278,
+    'agrave': 500,
+    'Tcommaaccent': 667,
+    'Cacute': 722,
+    'atilde': 500,
+    'Edotaccent': 667,
+    'scaron': 389,
+    'scedilla': 389,
+    'iacute': 278,
+    'lozenge': 494,
+    'Rcaron': 722,
+    'Gcommaaccent': 778,
+    'ucircumflex': 556,
+    'acircumflex': 500,
+    'Amacron': 722,
+    'rcaron': 444,
+    'ccedilla': 444,
+    'Zdotaccent': 667,
+    'Thorn': 611,
+    'Omacron': 778,
+    'Racute': 722,
+    'Sacute': 556,
+    'dcaron': 672,
+    'Umacron': 722,
+    'uring': 556,
+    'threesuperior': 300,
+    'Ograve': 778,
+    'Agrave': 722,
+    'Abreve': 722,
+    'multiply': 570,
+    'uacute': 556,
+    'Tcaron': 667,
+    'partialdiff': 494,
+    'ydieresis': 500,
+    'Nacute': 722,
+    'icircumflex': 278,
+    'Ecircumflex': 667,
+    'adieresis': 500,
+    'edieresis': 444,
+    'cacute': 444,
+    'nacute': 556,
+    'umacron': 556,
+    'Ncaron': 722,
+    'Iacute': 389,
+    'plusminus': 570,
+    'brokenbar': 220,
+    'registered': 747,
+    'Gbreve': 778,
+    'Idotaccent': 389,
+    'summation': 600,
+    'Egrave': 667,
+    'racute': 444,
+    'omacron': 500,
+    'Zacute': 667,
+    'Zcaron': 667,
+    'greaterequal': 549,
+    'Eth': 722,
+    'Ccedilla': 722,
+    'lcommaaccent': 278,
+    'tcaron': 416,
+    'eogonek': 444,
+    'Uogonek': 722,
+    'Aacute': 722,
+    'Adieresis': 722,
+    'egrave': 444,
+    'zacute': 444,
+    'iogonek': 278,
+    'Oacute': 778,
+    'oacute': 500,
+    'amacron': 500,
+    'sacute': 389,
+    'idieresis': 278,
+    'Ocircumflex': 778,
+    'Ugrave': 722,
+    'Delta': 612,
+    'thorn': 556,
+    'twosuperior': 300,
+    'Odieresis': 778,
+    'mu': 556,
+    'igrave': 278,
+    'ohungarumlaut': 500,
+    'Eogonek': 667,
+    'dcroat': 556,
+    'threequarters': 750,
+    'Scedilla': 556,
+    'lcaron': 394,
+    'Kcommaaccent': 778,
+    'Lacute': 667,
+    'trademark': 1000,
+    'edotaccent': 444,
+    'Igrave': 389,
+    'Imacron': 389,
+    'Lcaron': 667,
+    'onehalf': 750,
+    'lessequal': 549,
+    'ocircumflex': 500,
+    'ntilde': 556,
+    'Uhungarumlaut': 722,
+    'Eacute': 667,
+    'emacron': 444,
+    'gbreve': 500,
+    'onequarter': 750,
+    'Scaron': 556,
+    'Scommaaccent': 556,
+    'Ohungarumlaut': 778,
+    'degree': 400,
+    'ograve': 500,
+    'Ccaron': 722,
+    'ugrave': 556,
+    'radical': 549,
+    'Dcaron': 722,
+    'rcommaaccent': 444,
+    'Ntilde': 722,
+    'otilde': 500,
+    'Rcommaaccent': 722,
+    'Lcommaaccent': 667,
+    'Atilde': 722,
+    'Aogonek': 722,
+    'Aring': 722,
+    'Otilde': 778,
+    'zdotaccent': 444,
+    'Ecaron': 667,
+    'Iogonek': 389,
+    'kcommaaccent': 556,
+    'minus': 570,
+    'Icircumflex': 389,
+    'ncaron': 556,
+    'tcommaaccent': 333,
+    'logicalnot': 570,
+    'odieresis': 500,
+    'udieresis': 556,
+    'notequal': 549,
+    'gcommaaccent': 500,
+    'eth': 500,
+    'zcaron': 444,
+    'ncommaaccent': 556,
+    'onesuperior': 300,
+    'imacron': 278,
+    'Euro': 500
+  },
+  'Times-BoldItalic': {
+    'space': 250,
+    'exclam': 389,
+    'quotedbl': 555,
+    'numbersign': 500,
+    'dollar': 500,
+    'percent': 833,
+    'ampersand': 778,
+    'quoteright': 333,
+    'parenleft': 333,
+    'parenright': 333,
+    'asterisk': 500,
+    'plus': 570,
+    'comma': 250,
+    'hyphen': 333,
+    'period': 250,
+    'slash': 278,
+    'zero': 500,
+    'one': 500,
+    'two': 500,
+    'three': 500,
+    'four': 500,
+    'five': 500,
+    'six': 500,
+    'seven': 500,
+    'eight': 500,
+    'nine': 500,
+    'colon': 333,
+    'semicolon': 333,
+    'less': 570,
+    'equal': 570,
+    'greater': 570,
+    'question': 500,
+    'at': 832,
+    'A': 667,
+    'B': 667,
+    'C': 667,
+    'D': 722,
+    'E': 667,
+    'F': 667,
+    'G': 722,
+    'H': 778,
+    'I': 389,
+    'J': 500,
+    'K': 667,
+    'L': 611,
+    'M': 889,
+    'N': 722,
+    'O': 722,
+    'P': 611,
+    'Q': 722,
+    'R': 667,
+    'S': 556,
+    'T': 611,
+    'U': 722,
+    'V': 667,
+    'W': 889,
+    'X': 667,
+    'Y': 611,
+    'Z': 611,
+    'bracketleft': 333,
+    'backslash': 278,
+    'bracketright': 333,
+    'asciicircum': 570,
+    'underscore': 500,
+    'quoteleft': 333,
+    'a': 500,
+    'b': 500,
+    'c': 444,
+    'd': 500,
+    'e': 444,
+    'f': 333,
+    'g': 500,
+    'h': 556,
+    'i': 278,
+    'j': 278,
+    'k': 500,
+    'l': 278,
+    'm': 778,
+    'n': 556,
+    'o': 500,
+    'p': 500,
+    'q': 500,
+    'r': 389,
+    's': 389,
+    't': 278,
+    'u': 556,
+    'v': 444,
+    'w': 667,
+    'x': 500,
+    'y': 444,
+    'z': 389,
+    'braceleft': 348,
+    'bar': 220,
+    'braceright': 348,
+    'asciitilde': 570,
+    'exclamdown': 389,
+    'cent': 500,
+    'sterling': 500,
+    'fraction': 167,
+    'yen': 500,
+    'florin': 500,
+    'section': 500,
+    'currency': 500,
+    'quotesingle': 278,
+    'quotedblleft': 500,
+    'guillemotleft': 500,
+    'guilsinglleft': 333,
+    'guilsinglright': 333,
+    'fi': 556,
+    'fl': 556,
+    'endash': 500,
+    'dagger': 500,
+    'daggerdbl': 500,
+    'periodcentered': 250,
+    'paragraph': 500,
+    'bullet': 350,
+    'quotesinglbase': 333,
+    'quotedblbase': 500,
+    'quotedblright': 500,
+    'guillemotright': 500,
+    'ellipsis': 1000,
+    'perthousand': 1000,
+    'questiondown': 500,
+    'grave': 333,
+    'acute': 333,
+    'circumflex': 333,
+    'tilde': 333,
+    'macron': 333,
+    'breve': 333,
+    'dotaccent': 333,
+    'dieresis': 333,
+    'ring': 333,
+    'cedilla': 333,
+    'hungarumlaut': 333,
+    'ogonek': 333,
+    'caron': 333,
+    'emdash': 1000,
+    'AE': 944,
+    'ordfeminine': 266,
+    'Lslash': 611,
+    'Oslash': 722,
+    'OE': 944,
+    'ordmasculine': 300,
+    'ae': 722,
+    'dotlessi': 278,
+    'lslash': 278,
+    'oslash': 500,
+    'oe': 722,
+    'germandbls': 500,
+    'Idieresis': 389,
+    'eacute': 444,
+    'abreve': 500,
+    'uhungarumlaut': 556,
+    'ecaron': 444,
+    'Ydieresis': 611,
+    'divide': 570,
+    'Yacute': 611,
+    'Acircumflex': 667,
+    'aacute': 500,
+    'Ucircumflex': 722,
+    'yacute': 444,
+    'scommaaccent': 389,
+    'ecircumflex': 444,
+    'Uring': 722,
+    'Udieresis': 722,
+    'aogonek': 500,
+    'Uacute': 722,
+    'uogonek': 556,
+    'Edieresis': 667,
+    'Dcroat': 722,
+    'commaaccent': 250,
+    'copyright': 747,
+    'Emacron': 667,
+    'ccaron': 444,
+    'aring': 500,
+    'Ncommaaccent': 722,
+    'lacute': 278,
+    'agrave': 500,
+    'Tcommaaccent': 611,
+    'Cacute': 667,
+    'atilde': 500,
+    'Edotaccent': 667,
+    'scaron': 389,
+    'scedilla': 389,
+    'iacute': 278,
+    'lozenge': 494,
+    'Rcaron': 667,
+    'Gcommaaccent': 722,
+    'ucircumflex': 556,
+    'acircumflex': 500,
+    'Amacron': 667,
+    'rcaron': 389,
+    'ccedilla': 444,
+    'Zdotaccent': 611,
+    'Thorn': 611,
+    'Omacron': 722,
+    'Racute': 667,
+    'Sacute': 556,
+    'dcaron': 608,
+    'Umacron': 722,
+    'uring': 556,
+    'threesuperior': 300,
+    'Ograve': 722,
+    'Agrave': 667,
+    'Abreve': 667,
+    'multiply': 570,
+    'uacute': 556,
+    'Tcaron': 611,
+    'partialdiff': 494,
+    'ydieresis': 444,
+    'Nacute': 722,
+    'icircumflex': 278,
+    'Ecircumflex': 667,
+    'adieresis': 500,
+    'edieresis': 444,
+    'cacute': 444,
+    'nacute': 556,
+    'umacron': 556,
+    'Ncaron': 722,
+    'Iacute': 389,
+    'plusminus': 570,
+    'brokenbar': 220,
+    'registered': 747,
+    'Gbreve': 722,
+    'Idotaccent': 389,
+    'summation': 600,
+    'Egrave': 667,
+    'racute': 389,
+    'omacron': 500,
+    'Zacute': 611,
+    'Zcaron': 611,
+    'greaterequal': 549,
+    'Eth': 722,
+    'Ccedilla': 667,
+    'lcommaaccent': 278,
+    'tcaron': 366,
+    'eogonek': 444,
+    'Uogonek': 722,
+    'Aacute': 667,
+    'Adieresis': 667,
+    'egrave': 444,
+    'zacute': 389,
+    'iogonek': 278,
+    'Oacute': 722,
+    'oacute': 500,
+    'amacron': 500,
+    'sacute': 389,
+    'idieresis': 278,
+    'Ocircumflex': 722,
+    'Ugrave': 722,
+    'Delta': 612,
+    'thorn': 500,
+    'twosuperior': 300,
+    'Odieresis': 722,
+    'mu': 576,
+    'igrave': 278,
+    'ohungarumlaut': 500,
+    'Eogonek': 667,
+    'dcroat': 500,
+    'threequarters': 750,
+    'Scedilla': 556,
+    'lcaron': 382,
+    'Kcommaaccent': 667,
+    'Lacute': 611,
+    'trademark': 1000,
+    'edotaccent': 444,
+    'Igrave': 389,
+    'Imacron': 389,
+    'Lcaron': 611,
+    'onehalf': 750,
+    'lessequal': 549,
+    'ocircumflex': 500,
+    'ntilde': 556,
+    'Uhungarumlaut': 722,
+    'Eacute': 667,
+    'emacron': 444,
+    'gbreve': 500,
+    'onequarter': 750,
+    'Scaron': 556,
+    'Scommaaccent': 556,
+    'Ohungarumlaut': 722,
+    'degree': 400,
+    'ograve': 500,
+    'Ccaron': 667,
+    'ugrave': 556,
+    'radical': 549,
+    'Dcaron': 722,
+    'rcommaaccent': 389,
+    'Ntilde': 722,
+    'otilde': 500,
+    'Rcommaaccent': 667,
+    'Lcommaaccent': 611,
+    'Atilde': 667,
+    'Aogonek': 667,
+    'Aring': 667,
+    'Otilde': 722,
+    'zdotaccent': 389,
+    'Ecaron': 667,
+    'Iogonek': 389,
+    'kcommaaccent': 500,
+    'minus': 606,
+    'Icircumflex': 389,
+    'ncaron': 556,
+    'tcommaaccent': 278,
+    'logicalnot': 606,
+    'odieresis': 500,
+    'udieresis': 556,
+    'notequal': 549,
+    'gcommaaccent': 500,
+    'eth': 500,
+    'zcaron': 389,
+    'ncommaaccent': 556,
+    'onesuperior': 300,
+    'imacron': 278,
+    'Euro': 500
+  },
+  'Times-Italic': {
+    'space': 250,
+    'exclam': 333,
+    'quotedbl': 420,
+    'numbersign': 500,
+    'dollar': 500,
+    'percent': 833,
+    'ampersand': 778,
+    'quoteright': 333,
+    'parenleft': 333,
+    'parenright': 333,
+    'asterisk': 500,
+    'plus': 675,
+    'comma': 250,
+    'hyphen': 333,
+    'period': 250,
+    'slash': 278,
+    'zero': 500,
+    'one': 500,
+    'two': 500,
+    'three': 500,
+    'four': 500,
+    'five': 500,
+    'six': 500,
+    'seven': 500,
+    'eight': 500,
+    'nine': 500,
+    'colon': 333,
+    'semicolon': 333,
+    'less': 675,
+    'equal': 675,
+    'greater': 675,
+    'question': 500,
+    'at': 920,
+    'A': 611,
+    'B': 611,
+    'C': 667,
+    'D': 722,
+    'E': 611,
+    'F': 611,
+    'G': 722,
+    'H': 722,
+    'I': 333,
+    'J': 444,
+    'K': 667,
+    'L': 556,
+    'M': 833,
+    'N': 667,
+    'O': 722,
+    'P': 611,
+    'Q': 722,
+    'R': 611,
+    'S': 500,
+    'T': 556,
+    'U': 722,
+    'V': 611,
+    'W': 833,
+    'X': 611,
+    'Y': 556,
+    'Z': 556,
+    'bracketleft': 389,
+    'backslash': 278,
+    'bracketright': 389,
+    'asciicircum': 422,
+    'underscore': 500,
+    'quoteleft': 333,
+    'a': 500,
+    'b': 500,
+    'c': 444,
+    'd': 500,
+    'e': 444,
+    'f': 278,
+    'g': 500,
+    'h': 500,
+    'i': 278,
+    'j': 278,
+    'k': 444,
+    'l': 278,
+    'm': 722,
+    'n': 500,
+    'o': 500,
+    'p': 500,
+    'q': 500,
+    'r': 389,
+    's': 389,
+    't': 278,
+    'u': 500,
+    'v': 444,
+    'w': 667,
+    'x': 444,
+    'y': 444,
+    'z': 389,
+    'braceleft': 400,
+    'bar': 275,
+    'braceright': 400,
+    'asciitilde': 541,
+    'exclamdown': 389,
+    'cent': 500,
+    'sterling': 500,
+    'fraction': 167,
+    'yen': 500,
+    'florin': 500,
+    'section': 500,
+    'currency': 500,
+    'quotesingle': 214,
+    'quotedblleft': 556,
+    'guillemotleft': 500,
+    'guilsinglleft': 333,
+    'guilsinglright': 333,
+    'fi': 500,
+    'fl': 500,
+    'endash': 500,
+    'dagger': 500,
+    'daggerdbl': 500,
+    'periodcentered': 250,
+    'paragraph': 523,
+    'bullet': 350,
+    'quotesinglbase': 333,
+    'quotedblbase': 556,
+    'quotedblright': 556,
+    'guillemotright': 500,
+    'ellipsis': 889,
+    'perthousand': 1000,
+    'questiondown': 500,
+    'grave': 333,
+    'acute': 333,
+    'circumflex': 333,
+    'tilde': 333,
+    'macron': 333,
+    'breve': 333,
+    'dotaccent': 333,
+    'dieresis': 333,
+    'ring': 333,
+    'cedilla': 333,
+    'hungarumlaut': 333,
+    'ogonek': 333,
+    'caron': 333,
+    'emdash': 889,
+    'AE': 889,
+    'ordfeminine': 276,
+    'Lslash': 556,
+    'Oslash': 722,
+    'OE': 944,
+    'ordmasculine': 310,
+    'ae': 667,
+    'dotlessi': 278,
+    'lslash': 278,
+    'oslash': 500,
+    'oe': 667,
+    'germandbls': 500,
+    'Idieresis': 333,
+    'eacute': 444,
+    'abreve': 500,
+    'uhungarumlaut': 500,
+    'ecaron': 444,
+    'Ydieresis': 556,
+    'divide': 675,
+    'Yacute': 556,
+    'Acircumflex': 611,
+    'aacute': 500,
+    'Ucircumflex': 722,
+    'yacute': 444,
+    'scommaaccent': 389,
+    'ecircumflex': 444,
+    'Uring': 722,
+    'Udieresis': 722,
+    'aogonek': 500,
+    'Uacute': 722,
+    'uogonek': 500,
+    'Edieresis': 611,
+    'Dcroat': 722,
+    'commaaccent': 250,
+    'copyright': 760,
+    'Emacron': 611,
+    'ccaron': 444,
+    'aring': 500,
+    'Ncommaaccent': 667,
+    'lacute': 278,
+    'agrave': 500,
+    'Tcommaaccent': 556,
+    'Cacute': 667,
+    'atilde': 500,
+    'Edotaccent': 611,
+    'scaron': 389,
+    'scedilla': 389,
+    'iacute': 278,
+    'lozenge': 471,
+    'Rcaron': 611,
+    'Gcommaaccent': 722,
+    'ucircumflex': 500,
+    'acircumflex': 500,
+    'Amacron': 611,
+    'rcaron': 389,
+    'ccedilla': 444,
+    'Zdotaccent': 556,
+    'Thorn': 611,
+    'Omacron': 722,
+    'Racute': 611,
+    'Sacute': 500,
+    'dcaron': 544,
+    'Umacron': 722,
+    'uring': 500,
+    'threesuperior': 300,
+    'Ograve': 722,
+    'Agrave': 611,
+    'Abreve': 611,
+    'multiply': 675,
+    'uacute': 500,
+    'Tcaron': 556,
+    'partialdiff': 476,
+    'ydieresis': 444,
+    'Nacute': 667,
+    'icircumflex': 278,
+    'Ecircumflex': 611,
+    'adieresis': 500,
+    'edieresis': 444,
+    'cacute': 444,
+    'nacute': 500,
+    'umacron': 500,
+    'Ncaron': 667,
+    'Iacute': 333,
+    'plusminus': 675,
+    'brokenbar': 275,
+    'registered': 760,
+    'Gbreve': 722,
+    'Idotaccent': 333,
+    'summation': 600,
+    'Egrave': 611,
+    'racute': 389,
+    'omacron': 500,
+    'Zacute': 556,
+    'Zcaron': 556,
+    'greaterequal': 549,
+    'Eth': 722,
+    'Ccedilla': 667,
+    'lcommaaccent': 278,
+    'tcaron': 300,
+    'eogonek': 444,
+    'Uogonek': 722,
+    'Aacute': 611,
+    'Adieresis': 611,
+    'egrave': 444,
+    'zacute': 389,
+    'iogonek': 278,
+    'Oacute': 722,
+    'oacute': 500,
+    'amacron': 500,
+    'sacute': 389,
+    'idieresis': 278,
+    'Ocircumflex': 722,
+    'Ugrave': 722,
+    'Delta': 612,
+    'thorn': 500,
+    'twosuperior': 300,
+    'Odieresis': 722,
+    'mu': 500,
+    'igrave': 278,
+    'ohungarumlaut': 500,
+    'Eogonek': 611,
+    'dcroat': 500,
+    'threequarters': 750,
+    'Scedilla': 500,
+    'lcaron': 300,
+    'Kcommaaccent': 667,
+    'Lacute': 556,
+    'trademark': 980,
+    'edotaccent': 444,
+    'Igrave': 333,
+    'Imacron': 333,
+    'Lcaron': 611,
+    'onehalf': 750,
+    'lessequal': 549,
+    'ocircumflex': 500,
+    'ntilde': 500,
+    'Uhungarumlaut': 722,
+    'Eacute': 611,
+    'emacron': 444,
+    'gbreve': 500,
+    'onequarter': 750,
+    'Scaron': 500,
+    'Scommaaccent': 500,
+    'Ohungarumlaut': 722,
+    'degree': 400,
+    'ograve': 500,
+    'Ccaron': 667,
+    'ugrave': 500,
+    'radical': 453,
+    'Dcaron': 722,
+    'rcommaaccent': 389,
+    'Ntilde': 667,
+    'otilde': 500,
+    'Rcommaaccent': 611,
+    'Lcommaaccent': 556,
+    'Atilde': 611,
+    'Aogonek': 611,
+    'Aring': 611,
+    'Otilde': 722,
+    'zdotaccent': 389,
+    'Ecaron': 611,
+    'Iogonek': 333,
+    'kcommaaccent': 444,
+    'minus': 675,
+    'Icircumflex': 333,
+    'ncaron': 500,
+    'tcommaaccent': 278,
+    'logicalnot': 675,
+    'odieresis': 500,
+    'udieresis': 500,
+    'notequal': 549,
+    'gcommaaccent': 500,
+    'eth': 500,
+    'zcaron': 389,
+    'ncommaaccent': 500,
+    'onesuperior': 300,
+    'imacron': 278,
+    'Euro': 500
+  },
+  'ZapfDingbats': {
+    'space': 278,
+    'a1': 974,
+    'a2': 961,
+    'a202': 974,
+    'a3': 980,
+    'a4': 719,
+    'a5': 789,
+    'a119': 790,
+    'a118': 791,
+    'a117': 690,
+    'a11': 960,
+    'a12': 939,
+    'a13': 549,
+    'a14': 855,
+    'a15': 911,
+    'a16': 933,
+    'a105': 911,
+    'a17': 945,
+    'a18': 974,
+    'a19': 755,
+    'a20': 846,
+    'a21': 762,
+    'a22': 761,
+    'a23': 571,
+    'a24': 677,
+    'a25': 763,
+    'a26': 760,
+    'a27': 759,
+    'a28': 754,
+    'a6': 494,
+    'a7': 552,
+    'a8': 537,
+    'a9': 577,
+    'a10': 692,
+    'a29': 786,
+    'a30': 788,
+    'a31': 788,
+    'a32': 790,
+    'a33': 793,
+    'a34': 794,
+    'a35': 816,
+    'a36': 823,
+    'a37': 789,
+    'a38': 841,
+    'a39': 823,
+    'a40': 833,
+    'a41': 816,
+    'a42': 831,
+    'a43': 923,
+    'a44': 744,
+    'a45': 723,
+    'a46': 749,
+    'a47': 790,
+    'a48': 792,
+    'a49': 695,
+    'a50': 776,
+    'a51': 768,
+    'a52': 792,
+    'a53': 759,
+    'a54': 707,
+    'a55': 708,
+    'a56': 682,
+    'a57': 701,
+    'a58': 826,
+    'a59': 815,
+    'a60': 789,
+    'a61': 789,
+    'a62': 707,
+    'a63': 687,
+    'a64': 696,
+    'a65': 689,
+    'a66': 786,
+    'a67': 787,
+    'a68': 713,
+    'a69': 791,
+    'a70': 785,
+    'a71': 791,
+    'a72': 873,
+    'a73': 761,
+    'a74': 762,
+    'a203': 762,
+    'a75': 759,
+    'a204': 759,
+    'a76': 892,
+    'a77': 892,
+    'a78': 788,
+    'a79': 784,
+    'a81': 438,
+    'a82': 138,
+    'a83': 277,
+    'a84': 415,
+    'a97': 392,
+    'a98': 392,
+    'a99': 668,
+    'a100': 668,
+    'a89': 390,
+    'a90': 390,
+    'a93': 317,
+    'a94': 317,
+    'a91': 276,
+    'a92': 276,
+    'a205': 509,
+    'a85': 509,
+    'a206': 410,
+    'a86': 410,
+    'a87': 234,
+    'a88': 234,
+    'a95': 334,
+    'a96': 334,
+    'a101': 732,
+    'a102': 544,
+    'a103': 544,
+    'a104': 910,
+    'a106': 667,
+    'a107': 760,
+    'a108': 760,
+    'a112': 776,
+    'a111': 595,
+    'a110': 694,
+    'a109': 626,
+    'a120': 788,
+    'a121': 788,
+    'a122': 788,
+    'a123': 788,
+    'a124': 788,
+    'a125': 788,
+    'a126': 788,
+    'a127': 788,
+    'a128': 788,
+    'a129': 788,
+    'a130': 788,
+    'a131': 788,
+    'a132': 788,
+    'a133': 788,
+    'a134': 788,
+    'a135': 788,
+    'a136': 788,
+    'a137': 788,
+    'a138': 788,
+    'a139': 788,
+    'a140': 788,
+    'a141': 788,
+    'a142': 788,
+    'a143': 788,
+    'a144': 788,
+    'a145': 788,
+    'a146': 788,
+    'a147': 788,
+    'a148': 788,
+    'a149': 788,
+    'a150': 788,
+    'a151': 788,
+    'a152': 788,
+    'a153': 788,
+    'a154': 788,
+    'a155': 788,
+    'a156': 788,
+    'a157': 788,
+    'a158': 788,
+    'a159': 788,
+    'a160': 894,
+    'a161': 838,
+    'a163': 1016,
+    'a164': 458,
+    'a196': 748,
+    'a165': 924,
+    'a192': 748,
+    'a166': 918,
+    'a167': 927,
+    'a168': 928,
+    'a169': 928,
+    'a170': 834,
+    'a171': 873,
+    'a172': 828,
+    'a173': 924,
+    'a162': 924,
+    'a174': 917,
+    'a175': 930,
+    'a176': 931,
+    'a177': 463,
+    'a178': 883,
+    'a179': 836,
+    'a193': 836,
+    'a180': 867,
+    'a199': 867,
+    'a181': 696,
+    'a200': 696,
+    'a182': 874,
+    'a201': 874,
+    'a183': 760,
+    'a184': 946,
+    'a197': 771,
+    'a185': 865,
+    'a194': 771,
+    'a198': 888,
+    'a186': 967,
+    'a195': 888,
+    'a187': 831,
+    'a188': 873,
+    'a189': 927,
+    'a190': 970,
+    'a191': 918
+  }
+};
+
+
+
+var EOF = {};
+
+function isEOF(v) {
+  return v == EOF;
+}
+
+var Parser = (function ParserClosure() {
+  function Parser(lexer, allowStreams, xref) {
+    this.lexer = lexer;
+    this.allowStreams = allowStreams;
+    this.xref = xref;
+    this.refill();
+  }
+
+  Parser.prototype = {
+    saveState: function Parser_saveState() {
+      this.state = {
+        buf1: this.buf1,
+        buf2: this.buf2,
+        streamPos: this.lexer.stream.pos
+      };
+    },
+
+    restoreState: function Parser_restoreState() {
+      var state = this.state;
+      this.buf1 = state.buf1;
+      this.buf2 = state.buf2;
+      this.lexer.stream.pos = state.streamPos;
+    },
+
+    refill: function Parser_refill() {
+      this.buf1 = this.lexer.getObj();
+      this.buf2 = this.lexer.getObj();
+    },
+    shift: function Parser_shift() {
+      if (isCmd(this.buf2, 'ID')) {
+        this.buf1 = this.buf2;
+        this.buf2 = null;
+      } else {
+        this.buf1 = this.buf2;
+        this.buf2 = this.lexer.getObj();
+      }
+    },
+    getObj: function Parser_getObj(cipherTransform) {
+      if (isCmd(this.buf1, 'BI')) { // inline image
+        this.shift();
+        return this.makeInlineImage(cipherTransform);
+      }
+      if (isCmd(this.buf1, '[')) { // array
+        this.shift();
+        var array = [];
+        while (!isCmd(this.buf1, ']') && !isEOF(this.buf1))
+          array.push(this.getObj(cipherTransform));
+        if (isEOF(this.buf1))
+          error('End of file inside array');
+        this.shift();
+        return array;
+      }
+      if (isCmd(this.buf1, '<<')) { // dictionary or stream
+        this.shift();
+        var dict = new Dict(this.xref);
+        while (!isCmd(this.buf1, '>>') && !isEOF(this.buf1)) {
+          if (!isName(this.buf1)) {
+            info('Malformed dictionary, key must be a name object');
+            this.shift();
+            continue;
+          }
+
+          var key = this.buf1.name;
+          this.shift();
+          if (isEOF(this.buf1))
+            break;
+          dict.set(key, this.getObj(cipherTransform));
+        }
+        if (isEOF(this.buf1))
+          error('End of file inside dictionary');
+
+        // stream objects are not allowed inside content streams or
+        // object streams
+        if (isCmd(this.buf2, 'stream')) {
+          return this.allowStreams ?
+            this.makeStream(dict, cipherTransform) : dict;
+        }
+        this.shift();
+        return dict;
+      }
+      if (isInt(this.buf1)) { // indirect reference or integer
+        var num = this.buf1;
+        this.shift();
+        if (isInt(this.buf1) && isCmd(this.buf2, 'R')) {
+          var ref = new Ref(num, this.buf1);
+          this.shift();
+          this.shift();
+          return ref;
+        }
+        return num;
+      }
+      if (isString(this.buf1)) { // string
+        var str = this.buf1;
+        this.shift();
+        if (cipherTransform)
+          str = cipherTransform.decryptString(str);
+        return str;
+      }
+
+      // simple object
+      var obj = this.buf1;
+      this.shift();
+      return obj;
+    },
+    makeInlineImage: function Parser_makeInlineImage(cipherTransform) {
+      var lexer = this.lexer;
+      var stream = lexer.stream;
+
+      // parse dictionary
+      var dict = new Dict();
+      while (!isCmd(this.buf1, 'ID') && !isEOF(this.buf1)) {
+        if (!isName(this.buf1))
+          error('Dictionary key must be a name object');
+
+        var key = this.buf1.name;
+        this.shift();
+        if (isEOF(this.buf1))
+          break;
+        dict.set(key, this.getObj(cipherTransform));
+      }
+
+      // parse image stream
+      var startPos = stream.pos;
+
+      // searching for the /EI\s/
+      var state = 0, ch, i, ii;
+      while (state != 4 && (ch = stream.getByte()) !== -1) {
+        switch (ch | 0) {
+          case 0x20:
+          case 0x0D:
+          case 0x0A:
+            // let's check next five bytes to be ASCII... just be sure
+            var followingBytes = stream.peekBytes(5);
+            for (i = 0, ii = followingBytes.length; i < ii; i++) {
+              ch = followingBytes[i];
+              if (ch !== 0x0A && ch !== 0x0D && (ch < 0x20 || ch > 0x7F)) {
+                // not a LF, CR, SPACE or any visible ASCII character
+                state = 0;
+                break; // some binary stuff found, resetting the state
+              }
+            }
+            state = state === 3 ? 4 : 0;
+            break;
+          case 0x45:
+            state = 2;
+            break;
+          case 0x49:
+            state = state === 2 ? 3 : 0;
+            break;
+          default:
+            state = 0;
+            break;
+        }
+      }
+
+      var length = (stream.pos - 4) - startPos;
+      var imageStream = stream.makeSubStream(startPos, length, dict);
+      if (cipherTransform)
+        imageStream = cipherTransform.createStream(imageStream);
+      imageStream = this.filter(imageStream, dict, length);
+      imageStream.dict = dict;
+
+      this.buf2 = Cmd.get('EI');
+      this.shift();
+
+      return imageStream;
+    },
+    fetchIfRef: function Parser_fetchIfRef(obj) {
+      // not relying on the xref.fetchIfRef -- xref might not be set
+      return isRef(obj) ? this.xref.fetch(obj) : obj;
+    },
+    makeStream: function Parser_makeStream(dict, cipherTransform) {
+      var lexer = this.lexer;
+      var stream = lexer.stream;
+
+      // get stream start position
+      lexer.skipToNextLine();
+      var pos = stream.pos - 1;
+
+      // get length
+      var length = this.fetchIfRef(dict.get('Length'));
+      if (!isInt(length)) {
+        info('Bad ' + length + ' attribute in stream');
+        length = 0;
+      }
+
+      // skip over the stream data
+      stream.pos = pos + length;
+      lexer.nextChar();
+
+      this.shift(); // '>>'
+      this.shift(); // 'stream'
+      if (!isCmd(this.buf1, 'endstream')) {
+        // bad stream length, scanning for endstream
+        stream.pos = pos;
+        var SCAN_BLOCK_SIZE = 2048;
+        var ENDSTREAM_SIGNATURE_LENGTH = 9;
+        var ENDSTREAM_SIGNATURE = [0x65, 0x6E, 0x64, 0x73, 0x74, 0x72, 0x65,
+                                   0x61, 0x6D];
+        var skipped = 0, found = false;
+        while (stream.pos < stream.end) {
+          var scanBytes = stream.peekBytes(SCAN_BLOCK_SIZE);
+          var scanLength = scanBytes.length - ENDSTREAM_SIGNATURE_LENGTH;
+          var found = false, i, ii, j;
+          for (i = 0, j = 0; i < scanLength; i++) {
+            var b = scanBytes[i];
+            if (b !== ENDSTREAM_SIGNATURE[j]) {
+              i -= j;
+              j = 0;
+            } else {
+              j++;
+              if (j >= ENDSTREAM_SIGNATURE_LENGTH) {
+                found = true;
+                break;
+              }
+            }
+          }
+          if (found) {
+            skipped += i - ENDSTREAM_SIGNATURE_LENGTH;
+            stream.pos += i - ENDSTREAM_SIGNATURE_LENGTH;
+            break;
+          }
+          skipped += scanLength;
+          stream.pos += scanLength;
+        }
+        if (!found) {
+          error('Missing endstream');
+        }
+        length = skipped;
+
+        lexer.nextChar();
+        this.shift();
+        this.shift();
+      }
+      this.shift(); // 'endstream'
+
+      stream = stream.makeSubStream(pos, length, dict);
+      if (cipherTransform)
+        stream = cipherTransform.createStream(stream);
+      stream = this.filter(stream, dict, length);
+      stream.dict = dict;
+      return stream;
+    },
+    filter: function Parser_filter(stream, dict, length) {
+      var filter = this.fetchIfRef(dict.get('Filter', 'F'));
+      var params = this.fetchIfRef(dict.get('DecodeParms', 'DP'));
+      if (isName(filter))
+        return this.makeFilter(stream, filter.name, length, params);
+      if (isArray(filter)) {
+        var filterArray = filter;
+        var paramsArray = params;
+        for (var i = 0, ii = filterArray.length; i < ii; ++i) {
+          filter = filterArray[i];
+          if (!isName(filter))
+            error('Bad filter name: ' + filter);
+
+          params = null;
+          if (isArray(paramsArray) && (i in paramsArray))
+            params = paramsArray[i];
+          stream = this.makeFilter(stream, filter.name, length, params);
+          // after the first stream the length variable is invalid
+          length = null;
+        }
+      }
+      return stream;
+    },
+    makeFilter: function Parser_makeFilter(stream, name, length, params) {
+      if (stream.dict.get('Length') === 0) {
+        return new NullStream(stream);
+      }
+      if (name == 'FlateDecode' || name == 'Fl') {
+        if (params) {
+          return new PredictorStream(new FlateStream(stream), params);
+        }
+        return new FlateStream(stream);
+      }
+      if (name == 'LZWDecode' || name == 'LZW') {
+        var earlyChange = 1;
+        if (params) {
+          if (params.has('EarlyChange'))
+            earlyChange = params.get('EarlyChange');
+          return new PredictorStream(
+            new LZWStream(stream, earlyChange), params);
+        }
+        return new LZWStream(stream, earlyChange);
+      }
+      if (name == 'DCTDecode' || name == 'DCT') {
+        var bytes = stream.getBytes(length);
+        return new JpegStream(bytes, stream.dict, this.xref);
+      }
+      if (name == 'JPXDecode' || name == 'JPX') {
+        var bytes = stream.getBytes(length);
+        return new JpxStream(bytes, stream.dict);
+      }
+      if (name == 'ASCII85Decode' || name == 'A85') {
+        return new Ascii85Stream(stream);
+      }
+      if (name == 'ASCIIHexDecode' || name == 'AHx') {
+        return new AsciiHexStream(stream);
+      }
+      if (name == 'CCITTFaxDecode' || name == 'CCF') {
+        return new CCITTFaxStream(stream, params);
+      }
+      if (name == 'RunLengthDecode' || name == 'RL') {
+        return new RunLengthStream(stream);
+      }
+      if (name == 'JBIG2Decode') {
+        var bytes = stream.getBytes(length);
+        return new Jbig2Stream(bytes, stream.dict);
+      }
+      warn('filter "' + name + '" not supported yet');
+      return stream;
+    }
+  };
+
+  return Parser;
+})();
+
+var Lexer = (function LexerClosure() {
+  function Lexer(stream, knownCommands) {
+    this.stream = stream;
+    this.nextChar();
+
+    // The PDFs might have "glued" commands with other commands, operands or
+    // literals, e.g. "q1". The knownCommands is a dictionary of the valid
+    // commands and their prefixes. The prefixes are built the following way:
+    // if there a command that is a prefix of the other valid command or
+    // literal (e.g. 'f' and 'false') the following prefixes must be included,
+    // 'fa', 'fal', 'fals'. The prefixes are not needed, if the command has no
+    // other commands or literals as a prefix. The knowCommands is optional.
+    this.knownCommands = knownCommands;
+  }
+
+  Lexer.isSpace = function Lexer_isSpace(ch) {
+    // space is one of the following characters: SPACE, TAB, CR, or LF
+    return ch === 0x20 || ch === 0x09 || ch === 0x0D || ch === 0x0A;
+  };
+
+  // A '1' in this array means the character is white space.  A '1' or
+  // '2' means the character ends a name or command.
+  var specialChars = [
+    1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0,   // 0x
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   // 1x
+    1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2,   // 2x
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0,   // 3x
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   // 4x
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0,   // 5x
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   // 6x
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0,   // 7x
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   // 8x
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   // 9x
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   // ax
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   // bx
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   // cx
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   // dx
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,   // ex
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0    // fx
+  ];
+
+  function toHexDigit(ch) {
+    if (ch >= 0x30 && ch <= 0x39) { // '0'-'9'
+      return ch & 0x0F;
+    }
+    if ((ch >= 0x41 && ch <= 0x46) || (ch >= 0x61 && ch <= 0x66)) {
+      // 'A'-'F', 'a'-'f'
+      return (ch & 0x0F) + 9;
+    }
+    return -1;
+  }
+
+  Lexer.prototype = {
+    nextChar: function Lexer_nextChar() {
+      return (this.currentChar = this.stream.getByte());
+    },
+    getNumber: function Lexer_getNumber() {
+      var floating = false;
+      var ch = this.currentChar;
+      var str = String.fromCharCode(ch);
+      while ((ch = this.nextChar()) >= 0) {
+        if (ch === 0x2E && !floating) { // '.'
+          str += '.';
+          floating = true;
+        } else if (ch === 0x2D) { // '-'
+          // ignore minus signs in the middle of numbers to match
+          // Adobe's behavior
+          warn('Badly formated number');
+        } else if (ch >= 0x30 && ch <= 0x39) { // '0'-'9'
+          str += String.fromCharCode(ch);
+        } else if (ch === 0x45 || ch === 0x65) { // 'E', 'e'
+          floating = true;
+        } else {
+          // the last character doesn't belong to us
+          break;
+        }
+      }
+      var value = parseFloat(str);
+      if (isNaN(value))
+        error('Invalid floating point number: ' + value);
+      return value;
+    },
+    getString: function Lexer_getString() {
+      var numParen = 1;
+      var done = false;
+      var str = '';
+
+      var ch = this.nextChar();
+      while (true) {
+        var charBuffered = false;
+        switch (ch | 0) {
+          case -1:
+            warn('Unterminated string');
+            done = true;
+            break;
+          case 0x28: // '('
+            ++numParen;
+            str += '(';
+            break;
+          case 0x29: // ')'
+            if (--numParen === 0) {
+              this.nextChar(); // consume strings ')'
+              done = true;
+            } else {
+              str += ')';
+            }
+            break;
+          case 0x5C: // '\\'
+            ch = this.nextChar();
+            switch (ch) {
+              case -1:
+                warn('Unterminated string');
+                done = true;
+                break;
+              case 0x6E: // 'n'
+                str += '\n';
+                break;
+              case 0x72: // 'r'
+                str += '\r';
+                break;
+              case 0x74: // 't'
+                str += '\t';
+                break;
+              case 0x62: // 'b'
+                str += '\b';
+                break;
+              case 0x66: // 'f'
+                str += '\f';
+                break;
+              case 0x5C: // '\'
+              case 0x28: // '('
+              case 0x29: // ')'
+                str += String.fromCharCode(ch);
+                break;
+              case 0x30: case 0x31: case 0x32: case 0x33: // '0'-'3'
+              case 0x34: case 0x35: case 0x36: case 0x37: // '4'-'7'
+                var x = ch & 0x0F;
+                ch = this.nextChar();
+                charBuffered = true;
+                if (ch >= 0x30 && ch <= 0x37) { // '0'-'7'
+                  x = (x << 3) + (ch & 0x0F);
+                  ch = this.nextChar();
+                  if (ch >= 0x30 && ch <= 0x37) {  // '0'-'7'
+                    charBuffered = false;
+                    x = (x << 3) + (ch & 0x0F);
+                  }
+                }
+
+                str += String.fromCharCode(x);
+                break;
+              case 0x0A: case 0x0D: // LF, CR
+                break;
+              default:
+                str += String.fromCharCode(ch);
+                break;
+            }
+            break;
+          default:
+            str += String.fromCharCode(ch);
+            break;
+        }
+        if (done) {
+          break;
+        }
+        if (!charBuffered) {
+          ch = this.nextChar();
+        }
+      }
+      return str;
+    },
+    getName: function Lexer_getName() {
+      var str = '', ch;
+      while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {
+        if (ch === 0x23) { // '#'
+          ch = this.nextChar();
+          var x = toHexDigit(ch);
+          if (x != -1) {
+            var x2 = toHexDigit(this.nextChar());
+            if (x2 == -1)
+              error('Illegal digit in hex char in name: ' + x2);
+            str += String.fromCharCode((x << 4) | x2);
+          } else {
+            str += '#';
+            str += String.fromCharCode(ch);
+          }
+        } else {
+          str += String.fromCharCode(ch);
+        }
+      }
+      if (str.length > 128) {
+        error('Warning: name token is longer than allowed by the spec: ' +
+              str.length);
+      }
+      return new Name(str);
+    },
+    getHexString: function Lexer_getHexString() {
+      var str = '';
+      var ch = this.currentChar;
+      var isFirstHex = true;
+      var firstDigit;
+      var secondDigit;
+      while (true) {
+        if (ch < 0) {
+          warn('Unterminated hex string');
+          break;
+        } else if (ch === 0x3E) { // '>'
+          this.nextChar();
+          break;
+        } else if (specialChars[ch] === 1) {
+          ch = this.nextChar();
+          continue;
+        } else {
+          if (isFirstHex) {
+            firstDigit = toHexDigit(ch);
+            if (firstDigit === -1) {
+              warn('Ignoring invalid character "' + ch + '" in hex string');
+              ch = this.nextChar();
+              continue;
+            }
+          } else {
+            secondDigit = toHexDigit(ch);
+            if (secondDigit === -1) {
+              warn('Ignoring invalid character "' + ch + '" in hex string');
+              ch = this.nextChar();
+              continue;
+            }
+            str += String.fromCharCode((firstDigit << 4) | secondDigit);
+          }
+          isFirstHex = !isFirstHex;
+          ch = this.nextChar();
+        }
+      }
+      return str;
+    },
+    getObj: function Lexer_getObj() {
+      // skip whitespace and comments
+      var comment = false;
+      var ch = this.currentChar;
+      while (true) {
+        if (ch < 0) {
+          return EOF;
+        }
+        if (comment) {
+          if (ch === 0x0A || ch == 0x0D) // LF, CR
+            comment = false;
+        } else if (ch === 0x25) { // '%'
+          comment = true;
+        } else if (specialChars[ch] !== 1) {
+          break;
+        }
+        ch = this.nextChar();
+      }
+
+      // start reading token
+      switch (ch | 0) {
+        case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: // '0'-'4'
+        case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: // '5'-'9'
+        case 0x2B: case 0x2D: case 0x2E: // '+', '-', '.'
+          return this.getNumber();
+        case 0x28: // '('
+          return this.getString();
+        case 0x2F: // '/'
+          return this.getName();
+        // array punctuation
+        case 0x5B: // '['
+          this.nextChar();
+          return Cmd.get('[');
+        case 0x5D: // ']'
+          this.nextChar();
+          return Cmd.get(']');
+        // hex string or dict punctuation
+        case 0x3C: // '<'
+          ch = this.nextChar();
+          if (ch === 0x3C) {
+            // dict punctuation
+            this.nextChar();
+            return Cmd.get('<<');
+          }
+          return this.getHexString();
+        // dict punctuation
+        case 0x3E: // '>'
+          ch = this.nextChar();
+          if (ch === 0x3E) {
+            this.nextChar();
+            return Cmd.get('>>');
+          }
+          return Cmd.get('>');
+        case 0x7B: // '{'
+          this.nextChar();
+          return Cmd.get('{');
+        case 0x7D: // '}'
+          this.nextChar();
+          return Cmd.get('}');
+        case 0x29: // ')'
+          error('Illegal character: ' + ch);
+          break;
+      }
+
+      // command
+      var str = String.fromCharCode(ch);
+      var knownCommands = this.knownCommands;
+      var knownCommandFound = knownCommands && (str in knownCommands);
+      while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {
+        // stop if known command is found and next character does not make
+        // the str a command
+        var possibleCommand = str + String.fromCharCode(ch);
+        if (knownCommandFound && !(possibleCommand in knownCommands)) {
+          break;
+        }
+        if (str.length == 128)
+          error('Command token too long: ' + str.length);
+        str = possibleCommand;
+        knownCommandFound = knownCommands && (str in knownCommands);
+      }
+      if (str == 'true')
+        return true;
+      if (str == 'false')
+        return false;
+      if (str == 'null')
+        return null;
+      return Cmd.get(str);
+    },
+    skipToNextLine: function Lexer_skipToNextLine() {
+      var stream = this.stream;
+      var ch = this.currentChar;
+      while (ch >= 0) {
+        if (ch === 0x0D) { // CR
+          ch = this.nextChar();
+          if (ch === 0x0A) { // LF
+            this.nextChar();
+          }
+          break;
+        } else if (ch === 0x0A) { // LF
+          this.nextChar();
+          break;
+        }
+        ch = this.nextChar();
+      }
+    }
+  };
+
+  return Lexer;
+})();
+
+var Linearization = (function LinearizationClosure() {
+  function Linearization(stream) {
+    this.parser = new Parser(new Lexer(stream), false, null);
+    var obj1 = this.parser.getObj();
+    var obj2 = this.parser.getObj();
+    var obj3 = this.parser.getObj();
+    this.linDict = this.parser.getObj();
+    if (isInt(obj1) && isInt(obj2) && isCmd(obj3, 'obj') &&
+        isDict(this.linDict)) {
+      var obj = this.linDict.get('Linearized');
+      if (!(isNum(obj) && obj > 0))
+        this.linDict = null;
+    }
+  }
+
+  Linearization.prototype = {
+    getInt: function Linearization_getInt(name) {
+      var linDict = this.linDict;
+      var obj;
+      if (isDict(linDict) &&
+          isInt(obj = linDict.get(name)) &&
+          obj > 0) {
+        return obj;
+      }
+      error('"' + name + '" field in linearization table is invalid');
+    },
+    getHint: function Linearization_getHint(index) {
+      var linDict = this.linDict;
+      var obj1, obj2;
+      if (isDict(linDict) &&
+          isArray(obj1 = linDict.get('H')) &&
+          obj1.length >= 2 &&
+          isInt(obj2 = obj1[index]) &&
+          obj2 > 0) {
+        return obj2;
+      }
+      error('Hints table in linearization table is invalid: ' + index);
+    },
+    get length() {
+      if (!isDict(this.linDict))
+        return 0;
+      return this.getInt('L');
+    },
+    get hintsOffset() {
+      return this.getHint(0);
+    },
+    get hintsLength() {
+      return this.getHint(1);
+    },
+    get hintsOffset2() {
+      return this.getHint(2);
+    },
+    get hintsLenth2() {
+      return this.getHint(3);
+    },
+    get objectNumberFirst() {
+      return this.getInt('O');
+    },
+    get endFirst() {
+      return this.getInt('E');
+    },
+    get numPages() {
+      return this.getInt('N');
+    },
+    get mainXRefEntriesOffset() {
+      return this.getInt('T');
+    },
+    get pageFirst() {
+      return this.getInt('P');
+    }
+  };
+
+  return Linearization;
+})();
+
+
+
+var Stream = (function StreamClosure() {
+  function Stream(arrayBuffer, start, length, dict) {
+    this.bytes = arrayBuffer instanceof Uint8Array ? arrayBuffer :
+      new Uint8Array(arrayBuffer);
+    this.start = start || 0;
+    this.pos = this.start;
+    this.end = (start + length) || this.bytes.length;
+    this.dict = dict;
+  }
+
+  // required methods for a stream. if a particular stream does not
+  // implement these, an error should be thrown
+  Stream.prototype = {
+    get length() {
+      return this.end - this.start;
+    },
+    getByte: function Stream_getByte() {
+      if (this.pos >= this.end)
+        return -1;
+      return this.bytes[this.pos++];
+    },
+    // returns subarray of original buffer
+    // should only be read
+    getBytes: function Stream_getBytes(length) {
+      var bytes = this.bytes;
+      var pos = this.pos;
+      var strEnd = this.end;
+
+      if (!length)
+        return bytes.subarray(pos, strEnd);
+
+      var end = pos + length;
+      if (end > strEnd)
+        end = strEnd;
+
+      this.pos = end;
+      return bytes.subarray(pos, end);
+    },
+    peekBytes: function Stream_peekBytes(length) {
+      var bytes = this.getBytes(length);
+      this.pos -= bytes.length;
+      return bytes;
+    },
+    skip: function Stream_skip(n) {
+      if (!n)
+        n = 1;
+      this.pos += n;
+    },
+    reset: function Stream_reset() {
+      this.pos = this.start;
+    },
+    moveStart: function Stream_moveStart() {
+      this.start = this.pos;
+    },
+    makeSubStream: function Stream_makeSubStream(start, length, dict) {
+      return new Stream(this.bytes.buffer, start, length, dict);
+    },
+    isStream: true
+  };
+
+  return Stream;
+})();
+
+var StringStream = (function StringStreamClosure() {
+  function StringStream(str) {
+    var length = str.length;
+    var bytes = new Uint8Array(length);
+    for (var n = 0; n < length; ++n)
+      bytes[n] = str.charCodeAt(n);
+    Stream.call(this, bytes);
+  }
+
+  StringStream.prototype = Stream.prototype;
+
+  return StringStream;
+})();
+
+// super class for the decoding streams
+var DecodeStream = (function DecodeStreamClosure() {
+  function DecodeStream() {
+    this.pos = 0;
+    this.bufferLength = 0;
+    this.eof = false;
+    this.buffer = null;
+  }
+
+  DecodeStream.prototype = {
+    ensureBuffer: function DecodeStream_ensureBuffer(requested) {
+      var buffer = this.buffer;
+      var current = buffer ? buffer.byteLength : 0;
+      if (requested < current)
+        return buffer;
+      var size = 512;
+      while (size < requested)
+        size <<= 1;
+      var buffer2 = new Uint8Array(size);
+      for (var i = 0; i < current; ++i)
+        buffer2[i] = buffer[i];
+      return (this.buffer = buffer2);
+    },
+    getByte: function DecodeStream_getByte() {
+      var pos = this.pos;
+      while (this.bufferLength <= pos) {
+        if (this.eof)
+          return -1;
+        this.readBlock();
+      }
+      return this.buffer[this.pos++];
+    },
+    getBytes: function DecodeStream_getBytes(length) {
+      var end, pos = this.pos;
+
+      if (length) {
+        this.ensureBuffer(pos + length);
+        end = pos + length;
+
+        while (!this.eof && this.bufferLength < end)
+          this.readBlock();
+
+        var bufEnd = this.bufferLength;
+        if (end > bufEnd)
+          end = bufEnd;
+      } else {
+        while (!this.eof)
+          this.readBlock();
+
+        end = this.bufferLength;
+
+        // checking if bufferLength is still 0 then
+        // the buffer has to be initialized
+        if (!end)
+          this.buffer = new Uint8Array(0);
+      }
+
+      this.pos = end;
+      return this.buffer.subarray(pos, end);
+    },
+    peekBytes: function DecodeStream_peekBytes(length) {
+      var bytes = this.getBytes(length);
+      this.pos -= bytes.length;
+      return bytes;
+    },
+    makeSubStream: function DecodeStream_makeSubStream(start, length, dict) {
+      var end = start + length;
+      while (this.bufferLength <= end && !this.eof)
+        this.readBlock();
+      return new Stream(this.buffer, start, length, dict);
+    },
+    skip: function Stream_skip(n) {
+      if (!n)
+        n = 1;
+      this.pos += n;
+    },
+    reset: function DecodeStream_reset() {
+      this.pos = 0;
+    },
+    getBaseStreams: function DecodeStream_getBaseStreams() {
+      if (this.str && this.str.getBaseStreams) {
+        return this.str.getBaseStreams();
+      }
+      return [];
+    }
+  };
+
+  return DecodeStream;
+})();
+
+var FakeStream = (function FakeStreamClosure() {
+  function FakeStream(stream) {
+    this.dict = stream.dict;
+    DecodeStream.call(this);
+  }
+
+  FakeStream.prototype = Object.create(DecodeStream.prototype);
+  FakeStream.prototype.readBlock = function FakeStream_readBlock() {
+    var bufferLength = this.bufferLength;
+    bufferLength += 1024;
+    var buffer = this.ensureBuffer(bufferLength);
+    this.bufferLength = bufferLength;
+  };
+
+  FakeStream.prototype.getBytes = function FakeStream_getBytes(length) {
+    var end, pos = this.pos;
+
+    if (length) {
+      this.ensureBuffer(pos + length);
+      end = pos + length;
+
+      while (!this.eof && this.bufferLength < end)
+        this.readBlock();
+
+      var bufEnd = this.bufferLength;
+      if (end > bufEnd)
+        end = bufEnd;
+    } else {
+      this.eof = true;
+      end = this.bufferLength;
+    }
+
+    this.pos = end;
+    return this.buffer.subarray(pos, end);
+  };
+
+  return FakeStream;
+})();
+
+var StreamsSequenceStream = (function StreamsSequenceStreamClosure() {
+  function StreamsSequenceStream(streams) {
+    this.streams = streams;
+    DecodeStream.call(this);
+  }
+
+  StreamsSequenceStream.prototype = Object.create(DecodeStream.prototype);
+
+  StreamsSequenceStream.prototype.readBlock =
+    function streamSequenceStreamReadBlock() {
+
+    var streams = this.streams;
+    if (streams.length === 0) {
+      this.eof = true;
+      return;
+    }
+    var stream = streams.shift();
+    var chunk = stream.getBytes();
+    var bufferLength = this.bufferLength;
+    var newLength = bufferLength + chunk.length;
+    var buffer = this.ensureBuffer(newLength);
+    buffer.set(chunk, bufferLength);
+    this.bufferLength = newLength;
+  };
+
+  StreamsSequenceStream.prototype.getBaseStreams =
+    function StreamsSequenceStream_getBaseStreams() {
+
+    var baseStreams = [];
+    for (var i = 0, ii = this.streams.length; i < ii; i++) {
+      var stream = this.streams[i];
+      if (stream.getBaseStreams) {
+        Util.concatenateToArray(baseStreams, stream.getBaseStreams());
+      }
+    }
+    return baseStreams;
+  };
+
+  return StreamsSequenceStream;
+})();
+
+var FlateStream = (function FlateStreamClosure() {
+  var codeLenCodeMap = new Uint32Array([
+    16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15
+  ]);
+
+  var lengthDecode = new Uint32Array([
+    0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a,
+    0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f,
+    0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073,
+    0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102
+  ]);
+
+  var distDecode = new Uint32Array([
+    0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d,
+    0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1,
+    0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01,
+    0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001
+  ]);
+
+  var fixedLitCodeTab = [new Uint32Array([
+    0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0,
+    0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0,
+    0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0,
+    0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0,
+    0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8,
+    0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8,
+    0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8,
+    0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8,
+    0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4,
+    0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4,
+    0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4,
+    0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4,
+    0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc,
+    0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec,
+    0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc,
+    0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc,
+    0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2,
+    0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2,
+    0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2,
+    0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2,
+    0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca,
+    0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea,
+    0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da,
+    0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa,
+    0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6,
+    0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6,
+    0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6,
+    0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6,
+    0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce,
+    0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee,
+    0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de,
+    0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe,
+    0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1,
+    0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1,
+    0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1,
+    0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1,
+    0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9,
+    0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9,
+    0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9,
+    0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9,
+    0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5,
+    0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5,
+    0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5,
+    0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5,
+    0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd,
+    0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed,
+    0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd,
+    0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd,
+    0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3,
+    0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3,
+    0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3,
+    0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3,
+    0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb,
+    0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb,
+    0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db,
+    0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb,
+    0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7,
+    0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7,
+    0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7,
+    0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7,
+    0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf,
+    0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef,
+    0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df,
+    0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff
+  ]), 9];
+
+  var fixedDistCodeTab = [new Uint32Array([
+    0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c,
+    0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000,
+    0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d,
+    0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000
+  ]), 5];
+
+  function FlateStream(stream) {
+    var bytes = stream.getBytes();
+    var bytesPos = 0;
+
+    this.dict = stream.dict;
+    var cmf = bytes[bytesPos++];
+    var flg = bytes[bytesPos++];
+    if (cmf == -1 || flg == -1)
+      error('Invalid header in flate stream: ' + cmf + ', ' + flg);
+    if ((cmf & 0x0f) != 0x08)
+      error('Unknown compression method in flate stream: ' + cmf + ', ' + flg);
+    if ((((cmf << 8) + flg) % 31) !== 0)
+      error('Bad FCHECK in flate stream: ' + cmf + ', ' + flg);
+    if (flg & 0x20)
+      error('FDICT bit set in flate stream: ' + cmf + ', ' + flg);
+
+    this.bytes = bytes;
+    this.bytesPos = bytesPos;
+
+    this.codeSize = 0;
+    this.codeBuf = 0;
+
+    DecodeStream.call(this);
+  }
+
+  FlateStream.prototype = Object.create(DecodeStream.prototype);
+
+  FlateStream.prototype.getBits = function FlateStream_getBits(bits) {
+    var codeSize = this.codeSize;
+    var codeBuf = this.codeBuf;
+    var bytes = this.bytes;
+    var bytesPos = this.bytesPos;
+
+    var b;
+    while (codeSize < bits) {
+      if (typeof (b = bytes[bytesPos++]) == 'undefined')
+        error('Bad encoding in flate stream');
+      codeBuf |= b << codeSize;
+      codeSize += 8;
+    }
+    b = codeBuf & ((1 << bits) - 1);
+    this.codeBuf = codeBuf >> bits;
+    this.codeSize = codeSize -= bits;
+    this.bytesPos = bytesPos;
+    return b;
+  };
+
+  FlateStream.prototype.getCode = function FlateStream_getCode(table) {
+    var codes = table[0];
+    var maxLen = table[1];
+    var codeSize = this.codeSize;
+    var codeBuf = this.codeBuf;
+    var bytes = this.bytes;
+    var bytesPos = this.bytesPos;
+
+    while (codeSize < maxLen) {
+      var b;
+      if (typeof (b = bytes[bytesPos++]) == 'undefined')
+        error('Bad encoding in flate stream');
+      codeBuf |= (b << codeSize);
+      codeSize += 8;
+    }
+    var code = codes[codeBuf & ((1 << maxLen) - 1)];
+    var codeLen = code >> 16;
+    var codeVal = code & 0xffff;
+    if (codeSize === 0 || codeSize < codeLen || codeLen === 0)
+      error('Bad encoding in flate stream');
+    this.codeBuf = (codeBuf >> codeLen);
+    this.codeSize = (codeSize - codeLen);
+    this.bytesPos = bytesPos;
+    return codeVal;
+  };
+
+  FlateStream.prototype.generateHuffmanTable =
+    function flateStreamGenerateHuffmanTable(lengths) {
+    var n = lengths.length;
+
+    // find max code length
+    var maxLen = 0;
+    for (var i = 0; i < n; ++i) {
+      if (lengths[i] > maxLen)
+        maxLen = lengths[i];
+    }
+
+    // build the table
+    var size = 1 << maxLen;
+    var codes = new Uint32Array(size);
+    for (var len = 1, code = 0, skip = 2;
+         len <= maxLen;
+         ++len, code <<= 1, skip <<= 1) {
+      for (var val = 0; val < n; ++val) {
+        if (lengths[val] == len) {
+          // bit-reverse the code
+          var code2 = 0;
+          var t = code;
+          for (var i = 0; i < len; ++i) {
+            code2 = (code2 << 1) | (t & 1);
+            t >>= 1;
+          }
+
+          // fill the table entries
+          for (var i = code2; i < size; i += skip)
+            codes[i] = (len << 16) | val;
+
+          ++code;
+        }
+      }
+    }
+
+    return [codes, maxLen];
+  };
+
+  FlateStream.prototype.readBlock = function FlateStream_readBlock() {
+    // read block header
+    var hdr = this.getBits(3);
+    if (hdr & 1)
+      this.eof = true;
+    hdr >>= 1;
+
+    if (hdr === 0) { // uncompressed block
+      var bytes = this.bytes;
+      var bytesPos = this.bytesPos;
+      var b;
+
+      if (typeof (b = bytes[bytesPos++]) == 'undefined')
+        error('Bad block header in flate stream');
+      var blockLen = b;
+      if (typeof (b = bytes[bytesPos++]) == 'undefined')
+        error('Bad block header in flate stream');
+      blockLen |= (b << 8);
+      if (typeof (b = bytes[bytesPos++]) == 'undefined')
+        error('Bad block header in flate stream');
+      var check = b;
+      if (typeof (b = bytes[bytesPos++]) == 'undefined')
+        error('Bad block header in flate stream');
+      check |= (b << 8);
+      if (check != (~blockLen & 0xffff) &&
+          (blockLen !== 0 || check !== 0)) {
+        // Ignoring error for bad "empty" block (see issue 1277)
+        error('Bad uncompressed block length in flate stream');
+      }
+
+      this.codeBuf = 0;
+      this.codeSize = 0;
+
+      var bufferLength = this.bufferLength;
+      var buffer = this.ensureBuffer(bufferLength + blockLen);
+      var end = bufferLength + blockLen;
+      this.bufferLength = end;
+      for (var n = bufferLength; n < end; ++n) {
+        if (typeof (b = bytes[bytesPos++]) == 'undefined') {
+          this.eof = true;
+          break;
+        }
+        buffer[n] = b;
+      }
+      this.bytesPos = bytesPos;
+      return;
+    }
+
+    var litCodeTable;
+    var distCodeTable;
+    if (hdr == 1) { // compressed block, fixed codes
+      litCodeTable = fixedLitCodeTab;
+      distCodeTable = fixedDistCodeTab;
+    } else if (hdr == 2) { // compressed block, dynamic codes
+      var numLitCodes = this.getBits(5) + 257;
+      var numDistCodes = this.getBits(5) + 1;
+      var numCodeLenCodes = this.getBits(4) + 4;
+
+      // build the code lengths code table
+      var codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length);
+
+      for (var i = 0; i < numCodeLenCodes; ++i)
+        codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3);
+      var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);
+
+      // build the literal and distance code tables
+      var len = 0;
+      var i = 0;
+      var codes = numLitCodes + numDistCodes;
+      var codeLengths = new Uint8Array(codes);
+      while (i < codes) {
+        var code = this.getCode(codeLenCodeTab);
+        if (code == 16) {
+          var bitsLength = 2, bitsOffset = 3, what = len;
+        } else if (code == 17) {
+          var bitsLength = 3, bitsOffset = 3, what = (len = 0);
+        } else if (code == 18) {
+          var bitsLength = 7, bitsOffset = 11, what = (len = 0);
+        } else {
+          codeLengths[i++] = len = code;
+          continue;
+        }
+
+        var repeatLength = this.getBits(bitsLength) + bitsOffset;
+        while (repeatLength-- > 0)
+          codeLengths[i++] = what;
+      }
+
+      litCodeTable =
+        this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes));
+      distCodeTable =
+        this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes));
+    } else {
+      error('Unknown block type in flate stream');
+    }
+
+    var buffer = this.buffer;
+    var limit = buffer ? buffer.length : 0;
+    var pos = this.bufferLength;
+    while (true) {
+      var code1 = this.getCode(litCodeTable);
+      if (code1 < 256) {
+        if (pos + 1 >= limit) {
+          buffer = this.ensureBuffer(pos + 1);
+          limit = buffer.length;
+        }
+        buffer[pos++] = code1;
+        continue;
+      }
+      if (code1 == 256) {
+        this.bufferLength = pos;
+        return;
+      }
+      code1 -= 257;
+      code1 = lengthDecode[code1];
+      var code2 = code1 >> 16;
+      if (code2 > 0)
+        code2 = this.getBits(code2);
+      var len = (code1 & 0xffff) + code2;
+      code1 = this.getCode(distCodeTable);
+      code1 = distDecode[code1];
+      code2 = code1 >> 16;
+      if (code2 > 0)
+        code2 = this.getBits(code2);
+      var dist = (code1 & 0xffff) + code2;
+      if (pos + len >= limit) {
+        buffer = this.ensureBuffer(pos + len);
+        limit = buffer.length;
+      }
+      for (var k = 0; k < len; ++k, ++pos)
+        buffer[pos] = buffer[pos - dist];
+    }
+  };
+
+  return FlateStream;
+})();
+
+var PredictorStream = (function PredictorStreamClosure() {
+  function PredictorStream(str, params) {
+    var predictor = this.predictor = params.get('Predictor') || 1;
+
+    if (predictor <= 1)
+      return str; // no prediction
+    if (predictor !== 2 && (predictor < 10 || predictor > 15))
+      error('Unsupported predictor: ' + predictor);
+
+    if (predictor === 2)
+      this.readBlock = this.readBlockTiff;
+    else
+      this.readBlock = this.readBlockPng;
+
+    this.str = str;
+    this.dict = str.dict;
+
+    var colors = this.colors = params.get('Colors') || 1;
+    var bits = this.bits = params.get('BitsPerComponent') || 8;
+    var columns = this.columns = params.get('Columns') || 1;
+
+    this.pixBytes = (colors * bits + 7) >> 3;
+    this.rowBytes = (columns * colors * bits + 7) >> 3;
+
+    DecodeStream.call(this);
+    return this;
+  }
+
+  PredictorStream.prototype = Object.create(DecodeStream.prototype);
+
+  PredictorStream.prototype.readBlockTiff =
+    function predictorStreamReadBlockTiff() {
+    var rowBytes = this.rowBytes;
+
+    var bufferLength = this.bufferLength;
+    var buffer = this.ensureBuffer(bufferLength + rowBytes);
+
+    var bits = this.bits;
+    var colors = this.colors;
+
+    var rawBytes = this.str.getBytes(rowBytes);
+    this.eof = !rawBytes.length;
+    if (this.eof) {
+      return;
+    }
+
+    var inbuf = 0, outbuf = 0;
+    var inbits = 0, outbits = 0;
+    var pos = bufferLength;
+
+    if (bits === 1) {
+      for (var i = 0; i < rowBytes; ++i) {
+        var c = rawBytes[i];
+        inbuf = (inbuf << 8) | c;
+        // bitwise addition is exclusive or
+        // first shift inbuf and then add
+        buffer[pos++] = (c ^ (inbuf >> colors)) & 0xFF;
+        // truncate inbuf (assumes colors < 16)
+        inbuf &= 0xFFFF;
+      }
+    } else if (bits === 8) {
+      for (var i = 0; i < colors; ++i)
+        buffer[pos++] = rawBytes[i];
+      for (; i < rowBytes; ++i) {
+        buffer[pos] = buffer[pos - colors] + rawBytes[i];
+        pos++;
+      }
+    } else {
+      var compArray = new Uint8Array(colors + 1);
+      var bitMask = (1 << bits) - 1;
+      var j = 0, k = bufferLength;
+      var columns = this.columns;
+      for (var i = 0; i < columns; ++i) {
+        for (var kk = 0; kk < colors; ++kk) {
+          if (inbits < bits) {
+            inbuf = (inbuf << 8) | (rawBytes[j++] & 0xFF);
+            inbits += 8;
+          }
+          compArray[kk] = (compArray[kk] +
+                           (inbuf >> (inbits - bits))) & bitMask;
+          inbits -= bits;
+          outbuf = (outbuf << bits) | compArray[kk];
+          outbits += bits;
+          if (outbits >= 8) {
+            buffer[k++] = (outbuf >> (outbits - 8)) & 0xFF;
+            outbits -= 8;
+          }
+        }
+      }
+      if (outbits > 0) {
+        buffer[k++] = (outbuf << (8 - outbits)) +
+        (inbuf & ((1 << (8 - outbits)) - 1));
+      }
+    }
+    this.bufferLength += rowBytes;
+  };
+
+  PredictorStream.prototype.readBlockPng =
+    function predictorStreamReadBlockPng() {
+
+    var rowBytes = this.rowBytes;
+    var pixBytes = this.pixBytes;
+
+    var predictor = this.str.getByte();
+    var rawBytes = this.str.getBytes(rowBytes);
+    this.eof = !rawBytes.length;
+    if (this.eof) {
+      return;
+    }
+
+    var bufferLength = this.bufferLength;
+    var buffer = this.ensureBuffer(bufferLength + rowBytes);
+
+    var prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength);
+    if (prevRow.length === 0)
+      prevRow = new Uint8Array(rowBytes);
+
+    var j = bufferLength;
+    switch (predictor) {
+      case 0:
+        for (var i = 0; i < rowBytes; ++i)
+          buffer[j++] = rawBytes[i];
+        break;
+      case 1:
+        for (var i = 0; i < pixBytes; ++i)
+          buffer[j++] = rawBytes[i];
+        for (; i < rowBytes; ++i) {
+          buffer[j] = (buffer[j - pixBytes] + rawBytes[i]) & 0xFF;
+          j++;
+        }
+        break;
+      case 2:
+        for (var i = 0; i < rowBytes; ++i)
+          buffer[j++] = (prevRow[i] + rawBytes[i]) & 0xFF;
+        break;
+      case 3:
+        for (var i = 0; i < pixBytes; ++i)
+          buffer[j++] = (prevRow[i] >> 1) + rawBytes[i];
+        for (; i < rowBytes; ++i) {
+          buffer[j] = (((prevRow[i] + buffer[j - pixBytes]) >> 1) +
+                           rawBytes[i]) & 0xFF;
+          j++;
+        }
+        break;
+      case 4:
+        // we need to save the up left pixels values. the simplest way
+        // is to create a new buffer
+        for (var i = 0; i < pixBytes; ++i) {
+          var up = prevRow[i];
+          var c = rawBytes[i];
+          buffer[j++] = up + c;
+        }
+        for (; i < rowBytes; ++i) {
+          var up = prevRow[i];
+          var upLeft = prevRow[i - pixBytes];
+          var left = buffer[j - pixBytes];
+          var p = left + up - upLeft;
+
+          var pa = p - left;
+          if (pa < 0)
+            pa = -pa;
+          var pb = p - up;
+          if (pb < 0)
+            pb = -pb;
+          var pc = p - upLeft;
+          if (pc < 0)
+            pc = -pc;
+
+          var c = rawBytes[i];
+          if (pa <= pb && pa <= pc)
+            buffer[j++] = left + c;
+          else if (pb <= pc)
+            buffer[j++] = up + c;
+          else
+            buffer[j++] = upLeft + c;
+        }
+        break;
+      default:
+        error('Unsupported predictor: ' + predictor);
+    }
+    this.bufferLength += rowBytes;
+  };
+
+  return PredictorStream;
+})();
+
+/**
+ * Depending on the type of JPEG a JpegStream is handled in different ways. For
+ * JPEG's that are supported natively such as DeviceGray and DeviceRGB the image
+ * data is stored and then loaded by the browser.  For unsupported JPEG's we use
+ * a library to decode these images and the stream behaves like all the other
+ * DecodeStreams.
+ */
+var JpegStream = (function JpegStreamClosure() {
+  function JpegStream(bytes, dict, xref) {
+    // TODO: per poppler, some images may have 'junk' before that
+    // need to be removed
+    this.dict = dict;
+    this.bytes = bytes;
+
+    DecodeStream.call(this);
+  }
+
+  JpegStream.prototype = Object.create(DecodeStream.prototype);
+
+  JpegStream.prototype.ensureBuffer = function JpegStream_ensureBuffer(req) {
+    if (this.bufferLength)
+      return;
+    try {
+      var jpegImage = new JpegImage();
+      if (this.colorTransform != -1)
+        jpegImage.colorTransform = this.colorTransform;
+      jpegImage.parse(this.bytes);
+      var width = jpegImage.width;
+      var height = jpegImage.height;
+      var data = jpegImage.getData(width, height);
+      this.buffer = data;
+      this.bufferLength = data.length;
+      this.eof = true;
+    } catch (e) {
+      error('JPEG error: ' + e);
+    }
+  };
+  JpegStream.prototype.getIR = function JpegStream_getIR() {
+    return bytesToString(this.bytes);
+  };
+  /**
+   * Checks if the image can be decoded and displayed by the browser without any
+   * further processing such as color space conversions.
+   */
+  JpegStream.prototype.isNativelySupported =
+    function JpegStream_isNativelySupported(xref, res) {
+    var cs = ColorSpace.parse(this.dict.get('ColorSpace', 'CS'), xref, res);
+    return cs.name === 'DeviceGray' || cs.name === 'DeviceRGB';
+  };
+  /**
+   * Checks if the image can be decoded by the browser.
+   */
+  JpegStream.prototype.isNativelyDecodable =
+    function JpegStream_isNativelyDecodable(xref, res) {
+    var cs = ColorSpace.parse(this.dict.get('ColorSpace', 'CS'), xref, res);
+    var numComps = cs.numComps;
+    return numComps == 1 || numComps == 3;
+  };
+
+  return JpegStream;
+})();
+
+/**
+ * For JPEG 2000's we use a library to decode these images and
+ * the stream behaves like all the other DecodeStreams.
+ */
+var JpxStream = (function JpxStreamClosure() {
+  function JpxStream(bytes, dict) {
+    this.dict = dict;
+    this.bytes = bytes;
+
+    DecodeStream.call(this);
+  }
+
+  JpxStream.prototype = Object.create(DecodeStream.prototype);
+
+  JpxStream.prototype.ensureBuffer = function JpxStream_ensureBuffer(req) {
+    if (this.bufferLength)
+      return;
+
+    var jpxImage = new JpxImage();
+    jpxImage.parse(this.bytes);
+
+    var width = jpxImage.width;
+    var height = jpxImage.height;
+    var componentsCount = jpxImage.componentsCount;
+    if (componentsCount != 1 && componentsCount != 3 && componentsCount != 4)
+      error('JPX with ' + componentsCount + ' components is not supported');
+
+    var data = new Uint8Array(width * height * componentsCount);
+
+    for (var k = 0, kk = jpxImage.tiles.length; k < kk; k++) {
+      var tileCompoments = jpxImage.tiles[k];
+      var tileWidth = tileCompoments[0].width;
+      var tileHeight = tileCompoments[0].height;
+      var tileLeft = tileCompoments[0].left;
+      var tileTop = tileCompoments[0].top;
+
+      var dataPosition, sourcePosition, data0, data1, data2, data3, rowFeed;
+      switch (componentsCount) {
+        case 1:
+          data0 = tileCompoments[0].items;
+
+          dataPosition = width * tileTop + tileLeft;
+          rowFeed = width - tileWidth;
+          sourcePosition = 0;
+          for (var j = 0; j < tileHeight; j++) {
+            for (var i = 0; i < tileWidth; i++)
+              data[dataPosition++] = data0[sourcePosition++];
+            dataPosition += rowFeed;
+          }
+          break;
+        case 3:
+          data0 = tileCompoments[0].items;
+          data1 = tileCompoments[1].items;
+          data2 = tileCompoments[2].items;
+
+          dataPosition = (width * tileTop + tileLeft) * 3;
+          rowFeed = (width - tileWidth) * 3;
+          sourcePosition = 0;
+          for (var j = 0; j < tileHeight; j++) {
+            for (var i = 0; i < tileWidth; i++) {
+              data[dataPosition++] = data0[sourcePosition];
+              data[dataPosition++] = data1[sourcePosition];
+              data[dataPosition++] = data2[sourcePosition];
+              sourcePosition++;
+            }
+            dataPosition += rowFeed;
+          }
+          break;
+        case 4:
+          data0 = tileCompoments[0].items;
+          data1 = tileCompoments[1].items;
+          data2 = tileCompoments[2].items;
+          data3 = tileCompoments[3].items;
+
+          dataPosition = (width * tileTop + tileLeft) * 4;
+          rowFeed = (width - tileWidth) * 4;
+          sourcePosition = 0;
+          for (var j = 0; j < tileHeight; j++) {
+            for (var i = 0; i < tileWidth; i++) {
+              data[dataPosition++] = data0[sourcePosition];
+              data[dataPosition++] = data1[sourcePosition];
+              data[dataPosition++] = data2[sourcePosition];
+              data[dataPosition++] = data3[sourcePosition];
+              sourcePosition++;
+            }
+            dataPosition += rowFeed;
+          }
+          break;
+      }
+    }
+
+    this.buffer = data;
+    this.bufferLength = data.length;
+    this.eof = true;
+  };
+
+  return JpxStream;
+})();
+
+/**
+ * For JBIG2's we use a library to decode these images and
+ * the stream behaves like all the other DecodeStreams.
+ */
+var Jbig2Stream = (function Jbig2StreamClosure() {
+  function Jbig2Stream(bytes, dict) {
+    this.dict = dict;
+    this.bytes = bytes;
+
+    DecodeStream.call(this);
+  }
+
+  Jbig2Stream.prototype = Object.create(DecodeStream.prototype);
+
+  Jbig2Stream.prototype.ensureBuffer = function Jbig2Stream_ensureBuffer(req) {
+    if (this.bufferLength)
+      return;
+
+    var jbig2Image = new Jbig2Image();
+
+    var chunks = [], decodeParams = this.dict.get('DecodeParms');
+    if (decodeParams && decodeParams.has('JBIG2Globals')) {
+      var globalsStream = decodeParams.get('JBIG2Globals');
+      var globals = globalsStream.getBytes();
+      chunks.push({data: globals, start: 0, end: globals.length});
+    }
+    chunks.push({data: this.bytes, start: 0, end: this.bytes.length});
+    var data = jbig2Image.parseChunks(chunks);
+    var dataLength = data.length;
+
+    // JBIG2 had black as 1 and white as 0, inverting the colors
+    for (var i = 0; i < dataLength; i++)
+      data[i] ^= 0xFF;
+
+    this.buffer = data;
+    this.bufferLength = dataLength;
+    this.eof = true;
+  };
+
+  return Jbig2Stream;
+})();
+
+var DecryptStream = (function DecryptStreamClosure() {
+  function DecryptStream(str, decrypt) {
+    this.str = str;
+    this.dict = str.dict;
+    this.decrypt = decrypt;
+    this.nextChunk = null;
+    this.initialized = false;
+
+    DecodeStream.call(this);
+  }
+
+  var chunkSize = 512;
+
+  DecryptStream.prototype = Object.create(DecodeStream.prototype);
+
+  DecryptStream.prototype.readBlock = function DecryptStream_readBlock() {
+    var chunk;
+    if (this.initialized) {
+      chunk = this.nextChunk;
+    } else {
+      chunk = this.str.getBytes(chunkSize);
+      this.initialized = true;
+    }
+    if (!chunk || chunk.length === 0) {
+      this.eof = true;
+      return;
+    }
+    this.nextChunk = this.str.getBytes(chunkSize);
+    var hasMoreData = this.nextChunk && this.nextChunk.length > 0;
+
+    var decrypt = this.decrypt;
+    chunk = decrypt(chunk, !hasMoreData);
+
+    var bufferLength = this.bufferLength;
+    var i, n = chunk.length;
+    var buffer = this.ensureBuffer(bufferLength + n);
+    for (i = 0; i < n; i++)
+      buffer[bufferLength++] = chunk[i];
+    this.bufferLength = bufferLength;
+  };
+
+  return DecryptStream;
+})();
+
+var Ascii85Stream = (function Ascii85StreamClosure() {
+  function Ascii85Stream(str) {
+    this.str = str;
+    this.dict = str.dict;
+    this.input = new Uint8Array(5);
+
+    DecodeStream.call(this);
+  }
+
+  Ascii85Stream.prototype = Object.create(DecodeStream.prototype);
+
+  Ascii85Stream.prototype.readBlock = function Ascii85Stream_readBlock() {
+    var TILDA_CHAR = 0x7E; // '~'
+    var Z_LOWER_CHAR = 0x7A; // 'z'
+    var EOF = -1;
+
+    var str = this.str;
+
+    var c = str.getByte();
+    while (Lexer.isSpace(c)) {
+      c = str.getByte();
+    }
+
+    if (c === EOF || c === TILDA_CHAR) {
+      this.eof = true;
+      return;
+    }
+
+    var bufferLength = this.bufferLength, buffer;
+
+    // special code for z
+    if (c == Z_LOWER_CHAR) {
+      buffer = this.ensureBuffer(bufferLength + 4);
+      for (var i = 0; i < 4; ++i)
+        buffer[bufferLength + i] = 0;
+      this.bufferLength += 4;
+    } else {
+      var input = this.input;
+      input[0] = c;
+      for (var i = 1; i < 5; ++i) {
+        c = str.getByte();
+        while (Lexer.isSpace(c)) {
+          c = str.getByte();
+        }
+
+        input[i] = c;
+
+        if (c === EOF || c == TILDA_CHAR)
+          break;
+      }
+      buffer = this.ensureBuffer(bufferLength + i - 1);
+      this.bufferLength += i - 1;
+
+      // partial ending;
+      if (i < 5) {
+        for (; i < 5; ++i)
+          input[i] = 0x21 + 84;
+        this.eof = true;
+      }
+      var t = 0;
+      for (var i = 0; i < 5; ++i)
+        t = t * 85 + (input[i] - 0x21);
+
+      for (var i = 3; i >= 0; --i) {
+        buffer[bufferLength + i] = t & 0xFF;
+        t >>= 8;
+      }
+    }
+  };
+
+  return Ascii85Stream;
+})();
+
+var AsciiHexStream = (function AsciiHexStreamClosure() {
+  function AsciiHexStream(str) {
+    this.str = str;
+    this.dict = str.dict;
+
+    this.firstDigit = -1;
+
+    DecodeStream.call(this);
+  }
+
+  AsciiHexStream.prototype = Object.create(DecodeStream.prototype);
+
+  AsciiHexStream.prototype.readBlock = function AsciiHexStream_readBlock() {
+    var UPSTREAM_BLOCK_SIZE = 8000;
+    var bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE);
+    if (!bytes.length) {
+      this.eof = true;
+      return;
+    }
+
+    var maxDecodeLength = (bytes.length + 1) >> 1;
+    var buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength);
+    var bufferLength = this.bufferLength;
+
+    var firstDigit = this.firstDigit;
+    for (var i = 0, ii = bytes.length; i < ii; i++) {
+      var ch = bytes[i], digit;
+      if (ch >= 0x30 && ch <= 0x39) { // '0'-'9'
+        digit = ch & 0x0F;
+      } else if ((ch >= 0x41 && ch <= 0x46) || (ch >= 0x61 && ch <= 0x66)) {
+        // 'A'-'Z', 'a'-'z'
+        digit = (ch & 0x0F) + 9;
+      } else if (ch === 0x3E) { // '>'
+        this.eof = true;
+        break;
+      } else { // probably whitespace
+        continue; // ignoring
+      }
+      if (firstDigit < 0) {
+        firstDigit = digit;
+      } else {
+        buffer[bufferLength++] = (firstDigit << 4) | digit;
+        firstDigit = -1;
+      }
+    }
+    if (firstDigit >= 0 && this.eof) {
+      // incomplete byte
+      buffer[bufferLength++] = (firstDigit << 4);
+      firstDigit = -1;
+    }
+    this.firstDigit = firstDigit;
+    this.bufferLength = bufferLength;
+  };
+
+  return AsciiHexStream;
+})();
+
+var RunLengthStream = (function RunLengthStreamClosure() {
+  function RunLengthStream(str) {
+    this.str = str;
+    this.dict = str.dict;
+
+    DecodeStream.call(this);
+  }
+
+  RunLengthStream.prototype = Object.create(DecodeStream.prototype);
+
+  RunLengthStream.prototype.readBlock = function RunLengthStream_readBlock() {
+    // The repeatHeader has following format. The first byte defines type of run
+    // and amount of bytes to repeat/copy: n = 0 through 127 - copy next n bytes
+    // (in addition to the second byte from the header), n = 129 through 255 -
+    // duplicate the second byte from the header (257 - n) times, n = 128 - end.
+    var repeatHeader = this.str.getBytes(2);
+    if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] == 128) {
+      this.eof = true;
+      return;
+    }
+
+    var bufferLength = this.bufferLength;
+    var n = repeatHeader[0];
+    if (n < 128) {
+      // copy n bytes
+      var buffer = this.ensureBuffer(bufferLength + n + 1);
+      buffer[bufferLength++] = repeatHeader[1];
+      if (n > 0) {
+        var source = this.str.getBytes(n);
+        buffer.set(source, bufferLength);
+        bufferLength += n;
+      }
+    } else {
+      n = 257 - n;
+      var b = repeatHeader[1];
+      var buffer = this.ensureBuffer(bufferLength + n + 1);
+      for (var i = 0; i < n; i++)
+        buffer[bufferLength++] = b;
+    }
+    this.bufferLength = bufferLength;
+  };
+
+  return RunLengthStream;
+})();
+
+var CCITTFaxStream = (function CCITTFaxStreamClosure() {
+
+  var ccittEOL = -2;
+  var twoDimPass = 0;
+  var twoDimHoriz = 1;
+  var twoDimVert0 = 2;
+  var twoDimVertR1 = 3;
+  var twoDimVertL1 = 4;
+  var twoDimVertR2 = 5;
+  var twoDimVertL2 = 6;
+  var twoDimVertR3 = 7;
+  var twoDimVertL3 = 8;
+
+  var twoDimTable = [
+    [-1, -1], [-1, -1],                   // 000000x
+    [7, twoDimVertL3],                    // 0000010
+    [7, twoDimVertR3],                    // 0000011
+    [6, twoDimVertL2], [6, twoDimVertL2], // 000010x
+    [6, twoDimVertR2], [6, twoDimVertR2], // 000011x
+    [4, twoDimPass], [4, twoDimPass],     // 0001xxx
+    [4, twoDimPass], [4, twoDimPass],
+    [4, twoDimPass], [4, twoDimPass],
+    [4, twoDimPass], [4, twoDimPass],
+    [3, twoDimHoriz], [3, twoDimHoriz],   // 001xxxx
+    [3, twoDimHoriz], [3, twoDimHoriz],
+    [3, twoDimHoriz], [3, twoDimHoriz],
+    [3, twoDimHoriz], [3, twoDimHoriz],
+    [3, twoDimHoriz], [3, twoDimHoriz],
+    [3, twoDimHoriz], [3, twoDimHoriz],
+    [3, twoDimHoriz], [3, twoDimHoriz],
+    [3, twoDimHoriz], [3, twoDimHoriz],
+    [3, twoDimVertL1], [3, twoDimVertL1], // 010xxxx
+    [3, twoDimVertL1], [3, twoDimVertL1],
+    [3, twoDimVertL1], [3, twoDimVertL1],
+    [3, twoDimVertL1], [3, twoDimVertL1],
+    [3, twoDimVertL1], [3, twoDimVertL1],
+    [3, twoDimVertL1], [3, twoDimVertL1],
+    [3, twoDimVertL1], [3, twoDimVertL1],
+    [3, twoDimVertL1], [3, twoDimVertL1],
+    [3, twoDimVertR1], [3, twoDimVertR1], // 011xxxx
+    [3, twoDimVertR1], [3, twoDimVertR1],
+    [3, twoDimVertR1], [3, twoDimVertR1],
+    [3, twoDimVertR1], [3, twoDimVertR1],
+    [3, twoDimVertR1], [3, twoDimVertR1],
+    [3, twoDimVertR1], [3, twoDimVertR1],
+    [3, twoDimVertR1], [3, twoDimVertR1],
+    [3, twoDimVertR1], [3, twoDimVertR1],
+    [1, twoDimVert0], [1, twoDimVert0],   // 1xxxxxx
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0]
+  ];
+
+  var whiteTable1 = [
+    [-1, -1],                               // 00000
+    [12, ccittEOL],                         // 00001
+    [-1, -1], [-1, -1],                     // 0001x
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 001xx
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 010xx
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 011xx
+    [11, 1792], [11, 1792],                 // 1000x
+    [12, 1984],                             // 10010
+    [12, 2048],                             // 10011
+    [12, 2112],                             // 10100
+    [12, 2176],                             // 10101
+    [12, 2240],                             // 10110
+    [12, 2304],                             // 10111
+    [11, 1856], [11, 1856],                 // 1100x
+    [11, 1920], [11, 1920],                 // 1101x
+    [12, 2368],                             // 11100
+    [12, 2432],                             // 11101
+    [12, 2496],                             // 11110
+    [12, 2560]                              // 11111
+  ];
+
+  var whiteTable2 = [
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1],     // 0000000xx
+    [8, 29], [8, 29],                           // 00000010x
+    [8, 30], [8, 30],                           // 00000011x
+    [8, 45], [8, 45],                           // 00000100x
+    [8, 46], [8, 46],                           // 00000101x
+    [7, 22], [7, 22], [7, 22], [7, 22],         // 0000011xx
+    [7, 23], [7, 23], [7, 23], [7, 23],         // 0000100xx
+    [8, 47], [8, 47],                           // 00001010x
+    [8, 48], [8, 48],                           // 00001011x
+    [6, 13], [6, 13], [6, 13], [6, 13],         // 000011xxx
+    [6, 13], [6, 13], [6, 13], [6, 13],
+    [7, 20], [7, 20], [7, 20], [7, 20],         // 0001000xx
+    [8, 33], [8, 33],                           // 00010010x
+    [8, 34], [8, 34],                           // 00010011x
+    [8, 35], [8, 35],                           // 00010100x
+    [8, 36], [8, 36],                           // 00010101x
+    [8, 37], [8, 37],                           // 00010110x
+    [8, 38], [8, 38],                           // 00010111x
+    [7, 19], [7, 19], [7, 19], [7, 19],         // 0001100xx
+    [8, 31], [8, 31],                           // 00011010x
+    [8, 32], [8, 32],                           // 00011011x
+    [6, 1], [6, 1], [6, 1], [6, 1],             // 000111xxx
+    [6, 1], [6, 1], [6, 1], [6, 1],
+    [6, 12], [6, 12], [6, 12], [6, 12],         // 001000xxx
+    [6, 12], [6, 12], [6, 12], [6, 12],
+    [8, 53], [8, 53],                           // 00100100x
+    [8, 54], [8, 54],                           // 00100101x
+    [7, 26], [7, 26], [7, 26], [7, 26],         // 0010011xx
+    [8, 39], [8, 39],                           // 00101000x
+    [8, 40], [8, 40],                           // 00101001x
+    [8, 41], [8, 41],                           // 00101010x
+    [8, 42], [8, 42],                           // 00101011x
+    [8, 43], [8, 43],                           // 00101100x
+    [8, 44], [8, 44],                           // 00101101x
+    [7, 21], [7, 21], [7, 21], [7, 21],         // 0010111xx
+    [7, 28], [7, 28], [7, 28], [7, 28],         // 0011000xx
+    [8, 61], [8, 61],                           // 00110010x
+    [8, 62], [8, 62],                           // 00110011x
+    [8, 63], [8, 63],                           // 00110100x
+    [8, 0], [8, 0],                             // 00110101x
+    [8, 320], [8, 320],                         // 00110110x
+    [8, 384], [8, 384],                         // 00110111x
+    [5, 10], [5, 10], [5, 10], [5, 10],         // 00111xxxx
+    [5, 10], [5, 10], [5, 10], [5, 10],
+    [5, 10], [5, 10], [5, 10], [5, 10],
+    [5, 10], [5, 10], [5, 10], [5, 10],
+    [5, 11], [5, 11], [5, 11], [5, 11],         // 01000xxxx
+    [5, 11], [5, 11], [5, 11], [5, 11],
+    [5, 11], [5, 11], [5, 11], [5, 11],
+    [5, 11], [5, 11], [5, 11], [5, 11],
+    [7, 27], [7, 27], [7, 27], [7, 27],         // 0100100xx
+    [8, 59], [8, 59],                           // 01001010x
+    [8, 60], [8, 60],                           // 01001011x
+    [9, 1472],                                  // 010011000
+    [9, 1536],                                  // 010011001
+    [9, 1600],                                  // 010011010
+    [9, 1728],                                  // 010011011
+    [7, 18], [7, 18], [7, 18], [7, 18],         // 0100111xx
+    [7, 24], [7, 24], [7, 24], [7, 24],         // 0101000xx
+    [8, 49], [8, 49],                           // 01010010x
+    [8, 50], [8, 50],                           // 01010011x
+    [8, 51], [8, 51],                           // 01010100x
+    [8, 52], [8, 52],                           // 01010101x
+    [7, 25], [7, 25], [7, 25], [7, 25],         // 0101011xx
+    [8, 55], [8, 55],                           // 01011000x
+    [8, 56], [8, 56],                           // 01011001x
+    [8, 57], [8, 57],                           // 01011010x
+    [8, 58], [8, 58],                           // 01011011x
+    [6, 192], [6, 192], [6, 192], [6, 192],     // 010111xxx
+    [6, 192], [6, 192], [6, 192], [6, 192],
+    [6, 1664], [6, 1664], [6, 1664], [6, 1664], // 011000xxx
+    [6, 1664], [6, 1664], [6, 1664], [6, 1664],
+    [8, 448], [8, 448],                         // 01100100x
+    [8, 512], [8, 512],                         // 01100101x
+    [9, 704],                                   // 011001100
+    [9, 768],                                   // 011001101
+    [8, 640], [8, 640],                         // 01100111x
+    [8, 576], [8, 576],                         // 01101000x
+    [9, 832],                                   // 011010010
+    [9, 896],                                   // 011010011
+    [9, 960],                                   // 011010100
+    [9, 1024],                                  // 011010101
+    [9, 1088],                                  // 011010110
+    [9, 1152],                                  // 011010111
+    [9, 1216],                                  // 011011000
+    [9, 1280],                                  // 011011001
+    [9, 1344],                                  // 011011010
+    [9, 1408],                                  // 011011011
+    [7, 256], [7, 256], [7, 256], [7, 256],     // 0110111xx
+    [4, 2], [4, 2], [4, 2], [4, 2],             // 0111xxxxx
+    [4, 2], [4, 2], [4, 2], [4, 2],
+    [4, 2], [4, 2], [4, 2], [4, 2],
+    [4, 2], [4, 2], [4, 2], [4, 2],
+    [4, 2], [4, 2], [4, 2], [4, 2],
+    [4, 2], [4, 2], [4, 2], [4, 2],
+    [4, 2], [4, 2], [4, 2], [4, 2],
+    [4, 2], [4, 2], [4, 2], [4, 2],
+    [4, 3], [4, 3], [4, 3], [4, 3],             // 1000xxxxx
+    [4, 3], [4, 3], [4, 3], [4, 3],
+    [4, 3], [4, 3], [4, 3], [4, 3],
+    [4, 3], [4, 3], [4, 3], [4, 3],
+    [4, 3], [4, 3], [4, 3], [4, 3],
+    [4, 3], [4, 3], [4, 3], [4, 3],
+    [4, 3], [4, 3], [4, 3], [4, 3],
+    [4, 3], [4, 3], [4, 3], [4, 3],
+    [5, 128], [5, 128], [5, 128], [5, 128],     // 10010xxxx
+    [5, 128], [5, 128], [5, 128], [5, 128],
+    [5, 128], [5, 128], [5, 128], [5, 128],
+    [5, 128], [5, 128], [5, 128], [5, 128],
+    [5, 8], [5, 8], [5, 8], [5, 8],             // 10011xxxx
+    [5, 8], [5, 8], [5, 8], [5, 8],
+    [5, 8], [5, 8], [5, 8], [5, 8],
+    [5, 8], [5, 8], [5, 8], [5, 8],
+    [5, 9], [5, 9], [5, 9], [5, 9],             // 10100xxxx
+    [5, 9], [5, 9], [5, 9], [5, 9],
+    [5, 9], [5, 9], [5, 9], [5, 9],
+    [5, 9], [5, 9], [5, 9], [5, 9],
+    [6, 16], [6, 16], [6, 16], [6, 16],         // 101010xxx
+    [6, 16], [6, 16], [6, 16], [6, 16],
+    [6, 17], [6, 17], [6, 17], [6, 17],         // 101011xxx
+    [6, 17], [6, 17], [6, 17], [6, 17],
+    [4, 4], [4, 4], [4, 4], [4, 4],             // 1011xxxxx
+    [4, 4], [4, 4], [4, 4], [4, 4],
+    [4, 4], [4, 4], [4, 4], [4, 4],
+    [4, 4], [4, 4], [4, 4], [4, 4],
+    [4, 4], [4, 4], [4, 4], [4, 4],
+    [4, 4], [4, 4], [4, 4], [4, 4],
+    [4, 4], [4, 4], [4, 4], [4, 4],
+    [4, 4], [4, 4], [4, 4], [4, 4],
+    [4, 5], [4, 5], [4, 5], [4, 5],             // 1100xxxxx
+    [4, 5], [4, 5], [4, 5], [4, 5],
+    [4, 5], [4, 5], [4, 5], [4, 5],
+    [4, 5], [4, 5], [4, 5], [4, 5],
+    [4, 5], [4, 5], [4, 5], [4, 5],
+    [4, 5], [4, 5], [4, 5], [4, 5],
+    [4, 5], [4, 5], [4, 5], [4, 5],
+    [4, 5], [4, 5], [4, 5], [4, 5],
+    [6, 14], [6, 14], [6, 14], [6, 14],         // 110100xxx
+    [6, 14], [6, 14], [6, 14], [6, 14],
+    [6, 15], [6, 15], [6, 15], [6, 15],         // 110101xxx
+    [6, 15], [6, 15], [6, 15], [6, 15],
+    [5, 64], [5, 64], [5, 64], [5, 64],         // 11011xxxx
+    [5, 64], [5, 64], [5, 64], [5, 64],
+    [5, 64], [5, 64], [5, 64], [5, 64],
+    [5, 64], [5, 64], [5, 64], [5, 64],
+    [4, 6], [4, 6], [4, 6], [4, 6],             // 1110xxxxx
+    [4, 6], [4, 6], [4, 6], [4, 6],
+    [4, 6], [4, 6], [4, 6], [4, 6],
+    [4, 6], [4, 6], [4, 6], [4, 6],
+    [4, 6], [4, 6], [4, 6], [4, 6],
+    [4, 6], [4, 6], [4, 6], [4, 6],
+    [4, 6], [4, 6], [4, 6], [4, 6],
+    [4, 6], [4, 6], [4, 6], [4, 6],
+    [4, 7], [4, 7], [4, 7], [4, 7],             // 1111xxxxx
+    [4, 7], [4, 7], [4, 7], [4, 7],
+    [4, 7], [4, 7], [4, 7], [4, 7],
+    [4, 7], [4, 7], [4, 7], [4, 7],
+    [4, 7], [4, 7], [4, 7], [4, 7],
+    [4, 7], [4, 7], [4, 7], [4, 7],
+    [4, 7], [4, 7], [4, 7], [4, 7],
+    [4, 7], [4, 7], [4, 7], [4, 7]
+  ];
+
+  var blackTable1 = [
+    [-1, -1], [-1, -1],                             // 000000000000x
+    [12, ccittEOL], [12, ccittEOL],                 // 000000000001x
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000001xx
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000010xx
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000011xx
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000100xx
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000101xx
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000110xx
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000111xx
+    [11, 1792], [11, 1792], [11, 1792], [11, 1792], // 00000001000xx
+    [12, 1984], [12, 1984],                         // 000000010010x
+    [12, 2048], [12, 2048],                         // 000000010011x
+    [12, 2112], [12, 2112],                         // 000000010100x
+    [12, 2176], [12, 2176],                         // 000000010101x
+    [12, 2240], [12, 2240],                         // 000000010110x
+    [12, 2304], [12, 2304],                         // 000000010111x
+    [11, 1856], [11, 1856], [11, 1856], [11, 1856], // 00000001100xx
+    [11, 1920], [11, 1920], [11, 1920], [11, 1920], // 00000001101xx
+    [12, 2368], [12, 2368],                         // 000000011100x
+    [12, 2432], [12, 2432],                         // 000000011101x
+    [12, 2496], [12, 2496],                         // 000000011110x
+    [12, 2560], [12, 2560],                         // 000000011111x
+    [10, 18], [10, 18], [10, 18], [10, 18],         // 0000001000xxx
+    [10, 18], [10, 18], [10, 18], [10, 18],
+    [12, 52], [12, 52],                             // 000000100100x
+    [13, 640],                                      // 0000001001010
+    [13, 704],                                      // 0000001001011
+    [13, 768],                                      // 0000001001100
+    [13, 832],                                      // 0000001001101
+    [12, 55], [12, 55],                             // 000000100111x
+    [12, 56], [12, 56],                             // 000000101000x
+    [13, 1280],                                     // 0000001010010
+    [13, 1344],                                     // 0000001010011
+    [13, 1408],                                     // 0000001010100
+    [13, 1472],                                     // 0000001010101
+    [12, 59], [12, 59],                             // 000000101011x
+    [12, 60], [12, 60],                             // 000000101100x
+    [13, 1536],                                     // 0000001011010
+    [13, 1600],                                     // 0000001011011
+    [11, 24], [11, 24], [11, 24], [11, 24],         // 00000010111xx
+    [11, 25], [11, 25], [11, 25], [11, 25],         // 00000011000xx
+    [13, 1664],                                     // 0000001100100
+    [13, 1728],                                     // 0000001100101
+    [12, 320], [12, 320],                           // 000000110011x
+    [12, 384], [12, 384],                           // 000000110100x
+    [12, 448], [12, 448],                           // 000000110101x
+    [13, 512],                                      // 0000001101100
+    [13, 576],                                      // 0000001101101
+    [12, 53], [12, 53],                             // 000000110111x
+    [12, 54], [12, 54],                             // 000000111000x
+    [13, 896],                                      // 0000001110010
+    [13, 960],                                      // 0000001110011
+    [13, 1024],                                     // 0000001110100
+    [13, 1088],                                     // 0000001110101
+    [13, 1152],                                     // 0000001110110
+    [13, 1216],                                     // 0000001110111
+    [10, 64], [10, 64], [10, 64], [10, 64],         // 0000001111xxx
+    [10, 64], [10, 64], [10, 64], [10, 64]
+  ];
+
+  var blackTable2 = [
+    [8, 13], [8, 13], [8, 13], [8, 13],     // 00000100xxxx
+    [8, 13], [8, 13], [8, 13], [8, 13],
+    [8, 13], [8, 13], [8, 13], [8, 13],
+    [8, 13], [8, 13], [8, 13], [8, 13],
+    [11, 23], [11, 23],                     // 00000101000x
+    [12, 50],                               // 000001010010
+    [12, 51],                               // 000001010011
+    [12, 44],                               // 000001010100
+    [12, 45],                               // 000001010101
+    [12, 46],                               // 000001010110
+    [12, 47],                               // 000001010111
+    [12, 57],                               // 000001011000
+    [12, 58],                               // 000001011001
+    [12, 61],                               // 000001011010
+    [12, 256],                              // 000001011011
+    [10, 16], [10, 16], [10, 16], [10, 16], // 0000010111xx
+    [10, 17], [10, 17], [10, 17], [10, 17], // 0000011000xx
+    [12, 48],                               // 000001100100
+    [12, 49],                               // 000001100101
+    [12, 62],                               // 000001100110
+    [12, 63],                               // 000001100111
+    [12, 30],                               // 000001101000
+    [12, 31],                               // 000001101001
+    [12, 32],                               // 000001101010
+    [12, 33],                               // 000001101011
+    [12, 40],                               // 000001101100
+    [12, 41],                               // 000001101101
+    [11, 22], [11, 22],                     // 00000110111x
+    [8, 14], [8, 14], [8, 14], [8, 14],     // 00000111xxxx
+    [8, 14], [8, 14], [8, 14], [8, 14],
+    [8, 14], [8, 14], [8, 14], [8, 14],
+    [8, 14], [8, 14], [8, 14], [8, 14],
+    [7, 10], [7, 10], [7, 10], [7, 10],     // 0000100xxxxx
+    [7, 10], [7, 10], [7, 10], [7, 10],
+    [7, 10], [7, 10], [7, 10], [7, 10],
+    [7, 10], [7, 10], [7, 10], [7, 10],
+    [7, 10], [7, 10], [7, 10], [7, 10],
+    [7, 10], [7, 10], [7, 10], [7, 10],
+    [7, 10], [7, 10], [7, 10], [7, 10],
+    [7, 10], [7, 10], [7, 10], [7, 10],
+    [7, 11], [7, 11], [7, 11], [7, 11],     // 0000101xxxxx
+    [7, 11], [7, 11], [7, 11], [7, 11],
+    [7, 11], [7, 11], [7, 11], [7, 11],
+    [7, 11], [7, 11], [7, 11], [7, 11],
+    [7, 11], [7, 11], [7, 11], [7, 11],
+    [7, 11], [7, 11], [7, 11], [7, 11],
+    [7, 11], [7, 11], [7, 11], [7, 11],
+    [7, 11], [7, 11], [7, 11], [7, 11],
+    [9, 15], [9, 15], [9, 15], [9, 15],     // 000011000xxx
+    [9, 15], [9, 15], [9, 15], [9, 15],
+    [12, 128],                              // 000011001000
+    [12, 192],                              // 000011001001
+    [12, 26],                               // 000011001010
+    [12, 27],                               // 000011001011
+    [12, 28],                               // 000011001100
+    [12, 29],                               // 000011001101
+    [11, 19], [11, 19],                     // 00001100111x
+    [11, 20], [11, 20],                     // 00001101000x
+    [12, 34],                               // 000011010010
+    [12, 35],                               // 000011010011
+    [12, 36],                               // 000011010100
+    [12, 37],                               // 000011010101
+    [12, 38],                               // 000011010110
+    [12, 39],                               // 000011010111
+    [11, 21], [11, 21],                     // 00001101100x
+    [12, 42],                               // 000011011010
+    [12, 43],                               // 000011011011
+    [10, 0], [10, 0], [10, 0], [10, 0],     // 0000110111xx
+    [7, 12], [7, 12], [7, 12], [7, 12],     // 0000111xxxxx
+    [7, 12], [7, 12], [7, 12], [7, 12],
+    [7, 12], [7, 12], [7, 12], [7, 12],
+    [7, 12], [7, 12], [7, 12], [7, 12],
+    [7, 12], [7, 12], [7, 12], [7, 12],
+    [7, 12], [7, 12], [7, 12], [7, 12],
+    [7, 12], [7, 12], [7, 12], [7, 12],
+    [7, 12], [7, 12], [7, 12], [7, 12]
+  ];
+
+  var blackTable3 = [
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 0000xx
+    [6, 9],                                 // 000100
+    [6, 8],                                 // 000101
+    [5, 7], [5, 7],                         // 00011x
+    [4, 6], [4, 6], [4, 6], [4, 6],         // 0010xx
+    [4, 5], [4, 5], [4, 5], [4, 5],         // 0011xx
+    [3, 1], [3, 1], [3, 1], [3, 1],         // 010xxx
+    [3, 1], [3, 1], [3, 1], [3, 1],
+    [3, 4], [3, 4], [3, 4], [3, 4],         // 011xxx
+    [3, 4], [3, 4], [3, 4], [3, 4],
+    [2, 3], [2, 3], [2, 3], [2, 3],         // 10xxxx
+    [2, 3], [2, 3], [2, 3], [2, 3],
+    [2, 3], [2, 3], [2, 3], [2, 3],
+    [2, 3], [2, 3], [2, 3], [2, 3],
+    [2, 2], [2, 2], [2, 2], [2, 2],         // 11xxxx
+    [2, 2], [2, 2], [2, 2], [2, 2],
+    [2, 2], [2, 2], [2, 2], [2, 2],
+    [2, 2], [2, 2], [2, 2], [2, 2]
+  ];
+
+  function CCITTFaxStream(str, params) {
+    this.str = str;
+    this.dict = str.dict;
+
+    params = params || new Dict();
+
+    this.encoding = params.get('K') || 0;
+    this.eoline = params.get('EndOfLine') || false;
+    this.byteAlign = params.get('EncodedByteAlign') || false;
+    this.columns = params.get('Columns') || 1728;
+    this.rows = params.get('Rows') || 0;
+    var eoblock = params.get('EndOfBlock');
+    if (eoblock === null || eoblock === undefined)
+      eoblock = true;
+    this.eoblock = eoblock;
+    this.black = params.get('BlackIs1') || false;
+
+    this.codingLine = new Uint32Array(this.columns + 1);
+    this.refLine = new Uint32Array(this.columns + 2);
+
+    this.codingLine[0] = this.columns;
+    this.codingPos = 0;
+
+    this.row = 0;
+    this.nextLine2D = this.encoding < 0;
+    this.inputBits = 0;
+    this.inputBuf = 0;
+    this.outputBits = 0;
+    this.buf = EOF;
+
+    var code1;
+    while ((code1 = this.lookBits(12)) === 0) {
+      this.eatBits(1);
+    }
+    if (code1 == 1) {
+      this.eatBits(12);
+    }
+    if (this.encoding > 0) {
+      this.nextLine2D = !this.lookBits(1);
+      this.eatBits(1);
+    }
+
+    DecodeStream.call(this);
+  }
+
+  CCITTFaxStream.prototype = Object.create(DecodeStream.prototype);
+
+  CCITTFaxStream.prototype.readBlock = function CCITTFaxStream_readBlock() {
+    while (!this.eof) {
+      var c = this.lookChar();
+      this.buf = EOF;
+      this.ensureBuffer(this.bufferLength + 1);
+      this.buffer[this.bufferLength++] = c;
+    }
+  };
+
+  CCITTFaxStream.prototype.addPixels =
+    function ccittFaxStreamAddPixels(a1, blackPixels) {
+    var codingLine = this.codingLine;
+    var codingPos = this.codingPos;
+
+    if (a1 > codingLine[codingPos]) {
+      if (a1 > this.columns) {
+        info('row is wrong length');
+        this.err = true;
+        a1 = this.columns;
+      }
+      if ((codingPos & 1) ^ blackPixels) {
+        ++codingPos;
+      }
+
+      codingLine[codingPos] = a1;
+    }
+    this.codingPos = codingPos;
+  };
+
+  CCITTFaxStream.prototype.addPixelsNeg =
+    function ccittFaxStreamAddPixelsNeg(a1, blackPixels) {
+    var codingLine = this.codingLine;
+    var codingPos = this.codingPos;
+
+    if (a1 > codingLine[codingPos]) {
+      if (a1 > this.columns) {
+        info('row is wrong length');
+        this.err = true;
+        a1 = this.columns;
+      }
+      if ((codingPos & 1) ^ blackPixels)
+        ++codingPos;
+
+      codingLine[codingPos] = a1;
+    } else if (a1 < codingLine[codingPos]) {
+      if (a1 < 0) {
+        info('invalid code');
+        this.err = true;
+        a1 = 0;
+      }
+      while (codingPos > 0 && a1 < codingLine[codingPos - 1])
+        --codingPos;
+      codingLine[codingPos] = a1;
+    }
+
+    this.codingPos = codingPos;
+  };
+
+  CCITTFaxStream.prototype.lookChar = function CCITTFaxStream_lookChar() {
+    if (this.buf != EOF)
+      return this.buf;
+
+    var refLine = this.refLine;
+    var codingLine = this.codingLine;
+    var columns = this.columns;
+
+    var refPos, blackPixels, bits;
+
+    if (this.outputBits === 0) {
+      if (this.eof)
+        return null;
+
+      this.err = false;
+
+      var code1, code2, code3;
+      if (this.nextLine2D) {
+        for (var i = 0; codingLine[i] < columns; ++i)
+          refLine[i] = codingLine[i];
+
+        refLine[i++] = columns;
+        refLine[i] = columns;
+        codingLine[0] = 0;
+        this.codingPos = 0;
+        refPos = 0;
+        blackPixels = 0;
+
+        while (codingLine[this.codingPos] < columns) {
+          code1 = this.getTwoDimCode();
+          switch (code1) {
+            case twoDimPass:
+              this.addPixels(refLine[refPos + 1], blackPixels);
+              if (refLine[refPos + 1] < columns)
+                refPos += 2;
+              break;
+            case twoDimHoriz:
+              code1 = code2 = 0;
+              if (blackPixels) {
+                do {
+                  code1 += (code3 = this.getBlackCode());
+                } while (code3 >= 64);
+                do {
+                  code2 += (code3 = this.getWhiteCode());
+                } while (code3 >= 64);
+              } else {
+                do {
+                  code1 += (code3 = this.getWhiteCode());
+                } while (code3 >= 64);
+                do {
+                  code2 += (code3 = this.getBlackCode());
+                } while (code3 >= 64);
+              }
+              this.addPixels(codingLine[this.codingPos] +
+                             code1, blackPixels);
+              if (codingLine[this.codingPos] < columns) {
+                this.addPixels(codingLine[this.codingPos] + code2,
+                               blackPixels ^ 1);
+              }
+              while (refLine[refPos] <= codingLine[this.codingPos] &&
+                     refLine[refPos] < columns) {
+                refPos += 2;
+              }
+              break;
+            case twoDimVertR3:
+              this.addPixels(refLine[refPos] + 3, blackPixels);
+              blackPixels ^= 1;
+              if (codingLine[this.codingPos] < columns) {
+                ++refPos;
+                while (refLine[refPos] <= codingLine[this.codingPos] &&
+                       refLine[refPos] < columns)
+                  refPos += 2;
+              }
+              break;
+            case twoDimVertR2:
+              this.addPixels(refLine[refPos] + 2, blackPixels);
+              blackPixels ^= 1;
+              if (codingLine[this.codingPos] < columns) {
+                ++refPos;
+                while (refLine[refPos] <= codingLine[this.codingPos] &&
+                       refLine[refPos] < columns) {
+                  refPos += 2;
+                }
+              }
+              break;
+            case twoDimVertR1:
+              this.addPixels(refLine[refPos] + 1, blackPixels);
+              blackPixels ^= 1;
+              if (codingLine[this.codingPos] < columns) {
+                ++refPos;
+                while (refLine[refPos] <= codingLine[this.codingPos] &&
+                       refLine[refPos] < columns)
+                  refPos += 2;
+              }
+              break;
+            case twoDimVert0:
+              this.addPixels(refLine[refPos], blackPixels);
+              blackPixels ^= 1;
+              if (codingLine[this.codingPos] < columns) {
+                ++refPos;
+                while (refLine[refPos] <= codingLine[this.codingPos] &&
+                       refLine[refPos] < columns)
+                  refPos += 2;
+              }
+              break;
+            case twoDimVertL3:
+              this.addPixelsNeg(refLine[refPos] - 3, blackPixels);
+              blackPixels ^= 1;
+              if (codingLine[this.codingPos] < columns) {
+                if (refPos > 0)
+                  --refPos;
+                else
+                  ++refPos;
+                while (refLine[refPos] <= codingLine[this.codingPos] &&
+                       refLine[refPos] < columns)
+                  refPos += 2;
+              }
+              break;
+            case twoDimVertL2:
+              this.addPixelsNeg(refLine[refPos] - 2, blackPixels);
+              blackPixels ^= 1;
+              if (codingLine[this.codingPos] < columns) {
+                if (refPos > 0)
+                  --refPos;
+                else
+                  ++refPos;
+                while (refLine[refPos] <= codingLine[this.codingPos] &&
+                       refLine[refPos] < columns)
+                  refPos += 2;
+              }
+              break;
+            case twoDimVertL1:
+              this.addPixelsNeg(refLine[refPos] - 1, blackPixels);
+              blackPixels ^= 1;
+              if (codingLine[this.codingPos] < columns) {
+                if (refPos > 0)
+                  --refPos;
+                else
+                  ++refPos;
+
+                while (refLine[refPos] <= codingLine[this.codingPos] &&
+                       refLine[refPos] < columns)
+                  refPos += 2;
+              }
+              break;
+            case EOF:
+              this.addPixels(columns, 0);
+              this.eof = true;
+              break;
+            default:
+              info('bad 2d code');
+              this.addPixels(columns, 0);
+              this.err = true;
+          }
+        }
+      } else {
+        codingLine[0] = 0;
+        this.codingPos = 0;
+        blackPixels = 0;
+        while (codingLine[this.codingPos] < columns) {
+          code1 = 0;
+          if (blackPixels) {
+            do {
+              code1 += (code3 = this.getBlackCode());
+            } while (code3 >= 64);
+          } else {
+            do {
+              code1 += (code3 = this.getWhiteCode());
+            } while (code3 >= 64);
+          }
+          this.addPixels(codingLine[this.codingPos] + code1, blackPixels);
+          blackPixels ^= 1;
+        }
+      }
+
+      if (this.byteAlign)
+        this.inputBits &= ~7;
+
+      var gotEOL = false;
+
+      if (!this.eoblock && this.row == this.rows - 1) {
+        this.eof = true;
+      } else {
+        code1 = this.lookBits(12);
+        while (code1 === 0) {
+          this.eatBits(1);
+          code1 = this.lookBits(12);
+        }
+        if (code1 == 1) {
+          this.eatBits(12);
+          gotEOL = true;
+        } else if (code1 == EOF) {
+          this.eof = true;
+        }
+      }
+
+      if (!this.eof && this.encoding > 0) {
+        this.nextLine2D = !this.lookBits(1);
+        this.eatBits(1);
+      }
+
+      if (this.eoblock && gotEOL) {
+        code1 = this.lookBits(12);
+        if (code1 == 1) {
+          this.eatBits(12);
+          if (this.encoding > 0) {
+            this.lookBits(1);
+            this.eatBits(1);
+          }
+          if (this.encoding >= 0) {
+            for (var i = 0; i < 4; ++i) {
+              code1 = this.lookBits(12);
+              if (code1 != 1)
+                info('bad rtc code: ' + code1);
+              this.eatBits(12);
+              if (this.encoding > 0) {
+                this.lookBits(1);
+                this.eatBits(1);
+              }
+            }
+          }
+          this.eof = true;
+        }
+      } else if (this.err && this.eoline) {
+        while (true) {
+          code1 = this.lookBits(13);
+          if (code1 == EOF) {
+            this.eof = true;
+            return null;
+          }
+          if ((code1 >> 1) == 1) {
+            break;
+          }
+          this.eatBits(1);
+        }
+        this.eatBits(12);
+        if (this.encoding > 0) {
+          this.eatBits(1);
+          this.nextLine2D = !(code1 & 1);
+        }
+      }
+
+      if (codingLine[0] > 0)
+        this.outputBits = codingLine[this.codingPos = 0];
+      else
+        this.outputBits = codingLine[this.codingPos = 1];
+      this.row++;
+    }
+
+    if (this.outputBits >= 8) {
+      this.buf = (this.codingPos & 1) ? 0 : 0xFF;
+      this.outputBits -= 8;
+      if (this.outputBits === 0 && codingLine[this.codingPos] < columns) {
+        this.codingPos++;
+        this.outputBits = (codingLine[this.codingPos] -
+                           codingLine[this.codingPos - 1]);
+      }
+    } else {
+      var bits = 8;
+      this.buf = 0;
+      do {
+        if (this.outputBits > bits) {
+          this.buf <<= bits;
+          if (!(this.codingPos & 1)) {
+            this.buf |= 0xFF >> (8 - bits);
+          }
+          this.outputBits -= bits;
+          bits = 0;
+        } else {
+          this.buf <<= this.outputBits;
+          if (!(this.codingPos & 1)) {
+            this.buf |= 0xFF >> (8 - this.outputBits);
+          }
+          bits -= this.outputBits;
+          this.outputBits = 0;
+          if (codingLine[this.codingPos] < columns) {
+            this.codingPos++;
+            this.outputBits = (codingLine[this.codingPos] -
+                               codingLine[this.codingPos - 1]);
+          } else if (bits > 0) {
+            this.buf <<= bits;
+            bits = 0;
+          }
+        }
+      } while (bits);
+    }
+    if (this.black) {
+      this.buf ^= 0xFF;
+    }
+    return this.buf;
+  };
+
+  // This functions returns the code found from the table.
+  // The start and end parameters set the boundaries for searching the table.
+  // The limit parameter is optional. Function returns an array with three
+  // values. The first array element indicates whether a valid code is being
+  // returned. The second array element is the actual code. The third array
+  // element indicates whether EOF was reached.
+  CCITTFaxStream.prototype.findTableCode =
+    function ccittFaxStreamFindTableCode(start, end, table, limit) {
+
+    var limitValue = limit || 0;
+    for (var i = start; i <= end; ++i) {
+      var code = this.lookBits(i);
+      if (code == EOF)
+        return [true, 1, false];
+      if (i < end)
+        code <<= end - i;
+      if (!limitValue || code >= limitValue) {
+        var p = table[code - limitValue];
+        if (p[0] == i) {
+          this.eatBits(i);
+          return [true, p[1], true];
+        }
+      }
+    }
+    return [false, 0, false];
+  };
+
+  CCITTFaxStream.prototype.getTwoDimCode =
+    function ccittFaxStreamGetTwoDimCode() {
+
+    var code = 0;
+    var p;
+    if (this.eoblock) {
+      code = this.lookBits(7);
+      p = twoDimTable[code];
+      if (p && p[0] > 0) {
+        this.eatBits(p[0]);
+        return p[1];
+      }
+    } else {
+      var result = this.findTableCode(1, 7, twoDimTable);
+      if (result[0] && result[2])
+        return result[1];
+    }
+    info('Bad two dim code');
+    return EOF;
+  };
+
+  CCITTFaxStream.prototype.getWhiteCode =
+    function ccittFaxStreamGetWhiteCode() {
+
+    var code = 0;
+    var p;
+    var n;
+    if (this.eoblock) {
+      code = this.lookBits(12);
+      if (code == EOF)
+        return 1;
+
+      if ((code >> 5) === 0)
+        p = whiteTable1[code];
+      else
+        p = whiteTable2[code >> 3];
+
+      if (p[0] > 0) {
+        this.eatBits(p[0]);
+        return p[1];
+      }
+    } else {
+      var result = this.findTableCode(1, 9, whiteTable2);
+      if (result[0])
+        return result[1];
+
+      result = this.findTableCode(11, 12, whiteTable1);
+      if (result[0])
+        return result[1];
+    }
+    info('bad white code');
+    this.eatBits(1);
+    return 1;
+  };
+
+  CCITTFaxStream.prototype.getBlackCode =
+    function ccittFaxStreamGetBlackCode() {
+
+    var code, p;
+    if (this.eoblock) {
+      code = this.lookBits(13);
+      if (code == EOF)
+        return 1;
+      if ((code >> 7) === 0)
+        p = blackTable1[code];
+      else if ((code >> 9) === 0 && (code >> 7) !== 0)
+        p = blackTable2[(code >> 1) - 64];
+      else
+        p = blackTable3[code >> 7];
+
+      if (p[0] > 0) {
+        this.eatBits(p[0]);
+        return p[1];
+      }
+    } else {
+      var result = this.findTableCode(2, 6, blackTable3);
+      if (result[0])
+        return result[1];
+
+      result = this.findTableCode(7, 12, blackTable2, 64);
+      if (result[0])
+        return result[1];
+
+      result = this.findTableCode(10, 13, blackTable1);
+      if (result[0])
+        return result[1];
+    }
+    info('bad black code');
+    this.eatBits(1);
+    return 1;
+  };
+
+  CCITTFaxStream.prototype.lookBits = function CCITTFaxStream_lookBits(n) {
+    var c;
+    while (this.inputBits < n) {
+      if ((c = this.str.getByte()) === -1) {
+        if (this.inputBits === 0)
+          return EOF;
+        return ((this.inputBuf << (n - this.inputBits)) &
+                (0xFFFF >> (16 - n)));
+      }
+      this.inputBuf = (this.inputBuf << 8) + c;
+      this.inputBits += 8;
+    }
+    return (this.inputBuf >> (this.inputBits - n)) & (0xFFFF >> (16 - n));
+  };
+
+  CCITTFaxStream.prototype.eatBits = function CCITTFaxStream_eatBits(n) {
+    if ((this.inputBits -= n) < 0)
+      this.inputBits = 0;
+  };
+
+  return CCITTFaxStream;
+})();
+
+var LZWStream = (function LZWStreamClosure() {
+  function LZWStream(str, earlyChange) {
+    this.str = str;
+    this.dict = str.dict;
+    this.cachedData = 0;
+    this.bitsCached = 0;
+
+    var maxLzwDictionarySize = 4096;
+    var lzwState = {
+      earlyChange: earlyChange,
+      codeLength: 9,
+      nextCode: 258,
+      dictionaryValues: new Uint8Array(maxLzwDictionarySize),
+      dictionaryLengths: new Uint16Array(maxLzwDictionarySize),
+      dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize),
+      currentSequence: new Uint8Array(maxLzwDictionarySize),
+      currentSequenceLength: 0
+    };
+    for (var i = 0; i < 256; ++i) {
+      lzwState.dictionaryValues[i] = i;
+      lzwState.dictionaryLengths[i] = 1;
+    }
+    this.lzwState = lzwState;
+
+    DecodeStream.call(this);
+  }
+
+  LZWStream.prototype = Object.create(DecodeStream.prototype);
+
+  LZWStream.prototype.readBits = function LZWStream_readBits(n) {
+    var bitsCached = this.bitsCached;
+    var cachedData = this.cachedData;
+    while (bitsCached < n) {
+      var c = this.str.getByte();
+      if (c === -1) {
+        this.eof = true;
+        return null;
+      }
+      cachedData = (cachedData << 8) | c;
+      bitsCached += 8;
+    }
+    this.bitsCached = (bitsCached -= n);
+    this.cachedData = cachedData;
+    this.lastCode = null;
+    return (cachedData >>> bitsCached) & ((1 << n) - 1);
+  };
+
+  LZWStream.prototype.readBlock = function LZWStream_readBlock() {
+    var blockSize = 512;
+    var estimatedDecodedSize = blockSize * 2, decodedSizeDelta = blockSize;
+    var i, j, q;
+
+    var lzwState = this.lzwState;
+    if (!lzwState)
+      return; // eof was found
+
+    var earlyChange = lzwState.earlyChange;
+    var nextCode = lzwState.nextCode;
+    var dictionaryValues = lzwState.dictionaryValues;
+    var dictionaryLengths = lzwState.dictionaryLengths;
+    var dictionaryPrevCodes = lzwState.dictionaryPrevCodes;
+    var codeLength = lzwState.codeLength;
+    var prevCode = lzwState.prevCode;
+    var currentSequence = lzwState.currentSequence;
+    var currentSequenceLength = lzwState.currentSequenceLength;
+
+    var decodedLength = 0;
+    var currentBufferLength = this.bufferLength;
+    var buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);
+
+    for (i = 0; i < blockSize; i++) {
+      var code = this.readBits(codeLength);
+      var hasPrev = currentSequenceLength > 0;
+      if (code < 256) {
+        currentSequence[0] = code;
+        currentSequenceLength = 1;
+      } else if (code >= 258) {
+        if (code < nextCode) {
+          currentSequenceLength = dictionaryLengths[code];
+          for (j = currentSequenceLength - 1, q = code; j >= 0; j--) {
+            currentSequence[j] = dictionaryValues[q];
+            q = dictionaryPrevCodes[q];
+          }
+        } else {
+          currentSequence[currentSequenceLength++] = currentSequence[0];
+        }
+      } else if (code == 256) {
+        codeLength = 9;
+        nextCode = 258;
+        currentSequenceLength = 0;
+        continue;
+      } else {
+        this.eof = true;
+        delete this.lzwState;
+        break;
+      }
+
+      if (hasPrev) {
+        dictionaryPrevCodes[nextCode] = prevCode;
+        dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1;
+        dictionaryValues[nextCode] = currentSequence[0];
+        nextCode++;
+        codeLength = (nextCode + earlyChange) & (nextCode + earlyChange - 1) ?
+          codeLength : Math.min(Math.log(nextCode + earlyChange) /
+          0.6931471805599453 + 1, 12) | 0;
+      }
+      prevCode = code;
+
+      decodedLength += currentSequenceLength;
+      if (estimatedDecodedSize < decodedLength) {
+        do {
+          estimatedDecodedSize += decodedSizeDelta;
+        } while (estimatedDecodedSize < decodedLength);
+        buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);
+      }
+      for (j = 0; j < currentSequenceLength; j++)
+        buffer[currentBufferLength++] = currentSequence[j];
+    }
+    lzwState.nextCode = nextCode;
+    lzwState.codeLength = codeLength;
+    lzwState.prevCode = prevCode;
+    lzwState.currentSequenceLength = currentSequenceLength;
+
+    this.bufferLength = currentBufferLength;
+  };
+
+  return LZWStream;
+})();
+
+var NullStream = (function NullStreamClosure() {
+  function NullStream() {
+    Stream.call(this, new Uint8Array(0));
+  }
+
+  NullStream.prototype = Stream.prototype;
+
+  return NullStream;
+})();
+
+
+var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
+  setup: function wphSetup(handler) {
+    var pdfManager;
+
+    function loadDocument(recoveryMode) {
+      var loadDocumentPromise = new Promise();
+
+      var parseSuccess = function parseSuccess() {
+        var numPagesPromise = pdfManager.ensureModel('numPages');
+        var fingerprintPromise = pdfManager.ensureModel('fingerprint');
+        var outlinePromise = pdfManager.ensureCatalog('documentOutline');
+        var infoPromise = pdfManager.ensureModel('documentInfo');
+        var metadataPromise = pdfManager.ensureCatalog('metadata');
+        var encryptedPromise = pdfManager.ensureXRef('encrypt');
+        var javaScriptPromise = pdfManager.ensureCatalog('javaScript');
+        Promise.all([numPagesPromise, fingerprintPromise, outlinePromise,
+          infoPromise, metadataPromise, encryptedPromise,
+          javaScriptPromise]).then(
+            function onDocReady(results) {
+
+          var doc = {
+            numPages: results[0],
+            fingerprint: results[1],
+            outline: results[2],
+            info: results[3],
+            metadata: results[4],
+            encrypted: !!results[5],
+            javaScript: results[6]
+          };
+          loadDocumentPromise.resolve(doc);
+        },
+        parseFailure);
+      };
+
+      var parseFailure = function parseFailure(e) {
+        loadDocumentPromise.reject(e);
+      };
+
+      pdfManager.ensureModel('checkHeader', []).then(function() {
+        pdfManager.ensureModel('parseStartXRef', []).then(function() {
+          pdfManager.ensureModel('parse', [recoveryMode]).then(
+              parseSuccess, parseFailure);
+        }, parseFailure);
+      }, parseFailure);
+
+      return loadDocumentPromise;
+    }
+
+    function getPdfManager(data) {
+      var pdfManagerPromise = new Promise();
+
+      var source = data.source;
+      var disableRange = data.disableRange;
+      if (source.data) {
+        try {
+          pdfManager = new LocalPdfManager(source.data, source.password);
+          pdfManagerPromise.resolve();
+        } catch (ex) {
+          pdfManagerPromise.reject(ex);
+        }
+        return pdfManagerPromise;
+      } else if (source.chunkedViewerLoading) {
+        try {
+          pdfManager = new NetworkPdfManager(source, handler);
+          pdfManagerPromise.resolve();
+        } catch (ex) {
+          pdfManagerPromise.reject(ex);
+        }
+        return pdfManagerPromise;
+      }
+
+      var networkManager = new NetworkManager(source.url, {
+        httpHeaders: source.httpHeaders
+      });
+      var fullRequestXhrId = networkManager.requestFull({
+        onHeadersReceived: function onHeadersReceived() {
+          if (disableRange) {
+            return;
+          }
+
+          var fullRequestXhr = networkManager.getRequestXhr(fullRequestXhrId);
+          if (fullRequestXhr.getResponseHeader('Accept-Ranges') !== 'bytes') {
+            return;
+          }
+
+          var contentEncoding =
+            fullRequestXhr.getResponseHeader('Content-Encoding') || 'identity';
+          if (contentEncoding !== 'identity') {
+            return;
+          }
+
+          var length = fullRequestXhr.getResponseHeader('Content-Length');
+          length = parseInt(length, 10);
+          if (!isInt(length)) {
+            return;
+          }
+
+          // NOTE: by cancelling the full request, and then issuing range
+          // requests, there will be an issue for sites where you can only
+          // request the pdf once. However, if this is the case, then the
+          // server should not be returning that it can support range requests.
+          networkManager.abortRequest(fullRequestXhrId);
+
+          source.length = length;
+          try {
+            pdfManager = new NetworkPdfManager(source, handler);
+            pdfManagerPromise.resolve(pdfManager);
+          } catch (ex) {
+            pdfManagerPromise.reject(ex);
+          }
+        },
+
+        onDone: function onDone(args) {
+          // the data is array, instantiating directly from it
+          try {
+            pdfManager = new LocalPdfManager(args.chunk, source.password);
+            pdfManagerPromise.resolve();
+          } catch (ex) {
+            pdfManagerPromise.reject(ex);
+          }
+        },
+
+        onError: function onError(status) {
+          if (status == 404) {
+            var exception = new MissingPDFException( 'Missing PDF "' +
+                source.url + '".');
+            handler.send('MissingPDF', { exception: exception });
+          } else {
+            handler.send('DocError', 'Unexpected server response (' +
+                status + ') while retrieving PDF "' +
+                source.url + '".');
+          }
+        },
+
+        onProgress: function onProgress(evt) {
+          handler.send('DocProgress', {
+            loaded: evt.loaded,
+            total: evt.lengthComputable ? evt.total : void(0)
+          });
+        }
+      });
+
+      return pdfManagerPromise;
+    }
+
+    handler.on('test', function wphSetupTest(data) {
+      // check if Uint8Array can be sent to worker
+      if (!(data instanceof Uint8Array)) {
+        handler.send('test', false);
+        return;
+      }
+      // check if the response property is supported by xhr
+      var xhr = new XMLHttpRequest();
+      var responseExists = 'response' in xhr;
+      // check if the property is actually implemented
+      try {
+        var dummy = xhr.responseType;
+      } catch (e) {
+        responseExists = false;
+      }
+      if (!responseExists) {
+        handler.send('test', false);
+        return;
+      }
+      handler.send('test', true);
+    });
+
+    handler.on('GetDocRequest', function wphSetupDoc(data) {
+
+      var onSuccess = function(doc) {
+        handler.send('GetDoc', { pdfInfo: doc });
+        pdfManager.ensureModel('traversePages', []).then(null, onFailure);
+      };
+
+      var onFailure = function(e) {
+        if (e instanceof PasswordException) {
+          if (e.code === PasswordResponses.NEED_PASSWORD) {
+            handler.send('NeedPassword', {
+              exception: e
+            });
+          } else if (e.code === PasswordResponses.INCORRECT_PASSWORD) {
+            handler.send('IncorrectPassword', {
+              exception: e
+            });
+          }
+        } else if (e instanceof InvalidPDFException) {
+          handler.send('InvalidPDF', {
+            exception: e
+          });
+        } else if (e instanceof MissingPDFException) {
+          handler.send('MissingPDF', {
+            exception: e
+          });
+        } else {
+          handler.send('UnknownError', {
+            exception: new UnknownErrorException(e.message, e.toString())
+          });
+        }
+      };
+
+      PDFJS.maxImageSize = data.maxImageSize === undefined ?
+                           -1 : data.maxImageSize;
+      PDFJS.disableFontFace = data.disableFontFace;
+
+      getPdfManager(data).then(function pdfManagerReady() {
+        loadDocument(false).then(onSuccess, function loadFailure(ex) {
+          // Try again with recoveryMode == true
+          if (!(ex instanceof XRefParseException)) {
+            if (ex instanceof PasswordException) {
+              // after password exception prepare to receive a new password
+              // to repeat loading
+              pdfManager.passwordChangedPromise = new Promise();
+              pdfManager.passwordChangedPromise.then(pdfManagerReady);
+            }
+
+            onFailure(ex);
+            return;
+          }
+
+          pdfManager.requestLoadedStream();
+          pdfManager.onLoadedStream().then(function() {
+            loadDocument(true).then(onSuccess, onFailure);
+          });
+        }, onFailure);
+      }, onFailure);
+    });
+
+    handler.on('GetPageRequest', function wphSetupGetPage(data) {
+      var pageIndex = data.pageIndex;
+      pdfManager.getPage(pageIndex).then(function(page) {
+        var rotatePromise = pdfManager.ensure(page, 'rotate');
+        var refPromise = pdfManager.ensure(page, 'ref');
+        var viewPromise = pdfManager.ensure(page, 'view');
+
+        Promise.all([rotatePromise, refPromise, viewPromise]).then(
+            function(results) {
+          var page = {
+            pageIndex: data.pageIndex,
+            rotate: results[0],
+            ref: results[1],
+            view: results[2]
+          };
+
+          handler.send('GetPage', { pageInfo: page });
+        });
+      });
+    });
+
+    handler.on('GetDestinations',
+      function wphSetupGetDestinations(data, promise) {
+        pdfManager.ensureCatalog('destinations').then(function(destinations) {
+          promise.resolve(destinations);
+        });
+      }
+    );
+
+    handler.on('GetData', function wphSetupGetData(data, promise) {
+      pdfManager.requestLoadedStream();
+      pdfManager.onLoadedStream().then(function(stream) {
+        promise.resolve(stream.bytes);
+      });
+    });
+
+    handler.on('DataLoaded', function wphSetupDataLoaded(data, promise) {
+      pdfManager.onLoadedStream().then(function(stream) {
+        promise.resolve({ length: stream.bytes.byteLength });
+      });
+    });
+
+    handler.on('UpdatePassword', function wphSetupUpdatePassword(data) {
+      pdfManager.updatePassword(data);
+    });
+
+    handler.on('GetAnnotationsRequest', function wphSetupGetAnnotations(data) {
+      pdfManager.getPage(data.pageIndex).then(function(page) {
+        pdfManager.ensure(page, 'getAnnotationsData', []).then(
+          function(annotationsData) {
+            handler.send('GetAnnotations', {
+              pageIndex: data.pageIndex,
+              annotations: annotationsData
+            });
+          }
+        );
+      });
+    });
+
+    handler.on('RenderPageRequest', function wphSetupRenderPage(data) {
+      pdfManager.getPage(data.pageIndex).then(function(page) {
+
+        var pageNum = data.pageIndex + 1;
+        var start = Date.now();
+        // Pre compile the pdf page and fetch the fonts/images.
+        page.getOperatorList(handler).then(function(operatorList) {
+
+          log('page=%d - getOperatorList: time=%dms, len=%d', pageNum,
+              Date.now() - start, operatorList.fnArray.length);
+
+        }, function(e) {
+
+          var minimumStackMessage =
+              'worker.js: while trying to getPage() and getOperatorList()';
+
+          var wrappedException;
+
+          // Turn the error into an obj that can be serialized
+          if (typeof e === 'string') {
+            wrappedException = {
+              message: e,
+              stack: minimumStackMessage
+            };
+          } else if (typeof e === 'object') {
+            wrappedException = {
+              message: e.message || e.toString(),
+              stack: e.stack || minimumStackMessage
+            };
+          } else {
+            wrappedException = {
+              message: 'Unknown exception type: ' + (typeof e),
+              stack: minimumStackMessage
+            };
+          }
+
+          handler.send('PageError', {
+            pageNum: pageNum,
+            error: wrappedException
+          });
+        });
+      });
+    }, this);
+
+    handler.on('GetTextContent', function wphExtractText(data, promise) {
+      pdfManager.getPage(data.pageIndex).then(function(page) {
+        var pageNum = data.pageIndex + 1;
+        var start = Date.now();
+        page.extractTextContent().then(function(textContent) {
+          promise.resolve(textContent);
+          log('text indexing: page=%d - time=%dms', pageNum,
+              Date.now() - start);
+        }, function (e) {
+          // Skip errored pages
+          promise.reject(e);
+        });
+      });
+    });
+
+    handler.on('Terminate', function wphTerminate(data, promise) {
+      pdfManager.terminate();
+      promise.resolve();
+    });
+  }
+};
+
+var consoleTimer = {};
+
+var workerConsole = {
+  log: function log() {
+    var args = Array.prototype.slice.call(arguments);
+    globalScope.postMessage({
+      action: 'console_log',
+      data: args
+    });
+  },
+
+  error: function error() {
+    var args = Array.prototype.slice.call(arguments);
+    globalScope.postMessage({
+      action: 'console_error',
+      data: args
+    });
+    throw 'pdf.js execution error';
+  },
+
+  time: function time(name) {
+    consoleTimer[name] = Date.now();
+  },
+
+  timeEnd: function timeEnd(name) {
+    var time = consoleTimer[name];
+    if (!time) {
+      error('Unkown timer name ' + name);
+    }
+    this.log('Timer:', name, Date.now() - time);
+  }
+};
+
+// Worker thread?
+if (typeof window === 'undefined') {
+  globalScope.console = workerConsole;
+
+  // Add a logger so we can pass warnings on to the main thread, errors will
+  // throw an exception which will be forwarded on automatically.
+  PDFJS.LogManager.addLogger({
+    warn: function(msg) {
+      globalScope.postMessage({
+        action: '_warn',
+        data: msg
+      });
+    }
+  });
+
+  var handler = new MessageHandler('worker_processor', this);
+  WorkerMessageHandler.setup(handler);
+}
+
+
+var JpxImage = (function JpxImageClosure() {
+  // Table E.1
+  var SubbandsGainLog2 = {
+    'LL': 0,
+    'LH': 1,
+    'HL': 1,
+    'HH': 2
+  };
+  function JpxImage() {
+    this.failOnCorruptedImage = false;
+  }
+  JpxImage.prototype = {
+    load: function JpxImage_load(url) {
+      var xhr = new XMLHttpRequest();
+      xhr.open('GET', url, true);
+      xhr.responseType = 'arraybuffer';
+      xhr.onload = (function() {
+        // TODO catch parse error
+        var data = new Uint8Array(xhr.response || xhr.mozResponseArrayBuffer);
+        this.parse(data);
+        if (this.onload)
+          this.onload();
+      }).bind(this);
+      xhr.send(null);
+    },
+    parse: function JpxImage_parse(data) {
+      function readUint(data, offset, bytes) {
+        var n = 0;
+        for (var i = 0; i < bytes; i++)
+          n = n * 256 + (data[offset + i] & 0xFF);
+        return n;
+      }
+      var position = 0, length = data.length;
+      while (position < length) {
+        var headerSize = 8;
+        var lbox = readUint(data, position, 4);
+        var tbox = readUint(data, position + 4, 4);
+        position += headerSize;
+        if (lbox == 1) {
+          lbox = readUint(data, position, 8);
+          position += 8;
+          headerSize += 8;
+        }
+        if (lbox === 0)
+          lbox = length - position + headerSize;
+        if (lbox < headerSize)
+          error('JPX error: Invalid box field size');
+        var dataLength = lbox - headerSize;
+        var jumpDataLength = true;
+        switch (tbox) {
+          case 0x6A501A1A: // 'jP\032\032'
+            // TODO
+            break;
+          case 0x6A703268: // 'jp2h'
+            jumpDataLength = false; // parsing child boxes
+            break;
+          case 0x636F6C72: // 'colr'
+            // TODO
+            break;
+          case 0x6A703263: // 'jp2c'
+            this.parseCodestream(data, position, position + dataLength);
+            break;
+        }
+        if (jumpDataLength)
+          position += dataLength;
+      }
+    },
+    parseCodestream: function JpxImage_parseCodestream(data, start, end) {
+      var context = {};
+      try {
+        var position = start;
+        while (position < end) {
+          var code = readUint16(data, position);
+          position += 2;
+
+          var length = 0, j;
+          switch (code) {
+            case 0xFF4F: // Start of codestream (SOC)
+              context.mainHeader = true;
+              break;
+            case 0xFFD9: // End of codestream (EOC)
+              break;
+            case 0xFF51: // Image and tile size (SIZ)
+              length = readUint16(data, position);
+              var siz = {};
+              siz.Xsiz = readUint32(data, position + 4);
+              siz.Ysiz = readUint32(data, position + 8);
+              siz.XOsiz = readUint32(data, position + 12);
+              siz.YOsiz = readUint32(data, position + 16);
+              siz.XTsiz = readUint32(data, position + 20);
+              siz.YTsiz = readUint32(data, position + 24);
+              siz.XTOsiz = readUint32(data, position + 28);
+              siz.YTOsiz = readUint32(data, position + 32);
+              var componentsCount = readUint16(data, position + 36);
+              siz.Csiz = componentsCount;
+              var components = [];
+              j = position + 38;
+              for (var i = 0; i < componentsCount; i++) {
+                var component = {
+                  precision: (data[j] & 0x7F) + 1,
+                  isSigned: !!(data[j] & 0x80),
+                  XRsiz: data[j + 1],
+                  YRsiz: data[j + 1]
+                };
+                calculateComponentDimensions(component, siz);
+                components.push(component);
+              }
+              context.SIZ = siz;
+              context.components = components;
+              calculateTileGrids(context, components);
+              context.QCC = [];
+              context.COC = [];
+              break;
+            case 0xFF5C: // Quantization default (QCD)
+              length = readUint16(data, position);
+              var qcd = {};
+              j = position + 2;
+              var sqcd = data[j++];
+              var spqcdSize, scalarExpounded;
+              switch (sqcd & 0x1F) {
+                case 0:
+                  spqcdSize = 8;
+                  scalarExpounded = true;
+                  break;
+                case 1:
+                  spqcdSize = 16;
+                  scalarExpounded = false;
+                  break;
+                case 2:
+                  spqcdSize = 16;
+                  scalarExpounded = true;
+                  break;
+                default:
+                  throw 'Invalid SQcd value ' + sqcd;
+              }
+              qcd.noQuantization = spqcdSize == 8;
+              qcd.scalarExpounded = scalarExpounded;
+              qcd.guardBits = sqcd >> 5;
+              var spqcds = [];
+              while (j < length + position) {
+                var spqcd = {};
+                if (spqcdSize == 8) {
+                  spqcd.epsilon = data[j++] >> 3;
+                  spqcd.mu = 0;
+                } else {
+                  spqcd.epsilon = data[j] >> 3;
+                  spqcd.mu = ((data[j] & 0x7) << 8) | data[j + 1];
+                  j += 2;
+                }
+                spqcds.push(spqcd);
+              }
+              qcd.SPqcds = spqcds;
+              if (context.mainHeader)
+                context.QCD = qcd;
+              else {
+                context.currentTile.QCD = qcd;
+                context.currentTile.QCC = [];
+              }
+              break;
+            case 0xFF5D: // Quantization component (QCC)
+              length = readUint16(data, position);
+              var qcc = {};
+              j = position + 2;
+              var cqcc;
+              if (context.SIZ.Csiz < 257)
+                cqcc = data[j++];
+              else {
+                cqcc = readUint16(data, j);
+                j += 2;
+              }
+              var sqcd = data[j++];
+              var spqcdSize, scalarExpounded;
+              switch (sqcd & 0x1F) {
+                case 0:
+                  spqcdSize = 8;
+                  scalarExpounded = true;
+                  break;
+                case 1:
+                  spqcdSize = 16;
+                  scalarExpounded = false;
+                  break;
+                case 2:
+                  spqcdSize = 16;
+                  scalarExpounded = true;
+                  break;
+                default:
+                  throw 'Invalid SQcd value ' + sqcd;
+              }
+              qcc.noQuantization = spqcdSize == 8;
+              qcc.scalarExpounded = scalarExpounded;
+              qcc.guardBits = sqcd >> 5;
+              var spqcds = [];
+              while (j < length + position) {
+                var spqcd = {};
+                if (spqcdSize == 8) {
+                  spqcd.epsilon = data[j++] >> 3;
+                  spqcd.mu = 0;
+                } else {
+                  spqcd.epsilon = data[j] >> 3;
+                  spqcd.mu = ((data[j] & 0x7) << 8) | data[j + 1];
+                  j += 2;
+                }
+                spqcds.push(spqcd);
+              }
+              qcc.SPqcds = spqcds;
+              if (context.mainHeader)
+                context.QCC[cqcc] = qcc;
+              else
+                context.currentTile.QCC[cqcc] = qcc;
+              break;
+            case 0xFF52: // Coding style default (COD)
+              length = readUint16(data, position);
+              var cod = {};
+              j = position + 2;
+              var scod = data[j++];
+              cod.entropyCoderWithCustomPrecincts = !!(scod & 1);
+              cod.sopMarkerUsed = !!(scod & 2);
+              cod.ephMarkerUsed = !!(scod & 4);
+              var codingStyle = {};
+              cod.progressionOrder = data[j++];
+              cod.layersCount = readUint16(data, j);
+              j += 2;
+              cod.multipleComponentTransform = data[j++];
+
+              cod.decompositionLevelsCount = data[j++];
+              cod.xcb = (data[j++] & 0xF) + 2;
+              cod.ycb = (data[j++] & 0xF) + 2;
+              var blockStyle = data[j++];
+              cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1);
+              cod.resetContextProbabilities = !!(blockStyle & 2);
+              cod.terminationOnEachCodingPass = !!(blockStyle & 4);
+              cod.verticalyStripe = !!(blockStyle & 8);
+              cod.predictableTermination = !!(blockStyle & 16);
+              cod.segmentationSymbolUsed = !!(blockStyle & 32);
+              cod.transformation = data[j++];
+              if (cod.entropyCoderWithCustomPrecincts) {
+                var precinctsSizes = {};
+                while (j < length + position) {
+                  var precinctsSize = data[j];
+                  precinctsSizes.push({
+                    PPx: precinctsSize & 0xF,
+                    PPy: precinctsSize >> 4
+                  });
+                }
+                cod.precinctsSizes = precinctsSizes;
+              }
+
+              if (cod.sopMarkerUsed || cod.ephMarkerUsed ||
+                  cod.selectiveArithmeticCodingBypass ||
+                  cod.resetContextProbabilities ||
+                  cod.terminationOnEachCodingPass ||
+                  cod.verticalyStripe || cod.predictableTermination)
+                throw 'Unsupported COD options: ' +
+                  globalScope.JSON.stringify(cod);
+
+              if (context.mainHeader)
+                context.COD = cod;
+              else {
+                context.currentTile.COD = cod;
+                context.currentTile.COC = [];
+              }
+              break;
+            case 0xFF90: // Start of tile-part (SOT)
+              length = readUint16(data, position);
+              var tile = {};
+              tile.index = readUint16(data, position + 2);
+              tile.length = readUint32(data, position + 4);
+              tile.dataEnd = tile.length + position - 2;
+              tile.partIndex = data[position + 8];
+              tile.partsCount = data[position + 9];
+
+              context.mainHeader = false;
+              if (tile.partIndex === 0) {
+                // reset component specific settings
+                tile.COD = context.COD;
+                tile.COC = context.COC.slice(0); // clone of the global COC
+                tile.QCD = context.QCD;
+                tile.QCC = context.QCC.slice(0); // clone of the global COC
+              }
+              context.currentTile = tile;
+              break;
+            case 0xFF93: // Start of data (SOD)
+              var tile = context.currentTile;
+              if (tile.partIndex === 0) {
+                initializeTile(context, tile.index);
+                buildPackets(context);
+              }
+
+              // moving to the end of the data
+              length = tile.dataEnd - position;
+
+              parseTilePackets(context, data, position, length);
+              break;
+            case 0xFF64: // Comment (COM)
+              length = readUint16(data, position);
+              // skipping content
+              break;
+            default:
+              throw 'Unknown codestream code: ' + code.toString(16);
+          }
+          position += length;
+        }
+      } catch (e) {
+        if (this.failOnCorruptedImage)
+          error('JPX error: ' + e);
+        else
+          warn('JPX error: ' + e + '. Trying to recover');
+      }
+      this.tiles = transformComponents(context);
+      this.width = context.SIZ.Xsiz - context.SIZ.XOsiz;
+      this.height = context.SIZ.Ysiz - context.SIZ.YOsiz;
+      this.componentsCount = context.SIZ.Csiz;
+    }
+  };
+  function readUint32(data, offset) {
+    return (data[offset] << 24) | (data[offset + 1] << 16) |
+      (data[offset + 2] << 8) | data[offset + 3];
+  }
+  function readUint16(data, offset) {
+    return (data[offset] << 8) | data[offset + 1];
+  }
+  function log2(x) {
+    var n = 1, i = 0;
+    while (x > n) {
+      n <<= 1;
+      i++;
+    }
+    return i;
+  }
+  function calculateComponentDimensions(component, siz) {
+    // Section B.2 Component mapping
+    component.x0 = Math.ceil(siz.XOsiz / component.XRsiz);
+    component.x1 = Math.ceil(siz.Xsiz / component.XRsiz);
+    component.y0 = Math.ceil(siz.YOsiz / component.YRsiz);
+    component.y1 = Math.ceil(siz.Ysiz / component.YRsiz);
+    component.width = component.x1 - component.x0;
+    component.height = component.y1 - component.y0;
+  }
+  function calculateTileGrids(context, components) {
+    var siz = context.SIZ;
+    // Section B.3 Division into tile and tile-components
+    var tiles = [];
+    var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz);
+    var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz);
+    for (var q = 0; q < numYtiles; q++) {
+      for (var p = 0; p < numXtiles; p++) {
+        var tile = {};
+        tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz);
+        tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz);
+        tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz);
+        tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz);
+        tile.width = tile.tx1 - tile.tx0;
+        tile.height = tile.ty1 - tile.ty0;
+        tile.components = [];
+        tiles.push(tile);
+      }
+    }
+    context.tiles = tiles;
+
+    var componentsCount = siz.Csiz;
+    for (var i = 0, ii = componentsCount; i < ii; i++) {
+      var component = components[i];
+      var tileComponents = [];
+      for (var j = 0, jj = tiles.length; j < jj; j++) {
+        var tileComponent = {}, tile = tiles[j];
+        tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz);
+        tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz);
+        tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz);
+        tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz);
+        tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0;
+        tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0;
+        tile.components[i] = tileComponent;
+      }
+    }
+  }
+  function getBlocksDimensions(context, component, r) {
+    var codOrCoc = component.codingStyleParameters;
+    var result = {};
+    if (!codOrCoc.entropyCoderWithCustomPrecincts) {
+      result.PPx = 15;
+      result.PPy = 15;
+    } else {
+      result.PPx = codOrCoc.precinctsSizes[r].PPx;
+      result.PPy = codOrCoc.precinctsSizes[r].PPy;
+    }
+    // calculate codeblock size as described in section B.7
+    result.xcb_ = r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) :
+      Math.min(codOrCoc.xcb, result.PPx);
+    result.ycb_ = r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) :
+      Math.min(codOrCoc.ycb, result.PPy);
+    return result;
+  }
+  function buildPrecincts(context, resolution, dimensions) {
+    // Section B.6 Division resolution to precincts
+    var precinctWidth = 1 << dimensions.PPx;
+    var precinctHeight = 1 << dimensions.PPy;
+    var numprecinctswide = resolution.trx1 > resolution.trx0 ?
+      Math.ceil(resolution.trx1 / precinctWidth) -
+      Math.floor(resolution.trx0 / precinctWidth) : 0;
+    var numprecinctshigh = resolution.try1 > resolution.try0 ?
+      Math.ceil(resolution.try1 / precinctHeight) -
+      Math.floor(resolution.try0 / precinctHeight) : 0;
+    var numprecincts = numprecinctswide * numprecinctshigh;
+    var precinctXOffset = Math.floor(resolution.trx0 / precinctWidth) *
+      precinctWidth;
+    var precinctYOffset = Math.floor(resolution.try0 / precinctHeight) *
+      precinctHeight;
+    resolution.precinctParameters = {
+      precinctXOffset: precinctXOffset,
+      precinctYOffset: precinctYOffset,
+      precinctWidth: precinctWidth,
+      precinctHeight: precinctHeight,
+      numprecinctswide: numprecinctswide,
+      numprecinctshigh: numprecinctshigh,
+      numprecincts: numprecincts
+    };
+  }
+  function buildCodeblocks(context, subband, dimensions) {
+    // Section B.7 Division sub-band into code-blocks
+    var xcb_ = dimensions.xcb_;
+    var ycb_ = dimensions.ycb_;
+    var codeblockWidth = 1 << xcb_;
+    var codeblockHeight = 1 << ycb_;
+    var cbx0 = Math.floor(subband.tbx0 / codeblockWidth);
+    var cby0 = Math.floor(subband.tby0 / codeblockHeight);
+    var cbx1 = Math.ceil(subband.tbx1 / codeblockWidth);
+    var cby1 = Math.ceil(subband.tby1 / codeblockHeight);
+    var precinctParameters = subband.resolution.precinctParameters;
+    var codeblocks = [];
+    var precincts = [];
+    for (var j = cby0; j < cby1; j++) {
+      for (var i = cbx0; i < cbx1; i++) {
+        var codeblock = {
+          cbx: i,
+          cby: j,
+          tbx0: codeblockWidth * i,
+          tby0: codeblockHeight * j,
+          tbx1: codeblockWidth * (i + 1),
+          tby1: codeblockHeight * (j + 1)
+        };
+        // calculate precinct number
+        var pi = Math.floor((codeblock.tbx0 -
+          precinctParameters.precinctXOffset) /
+          precinctParameters.precinctWidth);
+        var pj = Math.floor((codeblock.tby0 -
+          precinctParameters.precinctYOffset) /
+          precinctParameters.precinctHeight);
+        var precinctNumber = pj +
+          pi * precinctParameters.numprecinctswide;
+        codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0);
+        codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0);
+        codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1);
+        codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1);
+        codeblock.precinctNumber = precinctNumber;
+        codeblock.subbandType = subband.type;
+        var coefficientsLength = (codeblock.tbx1_ - codeblock.tbx0_) *
+          (codeblock.tby1_ - codeblock.tby0_);
+        codeblock.Lblock = 3;
+        codeblocks.push(codeblock);
+        // building precinct for the sub-band
+        var precinct;
+        if (precinctNumber in precincts) {
+          precinct = precincts[precinctNumber];
+          precinct.cbxMin = Math.min(precinct.cbxMin, i);
+          precinct.cbyMin = Math.min(precinct.cbyMin, j);
+          precinct.cbxMax = Math.max(precinct.cbxMax, i);
+          precinct.cbyMax = Math.max(precinct.cbyMax, j);
+        } else {
+          precincts[precinctNumber] = precinct = {
+            cbxMin: i,
+            cbyMin: j,
+            cbxMax: i,
+            cbyMax: j
+          };
+        }
+        codeblock.precinct = precinct;
+      }
+    }
+    subband.codeblockParameters = {
+      codeblockWidth: xcb_,
+      codeblockHeight: ycb_,
+      numcodeblockwide: cbx1 - cbx0 + 1,
+      numcodeblockhigh: cby1 - cby1 + 1
+    };
+    subband.codeblocks = codeblocks;
+    for (var i = 0, ii = codeblocks.length; i < ii; i++) {
+      var codeblock = codeblocks[i];
+      var precinctNumber = codeblock.precinctNumber;
+    }
+    subband.precincts = precincts;
+  }
+  function createPacket(resolution, precinctNumber, layerNumber) {
+    var precinctCodeblocks = [];
+    // Section B.10.8 Order of info in packet
+    var subbands = resolution.subbands;
+    // sub-bands already ordered in 'LL', 'HL', 'LH', and 'HH' sequence
+    for (var i = 0, ii = subbands.length; i < ii; i++) {
+      var subband = subbands[i];
+      var codeblocks = subband.codeblocks;
+      for (var j = 0, jj = codeblocks.length; j < jj; j++) {
+        var codeblock = codeblocks[j];
+        if (codeblock.precinctNumber != precinctNumber)
+          continue;
+        precinctCodeblocks.push(codeblock);
+      }
+    }
+    return {
+      layerNumber: layerNumber,
+      codeblocks: precinctCodeblocks
+    };
+  }
+  function LayerResolutionComponentPositionIterator(context) {
+    var siz = context.SIZ;
+    var tileIndex = context.currentTile.index;
+    var tile = context.tiles[tileIndex];
+    var layersCount = tile.codingStyleDefaultParameters.layersCount;
+    var componentsCount = siz.Csiz;
+    var maxDecompositionLevelsCount = 0;
+    for (var q = 0; q < componentsCount; q++) {
+      maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount,
+        tile.components[q].codingStyleParameters.decompositionLevelsCount);
+    }
+
+    var l = 0, r = 0, i = 0, k = 0;
+
+    this.nextPacket = function JpxImage_nextPacket() {
+      // Section B.12.1.1 Layer-resolution-component-position
+      for (; l < layersCount; l++) {
+        for (; r <= maxDecompositionLevelsCount; r++) {
+          for (; i < componentsCount; i++) {
+            var component = tile.components[i];
+            if (r > component.codingStyleParameters.decompositionLevelsCount)
+              continue;
+
+            var resolution = component.resolutions[r];
+            var numprecincts = resolution.precinctParameters.numprecincts;
+            for (; k < numprecincts;) {
+              var packet = createPacket(resolution, k, l);
+              k++;
+              return packet;
+            }
+            k = 0;
+          }
+          i = 0;
+        }
+        r = 0;
+      }
+      throw 'Out of packets';
+    };
+  }
+  function ResolutionLayerComponentPositionIterator(context) {
+    var siz = context.SIZ;
+    var tileIndex = context.currentTile.index;
+    var tile = context.tiles[tileIndex];
+    var layersCount = tile.codingStyleDefaultParameters.layersCount;
+    var componentsCount = siz.Csiz;
+    var maxDecompositionLevelsCount = 0;
+    for (var q = 0; q < componentsCount; q++) {
+      maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount,
+        tile.components[q].codingStyleParameters.decompositionLevelsCount);
+    }
+
+    var r = 0, l = 0, i = 0, k = 0;
+
+    this.nextPacket = function JpxImage_nextPacket() {
+      // Section B.12.1.2 Resolution-layer-component-position
+      for (; r <= maxDecompositionLevelsCount; r++) {
+        for (; l < layersCount; l++) {
+          for (; i < componentsCount; i++) {
+            var component = tile.components[i];
+            if (r > component.codingStyleParameters.decompositionLevelsCount)
+              continue;
+
+            var resolution = component.resolutions[r];
+            var numprecincts = resolution.precinctParameters.numprecincts;
+            for (; k < numprecincts;) {
+              var packet = createPacket(resolution, k, l);
+              k++;
+              return packet;
+            }
+            k = 0;
+          }
+          i = 0;
+        }
+        l = 0;
+      }
+      throw 'Out of packets';
+    };
+  }
+  function buildPackets(context) {
+    var siz = context.SIZ;
+    var tileIndex = context.currentTile.index;
+    var tile = context.tiles[tileIndex];
+    var componentsCount = siz.Csiz;
+    // Creating resolutions and sub-bands for each component
+    for (var c = 0; c < componentsCount; c++) {
+      var component = tile.components[c];
+      var decompositionLevelsCount =
+        component.codingStyleParameters.decompositionLevelsCount;
+      // Section B.5 Resolution levels and sub-bands
+      var resolutions = [];
+      var subbands = [];
+      for (var r = 0; r <= decompositionLevelsCount; r++) {
+        var blocksDimensions = getBlocksDimensions(context, component, r);
+        var resolution = {};
+        var scale = 1 << (decompositionLevelsCount - r);
+        resolution.trx0 = Math.ceil(component.tcx0 / scale);
+        resolution.try0 = Math.ceil(component.tcy0 / scale);
+        resolution.trx1 = Math.ceil(component.tcx1 / scale);
+        resolution.try1 = Math.ceil(component.tcy1 / scale);
+        buildPrecincts(context, resolution, blocksDimensions);
+        resolutions.push(resolution);
+
+        var subband;
+        if (r === 0) {
+          // one sub-band (LL) with last decomposition
+          subband = {};
+          subband.type = 'LL';
+          subband.tbx0 = Math.ceil(component.tcx0 / scale);
+          subband.tby0 = Math.ceil(component.tcy0 / scale);
+          subband.tbx1 = Math.ceil(component.tcx1 / scale);
+          subband.tby1 = Math.ceil(component.tcy1 / scale);
+          subband.resolution = resolution;
+          buildCodeblocks(context, subband, blocksDimensions);
+          subbands.push(subband);
+          resolution.subbands = [subband];
+        } else {
+          var bscale = 1 << (decompositionLevelsCount - r + 1);
+          var resolutionSubbands = [];
+          // three sub-bands (HL, LH and HH) with rest of decompositions
+          subband = {};
+          subband.type = 'HL';
+          subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);
+          subband.tby0 = Math.ceil(component.tcy0 / bscale);
+          subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);
+          subband.tby1 = Math.ceil(component.tcy1 / bscale);
+          subband.resolution = resolution;
+          buildCodeblocks(context, subband, blocksDimensions);
+          subbands.push(subband);
+          resolutionSubbands.push(subband);
+
+          subband = {};
+          subband.type = 'LH';
+          subband.tbx0 = Math.ceil(component.tcx0 / bscale);
+          subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);
+          subband.tbx1 = Math.ceil(component.tcx1 / bscale);
+          subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);
+          subband.resolution = resolution;
+          buildCodeblocks(context, subband, blocksDimensions);
+          subbands.push(subband);
+          resolutionSubbands.push(subband);
+
+          subband = {};
+          subband.type = 'HH';
+          subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);
+          subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);
+          subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);
+          subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);
+          subband.resolution = resolution;
+          buildCodeblocks(context, subband, blocksDimensions);
+          subbands.push(subband);
+          resolutionSubbands.push(subband);
+
+          resolution.subbands = resolutionSubbands;
+        }
+      }
+      component.resolutions = resolutions;
+      component.subbands = subbands;
+    }
+    // Generate the packets sequence
+    var progressionOrder = tile.codingStyleDefaultParameters.progressionOrder;
+    var packetsIterator;
+    switch (progressionOrder) {
+      case 0:
+        tile.packetsIterator =
+          new LayerResolutionComponentPositionIterator(context);
+        break;
+      case 1:
+        tile.packetsIterator =
+          new ResolutionLayerComponentPositionIterator(context);
+        break;
+      default:
+        throw 'Unsupported progression order ' + progressionOrder;
+    }
+  }
+  function parseTilePackets(context, data, offset, dataLength) {
+    var position = 0;
+    var buffer, bufferSize = 0, skipNextBit = false;
+    function readBits(count) {
+      while (bufferSize < count) {
+        var b = data[offset + position];
+        position++;
+        if (skipNextBit) {
+          buffer = (buffer << 7) | b;
+          bufferSize += 7;
+          skipNextBit = false;
+        } else {
+          buffer = (buffer << 8) | b;
+          bufferSize += 8;
+        }
+        if (b == 0xFF) {
+          skipNextBit = true;
+        }
+      }
+      bufferSize -= count;
+      return (buffer >>> bufferSize) & ((1 << count) - 1);
+    }
+    function alignToByte() {
+      bufferSize = 0;
+      if (skipNextBit) {
+        position++;
+        skipNextBit = false;
+      }
+    }
+    function readCodingpasses() {
+      var value = readBits(1);
+      if (value === 0)
+        return 1;
+      value = (value << 1) | readBits(1);
+      if (value == 0x02)
+        return 2;
+      value = (value << 2) | readBits(2);
+      if (value <= 0x0E)
+        return (value & 0x03) + 3;
+      value = (value << 5) | readBits(5);
+      if (value <= 0x1FE)
+        return (value & 0x1F) + 6;
+      value = (value << 7) | readBits(7);
+      return (value & 0x7F) + 37;
+    }
+    var tileIndex = context.currentTile.index;
+    var tile = context.tiles[tileIndex];
+    var packetsIterator = tile.packetsIterator;
+    while (position < dataLength) {
+      var packet = packetsIterator.nextPacket();
+      if (!readBits(1)) {
+        alignToByte();
+        continue;
+      }
+      var layerNumber = packet.layerNumber;
+      var queue = [];
+      for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) {
+        var codeblock = packet.codeblocks[i];
+        var precinct = codeblock.precinct;
+        var codeblockColumn = codeblock.cbx - precinct.cbxMin;
+        var codeblockRow = codeblock.cby - precinct.cbyMin;
+        var codeblockIncluded = false;
+        var firstTimeInclusion = false;
+        if ('included' in codeblock) {
+          codeblockIncluded = !!readBits(1);
+        } else {
+          // reading inclusion tree
+          var precinct = codeblock.precinct;
+          var inclusionTree, zeroBitPlanesTree;
+          if ('inclusionTree' in precinct) {
+            inclusionTree = precinct.inclusionTree;
+          } else {
+            // building inclusion and zero bit-planes trees
+            var width = precinct.cbxMax - precinct.cbxMin + 1;
+            var height = precinct.cbyMax - precinct.cbyMin + 1;
+            inclusionTree = new InclusionTree(width, height, layerNumber);
+            zeroBitPlanesTree = new TagTree(width, height);
+            precinct.inclusionTree = inclusionTree;
+            precinct.zeroBitPlanesTree = zeroBitPlanesTree;
+          }
+
+          if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) {
+            while (true) {
+              if (readBits(1)) {
+                var valueReady = !inclusionTree.nextLevel();
+                if (valueReady) {
+                  codeblock.included = true;
+                  codeblockIncluded = firstTimeInclusion = true;
+                  break;
+                }
+              } else {
+                inclusionTree.incrementValue(layerNumber);
+                break;
+              }
+            }
+          }
+        }
+        if (!codeblockIncluded)
+          continue;
+        if (firstTimeInclusion) {
+          zeroBitPlanesTree = precinct.zeroBitPlanesTree;
+          zeroBitPlanesTree.reset(codeblockColumn, codeblockRow);
+          while (true) {
+            if (readBits(1)) {
+              var valueReady = !zeroBitPlanesTree.nextLevel();
+              if (valueReady)
+                break;
+            } else
+              zeroBitPlanesTree.incrementValue();
+          }
+          codeblock.zeroBitPlanes = zeroBitPlanesTree.value;
+        }
+        var codingpasses = readCodingpasses();
+        while (readBits(1))
+          codeblock.Lblock++;
+        var codingpassesLog2 = log2(codingpasses);
+        // rounding down log2
+        var bits = ((codingpasses < (1 << codingpassesLog2)) ?
+          codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock;
+        var codedDataLength = readBits(bits);
+        queue.push({
+          codeblock: codeblock,
+          codingpasses: codingpasses,
+          dataLength: codedDataLength
+        });
+      }
+      alignToByte();
+      while (queue.length > 0) {
+        var packetItem = queue.shift();
+        var codeblock = packetItem.codeblock;
+        if (!('data' in codeblock))
+          codeblock.data = [];
+        codeblock.data.push({
+          data: data,
+          start: offset + position,
+          end: offset + position + packetItem.dataLength,
+          codingpasses: packetItem.codingpasses
+        });
+        position += packetItem.dataLength;
+      }
+    }
+    return position;
+  }
+  function copyCoefficients(coefficients, x0, y0, width, height,
+                            delta, mb, codeblocks, transformation,
+                            segmentationSymbolUsed) {
+    var r = 0.5; // formula (E-6)
+    for (var i = 0, ii = codeblocks.length; i < ii; ++i) {
+      var codeblock = codeblocks[i];
+      var blockWidth = codeblock.tbx1_ - codeblock.tbx0_;
+      var blockHeight = codeblock.tby1_ - codeblock.tby0_;
+      if (blockWidth === 0 || blockHeight === 0)
+        continue;
+      if (!('data' in codeblock))
+        continue;
+
+      var bitModel, currentCodingpassType;
+      bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType,
+        codeblock.zeroBitPlanes);
+      currentCodingpassType = 2; // first bit plane starts from cleanup
+
+      // collect data
+      var data = codeblock.data, totalLength = 0, codingpasses = 0;
+      for (var q = 0, qq = data.length; q < qq; q++) {
+        var dataItem = data[q];
+        totalLength += dataItem.end - dataItem.start;
+        codingpasses += dataItem.codingpasses;
+      }
+      var encodedData = new Uint8Array(totalLength), k = 0;
+      for (var q = 0, qq = data.length; q < qq; q++) {
+        var dataItem = data[q];
+        var chunk = dataItem.data.subarray(dataItem.start, dataItem.end);
+        encodedData.set(chunk, k);
+        k += chunk.length;
+      }
+      // decoding the item
+      var decoder = new ArithmeticDecoder(encodedData, 0, totalLength);
+      bitModel.setDecoder(decoder);
+
+      for (var q = 0; q < codingpasses; q++) {
+        switch (currentCodingpassType) {
+          case 0:
+            bitModel.runSignificancePropogationPass();
+            break;
+          case 1:
+            bitModel.runMagnitudeRefinementPass();
+            break;
+          case 2:
+            bitModel.runCleanupPass();
+            if (segmentationSymbolUsed)
+              bitModel.checkSegmentationSymbol();
+            break;
+        }
+        currentCodingpassType = (currentCodingpassType + 1) % 3;
+      }
+
+      var offset = (codeblock.tbx0_ - x0) + (codeblock.tby0_ - y0) * width;
+      var position = 0;
+      for (var j = 0; j < blockHeight; j++) {
+        for (var k = 0; k < blockWidth; k++) {
+          var n = (bitModel.coefficentsSign[position] ? -1 : 1) *
+            bitModel.coefficentsMagnitude[position];
+          var nb = bitModel.bitsDecoded[position], correction;
+          if (transformation === 0 || mb > nb) {
+            // use r only if transformation is irreversible or
+            // not all bitplanes were decoded for reversible transformation
+            n += n < 0 ? n - r : n > 0 ? n + r : 0;
+            correction = 1 << (mb - nb);
+          } else
+            correction = 1;
+          coefficients[offset++] = n * correction * delta;
+          position++;
+        }
+        offset += width - blockWidth;
+      }
+    }
+  }
+  function transformTile(context, tile, c) {
+    var component = tile.components[c];
+    var codingStyleParameters = component.codingStyleParameters;
+    var quantizationParameters = component.quantizationParameters;
+    var decompositionLevelsCount =
+      codingStyleParameters.decompositionLevelsCount;
+    var spqcds = quantizationParameters.SPqcds;
+    var scalarExpounded = quantizationParameters.scalarExpounded;
+    var guardBits = quantizationParameters.guardBits;
+    var transformation = codingStyleParameters.transformation;
+    var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed;
+    var precision = context.components[c].precision;
+
+    var subbandCoefficients = [];
+    var k = 0, b = 0;
+    for (var i = 0; i <= decompositionLevelsCount; i++) {
+      var resolution = component.resolutions[i];
+
+      for (var j = 0, jj = resolution.subbands.length; j < jj; j++) {
+        var mu, epsilon;
+        if (!scalarExpounded) {
+          // formula E-5
+          mu = spqcds[0].mu;
+          epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0);
+        } else {
+          mu = spqcds[b].mu;
+          epsilon = spqcds[b].epsilon;
+        }
+
+        var subband = resolution.subbands[j];
+        var width = subband.tbx1 - subband.tbx0;
+        var height = subband.tby1 - subband.tby0;
+        var gainLog2 = SubbandsGainLog2[subband.type];
+
+        // calulate quantization coefficient (Section E.1.1.1)
+        var delta = Math.pow(2, (precision + gainLog2) - epsilon) *
+          (1 + mu / 2048);
+        var mb = (guardBits + epsilon - 1);
+
+        var coefficients = new Float32Array(width * height);
+        copyCoefficients(coefficients, subband.tbx0, subband.tby0,
+          width, height, delta, mb, subband.codeblocks, transformation,
+          segmentationSymbolUsed);
+
+        subbandCoefficients.push({
+          width: width,
+          height: height,
+          items: coefficients
+        });
+
+        b++;
+      }
+    }
+
+    var transformation = codingStyleParameters.transformation;
+    var transform = transformation === 0 ? new IrreversibleTransform() :
+      new ReversibleTransform();
+    var result = transform.calculate(subbandCoefficients,
+      component.tcx0, component.tcy0);
+    return {
+      left: component.tcx0,
+      top: component.tcy0,
+      width: result.width,
+      height: result.height,
+      items: result.items
+    };
+  }
+  function transformComponents(context) {
+    var siz = context.SIZ;
+    var components = context.components;
+    var componentsCount = siz.Csiz;
+    var resultImages = [];
+    for (var i = 0, ii = context.tiles.length; i < ii; i++) {
+      var tile = context.tiles[i];
+      var result = [];
+      for (var c = 0; c < componentsCount; c++) {
+        var image = transformTile(context, tile, c);
+        result.push(image);
+      }
+
+      // Section G.2.2 Inverse multi component transform
+      if (tile.codingStyleDefaultParameters.multipleComponentTransform) {
+        var y0items = result[0].items;
+        var y1items = result[1].items;
+        var y2items = result[2].items;
+        for (var j = 0, jj = y0items.length; j < jj; j++) {
+          var y0 = y0items[j], y1 = y1items[j], y2 = y2items[j];
+          var i1 = y0 - ((y2 + y1) >> 2);
+          y1items[j] = i1;
+          y0items[j] = y2 + i1;
+          y2items[j] = y1 + i1;
+        }
+      }
+
+      // Section G.1 DC level shifting to unsigned component values
+      for (var c = 0; c < componentsCount; c++) {
+        var component = components[c];
+        if (component.isSigned)
+          continue;
+
+        var offset = 1 << (component.precision - 1);
+        var tileImage = result[c];
+        var items = tileImage.items;
+        for (var j = 0, jj = items.length; j < jj; j++)
+          items[j] += offset;
+      }
+
+      // To simplify things: shift and clamp output to 8 bit unsigned
+      for (var c = 0; c < componentsCount; c++) {
+        var component = components[c];
+        var offset = component.isSigned ? 128 : 0;
+        var shift = component.precision - 8;
+        var tileImage = result[c];
+        var items = tileImage.items;
+        var data = new Uint8Array(items.length);
+        for (var j = 0, jj = items.length; j < jj; j++) {
+          var value = (items[j] >> shift) + offset;
+          data[j] = value < 0 ? 0 : value > 255 ? 255 : value;
+        }
+        result[c].items = data;
+      }
+
+      resultImages.push(result);
+    }
+    return resultImages;
+  }
+  function initializeTile(context, tileIndex) {
+    var siz = context.SIZ;
+    var componentsCount = siz.Csiz;
+    var tile = context.tiles[tileIndex];
+    var resultTiles = [];
+    for (var c = 0; c < componentsCount; c++) {
+      var component = tile.components[c];
+      var qcdOrQcc = c in context.currentTile.QCC ?
+        context.currentTile.QCC[c] : context.currentTile.QCD;
+      component.quantizationParameters = qcdOrQcc;
+      var codOrCoc = c in context.currentTile.COC ?
+        context.currentTile.COC[c] : context.currentTile.COD;
+      component.codingStyleParameters = codOrCoc;
+    }
+    tile.codingStyleDefaultParameters = context.currentTile.COD;
+  }
+
+  // Section B.10.2 Tag trees
+  var TagTree = (function TagTreeClosure() {
+    function TagTree(width, height) {
+      var levelsLength = log2(Math.max(width, height)) + 1;
+      this.levels = [];
+      for (var i = 0; i < levelsLength; i++) {
+        var level = {
+          width: width,
+          height: height,
+          items: []
+        };
+        this.levels.push(level);
+        width = Math.ceil(width / 2);
+        height = Math.ceil(height / 2);
+      }
+    }
+    TagTree.prototype = {
+      reset: function TagTree_reset(i, j) {
+        var currentLevel = 0, value = 0;
+        while (currentLevel < this.levels.length) {
+          var level = this.levels[currentLevel];
+          var index = i + j * level.width;
+          if (index in level.items) {
+            value = level.items[index];
+            break;
+          }
+          level.index = index;
+          i >>= 1;
+          j >>= 1;
+          currentLevel++;
+        }
+        currentLevel--;
+        var level = this.levels[currentLevel];
+        level.items[level.index] = value;
+        this.currentLevel = currentLevel;
+        delete this.value;
+      },
+      incrementValue: function TagTree_incrementValue() {
+        var level = this.levels[this.currentLevel];
+        level.items[level.index]++;
+      },
+      nextLevel: function TagTree_nextLevel() {
+        var currentLevel = this.currentLevel;
+        var level = this.levels[currentLevel];
+        var value = level.items[level.index];
+        currentLevel--;
+        if (currentLevel < 0) {
+          this.value = value;
+          return false;
+        }
+
+        this.currentLevel = currentLevel;
+        var level = this.levels[currentLevel];
+        level.items[level.index] = value;
+        return true;
+      }
+    };
+    return TagTree;
+  })();
+
+  var InclusionTree = (function InclusionTreeClosure() {
+    function InclusionTree(width, height,  defaultValue) {
+      var levelsLength = log2(Math.max(width, height)) + 1;
+      this.levels = [];
+      for (var i = 0; i < levelsLength; i++) {
+        var items = new Uint8Array(width * height);
+        for (var j = 0, jj = items.length; j < jj; j++)
+          items[j] = defaultValue;
+
+        var level = {
+          width: width,
+          height: height,
+          items: items
+        };
+        this.levels.push(level);
+
+        width = Math.ceil(width / 2);
+        height = Math.ceil(height / 2);
+      }
+    }
+    InclusionTree.prototype = {
+      reset: function InclusionTree_reset(i, j, stopValue) {
+        var currentLevel = 0;
+        while (currentLevel < this.levels.length) {
+          var level = this.levels[currentLevel];
+          var index = i + j * level.width;
+          level.index = index;
+          var value = level.items[index];
+
+          if (value == 0xFF)
+            break;
+
+          if (value > stopValue) {
+            this.currentLevel = currentLevel;
+            // already know about this one, propagating the value to top levels
+            this.propagateValues();
+            return false;
+          }
+
+          i >>= 1;
+          j >>= 1;
+          currentLevel++;
+        }
+        this.currentLevel = currentLevel - 1;
+        return true;
+      },
+      incrementValue: function InclusionTree_incrementValue(stopValue) {
+        var level = this.levels[this.currentLevel];
+        level.items[level.index] = stopValue + 1;
+        this.propagateValues();
+      },
+      propagateValues: function InclusionTree_propagateValues() {
+        var levelIndex = this.currentLevel;
+        var level = this.levels[levelIndex];
+        var currentValue = level.items[level.index];
+        while (--levelIndex >= 0) {
+          var level = this.levels[levelIndex];
+          level.items[level.index] = currentValue;
+        }
+      },
+      nextLevel: function InclusionTree_nextLevel() {
+        var currentLevel = this.currentLevel;
+        var level = this.levels[currentLevel];
+        var value = level.items[level.index];
+        level.items[level.index] = 0xFF;
+        currentLevel--;
+        if (currentLevel < 0)
+          return false;
+
+        this.currentLevel = currentLevel;
+        var level = this.levels[currentLevel];
+        level.items[level.index] = value;
+        return true;
+      }
+    };
+    return InclusionTree;
+  })();
+
+  // Implements C.3. Arithmetic decoding procedures
+  var ArithmeticDecoder = (function ArithmeticDecoderClosure() {
+    var QeTable = [
+      {qe: 0x5601, nmps: 1, nlps: 1, switchFlag: 1},
+      {qe: 0x3401, nmps: 2, nlps: 6, switchFlag: 0},
+      {qe: 0x1801, nmps: 3, nlps: 9, switchFlag: 0},
+      {qe: 0x0AC1, nmps: 4, nlps: 12, switchFlag: 0},
+      {qe: 0x0521, nmps: 5, nlps: 29, switchFlag: 0},
+      {qe: 0x0221, nmps: 38, nlps: 33, switchFlag: 0},
+      {qe: 0x5601, nmps: 7, nlps: 6, switchFlag: 1},
+      {qe: 0x5401, nmps: 8, nlps: 14, switchFlag: 0},
+      {qe: 0x4801, nmps: 9, nlps: 14, switchFlag: 0},
+      {qe: 0x3801, nmps: 10, nlps: 14, switchFlag: 0},
+      {qe: 0x3001, nmps: 11, nlps: 17, switchFlag: 0},
+      {qe: 0x2401, nmps: 12, nlps: 18, switchFlag: 0},
+      {qe: 0x1C01, nmps: 13, nlps: 20, switchFlag: 0},
+      {qe: 0x1601, nmps: 29, nlps: 21, switchFlag: 0},
+      {qe: 0x5601, nmps: 15, nlps: 14, switchFlag: 1},
+      {qe: 0x5401, nmps: 16, nlps: 14, switchFlag: 0},
+      {qe: 0x5101, nmps: 17, nlps: 15, switchFlag: 0},
+      {qe: 0x4801, nmps: 18, nlps: 16, switchFlag: 0},
+      {qe: 0x3801, nmps: 19, nlps: 17, switchFlag: 0},
+      {qe: 0x3401, nmps: 20, nlps: 18, switchFlag: 0},
+      {qe: 0x3001, nmps: 21, nlps: 19, switchFlag: 0},
+      {qe: 0x2801, nmps: 22, nlps: 19, switchFlag: 0},
+      {qe: 0x2401, nmps: 23, nlps: 20, switchFlag: 0},
+      {qe: 0x2201, nmps: 24, nlps: 21, switchFlag: 0},
+      {qe: 0x1C01, nmps: 25, nlps: 22, switchFlag: 0},
+      {qe: 0x1801, nmps: 26, nlps: 23, switchFlag: 0},
+      {qe: 0x1601, nmps: 27, nlps: 24, switchFlag: 0},
+      {qe: 0x1401, nmps: 28, nlps: 25, switchFlag: 0},
+      {qe: 0x1201, nmps: 29, nlps: 26, switchFlag: 0},
+      {qe: 0x1101, nmps: 30, nlps: 27, switchFlag: 0},
+      {qe: 0x0AC1, nmps: 31, nlps: 28, switchFlag: 0},
+      {qe: 0x09C1, nmps: 32, nlps: 29, switchFlag: 0},
+      {qe: 0x08A1, nmps: 33, nlps: 30, switchFlag: 0},
+      {qe: 0x0521, nmps: 34, nlps: 31, switchFlag: 0},
+      {qe: 0x0441, nmps: 35, nlps: 32, switchFlag: 0},
+      {qe: 0x02A1, nmps: 36, nlps: 33, switchFlag: 0},
+      {qe: 0x0221, nmps: 37, nlps: 34, switchFlag: 0},
+      {qe: 0x0141, nmps: 38, nlps: 35, switchFlag: 0},
+      {qe: 0x0111, nmps: 39, nlps: 36, switchFlag: 0},
+      {qe: 0x0085, nmps: 40, nlps: 37, switchFlag: 0},
+      {qe: 0x0049, nmps: 41, nlps: 38, switchFlag: 0},
+      {qe: 0x0025, nmps: 42, nlps: 39, switchFlag: 0},
+      {qe: 0x0015, nmps: 43, nlps: 40, switchFlag: 0},
+      {qe: 0x0009, nmps: 44, nlps: 41, switchFlag: 0},
+      {qe: 0x0005, nmps: 45, nlps: 42, switchFlag: 0},
+      {qe: 0x0001, nmps: 45, nlps: 43, switchFlag: 0},
+      {qe: 0x5601, nmps: 46, nlps: 46, switchFlag: 0}
+    ];
+
+    function ArithmeticDecoder(data, start, end) {
+      this.data = data;
+      this.bp = start;
+      this.dataEnd = end;
+
+      this.chigh = data[start];
+      this.clow = 0;
+
+      this.byteIn();
+
+      this.chigh = ((this.chigh << 7) & 0xFFFF) | ((this.clow >> 9) & 0x7F);
+      this.clow = (this.clow << 7) & 0xFFFF;
+      this.ct -= 7;
+      this.a = 0x8000;
+    }
+
+    ArithmeticDecoder.prototype = {
+      byteIn: function ArithmeticDecoder_byteIn() {
+        var data = this.data;
+        var bp = this.bp;
+        if (data[bp] == 0xFF) {
+          var b1 = data[bp + 1];
+          if (b1 > 0x8F) {
+            this.clow += 0xFF00;
+            this.ct = 8;
+          } else {
+            bp++;
+            this.clow += (data[bp] << 9);
+            this.ct = 7;
+            this.bp = bp;
+          }
+        } else {
+          bp++;
+          this.clow += bp < this.dataEnd ? (data[bp] << 8) : 0xFF00;
+          this.ct = 8;
+          this.bp = bp;
+        }
+        if (this.clow > 0xFFFF) {
+          this.chigh += (this.clow >> 16);
+          this.clow &= 0xFFFF;
+        }
+      },
+      readBit: function ArithmeticDecoder_readBit(cx) {
+        var qeIcx = QeTable[cx.index].qe;
+        this.a -= qeIcx;
+
+        if (this.chigh < qeIcx) {
+          var d = this.exchangeLps(cx);
+          this.renormD();
+          return d;
+        } else {
+          this.chigh -= qeIcx;
+          if ((this.a & 0x8000) === 0) {
+            var d = this.exchangeMps(cx);
+            this.renormD();
+            return d;
+          } else {
+            return cx.mps;
+          }
+        }
+      },
+      renormD: function ArithmeticDecoder_renormD() {
+        do {
+          if (this.ct === 0)
+            this.byteIn();
+
+          this.a <<= 1;
+          this.chigh = ((this.chigh << 1) & 0xFFFF) | ((this.clow >> 15) & 1);
+          this.clow = (this.clow << 1) & 0xFFFF;
+          this.ct--;
+        } while ((this.a & 0x8000) === 0);
+      },
+      exchangeMps: function ArithmeticDecoder_exchangeMps(cx) {
+        var d;
+        var qeTableIcx = QeTable[cx.index];
+        if (this.a < qeTableIcx.qe) {
+          d = 1 - cx.mps;
+
+          if (qeTableIcx.switchFlag == 1) {
+            cx.mps = 1 - cx.mps;
+          }
+          cx.index = qeTableIcx.nlps;
+        } else {
+          d = cx.mps;
+          cx.index = qeTableIcx.nmps;
+        }
+        return d;
+      },
+      exchangeLps: function ArithmeticDecoder_exchangeLps(cx) {
+        var d;
+        var qeTableIcx = QeTable[cx.index];
+        if (this.a < qeTableIcx.qe) {
+          this.a = qeTableIcx.qe;
+          d = cx.mps;
+          cx.index = qeTableIcx.nmps;
+        } else {
+          this.a = qeTableIcx.qe;
+          d = 1 - cx.mps;
+
+          if (qeTableIcx.switchFlag == 1) {
+            cx.mps = 1 - cx.mps;
+          }
+          cx.index = qeTableIcx.nlps;
+        }
+        return d;
+      }
+    };
+
+    return ArithmeticDecoder;
+  })();
+
+  // Section D. Coefficient bit modeling
+  var BitModel = (function BitModelClosure() {
+    // Table D-1
+    // The index is binary presentation: 0dddvvhh, ddd - sum of Di (0..4),
+    // vv - sum of Vi (0..2), and hh - sum of Hi (0..2)
+    var LLAndLHContextsLabel = new Uint8Array([
+      0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4,
+      7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6,
+      8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8
+    ]);
+    var HLContextLabel = new Uint8Array([
+      0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8,
+      8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3,
+      4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8
+    ]);
+    var HHContextLabel = new Uint8Array([
+      0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5,
+      5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8,
+      8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8
+    ]);
+
+    // Table D-2
+    function calcSignContribution(significance0, sign0, significance1, sign1) {
+      if (significance1) {
+        if (!sign1)
+          return significance0 ? (!sign0 ? 1 : 0) : 1;
+        else
+          return significance0 ? (!sign0 ? 0 : -1) : -1;
+      } else
+        return significance0 ? (!sign0 ? 1 : -1) : 0;
+    }
+    // Table D-3
+    var SignContextLabels = [
+      {contextLabel: 13, xorBit: 0},
+      {contextLabel: 12, xorBit: 0},
+      {contextLabel: 11, xorBit: 0},
+      {contextLabel: 10, xorBit: 0},
+      {contextLabel: 9, xorBit: 0},
+      {contextLabel: 10, xorBit: 1},
+      {contextLabel: 11, xorBit: 1},
+      {contextLabel: 12, xorBit: 1},
+      {contextLabel: 13, xorBit: 1}
+    ];
+
+    function BitModel(width, height, subband, zeroBitPlanes) {
+      this.width = width;
+      this.height = height;
+
+      this.contextLabelTable = subband == 'HH' ? HHContextLabel :
+        subband == 'HL' ? HLContextLabel : LLAndLHContextsLabel;
+
+      var coefficientCount = width * height;
+
+      // coefficients outside the encoding region treated as insignificant
+      // add border state cells for significanceState
+      this.neighborsSignificance = new Uint8Array(coefficientCount);
+      this.coefficentsSign = new Uint8Array(coefficientCount);
+      this.coefficentsMagnitude = new Uint32Array(coefficientCount);
+      this.processingFlags = new Uint8Array(coefficientCount);
+
+      var bitsDecoded = new Uint8Array(this.width * this.height);
+      for (var i = 0, ii = bitsDecoded.length; i < ii; i++)
+        bitsDecoded[i] = zeroBitPlanes;
+      this.bitsDecoded = bitsDecoded;
+
+      this.reset();
+    }
+
+    BitModel.prototype = {
+      setDecoder: function BitModel_setDecoder(decoder) {
+        this.decoder = decoder;
+      },
+      reset: function BitModel_reset() {
+        this.uniformContext = {index: 46, mps: 0};
+        this.runLengthContext = {index: 3, mps: 0};
+        this.contexts = [];
+        this.contexts.push({index: 4, mps: 0});
+        for (var i = 1; i <= 16; i++)
+          this.contexts.push({index: 0, mps: 0});
+      },
+      setNeighborsSignificance:
+        function BitModel_setNeighborsSignificance(row, column) {
+        var neighborsSignificance = this.neighborsSignificance;
+        var width = this.width, height = this.height;
+        var index = row * width + column;
+        if (row > 0) {
+          if (column > 0)
+            neighborsSignificance[index - width - 1] += 0x10;
+          if (column + 1 < width)
+            neighborsSignificance[index - width + 1] += 0x10;
+          neighborsSignificance[index - width] += 0x04;
+        }
+        if (row + 1 < height) {
+          if (column > 0)
+            neighborsSignificance[index + width - 1] += 0x10;
+          if (column + 1 < width)
+            neighborsSignificance[index + width + 1] += 0x10;
+          neighborsSignificance[index + width] += 0x04;
+        }
+        if (column > 0)
+          neighborsSignificance[index - 1] += 0x01;
+        if (column + 1 < width)
+          neighborsSignificance[index + 1] += 0x01;
+        neighborsSignificance[index] |= 0x80;
+      },
+      runSignificancePropogationPass:
+        function BitModel_runSignificancePropogationPass() {
+        var decoder = this.decoder;
+        var width = this.width, height = this.height;
+        var coefficentsMagnitude = this.coefficentsMagnitude;
+        var coefficentsSign = this.coefficentsSign;
+        var contextLabels = this.contextLabels;
+        var neighborsSignificance = this.neighborsSignificance;
+        var processingFlags = this.processingFlags;
+        var contexts = this.contexts;
+        var labels = this.contextLabelTable;
+        var bitsDecoded = this.bitsDecoded;
+        // clear processed flag
+        var processedInverseMask = ~1;
+        var processedMask = 1;
+        var firstMagnitudeBitMask = 2;
+        for (var q = 0, qq = width * height; q < qq; q++)
+          processingFlags[q] &= processedInverseMask;
+
+        for (var i0 = 0; i0 < height; i0 += 4) {
+          for (var j = 0; j < width; j++) {
+            var index = i0 * width + j;
+            for (var i1 = 0; i1 < 4; i1++, index += width) {
+              var i = i0 + i1;
+              if (i >= height)
+                break;
+
+              if (coefficentsMagnitude[index] || !neighborsSignificance[index])
+                continue;
+
+              var contextLabel = labels[neighborsSignificance[index]];
+              var cx = contexts[contextLabel];
+              var decision = decoder.readBit(cx);
+              if (decision) {
+                var sign = this.decodeSignBit(i, j);
+                coefficentsSign[index] = sign;
+                coefficentsMagnitude[index] = 1;
+                this.setNeighborsSignificance(i, j);
+                processingFlags[index] |= firstMagnitudeBitMask;
+              }
+              bitsDecoded[index]++;
+              processingFlags[index] |= processedMask;
+            }
+          }
+        }
+      },
+      decodeSignBit: function BitModel_decodeSignBit(row, column) {
+        var width = this.width, height = this.height;
+        var index = row * width + column;
+        var coefficentsMagnitude = this.coefficentsMagnitude;
+        var coefficentsSign = this.coefficentsSign;
+        var horizontalContribution = calcSignContribution(
+          column > 0 && coefficentsMagnitude[index - 1],
+          coefficentsSign[index - 1],
+          column + 1 < width && coefficentsMagnitude[index + 1],
+          coefficentsSign[index + 1]);
+        var verticalContribution = calcSignContribution(
+          row > 0 && coefficentsMagnitude[index - width],
+          coefficentsSign[index - width],
+          row + 1 < height && coefficentsMagnitude[index + width],
+          coefficentsSign[index + width]);
+
+        var contextLabelAndXor = SignContextLabels[
+          3 * (1 - horizontalContribution) + (1 - verticalContribution)];
+        var contextLabel = contextLabelAndXor.contextLabel;
+        var cx = this.contexts[contextLabel];
+        var decoded = this.decoder.readBit(cx);
+        return decoded ^ contextLabelAndXor.xorBit;
+      },
+      runMagnitudeRefinementPass:
+        function BitModel_runMagnitudeRefinementPass() {
+        var decoder = this.decoder;
+        var width = this.width, height = this.height;
+        var coefficentsMagnitude = this.coefficentsMagnitude;
+        var neighborsSignificance = this.neighborsSignificance;
+        var contexts = this.contexts;
+        var bitsDecoded = this.bitsDecoded;
+        var processingFlags = this.processingFlags;
+        var processedMask = 1;
+        var firstMagnitudeBitMask = 2;
+        for (var i0 = 0; i0 < height; i0 += 4) {
+          for (var j = 0; j < width; j++) {
+            for (var i1 = 0; i1 < 4; i1++) {
+              var i = i0 + i1;
+              if (i >= height)
+                break;
+              var index = i * width + j;
+
+              // significant but not those that have just become
+              if (!coefficentsMagnitude[index] ||
+                (processingFlags[index] & processedMask) !== 0)
+                continue;
+
+              var contextLabel = 16;
+              if ((processingFlags[index] &
+                firstMagnitudeBitMask) !== 0) {
+                processingFlags[i * width + j] ^= firstMagnitudeBitMask;
+                // first refinement
+                var significance = neighborsSignificance[index];
+                var sumOfSignificance = (significance & 3) +
+                  ((significance >> 2) & 3) + ((significance >> 4) & 7);
+                contextLabel = sumOfSignificance >= 1 ? 15 : 14;
+              }
+
+              var cx = contexts[contextLabel];
+              var bit = decoder.readBit(cx);
+              coefficentsMagnitude[index] =
+                (coefficentsMagnitude[index] << 1) | bit;
+              bitsDecoded[index]++;
+              processingFlags[index] |= processedMask;
+            }
+          }
+        }
+      },
+      runCleanupPass: function BitModel_runCleanupPass() {
+        var decoder = this.decoder;
+        var width = this.width, height = this.height;
+        var neighborsSignificance = this.neighborsSignificance;
+        var significanceState = this.significanceState;
+        var coefficentsMagnitude = this.coefficentsMagnitude;
+        var coefficentsSign = this.coefficentsSign;
+        var contexts = this.contexts;
+        var labels = this.contextLabelTable;
+        var bitsDecoded = this.bitsDecoded;
+        var processingFlags = this.processingFlags;
+        var processedMask = 1;
+        var firstMagnitudeBitMask = 2;
+        var oneRowDown = width;
+        var twoRowsDown = width * 2;
+        var threeRowsDown = width * 3;
+        for (var i0 = 0; i0 < height; i0 += 4) {
+          for (var j = 0; j < width; j++) {
+            var index0 = i0 * width + j;
+            // using the property: labels[neighborsSignificance[index]] == 0
+            // when neighborsSignificance[index] == 0
+            var allEmpty = i0 + 3 < height &&
+              processingFlags[index0] === 0 &&
+              processingFlags[index0 + oneRowDown] === 0 &&
+              processingFlags[index0 + twoRowsDown] === 0 &&
+              processingFlags[index0 + threeRowsDown] === 0 &&
+              neighborsSignificance[index0] === 0 &&
+              neighborsSignificance[index0 + oneRowDown] === 0 &&
+              neighborsSignificance[index0 + twoRowsDown] === 0 &&
+              neighborsSignificance[index0 + threeRowsDown] === 0;
+            var i1 = 0, index = index0;
+            var cx, i;
+            if (allEmpty) {
+              cx = this.runLengthContext;
+              var hasSignificantCoefficent = decoder.readBit(cx);
+              if (!hasSignificantCoefficent) {
+                bitsDecoded[index0]++;
+                bitsDecoded[index0 + oneRowDown]++;
+                bitsDecoded[index0 + twoRowsDown]++;
+                bitsDecoded[index0 + threeRowsDown]++;
+                continue; // next column
+              }
+              cx = this.uniformContext;
+              i1 = (decoder.readBit(cx) << 1) | decoder.readBit(cx);
+              i = i0 + i1;
+              index += i1 * width;
+
+              var sign = this.decodeSignBit(i, j);
+              coefficentsSign[index] = sign;
+              coefficentsMagnitude[index] = 1;
+              this.setNeighborsSignificance(i, j);
+              processingFlags[index] |= firstMagnitudeBitMask;
+
+              index = index0;
+              for (var i2 = i0; i2 <= i; i2++, index += width)
+                bitsDecoded[index]++;
+
+              i1++;
+            }
+            for (; i1 < 4; i1++, index += width) {
+              i = i0 + i1;
+              if (i >= height)
+                break;
+
+              if (coefficentsMagnitude[index] ||
+                (processingFlags[index] & processedMask) !== 0)
+                continue;
+
+              var contextLabel = labels[neighborsSignificance[index]];
+              cx = contexts[contextLabel];
+              var decision = decoder.readBit(cx);
+              if (decision == 1) {
+                var sign = this.decodeSignBit(i, j);
+                coefficentsSign[index] = sign;
+                coefficentsMagnitude[index] = 1;
+                this.setNeighborsSignificance(i, j);
+                processingFlags[index] |= firstMagnitudeBitMask;
+              }
+              bitsDecoded[index]++;
+            }
+          }
+        }
+      },
+      checkSegmentationSymbol: function BitModel_checkSegmentationSymbol() {
+        var decoder = this.decoder;
+        var cx = this.uniformContext;
+        var symbol = (decoder.readBit(cx) << 3) | (decoder.readBit(cx) << 2) |
+                     (decoder.readBit(cx) << 1) | decoder.readBit(cx);
+        if (symbol != 0xA)
+          throw 'Invalid segmentation symbol';
+      }
+    };
+
+    return BitModel;
+  })();
+
+  // Section F, Discrete wavelet transofrmation
+  var Transform = (function TransformClosure() {
+    function Transform() {
+    }
+    Transform.prototype.calculate =
+      function transformCalculate(subbands, u0, v0) {
+      var ll = subbands[0];
+      for (var i = 1, ii = subbands.length, j = 1; i < ii; i += 3, j++) {
+        ll = this.iterate(ll, subbands[i], subbands[i + 1],
+                          subbands[i + 2], u0, v0);
+      }
+      return ll;
+    };
+    Transform.prototype.iterate = function Transform_iterate(ll, hl, lh, hh,
+                                                            u0, v0) {
+      var llWidth = ll.width, llHeight = ll.height, llItems = ll.items;
+      var hlWidth = hl.width, hlHeight = hl.height, hlItems = hl.items;
+      var lhWidth = lh.width, lhHeight = lh.height, lhItems = lh.items;
+      var hhWidth = hh.width, hhHeight = hh.height, hhItems = hh.items;
+
+      // Section F.3.3 interleave
+      var width = llWidth + hlWidth;
+      var height = llHeight + lhHeight;
+      var items = new Float32Array(width * height);
+      for (var i = 0, ii = llHeight; i < ii; i++) {
+        var k = i * llWidth, l = i * 2 * width;
+        for (var j = 0, jj = llWidth; j < jj; j++, k++, l += 2)
+          items[l] = llItems[k];
+      }
+      for (var i = 0, ii = hlHeight; i < ii; i++) {
+        var k = i * hlWidth, l = i * 2 * width + 1;
+        for (var j = 0, jj = hlWidth; j < jj; j++, k++, l += 2)
+          items[l] = hlItems[k];
+      }
+      for (var i = 0, ii = lhHeight; i < ii; i++) {
+        var k = i * lhWidth, l = (i * 2 + 1) * width;
+        for (var j = 0, jj = lhWidth; j < jj; j++, k++, l += 2)
+          items[l] = lhItems[k];
+      }
+      for (var i = 0, ii = hhHeight; i < ii; i++) {
+        var k = i * hhWidth, l = (i * 2 + 1) * width + 1;
+        for (var j = 0, jj = hhWidth; j < jj; j++, k++, l += 2)
+          items[l] = hhItems[k];
+      }
+
+      var bufferPadding = 4;
+      var bufferLength = new Float32Array(Math.max(width, height) +
+        2 * bufferPadding);
+      var buffer = new Float32Array(bufferLength);
+      var bufferOut = new Float32Array(bufferLength);
+
+      // Section F.3.4 HOR_SR
+      for (var v = 0; v < height; v++) {
+        if (width == 1) {
+          // if width = 1, when u0 even keep items as is, when odd divide by 2
+          if ((u0 % 1) !== 0) {
+            items[v * width] /= 2;
+          }
+          continue;
+        }
+
+        var k = v * width;
+        var l = bufferPadding;
+        for (var u = 0; u < width; u++, k++, l++)
+          buffer[l] = items[k];
+
+        // Section F.3.7 extending... using max extension of 4
+        var i1 = bufferPadding - 1, j1 = bufferPadding + 1;
+        var i2 = bufferPadding + width - 2, j2 = bufferPadding + width;
+        buffer[i1--] = buffer[j1++];
+        buffer[j2++] = buffer[i2--];
+        buffer[i1--] = buffer[j1++];
+        buffer[j2++] = buffer[i2--];
+        buffer[i1--] = buffer[j1++];
+        buffer[j2++] = buffer[i2--];
+        buffer[i1--] = buffer[j1++];
+        buffer[j2++] = buffer[i2--];
+
+        this.filter(buffer, bufferPadding, width, u0, bufferOut);
+
+        k = v * width;
+        l = bufferPadding;
+        for (var u = 0; u < width; u++, k++, l++)
+          items[k] = bufferOut[l];
+      }
+
+      // Section F.3.5 VER_SR
+      for (var u = 0; u < width; u++) {
+        if (height == 1) {
+          // if height = 1, when v0 even keep items as is, when odd divide by 2
+          if ((v0 % 1) !== 0) {
+            items[u] /= 2;
+          }
+          continue;
+        }
+
+        var k = u;
+        var l = bufferPadding;
+        for (var v = 0; v < height; v++, k += width, l++)
+          buffer[l] = items[k];
+
+        // Section F.3.7 extending... using max extension of 4
+        var i1 = bufferPadding - 1, j1 = bufferPadding + 1;
+        var i2 = bufferPadding + height - 2, j2 = bufferPadding + height;
+        buffer[i1--] = buffer[j1++];
+        buffer[j2++] = buffer[i2--];
+        buffer[i1--] = buffer[j1++];
+        buffer[j2++] = buffer[i2--];
+        buffer[i1--] = buffer[j1++];
+        buffer[j2++] = buffer[i2--];
+        buffer[i1--] = buffer[j1++];
+        buffer[j2++] = buffer[i2--];
+
+        this.filter(buffer, bufferPadding, height, v0, bufferOut);
+
+        k = u;
+        l = bufferPadding;
+        for (var v = 0; v < height; v++, k += width, l++)
+          items[k] = bufferOut[l];
+      }
+      return {
+        width: width,
+        height: height,
+        items: items
+      };
+    };
+    return Transform;
+  })();
+
+  // Section 3.8.2 Irreversible 9-7 filter
+  var IrreversibleTransform = (function IrreversibleTransformClosure() {
+    function IrreversibleTransform() {
+      Transform.call(this);
+    }
+
+    IrreversibleTransform.prototype = Object.create(Transform.prototype);
+    IrreversibleTransform.prototype.filter =
+      function irreversibleTransformFilter(y, offset, length, i0, x) {
+      var i0_ = Math.floor(i0 / 2);
+      var i1_ = Math.floor((i0 + length) / 2);
+      var offset_ = offset - (i0 % 1);
+
+      var alpha = -1.586134342059924;
+      var beta = -0.052980118572961;
+      var gamma = 0.882911075530934;
+      var delta = 0.443506852043971;
+      var K = 1.230174104914001;
+      var K_ = 1 / K;
+
+      // step 1
+      var j = offset_ - 2;
+      for (var n = i0_ - 1, nn = i1_ + 2; n < nn; n++, j += 2)
+        x[j] = K * y[j];
+
+      // step 2
+      var j = offset_ - 3;
+      for (var n = i0_ - 2, nn = i1_ + 2; n < nn; n++, j += 2)
+        x[j] = K_ * y[j];
+
+      // step 3
+      var j = offset_ - 2;
+      for (var n = i0_ - 1, nn = i1_ + 2; n < nn; n++, j += 2)
+        x[j] -= delta * (x[j - 1] + x[j + 1]);
+
+      // step 4
+      var j = offset_ - 1;
+      for (var n = i0_ - 1, nn = i1_ + 1; n < nn; n++, j += 2)
+        x[j] -= gamma * (x[j - 1] + x[j + 1]);
+
+      // step 5
+      var j = offset_;
+      for (var n = i0_, nn = i1_ + 1; n < nn; n++, j += 2)
+        x[j] -= beta * (x[j - 1] + x[j + 1]);
+
+      // step 6
+      var j = offset_ + 1;
+      for (var n = i0_, nn = i1_; n < nn; n++, j += 2)
+        x[j] -= alpha * (x[j - 1] + x[j + 1]);
+    };
+
+    return IrreversibleTransform;
+  })();
+
+  // Section 3.8.1 Reversible 5-3 filter
+  var ReversibleTransform = (function ReversibleTransformClosure() {
+    function ReversibleTransform() {
+      Transform.call(this);
+    }
+
+    ReversibleTransform.prototype = Object.create(Transform.prototype);
+    ReversibleTransform.prototype.filter =
+      function reversibleTransformFilter(y, offset, length, i0, x) {
+      var i0_ = Math.floor(i0 / 2);
+      var i1_ = Math.floor((i0 + length) / 2);
+      var offset_ = offset - (i0 % 1);
+
+      for (var n = i0_, nn = i1_ + 1, j = offset_; n < nn; n++, j += 2)
+        x[j] = y[j] - Math.floor((y[j - 1] + y[j + 1] + 2) / 4);
+
+      for (var n = i0_, nn = i1_, j = offset_ + 1; n < nn; n++, j += 2)
+        x[j] = y[j] + Math.floor((x[j - 1] + x[j + 1]) / 2);
+    };
+
+    return ReversibleTransform;
+  })();
+
+  return JpxImage;
+})();
+
+
+
+var Jbig2Image = (function Jbig2ImageClosure() {
+
+  // Annex E. Arithmetic Coding
+  var ArithmeticDecoder = (function ArithmeticDecoderClosure() {
+    var QeTable = [
+      {qe: 0x5601, nmps: 1, nlps: 1, switchFlag: 1},
+      {qe: 0x3401, nmps: 2, nlps: 6, switchFlag: 0},
+      {qe: 0x1801, nmps: 3, nlps: 9, switchFlag: 0},
+      {qe: 0x0AC1, nmps: 4, nlps: 12, switchFlag: 0},
+      {qe: 0x0521, nmps: 5, nlps: 29, switchFlag: 0},
+      {qe: 0x0221, nmps: 38, nlps: 33, switchFlag: 0},
+      {qe: 0x5601, nmps: 7, nlps: 6, switchFlag: 1},
+      {qe: 0x5401, nmps: 8, nlps: 14, switchFlag: 0},
+      {qe: 0x4801, nmps: 9, nlps: 14, switchFlag: 0},
+      {qe: 0x3801, nmps: 10, nlps: 14, switchFlag: 0},
+      {qe: 0x3001, nmps: 11, nlps: 17, switchFlag: 0},
+      {qe: 0x2401, nmps: 12, nlps: 18, switchFlag: 0},
+      {qe: 0x1C01, nmps: 13, nlps: 20, switchFlag: 0},
+      {qe: 0x1601, nmps: 29, nlps: 21, switchFlag: 0},
+      {qe: 0x5601, nmps: 15, nlps: 14, switchFlag: 1},
+      {qe: 0x5401, nmps: 16, nlps: 14, switchFlag: 0},
+      {qe: 0x5101, nmps: 17, nlps: 15, switchFlag: 0},
+      {qe: 0x4801, nmps: 18, nlps: 16, switchFlag: 0},
+      {qe: 0x3801, nmps: 19, nlps: 17, switchFlag: 0},
+      {qe: 0x3401, nmps: 20, nlps: 18, switchFlag: 0},
+      {qe: 0x3001, nmps: 21, nlps: 19, switchFlag: 0},
+      {qe: 0x2801, nmps: 22, nlps: 19, switchFlag: 0},
+      {qe: 0x2401, nmps: 23, nlps: 20, switchFlag: 0},
+      {qe: 0x2201, nmps: 24, nlps: 21, switchFlag: 0},
+      {qe: 0x1C01, nmps: 25, nlps: 22, switchFlag: 0},
+      {qe: 0x1801, nmps: 26, nlps: 23, switchFlag: 0},
+      {qe: 0x1601, nmps: 27, nlps: 24, switchFlag: 0},
+      {qe: 0x1401, nmps: 28, nlps: 25, switchFlag: 0},
+      {qe: 0x1201, nmps: 29, nlps: 26, switchFlag: 0},
+      {qe: 0x1101, nmps: 30, nlps: 27, switchFlag: 0},
+      {qe: 0x0AC1, nmps: 31, nlps: 28, switchFlag: 0},
+      {qe: 0x09C1, nmps: 32, nlps: 29, switchFlag: 0},
+      {qe: 0x08A1, nmps: 33, nlps: 30, switchFlag: 0},
+      {qe: 0x0521, nmps: 34, nlps: 31, switchFlag: 0},
+      {qe: 0x0441, nmps: 35, nlps: 32, switchFlag: 0},
+      {qe: 0x02A1, nmps: 36, nlps: 33, switchFlag: 0},
+      {qe: 0x0221, nmps: 37, nlps: 34, switchFlag: 0},
+      {qe: 0x0141, nmps: 38, nlps: 35, switchFlag: 0},
+      {qe: 0x0111, nmps: 39, nlps: 36, switchFlag: 0},
+      {qe: 0x0085, nmps: 40, nlps: 37, switchFlag: 0},
+      {qe: 0x0049, nmps: 41, nlps: 38, switchFlag: 0},
+      {qe: 0x0025, nmps: 42, nlps: 39, switchFlag: 0},
+      {qe: 0x0015, nmps: 43, nlps: 40, switchFlag: 0},
+      {qe: 0x0009, nmps: 44, nlps: 41, switchFlag: 0},
+      {qe: 0x0005, nmps: 45, nlps: 42, switchFlag: 0},
+      {qe: 0x0001, nmps: 45, nlps: 43, switchFlag: 0},
+      {qe: 0x5601, nmps: 46, nlps: 46, switchFlag: 0}
+    ];
+
+    function ArithmeticDecoder(data, start, end) {
+      this.data = data;
+      this.bp = start;
+      this.dataEnd = end;
+
+      this.chigh = data[start];
+      this.clow = 0;
+
+      this.byteIn();
+
+      this.chigh = ((this.chigh << 7) & 0xFFFF) | ((this.clow >> 9) & 0x7F);
+      this.clow = (this.clow << 7) & 0xFFFF;
+      this.ct -= 7;
+      this.a = 0x8000;
+    }
+
+    ArithmeticDecoder.prototype = {
+      byteIn: function ArithmeticDecoder_byteIn() {
+        var data = this.data;
+        var bp = this.bp;
+        if (data[bp] == 0xFF) {
+          var b1 = data[bp + 1];
+          if (b1 > 0x8F) {
+            this.clow += 0xFF00;
+            this.ct = 8;
+          } else {
+            bp++;
+            this.clow += (data[bp] << 9);
+            this.ct = 7;
+            this.bp = bp;
+          }
+        } else {
+          bp++;
+          this.clow += bp < this.dataEnd ? (data[bp] << 8) : 0xFF00;
+          this.ct = 8;
+          this.bp = bp;
+        }
+        if (this.clow > 0xFFFF) {
+          this.chigh += (this.clow >> 16);
+          this.clow &= 0xFFFF;
+        }
+      },
+      readBit: function ArithmeticDecoder_readBit(contexts, pos) {
+        // contexts are packed into 1 byte: 
+        // highest 7 bits carry cx.index, lowest bit carries cx.mps
+        var cx_index = contexts[pos] >> 1, cx_mps = contexts[pos] & 1;
+        var qeTableIcx = QeTable[cx_index];
+        var qeIcx = qeTableIcx.qe;
+        var nmpsIcx = qeTableIcx.nmps;
+        var nlpsIcx = qeTableIcx.nlps;
+        var switchIcx = qeTableIcx.switchFlag;
+        var d;
+        this.a -= qeIcx;
+
+        if (this.chigh < qeIcx) {
+          // exchangeLps
+          if (this.a < qeIcx) {
+            this.a = qeIcx;
+            d = cx_mps;
+            cx_index = nmpsIcx;
+          } else {
+            this.a = qeIcx;
+            d = 1 - cx_mps;
+            if (switchIcx) {
+              cx_mps = d;
+            }
+            cx_index = nlpsIcx;
+          }
+        } else {
+          this.chigh -= qeIcx;
+          if ((this.a & 0x8000) !== 0) {
+            return cx_mps;
+          }
+          // exchangeMps
+          if (this.a < qeIcx) {
+            d = 1 - cx_mps;
+            if (switchIcx) {
+              cx_mps = d;
+            }
+            cx_index = nlpsIcx;
+          } else {
+            d = cx_mps;
+            cx_index = nmpsIcx;
+          }
+        }
+        // renormD;
+        do {
+          if (this.ct === 0)
+            this.byteIn();
+
+          this.a <<= 1;
+          this.chigh = ((this.chigh << 1) & 0xFFFF) | ((this.clow >> 15) & 1);
+          this.clow = (this.clow << 1) & 0xFFFF;
+          this.ct--;
+        } while ((this.a & 0x8000) === 0);
+
+        contexts[pos] = cx_index << 1 | cx_mps;
+        return d;
+      }
+    };
+
+    return ArithmeticDecoder;
+  })();
+
+  // Utility data structures
+  function ContextCache() {}
+
+  ContextCache.prototype = {
+    getContexts: function(id) {
+      if (id in this)
+        return this[id];
+      return (this[id] = new Int8Array(1<<16));
+    }
+  };
+
+  function DecodingContext(data, start, end) {
+    this.data = data;
+    this.start = start;
+    this.end = end;
+  }
+
+  DecodingContext.prototype = {
+    get decoder() {
+      var decoder = new ArithmeticDecoder(this.data, this.start, this.end);
+      return shadow(this, 'decoder', decoder);
+    },
+    get contextCache() {
+      var cache = new ContextCache();
+      return shadow(this, 'contextCache', cache);
+    }
+  };
+
+  // Annex A. Arithmetic Integer Decoding Procedure
+  // A.2 Procedure for decoding values
+  function decodeInteger(contextCache, procedure, decoder) {
+    var contexts = contextCache.getContexts(procedure);
+
+    var prev = 1;
+    var state = 1, v = 0, s;
+    var toRead = 32, offset = 4436; // defaults for state 7
+    while (state) {
+      var bit = decoder.readBit(contexts, prev);
+      prev = prev < 256 ? (prev << 1) | bit :
+        (((prev << 1) | bit) & 511) | 256;
+      switch (state) {
+        case 1:
+          s = !!bit;
+          break;
+        case 2:
+          if (bit) break;
+          state = 7;
+          toRead = 2;
+          offset = 0;
+          break;
+        case 3:
+          if (bit) break;
+          state = 7;
+          toRead = 4;
+          offset = 4;
+          break;
+        case 4:
+          if (bit) break;
+          state = 7;
+          toRead = 6;
+          offset = 20;
+          break;
+        case 5:
+          if (bit) break;
+          state = 7;
+          toRead = 8;
+          offset = 84;
+          break;
+        case 6:
+          if (bit) break;
+          state = 7;
+          toRead = 12;
+          offset = 340;
+          break;
+        default:
+          v = v * 2 + bit;
+          if (--toRead === 0)
+            state = 0;
+          continue;
+      }
+      state++;
+    }
+    v += offset;
+    return !s ? v : v > 0 ? -v : null;
+  }
+
+  // A.3 The IAID decoding procedure
+  function decodeIAID(contextCache, decoder, codeLength) {
+    var contexts = contextCache.getContexts('IAID');
+
+    var prev = 1;
+    for (var i = 0; i < codeLength; i++) {
+      var bit = decoder.readBit(contexts, prev);
+      prev = (prev * 2) + bit;
+    }
+    if (codeLength < 31)
+      return prev & ((1 << codeLength) - 1);
+    else
+      return prev - Math.pow(2, codeLength);
+  }
+
+  // 7.3 Segment types
+  var SegmentTypes = [
+    'SymbolDictionary', null, null, null, 'IntermediateTextRegion', null,
+    'ImmediateTextRegion', 'ImmediateLosslessTextRegion', null, null, null,
+    null, null, null, null, null, 'patternDictionary', null, null, null,
+    'IntermediateHalftoneRegion', null, 'ImmediateHalftoneRegion',
+    'ImmediateLosslessHalftoneRegion', null, null, null, null, null, null, null,
+    null, null, null, null, null, 'IntermediateGenericRegion', null,
+    'ImmediateGenericRegion', 'ImmediateLosslessGenericRegion',
+    'IntermediateGenericRefinementRegion', null,
+    'ImmediateGenericRefinementRegion',
+    'ImmediateLosslessGenericRefinementRegion', null, null, null, null,
+    'PageInformation', 'EndOfPage', 'EndOfStripe', 'EndOfFile', 'Profiles',
+    'Tables', null, null, null, null, null, null, null, null,
+    'Extension'
+  ];
+
+  var CodingTemplates = [
+    [{x: -1, y: -2}, {x: 0, y: -2}, {x: 1, y: -2}, {x: -2, y: -1},
+     {x: -1, y: -1}, {x: 0, y: -1}, {x: 1, y: -1}, {x: 2, y: -1},
+     {x: -4, y: 0}, {x: -3, y: 0}, {x: -2, y: 0}, {x: -1, y: 0}],
+    [{x: -1, y: -2}, {x: 0, y: -2}, {x: 1, y: -2}, {x: 2, y: -2},
+     {x: -2, y: -1}, {x: -1, y: -1}, {x: 0, y: -1}, {x: 1, y: -1},
+     {x: 2, y: -1}, {x: -3, y: 0}, {x: -2, y: 0}, {x: -1, y: 0}],
+    [{x: -1, y: -2}, {x: 0, y: -2}, {x: 1, y: -2}, {x: -2, y: -1},
+     {x: -1, y: -1}, {x: 0, y: -1}, {x: 1, y: -1}, {x: -2, y: 0},
+     {x: -1, y: 0}],
+    [{x: -3, y: -1}, {x: -2, y: -1}, {x: -1, y: -1}, {x: 0, y: -1},
+     {x: 1, y: -1}, {x: -4, y: 0}, {x: -3, y: 0}, {x: -2, y: 0}, {x: -1, y: 0}]
+  ];
+
+  var RefinementTemplates = [
+    {
+      coding: [{x: 0, y: -1}, {x: 1, y: -1}, {x: -1, y: 0}],
+      reference: [{x: 0, y: -1}, {x: 1, y: -1}, {x: -1, y: 0}, {x: 0, y: 0},
+                  {x: 1, y: 0}, {x: -1, y: 1}, {x: 0, y: 1}, {x: 1, y: 1}]
+    },
+    {
+      coding: [{x: -1, y: -1}, {x: 0, y: -1}, {x: 1, y: -1}, {x: -1, y: 0}],
+      reference: [{x: 0, y: -1}, {x: -1, y: 0}, {x: 0, y: 0}, {x: 1, y: 0},
+                  {x: 0, y: 1}, {x: 1, y: 1}]
+    }
+  ];
+
+  var ReusedContexts = [
+    0x1CD3, // '00111001101' (template) + '0011' (at),
+    0x079A, // '001111001101' + '0',
+    0x00E3, // '001110001' + '1',
+    0x018B  // '011000101' + '1'
+  ];
+
+  var RefinementReusedContexts = [
+    0x0020, // '000' + '0' (coding) + '00010000' + '0' (reference)
+    0x0008  // '0000' + '001000'
+  ];
+
+  function log2(x) {
+    var n = 1, i = 0;
+    while (x > n) {
+      n <<= 1;
+      i++;
+    }
+    return i;
+  }
+
+  function readInt32(data, start) {
+    return (data[start] << 24) | (data[start + 1] << 16) |
+           (data[start + 2] << 8) | data[start + 3];
+  }
+
+  function readUint32(data, start) {
+    var value = readInt32(data, start);
+    return value & 0x80000000 ? (value + 4294967296) : value;
+  }
+
+  function readUint16(data, start) {
+    return (data[start] << 8) | data[start + 1];
+  }
+
+  function readInt8(data, start) {
+    return (data[start] << 24) >> 24;
+  }
+
+  // 6.2 Generic Region Decoding Procedure
+  function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at,
+                        decodingContext) {
+    if (mmr)
+      error('JBIG2 error: MMR encoding is not supported');
+
+    var useskip = !!skip;
+    var template = CodingTemplates[templateIndex].concat(at);
+    var templateLength = template.length;
+    var templateX = new Int32Array(templateLength);
+    var templateY = new Int32Array(templateLength);
+    for (var k = 0; k < templateLength; k++) {
+      templateX[k] = template[k].x;
+      templateY[k] = template[k].y;
+    }
+
+    var pseudoPixelContext = ReusedContexts[templateIndex];
+    var bitmap = [];
+
+    var decoder = decodingContext.decoder;
+    var contexts = decodingContext.contextCache.getContexts('GB');
+
+    var ltp = 0;
+    for (var i = 0; i < height; i++) {
+      if (prediction) {
+        var sltp = decoder.readBit(contexts, pseudoPixelContext);
+        ltp ^= sltp;
+      }
+      if (ltp) {
+        bitmap.push(bitmap[bitmap.length - 1]); // duplicate previous row
+        continue;
+      }
+      var row = new Uint8Array(width);
+      bitmap.push(row);
+      for (var j = 0; j < width; j++) {
+        if (useskip && skip[i][j]) {
+          row[j] = 0;
+          continue;
+        }
+        var contextLabel = 0;
+        for (var k = 0; k < templateLength; k++) {
+          var i0 = i + templateY[k], j0 = j + templateX[k];
+          if (i0 < 0 || j0 < 0 || j0 >= width)
+            contextLabel <<= 1; // out of bound pixel
+          else
+            contextLabel = (contextLabel << 1) | bitmap[i0][j0];
+        }
+        var pixel = decoder.readBit(contexts, contextLabel);
+        row[j] = pixel;
+      }
+    }
+    return bitmap;
+  }
+
+  // 6.3.2 Generic Refinement Region Decoding Procedure
+  function decodeRefinement(width, height, templateIndex, referenceBitmap,
+                            offsetX, offsetY, prediction, at,
+                            decodingContext) {
+    var codingTemplate = RefinementTemplates[templateIndex].coding;
+    if (templateIndex === 0)
+      codingTemplate = codingTemplate.concat([at[0]]);
+    var codingTemplateLength = codingTemplate.length;
+    var codingTemplateX = new Int32Array(codingTemplateLength);
+    var codingTemplateY = new Int32Array(codingTemplateLength);
+    for (var k = 0; k < codingTemplateLength; k++) {
+      codingTemplateX[k] = codingTemplate[k].x;
+      codingTemplateY[k] = codingTemplate[k].y;
+    }
+    var referenceTemplate = RefinementTemplates[templateIndex].reference;
+    if (templateIndex === 0)
+      referenceTemplate = referenceTemplate.concat([at[1]]);
+    var referenceTemplateLength = referenceTemplate.length;
+    var referenceTemplateX = new Int32Array(referenceTemplateLength);
+    var referenceTemplateY = new Int32Array(referenceTemplateLength);
+    for (var k = 0; k < referenceTemplateLength; k++) {
+      referenceTemplateX[k] = referenceTemplate[k].x;
+      referenceTemplateY[k] = referenceTemplate[k].y;
+    }
+    var referenceWidth = referenceBitmap[0].length;
+    var referenceHeight = referenceBitmap.length;
+
+    var pseudoPixelContext = RefinementReusedContexts[templateIndex];
+    var bitmap = [];
+
+    var decoder = decodingContext.decoder;
+    var contexts = decodingContext.contextCache.getContexts('GR');
+
+    var ltp = 0;
+    for (var i = 0; i < height; i++) {
+      if (prediction) {
+        var sltp = decoder.readBit(contexts, pseudoPixelContext);
+        ltp ^= sltp;
+      }
+      var row = new Uint8Array(width);
+      bitmap.push(row);
+      for (var j = 0; j < width; j++) {
+        if (ltp)
+          error('JBIG2 error: prediction is not supported');
+
+        var contextLabel = 0;
+        for (var k = 0; k < codingTemplateLength; k++) {
+          var i0 = i + codingTemplateY[k], j0 = j + codingTemplateX[k];
+          if (i0 < 0 || j0 < 0 || j0 >= width)
+            contextLabel <<= 1; // out of bound pixel
+          else
+            contextLabel = (contextLabel << 1) | bitmap[i0][j0];
+        }
+        for (var k = 0; k < referenceTemplateLength; k++) {
+          var i0 = i + referenceTemplateY[k] + offsetY;
+          var j0 = j + referenceTemplateX[k] + offsetX;
+          if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth)
+            contextLabel <<= 1; // out of bound pixel
+          else
+            contextLabel = (contextLabel << 1) | referenceBitmap[i0][j0];
+        }
+        var pixel = decoder.readBit(contexts, contextLabel);
+        row[j] = pixel;
+      }
+    }
+
+    return bitmap;
+  }
+
+  // 6.5.5 Decoding the symbol dictionary
+  function decodeSymbolDictionary(huffman, refinement, symbols,
+                                  numberOfNewSymbols, numberOfExportedSymbols,
+                                  huffmanTables, templateIndex, at,
+                                  refinementTemplateIndex, refinementAt,
+                                  decodingContext) {
+    if (huffman)
+      error('JBIG2 error: huffman is not supported');
+
+    var newSymbols = [];
+    var currentHeight = 0;
+    var symbolCodeLength = log2(symbols.length + numberOfNewSymbols);
+
+    var decoder = decodingContext.decoder;
+    var contextCache = decodingContext.contextCache;
+
+    while (newSymbols.length < numberOfNewSymbols) {
+      var deltaHeight = decodeInteger(contextCache, 'IADH', decoder); // 6.5.6
+      currentHeight += deltaHeight;
+      var currentWidth = 0;
+      var totalWidth = 0;
+      while (true) {
+        var deltaWidth = decodeInteger(contextCache, 'IADW', decoder); // 6.5.7
+        if (deltaWidth === null)
+          break; // OOB
+        currentWidth += deltaWidth;
+        totalWidth += currentWidth;
+        var bitmap;
+        if (refinement) {
+          // 6.5.8.2 Refinement/aggregate-coded symbol bitmap
+          var numberOfInstances = decodeInteger(contextCache, 'IAAI', decoder);
+          if (numberOfInstances > 1)
+            error('JBIG2 error: number of instances > 1 is not supported');
+          var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);
+          var rdx = decodeInteger(contextCache, 'IARDX', decoder); // 6.4.11.3
+          var rdy = decodeInteger(contextCache, 'IARDY', decoder); // 6.4.11.4
+          var symbol = symbolId < symbols.length ? symbols[symbolId] :
+            newSymbols[symbolId - symbols.length];
+          bitmap = decodeRefinement(currentWidth, currentHeight,
+            refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt,
+            decodingContext);
+        } else {
+          // 6.5.8.1 Direct-coded symbol bitmap
+          bitmap = decodeBitmap(false, currentWidth, currentHeight,
+            templateIndex, false, null, at, decodingContext);
+        }
+        newSymbols.push(bitmap);
+      }
+    }
+    // 6.5.10 Exported symbols
+    var exportedSymbols = [];
+    var flags = [], currentFlag = false;
+    var totalSymbolsLength = symbols.length + numberOfNewSymbols;
+    while (flags.length < totalSymbolsLength) {
+      var runLength = decodeInteger(contextCache, 'IAEX', decoder);
+      while (runLength--)
+        flags.push(currentFlag);
+      currentFlag = !currentFlag;
+    }
+    for (var i = 0, ii = symbols.length; i < ii; i++)
+      if (flags[i]) exportedSymbols.push(symbols[i]);
+    for (var j = 0; j < numberOfNewSymbols; i++, j++)
+      if (flags[i]) exportedSymbols.push(newSymbols[j]);
+    return exportedSymbols;
+  }
+
+  function decodeTextRegion(huffman, refinement, width, height,
+                            defaultPixelValue, numberOfSymbolInstances,
+                            stripSize, inputSymbols, symbolCodeLength,
+                            transposed, dsOffset, referenceCorner,
+                            combinationOperator, huffmanTables,
+                            refinementTemplateIndex, refinementAt,
+                            decodingContext) {
+    if (huffman)
+      error('JBIG2 error: huffman is not supported');
+
+    // Prepare bitmap
+    var bitmap = [];
+    for (var i = 0; i < height; i++) {
+      var row = new Uint8Array(width);
+      if (defaultPixelValue) {
+        for (var j = 0; j < width; j++)
+          row[j] = defaultPixelValue;
+      }
+      bitmap.push(row);
+    }
+
+    var decoder = decodingContext.decoder;
+    var contextCache = decodingContext.contextCache;
+    var stripT = -decodeInteger(contextCache, 'IADT', decoder); // 6.4.6
+    var firstS = 0;
+    var i = 0;
+    while (i < numberOfSymbolInstances) {
+      var deltaT = decodeInteger(contextCache, 'IADT', decoder); // 6.4.6
+      stripT += deltaT;
+
+      var deltaFirstS = decodeInteger(contextCache, 'IAFS', decoder); // 6.4.7
+      firstS += deltaFirstS;
+      var currentS = firstS;
+      do {
+        var currentT = stripSize == 1 ? 0 :
+          decodeInteger(contextCache, 'IAIT', decoder); // 6.4.9
+        var t = stripSize * stripT + currentT;
+        var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);
+        var applyRefinement = refinement &&
+          decodeInteger(contextCache, 'IARI', decoder);
+        var symbolBitmap = inputSymbols[symbolId];
+        var symbolWidth = symbolBitmap[0].length;
+        var symbolHeight = symbolBitmap.length;
+        if (applyRefinement) {
+          var rdw = decodeInteger(contextCache, 'IARDW', decoder); // 6.4.11.1
+          var rdh = decodeInteger(contextCache, 'IARDH', decoder); // 6.4.11.2
+          var rdx = decodeInteger(contextCache, 'IARDX', decoder); // 6.4.11.3
+          var rdy = decodeInteger(contextCache, 'IARDY', decoder); // 6.4.11.4
+          symbolWidth += rdw;
+          symbolHeight += rdh;
+          symbolBitmap = decodeRefinement(symbolWidth, symbolHeight,
+            refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx,
+            (rdh >> 1) + rdy, false, refinementAt,
+            decodingContext);
+        }
+        var offsetT = t - ((referenceCorner & 1) ? 0 : symbolHeight);
+        var offsetS = currentS - ((referenceCorner & 2) ? symbolWidth : 0);
+        if (transposed) {
+          // Place Symbol Bitmap from T1,S1  
+          for (var s2 = 0; s2 < symbolHeight; s2++) {
+            var row = bitmap[offsetS + s2];
+            if (!row) {
+              continue;
+            }
+            var symbolRow = symbolBitmap[s2];
+            // To ignore Parts of Symbol bitmap which goes
+            // outside bitmap region
+            var maxWidth = Math.min(width - offsetT, symbolWidth);
+            switch (combinationOperator) {
+              case 0: // OR
+                for (var t2 = 0; t2 < maxWidth; t2++) {
+                  row[offsetT + t2] |= symbolRow[t2];
+                }
+                break;
+              case 2: // XOR
+                for (var t2 = 0; t2 < maxWidth; t2++) {
+                  row[offsetT + t2] ^= symbolRow[t2];
+                }
+                break;
+              default:
+                error('JBIG2 error: operator ' + combinationOperator +
+                      ' is not supported');
+            }
+          }
+          currentS += symbolHeight - 1;
+        } else {
+          for (var t2 = 0; t2 < symbolHeight; t2++) {
+            var row = bitmap[offsetT + t2];
+            if (!row) {
+              continue;
+            }
+            var symbolRow = symbolBitmap[t2];
+            switch (combinationOperator) {
+              case 0: // OR
+                for (var s2 = 0; s2 < symbolWidth; s2++) {
+                  row[offsetS + s2] |= symbolRow[s2];
+                }
+                break;
+              case 2: // XOR
+                for (var s2 = 0; s2 < symbolWidth; s2++) {
+                  row[offsetS + s2] ^= symbolRow[s2];
+                }
+                break;
+              default:
+                error('JBIG2 error: operator ' + combinationOperator +
+                      ' is not supported');
+            }
+          }
+          currentS += symbolWidth - 1;
+        }
+        i++;
+        var deltaS = decodeInteger(contextCache, 'IADS', decoder); // 6.4.8
+        if (deltaS === null)
+          break; // OOB
+        currentS += deltaS + dsOffset;
+      } while (true);
+    }
+    return bitmap;
+  }
+
+  function readSegmentHeader(data, start) {
+    var segmentHeader = {};
+    segmentHeader.number = readUint32(data, start);
+    var flags = data[start + 4];
+    var segmentType = flags & 0x3F;
+    if (!SegmentTypes[segmentType])
+      error('JBIG2 error: invalid segment type: ' + segmentType);
+    segmentHeader.type = segmentType;
+    segmentHeader.typeName = SegmentTypes[segmentType];
+    segmentHeader.deferredNonRetain = !!(flags & 0x80);
+    var pageAssociationFieldSize = !!(flags & 0x40);
+    var referredFlags = data[start + 5];
+    var referredToCount = (referredFlags >> 5) & 7;
+    var retainBits = [referredFlags & 31];
+    var position = start + 6;
+    if (referredFlags == 7) {
+      referredToCount = readInt32(data, position - 1) & 0x1FFFFFFF;
+      position += 3;
+      var bytes = (referredToCount + 7) >> 3;
+      retainBits[0] = data[position++];
+      while (--bytes > 0) {
+        retainBits.push(data[position++]);
+      }
+    } else if (referredFlags == 5 || referredFlags == 6)
+      error('JBIG2 error: invalid referred-to flags');
+    segmentHeader.retainBits = retainBits;
+    var referredToSegmentNumberSize = segmentHeader.number <= 256 ? 1 :
+      segmentHeader.number <= 65536 ? 2 : 4;
+    var referredTo = [];
+    for (var i = 0; i < referredToCount; i++) {
+      var number = referredToSegmentNumberSize == 1 ? data[position] :
+        referredToSegmentNumberSize == 2 ? readUint16(data, position) :
+        readUint32(data, position);
+      referredTo.push(number);
+      position += referredToSegmentNumberSize;
+    }
+    segmentHeader.referredTo = referredTo;
+    if (!pageAssociationFieldSize)
+      segmentHeader.pageAssociation = data[position++];
+    else {
+      segmentHeader.pageAssociation = readUint32(data, position);
+      position += 4;
+    }
+    segmentHeader.length = readUint32(data, position);
+    position += 4;
+    if (segmentHeader.length == 0xFFFFFFFF) {
+      // 7.2.7 Segment data length, unknown segment length
+      if (segmentType === 38) { // ImmediateGenericRegion
+        var genericRegionInfo = readRegionSegmentInformation(data, position);
+        var genericRegionSegmentFlags = data[position +
+          RegionSegmentInformationFieldLength];
+        var genericRegionMmr = !!(genericRegionSegmentFlags & 1);
+        // searching for the segment end
+        var searchPatternLength = 6;
+        var searchPattern = new Uint8Array(searchPatternLength);
+        if (!genericRegionMmr) {
+          searchPattern[0] = 0xFF;
+          searchPattern[1] = 0xAC;
+        }
+        searchPattern[2] = (genericRegionInfo.height >>> 24) & 0xFF;
+        searchPattern[3] = (genericRegionInfo.height >> 16) & 0xFF;
+        searchPattern[4] = (genericRegionInfo.height >> 8) & 0xFF;
+        searchPattern[5] = genericRegionInfo.height & 0xFF;
+        for (var i = position, ii = data.length; i < ii; i++) {
+          var j = 0;
+          while (j < searchPatternLength && searchPattern[j] === data[i + j]) {
+            j++;
+          }
+          if (j == searchPatternLength) {
+            segmentHeader.length = i + searchPatternLength;
+            break;
+          }
+        }
+        if (segmentHeader.length == 0xFFFFFFFF) {
+          error('JBIG2 error: segment end was not found');
+        }
+      } else {
+        error('JBIG2 error: invalid unknown segment length');
+      }
+    }
+    segmentHeader.headerEnd = position;
+    return segmentHeader;
+  }
+
+  function readSegments(header, data, start, end) {
+    var segments = [];
+    var position = start;
+    while (position < end) {
+      var segmentHeader = readSegmentHeader(data, position);
+      position = segmentHeader.headerEnd;
+      var segment = {
+        header: segmentHeader,
+        data: data
+      };
+      if (!header.randomAccess) {
+        segment.start = position;
+        position += segmentHeader.length;
+        segment.end = position;
+      }
+      segments.push(segment);
+      if (segmentHeader.type == 51)
+        break; // end of file is found
+    }
+    if (header.randomAccess) {
+      for (var i = 0, ii = segments.length; i < ii; i++) {
+        segments[i].start = position;
+        position += segments[i].header.length;
+        segments[i].end = position;
+      }
+    }
+    return segments;
+  }
+
+  // 7.4.1 Region segment information field
+  function readRegionSegmentInformation(data, start) {
+    return {
+      width: readUint32(data, start),
+      height: readUint32(data, start + 4),
+      x: readUint32(data, start + 8),
+      y: readUint32(data, start + 12),
+      combinationOperator: data[start + 16] & 7
+    };
+  }
+  var RegionSegmentInformationFieldLength = 17;
+
+  function processSegment(segment, visitor) {
+    var header = segment.header;
+
+    var data = segment.data, position = segment.start, end = segment.end;
+    var args;
+    switch (header.type) {
+      case 0: // SymbolDictionary
+        // 7.4.2 Symbol dictionary segment syntax
+        var dictionary = {};
+        var dictionaryFlags = readUint16(data, position); // 7.4.2.1.1
+        dictionary.huffman = !!(dictionaryFlags & 1);
+        dictionary.refinement = !!(dictionaryFlags & 2);
+        dictionary.huffmanDHSelector = (dictionaryFlags >> 2) & 3;
+        dictionary.huffmanDWSelector = (dictionaryFlags >> 4) & 3;
+        dictionary.bitmapSizeSelector = (dictionaryFlags >> 6) & 1;
+        dictionary.aggregationInstancesSelector = (dictionaryFlags >> 7) & 1;
+        dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256);
+        dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512);
+        dictionary.template = (dictionaryFlags >> 10) & 3;
+        dictionary.refinementTemplate = (dictionaryFlags >> 12) & 1;
+        position += 2;
+        if (!dictionary.huffman) {
+          var atLength = dictionary.template === 0 ? 4 : 1;
+          var at = [];
+          for (var i = 0; i < atLength; i++) {
+            at.push({
+              x: readInt8(data, position),
+              y: readInt8(data, position + 1)
+            });
+            position += 2;
+          }
+          dictionary.at = at;
+        }
+        if (dictionary.refinement && !dictionary.refinementTemplate) {
+          var at = [];
+          for (var i = 0; i < 2; i++) {
+            at.push({
+              x: readInt8(data, position),
+              y: readInt8(data, position + 1)
+            });
+            position += 2;
+          }
+          dictionary.refinementAt = at;
+        }
+        dictionary.numberOfExportedSymbols = readUint32(data, position);
+        position += 4;
+        dictionary.numberOfNewSymbols = readUint32(data, position);
+        position += 4;
+        args = [dictionary, header.number, header.referredTo,
+                data, position, end];
+        break;
+      case 6: // ImmediateTextRegion
+      case 7: // ImmediateLosslessTextRegion
+        var textRegion = {};
+        textRegion.info = readRegionSegmentInformation(data, position);
+        position += RegionSegmentInformationFieldLength;
+        var textRegionSegmentFlags = readUint16(data, position);
+        position += 2;
+        textRegion.huffman = !!(textRegionSegmentFlags & 1);
+        textRegion.refinement = !!(textRegionSegmentFlags & 2);
+        textRegion.stripSize = 1 << ((textRegionSegmentFlags >> 2) & 3);
+        textRegion.referenceCorner = (textRegionSegmentFlags >> 4) & 3;
+        textRegion.transposed = !!(textRegionSegmentFlags & 64);
+        textRegion.combinationOperator = (textRegionSegmentFlags >> 7) & 3;
+        textRegion.defaultPixelValue = (textRegionSegmentFlags >> 9) & 1;
+        textRegion.dsOffset = (textRegionSegmentFlags << 17) >> 27;
+        textRegion.refinementTemplate = (textRegionSegmentFlags >> 15) & 1;
+        if (textRegion.huffman) {
+          var textRegionHuffmanFlags = readUint16(data, position);
+          position += 2;
+          textRegion.huffmanFS = (textRegionHuffmanFlags) & 3;
+          textRegion.huffmanDS = (textRegionHuffmanFlags >> 2) & 3;
+          textRegion.huffmanDT = (textRegionHuffmanFlags >> 4) & 3;
+          textRegion.huffmanRefinementDW = (textRegionHuffmanFlags >> 6) & 3;
+          textRegion.huffmanRefinementDH = (textRegionHuffmanFlags >> 8) & 3;
+          textRegion.huffmanRefinementDX = (textRegionHuffmanFlags >> 10) & 3;
+          textRegion.huffmanRefinementDY = (textRegionHuffmanFlags >> 12) & 3;
+          textRegion.huffmanRefinementSizeSelector =
+            !!(textRegionHuffmanFlags & 14);
+        }
+        if (textRegion.refinement && !textRegion.refinementTemplate) {
+          var at = [];
+          for (var i = 0; i < 2; i++) {
+            at.push({
+              x: readInt8(data, position),
+              y: readInt8(data, position + 1)
+            });
+            position += 2;
+          }
+          textRegion.refinementAt = at;
+        }
+        textRegion.numberOfSymbolInstances = readUint32(data, position);
+        position += 4;
+        // TODO 7.4.3.1.7 Symbol ID Huffman table decoding
+        if (textRegion.huffman)
+          error('JBIG2 error: huffman is not supported');
+        args = [textRegion, header.referredTo, data, position, end];
+        break;
+      case 38: // ImmediateGenericRegion
+      case 39: // ImmediateLosslessGenericRegion
+        var genericRegion = {};
+        genericRegion.info = readRegionSegmentInformation(data, position);
+        position += RegionSegmentInformationFieldLength;
+        var genericRegionSegmentFlags = data[position++];
+        genericRegion.mmr = !!(genericRegionSegmentFlags & 1);
+        genericRegion.template = (genericRegionSegmentFlags >> 1) & 3;
+        genericRegion.prediction = !!(genericRegionSegmentFlags & 8);
+        if (!genericRegion.mmr) {
+          var atLength = genericRegion.template === 0 ? 4 : 1;
+          var at = [];
+          for (var i = 0; i < atLength; i++) {
+            at.push({
+              x: readInt8(data, position),
+              y: readInt8(data, position + 1)
+            });
+            position += 2;
+          }
+          genericRegion.at = at;
+        }
+        args = [genericRegion, data, position, end];
+        break;
+      case 48: // PageInformation
+        var pageInfo = {
+          width: readUint32(data, position),
+          height: readUint32(data, position + 4),
+          resolutionX: readUint32(data, position + 8),
+          resolutionY: readUint32(data, position + 12)
+        };
+        if (pageInfo.height == 0xFFFFFFFF)
+          delete pageInfo.height;
+        var pageSegmentFlags = data[position + 16];
+        var pageStripingInformatiom = readUint16(data, position + 17);
+        pageInfo.lossless = !!(pageSegmentFlags & 1);
+        pageInfo.refinement = !!(pageSegmentFlags & 2);
+        pageInfo.defaultPixelValue = (pageSegmentFlags >> 2) & 1;
+        pageInfo.combinationOperator = (pageSegmentFlags >> 3) & 3;
+        pageInfo.requiresBuffer = !!(pageSegmentFlags & 32);
+        pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64);
+        args = [pageInfo];
+        break;
+      case 49: // EndOfPage
+        break;
+      case 50: // EndOfStripe
+        break;
+      case 51: // EndOfFile
+        break;
+      case 62: // 7.4.15 defines 2 extension types which
+               // are comments and can be ignored.
+        break;
+      default:
+        error('JBIG2 error: segment type ' + header.typeName + '(' +
+              header.type + ') is not implemented');
+    }
+    var callbackName = 'on' + header.typeName;
+    if (callbackName in visitor)
+      visitor[callbackName].apply(visitor, args);
+  }
+
+  function processSegments(segments, visitor) {
+    for (var i = 0, ii = segments.length; i < ii; i++)
+      processSegment(segments[i], visitor);
+  }
+
+  function parseJbig2(data, start, end) {
+    var position = start;
+    if (data[position] != 0x97 || data[position + 1] != 0x4A ||
+        data[position + 2] != 0x42 || data[position + 3] != 0x32 ||
+        data[position + 4] != 0x0D || data[position + 5] != 0x0A ||
+        data[position + 6] != 0x1A || data[position + 7] != 0x0A)
+      error('JBIG2 error: invalid header');
+    var header = {};
+    position += 8;
+    var flags = data[position++];
+    header.randomAccess = !(flags & 1);
+    if (!(flags & 2)) {
+      header.numberOfPages = readUint32(data, position);
+      position += 4;
+    }
+    var segments = readSegments(header, data, position, end);
+    error('Not implemented');
+    // processSegments(segments, new SimpleSegmentVisitor());
+  }
+
+  function parseJbig2Chunks(chunks) {
+    var visitor = new SimpleSegmentVisitor();
+    for (var i = 0, ii = chunks.length; i < ii; i++) {
+      var chunk = chunks[i];
+      var segments = readSegments({}, chunk.data, chunk.start, chunk.end);
+      processSegments(segments, visitor);
+    }
+    return visitor.buffer;
+  }
+
+  function SimpleSegmentVisitor() {}
+
+  SimpleSegmentVisitor.prototype = {
+    onPageInformation: function SimpleSegmentVisitor_onPageInformation(info) {
+      this.currentPageInfo = info;
+      var rowSize = (info.width + 7) >> 3;
+      var buffer = new Uint8Array(rowSize * info.height);
+      var fill = info.defaultPixelValue ? 0xFF : 0;
+      for (var i = 0, ii = buffer.length; i < ii; i++)
+        buffer[i] = fill;
+      this.buffer = buffer;
+    },
+    drawBitmap: function SimpleSegmentVisitor_drawBitmap(regionInfo, bitmap) {
+      var pageInfo = this.currentPageInfo;
+      var width = regionInfo.width, height = regionInfo.height;
+      var rowSize = (pageInfo.width + 7) >> 3;
+      var combinationOperator = pageInfo.combinationOperatorOverride ?
+        regionInfo.combinationOperator : pageInfo.combinationOperator;
+      var buffer = this.buffer;
+      for (var i = 0; i < height; i++) {
+        var mask = 128 >> (regionInfo.x & 7);
+        var offset = (i + regionInfo.y) * rowSize + (regionInfo.x >> 3);
+        switch (combinationOperator) {
+          case 0: // OR
+            for (var j = 0; j < width; j++) {
+              buffer[offset] |= bitmap[i][j] ? mask : 0;
+              mask >>= 1;
+              if (!mask) {
+                mask = 128;
+                offset++;
+              }
+            }
+            break;
+          case 2: // XOR
+            for (var j = 0; j < width; j++) {
+              buffer[offset] ^= bitmap[i][j] ? mask : 0;
+              mask >>= 1;
+              if (!mask) {
+                mask = 128;
+                offset++;
+              }
+            }
+            break;
+          default:
+            error('JBIG2 error: operator ' + combinationOperator +
+                  ' is not supported');
+        }
+      }
+    },
+    onImmediateGenericRegion:
+      function SimpleSegmentVisitor_onImmediateGenericRegion(region, data,
+                                                             start, end) {
+      var regionInfo = region.info;
+      var decodingContext = new DecodingContext(data, start, end);
+      var bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height,
+                                region.template, region.prediction, null,
+                                region.at, decodingContext);
+      this.drawBitmap(regionInfo, bitmap);
+    },
+    onImmediateLosslessGenericRegion:
+      function SimpleSegmentVisitor_onImmediateLosslessGenericRegion() {
+      this.onImmediateGenericRegion.apply(this, arguments);
+    },
+    onSymbolDictionary:
+      function SimpleSegmentVisitor_onSymbolDictionary(dictionary,
+                                                       currentSegment,
+                                                       referredSegments,
+                                                       data, start, end) {
+      var huffmanTables;
+      if (dictionary.huffman)
+        error('JBIG2 error: huffman is not supported');
+
+      // Combines exported symbols from all referred segments
+      var symbols = this.symbols;
+      if (!symbols)
+        this.symbols = symbols = {};
+
+      var inputSymbols = [];
+      for (var i = 0, ii = referredSegments.length; i < ii; i++)
+        inputSymbols = inputSymbols.concat(symbols[referredSegments[i]]);
+
+      var decodingContext = new DecodingContext(data, start, end);
+      symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman,
+        dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols,
+        dictionary.numberOfExportedSymbols, huffmanTables,
+        dictionary.template, dictionary.at,
+        dictionary.refinementTemplate, dictionary.refinementAt,
+        decodingContext);
+    },
+    onImmediateTextRegion:
+      function SimpleSegmentVisitor_onImmediateTextRegion(region,
+                                                          referredSegments,
+                                                          data, start, end) {
+      var regionInfo = region.info;
+      var huffmanTables;
+
+      // Combines exported symbols from all referred segments
+      var symbols = this.symbols;
+      var inputSymbols = [];
+      for (var i = 0, ii = referredSegments.length; i < ii; i++)
+        inputSymbols = inputSymbols.concat(symbols[referredSegments[i]]);
+      var symbolCodeLength = log2(inputSymbols.length);
+
+      var decodingContext = new DecodingContext(data, start, end);
+      var bitmap = decodeTextRegion(region.huffman, region.refinement,
+        regionInfo.width, regionInfo.height, region.defaultPixelValue,
+        region.numberOfSymbolInstances, region.stripSize, inputSymbols,
+        symbolCodeLength, region.transposed, region.dsOffset,
+        region.referenceCorner, region.combinationOperator, huffmanTables,
+        region.refinementTemplate, region.refinementAt, decodingContext);
+      this.drawBitmap(regionInfo, bitmap);
+    },
+    onImmediateLosslessTextRegion:
+      function SimpleSegmentVisitor_onImmediateLosslessTextRegion() {
+        this.onImmediateTextRegion.apply(this, arguments);
+    }
+  };
+
+  function Jbig2Image() {}
+
+  Jbig2Image.prototype = {
+    parseChunks: function Jbig2Image_parseChunks(chunks) {
+      return parseJbig2Chunks(chunks);
+    }
+  };
+
+  return Jbig2Image;
+})();
+
+
+var bidi = PDFJS.bidi = (function bidiClosure() {
+  // Character types for symbols from 0000 to 00FF.
+  var baseTypes = [
+    'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'S', 'B', 'S', 'WS',
+    'B', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN',
+    'BN', 'BN', 'B', 'B', 'B', 'S', 'WS', 'ON', 'ON', 'ET', 'ET', 'ET', 'ON',
+    'ON', 'ON', 'ON', 'ON', 'ON', 'CS', 'ON', 'CS', 'ON', 'EN', 'EN', 'EN',
+    'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'ON', 'ON', 'ON', 'ON', 'ON',
+    'ON', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L',
+    'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'ON', 'ON',
+    'ON', 'ON', 'ON', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L',
+    'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L',
+    'L', 'ON', 'ON', 'ON', 'ON', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'B', 'BN',
+    'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN',
+    'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN',
+    'BN', 'CS', 'ON', 'ET', 'ET', 'ET', 'ET', 'ON', 'ON', 'ON', 'ON', 'L', 'ON',
+    'ON', 'ON', 'ON', 'ON', 'ET', 'ET', 'EN', 'EN', 'ON', 'L', 'ON', 'ON', 'ON',
+    'EN', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L',
+    'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L',
+    'L', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L',
+    'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L',
+    'L', 'L', 'L', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L'
+  ];
+
+  // Character types for symbols from 0600 to 06FF
+  var arabicTypes = [
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'CS', 'AL', 'ON', 'ON', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM',
+    'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN',
+    'AN', 'ET', 'AN', 'AN', 'AL', 'AL', 'AL', 'NSM', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM',
+    'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'ON', 'NSM',
+    'NSM', 'NSM', 'NSM', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL'
+  ];
+
+  function isOdd(i) {
+    return (i & 1) !== 0;
+  }
+
+  function isEven(i) {
+    return (i & 1) === 0;
+  }
+
+  function findUnequal(arr, start, value) {
+    var j;
+    for (var j = start, jj = arr.length; j < jj; ++j) {
+      if (arr[j] != value)
+        return j;
+    }
+    return j;
+  }
+
+  function setValues(arr, start, end, value) {
+    for (var j = start; j < end; ++j) {
+      arr[j] = value;
+    }
+  }
+
+  function reverseValues(arr, start, end) {
+    for (var i = start, j = end - 1; i < j; ++i, --j) {
+      var temp = arr[i];
+      arr[i] = arr[j];
+      arr[j] = temp;
+    }
+  }
+
+  function mirrorGlyphs(c) {
+    /*
+     # BidiMirroring-1.txt
+     0028; 0029 # LEFT PARENTHESIS
+     0029; 0028 # RIGHT PARENTHESIS
+     003C; 003E # LESS-THAN SIGN
+     003E; 003C # GREATER-THAN SIGN
+     005B; 005D # LEFT SQUARE BRACKET
+     005D; 005B # RIGHT SQUARE BRACKET
+     007B; 007D # LEFT CURLY BRACKET
+     007D; 007B # RIGHT CURLY BRACKET
+     00AB; 00BB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+     00BB; 00AB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+     */
+    switch (c) {
+      case '(':
+        return ')';
+      case ')':
+        return '(';
+      case '<':
+        return '>';
+      case '>':
+        return '<';
+      case ']':
+        return '[';
+      case '[':
+        return ']';
+      case '}':
+        return '{';
+      case '{':
+        return '}';
+      case '\u00AB':
+        return '\u00BB';
+      case '\u00BB':
+        return '\u00AB';
+      default:
+        return c;
+    }
+  }
+
+  function BidiResult(str, isLTR, vertical) {
+    this.str = str;
+    this.dir = vertical ? 'ttb' : isLTR ? 'ltr' : 'rtl';
+  }
+
+  function bidi(str, startLevel, vertical) {
+    var isLTR = true;
+    var strLength = str.length;
+    if (strLength === 0 || vertical)
+      return new BidiResult(str, isLTR, vertical);
+
+    // get types, fill arrays
+
+    var chars = [];
+    var types = [];
+    var oldtypes = [];
+    var numBidi = 0;
+
+    for (var i = 0; i < strLength; ++i) {
+      chars[i] = str.charAt(i);
+
+      var charCode = str.charCodeAt(i);
+      var charType = 'L';
+      if (charCode <= 0x00ff)
+        charType = baseTypes[charCode];
+      else if (0x0590 <= charCode && charCode <= 0x05f4)
+        charType = 'R';
+      else if (0x0600 <= charCode && charCode <= 0x06ff)
+        charType = arabicTypes[charCode & 0xff];
+      else if (0x0700 <= charCode && charCode <= 0x08AC)
+        charType = 'AL';
+
+      if (charType == 'R' || charType == 'AL' || charType == 'AN')
+        numBidi++;
+
+      oldtypes[i] = types[i] = charType;
+    }
+
+    // detect the bidi method
+    //  if there are no rtl characters then no bidi needed
+    //  if less than 30% chars are rtl then string is primarily ltr
+    //  if more than 30% chars are rtl then string is primarily rtl
+    if (numBidi === 0) {
+      isLTR = true;
+      return new BidiResult(str, isLTR);
+    }
+
+    if (startLevel == -1) {
+      if ((strLength / numBidi) < 0.3) {
+        isLTR = true;
+        startLevel = 0;
+      } else {
+        isLTR = false;
+        startLevel = 1;
+      }
+    }
+
+    var levels = [];
+
+    for (var i = 0; i < strLength; ++i) {
+      levels[i] = startLevel;
+    }
+
+    /*
+     X1-X10: skip most of this, since we are NOT doing the embeddings.
+     */
+
+    var e = isOdd(startLevel) ? 'R' : 'L';
+    var sor = e;
+    var eor = sor;
+
+    /*
+     W1. Examine each non-spacing mark (NSM) in the level run, and change the
+     type of the NSM to the type of the previous character. If the NSM is at the
+     start of the level run, it will get the type of sor.
+     */
+
+    var lastType = sor;
+    for (var i = 0; i < strLength; ++i) {
+      if (types[i] == 'NSM')
+        types[i] = lastType;
+      else
+        lastType = types[i];
+    }
+
+    /*
+     W2. Search backwards from each instance of a European number until the
+     first strong type (R, L, AL, or sor) is found.  If an AL is found, change
+     the type of the European number to Arabic number.
+     */
+
+    var lastType = sor;
+    for (var i = 0; i < strLength; ++i) {
+      var t = types[i];
+      if (t == 'EN')
+        types[i] = (lastType == 'AL') ? 'AN' : 'EN';
+      else if (t == 'R' || t == 'L' || t == 'AL')
+        lastType = t;
+    }
+
+    /*
+     W3. Change all ALs to R.
+     */
+
+    for (var i = 0; i < strLength; ++i) {
+      var t = types[i];
+      if (t == 'AL')
+        types[i] = 'R';
+    }
+
+    /*
+     W4. A single European separator between two European numbers changes to a
+     European number. A single common separator between two numbers of the same
+     type changes to that type:
+     */
+
+    for (var i = 1; i < strLength - 1; ++i) {
+      if (types[i] == 'ES' && types[i - 1] == 'EN' && types[i + 1] == 'EN')
+        types[i] = 'EN';
+      if (types[i] == 'CS' && (types[i - 1] == 'EN' || types[i - 1] == 'AN') &&
+          types[i + 1] == types[i - 1])
+        types[i] = types[i - 1];
+    }
+
+    /*
+     W5. A sequence of European terminators adjacent to European numbers changes
+     to all European numbers:
+     */
+
+    for (var i = 0; i < strLength; ++i) {
+      if (types[i] == 'EN') {
+        // do before
+        for (var j = i - 1; j >= 0; --j) {
+          if (types[j] != 'ET')
+            break;
+          types[j] = 'EN';
+        }
+        // do after
+        for (var j = i + 1; j < strLength; --j) {
+          if (types[j] != 'ET')
+            break;
+          types[j] = 'EN';
+        }
+      }
+    }
+
+    /*
+     W6. Otherwise, separators and terminators change to Other Neutral:
+     */
+
+    for (var i = 0; i < strLength; ++i) {
+      var t = types[i];
+      if (t == 'WS' || t == 'ES' || t == 'ET' || t == 'CS')
+        types[i] = 'ON';
+    }
+
+    /*
+     W7. Search backwards from each instance of a European number until the
+     first strong type (R, L, or sor) is found. If an L is found,  then change
+     the type of the European number to L.
+     */
+
+    var lastType = sor;
+    for (var i = 0; i < strLength; ++i) {
+      var t = types[i];
+      if (t == 'EN')
+        types[i] = (lastType == 'L') ? 'L' : 'EN';
+      else if (t == 'R' || t == 'L')
+        lastType = t;
+    }
+
+    /*
+     N1. A sequence of neutrals takes the direction of the surrounding strong
+     text if the text on both sides has the same direction. European and Arabic
+     numbers are treated as though they were R. Start-of-level-run (sor) and
+     end-of-level-run (eor) are used at level run boundaries.
+     */
+
+    for (var i = 0; i < strLength; ++i) {
+      if (types[i] == 'ON') {
+        var end = findUnequal(types, i + 1, 'ON');
+        var before = sor;
+        if (i > 0)
+          before = types[i - 1];
+        var after = eor;
+        if (end + 1 < strLength)
+          after = types[end + 1];
+        if (before != 'L')
+          before = 'R';
+        if (after != 'L')
+          after = 'R';
+        if (before == after)
+          setValues(types, i, end, before);
+        i = end - 1; // reset to end (-1 so next iteration is ok)
+      }
+    }
+
+    /*
+     N2. Any remaining neutrals take the embedding direction.
+     */
+
+    for (var i = 0; i < strLength; ++i) {
+      if (types[i] == 'ON')
+        types[i] = e;
+    }
+
+    /*
+     I1. For all characters with an even (left-to-right) embedding direction,
+     those of type R go up one level and those of type AN or EN go up two
+     levels.
+     I2. For all characters with an odd (right-to-left) embedding direction,
+     those of type L, EN or AN go up one level.
+     */
+
+    for (var i = 0; i < strLength; ++i) {
+      var t = types[i];
+      if (isEven(levels[i])) {
+        if (t == 'R') {
+          levels[i] += 1;
+        } else if (t == 'AN' || t == 'EN') {
+          levels[i] += 2;
+        }
+      } else { // isOdd, so
+        if (t == 'L' || t == 'AN' || t == 'EN') {
+          levels[i] += 1;
+        }
+      }
+    }
+
+    /*
+     L1. On each line, reset the embedding level of the following characters to
+     the paragraph embedding level:
+
+     segment separators,
+     paragraph separators,
+     any sequence of whitespace characters preceding a segment separator or
+     paragraph separator, and any sequence of white space characters at the end
+     of the line.
+     */
+
+    // don't bother as text is only single line
+
+    /*
+     L2. From the highest level found in the text to the lowest odd level on
+     each line, reverse any contiguous sequence of characters that are at that
+     level or higher.
+     */
+
+    // find highest level & lowest odd level
+
+    var highestLevel = -1;
+    var lowestOddLevel = 99;
+    for (var i = 0, ii = levels.length; i < ii; ++i) {
+      var level = levels[i];
+      if (highestLevel < level)
+        highestLevel = level;
+      if (lowestOddLevel > level && isOdd(level))
+        lowestOddLevel = level;
+    }
+
+    // now reverse between those limits
+
+    for (var level = highestLevel; level >= lowestOddLevel; --level) {
+      // find segments to reverse
+      var start = -1;
+      for (var i = 0, ii = levels.length; i < ii; ++i) {
+        if (levels[i] < level) {
+          if (start >= 0) {
+            reverseValues(chars, start, i);
+            start = -1;
+          }
+        } else if (start < 0) {
+          start = i;
+        }
+      }
+      if (start >= 0) {
+        reverseValues(chars, start, levels.length);
+      }
+    }
+
+    /*
+     L3. Combining marks applied to a right-to-left base character will at this
+     point precede their base character. If the rendering engine expects them to
+     follow the base characters in the final display process, then the ordering
+     of the marks and the base character must be reversed.
+     */
+
+    // don't bother for now
+
+    /*
+     L4. A character that possesses the mirrored property as specified by
+     Section 4.7, Mirrored, must be depicted by a mirrored glyph if the resolved
+     directionality of that character is R.
+     */
+
+    // don't mirror as characters are already mirrored in the pdf
+
+    // Finally, return string
+
+    var result = '';
+    for (var i = 0, ii = chars.length; i < ii; ++i) {
+      var ch = chars[i];
+      if (ch != '<' && ch != '>')
+        result += ch;
+    }
+
+    return new BidiResult(result, isLTR);
+  }
+
+  return bidi;
+})();
+
+
+
+var CMAP_CODESPACES = {
+  'Adobe-CNS1-0': [[], [0, 14335]],
+  'Adobe-CNS1-1': [[], [0, 17407]],
+  'Adobe-CNS1-2': [[], [0, 17663]],
+  'Adobe-CNS1-3': [[], [0, 18943]],
+  'Adobe-CNS1-4': [[], [0, 19199]],
+  'Adobe-CNS1-5': [[], [0, 19199]],
+  'Adobe-CNS1-6': [[], [0, 19199]],
+  'Adobe-CNS1-UCS2': [[], [0, 65535]],
+  'B5-H': [[0, 128], [41280, 65278]],
+  'B5-V': [[0, 128], [41280, 65278]],
+  'B5pc-H': [[0, 128, 253, 255], [41280, 64766]],
+  'B5pc-V': [[0, 128, 253, 255], [41280, 64766]],
+  'CNS-EUC-H': [[0, 128], [41377, 65278], [],
+    [2392957345, 2392981246, 2393022881, 2393046782, 2393088417, 2393112318]],
+  'CNS-EUC-V': [[0, 128], [41377, 65278], [],
+    [2392957345, 2392981246, 2393022881, 2393046782, 2393088417, 2393112318]],
+  'CNS1-H': [[], [8481, 32382]],
+  'CNS1-V': [[], [8481, 32382]],
+  'CNS2-H': [[], [8481, 32382]],
+  'CNS2-V': [[], [8481, 32382]],
+  'ETen-B5-H': [[0, 128], [41280, 65278]],
+  'ETen-B5-V': [[0, 128], [41280, 65278]],
+  'ETenms-B5-H': [[0, 128], [41280, 65278]],
+  'ETenms-B5-V': [[0, 128], [41280, 65278]],
+  'ETHK-B5-H': [[0, 128], [34624, 65278]],
+  'ETHK-B5-V': [[0, 128], [34624, 65278]],
+  'HKdla-B5-H': [[0, 128], [41280, 65278]],
+  'HKdla-B5-V': [[0, 128], [41280, 65278]],
+  'HKdlb-B5-H': [[0, 128], [36416, 65278]],
+  'HKdlb-B5-V': [[0, 128], [36416, 65278]],
+  'HKgccs-B5-H': [[0, 128], [35392, 65278]],
+  'HKgccs-B5-V': [[0, 128], [35392, 65278]],
+  'HKm314-B5-H': [[0, 128], [41280, 65278]],
+  'HKm314-B5-V': [[0, 128], [41280, 65278]],
+  'HKm471-B5-H': [[0, 128], [41280, 65278]],
+  'HKm471-B5-V': [[0, 128], [41280, 65278]],
+  'HKscs-B5-H': [[0, 128], [34624, 65278]],
+  'HKscs-B5-V': [[0, 128], [34624, 65278]],
+  'UniCNS-UCS2-H': [[], [0, 55295, 57344, 65535]],
+  'UniCNS-UCS2-V': [[], [0, 55295, 57344, 65535]],
+  'UniCNS-UTF16-H': [[], [0, 55295, 57344, 65535], [],
+    [3623934976, 3690979327]],
+  'UniCNS-UTF16-V': [[], [0, 55295, 57344, 65535], [],
+    [3623934976, 3690979327]],
+  'Adobe-GB1-0': [[], [0, 7935]],
+  'Adobe-GB1-1': [[], [0, 9983]],
+  'Adobe-GB1-2': [[], [0, 22271]],
+  'Adobe-GB1-3': [[], [0, 22527]],
+  'Adobe-GB1-4': [[], [0, 29183]],
+  'Adobe-GB1-5': [[], [0, 30463]],
+  'Adobe-GB1-UCS2': [[], [0, 65535]],
+  'GB-EUC-H': [[0, 128], [41377, 65278]],
+  'GB-EUC-V': [[0, 128], [41377, 65278]],
+  'GB-H': [[], [8481, 32382]],
+  'GB-V': [[], [8481, 32382]],
+  'GBK-EUC-H': [[0, 128], [33088, 65278]],
+  'GBK-EUC-V': [[0, 128], [33088, 65278]],
+  'GBK2K-H': [[0, 127], [33088, 65278], [], [2167439664, 4265213497]],
+  'GBK2K-V': [[0, 127], [33088, 65278], [], [2167439664, 4265213497]],
+  'GBKp-EUC-H': [[0, 128], [33088, 65278]],
+  'GBKp-EUC-V': [[0, 128], [33088, 65278]],
+  'GBpc-EUC-H': [[0, 128, 253, 255], [41377, 64766]],
+  'GBpc-EUC-V': [[0, 128, 253, 255], [41377, 64766]],
+  'GBT-EUC-H': [[0, 128], [41377, 65278]],
+  'GBT-EUC-V': [[0, 128], [41377, 65278]],
+  'GBT-H': [[], [8481, 32382]],
+  'GBT-V': [[], [8481, 32382]],
+  'GBTpc-EUC-H': [[0, 128, 253, 255], [41377, 64766]],
+  'GBTpc-EUC-V': [[0, 128, 253, 255], [41377, 64766]],
+  'UniGB-UCS2-H': [[], [0, 55295, 57344, 65535]],
+  'UniGB-UCS2-V': [[], [0, 55295, 57344, 65535]],
+  'UniGB-UTF16-H': [[], [0, 55295, 57344, 65535], [], [3623934976, 3690979327]],
+  'UniGB-UTF16-V': [[], [0, 55295, 57344, 65535], [], [3623934976, 3690979327]],
+  '78-EUC-H': [[0, 128], [36512, 36575, 41377, 65278]],
+  '78-EUC-V': [[0, 128], [36512, 36575, 41377, 65278]],
+  '78-H': [[], [8481, 32382]],
+  '78-RKSJ-H': [[0, 128, 160, 223], [33088, 40956, 57408, 64764]],
+  '78-RKSJ-V': [[0, 128, 160, 223], [33088, 40956, 57408, 64764]],
+  '78-V': [[], [8481, 32382]],
+  '78ms-RKSJ-H': [[0, 128, 160, 223], [33088, 40956, 57408, 64764]],
+  '78ms-RKSJ-V': [[0, 128, 160, 223], [33088, 40956, 57408, 64764]],
+  '83pv-RKSJ-H': [[0, 128, 160, 223, 253, 255], [33088, 40956, 57408, 64764]],
+  '90ms-RKSJ-H': [[0, 128, 160, 223], [33088, 40956, 57408, 64764]],
+  '90ms-RKSJ-V': [[0, 128, 160, 223], [33088, 40956, 57408, 64764]],
+  '90msp-RKSJ-H': [[0, 128, 160, 223], [33088, 40956, 57408, 64764]],
+  '90msp-RKSJ-V': [[0, 128, 160, 223], [33088, 40956, 57408, 64764]],
+  '90pv-RKSJ-H': [[0, 128, 160, 223, 253, 255], [33088, 40956, 57408, 64764]],
+  '90pv-RKSJ-V': [[0, 128, 160, 223, 253, 255], [33088, 40956, 57408, 64764]],
+  'Add-H': [[], [8481, 32382]],
+  'Add-RKSJ-H': [[0, 128, 160, 223], [33088, 40956, 57408, 64764]],
+  'Add-RKSJ-V': [[0, 128, 160, 223], [33088, 40956, 57408, 64764]],
+  'Add-V': [[], [8481, 32382]],
+  'Adobe-Japan1-0': [[], [0, 8447]],
+  'Adobe-Japan1-1': [[], [0, 8447]],
+  'Adobe-Japan1-2': [[], [0, 8959]],
+  'Adobe-Japan1-3': [[], [0, 9471]],
+  'Adobe-Japan1-4': [[], [0, 15615]],
+  'Adobe-Japan1-5': [[], [0, 20479]],
+  'Adobe-Japan1-6': [[], [0, 23295]],
+  'Adobe-Japan1-UCS2': [[], [0, 65535]],
+  'Adobe-Japan2-0': [[], [0, 6143]],
+  'EUC-H': [[0, 128], [36512, 36575, 41377, 65278]],
+  'EUC-V': [[0, 128], [36512, 36575, 41377, 65278]],
+  'Ext-H': [[], [8481, 32382]],
+  'Ext-RKSJ-H': [[0, 128, 160, 223], [33088, 40956, 57408, 64764]],
+  'Ext-RKSJ-V': [[0, 128, 160, 223], [33088, 40956, 57408, 64764]],
+  'Ext-V': [[], [8481, 32382]],
+  'H': [[], [8481, 32382]],
+  'Hankaku': [[0, 255], []],
+  'Hiragana': [[0, 255], []],
+  'Hojo-EUC-H': [[], [], [9413025, 9436926], []],
+  'Hojo-EUC-V': [[], [], [9413025, 9436926], []],
+  'Hojo-H': [[], [8481, 32382]],
+  'Hojo-V': [[], [8481, 32382]],
+  'Katakana': [[0, 255], []],
+  'NWP-H': [[], [8481, 32382]],
+  'NWP-V': [[], [8481, 32382]],
+  'RKSJ-H': [[0, 128, 160, 223], [33088, 40956, 57408, 64764]],
+  'RKSJ-V': [[0, 128, 160, 223], [33088, 40956, 57408, 64764]],
+  'Roman': [[0, 255], []],
+  'UniHojo-UCS2-H': [[], [0, 55295, 57344, 65535]],
+  'UniHojo-UCS2-V': [[], [0, 55295, 57344, 65535]],
+  'UniHojo-UTF16-H': [[], [0, 55295, 57344, 65535], [],
+    [3623934976, 3690979327]],
+  'UniHojo-UTF16-V': [[], [0, 55295, 57344, 65535], [],
+    [3623934976, 3690979327]],
+  'UniJIS-UCS2-H': [[], [0, 55295, 57344, 65535]],
+  'UniJIS-UCS2-HW-H': [[], [0, 55295, 57344, 65535]],
+  'UniJIS-UCS2-HW-V': [[], [0, 55295, 57344, 65535]],
+  'UniJIS-UCS2-V': [[], [0, 55295, 57344, 65535]],
+  'UniJIS-UTF16-H': [[], [0, 55295, 57344, 65535], [],
+    [3623934976, 3690979327]],
+  'UniJIS-UTF16-V': [[], [0, 55295, 57344, 65535], [],
+    [3623934976, 3690979327]],
+  'UniJISPro-UCS2-HW-V': [[], [0, 55295, 57344, 65535]],
+  'UniJISPro-UCS2-V': [[], [0, 55295, 57344, 65535]],
+  'V': [[], [8481, 32382]],
+  'WP-Symbol': [[0, 255], []],
+  'Adobe-Korea1-0': [[], [0, 9471]],
+  'Adobe-Korea1-1': [[], [0, 18175]],
+  'Adobe-Korea1-2': [[], [0, 18431]],
+  'Adobe-Korea1-UCS2': [[], [0, 65535]],
+  'KSC-EUC-H': [[0, 128], [41377, 65278]],
+  'KSC-EUC-V': [[0, 128], [41377, 65278]],
+  'KSC-H': [[], [8481, 32382]],
+  'KSC-Johab-H': [[0, 128], [33857, 54270, 55345, 57086, 57393, 63998]],
+  'KSC-Johab-V': [[0, 128], [33857, 54270, 55345, 57086, 57393, 63998]],
+  'KSC-V': [[], [8481, 32382]],
+  'KSCms-UHC-H': [[0, 128], [33089, 65278]],
+  'KSCms-UHC-HW-H': [[0, 128], [33089, 65278]],
+  'KSCms-UHC-HW-V': [[0, 128], [33089, 65278]],
+  'KSCms-UHC-V': [[0, 128], [33089, 65278]],
+  'KSCpc-EUC-H': [[0, 132, 254, 255], [41281, 65022]],
+  'KSCpc-EUC-V': [[0, 132, 254, 255], [41281, 65022]],
+  'UniKS-UCS2-H': [[], [0, 55295, 57344, 65535]],
+  'UniKS-UCS2-V': [[], [0, 55295, 57344, 65535]],
+  'UniKS-UTF16-H': [[], [0, 55295, 57344, 65535], [], [3623934976, 3690979327]],
+  'UniKS-UTF16-V': [[], [0, 55295, 57344, 65535], [], [3623934976, 3690979327]]
+};
+
+// CMap, not to be confused with TrueType's cmap.
+var CMap = (function CMapClosure() {
+  function CMap() {
+    // Codespace ranges are stored as follows:
+    // [[1BytePairs], [2BytePairs], [3BytePairs], [4BytePairs]]
+    // where nBytePairs are ranges e.g. [low1, high1, low2, high2, ...]
+    this.codespaceRanges = [[], [], [], []];
+    this.map = [];
+    this.vertical = false;
+  }
+  CMap.prototype = {
+    addCodespaceRange: function(n, low, high) {
+      this.codespaceRanges[n - 1].push(low, high);
+    },
+
+    mapRange: function(low, high, dstLow) {
+      var lastByte = dstLow.length - 1;
+      while (low <= high) {
+        this.map[low] = dstLow;
+        // Only the last byte has to be incremented.
+        dstLow = dstLow.substr(0, lastByte) +
+                 String.fromCharCode(dstLow.charCodeAt(lastByte) + 1);
+        ++low;
+      }
+    },
+
+    mapRangeToArray: function(low, high, array) {
+      var i = 0;
+      while (low <= high) {
+        this.map[low] = array[i++];
+        ++low;
+      }
+    },
+
+    mapOne: function(src, dst) {
+      this.map[src] = dst;
+    },
+
+    lookup: function(code) {
+      return this.map[code];
+    },
+
+    readCharCode: function(str, offset) {
+      var c = 0;
+      var codespaceRanges = this.codespaceRanges;
+      var codespaceRangesLen = this.codespaceRanges.length;
+      // 9.7.6.2 CMap Mapping
+      // The code length is at most 4.
+      for (var n = 0; n < codespaceRangesLen; n++) {
+        c = ((c << 8) | str.charCodeAt(offset + n)) >>> 0;
+        // Check each codespace range to see if it falls within.
+        var codespaceRange = codespaceRanges[n];
+        for (var k = 0, kk = codespaceRange.length; k < kk;) {
+          var low = codespaceRange[k++];
+          var high = codespaceRange[k++];
+          if (c >= low && c <= high) {
+            return [c, n + 1];
+          }
+        }
+      }
+
+      return [0, 1];
+    }
+
+  };
+  return CMap;
+})();
+
+var IdentityCMap = (function IdentityCMapClosure() {
+  function IdentityCMap(vertical, n) {
+    CMap.call(this);
+    this.vertical = vertical;
+    this.addCodespaceRange(n, 0, 0xffff);
+    this.mapRange(0, 0xffff, '\u0000');
+  }
+  Util.inherit(IdentityCMap, CMap, {});
+
+  return IdentityCMap;
+})();
+
+var CMapFactory = (function CMapFactoryClosure() {
+  function strToInt(str) {
+    var a = 0;
+    for (var i = 0; i < str.length; i++) {
+      a = (a << 8) | str.charCodeAt(i);
+    }
+    return a >>> 0;
+  }
+
+  function expectString(obj) {
+    if (!isString(obj)) {
+      error('Malformed CMap: expected string.');
+    }
+  }
+
+  function expectInt(obj) {
+    if (!isInt(obj)) {
+      error('Malformed CMap: expected int.');
+    }
+  }
+
+  function parseBfChar(cMap, lexer) {
+    while (true) {
+      var obj = lexer.getObj();
+      if (isEOF(obj)) {
+        break;
+      }
+      if (isCmd(obj, 'endbfchar')) {
+        return;
+      }
+      expectString(obj);
+      var src = strToInt(obj);
+      obj = lexer.getObj();
+      // TODO are /dstName used?
+      expectString(obj);
+      var dst = obj;
+      cMap.mapOne(src, dst);
+    }
+  }
+
+  function parseBfRange(cMap, lexer) {
+    while (true) {
+      var obj = lexer.getObj();
+      if (isEOF(obj)) {
+        break;
+      }
+      if (isCmd(obj, 'endbfrange')) {
+        return;
+      }
+      expectString(obj);
+      var low = strToInt(obj);
+      obj = lexer.getObj();
+      expectString(obj);
+      var high = strToInt(obj);
+      obj = lexer.getObj();
+      if (isInt(obj) || isString(obj)) {
+        var dstLow = isInt(obj) ? String.fromCharCode(obj) : obj;
+        cMap.mapRange(low, high, dstLow);
+      } else if (isCmd(obj, '[')) {
+        obj = lexer.getObj();
+        var array = [];
+        while (!isCmd(obj, ']') && !isEOF(obj)) {
+          array.push(obj);
+          obj = lexer.getObj();
+        }
+        cMap.mapRangeToArray(low, high, array);
+      } else {
+        break;
+      }
+    }
+    error('Invalid bf range.');
+  }
+
+  function parseCidChar(cMap, lexer) {
+    while (true) {
+      var obj = lexer.getObj();
+      if (isEOF(obj)) {
+        break;
+      }
+      if (isCmd(obj, 'endcidchar')) {
+        return;
+      }
+      expectString(obj);
+      var src = strToInt(obj);
+      obj = lexer.getObj();
+      expectInt(obj);
+      var dst = String.fromCharCode(obj);
+      cMap.mapOne(src, dst);
+    }
+  }
+
+  function parseCidRange(cMap, lexer) {
+    while (true) {
+      var obj = lexer.getObj();
+      if (isEOF(obj)) {
+        break;
+      }
+      if (isCmd(obj, 'endcidrange')) {
+        return;
+      }
+      expectString(obj);
+      var low = strToInt(obj);
+      obj = lexer.getObj();
+      expectString(obj);
+      var high = strToInt(obj);
+      obj = lexer.getObj();
+      expectInt(obj);
+      var dstLow = String.fromCharCode(obj);
+      cMap.mapRange(low, high, dstLow);
+    }
+  }
+
+  function parseCodespaceRange(cMap, lexer) {
+    while (true) {
+      var obj = lexer.getObj();
+      if (isEOF(obj)) {
+        break;
+      }
+      if (isCmd(obj, 'endcodespacerange')) {
+        return;
+      }
+      if (!isString(obj)) {
+        break;
+      }
+      var low = strToInt(obj);
+      obj = lexer.getObj();
+      if (!isString(obj)) {
+        break;
+      }
+      var high = strToInt(obj);
+      cMap.addCodespaceRange(obj.length, low, high);
+    }
+    error('Invalid codespace range.');
+  }
+
+  function parseCmap(cMap, lexer) {
+    objLoop: while (true) {
+      var obj = lexer.getObj();
+      if (isEOF(obj)) {
+        break;
+      } else if (isCmd(obj)) {
+        switch (obj.cmd) {
+          case 'endcMap':
+            break objLoop;
+          case 'usecMap':
+            // TODO
+            break;
+          case 'begincodespacerange':
+            parseCodespaceRange(cMap, lexer);
+            break;
+          case 'beginbfchar':
+            parseBfChar(cMap, lexer);
+            break;
+          case 'begincidchar':
+            parseCidChar(cMap, lexer);
+            break;
+          case 'beginbfrange':
+            parseBfRange(cMap, lexer);
+            break;
+          case 'begincidrange':
+            parseCidRange(cMap, lexer);
+            break;
+        }
+      }
+    }
+  }
+  return {
+    create: function (encoding) {
+      if (isName(encoding)) {
+        switch (encoding.name) {
+          case 'Identity-H':
+            return new IdentityCMap(false, 2);
+          case 'Identity-V':
+            return new IdentityCMap(true, 2);
+          default:
+            if (encoding.name in CMAP_CODESPACES) {
+              // XXX: Temporary hack so the correct amount of bytes are read in
+              // CMap.readCharCode.
+              var cMap = new CMap();
+              cMap.codespaceRanges = CMAP_CODESPACES[encoding.name];
+              return cMap;
+            }
+            return null;
+        }
+      } else if (isStream(encoding)) {
+        var cMap = new CMap();
+        var lexer = new Lexer(encoding);
+        try {
+          parseCmap(cMap, lexer);
+        } catch (e) {
+          warn('Invalid CMap data. ' + e);
+        }
+        return cMap;
+      }
+      error('Encoding required.');
+    }
+  };
+})();
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+/*
+   Copyright 2011 notmasteryet
+
+   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.
+*/
+
+// - The JPEG specification can be found in the ITU CCITT Recommendation T.81
+//   (www.w3.org/Graphics/JPEG/itu-t81.pdf)
+// - The JFIF specification can be found in the JPEG File Interchange Format
+//   (www.w3.org/Graphics/JPEG/jfif3.pdf)
+// - The Adobe Application-Specific JPEG markers in the Supporting the DCT Filters
+//   in PostScript Level 2, Technical Note #5116
+//   (partners.adobe.com/public/developer/en/ps/sdk/5116.DCT_Filter.pdf)
+
+var JpegImage = (function jpegImage() {
+  "use strict";
+  var dctZigZag = new Int32Array([
+     0,
+     1,  8,
+    16,  9,  2,
+     3, 10, 17, 24,
+    32, 25, 18, 11, 4,
+     5, 12, 19, 26, 33, 40,
+    48, 41, 34, 27, 20, 13,  6,
+     7, 14, 21, 28, 35, 42, 49, 56,
+    57, 50, 43, 36, 29, 22, 15,
+    23, 30, 37, 44, 51, 58,
+    59, 52, 45, 38, 31,
+    39, 46, 53, 60,
+    61, 54, 47,
+    55, 62,
+    63
+  ]);
+
+  var dctCos1  =  4017   // cos(pi/16)
+  var dctSin1  =   799   // sin(pi/16)
+  var dctCos3  =  3406   // cos(3*pi/16)
+  var dctSin3  =  2276   // sin(3*pi/16)
+  var dctCos6  =  1567   // cos(6*pi/16)
+  var dctSin6  =  3784   // sin(6*pi/16)
+  var dctSqrt2 =  5793   // sqrt(2)
+  var dctSqrt1d2 = 2896  // sqrt(2) / 2
+
+  function constructor() {
+  }
+
+  function buildHuffmanTable(codeLengths, values) {
+    var k = 0, code = [], i, j, length = 16;
+    while (length > 0 && !codeLengths[length - 1])
+      length--;
+    code.push({children: [], index: 0});
+    var p = code[0], q;
+    for (i = 0; i < length; i++) {
+      for (j = 0; j < codeLengths[i]; j++) {
+        p = code.pop();
+        p.children[p.index] = values[k];
+        while (p.index > 0) {
+          p = code.pop();
+        }
+        p.index++;
+        code.push(p);
+        while (code.length <= i) {
+          code.push(q = {children: [], index: 0});
+          p.children[p.index] = q.children;
+          p = q;
+        }
+        k++;
+      }
+      if (i + 1 < length) {
+        // p here points to last code
+        code.push(q = {children: [], index: 0});
+        p.children[p.index] = q.children;
+        p = q;
+      }
+    }
+    return code[0].children;
+  }
+
+  function decodeScan(data, offset,
+                      frame, components, resetInterval,
+                      spectralStart, spectralEnd,
+                      successivePrev, successive) {
+    var precision = frame.precision;
+    var samplesPerLine = frame.samplesPerLine;
+    var scanLines = frame.scanLines;
+    var mcusPerLine = frame.mcusPerLine;
+    var progressive = frame.progressive;
+    var maxH = frame.maxH, maxV = frame.maxV;
+
+    var startOffset = offset, bitsData = 0, bitsCount = 0;
+    function readBit() {
+      if (bitsCount > 0) {
+        bitsCount--;
+        return (bitsData >> bitsCount) & 1;
+      }
+      bitsData = data[offset++];
+      if (bitsData == 0xFF) {
+        var nextByte = data[offset++];
+        if (nextByte) {
+          throw "unexpected marker: " + ((bitsData << 8) | nextByte).toString(16);
+        }
+        // unstuff 0
+      }
+      bitsCount = 7;
+      return bitsData >>> 7;
+    }
+    function decodeHuffman(tree) {
+      var node = tree, bit;
+      while ((bit = readBit()) !== null) {
+        node = node[bit];
+        if (typeof node === 'number')
+          return node;
+        if (typeof node !== 'object')
+          throw "invalid huffman sequence";
+      }
+      return null;
+    }
+    function receive(length) {
+      var n = 0;
+      while (length > 0) {
+        var bit = readBit();
+        if (bit === null) return;
+        n = (n << 1) | bit;
+        length--;
+      }
+      return n;
+    }
+    function receiveAndExtend(length) {
+      var n = receive(length);
+      if (n >= 1 << (length - 1))
+        return n;
+      return n + (-1 << length) + 1;
+    }
+    function decodeBaseline(component, zz) {
+      var t = decodeHuffman(component.huffmanTableDC);
+      var diff = t === 0 ? 0 : receiveAndExtend(t);
+      zz[0]= (component.pred += diff);
+      var k = 1;
+      while (k < 64) {
+        var rs = decodeHuffman(component.huffmanTableAC);
+        var s = rs & 15, r = rs >> 4;
+        if (s === 0) {
+          if (r < 15)
+            break;
+          k += 16;
+          continue;
+        }
+        k += r;
+        var z = dctZigZag[k];
+        zz[z] = receiveAndExtend(s);
+        k++;
+      }
+    }
+    function decodeDCFirst(component, zz) {
+      var t = decodeHuffman(component.huffmanTableDC);
+      var diff = t === 0 ? 0 : (receiveAndExtend(t) << successive);
+      zz[0] = (component.pred += diff);
+    }
+    function decodeDCSuccessive(component, zz) {
+      zz[0] |= readBit() << successive;
+    }
+    var eobrun = 0;
+    function decodeACFirst(component, zz) {
+      if (eobrun > 0) {
+        eobrun--;
+        return;
+      }
+      var k = spectralStart, e = spectralEnd;
+      while (k <= e) {
+        var rs = decodeHuffman(component.huffmanTableAC);
+        var s = rs & 15, r = rs >> 4;
+        if (s === 0) {
+          if (r < 15) {
+            eobrun = receive(r) + (1 << r) - 1;
+            break;
+          }
+          k += 16;
+          continue;
+        }
+        k += r;
+        var z = dctZigZag[k];
+        zz[z] = receiveAndExtend(s) * (1 << successive);
+        k++;
+      }
+    }
+    var successiveACState = 0, successiveACNextValue;
+    function decodeACSuccessive(component, zz) {
+      var k = spectralStart, e = spectralEnd, r = 0;
+      while (k <= e) {
+        var z = dctZigZag[k];
+        switch (successiveACState) {
+        case 0: // initial state
+          var rs = decodeHuffman(component.huffmanTableAC);
+          var s = rs & 15, r = rs >> 4;
+          if (s === 0) {
+            if (r < 15) {
+              eobrun = receive(r) + (1 << r);
+              successiveACState = 4;
+            } else {
+              r = 16;
+              successiveACState = 1;
+            }
+          } else {
+            if (s !== 1)
+              throw "invalid ACn encoding";
+            successiveACNextValue = receiveAndExtend(s);
+            successiveACState = r ? 2 : 3;
+          }
+          continue;
+        case 1: // skipping r zero items
+        case 2:
+          if (zz[z])
+            zz[z] += (readBit() << successive);
+          else {
+            r--;
+            if (r === 0)
+              successiveACState = successiveACState == 2 ? 3 : 0;
+          }
+          break;
+        case 3: // set value for a zero item
+          if (zz[z])
+            zz[z] += (readBit() << successive);
+          else {
+            zz[z] = successiveACNextValue << successive;
+            successiveACState = 0;
+          }
+          break;
+        case 4: // eob
+          if (zz[z])
+            zz[z] += (readBit() << successive);
+          break;
+        }
+        k++;
+      }
+      if (successiveACState === 4) {
+        eobrun--;
+        if (eobrun === 0)
+          successiveACState = 0;
+      }
+    }
+    function decodeMcu(component, decode, mcu, row, col) {
+      var mcuRow = (mcu / mcusPerLine) | 0;
+      var mcuCol = mcu % mcusPerLine;
+      var blockRow = mcuRow * component.v + row;
+      var blockCol = mcuCol * component.h + col;
+      decode(component, component.blocks[blockRow][blockCol]);
+    }
+    function decodeBlock(component, decode, mcu) {
+      var blockRow = (mcu / component.blocksPerLine) | 0;
+      var blockCol = mcu % component.blocksPerLine;
+      decode(component, component.blocks[blockRow][blockCol]);
+    }
+
+    var componentsLength = components.length;
+    var component, i, j, k, n;
+    var decodeFn;
+    if (progressive) {
+      if (spectralStart === 0)
+        decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;
+      else
+        decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;
+    } else {
+      decodeFn = decodeBaseline;
+    }
+
+    var mcu = 0, marker;
+    var mcuExpected;
+    if (componentsLength == 1) {
+      mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;
+    } else {
+      mcuExpected = mcusPerLine * frame.mcusPerColumn;
+    }
+    if (!resetInterval) resetInterval = mcuExpected;
+
+    var h, v;
+    while (mcu < mcuExpected) {
+      // reset interval stuff
+      for (i = 0; i < componentsLength; i++)
+        components[i].pred = 0;
+      eobrun = 0;
+
+      if (componentsLength == 1) {
+        component = components[0];
+        for (n = 0; n < resetInterval; n++) {
+          decodeBlock(component, decodeFn, mcu);
+          mcu++;
+        }
+      } else {
+        for (n = 0; n < resetInterval; n++) {
+          for (i = 0; i < componentsLength; i++) {
+            component = components[i];
+            h = component.h;
+            v = component.v;
+            for (j = 0; j < v; j++) {
+              for (k = 0; k < h; k++) {
+                decodeMcu(component, decodeFn, mcu, j, k);
+              }
+            }
+          }
+          mcu++;
+        }
+      }
+
+      // find marker
+      bitsCount = 0;
+      marker = (data[offset] << 8) | data[offset + 1];
+      if (marker <= 0xFF00) {
+        throw "marker was not found";
+      }
+
+      if (marker >= 0xFFD0 && marker <= 0xFFD7) { // RSTx
+        offset += 2;
+      }
+      else
+        break;
+    }
+
+    return offset - startOffset;
+  }
+
+  function buildComponentData(frame, component) {
+    var lines = [];
+    var blocksPerLine = component.blocksPerLine;
+    var blocksPerColumn = component.blocksPerColumn;
+    var samplesPerLine = blocksPerLine << 3;
+    var R = new Int32Array(64), r = new Uint8Array(64);
+
+    // A port of poppler's IDCT method which in turn is taken from:
+    //   Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,
+    //   "Practical Fast 1-D DCT Algorithms with 11 Multiplications",
+    //   IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989,
+    //   988-991.
+    function quantizeAndInverse(zz, dataOut, dataIn) {
+      var qt = component.quantizationTable;
+      var v0, v1, v2, v3, v4, v5, v6, v7, t;
+      var p = dataIn;
+      var i;
+
+      // dequant
+      for (i = 0; i < 64; i++)
+        p[i] = zz[i] * qt[i];
+
+      // inverse DCT on rows
+      for (i = 0; i < 8; ++i) {
+        var row = 8 * i;
+
+        // check for all-zero AC coefficients
+        if (p[1 + row] == 0 && p[2 + row] == 0 && p[3 + row] == 0 &&
+            p[4 + row] == 0 && p[5 + row] == 0 && p[6 + row] == 0 &&
+            p[7 + row] == 0) {
+          t = (dctSqrt2 * p[0 + row] + 512) >> 10;
+          p[0 + row] = t;
+          p[1 + row] = t;
+          p[2 + row] = t;
+          p[3 + row] = t;
+          p[4 + row] = t;
+          p[5 + row] = t;
+          p[6 + row] = t;
+          p[7 + row] = t;
+          continue;
+        }
+
+        // stage 4
+        v0 = (dctSqrt2 * p[0 + row] + 128) >> 8;
+        v1 = (dctSqrt2 * p[4 + row] + 128) >> 8;
+        v2 = p[2 + row];
+        v3 = p[6 + row];
+        v4 = (dctSqrt1d2 * (p[1 + row] - p[7 + row]) + 128) >> 8;
+        v7 = (dctSqrt1d2 * (p[1 + row] + p[7 + row]) + 128) >> 8;
+        v5 = p[3 + row] << 4;
+        v6 = p[5 + row] << 4;
+
+        // stage 3
+        t = (v0 - v1+ 1) >> 1;
+        v0 = (v0 + v1 + 1) >> 1;
+        v1 = t;
+        t = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8;
+        v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8;
+        v3 = t;
+        t = (v4 - v6 + 1) >> 1;
+        v4 = (v4 + v6 + 1) >> 1;
+        v6 = t;
+        t = (v7 + v5 + 1) >> 1;
+        v5 = (v7 - v5 + 1) >> 1;
+        v7 = t;
+
+        // stage 2
+        t = (v0 - v3 + 1) >> 1;
+        v0 = (v0 + v3 + 1) >> 1;
+        v3 = t;
+        t = (v1 - v2 + 1) >> 1;
+        v1 = (v1 + v2 + 1) >> 1;
+        v2 = t;
+        t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;
+        v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;
+        v7 = t;
+        t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;
+        v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;
+        v6 = t;
+
+        // stage 1
+        p[0 + row] = v0 + v7;
+        p[7 + row] = v0 - v7;
+        p[1 + row] = v1 + v6;
+        p[6 + row] = v1 - v6;
+        p[2 + row] = v2 + v5;
+        p[5 + row] = v2 - v5;
+        p[3 + row] = v3 + v4;
+        p[4 + row] = v3 - v4;
+      }
+
+      // inverse DCT on columns
+      for (i = 0; i < 8; ++i) {
+        var col = i;
+
+        // check for all-zero AC coefficients
+        if (p[1*8 + col] == 0 && p[2*8 + col] == 0 && p[3*8 + col] == 0 &&
+            p[4*8 + col] == 0 && p[5*8 + col] == 0 && p[6*8 + col] == 0 &&
+            p[7*8 + col] == 0) {
+          t = (dctSqrt2 * dataIn[i+0] + 8192) >> 14;
+          p[0*8 + col] = t;
+          p[1*8 + col] = t;
+          p[2*8 + col] = t;
+          p[3*8 + col] = t;
+          p[4*8 + col] = t;
+          p[5*8 + col] = t;
+          p[6*8 + col] = t;
+          p[7*8 + col] = t;
+          continue;
+        }
+
+        // stage 4
+        v0 = (dctSqrt2 * p[0*8 + col] + 2048) >> 12;
+        v1 = (dctSqrt2 * p[4*8 + col] + 2048) >> 12;
+        v2 = p[2*8 + col];
+        v3 = p[6*8 + col];
+        v4 = (dctSqrt1d2 * (p[1*8 + col] - p[7*8 + col]) + 2048) >> 12;
+        v7 = (dctSqrt1d2 * (p[1*8 + col] + p[7*8 + col]) + 2048) >> 12;
+        v5 = p[3*8 + col];
+        v6 = p[5*8 + col];
+
+        // stage 3
+        t = (v0 - v1 + 1) >> 1;
+        v0 = (v0 + v1 + 1) >> 1;
+        v1 = t;
+        t = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12;
+        v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12;
+        v3 = t;
+        t = (v4 - v6 + 1) >> 1;
+        v4 = (v4 + v6 + 1) >> 1;
+        v6 = t;
+        t = (v7 + v5 + 1) >> 1;
+        v5 = (v7 - v5 + 1) >> 1;
+        v7 = t;
+
+        // stage 2
+        t = (v0 - v3 + 1) >> 1;
+        v0 = (v0 + v3 + 1) >> 1;
+        v3 = t;
+        t = (v1 - v2 + 1) >> 1;
+        v1 = (v1 + v2 + 1) >> 1;
+        v2 = t;
+        t = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;
+        v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;
+        v7 = t;
+        t = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;
+        v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;
+        v6 = t;
+
+        // stage 1
+        p[0*8 + col] = v0 + v7;
+        p[7*8 + col] = v0 - v7;
+        p[1*8 + col] = v1 + v6;
+        p[6*8 + col] = v1 - v6;
+        p[2*8 + col] = v2 + v5;
+        p[5*8 + col] = v2 - v5;
+        p[3*8 + col] = v3 + v4;
+        p[4*8 + col] = v3 - v4;
+      }
+
+      // convert to 8-bit integers
+      for (i = 0; i < 64; ++i) {
+        var sample = 128 + ((p[i] + 8) >> 4);
+        dataOut[i] = sample < 0 ? 0 : sample > 0xFF ? 0xFF : sample;
+      }
+    }
+
+    var i, j;
+    for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {
+      var scanLine = blockRow << 3;
+      for (i = 0; i < 8; i++)
+        lines.push(new Uint8Array(samplesPerLine));
+      for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {
+        quantizeAndInverse(component.blocks[blockRow][blockCol], r, R);
+
+        var offset = 0, sample = blockCol << 3;
+        for (j = 0; j < 8; j++) {
+          var line = lines[scanLine + j];
+          for (i = 0; i < 8; i++)
+            line[sample + i] = r[offset++];
+        }
+      }
+    }
+    return lines;
+  }
+
+  function clampTo8bit(a) {
+    return a < 0 ? 0 : a > 255 ? 255 : a;
+  }
+
+  constructor.prototype = {
+    load: function load(path) {
+      var xhr = new XMLHttpRequest();
+      xhr.open("GET", path, true);
+      xhr.responseType = "arraybuffer";
+      xhr.onload = (function() {
+        // TODO catch parse error
+        var data = new Uint8Array(xhr.response || xhr.mozResponseArrayBuffer);
+        this.parse(data);
+        if (this.onload)
+          this.onload();
+      }).bind(this);
+      xhr.send(null);
+    },
+    parse: function parse(data) {
+      var offset = 0, length = data.length;
+      function readUint16() {
+        var value = (data[offset] << 8) | data[offset + 1];
+        offset += 2;
+        return value;
+      }
+      function readDataBlock() {
+        var length = readUint16();
+        var array = data.subarray(offset, offset + length - 2);
+        offset += array.length;
+        return array;
+      }
+      function prepareComponents(frame) {
+        var maxH = 0, maxV = 0;
+        var component, componentId;
+        for (componentId in frame.components) {
+          if (frame.components.hasOwnProperty(componentId)) {
+            component = frame.components[componentId];
+            if (maxH < component.h) maxH = component.h;
+            if (maxV < component.v) maxV = component.v;
+          }
+        }
+        var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / maxH);
+        var mcusPerColumn = Math.ceil(frame.scanLines / 8 / maxV);
+        for (componentId in frame.components) {
+          if (frame.components.hasOwnProperty(componentId)) {
+            component = frame.components[componentId];
+            var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / maxH);
+            var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines  / 8) * component.v / maxV);
+            var blocksPerLineForMcu = mcusPerLine * component.h;
+            var blocksPerColumnForMcu = mcusPerColumn * component.v;
+            var blocks = [];
+            for (var i = 0; i < blocksPerColumnForMcu; i++) {
+              var row = [];
+              for (var j = 0; j < blocksPerLineForMcu; j++)
+                row.push(new Int32Array(64));
+              blocks.push(row);
+            }
+            component.blocksPerLine = blocksPerLine;
+            component.blocksPerColumn = blocksPerColumn;
+            component.blocks = blocks;
+          }
+        }
+        frame.maxH = maxH;
+        frame.maxV = maxV;
+        frame.mcusPerLine = mcusPerLine;
+        frame.mcusPerColumn = mcusPerColumn;
+      }
+      var jfif = null;
+      var adobe = null;
+      var pixels = null;
+      var frame, resetInterval;
+      var quantizationTables = [], frames = [];
+      var huffmanTablesAC = [], huffmanTablesDC = [];
+      var fileMarker = readUint16();
+      if (fileMarker != 0xFFD8) { // SOI (Start of Image)
+        throw "SOI not found";
+      }
+
+      fileMarker = readUint16();
+      while (fileMarker != 0xFFD9) { // EOI (End of image)
+        var i, j, l;
+        switch(fileMarker) {
+          case 0xFFE0: // APP0 (Application Specific)
+          case 0xFFE1: // APP1
+          case 0xFFE2: // APP2
+          case 0xFFE3: // APP3
+          case 0xFFE4: // APP4
+          case 0xFFE5: // APP5
+          case 0xFFE6: // APP6
+          case 0xFFE7: // APP7
+          case 0xFFE8: // APP8
+          case 0xFFE9: // APP9
+          case 0xFFEA: // APP10
+          case 0xFFEB: // APP11
+          case 0xFFEC: // APP12
+          case 0xFFED: // APP13
+          case 0xFFEE: // APP14
+          case 0xFFEF: // APP15
+          case 0xFFFE: // COM (Comment)
+            var appData = readDataBlock();
+
+            if (fileMarker === 0xFFE0) {
+              if (appData[0] === 0x4A && appData[1] === 0x46 && appData[2] === 0x49 &&
+                appData[3] === 0x46 && appData[4] === 0) { // 'JFIF\x00'
+                jfif = {
+                  version: { major: appData[5], minor: appData[6] },
+                  densityUnits: appData[7],
+                  xDensity: (appData[8] << 8) | appData[9],
+                  yDensity: (appData[10] << 8) | appData[11],
+                  thumbWidth: appData[12],
+                  thumbHeight: appData[13],
+                  thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13])
+                };
+              }
+            }
+            // TODO APP1 - Exif
+            if (fileMarker === 0xFFEE) {
+              if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6F &&
+                appData[3] === 0x62 && appData[4] === 0x65 && appData[5] === 0) { // 'Adobe\x00'
+                adobe = {
+                  version: appData[6],
+                  flags0: (appData[7] << 8) | appData[8],
+                  flags1: (appData[9] << 8) | appData[10],
+                  transformCode: appData[11]
+                };
+              }
+            }
+            break;
+
+          case 0xFFDB: // DQT (Define Quantization Tables)
+            var quantizationTablesLength = readUint16();
+            var quantizationTablesEnd = quantizationTablesLength + offset - 2;
+            while (offset < quantizationTablesEnd) {
+              var quantizationTableSpec = data[offset++];
+              var tableData = new Int32Array(64);
+              if ((quantizationTableSpec >> 4) === 0) { // 8 bit values
+                for (j = 0; j < 64; j++) {
+                  var z = dctZigZag[j];
+                  tableData[z] = data[offset++];
+                }
+              } else if ((quantizationTableSpec >> 4) === 1) { //16 bit
+                for (j = 0; j < 64; j++) {
+                  var z = dctZigZag[j];
+                  tableData[z] = readUint16();
+                }
+              } else
+                throw "DQT: invalid table spec";
+              quantizationTables[quantizationTableSpec & 15] = tableData;
+            }
+            break;
+
+          case 0xFFC0: // SOF0 (Start of Frame, Baseline DCT)
+          case 0xFFC1: // SOF1 (Start of Frame, Extended DCT)
+          case 0xFFC2: // SOF2 (Start of Frame, Progressive DCT)
+            readUint16(); // skip data length
+            frame = {};
+            frame.extended = (fileMarker === 0xFFC1);
+            frame.progressive = (fileMarker === 0xFFC2);
+            frame.precision = data[offset++];
+            frame.scanLines = readUint16();
+            frame.samplesPerLine = readUint16();
+            frame.components = {};
+            frame.componentsOrder = [];
+            var componentsCount = data[offset++], componentId;
+            var maxH = 0, maxV = 0;
+            for (i = 0; i < componentsCount; i++) {
+              componentId = data[offset];
+              var h = data[offset + 1] >> 4;
+              var v = data[offset + 1] & 15;
+              var qId = data[offset + 2];
+              frame.componentsOrder.push(componentId);
+              frame.components[componentId] = {
+                h: h,
+                v: v,
+                quantizationTable: quantizationTables[qId]
+              };
+              offset += 3;
+            }
+            prepareComponents(frame);
+            frames.push(frame);
+            break;
+
+          case 0xFFC4: // DHT (Define Huffman Tables)
+            var huffmanLength = readUint16();
+            for (i = 2; i < huffmanLength;) {
+              var huffmanTableSpec = data[offset++];
+              var codeLengths = new Uint8Array(16);
+              var codeLengthSum = 0;
+              for (j = 0; j < 16; j++, offset++)
+                codeLengthSum += (codeLengths[j] = data[offset]);
+              var huffmanValues = new Uint8Array(codeLengthSum);
+              for (j = 0; j < codeLengthSum; j++, offset++)
+                huffmanValues[j] = data[offset];
+              i += 17 + codeLengthSum;
+
+              ((huffmanTableSpec >> 4) === 0 ? 
+                huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] =
+                buildHuffmanTable(codeLengths, huffmanValues);
+            }
+            break;
+
+          case 0xFFDD: // DRI (Define Restart Interval)
+            readUint16(); // skip data length
+            resetInterval = readUint16();
+            break;
+
+          case 0xFFDA: // SOS (Start of Scan)
+            var scanLength = readUint16();
+            var selectorsCount = data[offset++];
+            var components = [], component;
+            for (i = 0; i < selectorsCount; i++) {
+              component = frame.components[data[offset++]];
+              var tableSpec = data[offset++];
+              component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];
+              component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];
+              components.push(component);
+            }
+            var spectralStart = data[offset++];
+            var spectralEnd = data[offset++];
+            var successiveApproximation = data[offset++];
+            var processed = decodeScan(data, offset,
+              frame, components, resetInterval,
+              spectralStart, spectralEnd,
+              successiveApproximation >> 4, successiveApproximation & 15);
+            offset += processed;
+            break;
+          default:
+            if (data[offset - 3] == 0xFF &&
+                data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) {
+              // could be incorrect encoding -- last 0xFF byte of the previous
+              // block was eaten by the encoder
+              offset -= 3;
+              break;
+            }
+            throw "unknown JPEG marker " + fileMarker.toString(16);
+        }
+        fileMarker = readUint16();
+      }
+      if (frames.length != 1)
+        throw "only single frame JPEGs supported";
+
+      this.width = frame.samplesPerLine;
+      this.height = frame.scanLines;
+      this.jfif = jfif;
+      this.adobe = adobe;
+      this.components = [];
+      for (var i = 0; i < frame.componentsOrder.length; i++) {
+        var component = frame.components[frame.componentsOrder[i]];
+        this.components.push({
+          lines: buildComponentData(frame, component),
+          scaleX: component.h / frame.maxH,
+          scaleY: component.v / frame.maxV
+        });
+      }
+    },
+    getData: function getData(width, height) {
+      var scaleX = this.width / width, scaleY = this.height / height;
+
+      var component1, component2, component3, component4;
+      var component1Line, component2Line, component3Line, component4Line;
+      var x, y;
+      var offset = 0;
+      var Y, Cb, Cr, K, C, M, Ye, R, G, B;
+      var colorTransform;
+      var dataLength = width * height * this.components.length;
+      var data = new Uint8Array(dataLength);
+      switch (this.components.length) {
+        case 1:
+          component1 = this.components[0];
+          for (y = 0; y < height; y++) {
+            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];
+            for (x = 0; x < width; x++) {
+              Y = component1Line[0 | (x * component1.scaleX * scaleX)];
+
+              data[offset++] = Y;
+            }
+          }
+          break;
+        case 2:
+          // PDF might compress two component data in custom colorspace
+          component1 = this.components[0];
+          component2 = this.components[1];
+          for (y = 0; y < height; y++) {
+            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];
+            component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)];
+            for (x = 0; x < width; x++) {
+              Y = component1Line[0 | (x * component1.scaleX * scaleX)];
+              data[offset++] = Y;
+              Y = component2Line[0 | (x * component2.scaleX * scaleX)];
+              data[offset++] = Y;
+            }
+          }
+          break;
+        case 3:
+          // The default transform for three components is true
+          colorTransform = true;
+          // The adobe transform marker overrides any previous setting
+          if (this.adobe && this.adobe.transformCode)
+            colorTransform = true;
+          else if (typeof this.colorTransform !== 'undefined')
+            colorTransform = !!this.colorTransform;
+
+          component1 = this.components[0];
+          component2 = this.components[1];
+          component3 = this.components[2];
+          for (y = 0; y < height; y++) {
+            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];
+            component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)];
+            component3Line = component3.lines[0 | (y * component3.scaleY * scaleY)];
+            for (x = 0; x < width; x++) {
+              if (!colorTransform) {
+                R = component1Line[0 | (x * component1.scaleX * scaleX)];
+                G = component2Line[0 | (x * component2.scaleX * scaleX)];
+                B = component3Line[0 | (x * component3.scaleX * scaleX)];
+              } else {
+                Y = component1Line[0 | (x * component1.scaleX * scaleX)];
+                Cb = component2Line[0 | (x * component2.scaleX * scaleX)];
+                Cr = component3Line[0 | (x * component3.scaleX * scaleX)];
+
+                R = clampTo8bit(Y + 1.402 * (Cr - 128));
+                G = clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128));
+                B = clampTo8bit(Y + 1.772 * (Cb - 128));
+              }
+
+              data[offset++] = R;
+              data[offset++] = G;
+              data[offset++] = B;
+            }
+          }
+          break;
+        case 4:
+          // The default transform for four components is false
+          colorTransform = false;
+          // The adobe transform marker overrides any previous setting
+          if (this.adobe && this.adobe.transformCode)
+            colorTransform = true;
+          else if (typeof this.colorTransform !== 'undefined')
+            colorTransform = !!this.colorTransform;
+
+          component1 = this.components[0];
+          component2 = this.components[1];
+          component3 = this.components[2];
+          component4 = this.components[3];
+          for (y = 0; y < height; y++) {
+            component1Line = component1.lines[0 | (y * component1.scaleY * scaleY)];
+            component2Line = component2.lines[0 | (y * component2.scaleY * scaleY)];
+            component3Line = component3.lines[0 | (y * component3.scaleY * scaleY)];
+            component4Line = component4.lines[0 | (y * component4.scaleY * scaleY)];
+            for (x = 0; x < width; x++) {
+              if (!colorTransform) {
+                C = component1Line[0 | (x * component1.scaleX * scaleX)];
+                M = component2Line[0 | (x * component2.scaleX * scaleX)];
+                Ye = component3Line[0 | (x * component3.scaleX * scaleX)];
+                K = component4Line[0 | (x * component4.scaleX * scaleX)];
+              } else {
+                Y = component1Line[0 | (x * component1.scaleX * scaleX)];
+                Cb = component2Line[0 | (x * component2.scaleX * scaleX)];
+                Cr = component3Line[0 | (x * component3.scaleX * scaleX)];
+                K = component4Line[0 | (x * component4.scaleX * scaleX)];
+
+                C = 255 - clampTo8bit(Y + 1.402 * (Cr - 128));
+                M = 255 - clampTo8bit(Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128));
+                Ye = 255 - clampTo8bit(Y + 1.772 * (Cb - 128));
+              }
+              data[offset++] = C;
+              data[offset++] = M;
+              data[offset++] = Ye;
+              data[offset++] = K;
+            }
+          }
+          break;
+        default:
+          throw 'Unsupported color mode';
+      }
+      return data;
+    },
+    copyToImageData: function copyToImageData(imageData) {
+      var width = imageData.width, height = imageData.height;
+      var imageDataArray = imageData.data;
+      var data = this.getData(width, height);
+      var i = 0, j = 0, x, y;
+      var Y, K, C, M, R, G, B;
+      switch (this.components.length) {
+        case 1:
+          for (y = 0; y < height; y++) {
+            for (x = 0; x < width; x++) {
+              Y = data[i++];
+
+              imageDataArray[j++] = Y;
+              imageDataArray[j++] = Y;
+              imageDataArray[j++] = Y;
+              imageDataArray[j++] = 255;
+            }
+          }
+          break;
+        case 3:
+          for (y = 0; y < height; y++) {
+            for (x = 0; x < width; x++) {
+              R = data[i++];
+              G = data[i++];
+              B = data[i++];
+
+              imageDataArray[j++] = R;
+              imageDataArray[j++] = G;
+              imageDataArray[j++] = B;
+              imageDataArray[j++] = 255;
+            }
+          }
+          break;
+        case 4:
+          for (y = 0; y < height; y++) {
+            for (x = 0; x < width; x++) {
+              C = data[i++];
+              M = data[i++];
+              Y = data[i++];
+              K = data[i++];
+
+              R = 255 - clampTo8bit(C * (1 - K / 255) + K);
+              G = 255 - clampTo8bit(M * (1 - K / 255) + K);
+              B = 255 - clampTo8bit(Y * (1 - K / 255) + K);
+
+              imageDataArray[j++] = R;
+              imageDataArray[j++] = G;
+              imageDataArray[j++] = B;
+              imageDataArray[j++] = 255;
+            }
+          }
+          break;
+        default:
+          throw 'Unsupported color mode';
+      }
+    }
+  };
+
+  return constructor;
+})();
+
+
+}).call((typeof window === 'undefined') ? this : window);
+
+if (!PDFJS.workerSrc && typeof document !== 'undefined') {
+  // workerSrc is not set -- using last script url to define default location
+  PDFJS.workerSrc = (function () {
+    'use strict';
+    var scriptTagContainer = document.body ||
+                             document.getElementsByTagName('head')[0];
+    var pdfjsSrc = scriptTagContainer.lastChild.src;
+    return pdfjsSrc && pdfjsSrc.replace(/\.js$/i, '.worker.js');
+  })();
+}
+
+
diff --git a/plugins/pdfviewer/viewer/viewer.css b/plugins/pdfviewer/viewer/viewer.css
index c735810..1b36776 100644
--- a/plugins/pdfviewer/viewer/viewer.css
+++ b/plugins/pdfviewer/viewer/viewer.css
@@ -36,7 +36,7 @@ select {
 }
 
 .hidden {
-  display: none;
+  display: none !important;
 }
 [hidden] {
   display: none !important;
@@ -64,6 +64,20 @@ select {
   cursor: none;
 }
 
+#viewerContainer:-ms-fullscreen {
+  top: 0px !important;
+  border-top: 2px solid transparent;
+  width: 100%;
+  height: 100%;
+  overflow: hidden !important;
+  cursor: none;
+}
+
+#viewerContainer:-ms-fullscreen::-ms-backdrop {
+  background-color: #404040;
+  background-image: url(images/texture.png);
+}
+
 #viewerContainer:fullscreen {
   top: 0px;
   border-top: 2px solid transparent;
@@ -75,7 +89,6 @@ select {
   cursor: none;
 }
 
-
 :-webkit-full-screen .page {
   margin-bottom: 100%;
 }
@@ -84,33 +97,70 @@ select {
   margin-bottom: 100%;
 }
 
+:-ms-fullscreen .page {
+  margin-bottom: 100% !important;
+}
+
 :fullscreen .page {
   margin-bottom: 100%;
 }
 
-#viewerContainer.presentationControls {
+:-webkit-full-screen a:not(.internalLink) {
+  display: none;
+}
+
+:-moz-full-screen a:not(.internalLink) {
+  display: none;
+}
+
+:-ms-fullscreen a:not(.internalLink) {
+  display: none !important;
+}
+
+:fullscreen a:not(.internalLink) {
+  display: none;
+}
+
+:-webkit-full-screen .textLayer > div {
+  cursor: none;
+}
+
+:-moz-full-screen .textLayer > div {
+  cursor: none;
+}
+
+:fullscreen .textLayer > div {
+  cursor: none;
+}
+
+#viewerContainer.presentationControls,
+#viewerContainer.presentationControls .textLayer > div {
   cursor: default;
 }
 
 /* outer/inner center provides horizontal center */
+.outerCenter {
+  pointer-events: none;
+  position: relative;
+}
 html[dir='ltr'] .outerCenter {
   float: right;
-  position: relative;
   right: 50%;
 }
 html[dir='rtl'] .outerCenter {
   float: left;
-  position: relative;
   left: 50%;
 }
+.innerCenter {
+  pointer-events: auto;
+  position: relative;
+}
 html[dir='ltr'] .innerCenter {
   float: right;
-  position: relative;
   right: -50%;
 }
 html[dir='rtl'] .innerCenter {
   float: left;
-  position: relative;
   left: -50%;
 }
 
@@ -127,28 +177,17 @@ html[dir='rtl'] .innerCenter {
   visibility: hidden;
   -webkit-transition-duration: 200ms;
   -webkit-transition-timing-function: ease;
-  -moz-transition-duration: 200ms;
-  -moz-transition-timing-function: ease;
-  -ms-transition-duration: 200ms;
-  -ms-transition-timing-function: ease;
-  -o-transition-duration: 200ms;
-  -o-transition-timing-function: ease;
   transition-duration: 200ms;
   transition-timing-function: ease;
 
 }
 html[dir='ltr'] #sidebarContainer {
   -webkit-transition-property: left;
-  -moz-transition-property: left;
-  -ms-transition-property: left;
-  -o-transition-property: left;
   transition-property: left;
   left: -200px;
 }
 html[dir='rtl'] #sidebarContainer {
   -webkit-transition-property: right;
-  -ms-transition-property: right;
-  -o-transition-property: right;
   transition-property: right;
   right: -200px;
 }
@@ -170,30 +209,19 @@ html[dir='rtl'] #outerContainer.sidebarOpen > #sidebarContainer {
   right: 0;
   bottom: 0;
   left: 0;
+  min-width: 320px;
   -webkit-transition-duration: 200ms;
   -webkit-transition-timing-function: ease;
-  -moz-transition-duration: 200ms;
-  -moz-transition-timing-function: ease;
-  -ms-transition-duration: 200ms;
-  -ms-transition-timing-function: ease;
-  -o-transition-duration: 200ms;
-  -o-transition-timing-function: ease;
   transition-duration: 200ms;
   transition-timing-function: ease;
 }
 html[dir='ltr'] #outerContainer.sidebarOpen > #mainContainer {
   -webkit-transition-property: left;
-  -moz-transition-property: left;
-  -ms-transition-property: left;
-  -o-transition-property: left;
   transition-property: left;
   left: 200px;
 }
 html[dir='rtl'] #outerContainer.sidebarOpen > #mainContainer {
   -webkit-transition-property: right;
-  -moz-transition-property: right;
-  -ms-transition-property: right;
-  -o-transition-property: right;
   transition-property: right;
   right: 200px;
 }
@@ -223,13 +251,13 @@ html[dir='rtl'] #sidebarContent {
   right: 0;
   bottom: 0;
   left: 0;
+  outline: none;
 }
 
 .toolbar {
-  position: absolute;
+  position: relative;
   left: 0;
   right: 0;
-  height: 32px;
   z-index: 9999;
   cursor: default;
 }
@@ -241,34 +269,20 @@ html[dir='rtl'] #sidebarContent {
 #toolbarSidebar {
   width: 200px;
   height: 32px;
-  background-image: url(images/texture.png),
-                    -webkit-linear-gradient(hsla(0,0%,30%,.99), hsla(0,0%,25%,.95));
-  background-image: url(images/texture.png),
-                    -moz-linear-gradient(hsla(0,0%,30%,.99), hsla(0,0%,25%,.95));
-  background-image: url(images/texture.png),
-                    -ms-linear-gradient(hsla(0,0%,30%,.99), hsla(0,0%,25%,.95));
-  background-image: url(images/texture.png),
-                    -o-linear-gradient(hsla(0,0%,30%,.99), hsla(0,0%,25%,.95));
+  background-color: #424242; /* fallback */
   background-image: url(images/texture.png),
                     linear-gradient(hsla(0,0%,30%,.99), hsla(0,0%,25%,.95));
   box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.25),
-              
+
               inset 0 -1px 0 hsla(0,0%,100%,.05),
               0 1px 0 hsla(0,0%,0%,.15),
               0 0 1px hsla(0,0%,0%,.1);
 }
 
-#toolbarViewer, .findbar {
+#toolbarContainer, .findbar, .secondaryToolbar {
   position: relative;
   height: 32px;
-  background-image: url(images/texture.png),
-                    -webkit-linear-gradient(hsla(0,0%,32%,.99), hsla(0,0%,27%,.95));
-  background-image: url(images/texture.png),
-                    -moz-linear-gradient(hsla(0,0%,32%,.99), hsla(0,0%,27%,.95));
-  background-image: url(images/texture.png),
-                    -ms-linear-gradient(hsla(0,0%,32%,.99), hsla(0,0%,27%,.95));
-  background-image: url(images/texture.png),
-                    -o-linear-gradient(hsla(0,0%,32%,.99), hsla(0,0%,27%,.95));
+  background-color: #474747; /* fallback */
   background-image: url(images/texture.png),
                     linear-gradient(hsla(0,0%,32%,.99), hsla(0,0%,27%,.95));
   box-shadow: inset 1px 0 0 hsla(0,0%,100%,.08),
@@ -278,7 +292,64 @@ html[dir='rtl'] #sidebarContent {
               0 1px 1px hsla(0,0%,0%,.1);
 }
 
-.findbar {
+#toolbarViewer {
+  height: 32px;
+}
+
+#loadingBar {
+  position: relative;
+  width: 100%;
+  height: 6px;
+  background-color: #333;
+  border-bottom: 1px solid #333;
+}
+
+#loadingBar .progress {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 0%;
+  height: 100%;
+  background-color: #ddd;
+  overflow: hidden;
+  -webkit-transition: width 200ms;
+  transition: width 200ms;
+}
+
+ at -webkit-keyframes progressIndeterminate {
+  0% { left: 0%; }
+  50% { left: 100%; }
+  100% { left: 100%; }
+}
+
+ at keyframes progressIndeterminate {
+  0% { left: 0%; }
+  50% { left: 100%; }
+  100% { left: 100%; }
+}
+
+#loadingBar .progress.indeterminate {
+  background-color: #999;
+  -webkit-transition: none;
+  transition: none;
+}
+
+#loadingBar .indeterminate .glimmer {
+  position: absolute;
+  top: 0;
+  left: 0;
+  height: 100%;
+  width: 50px;
+
+  background-image: linear-gradient(to right, #999 0%, #fff 50%, #999 100%);
+  background-size: 100% 100%;
+  background-repeat: no-repeat;
+
+  -webkit-animation: progressIndeterminate 2s linear infinite;
+  animation: progressIndeterminate 2s linear infinite;
+}
+
+.findbar, .secondaryToolbar {
   top: 32px;
   position: absolute;
   z-index: 10000;
@@ -303,8 +374,8 @@ html[dir='rtl'] .findbar {
 }
 
 .findbar label {
-  -webkit-user-select:none;
-  -moz-user-select:none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
 }
 
 #findInput[data-status="pending"] {
@@ -313,12 +384,32 @@ html[dir='rtl'] .findbar {
   background-position: right;
 }
 
-.doorHanger {
+.secondaryToolbar {
+  padding: 6px;
+  height: auto;
+  z-index: 30000;
+}
+html[dir='ltr'] .secondaryToolbar {
+  right: 4px;
+}
+html[dir='rtl'] .secondaryToolbar {
+  left: 4px;
+}
+
+#secondaryToolbarButtonContainer {
+  max-width: 200px;
+  max-height: 400px;
+  overflow-y: auto;
+}
+
+.doorHanger,
+.doorHangerRight {
   border: 1px solid hsla(0,0%,0%,.5);
   border-radius: 2px;
   box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
 }
-.doorHanger:after, .doorHanger:before {
+.doorHanger:after, .doorHanger:before,
+.doorHangerRight:after, .doorHangerRight:before {
   bottom: 100%;
   border: solid transparent;
   content: " ";
@@ -327,32 +418,38 @@ html[dir='rtl'] .findbar {
   position: absolute;
   pointer-events: none;
 }
-.doorHanger:after {
+.doorHanger:after,
+.doorHangerRight:after {
   border-bottom-color: hsla(0,0%,32%,.99);
   border-width: 8px;
 }
-.doorHanger:before {
+.doorHanger:before,
+.doorHangerRight:before {
   border-bottom-color: hsla(0,0%,0%,.5);
   border-width: 9px;
 }
 
-html[dir='ltr'] .doorHanger:after {
-  left: 16px;
+html[dir='ltr'] .doorHanger:after,
+html[dir='rtl'] .doorHangerRight:after {
+  left: 13px;
   margin-left: -8px;
 }
 
-html[dir='ltr'] .doorHanger:before {
-  left: 16px;
+html[dir='ltr'] .doorHanger:before,
+html[dir='rtl'] .doorHangerRight:before {
+  left: 13px;
   margin-left: -9px;
 }
 
-html[dir='rtl'] .doorHanger:after {
-  right: 16px;
+html[dir='rtl'] .doorHanger:after,
+html[dir='ltr'] .doorHangerRight:after {
+  right: 13px;
   margin-right: -8px;
 }
 
-html[dir='rtl'] .doorHanger:before {
-  right: 16px;
+html[dir='rtl'] .doorHanger:before,
+html[dir='ltr'] .doorHangerRight:before {
+  right: 13px;
   margin-right: -9px;
 }
 
@@ -369,10 +466,9 @@ html[dir='ltr'] #toolbarViewerLeft {
   margin-left: -1px;
 }
 html[dir='rtl'] #toolbarViewerRight {
-  margin-left: -1px;
+  margin-right: -1px;
 }
 
-
 html[dir='ltr'] #toolbarViewerLeft,
 html[dir='rtl'] #toolbarViewerRight {
   position: absolute;
@@ -389,12 +485,14 @@ html[dir='ltr'] #toolbarViewerLeft > *,
 html[dir='ltr'] #toolbarViewerMiddle > *,
 html[dir='ltr'] #toolbarViewerRight > *,
 html[dir='ltr'] .findbar > * {
+  position: relative;
   float: left;
 }
 html[dir='rtl'] #toolbarViewerLeft > *,
 html[dir='rtl'] #toolbarViewerMiddle > *,
 html[dir='rtl'] #toolbarViewerRight > *,
 html[dir='rtl'] .findbar > * {
+  position: relative;
   float: right;
 }
 
@@ -415,7 +513,8 @@ html[dir='rtl'] .splitToolbarButton > .toolbarButton {
   float: right;
 }
 
-.toolbarButton {
+.toolbarButton,
+.secondaryToolbarButton {
   border: 0 none;
   background-color: rgba(0, 0, 0, 0);
   width: 32px;
@@ -429,12 +528,13 @@ html[dir='rtl'] .splitToolbarButton > .toolbarButton {
   overflow: hidden;
 }
 
-.toolbarButton[disabled] {
+.toolbarButton[disabled],
+.secondaryToolbarButton[disabled] {
   opacity: .5;
 }
 
 .toolbarButton.group {
-  margin-right:0;
+  margin-right: 0;
 }
 
 .splitToolbarButton.toggled .toolbarButton {
@@ -446,10 +546,6 @@ html[dir='rtl'] .splitToolbarButton > .toolbarButton {
 .splitToolbarButton.toggled > .toolbarButton,
 .toolbarButton.textButton {
   background-color: hsla(0,0%,0%,.12);
-  background-image: -webkit-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
-  background-image: -moz-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
-  background-image: -ms-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
-  background-image: -o-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
   background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
   background-clip: padding-box;
   border: 1px solid hsla(0,0%,0%,.35);
@@ -460,15 +556,6 @@ html[dir='rtl'] .splitToolbarButton > .toolbarButton {
   -webkit-transition-property: background-color, border-color, box-shadow;
   -webkit-transition-duration: 150ms;
   -webkit-transition-timing-function: ease;
-  -moz-transition-property: background-color, border-color, box-shadow;
-  -moz-transition-duration: 150ms;
-  -moz-transition-timing-function: ease;
-  -ms-transition-property: background-color, border-color, box-shadow;
-  -ms-transition-duration: 150ms;
-  -ms-transition-timing-function: ease;
-  -o-transition-property: background-color, border-color, box-shadow;
-  -o-transition-duration: 150ms;
-  -o-transition-timing-function: ease;
   transition-property: background-color, border-color, box-shadow;
   transition-duration: 150ms;
   transition-timing-function: ease;
@@ -477,6 +564,7 @@ html[dir='rtl'] .splitToolbarButton > .toolbarButton {
 .splitToolbarButton > .toolbarButton:hover,
 .splitToolbarButton > .toolbarButton:focus,
 .dropdownToolbarButton:hover,
+.promptButton:hover,
 .toolbarButton.textButton:hover,
 .toolbarButton.textButton:focus {
   background-color: hsla(0,0%,0%,.2);
@@ -506,17 +594,17 @@ html[dir='rtl'] .splitToolbarButton > .toolbarButton:first-child {
 .splitToolbarButtonSeparator {
   padding: 8px 0;
   width: 1px;
-  background-color: hsla(0,0%,00%,.5);
+  background-color: hsla(0,0%,0%,.5);
   z-index: 99;
   box-shadow: 0 0 0 1px hsla(0,0%,100%,.08);
   display: inline-block;
   margin: 5px 0;
 }
 html[dir='ltr'] .splitToolbarButtonSeparator {
-  float:left;
+  float: left;
 }
 html[dir='rtl'] .splitToolbarButtonSeparator {
-  float:right;
+  float: right;
 }
 .splitToolbarButton:hover > .splitToolbarButtonSeparator,
 .splitToolbarButton.toggled > .splitToolbarButtonSeparator {
@@ -526,68 +614,53 @@ html[dir='rtl'] .splitToolbarButtonSeparator {
   -webkit-transition-property: padding;
   -webkit-transition-duration: 10ms;
   -webkit-transition-timing-function: ease;
-  -moz-transition-property: padding;
-  -moz-transition-duration: 10ms;
-  -moz-transition-timing-function: ease;
-  -ms-transition-property: padding;
-  -ms-transition-duration: 10ms;
-  -ms-transition-timing-function: ease;
-  -o-transition-property: padding;
-  -o-transition-duration: 10ms;
-  -o-transition-timing-function: ease;
   transition-property: padding;
   transition-duration: 10ms;
   transition-timing-function: ease;
 }
 
 .toolbarButton,
-.dropdownToolbarButton {
+.dropdownToolbarButton,
+.promptButton,
+.secondaryToolbarButton {
   min-width: 16px;
   padding: 2px 6px 0;
   border: 1px solid transparent;
   border-radius: 2px;
-  color: hsl(0,0%,95%);
+  color: hsla(0,0%,100%,.8);
   font-size: 12px;
   line-height: 14px;
-  -webkit-user-select:none;
-  -moz-user-select:none;
-  -ms-user-select:none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
   /* Opera does not support user-select, use <... unselectable="on"> instead */
   cursor: default;
   -webkit-transition-property: background-color, border-color, box-shadow;
   -webkit-transition-duration: 150ms;
   -webkit-transition-timing-function: ease;
-  -moz-transition-property: background-color, border-color, box-shadow;
-  -moz-transition-duration: 150ms;
-  -moz-transition-timing-function: ease;
-  -ms-transition-property: background-color, border-color, box-shadow;
-  -ms-transition-duration: 150ms;
-  -ms-transition-timing-function: ease;
-  -o-transition-property: background-color, border-color, box-shadow;
-  -o-transition-duration: 150ms;
-  -o-transition-timing-function: ease;
   transition-property: background-color, border-color, box-shadow;
   transition-duration: 150ms;
   transition-timing-function: ease;
 }
 
 html[dir='ltr'] .toolbarButton,
+html[dir='ltr'] .promptButton,
 html[dir='ltr'] .dropdownToolbarButton {
   margin: 3px 2px 4px 0;
 }
 html[dir='rtl'] .toolbarButton,
+html[dir='rtl'] .promptButton,
 html[dir='rtl'] .dropdownToolbarButton {
   margin: 3px 0 4px 2px;
 }
 
 .toolbarButton:hover,
 .toolbarButton:focus,
-.dropdownToolbarButton {
+.dropdownToolbarButton,
+.promptButton,
+.secondaryToolbarButton:hover,
+.secondaryToolbarButton:focus {
   background-color: hsla(0,0%,0%,.12);
-  background-image: -webkit-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
-  background-image: -moz-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
-  background-image: -ms-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
-  background-image: -o-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
   background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
   background-clip: padding-box;
   border: 1px solid hsla(0,0%,0%,.35);
@@ -598,12 +671,10 @@ html[dir='rtl'] .dropdownToolbarButton {
 }
 
 .toolbarButton:hover:active,
-.dropdownToolbarButton:hover:active {
+.promptButton:hover:active,
+.dropdownToolbarButton:hover:active,
+.secondaryToolbarButton:hover:active {
   background-color: hsla(0,0%,0%,.2);
-  background-image: -webkit-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
-  background-image: -moz-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
-  background-image: -ms-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
-  background-image: -o-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
   background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
   border-color: hsla(0,0%,0%,.35) hsla(0,0%,0%,.4) hsla(0,0%,0%,.45);
   box-shadow: 0 1px 1px hsla(0,0%,0%,.1) inset,
@@ -612,27 +683,15 @@ html[dir='rtl'] .dropdownToolbarButton {
   -webkit-transition-property: background-color, border-color, box-shadow;
   -webkit-transition-duration: 10ms;
   -webkit-transition-timing-function: linear;
-  -moz-transition-property: background-color, border-color, box-shadow;
-  -moz-transition-duration: 10ms;
-  -moz-transition-timing-function: linear;
-  -ms-transition-property: background-color, border-color, box-shadow;
-  -ms-transition-duration: 10ms;
-  -ms-transition-timing-function: linear;
-  -o-transition-property: background-color, border-color, box-shadow;
-  -o-transition-duration: 10ms;
-  -o-transition-timing-function: linear;
   transition-property: background-color, border-color, box-shadow;
   transition-duration: 10ms;
   transition-timing-function: linear;
 }
 
 .toolbarButton.toggled,
-.splitToolbarButton.toggled > .toolbarButton.toggled {
+.splitToolbarButton.toggled > .toolbarButton.toggled,
+.secondaryToolbarButton.toggled {
   background-color: hsla(0,0%,0%,.3);
-  background-image: -webkit-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
-  background-image: -moz-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
-  background-image: -ms-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
-  background-image: -o-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
   background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
   border-color: hsla(0,0%,0%,.4) hsla(0,0%,0%,.45) hsla(0,0%,0%,.5);
   box-shadow: 0 1px 1px hsla(0,0%,0%,.1) inset,
@@ -641,22 +700,14 @@ html[dir='rtl'] .dropdownToolbarButton {
   -webkit-transition-property: background-color, border-color, box-shadow;
   -webkit-transition-duration: 10ms;
   -webkit-transition-timing-function: linear;
-  -moz-transition-property: background-color, border-color, box-shadow;
-  -moz-transition-duration: 10ms;
-  -moz-transition-timing-function: linear;
-  -ms-transition-property: background-color, border-color, box-shadow;
-  -ms-transition-duration: 10ms;
-  -ms-transition-timing-function: linear;
-  -o-transition-property: background-color, border-color, box-shadow;
-  -o-transition-duration: 10ms;
-  -o-transition-timing-function: linear;
   transition-property: background-color, border-color, box-shadow;
   transition-duration: 10ms;
   transition-timing-function: linear;
 }
 
 .toolbarButton.toggled:hover:active,
-.splitToolbarButton.toggled > .toolbarButton.toggled:hover:active {
+.splitToolbarButton.toggled > .toolbarButton.toggled:hover:active,
+.secondaryToolbarButton.toggled:hover:active {
   background-color: hsla(0,0%,0%,.4);
   border-color: hsla(0,0%,0%,.4) hsla(0,0%,0%,.5) hsla(0,0%,0%,.55);
   box-shadow: 0 1px 1px hsla(0,0%,0%,.2) inset,
@@ -665,7 +716,7 @@ html[dir='rtl'] .dropdownToolbarButton {
 }
 
 .dropdownToolbarButton {
-  min-width: 120px;
+  width: 120px;
   max-width: 120px;
   padding: 3px 2px 2px;
   overflow: hidden;
@@ -684,9 +735,9 @@ html[dir='rtl'] .dropdownToolbarButton {
   min-width: 140px;
   font-size: 12px;
   color: hsl(0,0%,95%);
-  margin:0;
-  padding:0;
-  border:none;
+  margin: 0;
+  padding: 0;
+  border: none;
   background: rgba(0,0,0,0); /* Opera does not support 'transparent' <select> background */
 }
 
@@ -694,6 +745,12 @@ html[dir='rtl'] .dropdownToolbarButton {
   background: hsl(0,0%,24%);
 }
 
+.promptButton {
+  margin: 3px 2px 4px 5px !important;
+  line-height: 16px;
+  padding: 2px 6px 3px 6px;
+}
+
 #customScaleOption {
   display: none;
 }
@@ -727,78 +784,113 @@ html[dir='rtl'] .toolbarButton:first-child {
   min-width: 30px;
 }
 
-.toolbarButton#sidebarToggle::before {
+html[dir='ltr'] #findPrevious {
+  margin-left: 3px;
+}
+html[dir='ltr'] #findNext {
+  margin-right: 3px;
+}
+
+html[dir='rtl'] #findPrevious {
+  margin-right: 3px;
+}
+html[dir='rtl'] #findNext {
+  margin-left: 3px;
+}
+
+.toolbarButton::before,
+.secondaryToolbarButton::before {
+  /* All matching images have a size of 16x16
+   * (except for the print button: 18x16)
+   * All relevant containers have a size of 32x25 */
+  position: absolute;
   display: inline-block;
+  top: 4px;
+  left: 7px;
+}
+
+html[dir="ltr"] .secondaryToolbarButton::before {
+  left: 4px;
+}
+html[dir="rtl"] .secondaryToolbarButton::before {
+  right: 4px;
+}
+
+html[dir='ltr'] .toolbarButton#sidebarToggle::before {
   content: url(images/toolbarButton-sidebarToggle.png);
 }
+html[dir='rtl'] .toolbarButton#sidebarToggle::before {
+  content: url(images/toolbarButton-sidebarToggle-rtl.png);
+}
+
+html[dir='ltr'] .toolbarButton#secondaryToolbarToggle::before {
+  content: url(images/toolbarButton-secondaryToolbarToggle.png);
+}
+html[dir='rtl'] .toolbarButton#secondaryToolbarToggle::before {
+  content: url(images/toolbarButton-secondaryToolbarToggle-rtl.png);
+}
 
 html[dir='ltr'] .toolbarButton.findPrevious::before {
-  display: inline-block;
   content: url(images/findbarButton-previous.png);
 }
-
 html[dir='rtl'] .toolbarButton.findPrevious::before {
-  display: inline-block;
   content: url(images/findbarButton-previous-rtl.png);
 }
 
 html[dir='ltr'] .toolbarButton.findNext::before {
-  display: inline-block;
   content: url(images/findbarButton-next.png);
 }
-
 html[dir='rtl'] .toolbarButton.findNext::before {
-  display: inline-block;
   content: url(images/findbarButton-next-rtl.png);
 }
 
 html[dir='ltr'] .toolbarButton.pageUp::before {
-  display: inline-block;
   content: url(images/toolbarButton-pageUp.png);
 }
-
 html[dir='rtl'] .toolbarButton.pageUp::before {
-  display: inline-block;
   content: url(images/toolbarButton-pageUp-rtl.png);
 }
 
 html[dir='ltr'] .toolbarButton.pageDown::before {
-  display: inline-block;
   content: url(images/toolbarButton-pageDown.png);
 }
-
 html[dir='rtl'] .toolbarButton.pageDown::before {
-  display: inline-block;
   content: url(images/toolbarButton-pageDown-rtl.png);
 }
 
 .toolbarButton.zoomOut::before {
-  display: inline-block;
   content: url(images/toolbarButton-zoomOut.png);
 }
 
 .toolbarButton.zoomIn::before {
-  display: inline-block;
   content: url(images/toolbarButton-zoomIn.png);
 }
 
-.toolbarButton.fullscreen::before {
-  display: inline-block;
-  content: url(images/toolbarButton-fullscreen.png);
+.toolbarButton.presentationMode::before,
+.secondaryToolbarButton.presentationMode::before {
+  content: url(images/toolbarButton-presentationMode.png);
 }
 
-.toolbarButton.print::before {
-  display: inline-block;
+.toolbarButton.print::before,
+.secondaryToolbarButton.print::before {
   content: url(images/toolbarButton-print.png);
+  left: 6px;
 }
 
-.toolbarButton.openFile::before {
-  display: inline-block;
+html[dir="ltr"] .secondaryToolbarButton.print::before {
+  left: 3px;
+}
+html[dir="rtl"] .secondaryToolbarButton.print::before {
+  right: 3px;
+}
+
+.toolbarButton.openFile::before,
+.secondaryToolbarButton.openFile::before {
   content: url(images/toolbarButton-openFile.png);
 }
 
-.toolbarButton.download::before {
-  display: inline-block;
+.toolbarButton.download::before,
+.secondaryToolbarButton.download::before {
   content: url(images/toolbarButton-download.png);
 }
 
@@ -810,25 +902,99 @@ html[dir='rtl'] .toolbarButton.pageDown::before {
   padding-top: 4px;
 }
 
+#viewBookmark[href='#'] {
+  opacity: .5;
+  pointer-events: none;
+}
+
 .toolbarButton.bookmark::before {
   content: url(images/toolbarButton-bookmark.png);
 }
 
 #viewThumbnail.toolbarButton::before {
-  display: inline-block;
   content: url(images/toolbarButton-viewThumbnail.png);
 }
 
-#viewOutline.toolbarButton::before {
-  display: inline-block;
+html[dir="ltr"] #viewOutline.toolbarButton::before {
   content: url(images/toolbarButton-viewOutline.png);
 }
+html[dir="rtl"] #viewOutline.toolbarButton::before {
+  content: url(images/toolbarButton-viewOutline-rtl.png);
+}
 
 #viewFind.toolbarButton::before {
-  display: inline-block;
   content: url(images/toolbarButton-search.png);
 }
 
+.secondaryToolbarButton {
+  position: relative;
+  margin: 0 0 4px 0;
+  padding: 3px 0 1px 0;
+  height: auto;
+  min-height: 25px;
+  width: auto;
+  min-width: 100%;
+  white-space: normal;
+}
+html[dir="ltr"] .secondaryToolbarButton {
+  padding-left: 24px;
+  text-align: left;
+}
+html[dir="rtl"] .secondaryToolbarButton {
+  padding-right: 24px;
+  text-align: right;
+}
+
+#secondaryToolbarButtonContainer :last-child {
+  margin-bottom: 0;
+}
+
+html[dir="ltr"] .secondaryToolbarButton > span {
+  padding-right: 4px;
+}
+html[dir="rtl"] .secondaryToolbarButton > span {
+  padding-left: 4px;
+}
+
+.secondaryToolbarButton.firstPage::before {
+  content: url(images/secondaryToolbarButton-firstPage.png);
+}
+
+.secondaryToolbarButton.lastPage::before {
+  content: url(images/secondaryToolbarButton-lastPage.png);
+}
+
+.secondaryToolbarButton.rotateCcw::before {
+  content: url(images/secondaryToolbarButton-rotateCcw.png);
+}
+
+.secondaryToolbarButton.rotateCw::before {
+  content: url(images/secondaryToolbarButton-rotateCw.png);
+}
+
+.verticalToolbarSeparator {
+  display: block;
+  padding: 8px 0;
+  margin: 8px 4px;
+  width: 1px;
+  background-color: hsla(0,0%,0%,.5);
+  box-shadow: 0 0 0 1px hsla(0,0%,100%,.08);
+}
+html[dir='ltr'] .verticalToolbarSeparator {
+  margin-left: 2px;
+}
+html[dir='rtl'] .verticalToolbarSeparator {
+  margin-right: 2px;
+}
+
+.horizontalToolbarSeparator {
+  display: block; 
+  margin: 0 0 4px 0;
+  height: 1px;
+  width: 100%;
+  background-color: hsla(0,0%,0%,.5);
+  box-shadow: 0 0 0 1px hsla(0,0%,100%,.08);
+}
 
 .toolbarField {
   padding: 3px 6px;
@@ -836,7 +1002,7 @@ html[dir='rtl'] .toolbarButton.pageDown::before {
   border: 1px solid transparent;
   border-radius: 2px;
   background-color: hsla(0,0%,100%,.09);
-  background-image: -moz-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
+  background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
   background-clip: padding-box;
   border: 1px solid hsla(0,0%,0%,.35);
   border-color: hsla(0,0%,0%,.32) hsla(0,0%,0%,.38) hsla(0,0%,0%,.42);
@@ -846,9 +1012,9 @@ html[dir='rtl'] .toolbarButton.pageDown::before {
   font-size: 12px;
   line-height: 14px;
   outline-style: none;
-  -moz-transition-property: background-color, border-color, box-shadow;
-  -moz-transition-duration: 150ms;
-  -moz-transition-timing-function: ease;
+  transition-property: background-color, border-color, box-shadow;
+  transition-duration: 150ms;
+  transition-timing-function: ease;
 }
 
 .toolbarField[type=checkbox] {
@@ -888,8 +1054,8 @@ html[dir='rtl'] .toolbarButton.pageDown::before {
   font-size: 12px;
   line-height: 14px;
   text-align: left;
-  -webkit-user-select:none;
-  -moz-user-select:none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
   cursor: default;
 }
 
@@ -903,16 +1069,16 @@ html[dir='rtl'] .toolbarButton.pageDown::before {
 }
 
 .thumbnail {
-  margin-bottom: 15px;
   float: left;
 }
 
 .thumbnail:not([data-loaded]) {
   border: 1px dashed rgba(255, 255, 255, 0.5);
+  margin-bottom: 10px;
 }
 
 .thumbnailImage {
-  -moz-transition-duration: 150ms;
+  transition-duration: 150ms;
   border: 1px solid transparent;
   box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5), 0 2px 8px rgba(0, 0, 0, 0.3);
   opacity: 0.8;
@@ -922,7 +1088,7 @@ html[dir='rtl'] .toolbarButton.pageDown::before {
 .thumbnailSelectionRing {
   border-radius: 2px;
   padding: 7px;
-  -moz-transition-duration: 150ms;
+  transition-duration: 150ms;
 }
 
 a:focus > .thumbnail > .thumbnailSelectionRing > .thumbnailImage,
@@ -933,7 +1099,7 @@ a:focus > .thumbnail > .thumbnailSelectionRing > .thumbnailImage,
 a:focus > .thumbnail > .thumbnailSelectionRing,
 .thumbnail:hover > .thumbnailSelectionRing {
   background-color: hsla(0,0%,100%,.15);
-  background-image: -moz-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
+  background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
   background-clip: padding-box;
   box-shadow: 0 1px 0 hsla(0,0%,100%,.05) inset,
               0 0 1px hsla(0,0%,100%,.2) inset,
@@ -948,7 +1114,7 @@ a:focus > .thumbnail > .thumbnailSelectionRing,
 
 .thumbnail.selected > .thumbnailSelectionRing {
   background-color: hsla(0,0%,100%,.3);
-  background-image: -moz-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
+  background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
   background-clip: padding-box;
   box-shadow: 0 1px 0 hsla(0,0%,100%,.05) inset,
               0 0 1px hsla(0,0%,100%,.1) inset,
@@ -963,8 +1129,8 @@ a:focus > .thumbnail > .thumbnailSelectionRing,
   bottom: 0;
   padding: 4px 4px 0;
   overflow: auto;
-  -webkit-user-select:none;
-  -moz-user-select:none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
 }
 
 html[dir='ltr'] .outlineItem > .outlineItems {
@@ -985,8 +1151,7 @@ html[dir='rtl'] .outlineItem > .outlineItems {
   color: hsla(0,0%,100%,.8);
   font-size: 13px;
   line-height: 15px;
-  -moz-user-select:none;
-  cursor: default;
+  -moz-user-select: none;
   white-space: normal;
 }
 
@@ -1000,7 +1165,7 @@ html[dir='rtl'] .outlineItem > a {
 
 .outlineItem > a:hover {
   background-color: hsla(0,0%,100%,.02);
-  background-image: -moz-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
+  background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
   background-clip: padding-box;
   box-shadow: 0 1px 0 hsla(0,0%,100%,.05) inset,
               0 0 1px hsla(0,0%,100%,.2) inset,
@@ -1010,7 +1175,7 @@ html[dir='rtl'] .outlineItem > a {
 
 .outlineItem.selected {
   background-color: hsla(0,0%,100%,.08);
-  background-image: -moz-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
+  background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
   background-clip: padding-box;
   box-shadow: 0 1px 0 hsla(0,0%,100%,.05) inset,
               0 0 1px hsla(0,0%,100%,.1) inset,
@@ -1018,11 +1183,11 @@ html[dir='rtl'] .outlineItem > a {
   color: hsla(0,0%,100%,1);
 }
 
-.noOutline,
 .noResults {
   font-size: 12px;
   color: hsla(0,0%,100%,.8);
   font-style: italic;
+  cursor: default;
 }
 
 #findScrollView {
@@ -1041,8 +1206,12 @@ html[dir='rtl'] .outlineItem > a {
   bottom: 35px;
 }
 
+.canvasWrapper {
+  overflow: hidden;
+}
+
 canvas {
-  margin: auto;
+  margin: 0;
   display: block;
 }
 
@@ -1050,25 +1219,25 @@ canvas {
   direction: ltr;
   width: 816px;
   height: 1056px;
-  margin: 10px auto;
+  margin: 1px auto -8px auto;
   position: relative;
   overflow: visible;
-  -webkit-box-shadow: 0px 4px 10px #000;
-  -moz-box-shadow: 0px 4px 10px #000;
-  box-shadow: 0px 4px 10px #000;
+  border: 9px solid transparent;
+  background-clip: content-box;
+  border-image: url(images/shadow.png) 9 9 repeat;
   background-color: white;
 }
 
-.page > a {
+.page > a,
+.annotationLayer > a {
   display: block;
   position: absolute;
 }
 
-.page > a:hover {
+.page > a:hover,
+.annotationLayer > a:hover {
   opacity: 0.2;
   background: #ff0;
-  -webkit-box-shadow: 0px 2px 10px #ff0;
-  -moz-box-shadow: 0px 2px 10px #ff0;
   box-shadow: 0px 2px 10px #ff0;
 }
 
@@ -1082,82 +1251,6 @@ canvas {
   background: url('images/loading-icon.gif') center no-repeat;
 }
 
-#loadingBox {
-  position: absolute;
-  top: 50%;
-  margin-top: -25px;
-  left: 0;
-  right: 0;
-  text-align: center;
-  color: #ddd;
-  font-size: 14px;
-}
-
-#loadingBar {
-  display: inline-block;
-  clear: both;
-  margin: 0px;
-  margin-top: 5px;
-  line-height: 0;
-  border-radius: 2px;
-  width: 200px;
-  height: 25px;
-
-  background-color: hsla(0,0%,0%,.3);
-  background-image: -moz-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
-  background-image: -webkit-linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0));
-  border: 1px solid #000;
-  box-shadow: 0 1px 1px hsla(0,0%,0%,.1) inset,
-              0 0 1px hsla(0,0%,0%,.2) inset,
-              0 0 1px 1px rgba(255, 255, 255, 0.1);
-}
-
-#loadingBar .progress {
-  display: inline-block;
-  float: left;
-
-  background: #666;
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b2b2b2), color-stop(100%,#898989));
-  background: -webkit-linear-gradient(top, #b2b2b2 0%,#898989 100%);
-  background: -moz-linear-gradient(top, #b2b2b2 0%,#898989 100%);
-  background: -ms-linear-gradient(top, #b2b2b2 0%,#898989 100%);
-  background: -o-linear-gradient(top, #b2b2b2 0%,#898989 100%);
-  background: linear-gradient(top, #b2b2b2 0%,#898989 100%);
-
-  border-top-left-radius: 2px;
-  border-bottom-left-radius: 2px;
-
-  width: 0%;
-  height: 100%;
-}
-
-#loadingBar .progress.full {
-  border-top-right-radius: 2px;
-  border-bottom-right-radius: 2px;
-}
-
-#loadingBar .progress.indeterminate {
-  width: 100%;
-  height: 25px;
-  background-image: -moz-linear-gradient( 30deg, #404040, #404040 15%, #898989, #404040 85%, #404040);
-  background-image: -webkit-linear-gradient( 30deg, #404040, #404040 15%, #898989, #404040 85%, #404040);
-  background-image: -ms-linear-gradient( 30deg, #404040, #404040 15%, #898989, #404040 85%, #404040);
-  background-image: -o-linear-gradient( 30deg, #404040, #404040 15%, #898989, #404040 85%, #404040);
-  background-size: 75px 25px;
-  -moz-animation: progressIndeterminate 1s linear infinite;
-  -webkit-animation: progressIndeterminate 1s linear infinite;
-}
-
- at -moz-keyframes progressIndeterminate {
-  from { background-position: 0px 0px; }
-  to { background-position: 75px 0px; }
-}
-
- at -webkit-keyframes progressIndeterminate {
-  from { background-position: 0px 0px; }
-  to { background-position: 75px 0px; }
-}
-
 .textLayer {
   position: absolute;
   left: 0;
@@ -1166,13 +1259,15 @@ canvas {
   bottom: 0;
   color: #000;
   font-family: sans-serif;
+  overflow: hidden;
 }
 
 .textLayer > div {
   color: transparent;
   position: absolute;
-  line-height:1.3;
-  white-space:pre;
+  line-height: 1;
+  white-space: pre;
+  cursor: text;
 }
 
 .textLayer .highlight {
@@ -1211,11 +1306,8 @@ canvas {
   padding: 0.6em;
   max-width: 20em;
   background-color: #FFFF99;
-  -webkit-box-shadow: 0px 2px 10px #333;
-  -moz-box-shadow: 0px 2px 10px #333;
   box-shadow: 0px 2px 10px #333;
   border-radius: 7px;
-  -moz-border-radius: 7px;
 }
 
 .annotText > img {
@@ -1224,7 +1316,6 @@ canvas {
 }
 
 .annotText > img:hover {
-  cursor: pointer;
   opacity: 1;
 }
 
@@ -1240,11 +1331,13 @@ canvas {
   left: 0;
   position: absolute;
   right: 0;
-  top: 32px;
   z-index: 1000;
   padding: 3px;
   font-size: 0.8em;
 }
+.loadingInProgress #errorWrapper {
+  top: 39px;
+}
 
 #errorMessageLeft {
   float: left;
@@ -1262,6 +1355,60 @@ canvas {
   width: 98%;
 }
 
+#overlayContainer {
+  display: table;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  background-color: hsla(0,0%,0%,.2);
+  z-index: 10000;
+}
+
+#promptContainer {
+  display: table-cell;
+  vertical-align: middle;
+  text-align: center;
+}
+
+#promptContainer > * {
+  display: inline-block;
+}
+
+.prompt {
+  display: table;
+  padding: 15px;
+  border-spacing: 4px;
+  color: hsl(0,0%,85%);
+  line-height: 14px;
+  text-align: center;
+  background-color: #474747; /* fallback */
+  background-image: url(images/texture.png),
+                    linear-gradient(hsla(0,0%,32%,.99), hsla(0,0%,27%,.95));
+  box-shadow: inset 1px 0 0 hsla(0,0%,100%,.08),
+              inset 0 1px 1px hsla(0,0%,0%,.15),
+              inset 0 -1px 0 hsla(0,0%,100%,.05),
+              0 1px 0 hsla(0,0%,0%,.15),
+              0 1px 1px hsla(0,0%,0%,.1);
+}
+
+.prompt > .row {
+  display: table-row;
+}
+
+.prompt > .row > * {
+  display: table-cell;
+}
+
+.prompt .toolbarField {
+  margin: 5px 0;
+  width: 200px;
+}
+
+.prompt .toolbarField:hover,
+.prompt .toolbarField:focus {
+  border-color: hsla(0,0%,0%,.32) hsla(0,0%,0%,.38) hsla(0,0%,0%,.42);
+}
+
 .clearBoth {
   clear: both;
 }
@@ -1340,10 +1487,18 @@ canvas {
 }
 
 @media print {
+  /* General rules for printing. */
+  body {
+    background: transparent none;
+  }
+
   /* Rules for browsers that don't support mozPrintCallback. */
-  #sidebarContainer, .toolbar, #loadingBox, #errorWrapper, .textLayer {
+  #sidebarContainer, #secondaryToolbar, .toolbar, #loadingBox, #errorWrapper, .textLayer {
     display: none;
   }
+  #viewerContainer {
+    overflow: visible;
+  }
 
   #mainContainer, #viewerContainer, .page, .page canvas {
     position: static;
@@ -1354,8 +1509,7 @@ canvas {
   .page {
     float: left;
     display: none;
-    -webkit-box-shadow: none;
-    -moz-box-shadow: none;
+    border: none;
     box-shadow: none;
   }
 
@@ -1363,6 +1517,10 @@ canvas {
     display: block;
   }
 
+  .fileInput {
+    display: none;
+  }
+
   /* Rules for browsers that support mozPrintCallback */
   body[data-mozPrintCallback] #outerContainer {
     display: none;
@@ -1377,24 +1535,51 @@ canvas {
   }
 }
 
- at media all and (max-width: 950px) {
+.visibleLargeView,
+.visibleMediumView,
+.visibleSmallView {
+  display: none;
+}
+
+ at media all and (max-width: 960px) {
   html[dir='ltr'] #outerContainer.sidebarMoving .outerCenter,
   html[dir='ltr'] #outerContainer.sidebarOpen .outerCenter {
     float: left;
-    left: 180px;
+    left: 205px;
   }
   html[dir='rtl'] #outerContainer.sidebarMoving .outerCenter,
   html[dir='rtl'] #outerContainer.sidebarOpen .outerCenter {
     float: right;
-    right: 180px;
+    right: 205px;
+  }
+}
+
+ at media all and (max-width: 900px) {
+  .sidebarOpen .hiddenLargeView {
+    display: none;
+  }
+  .sidebarOpen .visibleLargeView {
+    display: inherit;
+  }
+}
+
+ at media all and (max-width: 860px) {
+  .sidebarOpen .hiddenMediumView {
+    display: none;
+  }
+  .sidebarOpen .visibleMediumView {
+    display: inherit;
   }
 }
 
 @media all and (max-width: 770px) {
   #sidebarContainer {
-    top: 33px;
+    top: 32px;
     z-index: 100;
   }
+  .loadingInProgress #sidebarContainer {
+    top: 39px;
+  }
   #sidebarContent {
     top: 32px;
     background-color: hsla(0,0%,0%,.7);
@@ -1409,21 +1594,64 @@ canvas {
 
   html[dir='ltr'] .outerCenter {
     float: left;
-    left: 180px;
+    left: 205px;
   }
   html[dir='rtl'] .outerCenter {
     float: right;
-    right: 180px;
+    right: 205px;
+  }
+
+  #outerContainer .hiddenLargeView,
+  #outerContainer .hiddenMediumView {
+    display: inherit;
+  }
+  #outerContainer .visibleLargeView,
+  #outerContainer .visibleMediumView {
+    display: none;
+  }
+}
+
+ at media all and (max-width: 700px) {
+  #outerContainer .hiddenLargeView {
+    display: none;
+  }
+  #outerContainer .visibleLargeView {
+    display: inherit;
+  }
+}
+
+ at media all and (max-width: 660px) {
+  #outerContainer .hiddenMediumView {
+    display: none;
+  }
+  #outerContainer .visibleMediumView {
+    display: inherit;
   }
 }
 
 @media all and (max-width: 600px) {
-  #toolbarViewerRight, #findbar, #viewFind {
+  .hiddenSmallView {
     display: none;
   }
+  .visibleSmallView {
+    display: inherit;
+  }
+  html[dir='ltr'] #outerContainer.sidebarMoving .outerCenter,
+  html[dir='ltr'] #outerContainer.sidebarOpen .outerCenter,
+  html[dir='ltr'] .outerCenter {
+    left: 156px;
+  }
+  html[dir='rtl'] #outerContainer.sidebarMoving .outerCenter,
+  html[dir='rtl'] #outerContainer.sidebarOpen .outerCenter,
+  html[dir='rtl'] .outerCenter {
+    right: 156px;
+  }
+  .toolbarButtonSpacer {
+    width: 0;
+  }
 }
 
- at media all and (max-width: 500px) {
+ at media all and (max-width: 510px) {
   #scaleSelectContainer, #pageNumberLabel {
     display: none;
   }
diff --git a/plugins/pdfviewer/viewer/viewer.html b/plugins/pdfviewer/viewer/viewer.html
index a682741..7608f1a 100644
--- a/plugins/pdfviewer/viewer/viewer.html
+++ b/plugins/pdfviewer/viewer/viewer.html
@@ -14,10 +14,11 @@ 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.
 -->
-<html dir="ltr">
+<html dir="ltr" mozdisallowselectionprint moznomarginboxes>
   <head>
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <meta name="google" content="notranslate">
     <title>PDF.js viewer</title>
 
 
@@ -33,20 +34,22 @@ limitations under the License.
 <script type="text/javascript" src="pdf.js"></script>
 
 
+
     <script type="text/javascript" src="debugger.js"></script>
     <script type="text/javascript" src="viewer.js"></script>
+
   </head>
 
-  <body>
-    <div id="outerContainer">
+  <body tabindex="1">
+    <div id="outerContainer" class="loadingInProgress">
 
       <div id="sidebarContainer">
         <div id="toolbarSidebar">
           <div class="splitToolbarButton toggled">
-            <button id="viewThumbnail" class="toolbarButton group toggled" title="Show Thumbnails" tabindex="1" data-l10n-id="thumbs">
+            <button id="viewThumbnail" class="toolbarButton group toggled" title="Show Thumbnails" tabindex="2" data-l10n-id="thumbs">
                <span data-l10n-id="thumbs_label">Thumbnails</span>
             </button>
-            <button id="viewOutline" class="toolbarButton group" title="Show Document Outline" tabindex="2" data-l10n-id="outline">
+            <button id="viewOutline" class="toolbarButton group" title="Show Document Outline" tabindex="3" data-l10n-id="outline">
                <span data-l10n-id="outline_label">Document Outline</span>
             </button>
           </div>
@@ -60,74 +63,108 @@ limitations under the License.
       </div>  <!-- sidebarContainer -->
 
       <div id="mainContainer">
-        <div class="findbar hidden doorHanger" id="findbar">
+        <div class="findbar hidden doorHanger hiddenSmallView" id="findbar">
           <label for="findInput" class="toolbarLabel" data-l10n-id="find_label">Find:</label>
-          <input id="findInput" class="toolbarField" tabindex="20">
+          <input id="findInput" class="toolbarField" tabindex="41">
           <div class="splitToolbarButton">
-            <button class="toolbarButton findPrevious" title="" id="findPrevious" tabindex="21" data-l10n-id="find_previous">
+            <button class="toolbarButton findPrevious" title="" id="findPrevious" tabindex="42" data-l10n-id="find_previous">
               <span data-l10n-id="find_previous_label">Previous</span>
             </button>
             <div class="splitToolbarButtonSeparator"></div>
-            <button class="toolbarButton findNext" title="" id="findNext" tabindex="22" data-l10n-id="find_next">
+            <button class="toolbarButton findNext" title="" id="findNext" tabindex="43" data-l10n-id="find_next">
               <span data-l10n-id="find_next_label">Next</span>
             </button>
           </div>
           <input type="checkbox" id="findHighlightAll" class="toolbarField">
-          <label for="findHighlightAll" class="toolbarLabel" tabindex="23" data-l10n-id="find_highlight">Highlight all</label>
+          <label for="findHighlightAll" class="toolbarLabel" tabindex="44" data-l10n-id="find_highlight">Highlight all</label>
           <input type="checkbox" id="findMatchCase" class="toolbarField">
-          <label for="findMatchCase" class="toolbarLabel" tabindex="24" data-l10n-id="find_match_case_label">Match case</label>
+          <label for="findMatchCase" class="toolbarLabel" tabindex="45" data-l10n-id="find_match_case_label">Match case</label>
           <span id="findMsg" class="toolbarLabel"></span>
-        </div>
+        </div>  <!-- findbar -->
+
+        <div id="secondaryToolbar" class="secondaryToolbar hidden doorHangerRight">
+          <div id="secondaryToolbarButtonContainer">
+            <button id="secondaryPresentationMode" class="secondaryToolbarButton presentationMode visibleLargeView" title="Switch to Presentation Mode" tabindex="18" data-l10n-id="presentation_mode">
+              <span data-l10n-id="presentation_mode_label">Presentation Mode</span>
+            </button>
+
+            <button id="secondaryPrint" class="secondaryToolbarButton print visibleMediumView" title="Print" tabindex="20" data-l10n-id="print">
+              <span data-l10n-id="print_label">Print</span>
+            </button>
+
+            <div class="horizontalToolbarSeparator visibleLargeView"></div>
+
+            <button id="firstPage" class="secondaryToolbarButton firstPage" title="Go to First Page" tabindex="22" data-l10n-id="first_page">
+              <span data-l10n-id="first_page_label">Go to First Page</span>
+            </button>
+            <button id="lastPage" class="secondaryToolbarButton lastPage" title="Go to Last Page" tabindex="23" data-l10n-id="last_page">
+              <span data-l10n-id="last_page_label">Go to Last Page</span>
+            </button>
+
+            <div class="horizontalToolbarSeparator"></div>
+
+            <button id="pageRotateCw" class="secondaryToolbarButton rotateCw" title="Rotate Clockwise" tabindex="24" data-l10n-id="page_rotate_cw">
+              <span data-l10n-id="page_rotate_cw_label">Rotate Clockwise</span>
+            </button>
+            <button id="pageRotateCcw" class="secondaryToolbarButton rotateCcw" title="Rotate Counterclockwise" tabindex="25" data-l10n-id="page_rotate_ccw">
+              <span data-l10n-id="page_rotate_ccw_label">Rotate Counterclockwise</span>
+            </button>
+          </div>
+        </div>  <!-- secondaryToolbar -->
+
         <div class="toolbar">
           <div id="toolbarContainer">
             <div id="toolbarViewer">
               <div id="toolbarViewerLeft">
-                <button id="sidebarToggle" class="toolbarButton" title="Toggle Sidebar" tabindex="3" data-l10n-id="toggle_slider">
-                  <span data-l10n-id="toggle_slider_label">Toggle Sidebar</span>
+                <button id="sidebarToggle" class="toolbarButton" title="Toggle Sidebar" tabindex="4" data-l10n-id="toggle_sidebar">
+                  <span data-l10n-id="toggle_sidebar_label">Toggle Sidebar</span>
                 </button>
                 <div class="toolbarButtonSpacer"></div>
-                <button id="viewFind" class="toolbarButton group" title="Find in Document" tabindex="4" data-l10n-id="findbar">
+                <button id="viewFind" class="toolbarButton group hiddenSmallView" title="Find in Document" tabindex="5" data-l10n-id="findbar">
                    <span data-l10n-id="findbar_label">Find</span>
                 </button>
                 <div class="splitToolbarButton">
-                  <button class="toolbarButton pageUp" title="Previous Page" id="previous" tabindex="5" data-l10n-id="previous">
+                  <button class="toolbarButton pageUp" title="Previous Page" id="previous" tabindex="6" data-l10n-id="previous">
                     <span data-l10n-id="previous_label">Previous</span>
                   </button>
                   <div class="splitToolbarButtonSeparator"></div>
-                  <button class="toolbarButton pageDown" title="Next Page" id="next" tabindex="6" data-l10n-id="next">
+                  <button class="toolbarButton pageDown" title="Next Page" id="next" tabindex="7" data-l10n-id="next">
                     <span data-l10n-id="next_label">Next</span>
                   </button>
                 </div>
                 <label id="pageNumberLabel" class="toolbarLabel" for="pageNumber" data-l10n-id="page_label">Page: </label>
-                <input type="number" id="pageNumber" class="toolbarField pageNumber" value="1" size="4" min="1" tabindex="7">
+                <input type="number" id="pageNumber" class="toolbarField pageNumber" value="1" size="4" min="1" tabindex="8">
                 </input>
                 <span id="numPages" class="toolbarLabel"></span>
               </div>
               <div id="toolbarViewerRight">
-                <input id="fileInput" class="fileInput" type="file" oncontextmenu="return false;" style="visibility: hidden; position: fixed; right: 0; top: 0" />
-
-
-                <button id="fullscreen" class="toolbarButton fullscreen" title="Switch to Presentation Mode" tabindex="11" data-l10n-id="presentation_mode">
+                <button id="presentationMode" class="toolbarButton presentationMode hiddenLargeView" title="Switch to Presentation Mode" tabindex="12" data-l10n-id="presentation_mode">
                   <span data-l10n-id="presentation_mode_label">Presentation Mode</span>
                 </button>
 
-                <button id="print" class="toolbarButton print" title="Print" tabindex="13" data-l10n-id="print">
+                <button id="print" class="toolbarButton print hiddenMediumView" title="Print" tabindex="14" data-l10n-id="print">
                   <span data-l10n-id="print_label">Print</span>
                 </button>
+
+                <div class="verticalToolbarSeparator hiddenSmallView"></div>
+                
+                <button id="secondaryToolbarToggle" class="toolbarButton" title="Tools" tabindex="17" data-l10n-id="tools">
+                  <span data-l10n-id="tools_label">Tools</span>
+                </button> 
               </div>
               <div class="outerCenter">
                 <div class="innerCenter" id="toolbarViewerMiddle">
                   <div class="splitToolbarButton">
-                    <button class="toolbarButton zoomOut" title="Zoom Out" tabindex="8" data-l10n-id="zoom_out">
+                    <button id="zoomOut" class="toolbarButton zoomOut" title="Zoom Out" tabindex="9" data-l10n-id="zoom_out">
                       <span data-l10n-id="zoom_out_label">Zoom Out</span>
                     </button>
                     <div class="splitToolbarButtonSeparator"></div>
-                    <button class="toolbarButton zoomIn" title="Zoom In" tabindex="9" data-l10n-id="zoom_in">
+                    <button id="zoomIn" class="toolbarButton zoomIn" title="Zoom In" tabindex="10" data-l10n-id="zoom_in">
                       <span data-l10n-id="zoom_in_label">Zoom In</span>
                      </button>
                   </div>
                   <span id="scaleSelectContainer" class="dropdownToolbarButton">
-                     <select id="scaleSelect" title="Zoom" oncontextmenu="return false;" tabindex="10" data-l10n-id="zoom">
+                     <select id="scaleSelect" title="Zoom" tabindex="11" data-l10n-id="zoom">
                       <option id="pageAutoOption" value="auto" selected="selected" data-l10n-id="page_scale_auto">Automatic Zoom</option>
                       <option id="pageActualOption" value="page-actual" data-l10n-id="page_scale_actual">Actual Size</option>
                       <option id="pageFitOption" value="page-fit" data-l10n-id="page_scale_fit">Fit Page</option>
@@ -144,41 +181,42 @@ limitations under the License.
                 </div>
               </div>
             </div>
+            <div id="loadingBar">
+              <div class="progress">
+                <div class="glimmer">
+                </div>
+              </div>
+            </div>
           </div>
         </div>
 
         <menu type="context" id="viewerContextMenu">
-          <menuitem label="First Page" id="first_page"
-                    data-l10n-id="first_page" ></menuitem>
-          <menuitem label="Last Page" id="last_page"
-                    data-l10n-id="last_page" ></menuitem>
-          <menuitem label="Rotate Counter-Clockwise" id="page_rotate_ccw"
-                    data-l10n-id="page_rotate_ccw" ></menuitem>
-          <menuitem label="Rotate Clockwise" id="page_rotate_cw"
-                    data-l10n-id="page_rotate_cw" ></menuitem>
+          <menuitem id="contextFirstPage" label="First Page"
+                    data-l10n-id="first_page"></menuitem>
+          <menuitem id="contextLastPage" label="Last Page"
+                    data-l10n-id="last_page"></menuitem>
+          <menuitem id="contextPageRotateCw" label="Rotate Clockwise"
+                    data-l10n-id="page_rotate_cw"></menuitem>
+          <menuitem id="contextPageRotateCcw" label="Rotate Counter-Clockwise"
+                    data-l10n-id="page_rotate_ccw"></menuitem>
         </menu>
 
-        <div id="viewerContainer">
-          <div id="viewer" contextmenu="viewerContextMenu"></div>
-        </div>
-
-        <div id="loadingBox">
-          <div id="loading"></div>
-          <div id="loadingBar"><div class="progress"></div></div>
+        <div id="viewerContainer" tabindex="0">
+          <div id="viewer"></div>
         </div>
 
         <div id="errorWrapper" hidden='true'>
           <div id="errorMessageLeft">
             <span id="errorMessage"></span>
-            <button id="errorShowMore" onclick="" oncontextmenu="return false;" data-l10n-id="error_more_info">
+            <button id="errorShowMore" data-l10n-id="error_more_info">
               More Information
             </button>
-            <button id="errorShowLess" onclick="" oncontextmenu="return false;" data-l10n-id="error_less_info" hidden='true'>
+            <button id="errorShowLess" data-l10n-id="error_less_info" hidden='true'>
               Less Information
             </button>
           </div>
           <div id="errorMessageRight">
-            <button id="errorClose" oncontextmenu="return false;" data-l10n-id="error_close">
+            <button id="errorClose" data-l10n-id="error_close">
               Close
             </button>
           </div>
@@ -187,6 +225,23 @@ limitations under the License.
         </div>
       </div> <!-- mainContainer -->
 
+      <div id="overlayContainer" class="hidden">
+        <div id="promptContainer">
+          <div id="passwordContainer" class="prompt doorHanger">
+            <div class="row">
+              <p id="passwordText" data-l10n-id="password_label">Enter the password to open this PDF file:</p>
+            </div>
+            <div class="row">
+              <input type="password" id="password" class="toolbarField" />
+            </div>
+            <div class="row">
+              <button id="passwordCancel" class="promptButton"><span data-l10n-id="password_cancel">Cancel</span></button>
+              <button id="passwordSubmit" class="promptButton"><span data-l10n-id="password_ok">OK</span></button>
+            </div>
+          </div>
+        </div>
+      </div> 
+
     </div> <!-- outerContainer -->
     <div id="printContainer"></div>
   </body>
diff --git a/plugins/pdfviewer/viewer/viewer.js b/plugins/pdfviewer/viewer/viewer.js
index fa18638..8500af4 100644
--- a/plugins/pdfviewer/viewer/viewer.js
+++ b/plugins/pdfviewer/viewer/viewer.js
@@ -2,10 +2,10 @@ var DEFAULT_URL=null,DEFAULT_SCALE="auto",DEFAULT_SCALE_DELTA=1.1,UNKNOWN_SCALE=
 function getFileName(a){var b=a.indexOf("#"),c=a.indexOf("?"),b=Math.min(0<b?b:a.length,0<c?c:a.length);return a.substring(a.lastIndexOf("/",b)+1,b)}function scrollIntoView(a,b){for(var c=a.offsetParent,d=a.offsetTop;c.clientHeight==c.scrollHeight;)if(d+=c.offsetTop,c=c.offsetParent,!c)return;b&&(d+=b.top);c.scrollTop=d}
 var Cache=function(a){var b=[];this.push=function(c){var d=b.indexOf(c);0<=d&&b.splice(d);b.push(c);b.length>a&&b.shift().destroy()}},ProgressBar=function(){function a(a,c){this.div=document.querySelector(a+" .progress");this.height=c.height||100;this.width=c.width||100;this.units=c.units||"%";this.div.style.height=this.height+this.units}a.prototype={updateBar:function(){if(this._indeterminate)this.div.classList.add("indeterminate");else{var a=this.width*this._percent/100;95<this._percent?this.div.classList.add("full"):
 this.div.classList.remove("full");this.div.classList.remove("indeterminate");this.div.style.width=a+this.units}},get percent(){return this._percent},set percent(a){this._indeterminate=isNaN(a);this._percent=Math.min(Math.max(a,0),100);this.updateBar()}};return a}(),Settings=function(){function a(a){this.fingerprint=a;this.initializedPromise=new PDFJS.Promise;a=function(a){this.initialize(a||"{}");this.initializedPromise.resolve()}.bind(this);b&&a(localStorage.getItem("database"))}var b;try{b="localStorage"in
-window&&null!==window.localStorage&&localStorage}catch(c){b=!1}a.prototype={initialize:function(a){a=JSON.parse(a);"files"in a||(a.files=[]);a.files.length>=SETTINGS_MEMORY&&a.files.shift();for(var b,c=0,f=a.files.length;c<f;c++)if(a.files[c].fingerprint==this.fingerprint){b=c;break}"number"!=typeof b&&(b=a.files.push({fingerprint:this.fingerprint})-1);this.file=a.files[b];this.database=a},set:function(a,c){if(this.initializedPromise.isResolved){this.file[a]=c;var j=JSON.stringify(this.database);
-b&&localStorage.setItem("database",j)}},get:function(a,b){return!this.initializedPromise.isResolved?b:this.file[a]||b}};return a}(),cache=new Cache(CACHE_SIZE),currentPageNumber=1,PDFFindController={startedTextExtraction:!1,extractTextPromises:[],active:!1,pageContents:[],pageMatches:[],selected:{pageIdx:-1,matchIdx:-1},offset:{pageIdx:null,matchIdx:null},resumePageIdx:null,resumeCallback:null,state:null,dirtyMatch:!1,findTimeout:null,initialize:function(){var a=["find","findagain","findhighlightallchange",
-"findcasesensitivitychange"];this.handleEvent=this.handleEvent.bind(this);for(var b=0;b<a.length;b++)window.addEventListener(a[b],this.handleEvent)},calcFindMatch:function(a){var b=this.pageContents[a],c=this.state.query,d=this.state.caseSensitive,e=c.length;if(0!==e){d||(b=b.toLowerCase(),c=c.toLowerCase());for(var d=[],j=-e;;){j=b.indexOf(c,j+e);if(-1===j)break;d.push(j)}this.pageMatches[a]=d;this.updatePage(a);this.resumePageIdx===a&&(a=this.resumeCallback,this.resumeCallback=this.resumePageIdx=
-null,a())}},extractText:function(){function a(b){PDFView.pages[b].getTextContent().then(function(c){c=c.bidiTexts;for(var f="",h=0;h<c.length;h++)f+=c[h].str;d.pageContents.push(f);d.extractTextPromises[b].resolve(b);b+1<PDFView.pages.length&&a(b+1)})}if(!this.startedTextExtraction){this.startedTextExtraction=!0;this.pageContents=[];for(var b=0,c=PDFView.pdfDocument.numPages;b<c;b++)this.extractTextPromises.push(new PDFJS.Promise);var d=this;a(0);return this.extractTextPromise}},handleEvent:function(a){if(null===
+window&&null!==window.localStorage&&localStorage}catch(c){b=!1}a.prototype={initialize:function(a){a=JSON.parse(a);"files"in a||(a.files=[]);a.files.length>=SETTINGS_MEMORY&&a.files.shift();for(var b,c=0,e=a.files.length;c<e;c++)if(a.files[c].fingerprint==this.fingerprint){b=c;break}"number"!=typeof b&&(b=a.files.push({fingerprint:this.fingerprint})-1);this.file=a.files[b];this.database=a},set:function(a,c){if(this.initializedPromise.isResolved){this.file[a]=c;var h=JSON.stringify(this.database);
+b&&localStorage.setItem("database",h)}},get:function(a,b){return this.initializedPromise.isResolved?this.file[a]||b:b}};return a}(),cache=new Cache(CACHE_SIZE),currentPageNumber=1,PDFFindController={startedTextExtraction:!1,extractTextPromises:[],active:!1,pageContents:[],pageMatches:[],selected:{pageIdx:-1,matchIdx:-1},offset:{pageIdx:null,matchIdx:null},resumePageIdx:null,resumeCallback:null,state:null,dirtyMatch:!1,findTimeout:null,initialize:function(){var a=["find","findagain","findhighlightallchange",
+"findcasesensitivitychange"];this.handleEvent=this.handleEvent.bind(this);for(var b=0;b<a.length;b++)window.addEventListener(a[b],this.handleEvent)},calcFindMatch:function(a){var b=this.pageContents[a],c=this.state.query,d=this.state.caseSensitive,f=c.length;if(0!==f){d||(b=b.toLowerCase(),c=c.toLowerCase());for(var d=[],h=-f;;){h=b.indexOf(c,h+f);if(-1===h)break;d.push(h)}this.pageMatches[a]=d;this.updatePage(a);this.resumePageIdx===a&&(a=this.resumeCallback,this.resumeCallback=this.resumePageIdx=
+null,a())}},extractText:function(){function a(b){PDFView.pages[b].getTextContent().then(function(c){c=c.bidiTexts;for(var e="",g=0;g<c.length;g++)e+=c[g].str;d.pageContents.push(e);d.extractTextPromises[b].resolve(b);b+1<PDFView.pages.length&&a(b+1)})}if(!this.startedTextExtraction){this.startedTextExtraction=!0;this.pageContents=[];for(var b=0,c=PDFView.pdfDocument.numPages;b<c;b++)this.extractTextPromises.push(new PDFJS.Promise);var d=this;a(0);return this.extractTextPromise}},handleEvent:function(a){if(null===
 this.state||"findagain"!==a.type)this.dirtyMatch=!0;this.state=a.detail;this.updateUIState(FindStates.FIND_PENDING);this.extractText();clearTimeout(this.findTimeout);"find"===a.type?this.findTimeout=setTimeout(this.nextMatch.bind(this),250):this.nextMatch()},updatePage:function(a){var b=PDFView.pages[a];this.selected.pageIdx===a&&b.scrollIntoView();b.textLayer&&b.textLayer.updateMatches()},nextMatch:function(){var a=this.state.findPrevious,b=PDFView.pages.length;this.active=!0;if(this.dirtyMatch){this.dirtyMatch=
 !1;this.selected.pageIdx=this.selected.matchIdx=-1;this.offset.pageIdx=a?b-1:0;this.offset.matchIdx=null;this.hadMatch=!1;this.resumePageIdx=this.resumeCallback=null;this.pageMatches=[];for(var c=this,d=0;d<b;d++)this.updatePage(d),this.extractTextPromises[d].onData(function(a){setTimeout(function(){c.calcFindMatch(a)})})}if(""===this.state.query)this.updateUIState(FindStates.FIND_FOUND);else if(!this.resumeCallback){b=this.offset;if(null!==b.matchIdx){d=this.pageMatches[b.pageIdx].length;if(!a&&
 b.matchIdx+1<d||a&&0<b.matchIdx){this.hadMatch=!0;b.matchIdx=a?b.matchIdx-1:b.matchIdx+1;this.updateMatch(!0);return}this.advanceOffsetPage(a)}this.nextPageMatch()}},nextPageMatch:function(){null!==this.resumePageIdx&&console.error("There can only be one pending page.");var a=function(a){var b=this.offset;a=a.length;var c=this.state.findPrevious;if(a)this.hadMatch=!0,b.matchIdx=c?a-1:0,this.updateMatch(!0);else{this.advanceOffsetPage(c);if(b.wrapped&&(b.matchIdx=null,!this.hadMatch)){this.updateMatch(!1);
@@ -13,81 +13,81 @@ return}this.nextPageMatch()}}.bind(this),b=this.offset.pageIdx,c=this.pageMatche
 this.offset.pageIdx,this.selected.matchIdx=this.offset.matchIdx,b=c?FindStates.FIND_WRAPPED:FindStates.FIND_FOUND,-1!==a&&a!==this.selected.pageIdx&&this.updatePage(a));this.updateUIState(b,this.state.findPrevious);-1!==this.selected.pageIdx&&this.updatePage(this.selected.pageIdx,!0)},updateUIState:function(a,b){PDFView.supportsIntegratedFind?FirefoxCom.request("updateFindControlState",{result:a,findPrevious:b}):PDFFindBar.updateUIState(a,b)}},PDFFindBar={opened:!1,initialize:function(){this.bar=
 document.getElementById("findbar");this.toggleButton=document.getElementById("viewFind");this.findField=document.getElementById("findInput");this.highlightAll=document.getElementById("findHighlightAll");this.caseSensitive=document.getElementById("findMatchCase");this.findMsg=document.getElementById("findMsg");this.findStatusIcon=document.getElementById("findStatusIcon");var a=this;this.toggleButton.addEventListener("click",function(){a.toggle()});this.findField.addEventListener("input",function(){a.dispatchEvent("")});
 this.bar.addEventListener("keydown",function(b){switch(b.keyCode){case 13:b.target===a.findField&&a.dispatchEvent("again",b.shiftKey);break;case 27:a.close()}});document.getElementById("findPrevious").addEventListener("click",function(){a.dispatchEvent("again",!0)});document.getElementById("findNext").addEventListener("click",function(){a.dispatchEvent("again",!1)});this.highlightAll.addEventListener("click",function(){a.dispatchEvent("highlightallchange")});this.caseSensitive.addEventListener("click",
-function(){a.dispatchEvent("casesensitivitychange")})},dispatchEvent:function(a,b){var c=document.createEvent("CustomEvent");c.initCustomEvent("find"+a,!0,!0,{query:this.findField.value,caseSensitive:this.caseSensitive.checked,highlightAll:this.highlightAll.checked,findPrevious:b});return window.dispatchEvent(c)},updateUIState:function(a,b){var c=!1,d="",e="";switch(a){case FindStates.FIND_PENDING:e="pending";break;case FindStates.FIND_NOTFOUND:d=mozL10n.get("find_not_found",null,"Phrase not found");
-c=!0;break;case FindStates.FIND_WRAPPED:d=b?mozL10n.get("find_reached_top",null,"Reached top of document, continued from bottom"):mozL10n.get("find_reached_bottom",null,"Reached end of document, continued from top")}c?this.findField.classList.add("notFound"):this.findField.classList.remove("notFound");this.findField.setAttribute("data-status",e);this.findMsg.textContent=d},open:function(){this.opened||(this.opened=!0,this.toggleButton.classList.add("toggled"),this.bar.classList.remove("hidden"),this.findField.select(),
+function(){a.dispatchEvent("casesensitivitychange")})},dispatchEvent:function(a,b){var c=document.createEvent("CustomEvent");c.initCustomEvent("find"+a,!0,!0,{query:this.findField.value,caseSensitive:this.caseSensitive.checked,highlightAll:this.highlightAll.checked,findPrevious:b});return window.dispatchEvent(c)},updateUIState:function(a,b){var c=!1,d="",f="";switch(a){case FindStates.FIND_PENDING:f="pending";break;case FindStates.FIND_NOTFOUND:d=mozL10n.get("find_not_found",null,"Phrase not found");
+c=!0;break;case FindStates.FIND_WRAPPED:d=b?mozL10n.get("find_reached_top",null,"Reached top of document, continued from bottom"):mozL10n.get("find_reached_bottom",null,"Reached end of document, continued from top")}c?this.findField.classList.add("notFound"):this.findField.classList.remove("notFound");this.findField.setAttribute("data-status",f);this.findMsg.textContent=d},open:function(){this.opened||(this.opened=!0,this.toggleButton.classList.add("toggled"),this.bar.classList.remove("hidden"),this.findField.select(),
 this.findField.focus())},close:function(){this.opened&&(this.opened=!1,this.toggleButton.classList.remove("toggled"),this.bar.classList.add("hidden"),PDFFindController.active=!1)},toggle:function(){this.opened?this.close():this.open()}},PDFView={pages:[],thumbnails:[],currentScale:UNKNOWN_SCALE,currentScaleValue:null,initialBookmark:document.location.hash.substring(1),startedTextExtraction:!1,pageText:[],container:null,thumbnailContainer:null,initialized:!1,fellback:!1,pdfDocument:null,sidebarOpen:!1,
 pageViewScroll:null,thumbnailViewScroll:null,isFullscreen:!1,previousScale:null,pageRotation:0,mouseScrollTimeStamp:0,mouseScrollDelta:0,lastScroll:0,previousPageNumber:1,initialize:function(){var a=this,b=this.container=document.getElementById("viewerContainer");this.pageViewScroll={};this.watchScroll(b,this.pageViewScroll,updateViewarea);var c=this.thumbnailContainer=document.getElementById("thumbnailView");this.thumbnailViewScroll={};this.watchScroll(c,this.thumbnailViewScroll,this.renderHighestPriority.bind(this));
-PDFFindBar.initialize();PDFFindController.initialize();this.initialized=!0;b.addEventListener("scroll",function(){a.lastScroll=Date.now()},!1)},watchScroll:function(a,b,c){b.down=!0;b.lastY=a.scrollTop;a.addEventListener("scroll",function(){var d=a.scrollTop,e=b.lastY;d>e?b.down=!0:d<e&&(b.down=!1);b.lastY=d;c()},!0)},setScale:function(a,b,c){if(a!=this.currentScale){for(var d=this.pages,e=0;e<d.length;e++)d[e].update(a*CSS_UNITS);!c&&this.currentScale!=a&&this.pages[this.page-1].scrollIntoView();
-this.currentScale=a;c=document.createEvent("UIEvents");c.initUIEvent("scalechange",!1,!1,window,0);c.scale=a;c.resetAutoSettings=b;window.dispatchEvent(c)}},parseScale:function(a,b,c){if("custom"!=a){var d=parseFloat(a);this.currentScaleValue=a;if(d)this.setScale(d,!0,c);else{var e=this.container,j=this.pages[this.page-1];if(j){var f=(e.clientWidth-SCROLLBAR_PADDING)/j.width*j.scale/CSS_UNITS,e=(e.clientHeight-VERTICAL_PADDING)/j.height*j.scale/CSS_UNITS;switch(a){case "page-actual":d=1;break;case "page-width":d=
-f;break;case "page-height":d=e;break;case "page-fit":d=Math.min(f,e);break;case "auto":d=Math.min(1,f)}this.setScale(d,b,c);selectScaleOption(a)}}}},zoomIn:function(){var a=(this.currentScale*DEFAULT_SCALE_DELTA).toFixed(2),a=Math.min(MAX_SCALE,a);this.parseScale(a,!0)},zoomOut:function(){var a=(this.currentScale/DEFAULT_SCALE_DELTA).toFixed(2),a=Math.max(MIN_SCALE,a);this.parseScale(a,!0)},set page(a){var b=this.pages;document.getElementById("pageNumber");var c=document.createEvent("UIEvents");c.initUIEvent("pagechange",
+PDFFindBar.initialize();PDFFindController.initialize();this.initialized=!0;b.addEventListener("scroll",function(){a.lastScroll=Date.now()},!1)},watchScroll:function(a,b,c){b.down=!0;b.lastY=a.scrollTop;a.addEventListener("scroll",function(d){d=a.scrollTop;var f=b.lastY;d>f?b.down=!0:d<f&&(b.down=!1);b.lastY=d;c()},!0)},setScale:function(a,b,c){if(a!=this.currentScale){for(var d=this.pages,f=0;f<d.length;f++)d[f].update(a*CSS_UNITS);c||this.currentScale==a||this.pages[this.page-1].scrollIntoView();
+this.currentScale=a;c=document.createEvent("UIEvents");c.initUIEvent("scalechange",!1,!1,window,0);c.scale=a;c.resetAutoSettings=b;window.dispatchEvent(c)}},parseScale:function(a,b,c){if("custom"!=a){var d=parseFloat(a);this.currentScaleValue=a;if(d)this.setScale(d,!0,c);else{var f=this.container,h=this.pages[this.page-1];if(h){var e=(f.clientWidth-SCROLLBAR_PADDING)/h.width*h.scale/CSS_UNITS,f=(f.clientHeight-VERTICAL_PADDING)/h.height*h.scale/CSS_UNITS;switch(a){case "page-actual":d=1;break;case "page-width":d=
+e;break;case "page-height":d=f;break;case "page-fit":d=Math.min(e,f);break;case "auto":d=Math.min(1,e)}this.setScale(d,b,c);selectScaleOption(a)}}}},zoomIn:function(){var a=(this.currentScale*DEFAULT_SCALE_DELTA).toFixed(2),a=Math.min(MAX_SCALE,a);this.parseScale(a,!0)},zoomOut:function(){var a=(this.currentScale/DEFAULT_SCALE_DELTA).toFixed(2),a=Math.max(MIN_SCALE,a);this.parseScale(a,!0)},set page(a){var b=this.pages;document.getElementById("pageNumber");var c=document.createEvent("UIEvents");c.initUIEvent("pagechange",
 !1,!1,window,0);0<a&&a<=b.length?(b[a-1].updateStats(),this.previousPageNumber=currentPageNumber,currentPageNumber=a,c.pageNumber=a,window.dispatchEvent(c),updateViewarea.inProgress||this.loading&&1==a||b[a-1].scrollIntoView()):(this.previousPageNumber=a,c.pageNumber=this.page,window.dispatchEvent(c))},get page(){return currentPageNumber},get supportsPrinting(){var a="mozPrintCallback"in document.createElement("canvas");Object.defineProperty(this,"supportsPrinting",{value:a,enumerable:!0,configurable:!0,
 writable:!1});return a},get supportsFullscreen(){var a=document.documentElement,a=a.requestFullscreen||a.mozRequestFullScreen||a.webkitRequestFullScreen;window.frameElement&&(a=!1);Object.defineProperty(this,"supportsFullScreen",{value:a,enumerable:!0,configurable:!0,writable:!1});return a},get supportsIntegratedFind(){Object.defineProperty(this,"supportsIntegratedFind",{value:!1,enumerable:!0,configurable:!0,writable:!1});return!1},get supportsDocumentFonts(){Object.defineProperty(this,"supportsDocumentFonts",
 {value:!0,enumerable:!0,configurable:!0,writable:!1});return!0},get isHorizontalScrollbarEnabled(){var a=document.getElementById("viewerContainer");return a.scrollWidth>a.clientWidth},initPassiveLoading:function(){PDFView.loadingBar||(PDFView.loadingBar=new ProgressBar("#loadingBar",{}));window.addEventListener("message",function(a){var b=a.data;if("object"===typeof b&&"pdfjsLoadAction"in b)switch(b.pdfjsLoadAction){case "progress":PDFView.progress(b.loaded/b.total);break;case "complete":if(!b.data){PDFView.error(mozL10n.get("loading_error",
 null,"An error occurred while loading the PDF."),a);break}PDFView.open(b.data,0)}});FirefoxCom.requestSync("initPassiveLoading",null)},setTitleUsingUrl:function(a){this.url=a;try{this.setTitle(decodeURIComponent(getFileName(a))||a)}catch(b){this.setTitle(a)}},setTitle:function(a){document.title=a},open:function(a,b,c){var d={password:c};"string"===typeof a?(this.setTitleUsingUrl(a),d.url=a):a&&"byteLength"in a&&(d.data=a);PDFView.loadingBar||(PDFView.loadingBar=new ProgressBar("#loadingBar",{}));
-this.pdfDocument=null;var e=this;e.loading=!0;PDFJS.getDocument(d).then(function(a){e.load(a,b);e.loading=!1},function(d,f){if(f&&"PasswordException"===f.name&&"needpassword"===f.code){var h=mozL10n.get("request_password",null,"PDF is protected by a password:");if((c=prompt(h))&&0<c.length)return PDFView.open(a,b,c)}h=mozL10n.get("loading_error",null,"An error occurred while loading the PDF.");f&&"InvalidPDFException"===f.name&&(h=mozL10n.get("invalid_file_error",null,"Invalid or corrupted PDF file."));
-document.getElementById("loading").textContent=mozL10n.get("loading_error_indicator",null,"Error");e.error(h,{message:d});e.loading=!1},function(a){e.progress(a.loaded/a.total)})},download:function(){var a=this.url.split("#")[0];window.open(a+"#pdfjs.action=download","_parent")},fallback:function(){},navigateTo:function(a){"string"===typeof a&&(a=this.destinations[a]);if(a instanceof Array){var b=a[0],b=b instanceof Object?this.pagesRefMap[b.num+" "+b.gen+" R"]:b+1;b>this.pages.length&&(b=this.pages.length);
-b&&(this.page=b,this.pages[b-1].scrollIntoView(a))}},getDestinationHash:function(a){if("string"===typeof a)return PDFView.getAnchorUrl("#"+escape(a));if(a instanceof Array){var b=a[0];if(b=b instanceof Object?this.pagesRefMap[b.num+" "+b.gen+" R"]:b+1){var b=PDFView.getAnchorUrl("#page="+b),c=a[1];if("object"===typeof c&&("name"in c&&"XYZ"==c.name)&&(b+="&zoom="+100*(a[4]||this.currentScale),a[2]||a[3]))b+=","+(a[2]||0)+","+(a[3]||0);return b}}return""},getAnchorUrl:function(a){return a},getOutputScale:function(){var a=
+this.pdfDocument=null;var f=this;f.loading=!0;PDFJS.getDocument(d).then(function(a){f.load(a,b);f.loading=!1},function(d,e){if(e&&"PasswordException"===e.name&&"needpassword"===e.code){var g=mozL10n.get("request_password",null,"PDF is protected by a password:");if((c=prompt(g))&&0<c.length)return PDFView.open(a,b,c)}g=mozL10n.get("loading_error",null,"An error occurred while loading the PDF.");e&&"InvalidPDFException"===e.name&&(g=mozL10n.get("invalid_file_error",null,"Invalid or corrupted PDF file."));
+document.getElementById("loading").textContent=mozL10n.get("loading_error_indicator",null,"Error");f.error(g,{message:d});f.loading=!1},function(a){f.progress(a.loaded/a.total)})},download:function(){var a=this.url.split("#")[0];window.open(a+"#pdfjs.action=download","_parent")},fallback:function(){},navigateTo:function(a){"string"===typeof a&&(a=this.destinations[a]);if(a instanceof Array){var b=a[0],b=b instanceof Object?this.pagesRefMap[b.num+" "+b.gen+" R"]:b+1;b>this.pages.length&&(b=this.pages.length);
+b&&(this.page=b,this.pages[b-1].scrollIntoView(a))}},getDestinationHash:function(a){if("string"===typeof a)return PDFView.getAnchorUrl("#"+escape(a));if(a instanceof Array){var b=a[0];if(b=b instanceof Object?this.pagesRefMap[b.num+" "+b.gen+" R"]:b+1){var b=PDFView.getAnchorUrl("#page="+b),c=a[1];"object"===typeof c&&"name"in c&&"XYZ"==c.name&&(b+="&zoom="+100*(a[4]||this.currentScale),a[2]||a[3])&&(b+=","+(a[2]||0)+","+(a[3]||0));return b}}return""},getAnchorUrl:function(a){return a},getOutputScale:function(){var a=
 "devicePixelRatio"in window?window.devicePixelRatio:1;return{sx:a,sy:a,scaled:1!=a}},error:function(a,b){var c=mozL10n.get("error_version_info",{version:PDFJS.version||"?",build:PDFJS.build||"?"},"PDF.js v{{version}} (build: {{build}})")+"\n";b&&(c+=mozL10n.get("error_message",{message:b.message},"Message: {{message}}"),b.stack?c+="\n"+mozL10n.get("error_stack",{stack:b.stack},"Stack: {{stack}}"):(b.filename&&(c+="\n"+mozL10n.get("error_file",{file:b.filename},"File: {{file}}")),b.lineNumber&&(c+=
-"\n"+mozL10n.get("error_line",{line:b.lineNumber},"Line: {{line}}"))));document.getElementById("loadingBox").setAttribute("hidden","true");var d=document.getElementById("errorWrapper");d.removeAttribute("hidden");document.getElementById("errorMessage").textContent=a;document.getElementById("errorClose").onclick=function(){d.setAttribute("hidden","true")};var e=document.getElementById("errorMoreInfo"),j=document.getElementById("errorShowMore"),f=document.getElementById("errorShowLess");j.onclick=function(){e.removeAttribute("hidden");
-j.setAttribute("hidden","true");f.removeAttribute("hidden")};f.onclick=function(){e.setAttribute("hidden","true");j.removeAttribute("hidden");f.setAttribute("hidden","true")};j.removeAttribute("hidden");f.setAttribute("hidden","true");e.value=c;e.rows=c.split("\n").length-1},progress:function(a){a=Math.round(100*a);PDFView.loadingBar.percent=a},load:function(a,b){function c(a,b){a.onAfterDraw=function(){b.setImage(a.canvas)}}this.pdfDocument=a;document.getElementById("errorWrapper").setAttribute("hidden",
-"true");document.getElementById("loadingBox").setAttribute("hidden","true");document.getElementById("loading").textContent="";var d=document.getElementById("thumbnailView");for(d.parentNode.scrollTop=0;d.hasChildNodes();)d.removeChild(d.lastChild);"_loadingInterval"in d&&clearInterval(d._loadingInterval);for(var e=document.getElementById("viewer");e.hasChildNodes();)e.removeChild(e.lastChild);var j=a.numPages,f=a.fingerprint;document.getElementById("numPages").textContent=mozL10n.get("page_of",{pageCount:j},
-"of {{pageCount}}");document.getElementById("pageNumber").max=j;PDFView.documentFingerprint=f;var h=PDFView.store=new Settings(f),f=h.initializedPromise;this.pageRotation=0;var g=this.pages=[];this.pageText=[];this.startedTextExtraction=!1;for(var m={},k=this.thumbnails=[],l=[],n=1;n<=j;n++)l.push(a.getPage(n));var p=this,l=PDFJS.Promise.all(l);l.then(function(a){for(var f=1;f<=j;f++){var h=a[f-1],l=new PageView(e,h,f,b,h.stats,p.navigateTo.bind(p)),n=new ThumbnailView(d,h,f);c(l,n);g.push(l);k.push(n);
-h=h.ref;m[h.num+" "+h.gen+" R"]=f}p.pagesRefMap=m});n=a.getDestinations();n.then(function(a){p.destinations=a});PDFJS.Promise.all([l,n,f]).then(function(){a.getOutline().then(function(a){p.outline=new DocumentOutlineView(a)});var c=null;if(h.get("exists",!1))var c=h.get("page","1"),d=h.get("zoom",PDFView.currentScale),e=h.get("scrollLeft","0"),f=h.get("scrollTop","0"),c="page="+c+"&zoom="+d+","+e+","+f;p.setInitialView(c,b)});a.getMetadata().then(function(b){var c=b.info;b=b.metadata;p.documentInfo=
-c;p.metadata=b;console.log("PDF "+a.fingerprint+" ["+c.PDFFormatVersion+" "+(c.Producer||"-")+" / "+(c.Creator||"-")+"]"+(PDFJS.version?" (PDF.js: "+PDFJS.version+")":""));var d;b&&b.has("dc:title")&&(d=b.get("dc:title"));!d&&(c&&c.Title)&&(d=c.Title);d&&p.setTitle(d+" - "+document.title)})},setInitialView:function(a,b){this.currentScale=0;this.currentScaleValue=null;this.initialBookmark?(this.setHash(this.initialBookmark),this.initialBookmark=null):a?this.setHash(a):b&&(this.parseScale(b,!0),this.page=
-1);PDFView.currentScale===UNKNOWN_SCALE&&this.parseScale(DEFAULT_SCALE,!0)},renderHighestPriority:function(){var a=this.getVisiblePages();(a=this.getHighestPriority(a,this.pages,this.pageViewScroll.down))?this.renderView(a,"page"):this.sidebarOpen&&(a=this.getVisibleThumbs(),(a=this.getHighestPriority(a,this.thumbnails,this.thumbnailViewScroll.down))&&this.renderView(a,"thumbnail"))},getHighestPriority:function(a,b,c){var d=a.views,e=d.length;if(0===e)return!1;for(var j=0;j<e;++j){var f=d[j].view;
-if(!this.isViewFinished(f))return f}a=c?a.last.id:a.first.id-2;return b[a]&&!this.isViewFinished(b[a])?b[a]:!1},isViewFinished:function(a){return a.renderingState===RenderingStates.FINISHED},renderView:function(a,b){switch(a.renderingState){case RenderingStates.FINISHED:return!1;case RenderingStates.PAUSED:PDFView.highestPriorityPage=b+a.id;a.resume();break;case RenderingStates.RUNNING:PDFView.highestPriorityPage=b+a.id;break;case RenderingStates.INITIAL:PDFView.highestPriorityPage=b+a.id,a.draw(this.renderHighestPriority.bind(this))}return!0},
+"\n"+mozL10n.get("error_line",{line:b.lineNumber},"Line: {{line}}"))));document.getElementById("loadingBox").setAttribute("hidden","true");var d=document.getElementById("errorWrapper");d.removeAttribute("hidden");document.getElementById("errorMessage").textContent=a;document.getElementById("errorClose").onclick=function(){d.setAttribute("hidden","true")};var f=document.getElementById("errorMoreInfo"),h=document.getElementById("errorShowMore"),e=document.getElementById("errorShowLess");h.onclick=function(){f.removeAttribute("hidden");
+h.setAttribute("hidden","true");e.removeAttribute("hidden")};e.onclick=function(){f.setAttribute("hidden","true");h.removeAttribute("hidden");e.setAttribute("hidden","true")};h.removeAttribute("hidden");e.setAttribute("hidden","true");f.value=c;f.rows=c.split("\n").length-1},progress:function(a){a=Math.round(100*a);PDFView.loadingBar.percent=a},load:function(a,b){function c(a,b){a.onAfterDraw=function(){b.setImage(a.canvas)}}this.pdfDocument=a;document.getElementById("errorWrapper").setAttribute("hidden",
+"true");document.getElementById("loadingBox").setAttribute("hidden","true");document.getElementById("loading").textContent="";var d=document.getElementById("thumbnailView");for(d.parentNode.scrollTop=0;d.hasChildNodes();)d.removeChild(d.lastChild);"_loadingInterval"in d&&clearInterval(d._loadingInterval);for(var f=document.getElementById("viewer");f.hasChildNodes();)f.removeChild(f.lastChild);var h=a.numPages,e=a.fingerprint;document.getElementById("numPages").textContent=mozL10n.get("page_of",{pageCount:h},
+"of {{pageCount}}");document.getElementById("pageNumber").max=h;PDFView.documentFingerprint=e;var g=PDFView.store=new Settings(e),e=g.initializedPromise;this.pageRotation=0;var k=this.pages=[];this.pageText=[];this.startedTextExtraction=!1;for(var n={},l=this.thumbnails=[],m=[],s=1;s<=h;s++)m.push(a.getPage(s));var r=this,m=PDFJS.Promise.all(m);m.then(function(a){for(var p=1;p<=h;p++){var e=a[p-1],g=new PageView(f,e,p,b,e.stats,r.navigateTo.bind(r)),m=new ThumbnailView(d,e,p);c(g,m);k.push(g);l.push(m);
+e=e.ref;n[e.num+" "+e.gen+" R"]=p}r.pagesRefMap=n});s=a.getDestinations();s.then(function(a){r.destinations=a});PDFJS.Promise.all([m,s,e]).then(function(){a.getOutline().then(function(a){r.outline=new DocumentOutlineView(a)});var c=null;if(g.get("exists",!1))var c=g.get("page","1"),d=g.get("zoom",PDFView.currentScale),f=g.get("scrollLeft","0"),e=g.get("scrollTop","0"),c="page="+c+"&zoom="+d+","+f+","+e;r.setInitialView(c,b)});a.getMetadata().then(function(b){var c=b.info;b=b.metadata;r.documentInfo=
+c;r.metadata=b;console.log("PDF "+a.fingerprint+" ["+c.PDFFormatVersion+" "+(c.Producer||"-")+" / "+(c.Creator||"-")+"]"+(PDFJS.version?" (PDF.js: "+PDFJS.version+")":""));var d;b&&b.has("dc:title")&&(d=b.get("dc:title"));!d&&c&&c.Title&&(d=c.Title);d&&r.setTitle(d+" - "+document.title)})},setInitialView:function(a,b){this.currentScale=0;this.currentScaleValue=null;this.initialBookmark?(this.setHash(this.initialBookmark),this.initialBookmark=null):a?this.setHash(a):b&&(this.parseScale(b,!0),this.page=
+1);PDFView.currentScale===UNKNOWN_SCALE&&this.parseScale(DEFAULT_SCALE,!0)},renderHighestPriority:function(){var a=this.getVisiblePages();(a=this.getHighestPriority(a,this.pages,this.pageViewScroll.down))?this.renderView(a,"page"):this.sidebarOpen&&(a=this.getVisibleThumbs(),(a=this.getHighestPriority(a,this.thumbnails,this.thumbnailViewScroll.down))&&this.renderView(a,"thumbnail"))},getHighestPriority:function(a,b,c){var d=a.views,f=d.length;if(0===f)return!1;for(var h=0;h<f;++h){var e=d[h].view;
+if(!this.isViewFinished(e))return e}a=c?a.last.id:a.first.id-2;return b[a]&&!this.isViewFinished(b[a])?b[a]:!1},isViewFinished:function(a){return a.renderingState===RenderingStates.FINISHED},renderView:function(a,b){switch(a.renderingState){case RenderingStates.FINISHED:return!1;case RenderingStates.PAUSED:PDFView.highestPriorityPage=b+a.id;a.resume();break;case RenderingStates.RUNNING:PDFView.highestPriorityPage=b+a.id;break;case RenderingStates.INITIAL:PDFView.highestPriorityPage=b+a.id,a.draw(this.renderHighestPriority.bind(this))}return!0},
 setHash:function(a){if(a)if(0<=a.indexOf("=")){var b=PDFView.parseQueryString(a);if("nameddest"in b)PDFView.navigateTo(b.nameddest);else if("page"in b)if(a=b.page|0||1,"zoom"in b){var b=b.zoom.split(","),c=b[0],d=parseFloat(c);d&&(c=d/100);this.pages[a-1].scrollIntoView([null,{name:"XYZ"},b[1]|0,b[2]|0,c])}else this.page=a}else/^\d+$/.test(a)?this.page=a:PDFView.navigateTo(unescape(a))},switchSidebarView:function(a){var b=document.getElementById("thumbnailView"),c=document.getElementById("outlineView"),
-d=document.getElementById("viewThumbnail"),e=document.getElementById("viewOutline");switch(a){case "thumbs":a=b.classList.contains("hidden");d.classList.add("toggled");e.classList.remove("toggled");b.classList.remove("hidden");c.classList.add("hidden");PDFView.renderHighestPriority();a&&scrollIntoView(document.getElementById("thumbnailContainer"+this.page));break;case "outline":d.classList.remove("toggled"),e.classList.add("toggled"),b.classList.add("hidden"),c.classList.remove("hidden"),e.getAttribute("disabled")}},
-getVisiblePages:function(){return this.getVisibleElements(this.container,this.pages,!0)},getVisibleThumbs:function(){return this.getVisibleElements(this.thumbnailContainer,this.thumbnails)},getVisibleElements:function(a,b,c){for(var d=0,e,j=a.scrollTop,f=1,h=b.length;f<=h;++f){e=b[f-1];d=e.el.offsetTop;if(d+e.el.clientHeight>j)break;d+=e.el.clientHeight}var g=[];if(this.isFullscreen)return c=this.pages[this.page-1],g.push({id:c.id,view:c}),{first:c,last:c,views:g};a=j+a.clientHeight;for(var m,k,l;f<=
-h&&d<a;++f)e=b[f-1],l=e.el.clientHeight,d=e.el.offsetTop,m=d+l,k=Math.max(0,j-d)+Math.max(0,m-a),k=Math.floor(100*(l-k)/l),g.push({id:e.id,y:d,view:e,percent:k}),d=m;b=g[0];d=g[g.length-1];c&&g.sort(function(a,b){var c=a.percent-b.percent;return 0.0010<Math.abs(c)?-c:a.id-b.id});return{first:b,last:d,views:g}},parseQueryString:function(a){a=a.split("&");for(var b={},c=0;c<a.length;++c){var d=a[c].split("="),e=1<d.length?d[1]:null;b[unescape(d[0])]=unescape(e)}return b},beforePrint:function(){if(this.supportsPrinting){document.querySelector("body").setAttribute("data-mozPrintCallback",
+d=document.getElementById("viewThumbnail"),f=document.getElementById("viewOutline");switch(a){case "thumbs":a=b.classList.contains("hidden");d.classList.add("toggled");f.classList.remove("toggled");b.classList.remove("hidden");c.classList.add("hidden");PDFView.renderHighestPriority();a&&scrollIntoView(document.getElementById("thumbnailContainer"+this.page));break;case "outline":d.classList.remove("toggled"),f.classList.add("toggled"),b.classList.add("hidden"),c.classList.remove("hidden"),f.getAttribute("disabled")}},
+getVisiblePages:function(){return this.getVisibleElements(this.container,this.pages,!0)},getVisibleThumbs:function(){return this.getVisibleElements(this.thumbnailContainer,this.thumbnails)},getVisibleElements:function(a,b,c){for(var d=0,f,h=a.scrollTop,e=1,g=b.length;e<=g;++e){f=b[e-1];d=f.el.offsetTop;if(d+f.el.clientHeight>h)break;d+=f.el.clientHeight}var k=[];if(this.isFullscreen)return c=this.pages[this.page-1],k.push({id:c.id,view:c}),{first:c,last:c,views:k};a=h+a.clientHeight;for(var n,l,m;e<=
+g&&d<a;++e)f=b[e-1],m=f.el.clientHeight,d=f.el.offsetTop,n=d+m,l=Math.max(0,h-d)+Math.max(0,n-a),l=Math.floor(100*(m-l)/m),k.push({id:f.id,y:d,view:f,percent:l}),d=n;b=k[0];d=k[k.length-1];c&&k.sort(function(a,b){var c=a.percent-b.percent;return 0.0010<Math.abs(c)?-c:a.id-b.id});return{first:b,last:d,views:k}},parseQueryString:function(a){a=a.split("&");for(var b={},c=0;c<a.length;++c){var d=a[c].split("="),f=1<d.length?d[1]:null;b[unescape(d[0])]=unescape(f)}return b},beforePrint:function(){if(this.supportsPrinting){document.querySelector("body").setAttribute("data-mozPrintCallback",
 !0);for(var a=0,b=this.pages.length;a<b;++a)this.pages[a].beforePrint()}else a=mozL10n.get("printing_not_supported",null,"Warning: Printing is not fully supported by this browser."),this.error(a)},afterPrint:function(){for(var a=document.getElementById("printContainer");a.hasChildNodes();)a.removeChild(a.lastChild)},fullscreen:function(){if(document.fullscreenElement||document.mozFullScreen||document.webkitIsFullScreen)return!1;var a=document.getElementById("viewerContainer");if(document.documentElement.requestFullscreen)a.requestFullscreen();
 else if(document.documentElement.mozRequestFullScreen)a.mozRequestFullScreen();else if(document.documentElement.webkitRequestFullScreen)a.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);else return!1;this.isFullscreen=!0;var b=this.pages[this.page-1];this.previousScale=this.currentScaleValue;this.parseScale("page-fit",!0);setTimeout(function(){b.scrollIntoView()},0);this.showPresentationControls();return!0},exitFullscreen:function(){this.isFullscreen=!1;this.parseScale(this.previousScale);this.page=
 this.page;this.clearMouseScrollState();this.hidePresentationControls()},showPresentationControls:function(){var a=document.getElementById("viewerContainer");this.presentationControlsTimeout?clearTimeout(this.presentationControlsTimeout):a.classList.add("presentationControls");this.presentationControlsTimeout=setTimeout(function(){a.classList.remove("presentationControls");delete PDFView.presentationControlsTimeout},3E3)},hidePresentationControls:function(){this.presentationControlsTimeout&&(clearTimeout(this.presentationControlsTimeout),
 delete this.presentationControlsTimeout,document.getElementById("viewerContainer").classList.remove("presentationControls"))},rotatePages:function(a){this.pageRotation=(this.pageRotation+360+a)%360;a=0;for(var b=this.pages.length;a<b;a++){var c=this.pages[a];c.update(c.scale,this.pageRotation)}a=0;for(b=this.thumbnails.length;a<b;a++)this.thumbnails[a].updateRotation(this.pageRotation);var d=this.pages[this.page-1];this.parseScale(this.currentScaleValue,!0);this.renderHighestPriority();setTimeout(function(){d.scrollIntoView()},
 0)},mouseScroll:function(a){var b=(new Date).getTime(),c=this.mouseScrollTimeStamp;b>c&&50>b-c||((0<this.mouseScrollDelta&&0>a||0>this.mouseScrollDelta&&0<a)&&this.clearMouseScrollState(),this.mouseScrollDelta+=a,120<=Math.abs(this.mouseScrollDelta)&&(a=0<this.mouseScrollDelta?-1:1,this.clearMouseScrollState(),c=this.page,1==c&&-1==a||c==this.pages.length&&1==a||(this.page+=a,this.mouseScrollTimeStamp=b)))},clearMouseScrollState:function(){this.mouseScrollDelta=this.mouseScrollTimeStamp=0}},PageView=
-function(a,b,c,d){this.id=c;this.pdfPage=b;this.rotation=0;this.scale=d||1;this.viewport=this.pdfPage.getViewport(this.scale,this.pdfPage.rotate);this.renderingState=RenderingStates.INITIAL;this.textLayer=this.textContent=this.resume=null;c=document.createElement("a");c.name=""+this.id;var e=this.el=document.createElement("div");e.id="pageContainer"+this.id;e.className="page";e.style.width=Math.floor(this.viewport.width)+"px";e.style.height=Math.floor(this.viewport.height)+"px";a.appendChild(c);a.appendChild(e);
-this.destroy=function(){this.update();this.pdfPage.destroy()};this.update=function(a,b){this.renderingState=RenderingStates.INITIAL;this.resume=null;"undefined"!==typeof b&&(this.rotation=b);this.scale=a||this.scale;var c=this.pdfPage.getViewport(this.scale,(this.rotation+this.pdfPage.rotate)%360);this.viewport=c;e.style.width=Math.floor(c.width)+"px";for(e.style.height=Math.floor(c.height)+"px";e.hasChildNodes();)e.removeChild(e.lastChild);e.removeAttribute("data-loaded");delete this.canvas;this.loadingIconDiv=
-document.createElement("div");this.loadingIconDiv.className="loadingIcon";e.appendChild(this.loadingIconDiv)};Object.defineProperty(this,"width",{get:function(){return this.viewport.width},enumerable:!0});Object.defineProperty(this,"height",{get:function(){return this.viewport.height},enumerable:!0});this.getPagePoint=function(a,b){return this.viewport.convertToPdfPoint(a,b)};this.scrollIntoView=function(a){if(a){var b=0,c=0,d=0,m=0,k;k=0;switch(a[1].name){case "XYZ":b=a[2];c=a[3];k=a[4];break;case "Fit":case "FitB":k=
-"page-fit";break;case "FitH":case "FitBH":c=a[2];k="page-width";break;case "FitV":case "FitBV":b=a[2];k="page-height";break;case "FitR":b=a[2];c=a[3];d=a[4]-b;m=a[5]-c;a=(this.container.clientWidth-SCROLLBAR_PADDING)/d/CSS_UNITS;k=(this.container.clientHeight-SCROLLBAR_PADDING)/m/CSS_UNITS;k=Math.min(a,k);break;default:return}k&&k!==PDFView.currentScale?PDFView.parseScale(k,!0,!0):PDFView.currentScale===UNKNOWN_SCALE&&PDFView.parseScale(DEFAULT_SCALE,!0,!0);var l=[this.viewport.convertToViewportPoint(b,
-c),this.viewport.convertToViewportPoint(b+d,c+m)];setTimeout(function(){var a=Math.min(l[0][0],l[1][0]),b=Math.min(l[0][1],l[1][1]),c=Math.abs(l[0][0]-l[1][0]),d=Math.abs(l[0][1]-l[1][1]);scrollIntoView(e,{left:a,top:b,width:c,height:d})},0)}else scrollIntoView(e)};this.getTextContent=function(){this.textContent||(this.textContent=this.pdfPage.getTextContent());return this.textContent};this.draw=function(a){function c(d){n.renderingState=RenderingStates.FINISHED;n.loadingIconDiv&&(e.removeChild(n.loadingIconDiv),
-delete n.loadingIconDiv);d&&PDFView.error(mozL10n.get("rendering_error",null,"An error occurred while rendering the page."),d);n.stats=b.stats;n.updateStats();if(n.onAfterDraw)n.onAfterDraw();cache.push(n);a()}this.renderingState!==RenderingStates.INITIAL&&error("Must be in new state before drawing");this.renderingState=RenderingStates.RUNNING;var d=document.createElement("canvas");d.id="page"+this.id;d.mozOpaque=!0;e.appendChild(d);this.canvas=d;var g=null;PDFJS.disableTextLayer||(g=document.createElement("div"),
-g.className="textLayer",e.appendChild(g));var m=this.textLayer=g?new TextLayerBuilder(g,this.id-1):null,k=this.viewport,l=PDFView.getOutputScale();d.width=Math.floor(k.width)*l.sx;d.height=Math.floor(k.height)*l.sy;l.scaled&&(k="scale("+1/l.sx+", "+1/l.sy+")",CustomStyle.setProp("transform",d,k),CustomStyle.setProp("transformOrigin",d,"0% 0%"),g&&(CustomStyle.setProp("transform",g,k),CustomStyle.setProp("transformOrigin",g,"0% 0%")));g=d.getContext("2d");g.save();g.fillStyle="rgb(255, 255, 255)";
-g.fillRect(0,0,d.width,d.height);g.restore();l.scaled&&g.scale(l.sx,l.sy);var n=this;this.pdfPage.render({canvasContext:g,viewport:this.viewport,textLayer:m,continueCallback:function(a){PDFView.highestPriorityPage!=="page"+n.id?(n.renderingState=RenderingStates.PAUSED,n.resume=function(){n.renderingState=RenderingStates.RUNNING;a()}):a()}}).then(function(){c(null)},function(a){c(a)});m&&this.getTextContent().then(function(a){m.setTextContent(a)});var p=this.viewport,q=function(a,b){a.href=PDFView.getDestinationHash(b);
-a.onclick=function(){b&&PDFView.navigateTo(b);return!1}},r=function(a,b,c){c||(c=p.convertToViewportRectangle(b.rect),c=PDFJS.Util.normalizeRect(c));a=document.createElement(a);a.style.left=Math.floor(c[0])+"px";a.style.top=Math.floor(c[1])+"px";a.style.width=Math.ceil(c[2]-c[0])+"px";a.style.height=Math.ceil(c[3]-c[1])+"px";return a},s=function(a){var b=document.createElement("section");b.className="annotText";var c=p.convertToViewportRectangle(a.rect),c=PDFJS.Util.normalizeRect(c);c[3]-c[1]<ANNOT_MIN_SIZE&&
-(c[3]=c[1]+ANNOT_MIN_SIZE);c[2]-c[0]<ANNOT_MIN_SIZE&&(c[2]=c[0]+(c[3]-c[1]));var d=r("img",a,c),e=a.name;d.src=IMAGE_DIR+"annotation-"+e.toLowerCase()+".svg";d.alt=mozL10n.get("text_annotation_type",{type:e},"[{{type}} Annotation]");var f=document.createElement("div");f.setAttribute("hidden",!0);var e=document.createElement("h1"),j=document.createElement("p");f.style.left=Math.floor(c[2])+"px";f.style.top=Math.floor(c[1])+"px";e.textContent=a.title;if(!a.content&&!a.title)f.setAttribute("hidden",
-!0);else{c=document.createElement("span");a=a.content.split(/(?:\r\n?|\n)/);for(var h=0,g=a.length;h<g;++h)c.appendChild(document.createTextNode(a[h])),h<g-1&&c.appendChild(document.createElement("br"));j.appendChild(c);d.addEventListener("mouseover",function(){f.removeAttribute("hidden")},!1);d.addEventListener("mouseout",function(){f.setAttribute("hidden",!0)},!1)}f.appendChild(e);f.appendChild(j);b.appendChild(d);b.appendChild(f);return b};this.pdfPage.getAnnotations().then(function(a){for(var b=
-0;b<a.length;b++){var c=a[b];switch(c.type){case "Link":var d=r("a",c);d.href=c.url||"";c.url||q(d,"dest"in c?c.dest:null);e.appendChild(d);break;case "Text":(c=s(c))&&e.appendChild(c);break;case "Widget":PDFView.fallback()}}});e.setAttribute("data-loaded",!0)};this.beforePrint=function(){var a=this.pdfPage,b=a.getViewport(1),c=this.canvas=document.createElement("canvas");c.width=2*Math.floor(b.width);c.height=2*Math.floor(b.height);c.style.width=2*b.width+"pt";c.style.height=2*b.height+"pt";CustomStyle.setProp("transform",
-c,"scale(0.5, 0.5)");CustomStyle.setProp("transformOrigin",c,"0% 0%");document.getElementById("printContainer").appendChild(c);var d=this;c.mozPrintCallback=function(e){var k=e.context;k.save();k.fillStyle="rgb(255, 255, 255)";k.fillRect(0,0,c.width,c.height);k.restore();k.scale(2,2);a.render({canvasContext:k,viewport:b}).then(function(){e.done();d.pdfPage.destroy()},function(a){console.error(a);"abort"in object?e.abort():e.done();d.pdfPage.destroy()})}};this.updateStats=function(){PDFJS.pdfBug&&
-Stats.enabled&&Stats.add(this.id,this.stats)}},ThumbnailView=function(a,b,c){function d(){var a=document.createElement("canvas");a.id="thumbnail"+c;a.mozOpaque=!0;a.width=k;a.height=l;a.className="thumbnailImage";a.setAttribute("aria-label",mozL10n.get("thumb_page_canvas",{page:c},"Thumbnail of Page {{page}}"));p.setAttribute("data-loaded",!0);q.appendChild(a);a=a.getContext("2d");a.save();a.fillStyle="rgb(255, 255, 255)";a.fillRect(0,0,k,l);a.restore();return a}var e=document.createElement("a");
-e.href=PDFView.getAnchorUrl("#page="+c);e.title=mozL10n.get("thumb_page_title",{page:c},"Page {{page}}");e.onclick=function(){PDFView.page=c;return!1};var j=0,f=(j+b.rotate)%360,h=b.getViewport(1,f),g=this.width=h.width,m=this.height=h.height;this.id=c;var k=98,l=k/this.width*this.height,n=this.scaleX=k/g;this.scaleY=l/m;var p=this.el=document.createElement("div");p.id="thumbnailContainer"+c;p.className="thumbnail";1===c&&p.classList.add("selected");var q=document.createElement("div");q.className=
-"thumbnailSelectionRing";q.style.width=k+"px";q.style.height=l+"px";p.appendChild(q);e.appendChild(p);a.appendChild(e);this.hasImage=!1;this.renderingState=RenderingStates.INITIAL;this.updateRotation=function(a){j=a;f=(j+b.rotate)%360;h=b.getViewport(1,f);g=this.width=h.width;m=this.height=h.height;l=k/this.width*this.height;n=this.scaleX=k/g;this.scaleY=l/m;p.removeAttribute("data-loaded");q.textContent="";q.style.width=k+"px";q.style.height=l+"px";this.hasImage=!1;this.renderingState=RenderingStates.INITIAL;
-this.resume=null};this.drawingRequired=function(){return!this.hasImage};this.draw=function(a){this.renderingState!==RenderingStates.INITIAL&&error("Must be in new state before drawing");this.renderingState=RenderingStates.RUNNING;if(this.hasImage)a();else{var c=this,e=d(),j=b.getViewport(n,f);b.render({canvasContext:e,viewport:j,continueCallback:function(a){PDFView.highestPriorityPage!=="thumbnail"+c.id?(c.renderingState=RenderingStates.PAUSED,c.resume=function(){c.renderingState=RenderingStates.RUNNING;
-a()}):a()}}).then(function(){c.renderingState=RenderingStates.FINISHED;a()},function(){c.renderingState=RenderingStates.FINISHED;a()});this.hasImage=!0}};this.setImage=function(a){if(!this.hasImage&&a){this.renderingState=RenderingStates.FINISHED;var b=d();b.drawImage(a,0,0,a.width,a.height,0,0,b.canvas.width,b.canvas.height);this.hasImage=!0}}},DocumentOutlineView=function(a){function b(a,b){a.href=PDFView.getDestinationHash(b.dest);a.onclick=function(){PDFView.navigateTo(b.dest);return!1}}for(var c=
-document.getElementById("outlineView");c.firstChild;)c.removeChild(c.firstChild);if(a)for(c=[{parent:c,items:a}];0<c.length;){a=c.shift();var d,e=a.items.length;for(d=0;d<e;d++){var j=a.items[d],f=document.createElement("div");f.className="outlineItem";var h=document.createElement("a");b(h,j);h.textContent=j.title;f.appendChild(h);0<j.items.length&&(h=document.createElement("div"),h.className="outlineItems",f.appendChild(h),c.push({parent:h,items:j.items}));a.parent.appendChild(f)}}else a=document.createElement("div"),
-a.classList.add("noOutline"),a.textContent=mozL10n.get("no_outline",null,"No Outline Available"),c.appendChild(a)},CustomStyle=function(){function a(){}var b=["ms","Moz","Webkit","O"],c={};a.getProp=function(a,e){if(1==arguments.length&&"string"==typeof c[a])return c[a];e=e||document.documentElement;var j=e.style,f,h;if("string"==typeof j[a])return c[a]=a;h=a.charAt(0).toUpperCase()+a.slice(1);for(var g=0,m=b.length;g<m;g++)if(f=b[g]+h,"string"==typeof j[f])return c[a]=f;return c[a]="undefined"};
-a.setProp=function(a,b,c){a=this.getProp(a);"undefined"!=a&&(b.style[a]=c)};return a}(),TextLayerBuilder=function(a,b){var c=document.createDocumentFragment();this.textLayerDiv=a;this.divContentDone=this.layoutDone=!1;this.pageIdx=b;this.matches=[];this.beginLayout=function(){this.textDivs=[];this.textLayerQueue=[];this.renderingDone=!1};this.endLayout=function(){this.layoutDone=!0;this.insertDivContent()};this.renderLayer=function(){var a=this.textDivs,b=this.textLayerDiv,j=document.createElement("canvas").getContext("2d");
-if(!(1E5<a.length)){for(var f=0,h=a.length;f<h;f++){var g=a[f];c.appendChild(g);j.font=g.style.fontSize+" "+g.style.fontFamily;var m=j.measureText(g.textContent).width;0<m&&(CustomStyle.setProp("transform",g,"scale("+g.dataset.canvasWidth/m+", 1)"),CustomStyle.setProp("transformOrigin",g,"0% 0%"),b.appendChild(g))}this.renderingDone=!0;this.updateMatches();b.appendChild(c)}};this.setupRenderLayoutTimer=function(){var a=this;200<Date.now()-PDFView.lastScroll?this.renderLayer():(this.renderTimer&&clearTimeout(this.renderTimer),
-this.renderTimer=setTimeout(function(){a.setupRenderLayoutTimer()},200))};this.appendText=function(a){var b=document.createElement("div"),c=a.fontSize*a.vScale;b.dataset.canvasWidth=a.canvasWidth*a.hScale;b.dataset.fontName=a.fontName;b.style.fontSize=c+"px";b.style.fontFamily=a.fontFamily;b.style.left=a.x+"px";b.style.top=a.y-c+"px";this.textDivs.push(b)};this.insertDivContent=function(){if(this.layoutDone&&!this.divContentDone&&this.textContent){this.divContentDone=!0;for(var a=this.textDivs,b=
-this.textContent.bidiTexts,c=0;c<b.length;c++){var f=b[c],h=a[c];h.textContent=f.str;h.dir=f.ltr?"ltr":"rtl"}this.setupRenderLayoutTimer()}};this.setTextContent=function(a){this.textContent=a;this.insertDivContent()};this.convertMatches=function(a){for(var b=0,c=0,f=this.textContent.bidiTexts,h=f.length-1,g=PDFFindController.state.query.length,m=[],k=0;k<a.length;k++){for(var l=a[k];b!==h&&l>=c+f[b].str.length;)c+=f[b].str.length,b++;b==f.length&&console.error("Could not find matching mapping");for(var n=
-{begin:{divIdx:b,offset:l-c}},l=l+g;b!==h&&l>c+f[b].str.length;)c+=f[b].str.length,b++;n.end={divIdx:b,offset:l-c};m.push(n)}return m};this.renderMatches=function(a){function b(a,c){var d=a.divIdx,e=h[d];e.textContent="";var g=f[d].str.substring(0,a.offset),g=document.createTextNode(g);if(c){var d=m&&d===k,j=document.createElement("span");j.className=c+(d?" selected":"");j.appendChild(g);e.appendChild(j)}else e.appendChild(g)}function c(a,b,d){var e=a.divIdx,g=h[e];a=f[e].str.substring(a.offset,b.offset);
-a=document.createTextNode(a);d?(b=document.createElement("span"),b.className=d,b.appendChild(a),g.appendChild(b)):g.appendChild(a)}if(0!==a.length){var f=this.textContent.bidiTexts,h=this.textDivs,g=null,m=this.pageIdx===PDFFindController.selected.pageIdx,k=PDFFindController.selected.matchIdx,l={divIdx:-1,offset:void 0},n=k,p=n+1;if(PDFFindController.state.highlightAll)n=0,p=a.length;else if(!m)return;for(;n<p;n++){var q=a[n],r=q.begin,q=q.end,s=m&&n===k,t=s?" selected":"";s&&scrollIntoView(h[r.divIdx],
-{top:-50});!g||r.divIdx!==g.divIdx?(null!==g&&c(g,l),b(r)):c(g,r);if(r.divIdx===q.divIdx)c(r,q,"highlight"+t);else{c(r,l,"highlight begin"+t);for(g=r.divIdx+1;g<q.divIdx;g++)h[g].className="highlight middle"+t;b(q,"highlight end"+t)}g=q}g&&c(g,l)}};this.updateMatches=function(){if(this.renderingDone){for(var a=this.matches,b=this.textDivs,c=this.textContent.bidiTexts,f=-1,h=0;h<a.length;h++){for(var g=a[h],f=Math.max(f,g.begin.divIdx);f<=g.end.divIdx;f++){var m=b[f];m.textContent=c[f].str;m.className=
-""}f=g.end.divIdx+1}PDFFindController.active&&(this.matches=this.convertMatches(PDFFindController.pageMatches[this.pageIdx]||[]),this.renderMatches(this.matches))}}};
-document.addEventListener("DOMContentLoaded",function(){PDFView.initialize();var a=PDFView.parseQueryString(document.location.search.substring(1)).file||DEFAULT_URL;window.File&&(window.FileReader&&window.FileList&&window.Blob)&&(document.getElementById("fileInput").value=null);var b=document.location.hash.substring(1),b=PDFView.parseQueryString(b);"disableWorker"in b&&(PDFJS.disableWorker="true"===b.disableWorker);var c=navigator.language;"locale"in b&&(c=b.locale);mozL10n.setLanguage(c);if("textLayer"in
+function(a,b,c,d,f,h){function e(a,b){function c(a,b){a.href=PDFView.getDestinationHash(b);a.onclick=function(){b&&PDFView.navigateTo(b);return!1}}function d(a,c,f){f||(f=b.convertToViewportRectangle(c.rect),f=PDFJS.Util.normalizeRect(f));a=document.createElement(a);a.style.left=Math.floor(f[0])+"px";a.style.top=Math.floor(f[1])+"px";a.style.width=Math.ceil(f[2]-f[0])+"px";a.style.height=Math.ceil(f[3]-f[1])+"px";return a}function f(a){var c=document.createElement("section");c.className="annotText";
+var e=b.convertToViewportRectangle(a.rect),e=PDFJS.Util.normalizeRect(e);e[3]-e[1]<ANNOT_MIN_SIZE&&(e[3]=e[1]+ANNOT_MIN_SIZE);e[2]-e[0]<ANNOT_MIN_SIZE&&(e[2]=e[0]+(e[3]-e[1]));var h=d("img",a,e),g=a.name;h.src=IMAGE_DIR+"annotation-"+g.toLowerCase()+".svg";h.alt=mozL10n.get("text_annotation_type",{type:g},"[{{type}} Annotation]");var k=document.createElement("div");k.setAttribute("hidden",!0);var g=document.createElement("h1"),l=document.createElement("p");k.style.left=Math.floor(e[2])+"px";k.style.top=
+Math.floor(e[1])+"px";g.textContent=a.title;if(a.content||a.title){e=document.createElement("span");a=a.content.split(/(?:\r\n?|\n)/);for(var s=0,v=a.length;s<v;++s)e.appendChild(document.createTextNode(a[s])),s<v-1&&e.appendChild(document.createElement("br"));l.appendChild(e);h.addEventListener("mouseover",function(){k.removeAttribute("hidden")},!1);h.addEventListener("mouseout",function(){k.setAttribute("hidden",!0)},!1)}else k.setAttribute("hidden",!0);k.appendChild(g);k.appendChild(l);c.appendChild(h);
+c.appendChild(k);return c}a.getAnnotations().then(function(a){for(var b=0;b<a.length;b++){var e=a[b];switch(e.type){case "Link":var h=d("a",e);h.href=e.url||"";e.url||c(h,"dest"in e?e.dest:null);g.appendChild(h);break;case "Text":(e=f(e))&&g.appendChild(e);break;case "Widget":PDFView.fallback()}}})}this.id=c;this.pdfPage=b;this.rotation=0;this.scale=d||1;this.viewport=this.pdfPage.getViewport(this.scale,this.pdfPage.rotate);this.renderingState=RenderingStates.INITIAL;this.textLayer=this.textContent=
+this.resume=null;c=document.createElement("a");c.name=""+this.id;var g=this.el=document.createElement("div");g.id="pageContainer"+this.id;g.className="page";g.style.width=Math.floor(this.viewport.width)+"px";g.style.height=Math.floor(this.viewport.height)+"px";a.appendChild(c);a.appendChild(g);this.destroy=function(){this.update();this.pdfPage.destroy()};this.update=function(a,b){this.renderingState=RenderingStates.INITIAL;this.resume=null;"undefined"!==typeof b&&(this.rotation=b);this.scale=a||this.scale;
+var c=this.pdfPage.getViewport(this.scale,(this.rotation+this.pdfPage.rotate)%360);this.viewport=c;g.style.width=Math.floor(c.width)+"px";for(g.style.height=Math.floor(c.height)+"px";g.hasChildNodes();)g.removeChild(g.lastChild);g.removeAttribute("data-loaded");delete this.canvas;this.loadingIconDiv=document.createElement("div");this.loadingIconDiv.className="loadingIcon";g.appendChild(this.loadingIconDiv)};Object.defineProperty(this,"width",{get:function(){return this.viewport.width},enumerable:!0});
+Object.defineProperty(this,"height",{get:function(){return this.viewport.height},enumerable:!0});this.getPagePoint=function(a,b){return this.viewport.convertToPdfPoint(a,b)};this.scrollIntoView=function(a){if(a){var b=0,c=0,d=0,f=0,e;e=0;switch(a[1].name){case "XYZ":b=a[2];c=a[3];e=a[4];break;case "Fit":case "FitB":e="page-fit";break;case "FitH":case "FitBH":c=a[2];e="page-width";break;case "FitV":case "FitBV":b=a[2];e="page-height";break;case "FitR":b=a[2];c=a[3];d=a[4]-b;f=a[5]-c;a=(this.container.clientWidth-
+SCROLLBAR_PADDING)/d/CSS_UNITS;e=(this.container.clientHeight-SCROLLBAR_PADDING)/f/CSS_UNITS;e=Math.min(a,e);break;default:return}e&&e!==PDFView.currentScale?PDFView.parseScale(e,!0,!0):PDFView.currentScale===UNKNOWN_SCALE&&PDFView.parseScale(DEFAULT_SCALE,!0,!0);var h=[this.viewport.convertToViewportPoint(b,c),this.viewport.convertToViewportPoint(b+d,c+f)];setTimeout(function(){var a=Math.min(h[0][0],h[1][0]),b=Math.min(h[0][1],h[1][1]),c=Math.abs(h[0][0]-h[1][0]),d=Math.abs(h[0][1]-h[1][1]);scrollIntoView(g,
+{left:a,top:b,width:c,height:d})},0)}else scrollIntoView(g)};this.getTextContent=function(){this.textContent||(this.textContent=this.pdfPage.getTextContent());return this.textContent};this.draw=function(a){function c(d){p.renderingState=RenderingStates.FINISHED;p.loadingIconDiv&&(g.removeChild(p.loadingIconDiv),delete p.loadingIconDiv);d&&PDFView.error(mozL10n.get("rendering_error",null,"An error occurred while rendering the page."),d);p.stats=b.stats;p.updateStats();if(p.onAfterDraw)p.onAfterDraw();
+cache.push(p);a()}this.renderingState!==RenderingStates.INITIAL&&error("Must be in new state before drawing");this.renderingState=RenderingStates.RUNNING;var d=document.createElement("canvas");d.id="page"+this.id;d.mozOpaque=!0;g.appendChild(d);this.canvas=d;var f=null;PDFJS.disableTextLayer||(f=document.createElement("div"),f.className="textLayer",g.appendChild(f));var h=this.textLayer=f?new TextLayerBuilder(f,this.id-1):null,r=this.viewport,q=PDFView.getOutputScale();d.width=Math.floor(r.width)*
+q.sx;d.height=Math.floor(r.height)*q.sy;q.scaled&&(r="scale("+1/q.sx+", "+1/q.sy+")",CustomStyle.setProp("transform",d,r),CustomStyle.setProp("transformOrigin",d,"0% 0%"),f&&(CustomStyle.setProp("transform",f,r),CustomStyle.setProp("transformOrigin",f,"0% 0%")));f=d.getContext("2d");f.save();f.fillStyle="rgb(255, 255, 255)";f.fillRect(0,0,d.width,d.height);f.restore();q.scaled&&f.scale(q.sx,q.sy);var p=this;this.pdfPage.render({canvasContext:f,viewport:this.viewport,textLayer:h,continueCallback:function(a){PDFView.highestPriorityPage!==
+"page"+p.id?(p.renderingState=RenderingStates.PAUSED,p.resume=function(){p.renderingState=RenderingStates.RUNNING;a()}):a()}}).then(function(){c(null)},function(a){c(a)});h&&this.getTextContent().then(function(a){h.setTextContent(a)});e(this.pdfPage,this.viewport);g.setAttribute("data-loaded",!0)};this.beforePrint=function(){var a=this.pdfPage,b=a.getViewport(1),c=this.canvas=document.createElement("canvas");c.width=2*Math.floor(b.width);c.height=2*Math.floor(b.height);c.style.width=2*b.width+"pt";
+c.style.height=2*b.height+"pt";CustomStyle.setProp("transform",c,"scale(0.5, 0.5)");CustomStyle.setProp("transformOrigin",c,"0% 0%");document.getElementById("printContainer").appendChild(c);var d=this;c.mozPrintCallback=function(f){var e=f.context;e.save();e.fillStyle="rgb(255, 255, 255)";e.fillRect(0,0,c.width,c.height);e.restore();e.scale(2,2);a.render({canvasContext:e,viewport:b}).then(function(){f.done();d.pdfPage.destroy()},function(a){console.error(a);"abort"in object?f.abort():f.done();d.pdfPage.destroy()})}};
+this.updateStats=function(){PDFJS.pdfBug&&Stats.enabled&&Stats.add(this.id,this.stats)}},ThumbnailView=function(a,b,c){function d(){var a=document.createElement("canvas");a.id="thumbnail"+c;a.mozOpaque=!0;a.width=l;a.height=m;a.className="thumbnailImage";a.setAttribute("aria-label",mozL10n.get("thumb_page_canvas",{page:c},"Thumbnail of Page {{page}}"));r.setAttribute("data-loaded",!0);q.appendChild(a);a=a.getContext("2d");a.save();a.fillStyle="rgb(255, 255, 255)";a.fillRect(0,0,l,m);a.restore();return a}
+var f=document.createElement("a");f.href=PDFView.getAnchorUrl("#page="+c);f.title=mozL10n.get("thumb_page_title",{page:c},"Page {{page}}");f.onclick=function(){PDFView.page=c;return!1};var h=0,e=(h+b.rotate)%360,g=b.getViewport(1,e),k=this.width=g.width,n=this.height=g.height;this.id=c;var l=98,m=l/this.width*this.height,s=this.scaleX=l/k;this.scaleY=m/n;var r=this.el=document.createElement("div");r.id="thumbnailContainer"+c;r.className="thumbnail";1===c&&r.classList.add("selected");var q=document.createElement("div");
+q.className="thumbnailSelectionRing";q.style.width=l+"px";q.style.height=m+"px";r.appendChild(q);f.appendChild(r);a.appendChild(f);this.hasImage=!1;this.renderingState=RenderingStates.INITIAL;this.updateRotation=function(a){h=a;e=(h+b.rotate)%360;g=b.getViewport(1,e);k=this.width=g.width;n=this.height=g.height;m=l/this.width*this.height;s=this.scaleX=l/k;this.scaleY=m/n;r.removeAttribute("data-loaded");q.textContent="";q.style.width=l+"px";q.style.height=m+"px";this.hasImage=!1;this.renderingState=
+RenderingStates.INITIAL;this.resume=null};this.drawingRequired=function(){return!this.hasImage};this.draw=function(a){this.renderingState!==RenderingStates.INITIAL&&error("Must be in new state before drawing");this.renderingState=RenderingStates.RUNNING;if(this.hasImage)a();else{var c=this,f=d(),h=b.getViewport(s,e);b.render({canvasContext:f,viewport:h,continueCallback:function(a){PDFView.highestPriorityPage!=="thumbnail"+c.id?(c.renderingState=RenderingStates.PAUSED,c.resume=function(){c.renderingState=
+RenderingStates.RUNNING;a()}):a()}}).then(function(){c.renderingState=RenderingStates.FINISHED;a()},function(b){c.renderingState=RenderingStates.FINISHED;a()});this.hasImage=!0}};this.setImage=function(a){if(!this.hasImage&&a){this.renderingState=RenderingStates.FINISHED;var b=d();b.drawImage(a,0,0,a.width,a.height,0,0,b.canvas.width,b.canvas.height);this.hasImage=!0}}},DocumentOutlineView=function(a){function b(a,b){a.href=PDFView.getDestinationHash(b.dest);a.onclick=function(a){PDFView.navigateTo(b.dest);
+return!1}}for(var c=document.getElementById("outlineView");c.firstChild;)c.removeChild(c.firstChild);if(a)for(c=[{parent:c,items:a}];0<c.length;){a=c.shift();var d,f=a.items.length;for(d=0;d<f;d++){var h=a.items[d],e=document.createElement("div");e.className="outlineItem";var g=document.createElement("a");b(g,h);g.textContent=h.title;e.appendChild(g);0<h.items.length&&(g=document.createElement("div"),g.className="outlineItems",e.appendChild(g),c.push({parent:g,items:h.items}));a.parent.appendChild(e)}}else a=
+document.createElement("div"),a.classList.add("noOutline"),a.textContent=mozL10n.get("no_outline",null,"No Outline Available"),c.appendChild(a)},CustomStyle=function(){function a(){}var b=["ms","Moz","Webkit","O"],c={};a.getProp=function(a,f){if(1==arguments.length&&"string"==typeof c[a])return c[a];f=f||document.documentElement;var h=f.style,e,g;if("string"==typeof h[a])return c[a]=a;g=a.charAt(0).toUpperCase()+a.slice(1);for(var k=0,n=b.length;k<n;k++)if(e=b[k]+g,"string"==typeof h[e])return c[a]=
+e;return c[a]="undefined"};a.setProp=function(a,b,c){a=this.getProp(a);"undefined"!=a&&(b.style[a]=c)};return a}(),TextLayerBuilder=function(a,b){var c=document.createDocumentFragment();this.textLayerDiv=a;this.divContentDone=this.layoutDone=!1;this.pageIdx=b;this.matches=[];this.beginLayout=function(){this.textDivs=[];this.textLayerQueue=[];this.renderingDone=!1};this.endLayout=function(){this.layoutDone=!0;this.insertDivContent()};this.renderLayer=function(){var a=this.textDivs,b=this.textLayerDiv,
+h=document.createElement("canvas").getContext("2d");if(!(1E5<a.length)){for(var e=0,g=a.length;e<g;e++){var k=a[e];c.appendChild(k);h.font=k.style.fontSize+" "+k.style.fontFamily;var n=h.measureText(k.textContent).width;0<n&&(CustomStyle.setProp("transform",k,"scale("+k.dataset.canvasWidth/n+", 1)"),CustomStyle.setProp("transformOrigin",k,"0% 0%"),b.appendChild(k))}this.renderingDone=!0;this.updateMatches();b.appendChild(c)}};this.setupRenderLayoutTimer=function(){var a=this;200<Date.now()-PDFView.lastScroll?
+this.renderLayer():(this.renderTimer&&clearTimeout(this.renderTimer),this.renderTimer=setTimeout(function(){a.setupRenderLayoutTimer()},200))};this.appendText=function(a){var b=document.createElement("div"),c=a.fontSize*a.vScale;b.dataset.canvasWidth=a.canvasWidth*a.hScale;b.dataset.fontName=a.fontName;b.style.fontSize=c+"px";b.style.fontFamily=a.fontFamily;b.style.left=a.x+"px";b.style.top=a.y-c+"px";this.textDivs.push(b)};this.insertDivContent=function(){if(this.layoutDone&&!this.divContentDone&&
+this.textContent){this.divContentDone=!0;for(var a=this.textDivs,b=this.textContent.bidiTexts,c=0;c<b.length;c++){var e=b[c],g=a[c];g.textContent=e.str;g.dir=e.ltr?"ltr":"rtl"}this.setupRenderLayoutTimer()}};this.setTextContent=function(a){this.textContent=a;this.insertDivContent()};this.convertMatches=function(a){for(var b=0,c=0,e=this.textContent.bidiTexts,g=e.length-1,k=PDFFindController.state.query.length,n=[],l=0;l<a.length;l++){for(var m=a[l];b!==g&&m>=c+e[b].str.length;)c+=e[b].str.length,
+b++;b==e.length&&console.error("Could not find matching mapping");for(var s={begin:{divIdx:b,offset:m-c}},m=m+k;b!==g&&m>c+e[b].str.length;)c+=e[b].str.length,b++;s.end={divIdx:b,offset:m-c};n.push(s)}return n};this.renderMatches=function(a){function b(a,c){var d=a.divIdx,f=g[d];f.textContent="";var h=e[d].str.substring(0,a.offset),h=document.createTextNode(h);if(c){var d=n&&d===l,k=document.createElement("span");k.className=c+(d?" selected":"");k.appendChild(h);f.appendChild(k)}else f.appendChild(h)}
+function c(a,b,d){var f=a.divIdx,h=g[f];a=e[f].str.substring(a.offset,b.offset);a=document.createTextNode(a);d?(b=document.createElement("span"),b.className=d,b.appendChild(a),h.appendChild(b)):h.appendChild(a)}if(0!==a.length){var e=this.textContent.bidiTexts,g=this.textDivs,k=null,n=this.pageIdx===PDFFindController.selected.pageIdx,l=PDFFindController.selected.matchIdx,m={divIdx:-1,offset:void 0},s=l,r=s+1;if(PDFFindController.state.highlightAll)s=0,r=a.length;else if(!n)return;for(;s<r;s++){var q=
+a[s],p=q.begin,q=q.end,u=n&&s===l,t=u?" selected":"";u&&scrollIntoView(g[p.divIdx],{top:-50});k&&p.divIdx===k.divIdx?c(k,p):(null!==k&&c(k,m),b(p));if(p.divIdx===q.divIdx)c(p,q,"highlight"+t);else{c(p,m,"highlight begin"+t);for(k=p.divIdx+1;k<q.divIdx;k++)g[k].className="highlight middle"+t;b(q,"highlight end"+t)}k=q}k&&c(k,m)}};this.updateMatches=function(){if(this.renderingDone){for(var a=this.matches,b=this.textDivs,c=this.textContent.bidiTexts,e=-1,g=0;g<a.length;g++){for(var k=a[g],e=Math.max(e,
+k.begin.divIdx);e<=k.end.divIdx;e++){var n=b[e];n.textContent=c[e].str;n.className=""}e=k.end.divIdx+1}PDFFindController.active&&(this.matches=this.convertMatches(PDFFindController.pageMatches[this.pageIdx]||[]),this.renderMatches(this.matches))}}};
+document.addEventListener("DOMContentLoaded",function(a){PDFView.initialize();a=PDFView.parseQueryString(document.location.search.substring(1)).file||DEFAULT_URL;window.File&&window.FileReader&&window.FileList&&window.Blob&&(document.getElementById("fileInput").value=null);var b=document.location.hash.substring(1),b=PDFView.parseQueryString(b);"disableWorker"in b&&(PDFJS.disableWorker="true"===b.disableWorker);var c=navigator.language;"locale"in b&&(c=b.locale);mozL10n.setLanguage(c);if("textLayer"in
 b)switch(b.textLayer){case "off":PDFJS.disableTextLayer=!0;break;case "visible":case "shadow":case "hover":document.getElementById("viewer").classList.add("textLayer-"+b.textLayer)}"pdfBug"in b&&(PDFJS.pdfBug=!0,b=b.pdfBug.split(","),PDFBug.enable(b),PDFBug.init());PDFView.supportsPrinting||document.getElementById("print").classList.add("hidden");PDFView.supportsFullscreen||document.getElementById("fullscreen").classList.add("hidden");PDFView.supportsIntegratedFind&&document.querySelector("#viewFind").classList.add("hidden");
-PDFJS.LogManager.addLogger({warn:function(){PDFView.fallback()}});var d=document.getElementById("mainContainer"),e=document.getElementById("outerContainer");d.addEventListener("transitionend",function(a){a.target==d&&(a=document.createEvent("UIEvents"),a.initUIEvent("resize",!1,!1,window,0),window.dispatchEvent(a),e.classList.remove("sidebarMoving"))},!0);document.getElementById("sidebarToggle").addEventListener("click",function(){this.classList.toggle("toggled");e.classList.add("sidebarMoving");
-e.classList.toggle("sidebarOpen");PDFView.sidebarOpen=e.classList.contains("sidebarOpen");PDFView.renderHighestPriority()});document.getElementById("viewThumbnail").addEventListener("click",function(){PDFView.switchSidebarView("thumbs")});document.getElementById("viewOutline").addEventListener("click",function(){PDFView.switchSidebarView("outline")});document.getElementById("previous").addEventListener("click",function(){PDFView.page--});document.getElementById("next").addEventListener("click",function(){PDFView.page++});
+PDFJS.LogManager.addLogger({warn:function(){PDFView.fallback()}});var d=document.getElementById("mainContainer"),f=document.getElementById("outerContainer");d.addEventListener("transitionend",function(a){a.target==d&&(a=document.createEvent("UIEvents"),a.initUIEvent("resize",!1,!1,window,0),window.dispatchEvent(a),f.classList.remove("sidebarMoving"))},!0);document.getElementById("sidebarToggle").addEventListener("click",function(){this.classList.toggle("toggled");f.classList.add("sidebarMoving");
+f.classList.toggle("sidebarOpen");PDFView.sidebarOpen=f.classList.contains("sidebarOpen");PDFView.renderHighestPriority()});document.getElementById("viewThumbnail").addEventListener("click",function(){PDFView.switchSidebarView("thumbs")});document.getElementById("viewOutline").addEventListener("click",function(){PDFView.switchSidebarView("outline")});document.getElementById("previous").addEventListener("click",function(){PDFView.page--});document.getElementById("next").addEventListener("click",function(){PDFView.page++});
 document.querySelector(".zoomIn").addEventListener("click",function(){PDFView.zoomIn()});document.querySelector(".zoomOut").addEventListener("click",function(){PDFView.zoomOut()});document.getElementById("fullscreen").addEventListener("click",function(){PDFView.fullscreen()});document.getElementById("print").addEventListener("click",function(){window.print()});document.getElementById("pageNumber").addEventListener("change",function(){PDFView.page=this.value});document.getElementById("scaleSelect").addEventListener("change",
 function(){PDFView.parseScale(this.value)});document.getElementById("first_page").addEventListener("click",function(){PDFView.page=1});document.getElementById("last_page").addEventListener("click",function(){PDFView.page=PDFView.pdfDocument.numPages});document.getElementById("page_rotate_ccw").addEventListener("click",function(){PDFView.rotatePages(-90)});document.getElementById("page_rotate_cw").addEventListener("click",function(){PDFView.rotatePages(90)});PDFView.open(a,0)},!0);
-function updateViewarea(){if(PDFView.initialized){var a=PDFView.getVisiblePages(),b=a.views;if(0!==b.length){PDFView.renderHighestPriority();for(var c=PDFView.page,a=a.first,d=0,e=b.length,j=!1;d<e;++d){var f=b[d];if(100>f.percent)break;if(f.id===PDFView.page){j=!0;break}}j||(c=b[0].id);PDFView.isFullscreen||(updateViewarea.inProgress=!0,PDFView.page=c,updateViewarea.inProgress=!1);var b=PDFView.currentScale,c=PDFView.currentScaleValue,h=c==b?100*b:c,g=a.id,b="#page="+g+("&zoom="+h),m=PDFView.pages[g-
-1].getPagePoint(PDFView.container.scrollLeft,PDFView.container.scrollTop-a.y),b=b+(","+Math.round(m[0])+","+Math.round(m[1])),k=PDFView.store;k.initializedPromise.then(function(){k.set("exists",!0);k.set("page",g);k.set("zoom",h);k.set("scrollLeft",Math.round(m[0]));k.set("scrollTop",Math.round(m[1]))});PDFView.getAnchorUrl(b)}}}
-window.addEventListener("resize",function(){PDFView.initialized&&(document.getElementById("pageWidthOption").selected||document.getElementById("pageFitOption").selected||document.getElementById("pageAutoOption").selected)&&PDFView.parseScale(document.getElementById("scaleSelect").value);updateViewarea()});window.addEventListener("hashchange",function(){PDFView.setHash(document.location.hash.substring(1))});
-window.addEventListener("change",function(a){var b=a.target.files;b&&0!=b.length&&(a=new FileReader,a.onload=function(a){a=new Uint8Array(a.target.result);PDFView.open(a,0)},b=b[0],a.readAsArrayBuffer(b),PDFView.setTitleUsingUrl(b.name))},!0);function selectScaleOption(a){for(var b=document.getElementById("scaleSelect").options,c=!1,d=0;d<b.length;d++){var e=b[d];e.value!=a?e.selected=!1:c=e.selected=!0}return c}
-window.addEventListener("localized",function(){document.getElementsByTagName("html")[0].dir=mozL10n.getDirection()},!0);
-window.addEventListener("scalechange",function(a){var b=document.getElementById("customScaleOption");b.selected=!1;if((a.resetAutoSettings||!document.getElementById("pageWidthOption").selected&&!document.getElementById("pageFitOption").selected&&!document.getElementById("pageAutoOption").selected)&&!selectScaleOption(""+a.scale))b.textContent=Math.round(1E4*a.scale)/100+"%",b.selected=!0;updateViewarea()},!0);
-window.addEventListener("pagechange",function(a){a=a.pageNumber;if(PDFView.previousPageNumber!==a){document.getElementById("pageNumber").value=a;var b=document.querySelector(".thumbnail.selected");b&&b.classList.remove("selected");b=document.getElementById("thumbnailContainer"+a);b.classList.add("selected");var c=PDFView.getVisibleThumbs(),d=c.views.length;if(0<d){var e=c.first.id,c=1<d?c.last.id:e;(a<=e||a>=c)&&scrollIntoView(b)}}document.getElementById("previous").disabled=1>=a;document.getElementById("next").disabled=
-a>=PDFView.pages.length},!0);window.addEventListener("DOMMouseScroll",function(a){if(a.ctrlKey){a.preventDefault();var b=a.detail;a=0<b?"zoomOut":"zoomIn";for(var c=0,b=Math.abs(b);c<b;c++)PDFView[a]()}else PDFView.isFullscreen&&PDFView.mouseScroll(-40*a.detail)},!1);window.addEventListener("mousemove",function(){PDFView.isFullscreen&&PDFView.showPresentationControls()},!1);window.addEventListener("mousedown",function(a){PDFView.isFullscreen&&0===a.button&&(a.preventDefault(),PDFView.page++)},!1);
+function updateViewarea(){if(PDFView.initialized){var a=PDFView.getVisiblePages(),b=a.views;if(0!==b.length){PDFView.renderHighestPriority();for(var c=PDFView.page,a=a.first,d=0,f=b.length,h=!1;d<f;++d){var e=b[d];if(100>e.percent)break;if(e.id===PDFView.page){h=!0;break}}h||(c=b[0].id);PDFView.isFullscreen||(updateViewarea.inProgress=!0,PDFView.page=c,updateViewarea.inProgress=!1);var b=PDFView.currentScale,c=PDFView.currentScaleValue,g=c==b?100*b:c,k=a.id,b="#page="+k+("&zoom="+g),n=PDFView.pages[k-
+1].getPagePoint(PDFView.container.scrollLeft,PDFView.container.scrollTop-a.y),b=b+(","+Math.round(n[0])+","+Math.round(n[1])),l=PDFView.store;l.initializedPromise.then(function(){l.set("exists",!0);l.set("page",k);l.set("zoom",g);l.set("scrollLeft",Math.round(n[0]));l.set("scrollTop",Math.round(n[1]))});PDFView.getAnchorUrl(b)}}}
+window.addEventListener("resize",function(a){PDFView.initialized&&(document.getElementById("pageWidthOption").selected||document.getElementById("pageFitOption").selected||document.getElementById("pageAutoOption").selected)&&PDFView.parseScale(document.getElementById("scaleSelect").value);updateViewarea()});window.addEventListener("hashchange",function(a){PDFView.setHash(document.location.hash.substring(1))});
+window.addEventListener("change",function(a){var b=a.target.files;b&&0!=b.length&&(a=new FileReader,a.onload=function(a){a=new Uint8Array(a.target.result);PDFView.open(a,0)},b=b[0],a.readAsArrayBuffer(b),PDFView.setTitleUsingUrl(b.name))},!0);function selectScaleOption(a){for(var b=document.getElementById("scaleSelect").options,c=!1,d=0;d<b.length;d++){var f=b[d];f.value!=a?f.selected=!1:c=f.selected=!0}return c}
+window.addEventListener("localized",function(a){document.getElementsByTagName("html")[0].dir=mozL10n.getDirection()},!0);
+window.addEventListener("scalechange",function(a){var b=document.getElementById("customScaleOption");b.selected=!1;!a.resetAutoSettings&&(document.getElementById("pageWidthOption").selected||document.getElementById("pageFitOption").selected||document.getElementById("pageAutoOption").selected)||selectScaleOption(""+a.scale)||(b.textContent=Math.round(1E4*a.scale)/100+"%",b.selected=!0);updateViewarea()},!0);
+window.addEventListener("pagechange",function(a){a=a.pageNumber;if(PDFView.previousPageNumber!==a){document.getElementById("pageNumber").value=a;var b=document.querySelector(".thumbnail.selected");b&&b.classList.remove("selected");b=document.getElementById("thumbnailContainer"+a);b.classList.add("selected");var c=PDFView.getVisibleThumbs(),d=c.views.length;if(0<d){var f=c.first.id,c=1<d?c.last.id:f;(a<=f||a>=c)&&scrollIntoView(b)}}document.getElementById("previous").disabled=1>=a;document.getElementById("next").disabled=
+a>=PDFView.pages.length},!0);window.addEventListener("DOMMouseScroll",function(a){if(a.ctrlKey){a.preventDefault();var b=a.detail;a=0<b?"zoomOut":"zoomIn";for(var c=0,b=Math.abs(b);c<b;c++)PDFView[a]()}else PDFView.isFullscreen&&PDFView.mouseScroll(-40*a.detail)},!1);window.addEventListener("mousemove",function(a){PDFView.isFullscreen&&PDFView.showPresentationControls()},!1);window.addEventListener("mousedown",function(a){PDFView.isFullscreen&&0===a.button&&(a.preventDefault(),PDFView.page++)},!1);
 window.addEventListener("keydown",function(a){var b=!1,c=(a.ctrlKey?1:0)|(a.altKey?2:0)|(a.shiftKey?4:0)|(a.metaKey?8:0);if(1==c||8==c)switch(a.keyCode){case 70:PDFView.supportsIntegratedFind||(PDFFindBar.toggle(),b=!0);break;case 61:case 107:case 187:case 171:PDFView.zoomIn();b=!0;break;case 173:case 109:case 189:PDFView.zoomOut();b=!0;break;case 48:case 96:PDFView.parseScale(DEFAULT_SCALE,!0),b=!0}if(1==c||8==c||5==c||12==c)switch(a.keyCode){case 71:PDFView.supportsIntegratedFind||(PDFFindBar.dispatchEvent("again",
-5==c||12==c),b=!0)}if(b)a.preventDefault();else{var d=document.activeElement;if(!d||!("INPUT"==d.tagName||"SELECT"==d.tagName)){for(var e=document.getElementById("toolbar");d;){if(d===e&&!PDFView.isFullscreen)return;d=d.parentNode}if(0==c)switch(a.keyCode){case 38:case 33:case 8:if(!PDFView.isFullscreen&&"page-fit"!==PDFView.currentScaleValue)break;case 37:if(PDFView.isHorizontalScrollbarEnabled)break;case 75:case 80:PDFView.page--;b=!0;break;case 40:case 34:case 32:if(!PDFView.isFullscreen&&"page-fit"!==
-PDFView.currentScaleValue)break;case 39:if(PDFView.isHorizontalScrollbarEnabled)break;case 74:case 78:PDFView.page++;b=!0;break;case 36:PDFView.isFullscreen&&(PDFView.page=1,b=!0);break;case 35:PDFView.isFullscreen&&(PDFView.page=PDFView.pdfDocument.numPages,b=!0);break;case 82:PDFView.rotatePages(90)}if(4==c)switch(a.keyCode){case 82:PDFView.rotatePages(-90)}b&&(a.preventDefault(),PDFView.clearMouseScrollState())}}});window.addEventListener("beforeprint",function(){PDFView.beforePrint()});
-window.addEventListener("afterprint",function(){PDFView.afterPrint()});(function(){function a(){!document.fullscreenElement&&(!document.mozFullScreen&&!document.webkitIsFullScreen)&&PDFView.exitFullscreen()}window.addEventListener("fullscreenchange",a,!1);window.addEventListener("mozfullscreenchange",a,!1);window.addEventListener("webkitfullscreenchange",a,!1)})();
+5==c||12==c),b=!0)}if(b)a.preventDefault();else{var d=document.activeElement;if(!d||"INPUT"!=d.tagName&&"SELECT"!=d.tagName){for(var f=document.getElementById("toolbar");d;){if(d===f&&!PDFView.isFullscreen)return;d=d.parentNode}if(0==c)switch(a.keyCode){case 38:case 33:case 8:if(!PDFView.isFullscreen&&"page-fit"!==PDFView.currentScaleValue)break;case 37:if(PDFView.isHorizontalScrollbarEnabled)break;case 75:case 80:PDFView.page--;b=!0;break;case 40:case 34:case 32:if(!PDFView.isFullscreen&&"page-fit"!==
+PDFView.currentScaleValue)break;case 39:if(PDFView.isHorizontalScrollbarEnabled)break;case 74:case 78:PDFView.page++;b=!0;break;case 36:PDFView.isFullscreen&&(PDFView.page=1,b=!0);break;case 35:PDFView.isFullscreen&&(PDFView.page=PDFView.pdfDocument.numPages,b=!0);break;case 82:PDFView.rotatePages(90)}if(4==c)switch(a.keyCode){case 82:PDFView.rotatePages(-90)}b&&(a.preventDefault(),PDFView.clearMouseScrollState())}}});window.addEventListener("beforeprint",function(a){PDFView.beforePrint()});
+window.addEventListener("afterprint",function(a){PDFView.afterPrint()});(function(){function a(a){document.fullscreenElement||document.mozFullScreen||document.webkitIsFullScreen||PDFView.exitFullscreen()}window.addEventListener("fullscreenchange",a,!1);window.addEventListener("mozfullscreenchange",a,!1);window.addEventListener("webkitfullscreenchange",a,!1)})();




More information about the commits mailing list