浏览代码

PDF.js version 2.5.207 - See https://github.com/mozilla/pdf.js/releases/tag/v2.5.207

pdfjsbot 5 年之前
父节点
当前提交
c17c20fb12
共有 100 个文件被更改,包括 11466 次插入11534 次删除
  1. 1 1
      bower.json
  2. 587 756
      build/pdf.js
  3. 0 0
      build/pdf.js.map
  4. 0 0
      build/pdf.min.js
  5. 194 252
      build/pdf.worker.js
  6. 0 0
      build/pdf.worker.js.map
  7. 0 0
      build/pdf.worker.min.js
  8. 763 813
      es5/build/pdf.js
  9. 0 0
      es5/build/pdf.js.map
  10. 233 172
      es5/build/pdf.worker.js
  11. 0 0
      es5/build/pdf.worker.js.map
  12. 5 9
      es5/web/pdf_viewer.css
  13. 157 172
      es5/web/pdf_viewer.js
  14. 0 0
      es5/web/pdf_viewer.js.map
  15. 107 93
      image_decoders/pdf.image_decoders.js
  16. 0 0
      image_decoders/pdf.image_decoders.js.map
  17. 0 0
      image_decoders/pdf.image_decoders.min.js
  18. 2 2
      lib/README.md
  19. 7 7
      lib/core/ccitt.js
  20. 1 1
      lib/core/cff_parser.js
  21. 5 5
      lib/core/chunked_stream.js
  22. 0 0
      lib/core/cmap.js
  23. 22 18
      lib/core/document.js
  24. 285 247
      lib/core/evaluator.js
  25. 7 7
      lib/core/font_renderer.js
  26. 163 147
      lib/core/fonts.js
  27. 4 5
      lib/core/function.js
  28. 4523 4523
      lib/core/glyphlist.js
  29. 19 44
      lib/core/image.js
  30. 123 47
      lib/core/image_utils.js
  31. 2 116
      lib/core/jpeg_stream.js
  32. 47 55
      lib/core/jpg.js
  33. 6 6
      lib/core/jpx.js
  34. 2916 2916
      lib/core/metrics.js
  35. 18 7
      lib/core/obj.js
  36. 5 0
      lib/core/operator_list.js
  37. 1 1
      lib/core/parser.js
  38. 2 2
      lib/core/pdf_manager.js
  39. 4 0
      lib/core/primitives.js
  40. 103 103
      lib/core/standard_fonts.js
  41. 6 6
      lib/core/type1_parser.js
  42. 31 24
      lib/core/worker.js
  43. 1 1
      lib/core/worker_stream.js
  44. 3 0
      lib/display/annotation_layer.js
  45. 29 137
      lib/display/api.js
  46. 11 18
      lib/display/api_compatibility.js
  47. 7 34
      lib/display/canvas.js
  48. 4 4
      lib/display/content_disposition.js
  49. 6 15
      lib/display/display_utils.js
  50. 3 1
      lib/display/fetch_stream.js
  51. 2 2
      lib/display/font_loader.js
  52. 1 1
      lib/display/network.js
  53. 10 8
      lib/display/node_stream.js
  54. 1 1
      lib/display/pattern_helper.js
  55. 61 31
      lib/display/svg.js
  56. 44 32
      lib/display/text_layer.js
  57. 3 3
      lib/display/transport_stream.js
  58. 210 48
      lib/pdf.js
  59. 12 4
      lib/pdf.worker.js
  60. 2 0
      lib/shared/compatibility.js
  61. 1 1
      lib/shared/is_node.js
  62. 6 6
      lib/shared/message_handler.js
  63. 15 9
      lib/shared/util.js
  64. 165 95
      lib/test/unit/api_spec.js
  65. 12 12
      lib/test/unit/cff_parser_spec.js
  66. 1 1
      lib/test/unit/clitests_helper.js
  67. 1 5
      lib/test/unit/display_svg_spec.js
  68. 2 2
      lib/test/unit/jasmine-boot.js
  69. 5 3
      lib/test/unit/node_stream_spec.js
  70. 3 3
      lib/test/unit/parser_spec.js
  71. 1 1
      lib/test/unit/test_utils.js
  72. 4 4
      lib/test/unit/testreporter.js
  73. 1 55
      lib/test/unit/ui_utils_spec.js
  74. 1 1
      lib/test/unit/unicode_spec.js
  75. 247 159
      lib/web/app.js
  76. 16 10
      lib/web/app_options.js
  77. 14 6
      lib/web/base_viewer.js
  78. 3 1
      lib/web/download_manager.js
  79. 1 1
      lib/web/firefox_print_service.js
  80. 16 4
      lib/web/firefoxcom.js
  81. 14 7
      lib/web/pdf_attachment_viewer.js
  82. 11 16
      lib/web/pdf_document_properties.js
  83. 3 3
      lib/web/pdf_find_bar.js
  84. 3 3
      lib/web/pdf_find_controller.js
  85. 7 5
      lib/web/pdf_history.js
  86. 7 8
      lib/web/pdf_link_service.js
  87. 1 1
      lib/web/pdf_page_view.js
  88. 6 2
      lib/web/pdf_presentation_mode.js
  89. 1 1
      lib/web/pdf_print_service.js
  90. 2 2
      lib/web/pdf_single_page_viewer.js
  91. 2 2
      lib/web/pdf_viewer.component.js
  92. 2 2
      lib/web/pdf_viewer.js
  93. 4 1
      lib/web/preferences.js
  94. 1 3
      lib/web/text_layer_builder.js
  95. 3 55
      lib/web/ui_utils.js
  96. 8 9
      lib/web/view_history.js
  97. 14 1
      lib/web/viewer_compatibility.js
  98. 1 1
      package.json
  99. 5 9
      web/pdf_viewer.css
  100. 97 127
      web/pdf_viewer.js

+ 1 - 1
bower.json

@@ -1,6 +1,6 @@
 {
   "name": "pdfjs-dist",
-  "version": "2.4.456",
+  "version": "2.5.207",
   "main": [
     "build/pdf.js",
     "build/pdf.worker.js"

文件差异内容过多而无法显示
+ 587 - 756
build/pdf.js


文件差异内容过多而无法显示
+ 0 - 0
build/pdf.js.map


文件差异内容过多而无法显示
+ 0 - 0
build/pdf.min.js


文件差异内容过多而无法显示
+ 194 - 252
build/pdf.worker.js


文件差异内容过多而无法显示
+ 0 - 0
build/pdf.worker.js.map


文件差异内容过多而无法显示
+ 0 - 0
build/pdf.worker.min.js


文件差异内容过多而无法显示
+ 763 - 813
es5/build/pdf.js


文件差异内容过多而无法显示
+ 0 - 0
es5/build/pdf.js.map


文件差异内容过多而无法显示
+ 233 - 172
es5/build/pdf.worker.js


文件差异内容过多而无法显示
+ 0 - 0
es5/build/pdf.worker.js.map


+ 5 - 9
es5/web/pdf_viewer.css

@@ -29,8 +29,7 @@
   position: absolute;
   white-space: pre;
   cursor: text;
-  -webkit-transform-origin: 0% 0%;
-          transform-origin: 0% 0%;
+  transform-origin: 0% 0%;
 }
 
 .textLayer .highlight {
@@ -182,13 +181,11 @@
 }
 
 .annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before {
-  -webkit-transform: rotate(45deg);
-          transform: rotate(45deg);
+  transform: rotate(45deg);
 }
 
 .annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after {
-  -webkit-transform: rotate(-45deg);
-          transform: rotate(-45deg);
+  transform: rotate(-45deg);
 }
 
 .annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before {
@@ -292,9 +289,8 @@
   overflow: visible;
   border: 9px solid transparent;
   background-clip: content-box;
-  -webkit-border-image: url(images/shadow.png) 9 9 repeat;
-       -o-border-image: url(images/shadow.png) 9 9 repeat;
-          border-image: url(images/shadow.png) 9 9 repeat;
+  -o-border-image: url(images/shadow.png) 9 9 repeat;
+     border-image: url(images/shadow.png) 9 9 repeat;
   background-color: rgba(255, 255, 255, 1);
 }
 

+ 157 - 172
es5/web/pdf_viewer.js

@@ -233,20 +233,20 @@ var _pdf_link_service = __w_pdfjs_require__(7);
 
 var _download_manager = __w_pdfjs_require__(9);
 
-var _genericl10n = __w_pdfjs_require__(10);
+var _genericl10n = __w_pdfjs_require__(11);
 
-var _pdf_find_controller = __w_pdfjs_require__(12);
+var _pdf_find_controller = __w_pdfjs_require__(13);
 
-var _pdf_history = __w_pdfjs_require__(14);
+var _pdf_history = __w_pdfjs_require__(15);
 
-var _pdf_page_view = __w_pdfjs_require__(15);
+var _pdf_page_view = __w_pdfjs_require__(16);
 
 var _pdf_single_page_viewer = __w_pdfjs_require__(18);
 
 var _pdf_viewer = __w_pdfjs_require__(20);
 
-var pdfjsVersion = '2.4.456';
-var pdfjsBuild = '228a591c';
+var pdfjsVersion = '2.5.207';
+var pdfjsBuild = '0974d605';
 
 /***/ }),
 /* 1 */
@@ -423,7 +423,6 @@ exports.isValidRotation = isValidRotation;
 exports.isValidScrollMode = isValidScrollMode;
 exports.isValidSpreadMode = isValidSpreadMode;
 exports.isPortraitOrientation = isPortraitOrientation;
-exports.getGlobalEventBus = getGlobalEventBus;
 exports.clamp = clamp;
 exports.getPDFFileNameFromURL = getPDFFileNameFromURL;
 exports.noContextMenuHandler = noContextMenuHandler;
@@ -454,11 +453,15 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
 
 function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
 
-function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
 
-function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
 
-function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
 
 function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
 
@@ -704,7 +707,7 @@ function binarySearchFirstItem(items, condition) {
   var minIndex = 0;
   var maxIndex = items.length - 1;
 
-  if (items.length === 0 || !condition(items[maxIndex])) {
+  if (maxIndex < 0 || !condition(items[maxIndex])) {
     return items.length;
   }
 
@@ -1044,45 +1047,14 @@ exports.animationStarted = animationStarted;
 
 function dispatchDOMEvent(eventName) {
   var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
-  var details = Object.create(null);
-
-  if (args && args.length > 0) {
-    var obj = args[0];
-
-    for (var key in obj) {
-      var value = obj[key];
-
-      if (key === "source") {
-        if (value === window || value === document) {
-          return;
-        }
-
-        continue;
-      }
-
-      details[key] = value;
-    }
-  }
-
-  var event = document.createEvent("CustomEvent");
-  event.initCustomEvent(eventName, true, true, details);
-  document.dispatchEvent(event);
+  throw new Error("Not implemented: dispatchDOMEvent");
 }
 
 var EventBus = /*#__PURE__*/function () {
-  function EventBus() {
-    var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
-        _ref3$dispatchToDOM = _ref3.dispatchToDOM,
-        dispatchToDOM = _ref3$dispatchToDOM === void 0 ? false : _ref3$dispatchToDOM;
-
+  function EventBus(options) {
     _classCallCheck(this, EventBus);
 
     this._listeners = Object.create(null);
-    this._dispatchToDOM = dispatchToDOM === true;
-
-    if (dispatchToDOM) {
-      console.error("The `eventBusDispatchToDOM` option/preference is deprecated, " + "add event listeners to the EventBus instance rather than the DOM.");
-    }
   }
 
   _createClass(EventBus, [{
@@ -1105,20 +1077,14 @@ var EventBus = /*#__PURE__*/function () {
       var eventListeners = this._listeners[eventName];
 
       if (!eventListeners || eventListeners.length === 0) {
-        if (this._dispatchToDOM) {
-          var _args5 = Array.prototype.slice.call(arguments, 1);
-
-          dispatchDOMEvent(eventName, _args5);
-        }
-
         return;
       }
 
       var args = Array.prototype.slice.call(arguments, 1);
       var externalListeners;
-      eventListeners.slice(0).forEach(function (_ref4) {
-        var listener = _ref4.listener,
-            external = _ref4.external;
+      eventListeners.slice(0).forEach(function (_ref3) {
+        var listener = _ref3.listener,
+            external = _ref3.external;
 
         if (external) {
           if (!externalListeners) {
@@ -1138,10 +1104,6 @@ var EventBus = /*#__PURE__*/function () {
         });
         externalListeners = null;
       }
-
-      if (this._dispatchToDOM) {
-        dispatchDOMEvent(eventName, args);
-      }
     }
   }, {
     key: "_on",
@@ -1181,20 +1143,6 @@ var EventBus = /*#__PURE__*/function () {
 }();
 
 exports.EventBus = EventBus;
-var globalEventBus = null;
-
-function getGlobalEventBus() {
-  var dispatchToDOM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
-  console.error("getGlobalEventBus is deprecated, use a manually created EventBus instance instead.");
-
-  if (!globalEventBus) {
-    globalEventBus = new EventBus({
-      dispatchToDOM: dispatchToDOM
-    });
-  }
-
-  return globalEventBus;
-}
 
 function clamp(v, min, max) {
   return Math.min(Math.max(v, min), max);
@@ -1202,10 +1150,10 @@ function clamp(v, min, max) {
 
 var ProgressBar = /*#__PURE__*/function () {
   function ProgressBar(id) {
-    var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
-        height = _ref5.height,
-        width = _ref5.width,
-        units = _ref5.units;
+    var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
+        height = _ref4.height,
+        width = _ref4.width,
+        units = _ref4.units;
 
     _classCallCheck(this, ProgressBar);
 
@@ -1964,7 +1912,7 @@ var PDFLinkService = /*#__PURE__*/function () {
 
     _classCallCheck(this, PDFLinkService);
 
-    this.eventBus = eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this.eventBus = eventBus;
     this.externalLinkTarget = externalLinkTarget;
     this.externalLinkRel = externalLinkRel;
     this.externalLinkEnabled = externalLinkEnabled;
@@ -2106,16 +2054,11 @@ var PDFLinkService = /*#__PURE__*/function () {
         if ("search" in params) {
           this.eventBus.dispatch("findfromurlhash", {
             source: this,
-            query: params["search"].replace(/"/g, ""),
-            phraseSearch: params["phrase"] === "true"
+            query: params.search.replace(/"/g, ""),
+            phraseSearch: params.phrase === "true"
           });
         }
 
-        if ("nameddest" in params) {
-          this.navigateTo(params.nameddest);
-          return;
-        }
-
         if ("page" in params) {
           pageNumber = params.page | 0 || 1;
         }
@@ -2168,6 +2111,10 @@ var PDFLinkService = /*#__PURE__*/function () {
             mode: params.pagemode
           });
         }
+
+        if ("nameddest" in params) {
+          this.navigateTo(params.nameddest);
+        }
       } else {
         dest = unescape(hash);
 
@@ -2428,8 +2375,6 @@ Object.defineProperty(exports, "__esModule", {
 });
 exports.DefaultTextLayerFactory = exports.TextLayerBuilder = void 0;
 
-var _ui_utils = __w_pdfjs_require__(3);
-
 var _pdfjsLib = __w_pdfjs_require__(2);
 
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
@@ -2454,7 +2399,7 @@ var TextLayerBuilder = /*#__PURE__*/function () {
     _classCallCheck(this, TextLayerBuilder);
 
     this.textLayerDiv = textLayerDiv;
-    this.eventBus = eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this.eventBus = eventBus;
     this.textContent = null;
     this.textContentItemsStr = [];
     this.textContentStream = null;
@@ -2848,6 +2793,8 @@ exports.DownloadManager = void 0;
 
 var _pdfjsLib = __w_pdfjs_require__(2);
 
+var _viewer_compatibility = __w_pdfjs_require__(10);
+
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
 function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
@@ -2855,7 +2802,7 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+
 function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
 
 ;
-var DISABLE_CREATE_OBJECT_URL = _pdfjsLib.apiCompatibilityParams.disableCreateObjectURL || false;
+var DISABLE_CREATE_OBJECT_URL = _viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL || false;
 
 function _download(blobUrl, filename) {
   var a = document.createElement("a");
@@ -2943,6 +2890,42 @@ exports.DownloadManager = DownloadManager;
 "use strict";
 
 
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.viewerCompatibilityParams = void 0;
+var compatibilityParams = Object.create(null);
+{
+  var userAgent = typeof navigator !== "undefined" && navigator.userAgent || "";
+  var platform = typeof navigator !== "undefined" && navigator.platform || "";
+  var maxTouchPoints = typeof navigator !== "undefined" && navigator.maxTouchPoints || 1;
+  var isAndroid = /Android/.test(userAgent);
+  var isIE = /Trident/.test(userAgent);
+  var isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === "MacIntel" && maxTouchPoints > 1;
+  var isIOSChrome = /CriOS/.test(userAgent);
+
+  (function checkOnBlobSupport() {
+    if (isIE || isIOSChrome) {
+      compatibilityParams.disableCreateObjectURL = true;
+    }
+  })();
+
+  (function checkCanvasSizeLimitation() {
+    if (isIOS || isAndroid) {
+      compatibilityParams.maxCanvasPixels = 5242880;
+    }
+  })();
+}
+var viewerCompatibilityParams = Object.freeze(compatibilityParams);
+exports.viewerCompatibilityParams = viewerCompatibilityParams;
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
 Object.defineProperty(exports, "__esModule", {
   value: true
 });
@@ -2950,7 +2933,7 @@ exports.GenericL10n = void 0;
 
 var _regenerator = _interopRequireDefault(__w_pdfjs_require__(4));
 
-__w_pdfjs_require__(11);
+__w_pdfjs_require__(12);
 
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
 
@@ -3106,7 +3089,7 @@ var GenericL10n = /*#__PURE__*/function () {
 exports.GenericL10n = GenericL10n;
 
 /***/ }),
-/* 11 */
+/* 12 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -3929,7 +3912,7 @@ document.webL10n = function (window, document, undefined) {
 }(window, document);
 
 /***/ }),
-/* 12 */
+/* 13 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -3940,11 +3923,11 @@ Object.defineProperty(exports, "__esModule", {
 });
 exports.PDFFindController = exports.FindState = void 0;
 
-var _ui_utils = __w_pdfjs_require__(3);
-
 var _pdfjsLib = __w_pdfjs_require__(2);
 
-var _pdf_find_utils = __w_pdfjs_require__(13);
+var _pdf_find_utils = __w_pdfjs_require__(14);
+
+var _ui_utils = __w_pdfjs_require__(3);
 
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
@@ -3996,7 +3979,7 @@ var PDFFindController = /*#__PURE__*/function () {
     _classCallCheck(this, PDFFindController);
 
     this._linkService = linkService;
-    this._eventBus = eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this._eventBus = eventBus;
 
     this._reset();
 
@@ -4664,7 +4647,7 @@ var PDFFindController = /*#__PURE__*/function () {
 exports.PDFFindController = PDFFindController;
 
 /***/ }),
-/* 13 */
+/* 14 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -4760,7 +4743,7 @@ function getCharacterType(charCode) {
 }
 
 /***/ }),
-/* 14 */
+/* 15 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -4777,11 +4760,15 @@ var _ui_utils = __w_pdfjs_require__(3);
 
 function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
 
-function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
 
-function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
 
-function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
+function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
 
 function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
 
@@ -4809,7 +4796,7 @@ var PDFHistory = /*#__PURE__*/function () {
     _classCallCheck(this, PDFHistory);
 
     this.linkService = linkService;
-    this.eventBus = eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this.eventBus = eventBus;
     this._initialized = false;
     this._fingerprint = "";
     this.reset();
@@ -4868,7 +4855,7 @@ var PDFHistory = /*#__PURE__*/function () {
       this._position = null;
 
       if (!this._isValidState(state, true) || resetHistory) {
-        var _this$_parseCurrentHa = this._parseCurrentHash(),
+        var _this$_parseCurrentHa = this._parseCurrentHash(true),
             hash = _this$_parseCurrentHa.hash,
             page = _this$_parseCurrentHa.page,
             rotation = _this$_parseCurrentHa.rotation;
@@ -5160,10 +5147,13 @@ var PDFHistory = /*#__PURE__*/function () {
   }, {
     key: "_parseCurrentHash",
     value: function _parseCurrentHash() {
+      var checkNameddest = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
       var hash = unescape(getCurrentHash()).substring(1);
-      var page = (0, _ui_utils.parseQueryString)(hash).page | 0;
+      var params = (0, _ui_utils.parseQueryString)(hash);
+      var nameddest = params.nameddest || "";
+      var page = params.page | 0;
 
-      if (!(Number.isInteger(page) && page > 0 && page <= this.linkService.pagesCount)) {
+      if (!(Number.isInteger(page) && page > 0 && page <= this.linkService.pagesCount) || checkNameddest && nameddest.length > 0) {
         page = null;
       }
 
@@ -5402,7 +5392,7 @@ function isDestArraysEqual(firstDest, secondDest) {
 }
 
 /***/ }),
-/* 15 */
+/* 16 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -5419,9 +5409,9 @@ var _ui_utils = __w_pdfjs_require__(3);
 
 var _pdfjsLib = __w_pdfjs_require__(2);
 
-var _pdf_rendering_queue = __w_pdfjs_require__(16);
+var _pdf_rendering_queue = __w_pdfjs_require__(17);
 
-var _viewer_compatibility = __w_pdfjs_require__(17);
+var _viewer_compatibility = __w_pdfjs_require__(10);
 
 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
 
@@ -5457,7 +5447,7 @@ var PDFPageView = /*#__PURE__*/function () {
     this.renderInteractiveForms = options.renderInteractiveForms || false;
     this.useOnlyCssZoom = options.useOnlyCssZoom || false;
     this.maxCanvasPixels = options.maxCanvasPixels || MAX_CANVAS_PIXELS;
-    this.eventBus = options.eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this.eventBus = options.eventBus;
     this.renderingQueue = options.renderingQueue;
     this.textLayerFactory = options.textLayerFactory;
     this.annotationLayerFactory = options.annotationLayerFactory;
@@ -6063,7 +6053,7 @@ var PDFPageView = /*#__PURE__*/function () {
 exports.PDFPageView = PDFPageView;
 
 /***/ }),
-/* 16 */
+/* 17 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -6219,29 +6209,6 @@ var PDFRenderingQueue = /*#__PURE__*/function () {
 
 exports.PDFRenderingQueue = PDFRenderingQueue;
 
-/***/ }),
-/* 17 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-var compatibilityParams = Object.create(null);
-{
-  var userAgent = typeof navigator !== "undefined" && navigator.userAgent || "";
-  var platform = typeof navigator !== "undefined" && navigator.platform || "";
-  var maxTouchPoints = typeof navigator !== "undefined" && navigator.maxTouchPoints || 1;
-  var isAndroid = /Android/.test(userAgent);
-  var isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === "MacIntel" && maxTouchPoints > 1;
-
-  (function checkCanvasSizeLimitation() {
-    if (isIOS || isAndroid) {
-      compatibilityParams.maxCanvasPixels = 5242880;
-    }
-  })();
-}
-exports.viewerCompatibilityParams = Object.freeze(compatibilityParams);
-
 /***/ }),
 /* 18 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
@@ -6266,29 +6233,35 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+
 
 function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
 
-function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
-
-function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
-
 function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }
 
 function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
 
-function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
-
 function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
 
 function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
 
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
 var PDFSinglePageViewer = /*#__PURE__*/function (_BaseViewer) {
   _inherits(PDFSinglePageViewer, _BaseViewer);
 
+  var _super = _createSuper(PDFSinglePageViewer);
+
   function PDFSinglePageViewer(options) {
     var _this;
 
     _classCallCheck(this, PDFSinglePageViewer);
 
-    _this = _possibleConstructorReturn(this, _getPrototypeOf(PDFSinglePageViewer).call(this, options));
+    _this = _super.call(this, options);
 
     _this.eventBus._on("pagesinit", function (evt) {
       _this._ensurePageViewVisible();
@@ -6395,9 +6368,9 @@ var PDFSinglePageViewer = /*#__PURE__*/function (_BaseViewer) {
     key: "_updateSpreadMode",
     value: function _updateSpreadMode() {}
   }, {
-    key: "_setDocumentViewerElement",
+    key: "_viewerElement",
     get: function get() {
-      return (0, _pdfjsLib.shadow)(this, "_setDocumentViewerElement", this._shadowViewer);
+      return (0, _pdfjsLib.shadow)(this, "_viewerElement", this._shadowViewer);
     }
   }, {
     key: "_isScrollModeHorizontal",
@@ -6425,13 +6398,13 @@ exports.BaseViewer = void 0;
 
 var _ui_utils = __w_pdfjs_require__(3);
 
-var _pdf_rendering_queue = __w_pdfjs_require__(16);
+var _pdf_rendering_queue = __w_pdfjs_require__(17);
 
 var _annotation_layer_builder = __w_pdfjs_require__(1);
 
 var _pdfjsLib = __w_pdfjs_require__(2);
 
-var _pdf_page_view = __w_pdfjs_require__(15);
+var _pdf_page_view = __w_pdfjs_require__(16);
 
 var _pdf_link_service = __w_pdfjs_require__(7);
 
@@ -6508,7 +6481,7 @@ var BaseViewer = /*#__PURE__*/function () {
     this._name = this.constructor.name;
     this.container = options.container;
     this.viewer = options.viewer || options.container.firstElementChild;
-    this.eventBus = options.eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this.eventBus = options.eventBus;
     this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService();
     this.downloadManager = options.downloadManager || null;
     this.findController = options.findController || null;
@@ -6583,6 +6556,15 @@ var BaseViewer = /*#__PURE__*/function () {
 
       return true;
     }
+  }, {
+    key: "_onePageRenderedOrForceFetch",
+    value: function _onePageRenderedOrForceFetch() {
+      if (!this.container.offsetParent || this._getVisiblePages().views.length === 0) {
+        return Promise.resolve();
+      }
+
+      return this._onePageRenderedCapability.promise;
+    }
   }, {
     key: "setDocument",
     value: function setDocument(pdfDocument) {
@@ -6651,7 +6633,7 @@ var BaseViewer = /*#__PURE__*/function () {
 
         for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) {
           var pageView = new _pdf_page_view.PDFPageView({
-            container: _this2._setDocumentViewerElement,
+            container: _this2._viewerElement,
             eventBus: _this2.eventBus,
             id: pageNum,
             scale: scale,
@@ -6684,12 +6666,12 @@ var BaseViewer = /*#__PURE__*/function () {
           _this2._updateSpreadMode();
         }
 
-        _this2._onePageRenderedCapability.promise.then(function () {
+        _this2._onePageRenderedOrForceFetch().then(function () {
           if (_this2.findController) {
             _this2.findController.setDocument(pdfDocument);
           }
 
-          if (pdfDocument.loadingParams["disableAutoFetch"] || pagesCount > 7500) {
+          if (pdfDocument.loadingParams.disableAutoFetch || pagesCount > 7500) {
             _this2._pagesCapability.resolve();
 
             return;
@@ -7511,9 +7493,9 @@ var BaseViewer = /*#__PURE__*/function () {
       return this.pdfDocument ? this._pagesCapability.promise : null;
     }
   }, {
-    key: "_setDocumentViewerElement",
+    key: "_viewerElement",
     get: function get() {
-      throw new Error("Not implemented: _setDocumentViewerElement");
+      throw new Error("Not implemented: _viewerElement");
     }
   }, {
     key: "_isScrollModeHorizontal",
@@ -7624,33 +7606,45 @@ var _pdfjsLib = __w_pdfjs_require__(2);
 
 function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
 
+function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
+
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
+
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
 function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
 
 function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
 
-function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
-
-function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
-
 function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }
 
 function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
 
-function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
-
 function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
 
 function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
 
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
 var PDFViewer = /*#__PURE__*/function (_BaseViewer) {
   _inherits(PDFViewer, _BaseViewer);
 
+  var _super = _createSuper(PDFViewer);
+
   function PDFViewer() {
     _classCallCheck(this, PDFViewer);
 
-    return _possibleConstructorReturn(this, _getPrototypeOf(PDFViewer).apply(this, arguments));
+    return _super.apply(this, arguments);
   }
 
   _createClass(PDFViewer, [{
@@ -7701,12 +7695,12 @@ var PDFViewer = /*#__PURE__*/function (_BaseViewer) {
 
       var currentId = this._currentPageNumber;
       var stillFullyVisible = false;
-      var _iteratorNormalCompletion = true;
-      var _didIteratorError = false;
-      var _iteratorError = undefined;
+
+      var _iterator = _createForOfIteratorHelper(visiblePages),
+          _step;
 
       try {
-        for (var _iterator = visiblePages[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+        for (_iterator.s(); !(_step = _iterator.n()).done;) {
           var page = _step.value;
 
           if (page.percent < 100) {
@@ -7719,18 +7713,9 @@ var PDFViewer = /*#__PURE__*/function (_BaseViewer) {
           }
         }
       } catch (err) {
-        _didIteratorError = true;
-        _iteratorError = err;
+        _iterator.e(err);
       } finally {
-        try {
-          if (!_iteratorNormalCompletion && _iterator["return"] != null) {
-            _iterator["return"]();
-          }
-        } finally {
-          if (_didIteratorError) {
-            throw _iteratorError;
-          }
-        }
+        _iterator.f();
       }
 
       if (!stillFullyVisible) {
@@ -7740,9 +7725,9 @@ var PDFViewer = /*#__PURE__*/function (_BaseViewer) {
       this._setCurrentPageNumber(currentId);
     }
   }, {
-    key: "_setDocumentViewerElement",
+    key: "_viewerElement",
     get: function get() {
-      return (0, _pdfjsLib.shadow)(this, "_setDocumentViewerElement", this.viewer);
+      return (0, _pdfjsLib.shadow)(this, "_viewerElement", this.viewer);
     }
   }]);
 

文件差异内容过多而无法显示
+ 0 - 0
es5/web/pdf_viewer.js.map


+ 107 - 93
image_decoders/pdf.image_decoders.js

@@ -159,14 +159,14 @@ Object.defineProperty(exports, "JpxImage", {
 
 var _util = __w_pdfjs_require__(1);
 
-var _jbig = __w_pdfjs_require__(3);
+var _jbig = __w_pdfjs_require__(4);
 
-var _jpg = __w_pdfjs_require__(7);
+var _jpg = __w_pdfjs_require__(8);
 
-var _jpx = __w_pdfjs_require__(8);
+var _jpx = __w_pdfjs_require__(9);
 
-const pdfjsVersion = '2.4.456';
-const pdfjsBuild = '228a591c';
+const pdfjsVersion = '2.5.207';
+const pdfjsBuild = '0974d605';
 
 /***/ }),
 /* 1 */
@@ -203,7 +203,7 @@ exports.stringToUTF8String = stringToUTF8String;
 exports.utf8StringToString = utf8StringToString;
 exports.warn = warn;
 exports.unreachable = unreachable;
-exports.IsEvalSupportedCached = exports.IsLittleEndianCached = exports.createObjectURL = exports.FormatError = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.NativeImageDecoding = exports.MissingPDFException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = exports.BaseException = void 0;
+exports.IsEvalSupportedCached = exports.IsLittleEndianCached = exports.createObjectURL = exports.FormatError = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.MissingPDFException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = exports.BaseException = void 0;
 
 __w_pdfjs_require__(2);
 
@@ -211,12 +211,6 @@ const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
 exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
 const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
 exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;
-const NativeImageDecoding = {
-  NONE: "none",
-  DECODE: "decode",
-  DISPLAY: "display"
-};
-exports.NativeImageDecoding = NativeImageDecoding;
 const PermissionFlag = {
   PRINT: 0x04,
   MODIFY_CONTENTS: 0x08,
@@ -481,7 +475,19 @@ const UNSUPPORTED_FEATURES = {
   javaScript: "javaScript",
   smask: "smask",
   shadingPattern: "shadingPattern",
-  font: "font"
+  font: "font",
+  errorTilingPattern: "errorTilingPattern",
+  errorExtGState: "errorExtGState",
+  errorXObject: "errorXObject",
+  errorFontLoadType3: "errorFontLoadType3",
+  errorFontState: "errorFontState",
+  errorFontMissing: "errorFontMissing",
+  errorFontTranslate: "errorFontTranslate",
+  errorColorSpace: "errorColorSpace",
+  errorOperatorList: "errorOperatorList",
+  errorFontToUnicode: "errorFontToUnicode",
+  errorFontLoadNative: "errorFontLoadNative",
+  errorFontGetPath: "errorFontGetPath"
 };
 exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;
 const PasswordResponses = {
@@ -694,7 +700,7 @@ function arrayByteLength(arr) {
     return arr.length;
   }
 
-  assert(arr.byteLength !== undefined);
+  assert(arr.byteLength !== undefined, "arrayByteLength - invalid argument.");
   return arr.byteLength;
 }
 
@@ -997,6 +1003,8 @@ exports.createObjectURL = createObjectURL;
 "use strict";
 
 
+var _is_node = __w_pdfjs_require__(3);
+
 ;
 
 /***/ }),
@@ -1006,6 +1014,20 @@ exports.createObjectURL = createObjectURL;
 "use strict";
 
 
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.isNodeJS = void 0;
+const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !process.versions.electron;
+exports.isNodeJS = isNodeJS;
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
 Object.defineProperty(exports, "__esModule", {
   value: true
 });
@@ -1013,11 +1035,11 @@ exports.Jbig2Image = void 0;
 
 var _util = __w_pdfjs_require__(1);
 
-var _core_utils = __w_pdfjs_require__(4);
+var _core_utils = __w_pdfjs_require__(5);
 
-var _arithmetic_decoder = __w_pdfjs_require__(5);
+var _arithmetic_decoder = __w_pdfjs_require__(6);
 
-var _ccitt = __w_pdfjs_require__(6);
+var _ccitt = __w_pdfjs_require__(7);
 
 class Jbig2Error extends _util.BaseException {
   constructor(msg) {
@@ -3208,7 +3230,7 @@ var Jbig2Image = function Jbig2ImageClosure() {
 exports.Jbig2Image = Jbig2Image;
 
 /***/ }),
-/* 4 */
+/* 5 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -3345,7 +3367,7 @@ function isWhiteSpace(ch) {
 }
 
 /***/ }),
-/* 5 */
+/* 6 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -3699,7 +3721,7 @@ class ArithmeticDecoder {
 exports.ArithmeticDecoder = ArithmeticDecoder;
 
 /***/ }),
-/* 6 */
+/* 7 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -3738,19 +3760,19 @@ const CCITTFaxDecoder = function CCITTFaxDecoder() {
 
     this.source = source;
     this.eof = false;
-    this.encoding = options["K"] || 0;
-    this.eoline = options["EndOfLine"] || false;
-    this.byteAlign = options["EncodedByteAlign"] || false;
-    this.columns = options["Columns"] || 1728;
-    this.rows = options["Rows"] || 0;
-    let eoblock = options["EndOfBlock"];
+    this.encoding = options.K || 0;
+    this.eoline = options.EndOfLine || false;
+    this.byteAlign = options.EncodedByteAlign || false;
+    this.columns = options.Columns || 1728;
+    this.rows = options.Rows || 0;
+    let eoblock = options.EndOfBlock;
 
     if (eoblock === null || eoblock === undefined) {
       eoblock = true;
     }
 
     this.eoblock = eoblock;
-    this.black = options["BlackIs1"] || false;
+    this.black = options.BlackIs1 || false;
     this.codingLine = new Uint32Array(this.columns + 1);
     this.refLine = new Uint32Array(this.columns + 2);
     this.codingLine[0] = this.columns;
@@ -4404,7 +4426,7 @@ const CCITTFaxDecoder = function CCITTFaxDecoder() {
 exports.CCITTFaxDecoder = CCITTFaxDecoder;
 
 /***/ }),
-/* 7 */
+/* 8 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -4417,7 +4439,7 @@ exports.JpegImage = void 0;
 
 var _util = __w_pdfjs_require__(1);
 
-var _core_utils = __w_pdfjs_require__(4);
+var _core_utils = __w_pdfjs_require__(5);
 
 class JpegError extends _util.BaseException {
   constructor(msg) {
@@ -4517,8 +4539,8 @@ var JpegImage = function JpegImageClosure() {
   function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, parseDNLMarker = false) {
     var mcusPerLine = frame.mcusPerLine;
     var progressive = frame.progressive;
-    var startOffset = offset,
-        bitsData = 0,
+    const startOffset = offset;
+    let bitsData = 0,
         bitsCount = 0;
 
     function readBit() {
@@ -4604,10 +4626,10 @@ var JpegImage = function JpegImageClosure() {
       return n + (-1 << length) + 1;
     }
 
-    function decodeBaseline(component, offset) {
+    function decodeBaseline(component, blockOffset) {
       var t = decodeHuffman(component.huffmanTableDC);
       var diff = t === 0 ? 0 : receiveAndExtend(t);
-      component.blockData[offset] = component.pred += diff;
+      component.blockData[blockOffset] = component.pred += diff;
       var k = 1;
 
       while (k < 64) {
@@ -4626,24 +4648,24 @@ var JpegImage = function JpegImageClosure() {
 
         k += r;
         var z = dctZigZag[k];
-        component.blockData[offset + z] = receiveAndExtend(s);
+        component.blockData[blockOffset + z] = receiveAndExtend(s);
         k++;
       }
     }
 
-    function decodeDCFirst(component, offset) {
+    function decodeDCFirst(component, blockOffset) {
       var t = decodeHuffman(component.huffmanTableDC);
       var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;
-      component.blockData[offset] = component.pred += diff;
+      component.blockData[blockOffset] = component.pred += diff;
     }
 
-    function decodeDCSuccessive(component, offset) {
-      component.blockData[offset] |= readBit() << successive;
+    function decodeDCSuccessive(component, blockOffset) {
+      component.blockData[blockOffset] |= readBit() << successive;
     }
 
     var eobrun = 0;
 
-    function decodeACFirst(component, offset) {
+    function decodeACFirst(component, blockOffset) {
       if (eobrun > 0) {
         eobrun--;
         return;
@@ -4669,7 +4691,7 @@ var JpegImage = function JpegImageClosure() {
 
         k += r;
         var z = dctZigZag[k];
-        component.blockData[offset + z] = receiveAndExtend(s) * (1 << successive);
+        component.blockData[blockOffset + z] = receiveAndExtend(s) * (1 << successive);
         k++;
       }
     }
@@ -4677,7 +4699,7 @@ var JpegImage = function JpegImageClosure() {
     var successiveACState = 0,
         successiveACNextValue;
 
-    function decodeACSuccessive(component, offset) {
+    function decodeACSuccessive(component, blockOffset) {
       var k = spectralStart;
       var e = spectralEnd;
       var r = 0;
@@ -4685,7 +4707,7 @@ var JpegImage = function JpegImageClosure() {
       var rs;
 
       while (k <= e) {
-        const offsetZ = offset + dctZigZag[k];
+        const offsetZ = blockOffset + dctZigZag[k];
         const sign = component.blockData[offsetZ] < 0 ? -1 : 1;
 
         switch (successiveACState) {
@@ -4764,15 +4786,15 @@ var JpegImage = function JpegImageClosure() {
       var mcuCol = mcu % mcusPerLine;
       blockRow = mcuRow * component.v + row;
       var blockCol = mcuCol * component.h + col;
-      var offset = getBlockBufferOffset(component, blockRow, blockCol);
-      decode(component, offset);
+      const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);
+      decode(component, blockOffset);
     }
 
     function decodeBlock(component, decode, mcu) {
       blockRow = mcu / component.blocksPerLine | 0;
       var blockCol = mcu % component.blocksPerLine;
-      var offset = getBlockBufferOffset(component, blockRow, blockCol);
-      decode(component, offset);
+      const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);
+      decode(component, blockOffset);
     }
 
     var componentsLength = components.length;
@@ -4801,37 +4823,39 @@ var JpegImage = function JpegImageClosure() {
 
     var h, v;
 
-    while (mcu < mcuExpected) {
+    while (mcu <= mcuExpected) {
       var mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected;
 
-      for (i = 0; i < componentsLength; i++) {
-        components[i].pred = 0;
-      }
+      if (mcuToRead > 0) {
+        for (i = 0; i < componentsLength; i++) {
+          components[i].pred = 0;
+        }
 
-      eobrun = 0;
+        eobrun = 0;
 
-      if (componentsLength === 1) {
-        component = components[0];
+        if (componentsLength === 1) {
+          component = components[0];
 
-        for (n = 0; n < mcuToRead; n++) {
-          decodeBlock(component, decodeFn, mcu);
-          mcu++;
-        }
-      } else {
-        for (n = 0; n < mcuToRead; 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);
+          for (n = 0; n < mcuToRead; n++) {
+            decodeBlock(component, decodeFn, mcu);
+            mcu++;
+          }
+        } else {
+          for (n = 0; n < mcuToRead; 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++;
+            mcu++;
+          }
         }
       }
 
@@ -4840,31 +4864,21 @@ var JpegImage = function JpegImageClosure() {
 
       if (!fileMarker) {
         break;
-      } else if (fileMarker.invalid) {
-        (0, _util.warn)("decodeScan - unexpected MCU data, current marker is: " + fileMarker.invalid);
-        offset = fileMarker.offset;
       }
 
-      var marker = fileMarker && fileMarker.marker;
-
-      if (!marker || marker <= 0xff00) {
-        throw new JpegError("decodeScan - a valid marker was not found.");
+      if (fileMarker.invalid) {
+        const partialMsg = mcuToRead > 0 ? "unexpected" : "excessive";
+        (0, _util.warn)(`decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`);
+        offset = fileMarker.offset;
       }
 
-      if (marker >= 0xffd0 && marker <= 0xffd7) {
+      if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) {
         offset += 2;
       } else {
         break;
       }
     }
 
-    fileMarker = findNextFileMarker(data, offset);
-
-    if (fileMarker && fileMarker.invalid) {
-      (0, _util.warn)("decodeScan - unexpected Scan data, current marker is: " + fileMarker.invalid);
-      offset = fileMarker.offset;
-    }
-
     return offset - startOffset;
   }
 
@@ -5653,7 +5667,7 @@ var JpegImage = function JpegImageClosure() {
 exports.JpegImage = JpegImage;
 
 /***/ }),
-/* 8 */
+/* 9 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -5666,9 +5680,9 @@ exports.JpxImage = void 0;
 
 var _util = __w_pdfjs_require__(1);
 
-var _core_utils = __w_pdfjs_require__(4);
+var _core_utils = __w_pdfjs_require__(5);
 
-var _arithmetic_decoder = __w_pdfjs_require__(5);
+var _arithmetic_decoder = __w_pdfjs_require__(6);
 
 class JpxError extends _util.BaseException {
   constructor(msg) {
@@ -6423,7 +6437,7 @@ var JpxImage = function JpxImageClosure() {
     var maxDecompositionLevelsCount = 0;
 
     for (c = 0; c < componentsCount; c++) {
-      var component = tile.components[c];
+      const component = tile.components[c];
       maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount);
     }
 
@@ -6452,7 +6466,7 @@ var JpxImage = function JpxImageClosure() {
       for (; r <= maxDecompositionLevelsCount; r++) {
         for (; p < maxNumPrecinctsInLevel[r]; p++) {
           for (; c < componentsCount; c++) {
-            var component = tile.components[c];
+            const component = tile.components[c];
 
             if (r > component.codingStyleParameters.decompositionLevelsCount) {
               continue;
@@ -6871,13 +6885,13 @@ var JpxImage = function JpxImageClosure() {
         var firstTimeInclusion = false;
         var valueReady;
 
-        if (codeblock["included"] !== undefined) {
+        if (codeblock.included !== undefined) {
           codeblockIncluded = !!readBits(1);
         } else {
           precinct = codeblock.precinct;
           var inclusionTree, zeroBitPlanesTree;
 
-          if (precinct["inclusionTree"] !== undefined) {
+          if (precinct.inclusionTree !== undefined) {
             inclusionTree = precinct.inclusionTree;
           } else {
             var width = precinct.cbxMax - precinct.cbxMin + 1;
@@ -6955,7 +6969,7 @@ var JpxImage = function JpxImageClosure() {
         var packetItem = queue.shift();
         codeblock = packetItem.codeblock;
 
-        if (codeblock["data"] === undefined) {
+        if (codeblock.data === undefined) {
           codeblock.data = [];
         }
 
@@ -6989,7 +7003,7 @@ var JpxImage = function JpxImageClosure() {
         continue;
       }
 
-      if (codeblock["data"] === undefined) {
+      if (codeblock.data === undefined) {
         continue;
       }
 

文件差异内容过多而无法显示
+ 0 - 0
image_decoders/pdf.image_decoders.js.map


文件差异内容过多而无法显示
+ 0 - 0
image_decoders/pdf.image_decoders.min.js


+ 2 - 2
lib/README.md

@@ -3,5 +3,5 @@ pre-built library as found in e.g. the `/build`, `/web`, and `/image_decoders`
 folders in the root of this repository.
 
 Please note that the "lib" build target exists mostly to enable unit-testing in
-Node.js/Travis, and that you'll need to handle e.g. any Node.js dependencies
-yourself if using the files in this folder.
+Node.js/Travis, and that you'll need to handle e.g. any necessary polyfills
+and/or Node.js dependencies yourself if using the files in this folder.

+ 7 - 7
lib/core/ccitt.js

@@ -54,19 +54,19 @@ const CCITTFaxDecoder = function CCITTFaxDecoder() {
 
     this.source = source;
     this.eof = false;
-    this.encoding = options["K"] || 0;
-    this.eoline = options["EndOfLine"] || false;
-    this.byteAlign = options["EncodedByteAlign"] || false;
-    this.columns = options["Columns"] || 1728;
-    this.rows = options["Rows"] || 0;
-    let eoblock = options["EndOfBlock"];
+    this.encoding = options.K || 0;
+    this.eoline = options.EndOfLine || false;
+    this.byteAlign = options.EncodedByteAlign || false;
+    this.columns = options.Columns || 1728;
+    this.rows = options.Rows || 0;
+    let eoblock = options.EndOfBlock;
 
     if (eoblock === null || eoblock === undefined) {
       eoblock = true;
     }
 
     this.eoblock = eoblock;
-    this.black = options["BlackIs1"] || false;
+    this.black = options.BlackIs1 || false;
     this.codingLine = new Uint32Array(this.columns + 1);
     this.refLine = new Uint32Array(this.columns + 2);
     this.codingLine[0] = this.columns;

+ 1 - 1
lib/core/cff_parser.js

@@ -799,7 +799,7 @@ var CFFParser = function CFFParserClosure() {
       var bytes = this.bytes;
       var start = pos;
       var format = bytes[pos++];
-      var charset = [".notdef"];
+      const charset = [cid ? 0 : ".notdef"];
       var id, count, i;
       length -= 1;
 

+ 5 - 5
lib/core/chunked_stream.js

@@ -550,15 +550,15 @@ class ChunkedStreamManager {
 
     const loadedRequests = [];
 
-    for (let chunk = beginChunk; chunk < endChunk; ++chunk) {
-      const requestIds = this.requestsByChunk[chunk] || [];
-      delete this.requestsByChunk[chunk];
+    for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) {
+      const requestIds = this.requestsByChunk[curChunk] || [];
+      delete this.requestsByChunk[curChunk];
 
       for (const requestId of requestIds) {
         const chunksNeeded = this.chunksNeededByRequest[requestId];
 
-        if (chunk in chunksNeeded) {
-          delete chunksNeeded[chunk];
+        if (curChunk in chunksNeeded) {
+          delete chunksNeeded[curChunk];
         }
 
         if (!(0, _util.isEmptyObj)(chunksNeeded)) {

文件差异内容过多而无法显示
+ 0 - 0
lib/core/cmap.js


+ 22 - 18
lib/core/document.js

@@ -64,6 +64,7 @@ class Page {
     ref,
     fontCache,
     builtInCMapCache,
+    globalImageCache,
     pdfFunctionFactory
   }) {
     this.pdfManager = pdfManager;
@@ -73,6 +74,7 @@ class Page {
     this.ref = ref;
     this.fontCache = fontCache;
     this.builtInCMapCache = builtInCMapCache;
+    this.globalImageCache = globalImageCache;
     this.pdfFunctionFactory = pdfFunctionFactory;
     this.evaluatorOptions = pdfManager.evaluatorOptions;
     this.resourcesPromise = null;
@@ -194,8 +196,8 @@ class Page {
       const xref = this.xref;
       const streams = [];
 
-      for (const stream of content) {
-        streams.push(xref.fetchIfRef(stream));
+      for (const subStream of content) {
+        streams.push(xref.fetchIfRef(subStream));
       }
 
       stream = new _stream.StreamsSequenceStream(streams);
@@ -235,6 +237,7 @@ class Page {
       idFactory: this.idFactory,
       fontCache: this.fontCache,
       builtInCMapCache: this.builtInCMapCache,
+      globalImageCache: this.globalImageCache,
       options: this.evaluatorOptions,
       pdfFunctionFactory: this.pdfFunctionFactory
     });
@@ -267,7 +270,10 @@ class Page {
 
       for (const annotation of annotations) {
         if (isAnnotationRenderable(annotation, intent)) {
-          opListPromises.push(annotation.getOperatorList(partialEvaluator, task, renderInteractiveForms));
+          opListPromises.push(annotation.getOperatorList(partialEvaluator, task, renderInteractiveForms).catch(function (reason) {
+            (0, _util.warn)("getOperatorList - ignoring annotation data during " + `"${task.name}" task: "${reason}".`);
+            return null;
+          }));
         }
       }
 
@@ -305,6 +311,7 @@ class Page {
         idFactory: this.idFactory,
         fontCache: this.fontCache,
         builtInCMapCache: this.builtInCMapCache,
+        globalImageCache: this.globalImageCache,
         options: this.evaluatorOptions,
         pdfFunctionFactory: this.pdfFunctionFactory
       });
@@ -339,20 +346,17 @@ class Page {
 
   get _parsedAnnotations() {
     const parsedAnnotations = this.pdfManager.ensure(this, "annotations").then(() => {
-      const annotationRefs = this.annotations;
       const annotationPromises = [];
 
-      for (let i = 0, ii = annotationRefs.length; i < ii; i++) {
-        annotationPromises.push(_annotation.AnnotationFactory.create(this.xref, annotationRefs[i], this.pdfManager, this.idFactory));
+      for (const annotationRef of this.annotations) {
+        annotationPromises.push(_annotation.AnnotationFactory.create(this.xref, annotationRef, this.pdfManager, this.idFactory).catch(function (reason) {
+          (0, _util.warn)(`_parsedAnnotations: "${reason}".`);
+          return null;
+        }));
       }
 
       return Promise.all(annotationPromises).then(function (annotations) {
-        return annotations.filter(function isDefined(annotation) {
-          return !!annotation;
-        });
-      }, function (reason) {
-        (0, _util.warn)(`_parsedAnnotations: "${reason}".`);
-        return [];
+        return annotations.filter(annotation => !!annotation);
       });
     });
     return (0, _util.shadow)(this, "_parsedAnnotations", parsedAnnotations);
@@ -656,11 +660,11 @@ class PDFDocument {
             continue;
           }
 
-          if (!docInfo["Custom"]) {
-            docInfo["Custom"] = Object.create(null);
+          if (!docInfo.Custom) {
+            docInfo.Custom = Object.create(null);
           }
 
-          docInfo["Custom"][key] = customValue;
+          docInfo.Custom[key] = customValue;
         }
       }
     }
@@ -693,7 +697,6 @@ class PDFDocument {
       catalog,
       linearization
     } = this;
-    (0, _util.assert)(linearization && linearization.pageFirst === pageIndex);
 
     const ref = _primitives.Ref.get(linearization.objectNumberFirst, 0);
 
@@ -732,6 +735,7 @@ class PDFDocument {
         ref,
         fontCache: catalog.fontCache,
         builtInCMapCache: catalog.builtInCMapCache,
+        globalImageCache: catalog.globalImageCache,
         pdfFunctionFactory: this.pdfFunctionFactory
       });
     });
@@ -751,8 +755,8 @@ class PDFDocument {
     return this.catalog.fontFallback(id, handler);
   }
 
-  async cleanup() {
-    return this.catalog ? this.catalog.cleanup() : (0, _primitives.clearPrimitiveCaches)();
+  async cleanup(manuallyTriggered = false) {
+    return this.catalog ? this.catalog.cleanup(manuallyTriggered) : (0, _primitives.clearPrimitiveCaches)();
   }
 
 }

+ 285 - 247
lib/core/evaluator.js

@@ -58,24 +58,21 @@ var _metrics = require("./metrics.js");
 
 var _function = require("./function.js");
 
-var _jpeg_stream = require("./jpeg_stream.js");
+var _image_utils = require("./image_utils.js");
 
 var _murmurhash = require("./murmurhash3.js");
 
-var _image_utils = require("./image_utils.js");
-
 var _operator_list = require("./operator_list.js");
 
 var _image = require("./image.js");
 
 var PartialEvaluator = function PartialEvaluatorClosure() {
   const DefaultPartialEvaluatorOptions = {
-    forceDataSchema: false,
     maxImageSize: -1,
     disableFontFace: false,
-    nativeImageDecoderSupport: _util.NativeImageDecoding.DECODE,
     ignoreErrors: false,
-    isEvalSupported: true
+    isEvalSupported: true,
+    fontExtraProperties: false
   };
 
   function PartialEvaluator({
@@ -85,6 +82,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
     idFactory,
     fontCache,
     builtInCMapCache,
+    globalImageCache,
     options = null,
     pdfFunctionFactory
   }) {
@@ -94,6 +92,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
     this.idFactory = idFactory;
     this.fontCache = fontCache;
     this.builtInCMapCache = builtInCMapCache;
+    this.globalImageCache = globalImageCache;
     this.options = options || DefaultPartialEvaluatorOptions;
     this.pdfFunctionFactory = pdfFunctionFactory;
     this.parsingType3Font = false;
@@ -289,7 +288,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
                   }
 
                   this.handler.send("UnsupportedFeature", {
-                    featureId: _util.UNSUPPORTED_FEATURES.unknown
+                    featureId: _util.UNSUPPORTED_FEATURES.errorExtGState
                   });
                   (0, _util.warn)(`hasBlendModes - ignoring ExtGState: "${ex}".`);
                   continue;
@@ -357,7 +356,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
                 }
 
                 this.handler.send("UnsupportedFeature", {
-                  featureId: _util.UNSUPPORTED_FEATURES.unknown
+                  featureId: _util.UNSUPPORTED_FEATURES.errorXObject
                 });
                 (0, _util.warn)(`hasBlendModes - ignoring XObject: "${ex}".`);
                 continue;
@@ -460,10 +459,10 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
       isInline = false,
       operatorList,
       cacheKey,
-      imageCache,
-      forceDisableNativeImageDecoder = false
+      localImageCache
     }) {
       var dict = image.dict;
+      const imageRef = dict.objId;
       var w = dict.get("Width", "W");
       var h = dict.get("Height", "H");
 
@@ -500,10 +499,10 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
         operatorList.addOp(_util.OPS.paintImageMaskXObject, args);
 
         if (cacheKey) {
-          imageCache[cacheKey] = {
+          localImageCache.set(cacheKey, imageRef, {
             fn: _util.OPS.paintImageMaskXObject,
             args
-          };
+          });
         }
 
         return undefined;
@@ -513,7 +512,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
       var mask = dict.get("Mask") || false;
       var SMALL_IMAGE_DIMENSIONS = 200;
 
-      if (isInline && !softMask && !mask && !(image instanceof _jpeg_stream.JpegStream) && w + h < SMALL_IMAGE_DIMENSIONS) {
+      if (isInline && !softMask && !mask && w + h < SMALL_IMAGE_DIMENSIONS) {
         const imageObj = new _image.PDFImage({
           xref: this.xref,
           res: resources,
@@ -526,68 +525,36 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
         return undefined;
       }
 
-      const nativeImageDecoderSupport = forceDisableNativeImageDecoder ? _util.NativeImageDecoding.NONE : this.options.nativeImageDecoderSupport;
-      let objId = `img_${this.idFactory.createObjId()}`;
+      let objId = `img_${this.idFactory.createObjId()}`,
+          cacheGlobally = false;
 
       if (this.parsingType3Font) {
-        (0, _util.assert)(nativeImageDecoderSupport === _util.NativeImageDecoding.NONE, "Type3 image resources should be completely decoded in the worker.");
         objId = `${this.idFactory.getDocId()}_type3res_${objId}`;
-      }
-
-      if (nativeImageDecoderSupport !== _util.NativeImageDecoding.NONE && !softMask && !mask && image instanceof _jpeg_stream.JpegStream && _image_utils.NativeImageDecoder.isSupported(image, this.xref, resources, this.pdfFunctionFactory) && image.maybeValidDimensions) {
-        return this.handler.sendWithPromise("obj", [objId, this.pageIndex, "JpegStream", image.getIR(this.options.forceDataSchema)]).then(function () {
-          operatorList.addDependency(objId);
-          args = [objId, w, h];
-          operatorList.addOp(_util.OPS.paintJpegXObject, args);
-
-          if (cacheKey) {
-            imageCache[cacheKey] = {
-              fn: _util.OPS.paintJpegXObject,
-              args
-            };
-          }
-        }, reason => {
-          (0, _util.warn)("Native JPEG decoding failed -- trying to recover: " + (reason && reason.message));
-          return this.buildPaintImageXObject({
-            resources,
-            image,
-            isInline,
-            operatorList,
-            cacheKey,
-            imageCache,
-            forceDisableNativeImageDecoder: true
-          });
-        });
-      }
-
-      var nativeImageDecoder = null;
+      } else if (imageRef) {
+        cacheGlobally = this.globalImageCache.shouldCache(imageRef, this.pageIndex);
 
-      if (nativeImageDecoderSupport === _util.NativeImageDecoding.DECODE && (image instanceof _jpeg_stream.JpegStream || mask instanceof _jpeg_stream.JpegStream || softMask instanceof _jpeg_stream.JpegStream)) {
-        nativeImageDecoder = new _image_utils.NativeImageDecoder({
-          xref: this.xref,
-          resources,
-          handler: this.handler,
-          forceDataSchema: this.options.forceDataSchema,
-          pdfFunctionFactory: this.pdfFunctionFactory
-        });
+        if (cacheGlobally) {
+          objId = `${this.idFactory.getDocId()}_${objId}`;
+        }
       }
 
       operatorList.addDependency(objId);
       args = [objId, w, h];
 
       const imgPromise = _image.PDFImage.buildImage({
-        handler: this.handler,
         xref: this.xref,
         res: resources,
         image,
         isInline,
-        nativeDecoder: nativeImageDecoder,
         pdfFunctionFactory: this.pdfFunctionFactory
       }).then(imageObj => {
-        var imgData = imageObj.createImageData(false);
+        imgData = imageObj.createImageData(false);
 
         if (this.parsingType3Font) {
           return this.handler.sendWithPromise("commonobj", [objId, "FontType3Res", imgData], [imgData.data.buffer]);
+        } else if (cacheGlobally) {
+          this.handler.send("commonobj", [objId, "Image", imgData], [imgData.data.buffer]);
+          return undefined;
         }
 
         this.handler.send("obj", [objId, this.pageIndex, "Image", imgData], [imgData.data.buffer]);
@@ -597,6 +564,9 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
 
         if (this.parsingType3Font) {
           return this.handler.sendWithPromise("commonobj", [objId, "FontType3Res", null]);
+        } else if (cacheGlobally) {
+          this.handler.send("commonobj", [objId, "Image", null]);
+          return undefined;
         }
 
         this.handler.send("obj", [objId, this.pageIndex, "Image", null]);
@@ -610,10 +580,23 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
       operatorList.addOp(_util.OPS.paintImageXObject, args);
 
       if (cacheKey) {
-        imageCache[cacheKey] = {
+        localImageCache.set(cacheKey, imageRef, {
           fn: _util.OPS.paintImageXObject,
           args
-        };
+        });
+
+        if (imageRef) {
+          (0, _util.assert)(!isInline, "Cannot cache an inline image globally.");
+          this.globalImageCache.addPageIndex(imageRef, this.pageIndex);
+
+          if (cacheGlobally) {
+            this.globalImageCache.setData(imageRef, {
+              objId,
+              fn: _util.OPS.paintImageXObject,
+              args
+            });
+          }
+        }
       }
 
       return undefined;
@@ -670,7 +653,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
 
         if (this.options.ignoreErrors) {
           this.handler.send("UnsupportedFeature", {
-            featureId: _util.UNSUPPORTED_FEATURES.unknown
+            featureId: _util.UNSUPPORTED_FEATURES.errorTilingPattern
           });
           (0, _util.warn)(`handleTilingType - ignoring pattern: "${reason}".`);
           return;
@@ -697,9 +680,14 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
           return translated;
         }).catch(reason => {
           this.handler.send("UnsupportedFeature", {
-            featureId: _util.UNSUPPORTED_FEATURES.font
+            featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadType3
+          });
+          return new TranslatedFont({
+            loadedName: "g_font_error",
+            font: new _fonts.ErrorFont(`Type3 font load error: ${reason}`),
+            dict: translated.font,
+            extraProperties: this.options.fontExtraProperties
           });
-          return new TranslatedFont("g_font_error", new _fonts.ErrorFont("Type3 font load error: " + reason), translated.font);
         });
       }).then(translated => {
         state.font = translated.font;
@@ -732,7 +720,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
 
       if (this.options.ignoreErrors) {
         this.handler.send("UnsupportedFeature", {
-          featureId: _util.UNSUPPORTED_FEATURES.font
+          featureId: _util.UNSUPPORTED_FEATURES.errorFontState
         });
         (0, _util.warn)(`ensureStateFont: "${reason}".`);
         return;
@@ -826,9 +814,14 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
       });
     },
     loadFont: function PartialEvaluator_loadFont(fontName, font, resources) {
-      function errorFont() {
-        return Promise.resolve(new TranslatedFont("g_font_error", new _fonts.ErrorFont("Font " + fontName + " is not available"), font));
-      }
+      const errorFont = () => {
+        return Promise.resolve(new TranslatedFont({
+          loadedName: "g_font_error",
+          font: new _fonts.ErrorFont(`Font "${fontName}" is not available.`),
+          dict: font,
+          extraProperties: this.options.fontExtraProperties
+        }));
+      };
 
       var fontRef,
           xref = this.xref;
@@ -856,7 +849,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
         }
 
         this.handler.send("UnsupportedFeature", {
-          featureId: _util.UNSUPPORTED_FEATURES.font
+          featureId: _util.UNSUPPORTED_FEATURES.errorFontMissing
         });
         (0, _util.warn)(`${partialMsg} -- attempting to fallback to a default font.`);
         fontRef = PartialEvaluator.getFallbackFontDict();
@@ -937,16 +930,21 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
         translatedPromise = Promise.reject(e);
       }
 
-      translatedPromise.then(function (translatedFont) {
+      translatedPromise.then(translatedFont => {
         if (translatedFont.fontType !== undefined) {
           var xrefFontStats = xref.stats.fontTypes;
           xrefFontStats[translatedFont.fontType] = true;
         }
 
-        fontCapability.resolve(new TranslatedFont(font.loadedName, translatedFont, font));
+        fontCapability.resolve(new TranslatedFont({
+          loadedName: font.loadedName,
+          font: translatedFont,
+          dict: font,
+          extraProperties: this.options.fontExtraProperties
+        }));
       }).catch(reason => {
         this.handler.send("UnsupportedFeature", {
-          featureId: _util.UNSUPPORTED_FEATURES.font
+          featureId: _util.UNSUPPORTED_FEATURES.errorFontTranslate
         });
 
         try {
@@ -957,7 +955,12 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
           xrefFontStats[fontType] = true;
         } catch (ex) {}
 
-        fontCapability.resolve(new TranslatedFont(font.loadedName, new _fonts.ErrorFont(reason instanceof Error ? reason.message : reason), font));
+        fontCapability.resolve(new TranslatedFont({
+          loadedName: font.loadedName,
+          font: new _fonts.ErrorFont(reason instanceof Error ? reason.message : reason),
+          dict: font,
+          extraProperties: this.options.fontExtraProperties
+        }));
       });
       return fontCapability.promise;
     },
@@ -1000,7 +1003,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
 
         if (this.options.ignoreErrors) {
           this.handler.send("UnsupportedFeature", {
-            featureId: _util.UNSUPPORTED_FEATURES.unknown
+            featureId: _util.UNSUPPORTED_FEATURES.errorColorSpace
           });
           (0, _util.warn)(`parseColorSpace - ignoring ColorSpace: "${reason}".`);
           return null;
@@ -1052,7 +1055,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
       var self = this;
       var xref = this.xref;
       let parsingText = false;
-      var imageCache = Object.create(null);
+      const localImageCache = new _image_utils.LocalImageCache();
 
       var xobjs = resources.get("XObject") || _primitives.Dict.empty;
 
@@ -1101,10 +1104,14 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
             case _util.OPS.paintXObject:
               var name = args[0].name;
 
-              if (name && imageCache[name] !== undefined) {
-                operatorList.addOp(imageCache[name].fn, imageCache[name].args);
-                args = null;
-                continue;
+              if (name) {
+                const localImage = localImageCache.getByName(name);
+
+                if (localImage) {
+                  operatorList.addOp(localImage.fn, localImage.args);
+                  args = null;
+                  continue;
+                }
               }
 
               next(new Promise(function (resolveXObject, rejectXObject) {
@@ -1112,7 +1119,28 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
                   throw new _util.FormatError("XObject must be referred to by name.");
                 }
 
-                const xobj = xobjs.get(name);
+                let xobj = xobjs.getRaw(name);
+
+                if (xobj instanceof _primitives.Ref) {
+                  const localImage = localImageCache.getByRef(xobj);
+
+                  if (localImage) {
+                    operatorList.addOp(localImage.fn, localImage.args);
+                    resolveXObject();
+                    return;
+                  }
+
+                  const globalImage = self.globalImageCache.getData(xobj, self.pageIndex);
+
+                  if (globalImage) {
+                    operatorList.addDependency(globalImage.objId);
+                    operatorList.addOp(globalImage.fn, globalImage.args);
+                    resolveXObject();
+                    return;
+                  }
+
+                  xobj = xref.fetch(xobj);
+                }
 
                 if (!xobj) {
                   operatorList.addOp(fn, args);
@@ -1143,7 +1171,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
                     image: xobj,
                     operatorList,
                     cacheKey: name,
-                    imageCache
+                    localImageCache
                   }).then(resolveXObject, rejectXObject);
                   return;
                 } else if (type.name === "PS") {
@@ -1160,7 +1188,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
 
                 if (self.options.ignoreErrors) {
                   self.handler.send("UnsupportedFeature", {
-                    featureId: _util.UNSUPPORTED_FEATURES.unknown
+                    featureId: _util.UNSUPPORTED_FEATURES.errorXObject
                   });
                   (0, _util.warn)(`getOperatorList - ignoring XObject: "${reason}".`);
                   return;
@@ -1190,10 +1218,10 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
               var cacheKey = args[0].cacheKey;
 
               if (cacheKey) {
-                var cacheEntry = imageCache[cacheKey];
+                const localImage = localImageCache.getByName(cacheKey);
 
-                if (cacheEntry !== undefined) {
-                  operatorList.addOp(cacheEntry.fn, cacheEntry.args);
+                if (localImage) {
+                  operatorList.addOp(localImage.fn, localImage.args);
                   args = null;
                   continue;
                 }
@@ -1205,7 +1233,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
                 isInline: true,
                 operatorList,
                 cacheKey,
-                imageCache
+                localImageCache
               }));
               return;
 
@@ -1447,7 +1475,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
 
         if (this.options.ignoreErrors) {
           this.handler.send("UnsupportedFeature", {
-            featureId: _util.UNSUPPORTED_FEATURES.unknown
+            featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList
           });
           (0, _util.warn)(`getOperatorList - ignoring errors during "${task.name}" ` + `task: "${reason}".`);
           closePendingRestoreOPS();
@@ -1498,7 +1526,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
       var self = this;
       var xref = this.xref;
       var xobjs = null;
-      var skipEmptyXObjs = Object.create(null);
+      const emptyXObjectCache = new _image_utils.LocalImageCache();
       var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);
       var textState;
 
@@ -1515,7 +1543,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
             fontFamily: font.fallbackName,
             ascent: font.ascent,
             descent: font.descent,
-            vertical: !!font.vertical
+            vertical: font.vertical
           };
         }
 
@@ -1923,7 +1951,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
 
               var name = args[0].name;
 
-              if (name && skipEmptyXObjs[name] !== undefined) {
+              if (name && emptyXObjectCache.getByName(name)) {
                 break;
               }
 
@@ -1932,7 +1960,16 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
                   throw new _util.FormatError("XObject must be referred to by name.");
                 }
 
-                const xobj = xobjs.get(name);
+                let xobj = xobjs.getRaw(name);
+
+                if (xobj instanceof _primitives.Ref) {
+                  if (emptyXObjectCache.getByRef(xobj)) {
+                    resolveXObject();
+                    return;
+                  }
+
+                  xobj = xref.fetch(xobj);
+                }
 
                 if (!xobj) {
                   resolveXObject();
@@ -1950,7 +1987,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
                 }
 
                 if (type.name !== "Form") {
-                  skipEmptyXObjs[name] = true;
+                  emptyXObjectCache.set(name, xobj.dict.objId, true);
                   resolveXObject();
                   return;
                 }
@@ -1992,7 +2029,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
                   seenStyles
                 }).then(function () {
                   if (!sinkWrapper.enqueueInvoked) {
-                    skipEmptyXObjs[name] = true;
+                    emptyXObjectCache.set(name, xobj.dict.objId, true);
                   }
 
                   resolveXObject();
@@ -2160,14 +2197,14 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
       properties.baseEncodingName = baseEncodingName;
       properties.hasEncoding = !!baseEncodingName || differences.length > 0;
       properties.dict = dict;
-      return toUnicodePromise.then(toUnicode => {
-        properties.toUnicode = toUnicode;
+      return toUnicodePromise.then(readToUnicode => {
+        properties.toUnicode = readToUnicode;
         return this.buildToUnicode(properties);
-      }).then(toUnicode => {
-        properties.toUnicode = toUnicode;
+      }).then(builtToUnicode => {
+        properties.toUnicode = builtToUnicode;
 
         if (cidToGidBytes) {
-          properties.cidToGidMap = this.readCidToGidMap(cidToGidBytes, toUnicode);
+          properties.cidToGidMap = this.readCidToGidMap(cidToGidBytes, builtToUnicode);
         }
 
         return properties;
@@ -2244,7 +2281,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
 
           }
 
-          if (code > 0 && Number.isInteger(code)) {
+          if (code > 0 && code <= 0x10ffff && Number.isInteger(code)) {
             if (baseEncodingName && code === +charcode) {
               const baseEncoding = (0, _encodings.getEncoding)(baseEncodingName);
 
@@ -2364,7 +2401,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
 
           if (this.options.ignoreErrors) {
             this.handler.send("UnsupportedFeature", {
-              featureId: _util.UNSUPPORTED_FEATURES.font
+              featureId: _util.UNSUPPORTED_FEATURES.errorFontToUnicode
             });
             (0, _util.warn)(`readToUnicode - ignoring ToUnicode data: "${reason}".`);
             return null;
@@ -2690,7 +2727,7 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
             lastChar
           };
           const widths = dict.get("Widths");
-          return this.extractDataStructures(dict, dict, properties).then(properties => {
+          return this.extractDataStructures(dict, dict, properties).then(newProperties => {
             if (widths) {
               const glyphWidths = [];
               let j = firstChar;
@@ -2699,12 +2736,12 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
                 glyphWidths[j++] = this.xref.fetchIfRef(widths[i]);
               }
 
-              properties.widths = glyphWidths;
+              newProperties.widths = glyphWidths;
             } else {
-              properties.widths = this.buildCharCodeToWidth(metrics.widths, properties);
+              newProperties.widths = this.buildCharCodeToWidth(metrics.widths, newProperties);
             }
 
-            return new _fonts.Font(baseFontName, null, properties);
+            return new _fonts.Font(baseFontName, null, newProperties);
           });
         }
       }
@@ -2765,7 +2802,6 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
         length3,
         loadedName: baseDict.loadedName,
         composite,
-        wideChars: composite,
         fixedPitch: false,
         fontMatrix: dict.getArray("FontMatrix") || _util.FONT_IDENTITY_MATRIX,
         firstChar: firstChar || 0,
@@ -2802,14 +2838,14 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
 
       return cMapPromise.then(() => {
         return this.extractDataStructures(dict, baseDict, properties);
-      }).then(properties => {
-        this.extractWidths(dict, descriptor, properties);
+      }).then(newProperties => {
+        this.extractWidths(dict, descriptor, newProperties);
 
         if (type === "Type3") {
-          properties.isType3Font = true;
+          newProperties.isType3Font = true;
         }
 
-        return new _fonts.Font(fontName.name, fontFile, properties);
+        return new _fonts.Font(fontName.name, fontFile, newProperties);
       });
     }
   };
@@ -2851,86 +2887,88 @@ var PartialEvaluator = function PartialEvaluatorClosure() {
 
 exports.PartialEvaluator = PartialEvaluator;
 
-var TranslatedFont = function TranslatedFontClosure() {
-  function TranslatedFont(loadedName, font, dict) {
+class TranslatedFont {
+  constructor({
+    loadedName,
+    font,
+    dict,
+    extraProperties = false
+  }) {
     this.loadedName = loadedName;
     this.font = font;
     this.dict = dict;
+    this._extraProperties = extraProperties;
     this.type3Loaded = null;
     this.sent = false;
   }
 
-  TranslatedFont.prototype = {
-    send(handler) {
-      if (this.sent) {
-        return;
-      }
+  send(handler) {
+    if (this.sent) {
+      return;
+    }
 
-      this.sent = true;
-      handler.send("commonobj", [this.loadedName, "Font", this.font.exportData()]);
-    },
+    this.sent = true;
+    handler.send("commonobj", [this.loadedName, "Font", this.font.exportData(this._extraProperties)]);
+  }
 
-    fallback(handler) {
-      if (!this.font.data) {
-        return;
-      }
+  fallback(handler) {
+    if (!this.font.data) {
+      return;
+    }
 
-      this.font.disableFontFace = true;
-      const glyphs = this.font.glyphCacheValues;
-      PartialEvaluator.buildFontPaths(this.font, glyphs, handler);
-    },
+    this.font.disableFontFace = true;
+    const glyphs = this.font.glyphCacheValues;
+    PartialEvaluator.buildFontPaths(this.font, glyphs, handler);
+  }
 
-    loadType3Data(evaluator, resources, parentOperatorList, task) {
-      if (!this.font.isType3Font) {
-        throw new Error("Must be a Type3 font.");
-      }
-
-      if (this.type3Loaded) {
-        return this.type3Loaded;
-      }
-
-      var type3Options = Object.create(evaluator.options);
-      type3Options.ignoreErrors = false;
-      type3Options.nativeImageDecoderSupport = _util.NativeImageDecoding.NONE;
-      var type3Evaluator = evaluator.clone(type3Options);
-      type3Evaluator.parsingType3Font = true;
-      var translatedFont = this.font;
-      var loadCharProcsPromise = Promise.resolve();
-      var charProcs = this.dict.get("CharProcs");
-      var fontResources = this.dict.get("Resources") || resources;
-      var charProcKeys = charProcs.getKeys();
-      var charProcOperatorList = Object.create(null);
-
-      for (var i = 0, n = charProcKeys.length; i < n; ++i) {
-        const key = charProcKeys[i];
-        loadCharProcsPromise = loadCharProcsPromise.then(function () {
-          var glyphStream = charProcs.get(key);
-          var operatorList = new _operator_list.OperatorList();
-          return type3Evaluator.getOperatorList({
-            stream: glyphStream,
-            task,
-            resources: fontResources,
-            operatorList
-          }).then(function () {
-            charProcOperatorList[key] = operatorList.getIR();
-            parentOperatorList.addDependencies(operatorList.dependencies);
-          }).catch(function (reason) {
-            (0, _util.warn)(`Type3 font resource "${key}" is not available.`);
-            var operatorList = new _operator_list.OperatorList();
-            charProcOperatorList[key] = operatorList.getIR();
-          });
-        });
-      }
+  loadType3Data(evaluator, resources, parentOperatorList, task) {
+    if (!this.font.isType3Font) {
+      throw new Error("Must be a Type3 font.");
+    }
 
-      this.type3Loaded = loadCharProcsPromise.then(function () {
-        translatedFont.charProcOperatorList = charProcOperatorList;
-      });
+    if (this.type3Loaded) {
       return this.type3Loaded;
     }
 
-  };
-  return TranslatedFont;
-}();
+    var type3Options = Object.create(evaluator.options);
+    type3Options.ignoreErrors = false;
+    var type3Evaluator = evaluator.clone(type3Options);
+    type3Evaluator.parsingType3Font = true;
+    var translatedFont = this.font;
+    var loadCharProcsPromise = Promise.resolve();
+    var charProcs = this.dict.get("CharProcs");
+    var fontResources = this.dict.get("Resources") || resources;
+    var charProcKeys = charProcs.getKeys();
+    var charProcOperatorList = Object.create(null);
+
+    for (var i = 0, n = charProcKeys.length; i < n; ++i) {
+      const key = charProcKeys[i];
+      loadCharProcsPromise = loadCharProcsPromise.then(function () {
+        var glyphStream = charProcs.get(key);
+        var operatorList = new _operator_list.OperatorList();
+        return type3Evaluator.getOperatorList({
+          stream: glyphStream,
+          task,
+          resources: fontResources,
+          operatorList
+        }).then(function () {
+          charProcOperatorList[key] = operatorList.getIR();
+          parentOperatorList.addDependencies(operatorList.dependencies);
+        }).catch(function (reason) {
+          (0, _util.warn)(`Type3 font resource "${key}" is not available.`);
+          const dummyOperatorList = new _operator_list.OperatorList();
+          charProcOperatorList[key] = dummyOperatorList.getIR();
+        });
+      });
+    }
+
+    this.type3Loaded = loadCharProcsPromise.then(function () {
+      translatedFont.charProcOperatorList = charProcOperatorList;
+    });
+    return this.type3Loaded;
+  }
+
+}
 
 var StateManager = function StateManagerClosure() {
   function StateManager(initialState) {
@@ -3082,112 +3120,112 @@ var EvalState = function EvalStateClosure() {
 
 var EvaluatorPreprocessor = function EvaluatorPreprocessorClosure() {
   var getOPMap = (0, _core_utils.getLookupTableFactory)(function (t) {
-    t["w"] = {
+    t.w = {
       id: _util.OPS.setLineWidth,
       numArgs: 1,
       variableArgs: false
     };
-    t["J"] = {
+    t.J = {
       id: _util.OPS.setLineCap,
       numArgs: 1,
       variableArgs: false
     };
-    t["j"] = {
+    t.j = {
       id: _util.OPS.setLineJoin,
       numArgs: 1,
       variableArgs: false
     };
-    t["M"] = {
+    t.M = {
       id: _util.OPS.setMiterLimit,
       numArgs: 1,
       variableArgs: false
     };
-    t["d"] = {
+    t.d = {
       id: _util.OPS.setDash,
       numArgs: 2,
       variableArgs: false
     };
-    t["ri"] = {
+    t.ri = {
       id: _util.OPS.setRenderingIntent,
       numArgs: 1,
       variableArgs: false
     };
-    t["i"] = {
+    t.i = {
       id: _util.OPS.setFlatness,
       numArgs: 1,
       variableArgs: false
     };
-    t["gs"] = {
+    t.gs = {
       id: _util.OPS.setGState,
       numArgs: 1,
       variableArgs: false
     };
-    t["q"] = {
+    t.q = {
       id: _util.OPS.save,
       numArgs: 0,
       variableArgs: false
     };
-    t["Q"] = {
+    t.Q = {
       id: _util.OPS.restore,
       numArgs: 0,
       variableArgs: false
     };
-    t["cm"] = {
+    t.cm = {
       id: _util.OPS.transform,
       numArgs: 6,
       variableArgs: false
     };
-    t["m"] = {
+    t.m = {
       id: _util.OPS.moveTo,
       numArgs: 2,
       variableArgs: false
     };
-    t["l"] = {
+    t.l = {
       id: _util.OPS.lineTo,
       numArgs: 2,
       variableArgs: false
     };
-    t["c"] = {
+    t.c = {
       id: _util.OPS.curveTo,
       numArgs: 6,
       variableArgs: false
     };
-    t["v"] = {
+    t.v = {
       id: _util.OPS.curveTo2,
       numArgs: 4,
       variableArgs: false
     };
-    t["y"] = {
+    t.y = {
       id: _util.OPS.curveTo3,
       numArgs: 4,
       variableArgs: false
     };
-    t["h"] = {
+    t.h = {
       id: _util.OPS.closePath,
       numArgs: 0,
       variableArgs: false
     };
-    t["re"] = {
+    t.re = {
       id: _util.OPS.rectangle,
       numArgs: 4,
       variableArgs: false
     };
-    t["S"] = {
+    t.S = {
       id: _util.OPS.stroke,
       numArgs: 0,
       variableArgs: false
     };
-    t["s"] = {
+    t.s = {
       id: _util.OPS.closeStroke,
       numArgs: 0,
       variableArgs: false
     };
-    t["f"] = {
+    t.f = {
       id: _util.OPS.fill,
       numArgs: 0,
       variableArgs: false
     };
-    t["F"] = {
+    t.F = {
       id: _util.OPS.fill,
       numArgs: 0,
       variableArgs: false
@@ -3197,7 +3235,7 @@ var EvaluatorPreprocessor = function EvaluatorPreprocessorClosure() {
       numArgs: 0,
       variableArgs: false
     };
-    t["B"] = {
+    t.B = {
       id: _util.OPS.fillStroke,
       numArgs: 0,
       variableArgs: false
@@ -3207,7 +3245,7 @@ var EvaluatorPreprocessor = function EvaluatorPreprocessorClosure() {
       numArgs: 0,
       variableArgs: false
     };
-    t["b"] = {
+    t.b = {
       id: _util.OPS.closeFillStroke,
       numArgs: 0,
       variableArgs: false
@@ -3217,12 +3255,12 @@ var EvaluatorPreprocessor = function EvaluatorPreprocessorClosure() {
       numArgs: 0,
       variableArgs: false
     };
-    t["n"] = {
+    t.n = {
       id: _util.OPS.endPath,
       numArgs: 0,
       variableArgs: false
     };
-    t["W"] = {
+    t.W = {
       id: _util.OPS.clip,
       numArgs: 0,
       variableArgs: false
@@ -3232,62 +3270,62 @@ var EvaluatorPreprocessor = function EvaluatorPreprocessorClosure() {
       numArgs: 0,
       variableArgs: false
     };
-    t["BT"] = {
+    t.BT = {
       id: _util.OPS.beginText,
       numArgs: 0,
       variableArgs: false
     };
-    t["ET"] = {
+    t.ET = {
       id: _util.OPS.endText,
       numArgs: 0,
       variableArgs: false
     };
-    t["Tc"] = {
+    t.Tc = {
       id: _util.OPS.setCharSpacing,
       numArgs: 1,
       variableArgs: false
     };
-    t["Tw"] = {
+    t.Tw = {
       id: _util.OPS.setWordSpacing,
       numArgs: 1,
       variableArgs: false
     };
-    t["Tz"] = {
+    t.Tz = {
       id: _util.OPS.setHScale,
       numArgs: 1,
       variableArgs: false
     };
-    t["TL"] = {
+    t.TL = {
       id: _util.OPS.setLeading,
       numArgs: 1,
       variableArgs: false
     };
-    t["Tf"] = {
+    t.Tf = {
       id: _util.OPS.setFont,
       numArgs: 2,
       variableArgs: false
     };
-    t["Tr"] = {
+    t.Tr = {
       id: _util.OPS.setTextRenderingMode,
       numArgs: 1,
       variableArgs: false
     };
-    t["Ts"] = {
+    t.Ts = {
       id: _util.OPS.setTextRise,
       numArgs: 1,
       variableArgs: false
     };
-    t["Td"] = {
+    t.Td = {
       id: _util.OPS.moveText,
       numArgs: 2,
       variableArgs: false
     };
-    t["TD"] = {
+    t.TD = {
       id: _util.OPS.setLeadingMoveText,
       numArgs: 2,
       variableArgs: false
     };
-    t["Tm"] = {
+    t.Tm = {
       id: _util.OPS.setTextMatrix,
       numArgs: 6,
       variableArgs: false
@@ -3297,12 +3335,12 @@ var EvaluatorPreprocessor = function EvaluatorPreprocessorClosure() {
       numArgs: 0,
       variableArgs: false
     };
-    t["Tj"] = {
+    t.Tj = {
       id: _util.OPS.showText,
       numArgs: 1,
       variableArgs: false
     };
-    t["TJ"] = {
+    t.TJ = {
       id: _util.OPS.showSpacedText,
       numArgs: 1,
       variableArgs: false
@@ -3317,146 +3355,146 @@ var EvaluatorPreprocessor = function EvaluatorPreprocessorClosure() {
       numArgs: 3,
       variableArgs: false
     };
-    t["d0"] = {
+    t.d0 = {
       id: _util.OPS.setCharWidth,
       numArgs: 2,
       variableArgs: false
     };
-    t["d1"] = {
+    t.d1 = {
       id: _util.OPS.setCharWidthAndBounds,
       numArgs: 6,
       variableArgs: false
     };
-    t["CS"] = {
+    t.CS = {
       id: _util.OPS.setStrokeColorSpace,
       numArgs: 1,
       variableArgs: false
     };
-    t["cs"] = {
+    t.cs = {
       id: _util.OPS.setFillColorSpace,
       numArgs: 1,
       variableArgs: false
     };
-    t["SC"] = {
+    t.SC = {
       id: _util.OPS.setStrokeColor,
       numArgs: 4,
       variableArgs: true
     };
-    t["SCN"] = {
+    t.SCN = {
       id: _util.OPS.setStrokeColorN,
       numArgs: 33,
       variableArgs: true
     };
-    t["sc"] = {
+    t.sc = {
       id: _util.OPS.setFillColor,
       numArgs: 4,
       variableArgs: true
     };
-    t["scn"] = {
+    t.scn = {
       id: _util.OPS.setFillColorN,
       numArgs: 33,
       variableArgs: true
     };
-    t["G"] = {
+    t.G = {
       id: _util.OPS.setStrokeGray,
       numArgs: 1,
       variableArgs: false
     };
-    t["g"] = {
+    t.g = {
       id: _util.OPS.setFillGray,
       numArgs: 1,
       variableArgs: false
     };
-    t["RG"] = {
+    t.RG = {
       id: _util.OPS.setStrokeRGBColor,
       numArgs: 3,
       variableArgs: false
     };
-    t["rg"] = {
+    t.rg = {
       id: _util.OPS.setFillRGBColor,
       numArgs: 3,
       variableArgs: false
     };
-    t["K"] = {
+    t.K = {
       id: _util.OPS.setStrokeCMYKColor,
       numArgs: 4,
       variableArgs: false
     };
-    t["k"] = {
+    t.k = {
       id: _util.OPS.setFillCMYKColor,
       numArgs: 4,
       variableArgs: false
     };
-    t["sh"] = {
+    t.sh = {
       id: _util.OPS.shadingFill,
       numArgs: 1,
       variableArgs: false
     };
-    t["BI"] = {
+    t.BI = {
       id: _util.OPS.beginInlineImage,
       numArgs: 0,
       variableArgs: false
     };
-    t["ID"] = {
+    t.ID = {
       id: _util.OPS.beginImageData,
       numArgs: 0,
       variableArgs: false
     };
-    t["EI"] = {
+    t.EI = {
       id: _util.OPS.endInlineImage,
       numArgs: 1,
       variableArgs: false
     };
-    t["Do"] = {
+    t.Do = {
       id: _util.OPS.paintXObject,
       numArgs: 1,
       variableArgs: false
     };
-    t["MP"] = {
+    t.MP = {
       id: _util.OPS.markPoint,
       numArgs: 1,
       variableArgs: false
     };
-    t["DP"] = {
+    t.DP = {
       id: _util.OPS.markPointProps,
       numArgs: 2,
       variableArgs: false
     };
-    t["BMC"] = {
+    t.BMC = {
       id: _util.OPS.beginMarkedContent,
       numArgs: 1,
       variableArgs: false
     };
-    t["BDC"] = {
+    t.BDC = {
       id: _util.OPS.beginMarkedContentProps,
       numArgs: 2,
       variableArgs: false
     };
-    t["EMC"] = {
+    t.EMC = {
       id: _util.OPS.endMarkedContent,
       numArgs: 0,
       variableArgs: false
     };
-    t["BX"] = {
+    t.BX = {
       id: _util.OPS.beginCompat,
       numArgs: 0,
       variableArgs: false
     };
-    t["EX"] = {
+    t.EX = {
       id: _util.OPS.endCompat,
       numArgs: 0,
       variableArgs: false
     };
-    t["BM"] = null;
-    t["BD"] = null;
-    t["true"] = null;
-    t["fa"] = null;
-    t["fal"] = null;
-    t["fals"] = null;
-    t["false"] = null;
-    t["nu"] = null;
-    t["nul"] = null;
-    t["null"] = null;
+    t.BM = null;
+    t.BD = null;
+    t.true = null;
+    t.fa = null;
+    t.fal = null;
+    t.fals = null;
+    t.false = null;
+    t.nu = null;
+    t.nul = null;
+    t.null = null;
   });
   const MAX_INVALID_PATH_OPS = 20;
 

+ 7 - 7
lib/core/font_renderer.js

@@ -385,12 +385,7 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
     }
   }
 
-  function compileCharString(code, cmds, font, glyphId) {
-    var stack = [];
-    var x = 0,
-        y = 0;
-    var stems = 0;
-
+  function compileCharString(charStringCode, cmds, font, glyphId) {
     function moveTo(x, y) {
       cmds.push({
         cmd: "moveTo",
@@ -412,6 +407,11 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
       });
     }
 
+    var stack = [];
+    var x = 0,
+        y = 0;
+    var stems = 0;
+
     function parse(code) {
       var i = 0;
 
@@ -819,7 +819,7 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
       }
     }
 
-    parse(code);
+    parse(charStringCode);
   }
 
   const NOOP = [];

+ 163 - 147
lib/core/fonts.js

@@ -53,6 +53,8 @@ const PRIVATE_USE_AREAS = [[0xe000, 0xf8ff], [0x100000, 0x10fffd]];
 var PDF_GLYPH_SPACE_UNITS = 1000;
 var SEAC_ANALYSIS_ENABLED = true;
 exports.SEAC_ANALYSIS_ENABLED = SEAC_ANALYSIS_ENABLED;
+const EXPORT_DATA_PROPERTIES = ["ascent", "bbox", "black", "bold", "charProcOperatorList", "composite", "data", "defaultVMetrics", "defaultWidth", "descent", "fallbackName", "fontMatrix", "fontType", "isMonospace", "isSerifFont", "isType3Font", "italic", "loadedName", "mimetype", "missingFile", "name", "remeasure", "subtype", "type", "vertical"];
+const EXPORT_DATA_EXTRA_PROPERTIES = ["cMap", "defaultEncoding", "differences", "isSymbolicFont", "seacMap", "toFontChar", "toUnicode", "vmetrics", "widths"];
 var FontFlags = {
   FixedPitch: 1,
   Serif: 2,
@@ -410,7 +412,6 @@ var Font = function FontClosure() {
     this.name = name;
     this.loadedName = properties.loadedName;
     this.isType3Font = properties.isType3Font;
-    this.sizes = [];
     this.missingFile = false;
     this.glyphCache = Object.create(null);
     this.isSerifFont = !!(properties.flags & FontFlags.Serif);
@@ -433,7 +434,6 @@ var Font = function FontClosure() {
     this.widths = properties.widths;
     this.defaultWidth = properties.defaultWidth;
     this.composite = properties.composite;
-    this.wideChars = properties.wideChars;
     this.cMap = properties.cMap;
     this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS;
     this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS;
@@ -454,7 +454,7 @@ var Font = function FontClosure() {
     }
 
     this.cidEncoding = properties.cidEncoding;
-    this.vertical = properties.vertical;
+    this.vertical = !!properties.vertical;
 
     if (this.vertical) {
       this.vmetrics = properties.vmetrics;
@@ -519,7 +519,6 @@ var Font = function FontClosure() {
     this.widths = properties.widths;
     this.defaultWidth = properties.defaultWidth;
     this.toUnicode = properties.toUnicode;
-    this.encoding = properties.baseEncoding;
     this.seacMap = properties.seacMap;
   }
 
@@ -859,25 +858,25 @@ var Font = function FontClosure() {
     return cmap + "\x00\x04" + string16(format314.length + 4) + format314 + header31012 + format31012;
   }
 
-  function validateOS2Table(os2) {
-    var stream = new _stream.Stream(os2.data);
-    var version = stream.getUint16();
-    stream.getBytes(60);
-    var selection = stream.getUint16();
+  function validateOS2Table(os2, file) {
+    file.pos = (file.start || 0) + os2.offset;
+    var version = file.getUint16();
+    file.skip(60);
+    var selection = file.getUint16();
 
     if (version < 4 && selection & 0x0300) {
       return false;
     }
 
-    var firstChar = stream.getUint16();
-    var lastChar = stream.getUint16();
+    var firstChar = file.getUint16();
+    var lastChar = file.getUint16();
 
     if (firstChar > lastChar) {
       return false;
     }
 
-    stream.getBytes(6);
-    var usWinAscent = stream.getUint16();
+    file.skip(6);
+    var usWinAscent = file.getUint16();
 
     if (usWinAscent === 0) {
       return false;
@@ -1004,7 +1003,6 @@ var Font = function FontClosure() {
     name: null,
     font: null,
     mimetype: null,
-    encoding: null,
     disableFontFace: false,
 
     get renderer() {
@@ -1013,20 +1011,24 @@ var Font = function FontClosure() {
       return (0, _util.shadow)(this, "renderer", renderer);
     },
 
-    exportData: function Font_exportData() {
-      var data = {};
+    exportData(extraProperties = false) {
+      const exportDataProperties = extraProperties ? [...EXPORT_DATA_PROPERTIES, ...EXPORT_DATA_EXTRA_PROPERTIES] : EXPORT_DATA_PROPERTIES;
+      const data = Object.create(null);
+      let property, value;
 
-      for (var i in this) {
-        if (this.hasOwnProperty(i)) {
-          data[i] = this[i];
+      for (property of exportDataProperties) {
+        value = this[property];
+
+        if (value !== undefined) {
+          data[property] = value;
         }
       }
 
       return data;
     },
+
     fallbackToSystemFont: function Font_fallbackToSystemFont() {
       this.missingFile = true;
-      var charCode, unicode;
       var name = this.name;
       var type = this.type;
       var subtype = this.subtype;
@@ -1044,20 +1046,20 @@ var Font = function FontClosure() {
         const GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)();
         const map = [];
 
-        for (charCode in GlyphMapForStandardFonts) {
+        for (const charCode in GlyphMapForStandardFonts) {
           map[+charCode] = GlyphMapForStandardFonts[charCode];
         }
 
         if (/Arial-?Black/i.test(name)) {
           var SupplementalGlyphMapForArialBlack = (0, _standard_fonts.getSupplementalGlyphMapForArialBlack)();
 
-          for (charCode in SupplementalGlyphMapForArialBlack) {
+          for (const charCode in SupplementalGlyphMapForArialBlack) {
             map[+charCode] = SupplementalGlyphMapForArialBlack[charCode];
           }
         } else if (/Calibri/i.test(name)) {
           const SupplementalGlyphMapForCalibri = (0, _standard_fonts.getSupplementalGlyphMapForCalibri)();
 
-          for (charCode in SupplementalGlyphMapForCalibri) {
+          for (const charCode in SupplementalGlyphMapForCalibri) {
             map[+charCode] = SupplementalGlyphMapForCalibri[charCode];
           }
         }
@@ -1088,7 +1090,7 @@ var Font = function FontClosure() {
         this.toUnicode.forEach((charCode, unicodeCharCode) => {
           if (!this.composite) {
             var glyphName = this.differences[charCode] || this.defaultEncoding[charCode];
-            unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);
+            const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);
 
             if (unicode !== -1) {
               unicodeCharCode = unicode;
@@ -1102,7 +1104,7 @@ var Font = function FontClosure() {
           if (/Verdana/i.test(name)) {
             const GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)();
 
-            for (charCode in GlyphMapForStandardFonts) {
+            for (const charCode in GlyphMapForStandardFonts) {
               map[+charCode] = GlyphMapForStandardFonts[charCode];
             }
           }
@@ -1120,16 +1122,16 @@ var Font = function FontClosure() {
       function readTables(file, numTables) {
         const tables = Object.create(null);
         tables["OS/2"] = null;
-        tables["cmap"] = null;
-        tables["head"] = null;
-        tables["hhea"] = null;
-        tables["hmtx"] = null;
-        tables["maxp"] = null;
-        tables["name"] = null;
-        tables["post"] = null;
+        tables.cmap = null;
+        tables.head = null;
+        tables.hhea = null;
+        tables.hmtx = null;
+        tables.maxp = null;
+        tables.name = null;
+        tables.post = null;
 
         for (let i = 0; i < numTables; i++) {
-          const table = readTableEntry(font);
+          const table = readTableEntry(file);
 
           if (!VALID_TABLES.includes(table.tag)) {
             continue;
@@ -1225,11 +1227,11 @@ var Font = function FontClosure() {
           const potentialHeader = readOpenTypeHeader(ttc);
           const potentialTables = readTables(ttc, potentialHeader.numTables);
 
-          if (!potentialTables["name"]) {
+          if (!potentialTables.name) {
             throw new _util.FormatError('TrueType Collection font must contain a "name" table.');
           }
 
-          const nameTable = readNameTable(potentialTables["name"]);
+          const nameTable = readNameTable(potentialTables.name);
 
           for (let j = 0, jj = nameTable.length; j < jj; j++) {
             for (let k = 0, kk = nameTable[j].length; k < kk; k++) {
@@ -1248,7 +1250,7 @@ var Font = function FontClosure() {
         throw new _util.FormatError(`TrueType Collection does not contain "${fontName}" font.`);
       }
 
-      function readCmapTable(cmap, font, isSymbolicFont, hasEncoding) {
+      function readCmapTable(cmap, file, isSymbolicFont, hasEncoding) {
         if (!cmap) {
           (0, _util.warn)("No cmap table available.");
           return {
@@ -1260,17 +1262,17 @@ var Font = function FontClosure() {
         }
 
         var segment;
-        var start = (font.start ? font.start : 0) + cmap.offset;
-        font.pos = start;
-        font.getUint16();
-        var numTables = font.getUint16();
+        var start = (file.start ? file.start : 0) + cmap.offset;
+        file.pos = start;
+        file.skip(2);
+        var numTables = file.getUint16();
         var potentialTable;
         var canBreak = false;
 
         for (var i = 0; i < numTables; i++) {
-          var platformId = font.getUint16();
-          var encodingId = font.getUint16();
-          var offset = font.getInt32() >>> 0;
+          var platformId = file.getUint16();
+          var encodingId = file.getUint16();
+          var offset = file.getInt32() >>> 0;
           var useTable = false;
 
           if (potentialTable && potentialTable.platformId === platformId && potentialTable.encodingId === encodingId) {
@@ -1306,10 +1308,10 @@ var Font = function FontClosure() {
         }
 
         if (potentialTable) {
-          font.pos = start + potentialTable.offset;
+          file.pos = start + potentialTable.offset;
         }
 
-        if (!potentialTable || font.peekByte() === -1) {
+        if (!potentialTable || file.peekByte() === -1) {
           (0, _util.warn)("Could not find a preferred cmap table.");
           return {
             platformId: -1,
@@ -1319,16 +1321,15 @@ var Font = function FontClosure() {
           };
         }
 
-        var format = font.getUint16();
-        font.getUint16();
-        font.getUint16();
+        var format = file.getUint16();
+        file.skip(2 + 2);
         var hasShortCmap = false;
         var mappings = [];
         var j, glyphId;
 
         if (format === 0) {
           for (j = 0; j < 256; j++) {
-            var index = font.getByte();
+            var index = file.getByte();
 
             if (!index) {
               continue;
@@ -1342,32 +1343,32 @@ var Font = function FontClosure() {
 
           hasShortCmap = true;
         } else if (format === 4) {
-          var segCount = font.getUint16() >> 1;
-          font.getBytes(6);
+          var segCount = file.getUint16() >> 1;
+          file.skip(6);
           var segIndex,
               segments = [];
 
           for (segIndex = 0; segIndex < segCount; segIndex++) {
             segments.push({
-              end: font.getUint16()
+              end: file.getUint16()
             });
           }
 
-          font.getUint16();
+          file.skip(2);
 
           for (segIndex = 0; segIndex < segCount; segIndex++) {
-            segments[segIndex].start = font.getUint16();
+            segments[segIndex].start = file.getUint16();
           }
 
           for (segIndex = 0; segIndex < segCount; segIndex++) {
-            segments[segIndex].delta = font.getUint16();
+            segments[segIndex].delta = file.getUint16();
           }
 
           var offsetsCount = 0;
 
           for (segIndex = 0; segIndex < segCount; segIndex++) {
             segment = segments[segIndex];
-            var rangeOffset = font.getUint16();
+            var rangeOffset = file.getUint16();
 
             if (!rangeOffset) {
               segment.offsetIndex = -1;
@@ -1382,7 +1383,7 @@ var Font = function FontClosure() {
           var offsets = [];
 
           for (j = 0; j < offsetsCount; j++) {
-            offsets.push(font.getUint16());
+            offsets.push(file.getUint16());
           }
 
           for (segIndex = 0; segIndex < segCount; segIndex++) {
@@ -1406,11 +1407,11 @@ var Font = function FontClosure() {
             }
           }
         } else if (format === 6) {
-          var firstCode = font.getUint16();
-          var entryCount = font.getUint16();
+          var firstCode = file.getUint16();
+          var entryCount = file.getUint16();
 
           for (j = 0; j < entryCount; j++) {
-            glyphId = font.getUint16();
+            glyphId = file.getUint16();
             var charCode = firstCode + j;
             mappings.push({
               charCode,
@@ -1446,7 +1447,7 @@ var Font = function FontClosure() {
         };
       }
 
-      function sanitizeMetrics(font, header, metrics, numGlyphs, dupFirstEntry) {
+      function sanitizeMetrics(file, header, metrics, numGlyphs, dupFirstEntry) {
         if (!header) {
           if (metrics) {
             metrics.data = null;
@@ -1455,21 +1456,21 @@ var Font = function FontClosure() {
           return;
         }
 
-        font.pos = (font.start ? font.start : 0) + header.offset;
-        font.pos += 4;
-        font.pos += 2;
-        font.pos += 2;
-        font.pos += 2;
-        font.pos += 2;
-        font.pos += 2;
-        font.pos += 2;
-        font.pos += 2;
-        font.pos += 2;
-        font.pos += 2;
-        font.pos += 2;
-        font.pos += 8;
-        font.pos += 2;
-        var numOfMetrics = font.getUint16();
+        file.pos = (file.start ? file.start : 0) + header.offset;
+        file.pos += 4;
+        file.pos += 2;
+        file.pos += 2;
+        file.pos += 2;
+        file.pos += 2;
+        file.pos += 2;
+        file.pos += 2;
+        file.pos += 2;
+        file.pos += 2;
+        file.pos += 2;
+        file.pos += 2;
+        file.pos += 8;
+        file.pos += 2;
+        var numOfMetrics = file.getUint16();
 
         if (numOfMetrics > numGlyphs) {
           (0, _util.info)("The numOfMetrics (" + numOfMetrics + ") should not be " + "greater than the numGlyphs (" + numGlyphs + ")");
@@ -1735,13 +1736,13 @@ var Font = function FontClosure() {
         };
       }
 
-      function readPostScriptTable(post, properties, maxpNumGlyphs) {
+      function readPostScriptTable(post, propertiesObj, maxpNumGlyphs) {
         var start = (font.start ? font.start : 0) + post.offset;
         font.pos = start;
         var length = post.length,
             end = start + length;
         var version = font.getInt32();
-        font.getBytes(28);
+        font.skip(28);
         var glyphNames;
         var valid = true;
         var i;
@@ -1812,14 +1813,14 @@ var Font = function FontClosure() {
             (0, _util.warn)("Unknown/unsupported post table version " + version);
             valid = false;
 
-            if (properties.defaultEncoding) {
-              glyphNames = properties.defaultEncoding;
+            if (propertiesObj.defaultEncoding) {
+              glyphNames = propertiesObj.defaultEncoding;
             }
 
             break;
         }
 
-        properties.glyphNames = glyphNames;
+        propertiesObj.glyphNames = glyphNames;
         return valid;
       }
 
@@ -2195,27 +2196,27 @@ var Font = function FontClosure() {
       if (!isTrueType) {
         const isComposite = properties.composite && ((properties.cidToGidMap || []).length > 0 || !(properties.cMap instanceof _cmap.IdentityCMap));
 
-        if (header.version === "OTTO" && !isComposite || !tables["head"] || !tables["hhea"] || !tables["maxp"] || !tables["post"]) {
+        if (header.version === "OTTO" && !isComposite || !tables.head || !tables.hhea || !tables.maxp || !tables.post) {
           cffFile = new _stream.Stream(tables["CFF "].data);
           cff = new CFFFont(cffFile, properties);
           adjustWidths(properties);
           return this.convert(name, cff, properties);
         }
 
-        delete tables["glyf"];
-        delete tables["loca"];
-        delete tables["fpgm"];
-        delete tables["prep"];
+        delete tables.glyf;
+        delete tables.loca;
+        delete tables.fpgm;
+        delete tables.prep;
         delete tables["cvt "];
         this.isOpenType = true;
       } else {
-        if (!tables["loca"]) {
+        if (!tables.loca) {
           throw new _util.FormatError('Required "loca" table is not found');
         }
 
-        if (!tables["glyf"]) {
+        if (!tables.glyf) {
           (0, _util.warn)('Required "glyf" table is not found -- trying to recover.');
-          tables["glyf"] = {
+          tables.glyf = {
             tag: "glyf",
             data: new Uint8Array(0)
           };
@@ -2224,11 +2225,11 @@ var Font = function FontClosure() {
         this.isOpenType = false;
       }
 
-      if (!tables["maxp"]) {
+      if (!tables.maxp) {
         throw new _util.FormatError('Required "maxp" table is not found');
       }
 
-      font.pos = (font.start || 0) + tables["maxp"].offset;
+      font.pos = (font.start || 0) + tables.maxp.offset;
       var version = font.getInt32();
       const numGlyphs = font.getUint16();
       let numGlyphsOut = numGlyphs + 1;
@@ -2243,13 +2244,13 @@ var Font = function FontClosure() {
       var maxFunctionDefs = 0;
       var maxSizeOfInstructions = 0;
 
-      if (version >= 0x00010000 && tables["maxp"].length >= 22) {
+      if (version >= 0x00010000 && tables.maxp.length >= 22) {
         font.pos += 8;
         var maxZones = font.getUint16();
 
         if (maxZones > 2) {
-          tables["maxp"].data[14] = 0;
-          tables["maxp"].data[15] = 2;
+          tables.maxp.data[14] = 0;
+          tables.maxp.data[15] = 2;
         }
 
         font.pos += 4;
@@ -2258,65 +2259,64 @@ var Font = function FontClosure() {
         maxSizeOfInstructions = font.getUint16();
       }
 
-      tables["maxp"].data[4] = numGlyphsOut >> 8;
-      tables["maxp"].data[5] = numGlyphsOut & 255;
-      var hintsValid = sanitizeTTPrograms(tables["fpgm"], tables["prep"], tables["cvt "], maxFunctionDefs);
+      tables.maxp.data[4] = numGlyphsOut >> 8;
+      tables.maxp.data[5] = numGlyphsOut & 255;
+      var hintsValid = sanitizeTTPrograms(tables.fpgm, tables.prep, tables["cvt "], maxFunctionDefs);
 
       if (!hintsValid) {
-        delete tables["fpgm"];
-        delete tables["prep"];
+        delete tables.fpgm;
+        delete tables.prep;
         delete tables["cvt "];
       }
 
-      sanitizeMetrics(font, tables["hhea"], tables["hmtx"], numGlyphsOut, dupFirstEntry);
+      sanitizeMetrics(font, tables.hhea, tables.hmtx, numGlyphsOut, dupFirstEntry);
 
-      if (!tables["head"]) {
+      if (!tables.head) {
         throw new _util.FormatError('Required "head" table is not found');
       }
 
-      sanitizeHead(tables["head"], numGlyphs, isTrueType ? tables["loca"].length : 0);
+      sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0);
       var missingGlyphs = Object.create(null);
 
       if (isTrueType) {
-        var isGlyphLocationsLong = int16(tables["head"].data[50], tables["head"].data[51]);
-        var glyphsInfo = sanitizeGlyphLocations(tables["loca"], tables["glyf"], numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions);
+        var isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]);
+        var glyphsInfo = sanitizeGlyphLocations(tables.loca, tables.glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions);
         missingGlyphs = glyphsInfo.missingGlyphs;
 
-        if (version >= 0x00010000 && tables["maxp"].length >= 22) {
-          tables["maxp"].data[26] = glyphsInfo.maxSizeOfInstructions >> 8;
-          tables["maxp"].data[27] = glyphsInfo.maxSizeOfInstructions & 255;
+        if (version >= 0x00010000 && tables.maxp.length >= 22) {
+          tables.maxp.data[26] = glyphsInfo.maxSizeOfInstructions >> 8;
+          tables.maxp.data[27] = glyphsInfo.maxSizeOfInstructions & 255;
         }
       }
 
-      if (!tables["hhea"]) {
+      if (!tables.hhea) {
         throw new _util.FormatError('Required "hhea" table is not found');
       }
 
-      if (tables["hhea"].data[10] === 0 && tables["hhea"].data[11] === 0) {
-        tables["hhea"].data[10] = 0xff;
-        tables["hhea"].data[11] = 0xff;
+      if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) {
+        tables.hhea.data[10] = 0xff;
+        tables.hhea.data[11] = 0xff;
       }
 
       var metricsOverride = {
-        unitsPerEm: int16(tables["head"].data[18], tables["head"].data[19]),
-        yMax: int16(tables["head"].data[42], tables["head"].data[43]),
-        yMin: signedInt16(tables["head"].data[38], tables["head"].data[39]),
-        ascent: int16(tables["hhea"].data[4], tables["hhea"].data[5]),
-        descent: signedInt16(tables["hhea"].data[6], tables["hhea"].data[7])
+        unitsPerEm: int16(tables.head.data[18], tables.head.data[19]),
+        yMax: int16(tables.head.data[42], tables.head.data[43]),
+        yMin: signedInt16(tables.head.data[38], tables.head.data[39]),
+        ascent: int16(tables.hhea.data[4], tables.hhea.data[5]),
+        descent: signedInt16(tables.hhea.data[6], tables.hhea.data[7])
       };
       this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm;
       this.descent = metricsOverride.descent / metricsOverride.unitsPerEm;
 
-      if (tables["post"]) {
-        readPostScriptTable(tables["post"], properties, numGlyphs);
+      if (tables.post) {
+        readPostScriptTable(tables.post, properties, numGlyphs);
       }
 
-      tables["post"] = {
+      tables.post = {
         tag: "post",
         data: createPostTable(properties)
       };
-      var charCodeToGlyphId = [],
-          charCode;
+      const charCodeToGlyphId = [];
 
       function hasGlyph(glyphId) {
         return !missingGlyphs[glyphId];
@@ -2343,7 +2343,7 @@ var Font = function FontClosure() {
           }
         });
       } else {
-        var cmapTable = readCmapTable(tables["cmap"], font, this.isSymbolicFont, properties.hasEncoding);
+        var cmapTable = readCmapTable(tables.cmap, font, this.isSymbolicFont, properties.hasEncoding);
         var cmapPlatformId = cmapTable.platformId;
         var cmapEncodingId = cmapTable.encodingId;
         var cmapMappings = cmapTable.mappings;
@@ -2358,7 +2358,7 @@ var Font = function FontClosure() {
 
           var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
 
-          for (charCode = 0; charCode < 256; charCode++) {
+          for (let charCode = 0; charCode < 256; charCode++) {
             var glyphName, standardGlyphName;
 
             if (this.differences && charCode in this.differences) {
@@ -2412,7 +2412,7 @@ var Font = function FontClosure() {
           }
         } else {
           for (let i = 0; i < cmapMappingsLength; ++i) {
-            charCode = cmapMappings[i].charCode;
+            let charCode = cmapMappings[i].charCode;
 
             if (cmapPlatformId === 3 && charCode >= 0xf000 && charCode <= 0xf0ff) {
               charCode &= 0xff;
@@ -2435,12 +2435,12 @@ var Font = function FontClosure() {
 
       var newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId);
       this.toFontChar = newMapping.toFontChar;
-      tables["cmap"] = {
+      tables.cmap = {
         tag: "cmap",
         data: createCmapTable(newMapping.charCodeToGlyphId, numGlyphsOut)
       };
 
-      if (!tables["OS/2"] || !validateOS2Table(tables["OS/2"])) {
+      if (!tables["OS/2"] || !validateOS2Table(tables["OS/2"], font)) {
         tables["OS/2"] = {
           tag: "OS/2",
           data: createOS2Table(properties, newMapping.charCodeToGlyphId, metricsOverride)
@@ -2460,14 +2460,14 @@ var Font = function FontClosure() {
         }
       }
 
-      if (!tables["name"]) {
-        tables["name"] = {
+      if (!tables.name) {
+        tables.name = {
           tag: "name",
           data: createNameTable(this.name)
         };
       } else {
-        var namePrototype = readNameTable(tables["name"]);
-        tables["name"].data = createNameTable(name, namePrototype);
+        var namePrototype = readNameTable(tables.name);
+        tables.name.data = createNameTable(name, namePrototype);
       }
 
       var builder = new OpenTypeFileBuilder(header.version);
@@ -2552,7 +2552,7 @@ var Font = function FontClosure() {
             continue;
           }
 
-          for (var i = 0, ii = charCodes.length; i < ii; i++) {
+          for (let i = 0, ii = charCodes.length; i < ii; i++) {
             var charCode = charCodes[i];
             var charCodeToGlyphId = newMapping.charCodeToGlyphId;
             var baseFontCharCode = createCharCode(charCodeToGlyphId, baseGlyphId);
@@ -2580,7 +2580,7 @@ var Font = function FontClosure() {
         var cffWidths = font.cff ? font.cff.widths : null;
         var hmtx = "\x00\x00\x00\x00";
 
-        for (var i = 1, ii = numGlyphs; i < ii; i++) {
+        for (let i = 1, ii = numGlyphs; i < ii; i++) {
           var width = 0;
 
           if (charstrings) {
@@ -2602,10 +2602,6 @@ var Font = function FontClosure() {
     },
 
     get spaceWidth() {
-      if ("_shadowWidth" in this) {
-        return this._shadowWidth;
-      }
-
       var possibleSpaceReplacements = ["space", "minus", "one", "i", "I"];
       var width;
 
@@ -2621,10 +2617,8 @@ var Font = function FontClosure() {
         var glyphUnicode = glyphsUnicodeMap[glyphName];
         var charcode = 0;
 
-        if (this.composite) {
-          if (this.cMap.contains(glyphUnicode)) {
-            charcode = this.cMap.lookup(glyphUnicode);
-          }
+        if (this.composite && this.cMap.contains(glyphUnicode)) {
+          charcode = this.cMap.lookup(glyphUnicode);
         }
 
         if (!charcode && this.toUnicode) {
@@ -2643,8 +2637,7 @@ var Font = function FontClosure() {
       }
 
       width = width || this.defaultWidth;
-      this._shadowWidth = width;
-      return width;
+      return (0, _util.shadow)(this, "spaceWidth", width);
     },
 
     charToGlyph: function Font_charToGlyph(charcode, isSpace) {
@@ -2664,7 +2657,7 @@ var Font = function FontClosure() {
         unicode = String.fromCharCode(unicode);
       }
 
-      var isInFont = charcode in this.toFontChar;
+      var isInFont = (charcode in this.toFontChar);
       fontCharCode = this.toFontChar[charcode] || charcode;
 
       if (this.missingFile) {
@@ -2693,7 +2686,16 @@ var Font = function FontClosure() {
         };
       }
 
-      var fontChar = typeof fontCharCode === "number" ? String.fromCodePoint(fontCharCode) : "";
+      let fontChar = "";
+
+      if (typeof fontCharCode === "number") {
+        if (fontCharCode <= 0x10ffff) {
+          fontChar = String.fromCodePoint(fontCharCode);
+        } else {
+          (0, _util.warn)(`charToGlyph - invalid fontCharCode: ${fontCharCode}`);
+        }
+      }
+
       var glyph = this.glyphCache[charcode];
 
       if (!glyph || !glyph.matchesForCache(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont)) {
@@ -2768,11 +2770,13 @@ var ErrorFont = function ErrorFontClosure() {
     charsToGlyphs: function ErrorFont_charsToGlyphs() {
       return [];
     },
-    exportData: function ErrorFont_exportData() {
+
+    exportData(extraProperties = false) {
       return {
         error: this.error
       };
     }
+
   };
   return ErrorFont;
 }();
@@ -2976,8 +2980,8 @@ var Type1Font = function Type1FontClosure() {
     var eexecBlockParser = new _type1_parser.Type1Parser(eexecBlock.stream, true, SEAC_ANALYSIS_ENABLED);
     var data = eexecBlockParser.extractFontProgram(properties);
 
-    for (var info in data.properties) {
-      properties[info] = data.properties[info];
+    for (const key in data.properties) {
+      properties[key] = data.properties[key];
     }
 
     var charstrings = data.charstrings;
@@ -3005,6 +3009,18 @@ var Type1Font = function Type1FontClosure() {
     },
     getGlyphMapping: function Type1Font_getGlyphMapping(properties) {
       var charstrings = this.charstrings;
+
+      if (properties.composite) {
+        const charCodeToGlyphId = Object.create(null);
+
+        for (let glyphId = 0, charstringsLen = charstrings.length; glyphId < charstringsLen; glyphId++) {
+          const charCode = properties.cMap.charCodeOf(glyphId);
+          charCodeToGlyphId[charCode] = glyphId + 1;
+        }
+
+        return charCodeToGlyphId;
+      }
+
       var glyphNames = [".notdef"],
           glyphId;
 

+ 4 - 5
lib/core/function.js

@@ -73,8 +73,8 @@ function toNumberArray(arr) {
     if (typeof arr[i] !== "number") {
       const result = new Array(length);
 
-      for (let i = 0; i < length; i++) {
-        result[i] = +arr[i];
+      for (let j = 0; j < length; j++) {
+        result[j] = +arr[j];
       }
 
       return result;
@@ -1162,7 +1162,6 @@ var PostScriptCompiler = function PostScriptCompilerClosure() {
   PostScriptCompiler.prototype = {
     compile: function PostScriptCompiler_compile(code, domain, range) {
       var stack = [];
-      var i, ii;
       var instructions = [];
       var inputSize = domain.length >> 1,
           outputSize = range.length >> 1;
@@ -1170,11 +1169,11 @@ var PostScriptCompiler = function PostScriptCompilerClosure() {
       var n, j;
       var num1, num2, ast1, ast2, tmpVar, item;
 
-      for (i = 0; i < inputSize; i++) {
+      for (let i = 0; i < inputSize; i++) {
         stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1]));
       }
 
-      for (i = 0, ii = code.length; i < ii; i++) {
+      for (let i = 0, ii = code.length; i < ii; i++) {
         item = code[i];
 
         if (typeof item === "number") {

+ 4523 - 4523
lib/core/glyphlist.js

@@ -24,4532 +24,4532 @@
 var getLookupTableFactory = require("./core_utils.js").getLookupTableFactory;
 
 var getGlyphsUnicode = getLookupTableFactory(function (t) {
-  t["A"] = 0x0041;
-  t["AE"] = 0x00c6;
-  t["AEacute"] = 0x01fc;
-  t["AEmacron"] = 0x01e2;
-  t["AEsmall"] = 0xf7e6;
-  t["Aacute"] = 0x00c1;
-  t["Aacutesmall"] = 0xf7e1;
-  t["Abreve"] = 0x0102;
-  t["Abreveacute"] = 0x1eae;
-  t["Abrevecyrillic"] = 0x04d0;
-  t["Abrevedotbelow"] = 0x1eb6;
-  t["Abrevegrave"] = 0x1eb0;
-  t["Abrevehookabove"] = 0x1eb2;
-  t["Abrevetilde"] = 0x1eb4;
-  t["Acaron"] = 0x01cd;
-  t["Acircle"] = 0x24b6;
-  t["Acircumflex"] = 0x00c2;
-  t["Acircumflexacute"] = 0x1ea4;
-  t["Acircumflexdotbelow"] = 0x1eac;
-  t["Acircumflexgrave"] = 0x1ea6;
-  t["Acircumflexhookabove"] = 0x1ea8;
-  t["Acircumflexsmall"] = 0xf7e2;
-  t["Acircumflextilde"] = 0x1eaa;
-  t["Acute"] = 0xf6c9;
-  t["Acutesmall"] = 0xf7b4;
-  t["Acyrillic"] = 0x0410;
-  t["Adblgrave"] = 0x0200;
-  t["Adieresis"] = 0x00c4;
-  t["Adieresiscyrillic"] = 0x04d2;
-  t["Adieresismacron"] = 0x01de;
-  t["Adieresissmall"] = 0xf7e4;
-  t["Adotbelow"] = 0x1ea0;
-  t["Adotmacron"] = 0x01e0;
-  t["Agrave"] = 0x00c0;
-  t["Agravesmall"] = 0xf7e0;
-  t["Ahookabove"] = 0x1ea2;
-  t["Aiecyrillic"] = 0x04d4;
-  t["Ainvertedbreve"] = 0x0202;
-  t["Alpha"] = 0x0391;
-  t["Alphatonos"] = 0x0386;
-  t["Amacron"] = 0x0100;
-  t["Amonospace"] = 0xff21;
-  t["Aogonek"] = 0x0104;
-  t["Aring"] = 0x00c5;
-  t["Aringacute"] = 0x01fa;
-  t["Aringbelow"] = 0x1e00;
-  t["Aringsmall"] = 0xf7e5;
-  t["Asmall"] = 0xf761;
-  t["Atilde"] = 0x00c3;
-  t["Atildesmall"] = 0xf7e3;
-  t["Aybarmenian"] = 0x0531;
-  t["B"] = 0x0042;
-  t["Bcircle"] = 0x24b7;
-  t["Bdotaccent"] = 0x1e02;
-  t["Bdotbelow"] = 0x1e04;
-  t["Becyrillic"] = 0x0411;
-  t["Benarmenian"] = 0x0532;
-  t["Beta"] = 0x0392;
-  t["Bhook"] = 0x0181;
-  t["Blinebelow"] = 0x1e06;
-  t["Bmonospace"] = 0xff22;
-  t["Brevesmall"] = 0xf6f4;
-  t["Bsmall"] = 0xf762;
-  t["Btopbar"] = 0x0182;
-  t["C"] = 0x0043;
-  t["Caarmenian"] = 0x053e;
-  t["Cacute"] = 0x0106;
-  t["Caron"] = 0xf6ca;
-  t["Caronsmall"] = 0xf6f5;
-  t["Ccaron"] = 0x010c;
-  t["Ccedilla"] = 0x00c7;
-  t["Ccedillaacute"] = 0x1e08;
-  t["Ccedillasmall"] = 0xf7e7;
-  t["Ccircle"] = 0x24b8;
-  t["Ccircumflex"] = 0x0108;
-  t["Cdot"] = 0x010a;
-  t["Cdotaccent"] = 0x010a;
-  t["Cedillasmall"] = 0xf7b8;
-  t["Chaarmenian"] = 0x0549;
-  t["Cheabkhasiancyrillic"] = 0x04bc;
-  t["Checyrillic"] = 0x0427;
-  t["Chedescenderabkhasiancyrillic"] = 0x04be;
-  t["Chedescendercyrillic"] = 0x04b6;
-  t["Chedieresiscyrillic"] = 0x04f4;
-  t["Cheharmenian"] = 0x0543;
-  t["Chekhakassiancyrillic"] = 0x04cb;
-  t["Cheverticalstrokecyrillic"] = 0x04b8;
-  t["Chi"] = 0x03a7;
-  t["Chook"] = 0x0187;
-  t["Circumflexsmall"] = 0xf6f6;
-  t["Cmonospace"] = 0xff23;
-  t["Coarmenian"] = 0x0551;
-  t["Csmall"] = 0xf763;
-  t["D"] = 0x0044;
-  t["DZ"] = 0x01f1;
-  t["DZcaron"] = 0x01c4;
-  t["Daarmenian"] = 0x0534;
-  t["Dafrican"] = 0x0189;
-  t["Dcaron"] = 0x010e;
-  t["Dcedilla"] = 0x1e10;
-  t["Dcircle"] = 0x24b9;
-  t["Dcircumflexbelow"] = 0x1e12;
-  t["Dcroat"] = 0x0110;
-  t["Ddotaccent"] = 0x1e0a;
-  t["Ddotbelow"] = 0x1e0c;
-  t["Decyrillic"] = 0x0414;
-  t["Deicoptic"] = 0x03ee;
-  t["Delta"] = 0x2206;
-  t["Deltagreek"] = 0x0394;
-  t["Dhook"] = 0x018a;
-  t["Dieresis"] = 0xf6cb;
-  t["DieresisAcute"] = 0xf6cc;
-  t["DieresisGrave"] = 0xf6cd;
-  t["Dieresissmall"] = 0xf7a8;
-  t["Digammagreek"] = 0x03dc;
-  t["Djecyrillic"] = 0x0402;
-  t["Dlinebelow"] = 0x1e0e;
-  t["Dmonospace"] = 0xff24;
-  t["Dotaccentsmall"] = 0xf6f7;
-  t["Dslash"] = 0x0110;
-  t["Dsmall"] = 0xf764;
-  t["Dtopbar"] = 0x018b;
-  t["Dz"] = 0x01f2;
-  t["Dzcaron"] = 0x01c5;
-  t["Dzeabkhasiancyrillic"] = 0x04e0;
-  t["Dzecyrillic"] = 0x0405;
-  t["Dzhecyrillic"] = 0x040f;
-  t["E"] = 0x0045;
-  t["Eacute"] = 0x00c9;
-  t["Eacutesmall"] = 0xf7e9;
-  t["Ebreve"] = 0x0114;
-  t["Ecaron"] = 0x011a;
-  t["Ecedillabreve"] = 0x1e1c;
-  t["Echarmenian"] = 0x0535;
-  t["Ecircle"] = 0x24ba;
-  t["Ecircumflex"] = 0x00ca;
-  t["Ecircumflexacute"] = 0x1ebe;
-  t["Ecircumflexbelow"] = 0x1e18;
-  t["Ecircumflexdotbelow"] = 0x1ec6;
-  t["Ecircumflexgrave"] = 0x1ec0;
-  t["Ecircumflexhookabove"] = 0x1ec2;
-  t["Ecircumflexsmall"] = 0xf7ea;
-  t["Ecircumflextilde"] = 0x1ec4;
-  t["Ecyrillic"] = 0x0404;
-  t["Edblgrave"] = 0x0204;
-  t["Edieresis"] = 0x00cb;
-  t["Edieresissmall"] = 0xf7eb;
-  t["Edot"] = 0x0116;
-  t["Edotaccent"] = 0x0116;
-  t["Edotbelow"] = 0x1eb8;
-  t["Efcyrillic"] = 0x0424;
-  t["Egrave"] = 0x00c8;
-  t["Egravesmall"] = 0xf7e8;
-  t["Eharmenian"] = 0x0537;
-  t["Ehookabove"] = 0x1eba;
-  t["Eightroman"] = 0x2167;
-  t["Einvertedbreve"] = 0x0206;
-  t["Eiotifiedcyrillic"] = 0x0464;
-  t["Elcyrillic"] = 0x041b;
-  t["Elevenroman"] = 0x216a;
-  t["Emacron"] = 0x0112;
-  t["Emacronacute"] = 0x1e16;
-  t["Emacrongrave"] = 0x1e14;
-  t["Emcyrillic"] = 0x041c;
-  t["Emonospace"] = 0xff25;
-  t["Encyrillic"] = 0x041d;
-  t["Endescendercyrillic"] = 0x04a2;
-  t["Eng"] = 0x014a;
-  t["Enghecyrillic"] = 0x04a4;
-  t["Enhookcyrillic"] = 0x04c7;
-  t["Eogonek"] = 0x0118;
-  t["Eopen"] = 0x0190;
-  t["Epsilon"] = 0x0395;
-  t["Epsilontonos"] = 0x0388;
-  t["Ercyrillic"] = 0x0420;
-  t["Ereversed"] = 0x018e;
-  t["Ereversedcyrillic"] = 0x042d;
-  t["Escyrillic"] = 0x0421;
-  t["Esdescendercyrillic"] = 0x04aa;
-  t["Esh"] = 0x01a9;
-  t["Esmall"] = 0xf765;
-  t["Eta"] = 0x0397;
-  t["Etarmenian"] = 0x0538;
-  t["Etatonos"] = 0x0389;
-  t["Eth"] = 0x00d0;
-  t["Ethsmall"] = 0xf7f0;
-  t["Etilde"] = 0x1ebc;
-  t["Etildebelow"] = 0x1e1a;
-  t["Euro"] = 0x20ac;
-  t["Ezh"] = 0x01b7;
-  t["Ezhcaron"] = 0x01ee;
-  t["Ezhreversed"] = 0x01b8;
-  t["F"] = 0x0046;
-  t["Fcircle"] = 0x24bb;
-  t["Fdotaccent"] = 0x1e1e;
-  t["Feharmenian"] = 0x0556;
-  t["Feicoptic"] = 0x03e4;
-  t["Fhook"] = 0x0191;
-  t["Fitacyrillic"] = 0x0472;
-  t["Fiveroman"] = 0x2164;
-  t["Fmonospace"] = 0xff26;
-  t["Fourroman"] = 0x2163;
-  t["Fsmall"] = 0xf766;
-  t["G"] = 0x0047;
-  t["GBsquare"] = 0x3387;
-  t["Gacute"] = 0x01f4;
-  t["Gamma"] = 0x0393;
-  t["Gammaafrican"] = 0x0194;
-  t["Gangiacoptic"] = 0x03ea;
-  t["Gbreve"] = 0x011e;
-  t["Gcaron"] = 0x01e6;
-  t["Gcedilla"] = 0x0122;
-  t["Gcircle"] = 0x24bc;
-  t["Gcircumflex"] = 0x011c;
-  t["Gcommaaccent"] = 0x0122;
-  t["Gdot"] = 0x0120;
-  t["Gdotaccent"] = 0x0120;
-  t["Gecyrillic"] = 0x0413;
-  t["Ghadarmenian"] = 0x0542;
-  t["Ghemiddlehookcyrillic"] = 0x0494;
-  t["Ghestrokecyrillic"] = 0x0492;
-  t["Gheupturncyrillic"] = 0x0490;
-  t["Ghook"] = 0x0193;
-  t["Gimarmenian"] = 0x0533;
-  t["Gjecyrillic"] = 0x0403;
-  t["Gmacron"] = 0x1e20;
-  t["Gmonospace"] = 0xff27;
-  t["Grave"] = 0xf6ce;
-  t["Gravesmall"] = 0xf760;
-  t["Gsmall"] = 0xf767;
-  t["Gsmallhook"] = 0x029b;
-  t["Gstroke"] = 0x01e4;
-  t["H"] = 0x0048;
-  t["H18533"] = 0x25cf;
-  t["H18543"] = 0x25aa;
-  t["H18551"] = 0x25ab;
-  t["H22073"] = 0x25a1;
-  t["HPsquare"] = 0x33cb;
-  t["Haabkhasiancyrillic"] = 0x04a8;
-  t["Hadescendercyrillic"] = 0x04b2;
-  t["Hardsigncyrillic"] = 0x042a;
-  t["Hbar"] = 0x0126;
-  t["Hbrevebelow"] = 0x1e2a;
-  t["Hcedilla"] = 0x1e28;
-  t["Hcircle"] = 0x24bd;
-  t["Hcircumflex"] = 0x0124;
-  t["Hdieresis"] = 0x1e26;
-  t["Hdotaccent"] = 0x1e22;
-  t["Hdotbelow"] = 0x1e24;
-  t["Hmonospace"] = 0xff28;
-  t["Hoarmenian"] = 0x0540;
-  t["Horicoptic"] = 0x03e8;
-  t["Hsmall"] = 0xf768;
-  t["Hungarumlaut"] = 0xf6cf;
-  t["Hungarumlautsmall"] = 0xf6f8;
-  t["Hzsquare"] = 0x3390;
-  t["I"] = 0x0049;
-  t["IAcyrillic"] = 0x042f;
-  t["IJ"] = 0x0132;
-  t["IUcyrillic"] = 0x042e;
-  t["Iacute"] = 0x00cd;
-  t["Iacutesmall"] = 0xf7ed;
-  t["Ibreve"] = 0x012c;
-  t["Icaron"] = 0x01cf;
-  t["Icircle"] = 0x24be;
-  t["Icircumflex"] = 0x00ce;
-  t["Icircumflexsmall"] = 0xf7ee;
-  t["Icyrillic"] = 0x0406;
-  t["Idblgrave"] = 0x0208;
-  t["Idieresis"] = 0x00cf;
-  t["Idieresisacute"] = 0x1e2e;
-  t["Idieresiscyrillic"] = 0x04e4;
-  t["Idieresissmall"] = 0xf7ef;
-  t["Idot"] = 0x0130;
-  t["Idotaccent"] = 0x0130;
-  t["Idotbelow"] = 0x1eca;
-  t["Iebrevecyrillic"] = 0x04d6;
-  t["Iecyrillic"] = 0x0415;
-  t["Ifraktur"] = 0x2111;
-  t["Igrave"] = 0x00cc;
-  t["Igravesmall"] = 0xf7ec;
-  t["Ihookabove"] = 0x1ec8;
-  t["Iicyrillic"] = 0x0418;
-  t["Iinvertedbreve"] = 0x020a;
-  t["Iishortcyrillic"] = 0x0419;
-  t["Imacron"] = 0x012a;
-  t["Imacroncyrillic"] = 0x04e2;
-  t["Imonospace"] = 0xff29;
-  t["Iniarmenian"] = 0x053b;
-  t["Iocyrillic"] = 0x0401;
-  t["Iogonek"] = 0x012e;
-  t["Iota"] = 0x0399;
-  t["Iotaafrican"] = 0x0196;
-  t["Iotadieresis"] = 0x03aa;
-  t["Iotatonos"] = 0x038a;
-  t["Ismall"] = 0xf769;
-  t["Istroke"] = 0x0197;
-  t["Itilde"] = 0x0128;
-  t["Itildebelow"] = 0x1e2c;
-  t["Izhitsacyrillic"] = 0x0474;
-  t["Izhitsadblgravecyrillic"] = 0x0476;
-  t["J"] = 0x004a;
-  t["Jaarmenian"] = 0x0541;
-  t["Jcircle"] = 0x24bf;
-  t["Jcircumflex"] = 0x0134;
-  t["Jecyrillic"] = 0x0408;
-  t["Jheharmenian"] = 0x054b;
-  t["Jmonospace"] = 0xff2a;
-  t["Jsmall"] = 0xf76a;
-  t["K"] = 0x004b;
-  t["KBsquare"] = 0x3385;
-  t["KKsquare"] = 0x33cd;
-  t["Kabashkircyrillic"] = 0x04a0;
-  t["Kacute"] = 0x1e30;
-  t["Kacyrillic"] = 0x041a;
-  t["Kadescendercyrillic"] = 0x049a;
-  t["Kahookcyrillic"] = 0x04c3;
-  t["Kappa"] = 0x039a;
-  t["Kastrokecyrillic"] = 0x049e;
-  t["Kaverticalstrokecyrillic"] = 0x049c;
-  t["Kcaron"] = 0x01e8;
-  t["Kcedilla"] = 0x0136;
-  t["Kcircle"] = 0x24c0;
-  t["Kcommaaccent"] = 0x0136;
-  t["Kdotbelow"] = 0x1e32;
-  t["Keharmenian"] = 0x0554;
-  t["Kenarmenian"] = 0x053f;
-  t["Khacyrillic"] = 0x0425;
-  t["Kheicoptic"] = 0x03e6;
-  t["Khook"] = 0x0198;
-  t["Kjecyrillic"] = 0x040c;
-  t["Klinebelow"] = 0x1e34;
-  t["Kmonospace"] = 0xff2b;
-  t["Koppacyrillic"] = 0x0480;
-  t["Koppagreek"] = 0x03de;
-  t["Ksicyrillic"] = 0x046e;
-  t["Ksmall"] = 0xf76b;
-  t["L"] = 0x004c;
-  t["LJ"] = 0x01c7;
-  t["LL"] = 0xf6bf;
-  t["Lacute"] = 0x0139;
-  t["Lambda"] = 0x039b;
-  t["Lcaron"] = 0x013d;
-  t["Lcedilla"] = 0x013b;
-  t["Lcircle"] = 0x24c1;
-  t["Lcircumflexbelow"] = 0x1e3c;
-  t["Lcommaaccent"] = 0x013b;
-  t["Ldot"] = 0x013f;
-  t["Ldotaccent"] = 0x013f;
-  t["Ldotbelow"] = 0x1e36;
-  t["Ldotbelowmacron"] = 0x1e38;
-  t["Liwnarmenian"] = 0x053c;
-  t["Lj"] = 0x01c8;
-  t["Ljecyrillic"] = 0x0409;
-  t["Llinebelow"] = 0x1e3a;
-  t["Lmonospace"] = 0xff2c;
-  t["Lslash"] = 0x0141;
-  t["Lslashsmall"] = 0xf6f9;
-  t["Lsmall"] = 0xf76c;
-  t["M"] = 0x004d;
-  t["MBsquare"] = 0x3386;
-  t["Macron"] = 0xf6d0;
-  t["Macronsmall"] = 0xf7af;
-  t["Macute"] = 0x1e3e;
-  t["Mcircle"] = 0x24c2;
-  t["Mdotaccent"] = 0x1e40;
-  t["Mdotbelow"] = 0x1e42;
-  t["Menarmenian"] = 0x0544;
-  t["Mmonospace"] = 0xff2d;
-  t["Msmall"] = 0xf76d;
-  t["Mturned"] = 0x019c;
-  t["Mu"] = 0x039c;
-  t["N"] = 0x004e;
-  t["NJ"] = 0x01ca;
-  t["Nacute"] = 0x0143;
-  t["Ncaron"] = 0x0147;
-  t["Ncedilla"] = 0x0145;
-  t["Ncircle"] = 0x24c3;
-  t["Ncircumflexbelow"] = 0x1e4a;
-  t["Ncommaaccent"] = 0x0145;
-  t["Ndotaccent"] = 0x1e44;
-  t["Ndotbelow"] = 0x1e46;
-  t["Nhookleft"] = 0x019d;
-  t["Nineroman"] = 0x2168;
-  t["Nj"] = 0x01cb;
-  t["Njecyrillic"] = 0x040a;
-  t["Nlinebelow"] = 0x1e48;
-  t["Nmonospace"] = 0xff2e;
-  t["Nowarmenian"] = 0x0546;
-  t["Nsmall"] = 0xf76e;
-  t["Ntilde"] = 0x00d1;
-  t["Ntildesmall"] = 0xf7f1;
-  t["Nu"] = 0x039d;
-  t["O"] = 0x004f;
-  t["OE"] = 0x0152;
-  t["OEsmall"] = 0xf6fa;
-  t["Oacute"] = 0x00d3;
-  t["Oacutesmall"] = 0xf7f3;
-  t["Obarredcyrillic"] = 0x04e8;
-  t["Obarreddieresiscyrillic"] = 0x04ea;
-  t["Obreve"] = 0x014e;
-  t["Ocaron"] = 0x01d1;
-  t["Ocenteredtilde"] = 0x019f;
-  t["Ocircle"] = 0x24c4;
-  t["Ocircumflex"] = 0x00d4;
-  t["Ocircumflexacute"] = 0x1ed0;
-  t["Ocircumflexdotbelow"] = 0x1ed8;
-  t["Ocircumflexgrave"] = 0x1ed2;
-  t["Ocircumflexhookabove"] = 0x1ed4;
-  t["Ocircumflexsmall"] = 0xf7f4;
-  t["Ocircumflextilde"] = 0x1ed6;
-  t["Ocyrillic"] = 0x041e;
-  t["Odblacute"] = 0x0150;
-  t["Odblgrave"] = 0x020c;
-  t["Odieresis"] = 0x00d6;
-  t["Odieresiscyrillic"] = 0x04e6;
-  t["Odieresissmall"] = 0xf7f6;
-  t["Odotbelow"] = 0x1ecc;
-  t["Ogoneksmall"] = 0xf6fb;
-  t["Ograve"] = 0x00d2;
-  t["Ogravesmall"] = 0xf7f2;
-  t["Oharmenian"] = 0x0555;
-  t["Ohm"] = 0x2126;
-  t["Ohookabove"] = 0x1ece;
-  t["Ohorn"] = 0x01a0;
-  t["Ohornacute"] = 0x1eda;
-  t["Ohorndotbelow"] = 0x1ee2;
-  t["Ohorngrave"] = 0x1edc;
-  t["Ohornhookabove"] = 0x1ede;
-  t["Ohorntilde"] = 0x1ee0;
-  t["Ohungarumlaut"] = 0x0150;
-  t["Oi"] = 0x01a2;
-  t["Oinvertedbreve"] = 0x020e;
-  t["Omacron"] = 0x014c;
-  t["Omacronacute"] = 0x1e52;
-  t["Omacrongrave"] = 0x1e50;
-  t["Omega"] = 0x2126;
-  t["Omegacyrillic"] = 0x0460;
-  t["Omegagreek"] = 0x03a9;
-  t["Omegaroundcyrillic"] = 0x047a;
-  t["Omegatitlocyrillic"] = 0x047c;
-  t["Omegatonos"] = 0x038f;
-  t["Omicron"] = 0x039f;
-  t["Omicrontonos"] = 0x038c;
-  t["Omonospace"] = 0xff2f;
-  t["Oneroman"] = 0x2160;
-  t["Oogonek"] = 0x01ea;
-  t["Oogonekmacron"] = 0x01ec;
-  t["Oopen"] = 0x0186;
-  t["Oslash"] = 0x00d8;
-  t["Oslashacute"] = 0x01fe;
-  t["Oslashsmall"] = 0xf7f8;
-  t["Osmall"] = 0xf76f;
-  t["Ostrokeacute"] = 0x01fe;
-  t["Otcyrillic"] = 0x047e;
-  t["Otilde"] = 0x00d5;
-  t["Otildeacute"] = 0x1e4c;
-  t["Otildedieresis"] = 0x1e4e;
-  t["Otildesmall"] = 0xf7f5;
-  t["P"] = 0x0050;
-  t["Pacute"] = 0x1e54;
-  t["Pcircle"] = 0x24c5;
-  t["Pdotaccent"] = 0x1e56;
-  t["Pecyrillic"] = 0x041f;
-  t["Peharmenian"] = 0x054a;
-  t["Pemiddlehookcyrillic"] = 0x04a6;
-  t["Phi"] = 0x03a6;
-  t["Phook"] = 0x01a4;
-  t["Pi"] = 0x03a0;
-  t["Piwrarmenian"] = 0x0553;
-  t["Pmonospace"] = 0xff30;
-  t["Psi"] = 0x03a8;
-  t["Psicyrillic"] = 0x0470;
-  t["Psmall"] = 0xf770;
-  t["Q"] = 0x0051;
-  t["Qcircle"] = 0x24c6;
-  t["Qmonospace"] = 0xff31;
-  t["Qsmall"] = 0xf771;
-  t["R"] = 0x0052;
-  t["Raarmenian"] = 0x054c;
-  t["Racute"] = 0x0154;
-  t["Rcaron"] = 0x0158;
-  t["Rcedilla"] = 0x0156;
-  t["Rcircle"] = 0x24c7;
-  t["Rcommaaccent"] = 0x0156;
-  t["Rdblgrave"] = 0x0210;
-  t["Rdotaccent"] = 0x1e58;
-  t["Rdotbelow"] = 0x1e5a;
-  t["Rdotbelowmacron"] = 0x1e5c;
-  t["Reharmenian"] = 0x0550;
-  t["Rfraktur"] = 0x211c;
-  t["Rho"] = 0x03a1;
-  t["Ringsmall"] = 0xf6fc;
-  t["Rinvertedbreve"] = 0x0212;
-  t["Rlinebelow"] = 0x1e5e;
-  t["Rmonospace"] = 0xff32;
-  t["Rsmall"] = 0xf772;
-  t["Rsmallinverted"] = 0x0281;
-  t["Rsmallinvertedsuperior"] = 0x02b6;
-  t["S"] = 0x0053;
-  t["SF010000"] = 0x250c;
-  t["SF020000"] = 0x2514;
-  t["SF030000"] = 0x2510;
-  t["SF040000"] = 0x2518;
-  t["SF050000"] = 0x253c;
-  t["SF060000"] = 0x252c;
-  t["SF070000"] = 0x2534;
-  t["SF080000"] = 0x251c;
-  t["SF090000"] = 0x2524;
-  t["SF100000"] = 0x2500;
-  t["SF110000"] = 0x2502;
-  t["SF190000"] = 0x2561;
-  t["SF200000"] = 0x2562;
-  t["SF210000"] = 0x2556;
-  t["SF220000"] = 0x2555;
-  t["SF230000"] = 0x2563;
-  t["SF240000"] = 0x2551;
-  t["SF250000"] = 0x2557;
-  t["SF260000"] = 0x255d;
-  t["SF270000"] = 0x255c;
-  t["SF280000"] = 0x255b;
-  t["SF360000"] = 0x255e;
-  t["SF370000"] = 0x255f;
-  t["SF380000"] = 0x255a;
-  t["SF390000"] = 0x2554;
-  t["SF400000"] = 0x2569;
-  t["SF410000"] = 0x2566;
-  t["SF420000"] = 0x2560;
-  t["SF430000"] = 0x2550;
-  t["SF440000"] = 0x256c;
-  t["SF450000"] = 0x2567;
-  t["SF460000"] = 0x2568;
-  t["SF470000"] = 0x2564;
-  t["SF480000"] = 0x2565;
-  t["SF490000"] = 0x2559;
-  t["SF500000"] = 0x2558;
-  t["SF510000"] = 0x2552;
-  t["SF520000"] = 0x2553;
-  t["SF530000"] = 0x256b;
-  t["SF540000"] = 0x256a;
-  t["Sacute"] = 0x015a;
-  t["Sacutedotaccent"] = 0x1e64;
-  t["Sampigreek"] = 0x03e0;
-  t["Scaron"] = 0x0160;
-  t["Scarondotaccent"] = 0x1e66;
-  t["Scaronsmall"] = 0xf6fd;
-  t["Scedilla"] = 0x015e;
-  t["Schwa"] = 0x018f;
-  t["Schwacyrillic"] = 0x04d8;
-  t["Schwadieresiscyrillic"] = 0x04da;
-  t["Scircle"] = 0x24c8;
-  t["Scircumflex"] = 0x015c;
-  t["Scommaaccent"] = 0x0218;
-  t["Sdotaccent"] = 0x1e60;
-  t["Sdotbelow"] = 0x1e62;
-  t["Sdotbelowdotaccent"] = 0x1e68;
-  t["Seharmenian"] = 0x054d;
-  t["Sevenroman"] = 0x2166;
-  t["Shaarmenian"] = 0x0547;
-  t["Shacyrillic"] = 0x0428;
-  t["Shchacyrillic"] = 0x0429;
-  t["Sheicoptic"] = 0x03e2;
-  t["Shhacyrillic"] = 0x04ba;
-  t["Shimacoptic"] = 0x03ec;
-  t["Sigma"] = 0x03a3;
-  t["Sixroman"] = 0x2165;
-  t["Smonospace"] = 0xff33;
-  t["Softsigncyrillic"] = 0x042c;
-  t["Ssmall"] = 0xf773;
-  t["Stigmagreek"] = 0x03da;
-  t["T"] = 0x0054;
-  t["Tau"] = 0x03a4;
-  t["Tbar"] = 0x0166;
-  t["Tcaron"] = 0x0164;
-  t["Tcedilla"] = 0x0162;
-  t["Tcircle"] = 0x24c9;
-  t["Tcircumflexbelow"] = 0x1e70;
-  t["Tcommaaccent"] = 0x0162;
-  t["Tdotaccent"] = 0x1e6a;
-  t["Tdotbelow"] = 0x1e6c;
-  t["Tecyrillic"] = 0x0422;
-  t["Tedescendercyrillic"] = 0x04ac;
-  t["Tenroman"] = 0x2169;
-  t["Tetsecyrillic"] = 0x04b4;
-  t["Theta"] = 0x0398;
-  t["Thook"] = 0x01ac;
-  t["Thorn"] = 0x00de;
-  t["Thornsmall"] = 0xf7fe;
-  t["Threeroman"] = 0x2162;
-  t["Tildesmall"] = 0xf6fe;
-  t["Tiwnarmenian"] = 0x054f;
-  t["Tlinebelow"] = 0x1e6e;
-  t["Tmonospace"] = 0xff34;
-  t["Toarmenian"] = 0x0539;
-  t["Tonefive"] = 0x01bc;
-  t["Tonesix"] = 0x0184;
-  t["Tonetwo"] = 0x01a7;
-  t["Tretroflexhook"] = 0x01ae;
-  t["Tsecyrillic"] = 0x0426;
-  t["Tshecyrillic"] = 0x040b;
-  t["Tsmall"] = 0xf774;
-  t["Twelveroman"] = 0x216b;
-  t["Tworoman"] = 0x2161;
-  t["U"] = 0x0055;
-  t["Uacute"] = 0x00da;
-  t["Uacutesmall"] = 0xf7fa;
-  t["Ubreve"] = 0x016c;
-  t["Ucaron"] = 0x01d3;
-  t["Ucircle"] = 0x24ca;
-  t["Ucircumflex"] = 0x00db;
-  t["Ucircumflexbelow"] = 0x1e76;
-  t["Ucircumflexsmall"] = 0xf7fb;
-  t["Ucyrillic"] = 0x0423;
-  t["Udblacute"] = 0x0170;
-  t["Udblgrave"] = 0x0214;
-  t["Udieresis"] = 0x00dc;
-  t["Udieresisacute"] = 0x01d7;
-  t["Udieresisbelow"] = 0x1e72;
-  t["Udieresiscaron"] = 0x01d9;
-  t["Udieresiscyrillic"] = 0x04f0;
-  t["Udieresisgrave"] = 0x01db;
-  t["Udieresismacron"] = 0x01d5;
-  t["Udieresissmall"] = 0xf7fc;
-  t["Udotbelow"] = 0x1ee4;
-  t["Ugrave"] = 0x00d9;
-  t["Ugravesmall"] = 0xf7f9;
-  t["Uhookabove"] = 0x1ee6;
-  t["Uhorn"] = 0x01af;
-  t["Uhornacute"] = 0x1ee8;
-  t["Uhorndotbelow"] = 0x1ef0;
-  t["Uhorngrave"] = 0x1eea;
-  t["Uhornhookabove"] = 0x1eec;
-  t["Uhorntilde"] = 0x1eee;
-  t["Uhungarumlaut"] = 0x0170;
-  t["Uhungarumlautcyrillic"] = 0x04f2;
-  t["Uinvertedbreve"] = 0x0216;
-  t["Ukcyrillic"] = 0x0478;
-  t["Umacron"] = 0x016a;
-  t["Umacroncyrillic"] = 0x04ee;
-  t["Umacrondieresis"] = 0x1e7a;
-  t["Umonospace"] = 0xff35;
-  t["Uogonek"] = 0x0172;
-  t["Upsilon"] = 0x03a5;
-  t["Upsilon1"] = 0x03d2;
-  t["Upsilonacutehooksymbolgreek"] = 0x03d3;
-  t["Upsilonafrican"] = 0x01b1;
-  t["Upsilondieresis"] = 0x03ab;
-  t["Upsilondieresishooksymbolgreek"] = 0x03d4;
-  t["Upsilonhooksymbol"] = 0x03d2;
-  t["Upsilontonos"] = 0x038e;
-  t["Uring"] = 0x016e;
-  t["Ushortcyrillic"] = 0x040e;
-  t["Usmall"] = 0xf775;
-  t["Ustraightcyrillic"] = 0x04ae;
-  t["Ustraightstrokecyrillic"] = 0x04b0;
-  t["Utilde"] = 0x0168;
-  t["Utildeacute"] = 0x1e78;
-  t["Utildebelow"] = 0x1e74;
-  t["V"] = 0x0056;
-  t["Vcircle"] = 0x24cb;
-  t["Vdotbelow"] = 0x1e7e;
-  t["Vecyrillic"] = 0x0412;
-  t["Vewarmenian"] = 0x054e;
-  t["Vhook"] = 0x01b2;
-  t["Vmonospace"] = 0xff36;
-  t["Voarmenian"] = 0x0548;
-  t["Vsmall"] = 0xf776;
-  t["Vtilde"] = 0x1e7c;
-  t["W"] = 0x0057;
-  t["Wacute"] = 0x1e82;
-  t["Wcircle"] = 0x24cc;
-  t["Wcircumflex"] = 0x0174;
-  t["Wdieresis"] = 0x1e84;
-  t["Wdotaccent"] = 0x1e86;
-  t["Wdotbelow"] = 0x1e88;
-  t["Wgrave"] = 0x1e80;
-  t["Wmonospace"] = 0xff37;
-  t["Wsmall"] = 0xf777;
-  t["X"] = 0x0058;
-  t["Xcircle"] = 0x24cd;
-  t["Xdieresis"] = 0x1e8c;
-  t["Xdotaccent"] = 0x1e8a;
-  t["Xeharmenian"] = 0x053d;
-  t["Xi"] = 0x039e;
-  t["Xmonospace"] = 0xff38;
-  t["Xsmall"] = 0xf778;
-  t["Y"] = 0x0059;
-  t["Yacute"] = 0x00dd;
-  t["Yacutesmall"] = 0xf7fd;
-  t["Yatcyrillic"] = 0x0462;
-  t["Ycircle"] = 0x24ce;
-  t["Ycircumflex"] = 0x0176;
-  t["Ydieresis"] = 0x0178;
-  t["Ydieresissmall"] = 0xf7ff;
-  t["Ydotaccent"] = 0x1e8e;
-  t["Ydotbelow"] = 0x1ef4;
-  t["Yericyrillic"] = 0x042b;
-  t["Yerudieresiscyrillic"] = 0x04f8;
-  t["Ygrave"] = 0x1ef2;
-  t["Yhook"] = 0x01b3;
-  t["Yhookabove"] = 0x1ef6;
-  t["Yiarmenian"] = 0x0545;
-  t["Yicyrillic"] = 0x0407;
-  t["Yiwnarmenian"] = 0x0552;
-  t["Ymonospace"] = 0xff39;
-  t["Ysmall"] = 0xf779;
-  t["Ytilde"] = 0x1ef8;
-  t["Yusbigcyrillic"] = 0x046a;
-  t["Yusbigiotifiedcyrillic"] = 0x046c;
-  t["Yuslittlecyrillic"] = 0x0466;
-  t["Yuslittleiotifiedcyrillic"] = 0x0468;
-  t["Z"] = 0x005a;
-  t["Zaarmenian"] = 0x0536;
-  t["Zacute"] = 0x0179;
-  t["Zcaron"] = 0x017d;
-  t["Zcaronsmall"] = 0xf6ff;
-  t["Zcircle"] = 0x24cf;
-  t["Zcircumflex"] = 0x1e90;
-  t["Zdot"] = 0x017b;
-  t["Zdotaccent"] = 0x017b;
-  t["Zdotbelow"] = 0x1e92;
-  t["Zecyrillic"] = 0x0417;
-  t["Zedescendercyrillic"] = 0x0498;
-  t["Zedieresiscyrillic"] = 0x04de;
-  t["Zeta"] = 0x0396;
-  t["Zhearmenian"] = 0x053a;
-  t["Zhebrevecyrillic"] = 0x04c1;
-  t["Zhecyrillic"] = 0x0416;
-  t["Zhedescendercyrillic"] = 0x0496;
-  t["Zhedieresiscyrillic"] = 0x04dc;
-  t["Zlinebelow"] = 0x1e94;
-  t["Zmonospace"] = 0xff3a;
-  t["Zsmall"] = 0xf77a;
-  t["Zstroke"] = 0x01b5;
-  t["a"] = 0x0061;
-  t["aabengali"] = 0x0986;
-  t["aacute"] = 0x00e1;
-  t["aadeva"] = 0x0906;
-  t["aagujarati"] = 0x0a86;
-  t["aagurmukhi"] = 0x0a06;
-  t["aamatragurmukhi"] = 0x0a3e;
-  t["aarusquare"] = 0x3303;
-  t["aavowelsignbengali"] = 0x09be;
-  t["aavowelsigndeva"] = 0x093e;
-  t["aavowelsigngujarati"] = 0x0abe;
-  t["abbreviationmarkarmenian"] = 0x055f;
-  t["abbreviationsigndeva"] = 0x0970;
-  t["abengali"] = 0x0985;
-  t["abopomofo"] = 0x311a;
-  t["abreve"] = 0x0103;
-  t["abreveacute"] = 0x1eaf;
-  t["abrevecyrillic"] = 0x04d1;
-  t["abrevedotbelow"] = 0x1eb7;
-  t["abrevegrave"] = 0x1eb1;
-  t["abrevehookabove"] = 0x1eb3;
-  t["abrevetilde"] = 0x1eb5;
-  t["acaron"] = 0x01ce;
-  t["acircle"] = 0x24d0;
-  t["acircumflex"] = 0x00e2;
-  t["acircumflexacute"] = 0x1ea5;
-  t["acircumflexdotbelow"] = 0x1ead;
-  t["acircumflexgrave"] = 0x1ea7;
-  t["acircumflexhookabove"] = 0x1ea9;
-  t["acircumflextilde"] = 0x1eab;
-  t["acute"] = 0x00b4;
-  t["acutebelowcmb"] = 0x0317;
-  t["acutecmb"] = 0x0301;
-  t["acutecomb"] = 0x0301;
-  t["acutedeva"] = 0x0954;
-  t["acutelowmod"] = 0x02cf;
-  t["acutetonecmb"] = 0x0341;
-  t["acyrillic"] = 0x0430;
-  t["adblgrave"] = 0x0201;
-  t["addakgurmukhi"] = 0x0a71;
-  t["adeva"] = 0x0905;
-  t["adieresis"] = 0x00e4;
-  t["adieresiscyrillic"] = 0x04d3;
-  t["adieresismacron"] = 0x01df;
-  t["adotbelow"] = 0x1ea1;
-  t["adotmacron"] = 0x01e1;
-  t["ae"] = 0x00e6;
-  t["aeacute"] = 0x01fd;
-  t["aekorean"] = 0x3150;
-  t["aemacron"] = 0x01e3;
-  t["afii00208"] = 0x2015;
-  t["afii08941"] = 0x20a4;
-  t["afii10017"] = 0x0410;
-  t["afii10018"] = 0x0411;
-  t["afii10019"] = 0x0412;
-  t["afii10020"] = 0x0413;
-  t["afii10021"] = 0x0414;
-  t["afii10022"] = 0x0415;
-  t["afii10023"] = 0x0401;
-  t["afii10024"] = 0x0416;
-  t["afii10025"] = 0x0417;
-  t["afii10026"] = 0x0418;
-  t["afii10027"] = 0x0419;
-  t["afii10028"] = 0x041a;
-  t["afii10029"] = 0x041b;
-  t["afii10030"] = 0x041c;
-  t["afii10031"] = 0x041d;
-  t["afii10032"] = 0x041e;
-  t["afii10033"] = 0x041f;
-  t["afii10034"] = 0x0420;
-  t["afii10035"] = 0x0421;
-  t["afii10036"] = 0x0422;
-  t["afii10037"] = 0x0423;
-  t["afii10038"] = 0x0424;
-  t["afii10039"] = 0x0425;
-  t["afii10040"] = 0x0426;
-  t["afii10041"] = 0x0427;
-  t["afii10042"] = 0x0428;
-  t["afii10043"] = 0x0429;
-  t["afii10044"] = 0x042a;
-  t["afii10045"] = 0x042b;
-  t["afii10046"] = 0x042c;
-  t["afii10047"] = 0x042d;
-  t["afii10048"] = 0x042e;
-  t["afii10049"] = 0x042f;
-  t["afii10050"] = 0x0490;
-  t["afii10051"] = 0x0402;
-  t["afii10052"] = 0x0403;
-  t["afii10053"] = 0x0404;
-  t["afii10054"] = 0x0405;
-  t["afii10055"] = 0x0406;
-  t["afii10056"] = 0x0407;
-  t["afii10057"] = 0x0408;
-  t["afii10058"] = 0x0409;
-  t["afii10059"] = 0x040a;
-  t["afii10060"] = 0x040b;
-  t["afii10061"] = 0x040c;
-  t["afii10062"] = 0x040e;
-  t["afii10063"] = 0xf6c4;
-  t["afii10064"] = 0xf6c5;
-  t["afii10065"] = 0x0430;
-  t["afii10066"] = 0x0431;
-  t["afii10067"] = 0x0432;
-  t["afii10068"] = 0x0433;
-  t["afii10069"] = 0x0434;
-  t["afii10070"] = 0x0435;
-  t["afii10071"] = 0x0451;
-  t["afii10072"] = 0x0436;
-  t["afii10073"] = 0x0437;
-  t["afii10074"] = 0x0438;
-  t["afii10075"] = 0x0439;
-  t["afii10076"] = 0x043a;
-  t["afii10077"] = 0x043b;
-  t["afii10078"] = 0x043c;
-  t["afii10079"] = 0x043d;
-  t["afii10080"] = 0x043e;
-  t["afii10081"] = 0x043f;
-  t["afii10082"] = 0x0440;
-  t["afii10083"] = 0x0441;
-  t["afii10084"] = 0x0442;
-  t["afii10085"] = 0x0443;
-  t["afii10086"] = 0x0444;
-  t["afii10087"] = 0x0445;
-  t["afii10088"] = 0x0446;
-  t["afii10089"] = 0x0447;
-  t["afii10090"] = 0x0448;
-  t["afii10091"] = 0x0449;
-  t["afii10092"] = 0x044a;
-  t["afii10093"] = 0x044b;
-  t["afii10094"] = 0x044c;
-  t["afii10095"] = 0x044d;
-  t["afii10096"] = 0x044e;
-  t["afii10097"] = 0x044f;
-  t["afii10098"] = 0x0491;
-  t["afii10099"] = 0x0452;
-  t["afii10100"] = 0x0453;
-  t["afii10101"] = 0x0454;
-  t["afii10102"] = 0x0455;
-  t["afii10103"] = 0x0456;
-  t["afii10104"] = 0x0457;
-  t["afii10105"] = 0x0458;
-  t["afii10106"] = 0x0459;
-  t["afii10107"] = 0x045a;
-  t["afii10108"] = 0x045b;
-  t["afii10109"] = 0x045c;
-  t["afii10110"] = 0x045e;
-  t["afii10145"] = 0x040f;
-  t["afii10146"] = 0x0462;
-  t["afii10147"] = 0x0472;
-  t["afii10148"] = 0x0474;
-  t["afii10192"] = 0xf6c6;
-  t["afii10193"] = 0x045f;
-  t["afii10194"] = 0x0463;
-  t["afii10195"] = 0x0473;
-  t["afii10196"] = 0x0475;
-  t["afii10831"] = 0xf6c7;
-  t["afii10832"] = 0xf6c8;
-  t["afii10846"] = 0x04d9;
-  t["afii299"] = 0x200e;
-  t["afii300"] = 0x200f;
-  t["afii301"] = 0x200d;
-  t["afii57381"] = 0x066a;
-  t["afii57388"] = 0x060c;
-  t["afii57392"] = 0x0660;
-  t["afii57393"] = 0x0661;
-  t["afii57394"] = 0x0662;
-  t["afii57395"] = 0x0663;
-  t["afii57396"] = 0x0664;
-  t["afii57397"] = 0x0665;
-  t["afii57398"] = 0x0666;
-  t["afii57399"] = 0x0667;
-  t["afii57400"] = 0x0668;
-  t["afii57401"] = 0x0669;
-  t["afii57403"] = 0x061b;
-  t["afii57407"] = 0x061f;
-  t["afii57409"] = 0x0621;
-  t["afii57410"] = 0x0622;
-  t["afii57411"] = 0x0623;
-  t["afii57412"] = 0x0624;
-  t["afii57413"] = 0x0625;
-  t["afii57414"] = 0x0626;
-  t["afii57415"] = 0x0627;
-  t["afii57416"] = 0x0628;
-  t["afii57417"] = 0x0629;
-  t["afii57418"] = 0x062a;
-  t["afii57419"] = 0x062b;
-  t["afii57420"] = 0x062c;
-  t["afii57421"] = 0x062d;
-  t["afii57422"] = 0x062e;
-  t["afii57423"] = 0x062f;
-  t["afii57424"] = 0x0630;
-  t["afii57425"] = 0x0631;
-  t["afii57426"] = 0x0632;
-  t["afii57427"] = 0x0633;
-  t["afii57428"] = 0x0634;
-  t["afii57429"] = 0x0635;
-  t["afii57430"] = 0x0636;
-  t["afii57431"] = 0x0637;
-  t["afii57432"] = 0x0638;
-  t["afii57433"] = 0x0639;
-  t["afii57434"] = 0x063a;
-  t["afii57440"] = 0x0640;
-  t["afii57441"] = 0x0641;
-  t["afii57442"] = 0x0642;
-  t["afii57443"] = 0x0643;
-  t["afii57444"] = 0x0644;
-  t["afii57445"] = 0x0645;
-  t["afii57446"] = 0x0646;
-  t["afii57448"] = 0x0648;
-  t["afii57449"] = 0x0649;
-  t["afii57450"] = 0x064a;
-  t["afii57451"] = 0x064b;
-  t["afii57452"] = 0x064c;
-  t["afii57453"] = 0x064d;
-  t["afii57454"] = 0x064e;
-  t["afii57455"] = 0x064f;
-  t["afii57456"] = 0x0650;
-  t["afii57457"] = 0x0651;
-  t["afii57458"] = 0x0652;
-  t["afii57470"] = 0x0647;
-  t["afii57505"] = 0x06a4;
-  t["afii57506"] = 0x067e;
-  t["afii57507"] = 0x0686;
-  t["afii57508"] = 0x0698;
-  t["afii57509"] = 0x06af;
-  t["afii57511"] = 0x0679;
-  t["afii57512"] = 0x0688;
-  t["afii57513"] = 0x0691;
-  t["afii57514"] = 0x06ba;
-  t["afii57519"] = 0x06d2;
-  t["afii57534"] = 0x06d5;
-  t["afii57636"] = 0x20aa;
-  t["afii57645"] = 0x05be;
-  t["afii57658"] = 0x05c3;
-  t["afii57664"] = 0x05d0;
-  t["afii57665"] = 0x05d1;
-  t["afii57666"] = 0x05d2;
-  t["afii57667"] = 0x05d3;
-  t["afii57668"] = 0x05d4;
-  t["afii57669"] = 0x05d5;
-  t["afii57670"] = 0x05d6;
-  t["afii57671"] = 0x05d7;
-  t["afii57672"] = 0x05d8;
-  t["afii57673"] = 0x05d9;
-  t["afii57674"] = 0x05da;
-  t["afii57675"] = 0x05db;
-  t["afii57676"] = 0x05dc;
-  t["afii57677"] = 0x05dd;
-  t["afii57678"] = 0x05de;
-  t["afii57679"] = 0x05df;
-  t["afii57680"] = 0x05e0;
-  t["afii57681"] = 0x05e1;
-  t["afii57682"] = 0x05e2;
-  t["afii57683"] = 0x05e3;
-  t["afii57684"] = 0x05e4;
-  t["afii57685"] = 0x05e5;
-  t["afii57686"] = 0x05e6;
-  t["afii57687"] = 0x05e7;
-  t["afii57688"] = 0x05e8;
-  t["afii57689"] = 0x05e9;
-  t["afii57690"] = 0x05ea;
-  t["afii57694"] = 0xfb2a;
-  t["afii57695"] = 0xfb2b;
-  t["afii57700"] = 0xfb4b;
-  t["afii57705"] = 0xfb1f;
-  t["afii57716"] = 0x05f0;
-  t["afii57717"] = 0x05f1;
-  t["afii57718"] = 0x05f2;
-  t["afii57723"] = 0xfb35;
-  t["afii57793"] = 0x05b4;
-  t["afii57794"] = 0x05b5;
-  t["afii57795"] = 0x05b6;
-  t["afii57796"] = 0x05bb;
-  t["afii57797"] = 0x05b8;
-  t["afii57798"] = 0x05b7;
-  t["afii57799"] = 0x05b0;
-  t["afii57800"] = 0x05b2;
-  t["afii57801"] = 0x05b1;
-  t["afii57802"] = 0x05b3;
-  t["afii57803"] = 0x05c2;
-  t["afii57804"] = 0x05c1;
-  t["afii57806"] = 0x05b9;
-  t["afii57807"] = 0x05bc;
-  t["afii57839"] = 0x05bd;
-  t["afii57841"] = 0x05bf;
-  t["afii57842"] = 0x05c0;
-  t["afii57929"] = 0x02bc;
-  t["afii61248"] = 0x2105;
-  t["afii61289"] = 0x2113;
-  t["afii61352"] = 0x2116;
-  t["afii61573"] = 0x202c;
-  t["afii61574"] = 0x202d;
-  t["afii61575"] = 0x202e;
-  t["afii61664"] = 0x200c;
-  t["afii63167"] = 0x066d;
-  t["afii64937"] = 0x02bd;
-  t["agrave"] = 0x00e0;
-  t["agujarati"] = 0x0a85;
-  t["agurmukhi"] = 0x0a05;
-  t["ahiragana"] = 0x3042;
-  t["ahookabove"] = 0x1ea3;
-  t["aibengali"] = 0x0990;
-  t["aibopomofo"] = 0x311e;
-  t["aideva"] = 0x0910;
-  t["aiecyrillic"] = 0x04d5;
-  t["aigujarati"] = 0x0a90;
-  t["aigurmukhi"] = 0x0a10;
-  t["aimatragurmukhi"] = 0x0a48;
-  t["ainarabic"] = 0x0639;
-  t["ainfinalarabic"] = 0xfeca;
-  t["aininitialarabic"] = 0xfecb;
-  t["ainmedialarabic"] = 0xfecc;
-  t["ainvertedbreve"] = 0x0203;
-  t["aivowelsignbengali"] = 0x09c8;
-  t["aivowelsigndeva"] = 0x0948;
-  t["aivowelsigngujarati"] = 0x0ac8;
-  t["akatakana"] = 0x30a2;
-  t["akatakanahalfwidth"] = 0xff71;
-  t["akorean"] = 0x314f;
-  t["alef"] = 0x05d0;
-  t["alefarabic"] = 0x0627;
-  t["alefdageshhebrew"] = 0xfb30;
-  t["aleffinalarabic"] = 0xfe8e;
-  t["alefhamzaabovearabic"] = 0x0623;
-  t["alefhamzaabovefinalarabic"] = 0xfe84;
-  t["alefhamzabelowarabic"] = 0x0625;
-  t["alefhamzabelowfinalarabic"] = 0xfe88;
-  t["alefhebrew"] = 0x05d0;
-  t["aleflamedhebrew"] = 0xfb4f;
-  t["alefmaddaabovearabic"] = 0x0622;
-  t["alefmaddaabovefinalarabic"] = 0xfe82;
-  t["alefmaksuraarabic"] = 0x0649;
-  t["alefmaksurafinalarabic"] = 0xfef0;
-  t["alefmaksurainitialarabic"] = 0xfef3;
-  t["alefmaksuramedialarabic"] = 0xfef4;
-  t["alefpatahhebrew"] = 0xfb2e;
-  t["alefqamatshebrew"] = 0xfb2f;
-  t["aleph"] = 0x2135;
-  t["allequal"] = 0x224c;
-  t["alpha"] = 0x03b1;
-  t["alphatonos"] = 0x03ac;
-  t["amacron"] = 0x0101;
-  t["amonospace"] = 0xff41;
-  t["ampersand"] = 0x0026;
-  t["ampersandmonospace"] = 0xff06;
-  t["ampersandsmall"] = 0xf726;
-  t["amsquare"] = 0x33c2;
-  t["anbopomofo"] = 0x3122;
-  t["angbopomofo"] = 0x3124;
-  t["angbracketleft"] = 0x3008;
-  t["angbracketright"] = 0x3009;
-  t["angkhankhuthai"] = 0x0e5a;
-  t["angle"] = 0x2220;
-  t["anglebracketleft"] = 0x3008;
-  t["anglebracketleftvertical"] = 0xfe3f;
-  t["anglebracketright"] = 0x3009;
-  t["anglebracketrightvertical"] = 0xfe40;
-  t["angleleft"] = 0x2329;
-  t["angleright"] = 0x232a;
-  t["angstrom"] = 0x212b;
-  t["anoteleia"] = 0x0387;
-  t["anudattadeva"] = 0x0952;
-  t["anusvarabengali"] = 0x0982;
-  t["anusvaradeva"] = 0x0902;
-  t["anusvaragujarati"] = 0x0a82;
-  t["aogonek"] = 0x0105;
-  t["apaatosquare"] = 0x3300;
-  t["aparen"] = 0x249c;
-  t["apostrophearmenian"] = 0x055a;
-  t["apostrophemod"] = 0x02bc;
-  t["apple"] = 0xf8ff;
-  t["approaches"] = 0x2250;
-  t["approxequal"] = 0x2248;
-  t["approxequalorimage"] = 0x2252;
-  t["approximatelyequal"] = 0x2245;
-  t["araeaekorean"] = 0x318e;
-  t["araeakorean"] = 0x318d;
-  t["arc"] = 0x2312;
-  t["arighthalfring"] = 0x1e9a;
-  t["aring"] = 0x00e5;
-  t["aringacute"] = 0x01fb;
-  t["aringbelow"] = 0x1e01;
-  t["arrowboth"] = 0x2194;
-  t["arrowdashdown"] = 0x21e3;
-  t["arrowdashleft"] = 0x21e0;
-  t["arrowdashright"] = 0x21e2;
-  t["arrowdashup"] = 0x21e1;
-  t["arrowdblboth"] = 0x21d4;
-  t["arrowdbldown"] = 0x21d3;
-  t["arrowdblleft"] = 0x21d0;
-  t["arrowdblright"] = 0x21d2;
-  t["arrowdblup"] = 0x21d1;
-  t["arrowdown"] = 0x2193;
-  t["arrowdownleft"] = 0x2199;
-  t["arrowdownright"] = 0x2198;
-  t["arrowdownwhite"] = 0x21e9;
-  t["arrowheaddownmod"] = 0x02c5;
-  t["arrowheadleftmod"] = 0x02c2;
-  t["arrowheadrightmod"] = 0x02c3;
-  t["arrowheadupmod"] = 0x02c4;
-  t["arrowhorizex"] = 0xf8e7;
-  t["arrowleft"] = 0x2190;
-  t["arrowleftdbl"] = 0x21d0;
-  t["arrowleftdblstroke"] = 0x21cd;
-  t["arrowleftoverright"] = 0x21c6;
-  t["arrowleftwhite"] = 0x21e6;
-  t["arrowright"] = 0x2192;
-  t["arrowrightdblstroke"] = 0x21cf;
-  t["arrowrightheavy"] = 0x279e;
-  t["arrowrightoverleft"] = 0x21c4;
-  t["arrowrightwhite"] = 0x21e8;
-  t["arrowtableft"] = 0x21e4;
-  t["arrowtabright"] = 0x21e5;
-  t["arrowup"] = 0x2191;
-  t["arrowupdn"] = 0x2195;
-  t["arrowupdnbse"] = 0x21a8;
-  t["arrowupdownbase"] = 0x21a8;
-  t["arrowupleft"] = 0x2196;
-  t["arrowupleftofdown"] = 0x21c5;
-  t["arrowupright"] = 0x2197;
-  t["arrowupwhite"] = 0x21e7;
-  t["arrowvertex"] = 0xf8e6;
-  t["asciicircum"] = 0x005e;
-  t["asciicircummonospace"] = 0xff3e;
-  t["asciitilde"] = 0x007e;
-  t["asciitildemonospace"] = 0xff5e;
-  t["ascript"] = 0x0251;
-  t["ascriptturned"] = 0x0252;
-  t["asmallhiragana"] = 0x3041;
-  t["asmallkatakana"] = 0x30a1;
-  t["asmallkatakanahalfwidth"] = 0xff67;
-  t["asterisk"] = 0x002a;
-  t["asteriskaltonearabic"] = 0x066d;
-  t["asteriskarabic"] = 0x066d;
-  t["asteriskmath"] = 0x2217;
-  t["asteriskmonospace"] = 0xff0a;
-  t["asterisksmall"] = 0xfe61;
-  t["asterism"] = 0x2042;
-  t["asuperior"] = 0xf6e9;
-  t["asymptoticallyequal"] = 0x2243;
-  t["at"] = 0x0040;
-  t["atilde"] = 0x00e3;
-  t["atmonospace"] = 0xff20;
-  t["atsmall"] = 0xfe6b;
-  t["aturned"] = 0x0250;
-  t["aubengali"] = 0x0994;
-  t["aubopomofo"] = 0x3120;
-  t["audeva"] = 0x0914;
-  t["augujarati"] = 0x0a94;
-  t["augurmukhi"] = 0x0a14;
-  t["aulengthmarkbengali"] = 0x09d7;
-  t["aumatragurmukhi"] = 0x0a4c;
-  t["auvowelsignbengali"] = 0x09cc;
-  t["auvowelsigndeva"] = 0x094c;
-  t["auvowelsigngujarati"] = 0x0acc;
-  t["avagrahadeva"] = 0x093d;
-  t["aybarmenian"] = 0x0561;
-  t["ayin"] = 0x05e2;
-  t["ayinaltonehebrew"] = 0xfb20;
-  t["ayinhebrew"] = 0x05e2;
-  t["b"] = 0x0062;
-  t["babengali"] = 0x09ac;
-  t["backslash"] = 0x005c;
-  t["backslashmonospace"] = 0xff3c;
-  t["badeva"] = 0x092c;
-  t["bagujarati"] = 0x0aac;
-  t["bagurmukhi"] = 0x0a2c;
-  t["bahiragana"] = 0x3070;
-  t["bahtthai"] = 0x0e3f;
-  t["bakatakana"] = 0x30d0;
-  t["bar"] = 0x007c;
-  t["barmonospace"] = 0xff5c;
-  t["bbopomofo"] = 0x3105;
-  t["bcircle"] = 0x24d1;
-  t["bdotaccent"] = 0x1e03;
-  t["bdotbelow"] = 0x1e05;
-  t["beamedsixteenthnotes"] = 0x266c;
-  t["because"] = 0x2235;
-  t["becyrillic"] = 0x0431;
-  t["beharabic"] = 0x0628;
-  t["behfinalarabic"] = 0xfe90;
-  t["behinitialarabic"] = 0xfe91;
-  t["behiragana"] = 0x3079;
-  t["behmedialarabic"] = 0xfe92;
-  t["behmeeminitialarabic"] = 0xfc9f;
-  t["behmeemisolatedarabic"] = 0xfc08;
-  t["behnoonfinalarabic"] = 0xfc6d;
-  t["bekatakana"] = 0x30d9;
-  t["benarmenian"] = 0x0562;
-  t["bet"] = 0x05d1;
-  t["beta"] = 0x03b2;
-  t["betasymbolgreek"] = 0x03d0;
-  t["betdagesh"] = 0xfb31;
-  t["betdageshhebrew"] = 0xfb31;
-  t["bethebrew"] = 0x05d1;
-  t["betrafehebrew"] = 0xfb4c;
-  t["bhabengali"] = 0x09ad;
-  t["bhadeva"] = 0x092d;
-  t["bhagujarati"] = 0x0aad;
-  t["bhagurmukhi"] = 0x0a2d;
-  t["bhook"] = 0x0253;
-  t["bihiragana"] = 0x3073;
-  t["bikatakana"] = 0x30d3;
-  t["bilabialclick"] = 0x0298;
-  t["bindigurmukhi"] = 0x0a02;
-  t["birusquare"] = 0x3331;
-  t["blackcircle"] = 0x25cf;
-  t["blackdiamond"] = 0x25c6;
-  t["blackdownpointingtriangle"] = 0x25bc;
-  t["blackleftpointingpointer"] = 0x25c4;
-  t["blackleftpointingtriangle"] = 0x25c0;
-  t["blacklenticularbracketleft"] = 0x3010;
-  t["blacklenticularbracketleftvertical"] = 0xfe3b;
-  t["blacklenticularbracketright"] = 0x3011;
-  t["blacklenticularbracketrightvertical"] = 0xfe3c;
-  t["blacklowerlefttriangle"] = 0x25e3;
-  t["blacklowerrighttriangle"] = 0x25e2;
-  t["blackrectangle"] = 0x25ac;
-  t["blackrightpointingpointer"] = 0x25ba;
-  t["blackrightpointingtriangle"] = 0x25b6;
-  t["blacksmallsquare"] = 0x25aa;
-  t["blacksmilingface"] = 0x263b;
-  t["blacksquare"] = 0x25a0;
-  t["blackstar"] = 0x2605;
-  t["blackupperlefttriangle"] = 0x25e4;
-  t["blackupperrighttriangle"] = 0x25e5;
-  t["blackuppointingsmalltriangle"] = 0x25b4;
-  t["blackuppointingtriangle"] = 0x25b2;
-  t["blank"] = 0x2423;
-  t["blinebelow"] = 0x1e07;
-  t["block"] = 0x2588;
-  t["bmonospace"] = 0xff42;
-  t["bobaimaithai"] = 0x0e1a;
-  t["bohiragana"] = 0x307c;
-  t["bokatakana"] = 0x30dc;
-  t["bparen"] = 0x249d;
-  t["bqsquare"] = 0x33c3;
-  t["braceex"] = 0xf8f4;
-  t["braceleft"] = 0x007b;
-  t["braceleftbt"] = 0xf8f3;
-  t["braceleftmid"] = 0xf8f2;
-  t["braceleftmonospace"] = 0xff5b;
-  t["braceleftsmall"] = 0xfe5b;
-  t["bracelefttp"] = 0xf8f1;
-  t["braceleftvertical"] = 0xfe37;
-  t["braceright"] = 0x007d;
-  t["bracerightbt"] = 0xf8fe;
-  t["bracerightmid"] = 0xf8fd;
-  t["bracerightmonospace"] = 0xff5d;
-  t["bracerightsmall"] = 0xfe5c;
-  t["bracerighttp"] = 0xf8fc;
-  t["bracerightvertical"] = 0xfe38;
-  t["bracketleft"] = 0x005b;
-  t["bracketleftbt"] = 0xf8f0;
-  t["bracketleftex"] = 0xf8ef;
-  t["bracketleftmonospace"] = 0xff3b;
-  t["bracketlefttp"] = 0xf8ee;
-  t["bracketright"] = 0x005d;
-  t["bracketrightbt"] = 0xf8fb;
-  t["bracketrightex"] = 0xf8fa;
-  t["bracketrightmonospace"] = 0xff3d;
-  t["bracketrighttp"] = 0xf8f9;
-  t["breve"] = 0x02d8;
-  t["brevebelowcmb"] = 0x032e;
-  t["brevecmb"] = 0x0306;
-  t["breveinvertedbelowcmb"] = 0x032f;
-  t["breveinvertedcmb"] = 0x0311;
-  t["breveinverteddoublecmb"] = 0x0361;
-  t["bridgebelowcmb"] = 0x032a;
-  t["bridgeinvertedbelowcmb"] = 0x033a;
-  t["brokenbar"] = 0x00a6;
-  t["bstroke"] = 0x0180;
-  t["bsuperior"] = 0xf6ea;
-  t["btopbar"] = 0x0183;
-  t["buhiragana"] = 0x3076;
-  t["bukatakana"] = 0x30d6;
-  t["bullet"] = 0x2022;
-  t["bulletinverse"] = 0x25d8;
-  t["bulletoperator"] = 0x2219;
-  t["bullseye"] = 0x25ce;
-  t["c"] = 0x0063;
-  t["caarmenian"] = 0x056e;
-  t["cabengali"] = 0x099a;
-  t["cacute"] = 0x0107;
-  t["cadeva"] = 0x091a;
-  t["cagujarati"] = 0x0a9a;
-  t["cagurmukhi"] = 0x0a1a;
-  t["calsquare"] = 0x3388;
-  t["candrabindubengali"] = 0x0981;
-  t["candrabinducmb"] = 0x0310;
-  t["candrabindudeva"] = 0x0901;
-  t["candrabindugujarati"] = 0x0a81;
-  t["capslock"] = 0x21ea;
-  t["careof"] = 0x2105;
-  t["caron"] = 0x02c7;
-  t["caronbelowcmb"] = 0x032c;
-  t["caroncmb"] = 0x030c;
-  t["carriagereturn"] = 0x21b5;
-  t["cbopomofo"] = 0x3118;
-  t["ccaron"] = 0x010d;
-  t["ccedilla"] = 0x00e7;
-  t["ccedillaacute"] = 0x1e09;
-  t["ccircle"] = 0x24d2;
-  t["ccircumflex"] = 0x0109;
-  t["ccurl"] = 0x0255;
-  t["cdot"] = 0x010b;
-  t["cdotaccent"] = 0x010b;
-  t["cdsquare"] = 0x33c5;
-  t["cedilla"] = 0x00b8;
-  t["cedillacmb"] = 0x0327;
-  t["cent"] = 0x00a2;
-  t["centigrade"] = 0x2103;
-  t["centinferior"] = 0xf6df;
-  t["centmonospace"] = 0xffe0;
-  t["centoldstyle"] = 0xf7a2;
-  t["centsuperior"] = 0xf6e0;
-  t["chaarmenian"] = 0x0579;
-  t["chabengali"] = 0x099b;
-  t["chadeva"] = 0x091b;
-  t["chagujarati"] = 0x0a9b;
-  t["chagurmukhi"] = 0x0a1b;
-  t["chbopomofo"] = 0x3114;
-  t["cheabkhasiancyrillic"] = 0x04bd;
-  t["checkmark"] = 0x2713;
-  t["checyrillic"] = 0x0447;
-  t["chedescenderabkhasiancyrillic"] = 0x04bf;
-  t["chedescendercyrillic"] = 0x04b7;
-  t["chedieresiscyrillic"] = 0x04f5;
-  t["cheharmenian"] = 0x0573;
-  t["chekhakassiancyrillic"] = 0x04cc;
-  t["cheverticalstrokecyrillic"] = 0x04b9;
-  t["chi"] = 0x03c7;
-  t["chieuchacirclekorean"] = 0x3277;
-  t["chieuchaparenkorean"] = 0x3217;
-  t["chieuchcirclekorean"] = 0x3269;
-  t["chieuchkorean"] = 0x314a;
-  t["chieuchparenkorean"] = 0x3209;
-  t["chochangthai"] = 0x0e0a;
-  t["chochanthai"] = 0x0e08;
-  t["chochingthai"] = 0x0e09;
-  t["chochoethai"] = 0x0e0c;
-  t["chook"] = 0x0188;
-  t["cieucacirclekorean"] = 0x3276;
-  t["cieucaparenkorean"] = 0x3216;
-  t["cieuccirclekorean"] = 0x3268;
-  t["cieuckorean"] = 0x3148;
-  t["cieucparenkorean"] = 0x3208;
-  t["cieucuparenkorean"] = 0x321c;
-  t["circle"] = 0x25cb;
-  t["circlecopyrt"] = 0x00a9;
-  t["circlemultiply"] = 0x2297;
-  t["circleot"] = 0x2299;
-  t["circleplus"] = 0x2295;
-  t["circlepostalmark"] = 0x3036;
-  t["circlewithlefthalfblack"] = 0x25d0;
-  t["circlewithrighthalfblack"] = 0x25d1;
-  t["circumflex"] = 0x02c6;
-  t["circumflexbelowcmb"] = 0x032d;
-  t["circumflexcmb"] = 0x0302;
-  t["clear"] = 0x2327;
-  t["clickalveolar"] = 0x01c2;
-  t["clickdental"] = 0x01c0;
-  t["clicklateral"] = 0x01c1;
-  t["clickretroflex"] = 0x01c3;
-  t["club"] = 0x2663;
-  t["clubsuitblack"] = 0x2663;
-  t["clubsuitwhite"] = 0x2667;
-  t["cmcubedsquare"] = 0x33a4;
-  t["cmonospace"] = 0xff43;
-  t["cmsquaredsquare"] = 0x33a0;
-  t["coarmenian"] = 0x0581;
-  t["colon"] = 0x003a;
-  t["colonmonetary"] = 0x20a1;
-  t["colonmonospace"] = 0xff1a;
-  t["colonsign"] = 0x20a1;
-  t["colonsmall"] = 0xfe55;
-  t["colontriangularhalfmod"] = 0x02d1;
-  t["colontriangularmod"] = 0x02d0;
-  t["comma"] = 0x002c;
-  t["commaabovecmb"] = 0x0313;
-  t["commaaboverightcmb"] = 0x0315;
-  t["commaaccent"] = 0xf6c3;
-  t["commaarabic"] = 0x060c;
-  t["commaarmenian"] = 0x055d;
-  t["commainferior"] = 0xf6e1;
-  t["commamonospace"] = 0xff0c;
-  t["commareversedabovecmb"] = 0x0314;
-  t["commareversedmod"] = 0x02bd;
-  t["commasmall"] = 0xfe50;
-  t["commasuperior"] = 0xf6e2;
-  t["commaturnedabovecmb"] = 0x0312;
-  t["commaturnedmod"] = 0x02bb;
-  t["compass"] = 0x263c;
-  t["congruent"] = 0x2245;
-  t["contourintegral"] = 0x222e;
-  t["control"] = 0x2303;
-  t["controlACK"] = 0x0006;
-  t["controlBEL"] = 0x0007;
-  t["controlBS"] = 0x0008;
-  t["controlCAN"] = 0x0018;
-  t["controlCR"] = 0x000d;
-  t["controlDC1"] = 0x0011;
-  t["controlDC2"] = 0x0012;
-  t["controlDC3"] = 0x0013;
-  t["controlDC4"] = 0x0014;
-  t["controlDEL"] = 0x007f;
-  t["controlDLE"] = 0x0010;
-  t["controlEM"] = 0x0019;
-  t["controlENQ"] = 0x0005;
-  t["controlEOT"] = 0x0004;
-  t["controlESC"] = 0x001b;
-  t["controlETB"] = 0x0017;
-  t["controlETX"] = 0x0003;
-  t["controlFF"] = 0x000c;
-  t["controlFS"] = 0x001c;
-  t["controlGS"] = 0x001d;
-  t["controlHT"] = 0x0009;
-  t["controlLF"] = 0x000a;
-  t["controlNAK"] = 0x0015;
-  t["controlNULL"] = 0x0000;
-  t["controlRS"] = 0x001e;
-  t["controlSI"] = 0x000f;
-  t["controlSO"] = 0x000e;
-  t["controlSOT"] = 0x0002;
-  t["controlSTX"] = 0x0001;
-  t["controlSUB"] = 0x001a;
-  t["controlSYN"] = 0x0016;
-  t["controlUS"] = 0x001f;
-  t["controlVT"] = 0x000b;
-  t["copyright"] = 0x00a9;
-  t["copyrightsans"] = 0xf8e9;
-  t["copyrightserif"] = 0xf6d9;
-  t["cornerbracketleft"] = 0x300c;
-  t["cornerbracketlefthalfwidth"] = 0xff62;
-  t["cornerbracketleftvertical"] = 0xfe41;
-  t["cornerbracketright"] = 0x300d;
-  t["cornerbracketrighthalfwidth"] = 0xff63;
-  t["cornerbracketrightvertical"] = 0xfe42;
-  t["corporationsquare"] = 0x337f;
-  t["cosquare"] = 0x33c7;
-  t["coverkgsquare"] = 0x33c6;
-  t["cparen"] = 0x249e;
-  t["cruzeiro"] = 0x20a2;
-  t["cstretched"] = 0x0297;
-  t["curlyand"] = 0x22cf;
-  t["curlyor"] = 0x22ce;
-  t["currency"] = 0x00a4;
-  t["cyrBreve"] = 0xf6d1;
-  t["cyrFlex"] = 0xf6d2;
-  t["cyrbreve"] = 0xf6d4;
-  t["cyrflex"] = 0xf6d5;
-  t["d"] = 0x0064;
-  t["daarmenian"] = 0x0564;
-  t["dabengali"] = 0x09a6;
-  t["dadarabic"] = 0x0636;
-  t["dadeva"] = 0x0926;
-  t["dadfinalarabic"] = 0xfebe;
-  t["dadinitialarabic"] = 0xfebf;
-  t["dadmedialarabic"] = 0xfec0;
-  t["dagesh"] = 0x05bc;
-  t["dageshhebrew"] = 0x05bc;
-  t["dagger"] = 0x2020;
-  t["daggerdbl"] = 0x2021;
-  t["dagujarati"] = 0x0aa6;
-  t["dagurmukhi"] = 0x0a26;
-  t["dahiragana"] = 0x3060;
-  t["dakatakana"] = 0x30c0;
-  t["dalarabic"] = 0x062f;
-  t["dalet"] = 0x05d3;
-  t["daletdagesh"] = 0xfb33;
-  t["daletdageshhebrew"] = 0xfb33;
-  t["dalethebrew"] = 0x05d3;
-  t["dalfinalarabic"] = 0xfeaa;
-  t["dammaarabic"] = 0x064f;
-  t["dammalowarabic"] = 0x064f;
-  t["dammatanaltonearabic"] = 0x064c;
-  t["dammatanarabic"] = 0x064c;
-  t["danda"] = 0x0964;
-  t["dargahebrew"] = 0x05a7;
-  t["dargalefthebrew"] = 0x05a7;
-  t["dasiapneumatacyrilliccmb"] = 0x0485;
-  t["dblGrave"] = 0xf6d3;
-  t["dblanglebracketleft"] = 0x300a;
-  t["dblanglebracketleftvertical"] = 0xfe3d;
-  t["dblanglebracketright"] = 0x300b;
-  t["dblanglebracketrightvertical"] = 0xfe3e;
-  t["dblarchinvertedbelowcmb"] = 0x032b;
-  t["dblarrowleft"] = 0x21d4;
-  t["dblarrowright"] = 0x21d2;
-  t["dbldanda"] = 0x0965;
-  t["dblgrave"] = 0xf6d6;
-  t["dblgravecmb"] = 0x030f;
-  t["dblintegral"] = 0x222c;
-  t["dbllowline"] = 0x2017;
-  t["dbllowlinecmb"] = 0x0333;
-  t["dbloverlinecmb"] = 0x033f;
-  t["dblprimemod"] = 0x02ba;
-  t["dblverticalbar"] = 0x2016;
-  t["dblverticallineabovecmb"] = 0x030e;
-  t["dbopomofo"] = 0x3109;
-  t["dbsquare"] = 0x33c8;
-  t["dcaron"] = 0x010f;
-  t["dcedilla"] = 0x1e11;
-  t["dcircle"] = 0x24d3;
-  t["dcircumflexbelow"] = 0x1e13;
-  t["dcroat"] = 0x0111;
-  t["ddabengali"] = 0x09a1;
-  t["ddadeva"] = 0x0921;
-  t["ddagujarati"] = 0x0aa1;
-  t["ddagurmukhi"] = 0x0a21;
-  t["ddalarabic"] = 0x0688;
-  t["ddalfinalarabic"] = 0xfb89;
-  t["dddhadeva"] = 0x095c;
-  t["ddhabengali"] = 0x09a2;
-  t["ddhadeva"] = 0x0922;
-  t["ddhagujarati"] = 0x0aa2;
-  t["ddhagurmukhi"] = 0x0a22;
-  t["ddotaccent"] = 0x1e0b;
-  t["ddotbelow"] = 0x1e0d;
-  t["decimalseparatorarabic"] = 0x066b;
-  t["decimalseparatorpersian"] = 0x066b;
-  t["decyrillic"] = 0x0434;
-  t["degree"] = 0x00b0;
-  t["dehihebrew"] = 0x05ad;
-  t["dehiragana"] = 0x3067;
-  t["deicoptic"] = 0x03ef;
-  t["dekatakana"] = 0x30c7;
-  t["deleteleft"] = 0x232b;
-  t["deleteright"] = 0x2326;
-  t["delta"] = 0x03b4;
-  t["deltaturned"] = 0x018d;
-  t["denominatorminusonenumeratorbengali"] = 0x09f8;
-  t["dezh"] = 0x02a4;
-  t["dhabengali"] = 0x09a7;
-  t["dhadeva"] = 0x0927;
-  t["dhagujarati"] = 0x0aa7;
-  t["dhagurmukhi"] = 0x0a27;
-  t["dhook"] = 0x0257;
-  t["dialytikatonos"] = 0x0385;
-  t["dialytikatonoscmb"] = 0x0344;
-  t["diamond"] = 0x2666;
-  t["diamondsuitwhite"] = 0x2662;
-  t["dieresis"] = 0x00a8;
-  t["dieresisacute"] = 0xf6d7;
-  t["dieresisbelowcmb"] = 0x0324;
-  t["dieresiscmb"] = 0x0308;
-  t["dieresisgrave"] = 0xf6d8;
-  t["dieresistonos"] = 0x0385;
-  t["dihiragana"] = 0x3062;
-  t["dikatakana"] = 0x30c2;
-  t["dittomark"] = 0x3003;
-  t["divide"] = 0x00f7;
-  t["divides"] = 0x2223;
-  t["divisionslash"] = 0x2215;
-  t["djecyrillic"] = 0x0452;
-  t["dkshade"] = 0x2593;
-  t["dlinebelow"] = 0x1e0f;
-  t["dlsquare"] = 0x3397;
-  t["dmacron"] = 0x0111;
-  t["dmonospace"] = 0xff44;
-  t["dnblock"] = 0x2584;
-  t["dochadathai"] = 0x0e0e;
-  t["dodekthai"] = 0x0e14;
-  t["dohiragana"] = 0x3069;
-  t["dokatakana"] = 0x30c9;
-  t["dollar"] = 0x0024;
-  t["dollarinferior"] = 0xf6e3;
-  t["dollarmonospace"] = 0xff04;
-  t["dollaroldstyle"] = 0xf724;
-  t["dollarsmall"] = 0xfe69;
-  t["dollarsuperior"] = 0xf6e4;
-  t["dong"] = 0x20ab;
-  t["dorusquare"] = 0x3326;
-  t["dotaccent"] = 0x02d9;
-  t["dotaccentcmb"] = 0x0307;
-  t["dotbelowcmb"] = 0x0323;
-  t["dotbelowcomb"] = 0x0323;
-  t["dotkatakana"] = 0x30fb;
-  t["dotlessi"] = 0x0131;
-  t["dotlessj"] = 0xf6be;
-  t["dotlessjstrokehook"] = 0x0284;
-  t["dotmath"] = 0x22c5;
-  t["dottedcircle"] = 0x25cc;
-  t["doubleyodpatah"] = 0xfb1f;
-  t["doubleyodpatahhebrew"] = 0xfb1f;
-  t["downtackbelowcmb"] = 0x031e;
-  t["downtackmod"] = 0x02d5;
-  t["dparen"] = 0x249f;
-  t["dsuperior"] = 0xf6eb;
-  t["dtail"] = 0x0256;
-  t["dtopbar"] = 0x018c;
-  t["duhiragana"] = 0x3065;
-  t["dukatakana"] = 0x30c5;
-  t["dz"] = 0x01f3;
-  t["dzaltone"] = 0x02a3;
-  t["dzcaron"] = 0x01c6;
-  t["dzcurl"] = 0x02a5;
-  t["dzeabkhasiancyrillic"] = 0x04e1;
-  t["dzecyrillic"] = 0x0455;
-  t["dzhecyrillic"] = 0x045f;
-  t["e"] = 0x0065;
-  t["eacute"] = 0x00e9;
-  t["earth"] = 0x2641;
-  t["ebengali"] = 0x098f;
-  t["ebopomofo"] = 0x311c;
-  t["ebreve"] = 0x0115;
-  t["ecandradeva"] = 0x090d;
-  t["ecandragujarati"] = 0x0a8d;
-  t["ecandravowelsigndeva"] = 0x0945;
-  t["ecandravowelsigngujarati"] = 0x0ac5;
-  t["ecaron"] = 0x011b;
-  t["ecedillabreve"] = 0x1e1d;
-  t["echarmenian"] = 0x0565;
-  t["echyiwnarmenian"] = 0x0587;
-  t["ecircle"] = 0x24d4;
-  t["ecircumflex"] = 0x00ea;
-  t["ecircumflexacute"] = 0x1ebf;
-  t["ecircumflexbelow"] = 0x1e19;
-  t["ecircumflexdotbelow"] = 0x1ec7;
-  t["ecircumflexgrave"] = 0x1ec1;
-  t["ecircumflexhookabove"] = 0x1ec3;
-  t["ecircumflextilde"] = 0x1ec5;
-  t["ecyrillic"] = 0x0454;
-  t["edblgrave"] = 0x0205;
-  t["edeva"] = 0x090f;
-  t["edieresis"] = 0x00eb;
-  t["edot"] = 0x0117;
-  t["edotaccent"] = 0x0117;
-  t["edotbelow"] = 0x1eb9;
-  t["eegurmukhi"] = 0x0a0f;
-  t["eematragurmukhi"] = 0x0a47;
-  t["efcyrillic"] = 0x0444;
-  t["egrave"] = 0x00e8;
-  t["egujarati"] = 0x0a8f;
-  t["eharmenian"] = 0x0567;
-  t["ehbopomofo"] = 0x311d;
-  t["ehiragana"] = 0x3048;
-  t["ehookabove"] = 0x1ebb;
-  t["eibopomofo"] = 0x311f;
-  t["eight"] = 0x0038;
-  t["eightarabic"] = 0x0668;
-  t["eightbengali"] = 0x09ee;
-  t["eightcircle"] = 0x2467;
-  t["eightcircleinversesansserif"] = 0x2791;
-  t["eightdeva"] = 0x096e;
-  t["eighteencircle"] = 0x2471;
-  t["eighteenparen"] = 0x2485;
-  t["eighteenperiod"] = 0x2499;
-  t["eightgujarati"] = 0x0aee;
-  t["eightgurmukhi"] = 0x0a6e;
-  t["eighthackarabic"] = 0x0668;
-  t["eighthangzhou"] = 0x3028;
-  t["eighthnotebeamed"] = 0x266b;
-  t["eightideographicparen"] = 0x3227;
-  t["eightinferior"] = 0x2088;
-  t["eightmonospace"] = 0xff18;
-  t["eightoldstyle"] = 0xf738;
-  t["eightparen"] = 0x247b;
-  t["eightperiod"] = 0x248f;
-  t["eightpersian"] = 0x06f8;
-  t["eightroman"] = 0x2177;
-  t["eightsuperior"] = 0x2078;
-  t["eightthai"] = 0x0e58;
-  t["einvertedbreve"] = 0x0207;
-  t["eiotifiedcyrillic"] = 0x0465;
-  t["ekatakana"] = 0x30a8;
-  t["ekatakanahalfwidth"] = 0xff74;
-  t["ekonkargurmukhi"] = 0x0a74;
-  t["ekorean"] = 0x3154;
-  t["elcyrillic"] = 0x043b;
-  t["element"] = 0x2208;
-  t["elevencircle"] = 0x246a;
-  t["elevenparen"] = 0x247e;
-  t["elevenperiod"] = 0x2492;
-  t["elevenroman"] = 0x217a;
-  t["ellipsis"] = 0x2026;
-  t["ellipsisvertical"] = 0x22ee;
-  t["emacron"] = 0x0113;
-  t["emacronacute"] = 0x1e17;
-  t["emacrongrave"] = 0x1e15;
-  t["emcyrillic"] = 0x043c;
-  t["emdash"] = 0x2014;
-  t["emdashvertical"] = 0xfe31;
-  t["emonospace"] = 0xff45;
-  t["emphasismarkarmenian"] = 0x055b;
-  t["emptyset"] = 0x2205;
-  t["enbopomofo"] = 0x3123;
-  t["encyrillic"] = 0x043d;
-  t["endash"] = 0x2013;
-  t["endashvertical"] = 0xfe32;
-  t["endescendercyrillic"] = 0x04a3;
-  t["eng"] = 0x014b;
-  t["engbopomofo"] = 0x3125;
-  t["enghecyrillic"] = 0x04a5;
-  t["enhookcyrillic"] = 0x04c8;
-  t["enspace"] = 0x2002;
-  t["eogonek"] = 0x0119;
-  t["eokorean"] = 0x3153;
-  t["eopen"] = 0x025b;
-  t["eopenclosed"] = 0x029a;
-  t["eopenreversed"] = 0x025c;
-  t["eopenreversedclosed"] = 0x025e;
-  t["eopenreversedhook"] = 0x025d;
-  t["eparen"] = 0x24a0;
-  t["epsilon"] = 0x03b5;
-  t["epsilontonos"] = 0x03ad;
-  t["equal"] = 0x003d;
-  t["equalmonospace"] = 0xff1d;
-  t["equalsmall"] = 0xfe66;
-  t["equalsuperior"] = 0x207c;
-  t["equivalence"] = 0x2261;
-  t["erbopomofo"] = 0x3126;
-  t["ercyrillic"] = 0x0440;
-  t["ereversed"] = 0x0258;
-  t["ereversedcyrillic"] = 0x044d;
-  t["escyrillic"] = 0x0441;
-  t["esdescendercyrillic"] = 0x04ab;
-  t["esh"] = 0x0283;
-  t["eshcurl"] = 0x0286;
-  t["eshortdeva"] = 0x090e;
-  t["eshortvowelsigndeva"] = 0x0946;
-  t["eshreversedloop"] = 0x01aa;
-  t["eshsquatreversed"] = 0x0285;
-  t["esmallhiragana"] = 0x3047;
-  t["esmallkatakana"] = 0x30a7;
-  t["esmallkatakanahalfwidth"] = 0xff6a;
-  t["estimated"] = 0x212e;
-  t["esuperior"] = 0xf6ec;
-  t["eta"] = 0x03b7;
-  t["etarmenian"] = 0x0568;
-  t["etatonos"] = 0x03ae;
-  t["eth"] = 0x00f0;
-  t["etilde"] = 0x1ebd;
-  t["etildebelow"] = 0x1e1b;
-  t["etnahtafoukhhebrew"] = 0x0591;
-  t["etnahtafoukhlefthebrew"] = 0x0591;
-  t["etnahtahebrew"] = 0x0591;
-  t["etnahtalefthebrew"] = 0x0591;
-  t["eturned"] = 0x01dd;
-  t["eukorean"] = 0x3161;
-  t["euro"] = 0x20ac;
-  t["evowelsignbengali"] = 0x09c7;
-  t["evowelsigndeva"] = 0x0947;
-  t["evowelsigngujarati"] = 0x0ac7;
-  t["exclam"] = 0x0021;
-  t["exclamarmenian"] = 0x055c;
-  t["exclamdbl"] = 0x203c;
-  t["exclamdown"] = 0x00a1;
-  t["exclamdownsmall"] = 0xf7a1;
-  t["exclammonospace"] = 0xff01;
-  t["exclamsmall"] = 0xf721;
-  t["existential"] = 0x2203;
-  t["ezh"] = 0x0292;
-  t["ezhcaron"] = 0x01ef;
-  t["ezhcurl"] = 0x0293;
-  t["ezhreversed"] = 0x01b9;
-  t["ezhtail"] = 0x01ba;
-  t["f"] = 0x0066;
-  t["fadeva"] = 0x095e;
-  t["fagurmukhi"] = 0x0a5e;
-  t["fahrenheit"] = 0x2109;
-  t["fathaarabic"] = 0x064e;
-  t["fathalowarabic"] = 0x064e;
-  t["fathatanarabic"] = 0x064b;
-  t["fbopomofo"] = 0x3108;
-  t["fcircle"] = 0x24d5;
-  t["fdotaccent"] = 0x1e1f;
-  t["feharabic"] = 0x0641;
-  t["feharmenian"] = 0x0586;
-  t["fehfinalarabic"] = 0xfed2;
-  t["fehinitialarabic"] = 0xfed3;
-  t["fehmedialarabic"] = 0xfed4;
-  t["feicoptic"] = 0x03e5;
-  t["female"] = 0x2640;
-  t["ff"] = 0xfb00;
-  t["f_f"] = 0xfb00;
-  t["ffi"] = 0xfb03;
-  t["ffl"] = 0xfb04;
-  t["fi"] = 0xfb01;
-  t["fifteencircle"] = 0x246e;
-  t["fifteenparen"] = 0x2482;
-  t["fifteenperiod"] = 0x2496;
-  t["figuredash"] = 0x2012;
-  t["filledbox"] = 0x25a0;
-  t["filledrect"] = 0x25ac;
-  t["finalkaf"] = 0x05da;
-  t["finalkafdagesh"] = 0xfb3a;
-  t["finalkafdageshhebrew"] = 0xfb3a;
-  t["finalkafhebrew"] = 0x05da;
-  t["finalmem"] = 0x05dd;
-  t["finalmemhebrew"] = 0x05dd;
-  t["finalnun"] = 0x05df;
-  t["finalnunhebrew"] = 0x05df;
-  t["finalpe"] = 0x05e3;
-  t["finalpehebrew"] = 0x05e3;
-  t["finaltsadi"] = 0x05e5;
-  t["finaltsadihebrew"] = 0x05e5;
-  t["firsttonechinese"] = 0x02c9;
-  t["fisheye"] = 0x25c9;
-  t["fitacyrillic"] = 0x0473;
-  t["five"] = 0x0035;
-  t["fivearabic"] = 0x0665;
-  t["fivebengali"] = 0x09eb;
-  t["fivecircle"] = 0x2464;
-  t["fivecircleinversesansserif"] = 0x278e;
-  t["fivedeva"] = 0x096b;
-  t["fiveeighths"] = 0x215d;
-  t["fivegujarati"] = 0x0aeb;
-  t["fivegurmukhi"] = 0x0a6b;
-  t["fivehackarabic"] = 0x0665;
-  t["fivehangzhou"] = 0x3025;
-  t["fiveideographicparen"] = 0x3224;
-  t["fiveinferior"] = 0x2085;
-  t["fivemonospace"] = 0xff15;
-  t["fiveoldstyle"] = 0xf735;
-  t["fiveparen"] = 0x2478;
-  t["fiveperiod"] = 0x248c;
-  t["fivepersian"] = 0x06f5;
-  t["fiveroman"] = 0x2174;
-  t["fivesuperior"] = 0x2075;
-  t["fivethai"] = 0x0e55;
-  t["fl"] = 0xfb02;
-  t["florin"] = 0x0192;
-  t["fmonospace"] = 0xff46;
-  t["fmsquare"] = 0x3399;
-  t["fofanthai"] = 0x0e1f;
-  t["fofathai"] = 0x0e1d;
-  t["fongmanthai"] = 0x0e4f;
-  t["forall"] = 0x2200;
-  t["four"] = 0x0034;
-  t["fourarabic"] = 0x0664;
-  t["fourbengali"] = 0x09ea;
-  t["fourcircle"] = 0x2463;
-  t["fourcircleinversesansserif"] = 0x278d;
-  t["fourdeva"] = 0x096a;
-  t["fourgujarati"] = 0x0aea;
-  t["fourgurmukhi"] = 0x0a6a;
-  t["fourhackarabic"] = 0x0664;
-  t["fourhangzhou"] = 0x3024;
-  t["fourideographicparen"] = 0x3223;
-  t["fourinferior"] = 0x2084;
-  t["fourmonospace"] = 0xff14;
-  t["fournumeratorbengali"] = 0x09f7;
-  t["fouroldstyle"] = 0xf734;
-  t["fourparen"] = 0x2477;
-  t["fourperiod"] = 0x248b;
-  t["fourpersian"] = 0x06f4;
-  t["fourroman"] = 0x2173;
-  t["foursuperior"] = 0x2074;
-  t["fourteencircle"] = 0x246d;
-  t["fourteenparen"] = 0x2481;
-  t["fourteenperiod"] = 0x2495;
-  t["fourthai"] = 0x0e54;
-  t["fourthtonechinese"] = 0x02cb;
-  t["fparen"] = 0x24a1;
-  t["fraction"] = 0x2044;
-  t["franc"] = 0x20a3;
-  t["g"] = 0x0067;
-  t["gabengali"] = 0x0997;
-  t["gacute"] = 0x01f5;
-  t["gadeva"] = 0x0917;
-  t["gafarabic"] = 0x06af;
-  t["gaffinalarabic"] = 0xfb93;
-  t["gafinitialarabic"] = 0xfb94;
-  t["gafmedialarabic"] = 0xfb95;
-  t["gagujarati"] = 0x0a97;
-  t["gagurmukhi"] = 0x0a17;
-  t["gahiragana"] = 0x304c;
-  t["gakatakana"] = 0x30ac;
-  t["gamma"] = 0x03b3;
-  t["gammalatinsmall"] = 0x0263;
-  t["gammasuperior"] = 0x02e0;
-  t["gangiacoptic"] = 0x03eb;
-  t["gbopomofo"] = 0x310d;
-  t["gbreve"] = 0x011f;
-  t["gcaron"] = 0x01e7;
-  t["gcedilla"] = 0x0123;
-  t["gcircle"] = 0x24d6;
-  t["gcircumflex"] = 0x011d;
-  t["gcommaaccent"] = 0x0123;
-  t["gdot"] = 0x0121;
-  t["gdotaccent"] = 0x0121;
-  t["gecyrillic"] = 0x0433;
-  t["gehiragana"] = 0x3052;
-  t["gekatakana"] = 0x30b2;
-  t["geometricallyequal"] = 0x2251;
-  t["gereshaccenthebrew"] = 0x059c;
-  t["gereshhebrew"] = 0x05f3;
-  t["gereshmuqdamhebrew"] = 0x059d;
-  t["germandbls"] = 0x00df;
-  t["gershayimaccenthebrew"] = 0x059e;
-  t["gershayimhebrew"] = 0x05f4;
-  t["getamark"] = 0x3013;
-  t["ghabengali"] = 0x0998;
-  t["ghadarmenian"] = 0x0572;
-  t["ghadeva"] = 0x0918;
-  t["ghagujarati"] = 0x0a98;
-  t["ghagurmukhi"] = 0x0a18;
-  t["ghainarabic"] = 0x063a;
-  t["ghainfinalarabic"] = 0xfece;
-  t["ghaininitialarabic"] = 0xfecf;
-  t["ghainmedialarabic"] = 0xfed0;
-  t["ghemiddlehookcyrillic"] = 0x0495;
-  t["ghestrokecyrillic"] = 0x0493;
-  t["gheupturncyrillic"] = 0x0491;
-  t["ghhadeva"] = 0x095a;
-  t["ghhagurmukhi"] = 0x0a5a;
-  t["ghook"] = 0x0260;
-  t["ghzsquare"] = 0x3393;
-  t["gihiragana"] = 0x304e;
-  t["gikatakana"] = 0x30ae;
-  t["gimarmenian"] = 0x0563;
-  t["gimel"] = 0x05d2;
-  t["gimeldagesh"] = 0xfb32;
-  t["gimeldageshhebrew"] = 0xfb32;
-  t["gimelhebrew"] = 0x05d2;
-  t["gjecyrillic"] = 0x0453;
-  t["glottalinvertedstroke"] = 0x01be;
-  t["glottalstop"] = 0x0294;
-  t["glottalstopinverted"] = 0x0296;
-  t["glottalstopmod"] = 0x02c0;
-  t["glottalstopreversed"] = 0x0295;
-  t["glottalstopreversedmod"] = 0x02c1;
-  t["glottalstopreversedsuperior"] = 0x02e4;
-  t["glottalstopstroke"] = 0x02a1;
-  t["glottalstopstrokereversed"] = 0x02a2;
-  t["gmacron"] = 0x1e21;
-  t["gmonospace"] = 0xff47;
-  t["gohiragana"] = 0x3054;
-  t["gokatakana"] = 0x30b4;
-  t["gparen"] = 0x24a2;
-  t["gpasquare"] = 0x33ac;
-  t["gradient"] = 0x2207;
-  t["grave"] = 0x0060;
-  t["gravebelowcmb"] = 0x0316;
-  t["gravecmb"] = 0x0300;
-  t["gravecomb"] = 0x0300;
-  t["gravedeva"] = 0x0953;
-  t["gravelowmod"] = 0x02ce;
-  t["gravemonospace"] = 0xff40;
-  t["gravetonecmb"] = 0x0340;
-  t["greater"] = 0x003e;
-  t["greaterequal"] = 0x2265;
-  t["greaterequalorless"] = 0x22db;
-  t["greatermonospace"] = 0xff1e;
-  t["greaterorequivalent"] = 0x2273;
-  t["greaterorless"] = 0x2277;
-  t["greateroverequal"] = 0x2267;
-  t["greatersmall"] = 0xfe65;
-  t["gscript"] = 0x0261;
-  t["gstroke"] = 0x01e5;
-  t["guhiragana"] = 0x3050;
-  t["guillemotleft"] = 0x00ab;
-  t["guillemotright"] = 0x00bb;
-  t["guilsinglleft"] = 0x2039;
-  t["guilsinglright"] = 0x203a;
-  t["gukatakana"] = 0x30b0;
-  t["guramusquare"] = 0x3318;
-  t["gysquare"] = 0x33c9;
-  t["h"] = 0x0068;
-  t["haabkhasiancyrillic"] = 0x04a9;
-  t["haaltonearabic"] = 0x06c1;
-  t["habengali"] = 0x09b9;
-  t["hadescendercyrillic"] = 0x04b3;
-  t["hadeva"] = 0x0939;
-  t["hagujarati"] = 0x0ab9;
-  t["hagurmukhi"] = 0x0a39;
-  t["haharabic"] = 0x062d;
-  t["hahfinalarabic"] = 0xfea2;
-  t["hahinitialarabic"] = 0xfea3;
-  t["hahiragana"] = 0x306f;
-  t["hahmedialarabic"] = 0xfea4;
-  t["haitusquare"] = 0x332a;
-  t["hakatakana"] = 0x30cf;
-  t["hakatakanahalfwidth"] = 0xff8a;
-  t["halantgurmukhi"] = 0x0a4d;
-  t["hamzaarabic"] = 0x0621;
-  t["hamzalowarabic"] = 0x0621;
-  t["hangulfiller"] = 0x3164;
-  t["hardsigncyrillic"] = 0x044a;
-  t["harpoonleftbarbup"] = 0x21bc;
-  t["harpoonrightbarbup"] = 0x21c0;
-  t["hasquare"] = 0x33ca;
-  t["hatafpatah"] = 0x05b2;
-  t["hatafpatah16"] = 0x05b2;
-  t["hatafpatah23"] = 0x05b2;
-  t["hatafpatah2f"] = 0x05b2;
-  t["hatafpatahhebrew"] = 0x05b2;
-  t["hatafpatahnarrowhebrew"] = 0x05b2;
-  t["hatafpatahquarterhebrew"] = 0x05b2;
-  t["hatafpatahwidehebrew"] = 0x05b2;
-  t["hatafqamats"] = 0x05b3;
-  t["hatafqamats1b"] = 0x05b3;
-  t["hatafqamats28"] = 0x05b3;
-  t["hatafqamats34"] = 0x05b3;
-  t["hatafqamatshebrew"] = 0x05b3;
-  t["hatafqamatsnarrowhebrew"] = 0x05b3;
-  t["hatafqamatsquarterhebrew"] = 0x05b3;
-  t["hatafqamatswidehebrew"] = 0x05b3;
-  t["hatafsegol"] = 0x05b1;
-  t["hatafsegol17"] = 0x05b1;
-  t["hatafsegol24"] = 0x05b1;
-  t["hatafsegol30"] = 0x05b1;
-  t["hatafsegolhebrew"] = 0x05b1;
-  t["hatafsegolnarrowhebrew"] = 0x05b1;
-  t["hatafsegolquarterhebrew"] = 0x05b1;
-  t["hatafsegolwidehebrew"] = 0x05b1;
-  t["hbar"] = 0x0127;
-  t["hbopomofo"] = 0x310f;
-  t["hbrevebelow"] = 0x1e2b;
-  t["hcedilla"] = 0x1e29;
-  t["hcircle"] = 0x24d7;
-  t["hcircumflex"] = 0x0125;
-  t["hdieresis"] = 0x1e27;
-  t["hdotaccent"] = 0x1e23;
-  t["hdotbelow"] = 0x1e25;
-  t["he"] = 0x05d4;
-  t["heart"] = 0x2665;
-  t["heartsuitblack"] = 0x2665;
-  t["heartsuitwhite"] = 0x2661;
-  t["hedagesh"] = 0xfb34;
-  t["hedageshhebrew"] = 0xfb34;
-  t["hehaltonearabic"] = 0x06c1;
-  t["heharabic"] = 0x0647;
-  t["hehebrew"] = 0x05d4;
-  t["hehfinalaltonearabic"] = 0xfba7;
-  t["hehfinalalttwoarabic"] = 0xfeea;
-  t["hehfinalarabic"] = 0xfeea;
-  t["hehhamzaabovefinalarabic"] = 0xfba5;
-  t["hehhamzaaboveisolatedarabic"] = 0xfba4;
-  t["hehinitialaltonearabic"] = 0xfba8;
-  t["hehinitialarabic"] = 0xfeeb;
-  t["hehiragana"] = 0x3078;
-  t["hehmedialaltonearabic"] = 0xfba9;
-  t["hehmedialarabic"] = 0xfeec;
-  t["heiseierasquare"] = 0x337b;
-  t["hekatakana"] = 0x30d8;
-  t["hekatakanahalfwidth"] = 0xff8d;
-  t["hekutaarusquare"] = 0x3336;
-  t["henghook"] = 0x0267;
-  t["herutusquare"] = 0x3339;
-  t["het"] = 0x05d7;
-  t["hethebrew"] = 0x05d7;
-  t["hhook"] = 0x0266;
-  t["hhooksuperior"] = 0x02b1;
-  t["hieuhacirclekorean"] = 0x327b;
-  t["hieuhaparenkorean"] = 0x321b;
-  t["hieuhcirclekorean"] = 0x326d;
-  t["hieuhkorean"] = 0x314e;
-  t["hieuhparenkorean"] = 0x320d;
-  t["hihiragana"] = 0x3072;
-  t["hikatakana"] = 0x30d2;
-  t["hikatakanahalfwidth"] = 0xff8b;
-  t["hiriq"] = 0x05b4;
-  t["hiriq14"] = 0x05b4;
-  t["hiriq21"] = 0x05b4;
-  t["hiriq2d"] = 0x05b4;
-  t["hiriqhebrew"] = 0x05b4;
-  t["hiriqnarrowhebrew"] = 0x05b4;
-  t["hiriqquarterhebrew"] = 0x05b4;
-  t["hiriqwidehebrew"] = 0x05b4;
-  t["hlinebelow"] = 0x1e96;
-  t["hmonospace"] = 0xff48;
-  t["hoarmenian"] = 0x0570;
-  t["hohipthai"] = 0x0e2b;
-  t["hohiragana"] = 0x307b;
-  t["hokatakana"] = 0x30db;
-  t["hokatakanahalfwidth"] = 0xff8e;
-  t["holam"] = 0x05b9;
-  t["holam19"] = 0x05b9;
-  t["holam26"] = 0x05b9;
-  t["holam32"] = 0x05b9;
-  t["holamhebrew"] = 0x05b9;
-  t["holamnarrowhebrew"] = 0x05b9;
-  t["holamquarterhebrew"] = 0x05b9;
-  t["holamwidehebrew"] = 0x05b9;
-  t["honokhukthai"] = 0x0e2e;
-  t["hookabovecomb"] = 0x0309;
-  t["hookcmb"] = 0x0309;
-  t["hookpalatalizedbelowcmb"] = 0x0321;
-  t["hookretroflexbelowcmb"] = 0x0322;
-  t["hoonsquare"] = 0x3342;
-  t["horicoptic"] = 0x03e9;
-  t["horizontalbar"] = 0x2015;
-  t["horncmb"] = 0x031b;
-  t["hotsprings"] = 0x2668;
-  t["house"] = 0x2302;
-  t["hparen"] = 0x24a3;
-  t["hsuperior"] = 0x02b0;
-  t["hturned"] = 0x0265;
-  t["huhiragana"] = 0x3075;
-  t["huiitosquare"] = 0x3333;
-  t["hukatakana"] = 0x30d5;
-  t["hukatakanahalfwidth"] = 0xff8c;
-  t["hungarumlaut"] = 0x02dd;
-  t["hungarumlautcmb"] = 0x030b;
-  t["hv"] = 0x0195;
-  t["hyphen"] = 0x002d;
-  t["hypheninferior"] = 0xf6e5;
-  t["hyphenmonospace"] = 0xff0d;
-  t["hyphensmall"] = 0xfe63;
-  t["hyphensuperior"] = 0xf6e6;
-  t["hyphentwo"] = 0x2010;
-  t["i"] = 0x0069;
-  t["iacute"] = 0x00ed;
-  t["iacyrillic"] = 0x044f;
-  t["ibengali"] = 0x0987;
-  t["ibopomofo"] = 0x3127;
-  t["ibreve"] = 0x012d;
-  t["icaron"] = 0x01d0;
-  t["icircle"] = 0x24d8;
-  t["icircumflex"] = 0x00ee;
-  t["icyrillic"] = 0x0456;
-  t["idblgrave"] = 0x0209;
-  t["ideographearthcircle"] = 0x328f;
-  t["ideographfirecircle"] = 0x328b;
-  t["ideographicallianceparen"] = 0x323f;
-  t["ideographiccallparen"] = 0x323a;
-  t["ideographiccentrecircle"] = 0x32a5;
-  t["ideographicclose"] = 0x3006;
-  t["ideographiccomma"] = 0x3001;
-  t["ideographiccommaleft"] = 0xff64;
-  t["ideographiccongratulationparen"] = 0x3237;
-  t["ideographiccorrectcircle"] = 0x32a3;
-  t["ideographicearthparen"] = 0x322f;
-  t["ideographicenterpriseparen"] = 0x323d;
-  t["ideographicexcellentcircle"] = 0x329d;
-  t["ideographicfestivalparen"] = 0x3240;
-  t["ideographicfinancialcircle"] = 0x3296;
-  t["ideographicfinancialparen"] = 0x3236;
-  t["ideographicfireparen"] = 0x322b;
-  t["ideographichaveparen"] = 0x3232;
-  t["ideographichighcircle"] = 0x32a4;
-  t["ideographiciterationmark"] = 0x3005;
-  t["ideographiclaborcircle"] = 0x3298;
-  t["ideographiclaborparen"] = 0x3238;
-  t["ideographicleftcircle"] = 0x32a7;
-  t["ideographiclowcircle"] = 0x32a6;
-  t["ideographicmedicinecircle"] = 0x32a9;
-  t["ideographicmetalparen"] = 0x322e;
-  t["ideographicmoonparen"] = 0x322a;
-  t["ideographicnameparen"] = 0x3234;
-  t["ideographicperiod"] = 0x3002;
-  t["ideographicprintcircle"] = 0x329e;
-  t["ideographicreachparen"] = 0x3243;
-  t["ideographicrepresentparen"] = 0x3239;
-  t["ideographicresourceparen"] = 0x323e;
-  t["ideographicrightcircle"] = 0x32a8;
-  t["ideographicsecretcircle"] = 0x3299;
-  t["ideographicselfparen"] = 0x3242;
-  t["ideographicsocietyparen"] = 0x3233;
-  t["ideographicspace"] = 0x3000;
-  t["ideographicspecialparen"] = 0x3235;
-  t["ideographicstockparen"] = 0x3231;
-  t["ideographicstudyparen"] = 0x323b;
-  t["ideographicsunparen"] = 0x3230;
-  t["ideographicsuperviseparen"] = 0x323c;
-  t["ideographicwaterparen"] = 0x322c;
-  t["ideographicwoodparen"] = 0x322d;
-  t["ideographiczero"] = 0x3007;
-  t["ideographmetalcircle"] = 0x328e;
-  t["ideographmooncircle"] = 0x328a;
-  t["ideographnamecircle"] = 0x3294;
-  t["ideographsuncircle"] = 0x3290;
-  t["ideographwatercircle"] = 0x328c;
-  t["ideographwoodcircle"] = 0x328d;
-  t["ideva"] = 0x0907;
-  t["idieresis"] = 0x00ef;
-  t["idieresisacute"] = 0x1e2f;
-  t["idieresiscyrillic"] = 0x04e5;
-  t["idotbelow"] = 0x1ecb;
-  t["iebrevecyrillic"] = 0x04d7;
-  t["iecyrillic"] = 0x0435;
-  t["ieungacirclekorean"] = 0x3275;
-  t["ieungaparenkorean"] = 0x3215;
-  t["ieungcirclekorean"] = 0x3267;
-  t["ieungkorean"] = 0x3147;
-  t["ieungparenkorean"] = 0x3207;
-  t["igrave"] = 0x00ec;
-  t["igujarati"] = 0x0a87;
-  t["igurmukhi"] = 0x0a07;
-  t["ihiragana"] = 0x3044;
-  t["ihookabove"] = 0x1ec9;
-  t["iibengali"] = 0x0988;
-  t["iicyrillic"] = 0x0438;
-  t["iideva"] = 0x0908;
-  t["iigujarati"] = 0x0a88;
-  t["iigurmukhi"] = 0x0a08;
-  t["iimatragurmukhi"] = 0x0a40;
-  t["iinvertedbreve"] = 0x020b;
-  t["iishortcyrillic"] = 0x0439;
-  t["iivowelsignbengali"] = 0x09c0;
-  t["iivowelsigndeva"] = 0x0940;
-  t["iivowelsigngujarati"] = 0x0ac0;
-  t["ij"] = 0x0133;
-  t["ikatakana"] = 0x30a4;
-  t["ikatakanahalfwidth"] = 0xff72;
-  t["ikorean"] = 0x3163;
-  t["ilde"] = 0x02dc;
-  t["iluyhebrew"] = 0x05ac;
-  t["imacron"] = 0x012b;
-  t["imacroncyrillic"] = 0x04e3;
-  t["imageorapproximatelyequal"] = 0x2253;
-  t["imatragurmukhi"] = 0x0a3f;
-  t["imonospace"] = 0xff49;
-  t["increment"] = 0x2206;
-  t["infinity"] = 0x221e;
-  t["iniarmenian"] = 0x056b;
-  t["integral"] = 0x222b;
-  t["integralbottom"] = 0x2321;
-  t["integralbt"] = 0x2321;
-  t["integralex"] = 0xf8f5;
-  t["integraltop"] = 0x2320;
-  t["integraltp"] = 0x2320;
-  t["intersection"] = 0x2229;
-  t["intisquare"] = 0x3305;
-  t["invbullet"] = 0x25d8;
-  t["invcircle"] = 0x25d9;
-  t["invsmileface"] = 0x263b;
-  t["iocyrillic"] = 0x0451;
-  t["iogonek"] = 0x012f;
-  t["iota"] = 0x03b9;
-  t["iotadieresis"] = 0x03ca;
-  t["iotadieresistonos"] = 0x0390;
-  t["iotalatin"] = 0x0269;
-  t["iotatonos"] = 0x03af;
-  t["iparen"] = 0x24a4;
-  t["irigurmukhi"] = 0x0a72;
-  t["ismallhiragana"] = 0x3043;
-  t["ismallkatakana"] = 0x30a3;
-  t["ismallkatakanahalfwidth"] = 0xff68;
-  t["issharbengali"] = 0x09fa;
-  t["istroke"] = 0x0268;
-  t["isuperior"] = 0xf6ed;
-  t["iterationhiragana"] = 0x309d;
-  t["iterationkatakana"] = 0x30fd;
-  t["itilde"] = 0x0129;
-  t["itildebelow"] = 0x1e2d;
-  t["iubopomofo"] = 0x3129;
-  t["iucyrillic"] = 0x044e;
-  t["ivowelsignbengali"] = 0x09bf;
-  t["ivowelsigndeva"] = 0x093f;
-  t["ivowelsigngujarati"] = 0x0abf;
-  t["izhitsacyrillic"] = 0x0475;
-  t["izhitsadblgravecyrillic"] = 0x0477;
-  t["j"] = 0x006a;
-  t["jaarmenian"] = 0x0571;
-  t["jabengali"] = 0x099c;
-  t["jadeva"] = 0x091c;
-  t["jagujarati"] = 0x0a9c;
-  t["jagurmukhi"] = 0x0a1c;
-  t["jbopomofo"] = 0x3110;
-  t["jcaron"] = 0x01f0;
-  t["jcircle"] = 0x24d9;
-  t["jcircumflex"] = 0x0135;
-  t["jcrossedtail"] = 0x029d;
-  t["jdotlessstroke"] = 0x025f;
-  t["jecyrillic"] = 0x0458;
-  t["jeemarabic"] = 0x062c;
-  t["jeemfinalarabic"] = 0xfe9e;
-  t["jeeminitialarabic"] = 0xfe9f;
-  t["jeemmedialarabic"] = 0xfea0;
-  t["jeharabic"] = 0x0698;
-  t["jehfinalarabic"] = 0xfb8b;
-  t["jhabengali"] = 0x099d;
-  t["jhadeva"] = 0x091d;
-  t["jhagujarati"] = 0x0a9d;
-  t["jhagurmukhi"] = 0x0a1d;
-  t["jheharmenian"] = 0x057b;
-  t["jis"] = 0x3004;
-  t["jmonospace"] = 0xff4a;
-  t["jparen"] = 0x24a5;
-  t["jsuperior"] = 0x02b2;
-  t["k"] = 0x006b;
-  t["kabashkircyrillic"] = 0x04a1;
-  t["kabengali"] = 0x0995;
-  t["kacute"] = 0x1e31;
-  t["kacyrillic"] = 0x043a;
-  t["kadescendercyrillic"] = 0x049b;
-  t["kadeva"] = 0x0915;
-  t["kaf"] = 0x05db;
-  t["kafarabic"] = 0x0643;
-  t["kafdagesh"] = 0xfb3b;
-  t["kafdageshhebrew"] = 0xfb3b;
-  t["kaffinalarabic"] = 0xfeda;
-  t["kafhebrew"] = 0x05db;
-  t["kafinitialarabic"] = 0xfedb;
-  t["kafmedialarabic"] = 0xfedc;
-  t["kafrafehebrew"] = 0xfb4d;
-  t["kagujarati"] = 0x0a95;
-  t["kagurmukhi"] = 0x0a15;
-  t["kahiragana"] = 0x304b;
-  t["kahookcyrillic"] = 0x04c4;
-  t["kakatakana"] = 0x30ab;
-  t["kakatakanahalfwidth"] = 0xff76;
-  t["kappa"] = 0x03ba;
-  t["kappasymbolgreek"] = 0x03f0;
-  t["kapyeounmieumkorean"] = 0x3171;
-  t["kapyeounphieuphkorean"] = 0x3184;
-  t["kapyeounpieupkorean"] = 0x3178;
-  t["kapyeounssangpieupkorean"] = 0x3179;
-  t["karoriisquare"] = 0x330d;
-  t["kashidaautoarabic"] = 0x0640;
-  t["kashidaautonosidebearingarabic"] = 0x0640;
-  t["kasmallkatakana"] = 0x30f5;
-  t["kasquare"] = 0x3384;
-  t["kasraarabic"] = 0x0650;
-  t["kasratanarabic"] = 0x064d;
-  t["kastrokecyrillic"] = 0x049f;
-  t["katahiraprolongmarkhalfwidth"] = 0xff70;
-  t["kaverticalstrokecyrillic"] = 0x049d;
-  t["kbopomofo"] = 0x310e;
-  t["kcalsquare"] = 0x3389;
-  t["kcaron"] = 0x01e9;
-  t["kcedilla"] = 0x0137;
-  t["kcircle"] = 0x24da;
-  t["kcommaaccent"] = 0x0137;
-  t["kdotbelow"] = 0x1e33;
-  t["keharmenian"] = 0x0584;
-  t["kehiragana"] = 0x3051;
-  t["kekatakana"] = 0x30b1;
-  t["kekatakanahalfwidth"] = 0xff79;
-  t["kenarmenian"] = 0x056f;
-  t["kesmallkatakana"] = 0x30f6;
-  t["kgreenlandic"] = 0x0138;
-  t["khabengali"] = 0x0996;
-  t["khacyrillic"] = 0x0445;
-  t["khadeva"] = 0x0916;
-  t["khagujarati"] = 0x0a96;
-  t["khagurmukhi"] = 0x0a16;
-  t["khaharabic"] = 0x062e;
-  t["khahfinalarabic"] = 0xfea6;
-  t["khahinitialarabic"] = 0xfea7;
-  t["khahmedialarabic"] = 0xfea8;
-  t["kheicoptic"] = 0x03e7;
-  t["khhadeva"] = 0x0959;
-  t["khhagurmukhi"] = 0x0a59;
-  t["khieukhacirclekorean"] = 0x3278;
-  t["khieukhaparenkorean"] = 0x3218;
-  t["khieukhcirclekorean"] = 0x326a;
-  t["khieukhkorean"] = 0x314b;
-  t["khieukhparenkorean"] = 0x320a;
-  t["khokhaithai"] = 0x0e02;
-  t["khokhonthai"] = 0x0e05;
-  t["khokhuatthai"] = 0x0e03;
-  t["khokhwaithai"] = 0x0e04;
-  t["khomutthai"] = 0x0e5b;
-  t["khook"] = 0x0199;
-  t["khorakhangthai"] = 0x0e06;
-  t["khzsquare"] = 0x3391;
-  t["kihiragana"] = 0x304d;
-  t["kikatakana"] = 0x30ad;
-  t["kikatakanahalfwidth"] = 0xff77;
-  t["kiroguramusquare"] = 0x3315;
-  t["kiromeetorusquare"] = 0x3316;
-  t["kirosquare"] = 0x3314;
-  t["kiyeokacirclekorean"] = 0x326e;
-  t["kiyeokaparenkorean"] = 0x320e;
-  t["kiyeokcirclekorean"] = 0x3260;
-  t["kiyeokkorean"] = 0x3131;
-  t["kiyeokparenkorean"] = 0x3200;
-  t["kiyeoksioskorean"] = 0x3133;
-  t["kjecyrillic"] = 0x045c;
-  t["klinebelow"] = 0x1e35;
-  t["klsquare"] = 0x3398;
-  t["kmcubedsquare"] = 0x33a6;
-  t["kmonospace"] = 0xff4b;
-  t["kmsquaredsquare"] = 0x33a2;
-  t["kohiragana"] = 0x3053;
-  t["kohmsquare"] = 0x33c0;
-  t["kokaithai"] = 0x0e01;
-  t["kokatakana"] = 0x30b3;
-  t["kokatakanahalfwidth"] = 0xff7a;
-  t["kooposquare"] = 0x331e;
-  t["koppacyrillic"] = 0x0481;
-  t["koreanstandardsymbol"] = 0x327f;
-  t["koroniscmb"] = 0x0343;
-  t["kparen"] = 0x24a6;
-  t["kpasquare"] = 0x33aa;
-  t["ksicyrillic"] = 0x046f;
-  t["ktsquare"] = 0x33cf;
-  t["kturned"] = 0x029e;
-  t["kuhiragana"] = 0x304f;
-  t["kukatakana"] = 0x30af;
-  t["kukatakanahalfwidth"] = 0xff78;
-  t["kvsquare"] = 0x33b8;
-  t["kwsquare"] = 0x33be;
-  t["l"] = 0x006c;
-  t["labengali"] = 0x09b2;
-  t["lacute"] = 0x013a;
-  t["ladeva"] = 0x0932;
-  t["lagujarati"] = 0x0ab2;
-  t["lagurmukhi"] = 0x0a32;
-  t["lakkhangyaothai"] = 0x0e45;
-  t["lamaleffinalarabic"] = 0xfefc;
-  t["lamalefhamzaabovefinalarabic"] = 0xfef8;
-  t["lamalefhamzaaboveisolatedarabic"] = 0xfef7;
-  t["lamalefhamzabelowfinalarabic"] = 0xfefa;
-  t["lamalefhamzabelowisolatedarabic"] = 0xfef9;
-  t["lamalefisolatedarabic"] = 0xfefb;
-  t["lamalefmaddaabovefinalarabic"] = 0xfef6;
-  t["lamalefmaddaaboveisolatedarabic"] = 0xfef5;
-  t["lamarabic"] = 0x0644;
-  t["lambda"] = 0x03bb;
-  t["lambdastroke"] = 0x019b;
-  t["lamed"] = 0x05dc;
-  t["lameddagesh"] = 0xfb3c;
-  t["lameddageshhebrew"] = 0xfb3c;
-  t["lamedhebrew"] = 0x05dc;
-  t["lamfinalarabic"] = 0xfede;
-  t["lamhahinitialarabic"] = 0xfcca;
-  t["laminitialarabic"] = 0xfedf;
-  t["lamjeeminitialarabic"] = 0xfcc9;
-  t["lamkhahinitialarabic"] = 0xfccb;
-  t["lamlamhehisolatedarabic"] = 0xfdf2;
-  t["lammedialarabic"] = 0xfee0;
-  t["lammeemhahinitialarabic"] = 0xfd88;
-  t["lammeeminitialarabic"] = 0xfccc;
-  t["largecircle"] = 0x25ef;
-  t["lbar"] = 0x019a;
-  t["lbelt"] = 0x026c;
-  t["lbopomofo"] = 0x310c;
-  t["lcaron"] = 0x013e;
-  t["lcedilla"] = 0x013c;
-  t["lcircle"] = 0x24db;
-  t["lcircumflexbelow"] = 0x1e3d;
-  t["lcommaaccent"] = 0x013c;
-  t["ldot"] = 0x0140;
-  t["ldotaccent"] = 0x0140;
-  t["ldotbelow"] = 0x1e37;
-  t["ldotbelowmacron"] = 0x1e39;
-  t["leftangleabovecmb"] = 0x031a;
-  t["lefttackbelowcmb"] = 0x0318;
-  t["less"] = 0x003c;
-  t["lessequal"] = 0x2264;
-  t["lessequalorgreater"] = 0x22da;
-  t["lessmonospace"] = 0xff1c;
-  t["lessorequivalent"] = 0x2272;
-  t["lessorgreater"] = 0x2276;
-  t["lessoverequal"] = 0x2266;
-  t["lesssmall"] = 0xfe64;
-  t["lezh"] = 0x026e;
-  t["lfblock"] = 0x258c;
-  t["lhookretroflex"] = 0x026d;
-  t["lira"] = 0x20a4;
-  t["liwnarmenian"] = 0x056c;
-  t["lj"] = 0x01c9;
-  t["ljecyrillic"] = 0x0459;
-  t["ll"] = 0xf6c0;
-  t["lladeva"] = 0x0933;
-  t["llagujarati"] = 0x0ab3;
-  t["llinebelow"] = 0x1e3b;
-  t["llladeva"] = 0x0934;
-  t["llvocalicbengali"] = 0x09e1;
-  t["llvocalicdeva"] = 0x0961;
-  t["llvocalicvowelsignbengali"] = 0x09e3;
-  t["llvocalicvowelsigndeva"] = 0x0963;
-  t["lmiddletilde"] = 0x026b;
-  t["lmonospace"] = 0xff4c;
-  t["lmsquare"] = 0x33d0;
-  t["lochulathai"] = 0x0e2c;
-  t["logicaland"] = 0x2227;
-  t["logicalnot"] = 0x00ac;
-  t["logicalnotreversed"] = 0x2310;
-  t["logicalor"] = 0x2228;
-  t["lolingthai"] = 0x0e25;
-  t["longs"] = 0x017f;
-  t["lowlinecenterline"] = 0xfe4e;
-  t["lowlinecmb"] = 0x0332;
-  t["lowlinedashed"] = 0xfe4d;
-  t["lozenge"] = 0x25ca;
-  t["lparen"] = 0x24a7;
-  t["lslash"] = 0x0142;
-  t["lsquare"] = 0x2113;
-  t["lsuperior"] = 0xf6ee;
-  t["ltshade"] = 0x2591;
-  t["luthai"] = 0x0e26;
-  t["lvocalicbengali"] = 0x098c;
-  t["lvocalicdeva"] = 0x090c;
-  t["lvocalicvowelsignbengali"] = 0x09e2;
-  t["lvocalicvowelsigndeva"] = 0x0962;
-  t["lxsquare"] = 0x33d3;
-  t["m"] = 0x006d;
-  t["mabengali"] = 0x09ae;
-  t["macron"] = 0x00af;
-  t["macronbelowcmb"] = 0x0331;
-  t["macroncmb"] = 0x0304;
-  t["macronlowmod"] = 0x02cd;
-  t["macronmonospace"] = 0xffe3;
-  t["macute"] = 0x1e3f;
-  t["madeva"] = 0x092e;
-  t["magujarati"] = 0x0aae;
-  t["magurmukhi"] = 0x0a2e;
-  t["mahapakhhebrew"] = 0x05a4;
-  t["mahapakhlefthebrew"] = 0x05a4;
-  t["mahiragana"] = 0x307e;
-  t["maichattawalowleftthai"] = 0xf895;
-  t["maichattawalowrightthai"] = 0xf894;
-  t["maichattawathai"] = 0x0e4b;
-  t["maichattawaupperleftthai"] = 0xf893;
-  t["maieklowleftthai"] = 0xf88c;
-  t["maieklowrightthai"] = 0xf88b;
-  t["maiekthai"] = 0x0e48;
-  t["maiekupperleftthai"] = 0xf88a;
-  t["maihanakatleftthai"] = 0xf884;
-  t["maihanakatthai"] = 0x0e31;
-  t["maitaikhuleftthai"] = 0xf889;
-  t["maitaikhuthai"] = 0x0e47;
-  t["maitholowleftthai"] = 0xf88f;
-  t["maitholowrightthai"] = 0xf88e;
-  t["maithothai"] = 0x0e49;
-  t["maithoupperleftthai"] = 0xf88d;
-  t["maitrilowleftthai"] = 0xf892;
-  t["maitrilowrightthai"] = 0xf891;
-  t["maitrithai"] = 0x0e4a;
-  t["maitriupperleftthai"] = 0xf890;
-  t["maiyamokthai"] = 0x0e46;
-  t["makatakana"] = 0x30de;
-  t["makatakanahalfwidth"] = 0xff8f;
-  t["male"] = 0x2642;
-  t["mansyonsquare"] = 0x3347;
-  t["maqafhebrew"] = 0x05be;
-  t["mars"] = 0x2642;
-  t["masoracirclehebrew"] = 0x05af;
-  t["masquare"] = 0x3383;
-  t["mbopomofo"] = 0x3107;
-  t["mbsquare"] = 0x33d4;
-  t["mcircle"] = 0x24dc;
-  t["mcubedsquare"] = 0x33a5;
-  t["mdotaccent"] = 0x1e41;
-  t["mdotbelow"] = 0x1e43;
-  t["meemarabic"] = 0x0645;
-  t["meemfinalarabic"] = 0xfee2;
-  t["meeminitialarabic"] = 0xfee3;
-  t["meemmedialarabic"] = 0xfee4;
-  t["meemmeeminitialarabic"] = 0xfcd1;
-  t["meemmeemisolatedarabic"] = 0xfc48;
-  t["meetorusquare"] = 0x334d;
-  t["mehiragana"] = 0x3081;
-  t["meizierasquare"] = 0x337e;
-  t["mekatakana"] = 0x30e1;
-  t["mekatakanahalfwidth"] = 0xff92;
-  t["mem"] = 0x05de;
-  t["memdagesh"] = 0xfb3e;
-  t["memdageshhebrew"] = 0xfb3e;
-  t["memhebrew"] = 0x05de;
-  t["menarmenian"] = 0x0574;
-  t["merkhahebrew"] = 0x05a5;
-  t["merkhakefulahebrew"] = 0x05a6;
-  t["merkhakefulalefthebrew"] = 0x05a6;
-  t["merkhalefthebrew"] = 0x05a5;
-  t["mhook"] = 0x0271;
-  t["mhzsquare"] = 0x3392;
-  t["middledotkatakanahalfwidth"] = 0xff65;
-  t["middot"] = 0x00b7;
-  t["mieumacirclekorean"] = 0x3272;
-  t["mieumaparenkorean"] = 0x3212;
-  t["mieumcirclekorean"] = 0x3264;
-  t["mieumkorean"] = 0x3141;
-  t["mieumpansioskorean"] = 0x3170;
-  t["mieumparenkorean"] = 0x3204;
-  t["mieumpieupkorean"] = 0x316e;
-  t["mieumsioskorean"] = 0x316f;
-  t["mihiragana"] = 0x307f;
-  t["mikatakana"] = 0x30df;
-  t["mikatakanahalfwidth"] = 0xff90;
-  t["minus"] = 0x2212;
-  t["minusbelowcmb"] = 0x0320;
-  t["minuscircle"] = 0x2296;
-  t["minusmod"] = 0x02d7;
-  t["minusplus"] = 0x2213;
-  t["minute"] = 0x2032;
-  t["miribaarusquare"] = 0x334a;
-  t["mirisquare"] = 0x3349;
-  t["mlonglegturned"] = 0x0270;
-  t["mlsquare"] = 0x3396;
-  t["mmcubedsquare"] = 0x33a3;
-  t["mmonospace"] = 0xff4d;
-  t["mmsquaredsquare"] = 0x339f;
-  t["mohiragana"] = 0x3082;
-  t["mohmsquare"] = 0x33c1;
-  t["mokatakana"] = 0x30e2;
-  t["mokatakanahalfwidth"] = 0xff93;
-  t["molsquare"] = 0x33d6;
-  t["momathai"] = 0x0e21;
-  t["moverssquare"] = 0x33a7;
-  t["moverssquaredsquare"] = 0x33a8;
-  t["mparen"] = 0x24a8;
-  t["mpasquare"] = 0x33ab;
-  t["mssquare"] = 0x33b3;
-  t["msuperior"] = 0xf6ef;
-  t["mturned"] = 0x026f;
-  t["mu"] = 0x00b5;
-  t["mu1"] = 0x00b5;
-  t["muasquare"] = 0x3382;
-  t["muchgreater"] = 0x226b;
-  t["muchless"] = 0x226a;
-  t["mufsquare"] = 0x338c;
-  t["mugreek"] = 0x03bc;
-  t["mugsquare"] = 0x338d;
-  t["muhiragana"] = 0x3080;
-  t["mukatakana"] = 0x30e0;
-  t["mukatakanahalfwidth"] = 0xff91;
-  t["mulsquare"] = 0x3395;
-  t["multiply"] = 0x00d7;
-  t["mumsquare"] = 0x339b;
-  t["munahhebrew"] = 0x05a3;
-  t["munahlefthebrew"] = 0x05a3;
-  t["musicalnote"] = 0x266a;
-  t["musicalnotedbl"] = 0x266b;
-  t["musicflatsign"] = 0x266d;
-  t["musicsharpsign"] = 0x266f;
-  t["mussquare"] = 0x33b2;
-  t["muvsquare"] = 0x33b6;
-  t["muwsquare"] = 0x33bc;
-  t["mvmegasquare"] = 0x33b9;
-  t["mvsquare"] = 0x33b7;
-  t["mwmegasquare"] = 0x33bf;
-  t["mwsquare"] = 0x33bd;
-  t["n"] = 0x006e;
-  t["nabengali"] = 0x09a8;
-  t["nabla"] = 0x2207;
-  t["nacute"] = 0x0144;
-  t["nadeva"] = 0x0928;
-  t["nagujarati"] = 0x0aa8;
-  t["nagurmukhi"] = 0x0a28;
-  t["nahiragana"] = 0x306a;
-  t["nakatakana"] = 0x30ca;
-  t["nakatakanahalfwidth"] = 0xff85;
-  t["napostrophe"] = 0x0149;
-  t["nasquare"] = 0x3381;
-  t["nbopomofo"] = 0x310b;
-  t["nbspace"] = 0x00a0;
-  t["ncaron"] = 0x0148;
-  t["ncedilla"] = 0x0146;
-  t["ncircle"] = 0x24dd;
-  t["ncircumflexbelow"] = 0x1e4b;
-  t["ncommaaccent"] = 0x0146;
-  t["ndotaccent"] = 0x1e45;
-  t["ndotbelow"] = 0x1e47;
-  t["nehiragana"] = 0x306d;
-  t["nekatakana"] = 0x30cd;
-  t["nekatakanahalfwidth"] = 0xff88;
-  t["newsheqelsign"] = 0x20aa;
-  t["nfsquare"] = 0x338b;
-  t["ngabengali"] = 0x0999;
-  t["ngadeva"] = 0x0919;
-  t["ngagujarati"] = 0x0a99;
-  t["ngagurmukhi"] = 0x0a19;
-  t["ngonguthai"] = 0x0e07;
-  t["nhiragana"] = 0x3093;
-  t["nhookleft"] = 0x0272;
-  t["nhookretroflex"] = 0x0273;
-  t["nieunacirclekorean"] = 0x326f;
-  t["nieunaparenkorean"] = 0x320f;
-  t["nieuncieuckorean"] = 0x3135;
-  t["nieuncirclekorean"] = 0x3261;
-  t["nieunhieuhkorean"] = 0x3136;
-  t["nieunkorean"] = 0x3134;
-  t["nieunpansioskorean"] = 0x3168;
-  t["nieunparenkorean"] = 0x3201;
-  t["nieunsioskorean"] = 0x3167;
-  t["nieuntikeutkorean"] = 0x3166;
-  t["nihiragana"] = 0x306b;
-  t["nikatakana"] = 0x30cb;
-  t["nikatakanahalfwidth"] = 0xff86;
-  t["nikhahitleftthai"] = 0xf899;
-  t["nikhahitthai"] = 0x0e4d;
-  t["nine"] = 0x0039;
-  t["ninearabic"] = 0x0669;
-  t["ninebengali"] = 0x09ef;
-  t["ninecircle"] = 0x2468;
-  t["ninecircleinversesansserif"] = 0x2792;
-  t["ninedeva"] = 0x096f;
-  t["ninegujarati"] = 0x0aef;
-  t["ninegurmukhi"] = 0x0a6f;
-  t["ninehackarabic"] = 0x0669;
-  t["ninehangzhou"] = 0x3029;
-  t["nineideographicparen"] = 0x3228;
-  t["nineinferior"] = 0x2089;
-  t["ninemonospace"] = 0xff19;
-  t["nineoldstyle"] = 0xf739;
-  t["nineparen"] = 0x247c;
-  t["nineperiod"] = 0x2490;
-  t["ninepersian"] = 0x06f9;
-  t["nineroman"] = 0x2178;
-  t["ninesuperior"] = 0x2079;
-  t["nineteencircle"] = 0x2472;
-  t["nineteenparen"] = 0x2486;
-  t["nineteenperiod"] = 0x249a;
-  t["ninethai"] = 0x0e59;
-  t["nj"] = 0x01cc;
-  t["njecyrillic"] = 0x045a;
-  t["nkatakana"] = 0x30f3;
-  t["nkatakanahalfwidth"] = 0xff9d;
-  t["nlegrightlong"] = 0x019e;
-  t["nlinebelow"] = 0x1e49;
-  t["nmonospace"] = 0xff4e;
-  t["nmsquare"] = 0x339a;
-  t["nnabengali"] = 0x09a3;
-  t["nnadeva"] = 0x0923;
-  t["nnagujarati"] = 0x0aa3;
-  t["nnagurmukhi"] = 0x0a23;
-  t["nnnadeva"] = 0x0929;
-  t["nohiragana"] = 0x306e;
-  t["nokatakana"] = 0x30ce;
-  t["nokatakanahalfwidth"] = 0xff89;
-  t["nonbreakingspace"] = 0x00a0;
-  t["nonenthai"] = 0x0e13;
-  t["nonuthai"] = 0x0e19;
-  t["noonarabic"] = 0x0646;
-  t["noonfinalarabic"] = 0xfee6;
-  t["noonghunnaarabic"] = 0x06ba;
-  t["noonghunnafinalarabic"] = 0xfb9f;
-  t["nooninitialarabic"] = 0xfee7;
-  t["noonjeeminitialarabic"] = 0xfcd2;
-  t["noonjeemisolatedarabic"] = 0xfc4b;
-  t["noonmedialarabic"] = 0xfee8;
-  t["noonmeeminitialarabic"] = 0xfcd5;
-  t["noonmeemisolatedarabic"] = 0xfc4e;
-  t["noonnoonfinalarabic"] = 0xfc8d;
-  t["notcontains"] = 0x220c;
-  t["notelement"] = 0x2209;
-  t["notelementof"] = 0x2209;
-  t["notequal"] = 0x2260;
-  t["notgreater"] = 0x226f;
-  t["notgreaternorequal"] = 0x2271;
-  t["notgreaternorless"] = 0x2279;
-  t["notidentical"] = 0x2262;
-  t["notless"] = 0x226e;
-  t["notlessnorequal"] = 0x2270;
-  t["notparallel"] = 0x2226;
-  t["notprecedes"] = 0x2280;
-  t["notsubset"] = 0x2284;
-  t["notsucceeds"] = 0x2281;
-  t["notsuperset"] = 0x2285;
-  t["nowarmenian"] = 0x0576;
-  t["nparen"] = 0x24a9;
-  t["nssquare"] = 0x33b1;
-  t["nsuperior"] = 0x207f;
-  t["ntilde"] = 0x00f1;
-  t["nu"] = 0x03bd;
-  t["nuhiragana"] = 0x306c;
-  t["nukatakana"] = 0x30cc;
-  t["nukatakanahalfwidth"] = 0xff87;
-  t["nuktabengali"] = 0x09bc;
-  t["nuktadeva"] = 0x093c;
-  t["nuktagujarati"] = 0x0abc;
-  t["nuktagurmukhi"] = 0x0a3c;
-  t["numbersign"] = 0x0023;
-  t["numbersignmonospace"] = 0xff03;
-  t["numbersignsmall"] = 0xfe5f;
-  t["numeralsigngreek"] = 0x0374;
-  t["numeralsignlowergreek"] = 0x0375;
-  t["numero"] = 0x2116;
-  t["nun"] = 0x05e0;
-  t["nundagesh"] = 0xfb40;
-  t["nundageshhebrew"] = 0xfb40;
-  t["nunhebrew"] = 0x05e0;
-  t["nvsquare"] = 0x33b5;
-  t["nwsquare"] = 0x33bb;
-  t["nyabengali"] = 0x099e;
-  t["nyadeva"] = 0x091e;
-  t["nyagujarati"] = 0x0a9e;
-  t["nyagurmukhi"] = 0x0a1e;
-  t["o"] = 0x006f;
-  t["oacute"] = 0x00f3;
-  t["oangthai"] = 0x0e2d;
-  t["obarred"] = 0x0275;
-  t["obarredcyrillic"] = 0x04e9;
-  t["obarreddieresiscyrillic"] = 0x04eb;
-  t["obengali"] = 0x0993;
-  t["obopomofo"] = 0x311b;
-  t["obreve"] = 0x014f;
-  t["ocandradeva"] = 0x0911;
-  t["ocandragujarati"] = 0x0a91;
-  t["ocandravowelsigndeva"] = 0x0949;
-  t["ocandravowelsigngujarati"] = 0x0ac9;
-  t["ocaron"] = 0x01d2;
-  t["ocircle"] = 0x24de;
-  t["ocircumflex"] = 0x00f4;
-  t["ocircumflexacute"] = 0x1ed1;
-  t["ocircumflexdotbelow"] = 0x1ed9;
-  t["ocircumflexgrave"] = 0x1ed3;
-  t["ocircumflexhookabove"] = 0x1ed5;
-  t["ocircumflextilde"] = 0x1ed7;
-  t["ocyrillic"] = 0x043e;
-  t["odblacute"] = 0x0151;
-  t["odblgrave"] = 0x020d;
-  t["odeva"] = 0x0913;
-  t["odieresis"] = 0x00f6;
-  t["odieresiscyrillic"] = 0x04e7;
-  t["odotbelow"] = 0x1ecd;
-  t["oe"] = 0x0153;
-  t["oekorean"] = 0x315a;
-  t["ogonek"] = 0x02db;
-  t["ogonekcmb"] = 0x0328;
-  t["ograve"] = 0x00f2;
-  t["ogujarati"] = 0x0a93;
-  t["oharmenian"] = 0x0585;
-  t["ohiragana"] = 0x304a;
-  t["ohookabove"] = 0x1ecf;
-  t["ohorn"] = 0x01a1;
-  t["ohornacute"] = 0x1edb;
-  t["ohorndotbelow"] = 0x1ee3;
-  t["ohorngrave"] = 0x1edd;
-  t["ohornhookabove"] = 0x1edf;
-  t["ohorntilde"] = 0x1ee1;
-  t["ohungarumlaut"] = 0x0151;
-  t["oi"] = 0x01a3;
-  t["oinvertedbreve"] = 0x020f;
-  t["okatakana"] = 0x30aa;
-  t["okatakanahalfwidth"] = 0xff75;
-  t["okorean"] = 0x3157;
-  t["olehebrew"] = 0x05ab;
-  t["omacron"] = 0x014d;
-  t["omacronacute"] = 0x1e53;
-  t["omacrongrave"] = 0x1e51;
-  t["omdeva"] = 0x0950;
-  t["omega"] = 0x03c9;
-  t["omega1"] = 0x03d6;
-  t["omegacyrillic"] = 0x0461;
-  t["omegalatinclosed"] = 0x0277;
-  t["omegaroundcyrillic"] = 0x047b;
-  t["omegatitlocyrillic"] = 0x047d;
-  t["omegatonos"] = 0x03ce;
-  t["omgujarati"] = 0x0ad0;
-  t["omicron"] = 0x03bf;
-  t["omicrontonos"] = 0x03cc;
-  t["omonospace"] = 0xff4f;
-  t["one"] = 0x0031;
-  t["onearabic"] = 0x0661;
-  t["onebengali"] = 0x09e7;
-  t["onecircle"] = 0x2460;
-  t["onecircleinversesansserif"] = 0x278a;
-  t["onedeva"] = 0x0967;
-  t["onedotenleader"] = 0x2024;
-  t["oneeighth"] = 0x215b;
-  t["onefitted"] = 0xf6dc;
-  t["onegujarati"] = 0x0ae7;
-  t["onegurmukhi"] = 0x0a67;
-  t["onehackarabic"] = 0x0661;
-  t["onehalf"] = 0x00bd;
-  t["onehangzhou"] = 0x3021;
-  t["oneideographicparen"] = 0x3220;
-  t["oneinferior"] = 0x2081;
-  t["onemonospace"] = 0xff11;
-  t["onenumeratorbengali"] = 0x09f4;
-  t["oneoldstyle"] = 0xf731;
-  t["oneparen"] = 0x2474;
-  t["oneperiod"] = 0x2488;
-  t["onepersian"] = 0x06f1;
-  t["onequarter"] = 0x00bc;
-  t["oneroman"] = 0x2170;
-  t["onesuperior"] = 0x00b9;
-  t["onethai"] = 0x0e51;
-  t["onethird"] = 0x2153;
-  t["oogonek"] = 0x01eb;
-  t["oogonekmacron"] = 0x01ed;
-  t["oogurmukhi"] = 0x0a13;
-  t["oomatragurmukhi"] = 0x0a4b;
-  t["oopen"] = 0x0254;
-  t["oparen"] = 0x24aa;
-  t["openbullet"] = 0x25e6;
-  t["option"] = 0x2325;
-  t["ordfeminine"] = 0x00aa;
-  t["ordmasculine"] = 0x00ba;
-  t["orthogonal"] = 0x221f;
-  t["oshortdeva"] = 0x0912;
-  t["oshortvowelsigndeva"] = 0x094a;
-  t["oslash"] = 0x00f8;
-  t["oslashacute"] = 0x01ff;
-  t["osmallhiragana"] = 0x3049;
-  t["osmallkatakana"] = 0x30a9;
-  t["osmallkatakanahalfwidth"] = 0xff6b;
-  t["ostrokeacute"] = 0x01ff;
-  t["osuperior"] = 0xf6f0;
-  t["otcyrillic"] = 0x047f;
-  t["otilde"] = 0x00f5;
-  t["otildeacute"] = 0x1e4d;
-  t["otildedieresis"] = 0x1e4f;
-  t["oubopomofo"] = 0x3121;
-  t["overline"] = 0x203e;
-  t["overlinecenterline"] = 0xfe4a;
-  t["overlinecmb"] = 0x0305;
-  t["overlinedashed"] = 0xfe49;
-  t["overlinedblwavy"] = 0xfe4c;
-  t["overlinewavy"] = 0xfe4b;
-  t["overscore"] = 0x00af;
-  t["ovowelsignbengali"] = 0x09cb;
-  t["ovowelsigndeva"] = 0x094b;
-  t["ovowelsigngujarati"] = 0x0acb;
-  t["p"] = 0x0070;
-  t["paampssquare"] = 0x3380;
-  t["paasentosquare"] = 0x332b;
-  t["pabengali"] = 0x09aa;
-  t["pacute"] = 0x1e55;
-  t["padeva"] = 0x092a;
-  t["pagedown"] = 0x21df;
-  t["pageup"] = 0x21de;
-  t["pagujarati"] = 0x0aaa;
-  t["pagurmukhi"] = 0x0a2a;
-  t["pahiragana"] = 0x3071;
-  t["paiyannoithai"] = 0x0e2f;
-  t["pakatakana"] = 0x30d1;
-  t["palatalizationcyrilliccmb"] = 0x0484;
-  t["palochkacyrillic"] = 0x04c0;
-  t["pansioskorean"] = 0x317f;
-  t["paragraph"] = 0x00b6;
-  t["parallel"] = 0x2225;
-  t["parenleft"] = 0x0028;
-  t["parenleftaltonearabic"] = 0xfd3e;
-  t["parenleftbt"] = 0xf8ed;
-  t["parenleftex"] = 0xf8ec;
-  t["parenleftinferior"] = 0x208d;
-  t["parenleftmonospace"] = 0xff08;
-  t["parenleftsmall"] = 0xfe59;
-  t["parenleftsuperior"] = 0x207d;
-  t["parenlefttp"] = 0xf8eb;
-  t["parenleftvertical"] = 0xfe35;
-  t["parenright"] = 0x0029;
-  t["parenrightaltonearabic"] = 0xfd3f;
-  t["parenrightbt"] = 0xf8f8;
-  t["parenrightex"] = 0xf8f7;
-  t["parenrightinferior"] = 0x208e;
-  t["parenrightmonospace"] = 0xff09;
-  t["parenrightsmall"] = 0xfe5a;
-  t["parenrightsuperior"] = 0x207e;
-  t["parenrighttp"] = 0xf8f6;
-  t["parenrightvertical"] = 0xfe36;
-  t["partialdiff"] = 0x2202;
-  t["paseqhebrew"] = 0x05c0;
-  t["pashtahebrew"] = 0x0599;
-  t["pasquare"] = 0x33a9;
-  t["patah"] = 0x05b7;
-  t["patah11"] = 0x05b7;
-  t["patah1d"] = 0x05b7;
-  t["patah2a"] = 0x05b7;
-  t["patahhebrew"] = 0x05b7;
-  t["patahnarrowhebrew"] = 0x05b7;
-  t["patahquarterhebrew"] = 0x05b7;
-  t["patahwidehebrew"] = 0x05b7;
-  t["pazerhebrew"] = 0x05a1;
-  t["pbopomofo"] = 0x3106;
-  t["pcircle"] = 0x24df;
-  t["pdotaccent"] = 0x1e57;
-  t["pe"] = 0x05e4;
-  t["pecyrillic"] = 0x043f;
-  t["pedagesh"] = 0xfb44;
-  t["pedageshhebrew"] = 0xfb44;
-  t["peezisquare"] = 0x333b;
-  t["pefinaldageshhebrew"] = 0xfb43;
-  t["peharabic"] = 0x067e;
-  t["peharmenian"] = 0x057a;
-  t["pehebrew"] = 0x05e4;
-  t["pehfinalarabic"] = 0xfb57;
-  t["pehinitialarabic"] = 0xfb58;
-  t["pehiragana"] = 0x307a;
-  t["pehmedialarabic"] = 0xfb59;
-  t["pekatakana"] = 0x30da;
-  t["pemiddlehookcyrillic"] = 0x04a7;
-  t["perafehebrew"] = 0xfb4e;
-  t["percent"] = 0x0025;
-  t["percentarabic"] = 0x066a;
-  t["percentmonospace"] = 0xff05;
-  t["percentsmall"] = 0xfe6a;
-  t["period"] = 0x002e;
-  t["periodarmenian"] = 0x0589;
-  t["periodcentered"] = 0x00b7;
-  t["periodhalfwidth"] = 0xff61;
-  t["periodinferior"] = 0xf6e7;
-  t["periodmonospace"] = 0xff0e;
-  t["periodsmall"] = 0xfe52;
-  t["periodsuperior"] = 0xf6e8;
-  t["perispomenigreekcmb"] = 0x0342;
-  t["perpendicular"] = 0x22a5;
-  t["perthousand"] = 0x2030;
-  t["peseta"] = 0x20a7;
-  t["pfsquare"] = 0x338a;
-  t["phabengali"] = 0x09ab;
-  t["phadeva"] = 0x092b;
-  t["phagujarati"] = 0x0aab;
-  t["phagurmukhi"] = 0x0a2b;
-  t["phi"] = 0x03c6;
-  t["phi1"] = 0x03d5;
-  t["phieuphacirclekorean"] = 0x327a;
-  t["phieuphaparenkorean"] = 0x321a;
-  t["phieuphcirclekorean"] = 0x326c;
-  t["phieuphkorean"] = 0x314d;
-  t["phieuphparenkorean"] = 0x320c;
-  t["philatin"] = 0x0278;
-  t["phinthuthai"] = 0x0e3a;
-  t["phisymbolgreek"] = 0x03d5;
-  t["phook"] = 0x01a5;
-  t["phophanthai"] = 0x0e1e;
-  t["phophungthai"] = 0x0e1c;
-  t["phosamphaothai"] = 0x0e20;
-  t["pi"] = 0x03c0;
-  t["pieupacirclekorean"] = 0x3273;
-  t["pieupaparenkorean"] = 0x3213;
-  t["pieupcieuckorean"] = 0x3176;
-  t["pieupcirclekorean"] = 0x3265;
-  t["pieupkiyeokkorean"] = 0x3172;
-  t["pieupkorean"] = 0x3142;
-  t["pieupparenkorean"] = 0x3205;
-  t["pieupsioskiyeokkorean"] = 0x3174;
-  t["pieupsioskorean"] = 0x3144;
-  t["pieupsiostikeutkorean"] = 0x3175;
-  t["pieupthieuthkorean"] = 0x3177;
-  t["pieuptikeutkorean"] = 0x3173;
-  t["pihiragana"] = 0x3074;
-  t["pikatakana"] = 0x30d4;
-  t["pisymbolgreek"] = 0x03d6;
-  t["piwrarmenian"] = 0x0583;
-  t["plus"] = 0x002b;
-  t["plusbelowcmb"] = 0x031f;
-  t["pluscircle"] = 0x2295;
-  t["plusminus"] = 0x00b1;
-  t["plusmod"] = 0x02d6;
-  t["plusmonospace"] = 0xff0b;
-  t["plussmall"] = 0xfe62;
-  t["plussuperior"] = 0x207a;
-  t["pmonospace"] = 0xff50;
-  t["pmsquare"] = 0x33d8;
-  t["pohiragana"] = 0x307d;
-  t["pointingindexdownwhite"] = 0x261f;
-  t["pointingindexleftwhite"] = 0x261c;
-  t["pointingindexrightwhite"] = 0x261e;
-  t["pointingindexupwhite"] = 0x261d;
-  t["pokatakana"] = 0x30dd;
-  t["poplathai"] = 0x0e1b;
-  t["postalmark"] = 0x3012;
-  t["postalmarkface"] = 0x3020;
-  t["pparen"] = 0x24ab;
-  t["precedes"] = 0x227a;
-  t["prescription"] = 0x211e;
-  t["primemod"] = 0x02b9;
-  t["primereversed"] = 0x2035;
-  t["product"] = 0x220f;
-  t["projective"] = 0x2305;
-  t["prolongedkana"] = 0x30fc;
-  t["propellor"] = 0x2318;
-  t["propersubset"] = 0x2282;
-  t["propersuperset"] = 0x2283;
-  t["proportion"] = 0x2237;
-  t["proportional"] = 0x221d;
-  t["psi"] = 0x03c8;
-  t["psicyrillic"] = 0x0471;
-  t["psilipneumatacyrilliccmb"] = 0x0486;
-  t["pssquare"] = 0x33b0;
-  t["puhiragana"] = 0x3077;
-  t["pukatakana"] = 0x30d7;
-  t["pvsquare"] = 0x33b4;
-  t["pwsquare"] = 0x33ba;
-  t["q"] = 0x0071;
-  t["qadeva"] = 0x0958;
-  t["qadmahebrew"] = 0x05a8;
-  t["qafarabic"] = 0x0642;
-  t["qaffinalarabic"] = 0xfed6;
-  t["qafinitialarabic"] = 0xfed7;
-  t["qafmedialarabic"] = 0xfed8;
-  t["qamats"] = 0x05b8;
-  t["qamats10"] = 0x05b8;
-  t["qamats1a"] = 0x05b8;
-  t["qamats1c"] = 0x05b8;
-  t["qamats27"] = 0x05b8;
-  t["qamats29"] = 0x05b8;
-  t["qamats33"] = 0x05b8;
-  t["qamatsde"] = 0x05b8;
-  t["qamatshebrew"] = 0x05b8;
-  t["qamatsnarrowhebrew"] = 0x05b8;
-  t["qamatsqatanhebrew"] = 0x05b8;
-  t["qamatsqatannarrowhebrew"] = 0x05b8;
-  t["qamatsqatanquarterhebrew"] = 0x05b8;
-  t["qamatsqatanwidehebrew"] = 0x05b8;
-  t["qamatsquarterhebrew"] = 0x05b8;
-  t["qamatswidehebrew"] = 0x05b8;
-  t["qarneyparahebrew"] = 0x059f;
-  t["qbopomofo"] = 0x3111;
-  t["qcircle"] = 0x24e0;
-  t["qhook"] = 0x02a0;
-  t["qmonospace"] = 0xff51;
-  t["qof"] = 0x05e7;
-  t["qofdagesh"] = 0xfb47;
-  t["qofdageshhebrew"] = 0xfb47;
-  t["qofhebrew"] = 0x05e7;
-  t["qparen"] = 0x24ac;
-  t["quarternote"] = 0x2669;
-  t["qubuts"] = 0x05bb;
-  t["qubuts18"] = 0x05bb;
-  t["qubuts25"] = 0x05bb;
-  t["qubuts31"] = 0x05bb;
-  t["qubutshebrew"] = 0x05bb;
-  t["qubutsnarrowhebrew"] = 0x05bb;
-  t["qubutsquarterhebrew"] = 0x05bb;
-  t["qubutswidehebrew"] = 0x05bb;
-  t["question"] = 0x003f;
-  t["questionarabic"] = 0x061f;
-  t["questionarmenian"] = 0x055e;
-  t["questiondown"] = 0x00bf;
-  t["questiondownsmall"] = 0xf7bf;
-  t["questiongreek"] = 0x037e;
-  t["questionmonospace"] = 0xff1f;
-  t["questionsmall"] = 0xf73f;
-  t["quotedbl"] = 0x0022;
-  t["quotedblbase"] = 0x201e;
-  t["quotedblleft"] = 0x201c;
-  t["quotedblmonospace"] = 0xff02;
-  t["quotedblprime"] = 0x301e;
-  t["quotedblprimereversed"] = 0x301d;
-  t["quotedblright"] = 0x201d;
-  t["quoteleft"] = 0x2018;
-  t["quoteleftreversed"] = 0x201b;
-  t["quotereversed"] = 0x201b;
-  t["quoteright"] = 0x2019;
-  t["quoterightn"] = 0x0149;
-  t["quotesinglbase"] = 0x201a;
-  t["quotesingle"] = 0x0027;
-  t["quotesinglemonospace"] = 0xff07;
-  t["r"] = 0x0072;
-  t["raarmenian"] = 0x057c;
-  t["rabengali"] = 0x09b0;
-  t["racute"] = 0x0155;
-  t["radeva"] = 0x0930;
-  t["radical"] = 0x221a;
-  t["radicalex"] = 0xf8e5;
-  t["radoverssquare"] = 0x33ae;
-  t["radoverssquaredsquare"] = 0x33af;
-  t["radsquare"] = 0x33ad;
-  t["rafe"] = 0x05bf;
-  t["rafehebrew"] = 0x05bf;
-  t["ragujarati"] = 0x0ab0;
-  t["ragurmukhi"] = 0x0a30;
-  t["rahiragana"] = 0x3089;
-  t["rakatakana"] = 0x30e9;
-  t["rakatakanahalfwidth"] = 0xff97;
-  t["ralowerdiagonalbengali"] = 0x09f1;
-  t["ramiddlediagonalbengali"] = 0x09f0;
-  t["ramshorn"] = 0x0264;
-  t["ratio"] = 0x2236;
-  t["rbopomofo"] = 0x3116;
-  t["rcaron"] = 0x0159;
-  t["rcedilla"] = 0x0157;
-  t["rcircle"] = 0x24e1;
-  t["rcommaaccent"] = 0x0157;
-  t["rdblgrave"] = 0x0211;
-  t["rdotaccent"] = 0x1e59;
-  t["rdotbelow"] = 0x1e5b;
-  t["rdotbelowmacron"] = 0x1e5d;
-  t["referencemark"] = 0x203b;
-  t["reflexsubset"] = 0x2286;
-  t["reflexsuperset"] = 0x2287;
-  t["registered"] = 0x00ae;
-  t["registersans"] = 0xf8e8;
-  t["registerserif"] = 0xf6da;
-  t["reharabic"] = 0x0631;
-  t["reharmenian"] = 0x0580;
-  t["rehfinalarabic"] = 0xfeae;
-  t["rehiragana"] = 0x308c;
-  t["rekatakana"] = 0x30ec;
-  t["rekatakanahalfwidth"] = 0xff9a;
-  t["resh"] = 0x05e8;
-  t["reshdageshhebrew"] = 0xfb48;
-  t["reshhebrew"] = 0x05e8;
-  t["reversedtilde"] = 0x223d;
-  t["reviahebrew"] = 0x0597;
-  t["reviamugrashhebrew"] = 0x0597;
-  t["revlogicalnot"] = 0x2310;
-  t["rfishhook"] = 0x027e;
-  t["rfishhookreversed"] = 0x027f;
-  t["rhabengali"] = 0x09dd;
-  t["rhadeva"] = 0x095d;
-  t["rho"] = 0x03c1;
-  t["rhook"] = 0x027d;
-  t["rhookturned"] = 0x027b;
-  t["rhookturnedsuperior"] = 0x02b5;
-  t["rhosymbolgreek"] = 0x03f1;
-  t["rhotichookmod"] = 0x02de;
-  t["rieulacirclekorean"] = 0x3271;
-  t["rieulaparenkorean"] = 0x3211;
-  t["rieulcirclekorean"] = 0x3263;
-  t["rieulhieuhkorean"] = 0x3140;
-  t["rieulkiyeokkorean"] = 0x313a;
-  t["rieulkiyeoksioskorean"] = 0x3169;
-  t["rieulkorean"] = 0x3139;
-  t["rieulmieumkorean"] = 0x313b;
-  t["rieulpansioskorean"] = 0x316c;
-  t["rieulparenkorean"] = 0x3203;
-  t["rieulphieuphkorean"] = 0x313f;
-  t["rieulpieupkorean"] = 0x313c;
-  t["rieulpieupsioskorean"] = 0x316b;
-  t["rieulsioskorean"] = 0x313d;
-  t["rieulthieuthkorean"] = 0x313e;
-  t["rieultikeutkorean"] = 0x316a;
-  t["rieulyeorinhieuhkorean"] = 0x316d;
-  t["rightangle"] = 0x221f;
-  t["righttackbelowcmb"] = 0x0319;
-  t["righttriangle"] = 0x22bf;
-  t["rihiragana"] = 0x308a;
-  t["rikatakana"] = 0x30ea;
-  t["rikatakanahalfwidth"] = 0xff98;
-  t["ring"] = 0x02da;
-  t["ringbelowcmb"] = 0x0325;
-  t["ringcmb"] = 0x030a;
-  t["ringhalfleft"] = 0x02bf;
-  t["ringhalfleftarmenian"] = 0x0559;
-  t["ringhalfleftbelowcmb"] = 0x031c;
-  t["ringhalfleftcentered"] = 0x02d3;
-  t["ringhalfright"] = 0x02be;
-  t["ringhalfrightbelowcmb"] = 0x0339;
-  t["ringhalfrightcentered"] = 0x02d2;
-  t["rinvertedbreve"] = 0x0213;
-  t["rittorusquare"] = 0x3351;
-  t["rlinebelow"] = 0x1e5f;
-  t["rlongleg"] = 0x027c;
-  t["rlonglegturned"] = 0x027a;
-  t["rmonospace"] = 0xff52;
-  t["rohiragana"] = 0x308d;
-  t["rokatakana"] = 0x30ed;
-  t["rokatakanahalfwidth"] = 0xff9b;
-  t["roruathai"] = 0x0e23;
-  t["rparen"] = 0x24ad;
-  t["rrabengali"] = 0x09dc;
-  t["rradeva"] = 0x0931;
-  t["rragurmukhi"] = 0x0a5c;
-  t["rreharabic"] = 0x0691;
-  t["rrehfinalarabic"] = 0xfb8d;
-  t["rrvocalicbengali"] = 0x09e0;
-  t["rrvocalicdeva"] = 0x0960;
-  t["rrvocalicgujarati"] = 0x0ae0;
-  t["rrvocalicvowelsignbengali"] = 0x09c4;
-  t["rrvocalicvowelsigndeva"] = 0x0944;
-  t["rrvocalicvowelsigngujarati"] = 0x0ac4;
-  t["rsuperior"] = 0xf6f1;
-  t["rtblock"] = 0x2590;
-  t["rturned"] = 0x0279;
-  t["rturnedsuperior"] = 0x02b4;
-  t["ruhiragana"] = 0x308b;
-  t["rukatakana"] = 0x30eb;
-  t["rukatakanahalfwidth"] = 0xff99;
-  t["rupeemarkbengali"] = 0x09f2;
-  t["rupeesignbengali"] = 0x09f3;
-  t["rupiah"] = 0xf6dd;
-  t["ruthai"] = 0x0e24;
-  t["rvocalicbengali"] = 0x098b;
-  t["rvocalicdeva"] = 0x090b;
-  t["rvocalicgujarati"] = 0x0a8b;
-  t["rvocalicvowelsignbengali"] = 0x09c3;
-  t["rvocalicvowelsigndeva"] = 0x0943;
-  t["rvocalicvowelsigngujarati"] = 0x0ac3;
-  t["s"] = 0x0073;
-  t["sabengali"] = 0x09b8;
-  t["sacute"] = 0x015b;
-  t["sacutedotaccent"] = 0x1e65;
-  t["sadarabic"] = 0x0635;
-  t["sadeva"] = 0x0938;
-  t["sadfinalarabic"] = 0xfeba;
-  t["sadinitialarabic"] = 0xfebb;
-  t["sadmedialarabic"] = 0xfebc;
-  t["sagujarati"] = 0x0ab8;
-  t["sagurmukhi"] = 0x0a38;
-  t["sahiragana"] = 0x3055;
-  t["sakatakana"] = 0x30b5;
-  t["sakatakanahalfwidth"] = 0xff7b;
-  t["sallallahoualayhewasallamarabic"] = 0xfdfa;
-  t["samekh"] = 0x05e1;
-  t["samekhdagesh"] = 0xfb41;
-  t["samekhdageshhebrew"] = 0xfb41;
-  t["samekhhebrew"] = 0x05e1;
-  t["saraaathai"] = 0x0e32;
-  t["saraaethai"] = 0x0e41;
-  t["saraaimaimalaithai"] = 0x0e44;
-  t["saraaimaimuanthai"] = 0x0e43;
-  t["saraamthai"] = 0x0e33;
-  t["saraathai"] = 0x0e30;
-  t["saraethai"] = 0x0e40;
-  t["saraiileftthai"] = 0xf886;
-  t["saraiithai"] = 0x0e35;
-  t["saraileftthai"] = 0xf885;
-  t["saraithai"] = 0x0e34;
-  t["saraothai"] = 0x0e42;
-  t["saraueeleftthai"] = 0xf888;
-  t["saraueethai"] = 0x0e37;
-  t["saraueleftthai"] = 0xf887;
-  t["sarauethai"] = 0x0e36;
-  t["sarauthai"] = 0x0e38;
-  t["sarauuthai"] = 0x0e39;
-  t["sbopomofo"] = 0x3119;
-  t["scaron"] = 0x0161;
-  t["scarondotaccent"] = 0x1e67;
-  t["scedilla"] = 0x015f;
-  t["schwa"] = 0x0259;
-  t["schwacyrillic"] = 0x04d9;
-  t["schwadieresiscyrillic"] = 0x04db;
-  t["schwahook"] = 0x025a;
-  t["scircle"] = 0x24e2;
-  t["scircumflex"] = 0x015d;
-  t["scommaaccent"] = 0x0219;
-  t["sdotaccent"] = 0x1e61;
-  t["sdotbelow"] = 0x1e63;
-  t["sdotbelowdotaccent"] = 0x1e69;
-  t["seagullbelowcmb"] = 0x033c;
-  t["second"] = 0x2033;
-  t["secondtonechinese"] = 0x02ca;
-  t["section"] = 0x00a7;
-  t["seenarabic"] = 0x0633;
-  t["seenfinalarabic"] = 0xfeb2;
-  t["seeninitialarabic"] = 0xfeb3;
-  t["seenmedialarabic"] = 0xfeb4;
-  t["segol"] = 0x05b6;
-  t["segol13"] = 0x05b6;
-  t["segol1f"] = 0x05b6;
-  t["segol2c"] = 0x05b6;
-  t["segolhebrew"] = 0x05b6;
-  t["segolnarrowhebrew"] = 0x05b6;
-  t["segolquarterhebrew"] = 0x05b6;
-  t["segoltahebrew"] = 0x0592;
-  t["segolwidehebrew"] = 0x05b6;
-  t["seharmenian"] = 0x057d;
-  t["sehiragana"] = 0x305b;
-  t["sekatakana"] = 0x30bb;
-  t["sekatakanahalfwidth"] = 0xff7e;
-  t["semicolon"] = 0x003b;
-  t["semicolonarabic"] = 0x061b;
-  t["semicolonmonospace"] = 0xff1b;
-  t["semicolonsmall"] = 0xfe54;
-  t["semivoicedmarkkana"] = 0x309c;
-  t["semivoicedmarkkanahalfwidth"] = 0xff9f;
-  t["sentisquare"] = 0x3322;
-  t["sentosquare"] = 0x3323;
-  t["seven"] = 0x0037;
-  t["sevenarabic"] = 0x0667;
-  t["sevenbengali"] = 0x09ed;
-  t["sevencircle"] = 0x2466;
-  t["sevencircleinversesansserif"] = 0x2790;
-  t["sevendeva"] = 0x096d;
-  t["seveneighths"] = 0x215e;
-  t["sevengujarati"] = 0x0aed;
-  t["sevengurmukhi"] = 0x0a6d;
-  t["sevenhackarabic"] = 0x0667;
-  t["sevenhangzhou"] = 0x3027;
-  t["sevenideographicparen"] = 0x3226;
-  t["seveninferior"] = 0x2087;
-  t["sevenmonospace"] = 0xff17;
-  t["sevenoldstyle"] = 0xf737;
-  t["sevenparen"] = 0x247a;
-  t["sevenperiod"] = 0x248e;
-  t["sevenpersian"] = 0x06f7;
-  t["sevenroman"] = 0x2176;
-  t["sevensuperior"] = 0x2077;
-  t["seventeencircle"] = 0x2470;
-  t["seventeenparen"] = 0x2484;
-  t["seventeenperiod"] = 0x2498;
-  t["seventhai"] = 0x0e57;
-  t["sfthyphen"] = 0x00ad;
-  t["shaarmenian"] = 0x0577;
-  t["shabengali"] = 0x09b6;
-  t["shacyrillic"] = 0x0448;
-  t["shaddaarabic"] = 0x0651;
-  t["shaddadammaarabic"] = 0xfc61;
-  t["shaddadammatanarabic"] = 0xfc5e;
-  t["shaddafathaarabic"] = 0xfc60;
-  t["shaddakasraarabic"] = 0xfc62;
-  t["shaddakasratanarabic"] = 0xfc5f;
-  t["shade"] = 0x2592;
-  t["shadedark"] = 0x2593;
-  t["shadelight"] = 0x2591;
-  t["shademedium"] = 0x2592;
-  t["shadeva"] = 0x0936;
-  t["shagujarati"] = 0x0ab6;
-  t["shagurmukhi"] = 0x0a36;
-  t["shalshelethebrew"] = 0x0593;
-  t["shbopomofo"] = 0x3115;
-  t["shchacyrillic"] = 0x0449;
-  t["sheenarabic"] = 0x0634;
-  t["sheenfinalarabic"] = 0xfeb6;
-  t["sheeninitialarabic"] = 0xfeb7;
-  t["sheenmedialarabic"] = 0xfeb8;
-  t["sheicoptic"] = 0x03e3;
-  t["sheqel"] = 0x20aa;
-  t["sheqelhebrew"] = 0x20aa;
-  t["sheva"] = 0x05b0;
-  t["sheva115"] = 0x05b0;
-  t["sheva15"] = 0x05b0;
-  t["sheva22"] = 0x05b0;
-  t["sheva2e"] = 0x05b0;
-  t["shevahebrew"] = 0x05b0;
-  t["shevanarrowhebrew"] = 0x05b0;
-  t["shevaquarterhebrew"] = 0x05b0;
-  t["shevawidehebrew"] = 0x05b0;
-  t["shhacyrillic"] = 0x04bb;
-  t["shimacoptic"] = 0x03ed;
-  t["shin"] = 0x05e9;
-  t["shindagesh"] = 0xfb49;
-  t["shindageshhebrew"] = 0xfb49;
-  t["shindageshshindot"] = 0xfb2c;
-  t["shindageshshindothebrew"] = 0xfb2c;
-  t["shindageshsindot"] = 0xfb2d;
-  t["shindageshsindothebrew"] = 0xfb2d;
-  t["shindothebrew"] = 0x05c1;
-  t["shinhebrew"] = 0x05e9;
-  t["shinshindot"] = 0xfb2a;
-  t["shinshindothebrew"] = 0xfb2a;
-  t["shinsindot"] = 0xfb2b;
-  t["shinsindothebrew"] = 0xfb2b;
-  t["shook"] = 0x0282;
-  t["sigma"] = 0x03c3;
-  t["sigma1"] = 0x03c2;
-  t["sigmafinal"] = 0x03c2;
-  t["sigmalunatesymbolgreek"] = 0x03f2;
-  t["sihiragana"] = 0x3057;
-  t["sikatakana"] = 0x30b7;
-  t["sikatakanahalfwidth"] = 0xff7c;
-  t["siluqhebrew"] = 0x05bd;
-  t["siluqlefthebrew"] = 0x05bd;
-  t["similar"] = 0x223c;
-  t["sindothebrew"] = 0x05c2;
-  t["siosacirclekorean"] = 0x3274;
-  t["siosaparenkorean"] = 0x3214;
-  t["sioscieuckorean"] = 0x317e;
-  t["sioscirclekorean"] = 0x3266;
-  t["sioskiyeokkorean"] = 0x317a;
-  t["sioskorean"] = 0x3145;
-  t["siosnieunkorean"] = 0x317b;
-  t["siosparenkorean"] = 0x3206;
-  t["siospieupkorean"] = 0x317d;
-  t["siostikeutkorean"] = 0x317c;
-  t["six"] = 0x0036;
-  t["sixarabic"] = 0x0666;
-  t["sixbengali"] = 0x09ec;
-  t["sixcircle"] = 0x2465;
-  t["sixcircleinversesansserif"] = 0x278f;
-  t["sixdeva"] = 0x096c;
-  t["sixgujarati"] = 0x0aec;
-  t["sixgurmukhi"] = 0x0a6c;
-  t["sixhackarabic"] = 0x0666;
-  t["sixhangzhou"] = 0x3026;
-  t["sixideographicparen"] = 0x3225;
-  t["sixinferior"] = 0x2086;
-  t["sixmonospace"] = 0xff16;
-  t["sixoldstyle"] = 0xf736;
-  t["sixparen"] = 0x2479;
-  t["sixperiod"] = 0x248d;
-  t["sixpersian"] = 0x06f6;
-  t["sixroman"] = 0x2175;
-  t["sixsuperior"] = 0x2076;
-  t["sixteencircle"] = 0x246f;
-  t["sixteencurrencydenominatorbengali"] = 0x09f9;
-  t["sixteenparen"] = 0x2483;
-  t["sixteenperiod"] = 0x2497;
-  t["sixthai"] = 0x0e56;
-  t["slash"] = 0x002f;
-  t["slashmonospace"] = 0xff0f;
-  t["slong"] = 0x017f;
-  t["slongdotaccent"] = 0x1e9b;
-  t["smileface"] = 0x263a;
-  t["smonospace"] = 0xff53;
-  t["sofpasuqhebrew"] = 0x05c3;
-  t["softhyphen"] = 0x00ad;
-  t["softsigncyrillic"] = 0x044c;
-  t["sohiragana"] = 0x305d;
-  t["sokatakana"] = 0x30bd;
-  t["sokatakanahalfwidth"] = 0xff7f;
-  t["soliduslongoverlaycmb"] = 0x0338;
-  t["solidusshortoverlaycmb"] = 0x0337;
-  t["sorusithai"] = 0x0e29;
-  t["sosalathai"] = 0x0e28;
-  t["sosothai"] = 0x0e0b;
-  t["sosuathai"] = 0x0e2a;
-  t["space"] = 0x0020;
-  t["spacehackarabic"] = 0x0020;
-  t["spade"] = 0x2660;
-  t["spadesuitblack"] = 0x2660;
-  t["spadesuitwhite"] = 0x2664;
-  t["sparen"] = 0x24ae;
-  t["squarebelowcmb"] = 0x033b;
-  t["squarecc"] = 0x33c4;
-  t["squarecm"] = 0x339d;
-  t["squarediagonalcrosshatchfill"] = 0x25a9;
-  t["squarehorizontalfill"] = 0x25a4;
-  t["squarekg"] = 0x338f;
-  t["squarekm"] = 0x339e;
-  t["squarekmcapital"] = 0x33ce;
-  t["squareln"] = 0x33d1;
-  t["squarelog"] = 0x33d2;
-  t["squaremg"] = 0x338e;
-  t["squaremil"] = 0x33d5;
-  t["squaremm"] = 0x339c;
-  t["squaremsquared"] = 0x33a1;
-  t["squareorthogonalcrosshatchfill"] = 0x25a6;
-  t["squareupperlefttolowerrightfill"] = 0x25a7;
-  t["squareupperrighttolowerleftfill"] = 0x25a8;
-  t["squareverticalfill"] = 0x25a5;
-  t["squarewhitewithsmallblack"] = 0x25a3;
-  t["srsquare"] = 0x33db;
-  t["ssabengali"] = 0x09b7;
-  t["ssadeva"] = 0x0937;
-  t["ssagujarati"] = 0x0ab7;
-  t["ssangcieuckorean"] = 0x3149;
-  t["ssanghieuhkorean"] = 0x3185;
-  t["ssangieungkorean"] = 0x3180;
-  t["ssangkiyeokkorean"] = 0x3132;
-  t["ssangnieunkorean"] = 0x3165;
-  t["ssangpieupkorean"] = 0x3143;
-  t["ssangsioskorean"] = 0x3146;
-  t["ssangtikeutkorean"] = 0x3138;
-  t["ssuperior"] = 0xf6f2;
-  t["sterling"] = 0x00a3;
-  t["sterlingmonospace"] = 0xffe1;
-  t["strokelongoverlaycmb"] = 0x0336;
-  t["strokeshortoverlaycmb"] = 0x0335;
-  t["subset"] = 0x2282;
-  t["subsetnotequal"] = 0x228a;
-  t["subsetorequal"] = 0x2286;
-  t["succeeds"] = 0x227b;
-  t["suchthat"] = 0x220b;
-  t["suhiragana"] = 0x3059;
-  t["sukatakana"] = 0x30b9;
-  t["sukatakanahalfwidth"] = 0xff7d;
-  t["sukunarabic"] = 0x0652;
-  t["summation"] = 0x2211;
-  t["sun"] = 0x263c;
-  t["superset"] = 0x2283;
-  t["supersetnotequal"] = 0x228b;
-  t["supersetorequal"] = 0x2287;
-  t["svsquare"] = 0x33dc;
-  t["syouwaerasquare"] = 0x337c;
-  t["t"] = 0x0074;
-  t["tabengali"] = 0x09a4;
-  t["tackdown"] = 0x22a4;
-  t["tackleft"] = 0x22a3;
-  t["tadeva"] = 0x0924;
-  t["tagujarati"] = 0x0aa4;
-  t["tagurmukhi"] = 0x0a24;
-  t["taharabic"] = 0x0637;
-  t["tahfinalarabic"] = 0xfec2;
-  t["tahinitialarabic"] = 0xfec3;
-  t["tahiragana"] = 0x305f;
-  t["tahmedialarabic"] = 0xfec4;
-  t["taisyouerasquare"] = 0x337d;
-  t["takatakana"] = 0x30bf;
-  t["takatakanahalfwidth"] = 0xff80;
-  t["tatweelarabic"] = 0x0640;
-  t["tau"] = 0x03c4;
-  t["tav"] = 0x05ea;
-  t["tavdages"] = 0xfb4a;
-  t["tavdagesh"] = 0xfb4a;
-  t["tavdageshhebrew"] = 0xfb4a;
-  t["tavhebrew"] = 0x05ea;
-  t["tbar"] = 0x0167;
-  t["tbopomofo"] = 0x310a;
-  t["tcaron"] = 0x0165;
-  t["tccurl"] = 0x02a8;
-  t["tcedilla"] = 0x0163;
-  t["tcheharabic"] = 0x0686;
-  t["tchehfinalarabic"] = 0xfb7b;
-  t["tchehinitialarabic"] = 0xfb7c;
-  t["tchehmedialarabic"] = 0xfb7d;
-  t["tcircle"] = 0x24e3;
-  t["tcircumflexbelow"] = 0x1e71;
-  t["tcommaaccent"] = 0x0163;
-  t["tdieresis"] = 0x1e97;
-  t["tdotaccent"] = 0x1e6b;
-  t["tdotbelow"] = 0x1e6d;
-  t["tecyrillic"] = 0x0442;
-  t["tedescendercyrillic"] = 0x04ad;
-  t["teharabic"] = 0x062a;
-  t["tehfinalarabic"] = 0xfe96;
-  t["tehhahinitialarabic"] = 0xfca2;
-  t["tehhahisolatedarabic"] = 0xfc0c;
-  t["tehinitialarabic"] = 0xfe97;
-  t["tehiragana"] = 0x3066;
-  t["tehjeeminitialarabic"] = 0xfca1;
-  t["tehjeemisolatedarabic"] = 0xfc0b;
-  t["tehmarbutaarabic"] = 0x0629;
-  t["tehmarbutafinalarabic"] = 0xfe94;
-  t["tehmedialarabic"] = 0xfe98;
-  t["tehmeeminitialarabic"] = 0xfca4;
-  t["tehmeemisolatedarabic"] = 0xfc0e;
-  t["tehnoonfinalarabic"] = 0xfc73;
-  t["tekatakana"] = 0x30c6;
-  t["tekatakanahalfwidth"] = 0xff83;
-  t["telephone"] = 0x2121;
-  t["telephoneblack"] = 0x260e;
-  t["telishagedolahebrew"] = 0x05a0;
-  t["telishaqetanahebrew"] = 0x05a9;
-  t["tencircle"] = 0x2469;
-  t["tenideographicparen"] = 0x3229;
-  t["tenparen"] = 0x247d;
-  t["tenperiod"] = 0x2491;
-  t["tenroman"] = 0x2179;
-  t["tesh"] = 0x02a7;
-  t["tet"] = 0x05d8;
-  t["tetdagesh"] = 0xfb38;
-  t["tetdageshhebrew"] = 0xfb38;
-  t["tethebrew"] = 0x05d8;
-  t["tetsecyrillic"] = 0x04b5;
-  t["tevirhebrew"] = 0x059b;
-  t["tevirlefthebrew"] = 0x059b;
-  t["thabengali"] = 0x09a5;
-  t["thadeva"] = 0x0925;
-  t["thagujarati"] = 0x0aa5;
-  t["thagurmukhi"] = 0x0a25;
-  t["thalarabic"] = 0x0630;
-  t["thalfinalarabic"] = 0xfeac;
-  t["thanthakhatlowleftthai"] = 0xf898;
-  t["thanthakhatlowrightthai"] = 0xf897;
-  t["thanthakhatthai"] = 0x0e4c;
-  t["thanthakhatupperleftthai"] = 0xf896;
-  t["theharabic"] = 0x062b;
-  t["thehfinalarabic"] = 0xfe9a;
-  t["thehinitialarabic"] = 0xfe9b;
-  t["thehmedialarabic"] = 0xfe9c;
-  t["thereexists"] = 0x2203;
-  t["therefore"] = 0x2234;
-  t["theta"] = 0x03b8;
-  t["theta1"] = 0x03d1;
-  t["thetasymbolgreek"] = 0x03d1;
-  t["thieuthacirclekorean"] = 0x3279;
-  t["thieuthaparenkorean"] = 0x3219;
-  t["thieuthcirclekorean"] = 0x326b;
-  t["thieuthkorean"] = 0x314c;
-  t["thieuthparenkorean"] = 0x320b;
-  t["thirteencircle"] = 0x246c;
-  t["thirteenparen"] = 0x2480;
-  t["thirteenperiod"] = 0x2494;
-  t["thonangmonthothai"] = 0x0e11;
-  t["thook"] = 0x01ad;
-  t["thophuthaothai"] = 0x0e12;
-  t["thorn"] = 0x00fe;
-  t["thothahanthai"] = 0x0e17;
-  t["thothanthai"] = 0x0e10;
-  t["thothongthai"] = 0x0e18;
-  t["thothungthai"] = 0x0e16;
-  t["thousandcyrillic"] = 0x0482;
-  t["thousandsseparatorarabic"] = 0x066c;
-  t["thousandsseparatorpersian"] = 0x066c;
-  t["three"] = 0x0033;
-  t["threearabic"] = 0x0663;
-  t["threebengali"] = 0x09e9;
-  t["threecircle"] = 0x2462;
-  t["threecircleinversesansserif"] = 0x278c;
-  t["threedeva"] = 0x0969;
-  t["threeeighths"] = 0x215c;
-  t["threegujarati"] = 0x0ae9;
-  t["threegurmukhi"] = 0x0a69;
-  t["threehackarabic"] = 0x0663;
-  t["threehangzhou"] = 0x3023;
-  t["threeideographicparen"] = 0x3222;
-  t["threeinferior"] = 0x2083;
-  t["threemonospace"] = 0xff13;
-  t["threenumeratorbengali"] = 0x09f6;
-  t["threeoldstyle"] = 0xf733;
-  t["threeparen"] = 0x2476;
-  t["threeperiod"] = 0x248a;
-  t["threepersian"] = 0x06f3;
-  t["threequarters"] = 0x00be;
-  t["threequartersemdash"] = 0xf6de;
-  t["threeroman"] = 0x2172;
-  t["threesuperior"] = 0x00b3;
-  t["threethai"] = 0x0e53;
-  t["thzsquare"] = 0x3394;
-  t["tihiragana"] = 0x3061;
-  t["tikatakana"] = 0x30c1;
-  t["tikatakanahalfwidth"] = 0xff81;
-  t["tikeutacirclekorean"] = 0x3270;
-  t["tikeutaparenkorean"] = 0x3210;
-  t["tikeutcirclekorean"] = 0x3262;
-  t["tikeutkorean"] = 0x3137;
-  t["tikeutparenkorean"] = 0x3202;
-  t["tilde"] = 0x02dc;
-  t["tildebelowcmb"] = 0x0330;
-  t["tildecmb"] = 0x0303;
-  t["tildecomb"] = 0x0303;
-  t["tildedoublecmb"] = 0x0360;
-  t["tildeoperator"] = 0x223c;
-  t["tildeoverlaycmb"] = 0x0334;
-  t["tildeverticalcmb"] = 0x033e;
-  t["timescircle"] = 0x2297;
-  t["tipehahebrew"] = 0x0596;
-  t["tipehalefthebrew"] = 0x0596;
-  t["tippigurmukhi"] = 0x0a70;
-  t["titlocyrilliccmb"] = 0x0483;
-  t["tiwnarmenian"] = 0x057f;
-  t["tlinebelow"] = 0x1e6f;
-  t["tmonospace"] = 0xff54;
-  t["toarmenian"] = 0x0569;
-  t["tohiragana"] = 0x3068;
-  t["tokatakana"] = 0x30c8;
-  t["tokatakanahalfwidth"] = 0xff84;
-  t["tonebarextrahighmod"] = 0x02e5;
-  t["tonebarextralowmod"] = 0x02e9;
-  t["tonebarhighmod"] = 0x02e6;
-  t["tonebarlowmod"] = 0x02e8;
-  t["tonebarmidmod"] = 0x02e7;
-  t["tonefive"] = 0x01bd;
-  t["tonesix"] = 0x0185;
-  t["tonetwo"] = 0x01a8;
-  t["tonos"] = 0x0384;
-  t["tonsquare"] = 0x3327;
-  t["topatakthai"] = 0x0e0f;
-  t["tortoiseshellbracketleft"] = 0x3014;
-  t["tortoiseshellbracketleftsmall"] = 0xfe5d;
-  t["tortoiseshellbracketleftvertical"] = 0xfe39;
-  t["tortoiseshellbracketright"] = 0x3015;
-  t["tortoiseshellbracketrightsmall"] = 0xfe5e;
-  t["tortoiseshellbracketrightvertical"] = 0xfe3a;
-  t["totaothai"] = 0x0e15;
-  t["tpalatalhook"] = 0x01ab;
-  t["tparen"] = 0x24af;
-  t["trademark"] = 0x2122;
-  t["trademarksans"] = 0xf8ea;
-  t["trademarkserif"] = 0xf6db;
-  t["tretroflexhook"] = 0x0288;
-  t["triagdn"] = 0x25bc;
-  t["triaglf"] = 0x25c4;
-  t["triagrt"] = 0x25ba;
-  t["triagup"] = 0x25b2;
-  t["ts"] = 0x02a6;
-  t["tsadi"] = 0x05e6;
-  t["tsadidagesh"] = 0xfb46;
-  t["tsadidageshhebrew"] = 0xfb46;
-  t["tsadihebrew"] = 0x05e6;
-  t["tsecyrillic"] = 0x0446;
-  t["tsere"] = 0x05b5;
-  t["tsere12"] = 0x05b5;
-  t["tsere1e"] = 0x05b5;
-  t["tsere2b"] = 0x05b5;
-  t["tserehebrew"] = 0x05b5;
-  t["tserenarrowhebrew"] = 0x05b5;
-  t["tserequarterhebrew"] = 0x05b5;
-  t["tserewidehebrew"] = 0x05b5;
-  t["tshecyrillic"] = 0x045b;
-  t["tsuperior"] = 0xf6f3;
-  t["ttabengali"] = 0x099f;
-  t["ttadeva"] = 0x091f;
-  t["ttagujarati"] = 0x0a9f;
-  t["ttagurmukhi"] = 0x0a1f;
-  t["tteharabic"] = 0x0679;
-  t["ttehfinalarabic"] = 0xfb67;
-  t["ttehinitialarabic"] = 0xfb68;
-  t["ttehmedialarabic"] = 0xfb69;
-  t["tthabengali"] = 0x09a0;
-  t["tthadeva"] = 0x0920;
-  t["tthagujarati"] = 0x0aa0;
-  t["tthagurmukhi"] = 0x0a20;
-  t["tturned"] = 0x0287;
-  t["tuhiragana"] = 0x3064;
-  t["tukatakana"] = 0x30c4;
-  t["tukatakanahalfwidth"] = 0xff82;
-  t["tusmallhiragana"] = 0x3063;
-  t["tusmallkatakana"] = 0x30c3;
-  t["tusmallkatakanahalfwidth"] = 0xff6f;
-  t["twelvecircle"] = 0x246b;
-  t["twelveparen"] = 0x247f;
-  t["twelveperiod"] = 0x2493;
-  t["twelveroman"] = 0x217b;
-  t["twentycircle"] = 0x2473;
-  t["twentyhangzhou"] = 0x5344;
-  t["twentyparen"] = 0x2487;
-  t["twentyperiod"] = 0x249b;
-  t["two"] = 0x0032;
-  t["twoarabic"] = 0x0662;
-  t["twobengali"] = 0x09e8;
-  t["twocircle"] = 0x2461;
-  t["twocircleinversesansserif"] = 0x278b;
-  t["twodeva"] = 0x0968;
-  t["twodotenleader"] = 0x2025;
-  t["twodotleader"] = 0x2025;
-  t["twodotleadervertical"] = 0xfe30;
-  t["twogujarati"] = 0x0ae8;
-  t["twogurmukhi"] = 0x0a68;
-  t["twohackarabic"] = 0x0662;
-  t["twohangzhou"] = 0x3022;
-  t["twoideographicparen"] = 0x3221;
-  t["twoinferior"] = 0x2082;
-  t["twomonospace"] = 0xff12;
-  t["twonumeratorbengali"] = 0x09f5;
-  t["twooldstyle"] = 0xf732;
-  t["twoparen"] = 0x2475;
-  t["twoperiod"] = 0x2489;
-  t["twopersian"] = 0x06f2;
-  t["tworoman"] = 0x2171;
-  t["twostroke"] = 0x01bb;
-  t["twosuperior"] = 0x00b2;
-  t["twothai"] = 0x0e52;
-  t["twothirds"] = 0x2154;
-  t["u"] = 0x0075;
-  t["uacute"] = 0x00fa;
-  t["ubar"] = 0x0289;
-  t["ubengali"] = 0x0989;
-  t["ubopomofo"] = 0x3128;
-  t["ubreve"] = 0x016d;
-  t["ucaron"] = 0x01d4;
-  t["ucircle"] = 0x24e4;
-  t["ucircumflex"] = 0x00fb;
-  t["ucircumflexbelow"] = 0x1e77;
-  t["ucyrillic"] = 0x0443;
-  t["udattadeva"] = 0x0951;
-  t["udblacute"] = 0x0171;
-  t["udblgrave"] = 0x0215;
-  t["udeva"] = 0x0909;
-  t["udieresis"] = 0x00fc;
-  t["udieresisacute"] = 0x01d8;
-  t["udieresisbelow"] = 0x1e73;
-  t["udieresiscaron"] = 0x01da;
-  t["udieresiscyrillic"] = 0x04f1;
-  t["udieresisgrave"] = 0x01dc;
-  t["udieresismacron"] = 0x01d6;
-  t["udotbelow"] = 0x1ee5;
-  t["ugrave"] = 0x00f9;
-  t["ugujarati"] = 0x0a89;
-  t["ugurmukhi"] = 0x0a09;
-  t["uhiragana"] = 0x3046;
-  t["uhookabove"] = 0x1ee7;
-  t["uhorn"] = 0x01b0;
-  t["uhornacute"] = 0x1ee9;
-  t["uhorndotbelow"] = 0x1ef1;
-  t["uhorngrave"] = 0x1eeb;
-  t["uhornhookabove"] = 0x1eed;
-  t["uhorntilde"] = 0x1eef;
-  t["uhungarumlaut"] = 0x0171;
-  t["uhungarumlautcyrillic"] = 0x04f3;
-  t["uinvertedbreve"] = 0x0217;
-  t["ukatakana"] = 0x30a6;
-  t["ukatakanahalfwidth"] = 0xff73;
-  t["ukcyrillic"] = 0x0479;
-  t["ukorean"] = 0x315c;
-  t["umacron"] = 0x016b;
-  t["umacroncyrillic"] = 0x04ef;
-  t["umacrondieresis"] = 0x1e7b;
-  t["umatragurmukhi"] = 0x0a41;
-  t["umonospace"] = 0xff55;
-  t["underscore"] = 0x005f;
-  t["underscoredbl"] = 0x2017;
-  t["underscoremonospace"] = 0xff3f;
-  t["underscorevertical"] = 0xfe33;
-  t["underscorewavy"] = 0xfe4f;
-  t["union"] = 0x222a;
-  t["universal"] = 0x2200;
-  t["uogonek"] = 0x0173;
-  t["uparen"] = 0x24b0;
-  t["upblock"] = 0x2580;
-  t["upperdothebrew"] = 0x05c4;
-  t["upsilon"] = 0x03c5;
-  t["upsilondieresis"] = 0x03cb;
-  t["upsilondieresistonos"] = 0x03b0;
-  t["upsilonlatin"] = 0x028a;
-  t["upsilontonos"] = 0x03cd;
-  t["uptackbelowcmb"] = 0x031d;
-  t["uptackmod"] = 0x02d4;
-  t["uragurmukhi"] = 0x0a73;
-  t["uring"] = 0x016f;
-  t["ushortcyrillic"] = 0x045e;
-  t["usmallhiragana"] = 0x3045;
-  t["usmallkatakana"] = 0x30a5;
-  t["usmallkatakanahalfwidth"] = 0xff69;
-  t["ustraightcyrillic"] = 0x04af;
-  t["ustraightstrokecyrillic"] = 0x04b1;
-  t["utilde"] = 0x0169;
-  t["utildeacute"] = 0x1e79;
-  t["utildebelow"] = 0x1e75;
-  t["uubengali"] = 0x098a;
-  t["uudeva"] = 0x090a;
-  t["uugujarati"] = 0x0a8a;
-  t["uugurmukhi"] = 0x0a0a;
-  t["uumatragurmukhi"] = 0x0a42;
-  t["uuvowelsignbengali"] = 0x09c2;
-  t["uuvowelsigndeva"] = 0x0942;
-  t["uuvowelsigngujarati"] = 0x0ac2;
-  t["uvowelsignbengali"] = 0x09c1;
-  t["uvowelsigndeva"] = 0x0941;
-  t["uvowelsigngujarati"] = 0x0ac1;
-  t["v"] = 0x0076;
-  t["vadeva"] = 0x0935;
-  t["vagujarati"] = 0x0ab5;
-  t["vagurmukhi"] = 0x0a35;
-  t["vakatakana"] = 0x30f7;
-  t["vav"] = 0x05d5;
-  t["vavdagesh"] = 0xfb35;
-  t["vavdagesh65"] = 0xfb35;
-  t["vavdageshhebrew"] = 0xfb35;
-  t["vavhebrew"] = 0x05d5;
-  t["vavholam"] = 0xfb4b;
-  t["vavholamhebrew"] = 0xfb4b;
-  t["vavvavhebrew"] = 0x05f0;
-  t["vavyodhebrew"] = 0x05f1;
-  t["vcircle"] = 0x24e5;
-  t["vdotbelow"] = 0x1e7f;
-  t["vecyrillic"] = 0x0432;
-  t["veharabic"] = 0x06a4;
-  t["vehfinalarabic"] = 0xfb6b;
-  t["vehinitialarabic"] = 0xfb6c;
-  t["vehmedialarabic"] = 0xfb6d;
-  t["vekatakana"] = 0x30f9;
-  t["venus"] = 0x2640;
-  t["verticalbar"] = 0x007c;
-  t["verticallineabovecmb"] = 0x030d;
-  t["verticallinebelowcmb"] = 0x0329;
-  t["verticallinelowmod"] = 0x02cc;
-  t["verticallinemod"] = 0x02c8;
-  t["vewarmenian"] = 0x057e;
-  t["vhook"] = 0x028b;
-  t["vikatakana"] = 0x30f8;
-  t["viramabengali"] = 0x09cd;
-  t["viramadeva"] = 0x094d;
-  t["viramagujarati"] = 0x0acd;
-  t["visargabengali"] = 0x0983;
-  t["visargadeva"] = 0x0903;
-  t["visargagujarati"] = 0x0a83;
-  t["vmonospace"] = 0xff56;
-  t["voarmenian"] = 0x0578;
-  t["voicediterationhiragana"] = 0x309e;
-  t["voicediterationkatakana"] = 0x30fe;
-  t["voicedmarkkana"] = 0x309b;
-  t["voicedmarkkanahalfwidth"] = 0xff9e;
-  t["vokatakana"] = 0x30fa;
-  t["vparen"] = 0x24b1;
-  t["vtilde"] = 0x1e7d;
-  t["vturned"] = 0x028c;
-  t["vuhiragana"] = 0x3094;
-  t["vukatakana"] = 0x30f4;
-  t["w"] = 0x0077;
-  t["wacute"] = 0x1e83;
-  t["waekorean"] = 0x3159;
-  t["wahiragana"] = 0x308f;
-  t["wakatakana"] = 0x30ef;
-  t["wakatakanahalfwidth"] = 0xff9c;
-  t["wakorean"] = 0x3158;
-  t["wasmallhiragana"] = 0x308e;
-  t["wasmallkatakana"] = 0x30ee;
-  t["wattosquare"] = 0x3357;
-  t["wavedash"] = 0x301c;
-  t["wavyunderscorevertical"] = 0xfe34;
-  t["wawarabic"] = 0x0648;
-  t["wawfinalarabic"] = 0xfeee;
-  t["wawhamzaabovearabic"] = 0x0624;
-  t["wawhamzaabovefinalarabic"] = 0xfe86;
-  t["wbsquare"] = 0x33dd;
-  t["wcircle"] = 0x24e6;
-  t["wcircumflex"] = 0x0175;
-  t["wdieresis"] = 0x1e85;
-  t["wdotaccent"] = 0x1e87;
-  t["wdotbelow"] = 0x1e89;
-  t["wehiragana"] = 0x3091;
-  t["weierstrass"] = 0x2118;
-  t["wekatakana"] = 0x30f1;
-  t["wekorean"] = 0x315e;
-  t["weokorean"] = 0x315d;
-  t["wgrave"] = 0x1e81;
-  t["whitebullet"] = 0x25e6;
-  t["whitecircle"] = 0x25cb;
-  t["whitecircleinverse"] = 0x25d9;
-  t["whitecornerbracketleft"] = 0x300e;
-  t["whitecornerbracketleftvertical"] = 0xfe43;
-  t["whitecornerbracketright"] = 0x300f;
-  t["whitecornerbracketrightvertical"] = 0xfe44;
-  t["whitediamond"] = 0x25c7;
-  t["whitediamondcontainingblacksmalldiamond"] = 0x25c8;
-  t["whitedownpointingsmalltriangle"] = 0x25bf;
-  t["whitedownpointingtriangle"] = 0x25bd;
-  t["whiteleftpointingsmalltriangle"] = 0x25c3;
-  t["whiteleftpointingtriangle"] = 0x25c1;
-  t["whitelenticularbracketleft"] = 0x3016;
-  t["whitelenticularbracketright"] = 0x3017;
-  t["whiterightpointingsmalltriangle"] = 0x25b9;
-  t["whiterightpointingtriangle"] = 0x25b7;
-  t["whitesmallsquare"] = 0x25ab;
-  t["whitesmilingface"] = 0x263a;
-  t["whitesquare"] = 0x25a1;
-  t["whitestar"] = 0x2606;
-  t["whitetelephone"] = 0x260f;
-  t["whitetortoiseshellbracketleft"] = 0x3018;
-  t["whitetortoiseshellbracketright"] = 0x3019;
-  t["whiteuppointingsmalltriangle"] = 0x25b5;
-  t["whiteuppointingtriangle"] = 0x25b3;
-  t["wihiragana"] = 0x3090;
-  t["wikatakana"] = 0x30f0;
-  t["wikorean"] = 0x315f;
-  t["wmonospace"] = 0xff57;
-  t["wohiragana"] = 0x3092;
-  t["wokatakana"] = 0x30f2;
-  t["wokatakanahalfwidth"] = 0xff66;
-  t["won"] = 0x20a9;
-  t["wonmonospace"] = 0xffe6;
-  t["wowaenthai"] = 0x0e27;
-  t["wparen"] = 0x24b2;
-  t["wring"] = 0x1e98;
-  t["wsuperior"] = 0x02b7;
-  t["wturned"] = 0x028d;
-  t["wynn"] = 0x01bf;
-  t["x"] = 0x0078;
-  t["xabovecmb"] = 0x033d;
-  t["xbopomofo"] = 0x3112;
-  t["xcircle"] = 0x24e7;
-  t["xdieresis"] = 0x1e8d;
-  t["xdotaccent"] = 0x1e8b;
-  t["xeharmenian"] = 0x056d;
-  t["xi"] = 0x03be;
-  t["xmonospace"] = 0xff58;
-  t["xparen"] = 0x24b3;
-  t["xsuperior"] = 0x02e3;
-  t["y"] = 0x0079;
-  t["yaadosquare"] = 0x334e;
-  t["yabengali"] = 0x09af;
-  t["yacute"] = 0x00fd;
-  t["yadeva"] = 0x092f;
-  t["yaekorean"] = 0x3152;
-  t["yagujarati"] = 0x0aaf;
-  t["yagurmukhi"] = 0x0a2f;
-  t["yahiragana"] = 0x3084;
-  t["yakatakana"] = 0x30e4;
-  t["yakatakanahalfwidth"] = 0xff94;
-  t["yakorean"] = 0x3151;
-  t["yamakkanthai"] = 0x0e4e;
-  t["yasmallhiragana"] = 0x3083;
-  t["yasmallkatakana"] = 0x30e3;
-  t["yasmallkatakanahalfwidth"] = 0xff6c;
-  t["yatcyrillic"] = 0x0463;
-  t["ycircle"] = 0x24e8;
-  t["ycircumflex"] = 0x0177;
-  t["ydieresis"] = 0x00ff;
-  t["ydotaccent"] = 0x1e8f;
-  t["ydotbelow"] = 0x1ef5;
-  t["yeharabic"] = 0x064a;
-  t["yehbarreearabic"] = 0x06d2;
-  t["yehbarreefinalarabic"] = 0xfbaf;
-  t["yehfinalarabic"] = 0xfef2;
-  t["yehhamzaabovearabic"] = 0x0626;
-  t["yehhamzaabovefinalarabic"] = 0xfe8a;
-  t["yehhamzaaboveinitialarabic"] = 0xfe8b;
-  t["yehhamzaabovemedialarabic"] = 0xfe8c;
-  t["yehinitialarabic"] = 0xfef3;
-  t["yehmedialarabic"] = 0xfef4;
-  t["yehmeeminitialarabic"] = 0xfcdd;
-  t["yehmeemisolatedarabic"] = 0xfc58;
-  t["yehnoonfinalarabic"] = 0xfc94;
-  t["yehthreedotsbelowarabic"] = 0x06d1;
-  t["yekorean"] = 0x3156;
-  t["yen"] = 0x00a5;
-  t["yenmonospace"] = 0xffe5;
-  t["yeokorean"] = 0x3155;
-  t["yeorinhieuhkorean"] = 0x3186;
-  t["yerahbenyomohebrew"] = 0x05aa;
-  t["yerahbenyomolefthebrew"] = 0x05aa;
-  t["yericyrillic"] = 0x044b;
-  t["yerudieresiscyrillic"] = 0x04f9;
-  t["yesieungkorean"] = 0x3181;
-  t["yesieungpansioskorean"] = 0x3183;
-  t["yesieungsioskorean"] = 0x3182;
-  t["yetivhebrew"] = 0x059a;
-  t["ygrave"] = 0x1ef3;
-  t["yhook"] = 0x01b4;
-  t["yhookabove"] = 0x1ef7;
-  t["yiarmenian"] = 0x0575;
-  t["yicyrillic"] = 0x0457;
-  t["yikorean"] = 0x3162;
-  t["yinyang"] = 0x262f;
-  t["yiwnarmenian"] = 0x0582;
-  t["ymonospace"] = 0xff59;
-  t["yod"] = 0x05d9;
-  t["yoddagesh"] = 0xfb39;
-  t["yoddageshhebrew"] = 0xfb39;
-  t["yodhebrew"] = 0x05d9;
-  t["yodyodhebrew"] = 0x05f2;
-  t["yodyodpatahhebrew"] = 0xfb1f;
-  t["yohiragana"] = 0x3088;
-  t["yoikorean"] = 0x3189;
-  t["yokatakana"] = 0x30e8;
-  t["yokatakanahalfwidth"] = 0xff96;
-  t["yokorean"] = 0x315b;
-  t["yosmallhiragana"] = 0x3087;
-  t["yosmallkatakana"] = 0x30e7;
-  t["yosmallkatakanahalfwidth"] = 0xff6e;
-  t["yotgreek"] = 0x03f3;
-  t["yoyaekorean"] = 0x3188;
-  t["yoyakorean"] = 0x3187;
-  t["yoyakthai"] = 0x0e22;
-  t["yoyingthai"] = 0x0e0d;
-  t["yparen"] = 0x24b4;
-  t["ypogegrammeni"] = 0x037a;
-  t["ypogegrammenigreekcmb"] = 0x0345;
-  t["yr"] = 0x01a6;
-  t["yring"] = 0x1e99;
-  t["ysuperior"] = 0x02b8;
-  t["ytilde"] = 0x1ef9;
-  t["yturned"] = 0x028e;
-  t["yuhiragana"] = 0x3086;
-  t["yuikorean"] = 0x318c;
-  t["yukatakana"] = 0x30e6;
-  t["yukatakanahalfwidth"] = 0xff95;
-  t["yukorean"] = 0x3160;
-  t["yusbigcyrillic"] = 0x046b;
-  t["yusbigiotifiedcyrillic"] = 0x046d;
-  t["yuslittlecyrillic"] = 0x0467;
-  t["yuslittleiotifiedcyrillic"] = 0x0469;
-  t["yusmallhiragana"] = 0x3085;
-  t["yusmallkatakana"] = 0x30e5;
-  t["yusmallkatakanahalfwidth"] = 0xff6d;
-  t["yuyekorean"] = 0x318b;
-  t["yuyeokorean"] = 0x318a;
-  t["yyabengali"] = 0x09df;
-  t["yyadeva"] = 0x095f;
-  t["z"] = 0x007a;
-  t["zaarmenian"] = 0x0566;
-  t["zacute"] = 0x017a;
-  t["zadeva"] = 0x095b;
-  t["zagurmukhi"] = 0x0a5b;
-  t["zaharabic"] = 0x0638;
-  t["zahfinalarabic"] = 0xfec6;
-  t["zahinitialarabic"] = 0xfec7;
-  t["zahiragana"] = 0x3056;
-  t["zahmedialarabic"] = 0xfec8;
-  t["zainarabic"] = 0x0632;
-  t["zainfinalarabic"] = 0xfeb0;
-  t["zakatakana"] = 0x30b6;
-  t["zaqefgadolhebrew"] = 0x0595;
-  t["zaqefqatanhebrew"] = 0x0594;
-  t["zarqahebrew"] = 0x0598;
-  t["zayin"] = 0x05d6;
-  t["zayindagesh"] = 0xfb36;
-  t["zayindageshhebrew"] = 0xfb36;
-  t["zayinhebrew"] = 0x05d6;
-  t["zbopomofo"] = 0x3117;
-  t["zcaron"] = 0x017e;
-  t["zcircle"] = 0x24e9;
-  t["zcircumflex"] = 0x1e91;
-  t["zcurl"] = 0x0291;
-  t["zdot"] = 0x017c;
-  t["zdotaccent"] = 0x017c;
-  t["zdotbelow"] = 0x1e93;
-  t["zecyrillic"] = 0x0437;
-  t["zedescendercyrillic"] = 0x0499;
-  t["zedieresiscyrillic"] = 0x04df;
-  t["zehiragana"] = 0x305c;
-  t["zekatakana"] = 0x30bc;
-  t["zero"] = 0x0030;
-  t["zeroarabic"] = 0x0660;
-  t["zerobengali"] = 0x09e6;
-  t["zerodeva"] = 0x0966;
-  t["zerogujarati"] = 0x0ae6;
-  t["zerogurmukhi"] = 0x0a66;
-  t["zerohackarabic"] = 0x0660;
-  t["zeroinferior"] = 0x2080;
-  t["zeromonospace"] = 0xff10;
-  t["zerooldstyle"] = 0xf730;
-  t["zeropersian"] = 0x06f0;
-  t["zerosuperior"] = 0x2070;
-  t["zerothai"] = 0x0e50;
-  t["zerowidthjoiner"] = 0xfeff;
-  t["zerowidthnonjoiner"] = 0x200c;
-  t["zerowidthspace"] = 0x200b;
-  t["zeta"] = 0x03b6;
-  t["zhbopomofo"] = 0x3113;
-  t["zhearmenian"] = 0x056a;
-  t["zhebrevecyrillic"] = 0x04c2;
-  t["zhecyrillic"] = 0x0436;
-  t["zhedescendercyrillic"] = 0x0497;
-  t["zhedieresiscyrillic"] = 0x04dd;
-  t["zihiragana"] = 0x3058;
-  t["zikatakana"] = 0x30b8;
-  t["zinorhebrew"] = 0x05ae;
-  t["zlinebelow"] = 0x1e95;
-  t["zmonospace"] = 0xff5a;
-  t["zohiragana"] = 0x305e;
-  t["zokatakana"] = 0x30be;
-  t["zparen"] = 0x24b5;
-  t["zretroflexhook"] = 0x0290;
-  t["zstroke"] = 0x01b6;
-  t["zuhiragana"] = 0x305a;
-  t["zukatakana"] = 0x30ba;
+  t.A = 0x0041;
+  t.AE = 0x00c6;
+  t.AEacute = 0x01fc;
+  t.AEmacron = 0x01e2;
+  t.AEsmall = 0xf7e6;
+  t.Aacute = 0x00c1;
+  t.Aacutesmall = 0xf7e1;
+  t.Abreve = 0x0102;
+  t.Abreveacute = 0x1eae;
+  t.Abrevecyrillic = 0x04d0;
+  t.Abrevedotbelow = 0x1eb6;
+  t.Abrevegrave = 0x1eb0;
+  t.Abrevehookabove = 0x1eb2;
+  t.Abrevetilde = 0x1eb4;
+  t.Acaron = 0x01cd;
+  t.Acircle = 0x24b6;
+  t.Acircumflex = 0x00c2;
+  t.Acircumflexacute = 0x1ea4;
+  t.Acircumflexdotbelow = 0x1eac;
+  t.Acircumflexgrave = 0x1ea6;
+  t.Acircumflexhookabove = 0x1ea8;
+  t.Acircumflexsmall = 0xf7e2;
+  t.Acircumflextilde = 0x1eaa;
+  t.Acute = 0xf6c9;
+  t.Acutesmall = 0xf7b4;
+  t.Acyrillic = 0x0410;
+  t.Adblgrave = 0x0200;
+  t.Adieresis = 0x00c4;
+  t.Adieresiscyrillic = 0x04d2;
+  t.Adieresismacron = 0x01de;
+  t.Adieresissmall = 0xf7e4;
+  t.Adotbelow = 0x1ea0;
+  t.Adotmacron = 0x01e0;
+  t.Agrave = 0x00c0;
+  t.Agravesmall = 0xf7e0;
+  t.Ahookabove = 0x1ea2;
+  t.Aiecyrillic = 0x04d4;
+  t.Ainvertedbreve = 0x0202;
+  t.Alpha = 0x0391;
+  t.Alphatonos = 0x0386;
+  t.Amacron = 0x0100;
+  t.Amonospace = 0xff21;
+  t.Aogonek = 0x0104;
+  t.Aring = 0x00c5;
+  t.Aringacute = 0x01fa;
+  t.Aringbelow = 0x1e00;
+  t.Aringsmall = 0xf7e5;
+  t.Asmall = 0xf761;
+  t.Atilde = 0x00c3;
+  t.Atildesmall = 0xf7e3;
+  t.Aybarmenian = 0x0531;
+  t.B = 0x0042;
+  t.Bcircle = 0x24b7;
+  t.Bdotaccent = 0x1e02;
+  t.Bdotbelow = 0x1e04;
+  t.Becyrillic = 0x0411;
+  t.Benarmenian = 0x0532;
+  t.Beta = 0x0392;
+  t.Bhook = 0x0181;
+  t.Blinebelow = 0x1e06;
+  t.Bmonospace = 0xff22;
+  t.Brevesmall = 0xf6f4;
+  t.Bsmall = 0xf762;
+  t.Btopbar = 0x0182;
+  t.C = 0x0043;
+  t.Caarmenian = 0x053e;
+  t.Cacute = 0x0106;
+  t.Caron = 0xf6ca;
+  t.Caronsmall = 0xf6f5;
+  t.Ccaron = 0x010c;
+  t.Ccedilla = 0x00c7;
+  t.Ccedillaacute = 0x1e08;
+  t.Ccedillasmall = 0xf7e7;
+  t.Ccircle = 0x24b8;
+  t.Ccircumflex = 0x0108;
+  t.Cdot = 0x010a;
+  t.Cdotaccent = 0x010a;
+  t.Cedillasmall = 0xf7b8;
+  t.Chaarmenian = 0x0549;
+  t.Cheabkhasiancyrillic = 0x04bc;
+  t.Checyrillic = 0x0427;
+  t.Chedescenderabkhasiancyrillic = 0x04be;
+  t.Chedescendercyrillic = 0x04b6;
+  t.Chedieresiscyrillic = 0x04f4;
+  t.Cheharmenian = 0x0543;
+  t.Chekhakassiancyrillic = 0x04cb;
+  t.Cheverticalstrokecyrillic = 0x04b8;
+  t.Chi = 0x03a7;
+  t.Chook = 0x0187;
+  t.Circumflexsmall = 0xf6f6;
+  t.Cmonospace = 0xff23;
+  t.Coarmenian = 0x0551;
+  t.Csmall = 0xf763;
+  t.D = 0x0044;
+  t.DZ = 0x01f1;
+  t.DZcaron = 0x01c4;
+  t.Daarmenian = 0x0534;
+  t.Dafrican = 0x0189;
+  t.Dcaron = 0x010e;
+  t.Dcedilla = 0x1e10;
+  t.Dcircle = 0x24b9;
+  t.Dcircumflexbelow = 0x1e12;
+  t.Dcroat = 0x0110;
+  t.Ddotaccent = 0x1e0a;
+  t.Ddotbelow = 0x1e0c;
+  t.Decyrillic = 0x0414;
+  t.Deicoptic = 0x03ee;
+  t.Delta = 0x2206;
+  t.Deltagreek = 0x0394;
+  t.Dhook = 0x018a;
+  t.Dieresis = 0xf6cb;
+  t.DieresisAcute = 0xf6cc;
+  t.DieresisGrave = 0xf6cd;
+  t.Dieresissmall = 0xf7a8;
+  t.Digammagreek = 0x03dc;
+  t.Djecyrillic = 0x0402;
+  t.Dlinebelow = 0x1e0e;
+  t.Dmonospace = 0xff24;
+  t.Dotaccentsmall = 0xf6f7;
+  t.Dslash = 0x0110;
+  t.Dsmall = 0xf764;
+  t.Dtopbar = 0x018b;
+  t.Dz = 0x01f2;
+  t.Dzcaron = 0x01c5;
+  t.Dzeabkhasiancyrillic = 0x04e0;
+  t.Dzecyrillic = 0x0405;
+  t.Dzhecyrillic = 0x040f;
+  t.E = 0x0045;
+  t.Eacute = 0x00c9;
+  t.Eacutesmall = 0xf7e9;
+  t.Ebreve = 0x0114;
+  t.Ecaron = 0x011a;
+  t.Ecedillabreve = 0x1e1c;
+  t.Echarmenian = 0x0535;
+  t.Ecircle = 0x24ba;
+  t.Ecircumflex = 0x00ca;
+  t.Ecircumflexacute = 0x1ebe;
+  t.Ecircumflexbelow = 0x1e18;
+  t.Ecircumflexdotbelow = 0x1ec6;
+  t.Ecircumflexgrave = 0x1ec0;
+  t.Ecircumflexhookabove = 0x1ec2;
+  t.Ecircumflexsmall = 0xf7ea;
+  t.Ecircumflextilde = 0x1ec4;
+  t.Ecyrillic = 0x0404;
+  t.Edblgrave = 0x0204;
+  t.Edieresis = 0x00cb;
+  t.Edieresissmall = 0xf7eb;
+  t.Edot = 0x0116;
+  t.Edotaccent = 0x0116;
+  t.Edotbelow = 0x1eb8;
+  t.Efcyrillic = 0x0424;
+  t.Egrave = 0x00c8;
+  t.Egravesmall = 0xf7e8;
+  t.Eharmenian = 0x0537;
+  t.Ehookabove = 0x1eba;
+  t.Eightroman = 0x2167;
+  t.Einvertedbreve = 0x0206;
+  t.Eiotifiedcyrillic = 0x0464;
+  t.Elcyrillic = 0x041b;
+  t.Elevenroman = 0x216a;
+  t.Emacron = 0x0112;
+  t.Emacronacute = 0x1e16;
+  t.Emacrongrave = 0x1e14;
+  t.Emcyrillic = 0x041c;
+  t.Emonospace = 0xff25;
+  t.Encyrillic = 0x041d;
+  t.Endescendercyrillic = 0x04a2;
+  t.Eng = 0x014a;
+  t.Enghecyrillic = 0x04a4;
+  t.Enhookcyrillic = 0x04c7;
+  t.Eogonek = 0x0118;
+  t.Eopen = 0x0190;
+  t.Epsilon = 0x0395;
+  t.Epsilontonos = 0x0388;
+  t.Ercyrillic = 0x0420;
+  t.Ereversed = 0x018e;
+  t.Ereversedcyrillic = 0x042d;
+  t.Escyrillic = 0x0421;
+  t.Esdescendercyrillic = 0x04aa;
+  t.Esh = 0x01a9;
+  t.Esmall = 0xf765;
+  t.Eta = 0x0397;
+  t.Etarmenian = 0x0538;
+  t.Etatonos = 0x0389;
+  t.Eth = 0x00d0;
+  t.Ethsmall = 0xf7f0;
+  t.Etilde = 0x1ebc;
+  t.Etildebelow = 0x1e1a;
+  t.Euro = 0x20ac;
+  t.Ezh = 0x01b7;
+  t.Ezhcaron = 0x01ee;
+  t.Ezhreversed = 0x01b8;
+  t.F = 0x0046;
+  t.Fcircle = 0x24bb;
+  t.Fdotaccent = 0x1e1e;
+  t.Feharmenian = 0x0556;
+  t.Feicoptic = 0x03e4;
+  t.Fhook = 0x0191;
+  t.Fitacyrillic = 0x0472;
+  t.Fiveroman = 0x2164;
+  t.Fmonospace = 0xff26;
+  t.Fourroman = 0x2163;
+  t.Fsmall = 0xf766;
+  t.G = 0x0047;
+  t.GBsquare = 0x3387;
+  t.Gacute = 0x01f4;
+  t.Gamma = 0x0393;
+  t.Gammaafrican = 0x0194;
+  t.Gangiacoptic = 0x03ea;
+  t.Gbreve = 0x011e;
+  t.Gcaron = 0x01e6;
+  t.Gcedilla = 0x0122;
+  t.Gcircle = 0x24bc;
+  t.Gcircumflex = 0x011c;
+  t.Gcommaaccent = 0x0122;
+  t.Gdot = 0x0120;
+  t.Gdotaccent = 0x0120;
+  t.Gecyrillic = 0x0413;
+  t.Ghadarmenian = 0x0542;
+  t.Ghemiddlehookcyrillic = 0x0494;
+  t.Ghestrokecyrillic = 0x0492;
+  t.Gheupturncyrillic = 0x0490;
+  t.Ghook = 0x0193;
+  t.Gimarmenian = 0x0533;
+  t.Gjecyrillic = 0x0403;
+  t.Gmacron = 0x1e20;
+  t.Gmonospace = 0xff27;
+  t.Grave = 0xf6ce;
+  t.Gravesmall = 0xf760;
+  t.Gsmall = 0xf767;
+  t.Gsmallhook = 0x029b;
+  t.Gstroke = 0x01e4;
+  t.H = 0x0048;
+  t.H18533 = 0x25cf;
+  t.H18543 = 0x25aa;
+  t.H18551 = 0x25ab;
+  t.H22073 = 0x25a1;
+  t.HPsquare = 0x33cb;
+  t.Haabkhasiancyrillic = 0x04a8;
+  t.Hadescendercyrillic = 0x04b2;
+  t.Hardsigncyrillic = 0x042a;
+  t.Hbar = 0x0126;
+  t.Hbrevebelow = 0x1e2a;
+  t.Hcedilla = 0x1e28;
+  t.Hcircle = 0x24bd;
+  t.Hcircumflex = 0x0124;
+  t.Hdieresis = 0x1e26;
+  t.Hdotaccent = 0x1e22;
+  t.Hdotbelow = 0x1e24;
+  t.Hmonospace = 0xff28;
+  t.Hoarmenian = 0x0540;
+  t.Horicoptic = 0x03e8;
+  t.Hsmall = 0xf768;
+  t.Hungarumlaut = 0xf6cf;
+  t.Hungarumlautsmall = 0xf6f8;
+  t.Hzsquare = 0x3390;
+  t.I = 0x0049;
+  t.IAcyrillic = 0x042f;
+  t.IJ = 0x0132;
+  t.IUcyrillic = 0x042e;
+  t.Iacute = 0x00cd;
+  t.Iacutesmall = 0xf7ed;
+  t.Ibreve = 0x012c;
+  t.Icaron = 0x01cf;
+  t.Icircle = 0x24be;
+  t.Icircumflex = 0x00ce;
+  t.Icircumflexsmall = 0xf7ee;
+  t.Icyrillic = 0x0406;
+  t.Idblgrave = 0x0208;
+  t.Idieresis = 0x00cf;
+  t.Idieresisacute = 0x1e2e;
+  t.Idieresiscyrillic = 0x04e4;
+  t.Idieresissmall = 0xf7ef;
+  t.Idot = 0x0130;
+  t.Idotaccent = 0x0130;
+  t.Idotbelow = 0x1eca;
+  t.Iebrevecyrillic = 0x04d6;
+  t.Iecyrillic = 0x0415;
+  t.Ifraktur = 0x2111;
+  t.Igrave = 0x00cc;
+  t.Igravesmall = 0xf7ec;
+  t.Ihookabove = 0x1ec8;
+  t.Iicyrillic = 0x0418;
+  t.Iinvertedbreve = 0x020a;
+  t.Iishortcyrillic = 0x0419;
+  t.Imacron = 0x012a;
+  t.Imacroncyrillic = 0x04e2;
+  t.Imonospace = 0xff29;
+  t.Iniarmenian = 0x053b;
+  t.Iocyrillic = 0x0401;
+  t.Iogonek = 0x012e;
+  t.Iota = 0x0399;
+  t.Iotaafrican = 0x0196;
+  t.Iotadieresis = 0x03aa;
+  t.Iotatonos = 0x038a;
+  t.Ismall = 0xf769;
+  t.Istroke = 0x0197;
+  t.Itilde = 0x0128;
+  t.Itildebelow = 0x1e2c;
+  t.Izhitsacyrillic = 0x0474;
+  t.Izhitsadblgravecyrillic = 0x0476;
+  t.J = 0x004a;
+  t.Jaarmenian = 0x0541;
+  t.Jcircle = 0x24bf;
+  t.Jcircumflex = 0x0134;
+  t.Jecyrillic = 0x0408;
+  t.Jheharmenian = 0x054b;
+  t.Jmonospace = 0xff2a;
+  t.Jsmall = 0xf76a;
+  t.K = 0x004b;
+  t.KBsquare = 0x3385;
+  t.KKsquare = 0x33cd;
+  t.Kabashkircyrillic = 0x04a0;
+  t.Kacute = 0x1e30;
+  t.Kacyrillic = 0x041a;
+  t.Kadescendercyrillic = 0x049a;
+  t.Kahookcyrillic = 0x04c3;
+  t.Kappa = 0x039a;
+  t.Kastrokecyrillic = 0x049e;
+  t.Kaverticalstrokecyrillic = 0x049c;
+  t.Kcaron = 0x01e8;
+  t.Kcedilla = 0x0136;
+  t.Kcircle = 0x24c0;
+  t.Kcommaaccent = 0x0136;
+  t.Kdotbelow = 0x1e32;
+  t.Keharmenian = 0x0554;
+  t.Kenarmenian = 0x053f;
+  t.Khacyrillic = 0x0425;
+  t.Kheicoptic = 0x03e6;
+  t.Khook = 0x0198;
+  t.Kjecyrillic = 0x040c;
+  t.Klinebelow = 0x1e34;
+  t.Kmonospace = 0xff2b;
+  t.Koppacyrillic = 0x0480;
+  t.Koppagreek = 0x03de;
+  t.Ksicyrillic = 0x046e;
+  t.Ksmall = 0xf76b;
+  t.L = 0x004c;
+  t.LJ = 0x01c7;
+  t.LL = 0xf6bf;
+  t.Lacute = 0x0139;
+  t.Lambda = 0x039b;
+  t.Lcaron = 0x013d;
+  t.Lcedilla = 0x013b;
+  t.Lcircle = 0x24c1;
+  t.Lcircumflexbelow = 0x1e3c;
+  t.Lcommaaccent = 0x013b;
+  t.Ldot = 0x013f;
+  t.Ldotaccent = 0x013f;
+  t.Ldotbelow = 0x1e36;
+  t.Ldotbelowmacron = 0x1e38;
+  t.Liwnarmenian = 0x053c;
+  t.Lj = 0x01c8;
+  t.Ljecyrillic = 0x0409;
+  t.Llinebelow = 0x1e3a;
+  t.Lmonospace = 0xff2c;
+  t.Lslash = 0x0141;
+  t.Lslashsmall = 0xf6f9;
+  t.Lsmall = 0xf76c;
+  t.M = 0x004d;
+  t.MBsquare = 0x3386;
+  t.Macron = 0xf6d0;
+  t.Macronsmall = 0xf7af;
+  t.Macute = 0x1e3e;
+  t.Mcircle = 0x24c2;
+  t.Mdotaccent = 0x1e40;
+  t.Mdotbelow = 0x1e42;
+  t.Menarmenian = 0x0544;
+  t.Mmonospace = 0xff2d;
+  t.Msmall = 0xf76d;
+  t.Mturned = 0x019c;
+  t.Mu = 0x039c;
+  t.N = 0x004e;
+  t.NJ = 0x01ca;
+  t.Nacute = 0x0143;
+  t.Ncaron = 0x0147;
+  t.Ncedilla = 0x0145;
+  t.Ncircle = 0x24c3;
+  t.Ncircumflexbelow = 0x1e4a;
+  t.Ncommaaccent = 0x0145;
+  t.Ndotaccent = 0x1e44;
+  t.Ndotbelow = 0x1e46;
+  t.Nhookleft = 0x019d;
+  t.Nineroman = 0x2168;
+  t.Nj = 0x01cb;
+  t.Njecyrillic = 0x040a;
+  t.Nlinebelow = 0x1e48;
+  t.Nmonospace = 0xff2e;
+  t.Nowarmenian = 0x0546;
+  t.Nsmall = 0xf76e;
+  t.Ntilde = 0x00d1;
+  t.Ntildesmall = 0xf7f1;
+  t.Nu = 0x039d;
+  t.O = 0x004f;
+  t.OE = 0x0152;
+  t.OEsmall = 0xf6fa;
+  t.Oacute = 0x00d3;
+  t.Oacutesmall = 0xf7f3;
+  t.Obarredcyrillic = 0x04e8;
+  t.Obarreddieresiscyrillic = 0x04ea;
+  t.Obreve = 0x014e;
+  t.Ocaron = 0x01d1;
+  t.Ocenteredtilde = 0x019f;
+  t.Ocircle = 0x24c4;
+  t.Ocircumflex = 0x00d4;
+  t.Ocircumflexacute = 0x1ed0;
+  t.Ocircumflexdotbelow = 0x1ed8;
+  t.Ocircumflexgrave = 0x1ed2;
+  t.Ocircumflexhookabove = 0x1ed4;
+  t.Ocircumflexsmall = 0xf7f4;
+  t.Ocircumflextilde = 0x1ed6;
+  t.Ocyrillic = 0x041e;
+  t.Odblacute = 0x0150;
+  t.Odblgrave = 0x020c;
+  t.Odieresis = 0x00d6;
+  t.Odieresiscyrillic = 0x04e6;
+  t.Odieresissmall = 0xf7f6;
+  t.Odotbelow = 0x1ecc;
+  t.Ogoneksmall = 0xf6fb;
+  t.Ograve = 0x00d2;
+  t.Ogravesmall = 0xf7f2;
+  t.Oharmenian = 0x0555;
+  t.Ohm = 0x2126;
+  t.Ohookabove = 0x1ece;
+  t.Ohorn = 0x01a0;
+  t.Ohornacute = 0x1eda;
+  t.Ohorndotbelow = 0x1ee2;
+  t.Ohorngrave = 0x1edc;
+  t.Ohornhookabove = 0x1ede;
+  t.Ohorntilde = 0x1ee0;
+  t.Ohungarumlaut = 0x0150;
+  t.Oi = 0x01a2;
+  t.Oinvertedbreve = 0x020e;
+  t.Omacron = 0x014c;
+  t.Omacronacute = 0x1e52;
+  t.Omacrongrave = 0x1e50;
+  t.Omega = 0x2126;
+  t.Omegacyrillic = 0x0460;
+  t.Omegagreek = 0x03a9;
+  t.Omegaroundcyrillic = 0x047a;
+  t.Omegatitlocyrillic = 0x047c;
+  t.Omegatonos = 0x038f;
+  t.Omicron = 0x039f;
+  t.Omicrontonos = 0x038c;
+  t.Omonospace = 0xff2f;
+  t.Oneroman = 0x2160;
+  t.Oogonek = 0x01ea;
+  t.Oogonekmacron = 0x01ec;
+  t.Oopen = 0x0186;
+  t.Oslash = 0x00d8;
+  t.Oslashacute = 0x01fe;
+  t.Oslashsmall = 0xf7f8;
+  t.Osmall = 0xf76f;
+  t.Ostrokeacute = 0x01fe;
+  t.Otcyrillic = 0x047e;
+  t.Otilde = 0x00d5;
+  t.Otildeacute = 0x1e4c;
+  t.Otildedieresis = 0x1e4e;
+  t.Otildesmall = 0xf7f5;
+  t.P = 0x0050;
+  t.Pacute = 0x1e54;
+  t.Pcircle = 0x24c5;
+  t.Pdotaccent = 0x1e56;
+  t.Pecyrillic = 0x041f;
+  t.Peharmenian = 0x054a;
+  t.Pemiddlehookcyrillic = 0x04a6;
+  t.Phi = 0x03a6;
+  t.Phook = 0x01a4;
+  t.Pi = 0x03a0;
+  t.Piwrarmenian = 0x0553;
+  t.Pmonospace = 0xff30;
+  t.Psi = 0x03a8;
+  t.Psicyrillic = 0x0470;
+  t.Psmall = 0xf770;
+  t.Q = 0x0051;
+  t.Qcircle = 0x24c6;
+  t.Qmonospace = 0xff31;
+  t.Qsmall = 0xf771;
+  t.R = 0x0052;
+  t.Raarmenian = 0x054c;
+  t.Racute = 0x0154;
+  t.Rcaron = 0x0158;
+  t.Rcedilla = 0x0156;
+  t.Rcircle = 0x24c7;
+  t.Rcommaaccent = 0x0156;
+  t.Rdblgrave = 0x0210;
+  t.Rdotaccent = 0x1e58;
+  t.Rdotbelow = 0x1e5a;
+  t.Rdotbelowmacron = 0x1e5c;
+  t.Reharmenian = 0x0550;
+  t.Rfraktur = 0x211c;
+  t.Rho = 0x03a1;
+  t.Ringsmall = 0xf6fc;
+  t.Rinvertedbreve = 0x0212;
+  t.Rlinebelow = 0x1e5e;
+  t.Rmonospace = 0xff32;
+  t.Rsmall = 0xf772;
+  t.Rsmallinverted = 0x0281;
+  t.Rsmallinvertedsuperior = 0x02b6;
+  t.S = 0x0053;
+  t.SF010000 = 0x250c;
+  t.SF020000 = 0x2514;
+  t.SF030000 = 0x2510;
+  t.SF040000 = 0x2518;
+  t.SF050000 = 0x253c;
+  t.SF060000 = 0x252c;
+  t.SF070000 = 0x2534;
+  t.SF080000 = 0x251c;
+  t.SF090000 = 0x2524;
+  t.SF100000 = 0x2500;
+  t.SF110000 = 0x2502;
+  t.SF190000 = 0x2561;
+  t.SF200000 = 0x2562;
+  t.SF210000 = 0x2556;
+  t.SF220000 = 0x2555;
+  t.SF230000 = 0x2563;
+  t.SF240000 = 0x2551;
+  t.SF250000 = 0x2557;
+  t.SF260000 = 0x255d;
+  t.SF270000 = 0x255c;
+  t.SF280000 = 0x255b;
+  t.SF360000 = 0x255e;
+  t.SF370000 = 0x255f;
+  t.SF380000 = 0x255a;
+  t.SF390000 = 0x2554;
+  t.SF400000 = 0x2569;
+  t.SF410000 = 0x2566;
+  t.SF420000 = 0x2560;
+  t.SF430000 = 0x2550;
+  t.SF440000 = 0x256c;
+  t.SF450000 = 0x2567;
+  t.SF460000 = 0x2568;
+  t.SF470000 = 0x2564;
+  t.SF480000 = 0x2565;
+  t.SF490000 = 0x2559;
+  t.SF500000 = 0x2558;
+  t.SF510000 = 0x2552;
+  t.SF520000 = 0x2553;
+  t.SF530000 = 0x256b;
+  t.SF540000 = 0x256a;
+  t.Sacute = 0x015a;
+  t.Sacutedotaccent = 0x1e64;
+  t.Sampigreek = 0x03e0;
+  t.Scaron = 0x0160;
+  t.Scarondotaccent = 0x1e66;
+  t.Scaronsmall = 0xf6fd;
+  t.Scedilla = 0x015e;
+  t.Schwa = 0x018f;
+  t.Schwacyrillic = 0x04d8;
+  t.Schwadieresiscyrillic = 0x04da;
+  t.Scircle = 0x24c8;
+  t.Scircumflex = 0x015c;
+  t.Scommaaccent = 0x0218;
+  t.Sdotaccent = 0x1e60;
+  t.Sdotbelow = 0x1e62;
+  t.Sdotbelowdotaccent = 0x1e68;
+  t.Seharmenian = 0x054d;
+  t.Sevenroman = 0x2166;
+  t.Shaarmenian = 0x0547;
+  t.Shacyrillic = 0x0428;
+  t.Shchacyrillic = 0x0429;
+  t.Sheicoptic = 0x03e2;
+  t.Shhacyrillic = 0x04ba;
+  t.Shimacoptic = 0x03ec;
+  t.Sigma = 0x03a3;
+  t.Sixroman = 0x2165;
+  t.Smonospace = 0xff33;
+  t.Softsigncyrillic = 0x042c;
+  t.Ssmall = 0xf773;
+  t.Stigmagreek = 0x03da;
+  t.T = 0x0054;
+  t.Tau = 0x03a4;
+  t.Tbar = 0x0166;
+  t.Tcaron = 0x0164;
+  t.Tcedilla = 0x0162;
+  t.Tcircle = 0x24c9;
+  t.Tcircumflexbelow = 0x1e70;
+  t.Tcommaaccent = 0x0162;
+  t.Tdotaccent = 0x1e6a;
+  t.Tdotbelow = 0x1e6c;
+  t.Tecyrillic = 0x0422;
+  t.Tedescendercyrillic = 0x04ac;
+  t.Tenroman = 0x2169;
+  t.Tetsecyrillic = 0x04b4;
+  t.Theta = 0x0398;
+  t.Thook = 0x01ac;
+  t.Thorn = 0x00de;
+  t.Thornsmall = 0xf7fe;
+  t.Threeroman = 0x2162;
+  t.Tildesmall = 0xf6fe;
+  t.Tiwnarmenian = 0x054f;
+  t.Tlinebelow = 0x1e6e;
+  t.Tmonospace = 0xff34;
+  t.Toarmenian = 0x0539;
+  t.Tonefive = 0x01bc;
+  t.Tonesix = 0x0184;
+  t.Tonetwo = 0x01a7;
+  t.Tretroflexhook = 0x01ae;
+  t.Tsecyrillic = 0x0426;
+  t.Tshecyrillic = 0x040b;
+  t.Tsmall = 0xf774;
+  t.Twelveroman = 0x216b;
+  t.Tworoman = 0x2161;
+  t.U = 0x0055;
+  t.Uacute = 0x00da;
+  t.Uacutesmall = 0xf7fa;
+  t.Ubreve = 0x016c;
+  t.Ucaron = 0x01d3;
+  t.Ucircle = 0x24ca;
+  t.Ucircumflex = 0x00db;
+  t.Ucircumflexbelow = 0x1e76;
+  t.Ucircumflexsmall = 0xf7fb;
+  t.Ucyrillic = 0x0423;
+  t.Udblacute = 0x0170;
+  t.Udblgrave = 0x0214;
+  t.Udieresis = 0x00dc;
+  t.Udieresisacute = 0x01d7;
+  t.Udieresisbelow = 0x1e72;
+  t.Udieresiscaron = 0x01d9;
+  t.Udieresiscyrillic = 0x04f0;
+  t.Udieresisgrave = 0x01db;
+  t.Udieresismacron = 0x01d5;
+  t.Udieresissmall = 0xf7fc;
+  t.Udotbelow = 0x1ee4;
+  t.Ugrave = 0x00d9;
+  t.Ugravesmall = 0xf7f9;
+  t.Uhookabove = 0x1ee6;
+  t.Uhorn = 0x01af;
+  t.Uhornacute = 0x1ee8;
+  t.Uhorndotbelow = 0x1ef0;
+  t.Uhorngrave = 0x1eea;
+  t.Uhornhookabove = 0x1eec;
+  t.Uhorntilde = 0x1eee;
+  t.Uhungarumlaut = 0x0170;
+  t.Uhungarumlautcyrillic = 0x04f2;
+  t.Uinvertedbreve = 0x0216;
+  t.Ukcyrillic = 0x0478;
+  t.Umacron = 0x016a;
+  t.Umacroncyrillic = 0x04ee;
+  t.Umacrondieresis = 0x1e7a;
+  t.Umonospace = 0xff35;
+  t.Uogonek = 0x0172;
+  t.Upsilon = 0x03a5;
+  t.Upsilon1 = 0x03d2;
+  t.Upsilonacutehooksymbolgreek = 0x03d3;
+  t.Upsilonafrican = 0x01b1;
+  t.Upsilondieresis = 0x03ab;
+  t.Upsilondieresishooksymbolgreek = 0x03d4;
+  t.Upsilonhooksymbol = 0x03d2;
+  t.Upsilontonos = 0x038e;
+  t.Uring = 0x016e;
+  t.Ushortcyrillic = 0x040e;
+  t.Usmall = 0xf775;
+  t.Ustraightcyrillic = 0x04ae;
+  t.Ustraightstrokecyrillic = 0x04b0;
+  t.Utilde = 0x0168;
+  t.Utildeacute = 0x1e78;
+  t.Utildebelow = 0x1e74;
+  t.V = 0x0056;
+  t.Vcircle = 0x24cb;
+  t.Vdotbelow = 0x1e7e;
+  t.Vecyrillic = 0x0412;
+  t.Vewarmenian = 0x054e;
+  t.Vhook = 0x01b2;
+  t.Vmonospace = 0xff36;
+  t.Voarmenian = 0x0548;
+  t.Vsmall = 0xf776;
+  t.Vtilde = 0x1e7c;
+  t.W = 0x0057;
+  t.Wacute = 0x1e82;
+  t.Wcircle = 0x24cc;
+  t.Wcircumflex = 0x0174;
+  t.Wdieresis = 0x1e84;
+  t.Wdotaccent = 0x1e86;
+  t.Wdotbelow = 0x1e88;
+  t.Wgrave = 0x1e80;
+  t.Wmonospace = 0xff37;
+  t.Wsmall = 0xf777;
+  t.X = 0x0058;
+  t.Xcircle = 0x24cd;
+  t.Xdieresis = 0x1e8c;
+  t.Xdotaccent = 0x1e8a;
+  t.Xeharmenian = 0x053d;
+  t.Xi = 0x039e;
+  t.Xmonospace = 0xff38;
+  t.Xsmall = 0xf778;
+  t.Y = 0x0059;
+  t.Yacute = 0x00dd;
+  t.Yacutesmall = 0xf7fd;
+  t.Yatcyrillic = 0x0462;
+  t.Ycircle = 0x24ce;
+  t.Ycircumflex = 0x0176;
+  t.Ydieresis = 0x0178;
+  t.Ydieresissmall = 0xf7ff;
+  t.Ydotaccent = 0x1e8e;
+  t.Ydotbelow = 0x1ef4;
+  t.Yericyrillic = 0x042b;
+  t.Yerudieresiscyrillic = 0x04f8;
+  t.Ygrave = 0x1ef2;
+  t.Yhook = 0x01b3;
+  t.Yhookabove = 0x1ef6;
+  t.Yiarmenian = 0x0545;
+  t.Yicyrillic = 0x0407;
+  t.Yiwnarmenian = 0x0552;
+  t.Ymonospace = 0xff39;
+  t.Ysmall = 0xf779;
+  t.Ytilde = 0x1ef8;
+  t.Yusbigcyrillic = 0x046a;
+  t.Yusbigiotifiedcyrillic = 0x046c;
+  t.Yuslittlecyrillic = 0x0466;
+  t.Yuslittleiotifiedcyrillic = 0x0468;
+  t.Z = 0x005a;
+  t.Zaarmenian = 0x0536;
+  t.Zacute = 0x0179;
+  t.Zcaron = 0x017d;
+  t.Zcaronsmall = 0xf6ff;
+  t.Zcircle = 0x24cf;
+  t.Zcircumflex = 0x1e90;
+  t.Zdot = 0x017b;
+  t.Zdotaccent = 0x017b;
+  t.Zdotbelow = 0x1e92;
+  t.Zecyrillic = 0x0417;
+  t.Zedescendercyrillic = 0x0498;
+  t.Zedieresiscyrillic = 0x04de;
+  t.Zeta = 0x0396;
+  t.Zhearmenian = 0x053a;
+  t.Zhebrevecyrillic = 0x04c1;
+  t.Zhecyrillic = 0x0416;
+  t.Zhedescendercyrillic = 0x0496;
+  t.Zhedieresiscyrillic = 0x04dc;
+  t.Zlinebelow = 0x1e94;
+  t.Zmonospace = 0xff3a;
+  t.Zsmall = 0xf77a;
+  t.Zstroke = 0x01b5;
+  t.a = 0x0061;
+  t.aabengali = 0x0986;
+  t.aacute = 0x00e1;
+  t.aadeva = 0x0906;
+  t.aagujarati = 0x0a86;
+  t.aagurmukhi = 0x0a06;
+  t.aamatragurmukhi = 0x0a3e;
+  t.aarusquare = 0x3303;
+  t.aavowelsignbengali = 0x09be;
+  t.aavowelsigndeva = 0x093e;
+  t.aavowelsigngujarati = 0x0abe;
+  t.abbreviationmarkarmenian = 0x055f;
+  t.abbreviationsigndeva = 0x0970;
+  t.abengali = 0x0985;
+  t.abopomofo = 0x311a;
+  t.abreve = 0x0103;
+  t.abreveacute = 0x1eaf;
+  t.abrevecyrillic = 0x04d1;
+  t.abrevedotbelow = 0x1eb7;
+  t.abrevegrave = 0x1eb1;
+  t.abrevehookabove = 0x1eb3;
+  t.abrevetilde = 0x1eb5;
+  t.acaron = 0x01ce;
+  t.acircle = 0x24d0;
+  t.acircumflex = 0x00e2;
+  t.acircumflexacute = 0x1ea5;
+  t.acircumflexdotbelow = 0x1ead;
+  t.acircumflexgrave = 0x1ea7;
+  t.acircumflexhookabove = 0x1ea9;
+  t.acircumflextilde = 0x1eab;
+  t.acute = 0x00b4;
+  t.acutebelowcmb = 0x0317;
+  t.acutecmb = 0x0301;
+  t.acutecomb = 0x0301;
+  t.acutedeva = 0x0954;
+  t.acutelowmod = 0x02cf;
+  t.acutetonecmb = 0x0341;
+  t.acyrillic = 0x0430;
+  t.adblgrave = 0x0201;
+  t.addakgurmukhi = 0x0a71;
+  t.adeva = 0x0905;
+  t.adieresis = 0x00e4;
+  t.adieresiscyrillic = 0x04d3;
+  t.adieresismacron = 0x01df;
+  t.adotbelow = 0x1ea1;
+  t.adotmacron = 0x01e1;
+  t.ae = 0x00e6;
+  t.aeacute = 0x01fd;
+  t.aekorean = 0x3150;
+  t.aemacron = 0x01e3;
+  t.afii00208 = 0x2015;
+  t.afii08941 = 0x20a4;
+  t.afii10017 = 0x0410;
+  t.afii10018 = 0x0411;
+  t.afii10019 = 0x0412;
+  t.afii10020 = 0x0413;
+  t.afii10021 = 0x0414;
+  t.afii10022 = 0x0415;
+  t.afii10023 = 0x0401;
+  t.afii10024 = 0x0416;
+  t.afii10025 = 0x0417;
+  t.afii10026 = 0x0418;
+  t.afii10027 = 0x0419;
+  t.afii10028 = 0x041a;
+  t.afii10029 = 0x041b;
+  t.afii10030 = 0x041c;
+  t.afii10031 = 0x041d;
+  t.afii10032 = 0x041e;
+  t.afii10033 = 0x041f;
+  t.afii10034 = 0x0420;
+  t.afii10035 = 0x0421;
+  t.afii10036 = 0x0422;
+  t.afii10037 = 0x0423;
+  t.afii10038 = 0x0424;
+  t.afii10039 = 0x0425;
+  t.afii10040 = 0x0426;
+  t.afii10041 = 0x0427;
+  t.afii10042 = 0x0428;
+  t.afii10043 = 0x0429;
+  t.afii10044 = 0x042a;
+  t.afii10045 = 0x042b;
+  t.afii10046 = 0x042c;
+  t.afii10047 = 0x042d;
+  t.afii10048 = 0x042e;
+  t.afii10049 = 0x042f;
+  t.afii10050 = 0x0490;
+  t.afii10051 = 0x0402;
+  t.afii10052 = 0x0403;
+  t.afii10053 = 0x0404;
+  t.afii10054 = 0x0405;
+  t.afii10055 = 0x0406;
+  t.afii10056 = 0x0407;
+  t.afii10057 = 0x0408;
+  t.afii10058 = 0x0409;
+  t.afii10059 = 0x040a;
+  t.afii10060 = 0x040b;
+  t.afii10061 = 0x040c;
+  t.afii10062 = 0x040e;
+  t.afii10063 = 0xf6c4;
+  t.afii10064 = 0xf6c5;
+  t.afii10065 = 0x0430;
+  t.afii10066 = 0x0431;
+  t.afii10067 = 0x0432;
+  t.afii10068 = 0x0433;
+  t.afii10069 = 0x0434;
+  t.afii10070 = 0x0435;
+  t.afii10071 = 0x0451;
+  t.afii10072 = 0x0436;
+  t.afii10073 = 0x0437;
+  t.afii10074 = 0x0438;
+  t.afii10075 = 0x0439;
+  t.afii10076 = 0x043a;
+  t.afii10077 = 0x043b;
+  t.afii10078 = 0x043c;
+  t.afii10079 = 0x043d;
+  t.afii10080 = 0x043e;
+  t.afii10081 = 0x043f;
+  t.afii10082 = 0x0440;
+  t.afii10083 = 0x0441;
+  t.afii10084 = 0x0442;
+  t.afii10085 = 0x0443;
+  t.afii10086 = 0x0444;
+  t.afii10087 = 0x0445;
+  t.afii10088 = 0x0446;
+  t.afii10089 = 0x0447;
+  t.afii10090 = 0x0448;
+  t.afii10091 = 0x0449;
+  t.afii10092 = 0x044a;
+  t.afii10093 = 0x044b;
+  t.afii10094 = 0x044c;
+  t.afii10095 = 0x044d;
+  t.afii10096 = 0x044e;
+  t.afii10097 = 0x044f;
+  t.afii10098 = 0x0491;
+  t.afii10099 = 0x0452;
+  t.afii10100 = 0x0453;
+  t.afii10101 = 0x0454;
+  t.afii10102 = 0x0455;
+  t.afii10103 = 0x0456;
+  t.afii10104 = 0x0457;
+  t.afii10105 = 0x0458;
+  t.afii10106 = 0x0459;
+  t.afii10107 = 0x045a;
+  t.afii10108 = 0x045b;
+  t.afii10109 = 0x045c;
+  t.afii10110 = 0x045e;
+  t.afii10145 = 0x040f;
+  t.afii10146 = 0x0462;
+  t.afii10147 = 0x0472;
+  t.afii10148 = 0x0474;
+  t.afii10192 = 0xf6c6;
+  t.afii10193 = 0x045f;
+  t.afii10194 = 0x0463;
+  t.afii10195 = 0x0473;
+  t.afii10196 = 0x0475;
+  t.afii10831 = 0xf6c7;
+  t.afii10832 = 0xf6c8;
+  t.afii10846 = 0x04d9;
+  t.afii299 = 0x200e;
+  t.afii300 = 0x200f;
+  t.afii301 = 0x200d;
+  t.afii57381 = 0x066a;
+  t.afii57388 = 0x060c;
+  t.afii57392 = 0x0660;
+  t.afii57393 = 0x0661;
+  t.afii57394 = 0x0662;
+  t.afii57395 = 0x0663;
+  t.afii57396 = 0x0664;
+  t.afii57397 = 0x0665;
+  t.afii57398 = 0x0666;
+  t.afii57399 = 0x0667;
+  t.afii57400 = 0x0668;
+  t.afii57401 = 0x0669;
+  t.afii57403 = 0x061b;
+  t.afii57407 = 0x061f;
+  t.afii57409 = 0x0621;
+  t.afii57410 = 0x0622;
+  t.afii57411 = 0x0623;
+  t.afii57412 = 0x0624;
+  t.afii57413 = 0x0625;
+  t.afii57414 = 0x0626;
+  t.afii57415 = 0x0627;
+  t.afii57416 = 0x0628;
+  t.afii57417 = 0x0629;
+  t.afii57418 = 0x062a;
+  t.afii57419 = 0x062b;
+  t.afii57420 = 0x062c;
+  t.afii57421 = 0x062d;
+  t.afii57422 = 0x062e;
+  t.afii57423 = 0x062f;
+  t.afii57424 = 0x0630;
+  t.afii57425 = 0x0631;
+  t.afii57426 = 0x0632;
+  t.afii57427 = 0x0633;
+  t.afii57428 = 0x0634;
+  t.afii57429 = 0x0635;
+  t.afii57430 = 0x0636;
+  t.afii57431 = 0x0637;
+  t.afii57432 = 0x0638;
+  t.afii57433 = 0x0639;
+  t.afii57434 = 0x063a;
+  t.afii57440 = 0x0640;
+  t.afii57441 = 0x0641;
+  t.afii57442 = 0x0642;
+  t.afii57443 = 0x0643;
+  t.afii57444 = 0x0644;
+  t.afii57445 = 0x0645;
+  t.afii57446 = 0x0646;
+  t.afii57448 = 0x0648;
+  t.afii57449 = 0x0649;
+  t.afii57450 = 0x064a;
+  t.afii57451 = 0x064b;
+  t.afii57452 = 0x064c;
+  t.afii57453 = 0x064d;
+  t.afii57454 = 0x064e;
+  t.afii57455 = 0x064f;
+  t.afii57456 = 0x0650;
+  t.afii57457 = 0x0651;
+  t.afii57458 = 0x0652;
+  t.afii57470 = 0x0647;
+  t.afii57505 = 0x06a4;
+  t.afii57506 = 0x067e;
+  t.afii57507 = 0x0686;
+  t.afii57508 = 0x0698;
+  t.afii57509 = 0x06af;
+  t.afii57511 = 0x0679;
+  t.afii57512 = 0x0688;
+  t.afii57513 = 0x0691;
+  t.afii57514 = 0x06ba;
+  t.afii57519 = 0x06d2;
+  t.afii57534 = 0x06d5;
+  t.afii57636 = 0x20aa;
+  t.afii57645 = 0x05be;
+  t.afii57658 = 0x05c3;
+  t.afii57664 = 0x05d0;
+  t.afii57665 = 0x05d1;
+  t.afii57666 = 0x05d2;
+  t.afii57667 = 0x05d3;
+  t.afii57668 = 0x05d4;
+  t.afii57669 = 0x05d5;
+  t.afii57670 = 0x05d6;
+  t.afii57671 = 0x05d7;
+  t.afii57672 = 0x05d8;
+  t.afii57673 = 0x05d9;
+  t.afii57674 = 0x05da;
+  t.afii57675 = 0x05db;
+  t.afii57676 = 0x05dc;
+  t.afii57677 = 0x05dd;
+  t.afii57678 = 0x05de;
+  t.afii57679 = 0x05df;
+  t.afii57680 = 0x05e0;
+  t.afii57681 = 0x05e1;
+  t.afii57682 = 0x05e2;
+  t.afii57683 = 0x05e3;
+  t.afii57684 = 0x05e4;
+  t.afii57685 = 0x05e5;
+  t.afii57686 = 0x05e6;
+  t.afii57687 = 0x05e7;
+  t.afii57688 = 0x05e8;
+  t.afii57689 = 0x05e9;
+  t.afii57690 = 0x05ea;
+  t.afii57694 = 0xfb2a;
+  t.afii57695 = 0xfb2b;
+  t.afii57700 = 0xfb4b;
+  t.afii57705 = 0xfb1f;
+  t.afii57716 = 0x05f0;
+  t.afii57717 = 0x05f1;
+  t.afii57718 = 0x05f2;
+  t.afii57723 = 0xfb35;
+  t.afii57793 = 0x05b4;
+  t.afii57794 = 0x05b5;
+  t.afii57795 = 0x05b6;
+  t.afii57796 = 0x05bb;
+  t.afii57797 = 0x05b8;
+  t.afii57798 = 0x05b7;
+  t.afii57799 = 0x05b0;
+  t.afii57800 = 0x05b2;
+  t.afii57801 = 0x05b1;
+  t.afii57802 = 0x05b3;
+  t.afii57803 = 0x05c2;
+  t.afii57804 = 0x05c1;
+  t.afii57806 = 0x05b9;
+  t.afii57807 = 0x05bc;
+  t.afii57839 = 0x05bd;
+  t.afii57841 = 0x05bf;
+  t.afii57842 = 0x05c0;
+  t.afii57929 = 0x02bc;
+  t.afii61248 = 0x2105;
+  t.afii61289 = 0x2113;
+  t.afii61352 = 0x2116;
+  t.afii61573 = 0x202c;
+  t.afii61574 = 0x202d;
+  t.afii61575 = 0x202e;
+  t.afii61664 = 0x200c;
+  t.afii63167 = 0x066d;
+  t.afii64937 = 0x02bd;
+  t.agrave = 0x00e0;
+  t.agujarati = 0x0a85;
+  t.agurmukhi = 0x0a05;
+  t.ahiragana = 0x3042;
+  t.ahookabove = 0x1ea3;
+  t.aibengali = 0x0990;
+  t.aibopomofo = 0x311e;
+  t.aideva = 0x0910;
+  t.aiecyrillic = 0x04d5;
+  t.aigujarati = 0x0a90;
+  t.aigurmukhi = 0x0a10;
+  t.aimatragurmukhi = 0x0a48;
+  t.ainarabic = 0x0639;
+  t.ainfinalarabic = 0xfeca;
+  t.aininitialarabic = 0xfecb;
+  t.ainmedialarabic = 0xfecc;
+  t.ainvertedbreve = 0x0203;
+  t.aivowelsignbengali = 0x09c8;
+  t.aivowelsigndeva = 0x0948;
+  t.aivowelsigngujarati = 0x0ac8;
+  t.akatakana = 0x30a2;
+  t.akatakanahalfwidth = 0xff71;
+  t.akorean = 0x314f;
+  t.alef = 0x05d0;
+  t.alefarabic = 0x0627;
+  t.alefdageshhebrew = 0xfb30;
+  t.aleffinalarabic = 0xfe8e;
+  t.alefhamzaabovearabic = 0x0623;
+  t.alefhamzaabovefinalarabic = 0xfe84;
+  t.alefhamzabelowarabic = 0x0625;
+  t.alefhamzabelowfinalarabic = 0xfe88;
+  t.alefhebrew = 0x05d0;
+  t.aleflamedhebrew = 0xfb4f;
+  t.alefmaddaabovearabic = 0x0622;
+  t.alefmaddaabovefinalarabic = 0xfe82;
+  t.alefmaksuraarabic = 0x0649;
+  t.alefmaksurafinalarabic = 0xfef0;
+  t.alefmaksurainitialarabic = 0xfef3;
+  t.alefmaksuramedialarabic = 0xfef4;
+  t.alefpatahhebrew = 0xfb2e;
+  t.alefqamatshebrew = 0xfb2f;
+  t.aleph = 0x2135;
+  t.allequal = 0x224c;
+  t.alpha = 0x03b1;
+  t.alphatonos = 0x03ac;
+  t.amacron = 0x0101;
+  t.amonospace = 0xff41;
+  t.ampersand = 0x0026;
+  t.ampersandmonospace = 0xff06;
+  t.ampersandsmall = 0xf726;
+  t.amsquare = 0x33c2;
+  t.anbopomofo = 0x3122;
+  t.angbopomofo = 0x3124;
+  t.angbracketleft = 0x3008;
+  t.angbracketright = 0x3009;
+  t.angkhankhuthai = 0x0e5a;
+  t.angle = 0x2220;
+  t.anglebracketleft = 0x3008;
+  t.anglebracketleftvertical = 0xfe3f;
+  t.anglebracketright = 0x3009;
+  t.anglebracketrightvertical = 0xfe40;
+  t.angleleft = 0x2329;
+  t.angleright = 0x232a;
+  t.angstrom = 0x212b;
+  t.anoteleia = 0x0387;
+  t.anudattadeva = 0x0952;
+  t.anusvarabengali = 0x0982;
+  t.anusvaradeva = 0x0902;
+  t.anusvaragujarati = 0x0a82;
+  t.aogonek = 0x0105;
+  t.apaatosquare = 0x3300;
+  t.aparen = 0x249c;
+  t.apostrophearmenian = 0x055a;
+  t.apostrophemod = 0x02bc;
+  t.apple = 0xf8ff;
+  t.approaches = 0x2250;
+  t.approxequal = 0x2248;
+  t.approxequalorimage = 0x2252;
+  t.approximatelyequal = 0x2245;
+  t.araeaekorean = 0x318e;
+  t.araeakorean = 0x318d;
+  t.arc = 0x2312;
+  t.arighthalfring = 0x1e9a;
+  t.aring = 0x00e5;
+  t.aringacute = 0x01fb;
+  t.aringbelow = 0x1e01;
+  t.arrowboth = 0x2194;
+  t.arrowdashdown = 0x21e3;
+  t.arrowdashleft = 0x21e0;
+  t.arrowdashright = 0x21e2;
+  t.arrowdashup = 0x21e1;
+  t.arrowdblboth = 0x21d4;
+  t.arrowdbldown = 0x21d3;
+  t.arrowdblleft = 0x21d0;
+  t.arrowdblright = 0x21d2;
+  t.arrowdblup = 0x21d1;
+  t.arrowdown = 0x2193;
+  t.arrowdownleft = 0x2199;
+  t.arrowdownright = 0x2198;
+  t.arrowdownwhite = 0x21e9;
+  t.arrowheaddownmod = 0x02c5;
+  t.arrowheadleftmod = 0x02c2;
+  t.arrowheadrightmod = 0x02c3;
+  t.arrowheadupmod = 0x02c4;
+  t.arrowhorizex = 0xf8e7;
+  t.arrowleft = 0x2190;
+  t.arrowleftdbl = 0x21d0;
+  t.arrowleftdblstroke = 0x21cd;
+  t.arrowleftoverright = 0x21c6;
+  t.arrowleftwhite = 0x21e6;
+  t.arrowright = 0x2192;
+  t.arrowrightdblstroke = 0x21cf;
+  t.arrowrightheavy = 0x279e;
+  t.arrowrightoverleft = 0x21c4;
+  t.arrowrightwhite = 0x21e8;
+  t.arrowtableft = 0x21e4;
+  t.arrowtabright = 0x21e5;
+  t.arrowup = 0x2191;
+  t.arrowupdn = 0x2195;
+  t.arrowupdnbse = 0x21a8;
+  t.arrowupdownbase = 0x21a8;
+  t.arrowupleft = 0x2196;
+  t.arrowupleftofdown = 0x21c5;
+  t.arrowupright = 0x2197;
+  t.arrowupwhite = 0x21e7;
+  t.arrowvertex = 0xf8e6;
+  t.asciicircum = 0x005e;
+  t.asciicircummonospace = 0xff3e;
+  t.asciitilde = 0x007e;
+  t.asciitildemonospace = 0xff5e;
+  t.ascript = 0x0251;
+  t.ascriptturned = 0x0252;
+  t.asmallhiragana = 0x3041;
+  t.asmallkatakana = 0x30a1;
+  t.asmallkatakanahalfwidth = 0xff67;
+  t.asterisk = 0x002a;
+  t.asteriskaltonearabic = 0x066d;
+  t.asteriskarabic = 0x066d;
+  t.asteriskmath = 0x2217;
+  t.asteriskmonospace = 0xff0a;
+  t.asterisksmall = 0xfe61;
+  t.asterism = 0x2042;
+  t.asuperior = 0xf6e9;
+  t.asymptoticallyequal = 0x2243;
+  t.at = 0x0040;
+  t.atilde = 0x00e3;
+  t.atmonospace = 0xff20;
+  t.atsmall = 0xfe6b;
+  t.aturned = 0x0250;
+  t.aubengali = 0x0994;
+  t.aubopomofo = 0x3120;
+  t.audeva = 0x0914;
+  t.augujarati = 0x0a94;
+  t.augurmukhi = 0x0a14;
+  t.aulengthmarkbengali = 0x09d7;
+  t.aumatragurmukhi = 0x0a4c;
+  t.auvowelsignbengali = 0x09cc;
+  t.auvowelsigndeva = 0x094c;
+  t.auvowelsigngujarati = 0x0acc;
+  t.avagrahadeva = 0x093d;
+  t.aybarmenian = 0x0561;
+  t.ayin = 0x05e2;
+  t.ayinaltonehebrew = 0xfb20;
+  t.ayinhebrew = 0x05e2;
+  t.b = 0x0062;
+  t.babengali = 0x09ac;
+  t.backslash = 0x005c;
+  t.backslashmonospace = 0xff3c;
+  t.badeva = 0x092c;
+  t.bagujarati = 0x0aac;
+  t.bagurmukhi = 0x0a2c;
+  t.bahiragana = 0x3070;
+  t.bahtthai = 0x0e3f;
+  t.bakatakana = 0x30d0;
+  t.bar = 0x007c;
+  t.barmonospace = 0xff5c;
+  t.bbopomofo = 0x3105;
+  t.bcircle = 0x24d1;
+  t.bdotaccent = 0x1e03;
+  t.bdotbelow = 0x1e05;
+  t.beamedsixteenthnotes = 0x266c;
+  t.because = 0x2235;
+  t.becyrillic = 0x0431;
+  t.beharabic = 0x0628;
+  t.behfinalarabic = 0xfe90;
+  t.behinitialarabic = 0xfe91;
+  t.behiragana = 0x3079;
+  t.behmedialarabic = 0xfe92;
+  t.behmeeminitialarabic = 0xfc9f;
+  t.behmeemisolatedarabic = 0xfc08;
+  t.behnoonfinalarabic = 0xfc6d;
+  t.bekatakana = 0x30d9;
+  t.benarmenian = 0x0562;
+  t.bet = 0x05d1;
+  t.beta = 0x03b2;
+  t.betasymbolgreek = 0x03d0;
+  t.betdagesh = 0xfb31;
+  t.betdageshhebrew = 0xfb31;
+  t.bethebrew = 0x05d1;
+  t.betrafehebrew = 0xfb4c;
+  t.bhabengali = 0x09ad;
+  t.bhadeva = 0x092d;
+  t.bhagujarati = 0x0aad;
+  t.bhagurmukhi = 0x0a2d;
+  t.bhook = 0x0253;
+  t.bihiragana = 0x3073;
+  t.bikatakana = 0x30d3;
+  t.bilabialclick = 0x0298;
+  t.bindigurmukhi = 0x0a02;
+  t.birusquare = 0x3331;
+  t.blackcircle = 0x25cf;
+  t.blackdiamond = 0x25c6;
+  t.blackdownpointingtriangle = 0x25bc;
+  t.blackleftpointingpointer = 0x25c4;
+  t.blackleftpointingtriangle = 0x25c0;
+  t.blacklenticularbracketleft = 0x3010;
+  t.blacklenticularbracketleftvertical = 0xfe3b;
+  t.blacklenticularbracketright = 0x3011;
+  t.blacklenticularbracketrightvertical = 0xfe3c;
+  t.blacklowerlefttriangle = 0x25e3;
+  t.blacklowerrighttriangle = 0x25e2;
+  t.blackrectangle = 0x25ac;
+  t.blackrightpointingpointer = 0x25ba;
+  t.blackrightpointingtriangle = 0x25b6;
+  t.blacksmallsquare = 0x25aa;
+  t.blacksmilingface = 0x263b;
+  t.blacksquare = 0x25a0;
+  t.blackstar = 0x2605;
+  t.blackupperlefttriangle = 0x25e4;
+  t.blackupperrighttriangle = 0x25e5;
+  t.blackuppointingsmalltriangle = 0x25b4;
+  t.blackuppointingtriangle = 0x25b2;
+  t.blank = 0x2423;
+  t.blinebelow = 0x1e07;
+  t.block = 0x2588;
+  t.bmonospace = 0xff42;
+  t.bobaimaithai = 0x0e1a;
+  t.bohiragana = 0x307c;
+  t.bokatakana = 0x30dc;
+  t.bparen = 0x249d;
+  t.bqsquare = 0x33c3;
+  t.braceex = 0xf8f4;
+  t.braceleft = 0x007b;
+  t.braceleftbt = 0xf8f3;
+  t.braceleftmid = 0xf8f2;
+  t.braceleftmonospace = 0xff5b;
+  t.braceleftsmall = 0xfe5b;
+  t.bracelefttp = 0xf8f1;
+  t.braceleftvertical = 0xfe37;
+  t.braceright = 0x007d;
+  t.bracerightbt = 0xf8fe;
+  t.bracerightmid = 0xf8fd;
+  t.bracerightmonospace = 0xff5d;
+  t.bracerightsmall = 0xfe5c;
+  t.bracerighttp = 0xf8fc;
+  t.bracerightvertical = 0xfe38;
+  t.bracketleft = 0x005b;
+  t.bracketleftbt = 0xf8f0;
+  t.bracketleftex = 0xf8ef;
+  t.bracketleftmonospace = 0xff3b;
+  t.bracketlefttp = 0xf8ee;
+  t.bracketright = 0x005d;
+  t.bracketrightbt = 0xf8fb;
+  t.bracketrightex = 0xf8fa;
+  t.bracketrightmonospace = 0xff3d;
+  t.bracketrighttp = 0xf8f9;
+  t.breve = 0x02d8;
+  t.brevebelowcmb = 0x032e;
+  t.brevecmb = 0x0306;
+  t.breveinvertedbelowcmb = 0x032f;
+  t.breveinvertedcmb = 0x0311;
+  t.breveinverteddoublecmb = 0x0361;
+  t.bridgebelowcmb = 0x032a;
+  t.bridgeinvertedbelowcmb = 0x033a;
+  t.brokenbar = 0x00a6;
+  t.bstroke = 0x0180;
+  t.bsuperior = 0xf6ea;
+  t.btopbar = 0x0183;
+  t.buhiragana = 0x3076;
+  t.bukatakana = 0x30d6;
+  t.bullet = 0x2022;
+  t.bulletinverse = 0x25d8;
+  t.bulletoperator = 0x2219;
+  t.bullseye = 0x25ce;
+  t.c = 0x0063;
+  t.caarmenian = 0x056e;
+  t.cabengali = 0x099a;
+  t.cacute = 0x0107;
+  t.cadeva = 0x091a;
+  t.cagujarati = 0x0a9a;
+  t.cagurmukhi = 0x0a1a;
+  t.calsquare = 0x3388;
+  t.candrabindubengali = 0x0981;
+  t.candrabinducmb = 0x0310;
+  t.candrabindudeva = 0x0901;
+  t.candrabindugujarati = 0x0a81;
+  t.capslock = 0x21ea;
+  t.careof = 0x2105;
+  t.caron = 0x02c7;
+  t.caronbelowcmb = 0x032c;
+  t.caroncmb = 0x030c;
+  t.carriagereturn = 0x21b5;
+  t.cbopomofo = 0x3118;
+  t.ccaron = 0x010d;
+  t.ccedilla = 0x00e7;
+  t.ccedillaacute = 0x1e09;
+  t.ccircle = 0x24d2;
+  t.ccircumflex = 0x0109;
+  t.ccurl = 0x0255;
+  t.cdot = 0x010b;
+  t.cdotaccent = 0x010b;
+  t.cdsquare = 0x33c5;
+  t.cedilla = 0x00b8;
+  t.cedillacmb = 0x0327;
+  t.cent = 0x00a2;
+  t.centigrade = 0x2103;
+  t.centinferior = 0xf6df;
+  t.centmonospace = 0xffe0;
+  t.centoldstyle = 0xf7a2;
+  t.centsuperior = 0xf6e0;
+  t.chaarmenian = 0x0579;
+  t.chabengali = 0x099b;
+  t.chadeva = 0x091b;
+  t.chagujarati = 0x0a9b;
+  t.chagurmukhi = 0x0a1b;
+  t.chbopomofo = 0x3114;
+  t.cheabkhasiancyrillic = 0x04bd;
+  t.checkmark = 0x2713;
+  t.checyrillic = 0x0447;
+  t.chedescenderabkhasiancyrillic = 0x04bf;
+  t.chedescendercyrillic = 0x04b7;
+  t.chedieresiscyrillic = 0x04f5;
+  t.cheharmenian = 0x0573;
+  t.chekhakassiancyrillic = 0x04cc;
+  t.cheverticalstrokecyrillic = 0x04b9;
+  t.chi = 0x03c7;
+  t.chieuchacirclekorean = 0x3277;
+  t.chieuchaparenkorean = 0x3217;
+  t.chieuchcirclekorean = 0x3269;
+  t.chieuchkorean = 0x314a;
+  t.chieuchparenkorean = 0x3209;
+  t.chochangthai = 0x0e0a;
+  t.chochanthai = 0x0e08;
+  t.chochingthai = 0x0e09;
+  t.chochoethai = 0x0e0c;
+  t.chook = 0x0188;
+  t.cieucacirclekorean = 0x3276;
+  t.cieucaparenkorean = 0x3216;
+  t.cieuccirclekorean = 0x3268;
+  t.cieuckorean = 0x3148;
+  t.cieucparenkorean = 0x3208;
+  t.cieucuparenkorean = 0x321c;
+  t.circle = 0x25cb;
+  t.circlecopyrt = 0x00a9;
+  t.circlemultiply = 0x2297;
+  t.circleot = 0x2299;
+  t.circleplus = 0x2295;
+  t.circlepostalmark = 0x3036;
+  t.circlewithlefthalfblack = 0x25d0;
+  t.circlewithrighthalfblack = 0x25d1;
+  t.circumflex = 0x02c6;
+  t.circumflexbelowcmb = 0x032d;
+  t.circumflexcmb = 0x0302;
+  t.clear = 0x2327;
+  t.clickalveolar = 0x01c2;
+  t.clickdental = 0x01c0;
+  t.clicklateral = 0x01c1;
+  t.clickretroflex = 0x01c3;
+  t.club = 0x2663;
+  t.clubsuitblack = 0x2663;
+  t.clubsuitwhite = 0x2667;
+  t.cmcubedsquare = 0x33a4;
+  t.cmonospace = 0xff43;
+  t.cmsquaredsquare = 0x33a0;
+  t.coarmenian = 0x0581;
+  t.colon = 0x003a;
+  t.colonmonetary = 0x20a1;
+  t.colonmonospace = 0xff1a;
+  t.colonsign = 0x20a1;
+  t.colonsmall = 0xfe55;
+  t.colontriangularhalfmod = 0x02d1;
+  t.colontriangularmod = 0x02d0;
+  t.comma = 0x002c;
+  t.commaabovecmb = 0x0313;
+  t.commaaboverightcmb = 0x0315;
+  t.commaaccent = 0xf6c3;
+  t.commaarabic = 0x060c;
+  t.commaarmenian = 0x055d;
+  t.commainferior = 0xf6e1;
+  t.commamonospace = 0xff0c;
+  t.commareversedabovecmb = 0x0314;
+  t.commareversedmod = 0x02bd;
+  t.commasmall = 0xfe50;
+  t.commasuperior = 0xf6e2;
+  t.commaturnedabovecmb = 0x0312;
+  t.commaturnedmod = 0x02bb;
+  t.compass = 0x263c;
+  t.congruent = 0x2245;
+  t.contourintegral = 0x222e;
+  t.control = 0x2303;
+  t.controlACK = 0x0006;
+  t.controlBEL = 0x0007;
+  t.controlBS = 0x0008;
+  t.controlCAN = 0x0018;
+  t.controlCR = 0x000d;
+  t.controlDC1 = 0x0011;
+  t.controlDC2 = 0x0012;
+  t.controlDC3 = 0x0013;
+  t.controlDC4 = 0x0014;
+  t.controlDEL = 0x007f;
+  t.controlDLE = 0x0010;
+  t.controlEM = 0x0019;
+  t.controlENQ = 0x0005;
+  t.controlEOT = 0x0004;
+  t.controlESC = 0x001b;
+  t.controlETB = 0x0017;
+  t.controlETX = 0x0003;
+  t.controlFF = 0x000c;
+  t.controlFS = 0x001c;
+  t.controlGS = 0x001d;
+  t.controlHT = 0x0009;
+  t.controlLF = 0x000a;
+  t.controlNAK = 0x0015;
+  t.controlNULL = 0x0000;
+  t.controlRS = 0x001e;
+  t.controlSI = 0x000f;
+  t.controlSO = 0x000e;
+  t.controlSOT = 0x0002;
+  t.controlSTX = 0x0001;
+  t.controlSUB = 0x001a;
+  t.controlSYN = 0x0016;
+  t.controlUS = 0x001f;
+  t.controlVT = 0x000b;
+  t.copyright = 0x00a9;
+  t.copyrightsans = 0xf8e9;
+  t.copyrightserif = 0xf6d9;
+  t.cornerbracketleft = 0x300c;
+  t.cornerbracketlefthalfwidth = 0xff62;
+  t.cornerbracketleftvertical = 0xfe41;
+  t.cornerbracketright = 0x300d;
+  t.cornerbracketrighthalfwidth = 0xff63;
+  t.cornerbracketrightvertical = 0xfe42;
+  t.corporationsquare = 0x337f;
+  t.cosquare = 0x33c7;
+  t.coverkgsquare = 0x33c6;
+  t.cparen = 0x249e;
+  t.cruzeiro = 0x20a2;
+  t.cstretched = 0x0297;
+  t.curlyand = 0x22cf;
+  t.curlyor = 0x22ce;
+  t.currency = 0x00a4;
+  t.cyrBreve = 0xf6d1;
+  t.cyrFlex = 0xf6d2;
+  t.cyrbreve = 0xf6d4;
+  t.cyrflex = 0xf6d5;
+  t.d = 0x0064;
+  t.daarmenian = 0x0564;
+  t.dabengali = 0x09a6;
+  t.dadarabic = 0x0636;
+  t.dadeva = 0x0926;
+  t.dadfinalarabic = 0xfebe;
+  t.dadinitialarabic = 0xfebf;
+  t.dadmedialarabic = 0xfec0;
+  t.dagesh = 0x05bc;
+  t.dageshhebrew = 0x05bc;
+  t.dagger = 0x2020;
+  t.daggerdbl = 0x2021;
+  t.dagujarati = 0x0aa6;
+  t.dagurmukhi = 0x0a26;
+  t.dahiragana = 0x3060;
+  t.dakatakana = 0x30c0;
+  t.dalarabic = 0x062f;
+  t.dalet = 0x05d3;
+  t.daletdagesh = 0xfb33;
+  t.daletdageshhebrew = 0xfb33;
+  t.dalethebrew = 0x05d3;
+  t.dalfinalarabic = 0xfeaa;
+  t.dammaarabic = 0x064f;
+  t.dammalowarabic = 0x064f;
+  t.dammatanaltonearabic = 0x064c;
+  t.dammatanarabic = 0x064c;
+  t.danda = 0x0964;
+  t.dargahebrew = 0x05a7;
+  t.dargalefthebrew = 0x05a7;
+  t.dasiapneumatacyrilliccmb = 0x0485;
+  t.dblGrave = 0xf6d3;
+  t.dblanglebracketleft = 0x300a;
+  t.dblanglebracketleftvertical = 0xfe3d;
+  t.dblanglebracketright = 0x300b;
+  t.dblanglebracketrightvertical = 0xfe3e;
+  t.dblarchinvertedbelowcmb = 0x032b;
+  t.dblarrowleft = 0x21d4;
+  t.dblarrowright = 0x21d2;
+  t.dbldanda = 0x0965;
+  t.dblgrave = 0xf6d6;
+  t.dblgravecmb = 0x030f;
+  t.dblintegral = 0x222c;
+  t.dbllowline = 0x2017;
+  t.dbllowlinecmb = 0x0333;
+  t.dbloverlinecmb = 0x033f;
+  t.dblprimemod = 0x02ba;
+  t.dblverticalbar = 0x2016;
+  t.dblverticallineabovecmb = 0x030e;
+  t.dbopomofo = 0x3109;
+  t.dbsquare = 0x33c8;
+  t.dcaron = 0x010f;
+  t.dcedilla = 0x1e11;
+  t.dcircle = 0x24d3;
+  t.dcircumflexbelow = 0x1e13;
+  t.dcroat = 0x0111;
+  t.ddabengali = 0x09a1;
+  t.ddadeva = 0x0921;
+  t.ddagujarati = 0x0aa1;
+  t.ddagurmukhi = 0x0a21;
+  t.ddalarabic = 0x0688;
+  t.ddalfinalarabic = 0xfb89;
+  t.dddhadeva = 0x095c;
+  t.ddhabengali = 0x09a2;
+  t.ddhadeva = 0x0922;
+  t.ddhagujarati = 0x0aa2;
+  t.ddhagurmukhi = 0x0a22;
+  t.ddotaccent = 0x1e0b;
+  t.ddotbelow = 0x1e0d;
+  t.decimalseparatorarabic = 0x066b;
+  t.decimalseparatorpersian = 0x066b;
+  t.decyrillic = 0x0434;
+  t.degree = 0x00b0;
+  t.dehihebrew = 0x05ad;
+  t.dehiragana = 0x3067;
+  t.deicoptic = 0x03ef;
+  t.dekatakana = 0x30c7;
+  t.deleteleft = 0x232b;
+  t.deleteright = 0x2326;
+  t.delta = 0x03b4;
+  t.deltaturned = 0x018d;
+  t.denominatorminusonenumeratorbengali = 0x09f8;
+  t.dezh = 0x02a4;
+  t.dhabengali = 0x09a7;
+  t.dhadeva = 0x0927;
+  t.dhagujarati = 0x0aa7;
+  t.dhagurmukhi = 0x0a27;
+  t.dhook = 0x0257;
+  t.dialytikatonos = 0x0385;
+  t.dialytikatonoscmb = 0x0344;
+  t.diamond = 0x2666;
+  t.diamondsuitwhite = 0x2662;
+  t.dieresis = 0x00a8;
+  t.dieresisacute = 0xf6d7;
+  t.dieresisbelowcmb = 0x0324;
+  t.dieresiscmb = 0x0308;
+  t.dieresisgrave = 0xf6d8;
+  t.dieresistonos = 0x0385;
+  t.dihiragana = 0x3062;
+  t.dikatakana = 0x30c2;
+  t.dittomark = 0x3003;
+  t.divide = 0x00f7;
+  t.divides = 0x2223;
+  t.divisionslash = 0x2215;
+  t.djecyrillic = 0x0452;
+  t.dkshade = 0x2593;
+  t.dlinebelow = 0x1e0f;
+  t.dlsquare = 0x3397;
+  t.dmacron = 0x0111;
+  t.dmonospace = 0xff44;
+  t.dnblock = 0x2584;
+  t.dochadathai = 0x0e0e;
+  t.dodekthai = 0x0e14;
+  t.dohiragana = 0x3069;
+  t.dokatakana = 0x30c9;
+  t.dollar = 0x0024;
+  t.dollarinferior = 0xf6e3;
+  t.dollarmonospace = 0xff04;
+  t.dollaroldstyle = 0xf724;
+  t.dollarsmall = 0xfe69;
+  t.dollarsuperior = 0xf6e4;
+  t.dong = 0x20ab;
+  t.dorusquare = 0x3326;
+  t.dotaccent = 0x02d9;
+  t.dotaccentcmb = 0x0307;
+  t.dotbelowcmb = 0x0323;
+  t.dotbelowcomb = 0x0323;
+  t.dotkatakana = 0x30fb;
+  t.dotlessi = 0x0131;
+  t.dotlessj = 0xf6be;
+  t.dotlessjstrokehook = 0x0284;
+  t.dotmath = 0x22c5;
+  t.dottedcircle = 0x25cc;
+  t.doubleyodpatah = 0xfb1f;
+  t.doubleyodpatahhebrew = 0xfb1f;
+  t.downtackbelowcmb = 0x031e;
+  t.downtackmod = 0x02d5;
+  t.dparen = 0x249f;
+  t.dsuperior = 0xf6eb;
+  t.dtail = 0x0256;
+  t.dtopbar = 0x018c;
+  t.duhiragana = 0x3065;
+  t.dukatakana = 0x30c5;
+  t.dz = 0x01f3;
+  t.dzaltone = 0x02a3;
+  t.dzcaron = 0x01c6;
+  t.dzcurl = 0x02a5;
+  t.dzeabkhasiancyrillic = 0x04e1;
+  t.dzecyrillic = 0x0455;
+  t.dzhecyrillic = 0x045f;
+  t.e = 0x0065;
+  t.eacute = 0x00e9;
+  t.earth = 0x2641;
+  t.ebengali = 0x098f;
+  t.ebopomofo = 0x311c;
+  t.ebreve = 0x0115;
+  t.ecandradeva = 0x090d;
+  t.ecandragujarati = 0x0a8d;
+  t.ecandravowelsigndeva = 0x0945;
+  t.ecandravowelsigngujarati = 0x0ac5;
+  t.ecaron = 0x011b;
+  t.ecedillabreve = 0x1e1d;
+  t.echarmenian = 0x0565;
+  t.echyiwnarmenian = 0x0587;
+  t.ecircle = 0x24d4;
+  t.ecircumflex = 0x00ea;
+  t.ecircumflexacute = 0x1ebf;
+  t.ecircumflexbelow = 0x1e19;
+  t.ecircumflexdotbelow = 0x1ec7;
+  t.ecircumflexgrave = 0x1ec1;
+  t.ecircumflexhookabove = 0x1ec3;
+  t.ecircumflextilde = 0x1ec5;
+  t.ecyrillic = 0x0454;
+  t.edblgrave = 0x0205;
+  t.edeva = 0x090f;
+  t.edieresis = 0x00eb;
+  t.edot = 0x0117;
+  t.edotaccent = 0x0117;
+  t.edotbelow = 0x1eb9;
+  t.eegurmukhi = 0x0a0f;
+  t.eematragurmukhi = 0x0a47;
+  t.efcyrillic = 0x0444;
+  t.egrave = 0x00e8;
+  t.egujarati = 0x0a8f;
+  t.eharmenian = 0x0567;
+  t.ehbopomofo = 0x311d;
+  t.ehiragana = 0x3048;
+  t.ehookabove = 0x1ebb;
+  t.eibopomofo = 0x311f;
+  t.eight = 0x0038;
+  t.eightarabic = 0x0668;
+  t.eightbengali = 0x09ee;
+  t.eightcircle = 0x2467;
+  t.eightcircleinversesansserif = 0x2791;
+  t.eightdeva = 0x096e;
+  t.eighteencircle = 0x2471;
+  t.eighteenparen = 0x2485;
+  t.eighteenperiod = 0x2499;
+  t.eightgujarati = 0x0aee;
+  t.eightgurmukhi = 0x0a6e;
+  t.eighthackarabic = 0x0668;
+  t.eighthangzhou = 0x3028;
+  t.eighthnotebeamed = 0x266b;
+  t.eightideographicparen = 0x3227;
+  t.eightinferior = 0x2088;
+  t.eightmonospace = 0xff18;
+  t.eightoldstyle = 0xf738;
+  t.eightparen = 0x247b;
+  t.eightperiod = 0x248f;
+  t.eightpersian = 0x06f8;
+  t.eightroman = 0x2177;
+  t.eightsuperior = 0x2078;
+  t.eightthai = 0x0e58;
+  t.einvertedbreve = 0x0207;
+  t.eiotifiedcyrillic = 0x0465;
+  t.ekatakana = 0x30a8;
+  t.ekatakanahalfwidth = 0xff74;
+  t.ekonkargurmukhi = 0x0a74;
+  t.ekorean = 0x3154;
+  t.elcyrillic = 0x043b;
+  t.element = 0x2208;
+  t.elevencircle = 0x246a;
+  t.elevenparen = 0x247e;
+  t.elevenperiod = 0x2492;
+  t.elevenroman = 0x217a;
+  t.ellipsis = 0x2026;
+  t.ellipsisvertical = 0x22ee;
+  t.emacron = 0x0113;
+  t.emacronacute = 0x1e17;
+  t.emacrongrave = 0x1e15;
+  t.emcyrillic = 0x043c;
+  t.emdash = 0x2014;
+  t.emdashvertical = 0xfe31;
+  t.emonospace = 0xff45;
+  t.emphasismarkarmenian = 0x055b;
+  t.emptyset = 0x2205;
+  t.enbopomofo = 0x3123;
+  t.encyrillic = 0x043d;
+  t.endash = 0x2013;
+  t.endashvertical = 0xfe32;
+  t.endescendercyrillic = 0x04a3;
+  t.eng = 0x014b;
+  t.engbopomofo = 0x3125;
+  t.enghecyrillic = 0x04a5;
+  t.enhookcyrillic = 0x04c8;
+  t.enspace = 0x2002;
+  t.eogonek = 0x0119;
+  t.eokorean = 0x3153;
+  t.eopen = 0x025b;
+  t.eopenclosed = 0x029a;
+  t.eopenreversed = 0x025c;
+  t.eopenreversedclosed = 0x025e;
+  t.eopenreversedhook = 0x025d;
+  t.eparen = 0x24a0;
+  t.epsilon = 0x03b5;
+  t.epsilontonos = 0x03ad;
+  t.equal = 0x003d;
+  t.equalmonospace = 0xff1d;
+  t.equalsmall = 0xfe66;
+  t.equalsuperior = 0x207c;
+  t.equivalence = 0x2261;
+  t.erbopomofo = 0x3126;
+  t.ercyrillic = 0x0440;
+  t.ereversed = 0x0258;
+  t.ereversedcyrillic = 0x044d;
+  t.escyrillic = 0x0441;
+  t.esdescendercyrillic = 0x04ab;
+  t.esh = 0x0283;
+  t.eshcurl = 0x0286;
+  t.eshortdeva = 0x090e;
+  t.eshortvowelsigndeva = 0x0946;
+  t.eshreversedloop = 0x01aa;
+  t.eshsquatreversed = 0x0285;
+  t.esmallhiragana = 0x3047;
+  t.esmallkatakana = 0x30a7;
+  t.esmallkatakanahalfwidth = 0xff6a;
+  t.estimated = 0x212e;
+  t.esuperior = 0xf6ec;
+  t.eta = 0x03b7;
+  t.etarmenian = 0x0568;
+  t.etatonos = 0x03ae;
+  t.eth = 0x00f0;
+  t.etilde = 0x1ebd;
+  t.etildebelow = 0x1e1b;
+  t.etnahtafoukhhebrew = 0x0591;
+  t.etnahtafoukhlefthebrew = 0x0591;
+  t.etnahtahebrew = 0x0591;
+  t.etnahtalefthebrew = 0x0591;
+  t.eturned = 0x01dd;
+  t.eukorean = 0x3161;
+  t.euro = 0x20ac;
+  t.evowelsignbengali = 0x09c7;
+  t.evowelsigndeva = 0x0947;
+  t.evowelsigngujarati = 0x0ac7;
+  t.exclam = 0x0021;
+  t.exclamarmenian = 0x055c;
+  t.exclamdbl = 0x203c;
+  t.exclamdown = 0x00a1;
+  t.exclamdownsmall = 0xf7a1;
+  t.exclammonospace = 0xff01;
+  t.exclamsmall = 0xf721;
+  t.existential = 0x2203;
+  t.ezh = 0x0292;
+  t.ezhcaron = 0x01ef;
+  t.ezhcurl = 0x0293;
+  t.ezhreversed = 0x01b9;
+  t.ezhtail = 0x01ba;
+  t.f = 0x0066;
+  t.fadeva = 0x095e;
+  t.fagurmukhi = 0x0a5e;
+  t.fahrenheit = 0x2109;
+  t.fathaarabic = 0x064e;
+  t.fathalowarabic = 0x064e;
+  t.fathatanarabic = 0x064b;
+  t.fbopomofo = 0x3108;
+  t.fcircle = 0x24d5;
+  t.fdotaccent = 0x1e1f;
+  t.feharabic = 0x0641;
+  t.feharmenian = 0x0586;
+  t.fehfinalarabic = 0xfed2;
+  t.fehinitialarabic = 0xfed3;
+  t.fehmedialarabic = 0xfed4;
+  t.feicoptic = 0x03e5;
+  t.female = 0x2640;
+  t.ff = 0xfb00;
+  t.f_f = 0xfb00;
+  t.ffi = 0xfb03;
+  t.ffl = 0xfb04;
+  t.fi = 0xfb01;
+  t.fifteencircle = 0x246e;
+  t.fifteenparen = 0x2482;
+  t.fifteenperiod = 0x2496;
+  t.figuredash = 0x2012;
+  t.filledbox = 0x25a0;
+  t.filledrect = 0x25ac;
+  t.finalkaf = 0x05da;
+  t.finalkafdagesh = 0xfb3a;
+  t.finalkafdageshhebrew = 0xfb3a;
+  t.finalkafhebrew = 0x05da;
+  t.finalmem = 0x05dd;
+  t.finalmemhebrew = 0x05dd;
+  t.finalnun = 0x05df;
+  t.finalnunhebrew = 0x05df;
+  t.finalpe = 0x05e3;
+  t.finalpehebrew = 0x05e3;
+  t.finaltsadi = 0x05e5;
+  t.finaltsadihebrew = 0x05e5;
+  t.firsttonechinese = 0x02c9;
+  t.fisheye = 0x25c9;
+  t.fitacyrillic = 0x0473;
+  t.five = 0x0035;
+  t.fivearabic = 0x0665;
+  t.fivebengali = 0x09eb;
+  t.fivecircle = 0x2464;
+  t.fivecircleinversesansserif = 0x278e;
+  t.fivedeva = 0x096b;
+  t.fiveeighths = 0x215d;
+  t.fivegujarati = 0x0aeb;
+  t.fivegurmukhi = 0x0a6b;
+  t.fivehackarabic = 0x0665;
+  t.fivehangzhou = 0x3025;
+  t.fiveideographicparen = 0x3224;
+  t.fiveinferior = 0x2085;
+  t.fivemonospace = 0xff15;
+  t.fiveoldstyle = 0xf735;
+  t.fiveparen = 0x2478;
+  t.fiveperiod = 0x248c;
+  t.fivepersian = 0x06f5;
+  t.fiveroman = 0x2174;
+  t.fivesuperior = 0x2075;
+  t.fivethai = 0x0e55;
+  t.fl = 0xfb02;
+  t.florin = 0x0192;
+  t.fmonospace = 0xff46;
+  t.fmsquare = 0x3399;
+  t.fofanthai = 0x0e1f;
+  t.fofathai = 0x0e1d;
+  t.fongmanthai = 0x0e4f;
+  t.forall = 0x2200;
+  t.four = 0x0034;
+  t.fourarabic = 0x0664;
+  t.fourbengali = 0x09ea;
+  t.fourcircle = 0x2463;
+  t.fourcircleinversesansserif = 0x278d;
+  t.fourdeva = 0x096a;
+  t.fourgujarati = 0x0aea;
+  t.fourgurmukhi = 0x0a6a;
+  t.fourhackarabic = 0x0664;
+  t.fourhangzhou = 0x3024;
+  t.fourideographicparen = 0x3223;
+  t.fourinferior = 0x2084;
+  t.fourmonospace = 0xff14;
+  t.fournumeratorbengali = 0x09f7;
+  t.fouroldstyle = 0xf734;
+  t.fourparen = 0x2477;
+  t.fourperiod = 0x248b;
+  t.fourpersian = 0x06f4;
+  t.fourroman = 0x2173;
+  t.foursuperior = 0x2074;
+  t.fourteencircle = 0x246d;
+  t.fourteenparen = 0x2481;
+  t.fourteenperiod = 0x2495;
+  t.fourthai = 0x0e54;
+  t.fourthtonechinese = 0x02cb;
+  t.fparen = 0x24a1;
+  t.fraction = 0x2044;
+  t.franc = 0x20a3;
+  t.g = 0x0067;
+  t.gabengali = 0x0997;
+  t.gacute = 0x01f5;
+  t.gadeva = 0x0917;
+  t.gafarabic = 0x06af;
+  t.gaffinalarabic = 0xfb93;
+  t.gafinitialarabic = 0xfb94;
+  t.gafmedialarabic = 0xfb95;
+  t.gagujarati = 0x0a97;
+  t.gagurmukhi = 0x0a17;
+  t.gahiragana = 0x304c;
+  t.gakatakana = 0x30ac;
+  t.gamma = 0x03b3;
+  t.gammalatinsmall = 0x0263;
+  t.gammasuperior = 0x02e0;
+  t.gangiacoptic = 0x03eb;
+  t.gbopomofo = 0x310d;
+  t.gbreve = 0x011f;
+  t.gcaron = 0x01e7;
+  t.gcedilla = 0x0123;
+  t.gcircle = 0x24d6;
+  t.gcircumflex = 0x011d;
+  t.gcommaaccent = 0x0123;
+  t.gdot = 0x0121;
+  t.gdotaccent = 0x0121;
+  t.gecyrillic = 0x0433;
+  t.gehiragana = 0x3052;
+  t.gekatakana = 0x30b2;
+  t.geometricallyequal = 0x2251;
+  t.gereshaccenthebrew = 0x059c;
+  t.gereshhebrew = 0x05f3;
+  t.gereshmuqdamhebrew = 0x059d;
+  t.germandbls = 0x00df;
+  t.gershayimaccenthebrew = 0x059e;
+  t.gershayimhebrew = 0x05f4;
+  t.getamark = 0x3013;
+  t.ghabengali = 0x0998;
+  t.ghadarmenian = 0x0572;
+  t.ghadeva = 0x0918;
+  t.ghagujarati = 0x0a98;
+  t.ghagurmukhi = 0x0a18;
+  t.ghainarabic = 0x063a;
+  t.ghainfinalarabic = 0xfece;
+  t.ghaininitialarabic = 0xfecf;
+  t.ghainmedialarabic = 0xfed0;
+  t.ghemiddlehookcyrillic = 0x0495;
+  t.ghestrokecyrillic = 0x0493;
+  t.gheupturncyrillic = 0x0491;
+  t.ghhadeva = 0x095a;
+  t.ghhagurmukhi = 0x0a5a;
+  t.ghook = 0x0260;
+  t.ghzsquare = 0x3393;
+  t.gihiragana = 0x304e;
+  t.gikatakana = 0x30ae;
+  t.gimarmenian = 0x0563;
+  t.gimel = 0x05d2;
+  t.gimeldagesh = 0xfb32;
+  t.gimeldageshhebrew = 0xfb32;
+  t.gimelhebrew = 0x05d2;
+  t.gjecyrillic = 0x0453;
+  t.glottalinvertedstroke = 0x01be;
+  t.glottalstop = 0x0294;
+  t.glottalstopinverted = 0x0296;
+  t.glottalstopmod = 0x02c0;
+  t.glottalstopreversed = 0x0295;
+  t.glottalstopreversedmod = 0x02c1;
+  t.glottalstopreversedsuperior = 0x02e4;
+  t.glottalstopstroke = 0x02a1;
+  t.glottalstopstrokereversed = 0x02a2;
+  t.gmacron = 0x1e21;
+  t.gmonospace = 0xff47;
+  t.gohiragana = 0x3054;
+  t.gokatakana = 0x30b4;
+  t.gparen = 0x24a2;
+  t.gpasquare = 0x33ac;
+  t.gradient = 0x2207;
+  t.grave = 0x0060;
+  t.gravebelowcmb = 0x0316;
+  t.gravecmb = 0x0300;
+  t.gravecomb = 0x0300;
+  t.gravedeva = 0x0953;
+  t.gravelowmod = 0x02ce;
+  t.gravemonospace = 0xff40;
+  t.gravetonecmb = 0x0340;
+  t.greater = 0x003e;
+  t.greaterequal = 0x2265;
+  t.greaterequalorless = 0x22db;
+  t.greatermonospace = 0xff1e;
+  t.greaterorequivalent = 0x2273;
+  t.greaterorless = 0x2277;
+  t.greateroverequal = 0x2267;
+  t.greatersmall = 0xfe65;
+  t.gscript = 0x0261;
+  t.gstroke = 0x01e5;
+  t.guhiragana = 0x3050;
+  t.guillemotleft = 0x00ab;
+  t.guillemotright = 0x00bb;
+  t.guilsinglleft = 0x2039;
+  t.guilsinglright = 0x203a;
+  t.gukatakana = 0x30b0;
+  t.guramusquare = 0x3318;
+  t.gysquare = 0x33c9;
+  t.h = 0x0068;
+  t.haabkhasiancyrillic = 0x04a9;
+  t.haaltonearabic = 0x06c1;
+  t.habengali = 0x09b9;
+  t.hadescendercyrillic = 0x04b3;
+  t.hadeva = 0x0939;
+  t.hagujarati = 0x0ab9;
+  t.hagurmukhi = 0x0a39;
+  t.haharabic = 0x062d;
+  t.hahfinalarabic = 0xfea2;
+  t.hahinitialarabic = 0xfea3;
+  t.hahiragana = 0x306f;
+  t.hahmedialarabic = 0xfea4;
+  t.haitusquare = 0x332a;
+  t.hakatakana = 0x30cf;
+  t.hakatakanahalfwidth = 0xff8a;
+  t.halantgurmukhi = 0x0a4d;
+  t.hamzaarabic = 0x0621;
+  t.hamzalowarabic = 0x0621;
+  t.hangulfiller = 0x3164;
+  t.hardsigncyrillic = 0x044a;
+  t.harpoonleftbarbup = 0x21bc;
+  t.harpoonrightbarbup = 0x21c0;
+  t.hasquare = 0x33ca;
+  t.hatafpatah = 0x05b2;
+  t.hatafpatah16 = 0x05b2;
+  t.hatafpatah23 = 0x05b2;
+  t.hatafpatah2f = 0x05b2;
+  t.hatafpatahhebrew = 0x05b2;
+  t.hatafpatahnarrowhebrew = 0x05b2;
+  t.hatafpatahquarterhebrew = 0x05b2;
+  t.hatafpatahwidehebrew = 0x05b2;
+  t.hatafqamats = 0x05b3;
+  t.hatafqamats1b = 0x05b3;
+  t.hatafqamats28 = 0x05b3;
+  t.hatafqamats34 = 0x05b3;
+  t.hatafqamatshebrew = 0x05b3;
+  t.hatafqamatsnarrowhebrew = 0x05b3;
+  t.hatafqamatsquarterhebrew = 0x05b3;
+  t.hatafqamatswidehebrew = 0x05b3;
+  t.hatafsegol = 0x05b1;
+  t.hatafsegol17 = 0x05b1;
+  t.hatafsegol24 = 0x05b1;
+  t.hatafsegol30 = 0x05b1;
+  t.hatafsegolhebrew = 0x05b1;
+  t.hatafsegolnarrowhebrew = 0x05b1;
+  t.hatafsegolquarterhebrew = 0x05b1;
+  t.hatafsegolwidehebrew = 0x05b1;
+  t.hbar = 0x0127;
+  t.hbopomofo = 0x310f;
+  t.hbrevebelow = 0x1e2b;
+  t.hcedilla = 0x1e29;
+  t.hcircle = 0x24d7;
+  t.hcircumflex = 0x0125;
+  t.hdieresis = 0x1e27;
+  t.hdotaccent = 0x1e23;
+  t.hdotbelow = 0x1e25;
+  t.he = 0x05d4;
+  t.heart = 0x2665;
+  t.heartsuitblack = 0x2665;
+  t.heartsuitwhite = 0x2661;
+  t.hedagesh = 0xfb34;
+  t.hedageshhebrew = 0xfb34;
+  t.hehaltonearabic = 0x06c1;
+  t.heharabic = 0x0647;
+  t.hehebrew = 0x05d4;
+  t.hehfinalaltonearabic = 0xfba7;
+  t.hehfinalalttwoarabic = 0xfeea;
+  t.hehfinalarabic = 0xfeea;
+  t.hehhamzaabovefinalarabic = 0xfba5;
+  t.hehhamzaaboveisolatedarabic = 0xfba4;
+  t.hehinitialaltonearabic = 0xfba8;
+  t.hehinitialarabic = 0xfeeb;
+  t.hehiragana = 0x3078;
+  t.hehmedialaltonearabic = 0xfba9;
+  t.hehmedialarabic = 0xfeec;
+  t.heiseierasquare = 0x337b;
+  t.hekatakana = 0x30d8;
+  t.hekatakanahalfwidth = 0xff8d;
+  t.hekutaarusquare = 0x3336;
+  t.henghook = 0x0267;
+  t.herutusquare = 0x3339;
+  t.het = 0x05d7;
+  t.hethebrew = 0x05d7;
+  t.hhook = 0x0266;
+  t.hhooksuperior = 0x02b1;
+  t.hieuhacirclekorean = 0x327b;
+  t.hieuhaparenkorean = 0x321b;
+  t.hieuhcirclekorean = 0x326d;
+  t.hieuhkorean = 0x314e;
+  t.hieuhparenkorean = 0x320d;
+  t.hihiragana = 0x3072;
+  t.hikatakana = 0x30d2;
+  t.hikatakanahalfwidth = 0xff8b;
+  t.hiriq = 0x05b4;
+  t.hiriq14 = 0x05b4;
+  t.hiriq21 = 0x05b4;
+  t.hiriq2d = 0x05b4;
+  t.hiriqhebrew = 0x05b4;
+  t.hiriqnarrowhebrew = 0x05b4;
+  t.hiriqquarterhebrew = 0x05b4;
+  t.hiriqwidehebrew = 0x05b4;
+  t.hlinebelow = 0x1e96;
+  t.hmonospace = 0xff48;
+  t.hoarmenian = 0x0570;
+  t.hohipthai = 0x0e2b;
+  t.hohiragana = 0x307b;
+  t.hokatakana = 0x30db;
+  t.hokatakanahalfwidth = 0xff8e;
+  t.holam = 0x05b9;
+  t.holam19 = 0x05b9;
+  t.holam26 = 0x05b9;
+  t.holam32 = 0x05b9;
+  t.holamhebrew = 0x05b9;
+  t.holamnarrowhebrew = 0x05b9;
+  t.holamquarterhebrew = 0x05b9;
+  t.holamwidehebrew = 0x05b9;
+  t.honokhukthai = 0x0e2e;
+  t.hookabovecomb = 0x0309;
+  t.hookcmb = 0x0309;
+  t.hookpalatalizedbelowcmb = 0x0321;
+  t.hookretroflexbelowcmb = 0x0322;
+  t.hoonsquare = 0x3342;
+  t.horicoptic = 0x03e9;
+  t.horizontalbar = 0x2015;
+  t.horncmb = 0x031b;
+  t.hotsprings = 0x2668;
+  t.house = 0x2302;
+  t.hparen = 0x24a3;
+  t.hsuperior = 0x02b0;
+  t.hturned = 0x0265;
+  t.huhiragana = 0x3075;
+  t.huiitosquare = 0x3333;
+  t.hukatakana = 0x30d5;
+  t.hukatakanahalfwidth = 0xff8c;
+  t.hungarumlaut = 0x02dd;
+  t.hungarumlautcmb = 0x030b;
+  t.hv = 0x0195;
+  t.hyphen = 0x002d;
+  t.hypheninferior = 0xf6e5;
+  t.hyphenmonospace = 0xff0d;
+  t.hyphensmall = 0xfe63;
+  t.hyphensuperior = 0xf6e6;
+  t.hyphentwo = 0x2010;
+  t.i = 0x0069;
+  t.iacute = 0x00ed;
+  t.iacyrillic = 0x044f;
+  t.ibengali = 0x0987;
+  t.ibopomofo = 0x3127;
+  t.ibreve = 0x012d;
+  t.icaron = 0x01d0;
+  t.icircle = 0x24d8;
+  t.icircumflex = 0x00ee;
+  t.icyrillic = 0x0456;
+  t.idblgrave = 0x0209;
+  t.ideographearthcircle = 0x328f;
+  t.ideographfirecircle = 0x328b;
+  t.ideographicallianceparen = 0x323f;
+  t.ideographiccallparen = 0x323a;
+  t.ideographiccentrecircle = 0x32a5;
+  t.ideographicclose = 0x3006;
+  t.ideographiccomma = 0x3001;
+  t.ideographiccommaleft = 0xff64;
+  t.ideographiccongratulationparen = 0x3237;
+  t.ideographiccorrectcircle = 0x32a3;
+  t.ideographicearthparen = 0x322f;
+  t.ideographicenterpriseparen = 0x323d;
+  t.ideographicexcellentcircle = 0x329d;
+  t.ideographicfestivalparen = 0x3240;
+  t.ideographicfinancialcircle = 0x3296;
+  t.ideographicfinancialparen = 0x3236;
+  t.ideographicfireparen = 0x322b;
+  t.ideographichaveparen = 0x3232;
+  t.ideographichighcircle = 0x32a4;
+  t.ideographiciterationmark = 0x3005;
+  t.ideographiclaborcircle = 0x3298;
+  t.ideographiclaborparen = 0x3238;
+  t.ideographicleftcircle = 0x32a7;
+  t.ideographiclowcircle = 0x32a6;
+  t.ideographicmedicinecircle = 0x32a9;
+  t.ideographicmetalparen = 0x322e;
+  t.ideographicmoonparen = 0x322a;
+  t.ideographicnameparen = 0x3234;
+  t.ideographicperiod = 0x3002;
+  t.ideographicprintcircle = 0x329e;
+  t.ideographicreachparen = 0x3243;
+  t.ideographicrepresentparen = 0x3239;
+  t.ideographicresourceparen = 0x323e;
+  t.ideographicrightcircle = 0x32a8;
+  t.ideographicsecretcircle = 0x3299;
+  t.ideographicselfparen = 0x3242;
+  t.ideographicsocietyparen = 0x3233;
+  t.ideographicspace = 0x3000;
+  t.ideographicspecialparen = 0x3235;
+  t.ideographicstockparen = 0x3231;
+  t.ideographicstudyparen = 0x323b;
+  t.ideographicsunparen = 0x3230;
+  t.ideographicsuperviseparen = 0x323c;
+  t.ideographicwaterparen = 0x322c;
+  t.ideographicwoodparen = 0x322d;
+  t.ideographiczero = 0x3007;
+  t.ideographmetalcircle = 0x328e;
+  t.ideographmooncircle = 0x328a;
+  t.ideographnamecircle = 0x3294;
+  t.ideographsuncircle = 0x3290;
+  t.ideographwatercircle = 0x328c;
+  t.ideographwoodcircle = 0x328d;
+  t.ideva = 0x0907;
+  t.idieresis = 0x00ef;
+  t.idieresisacute = 0x1e2f;
+  t.idieresiscyrillic = 0x04e5;
+  t.idotbelow = 0x1ecb;
+  t.iebrevecyrillic = 0x04d7;
+  t.iecyrillic = 0x0435;
+  t.ieungacirclekorean = 0x3275;
+  t.ieungaparenkorean = 0x3215;
+  t.ieungcirclekorean = 0x3267;
+  t.ieungkorean = 0x3147;
+  t.ieungparenkorean = 0x3207;
+  t.igrave = 0x00ec;
+  t.igujarati = 0x0a87;
+  t.igurmukhi = 0x0a07;
+  t.ihiragana = 0x3044;
+  t.ihookabove = 0x1ec9;
+  t.iibengali = 0x0988;
+  t.iicyrillic = 0x0438;
+  t.iideva = 0x0908;
+  t.iigujarati = 0x0a88;
+  t.iigurmukhi = 0x0a08;
+  t.iimatragurmukhi = 0x0a40;
+  t.iinvertedbreve = 0x020b;
+  t.iishortcyrillic = 0x0439;
+  t.iivowelsignbengali = 0x09c0;
+  t.iivowelsigndeva = 0x0940;
+  t.iivowelsigngujarati = 0x0ac0;
+  t.ij = 0x0133;
+  t.ikatakana = 0x30a4;
+  t.ikatakanahalfwidth = 0xff72;
+  t.ikorean = 0x3163;
+  t.ilde = 0x02dc;
+  t.iluyhebrew = 0x05ac;
+  t.imacron = 0x012b;
+  t.imacroncyrillic = 0x04e3;
+  t.imageorapproximatelyequal = 0x2253;
+  t.imatragurmukhi = 0x0a3f;
+  t.imonospace = 0xff49;
+  t.increment = 0x2206;
+  t.infinity = 0x221e;
+  t.iniarmenian = 0x056b;
+  t.integral = 0x222b;
+  t.integralbottom = 0x2321;
+  t.integralbt = 0x2321;
+  t.integralex = 0xf8f5;
+  t.integraltop = 0x2320;
+  t.integraltp = 0x2320;
+  t.intersection = 0x2229;
+  t.intisquare = 0x3305;
+  t.invbullet = 0x25d8;
+  t.invcircle = 0x25d9;
+  t.invsmileface = 0x263b;
+  t.iocyrillic = 0x0451;
+  t.iogonek = 0x012f;
+  t.iota = 0x03b9;
+  t.iotadieresis = 0x03ca;
+  t.iotadieresistonos = 0x0390;
+  t.iotalatin = 0x0269;
+  t.iotatonos = 0x03af;
+  t.iparen = 0x24a4;
+  t.irigurmukhi = 0x0a72;
+  t.ismallhiragana = 0x3043;
+  t.ismallkatakana = 0x30a3;
+  t.ismallkatakanahalfwidth = 0xff68;
+  t.issharbengali = 0x09fa;
+  t.istroke = 0x0268;
+  t.isuperior = 0xf6ed;
+  t.iterationhiragana = 0x309d;
+  t.iterationkatakana = 0x30fd;
+  t.itilde = 0x0129;
+  t.itildebelow = 0x1e2d;
+  t.iubopomofo = 0x3129;
+  t.iucyrillic = 0x044e;
+  t.ivowelsignbengali = 0x09bf;
+  t.ivowelsigndeva = 0x093f;
+  t.ivowelsigngujarati = 0x0abf;
+  t.izhitsacyrillic = 0x0475;
+  t.izhitsadblgravecyrillic = 0x0477;
+  t.j = 0x006a;
+  t.jaarmenian = 0x0571;
+  t.jabengali = 0x099c;
+  t.jadeva = 0x091c;
+  t.jagujarati = 0x0a9c;
+  t.jagurmukhi = 0x0a1c;
+  t.jbopomofo = 0x3110;
+  t.jcaron = 0x01f0;
+  t.jcircle = 0x24d9;
+  t.jcircumflex = 0x0135;
+  t.jcrossedtail = 0x029d;
+  t.jdotlessstroke = 0x025f;
+  t.jecyrillic = 0x0458;
+  t.jeemarabic = 0x062c;
+  t.jeemfinalarabic = 0xfe9e;
+  t.jeeminitialarabic = 0xfe9f;
+  t.jeemmedialarabic = 0xfea0;
+  t.jeharabic = 0x0698;
+  t.jehfinalarabic = 0xfb8b;
+  t.jhabengali = 0x099d;
+  t.jhadeva = 0x091d;
+  t.jhagujarati = 0x0a9d;
+  t.jhagurmukhi = 0x0a1d;
+  t.jheharmenian = 0x057b;
+  t.jis = 0x3004;
+  t.jmonospace = 0xff4a;
+  t.jparen = 0x24a5;
+  t.jsuperior = 0x02b2;
+  t.k = 0x006b;
+  t.kabashkircyrillic = 0x04a1;
+  t.kabengali = 0x0995;
+  t.kacute = 0x1e31;
+  t.kacyrillic = 0x043a;
+  t.kadescendercyrillic = 0x049b;
+  t.kadeva = 0x0915;
+  t.kaf = 0x05db;
+  t.kafarabic = 0x0643;
+  t.kafdagesh = 0xfb3b;
+  t.kafdageshhebrew = 0xfb3b;
+  t.kaffinalarabic = 0xfeda;
+  t.kafhebrew = 0x05db;
+  t.kafinitialarabic = 0xfedb;
+  t.kafmedialarabic = 0xfedc;
+  t.kafrafehebrew = 0xfb4d;
+  t.kagujarati = 0x0a95;
+  t.kagurmukhi = 0x0a15;
+  t.kahiragana = 0x304b;
+  t.kahookcyrillic = 0x04c4;
+  t.kakatakana = 0x30ab;
+  t.kakatakanahalfwidth = 0xff76;
+  t.kappa = 0x03ba;
+  t.kappasymbolgreek = 0x03f0;
+  t.kapyeounmieumkorean = 0x3171;
+  t.kapyeounphieuphkorean = 0x3184;
+  t.kapyeounpieupkorean = 0x3178;
+  t.kapyeounssangpieupkorean = 0x3179;
+  t.karoriisquare = 0x330d;
+  t.kashidaautoarabic = 0x0640;
+  t.kashidaautonosidebearingarabic = 0x0640;
+  t.kasmallkatakana = 0x30f5;
+  t.kasquare = 0x3384;
+  t.kasraarabic = 0x0650;
+  t.kasratanarabic = 0x064d;
+  t.kastrokecyrillic = 0x049f;
+  t.katahiraprolongmarkhalfwidth = 0xff70;
+  t.kaverticalstrokecyrillic = 0x049d;
+  t.kbopomofo = 0x310e;
+  t.kcalsquare = 0x3389;
+  t.kcaron = 0x01e9;
+  t.kcedilla = 0x0137;
+  t.kcircle = 0x24da;
+  t.kcommaaccent = 0x0137;
+  t.kdotbelow = 0x1e33;
+  t.keharmenian = 0x0584;
+  t.kehiragana = 0x3051;
+  t.kekatakana = 0x30b1;
+  t.kekatakanahalfwidth = 0xff79;
+  t.kenarmenian = 0x056f;
+  t.kesmallkatakana = 0x30f6;
+  t.kgreenlandic = 0x0138;
+  t.khabengali = 0x0996;
+  t.khacyrillic = 0x0445;
+  t.khadeva = 0x0916;
+  t.khagujarati = 0x0a96;
+  t.khagurmukhi = 0x0a16;
+  t.khaharabic = 0x062e;
+  t.khahfinalarabic = 0xfea6;
+  t.khahinitialarabic = 0xfea7;
+  t.khahmedialarabic = 0xfea8;
+  t.kheicoptic = 0x03e7;
+  t.khhadeva = 0x0959;
+  t.khhagurmukhi = 0x0a59;
+  t.khieukhacirclekorean = 0x3278;
+  t.khieukhaparenkorean = 0x3218;
+  t.khieukhcirclekorean = 0x326a;
+  t.khieukhkorean = 0x314b;
+  t.khieukhparenkorean = 0x320a;
+  t.khokhaithai = 0x0e02;
+  t.khokhonthai = 0x0e05;
+  t.khokhuatthai = 0x0e03;
+  t.khokhwaithai = 0x0e04;
+  t.khomutthai = 0x0e5b;
+  t.khook = 0x0199;
+  t.khorakhangthai = 0x0e06;
+  t.khzsquare = 0x3391;
+  t.kihiragana = 0x304d;
+  t.kikatakana = 0x30ad;
+  t.kikatakanahalfwidth = 0xff77;
+  t.kiroguramusquare = 0x3315;
+  t.kiromeetorusquare = 0x3316;
+  t.kirosquare = 0x3314;
+  t.kiyeokacirclekorean = 0x326e;
+  t.kiyeokaparenkorean = 0x320e;
+  t.kiyeokcirclekorean = 0x3260;
+  t.kiyeokkorean = 0x3131;
+  t.kiyeokparenkorean = 0x3200;
+  t.kiyeoksioskorean = 0x3133;
+  t.kjecyrillic = 0x045c;
+  t.klinebelow = 0x1e35;
+  t.klsquare = 0x3398;
+  t.kmcubedsquare = 0x33a6;
+  t.kmonospace = 0xff4b;
+  t.kmsquaredsquare = 0x33a2;
+  t.kohiragana = 0x3053;
+  t.kohmsquare = 0x33c0;
+  t.kokaithai = 0x0e01;
+  t.kokatakana = 0x30b3;
+  t.kokatakanahalfwidth = 0xff7a;
+  t.kooposquare = 0x331e;
+  t.koppacyrillic = 0x0481;
+  t.koreanstandardsymbol = 0x327f;
+  t.koroniscmb = 0x0343;
+  t.kparen = 0x24a6;
+  t.kpasquare = 0x33aa;
+  t.ksicyrillic = 0x046f;
+  t.ktsquare = 0x33cf;
+  t.kturned = 0x029e;
+  t.kuhiragana = 0x304f;
+  t.kukatakana = 0x30af;
+  t.kukatakanahalfwidth = 0xff78;
+  t.kvsquare = 0x33b8;
+  t.kwsquare = 0x33be;
+  t.l = 0x006c;
+  t.labengali = 0x09b2;
+  t.lacute = 0x013a;
+  t.ladeva = 0x0932;
+  t.lagujarati = 0x0ab2;
+  t.lagurmukhi = 0x0a32;
+  t.lakkhangyaothai = 0x0e45;
+  t.lamaleffinalarabic = 0xfefc;
+  t.lamalefhamzaabovefinalarabic = 0xfef8;
+  t.lamalefhamzaaboveisolatedarabic = 0xfef7;
+  t.lamalefhamzabelowfinalarabic = 0xfefa;
+  t.lamalefhamzabelowisolatedarabic = 0xfef9;
+  t.lamalefisolatedarabic = 0xfefb;
+  t.lamalefmaddaabovefinalarabic = 0xfef6;
+  t.lamalefmaddaaboveisolatedarabic = 0xfef5;
+  t.lamarabic = 0x0644;
+  t.lambda = 0x03bb;
+  t.lambdastroke = 0x019b;
+  t.lamed = 0x05dc;
+  t.lameddagesh = 0xfb3c;
+  t.lameddageshhebrew = 0xfb3c;
+  t.lamedhebrew = 0x05dc;
+  t.lamfinalarabic = 0xfede;
+  t.lamhahinitialarabic = 0xfcca;
+  t.laminitialarabic = 0xfedf;
+  t.lamjeeminitialarabic = 0xfcc9;
+  t.lamkhahinitialarabic = 0xfccb;
+  t.lamlamhehisolatedarabic = 0xfdf2;
+  t.lammedialarabic = 0xfee0;
+  t.lammeemhahinitialarabic = 0xfd88;
+  t.lammeeminitialarabic = 0xfccc;
+  t.largecircle = 0x25ef;
+  t.lbar = 0x019a;
+  t.lbelt = 0x026c;
+  t.lbopomofo = 0x310c;
+  t.lcaron = 0x013e;
+  t.lcedilla = 0x013c;
+  t.lcircle = 0x24db;
+  t.lcircumflexbelow = 0x1e3d;
+  t.lcommaaccent = 0x013c;
+  t.ldot = 0x0140;
+  t.ldotaccent = 0x0140;
+  t.ldotbelow = 0x1e37;
+  t.ldotbelowmacron = 0x1e39;
+  t.leftangleabovecmb = 0x031a;
+  t.lefttackbelowcmb = 0x0318;
+  t.less = 0x003c;
+  t.lessequal = 0x2264;
+  t.lessequalorgreater = 0x22da;
+  t.lessmonospace = 0xff1c;
+  t.lessorequivalent = 0x2272;
+  t.lessorgreater = 0x2276;
+  t.lessoverequal = 0x2266;
+  t.lesssmall = 0xfe64;
+  t.lezh = 0x026e;
+  t.lfblock = 0x258c;
+  t.lhookretroflex = 0x026d;
+  t.lira = 0x20a4;
+  t.liwnarmenian = 0x056c;
+  t.lj = 0x01c9;
+  t.ljecyrillic = 0x0459;
+  t.ll = 0xf6c0;
+  t.lladeva = 0x0933;
+  t.llagujarati = 0x0ab3;
+  t.llinebelow = 0x1e3b;
+  t.llladeva = 0x0934;
+  t.llvocalicbengali = 0x09e1;
+  t.llvocalicdeva = 0x0961;
+  t.llvocalicvowelsignbengali = 0x09e3;
+  t.llvocalicvowelsigndeva = 0x0963;
+  t.lmiddletilde = 0x026b;
+  t.lmonospace = 0xff4c;
+  t.lmsquare = 0x33d0;
+  t.lochulathai = 0x0e2c;
+  t.logicaland = 0x2227;
+  t.logicalnot = 0x00ac;
+  t.logicalnotreversed = 0x2310;
+  t.logicalor = 0x2228;
+  t.lolingthai = 0x0e25;
+  t.longs = 0x017f;
+  t.lowlinecenterline = 0xfe4e;
+  t.lowlinecmb = 0x0332;
+  t.lowlinedashed = 0xfe4d;
+  t.lozenge = 0x25ca;
+  t.lparen = 0x24a7;
+  t.lslash = 0x0142;
+  t.lsquare = 0x2113;
+  t.lsuperior = 0xf6ee;
+  t.ltshade = 0x2591;
+  t.luthai = 0x0e26;
+  t.lvocalicbengali = 0x098c;
+  t.lvocalicdeva = 0x090c;
+  t.lvocalicvowelsignbengali = 0x09e2;
+  t.lvocalicvowelsigndeva = 0x0962;
+  t.lxsquare = 0x33d3;
+  t.m = 0x006d;
+  t.mabengali = 0x09ae;
+  t.macron = 0x00af;
+  t.macronbelowcmb = 0x0331;
+  t.macroncmb = 0x0304;
+  t.macronlowmod = 0x02cd;
+  t.macronmonospace = 0xffe3;
+  t.macute = 0x1e3f;
+  t.madeva = 0x092e;
+  t.magujarati = 0x0aae;
+  t.magurmukhi = 0x0a2e;
+  t.mahapakhhebrew = 0x05a4;
+  t.mahapakhlefthebrew = 0x05a4;
+  t.mahiragana = 0x307e;
+  t.maichattawalowleftthai = 0xf895;
+  t.maichattawalowrightthai = 0xf894;
+  t.maichattawathai = 0x0e4b;
+  t.maichattawaupperleftthai = 0xf893;
+  t.maieklowleftthai = 0xf88c;
+  t.maieklowrightthai = 0xf88b;
+  t.maiekthai = 0x0e48;
+  t.maiekupperleftthai = 0xf88a;
+  t.maihanakatleftthai = 0xf884;
+  t.maihanakatthai = 0x0e31;
+  t.maitaikhuleftthai = 0xf889;
+  t.maitaikhuthai = 0x0e47;
+  t.maitholowleftthai = 0xf88f;
+  t.maitholowrightthai = 0xf88e;
+  t.maithothai = 0x0e49;
+  t.maithoupperleftthai = 0xf88d;
+  t.maitrilowleftthai = 0xf892;
+  t.maitrilowrightthai = 0xf891;
+  t.maitrithai = 0x0e4a;
+  t.maitriupperleftthai = 0xf890;
+  t.maiyamokthai = 0x0e46;
+  t.makatakana = 0x30de;
+  t.makatakanahalfwidth = 0xff8f;
+  t.male = 0x2642;
+  t.mansyonsquare = 0x3347;
+  t.maqafhebrew = 0x05be;
+  t.mars = 0x2642;
+  t.masoracirclehebrew = 0x05af;
+  t.masquare = 0x3383;
+  t.mbopomofo = 0x3107;
+  t.mbsquare = 0x33d4;
+  t.mcircle = 0x24dc;
+  t.mcubedsquare = 0x33a5;
+  t.mdotaccent = 0x1e41;
+  t.mdotbelow = 0x1e43;
+  t.meemarabic = 0x0645;
+  t.meemfinalarabic = 0xfee2;
+  t.meeminitialarabic = 0xfee3;
+  t.meemmedialarabic = 0xfee4;
+  t.meemmeeminitialarabic = 0xfcd1;
+  t.meemmeemisolatedarabic = 0xfc48;
+  t.meetorusquare = 0x334d;
+  t.mehiragana = 0x3081;
+  t.meizierasquare = 0x337e;
+  t.mekatakana = 0x30e1;
+  t.mekatakanahalfwidth = 0xff92;
+  t.mem = 0x05de;
+  t.memdagesh = 0xfb3e;
+  t.memdageshhebrew = 0xfb3e;
+  t.memhebrew = 0x05de;
+  t.menarmenian = 0x0574;
+  t.merkhahebrew = 0x05a5;
+  t.merkhakefulahebrew = 0x05a6;
+  t.merkhakefulalefthebrew = 0x05a6;
+  t.merkhalefthebrew = 0x05a5;
+  t.mhook = 0x0271;
+  t.mhzsquare = 0x3392;
+  t.middledotkatakanahalfwidth = 0xff65;
+  t.middot = 0x00b7;
+  t.mieumacirclekorean = 0x3272;
+  t.mieumaparenkorean = 0x3212;
+  t.mieumcirclekorean = 0x3264;
+  t.mieumkorean = 0x3141;
+  t.mieumpansioskorean = 0x3170;
+  t.mieumparenkorean = 0x3204;
+  t.mieumpieupkorean = 0x316e;
+  t.mieumsioskorean = 0x316f;
+  t.mihiragana = 0x307f;
+  t.mikatakana = 0x30df;
+  t.mikatakanahalfwidth = 0xff90;
+  t.minus = 0x2212;
+  t.minusbelowcmb = 0x0320;
+  t.minuscircle = 0x2296;
+  t.minusmod = 0x02d7;
+  t.minusplus = 0x2213;
+  t.minute = 0x2032;
+  t.miribaarusquare = 0x334a;
+  t.mirisquare = 0x3349;
+  t.mlonglegturned = 0x0270;
+  t.mlsquare = 0x3396;
+  t.mmcubedsquare = 0x33a3;
+  t.mmonospace = 0xff4d;
+  t.mmsquaredsquare = 0x339f;
+  t.mohiragana = 0x3082;
+  t.mohmsquare = 0x33c1;
+  t.mokatakana = 0x30e2;
+  t.mokatakanahalfwidth = 0xff93;
+  t.molsquare = 0x33d6;
+  t.momathai = 0x0e21;
+  t.moverssquare = 0x33a7;
+  t.moverssquaredsquare = 0x33a8;
+  t.mparen = 0x24a8;
+  t.mpasquare = 0x33ab;
+  t.mssquare = 0x33b3;
+  t.msuperior = 0xf6ef;
+  t.mturned = 0x026f;
+  t.mu = 0x00b5;
+  t.mu1 = 0x00b5;
+  t.muasquare = 0x3382;
+  t.muchgreater = 0x226b;
+  t.muchless = 0x226a;
+  t.mufsquare = 0x338c;
+  t.mugreek = 0x03bc;
+  t.mugsquare = 0x338d;
+  t.muhiragana = 0x3080;
+  t.mukatakana = 0x30e0;
+  t.mukatakanahalfwidth = 0xff91;
+  t.mulsquare = 0x3395;
+  t.multiply = 0x00d7;
+  t.mumsquare = 0x339b;
+  t.munahhebrew = 0x05a3;
+  t.munahlefthebrew = 0x05a3;
+  t.musicalnote = 0x266a;
+  t.musicalnotedbl = 0x266b;
+  t.musicflatsign = 0x266d;
+  t.musicsharpsign = 0x266f;
+  t.mussquare = 0x33b2;
+  t.muvsquare = 0x33b6;
+  t.muwsquare = 0x33bc;
+  t.mvmegasquare = 0x33b9;
+  t.mvsquare = 0x33b7;
+  t.mwmegasquare = 0x33bf;
+  t.mwsquare = 0x33bd;
+  t.n = 0x006e;
+  t.nabengali = 0x09a8;
+  t.nabla = 0x2207;
+  t.nacute = 0x0144;
+  t.nadeva = 0x0928;
+  t.nagujarati = 0x0aa8;
+  t.nagurmukhi = 0x0a28;
+  t.nahiragana = 0x306a;
+  t.nakatakana = 0x30ca;
+  t.nakatakanahalfwidth = 0xff85;
+  t.napostrophe = 0x0149;
+  t.nasquare = 0x3381;
+  t.nbopomofo = 0x310b;
+  t.nbspace = 0x00a0;
+  t.ncaron = 0x0148;
+  t.ncedilla = 0x0146;
+  t.ncircle = 0x24dd;
+  t.ncircumflexbelow = 0x1e4b;
+  t.ncommaaccent = 0x0146;
+  t.ndotaccent = 0x1e45;
+  t.ndotbelow = 0x1e47;
+  t.nehiragana = 0x306d;
+  t.nekatakana = 0x30cd;
+  t.nekatakanahalfwidth = 0xff88;
+  t.newsheqelsign = 0x20aa;
+  t.nfsquare = 0x338b;
+  t.ngabengali = 0x0999;
+  t.ngadeva = 0x0919;
+  t.ngagujarati = 0x0a99;
+  t.ngagurmukhi = 0x0a19;
+  t.ngonguthai = 0x0e07;
+  t.nhiragana = 0x3093;
+  t.nhookleft = 0x0272;
+  t.nhookretroflex = 0x0273;
+  t.nieunacirclekorean = 0x326f;
+  t.nieunaparenkorean = 0x320f;
+  t.nieuncieuckorean = 0x3135;
+  t.nieuncirclekorean = 0x3261;
+  t.nieunhieuhkorean = 0x3136;
+  t.nieunkorean = 0x3134;
+  t.nieunpansioskorean = 0x3168;
+  t.nieunparenkorean = 0x3201;
+  t.nieunsioskorean = 0x3167;
+  t.nieuntikeutkorean = 0x3166;
+  t.nihiragana = 0x306b;
+  t.nikatakana = 0x30cb;
+  t.nikatakanahalfwidth = 0xff86;
+  t.nikhahitleftthai = 0xf899;
+  t.nikhahitthai = 0x0e4d;
+  t.nine = 0x0039;
+  t.ninearabic = 0x0669;
+  t.ninebengali = 0x09ef;
+  t.ninecircle = 0x2468;
+  t.ninecircleinversesansserif = 0x2792;
+  t.ninedeva = 0x096f;
+  t.ninegujarati = 0x0aef;
+  t.ninegurmukhi = 0x0a6f;
+  t.ninehackarabic = 0x0669;
+  t.ninehangzhou = 0x3029;
+  t.nineideographicparen = 0x3228;
+  t.nineinferior = 0x2089;
+  t.ninemonospace = 0xff19;
+  t.nineoldstyle = 0xf739;
+  t.nineparen = 0x247c;
+  t.nineperiod = 0x2490;
+  t.ninepersian = 0x06f9;
+  t.nineroman = 0x2178;
+  t.ninesuperior = 0x2079;
+  t.nineteencircle = 0x2472;
+  t.nineteenparen = 0x2486;
+  t.nineteenperiod = 0x249a;
+  t.ninethai = 0x0e59;
+  t.nj = 0x01cc;
+  t.njecyrillic = 0x045a;
+  t.nkatakana = 0x30f3;
+  t.nkatakanahalfwidth = 0xff9d;
+  t.nlegrightlong = 0x019e;
+  t.nlinebelow = 0x1e49;
+  t.nmonospace = 0xff4e;
+  t.nmsquare = 0x339a;
+  t.nnabengali = 0x09a3;
+  t.nnadeva = 0x0923;
+  t.nnagujarati = 0x0aa3;
+  t.nnagurmukhi = 0x0a23;
+  t.nnnadeva = 0x0929;
+  t.nohiragana = 0x306e;
+  t.nokatakana = 0x30ce;
+  t.nokatakanahalfwidth = 0xff89;
+  t.nonbreakingspace = 0x00a0;
+  t.nonenthai = 0x0e13;
+  t.nonuthai = 0x0e19;
+  t.noonarabic = 0x0646;
+  t.noonfinalarabic = 0xfee6;
+  t.noonghunnaarabic = 0x06ba;
+  t.noonghunnafinalarabic = 0xfb9f;
+  t.nooninitialarabic = 0xfee7;
+  t.noonjeeminitialarabic = 0xfcd2;
+  t.noonjeemisolatedarabic = 0xfc4b;
+  t.noonmedialarabic = 0xfee8;
+  t.noonmeeminitialarabic = 0xfcd5;
+  t.noonmeemisolatedarabic = 0xfc4e;
+  t.noonnoonfinalarabic = 0xfc8d;
+  t.notcontains = 0x220c;
+  t.notelement = 0x2209;
+  t.notelementof = 0x2209;
+  t.notequal = 0x2260;
+  t.notgreater = 0x226f;
+  t.notgreaternorequal = 0x2271;
+  t.notgreaternorless = 0x2279;
+  t.notidentical = 0x2262;
+  t.notless = 0x226e;
+  t.notlessnorequal = 0x2270;
+  t.notparallel = 0x2226;
+  t.notprecedes = 0x2280;
+  t.notsubset = 0x2284;
+  t.notsucceeds = 0x2281;
+  t.notsuperset = 0x2285;
+  t.nowarmenian = 0x0576;
+  t.nparen = 0x24a9;
+  t.nssquare = 0x33b1;
+  t.nsuperior = 0x207f;
+  t.ntilde = 0x00f1;
+  t.nu = 0x03bd;
+  t.nuhiragana = 0x306c;
+  t.nukatakana = 0x30cc;
+  t.nukatakanahalfwidth = 0xff87;
+  t.nuktabengali = 0x09bc;
+  t.nuktadeva = 0x093c;
+  t.nuktagujarati = 0x0abc;
+  t.nuktagurmukhi = 0x0a3c;
+  t.numbersign = 0x0023;
+  t.numbersignmonospace = 0xff03;
+  t.numbersignsmall = 0xfe5f;
+  t.numeralsigngreek = 0x0374;
+  t.numeralsignlowergreek = 0x0375;
+  t.numero = 0x2116;
+  t.nun = 0x05e0;
+  t.nundagesh = 0xfb40;
+  t.nundageshhebrew = 0xfb40;
+  t.nunhebrew = 0x05e0;
+  t.nvsquare = 0x33b5;
+  t.nwsquare = 0x33bb;
+  t.nyabengali = 0x099e;
+  t.nyadeva = 0x091e;
+  t.nyagujarati = 0x0a9e;
+  t.nyagurmukhi = 0x0a1e;
+  t.o = 0x006f;
+  t.oacute = 0x00f3;
+  t.oangthai = 0x0e2d;
+  t.obarred = 0x0275;
+  t.obarredcyrillic = 0x04e9;
+  t.obarreddieresiscyrillic = 0x04eb;
+  t.obengali = 0x0993;
+  t.obopomofo = 0x311b;
+  t.obreve = 0x014f;
+  t.ocandradeva = 0x0911;
+  t.ocandragujarati = 0x0a91;
+  t.ocandravowelsigndeva = 0x0949;
+  t.ocandravowelsigngujarati = 0x0ac9;
+  t.ocaron = 0x01d2;
+  t.ocircle = 0x24de;
+  t.ocircumflex = 0x00f4;
+  t.ocircumflexacute = 0x1ed1;
+  t.ocircumflexdotbelow = 0x1ed9;
+  t.ocircumflexgrave = 0x1ed3;
+  t.ocircumflexhookabove = 0x1ed5;
+  t.ocircumflextilde = 0x1ed7;
+  t.ocyrillic = 0x043e;
+  t.odblacute = 0x0151;
+  t.odblgrave = 0x020d;
+  t.odeva = 0x0913;
+  t.odieresis = 0x00f6;
+  t.odieresiscyrillic = 0x04e7;
+  t.odotbelow = 0x1ecd;
+  t.oe = 0x0153;
+  t.oekorean = 0x315a;
+  t.ogonek = 0x02db;
+  t.ogonekcmb = 0x0328;
+  t.ograve = 0x00f2;
+  t.ogujarati = 0x0a93;
+  t.oharmenian = 0x0585;
+  t.ohiragana = 0x304a;
+  t.ohookabove = 0x1ecf;
+  t.ohorn = 0x01a1;
+  t.ohornacute = 0x1edb;
+  t.ohorndotbelow = 0x1ee3;
+  t.ohorngrave = 0x1edd;
+  t.ohornhookabove = 0x1edf;
+  t.ohorntilde = 0x1ee1;
+  t.ohungarumlaut = 0x0151;
+  t.oi = 0x01a3;
+  t.oinvertedbreve = 0x020f;
+  t.okatakana = 0x30aa;
+  t.okatakanahalfwidth = 0xff75;
+  t.okorean = 0x3157;
+  t.olehebrew = 0x05ab;
+  t.omacron = 0x014d;
+  t.omacronacute = 0x1e53;
+  t.omacrongrave = 0x1e51;
+  t.omdeva = 0x0950;
+  t.omega = 0x03c9;
+  t.omega1 = 0x03d6;
+  t.omegacyrillic = 0x0461;
+  t.omegalatinclosed = 0x0277;
+  t.omegaroundcyrillic = 0x047b;
+  t.omegatitlocyrillic = 0x047d;
+  t.omegatonos = 0x03ce;
+  t.omgujarati = 0x0ad0;
+  t.omicron = 0x03bf;
+  t.omicrontonos = 0x03cc;
+  t.omonospace = 0xff4f;
+  t.one = 0x0031;
+  t.onearabic = 0x0661;
+  t.onebengali = 0x09e7;
+  t.onecircle = 0x2460;
+  t.onecircleinversesansserif = 0x278a;
+  t.onedeva = 0x0967;
+  t.onedotenleader = 0x2024;
+  t.oneeighth = 0x215b;
+  t.onefitted = 0xf6dc;
+  t.onegujarati = 0x0ae7;
+  t.onegurmukhi = 0x0a67;
+  t.onehackarabic = 0x0661;
+  t.onehalf = 0x00bd;
+  t.onehangzhou = 0x3021;
+  t.oneideographicparen = 0x3220;
+  t.oneinferior = 0x2081;
+  t.onemonospace = 0xff11;
+  t.onenumeratorbengali = 0x09f4;
+  t.oneoldstyle = 0xf731;
+  t.oneparen = 0x2474;
+  t.oneperiod = 0x2488;
+  t.onepersian = 0x06f1;
+  t.onequarter = 0x00bc;
+  t.oneroman = 0x2170;
+  t.onesuperior = 0x00b9;
+  t.onethai = 0x0e51;
+  t.onethird = 0x2153;
+  t.oogonek = 0x01eb;
+  t.oogonekmacron = 0x01ed;
+  t.oogurmukhi = 0x0a13;
+  t.oomatragurmukhi = 0x0a4b;
+  t.oopen = 0x0254;
+  t.oparen = 0x24aa;
+  t.openbullet = 0x25e6;
+  t.option = 0x2325;
+  t.ordfeminine = 0x00aa;
+  t.ordmasculine = 0x00ba;
+  t.orthogonal = 0x221f;
+  t.oshortdeva = 0x0912;
+  t.oshortvowelsigndeva = 0x094a;
+  t.oslash = 0x00f8;
+  t.oslashacute = 0x01ff;
+  t.osmallhiragana = 0x3049;
+  t.osmallkatakana = 0x30a9;
+  t.osmallkatakanahalfwidth = 0xff6b;
+  t.ostrokeacute = 0x01ff;
+  t.osuperior = 0xf6f0;
+  t.otcyrillic = 0x047f;
+  t.otilde = 0x00f5;
+  t.otildeacute = 0x1e4d;
+  t.otildedieresis = 0x1e4f;
+  t.oubopomofo = 0x3121;
+  t.overline = 0x203e;
+  t.overlinecenterline = 0xfe4a;
+  t.overlinecmb = 0x0305;
+  t.overlinedashed = 0xfe49;
+  t.overlinedblwavy = 0xfe4c;
+  t.overlinewavy = 0xfe4b;
+  t.overscore = 0x00af;
+  t.ovowelsignbengali = 0x09cb;
+  t.ovowelsigndeva = 0x094b;
+  t.ovowelsigngujarati = 0x0acb;
+  t.p = 0x0070;
+  t.paampssquare = 0x3380;
+  t.paasentosquare = 0x332b;
+  t.pabengali = 0x09aa;
+  t.pacute = 0x1e55;
+  t.padeva = 0x092a;
+  t.pagedown = 0x21df;
+  t.pageup = 0x21de;
+  t.pagujarati = 0x0aaa;
+  t.pagurmukhi = 0x0a2a;
+  t.pahiragana = 0x3071;
+  t.paiyannoithai = 0x0e2f;
+  t.pakatakana = 0x30d1;
+  t.palatalizationcyrilliccmb = 0x0484;
+  t.palochkacyrillic = 0x04c0;
+  t.pansioskorean = 0x317f;
+  t.paragraph = 0x00b6;
+  t.parallel = 0x2225;
+  t.parenleft = 0x0028;
+  t.parenleftaltonearabic = 0xfd3e;
+  t.parenleftbt = 0xf8ed;
+  t.parenleftex = 0xf8ec;
+  t.parenleftinferior = 0x208d;
+  t.parenleftmonospace = 0xff08;
+  t.parenleftsmall = 0xfe59;
+  t.parenleftsuperior = 0x207d;
+  t.parenlefttp = 0xf8eb;
+  t.parenleftvertical = 0xfe35;
+  t.parenright = 0x0029;
+  t.parenrightaltonearabic = 0xfd3f;
+  t.parenrightbt = 0xf8f8;
+  t.parenrightex = 0xf8f7;
+  t.parenrightinferior = 0x208e;
+  t.parenrightmonospace = 0xff09;
+  t.parenrightsmall = 0xfe5a;
+  t.parenrightsuperior = 0x207e;
+  t.parenrighttp = 0xf8f6;
+  t.parenrightvertical = 0xfe36;
+  t.partialdiff = 0x2202;
+  t.paseqhebrew = 0x05c0;
+  t.pashtahebrew = 0x0599;
+  t.pasquare = 0x33a9;
+  t.patah = 0x05b7;
+  t.patah11 = 0x05b7;
+  t.patah1d = 0x05b7;
+  t.patah2a = 0x05b7;
+  t.patahhebrew = 0x05b7;
+  t.patahnarrowhebrew = 0x05b7;
+  t.patahquarterhebrew = 0x05b7;
+  t.patahwidehebrew = 0x05b7;
+  t.pazerhebrew = 0x05a1;
+  t.pbopomofo = 0x3106;
+  t.pcircle = 0x24df;
+  t.pdotaccent = 0x1e57;
+  t.pe = 0x05e4;
+  t.pecyrillic = 0x043f;
+  t.pedagesh = 0xfb44;
+  t.pedageshhebrew = 0xfb44;
+  t.peezisquare = 0x333b;
+  t.pefinaldageshhebrew = 0xfb43;
+  t.peharabic = 0x067e;
+  t.peharmenian = 0x057a;
+  t.pehebrew = 0x05e4;
+  t.pehfinalarabic = 0xfb57;
+  t.pehinitialarabic = 0xfb58;
+  t.pehiragana = 0x307a;
+  t.pehmedialarabic = 0xfb59;
+  t.pekatakana = 0x30da;
+  t.pemiddlehookcyrillic = 0x04a7;
+  t.perafehebrew = 0xfb4e;
+  t.percent = 0x0025;
+  t.percentarabic = 0x066a;
+  t.percentmonospace = 0xff05;
+  t.percentsmall = 0xfe6a;
+  t.period = 0x002e;
+  t.periodarmenian = 0x0589;
+  t.periodcentered = 0x00b7;
+  t.periodhalfwidth = 0xff61;
+  t.periodinferior = 0xf6e7;
+  t.periodmonospace = 0xff0e;
+  t.periodsmall = 0xfe52;
+  t.periodsuperior = 0xf6e8;
+  t.perispomenigreekcmb = 0x0342;
+  t.perpendicular = 0x22a5;
+  t.perthousand = 0x2030;
+  t.peseta = 0x20a7;
+  t.pfsquare = 0x338a;
+  t.phabengali = 0x09ab;
+  t.phadeva = 0x092b;
+  t.phagujarati = 0x0aab;
+  t.phagurmukhi = 0x0a2b;
+  t.phi = 0x03c6;
+  t.phi1 = 0x03d5;
+  t.phieuphacirclekorean = 0x327a;
+  t.phieuphaparenkorean = 0x321a;
+  t.phieuphcirclekorean = 0x326c;
+  t.phieuphkorean = 0x314d;
+  t.phieuphparenkorean = 0x320c;
+  t.philatin = 0x0278;
+  t.phinthuthai = 0x0e3a;
+  t.phisymbolgreek = 0x03d5;
+  t.phook = 0x01a5;
+  t.phophanthai = 0x0e1e;
+  t.phophungthai = 0x0e1c;
+  t.phosamphaothai = 0x0e20;
+  t.pi = 0x03c0;
+  t.pieupacirclekorean = 0x3273;
+  t.pieupaparenkorean = 0x3213;
+  t.pieupcieuckorean = 0x3176;
+  t.pieupcirclekorean = 0x3265;
+  t.pieupkiyeokkorean = 0x3172;
+  t.pieupkorean = 0x3142;
+  t.pieupparenkorean = 0x3205;
+  t.pieupsioskiyeokkorean = 0x3174;
+  t.pieupsioskorean = 0x3144;
+  t.pieupsiostikeutkorean = 0x3175;
+  t.pieupthieuthkorean = 0x3177;
+  t.pieuptikeutkorean = 0x3173;
+  t.pihiragana = 0x3074;
+  t.pikatakana = 0x30d4;
+  t.pisymbolgreek = 0x03d6;
+  t.piwrarmenian = 0x0583;
+  t.plus = 0x002b;
+  t.plusbelowcmb = 0x031f;
+  t.pluscircle = 0x2295;
+  t.plusminus = 0x00b1;
+  t.plusmod = 0x02d6;
+  t.plusmonospace = 0xff0b;
+  t.plussmall = 0xfe62;
+  t.plussuperior = 0x207a;
+  t.pmonospace = 0xff50;
+  t.pmsquare = 0x33d8;
+  t.pohiragana = 0x307d;
+  t.pointingindexdownwhite = 0x261f;
+  t.pointingindexleftwhite = 0x261c;
+  t.pointingindexrightwhite = 0x261e;
+  t.pointingindexupwhite = 0x261d;
+  t.pokatakana = 0x30dd;
+  t.poplathai = 0x0e1b;
+  t.postalmark = 0x3012;
+  t.postalmarkface = 0x3020;
+  t.pparen = 0x24ab;
+  t.precedes = 0x227a;
+  t.prescription = 0x211e;
+  t.primemod = 0x02b9;
+  t.primereversed = 0x2035;
+  t.product = 0x220f;
+  t.projective = 0x2305;
+  t.prolongedkana = 0x30fc;
+  t.propellor = 0x2318;
+  t.propersubset = 0x2282;
+  t.propersuperset = 0x2283;
+  t.proportion = 0x2237;
+  t.proportional = 0x221d;
+  t.psi = 0x03c8;
+  t.psicyrillic = 0x0471;
+  t.psilipneumatacyrilliccmb = 0x0486;
+  t.pssquare = 0x33b0;
+  t.puhiragana = 0x3077;
+  t.pukatakana = 0x30d7;
+  t.pvsquare = 0x33b4;
+  t.pwsquare = 0x33ba;
+  t.q = 0x0071;
+  t.qadeva = 0x0958;
+  t.qadmahebrew = 0x05a8;
+  t.qafarabic = 0x0642;
+  t.qaffinalarabic = 0xfed6;
+  t.qafinitialarabic = 0xfed7;
+  t.qafmedialarabic = 0xfed8;
+  t.qamats = 0x05b8;
+  t.qamats10 = 0x05b8;
+  t.qamats1a = 0x05b8;
+  t.qamats1c = 0x05b8;
+  t.qamats27 = 0x05b8;
+  t.qamats29 = 0x05b8;
+  t.qamats33 = 0x05b8;
+  t.qamatsde = 0x05b8;
+  t.qamatshebrew = 0x05b8;
+  t.qamatsnarrowhebrew = 0x05b8;
+  t.qamatsqatanhebrew = 0x05b8;
+  t.qamatsqatannarrowhebrew = 0x05b8;
+  t.qamatsqatanquarterhebrew = 0x05b8;
+  t.qamatsqatanwidehebrew = 0x05b8;
+  t.qamatsquarterhebrew = 0x05b8;
+  t.qamatswidehebrew = 0x05b8;
+  t.qarneyparahebrew = 0x059f;
+  t.qbopomofo = 0x3111;
+  t.qcircle = 0x24e0;
+  t.qhook = 0x02a0;
+  t.qmonospace = 0xff51;
+  t.qof = 0x05e7;
+  t.qofdagesh = 0xfb47;
+  t.qofdageshhebrew = 0xfb47;
+  t.qofhebrew = 0x05e7;
+  t.qparen = 0x24ac;
+  t.quarternote = 0x2669;
+  t.qubuts = 0x05bb;
+  t.qubuts18 = 0x05bb;
+  t.qubuts25 = 0x05bb;
+  t.qubuts31 = 0x05bb;
+  t.qubutshebrew = 0x05bb;
+  t.qubutsnarrowhebrew = 0x05bb;
+  t.qubutsquarterhebrew = 0x05bb;
+  t.qubutswidehebrew = 0x05bb;
+  t.question = 0x003f;
+  t.questionarabic = 0x061f;
+  t.questionarmenian = 0x055e;
+  t.questiondown = 0x00bf;
+  t.questiondownsmall = 0xf7bf;
+  t.questiongreek = 0x037e;
+  t.questionmonospace = 0xff1f;
+  t.questionsmall = 0xf73f;
+  t.quotedbl = 0x0022;
+  t.quotedblbase = 0x201e;
+  t.quotedblleft = 0x201c;
+  t.quotedblmonospace = 0xff02;
+  t.quotedblprime = 0x301e;
+  t.quotedblprimereversed = 0x301d;
+  t.quotedblright = 0x201d;
+  t.quoteleft = 0x2018;
+  t.quoteleftreversed = 0x201b;
+  t.quotereversed = 0x201b;
+  t.quoteright = 0x2019;
+  t.quoterightn = 0x0149;
+  t.quotesinglbase = 0x201a;
+  t.quotesingle = 0x0027;
+  t.quotesinglemonospace = 0xff07;
+  t.r = 0x0072;
+  t.raarmenian = 0x057c;
+  t.rabengali = 0x09b0;
+  t.racute = 0x0155;
+  t.radeva = 0x0930;
+  t.radical = 0x221a;
+  t.radicalex = 0xf8e5;
+  t.radoverssquare = 0x33ae;
+  t.radoverssquaredsquare = 0x33af;
+  t.radsquare = 0x33ad;
+  t.rafe = 0x05bf;
+  t.rafehebrew = 0x05bf;
+  t.ragujarati = 0x0ab0;
+  t.ragurmukhi = 0x0a30;
+  t.rahiragana = 0x3089;
+  t.rakatakana = 0x30e9;
+  t.rakatakanahalfwidth = 0xff97;
+  t.ralowerdiagonalbengali = 0x09f1;
+  t.ramiddlediagonalbengali = 0x09f0;
+  t.ramshorn = 0x0264;
+  t.ratio = 0x2236;
+  t.rbopomofo = 0x3116;
+  t.rcaron = 0x0159;
+  t.rcedilla = 0x0157;
+  t.rcircle = 0x24e1;
+  t.rcommaaccent = 0x0157;
+  t.rdblgrave = 0x0211;
+  t.rdotaccent = 0x1e59;
+  t.rdotbelow = 0x1e5b;
+  t.rdotbelowmacron = 0x1e5d;
+  t.referencemark = 0x203b;
+  t.reflexsubset = 0x2286;
+  t.reflexsuperset = 0x2287;
+  t.registered = 0x00ae;
+  t.registersans = 0xf8e8;
+  t.registerserif = 0xf6da;
+  t.reharabic = 0x0631;
+  t.reharmenian = 0x0580;
+  t.rehfinalarabic = 0xfeae;
+  t.rehiragana = 0x308c;
+  t.rekatakana = 0x30ec;
+  t.rekatakanahalfwidth = 0xff9a;
+  t.resh = 0x05e8;
+  t.reshdageshhebrew = 0xfb48;
+  t.reshhebrew = 0x05e8;
+  t.reversedtilde = 0x223d;
+  t.reviahebrew = 0x0597;
+  t.reviamugrashhebrew = 0x0597;
+  t.revlogicalnot = 0x2310;
+  t.rfishhook = 0x027e;
+  t.rfishhookreversed = 0x027f;
+  t.rhabengali = 0x09dd;
+  t.rhadeva = 0x095d;
+  t.rho = 0x03c1;
+  t.rhook = 0x027d;
+  t.rhookturned = 0x027b;
+  t.rhookturnedsuperior = 0x02b5;
+  t.rhosymbolgreek = 0x03f1;
+  t.rhotichookmod = 0x02de;
+  t.rieulacirclekorean = 0x3271;
+  t.rieulaparenkorean = 0x3211;
+  t.rieulcirclekorean = 0x3263;
+  t.rieulhieuhkorean = 0x3140;
+  t.rieulkiyeokkorean = 0x313a;
+  t.rieulkiyeoksioskorean = 0x3169;
+  t.rieulkorean = 0x3139;
+  t.rieulmieumkorean = 0x313b;
+  t.rieulpansioskorean = 0x316c;
+  t.rieulparenkorean = 0x3203;
+  t.rieulphieuphkorean = 0x313f;
+  t.rieulpieupkorean = 0x313c;
+  t.rieulpieupsioskorean = 0x316b;
+  t.rieulsioskorean = 0x313d;
+  t.rieulthieuthkorean = 0x313e;
+  t.rieultikeutkorean = 0x316a;
+  t.rieulyeorinhieuhkorean = 0x316d;
+  t.rightangle = 0x221f;
+  t.righttackbelowcmb = 0x0319;
+  t.righttriangle = 0x22bf;
+  t.rihiragana = 0x308a;
+  t.rikatakana = 0x30ea;
+  t.rikatakanahalfwidth = 0xff98;
+  t.ring = 0x02da;
+  t.ringbelowcmb = 0x0325;
+  t.ringcmb = 0x030a;
+  t.ringhalfleft = 0x02bf;
+  t.ringhalfleftarmenian = 0x0559;
+  t.ringhalfleftbelowcmb = 0x031c;
+  t.ringhalfleftcentered = 0x02d3;
+  t.ringhalfright = 0x02be;
+  t.ringhalfrightbelowcmb = 0x0339;
+  t.ringhalfrightcentered = 0x02d2;
+  t.rinvertedbreve = 0x0213;
+  t.rittorusquare = 0x3351;
+  t.rlinebelow = 0x1e5f;
+  t.rlongleg = 0x027c;
+  t.rlonglegturned = 0x027a;
+  t.rmonospace = 0xff52;
+  t.rohiragana = 0x308d;
+  t.rokatakana = 0x30ed;
+  t.rokatakanahalfwidth = 0xff9b;
+  t.roruathai = 0x0e23;
+  t.rparen = 0x24ad;
+  t.rrabengali = 0x09dc;
+  t.rradeva = 0x0931;
+  t.rragurmukhi = 0x0a5c;
+  t.rreharabic = 0x0691;
+  t.rrehfinalarabic = 0xfb8d;
+  t.rrvocalicbengali = 0x09e0;
+  t.rrvocalicdeva = 0x0960;
+  t.rrvocalicgujarati = 0x0ae0;
+  t.rrvocalicvowelsignbengali = 0x09c4;
+  t.rrvocalicvowelsigndeva = 0x0944;
+  t.rrvocalicvowelsigngujarati = 0x0ac4;
+  t.rsuperior = 0xf6f1;
+  t.rtblock = 0x2590;
+  t.rturned = 0x0279;
+  t.rturnedsuperior = 0x02b4;
+  t.ruhiragana = 0x308b;
+  t.rukatakana = 0x30eb;
+  t.rukatakanahalfwidth = 0xff99;
+  t.rupeemarkbengali = 0x09f2;
+  t.rupeesignbengali = 0x09f3;
+  t.rupiah = 0xf6dd;
+  t.ruthai = 0x0e24;
+  t.rvocalicbengali = 0x098b;
+  t.rvocalicdeva = 0x090b;
+  t.rvocalicgujarati = 0x0a8b;
+  t.rvocalicvowelsignbengali = 0x09c3;
+  t.rvocalicvowelsigndeva = 0x0943;
+  t.rvocalicvowelsigngujarati = 0x0ac3;
+  t.s = 0x0073;
+  t.sabengali = 0x09b8;
+  t.sacute = 0x015b;
+  t.sacutedotaccent = 0x1e65;
+  t.sadarabic = 0x0635;
+  t.sadeva = 0x0938;
+  t.sadfinalarabic = 0xfeba;
+  t.sadinitialarabic = 0xfebb;
+  t.sadmedialarabic = 0xfebc;
+  t.sagujarati = 0x0ab8;
+  t.sagurmukhi = 0x0a38;
+  t.sahiragana = 0x3055;
+  t.sakatakana = 0x30b5;
+  t.sakatakanahalfwidth = 0xff7b;
+  t.sallallahoualayhewasallamarabic = 0xfdfa;
+  t.samekh = 0x05e1;
+  t.samekhdagesh = 0xfb41;
+  t.samekhdageshhebrew = 0xfb41;
+  t.samekhhebrew = 0x05e1;
+  t.saraaathai = 0x0e32;
+  t.saraaethai = 0x0e41;
+  t.saraaimaimalaithai = 0x0e44;
+  t.saraaimaimuanthai = 0x0e43;
+  t.saraamthai = 0x0e33;
+  t.saraathai = 0x0e30;
+  t.saraethai = 0x0e40;
+  t.saraiileftthai = 0xf886;
+  t.saraiithai = 0x0e35;
+  t.saraileftthai = 0xf885;
+  t.saraithai = 0x0e34;
+  t.saraothai = 0x0e42;
+  t.saraueeleftthai = 0xf888;
+  t.saraueethai = 0x0e37;
+  t.saraueleftthai = 0xf887;
+  t.sarauethai = 0x0e36;
+  t.sarauthai = 0x0e38;
+  t.sarauuthai = 0x0e39;
+  t.sbopomofo = 0x3119;
+  t.scaron = 0x0161;
+  t.scarondotaccent = 0x1e67;
+  t.scedilla = 0x015f;
+  t.schwa = 0x0259;
+  t.schwacyrillic = 0x04d9;
+  t.schwadieresiscyrillic = 0x04db;
+  t.schwahook = 0x025a;
+  t.scircle = 0x24e2;
+  t.scircumflex = 0x015d;
+  t.scommaaccent = 0x0219;
+  t.sdotaccent = 0x1e61;
+  t.sdotbelow = 0x1e63;
+  t.sdotbelowdotaccent = 0x1e69;
+  t.seagullbelowcmb = 0x033c;
+  t.second = 0x2033;
+  t.secondtonechinese = 0x02ca;
+  t.section = 0x00a7;
+  t.seenarabic = 0x0633;
+  t.seenfinalarabic = 0xfeb2;
+  t.seeninitialarabic = 0xfeb3;
+  t.seenmedialarabic = 0xfeb4;
+  t.segol = 0x05b6;
+  t.segol13 = 0x05b6;
+  t.segol1f = 0x05b6;
+  t.segol2c = 0x05b6;
+  t.segolhebrew = 0x05b6;
+  t.segolnarrowhebrew = 0x05b6;
+  t.segolquarterhebrew = 0x05b6;
+  t.segoltahebrew = 0x0592;
+  t.segolwidehebrew = 0x05b6;
+  t.seharmenian = 0x057d;
+  t.sehiragana = 0x305b;
+  t.sekatakana = 0x30bb;
+  t.sekatakanahalfwidth = 0xff7e;
+  t.semicolon = 0x003b;
+  t.semicolonarabic = 0x061b;
+  t.semicolonmonospace = 0xff1b;
+  t.semicolonsmall = 0xfe54;
+  t.semivoicedmarkkana = 0x309c;
+  t.semivoicedmarkkanahalfwidth = 0xff9f;
+  t.sentisquare = 0x3322;
+  t.sentosquare = 0x3323;
+  t.seven = 0x0037;
+  t.sevenarabic = 0x0667;
+  t.sevenbengali = 0x09ed;
+  t.sevencircle = 0x2466;
+  t.sevencircleinversesansserif = 0x2790;
+  t.sevendeva = 0x096d;
+  t.seveneighths = 0x215e;
+  t.sevengujarati = 0x0aed;
+  t.sevengurmukhi = 0x0a6d;
+  t.sevenhackarabic = 0x0667;
+  t.sevenhangzhou = 0x3027;
+  t.sevenideographicparen = 0x3226;
+  t.seveninferior = 0x2087;
+  t.sevenmonospace = 0xff17;
+  t.sevenoldstyle = 0xf737;
+  t.sevenparen = 0x247a;
+  t.sevenperiod = 0x248e;
+  t.sevenpersian = 0x06f7;
+  t.sevenroman = 0x2176;
+  t.sevensuperior = 0x2077;
+  t.seventeencircle = 0x2470;
+  t.seventeenparen = 0x2484;
+  t.seventeenperiod = 0x2498;
+  t.seventhai = 0x0e57;
+  t.sfthyphen = 0x00ad;
+  t.shaarmenian = 0x0577;
+  t.shabengali = 0x09b6;
+  t.shacyrillic = 0x0448;
+  t.shaddaarabic = 0x0651;
+  t.shaddadammaarabic = 0xfc61;
+  t.shaddadammatanarabic = 0xfc5e;
+  t.shaddafathaarabic = 0xfc60;
+  t.shaddakasraarabic = 0xfc62;
+  t.shaddakasratanarabic = 0xfc5f;
+  t.shade = 0x2592;
+  t.shadedark = 0x2593;
+  t.shadelight = 0x2591;
+  t.shademedium = 0x2592;
+  t.shadeva = 0x0936;
+  t.shagujarati = 0x0ab6;
+  t.shagurmukhi = 0x0a36;
+  t.shalshelethebrew = 0x0593;
+  t.shbopomofo = 0x3115;
+  t.shchacyrillic = 0x0449;
+  t.sheenarabic = 0x0634;
+  t.sheenfinalarabic = 0xfeb6;
+  t.sheeninitialarabic = 0xfeb7;
+  t.sheenmedialarabic = 0xfeb8;
+  t.sheicoptic = 0x03e3;
+  t.sheqel = 0x20aa;
+  t.sheqelhebrew = 0x20aa;
+  t.sheva = 0x05b0;
+  t.sheva115 = 0x05b0;
+  t.sheva15 = 0x05b0;
+  t.sheva22 = 0x05b0;
+  t.sheva2e = 0x05b0;
+  t.shevahebrew = 0x05b0;
+  t.shevanarrowhebrew = 0x05b0;
+  t.shevaquarterhebrew = 0x05b0;
+  t.shevawidehebrew = 0x05b0;
+  t.shhacyrillic = 0x04bb;
+  t.shimacoptic = 0x03ed;
+  t.shin = 0x05e9;
+  t.shindagesh = 0xfb49;
+  t.shindageshhebrew = 0xfb49;
+  t.shindageshshindot = 0xfb2c;
+  t.shindageshshindothebrew = 0xfb2c;
+  t.shindageshsindot = 0xfb2d;
+  t.shindageshsindothebrew = 0xfb2d;
+  t.shindothebrew = 0x05c1;
+  t.shinhebrew = 0x05e9;
+  t.shinshindot = 0xfb2a;
+  t.shinshindothebrew = 0xfb2a;
+  t.shinsindot = 0xfb2b;
+  t.shinsindothebrew = 0xfb2b;
+  t.shook = 0x0282;
+  t.sigma = 0x03c3;
+  t.sigma1 = 0x03c2;
+  t.sigmafinal = 0x03c2;
+  t.sigmalunatesymbolgreek = 0x03f2;
+  t.sihiragana = 0x3057;
+  t.sikatakana = 0x30b7;
+  t.sikatakanahalfwidth = 0xff7c;
+  t.siluqhebrew = 0x05bd;
+  t.siluqlefthebrew = 0x05bd;
+  t.similar = 0x223c;
+  t.sindothebrew = 0x05c2;
+  t.siosacirclekorean = 0x3274;
+  t.siosaparenkorean = 0x3214;
+  t.sioscieuckorean = 0x317e;
+  t.sioscirclekorean = 0x3266;
+  t.sioskiyeokkorean = 0x317a;
+  t.sioskorean = 0x3145;
+  t.siosnieunkorean = 0x317b;
+  t.siosparenkorean = 0x3206;
+  t.siospieupkorean = 0x317d;
+  t.siostikeutkorean = 0x317c;
+  t.six = 0x0036;
+  t.sixarabic = 0x0666;
+  t.sixbengali = 0x09ec;
+  t.sixcircle = 0x2465;
+  t.sixcircleinversesansserif = 0x278f;
+  t.sixdeva = 0x096c;
+  t.sixgujarati = 0x0aec;
+  t.sixgurmukhi = 0x0a6c;
+  t.sixhackarabic = 0x0666;
+  t.sixhangzhou = 0x3026;
+  t.sixideographicparen = 0x3225;
+  t.sixinferior = 0x2086;
+  t.sixmonospace = 0xff16;
+  t.sixoldstyle = 0xf736;
+  t.sixparen = 0x2479;
+  t.sixperiod = 0x248d;
+  t.sixpersian = 0x06f6;
+  t.sixroman = 0x2175;
+  t.sixsuperior = 0x2076;
+  t.sixteencircle = 0x246f;
+  t.sixteencurrencydenominatorbengali = 0x09f9;
+  t.sixteenparen = 0x2483;
+  t.sixteenperiod = 0x2497;
+  t.sixthai = 0x0e56;
+  t.slash = 0x002f;
+  t.slashmonospace = 0xff0f;
+  t.slong = 0x017f;
+  t.slongdotaccent = 0x1e9b;
+  t.smileface = 0x263a;
+  t.smonospace = 0xff53;
+  t.sofpasuqhebrew = 0x05c3;
+  t.softhyphen = 0x00ad;
+  t.softsigncyrillic = 0x044c;
+  t.sohiragana = 0x305d;
+  t.sokatakana = 0x30bd;
+  t.sokatakanahalfwidth = 0xff7f;
+  t.soliduslongoverlaycmb = 0x0338;
+  t.solidusshortoverlaycmb = 0x0337;
+  t.sorusithai = 0x0e29;
+  t.sosalathai = 0x0e28;
+  t.sosothai = 0x0e0b;
+  t.sosuathai = 0x0e2a;
+  t.space = 0x0020;
+  t.spacehackarabic = 0x0020;
+  t.spade = 0x2660;
+  t.spadesuitblack = 0x2660;
+  t.spadesuitwhite = 0x2664;
+  t.sparen = 0x24ae;
+  t.squarebelowcmb = 0x033b;
+  t.squarecc = 0x33c4;
+  t.squarecm = 0x339d;
+  t.squarediagonalcrosshatchfill = 0x25a9;
+  t.squarehorizontalfill = 0x25a4;
+  t.squarekg = 0x338f;
+  t.squarekm = 0x339e;
+  t.squarekmcapital = 0x33ce;
+  t.squareln = 0x33d1;
+  t.squarelog = 0x33d2;
+  t.squaremg = 0x338e;
+  t.squaremil = 0x33d5;
+  t.squaremm = 0x339c;
+  t.squaremsquared = 0x33a1;
+  t.squareorthogonalcrosshatchfill = 0x25a6;
+  t.squareupperlefttolowerrightfill = 0x25a7;
+  t.squareupperrighttolowerleftfill = 0x25a8;
+  t.squareverticalfill = 0x25a5;
+  t.squarewhitewithsmallblack = 0x25a3;
+  t.srsquare = 0x33db;
+  t.ssabengali = 0x09b7;
+  t.ssadeva = 0x0937;
+  t.ssagujarati = 0x0ab7;
+  t.ssangcieuckorean = 0x3149;
+  t.ssanghieuhkorean = 0x3185;
+  t.ssangieungkorean = 0x3180;
+  t.ssangkiyeokkorean = 0x3132;
+  t.ssangnieunkorean = 0x3165;
+  t.ssangpieupkorean = 0x3143;
+  t.ssangsioskorean = 0x3146;
+  t.ssangtikeutkorean = 0x3138;
+  t.ssuperior = 0xf6f2;
+  t.sterling = 0x00a3;
+  t.sterlingmonospace = 0xffe1;
+  t.strokelongoverlaycmb = 0x0336;
+  t.strokeshortoverlaycmb = 0x0335;
+  t.subset = 0x2282;
+  t.subsetnotequal = 0x228a;
+  t.subsetorequal = 0x2286;
+  t.succeeds = 0x227b;
+  t.suchthat = 0x220b;
+  t.suhiragana = 0x3059;
+  t.sukatakana = 0x30b9;
+  t.sukatakanahalfwidth = 0xff7d;
+  t.sukunarabic = 0x0652;
+  t.summation = 0x2211;
+  t.sun = 0x263c;
+  t.superset = 0x2283;
+  t.supersetnotequal = 0x228b;
+  t.supersetorequal = 0x2287;
+  t.svsquare = 0x33dc;
+  t.syouwaerasquare = 0x337c;
+  t.t = 0x0074;
+  t.tabengali = 0x09a4;
+  t.tackdown = 0x22a4;
+  t.tackleft = 0x22a3;
+  t.tadeva = 0x0924;
+  t.tagujarati = 0x0aa4;
+  t.tagurmukhi = 0x0a24;
+  t.taharabic = 0x0637;
+  t.tahfinalarabic = 0xfec2;
+  t.tahinitialarabic = 0xfec3;
+  t.tahiragana = 0x305f;
+  t.tahmedialarabic = 0xfec4;
+  t.taisyouerasquare = 0x337d;
+  t.takatakana = 0x30bf;
+  t.takatakanahalfwidth = 0xff80;
+  t.tatweelarabic = 0x0640;
+  t.tau = 0x03c4;
+  t.tav = 0x05ea;
+  t.tavdages = 0xfb4a;
+  t.tavdagesh = 0xfb4a;
+  t.tavdageshhebrew = 0xfb4a;
+  t.tavhebrew = 0x05ea;
+  t.tbar = 0x0167;
+  t.tbopomofo = 0x310a;
+  t.tcaron = 0x0165;
+  t.tccurl = 0x02a8;
+  t.tcedilla = 0x0163;
+  t.tcheharabic = 0x0686;
+  t.tchehfinalarabic = 0xfb7b;
+  t.tchehinitialarabic = 0xfb7c;
+  t.tchehmedialarabic = 0xfb7d;
+  t.tcircle = 0x24e3;
+  t.tcircumflexbelow = 0x1e71;
+  t.tcommaaccent = 0x0163;
+  t.tdieresis = 0x1e97;
+  t.tdotaccent = 0x1e6b;
+  t.tdotbelow = 0x1e6d;
+  t.tecyrillic = 0x0442;
+  t.tedescendercyrillic = 0x04ad;
+  t.teharabic = 0x062a;
+  t.tehfinalarabic = 0xfe96;
+  t.tehhahinitialarabic = 0xfca2;
+  t.tehhahisolatedarabic = 0xfc0c;
+  t.tehinitialarabic = 0xfe97;
+  t.tehiragana = 0x3066;
+  t.tehjeeminitialarabic = 0xfca1;
+  t.tehjeemisolatedarabic = 0xfc0b;
+  t.tehmarbutaarabic = 0x0629;
+  t.tehmarbutafinalarabic = 0xfe94;
+  t.tehmedialarabic = 0xfe98;
+  t.tehmeeminitialarabic = 0xfca4;
+  t.tehmeemisolatedarabic = 0xfc0e;
+  t.tehnoonfinalarabic = 0xfc73;
+  t.tekatakana = 0x30c6;
+  t.tekatakanahalfwidth = 0xff83;
+  t.telephone = 0x2121;
+  t.telephoneblack = 0x260e;
+  t.telishagedolahebrew = 0x05a0;
+  t.telishaqetanahebrew = 0x05a9;
+  t.tencircle = 0x2469;
+  t.tenideographicparen = 0x3229;
+  t.tenparen = 0x247d;
+  t.tenperiod = 0x2491;
+  t.tenroman = 0x2179;
+  t.tesh = 0x02a7;
+  t.tet = 0x05d8;
+  t.tetdagesh = 0xfb38;
+  t.tetdageshhebrew = 0xfb38;
+  t.tethebrew = 0x05d8;
+  t.tetsecyrillic = 0x04b5;
+  t.tevirhebrew = 0x059b;
+  t.tevirlefthebrew = 0x059b;
+  t.thabengali = 0x09a5;
+  t.thadeva = 0x0925;
+  t.thagujarati = 0x0aa5;
+  t.thagurmukhi = 0x0a25;
+  t.thalarabic = 0x0630;
+  t.thalfinalarabic = 0xfeac;
+  t.thanthakhatlowleftthai = 0xf898;
+  t.thanthakhatlowrightthai = 0xf897;
+  t.thanthakhatthai = 0x0e4c;
+  t.thanthakhatupperleftthai = 0xf896;
+  t.theharabic = 0x062b;
+  t.thehfinalarabic = 0xfe9a;
+  t.thehinitialarabic = 0xfe9b;
+  t.thehmedialarabic = 0xfe9c;
+  t.thereexists = 0x2203;
+  t.therefore = 0x2234;
+  t.theta = 0x03b8;
+  t.theta1 = 0x03d1;
+  t.thetasymbolgreek = 0x03d1;
+  t.thieuthacirclekorean = 0x3279;
+  t.thieuthaparenkorean = 0x3219;
+  t.thieuthcirclekorean = 0x326b;
+  t.thieuthkorean = 0x314c;
+  t.thieuthparenkorean = 0x320b;
+  t.thirteencircle = 0x246c;
+  t.thirteenparen = 0x2480;
+  t.thirteenperiod = 0x2494;
+  t.thonangmonthothai = 0x0e11;
+  t.thook = 0x01ad;
+  t.thophuthaothai = 0x0e12;
+  t.thorn = 0x00fe;
+  t.thothahanthai = 0x0e17;
+  t.thothanthai = 0x0e10;
+  t.thothongthai = 0x0e18;
+  t.thothungthai = 0x0e16;
+  t.thousandcyrillic = 0x0482;
+  t.thousandsseparatorarabic = 0x066c;
+  t.thousandsseparatorpersian = 0x066c;
+  t.three = 0x0033;
+  t.threearabic = 0x0663;
+  t.threebengali = 0x09e9;
+  t.threecircle = 0x2462;
+  t.threecircleinversesansserif = 0x278c;
+  t.threedeva = 0x0969;
+  t.threeeighths = 0x215c;
+  t.threegujarati = 0x0ae9;
+  t.threegurmukhi = 0x0a69;
+  t.threehackarabic = 0x0663;
+  t.threehangzhou = 0x3023;
+  t.threeideographicparen = 0x3222;
+  t.threeinferior = 0x2083;
+  t.threemonospace = 0xff13;
+  t.threenumeratorbengali = 0x09f6;
+  t.threeoldstyle = 0xf733;
+  t.threeparen = 0x2476;
+  t.threeperiod = 0x248a;
+  t.threepersian = 0x06f3;
+  t.threequarters = 0x00be;
+  t.threequartersemdash = 0xf6de;
+  t.threeroman = 0x2172;
+  t.threesuperior = 0x00b3;
+  t.threethai = 0x0e53;
+  t.thzsquare = 0x3394;
+  t.tihiragana = 0x3061;
+  t.tikatakana = 0x30c1;
+  t.tikatakanahalfwidth = 0xff81;
+  t.tikeutacirclekorean = 0x3270;
+  t.tikeutaparenkorean = 0x3210;
+  t.tikeutcirclekorean = 0x3262;
+  t.tikeutkorean = 0x3137;
+  t.tikeutparenkorean = 0x3202;
+  t.tilde = 0x02dc;
+  t.tildebelowcmb = 0x0330;
+  t.tildecmb = 0x0303;
+  t.tildecomb = 0x0303;
+  t.tildedoublecmb = 0x0360;
+  t.tildeoperator = 0x223c;
+  t.tildeoverlaycmb = 0x0334;
+  t.tildeverticalcmb = 0x033e;
+  t.timescircle = 0x2297;
+  t.tipehahebrew = 0x0596;
+  t.tipehalefthebrew = 0x0596;
+  t.tippigurmukhi = 0x0a70;
+  t.titlocyrilliccmb = 0x0483;
+  t.tiwnarmenian = 0x057f;
+  t.tlinebelow = 0x1e6f;
+  t.tmonospace = 0xff54;
+  t.toarmenian = 0x0569;
+  t.tohiragana = 0x3068;
+  t.tokatakana = 0x30c8;
+  t.tokatakanahalfwidth = 0xff84;
+  t.tonebarextrahighmod = 0x02e5;
+  t.tonebarextralowmod = 0x02e9;
+  t.tonebarhighmod = 0x02e6;
+  t.tonebarlowmod = 0x02e8;
+  t.tonebarmidmod = 0x02e7;
+  t.tonefive = 0x01bd;
+  t.tonesix = 0x0185;
+  t.tonetwo = 0x01a8;
+  t.tonos = 0x0384;
+  t.tonsquare = 0x3327;
+  t.topatakthai = 0x0e0f;
+  t.tortoiseshellbracketleft = 0x3014;
+  t.tortoiseshellbracketleftsmall = 0xfe5d;
+  t.tortoiseshellbracketleftvertical = 0xfe39;
+  t.tortoiseshellbracketright = 0x3015;
+  t.tortoiseshellbracketrightsmall = 0xfe5e;
+  t.tortoiseshellbracketrightvertical = 0xfe3a;
+  t.totaothai = 0x0e15;
+  t.tpalatalhook = 0x01ab;
+  t.tparen = 0x24af;
+  t.trademark = 0x2122;
+  t.trademarksans = 0xf8ea;
+  t.trademarkserif = 0xf6db;
+  t.tretroflexhook = 0x0288;
+  t.triagdn = 0x25bc;
+  t.triaglf = 0x25c4;
+  t.triagrt = 0x25ba;
+  t.triagup = 0x25b2;
+  t.ts = 0x02a6;
+  t.tsadi = 0x05e6;
+  t.tsadidagesh = 0xfb46;
+  t.tsadidageshhebrew = 0xfb46;
+  t.tsadihebrew = 0x05e6;
+  t.tsecyrillic = 0x0446;
+  t.tsere = 0x05b5;
+  t.tsere12 = 0x05b5;
+  t.tsere1e = 0x05b5;
+  t.tsere2b = 0x05b5;
+  t.tserehebrew = 0x05b5;
+  t.tserenarrowhebrew = 0x05b5;
+  t.tserequarterhebrew = 0x05b5;
+  t.tserewidehebrew = 0x05b5;
+  t.tshecyrillic = 0x045b;
+  t.tsuperior = 0xf6f3;
+  t.ttabengali = 0x099f;
+  t.ttadeva = 0x091f;
+  t.ttagujarati = 0x0a9f;
+  t.ttagurmukhi = 0x0a1f;
+  t.tteharabic = 0x0679;
+  t.ttehfinalarabic = 0xfb67;
+  t.ttehinitialarabic = 0xfb68;
+  t.ttehmedialarabic = 0xfb69;
+  t.tthabengali = 0x09a0;
+  t.tthadeva = 0x0920;
+  t.tthagujarati = 0x0aa0;
+  t.tthagurmukhi = 0x0a20;
+  t.tturned = 0x0287;
+  t.tuhiragana = 0x3064;
+  t.tukatakana = 0x30c4;
+  t.tukatakanahalfwidth = 0xff82;
+  t.tusmallhiragana = 0x3063;
+  t.tusmallkatakana = 0x30c3;
+  t.tusmallkatakanahalfwidth = 0xff6f;
+  t.twelvecircle = 0x246b;
+  t.twelveparen = 0x247f;
+  t.twelveperiod = 0x2493;
+  t.twelveroman = 0x217b;
+  t.twentycircle = 0x2473;
+  t.twentyhangzhou = 0x5344;
+  t.twentyparen = 0x2487;
+  t.twentyperiod = 0x249b;
+  t.two = 0x0032;
+  t.twoarabic = 0x0662;
+  t.twobengali = 0x09e8;
+  t.twocircle = 0x2461;
+  t.twocircleinversesansserif = 0x278b;
+  t.twodeva = 0x0968;
+  t.twodotenleader = 0x2025;
+  t.twodotleader = 0x2025;
+  t.twodotleadervertical = 0xfe30;
+  t.twogujarati = 0x0ae8;
+  t.twogurmukhi = 0x0a68;
+  t.twohackarabic = 0x0662;
+  t.twohangzhou = 0x3022;
+  t.twoideographicparen = 0x3221;
+  t.twoinferior = 0x2082;
+  t.twomonospace = 0xff12;
+  t.twonumeratorbengali = 0x09f5;
+  t.twooldstyle = 0xf732;
+  t.twoparen = 0x2475;
+  t.twoperiod = 0x2489;
+  t.twopersian = 0x06f2;
+  t.tworoman = 0x2171;
+  t.twostroke = 0x01bb;
+  t.twosuperior = 0x00b2;
+  t.twothai = 0x0e52;
+  t.twothirds = 0x2154;
+  t.u = 0x0075;
+  t.uacute = 0x00fa;
+  t.ubar = 0x0289;
+  t.ubengali = 0x0989;
+  t.ubopomofo = 0x3128;
+  t.ubreve = 0x016d;
+  t.ucaron = 0x01d4;
+  t.ucircle = 0x24e4;
+  t.ucircumflex = 0x00fb;
+  t.ucircumflexbelow = 0x1e77;
+  t.ucyrillic = 0x0443;
+  t.udattadeva = 0x0951;
+  t.udblacute = 0x0171;
+  t.udblgrave = 0x0215;
+  t.udeva = 0x0909;
+  t.udieresis = 0x00fc;
+  t.udieresisacute = 0x01d8;
+  t.udieresisbelow = 0x1e73;
+  t.udieresiscaron = 0x01da;
+  t.udieresiscyrillic = 0x04f1;
+  t.udieresisgrave = 0x01dc;
+  t.udieresismacron = 0x01d6;
+  t.udotbelow = 0x1ee5;
+  t.ugrave = 0x00f9;
+  t.ugujarati = 0x0a89;
+  t.ugurmukhi = 0x0a09;
+  t.uhiragana = 0x3046;
+  t.uhookabove = 0x1ee7;
+  t.uhorn = 0x01b0;
+  t.uhornacute = 0x1ee9;
+  t.uhorndotbelow = 0x1ef1;
+  t.uhorngrave = 0x1eeb;
+  t.uhornhookabove = 0x1eed;
+  t.uhorntilde = 0x1eef;
+  t.uhungarumlaut = 0x0171;
+  t.uhungarumlautcyrillic = 0x04f3;
+  t.uinvertedbreve = 0x0217;
+  t.ukatakana = 0x30a6;
+  t.ukatakanahalfwidth = 0xff73;
+  t.ukcyrillic = 0x0479;
+  t.ukorean = 0x315c;
+  t.umacron = 0x016b;
+  t.umacroncyrillic = 0x04ef;
+  t.umacrondieresis = 0x1e7b;
+  t.umatragurmukhi = 0x0a41;
+  t.umonospace = 0xff55;
+  t.underscore = 0x005f;
+  t.underscoredbl = 0x2017;
+  t.underscoremonospace = 0xff3f;
+  t.underscorevertical = 0xfe33;
+  t.underscorewavy = 0xfe4f;
+  t.union = 0x222a;
+  t.universal = 0x2200;
+  t.uogonek = 0x0173;
+  t.uparen = 0x24b0;
+  t.upblock = 0x2580;
+  t.upperdothebrew = 0x05c4;
+  t.upsilon = 0x03c5;
+  t.upsilondieresis = 0x03cb;
+  t.upsilondieresistonos = 0x03b0;
+  t.upsilonlatin = 0x028a;
+  t.upsilontonos = 0x03cd;
+  t.uptackbelowcmb = 0x031d;
+  t.uptackmod = 0x02d4;
+  t.uragurmukhi = 0x0a73;
+  t.uring = 0x016f;
+  t.ushortcyrillic = 0x045e;
+  t.usmallhiragana = 0x3045;
+  t.usmallkatakana = 0x30a5;
+  t.usmallkatakanahalfwidth = 0xff69;
+  t.ustraightcyrillic = 0x04af;
+  t.ustraightstrokecyrillic = 0x04b1;
+  t.utilde = 0x0169;
+  t.utildeacute = 0x1e79;
+  t.utildebelow = 0x1e75;
+  t.uubengali = 0x098a;
+  t.uudeva = 0x090a;
+  t.uugujarati = 0x0a8a;
+  t.uugurmukhi = 0x0a0a;
+  t.uumatragurmukhi = 0x0a42;
+  t.uuvowelsignbengali = 0x09c2;
+  t.uuvowelsigndeva = 0x0942;
+  t.uuvowelsigngujarati = 0x0ac2;
+  t.uvowelsignbengali = 0x09c1;
+  t.uvowelsigndeva = 0x0941;
+  t.uvowelsigngujarati = 0x0ac1;
+  t.v = 0x0076;
+  t.vadeva = 0x0935;
+  t.vagujarati = 0x0ab5;
+  t.vagurmukhi = 0x0a35;
+  t.vakatakana = 0x30f7;
+  t.vav = 0x05d5;
+  t.vavdagesh = 0xfb35;
+  t.vavdagesh65 = 0xfb35;
+  t.vavdageshhebrew = 0xfb35;
+  t.vavhebrew = 0x05d5;
+  t.vavholam = 0xfb4b;
+  t.vavholamhebrew = 0xfb4b;
+  t.vavvavhebrew = 0x05f0;
+  t.vavyodhebrew = 0x05f1;
+  t.vcircle = 0x24e5;
+  t.vdotbelow = 0x1e7f;
+  t.vecyrillic = 0x0432;
+  t.veharabic = 0x06a4;
+  t.vehfinalarabic = 0xfb6b;
+  t.vehinitialarabic = 0xfb6c;
+  t.vehmedialarabic = 0xfb6d;
+  t.vekatakana = 0x30f9;
+  t.venus = 0x2640;
+  t.verticalbar = 0x007c;
+  t.verticallineabovecmb = 0x030d;
+  t.verticallinebelowcmb = 0x0329;
+  t.verticallinelowmod = 0x02cc;
+  t.verticallinemod = 0x02c8;
+  t.vewarmenian = 0x057e;
+  t.vhook = 0x028b;
+  t.vikatakana = 0x30f8;
+  t.viramabengali = 0x09cd;
+  t.viramadeva = 0x094d;
+  t.viramagujarati = 0x0acd;
+  t.visargabengali = 0x0983;
+  t.visargadeva = 0x0903;
+  t.visargagujarati = 0x0a83;
+  t.vmonospace = 0xff56;
+  t.voarmenian = 0x0578;
+  t.voicediterationhiragana = 0x309e;
+  t.voicediterationkatakana = 0x30fe;
+  t.voicedmarkkana = 0x309b;
+  t.voicedmarkkanahalfwidth = 0xff9e;
+  t.vokatakana = 0x30fa;
+  t.vparen = 0x24b1;
+  t.vtilde = 0x1e7d;
+  t.vturned = 0x028c;
+  t.vuhiragana = 0x3094;
+  t.vukatakana = 0x30f4;
+  t.w = 0x0077;
+  t.wacute = 0x1e83;
+  t.waekorean = 0x3159;
+  t.wahiragana = 0x308f;
+  t.wakatakana = 0x30ef;
+  t.wakatakanahalfwidth = 0xff9c;
+  t.wakorean = 0x3158;
+  t.wasmallhiragana = 0x308e;
+  t.wasmallkatakana = 0x30ee;
+  t.wattosquare = 0x3357;
+  t.wavedash = 0x301c;
+  t.wavyunderscorevertical = 0xfe34;
+  t.wawarabic = 0x0648;
+  t.wawfinalarabic = 0xfeee;
+  t.wawhamzaabovearabic = 0x0624;
+  t.wawhamzaabovefinalarabic = 0xfe86;
+  t.wbsquare = 0x33dd;
+  t.wcircle = 0x24e6;
+  t.wcircumflex = 0x0175;
+  t.wdieresis = 0x1e85;
+  t.wdotaccent = 0x1e87;
+  t.wdotbelow = 0x1e89;
+  t.wehiragana = 0x3091;
+  t.weierstrass = 0x2118;
+  t.wekatakana = 0x30f1;
+  t.wekorean = 0x315e;
+  t.weokorean = 0x315d;
+  t.wgrave = 0x1e81;
+  t.whitebullet = 0x25e6;
+  t.whitecircle = 0x25cb;
+  t.whitecircleinverse = 0x25d9;
+  t.whitecornerbracketleft = 0x300e;
+  t.whitecornerbracketleftvertical = 0xfe43;
+  t.whitecornerbracketright = 0x300f;
+  t.whitecornerbracketrightvertical = 0xfe44;
+  t.whitediamond = 0x25c7;
+  t.whitediamondcontainingblacksmalldiamond = 0x25c8;
+  t.whitedownpointingsmalltriangle = 0x25bf;
+  t.whitedownpointingtriangle = 0x25bd;
+  t.whiteleftpointingsmalltriangle = 0x25c3;
+  t.whiteleftpointingtriangle = 0x25c1;
+  t.whitelenticularbracketleft = 0x3016;
+  t.whitelenticularbracketright = 0x3017;
+  t.whiterightpointingsmalltriangle = 0x25b9;
+  t.whiterightpointingtriangle = 0x25b7;
+  t.whitesmallsquare = 0x25ab;
+  t.whitesmilingface = 0x263a;
+  t.whitesquare = 0x25a1;
+  t.whitestar = 0x2606;
+  t.whitetelephone = 0x260f;
+  t.whitetortoiseshellbracketleft = 0x3018;
+  t.whitetortoiseshellbracketright = 0x3019;
+  t.whiteuppointingsmalltriangle = 0x25b5;
+  t.whiteuppointingtriangle = 0x25b3;
+  t.wihiragana = 0x3090;
+  t.wikatakana = 0x30f0;
+  t.wikorean = 0x315f;
+  t.wmonospace = 0xff57;
+  t.wohiragana = 0x3092;
+  t.wokatakana = 0x30f2;
+  t.wokatakanahalfwidth = 0xff66;
+  t.won = 0x20a9;
+  t.wonmonospace = 0xffe6;
+  t.wowaenthai = 0x0e27;
+  t.wparen = 0x24b2;
+  t.wring = 0x1e98;
+  t.wsuperior = 0x02b7;
+  t.wturned = 0x028d;
+  t.wynn = 0x01bf;
+  t.x = 0x0078;
+  t.xabovecmb = 0x033d;
+  t.xbopomofo = 0x3112;
+  t.xcircle = 0x24e7;
+  t.xdieresis = 0x1e8d;
+  t.xdotaccent = 0x1e8b;
+  t.xeharmenian = 0x056d;
+  t.xi = 0x03be;
+  t.xmonospace = 0xff58;
+  t.xparen = 0x24b3;
+  t.xsuperior = 0x02e3;
+  t.y = 0x0079;
+  t.yaadosquare = 0x334e;
+  t.yabengali = 0x09af;
+  t.yacute = 0x00fd;
+  t.yadeva = 0x092f;
+  t.yaekorean = 0x3152;
+  t.yagujarati = 0x0aaf;
+  t.yagurmukhi = 0x0a2f;
+  t.yahiragana = 0x3084;
+  t.yakatakana = 0x30e4;
+  t.yakatakanahalfwidth = 0xff94;
+  t.yakorean = 0x3151;
+  t.yamakkanthai = 0x0e4e;
+  t.yasmallhiragana = 0x3083;
+  t.yasmallkatakana = 0x30e3;
+  t.yasmallkatakanahalfwidth = 0xff6c;
+  t.yatcyrillic = 0x0463;
+  t.ycircle = 0x24e8;
+  t.ycircumflex = 0x0177;
+  t.ydieresis = 0x00ff;
+  t.ydotaccent = 0x1e8f;
+  t.ydotbelow = 0x1ef5;
+  t.yeharabic = 0x064a;
+  t.yehbarreearabic = 0x06d2;
+  t.yehbarreefinalarabic = 0xfbaf;
+  t.yehfinalarabic = 0xfef2;
+  t.yehhamzaabovearabic = 0x0626;
+  t.yehhamzaabovefinalarabic = 0xfe8a;
+  t.yehhamzaaboveinitialarabic = 0xfe8b;
+  t.yehhamzaabovemedialarabic = 0xfe8c;
+  t.yehinitialarabic = 0xfef3;
+  t.yehmedialarabic = 0xfef4;
+  t.yehmeeminitialarabic = 0xfcdd;
+  t.yehmeemisolatedarabic = 0xfc58;
+  t.yehnoonfinalarabic = 0xfc94;
+  t.yehthreedotsbelowarabic = 0x06d1;
+  t.yekorean = 0x3156;
+  t.yen = 0x00a5;
+  t.yenmonospace = 0xffe5;
+  t.yeokorean = 0x3155;
+  t.yeorinhieuhkorean = 0x3186;
+  t.yerahbenyomohebrew = 0x05aa;
+  t.yerahbenyomolefthebrew = 0x05aa;
+  t.yericyrillic = 0x044b;
+  t.yerudieresiscyrillic = 0x04f9;
+  t.yesieungkorean = 0x3181;
+  t.yesieungpansioskorean = 0x3183;
+  t.yesieungsioskorean = 0x3182;
+  t.yetivhebrew = 0x059a;
+  t.ygrave = 0x1ef3;
+  t.yhook = 0x01b4;
+  t.yhookabove = 0x1ef7;
+  t.yiarmenian = 0x0575;
+  t.yicyrillic = 0x0457;
+  t.yikorean = 0x3162;
+  t.yinyang = 0x262f;
+  t.yiwnarmenian = 0x0582;
+  t.ymonospace = 0xff59;
+  t.yod = 0x05d9;
+  t.yoddagesh = 0xfb39;
+  t.yoddageshhebrew = 0xfb39;
+  t.yodhebrew = 0x05d9;
+  t.yodyodhebrew = 0x05f2;
+  t.yodyodpatahhebrew = 0xfb1f;
+  t.yohiragana = 0x3088;
+  t.yoikorean = 0x3189;
+  t.yokatakana = 0x30e8;
+  t.yokatakanahalfwidth = 0xff96;
+  t.yokorean = 0x315b;
+  t.yosmallhiragana = 0x3087;
+  t.yosmallkatakana = 0x30e7;
+  t.yosmallkatakanahalfwidth = 0xff6e;
+  t.yotgreek = 0x03f3;
+  t.yoyaekorean = 0x3188;
+  t.yoyakorean = 0x3187;
+  t.yoyakthai = 0x0e22;
+  t.yoyingthai = 0x0e0d;
+  t.yparen = 0x24b4;
+  t.ypogegrammeni = 0x037a;
+  t.ypogegrammenigreekcmb = 0x0345;
+  t.yr = 0x01a6;
+  t.yring = 0x1e99;
+  t.ysuperior = 0x02b8;
+  t.ytilde = 0x1ef9;
+  t.yturned = 0x028e;
+  t.yuhiragana = 0x3086;
+  t.yuikorean = 0x318c;
+  t.yukatakana = 0x30e6;
+  t.yukatakanahalfwidth = 0xff95;
+  t.yukorean = 0x3160;
+  t.yusbigcyrillic = 0x046b;
+  t.yusbigiotifiedcyrillic = 0x046d;
+  t.yuslittlecyrillic = 0x0467;
+  t.yuslittleiotifiedcyrillic = 0x0469;
+  t.yusmallhiragana = 0x3085;
+  t.yusmallkatakana = 0x30e5;
+  t.yusmallkatakanahalfwidth = 0xff6d;
+  t.yuyekorean = 0x318b;
+  t.yuyeokorean = 0x318a;
+  t.yyabengali = 0x09df;
+  t.yyadeva = 0x095f;
+  t.z = 0x007a;
+  t.zaarmenian = 0x0566;
+  t.zacute = 0x017a;
+  t.zadeva = 0x095b;
+  t.zagurmukhi = 0x0a5b;
+  t.zaharabic = 0x0638;
+  t.zahfinalarabic = 0xfec6;
+  t.zahinitialarabic = 0xfec7;
+  t.zahiragana = 0x3056;
+  t.zahmedialarabic = 0xfec8;
+  t.zainarabic = 0x0632;
+  t.zainfinalarabic = 0xfeb0;
+  t.zakatakana = 0x30b6;
+  t.zaqefgadolhebrew = 0x0595;
+  t.zaqefqatanhebrew = 0x0594;
+  t.zarqahebrew = 0x0598;
+  t.zayin = 0x05d6;
+  t.zayindagesh = 0xfb36;
+  t.zayindageshhebrew = 0xfb36;
+  t.zayinhebrew = 0x05d6;
+  t.zbopomofo = 0x3117;
+  t.zcaron = 0x017e;
+  t.zcircle = 0x24e9;
+  t.zcircumflex = 0x1e91;
+  t.zcurl = 0x0291;
+  t.zdot = 0x017c;
+  t.zdotaccent = 0x017c;
+  t.zdotbelow = 0x1e93;
+  t.zecyrillic = 0x0437;
+  t.zedescendercyrillic = 0x0499;
+  t.zedieresiscyrillic = 0x04df;
+  t.zehiragana = 0x305c;
+  t.zekatakana = 0x30bc;
+  t.zero = 0x0030;
+  t.zeroarabic = 0x0660;
+  t.zerobengali = 0x09e6;
+  t.zerodeva = 0x0966;
+  t.zerogujarati = 0x0ae6;
+  t.zerogurmukhi = 0x0a66;
+  t.zerohackarabic = 0x0660;
+  t.zeroinferior = 0x2080;
+  t.zeromonospace = 0xff10;
+  t.zerooldstyle = 0xf730;
+  t.zeropersian = 0x06f0;
+  t.zerosuperior = 0x2070;
+  t.zerothai = 0x0e50;
+  t.zerowidthjoiner = 0xfeff;
+  t.zerowidthnonjoiner = 0x200c;
+  t.zerowidthspace = 0x200b;
+  t.zeta = 0x03b6;
+  t.zhbopomofo = 0x3113;
+  t.zhearmenian = 0x056a;
+  t.zhebrevecyrillic = 0x04c2;
+  t.zhecyrillic = 0x0436;
+  t.zhedescendercyrillic = 0x0497;
+  t.zhedieresiscyrillic = 0x04dd;
+  t.zihiragana = 0x3058;
+  t.zikatakana = 0x30b8;
+  t.zinorhebrew = 0x05ae;
+  t.zlinebelow = 0x1e95;
+  t.zmonospace = 0xff5a;
+  t.zohiragana = 0x305e;
+  t.zokatakana = 0x30be;
+  t.zparen = 0x24b5;
+  t.zretroflexhook = 0x0290;
+  t.zstroke = 0x01b6;
+  t.zuhiragana = 0x305a;
+  t.zukatakana = 0x30ba;
   t[".notdef"] = 0x0000;
-  t["angbracketleftbig"] = 0x2329;
-  t["angbracketleftBig"] = 0x2329;
-  t["angbracketleftbigg"] = 0x2329;
-  t["angbracketleftBigg"] = 0x2329;
-  t["angbracketrightBig"] = 0x232a;
-  t["angbracketrightbig"] = 0x232a;
-  t["angbracketrightBigg"] = 0x232a;
-  t["angbracketrightbigg"] = 0x232a;
-  t["arrowhookleft"] = 0x21aa;
-  t["arrowhookright"] = 0x21a9;
-  t["arrowlefttophalf"] = 0x21bc;
-  t["arrowleftbothalf"] = 0x21bd;
-  t["arrownortheast"] = 0x2197;
-  t["arrownorthwest"] = 0x2196;
-  t["arrowrighttophalf"] = 0x21c0;
-  t["arrowrightbothalf"] = 0x21c1;
-  t["arrowsoutheast"] = 0x2198;
-  t["arrowsouthwest"] = 0x2199;
-  t["backslashbig"] = 0x2216;
-  t["backslashBig"] = 0x2216;
-  t["backslashBigg"] = 0x2216;
-  t["backslashbigg"] = 0x2216;
-  t["bardbl"] = 0x2016;
-  t["bracehtipdownleft"] = 0xfe37;
-  t["bracehtipdownright"] = 0xfe37;
-  t["bracehtipupleft"] = 0xfe38;
-  t["bracehtipupright"] = 0xfe38;
-  t["braceleftBig"] = 0x007b;
-  t["braceleftbig"] = 0x007b;
-  t["braceleftbigg"] = 0x007b;
-  t["braceleftBigg"] = 0x007b;
-  t["bracerightBig"] = 0x007d;
-  t["bracerightbig"] = 0x007d;
-  t["bracerightbigg"] = 0x007d;
-  t["bracerightBigg"] = 0x007d;
-  t["bracketleftbig"] = 0x005b;
-  t["bracketleftBig"] = 0x005b;
-  t["bracketleftbigg"] = 0x005b;
-  t["bracketleftBigg"] = 0x005b;
-  t["bracketrightBig"] = 0x005d;
-  t["bracketrightbig"] = 0x005d;
-  t["bracketrightbigg"] = 0x005d;
-  t["bracketrightBigg"] = 0x005d;
-  t["ceilingleftbig"] = 0x2308;
-  t["ceilingleftBig"] = 0x2308;
-  t["ceilingleftBigg"] = 0x2308;
-  t["ceilingleftbigg"] = 0x2308;
-  t["ceilingrightbig"] = 0x2309;
-  t["ceilingrightBig"] = 0x2309;
-  t["ceilingrightbigg"] = 0x2309;
-  t["ceilingrightBigg"] = 0x2309;
-  t["circledotdisplay"] = 0x2299;
-  t["circledottext"] = 0x2299;
-  t["circlemultiplydisplay"] = 0x2297;
-  t["circlemultiplytext"] = 0x2297;
-  t["circleplusdisplay"] = 0x2295;
-  t["circleplustext"] = 0x2295;
-  t["contintegraldisplay"] = 0x222e;
-  t["contintegraltext"] = 0x222e;
-  t["coproductdisplay"] = 0x2210;
-  t["coproducttext"] = 0x2210;
-  t["floorleftBig"] = 0x230a;
-  t["floorleftbig"] = 0x230a;
-  t["floorleftbigg"] = 0x230a;
-  t["floorleftBigg"] = 0x230a;
-  t["floorrightbig"] = 0x230b;
-  t["floorrightBig"] = 0x230b;
-  t["floorrightBigg"] = 0x230b;
-  t["floorrightbigg"] = 0x230b;
-  t["hatwide"] = 0x0302;
-  t["hatwider"] = 0x0302;
-  t["hatwidest"] = 0x0302;
-  t["intercal"] = 0x1d40;
-  t["integraldisplay"] = 0x222b;
-  t["integraltext"] = 0x222b;
-  t["intersectiondisplay"] = 0x22c2;
-  t["intersectiontext"] = 0x22c2;
-  t["logicalanddisplay"] = 0x2227;
-  t["logicalandtext"] = 0x2227;
-  t["logicalordisplay"] = 0x2228;
-  t["logicalortext"] = 0x2228;
-  t["parenleftBig"] = 0x0028;
-  t["parenleftbig"] = 0x0028;
-  t["parenleftBigg"] = 0x0028;
-  t["parenleftbigg"] = 0x0028;
-  t["parenrightBig"] = 0x0029;
-  t["parenrightbig"] = 0x0029;
-  t["parenrightBigg"] = 0x0029;
-  t["parenrightbigg"] = 0x0029;
-  t["prime"] = 0x2032;
-  t["productdisplay"] = 0x220f;
-  t["producttext"] = 0x220f;
-  t["radicalbig"] = 0x221a;
-  t["radicalBig"] = 0x221a;
-  t["radicalBigg"] = 0x221a;
-  t["radicalbigg"] = 0x221a;
-  t["radicalbt"] = 0x221a;
-  t["radicaltp"] = 0x221a;
-  t["radicalvertex"] = 0x221a;
-  t["slashbig"] = 0x002f;
-  t["slashBig"] = 0x002f;
-  t["slashBigg"] = 0x002f;
-  t["slashbigg"] = 0x002f;
-  t["summationdisplay"] = 0x2211;
-  t["summationtext"] = 0x2211;
-  t["tildewide"] = 0x02dc;
-  t["tildewider"] = 0x02dc;
-  t["tildewidest"] = 0x02dc;
-  t["uniondisplay"] = 0x22c3;
-  t["unionmultidisplay"] = 0x228e;
-  t["unionmultitext"] = 0x228e;
-  t["unionsqdisplay"] = 0x2294;
-  t["unionsqtext"] = 0x2294;
-  t["uniontext"] = 0x22c3;
-  t["vextenddouble"] = 0x2225;
-  t["vextendsingle"] = 0x2223;
+  t.angbracketleftbig = 0x2329;
+  t.angbracketleftBig = 0x2329;
+  t.angbracketleftbigg = 0x2329;
+  t.angbracketleftBigg = 0x2329;
+  t.angbracketrightBig = 0x232a;
+  t.angbracketrightbig = 0x232a;
+  t.angbracketrightBigg = 0x232a;
+  t.angbracketrightbigg = 0x232a;
+  t.arrowhookleft = 0x21aa;
+  t.arrowhookright = 0x21a9;
+  t.arrowlefttophalf = 0x21bc;
+  t.arrowleftbothalf = 0x21bd;
+  t.arrownortheast = 0x2197;
+  t.arrownorthwest = 0x2196;
+  t.arrowrighttophalf = 0x21c0;
+  t.arrowrightbothalf = 0x21c1;
+  t.arrowsoutheast = 0x2198;
+  t.arrowsouthwest = 0x2199;
+  t.backslashbig = 0x2216;
+  t.backslashBig = 0x2216;
+  t.backslashBigg = 0x2216;
+  t.backslashbigg = 0x2216;
+  t.bardbl = 0x2016;
+  t.bracehtipdownleft = 0xfe37;
+  t.bracehtipdownright = 0xfe37;
+  t.bracehtipupleft = 0xfe38;
+  t.bracehtipupright = 0xfe38;
+  t.braceleftBig = 0x007b;
+  t.braceleftbig = 0x007b;
+  t.braceleftbigg = 0x007b;
+  t.braceleftBigg = 0x007b;
+  t.bracerightBig = 0x007d;
+  t.bracerightbig = 0x007d;
+  t.bracerightbigg = 0x007d;
+  t.bracerightBigg = 0x007d;
+  t.bracketleftbig = 0x005b;
+  t.bracketleftBig = 0x005b;
+  t.bracketleftbigg = 0x005b;
+  t.bracketleftBigg = 0x005b;
+  t.bracketrightBig = 0x005d;
+  t.bracketrightbig = 0x005d;
+  t.bracketrightbigg = 0x005d;
+  t.bracketrightBigg = 0x005d;
+  t.ceilingleftbig = 0x2308;
+  t.ceilingleftBig = 0x2308;
+  t.ceilingleftBigg = 0x2308;
+  t.ceilingleftbigg = 0x2308;
+  t.ceilingrightbig = 0x2309;
+  t.ceilingrightBig = 0x2309;
+  t.ceilingrightbigg = 0x2309;
+  t.ceilingrightBigg = 0x2309;
+  t.circledotdisplay = 0x2299;
+  t.circledottext = 0x2299;
+  t.circlemultiplydisplay = 0x2297;
+  t.circlemultiplytext = 0x2297;
+  t.circleplusdisplay = 0x2295;
+  t.circleplustext = 0x2295;
+  t.contintegraldisplay = 0x222e;
+  t.contintegraltext = 0x222e;
+  t.coproductdisplay = 0x2210;
+  t.coproducttext = 0x2210;
+  t.floorleftBig = 0x230a;
+  t.floorleftbig = 0x230a;
+  t.floorleftbigg = 0x230a;
+  t.floorleftBigg = 0x230a;
+  t.floorrightbig = 0x230b;
+  t.floorrightBig = 0x230b;
+  t.floorrightBigg = 0x230b;
+  t.floorrightbigg = 0x230b;
+  t.hatwide = 0x0302;
+  t.hatwider = 0x0302;
+  t.hatwidest = 0x0302;
+  t.intercal = 0x1d40;
+  t.integraldisplay = 0x222b;
+  t.integraltext = 0x222b;
+  t.intersectiondisplay = 0x22c2;
+  t.intersectiontext = 0x22c2;
+  t.logicalanddisplay = 0x2227;
+  t.logicalandtext = 0x2227;
+  t.logicalordisplay = 0x2228;
+  t.logicalortext = 0x2228;
+  t.parenleftBig = 0x0028;
+  t.parenleftbig = 0x0028;
+  t.parenleftBigg = 0x0028;
+  t.parenleftbigg = 0x0028;
+  t.parenrightBig = 0x0029;
+  t.parenrightbig = 0x0029;
+  t.parenrightBigg = 0x0029;
+  t.parenrightbigg = 0x0029;
+  t.prime = 0x2032;
+  t.productdisplay = 0x220f;
+  t.producttext = 0x220f;
+  t.radicalbig = 0x221a;
+  t.radicalBig = 0x221a;
+  t.radicalBigg = 0x221a;
+  t.radicalbigg = 0x221a;
+  t.radicalbt = 0x221a;
+  t.radicaltp = 0x221a;
+  t.radicalvertex = 0x221a;
+  t.slashbig = 0x002f;
+  t.slashBig = 0x002f;
+  t.slashBigg = 0x002f;
+  t.slashbigg = 0x002f;
+  t.summationdisplay = 0x2211;
+  t.summationtext = 0x2211;
+  t.tildewide = 0x02dc;
+  t.tildewider = 0x02dc;
+  t.tildewidest = 0x02dc;
+  t.uniondisplay = 0x22c3;
+  t.unionmultidisplay = 0x228e;
+  t.unionmultitext = 0x228e;
+  t.unionsqdisplay = 0x2294;
+  t.unionsqtext = 0x2294;
+  t.uniontext = 0x22c3;
+  t.vextenddouble = 0x2225;
+  t.vextendsingle = 0x2223;
 });
 var getDingbatsGlyphsUnicode = getLookupTableFactory(function (t) {
-  t["space"] = 0x0020;
-  t["a1"] = 0x2701;
-  t["a2"] = 0x2702;
-  t["a202"] = 0x2703;
-  t["a3"] = 0x2704;
-  t["a4"] = 0x260e;
-  t["a5"] = 0x2706;
-  t["a119"] = 0x2707;
-  t["a118"] = 0x2708;
-  t["a117"] = 0x2709;
-  t["a11"] = 0x261b;
-  t["a12"] = 0x261e;
-  t["a13"] = 0x270c;
-  t["a14"] = 0x270d;
-  t["a15"] = 0x270e;
-  t["a16"] = 0x270f;
-  t["a105"] = 0x2710;
-  t["a17"] = 0x2711;
-  t["a18"] = 0x2712;
-  t["a19"] = 0x2713;
-  t["a20"] = 0x2714;
-  t["a21"] = 0x2715;
-  t["a22"] = 0x2716;
-  t["a23"] = 0x2717;
-  t["a24"] = 0x2718;
-  t["a25"] = 0x2719;
-  t["a26"] = 0x271a;
-  t["a27"] = 0x271b;
-  t["a28"] = 0x271c;
-  t["a6"] = 0x271d;
-  t["a7"] = 0x271e;
-  t["a8"] = 0x271f;
-  t["a9"] = 0x2720;
-  t["a10"] = 0x2721;
-  t["a29"] = 0x2722;
-  t["a30"] = 0x2723;
-  t["a31"] = 0x2724;
-  t["a32"] = 0x2725;
-  t["a33"] = 0x2726;
-  t["a34"] = 0x2727;
-  t["a35"] = 0x2605;
-  t["a36"] = 0x2729;
-  t["a37"] = 0x272a;
-  t["a38"] = 0x272b;
-  t["a39"] = 0x272c;
-  t["a40"] = 0x272d;
-  t["a41"] = 0x272e;
-  t["a42"] = 0x272f;
-  t["a43"] = 0x2730;
-  t["a44"] = 0x2731;
-  t["a45"] = 0x2732;
-  t["a46"] = 0x2733;
-  t["a47"] = 0x2734;
-  t["a48"] = 0x2735;
-  t["a49"] = 0x2736;
-  t["a50"] = 0x2737;
-  t["a51"] = 0x2738;
-  t["a52"] = 0x2739;
-  t["a53"] = 0x273a;
-  t["a54"] = 0x273b;
-  t["a55"] = 0x273c;
-  t["a56"] = 0x273d;
-  t["a57"] = 0x273e;
-  t["a58"] = 0x273f;
-  t["a59"] = 0x2740;
-  t["a60"] = 0x2741;
-  t["a61"] = 0x2742;
-  t["a62"] = 0x2743;
-  t["a63"] = 0x2744;
-  t["a64"] = 0x2745;
-  t["a65"] = 0x2746;
-  t["a66"] = 0x2747;
-  t["a67"] = 0x2748;
-  t["a68"] = 0x2749;
-  t["a69"] = 0x274a;
-  t["a70"] = 0x274b;
-  t["a71"] = 0x25cf;
-  t["a72"] = 0x274d;
-  t["a73"] = 0x25a0;
-  t["a74"] = 0x274f;
-  t["a203"] = 0x2750;
-  t["a75"] = 0x2751;
-  t["a204"] = 0x2752;
-  t["a76"] = 0x25b2;
-  t["a77"] = 0x25bc;
-  t["a78"] = 0x25c6;
-  t["a79"] = 0x2756;
-  t["a81"] = 0x25d7;
-  t["a82"] = 0x2758;
-  t["a83"] = 0x2759;
-  t["a84"] = 0x275a;
-  t["a97"] = 0x275b;
-  t["a98"] = 0x275c;
-  t["a99"] = 0x275d;
-  t["a100"] = 0x275e;
-  t["a101"] = 0x2761;
-  t["a102"] = 0x2762;
-  t["a103"] = 0x2763;
-  t["a104"] = 0x2764;
-  t["a106"] = 0x2765;
-  t["a107"] = 0x2766;
-  t["a108"] = 0x2767;
-  t["a112"] = 0x2663;
-  t["a111"] = 0x2666;
-  t["a110"] = 0x2665;
-  t["a109"] = 0x2660;
-  t["a120"] = 0x2460;
-  t["a121"] = 0x2461;
-  t["a122"] = 0x2462;
-  t["a123"] = 0x2463;
-  t["a124"] = 0x2464;
-  t["a125"] = 0x2465;
-  t["a126"] = 0x2466;
-  t["a127"] = 0x2467;
-  t["a128"] = 0x2468;
-  t["a129"] = 0x2469;
-  t["a130"] = 0x2776;
-  t["a131"] = 0x2777;
-  t["a132"] = 0x2778;
-  t["a133"] = 0x2779;
-  t["a134"] = 0x277a;
-  t["a135"] = 0x277b;
-  t["a136"] = 0x277c;
-  t["a137"] = 0x277d;
-  t["a138"] = 0x277e;
-  t["a139"] = 0x277f;
-  t["a140"] = 0x2780;
-  t["a141"] = 0x2781;
-  t["a142"] = 0x2782;
-  t["a143"] = 0x2783;
-  t["a144"] = 0x2784;
-  t["a145"] = 0x2785;
-  t["a146"] = 0x2786;
-  t["a147"] = 0x2787;
-  t["a148"] = 0x2788;
-  t["a149"] = 0x2789;
-  t["a150"] = 0x278a;
-  t["a151"] = 0x278b;
-  t["a152"] = 0x278c;
-  t["a153"] = 0x278d;
-  t["a154"] = 0x278e;
-  t["a155"] = 0x278f;
-  t["a156"] = 0x2790;
-  t["a157"] = 0x2791;
-  t["a158"] = 0x2792;
-  t["a159"] = 0x2793;
-  t["a160"] = 0x2794;
-  t["a161"] = 0x2192;
-  t["a163"] = 0x2194;
-  t["a164"] = 0x2195;
-  t["a196"] = 0x2798;
-  t["a165"] = 0x2799;
-  t["a192"] = 0x279a;
-  t["a166"] = 0x279b;
-  t["a167"] = 0x279c;
-  t["a168"] = 0x279d;
-  t["a169"] = 0x279e;
-  t["a170"] = 0x279f;
-  t["a171"] = 0x27a0;
-  t["a172"] = 0x27a1;
-  t["a173"] = 0x27a2;
-  t["a162"] = 0x27a3;
-  t["a174"] = 0x27a4;
-  t["a175"] = 0x27a5;
-  t["a176"] = 0x27a6;
-  t["a177"] = 0x27a7;
-  t["a178"] = 0x27a8;
-  t["a179"] = 0x27a9;
-  t["a193"] = 0x27aa;
-  t["a180"] = 0x27ab;
-  t["a199"] = 0x27ac;
-  t["a181"] = 0x27ad;
-  t["a200"] = 0x27ae;
-  t["a182"] = 0x27af;
-  t["a201"] = 0x27b1;
-  t["a183"] = 0x27b2;
-  t["a184"] = 0x27b3;
-  t["a197"] = 0x27b4;
-  t["a185"] = 0x27b5;
-  t["a194"] = 0x27b6;
-  t["a198"] = 0x27b7;
-  t["a186"] = 0x27b8;
-  t["a195"] = 0x27b9;
-  t["a187"] = 0x27ba;
-  t["a188"] = 0x27bb;
-  t["a189"] = 0x27bc;
-  t["a190"] = 0x27bd;
-  t["a191"] = 0x27be;
-  t["a89"] = 0x2768;
-  t["a90"] = 0x2769;
-  t["a93"] = 0x276a;
-  t["a94"] = 0x276b;
-  t["a91"] = 0x276c;
-  t["a92"] = 0x276d;
-  t["a205"] = 0x276e;
-  t["a85"] = 0x276f;
-  t["a206"] = 0x2770;
-  t["a86"] = 0x2771;
-  t["a87"] = 0x2772;
-  t["a88"] = 0x2773;
-  t["a95"] = 0x2774;
-  t["a96"] = 0x2775;
+  t.space = 0x0020;
+  t.a1 = 0x2701;
+  t.a2 = 0x2702;
+  t.a202 = 0x2703;
+  t.a3 = 0x2704;
+  t.a4 = 0x260e;
+  t.a5 = 0x2706;
+  t.a119 = 0x2707;
+  t.a118 = 0x2708;
+  t.a117 = 0x2709;
+  t.a11 = 0x261b;
+  t.a12 = 0x261e;
+  t.a13 = 0x270c;
+  t.a14 = 0x270d;
+  t.a15 = 0x270e;
+  t.a16 = 0x270f;
+  t.a105 = 0x2710;
+  t.a17 = 0x2711;
+  t.a18 = 0x2712;
+  t.a19 = 0x2713;
+  t.a20 = 0x2714;
+  t.a21 = 0x2715;
+  t.a22 = 0x2716;
+  t.a23 = 0x2717;
+  t.a24 = 0x2718;
+  t.a25 = 0x2719;
+  t.a26 = 0x271a;
+  t.a27 = 0x271b;
+  t.a28 = 0x271c;
+  t.a6 = 0x271d;
+  t.a7 = 0x271e;
+  t.a8 = 0x271f;
+  t.a9 = 0x2720;
+  t.a10 = 0x2721;
+  t.a29 = 0x2722;
+  t.a30 = 0x2723;
+  t.a31 = 0x2724;
+  t.a32 = 0x2725;
+  t.a33 = 0x2726;
+  t.a34 = 0x2727;
+  t.a35 = 0x2605;
+  t.a36 = 0x2729;
+  t.a37 = 0x272a;
+  t.a38 = 0x272b;
+  t.a39 = 0x272c;
+  t.a40 = 0x272d;
+  t.a41 = 0x272e;
+  t.a42 = 0x272f;
+  t.a43 = 0x2730;
+  t.a44 = 0x2731;
+  t.a45 = 0x2732;
+  t.a46 = 0x2733;
+  t.a47 = 0x2734;
+  t.a48 = 0x2735;
+  t.a49 = 0x2736;
+  t.a50 = 0x2737;
+  t.a51 = 0x2738;
+  t.a52 = 0x2739;
+  t.a53 = 0x273a;
+  t.a54 = 0x273b;
+  t.a55 = 0x273c;
+  t.a56 = 0x273d;
+  t.a57 = 0x273e;
+  t.a58 = 0x273f;
+  t.a59 = 0x2740;
+  t.a60 = 0x2741;
+  t.a61 = 0x2742;
+  t.a62 = 0x2743;
+  t.a63 = 0x2744;
+  t.a64 = 0x2745;
+  t.a65 = 0x2746;
+  t.a66 = 0x2747;
+  t.a67 = 0x2748;
+  t.a68 = 0x2749;
+  t.a69 = 0x274a;
+  t.a70 = 0x274b;
+  t.a71 = 0x25cf;
+  t.a72 = 0x274d;
+  t.a73 = 0x25a0;
+  t.a74 = 0x274f;
+  t.a203 = 0x2750;
+  t.a75 = 0x2751;
+  t.a204 = 0x2752;
+  t.a76 = 0x25b2;
+  t.a77 = 0x25bc;
+  t.a78 = 0x25c6;
+  t.a79 = 0x2756;
+  t.a81 = 0x25d7;
+  t.a82 = 0x2758;
+  t.a83 = 0x2759;
+  t.a84 = 0x275a;
+  t.a97 = 0x275b;
+  t.a98 = 0x275c;
+  t.a99 = 0x275d;
+  t.a100 = 0x275e;
+  t.a101 = 0x2761;
+  t.a102 = 0x2762;
+  t.a103 = 0x2763;
+  t.a104 = 0x2764;
+  t.a106 = 0x2765;
+  t.a107 = 0x2766;
+  t.a108 = 0x2767;
+  t.a112 = 0x2663;
+  t.a111 = 0x2666;
+  t.a110 = 0x2665;
+  t.a109 = 0x2660;
+  t.a120 = 0x2460;
+  t.a121 = 0x2461;
+  t.a122 = 0x2462;
+  t.a123 = 0x2463;
+  t.a124 = 0x2464;
+  t.a125 = 0x2465;
+  t.a126 = 0x2466;
+  t.a127 = 0x2467;
+  t.a128 = 0x2468;
+  t.a129 = 0x2469;
+  t.a130 = 0x2776;
+  t.a131 = 0x2777;
+  t.a132 = 0x2778;
+  t.a133 = 0x2779;
+  t.a134 = 0x277a;
+  t.a135 = 0x277b;
+  t.a136 = 0x277c;
+  t.a137 = 0x277d;
+  t.a138 = 0x277e;
+  t.a139 = 0x277f;
+  t.a140 = 0x2780;
+  t.a141 = 0x2781;
+  t.a142 = 0x2782;
+  t.a143 = 0x2783;
+  t.a144 = 0x2784;
+  t.a145 = 0x2785;
+  t.a146 = 0x2786;
+  t.a147 = 0x2787;
+  t.a148 = 0x2788;
+  t.a149 = 0x2789;
+  t.a150 = 0x278a;
+  t.a151 = 0x278b;
+  t.a152 = 0x278c;
+  t.a153 = 0x278d;
+  t.a154 = 0x278e;
+  t.a155 = 0x278f;
+  t.a156 = 0x2790;
+  t.a157 = 0x2791;
+  t.a158 = 0x2792;
+  t.a159 = 0x2793;
+  t.a160 = 0x2794;
+  t.a161 = 0x2192;
+  t.a163 = 0x2194;
+  t.a164 = 0x2195;
+  t.a196 = 0x2798;
+  t.a165 = 0x2799;
+  t.a192 = 0x279a;
+  t.a166 = 0x279b;
+  t.a167 = 0x279c;
+  t.a168 = 0x279d;
+  t.a169 = 0x279e;
+  t.a170 = 0x279f;
+  t.a171 = 0x27a0;
+  t.a172 = 0x27a1;
+  t.a173 = 0x27a2;
+  t.a162 = 0x27a3;
+  t.a174 = 0x27a4;
+  t.a175 = 0x27a5;
+  t.a176 = 0x27a6;
+  t.a177 = 0x27a7;
+  t.a178 = 0x27a8;
+  t.a179 = 0x27a9;
+  t.a193 = 0x27aa;
+  t.a180 = 0x27ab;
+  t.a199 = 0x27ac;
+  t.a181 = 0x27ad;
+  t.a200 = 0x27ae;
+  t.a182 = 0x27af;
+  t.a201 = 0x27b1;
+  t.a183 = 0x27b2;
+  t.a184 = 0x27b3;
+  t.a197 = 0x27b4;
+  t.a185 = 0x27b5;
+  t.a194 = 0x27b6;
+  t.a198 = 0x27b7;
+  t.a186 = 0x27b8;
+  t.a195 = 0x27b9;
+  t.a187 = 0x27ba;
+  t.a188 = 0x27bb;
+  t.a189 = 0x27bc;
+  t.a190 = 0x27bd;
+  t.a191 = 0x27be;
+  t.a89 = 0x2768;
+  t.a90 = 0x2769;
+  t.a93 = 0x276a;
+  t.a94 = 0x276b;
+  t.a91 = 0x276c;
+  t.a92 = 0x276d;
+  t.a205 = 0x276e;
+  t.a85 = 0x276f;
+  t.a206 = 0x2770;
+  t.a86 = 0x2771;
+  t.a87 = 0x2772;
+  t.a88 = 0x2773;
+  t.a95 = 0x2774;
+  t.a96 = 0x2775;
   t[".notdef"] = 0x0000;
 });
 exports.getGlyphsUnicode = getGlyphsUnicode;

+ 19 - 44
lib/core/image.js

@@ -39,17 +39,6 @@ var _jpeg_stream = require("./jpeg_stream.js");
 var _jpx = require("./jpx.js");
 
 var PDFImage = function PDFImageClosure() {
-  function handleImageData(image, nativeDecoder) {
-    if (nativeDecoder && nativeDecoder.canDecode(image)) {
-      return nativeDecoder.decode(image).catch(reason => {
-        (0, _util.warn)("Native image decoding failed -- trying to recover: " + (reason && reason.message));
-        return image;
-      });
-    }
-
-    return Promise.resolve(image);
-  }
-
   function decodeAndClamp(value, addend, coefficient, max) {
     value = addend + value * coefficient;
 
@@ -246,51 +235,37 @@ var PDFImage = function PDFImageClosure() {
   }
 
   PDFImage.buildImage = function ({
-    handler,
     xref,
     res,
     image,
     isInline = false,
-    nativeDecoder = null,
     pdfFunctionFactory
   }) {
-    var imagePromise = handleImageData(image, nativeDecoder);
-    var smaskPromise;
-    var maskPromise;
-    var smask = image.dict.get("SMask");
-    var mask = image.dict.get("Mask");
+    const imageData = image;
+    let smaskData = null;
+    let maskData = null;
+    const smask = image.dict.get("SMask");
+    const mask = image.dict.get("Mask");
 
     if (smask) {
-      smaskPromise = handleImageData(smask, nativeDecoder);
-      maskPromise = Promise.resolve(null);
-    } else {
-      smaskPromise = Promise.resolve(null);
-
-      if (mask) {
-        if ((0, _primitives.isStream)(mask)) {
-          maskPromise = handleImageData(mask, nativeDecoder);
-        } else if (Array.isArray(mask)) {
-          maskPromise = Promise.resolve(mask);
-        } else {
-          (0, _util.warn)("Unsupported mask format.");
-          maskPromise = Promise.resolve(null);
-        }
+      smaskData = smask;
+    } else if (mask) {
+      if ((0, _primitives.isStream)(mask) || Array.isArray(mask)) {
+        maskData = mask;
       } else {
-        maskPromise = Promise.resolve(null);
+        (0, _util.warn)("Unsupported mask format.");
       }
     }
 
-    return Promise.all([imagePromise, smaskPromise, maskPromise]).then(function ([imageData, smaskData, maskData]) {
-      return new PDFImage({
-        xref,
-        res,
-        image: imageData,
-        isInline,
-        smask: smaskData,
-        mask: maskData,
-        pdfFunctionFactory
-      });
-    });
+    return Promise.resolve(new PDFImage({
+      xref,
+      res,
+      image: imageData,
+      isInline,
+      smask: smaskData,
+      mask: maskData,
+      pdfFunctionFactory
+    }));
   };
 
   PDFImage.createMask = function ({

+ 123 - 47
lib/core/image_utils.js

@@ -24,71 +24,147 @@
 Object.defineProperty(exports, "__esModule", {
   value: true
 });
-exports.NativeImageDecoder = void 0;
-
-var _colorspace = require("./colorspace.js");
-
-var _jpeg_stream = require("./jpeg_stream.js");
-
-var _stream = require("./stream.js");
-
-class NativeImageDecoder {
-  constructor({
-    xref,
-    resources,
-    handler,
-    forceDataSchema = false,
-    pdfFunctionFactory
-  }) {
-    this.xref = xref;
-    this.resources = resources;
-    this.handler = handler;
-    this.forceDataSchema = forceDataSchema;
-    this.pdfFunctionFactory = pdfFunctionFactory;
+exports.GlobalImageCache = exports.LocalImageCache = void 0;
+
+var _util = require("../shared/util.js");
+
+var _primitives = require("./primitives.js");
+
+class LocalImageCache {
+  constructor() {
+    this._nameRefMap = new Map();
+    this._imageMap = new Map();
+    this._imageCache = new _primitives.RefSetCache();
   }
 
-  canDecode(image) {
-    return image instanceof _jpeg_stream.JpegStream && NativeImageDecoder.isDecodable(image, this.xref, this.resources, this.pdfFunctionFactory) && image.maybeValidDimensions;
+  getByName(name) {
+    const ref = this._nameRefMap.get(name);
+
+    if (ref) {
+      return this.getByRef(ref);
+    }
+
+    return this._imageMap.get(name) || null;
   }
 
-  decode(image) {
-    const dict = image.dict;
-    let colorSpace = dict.get("ColorSpace", "CS");
-    colorSpace = _colorspace.ColorSpace.parse(colorSpace, this.xref, this.resources, this.pdfFunctionFactory);
-    return this.handler.sendWithPromise("JpegDecode", [image.getIR(this.forceDataSchema), colorSpace.numComps]).then(function ({
-      data,
-      width,
-      height
-    }) {
-      return new _stream.Stream(data, 0, data.length, dict);
-    });
+  getByRef(ref) {
+    return this._imageCache.get(ref) || null;
   }
 
-  static isSupported(image, xref, res, pdfFunctionFactory) {
-    const dict = image.dict;
+  set(name, ref = null, data) {
+    if (!name) {
+      throw new Error('LocalImageCache.set - expected "name" argument.');
+    }
 
-    if (dict.has("DecodeParms") || dict.has("DP")) {
-      return false;
+    if (ref) {
+      if (this._imageCache.has(ref)) {
+        return;
+      }
+
+      this._nameRefMap.set(name, ref);
+
+      this._imageCache.put(ref, data);
+
+      return;
+    }
+
+    if (this._imageMap.has(name)) {
+      return;
     }
 
-    const cs = _colorspace.ColorSpace.parse(dict.get("ColorSpace", "CS"), xref, res, pdfFunctionFactory);
+    this._imageMap.set(name, data);
+  }
+
+}
+
+exports.LocalImageCache = LocalImageCache;
 
-    return (cs.name === "DeviceGray" || cs.name === "DeviceRGB") && cs.isDefaultDecode(dict.getArray("Decode", "D"));
+class GlobalImageCache {
+  static get NUM_PAGES_THRESHOLD() {
+    return (0, _util.shadow)(this, "NUM_PAGES_THRESHOLD", 2);
   }
 
-  static isDecodable(image, xref, res, pdfFunctionFactory) {
-    const dict = image.dict;
+  static get MAX_IMAGES_TO_CACHE() {
+    return (0, _util.shadow)(this, "MAX_IMAGES_TO_CACHE", 10);
+  }
+
+  constructor() {
+    this._refCache = new _primitives.RefSetCache();
+    this._imageCache = new _primitives.RefSetCache();
+  }
 
-    if (dict.has("DecodeParms") || dict.has("DP")) {
+  shouldCache(ref, pageIndex) {
+    const pageIndexSet = this._refCache.get(ref);
+
+    const numPages = pageIndexSet ? pageIndexSet.size + (pageIndexSet.has(pageIndex) ? 0 : 1) : 1;
+
+    if (numPages < GlobalImageCache.NUM_PAGES_THRESHOLD) {
+      return false;
+    }
+
+    if (!this._imageCache.has(ref) && this._imageCache.size >= GlobalImageCache.MAX_IMAGES_TO_CACHE) {
       return false;
     }
 
-    const cs = _colorspace.ColorSpace.parse(dict.get("ColorSpace", "CS"), xref, res, pdfFunctionFactory);
+    return true;
+  }
+
+  addPageIndex(ref, pageIndex) {
+    let pageIndexSet = this._refCache.get(ref);
+
+    if (!pageIndexSet) {
+      pageIndexSet = new Set();
+
+      this._refCache.put(ref, pageIndexSet);
+    }
+
+    pageIndexSet.add(pageIndex);
+  }
+
+  getData(ref, pageIndex) {
+    if (!this._refCache.has(ref)) {
+      return null;
+    }
+
+    const pageIndexSet = this._refCache.get(ref);
+
+    if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) {
+      return null;
+    }
+
+    if (!this._imageCache.has(ref)) {
+      return null;
+    }
+
+    pageIndexSet.add(pageIndex);
+    return this._imageCache.get(ref);
+  }
+
+  setData(ref, data) {
+    if (!this._refCache.has(ref)) {
+      throw new Error('GlobalImageCache.setData - expected "addPageIndex" to have been called.');
+    }
+
+    if (this._imageCache.has(ref)) {
+      return;
+    }
+
+    if (this._imageCache.size >= GlobalImageCache.MAX_IMAGES_TO_CACHE) {
+      (0, _util.info)("GlobalImageCache.setData - ignoring image above MAX_IMAGES_TO_CACHE.");
+      return;
+    }
+
+    this._imageCache.put(ref, data);
+  }
+
+  clear(onlyData = false) {
+    if (!onlyData) {
+      this._refCache.clear();
+    }
 
-    const bpc = dict.get("BitsPerComponent", "BPC") || 1;
-    return (cs.numComps === 1 || cs.numComps === 3) && cs.isDefaultDecode(dict.getArray("Decode", "D"), bpc);
+    this._imageCache.clear();
   }
 
 }
 
-exports.NativeImageDecoder = NativeImageDecoder;
+exports.GlobalImageCache = GlobalImageCache;

+ 2 - 116
lib/core/jpeg_stream.js

@@ -26,14 +26,14 @@ Object.defineProperty(exports, "__esModule", {
 });
 exports.JpegStream = void 0;
 
-var _util = require("../shared/util.js");
-
 var _stream = require("./stream.js");
 
 var _primitives = require("./primitives.js");
 
 var _jpg = require("./jpg.js");
 
+var _util = require("../shared/util.js");
+
 const JpegStream = function JpegStreamClosure() {
   function JpegStream(stream, maybeLength, dict, params) {
     let ch;
@@ -116,120 +116,6 @@ const JpegStream = function JpegStreamClosure() {
     this.eof = true;
   };
 
-  Object.defineProperty(JpegStream.prototype, "maybeValidDimensions", {
-    get: function JpegStream_maybeValidDimensions() {
-      const {
-        dict,
-        stream
-      } = this;
-      const dictHeight = dict.get("Height", "H");
-      const startPos = stream.pos;
-      let validDimensions = true,
-          foundSOF = false,
-          b;
-
-      while ((b = stream.getByte()) !== -1) {
-        if (b !== 0xff) {
-          continue;
-        }
-
-        switch (stream.getByte()) {
-          case 0xc0:
-          case 0xc1:
-          case 0xc2:
-            foundSOF = true;
-            stream.pos += 2;
-            stream.pos += 1;
-            const scanLines = stream.getUint16();
-
-            if (scanLines === dictHeight) {
-              break;
-            }
-
-            if (scanLines === 0) {
-              validDimensions = false;
-              break;
-            }
-
-            if (scanLines > dictHeight * 10) {
-              validDimensions = false;
-              break;
-            }
-
-            break;
-
-          case 0xc3:
-          case 0xc5:
-          case 0xc6:
-          case 0xc7:
-          case 0xc9:
-          case 0xca:
-          case 0xcb:
-          case 0xcd:
-          case 0xce:
-          case 0xcf:
-            foundSOF = true;
-            break;
-
-          case 0xc4:
-          case 0xcc:
-          case 0xda:
-          case 0xdb:
-          case 0xdc:
-          case 0xdd:
-          case 0xde:
-          case 0xdf:
-          case 0xe0:
-          case 0xe1:
-          case 0xe2:
-          case 0xe3:
-          case 0xe4:
-          case 0xe5:
-          case 0xe6:
-          case 0xe7:
-          case 0xe8:
-          case 0xe9:
-          case 0xea:
-          case 0xeb:
-          case 0xec:
-          case 0xed:
-          case 0xee:
-          case 0xef:
-          case 0xfe:
-            const markerLength = stream.getUint16();
-
-            if (markerLength > 2) {
-              stream.skip(markerLength - 2);
-            } else {
-              stream.skip(-2);
-            }
-
-            break;
-
-          case 0xff:
-            stream.skip(-1);
-            break;
-
-          case 0xd9:
-            foundSOF = true;
-            break;
-        }
-
-        if (foundSOF) {
-          break;
-        }
-      }
-
-      stream.pos = startPos;
-      return (0, _util.shadow)(this, "maybeValidDimensions", validDimensions);
-    },
-    configurable: true
-  });
-
-  JpegStream.prototype.getIR = function (forceDataSchema = false) {
-    return (0, _util.createObjectURL)(this.bytes, "image/jpeg", forceDataSchema);
-  };
-
   return JpegStream;
 }();
 

+ 47 - 55
lib/core/jpg.js

@@ -128,8 +128,8 @@ var JpegImage = function JpegImageClosure() {
   function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, parseDNLMarker = false) {
     var mcusPerLine = frame.mcusPerLine;
     var progressive = frame.progressive;
-    var startOffset = offset,
-        bitsData = 0,
+    const startOffset = offset;
+    let bitsData = 0,
         bitsCount = 0;
 
     function readBit() {
@@ -215,10 +215,10 @@ var JpegImage = function JpegImageClosure() {
       return n + (-1 << length) + 1;
     }
 
-    function decodeBaseline(component, offset) {
+    function decodeBaseline(component, blockOffset) {
       var t = decodeHuffman(component.huffmanTableDC);
       var diff = t === 0 ? 0 : receiveAndExtend(t);
-      component.blockData[offset] = component.pred += diff;
+      component.blockData[blockOffset] = component.pred += diff;
       var k = 1;
 
       while (k < 64) {
@@ -237,24 +237,24 @@ var JpegImage = function JpegImageClosure() {
 
         k += r;
         var z = dctZigZag[k];
-        component.blockData[offset + z] = receiveAndExtend(s);
+        component.blockData[blockOffset + z] = receiveAndExtend(s);
         k++;
       }
     }
 
-    function decodeDCFirst(component, offset) {
+    function decodeDCFirst(component, blockOffset) {
       var t = decodeHuffman(component.huffmanTableDC);
       var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;
-      component.blockData[offset] = component.pred += diff;
+      component.blockData[blockOffset] = component.pred += diff;
     }
 
-    function decodeDCSuccessive(component, offset) {
-      component.blockData[offset] |= readBit() << successive;
+    function decodeDCSuccessive(component, blockOffset) {
+      component.blockData[blockOffset] |= readBit() << successive;
     }
 
     var eobrun = 0;
 
-    function decodeACFirst(component, offset) {
+    function decodeACFirst(component, blockOffset) {
       if (eobrun > 0) {
         eobrun--;
         return;
@@ -280,7 +280,7 @@ var JpegImage = function JpegImageClosure() {
 
         k += r;
         var z = dctZigZag[k];
-        component.blockData[offset + z] = receiveAndExtend(s) * (1 << successive);
+        component.blockData[blockOffset + z] = receiveAndExtend(s) * (1 << successive);
         k++;
       }
     }
@@ -288,7 +288,7 @@ var JpegImage = function JpegImageClosure() {
     var successiveACState = 0,
         successiveACNextValue;
 
-    function decodeACSuccessive(component, offset) {
+    function decodeACSuccessive(component, blockOffset) {
       var k = spectralStart;
       var e = spectralEnd;
       var r = 0;
@@ -296,7 +296,7 @@ var JpegImage = function JpegImageClosure() {
       var rs;
 
       while (k <= e) {
-        const offsetZ = offset + dctZigZag[k];
+        const offsetZ = blockOffset + dctZigZag[k];
         const sign = component.blockData[offsetZ] < 0 ? -1 : 1;
 
         switch (successiveACState) {
@@ -375,15 +375,15 @@ var JpegImage = function JpegImageClosure() {
       var mcuCol = mcu % mcusPerLine;
       blockRow = mcuRow * component.v + row;
       var blockCol = mcuCol * component.h + col;
-      var offset = getBlockBufferOffset(component, blockRow, blockCol);
-      decode(component, offset);
+      const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);
+      decode(component, blockOffset);
     }
 
     function decodeBlock(component, decode, mcu) {
       blockRow = mcu / component.blocksPerLine | 0;
       var blockCol = mcu % component.blocksPerLine;
-      var offset = getBlockBufferOffset(component, blockRow, blockCol);
-      decode(component, offset);
+      const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);
+      decode(component, blockOffset);
     }
 
     var componentsLength = components.length;
@@ -412,37 +412,39 @@ var JpegImage = function JpegImageClosure() {
 
     var h, v;
 
-    while (mcu < mcuExpected) {
+    while (mcu <= mcuExpected) {
       var mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected;
 
-      for (i = 0; i < componentsLength; i++) {
-        components[i].pred = 0;
-      }
+      if (mcuToRead > 0) {
+        for (i = 0; i < componentsLength; i++) {
+          components[i].pred = 0;
+        }
 
-      eobrun = 0;
+        eobrun = 0;
 
-      if (componentsLength === 1) {
-        component = components[0];
+        if (componentsLength === 1) {
+          component = components[0];
 
-        for (n = 0; n < mcuToRead; n++) {
-          decodeBlock(component, decodeFn, mcu);
-          mcu++;
-        }
-      } else {
-        for (n = 0; n < mcuToRead; 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);
+          for (n = 0; n < mcuToRead; n++) {
+            decodeBlock(component, decodeFn, mcu);
+            mcu++;
+          }
+        } else {
+          for (n = 0; n < mcuToRead; 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++;
+            mcu++;
+          }
         }
       }
 
@@ -451,31 +453,21 @@ var JpegImage = function JpegImageClosure() {
 
       if (!fileMarker) {
         break;
-      } else if (fileMarker.invalid) {
-        (0, _util.warn)("decodeScan - unexpected MCU data, current marker is: " + fileMarker.invalid);
-        offset = fileMarker.offset;
       }
 
-      var marker = fileMarker && fileMarker.marker;
-
-      if (!marker || marker <= 0xff00) {
-        throw new JpegError("decodeScan - a valid marker was not found.");
+      if (fileMarker.invalid) {
+        const partialMsg = mcuToRead > 0 ? "unexpected" : "excessive";
+        (0, _util.warn)(`decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`);
+        offset = fileMarker.offset;
       }
 
-      if (marker >= 0xffd0 && marker <= 0xffd7) {
+      if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) {
         offset += 2;
       } else {
         break;
       }
     }
 
-    fileMarker = findNextFileMarker(data, offset);
-
-    if (fileMarker && fileMarker.invalid) {
-      (0, _util.warn)("decodeScan - unexpected Scan data, current marker is: " + fileMarker.invalid);
-      offset = fileMarker.offset;
-    }
-
     return offset - startOffset;
   }
 

+ 6 - 6
lib/core/jpx.js

@@ -785,7 +785,7 @@ var JpxImage = function JpxImageClosure() {
     var maxDecompositionLevelsCount = 0;
 
     for (c = 0; c < componentsCount; c++) {
-      var component = tile.components[c];
+      const component = tile.components[c];
       maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount);
     }
 
@@ -814,7 +814,7 @@ var JpxImage = function JpxImageClosure() {
       for (; r <= maxDecompositionLevelsCount; r++) {
         for (; p < maxNumPrecinctsInLevel[r]; p++) {
           for (; c < componentsCount; c++) {
-            var component = tile.components[c];
+            const component = tile.components[c];
 
             if (r > component.codingStyleParameters.decompositionLevelsCount) {
               continue;
@@ -1233,13 +1233,13 @@ var JpxImage = function JpxImageClosure() {
         var firstTimeInclusion = false;
         var valueReady;
 
-        if (codeblock["included"] !== undefined) {
+        if (codeblock.included !== undefined) {
           codeblockIncluded = !!readBits(1);
         } else {
           precinct = codeblock.precinct;
           var inclusionTree, zeroBitPlanesTree;
 
-          if (precinct["inclusionTree"] !== undefined) {
+          if (precinct.inclusionTree !== undefined) {
             inclusionTree = precinct.inclusionTree;
           } else {
             var width = precinct.cbxMax - precinct.cbxMin + 1;
@@ -1317,7 +1317,7 @@ var JpxImage = function JpxImageClosure() {
         var packetItem = queue.shift();
         codeblock = packetItem.codeblock;
 
-        if (codeblock["data"] === undefined) {
+        if (codeblock.data === undefined) {
           codeblock.data = [];
         }
 
@@ -1351,7 +1351,7 @@ var JpxImage = function JpxImageClosure() {
         continue;
       }
 
-      if (codeblock["data"] === undefined) {
+      if (codeblock.data === undefined) {
         continue;
       }
 

+ 2916 - 2916
lib/core/metrics.js

@@ -29,2941 +29,2941 @@ exports.getMetrics = void 0;
 var _core_utils = require("./core_utils.js");
 
 var getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) {
-  t["Courier"] = 600;
+  t.Courier = 600;
   t["Courier-Bold"] = 600;
   t["Courier-BoldOblique"] = 600;
   t["Courier-Oblique"] = 600;
-  t["Helvetica"] = (0, _core_utils.getLookupTableFactory)(function (t) {
-    t["space"] = 278;
-    t["exclam"] = 278;
-    t["quotedbl"] = 355;
-    t["numbersign"] = 556;
-    t["dollar"] = 556;
-    t["percent"] = 889;
-    t["ampersand"] = 667;
-    t["quoteright"] = 222;
-    t["parenleft"] = 333;
-    t["parenright"] = 333;
-    t["asterisk"] = 389;
-    t["plus"] = 584;
-    t["comma"] = 278;
-    t["hyphen"] = 333;
-    t["period"] = 278;
-    t["slash"] = 278;
-    t["zero"] = 556;
-    t["one"] = 556;
-    t["two"] = 556;
-    t["three"] = 556;
-    t["four"] = 556;
-    t["five"] = 556;
-    t["six"] = 556;
-    t["seven"] = 556;
-    t["eight"] = 556;
-    t["nine"] = 556;
-    t["colon"] = 278;
-    t["semicolon"] = 278;
-    t["less"] = 584;
-    t["equal"] = 584;
-    t["greater"] = 584;
-    t["question"] = 556;
-    t["at"] = 1015;
-    t["A"] = 667;
-    t["B"] = 667;
-    t["C"] = 722;
-    t["D"] = 722;
-    t["E"] = 667;
-    t["F"] = 611;
-    t["G"] = 778;
-    t["H"] = 722;
-    t["I"] = 278;
-    t["J"] = 500;
-    t["K"] = 667;
-    t["L"] = 556;
-    t["M"] = 833;
-    t["N"] = 722;
-    t["O"] = 778;
-    t["P"] = 667;
-    t["Q"] = 778;
-    t["R"] = 722;
-    t["S"] = 667;
-    t["T"] = 611;
-    t["U"] = 722;
-    t["V"] = 667;
-    t["W"] = 944;
-    t["X"] = 667;
-    t["Y"] = 667;
-    t["Z"] = 611;
-    t["bracketleft"] = 278;
-    t["backslash"] = 278;
-    t["bracketright"] = 278;
-    t["asciicircum"] = 469;
-    t["underscore"] = 556;
-    t["quoteleft"] = 222;
-    t["a"] = 556;
-    t["b"] = 556;
-    t["c"] = 500;
-    t["d"] = 556;
-    t["e"] = 556;
-    t["f"] = 278;
-    t["g"] = 556;
-    t["h"] = 556;
-    t["i"] = 222;
-    t["j"] = 222;
-    t["k"] = 500;
-    t["l"] = 222;
-    t["m"] = 833;
-    t["n"] = 556;
-    t["o"] = 556;
-    t["p"] = 556;
-    t["q"] = 556;
-    t["r"] = 333;
-    t["s"] = 500;
-    t["t"] = 278;
-    t["u"] = 556;
-    t["v"] = 500;
-    t["w"] = 722;
-    t["x"] = 500;
-    t["y"] = 500;
-    t["z"] = 500;
-    t["braceleft"] = 334;
-    t["bar"] = 260;
-    t["braceright"] = 334;
-    t["asciitilde"] = 584;
-    t["exclamdown"] = 333;
-    t["cent"] = 556;
-    t["sterling"] = 556;
-    t["fraction"] = 167;
-    t["yen"] = 556;
-    t["florin"] = 556;
-    t["section"] = 556;
-    t["currency"] = 556;
-    t["quotesingle"] = 191;
-    t["quotedblleft"] = 333;
-    t["guillemotleft"] = 556;
-    t["guilsinglleft"] = 333;
-    t["guilsinglright"] = 333;
-    t["fi"] = 500;
-    t["fl"] = 500;
-    t["endash"] = 556;
-    t["dagger"] = 556;
-    t["daggerdbl"] = 556;
-    t["periodcentered"] = 278;
-    t["paragraph"] = 537;
-    t["bullet"] = 350;
-    t["quotesinglbase"] = 222;
-    t["quotedblbase"] = 333;
-    t["quotedblright"] = 333;
-    t["guillemotright"] = 556;
-    t["ellipsis"] = 1000;
-    t["perthousand"] = 1000;
-    t["questiondown"] = 611;
-    t["grave"] = 333;
-    t["acute"] = 333;
-    t["circumflex"] = 333;
-    t["tilde"] = 333;
-    t["macron"] = 333;
-    t["breve"] = 333;
-    t["dotaccent"] = 333;
-    t["dieresis"] = 333;
-    t["ring"] = 333;
-    t["cedilla"] = 333;
-    t["hungarumlaut"] = 333;
-    t["ogonek"] = 333;
-    t["caron"] = 333;
-    t["emdash"] = 1000;
-    t["AE"] = 1000;
-    t["ordfeminine"] = 370;
-    t["Lslash"] = 556;
-    t["Oslash"] = 778;
-    t["OE"] = 1000;
-    t["ordmasculine"] = 365;
-    t["ae"] = 889;
-    t["dotlessi"] = 278;
-    t["lslash"] = 222;
-    t["oslash"] = 611;
-    t["oe"] = 944;
-    t["germandbls"] = 611;
-    t["Idieresis"] = 278;
-    t["eacute"] = 556;
-    t["abreve"] = 556;
-    t["uhungarumlaut"] = 556;
-    t["ecaron"] = 556;
-    t["Ydieresis"] = 667;
-    t["divide"] = 584;
-    t["Yacute"] = 667;
-    t["Acircumflex"] = 667;
-    t["aacute"] = 556;
-    t["Ucircumflex"] = 722;
-    t["yacute"] = 500;
-    t["scommaaccent"] = 500;
-    t["ecircumflex"] = 556;
-    t["Uring"] = 722;
-    t["Udieresis"] = 722;
-    t["aogonek"] = 556;
-    t["Uacute"] = 722;
-    t["uogonek"] = 556;
-    t["Edieresis"] = 667;
-    t["Dcroat"] = 722;
-    t["commaaccent"] = 250;
-    t["copyright"] = 737;
-    t["Emacron"] = 667;
-    t["ccaron"] = 500;
-    t["aring"] = 556;
-    t["Ncommaaccent"] = 722;
-    t["lacute"] = 222;
-    t["agrave"] = 556;
-    t["Tcommaaccent"] = 611;
-    t["Cacute"] = 722;
-    t["atilde"] = 556;
-    t["Edotaccent"] = 667;
-    t["scaron"] = 500;
-    t["scedilla"] = 500;
-    t["iacute"] = 278;
-    t["lozenge"] = 471;
-    t["Rcaron"] = 722;
-    t["Gcommaaccent"] = 778;
-    t["ucircumflex"] = 556;
-    t["acircumflex"] = 556;
-    t["Amacron"] = 667;
-    t["rcaron"] = 333;
-    t["ccedilla"] = 500;
-    t["Zdotaccent"] = 611;
-    t["Thorn"] = 667;
-    t["Omacron"] = 778;
-    t["Racute"] = 722;
-    t["Sacute"] = 667;
-    t["dcaron"] = 643;
-    t["Umacron"] = 722;
-    t["uring"] = 556;
-    t["threesuperior"] = 333;
-    t["Ograve"] = 778;
-    t["Agrave"] = 667;
-    t["Abreve"] = 667;
-    t["multiply"] = 584;
-    t["uacute"] = 556;
-    t["Tcaron"] = 611;
-    t["partialdiff"] = 476;
-    t["ydieresis"] = 500;
-    t["Nacute"] = 722;
-    t["icircumflex"] = 278;
-    t["Ecircumflex"] = 667;
-    t["adieresis"] = 556;
-    t["edieresis"] = 556;
-    t["cacute"] = 500;
-    t["nacute"] = 556;
-    t["umacron"] = 556;
-    t["Ncaron"] = 722;
-    t["Iacute"] = 278;
-    t["plusminus"] = 584;
-    t["brokenbar"] = 260;
-    t["registered"] = 737;
-    t["Gbreve"] = 778;
-    t["Idotaccent"] = 278;
-    t["summation"] = 600;
-    t["Egrave"] = 667;
-    t["racute"] = 333;
-    t["omacron"] = 556;
-    t["Zacute"] = 611;
-    t["Zcaron"] = 611;
-    t["greaterequal"] = 549;
-    t["Eth"] = 722;
-    t["Ccedilla"] = 722;
-    t["lcommaaccent"] = 222;
-    t["tcaron"] = 317;
-    t["eogonek"] = 556;
-    t["Uogonek"] = 722;
-    t["Aacute"] = 667;
-    t["Adieresis"] = 667;
-    t["egrave"] = 556;
-    t["zacute"] = 500;
-    t["iogonek"] = 222;
-    t["Oacute"] = 778;
-    t["oacute"] = 556;
-    t["amacron"] = 556;
-    t["sacute"] = 500;
-    t["idieresis"] = 278;
-    t["Ocircumflex"] = 778;
-    t["Ugrave"] = 722;
-    t["Delta"] = 612;
-    t["thorn"] = 556;
-    t["twosuperior"] = 333;
-    t["Odieresis"] = 778;
-    t["mu"] = 556;
-    t["igrave"] = 278;
-    t["ohungarumlaut"] = 556;
-    t["Eogonek"] = 667;
-    t["dcroat"] = 556;
-    t["threequarters"] = 834;
-    t["Scedilla"] = 667;
-    t["lcaron"] = 299;
-    t["Kcommaaccent"] = 667;
-    t["Lacute"] = 556;
-    t["trademark"] = 1000;
-    t["edotaccent"] = 556;
-    t["Igrave"] = 278;
-    t["Imacron"] = 278;
-    t["Lcaron"] = 556;
-    t["onehalf"] = 834;
-    t["lessequal"] = 549;
-    t["ocircumflex"] = 556;
-    t["ntilde"] = 556;
-    t["Uhungarumlaut"] = 722;
-    t["Eacute"] = 667;
-    t["emacron"] = 556;
-    t["gbreve"] = 556;
-    t["onequarter"] = 834;
-    t["Scaron"] = 667;
-    t["Scommaaccent"] = 667;
-    t["Ohungarumlaut"] = 778;
-    t["degree"] = 400;
-    t["ograve"] = 556;
-    t["Ccaron"] = 722;
-    t["ugrave"] = 556;
-    t["radical"] = 453;
-    t["Dcaron"] = 722;
-    t["rcommaaccent"] = 333;
-    t["Ntilde"] = 722;
-    t["otilde"] = 556;
-    t["Rcommaaccent"] = 722;
-    t["Lcommaaccent"] = 556;
-    t["Atilde"] = 667;
-    t["Aogonek"] = 667;
-    t["Aring"] = 667;
-    t["Otilde"] = 778;
-    t["zdotaccent"] = 500;
-    t["Ecaron"] = 667;
-    t["Iogonek"] = 278;
-    t["kcommaaccent"] = 500;
-    t["minus"] = 584;
-    t["Icircumflex"] = 278;
-    t["ncaron"] = 556;
-    t["tcommaaccent"] = 278;
-    t["logicalnot"] = 584;
-    t["odieresis"] = 556;
-    t["udieresis"] = 556;
-    t["notequal"] = 549;
-    t["gcommaaccent"] = 556;
-    t["eth"] = 556;
-    t["zcaron"] = 500;
-    t["ncommaaccent"] = 556;
-    t["onesuperior"] = 333;
-    t["imacron"] = 278;
-    t["Euro"] = 556;
+  t.Helvetica = (0, _core_utils.getLookupTableFactory)(function (t) {
+    t.space = 278;
+    t.exclam = 278;
+    t.quotedbl = 355;
+    t.numbersign = 556;
+    t.dollar = 556;
+    t.percent = 889;
+    t.ampersand = 667;
+    t.quoteright = 222;
+    t.parenleft = 333;
+    t.parenright = 333;
+    t.asterisk = 389;
+    t.plus = 584;
+    t.comma = 278;
+    t.hyphen = 333;
+    t.period = 278;
+    t.slash = 278;
+    t.zero = 556;
+    t.one = 556;
+    t.two = 556;
+    t.three = 556;
+    t.four = 556;
+    t.five = 556;
+    t.six = 556;
+    t.seven = 556;
+    t.eight = 556;
+    t.nine = 556;
+    t.colon = 278;
+    t.semicolon = 278;
+    t.less = 584;
+    t.equal = 584;
+    t.greater = 584;
+    t.question = 556;
+    t.at = 1015;
+    t.A = 667;
+    t.B = 667;
+    t.C = 722;
+    t.D = 722;
+    t.E = 667;
+    t.F = 611;
+    t.G = 778;
+    t.H = 722;
+    t.I = 278;
+    t.J = 500;
+    t.K = 667;
+    t.L = 556;
+    t.M = 833;
+    t.N = 722;
+    t.O = 778;
+    t.P = 667;
+    t.Q = 778;
+    t.R = 722;
+    t.S = 667;
+    t.T = 611;
+    t.U = 722;
+    t.V = 667;
+    t.W = 944;
+    t.X = 667;
+    t.Y = 667;
+    t.Z = 611;
+    t.bracketleft = 278;
+    t.backslash = 278;
+    t.bracketright = 278;
+    t.asciicircum = 469;
+    t.underscore = 556;
+    t.quoteleft = 222;
+    t.a = 556;
+    t.b = 556;
+    t.c = 500;
+    t.d = 556;
+    t.e = 556;
+    t.f = 278;
+    t.g = 556;
+    t.h = 556;
+    t.i = 222;
+    t.j = 222;
+    t.k = 500;
+    t.l = 222;
+    t.m = 833;
+    t.n = 556;
+    t.o = 556;
+    t.p = 556;
+    t.q = 556;
+    t.r = 333;
+    t.s = 500;
+    t.t = 278;
+    t.u = 556;
+    t.v = 500;
+    t.w = 722;
+    t.x = 500;
+    t.y = 500;
+    t.z = 500;
+    t.braceleft = 334;
+    t.bar = 260;
+    t.braceright = 334;
+    t.asciitilde = 584;
+    t.exclamdown = 333;
+    t.cent = 556;
+    t.sterling = 556;
+    t.fraction = 167;
+    t.yen = 556;
+    t.florin = 556;
+    t.section = 556;
+    t.currency = 556;
+    t.quotesingle = 191;
+    t.quotedblleft = 333;
+    t.guillemotleft = 556;
+    t.guilsinglleft = 333;
+    t.guilsinglright = 333;
+    t.fi = 500;
+    t.fl = 500;
+    t.endash = 556;
+    t.dagger = 556;
+    t.daggerdbl = 556;
+    t.periodcentered = 278;
+    t.paragraph = 537;
+    t.bullet = 350;
+    t.quotesinglbase = 222;
+    t.quotedblbase = 333;
+    t.quotedblright = 333;
+    t.guillemotright = 556;
+    t.ellipsis = 1000;
+    t.perthousand = 1000;
+    t.questiondown = 611;
+    t.grave = 333;
+    t.acute = 333;
+    t.circumflex = 333;
+    t.tilde = 333;
+    t.macron = 333;
+    t.breve = 333;
+    t.dotaccent = 333;
+    t.dieresis = 333;
+    t.ring = 333;
+    t.cedilla = 333;
+    t.hungarumlaut = 333;
+    t.ogonek = 333;
+    t.caron = 333;
+    t.emdash = 1000;
+    t.AE = 1000;
+    t.ordfeminine = 370;
+    t.Lslash = 556;
+    t.Oslash = 778;
+    t.OE = 1000;
+    t.ordmasculine = 365;
+    t.ae = 889;
+    t.dotlessi = 278;
+    t.lslash = 222;
+    t.oslash = 611;
+    t.oe = 944;
+    t.germandbls = 611;
+    t.Idieresis = 278;
+    t.eacute = 556;
+    t.abreve = 556;
+    t.uhungarumlaut = 556;
+    t.ecaron = 556;
+    t.Ydieresis = 667;
+    t.divide = 584;
+    t.Yacute = 667;
+    t.Acircumflex = 667;
+    t.aacute = 556;
+    t.Ucircumflex = 722;
+    t.yacute = 500;
+    t.scommaaccent = 500;
+    t.ecircumflex = 556;
+    t.Uring = 722;
+    t.Udieresis = 722;
+    t.aogonek = 556;
+    t.Uacute = 722;
+    t.uogonek = 556;
+    t.Edieresis = 667;
+    t.Dcroat = 722;
+    t.commaaccent = 250;
+    t.copyright = 737;
+    t.Emacron = 667;
+    t.ccaron = 500;
+    t.aring = 556;
+    t.Ncommaaccent = 722;
+    t.lacute = 222;
+    t.agrave = 556;
+    t.Tcommaaccent = 611;
+    t.Cacute = 722;
+    t.atilde = 556;
+    t.Edotaccent = 667;
+    t.scaron = 500;
+    t.scedilla = 500;
+    t.iacute = 278;
+    t.lozenge = 471;
+    t.Rcaron = 722;
+    t.Gcommaaccent = 778;
+    t.ucircumflex = 556;
+    t.acircumflex = 556;
+    t.Amacron = 667;
+    t.rcaron = 333;
+    t.ccedilla = 500;
+    t.Zdotaccent = 611;
+    t.Thorn = 667;
+    t.Omacron = 778;
+    t.Racute = 722;
+    t.Sacute = 667;
+    t.dcaron = 643;
+    t.Umacron = 722;
+    t.uring = 556;
+    t.threesuperior = 333;
+    t.Ograve = 778;
+    t.Agrave = 667;
+    t.Abreve = 667;
+    t.multiply = 584;
+    t.uacute = 556;
+    t.Tcaron = 611;
+    t.partialdiff = 476;
+    t.ydieresis = 500;
+    t.Nacute = 722;
+    t.icircumflex = 278;
+    t.Ecircumflex = 667;
+    t.adieresis = 556;
+    t.edieresis = 556;
+    t.cacute = 500;
+    t.nacute = 556;
+    t.umacron = 556;
+    t.Ncaron = 722;
+    t.Iacute = 278;
+    t.plusminus = 584;
+    t.brokenbar = 260;
+    t.registered = 737;
+    t.Gbreve = 778;
+    t.Idotaccent = 278;
+    t.summation = 600;
+    t.Egrave = 667;
+    t.racute = 333;
+    t.omacron = 556;
+    t.Zacute = 611;
+    t.Zcaron = 611;
+    t.greaterequal = 549;
+    t.Eth = 722;
+    t.Ccedilla = 722;
+    t.lcommaaccent = 222;
+    t.tcaron = 317;
+    t.eogonek = 556;
+    t.Uogonek = 722;
+    t.Aacute = 667;
+    t.Adieresis = 667;
+    t.egrave = 556;
+    t.zacute = 500;
+    t.iogonek = 222;
+    t.Oacute = 778;
+    t.oacute = 556;
+    t.amacron = 556;
+    t.sacute = 500;
+    t.idieresis = 278;
+    t.Ocircumflex = 778;
+    t.Ugrave = 722;
+    t.Delta = 612;
+    t.thorn = 556;
+    t.twosuperior = 333;
+    t.Odieresis = 778;
+    t.mu = 556;
+    t.igrave = 278;
+    t.ohungarumlaut = 556;
+    t.Eogonek = 667;
+    t.dcroat = 556;
+    t.threequarters = 834;
+    t.Scedilla = 667;
+    t.lcaron = 299;
+    t.Kcommaaccent = 667;
+    t.Lacute = 556;
+    t.trademark = 1000;
+    t.edotaccent = 556;
+    t.Igrave = 278;
+    t.Imacron = 278;
+    t.Lcaron = 556;
+    t.onehalf = 834;
+    t.lessequal = 549;
+    t.ocircumflex = 556;
+    t.ntilde = 556;
+    t.Uhungarumlaut = 722;
+    t.Eacute = 667;
+    t.emacron = 556;
+    t.gbreve = 556;
+    t.onequarter = 834;
+    t.Scaron = 667;
+    t.Scommaaccent = 667;
+    t.Ohungarumlaut = 778;
+    t.degree = 400;
+    t.ograve = 556;
+    t.Ccaron = 722;
+    t.ugrave = 556;
+    t.radical = 453;
+    t.Dcaron = 722;
+    t.rcommaaccent = 333;
+    t.Ntilde = 722;
+    t.otilde = 556;
+    t.Rcommaaccent = 722;
+    t.Lcommaaccent = 556;
+    t.Atilde = 667;
+    t.Aogonek = 667;
+    t.Aring = 667;
+    t.Otilde = 778;
+    t.zdotaccent = 500;
+    t.Ecaron = 667;
+    t.Iogonek = 278;
+    t.kcommaaccent = 500;
+    t.minus = 584;
+    t.Icircumflex = 278;
+    t.ncaron = 556;
+    t.tcommaaccent = 278;
+    t.logicalnot = 584;
+    t.odieresis = 556;
+    t.udieresis = 556;
+    t.notequal = 549;
+    t.gcommaaccent = 556;
+    t.eth = 556;
+    t.zcaron = 500;
+    t.ncommaaccent = 556;
+    t.onesuperior = 333;
+    t.imacron = 278;
+    t.Euro = 556;
   });
   t["Helvetica-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) {
-    t["space"] = 278;
-    t["exclam"] = 333;
-    t["quotedbl"] = 474;
-    t["numbersign"] = 556;
-    t["dollar"] = 556;
-    t["percent"] = 889;
-    t["ampersand"] = 722;
-    t["quoteright"] = 278;
-    t["parenleft"] = 333;
-    t["parenright"] = 333;
-    t["asterisk"] = 389;
-    t["plus"] = 584;
-    t["comma"] = 278;
-    t["hyphen"] = 333;
-    t["period"] = 278;
-    t["slash"] = 278;
-    t["zero"] = 556;
-    t["one"] = 556;
-    t["two"] = 556;
-    t["three"] = 556;
-    t["four"] = 556;
-    t["five"] = 556;
-    t["six"] = 556;
-    t["seven"] = 556;
-    t["eight"] = 556;
-    t["nine"] = 556;
-    t["colon"] = 333;
-    t["semicolon"] = 333;
-    t["less"] = 584;
-    t["equal"] = 584;
-    t["greater"] = 584;
-    t["question"] = 611;
-    t["at"] = 975;
-    t["A"] = 722;
-    t["B"] = 722;
-    t["C"] = 722;
-    t["D"] = 722;
-    t["E"] = 667;
-    t["F"] = 611;
-    t["G"] = 778;
-    t["H"] = 722;
-    t["I"] = 278;
-    t["J"] = 556;
-    t["K"] = 722;
-    t["L"] = 611;
-    t["M"] = 833;
-    t["N"] = 722;
-    t["O"] = 778;
-    t["P"] = 667;
-    t["Q"] = 778;
-    t["R"] = 722;
-    t["S"] = 667;
-    t["T"] = 611;
-    t["U"] = 722;
-    t["V"] = 667;
-    t["W"] = 944;
-    t["X"] = 667;
-    t["Y"] = 667;
-    t["Z"] = 611;
-    t["bracketleft"] = 333;
-    t["backslash"] = 278;
-    t["bracketright"] = 333;
-    t["asciicircum"] = 584;
-    t["underscore"] = 556;
-    t["quoteleft"] = 278;
-    t["a"] = 556;
-    t["b"] = 611;
-    t["c"] = 556;
-    t["d"] = 611;
-    t["e"] = 556;
-    t["f"] = 333;
-    t["g"] = 611;
-    t["h"] = 611;
-    t["i"] = 278;
-    t["j"] = 278;
-    t["k"] = 556;
-    t["l"] = 278;
-    t["m"] = 889;
-    t["n"] = 611;
-    t["o"] = 611;
-    t["p"] = 611;
-    t["q"] = 611;
-    t["r"] = 389;
-    t["s"] = 556;
-    t["t"] = 333;
-    t["u"] = 611;
-    t["v"] = 556;
-    t["w"] = 778;
-    t["x"] = 556;
-    t["y"] = 556;
-    t["z"] = 500;
-    t["braceleft"] = 389;
-    t["bar"] = 280;
-    t["braceright"] = 389;
-    t["asciitilde"] = 584;
-    t["exclamdown"] = 333;
-    t["cent"] = 556;
-    t["sterling"] = 556;
-    t["fraction"] = 167;
-    t["yen"] = 556;
-    t["florin"] = 556;
-    t["section"] = 556;
-    t["currency"] = 556;
-    t["quotesingle"] = 238;
-    t["quotedblleft"] = 500;
-    t["guillemotleft"] = 556;
-    t["guilsinglleft"] = 333;
-    t["guilsinglright"] = 333;
-    t["fi"] = 611;
-    t["fl"] = 611;
-    t["endash"] = 556;
-    t["dagger"] = 556;
-    t["daggerdbl"] = 556;
-    t["periodcentered"] = 278;
-    t["paragraph"] = 556;
-    t["bullet"] = 350;
-    t["quotesinglbase"] = 278;
-    t["quotedblbase"] = 500;
-    t["quotedblright"] = 500;
-    t["guillemotright"] = 556;
-    t["ellipsis"] = 1000;
-    t["perthousand"] = 1000;
-    t["questiondown"] = 611;
-    t["grave"] = 333;
-    t["acute"] = 333;
-    t["circumflex"] = 333;
-    t["tilde"] = 333;
-    t["macron"] = 333;
-    t["breve"] = 333;
-    t["dotaccent"] = 333;
-    t["dieresis"] = 333;
-    t["ring"] = 333;
-    t["cedilla"] = 333;
-    t["hungarumlaut"] = 333;
-    t["ogonek"] = 333;
-    t["caron"] = 333;
-    t["emdash"] = 1000;
-    t["AE"] = 1000;
-    t["ordfeminine"] = 370;
-    t["Lslash"] = 611;
-    t["Oslash"] = 778;
-    t["OE"] = 1000;
-    t["ordmasculine"] = 365;
-    t["ae"] = 889;
-    t["dotlessi"] = 278;
-    t["lslash"] = 278;
-    t["oslash"] = 611;
-    t["oe"] = 944;
-    t["germandbls"] = 611;
-    t["Idieresis"] = 278;
-    t["eacute"] = 556;
-    t["abreve"] = 556;
-    t["uhungarumlaut"] = 611;
-    t["ecaron"] = 556;
-    t["Ydieresis"] = 667;
-    t["divide"] = 584;
-    t["Yacute"] = 667;
-    t["Acircumflex"] = 722;
-    t["aacute"] = 556;
-    t["Ucircumflex"] = 722;
-    t["yacute"] = 556;
-    t["scommaaccent"] = 556;
-    t["ecircumflex"] = 556;
-    t["Uring"] = 722;
-    t["Udieresis"] = 722;
-    t["aogonek"] = 556;
-    t["Uacute"] = 722;
-    t["uogonek"] = 611;
-    t["Edieresis"] = 667;
-    t["Dcroat"] = 722;
-    t["commaaccent"] = 250;
-    t["copyright"] = 737;
-    t["Emacron"] = 667;
-    t["ccaron"] = 556;
-    t["aring"] = 556;
-    t["Ncommaaccent"] = 722;
-    t["lacute"] = 278;
-    t["agrave"] = 556;
-    t["Tcommaaccent"] = 611;
-    t["Cacute"] = 722;
-    t["atilde"] = 556;
-    t["Edotaccent"] = 667;
-    t["scaron"] = 556;
-    t["scedilla"] = 556;
-    t["iacute"] = 278;
-    t["lozenge"] = 494;
-    t["Rcaron"] = 722;
-    t["Gcommaaccent"] = 778;
-    t["ucircumflex"] = 611;
-    t["acircumflex"] = 556;
-    t["Amacron"] = 722;
-    t["rcaron"] = 389;
-    t["ccedilla"] = 556;
-    t["Zdotaccent"] = 611;
-    t["Thorn"] = 667;
-    t["Omacron"] = 778;
-    t["Racute"] = 722;
-    t["Sacute"] = 667;
-    t["dcaron"] = 743;
-    t["Umacron"] = 722;
-    t["uring"] = 611;
-    t["threesuperior"] = 333;
-    t["Ograve"] = 778;
-    t["Agrave"] = 722;
-    t["Abreve"] = 722;
-    t["multiply"] = 584;
-    t["uacute"] = 611;
-    t["Tcaron"] = 611;
-    t["partialdiff"] = 494;
-    t["ydieresis"] = 556;
-    t["Nacute"] = 722;
-    t["icircumflex"] = 278;
-    t["Ecircumflex"] = 667;
-    t["adieresis"] = 556;
-    t["edieresis"] = 556;
-    t["cacute"] = 556;
-    t["nacute"] = 611;
-    t["umacron"] = 611;
-    t["Ncaron"] = 722;
-    t["Iacute"] = 278;
-    t["plusminus"] = 584;
-    t["brokenbar"] = 280;
-    t["registered"] = 737;
-    t["Gbreve"] = 778;
-    t["Idotaccent"] = 278;
-    t["summation"] = 600;
-    t["Egrave"] = 667;
-    t["racute"] = 389;
-    t["omacron"] = 611;
-    t["Zacute"] = 611;
-    t["Zcaron"] = 611;
-    t["greaterequal"] = 549;
-    t["Eth"] = 722;
-    t["Ccedilla"] = 722;
-    t["lcommaaccent"] = 278;
-    t["tcaron"] = 389;
-    t["eogonek"] = 556;
-    t["Uogonek"] = 722;
-    t["Aacute"] = 722;
-    t["Adieresis"] = 722;
-    t["egrave"] = 556;
-    t["zacute"] = 500;
-    t["iogonek"] = 278;
-    t["Oacute"] = 778;
-    t["oacute"] = 611;
-    t["amacron"] = 556;
-    t["sacute"] = 556;
-    t["idieresis"] = 278;
-    t["Ocircumflex"] = 778;
-    t["Ugrave"] = 722;
-    t["Delta"] = 612;
-    t["thorn"] = 611;
-    t["twosuperior"] = 333;
-    t["Odieresis"] = 778;
-    t["mu"] = 611;
-    t["igrave"] = 278;
-    t["ohungarumlaut"] = 611;
-    t["Eogonek"] = 667;
-    t["dcroat"] = 611;
-    t["threequarters"] = 834;
-    t["Scedilla"] = 667;
-    t["lcaron"] = 400;
-    t["Kcommaaccent"] = 722;
-    t["Lacute"] = 611;
-    t["trademark"] = 1000;
-    t["edotaccent"] = 556;
-    t["Igrave"] = 278;
-    t["Imacron"] = 278;
-    t["Lcaron"] = 611;
-    t["onehalf"] = 834;
-    t["lessequal"] = 549;
-    t["ocircumflex"] = 611;
-    t["ntilde"] = 611;
-    t["Uhungarumlaut"] = 722;
-    t["Eacute"] = 667;
-    t["emacron"] = 556;
-    t["gbreve"] = 611;
-    t["onequarter"] = 834;
-    t["Scaron"] = 667;
-    t["Scommaaccent"] = 667;
-    t["Ohungarumlaut"] = 778;
-    t["degree"] = 400;
-    t["ograve"] = 611;
-    t["Ccaron"] = 722;
-    t["ugrave"] = 611;
-    t["radical"] = 549;
-    t["Dcaron"] = 722;
-    t["rcommaaccent"] = 389;
-    t["Ntilde"] = 722;
-    t["otilde"] = 611;
-    t["Rcommaaccent"] = 722;
-    t["Lcommaaccent"] = 611;
-    t["Atilde"] = 722;
-    t["Aogonek"] = 722;
-    t["Aring"] = 722;
-    t["Otilde"] = 778;
-    t["zdotaccent"] = 500;
-    t["Ecaron"] = 667;
-    t["Iogonek"] = 278;
-    t["kcommaaccent"] = 556;
-    t["minus"] = 584;
-    t["Icircumflex"] = 278;
-    t["ncaron"] = 611;
-    t["tcommaaccent"] = 333;
-    t["logicalnot"] = 584;
-    t["odieresis"] = 611;
-    t["udieresis"] = 611;
-    t["notequal"] = 549;
-    t["gcommaaccent"] = 611;
-    t["eth"] = 611;
-    t["zcaron"] = 500;
-    t["ncommaaccent"] = 611;
-    t["onesuperior"] = 333;
-    t["imacron"] = 278;
-    t["Euro"] = 556;
+    t.space = 278;
+    t.exclam = 333;
+    t.quotedbl = 474;
+    t.numbersign = 556;
+    t.dollar = 556;
+    t.percent = 889;
+    t.ampersand = 722;
+    t.quoteright = 278;
+    t.parenleft = 333;
+    t.parenright = 333;
+    t.asterisk = 389;
+    t.plus = 584;
+    t.comma = 278;
+    t.hyphen = 333;
+    t.period = 278;
+    t.slash = 278;
+    t.zero = 556;
+    t.one = 556;
+    t.two = 556;
+    t.three = 556;
+    t.four = 556;
+    t.five = 556;
+    t.six = 556;
+    t.seven = 556;
+    t.eight = 556;
+    t.nine = 556;
+    t.colon = 333;
+    t.semicolon = 333;
+    t.less = 584;
+    t.equal = 584;
+    t.greater = 584;
+    t.question = 611;
+    t.at = 975;
+    t.A = 722;
+    t.B = 722;
+    t.C = 722;
+    t.D = 722;
+    t.E = 667;
+    t.F = 611;
+    t.G = 778;
+    t.H = 722;
+    t.I = 278;
+    t.J = 556;
+    t.K = 722;
+    t.L = 611;
+    t.M = 833;
+    t.N = 722;
+    t.O = 778;
+    t.P = 667;
+    t.Q = 778;
+    t.R = 722;
+    t.S = 667;
+    t.T = 611;
+    t.U = 722;
+    t.V = 667;
+    t.W = 944;
+    t.X = 667;
+    t.Y = 667;
+    t.Z = 611;
+    t.bracketleft = 333;
+    t.backslash = 278;
+    t.bracketright = 333;
+    t.asciicircum = 584;
+    t.underscore = 556;
+    t.quoteleft = 278;
+    t.a = 556;
+    t.b = 611;
+    t.c = 556;
+    t.d = 611;
+    t.e = 556;
+    t.f = 333;
+    t.g = 611;
+    t.h = 611;
+    t.i = 278;
+    t.j = 278;
+    t.k = 556;
+    t.l = 278;
+    t.m = 889;
+    t.n = 611;
+    t.o = 611;
+    t.p = 611;
+    t.q = 611;
+    t.r = 389;
+    t.s = 556;
+    t.t = 333;
+    t.u = 611;
+    t.v = 556;
+    t.w = 778;
+    t.x = 556;
+    t.y = 556;
+    t.z = 500;
+    t.braceleft = 389;
+    t.bar = 280;
+    t.braceright = 389;
+    t.asciitilde = 584;
+    t.exclamdown = 333;
+    t.cent = 556;
+    t.sterling = 556;
+    t.fraction = 167;
+    t.yen = 556;
+    t.florin = 556;
+    t.section = 556;
+    t.currency = 556;
+    t.quotesingle = 238;
+    t.quotedblleft = 500;
+    t.guillemotleft = 556;
+    t.guilsinglleft = 333;
+    t.guilsinglright = 333;
+    t.fi = 611;
+    t.fl = 611;
+    t.endash = 556;
+    t.dagger = 556;
+    t.daggerdbl = 556;
+    t.periodcentered = 278;
+    t.paragraph = 556;
+    t.bullet = 350;
+    t.quotesinglbase = 278;
+    t.quotedblbase = 500;
+    t.quotedblright = 500;
+    t.guillemotright = 556;
+    t.ellipsis = 1000;
+    t.perthousand = 1000;
+    t.questiondown = 611;
+    t.grave = 333;
+    t.acute = 333;
+    t.circumflex = 333;
+    t.tilde = 333;
+    t.macron = 333;
+    t.breve = 333;
+    t.dotaccent = 333;
+    t.dieresis = 333;
+    t.ring = 333;
+    t.cedilla = 333;
+    t.hungarumlaut = 333;
+    t.ogonek = 333;
+    t.caron = 333;
+    t.emdash = 1000;
+    t.AE = 1000;
+    t.ordfeminine = 370;
+    t.Lslash = 611;
+    t.Oslash = 778;
+    t.OE = 1000;
+    t.ordmasculine = 365;
+    t.ae = 889;
+    t.dotlessi = 278;
+    t.lslash = 278;
+    t.oslash = 611;
+    t.oe = 944;
+    t.germandbls = 611;
+    t.Idieresis = 278;
+    t.eacute = 556;
+    t.abreve = 556;
+    t.uhungarumlaut = 611;
+    t.ecaron = 556;
+    t.Ydieresis = 667;
+    t.divide = 584;
+    t.Yacute = 667;
+    t.Acircumflex = 722;
+    t.aacute = 556;
+    t.Ucircumflex = 722;
+    t.yacute = 556;
+    t.scommaaccent = 556;
+    t.ecircumflex = 556;
+    t.Uring = 722;
+    t.Udieresis = 722;
+    t.aogonek = 556;
+    t.Uacute = 722;
+    t.uogonek = 611;
+    t.Edieresis = 667;
+    t.Dcroat = 722;
+    t.commaaccent = 250;
+    t.copyright = 737;
+    t.Emacron = 667;
+    t.ccaron = 556;
+    t.aring = 556;
+    t.Ncommaaccent = 722;
+    t.lacute = 278;
+    t.agrave = 556;
+    t.Tcommaaccent = 611;
+    t.Cacute = 722;
+    t.atilde = 556;
+    t.Edotaccent = 667;
+    t.scaron = 556;
+    t.scedilla = 556;
+    t.iacute = 278;
+    t.lozenge = 494;
+    t.Rcaron = 722;
+    t.Gcommaaccent = 778;
+    t.ucircumflex = 611;
+    t.acircumflex = 556;
+    t.Amacron = 722;
+    t.rcaron = 389;
+    t.ccedilla = 556;
+    t.Zdotaccent = 611;
+    t.Thorn = 667;
+    t.Omacron = 778;
+    t.Racute = 722;
+    t.Sacute = 667;
+    t.dcaron = 743;
+    t.Umacron = 722;
+    t.uring = 611;
+    t.threesuperior = 333;
+    t.Ograve = 778;
+    t.Agrave = 722;
+    t.Abreve = 722;
+    t.multiply = 584;
+    t.uacute = 611;
+    t.Tcaron = 611;
+    t.partialdiff = 494;
+    t.ydieresis = 556;
+    t.Nacute = 722;
+    t.icircumflex = 278;
+    t.Ecircumflex = 667;
+    t.adieresis = 556;
+    t.edieresis = 556;
+    t.cacute = 556;
+    t.nacute = 611;
+    t.umacron = 611;
+    t.Ncaron = 722;
+    t.Iacute = 278;
+    t.plusminus = 584;
+    t.brokenbar = 280;
+    t.registered = 737;
+    t.Gbreve = 778;
+    t.Idotaccent = 278;
+    t.summation = 600;
+    t.Egrave = 667;
+    t.racute = 389;
+    t.omacron = 611;
+    t.Zacute = 611;
+    t.Zcaron = 611;
+    t.greaterequal = 549;
+    t.Eth = 722;
+    t.Ccedilla = 722;
+    t.lcommaaccent = 278;
+    t.tcaron = 389;
+    t.eogonek = 556;
+    t.Uogonek = 722;
+    t.Aacute = 722;
+    t.Adieresis = 722;
+    t.egrave = 556;
+    t.zacute = 500;
+    t.iogonek = 278;
+    t.Oacute = 778;
+    t.oacute = 611;
+    t.amacron = 556;
+    t.sacute = 556;
+    t.idieresis = 278;
+    t.Ocircumflex = 778;
+    t.Ugrave = 722;
+    t.Delta = 612;
+    t.thorn = 611;
+    t.twosuperior = 333;
+    t.Odieresis = 778;
+    t.mu = 611;
+    t.igrave = 278;
+    t.ohungarumlaut = 611;
+    t.Eogonek = 667;
+    t.dcroat = 611;
+    t.threequarters = 834;
+    t.Scedilla = 667;
+    t.lcaron = 400;
+    t.Kcommaaccent = 722;
+    t.Lacute = 611;
+    t.trademark = 1000;
+    t.edotaccent = 556;
+    t.Igrave = 278;
+    t.Imacron = 278;
+    t.Lcaron = 611;
+    t.onehalf = 834;
+    t.lessequal = 549;
+    t.ocircumflex = 611;
+    t.ntilde = 611;
+    t.Uhungarumlaut = 722;
+    t.Eacute = 667;
+    t.emacron = 556;
+    t.gbreve = 611;
+    t.onequarter = 834;
+    t.Scaron = 667;
+    t.Scommaaccent = 667;
+    t.Ohungarumlaut = 778;
+    t.degree = 400;
+    t.ograve = 611;
+    t.Ccaron = 722;
+    t.ugrave = 611;
+    t.radical = 549;
+    t.Dcaron = 722;
+    t.rcommaaccent = 389;
+    t.Ntilde = 722;
+    t.otilde = 611;
+    t.Rcommaaccent = 722;
+    t.Lcommaaccent = 611;
+    t.Atilde = 722;
+    t.Aogonek = 722;
+    t.Aring = 722;
+    t.Otilde = 778;
+    t.zdotaccent = 500;
+    t.Ecaron = 667;
+    t.Iogonek = 278;
+    t.kcommaaccent = 556;
+    t.minus = 584;
+    t.Icircumflex = 278;
+    t.ncaron = 611;
+    t.tcommaaccent = 333;
+    t.logicalnot = 584;
+    t.odieresis = 611;
+    t.udieresis = 611;
+    t.notequal = 549;
+    t.gcommaaccent = 611;
+    t.eth = 611;
+    t.zcaron = 500;
+    t.ncommaaccent = 611;
+    t.onesuperior = 333;
+    t.imacron = 278;
+    t.Euro = 556;
   });
   t["Helvetica-BoldOblique"] = (0, _core_utils.getLookupTableFactory)(function (t) {
-    t["space"] = 278;
-    t["exclam"] = 333;
-    t["quotedbl"] = 474;
-    t["numbersign"] = 556;
-    t["dollar"] = 556;
-    t["percent"] = 889;
-    t["ampersand"] = 722;
-    t["quoteright"] = 278;
-    t["parenleft"] = 333;
-    t["parenright"] = 333;
-    t["asterisk"] = 389;
-    t["plus"] = 584;
-    t["comma"] = 278;
-    t["hyphen"] = 333;
-    t["period"] = 278;
-    t["slash"] = 278;
-    t["zero"] = 556;
-    t["one"] = 556;
-    t["two"] = 556;
-    t["three"] = 556;
-    t["four"] = 556;
-    t["five"] = 556;
-    t["six"] = 556;
-    t["seven"] = 556;
-    t["eight"] = 556;
-    t["nine"] = 556;
-    t["colon"] = 333;
-    t["semicolon"] = 333;
-    t["less"] = 584;
-    t["equal"] = 584;
-    t["greater"] = 584;
-    t["question"] = 611;
-    t["at"] = 975;
-    t["A"] = 722;
-    t["B"] = 722;
-    t["C"] = 722;
-    t["D"] = 722;
-    t["E"] = 667;
-    t["F"] = 611;
-    t["G"] = 778;
-    t["H"] = 722;
-    t["I"] = 278;
-    t["J"] = 556;
-    t["K"] = 722;
-    t["L"] = 611;
-    t["M"] = 833;
-    t["N"] = 722;
-    t["O"] = 778;
-    t["P"] = 667;
-    t["Q"] = 778;
-    t["R"] = 722;
-    t["S"] = 667;
-    t["T"] = 611;
-    t["U"] = 722;
-    t["V"] = 667;
-    t["W"] = 944;
-    t["X"] = 667;
-    t["Y"] = 667;
-    t["Z"] = 611;
-    t["bracketleft"] = 333;
-    t["backslash"] = 278;
-    t["bracketright"] = 333;
-    t["asciicircum"] = 584;
-    t["underscore"] = 556;
-    t["quoteleft"] = 278;
-    t["a"] = 556;
-    t["b"] = 611;
-    t["c"] = 556;
-    t["d"] = 611;
-    t["e"] = 556;
-    t["f"] = 333;
-    t["g"] = 611;
-    t["h"] = 611;
-    t["i"] = 278;
-    t["j"] = 278;
-    t["k"] = 556;
-    t["l"] = 278;
-    t["m"] = 889;
-    t["n"] = 611;
-    t["o"] = 611;
-    t["p"] = 611;
-    t["q"] = 611;
-    t["r"] = 389;
-    t["s"] = 556;
-    t["t"] = 333;
-    t["u"] = 611;
-    t["v"] = 556;
-    t["w"] = 778;
-    t["x"] = 556;
-    t["y"] = 556;
-    t["z"] = 500;
-    t["braceleft"] = 389;
-    t["bar"] = 280;
-    t["braceright"] = 389;
-    t["asciitilde"] = 584;
-    t["exclamdown"] = 333;
-    t["cent"] = 556;
-    t["sterling"] = 556;
-    t["fraction"] = 167;
-    t["yen"] = 556;
-    t["florin"] = 556;
-    t["section"] = 556;
-    t["currency"] = 556;
-    t["quotesingle"] = 238;
-    t["quotedblleft"] = 500;
-    t["guillemotleft"] = 556;
-    t["guilsinglleft"] = 333;
-    t["guilsinglright"] = 333;
-    t["fi"] = 611;
-    t["fl"] = 611;
-    t["endash"] = 556;
-    t["dagger"] = 556;
-    t["daggerdbl"] = 556;
-    t["periodcentered"] = 278;
-    t["paragraph"] = 556;
-    t["bullet"] = 350;
-    t["quotesinglbase"] = 278;
-    t["quotedblbase"] = 500;
-    t["quotedblright"] = 500;
-    t["guillemotright"] = 556;
-    t["ellipsis"] = 1000;
-    t["perthousand"] = 1000;
-    t["questiondown"] = 611;
-    t["grave"] = 333;
-    t["acute"] = 333;
-    t["circumflex"] = 333;
-    t["tilde"] = 333;
-    t["macron"] = 333;
-    t["breve"] = 333;
-    t["dotaccent"] = 333;
-    t["dieresis"] = 333;
-    t["ring"] = 333;
-    t["cedilla"] = 333;
-    t["hungarumlaut"] = 333;
-    t["ogonek"] = 333;
-    t["caron"] = 333;
-    t["emdash"] = 1000;
-    t["AE"] = 1000;
-    t["ordfeminine"] = 370;
-    t["Lslash"] = 611;
-    t["Oslash"] = 778;
-    t["OE"] = 1000;
-    t["ordmasculine"] = 365;
-    t["ae"] = 889;
-    t["dotlessi"] = 278;
-    t["lslash"] = 278;
-    t["oslash"] = 611;
-    t["oe"] = 944;
-    t["germandbls"] = 611;
-    t["Idieresis"] = 278;
-    t["eacute"] = 556;
-    t["abreve"] = 556;
-    t["uhungarumlaut"] = 611;
-    t["ecaron"] = 556;
-    t["Ydieresis"] = 667;
-    t["divide"] = 584;
-    t["Yacute"] = 667;
-    t["Acircumflex"] = 722;
-    t["aacute"] = 556;
-    t["Ucircumflex"] = 722;
-    t["yacute"] = 556;
-    t["scommaaccent"] = 556;
-    t["ecircumflex"] = 556;
-    t["Uring"] = 722;
-    t["Udieresis"] = 722;
-    t["aogonek"] = 556;
-    t["Uacute"] = 722;
-    t["uogonek"] = 611;
-    t["Edieresis"] = 667;
-    t["Dcroat"] = 722;
-    t["commaaccent"] = 250;
-    t["copyright"] = 737;
-    t["Emacron"] = 667;
-    t["ccaron"] = 556;
-    t["aring"] = 556;
-    t["Ncommaaccent"] = 722;
-    t["lacute"] = 278;
-    t["agrave"] = 556;
-    t["Tcommaaccent"] = 611;
-    t["Cacute"] = 722;
-    t["atilde"] = 556;
-    t["Edotaccent"] = 667;
-    t["scaron"] = 556;
-    t["scedilla"] = 556;
-    t["iacute"] = 278;
-    t["lozenge"] = 494;
-    t["Rcaron"] = 722;
-    t["Gcommaaccent"] = 778;
-    t["ucircumflex"] = 611;
-    t["acircumflex"] = 556;
-    t["Amacron"] = 722;
-    t["rcaron"] = 389;
-    t["ccedilla"] = 556;
-    t["Zdotaccent"] = 611;
-    t["Thorn"] = 667;
-    t["Omacron"] = 778;
-    t["Racute"] = 722;
-    t["Sacute"] = 667;
-    t["dcaron"] = 743;
-    t["Umacron"] = 722;
-    t["uring"] = 611;
-    t["threesuperior"] = 333;
-    t["Ograve"] = 778;
-    t["Agrave"] = 722;
-    t["Abreve"] = 722;
-    t["multiply"] = 584;
-    t["uacute"] = 611;
-    t["Tcaron"] = 611;
-    t["partialdiff"] = 494;
-    t["ydieresis"] = 556;
-    t["Nacute"] = 722;
-    t["icircumflex"] = 278;
-    t["Ecircumflex"] = 667;
-    t["adieresis"] = 556;
-    t["edieresis"] = 556;
-    t["cacute"] = 556;
-    t["nacute"] = 611;
-    t["umacron"] = 611;
-    t["Ncaron"] = 722;
-    t["Iacute"] = 278;
-    t["plusminus"] = 584;
-    t["brokenbar"] = 280;
-    t["registered"] = 737;
-    t["Gbreve"] = 778;
-    t["Idotaccent"] = 278;
-    t["summation"] = 600;
-    t["Egrave"] = 667;
-    t["racute"] = 389;
-    t["omacron"] = 611;
-    t["Zacute"] = 611;
-    t["Zcaron"] = 611;
-    t["greaterequal"] = 549;
-    t["Eth"] = 722;
-    t["Ccedilla"] = 722;
-    t["lcommaaccent"] = 278;
-    t["tcaron"] = 389;
-    t["eogonek"] = 556;
-    t["Uogonek"] = 722;
-    t["Aacute"] = 722;
-    t["Adieresis"] = 722;
-    t["egrave"] = 556;
-    t["zacute"] = 500;
-    t["iogonek"] = 278;
-    t["Oacute"] = 778;
-    t["oacute"] = 611;
-    t["amacron"] = 556;
-    t["sacute"] = 556;
-    t["idieresis"] = 278;
-    t["Ocircumflex"] = 778;
-    t["Ugrave"] = 722;
-    t["Delta"] = 612;
-    t["thorn"] = 611;
-    t["twosuperior"] = 333;
-    t["Odieresis"] = 778;
-    t["mu"] = 611;
-    t["igrave"] = 278;
-    t["ohungarumlaut"] = 611;
-    t["Eogonek"] = 667;
-    t["dcroat"] = 611;
-    t["threequarters"] = 834;
-    t["Scedilla"] = 667;
-    t["lcaron"] = 400;
-    t["Kcommaaccent"] = 722;
-    t["Lacute"] = 611;
-    t["trademark"] = 1000;
-    t["edotaccent"] = 556;
-    t["Igrave"] = 278;
-    t["Imacron"] = 278;
-    t["Lcaron"] = 611;
-    t["onehalf"] = 834;
-    t["lessequal"] = 549;
-    t["ocircumflex"] = 611;
-    t["ntilde"] = 611;
-    t["Uhungarumlaut"] = 722;
-    t["Eacute"] = 667;
-    t["emacron"] = 556;
-    t["gbreve"] = 611;
-    t["onequarter"] = 834;
-    t["Scaron"] = 667;
-    t["Scommaaccent"] = 667;
-    t["Ohungarumlaut"] = 778;
-    t["degree"] = 400;
-    t["ograve"] = 611;
-    t["Ccaron"] = 722;
-    t["ugrave"] = 611;
-    t["radical"] = 549;
-    t["Dcaron"] = 722;
-    t["rcommaaccent"] = 389;
-    t["Ntilde"] = 722;
-    t["otilde"] = 611;
-    t["Rcommaaccent"] = 722;
-    t["Lcommaaccent"] = 611;
-    t["Atilde"] = 722;
-    t["Aogonek"] = 722;
-    t["Aring"] = 722;
-    t["Otilde"] = 778;
-    t["zdotaccent"] = 500;
-    t["Ecaron"] = 667;
-    t["Iogonek"] = 278;
-    t["kcommaaccent"] = 556;
-    t["minus"] = 584;
-    t["Icircumflex"] = 278;
-    t["ncaron"] = 611;
-    t["tcommaaccent"] = 333;
-    t["logicalnot"] = 584;
-    t["odieresis"] = 611;
-    t["udieresis"] = 611;
-    t["notequal"] = 549;
-    t["gcommaaccent"] = 611;
-    t["eth"] = 611;
-    t["zcaron"] = 500;
-    t["ncommaaccent"] = 611;
-    t["onesuperior"] = 333;
-    t["imacron"] = 278;
-    t["Euro"] = 556;
+    t.space = 278;
+    t.exclam = 333;
+    t.quotedbl = 474;
+    t.numbersign = 556;
+    t.dollar = 556;
+    t.percent = 889;
+    t.ampersand = 722;
+    t.quoteright = 278;
+    t.parenleft = 333;
+    t.parenright = 333;
+    t.asterisk = 389;
+    t.plus = 584;
+    t.comma = 278;
+    t.hyphen = 333;
+    t.period = 278;
+    t.slash = 278;
+    t.zero = 556;
+    t.one = 556;
+    t.two = 556;
+    t.three = 556;
+    t.four = 556;
+    t.five = 556;
+    t.six = 556;
+    t.seven = 556;
+    t.eight = 556;
+    t.nine = 556;
+    t.colon = 333;
+    t.semicolon = 333;
+    t.less = 584;
+    t.equal = 584;
+    t.greater = 584;
+    t.question = 611;
+    t.at = 975;
+    t.A = 722;
+    t.B = 722;
+    t.C = 722;
+    t.D = 722;
+    t.E = 667;
+    t.F = 611;
+    t.G = 778;
+    t.H = 722;
+    t.I = 278;
+    t.J = 556;
+    t.K = 722;
+    t.L = 611;
+    t.M = 833;
+    t.N = 722;
+    t.O = 778;
+    t.P = 667;
+    t.Q = 778;
+    t.R = 722;
+    t.S = 667;
+    t.T = 611;
+    t.U = 722;
+    t.V = 667;
+    t.W = 944;
+    t.X = 667;
+    t.Y = 667;
+    t.Z = 611;
+    t.bracketleft = 333;
+    t.backslash = 278;
+    t.bracketright = 333;
+    t.asciicircum = 584;
+    t.underscore = 556;
+    t.quoteleft = 278;
+    t.a = 556;
+    t.b = 611;
+    t.c = 556;
+    t.d = 611;
+    t.e = 556;
+    t.f = 333;
+    t.g = 611;
+    t.h = 611;
+    t.i = 278;
+    t.j = 278;
+    t.k = 556;
+    t.l = 278;
+    t.m = 889;
+    t.n = 611;
+    t.o = 611;
+    t.p = 611;
+    t.q = 611;
+    t.r = 389;
+    t.s = 556;
+    t.t = 333;
+    t.u = 611;
+    t.v = 556;
+    t.w = 778;
+    t.x = 556;
+    t.y = 556;
+    t.z = 500;
+    t.braceleft = 389;
+    t.bar = 280;
+    t.braceright = 389;
+    t.asciitilde = 584;
+    t.exclamdown = 333;
+    t.cent = 556;
+    t.sterling = 556;
+    t.fraction = 167;
+    t.yen = 556;
+    t.florin = 556;
+    t.section = 556;
+    t.currency = 556;
+    t.quotesingle = 238;
+    t.quotedblleft = 500;
+    t.guillemotleft = 556;
+    t.guilsinglleft = 333;
+    t.guilsinglright = 333;
+    t.fi = 611;
+    t.fl = 611;
+    t.endash = 556;
+    t.dagger = 556;
+    t.daggerdbl = 556;
+    t.periodcentered = 278;
+    t.paragraph = 556;
+    t.bullet = 350;
+    t.quotesinglbase = 278;
+    t.quotedblbase = 500;
+    t.quotedblright = 500;
+    t.guillemotright = 556;
+    t.ellipsis = 1000;
+    t.perthousand = 1000;
+    t.questiondown = 611;
+    t.grave = 333;
+    t.acute = 333;
+    t.circumflex = 333;
+    t.tilde = 333;
+    t.macron = 333;
+    t.breve = 333;
+    t.dotaccent = 333;
+    t.dieresis = 333;
+    t.ring = 333;
+    t.cedilla = 333;
+    t.hungarumlaut = 333;
+    t.ogonek = 333;
+    t.caron = 333;
+    t.emdash = 1000;
+    t.AE = 1000;
+    t.ordfeminine = 370;
+    t.Lslash = 611;
+    t.Oslash = 778;
+    t.OE = 1000;
+    t.ordmasculine = 365;
+    t.ae = 889;
+    t.dotlessi = 278;
+    t.lslash = 278;
+    t.oslash = 611;
+    t.oe = 944;
+    t.germandbls = 611;
+    t.Idieresis = 278;
+    t.eacute = 556;
+    t.abreve = 556;
+    t.uhungarumlaut = 611;
+    t.ecaron = 556;
+    t.Ydieresis = 667;
+    t.divide = 584;
+    t.Yacute = 667;
+    t.Acircumflex = 722;
+    t.aacute = 556;
+    t.Ucircumflex = 722;
+    t.yacute = 556;
+    t.scommaaccent = 556;
+    t.ecircumflex = 556;
+    t.Uring = 722;
+    t.Udieresis = 722;
+    t.aogonek = 556;
+    t.Uacute = 722;
+    t.uogonek = 611;
+    t.Edieresis = 667;
+    t.Dcroat = 722;
+    t.commaaccent = 250;
+    t.copyright = 737;
+    t.Emacron = 667;
+    t.ccaron = 556;
+    t.aring = 556;
+    t.Ncommaaccent = 722;
+    t.lacute = 278;
+    t.agrave = 556;
+    t.Tcommaaccent = 611;
+    t.Cacute = 722;
+    t.atilde = 556;
+    t.Edotaccent = 667;
+    t.scaron = 556;
+    t.scedilla = 556;
+    t.iacute = 278;
+    t.lozenge = 494;
+    t.Rcaron = 722;
+    t.Gcommaaccent = 778;
+    t.ucircumflex = 611;
+    t.acircumflex = 556;
+    t.Amacron = 722;
+    t.rcaron = 389;
+    t.ccedilla = 556;
+    t.Zdotaccent = 611;
+    t.Thorn = 667;
+    t.Omacron = 778;
+    t.Racute = 722;
+    t.Sacute = 667;
+    t.dcaron = 743;
+    t.Umacron = 722;
+    t.uring = 611;
+    t.threesuperior = 333;
+    t.Ograve = 778;
+    t.Agrave = 722;
+    t.Abreve = 722;
+    t.multiply = 584;
+    t.uacute = 611;
+    t.Tcaron = 611;
+    t.partialdiff = 494;
+    t.ydieresis = 556;
+    t.Nacute = 722;
+    t.icircumflex = 278;
+    t.Ecircumflex = 667;
+    t.adieresis = 556;
+    t.edieresis = 556;
+    t.cacute = 556;
+    t.nacute = 611;
+    t.umacron = 611;
+    t.Ncaron = 722;
+    t.Iacute = 278;
+    t.plusminus = 584;
+    t.brokenbar = 280;
+    t.registered = 737;
+    t.Gbreve = 778;
+    t.Idotaccent = 278;
+    t.summation = 600;
+    t.Egrave = 667;
+    t.racute = 389;
+    t.omacron = 611;
+    t.Zacute = 611;
+    t.Zcaron = 611;
+    t.greaterequal = 549;
+    t.Eth = 722;
+    t.Ccedilla = 722;
+    t.lcommaaccent = 278;
+    t.tcaron = 389;
+    t.eogonek = 556;
+    t.Uogonek = 722;
+    t.Aacute = 722;
+    t.Adieresis = 722;
+    t.egrave = 556;
+    t.zacute = 500;
+    t.iogonek = 278;
+    t.Oacute = 778;
+    t.oacute = 611;
+    t.amacron = 556;
+    t.sacute = 556;
+    t.idieresis = 278;
+    t.Ocircumflex = 778;
+    t.Ugrave = 722;
+    t.Delta = 612;
+    t.thorn = 611;
+    t.twosuperior = 333;
+    t.Odieresis = 778;
+    t.mu = 611;
+    t.igrave = 278;
+    t.ohungarumlaut = 611;
+    t.Eogonek = 667;
+    t.dcroat = 611;
+    t.threequarters = 834;
+    t.Scedilla = 667;
+    t.lcaron = 400;
+    t.Kcommaaccent = 722;
+    t.Lacute = 611;
+    t.trademark = 1000;
+    t.edotaccent = 556;
+    t.Igrave = 278;
+    t.Imacron = 278;
+    t.Lcaron = 611;
+    t.onehalf = 834;
+    t.lessequal = 549;
+    t.ocircumflex = 611;
+    t.ntilde = 611;
+    t.Uhungarumlaut = 722;
+    t.Eacute = 667;
+    t.emacron = 556;
+    t.gbreve = 611;
+    t.onequarter = 834;
+    t.Scaron = 667;
+    t.Scommaaccent = 667;
+    t.Ohungarumlaut = 778;
+    t.degree = 400;
+    t.ograve = 611;
+    t.Ccaron = 722;
+    t.ugrave = 611;
+    t.radical = 549;
+    t.Dcaron = 722;
+    t.rcommaaccent = 389;
+    t.Ntilde = 722;
+    t.otilde = 611;
+    t.Rcommaaccent = 722;
+    t.Lcommaaccent = 611;
+    t.Atilde = 722;
+    t.Aogonek = 722;
+    t.Aring = 722;
+    t.Otilde = 778;
+    t.zdotaccent = 500;
+    t.Ecaron = 667;
+    t.Iogonek = 278;
+    t.kcommaaccent = 556;
+    t.minus = 584;
+    t.Icircumflex = 278;
+    t.ncaron = 611;
+    t.tcommaaccent = 333;
+    t.logicalnot = 584;
+    t.odieresis = 611;
+    t.udieresis = 611;
+    t.notequal = 549;
+    t.gcommaaccent = 611;
+    t.eth = 611;
+    t.zcaron = 500;
+    t.ncommaaccent = 611;
+    t.onesuperior = 333;
+    t.imacron = 278;
+    t.Euro = 556;
   });
   t["Helvetica-Oblique"] = (0, _core_utils.getLookupTableFactory)(function (t) {
-    t["space"] = 278;
-    t["exclam"] = 278;
-    t["quotedbl"] = 355;
-    t["numbersign"] = 556;
-    t["dollar"] = 556;
-    t["percent"] = 889;
-    t["ampersand"] = 667;
-    t["quoteright"] = 222;
-    t["parenleft"] = 333;
-    t["parenright"] = 333;
-    t["asterisk"] = 389;
-    t["plus"] = 584;
-    t["comma"] = 278;
-    t["hyphen"] = 333;
-    t["period"] = 278;
-    t["slash"] = 278;
-    t["zero"] = 556;
-    t["one"] = 556;
-    t["two"] = 556;
-    t["three"] = 556;
-    t["four"] = 556;
-    t["five"] = 556;
-    t["six"] = 556;
-    t["seven"] = 556;
-    t["eight"] = 556;
-    t["nine"] = 556;
-    t["colon"] = 278;
-    t["semicolon"] = 278;
-    t["less"] = 584;
-    t["equal"] = 584;
-    t["greater"] = 584;
-    t["question"] = 556;
-    t["at"] = 1015;
-    t["A"] = 667;
-    t["B"] = 667;
-    t["C"] = 722;
-    t["D"] = 722;
-    t["E"] = 667;
-    t["F"] = 611;
-    t["G"] = 778;
-    t["H"] = 722;
-    t["I"] = 278;
-    t["J"] = 500;
-    t["K"] = 667;
-    t["L"] = 556;
-    t["M"] = 833;
-    t["N"] = 722;
-    t["O"] = 778;
-    t["P"] = 667;
-    t["Q"] = 778;
-    t["R"] = 722;
-    t["S"] = 667;
-    t["T"] = 611;
-    t["U"] = 722;
-    t["V"] = 667;
-    t["W"] = 944;
-    t["X"] = 667;
-    t["Y"] = 667;
-    t["Z"] = 611;
-    t["bracketleft"] = 278;
-    t["backslash"] = 278;
-    t["bracketright"] = 278;
-    t["asciicircum"] = 469;
-    t["underscore"] = 556;
-    t["quoteleft"] = 222;
-    t["a"] = 556;
-    t["b"] = 556;
-    t["c"] = 500;
-    t["d"] = 556;
-    t["e"] = 556;
-    t["f"] = 278;
-    t["g"] = 556;
-    t["h"] = 556;
-    t["i"] = 222;
-    t["j"] = 222;
-    t["k"] = 500;
-    t["l"] = 222;
-    t["m"] = 833;
-    t["n"] = 556;
-    t["o"] = 556;
-    t["p"] = 556;
-    t["q"] = 556;
-    t["r"] = 333;
-    t["s"] = 500;
-    t["t"] = 278;
-    t["u"] = 556;
-    t["v"] = 500;
-    t["w"] = 722;
-    t["x"] = 500;
-    t["y"] = 500;
-    t["z"] = 500;
-    t["braceleft"] = 334;
-    t["bar"] = 260;
-    t["braceright"] = 334;
-    t["asciitilde"] = 584;
-    t["exclamdown"] = 333;
-    t["cent"] = 556;
-    t["sterling"] = 556;
-    t["fraction"] = 167;
-    t["yen"] = 556;
-    t["florin"] = 556;
-    t["section"] = 556;
-    t["currency"] = 556;
-    t["quotesingle"] = 191;
-    t["quotedblleft"] = 333;
-    t["guillemotleft"] = 556;
-    t["guilsinglleft"] = 333;
-    t["guilsinglright"] = 333;
-    t["fi"] = 500;
-    t["fl"] = 500;
-    t["endash"] = 556;
-    t["dagger"] = 556;
-    t["daggerdbl"] = 556;
-    t["periodcentered"] = 278;
-    t["paragraph"] = 537;
-    t["bullet"] = 350;
-    t["quotesinglbase"] = 222;
-    t["quotedblbase"] = 333;
-    t["quotedblright"] = 333;
-    t["guillemotright"] = 556;
-    t["ellipsis"] = 1000;
-    t["perthousand"] = 1000;
-    t["questiondown"] = 611;
-    t["grave"] = 333;
-    t["acute"] = 333;
-    t["circumflex"] = 333;
-    t["tilde"] = 333;
-    t["macron"] = 333;
-    t["breve"] = 333;
-    t["dotaccent"] = 333;
-    t["dieresis"] = 333;
-    t["ring"] = 333;
-    t["cedilla"] = 333;
-    t["hungarumlaut"] = 333;
-    t["ogonek"] = 333;
-    t["caron"] = 333;
-    t["emdash"] = 1000;
-    t["AE"] = 1000;
-    t["ordfeminine"] = 370;
-    t["Lslash"] = 556;
-    t["Oslash"] = 778;
-    t["OE"] = 1000;
-    t["ordmasculine"] = 365;
-    t["ae"] = 889;
-    t["dotlessi"] = 278;
-    t["lslash"] = 222;
-    t["oslash"] = 611;
-    t["oe"] = 944;
-    t["germandbls"] = 611;
-    t["Idieresis"] = 278;
-    t["eacute"] = 556;
-    t["abreve"] = 556;
-    t["uhungarumlaut"] = 556;
-    t["ecaron"] = 556;
-    t["Ydieresis"] = 667;
-    t["divide"] = 584;
-    t["Yacute"] = 667;
-    t["Acircumflex"] = 667;
-    t["aacute"] = 556;
-    t["Ucircumflex"] = 722;
-    t["yacute"] = 500;
-    t["scommaaccent"] = 500;
-    t["ecircumflex"] = 556;
-    t["Uring"] = 722;
-    t["Udieresis"] = 722;
-    t["aogonek"] = 556;
-    t["Uacute"] = 722;
-    t["uogonek"] = 556;
-    t["Edieresis"] = 667;
-    t["Dcroat"] = 722;
-    t["commaaccent"] = 250;
-    t["copyright"] = 737;
-    t["Emacron"] = 667;
-    t["ccaron"] = 500;
-    t["aring"] = 556;
-    t["Ncommaaccent"] = 722;
-    t["lacute"] = 222;
-    t["agrave"] = 556;
-    t["Tcommaaccent"] = 611;
-    t["Cacute"] = 722;
-    t["atilde"] = 556;
-    t["Edotaccent"] = 667;
-    t["scaron"] = 500;
-    t["scedilla"] = 500;
-    t["iacute"] = 278;
-    t["lozenge"] = 471;
-    t["Rcaron"] = 722;
-    t["Gcommaaccent"] = 778;
-    t["ucircumflex"] = 556;
-    t["acircumflex"] = 556;
-    t["Amacron"] = 667;
-    t["rcaron"] = 333;
-    t["ccedilla"] = 500;
-    t["Zdotaccent"] = 611;
-    t["Thorn"] = 667;
-    t["Omacron"] = 778;
-    t["Racute"] = 722;
-    t["Sacute"] = 667;
-    t["dcaron"] = 643;
-    t["Umacron"] = 722;
-    t["uring"] = 556;
-    t["threesuperior"] = 333;
-    t["Ograve"] = 778;
-    t["Agrave"] = 667;
-    t["Abreve"] = 667;
-    t["multiply"] = 584;
-    t["uacute"] = 556;
-    t["Tcaron"] = 611;
-    t["partialdiff"] = 476;
-    t["ydieresis"] = 500;
-    t["Nacute"] = 722;
-    t["icircumflex"] = 278;
-    t["Ecircumflex"] = 667;
-    t["adieresis"] = 556;
-    t["edieresis"] = 556;
-    t["cacute"] = 500;
-    t["nacute"] = 556;
-    t["umacron"] = 556;
-    t["Ncaron"] = 722;
-    t["Iacute"] = 278;
-    t["plusminus"] = 584;
-    t["brokenbar"] = 260;
-    t["registered"] = 737;
-    t["Gbreve"] = 778;
-    t["Idotaccent"] = 278;
-    t["summation"] = 600;
-    t["Egrave"] = 667;
-    t["racute"] = 333;
-    t["omacron"] = 556;
-    t["Zacute"] = 611;
-    t["Zcaron"] = 611;
-    t["greaterequal"] = 549;
-    t["Eth"] = 722;
-    t["Ccedilla"] = 722;
-    t["lcommaaccent"] = 222;
-    t["tcaron"] = 317;
-    t["eogonek"] = 556;
-    t["Uogonek"] = 722;
-    t["Aacute"] = 667;
-    t["Adieresis"] = 667;
-    t["egrave"] = 556;
-    t["zacute"] = 500;
-    t["iogonek"] = 222;
-    t["Oacute"] = 778;
-    t["oacute"] = 556;
-    t["amacron"] = 556;
-    t["sacute"] = 500;
-    t["idieresis"] = 278;
-    t["Ocircumflex"] = 778;
-    t["Ugrave"] = 722;
-    t["Delta"] = 612;
-    t["thorn"] = 556;
-    t["twosuperior"] = 333;
-    t["Odieresis"] = 778;
-    t["mu"] = 556;
-    t["igrave"] = 278;
-    t["ohungarumlaut"] = 556;
-    t["Eogonek"] = 667;
-    t["dcroat"] = 556;
-    t["threequarters"] = 834;
-    t["Scedilla"] = 667;
-    t["lcaron"] = 299;
-    t["Kcommaaccent"] = 667;
-    t["Lacute"] = 556;
-    t["trademark"] = 1000;
-    t["edotaccent"] = 556;
-    t["Igrave"] = 278;
-    t["Imacron"] = 278;
-    t["Lcaron"] = 556;
-    t["onehalf"] = 834;
-    t["lessequal"] = 549;
-    t["ocircumflex"] = 556;
-    t["ntilde"] = 556;
-    t["Uhungarumlaut"] = 722;
-    t["Eacute"] = 667;
-    t["emacron"] = 556;
-    t["gbreve"] = 556;
-    t["onequarter"] = 834;
-    t["Scaron"] = 667;
-    t["Scommaaccent"] = 667;
-    t["Ohungarumlaut"] = 778;
-    t["degree"] = 400;
-    t["ograve"] = 556;
-    t["Ccaron"] = 722;
-    t["ugrave"] = 556;
-    t["radical"] = 453;
-    t["Dcaron"] = 722;
-    t["rcommaaccent"] = 333;
-    t["Ntilde"] = 722;
-    t["otilde"] = 556;
-    t["Rcommaaccent"] = 722;
-    t["Lcommaaccent"] = 556;
-    t["Atilde"] = 667;
-    t["Aogonek"] = 667;
-    t["Aring"] = 667;
-    t["Otilde"] = 778;
-    t["zdotaccent"] = 500;
-    t["Ecaron"] = 667;
-    t["Iogonek"] = 278;
-    t["kcommaaccent"] = 500;
-    t["minus"] = 584;
-    t["Icircumflex"] = 278;
-    t["ncaron"] = 556;
-    t["tcommaaccent"] = 278;
-    t["logicalnot"] = 584;
-    t["odieresis"] = 556;
-    t["udieresis"] = 556;
-    t["notequal"] = 549;
-    t["gcommaaccent"] = 556;
-    t["eth"] = 556;
-    t["zcaron"] = 500;
-    t["ncommaaccent"] = 556;
-    t["onesuperior"] = 333;
-    t["imacron"] = 278;
-    t["Euro"] = 556;
+    t.space = 278;
+    t.exclam = 278;
+    t.quotedbl = 355;
+    t.numbersign = 556;
+    t.dollar = 556;
+    t.percent = 889;
+    t.ampersand = 667;
+    t.quoteright = 222;
+    t.parenleft = 333;
+    t.parenright = 333;
+    t.asterisk = 389;
+    t.plus = 584;
+    t.comma = 278;
+    t.hyphen = 333;
+    t.period = 278;
+    t.slash = 278;
+    t.zero = 556;
+    t.one = 556;
+    t.two = 556;
+    t.three = 556;
+    t.four = 556;
+    t.five = 556;
+    t.six = 556;
+    t.seven = 556;
+    t.eight = 556;
+    t.nine = 556;
+    t.colon = 278;
+    t.semicolon = 278;
+    t.less = 584;
+    t.equal = 584;
+    t.greater = 584;
+    t.question = 556;
+    t.at = 1015;
+    t.A = 667;
+    t.B = 667;
+    t.C = 722;
+    t.D = 722;
+    t.E = 667;
+    t.F = 611;
+    t.G = 778;
+    t.H = 722;
+    t.I = 278;
+    t.J = 500;
+    t.K = 667;
+    t.L = 556;
+    t.M = 833;
+    t.N = 722;
+    t.O = 778;
+    t.P = 667;
+    t.Q = 778;
+    t.R = 722;
+    t.S = 667;
+    t.T = 611;
+    t.U = 722;
+    t.V = 667;
+    t.W = 944;
+    t.X = 667;
+    t.Y = 667;
+    t.Z = 611;
+    t.bracketleft = 278;
+    t.backslash = 278;
+    t.bracketright = 278;
+    t.asciicircum = 469;
+    t.underscore = 556;
+    t.quoteleft = 222;
+    t.a = 556;
+    t.b = 556;
+    t.c = 500;
+    t.d = 556;
+    t.e = 556;
+    t.f = 278;
+    t.g = 556;
+    t.h = 556;
+    t.i = 222;
+    t.j = 222;
+    t.k = 500;
+    t.l = 222;
+    t.m = 833;
+    t.n = 556;
+    t.o = 556;
+    t.p = 556;
+    t.q = 556;
+    t.r = 333;
+    t.s = 500;
+    t.t = 278;
+    t.u = 556;
+    t.v = 500;
+    t.w = 722;
+    t.x = 500;
+    t.y = 500;
+    t.z = 500;
+    t.braceleft = 334;
+    t.bar = 260;
+    t.braceright = 334;
+    t.asciitilde = 584;
+    t.exclamdown = 333;
+    t.cent = 556;
+    t.sterling = 556;
+    t.fraction = 167;
+    t.yen = 556;
+    t.florin = 556;
+    t.section = 556;
+    t.currency = 556;
+    t.quotesingle = 191;
+    t.quotedblleft = 333;
+    t.guillemotleft = 556;
+    t.guilsinglleft = 333;
+    t.guilsinglright = 333;
+    t.fi = 500;
+    t.fl = 500;
+    t.endash = 556;
+    t.dagger = 556;
+    t.daggerdbl = 556;
+    t.periodcentered = 278;
+    t.paragraph = 537;
+    t.bullet = 350;
+    t.quotesinglbase = 222;
+    t.quotedblbase = 333;
+    t.quotedblright = 333;
+    t.guillemotright = 556;
+    t.ellipsis = 1000;
+    t.perthousand = 1000;
+    t.questiondown = 611;
+    t.grave = 333;
+    t.acute = 333;
+    t.circumflex = 333;
+    t.tilde = 333;
+    t.macron = 333;
+    t.breve = 333;
+    t.dotaccent = 333;
+    t.dieresis = 333;
+    t.ring = 333;
+    t.cedilla = 333;
+    t.hungarumlaut = 333;
+    t.ogonek = 333;
+    t.caron = 333;
+    t.emdash = 1000;
+    t.AE = 1000;
+    t.ordfeminine = 370;
+    t.Lslash = 556;
+    t.Oslash = 778;
+    t.OE = 1000;
+    t.ordmasculine = 365;
+    t.ae = 889;
+    t.dotlessi = 278;
+    t.lslash = 222;
+    t.oslash = 611;
+    t.oe = 944;
+    t.germandbls = 611;
+    t.Idieresis = 278;
+    t.eacute = 556;
+    t.abreve = 556;
+    t.uhungarumlaut = 556;
+    t.ecaron = 556;
+    t.Ydieresis = 667;
+    t.divide = 584;
+    t.Yacute = 667;
+    t.Acircumflex = 667;
+    t.aacute = 556;
+    t.Ucircumflex = 722;
+    t.yacute = 500;
+    t.scommaaccent = 500;
+    t.ecircumflex = 556;
+    t.Uring = 722;
+    t.Udieresis = 722;
+    t.aogonek = 556;
+    t.Uacute = 722;
+    t.uogonek = 556;
+    t.Edieresis = 667;
+    t.Dcroat = 722;
+    t.commaaccent = 250;
+    t.copyright = 737;
+    t.Emacron = 667;
+    t.ccaron = 500;
+    t.aring = 556;
+    t.Ncommaaccent = 722;
+    t.lacute = 222;
+    t.agrave = 556;
+    t.Tcommaaccent = 611;
+    t.Cacute = 722;
+    t.atilde = 556;
+    t.Edotaccent = 667;
+    t.scaron = 500;
+    t.scedilla = 500;
+    t.iacute = 278;
+    t.lozenge = 471;
+    t.Rcaron = 722;
+    t.Gcommaaccent = 778;
+    t.ucircumflex = 556;
+    t.acircumflex = 556;
+    t.Amacron = 667;
+    t.rcaron = 333;
+    t.ccedilla = 500;
+    t.Zdotaccent = 611;
+    t.Thorn = 667;
+    t.Omacron = 778;
+    t.Racute = 722;
+    t.Sacute = 667;
+    t.dcaron = 643;
+    t.Umacron = 722;
+    t.uring = 556;
+    t.threesuperior = 333;
+    t.Ograve = 778;
+    t.Agrave = 667;
+    t.Abreve = 667;
+    t.multiply = 584;
+    t.uacute = 556;
+    t.Tcaron = 611;
+    t.partialdiff = 476;
+    t.ydieresis = 500;
+    t.Nacute = 722;
+    t.icircumflex = 278;
+    t.Ecircumflex = 667;
+    t.adieresis = 556;
+    t.edieresis = 556;
+    t.cacute = 500;
+    t.nacute = 556;
+    t.umacron = 556;
+    t.Ncaron = 722;
+    t.Iacute = 278;
+    t.plusminus = 584;
+    t.brokenbar = 260;
+    t.registered = 737;
+    t.Gbreve = 778;
+    t.Idotaccent = 278;
+    t.summation = 600;
+    t.Egrave = 667;
+    t.racute = 333;
+    t.omacron = 556;
+    t.Zacute = 611;
+    t.Zcaron = 611;
+    t.greaterequal = 549;
+    t.Eth = 722;
+    t.Ccedilla = 722;
+    t.lcommaaccent = 222;
+    t.tcaron = 317;
+    t.eogonek = 556;
+    t.Uogonek = 722;
+    t.Aacute = 667;
+    t.Adieresis = 667;
+    t.egrave = 556;
+    t.zacute = 500;
+    t.iogonek = 222;
+    t.Oacute = 778;
+    t.oacute = 556;
+    t.amacron = 556;
+    t.sacute = 500;
+    t.idieresis = 278;
+    t.Ocircumflex = 778;
+    t.Ugrave = 722;
+    t.Delta = 612;
+    t.thorn = 556;
+    t.twosuperior = 333;
+    t.Odieresis = 778;
+    t.mu = 556;
+    t.igrave = 278;
+    t.ohungarumlaut = 556;
+    t.Eogonek = 667;
+    t.dcroat = 556;
+    t.threequarters = 834;
+    t.Scedilla = 667;
+    t.lcaron = 299;
+    t.Kcommaaccent = 667;
+    t.Lacute = 556;
+    t.trademark = 1000;
+    t.edotaccent = 556;
+    t.Igrave = 278;
+    t.Imacron = 278;
+    t.Lcaron = 556;
+    t.onehalf = 834;
+    t.lessequal = 549;
+    t.ocircumflex = 556;
+    t.ntilde = 556;
+    t.Uhungarumlaut = 722;
+    t.Eacute = 667;
+    t.emacron = 556;
+    t.gbreve = 556;
+    t.onequarter = 834;
+    t.Scaron = 667;
+    t.Scommaaccent = 667;
+    t.Ohungarumlaut = 778;
+    t.degree = 400;
+    t.ograve = 556;
+    t.Ccaron = 722;
+    t.ugrave = 556;
+    t.radical = 453;
+    t.Dcaron = 722;
+    t.rcommaaccent = 333;
+    t.Ntilde = 722;
+    t.otilde = 556;
+    t.Rcommaaccent = 722;
+    t.Lcommaaccent = 556;
+    t.Atilde = 667;
+    t.Aogonek = 667;
+    t.Aring = 667;
+    t.Otilde = 778;
+    t.zdotaccent = 500;
+    t.Ecaron = 667;
+    t.Iogonek = 278;
+    t.kcommaaccent = 500;
+    t.minus = 584;
+    t.Icircumflex = 278;
+    t.ncaron = 556;
+    t.tcommaaccent = 278;
+    t.logicalnot = 584;
+    t.odieresis = 556;
+    t.udieresis = 556;
+    t.notequal = 549;
+    t.gcommaaccent = 556;
+    t.eth = 556;
+    t.zcaron = 500;
+    t.ncommaaccent = 556;
+    t.onesuperior = 333;
+    t.imacron = 278;
+    t.Euro = 556;
   });
-  t["Symbol"] = (0, _core_utils.getLookupTableFactory)(function (t) {
-    t["space"] = 250;
-    t["exclam"] = 333;
-    t["universal"] = 713;
-    t["numbersign"] = 500;
-    t["existential"] = 549;
-    t["percent"] = 833;
-    t["ampersand"] = 778;
-    t["suchthat"] = 439;
-    t["parenleft"] = 333;
-    t["parenright"] = 333;
-    t["asteriskmath"] = 500;
-    t["plus"] = 549;
-    t["comma"] = 250;
-    t["minus"] = 549;
-    t["period"] = 250;
-    t["slash"] = 278;
-    t["zero"] = 500;
-    t["one"] = 500;
-    t["two"] = 500;
-    t["three"] = 500;
-    t["four"] = 500;
-    t["five"] = 500;
-    t["six"] = 500;
-    t["seven"] = 500;
-    t["eight"] = 500;
-    t["nine"] = 500;
-    t["colon"] = 278;
-    t["semicolon"] = 278;
-    t["less"] = 549;
-    t["equal"] = 549;
-    t["greater"] = 549;
-    t["question"] = 444;
-    t["congruent"] = 549;
-    t["Alpha"] = 722;
-    t["Beta"] = 667;
-    t["Chi"] = 722;
-    t["Delta"] = 612;
-    t["Epsilon"] = 611;
-    t["Phi"] = 763;
-    t["Gamma"] = 603;
-    t["Eta"] = 722;
-    t["Iota"] = 333;
-    t["theta1"] = 631;
-    t["Kappa"] = 722;
-    t["Lambda"] = 686;
-    t["Mu"] = 889;
-    t["Nu"] = 722;
-    t["Omicron"] = 722;
-    t["Pi"] = 768;
-    t["Theta"] = 741;
-    t["Rho"] = 556;
-    t["Sigma"] = 592;
-    t["Tau"] = 611;
-    t["Upsilon"] = 690;
-    t["sigma1"] = 439;
-    t["Omega"] = 768;
-    t["Xi"] = 645;
-    t["Psi"] = 795;
-    t["Zeta"] = 611;
-    t["bracketleft"] = 333;
-    t["therefore"] = 863;
-    t["bracketright"] = 333;
-    t["perpendicular"] = 658;
-    t["underscore"] = 500;
-    t["radicalex"] = 500;
-    t["alpha"] = 631;
-    t["beta"] = 549;
-    t["chi"] = 549;
-    t["delta"] = 494;
-    t["epsilon"] = 439;
-    t["phi"] = 521;
-    t["gamma"] = 411;
-    t["eta"] = 603;
-    t["iota"] = 329;
-    t["phi1"] = 603;
-    t["kappa"] = 549;
-    t["lambda"] = 549;
-    t["mu"] = 576;
-    t["nu"] = 521;
-    t["omicron"] = 549;
-    t["pi"] = 549;
-    t["theta"] = 521;
-    t["rho"] = 549;
-    t["sigma"] = 603;
-    t["tau"] = 439;
-    t["upsilon"] = 576;
-    t["omega1"] = 713;
-    t["omega"] = 686;
-    t["xi"] = 493;
-    t["psi"] = 686;
-    t["zeta"] = 494;
-    t["braceleft"] = 480;
-    t["bar"] = 200;
-    t["braceright"] = 480;
-    t["similar"] = 549;
-    t["Euro"] = 750;
-    t["Upsilon1"] = 620;
-    t["minute"] = 247;
-    t["lessequal"] = 549;
-    t["fraction"] = 167;
-    t["infinity"] = 713;
-    t["florin"] = 500;
-    t["club"] = 753;
-    t["diamond"] = 753;
-    t["heart"] = 753;
-    t["spade"] = 753;
-    t["arrowboth"] = 1042;
-    t["arrowleft"] = 987;
-    t["arrowup"] = 603;
-    t["arrowright"] = 987;
-    t["arrowdown"] = 603;
-    t["degree"] = 400;
-    t["plusminus"] = 549;
-    t["second"] = 411;
-    t["greaterequal"] = 549;
-    t["multiply"] = 549;
-    t["proportional"] = 713;
-    t["partialdiff"] = 494;
-    t["bullet"] = 460;
-    t["divide"] = 549;
-    t["notequal"] = 549;
-    t["equivalence"] = 549;
-    t["approxequal"] = 549;
-    t["ellipsis"] = 1000;
-    t["arrowvertex"] = 603;
-    t["arrowhorizex"] = 1000;
-    t["carriagereturn"] = 658;
-    t["aleph"] = 823;
-    t["Ifraktur"] = 686;
-    t["Rfraktur"] = 795;
-    t["weierstrass"] = 987;
-    t["circlemultiply"] = 768;
-    t["circleplus"] = 768;
-    t["emptyset"] = 823;
-    t["intersection"] = 768;
-    t["union"] = 768;
-    t["propersuperset"] = 713;
-    t["reflexsuperset"] = 713;
-    t["notsubset"] = 713;
-    t["propersubset"] = 713;
-    t["reflexsubset"] = 713;
-    t["element"] = 713;
-    t["notelement"] = 713;
-    t["angle"] = 768;
-    t["gradient"] = 713;
-    t["registerserif"] = 790;
-    t["copyrightserif"] = 790;
-    t["trademarkserif"] = 890;
-    t["product"] = 823;
-    t["radical"] = 549;
-    t["dotmath"] = 250;
-    t["logicalnot"] = 713;
-    t["logicaland"] = 603;
-    t["logicalor"] = 603;
-    t["arrowdblboth"] = 1042;
-    t["arrowdblleft"] = 987;
-    t["arrowdblup"] = 603;
-    t["arrowdblright"] = 987;
-    t["arrowdbldown"] = 603;
-    t["lozenge"] = 494;
-    t["angleleft"] = 329;
-    t["registersans"] = 790;
-    t["copyrightsans"] = 790;
-    t["trademarksans"] = 786;
-    t["summation"] = 713;
-    t["parenlefttp"] = 384;
-    t["parenleftex"] = 384;
-    t["parenleftbt"] = 384;
-    t["bracketlefttp"] = 384;
-    t["bracketleftex"] = 384;
-    t["bracketleftbt"] = 384;
-    t["bracelefttp"] = 494;
-    t["braceleftmid"] = 494;
-    t["braceleftbt"] = 494;
-    t["braceex"] = 494;
-    t["angleright"] = 329;
-    t["integral"] = 274;
-    t["integraltp"] = 686;
-    t["integralex"] = 686;
-    t["integralbt"] = 686;
-    t["parenrighttp"] = 384;
-    t["parenrightex"] = 384;
-    t["parenrightbt"] = 384;
-    t["bracketrighttp"] = 384;
-    t["bracketrightex"] = 384;
-    t["bracketrightbt"] = 384;
-    t["bracerighttp"] = 494;
-    t["bracerightmid"] = 494;
-    t["bracerightbt"] = 494;
-    t["apple"] = 790;
+  t.Symbol = (0, _core_utils.getLookupTableFactory)(function (t) {
+    t.space = 250;
+    t.exclam = 333;
+    t.universal = 713;
+    t.numbersign = 500;
+    t.existential = 549;
+    t.percent = 833;
+    t.ampersand = 778;
+    t.suchthat = 439;
+    t.parenleft = 333;
+    t.parenright = 333;
+    t.asteriskmath = 500;
+    t.plus = 549;
+    t.comma = 250;
+    t.minus = 549;
+    t.period = 250;
+    t.slash = 278;
+    t.zero = 500;
+    t.one = 500;
+    t.two = 500;
+    t.three = 500;
+    t.four = 500;
+    t.five = 500;
+    t.six = 500;
+    t.seven = 500;
+    t.eight = 500;
+    t.nine = 500;
+    t.colon = 278;
+    t.semicolon = 278;
+    t.less = 549;
+    t.equal = 549;
+    t.greater = 549;
+    t.question = 444;
+    t.congruent = 549;
+    t.Alpha = 722;
+    t.Beta = 667;
+    t.Chi = 722;
+    t.Delta = 612;
+    t.Epsilon = 611;
+    t.Phi = 763;
+    t.Gamma = 603;
+    t.Eta = 722;
+    t.Iota = 333;
+    t.theta1 = 631;
+    t.Kappa = 722;
+    t.Lambda = 686;
+    t.Mu = 889;
+    t.Nu = 722;
+    t.Omicron = 722;
+    t.Pi = 768;
+    t.Theta = 741;
+    t.Rho = 556;
+    t.Sigma = 592;
+    t.Tau = 611;
+    t.Upsilon = 690;
+    t.sigma1 = 439;
+    t.Omega = 768;
+    t.Xi = 645;
+    t.Psi = 795;
+    t.Zeta = 611;
+    t.bracketleft = 333;
+    t.therefore = 863;
+    t.bracketright = 333;
+    t.perpendicular = 658;
+    t.underscore = 500;
+    t.radicalex = 500;
+    t.alpha = 631;
+    t.beta = 549;
+    t.chi = 549;
+    t.delta = 494;
+    t.epsilon = 439;
+    t.phi = 521;
+    t.gamma = 411;
+    t.eta = 603;
+    t.iota = 329;
+    t.phi1 = 603;
+    t.kappa = 549;
+    t.lambda = 549;
+    t.mu = 576;
+    t.nu = 521;
+    t.omicron = 549;
+    t.pi = 549;
+    t.theta = 521;
+    t.rho = 549;
+    t.sigma = 603;
+    t.tau = 439;
+    t.upsilon = 576;
+    t.omega1 = 713;
+    t.omega = 686;
+    t.xi = 493;
+    t.psi = 686;
+    t.zeta = 494;
+    t.braceleft = 480;
+    t.bar = 200;
+    t.braceright = 480;
+    t.similar = 549;
+    t.Euro = 750;
+    t.Upsilon1 = 620;
+    t.minute = 247;
+    t.lessequal = 549;
+    t.fraction = 167;
+    t.infinity = 713;
+    t.florin = 500;
+    t.club = 753;
+    t.diamond = 753;
+    t.heart = 753;
+    t.spade = 753;
+    t.arrowboth = 1042;
+    t.arrowleft = 987;
+    t.arrowup = 603;
+    t.arrowright = 987;
+    t.arrowdown = 603;
+    t.degree = 400;
+    t.plusminus = 549;
+    t.second = 411;
+    t.greaterequal = 549;
+    t.multiply = 549;
+    t.proportional = 713;
+    t.partialdiff = 494;
+    t.bullet = 460;
+    t.divide = 549;
+    t.notequal = 549;
+    t.equivalence = 549;
+    t.approxequal = 549;
+    t.ellipsis = 1000;
+    t.arrowvertex = 603;
+    t.arrowhorizex = 1000;
+    t.carriagereturn = 658;
+    t.aleph = 823;
+    t.Ifraktur = 686;
+    t.Rfraktur = 795;
+    t.weierstrass = 987;
+    t.circlemultiply = 768;
+    t.circleplus = 768;
+    t.emptyset = 823;
+    t.intersection = 768;
+    t.union = 768;
+    t.propersuperset = 713;
+    t.reflexsuperset = 713;
+    t.notsubset = 713;
+    t.propersubset = 713;
+    t.reflexsubset = 713;
+    t.element = 713;
+    t.notelement = 713;
+    t.angle = 768;
+    t.gradient = 713;
+    t.registerserif = 790;
+    t.copyrightserif = 790;
+    t.trademarkserif = 890;
+    t.product = 823;
+    t.radical = 549;
+    t.dotmath = 250;
+    t.logicalnot = 713;
+    t.logicaland = 603;
+    t.logicalor = 603;
+    t.arrowdblboth = 1042;
+    t.arrowdblleft = 987;
+    t.arrowdblup = 603;
+    t.arrowdblright = 987;
+    t.arrowdbldown = 603;
+    t.lozenge = 494;
+    t.angleleft = 329;
+    t.registersans = 790;
+    t.copyrightsans = 790;
+    t.trademarksans = 786;
+    t.summation = 713;
+    t.parenlefttp = 384;
+    t.parenleftex = 384;
+    t.parenleftbt = 384;
+    t.bracketlefttp = 384;
+    t.bracketleftex = 384;
+    t.bracketleftbt = 384;
+    t.bracelefttp = 494;
+    t.braceleftmid = 494;
+    t.braceleftbt = 494;
+    t.braceex = 494;
+    t.angleright = 329;
+    t.integral = 274;
+    t.integraltp = 686;
+    t.integralex = 686;
+    t.integralbt = 686;
+    t.parenrighttp = 384;
+    t.parenrightex = 384;
+    t.parenrightbt = 384;
+    t.bracketrighttp = 384;
+    t.bracketrightex = 384;
+    t.bracketrightbt = 384;
+    t.bracerighttp = 494;
+    t.bracerightmid = 494;
+    t.bracerightbt = 494;
+    t.apple = 790;
   });
   t["Times-Roman"] = (0, _core_utils.getLookupTableFactory)(function (t) {
-    t["space"] = 250;
-    t["exclam"] = 333;
-    t["quotedbl"] = 408;
-    t["numbersign"] = 500;
-    t["dollar"] = 500;
-    t["percent"] = 833;
-    t["ampersand"] = 778;
-    t["quoteright"] = 333;
-    t["parenleft"] = 333;
-    t["parenright"] = 333;
-    t["asterisk"] = 500;
-    t["plus"] = 564;
-    t["comma"] = 250;
-    t["hyphen"] = 333;
-    t["period"] = 250;
-    t["slash"] = 278;
-    t["zero"] = 500;
-    t["one"] = 500;
-    t["two"] = 500;
-    t["three"] = 500;
-    t["four"] = 500;
-    t["five"] = 500;
-    t["six"] = 500;
-    t["seven"] = 500;
-    t["eight"] = 500;
-    t["nine"] = 500;
-    t["colon"] = 278;
-    t["semicolon"] = 278;
-    t["less"] = 564;
-    t["equal"] = 564;
-    t["greater"] = 564;
-    t["question"] = 444;
-    t["at"] = 921;
-    t["A"] = 722;
-    t["B"] = 667;
-    t["C"] = 667;
-    t["D"] = 722;
-    t["E"] = 611;
-    t["F"] = 556;
-    t["G"] = 722;
-    t["H"] = 722;
-    t["I"] = 333;
-    t["J"] = 389;
-    t["K"] = 722;
-    t["L"] = 611;
-    t["M"] = 889;
-    t["N"] = 722;
-    t["O"] = 722;
-    t["P"] = 556;
-    t["Q"] = 722;
-    t["R"] = 667;
-    t["S"] = 556;
-    t["T"] = 611;
-    t["U"] = 722;
-    t["V"] = 722;
-    t["W"] = 944;
-    t["X"] = 722;
-    t["Y"] = 722;
-    t["Z"] = 611;
-    t["bracketleft"] = 333;
-    t["backslash"] = 278;
-    t["bracketright"] = 333;
-    t["asciicircum"] = 469;
-    t["underscore"] = 500;
-    t["quoteleft"] = 333;
-    t["a"] = 444;
-    t["b"] = 500;
-    t["c"] = 444;
-    t["d"] = 500;
-    t["e"] = 444;
-    t["f"] = 333;
-    t["g"] = 500;
-    t["h"] = 500;
-    t["i"] = 278;
-    t["j"] = 278;
-    t["k"] = 500;
-    t["l"] = 278;
-    t["m"] = 778;
-    t["n"] = 500;
-    t["o"] = 500;
-    t["p"] = 500;
-    t["q"] = 500;
-    t["r"] = 333;
-    t["s"] = 389;
-    t["t"] = 278;
-    t["u"] = 500;
-    t["v"] = 500;
-    t["w"] = 722;
-    t["x"] = 500;
-    t["y"] = 500;
-    t["z"] = 444;
-    t["braceleft"] = 480;
-    t["bar"] = 200;
-    t["braceright"] = 480;
-    t["asciitilde"] = 541;
-    t["exclamdown"] = 333;
-    t["cent"] = 500;
-    t["sterling"] = 500;
-    t["fraction"] = 167;
-    t["yen"] = 500;
-    t["florin"] = 500;
-    t["section"] = 500;
-    t["currency"] = 500;
-    t["quotesingle"] = 180;
-    t["quotedblleft"] = 444;
-    t["guillemotleft"] = 500;
-    t["guilsinglleft"] = 333;
-    t["guilsinglright"] = 333;
-    t["fi"] = 556;
-    t["fl"] = 556;
-    t["endash"] = 500;
-    t["dagger"] = 500;
-    t["daggerdbl"] = 500;
-    t["periodcentered"] = 250;
-    t["paragraph"] = 453;
-    t["bullet"] = 350;
-    t["quotesinglbase"] = 333;
-    t["quotedblbase"] = 444;
-    t["quotedblright"] = 444;
-    t["guillemotright"] = 500;
-    t["ellipsis"] = 1000;
-    t["perthousand"] = 1000;
-    t["questiondown"] = 444;
-    t["grave"] = 333;
-    t["acute"] = 333;
-    t["circumflex"] = 333;
-    t["tilde"] = 333;
-    t["macron"] = 333;
-    t["breve"] = 333;
-    t["dotaccent"] = 333;
-    t["dieresis"] = 333;
-    t["ring"] = 333;
-    t["cedilla"] = 333;
-    t["hungarumlaut"] = 333;
-    t["ogonek"] = 333;
-    t["caron"] = 333;
-    t["emdash"] = 1000;
-    t["AE"] = 889;
-    t["ordfeminine"] = 276;
-    t["Lslash"] = 611;
-    t["Oslash"] = 722;
-    t["OE"] = 889;
-    t["ordmasculine"] = 310;
-    t["ae"] = 667;
-    t["dotlessi"] = 278;
-    t["lslash"] = 278;
-    t["oslash"] = 500;
-    t["oe"] = 722;
-    t["germandbls"] = 500;
-    t["Idieresis"] = 333;
-    t["eacute"] = 444;
-    t["abreve"] = 444;
-    t["uhungarumlaut"] = 500;
-    t["ecaron"] = 444;
-    t["Ydieresis"] = 722;
-    t["divide"] = 564;
-    t["Yacute"] = 722;
-    t["Acircumflex"] = 722;
-    t["aacute"] = 444;
-    t["Ucircumflex"] = 722;
-    t["yacute"] = 500;
-    t["scommaaccent"] = 389;
-    t["ecircumflex"] = 444;
-    t["Uring"] = 722;
-    t["Udieresis"] = 722;
-    t["aogonek"] = 444;
-    t["Uacute"] = 722;
-    t["uogonek"] = 500;
-    t["Edieresis"] = 611;
-    t["Dcroat"] = 722;
-    t["commaaccent"] = 250;
-    t["copyright"] = 760;
-    t["Emacron"] = 611;
-    t["ccaron"] = 444;
-    t["aring"] = 444;
-    t["Ncommaaccent"] = 722;
-    t["lacute"] = 278;
-    t["agrave"] = 444;
-    t["Tcommaaccent"] = 611;
-    t["Cacute"] = 667;
-    t["atilde"] = 444;
-    t["Edotaccent"] = 611;
-    t["scaron"] = 389;
-    t["scedilla"] = 389;
-    t["iacute"] = 278;
-    t["lozenge"] = 471;
-    t["Rcaron"] = 667;
-    t["Gcommaaccent"] = 722;
-    t["ucircumflex"] = 500;
-    t["acircumflex"] = 444;
-    t["Amacron"] = 722;
-    t["rcaron"] = 333;
-    t["ccedilla"] = 444;
-    t["Zdotaccent"] = 611;
-    t["Thorn"] = 556;
-    t["Omacron"] = 722;
-    t["Racute"] = 667;
-    t["Sacute"] = 556;
-    t["dcaron"] = 588;
-    t["Umacron"] = 722;
-    t["uring"] = 500;
-    t["threesuperior"] = 300;
-    t["Ograve"] = 722;
-    t["Agrave"] = 722;
-    t["Abreve"] = 722;
-    t["multiply"] = 564;
-    t["uacute"] = 500;
-    t["Tcaron"] = 611;
-    t["partialdiff"] = 476;
-    t["ydieresis"] = 500;
-    t["Nacute"] = 722;
-    t["icircumflex"] = 278;
-    t["Ecircumflex"] = 611;
-    t["adieresis"] = 444;
-    t["edieresis"] = 444;
-    t["cacute"] = 444;
-    t["nacute"] = 500;
-    t["umacron"] = 500;
-    t["Ncaron"] = 722;
-    t["Iacute"] = 333;
-    t["plusminus"] = 564;
-    t["brokenbar"] = 200;
-    t["registered"] = 760;
-    t["Gbreve"] = 722;
-    t["Idotaccent"] = 333;
-    t["summation"] = 600;
-    t["Egrave"] = 611;
-    t["racute"] = 333;
-    t["omacron"] = 500;
-    t["Zacute"] = 611;
-    t["Zcaron"] = 611;
-    t["greaterequal"] = 549;
-    t["Eth"] = 722;
-    t["Ccedilla"] = 667;
-    t["lcommaaccent"] = 278;
-    t["tcaron"] = 326;
-    t["eogonek"] = 444;
-    t["Uogonek"] = 722;
-    t["Aacute"] = 722;
-    t["Adieresis"] = 722;
-    t["egrave"] = 444;
-    t["zacute"] = 444;
-    t["iogonek"] = 278;
-    t["Oacute"] = 722;
-    t["oacute"] = 500;
-    t["amacron"] = 444;
-    t["sacute"] = 389;
-    t["idieresis"] = 278;
-    t["Ocircumflex"] = 722;
-    t["Ugrave"] = 722;
-    t["Delta"] = 612;
-    t["thorn"] = 500;
-    t["twosuperior"] = 300;
-    t["Odieresis"] = 722;
-    t["mu"] = 500;
-    t["igrave"] = 278;
-    t["ohungarumlaut"] = 500;
-    t["Eogonek"] = 611;
-    t["dcroat"] = 500;
-    t["threequarters"] = 750;
-    t["Scedilla"] = 556;
-    t["lcaron"] = 344;
-    t["Kcommaaccent"] = 722;
-    t["Lacute"] = 611;
-    t["trademark"] = 980;
-    t["edotaccent"] = 444;
-    t["Igrave"] = 333;
-    t["Imacron"] = 333;
-    t["Lcaron"] = 611;
-    t["onehalf"] = 750;
-    t["lessequal"] = 549;
-    t["ocircumflex"] = 500;
-    t["ntilde"] = 500;
-    t["Uhungarumlaut"] = 722;
-    t["Eacute"] = 611;
-    t["emacron"] = 444;
-    t["gbreve"] = 500;
-    t["onequarter"] = 750;
-    t["Scaron"] = 556;
-    t["Scommaaccent"] = 556;
-    t["Ohungarumlaut"] = 722;
-    t["degree"] = 400;
-    t["ograve"] = 500;
-    t["Ccaron"] = 667;
-    t["ugrave"] = 500;
-    t["radical"] = 453;
-    t["Dcaron"] = 722;
-    t["rcommaaccent"] = 333;
-    t["Ntilde"] = 722;
-    t["otilde"] = 500;
-    t["Rcommaaccent"] = 667;
-    t["Lcommaaccent"] = 611;
-    t["Atilde"] = 722;
-    t["Aogonek"] = 722;
-    t["Aring"] = 722;
-    t["Otilde"] = 722;
-    t["zdotaccent"] = 444;
-    t["Ecaron"] = 611;
-    t["Iogonek"] = 333;
-    t["kcommaaccent"] = 500;
-    t["minus"] = 564;
-    t["Icircumflex"] = 333;
-    t["ncaron"] = 500;
-    t["tcommaaccent"] = 278;
-    t["logicalnot"] = 564;
-    t["odieresis"] = 500;
-    t["udieresis"] = 500;
-    t["notequal"] = 549;
-    t["gcommaaccent"] = 500;
-    t["eth"] = 500;
-    t["zcaron"] = 444;
-    t["ncommaaccent"] = 500;
-    t["onesuperior"] = 300;
-    t["imacron"] = 278;
-    t["Euro"] = 500;
+    t.space = 250;
+    t.exclam = 333;
+    t.quotedbl = 408;
+    t.numbersign = 500;
+    t.dollar = 500;
+    t.percent = 833;
+    t.ampersand = 778;
+    t.quoteright = 333;
+    t.parenleft = 333;
+    t.parenright = 333;
+    t.asterisk = 500;
+    t.plus = 564;
+    t.comma = 250;
+    t.hyphen = 333;
+    t.period = 250;
+    t.slash = 278;
+    t.zero = 500;
+    t.one = 500;
+    t.two = 500;
+    t.three = 500;
+    t.four = 500;
+    t.five = 500;
+    t.six = 500;
+    t.seven = 500;
+    t.eight = 500;
+    t.nine = 500;
+    t.colon = 278;
+    t.semicolon = 278;
+    t.less = 564;
+    t.equal = 564;
+    t.greater = 564;
+    t.question = 444;
+    t.at = 921;
+    t.A = 722;
+    t.B = 667;
+    t.C = 667;
+    t.D = 722;
+    t.E = 611;
+    t.F = 556;
+    t.G = 722;
+    t.H = 722;
+    t.I = 333;
+    t.J = 389;
+    t.K = 722;
+    t.L = 611;
+    t.M = 889;
+    t.N = 722;
+    t.O = 722;
+    t.P = 556;
+    t.Q = 722;
+    t.R = 667;
+    t.S = 556;
+    t.T = 611;
+    t.U = 722;
+    t.V = 722;
+    t.W = 944;
+    t.X = 722;
+    t.Y = 722;
+    t.Z = 611;
+    t.bracketleft = 333;
+    t.backslash = 278;
+    t.bracketright = 333;
+    t.asciicircum = 469;
+    t.underscore = 500;
+    t.quoteleft = 333;
+    t.a = 444;
+    t.b = 500;
+    t.c = 444;
+    t.d = 500;
+    t.e = 444;
+    t.f = 333;
+    t.g = 500;
+    t.h = 500;
+    t.i = 278;
+    t.j = 278;
+    t.k = 500;
+    t.l = 278;
+    t.m = 778;
+    t.n = 500;
+    t.o = 500;
+    t.p = 500;
+    t.q = 500;
+    t.r = 333;
+    t.s = 389;
+    t.t = 278;
+    t.u = 500;
+    t.v = 500;
+    t.w = 722;
+    t.x = 500;
+    t.y = 500;
+    t.z = 444;
+    t.braceleft = 480;
+    t.bar = 200;
+    t.braceright = 480;
+    t.asciitilde = 541;
+    t.exclamdown = 333;
+    t.cent = 500;
+    t.sterling = 500;
+    t.fraction = 167;
+    t.yen = 500;
+    t.florin = 500;
+    t.section = 500;
+    t.currency = 500;
+    t.quotesingle = 180;
+    t.quotedblleft = 444;
+    t.guillemotleft = 500;
+    t.guilsinglleft = 333;
+    t.guilsinglright = 333;
+    t.fi = 556;
+    t.fl = 556;
+    t.endash = 500;
+    t.dagger = 500;
+    t.daggerdbl = 500;
+    t.periodcentered = 250;
+    t.paragraph = 453;
+    t.bullet = 350;
+    t.quotesinglbase = 333;
+    t.quotedblbase = 444;
+    t.quotedblright = 444;
+    t.guillemotright = 500;
+    t.ellipsis = 1000;
+    t.perthousand = 1000;
+    t.questiondown = 444;
+    t.grave = 333;
+    t.acute = 333;
+    t.circumflex = 333;
+    t.tilde = 333;
+    t.macron = 333;
+    t.breve = 333;
+    t.dotaccent = 333;
+    t.dieresis = 333;
+    t.ring = 333;
+    t.cedilla = 333;
+    t.hungarumlaut = 333;
+    t.ogonek = 333;
+    t.caron = 333;
+    t.emdash = 1000;
+    t.AE = 889;
+    t.ordfeminine = 276;
+    t.Lslash = 611;
+    t.Oslash = 722;
+    t.OE = 889;
+    t.ordmasculine = 310;
+    t.ae = 667;
+    t.dotlessi = 278;
+    t.lslash = 278;
+    t.oslash = 500;
+    t.oe = 722;
+    t.germandbls = 500;
+    t.Idieresis = 333;
+    t.eacute = 444;
+    t.abreve = 444;
+    t.uhungarumlaut = 500;
+    t.ecaron = 444;
+    t.Ydieresis = 722;
+    t.divide = 564;
+    t.Yacute = 722;
+    t.Acircumflex = 722;
+    t.aacute = 444;
+    t.Ucircumflex = 722;
+    t.yacute = 500;
+    t.scommaaccent = 389;
+    t.ecircumflex = 444;
+    t.Uring = 722;
+    t.Udieresis = 722;
+    t.aogonek = 444;
+    t.Uacute = 722;
+    t.uogonek = 500;
+    t.Edieresis = 611;
+    t.Dcroat = 722;
+    t.commaaccent = 250;
+    t.copyright = 760;
+    t.Emacron = 611;
+    t.ccaron = 444;
+    t.aring = 444;
+    t.Ncommaaccent = 722;
+    t.lacute = 278;
+    t.agrave = 444;
+    t.Tcommaaccent = 611;
+    t.Cacute = 667;
+    t.atilde = 444;
+    t.Edotaccent = 611;
+    t.scaron = 389;
+    t.scedilla = 389;
+    t.iacute = 278;
+    t.lozenge = 471;
+    t.Rcaron = 667;
+    t.Gcommaaccent = 722;
+    t.ucircumflex = 500;
+    t.acircumflex = 444;
+    t.Amacron = 722;
+    t.rcaron = 333;
+    t.ccedilla = 444;
+    t.Zdotaccent = 611;
+    t.Thorn = 556;
+    t.Omacron = 722;
+    t.Racute = 667;
+    t.Sacute = 556;
+    t.dcaron = 588;
+    t.Umacron = 722;
+    t.uring = 500;
+    t.threesuperior = 300;
+    t.Ograve = 722;
+    t.Agrave = 722;
+    t.Abreve = 722;
+    t.multiply = 564;
+    t.uacute = 500;
+    t.Tcaron = 611;
+    t.partialdiff = 476;
+    t.ydieresis = 500;
+    t.Nacute = 722;
+    t.icircumflex = 278;
+    t.Ecircumflex = 611;
+    t.adieresis = 444;
+    t.edieresis = 444;
+    t.cacute = 444;
+    t.nacute = 500;
+    t.umacron = 500;
+    t.Ncaron = 722;
+    t.Iacute = 333;
+    t.plusminus = 564;
+    t.brokenbar = 200;
+    t.registered = 760;
+    t.Gbreve = 722;
+    t.Idotaccent = 333;
+    t.summation = 600;
+    t.Egrave = 611;
+    t.racute = 333;
+    t.omacron = 500;
+    t.Zacute = 611;
+    t.Zcaron = 611;
+    t.greaterequal = 549;
+    t.Eth = 722;
+    t.Ccedilla = 667;
+    t.lcommaaccent = 278;
+    t.tcaron = 326;
+    t.eogonek = 444;
+    t.Uogonek = 722;
+    t.Aacute = 722;
+    t.Adieresis = 722;
+    t.egrave = 444;
+    t.zacute = 444;
+    t.iogonek = 278;
+    t.Oacute = 722;
+    t.oacute = 500;
+    t.amacron = 444;
+    t.sacute = 389;
+    t.idieresis = 278;
+    t.Ocircumflex = 722;
+    t.Ugrave = 722;
+    t.Delta = 612;
+    t.thorn = 500;
+    t.twosuperior = 300;
+    t.Odieresis = 722;
+    t.mu = 500;
+    t.igrave = 278;
+    t.ohungarumlaut = 500;
+    t.Eogonek = 611;
+    t.dcroat = 500;
+    t.threequarters = 750;
+    t.Scedilla = 556;
+    t.lcaron = 344;
+    t.Kcommaaccent = 722;
+    t.Lacute = 611;
+    t.trademark = 980;
+    t.edotaccent = 444;
+    t.Igrave = 333;
+    t.Imacron = 333;
+    t.Lcaron = 611;
+    t.onehalf = 750;
+    t.lessequal = 549;
+    t.ocircumflex = 500;
+    t.ntilde = 500;
+    t.Uhungarumlaut = 722;
+    t.Eacute = 611;
+    t.emacron = 444;
+    t.gbreve = 500;
+    t.onequarter = 750;
+    t.Scaron = 556;
+    t.Scommaaccent = 556;
+    t.Ohungarumlaut = 722;
+    t.degree = 400;
+    t.ograve = 500;
+    t.Ccaron = 667;
+    t.ugrave = 500;
+    t.radical = 453;
+    t.Dcaron = 722;
+    t.rcommaaccent = 333;
+    t.Ntilde = 722;
+    t.otilde = 500;
+    t.Rcommaaccent = 667;
+    t.Lcommaaccent = 611;
+    t.Atilde = 722;
+    t.Aogonek = 722;
+    t.Aring = 722;
+    t.Otilde = 722;
+    t.zdotaccent = 444;
+    t.Ecaron = 611;
+    t.Iogonek = 333;
+    t.kcommaaccent = 500;
+    t.minus = 564;
+    t.Icircumflex = 333;
+    t.ncaron = 500;
+    t.tcommaaccent = 278;
+    t.logicalnot = 564;
+    t.odieresis = 500;
+    t.udieresis = 500;
+    t.notequal = 549;
+    t.gcommaaccent = 500;
+    t.eth = 500;
+    t.zcaron = 444;
+    t.ncommaaccent = 500;
+    t.onesuperior = 300;
+    t.imacron = 278;
+    t.Euro = 500;
   });
   t["Times-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) {
-    t["space"] = 250;
-    t["exclam"] = 333;
-    t["quotedbl"] = 555;
-    t["numbersign"] = 500;
-    t["dollar"] = 500;
-    t["percent"] = 1000;
-    t["ampersand"] = 833;
-    t["quoteright"] = 333;
-    t["parenleft"] = 333;
-    t["parenright"] = 333;
-    t["asterisk"] = 500;
-    t["plus"] = 570;
-    t["comma"] = 250;
-    t["hyphen"] = 333;
-    t["period"] = 250;
-    t["slash"] = 278;
-    t["zero"] = 500;
-    t["one"] = 500;
-    t["two"] = 500;
-    t["three"] = 500;
-    t["four"] = 500;
-    t["five"] = 500;
-    t["six"] = 500;
-    t["seven"] = 500;
-    t["eight"] = 500;
-    t["nine"] = 500;
-    t["colon"] = 333;
-    t["semicolon"] = 333;
-    t["less"] = 570;
-    t["equal"] = 570;
-    t["greater"] = 570;
-    t["question"] = 500;
-    t["at"] = 930;
-    t["A"] = 722;
-    t["B"] = 667;
-    t["C"] = 722;
-    t["D"] = 722;
-    t["E"] = 667;
-    t["F"] = 611;
-    t["G"] = 778;
-    t["H"] = 778;
-    t["I"] = 389;
-    t["J"] = 500;
-    t["K"] = 778;
-    t["L"] = 667;
-    t["M"] = 944;
-    t["N"] = 722;
-    t["O"] = 778;
-    t["P"] = 611;
-    t["Q"] = 778;
-    t["R"] = 722;
-    t["S"] = 556;
-    t["T"] = 667;
-    t["U"] = 722;
-    t["V"] = 722;
-    t["W"] = 1000;
-    t["X"] = 722;
-    t["Y"] = 722;
-    t["Z"] = 667;
-    t["bracketleft"] = 333;
-    t["backslash"] = 278;
-    t["bracketright"] = 333;
-    t["asciicircum"] = 581;
-    t["underscore"] = 500;
-    t["quoteleft"] = 333;
-    t["a"] = 500;
-    t["b"] = 556;
-    t["c"] = 444;
-    t["d"] = 556;
-    t["e"] = 444;
-    t["f"] = 333;
-    t["g"] = 500;
-    t["h"] = 556;
-    t["i"] = 278;
-    t["j"] = 333;
-    t["k"] = 556;
-    t["l"] = 278;
-    t["m"] = 833;
-    t["n"] = 556;
-    t["o"] = 500;
-    t["p"] = 556;
-    t["q"] = 556;
-    t["r"] = 444;
-    t["s"] = 389;
-    t["t"] = 333;
-    t["u"] = 556;
-    t["v"] = 500;
-    t["w"] = 722;
-    t["x"] = 500;
-    t["y"] = 500;
-    t["z"] = 444;
-    t["braceleft"] = 394;
-    t["bar"] = 220;
-    t["braceright"] = 394;
-    t["asciitilde"] = 520;
-    t["exclamdown"] = 333;
-    t["cent"] = 500;
-    t["sterling"] = 500;
-    t["fraction"] = 167;
-    t["yen"] = 500;
-    t["florin"] = 500;
-    t["section"] = 500;
-    t["currency"] = 500;
-    t["quotesingle"] = 278;
-    t["quotedblleft"] = 500;
-    t["guillemotleft"] = 500;
-    t["guilsinglleft"] = 333;
-    t["guilsinglright"] = 333;
-    t["fi"] = 556;
-    t["fl"] = 556;
-    t["endash"] = 500;
-    t["dagger"] = 500;
-    t["daggerdbl"] = 500;
-    t["periodcentered"] = 250;
-    t["paragraph"] = 540;
-    t["bullet"] = 350;
-    t["quotesinglbase"] = 333;
-    t["quotedblbase"] = 500;
-    t["quotedblright"] = 500;
-    t["guillemotright"] = 500;
-    t["ellipsis"] = 1000;
-    t["perthousand"] = 1000;
-    t["questiondown"] = 500;
-    t["grave"] = 333;
-    t["acute"] = 333;
-    t["circumflex"] = 333;
-    t["tilde"] = 333;
-    t["macron"] = 333;
-    t["breve"] = 333;
-    t["dotaccent"] = 333;
-    t["dieresis"] = 333;
-    t["ring"] = 333;
-    t["cedilla"] = 333;
-    t["hungarumlaut"] = 333;
-    t["ogonek"] = 333;
-    t["caron"] = 333;
-    t["emdash"] = 1000;
-    t["AE"] = 1000;
-    t["ordfeminine"] = 300;
-    t["Lslash"] = 667;
-    t["Oslash"] = 778;
-    t["OE"] = 1000;
-    t["ordmasculine"] = 330;
-    t["ae"] = 722;
-    t["dotlessi"] = 278;
-    t["lslash"] = 278;
-    t["oslash"] = 500;
-    t["oe"] = 722;
-    t["germandbls"] = 556;
-    t["Idieresis"] = 389;
-    t["eacute"] = 444;
-    t["abreve"] = 500;
-    t["uhungarumlaut"] = 556;
-    t["ecaron"] = 444;
-    t["Ydieresis"] = 722;
-    t["divide"] = 570;
-    t["Yacute"] = 722;
-    t["Acircumflex"] = 722;
-    t["aacute"] = 500;
-    t["Ucircumflex"] = 722;
-    t["yacute"] = 500;
-    t["scommaaccent"] = 389;
-    t["ecircumflex"] = 444;
-    t["Uring"] = 722;
-    t["Udieresis"] = 722;
-    t["aogonek"] = 500;
-    t["Uacute"] = 722;
-    t["uogonek"] = 556;
-    t["Edieresis"] = 667;
-    t["Dcroat"] = 722;
-    t["commaaccent"] = 250;
-    t["copyright"] = 747;
-    t["Emacron"] = 667;
-    t["ccaron"] = 444;
-    t["aring"] = 500;
-    t["Ncommaaccent"] = 722;
-    t["lacute"] = 278;
-    t["agrave"] = 500;
-    t["Tcommaaccent"] = 667;
-    t["Cacute"] = 722;
-    t["atilde"] = 500;
-    t["Edotaccent"] = 667;
-    t["scaron"] = 389;
-    t["scedilla"] = 389;
-    t["iacute"] = 278;
-    t["lozenge"] = 494;
-    t["Rcaron"] = 722;
-    t["Gcommaaccent"] = 778;
-    t["ucircumflex"] = 556;
-    t["acircumflex"] = 500;
-    t["Amacron"] = 722;
-    t["rcaron"] = 444;
-    t["ccedilla"] = 444;
-    t["Zdotaccent"] = 667;
-    t["Thorn"] = 611;
-    t["Omacron"] = 778;
-    t["Racute"] = 722;
-    t["Sacute"] = 556;
-    t["dcaron"] = 672;
-    t["Umacron"] = 722;
-    t["uring"] = 556;
-    t["threesuperior"] = 300;
-    t["Ograve"] = 778;
-    t["Agrave"] = 722;
-    t["Abreve"] = 722;
-    t["multiply"] = 570;
-    t["uacute"] = 556;
-    t["Tcaron"] = 667;
-    t["partialdiff"] = 494;
-    t["ydieresis"] = 500;
-    t["Nacute"] = 722;
-    t["icircumflex"] = 278;
-    t["Ecircumflex"] = 667;
-    t["adieresis"] = 500;
-    t["edieresis"] = 444;
-    t["cacute"] = 444;
-    t["nacute"] = 556;
-    t["umacron"] = 556;
-    t["Ncaron"] = 722;
-    t["Iacute"] = 389;
-    t["plusminus"] = 570;
-    t["brokenbar"] = 220;
-    t["registered"] = 747;
-    t["Gbreve"] = 778;
-    t["Idotaccent"] = 389;
-    t["summation"] = 600;
-    t["Egrave"] = 667;
-    t["racute"] = 444;
-    t["omacron"] = 500;
-    t["Zacute"] = 667;
-    t["Zcaron"] = 667;
-    t["greaterequal"] = 549;
-    t["Eth"] = 722;
-    t["Ccedilla"] = 722;
-    t["lcommaaccent"] = 278;
-    t["tcaron"] = 416;
-    t["eogonek"] = 444;
-    t["Uogonek"] = 722;
-    t["Aacute"] = 722;
-    t["Adieresis"] = 722;
-    t["egrave"] = 444;
-    t["zacute"] = 444;
-    t["iogonek"] = 278;
-    t["Oacute"] = 778;
-    t["oacute"] = 500;
-    t["amacron"] = 500;
-    t["sacute"] = 389;
-    t["idieresis"] = 278;
-    t["Ocircumflex"] = 778;
-    t["Ugrave"] = 722;
-    t["Delta"] = 612;
-    t["thorn"] = 556;
-    t["twosuperior"] = 300;
-    t["Odieresis"] = 778;
-    t["mu"] = 556;
-    t["igrave"] = 278;
-    t["ohungarumlaut"] = 500;
-    t["Eogonek"] = 667;
-    t["dcroat"] = 556;
-    t["threequarters"] = 750;
-    t["Scedilla"] = 556;
-    t["lcaron"] = 394;
-    t["Kcommaaccent"] = 778;
-    t["Lacute"] = 667;
-    t["trademark"] = 1000;
-    t["edotaccent"] = 444;
-    t["Igrave"] = 389;
-    t["Imacron"] = 389;
-    t["Lcaron"] = 667;
-    t["onehalf"] = 750;
-    t["lessequal"] = 549;
-    t["ocircumflex"] = 500;
-    t["ntilde"] = 556;
-    t["Uhungarumlaut"] = 722;
-    t["Eacute"] = 667;
-    t["emacron"] = 444;
-    t["gbreve"] = 500;
-    t["onequarter"] = 750;
-    t["Scaron"] = 556;
-    t["Scommaaccent"] = 556;
-    t["Ohungarumlaut"] = 778;
-    t["degree"] = 400;
-    t["ograve"] = 500;
-    t["Ccaron"] = 722;
-    t["ugrave"] = 556;
-    t["radical"] = 549;
-    t["Dcaron"] = 722;
-    t["rcommaaccent"] = 444;
-    t["Ntilde"] = 722;
-    t["otilde"] = 500;
-    t["Rcommaaccent"] = 722;
-    t["Lcommaaccent"] = 667;
-    t["Atilde"] = 722;
-    t["Aogonek"] = 722;
-    t["Aring"] = 722;
-    t["Otilde"] = 778;
-    t["zdotaccent"] = 444;
-    t["Ecaron"] = 667;
-    t["Iogonek"] = 389;
-    t["kcommaaccent"] = 556;
-    t["minus"] = 570;
-    t["Icircumflex"] = 389;
-    t["ncaron"] = 556;
-    t["tcommaaccent"] = 333;
-    t["logicalnot"] = 570;
-    t["odieresis"] = 500;
-    t["udieresis"] = 556;
-    t["notequal"] = 549;
-    t["gcommaaccent"] = 500;
-    t["eth"] = 500;
-    t["zcaron"] = 444;
-    t["ncommaaccent"] = 556;
-    t["onesuperior"] = 300;
-    t["imacron"] = 278;
-    t["Euro"] = 500;
+    t.space = 250;
+    t.exclam = 333;
+    t.quotedbl = 555;
+    t.numbersign = 500;
+    t.dollar = 500;
+    t.percent = 1000;
+    t.ampersand = 833;
+    t.quoteright = 333;
+    t.parenleft = 333;
+    t.parenright = 333;
+    t.asterisk = 500;
+    t.plus = 570;
+    t.comma = 250;
+    t.hyphen = 333;
+    t.period = 250;
+    t.slash = 278;
+    t.zero = 500;
+    t.one = 500;
+    t.two = 500;
+    t.three = 500;
+    t.four = 500;
+    t.five = 500;
+    t.six = 500;
+    t.seven = 500;
+    t.eight = 500;
+    t.nine = 500;
+    t.colon = 333;
+    t.semicolon = 333;
+    t.less = 570;
+    t.equal = 570;
+    t.greater = 570;
+    t.question = 500;
+    t.at = 930;
+    t.A = 722;
+    t.B = 667;
+    t.C = 722;
+    t.D = 722;
+    t.E = 667;
+    t.F = 611;
+    t.G = 778;
+    t.H = 778;
+    t.I = 389;
+    t.J = 500;
+    t.K = 778;
+    t.L = 667;
+    t.M = 944;
+    t.N = 722;
+    t.O = 778;
+    t.P = 611;
+    t.Q = 778;
+    t.R = 722;
+    t.S = 556;
+    t.T = 667;
+    t.U = 722;
+    t.V = 722;
+    t.W = 1000;
+    t.X = 722;
+    t.Y = 722;
+    t.Z = 667;
+    t.bracketleft = 333;
+    t.backslash = 278;
+    t.bracketright = 333;
+    t.asciicircum = 581;
+    t.underscore = 500;
+    t.quoteleft = 333;
+    t.a = 500;
+    t.b = 556;
+    t.c = 444;
+    t.d = 556;
+    t.e = 444;
+    t.f = 333;
+    t.g = 500;
+    t.h = 556;
+    t.i = 278;
+    t.j = 333;
+    t.k = 556;
+    t.l = 278;
+    t.m = 833;
+    t.n = 556;
+    t.o = 500;
+    t.p = 556;
+    t.q = 556;
+    t.r = 444;
+    t.s = 389;
+    t.t = 333;
+    t.u = 556;
+    t.v = 500;
+    t.w = 722;
+    t.x = 500;
+    t.y = 500;
+    t.z = 444;
+    t.braceleft = 394;
+    t.bar = 220;
+    t.braceright = 394;
+    t.asciitilde = 520;
+    t.exclamdown = 333;
+    t.cent = 500;
+    t.sterling = 500;
+    t.fraction = 167;
+    t.yen = 500;
+    t.florin = 500;
+    t.section = 500;
+    t.currency = 500;
+    t.quotesingle = 278;
+    t.quotedblleft = 500;
+    t.guillemotleft = 500;
+    t.guilsinglleft = 333;
+    t.guilsinglright = 333;
+    t.fi = 556;
+    t.fl = 556;
+    t.endash = 500;
+    t.dagger = 500;
+    t.daggerdbl = 500;
+    t.periodcentered = 250;
+    t.paragraph = 540;
+    t.bullet = 350;
+    t.quotesinglbase = 333;
+    t.quotedblbase = 500;
+    t.quotedblright = 500;
+    t.guillemotright = 500;
+    t.ellipsis = 1000;
+    t.perthousand = 1000;
+    t.questiondown = 500;
+    t.grave = 333;
+    t.acute = 333;
+    t.circumflex = 333;
+    t.tilde = 333;
+    t.macron = 333;
+    t.breve = 333;
+    t.dotaccent = 333;
+    t.dieresis = 333;
+    t.ring = 333;
+    t.cedilla = 333;
+    t.hungarumlaut = 333;
+    t.ogonek = 333;
+    t.caron = 333;
+    t.emdash = 1000;
+    t.AE = 1000;
+    t.ordfeminine = 300;
+    t.Lslash = 667;
+    t.Oslash = 778;
+    t.OE = 1000;
+    t.ordmasculine = 330;
+    t.ae = 722;
+    t.dotlessi = 278;
+    t.lslash = 278;
+    t.oslash = 500;
+    t.oe = 722;
+    t.germandbls = 556;
+    t.Idieresis = 389;
+    t.eacute = 444;
+    t.abreve = 500;
+    t.uhungarumlaut = 556;
+    t.ecaron = 444;
+    t.Ydieresis = 722;
+    t.divide = 570;
+    t.Yacute = 722;
+    t.Acircumflex = 722;
+    t.aacute = 500;
+    t.Ucircumflex = 722;
+    t.yacute = 500;
+    t.scommaaccent = 389;
+    t.ecircumflex = 444;
+    t.Uring = 722;
+    t.Udieresis = 722;
+    t.aogonek = 500;
+    t.Uacute = 722;
+    t.uogonek = 556;
+    t.Edieresis = 667;
+    t.Dcroat = 722;
+    t.commaaccent = 250;
+    t.copyright = 747;
+    t.Emacron = 667;
+    t.ccaron = 444;
+    t.aring = 500;
+    t.Ncommaaccent = 722;
+    t.lacute = 278;
+    t.agrave = 500;
+    t.Tcommaaccent = 667;
+    t.Cacute = 722;
+    t.atilde = 500;
+    t.Edotaccent = 667;
+    t.scaron = 389;
+    t.scedilla = 389;
+    t.iacute = 278;
+    t.lozenge = 494;
+    t.Rcaron = 722;
+    t.Gcommaaccent = 778;
+    t.ucircumflex = 556;
+    t.acircumflex = 500;
+    t.Amacron = 722;
+    t.rcaron = 444;
+    t.ccedilla = 444;
+    t.Zdotaccent = 667;
+    t.Thorn = 611;
+    t.Omacron = 778;
+    t.Racute = 722;
+    t.Sacute = 556;
+    t.dcaron = 672;
+    t.Umacron = 722;
+    t.uring = 556;
+    t.threesuperior = 300;
+    t.Ograve = 778;
+    t.Agrave = 722;
+    t.Abreve = 722;
+    t.multiply = 570;
+    t.uacute = 556;
+    t.Tcaron = 667;
+    t.partialdiff = 494;
+    t.ydieresis = 500;
+    t.Nacute = 722;
+    t.icircumflex = 278;
+    t.Ecircumflex = 667;
+    t.adieresis = 500;
+    t.edieresis = 444;
+    t.cacute = 444;
+    t.nacute = 556;
+    t.umacron = 556;
+    t.Ncaron = 722;
+    t.Iacute = 389;
+    t.plusminus = 570;
+    t.brokenbar = 220;
+    t.registered = 747;
+    t.Gbreve = 778;
+    t.Idotaccent = 389;
+    t.summation = 600;
+    t.Egrave = 667;
+    t.racute = 444;
+    t.omacron = 500;
+    t.Zacute = 667;
+    t.Zcaron = 667;
+    t.greaterequal = 549;
+    t.Eth = 722;
+    t.Ccedilla = 722;
+    t.lcommaaccent = 278;
+    t.tcaron = 416;
+    t.eogonek = 444;
+    t.Uogonek = 722;
+    t.Aacute = 722;
+    t.Adieresis = 722;
+    t.egrave = 444;
+    t.zacute = 444;
+    t.iogonek = 278;
+    t.Oacute = 778;
+    t.oacute = 500;
+    t.amacron = 500;
+    t.sacute = 389;
+    t.idieresis = 278;
+    t.Ocircumflex = 778;
+    t.Ugrave = 722;
+    t.Delta = 612;
+    t.thorn = 556;
+    t.twosuperior = 300;
+    t.Odieresis = 778;
+    t.mu = 556;
+    t.igrave = 278;
+    t.ohungarumlaut = 500;
+    t.Eogonek = 667;
+    t.dcroat = 556;
+    t.threequarters = 750;
+    t.Scedilla = 556;
+    t.lcaron = 394;
+    t.Kcommaaccent = 778;
+    t.Lacute = 667;
+    t.trademark = 1000;
+    t.edotaccent = 444;
+    t.Igrave = 389;
+    t.Imacron = 389;
+    t.Lcaron = 667;
+    t.onehalf = 750;
+    t.lessequal = 549;
+    t.ocircumflex = 500;
+    t.ntilde = 556;
+    t.Uhungarumlaut = 722;
+    t.Eacute = 667;
+    t.emacron = 444;
+    t.gbreve = 500;
+    t.onequarter = 750;
+    t.Scaron = 556;
+    t.Scommaaccent = 556;
+    t.Ohungarumlaut = 778;
+    t.degree = 400;
+    t.ograve = 500;
+    t.Ccaron = 722;
+    t.ugrave = 556;
+    t.radical = 549;
+    t.Dcaron = 722;
+    t.rcommaaccent = 444;
+    t.Ntilde = 722;
+    t.otilde = 500;
+    t.Rcommaaccent = 722;
+    t.Lcommaaccent = 667;
+    t.Atilde = 722;
+    t.Aogonek = 722;
+    t.Aring = 722;
+    t.Otilde = 778;
+    t.zdotaccent = 444;
+    t.Ecaron = 667;
+    t.Iogonek = 389;
+    t.kcommaaccent = 556;
+    t.minus = 570;
+    t.Icircumflex = 389;
+    t.ncaron = 556;
+    t.tcommaaccent = 333;
+    t.logicalnot = 570;
+    t.odieresis = 500;
+    t.udieresis = 556;
+    t.notequal = 549;
+    t.gcommaaccent = 500;
+    t.eth = 500;
+    t.zcaron = 444;
+    t.ncommaaccent = 556;
+    t.onesuperior = 300;
+    t.imacron = 278;
+    t.Euro = 500;
   });
   t["Times-BoldItalic"] = (0, _core_utils.getLookupTableFactory)(function (t) {
-    t["space"] = 250;
-    t["exclam"] = 389;
-    t["quotedbl"] = 555;
-    t["numbersign"] = 500;
-    t["dollar"] = 500;
-    t["percent"] = 833;
-    t["ampersand"] = 778;
-    t["quoteright"] = 333;
-    t["parenleft"] = 333;
-    t["parenright"] = 333;
-    t["asterisk"] = 500;
-    t["plus"] = 570;
-    t["comma"] = 250;
-    t["hyphen"] = 333;
-    t["period"] = 250;
-    t["slash"] = 278;
-    t["zero"] = 500;
-    t["one"] = 500;
-    t["two"] = 500;
-    t["three"] = 500;
-    t["four"] = 500;
-    t["five"] = 500;
-    t["six"] = 500;
-    t["seven"] = 500;
-    t["eight"] = 500;
-    t["nine"] = 500;
-    t["colon"] = 333;
-    t["semicolon"] = 333;
-    t["less"] = 570;
-    t["equal"] = 570;
-    t["greater"] = 570;
-    t["question"] = 500;
-    t["at"] = 832;
-    t["A"] = 667;
-    t["B"] = 667;
-    t["C"] = 667;
-    t["D"] = 722;
-    t["E"] = 667;
-    t["F"] = 667;
-    t["G"] = 722;
-    t["H"] = 778;
-    t["I"] = 389;
-    t["J"] = 500;
-    t["K"] = 667;
-    t["L"] = 611;
-    t["M"] = 889;
-    t["N"] = 722;
-    t["O"] = 722;
-    t["P"] = 611;
-    t["Q"] = 722;
-    t["R"] = 667;
-    t["S"] = 556;
-    t["T"] = 611;
-    t["U"] = 722;
-    t["V"] = 667;
-    t["W"] = 889;
-    t["X"] = 667;
-    t["Y"] = 611;
-    t["Z"] = 611;
-    t["bracketleft"] = 333;
-    t["backslash"] = 278;
-    t["bracketright"] = 333;
-    t["asciicircum"] = 570;
-    t["underscore"] = 500;
-    t["quoteleft"] = 333;
-    t["a"] = 500;
-    t["b"] = 500;
-    t["c"] = 444;
-    t["d"] = 500;
-    t["e"] = 444;
-    t["f"] = 333;
-    t["g"] = 500;
-    t["h"] = 556;
-    t["i"] = 278;
-    t["j"] = 278;
-    t["k"] = 500;
-    t["l"] = 278;
-    t["m"] = 778;
-    t["n"] = 556;
-    t["o"] = 500;
-    t["p"] = 500;
-    t["q"] = 500;
-    t["r"] = 389;
-    t["s"] = 389;
-    t["t"] = 278;
-    t["u"] = 556;
-    t["v"] = 444;
-    t["w"] = 667;
-    t["x"] = 500;
-    t["y"] = 444;
-    t["z"] = 389;
-    t["braceleft"] = 348;
-    t["bar"] = 220;
-    t["braceright"] = 348;
-    t["asciitilde"] = 570;
-    t["exclamdown"] = 389;
-    t["cent"] = 500;
-    t["sterling"] = 500;
-    t["fraction"] = 167;
-    t["yen"] = 500;
-    t["florin"] = 500;
-    t["section"] = 500;
-    t["currency"] = 500;
-    t["quotesingle"] = 278;
-    t["quotedblleft"] = 500;
-    t["guillemotleft"] = 500;
-    t["guilsinglleft"] = 333;
-    t["guilsinglright"] = 333;
-    t["fi"] = 556;
-    t["fl"] = 556;
-    t["endash"] = 500;
-    t["dagger"] = 500;
-    t["daggerdbl"] = 500;
-    t["periodcentered"] = 250;
-    t["paragraph"] = 500;
-    t["bullet"] = 350;
-    t["quotesinglbase"] = 333;
-    t["quotedblbase"] = 500;
-    t["quotedblright"] = 500;
-    t["guillemotright"] = 500;
-    t["ellipsis"] = 1000;
-    t["perthousand"] = 1000;
-    t["questiondown"] = 500;
-    t["grave"] = 333;
-    t["acute"] = 333;
-    t["circumflex"] = 333;
-    t["tilde"] = 333;
-    t["macron"] = 333;
-    t["breve"] = 333;
-    t["dotaccent"] = 333;
-    t["dieresis"] = 333;
-    t["ring"] = 333;
-    t["cedilla"] = 333;
-    t["hungarumlaut"] = 333;
-    t["ogonek"] = 333;
-    t["caron"] = 333;
-    t["emdash"] = 1000;
-    t["AE"] = 944;
-    t["ordfeminine"] = 266;
-    t["Lslash"] = 611;
-    t["Oslash"] = 722;
-    t["OE"] = 944;
-    t["ordmasculine"] = 300;
-    t["ae"] = 722;
-    t["dotlessi"] = 278;
-    t["lslash"] = 278;
-    t["oslash"] = 500;
-    t["oe"] = 722;
-    t["germandbls"] = 500;
-    t["Idieresis"] = 389;
-    t["eacute"] = 444;
-    t["abreve"] = 500;
-    t["uhungarumlaut"] = 556;
-    t["ecaron"] = 444;
-    t["Ydieresis"] = 611;
-    t["divide"] = 570;
-    t["Yacute"] = 611;
-    t["Acircumflex"] = 667;
-    t["aacute"] = 500;
-    t["Ucircumflex"] = 722;
-    t["yacute"] = 444;
-    t["scommaaccent"] = 389;
-    t["ecircumflex"] = 444;
-    t["Uring"] = 722;
-    t["Udieresis"] = 722;
-    t["aogonek"] = 500;
-    t["Uacute"] = 722;
-    t["uogonek"] = 556;
-    t["Edieresis"] = 667;
-    t["Dcroat"] = 722;
-    t["commaaccent"] = 250;
-    t["copyright"] = 747;
-    t["Emacron"] = 667;
-    t["ccaron"] = 444;
-    t["aring"] = 500;
-    t["Ncommaaccent"] = 722;
-    t["lacute"] = 278;
-    t["agrave"] = 500;
-    t["Tcommaaccent"] = 611;
-    t["Cacute"] = 667;
-    t["atilde"] = 500;
-    t["Edotaccent"] = 667;
-    t["scaron"] = 389;
-    t["scedilla"] = 389;
-    t["iacute"] = 278;
-    t["lozenge"] = 494;
-    t["Rcaron"] = 667;
-    t["Gcommaaccent"] = 722;
-    t["ucircumflex"] = 556;
-    t["acircumflex"] = 500;
-    t["Amacron"] = 667;
-    t["rcaron"] = 389;
-    t["ccedilla"] = 444;
-    t["Zdotaccent"] = 611;
-    t["Thorn"] = 611;
-    t["Omacron"] = 722;
-    t["Racute"] = 667;
-    t["Sacute"] = 556;
-    t["dcaron"] = 608;
-    t["Umacron"] = 722;
-    t["uring"] = 556;
-    t["threesuperior"] = 300;
-    t["Ograve"] = 722;
-    t["Agrave"] = 667;
-    t["Abreve"] = 667;
-    t["multiply"] = 570;
-    t["uacute"] = 556;
-    t["Tcaron"] = 611;
-    t["partialdiff"] = 494;
-    t["ydieresis"] = 444;
-    t["Nacute"] = 722;
-    t["icircumflex"] = 278;
-    t["Ecircumflex"] = 667;
-    t["adieresis"] = 500;
-    t["edieresis"] = 444;
-    t["cacute"] = 444;
-    t["nacute"] = 556;
-    t["umacron"] = 556;
-    t["Ncaron"] = 722;
-    t["Iacute"] = 389;
-    t["plusminus"] = 570;
-    t["brokenbar"] = 220;
-    t["registered"] = 747;
-    t["Gbreve"] = 722;
-    t["Idotaccent"] = 389;
-    t["summation"] = 600;
-    t["Egrave"] = 667;
-    t["racute"] = 389;
-    t["omacron"] = 500;
-    t["Zacute"] = 611;
-    t["Zcaron"] = 611;
-    t["greaterequal"] = 549;
-    t["Eth"] = 722;
-    t["Ccedilla"] = 667;
-    t["lcommaaccent"] = 278;
-    t["tcaron"] = 366;
-    t["eogonek"] = 444;
-    t["Uogonek"] = 722;
-    t["Aacute"] = 667;
-    t["Adieresis"] = 667;
-    t["egrave"] = 444;
-    t["zacute"] = 389;
-    t["iogonek"] = 278;
-    t["Oacute"] = 722;
-    t["oacute"] = 500;
-    t["amacron"] = 500;
-    t["sacute"] = 389;
-    t["idieresis"] = 278;
-    t["Ocircumflex"] = 722;
-    t["Ugrave"] = 722;
-    t["Delta"] = 612;
-    t["thorn"] = 500;
-    t["twosuperior"] = 300;
-    t["Odieresis"] = 722;
-    t["mu"] = 576;
-    t["igrave"] = 278;
-    t["ohungarumlaut"] = 500;
-    t["Eogonek"] = 667;
-    t["dcroat"] = 500;
-    t["threequarters"] = 750;
-    t["Scedilla"] = 556;
-    t["lcaron"] = 382;
-    t["Kcommaaccent"] = 667;
-    t["Lacute"] = 611;
-    t["trademark"] = 1000;
-    t["edotaccent"] = 444;
-    t["Igrave"] = 389;
-    t["Imacron"] = 389;
-    t["Lcaron"] = 611;
-    t["onehalf"] = 750;
-    t["lessequal"] = 549;
-    t["ocircumflex"] = 500;
-    t["ntilde"] = 556;
-    t["Uhungarumlaut"] = 722;
-    t["Eacute"] = 667;
-    t["emacron"] = 444;
-    t["gbreve"] = 500;
-    t["onequarter"] = 750;
-    t["Scaron"] = 556;
-    t["Scommaaccent"] = 556;
-    t["Ohungarumlaut"] = 722;
-    t["degree"] = 400;
-    t["ograve"] = 500;
-    t["Ccaron"] = 667;
-    t["ugrave"] = 556;
-    t["radical"] = 549;
-    t["Dcaron"] = 722;
-    t["rcommaaccent"] = 389;
-    t["Ntilde"] = 722;
-    t["otilde"] = 500;
-    t["Rcommaaccent"] = 667;
-    t["Lcommaaccent"] = 611;
-    t["Atilde"] = 667;
-    t["Aogonek"] = 667;
-    t["Aring"] = 667;
-    t["Otilde"] = 722;
-    t["zdotaccent"] = 389;
-    t["Ecaron"] = 667;
-    t["Iogonek"] = 389;
-    t["kcommaaccent"] = 500;
-    t["minus"] = 606;
-    t["Icircumflex"] = 389;
-    t["ncaron"] = 556;
-    t["tcommaaccent"] = 278;
-    t["logicalnot"] = 606;
-    t["odieresis"] = 500;
-    t["udieresis"] = 556;
-    t["notequal"] = 549;
-    t["gcommaaccent"] = 500;
-    t["eth"] = 500;
-    t["zcaron"] = 389;
-    t["ncommaaccent"] = 556;
-    t["onesuperior"] = 300;
-    t["imacron"] = 278;
-    t["Euro"] = 500;
+    t.space = 250;
+    t.exclam = 389;
+    t.quotedbl = 555;
+    t.numbersign = 500;
+    t.dollar = 500;
+    t.percent = 833;
+    t.ampersand = 778;
+    t.quoteright = 333;
+    t.parenleft = 333;
+    t.parenright = 333;
+    t.asterisk = 500;
+    t.plus = 570;
+    t.comma = 250;
+    t.hyphen = 333;
+    t.period = 250;
+    t.slash = 278;
+    t.zero = 500;
+    t.one = 500;
+    t.two = 500;
+    t.three = 500;
+    t.four = 500;
+    t.five = 500;
+    t.six = 500;
+    t.seven = 500;
+    t.eight = 500;
+    t.nine = 500;
+    t.colon = 333;
+    t.semicolon = 333;
+    t.less = 570;
+    t.equal = 570;
+    t.greater = 570;
+    t.question = 500;
+    t.at = 832;
+    t.A = 667;
+    t.B = 667;
+    t.C = 667;
+    t.D = 722;
+    t.E = 667;
+    t.F = 667;
+    t.G = 722;
+    t.H = 778;
+    t.I = 389;
+    t.J = 500;
+    t.K = 667;
+    t.L = 611;
+    t.M = 889;
+    t.N = 722;
+    t.O = 722;
+    t.P = 611;
+    t.Q = 722;
+    t.R = 667;
+    t.S = 556;
+    t.T = 611;
+    t.U = 722;
+    t.V = 667;
+    t.W = 889;
+    t.X = 667;
+    t.Y = 611;
+    t.Z = 611;
+    t.bracketleft = 333;
+    t.backslash = 278;
+    t.bracketright = 333;
+    t.asciicircum = 570;
+    t.underscore = 500;
+    t.quoteleft = 333;
+    t.a = 500;
+    t.b = 500;
+    t.c = 444;
+    t.d = 500;
+    t.e = 444;
+    t.f = 333;
+    t.g = 500;
+    t.h = 556;
+    t.i = 278;
+    t.j = 278;
+    t.k = 500;
+    t.l = 278;
+    t.m = 778;
+    t.n = 556;
+    t.o = 500;
+    t.p = 500;
+    t.q = 500;
+    t.r = 389;
+    t.s = 389;
+    t.t = 278;
+    t.u = 556;
+    t.v = 444;
+    t.w = 667;
+    t.x = 500;
+    t.y = 444;
+    t.z = 389;
+    t.braceleft = 348;
+    t.bar = 220;
+    t.braceright = 348;
+    t.asciitilde = 570;
+    t.exclamdown = 389;
+    t.cent = 500;
+    t.sterling = 500;
+    t.fraction = 167;
+    t.yen = 500;
+    t.florin = 500;
+    t.section = 500;
+    t.currency = 500;
+    t.quotesingle = 278;
+    t.quotedblleft = 500;
+    t.guillemotleft = 500;
+    t.guilsinglleft = 333;
+    t.guilsinglright = 333;
+    t.fi = 556;
+    t.fl = 556;
+    t.endash = 500;
+    t.dagger = 500;
+    t.daggerdbl = 500;
+    t.periodcentered = 250;
+    t.paragraph = 500;
+    t.bullet = 350;
+    t.quotesinglbase = 333;
+    t.quotedblbase = 500;
+    t.quotedblright = 500;
+    t.guillemotright = 500;
+    t.ellipsis = 1000;
+    t.perthousand = 1000;
+    t.questiondown = 500;
+    t.grave = 333;
+    t.acute = 333;
+    t.circumflex = 333;
+    t.tilde = 333;
+    t.macron = 333;
+    t.breve = 333;
+    t.dotaccent = 333;
+    t.dieresis = 333;
+    t.ring = 333;
+    t.cedilla = 333;
+    t.hungarumlaut = 333;
+    t.ogonek = 333;
+    t.caron = 333;
+    t.emdash = 1000;
+    t.AE = 944;
+    t.ordfeminine = 266;
+    t.Lslash = 611;
+    t.Oslash = 722;
+    t.OE = 944;
+    t.ordmasculine = 300;
+    t.ae = 722;
+    t.dotlessi = 278;
+    t.lslash = 278;
+    t.oslash = 500;
+    t.oe = 722;
+    t.germandbls = 500;
+    t.Idieresis = 389;
+    t.eacute = 444;
+    t.abreve = 500;
+    t.uhungarumlaut = 556;
+    t.ecaron = 444;
+    t.Ydieresis = 611;
+    t.divide = 570;
+    t.Yacute = 611;
+    t.Acircumflex = 667;
+    t.aacute = 500;
+    t.Ucircumflex = 722;
+    t.yacute = 444;
+    t.scommaaccent = 389;
+    t.ecircumflex = 444;
+    t.Uring = 722;
+    t.Udieresis = 722;
+    t.aogonek = 500;
+    t.Uacute = 722;
+    t.uogonek = 556;
+    t.Edieresis = 667;
+    t.Dcroat = 722;
+    t.commaaccent = 250;
+    t.copyright = 747;
+    t.Emacron = 667;
+    t.ccaron = 444;
+    t.aring = 500;
+    t.Ncommaaccent = 722;
+    t.lacute = 278;
+    t.agrave = 500;
+    t.Tcommaaccent = 611;
+    t.Cacute = 667;
+    t.atilde = 500;
+    t.Edotaccent = 667;
+    t.scaron = 389;
+    t.scedilla = 389;
+    t.iacute = 278;
+    t.lozenge = 494;
+    t.Rcaron = 667;
+    t.Gcommaaccent = 722;
+    t.ucircumflex = 556;
+    t.acircumflex = 500;
+    t.Amacron = 667;
+    t.rcaron = 389;
+    t.ccedilla = 444;
+    t.Zdotaccent = 611;
+    t.Thorn = 611;
+    t.Omacron = 722;
+    t.Racute = 667;
+    t.Sacute = 556;
+    t.dcaron = 608;
+    t.Umacron = 722;
+    t.uring = 556;
+    t.threesuperior = 300;
+    t.Ograve = 722;
+    t.Agrave = 667;
+    t.Abreve = 667;
+    t.multiply = 570;
+    t.uacute = 556;
+    t.Tcaron = 611;
+    t.partialdiff = 494;
+    t.ydieresis = 444;
+    t.Nacute = 722;
+    t.icircumflex = 278;
+    t.Ecircumflex = 667;
+    t.adieresis = 500;
+    t.edieresis = 444;
+    t.cacute = 444;
+    t.nacute = 556;
+    t.umacron = 556;
+    t.Ncaron = 722;
+    t.Iacute = 389;
+    t.plusminus = 570;
+    t.brokenbar = 220;
+    t.registered = 747;
+    t.Gbreve = 722;
+    t.Idotaccent = 389;
+    t.summation = 600;
+    t.Egrave = 667;
+    t.racute = 389;
+    t.omacron = 500;
+    t.Zacute = 611;
+    t.Zcaron = 611;
+    t.greaterequal = 549;
+    t.Eth = 722;
+    t.Ccedilla = 667;
+    t.lcommaaccent = 278;
+    t.tcaron = 366;
+    t.eogonek = 444;
+    t.Uogonek = 722;
+    t.Aacute = 667;
+    t.Adieresis = 667;
+    t.egrave = 444;
+    t.zacute = 389;
+    t.iogonek = 278;
+    t.Oacute = 722;
+    t.oacute = 500;
+    t.amacron = 500;
+    t.sacute = 389;
+    t.idieresis = 278;
+    t.Ocircumflex = 722;
+    t.Ugrave = 722;
+    t.Delta = 612;
+    t.thorn = 500;
+    t.twosuperior = 300;
+    t.Odieresis = 722;
+    t.mu = 576;
+    t.igrave = 278;
+    t.ohungarumlaut = 500;
+    t.Eogonek = 667;
+    t.dcroat = 500;
+    t.threequarters = 750;
+    t.Scedilla = 556;
+    t.lcaron = 382;
+    t.Kcommaaccent = 667;
+    t.Lacute = 611;
+    t.trademark = 1000;
+    t.edotaccent = 444;
+    t.Igrave = 389;
+    t.Imacron = 389;
+    t.Lcaron = 611;
+    t.onehalf = 750;
+    t.lessequal = 549;
+    t.ocircumflex = 500;
+    t.ntilde = 556;
+    t.Uhungarumlaut = 722;
+    t.Eacute = 667;
+    t.emacron = 444;
+    t.gbreve = 500;
+    t.onequarter = 750;
+    t.Scaron = 556;
+    t.Scommaaccent = 556;
+    t.Ohungarumlaut = 722;
+    t.degree = 400;
+    t.ograve = 500;
+    t.Ccaron = 667;
+    t.ugrave = 556;
+    t.radical = 549;
+    t.Dcaron = 722;
+    t.rcommaaccent = 389;
+    t.Ntilde = 722;
+    t.otilde = 500;
+    t.Rcommaaccent = 667;
+    t.Lcommaaccent = 611;
+    t.Atilde = 667;
+    t.Aogonek = 667;
+    t.Aring = 667;
+    t.Otilde = 722;
+    t.zdotaccent = 389;
+    t.Ecaron = 667;
+    t.Iogonek = 389;
+    t.kcommaaccent = 500;
+    t.minus = 606;
+    t.Icircumflex = 389;
+    t.ncaron = 556;
+    t.tcommaaccent = 278;
+    t.logicalnot = 606;
+    t.odieresis = 500;
+    t.udieresis = 556;
+    t.notequal = 549;
+    t.gcommaaccent = 500;
+    t.eth = 500;
+    t.zcaron = 389;
+    t.ncommaaccent = 556;
+    t.onesuperior = 300;
+    t.imacron = 278;
+    t.Euro = 500;
   });
   t["Times-Italic"] = (0, _core_utils.getLookupTableFactory)(function (t) {
-    t["space"] = 250;
-    t["exclam"] = 333;
-    t["quotedbl"] = 420;
-    t["numbersign"] = 500;
-    t["dollar"] = 500;
-    t["percent"] = 833;
-    t["ampersand"] = 778;
-    t["quoteright"] = 333;
-    t["parenleft"] = 333;
-    t["parenright"] = 333;
-    t["asterisk"] = 500;
-    t["plus"] = 675;
-    t["comma"] = 250;
-    t["hyphen"] = 333;
-    t["period"] = 250;
-    t["slash"] = 278;
-    t["zero"] = 500;
-    t["one"] = 500;
-    t["two"] = 500;
-    t["three"] = 500;
-    t["four"] = 500;
-    t["five"] = 500;
-    t["six"] = 500;
-    t["seven"] = 500;
-    t["eight"] = 500;
-    t["nine"] = 500;
-    t["colon"] = 333;
-    t["semicolon"] = 333;
-    t["less"] = 675;
-    t["equal"] = 675;
-    t["greater"] = 675;
-    t["question"] = 500;
-    t["at"] = 920;
-    t["A"] = 611;
-    t["B"] = 611;
-    t["C"] = 667;
-    t["D"] = 722;
-    t["E"] = 611;
-    t["F"] = 611;
-    t["G"] = 722;
-    t["H"] = 722;
-    t["I"] = 333;
-    t["J"] = 444;
-    t["K"] = 667;
-    t["L"] = 556;
-    t["M"] = 833;
-    t["N"] = 667;
-    t["O"] = 722;
-    t["P"] = 611;
-    t["Q"] = 722;
-    t["R"] = 611;
-    t["S"] = 500;
-    t["T"] = 556;
-    t["U"] = 722;
-    t["V"] = 611;
-    t["W"] = 833;
-    t["X"] = 611;
-    t["Y"] = 556;
-    t["Z"] = 556;
-    t["bracketleft"] = 389;
-    t["backslash"] = 278;
-    t["bracketright"] = 389;
-    t["asciicircum"] = 422;
-    t["underscore"] = 500;
-    t["quoteleft"] = 333;
-    t["a"] = 500;
-    t["b"] = 500;
-    t["c"] = 444;
-    t["d"] = 500;
-    t["e"] = 444;
-    t["f"] = 278;
-    t["g"] = 500;
-    t["h"] = 500;
-    t["i"] = 278;
-    t["j"] = 278;
-    t["k"] = 444;
-    t["l"] = 278;
-    t["m"] = 722;
-    t["n"] = 500;
-    t["o"] = 500;
-    t["p"] = 500;
-    t["q"] = 500;
-    t["r"] = 389;
-    t["s"] = 389;
-    t["t"] = 278;
-    t["u"] = 500;
-    t["v"] = 444;
-    t["w"] = 667;
-    t["x"] = 444;
-    t["y"] = 444;
-    t["z"] = 389;
-    t["braceleft"] = 400;
-    t["bar"] = 275;
-    t["braceright"] = 400;
-    t["asciitilde"] = 541;
-    t["exclamdown"] = 389;
-    t["cent"] = 500;
-    t["sterling"] = 500;
-    t["fraction"] = 167;
-    t["yen"] = 500;
-    t["florin"] = 500;
-    t["section"] = 500;
-    t["currency"] = 500;
-    t["quotesingle"] = 214;
-    t["quotedblleft"] = 556;
-    t["guillemotleft"] = 500;
-    t["guilsinglleft"] = 333;
-    t["guilsinglright"] = 333;
-    t["fi"] = 500;
-    t["fl"] = 500;
-    t["endash"] = 500;
-    t["dagger"] = 500;
-    t["daggerdbl"] = 500;
-    t["periodcentered"] = 250;
-    t["paragraph"] = 523;
-    t["bullet"] = 350;
-    t["quotesinglbase"] = 333;
-    t["quotedblbase"] = 556;
-    t["quotedblright"] = 556;
-    t["guillemotright"] = 500;
-    t["ellipsis"] = 889;
-    t["perthousand"] = 1000;
-    t["questiondown"] = 500;
-    t["grave"] = 333;
-    t["acute"] = 333;
-    t["circumflex"] = 333;
-    t["tilde"] = 333;
-    t["macron"] = 333;
-    t["breve"] = 333;
-    t["dotaccent"] = 333;
-    t["dieresis"] = 333;
-    t["ring"] = 333;
-    t["cedilla"] = 333;
-    t["hungarumlaut"] = 333;
-    t["ogonek"] = 333;
-    t["caron"] = 333;
-    t["emdash"] = 889;
-    t["AE"] = 889;
-    t["ordfeminine"] = 276;
-    t["Lslash"] = 556;
-    t["Oslash"] = 722;
-    t["OE"] = 944;
-    t["ordmasculine"] = 310;
-    t["ae"] = 667;
-    t["dotlessi"] = 278;
-    t["lslash"] = 278;
-    t["oslash"] = 500;
-    t["oe"] = 667;
-    t["germandbls"] = 500;
-    t["Idieresis"] = 333;
-    t["eacute"] = 444;
-    t["abreve"] = 500;
-    t["uhungarumlaut"] = 500;
-    t["ecaron"] = 444;
-    t["Ydieresis"] = 556;
-    t["divide"] = 675;
-    t["Yacute"] = 556;
-    t["Acircumflex"] = 611;
-    t["aacute"] = 500;
-    t["Ucircumflex"] = 722;
-    t["yacute"] = 444;
-    t["scommaaccent"] = 389;
-    t["ecircumflex"] = 444;
-    t["Uring"] = 722;
-    t["Udieresis"] = 722;
-    t["aogonek"] = 500;
-    t["Uacute"] = 722;
-    t["uogonek"] = 500;
-    t["Edieresis"] = 611;
-    t["Dcroat"] = 722;
-    t["commaaccent"] = 250;
-    t["copyright"] = 760;
-    t["Emacron"] = 611;
-    t["ccaron"] = 444;
-    t["aring"] = 500;
-    t["Ncommaaccent"] = 667;
-    t["lacute"] = 278;
-    t["agrave"] = 500;
-    t["Tcommaaccent"] = 556;
-    t["Cacute"] = 667;
-    t["atilde"] = 500;
-    t["Edotaccent"] = 611;
-    t["scaron"] = 389;
-    t["scedilla"] = 389;
-    t["iacute"] = 278;
-    t["lozenge"] = 471;
-    t["Rcaron"] = 611;
-    t["Gcommaaccent"] = 722;
-    t["ucircumflex"] = 500;
-    t["acircumflex"] = 500;
-    t["Amacron"] = 611;
-    t["rcaron"] = 389;
-    t["ccedilla"] = 444;
-    t["Zdotaccent"] = 556;
-    t["Thorn"] = 611;
-    t["Omacron"] = 722;
-    t["Racute"] = 611;
-    t["Sacute"] = 500;
-    t["dcaron"] = 544;
-    t["Umacron"] = 722;
-    t["uring"] = 500;
-    t["threesuperior"] = 300;
-    t["Ograve"] = 722;
-    t["Agrave"] = 611;
-    t["Abreve"] = 611;
-    t["multiply"] = 675;
-    t["uacute"] = 500;
-    t["Tcaron"] = 556;
-    t["partialdiff"] = 476;
-    t["ydieresis"] = 444;
-    t["Nacute"] = 667;
-    t["icircumflex"] = 278;
-    t["Ecircumflex"] = 611;
-    t["adieresis"] = 500;
-    t["edieresis"] = 444;
-    t["cacute"] = 444;
-    t["nacute"] = 500;
-    t["umacron"] = 500;
-    t["Ncaron"] = 667;
-    t["Iacute"] = 333;
-    t["plusminus"] = 675;
-    t["brokenbar"] = 275;
-    t["registered"] = 760;
-    t["Gbreve"] = 722;
-    t["Idotaccent"] = 333;
-    t["summation"] = 600;
-    t["Egrave"] = 611;
-    t["racute"] = 389;
-    t["omacron"] = 500;
-    t["Zacute"] = 556;
-    t["Zcaron"] = 556;
-    t["greaterequal"] = 549;
-    t["Eth"] = 722;
-    t["Ccedilla"] = 667;
-    t["lcommaaccent"] = 278;
-    t["tcaron"] = 300;
-    t["eogonek"] = 444;
-    t["Uogonek"] = 722;
-    t["Aacute"] = 611;
-    t["Adieresis"] = 611;
-    t["egrave"] = 444;
-    t["zacute"] = 389;
-    t["iogonek"] = 278;
-    t["Oacute"] = 722;
-    t["oacute"] = 500;
-    t["amacron"] = 500;
-    t["sacute"] = 389;
-    t["idieresis"] = 278;
-    t["Ocircumflex"] = 722;
-    t["Ugrave"] = 722;
-    t["Delta"] = 612;
-    t["thorn"] = 500;
-    t["twosuperior"] = 300;
-    t["Odieresis"] = 722;
-    t["mu"] = 500;
-    t["igrave"] = 278;
-    t["ohungarumlaut"] = 500;
-    t["Eogonek"] = 611;
-    t["dcroat"] = 500;
-    t["threequarters"] = 750;
-    t["Scedilla"] = 500;
-    t["lcaron"] = 300;
-    t["Kcommaaccent"] = 667;
-    t["Lacute"] = 556;
-    t["trademark"] = 980;
-    t["edotaccent"] = 444;
-    t["Igrave"] = 333;
-    t["Imacron"] = 333;
-    t["Lcaron"] = 611;
-    t["onehalf"] = 750;
-    t["lessequal"] = 549;
-    t["ocircumflex"] = 500;
-    t["ntilde"] = 500;
-    t["Uhungarumlaut"] = 722;
-    t["Eacute"] = 611;
-    t["emacron"] = 444;
-    t["gbreve"] = 500;
-    t["onequarter"] = 750;
-    t["Scaron"] = 500;
-    t["Scommaaccent"] = 500;
-    t["Ohungarumlaut"] = 722;
-    t["degree"] = 400;
-    t["ograve"] = 500;
-    t["Ccaron"] = 667;
-    t["ugrave"] = 500;
-    t["radical"] = 453;
-    t["Dcaron"] = 722;
-    t["rcommaaccent"] = 389;
-    t["Ntilde"] = 667;
-    t["otilde"] = 500;
-    t["Rcommaaccent"] = 611;
-    t["Lcommaaccent"] = 556;
-    t["Atilde"] = 611;
-    t["Aogonek"] = 611;
-    t["Aring"] = 611;
-    t["Otilde"] = 722;
-    t["zdotaccent"] = 389;
-    t["Ecaron"] = 611;
-    t["Iogonek"] = 333;
-    t["kcommaaccent"] = 444;
-    t["minus"] = 675;
-    t["Icircumflex"] = 333;
-    t["ncaron"] = 500;
-    t["tcommaaccent"] = 278;
-    t["logicalnot"] = 675;
-    t["odieresis"] = 500;
-    t["udieresis"] = 500;
-    t["notequal"] = 549;
-    t["gcommaaccent"] = 500;
-    t["eth"] = 500;
-    t["zcaron"] = 389;
-    t["ncommaaccent"] = 500;
-    t["onesuperior"] = 300;
-    t["imacron"] = 278;
-    t["Euro"] = 500;
+    t.space = 250;
+    t.exclam = 333;
+    t.quotedbl = 420;
+    t.numbersign = 500;
+    t.dollar = 500;
+    t.percent = 833;
+    t.ampersand = 778;
+    t.quoteright = 333;
+    t.parenleft = 333;
+    t.parenright = 333;
+    t.asterisk = 500;
+    t.plus = 675;
+    t.comma = 250;
+    t.hyphen = 333;
+    t.period = 250;
+    t.slash = 278;
+    t.zero = 500;
+    t.one = 500;
+    t.two = 500;
+    t.three = 500;
+    t.four = 500;
+    t.five = 500;
+    t.six = 500;
+    t.seven = 500;
+    t.eight = 500;
+    t.nine = 500;
+    t.colon = 333;
+    t.semicolon = 333;
+    t.less = 675;
+    t.equal = 675;
+    t.greater = 675;
+    t.question = 500;
+    t.at = 920;
+    t.A = 611;
+    t.B = 611;
+    t.C = 667;
+    t.D = 722;
+    t.E = 611;
+    t.F = 611;
+    t.G = 722;
+    t.H = 722;
+    t.I = 333;
+    t.J = 444;
+    t.K = 667;
+    t.L = 556;
+    t.M = 833;
+    t.N = 667;
+    t.O = 722;
+    t.P = 611;
+    t.Q = 722;
+    t.R = 611;
+    t.S = 500;
+    t.T = 556;
+    t.U = 722;
+    t.V = 611;
+    t.W = 833;
+    t.X = 611;
+    t.Y = 556;
+    t.Z = 556;
+    t.bracketleft = 389;
+    t.backslash = 278;
+    t.bracketright = 389;
+    t.asciicircum = 422;
+    t.underscore = 500;
+    t.quoteleft = 333;
+    t.a = 500;
+    t.b = 500;
+    t.c = 444;
+    t.d = 500;
+    t.e = 444;
+    t.f = 278;
+    t.g = 500;
+    t.h = 500;
+    t.i = 278;
+    t.j = 278;
+    t.k = 444;
+    t.l = 278;
+    t.m = 722;
+    t.n = 500;
+    t.o = 500;
+    t.p = 500;
+    t.q = 500;
+    t.r = 389;
+    t.s = 389;
+    t.t = 278;
+    t.u = 500;
+    t.v = 444;
+    t.w = 667;
+    t.x = 444;
+    t.y = 444;
+    t.z = 389;
+    t.braceleft = 400;
+    t.bar = 275;
+    t.braceright = 400;
+    t.asciitilde = 541;
+    t.exclamdown = 389;
+    t.cent = 500;
+    t.sterling = 500;
+    t.fraction = 167;
+    t.yen = 500;
+    t.florin = 500;
+    t.section = 500;
+    t.currency = 500;
+    t.quotesingle = 214;
+    t.quotedblleft = 556;
+    t.guillemotleft = 500;
+    t.guilsinglleft = 333;
+    t.guilsinglright = 333;
+    t.fi = 500;
+    t.fl = 500;
+    t.endash = 500;
+    t.dagger = 500;
+    t.daggerdbl = 500;
+    t.periodcentered = 250;
+    t.paragraph = 523;
+    t.bullet = 350;
+    t.quotesinglbase = 333;
+    t.quotedblbase = 556;
+    t.quotedblright = 556;
+    t.guillemotright = 500;
+    t.ellipsis = 889;
+    t.perthousand = 1000;
+    t.questiondown = 500;
+    t.grave = 333;
+    t.acute = 333;
+    t.circumflex = 333;
+    t.tilde = 333;
+    t.macron = 333;
+    t.breve = 333;
+    t.dotaccent = 333;
+    t.dieresis = 333;
+    t.ring = 333;
+    t.cedilla = 333;
+    t.hungarumlaut = 333;
+    t.ogonek = 333;
+    t.caron = 333;
+    t.emdash = 889;
+    t.AE = 889;
+    t.ordfeminine = 276;
+    t.Lslash = 556;
+    t.Oslash = 722;
+    t.OE = 944;
+    t.ordmasculine = 310;
+    t.ae = 667;
+    t.dotlessi = 278;
+    t.lslash = 278;
+    t.oslash = 500;
+    t.oe = 667;
+    t.germandbls = 500;
+    t.Idieresis = 333;
+    t.eacute = 444;
+    t.abreve = 500;
+    t.uhungarumlaut = 500;
+    t.ecaron = 444;
+    t.Ydieresis = 556;
+    t.divide = 675;
+    t.Yacute = 556;
+    t.Acircumflex = 611;
+    t.aacute = 500;
+    t.Ucircumflex = 722;
+    t.yacute = 444;
+    t.scommaaccent = 389;
+    t.ecircumflex = 444;
+    t.Uring = 722;
+    t.Udieresis = 722;
+    t.aogonek = 500;
+    t.Uacute = 722;
+    t.uogonek = 500;
+    t.Edieresis = 611;
+    t.Dcroat = 722;
+    t.commaaccent = 250;
+    t.copyright = 760;
+    t.Emacron = 611;
+    t.ccaron = 444;
+    t.aring = 500;
+    t.Ncommaaccent = 667;
+    t.lacute = 278;
+    t.agrave = 500;
+    t.Tcommaaccent = 556;
+    t.Cacute = 667;
+    t.atilde = 500;
+    t.Edotaccent = 611;
+    t.scaron = 389;
+    t.scedilla = 389;
+    t.iacute = 278;
+    t.lozenge = 471;
+    t.Rcaron = 611;
+    t.Gcommaaccent = 722;
+    t.ucircumflex = 500;
+    t.acircumflex = 500;
+    t.Amacron = 611;
+    t.rcaron = 389;
+    t.ccedilla = 444;
+    t.Zdotaccent = 556;
+    t.Thorn = 611;
+    t.Omacron = 722;
+    t.Racute = 611;
+    t.Sacute = 500;
+    t.dcaron = 544;
+    t.Umacron = 722;
+    t.uring = 500;
+    t.threesuperior = 300;
+    t.Ograve = 722;
+    t.Agrave = 611;
+    t.Abreve = 611;
+    t.multiply = 675;
+    t.uacute = 500;
+    t.Tcaron = 556;
+    t.partialdiff = 476;
+    t.ydieresis = 444;
+    t.Nacute = 667;
+    t.icircumflex = 278;
+    t.Ecircumflex = 611;
+    t.adieresis = 500;
+    t.edieresis = 444;
+    t.cacute = 444;
+    t.nacute = 500;
+    t.umacron = 500;
+    t.Ncaron = 667;
+    t.Iacute = 333;
+    t.plusminus = 675;
+    t.brokenbar = 275;
+    t.registered = 760;
+    t.Gbreve = 722;
+    t.Idotaccent = 333;
+    t.summation = 600;
+    t.Egrave = 611;
+    t.racute = 389;
+    t.omacron = 500;
+    t.Zacute = 556;
+    t.Zcaron = 556;
+    t.greaterequal = 549;
+    t.Eth = 722;
+    t.Ccedilla = 667;
+    t.lcommaaccent = 278;
+    t.tcaron = 300;
+    t.eogonek = 444;
+    t.Uogonek = 722;
+    t.Aacute = 611;
+    t.Adieresis = 611;
+    t.egrave = 444;
+    t.zacute = 389;
+    t.iogonek = 278;
+    t.Oacute = 722;
+    t.oacute = 500;
+    t.amacron = 500;
+    t.sacute = 389;
+    t.idieresis = 278;
+    t.Ocircumflex = 722;
+    t.Ugrave = 722;
+    t.Delta = 612;
+    t.thorn = 500;
+    t.twosuperior = 300;
+    t.Odieresis = 722;
+    t.mu = 500;
+    t.igrave = 278;
+    t.ohungarumlaut = 500;
+    t.Eogonek = 611;
+    t.dcroat = 500;
+    t.threequarters = 750;
+    t.Scedilla = 500;
+    t.lcaron = 300;
+    t.Kcommaaccent = 667;
+    t.Lacute = 556;
+    t.trademark = 980;
+    t.edotaccent = 444;
+    t.Igrave = 333;
+    t.Imacron = 333;
+    t.Lcaron = 611;
+    t.onehalf = 750;
+    t.lessequal = 549;
+    t.ocircumflex = 500;
+    t.ntilde = 500;
+    t.Uhungarumlaut = 722;
+    t.Eacute = 611;
+    t.emacron = 444;
+    t.gbreve = 500;
+    t.onequarter = 750;
+    t.Scaron = 500;
+    t.Scommaaccent = 500;
+    t.Ohungarumlaut = 722;
+    t.degree = 400;
+    t.ograve = 500;
+    t.Ccaron = 667;
+    t.ugrave = 500;
+    t.radical = 453;
+    t.Dcaron = 722;
+    t.rcommaaccent = 389;
+    t.Ntilde = 667;
+    t.otilde = 500;
+    t.Rcommaaccent = 611;
+    t.Lcommaaccent = 556;
+    t.Atilde = 611;
+    t.Aogonek = 611;
+    t.Aring = 611;
+    t.Otilde = 722;
+    t.zdotaccent = 389;
+    t.Ecaron = 611;
+    t.Iogonek = 333;
+    t.kcommaaccent = 444;
+    t.minus = 675;
+    t.Icircumflex = 333;
+    t.ncaron = 500;
+    t.tcommaaccent = 278;
+    t.logicalnot = 675;
+    t.odieresis = 500;
+    t.udieresis = 500;
+    t.notequal = 549;
+    t.gcommaaccent = 500;
+    t.eth = 500;
+    t.zcaron = 389;
+    t.ncommaaccent = 500;
+    t.onesuperior = 300;
+    t.imacron = 278;
+    t.Euro = 500;
   });
-  t["ZapfDingbats"] = (0, _core_utils.getLookupTableFactory)(function (t) {
-    t["space"] = 278;
-    t["a1"] = 974;
-    t["a2"] = 961;
-    t["a202"] = 974;
-    t["a3"] = 980;
-    t["a4"] = 719;
-    t["a5"] = 789;
-    t["a119"] = 790;
-    t["a118"] = 791;
-    t["a117"] = 690;
-    t["a11"] = 960;
-    t["a12"] = 939;
-    t["a13"] = 549;
-    t["a14"] = 855;
-    t["a15"] = 911;
-    t["a16"] = 933;
-    t["a105"] = 911;
-    t["a17"] = 945;
-    t["a18"] = 974;
-    t["a19"] = 755;
-    t["a20"] = 846;
-    t["a21"] = 762;
-    t["a22"] = 761;
-    t["a23"] = 571;
-    t["a24"] = 677;
-    t["a25"] = 763;
-    t["a26"] = 760;
-    t["a27"] = 759;
-    t["a28"] = 754;
-    t["a6"] = 494;
-    t["a7"] = 552;
-    t["a8"] = 537;
-    t["a9"] = 577;
-    t["a10"] = 692;
-    t["a29"] = 786;
-    t["a30"] = 788;
-    t["a31"] = 788;
-    t["a32"] = 790;
-    t["a33"] = 793;
-    t["a34"] = 794;
-    t["a35"] = 816;
-    t["a36"] = 823;
-    t["a37"] = 789;
-    t["a38"] = 841;
-    t["a39"] = 823;
-    t["a40"] = 833;
-    t["a41"] = 816;
-    t["a42"] = 831;
-    t["a43"] = 923;
-    t["a44"] = 744;
-    t["a45"] = 723;
-    t["a46"] = 749;
-    t["a47"] = 790;
-    t["a48"] = 792;
-    t["a49"] = 695;
-    t["a50"] = 776;
-    t["a51"] = 768;
-    t["a52"] = 792;
-    t["a53"] = 759;
-    t["a54"] = 707;
-    t["a55"] = 708;
-    t["a56"] = 682;
-    t["a57"] = 701;
-    t["a58"] = 826;
-    t["a59"] = 815;
-    t["a60"] = 789;
-    t["a61"] = 789;
-    t["a62"] = 707;
-    t["a63"] = 687;
-    t["a64"] = 696;
-    t["a65"] = 689;
-    t["a66"] = 786;
-    t["a67"] = 787;
-    t["a68"] = 713;
-    t["a69"] = 791;
-    t["a70"] = 785;
-    t["a71"] = 791;
-    t["a72"] = 873;
-    t["a73"] = 761;
-    t["a74"] = 762;
-    t["a203"] = 762;
-    t["a75"] = 759;
-    t["a204"] = 759;
-    t["a76"] = 892;
-    t["a77"] = 892;
-    t["a78"] = 788;
-    t["a79"] = 784;
-    t["a81"] = 438;
-    t["a82"] = 138;
-    t["a83"] = 277;
-    t["a84"] = 415;
-    t["a97"] = 392;
-    t["a98"] = 392;
-    t["a99"] = 668;
-    t["a100"] = 668;
-    t["a89"] = 390;
-    t["a90"] = 390;
-    t["a93"] = 317;
-    t["a94"] = 317;
-    t["a91"] = 276;
-    t["a92"] = 276;
-    t["a205"] = 509;
-    t["a85"] = 509;
-    t["a206"] = 410;
-    t["a86"] = 410;
-    t["a87"] = 234;
-    t["a88"] = 234;
-    t["a95"] = 334;
-    t["a96"] = 334;
-    t["a101"] = 732;
-    t["a102"] = 544;
-    t["a103"] = 544;
-    t["a104"] = 910;
-    t["a106"] = 667;
-    t["a107"] = 760;
-    t["a108"] = 760;
-    t["a112"] = 776;
-    t["a111"] = 595;
-    t["a110"] = 694;
-    t["a109"] = 626;
-    t["a120"] = 788;
-    t["a121"] = 788;
-    t["a122"] = 788;
-    t["a123"] = 788;
-    t["a124"] = 788;
-    t["a125"] = 788;
-    t["a126"] = 788;
-    t["a127"] = 788;
-    t["a128"] = 788;
-    t["a129"] = 788;
-    t["a130"] = 788;
-    t["a131"] = 788;
-    t["a132"] = 788;
-    t["a133"] = 788;
-    t["a134"] = 788;
-    t["a135"] = 788;
-    t["a136"] = 788;
-    t["a137"] = 788;
-    t["a138"] = 788;
-    t["a139"] = 788;
-    t["a140"] = 788;
-    t["a141"] = 788;
-    t["a142"] = 788;
-    t["a143"] = 788;
-    t["a144"] = 788;
-    t["a145"] = 788;
-    t["a146"] = 788;
-    t["a147"] = 788;
-    t["a148"] = 788;
-    t["a149"] = 788;
-    t["a150"] = 788;
-    t["a151"] = 788;
-    t["a152"] = 788;
-    t["a153"] = 788;
-    t["a154"] = 788;
-    t["a155"] = 788;
-    t["a156"] = 788;
-    t["a157"] = 788;
-    t["a158"] = 788;
-    t["a159"] = 788;
-    t["a160"] = 894;
-    t["a161"] = 838;
-    t["a163"] = 1016;
-    t["a164"] = 458;
-    t["a196"] = 748;
-    t["a165"] = 924;
-    t["a192"] = 748;
-    t["a166"] = 918;
-    t["a167"] = 927;
-    t["a168"] = 928;
-    t["a169"] = 928;
-    t["a170"] = 834;
-    t["a171"] = 873;
-    t["a172"] = 828;
-    t["a173"] = 924;
-    t["a162"] = 924;
-    t["a174"] = 917;
-    t["a175"] = 930;
-    t["a176"] = 931;
-    t["a177"] = 463;
-    t["a178"] = 883;
-    t["a179"] = 836;
-    t["a193"] = 836;
-    t["a180"] = 867;
-    t["a199"] = 867;
-    t["a181"] = 696;
-    t["a200"] = 696;
-    t["a182"] = 874;
-    t["a201"] = 874;
-    t["a183"] = 760;
-    t["a184"] = 946;
-    t["a197"] = 771;
-    t["a185"] = 865;
-    t["a194"] = 771;
-    t["a198"] = 888;
-    t["a186"] = 967;
-    t["a195"] = 888;
-    t["a187"] = 831;
-    t["a188"] = 873;
-    t["a189"] = 927;
-    t["a190"] = 970;
-    t["a191"] = 918;
+  t.ZapfDingbats = (0, _core_utils.getLookupTableFactory)(function (t) {
+    t.space = 278;
+    t.a1 = 974;
+    t.a2 = 961;
+    t.a202 = 974;
+    t.a3 = 980;
+    t.a4 = 719;
+    t.a5 = 789;
+    t.a119 = 790;
+    t.a118 = 791;
+    t.a117 = 690;
+    t.a11 = 960;
+    t.a12 = 939;
+    t.a13 = 549;
+    t.a14 = 855;
+    t.a15 = 911;
+    t.a16 = 933;
+    t.a105 = 911;
+    t.a17 = 945;
+    t.a18 = 974;
+    t.a19 = 755;
+    t.a20 = 846;
+    t.a21 = 762;
+    t.a22 = 761;
+    t.a23 = 571;
+    t.a24 = 677;
+    t.a25 = 763;
+    t.a26 = 760;
+    t.a27 = 759;
+    t.a28 = 754;
+    t.a6 = 494;
+    t.a7 = 552;
+    t.a8 = 537;
+    t.a9 = 577;
+    t.a10 = 692;
+    t.a29 = 786;
+    t.a30 = 788;
+    t.a31 = 788;
+    t.a32 = 790;
+    t.a33 = 793;
+    t.a34 = 794;
+    t.a35 = 816;
+    t.a36 = 823;
+    t.a37 = 789;
+    t.a38 = 841;
+    t.a39 = 823;
+    t.a40 = 833;
+    t.a41 = 816;
+    t.a42 = 831;
+    t.a43 = 923;
+    t.a44 = 744;
+    t.a45 = 723;
+    t.a46 = 749;
+    t.a47 = 790;
+    t.a48 = 792;
+    t.a49 = 695;
+    t.a50 = 776;
+    t.a51 = 768;
+    t.a52 = 792;
+    t.a53 = 759;
+    t.a54 = 707;
+    t.a55 = 708;
+    t.a56 = 682;
+    t.a57 = 701;
+    t.a58 = 826;
+    t.a59 = 815;
+    t.a60 = 789;
+    t.a61 = 789;
+    t.a62 = 707;
+    t.a63 = 687;
+    t.a64 = 696;
+    t.a65 = 689;
+    t.a66 = 786;
+    t.a67 = 787;
+    t.a68 = 713;
+    t.a69 = 791;
+    t.a70 = 785;
+    t.a71 = 791;
+    t.a72 = 873;
+    t.a73 = 761;
+    t.a74 = 762;
+    t.a203 = 762;
+    t.a75 = 759;
+    t.a204 = 759;
+    t.a76 = 892;
+    t.a77 = 892;
+    t.a78 = 788;
+    t.a79 = 784;
+    t.a81 = 438;
+    t.a82 = 138;
+    t.a83 = 277;
+    t.a84 = 415;
+    t.a97 = 392;
+    t.a98 = 392;
+    t.a99 = 668;
+    t.a100 = 668;
+    t.a89 = 390;
+    t.a90 = 390;
+    t.a93 = 317;
+    t.a94 = 317;
+    t.a91 = 276;
+    t.a92 = 276;
+    t.a205 = 509;
+    t.a85 = 509;
+    t.a206 = 410;
+    t.a86 = 410;
+    t.a87 = 234;
+    t.a88 = 234;
+    t.a95 = 334;
+    t.a96 = 334;
+    t.a101 = 732;
+    t.a102 = 544;
+    t.a103 = 544;
+    t.a104 = 910;
+    t.a106 = 667;
+    t.a107 = 760;
+    t.a108 = 760;
+    t.a112 = 776;
+    t.a111 = 595;
+    t.a110 = 694;
+    t.a109 = 626;
+    t.a120 = 788;
+    t.a121 = 788;
+    t.a122 = 788;
+    t.a123 = 788;
+    t.a124 = 788;
+    t.a125 = 788;
+    t.a126 = 788;
+    t.a127 = 788;
+    t.a128 = 788;
+    t.a129 = 788;
+    t.a130 = 788;
+    t.a131 = 788;
+    t.a132 = 788;
+    t.a133 = 788;
+    t.a134 = 788;
+    t.a135 = 788;
+    t.a136 = 788;
+    t.a137 = 788;
+    t.a138 = 788;
+    t.a139 = 788;
+    t.a140 = 788;
+    t.a141 = 788;
+    t.a142 = 788;
+    t.a143 = 788;
+    t.a144 = 788;
+    t.a145 = 788;
+    t.a146 = 788;
+    t.a147 = 788;
+    t.a148 = 788;
+    t.a149 = 788;
+    t.a150 = 788;
+    t.a151 = 788;
+    t.a152 = 788;
+    t.a153 = 788;
+    t.a154 = 788;
+    t.a155 = 788;
+    t.a156 = 788;
+    t.a157 = 788;
+    t.a158 = 788;
+    t.a159 = 788;
+    t.a160 = 894;
+    t.a161 = 838;
+    t.a163 = 1016;
+    t.a164 = 458;
+    t.a196 = 748;
+    t.a165 = 924;
+    t.a192 = 748;
+    t.a166 = 918;
+    t.a167 = 927;
+    t.a168 = 928;
+    t.a169 = 928;
+    t.a170 = 834;
+    t.a171 = 873;
+    t.a172 = 828;
+    t.a173 = 924;
+    t.a162 = 924;
+    t.a174 = 917;
+    t.a175 = 930;
+    t.a176 = 931;
+    t.a177 = 463;
+    t.a178 = 883;
+    t.a179 = 836;
+    t.a193 = 836;
+    t.a180 = 867;
+    t.a199 = 867;
+    t.a181 = 696;
+    t.a200 = 696;
+    t.a182 = 874;
+    t.a201 = 874;
+    t.a183 = 760;
+    t.a184 = 946;
+    t.a197 = 771;
+    t.a185 = 865;
+    t.a194 = 771;
+    t.a198 = 888;
+    t.a186 = 967;
+    t.a195 = 888;
+    t.a187 = 831;
+    t.a188 = 873;
+    t.a189 = 927;
+    t.a190 = 970;
+    t.a191 = 918;
   });
 });
 exports.getMetrics = getMetrics;

+ 18 - 7
lib/core/obj.js

@@ -38,6 +38,8 @@ var _crypto = require("./crypto.js");
 
 var _colorspace = require("./colorspace.js");
 
+var _image_utils = require("./image_utils.js");
+
 function fetchDestination(dest) {
   return (0, _primitives.isDict)(dest) ? dest.get("D") : dest;
 }
@@ -54,6 +56,7 @@ class Catalog {
 
     this.fontCache = new _primitives.RefSetCache();
     this.builtInCMapCache = new Map();
+    this.globalImageCache = new _image_utils.GlobalImageCache();
     this.pageKidsCountCache = new _primitives.RefSetCache();
   }
 
@@ -484,7 +487,7 @@ class Catalog {
       NumCopies: Number.isInteger
     };
     const obj = this.catDict.get("ViewerPreferences");
-    const prefs = Object.create(null);
+    let prefs = null;
 
     if ((0, _primitives.isDict)(obj)) {
       for (const key in ViewerPreferencesValidators) {
@@ -601,11 +604,18 @@ class Catalog {
             break;
 
           default:
-            (0, _util.assert)(typeof value === "boolean");
+            if (typeof value !== "boolean") {
+              throw new _util.FormatError(`viewerPreferences - expected a boolean value for: ${key}`);
+            }
+
             prefValue = value;
         }
 
         if (prefValue !== undefined) {
+          if (!prefs) {
+            prefs = Object.create(null);
+          }
+
           prefs[key] = prefValue;
         } else {
           (0, _util.info)(`Bad value in ViewerPreferences for "${key}".`);
@@ -742,8 +752,9 @@ class Catalog {
     });
   }
 
-  cleanup() {
+  cleanup(manuallyTriggered = false) {
     (0, _primitives.clearPrimitiveCaches)();
+    this.globalImageCache.clear(manuallyTriggered);
     this.pageKidsCountCache.clear();
     const promises = [];
     this.fontCache.forEach(function (promise) {
@@ -910,13 +921,13 @@ class Catalog {
             break;
           }
 
-          kidPromises.push(xref.fetchAsync(kid).then(function (kid) {
-            if (!(0, _primitives.isDict)(kid)) {
+          kidPromises.push(xref.fetchAsync(kid).then(function (obj) {
+            if (!(0, _primitives.isDict)(obj)) {
               throw new _util.FormatError("Kid node must be a dictionary.");
             }
 
-            if (kid.has("Count")) {
-              total += kid.get("Count");
+            if (obj.has("Count")) {
+              total += obj.get("Count");
             } else {
               total++;
             }

+ 5 - 0
lib/core/operator_list.js

@@ -604,6 +604,11 @@ var OperatorList = function OperatorListClosure() {
     },
 
     addOpList(opList) {
+      if (!(opList instanceof OperatorList)) {
+        (0, _util.warn)('addOpList - ignoring invalid "opList" parameter.');
+        return;
+      }
+
       Object.assign(this.dependencies, opList.dependencies);
 
       for (var i = 0, ii = opList.length; i < ii; i++) {

+ 1 - 1
lib/core/parser.js

@@ -210,7 +210,7 @@ class Parser {
       } else if (state === 1) {
         state = ch === I ? 2 : 0;
       } else {
-        (0, _util.assert)(state === 2);
+        (0, _util.assert)(state === 2, "findDefaultInlineStreamEnd - invalid state.");
 
         if (ch === SPACE || ch === LF || ch === CR) {
           maybeEIPos = stream.pos;

+ 2 - 2
lib/core/pdf_manager.js

@@ -91,8 +91,8 @@ class BasePdfManager {
     return this.pdfDocument.fontFallback(id, handler);
   }
 
-  cleanup() {
-    return this.pdfDocument.cleanup();
+  cleanup(manuallyTriggered = false) {
+    return this.pdfDocument.cleanup(manuallyTriggered);
   }
 
   async ensure(obj, prop, args) {

+ 4 - 0
lib/core/primitives.js

@@ -266,6 +266,10 @@ var RefSetCache = function RefSetCacheClosure() {
   }
 
   RefSetCache.prototype = {
+    get size() {
+      return Object.keys(this.dict).length;
+    },
+
     get: function RefSetCache_get(ref) {
       return this.dict[ref.toString()];
     },

+ 103 - 103
lib/core/standard_fonts.js

@@ -29,11 +29,11 @@ exports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForAr
 var _core_utils = require("./core_utils.js");
 
 const getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
-  t["ArialNarrow"] = "Helvetica";
+  t.ArialNarrow = "Helvetica";
   t["ArialNarrow-Bold"] = "Helvetica-Bold";
   t["ArialNarrow-BoldItalic"] = "Helvetica-BoldOblique";
   t["ArialNarrow-Italic"] = "Helvetica-Oblique";
-  t["ArialBlack"] = "Helvetica";
+  t.ArialBlack = "Helvetica";
   t["ArialBlack-Bold"] = "Helvetica-Bold";
   t["ArialBlack-BoldItalic"] = "Helvetica-BoldOblique";
   t["ArialBlack-Italic"] = "Helvetica-Oblique";
@@ -41,26 +41,26 @@ const getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
   t["Arial-Black-Bold"] = "Helvetica-Bold";
   t["Arial-Black-BoldItalic"] = "Helvetica-BoldOblique";
   t["Arial-Black-Italic"] = "Helvetica-Oblique";
-  t["Arial"] = "Helvetica";
+  t.Arial = "Helvetica";
   t["Arial-Bold"] = "Helvetica-Bold";
   t["Arial-BoldItalic"] = "Helvetica-BoldOblique";
   t["Arial-Italic"] = "Helvetica-Oblique";
   t["Arial-BoldItalicMT"] = "Helvetica-BoldOblique";
   t["Arial-BoldMT"] = "Helvetica-Bold";
   t["Arial-ItalicMT"] = "Helvetica-Oblique";
-  t["ArialMT"] = "Helvetica";
+  t.ArialMT = "Helvetica";
   t["Courier-Bold"] = "Courier-Bold";
   t["Courier-BoldItalic"] = "Courier-BoldOblique";
   t["Courier-Italic"] = "Courier-Oblique";
-  t["CourierNew"] = "Courier";
+  t.CourierNew = "Courier";
   t["CourierNew-Bold"] = "Courier-Bold";
   t["CourierNew-BoldItalic"] = "Courier-BoldOblique";
   t["CourierNew-Italic"] = "Courier-Oblique";
   t["CourierNewPS-BoldItalicMT"] = "Courier-BoldOblique";
   t["CourierNewPS-BoldMT"] = "Courier-Bold";
   t["CourierNewPS-ItalicMT"] = "Courier-Oblique";
-  t["CourierNewPSMT"] = "Courier";
-  t["Helvetica"] = "Helvetica";
+  t.CourierNewPSMT = "Courier";
+  t.Helvetica = "Helvetica";
   t["Helvetica-Bold"] = "Helvetica-Bold";
   t["Helvetica-BoldItalic"] = "Helvetica-BoldOblique";
   t["Helvetica-BoldOblique"] = "Helvetica-BoldOblique";
@@ -69,37 +69,37 @@ const getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
   t["Symbol-Bold"] = "Symbol";
   t["Symbol-BoldItalic"] = "Symbol";
   t["Symbol-Italic"] = "Symbol";
-  t["TimesNewRoman"] = "Times-Roman";
+  t.TimesNewRoman = "Times-Roman";
   t["TimesNewRoman-Bold"] = "Times-Bold";
   t["TimesNewRoman-BoldItalic"] = "Times-BoldItalic";
   t["TimesNewRoman-Italic"] = "Times-Italic";
-  t["TimesNewRomanPS"] = "Times-Roman";
+  t.TimesNewRomanPS = "Times-Roman";
   t["TimesNewRomanPS-Bold"] = "Times-Bold";
   t["TimesNewRomanPS-BoldItalic"] = "Times-BoldItalic";
   t["TimesNewRomanPS-BoldItalicMT"] = "Times-BoldItalic";
   t["TimesNewRomanPS-BoldMT"] = "Times-Bold";
   t["TimesNewRomanPS-Italic"] = "Times-Italic";
   t["TimesNewRomanPS-ItalicMT"] = "Times-Italic";
-  t["TimesNewRomanPSMT"] = "Times-Roman";
+  t.TimesNewRomanPSMT = "Times-Roman";
   t["TimesNewRomanPSMT-Bold"] = "Times-Bold";
   t["TimesNewRomanPSMT-BoldItalic"] = "Times-BoldItalic";
   t["TimesNewRomanPSMT-Italic"] = "Times-Italic";
 });
 exports.getStdFontMap = getStdFontMap;
 const getNonStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
-  t["Calibri"] = "Helvetica";
+  t.Calibri = "Helvetica";
   t["Calibri-Bold"] = "Helvetica-Bold";
   t["Calibri-BoldItalic"] = "Helvetica-BoldOblique";
   t["Calibri-Italic"] = "Helvetica-Oblique";
-  t["CenturyGothic"] = "Helvetica";
+  t.CenturyGothic = "Helvetica";
   t["CenturyGothic-Bold"] = "Helvetica-Bold";
   t["CenturyGothic-BoldItalic"] = "Helvetica-BoldOblique";
   t["CenturyGothic-Italic"] = "Helvetica-Oblique";
-  t["ComicSansMS"] = "Comic Sans MS";
+  t.ComicSansMS = "Comic Sans MS";
   t["ComicSansMS-Bold"] = "Comic Sans MS-Bold";
   t["ComicSansMS-BoldItalic"] = "Comic Sans MS-BoldItalic";
   t["ComicSansMS-Italic"] = "Comic Sans MS-Italic";
-  t["LucidaConsole"] = "Courier";
+  t.LucidaConsole = "Courier";
   t["LucidaConsole-Bold"] = "Courier-Bold";
   t["LucidaConsole-BoldItalic"] = "Courier-BoldOblique";
   t["LucidaConsole-Italic"] = "Courier-Oblique";
@@ -120,103 +120,103 @@ const getNonStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
   t["MS-PMincho-Bold"] = "MS PMincho-Bold";
   t["MS-PMincho-BoldItalic"] = "MS PMincho-BoldItalic";
   t["MS-PMincho-Italic"] = "MS PMincho-Italic";
-  t["NuptialScript"] = "Times-Italic";
-  t["SegoeUISymbol"] = "Helvetica";
-  t["Wingdings"] = "ZapfDingbats";
+  t.NuptialScript = "Times-Italic";
+  t.SegoeUISymbol = "Helvetica";
+  t.Wingdings = "ZapfDingbats";
   t["Wingdings-Regular"] = "ZapfDingbats";
 });
 exports.getNonStdFontMap = getNonStdFontMap;
 const getSerifFonts = (0, _core_utils.getLookupTableFactory)(function (t) {
   t["Adobe Jenson"] = true;
   t["Adobe Text"] = true;
-  t["Albertus"] = true;
-  t["Aldus"] = true;
-  t["Alexandria"] = true;
-  t["Algerian"] = true;
+  t.Albertus = true;
+  t.Aldus = true;
+  t.Alexandria = true;
+  t.Algerian = true;
   t["American Typewriter"] = true;
-  t["Antiqua"] = true;
-  t["Apex"] = true;
-  t["Arno"] = true;
-  t["Aster"] = true;
-  t["Aurora"] = true;
-  t["Baskerville"] = true;
-  t["Bell"] = true;
-  t["Bembo"] = true;
+  t.Antiqua = true;
+  t.Apex = true;
+  t.Arno = true;
+  t.Aster = true;
+  t.Aurora = true;
+  t.Baskerville = true;
+  t.Bell = true;
+  t.Bembo = true;
   t["Bembo Schoolbook"] = true;
-  t["Benguiat"] = true;
+  t.Benguiat = true;
   t["Berkeley Old Style"] = true;
   t["Bernhard Modern"] = true;
   t["Berthold City"] = true;
-  t["Bodoni"] = true;
+  t.Bodoni = true;
   t["Bauer Bodoni"] = true;
   t["Book Antiqua"] = true;
-  t["Bookman"] = true;
+  t.Bookman = true;
   t["Bordeaux Roman"] = true;
   t["Californian FB"] = true;
-  t["Calisto"] = true;
-  t["Calvert"] = true;
-  t["Capitals"] = true;
-  t["Cambria"] = true;
-  t["Cartier"] = true;
-  t["Caslon"] = true;
-  t["Catull"] = true;
-  t["Centaur"] = true;
+  t.Calisto = true;
+  t.Calvert = true;
+  t.Capitals = true;
+  t.Cambria = true;
+  t.Cartier = true;
+  t.Caslon = true;
+  t.Catull = true;
+  t.Centaur = true;
   t["Century Old Style"] = true;
   t["Century Schoolbook"] = true;
-  t["Chaparral"] = true;
+  t.Chaparral = true;
   t["Charis SIL"] = true;
-  t["Cheltenham"] = true;
+  t.Cheltenham = true;
   t["Cholla Slab"] = true;
-  t["Clarendon"] = true;
-  t["Clearface"] = true;
-  t["Cochin"] = true;
-  t["Colonna"] = true;
+  t.Clarendon = true;
+  t.Clearface = true;
+  t.Cochin = true;
+  t.Colonna = true;
   t["Computer Modern"] = true;
   t["Concrete Roman"] = true;
-  t["Constantia"] = true;
+  t.Constantia = true;
   t["Cooper Black"] = true;
-  t["Corona"] = true;
-  t["Ecotype"] = true;
-  t["Egyptienne"] = true;
-  t["Elephant"] = true;
-  t["Excelsior"] = true;
-  t["Fairfield"] = true;
+  t.Corona = true;
+  t.Ecotype = true;
+  t.Egyptienne = true;
+  t.Elephant = true;
+  t.Excelsior = true;
+  t.Fairfield = true;
   t["FF Scala"] = true;
-  t["Folkard"] = true;
-  t["Footlight"] = true;
-  t["FreeSerif"] = true;
+  t.Folkard = true;
+  t.Footlight = true;
+  t.FreeSerif = true;
   t["Friz Quadrata"] = true;
-  t["Garamond"] = true;
-  t["Gentium"] = true;
-  t["Georgia"] = true;
-  t["Gloucester"] = true;
+  t.Garamond = true;
+  t.Gentium = true;
+  t.Georgia = true;
+  t.Gloucester = true;
   t["Goudy Old Style"] = true;
   t["Goudy Schoolbook"] = true;
   t["Goudy Pro Font"] = true;
-  t["Granjon"] = true;
+  t.Granjon = true;
   t["Guardian Egyptian"] = true;
-  t["Heather"] = true;
-  t["Hercules"] = true;
+  t.Heather = true;
+  t.Hercules = true;
   t["High Tower Text"] = true;
-  t["Hiroshige"] = true;
+  t.Hiroshige = true;
   t["Hoefler Text"] = true;
   t["Humana Serif"] = true;
-  t["Imprint"] = true;
+  t.Imprint = true;
   t["Ionic No. 5"] = true;
-  t["Janson"] = true;
-  t["Joanna"] = true;
-  t["Korinna"] = true;
-  t["Lexicon"] = true;
+  t.Janson = true;
+  t.Joanna = true;
+  t.Korinna = true;
+  t.Lexicon = true;
   t["Liberation Serif"] = true;
   t["Linux Libertine"] = true;
-  t["Literaturnaya"] = true;
-  t["Lucida"] = true;
+  t.Literaturnaya = true;
+  t.Lucida = true;
   t["Lucida Bright"] = true;
-  t["Melior"] = true;
-  t["Memphis"] = true;
-  t["Miller"] = true;
-  t["Minion"] = true;
-  t["Modern"] = true;
+  t.Melior = true;
+  t.Memphis = true;
+  t.Miller = true;
+  t.Minion = true;
+  t.Modern = true;
   t["Mona Lisa"] = true;
   t["Mrs Eaves"] = true;
   t["MS Serif"] = true;
@@ -224,48 +224,48 @@ const getSerifFonts = (0, _core_utils.getLookupTableFactory)(function (t) {
   t["New York"] = true;
   t["Nimbus Roman"] = true;
   t["NPS Rawlinson Roadway"] = true;
-  t["NuptialScript"] = true;
-  t["Palatino"] = true;
-  t["Perpetua"] = true;
-  t["Plantin"] = true;
+  t.NuptialScript = true;
+  t.Palatino = true;
+  t.Perpetua = true;
+  t.Plantin = true;
   t["Plantin Schoolbook"] = true;
-  t["Playbill"] = true;
+  t.Playbill = true;
   t["Poor Richard"] = true;
   t["Rawlinson Roadway"] = true;
-  t["Renault"] = true;
-  t["Requiem"] = true;
-  t["Rockwell"] = true;
-  t["Roman"] = true;
+  t.Renault = true;
+  t.Requiem = true;
+  t.Rockwell = true;
+  t.Roman = true;
   t["Rotis Serif"] = true;
-  t["Sabon"] = true;
-  t["Scala"] = true;
-  t["Seagull"] = true;
-  t["Sistina"] = true;
-  t["Souvenir"] = true;
-  t["STIX"] = true;
+  t.Sabon = true;
+  t.Scala = true;
+  t.Seagull = true;
+  t.Sistina = true;
+  t.Souvenir = true;
+  t.STIX = true;
   t["Stone Informal"] = true;
   t["Stone Serif"] = true;
-  t["Sylfaen"] = true;
-  t["Times"] = true;
-  t["Trajan"] = true;
+  t.Sylfaen = true;
+  t.Times = true;
+  t.Trajan = true;
   t["Trinité"] = true;
   t["Trump Mediaeval"] = true;
-  t["Utopia"] = true;
+  t.Utopia = true;
   t["Vale Type"] = true;
   t["Bitstream Vera"] = true;
   t["Vera Serif"] = true;
-  t["Versailles"] = true;
-  t["Wanted"] = true;
-  t["Weiss"] = true;
+  t.Versailles = true;
+  t.Wanted = true;
+  t.Weiss = true;
   t["Wide Latin"] = true;
-  t["Windsor"] = true;
-  t["XITS"] = true;
+  t.Windsor = true;
+  t.XITS = true;
 });
 exports.getSerifFonts = getSerifFonts;
 const getSymbolsFonts = (0, _core_utils.getLookupTableFactory)(function (t) {
-  t["Dingbats"] = true;
-  t["Symbol"] = true;
-  t["ZapfDingbats"] = true;
+  t.Dingbats = true;
+  t.Symbol = true;
+  t.ZapfDingbats = true;
 });
 exports.getSymbolsFonts = getSymbolsFonts;
 const getGlyphMapForStandardFonts = (0, _core_utils.getLookupTableFactory)(function (t) {

+ 6 - 6
lib/core/type1_parser.js

@@ -406,7 +406,7 @@ var Type1Parser = function Type1ParserClosure() {
       }
     }
 
-    return Array.prototype.slice.call(decrypted, discardNumber, j);
+    return decrypted.slice(discardNumber, j);
   }
 
   function isSpecial(c) {
@@ -416,7 +416,7 @@ var Type1Parser = function Type1ParserClosure() {
   function Type1Parser(stream, encrypted, seacAnalysisEnabled) {
     if (encrypted) {
       var data = stream.getBytes();
-      var isBinary = !(isHexDigit(data[0]) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]));
+      var isBinary = !((isHexDigit(data[0]) || (0, _core_utils.isWhiteSpace)(data[0])) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]) && isHexDigit(data[4]) && isHexDigit(data[5]) && isHexDigit(data[6]) && isHexDigit(data[7]));
       stream = new _stream.Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4));
     }
 
@@ -505,7 +505,7 @@ var Type1Parser = function Type1ParserClosure() {
       var subrs = [],
           charstrings = [];
       var privateData = Object.create(null);
-      privateData["lenIV"] = 4;
+      privateData.lenIV = 4;
       var program = {
         subrs: [],
         charstrings: [],
@@ -544,7 +544,7 @@ var Type1Parser = function Type1ParserClosure() {
               length = this.readInt();
               this.getToken();
               data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);
-              lenIV = program.properties.privateData["lenIV"];
+              lenIV = program.properties.privateData.lenIV;
               encoded = this.readCharStrings(data, lenIV);
               this.nextChar();
               token = this.getToken();
@@ -566,11 +566,11 @@ var Type1Parser = function Type1ParserClosure() {
             this.getToken();
 
             while (this.getToken() === "dup") {
-              var index = this.readInt();
+              const index = this.readInt();
               length = this.readInt();
               this.getToken();
               data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);
-              lenIV = program.properties.privateData["lenIV"];
+              lenIV = program.properties.privateData.lenIV;
               encoded = this.readCharStrings(data, lenIV);
               this.nextChar();
               token = this.getToken();

+ 31 - 24
lib/core/worker.js

@@ -107,7 +107,7 @@ var WorkerMessageHandler = {
     var WorkerTasks = [];
     const verbosity = (0, _util.getVerbosityLevel)();
     const apiVersion = docParams.apiVersion;
-    const workerVersion = '2.4.456';
+    const workerVersion = '2.5.207';
 
     if (apiVersion !== workerVersion) {
       throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`);
@@ -123,6 +123,10 @@ var WorkerMessageHandler = {
       throw new Error("The `Array.prototype` contains unexpected enumerable properties: " + enumerableProperties.join(", ") + "; thus breaking e.g. `for...in` iteration of `Array`s.");
     }
 
+    if (typeof ReadableStream === "undefined" || typeof Promise.allSettled === "undefined") {
+      throw new Error("The browser/environment lacks native support for critical " + "functionality used by the PDF.js library (e.g. " + "`ReadableStream` and/or `Promise.allSettled`); " + "please use an ES5-compatible build instead.");
+    }
+
     var docId = docParams.docId;
     var docBaseUrl = docParams.docBaseUrl;
     var workerHandlerName = docParams.docId + "_worker";
@@ -163,13 +167,13 @@ var WorkerMessageHandler = {
 
     function getPdfManager(data, evaluatorOptions) {
       var pdfManagerCapability = (0, _util.createPromiseCapability)();
-      var pdfManager;
+      let newPdfManager;
       var source = data.source;
 
       if (source.data) {
         try {
-          pdfManager = new _pdf_manager.LocalPdfManager(docId, source.data, source.password, evaluatorOptions, docBaseUrl);
-          pdfManagerCapability.resolve(pdfManager);
+          newPdfManager = new _pdf_manager.LocalPdfManager(docId, source.data, source.password, evaluatorOptions, docBaseUrl);
+          pdfManagerCapability.resolve(newPdfManager);
         } catch (ex) {
           pdfManagerCapability.reject(ex);
         }
@@ -194,7 +198,7 @@ var WorkerMessageHandler = {
         }
 
         var disableAutoFetch = source.disableAutoFetch || fullRequest.isStreamingSupported;
-        pdfManager = new _pdf_manager.NetworkPdfManager(docId, pdfStream, {
+        newPdfManager = new _pdf_manager.NetworkPdfManager(docId, pdfStream, {
           msgHandler: handler,
           password: source.password,
           length: fullRequest.contentLength,
@@ -203,11 +207,11 @@ var WorkerMessageHandler = {
         }, evaluatorOptions, docBaseUrl);
 
         for (let i = 0; i < cachedChunks.length; i++) {
-          pdfManager.sendProgressiveData(cachedChunks[i]);
+          newPdfManager.sendProgressiveData(cachedChunks[i]);
         }
 
         cachedChunks = [];
-        pdfManagerCapability.resolve(pdfManager);
+        pdfManagerCapability.resolve(newPdfManager);
         cancelXHRs = null;
       }).catch(function (reason) {
         pdfManagerCapability.reject(reason);
@@ -223,8 +227,8 @@ var WorkerMessageHandler = {
         }
 
         try {
-          pdfManager = new _pdf_manager.LocalPdfManager(docId, pdfFile, source.password, evaluatorOptions, docBaseUrl);
-          pdfManagerCapability.resolve(pdfManager);
+          newPdfManager = new _pdf_manager.LocalPdfManager(docId, pdfFile, source.password, evaluatorOptions, docBaseUrl);
+          pdfManagerCapability.resolve(newPdfManager);
         } catch (ex) {
           pdfManagerCapability.reject(ex);
         }
@@ -233,12 +237,15 @@ var WorkerMessageHandler = {
       };
 
       var readPromise = new Promise(function (resolve, reject) {
-        var readChunk = function (chunk) {
+        var readChunk = function ({
+          value,
+          done
+        }) {
           try {
             ensureNotTerminated();
 
-            if (chunk.done) {
-              if (!pdfManager) {
+            if (done) {
+              if (!newPdfManager) {
                 flushChunks();
               }
 
@@ -246,8 +253,7 @@ var WorkerMessageHandler = {
               return;
             }
 
-            var data = chunk.value;
-            loaded += (0, _util.arrayByteLength)(data);
+            loaded += (0, _util.arrayByteLength)(value);
 
             if (!fullRequest.isStreamingSupported) {
               handler.send("DocProgress", {
@@ -256,10 +262,10 @@ var WorkerMessageHandler = {
               });
             }
 
-            if (pdfManager) {
-              pdfManager.sendProgressiveData(data);
+            if (newPdfManager) {
+              newPdfManager.sendProgressiveData(value);
             } else {
-              cachedChunks.push(data);
+              cachedChunks.push(value);
             }
 
             fullRequest.read().then(readChunk, reject);
@@ -296,9 +302,11 @@ var WorkerMessageHandler = {
         if (ex instanceof _util.PasswordException) {
           var task = new WorkerTask(`PasswordException: response ${ex.code}`);
           startWorkerTask(task);
-          handler.sendWithPromise("PasswordRequest", ex).then(function (data) {
+          handler.sendWithPromise("PasswordRequest", ex).then(function ({
+            password
+          }) {
             finishWorkerTask(task);
-            pdfManager.updatePassword(data.password);
+            pdfManager.updatePassword(password);
             pdfManagerReady();
           }).catch(function () {
             finishWorkerTask(task);
@@ -331,12 +339,11 @@ var WorkerMessageHandler = {
 
       ensureNotTerminated();
       var evaluatorOptions = {
-        forceDataSchema: data.disableCreateObjectURL,
         maxImageSize: data.maxImageSize,
         disableFontFace: data.disableFontFace,
-        nativeImageDecoderSupport: data.nativeImageDecoderSupport,
         ignoreErrors: data.ignoreErrors,
-        isEvalSupported: data.isEvalSupported
+        isEvalSupported: data.isEvalSupported,
+        fontExtraProperties: data.fontExtraProperties
       };
       getPdfManager(data, evaluatorOptions).then(function (newPdfManager) {
         if (terminated) {
@@ -452,7 +459,7 @@ var WorkerMessageHandler = {
           }
 
           handler.send("UnsupportedFeature", {
-            featureId: _util.UNSUPPORTED_FEATURES.unknown
+            featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList
           });
           sink.error(reason);
         });
@@ -498,7 +505,7 @@ var WorkerMessageHandler = {
       return pdfManager.fontFallback(data.id, handler);
     });
     handler.on("Cleanup", function wphCleanup(data) {
-      return pdfManager.cleanup();
+      return pdfManager.cleanup(true);
     });
     handler.on("Terminate", function wphTerminate(data) {
       terminated = true;

+ 1 - 1
lib/core/worker_stream.js

@@ -37,7 +37,7 @@ class PDFWorkerStream {
   }
 
   getFullReader() {
-    (0, _util.assert)(!this._fullRequestReader);
+    (0, _util.assert)(!this._fullRequestReader, "PDFWorkerStream.getFullReader can only be called once.");
     this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler);
     return this._fullRequestReader;
   }

+ 3 - 0
lib/display/annotation_layer.js

@@ -347,6 +347,7 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement {
       }
 
       element.disabled = this.data.readOnly;
+      element.name = this.data.fieldName;
 
       if (this.data.maxLen !== null) {
         element.maxLength = this.data.maxLen;
@@ -416,6 +417,7 @@ class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {
     const element = document.createElement("input");
     element.disabled = this.data.readOnly;
     element.type = "checkbox";
+    element.name = this.data.fieldName;
 
     if (this.data.fieldValue && this.data.fieldValue !== "Off") {
       element.setAttribute("checked", true);
@@ -467,6 +469,7 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
     this.container.className = "choiceWidgetAnnotation";
     const selectElement = document.createElement("select");
     selectElement.disabled = this.data.readOnly;
+    selectElement.name = this.data.fieldName;
 
     if (!this.data.combo) {
       selectElement.size = this.data.options.length;

+ 29 - 137
lib/display/api.js

@@ -122,12 +122,8 @@ function getDocument(src) {
   params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;
   params.CMapReaderFactory = params.CMapReaderFactory || _display_utils.DOMCMapReaderFactory;
   params.ignoreErrors = params.stopAtErrors !== true;
+  params.fontExtraProperties = params.fontExtraProperties === true;
   params.pdfBug = params.pdfBug === true;
-  const NativeImageDecoderValues = Object.values(_util.NativeImageDecoding);
-
-  if (params.nativeImageDecoderSupport === undefined || !NativeImageDecoderValues.includes(params.nativeImageDecoderSupport)) {
-    params.nativeImageDecoderSupport = _api_compatibility.apiCompatibilityParams.nativeImageDecoderSupport || _util.NativeImageDecoding.DECODE;
-  }
 
   if (!Number.isInteger(params.maxImageSize)) {
     params.maxImageSize = -1;
@@ -153,10 +149,6 @@ function getDocument(src) {
     params.disableAutoFetch = false;
   }
 
-  if (typeof params.disableCreateObjectURL !== "boolean") {
-    params.disableCreateObjectURL = _api_compatibility.apiCompatibilityParams.disableCreateObjectURL || false;
-  }
-
   (0, _util.setVerbosityLevel)(params.verbosity);
 
   if (!worker) {
@@ -174,11 +166,9 @@ function getDocument(src) {
       throw new Error("Loading aborted");
     }
 
-    return _fetchDocument(worker, params, rangeTransport, docId).then(function (workerId) {
-      if (task.destroyed) {
-        throw new Error("Loading aborted");
-      }
+    const workerIdPromise = _fetchDocument(worker, params, rangeTransport, docId);
 
+    const networkStreamPromise = new Promise(function (resolve) {
       let networkStream;
 
       if (rangeTransport) {
@@ -201,6 +191,13 @@ function getDocument(src) {
         });
       }
 
+      resolve(networkStream);
+    });
+    return Promise.all([workerIdPromise, networkStreamPromise]).then(function ([workerId, networkStream]) {
+      if (task.destroyed) {
+        throw new Error("Loading aborted");
+      }
+
       const messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port);
       messageHandler.postMessageTransfers = worker.postMessageTransfers;
       const transport = new WorkerTransport(messageHandler, task, networkStream, params);
@@ -224,7 +221,7 @@ function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
 
   return worker.messageHandler.sendWithPromise("GetDocRequest", {
     docId,
-    apiVersion: '2.4.456',
+    apiVersion: '2.5.207',
     source: {
       data: source.data,
       url: source.url,
@@ -235,12 +232,11 @@ function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
     },
     maxImageSize: source.maxImageSize,
     disableFontFace: source.disableFontFace,
-    disableCreateObjectURL: source.disableCreateObjectURL,
     postMessageTransfers: worker.postMessageTransfers,
     docBaseUrl: source.docBaseUrl,
-    nativeImageDecoderSupport: source.nativeImageDecoderSupport,
     ignoreErrors: source.ignoreErrors,
-    isEvalSupported: source.isEvalSupported
+    isEvalSupported: source.isEvalSupported,
+    fontExtraProperties: source.fontExtraProperties
   }).then(function (workerId) {
     if (worker.destroyed) {
       throw new Error("Worker was destroyed");
@@ -283,10 +279,6 @@ const PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() {
       });
     }
 
-    then(onFulfilled, onRejected) {
-      throw new Error("Removed API method: " + "PDFDocumentLoadingTask.then, use the `promise` getter instead.");
-    }
-
   }
 
   return PDFDocumentLoadingTask;
@@ -515,10 +507,6 @@ class PDFPageProxy {
     offsetY = 0,
     dontFlip = false
   } = {}) {
-    if (arguments.length > 1 || typeof arguments[0] === "number") {
-      throw new Error("PDFPageProxy.getViewport is called with obsolete arguments.");
-    }
-
     return new _display_utils.PageViewport({
       viewBox: this.view,
       scale,
@@ -1428,7 +1416,7 @@ class WorkerTransport {
       loadingTask
     } = this;
     messageHandler.on("GetReader", (data, sink) => {
-      (0, _util.assert)(this._networkStream);
+      (0, _util.assert)(this._networkStream, "GetReader - no `IPDFStream` instance available.");
       this._fullReader = this._networkStream.getFullReader();
 
       this._fullReader.onProgress = evt => {
@@ -1448,7 +1436,7 @@ class WorkerTransport {
             return;
           }
 
-          (0, _util.assert)((0, _util.isArrayBuffer)(value));
+          (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetReader - expected an ArrayBuffer.");
           sink.enqueue(new Uint8Array(value), 1, [value]);
         }).catch(reason => {
           sink.error(reason);
@@ -1487,7 +1475,7 @@ class WorkerTransport {
       return headersCapability.promise;
     });
     messageHandler.on("GetRangeReader", (data, sink) => {
-      (0, _util.assert)(this._networkStream);
+      (0, _util.assert)(this._networkStream, "GetRangeReader - no `IPDFStream` instance available.");
 
       const rangeReader = this._networkStream.getRangeReader(data.begin, data.end);
 
@@ -1506,7 +1494,7 @@ class WorkerTransport {
             return;
           }
 
-          (0, _util.assert)((0, _util.isArrayBuffer)(value));
+          (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetRangeReader - expected an ArrayBuffer.");
           sink.enqueue(new Uint8Array(value), 1, [value]);
         }).catch(reason => {
           sink.error(reason);
@@ -1631,19 +1619,22 @@ class WorkerTransport {
             onUnsupportedFeature: this._onUnsupportedFeature.bind(this),
             fontRegistry
           });
-          this.fontLoader.bind(font).then(() => {
-            this.commonObjs.resolve(id, font);
-          }, reason => {
-            messageHandler.sendWithPromise("FontFallback", {
+          this.fontLoader.bind(font).catch(reason => {
+            return messageHandler.sendWithPromise("FontFallback", {
               id
-            }).finally(() => {
-              this.commonObjs.resolve(id, font);
             });
+          }).finally(() => {
+            if (!params.fontExtraProperties && font.data) {
+              font.data = null;
+            }
+
+            this.commonObjs.resolve(id, font);
           });
           break;
 
         case "FontPath":
         case "FontType3Res":
+        case "Image":
           this.commonObjs.resolve(id, exportedData);
           break;
 
@@ -1664,24 +1655,6 @@ class WorkerTransport {
       }
 
       switch (type) {
-        case "JpegStream":
-          return new Promise((resolve, reject) => {
-            const img = new Image();
-
-            img.onload = function () {
-              resolve(img);
-            };
-
-            img.onerror = function () {
-              reject(new Error("Error during JPEG image loading"));
-              (0, _display_utils.releaseImageResources)(img);
-            };
-
-            img.src = imageData;
-          }).then(img => {
-            pageProxy.objs.resolve(id, img);
-          });
-
         case "Image":
           pageProxy.objs.resolve(id, imageData);
           const MAX_IMAGE_SIZE_TO_STORE = 8000000;
@@ -1711,71 +1684,6 @@ class WorkerTransport {
       }
     });
     messageHandler.on("UnsupportedFeature", this._onUnsupportedFeature.bind(this));
-    messageHandler.on("JpegDecode", data => {
-      if (this.destroyed) {
-        return Promise.reject(new Error("Worker was destroyed"));
-      }
-
-      if (typeof document === "undefined") {
-        return Promise.reject(new Error('"document" is not defined.'));
-      }
-
-      const [imageUrl, components] = data;
-
-      if (components !== 3 && components !== 1) {
-        return Promise.reject(new Error("Only 3 components or 1 component can be returned"));
-      }
-
-      return new Promise(function (resolve, reject) {
-        const img = new Image();
-
-        img.onload = function () {
-          const {
-            width,
-            height
-          } = img;
-          const size = width * height;
-          const rgbaLength = size * 4;
-          const buf = new Uint8ClampedArray(size * components);
-          let tmpCanvas = document.createElement("canvas");
-          tmpCanvas.width = width;
-          tmpCanvas.height = height;
-          let tmpCtx = tmpCanvas.getContext("2d");
-          tmpCtx.drawImage(img, 0, 0);
-          const data = tmpCtx.getImageData(0, 0, width, height).data;
-
-          if (components === 3) {
-            for (let i = 0, j = 0; i < rgbaLength; i += 4, j += 3) {
-              buf[j] = data[i];
-              buf[j + 1] = data[i + 1];
-              buf[j + 2] = data[i + 2];
-            }
-          } else if (components === 1) {
-            for (let i = 0, j = 0; i < rgbaLength; i += 4, j++) {
-              buf[j] = data[i];
-            }
-          }
-
-          resolve({
-            data: buf,
-            width,
-            height
-          });
-          (0, _display_utils.releaseImageResources)(img);
-          tmpCanvas.width = 0;
-          tmpCanvas.height = 0;
-          tmpCanvas = null;
-          tmpCtx = null;
-        };
-
-        img.onerror = function () {
-          reject(new Error("JpegDecode failed to load image"));
-          (0, _display_utils.releaseImageResources)(img);
-        };
-
-        img.src = imageUrl;
-      });
-    });
     messageHandler.on("FetchBuiltInCMap", (data, sink) => {
       if (this.destroyed) {
         sink.error(new Error("Worker was destroyed"));
@@ -1944,9 +1852,7 @@ class WorkerTransport {
     const params = this._params;
     return (0, _util.shadow)(this, "loadingParams", {
       disableAutoFetch: params.disableAutoFetch,
-      disableCreateObjectURL: params.disableCreateObjectURL,
-      disableFontFace: params.disableFontFace,
-      nativeImageDecoderSupport: params.nativeImageDecoderSupport
+      disableFontFace: params.disableFontFace
     });
   }
 
@@ -1999,16 +1905,6 @@ class PDFObjects {
   }
 
   clear() {
-    for (const objId in this._objs) {
-      const {
-        data
-      } = this._objs[objId];
-
-      if (typeof Image !== "undefined" && data instanceof Image) {
-        (0, _display_utils.releaseImageResources)(data);
-      }
-    }
-
     this._objs = Object.create(null);
   }
 
@@ -2028,10 +1924,6 @@ class RenderTask {
     this._internalRenderTask.cancel();
   }
 
-  then(onFulfilled, onRejected) {
-    throw new Error("Removed API method: " + "RenderTask.then, use the `promise` getter instead.");
-  }
-
 }
 
 const InternalRenderTask = function InternalRenderTaskClosure() {
@@ -2200,7 +2092,7 @@ const InternalRenderTask = function InternalRenderTaskClosure() {
   return InternalRenderTask;
 }();
 
-const version = '2.4.456';
+const version = '2.5.207';
 exports.version = version;
-const build = '228a591c';
+const build = '0974d605';
 exports.build = build;

+ 11 - 18
lib/display/api_compatibility.js

@@ -21,27 +21,20 @@
  */
 "use strict";
 
-const compatibilityParams = Object.create(null);
-{
-  const {
-    isNodeJS
-  } = require("../shared/is_node.js");
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.apiCompatibilityParams = void 0;
 
-  const userAgent = typeof navigator !== "undefined" && navigator.userAgent || "";
-  const isIE = /Trident/.test(userAgent);
-  const isIOSChrome = /CriOS/.test(userAgent);
+var _is_node = require("../shared/is_node.js");
 
-  (function checkOnBlobSupport() {
-    if (isIE || isIOSChrome) {
-      compatibilityParams.disableCreateObjectURL = true;
-    }
-  })();
-
-  (function checkFontFaceAndImage() {
-    if (isNodeJS) {
+const compatibilityParams = Object.create(null);
+{
+  (function checkFontFace() {
+    if (_is_node.isNodeJS) {
       compatibilityParams.disableFontFace = true;
-      compatibilityParams.nativeImageDecoderSupport = "none";
     }
   })();
 }
-exports.apiCompatibilityParams = Object.freeze(compatibilityParams);
+const apiCompatibilityParams = Object.freeze(compatibilityParams);
+exports.apiCompatibilityParams = apiCompatibilityParams;

+ 7 - 34
lib/display/canvas.js

@@ -330,12 +330,12 @@ function compileType3Glyph(imgData) {
     c.translate(0, -height);
     c.beginPath();
 
-    for (var i = 0, ii = outlines.length; i < ii; i++) {
-      var o = outlines[i];
+    for (let k = 0, kk = outlines.length; k < kk; k++) {
+      var o = outlines[k];
       c.moveTo(o[0], o[1]);
 
-      for (var j = 2, jj = o.length; j < jj; j += 2) {
-        c.lineTo(o[j], o[j + 1]);
+      for (let l = 2, ll = o.length; l < ll; l += 2) {
+        c.lineTo(o[l], o[l + 1]);
       }
     }
 
@@ -1287,7 +1287,7 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       var fontSize = current.fontSize / current.fontSizeScale;
       var fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
       var isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);
-      const patternFill = current.patternFill && font.data;
+      const patternFill = current.patternFill && !font.missingFile;
       var addToPath;
 
       if (font.disableFontFace || isAddToPathSet || patternFill) {
@@ -1795,33 +1795,6 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
     endAnnotation: function CanvasGraphics_endAnnotation() {
       this.restore();
     },
-    paintJpegXObject: function CanvasGraphics_paintJpegXObject(objId, w, h) {
-      const domImage = this.processingType3 ? this.commonObjs.get(objId) : this.objs.get(objId);
-
-      if (!domImage) {
-        (0, _util.warn)("Dependent image isn't ready yet");
-        return;
-      }
-
-      this.save();
-      var ctx = this.ctx;
-      ctx.scale(1 / w, -1 / h);
-      ctx.drawImage(domImage, 0, 0, domImage.width, domImage.height, 0, -h, w, h);
-
-      if (this.imageLayer) {
-        var currentTransform = ctx.mozCurrentTransformInverse;
-        var position = this.getCanvasPosition(0, 0);
-        this.imageLayer.appendImage({
-          objId,
-          left: position[0],
-          top: position[1],
-          width: w / currentTransform[0],
-          height: h / currentTransform[3]
-        });
-      }
-
-      this.restore();
-    },
     paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) {
       var ctx = this.ctx;
       var width = img.width,
@@ -1905,7 +1878,7 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       }
     },
     paintImageXObject: function CanvasGraphics_paintImageXObject(objId) {
-      const imgData = this.processingType3 ? this.commonObjs.get(objId) : this.objs.get(objId);
+      const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId);
 
       if (!imgData) {
         (0, _util.warn)("Dependent image isn't ready yet");
@@ -1915,7 +1888,7 @@ var CanvasGraphics = function CanvasGraphicsClosure() {
       this.paintInlineImageXObject(imgData);
     },
     paintImageXObjectRepeat: function CanvasGraphics_paintImageXObjectRepeat(objId, scaleX, scaleY, positions) {
-      const imgData = this.processingType3 ? this.commonObjs.get(objId) : this.objs.get(objId);
+      const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId);
 
       if (!imgData) {
         (0, _util.warn)("Dependent image isn't ready yet");

+ 4 - 4
lib/display/content_disposition.js

@@ -99,12 +99,12 @@ function getFilenameFromContentDispositionHeader(contentDisposition) {
     return value;
   }
 
-  function rfc2231getparam(contentDisposition) {
+  function rfc2231getparam(contentDispositionStr) {
     const matches = [];
     let match;
     const iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig");
 
-    while ((match = iter.exec(contentDisposition)) !== null) {
+    while ((match = iter.exec(contentDispositionStr)) !== null) {
       let [, n, quot, part] = match;
       n = parseInt(n, 10);
 
@@ -182,10 +182,10 @@ function getFilenameFromContentDispositionHeader(contentDisposition) {
       return value;
     }
 
-    return value.replace(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (_, charset, encoding, text) {
+    return value.replace(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) {
       if (encoding === "q" || encoding === "Q") {
         text = text.replace(/_/g, " ");
-        text = text.replace(/=([0-9a-fA-F]{2})/g, function (_, hex) {
+        text = text.replace(/=([0-9a-fA-F]{2})/g, function (match, hex) {
           return String.fromCharCode(parseInt(hex, 16));
         });
         return textdecode(charset, text);

+ 6 - 15
lib/display/display_utils.js

@@ -30,7 +30,6 @@ exports.isFetchSupported = isFetchSupported;
 exports.isValidFetchUrl = isValidFetchUrl;
 exports.loadScript = loadScript;
 exports.deprecated = deprecated;
-exports.releaseImageResources = releaseImageResources;
 exports.PDFDateString = exports.StatTimer = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.LinkTarget = exports.RenderingCancelledException = exports.PageViewport = void 0;
 
 var _util = require("../shared/util.js");
@@ -115,9 +114,9 @@ class DOMCMapReaderFactory {
         let cMapData;
 
         if (this.isCompressed) {
-          cMapData = new Uint8Array((await response.arrayBuffer()));
+          cMapData = new Uint8Array(await response.arrayBuffer());
         } else {
-          cMapData = (0, _util.stringToBytes)((await response.text()));
+          cMapData = (0, _util.stringToBytes)(await response.text());
         }
 
         return {
@@ -236,12 +235,15 @@ class PageViewport {
         rotateD = 0;
         break;
 
-      default:
+      case 0:
         rotateA = 1;
         rotateB = 0;
         rotateC = 0;
         rotateD = -1;
         break;
+
+      default:
+        throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.");
     }
 
     if (dontFlip) {
@@ -462,17 +464,6 @@ function deprecated(details) {
   console.log("Deprecated API usage: " + details);
 }
 
-function releaseImageResources(img) {
-  (0, _util.assert)(img instanceof Image, "Invalid `img` parameter.");
-  const url = img.src;
-
-  if (typeof url === "string" && url.startsWith("blob:") && URL.revokeObjectURL) {
-    URL.revokeObjectURL(url);
-  }
-
-  img.removeAttribute("src");
-}
-
 let pdfDateStringRegex;
 
 class PDFDateString {

+ 3 - 1
lib/display/fetch_stream.js

@@ -30,6 +30,8 @@ var _util = require("../shared/util.js");
 
 var _network_utils = require("./network_utils.js");
 
+;
+
 function createFetchOptions(headers, withCredentials, abortController) {
   return {
     method: "GET",
@@ -71,7 +73,7 @@ class PDFFetchStream {
   }
 
   getFullReader() {
-    (0, _util.assert)(!this._fullRequestReader);
+    (0, _util.assert)(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once.");
     this._fullRequestReader = new PDFFetchStreamReader(this);
     return this._fullRequestReader;
   }

+ 2 - 2
lib/display/font_loader.js

@@ -90,7 +90,7 @@ class BaseFontLoader {
           await nativeFontFace.loaded;
         } catch (ex) {
           this._onUnsupportedFeature({
-            featureId: _util.UNSUPPORTED_FEATURES.font
+            featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadNative
           });
 
           (0, _util.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);
@@ -357,7 +357,7 @@ class FontFaceObject {
 
       if (this._onUnsupportedFeature) {
         this._onUnsupportedFeature({
-          featureId: _util.UNSUPPORTED_FEATURES.font
+          featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath
         });
       }
 

+ 1 - 1
lib/display/network.js

@@ -247,7 +247,7 @@ class PDFNetworkStream {
   }
 
   getFullReader() {
-    (0, _util.assert)(!this._fullRequestReader);
+    (0, _util.assert)(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once.");
     this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source);
     return this._fullRequestReader;
   }

+ 10 - 8
lib/display/node_stream.js

@@ -30,6 +30,8 @@ var _util = require("../shared/util.js");
 
 var _network_utils = require("./network_utils.js");
 
+;
+
 const fs = require("fs");
 
 const http = require("http");
@@ -74,7 +76,7 @@ class PDFNodeStream {
   }
 
   getFullReader() {
-    (0, _util.assert)(!this._fullRequestReader);
+    (0, _util.assert)(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once.");
     this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this);
     return this._fullRequestReader;
   }
@@ -321,13 +323,13 @@ class BaseRangeReader {
 
 }
 
-function createRequestOptions(url, headers) {
+function createRequestOptions(parsedUrl, headers) {
   return {
-    protocol: url.protocol,
-    auth: url.auth,
-    host: url.hostname,
-    port: url.port,
-    path: url.path,
+    protocol: parsedUrl.protocol,
+    auth: parsedUrl.auth,
+    host: parsedUrl.hostname,
+    port: parsedUrl.port,
+    path: parsedUrl.path,
     method: "GET",
     headers
   };
@@ -403,7 +405,7 @@ class PDFNodeStreamRangeReader extends BaseRangeReader {
       this._httpHeaders[property] = value;
     }
 
-    this._httpHeaders["Range"] = `bytes=${start}-${end - 1}`;
+    this._httpHeaders.Range = `bytes=${start}-${end - 1}`;
 
     const handleResponse = response => {
       if (response.statusCode === 404) {

+ 1 - 1
lib/display/pattern_helper.js

@@ -187,7 +187,7 @@ var createMeshCanvas = function createMeshCanvasClosure() {
       var j = rowSize * y + x1_ * 4;
 
       for (var x = x1_; x <= x2_; x++) {
-        let k = (xa - x) / (xa - xb);
+        k = (xa - x) / (xa - xb);
 
         if (k < 0) {
           k = 0;

+ 61 - 31
lib/display/svg.js

@@ -366,7 +366,7 @@ exports.SVGGraphics = SVGGraphics;
   let maskCount = 0;
   let shadingCount = 0;
   exports.SVGGraphics = SVGGraphics = class SVGGraphics {
-    constructor(commonObjs, objs, forceDataSchema) {
+    constructor(commonObjs, objs, forceDataSchema = false) {
       this.svgFactory = new _display_utils.DOMSVGFactory();
       this.current = new SVGExtraState();
       this.transformMatrix = _util.IDENTITY_MATRIX;
@@ -614,10 +614,6 @@ exports.SVGGraphics = SVGGraphics;
             this.paintSolidColorImageMask();
             break;
 
-          case _util.OPS.paintJpegXObject:
-            this.paintJpegXObject(args[0], args[1], args[2]);
-            break;
-
           case _util.OPS.paintImageXObject:
             this.paintImageXObject(args[0]);
             break;
@@ -700,6 +696,7 @@ exports.SVGGraphics = SVGGraphics;
       current.x = current.lineX = 0;
       current.y = current.lineY = 0;
       current.xcoords = [];
+      current.ycoords = [];
       current.tspan = this.svgFactory.createElement("svg:tspan");
       current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
       current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
@@ -719,6 +716,7 @@ exports.SVGGraphics = SVGGraphics;
       current.txtElement = this.svgFactory.createElement("svg:text");
       current.txtgrp = this.svgFactory.createElement("svg:g");
       current.xcoords = [];
+      current.ycoords = [];
     }
 
     moveText(x, y) {
@@ -726,6 +724,7 @@ exports.SVGGraphics = SVGGraphics;
       current.x = current.lineX += x;
       current.y = current.lineY += y;
       current.xcoords = [];
+      current.ycoords = [];
       current.tspan = this.svgFactory.createElement("svg:tspan");
       current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
       current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
@@ -741,11 +740,14 @@ exports.SVGGraphics = SVGGraphics;
         return;
       }
 
+      const fontSizeScale = current.fontSizeScale;
       const charSpacing = current.charSpacing;
       const wordSpacing = current.wordSpacing;
       const fontDirection = current.fontDirection;
       const textHScale = current.textHScale * fontDirection;
       const vertical = font.vertical;
+      const spacingDir = vertical ? 1 : -1;
+      const defaultVMetrics = font.defaultVMetrics;
       const widthAdvanceScale = fontSize * current.fontMatrix[0];
       let x = 0;
 
@@ -754,33 +756,64 @@ exports.SVGGraphics = SVGGraphics;
           x += fontDirection * wordSpacing;
           continue;
         } else if ((0, _util.isNum)(glyph)) {
-          x += -glyph * fontSize * 0.001;
+          x += spacingDir * glyph * fontSize / 1000;
           continue;
         }
 
-        const width = glyph.width;
-        const character = glyph.fontChar;
         const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
-        const charWidth = width * widthAdvanceScale + spacing * fontDirection;
+        const character = glyph.fontChar;
+        let scaledX, scaledY;
+        let width = glyph.width;
+
+        if (vertical) {
+          let vx;
+          const vmetric = glyph.vmetric || defaultVMetrics;
+          vx = glyph.vmetric ? vmetric[1] : width * 0.5;
+          vx = -vx * widthAdvanceScale;
+          const vy = vmetric[2] * widthAdvanceScale;
+          width = vmetric ? -vmetric[0] : width;
+          scaledX = vx / fontSizeScale;
+          scaledY = (x + vy) / fontSizeScale;
+        } else {
+          scaledX = x / fontSizeScale;
+          scaledY = 0;
+        }
 
-        if (!glyph.isInFont && !font.missingFile) {
-          x += charWidth;
-          continue;
+        if (glyph.isInFont || font.missingFile) {
+          current.xcoords.push(current.x + scaledX);
+
+          if (vertical) {
+            current.ycoords.push(-current.y + scaledY);
+          }
+
+          current.tspan.textContent += character;
+        } else {}
+
+        let charWidth;
+
+        if (vertical) {
+          charWidth = width * widthAdvanceScale - spacing * fontDirection;
+        } else {
+          charWidth = width * widthAdvanceScale + spacing * fontDirection;
         }
 
-        current.xcoords.push(current.x + x);
-        current.tspan.textContent += character;
         x += charWidth;
       }
 
+      current.tspan.setAttributeNS(null, "x", current.xcoords.map(pf).join(" "));
+
+      if (vertical) {
+        current.tspan.setAttributeNS(null, "y", current.ycoords.map(pf).join(" "));
+      } else {
+        current.tspan.setAttributeNS(null, "y", pf(-current.y));
+      }
+
       if (vertical) {
-        current.y -= x * textHScale;
+        current.y -= x;
       } else {
         current.x += x * textHScale;
       }
 
-      current.tspan.setAttributeNS(null, "x", current.xcoords.map(pf).join(" "));
-      current.tspan.setAttributeNS(null, "y", pf(-current.y));
       current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
       current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
 
@@ -835,6 +868,10 @@ exports.SVGGraphics = SVGGraphics;
     }
 
     addFontStyle(fontObj) {
+      if (!fontObj.data) {
+        throw new Error("addFontStyle: No font data available, " + 'ensure that the "fontExtraProperties" API parameter is set.');
+      }
+
       if (!this.cssStyle) {
         this.cssStyle = this.svgFactory.createElement("svg:style");
         this.cssStyle.setAttributeNS(null, "type", "text/css");
@@ -851,7 +888,7 @@ exports.SVGGraphics = SVGGraphics;
       let size = details[1];
       current.font = fontObj;
 
-      if (this.embedFonts && fontObj.data && !this.embeddedFonts[fontObj.loadedName]) {
+      if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) {
         this.addFontStyle(fontObj);
         this.embeddedFonts[fontObj.loadedName] = fontObj;
       }
@@ -881,6 +918,7 @@ exports.SVGGraphics = SVGGraphics;
       current.tspan = this.svgFactory.createElement("svg:tspan");
       current.tspan.setAttributeNS(null, "y", pf(-current.y));
       current.xcoords = [];
+      current.ycoords = [];
     }
 
     endText() {
@@ -927,6 +965,7 @@ exports.SVGGraphics = SVGGraphics;
       this.current.fillColor = _util.Util.makeCssRgb(r, g, b);
       this.current.tspan = this.svgFactory.createElement("svg:tspan");
       this.current.xcoords = [];
+      this.current.ycoords = [];
     }
 
     setStrokeColorN(args) {
@@ -962,6 +1001,10 @@ exports.SVGGraphics = SVGGraphics;
       rect.setAttributeNS(null, "height", y1 - y0);
       rect.setAttributeNS(null, "fill", this._makeShadingPattern(args));
 
+      if (this.current.fillAlpha < 1) {
+        rect.setAttributeNS(null, "fill-opacity", this.current.fillAlpha);
+      }
+
       this._ensureTransformGroup().appendChild(rect);
     }
 
@@ -1376,19 +1419,6 @@ exports.SVGGraphics = SVGGraphics;
       this._ensureTransformGroup().appendChild(rect);
     }
 
-    paintJpegXObject(objId, w, h) {
-      const imgObj = this.objs.get(objId);
-      const imgEl = this.svgFactory.createElement("svg:image");
-      imgEl.setAttributeNS(XLINK_NS, "xlink:href", imgObj.src);
-      imgEl.setAttributeNS(null, "width", pf(w));
-      imgEl.setAttributeNS(null, "height", pf(h));
-      imgEl.setAttributeNS(null, "x", "0");
-      imgEl.setAttributeNS(null, "y", pf(-h));
-      imgEl.setAttributeNS(null, "transform", `scale(${pf(1 / w)} ${pf(-1 / h)})`);
-
-      this._ensureTransformGroup().appendChild(imgEl);
-    }
-
     paintImageXObject(objId) {
       const imgData = this.objs.get(objId);
 

+ 44 - 32
lib/display/text_layer.js

@@ -102,7 +102,20 @@ var renderTextLayer = function renderTextLayerClosure() {
       textDivProperties.angle = angle * (180 / Math.PI);
     }
 
+    let shouldScaleText = false;
+
     if (geom.str.length > 1) {
+      shouldScaleText = true;
+    } else if (geom.transform[0] !== geom.transform[3]) {
+      const absScaleX = Math.abs(geom.transform[0]),
+            absScaleY = Math.abs(geom.transform[3]);
+
+      if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) {
+        shouldScaleText = true;
+      }
+    }
+
+    if (shouldScaleText) {
       if (style.vertical) {
         textDivProperties.canvasWidth = geom.height * task._viewport.scale;
       } else {
@@ -173,6 +186,20 @@ var renderTextLayer = function renderTextLayerClosure() {
     capability.resolve();
   }
 
+  function findPositiveMin(ts, offset, count) {
+    let result = 0;
+
+    for (let i = 0; i < count; i++) {
+      const t = ts[offset++];
+
+      if (t > 0) {
+        result = result ? Math.min(t, result) : t;
+      }
+    }
+
+    return result;
+  }
+
   function expand(task) {
     var bounds = task._bounds;
     var viewport = task._viewport;
@@ -201,41 +228,26 @@ var renderTextLayer = function renderTextLayerClosure() {
           s = m[1];
       var points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size];
       var ts = new Float64Array(64);
-      points.forEach(function (p, i) {
+      points.forEach(function (p, j) {
         var t = _util.Util.applyTransform(p, m);
 
-        ts[i + 0] = c && (e.left - t[0]) / c;
-        ts[i + 4] = s && (e.top - t[1]) / s;
-        ts[i + 8] = c && (e.right - t[0]) / c;
-        ts[i + 12] = s && (e.bottom - t[1]) / s;
-        ts[i + 16] = s && (e.left - t[0]) / -s;
-        ts[i + 20] = c && (e.top - t[1]) / c;
-        ts[i + 24] = s && (e.right - t[0]) / -s;
-        ts[i + 28] = c && (e.bottom - t[1]) / c;
-        ts[i + 32] = c && (e.left - t[0]) / -c;
-        ts[i + 36] = s && (e.top - t[1]) / -s;
-        ts[i + 40] = c && (e.right - t[0]) / -c;
-        ts[i + 44] = s && (e.bottom - t[1]) / -s;
-        ts[i + 48] = s && (e.left - t[0]) / s;
-        ts[i + 52] = c && (e.top - t[1]) / -c;
-        ts[i + 56] = s && (e.right - t[0]) / s;
-        ts[i + 60] = c && (e.bottom - t[1]) / -c;
+        ts[j + 0] = c && (e.left - t[0]) / c;
+        ts[j + 4] = s && (e.top - t[1]) / s;
+        ts[j + 8] = c && (e.right - t[0]) / c;
+        ts[j + 12] = s && (e.bottom - t[1]) / s;
+        ts[j + 16] = s && (e.left - t[0]) / -s;
+        ts[j + 20] = c && (e.top - t[1]) / c;
+        ts[j + 24] = s && (e.right - t[0]) / -s;
+        ts[j + 28] = c && (e.bottom - t[1]) / c;
+        ts[j + 32] = c && (e.left - t[0]) / -c;
+        ts[j + 36] = s && (e.top - t[1]) / -s;
+        ts[j + 40] = c && (e.right - t[0]) / -c;
+        ts[j + 44] = s && (e.bottom - t[1]) / -s;
+        ts[j + 48] = s && (e.left - t[0]) / s;
+        ts[j + 52] = c && (e.top - t[1]) / -c;
+        ts[j + 56] = s && (e.right - t[0]) / s;
+        ts[j + 60] = c && (e.bottom - t[1]) / -c;
       });
-
-      var findPositiveMin = function (ts, offset, count) {
-        var result = 0;
-
-        for (var i = 0; i < count; i++) {
-          var t = ts[offset++];
-
-          if (t > 0) {
-            result = result ? Math.min(t, result) : t;
-          }
-        }
-
-        return result;
-      };
-
       var boxScale = 1 + Math.min(Math.abs(c), Math.abs(s));
       divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale;
       divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale;

+ 3 - 3
lib/display/transport_stream.js

@@ -30,7 +30,7 @@ var _util = require("../shared/util.js");
 
 class PDFDataTransportStream {
   constructor(params, pdfDataRangeTransport) {
-    (0, _util.assert)(pdfDataRangeTransport);
+    (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.');
     this._queuedChunks = [];
     this._progressiveDone = params.progressiveDone || false;
     const initialData = params.initialData;
@@ -95,7 +95,7 @@ class PDFDataTransportStream {
         return true;
       });
 
-      (0, _util.assert)(found);
+      (0, _util.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.");
     }
   }
 
@@ -141,7 +141,7 @@ class PDFDataTransportStream {
   }
 
   getFullReader() {
-    (0, _util.assert)(!this._fullRequestReader);
+    (0, _util.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once.");
     const queuedChunks = this._queuedChunks;
     this._queuedChunks = null;
     return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone);

+ 210 - 48
lib/pdf.js

@@ -21,25 +21,220 @@
  */
 "use strict";
 
-var pdfjsVersion = '2.4.456';
-var pdfjsBuild = '228a591c';
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "addLinkAttributes", {
+  enumerable: true,
+  get: function () {
+    return _display_utils.addLinkAttributes;
+  }
+});
+Object.defineProperty(exports, "getFilenameFromUrl", {
+  enumerable: true,
+  get: function () {
+    return _display_utils.getFilenameFromUrl;
+  }
+});
+Object.defineProperty(exports, "LinkTarget", {
+  enumerable: true,
+  get: function () {
+    return _display_utils.LinkTarget;
+  }
+});
+Object.defineProperty(exports, "loadScript", {
+  enumerable: true,
+  get: function () {
+    return _display_utils.loadScript;
+  }
+});
+Object.defineProperty(exports, "PDFDateString", {
+  enumerable: true,
+  get: function () {
+    return _display_utils.PDFDateString;
+  }
+});
+Object.defineProperty(exports, "RenderingCancelledException", {
+  enumerable: true,
+  get: function () {
+    return _display_utils.RenderingCancelledException;
+  }
+});
+Object.defineProperty(exports, "build", {
+  enumerable: true,
+  get: function () {
+    return _api.build;
+  }
+});
+Object.defineProperty(exports, "getDocument", {
+  enumerable: true,
+  get: function () {
+    return _api.getDocument;
+  }
+});
+Object.defineProperty(exports, "LoopbackPort", {
+  enumerable: true,
+  get: function () {
+    return _api.LoopbackPort;
+  }
+});
+Object.defineProperty(exports, "PDFDataRangeTransport", {
+  enumerable: true,
+  get: function () {
+    return _api.PDFDataRangeTransport;
+  }
+});
+Object.defineProperty(exports, "PDFWorker", {
+  enumerable: true,
+  get: function () {
+    return _api.PDFWorker;
+  }
+});
+Object.defineProperty(exports, "version", {
+  enumerable: true,
+  get: function () {
+    return _api.version;
+  }
+});
+Object.defineProperty(exports, "CMapCompressionType", {
+  enumerable: true,
+  get: function () {
+    return _util.CMapCompressionType;
+  }
+});
+Object.defineProperty(exports, "createObjectURL", {
+  enumerable: true,
+  get: function () {
+    return _util.createObjectURL;
+  }
+});
+Object.defineProperty(exports, "createPromiseCapability", {
+  enumerable: true,
+  get: function () {
+    return _util.createPromiseCapability;
+  }
+});
+Object.defineProperty(exports, "createValidAbsoluteUrl", {
+  enumerable: true,
+  get: function () {
+    return _util.createValidAbsoluteUrl;
+  }
+});
+Object.defineProperty(exports, "InvalidPDFException", {
+  enumerable: true,
+  get: function () {
+    return _util.InvalidPDFException;
+  }
+});
+Object.defineProperty(exports, "MissingPDFException", {
+  enumerable: true,
+  get: function () {
+    return _util.MissingPDFException;
+  }
+});
+Object.defineProperty(exports, "OPS", {
+  enumerable: true,
+  get: function () {
+    return _util.OPS;
+  }
+});
+Object.defineProperty(exports, "PasswordResponses", {
+  enumerable: true,
+  get: function () {
+    return _util.PasswordResponses;
+  }
+});
+Object.defineProperty(exports, "PermissionFlag", {
+  enumerable: true,
+  get: function () {
+    return _util.PermissionFlag;
+  }
+});
+Object.defineProperty(exports, "removeNullCharacters", {
+  enumerable: true,
+  get: function () {
+    return _util.removeNullCharacters;
+  }
+});
+Object.defineProperty(exports, "shadow", {
+  enumerable: true,
+  get: function () {
+    return _util.shadow;
+  }
+});
+Object.defineProperty(exports, "UnexpectedResponseException", {
+  enumerable: true,
+  get: function () {
+    return _util.UnexpectedResponseException;
+  }
+});
+Object.defineProperty(exports, "UNSUPPORTED_FEATURES", {
+  enumerable: true,
+  get: function () {
+    return _util.UNSUPPORTED_FEATURES;
+  }
+});
+Object.defineProperty(exports, "Util", {
+  enumerable: true,
+  get: function () {
+    return _util.Util;
+  }
+});
+Object.defineProperty(exports, "VerbosityLevel", {
+  enumerable: true,
+  get: function () {
+    return _util.VerbosityLevel;
+  }
+});
+Object.defineProperty(exports, "AnnotationLayer", {
+  enumerable: true,
+  get: function () {
+    return _annotation_layer.AnnotationLayer;
+  }
+});
+Object.defineProperty(exports, "apiCompatibilityParams", {
+  enumerable: true,
+  get: function () {
+    return _api_compatibility.apiCompatibilityParams;
+  }
+});
+Object.defineProperty(exports, "GlobalWorkerOptions", {
+  enumerable: true,
+  get: function () {
+    return _worker_options.GlobalWorkerOptions;
+  }
+});
+Object.defineProperty(exports, "renderTextLayer", {
+  enumerable: true,
+  get: function () {
+    return _text_layer.renderTextLayer;
+  }
+});
+Object.defineProperty(exports, "SVGGraphics", {
+  enumerable: true,
+  get: function () {
+    return _svg.SVGGraphics;
+  }
+});
 
-var pdfjsSharedUtil = require("./shared/util.js");
+var _display_utils = require("./display/display_utils.js");
 
-var pdfjsDisplayAPI = require("./display/api.js");
+var _api = require("./display/api.js");
 
-var pdfjsDisplayTextLayer = require("./display/text_layer.js");
+var _util = require("./shared/util.js");
 
-var pdfjsDisplayAnnotationLayer = require("./display/annotation_layer.js");
+var _annotation_layer = require("./display/annotation_layer.js");
 
-var pdfjsDisplayDisplayUtils = require("./display/display_utils.js");
+var _api_compatibility = require("./display/api_compatibility.js");
 
-var pdfjsDisplaySVG = require("./display/svg.js");
+var _worker_options = require("./display/worker_options.js");
 
-const pdfjsDisplayWorkerOptions = require("./display/worker_options.js");
+var _text_layer = require("./display/text_layer.js");
 
-const pdfjsDisplayAPICompatibility = require("./display/api_compatibility.js");
+var _svg = require("./display/svg.js");
 
+const pdfjsVersion = '2.5.207';
+const pdfjsBuild = '0974d605';
 {
   const {
     isNodeJS
@@ -48,7 +243,7 @@ const pdfjsDisplayAPICompatibility = require("./display/api_compatibility.js");
   if (isNodeJS) {
     const PDFNodeStream = require("./display/node_stream.js").PDFNodeStream;
 
-    pdfjsDisplayAPI.setPDFNetworkStreamFactory(params => {
+    (0, _api.setPDFNetworkStreamFactory)(params => {
       return new PDFNodeStream(params);
     });
   } else {
@@ -56,49 +251,16 @@ const pdfjsDisplayAPICompatibility = require("./display/api_compatibility.js");
 
     let PDFFetchStream;
 
-    if (pdfjsDisplayDisplayUtils.isFetchSupported()) {
+    if ((0, _display_utils.isFetchSupported)()) {
       PDFFetchStream = require("./display/fetch_stream.js").PDFFetchStream;
     }
 
-    pdfjsDisplayAPI.setPDFNetworkStreamFactory(params => {
-      if (PDFFetchStream && pdfjsDisplayDisplayUtils.isValidFetchUrl(params.url)) {
+    (0, _api.setPDFNetworkStreamFactory)(params => {
+      if (PDFFetchStream && (0, _display_utils.isValidFetchUrl)(params.url)) {
         return new PDFFetchStream(params);
       }
 
       return new PDFNetworkStream(params);
     });
   }
-}
-exports.build = pdfjsDisplayAPI.build;
-exports.version = pdfjsDisplayAPI.version;
-exports.getDocument = pdfjsDisplayAPI.getDocument;
-exports.LoopbackPort = pdfjsDisplayAPI.LoopbackPort;
-exports.PDFDataRangeTransport = pdfjsDisplayAPI.PDFDataRangeTransport;
-exports.PDFWorker = pdfjsDisplayAPI.PDFWorker;
-exports.renderTextLayer = pdfjsDisplayTextLayer.renderTextLayer;
-exports.AnnotationLayer = pdfjsDisplayAnnotationLayer.AnnotationLayer;
-exports.createPromiseCapability = pdfjsSharedUtil.createPromiseCapability;
-exports.PasswordResponses = pdfjsSharedUtil.PasswordResponses;
-exports.InvalidPDFException = pdfjsSharedUtil.InvalidPDFException;
-exports.MissingPDFException = pdfjsSharedUtil.MissingPDFException;
-exports.SVGGraphics = pdfjsDisplaySVG.SVGGraphics;
-exports.NativeImageDecoding = pdfjsSharedUtil.NativeImageDecoding;
-exports.CMapCompressionType = pdfjsSharedUtil.CMapCompressionType;
-exports.PermissionFlag = pdfjsSharedUtil.PermissionFlag;
-exports.UnexpectedResponseException = pdfjsSharedUtil.UnexpectedResponseException;
-exports.OPS = pdfjsSharedUtil.OPS;
-exports.VerbosityLevel = pdfjsSharedUtil.VerbosityLevel;
-exports.UNSUPPORTED_FEATURES = pdfjsSharedUtil.UNSUPPORTED_FEATURES;
-exports.createValidAbsoluteUrl = pdfjsSharedUtil.createValidAbsoluteUrl;
-exports.createObjectURL = pdfjsSharedUtil.createObjectURL;
-exports.removeNullCharacters = pdfjsSharedUtil.removeNullCharacters;
-exports.shadow = pdfjsSharedUtil.shadow;
-exports.Util = pdfjsSharedUtil.Util;
-exports.RenderingCancelledException = pdfjsDisplayDisplayUtils.RenderingCancelledException;
-exports.getFilenameFromUrl = pdfjsDisplayDisplayUtils.getFilenameFromUrl;
-exports.LinkTarget = pdfjsDisplayDisplayUtils.LinkTarget;
-exports.addLinkAttributes = pdfjsDisplayDisplayUtils.addLinkAttributes;
-exports.loadScript = pdfjsDisplayDisplayUtils.loadScript;
-exports.PDFDateString = pdfjsDisplayDisplayUtils.PDFDateString;
-exports.GlobalWorkerOptions = pdfjsDisplayWorkerOptions.GlobalWorkerOptions;
-exports.apiCompatibilityParams = pdfjsDisplayAPICompatibility.apiCompatibilityParams;
+}

+ 12 - 4
lib/pdf.worker.js

@@ -21,9 +21,17 @@
  */
 "use strict";
 
-const pdfjsVersion = '2.4.456';
-const pdfjsBuild = '228a591c';
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+Object.defineProperty(exports, "WorkerMessageHandler", {
+  enumerable: true,
+  get: function () {
+    return _worker.WorkerMessageHandler;
+  }
+});
 
-const pdfjsCoreWorker = require("./core/worker.js");
+var _worker = require("./core/worker.js");
 
-exports.WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler;
+const pdfjsVersion = '2.5.207';
+const pdfjsBuild = '0974d605';

+ 2 - 0
lib/shared/compatibility.js

@@ -21,4 +21,6 @@
  */
 "use strict";
 
+var _is_node = require("./is_node.js");
+
 ;

+ 1 - 1
lib/shared/is_node.js

@@ -25,5 +25,5 @@ Object.defineProperty(exports, "__esModule", {
   value: true
 });
 exports.isNodeJS = void 0;
-const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions["nw"] && !process.versions["electron"];
+const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !process.versions.electron;
 exports.isNodeJS = isNodeJS;

+ 6 - 6
lib/shared/message_handler.js

@@ -122,22 +122,22 @@ class MessageHandler {
       }
 
       if (data.callbackId) {
-        const sourceName = this.sourceName;
-        const targetName = data.sourceName;
+        const cbSourceName = this.sourceName;
+        const cbTargetName = data.sourceName;
         new Promise(function (resolve) {
           resolve(action(data.data));
         }).then(function (result) {
           comObj.postMessage({
-            sourceName,
-            targetName,
+            sourceName: cbSourceName,
+            targetName: cbTargetName,
             callback: CallbackKind.DATA,
             callbackId: data.callbackId,
             data: result
           });
         }, function (reason) {
           comObj.postMessage({
-            sourceName,
-            targetName,
+            sourceName: cbSourceName,
+            targetName: cbTargetName,
             callback: CallbackKind.ERROR,
             callbackId: data.callbackId,
             reason: wrapReason(reason)

+ 15 - 9
lib/shared/util.js

@@ -49,7 +49,7 @@ exports.stringToUTF8String = stringToUTF8String;
 exports.utf8StringToString = utf8StringToString;
 exports.warn = warn;
 exports.unreachable = unreachable;
-exports.IsEvalSupportedCached = exports.IsLittleEndianCached = exports.createObjectURL = exports.FormatError = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.NativeImageDecoding = exports.MissingPDFException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = exports.BaseException = void 0;
+exports.IsEvalSupportedCached = exports.IsLittleEndianCached = exports.createObjectURL = exports.FormatError = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.MissingPDFException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = exports.BaseException = void 0;
 
 require("./compatibility.js");
 
@@ -57,12 +57,6 @@ const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
 exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
 const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
 exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;
-const NativeImageDecoding = {
-  NONE: "none",
-  DECODE: "decode",
-  DISPLAY: "display"
-};
-exports.NativeImageDecoding = NativeImageDecoding;
 const PermissionFlag = {
   PRINT: 0x04,
   MODIFY_CONTENTS: 0x08,
@@ -327,7 +321,19 @@ const UNSUPPORTED_FEATURES = {
   javaScript: "javaScript",
   smask: "smask",
   shadingPattern: "shadingPattern",
-  font: "font"
+  font: "font",
+  errorTilingPattern: "errorTilingPattern",
+  errorExtGState: "errorExtGState",
+  errorXObject: "errorXObject",
+  errorFontLoadType3: "errorFontLoadType3",
+  errorFontState: "errorFontState",
+  errorFontMissing: "errorFontMissing",
+  errorFontTranslate: "errorFontTranslate",
+  errorColorSpace: "errorColorSpace",
+  errorOperatorList: "errorOperatorList",
+  errorFontToUnicode: "errorFontToUnicode",
+  errorFontLoadNative: "errorFontLoadNative",
+  errorFontGetPath: "errorFontGetPath"
 };
 exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;
 const PasswordResponses = {
@@ -540,7 +546,7 @@ function arrayByteLength(arr) {
     return arr.length;
   }
 
-  assert(arr.byteLength !== undefined);
+  assert(arr.byteLength !== undefined, "arrayByteLength - invalid argument.");
   return arr.byteLength;
 }
 

+ 165 - 95
lib/test/unit/api_spec.js

@@ -31,6 +31,8 @@ var _api = require("../../display/api.js");
 
 var _ui_utils = require("../../web/ui_utils.js");
 
+var _image_utils = require("../../core/image_utils.js");
+
 var _worker_options = require("../../display/worker_options.js");
 
 var _is_node = require("../../shared/is_node.js");
@@ -374,26 +376,25 @@ describe("api", function () {
     });
   });
   describe("PDFDocument", function () {
-    var loadingTask;
-    var doc;
+    let pdfLoadingTask, pdfDocument;
     beforeAll(function (done) {
-      loadingTask = (0, _api.getDocument)(basicApiGetDocumentParams);
-      loadingTask.promise.then(function (data) {
-        doc = data;
+      pdfLoadingTask = (0, _api.getDocument)(basicApiGetDocumentParams);
+      pdfLoadingTask.promise.then(function (data) {
+        pdfDocument = data;
         done();
       });
     });
     afterAll(function (done) {
-      loadingTask.destroy().then(done);
+      pdfLoadingTask.destroy().then(done);
     });
     it("gets number of pages", function () {
-      expect(doc.numPages).toEqual(3);
+      expect(pdfDocument.numPages).toEqual(3);
     });
     it("gets fingerprint", function () {
-      expect(doc.fingerprint).toEqual("ea8b35919d6279a369e835bde778611b");
+      expect(pdfDocument.fingerprint).toEqual("ea8b35919d6279a369e835bde778611b");
     });
     it("gets page", function (done) {
-      var promise = doc.getPage(1);
+      var promise = pdfDocument.getPage(1);
       promise.then(function (data) {
         expect(data instanceof _api.PDFPageProxy).toEqual(true);
         expect(data.pageNumber).toEqual(1);
@@ -401,9 +402,9 @@ describe("api", function () {
       }).catch(done.fail);
     });
     it("gets non-existent page", function (done) {
-      var outOfRangePromise = doc.getPage(100);
-      var nonIntegerPromise = doc.getPage(2.5);
-      var nonNumberPromise = doc.getPage("1");
+      var outOfRangePromise = pdfDocument.getPage(100);
+      var nonIntegerPromise = pdfDocument.getPage(2.5);
+      var nonNumberPromise = pdfDocument.getPage("1");
       outOfRangePromise = outOfRangePromise.then(function () {
         throw new Error("shall fail for out-of-range pageNumber parameter");
       }, function (reason) {
@@ -453,7 +454,7 @@ describe("api", function () {
         num: 17,
         gen: 0
       };
-      var promise = doc.getPageIndex(ref);
+      var promise = pdfDocument.getPageIndex(ref);
       promise.then(function (pageIndex) {
         expect(pageIndex).toEqual(1);
         done();
@@ -464,7 +465,7 @@ describe("api", function () {
         num: 3,
         gen: 0
       };
-      var promise = doc.getPageIndex(ref);
+      var promise = pdfDocument.getPageIndex(ref);
       promise.then(function () {
         done.fail("shall fail for invalid page reference.");
       }).catch(function (reason) {
@@ -473,7 +474,7 @@ describe("api", function () {
       });
     });
     it("gets destinations, from /Dests dictionary", function (done) {
-      var promise = doc.getDestinations();
+      var promise = pdfDocument.getDestinations();
       promise.then(function (data) {
         expect(data).toEqual({
           chapter1: [{
@@ -487,7 +488,7 @@ describe("api", function () {
       }).catch(done.fail);
     });
     it("gets a destination, from /Dests dictionary", function (done) {
-      var promise = doc.getDestination("chapter1");
+      var promise = pdfDocument.getDestination("chapter1");
       promise.then(function (data) {
         expect(data).toEqual([{
           gen: 0,
@@ -499,7 +500,7 @@ describe("api", function () {
       }).catch(done.fail);
     });
     it("gets a non-existent destination, from /Dests dictionary", function (done) {
-      var promise = doc.getDestination("non-existent-named-destination");
+      var promise = pdfDocument.getDestination("non-existent-named-destination");
       promise.then(function (data) {
         expect(data).toEqual(null);
         done();
@@ -507,8 +508,8 @@ describe("api", function () {
     });
     it("gets destinations, from /Names (NameTree) dictionary", function (done) {
       var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("issue6204.pdf"));
-      var promise = loadingTask.promise.then(function (pdfDocument) {
-        return pdfDocument.getDestinations();
+      var promise = loadingTask.promise.then(function (pdfDoc) {
+        return pdfDoc.getDestinations();
       });
       promise.then(function (destinations) {
         expect(destinations).toEqual({
@@ -530,8 +531,8 @@ describe("api", function () {
     });
     it("gets a destination, from /Names (NameTree) dictionary", function (done) {
       var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("issue6204.pdf"));
-      var promise = loadingTask.promise.then(function (pdfDocument) {
-        return pdfDocument.getDestination("Page.1");
+      var promise = loadingTask.promise.then(function (pdfDoc) {
+        return pdfDoc.getDestination("Page.1");
       });
       promise.then(function (destination) {
         expect(destination).toEqual([{
@@ -545,8 +546,8 @@ describe("api", function () {
     });
     it("gets a non-existent destination, from /Names (NameTree) dictionary", function (done) {
       var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("issue6204.pdf"));
-      var promise = loadingTask.promise.then(function (pdfDocument) {
-        return pdfDocument.getDestination("non-existent-named-destination");
+      var promise = loadingTask.promise.then(function (pdfDoc) {
+        return pdfDoc.getDestination("non-existent-named-destination");
       });
       promise.then(function (destination) {
         expect(destination).toEqual(null);
@@ -554,9 +555,9 @@ describe("api", function () {
       }).catch(done.fail);
     });
     it("gets non-string destination", function (done) {
-      let numberPromise = doc.getDestination(4.3);
-      let booleanPromise = doc.getDestination(true);
-      let arrayPromise = doc.getDestination([{
+      let numberPromise = pdfDocument.getDestination(4.3);
+      let booleanPromise = pdfDocument.getDestination(true);
+      let arrayPromise = pdfDocument.getDestination([{
         num: 17,
         gen: 0
       }, {
@@ -580,7 +581,7 @@ describe("api", function () {
       Promise.all([numberPromise, booleanPromise, arrayPromise]).then(done, done.fail);
     });
     it("gets non-existent page labels", function (done) {
-      var promise = doc.getPageLabels();
+      var promise = pdfDocument.getPageLabels();
       promise.then(function (data) {
         expect(data).toEqual(null);
         done();
@@ -613,45 +614,45 @@ describe("api", function () {
     });
     it("gets default page layout", function (done) {
       var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("tracemonkey.pdf"));
-      loadingTask.promise.then(function (pdfDocument) {
-        return pdfDocument.getPageLayout();
+      loadingTask.promise.then(function (pdfDoc) {
+        return pdfDoc.getPageLayout();
       }).then(function (mode) {
         expect(mode).toEqual("");
         loadingTask.destroy().then(done);
       }).catch(done.fail);
     });
     it("gets non-default page layout", function (done) {
-      doc.getPageLayout().then(function (mode) {
+      pdfDocument.getPageLayout().then(function (mode) {
         expect(mode).toEqual("SinglePage");
         done();
       }).catch(done.fail);
     });
     it("gets default page mode", function (done) {
       var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("tracemonkey.pdf"));
-      loadingTask.promise.then(function (pdfDocument) {
-        return pdfDocument.getPageMode();
+      loadingTask.promise.then(function (pdfDoc) {
+        return pdfDoc.getPageMode();
       }).then(function (mode) {
         expect(mode).toEqual("UseNone");
         loadingTask.destroy().then(done);
       }).catch(done.fail);
     });
     it("gets non-default page mode", function (done) {
-      doc.getPageMode().then(function (mode) {
+      pdfDocument.getPageMode().then(function (mode) {
         expect(mode).toEqual("UseOutlines");
         done();
       }).catch(done.fail);
     });
     it("gets default viewer preferences", function (done) {
       var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("tracemonkey.pdf"));
-      loadingTask.promise.then(function (pdfDocument) {
-        return pdfDocument.getViewerPreferences();
+      loadingTask.promise.then(function (pdfDoc) {
+        return pdfDoc.getViewerPreferences();
       }).then(function (prefs) {
-        expect(typeof prefs === "object" && prefs !== null && (0, _util.isEmptyObj)(prefs)).toEqual(true);
+        expect(prefs).toEqual(null);
         loadingTask.destroy().then(done);
       }).catch(done.fail);
     });
     it("gets non-default viewer preferences", function (done) {
-      doc.getViewerPreferences().then(function (prefs) {
+      pdfDocument.getViewerPreferences().then(function (prefs) {
         expect(prefs).toEqual({
           Direction: "L2R"
         });
@@ -660,15 +661,15 @@ describe("api", function () {
     });
     it("gets default open action", function (done) {
       var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("tracemonkey.pdf"));
-      loadingTask.promise.then(function (pdfDocument) {
-        return pdfDocument.getOpenAction();
+      loadingTask.promise.then(function (pdfDoc) {
+        return pdfDoc.getOpenAction();
       }).then(function (openAction) {
         expect(openAction).toEqual(null);
         loadingTask.destroy().then(done);
       }).catch(done.fail);
     });
     it("gets non-default open action (with destination)", function (done) {
-      doc.getOpenAction().then(function (openAction) {
+      pdfDocument.getOpenAction().then(function (openAction) {
         expect(openAction.dest).toEqual([{
           num: 15,
           gen: 0
@@ -682,15 +683,15 @@ describe("api", function () {
     it("gets non-default open action (with Print action)", function (done) {
       const loadingTask1 = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("bug1001080.pdf"));
       const loadingTask2 = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("issue11442_reduced.pdf"));
-      const promise1 = loadingTask1.promise.then(function (pdfDocument) {
-        return pdfDocument.getOpenAction();
+      const promise1 = loadingTask1.promise.then(function (pdfDoc) {
+        return pdfDoc.getOpenAction();
       }).then(function (openAction) {
         expect(openAction.dest).toBeUndefined();
         expect(openAction.action).toEqual("Print");
         return loadingTask1.destroy();
       });
-      const promise2 = loadingTask2.promise.then(function (pdfDocument) {
-        return pdfDocument.getOpenAction();
+      const promise2 = loadingTask2.promise.then(function (pdfDoc) {
+        return pdfDoc.getOpenAction();
       }).then(function (openAction) {
         expect(openAction.dest).toBeUndefined();
         expect(openAction.action).toEqual("Print");
@@ -699,7 +700,7 @@ describe("api", function () {
       Promise.all([promise1, promise2]).then(done, done.fail);
     });
     it("gets non-existent attachments", function (done) {
-      var promise = doc.getAttachments();
+      var promise = pdfDocument.getAttachments();
       promise.then(function (data) {
         expect(data).toEqual(null);
         done();
@@ -718,7 +719,7 @@ describe("api", function () {
       }).catch(done.fail);
     });
     it("gets javascript", function (done) {
-      var promise = doc.getJavaScript();
+      var promise = pdfDocument.getJavaScript();
       promise.then(function (data) {
         expect(data).toEqual(null);
         done();
@@ -726,8 +727,8 @@ describe("api", function () {
     });
     it("gets javascript with printing instructions (JS action)", function (done) {
       var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("issue6106.pdf"));
-      var promise = loadingTask.promise.then(function (doc) {
-        return doc.getJavaScript();
+      var promise = loadingTask.promise.then(function (pdfDoc) {
+        return pdfDoc.getJavaScript();
       });
       promise.then(function (data) {
         expect(data).toEqual(["this.print({bUI:true,bSilent:false,bShrinkToFit:true});"]);
@@ -737,8 +738,8 @@ describe("api", function () {
     });
     it("gets non-existent outline", function (done) {
       var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("tracemonkey.pdf"));
-      var promise = loadingTask.promise.then(function (pdfDocument) {
-        return pdfDocument.getOutline();
+      var promise = loadingTask.promise.then(function (pdfDoc) {
+        return pdfDoc.getOutline();
       });
       promise.then(function (outline) {
         expect(outline).toEqual(null);
@@ -746,7 +747,7 @@ describe("api", function () {
       }).catch(done.fail);
     });
     it("gets outline", function (done) {
-      var promise = doc.getOutline();
+      var promise = pdfDocument.getOutline();
       promise.then(function (outline) {
         expect(Array.isArray(outline)).toEqual(true);
         expect(outline.length).toEqual(2);
@@ -766,8 +767,8 @@ describe("api", function () {
     });
     it("gets outline containing a url", function (done) {
       var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("issue3214.pdf"));
-      loadingTask.promise.then(function (pdfDocument) {
-        pdfDocument.getOutline().then(function (outline) {
+      loadingTask.promise.then(function (pdfDoc) {
+        pdfDoc.getOutline().then(function (outline) {
           expect(Array.isArray(outline)).toEqual(true);
           expect(outline.length).toEqual(5);
           var outlineItemTwo = outline[2];
@@ -785,23 +786,23 @@ describe("api", function () {
       }).catch(done.fail);
     });
     it("gets non-existent permissions", function (done) {
-      doc.getPermissions().then(function (permissions) {
+      pdfDocument.getPermissions().then(function (permissions) {
         expect(permissions).toEqual(null);
         done();
       }).catch(done.fail);
     });
     it("gets permissions", function (done) {
       const loadingTask0 = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("issue9972-1.pdf"));
-      const promise0 = loadingTask0.promise.then(function (pdfDocument) {
-        return pdfDocument.getPermissions();
+      const promise0 = loadingTask0.promise.then(function (pdfDoc) {
+        return pdfDoc.getPermissions();
       });
       const loadingTask1 = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("issue9972-2.pdf"));
-      const promise1 = loadingTask1.promise.then(function (pdfDocument) {
-        return pdfDocument.getPermissions();
+      const promise1 = loadingTask1.promise.then(function (pdfDoc) {
+        return pdfDoc.getPermissions();
       });
       const loadingTask2 = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("issue9972-3.pdf"));
-      const promise2 = loadingTask2.promise.then(function (pdfDocument) {
-        return pdfDocument.getPermissions();
+      const promise2 = loadingTask2.promise.then(function (pdfDoc) {
+        return pdfDoc.getPermissions();
       });
       const totalPermissionCount = Object.keys(_util.PermissionFlag).length;
       Promise.all([promise0, promise1, promise2]).then(function (permissions) {
@@ -816,19 +817,19 @@ describe("api", function () {
       }).catch(done.fail);
     });
     it("gets metadata", function (done) {
-      var promise = doc.getMetadata();
+      var promise = pdfDocument.getMetadata();
       promise.then(function ({
         info,
         metadata,
         contentDispositionFilename
       }) {
-        expect(info["Title"]).toEqual("Basic API Test");
-        expect(info["Custom"]).toEqual(undefined);
-        expect(info["PDFFormatVersion"]).toEqual("1.7");
-        expect(info["IsLinearized"]).toEqual(false);
-        expect(info["IsAcroFormPresent"]).toEqual(false);
-        expect(info["IsXFAPresent"]).toEqual(false);
-        expect(info["IsCollectionPresent"]).toEqual(false);
+        expect(info.Title).toEqual("Basic API Test");
+        expect(info.Custom).toEqual(undefined);
+        expect(info.PDFFormatVersion).toEqual("1.7");
+        expect(info.IsLinearized).toEqual(false);
+        expect(info.IsAcroFormPresent).toEqual(false);
+        expect(info.IsXFAPresent).toEqual(false);
+        expect(info.IsCollectionPresent).toEqual(false);
         expect(metadata instanceof _metadata.Metadata).toEqual(true);
         expect(metadata.get("dc:title")).toEqual("Basic API Test");
         expect(contentDispositionFilename).toEqual(null);
@@ -837,24 +838,24 @@ describe("api", function () {
     });
     it("gets metadata, with custom info dict entries", function (done) {
       var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("tracemonkey.pdf"));
-      loadingTask.promise.then(function (pdfDocument) {
-        return pdfDocument.getMetadata();
+      loadingTask.promise.then(function (pdfDoc) {
+        return pdfDoc.getMetadata();
       }).then(function ({
         info,
         metadata,
         contentDispositionFilename
       }) {
-        expect(info["Creator"]).toEqual("TeX");
-        expect(info["Producer"]).toEqual("pdfeTeX-1.21a");
-        expect(info["CreationDate"]).toEqual("D:20090401163925-07'00'");
-        const custom = info["Custom"];
+        expect(info.Creator).toEqual("TeX");
+        expect(info.Producer).toEqual("pdfeTeX-1.21a");
+        expect(info.CreationDate).toEqual("D:20090401163925-07'00'");
+        const custom = info.Custom;
         expect(typeof custom === "object" && custom !== null).toEqual(true);
         expect(custom["PTEX.Fullbanner"]).toEqual("This is pdfeTeX, " + "Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.6");
-        expect(info["PDFFormatVersion"]).toEqual("1.4");
-        expect(info["IsLinearized"]).toEqual(false);
-        expect(info["IsAcroFormPresent"]).toEqual(false);
-        expect(info["IsXFAPresent"]).toEqual(false);
-        expect(info["IsCollectionPresent"]).toEqual(false);
+        expect(info.PDFFormatVersion).toEqual("1.4");
+        expect(info.IsLinearized).toEqual(false);
+        expect(info.IsAcroFormPresent).toEqual(false);
+        expect(info.IsXFAPresent).toEqual(false);
+        expect(info.IsCollectionPresent).toEqual(false);
         expect(metadata).toEqual(null);
         expect(contentDispositionFilename).toEqual(null);
         loadingTask.destroy().then(done);
@@ -862,25 +863,25 @@ describe("api", function () {
     });
     it("gets metadata, with missing PDF header (bug 1606566)", function (done) {
       const loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("bug1606566.pdf"));
-      loadingTask.promise.then(function (pdfDocument) {
-        return pdfDocument.getMetadata();
+      loadingTask.promise.then(function (pdfDoc) {
+        return pdfDoc.getMetadata();
       }).then(function ({
         info,
         metadata,
         contentDispositionFilename
       }) {
-        expect(info["PDFFormatVersion"]).toEqual(null);
-        expect(info["IsLinearized"]).toEqual(false);
-        expect(info["IsAcroFormPresent"]).toEqual(false);
-        expect(info["IsXFAPresent"]).toEqual(false);
-        expect(info["IsCollectionPresent"]).toEqual(false);
+        expect(info.PDFFormatVersion).toEqual(null);
+        expect(info.IsLinearized).toEqual(false);
+        expect(info.IsAcroFormPresent).toEqual(false);
+        expect(info.IsXFAPresent).toEqual(false);
+        expect(info.IsCollectionPresent).toEqual(false);
         expect(metadata).toEqual(null);
         expect(contentDispositionFilename).toEqual(null);
         loadingTask.destroy().then(done);
       }).catch(done.fail);
     });
     it("gets data", function (done) {
-      var promise = doc.getData();
+      var promise = pdfDocument.getData();
       promise.then(function (data) {
         expect(data instanceof Uint8Array).toEqual(true);
         expect(data.length).toEqual(basicApiFileLength);
@@ -888,7 +889,7 @@ describe("api", function () {
       }).catch(done.fail);
     });
     it("gets download info", function (done) {
-      var promise = doc.getDownloadInfo();
+      var promise = pdfDocument.getDownloadInfo();
       promise.then(function (data) {
         expect(data).toEqual({
           length: basicApiFileLength
@@ -897,7 +898,7 @@ describe("api", function () {
       }).catch(done.fail);
     });
     it("gets document stats", function (done) {
-      var promise = doc.getStats();
+      var promise = pdfDocument.getStats();
       promise.then(function (stats) {
         expect(stats).toEqual({
           streamTypes: {},
@@ -907,7 +908,7 @@ describe("api", function () {
       }).catch(done.fail);
     });
     it("cleans up document resources", function (done) {
-      const promise = doc.cleanup();
+      const promise = pdfDocument.cleanup();
       promise.then(function () {
         expect(true).toEqual(true);
         done();
@@ -1003,11 +1004,10 @@ describe("api", function () {
     });
   });
   describe("Page", function () {
-    var loadingTask;
-    var pdfDocument, page;
+    let pdfLoadingTask, pdfDocument, page;
     beforeAll(function (done) {
-      loadingTask = (0, _api.getDocument)(basicApiGetDocumentParams);
-      loadingTask.promise.then(function (doc) {
+      pdfLoadingTask = (0, _api.getDocument)(basicApiGetDocumentParams);
+      pdfLoadingTask.promise.then(function (doc) {
         pdfDocument = doc;
         pdfDocument.getPage(1).then(function (data) {
           page = data;
@@ -1016,7 +1016,7 @@ describe("api", function () {
       }).catch(done.fail);
     });
     afterAll(function (done) {
-      loadingTask.destroy().then(done);
+      pdfLoadingTask.destroy().then(done);
     });
     it("gets page number", function () {
       expect(page.pageNumber).toEqual(1);
@@ -1097,6 +1097,14 @@ describe("api", function () {
       expect(viewport.transform).toEqual([1, 0, 0, -1, 0, 841.89]);
       expect(dontFlipViewport.transform).toEqual([1, 0, -0, 1, 0, 0]);
     });
+    it("gets viewport with invalid rotation", function () {
+      expect(function () {
+        page.getViewport({
+          scale: 1,
+          rotation: 45
+        });
+      }).toThrow(new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."));
+    });
     it("gets annotations", function (done) {
       var defaultPromise = page.getAnnotations().then(function (data) {
         expect(data.length).toEqual(4);
@@ -1450,6 +1458,68 @@ describe("api", function () {
         });
       }).catch(done.fail);
     });
+    it("caches image resources at the document/page level as expected (issue 11878)", async function (done) {
+      const {
+        NUM_PAGES_THRESHOLD
+      } = _image_utils.GlobalImageCache,
+            EXPECTED_WIDTH = 2550,
+            EXPECTED_HEIGHT = 3300;
+      const loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("issue11878.pdf"));
+      let firstImgData = null;
+
+      try {
+        const pdfDoc = await loadingTask.promise;
+
+        for (let i = 1; i <= pdfDoc.numPages; i++) {
+          const pdfPage = await pdfDoc.getPage(i);
+          const opList = await pdfPage.getOperatorList();
+          const {
+            commonObjs,
+            objs
+          } = pdfPage;
+          const imgIndex = opList.fnArray.indexOf(_util.OPS.paintImageXObject);
+          const [objId, width, height] = opList.argsArray[imgIndex];
+
+          if (i < NUM_PAGES_THRESHOLD) {
+            expect(objId).toEqual(`img_p${i - 1}_1`);
+            expect(objs.has(objId)).toEqual(true);
+            expect(commonObjs.has(objId)).toEqual(false);
+          } else {
+            expect(objId).toEqual(`g_${loadingTask.docId}_img_p${NUM_PAGES_THRESHOLD - 1}_1`);
+            expect(objs.has(objId)).toEqual(false);
+            expect(commonObjs.has(objId)).toEqual(true);
+          }
+
+          expect(width).toEqual(EXPECTED_WIDTH);
+          expect(height).toEqual(EXPECTED_HEIGHT);
+
+          if (i === 1) {
+            firstImgData = objs.get(objId);
+            expect(firstImgData.width).toEqual(EXPECTED_WIDTH);
+            expect(firstImgData.height).toEqual(EXPECTED_HEIGHT);
+            expect(firstImgData.kind).toEqual(_util.ImageKind.RGB_24BPP);
+            expect(firstImgData.data instanceof Uint8ClampedArray).toEqual(true);
+            expect(firstImgData.data.length).toEqual(25245000);
+          } else {
+            const objsPool = i >= NUM_PAGES_THRESHOLD ? commonObjs : objs;
+            const currentImgData = objsPool.get(objId);
+            expect(currentImgData.width).toEqual(firstImgData.width);
+            expect(currentImgData.height).toEqual(firstImgData.height);
+            expect(currentImgData.kind).toEqual(firstImgData.kind);
+            expect(currentImgData.data instanceof Uint8ClampedArray).toEqual(true);
+            expect(currentImgData.data.every((value, index) => {
+              return value === firstImgData.data[index];
+            })).toEqual(true);
+          }
+        }
+
+        await loadingTask.destroy();
+        firstImgData = null;
+        done();
+      } catch (ex) {
+        done.fail(ex);
+      }
+    });
   });
   describe("Multiple `getDocument` instances", function () {
     var pdf1 = (0, _test_utils.buildGetDocumentParams)("tracemonkey.pdf");

+ 12 - 12
lib/test/unit/cff_parser_spec.js

@@ -130,12 +130,12 @@ describe("CFFParser", function () {
     expect(charStrings.get(0).length).toEqual(38);
   });
   it("parses a CharString endchar with 4 args w/seac enabled", function () {
-    var parser = new _cff_parser.CFFParser(fontData, {}, true);
-    parser.parse();
+    const cffParser = new _cff_parser.CFFParser(fontData, {}, true);
+    cffParser.parse();
     var bytes = new Uint8Array([0, 1, 1, 0, 237, 247, 22, 247, 72, 204, 247, 86, 14]);
-    parser.bytes = bytes;
-    var charStringsIndex = parser.parseIndex(0).obj;
-    var result = parser.parseCharStrings({
+    cffParser.bytes = bytes;
+    var charStringsIndex = cffParser.parseIndex(0).obj;
+    var result = cffParser.parseCharStrings({
       charStrings: charStringsIndex,
       privateDict: privateDictStub
     });
@@ -149,12 +149,12 @@ describe("CFFParser", function () {
     expect(result.seacs[0][3]).toEqual(194);
   });
   it("parses a CharString endchar with 4 args w/seac disabled", function () {
-    var parser = new _cff_parser.CFFParser(fontData, {}, false);
-    parser.parse();
+    const cffParser = new _cff_parser.CFFParser(fontData, {}, false);
+    cffParser.parse();
     var bytes = new Uint8Array([0, 1, 1, 0, 237, 247, 22, 247, 72, 204, 247, 86, 14]);
-    parser.bytes = bytes;
-    var charStringsIndex = parser.parseIndex(0).obj;
-    var result = parser.parseCharStrings({
+    cffParser.bytes = bytes;
+    var charStringsIndex = cffParser.parseIndex(0).obj;
+    var result = cffParser.parseCharStrings({
       charStrings: charStringsIndex,
       privateDict: privateDictStub
     });
@@ -192,7 +192,7 @@ describe("CFFParser", function () {
     var charset = parser.parseCharsets(3, 2, new _cff_parser.CFFStrings(), false);
     expect(charset.charset).toEqual([".notdef", "quoteright", "parenleft"]);
     charset = parser.parseCharsets(3, 2, new _cff_parser.CFFStrings(), true);
-    expect(charset.charset).toEqual([".notdef", 8, 9]);
+    expect(charset.charset).toEqual([0, 8, 9]);
   });
   it("parses charset format 2", function () {
     var bytes = new Uint8Array([0x00, 0x00, 0x00, 0x02, 0x00, 0x08, 0x00, 0x01]);
@@ -200,7 +200,7 @@ describe("CFFParser", function () {
     var charset = parser.parseCharsets(3, 2, new _cff_parser.CFFStrings(), false);
     expect(charset.charset).toEqual([".notdef", "quoteright", "parenleft"]);
     charset = parser.parseCharsets(3, 2, new _cff_parser.CFFStrings(), true);
-    expect(charset.charset).toEqual([".notdef", 8, 9]);
+    expect(charset.charset).toEqual([0, 8, 9]);
   });
   it("parses encoding format 0", function () {
     var bytes = new Uint8Array([0x00, 0x00, 0x00, 0x01, 0x08]);

+ 1 - 1
lib/test/unit/clitests_helper.js

@@ -30,7 +30,7 @@ var _node_stream = require("../../display/node_stream.js");
 var _api = require("../../display/api.js");
 
 if (!_is_node.isNodeJS) {
-  throw new Error("The `gulp unittestcli` command can only be used in " + "Node.js environments.");
+  throw new Error("The `gulp unittestcli` command can only be used in Node.js environments.");
 }
 
 (0, _util.setVerbosityLevel)(_util.VerbosityLevel.ERRORS);

+ 1 - 5
lib/test/unit/display_svg_spec.js

@@ -29,8 +29,6 @@ var _api = require("../../display/api.js");
 
 var _is_node = require("../../shared/is_node.js");
 
-var _util = require("../../shared/util.js");
-
 var _svg = require("../../display/svg.js");
 
 const XLINK_NS = "http://www.w3.org/1999/xlink";
@@ -72,9 +70,7 @@ describe("SVGGraphics", function () {
   var loadingTask;
   var page;
   beforeAll(function (done) {
-    loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("xobject-image.pdf", {
-      nativeImageDecoderSupport: _util.NativeImageDecoding.DISPLAY
-    }));
+    loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("xobject-image.pdf"));
     loadingTask.promise.then(function (doc) {
       doc.getPage(1).then(function (firstPage) {
         page = firstPage;

+ 2 - 2
lib/test/unit/jasmine-boot.js

@@ -40,7 +40,7 @@ function initializePDFJS(callback) {
     } = modules[4];
 
     if (isNodeJS) {
-      throw new Error("The `gulp unittest` command cannot be used in " + "Node.js environments.");
+      throw new Error("The `gulp unittest` command cannot be used in Node.js environments.");
     }
 
     if (typeof Response !== "undefined" && "body" in Response.prototype && typeof ReadableStream !== "undefined") {
@@ -115,7 +115,7 @@ function initializePDFJS(callback) {
   env.addReporter(htmlReporter);
 
   if (queryString.getParam("browser")) {
-    var testReporter = new TestReporter(queryString.getParam("browser"), queryString.getParam("path"));
+    var testReporter = new TestReporter(queryString.getParam("browser"));
     env.addReporter(testReporter);
   }
 

+ 5 - 3
lib/test/unit/node_stream_spec.js

@@ -27,7 +27,9 @@ var _is_node = require("../../shared/is_node.js");
 
 var _node_stream = require("../../display/node_stream.js");
 
-(0, _util.assert)(_is_node.isNodeJS);
+if (!_is_node.isNodeJS) {
+  throw new Error('The "node_stream" unit-tests can only be run in Node.js environments.');
+}
 
 const path = require("path");
 
@@ -52,7 +54,7 @@ describe("node_stream", function () {
           return;
         }
 
-        if (!request.headers["range"]) {
+        if (!request.headers.range) {
           const contentLength = stat.size;
           const stream = fs.createReadStream(filePath);
           response.writeHead(200, {
@@ -62,7 +64,7 @@ describe("node_stream", function () {
           });
           stream.pipe(response);
         } else {
-          const [start, end] = request.headers["range"].split("=")[1].split("-").map(x => {
+          const [start, end] = request.headers.range.split("=")[1].split("-").map(x => {
             return Number(x);
           });
           const stream = fs.createReadStream(filePath, {

+ 3 - 3
lib/test/unit/parser_spec.js

@@ -136,10 +136,10 @@ describe("parser", function () {
         const numbers = ["..", "-.", "+.", "-\r\n.", "+\r\n."];
 
         for (const number of numbers) {
-          const input = new _stream.StringStream(number);
-          const lexer = new _parser.Lexer(input);
+          const invalidInput = new _stream.StringStream(number);
+          const invalidLexer = new _parser.Lexer(invalidInput);
           expect(function () {
-            return lexer.getNumber();
+            return invalidLexer.getNumber();
           }).toThrowError(_util.FormatError, /^Invalid number:\s/);
         }
       });

+ 1 - 1
lib/test/unit/test_utils.js

@@ -44,7 +44,7 @@ class DOMFileReaderFactory {
       throw new Error(response.statusText);
     }
 
-    return new Uint8Array((await response.arrayBuffer()));
+    return new Uint8Array(await response.arrayBuffer());
   }
 
 }

+ 4 - 4
lib/test/unit/testreporter.js

@@ -21,7 +21,7 @@
  */
 "use strict";
 
-var TestReporter = function (browser, appPath) {
+var TestReporter = function (browser) {
   function send(action, json, cb) {
     var r = new XMLHttpRequest();
     r.open("POST", action, true);
@@ -39,7 +39,7 @@ var TestReporter = function (browser, appPath) {
       }
     };
 
-    json["browser"] = browser;
+    json.browser = browser;
     r.send(JSON.stringify(json));
   }
 
@@ -56,14 +56,14 @@ var TestReporter = function (browser, appPath) {
     };
 
     if (typeof error !== "undefined") {
-      message["error"] = error;
+      message.error = error;
     }
 
     send("/submit_task_results", message);
   }
 
   function sendQuitRequest() {
-    send("/tellMeToQuit?path=" + escape(appPath), {});
+    send(`/tellMeToQuit?browser=${escape(browser)}`, {});
   }
 
   this.now = function () {

+ 1 - 55
lib/test/unit/ui_utils_spec.js

@@ -228,7 +228,7 @@ describe("ui_utils", function () {
       eventBus.dispatch("test");
       expect(count).toEqual(2);
     });
-    it("should not, by default, re-dispatch to DOM", function (done) {
+    it("should not re-dispatch to DOM", function (done) {
       if (_is_node.isNodeJS) {
         pending("Document in not supported in Node.js.");
       }
@@ -252,60 +252,6 @@ describe("ui_utils", function () {
         done();
       });
     });
-    it("should re-dispatch to DOM", function (done) {
-      if (_is_node.isNodeJS) {
-        pending("Document in not supported in Node.js.");
-      }
-
-      const eventBus = new _ui_utils.EventBus({
-        dispatchToDOM: true
-      });
-      let count = 0;
-      eventBus.on("test", function (evt) {
-        expect(evt).toEqual(undefined);
-        count++;
-      });
-
-      function domEventListener(evt) {
-        expect(evt.detail).toEqual({});
-        count++;
-      }
-
-      document.addEventListener("test", domEventListener);
-      eventBus.dispatch("test");
-      Promise.resolve().then(() => {
-        expect(count).toEqual(2);
-        document.removeEventListener("test", domEventListener);
-        done();
-      });
-    });
-    it("should re-dispatch to DOM, with arguments (without internal listeners)", function (done) {
-      if (_is_node.isNodeJS) {
-        pending("Document in not supported in Node.js.");
-      }
-
-      const eventBus = new _ui_utils.EventBus({
-        dispatchToDOM: true
-      });
-      let count = 0;
-
-      function domEventListener(evt) {
-        expect(evt.detail).toEqual({
-          abc: 123
-        });
-        count++;
-      }
-
-      document.addEventListener("test", domEventListener);
-      eventBus.dispatch("test", {
-        abc: 123
-      });
-      Promise.resolve().then(() => {
-        expect(count).toEqual(1);
-        document.removeEventListener("test", domEventListener);
-        done();
-      });
-    });
   });
   describe("isValidRotation", function () {
     it("should reject non-integer angles", function () {

+ 1 - 1
lib/test/unit/unicode_spec.js

@@ -84,7 +84,7 @@ describe("unicode", function () {
       expect(NormalizedUnicodes["\u0675"]).toEqual("\u0627\u0674");
     });
     it("should not normalize standard characters", function () {
-      expect(NormalizedUnicodes["A"]).toEqual(undefined);
+      expect(NormalizedUnicodes.A).toEqual(undefined);
     });
   });
   describe("reverseIfRtl", function () {

+ 247 - 159
lib/web/app.js

@@ -74,6 +74,7 @@ const DEFAULT_SCALE_DELTA = 1.1;
 const DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000;
 const FORCE_PAGES_LOADED_TIMEOUT = 10000;
 const WHEEL_ZOOM_DISABLED_TIMEOUT = 1000;
+const ENABLE_PERMISSIONS_CLASS = "enablePermissions";
 const ViewOnLoad = {
   UNKNOWN: -1,
   PREVIOUS: 0,
@@ -122,6 +123,10 @@ class DefaultExternalServices {
     });
   }
 
+  static get isInAutomation() {
+    return (0, _pdf.shadow)(this, "isInAutomation", false);
+  }
+
 }
 
 exports.DefaultExternalServices = DefaultExternalServices;
@@ -187,7 +192,7 @@ const PDFViewerApplication = {
   },
 
   async _readPreferences() {
-    if (_app_options.AppOptions.get("disablePreferences") === true) {
+    if (_app_options.AppOptions.get("disablePreferences")) {
       return;
     }
 
@@ -216,40 +221,40 @@ const PDFViewerApplication = {
     const hashParams = (0, _ui_utils.parseQueryString)(hash),
           waitOn = [];
 
-    if ("disableworker" in hashParams && hashParams["disableworker"] === "true") {
+    if ("disableworker" in hashParams && hashParams.disableworker === "true") {
       waitOn.push(loadFakeWorker());
     }
 
     if ("disablerange" in hashParams) {
-      _app_options.AppOptions.set("disableRange", hashParams["disablerange"] === "true");
+      _app_options.AppOptions.set("disableRange", hashParams.disablerange === "true");
     }
 
     if ("disablestream" in hashParams) {
-      _app_options.AppOptions.set("disableStream", hashParams["disablestream"] === "true");
+      _app_options.AppOptions.set("disableStream", hashParams.disablestream === "true");
     }
 
     if ("disableautofetch" in hashParams) {
-      _app_options.AppOptions.set("disableAutoFetch", hashParams["disableautofetch"] === "true");
+      _app_options.AppOptions.set("disableAutoFetch", hashParams.disableautofetch === "true");
     }
 
     if ("disablefontface" in hashParams) {
-      _app_options.AppOptions.set("disableFontFace", hashParams["disablefontface"] === "true");
+      _app_options.AppOptions.set("disableFontFace", hashParams.disablefontface === "true");
     }
 
     if ("disablehistory" in hashParams) {
-      _app_options.AppOptions.set("disableHistory", hashParams["disablehistory"] === "true");
+      _app_options.AppOptions.set("disableHistory", hashParams.disablehistory === "true");
     }
 
     if ("webgl" in hashParams) {
-      _app_options.AppOptions.set("enableWebGL", hashParams["webgl"] === "true");
+      _app_options.AppOptions.set("enableWebGL", hashParams.webgl === "true");
     }
 
     if ("verbosity" in hashParams) {
-      _app_options.AppOptions.set("verbosity", hashParams["verbosity"] | 0);
+      _app_options.AppOptions.set("verbosity", hashParams.verbosity | 0);
     }
 
     if ("textlayer" in hashParams) {
-      switch (hashParams["textlayer"]) {
+      switch (hashParams.textlayer) {
         case "off":
           _app_options.AppOptions.set("textLayerMode", _ui_utils.TextLayerMode.DISABLE);
 
@@ -259,7 +264,7 @@ const PDFViewerApplication = {
         case "shadow":
         case "hover":
           const viewer = this.appConfig.viewerContainer;
-          viewer.classList.add("textLayer-" + hashParams["textlayer"]);
+          viewer.classList.add("textLayer-" + hashParams.textlayer);
           break;
       }
     }
@@ -267,12 +272,14 @@ const PDFViewerApplication = {
     if ("pdfbug" in hashParams) {
       _app_options.AppOptions.set("pdfBug", true);
 
-      const enabled = hashParams["pdfbug"].split(",");
+      _app_options.AppOptions.set("fontExtraProperties", true);
+
+      const enabled = hashParams.pdfbug.split(",");
       waitOn.push(loadAndEnablePDFBug(enabled));
     }
 
     if ("locale" in hashParams) {
-      _app_options.AppOptions.set("locale", hashParams["locale"]);
+      _app_options.AppOptions.set("locale", hashParams.locale);
     }
 
     return Promise.all(waitOn).catch(reason => {
@@ -290,11 +297,11 @@ const PDFViewerApplication = {
 
   async _initializeViewerComponents() {
     const appConfig = this.appConfig;
-    this.overlayManager = new _overlay_manager.OverlayManager();
     const eventBus = appConfig.eventBus || new _ui_utils.EventBus({
-      dispatchToDOM: _app_options.AppOptions.get("eventBusDispatchToDOM")
+      isInAutomation: this.externalServices.isInAutomation
     });
     this.eventBus = eventBus;
+    this.overlayManager = new _overlay_manager.OverlayManager();
     const pdfRenderingQueue = new _pdf_rendering_queue.PDFRenderingQueue();
     pdfRenderingQueue.onIdle = this.cleanup.bind(this);
     this.pdfRenderingQueue = pdfRenderingQueue;
@@ -449,14 +456,14 @@ const PDFViewerApplication = {
     return this.pdfDocument ? this.pdfDocument.numPages : 0;
   },
 
-  set page(val) {
-    this.pdfViewer.currentPageNumber = val;
-  },
-
   get page() {
     return this.pdfViewer.currentPageNumber;
   },
 
+  set page(val) {
+    this.pdfViewer.currentPageNumber = val;
+  },
+
   get printing() {
     return !!this.printService;
   },
@@ -541,6 +548,7 @@ const PDFViewerApplication = {
       this.pdfDocumentProperties.setDocument(null);
     }
 
+    webViewerResetPermissions();
     this.store = null;
     this.isInitialViewSet = false;
     this.downloadComplete = false;
@@ -655,7 +663,7 @@ const PDFViewerApplication = {
         this.error(msg, {
           message
         });
-        throw new Error(msg);
+        throw exception;
       });
     });
   },
@@ -781,7 +789,7 @@ const PDFViewerApplication = {
 
     if (percent > this.loadingBar.percent || isNaN(percent)) {
       this.loadingBar.percent = percent;
-      const disableAutoFetch = this.pdfDocument ? this.pdfDocument.loadingParams["disableAutoFetch"] : _app_options.AppOptions.get("disableAutoFetch");
+      const disableAutoFetch = this.pdfDocument ? this.pdfDocument.loadingParams.disableAutoFetch : _app_options.AppOptions.get("disableAutoFetch");
 
       if (disableAutoFetch && percent) {
         if (this.disableAutoFetchLoadingBarTimeout) {
@@ -814,7 +822,6 @@ const PDFViewerApplication = {
     const openActionPromise = pdfDocument.getOpenAction().catch(function () {});
     this.toolbar.setPagesCount(pdfDocument.numPages, false);
     this.secondaryToolbar.setPagesCount(pdfDocument.numPages);
-    const store = this.store = new _view_history.ViewHistory(pdfDocument.fingerprint);
     let baseDocumentUrl;
     baseDocumentUrl = null;
     this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl);
@@ -828,19 +835,21 @@ const PDFViewerApplication = {
     } = pdfViewer;
     const pdfThumbnailViewer = this.pdfThumbnailViewer;
     pdfThumbnailViewer.setDocument(pdfDocument);
+    const storedPromise = (this.store = new _view_history.ViewHistory(pdfDocument.fingerprint)).getMultiple({
+      page: null,
+      zoom: _ui_utils.DEFAULT_SCALE_VALUE,
+      scrollLeft: "0",
+      scrollTop: "0",
+      rotation: null,
+      sidebarView: _pdf_sidebar.SidebarView.UNKNOWN,
+      scrollMode: _ui_utils.ScrollMode.UNKNOWN,
+      spreadMode: _ui_utils.SpreadMode.UNKNOWN
+    }).catch(() => {
+      return Object.create(null);
+    });
     firstPagePromise.then(pdfPage => {
       this.loadingBar.setWidth(this.appConfig.viewerContainer);
-      const storePromise = store.getMultiple({
-        page: null,
-        zoom: _ui_utils.DEFAULT_SCALE_VALUE,
-        scrollLeft: "0",
-        scrollTop: "0",
-        rotation: null,
-        sidebarView: _pdf_sidebar.SidebarView.UNKNOWN,
-        scrollMode: _ui_utils.ScrollMode.UNKNOWN,
-        spreadMode: _ui_utils.SpreadMode.UNKNOWN
-      }).catch(() => {});
-      Promise.all([_ui_utils.animationStarted, storePromise, pageLayoutPromise, pageModePromise, openActionPromise]).then(async ([timeStamp, values = {}, pageLayout, pageMode, openAction]) => {
+      Promise.all([_ui_utils.animationStarted, storedPromise, pageLayoutPromise, pageModePromise, openActionPromise]).then(async ([timeStamp, stored, pageLayout, pageMode, openAction]) => {
         const viewOnLoad = _app_options.AppOptions.get("viewOnLoad");
 
         this._initializePdfHistory({
@@ -862,20 +871,20 @@ const PDFViewerApplication = {
 
         let spreadMode = _app_options.AppOptions.get("spreadModeOnLoad");
 
-        if (values.page && viewOnLoad !== ViewOnLoad.INITIAL) {
-          hash = `page=${values.page}&zoom=${zoom || values.zoom},` + `${values.scrollLeft},${values.scrollTop}`;
-          rotation = parseInt(values.rotation, 10);
+        if (stored.page && viewOnLoad !== ViewOnLoad.INITIAL) {
+          hash = `page=${stored.page}&zoom=${zoom || stored.zoom},` + `${stored.scrollLeft},${stored.scrollTop}`;
+          rotation = parseInt(stored.rotation, 10);
 
           if (sidebarView === _pdf_sidebar.SidebarView.UNKNOWN) {
-            sidebarView = values.sidebarView | 0;
+            sidebarView = stored.sidebarView | 0;
           }
 
           if (scrollMode === _ui_utils.ScrollMode.UNKNOWN) {
-            scrollMode = values.scrollMode | 0;
+            scrollMode = stored.scrollMode | 0;
           }
 
           if (spreadMode === _ui_utils.SpreadMode.UNKNOWN) {
-            spreadMode = values.spreadMode | 0;
+            spreadMode = stored.spreadMode | 0;
           }
         }
 
@@ -901,6 +910,8 @@ const PDFViewerApplication = {
           pdfViewer.focus();
         }
 
+        this._initializePermissions(pdfDocument);
+
         await Promise.race([pagesPromise, new Promise(resolve => {
           setTimeout(resolve, FORCE_PAGES_LOADED_TIMEOUT);
         })]);
@@ -922,162 +933,194 @@ const PDFViewerApplication = {
         pdfViewer.update();
       });
     });
-    pdfDocument.getPageLabels().then(labels => {
-      if (!labels || _app_options.AppOptions.get("disablePageLabels")) {
-        return;
-      }
-
-      const numLabels = labels.length;
+    pagesPromise.then(() => {
+      this._initializeAutoPrint(pdfDocument, openActionPromise);
+    });
+    onePageRendered.then(() => {
+      pdfDocument.getOutline().then(outline => {
+        this.pdfOutlineViewer.render({
+          outline
+        });
+      });
+      pdfDocument.getAttachments().then(attachments => {
+        this.pdfAttachmentViewer.render({
+          attachments
+        });
+      });
+    });
 
-      if (numLabels !== this.pagesCount) {
-        console.error("The number of Page Labels does not match " + "the number of pages in the document.");
-        return;
-      }
+    this._initializePageLabels(pdfDocument);
 
-      let i = 0;
+    this._initializeMetadata(pdfDocument);
+  },
 
-      while (i < numLabels && labels[i] === (i + 1).toString()) {
-        i++;
-      }
+  async _initializeAutoPrint(pdfDocument, openActionPromise) {
+    const [openAction, javaScript] = await Promise.all([openActionPromise, pdfDocument.getJavaScript()]);
 
-      if (i === numLabels) {
-        return;
-      }
+    if (pdfDocument !== this.pdfDocument) {
+      return;
+    }
 
-      pdfViewer.setPageLabels(labels);
-      pdfThumbnailViewer.setPageLabels(labels);
-      this.toolbar.setPagesCount(pdfDocument.numPages, true);
-      this.toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);
-    });
-    pagesPromise.then(async () => {
-      const [openAction, javaScript] = await Promise.all([openActionPromise, pdfDocument.getJavaScript()]);
-      let triggerAutoPrint = false;
+    let triggerAutoPrint = false;
 
-      if (openAction && openAction.action === "Print") {
-        triggerAutoPrint = true;
-      }
+    if (openAction && openAction.action === "Print") {
+      triggerAutoPrint = true;
+    }
 
-      if (javaScript) {
-        javaScript.some(js => {
-          if (!js) {
-            return false;
-          }
+    if (javaScript) {
+      javaScript.some(js => {
+        if (!js) {
+          return false;
+        }
 
-          console.warn("Warning: JavaScript is not supported");
-          this.fallback(_pdf.UNSUPPORTED_FEATURES.javaScript);
-          return true;
-        });
+        console.warn("Warning: JavaScript is not supported");
+        this.fallback(_pdf.UNSUPPORTED_FEATURES.javaScript);
+        return true;
+      });
 
-        if (!triggerAutoPrint) {
-          for (const js of javaScript) {
-            if (js && _ui_utils.AutoPrintRegExp.test(js)) {
-              triggerAutoPrint = true;
-              break;
-            }
+      if (!triggerAutoPrint) {
+        for (const js of javaScript) {
+          if (js && _ui_utils.AutoPrintRegExp.test(js)) {
+            triggerAutoPrint = true;
+            break;
           }
         }
       }
+    }
 
-      if (!this.supportsPrinting) {
-        return;
-      }
+    if (!this.supportsPrinting) {
+      return;
+    }
 
-      if (triggerAutoPrint) {
-        setTimeout(function () {
-          window.print();
-        });
-      }
-    });
-    onePageRendered.then(() => {
-      pdfDocument.getOutline().then(outline => {
-        this.pdfOutlineViewer.render({
-          outline
-        });
-      });
-      pdfDocument.getAttachments().then(attachments => {
-        this.pdfAttachmentViewer.render({
-          attachments
-        });
+    if (triggerAutoPrint) {
+      setTimeout(function () {
+        window.print();
       });
-    });
-    pdfDocument.getMetadata().then(({
+    }
+  },
+
+  async _initializeMetadata(pdfDocument) {
+    const {
       info,
       metadata,
       contentDispositionFilename
-    }) => {
-      this.documentInfo = info;
-      this.metadata = metadata;
-      this.contentDispositionFilename = contentDispositionFilename;
-      console.log("PDF " + pdfDocument.fingerprint + " [" + info.PDFFormatVersion + " " + (info.Producer || "-").trim() + " / " + (info.Creator || "-").trim() + "]" + " (PDF.js: " + (_pdf.version || "-") + (_app_options.AppOptions.get("enableWebGL") ? " [WebGL]" : "") + ")");
-      let pdfTitle;
-      const infoTitle = info && info["Title"];
-
-      if (infoTitle) {
-        pdfTitle = infoTitle;
-      }
-
-      const metadataTitle = metadata && metadata.get("dc:title");
+    } = await pdfDocument.getMetadata();
 
-      if (metadataTitle) {
-        if (metadataTitle !== "Untitled" && !/[\uFFF0-\uFFFF]/g.test(metadataTitle)) {
-          pdfTitle = metadataTitle;
-        }
-      }
+    if (pdfDocument !== this.pdfDocument) {
+      return;
+    }
 
-      if (pdfTitle) {
-        this.setTitle(`${pdfTitle} - ${contentDispositionFilename || document.title}`);
-      } else if (contentDispositionFilename) {
-        this.setTitle(contentDispositionFilename);
-      }
+    this.documentInfo = info;
+    this.metadata = metadata;
+    this.contentDispositionFilename = contentDispositionFilename;
+    console.log(`PDF ${pdfDocument.fingerprint} [${info.PDFFormatVersion} ` + `${(info.Producer || "-").trim()} / ${(info.Creator || "-").trim()}] ` + `(PDF.js: ${_pdf.version || "-"}` + `${this.pdfViewer.enableWebGL ? " [WebGL]" : ""})`);
+    let pdfTitle;
+    const infoTitle = info && info.Title;
 
-      if (info.IsAcroFormPresent) {
-        console.warn("Warning: AcroForm/XFA is not supported");
-        this.fallback(_pdf.UNSUPPORTED_FEATURES.forms);
-      }
+    if (infoTitle) {
+      pdfTitle = infoTitle;
+    }
 
-      let versionId = "other";
-      const KNOWN_VERSIONS = ["1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "2.0", "2.1", "2.2", "2.3"];
+    const metadataTitle = metadata && metadata.get("dc:title");
 
-      if (KNOWN_VERSIONS.includes(info.PDFFormatVersion)) {
-        versionId = `v${info.PDFFormatVersion.replace(".", "_")}`;
+    if (metadataTitle) {
+      if (metadataTitle !== "Untitled" && !/[\uFFF0-\uFFFF]/g.test(metadataTitle)) {
+        pdfTitle = metadataTitle;
       }
+    }
 
-      let generatorId = "other";
-      const KNOWN_GENERATORS = ["acrobat distiller", "acrobat pdfwriter", "adobe livecycle", "adobe pdf library", "adobe photoshop", "ghostscript", "tcpdf", "cairo", "dvipdfm", "dvips", "pdftex", "pdfkit", "itext", "prince", "quarkxpress", "mac os x", "microsoft", "openoffice", "oracle", "luradocument", "pdf-xchange", "antenna house", "aspose.cells", "fpdf"];
+    if (pdfTitle) {
+      this.setTitle(`${pdfTitle} - ${contentDispositionFilename || document.title}`);
+    } else if (contentDispositionFilename) {
+      this.setTitle(contentDispositionFilename);
+    }
 
-      if (info.Producer) {
-        const producer = info.Producer.toLowerCase();
-        KNOWN_GENERATORS.some(function (generator) {
-          if (!producer.includes(generator)) {
-            return false;
-          }
+    if (info.IsAcroFormPresent) {
+      console.warn("Warning: AcroForm/XFA is not supported");
+      this.fallback(_pdf.UNSUPPORTED_FEATURES.forms);
+    }
 
-          generatorId = generator.replace(/[ .\-]/g, "_");
-          return true;
-        });
-      }
+    let versionId = "other";
+    const KNOWN_VERSIONS = ["1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "2.0", "2.1", "2.2", "2.3"];
 
-      let formType = null;
+    if (KNOWN_VERSIONS.includes(info.PDFFormatVersion)) {
+      versionId = `v${info.PDFFormatVersion.replace(".", "_")}`;
+    }
 
-      if (info.IsAcroFormPresent) {
-        formType = info.IsXFAPresent ? "xfa" : "acroform";
-      }
+    let generatorId = "other";
+    const KNOWN_GENERATORS = ["acrobat distiller", "acrobat pdfwriter", "adobe livecycle", "adobe pdf library", "adobe photoshop", "ghostscript", "tcpdf", "cairo", "dvipdfm", "dvips", "pdftex", "pdfkit", "itext", "prince", "quarkxpress", "mac os x", "microsoft", "openoffice", "oracle", "luradocument", "pdf-xchange", "antenna house", "aspose.cells", "fpdf"];
 
-      this.externalServices.reportTelemetry({
-        type: "documentInfo",
-        version: versionId,
-        generator: generatorId,
-        formType
+    if (info.Producer) {
+      const producer = info.Producer.toLowerCase();
+      KNOWN_GENERATORS.some(function (generator) {
+        if (!producer.includes(generator)) {
+          return false;
+        }
+
+        generatorId = generator.replace(/[ .\-]/g, "_");
+        return true;
       });
+    }
+
+    let formType = null;
+
+    if (info.IsAcroFormPresent) {
+      formType = info.IsXFAPresent ? "xfa" : "acroform";
+    }
+
+    this.externalServices.reportTelemetry({
+      type: "documentInfo",
+      version: versionId,
+      generator: generatorId,
+      formType
     });
   },
 
+  async _initializePageLabels(pdfDocument) {
+    const labels = await pdfDocument.getPageLabels();
+
+    if (pdfDocument !== this.pdfDocument) {
+      return;
+    }
+
+    if (!labels || _app_options.AppOptions.get("disablePageLabels")) {
+      return;
+    }
+
+    const numLabels = labels.length;
+
+    if (numLabels !== this.pagesCount) {
+      console.error("The number of Page Labels does not match the number of pages in the document.");
+      return;
+    }
+
+    let i = 0;
+
+    while (i < numLabels && labels[i] === (i + 1).toString()) {
+      i++;
+    }
+
+    if (i === numLabels) {
+      return;
+    }
+
+    const {
+      pdfViewer,
+      pdfThumbnailViewer,
+      toolbar
+    } = this;
+    pdfViewer.setPageLabels(labels);
+    pdfThumbnailViewer.setPageLabels(labels);
+    toolbar.setPagesCount(numLabels, true);
+    toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);
+  },
+
   _initializePdfHistory({
     fingerprint,
     viewOnLoad,
     initialDest = null
   }) {
-    if (_app_options.AppOptions.get("disableHistory") || this.isViewerEmbedded) {
+    if (this.isViewerEmbedded || _app_options.AppOptions.get("disableHistory")) {
       return;
     }
 
@@ -1101,6 +1144,22 @@ const PDFViewerApplication = {
     }
   },
 
+  async _initializePermissions(pdfDocument) {
+    const permissions = await pdfDocument.getPermissions();
+
+    if (pdfDocument !== this.pdfDocument) {
+      return;
+    }
+
+    if (!permissions || !_app_options.AppOptions.get("enablePermissions")) {
+      return;
+    }
+
+    if (!permissions.includes(_pdf.PermissionFlag.COPY)) {
+      this.appConfig.viewerContainer.classList.add(ENABLE_PERMISSIONS_CLASS);
+    }
+  },
+
   setInitialView(storedHash, {
     rotation,
     sidebarView,
@@ -1439,7 +1498,9 @@ const PDFViewerApplication = {
       _boundEvents
     } = this;
     window.removeEventListener("visibilitychange", webViewerVisibilityChange);
-    window.removeEventListener("wheel", webViewerWheel);
+    window.removeEventListener("wheel", webViewerWheel, {
+      passive: false
+    });
     window.removeEventListener("click", webViewerClick);
     window.removeEventListener("keydown", webViewerKeyDown);
     window.removeEventListener("resize", _boundEvents.windowResize);
@@ -1621,6 +1682,18 @@ let webViewerOpenFileViaURL;
   };
 }
 
+function webViewerResetPermissions() {
+  const {
+    appConfig
+  } = PDFViewerApplication;
+
+  if (!appConfig) {
+    return;
+  }
+
+  appConfig.viewerContainer.classList.remove(ENABLE_PERMISSIONS_CLASS);
+}
+
 function webViewerPageRendered(evt) {
   const pageNumber = evt.pageNumber;
   const pageIndex = pageNumber - 1;
@@ -1813,7 +1886,7 @@ let webViewerFileInputChange, webViewerOpenFile;
 
     const file = evt.fileInput.files[0];
 
-    if (URL.createObjectURL && !_app_options.AppOptions.get("disableCreateObjectURL")) {
+    if (!_app_options.AppOptions.get("disableCreateObjectURL")) {
       let url = URL.createObjectURL(file);
 
       if (file.name) {
@@ -2172,12 +2245,27 @@ function webViewerKeyDown(evt) {
     }
   }
 
+  const {
+    eventBus
+  } = PDFViewerApplication;
+
   if (cmd === 1 || cmd === 8) {
     switch (evt.keyCode) {
       case 83:
-        PDFViewerApplication.download();
+        eventBus.dispatch("download", {
+          source: window
+        });
         handled = true;
         break;
+
+      case 79:
+        {
+          eventBus.dispatch("openfile", {
+            source: window
+          });
+          handled = true;
+        }
+        break;
     }
   }
 

+ 16 - 10
lib/web/app_options.js

@@ -26,8 +26,6 @@ Object.defineProperty(exports, "__esModule", {
 });
 exports.OptionKind = exports.AppOptions = void 0;
 
-var _pdf = require("../pdf");
-
 var _viewer_compatibility = require("./viewer_compatibility.js");
 
 const OptionKind = {
@@ -50,6 +48,11 @@ const defaultOptions = {
     value: "",
     kind: OptionKind.VIEWER + OptionKind.PREFERENCE
   },
+  disableCreateObjectURL: {
+    value: false,
+    compatibility: _viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL,
+    kind: OptionKind.VIEWER
+  },
   disableHistory: {
     value: false,
     kind: OptionKind.VIEWER
@@ -58,15 +61,15 @@ const defaultOptions = {
     value: false,
     kind: OptionKind.VIEWER + OptionKind.PREFERENCE
   },
-  enablePrintAutoRotate: {
+  enablePermissions: {
     value: false,
     kind: OptionKind.VIEWER + OptionKind.PREFERENCE
   },
-  enableWebGL: {
+  enablePrintAutoRotate: {
     value: false,
     kind: OptionKind.VIEWER + OptionKind.PREFERENCE
   },
-  eventBusDispatchToDOM: {
+  enableWebGL: {
     value: false,
     kind: OptionKind.VIEWER + OptionKind.PREFERENCE
   },
@@ -99,6 +102,10 @@ const defaultOptions = {
     value: false,
     kind: OptionKind.VIEWER + OptionKind.PREFERENCE
   },
+  printResolution: {
+    value: 150,
+    kind: OptionKind.VIEWER
+  },
   renderer: {
     value: "canvas",
     kind: OptionKind.VIEWER + OptionKind.PREFERENCE
@@ -143,11 +150,6 @@ const defaultOptions = {
     value: false,
     kind: OptionKind.API + OptionKind.PREFERENCE
   },
-  disableCreateObjectURL: {
-    value: false,
-    compatibility: _pdf.apiCompatibilityParams.disableCreateObjectURL,
-    kind: OptionKind.API
-  },
   disableFontFace: {
     value: false,
     kind: OptionKind.API + OptionKind.PREFERENCE
@@ -164,6 +166,10 @@ const defaultOptions = {
     value: "",
     kind: OptionKind.API
   },
+  fontExtraProperties: {
+    value: false,
+    kind: OptionKind.API
+  },
   isEvalSupported: {
     value: true,
     kind: OptionKind.API

+ 14 - 6
lib/web/base_viewer.js

@@ -101,7 +101,7 @@ class BaseViewer {
     this._name = this.constructor.name;
     this.container = options.container;
     this.viewer = options.viewer || options.container.firstElementChild;
-    this.eventBus = options.eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this.eventBus = options.eventBus;
     this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService();
     this.downloadManager = options.downloadManager || null;
     this.findController = options.findController || null;
@@ -308,8 +308,16 @@ class BaseViewer {
     return this.pdfDocument ? this._pagesCapability.promise : null;
   }
 
-  get _setDocumentViewerElement() {
-    throw new Error("Not implemented: _setDocumentViewerElement");
+  get _viewerElement() {
+    throw new Error("Not implemented: _viewerElement");
+  }
+
+  _onePageRenderedOrForceFetch() {
+    if (!this.container.offsetParent || this._getVisiblePages().views.length === 0) {
+      return Promise.resolve();
+    }
+
+    return this._onePageRenderedCapability.promise;
   }
 
   setDocument(pdfDocument) {
@@ -376,7 +384,7 @@ class BaseViewer {
 
       for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {
         const pageView = new _pdf_page_view.PDFPageView({
-          container: this._setDocumentViewerElement,
+          container: this._viewerElement,
           eventBus: this.eventBus,
           id: pageNum,
           scale,
@@ -408,12 +416,12 @@ class BaseViewer {
         this._updateSpreadMode();
       }
 
-      this._onePageRenderedCapability.promise.then(() => {
+      this._onePageRenderedOrForceFetch().then(() => {
         if (this.findController) {
           this.findController.setDocument(pdfDocument);
         }
 
-        if (pdfDocument.loadingParams["disableAutoFetch"] || pagesCount > 7500) {
+        if (pdfDocument.loadingParams.disableAutoFetch || pagesCount > 7500) {
           this._pagesCapability.resolve();
 
           return;

+ 3 - 1
lib/web/download_manager.js

@@ -28,8 +28,10 @@ exports.DownloadManager = void 0;
 
 var _pdf = require("../pdf");
 
+var _viewer_compatibility = require("./viewer_compatibility.js");
+
 ;
-const DISABLE_CREATE_OBJECT_URL = _pdf.apiCompatibilityParams.disableCreateObjectURL || false;
+const DISABLE_CREATE_OBJECT_URL = _viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL || false;
 
 function download(blobUrl, filename) {
   const a = document.createElement("a");

+ 1 - 1
lib/web/firefox_print_service.js

@@ -108,7 +108,7 @@ FirefoxPrintService.prototype = {
 _app.PDFPrintServiceFactory.instance = {
   get supportsPrinting() {
     const canvas = document.createElement("canvas");
-    const value = "mozPrintCallback" in canvas;
+    const value = ("mozPrintCallback" in canvas);
     return (0, _pdf.shadow)(this, "supportsPrinting", value);
   },
 

+ 16 - 4
lib/web/firefoxcom.js

@@ -28,10 +28,10 @@ exports.FirefoxCom = exports.DownloadManager = void 0;
 
 require("../extensions/firefox/tools/l10n.js");
 
-var _pdf = require("../pdf");
-
 var _app = require("./app.js");
 
+var _pdf = require("../pdf");
+
 var _preferences = require("./preferences.js");
 
 var _ui_utils = require("./ui_utils.js");
@@ -99,13 +99,20 @@ class DownloadManager {
   }
 
   downloadData(data, filename, contentType) {
-    const blobUrl = (0, _pdf.createObjectURL)(data, contentType);
+    const blobUrl = URL.createObjectURL(new Blob([data], {
+      type: contentType
+    }));
+
+    const onResponse = err => {
+      URL.revokeObjectURL(blobUrl);
+    };
+
     FirefoxCom.request("download", {
       blobUrl,
       originalUrl: blobUrl,
       filename,
       isAttachment: true
-    });
+    }, onResponse);
   }
 
   download(blob, url, filename) {
@@ -348,6 +355,11 @@ class FirefoxExternalServices extends _app.DefaultExternalServices {
     return (0, _pdf.shadow)(this, "supportedMouseWheelZoomModifierKeys", support);
   }
 
+  static get isInAutomation() {
+    const isInAutomation = FirefoxCom.requestSync("isInAutomation");
+    return (0, _pdf.shadow)(this, "isInAutomation", isInAutomation);
+  }
+
 }
 
 _app.PDFViewerApplication.externalServices = FirefoxExternalServices;

+ 14 - 7
lib/web/pdf_attachment_viewer.js

@@ -61,20 +61,27 @@ class PDFAttachmentViewer {
   }
 
   _bindPdfLink(button, content, filename) {
-    if (this.downloadManager.disableCreateObjectURL) {
-      throw new Error('bindPdfLink: Unsupported "disableCreateObjectURL" value.');
-    }
-
     let blobUrl;
 
-    button.onclick = function () {
+    button.onclick = () => {
       if (!blobUrl) {
-        blobUrl = (0, _pdf.createObjectURL)(content, "application/pdf");
+        blobUrl = URL.createObjectURL(new Blob([content], {
+          type: "application/pdf"
+        }));
       }
 
       let viewerUrl;
       viewerUrl = "?file=" + encodeURIComponent(blobUrl + "#" + filename);
-      window.open(viewerUrl);
+
+      try {
+        window.open(viewerUrl);
+      } catch (ex) {
+        console.error(`_bindPdfLink: ${ex}`);
+        URL.revokeObjectURL(blobUrl);
+        blobUrl = null;
+        this.downloadManager.downloadData(content, filename, "application/pdf");
+      }
+
       return false;
     };
   }

+ 11 - 16
lib/web/pdf_document_properties.js

@@ -62,21 +62,16 @@ class PDFDocumentProperties {
 
     this._reset();
 
-    if (closeButton) {
-      closeButton.addEventListener("click", this.close.bind(this));
-    }
-
+    closeButton.addEventListener("click", this.close.bind(this));
     this.overlayManager.register(this.overlayName, this.container, this.close.bind(this));
 
-    if (eventBus) {
-      eventBus._on("pagechanging", evt => {
-        this._currentPageNumber = evt.pageNumber;
-      });
+    eventBus._on("pagechanging", evt => {
+      this._currentPageNumber = evt.pageNumber;
+    });
 
-      eventBus._on("rotationchanging", evt => {
-        this._pagesRotation = evt.pagesRotation;
-      });
-    }
+    eventBus._on("rotationchanging", evt => {
+      this._pagesRotation = evt.pagesRotation;
+    });
 
     this._isNonMetricLocale = true;
     l10n.getLanguage().then(locale => {
@@ -98,7 +93,7 @@ class PDFDocumentProperties {
       const currentPageNumber = this._currentPageNumber;
       const pagesRotation = this._pagesRotation;
 
-      if (this.fieldData && currentPageNumber === this.fieldData["_currentPageNumber"] && pagesRotation === this.fieldData["_pagesRotation"]) {
+      if (this.fieldData && currentPageNumber === this.fieldData._currentPageNumber && pagesRotation === this.fieldData._pagesRotation) {
         this._updateUI();
 
         return;
@@ -109,7 +104,7 @@ class PDFDocumentProperties {
         metadata,
         contentDispositionFilename
       }) => {
-        return Promise.all([info, metadata, contentDispositionFilename || (0, _ui_utils.getPDFFileNameFromURL)(this.url || ""), this._parseFileSize(this.maybeFileSize), this._parseDate(info.CreationDate), this._parseDate(info.ModDate), this.pdfDocument.getPage(currentPageNumber).then(pdfPage => {
+        return Promise.all([info, metadata, contentDispositionFilename || (0, _ui_utils.getPDFFileNameFromURL)(this.url), this._parseFileSize(this.maybeFileSize), this._parseDate(info.CreationDate), this._parseDate(info.ModDate), this.pdfDocument.getPage(currentPageNumber).then(pdfPage => {
           return this._parsePageSize((0, _ui_utils.getPageSizeInches)(pdfPage), pagesRotation);
         }), this._parseLinearization(info.IsLinearized)]);
       }).then(([info, metadata, fileName, fileSize, creationDate, modDate, pageSize, isLinearized]) => {
@@ -141,12 +136,12 @@ class PDFDocumentProperties {
         this.maybeFileSize = length;
         return this._parseFileSize(length);
       }).then(fileSize => {
-        if (fileSize === this.fieldData["fileSize"]) {
+        if (fileSize === this.fieldData.fileSize) {
           return;
         }
 
         const data = Object.assign(Object.create(null), this.fieldData);
-        data["fileSize"] = fileSize;
+        data.fileSize = fileSize;
         freezeFieldData(data);
 
         this._updateUI();

+ 3 - 3
lib/web/pdf_find_bar.js

@@ -26,10 +26,10 @@ Object.defineProperty(exports, "__esModule", {
 });
 exports.PDFFindBar = void 0;
 
-var _ui_utils = require("./ui_utils.js");
-
 var _pdf_find_controller = require("./pdf_find_controller.js");
 
+var _ui_utils = require("./ui_utils.js");
+
 const MATCHES_COUNT_LIMIT = 1000;
 
 class PDFFindBar {
@@ -45,7 +45,7 @@ class PDFFindBar {
     this.findResultsCount = options.findResultsCount || null;
     this.findPreviousButton = options.findPreviousButton || null;
     this.findNextButton = options.findNextButton || null;
-    this.eventBus = eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this.eventBus = eventBus;
     this.l10n = l10n;
     this.toggleButton.addEventListener("click", () => {
       this.toggle();

+ 3 - 3
lib/web/pdf_find_controller.js

@@ -26,12 +26,12 @@ Object.defineProperty(exports, "__esModule", {
 });
 exports.PDFFindController = exports.FindState = void 0;
 
-var _ui_utils = require("./ui_utils.js");
-
 var _pdf = require("../pdf");
 
 var _pdf_find_utils = require("./pdf_find_utils.js");
 
+var _ui_utils = require("./ui_utils.js");
+
 const FindState = {
   FOUND: 0,
   NOT_FOUND: 1,
@@ -74,7 +74,7 @@ class PDFFindController {
     eventBus
   }) {
     this._linkService = linkService;
-    this._eventBus = eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this._eventBus = eventBus;
 
     this._reset();
 

+ 7 - 5
lib/web/pdf_history.js

@@ -44,7 +44,7 @@ class PDFHistory {
     eventBus
   }) {
     this.linkService = linkService;
-    this.eventBus = eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this.eventBus = eventBus;
     this._initialized = false;
     this._fingerprint = "";
     this.reset();
@@ -103,7 +103,7 @@ class PDFHistory {
         hash,
         page,
         rotation
-      } = this._parseCurrentHash();
+      } = this._parseCurrentHash(true);
 
       if (!hash || reInitialized || resetHistory) {
         this._pushOrReplaceState(null, true);
@@ -381,11 +381,13 @@ class PDFHistory {
     this._numPositionUpdates = 0;
   }
 
-  _parseCurrentHash() {
+  _parseCurrentHash(checkNameddest = false) {
     const hash = unescape(getCurrentHash()).substring(1);
-    let page = (0, _ui_utils.parseQueryString)(hash).page | 0;
+    const params = (0, _ui_utils.parseQueryString)(hash);
+    const nameddest = params.nameddest || "";
+    let page = params.page | 0;
 
-    if (!(Number.isInteger(page) && page > 0 && page <= this.linkService.pagesCount)) {
+    if (!(Number.isInteger(page) && page > 0 && page <= this.linkService.pagesCount) || checkNameddest && nameddest.length > 0) {
       page = null;
     }
 

+ 7 - 8
lib/web/pdf_link_service.js

@@ -36,7 +36,7 @@ class PDFLinkService {
     externalLinkEnabled = true,
     ignoreDestinationZoom = false
   } = {}) {
-    this.eventBus = eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this.eventBus = eventBus;
     this.externalLinkTarget = externalLinkTarget;
     this.externalLinkRel = externalLinkRel;
     this.externalLinkEnabled = externalLinkEnabled;
@@ -184,16 +184,11 @@ class PDFLinkService {
       if ("search" in params) {
         this.eventBus.dispatch("findfromurlhash", {
           source: this,
-          query: params["search"].replace(/"/g, ""),
-          phraseSearch: params["phrase"] === "true"
+          query: params.search.replace(/"/g, ""),
+          phraseSearch: params.phrase === "true"
         });
       }
 
-      if ("nameddest" in params) {
-        this.navigateTo(params.nameddest);
-        return;
-      }
-
       if ("page" in params) {
         pageNumber = params.page | 0 || 1;
       }
@@ -246,6 +241,10 @@ class PDFLinkService {
           mode: params.pagemode
         });
       }
+
+      if ("nameddest" in params) {
+        this.navigateTo(params.nameddest);
+      }
     } else {
       dest = unescape(hash);
 

+ 1 - 1
lib/web/pdf_page_view.js

@@ -54,7 +54,7 @@ class PDFPageView {
     this.renderInteractiveForms = options.renderInteractiveForms || false;
     this.useOnlyCssZoom = options.useOnlyCssZoom || false;
     this.maxCanvasPixels = options.maxCanvasPixels || MAX_CANVAS_PIXELS;
-    this.eventBus = options.eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this.eventBus = options.eventBus;
     this.renderingQueue = options.renderingQueue;
     this.textLayerFactory = options.textLayerFactory;
     this.annotationLayerFactory = options.annotationLayerFactory;

+ 6 - 2
lib/web/pdf_presentation_mode.js

@@ -366,7 +366,9 @@ class PDFPresentationMode {
     this.touchSwipeBind = this._touchSwipe.bind(this);
     window.addEventListener("mousemove", this.showControlsBind);
     window.addEventListener("mousedown", this.mouseDownBind);
-    window.addEventListener("wheel", this.mouseWheelBind);
+    window.addEventListener("wheel", this.mouseWheelBind, {
+      passive: false
+    });
     window.addEventListener("keydown", this.resetMouseScrollStateBind);
     window.addEventListener("contextmenu", this.contextMenuBind);
     window.addEventListener("touchstart", this.touchSwipeBind);
@@ -377,7 +379,9 @@ class PDFPresentationMode {
   _removeWindowListeners() {
     window.removeEventListener("mousemove", this.showControlsBind);
     window.removeEventListener("mousedown", this.mouseDownBind);
-    window.removeEventListener("wheel", this.mouseWheelBind);
+    window.removeEventListener("wheel", this.mouseWheelBind, {
+      passive: false
+    });
     window.removeEventListener("keydown", this.resetMouseScrollStateBind);
     window.removeEventListener("contextmenu", this.contextMenuBind);
     window.removeEventListener("touchstart", this.touchSwipeBind);

+ 1 - 1
lib/web/pdf_print_service.js

@@ -72,7 +72,7 @@ function PDFPrintService(pdfDocument, pagesOverview, printContainer, l10n) {
   this.pagesOverview = pagesOverview;
   this.printContainer = printContainer;
   this.l10n = l10n || _ui_utils.NullL10n;
-  this.disableCreateObjectURL = pdfDocument.loadingParams["disableCreateObjectURL"];
+  this.disableCreateObjectURL = _app_options.AppOptions.get("disableCreateObjectURL");
   this.currentPage = -1;
   this.scratchCanvas = document.createElement("canvas");
 }

+ 2 - 2
lib/web/pdf_single_page_viewer.js

@@ -39,8 +39,8 @@ class PDFSinglePageViewer extends _base_viewer.BaseViewer {
     });
   }
 
-  get _setDocumentViewerElement() {
-    return (0, _pdf.shadow)(this, "_setDocumentViewerElement", this._shadowViewer);
+  get _viewerElement() {
+    return (0, _pdf.shadow)(this, "_viewerElement", this._shadowViewer);
   }
 
   _resetView() {

+ 2 - 2
lib/web/pdf_viewer.component.js

@@ -143,5 +143,5 @@ var _pdf_single_page_viewer = require("./pdf_single_page_viewer.js");
 
 var _pdf_viewer = require("./pdf_viewer.js");
 
-const pdfjsVersion = '2.4.456';
-const pdfjsBuild = '228a591c';
+const pdfjsVersion = '2.5.207';
+const pdfjsBuild = '0974d605';

+ 2 - 2
lib/web/pdf_viewer.js

@@ -31,8 +31,8 @@ var _base_viewer = require("./base_viewer.js");
 var _pdf = require("../pdf");
 
 class PDFViewer extends _base_viewer.BaseViewer {
-  get _setDocumentViewerElement() {
-    return (0, _pdf.shadow)(this, "_setDocumentViewerElement", this.viewer);
+  get _viewerElement() {
+    return (0, _pdf.shadow)(this, "_viewerElement", this.viewer);
   }
 
   _scrollIntoView({

+ 4 - 1
lib/web/preferences.js

@@ -25,6 +25,9 @@ Object.defineProperty(exports, "__esModule", {
   value: true
 });
 exports.BasePreferences = void 0;
+
+var _app_options = require("./app_options.js");
+
 let defaultPreferences = null;
 
 function getDefaultPreferences() {
@@ -33,9 +36,9 @@ function getDefaultPreferences() {
       "cursorToolOnLoad": 0,
       "defaultZoomValue": "",
       "disablePageLabels": false,
+      "enablePermissions": false,
       "enablePrintAutoRotate": false,
       "enableWebGL": false,
-      "eventBusDispatchToDOM": false,
       "externalLinkTarget": 0,
       "historyUpdateUrl": false,
       "ignoreDestinationZoom": false,

+ 1 - 3
lib/web/text_layer_builder.js

@@ -26,8 +26,6 @@ Object.defineProperty(exports, "__esModule", {
 });
 exports.DefaultTextLayerFactory = exports.TextLayerBuilder = void 0;
 
-var _ui_utils = require("./ui_utils.js");
-
 var _pdf = require("../pdf");
 
 const EXPAND_DIVS_TIMEOUT = 300;
@@ -42,7 +40,7 @@ class TextLayerBuilder {
     enhanceTextSelection = false
   }) {
     this.textLayerDiv = textLayerDiv;
-    this.eventBus = eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this.eventBus = eventBus;
     this.textContent = null;
     this.textContentItemsStr = [];
     this.textContentStream = null;

+ 3 - 55
lib/web/ui_utils.js

@@ -28,7 +28,6 @@ exports.isValidRotation = isValidRotation;
 exports.isValidScrollMode = isValidScrollMode;
 exports.isValidSpreadMode = isValidSpreadMode;
 exports.isPortraitOrientation = isPortraitOrientation;
-exports.getGlobalEventBus = getGlobalEventBus;
 exports.clamp = clamp;
 exports.getPDFFileNameFromURL = getPDFFileNameFromURL;
 exports.noContextMenuHandler = noContextMenuHandler;
@@ -236,7 +235,7 @@ function binarySearchFirstItem(items, condition) {
   let minIndex = 0;
   let maxIndex = items.length - 1;
 
-  if (items.length === 0 || !condition(items[maxIndex])) {
+  if (maxIndex < 0 || !condition(items[maxIndex])) {
     return items.length;
   }
 
@@ -566,41 +565,12 @@ const animationStarted = new Promise(function (resolve) {
 exports.animationStarted = animationStarted;
 
 function dispatchDOMEvent(eventName, args = null) {
-  const details = Object.create(null);
-
-  if (args && args.length > 0) {
-    const obj = args[0];
-
-    for (const key in obj) {
-      const value = obj[key];
-
-      if (key === "source") {
-        if (value === window || value === document) {
-          return;
-        }
-
-        continue;
-      }
-
-      details[key] = value;
-    }
-  }
-
-  const event = document.createEvent("CustomEvent");
-  event.initCustomEvent(eventName, true, true, details);
-  document.dispatchEvent(event);
+  throw new Error("Not implemented: dispatchDOMEvent");
 }
 
 class EventBus {
-  constructor({
-    dispatchToDOM = false
-  } = {}) {
+  constructor(options) {
     this._listeners = Object.create(null);
-    this._dispatchToDOM = dispatchToDOM === true;
-
-    if (dispatchToDOM) {
-      console.error("The `eventBusDispatchToDOM` option/preference is deprecated, " + "add event listeners to the EventBus instance rather than the DOM.");
-    }
   }
 
   on(eventName, listener) {
@@ -619,11 +589,6 @@ class EventBus {
     const eventListeners = this._listeners[eventName];
 
     if (!eventListeners || eventListeners.length === 0) {
-      if (this._dispatchToDOM) {
-        const args = Array.prototype.slice.call(arguments, 1);
-        dispatchDOMEvent(eventName, args);
-      }
-
       return;
     }
 
@@ -651,10 +616,6 @@ class EventBus {
       });
       externalListeners = null;
     }
-
-    if (this._dispatchToDOM) {
-      dispatchDOMEvent(eventName, args);
-    }
   }
 
   _on(eventName, listener, options = null) {
@@ -688,19 +649,6 @@ class EventBus {
 }
 
 exports.EventBus = EventBus;
-let globalEventBus = null;
-
-function getGlobalEventBus(dispatchToDOM = false) {
-  console.error("getGlobalEventBus is deprecated, use a manually created EventBus instance instead.");
-
-  if (!globalEventBus) {
-    globalEventBus = new EventBus({
-      dispatchToDOM
-    });
-  }
-
-  return globalEventBus;
-}
 
 function clamp(v, min, max) {
   return Math.min(Math.max(v, min), max);

+ 8 - 9
lib/web/view_history.js

@@ -33,23 +33,22 @@ class ViewHistory {
     this.cacheSize = cacheSize;
     this._initializedPromise = this._readFromStorage().then(databaseStr => {
       const database = JSON.parse(databaseStr || "{}");
+      let index = -1;
 
-      if (!("files" in database)) {
+      if (!Array.isArray(database.files)) {
         database.files = [];
       } else {
         while (database.files.length >= this.cacheSize) {
           database.files.shift();
         }
-      }
-
-      let index = -1;
 
-      for (let i = 0, length = database.files.length; i < length; i++) {
-        const branch = database.files[i];
+        for (let i = 0, ii = database.files.length; i < ii; i++) {
+          const branch = database.files[i];
 
-        if (branch.fingerprint === this.fingerprint) {
-          index = i;
-          break;
+          if (branch.fingerprint === this.fingerprint) {
+            index = i;
+            break;
+          }
         }
       }
 

+ 14 - 1
lib/web/viewer_compatibility.js

@@ -21,13 +21,25 @@
  */
 "use strict";
 
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.viewerCompatibilityParams = void 0;
 const compatibilityParams = Object.create(null);
 {
   const userAgent = typeof navigator !== "undefined" && navigator.userAgent || "";
   const platform = typeof navigator !== "undefined" && navigator.platform || "";
   const maxTouchPoints = typeof navigator !== "undefined" && navigator.maxTouchPoints || 1;
   const isAndroid = /Android/.test(userAgent);
+  const isIE = /Trident/.test(userAgent);
   const isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === "MacIntel" && maxTouchPoints > 1;
+  const isIOSChrome = /CriOS/.test(userAgent);
+
+  (function checkOnBlobSupport() {
+    if (isIE || isIOSChrome) {
+      compatibilityParams.disableCreateObjectURL = true;
+    }
+  })();
 
   (function checkCanvasSizeLimitation() {
     if (isIOS || isAndroid) {
@@ -35,4 +47,5 @@ const compatibilityParams = Object.create(null);
     }
   })();
 }
-exports.viewerCompatibilityParams = Object.freeze(compatibilityParams);
+const viewerCompatibilityParams = Object.freeze(compatibilityParams);
+exports.viewerCompatibilityParams = viewerCompatibilityParams;

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "pdfjs-dist",
-  "version": "2.4.456",
+  "version": "2.5.207",
   "main": "build/pdf.js",
   "description": "Generic build of Mozilla's PDF.js library.",
   "keywords": [

+ 5 - 9
web/pdf_viewer.css

@@ -29,8 +29,7 @@
   position: absolute;
   white-space: pre;
   cursor: text;
-  -webkit-transform-origin: 0% 0%;
-          transform-origin: 0% 0%;
+  transform-origin: 0% 0%;
 }
 
 .textLayer .highlight {
@@ -182,13 +181,11 @@
 }
 
 .annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before {
-  -webkit-transform: rotate(45deg);
-          transform: rotate(45deg);
+  transform: rotate(45deg);
 }
 
 .annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after {
-  -webkit-transform: rotate(-45deg);
-          transform: rotate(-45deg);
+  transform: rotate(-45deg);
 }
 
 .annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before {
@@ -292,9 +289,8 @@
   overflow: visible;
   border: 9px solid transparent;
   background-clip: content-box;
-  -webkit-border-image: url(images/shadow.png) 9 9 repeat;
-       -o-border-image: url(images/shadow.png) 9 9 repeat;
-          border-image: url(images/shadow.png) 9 9 repeat;
+  -o-border-image: url(images/shadow.png) 9 9 repeat;
+     border-image: url(images/shadow.png) 9 9 repeat;
   background-color: rgba(255, 255, 255, 1);
 }
 

+ 97 - 127
web/pdf_viewer.js

@@ -233,20 +233,20 @@ var _pdf_link_service = __w_pdfjs_require__(4);
 
 var _download_manager = __w_pdfjs_require__(6);
 
-var _genericl10n = __w_pdfjs_require__(7);
+var _genericl10n = __w_pdfjs_require__(8);
 
-var _pdf_find_controller = __w_pdfjs_require__(9);
+var _pdf_find_controller = __w_pdfjs_require__(10);
 
-var _pdf_history = __w_pdfjs_require__(11);
+var _pdf_history = __w_pdfjs_require__(12);
 
-var _pdf_page_view = __w_pdfjs_require__(12);
+var _pdf_page_view = __w_pdfjs_require__(13);
 
 var _pdf_single_page_viewer = __w_pdfjs_require__(15);
 
 var _pdf_viewer = __w_pdfjs_require__(17);
 
-const pdfjsVersion = '2.4.456';
-const pdfjsBuild = '228a591c';
+const pdfjsVersion = '2.5.207';
+const pdfjsBuild = '0974d605';
 
 /***/ }),
 /* 1 */
@@ -390,7 +390,6 @@ exports.isValidRotation = isValidRotation;
 exports.isValidScrollMode = isValidScrollMode;
 exports.isValidSpreadMode = isValidSpreadMode;
 exports.isPortraitOrientation = isPortraitOrientation;
-exports.getGlobalEventBus = getGlobalEventBus;
 exports.clamp = clamp;
 exports.getPDFFileNameFromURL = getPDFFileNameFromURL;
 exports.noContextMenuHandler = noContextMenuHandler;
@@ -598,7 +597,7 @@ function binarySearchFirstItem(items, condition) {
   let minIndex = 0;
   let maxIndex = items.length - 1;
 
-  if (items.length === 0 || !condition(items[maxIndex])) {
+  if (maxIndex < 0 || !condition(items[maxIndex])) {
     return items.length;
   }
 
@@ -928,41 +927,12 @@ const animationStarted = new Promise(function (resolve) {
 exports.animationStarted = animationStarted;
 
 function dispatchDOMEvent(eventName, args = null) {
-  const details = Object.create(null);
-
-  if (args && args.length > 0) {
-    const obj = args[0];
-
-    for (const key in obj) {
-      const value = obj[key];
-
-      if (key === "source") {
-        if (value === window || value === document) {
-          return;
-        }
-
-        continue;
-      }
-
-      details[key] = value;
-    }
-  }
-
-  const event = document.createEvent("CustomEvent");
-  event.initCustomEvent(eventName, true, true, details);
-  document.dispatchEvent(event);
+  throw new Error("Not implemented: dispatchDOMEvent");
 }
 
 class EventBus {
-  constructor({
-    dispatchToDOM = false
-  } = {}) {
+  constructor(options) {
     this._listeners = Object.create(null);
-    this._dispatchToDOM = dispatchToDOM === true;
-
-    if (dispatchToDOM) {
-      console.error("The `eventBusDispatchToDOM` option/preference is deprecated, " + "add event listeners to the EventBus instance rather than the DOM.");
-    }
   }
 
   on(eventName, listener) {
@@ -981,11 +951,6 @@ class EventBus {
     const eventListeners = this._listeners[eventName];
 
     if (!eventListeners || eventListeners.length === 0) {
-      if (this._dispatchToDOM) {
-        const args = Array.prototype.slice.call(arguments, 1);
-        dispatchDOMEvent(eventName, args);
-      }
-
       return;
     }
 
@@ -1013,10 +978,6 @@ class EventBus {
       });
       externalListeners = null;
     }
-
-    if (this._dispatchToDOM) {
-      dispatchDOMEvent(eventName, args);
-    }
   }
 
   _on(eventName, listener, options = null) {
@@ -1050,19 +1011,6 @@ class EventBus {
 }
 
 exports.EventBus = EventBus;
-let globalEventBus = null;
-
-function getGlobalEventBus(dispatchToDOM = false) {
-  console.error("getGlobalEventBus is deprecated, use a manually created EventBus instance instead.");
-
-  if (!globalEventBus) {
-    globalEventBus = new EventBus({
-      dispatchToDOM
-    });
-  }
-
-  return globalEventBus;
-}
 
 function clamp(v, min, max) {
   return Math.min(Math.max(v, min), max);
@@ -1185,7 +1133,7 @@ class PDFLinkService {
     externalLinkEnabled = true,
     ignoreDestinationZoom = false
   } = {}) {
-    this.eventBus = eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this.eventBus = eventBus;
     this.externalLinkTarget = externalLinkTarget;
     this.externalLinkRel = externalLinkRel;
     this.externalLinkEnabled = externalLinkEnabled;
@@ -1333,16 +1281,11 @@ class PDFLinkService {
       if ("search" in params) {
         this.eventBus.dispatch("findfromurlhash", {
           source: this,
-          query: params["search"].replace(/"/g, ""),
-          phraseSearch: params["phrase"] === "true"
+          query: params.search.replace(/"/g, ""),
+          phraseSearch: params.phrase === "true"
         });
       }
 
-      if ("nameddest" in params) {
-        this.navigateTo(params.nameddest);
-        return;
-      }
-
       if ("page" in params) {
         pageNumber = params.page | 0 || 1;
       }
@@ -1395,6 +1338,10 @@ class PDFLinkService {
           mode: params.pagemode
         });
       }
+
+      if ("nameddest" in params) {
+        this.navigateTo(params.nameddest);
+      }
     } else {
       dest = unescape(hash);
 
@@ -1615,8 +1562,6 @@ Object.defineProperty(exports, "__esModule", {
 });
 exports.DefaultTextLayerFactory = exports.TextLayerBuilder = void 0;
 
-var _ui_utils = __w_pdfjs_require__(3);
-
 var _pdfjsLib = __w_pdfjs_require__(2);
 
 const EXPAND_DIVS_TIMEOUT = 300;
@@ -1631,7 +1576,7 @@ class TextLayerBuilder {
     enhanceTextSelection = false
   }) {
     this.textLayerDiv = textLayerDiv;
-    this.eventBus = eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this.eventBus = eventBus;
     this.textContent = null;
     this.textContentItemsStr = [];
     this.textContentStream = null;
@@ -2003,8 +1948,10 @@ exports.DownloadManager = void 0;
 
 var _pdfjsLib = __w_pdfjs_require__(2);
 
+var _viewer_compatibility = __w_pdfjs_require__(7);
+
 ;
-const DISABLE_CREATE_OBJECT_URL = _pdfjsLib.apiCompatibilityParams.disableCreateObjectURL || false;
+const DISABLE_CREATE_OBJECT_URL = _viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL || false;
 
 function download(blobUrl, filename) {
   const a = document.createElement("a");
@@ -2081,12 +2028,48 @@ exports.DownloadManager = DownloadManager;
 "use strict";
 
 
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.viewerCompatibilityParams = void 0;
+const compatibilityParams = Object.create(null);
+{
+  const userAgent = typeof navigator !== "undefined" && navigator.userAgent || "";
+  const platform = typeof navigator !== "undefined" && navigator.platform || "";
+  const maxTouchPoints = typeof navigator !== "undefined" && navigator.maxTouchPoints || 1;
+  const isAndroid = /Android/.test(userAgent);
+  const isIE = /Trident/.test(userAgent);
+  const isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === "MacIntel" && maxTouchPoints > 1;
+  const isIOSChrome = /CriOS/.test(userAgent);
+
+  (function checkOnBlobSupport() {
+    if (isIE || isIOSChrome) {
+      compatibilityParams.disableCreateObjectURL = true;
+    }
+  })();
+
+  (function checkCanvasSizeLimitation() {
+    if (isIOS || isAndroid) {
+      compatibilityParams.maxCanvasPixels = 5242880;
+    }
+  })();
+}
+const viewerCompatibilityParams = Object.freeze(compatibilityParams);
+exports.viewerCompatibilityParams = viewerCompatibilityParams;
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
 Object.defineProperty(exports, "__esModule", {
   value: true
 });
 exports.GenericL10n = void 0;
 
-__w_pdfjs_require__(8);
+__w_pdfjs_require__(9);
 
 const webL10n = document.webL10n;
 
@@ -2125,7 +2108,7 @@ class GenericL10n {
 exports.GenericL10n = GenericL10n;
 
 /***/ }),
-/* 8 */
+/* 9 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -2948,7 +2931,7 @@ document.webL10n = function (window, document, undefined) {
 }(window, document);
 
 /***/ }),
-/* 9 */
+/* 10 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -2959,11 +2942,11 @@ Object.defineProperty(exports, "__esModule", {
 });
 exports.PDFFindController = exports.FindState = void 0;
 
-var _ui_utils = __w_pdfjs_require__(3);
-
 var _pdfjsLib = __w_pdfjs_require__(2);
 
-var _pdf_find_utils = __w_pdfjs_require__(10);
+var _pdf_find_utils = __w_pdfjs_require__(11);
+
+var _ui_utils = __w_pdfjs_require__(3);
 
 const FindState = {
   FOUND: 0,
@@ -3007,7 +2990,7 @@ class PDFFindController {
     eventBus
   }) {
     this._linkService = linkService;
-    this._eventBus = eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this._eventBus = eventBus;
 
     this._reset();
 
@@ -3629,7 +3612,7 @@ class PDFFindController {
 exports.PDFFindController = PDFFindController;
 
 /***/ }),
-/* 10 */
+/* 11 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -3725,7 +3708,7 @@ function getCharacterType(charCode) {
 }
 
 /***/ }),
-/* 11 */
+/* 12 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -3754,7 +3737,7 @@ class PDFHistory {
     eventBus
   }) {
     this.linkService = linkService;
-    this.eventBus = eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this.eventBus = eventBus;
     this._initialized = false;
     this._fingerprint = "";
     this.reset();
@@ -3813,7 +3796,7 @@ class PDFHistory {
         hash,
         page,
         rotation
-      } = this._parseCurrentHash();
+      } = this._parseCurrentHash(true);
 
       if (!hash || reInitialized || resetHistory) {
         this._pushOrReplaceState(null, true);
@@ -4091,11 +4074,13 @@ class PDFHistory {
     this._numPositionUpdates = 0;
   }
 
-  _parseCurrentHash() {
+  _parseCurrentHash(checkNameddest = false) {
     const hash = unescape(getCurrentHash()).substring(1);
-    let page = (0, _ui_utils.parseQueryString)(hash).page | 0;
+    const params = (0, _ui_utils.parseQueryString)(hash);
+    const nameddest = params.nameddest || "";
+    let page = params.page | 0;
 
-    if (!(Number.isInteger(page) && page > 0 && page <= this.linkService.pagesCount)) {
+    if (!(Number.isInteger(page) && page > 0 && page <= this.linkService.pagesCount) || checkNameddest && nameddest.length > 0) {
       page = null;
     }
 
@@ -4311,7 +4296,7 @@ function isDestArraysEqual(firstDest, secondDest) {
 }
 
 /***/ }),
-/* 12 */
+/* 13 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -4326,9 +4311,9 @@ var _ui_utils = __w_pdfjs_require__(3);
 
 var _pdfjsLib = __w_pdfjs_require__(2);
 
-var _pdf_rendering_queue = __w_pdfjs_require__(13);
+var _pdf_rendering_queue = __w_pdfjs_require__(14);
 
-var _viewer_compatibility = __w_pdfjs_require__(14);
+var _viewer_compatibility = __w_pdfjs_require__(7);
 
 const MAX_CANVAS_PIXELS = _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels || 16777216;
 
@@ -4350,7 +4335,7 @@ class PDFPageView {
     this.renderInteractiveForms = options.renderInteractiveForms || false;
     this.useOnlyCssZoom = options.useOnlyCssZoom || false;
     this.maxCanvasPixels = options.maxCanvasPixels || MAX_CANVAS_PIXELS;
-    this.eventBus = options.eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this.eventBus = options.eventBus;
     this.renderingQueue = options.renderingQueue;
     this.textLayerFactory = options.textLayerFactory;
     this.annotationLayerFactory = options.annotationLayerFactory;
@@ -4909,7 +4894,7 @@ class PDFPageView {
 exports.PDFPageView = PDFPageView;
 
 /***/ }),
-/* 13 */
+/* 14 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
 
 "use strict";
@@ -5044,29 +5029,6 @@ class PDFRenderingQueue {
 
 exports.PDFRenderingQueue = PDFRenderingQueue;
 
-/***/ }),
-/* 14 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-const compatibilityParams = Object.create(null);
-{
-  const userAgent = typeof navigator !== "undefined" && navigator.userAgent || "";
-  const platform = typeof navigator !== "undefined" && navigator.platform || "";
-  const maxTouchPoints = typeof navigator !== "undefined" && navigator.maxTouchPoints || 1;
-  const isAndroid = /Android/.test(userAgent);
-  const isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || platform === "MacIntel" && maxTouchPoints > 1;
-
-  (function checkCanvasSizeLimitation() {
-    if (isIOS || isAndroid) {
-      compatibilityParams.maxCanvasPixels = 5242880;
-    }
-  })();
-}
-exports.viewerCompatibilityParams = Object.freeze(compatibilityParams);
-
 /***/ }),
 /* 15 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
@@ -5092,8 +5054,8 @@ class PDFSinglePageViewer extends _base_viewer.BaseViewer {
     });
   }
 
-  get _setDocumentViewerElement() {
-    return (0, _pdfjsLib.shadow)(this, "_setDocumentViewerElement", this._shadowViewer);
+  get _viewerElement() {
+    return (0, _pdfjsLib.shadow)(this, "_viewerElement", this._shadowViewer);
   }
 
   _resetView() {
@@ -5203,13 +5165,13 @@ exports.BaseViewer = void 0;
 
 var _ui_utils = __w_pdfjs_require__(3);
 
-var _pdf_rendering_queue = __w_pdfjs_require__(13);
+var _pdf_rendering_queue = __w_pdfjs_require__(14);
 
 var _annotation_layer_builder = __w_pdfjs_require__(1);
 
 var _pdfjsLib = __w_pdfjs_require__(2);
 
-var _pdf_page_view = __w_pdfjs_require__(12);
+var _pdf_page_view = __w_pdfjs_require__(13);
 
 var _pdf_link_service = __w_pdfjs_require__(4);
 
@@ -5276,7 +5238,7 @@ class BaseViewer {
     this._name = this.constructor.name;
     this.container = options.container;
     this.viewer = options.viewer || options.container.firstElementChild;
-    this.eventBus = options.eventBus || (0, _ui_utils.getGlobalEventBus)();
+    this.eventBus = options.eventBus;
     this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService();
     this.downloadManager = options.downloadManager || null;
     this.findController = options.findController || null;
@@ -5483,8 +5445,16 @@ class BaseViewer {
     return this.pdfDocument ? this._pagesCapability.promise : null;
   }
 
-  get _setDocumentViewerElement() {
-    throw new Error("Not implemented: _setDocumentViewerElement");
+  get _viewerElement() {
+    throw new Error("Not implemented: _viewerElement");
+  }
+
+  _onePageRenderedOrForceFetch() {
+    if (!this.container.offsetParent || this._getVisiblePages().views.length === 0) {
+      return Promise.resolve();
+    }
+
+    return this._onePageRenderedCapability.promise;
   }
 
   setDocument(pdfDocument) {
@@ -5551,7 +5521,7 @@ class BaseViewer {
 
       for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {
         const pageView = new _pdf_page_view.PDFPageView({
-          container: this._setDocumentViewerElement,
+          container: this._viewerElement,
           eventBus: this.eventBus,
           id: pageNum,
           scale,
@@ -5583,12 +5553,12 @@ class BaseViewer {
         this._updateSpreadMode();
       }
 
-      this._onePageRenderedCapability.promise.then(() => {
+      this._onePageRenderedOrForceFetch().then(() => {
         if (this.findController) {
           this.findController.setDocument(pdfDocument);
         }
 
-        if (pdfDocument.loadingParams["disableAutoFetch"] || pagesCount > 7500) {
+        if (pdfDocument.loadingParams.disableAutoFetch || pagesCount > 7500) {
           this._pagesCapability.resolve();
 
           return;
@@ -6318,8 +6288,8 @@ var _base_viewer = __w_pdfjs_require__(16);
 var _pdfjsLib = __w_pdfjs_require__(2);
 
 class PDFViewer extends _base_viewer.BaseViewer {
-  get _setDocumentViewerElement() {
-    return (0, _pdfjsLib.shadow)(this, "_setDocumentViewerElement", this.viewer);
+  get _viewerElement() {
+    return (0, _pdfjsLib.shadow)(this, "_viewerElement", this.viewer);
   }
 
   _scrollIntoView({

部分文件因为文件数量过多而无法显示